C 64
Tips und Tricks

Ordnung ist das halbe Leben

Mit diesem Programm bringen Sie auf bequeme Weise Ordnung in die Directories Ihrer Disketten.

Ist Ihnen das auch schon mehrmals passiert: Sie hatten auf einer Diskette ein schön geordnetes Directory und beim Abspeichern eines weiteren Files stand dieses nicht sauber am Schluß des Directory, sondern mitten zwischen den anderen Programmen. Mit dem hier vorgestellten Directory-Sortierprogramm ist es nun möglich, diese »falsch hineingeratenen« Files herauszunehmen und an geeigneter Stelle wieder einzusetzen. Auch das Einfügen von Trennstrichen ist möglich. Bild 1 und Bild 2 zeigt Ihnen den Unterschied eines unsortierten zu einem sortierten Directory.

Nach dem Starten des Programms legt man die Diskette ein, die sortiert werden soll, und drückt eine Taste. In der linken oberen Ecke wird nun die Sektornummer des Directory-Blocks angezeigt, den der Computer gerade einliest, rechts daneben die Anzahl der in den Speicher eingelesenen Files. Nach beendetem Einlesen erscheint links vom obersten File ein schwarzer Pfeil, der sich mit den Funktionstasten F3 nach oben und F5 nach unten bewegen läßt. Mittels F1 kann nun ein mit diesem Pfeil gekennzeichnetes File nach rechts herausgeschoben und mit F3 und F5 verschoben werden. An gewünschter Stelle wird es mit F1 wieder eingefügt. Somit ist ein beliebiges Vertauschen aller Files im Directory möglich.

F8 schreibt das sortierte Directory wieder auf die Diskette zurück. Will man das gänderte Directory nicht abgespeichert haben, so kann statt dessen mit F6 noch einmal das alte oder ein anderes eingelesen werden.

Zur optischen Abgrenzung mehrerer Files dient der Trennstrich, den man mit F2 erzeugen, mit F3 und F5 verschieben und schließlich wieder mit F1 einfügen kann. Wem übrigens ein anderer Trennstrich besser gefällt, der kann in Zeile 500 für die Minuszeichen andere einsetzen, zum Beispiel SHIFT+*. SHIFT + C ist nicht zu empfehlen, da dieser Strich bei Groß-Kleinschrift-Umschaltung ein großes »C« ergibt. Der Trennstrich belegt keinen Block auf der Diskette und ist zur besseren Unterscheidung mit DEL im Directory gekennzeichnet. Ein versehentlich mit »F2« erzeugter Trennstrich kann, wenn er nach rechts gebracht wird, mit F4 wieder gelöscht werden. In gleicher Weise können auch Files aus dem Directory gelöscht werden. Dabei werden aber die von dem File belegten Blöcke nicht wieder freigegeben, so daß ein abschließendes »VALIDATE« der Diskette erforderlich ist, wenn man ein File gelöscht hat.

Nun zum Aufbau des Programms. Es ist vorwiegend in Basic geschrieben und enthält zwei kurze Maschinensprache-Routinen. Die erste dient zum Einlesen der Filenamen und Fileparameter und wird mit SYS52992, log. Filenummer, Länge, String aufgerufen. Das Lesen mit GET# in Basic wäre dafür viel zu langsam. Mit dem zweiten Maschinenprogramm werden die am Bildschirm angezeigten Files nach oben oder unten gescrollt. Aufgerufen wird es mit 8YS 53056,r,oz,ls,uz,rs.

Dabei haben die Parameter folgende Bedeutung:

r= Scrollrichtungen: 0 für nach oben und 1 für nach unten
oz= oberste Zeile,
ls= linke Spalte,
uz= unterste Zeile,
rs= rechte Spalte.

Durch Abspeichern des Speicherbereichs von $CF00 bis $CFFF kann diese Routine auch in andere Basic- oder Maschinenprogramme eingebunden werden.

(Edwin Göbel/hm)
100 rem ************************
110 rem *                      *
120 rem * directory-sort v1.0  *
130 rem * -------------------  *
140 rem * autor:               *
150 rem * edwin goebel         *
160 rem * schuetzstr. 1        *
170 rem * 8522 herzogenaurach  *
180 rem *                      *
190 rem ************************
200 goto430
210 rem *******************************
220 rem  unterroutinen
230 rem *******************************
240 input#1,f1,f$,f2,f3:iff1=0thenreturn
250 print"{cyn}{down}"f1;f$,f2;f3"{blk}":end:rem "{cyn}"=cyan; "{blk}"=schwarz
260 rem -------------------------------
270 ifno+en>=cthenreturn
280 sys53056,0,2,2,23,18:no=no+1
290 poke214,23:poke211,2:sys58732:printna$(zu(no+en-1));:return
300 rem -------------------------------
310 ifno=0thenreturn
320 sys53056,1,2,2,23,18:no=no-1
330 poke214,2:poke211,2:sys58732:printna$(zu(no+1)):return
340 rem -------------------------------
350 print"{clr}{blk}{rvon}"tab(13)"directory-sort"
360 printtab(12)"----------------"
370 print"{cyn}{down} diskette einlegen und taste druecken"
380 gett$:ift$=""then380
390 print"{home}{down}{down}{down}                                     ":return
400 rem *******************************
410 rem  beginn des hauptprogrammes
420 rem *******************************
430 poke53280,0:poke53281,11:gosub350
440 open1,8,15,"i":diman$(145),na$(145),re$(145),zu(146),sn(19)
450 fori=1to18:readsn(i):next
460 fori=52992to53242:reads:pokei,s:next
470 gosub240:open2,8,2,"#":gosub240
480 s=1:c=1:n$=chr$(0):nn$=n$+n$+n$+n$+n$+n$+n$+n$+n$+n$
490 nu$=nn$+nn$+nn$:re$(0)=nn$+n$
500 an$(0)=chr$(128)+chr$(18)+chr$(1):na$(0)="----------------":rem trennstrich
510 rem *******************************
520 rem  einlesen des directorys
530 rem *******************************
540 print#1,"u1 2 0 18"s:print"{home}{lred}"s"{left} ":rem "{lred}"=hellrot
550 get#2,t$:get#2,s$:s=asc(s$+n$)
560 forbp=0to7:print#1,"b-p 2";bp*32+2
570 sys52992,2,3,x$:an$(c)=x$:ifleft$(x$,1)=n$thennext:goto600
580 sys52992,2,16,x$:na$(c)=x$:sys52992,2,11,x$:re$(c)=x$
590 zu(c)=c:print"{home}{rght}{rght}{rght}{rght}"c"{left} ":c=c+1:next
600 ift$<>""then540
610 close2:poke650,128:print"{home}{down}{down}{blk}>{cyn}{up}";:cp=2:no=0:nu=0:en=c:ifen>23thenen=23
620 printchr$(13)tab(2)na$(nu+1);:nu=nu+1:ifnu<en-1then620
630 rem *******************************
640 rem  tastaturabfrage
690 rem *******************************
700 getta$:ifta$=""then700
710 ifta$="{f3}"thenifcp>2thencp=cp-1:sys53056,0,2,0,23,0
720 ifta$="{f3}"thenifcp=2thengosub310
730 ifta$="{f5}"thenifcp<enthenifno+cp<cthencp=cp+1:sys53056,1,2,0,23,0
740 ifta$="{f5}"thenifcp>=23thengosub270
750 ifta$="{f1}"then810
760 ifta$="{f2}"thenifc<145thenf=1:c=c+1:print"{lred}{home}{rght}{rght}{rght}{rght}"c-1"{left} {cyn}":en=en+1:ifen>23thenen=23
770 ifta$="{f2}"theniff=1thenf=0:te=0:te$=na$(0):goto840
780 ifta$="{f8}"then1000
790 ifta$="{f6}"then1090
800 goto700
810 te=zu(no+cp-1):te$=na$(te)
820 sys53056,0,cp,2,23,18:ifc>23thenen=en+1:gosub290:en=en-1
830 fori=no+cp-2toc-1:zu(i+1)=zu(i+2):next
840 poke214,cp:poke211,19:sys58732
850 print"{CBM-T}{CBM-T}"te$:rem "{CBM-T}"=commodore+"t"
860 getta$:ifta$=""then860
870 ifta$="{f3}"thenifcp>2thencp=cp-1:sys53056,0,2,19,24,37:sys53056,0,2,0,23,0
880 ifta$="{f3}"thenifcp=2thengosub310
890 ifta$="{f5}"thenifcp<enthencp=cp+1:sys53056,1,2,19,24,37:sys53056,1,2,0,23,0
900 ifta$="{f5}"thenifcp=23thengosub270
910 ifta$="{f1}"then950
920 ifta$="{f4}"thente$="{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}":c=c-1:en=c:ifen>23thenen=23
930 ifta$="{f4}"thenprint"{home}{lred}{rght}{rght}{rght}{rght}"c-1"{left} {cyn}":goto970
940 goto860
950 sys53056,1,cp,2,23,18
960 fori=c-1tono+cp-1step-1:zu(i+1)=zu(i):next:zu(no+cp-1)=te
970 poke214,cp:poke211,2:sys58732
980 printte$"                   "
990 goto700
1000 rem ******************************
1010 rem  schreiben des sortierten dir.
1020 rem ******************************
1030 open2,8,2,"#":t=18:fori=0toint((c-2)/8):if8*i+8>=c-1thent=0
1040 print#1,"b-p 2 0":print#2,chr$(t)chr$(sn(i+2))
1050 forbp=0to7:print#1,"b-p 2";bp*32+2
1060 ifbp+8*i+1>=cthenprint#2,nu$;:next:goto1080
1070 print#2,an$(zu(bp+8*i+1))na$(zu(bp+8*i+1))re$(zu(bp+8*i+1));:next
1080 print#1,"u2 2 0 18"sn(i+1):print"{lred}{home}"tab(36)sn(i+1)"{left} {cyn}":gosub240:next
1090 close2:gosub350:goto470
1100 rem ******************************
1110 rem  sektoren des directory tracks
1120 rem ******************************
1130 data1,4,7,10,13,16,2,5,8,11,14,17,3,6,9,12,15,18
1140 rem ******************************
1150 rem  input maschinen-routine
1160 rem ******************************
1170 data32,253,174,32,158,183,32,30,225,32,253,174,32,158,183,138,72,32,253
1180 data174,32,139,176,133,73,132,74,32,163,182,104,32,117,180,160,2,185
1190 data97,0,145,73,136,16,248,200,32,18,225,145,98,200,196,97,208,246,32
1200 data204,255,96,0,0,0,0,0
1210 rem ******************************
1220 rem  scroll maschinen-routine
1230 rem ******************************
1240 data32,245,207,138,72,32,245,207,224,0,176,3,76
1250 data72,178,224,24,176,249,134,251,32,245,207,224,0,144,240,224,39,176
1260 data236,134,253,32,245,207,224,25,176,227,134,252,232,138,56,229,251
1270 data144,218,240,216,133,250,32,245,207,224,40,176,207,228,253,144,203
1280 data134,254,104,170,165,172,72,165,173,72,165,174,72,165,175,72,224,0
1290 data208,22,166,251,198,250,240,44,32,240,233,232,189,240,236,133,172
1300 data181,217,32,219,207,48,236,202,240,3,76,72,178,166,252,198,250,240
1310 data16,32,240,233,202,189,240,236,133,172,181,217,32,219,207,48,236,164
1320 data254,32,240,233,32,36,234,169,32,145,209,136,196,253,16,249,76,88
1330 data233,41,3,13,136,2,133,173,32,224,233,164,254,177,172,145,209,177
1340 data174,145,243,136,196,253,16,243,96,32,253,174,76,158,183
Listing zum Directory-Sorter. Beachten Sie den Checksummer auf Seite 54.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →