home *** CD-ROM | disk | FTP | other *** search
/ Aminet 10 / aminetcdnumber101996.iso / Aminet / util / cli / heads.lha / heads.lha / tail.rexx < prev   
OS/2 REXX Batch file  |  1995-04-15  |  2KB  |  90 lines

  1. /* tail.rexx emulates an enhanced version of UNIX tail 
  2. © Herbert Wollman April 15, 1995 */
  3. CMD = ARG(1)
  4. IF UPPER(CMD) == '-H' THEN
  5.   DO
  6.     SAY 'USAGE: tail [-Lines] [File] [OtherFiles]'
  7.     EXIT
  8.   END
  9. C = 10
  10. IF DATATYPE(WORD(CMD,1),WHOLE) & (LEFT(CMD,1) == '-') THEN
  11.   DO
  12.     PARSE VAR CMD PAT CMD
  13.     C = ABS(PAT)
  14.   END
  15. WRDS = WORDS(CMD)
  16. IF WRDS = 0 THEN
  17.   DO
  18.     M = 0
  19.     L = 1
  20.     A = READLN(STDIN)
  21.     DO WHILE ~EOF(STDIN)
  22.       B.L = A
  23.       L = L + 1
  24.       IF L > C THEN
  25.         DO
  26.           L = 1
  27.           M = 1
  28.         END
  29.       A = READLN(STDIN)
  30.     END
  31.     L = L - 1 + C * (L = 1)
  32.     H = 1 + L * M * (L < C)
  33.     DO WHILE H ~= L
  34.       SAY B.H
  35.       H = 1 + H * (H < C)
  36.     END
  37.     SAY B.L
  38.     EXIT
  39.   END
  40. IF ~SHOW('LIBS:','rexxarp.library') THEN
  41.   CALL ADDLIB("rexxarplib.library",0,-30,0)
  42. N = 0
  43. J = 1
  44. DO WHILE WORDS(CMD) > 0
  45.   IF LEFT(CMD,1) == '"' THEN
  46.     PARSE VAR CMD '"' PAT '"' CMD
  47.   ELSE
  48.     PARSE VAR CMD PAT CMD
  49.   CMD = STRIP(CMD)
  50.   CNT = FileList(PAT, F.J,'F')
  51.   J = J + (CNT > 0) /* If there were any matches, increment J */
  52.   N = N + CNT
  53. END
  54. J = J - (CNT > 0)
  55. Q = 0
  56. DO I = 1 TO J        /* Loop over all the patterns */
  57.   DO K = 1 TO F.I.0  /* Loop over all the matches */
  58.     PAT = F.I.K
  59.     IF OPEN(FL,PAT,'READ') THEN
  60.       DO
  61.         IF Q > 0 THEN; SAY ''
  62.         Q = 1
  63.         IF N > 1 THEN; SAY PAT '==>'
  64.         M = 0
  65.         L = 1
  66.         A = READLN(FL)
  67.         DO WHILE ~EOF(FL)
  68.           B.L = A
  69.           L = L + 1
  70.           IF L > C THEN
  71.             DO
  72.               L = 1
  73.               M = 1
  74.             END
  75.           A = READLN(FL)
  76.         END
  77.         CALL CLOSE(FL)
  78.         L = L - 1 + C * (L = 1)
  79.         H = 1 + L * M * (L < C)
  80.         DO WHILE H ~= L
  81.           SAY B.H
  82.           H = 1 + H * (H < C)
  83.         END
  84.         SAY B.L
  85.       END
  86.     ELSE
  87.       SAY '== Unable to Open File' PAT '=='
  88.   END
  89. END
  90.