home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / comm / bbs / bbbbs / bbbbs72.lha / rexx / bbsExtDL.baud < prev    next >
Text File  |  1994-04-06  |  17KB  |  627 lines

  1. /* $VERS: bbsExtDL.baud 7.2 (6.4.94)
  2.  copyright 1992 Richard Lee Stockton
  3.         FREELY DISTRIBUTABLE
  4.  
  5. Allows BBBBS user to download from extra devices like CD drives.
  6. Keeps track of time left to this user, and watches for hangup.
  7.  
  8. Just ignores file or directory names that contain spaces
  9.  because BBBBS would be unable to download them anyway.
  10.  
  11. Ignores icons (files that end in .info).
  12.  
  13. A textfile in BBS:Lists, CD_Exclude, controls exclusion of
  14.  drawers on certain CDs that contain copyright files. Other
  15.  specific files or directories can be excluded by adding
  16.  their paths to the CD_Exclude textfile, one path per line.
  17.  
  18. Super-sysop may select very large directories and have their
  19.  formatted display lists cached as textfiles in bbspath'Cache'.
  20.  This can greatly improve access time for very large drawers,
  21.  especially if they contain sub-directories.
  22. */
  23.  
  24. SIGNAL ON BREAK_C
  25. SIGNAL ON BREAK_E
  26.  
  27. PARSE ARG name level maxtime linesperpage colorflag devlist 
  28.  
  29. exclude=''
  30. bbspath=GETCLIP('BBS_path')
  31. x=OPEN(f,bbspath'Lists/CD_Exclude','R')
  32. IF x~=0 THEN exclude=READCH(f,65000)
  33. CALL CLOSE(f)
  34. exclude=UPPER(TRANSLATE(exclude,' ','0A'x))
  35.  
  36. lists.=''
  37. lists.0=0
  38. maxtime=maxtime-30
  39. CALL TIME('R')
  40. CR='0D'x
  41. def=''
  42. pen3=''
  43. IF colorflag~=1 THEN
  44.   DO
  45.     def=''
  46.     pen3=''
  47.   END
  48. OPTIONS PROMPT 'Press RETURN'
  49. SAY CR
  50. x=OPEN(f,bbspath'BBS_TEXT/EXT_INFO','R')
  51. IF x=0 THEN SAY bbspath'BBS_TEXT/EXT_INFO failed to open!'CR
  52. ELSE
  53.   DO
  54.     DO i=1 WHILE ~EOF(f)
  55.       SAY READLN(f)||CR
  56.       IF (i+2)//linesperpage=0 THEN
  57.         DO
  58.           PULL junk
  59.           SAY '1B'x'M'||'1B'x'M'CR
  60.         END
  61.     END
  62.     CALL CLOSE(f)
  63.   END
  64. selected=''
  65. path=''
  66. templist=devlist
  67. devlist=''
  68. longest=0
  69. CALL PRAGMA('W','N')  /* disk requesters OFF */
  70. CALL PRAGMA('D',bbspath'Information')
  71. test3=PRAGMA('D')
  72. DO i=1 TO WORDS(templist)
  73.   test=WORD(templist,i)
  74.   IF ~EXISTS(test) THEN ITERATE i
  75.   CALL PRAGMA('D',test)
  76.   test2=PRAGMA('D')
  77.   IF test2=test3 THEN ITERATE i
  78.   IF WORDS(test2)>1 THEN test2=test
  79.   devlist=STRIP(devlist test2)
  80.   IF LENGTH(test2)>longest THEN longest=LENGTH(test2)
  81. END
  82. cols=76%(longest+8)
  83. IF devlist='' THEN
  84.   DO
  85.     SAY CR
  86.     SAY '*** Sorry, no External Devices are available! ***'CR
  87.     SAY CR
  88.     PULL junk
  89.     EXIT('')
  90.   END
  91.  
  92. picklist=devlist
  93. IF WORDS(picklist)=1 THEN
  94.   DO
  95.     path=picklist
  96.     IF RIGHT(path,1)~=':' THEN path=path'/'
  97.     picklist=makepicklist()
  98.   END
  99. ELSE
  100.   DO
  101.     lists.0=1
  102.     dirs=WORDS(devlist)
  103.   END
  104. CALL checkdcd()
  105.  
  106. OPTIONS PROMPT 'Press RETURN'
  107. PULL junk
  108.  
  109. DO loop=1
  110.   CALL checkdcd()
  111.   test=TIME('E')
  112.   IF test>(maxtime-100) THEN
  113.     DO
  114.       SAY CR
  115.       IF test>maxtime THEN
  116.         DO
  117.           SAY '*** This session''s time is expiring! ***'CR
  118.           SAY CR
  119.           LEAVE loop
  120.         END
  121.       ELSE SAY '*** Less than 2 minutes remaining! ***'CR
  122.       SAY CR
  123.     END
  124.   filename=pick(picklist)
  125.   IF filename='' THEN
  126.     DO
  127.       temp=path
  128.       IF RIGHT(temp,1)='/' THEN temp=LEFT(temp,LENGTH(temp)-1)
  129.       IF FIND(UPPER(devlist),UPPER(temp))>0 THEN
  130.         DO
  131.           IF WORDS(devlist)=1 THEN ITERATE loop
  132.           picklist=devlist
  133.           path=''
  134.           ITERATE loop
  135.         END
  136.       ELSE
  137.         DO
  138.           test=RIGHT(path,1)
  139.           IF test='/' THEN path=LEFT(path,LENGTH(path)-1)
  140.           slash=LASTPOS('/',path)
  141.           IF slash=0 THEN slash=LASTPOS(':',path)
  142.           path=LEFT(path,slash)
  143.         END
  144.     END
  145.   IF filename=':-)' THEN ITERATE loop
  146.   tempath=path||filename
  147.   temp=WORD(STATEF(tempath),1)
  148.   IF temp='FILE' THEN
  149.     DO
  150.       IF FIND(UPPER(selected),UPPER(tempath))=0 THEN
  151.         selected=selected tempath
  152.       ELSE selected=DELWORD(selected,FIND(UPPER(selected),UPPER(tempath)),1)
  153.       shosel=''
  154.       ITERATE loop
  155.     END
  156.   ELSE IF temp='DIR' THEN
  157.     DO
  158.       path=tempath
  159.       test=RIGHT(path,1)
  160.       IF test~='' & test~='/' & test~=':' THEN path=path'/'
  161.     END
  162.   ELSE IF UPPER(filename)='DONE' THEN LEAVE loop
  163.   IF path~='' THEN picklist=makepicklist()
  164. END
  165. selected=STRIP(selected)
  166. test=''
  167. IF WORDS(selected)=1 THEN test=UPPER(RIGHT(selected,4))
  168. IF selected~='' & test~='.LHA' & test~='.LZH' & test~='.DMS' & test~='.ZOO' THEN
  169.   DO
  170.     SAY CR
  171.     SAY 'You may choose to have your selection(s) archived using LhA.'CR
  172.     SAY 'This makes downloading faster, if the files are not already compressed.'CR
  173.     SAY 'The completed archive will be attached to email addressed to you.'CR
  174.     SAY CR
  175.     OPTIONS PROMPT 'Archive selected files? (nY) > '
  176.     PULL temp
  177.     IF LEFT(temp,1)~='N' THEN
  178.       DO
  179.         ADDRESS AREXX bbsArcExt.rexx name selected
  180.         selected=''
  181.         SAY CR
  182.         SAY 'BBBBS will notify you online when your archive is ready.'CR
  183.         SAY CR
  184.       END
  185.   END
  186. IF ADDRESS()='BAUD' THEN SAY 'Returning to the BBS...'CR
  187. SAY CR
  188. EXIT selected
  189.  
  190.  
  191. checkdcd:
  192. IF ADDRESS()~='BAUD' THEN RETURN
  193. dcd
  194. IF RC~=0 THEN RETURN
  195. CALL DELAY(128)
  196. dcd
  197. IF RC=0 THEN
  198.   DO
  199.     SAY CR
  200.     SAY '*** Lost Carrier while using bbsExtDL.baud ***'CR
  201.     EXIT('')
  202.   END
  203. RETURN
  204.  
  205.  
  206. makepicklist:
  207. IF path='' THEN RETURN ''
  208. IF STORAGE()<100000 THEN
  209.   DO
  210.     lists.=''
  211.     lists.0=0
  212.     IF WORDS(devlist)>1 THEN
  213.       DO
  214.         lists.0=1
  215.         lists.1.0=devlist
  216.       END
  217.   END
  218. DO i=1 TO lists.0
  219.   IF path=lists.i THEN RETURN lists.i.0
  220. END
  221. cname=STRIP(RIGHT(COMPRESS(path,' ._-:/'),29))
  222. IF cname~='' & EXISTS(bbspath'Cache/'cname) THEN
  223.   DO cloop=1 TO 1
  224.     k=lists.0+1
  225.     lists.0=k
  226.     x=OPEN(f,bbspath'Cache/'cname'.','R')
  227.     IF x=0 THEN SAY bbspath'Cache/'cname'. failed to open!'CR
  228.     ELSE
  229.       DO
  230.         cpath=READLN(f)
  231.         IF cpath=path THEN lists.k=path
  232.         ELSE
  233.           DO
  234.             IF level=99 THEN
  235.               SAY path 'does not match cache path in' cname'. !'CR
  236.             CALL CLOSE(f)
  237.             lists.0=lists.0-1
  238.             LEAVE cloop
  239.           END
  240.         DO i=1
  241.           line=READLN(f)
  242.           IF EOF(f) THEN LEAVE i
  243.           IF colorflag~=1 THEN
  244.             DO
  245.               n=POS('1B'x,line)
  246.               DO WHILE n>0
  247.                 DO m=2
  248.                   IF DATATYPE(SUBSTR(line,n+m,1),'M') | (n+m+1)>LENGTH(line) THEN
  249.                     leave m
  250.                 END
  251.                 line=DELSTR(line,n,m+1)
  252.                 n=POS('1B'x,line)
  253.               END
  254.             END
  255.           lists.k.i=line
  256.         END
  257.         CALL CLOSE(f)
  258.         lists.k.ROWS=i-1
  259.       END
  260.     x=OPEN(f,bbspath'Cache/'cname,'R')
  261.     IF x=0 THEN
  262.       DO
  263.         SAY bbspath'Cache/cname failed to open!'CR
  264.         CALL CLOSE(f)
  265.         lists.0=lists.0-1
  266.         LEAVE cloop
  267.       END
  268.     ELSE
  269.       DO
  270.         plist=READCH(f,65000)
  271.         CALL CLOSE(f)
  272.         lists.k.0=plist
  273.         RETURN plist
  274.       END
  275.   END
  276. SAY 'Loading...'CR
  277. CALL FileList(path'*',filelist,'F','N')
  278. IF filelist.0>1 THEN CALL QSORT(1,filelist.0,filelist)
  279. CALL FileList(path'*',dirlist,'D','N')
  280. IF dirlist.0>1 THEN CALL QSORT(1,dirlist.0,dirlist)
  281. plist=''
  282. dirs=0
  283. longest=0
  284. DO i=1 TO filelist.0
  285.   IF WORDS(filelist.i)~=1 THEN ITERATE i
  286.   IF filelist.i='' THEN ITERATE i
  287.   IF UPPER(RIGHT(filelist.i,5))='.INFO' THEN ITERATE i
  288.   IF FIND(exclude,UPPER(path||filelist.i))>0 THEN ITERATE i
  289.   plist=STRIP(plist filelist.i)
  290.   IF LENGTH(filelist.i)>longest THEN longest=LENGTH(filelist.i)
  291. END
  292. DO i=1 TO dirlist.0
  293.   IF WORDS(dirlist.i)~=1 THEN ITERATE i
  294.   IF FIND(exclude,UPPER(path||dirlist.i))>0 THEN ITERATE i
  295.   plist=STRIP(plist dirlist.i)
  296.   IF LENGTH(dirlist.i)>longest THEN longest=LENGTH(dirlist.i)
  297.   dirs=dirs+1
  298. END
  299. cols=76%(longest+9)
  300. lists.0=lists.0+1
  301. i=lists.0
  302. lists.i=path
  303. lists.i.0=plist
  304. DROP filelist. dirlist. 
  305. RETURN plist
  306.  
  307.  
  308. pick:
  309. PARSE ARG list 
  310. selection=''
  311. DO k=1 TO lists.0
  312.   IF path=lists.k THEN LEAVE k
  313. END
  314. IF ~DATATYPE(lists.k.ROWS,'N') THEN
  315.   DO
  316.     items=WORDS(list)
  317.     IF items<75 & dirs<25 THEN SAY 'Formatting' items 'items...'CR
  318.     ELSE SAY 'Please be patient, formatting' items 'items may take a while...'CR
  319.     lists.k.ROWS=(items%cols)+((items//cols)>0)
  320.     IF cols>items THEN cols=items
  321.     IF cols<1 THEN cols=1
  322.     longest=(76%cols)-8
  323.     lists.k=path
  324.     DO j=0 TO cols-1
  325.       DO i=1 TO lists.k.ROWS
  326.         thisnum=j*lists.k.ROWS+i
  327.         IF thisnum<=items THEN
  328.           DO
  329.             thisitem=WORD(list,thisnum)
  330.             filestat=STATEF(path||thisitem)
  331.             thisitem=LEFT(thisitem,longest)' '
  332.             IF WORD(filestat,1)='DIR' THEN
  333.               lists.k.i=lists.k.i||pen3'(dir) 'thisitem||def
  334.             ELSE
  335.               DO
  336.                 bytes=WORD(filestat,2)
  337.                 IF bytes<10000 THEN 
  338.                   lists.k.i=lists.k.i||RIGHT(bytes,5) thisitem
  339.                 ELSE IF bytes>1023999 THEN 
  340.                   lists.k.i=lists.k.i||RIGHT(bytes%1024000,4)'m' thisitem
  341.                 ELSE lists.k.i=lists.k.i||RIGHT(bytes%1024,4)'k' thisitem
  342.               END
  343.           END
  344.       END
  345.     END
  346.     IF level=99 & items>24 THEN
  347.       DO
  348.         SAY items 'items,' dirs 'dirs,' lists.k.ROWS 'rows'
  349.         OPTIONS PROMPT 'FileCache' path'? (Ny) > '
  350.         PULL junk
  351.         junk=LEFT(junk,1)
  352.         IF junk='Y' THEN
  353.           DO
  354.             CALL MAKEDIR(bbspath'Cache')
  355.             cname=STRIP(RIGHT(COMPRESS(path,' ._-:/'),29))
  356.             x=OPEN(f,bbspath'Cache/'cname,'W')
  357.             IF x=0 THEN SAY 'Unable to open cache file' cname'!'CR
  358.             ELSE
  359.               DO
  360.                 CALL WRITECH(f,list)
  361.                 CALL CLOSE(f)
  362.               END
  363.             x=OPEN(f,bbspath'Cache/'cname'.','W')
  364.             IF x=0 THEN
  365.               DO
  366.                 SAY 'Unable to open cache file' cname'. !'CR
  367.                 CALL DELETE(bbspath'Cache/'cname)
  368.               END
  369.             ELSE
  370.               DO
  371.                 CALL WRITELN(f,path)
  372.                 DO i=1 TO lists.k.ROWS
  373.                   CALL WRITELN(f,TRIM(lists.k.i))
  374.                 END
  375.                 CALL CLOSE(f)
  376.                 SAY path 'has been cached.'CR
  377.               END
  378.           END
  379.       END
  380.   END
  381. IF selected~='' THEN
  382.   DO
  383.     SAY CR
  384.     w=WORDS(selected)
  385.     temp=pen3' 'w def'selected files.'
  386.     IF shosel~=1 THEN
  387.       DO
  388.         SAY pen3'selected:'def||CR
  389.         DO i=1 TO w
  390.           SAY WORD(selected,i)||CR
  391.         END
  392.       END
  393.     ELSE temp='Enter' pen3'SHOW S'def'elected to display'temp
  394.     SAY temp||CR
  395.     IF w>5 THEN shosel=1
  396.   END
  397. SAY CR
  398. SAY 'current path ='pen3 path||def||CR
  399. SAY LEFT('-',75,'-')||CR
  400. OPTIONS PROMPT ' - ['pen3'N'def']on-stop  ['pen3'Q'def']uit  ['pen3'RETURN'def']=Continue - '
  401. DO i=1 TO lists.k.ROWS
  402.   SAY TRIM(lists.k.i)||CR
  403.   IF (i+2)//(linesperpage-1)=0 & nonstop~=1 THEN
  404.     DO
  405.       CALL whodat()
  406.       PULL junk
  407.       IF LEFT(UPPER(junk),1)='Q' THEN LEAVE i
  408.       IF LEFT(UPPER(junk),1)='N' THEN nonstop=1
  409.       IF colorflag=1 THEN SAY '1B'x'M'||LEFT('',75)||'1B'x'M'||CR
  410.     END
  411. END
  412. nonstop=0
  413. SAY LEFT('-',75,'-')||CR
  414. CALL whodat()
  415. readflag=0
  416. DO getloop=1
  417.   pstring=showtime()'   Enter ''?'' for HELP > '
  418.   OPTIONS PROMPT pstring
  419.   PARSE PULL selection 
  420.   IF selection='?' THEN
  421.     DO
  422.       CALL help()
  423.       OPTIONS PROMPT 'Press RETURN'
  424.       PULL junk
  425.       selection=';-)'
  426.       LEAVE getloop
  427.     END
  428.   IF LEFT(selection,1)='/' THEN selection=STRIP(SUBSTR(selection,2))
  429.   IF WORDS(selection)>1 THEN
  430.     DO
  431.       IF LEFT(UPPER(selection),6)='SHOW S' THEN
  432.         DO
  433.           shosel=''
  434.           selection=';-)'
  435.           LEAVE getloop
  436.         END
  437.       IF UPPER(selection)='SELECT ALL' THEN
  438.         DO
  439.           IF path='' | RIGHT(path,1)=':' | POS(UPPER(path),UPPER(devlist))>0 THEN
  440.             DO
  441.               SAY CR
  442.               SAY pen3'*** Archiving entire devices at one time is NOT allowed! ***'def||CR
  443.               SAY CR
  444.               ITERATE getloop
  445.             END
  446.           CALL selall(path)
  447.           shosel=''
  448.           selection=':-)'
  449.           LEAVE getloop
  450.         END
  451.       ELSE IF UPPER(WORD(selection,1))='READ' THEN
  452.         DO
  453.           readflag=1
  454.           selection=STRIP(DELWORD(selection,1,1))
  455.         END
  456.       ELSE IF UPPER(WORD(selection,1))='CD' THEN selection=SUBSTR(selection,4)
  457.       ELSE IF UPPER(WORD(selection,1))='DIR' THEN selection=SUBSTR(selection,5)
  458.     END
  459.   i=FIND('DONE' UPPER(list),UPPER(selection))
  460.   IF i=0 THEN
  461.     DO
  462.       i=FIND('DONE' UPPER(list),UPPER(selection':'))
  463.       IF i=0 THEN
  464.         DO
  465.           IF UPPER(selection)='KINGFISHER' THEN
  466.             DO
  467.               IF EXISTS('rexx:KingFisher.rexx') THEN
  468.                 CALL KingFisher.rexx(name '. .' colorflag maxtime)
  469.               ELSE IF EXISTS(bbspath'rexxDoors/KingFisher.rexx') THEN
  470.                 DO
  471.                   curdir=PRAGMA('D',bbspath'rexxDoors')
  472.                   CALL KingFisher.rexx(name '. .' colorflag maxtime)
  473.                   curdir=PRAGMA('D',curdir)
  474.                 END
  475.               ELSE SAY 'KingFisher.rexx not found!'CR
  476.             END
  477.           ELSE IF UPPER(selection)='Q' THEN selection='DONE'
  478.           ELSE ITERATE getloop
  479.         END
  480.       ELSE selection=selection':'
  481.     END
  482.   IF selection='' & path='' THEN ITERATE getloop
  483.   ELSE IF i>1 THEN selection=WORD(list,i-1)
  484.   IF readflag=1 THEN
  485.     DO
  486.       endtest=UPPER(RIGHT(selection,4))
  487.       IF FIND('.ARC .DMS .LZH .LHA .ZIP .ZOO',endtest)>0 THEN
  488.         DO
  489.           CALL Contents.rexx(path||selection)
  490.           IF EXISTS('RAM:CONTENTS') THEN CALL showtext('RAM: CONTENTS')
  491.         END
  492.       ELSE CALL showtext(path selection)
  493.       readflag=0
  494.       selection=';-)'
  495.     END
  496.   LEAVE getloop
  497. END
  498. RETURN selection
  499.  
  500.  
  501. selall: PROCEDURE EXPOSE selected pen3 def CR
  502. PARSE ARG dir .
  503. IF FIND(exclude,UPPER(dir))>0 THEN RETURN
  504. SAY 'Processing'pen3 dir||def||CR
  505. IF RIGHT(dir,1)~='/' THEN dir=dir'/'
  506. filelist.=''
  507. CALL FileList(dir'*',filelist,'F','F')
  508. DO i=1 TO filelist.0
  509.   IF filelist.i='' THEN ITERATE i
  510.   IF FIND(UPPER(selected),UPPER(filelist.i))=0 & FIND(UPPER(selected),'22'x||UPPER(filelist.i)'22'x)=0 THEN
  511.     DO
  512.       IF WORDS(filelist.i)>1 THEN
  513.         DO
  514.           SAY 'Space(s) in filename!  Unable to archive' filelist.i'.'CR
  515.           ITERATE i
  516.         END
  517.       selected=STRIP(selected filelist.i)
  518.     END
  519.   ELSE IF FIND(UPPER(selected),'22'x||UPPER(filelist.i)'22'x)>0 THEN
  520.     selected=DELWORD(selected,FIND(UPPER(selected),'22'x||UPPER(filelist.i)'22'x),1)
  521.   ELSE selected=DELWORD(selected,FIND(UPPER(selected),UPPER(filelist.i)),1)
  522. END
  523. dirlist.=''
  524. IF FileList(dir'*',dirlist,'D','F')=0 THEN RETURN
  525. DO j=1 TO dirlist.0
  526.   CALL selall(dirlist.j)
  527. END
  528. RETURN
  529.  
  530.  
  531. showtext:
  532. PARSE ARG tpath' 'textfile 
  533. test=RIGHT(tpath,1)
  534. IF test~='' & test~=':' & test~='/' THEN tpath=tpath'/'
  535. x=OPEN(f,STRIP(tpath||textfile),'R')
  536. IF x=0 THEN RETURN
  537. test=READCH(f,64)
  538. mask=XRANGE(,'06'x)||XRANGE('0E'x,'1A'x)||XRANGE('1C'x,'1F'x)
  539. IF VERIFY(test,mask,'M')>0 THEN
  540.   DO
  541.     CALL CLOSE(f)
  542.     testloc=VERIFY(test,mask,'M')
  543.     SAY '*** not an archive or a text file! ***'CR
  544.     SAY 'Character number' testloc 'is ASCII' C2D(SUBSTR(test,testloc,1))||CR
  545.     RETURN
  546.   END
  547. CALL SEEK(f,0,'B')
  548. OPTIONS PROMPT ' - ['pen3'N'def']on-stop  ['pen3'Q'def']uit  ['pen3'RETURN'def']=Continue - '
  549. SAY CR
  550. SAY '-' tpath||textfile '-'CR
  551. DO i=1 WHILE ~EOF(f)
  552.   SAY COMPRESS(READLN(f),CR||'0C'x)||CR
  553.   IF i//(linesperpage-1)=0 & nonstop~=1 THEN
  554.     DO
  555.       CALL whodat()
  556.       PULL junk
  557.       IF LEFT(UPPER(junk),1)='Q' THEN LEAVE i
  558.       IF LEFT(UPPER(junk),1)='N' THEN nonstop=1
  559.       IF colorflag=1 | ADDRESS()~='BAUD'THEN
  560.         SAY '1B'x'M'||LEFT('',60)||'1B'x'M'||CR
  561.     END
  562. END
  563. CALL CLOSE(f)
  564. IF i//(linesperpage-1)>1 THEN
  565.   DO
  566.     OPTIONS PROMPT ' - ['pen3'RETURN'def']=Continue - '
  567.     PULL junk
  568.   END
  569. nonstop=0
  570. RETURN
  571.  
  572.  
  573. whodat:
  574. IF ADDRESS()~='BAUD' THEN RETURN
  575. MSG RIGHT(' ',66-LENGTH(name)) '1B'x'M'||''||''||' 'name' level 'level' '||''
  576. CALL checkdcd()
  577. RETURN
  578.  
  579.  
  580. help:
  581. SAY CR
  582. SAY CR
  583. SAY pen3'- HELP -'def
  584. SAY CR
  585. SAY 'You can navigate through directory levels using the following commands.'CR
  586. SAY 'Remember that the name must appear in the display before you can select it.'CR
  587. SAY 'Filenames are displayed with their filesizes on the left, and directories'CR
  588. SAY 'will have a' pen3'(dir)'def' on their left.'CR
  589. SAY CR
  590. SAY 'To select an item from the displayed list, enter its name as displayed.'CR
  591. SAY 'If the selected item is a' pen3'directory'def', its contents will be displayed.'CR
  592. SAY 'If the selected item is a file, it is added to the ''selected'' list.'CR
  593. SAY 'To remove a selected file from the list, enter its name again.'CR
  594. SAY CR
  595. SAY 'To display the parent directory, enter an ''empty'' RETURN'CR
  596. SAY 'To read a textfile or see the contents of an archive, enter' pen3'READ'def 'filename.'CR
  597. SAY 'To select ALL items from the current display, including the contents of all'CR
  598. SAY 'displayed directories and their sub-directories, enter 'pen3'SELECT ALL'def'.'CR
  599. SAY CR
  600. IF EXISTS('rexx:KingFisher.rexx') | EXISTS(bbspath'rexxDoors/KingFisher.rexx') THEN
  601.   SAY 'Enter 'pen3'KINGFISHER'def' to use the online search facility.'CR
  602. SAY CR
  603. SAY 'Enter'pen3 'DONE' def'to return to the BBS (and download any selected files)'CR
  604. SAY CR
  605. RETURN
  606.  
  607.  
  608. showtime:
  609. mins=(maxtime-TIME('E'))%60
  610. secs=TRUNC((maxtime-TIME('E'))//60)
  611. IF secs<10 THEN secs='0'secs
  612. RETURN 'Time Remaining: 'mins':'secs
  613.  
  614.  
  615. BREAK_E:
  616. SAY CR
  617. SAY pen3'*** CONTROL-E BREAK ***'def||CR
  618. i=999999
  619. RETURN ''
  620.  
  621.  
  622. BREAK_C:
  623. SAY CR
  624. EXIT ''
  625.  
  626. /* bbsExtDL.baud */
  627.