home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume3 / turbo_tools / part1 / initcmd.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1986-11-30  |  2.2 KB  |  86 lines

  1. {initcmd.pas}
  2.  
  3. {
  4.         Copyright (c) 1981
  5.         By:     Bell Telephone Laboratories, Inc. and
  6.                 Whitesmith's Ltd.,
  7.  
  8.         This software is derived from the book
  9.                 "Software Tools in Pascal", by
  10.                 Brian W. Kernighan and P. J. Plauger
  11.                 Addison-Wesley, 1981
  12.                 ISBN 0-201-10342-7
  13.  
  14.         Right is hereby granted to freely distribute or duplicate this
  15.         software, providing distribution or duplication is not for profit
  16.         or other commercial gain and that this copyright notice remains
  17.         intact.
  18. }
  19.  
  20. PROCEDURE INITCMD;
  21. VAR
  22.   FD:FILEDESC;
  23.   FNAME:XSTRING;
  24.   FT:FILTYP;
  25.   IDX:1..MAXSTR;
  26.   I,JSKIP:INTEGER;
  27.   JUNK:BOOLEAN;
  28.  
  29.  
  30. BEGIN
  31.   CMDFIL[STDIN]:=STDIO;
  32.   CMDFIL[STDOUT]:=STDIO;
  33.   CMDFIL[STDERR]:=STDIO;
  34.   FOR FD:=SUCC(STDERR) TO MAXOPEN DO
  35.     CMDFIL[FD]:=CLOSED;
  36.   WRITELN;
  37.   write('$ ');
  38.   FOR FT:= FIL1 TO FIL4 DO
  39.     CMDOPEN[FT]:=FALSE;
  40.   KBDN:=0;
  41.   if (not getline(cmdlin,STDIN,MAXSTR)) then error('NO CMDLINE');
  42. CMDARGS:=0;
  43.   JSKIP:=0;
  44.   IDX:=1;
  45.   WHILE ((CMDLIN[IDX]<>ENDSTR)
  46.     AND(CMDLIN[IDX]<>NEWLINE)) DO BEGIN
  47.       WHILE((CMDLIN[IDX]=BLANK)AND(JSKIP MOD 2 <>1))DO
  48.         IDX:=IDX+1;
  49.       IF(CMDLIN[IDX]<>NEWLINE) THEN BEGIN
  50.         CMDARGS:=CMDARGS+1;
  51.         CMDIDX[CMDARGS]:=IDX-JSKIP;
  52.         WHILE((CMDLIN[IDX]<>NEWLINE)AND
  53.           ((CMDLIN[IDX]<>BLANK)OR(JSKIP MOD 2 <>0)))DO BEGIN
  54.               IF (CMDLIN[IDX]=DQUOTE)THEN BEGIN
  55.                 JSKIP:=JSKIP+1;
  56.                 IDX:=IDX+1
  57.               END
  58.               ELSE BEGIN
  59.                 CMDLIN[IDX-JSKIP]:=CMDLIN[IDX];
  60.                 IDX:=IDX+1
  61.               END
  62.  
  63.             END;
  64.         CMDLIN[IDX-JSKIP]:=ENDSTR;
  65.         IDX:=IDX+1;
  66.         IF (CMDLIN[CMDIDX[CMDARGS]]=LESS) THEN BEGIN
  67.           XCLOSE(STDIN);
  68.           CMDIDX[CMDARGS]:=CMDIDX[CMDARGS]+1;
  69.           JUNK:=GETARG(CMDARGS,FNAME,MAXSTR);
  70.           FD:=MUSTOPEN(FNAME,IOREAD);
  71.           CMDARGS:=CMDARGS-1;
  72.         END
  73.         ELSE IF (CMDLIN[CMDIDX[CMDARGS]]=GREATER) THEN BEGIN
  74.           XCLOSE(STDOUT);
  75.           CMDIDX[CMDARGS]:=CMDIDX[CMDARGS]+1;
  76.           JUNK:=GETARG(CMDARGS,FNAME,MAXSTR);
  77.           FD:=MUSTCREATE(FNAME,IOWRITE);
  78.           CMDARGS:=CMDARGS-1;
  79.         END
  80.       END
  81.     END;
  82. END;
  83.  
  84.  
  85.  
  86.