home *** CD-ROM | disk | FTP | other *** search
/ Aminet 10 / aminetcdnumber101996.iso / Aminet / util / rexx / AGGrep.lha / AGgrep.rexx < prev    next >
OS/2 REXX Batch file  |  1995-09-21  |  5KB  |  176 lines

  1. /* AGgrep.rexx
  2. **
  3. ** A too cool program that will run grep and convert the output to an 
  4. ** AmigaGuide format document which will bring up the document in 
  5. ** your text editor the items are clicked on
  6. **
  7. ** Brian Gragg 9/20/95
  8. */
  9.  
  10. /* defines and such */
  11. version_string = "$VER: TTXGrep  9/20/95  V1.0 © 1995 Brian Gragg"
  12.     /* GREP CALL */
  13. GREPCALL = "sc:c/grep"            
  14.     /* GREP HELP CALL */
  15. GREPHELP = "sc:c/grep ?"
  16.     /* MACRO TO CALL YOUR EDITOR, ARGUMENT WILL BE FILE|LINENUM */
  17. EDITMACRO = "rexx:TTXEditAtLine.rexx"
  18.     /* AMIGAGUIDE CALL */
  19. AMIGAGUIDE = "sys:utilities/amigaguide PUBSCREEN TURBOTEXT"
  20.  
  21. grepfile = "t:grep." || Pragma("i")
  22. agfile = "t:ttxgrep." || Pragma("i")
  23. CR    = d2c(10)
  24. TAB    = d2c(9)
  25.  
  26. /* setup the output file - we need this first so we can show errors in it */
  27. IF Open(agfp,agfile,'w') = 0 THEN DO 
  28.     SAY "Couldn't create amigaguide file ("||agfile||")"
  29.     EXIT 20
  30.     END
  31.  
  32. FullCommand = GREPCALL ARG(1)
  33. WriteLn(agfp,'@DATABASE "TTX Grep"')
  34. WriteLn(agfp,'@REMARK created by 'SubStr(version_string,7))
  35. WriteLn(agfp,'')
  36. WriteLn(agfp,'@NODE Main "'FullCommand'"')
  37. WriteLn(agfp,'')
  38.  
  39. IF ARG()=0 THEN DO
  40.     ErrorText= "USAGE:  rx ttxgrep grep-OPTIONS" || CR || version_string || CR || CR
  41.     ADDRESS COMMAND GREPHELP '>t:AGGrepError'
  42.     CALL HandleError(ErrorText,"T:AGGrepError")
  43.     END
  44.  
  45. SIGNAL ON FAILURE
  46. ADDRESS COMMAND GREPCALL '>'grepfile ARG(1)
  47. SIGNAL OFF FAILURE 
  48.  
  49. IF Open(grepfp,grepfile,'r') = 0 THEN DO 
  50.     CALL HandleError("Couldn't open grep output file ("||grepfile||")","")
  51.     END
  52.     
  53. /*************************************************************************
  54. **  Format of Grep output
  55. **  =====================
  56. **
  57. **  pc0:TABLEMOV.C:                          <- FILENAME
  58. **    296:// FUNCTION:    MoveTableAbs       <- Line # and Line output
  59. **    305:int MoveTableAbs(X...                 ..
  60. **    416:    if (MoveTableAbs(...                ..
  61. **    450:    MoveTableAbs(layo...                ..
  62. **    697:    if (MoveTableAbs(...                ..
  63. **  pc0:USERINT.C:                            <- FILENAME
  64. **    848:                if (M...              <- Line # and Line output
  65. **  pc0:TABLEMOV.H:                           <- FILENAME
  66. **     46:int MoveTableAbs(XY...              <- Line # and Line output
  67. **
  68. ****************************************************************************/
  69.  
  70. line = ReadLn(grepfp)
  71. IF EOF(grepfp) THEN DO
  72.     CALL Close(grepfp)
  73.     CALL HandleError("Grep Failure:"CR"    "FullCommand||CR||CR"Response"CR"    No Matches Found")
  74.     END
  75.  
  76. DO WHILE ~EOF(grepfp)
  77.     /* START BY LOOKING FOR FILENAMES */
  78.     currentfile = Strip(Left(line,Length(Word(line,1))-1),"B")
  79.     CALL Pragma('W','n')        /* turn off dos requesters */
  80.     IF Exists(currentfile) THEN DO
  81.         IF Index(currentfile,":")=0 THEN DO 
  82.             dir = Pragma('D')
  83.             IF Right(dir,1)~=":" THEN 
  84.                 dir = dir || "/"
  85.             currentfile = dir || currentfile
  86.             END 
  87.         WriteLn(agfp,'@{" 'currentfile' " RX "'EDITMACRO currentfile'|1" }')
  88.         END 
  89.     ELSE DO
  90.         currentfile = ""
  91.         WriteLn(agfp,line)
  92.         line = ReadLn(grepfp)
  93.         END 
  94.     CALL Pragma('W','w')        /* turn dos requesters back on */
  95.     
  96.     DO WHILE (~EOF(grepfp) & currentfile~="")
  97.         /* NOW LOOK FOR LINES WITHIN THE FILE */
  98.         line = ReadLn(grepfp)
  99.         IF Left(line,2) ~= "  " THEN 
  100.             BREAK
  101.         PARSE VAR line number ":" line
  102.         number = Strip(number,'B',' '||TAB)                                     
  103.         line = Strip(line,'B',' '||TAB)
  104.         line = Translate(line,,TAB)  /* convert all tabs to a space */                                         
  105.                                                                
  106.         /* IF ANY '@' Show UP, WE NEED TO ESCAPE THEM FOR AMIGAGUIDE */
  107.         newline=""                                                     
  108.         cnt = 1                                                        
  109.         DO UNTIL cnt=0                                                
  110.             cnt = Index(line,"@",cnt)                              
  111.             IF cnt~=0 THEN DO                                      
  112.                 PARSE VAR line first "@" line                  
  113.                 newline = newline || first || "\@"             
  114.                 END
  115.             END 
  116.         line = newline || line
  117.         
  118.         IF number ~= "" THEN    
  119.             WriteLn(agfp,'  @{" Line: 'number' " RX "'EDITMACRO currentfile'|'number'"} 'line) 
  120.         END
  121.     END
  122.  
  123. WriteLn(agfp,'@ENDNODE')
  124.     
  125. Close(grepfp)
  126. Close(agfp)
  127.  
  128. ADDRESS COMMAND AMIGAGUIDE agfile
  129.  
  130. Delete(grepfile)
  131. Delete(agfile)
  132.  
  133. EXIT
  134.  
  135. FAILURE: 
  136. ERROR:
  137.     errRC = RC 
  138.     CALL Close(grepfp)
  139.     CALL HandleError("Grep Failure:"|| CR || "    " || FullCommand ,grepfile)
  140.     EXIT
  141.     
  142. /***************************************************/
  143. HandleError: PROCEDURE EXPOSE agfp grepfile agfile grephelp
  144.  
  145.     ErrorText = arg(1)
  146.     ErrorFile = arg(2)
  147.  
  148.     WriteLn(agfp,'-=-=-=-=-=-=-=-=-=  E R R O R  =-=-=-=-=-=-=-=-=-')
  149.     WriteLn(agfp,ErrorText)
  150.     WriteLn(agfp,' ')
  151.     
  152.     IF (ErrorFile~="" & Exists(ErrorFile)) THEN DO 
  153.         WriteLn(agfp,"Response:")
  154.         ADDRESS COMMAND GREPHELP '>>'ErrorFile
  155.         Open('errorfp',ErrorFile,'r')
  156.         DO WHILE ~EOF('errorfp')
  157.             WriteLn(agfp,"    " || ReadLn('errorfp'))
  158.             END
  159.         Close('errorfp')
  160.         END
  161.  
  162.     WriteLn(agfp,"")
  163.     WriteLn(agfp,"Current Path:")
  164.     WriteLn(agfp,"    "||Pragma("D"))
  165.     WriteLn(agfp,'@ENDNODE')
  166.     
  167.     Close(agfp)
  168.  
  169.     ADDRESS COMMAND AMIGAGUIDE agfile
  170.  
  171.     IF Exists(grepfile) THEN Delete(grepfile)
  172.     Delete(agfile)
  173.  
  174.     EXIT 20
  175. RETURN 
  176.