home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 143_01 / index.c < prev    next >
Text File  |  1985-11-14  |  4KB  |  169 lines

  1. /*
  2. %CC1 $1.C -X -E5000
  3. %CLINK $1 DIO  -S
  4. %DELETE    $1.CRL 
  5. */
  6. /*********************************************************************
  7. *                INDEX                *
  8. **********************************************************************
  9. *           COPYRIGHT 1983 EUGENE H. MALLORY             *
  10. *********************************************************************/
  11.  
  12. #include "BDSCIO.H"
  13. #include "DIO.H"
  14.  
  15. main(argc,argv)
  16.  
  17. char **argv;
  18. int argc;
  19.  
  20. BEGIN  
  21.     int     i,j,n,k,flag,skip;
  22.     int    col;
  23.     char string[MAXLINE];
  24.     char nlin[MAXLINE];
  25.     char key[MAXLINE];
  26.     char ntext[MAXLINE];
  27.     char olin[MAXLINE];
  28.     int    number[200];
  29.  
  30.     int    ii,jj,optionerr;
  31.     char *ss;
  32.  
  33.     dioinit(&argc,argv);
  34.  
  35. /*********************************************************************
  36. ***          ARGUMENT PROCESSING                   ***
  37. *********************************************************************/
  38.  
  39.     col = 60;
  40.     optionerr = 0;
  41.     
  42.     for (ii=argc-1;ii>0;ii--)
  43.         if (argv[ii][0] == '-')
  44.         BEGIN
  45.             for    (ss = &argv[ii][1]; *ss    != '\0';)
  46.             BEGIN
  47.                 switch (toupper(*ss++))
  48.                 BEGIN
  49.                     case 'C':
  50.                     col= atoi(ss);
  51.                     break;
  52.                     case 'H':
  53.                     optionerr = TRUE;
  54.                     break;
  55.                     default:
  56.                     typef("INDEX: Illegal option %c.\n"
  57.                         ,*--ss);
  58.                     ss++;
  59.                     optionerr = TRUE;
  60.                     break;
  61.                 END
  62.                 while (isdigit(*ss)) ss++;
  63.             END
  64.             for    (jj=ii;jj<(argc-1);jj++) argv[jj] = argv[jj+1];
  65.             argc--;
  66.         END
  67.     
  68.  
  69.     if (optionerr) 
  70.         BEGIN
  71.         typef("INDEX: Legal options are:\n");
  72.         typef("-Cn    Column width.\n");
  73.         exit(0);
  74.         END
  75.         
  76.     if (col    < 12) error("INDEX: Column less    than 12.");
  77.     
  78. /*********************************************************************
  79. ***             END OF ARGUMENT PROCESSING               ***
  80. *********************************************************************/
  81.         
  82.  
  83.     key[0] = 0;
  84.     nlin[0] = 0;
  85.     i =    0;
  86.     
  87.     do
  88.     BEGIN
  89.         flag = getstring(string);
  90.         if (!flag && strlen(string)    < 9)
  91.         error("INDEX: Input line too short.");
  92.         string[strlen(string)-1] = 0; /* remove new    line */
  93.         if (!flag && strequ(key,&string[8]))
  94.         BEGIN
  95.             n =    atoi(string);
  96.             if (i == 0 || n != number[i-1]) number[i++]    = n;
  97.         END
  98.         else     /* NEW    KEY, PRINT LAST    INDEX LINE(S) */
  99.         BEGIN
  100.             if (i > 0)
  101.             BEGIN
  102.               sprintf(olin,"%s    ",key);
  103.               nlin[0] =    0;
  104.               for (j=0;j<i;j++)
  105.             BEGIN
  106.                 if (j <    i-1)
  107.                     sprintf(ntext,"%d,",number[j]);
  108.                 else
  109.                     sprintf(ntext,"%d",number[j]);
  110.                 if (strlen(olin) 
  111.                     + strlen(ntext)
  112.                     + strlen(nlin)
  113.                     < col)
  114.                     strcat(nlin,ntext);
  115.                 else
  116.                     BEGIN
  117.                     puts(olin);
  118.                     skip = col-strlen(olin)-strlen(nlin);
  119.                     for (k=1;k<=(skip);k++)
  120.                         if (k == 1 ||
  121.                         k == skip ||
  122.                         olin[0]    == ' ')
  123.                         putchar(' ');
  124.                         else
  125.                         putchar('.');
  126.                     puts(nlin);
  127.                     puts("\n");
  128.                     strcpy(olin,"     ");
  129.                     strcpy(nlin,ntext);
  130.                     END
  131.             END
  132.               puts(olin);
  133.             skip = col-strlen(olin)-strlen(nlin);
  134.             for    (k=1;k<=(skip);k++)
  135.             if (k == 1 ||
  136.                 k == skip ||
  137.                 olin[0] == ' ')
  138.                 putchar(' ');
  139.             else
  140.                 putchar('.');
  141.               puts(nlin);
  142.               puts("\n");
  143.             END
  144.             if (!flag)
  145.             strcpy(key,&string[8]);
  146.             i =    0;
  147.             number[i++]    = atoi(string);
  148.         END
  149.     END
  150.     while (!flag);
  151.     
  152.     dioflush();
  153. END  
  154.  
  155.  
  156. /*****************************************************/
  157. /*    STREQU - STRING EQUAL    (IGNORES CASE)           */
  158. /*    RETURNS:       1 if    EQUAL               */
  159. /*               0 if    NOT EQUAL           */
  160. /*****************************************************/
  161.  
  162. strequ(s1,s2)
  163. char *s1,*s2;
  164. BEGIN
  165.     while (toupper(*s1++) == toupper(*s2++)) 
  166.         if (!*s1 &&    !*s2) return (1);
  167.     return (0);
  168. END
  169.