Floppy

ProDat — Dateiverwaltung mit Raffinessen

Das Besondere an »ProDat« ist, daß man die Eingabemaske wie bei den teuren kommerziellen Programmen selbst definieren kann. Außerdem ist »ProDat« durch verschiedene Maschinenprogramme besonders schnell und einfach zu bedienen.

Wenn man das Listing vollständig und fehlerfrei eingetippt hat, darf man erst mal aufatmen. Elf KByte Basic sind schließlich kein Honiglecken. Im Bereich von $0334 (820) bis $03cf (1020) stehen verschiedene Maschinenprogramme. Da dies aber der Kassettenpuffer ist, läßt sich »ProDat« nicht ohne weiteres für Datasette verwenden.

Die Daten werden von Maschinenroutinen geladen und gespeichert. Auch das Kopieren der Bildschirmmaske der aktuellen Datei in den Bildschirmspeicher geschieht in Maschinensprache. Da die INPUT-Routine des Betriebssystems geringfügig geändert wurde, bereitet bei der Maskenerstellung auch die Eingabe von Anführungszeichen, Doppelpunkten oder Kommata keinerlei Schwierigkeiten. Um bei der Verarbeitung der Daten der gefürchteten Garbage-Collection aus dem Weg zu gehen, wurde eine etwas geänderte Version des Stringvertauschers von Boris Schneider aus der 64’er, Ausgabe 1/85 verwendet. Für Interessierte zeigt Tabelle 1 eine dokumentierte Liste der wichtigsten im Programm verwendeten Variablen.

a%(x,y) Cursorposition für Maske
a1% Zeile für Datensatznummernanzeige
a2% Spalte für Datensatznummernanzeige
d, d$ Anzahl Felder je Datei
ds aktuelles Feld
df Anzahl Druckfelder
f Anzahl Felder je Datensatz
f1,f2,f3 Für Fehlermeldung
fe$(x) Feld
fl Flag für alles mögliche
n$,na$ Name der Datei
pz$(x) Druckzeile
ud Flag für unveränderte, geänderte oder nicht im Speicher stehende Datei
Tabelle 1. Die wichtigsten Variablen.

Hinweise zum Abtippen:

Manche Zeilen haben Überlänge, das heißt, sie sind länger als die vom Basic-Interpreter erlaubten 80 Zeichen. Diese Zeilen können Sie nur mit den im Anhang D des Commodore-Handbuchs vermerkten Abkürzungen der Basic-Befehle eingeben. Das gilt zum Beispiel für die Zeile 360. Leerzeichen vor und nach den einzelnen Basic-Befehlen dienen nur der Übersichtlichkeit und können beim Eintippen ersatzlos weggelassen werden.

Programmbeschreibung:

Menü 1, Hauptmenü

1 — Aufruf Menü 2
2 — Neue Datei definieren

Zuerst muß die Eingabemaske definiert werden. Wie das aussehen kann, zeigt Bild 1. Sie können frei mit den Cursor-Tasten auf dem Bildschirm umherwandern und Ihr persönliches Eingabeformular erstellen. Dabei sind alle Tasten und Zeichen erlaubt. (Vorsicht vor SHIFT-CLR!) Zahlen zum Beachten: Maximale Felderanzahl (in der Sprache der Dateiverwaltung wird jede Stelle in der Maske, an der Sie später eine Eingabe machen, als Feld bezeichnet): 1 500 pro Datei, 40 pro Datensatz (ein Datensatz ist eine mit Daten gefüllte Eingabemaske). Maximale Feldlänge: 80 Zeichen.

Wie das Beispiel Bild 1 zeigt, werden Felder mit Hochpfeilen markiert. Wird derabschließende Pfeil weggelassen, so nimmt das Programm hierfür die maximale Feldlänge von 80 Zeichen. Wird später bei der Eingabe der Schlußpfeil erreicht, so springt der Cursor automatisch zum nächsten Feld weiter. Die Pfeile selbst tauchen später nicht mit in der Eingabemaske auf (siehe Bild 2). Mit dem Pfeil nach links können Sie eine Datensatznummeranzeige programmieren. Das heißt, daß an dieser Stelle später die Nummer des Datensatzes innerhalb der Datei ausgedruckt wird. Weiterhin istwichtig, daß Sie die letzte Bildschirmzeile nichtverwenden dürfen. Ein Feld in dervorletzten Zeile darf also nur 40 Zeichen lang sein! Nachdem die Eingabemaske definiert ist, müssen noch die Druckparameter eingegeben werden (siehe nächster Menüpunkt).
3 — Druckparameter festlegen/ändern
Nun müssen Sie festlegen, welche Felder in welcher Reihenfolge später auf dem Drucker ausgedruckt werden sollen. Ein Feld wird mit der »eckigen Klammer auf« markiert (siehe Bild 3). Sie können natürlich auch erklärenden Text oder ähnliches ausdrucken lassen. Alles, was zwischen den »eckigen Klammern zu«steht, wird später im Breitschrift-Modus gedruckt. Durch Änderung der Zeilen 2 570 und 2 580 hat man auch andere Möglichkeiten, zum Beispiel Kursiv-Druck oder dergleichen. Es können maximal 60 Druckzeilen definiert werden. Zu beachten ist, daß ein angesprochenes Feld auch wirklich vorhanden ist, da dies nicht überprüft wird. Sie können ein Feld auch mehrmals ausgeben lassen, das liegt ganz bei Ihnen. Eine Druckzeile kann maximal 80 Zeichen fassen, wodurch beispielsweise auch kleinere Formbriefe möglich sind. 4 — Directory laden 5 — File löschen
6 — Validate
7 — Disk formatieren
8 — File umbenennen

Die Menüpunkte 4 bis 8 erklären sich von selbst, beziehungsweise sind im Floppy-Handbuch genauer erklärt.

Bild 1. So definiert man eine Eingabemaske.
Bild 2. Beim Arbeiten mit der Datei sieht die Maske so aus.
Bild 3. So könnten die Druckparameter für unsere Beispielmaske aussehen.
Bild 4. Ein ausgefüllter Datensatz.

Menü 2, Datei verwalten

1 — Datei laden

Sollte eine erweiterte oder geänderte Datei noch im Speicher stehen, so wird sicherheitshalber erst gefragt, ob Sie nicht erst speichern möchten. Die vorhandene Datei wird sonst gelöscht.
2 — Datei pflegen/ändern/ergänzen

Nach Wahl dieses Punktes sind Sie zunächst im Anzeigemodus, der wie Bild 4 aussehen könnte. In diesem Modus sind einige Tasten mit Sonderfunktionen belegt. (Siehe Tabellen 2 und 3)
3 — Datei abspeichern
4 — Datei sortieren

Es besteht jetzt die Möglichkeit, entweder alphabetisch nach einem bestimmten Feld zu sortieren, oder man läßt sich bestimmte Daten heraussuchen, zum Beispiel alle Adressen eines bestimmten Postleitzahlbereichs. Die kann man auf dem Drucker ausgeben lassen, oder speichert sie gleich in einer neuen Datei ab.
5 — Alle angegebenen Felder der Datei können aufaddiert werden, zum Beispiel bei einer Haushaltsbuchhaltung alle Ausgaben für Essen, etc.
6 — Aufruf Menü 3

Menü 3, Druckermenü

1 — Alle Datensätze mit den vorher definierten Druckparametern auf dem Drucker ausgeben.
2 — Gesamte Datei ausdrucken.
3 — Entspricht Punkt 1, aber nur in Verbindung mit der Sortierroutine.
4 — Entspricht Punkt 2, aber nur in Verbindung mit der Sortierroutine.

Allgemeine Hinweise:

Sollte der Cursor einmal an einer Stelle stehenbleiben, und auch keine Taste mehr annehmen, so ist das kein Grund zur Panik. Der Computer braucht ab einer gewissen Datenmenge einfach Zeit, um das Eingegebene sinnvoll im Speicher unterzubringen. Wenn Sie »ProDat« als Textverarbeitungsprogramm verwenden wollen, so definieren Sie die Eingabefelder einfach über den gesamten Bildschirm und lassen die Datensatz-Nummeranzeige als zum Beispiel Seitennummer des Textes arbeiten.

