Il nostro programma MENU per dischetti

Menu program

Ecco un programma compatto (solo 2k) in gradi di costruire un comodo menu per i dischetti. Gira su VIC-20 di qualsiasi configurazione di memoria, si carica velocemente e può essere controllato anche dal joystick. Con questo si possono gestire elegantemente programmi strutturati in più parti in modo da vedere nel menu solamente la prima parte che va caricata.

Come si usa

Metti il programma come primo in un dischetto in modo da poterlo caricare con la classica istruzione: LOAD”*”,8
Una volta caricato il menu scegli il programma da eseguire usando i tasti cursore o il joystick e avvialo premendo RETURN oppure il tasto FIRE.
Alla sua prima esecuzione il programma leggerà il dischetto e creerà un file indice chiamato DIR.DTA che verrà usato a tutte le esecuzioni successive per rendere l’avvio più rapido. In caso tu successivamente aggiunga o tolga programmi dal disco, puoi dire al programma MENU di aggiornare la lista premendo il tasto [CLR] (ovvero SHIFT HOME).

File non elencati

Il programma non elenca sé stesso nella lista e nasconde i programmi il cui nome file termina non una “estensione” che inizia dal punto seguita da tre caratteri (ad esempio “.CHN”). Quindi se hai un programma che si carica in parti multiple file1, file2, file3, puoi gestirlo rinominando file2 e file3 come file2.chn file3.chn in modo che nella lista non si vedano.

Il codice sorgente

110 PRINT”{CLR}MENU:VIC20RELOADED.COM”:REMV1.3
120 DIMTB$(155):D=PEEK(186)
190 C=1:C1=0:C2=6:IFPEEK(648)<>16ANDPEEK(648)<>30THENC1=1:C2=15
200 OPEN8,D,8,”:DIR.DTA”:OPEN15,D,15:INPUT#15,A,A$,I,J
210 INPUT#8,DN$:IFATHENCLOSE8:CLOSE15:GOTO536
220 INPUT#8,A$:PRINT”.”;
230 IFLEN(A$)<21THENA$=” “+A$
232 IFLEN(A$)<21THENA$=A$+” ”
234 IFLEN(A$)<21THEN230
236 TB$(C)=A$:IFST=64THEN250
240 C=C+1:GOTO220 250 CLOSE8:CLOSE15:M=C:TB$(M+1)=” ”
260 POKE646,C2:PRINT”{CLR}”DN$:H=1:POKE198,0
261 PRINT”{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{RVS}UP{RIGHT}DWN{RIGHT}HOME{RIGHT}RET{RIGHT}CLR{RIGHT}{5F}”
262 GOSUB1100.DISPLAY
310 GETA$:S=PEEK(37151):POKE37154,127:T=PEEK(37152):POKE37154,255
318 IFA$=”{UP}”OR((4ANDS)=0)THENIFH>1THENH=H-1:GOTO262
320 IFA$=”{DOWN}”OR((8ANDS)=0)THENIFH<144THENH=H+1:GOTO262
330 IFA$=”{HOME}”THENH=1:GOTO262
332 IFA$=CHR$(13)OR((32ANDS)=0)THENIFH<=MTHENGOSUB1200:GOTO400
334 IFA$=”{CLR}”THEN530
336 IFA$=”{5F}”THENPOKE198,0:POKE646,C2:PRINT”{CLR}”:END
340 IFA$=” “THENOPEN15,D,15,”I”:CLOSE15:RUN120
380 GOTO310
400 POKE646,C2:PRINT”{CLR}LOAD”;CHR$(34);TB$(H);”*”;CHR$(34);”,8″
402 A$=”{HOME}”+CHR$(13)+”RUN”+CHR$(13):FORI=1TOLEN(A$)
404 POKE630+I,ASC(MID$(A$,I,1)):NEXT:POKE198,I-1:END
530 POKE646,C2
536 PRINT”{CLR}UPDATING…”
540 OPEN8,D,0,”$0″:FORC=1TO8:GET#8,A$:NEXT:C=1:DN$=””:FORC=1TO16
550 GET#8,A$:DN$=DN$+A$:NEXT:GET#8,A$:GET#8,A$:DN$=DN$+” “:GET#8,A$
560 DN$=DN$+A$:GET#8,A$:DN$=DN$+A$:GET#8,A$:GET#8,A$
570 GET#8,A$:GET#8,A$:C=1
580 FORA=1TO4:GET#8,A$:NEXT:PN$=””:TY$=””
590 GET#8,A$:IFST<>0THEN680
600 IFA$=””THEN680
610 IFASC(A$)<>34THEN590
620 GET#8,A$:IFASC(A$)<>34THENPN$=PN$+A$:GOTO620
630 GET#8,A$:IFA$=” “THEN630
640 TY$=TY$+A$:GET#8,A$:IFA$<>””THEN640
650 IFLEFT$(TY$,3)<>”PRG”THEN580
660 IFLEFT$(PN$,1)=” “THEN580
662 FORI=1TOLEN(PN$):IFMID$(PN$,I,1)<>”.”THENNEXT
664 IFI<LEN(PN$)THENA$=MID$(PN$,I,4):IFA$<>”.EXE”ANDA$<>”.COM”THEN580
665 IFI>=LEN(PN$)ANDPN$=”MENU”THEN580.JUMPOVER
666 PN$=LEFT$(PN$,I-1) 670 TB$(C)=PN$:C=C+1:IFST=0THEN580
680 CLOSE8:OPEN15,D,15,”I”:PRINT#15,”S:DIR.DTA”:CLOSE15
690 OPEN8,D,8,”:DIR.DTA,S,W”:PRINT#8,DN$ 700 FORA=1TOC-1:PRINT#8,TB$(A):NEXT
720 CLOSE8:RUN
998 REM *ERRORS**
999 OPEN15,D,15
1000 INPUT#15,A,B$,C,W:PRINTA;B$;C;W:CLOSE15:END
1006 RETURN
1100 REM *DISPLAY**
1102 POKE646,C1:PRINT”{HOME}{DOWN}”;:FORI=HTOH+10
1104 PRINT”{RVS}”TB$(I):POKE646,C2:NEXT
1106 RETURN
1200 REM *RESTORE NAME**
1202 FORI=1TOLEN(TB$(H))-1:IFMID$(TB$(H),I,1)=” “THENNEXT
1204 FORJ=LEN(TB$(H))TO2STEP-1:IFMID$(TB$(H),J,1)=” “THENNEXT
1206 TB$(H)=MID$(TB$(H),I,J-I+1):RETURN

Linea 120: Rileva il numero di disk drive e lo mette nella variabile D

Linea 190: Imposta C1,C2 per il colore da usare nel menu. Puoi modificare questa linea per avere un set di colori diverso se l’espansione è collegata

Linee 200-240: Legge il file indice (dir.dta) e memorizza i nomi file nell’array TB$()

Linee 310-380: Ciclo di lettura Keyboard e Joystick

Linea 400: Carica ed esegue il programma selezionato in modo comandi

Linee 530-720: Legge la directory del dischetto e scrive il file indice dir.dta

Linea 998: Routine di controllo errore disco (inutilizzata)

Linea 1100 (sub): mostra l’elenco di file contenuto nell’array TB$()

Download

Scarica il programma con questo link.


1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *