home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 127 / af127a.adf / DevGuide.lzx / DevGuide / Device_Search.rexx < prev    next >
OS/2 REXX Batch file  |  1999-06-17  |  7KB  |  282 lines

  1. /*
  2. **---------------------------------------
  3. ** 
  4. ** Device_Search.rexx V1.2 - 14.11.96
  5. **
  6. ** Search Devices.guide for keywords
  7. **
  8. ** © 1996 Heiko Schröder         e-mail: age@thepentagon.com
  9. ** You need LIBS: RexxTricks.library
  10. **
  11. ** Inspirations by Tassos Hadjithmomaoglou
  12. ** AMIL_Search.rexx V0.3  © 1995
  13. **
  14. **----------------------------------------
  15. ** $VER: Device_Search.rexx  V1.2 (14-Nov-96)
  16. **----------------------------------------
  17. **
  18. */
  19.  
  20. /*
  21. ** Path for Viewer
  22. **
  23. ** Enter here the full path of an AmigaGuide Viewer of your choice
  24. ** That's the only thing you should change
  25. */
  26.  
  27. Viewer = 'SYS:Utilities/MultiView'
  28.  
  29. /*
  30. ** Please don't change anything after this line
  31. **----------------------------------------------
  32. */
  33.  
  34. OPTIONS RESULTS
  35.  
  36. SIGNAL ON BREAK_C
  37. SIGNAL ON SYNTAX
  38.  
  39. TRUE=1
  40. FALSE=0
  41.  
  42. R="0A"X
  43. say "›32mSearchIn»Device.guide« V1.2 - © Heiko Schröder - 14.11.96 -›m"
  44. say "›33mIf you use ·PowerGuide· you dont need this script."
  45. say "Use instead the »Search«-Button...›m"||R
  46. IF ~show('L',"rexxtricks.library") then do
  47.    IF ~addlib('rexxtricks.library',0,-30,0) then do
  48.       say "Sorry, but I need the rexxtricks.library in LIBS: ..."
  49.       say "Copy it from Libs-Drawer at this directory"
  50.       say "to your LIBS: directory."||R
  51.       SAY "Press »Return« to end."
  52.       PARSE PULL Keyword
  53.       exit
  54.    end
  55. end
  56.  
  57. /*
  58. ** Check for Devices.guide in current directory 
  59. ** If Devices.guide is found then open it, else inform the user
  60. */
  61.  
  62. bool1=OPEN(AMIL_file,'Devices.guide',"R")
  63.  
  64. IF bool1 = FALSE THEN
  65. DO
  66.    SAY '"Devices.guide" wasn''t found in the current directory.'
  67.    SAY "Press »Return« to end."
  68.    PARSE PULL Keyword
  69.    EXIT
  70. END
  71. AMIL_Path = 'DevGuide:Devices.guide'
  72.  
  73. /*
  74. ** Check for argument, else ask for one
  75. */
  76.  
  77. PARSE ARG Keyword
  78.  
  79. IF Keyword = '' THEN
  80. DO
  81.    SAY 'Please input word to search for: (without wildcards) '
  82.    PARSE PULL Keyword
  83.    IF Keyword = '' THEN
  84.    DO
  85.       SAY 'Search abandoned !!!'
  86.       EXIT 0
  87.    END
  88. END
  89.  
  90. SAY d2c(11)||'Searching for "'Keyword'"...'
  91.  
  92. /*
  93. ** Initialize variables
  94. */
  95.  
  96. Counter = 0
  97. Node_Line = 0
  98. Keyword_Line = 0
  99. Node_Name = ''
  100. AMIL_Line = ''
  101.  
  102. /*
  103. ** Create the Device_Search.guide
  104. */
  105.  
  106. if exists("c:search") then do
  107.    address command "c:search >T:node search @node Devices.guide"
  108.    address command "c:search >T:word search "d2c(34)||Keyword||d2c(34)" Devices.guide"
  109. end
  110. else do
  111.    say "Sorry, but i need program »SEARCH« in the C: drawer!"||R
  112.    SAY "Press »Return« to end."
  113.    PARSE PULL Keyword
  114.    exit
  115. end
  116.  
  117. say "Creating the guide... Wait one second..."
  118.  
  119. open("test","T:word")
  120. a=readln("test")
  121. if eof("test") then call Ende
  122. close("test")
  123. ReadFile("T:node","liste")            /*Read the T:node in Stem-Variable*/
  124. ReadFile("T:word","wordl")            /*Read the T:word in Stem-Variable*/
  125.  
  126. if wordl.0="0" then
  127.    say "The "||Keyword||" was not found in Devices.guide!"
  128. else do
  129.    bool1=OPEN(Search_file,'T:Devices_Search.guide',W)
  130.  
  131.    WRITELN(Search_file,'@database Device_Search')
  132.    WRITELN(Search_file,'@node "Main" "Device_Search V1.2  - 14.11.96 - by Heiko Schröder"')
  133.    WRITELN(Search_file,'')
  134.    WRITELN(Search_file,' The word "@{fg fill}'Keyword'@{fg text}" was found in the following lines:')
  135.    WRITELN(Search_file,'')
  136.  
  137.    i=1
  138.    z=1
  139.    do while 1
  140.       ist1  = liste.i
  141.       ist   = Value(Compress(DelStr(ist1,7)))         /*Linenumber of @node*/
  142.       n=i+1
  143.       next1 = liste.n
  144.       next  = Value(Compress(DelStr(next1,7)))        /*Linenumber of next @node*/
  145.       zeile1= wordl.z
  146.       zeile = Value(Compress(DelStr(zeile1,7)))       /*Linenumber of Keyword*/
  147.  
  148.       if next=0 then next=zeile+1                     /*found KeyWord after last @node*/
  149.  
  150.       if ist>zeile then do                            /*found KeyWord before @node*/
  151.          z=z+1                                        /*next KeyWord*/
  152.       end
  153.  
  154.       if zeile>next then do                           /*found KeyWord after next @node*/
  155.          i=i+1                                        /*next @node*/
  156.       end
  157.  
  158.       if ist<=zeile & zeile<=next then do             /*KeyWord between two @node s*/
  159.          AMIL_Line = ist1                             /*read @node*/
  160.          s1 = DELSTR(DELSTR(AMIL_Line,1,7),1,7)
  161.          Node_Name = DELSTR(s1,INDEX((s1),'"'))
  162.          Node_Line = ist
  163.  
  164.          Search_Line = Delstr(zeile1,1,7)             /*read KeyWord*/
  165.          IF (LEFT(Search_Line,1) ~= '@') | (LEFT(Search_Line,2) = '@{') THEN
  166.          DO
  167.             Counter=Counter+1
  168.             Keyword_Line = zeile - Node_Line
  169.             wo=Index(Upper(Search_Line),Upper(KeyWord))
  170.             l=Length(Keyword)
  171.             vor=DelStr(Search_Line,wo)
  172.             nach=DelStr(Search_Line,1,wo+l-1)
  173.             AMIL_Search_Line = '@{"*" link "DevGuide:Devices.guide/'Node_Name'" 'Keyword_Line'} 'vor||'@{fg shine}'||KeyWord||'@{fg text}'||nach
  174.             WRITELN(Search_File,AMIL_Search_Line||R||COPIES('-',77))
  175.          END
  176.          z=z+1                                /*next KeyWord*/
  177.          if z>wordl.0 then leave              /*end, if no more KeyWord was found*/
  178.       end
  179.    end
  180. end
  181.  
  182. WRITELN(Search_file,"I have found "||Counter||" possibilities.")
  183.  
  184. WRITELN(Search_file,"@endnode")
  185.  
  186.  
  187. /*
  188. ** Close both files
  189. */
  190. bool1=CLOSE(AMIL_file)
  191. bool1=CLOSE(Search_file)
  192.  
  193. /*
  194. ** Check for Viewer or MultiView/AmigaGuide
  195. */
  196.  
  197. bool1 = EXISTS(Viewer)
  198. IF bool1 = FALSE THEN
  199. DO
  200.    SAY Viewer 'wasn''t found.'
  201.    SAY 'Trying MultiView/AmigaGuide...'
  202.    bool1 = EXISTS('SYS:Utilities/MultiView')
  203.    IF bool1 = FALSE THEN
  204.    DO
  205.       bool1 = EXISTS('SYS:Utilities/AmigaGuide')
  206.       IF bool1 = FALSE THEN
  207.       DO
  208.          SAY 'MultiView/AmigaGuide weren''t found in SYS:Utilities !!!'
  209.          EXIT
  210.       END
  211.       ELSE
  212.       DO
  213.          Viewer = 'SYS:Utilities/AmigaGuide'
  214.       END
  215.    END
  216.    ELSE
  217.    DO
  218.       Viewer = 'SYS:Utilities/MultiView'
  219.    END
  220. END
  221.  
  222. /*
  223. ** View the results from the search
  224. */
  225.  
  226. SAY 'Running 'Viewer'...'||R
  227. ADDRESS COMMAND 'Run >NIL: <NIL:' Viewer 'T:Devices_Search.guide'
  228. SAY "Press »Return« to end."
  229. PARSE PULL Keyword
  230. ADDRESS COMMAND 'Delete T:Devices_Search.guide QUIET'
  231. ADDRESS COMMAND 'Delete T:node QUIET'
  232. ADDRESS COMMAND 'Delete T:word QUIET'
  233. ADDRESS COMMAND 'Assign DevGuide: REMOVE'
  234.  
  235. EXIT 0
  236.  
  237. /*
  238. ** End of ARexx script
  239. */
  240. Ende:
  241.    say "Sorry, but »"||KeyWord||"« was not found."||R
  242.    close("test")
  243.     ADDRESS COMMAND 'Delete T:node QUIET'
  244.     ADDRESS COMMAND 'Delete T:word QUIET'
  245.    SAY "Press »Return« to end."
  246.    PARSE PULL Keyword
  247.    ADDRESS COMMAND 'Assign DevGuide: REMOVE'
  248.    EXIT
  249.  
  250. /*
  251. ** Handle the Error condition
  252. */
  253.  
  254. SYNTAX:
  255.     bool1=CLOSE(AMIL_file)
  256.     bool1=CLOSE(Search_file)
  257.     ADDRESS COMMAND 'Delete T:Devices_Search.guide QUIET'
  258.     ADDRESS COMMAND 'Delete T:node QUIET'
  259.     ADDRESS COMMAND 'Delete T:word QUIET'
  260.     SAY R||'Error at line' SIGL ':' ERRORTEXT(RC)
  261.     SAY 'Please report it to the author'||R
  262.    SAY "Press »Return« to end."
  263.    PARSE PULL Keyword
  264.    ADDRESS COMMAND 'Assign DevGuide: REMOVE'
  265.     EXIT
  266.  
  267. /*
  268. ** Handle the Control C command given by the user
  269. */
  270.  
  271. BREAK_C:
  272.     bool1=CLOSE(AMIL_file)
  273.     bool1=CLOSE(Search_file)
  274.     ADDRESS COMMAND 'Delete T:Devices_Search.guide QUIET'
  275.     ADDRESS COMMAND 'Delete T:node QUIET'
  276.     ADDRESS COMMAND 'Delete T:word QUIET'
  277.     SAY 'Search aborted...'||R
  278.    SAY "Press »Return« to end."
  279.    PARSE PULL Keyword
  280.    ADDRESS COMMAND 'Assign DevGuide: REMOVE'
  281.     EXIT
  282.