home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / soundpot / p / ut-c.lbr / INCL.CZ / INCL.C
Encoding:
C/C++ Source or Header  |  1993-10-25  |  2.3 KB  |  102 lines

  1. /* incl.c -- UTOOL. Expand included files
  2.  
  3.      author: David H. Wolen
  4.      last change: 12/5/82
  5.  
  6.      usage:    incl <file
  7.  
  8.      input:    STDIN
  9.      output:   STDOUT
  10.  
  11.      notes:    Replaces lines that begin with #include "file"
  12.                with file contents.  The #include doesn't have
  13.                to start in column 1.  Up to 8 open files at a
  14.                time.
  15.  
  16.      linkage:  a:clink incl -f dio -ca (uses deff3.crl)
  17. */
  18.  
  19. #include "a:bdscio.h"
  20. #include "dio.h"
  21.  
  22. #define  STDIN  0
  23. #define  STDOUT 1
  24. #define  STDERR 4
  25.  
  26. main(argc,argv)
  27. int  argc;
  28. char *argv[];
  29. {
  30.      int  isstdin;
  31.      char ibuf[BUFSIZ];
  32.  
  33.      dioinit(&argc,argv);
  34.  
  35.      if(argc==1)
  36.           isstdin=TRUE;
  37.      else
  38.           {isstdin=FALSE;
  39.           if(fopen(*++argv,ibuf)==ERROR)
  40.                {fprintf(STDERR,"incl: can't open %s\n",*argv);
  41.                exit(dioflush());
  42.                }
  43.           }
  44.  
  45.      finclude(ibuf,isstdin);
  46.      dioflush();
  47. }
  48.  
  49.  
  50.  
  51. /* finclude -- recursive file include */
  52. finclude(ibuf,isstdin)
  53. char *ibuf;
  54. int  isstdin;
  55. {
  56.      char fbuf[BUFSIZ], line[MAXLINE], str[MAXLINE];
  57.      int  loc, i;
  58.  
  59.      while( isstdin ? fgets(line,STDIN) : fgets(line,ibuf))
  60.           {loc=getword(line,0,str);
  61.           if(!eqs(str,"#include"))
  62.                fputs(line,STDOUT);
  63.           else
  64.                {loc=getword(line,loc,str);
  65.                str[strlen(str)-1]='\0';      /* remove quotes */
  66.                for(i=0; i<strlen(str); i++)
  67.                     str[i]=str[i+1];
  68.                if(fopen(str,fbuf)==ERROR)
  69.                     {fprintf(STDERR,"incl: can't open %s\n",str);
  70.                     exit(dioflush());
  71.                     }
  72.                finclude(fbuf,FALSE);    /* recursion */
  73.                fclose(fbuf);
  74.                }
  75.           }
  76. }
  77.  
  78.  
  79.  
  80. /* getword -- get word from s[i] into out */
  81. getword(s,i,out)
  82. char *s, *out;
  83. int  i;
  84. {
  85.      int  j;
  86.  
  87.      while(isspace(s[i]))
  88.           i++;
  89.  
  90.      j=0;
  91.  
  92.      while(!isspace(s[i]) && s[i] != '\0')
  93.           out[j++]=s[i++];
  94.  
  95.      out[j]='\0';
  96.  
  97.      if(s[i]=='\0')
  98.           return (-1);
  99.      else
  100.           return (i);
  101. }
  102.