home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource1 / cenvid / find#.cmm < prev    next >
Text File  |  1993-04-13  |  2KB  |  59 lines

  1. // Number.cmm  CEnvi program to find the first number in a program's output
  2.  
  3. #define  DEFAULT_INDEX  1
  4.  
  5. main(ArgCount,ArgStrings)
  6. {
  7.    Index = DEFAULT_INDEX
  8.    if ( ArgCount != 1
  9.      && ( ArgCount != 2  ||  0 == (Index = atoi(ArgStrings[1])) ) )
  10.       Instructions()
  11.    else {
  12.       HowManyFound = 0; // this will keep a list of how many numbers found so far
  13.       while ( (input = gets()) ) {
  14.          // get the next number in this line
  15.          while ( (input = strpbrk(input,"-0123456789")) ) {
  16.             if ( '-' == input[0] && !isdigit(input[1]) ) {
  17.                // this was a negative sign, but no numbers follow
  18.                input++
  19.             } else {
  20.                // convert these digits to a number
  21.                NumberList[HowManyFound] = atol(input)
  22.                if ( ++HowManyFound == Index )
  23.                      return(NUMBER = NumberList[HowManyFound-1])
  24.                // skip past all the digits text
  25.                input += 1 + strspn(input+1,"0123456789")
  26.             }
  27.          }
  28.       }
  29.       if ( Index < 0 ) {
  30.          // if enough numbers have been found, then find this offset from the end
  31.          if ( -Index <= HowManyFound ) {
  32.             return(NUMBER = NumberList[HowManyFound+Index])
  33.          }
  34.       }
  35.    }
  36.    // if did not return earlier, then number was not found
  37.    undefine(NUMBER)
  38.    return(0)
  39. }
  40.  
  41. Instructions()
  42. {
  43.    printf("\a\n")
  44.    printf("Find#.cmm - Read input for numbers. Set the NUMBER environment variable to the\n")
  45.    printf("            number found and return ERRORLEVEL to number found. 0 if not found.\n")
  46.    printf("\n")
  47.    printf("USAGE: CEnvi Find#.cmm [Index]\n")
  48.    printf("\n")
  49.    printf("Where Index tells which found number to return, where 1 is the first number\n")
  50.    printf("found, 2 is the seconds number, and so on; -1 is the last number found, -2 is\n")
  51.    printf("the second to last number, and so on.  If Index is not supplied then the\n")
  52.    printf("default is 1.  If the number is not found then NUMBER is cleared.\n")
  53.    printf("\n")
  54.    printf("Example: To find how many bytes are used the current directory:\n")
  55.    printf("             dir | cenvi Find#.cmm -2\n")
  56.    printf("\n")
  57. }
  58.  
  59.