VC 20
Tips & Tricks

Disketten-Organisation

Dieses Programm ermöglicht es, alle wichtigen Diskettenoperationen komfortabel und schnell durchzuführen.

Das Programm (Listing 1) ist für den VC 20 geschrieben, mit kleinen Änderungen jedoch auch auf dem C 64 lauffähig. Die für den C 64 notwendigen Änderungen beschränken sich im Wesentlichen auf die Anpassung des Bildschirmlayouts. Die im Listing vorkommenden Adressen 828 und 36879 sind für den C 64 durch 49152 und 53280/81 zu ersetzen.

Nach dem Starten erscheint sofort das Menü (Bild 1) auf dem Bildschirm. Durch Drücken der Tasten »+« oder »—« kann nun die Gerätenummer, unter der das Floppy-Laufwerk angesprochen wird, geändert werden. Diese Funktion ist sinnvoll, wenn mit zwei oder mehr Disketten-Stationen gearbeitet wird.

Bild 1. Hardcopy des Bildschirm-Menüs

Über das Menü sind unter anderem alle Diskettenbefehle ausführbar, die sonst umständlich über den Kommandokanal gesendet werden müssen. Diese Befehle sind im Handbuch zur 1541-Floppy ausführlich erklärt, so daß an dieser Stelle nicht näher darauf eingegangen werden muß. Einige der Floppy-Kommandos stehen in erweiterter Form zur Verfügung. So kann zum Beispiel die Directory-Ausgabe wahlweise auf den Bildschirm oder über den Drucker erfolgen. Im letzteren Fall wird das Directory alphabetisch sortiert (Bild 2). Wird dies nicht gewünscht, dann muß in Zeile 1370 das »GOTO 1490« durch »RETURN« ersetzt werden.

Bild 2. Sortiertes Directory bei Druckerausgabe

Zusätzlich zu den über OPEN 1,8,15,… ansprechbaren Disketten-Befehlen können über das Menü noch einige weitere nützliche Funktionen aufgerufen werden. Unter anderem ist es möglich, Namen und ID einer Diskette oder die Gerätenummer der Floppy-Station zu ändern.

Außerdem sind Routinen zum Regenerieren und Überprüfen einer Diskette vorhanden. Weiterhin gibt es die Möglichkeit, die BAM einer Diskette alphabetisch zu sortieren. Diese Funktion erzeugt zwar ein übersichtliches, sortiertes Directory, sollte aber nur mit Vorsicht verwendet werden. Falls die BAM noch Einträge gelöschter Files enthält, kann es nach Abschluß des Sortiervorganges zu »Disk-Salat« kommen, da die Sortierroutine gelöschte Files nicht erkennt. Vor dem Einsatz dieser Funktion sollte die Diskette daher unbedingt mit dem Menüpunkt »Regenerieren« auf gelöschte Files überprüft werden.

Das Programm erklärt sich im übrigen weitgehend von selbst und stellt infolge der leichten und übersichtlichen Bedienbarkeit eine wirkliche Hilfe für den geplagten Disketten-Benutzer dar.

(Wilhelm Boosz/ev)
1 rem **********************************
2 rem *disketten-organisations-programm*
3 rem *       fuer den cbm-64          *
4 rem *            von                 *
5 rem *wilhelm boosz - heinrichstr. 21 *
6 rem *8602 strullendorf - t.09543/7606*
7 rem **********************************
8 rem
9 poke49152,8:poke53280,1:poke53281,1
10 print"{clr}";:gn%=peek(49152):ur%=0
11 print"{pur}    disketten-organisations-programm"
12 print"{down}{grn}         von wilhelm boosz / 09543/7606"
13 printtab(4)"{down}{down}{red}geraetenr. floppy =          {left}{left}{left}{left}{left}{left}{left}{left}{left}{left}"gn%" {rvon}(+/-)"
14 print"{down}{brn} {rvon}i{rvof} nitialisieren"tab(22)"{rvon}f{rvof} ormatieren"
15 print"{down} {rvon}v{rvof} alidieren"tab(22)"{rvon}d{rvof} irectory"
16 print"{down} {rvon}k{rvof} opieren"tab(22)"{rvon}b{rvof} am alphabetisch"
17 print"{down} {rvon}g{rvof} eraetenr.aendern"tab(22)"{rvon}u{rvof} mbenennen"
18 print"{down} {rvon}l{rvof} oeschen"tab(22)"{rvon}r{rvof} egenerieren"
19 print"{down} {rvon}n{rvof} ame disk aendern"tab(22)"{rvon}a{rvof} endern disk-id"
20 print"{down} {rvon}c{rvof} heck disk"tab(22)"{rvon}e{rvof} nde programm"
21 printtab(10)"{blu}{down}{down}bitte waehlen !"
22 gety$:ify$=""then22
23 ify$="+"thengn%=gn%+1:ifgn%>255thengn%=255
24 ify$="-"thengn%=gn%-1:ifgn%<0thengn%=0
25 ify$="+"ory$="-"thenpoke49152,gn%:print"{home}";:goto11
26 ify$="e"thenpoke53280,14:poke53281,6:print"{clr}{lblu}":clr:end
27 ify$="i"thengosub44:clr:goto10
28 ify$="f"thengosub50:clr:goto10
29 ify$="d"thengosub64:clr:goto10
30 ify$="b"thengosub84:clr:goto10
31 ify$="k"thengosub121:clr:goto10
32 ify$="u"thengosub130:clr:goto10
33 ify$="l"thengosub148:clr:goto10
34 ify$="r"thengosub159:clr:goto10
35 ify$="n"thengosub212:clr:goto10
36 ify$="a"thengosub221:clr:goto10
37 ify$="g"thengosub231:clr:goto10
38 ify$="c"thengosub263:clr:goto10
39 ify$="v"thengosub58:clr:goto10
40 goto22
41 rem ******************************
42 rem *i n i t i a l i s i e r e n *
43 rem ******************************
44 print"{clr}{down}{down}{down}{down}{down}{down}{down}{down}"tab(5)"i n i t i a l i s i e r e n"
45 close1:open1,gn%,15,"i0":gosub298:close1:ifen=0thenreturn
46 print"{down}{down}{down}    "en;en$;ne;ee:gosub305:return
47 rem ******************************
48 rem *   f o r m a t i e r e n    *
49 rem ******************************
50 print"{clr}{down}{down}{down}{down}{down}"tab(5)"f o r m a t i e r e n"
51 na$="test":input"{down}{down}{down}{down}diskettenname";na$:na$=left$(na$,16)
52 id$="":input"{down}{down}disketten-id ";id$:id$=left$(id$,2)
53 close1:open1,gn%,15,"n0:"+na$+","+id$:close1:gosub298:ifenthen46
54 return
55 rem ******************************
56 rem *    v a l i d i e r e n     *
57 rem ******************************
58 print"{clr}{down}{down}{down}{down}{down}{down}{down}{down}"tab(5)"v a l i d i e r e n"
59 close1:open1,gn%,15,"v":gosub298:close1:ifen=0thenreturn
60 goto46
61 rem ******************************
62 rem *directory drucker/bildschirm*
63 rem ******************************
64 print"{clr}{down}{down}{down}"tab(5)"d i r e c t o r y":printtab(5)"{down}{down}{down}{down}{rvon}d{rvof} rucker"
65 printtab(5)"{down}{down}{rvon}b{rvof} ildschirm"
66 gety$:ify$<>"d"andy$<>"b"then66
67 ify$="d"thenprint"{clr}{down}{down}{down}"tab(5)"d r u c k e r   bereit ?":goto69
68 gosub309:goto77
69 gety$:ify$<>"j"andy$<>"n"then69
70 ify$="n"thenreturn
71 input"{down}{down}{down}geraetenummer drucker   4{left}{left}{left}";gd%:open4,gd%:gosub309
72 print#4,"      "f$(0)" "id$:print#4
73 fory=1toze-1
74 iflen(f$(y))<16thenf$(y)=f$(y)+" ":goto74
75 print#4,l$(y)"   "f$(y)"   "k$(y)
76 next:print#4:print#4,"      freie bloecke: "l$(ze):print#4:return
77 print"{clr}{down}name:{rvon}"tab(8)f$(0):print"id:{rvon}"tab(8)id$"{rvof}{down}"
78 yy=3:fory=1toze-1:yy=yy+1
79 printtab(2)l$(y)tab(8)f$(y)tab(26)k$(y):ifyy/20=int(yy/20)thengosub305:print"{clr}"
80 next:printtab(8)"{down}freie bloecke:"tab(26)"{rvon}"l$(ze):gosub305:return
81 rem ******************************
82 rem *     bam alphabetisch       *
83 rem ******************************
84 dimpn$(224),sp(29),se(29):open15,gn%,15,"i"
85 nn=0:sn=0:so=1:sp%=18:se%=1
86 ur%=1:gosub299:ifenthenclose15:return
87 open2,gn%,2,"#":gosub299:ifenthenclose15:goto46
88 print"{clr}"
89 print#15,"u1";2;0;sp%;se%:sp(sn)=sp%:se(sn)=se%
90 get#2,eg$:ifeg$=""theneg$=chr$(0)
91 sp%=asc(eg$)
92 get#2,eg$:ifeg$=""theneg$=chr$(0)
93 se%=asc(eg$):pz=2
94 print#15,"b-p";2;pz:nn=nn+1
95 fori=1to30:get#2,eg$:ifeg$=""theneg$=chr$(0)
96 pn$(nn)=pn$(nn)+eg$:nexti
97 ifasc(left$(pn$(nn),1))=0thenpn$="":lo=lo+1:goto101
98 fori=19to5step-1:ifmid$(pn$(nn),i,1)<>chr$(160)theni=5:goto100
99 pn$(nn)=left$(pn$(nn),i-1)+chr$(32)+right$(pn$(nn),30-i)
100 nexti:printmid$(pn$(nn),4,16)
101 ifpz-226thenpz=pz+32:goto94
102 ifsp%thenpz=2:sn=sn+1:goto89
103 iflo=0then108
104 n$="":forj=1to30:n$=n$+chr$(0):nextj
105 forj=1tolo
106 pn$(nn+j)=n$
107 nextj
108 print"{down}{down}{down}files werden sortiert{$a0}!":print
109 forj=1tonn-1:fori=j+1tonn:ifmid$(pn$(i),4,16)>mid$(pn$(j),4,16)then111
110 n$=pn$(i):pn$(i)=pn$(j):pn$(j)=n$:so=0
111 nexti,j:forj=1tonn:printmid$(pn$(j),4,16):fori=19to5step-1
112 ifmid$(pn$(j),i,1)<>chr$(32)theni=5:goto114
113 pn$(j)=left$(pn$(j),i-1)+chr$(160)+right$(pn$(j),30-i)
114 nexti,j:ifsothenclose2:close15:return
115 pn%=1:forj=0tosn:print#15,"b-p";2;0:print#2,chr$(sp(j+1));chr$(se(j+1))
116 pz=2:fori=1to8:print#15,"b-p";2;pz:print#2,pn$(pn%);:pn%=pn%+1:pz=pz+32
117 nexti:print#15,"u2";2;0;sp(j);se(j):nextj:close2:close15:return
118 rem ******************************
119 rem *      k o p i e r e n       *
120 rem ******************************
121 print"{clr}{down}{down}{down}{down}"tab(5)"k o p i e r e n"
122 print"{down}{down}{down}welches file soll kopiert werden?"
123 input"{down}alter name";an$
124 input"{down}neuer name";nn$
125 close1:open1,gn%,15,"c:"+nn$+"="+an$:gosub298:ifenthen46
126 return
127 rem ******************************
128 rem *    u m b e n e n n e n     *
129 rem ******************************
130 print"{clr}{down}{down}{down}"tab(5)"u m b e n e n n e n"
131 print"{down}{down}{down}1  =  ein file umbenennen":print"{down}{down}2  =  alle files umbenennen"
132 print"{down}{down}bitte waehlen !"
133 gety$:ify$<"1"ory$>"2"then133
134 ify$="2"then139
135 input"{down}{down}{down}alter name";an$
136 input"{down}neuer name";nn$
137 close1:open1,gn%,15,"r:"+nn$+"="+an$:gosub298:ifenthen46
138 return
139 gosub309
140 print"{clr}":fory=1toze-1:print"neuer name   "f$(y):print"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";:inputnn$
141 ifnn$=f$(y)then144
142 close1:open1,gn%,15,"r:"+nn$+"="+f$(y):gosub298
143 ifenthenprint"{down}    "en;en$;ne;ee:gosub305
144 next:return
145 rem ******************************
146 rem *      l o e s c h e n       *
147 rem ******************************
148 print"{clr}{down}{down}{down}"tab(5)"l o e s c h e n"
149 input"{down}{down}name des zu loeschenden files";na$
150 print"{down}{down}sind sie sicher, dass {rvon}"na$:print"geloescht werden soll ?"
151 gety$:ify$=""then151
152 ify$<>"j"thenclr:goto10
153 close1:open1,gn%,15,"s0:"+na$:gosub298:ifen$<>"files scratched"then46
154 ifne=0thenprint"{down}{down}kein file {rvon}"na$"{rvof} gefunden !":gosub305:return
155 print"{down}{down}    "ne"file(s) geloescht":gosub305:return
156 rem ******************************
157 rem *  r e g e n e r i e r e n   *
158 rem ******************************
159 gosub206:re%=0:print"{clr}"tab(5)"r e g e n e r i e r e n"
160 sp%=1:tr%=di%:open15,8,15,"i0
161 open8,8,2,"#2":fi%=0
162 print#15,"u1:"2;0;tr%;sp%:gosub204
163 fori=0to1:get#8,a$:gosub201:p%(i)=asc(a$):next:a=2:gosub203
164 get#8,a$:gosub201:a=asc(a$)and7
165 h$="":fori=0to1:get#8,a$:gosub201:l%(i)=asc(a$):next
166 fori=3to18:get#8,a$:h$=h$+a$:next:
167 ifh$=""then169
168 print ki$(a);" ";co$;h$;tab(11)co$;;l%(0);l%(1):ifa=0thengoto185
169 fi%=fi%+1:iffi%<8thena=fi%*32+2:gosub203:goto164
170 ifp%(0)=0then172
171 tr%=p%(0):sp%=p%(1):fi%=0:goto162
172 close8:ifre%then58
173 gosub204:close15:return
174 print#15,"u1:"2;0;l%(0);l%(1):return
175 d%=2:print"{down}spur, sektor";
176 gosub174:fori=0to1:get#8,a$:gosub201:z%(i)=asc(a$)
177 printz%(i)"{left} ";:next:print:print"{up}spur, sektor";
178 ifz%(0)=0thenprint:return
179 print#15,"b-f"0;z%(0);z%(1):l%(0)=z%(0):l%(1)=z%(1):z%(d%)=z%(0)
180 z%(d%+1)=z%(1):d%=d%+2
181 ifds=0then176
182 print:print"{rvon}das file wurde bereits ueberschrieben{rvof}!":x%=not(x%):a=fi%*32+2
183 fori=2tod%-4step2:print#15,"b-f:"0;z%(i);z%(i+1):next
184 l%(0)=tr%:l%(1)=sp%:gosub174:goto203
185 print"zurueckholen? (j/n){$a0}{$a0}{$a0}{$a0}
186 get a$:if a$="" then 186
187 if a$<>"j"then169
188 x%=0:print"{down}bloecke wiederbelegen...":z%(0)=l%(0):gosub175:ifx%then169
189 print"{down}{rvon}p{rvof}rogramm, {rvon}s{rvof}equenielles, {rvon}u{rvof}ser,"
190 print"oder {rvon}r{rvof}elatives file ?"
191 get ja$:ifja$<>"p"andja$<>"s"andja$<>"u"andja$<>"r"then191
192 print:ifja$="p"thenki%=130:goto196
193 ifja$="u"thenki%=131:goto196
194 ifja$="r"thenki%=132:goto196
195 ki%=129
196 print"file zurueckholen..."
197 l%(0)=tr%:l%(1)=sp%:gosub174
198 a=fi%*32+2:gosub203:print#8,chr$(ki%);
199 bl%=((d%-2)/2)+1:print"{down}"bl%"bloecke ";
200 print#15,"u2:"2;0;tr%;sp%:print"wiederhergestellt !{down}":re%=1:goto169
201 ifa$=""thena$=chr$(0)
202 return
203 print#15,"b-p:"2;a
204 input#15,en%,em$,et%,es%:ifen%=0thenreturn
205 goto46
206 dimp%(1),l%(1),z%(300),ki$(4):co$=chr$(34)
207 fori=0to4:readki$(i):next:di%=18:return
208 data"{rvon}del{rvof}","seq","prg","usr","rel"
209 rem ******************************
210 rem *     diskname aendern       *
211 rem ******************************
212 open15,gn%,15:nr=0:open1,gn%,3,"#":print#15,"u1:3"nr",18,0"
213 print#15,"b-p:3,144":d$="":forl=1to16:get#1,a$:d$=d$+a$:next
214 print"{clr}{down}{down}{down}{down}{down}alter disk-name: {rvon}"d$
215 na$="disk-name":print"{down}{down}neuer disk-name";:inputna$
216 na$=left$(na$+"                 ",16)
217 print#15,"b-p:3,144":print#1,na$;:print#15,"u2:3"nr",18,0":close1:close15:return
218 rem ******************************
219 rem *     disk - id aendern      *
220 rem ******************************
221 dv=0:open15,gn%,15:open1,gn%,3,"#":print#15,"u1:3"dv",18,0"
222 print#15,"b-p:3,162":get#1,a$,b$,c$,d$,e$:print"{clr}{down}alter disk-id: {rvon}"a$;b$;c$;
223 printd$;e$:input"{down}neuer disk-id";i$
224 iflen(i$)<3theni$=i$+" ":goto224
225 i$=left$(i$+"2a",5)
226 print#15,"b-p:3,162":print#1,i$;:print#15,"u2:3"dv",18,0
227 gosub45:return
228 rem *****************************
229 rem *geraetenummer disk aendern *
230 rem *****************************
231 poke59468,12:print"{clr}{down}{down}{down}{down}{down}  g e r a e t e n u m m e r   aendern"
232 print"{down}{down}{down}bitte alle floppys ausschalten ausser"
233 print"der, deren nummer geaendert werden soll!"
234 print"{down}alte geraetenummer  8{left}{left}{left}";
235 inputod:ifod<8orod>15then234
236 print"{down}neue geraetenummer  9{left}{left}{left}";
237 inputnd:ifnd<8ornd>15then236
238 gosub239:gosub256:return
239 close15:open15,od,15
240 print#15,"m-r"chr$(255)chr$(255):get#15,c$:c=asc(c$+chr$(0))
241 ifstthen259
242 ifc=254thenmt=119
243 ifc=226thenmt=50
244 ifc=213thenmt=12
245 ifc=242thenmt=12
246 ifc=198then248
247 return
248 print#15,"m-r"chr$(234)chr$(16):get#15,zb$:zb=asc(zb$+chr$(0))
249 ifzb=0thenmt=12
250 ifzb=1then252
251 ifstthen259
252 print#15,"m-r"chr$(172)chr$(16):get#15,zc$:zc=asc(zc$+chr$(0))
253 ifzc=1thenmt=12
254 ifzc=2thenmt=12
255 return
256 close15:open15,od,15
257 print#15,"m-w"chr$(mt)chr$(0)chr$(2)chr$(nd+32)chr$(nd+64)
258 return
259 print"{down}{down} fehler am geraet !":gosub305:return
260 rem *****************************
261 rem *    c h e c k   d i s k    *
262 rem *****************************
263 dimt(100):dims(100)
264 print"{clr}{down}{down}"tab(8)"c h e c k   d i s k{down}{down}{down}"
265 gosub59:open15,gn%,15:n%=rnd(ti)*255
266 a$="":fori=1to255:a$=a$+chr$(255and(i+n%)):next
267 ur%=1:gosub299:ifenthenclose15:goto46
268 open2,gn%,2,"#"
269 print:print#2,a$;
270 t=1:s=0
271 print#15,"b-a:0"t;s
272 input#15,en,em$,et,es
273 ifen=0then276
274 ifet=0then284
275 print#15,"b-a:0"et;es:t=et:s=es
276 print#15,"u2:2,0"t;s
277 nb=nb+1:printtab(8)"getestete bloecke:"nb
278 printtab(8)"{down} spur     {left}{left}{left}{left}"t;" sektor    {left}{left}{left}{left}"s"{up}{up}{up}"
279 input#15,en,em$,es,et
280 ifen=0then271
281 t(j)=t:s(j)=s:j=j+1
282 print"{down}{down}{down}{down}{down}fehlerhafter block:",t;s"{up}{up}{up}{up}{up}{up}"
283 goto271
284 gosub45
285 gosub299:ifenthenclose15:close2:goto46
286 close2:close15
287 ifj=0thenprint"{down}{down}{down}{rght}{rght}{rght}keine fehlerhaften bloecke !":return
288 open2,gn%,2,"#"
289 print"{down}{down}fehlerbloecke","spur","sektor"
290 fori=0toj-1
291 print#15,"b-a:0"t(i);s(i)
292 print,,t(i),s(i)
293 next
294 print"{down}"j"fehlerbloecke wurden festgestellt":close15:close2:gosub305:return
295 rem *****************************
296 rem * fehlerkanal ueberpruefen  *
297 rem *****************************
298 close15:open15,gn%,15
299 input#15,en,en$,ne,ee:ifur%thenreturn
300 close15
301 return
302 rem *****************************
303 rem *    tastendruck abwarten   *
304 rem *****************************
305 printtab(5)"{down}weiter  -->  taste druecken !":poke198,0:wait198,1:poke198,0:return
306 rem *****************************
307 rem *     directory lesen       *
308 rem *****************************
309 print"{clr}{down}{down}{down}{down}{down}"tab(5)"d i r e c t o r y   l e s e n":printtab(5)"{down}{down}{down}{down}{down}moment bitte !"
310 diml$(140),k$(140),f$(140)
311 open1,gn%,0,"$0":open15,gn%,15:ur%=1:gosub299:ifenthen46
312 get#1,a$,b$:ze=-1
313 ze=ze+1:get#1,a$,b$
314 get#1,a$,b$:c=0
315 ifa$<>""thenc=asc(a$)
316 ifb$<>""thenc=c+asc(b$)*256
317 l$(ze)=right$("   "+mid$(str$(c),2),3)
318 get#1,b$:ifst<>0thenfb$=right$("   "+l$,3):goto327
319 ifb$<>chr$(34)then 318
320 f$(ze)=""
321 get#1,b$:ifb$<>chr$(34)thenf$(ze)=f$(ze)+b$:goto321
322 get#1,b$:ifb$=chr$(32)then322
323 c$=""
324 c$=c$+b$:get#1,b$:ifb$<>""then324
325 k$(ze)=left$(c$,3):ifze=0thenid$=left$(c$,5)
326 ifst=0then313
327 close1:close15:return
Listing 1. »Disketten-Organisation«
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →