Disksorter in Vollendung
Dieses Verwaltungs- und Sortierprogramm für Disketten läßt keine Wünsche offen. Es macht aus Ihrem Diskettendschungel eine übersichtliche Sache. So können Sie sämtliche Einträge entweder alphabetisch oder nach ID ordnen und sortieren. Auf Wunsch werden doppelte Einträge ausgesondert. Wenn Sie Ihre eigene Liste mit einer anderen Liste vergleichen wollen, wird registriert, welche Programme in Ihrer Liste nicht vorhanden sind. Aber das ist noch längst nicht alles.
In diesem Heft ist die Basic-Version abgedruckt. Das bedeutet, daß die Sortierroutine etwas langsam arbeitet. Auf der ebenfalls erhältlichen Diskette zum Heft finden Sie eine compilierte Version, bei der auch die Sortierroutine in Maschinensprache geschrieben ist. Diese Version stellt wohl das optimalste dar. Doch nun zu den Funktionen des Programms.
Anleitung
In den Speicher Ihres Commodore C 64 können zirka 850 Programmdaten gespeichert werden. Ein Datensatz besteht aus dem Programmnamen, der ID-Nummer und der Anzahl der belegten Blocks auf Diskette.
Achtung: Alle Eingaben, die nicht mit J/N beantwortet werden können, müssen mit RETURN abgeschlossen werden.
F1 : Setzt den Datenzähler auf Null, das Erstellen der Liste beginnt. Daten werden von Diskette eingelesen. Sie können wählen, ob Sie alle Daten einlesen wollen, oder einzelne Daten in die Liste von Diskette aufnehmen möchten. Falls Sie mehr als eine Diskette einlesen wollen, die Anfrage des Computers mit »J« beantworten, sonst erfolgt eine Rückkehr in das Hauptmenü. Wollen Sie in diesem Fall zusätzliche Daten aufnehmen, ist die Funktion F3 zu wählen.
F3 : F1 liest Daten zusätzlich zu vorhandenen Daten ein. Mit F3 kann ein schon vorhandenes Datenfile von Diskette zugeladen werden.
Mit F5 können alle Daten einer ID-Nummer von einer in den Computer eingelesenen Directory gelöscht werden.
Mit F7 kann der gerade im Computer befindliche Standard-Druckkopf abgespeichert werden (automatisch unter Standardkopf). Der Standardkopf wird sofort nach dem Laden des Programms eingelesen und dient dazu, Name, Adresse, Telefonnummer (oder andere Daten) in Sperrschrift über die Liste zu drucken.
F5 erlaubt das Editieren von Daten. Daten können gelöscht, verändert, zusätzlich eingefügt und direkt auf den Drucker ausgegeben werden. Zusätzlich besteht die Möglichkeit in diesem Modus, aus einer Programmliste eine Preisliste zu machen.
F7 sortiert alle Daten alphabetisch oder nach ID-Nummer. Danach können doppelte Daten aussortiert werden, Eingabe der Anzahl zu berücksichtigender Zeichen von links.
F2 speichert die Daten unter dem eingegebenen Filenamen ab. Klammeraffe kann verwendet werden.
F4 liest ein gespeichertes Datenfile in den Rechner ein, der Joker ist erlaubt.
F6 gibt die Daten auf den Drucker aus. Entweder alle Daten in drei Spalten, oder als Liste, dann kann als ID-Code eine ID-Nummer eingegeben werden. »Directory wird ausgedruckt« auch mit Joker, dann werden zum Beispiel alle Daten deren ID-Nummer mit M beginnt nach Eingabe von »M*« ausgedruckt.
F8 gibt die Daten auf den Bildschirm aus.
£ Farbwechsel von Bildschirm und Schrift.
& alle Diskettenoperationen sind möglich.
./. Spezielle Listen können erstellt werden nach dem ersten Zeichen der ID-Nummer (zum Beispiel nach Eingabe von M werden alle Daten deren ID-Nummer mit M beginnt auf ein Datenfile geschrieben.
$ Zeigt die Directory einer Diskette auf dem Bildschirm.
! Erlaubt das Aussortieren fremder Listen wenn die eigene Liste in den Computer geladen wurde. Es werden alle Daten, die in der fremden Liste sind, mit den eigenen nach Kriterium (Anzahl Zeichen von links) durchsucht. Ein in der eigenen Liste nicht vorhandener Datensatz wird dann auf ein Differenzfile abgelegt.
(B. Winkler / gk)
Bild 1. Nach dem Starten des Programms wird das Hauptmenü erstellt. Von hier aus sind sämtliche Funktionen anwählbar.
Bild 2. Diese Möglichkeiten haben Sie, wenn vom Hauptmenü (siehe Bild 1) »F5 Liste editieren« gewählt wurde.
Bild 3. Einige Parameter lassen sich bei einem Ausdruck selber bestimmen. So können Sie nicht nur eine Programmliste drucken, sondern auch eine Preisliste. Sie bestimmen, wieviel Zeilen pro Seite und ob der Standardkopf mit ausgedruckt werden soll.
Bild 4. Ein kleines Beispiel einer Programmliste. Hier sind lediglich zwei Disketteninhalte in unsortierter Form zu sehen. Der Kopf kann natürlich weggelassen oder auch geändert werden.
100 rem ***********************
110 rem * *
120 rem * programm disksorter *
130 rem * *
140 rem * bernhard winkler *
150 rem * *
160 rem * giessenerstr.42 *
170 rem * *
180 rem * 5000 koeln 91 *
190 rem * *
200 rem ***********************
210 rem
220 rem
230 print"{clr}{down}{wht}":poke 53280,0:poke 53281,0
240 print"QQ QQQ QQQ Q Q QQQ QQQ QQQ QQQ QQQ QQQ"
250 print"Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q"
260 print"Q Q Q QQQ QQ QQQ Q Q QQ Q QQ QQ "
270 print"Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q"
280 print"QQ QQQ QQQ Q Q QQQ QQQ Q Q Q QQQ Q Q"
290 print"{down}{down}{down}{down}{rght}{rght}bitte taste druecken!":gosub 11000
300 rem *** variablen-definition ***
310 rem
320 s$="{down}{rght}{rght}{rght}{rght}{rght}":poke 53280,0:poke 53281,0:print"{grn}"
340 bf$="blocks free":ez$=" element":ex$=" nicht"
350 v$="{clr}{down}{down}{rght}{rght}{rvon} ":m$="{down}{down}{rght}{rght}{rght}":x$="{down}{down}{rght}{rght}{rvon} ":n$="{down}{rght}{rvon} ":zm$="{rvon} _ {rvof} {rvon} zum menue "
360 fi$="standardkopf"
370 rem
380 rem *** standarfkof einlesen ***
390 rem
400 open 7,8,7,fi$+",s,r"
410 input#7,bn$,ba$,bw$,bt$:close 7:print x$;"datum ?";:gosub 18000:da$=k$
420 dim b$(850),ff$(200):open 3,8,15
430 rem
440 rem *** menue ***
450 n$="{down}{rght}{rvon} "
460 zk$=" "
470 print n$;"{clr}{rght} (c)1983 {rvof} by b.winkler tel(0221)881373"
480 print n$;"f1 {rvof} daten per disk einlesen"
490 print n$;"f3 {rvof} daten erweitern / loeschen "
500 print n$;"f5 {rvof} liste editieren"
510 print n$;"f7 {rvof} liste sortieren"
520 print n$;"f2 {rvof} daten abspeichern"
530 print n$;"f4 {rvof} daten einlesen {rvon} clr {rvof} quit"
540 print n$;"f6 {rvof} liste drucken {rvon} % {rvof} spez.liste"
550 print n$;"f8 {rvof} liste auf screen {rvon} & {rvof} disk oper."
560 print n$;"* {rvof} ";bf$;" {rvon} $ {rvof} directory """
570 print n$;"\ {rvof} andere bildschirm farbe"
580 print n$;"! {rvof} aussortieren fremder liste "
590 gosub 11000
600 if a$=chr$(133)then i=0:bb=b:b=0:q=0:gosub 1000:if a$="_"then b=bb
610 if a$=chr$(138)then gosub 6000
620 if a$=chr$(37)then gosub 8200
630 if a$=chr$(135)then open 4,4:gosub 7000:close 4
640 if a$=chr$(38)then gosub 6300
650 if a$=chr$(33)then gosub 14000
660 if a$=chr$(36)then b=b+2:i=b:h=1:gt=1:g=0:gosub 1050:h=0:b=b-2:gt=0
670 if a$=chr$(136)then gosub 4000
680 if a$=chr$(147)then sys 64738
690 if a$=chr$(137)then gosub 5000
700 if a$=chr$(134)then gosub 9000
710 if a$=chr$(139)then open 4,4:gosub 3000:close 4
720 if a$=chr$(140)then gosub 8000
730 if a$=chr$(92)then gosub 2000
740 if a$=chr$(42)then bb=b:gosub 12000:b=bb
750 goto 450
760 rem
1000 rem
1010 rem *** diskleser ***
1020 rem
1030 g=0:print v$;"disk einlegen : daten komplett ":print x$;"oder einzeln ";
1035 print"einlesen ? (k/e)":print x$;zm$:gosub 10000:if a$="e"then g=1
1040 if a$="_"then return
1050 print v$;"ich lese disk ":print x$;
1060 open 1,8,0,"$0" :gb=1
1070 gosub 16000:print" {rvon}"k$"{down}{down}":if t<>0 then gosub 10000:close 1:return
1080 get#1,a$,f$
1090 get#1,a$,f$:b$(i+1)=""
1100 get#1,a$,f$
1110 c=0:l$=" "
1120 if a$<>""then c=asc(a$)
1130 if f$<>""then c=c+asc(f$)*256
1140 q$=mid$(str$(c),2):l$=left$(q$+l$,3)
1150 get#1,f$:if f$=""then print"{down}{rght}{rght}{rvon}";l$;" ";bf$:goto 1295
1160 if f$<>chr$(34)then 1150
1170 get#1,f$:if f$<>chr$(34)then b$(i+q)=b$(i+q)+f$:goto 1170
1180 if q=1 then b$(i+1)=""
1190 get#1,f$:if f$=chr$(32)then 1190
1200 c$=""
1210 c$=c$+f$:get#1,f$:if f$<>""then 1210
1220 if gb=1 then gb$=c$:gb=0
1230 b$(i+q)=left$(b$(i+q)+zk$,17)+left$(gb$,3)+right$(zk$+q$,3)
1240 print"{rght}{rght}";b$(i+q);"{rght}{rght}{rght}";"{rvon} ";:left$(c$,5);:if g=0 and gt=0 then print
1250 if gt=1 then gt=0:b$(i)="":print:goto 1090
1260 if q=1 then q=0:b$(i+1)=""
1270 if g=1 and gt=0 and i>0 then print"{rvof} j/n{left}{left}{left}";:gosub 11000
1280 i=i+1:if g=1 then print"{rvof} ja"
1285 if i+q+1=850 then print x$;"speicher ist voll":print x$;zm$:close 1:gosub 11000:return
1290 goto 1090
1295 close 1:if h=1 then gosub 10000:return
1300 print x$;"noch eine disk (j/n)"
1310 qw$=str$(i-1)
1320 print x$;"bisher wurden ";qw$;" daten gelesen {down}{down}{down}{down}"
1330 gosub 11000
1340 if a$="j"then gt=1:print v$;:goto 1060
1350 if a$<>"n"then 1330
1360 b=i-1:close 1
1370 a$="":t=0
1380 return
2000 rem
2010 rem *** farbwechsel ***
2020 rem
2030 i=0:f=0:j=0
2040 print v$;"f1{rvof} {rvon}farbwechsel bildschirm"
2050 print x$;"f3{rvof} {rvon}farbwechsel hintergrund"
2060 print x$;"f5{rvof} {rvon}farbwechsel schrift"
2070 print x$;zm$
2080 gosub 11000
2090 if a$=chr$(133)then i=i+1:poke 53280,i
2100 if a$=chr$(134)then j=j+1:poke 53281,j
2110 if a$=chr$(135)then f=f+1:poke 646,f
2120 ifa$="_"then return
2130 goto 2040
3000 rem
3010 rem *** drucker ausgabe ***
3020 zk$=left$(zk$+zk$,33)
3030 j$="{rvon} ja ":n$="{rvon}nein":f1$=n$:f3$=j$:f5$=j$:f7$=n$:f2$=n$:z$="{rght}{rght}{rght}{rght}{rght}"
3040 y$="{down}"+z$:f4$=n$:dr=1
3050 rem
3060 t$="{rght}{rvon} "
3070 st$="":an$="bitte funktion waehlen"
3075 print"{clr}{rght}{rght}{rght}{rght}{rght}{rvon} drucker ausgabe {down}"
3080 print f1$;t$;"f1 {rvof} druck-beginn {down}"
3090 print f3$;t$;"f3 {rvof} stand.kopf mit drucken {down}"
3100 print f5$;t$;"f5 {rvof} programm/liste drucken {down}"
3110 print f7$;t$;"f7 {rvof} preis-liste drucken {down}"
3120 print f2$;t$;"f2 {rvof} liste nach kriterium {down}"
3130 print f4$;t$;"f4 {rvof} standardkopf aendern "
3140 print x$;"{left}{left}";zm$
3150 print"{down}{down}"
3160 print" U{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}I
3170 print" B B
3180 print" {CBM-Q}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-W}
3190 print" B B
3200 print" J{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}K
3210 print"{home}";:for j=1 to 20:print"{down}";:next:print z$;;st$
3220 print y$;an$
3230 if c=1 then c=0:gosub 3450:f4$=n$:goto 3070
3240 if f1$=j$then f1$=n$:gosub 3380:goto 3070
3250 gosub 11000
3260 if a$=chr$(133)and f1$=n$then f1$=j$:goto 3070
3270 if a$=chr$(134)and f3$=j$then f3$=n$:goto 3070
3280 if a$=chr$(134)and f3$=n$then f3$=j$:goto 3070
3290 if a$=chr$(135)and f5$=n$then f5$=j$:f2$=n$:f7$=n$:goto 3070
3300 if a$=chr$(135)and f5$=j$then f5$=n$:goto 3070
3310 if a$=chr$(136)and f7$=j$then f7$=n$:goto 3070
3320 if a$=chr$(136)and f7$=n$then f7$=j$:f2$=n$:f5$=n$:goto 3070
3330 if a$=chr$(137)and f2$=n$then f2$=j$:f7$=n$:f5$=n$:goto 3070
3340 if a$=chr$(137)and f2$=j$then f2$=n$:goto 3070
3350 if a$=chr$(95)then dr=0:return
3360 if a$=chr$(138)then f4$=j$:c=1:goto 3070
3370 if a$<chr$(95)or a$>chr$(137)then 3250
3380 print"{home}":for j=1 to 19:print"{down}";:next:print z$;zk$:print"{up}";z$;"ok ? (j/n)"
3385 print y$;zk$:gosub 11000:if a$<>"j"then return
3390 print"{home}":for j=1 to 19:print"{down}";:next:print z$;"wieviel zeilen pro seite ?>=15"
3400 print y$;zk$:print"{up}{up}";y$;:gosub 18000:dz=val(k$):if dz<15 or dz>300 then 3390
3405 if f2$=n$and f5$=n$and f7$=n$then return
3410 if f3$=j$then 3530
3420 if f3$=n$then 3590
3430 if a$="_"then return
3440 return
3450 st$="datum ?":gosub 3510:da$=k$
3460 st$="name ?":gosub 3510:bn$=k$
3470 st$="strasse,nr. ?":gosub 3510:ba$=k$
3480 st$="wohnort ?":gosub 3510:bw$=k$
3490 st$="telefon ?":gosub 3510:bt$=k$
3500 return
3510 print"{home}":for j=1 to 19:print"{down}";:next:print z$;st$
3515 print y$;zk$:print"{up}{up}";y$;:gosub 18000
3520 print"{home}":for j=1 to 19:print"{down}";:next:print z$;zk$:print y$;zk$:return
3530 zd=0:if f3$=j$then zd=15
3540 print#4,chr$(14)" ";bn$:print#4," ";ba$
3550 print#4," ";bw$:print#4," ";:bt$:print#4
3560 print#4," disketteninhalt vom ";da$
3570 print#4:print#4," programme:";b;chr$(15)
3580 print#4
3590 iff2$=j$then 3760
3595 iff7$=n$then 3610
3600 qs$="prg.name kb. preis ":goto 3620
3610 qs$="prg.name id bl. "
3620 zd$=" ":goto 3640
3640 dd=int(b/3)+1
3650 s=1
3660 b$(b+1)="":b$(b+2)="":b$(b+3)=""
3670 print#4,left$(" "+qs$+qs$+qs$,78)
3680 print#4," ";:for t=1 to 74:print#4,chr$(101);:next:print#4
3690 for t=1 to dd
3700 print#4," ";b$(s);" ";b$(s+dd);" ";b$(s+2*dd)
3710 zd=zd+1
3720 s=s+1:if zd=dz then zd=0:gosub 3740
3730 next:return
3740 print"{home}":for j=1 to 19:print"{down}";:next:print z$;
3750 print"druckerpapier justieren ? ":print y$;"taste druecken ";:gosub 11000:return
3760 f=2:print"{home}":for i=1 to 19:print"{down}";:next:print z$;zk$:print y$;zk$:print"{up}{up}{up}{up}"
3765 print z$;"id.code eingeben !":print y$;:gosub 18000
3770 if right$(k$,1)="*"then f=1
3780 k$=left$(k$+zk$,f)
3790 for i=1 to b:if zd=dz then zd=0:gosub 3740
3800 if mid$(b$(i),18,f)=k$then print#4," ";b$(i):zd=zd+1
3810 next:print#4
3820 return
4000 rem
4010 rem *** sortierroutine ***
4020 rem
4030 print v$;"sortier-routine laeuft!":b$(b+1)="zzzzzzzz":f=0
4035 print x$;"alphabetisch oder nach id.nr. ?"
4040 print x$;"(a/i)":print x$;zm$:gosub 11000:if a$="_"then return
4055 if a$="i"then f=1
4060 for c=1 to b
4070 j=c+1:print x$;"element {left}{left}{left}{left}";j-1;"{up}{up}{up}"
4080 for d=j to b
4090 if f=1 and righ$(b$(c),6)>right$(b$(d),6)then 4120
4100 if b$(c)>b$(d)then 4120
4110 goto 4130
4120 c$(0)=b$(c):b$(c)=b$(d):b$(d)=c$(0)
4130 next
4140 next
4150 print v$;"doppelte daten aussortieren (j/n) "
4160 gosub 11000
4170 if a$="j"then 4190
4180 return
4190 print v$;"es wird aussortiert ":j=1
4200 print x$;"wieviele zeichen beruecksichtigen ?":print x$;:gosub 18000
4210 ss=val(k$):if ss=0 or ss>25 then ss=25
4220 if left$(b$(j),ss)=left$(b$(j+1),ss)then 4270
4230 j=j+1
4240 if j<=b-1 then 4220
4250 for i=b+1 to b+10:b$(i)="":next
4260 return
4270 for i=j to b
4280 b$(i)=b$(i+1)
4290 next
4300 j=j-1:b=b-1:goto 4230
4310 return
5000 rem
5010 rem *** daten file speichern ***
5020 rem
5030 print v$;"daten werden gespeichert "
5040 gosub 17000:i=0:print x$;"sicher ? (j/n)":gosub 11000:if a$<>"j"then return
5050 open 2,8,2,fi$+",s,w"
5060 gosub 16000:print x$;k$:if t<>0 then close 2:gosub 10000:return
5070 print#2,b
5080 if g=1 then for i=1 to z:print#2,ff$(i):goto 5100
5090 for i=1 to b:print#2,b$(i)
5100 next
5110 close 2
5120 return
6000 rem
6010 rem *** daten-file einlesen ***
6020 rem
6030 print v$;"daten werden gelesen ":print x$;zm$
6040 gosub 17000:if k$="_"then return
6050 print x$;"daten file ";fi$" einlesen (j/n) "
6060 gosub 11000
6070 if a$<>"j"then return
6080 open 2,8,2,fi$+",s,r":print"{down}{down}{rght}{rght}{rght}";
6090 gosub 16000:print" {rvon}"k$"{down}{down}":if t<>0 then gosub 10000:close 2:return
6100 input#2,b
6110 for i=fj+1 to b+fj
6120 input#2,b$(i):next:close 2:b=b+fj:return
6300 print v$;"disk operation mode"
6310 print x$;"diskettenbefehle s,v,n,r,i "
6320 print x$;"befehl ?";:gosub 18000:fi$=k$:print x$;"ausfuehren (j/n) ?"
6325 gosub 11000
6330 if a$="_"then return
6340 if a$="j"then open15,8,15:print#15,fi$:close 15:gosub 16000:if t<>0 then print x$;k$:gosub 10000
6345 if t=0 then return
6350 print"{home}";x$:goto 6310
7000 rem
7010 rem *** editor ***
7020 rem
7030 poke 650,128
7040 print s$;"{clr}{rght}{rght}{rght}{rght}{rght}{rvon} @ {rvof} : element loeschen"
7050 print s$;"{rvon} \ {rvof} : element suchen"
7060 print s$;"{rvon} * {rvof} : element verbessern"
7070 print s$;"{rvon} _ {rvof} : ";right$(zm$,13)
7080 print s$;"{rvon} p {rvof} : element drucken "
7090 print s$;"{rvon} {rvof} : ein element vor"
7100 print s$;"{rvon} f1{rvof} : 20 elemente vor "
7110 print s$;"{rvon} f3{rvof} : 20 elemente zurueck"
7120 print s$;"{rvon} ^ {rvof} : ein element zurueck"
7130 print s$;"{rvon} $ {rvof} : dm-liste erstellen"
7135 print s$;"{rvon} + {rvof} : element einfuegen{down}{down} ":print
7140 for i=1 to b
7150 print"{up}{rght}{rght}{rght}";zk$;"{down}":print"{rght}{rght}{rght} ";b$(i)
7160 gosub 11000
7170 if b$(1)=""and b>1 then a$="@":i=1
7180 if a$="@"and b>1 then b$(i)=b$(b):b=b-1:a$=""
7190 if a$=chr$(133)and i+20<b then i=i+20
7200 if a$=chr$(134)and i-20>0 then i=i-20
7210 if a$="*"then print"{up}{up}{rght}{rght}{rght}{rght}{rght}";"{rvon}korrekturelement":input"{rght}{rght}{rght}";b$(i)
7220 if a$="*"then print"{up}{up}";zk$:print:if b$(i)=""then b$(i)="zzzz"
7225 if a$="$"then gosub 7500:goto 7000
7230 if a$="_"then a$="":poke 650,0:return
7240 if a$="^"then i=i-2:if i<1 then i=b-1
7250 if a$="+"then b=b+1:print"{rvon}{up}{up}{rght}{rght}{rght}{rght}{rght}neues element":input"{rght}{rght}{rght}";b$(b):print"{up}{up}";zk$:print
7260 if a$="p"then print#4," ";b$(i)
7270 if a$="\"then print v$;"nach welchem element suchen ?":print x$;:gosub 18000:gosub 7310:goto 7000
7280 if left$(b$(b),4)="zzzz"and i>1 then b=b-1
7290 print"{up}{up}{up}{rght}{rght}{rght}";zk$:next:goto 7140
7300 return
7310 if k$=""then return
7320 f=0:if right$(k$,1)="*"then f=1
7330 q=len(k$)-f:q$=left$(k$,q):ez=0
7340 ee$=" kein weiteres":ey$=" vorhanden ":print
7350 for k=1 to b
7360 if left$(b$(k),q)=q$then ez=1:se=1:r=1
7370 if se=0 then next
7380 if se=1 then print"{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";b$(k):se=0:next
7390 if ez=0 then print"{rght}{rght}{down}{rvon}";ez$+ex$+ey$
7400 if ez=1 then print"{down}{down}":print"{rght}{rght}{rvon}";ee$+ez$+ey$:print"{rght}{rght}";ws$
7410 print x$;zm$:gosub 11000
7420 return
7500 print"{clr}{down}{down}{rght}{rght}{rvon} dm-listenerstelleung {rvof}{down}{down}":print"{down}{down}";x$;zm$:print"{home}{down}{down}{down}{down}{down}"
7510 for j=1 to b:print" ";:c$=left$(b$(j),17):print c$;
7520 f$=right$(zk$+str$(int(val(right$(b$(j),3))/4+.5)),2):print f$;
7530 print" 000{left}{left}{left}";:gosub 18000:if k$="_"then return
7540 b$(j)=c$+f$+" "+left$(k$+zk$,3)
7550 print"{up}";:next:return
8000 rem
8010 rem *** bildschirm-ausgabe ***
8020 rem
8030 print v$;"inhalt einer disk listen ":print x$;"oder alle disk daten listen (e/a) "
8040 gosub 11000
8050 :if a$="e"then 8120
8060 print v$;zm$;:print:z=1
8070 for i=1 to b:z=z+1
8080 print"{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";b$(i):if peek(631)=95 then poke198,0:return
8090 if z=23 then gosub 11000:z=1:if h=1 then return
8100 next:gosub 10000
8110 return
8120 print v$;"welche disk listen ":print x$;"id.nr eingeben ";:gosub 18000
8130 for i=1 to b:if k$=mid$(b$(i),18,2)then print"{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";b$(i)
8140 next
8150 gosub 10000
8160 print x$;"noch eine disk listen (j/n) ":gosub 11000:if a$="j"then 8120
8170 return
8200 rem
8210 rem *** listen nach id kriterium erstellen ***
8220 rem
8230 print v$;"listen nach id kriterium erstellen ":print x$;zm$
8240 print x$;"nach welchem kriterium suchen ?";:gosub 18000:f$=left$(k$,1)
8250 if f$="_"then return
8260 print x$;"datendiskette einlegen ":gosub 17000:fi$="@:"+fi$
8270 x=0:for i=1 to b:if mid$(b$(i),18,1)=f$then x=x+1
8280 next
8290 if x=0 then print x$;"kein element vorh.":gosub 10000:return
8300 open 1,8,1,fi$+",s,w":print#1,x
8310 gosub 16000:if t<>0 then gosub 10000:close 1:return
8320 for i=1 to b:if mid$(b$(i),18,1)=f$then print" ";b$(i):print#1,b$(i)
8330 next:close 1:return
9000 rem
9010 rem *** daten erweiter/loeschen ***
9020 rem
9030 print v$;"f1 {rvof} daten erweitern "
9040 print x$;"f3 {rvof} daten file zuladen
9050 print x$;"f5 {rvof} daten loeschen (id.nr.) "
9060 print x$;"f7 {rvof} standardkopf speichern "
9070 print x$;zm$
9080 gosub 11000
9090 if a$=chr$(95)then return
9100 if a$=chr$(133)then gt=1:i=b+1:goto 1000
9110 if a$=chr$(134)then fj=b:gosub 6000:fj=0:return
9120 if a$=chr$(135)then 9160
9130 if a$=chr$(136)then open 7,8,7,"@:standardkopf,s,w":print#7,bn$:print#7,ba$
9140 if a$=chr$(136)then print#7,bw$:print#7,bt$:close 7
9150 goto 9030
9160 print v$;"eingabe der zu loeschenden id nr. ? ":print x$;
9170 gosub 18000
9180 print x$;"soll ";k$;" geloscht werden (j/n) ? "
9190 gosub 11000:if a$<>"j"then return
9200 for i=1 to b
9210 if k$=mid$(b$(i),18,2)then gosub 9240
9220 next
9230 return
9240 for j=i to b:b$(j)=b$(j+1):next
9250 i=i-1:b=b-1:return
10000 print x$;"taste druecken ":t=0:gosub 11000:return
11000 get a$:if a$=""then 11000
11010 return
12000 rem
12010 rem *** blocks free routine ***
12020 rem
12030 print v$;bf$;" funktion"
12040 fi$="@:"+bf$:for i=1 to 200:ff$(i)="":next
12050 ff=1:k=2:i=2:br$="funktion ende"
12060 print x$;"bitte warten bis ";br$:ff$(1)=mid$(b$(1),18,2)
12070 ff$(i)=mid$(b$(k),18,2)
12080 for j=1 to i-1
12090 if ff$(i)=ff$(j)then 12120
12100 next
12110 i=i+1
12120 k=k+1:if k>b then 12140
12130 goto 12070
12140 z=i-1
12150 for c=1 to z-1
12160 j=c+1:print x$;"element {left}{left}{left}{left}";j-1;"{up}{up}{up}"
12170 for d=j to z
12180 if ff$(c)>ff$(d)then 12200
12190 goto 12210
12200 c$(0)=ff$(c):ff$(c)=ff$(d):ff$(d)=c$(0)
12210 next
12220 next
12230 print x$;"blocks werden addiert":bl$="{rvon}disk ":bm$="{rvon}"+bf$
12240 j=1
12250 for i=1 to b:if i=1 then gs=0
12260 if mid$(b$(i),18,2)=ff$(j)then gosub 12350
12270 next:ff$(j)=bf$+" disk "+ff$(j)+" "+right$(zk$+str$(664-gs),3):j=j+1
12280 if j<z+1 then 12250
12290 print x$;br$
12300 print x$,"drucker oder screen (d/s) ":gosub 11000:print
12310 if a$<>"s"and a$<>"d"then gosub 11000:goto 12320
12320 if a$="d"then 12380
12330 for i=1 to z:print"{rght}{rght}{rght}{rght}";ff$(i)
12340 gosub 11000:next:goto 12420
12350 g=0:g=val(right$(b$(i),3))
12360 gs=gs+g
12370 return
12380 print x$;"drucker einschalten ! "
12390 gosub 10000
12400 open 4,4
12410 for i=1 to z:print#4," ";ff$(i):next:print#4:close 4
12420 print v$;"daten auf disk speichern ? (j/n)":gosub 11000:if a$<>"j"then return
12430 print x$;"daten diskette einlegen "
12440 gosub 10000:open 2,8,2,fi$+",s,w":print#2,z
12450 for i=1 to z:print#2,ff$(i):next:close 2
12460 return
14000 rem
14010 rem *** aussortieren fremder listen ***
14020 rem
14030 if b<2 then return
14040 print v$;"aussortieren fremder listen":di$="@:differenz":li$="liste":x=1
14050 print x$;"mit welcher liste vergleichen ?":gosub 17000
14060 print x$;"wieviel zeichen vergleichen (1/20) ";:gosub 18000:sk=val(k$)
14070 if sk>25 then sk=25
14080 open 5,8,5,fi$+",s,r":gosub 16000:if t<>0 then 14100
14090 open 2,8,2,"@:liste"+",s,w":gosub 16000
14100 if t<>0 then close 5:close 2:print x$;k$:print x$,zm$:gosub 11000:return
14110 input#5,c
14120 for j=1 to c
14130 input#5,d$:print"{rght}{rght}{rght}{rght}{rght}";d$
14140 for i=1 to b
14150 if left$(d$,sk)=left$(b$(i),sk)then 14300
14160 next i
14170 print#2,d$:x=x+1
14180 next j
14190 close 5:close 2:x=x-1
14200 if x=0 then print"{clr}{down}{rvon} kein neues element gefunden":goto 10000
14210 open 7,8,7,di$+",s,w"
14220 print#7,x
14230 open 5,8,5,li$+",s,r"
14240 for i=1 to x:input#5,d$:print#7,d$:next
14250 close 7:close 5
14260 print v$;"das aussortieren ist beendet "
14270 print x$;"das datenfile < differenz > "
14280 print x$;"kann geladen erden "
14290 open 15,8,15,"s0:liste":close 15:gosub 16000:return
14300 if j=c then 14190
14310 next j
14320 return
15000 rem
15010 rem *** abfrage routinen ***
15020 rem
16000 input#3,t,k$,o,o:return
17000 print x$;"file name ";:f=1:gosub 18000:f=0:fi$=k$:return
18000 k$=""
18010 gosub 11000:if a$=chr$(13)then print:return
18020 if a$=chr$(20)and len(k$)<>0 then k$=left$(k$,len(k$)-1):print a$;
18030 if dr=1 and len(k$)=33 then 18010
18040 if f=1 and len(k$)=18 then 18010
18050 if a$>chr$(31)then k$=k$+a$:print a$;
18060 goto 18010