home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d9xx / d950 / bbsquick.lha / bbsQUICK / bbsQUICK64.lha / bbsQUICK.rexx < prev    next >
OS/2 REXX Batch file  |  1993-10-06  |  46KB  |  1,781 lines

  1. /* $VER: bbsQUICK.rexx 6.4 © 1993 Richard Lee Stockton (6.10.93)
  2.      - FREELY DISTRIBUTABLE AS LONG AS THIS NOTICE REMAINS -
  3.  
  4. requires: libs:rexxsyslib.library             c:LhA
  5.           libs:rexxsupport.library            c:join
  6.           libs:rexxarplib.library             c:copy
  7.           libs:rexxmathlib.library            c:delete
  8.           libs:screenshare.library            c:version
  9.           libs:arp.library
  10.  
  11.  - Preferences -
  12. prefs.0 = color data
  13. prefs.1 = work dir
  14. prefs.2 = download dir
  15. prefs.3 = upload dir
  16. prefs.4 = editor
  17. */
  18.  
  19. IF SHOW('P','QUICKHOST') THEN
  20.   DO
  21.     ADDRESS QUICKPORT FRONT
  22.     EXIT 0
  23.   END
  24.  
  25. IF ~SHOW('L','rexxsupport.library') THEN
  26.   CALL ADDLIB('rexxsupport.library',0,-30,0)
  27.  
  28. IF ~SHOW('L','rexxarplib.library') THEN
  29.   CALL ADDLIB('rexxarplib.library',0,-30,0)
  30.  
  31. CALL setup_variables()
  32. CALL setup_screen()
  33. CALL setup_host()
  34.  
  35. w.=''
  36. w.cols=ScreenCols(QUICKSCREEN)
  37. w.rows=ScreenRows(QUICKSCREEN)-1
  38. /* w.cols=640; w.rows=200 */
  39. lines_per_page=(w.rows-43)%8
  40. chars=(w.cols-48)%8
  41. w.idcmp='CLOSEWINDOW+MENUPICK+GADGETUP'
  42. w.flags='WINDOWCLOSE+ACTIVATE'
  43.  
  44. IF EXISTS(prefspath) THEN SIGNAL START
  45.  
  46. START_PREFS:
  47. p.=''
  48. p.title=CENTER('Please Enter Your Preferences',44)
  49. CALL OpenWindow(QUICKHOST,120,30,400,130,w.idcmp,w.flags,p.title)
  50.  
  51. CALL AddMenu(QUICKHOST,'Preferences    ')
  52. CALL AddItem(QUICKHOST,' Help','HELP','H')
  53. CALL AddItem(QUICKHOST,' Colors ...','COLORS','C')
  54. CALL AddItem(QUICKHOST,' Load ...','LOAD','L')
  55. CALL AddItem(QUICKHOST,' Save ...','SAVE',';')
  56. CALL AddItem(QUICKHOST,' Use','USE','U')
  57. CALL AddItem(QUICKHOST,' Cancel','CLOSEWINDOW','Q')
  58. CALL AddItem(QUICKHOST,' About','ABOUT')
  59.  
  60. pp.1='Work Dir:'
  61. pp.2='Download Dir:'
  62. pp.3='Upload Dir:'
  63. pp.4='Editor:'
  64. DO i=0 TO 9
  65.   p.i=prefs.i
  66. END
  67. DO i=1 TO 4
  68.   CALL SETAPEN(QUICKHOST,1)
  69.   CALL MOVE(QUICKHOST,18,29+17*i)
  70.   CALL TEXT(QUICKHOST,RIGHT(pp.i,16))
  71.   CALL AddGadget(QUICKHOST,158,23+17*i,i,p.i,'PREFS' i '%g',220,RIDGEBORDER)
  72. END
  73.  
  74. CALL AddGadget(QUICKHOST, 40,112,4,' Save ','SAVE')
  75. CALL AddGadget(QUICKHOST,180,112,5,' Use ','USE')
  76. CALL AddGadget(QUICKHOST,300,112,6,' Cancel ','CLOSEWINDOW')
  77. CALL AddGadget(QUICKHOST, 40,16,7,' Load ','LOAD')
  78. CALL AddGadget(QUICKHOST,176,16,8,' HELP ','HELP')
  79. CALL AddGadget(QUICKHOST,300,16,9,' Colors ','COLORS')
  80.  
  81. CALL tofront(QUICKHOST)
  82. CALL box(QUICKHOST,1,1,11,30,378,77)
  83. CALL SetAPen(QUICKHOST,3)
  84. CALL Flood(QUICKHOST,1,5,15)
  85. lastgad=1
  86.  
  87.  
  88. LOOP_PREFS:
  89. CALL SCREENTOFRONT(QUICKSCREEN)
  90. CALL SetAPen(QUICKHOST,1)
  91. DO FOREVER
  92.   CALL ActivateGadget(QUICKHOST,lastgad)
  93.   t=waitpkt(QUICKPORT)
  94.   DO ff=1
  95.     p=GETPKT(QUICKPORT)
  96.     IF c2d(p)=0 THEN LEAVE ff
  97.     command=GETARG(p)
  98.     PARSE VAR command arg1' 'arg2' 'arg3
  99.     t=REPLY(p,0)
  100.     SELECT
  101.       WHEN arg1='LOAD' THEN CALL config('LOAD')
  102.       WHEN arg1='SAVE' | arg1='USE' | arg1='CLOSEWINDOW' THEN
  103.         DO
  104.           DO i=1 TO 9 WHILE arg1~='CLOSEWINDOW'
  105.             prefs.i=p.i
  106.           END
  107.           CALL MAKEDIR(prefs.1)
  108.           CALL PRAGMA('D',prefs.1)
  109.           arcdir=makepath(prefs.3,'OUT')
  110.           CALL MAKEDIR(arcdir)
  111.           IF arg1='SAVE' THEN CALL config('SAVE')
  112.           CALL CloseWindow(QUICKHOST,'CONTINUE')
  113.           SIGNAL START
  114.         END
  115.       WHEN arg1='HELP' THEN CALL Request(,12,prefshelp,,,,QUICKSCREEN)
  116.       WHEN arg1='ABOUT' THEN CALL Request(200,45,abouttext,,,,QUICKSCREEN)
  117.       WHEN arg1='PREFS' THEN
  118.         DO
  119.           n=arg2
  120.           p.n=arg3
  121.           n=n+1
  122.           IF n>4 THEN n=1
  123.           lastgad=n
  124.         END
  125.       WHEN arg1='COLORS' THEN
  126.         /* INTERPRET */ ADDRESS AREXX Palette.rexx QUICKSCREEN 4 QUICKPORT 
  127.       WHEN arg1='NEW_COLORS' THEN p.0=new_colors()
  128.       WHEN arg1='MOUSEBUTTONS' THEN NOP
  129.       WHEN arg1='SELECTUP'     THEN NOP
  130.       WHEN arg1='CONTINUE'     THEN NOP
  131.       OTHERWISE CALL Request(,100,command,,,,QUICKSCREEN)
  132.     END
  133.   END
  134. END
  135.  
  136.  
  137. START:
  138. projects=SHOWDIR(prefs.1)
  139. IF WORDS(projects)=1 THEN
  140.   DO
  141.     arcdir=makepath(prefs.3,'OUT/'projects)
  142.     CALL MAKEDIR(arcdir)
  143.     workdir=makepath(prefs.1,projects)
  144.     CALL MAKEDIR(workdir)
  145.     CALL PRAGMA('D',workdir)
  146.   END
  147. ELSE IF projects~='' THEN CALL newarea()
  148. IF EXISTS('.ID') THEN CALL read_ID()
  149. ELSE CALL openarc()
  150.  
  151. RESTART:
  152. IF mode=0 THEN w.title='Notices and Information'
  153. IF mode=1 THEN w.title='Private EMail Messages'
  154. IF mode=2 THEN w.title='New Conferences Messages'
  155. IF mode=3 THEN w.title='Public Message Conferences'
  156. IF mode=4 THEN w.title='New File Descriptions'
  157. IF mode=5 THEN w.title='Public File Libraries'
  158. w.title=RIGHT(bbsname w.title,75)
  159. CALL OpenWindow(QUICKHOST,,9,w.cols,w.rows-8,w.idcmp,w.flags,w.title)
  160. CALL SetFont(QUICKHOST,'topaz.font',8)
  161.  
  162. CALL AddMenu(QUICKHOST,'Project       ')
  163. CALL AddItem(QUICKHOST,' New','NEW')
  164. CALL AddItem(QUICKHOST,' Open ...','OPEN','O')
  165. CALL AddItem(QUICKHOST,' Archive','ARC','A')
  166. CALL AddItem(QUICKHOST,' Info','INFO','I')
  167. CALL AddItem(QUICKHOST,' About','ABOUT')
  168. CALL AddItem(QUICKHOST,' Quit','CLOSEWINDOW','Q')
  169.  
  170. CALL AddMenu(QUICKHOST,'Movement            ')
  171. CALL AddItem(QUICKHOST,' Line Forward','LINE UP','.')
  172. CALL AddItem(QUICKHOST,' Line Back','LINE BACK',',')
  173. CALL AddItem(QUICKHOST,' Page Forward','PAGE UP','F')
  174. CALL AddItem(QUICKHOST,' Page Back','PAGE BACK','B')
  175. CALL AddItem(QUICKHOST,' Zip to Beg/End','PAGE ZIP','Z')
  176.  
  177. CALL AddMenu(QUICKHOST,'Commands      ')
  178. CALL AddItem(QUICKHOST,' Mode ...','CONTINUE')
  179. CALL AddSubItem(QUICKHOST,'   Notices','MODE 0','1',62)
  180. CALL AddSubItem(QUICKHOST,'   EMail','MODE 1','2',61)
  181. CALL AddSubItem(QUICKHOST,'   Messages','MODE 2','3',59)
  182. CALL AddSubItem(QUICKHOST,'   Conferences','MODE 3','4',55)
  183. CALL AddSubItem(QUICKHOST,'   FileList','MODE 4','5',47)
  184. CALL AddSubItem(QUICKHOST,'   Libraries','MODE 5','6',31)
  185. CALL AddItem(QUICKHOST,' Print','PRINT','[')
  186. CALL AddItem(QUICKHOST,' Search','SEARCH','S')
  187. IF mode=1 & level>sysoplevel THEN CALL AddItem(QUICKHOST,' User','USER','')
  188. IF mode<2 THEN
  189.   DO
  190.     CALL AddItem(QUICKHOST,' Delete','KILL','K')
  191.     CALL AddItem(QUICKHOST,' Save As','SAVEAS','S')
  192.   END
  193. IF mode<3 THEN
  194.   DO
  195.     CALL AddItem(QUICKHOST,' Previous','NEXT BACK','P')
  196.     CALL AddItem(QUICKHOST,' Next','NEXT FORWARD','N')
  197.   END
  198. IF mode=1 | mode=2 | mode=3 THEN
  199.     CALL AddItem(QUICKHOST,' Write','WRITE','W')
  200. IF mode=4 THEN
  201.   DO
  202.     CALL AddItem(QUICKHOST,' Download','DOWNLOAD','D')
  203.     IF level>=sysoplevel THEN
  204.       DO
  205.         CALL AddItem(QUICKHOST,' Kill','DELETE')
  206.         CALL AddItem(QUICKHOST,' Change','CHANGE')
  207.       END
  208.     IF WORDS(SHOWDIR(makepath(workdir,'EmailFiles')'/'name))>0 THEN
  209.       CALL AddItem(QUICKHOST,' EmailFiles','EFILES','E')
  210.   END
  211. IF mode=5 THEN CALL AddItem(QUICKHOST,' Upload','UPLOAD','U')
  212. CALL SetItem(QUICKHOST,2,0,mode,'ON')
  213.  
  214. CALL AddMenu(QUICKHOST,'Preferences     ')
  215. CALL AddItem(QUICKHOST,' Set ...','CONFIG SET','/')
  216. CALL AddItem(QUICKHOST,' Load ...','CONFIG LOAD','L')
  217. CALL AddItem(QUICKHOST,' Save ...','CONFIG SAVE',';')
  218. CALL AddItem(QUICKHOST,' Colors ...','COLORS','C')
  219.  
  220. IF mode<3 THEN
  221.   DO
  222.     CALL AddGadget(QUICKHOST,110,14,2,' Previous ','NEXT BACK')
  223.     CALL AddGadget(QUICKHOST,210,14,3,' Next ','NEXT FORWARD')
  224.   END
  225. IF mode=1 | mode=2 | mode=3 THEN
  226.   CALL AddGadget(QUICKHOST,20,14,1,' Write ','WRITE')
  227. IF mode=4 THEN
  228.   DO
  229.     CALL AddGadget(QUICKHOST,14,14,1,' Download ','DOWNLOAD')
  230.     IF level>=sysoplevel THEN
  231.       CALL AddGadget(QUICKHOST,108,14,2,' Kill ','DELETE')
  232.     IF WORDS(SHOWDIR(makepath(workdir,'EmailFiles')'/'name))>0 THEN
  233.       CALL AddGadget(QUICKHOST,170,14,3,' EmailFiles ','EFILES')
  234.   END
  235. IF mode=5 THEN CALL AddGadget(QUICKHOST,20,14,1,' Upload ','UPLOAD')
  236. CALL AddGadget(QUICKHOST,w.cols-130,14,4,' Page Forward ','PAGE UP')
  237. CALL AddGadget(QUICKHOST,w.cols-235,14,5,' Page Back ','PAGE BACK')
  238. CALL AddGadget(QUICKHOST,280,14,6,CENTER(modetext.mode,13),'NEW_MODE')
  239. CALL SetGadget(QUICKHOST,6,'ON')
  240. CALL tofront(QUICKHOST)
  241. CALL boxes()
  242. CALL SetAPen(QUICKHOST,3)
  243. CALL Flood(QUICKHOST,1,5,15)
  244. CALL read_QUICK()
  245. IF mode=0 | mode=2 THEN CALL do_marked()
  246.  
  247.  
  248.                              /* Wait Loop */
  249. LOOP:
  250. CALL SCREENTOFRONT(QUICKSCREEN)
  251. CALL SetAPen(QUICKHOST,1)
  252. DO FOREVER
  253.   t=waitpkt(QUICKPORT)
  254.   DO ff=1
  255.     p=GETPKT(QUICKPORT)
  256.     IF c2d(p)=0 THEN LEAVE ff
  257.     command=GETARG(p)
  258.     PARSE VAR command arg1' 'arg2' 'arg3' 'arg4
  259.     t=REPLY(p,0)
  260.     SELECT
  261.       WHEN arg1='FRONT'        THEN CALL tofront(QUICKHOST)
  262.       WHEN arg1='NEW'          THEN CALL new()
  263.       WHEN arg1='OPEN'         THEN CALL openarc()
  264.       WHEN arg1='INFO'         THEN CALL info()
  265.       WHEN arg1='HELP'         THEN CALL Request(,12,mainhelp,,,,QUICKSCREEN)
  266.       WHEN arg1='ABOUT'        THEN CALL Request(200,45,abouttext,,,,QUICKSCREEN)
  267.       WHEN arg1='CLOSEWINDOW'  THEN CALL ALL_DONE('')
  268.       WHEN arg1='LINE'         THEN CALL line(arg2)
  269.       WHEN arg1='PAGE'         THEN CALL page(arg2)
  270.       WHEN arg1='PRINT'        THEN CALL print()
  271.       WHEN arg1='WRITE'        THEN CALL write()
  272.       WHEN arg1='SEARCH'       THEN CALL searchreq()
  273.       WHEN arg1='NEXT'         THEN CALL nextitem(arg2)
  274.       WHEN arg1='UPLOAD'       THEN CALL upload()
  275.       WHEN arg1='DOWNLOAD'     THEN CALL do_action('Download')
  276.       WHEN arg1='DELETE'       THEN CALL do_action('Delete')
  277.       WHEN arg1='EFILES'       THEN CALL efiles()
  278.       WHEN arg1='USER'         THEN CALL user()
  279.       WHEN arg1='KILL'         THEN CALL kill()
  280.       WHEN arg1='SAVEAS'       THEN CALL saveas()
  281.       WHEN arg1='CHANGE'       THEN CALL do_action('Change')
  282.       WHEN arg1='ARC'          THEN CALL archive()
  283.       WHEN arg1='MODE'         THEN DO;mode=arg2;CALL whichmode(0);END
  284.       WHEN arg1='CONFIG'       THEN CALL config(arg2)
  285.       WHEN arg1='COLORS'       THEN
  286.         /* INTERPRET */ ADDRESS AREXX Palette.rexx QUICKSCREEN 4 QUICKPORT 
  287.       WHEN arg1='NEW_COLORS'   THEN prefs.0=new_colors()
  288.       WHEN arg1='NEW_MODE'     THEN CALL whichmode(1)
  289.       WHEN arg1='MOUSEBUTTONS' THEN NOP
  290.       WHEN arg1='SELECTUP'     THEN NOP
  291.       WHEN arg1='CONTINUE'     THEN NOP
  292.       OTHERWISE CALL Request(,100,command 'is not finished...',,,,QUICKSCREEN)
  293.     END
  294.   END
  295. END
  296. CALL ALL_DONE('This error should never occur.')
  297. EXIT
  298.  
  299.  
  300. /* Functions */
  301.  
  302. ALL_DONE:
  303. PARSE ARG air
  304. IF air~='' THEN
  305.   DO
  306.     CALL usermsg(air)
  307.     CALL waiting()
  308.   END
  309. IF WORDS(SHOWDIR(arcdir,'F'))>0 THEN
  310.   DO
  311.     temp='There are files ready to be archived for sending... Do it now?'
  312.     IF Request(,36,temp,,' NOW ',' LATER ',QUICKSCREEN)='OKAY' THEN
  313.       CALL archive()
  314.   END
  315. IF SHOW('P','QUICKHOST') THEN CALL Stop('QUICKHOST')
  316. CALL CloseScreen(QUICKSCREEN)
  317. EXIT
  318.  
  319.  
  320. do_marked:
  321. IF ~EXISTS('Marked') THEN RETURN
  322. x=OPEN(f,'Marked','R')
  323. IF x=0 THEN RETURN
  324. t=''
  325. t=STRIP(LEFT(READLN(f),74))
  326. DO i=2 TO 16
  327.   line=READLN(f)
  328.   IF EOF(f) THEN LEAVE i
  329.   t=t'\'STRIP(LEFT(line,74))
  330. END
  331. IF i>16 THEN t=t'\--- more ---'
  332. CALL CLOSE(f)
  333. IF Request(,,t,,' Don''t Tell Me Again ',' Thanks ',QUICKSCREEN)='OKAY' THEN
  334.   CALL DELETE('Marked')
  335. RETURN
  336.  
  337.  
  338. efiles:
  339. ef=SHOWDIR('EmailFiles/'name)
  340. IF ef="" THEN
  341.   DO
  342.     CALL usermsg('No emailfiles were found!')
  343.     CALL waiting()
  344.     RETURN
  345.   END
  346. ename=GetFile(150,16,makepath(workdir,'EmailFiles/'name),,'Select File To Move',QUICKSCREEN)
  347. IF ename='' | ~EXISTS(ename) THEN RETURN
  348. sname=SUBSTR(ename,LASTPOS('/',ename)+1)
  349. dname=GetFile(150,16,prefs.2,sname,'Select Destination',QUICKSCREEN)
  350. IF dname='' THEN RETURN
  351. IF WORD(STATEF(dname),1)='FILE' THEN
  352.   DO
  353.     IF Request(,36,dname 'exists! Replace it?',,' REPLACE ',' CANCEL ',QUICKSCREEN)='OKAY' THEN
  354.       CALL DELETE(dname)
  355.     ELSE RETURN
  356.   END
  357. ELSE IF ~EXISTS(dname) THEN
  358.   DO
  359.     dd=LASTPOS('/',dname)-1
  360.     IF dd<1 THEN dd=LASTPOS(':',dname)
  361.     ddir=LEFT(dname,dd)
  362.     IF WORD(STATEF(ddir),1)~='DIR' THEN
  363.       DO
  364.         CALL usermsg(ddir 'does not exist!')
  365.         CALL waiting()
  366.         RETURN
  367.       END
  368.   END
  369. ADDRESS COMMAND 'copy' ename dname
  370. CALL DELETE(ename)
  371. RETURN
  372.  
  373.  
  374. archive:
  375. IF WORDS(SHOWDIR(arcdir))=0 THEN
  376.   DO
  377.     CALL usermsg('Nothing To Archive!')
  378.     CALL waiting()
  379.     RETURN
  380.   END
  381. IF arcdir=makepath(prefs.3,'OUT') & WORDS(SHOWDIR(arcdir,'D'))>0 THEN
  382.   DO
  383.     dirs=SHOWDIR(arcdir,'D')
  384.     temp='Select BBS by number...\'
  385.     iii=0
  386.     DO ii=1 TO WORDS(dirs)
  387.       IF WORDS(SHOWDIR(makepath(arcdir,WORD(dirs,ii))))=0 THEN ITERATE ii
  388.       iii=iii+1
  389.       IF iii=16 & WORDS(dirs)>ii THEN
  390.         DO
  391.           temp=temp'\ - Too many to fit! -'
  392.           LEAVE ii
  393.         END
  394.       temp=temp'\'RIGHT(ii,2)'.' WORD(dirs,ii)
  395.     END
  396.     IF iii=0 THEN
  397.       DO
  398.         CALL usermsg('Nothing To Archive!')
  399.         CALL waiting()
  400.         RETURN
  401.       END
  402.     temp=Request(150,,temp,'',,' CANCEL ',QUICKSCREEN)
  403.     IF temp='' | ~DATATYPE(temp,'W') THEN RETURN
  404.     IF temp<1 | temp>WORDS(dirs) THEN RETURN
  405.     arcdir=makepath(arcdir,WORD(dirs,temp))
  406.     CALL archive()
  407.     RETURN
  408.   END
  409. arcname=GetFile(150,16,prefs.3,'To'bbsnym'.lha','Name This QUICKIN Archive',QUICKSCREEN)
  410. IF arcname='' THEN RETURN
  411. IF EXISTS(arcname) THEN
  412.   DO
  413.     IF Request(,36,arcname 'exists. Delete the old one?',,' DELETE ',' CANCEL ',QUICKSCREEN)='OKAY' THEN
  414.       CALL DELETE(arcname)
  415.     ELSE RETURN
  416.   END
  417. CALL usermsg('Building Archive' arcname'...')
  418. ADDRESS COMMAND 'CD' arcdir LF 'lha -2arq m' arcname '#?'
  419. CALL PostMsg()
  420. RETURN
  421.  
  422.  
  423. editor:
  424. PARSE ARG tname 
  425. IF prefs.4='' THEN prefs.4='Ed'
  426. clicomm='CD' arcdir LF prefs.4 tname
  427. IF ksversion>=37 & UPPER(prefs.4)='ED' THEN
  428.   clicomm=clicomm' WINDOW=CON:/2/'ScreenCols()'/'Screenrows()-2'/'QUICK'/C'
  429. CALL ScreenToBack(QUICKSCREEN)
  430. ADDRESS COMMAND clicomm
  431. CALL ScreenToFront(QUICKSCREEN)
  432. RETURN
  433.  
  434.  
  435. user:
  436. uc='User_Changes'
  437. RETURN
  438.  
  439.  
  440. saveas:
  441. temp=SUBSTR(tfile,LASTPOS('/',tfile)+1)
  442. x=GetFile(150,16,prefs.2,temp,'Copy to where?',QUICKSCREEN)
  443. IF x='' THEN RETURN
  444. ADDRESS COMMAND 'copy' makepath(workdir,tfile) x 'CLONE'
  445.  
  446. kill:
  447. IF mode=0 THEN
  448.   DO
  449.     IF Request(,36,'Delete' tfile'?',,' DELETE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  450.       RETURN
  451.     CALL DELETE(makepath(workdir,tfile))
  452.     noticecount=noticecount+1
  453.     CALL CloseWindow(QUICKHOST,'CONTINUE')
  454.     SIGNAL RESTART
  455.   END
  456. IF Request(,36,'Delete Email' email.emailcount'?',,' DELETE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  457.   RETURN
  458. IF DELETE(makepath(workdir,'Email/'name'/'email.emailcount)) THEN
  459.   DO
  460.     CALL usermsg('Deleting' email.emailcount'...')
  461.     email.emailcount=''
  462.     CALL nextitem('FORWARD')
  463.   END
  464. RETURN
  465.  
  466.  
  467. write:
  468. IF name='' THEN RETURN
  469. IF mode=1 THEN
  470.   DO
  471.     IF DATATYPE(email.0,'W') & email.emailcount~='' THEN
  472.       DO
  473.         IF LEFT(email.emailcount,3)='MSG' THEN
  474.           DO
  475.             IF Request(,100,'Return this message to the conferences?',,' YES ',' NO ',QUICKSCREEN)~='OKAY' THEN
  476.               RETURN
  477.             CALL usermsg('Returning' email.emailcount 'to message conferences...')
  478.             CALL MAKEDIR(arcdir'/MSG')
  479.             com='COPY' makepath(workdir,'Email/'name'/'email.emailcount)
  480.             com=com makepath(arcdir,'MSG')
  481.             mADDRESS COMMAND com
  482.             CALL DELETE(makepath(workdir,'Email/'name'/'email.emailcount))
  483.             CALL PostMsg()
  484.             IF Request(,100,'Edit this message?',,' YES ',' NO ',QUICKSCREEN)~='OKAY' THEN
  485.               RETURN
  486.             CALL editor('MSG/'email.emailcount)
  487.             RETURN
  488.           END
  489.         dot=LASTPOS('.',email.emailcount)
  490.         IF dot<1 THEN
  491.           DO
  492.             subj=''
  493.             toname=''
  494.             tonamecity=''
  495.           END
  496.         ELSE
  497.           DO
  498.             toname=LEFT(email.emailcount,dot-1)
  499.             tonamecity=SUBSTR(text.2,8)
  500.             subj=STRIP(LEFT(SUBSTR(text.4,8),66))
  501.           END
  502.       END
  503.     ELSE
  504.       DO
  505.         subj=''
  506.         toname=''
  507.         tonamecity=''
  508.       END
  509.     hdr.=''
  510.     hdr.1=' Mail: QUICK'
  511.     hdr.2=' From: 'name '-' city
  512.     temp=hdr.1'\'hdr.2'\   To:' tonamecity
  513.     x=Request(,90,temp,toname,,,QUICKSCREEN)
  514.     IF x='' THEN RETURN
  515.     x=SPACE(UPPER(cleanstring(x)),1,'_')
  516.     IF x='SYSOP' & sysop~='' THEN x=sysop
  517.     IF x~=toname THEN
  518.       DO
  519.         toname=check_alias(x)
  520.         tonamecity=toname
  521.       END
  522.     IF tonamecity='' THEN tonamecity=toname
  523.     hdr.3='   To: 'tonamecity
  524.     temp=hdr.1'\'hdr.2'\'hdr.3'\ Subj:'
  525.     subj=Request(,90,temp,subj,,,QUICKSCREEN)
  526.     IF subj='' THEN subj='?'
  527.     hdr.4=' Subj: 'subj
  528.     hdr.5=' Date: 'DATE('W') DATE() TIME('C')
  529.     hdr.6=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  530.     temp=hdr.1'\'hdr.2'\'hdr.3'\'TRIM(LEFT(hdr.4,74))'\'hdr.5'\'hdr.6
  531.     IF Request(,90,temp,,' WRITE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  532.       RETURN
  533.     msgnum=get_number()
  534.     IF write_hdr(6) THEN RETURN
  535.     IF tonamecity~=toname THEN
  536.       DO
  537.         IF Request(,90,'Include Original Email From' toname '?',,' INCLUDE ',' LEAVE OUT ',QUICKSCREEN)='OKAY' THEN
  538.           DO
  539.             x=OPEN(f,txtfile,'W')
  540.             IF x=0 THEN
  541.               DO
  542.                 CALL usermsg(txtfile 'failed to open for writing!')
  543.                 CALL waiting()
  544.               END
  545.             ELSE
  546.               DO i=7 TO text.0
  547.                 CALL WRITELN(f,'>'text.i)
  548.               END
  549.             CALL CLOSE(f)
  550.           END
  551.       END
  552.     CALL editor(txtfile)
  553.     IF Request(,90,'Attach a file to this letter?',,' YES ',' NO ',QUICKSCREEN)~='OKAY' THEN
  554.       RETURN
  555.     mailfile=GetFile(150,16,prefs.3,,'Select file to attach.',QUICKSCREEN)
  556.     IF mailfile='' | ~EXISTS(mailfile) THEN RETURN
  557.     CALL MAKEDIR(arcdir'/Files')
  558.     ADDRESS COMMAND 'copy' mailfile arcdir'/Files'
  559.     hdr.1=hdr.1'    FILE:' getfilename(mailfile)
  560.     CALL write_hdr(6)
  561.     CALL usermsg('Mail will be sent to' toname'.')
  562.     CALL waiting()
  563.     RETURN
  564.   END
  565. IF mode=2 THEN
  566.   DO
  567.     n=Request(350,100,'Reply To What Message NUMBER?','',,' CANCEL ',QUICKSCREEN)
  568.     IF ~DATATYPE(n,'W') THEN RETURN
  569.     ln=search(1 '  Msg:' n)
  570.     IF ln=0 THEN
  571.       DO
  572.         CALL usermsg('Msg:' n 'not found in the' WORD(mess.0.1,messcount) 'Conference!')
  573.         CALL waiting()
  574.         RETURN
  575.       END
  576.     temp=text.ln
  577.     DO lnn=ln+1 TO ln+12
  578.       temp=temp'\'TRIM(LEFT(text.lnn,74))
  579.     END
  580.     IF Request(,,temp,,' REPLY ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN RETURN
  581.     lnn=ln+1
  582.     toname=WORD(text.lnn,2)
  583.     lnn=ln+3
  584.     subj=STRIP(LEFT(SUBSTR(text.lnn,8),66))
  585.     conf=WORD(mess.0.1,messcount)
  586.   END
  587. IF mode=3 THEN
  588.   DO
  589.     confnum=''
  590.     DO WHILE ~DATATYPE(confnum,'W')
  591.       confnum=Request(380,105,'Select Message\Conference by NUMBER','',,' CANCEL ',QUICKSCREEN)
  592.       IF confnum='' THEN RETURN
  593.     END
  594.     confnum=' 'confnum%1'.'
  595.     linenum=search(1 confnum)
  596.     IF linenum=0 THEN
  597.       DO
  598.         CALL usermsg('Unknown Message Conference number!')
  599.         CALL waiting()
  600.         RETURN
  601.       END
  602.     wordnum=FIND(text.linenum,confnum)+1
  603.     conf=WORD(text.linenum,wordnum)
  604.     toname=Request(200,100,'Post This Message To Who?','',,,QUICKSCREEN)
  605.     toname=SPACE(UPPER(cleanstring(toname)),1,'_')
  606.     IF toname='' THEN toname='ALL'
  607.     IF toname='SYSOP' & sysop~='' THEN toname=sysop
  608.     toname=check_alias(toname)
  609.     subj=''
  610.   END
  611. hdr.=''
  612. hdr.1='  Msg: QUICK'
  613. hdr.2=' From: 'name '-' city
  614. hdr.3='   To: 'toname
  615. IF mode=2 THEN hdr.3=hdr.3'   Msg' n
  616. temp=hdr.1'\'hdr.2'\'hdr.3'\ Subj:'
  617. subj=Request(,100,temp,subj,,,QUICKSCREEN)
  618. IF subj='' THEN subj='?'
  619. hdr.4=' Subj:' subj
  620. hdr.5=' Date:' DATE('W') DATE() TIME('C')
  621. hdr.5=LEFT(hdr.5,39) 'Conference:' conf
  622. hdr.6=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  623. temp=hdr.1'\'hdr.2'\'hdr.3'\'TRIM(LEFT(hdr.4,74))'\'TRIM(LEFT(hdr.5,74))'\'hdr.6
  624. IF Request(,10,temp,,' WRITE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  625.   RETURN
  626. msgnum=get_number()
  627. IF write_hdr(6) THEN RETURN
  628. IF mode=1 & tonamecity~=toname THEN
  629.   DO
  630.     IF Request(,100,'Include Original Email From' toname '?',,' INCLUDE ',' LEAVE OUT ',QUICKSCREEN)='OKAY' THEN
  631.       DO
  632.         x=OPEN(f,txtfile,'W')
  633.         IF x=0 THEN
  634.           DO
  635.             CALL usermsg(txtfile 'failed to open for writing!')
  636.             CALL waiting()
  637.           END
  638.         ELSE
  639.           DO i=7 TO text.0
  640.             CALL WRITELN(f,'>'text.i)
  641.           END
  642.         CALL CLOSE(f)
  643.       END
  644.   END
  645. CALL editor(txtfile)
  646. RETURN
  647.  
  648.  
  649. check_alias:
  650. PARSE ARG ali .
  651. IF ~DATATYPE(Friends.0,'W') THEN RETURN ali
  652. DO ii=1 TO Friends.0
  653.   IF UPPER(WORD(Friends.ii,1))=UPPER(ali) THEN RETURN WORD(Friends.ii,2)
  654. END
  655. RETURN ali
  656.  
  657.  
  658. write_hdr:
  659. ARG hdrlines 
  660. x=OPEN(f,hdrfile,'W')
  661. IF x=0 THEN
  662.   DO
  663.     CALL usermsg(hdrfile 'failed to open for writing!')
  664.     CALL waiting()
  665.     RETURN 1
  666.   END
  667. DO i=1 TO hdrlines
  668.   CALL WRITELN(f,hdr.i)
  669. END
  670. CALL CLOSE(f)
  671. RETURN 0
  672.  
  673.  
  674. get_number:
  675. DO i=.001 TO .999 BY .001
  676.   hdrfile=makepath(arcdir,RIGHT(i,3)'.HDR')
  677.   txtfile=makepath(arcdir,RIGHT(i,3)'.TXT')
  678.   IF ~EXISTS(hdrfile) THEN RETURN i
  679. END
  680. RETURN
  681.  
  682.  
  683. cleanstring:
  684. PARSE ARG cstr
  685. bot=TRIM(XRANGE(,' '))
  686. top=XRANGE('7B'x)
  687. cstr=STRIP(COMPRESS(cstr,bot||top))
  688. RETURN cstr
  689.  
  690.  
  691. upload:
  692. IF name='' THEN RETURN
  693. fullfile=GetFile(150,16,prefs.3,,'Select file to upload.',QUICKSCREEN)
  694. IF fullfile='' | ~EXISTS(fullfile) THEN RETURN
  695. finfo=STATEF(fullfile)
  696. namelen=22-LENGTH(WORD(finfo,2))
  697. ufile=getfilename(fullfile)
  698. ufile=COMPRESS(cleanstring(ufile),'()#?*;=')  /* remove DOS reserved chars */
  699. DO test=1
  700.   IF LENGTH(ufile)<=namelen THEN LEAVE test
  701.   temp='Your filename,' ufile', is' LENGTH(ufile)-namelen 'character'
  702.   IF (LENGTH(ufile)-namelen)>1 THEN temp=temp's'
  703.   temp=temp 'too long!'
  704.   temp=temp'\Please enter new filename:'
  705.   ufile=Request(100,120,temp,ufile,,' CANCEL ',QUICKSCREEN)
  706.   ufile=COMPRESS(cleanstring(ufile),'()#?*;=')
  707.   IF ufile='' THEN RETURN
  708. END
  709. libnum=''
  710. DO WHILE ~DATATYPE(libnum,'W')
  711.   libnum=Request(380,115,'Select Library by NUMBER','',,' CANCEL ',QUICKSCREEN)
  712.   IF libnum='' THEN RETURN
  713. END
  714. libnum=' 'libnum%1'.'
  715. linenum=search(1 libnum)
  716. IF linenum=0 THEN
  717.   DO
  718.     CALL usermsg('Unknown library number!')
  719.     CALL waiting()
  720.     RETURN
  721.   END
  722. wordnum=FIND(text.linenum,libnum)+1
  723. filedir=WORD(text.linenum,wordnum)
  724. temp='FileName:' ufile
  725. temp=temp'\ Library:' filedir'\'
  726. temp=temp'\Please Enter Keywords'
  727. temp=temp'\(or a condensed description)'
  728. temp=temp'\32 characters MAXIMUM...........|'
  729. keywords=''
  730. DO WHILE keywords=''
  731.   keywords=Request(,36,temp,'',,,QUICKSCREEN)
  732. END
  733. keywords=STRIP(LEFT(cleanstring(keywords),32))
  734. bytes=WORD(STATEF(fullfile),2)
  735. hdr.=''
  736. hdr.1='File: QUICK   KeyWords:' keywords
  737. hdr.2='Name: 'LEFT(ufile,27)' Size: 'bytes' bytes   Downloads: 0'
  738. hdr.3='From: 'LEFT(name,27)' Date: 'DATE() TIME('C')'  Lib: 'filedir
  739. hdr.4=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  740. msgnum=get_number()
  741. temp=hdr.1'\'hdr.2'\'TRIM(LEFT(hdr.3,74))'\'hdr.4
  742. IF Request(,100,'Add a longer file description?',,' YES ',' NO ',QUICKSCREEN)='OKAY' THEN
  743.   DO
  744.     CALL editor(txtfile)
  745.     CALL DELAY(50)
  746.     x=OPEN(f,txtfile,'R')
  747.     IF x~=0 THEN
  748.       DO
  749.         DO p=1 TO 9
  750.           line=TRIM(LEFT(READLN(f),74))
  751.           IF EOF(f) THEN LEAVE p
  752.           temp=temp'\'line
  753.         END
  754.         CALL CLOSE(f)
  755.       END
  756.   END
  757. IF Request(,36,temp,,' UPLOAD ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  758.   DO
  759.     CALL DELETE(txtfile)
  760.     CALL DELETE(hdrfile)
  761.     RETURN
  762.   END
  763. IF write_hdr(4) THEN RETURN
  764. udir=makepath(arcdir,'Files')
  765. CALL MAKEDIR(udir)
  766. ADDRESS COMMAND 'copy' fullfile udir'/'ufile
  767. temp='If' ufile 'replaces\a previous upload of yours,\'
  768. temp=temp'please enter the file number\of that previous upload.'
  769. n=Request(150,36,temp,'',,' CANCEL ',QUICKSCREEN)
  770. IF ~DATATYPE(n,'W') THEN RETURN
  771. action='Delete'
  772.  
  773. add_number:
  774. fname=arcdir'/File_Requests'
  775. IF action='Delete' THEN fname=arcdir'/File_Deletes'
  776. IF EXISTS(fname) THEN x=OPEN(f,fname,'A')
  777. ELSE x=OPEN(f,fname,'W')
  778. IF x=0 THEN 
  779.   DO
  780.     CALL usermsg(fname 'failed to open for writing!')
  781.     CALL waiting()
  782.     RETURN
  783.   END
  784. CALL WRITELN(f,n)
  785. CALL CLOSE(f)
  786. CALL usermsg('File number' n 'added to' action 'request list.')
  787. CALL waiting()
  788. RETURN
  789.  
  790.  
  791. do_action:
  792. PARSE ARG action 
  793. IF name='' THEN RETURN
  794. n=Request(150,100,'Enter File To' action 'by NUMBER','',,' CANCEL ',QUICKSCREEN)
  795. IF n='' THEN RETURN
  796. IF ~DATATYPE(n,'W') THEN
  797.   DO
  798.     CALL usermsg(action 'requests MUST be made by file NUMBER only!')
  799.     RETURN
  800.   END
  801. ln=search(1 'FILE:' n)
  802. IF ln=0 THEN
  803.   temp='File:' n 'not found in current list\Include in the' action 'Request anyway?'
  804. ELSE
  805.   DO
  806.     lnn=ln+1
  807.     lnnn=ln+2
  808.     temp=text.ln'\'text.lnn'\'TRIM(LEFT(text.lnnn,74))
  809.   END
  810. IF Request(,100,temp,,' 'UPPER(action)' ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN RETURN
  811. IF action~='Change' THEN
  812.   DO
  813.     CALL add_number()
  814.     RETURN
  815.   END
  816. IF sysoplevel>level THEN RETURN
  817. temp3=' ^ indicates no change from the original data in that position.\\'
  818. IF ln>0 THEN temp3=temp'\\'temp3
  819. hdr.=''
  820. hdr.1='File:' n'   KeyWords: ^'
  821. hdr.2='Name: 'LEFT('^',27)' Size: ^ bytes   Downloads: ^'
  822. hdr.3='From: 'LEFT('^',27)' Date: ^ ^ ^ ^  Lib: ^'
  823. hdr.4=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  824. temp=''
  825. IF ln>0 THEN PARSE VAR text.ln . 'KeyWords: 'temp
  826. x=Request(,20,'Change KeyWords',temp,,' NO ',QUICKSCREEN)
  827. IF x~='' & x~=temp THEN hdr.1='File:' n'   KeyWords:' STRIP(LEFT(x,32))
  828. temp=''
  829. IF ln>0 THEN PARSE VAR text.lnn 'Name: 'temp .
  830. DO test=1
  831.   x=Request(,20,temp3||hdr.1'\\Change FileName',temp,,' NO ',QUICKSCREEN)
  832.   IF x=temp | LENGTH(x)<17 THEN LEAVE test
  833.   CALL usermsg('Your filename is' LENGTH(x)-16 'characters too long!')
  834.   CALL waiting()
  835. END
  836. IF x~='' & x~=temp THEN hdr.2='Name: 'LEFT(x,27)' Size: ^ bytes   Downloads: ^'
  837. temp=''
  838. IF ln>0 THEN PARSE VAR text.lnnn 'From: 'temp .
  839. x=Request(,20,temp3||hdr.1'\'hdr.2'\\Change Uploader',temp,,' NO ',QUICKSCREEN)
  840. IF x~='' & x~=temp THEN hdr.3='From: 'LEFT(x,27)' Date: 'DATE() TIME('C')'  Lib: ^'
  841. temp=''
  842. IF ln>0 THEN PARSE VAR text.lnnn . 'Lib: 'temp
  843. PARSE VAR hdr.3 'From:' temp2 .
  844. x=Request(,20,temp3||hdr.1'\'hdr.2'\'TRIM(LEFT(hdr.3,74))'\\Change Library',temp,,' NO ',QUICKSCREEN)
  845. IF x~='' & x~=temp THEN
  846.   hdr.3='From: 'LEFT(temp2,27)' Date: 'DATE() TIME('C')'  Lib:' x
  847. msgnum=get_number()
  848. IF Request(,20,'Edit the longer file description?',,' YES ',' NO ',QUICKSCREEN)='OKAY' THEN
  849.   DO
  850.     IF ln>0 THEN
  851.       DO
  852.         ii=ln+5
  853.         IF text.ii~='=====' & text.0>=ii THEN
  854.           DO
  855.             x=OPEN(f,txtfile,'W')
  856.             IF x~=0 THEN
  857.               DO ii=ln+4 WHILE text.ii~='=====' & text.0>=ii
  858.                 CALL WRITELN(f,text.ii)
  859.               END
  860.             CALL CLOSE(f)
  861.             CALL DELAY(28)
  862.           END
  863.       END
  864.     CALL editor(txtfile)
  865.   END
  866. temp=temp3||hdr.1'\'hdr.2'\'TRIM(LEFT(hdr.3,74))'\'hdr.4
  867. IF Request(,20,temp,,' CHANGE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  868.   DO
  869.     CALL DELETE(txtfile)
  870.     CALL DELETE(hdrfile)
  871.     RETURN
  872.   END
  873. CALL write_hdr(4)
  874. RETURN
  875.  
  876.  
  877. searchreq:
  878. x=Request(350,100,'Search Phrase?','',,' CANCEL ',QUICKSCREEN)
  879. IF x='' THEN RETURN
  880. num=search(1 x)
  881. IF num=0 THEN
  882.   DO
  883.     CALL usermsg(x 'was not found!')
  884.     CALL waiting()
  885.   END
  886. ELSE CALL show_QUICK(num)
  887. RETURN
  888.  
  889.  
  890. search:
  891. ARG startline' 'searcharg
  892. DO si=startline TO text.0
  893.   IF POS(searcharg,UPPER(text.si))>0 THEN RETURN si
  894. END
  895. RETURN 0
  896.  
  897.  
  898. print:
  899. temp=modetext.mode
  900. IF mode=1 THEN temp=email.emailcount 'Email'
  901. IF mode=2 THEN temp=WORD(mess.0.1,messcount) 'Conference'
  902. pdev=Request(150,100,'Print' temp 'To:','PRT:',,' CANCEL ',QUICKSCREEN)
  903. IF pdev='' THEN RETURN
  904. x=OPEN(p,pdev,'W')
  905. IF x=0 THEN
  906.   DO
  907.     CALL usermsg(pdev 'failed to open for printing!')
  908.     CALL waiting()
  909.     RETURN
  910.   END
  911. DO i=1 TO text.0
  912.   CALL WRITELN(p,text.i)
  913. END
  914. CALL CLOSE(p)
  915. RETURN
  916.  
  917.  
  918. newarea:
  919. x=GetFile(150,36,prefs.1,,'Select BBS...',QUICKSCREEN)
  920. IF x='' | ~EXISTS(x) THEN RETURN
  921. finfo=STATEF(x)
  922. IF WORD(finfo,1)='FILE' THEN x=getdir(x)
  923. CALL MAKEDIR(x)
  924. IF ~EXISTS(x) THEN RETURN
  925. workdir=x
  926. CALL PRAGMA('D',workdir)
  927. arcdir=makepath(prefs.3,'OUT/'getfilename(workdir))
  928. CALL MAKEDIR(arcdir)
  929. CALL read_ID()
  930. RETURN
  931.  
  932.  
  933. new:
  934. IF Request(150,100,'Clear this area or change areas?',,' CLEAR ',' NEW BBS ',QUICKSCREEN)='OKAY' THEN
  935.   DO
  936.     CALL usermsg('Clearing work area...')
  937.     CALL clear()
  938.     CALL read_ID()
  939.   END
  940. ELSE CALL newarea()
  941. CALL CloseWindow(QUICKHOST,'CONTINUE')
  942. SIGNAL RESTART
  943. RETURN
  944.  
  945.  
  946. reset_vars:
  947. friends.=''
  948. text.=''
  949. mess.=''
  950. name=''
  951. city=''
  952. bbsname=''
  953. sysop=''
  954. keys=''
  955. mode=0
  956. notices=''
  957. level=0
  958. sysoplevel=99
  959. arcdate=''
  960. RETURN
  961.  
  962.  
  963. clear:
  964. CALL reset_vars()
  965. emdir=''
  966. efdir=''
  967. wemdir=''
  968. wefdir=''
  969. notices=''
  970. ndir=''
  971. IF EXISTS('Notices') THEN ndir='Notices/#? Notices'
  972. IF EXISTS('Email') THEN
  973.   DO
  974.     emdir=SHOWDIR('Email')
  975.     emdir=makepath('Email',WORD(emdir,1))
  976.     wemdir=emdir'/#?'
  977.     emdir=emdir 'Email'
  978.   END
  979. IF EXISTS('EmailFiles') THEN
  980.   DO
  981.     efdir=SHOWDIR('EmailFiles')
  982.     efdir=makepath('EmailFiles',WORD(efdir,1))
  983.     wefdir=efdir'/#?'
  984.     efdir=efdir 'EmailFiles'
  985.   END
  986. IF ndir~='' | wemdir~='' | wefdir~='' | emdir~='' | efdir~='' THEN
  987.   DO
  988.     comm='CD' workdir LF 'delete' ndir wemdir wefdir emdir efdir 'QUIET'
  989.     ADDRESS COMMAND comm
  990.   END
  991. CALL DELETE('Messages')
  992. IF EXISTS('Mess1') THEN
  993.   DO i=1 WHILE EXISTS('Mess'i)
  994.     CALL DELETE('Mess'i)
  995.   END
  996. CALL DELETE('FileList')
  997. IF EXISTS('List1') THEN
  998.   DO i=1 WHILE EXISTS('List'i)
  999.     CALL DELETE('List'i)
  1000.   END
  1001. RETURN
  1002.  
  1003.  
  1004. openarc:
  1005. arcfile=GetFile(150,16,prefs.2,'QUICK_','Select archive to process.',QUICKSCREEN)
  1006. IF arcfile='' THEN RETURN
  1007. CALL usermsg('Processing archive' arcfile' ...')
  1008. newname=name
  1009. newbbs=bbsname
  1010. comm='CD RAM:' LF 'lha -q x' arcfile '.ID'
  1011. ADDRESS COMMAND comm
  1012. x=OPEN(f,'RAM:.ID','R')
  1013. IF x=0 THEN
  1014.   DO
  1015.     CALL usermsg(arcfile 'is not a BBBBS QUICKOUT archive!')
  1016.     CALL waiting()
  1017.     RETURN
  1018.   END
  1019. newname=SUBSTR(READLN(f),8)
  1020. CALL READLN(f)
  1021. newbbs=SUBSTR(READLN(f),8)
  1022. CALL CLOSE(f)
  1023. newbbsnym=STRIP(LEFT(COMPRESS(newbbs," '/:;."),12))
  1024. workdir=makepath(prefs.1,newbbsnym)
  1025. CALL MAKEDIR(workdir)
  1026. CALL PRAGMA('D',workdir)
  1027. CALL DELETE('RAM:.ID')
  1028. test=''
  1029. IF EXISTS('Messages') & newname=name & newbbs=bbsname THEN
  1030.   DO
  1031.     test=Request(150,100,'Append To The Current Data or Clear?',,' APPEND ',' CLEAR ',QUICKSCREEN)
  1032.     CALL usermsg('Processing archive' arcfile' ...')
  1033.     IF test='OKAY' THEN
  1034.       DO
  1035.         CALL RENAME('Messages','Mess0')
  1036.         IF EXISTS('FileList') THEN CALL RENAME('FileList','List0')
  1037.       END
  1038.     ELSE CALL clear()
  1039.   END
  1040. ELSE CALL clear()
  1041. comm='CD' workdir LF 'lha -q x' arcfile
  1042. ADDRESS COMMAND comm
  1043. IF EXISTS('Mess0') THEN
  1044.   DO
  1045.     IF EXISTS('Messages') THEN
  1046.       DO
  1047.         DO j=1 WHILE EXISTS('Mess'j)
  1048.         END
  1049.         CALL RENAME('Messages','Mess'j)
  1050.       END
  1051.   END
  1052. IF EXISTS('List0') THEN
  1053.   DO
  1054.     IF EXISTS('FileList') THEN
  1055.       DO
  1056.         DO j=1 WHILE EXISTS('List'j)
  1057.         END
  1058.         CALL RENAME('FileList','List'j)
  1059.       END
  1060.   END
  1061. CALL read_ID()
  1062. CALL load_notices()
  1063. CALL sort_email()
  1064. dups.=''
  1065. dups.0=email.0
  1066. indx=1
  1067. DO i=1 TO email.0-1
  1068.   IF LEFT(email.i,3)='MSG' THEN email.i=''
  1069.   n=LASTPOS('.',email.i)
  1070.   IF n=0 THEN email.i=''
  1071.   IF email.i='' THEN ITERATE i
  1072.   thismail=LEFT(email.i,n)
  1073.   DO j=i+1 TO email.0
  1074.     n=LASTPOS('.',email.j)
  1075.     IF n=0 THEN email.j=''
  1076.     IF email.j='' THEN ITERATE i
  1077.     thatmail=LEFT(email.j,n)
  1078.     IF thatmail=thismail THEN
  1079.       DO
  1080.         dups.i=email.j dups.i
  1081.         email.j=''
  1082.       END
  1083.   END
  1084. END
  1085. DO i=1 TO dups.0
  1086.   IF dups.i='' THEN ITERATE i
  1087.   dups.i=email.i dups.i
  1088.   m=''
  1089.   DO j=1 TO WORDS(dups.i)
  1090.     x=OPEN(f,'Email/'name'/'WORD(dups.i,j),'R')
  1091.     IF x=0 THEN
  1092.       DO
  1093.         CALL usermsg('Email/'name'/'WORD(dups.i,j) 'failed to open for reading!')
  1094.         CALL waiting()
  1095.         RETURN
  1096.       END
  1097.     m=m||READCH(f,65000)||LF||LF
  1098.     CALL CLOSE(f)
  1099.     CALL DELETE('Email/'name'/'WORD(dups.i,j))
  1100.   END
  1101.   x=OPEN(f,'Email/'name'/'WORD(dups.i,1),'W')
  1102.   IF x=0 THEN
  1103.     DO
  1104.       CALL usermsg('Email/'name'/'WORD(dups.i,1) 'failed to open for writing!')
  1105.       CALL waiting()
  1106.       RETURN
  1107.     END
  1108.   CALL WRITECH(f,m)
  1109.   CALL CLOSE(f)
  1110. END
  1111. CALL sort_email()
  1112. CALL PostMsg()
  1113. CALL CloseWindow(QUICKHOST,'CONTINUE')
  1114. SIGNAL RESTART
  1115. RETURN
  1116.  
  1117.  
  1118. makepath:
  1119. PARSE ARG tdir,tfile
  1120. xx=RIGHT(tdir,1)
  1121. tpath=tdir
  1122. IF xx~=':' & xx~='/' THEN tpath=tpath'/'
  1123. tpath=tpath||tfile
  1124. RETURN tpath
  1125.  
  1126.  
  1127. read_ID:
  1128. CALL CLOSE(f)
  1129. x=OPEN(f,'.ID','R')
  1130. IF x=0 THEN
  1131.   DO
  1132.     CALL usermsg('.ID failed to open!')
  1133.     CALL waiting()
  1134.     RETURN
  1135.   END
  1136. id.=''
  1137. DO ii=1
  1138.   line=READLN(f)
  1139.   IF EOF(f) THEN LEAVE ii
  1140.   id.ii=line
  1141. END
  1142. id.0=ii-1
  1143. CALL CLOSE(f)
  1144. name=SUBSTR(id.1,8)
  1145. city=SUBSTR(id.2,8)
  1146. bbsname=SUBSTR(id.3,8)
  1147. bbsnym=STRIP(LEFT(COMPRESS(bbsname," '/:;."),12))
  1148. sysop=SUBSTR(id.4,8)
  1149. arcdate=SUBSTR(id.5,8)
  1150. keys=SUBSTR(id.6,8)
  1151. level=WORD(keys,2)
  1152. sysoplevel=WORD(keys,3)
  1153. x=makepath(prefs.3,'OUT')
  1154. arcdir=makepath(x,bbsnym)
  1155. CALL MAKEDIR(arcdir)
  1156. workdir=makepath(prefs.1,bbsnym)
  1157. CALL MAKEDIR(workdir)
  1158. CALL PRAGMA('D',workdir)
  1159. x=OPEN(f,'Friends','R')
  1160. IF x=0 THEN RETURN
  1161. DO ii=1
  1162.   line=READLN(f)
  1163.   IF EOF(f) THEN LEAVE ii
  1164.   friends.ii=line
  1165. END
  1166. CALL CLOSE(f)
  1167. friends.0=ii-1
  1168. RETURN
  1169.  
  1170.  
  1171. load_notices:
  1172. notices=SHOWDIR('Notices')
  1173. n=FIND(notices,'HELLO')
  1174. IF n>0 THEN notices=DELWORD(notices,n,1)
  1175. n=FIND(notices,'WELCOME')
  1176. IF n>0 THEN notices=DELWORD(notices,n,1)
  1177. n=FIND(notices,'GOODBYE')
  1178. IF n>0 & n<WORDS(notices) THEN notices=DELWORD(notices,n,1) 'Goodbye'
  1179. IF EXISTS('Notices/WELCOME') THEN notices='Welcome' notices
  1180. IF EXISTS('Notices/HELLO') THEN notices='Hello' notices
  1181. noticecount=1
  1182. IF notices='' THEN noticecount=0
  1183. RETURN
  1184.  
  1185.  
  1186. sort_email:
  1187. email.=''
  1188. emailcount=0
  1189. email=SHOWDIR('Email/'name)
  1190. email.0=WORDS(email)
  1191. IF email.0=0 THEN RETURN 1
  1192. email=sortnumbers(email)
  1193. DO i=1 TO WORDS(email)
  1194.   email.i=WORD(email,i)
  1195. END
  1196. IF emailcount>email.0 | emailcount<1 THEN emailcount=1
  1197. RETURN 0
  1198.  
  1199.  
  1200. read_QUICK:
  1201. CALL usermsg('Loading' modetext.mode'...')
  1202. tfile=modetext.mode
  1203. IF mode=0 THEN
  1204.   DO
  1205.     IF notices='' THEN CALL load_notices()
  1206.     IF notices='' THEN tfile=''
  1207.     ELSE tfile='Notices/'WORD(notices,noticecount)
  1208.   END
  1209. IF mode=1 THEN
  1210.   DO
  1211.     tfile=''
  1212.     IF DATATYPE(email.0,'W') & email.0>0 THEN
  1213.       DO
  1214.         DO WHILE emailcount<email.0 & email.emailcount=''
  1215.           emailcount=emailcount+1
  1216.         END
  1217.         tfile='Email/'name'/'email.emailcount
  1218.       END
  1219.     ELSE IF sort_email()=0 THEN
  1220.       DO
  1221.         tfile='Email/'name'/'email.1
  1222.         emailcount=1
  1223.       END
  1224.     ELSE emailcount=0
  1225.   END
  1226. IF mode=2 & DATATYPE(mess.0,'W') THEN
  1227.   DO
  1228.     messcount=1
  1229.     CALL nextitem('FORWARD')
  1230.     CALL PostMsg()
  1231.     RETURN
  1232.   END
  1233. IF tfile='' | ~EXISTS(tfile) THEN
  1234.   DO
  1235.     CALL PostMsg()
  1236.     CALL Move(QUICKHOST,220,100)
  1237.     CALL Text(QUICKHOST,'- No' modetext.mode 'Found -')
  1238.     RETURN
  1239.   END
  1240. text.=''
  1241. IF (mode=4 & EXISTS('List1')) | (mode=2 & EXISTS('Mess1')) THEN
  1242.   DO
  1243.     k=0
  1244.     text.0=0
  1245.     IF (mode=4 & EXISTS('List0')) | (mode=2 & EXISTS('Mess0')) THEN jj=0
  1246.     ELSE jj=1
  1247.     DO j=jj WHILE EXISTS('List'j)
  1248.       x=OPEN(f,'List'j,'R')
  1249.       IF x~=0 THEN
  1250.         DO i=1
  1251.           line=READLN(f)
  1252.           IF EOF(f) THEN LEAVE i
  1253.           k=k+1
  1254.           text.k=line
  1255.         END
  1256.       CALL CLOSE(f)
  1257.     END   
  1258.     text.0=k
  1259.     CALL show_QUICK(1)
  1260.     CALL PostMsg()
  1261.     RETURN
  1262.   END
  1263. IF mode=2 THEN mess.=''
  1264. x=OPEN(f,tfile,'R')
  1265. IF x~=0 THEN
  1266.   DO i=1
  1267.     line=READLN(f)
  1268.     IF mode=2 THEN mess.i=line
  1269.     ELSE text.i=line
  1270.     IF EOF(f) THEN LEAVE i
  1271.   END
  1272. CALL CLOSE(f)
  1273. IF mode=2 THEN
  1274.   DO
  1275.     mess.0=i
  1276.     CALL parse_mess()
  1277.   END
  1278. ELSE
  1279.   DO
  1280.     text.0=i
  1281.     CALL show_QUICK(1)
  1282.   END
  1283. CALL PostMsg()
  1284. RETURN
  1285.  
  1286.  
  1287. show_QUICK:
  1288. ARG startline 
  1289. CALL SetAPen(QUICKHOST,0)
  1290. CALL RectFill(QUICKHOST,12,28,w.cols-12,w.rows-14)
  1291. CALL SetAPen(QUICKHOST,1)
  1292. CALL SetBPen(QUICKHOST,0)
  1293. IF startline+lines_per_page>text.0 THEN startline=text.0+1-lines_per_page
  1294. IF startline<1 THEN startline=1
  1295. DO i=1 TO lines_per_page
  1296.   ii=i-1+startline
  1297.   CALL Move(QUICKHOST,24,28+i*8)
  1298.   CALL Text(QUICKHOST,LEFT(text.ii,chars))
  1299.   IF searcharg='' THEN ITERATE i
  1300.   n=POS(searcharg,UPPER(text.ii))
  1301.   IF n=0 THEN ITERATE i
  1302.   CALL SetAPen(QUICKHOST,2)
  1303.   CALL SetBPen(QUICKHOST,1)
  1304.   CALL Move(QUICKHOST,16+8*n,28+i*8)
  1305.   CALL Text(QUICKHOST,searcharg)
  1306.   CALL SetAPen(QUICKHOST,1)
  1307.   CALL SetBPen(QUICKHOST,0)
  1308. END
  1309. lastline=startline+i-2
  1310. IF mode<3 THEN
  1311.   DO
  1312.     CALL SetAPen(QUICKHOST,1)
  1313.     CALL SetBPen(QUICKHOST,3)
  1314.     CALL Move(QUICKHOST,30,7)
  1315.     IF mode=0 THEN
  1316.       temp=noticecount'/'WORDS(notices) WORD(notices,noticecount)
  1317.     ELSE IF mode=2 THEN temp=messcount'/'WORDS(mess.0.1) WORD(mess.0.1,messcount)
  1318.     ELSE temp=emailcount'/'email.0 email.emailcount
  1319.     temp=LEFT(temp,74-LENGTH(STRIP(w.title)))
  1320.     CALL Text(QUICKHOST,temp)
  1321.   END
  1322. IF text.0=0 THEN temp=100
  1323. ELSE temp=((.005+lastline/text.0)*100)%1
  1324. IF temp>100 THEN temp=100
  1325. temp=RIGHT(temp,4)
  1326. CALL SetAPen(QUICKHOST,2)
  1327. CALL SetBPen(QUICKHOST,1)
  1328. CALL Move(QUICKHOST,w.cols-58,34)
  1329. CALL Text(QUICKHOST,temp'% ')
  1330. searcharg=''
  1331. RETURN
  1332.  
  1333.  
  1334. parse_mess:
  1335. CALL PostMsg()
  1336. CALL usermsg('Setting Up Message Conferences...')
  1337. mess.0.0=1
  1338. mess.0.1='Header'
  1339. DO i=1 TO mess.0
  1340.   conf=''
  1341.   PARSE VAR mess.i 'Entering' conf 'Message Conference..'
  1342.   IF conf='' THEN ITERATE i
  1343.   mess.0.0=mess.0.0 i
  1344.   mess.0.1=mess.0.1 conf
  1345. END
  1346. messcount=1
  1347. CALL nextitem('FORWARD')
  1348. RETURN
  1349.  
  1350.  
  1351. filltext:
  1352. ARG top bot 
  1353. text.=''
  1354. DO i=top TO bot
  1355.   ii=1+i-top
  1356.   text.ii=mess.i
  1357. END
  1358. text.0=i-top
  1359. RETURN
  1360.  
  1361.  
  1362. page:
  1363. ARG direction
  1364. IF direction='UP' THEN temp=lastline
  1365. IF direction='BACK' THEN temp=lastline+2-2*lines_per_page
  1366. IF direction='ZIP' THEN
  1367.   DO
  1368.     IF lastline>lines_per_page THEN temp=1
  1369.     ELSE temp=text.0
  1370.   END
  1371. CALL show_QUICK(temp)
  1372. RETURN
  1373.  
  1374.  
  1375. line:
  1376. ARG direction
  1377. IF direction='UP' THEN temp=startline+1
  1378. IF direction='BACK' THEN temp=startline-1
  1379. CALL show_QUICK(temp)
  1380. RETURN
  1381.  
  1382.  
  1383. nextitem:
  1384. ARG direction 
  1385. IF mode=0 & notices~='' THEN
  1386.   DO
  1387.     IF direction='FORWARD' THEN noticecount=noticecount+1
  1388.     ELSE noticecount=noticecount-1
  1389.     IF noticecount>WORDS(notices) THEN noticecount=1
  1390.     IF noticecount<1 THEN noticecount=WORDS(notices)
  1391.     CALL read_QUICK()
  1392.   END
  1393. IF mode=1 & DATATYPE(email.0,'W') THEN
  1394.   DO
  1395.     IF direction='FORWARD' THEN emailcount=emailcount+1
  1396.     ELSE
  1397.       DO
  1398.         emailcount=emailcount-1
  1399.         DO WHILE emailcount>0 & email.emailcount=''
  1400.           emailcount=emailcount-1
  1401.         END
  1402.       END
  1403.     IF emailcount>email.0 THEN emailcount=1
  1404.     IF emailcount<1 THEN emailcount=email.0
  1405.     CALL read_QUICK()
  1406.   END
  1407. IF mode=2 & WORDS(mess.0.1)>0 THEN
  1408.   DO
  1409.     IF direction='FORWARD' THEN messcount=messcount+1
  1410.     ELSE messcount=messcount-1
  1411.     IF messcount>WORDS(mess.0.1) THEN messcount=1
  1412.     IF messcount<1 THEN messcount=WORDS(mess.0.1)
  1413.     a=WORD(mess.0.0,messcount)
  1414.     IF messcount=WORDS(mess.0.1) THEN b=mess.0+1
  1415.     ELSE b=WORD(mess.0.0,messcount+1)-1
  1416.     CALL filltext(a b)
  1417.     CALL show_QUICK(1)
  1418.   END
  1419. RETURN
  1420.  
  1421.  
  1422. sortnumbers: PROCEDURE
  1423. PARSE ARG slist
  1424. IF STRIP(slist)='' THEN RETURN ''
  1425. sorted.=''
  1426. oldest=999999
  1427. newest=0
  1428. newlist=''
  1429. DO si=1 TO WORDS(slist)
  1430.   testword=WORD(slist,si)
  1431.   IF ~DATATYPE(testword,'W') THEN
  1432.     DO
  1433.       testpos=LASTPOS('.',testword)
  1434.       IF testpos>0 THEN tempnum=SUBSTR(testword,testpos+1)
  1435.       ELSE
  1436.         DO
  1437.           newlist=testword newlist
  1438.           ITERATE si
  1439.         END
  1440.     END
  1441.   ELSE tempnum=testword/1
  1442.   IF sorted.tempnum='' THEN
  1443.     DO
  1444.       sorted.tempnum=testword
  1445.       sorted.tempnum.0=1
  1446.       IF DATATYPE(tempnum,'W') THEN
  1447.         DO
  1448.           IF tempnum>newest THEN newest=tempnum
  1449.           IF tempnum<oldest THEN oldest=tempnum
  1450.         END
  1451.     END
  1452.   ELSE newlist=newlist testword
  1453. END
  1454. IF oldest~=999999 & newest~=0 THEN
  1455.   DO si=oldest TO newest
  1456.     IF sorted.si.0=1 THEN newlist=newlist sorted.si
  1457.   END
  1458. RETURN STRIP(newlist)
  1459.  
  1460.  
  1461. whichmode:
  1462. ARG test 
  1463. IF test=1 THEN mode=mode+1
  1464. IF mode>5 THEN mode=0
  1465. CALL CloseWindow(QUICKHOST,CONTINUE)
  1466. SIGNAL RESTART
  1467. RETURN;
  1468.  
  1469.  
  1470. boxes:
  1471. CALL box(QUICKHOST,1,1,11,27,w.cols-22,w.rows-40)
  1472. RETURN
  1473.  
  1474.  
  1475. box:
  1476. ARG host,pen1,pen2,upleft,uptop,width,height
  1477. CALL SetAPen(host,pen2)
  1478. CALL Move(host,upleft+width+1,uptop)
  1479. CALL Draw(host,upleft+width+1,uptop+height)
  1480. CALL Draw(host,upleft-1,uptop+height)
  1481. CALL Move(host,upleft+width,uptop+1)
  1482. CALL Draw(host,upleft+width,uptop+height)
  1483. CALL SetAPen(host,pen1)
  1484. CALL Move(host,upleft,uptop)
  1485. CALL Draw(host,upleft+width,uptop)
  1486. CALL Move(host,upleft,uptop+height-1)
  1487. CALL Draw(host,upleft,uptop)
  1488. CALL Move(host,upleft-1,uptop)
  1489. CALL Draw(host,upleft-1,uptop+height)
  1490. RETURN
  1491.  
  1492.  
  1493. usermsg:
  1494. PARSE ARG umsg
  1495. umsg=STRIP(LEFT(umsg,74))
  1496. CALL PostMsg()
  1497. IF ScreenCols(QUICKSCREEN)>0 THEN
  1498.   CALL PostMsg((w.cols-40-LENGTH(umsg)*8)%2,60,umsg,QUICKSCREEN)
  1499. ELSE SAY umsg
  1500. RETURN
  1501.  
  1502.  
  1503. waiting:
  1504. CALL DELAY(150)
  1505. CALL PostMsg()
  1506. RETURN
  1507.  
  1508.  
  1509. setup_screen:
  1510. s.=''
  1511. s.modes='HIRES'
  1512. s.title=prgversion'   -   BBBBS OffLine Read/Reply Module'
  1513. IF ScreenRows(QUICKSCREEN)>0 THEN RETURN
  1514. IF OpenScreen(,2,s.modes,s.title,QUICKSCREEN)=0 THEN
  1515.   CALL ALL_DONE('Error!  Could not open bbsQUICK screen... Exiting.')
  1516. RETURN
  1517.  
  1518.  
  1519. setup_host:
  1520. ADDRESS AREXX  "'x=createhost(QUICKHOST,QUICKPORT,QUICKSCREEN)'"
  1521. DO 200 WHILE ~SHOW('Ports','QUICKHOST')
  1522.   CALL DELAY 10  /* 200 ms */
  1523. END
  1524. IF ~SHOW('Ports','QUICKHOST') THEN
  1525.   CALL ALL_DONE('Could not open host QUICKHOST.')
  1526. RETURN
  1527.  
  1528.  
  1529. info:
  1530. infotext=        '     User:' name'\'
  1531. infotext=infotext'     City:' city'\\'
  1532. infotext=infotext'      BBS:' bbsname'\'
  1533. infotext=infotext'    SysOp:' sysop'\'
  1534. infotext=infotext'     Keys:' keys'\'
  1535. temp=arcfile
  1536. IF temp='ARCFILE' | temp='' THEN temp='QUICK_'WORD(keys,1)'.lha'
  1537. ELSE
  1538.   DO
  1539.     n=LASTPOS('/',temp)
  1540.     IF n=0 THEN n=LASTPOS(':',temp)
  1541.     IF n>0 THEN temp=SUBSTR(temp,n+1)
  1542.   END
  1543. infotext=infotext'  Arcfile:' temp'\'
  1544. infotext=infotext' Archived:' arcdate'\\'
  1545. infotext=infotext'KickStart:' ksversion'\'
  1546. infotext=infotext'WorkBench:' wbversion'\\'
  1547. infotext=infotext'   Memory:' comma(STORAGE()) 'bytes free.'
  1548. CALL Request(170,45,infotext,,,,QUICKSCREEN)
  1549. RETURN
  1550.  
  1551.  
  1552. set_colors:
  1553. ARG host
  1554. IF prefs.0='' THEN prefs.0='10 10 10 0 0 0 15 15 15 12 8 8'
  1555. CALL SetRGB4(host,0,WORD(prefs.0,1),WORD(prefs.0,2),WORD(prefs.0,3))
  1556. CALL SetRGB4(host,1,WORD(prefs.0,4),WORD(prefs.0,5),WORD(prefs.0,6))
  1557. CALL SetRGB4(host,2,WORD(prefs.0,7),WORD(prefs.0,8),WORD(prefs.0,9))
  1558. CALL SetRGB4(host,3,WORD(prefs.0,10),WORD(prefs.0,11),WORD(prefs.0,12))
  1559. RETURN
  1560.  
  1561.  
  1562. tofront:
  1563. ARG host
  1564. CALL set_colors(host)
  1565. CALL ActivateWindow(host)
  1566. CALL ScreenToFront(QUICKSCREEN)
  1567. RETURN
  1568.  
  1569.  
  1570. getnames:
  1571. PARSE ARG tdir,tfile,ptext
  1572. x=GetFile(150,16,tdir,tfile,ptext,QUICKSCREEN)
  1573. RETURN x
  1574.  
  1575.  
  1576. getdir:
  1577. PARSE ARG full .
  1578. IF full='' THEN RETURN ''
  1579. n=LASTPOS('/',full)
  1580. IF n=0 THEN n=LASTPOS(':',full)
  1581. IF n=0 THEN tdir=''
  1582. ELSE
  1583.   DO
  1584.     tdir=LEFT(full,n)
  1585.     IF RIGHT(tdir,1)='/' THEN tdir=LEFT(tdir,n-1)
  1586.   END
  1587. RETURN tdir
  1588.  
  1589.  
  1590. getfilename:
  1591. PARSE ARG full .
  1592. IF full='' THEN RETURN ''
  1593. n=LASTPOS('/',full)
  1594. IF n=0 THEN n=LASTPOS(':',full)
  1595. IF n=0 THEN tfile=full
  1596. ELSE tfile=SUBSTR(full,n+1)
  1597. tfile=COMPRESS(tfile,' ,;|#?*')  /* be sure no illegals here */
  1598. RETURN tfile
  1599.  
  1600.  
  1601. config:
  1602. ARG action .
  1603. IF action='LOAD' THEN
  1604.   DO
  1605.     x=getnames(prefsdir,prefsfile,'Load Preferences File ')
  1606.     IF x='' THEN RETURN 1
  1607.     prefsdir=getdir(x)
  1608.     prefsfile=getfilename(x)
  1609.     CALL get_prefs()
  1610.   END
  1611. IF action='SAVE' THEN
  1612.   DO
  1613.     x=getnames(prefsdir,prefsfile,'Save Preferences File ')
  1614.     IF x='' THEN RETURN 2
  1615.     prefsdir=getdir(x)
  1616.     prefsfile=getfilename(x)
  1617.     CALL save_prefs()
  1618.   END
  1619. IF action='SET' THEN
  1620.   DO
  1621.     CALL CloseWindow(QUICKHOST,'CONTINUE')
  1622.     SIGNAL START_PREFS
  1623.   END
  1624. RETURN 0
  1625.  
  1626.  
  1627. get_prefs:
  1628. prefspath=makepath(prefsdir,prefsfile)
  1629. x=OPEN(f,prefspath,'R')
  1630. IF x=0 THEN
  1631.   DO
  1632.     CALL usermsg(prefspath 'failed to open!')
  1633.     CALL waiting()
  1634.     RETURN
  1635.   END
  1636. prefs.=''
  1637. DO i=0 TO 9
  1638.   prefs.i=READLN(f)
  1639. END
  1640. CALL CLOSE(f)
  1641. CALL MAKEDIR(prefs.1)
  1642. CALL MAKEDIR(prefs.2)
  1643. CALL MAKEDIR(prefs.3)
  1644. CALL PRAGMA('D',prefs.1)
  1645. arcdir=makepath(prefs.3,'OUT')
  1646. CALL MAKEDIR(arcdir)
  1647. RETURN
  1648.  
  1649.  
  1650. new_colors:
  1651. col=''
  1652. DO i=0 TO 3
  1653.   col=col ScreenColor(QUICKSCREEN,i)
  1654. END
  1655. RETURN STRIP(col)
  1656.  
  1657.  
  1658. save_prefs:
  1659. prefspath=makepath(prefsdir,prefsfile)
  1660. x=OPEN(f,prefspath,'W')
  1661. IF x=0 THEN
  1662.   DO
  1663.     CALL usermsg(prefspath 'failed to open!')
  1664.     CALL waiting()
  1665.     RETURN
  1666.   END
  1667. prefs.0=new_colors()
  1668. DO i=0 TO 9
  1669.   CALL WRITELN(f,prefs.i)
  1670. END
  1671. CALL CLOSE(f)
  1672. RETURN
  1673.  
  1674.  
  1675. comma:
  1676. NUMERIC DIGITS 14     /* largest number of digits ARexx can handle */
  1677. ARG num .
  1678. mant = num - num%1  /* anything to the right of the decimal point? */
  1679. IF mant = 0 THEN mant = ''
  1680. ELSE
  1681.   DO
  1682.     mant = SUBSTR(mant,2)       /* if yes, then remove leading "0" */
  1683.     num = num % 1                      /* make num into an integer */
  1684.   END
  1685. dgt = LENGTH(num)                       /* number of digits in num */
  1686. numtext = ''
  1687. IF dgt>3 THEN numtext = ','RIGHT(num,3)
  1688. IF dgt>6 THEN numtext = ','LEFT(RIGHT(num,6),3)||numtext
  1689. IF dgt>9 THEN numtext = ','LEFT(RIGHT(num,9),3)||numtext
  1690. IF dgt>12 THEN
  1691.   DO
  1692.     numtext = ','LEFT(RIGHT(num,12),3)||numtext
  1693.     numtext = LEFT(num,dgt-12)||numtext
  1694.   END
  1695. ELSE IF dgt>9 THEN numtext = LEFT(num,dgt-9)||numtext
  1696. ELSE IF dgt>6 THEN numtext = LEFT(num,dgt-6)||numtext
  1697. ELSE IF dgt>3 THEN numtext = LEFT(num,dgt-3)||numtext
  1698. ELSE numtext = num
  1699. numtext = numtext||mant          /* replace any decimal point data */
  1700. RETURN numtext
  1701.  
  1702.  
  1703. getversions:
  1704. ADDRESS COMMAND 'version >RAM:VERSION'
  1705. x=OPEN(f,'RAM:VERSION','R')
  1706. line=READLN(f)
  1707. CALL CLOSE(f)
  1708. CALL DELETE('RAM:VERSION')
  1709. wbversion=WORD(line,4)
  1710. IF ~DATATYPE(wbversion,'N') THEN
  1711.   DO
  1712.     wbversion=WORD(line,6)
  1713.     ksversion=WORD(line,3)
  1714.   END
  1715. ELSE ksversion=WORD(line,2)
  1716. IF RIGHT(ksversion,1)=',' THEN ksversion=LEFT(ksversion,LENGTH(ksversion)-1)
  1717. RETURN
  1718.  
  1719.  
  1720. setup_variables:
  1721. CALL reset_vars()
  1722. modetext.=''
  1723. modetext.0='Notices'
  1724. modetext.1='EMail'
  1725. modetext.2='Messages'
  1726. modetext.3='Conferences'
  1727. modetext.4='FileList'
  1728. modetext.5='Libraries'
  1729. startline=1
  1730. CALL OPENPORT(QUICKPORT)
  1731. CALL getversions()
  1732. prefs.=''
  1733. prefsdir='s:'
  1734. prefsfile='bbsQUICK.prefs'
  1735. prefspath=makepath(prefsdir,prefsfile)
  1736. IF EXISTS(prefspath) THEN CALL get_prefs()
  1737. ELSE
  1738.   DO
  1739.     prefs.1='RAM:Q'
  1740.     CALL MAKEDIR(prefs.1)
  1741.     CALL PRAGMA('D',prefs.1)
  1742.     arcdir=makepath(prefs.3,'OUT')
  1743.     CALL MAKEDIR(arcdir)
  1744.   END
  1745. x=SOURCELINE(1)
  1746. prgversion=''
  1747. DO i=3 TO 4
  1748.   prgversion=STRIP(prgversion WORD(x,i))
  1749. END
  1750. abouttext=CENTER(prgversion,32)'\\
  1751.   © 1993 Richard Lee Stockton\
  1752.      Voice:   206-776-1253\
  1753.        FAX:   206-775-7573\
  1754.        BBS:   206-744-1254\\
  1755.       FREELY DISTRIBUTABLE\
  1756.  AS LONG AS THIS NOTICE REMAINS'
  1757. prefshelp='- Work Dir -\
  1758. This is the directory where the QUICK_ archive will be decompressed,\
  1759. and from which the data files then will be read.\\
  1760.  - Download Dir -\
  1761. This should be your terminal program''s download directory where the\
  1762. QUICK_ archive (from the BBS to you) can be located.\\
  1763.  - Upload Dir -\
  1764. This should be your terminal program''s upload directory where the\
  1765. QUICKIN archive (from you to the BBS) can be built. Make sure that\
  1766. it is located somewhere other than RAM: so that data won''t be lost\
  1767. if the power goes off! A directory called OUT is made here and the\
  1768. OUTgoing (back to BBS) files are stored here for later archival.\\
  1769.  - Editor -\
  1770. Your choice of editor. Memacs works well, as does Ed.'
  1771. mainhelp='This should be the main help file, eh?  ;-)'
  1772. LF='0A'x
  1773. FF='0C'x
  1774. QT='22'x
  1775. IF ~SHOW('Ports','QUICKPORT') THEN
  1776.   CALL ALL_DONE('Could not open port QUICKPORT.')
  1777. RETURN
  1778.  
  1779.  
  1780. /* end of bbsQUICK.rexx */
  1781.