home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / languages / ami_nuweb0.87c.lha / pass1.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-12  |  2.2 KB  |  72 lines

  1. #include "global.h"
  2. void pass1(char *file_name)
  3. {
  4.   if (verbose_flag)
  5. #ifdef _AMIGA
  6.     fprintf(stderr, get_string(MSG_VERBOSE_14B), file_name);
  7. #else
  8.     fprintf(stderr, "reading %s\n", file_name);
  9. #endif
  10.   source_open(file_name);
  11.   init_scraps();
  12.   macro_names = NULL;
  13.   file_names = NULL;
  14.   user_names = NULL;
  15.   {
  16.     int c = source_get();
  17.     while (c != EOF) {
  18.       if (c == '@')
  19.         {
  20.           c = source_get();
  21.           switch (c) {
  22.             case 'O':
  23.             case 'o': {
  24.                         Name *name = collect_file_name(); /* returns a pointer to the name entry */
  25.                         int scrap = collect_scrap();      /* returns an index to the scrap */
  26.                         {
  27.                           Scrap_Node *def = (Scrap_Node *) arena_getmem(sizeof(Scrap_Node));
  28.                           def->scrap = scrap;
  29.                           def->next = name->defs;
  30.                           name->defs = def;
  31.                         }
  32.                       }
  33.                       break;
  34.             case 'D':
  35.             case 'd': {
  36.                         Name *name = collect_macro_name();
  37.                         int scrap = collect_scrap();
  38.                         {
  39.                           Scrap_Node *def = (Scrap_Node *) arena_getmem(sizeof(Scrap_Node));
  40.                           def->scrap = scrap;
  41.                           def->next = name->defs;
  42.                           name->defs = def;
  43.                         }
  44.                       }
  45.                       break;
  46.             case '@':
  47.             case 'u':
  48.             case 'm':
  49.             case 'f': /* ignore during this pass */
  50.                       break;
  51.         #ifdef _AMIGA
  52.             default:  fprintf(stderr, get_string(MSG_WARNING_15A),
  53.                               command_name, source_name, source_line);
  54.         #else
  55.             default:  fprintf(stderr,
  56.                               "%s: unexpected @ sequence ignored (%s, line %d)\n",
  57.                               command_name, source_name, source_line);
  58.         #endif
  59.                       break;
  60.           }
  61.         }
  62.       c = source_get();
  63.     }
  64.   }
  65.   if (tex_flag)
  66.     search();
  67.   {
  68.     reverse_lists(file_names);
  69.     reverse_lists(macro_names);
  70.     reverse_lists(user_names);
  71.   }