Program Your Own File Selector

The STOS file selector looks nice but wouldn’t it be nicer to code your own file selector.

2240 rem FILE SELECTOR

2250 wipe S5 : unpack S2+33020,S5 : get palette (5) : wait vbl : A=0 : PRE_Y=0 : PR$=”” 2260 fastcopy S5,back : fastcopy S5,logic : K=1

2270 if LO=1 then T$=”LOAD A PICTURE” : pen 15 : locate 14,23 : print T$

2280 if SA=1 then T$=”SAVE A PICTURE” : pen 15 : locate 14,23 : print T$

2290 T$=right$(PATH$,4) : locate 24,7 : pen 15 : print T$ : fastcopy logic,back

2300 rem

2310 blit S5,96,52,160,64,back,96,52 : blit S5,96,52,160,64,logic,96,52 : wash back,112,72,224,152

2320 if drive=0 then logic=S3 : ink 15 : bar 2,2 to 30,30 : paper 15 : pen 0 : locate 1,1 : print “A” : logic=physic : ppsc S3,logic,3,7,20,15,107,55,4 : paper 0

2330 if drive=1 then logic=S3 : ink 15 : bar 2,2 to 30,30 : paper 15 : pen 0 : locate 1,1 : print “B” : logic=physic : ppsc S3,logic,3,7,20,15,132,55,4 : paper 0 2340 fastcopy logic,back

2350 dir$=”\” : DD$=””

2360 blit S5,16,32,208,41,back,16,32 : blit S5,16,32,208,41,logic,16,32

2370 for X=0 to 500 : FILE$(X)=”” : IDEN(X)=0 : F_NAME$(X)=”” : E$(X)=”” : POS(X)=0 : next X

2380 FILE=0 : FI=8 : POS=0 : S=0 : wash back,112,72,224,152 : wash logic,112,72,224,152 2390 rem GET FOLDERS

2400 P$=”*.*” : N$=dir first$(P$,-1)

2410 if mid$(N$,43,1)=”8” then N$=dir next$

2420 if left$(N$,1)=”.” then N$=dir next$ 2430 if left$(N$,2)=”..” then N$=dir next$

2440 D$=mid$(N$,43,2) : if D$=”16” then inc FILE : F_NAME$(FILE)=left$(N$,12) : gosub 2740 : FILE$(FILE)=left$(N$,12) : IDEN(FILE)=1

2450 repeat

2460 N$=dir next$

2470 D$=mid$(N$,43,2) : if D$=”16” then inc FILE : F_NAME$(FILE)=left$(N$,12) : gosub 2740 : FILE$(FILE)=left$(N$,12) : IDEN(FILE)=1

2480 until N$=””

2490 rem GET FILES

2500 P$=PATH$ : N$=dir first$(P$,-1)

2510 D$=mid$(N$,43,2) : if D$<>”16” then inc FILE : F_NAME$(FILE)=left$(N$,12) : gosub 2740 : FILE$(FILE)=left$(N$,12) : IDEN(FILE)=2

2520 repeat

2530 N$=dir next$

2540 D$=mid$(N$,43,2) : if D$<>”16” then inc FILE : F_NAME$(FILE)=left$(N$,12) : gosub 2740 : FILE$(FILE)=left$(N$,12) : IDEN(FILE)=2

2550 until N$=””

2560 rem NOW LIST THEM IN THE FILE SELECTOR

2570 for Y=1 to FILE

2580 T$=FILE$(Y+S)+chr$(0) : text back,0,varptr(T$),15,Y+FI

2590 if IDEN(Y+S)=1 then T$=”*”+chr$(0) : text back,0,varptr(T$),14,Y+FI

2600 if POS<10 then inc POS : POS(POS)=POS

2610 if Y=10 then goto 2630

2620 next Y

2630 blit back,112,72,224,152,logic,112,72 : paper 0

2640 rem SET ZONES

2650 set zone 1,233,68 to 255,84

2660 set zone 2,233,140 to 255,154

2670 set zone 3,112,70 to 224,152

2680 set zone 4,167,156 to 228,170

2690 set zone 5,155,49 to 176,61

2700 set zone 6,106,157 to 163,168

2705 set zone 7,105,53 to 120,64

2710 set zone 8,131,47 to 150,60

2720 set zone 9,103,32 to 200,46 : show on

2725 if LO=1 then reset zone 9

2726 goto 2860

2740 rem SPACE FILE NAMES FOR FILE SELECTOR 2750 D=instr(N$,”.”) : if D=0 then return

2760 A$=left$(N$,D-1) : E$(FILE)=mid$(N$,D+1,3) : E$=mid$(N$,D+1,3) 2770 if len(A$)=1 then SP=8

2780 if len(A$)=2 then SP=7

2790 if len(A$)=3 then SP=6

2800 if len(A$)=4 then SP=5

2810 if len(A$)=5 then SP=4

2820 if len(A$)=6 then SP=3

2830 if len(A$)=7 then SP=2

2840 if len(A$)=8 then SP=1

2850 N$=”” : N$=A$+space$(SP-1)+”.”+E$ : return

2860 rem GET NAME AND POSITION OF LAST FILE SELECTED

2870 if A>7 then PRE_Y=A : PR$=FILE$(A-8+S)

2880 rem WAIT FOR CHOICE

2890 repeat : M=mouse key : CH=zone(0) : wait vbl : until M and CH<>0 2900 rem CHOICE SELECTED

2910 if M=1 and CH=1 and S>0 then dec S : dec POS

2920 if M=1 and CH=2 and S<FILE-11 then inc S : inc POS : POS(POS)=POS 2930 if M=1 and CH=3 then A=ytext(y mouse) : H=POS(A-8+S) : goto 3090

2940 if M=1 and CH=4 and FF$<>”” then goto 3140

2950 if M=1 and inkey$=chr$(13) and FF$<>”” then goto 3140

2960 if M=1 and CH=4 and FF$=”” then goto 2880

2970 if M=1 and inkey$=chr$(13) and FF$=”” then goto 2850

2980 if M=1 and CH=5 and FOLD=1 then hide on : goto 3350 2990 if M=1 and CH=5 and FOLD=0 then hide on : goto 2300

3000 if M=1 and CH=5 and FOLD=0 then goto 2890

3010 if M=1 and CH=6 then hide on : cls : wipe S5 : wipe S3 : unpack S2,S5 : floodpal 0 : wait vbl : fastcopy S7,S3 : goto 220 3020 if M=1 and CH=8 and drvmap<3 then goto 2560

3030 if M=1 and CH=7 then hide on : drive$=”A:” : goto 2310

3040 if M=1 and CH=8 then hide on : drive$=”B:” : goto 2310

3050 if M=1 and CH=9 then goto 3400

3060 rem UPDATE SCREEN

3070 wash back,112,72,224,152

3080 goto 2560

3090 rem HIGHLIGHT THE OPTION

3100 paper 0 : pen 15 : locate 15,PRE_Y : print PR$

3110 inverse on : locate 15,A : F$=FILE$(A-8+S) : FF$=F_NAME$(A-8+S) : pen 15 : print F$ : inverse off

3120 pen 15 : locate 13,4 : A$=left$(F$,8) : print A$ : locate 21,4 : A$=” “+right$(F$,3) : print A$ : wait 10

3130 goto 2870

3140 rem IF FILE IS A FOLDER THEN OPEN IT AND LIST FILES

3150 for X=1 to FILE

3160 K$=F_NAME$(X) : if K$=FF$ and IDEN(X)=1 then FOLD=1 : P$=”” : goto 3300

3170 next X : FOLD=0

3180 if SA=1 then goto 3550

3190 if LO=1 and PATH$=”*.PI1” then hide on : wait 10 : load FF$ : SCR$(SC)=”” : SCR$(SC)=screen$(logic,0,0 to 330,200) : gosub 3220 : wait 100 : cls : wipe S3 : wipe S5 : unpack S2,S5 : floodpal 0 : wait vbl : fastcopy S7,S3 : goto 220

3200 if LO=1 and PATH$=”*.NEO” then hide on : wait 10 : load FF$ : SCR$(SC)=”” : SCR$(SC)=screen$(logic,0,0 to 330,200) : gosub 3220 : wait 100 : cls : wipe S3 : wipe S5 : unpack S2,S5 : floodpal 0 : wait vbl : fastcopy S7,S3 : goto 220

3210 if LO=1 and PATH$=”*.GRX” then hide on : goto 3260

3220 for COCO=0 to 15 : C0L$(SC,COCO)=”” : next COCO

3230 for COCO=0 to 15 : C0L$(SC,COCO)=hex$(colour(COCO)) : next COCO

3240 return

3260 rem

3270 reserve as work 10,20000 : fill start(10) to start(10)+length(10),0

3280 bload FF$,10 : unpack start(10),logic,0 : wait 100 : SCR$(SC)=”” : SCR$(SC)=screen$(logic,0,0 to 330,200) : erase 10 : gosub 3220

3290 cls : unpack S2,S5 : floodpal 0 : wait vbl : fastcopy S7,S3 : goto 220

3300 rem OPEN THE FOLDER

3310 gosub 3390

3320 dir$=”\”+DD$

3330 wash back,112,72,224,152

3340 P$=”*.*” : goto 2360

3350 rem MOVE BACK TO PREVIOUS PATH

3360 dir$=”\” : DD$=””

3370 wash back,112,72,224,152

3380 FOLD=0 : goto 2360

3390 DD$=DD$+FF$+”\”-“ “ : return

3400 rem ENTER A SAVE FILE NAME

3410 reset zone : set zone 1,167,160 to 228,174

3415 locate 13,4 : print space$(12)

3420 clear key : XC=13 : XSP=104 : locate XC,4 : FF$=”” : T$=”ENTER NAME OF PICTURE” : pen 15 : locate 10,23 : print T$ : sprite 1,XSP,32,2 : caps lock on 3430 K$=inkey$

3440 rem CHECK FOR RETURN KEY

3450 if K$=chr$(13) then goto 3545

3460 if mouse key=1 and zone(0)=1 then goto 3545

3470 rem CHECK FOR BACKSPACE KEY

3480 if K$=chr$(8) and XC>12 and XSP>104 then locate XC,4 : print “ “; : dec XC : locate XC,4 : XSP=XSP-8 : sprite 1,XSP,32,2

3490 if XC=12 then XC=13

3500 rem CHECK FOR NORMAL CHARACTERS

3510 if K$=”.” then XC=22 : XSP=176 : sprite 1,XSP,32,2 : locate XC,4 : goto 3540

3520 if asc(K$)>31 and XC=21 then XSP=XSP+8 : sprite 1,XSP,32,2 : inc XC : locate XC,4 : print K$; : goto 3540

3530 if asc(K$)>31 and XC<25 then XSP=XSP+8 : sprite 1,XSP,32,2 : print K$; : inc XC

3540 K$=”” : locate XC,4 : goto 3430

3545 for X=13 to XC : FF$=FF$+chr$(scrn(X,4)) : next X

3550 if len(FF$)=0 or len(FF$)=1 then sprite off : paper 0 : locate 10,23 : print space$(23) : wait 10 : goto 2640 3560 F=instr(FF$,”.”) : if F then FF$=left$(FF$,F-1) : hide on : wait 10

3565 if not(F) then FF$=left$(FF$,8)-“ “ : hide on : wait 10

3570 if PATH$=”*.PI1” then cls : goto 3680

3580 if PATH$=”*.NEO” then cls : goto 3700

3590 if PATH$=”*.GRX” then FF$=left$(FF$,8)-” ”

3600 rem SAVE A PACKED SCREEN

3610 cls : reserve as work 10,20000 : fill start(10) to start(10)+length(10),0 3620 for X=0 to 15 : colour X,val(C0L$(SC,X)) : next X

3630 opaque screen logic,0,0,SCR$(SC) : fastcopy logic,back

3640 D=crack pac(logic,start(10))

3650 bsave FF$+”.GRX”,start(10) to start(10)+length(10) : erase 10 : gosub 3220 3660 cls : unpack S2,S5 : floodpal 0 : wait vbl : fastcopy S7,S3 : goto 220

3670 rem

3680 for X=0 to 15 : colour X,val(C0L$(SC,X)) : next X

3690 opaque screen back,0,0,SCR$(SC) : fastcopy back,logic : save FF$+”.PI1″ : cls : wipe S3 : wipe S5 : unpack S2,S5 : floodpal 0 : wait vbl : fastcopy S7,S3 : goto 220

3700 for X=0 to 15 : colour X,val(C0L$(SC,X)) : next X

3710 opaque screen back,0,0,SCR$(SC) : fastcopy back,logic : save FF$+”.NEO” : cls : wipe S3 : wipe S5 : unpack S2,S5 : floodpal 0 : wait vbl : fastcopy S7,S3 : goto 220

The original routine comes with a file selector graphic which I no longer have.

Updated: March 26, 2023 — 9:07 pm
Deanoworld © 2021 Frontier Theme