home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume4 / fxref / fxrefb.c < prev    next >
C/C++ Source or Header  |  1989-02-03  |  2KB  |  107 lines

  1. /* second part of f77 xref program.  Developed from Bourne p. 207 */
  2. #include <stdio.h>
  3. static char SCCSID[] = "@(#)fxrefb.c    Ver. 2.4, 88/08/08 15:53:37";
  4. #define MAXW 256
  5. char    lastw[MAXW]; /* last word read */
  6. char    lastc;
  7.  
  8. main(argc,argv)
  9.     int argc;
  10.     char *argv[];
  11. {
  12.     char f1[MAXW], f2[MAXW];
  13.     char first=0;
  14.     int width, col=0;
  15.  
  16.     switch(argc) {
  17.     case 1:
  18.         width=80; /* default */
  19.         break;
  20.     case 2:
  21.         if(sscanf(argv[1], "-w%d", &width) == 1) {
  22.             width = 5 * (width / 5);
  23.             break;
  24.         }
  25.     default:
  26.         printf("%s: illegal argument\n", argv[0]);
  27.         exit(1);
  28.     }
  29.     f1[0]=0;
  30.     f2[0]=0;
  31.  
  32.     printf("\t\t\tFlags mean:\n");
  33.     printf("h\tprogram unit header  \t");
  34.     printf("p\tPARAMETER definition \n");
  35.     printf("c\tCOMMON statement     \t");
  36.     printf("~\tEQUIVALENCE          \n");
  37.     printf("d\tDIMENSION statement  \t");
  38.     printf("$\tCHARACTER declaration\n");
  39.     printf("L\tLOGICAL declaration  \t");
  40.     printf("%%\tINTEGER declaration  \n");
  41.     printf("!\tREAL declaration     \t");
  42.     printf("#\tDOUBLE PRECISION declaration\n");
  43.     printf("C\tCOMPLEX declaration  \t");
  44.     printf("i\tDATA initialization  \n");
  45.     printf("x\tEXTERNAL             \t");
  46.     printf("@\tCALL                 \n");
  47.     printf("D\tDO loop control      \t");
  48.     printf("?\tIF test              \n");
  49.     printf("=\tassignment statement \t");
  50.     printf("o\tOPEN statement       \n");
  51.     printf("<\tinput                \t");
  52.     printf(">\toutput               \n");
  53.  
  54.     while(word() != EOF) {
  55.         if(lastw[0] != first) {
  56.             first = lastw[0];
  57.             printf("\n");
  58.             col=0;
  59.         }
  60.         if(col >= width) {
  61.             printf("\n                    ");
  62.             col=20;
  63.         }
  64.         if(strcmp(lastw, f1) == 0) {
  65.             word();
  66.             if( ! strcmp(lastw, f2) == 0) {
  67.                 printf("\n          %-10s", lastw);
  68.                 col=20;
  69.                 strcpy(f2, lastw);
  70.             }
  71.         }
  72.         else {
  73.             strcpy(f1, lastw);
  74.             printf("\n%-10s", f1);
  75.             col=10;
  76.             word();
  77.             strcpy(f2, lastw);
  78.             printf("%-10s", f2);
  79.             col += 10;
  80.         }
  81.         if(lastc != '\n') {
  82.             word();
  83.             printf("%5s", lastw);
  84.             col += 5;
  85.         }
  86.         lastc = 0;
  87.     }
  88.     printf("\n");
  89.     exit(0);
  90. }
  91.  
  92. int word()
  93. {
  94.     register char *p=lastw;
  95.     register int c;
  96.  
  97.     if(lastc != '\n') {
  98.         while((c = getchar()) != '\t' && c != '\n' && c != EOF) {
  99.             if(p < &lastw[MAXW])
  100.                 *p++ = c;
  101.         }
  102.         lastc=c;
  103.     }
  104.     *p++ = 0;
  105.     return(lastc);
  106. }
  107.