home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 5 / AACD05.ISO / SearchCDs < prev    next >
Text File  |  1999-12-17  |  23KB  |  655 lines

  1. /*
  2. SearchCDs - Searches index files of Amiga Active CDs,
  3.             Aminet CDs and Aminet Online files
  4. $VER: SearchCDs 1.4 (14.12.99) (c) Neil Bothwick, Wirenet
  5. */
  6.  
  7. /* ;;; Initialise */
  8. options results
  9. signal on error
  10. /* Make sure we have enough stack */
  11. CurrStack = pragma('S',16384)
  12. if CurrStack > 16384 then call pragma('S',CurrStack)
  13.  
  14. /* Set some variables */
  15. VerStr    = sourceline(4)
  16. VerStr    = subword(VerStr,2,words(VerStr) - 4)
  17. Title     = 'SearchCDs'
  18. GuiPort   = upper(Title)
  19. PrgPort   = GuiPort'-PRG'
  20. WinTitle  = 'Amiga Active CD Search'
  21. WinTitle  = 'Amiga Active CD preferences'
  22. qt        = '22'x
  23. lf        = '0a'x
  24. GF        = '<font color="green"><b>GF</b></font>'
  25. GF        = '<font color="red"><b>Q</b></font>'
  26.  
  27. /* Are we running from CD or HD? */
  28. CurrentDir = pragma('D')
  29. parse var CurrentDir CDname ':' .
  30. if left(CDName,4) ~= 'AACD' then CDname = 'AACD'
  31. signal off error
  32. address command 'Assign >NIL: 'CDName': EXISTS'
  33. CDMounted = ~(RC % 5)
  34.  
  35. /* Is registered AWeb available? */
  36. address command 'Assign >NIL: AWeb3: EXISTS'
  37. Browser = ''
  38. if RC = 0 then do
  39.     address command 'Version >NIL: AWeb3:AWeb-II 3 3'
  40.     if RC = 0 then Browser = 'AWeb3:AWeb-II'
  41.     end
  42. else if CDMounted = 1 then Browser = CDName':AACD/WebSites/AWeb3/AWebDemo'
  43. signal on error
  44.  
  45. AminetServer = 'de.aminet.net'
  46. select
  47.     when right(CurrentDir,6) = 'Aminet' then DefSearch = 'Aminet Online'
  48.     when right(CurrentDir,3) = 'CDs' then DefSearch = 'Aminet CDs'
  49.     when right(CurrentDir,4) = 'Sets' then DefSearch = 'Aminet Sets'
  50.     otherwise DefSearch = 'Amiga Active CDs'
  51.     end
  52. ;;;
  53. /* ;;; Check for MUI */
  54. address command 'Assign >NIL: MUI: EXISTS'
  55. if RC > 0 then do
  56.     address command 'RequestChoice >NIL: "Amiga Active CD" "This program require Magic User Interface*NRun the Welcome script for a temporary MUI setup,*Nor install it from the CDTools drawer of the CD" "OK"'
  57.     exit
  58.     end
  59. ;;;
  60. /* ;;; Set index variables and ensure all necessary files are available */
  61. address command
  62. if ~exists('C:FlashFind') then 'copy 'CDname':C/FlashFind C: clone quiet'
  63. if exists('ENV:AACDIndex') then AACDPath = AddPart(GetVar('AACDIndex'),'')
  64. else AACDPath = CDname':CDTools/indices/'
  65. if exists('ENV:AminetCDIndex') then AminetCDPath = AddPart(GetVar('AminetCDIndex'),'')
  66. else AminetCDPath = CDname':AACD/CDROM/AminetCDs/CDs'
  67. if exists('ENV:AminetSetIndex') then AminetSetPath = AddPart(GetVar('AminetSetIndex'),'')
  68. else AminetSetPath = CDname':AACD/CDROM/AminetCDs/Sets/'
  69. if exists('ENV:AminetIndex') then AminetPath = AddPart(GetVar('AminetIndex'),'')
  70. else AminetPath = CDname':AACD/Online/Aminet/'
  71. OutFile = 'T:SearchCDs.results'
  72. ;;;
  73. /* ;;; Define MUI variables */
  74. MUIA_List_Quiet                   = 0x8042d8c7
  75. MUIM_List_Select                  = 0x804252d8
  76. MUIV_List_Select_All              = -2
  77. MUIV_List_Select_On               = 1
  78. MUIV_List_Select_Ask              = 3
  79. MUIA_List_First                   = 0x804238d4
  80. MUIM_List_Remove                  = 0x8042647e
  81. MUIV_List_Remove_Selected         = -3
  82. MUIA_List_Entries                 = 0x80421654
  83. MUIA_List_Quiet                   = 0x8042d8c7
  84. MUIA_Listview_MultiSelect         = 0x80427e08
  85. MUIV_Listview_MultiSelect_Default = 1
  86. MUIA_Gauge_Current                = 0x8042f0dd
  87. MUIA_Gauge_Divide                 = 0x8042d8df
  88. MUIA_Gauge_Horiz                  = 0x804232dd
  89. MUIA_Gauge_InfoText               = 0x8042bf15
  90. MUIA_Gauge_Max                    = 0x8042bcdb
  91. MUIA_Group_Columns                = 0x8042f416
  92. MUIA_Menuitem_Shortcut            = 0x80422030
  93. MUIA_Application_Active           = 0x804260ab
  94. MUIA_Application_Author           = 0x80424842
  95. MUIA_Application_Copyright        = 0x8042ef4d
  96. MUIA_Application_Description      = 0x80421fc6
  97. MUIA_Application_HelpFile         = 0x804293f4
  98. MUIA_Application_Iconified        = 0x8042a07f
  99. MUIA_Application_Title            = 0x804281b8
  100. MUIA_Application_Version          = 0x8042b33f
  101. MUIA_Application_Sleep            = 0x80425711
  102. MUIM_Application_AboutMUI         = 0x8042d21d
  103. TRUE = 1
  104. FALSE = 0
  105. ;;;
  106. /* ;;; Load libraries */
  107. call LoadLib('rexxsupport.library')
  108. call LoadLib('rexxdossupport.library')
  109. call LoadLib('rexxreqtools.library')
  110. ;;;
  111. /* ;;; Open arexx port and GUI */
  112. thisport = openport(PrgPort)
  113. if thisport = 0 then exit
  114. address(GuiPort)
  115. window id MAIN port PrgPort command 'QUIT' title '"'WinTitle'"'
  116.     group id ALL
  117.         group horiz attrs MUIA_Group_Columns 2
  118.             group horiz attrs MUIA_Group_Columns 2
  119.                 label double 'Search string'
  120.                 string id SCSTR help '"Enter a string to search for"' /* content 'test' */
  121.                 label double 'CDs to search'
  122.                 cycle id CDTYP port PrgPort command 'RESCAN' help '"Which types of CD do\nyou wish to search?"' labels 'Amiga Active CDs,Aminet CDs,Aminet Sets,Aminet Online'
  123.                 label double 'Output format'
  124.                 if Browser > '' then cycle id OPFMT help '"Choose the output format"' labels 'HTML,Text,Amigaguide'
  125.                 else cycle id OPFMT help '"Choose the output format"' labels 'Text,Amigaguide'
  126.                 endgroup
  127.             if exists('AALogo.ilbm') then image id LOGO pict AALogo.ilbm
  128.             else do
  129.                 if CDMounted then do
  130.                     if exists(CDName':AALogo.ilbm') then do
  131.                         address command 'Copy 'CDName':AALogo.ilbm "" CLONE'
  132.                         image id LOGO pict AALogo.ilbm
  133.                         end
  134.                     end
  135.                 end
  136.             endgroup
  137.  
  138.         list id CDLST attrs MUIA_Listview_MultiSelect MUIV_Listview_MultiSelect_Default help '"Select the CDs to search"'
  139.         group id BTNS horiz
  140.             button id GO  port PrgPort command 'SEARCH' help '"Start the search"' label 'Search'
  141.             button id ALL port PrgPort command 'ALL' help '"Select all CDs in the list"' label 'Select All'
  142.             button id ESC port PrgPort command 'QUIT' '"Exit without searching"' label 'Cancel'
  143.             endgroup
  144.         gauge id PROGR attrs MUIA_Gauge_Horiz MUIA_Gauge_InfoText '' help '"Shows the progress of the search"' label ''
  145.         endgroup
  146.     menu id PROJM label 'Project'
  147.         item id ABOUT port PrgPort command 'ABOUT' MUIA_Menuitem_Shortcut '?' label 'About'
  148.         item id MUI   port PrgPort command 'ABOUTMUI' label 'About MUI...'
  149.         item id QUITM port PrgPort command 'QUIT'  MUIA_Menuitem_Shortcut 'Q' label 'Quit'
  150.         endmenu
  151.     endwindow
  152.  
  153. cycle id CDTYP label DefSearch
  154. call LoadList()
  155. 'application' MUIA_Application_Version '$VER: SearchCD 1.2 (15.4.99)'
  156. 'application' MUIA_Application_Author 'Neil Bothwick'
  157. 'application' MUIA_Application_Copyright '© 1998 by Neil Bothwick, Wirenet'
  158. 'application' MUIA_Application_Title 'SearchCD'
  159. 'application' MUIA_Application_Description 'Search AACD, and Aminet index files'
  160. /*'application' MUIA_Application_Description 'Search AACD and Aminet index files'*/
  161. ;;;
  162. /* ;;; Main loop */
  163. do forever
  164.     call waitpkt(PrgPort)
  165.     packet = getpkt(PrgPort)
  166.     if packet = '0000 0000'x then iterate
  167.     cmd = getarg(packet)
  168.     call reply(packet,0)
  169.     select
  170.     ;;;
  171. ;;;     /* Search */
  172.         when cmd = 'SEARCH' then do
  173.             'list id CDLST attrs' MUIA_List_Quiet TRUE
  174.             'application' MUIA_Application_Sleep TRUE
  175.             /* Get search string */
  176.             'string id SCSTR'
  177.             SearchStr = result
  178.             /* Get list of CDs to search */
  179.             drop CDs.
  180.             i = 0
  181.             do forever
  182.                  list id CDLST
  183.                  if result = '' then break
  184.                  i = i + 1
  185.                  CDs.i = result
  186.                  end
  187.             CDs.0 = i
  188.             select
  189.                 when SearchStr = '' then call ShowMsg('You must specify a string to search for')
  190.                 when CDs.0 = 0 then call ShowMsg('You must select at least one index to search')
  191.                 otherwise call Search()
  192.                 end
  193.             'application' MUIA_Application_Sleep FALSE
  194.             'list id CDLST attrs' MUIA_List_Quiet FALSE
  195.             end
  196. ;;;
  197. ;;;     /* Select All */
  198.         when cmd = 'ALL' then do
  199.             'method id CDLST' MUIM_List_Select MUIV_List_Select_All MUIV_List_Select_On
  200.             end
  201. ;;;
  202. ;;;     /* Rescan */
  203.         when cmd = 'RESCAN' then call LoadList()
  204. ;;;
  205. ;;;     /* About */
  206.         when cmd = 'ABOUT' then call ShowMsg(VerStr||'0a'x||'Programmed using MUIrexx')
  207.         when cmd = 'ABOUTMUI' then 'method ' MUIM_Application_AboutMUI 0
  208. ;;;
  209. ;;;     /* Cancel */
  210.         otherwise call CleanUp()
  211.         end
  212.     end
  213. ;;;
  214. /* ;;; Subroutines */
  215. ;;;
  216. /* ;;; Load a library */
  217. LoadLib:
  218.     parse arg library
  219.     if show('L',library) then return
  220.     if ~exists('LIBS:'library) then address command 'copy 'CDname':libs/'library 'LIBS: clone quiet'
  221.     if ~addlib(library,0,-30,0) then call ExitMsg('Failed to load' library||'0a'x||'Make sure you have run InitCD')
  222.     return
  223. ;;;
  224. /* ;;; Show a message in a requester */
  225. ShowMsg:
  226.     parse arg msg
  227.     oldaddr = address()
  228.     address(GuiPort)
  229.     'request id MAIN title "'WinTitle'" gadgets "OK" string' msg
  230.     choice = result
  231.     address(oldaddr)
  232.     return choice
  233. ;;;
  234. /* ;;; Exit with a requester */
  235. ExitMsg:
  236.     parse arg msg
  237.     call ShowMsg(msg)
  238.     call Cleanup()
  239.     return
  240. ;;;
  241. /* ;;; Cleanup and exit */
  242. CleanUp:
  243.     if getclip('GFStarted') = 1 then do
  244.         if show('P','GOFETCH') then address 'GOFETCH' 'quit'
  245.         call setclip('GFStarted')
  246.         end
  247.     call delete(OutFile'#?')
  248.     address(GuiPort)
  249.     'QUIT'
  250.     exit
  251. ;;;
  252. /* ;;; Search CDs */
  253. Search:
  254. 'cycle id OPFMT'
  255. Format = result
  256.     call delete(OutFile)
  257.     'gauge id PROGR attrs' MUIA_Gauge_Max CDs.0 MUIA_Gauge_InfoText '%ld/'CDs.0
  258.     do i = 1 to CDs.0
  259.         'gauge id PROGR attrs' MUIA_Gauge_Current i
  260.         select
  261.             when Source = 'Aminet CDs' then address command 'echo "*NAMINET'right(CDs.i,2)':" >>'OutFile
  262.             /*when Source = 'Aminet Sets' then address command 'echo "*NAminetSet'right(CDs.i,1)':" >>'OutFile*/
  263.             when Format = 'Text' then NH = ''
  264.             otherwise NH = 'NH'
  265.             end
  266.         signal off error
  267.         address command 'FlashFind >>'OutFile AddPart(IndexPath,CDs.i) '"'SearchStr'" NOPREFS QUIET' NH
  268.         signal on error
  269.         end
  270. ;;;
  271. /* ;;; Show matches or warn if none */
  272. if word(statef(OutFile),2) = 0 then do
  273.     call ShowMsg('No matches found for "'SearchStr'"')
  274.     return
  275.     end
  276. if ~open(res,OutFile,'R') then do
  277.     call ShowMsg('File open failure')
  278.     return
  279.     end
  280. if ~open(out,OutFile'1','W') then do
  281.     call ShowMsg('File open failure')
  282.     return
  283.     end
  284.  
  285. select
  286. ;;;
  287.     /* ;;; Show Text */
  288.     when Format = 'Text' then do
  289.         if Source ='Aminet CDs' then do
  290.             /* Format output */
  291.             'gauge id PROGR attrs' MUIA_Gauge_Max word(statef(OutFile),2) MUIA_Gauge_InfoText '"Processing search results"'
  292.             BytesDone = 0
  293.             call readln(res)
  294.             do until eof(res)
  295.                 CDTitle = readln(res)
  296.                 call SetCDTitle()
  297.                 line = readln(res)
  298.                 do while ~eof(res) & line ~= ''
  299.                     BytesDone = BytesDone + length(line) + 1
  300.                     if left(line,1) ~= '|' then do
  301.                         parse var line name =19 path =30 .
  302.                         name = strip(name)
  303.                         path = CDTitle'Aminet/'strip(path)'/'name
  304.                         line = left(name'                                    ',33)||path
  305.                         call writeln(out,line)
  306.                         'gauge id PROGR attrs' MUIA_Gauge_Current BytesDone
  307.                         end
  308.                     line = readln(res)
  309.                     end
  310.                 end
  311.             end
  312.         else do
  313.             call close(out)
  314.             call delete(OutFile'1')
  315.             call rename(OutFile,OutFile'1')
  316.             end
  317.  
  318.         call close(res)
  319.         call close(out)
  320.         address command 'Run >NIL: Multiview' OutFile'1'
  321.         call delete(OutFile'1')
  322.         end
  323.     ;;;
  324.     /* ;;; Show HTML */
  325.     when Format = 'HTML' then do
  326.         /* Find AWeb's arexx port or start it if not running */
  327.         ports = show('P')
  328.         portpos = pos('AWEB.',ports)
  329.         if portpos > 0 then AWebPort = word(substr(ports,portpos),1)
  330.         else do
  331.             address command 'Run >NIL:' Browser 'CONFIG Amigactive'
  332.             AWebPort = 'AWEB.1'
  333.             end
  334.  
  335.         /* Open output file and write headers */
  336.         call writeln(out,'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">')
  337.         call writeln(out,'<html><head><title>Search results</title></head><body bgcolor=white>')
  338.         call writeln(out,'<h3 align=center>Result of searching 'Source' for "<font color=red>'SearchStr'</font>"</h3>')
  339.         call writeln(out,'<table width="100%">')
  340.  
  341.         /* Process output into HTML */
  342.         'gauge id PROGR attrs' MUIA_Gauge_Max word(statef(OutFile),2) MUIA_Gauge_InfoText '"Processing search results"'
  343.         BytesDone = 0
  344.         select
  345.             when Source = 'Amiga Active CDs' then do
  346.                 /* Format output */
  347.                 do until eof(res)
  348.                     line = readln(res)
  349.                     BytesDone = BytesDone + length(line) + 1
  350.                     if line = '' then iterate
  351.                     parse var line name =34 path
  352.                     name = strip(name)
  353.                     line = '<tr><td>'name'<td><a href="x-aweb:rexx/REXX:AAShowDir 'PathPart(path)'">'path'</a>'
  354.                     call writeln(out,line)
  355.                     'gauge id PROGR attrs' MUIA_Gauge_Current BytesDone
  356.                     end
  357.                 end
  358.             when Source = 'Aminet CDs' then do
  359.                 /* Format output */
  360.                 call readln(res)
  361.                 do until eof(res)
  362.                     CDTitle = readln(res)
  363.                     call SetCDTitle()
  364.                     line = readln(res)
  365.  
  366.                     do while ~eof(res) & line ~= ''
  367.                         BytesDone = BytesDone + length(line) + 1
  368.                         if left(line,1) ~= '|' then do
  369.                             /*parse var line name =19 path =30 size +5 age +5 desc*/
  370.                             interpret parsecmd
  371.                             name = strip(name)
  372.                             path = CDTitle'Aminet/'strip(path)'/'name
  373.                             readme = left(path,lastpos('.',path))'readme'
  374.                             line = '<tr valign=top><td><a href="x-aweb:rexx/REXX:AAExtract 'path'">'name'<td align=right>'strip(size)'<td><a href="file://localhost/'readme'">'desc'</a>'
  375.                             call writeln(out,line)
  376.                             'gauge id PROGR attrs' MUIA_Gauge_Current BytesDone
  377.                             end
  378.                         line = readln(res)
  379.                         end
  380.                     end
  381.                 end
  382.             when Source = 'Aminet Sets' then do
  383.                 /* Format output */
  384.                 call readln(res)
  385.                 do until eof(res)
  386.                     line = readln(res)
  387.                     BytesDone = BytesDone + length(line) + 1
  388.                     if left(line,1) = '|' then iterate
  389.                     parse var line name =20 path +11 size +5 age +4 CD +2 x +1 desc
  390.                     name = strip(name)
  391.                     path = 'AminetSet'CD':Aminet/'strip(path)'/'name
  392.                     readme = left(path,lastpos('.',path))'readme'
  393.                     line = '<tr><td><a href="x-aweb:rexx/REXX:AAExtract 'path'">'name'<td align=right>'strip(size)'<td><a href="file://localhost/'readme'">'desc'</a>'
  394.                     call writeln(out,line)
  395.                     'gauge id PROGR attrs' MUIA_Gauge_Current BytesDone
  396.                     end
  397.                 end
  398.             when Source = 'Aminet Online' then do
  399.                 /* Format output */
  400.  
  401.                 call writeln(out,'<tr><td colspan="4">Click on the file name to download it or the description to download the readme. This requires that you are online and does not work with the AACD Special Edition browser.<p>')
  402.                 call writeln(out,'Alternatively, click on 'GF' to add the file or readme to the GoFetch! download queue.')
  403.                 call writeln(out,'This requires that you have GoFetch! installed, you can install it from ')
  404.                 call writeln(out,'<a href="x-aweb:rexx/REXX:AAShowDir AACD:Online/Resources/GoFetch!">AACD:Online/Resources/GoFetch!</a><p></td></tr>')
  405.                 call writeln(out,'<tr><td><p>  </p></td></tr>')
  406.  
  407.                 call writeln(out,'<tr align="left"><td><b>Name</b></td><td align="right"><b>Size</b></td><td align="right"><b>Age</b></td><td><b>Description</td></tr>')
  408.                 do until eof(res)
  409.                     line = readln(res)
  410.                     BytesDone = BytesDone + length(line) + 1
  411.                     if line = '' | left(line,1) = '|' then iterate
  412.                     parse var line name =20 path +11 size +5 age +3 x +1 desc
  413.                     name = strip(name)
  414.                     path = 'ftp://'AminetServer'/pub/aminet/'strip(path)'/'name
  415.                     readme = left(path,lastpos('.',path))'readme'
  416.                     line = '<tr><td><a href="x-aweb:rexx/REXX:AAGoFetch 'path'">'GF'</a> <a href="'path'">'name'</a><td align=right>'strip(size)'<td align=right>'strip(age)'<td><a href="x-aweb:rexx/REXX:AAGoFetch 'readme'">'GF'</a> <a href="'readme'">'desc'</a>'
  417.                     call writeln(out,line)
  418.                     'gauge id PROGR attrs' MUIA_Gauge_Current BytesDone
  419.                     end
  420.                 call writeln(out,'<tr><td align=center colspan=4><p><hr><p><h5>The age is given in weeks since the date of this index ('date('N',word(statef(AddPart(IndexPath,'INDEX')),5),'I')')</h5>')
  421.                 end
  422.             
  423.             otherwise call ShowMsg('Not done this bit yet')
  424.             end
  425.         call writeln(out,'</table></body></html>')
  426.         call close(res)
  427.         call close(out)
  428.  
  429.         /* Load HTML */
  430.         signal off error
  431.         address command 'waitforport' AWebPort
  432.         signal on error
  433.         if RC > 0 then call ExitMsg('Unable to start AWeb')
  434.         /*call delete(OutFile)*/
  435.         call delete(OutFile'.html')
  436.         call rename(OutFile'1',OutFile'.html')
  437.         address(AWebPort)
  438.         'open file://localhost/'OutFile'.html reload'
  439.         'screentofront'
  440.         'window tofront'
  441.  
  442.         end
  443.     ;;;
  444.     /* ;;; Show Amigaguide */
  445.     when Format = 'Amigaguide' then do
  446.  
  447.         /* Open output file and write headers */
  448.         call writeln(out,'@database "AACD Search Results"')
  449.         call writeln(out,'@master 'OutFile'1')
  450.         call writeln(out,'@author "SearchCDs"')
  451.         call writeln(out,'@remark "Created by Amiga Active CD SearchCDs"')
  452.         call writeln(out,'')
  453.         call writeln(out,'@node "Main" "Result of searching 'Source' for 'SearchStr'"')
  454.         call writeln(out,'@{jcenter}')
  455.         call writeln(out,'@{b}@{u}Result of searching 'Source' for 'SearchStr'@{ub}@{uu}')
  456.         call writeln(out,'@{jleft}')
  457.  
  458.         /* Process output into Amigaguide */
  459.         'gauge id PROGR attrs' MUIA_Gauge_Max word(statef(OutFile),2) MUIA_Gauge_InfoText '"Processing search results"'
  460.         BytesDone = 0
  461.         select
  462.             when Source = 'Amiga Active CDs' then do
  463.                 /* Format output */
  464.                 do until eof(res)
  465.                     line = readln(res)
  466.                     BytesDone = BytesDone + length(line) + 1
  467.                     if line = '' then iterate
  468.                     parse var line name =34 path
  469.                     name = strip(name)
  470.                     line = '@{" 'name' " system "rx REXX:AAShowDir 'PathPart(path)'" }'left('',32 - length(name)) path
  471.                     call writeln(out,line)
  472.                     'gauge id PROGR attrs' MUIA_Gauge_Current BytesDone
  473.                     end
  474.                 end
  475.             when Source = 'Aminet CDs' then do
  476.                 /* Format output */
  477.                 call readln(res)
  478.                 do until eof(res)
  479.                     CDTitle = readln(res)
  480.                     call SetCDTitle
  481.                     line = readln(res)
  482.  
  483.                     do while ~eof(res) & line ~= ''
  484.                         BytesDone = BytesDone + length(line) + 1
  485.                         if left(line,1) ~= '|' then do
  486.                             interpret parsecmd
  487.                             name = strip(name)
  488.                             path = CDTitle'Aminet/'strip(path)'/'name
  489.                             readme = left(path,lastpos('.',path))'readme'
  490.                             desc = compress(desc,'"')
  491.                             line = '@{" 'name' " system "rx REXX:AAExtract 'path'" }'left('',32 - length(name))||right('      'strip(size),5) '@{" 'desc' " system "Run >NIL: AACDfile 'readme'"}'
  492.                             call writeln(out,line)
  493.                             'gauge id PROGR attrs' MUIA_Gauge_Current BytesDone
  494.                             end
  495.                         line = readln(res)
  496.                         end
  497.                     end
  498.                 end
  499.  
  500.             when Source = 'Aminet Sets' then do
  501.                 /* Format output */
  502.                 call readln(res)
  503.                 do until eof(res)
  504.                     line = readln(res)
  505.                     BytesDone = BytesDone + length(line) + 1
  506.                     if left(line,1) = '|' then iterate
  507.                     parse var line name =20 path +11 size +5 age +4 CD +2 x +1 desc
  508.                     name = strip(name)
  509.                     path = 'AminetSet'CD':Aminet/'strip(path)'/'name
  510.                     readme = left(path,lastpos('.',path))'readme'
  511.                     desc = compress(desc,'"')
  512.                     line = '@{" 'name' " system "rx REXX:AAExtract 'path'" }'left('',32 - length(name))||right('      'strip(size),5) '@{" 'desc' " system "Run >NIL: AACDfile 'readme'"}'
  513.                     call writeln(out,line)
  514.                     'gauge id PROGR attrs' MUIA_Gauge_Current BytesDone
  515.                     end
  516.                 end
  517.             when Source = 'Aminet Online' then do
  518.                 /* Format output */
  519.                 call writeln(out,'Click on the file name to add it to the GoFetch! download queue.')
  520.                 call writeln(out,'Click on the short description to download the readme.'lf)
  521.                 call writeln(out,'@{b}Name                              Size  Age Description@{ub}')
  522.                 
  523.                 do until eof(res)
  524.                     line = readln(res)
  525.                     BytesDone = BytesDone + length(line) + 1
  526.                     if line = '' | left(line,1) = '|' then iterate
  527.                     parse var line name =20 path +11 size +5 age +3 x +1 desc
  528.                     name = strip(name)
  529.                     path = 'ftp://'AminetServer'/pub/aminet/'strip(path)'/'name
  530.                     readme = left(path,lastpos('.',path))'readme'
  531.                     desc = compress(desc,'"')
  532.                     line = '@{" 'name' " system "rx REXX:AAGoFetch 'path'" }'left('',32 - length(name))||right('      'strip(size),5)||right('      'strip(age),4) '@{" 'desc' " system "rx REXX:AAGoFetch 'readme'"}'
  533.                     call writeln(out,line)
  534.                     'gauge id PROGR attrs' MUIA_Gauge_Current BytesDone
  535.                     end
  536.                 call writeln(out,lf'The age is given in weeks since the date of this index ('date('N',word(statef(AddPart(IndexPath,'INDEX')),5),'I')')')
  537.                 end
  538.             otherwise call ShowMsg('Not done this bit yet')
  539.             end
  540.         
  541.         call writeln(out,'@endnode')
  542.         call close(res)
  543.         call close(out)
  544.  
  545.         /* Load Amigaguide */
  546.         address command 'Run >NIL: Multiview' OutFile'1'
  547.         call delete(OutFile'1')
  548.         end
  549.  
  550.     otherwise do
  551.         call ShowMsg('Not done this bit yet')
  552.         call close(res)
  553.         call close(out)
  554.         return
  555.         end
  556.     end
  557. call close(res)
  558. call close(out)
  559.  
  560. address(GuiPort)
  561. 'gauge id PROGR attrs' MUIA_Gauge_Current 0 MUIA_Gauge_InfoText '""'
  562. return
  563. ;;;
  564. /* ;;; List CDs for searching */
  565. LoadList:
  566.     address(GuiPort)
  567.     'list id CDLST attrs' MUIA_List_Quiet TRUE
  568.     'application' MUIA_Application_Sleep TRUE
  569.     /* Clear list */
  570.     'method id CDLST' MUIM_List_Select MUIV_List_Select_All MUIV_List_Select_On
  571.     'method id CDLST' MUIM_List_Remove MUIV_List_Remove_Selected
  572.     /* Create index list */
  573.     'cycle id CDTYP'
  574.     Source = result
  575.     address command
  576.     call delete(OutFile)
  577.     call delete(OutFile'1')
  578.     select
  579.         when Source = 'Amiga Active CDs' then do
  580.             IndexPath = AACDPath
  581.             'list' IndexPath 'pat AACD?? lformat "%N" to' OutFile
  582.             end
  583.         when Source = 'Aminet CDs' then do
  584.             IndexPath = AminetCDPath
  585.             'list' IndexPath 'pat Index?? lformat "%N" to' OutFile
  586.             end
  587.         when Source = 'Aminet Sets' then do
  588.             IndexPath = AminetSetPath
  589.             'list' IndexPath 'pat Set? lformat "%N" to' OutFile
  590.             end
  591.         when Source = 'Aminet Online' then do
  592.             IndexPath = AminetPath
  593.             if ~open(dirs,AddPart(IndexPath,'dirlist'),'R') then 'echo >'OutFile'1 "Unable to open index list"'
  594.             else do until eof(dirs)
  595.                 'echo >>'OutFile'1 "'readln(dirs)'"'
  596.                 end
  597.             end
  598.         otherwise nop
  599.         end
  600.     if exists(OutFile) then do
  601.         if word(statef(OutFile),3) > 0 then    'sort' OutFile OutFile'1'
  602.         else 'echo >'OutFile'1 "No index files available in configured directory"'
  603.         end
  604.  
  605.     /* Display list */
  606.     address(GuiPort)
  607.     if ~open(listfile,OutFile'1','R') then call ExitMsg('Error reading file')
  608.     do while ~eof(listfile)
  609.         line = readln(listfile)
  610.         if line > '' then 'list id CDLST insert string' line
  611.         end
  612.     call close(listfile)
  613.     'application' MUIA_Application_Sleep FALSE
  614.     'list id CDLST attrs' MUIA_List_Quiet FALSE
  615.     return
  616. ;;;
  617. /* ;;; Translate Index file name into CD title */
  618. SetCDTitle:
  619.     select
  620.         when CDTitle = 'AMINET01:' then do
  621.             CDTitle = 'AMINET_0693:'
  622.             parsecmd = "name='';size=line;desc='';path=''"
  623.             end
  624.         when CDTitle = 'AMINET02:' then do
  625.             CDTitle = 'AMINET_0294:'
  626.             parsecmd = 'parse var line name =22 path =33 size =37 age =38 desc'
  627.             end
  628.         when CDTitle = 'AMINET03:' then do
  629.             CDTitle = 'AMINET_0794:'
  630.             parsecmd = 'parse var line name =22 path =33 size =37 age =38 desc'
  631.             end
  632.         when CDTitle = 'AMINET04:' then do
  633.             CDTitle = 'AMINET4:'
  634.             parsecmd = 'parse var line name =22 path =33 size =37 age =38 desc'
  635.             end
  636.         when substr(CDTitle,7,1) = '0' then do
  637.             parsecmd = 'parse var line name =20 path =31 size =37 age =40 desc'
  638.             CDTitle = compress(CDTitle,'0')
  639.             end
  640.         otherwise parsecmd = 'parse var line name =20 path =31 size =37 age =40 desc'
  641.         end
  642.     return
  643. ;;;
  644. /* ;;; Error handler */
  645. Error:
  646.     oldaddress = address()
  647.     address(GuiPort)
  648.     call ShowMsg('Error' RC 'in line' sigl)
  649.     address(oldaddress)
  650.     if RC = 5 then return
  651.     call Cleanup()
  652.     return
  653. ;;;
  654.  
  655.