home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume38 / menushell / part03 / macro.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-30  |  815 b   |  51 lines

  1. #include "mshell.h"
  2.  
  3. struct macro {
  4.     DL_NODE n;
  5.     char *name;
  6.     char *def;
  7. };
  8.  
  9. static DLIST macrolist;
  10.  
  11. char *
  12. mac_lookup(name)
  13. char *name;
  14. {
  15.     struct macro *m;
  16.  
  17.     if (macrolist)
  18.         foreachnode(macrolist, m)
  19.             if (strcmp(m->name, name) == 0)
  20.                 return(m->def);
  21.  
  22.     /* note: could do a help/list macro here as builtin */
  23.  
  24.     printf("No definition for macro %s\n", name);
  25.     return("");
  26. }
  27.  
  28. load_macrofile(f)
  29. char *f;
  30. {
  31.     FILE *fp;
  32.     char line[MAXLEN], name[MAXLEN], def[MAXLEN];
  33.     struct macro *m;
  34.  
  35.     if ((fp = fopen(f, "r")) == NULL)
  36.         return;
  37.  
  38.     if (!macrolist)
  39.         macrolist = dl_create(DL_FREE);
  40.  
  41.     while (fgets(line, MAXLEN, fp))
  42.         if (
  43.             sscanf(line, "%[^=]=%[^\n]\n", name, def) == 2 &&
  44.             (m = getnode(sizeof(*m))) &&
  45.             (m->name = strsave(name)) &&
  46.             (m->def = strsave(def))
  47.         )
  48.             dl_prepend(macrolist, m);
  49.     fclose(fp);
  50. }
  51.