home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / language / bcpl / BCPL / b / pp < prev    next >
Encoding:
Text File  |  1986-03-26  |  1.3 KB  |  54 lines

  1. GET "LibHdr"
  2.  
  3. MANIFEST $(
  4.    infinity = #x7fffffff $);
  5.  
  6. STATIC $(
  7.    sourceLineCount = 0;
  8.    sourceStream = 0;
  9.    codeStream = 0 $)
  10.  
  11. LET CopyToLine(line) BE
  12. $( SelectInput(sourceStream);
  13.    WHILE line>sourceLineCount DO
  14.    $( LET ch = RdCh();
  15.       IF ch=EndStreamCh THEN RETURN;
  16.       IF ch='*n' THEN sourceLineCount := sourceLineCount+1;
  17.       WrCh(ch) $);
  18.    SelectInput(codeStream)
  19. $)
  20.  
  21. AND Start() BE
  22. $( LET codeLineBuffer = GetVec(20);
  23.    LET argv = GetVec(40);
  24.    LET codeCharCount = 0;
  25.    RdArgs("code/A,source/A,to/K", argv, 40);
  26.    codeStream := FindInput(argv!0);
  27.    sourceStream := FindInput(argv!1);
  28.    IF argv!2~=0 THEN SelectOutput(FindOutput(argv!2));
  29.    sourceLineCount := 0;
  30.    SelectInput(codeStream);
  31.    $( LET ch = RdCh();
  32.       codeCharCount := 0;
  33.       WHILE ch~='*n' DO $(
  34.      IF ch=EndStreamCh THEN GOTO Finished;
  35.      codeCharCount := codeCharCount+1;
  36.      codeLineBuffer%codeCharCount := ch;
  37.      ch := RdCh() $);
  38.       codeLineBuffer%0 := 10;
  39.       /*TEST*/IF codeCharCount>10 &
  40.        CompString(codeLineBuffer, "; -- Line ")=0 THEN $(
  41.      LET n = 0;
  42.      FOR i = 11 TO codeCharCount DO $(
  43.         LET ch = codeLineBuffer%i;
  44.         IF ~('0'<=ch<='9') THEN BREAK
  45.         n := n*10+ch-'0' $);
  46.      CopyToLine(n) $)
  47. /*    ELSE $( */
  48.      FOR i = 1 TO codeCharCount DO WrCh(codeLineBuffer%i);
  49.      NewLine() /*$)*/
  50.    $) REPEAT;
  51. Finished:
  52.    CopyToLine(infinity)
  53. $)
  54.