(Wolfgang Hahn/tr)
f1 Ein Feld zurück
f3 Feld löschen
f5 Anzeige »Bytes free«
f7 Eingabe beenden
Tabelle 2. Tastenbelegung im Anzeigemodus.
+ Vorwärtsblättern
- Rückwärtsblättern
l Löschen angezeigter Datensatz
s Suchen
f1 Angezeigten Datensatz formatiert ausgeben
f3 Hardcopy erstellen
e Datei erweitern (Eingabemodus)
a Datensatz ändern
t Beenden
Tabelle 3. Tastenbelegung im Eingabemodus.
10 rem ************************
20 rem *                      *
30 rem * p  r  o  d  a  t     *
40 rem *                      *
50 rem * autor: wolfgang hahn *
60 rem * an der stadtmauer 12 *
70 rem * 8687 weissenstadt    *
80 rem * telefon: 09253/1744  *
90 rem *                      *
100 rem ************************
110 :
120 printchr$(14):gosub2980:print"{down}{down}{down}{down}{down}{down}4 sek.":gosub3820
130 poke90,0:poke91,192:poke88,0:poke89,192:poke780,0:poke781,160:sys820
140 poke90,0:poke91,0:poke88,0:poke89,0:poke780,0:poke781,224:sys820:poke1,53
150 s=44136:fori=stos+8step4:pokei,0:next:s=43991:pokes,3:pokes+1,172:s=42349
160 pokes,228:pokes+1,180:fori=s+4tos+8:pokei,234:next:poke59012,96
170 poke1,55:clr:gosub3980
180 rem  h a u p t m e n u e
190 gosub2980:print"-1- Definierte Datei benutzen"
200 print"{down}-2- Neue Datei definieren"
210 print"{down}-3- Druckparameter aendern"
220 e=2:gosub2970
230 print"-4- Directory laden"
240 print"{down}-5- File loeschen"
250 print"{down}-6- Validate"
260 print"{down}-7- Disk formatieren"
270 print"{down}-8- File umbenennen"
280 gosub3010:ife<1ore>8then280
290 onegosub690,330,320,3200,3420,3500,3550,3610
300 goto190
310 rem  n e u e  d a t e i  d e f .
320 x=-1:ifd=0thenreturn
330 gosub2950:print"{home}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght} Neue Datei definieren {down}{down}":ifx=-1goto540
340 print"{down}Mit Hardcopy (j/n/^=zurueck)":gosub3010:ife$="^"thenreturn
350 print"{clr}"
360 print"{home}";:poke1,53:poke58879,133:poke59639,24:poke780,0:sys58826:poke1,55:sys895
370 ife$<>"j"then390
380 gosub2670:sys932:ifl=2goto380
390 clr:gosub3980:f=1:a1%=-1
400 fori=1024to1983:ifpeek(i)<>30goto450
410 a%(f,y)=(i-1024)/40:pokei,32:forz=0to79:ifpeek(i+z)<>30thennextz
420 y=y+1:a%(f,y)=i-(a%(f,y-1)*40+1024):y=y+1:a%(f,y)=z:y=0:i=i+z:ifz=80theni=i-1
430 ifz<80thenpokei,32
440 f=f+1:iff=40goto490
450 ifpeek(i)=31thena1%=(i-1024)/40:a2%=i-(a1%*40+1025):pokei,32
460 nexti:iff=1thenf=40:goto490
470 fori=1984to2023:ifpeek(i)=30orpeek(i)=31thenpokei,32
480 next:ifa%(f-1,0)=23anda%(f-1,2)>40thena%(f-1,2)=40
490 f=f-1:iff=39thenprint"{clr}{down}{down}Felderanzahl pruefen!!{down}",,t$:gosub3010:sys932:goto360
500 sys895:ifa2%<0thena2%=0
510 gosub2950:print"{home}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght} Neue Datei definieren {down}{down}"
520 ifx=-1goto540
530 input"Name der Datei";na$:ifright$(na$,1)="*"goto530
540 print"Druckparameter eingeben!":poke180,81:poke129,1:poke1,53:poke58879,13
550 fori=0to59:printi+1"{left}. Druckzeile: ":e$=""
560 inpute$
570 ife$=""thenpz$(i)="0":goto600
580 pz$(i)=e$
590 ife$="_"goto610
600 next:pz$(60)="_"
610 poke129,32:poke1,55:input"alles richtig (j/n)";e$:ud=1
620 ife$="n"goto510
630 y=0:df=i:e$="m/"+left$(na$,14)
640 ifx=-1thenx=0:return
650 gosub3060
660 d$="0":d=0:gosub1650:iff1<>0theny=y+1:ify<2goto650
670 goto190
680 rem  h i l f s m e n u e
690 gosub2980:print"{down}{down}-1- Datei laden"
700 print"{down}-2- Datei pflegen"
710 print"{down}-3- Datei abspeichern"
720 print"{down}-4- Sortierroutine"
730 print"{down}-5- Additionsroutine"
740 print"{down}-6- Drucker-Menue"
750 print"{down}-^- Zurueck"
760 gosub3010:ife$="^"thenreturn
770 ife<1ore>6goto760
780 onegosub870,1110,1640,2070,3090,2790
790 goto690
800 rem  t e s t  f l o p p y
810 poke768,61:open1,8,15,"i":close1
820 ifst<>-128thenpoke768,139:return
830 gosub840:goto810
840 print"{clr}{down}{down}{down}{down}{down}":e=1:gosub2970:print"     Peripherie einschalten!!":printt$
850 gosub2970:gosub3010:return
860 rem  l o a d  f i l e
870 gosub2950:print"{home}{down}"spc(13)" Datei laden "
880 ifud=1andd<>0thenprint"{down}{down}{down}{down} Datei abspeichern?! (j/n){down}":printt$:gosub3010:ife$<>"n"thenreturn
890 clr:gosub3980
900 e$="":print"{home}{down}{down}{down}{down}{down}"a$"{down}Mit welcher Datei wollen Sie":input"arbeiten";e$
910 ifright$(e$,1)="*"goto870
920 ife$="^"goto1090
930 ife$=""then900
940 na$=e$
950 ud=0
960 e$="m/"+left$(na$,14):sys827(e$)e$:e=peek(141)*256+peek(140):poke139,peek(e)
970 poke140,peek(e+1):poke141,peek(e+2):gosub810:sys969:gosub3710:iff1goto870
980 open2,8,2,na$+",s,r":poke180,81
990 input#2,f:input#2,a1%:input#2,a2%
1000 fori=1tof:forx=0to2:input#2,a%(i,x):nextx,i
1010 input#2,df:poke1,54:fori=0todf:input#2,pz$(i):ifpz$(i)="_"goto1030
1020 next
1030 input#2,d
1040 ifd=0goto1080
1050 poke129,255:fori=1tod
1060 input#2,fe$(i)
1070 nexti:poke129,32
1080 poke1,55:gosub3710:close2:iff1goto870
1090 e=1:goto290
1100 rem  a n z e i g e
1110 ifud=3thenreturn
1120 ds=0:ifd=0goto1340
1130 fl=7:l=0:ifds<0ords=dgoto3040
1140 print"{clr}";:fori=1to24:print"{lblu}                                        ";:next
1150 print"{lblu}                                       {home}";
1160 sys932:ifa1%<>-1thengosub1320
1170 fori=1tof:gosub1310:printfe$(i+ds);:next
1180 ifl=2thengosub2680
1190 iffl=8goto2040
1200 gosub3010
1210 ife$="+"andds<dthends=ds+f:goto1130
1220 ife$="-"andds>=0thends=ds-f:goto1130
1230 ife$="{f1}"andfl<>9theny=0:gosub2460:goto1130
1240 ife$="{f3}"andfl<>9thengosub2670:ifl=2goto1160
1250 ife$="l"andfl<>9goto1800
1260 ife$="s"andfl<>9goto1890
1270 ife$="a"andfl<>9goto1350
1280 ife$="e"thends=d:fl=0:goto1340
1290 ife$="^"thenreturn
1300 goto1200
1310 poke214,a%(i,0):poke211,a%(i,1):sys58640:return
1320 poke214,a1%:poke211,a2%:sys58640:printds/f+1:return
1330 rem  i n p u t - r o u t .
1340 print"{clr}":sys932
1350 open3,3:poke204,0:ud=1
1360 ifa1%<>-1thengosub1320
1370 ifds+f>1499thengosub2420:goto1460
1380 fori=1tof:poke1,53
1390 y=0:x=len(fe$(ds+i)):gosub1310
1400 sys861
1410 gosub3010
1420 ife$=chr$(13)thenprinte$;:goto1540
1430 ife$="{f1}"andi>1theni=i-2:goto1570
1440 ife$="{f3}"thenx=0:y=0:gosub1310:printleft$(a$,a%(i,2));:gosub1310:goto1400
1450 ife$="{f5}"goto1860
1460 ife$="{f7}"goto1600
1470 ife$="{down}"andy<40anda%(i,2)>y+39theny=y+39:goto1500
1480 ife$="{up}"andy>39theny=y-41:goto1500
1490 ife$="{rvon}"ore$="{rvof}"ore$="{del}"ore$="{up}"ore$="{down}"ore$=chr$(148)ore$="{home}"ore$="{clr}"goto1410
1500 y=y+1:ifx<ythenx=y
1510 ife$="{left}"theny=y-2:ify<0theny=0:goto1410
1520 printe$;:ify=a%(i,2)goto1540
1530 goto1400
1540 gosub1310:poke180,x
1550 fe$(ds+i)="":poke213,80:poke129,255:input#3,fe$(ds+i):poke129,32:poke1,55
1560 ifright$(fe$(ds+i),1)<>chr$(32)thenfe$(ds+i)=fe$(ds+i)+chr$(154)
1570 nexti
1580 ifflgoto1620
1590 ds=ds+f:sys932:goto1360
1600 ifflgoto1620
1610 d=ds:ds=0
1620 poke1,55:poke207,0:poke204,1:print#3,;:close3:x=0:goto1130
1630 rem  s p e i c h e r n
1640 ifd=0thenreturn
1650 gosub2950:print"{home}{down}"spc(10)" Datei abspeichern "
1660 print"{down}{down}{down}"w$
1670 gosub810:ud=0
1680 open2,8,2,"@:"+na$+",s,w"
1690 print#2,f:print#2,a1%:print#2,a2%
1700 fori=1tof:forx=0to2:print#2,a%(i,x):nextx,i
1710 print#2,df:fori=0todf:print#2,pz$(i):ifpz$(i)="_"goto1730
1720 next
1730 print#2,d:ifd=0goto1770
1740 fori=1tod
1750 print#2,fe$(i)
1760 nexti
1770 close2:gosub3710
1780 return
1790 rem  d s  l o e s c h e n
1800 poke214,24:poke211,0:sys58640:print"{rvon}Sind Sie Sicher? (j/n){rvof}";:gosub3010
1810 ife$<>"j"ande$<>"J"goto1130
1820 d=d-f:poke857,f*3:ifds=dthends=ds-f:goto1840
1830 sys932:fori=ds+1todstepf:sys827fe$(i)fe$(i+f):next
1840 goto1130
1850 rem  b y t e s  f r e i
1860 f1=peek(214):f2=peek(211):poke214,24:poke211,0:sys58640:sys861
1870 print"[Frei:      ]{left}{left}{left}{left}{left}{left}{left}"fre(0);:poke214,f1:poke211,f2:sys58640:goto1410
1880 rem  s u c h e n
1890 gosub2950:print"{home}{down}"spc(12)" Suchen "
1900 e$="":input"{down}{down}Feldnummer";e$:l=1
1910 poke180,80:v=val(e$):ifv>fthenprint"{up}{up}";:goto1900
1920 s$="":z=1:y=1:poke1,53:poke129,1:input"{down}{down}Suchwort: ";s$:poke1,55:poke129,32
1930 ifs$=""goto1130
1940 le=len(s$):p=f:ifv=0thenp=1:v=1
1950 print"{clr}{down}{down}Anzahl Felder:"d:print"{down}      -stes Feld abgesucht"
1960 forx=vtodstepp:print"{up}"x:e=len(fe$(x))-1:f1=e-l:ifle>egoto1990
1970 fory=0toe:ify<=f1thenforz=1tole:ifmid$(s$,z,1)=mid$(fe$(x),y+z,1)thennext:goto2030
1980 nexty
1990 nextx
2000 iffl=8goto1130
2010 print"{down}'"s$"' nicht gefunden!!";
2020 gosub3010:goto1160
2030 ds=f*int((x-1)/f):fl=8:l=0:goto1160
2040 gosub3010:ife$<>"j"goto1130
2050 v=x+p:goto1950
2060 rem  s o r t
2070 ifd<f*2ord=0thenreturn
2080 gosub2950:print"{home}{down}"spc(10)" Sortier-Routine "
2090 print"{down}{down}-1- Alles alphabetisch sortieren"
2100 print"{down}-2- Bestimmte Gruppen heraussortieren{down}":gosub2970:poke857,f*3
2110 gosub3010:ife>2ore<1goto2110
2120 ud=1:ife=2goto2230
2130 poke1,54
2140 print"{down}Geben Sie die Feldnummer ein nach der":input"sortiert werden soll: ";e$
2150 y=val(e$):poke1,55:ify<1ory>fthenpoke214,11:sys58640:goto2130
2160 print"{down}{down}":z=d/f:print"max."z"Durchgaenge{down}{down}":s=d-f:l=0
2170 print"Durchgang: 1"
2180 fore=1toz:l=0
2190 fori=ytosstepf:iffe$(i)>fe$(i+f)thenl=1:x=i-y+1:sys827fe$(x+f)fe$(x)
2200 nexti:iflthenprint,"{up}"e:nexte
2210 goto1120
2220 rem  s o r t  b e s t .  k r i t .
2230 input"{down}Nach welchem Feld soll sort. werden";s$:s=val(s$):ifs>fgoto2230
2240 poke180,80:poke129,1:poke1,53:input"{down}Sortierkriterium untere Grenze: ";x$
2250 input"{down}Sortierkriterium obere Grenze: ";y$:poke1,55:poke129,32
2260 print"{down}<1>Neue Datei od. Ausgabe auf <2>Drucker";
2270 inpute$:fl=val(e$):iffl<1orfl>2goto2270
2280 iffl=2thengosub2790:goto2320
2290 input"{down}Name der Datei";n$:ifn$="^"thenreturn
2300 e$="m/"+n$:gosub3060:iff1goto2380
2310 na$=n$
2320 ife$="^"thenreturn
2330 ds=0:e=0:forl=stodstepf:e$=left$(fe$(l),len(y$)):ife$<x$ore$>y$goto2350
2340 ds=l-s:onflgosub2400,2340,2470,2730
2350 nextl
2360 iffl=1thend=e:ds=d
2370 iffl<>1thenopen4,4,7:print#4:close4:ud=0
2380 return
2390 rem  e i n s o r t i e r e n
2400 sys827fe$(e+1)fe$(ds+1):e=e+f:return
2410 rem  d a t e i  v o l l
2420 poke207,0:poke204,1
2430 print"{clr}{down}{down}{down}{down}":e=1:gosub2970:printspc(10)"Datei voll!!":printt$:gosub2970
2440 gosub3010:e$="{f7}":return
2450 rem  d r u c k 1
2460 y=-1:gosub2860
2470 open4,4,7
2480 x=0:y=0:ife<>1goto2500
2490 fords=0tod-fstepf
2500 fori=0todf-1
2510 ifpz$(i)="0"goto2610
2520 f1=len(pz$(i)):forz=1tof1
2530 e$=mid$(pz$(i),z,1)
2540 ife$<>"["goto2570
2550 print#4,fe$(ds+val(mid$(pz$(i),z+1,2)));
2560 z=z+2:goto2600
2570 ife$="]"andx=1thenx=0:e$=chr$(15):goto2590
2580 ife$="]"thene$=chr$(14):x=1
2590 print#4,e$;
2600 nextz
2610 print#4
2620 nexti
2630 ife=1thennextds
2640 iffl<>3thenprint#4
2650 close4:return
2660 rem  h a r d c o p y
2670 y=-1:gosub2860:open4,4,7:ifl=2thenreturn
2680 print"{home}";:open5,3:l=1024:poke1,53
2690 fori=ltol+39:poke1024,peek(i):print"{home}";:get#5,e$:print#4,e$;:next:print#4:l=i
2700 ifi<>2024goto2690
2710 x=0:close4:close5:poke1,55:return
2720 rem  d r u c k 2
2730 open4,4,7:ife<>2goto2750
2740 fords=0tod-fstepf
2750 fori=1tof:print#4,fe$(i+ds):nexti:ife=2thennextds
2760 iffl<>4thenprint#4
2770 close4:return
2780 rem  d r u c k e r - m e n u e
2790 ifd=0thenreturn
2800 gosub2980:print"{down}{down}-1- Gesamte Datenbank mit definierten       Feldern drucken
2810 print"{down}-2- Gesamte Datenbank drucken":y=0
2820 print"{down}-3- Datensaetze aus Sortierroutine mit      definierten Feldern drucken
2830 print"{down}-4- Ganze Datensaetze aus Sortierroutine    drucken
2840 print"{down}-^- Zurueck"
2850 gosub3010:ife$="^"thenreturn
2860 l=1
2870 poke768,61:open4,4,7:print#4:ifst=-128thengosub840:l=2:goto2870
2880 close4:poke768,139:ify=-1thenreturn
2890 ifl=2goto2790
2900 ife<1ore>4goto2850
2910 ife>2thenfl=e:return
2920 iffl=2goto2850
2930 onegoto2470,2730
2940 rem
2950 e=3
2960 print"{clr}";
2970 fori=1toe:print"{blk}{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-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{lblu}";:next:return
2980 gosub2950:print"{home}{down}"spc(10)" ProDat ":print"{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}":gosub2970
2990 print,"{up}{up} By Wolfgang Hahn {home}{down}{down}{down}":return
3000 rem  g e t  a l l g .
3010 gete$:e=val(e$):ife$=""goto3010
3020 return
3030 rem  d a t e i  z u e n d e
3040 fl=9:e=1:print"{clr}{down}{down}{down}":gosub2970:printspc(10)"Datei zuende":gosub2970:goto1200
3050 rem  s a v e  m a s k e
3060 sys827(e$)e$:e=peek(141)*256+peek(140):poke139,peek(e):poke140,peek(e+1)
3070 poke141,peek(e+2):poke176,0:poke177,204:gosub810:sys995:gosub3710:return
3080 rem  a d d i t i o n
3090 ifd=0ord<f*2thenreturn
3100 gosub2950:print"{home}{down}"spc(11)" Additionsroutine "
3110 input"{down}{down}{down}Welche Felder sollen addiert werden";e$:e=val(e$):y=0
3120 ife<1ore>fgoto3110
3130 input"{down}{down}Datensatz fuer Ergebnis anlegen";e$
3140 fori=etodstepf:y=y+val(fe$(i)):nexti:y=int(y*100+.5)/100
3150 ife$<>"j"goto3180
3160 fori=1tof:fe$(i+d)=chr$(250):ifi=ethenfe$(i+d)="{left}"+str$(y)
3170 nexti:ds=d:d=d+i-1:ud=1:goto1130
3180 print"{down}{down}Gesamtsumme Felder-Nr."e"= "y:print"{down}{down}"t$:gosub3010:return
3190 rem  d i r e c t o r y
3200 gosub810:y=0
3210 gosub2950:print"{home}{down}{rght}{rght}{rght} Directory "
3220 ify=1thenreturn
3230 open3,8,0,"$":get#3,e$,e$
3240 print:get#3,e$,e$,s$,e$
3250 e=asc(s$+chr$(0))+asc(e$+chr$(0))*256
3260 printmid$(str$(e)+"    ",2,4);
3270 gete$:ife$<>""thenclose3:return
3280 get#3,e$:ifstgoto3360
3290 ife$<>chr$(34)goto3280
3300 get#3,e$:ife$<>chr$(34)thenprinte$;:goto3300
3310 get#3,e$:ife$=" "goto3310
3320 printtab(21);
3330 printe$;:get#3,e$:ife$<>""goto3330
3340 ifpeek(214)>20thenprint:print"{down}"t$;:gosub3010:y=1:gosub3210
3350 goto3240
3360 print"Bloecke frei"
3370 close3
3380 gosub3710
3390 print:printt$:gosub3010
3400 return
3410 rem  s c r a t c h
3420 e=4:gosub2960:print"{home}{down}"spc(3)" File loeschen "
3430 printspc(21)" ^d = Directory "
3440 input"{down}{down}Filename";e$
3450 ife$="^d"thengosub3200:goto3420
3460 ife$="^"thenreturn
3470 gosub810:open1,8,15,"s:"+e$+",m/"+e$:gosub3730
3480 goto3420
3490 rem  v a l i d a t e
3500 gosub2950:print"{home}{down}"spc(13)" Validate {down}{down}{down}{down}"
3510 printw$
3520 gosub810:open1,8,15,"v":gosub3730
3530 return
3540 rem  d i s k  f o r m a t .
3550 gosub2950:print"{home}{down}"spc(10)" Disk formatieren "
3560 input"{down}{down}{down}Disk-Name";e$:ife$="^"thenreturn
3570 input"{down}Disk-Nummer";y$:ify$="^"thenreturn
3580 print"{down}{down}"w$:gosub810:open1,8,15,"n:"+e$+","+y$:gosub3730
3590 return
3600 rem  r e n a m e
3610 gosub2950:print"{home}{down}"spc(9)" File umbenennen "
3620 input"{down}{down}{down}{down}Alter Name";y$
3630 ify$="^"thenreturn
3640 input"{down}{down}Neuer Name";e$
3650 ife$="^"thenreturn
3660 gosub810:open1,8,15,"r:"+e$+"="+y$
3670 print#1,"r:m/"+e$+"=m/"+y$:gosub3730
3680 iff1<>0goto3610
3690 goto3200
3700 rem  d i s k - e r r o r
3710 close1
3720 open1,8,15:poke1,55
3730 input#1,f1,s$,f2,f3
3740 close1
3750 iff1=0thenreturn
3760 print:e=1:gosub2970
3770 printspc(6)f1;s$;f2;f3
3780 printt$
3790 gosub2970:gosub3010
3800 return
3810 rem  m a p r o ' s
3820 forz=820to1020:readx:pokez,x:s=s+x:next
3830 data133,095,134,096,076,191,163,032,158,173,165,100,133,140,165,101,133
3840 data141,032,158,173,160,000,177,140,133,139,177,100,145,140,165,139,145
3850 data100,200,192,003,208,239,096,169,000,133,139,169,004,133,140,160,000
3860 data177,139,056,233,128,048,002,145,139,192,255,200,208,242,165,140,201
3870 data007,240,103,230,140,208,230,169,000,133,139,133,172,169,004,133,140
3880 data169,204,133,173,160,000,177,139,145,172,192,255,200,208,247,165,140
3890 data201,007,240,068,230,140,230,173,208,233,169,000,133,139,133,172,169
3900 data204,133,140,169,004,133,173,160,000,177,139,145,172,192,255,200,208
3910 data247,165,140,201,207,240,031,230,140,230,173,208,233,160,000,162,008
3920 data032,186,255,166,140,164,141,165,139,032,189,255,162,000,160,204,169
3930 data000,032,213,255,096,160,001,162,008,032,186,255,166,140,164,141,165
3940 data139,032,189,255,162,255,160,207,169,176,032,216,255,096
3950 ifs<>29538thenprint"fehler in datas!!":stop
3960 return
3970 rem  i n i t i a l i s i e r e n
3980 t$="         Taste druecken!":dimfe$(1500),pz$(60),a%(40,2):poke650,128:e=1
3990 a$="                                        ":a$=a$+a$:y=0:l=0:ud=3
4000 w$="Bitte warten...":return
Listing »ProDat«. Beachten Sie bitte die Eingabehinweise auf Seite 6.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →