10 ON ERROR PROCerror(ERR,""):D%=-1:CLEAR:RUN 20 REM *** SYSTEMS server Module 2 (main Module) *** 30 REM *** Displays full context menu - PROCs *** 40 REM *** can just be *SPOOLed onto the end of *** 50 REM *** the program and called thus making *** 60 REM *** enhancement easy. If PROC is not re- *** 70 REM *** sident in this module then the appro- *** 80 REM *** priate module is loaded and RUN. Menu *** 90 REM *** choice is carried in variable D% *** 100 : 110 REM ********* MODE SELECTION - CALL INITIALISATION - MAIN LOOP ************ 120 PROCinit:PROCkon 130 PROCprocess(1):PROCprocess(0) 140 REPEAT 150 IF D%=-1 THEN D%=FNmenu 160 IF D%=7 THEN PROCadd 170 IF D%=0 AND Active%>0 THEN PROCload 180 IF D%=6 THEN PAGE=&1900:CHAIN"SERVER1" 190 IF D%=2 AND Active%>0 THEN PROCbrowse 200 PROCclear 210 IF D%=1 AND Active%>0 THEN PROCtransfer:PAGE=&1900:CHAIN"SERVER3" 220 IF D%=3 AND Active%>0 THEN PROCtransfer:PAGE=&1900:CHAIN"SERVER3" 230 IF D%=4 AND Active%>0 THEN PROCtransfer:PAGE=&1900:CHAIN"SERVER3" 240 IF D%=5 AND Active%>0 THEN PROCtransfer:PAGE=&1900:CHAIN"SERVER3" 250 IF D%=8 THEN PROCtransfer:PAGE=&1900:CHAIN"SERVER3" 260 IF D%=9 THEN PROCclose 270 D%=-1:UNTIL FALSE 280 : 290 REM ***************** TELETEXT GRAPHICS LAYOUT PROCEDURES ***************** 300 : 310 DEF PROCaup 320 FOR c%=12 TO 5 STEP -1 330 IF c%=5 THEN PRINTTAB(0,c%);SPC(40);TAB(0,4);bar2$; 340 IF c%>5 THEN PRINTTAB(0,c%);SPC(40);TAB(0,(c%-1));bar$; 350 PROCdelay(1) 360 NEXT 370 ENDPROC 380 : 390 DEF PROCadn 400 FOR c%=5 TO 12 STEP 1 410 PROCdelay(1) 420 IF c%=5 THEN PRINTTAB(0,c%);bar2$;TAB(0,(c%-1));bar3$ 430 IF c%<12 THEN PRINTTAB(0,c%);SPC(40); 440 IF c%<11 THEN PRINTTAB(0,(c%+1));bar$; 450 IF c%=5 THEN PRINTTAB(0,c%);"†PROGRAM ”ê‡" 460 IF c%=6 THEN PRINTTAB(0,c%);"†CATEGORY”ê‡" 470 IF c%=7 THEN PRINTTAB(0,c%);"†DISC ”ê‡" 480 IF c%=8 THEN PRINTTAB(0,c%);"†OPTION ”ê‡" 490 IF c%=9 THEN PRINTTAB(0,c%);"†SOURCE ”ê‡" 500 IF c%=10 THEN PRINTTAB(0,c%);"†FILENAME”ê‡" 510 IF c%=11 THEN PRINTTAB(0,c%);"†DFS ADFS”ê‡" 520 NEXT 530 PRINTTAB(0,12);bar$; 540 ENDPROC 550 : 560 REM ******************* INITIAILISATION PROCEDURE ************************* 570 : 580 DEF PROCinit 590 bar2$="”¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬" 600 bar$="”¬¬¬¬¬¬¬¬¬®¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬" 610 bar3$="”¬¬¬¬¬¬¬¬¬ì¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬," 620 Text%=134:Entry%=135:Step%=130:Step2%=220 630 File$=$&C00:Data$=$&C20:Notes$=$&C40:Dummy%=A%:Active%=B%:Delete%=C% 640 DIM Sent$(25):Choice%=D%:time%=0 650 *KEY12 1|M 660 *KEY13 0|M 670 *KEY14 1|M 680 *KEY15 0|M 690 ENDPROC 700 : 710 REM ************** SCREEN CLEAR - HIGHLIGHT PROCEDURES ******************** 720 : 730 DEF PROCclear 740 FOR c%=5 TO 22 STEP 1 750 PRINTTAB(0,c%);SPC(40); 760 NEXT c% 770 ENDPROC 780 : 790 DEF PROCbclear 800 FOR c%=13 TO 22 STEP 1 810 PRINTTAB(0,c%);SPC(40); 820 NEXT c% 830 ENDPROC 840 : 850 DEF PROCwclear 860 FOR c%=5 TO 11 STEP 1 870 PRINTTAB(12,c%);SPC(27) 880 NEXT c% 890 ENDPROC 900 : 910 DEF FNhighlight(xpos%,ypos%,len%,max%,start%) 920 o%=ypos% 930 *FX4,2 940 ypos%=ypos%+start% 950 REPEAT 960 PRINTTAB(xpos%,ypos%);CHR$132;CHR$157;CHR$Text%;TAB((xpos%+len%),ypos%);CHR$156 970 *FX15 980 select$=GET$:select%=VAL(select$) 990 IF select$=CHR$13 THEN GOTO 1050 1000 IF select%=0 THEN select%=-1 1010 IF (ypos%+select%)>max% THEN PRINTTAB(xpos%,ypos%);SPC(2):ypos%=o%:GOTO 1050 1020 IF (ypos%+select%)<(o%) THEN PRINTTAB(xpos%,ypos%);SPC(2):ypos%=max%:GOTO 1050 1030 PRINTTAB(xpos%,ypos%);SPC(2) 1040 ypos%=ypos%+select% 1050 UNTIL select$=CHR$13 1060 *FX4,0 1070 =(ypos%-o%) 1080 : 1090 REM *************** CURSOR & fn KEYS CONTROL **************************** 1100 : 1110 DEF PROCkon 1120 *FX4,2 1130 ENDPROC 1140 : 1150 DEF PROCkoff 1160 *FX4,0 1170 ENDPROC 1180 IF s%=8 THEN PROCadd:ENDPROC 1190 ENDPROC 1200 VDU23;8202;0;0;0; 1210 ENDPROC 1220 : 1230 DEF PROCcon 1240 VDU23,0,10,64;0;0;0; 1250 ENDPROC 1260 : 1270 DEF PROCcoff 1280 VDU23;8202;0;0;0; 1290 ENDPROC 1300 : 1310 DEF PROCkdis 1320 *FX4,1 1330 ENDPROC 1340 : 1350 REM ********************* MENU PREPARATION & DISPLAY ********************** 1360 : 1370 DEF PROCmenuselect(select%,xpos%,ypos%) 1380 RESTORE 1550 1390 REPEAT 1400 READ menu$,group%,field$ 1410 IF group%=select% THEN PRINTTAB(xpos%,ypos%);CHR$Text%;menu$ 1420 IF group%=select% THEN ypos%=ypos%+1 1430 UNTIL menu$="STOP" 1440 ENDPROC 1450 : 1460 REM *********************** TIME DELAY PROCEDURE ************************* 1470 : 1480 DEF PROCdelay(time%) 1490 TIME=0 1500 REPEAT UNTIL TIME>time% 1510 ENDPROC 1520 : 1530 REM ********************* DATA VARIABLES USED BY MENUSELECT PROC ********* 1540 : 1550 DATA "FORWARDS",8,"NA" 1560 DATA "BACKWARD",8,"NA" 1570 DATA "MAINTAIN",8,"NA" 1580 DATA "RECORD",8,"NA" 1590 DATA "FINISH",8,"NA" 1600 DATA "UPDATE",10,"NA" 1610 DATA "DELETE",10,"NA" 1620 DATA "DRPATH",10,"NA" 1630 DATA "NOTES",10,"NA" 1640 DATA "DONE",10,"NA" 1650 DATA "Loading Gateway",1,"NA" 1660 DATA "Browsing Facilities",1,"NA" 1670 DATA "Revising Facilities",1,"NA" 1680 DATA "Deleting Facilities",1,"NA" 1690 DATA "Searching Facilities",1,"NA" 1700 DATA "Compact Current Database",1,"NA" 1710 DATA "Install Program Database",1,"NA" 1720 DATA "Add New Program Record",1,"NA" 1730 DATA "Extend ADFS Database",1,"NA" 1740 DATA "Close Systems Server",1,"NA" 1750 DATA "GAME",3,"NA" 1760 DATA "UTILITY",3,"NA" 1770 DATA "ASCII TEXT",3,"NA" 1780 DATA "WORD PROCESSOR",3,"NA" 1790 DATA "DEDICATED FILE",3,"NA" 1800 DATA "ROM RAM IMAGE",3,"NA" 1810 DATA "MISCELLANEOUS",3,"NA" 1820 DATA "IGNORE FIELD",3,"NA" 1830 DATA "CHAIN",4,"NA" 1840 DATA "*RUN",4,"NA" 1850 DATA "*EXEC",4,"NA" 1860 DATA "*TYPE",4,"NA" 1870 DATA "*LIST",4,"NA" 1880 DATA "*LOAD",4,"NA" 1890 DATA "LOAD",4,"NA" 1900 DATA "REFERENCE",4,"NA" 1910 DATA "DFS Disc",5,"NA" 1920 DATA "ADFS Disc",5,"NA" 1930 DATA "CONFIRM",6,"NA" 1940 DATA "ABANDON",6,"NA" 1950 DATA "REVISE",6,"NA" 1960 DATA "ANOTHER",7,"NA" 1970 DATA "FINISH",7,"NA" 1980 DATA "PROCEED",9,"NA" 1990 DATA "CHANGE",9,"NA" 2000 DATA "PROCEED",11,"NA" 2010 DATA "DRIVENO",11,"NA" 2020 DATA "ABANDON",11,"NA" 2030 DATA "DRIVE A",12,"NA" 2040 DATA "DRIVE B",12,"NA" 2050 DATA "DRIVE 0",13,"NA" 2060 DATA "DRIVE 1",13,"NA" 2070 DATA "DRIVE 2",13,"NA" 2080 DATA "DRIVE 3",13,"NA" 2090 DATA"STOP",0,"STOP" 2100 : 2110 REM ******************** FIELD ENTRY FUNCTION *************************** 2120 : 2130 DEF FNenter(w1%,w2%,w4%) 2140 w3%=0 2150 IF w1%<>0 THEN w1%=w1%+1 2160 w4%=w4%-1 2170 : 2180 w1$="" 2190 w2$="" 2200 IF w1%=0 AND w2%=0 THEN =w2$ 2210 IF w1%>0 THEN PRINTTAB((w1%-1),w2%);CHR$Entry%; 2220 IF w1%<=0 THEN w1%=0:PRINTTAB(w1%,w2%);CHR$Entry%; 2230 REPEAT 2240 w1$=GET$ 2250 IF w1$=CHR$13 THEN GOTO 2320 2260 IF w1$=CHR$127 AND w3%<1 THEN VDU7:GOTO 2240 2270 IF w1$=CHR$127 THEN PRINT;CHR$127;:w2$=LEFT$(w2$,(LEN(w2$)-1)):w3%=w3%-1:GOTO 2320 2280 IF w3%>=w4% THEN VDU7:GOTO 2240 2290 w2$=w2$+w1$ 2300 PRINT;w1$; 2310 w3%=w3%+1 2320 UNTIL w1$=CHR$13 2330 =w2$ 2340 : 2350 REM ******************* COMPUTER PROCESSING MESSAGES ******************** 2360 : 2370 DEF PROCprocess(m%) 2380 PRINTTAB(0,24);SPC(39); 2390 IF m%=1 THEN PRINTTAB(29,24);CHR$136;CHR$Text%;"ACCEPTED";:PROCdelay(100):ENDPROC 2400 IF m%=2 THEN PRINTTAB(27,24);CHR$Text%;CHR$136;"PROCESSING"; 2410 IF m%=3 THEN PRINTTAB(29,24);CHR$136;CHR$Text%;"REJECTED";:VDU7:PROCdelay(200):ENDPROC 2420 ENDPROC 2430 : 2440 REM ***************** ERROR TRAPPING AND HANDELING PROCEDURES *********** 2450 : 2460 DEF PROCerror(Error%,Error$) 2470 IF Error%=0 THEN PROCusererr(Error$):ENDPROC 2480 PROCkdis 2490 PROCclear:PROCprocess(0):PROCcoff:PROCkoff 2500 IF Error%=&BF THEN PRINTTAB(11,8);CHR$Text%;"Disc Full" 2510 IF Error%=&BD THEN PRINTTAB(11,8);CHR$Text%;"Access Violation" 2520 IF Error%=&CC THEN PRINTTAB(11,8);CHR$Text%;"Bad Name" 2530 IF Error%=&A8 THEN PRINTTAB(11,8);CHR$Text%;"Broken Dir" 2540 IF Error%=&C7 THEN PRINTTAB(11,8);CHR$Text%;"Disc Error" 2550 IF Error%=&C6 THEN PRINTTAB(11,8);CHR$Text%;"Disc Full" 2560 IF Error%=&D6 THEN PRINTTAB(11,8);CHR$Text%;"Not Found" 2570 IF Error%=&CE THEN PRINTTAB(11,8);CHR$Text%;"Bad Dir" 2580 IF Error%=&FE THEN PRINTTAB(11,8);CHR$Text%;"Bad Command" 2590 IF Error%=&A9 THEN PRINTTAB(11,8);CHR$Text%;"Bad FS Map" 2600 IF Error%=&98 THEN PRINTTAB(11,8);CHR$Text%;"Compact Reqd" 2610 IF Error%=&C3 THEN PRINTTAB(11,8);CHR$Text%;"File Locked" 2620 IF Error%=&CD THEN PRINTTAB(11,8);CHR$Text%;"Bad Drive" 2630 IF Error%=&C9 THEN PRINTTAB(11,8);CHR$Text%;"Disc Protected" 2640 IF Error%=&C9 THEN PRINTTAB(11,8);CHR$Text%;"Disc Changed" 2650 IF Error%=&C5 THEN PRINTTAB(11,8);CHR$Text%;"Drive Fault" 2660 IF Error%=&C4 THEN PRINTTAB(11,8);CHR$Text%;"File Exists" 2670 IF Error%=&C2 THEN PRINTTAB(11,8);CHR$Text%;"File Open" 2680 IF Error%=&C0 THEN PRINTTAB(11,8);CHR$Text%;"Too Many Open" 2690 IF Error%=&BF THEN PRINTTAB(11,8);CHR$Text%;"Can't Extend" 2700 IF Error%=&BE THEN PRINTTAB(11,8);CHR$Text%;"Catalogue Full" 2710 PRINTTAB(11,11);CHR$Text%;"SYSTEM ERROR" 2720 PRINTTAB(0,22);CHR$Text%;"REFERENCE ";ERL;"-";ERR;TAB(25,22);CHR$136;" REFER MANUAL" 2730 PRINTTAB(2,15);CHR$Text%;"RE BOOTING PROGRAM - PRESS RETURN" 2740 *FX15 2750 a=GET 2760 PROCclear:PROCprocess(2):PROCdelay(50) 2770 CLOSE#0 2780 ENDPROC 2790 : 2800 DEF PROCusererr(Error$) 2810 PROCprocess(0):PROCcoff:PROCkoff:VDU7:VDU7:PROCdelay(150) 2820 PRINTTAB(39-((LEN(Error$)+2)),24);CHR$136;CHR$Text%;Error$; 2830 PROCdelay(100) 2840 ENDPROC 2850 : 2860 REM ******************* MAIN CONTEXT MENU ******************************** 2870 : 2880 DEF FNmenu 2890 PROCprocess(0) 2900 PROCclear:PROCcoff 2910 PROCmenuselect(1,8,6) 2920 PRINTTAB(4,17);CHR$Text%;"No RECORDS";CHR$Entry%;Dummy% 2930 PRINTTAB(4,18);CHR$Text%;"No ACTIVE ";CHR$Entry%;Active% 2940 PRINTTAB(4,19);CHR$Text%;"No DELETE ";CHR$Entry%;Delete% 2950 PRINTTAB(4,20);CHR$Text%;"No SPARE ";CHR$Entry%;(Dummy%-Active%) 2960 PRINTTAB(20,17);CHR$Text%;"SERIAL No";CHR$Entry%;$&C62;$&C60;$&C64 2970 PRINTTAB(20,18);CHR$Text%;"DATABASE ";CHR$Entry%;File$ 2980 PRINTTAB(20,19);CHR$Text%;"VERSION ";CHR$Entry%;"6a" 2990 PRINTTAB(20,20);CHR$Text%;"SUBTYPE ";CHR$Entry%;"TST" 3000 PROCkon:s%=FNhighlight(6,6,29,15,0) 3010 =s% 3020 : 3030 REM *** This marks the end of essential PROCs and FNs that the *** 3040 REM *** main program uses - all following PROCs and FNs are *** 3050 REM *** self containing menu functions that can be added and *** 3060 REM *** removed at will. 3070 : 3080 REM ************************* ADDING TO DATABASE ************************ 3090 : 3100 DEF PROCadd 3110 PROCclear 3120 IF FNchecks = 9 THEN PROCdelay(200):ENDPROC:REM *** SEE DEF FNchecks *** 3130 PRINTTAB(25,24);CHR$Text%;"RECORD No";CHR$Entry%;(Active%+1); 3140 PROCadn:PROCcon:PROCkdis 3150 Program$=FNenter(11,5,28) 3160 Cat$=FNcat:PRINTTAB(11,6);CHR$Entry%;Cat$:PROCbclear 3170 PROCcon:PROCkdis:Disc$=FNenter(11,7,16) 3180 Opt$=FNopt:PRINTTAB(11,8);CHR$Entry%;Opt$:PROCbclear 3190 PROCcon:PROCkdis:Source$=FNenter(11,9,21) 3200 Name$=FNenter(11,10,11) 3210 Da$=FNda:PRINTTAB(11,11);CHR$Entry%;Da$:PROCbclear 3220 c%=FNconfirm(12,16):IF c%=1 THEN PROCbclear:PROCcoff:PROCaup:ENDPROC 3230 IF c%=2 THEN PROCcoff:PROCbclear:PROCaup:GOTO 3110 3240 IF Da$="DFS" THEN x%=FNdisc 3250 IF Da$="ADFS" THEN x%=FNadfs: IF x%=9 THEN PROCbclear:PROCaup:ENDPROC 3260 IF FNnotes=9 THEN PROCaup:ENDPROC 3270 REM ********** THIS IS WHERE WE SAVE A COMPLETE RECORD TO DISC ********** 3280 PROCbclear:PROCprocess(2) 3290 X=OPENUP (Data$) 3300 Y=OPENUP (Notes$) 3310 Z=OPENUP (File$) 3320 PTR#X=(Step%*Active%) 3330 PRINT#X,Program$,Cat$,Disc$,Opt$,Source$,Name$,Da$,0,"","" 3340 PTR#Y=(Step2%*Active%) 3350 PRINT#Y,Dir$,Notes1$,Notes2$,Notes3$,0 3360 PTR#Z=125:PRINT#Z,(Active%+1) 3370 CLOSE#X 3380 CLOSE#Y 3390 CLOSE#Z 3400 PROCprocess(1):PROCprocess(0):Active%=Active%+1 3410 PROCbclear:PROCcoff:PROCmenuselect(7,2,14):s%=FNhighlight(0,14,12,15,0):IF s%=0 THEN PROCbclear:PROCaup:GOTO 3110 3420 PROCbclear:PROCaup:ENDPROC 3430 : 3440 REM *********************** CATEGORY SELECTION & CHECKS ***************** 3450 : 3460 DEF FNcat:PROCcoff 3470 PROCmenuselect(3,12,14) 3480 s%=FNhighlight(10,14,19,21,0) 3490 IF s%=0 THEN ="GAME" 3500 IF s%=1 THEN ="UTILITY" 3510 IF s%=2 THEN ="ASCII TEXT" 3520 IF s%=3 THEN ="WORD PROCESSOR" 3530 IF s%=4 THEN ="DEDICATED FILE" 3540 IF s%=5 THEN ="ROM IMAGE" 3550 IF s%=6 THEN ="MISCELLANEOUS" 3560 IF s%=7 THEN ="" 3570 ="" 3580 : 3590 REM ****************** LOAD OPTION SELECTION **************************** 3600 : 3610 DEF FNopt 3620 PROCcoff 3630 PROCmenuselect(4,14,14) 3640 s%=FNhighlight(12,14,15,21,0) 3650 IF s%=0 THEN ="CHAIN" 3660 IF s%=1 THEN ="*RUN" 3670 IF s%=2 THEN ="*EXEC" 3680 IF s%=3 THEN ="*TYPE" 3690 IF s%=4 THEN ="*LIST" 3700 IF s%=5 THEN ="*LOAD" 3710 IF s%=6 THEN ="LOAD" 3720 IF s%=7 THEN ="REFERENCE" 3730 ="" 3740 : 3750 REM ******************* DFS ADFS SELECTION ******************************* 3760 : 3770 DEF FNda 3780 PROCcoff:PROCmenuselect(5,14,16) 3790 s%=FNhighlight(12,16,15,17,0) 3800 IF s%=0 THEN ="DFS" 3810 IF s%=1 THEN ="ADFS" 3820 ="" 3830 : 3840 REM ************ CHECKING PROCEDURES BEFORE PROCadd ********************* 3850 : 3860 DEF FNchecks 3870 IF Active%>=Dummy% THEN PROCerror(0,"DATABASE FULL"):=9 3880 =0 3890 : 3900 REM ************* CONFIRM FIELDS - Position determined by x% y% ********** 3910 : 3920 DEF FNconfirm(x%,y%) 3930 PROCkon:PROCcoff:PROCmenuselect(6,(x%+2),y%) 3940 s%=FNhighlight(x%,y%,12,(y%+2),0) 3950 =s% 3960 : 3970 REM ****************** HIGHLIGHTED HEADINGS ****************************: 3980 : 3990 DEF PROCbar(xpos%,ypos%,text$) 4000 PRINTTAB(xpos%,ypos%);CHR$132;CHR$157;CHR$Text%;text$;TAB((xpos%+(LEN(text$)+5)),ypos%);CHR$156 4010 ENDPROC 4020 : 4030 REM ****************** ADFS DIRECTORY ROUTE SPEC. ************************ 4040 : 4050 DEF FNadfs 4060 PROCbclear:PROCbar(0,14,"DIRECTORY") 4070 PROCkoff:PROCcon:PROCkdis:PROCwordwrap(1,1,38,16):PROCcoff 4080 FOR x=19 TO 21 STEP 1:PRINTTAB(0,x);SPC(39);:NEXT x 4090 c%=FNconfirm(0,19):IF c%=1 THEN PROCbclear:=9 4100 IF c%=2 THEN GOTO 4060 4110 Dir$=Sent$(16)+Sent$(17) 4120 IF Dir$="" THEN =0 4130 IF RIGHT$(Dir$,1)<>"." THEN Dir$=Dir$+"." 4140 =0 4150 : 4160 REM ******************* DFS DIRECTORY ROUTE SPEC. *********************** 4170 : 4180 DEF FNdisc 4190 PROCbclear:PROCbar(12,14,"DIRECTORY") 4200 PROCkoff:PROCcon:PROCkdis:Dir$=FNenter(16,16,5):PROCcoff 4210 IF Dir$="" OR Dir$=CHR$13 THEN Dir$="$":PRINTTAB(16,16);CHR$Entry%;"Root":PROCcoff:PROCdelay(100) 4220 IF FNdfschk=9 THEN GOTO 4190 4230 Dir$=Dir$+"." 4240 =0 4250 : 4260 DEF FNdfschk 4270 IF LEN(Dir$)=1 THEN =0 4280 IF LEFT$(Dir$,3)=":0." THEN =0 4290 IF LEFT$(Dir$,3)=":1." THEN =0 4300 IF LEFT$(Dir$,3)=":2." THEN =0 4310 IF LEFT$(Dir$,3)=":3." THEN =0 4320 IF LEFT$(Dir$,3)=":4." THEN =0 4330 =9 4340 : 4350 REM **** WORWRAP ROUTINES - MAX 20 LINES - Sent$ MUST BE DIMensioned **** 4360 REM **** WHEN INITIALISING THE PROGRAM - Can only be DIMed ONCE ********* 4370 REM ***** Sent$(xx) determines the Max No. of lines (as in first line) ** 4380 : 4390 DEF PROCwordwrap(NoLines%,xmargin%,length%,top%) 4400 carry$="":text$="" 4410 FOR line%=top% TO (top%+NoLines%) STEP 1 4420 b$="":a$="" 4430 b$=carry$:PROCcoff:PRINTTAB(xmargin%,line%);b$; 4440 count%=xmargin%+(LEN(carry$)) 4450 REPEAT 4460 PROCcon:a$=GET$ 4470 IF a$=CHR$13 THEN GOTO 4530 4480 IF a$=CHR$127 THEN PROCback:UNTIL FALSE 4490 IF line%>=(top%+NoLines%) AND (count%-xmargin%)+1>=length% THEN VDU7:GOTO4460 4500 PRINTTAB(count%,line%);a$; 4510 b$=b$+a$ 4520 count%=count%+1 4530 UNTIL FNnextline(b$)=9 4540 NEXT line% 4550 ENDPROC 4560 : 4570 DEF FNnextline(text$) 4580 IF a$=CHR$13 THEN carry$="":Sent$(line%)=text$:=9 4590 IF (count%-xmargin%)=Active% THEN browse%=(Active%-1) 5070 IF browse%<0 THEN browse%=0 5080 PTR#Y=(browse%*Step%) 5090 PTR#Z=(browse%*Step2%) 5100 INPUT#Y,Program$,Cat$,Disc$,Opt$,Source$,Name$,Da$,Mfd%,s1$,s2$ 5110 INPUT#Z,Dir$,Notes1$,Notes2$,Notes3$,Nfd% 5120 PROCwclear 5130 PROCdisplay 5140 PROCbclear 5150 PROCmenuselect(8,2,14) 5160 choice%=FNhighlight(0,14,13,18,start%):start%=0 5170 IF choice%=0 THEN browse%=browse%+1 5180 IF choice%=1 THEN start%=1:browse%=browse%-1 5190 IF choice%=2 THEN PROCoptions 5200 UNTIL choice%=3 OR choice%=4 5210 IF choice%=3 THEN PROCbclear:GOTO 5010 5220 PROCbclear:PROCprocess(2) 5230 CLOSE#X 5240 CLOSE#Y 5250 CLOSE#Z 5260 PROCprocess(1) 5270 PROCprocess(0) 5280 PROCbclear:PROCaup 5290 ENDPROC 5300 : 5310 DEF PROCoptions 5320 REPEAT 5330 PROCwclear:PROCdisplay 5340 PROCbclear:PROCmenuselect(10,2,14):opt%=FNhighlight(0,14,11,18,0) 5350 IF opt%=0 THEN PROCamendrec 5360 IF opt%=1 AND Mfd%=0 THEN PROCdeleteRec:GOTO 5380 5370 IF opt%=1 AND Mfd%=9 THEN PROCundeleteRec 5380 IF opt%=2 THEN PROCreadpath(0) 5390 IF opt%=3 THEN PROCreadnotes 5400 UNTIL opt%=4 5410 ENDPROC 5420 : 5430 REM ************* RECORD DISPLAY (as used by Proc Browse) ************ 5440 : 5450 DEF PROCdisplay 5460 PRINTTAB(11,5);CHR$Entry%;Program$ 5470 PRINTTAB(11,6);CHR$Entry%;Cat$ 5480 PRINTTAB(11,7);CHR$Entry%;Disc$ 5490 PRINTTAB(11,8);CHR$Entry%;Opt$ 5500 PRINTTAB(11,9);CHR$Entry%;Source$ 5510 PRINTTAB(11,10);CHR$Entry%;Name$ 5520 PRINTTAB(11,11);CHR$Entry%;Da$ 5530 PRINTTAB(25,24);CHR$Text%;"RECORD No";CHR$Entry%;(browse%+1); 5540 IF Mfd%=9 THEN PRINTTAB(21,11);CHR$Text%;CHR$136;"Deletion Pending"; 5550 ENDPROC 5560 : 5570 REM **************** READ NOTES ************************ 5580 : 5590 DEF PROCreadnotes 5600 PROCbclear 5610 PROCbar(0,14,"NOTES") 5620 PRINTTAB(0,16);CHR$Entry%;Notes1$ 5630 PRINTTAB(0,17);CHR$Entry%;Notes2$ 5640 PRINTTAB(0,18);CHR$Entry%;Notes3$ 5650 PROCmenuselect(9,2,20) 5660 IF FNhighlight(0,20,12,21,0)=1 THEN PROCamendnotes 5670 PROCbclear 5680 ENDPROC 5690 : 5700 DEF PROCdeleteRec 5710 PTR#Y=(browse%*Step%):PRINT#Y,Program$,Cat$,Disc$,Opt$,Source$,Name$,Da$,9,s1$,s2$ 5720 PTR#Z=(browse%*Step2%):PRINT#Z,Dir$,Notes1$,Notes2$,Notes3$,9 5730 PTR#X=150:Delete%=Delete%+1:PRINT#X,Delete% 5740 Mfd%=9:Nfd%=9 5750 PROCdisplay 5760 ENDPROC 5770 : 5780 DEF PROCundeleteRec 5790 PTR#Y=(browse%*Step%):PRINT#Y,Program$,Cat$,Disc$,Opt$,Source$,Name$,Da$,0,s1$,s2$ 5800 PTR#Z=(browse%*Step2%):PRINT#Z,Dir$,Notes1$,Notes2$,Notes3$,0 5810 PTR#X=150:Delete%=Delete%-1:PRINT#X,Delete% 5820 Mfd%=0:Nfd%=0 5830 PROCdisplay 5840 ENDPROC 5850 : 5860 DEF PROCamendnotes 5870 PROCbclear 5880 IF FNnotes=9 THEN ENDPROC 5890 PROCprocess(0):PROCbclear:PROCdelay(100):PROCprocess(2) 5900 PTR#Z=(browse%*Step2%) 5910 PRINT#Z,Dir$,Notes1$,Notes2$,Notes3$,Nfd% 5920 PROCprocess(1):PROCprocess(0) 5930 ENDPROC 5940 : 5950 DEF PROCamendrec 5960 PROCbclear:PROCcon:PROCkdis 5970 a1$=Program$:a2$=Cat$:a3$=Disc$:a4$=Opt$:a5$=Source$:a6$=Name$:a7$=Da$ 5980 PRINTTAB(11,5);SPC(28):w1$=FNenter(11,5,28):IF w1$="" OR w1$=CHR$13 THEN w1$=Program$:PRINTTAB(12,5);w1$ 5990 a1$=w1$ 6000 a2$=FNcat:PRINTTAB(11,6);SPC(28);TAB(11,6);CHR$Entry%;a2$:PROCbclear 6010 PROCcon:PROCkdis 6020 PRINTTAB(11,7);SPC(28):w1$=FNenter(11,7,16):IF w1$="" OR w1$=CHR$13 THEN w1$=Disc$:PRINTTAB(12,7);w1$ 6030 a3$=w1$ 6040 a4$=FNopt:PRINTTAB(11,8);SPC(28);TAB(11,8);CHR$Entry%;a4$:PROCbclear 6050 PROCcon:PROCkdis 6060 PRINTTAB(11,9);SPC(28):w1$=FNenter(11,9,21):IF w1$="" OR w1$=CHR$13 THEN w1$=Source$:PRINTTAB(12,9);w1$ 6070 a5$=w1$ 6080 PRINTTAB(11,10);SPC(28):w1$=FNenter(11,10,11):IF w1$="" OR w1$=CHR$13 THEN w1$=Name$:PRINTTAB(12,10);w1$ 6090 a6$=w1$ 6100 s$=Da$:c%=0 6110 a7$=FNda:PRINTTAB(11,11);SPC(28);TAB(11,11);CHR$Entry%;a7$:PROCbclear 6120 PROCcoff:c%=FNconfirm(12,16) 6130 IF c%=1 THEN PROCbclear:PROCwclear:PROCdisplay:ENDPROC 6140 IF c%=2 THEN PROCwclear:PROCdisplay:GOTO 5960 6150 PROCbclear 6160 Program$=a1$:Cat$=a2$:Disc$=a3$:Opt$=a4$:Source$=a5$:Name$=a6$:Da$=a7$ 6170 IF s$<>Da$ THEN PROCreadpath(9):IF c%=1 THEN GOTO 6100 6180 PROCprocess(2) 6190 PTR#Y=(browse%*Step%) 6200 PRINT#Y,a1$,a2$,a3$,a4$,a5$,a6$,a7$,Mfd%,s1$,s2$ 6210 PROCprocess(1):PROCprocess(0) 6220 ENDPROC 6230 : 6240 DEF PROCreadpath(tag%) 6250 PROCbclear 6260 IF tag%<>9 THEN PROCshowpath 6270 IF tag%<>9 THEN PROCmenuselect(9,2,19) ELSE GOTO 6290 6280 IF FNhighlight(0,19,12,20,0)=0 THEN ENDPROC 6290 IF Da$="DFS" THEN z%=FNdisc 6300 IF Da$="ADFS" THEN z%=FNadfs:IF z%=9 AND tag%<>9 THEN ENDPROC 6310 IF tag%<>9 AND z%<>9 THEN PROCdelay(50):PROCprocess(2) 6320 PTR#Z=(Step2%*browse%) 6330 PRINT#Z,Dir$,Notes1$,Notes2$,Notes3$,Nfd% 6340 IF tag%<>9 AND z%<>9 THEN PROCprocess(1):PROCprocess(0) 6350 ENDPROC 6360 : 6370 DEF PROCshowpath 6380 PROCbar(0,14,"DIRECTORY"):dp2$="" 6390 IF LEN(Dir$)<=38 THEN dp1$=Dir$:GOTO 6430 6400 dp1$=LEFT$(Dir$,38) 6410 w%=LEN(Dir$):w2%=w%-38 6420 dp2$=RIGHT$(Dir$,w2%) 6430 PRINTTAB(0,16);CHR$Entry%;dp1$ 6440 PRINTTAB(0,17);CHR$Entry%;dp2$ 6450 ENDPROC 6460 : 6470 DEF PROCload 6480 PROCclear:PROCadn 6490 PROCbar(13,14,"LOAD") 6500 PROCcon:PROCkdis 6510 PRINTTAB(9,16);CHR$Text%;"RECORD No":load$=FNenter(19,16,4) 6520 IF VAL(load$)>Active% OR VAL(load$)<1 THEN PROCbclear:PROCcoff:PROCaup:ENDPROC 6530 PROCcoff:PROCbclear:PROCdelay(20):PROCprocess(2) 6540 X=OPENIN (Data$) 6550 Y=OPENIN (Notes$) 6560 browse%=VAL(load$):browse%=browse%-1 6570 PTR#X=(Step%*browse%):PTR#Y=(Step2%*browse%) 6580 INPUT#X,Program$,Cat$,Disc$,Opt$,Source$,Name$,Da$,Mfd%,s1$,s2$ 6590 INPUT#Y,Dir$,Notes1$,Notes2$,Notes3$,Nfd% 6600 CLOSE#X:CLOSE#Y 6610 PROCprocess(1):PROCprocess(0) 6620 IF Mfd%=9 THEN PROCerror(0,"DELETION PENDING"):PROCaup:PROCclear:ENDPROC 6630 IF Opt$="REFERENCE" THEN PROCerror (0,"LOADING PROHIBITED"):PROCaup:PROCclear:ENDPROC 6640 PROCdisplay 6650 PROCbclear:PROCmenuselect(11,2,14) 6660 load%=FNhighlight(0,14,12,16,0) 6670 IF load%=2 THEN PROCbclear:PROCaup:ENDPROC 6680 IF load%=1 THEN PROCdriveno 6690 IF Da$="ADFS" THEN PROCdirsort 6700 IF Da$="DFS" THEN PROCdfssort 6710 IF Opt$="CHAIN" THEN PROCchain(Name$) 6720 IF Opt$="LOAD" THEN PROCld(Name$) 6730 IF Opt$="*TYPE" THEN PROCtp(Name$) 6740 IF Opt$="*RUN" THEN PROCrun(Name$) 6750 IF Opt$="*EXEC" THEN PROCexec(Name$) 6760 IF Opt$="*LIST" THEN PROClist(Name$) 6770 IF Opt$="*LOAD" THEN PROCsld(Name$) 6780 PROCerror(0,"IRREGULAR OPTION"):PROCaup:PROCclear:ENDPROC 6790 : 6800 DEF PROCdriveno 6810 PROCbclear 6820 IF Da$="ADFS" THEN PROCmenuselect(12,2,14):d%=FNhighlight(0,14,12,15,0):PROCbclear:PROCakick:ENDPROC 6830 IF Da$="DFS" THEN PROCmenuselect(13,2,14):d%=FNhighlight(0,14,12,17,0):PROCbclear:PROCdkick:ENDPROC 6840 ENDPROC 6850 : 6860 DEF PROCakick 6870 OSCLI("FADFS") 6880 OSCLI("DIR :"+STR$(d%)+".$") 6890 ENDPROC 6900 : 6910 DEF PROCdkick 6920 OSCLI("DISC") 6930 OSCLI("DRIVE "+STR$(d%)) 6940 ENDPROC 6950 : 6960 DEF PROCdirsort 6970 PROCdelay(50):PROCprocess(2) 6980 IF RIGHT$(Dir$,1)="." THEN Dir$=LEFT$(Dir$,(LEN(Dir$)-1)) 6990 OSCLI("ADFS") 7000 OSCLI("DIR "+Dir$) 7010 PROCprocess(1):PROCprocess(0) 7020 ENDPROC 7030 : 7040 DEF PROCdfssort 7050 IF RIGHT$(Dir$,1)="." THEN Dir$=LEFT$(Dir$,(LEN(Dir$)-1)) 7060 OSCLI("DIR "+Dir$) 7070 ENDPROC 7080 : 7090 DEF PROCchain(obj$) 7100 CLS 7110 CHAIN obj$ 7120 ENDPROC 7130 DEF PROCld(obj$) 7140 CLS:PROCbar(0,0,"LOADING") 7150 PRINT 7160 *KEY0 LOAD obj$|MVDU6|M 7170 VDU21 7180 *FX138,0,128 7190 END 7200 : 7210 DEFPROCtp(obj$) 7220 CLS 7230 OSCLI("TYPE "+obj$) 7240 END 7250 : 7260 DEF PROCrun(obj$) 7270 CLS 7280 OSCLI("RUN "+obj$) 7290 END 7300 : 7310 DEF PROCexec(obj$) 7320 CLS 7330 OSCLI("EXEC "+obj$) 7340 PRINT 7350 END 7360 : 7370 DEF PROClist(obj$) 7380 CLS 7390 OSCLI("LIST "+obj$) 7400 PRINT 7410 END 7420 : 7430 DEF PROCsld(obj$) 7440 CLS 7450 OSCLI("LOAD "+obj$) 7460 END 7470 DEF PROCtransfer 7480 A%=Dummy%:B%=Active%:C%=Delete% 7490 PROCprocess(0):PROCprocess(2) 7500 ENDPROC 7510 : 7520 DEF PROCclose 7530 PROCclear:PROCprocess(2) 7540 CLOSE#0 7550 PROCdelay(30) 7560 PROCprocess(1):PROCprocess(0) 7570 PRINTTAB(10,13);CHR$Text%;"PRESS BREAK NOW" 7580 x=TRUE:REPEATUNTIL x=FALSE 7590 ENDPROC 7600 :