| 10 REM Disc Catalogue
20 REM by Robin Nixon 30 REM (c) Computing with the Amstrad 40 REM ------------- CPC ------------- 50 CALL &BB4E 60 MODE 2:INK 0,0:INK 1,20:DEFINT a-g,i-o,q-z:DIM a$(100) 61 hym=HIMEM:SYMBOL AFTER 256 70 BORDER 13:WINDOW 2,79,1,24:PEN 1:PAPER 0:MEMORY &8FFF:ON ERROR GOTO 90 80 —USER,15:INK 1,0:CAT:h=HIMEM:MEMORY h-&800:GOSUB 200:MEMORY h 90 IF j=0 THEN 110 ELSE OPENIN "TITLE.DSC" 100 INPUT#9,title$ 110 CLS:INK 1,26:PEN 1:CLOSEIN:CLS:—USER,0 120 PLOT 0,0,1:DRAW 638,0:DRAW 638,398:DRAW 0,398:DRAW 0,0 130 LOCATE 35,2:PRINT "CATALOGUE":LOCATE 79-LEN(title$),2:PRINT title$; 140 LOCATE 1,1:CAT:h=HIMEM:MEMORY h-&800:GOSUB 200:MEMORY h 150 IF j=0 THEN a$(1)="<< No files >>" 160 BORDER 13:WINDOW 2,79,2,24:PEN 1:PAPER 0 170 num=(j‡ 4)-((j MOD 4)>0) 180 GOSUB 510:x=1:y=1:PEN 0:PAPER 1:GOSUB 250 190 GOSUB 270:CLS:WINDOW 2,79,1,24:ERASE a$:DIM a$(100):GOTO 120 200 j=0:p=h-&7FF 210 IF PEEK(p)=&FF THEN j=j+1:p=p+1 ELSE RETURN 220 a$(j)="":FOR k=1 TO 8:a$(j)=a$(j)+CHR$(PEEK(p) AND &7F):p=p+1:NEXT 230 a$(j)=a$(j)+".":FOR k=1 TO 3:a$(j)=a$(j)+CHR$(PEEK(p) AND &7F):p=p+1:NEXT 240 p=p+2:GOTO 210 250 LOCATE (x-1)*20+1,y+2:GOSUB 1060 260 PRINT a$(num1);:RETURN 270 WHILE INKEY$<>"":WEND 280 ik$=UPPER$(INKEY$):i1=INKEY(1):i2=INKEY(8):i3=INKEY(0):i4=INKEY(2) 290 IF ik$="" THEN 280 300 inf=0:PEN 1:PAPER 0:GOSUB 250 310 IF j=0 THEN 420 320 IF i1>-1 THEN x=x+1:GOSUB 1130:IF x>4 OR x>j THEN x=1:y=y+1 330 IF i2>-1 THEN x=x-1:GOSUB 1150:IF x<1 THEN x=4:y=y-1:IF y>(j-num*3) THEN x=x-1 340 IF i3>-1 THEN y=y-1:inf=1:GOSUB 1170:IF y<1 THEN y=num:IF x=4 THEN y=(j-num*3) 350 IF inf=1 THEN GOSUB 1060:IF a$(num1)="" THEN y=y-1:GOTO 350 360 IF i4>-1 THEN y=y+1:GOSUB 1190:IF y>num OR x=4 AND y>(j-num*3) THEN y=1 370 IF x=1 AND y>num THEN y=1 380 IF y<1 THEN x=4:y=num:IF y>(j-num*3) THEN x=x-1 390 IF x=4 AND y>(j-num*3) THEN x=1:y=y+1:IF y>num THEN y=1 400 IF x>j THEN x=x-1:y=1:GOTO 400 410 GOSUB 1060:IF num1>j THEN x=x-1 420 IF ik$="T" THEN 550 430 IF ik$="U" THEN GOSUB 650:RETURN 440 IF ik$="R" AND j>0 THEN 680 450 IF ik$="X" AND j>0 THEN 710 460 IF ik$="E" AND j>0 THEN GOSUB 770:RETURN 470 IF ik$="L" AND j>0 THEN 860 480 IF ik$="D" THEN 910 490 IF ik$="N" AND j>0 THEN 990 500 PEN 0:PAPER 1:GOSUB 250:GOTO 270 510 PEN 0:PAPER 1:LOCATE 2,23 520 PRINT " R=RUN L=LOAD U=USER D=DRIVE "; 530 PRINT "E=ERASE X=ERASE *.BAK T=TITLE "; 540 PRINT "N=RENAME ";:PEN 1:PAPER 0:RETURN 550 GOSUB 640:LOCATE 2,23:INPUT "ENTER TITLE? ",title$ 560 title$=LEFT$(title$,25) 570 —USER,15 580 ON ERROR GOTO 630 590 LOCATE 2,20 600 e$="TITLE.DSC":—ERA,àe$ 610 OPENOUT "TITLE.DSC" 620 PRINT#9,title$ 630 CLOSEOUT:—USER,0:PEN 1:RUN 640 PEN 1:PAPER 0:LOCATE 2,23:PRINT STRING$(76,32);:RETURN 650 GOSUB 640:LOCATE 2,23:INPUT "ENTER USER NUMBER (0-15)? ",user 660 IF user>15 OR user<0 THEN 650 670 —USER,user:RETURN 680 GOSUB 640:LOCATE 2,23:PRINT "RUNNING "; 690 GOSUB 1060 700 PRINT r$:MEMORY hym:SYMBOL AFTER 240:RUN r$ 710 GOSUB 640:LOCATE 2,23:PRINT "ERASING *.BAK"; 720 LOCATE 2,20 730 ON ERROR GOTO 760 740 e$="*.bak" 750 —ERA,àe$ 760 RUN 770 GOSUB 1060:e$=r$ 780 GOSUB 640:LOCATE 2,23:PRINT "ERASE ";e$;" Are you sure? "; 790 ik$=UPPER$(INKEY$):IF ik$="" THEN 790 800 IF ik$="N" THEN RETURN 810 IF ik$<>"Y" THEN 790 820 PRINT ik$:LOCATE 2,20 830 ON ERROR GOTO 850 840 —ERA,àe$ 850 RUN 860 GOSUB 1060 870 MODE 2:PEN 1:PAPER 0:PRINT "LOADING ";r$ 880 ON ERROR GOTO 900 890 LOAD r$:END 900 FOR x=1 TO 5000:NEXT:RUN 910 GOSUB 640:LOCATE 2,23:PRINT "ENTER DRIVE (A-B)? "; 920 ik$=UPPER$(INKEY$):IF ik$="" THEN 920 930 IF ik$<"A" OR ik$>"B" THEN 920 940 PRINT ik$:LOCATE 2,20 950 ON ERROR GOTO 980 960 —DRIVE,àik$ 970 RUN 980 FOR j=1 TO 5000:NEXT:RUN 990 GOSUB 1060 1000 GOSUB 640:LOCATE 2,23:PRINT "RENAME ";r$; 1010 INPUT " as? ",nn$ 1020 LOCATE 2,20 1030 ON ERROR GOTO 980 1040 —REN,ànn$,àr$ 1050 RUN 1060 num1=(x-1)*(j‡ 4)+y-2+x-((j MOD 4)>0) 1070 IF ((j MOD 4)>0) THEN 1090 1080 num1=num1-(x=1)+(x=3)+((x=4)*2) 1090 r$=a$(num1) 1100 is=INSTR(z$," ") 1110 IF is THEN r$=LEFT$(r$,is-1)+RIGHT$(r$,LEN(z$)-is):GOTO 1100 1120 RETURN 1130 GOSUB 1060:IF a$(num1)="" THEN x=x+1 1140 RETURN 1150 IF x=0 THEN RETURN ELSE GOSUB 1060:IF a$(num1)="" THEN x=x-1 1160 RETURN 1170 IF y=0 THEN RETURN ELSE GOSUB 1060:IF a$(num1)="" THEN y=y-1:GOTO 1170 1180 RETURN 1190 GOSUB 1060:IF a$(num1)="" THEN y=1 1200 RETURN |