Floppy

Programme leichter laden

Dieses Programm vereinfacht das Laden von Programmen durch direkte Auswahl aus dem Directory.

Programme werden häufig nach dem Listen des Directorys durch Voranstellen eines »LOAD« und Ergänzung durch ”,8:“ oder ”8,1“ geladen. Oftmals vergißt man dabei allerdings das Eintippen des Doppelpunktes oder man macht andere kleine Fehler, worauf sich der Computer mit einem »SYNTAX ERROR« meldet.

Mit »Directory-Lader« (Listing) kann das Directory einer Diskette nun so manipuliert werden, daß wahlweise ein »,8:« oder ein »,8,1« an den Filenamen angehängt wird. Das vereinfacht den Ladevorgang um einiges: Nur noch das Directory listen, mit dem Cursor in die gewünschte Zeile fahren, »LOAD« eingeben und schon geht’s los.

So funktioniert der »Directory-Lader«

Jedes Programm auf einer Diskette ist in einem Directoryblock verzeichnet. Dort belegt der Name des Programmes 16 Byte. Ist der Name kürzer als 16 Byte, wird er durch ein »SHIFT Space« (CHR$ 160) ergänzt. Dadurch wird auch das Ende eines Namens vom DOS erkannt.

Beim Listen des Directorys werden nun alle 16 Byte des Namens auf dem Bildschirm angezeigt. Das zu lösende Problem besteht also darin, den gewünschten Zusatz ebenfalls hinter dem Programm anzuzeigen.

Dazu wird zuerst der erste Block des Directorys eingelesen. Der Bufferpointer wird auf den ersten Namen des Blocks gesetzt und der Name ausgelesen. Hierbei werden alle 16 Byte des Namens verwendet. Durch Betätigen entsprechender Tasten wird nun der Name wie folgt bearbeitet:
@ Löschen des Zusatzes
↑ Überspringen des Namens ohne Änderung
M Schreiben des Zusatzes»,8,1«
B Schreiben des Zusatzes »,8:«

Beim Schreiben des Zusatzes wird der Name des Programms von hinten durch den Zusatz ergänzt. Dabei werden Programmnamen, die längerals 11 Zeichen bei Maschinenprogrammen oder länger als 12 Zeichen bei Basic-Programmen sind, entsprechend verkürzt.

In dieser Weise werden sämtliche Namen eines Directory-Blocks bearbeitet.

Da der Bufferpointer jedesmal weitergesetzt wird, kann es vorkommen, daß auch bereits gelöschte Programme bearbeitet werden. Das hat jedoch keinen weiteren Einfluß.

Nach der Bearbeitung eines Blocks wird dieser zurückgeschrieben, und das Programm fährt mit dem nächsten Block fort.

Tabelle 1 zeigt die verwendeten Variablen, Tabelle 2 die einzelnen Routinen des Programms.

Während der Bearbeitung wird ständig der nächste zu bearbeitende Block angezeigt. Erscheinen die Werte 0 und 255, so ist der letzte Block erreicht. Man hatjetzt eine Diskette mit modifiziertem Directory und damit einfach zu ladenden Programmen vorliegen (Bild 1).

(Holger Weihe/ev)
Variable Bedeutung
0 Prüfsumme für Katalog-Routine
K Ausgewählte Taste bei Menü
T, S Track und Sektor für ersten Block
P, Q Zwischenspeicher für Track, Sektor
Z Position des ersten Namens eines Blocks
X$ Warten auf Tastendruck
T$, S$ Track, Sektor des nächsten Blocks
N$ Programmname
D$ Modifizierter Programmname
Tabelle 1. Variablenliste zu »Directory-Lader«
Zeile Funktion
100-260 Katalog-Routine
270-450 Titelbild
470-500 Auswertung der Eingabe
510-640 Anzeigen des Direktories
650-990 Einlesen des Blocks
Aufbau des Untermenüs
Auswertung der Eingabe
1000-1140 Schreiben des Zusatzes
",8:" bei Basic-Programm
1150-1280 Schreiben des Zusatzes
",8,1" bei Maschinen-Programmen
1290-1390 Keine Änderung des Programmnamenes
1400-1500 Löschen des Zusatzes
1510-1610 Rückschreiben des eingelesenen Blocks
1620-1740 Auswahl und Ende des Programmes
Tabelle 2. Die wichtigsten Routinen
10 rem ***************************
20 rem **     direktory loader
30 rem **
40 rem **     by holger weihe
50 rem **        am silberberg 1
60 rem **        3344 boerssum
70 rem **
80 rem **  tel.  05334/6589
90 rem **
100 rem ***************************
110 rem ^ = pfeil nach oben
120 rem @ = klammeraffe
130 rem ***************************
140 rem **  direktory routine
150 rem ***************************
160 rem
170 rem
180 data169,36,133,251,169,251,133,187,169,0,133,188,169,1,133,183,169,8
190 data133,186,169,96,133,185,32,213,243,165,186,32,180,255,165,185,32,150
200 data255,169,0,133,144,160,3,132,251,32,165,255,133,252,164,144,208,47
210 data32,165,255,164,144,208,40,164,251,136,208,233,166,252,32,205,189
220 data169,32,32,210,255,32,165,255,166,144,208,18,170,240,6,32,210,255
230 data76,76,192,169,13,32,210,255,160,2,208,198,32,66,246,96,234
240 for i=49152 to 49152+105:readd:pokei,d:o=o+d:next
250 if o<>15577 then poke199,1:print"  fehler in datas  ":stop
260 rem
270 rem
280 rem ****************************
290 rem ** titel
300 rem ****************************
310 rem
320 rem
330 poke53280,0:poke53281,0:printchr$(152)
340 printchr$(14):printchr$(147)
350 print"     {CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}"
360 print"     {CBM-J}                           {CBM-L}"
370 print"     {CBM-J}     Direktory Loader      {CBM-L}"
380 print"     {CBM-J}                           {CBM-L}"
390 print"     {CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}"
400 print
410 print"
420 print"     ";chr$(18);" Bitte auswaehlen ";chr$(146):print:print
430 print"        ";chr$(18);"1";chr$(146);"   Direktory anzeigen":print
440 print"        ";chr$(18);"2";chr$(146);"   Direktory bearbeiten":print
450 print"        ";chr$(18);"3";chr$(146);"   Quit":print
470 get x$:if x$="" then 470
480 k=val(x$):if k<1 or k>3 then 470
490 on k goto 510,660,1740
500 goto 330
510 rem
520 rem
530 rem *******************************
540 rem **   direktory anzeigen
550 rem *******************************
560 rem
570 rem
580 printchr$(147):print:print:poke199,1:print" Bitte Disk einlegen und Taste druecken "
590 get x$:if x$="" then 590
600 printchr$(147) :sys 49152
610 print:print:poke199,1:print" Taste druecken "
620 get x$:if x$="" then 620
630 goto 330
640 rem
650 rem
660 rem ***************************
670 rem ***  komma achter
680 rem ***************************
690 rem
700 rem
710 t=18:s=1:z=5
720 open 1,8,15
730 open 2,8,2,"#"
740 print#1,"u1";2;0;t;s
750 get#2,t$,s$
760 p=t:q=s
770 if t$="" then t=0:s=255:goto800
780 t=asc(t$):s=asc(s$):
790 print#1,"b-p";2;1
800 print#1,"b-p";2;z:
810 for i=1 to 16
820 get#2,n$
830 d$=d$+n$
840 next i
850 print#1,"b-p";2;z
860 if d$="" then 1510
870 printchr$(147):print:print:print"   Next Direktory Block :"
880 print:print"   Track :";t;" Sektor :";s
890 print:print:print:print:print"   Programm :";d$
900 print:print
915 print"   ";chr$(18);"B";chr$(146);"asic oder ";chr$(18);"M";chr$(146);"aschinenprogramm"
920 print
930 print:print:print:print:poke199,1:print"    <^> Weiter   <@> Loeschen      "
940 get x$:if x$="" then 940
950 if x$="b"then 1070
960 if x$="m"then 1160
970 if x$="^"then 1300
980 if x$="@" then 1420
990 goto 940
1000 rem
1010 rem
1020 rem **************************
1030 rem ** basicprogramm
1040 rem **************************
1050 rem
1060 rem
1070 d$=left$(d$,12)
1080 ne$=d$+chr$(160)+",8:"
1100 print#2,ne$
1110 ne$="":d$="":z=z+32
1120 if z>256 then z=5:goto 1510
1130 goto 800
1140 rem
1150 rem
1160 rem **************************
1170 rem ** maschprogramm
1180 rem **************************
1190 rem
1200 rem
1210 d$=left$(d$,11)
1220 ne$=d$+chr$(160)+",8,1"
1240 print#2,ne$
1250 ne$="":d$="":z=z+32
1260 if z>256 thenz=5:goto 1510
1270 goto 800
1280 rem
1290 rem
1300 rem ****************************
1310 rem ** keine aenderung
1320 rem ****************************
1330 rem
1340 rem
1350 print#2,d$:d$=""
1360 z=z+32
1370 if z>256 thenz=5:goto 1510
1380 goto 800
1390 rem
1400 rem
1410 rem ****************************
1420 rem ** loeschen des anhangs
1430 rem ****************************
1440 rem
1450 rem
1460 d$=left$(d$,12)+chr$(160)+chr$(160)+chr$(160)+chr$(160)
1470 print#2,d$:d$=""
1480 z=z+32
1490 if z>256 then z=5:goto 1510
1500 goto 800
1510 rem
1520 rem
1530 rem ****************************
1540 rem ** rueckschreiben
1550 rem ****************************
1560 rem
1570 rem
1580 if t=0 and s=255 then print#1,"u2";2;0;p;q:goto 1690
1590 print#1,"u2";2;0;p,q
1600 p=t:q=s:close2:close1:goto720
1610 rem
1620 rem
1630 rem
1640 rem ****************************
1650 rem ** ende
1660 rem ****************************
1670 rem
1680 rem
1690 print:print:poke199,1:print"           Taste Druecken          "
1720 get x$:if x$="" then 1720
1730 close2:close1:goto 330
1740 sys 64738
Listing »Directory-Lader«. Bitte beachten Sie die Eingabehinweise auf Seite 6.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →