C 64
Anwendung des Monats

Damit Sie wissen, was Sie ausgeben

Egal, ob Sie viel oder wenig Geld verdienen, auf jeden Fall hat es Vorteile, einen Überblick über seine Ausgaben zu haben. Und warum soll dazu nicht der C 64 eingesetzt werden? Mit diesem elektronischen Haushaltsbuch können Sie jederzeit Bilanz ziehen.

Bild 1. Ein Menüpunkt aus dem elektronischen Haushaltsbuch

Seit Anfang 1984 der C 64 ins Haus kam, ist die Arbeit daran zu einer Leidenschaft geworden. (Wie bei vielen anderen auch!) Soweit der Beruf es ermöglicht, verbringe ich meine Freizeit (das sind hauptsächlich die Wochenenden) mit der Entwicklung von Anwendungen am Computer. Ausgangspunkt war die Begeisterung für technische »Spielereien«. Doch bald reizte die Eigenentwicklung von Programmen. Es gibt eine tiefe Befriedigung, wenn nach stunden- oder tagelanger Arbeit ein Programmteil das erste Mal gestartet wird und nach vielleicht nur einer Korrektur zufriedenstellend läuft. Ein andermal wird stundenlang über die Lösung eines Problems getüftelt. »Gelernt« habe ich jedenfalls dadurch einiges über die Basic-Programmierung des C 64. Wenn auch häufig »Probieren über Studieren« ging.

Als Familienvater finde ich volles Verständnis bei Frau und Tochter. (Das muß mal gesagt werden!)

In der Familie liegt der Ausgangspunkt für das Programm. Die Aufzeichnung der monatlichen Einnahmen und Ausgaben erfolgte manuell. Das ließ natürlich die »Ehre« des EDV-Anwenders nicht zu. Ein entsprechendes Programm mußte her. Es sollten nicht nur die Beträge als Salden auf Konten geführt werden, sondern es sollte auch möglich sein, einzelne Buchungen wieder abzurufen. Wiederkehrende Posten sollten über die einzelnen Monate hinweg beobachtbar sein.

So entstand das »Haushaltsbuch« als eine Kombination aus sequentieller und relativer Datei: die relative zur Kontenführung (Salden); die sequentielle zur Speicherung der Kostenart, des Betrages und des Buchungsdatums als Einzelpositionen.

Von der Floppy lassen sich mit »INPUT« bekanntlich nur 88 Zeichen einlesen. Der relative Datensatz hat aber eine Länge von 141 Zeichen. Die Alternative »GET« in einer FOR-NEXT-Schleife ist sehr langsam. Dies fällt besonders bei der Bildung des Jahressaldos auf.

Es blieb nur, den INPUT-Befehl zu modifizieren. Die entsprechenden DATAs für das kleine Maschinenprogramm sind im »Haushaltsbuch« enthalten und werden in den Kassettenpuffer eingelesen.

Als Tauschroutine fand gleich die im 64’er, Ausgabe 1/85 beschriebene SWAP-Simulation Verwendung. Durch diese Funktion konnte die Produktion von »String-Müll« deutlich reduziert werden.

Ich habe mich bemüht, das Programm »wasserdicht« zu machen. Floppy und Drucker werden auf Bereitschaft geprüft. Unter normalen Bedingungen dürfte es keinen Absturz geben. Aber eine Eingabe von falschen Beträgen muß der Anwender verantworten.

(Martin Schumann/gk)

Das Programm »Haushaltsbuch« dient der Aufzeichnung der Ein- und Ausgaben im privaten Bereich. Neben den monatlichen Bestandskonten (relative Dateien) werden zur Dokumentation der Buchungsposten die Einzelpositionen in sequentiellen Buchungsdateien gespeichert.

Die in den relativen Dateien geführten Konten ermöglichen innerhalb eines Jahres den Abruf des aktuellen Standes in der »Kasse«. Aus den sequentiellen Dateien lassen sich alle Buchungen mit Angabe der Kostenart, des Betrages und des Buchungsdatums auflisten oder einzelne selektieren; zum Beispiel bestimmte Kostenarten oder Buchungsmonate.

Geschrieben wurde das »Haushaltsbuch« für einen C 64. Das für die Modifikation des INPUT-Befehls notwendige kleine Maschinenprogramm wird in dem Kassettenpuffer abgelegt. Die DATAs für die Simulation der SWAP-Tauschroutine werden in der Zero-Page in den Freiraum ab Speicherstelle715 eingelesen.

Die sinnvolle Nutzung des Programms setzt ein Diskettenlaufwerk voraus. Ein Drucker wäre recht nützlich, ist aber keine Notwendigkeit. Sollten trotz nicht vorhandenem Drucker die betreffenden Druckroutinen aufgerufen werden, führt dies zu keinem Programmabsturz.

Ausgelegt ist das Druckunterprogramm für Epson-kompatible Drucker. Eine Anpassung an Commodore-Drucker sollte – falls es notwendig ist – leicht zu bewerkstelligen sein.

Neben der Bereitschaft des Druckers wird selbstverständlich die des Diskettenlaufwerks geprüft.

Funktionsbeschreibung

Wie aus den einleitenden Sätzen ersichtlich, gliedert sich das Programm in zwei übergreifende Programmteile: die Kontenführung und die Bearbeitung der Buchungspositionen.

Nach dem Start des Programms geben Sie bitte das zu bearbeitende Jahr (»aktuelles Jahr«) ein. Der Zeitraum wurde auf 1984 bis 2000 beschränkt. Dies kann selbstverständlich dem Bedarf des Lesers entsprechend angepaßt werden. Nur sollte dabei die Diskettenkapazität beachtet werden!

Nach Eingabe der Jahreszahl meldet sich »Haushaltsbuch« mit dem Hauptmenü. Es stehen folgende Funktionen zur Verfügung:

— 1Konten anlegen
— 2Buchen
— 3Kontenübersicht
(Kontennamen ausgeben)
— 5Monatsübersicht
— 6Jahresübersicht
— 7Buchungsposten abfragen
— 0Programm beenden

Die Funktion »Kontennamen ausgeben« wird automatisch von den übrigen Funktionen — soweit notwendig — aufgerufen. Denn warum sollte man sich die Nummern der einzelnen Konten merken, dies kann der C 64 viel besser.

Wenn Sie also »4« eingeben, erfolgt eine entsprechende Meldung. Versuchen Sie es!

Konten anlegen

Beachten Sie bei dieser Funktion, daß eine existierende Datei des gewählten Jahres gelöscht wird. Es wird zur Vorsicht abgefragt, ob Sie dies auch wirklich beabsichtigen. Beantworten Sie die Frage mit »JA«, so werden die bisherigen Konten gelöscht und Sie aufgefordert, die Zahl der neu anzulegenden Konten einzugeben. Anschließend können Sie die Konten benennen. Drücken Sie bei einer Kontonummer RETURN, so wird das Anlegen der Konten abgebrochen. Es werden nur die bis zu diesem Moment eingegebenen Konten gespeichert. Die Kontenzahl (KZ) wird entsprechend korrigiert. Geben Sie bei der Frage nach der Zahl der Konten »0« ein, so wird die Programmfunktion verlassen. Dadurch können Sie also nicht mehr benötigte Jahre löschen. (Klar, daß das auch außerhalb des Programms mit »SCRATCH« erfolgen kann.)

Gleichzeitig mit dem Anlegen der relativen (Salden-)Konten werden auch die sequentiellen Buchungsdateien eingerichtet.

Die Zahl der Konten wurde auf 20 beschränkt, um noch mit einer Bildschirmseite auszukommen. Außerdem sollten 20 Konten für die private »Buchführung« ausreichend sein. Wem dies dennoch zu wenig ist, muß in Zeile 1440 die betreffende Prüfung und in Zeile 60 die Dimensionierung anpassen.

Außerdem wäre das Scrollen des Bildschirms über eine Routine (ähnlich der in Zeile 5800-5830) zu steuern.

Buchen

Ein Aufruf dieser Funktion gibt zuerst die Nummern und Namen der Konten aus. Durch Eingabe der gewünschten Nummer wird das betreffende Konto eingelesen. Mit »E« kann man die Funktion ohne Aktivitäten verlassen. Anschließend wird nach Einnahme oder Ausgabe gefragt. An dieser Stelle kann die Routine ebenfalls durch die Taste »f7« abgebrochen werden. Diese Möglichkeiten wurden eingefügt, um ein Verlassen der Buchungsfunktion zu erlauben. Wurde jedoch dieser Punkt überschritten, bleibt nur, eine Buchung durchzuführen. Bei Abbruch werden die bis dahin getätigten Buchungen gesichert.

Nachdem Sie den Buchungsmonat angegeben haben, wird der alte Saldo angezeigt. Nun können »KOSTENART«, »BETRAG« und »TAG« (durch Kommata trennen) eingetippt werden. Wenn alles korrekt ist, können weitere Eingaben auf dem gewählten Konto gemacht werden. Wird die Frage nach weiteren Buchungen mit »N« beantwortet, werden die Eingaben auf das Konto »geschrieben«.

Nun können andere Konten aufgerufen oder die Funktion »Buchen« verlassen werden.

Kontenübersicht

Wählen Sie diese Funktion, wenn Sie die Monatssalden eines Kontos wünschen. Auch hier werden die Konten wieder vorgegeben.

Nach Anzeige der Übersicht ruft »f3« weitere ab oder »f1« druckt die aktuelle aus. Zum Menü kommt man mit »f5« zurück.

Monatsübersicht und Jahresübersicht

Tippen Sie die »5« im Menü und geben den gewünschten Monat ein, erhalten Sie einen Überblick über die Salden aller Konten für den betreffenden Monat.

Die »6« ruft den Jahressaldo aller Konten ab. Dabei kann allerdings der zu kumulierende Zeitraum (Monate) frei gewählt werden. Ober- und Untergrenze können in beliebiger Reihenfolge eingegeben werden.

Auch hier kann durch Drücken von »f1« ein Protokoll über Drucker erstellt werden.

Programm beenden

Mit dieser Funktion kann das Programm »ordnungsgemäß« beendet werden. Sollte dies mal aus Versehen geschehen sein, kann man mit »GOTO 960« sofort wieder zurückkehren. Es reicht, RETURN zu drücken, da der Cursor entsprechend positioniert wird.

Buchungsposten abfragen

Dieser Programmteil springt in das Untermenü »Sonderfunktion Buchungsposten bearbeiten«. Hier stehen als weitere Funktionen zur Verfügung:

»Datei laden« braucht nicht gesondert aufgerufen zu werden, da dies wieder bei den übrigen Programmteilen des Untermenüs geschieht.

Vor dem Start der Laderoutine prüft der Computer, ob das Diskettenlaufwerk vorbereitet wurde. Auch eine »falsche« Datendisk wird mit »Datei nicht gefunden« quittiert. Es erfolgt Rücksprung zum Menü.

Datei sichern

Diese Funktion ist nur dann notwendig, wenn Änderungen (Kostenart oder Datum) durchgeführt wurden (vergleiche »Buchungen ändern«).

Allerdings kann ein unbeabsichtigtes Starten dieser Routine auch keinen »Schaden« anrichten. Es werden dann die Daten im Rechner gesichert und die identische Datei auf der Diskette gelöscht.

Darüber hinaus wird nach Aufruf dieses Programmteils zur Vorsicht gefragt, ob eine Diskette eingelegt wurde. Zusätzlich prüft der Computer, ob das Laufwerk »bereit« ist.

Buchungen ausgeben

Als erstes geben Sie ein, ob die Ausgabe auf Drucker oder Bildschirm erfolgen soll. Dann wählen Sie die Datei (mit dem betreffenden Kontennamen), aus der Buchungen selektiert werden sollen. Gesucht werden kann nach »Kostenart« und/oder »Buchungsmonat«. Ist ein Suchbegriff nicht relevant, drücken Sie RETURN. Wurde beide Male RETURN gedrückt, wird die Datei komplett aufgelistet. Nach jeweils 15 Buchungsposten wird die Bildschirmausgabe angehalten und mit Betätigen einer beliebigen Taste fortgesetzt.

Hier bieten sich also vielfältige Möglichkeiten, Kostenarten über Monate hinweg zu verfolgen oder Monate in die einzelnen Buchungspositionen zu »zerlegen«.

Buchungen ändern

Diese Funktion ist dazu bestimmt, Änderungen an den Buchungsposten vorzunehmen. Das gilt aber nur für Kostenart und Buchungsdatum, wenn man sich bei der Eingabe versehen und dies beim Buchen nicht bemerkt hat. Eine Änderung des Betrages ist dagegen nur durch eine Korrekturbuchung möglich, weil in diesem Fall auch die relativen Konten korrigiert werden müssen.

Gewählt werden kann zwischen zwei Änderungsmodi:

  1. Selektion und Korrektur von Einzelbuchungen oder
  2. Auflisten aller Buchungen

Bei Änderungen werden Spalten und Zeilen beziffert, so daß die Datensätze und die Felder eindeutig identifiziert werden können.

Nach Eingabe der betreffenden Zeilen- und Spaltennummer wird das zu ändernde Feld in die spezielle »Änderungszeile« ausgegeben. Der Cursor wird so positioniert, daß das (geänderte) Feld sofort wieder übernommen wird. Dies hat den Vorteil, daß bei nur einer Buchstabenänderung nicht das ganze Feld neu geschrieben werden muß.

Sind mehrere Änderungen vorzunehmen, können diese nacheinander durchgeführt werden.

Ist der letzte Datensatz erreicht, wird gefragt, ob die geänderte Datei gesichert werden soll. Dies wird in der Regel der Fall sein.

Buchungen sortieren

Die Buchungen werden in der Reihenfolge der Eingabe gespeichert. Wird für bestimmte Anwendungen eine andere Folge benötigt, kann nach Kostenart oder Betrag oder Datum aufsteigend sortiert werden.

Auch hier entscheidet der Anwender, ob die neu sortierte Datei gespeichert werden soll. In diesem Fall wird es nicht immer gewünscht sein, weil die Datei in einer bestimmten Reihenfolge auf der Diskette erhalten bleiben soll.

Ein Hinweis sei an dieser Stelle gegeben. Bei umfangreicheren Dateien (zum Beispiel 200 Datensätzen) können schon ein bis zwei Minuten vergehen, bis der Computer die Vollzugsmeldung gibt. Also nur keine Aufregung, wenn er sich nicht sofort wieder meldet. Es muß nicht unbedingt ein Programmfehler vorliegen!

Die 200 Datensätze (genauer 201 pro Konto) stellen die Obergrenze dar. »Vielbucher« müssen die Dimensionierung (D$(200,2)) in Zeile 60 ändern.

Sonderfunktion verlassen

Bevor das Programm zum Hauptmenü zurückspringt, prüft es, ob Änderungen oder Sortierungen an der sich im Computer befindenden Datei vorgenommen wurden. Sollten die noch nicht gesichert sein, kann dies jetzt — solange keine andere Datei von Diskette geladen wurde — nachgeholt werden. Andernfalls RETURN drücken, um zum Menü zu gelangen.

Aufschlüsselung nach Zeilennummern

Die folgende Grobeinteilung kann vorgenommen werden:

1 - 830Vorbereitung und Unterprogramme, die der Schnelligkeit wegen, oder weil sie häufiger aufgerufen werden, an den Anfang gesetzt wurden (zum Beispiel Sortieren, Cursor positionieren).
850 - 4310Hauptmenü und Bearbeitung der relativen Datei (Kontenführung).
4500 - 7780Untermenü und Bearbeitung der sequentiellen Buchungsdateien.
7830 - 7940DATAs für »INPUT«-Modifikation zum Einlesen von Files; werden in den Kassettenpuffer ab 828 geschrieben:
Syntax: input# Filenummer, Satzlänge, Variable. Erlaubt mehr als 88 Zeichen (253) direkt einzulesen, findet Anwendung bei der relativen Datei, Satzlänge 141 Zeichen.
7990 - 8050DATAs für die Simulation der »SWAP«-Funktion (vergleiche 64’er, Ausgabe 1/85) von Boris Schneider): Ermöglicht das Vertauschen zweier Strings ohne zusätzliche Variable (»String-Müll«), eingesetzt in der Sortierroutine.
Syntax: SYS Startadresse(string1,string2)
Startadresse im Programm: Speicherstelle 715 in der Zero-Page.

Wichtiger Hinweis:

Sollte jemand mit Simons Basic editieren, ist zu beachten, daß nach dem ersten Start des Programms nicht mehr alle Befehle dieser Basic-Erweiterung wegen der DATAs im Kassettenpuffer einwandfrei funktionieren (Syntax-Error!?)

Eine Beeinträchtigung von Exbasic Level II konnte bisher nicht beobachtet werden.

Gestartet wird das Programm mit RUN.

Auf eines sei noch aufmerksam gemacht. Durch die Kommentarzeilen sind eine Vielzahl von Blöcken entstanden, die der Gliederung des Programms dienen, aber ohne Bedeutung für den Programmablauf sind. Es lassen sich einige Byte einsparen, wenn die Kommentare entfallen. Da sie keine Sprungadressen sind, kann dies auch bedenkenlos geschehen.

Das Programm selbst gewinnt jedenfalls dadurch an Schnelligkeit.

Nun wünsche ich allen Interessierten viel Erfolg beim Eingeben und Anwenden des »Haushaltsbuchs«. Möge die Kasse nun immer stimmen.

(Martin Schumann/gk)
Einzelne Menüs vom »Haushaltsbuch«
Eine bestimmte Kostenart herausgegriffen
Variable Bedeutung
A enthält bei Änderungen die Satznummer des zu ändernden Feldes
AK Anzahl der Konten (relative Datei)
AV Flag bei Änderungen
B Feldnummer des zu ändernden Feldes
BD$ Buchungstag
BL$ Leerstring mit 20 Positionen, wird beim Auffüllen der Inhalte von RC$ benutzt
C Zeilenposition des Cursors
D$(Y,I) Satz der sequentiellen Buchungsdatei
Y,0 = Kostenart; Y,1 = Betrag
Y,2 = Buchungsdatum
F% Normalwert in Speicherstelle 768 der Fehlerroutine des Interpreters
F$(I) Bezeichnung der Funktionen im Hauptmenü
FB$(I) Feldbezeichnung (sequentieller Datensatz)
FS$(I) Sonderfunktionen
FU gewählte Funktion des Untermenüs
GS Gesamtsaldo in den Übersichten
I,J,T,K,Y Laufvariable in Schleifen
J$ aktuelles Jahr (4stellig)
JA$ die beiden Endziffern des aktuellen Jahres
JS Jahressaldo aller Konten
KN$(I) Name der Konten (relative Datei)
KN Nummer des gewählten Kontos (Datei)
KZ Zahl der Konten (wird nur bei »Konten anlegen« benutzt; sonst AK)
L Position des Dezimalpunktes
LV Laufvariable (Buchen) für die Aufbereitung der Felder der sequentiellen Buchungsdateien
M$(I) Monatsnamen
MS(I) Jahressalden der Konten bei Jahresübersicht
MO$ String für gewählten Monat (für Datum)
M Nummer des gewählten Monats
N$(I) Kurzform des Kontennamens für sequentielle Datei)
O Obergrenze bei Jahressaldo, wenn nicht das komplette Jahr kumuliert werden soll
RC$ relativer Datensatz (Record)
U Untergrenze bei Jahressaldo, wenn nicht das komplette Jahr kumuliert werden soll.
S Spaltenposition des Cursors
S(M) Monatssalden des eingelesenen Kontos
S$(I) Monatssalden als String
S% Flag für Sortieren
SB$(I) enthält die Suchbegriffe auf
SU
  • 1. bei »Buchungen«: Buchungsbetrag
  • 2. bei »Buchungen ausgeben«: Summen der Ausgaben
  • 3. übernimmt Salden für »Summen aufbereiten«
X gewählte Funktion
X$ Eingaben in GET-Funktionen
Z Anzahl der Sätze einer sequentiellen Datei
ZS(M) Zwischenspeicher der Monatssalden der Konten
ZZ
  • 1. Zwischenzähler in »Konten anlegen« für Zahl der tatsächlich eingegebenen Kontennamen
  • 2. Zeilenzähler für Bildschirmausgabe
ZW Zwischenspeicher für die Nummer der aktuellen sequentiellen Datei im Computer
Tabelle 1. Die wichtigsten Variablen
|
1 rem *********************************
2 rem * > h a u s h a l t s b u c h < *
3 rem *                               *
4 rem *     martin schumann           *
5 rem *********************************
40 printchr$(147):poke211,12:poke214,10:sys58732:print"ich lese daten !"
50 gosub7830:gosub7970:dimsb$(2),f$(7),fs$(5)
60 dimms(20),m$(12),d$(200,2),s(12),zs(12),n$(20),s$(20),kn$(20):t1$="0"
70 m$(1)="januar   ":m$(2)="februar  "
80 m$(3)="maerz    ":m$(4)="april    "
90 m$(5)="mai      ":m$(6)="juni     "
100 m$(7)="juli     ":m$(8)="august   "
110 m$(9)="september":m$(10)="oktober  "
120 m$(11)="november ":m$(12)="dezember "
130 f$(1)=" konten anlegen      "
140 f$(2)=" buchen              "
150 f$(3)=" kontenuebersicht    "
160 f$(4)=" kontennamen ausgeben"
170 f$(5)=" monatsuebersicht    "
180 f$(6)=" jahresuebersicht    "
190 f$(7)=" buchungsposten abfr."
200 f$(0)=" programm beenden    "
210 f%=peek(768):goto880
220 rem
230 rem =*=  d r u c k e r  vorhanden?
240 rem
250 poke768,185:open1,4:print#1,"":close1:poke768,f%
260 ifst<>-128goto290
270 poke214,24:poke211,2:sys58732:print"      drucker nicht bereit !         ";
280 :fori=0to2500:next
290 return
300 rem
310 rem =*=   f l o p p y   vorhanden?
320 rem
330 poke768,185:open1,8,15,"i":close1:poke768,f%
340 ifst<>-128goto365
350 c=23:s=9:gosub830:print"{red} floppy nicht bereit !"
360 :fori=0to2500:next:return
365 open1,8,15,"m-w"+chr$(7)+chr$(28)+chr$(1)+chr$(15):rem floppyzugriff beschl.
370 input#1,r:close1
375 ifr=21thens=9:c=23:gosub830:print"{red}diskette einlegen !":fori=0to3500:next
380 return
390 rem ==============================
400 rem **  shell - sort /(num.)    **
410 rem ==============================
420 d=4
430 ifd<nthend=d+d:goto430
440 d=d-1
450 d=int(d/2)
460 ifd<1thenreturn
470 forj=1ton-d
480 :fori=jto1step-d
490 : ifval(d$(i+d,x))>=val(d$(i,x))goto540
500 :  fort=0to2
510 :   sys715(d$(i,t),d$(i+d,t))
520 :  nextt
530 :nexti
540 nextj
550 goto450
570 rem ===========================
580 rem **   shell - sort/alpha     **
590 rem ===========================
600 d=4
610 ifd<nthend=d+d:goto610
620 d=d-1
630 d=int(d/2)
640 ifd<1thenreturn
650 forj=1ton-d
660 :fori=jto1step-d
670 : ifd$(i+d,x)>=d$(i,x)then720
680 :  fort=0to2
690 :   sys715(d$(i,t),d$(i+d,t))
700 : nextt
710 :nexti
720 nextj
730 goto630
740 rem
750 rem *=* u e b e r s c h r i f t e n
760 printtab(8)"{orng}UCCCCCCCCCCCCCCCCCCCCCCI":rem 22 chr$(99)=shift c
770 printtab(8)"B";f$(x);" B":rem menuefunktionen
780 printtab(8)"JCCCCCCCCCCCCCCCCCCCCCCK{brn}":rem com-taste+2
790 return
810 rem =*= cursor positionieren =*=
830 poke211,s:poke214,c:sys58732:return
850 rem **  erster bildschirm      ****
860 rem ===============================
870 :
880 poke53281,7:poke53280,8:print"{brn}":bl$="                    ":rem 20 blank
890 gosub4010:poke788,52:rem stop aus
900 input"aktuelles jahr (1984-1999): ";j$:ja$=right$(j$,2)
910 :ifj$<"1983"orj$>"1999"thenprint"unzulaessiges jahr!":print"{up}{up}";:goto900
920 rem       shift/crsr^ <chr$(145)>
930 rem ===============================
940 rem  menue / aufruf unterprogramme
950 rem ===============================
960 gosub4010
970 printtab(10)"{red}funktionsauswahl:"
980 printtab(10)"-----------------":print
990 printtab(5)"{blu}-1-{brn}  konten anlegen"
1000 printtab(5)"{blu}-2-{brn}  buchen":print
1010 printtab(5)"{blu}-3-{brn}  kontenuebersicht":print
1020 printtab(5)"  {orng}  <kontennamen ausgeben>":printtab(11)"-----> {blu}2-3,5-7"
1030 printtab(45)"{blu}-5-{brn}  monatsuebersicht"
1040 printtab(5)"{blu}-6-{brn}  jahresuebersicht":print
1050 printtab(5)"{blu}-7-{brn}  buchungsposten abfragen":print
1060 printtab(5)"{grn}-0-{brn}  programm beenden":print
1070 printtab(10)"{rvon}{red} auswahl (0-7) {rvof}{brn}"
1080 get x$: if x$<"0"orx$>"7"then1080
1090 : x=val(x$):if x=0 goto1200
1100 : ifx<>4goto1130
1110 :  s=6:c=22:gosub830:print"{red}werden bei den uebrigen funktio-"
1120 :  printtab(6)"nen automatisch ausgegeben";:fori=0to2000:next:goto960
1130 : on x gosub 1310,1750,2510,2890,3240,3580,4500
1140 goto960
1160 rem ==========================
1170 rem ** programm beenden     **
1180 rem ==========================
1200 gosub4010:gosub760:print:print:print
1210 close1:close2:close3
1220 print"sollten sie versehentlich das programm  beendet haben, so koennen ";
1230 print"sie es mit",tab(15)chr$(17)"{rvon}{red} goto 960 {rvof}{brn}"chr$(17),,"wieder ";
1240 print"starten !":poke788,49:rem stop ein
1250 s=0:c=13:gosub830:sys42115:rem end ohne ready
1270 rem ***======================***
1280 rem ===  konten anlegen      ===
1290 rem ***======================***
1310 gosub4010:gosub760:rem gew.funkt.
1320 print"{blu}achtung ! eine evtl. bereits angelegte  datei dieses jahres wird";
1330 print" geloescht.":printchr$(28)
1340 print"{red}wollen sie das (j/n)"
1350 get x$:if x$<>"j"and x$<>"n"then1350
1360 :ifx$="n"thenreturn
1370 gosub330:ifst=-128orr=21thenreturn
1380 open3,8,15,"s:"+j$+"*":close3:ak=0
1390 open2,8,15,"s:konten"+j$
1400 printchr$(147);:gosub760
1410 print:print" wieviele konten wollen sie anlegen"
1420 print"  {red}{rvon} 0 {rvof}{brn}  = keine konten neu anlegen   ":input"(1-20) ";kz
1430 : ifkz=0thenclose1:close2:return
1440 : ifkz<1orkz>20thenprintchr$(145)chr$(145)chr$(145);:goto1420
1450 open1,8,2,"konten"+j$+",l,"+chr$(141)
1460 printchr$(145);:zz=0:d$(0,0)="noch keine buchungen"
1470 s=1:c=4:gosub830:print"<{red}{rvon}return{rvof}{brn}> = konten anlegen abbrechen  "
1480 print"                                     "
1490 print"                                     ":rem 36 x space
1500 fori=1tokz
1510 :print"name konto nr.";spc(3-len(str$(i)))i":";
1520 : input kn$
1530 :  ifkn$=""theni=kz:goto1610
1540 :  if len(kn$)>20 then kn$=left$(kn$,20)
1550 : rc$=kn$+left$(bl$,20-len(kn$))
1560 : n$(i)=left$(rc$,12)
1570 : for t=1 to 12
1580 :  rc$=rc$+str$(0)+left$(bl$,10-len(str$(0)))
1590 : nextt:zz=zz+1
1600 : print#1,rc$:kn$=""
1610 nexti
1620 close1:close2:close3
1630 ifzz<kzthenkz=zz:rem abbruch ?
1640 for i=1 to kz
1650 : open3,8,3,j$+n$(i)+",s,w"
1660 :  print#3,d$(0,0)
1670 : close3
1680 next i
1690 close1:close2:close3:return
1710 rem ============================
1720 rem ***    b u c h e n       ***
1730 rem ============================
1750 gosub2900:ifkn$="e"orak=0thenreturn
1760 ifst=-128orr=21thenreturn
1770 x=2:gosub4110:lv=1
1780 printchr$(147)"{lblu}";:gosub760:su=0
1790 print"-------------------------------"
1800 print"{lblu}nr.";kn;" - {red}";kn$(kn)
1810 print"{brn}-------------------------------"
1820 print"einnahme oder ausgabe (e/a) ?"
1830 print"-------------------------------"
1840 print
1850 print"{blu} funktion verlassen mit {red}f7{brn}!";
1860 getx$:ifx$<>"e"andx$<>"a"thenifx$<>chr$(136)goto1860
1870 : ifx$=chr$(136)andlv>1thenlv=lv-1:goto2210
1880 : ifx$=chr$(136)thenclose1:close2:return
1890 ba$=x$:rem buchungsart merken
1900 s=30:c=6:gosub830:printba$:s=1:c=9:gosub830
1910 input"monat (1-12)       :     {blu}";mo$:m=val(mo$)
1920 : if m<1 or m>12 then printchr$(145);:goto 1910
1930 print"{brn}-------------------------------"
1940 print"alter stand      : {lblu}";s(m):zs(m)=s(m)
1950 print"{brn}-------------------------------"
1960 print"kostenart, betrag, tag  :{blu}"
1970 inputd$(lv,0),su,bd$
1980 print"{brn}-------------------------------"
1990 ifx$="e"thens(m)=s(m)+su:goto2010
2000 s(m)=s(m)-su
2010 print"neuer stand      : {blu}";s(m)
2020 print"{brn}-------------------------------":print
2030 print"{lblu}alles richtig (j/n) ?{brn}"
2040 get x$:if x$<>"j"and x$<>"n"then 2040
2050 ifx$="n"thens(m)=zs(m):goto1780
2090 iflen(bd$)=1 then bd$=t1$+bd$
2110 :::rem *=*= tag zu datum aufbereiten       *=*= monat/tag/jahr
2120 : d$(lv,2)=mo$+bd$+ja$
2130 : ifba$="a"thensu=su-2*su
2140 : gosub4370:rem nachkommastelle pruefen
2150 : iflen(d$(lv,0))>20thend$(lv,0)=left$(d$(lv,0),20)
2160 : d$(lv,1)=su$
2180 print:print"{blu}weitere buchungen auf diesem konto      (j/n) ?{brn}"
2190 get x$:if x$<>"j"and x$<>"n"then 2190
2200 :ifx$="j"thenlv=lv+1:su=0:printchr$(147);:gosub760:goto1790
2210 printchr$(147):poke211,10:poke214,11:sys58732
2220 print"{lblu}ok. ich speichere !"
2230 rc$=""
2240 rc$=rc$+kn$+left$(bl$,20-len(kn$))
2250 fori=1to12
2260 : s$=str$(s(i))
2270 : rc$=rc$+s$+left$(bl$,10-len(s$))
2280 next i
2290 print#2,"p"+chr$(2)+chr$(kn)+chr$(0)+chr$(1)
2300 print#1,rc$
2310 close1:close2:close3
2320 :
2330 rem == abspeichern der seq.datei
2340 rem == daten anhaengen _ "append"
2350 n$=left$(kn$(kn),12)
2360 open3,8,3,j$+n$+",s,a"
2370 for y=1 to lv
2380 : for i=0 to 2
2390 :  print#3,d$(y,i)
2400 : next i
2410 next y
2420 close3
2430 printchr$(145);:print"{red}weitere buchungen auf anderen konten    (j/n) ?{brn}"
2440 get x$:if x$<>"j"and x$<>"n"then 2440
2450 if x$="j" then 1750
2460 return
2470 rem ============================
2480 rem ***  konten-uebersicht  ****
2490 rem ============================
2500 :
2510 gosub2900:ifkn$="e"orak=0thenreturn
2520 x=3:gosub4110:ifst=-128orr=21thenreturn
2530 printchr$(147);:gosub760
2540 print"{lblu}--------------------------------------{blu}"
2550 print" nr.";kn;"- ";"{red}"kn$"{lblu}"
2560 print"--------------------------------------"
2570 printspc(2)"monat"spc(22)"saldo"
2580 print"--------------------------------------{brn}"
2590 gs=0
2600 fori=1to12
2610 : printspc(2)m$(i);spc(22-len(str$(int(s(i)))))"{lblu}"s(i)"{brn}"
2620 : gs=gs+s(i)
2630 next i
2640 print"--------------------------------------"
2650 printspc(2)"{red}"j$;spc(3)"{brn}gesamt"spc(18-len(str$(int(gs))))"{blu}"gs
2660 printspc(27)"=========="
2670 close1:close2:ifx$=chr$(133)thenprint#4:close4:goto2780
2680 print"weitere uebersichten = {red}f3{blu}"
2690 goto2760
2700 return
2720 rem ============================
2730 rem =*= up ausdrucken ?     ===
2740 rem ============================
2760 poke214,24:poke211,0:sys58732
2770 print"  ausdrucken = {red}f1{blu}   zum menue  = {red}f5{blu}";:printchr$(145);
2780 : getx$:ifx$=chr$(133)goto2820
2790 :  ifx$=chr$(134)andx=3goto2510
2800 :ifx$=chr$(135)goto960
2810 : goto2780
2820 gosub250:ifst=-128thenx$="":goto2760
2830 close4:open4,4:print#4,chr$(27)+chr$(108)+chr$(10):cmd4:ifx=3goto2540
2840 :  ifx=5goto3420
2850 :  ifx=6goto3850
2860 :
2870 rem ============================
2880 rem ** kontennamen ausgeben  ***
2890 rem ============================
2900 x=4:printchr$(147);:gosub760:print
2910 ifak<>0thengosub3120:return
2920 gosub330:ifst=-128orr=21thenreturn
2930 open1,8,2,"konten"+j$+",l,"+chr$(141)
2940 open2,8,15
2950 : ak=1
2960 : print#2,"p"+chr$(2)+chr$(ak)+chr$(0)+chr$(1)
2970 : rc$=""
2980 : input*1,141,rc$:ifleft$(rc$,1)="~"thenrc$="":goto3040
2990 :  input#2,r
3000 :  ifr=50thenrc$="":goto3040
3010 : kn$(ak)=left$(rc$,20):l%=len(str$(ak))
3020 : printspc(3-l%)ak;" - ";kn$(ak)
3030 : ak=ak+1:goto 2960
3040 ak=ak-1:close1:close2:ifak<>0goto3060
3050 printtab(6)"{red}datei "j$" nicht gefunden !{brn}":fori=0to2000:next:return
3060 gosub3130:return
3070 :
3080 rem ** k o n t o  auswaehlen  **
3090 rem ============================
3110 gosub4990
3120 fori=1toak:l%=len(str$(i)):printspc(3-l%)i;kn$(i):nexti
3130 print:print"abbrechen mit {rvon}{red} e {rvof}{brn}"
3140 input"kontonummer (1-20) : ";kn$
3150 : ifkn$="e"orak=0thenreturn
3160 : kn=val(kn$)
3170 : ifkn<1 or kn>akthenprintchr$(145);:goto3140
3180 return
3200 rem ============================
3210 rem ** monatsuebersicht      ***
3220 rem ============================
3240 printchr$(147);:gosub760:print
3250 input"monat  : ";m
3260 : ifm<1orm>12thenprintchr$(145);:goto3250
3270 :
3280 gosub330:ifst=-128orr=21thenreturn
3290 open1,8,2,"konten"+j$+",l,"+chr$(141)
3300 open2,8,15
3310 gs=0:kn=1
3320 print#2,"p"+chr$(2)+chr$(kn)+chr$(0)+chr$(1)
3330 :rc$=""
3340 : input*1,141,rc$:ifleft$(rc$,1)="~"thenrc$="":goto3410
3350 : input#2,r
3360 :  ifr=50thenrc$="":goto3410
3370 : kn$(kn)=left$(rc$,20)
3380 : s$(kn)=mid$(rc$,(20+(m-1)*10),10)
3390 : gs=gs+val(s$(kn))
3400 : kn=kn+1:goto3320
3410 su=gs:gosub4370
3420 printchr$(145)"---------- {red}";m$(m);" "j$" {brn}--------"
3430 print"{blu}nr.   name                saldo"
3440 print"{brn}----------------------------------"
3450 fork=1tokn-1:l%=len(str$(k))
3460 : printspc(3-l%)k;kn$(k);spc(6-len(str$(int(val(s$(k))))))"{lblu}"s$(k)"{brn}"
3470 next
3480 print"{brn}----------------------------------"
3490 printm$(m)" "j$;spc(3)"gesamt "spc(7-(l-1))"{blu}"su$"{brn}"
3500 printspc(24)"=========="
3510 close1:close2:ifx$=chr$(133)thenprint#4:close4
3520 goto2760
3540 rem *** ====================== **
3550 rem ***   jahresuebersicht     **
3560 rem *** ====================== **
3580 printchr$(147);:gosub760:print
3590 print"  saldo  12  monate  ( j/ n ) ?":print:print
3600 getx$:ifx$<>"j"andx$<>"n"goto3600
3610 : ifx$="j"thenu=1:o=12:goto3660
3620 print"geben sie bitte unter- und obergrenze an":input"(u,o) --> ";u,o
3630 if u<1 or u>12 or o<1or o>12thenprintchr$(145)chr$(145)chr$(145);:goto3620
3640 ifu>othent=u:u=o:o=t
3660 gosub330:ifst=-128orr=21thenreturn
3670 printchr$(147);:gosub760:print
3680 open1,8,2,"konten"+j$+",l,"+chr$(141)
3690 open2,8,15
3700 js=0:fork=1toak:ms(k)=0:next:kn=1
3710 : print#2,"p"+chr$(2)+chr$(kn)+chr$(0)+chr$(1)
3720 ::input*1,141,rc$:ifleft$(rc$,1)="~"thenrc$="":goto3840
3730 :  input#2,r
3740 :  if r=50 then rc$="":goto 3840
3750 : kn$(kn)=left$(rc$,20)
3760 : form=utoo
3770 :  s$(kn)=" ":s=0
3780 :  s$(kn)=mid$(rc$,(20+(m-1)*10),10)
3790 :  s=val(s$(kn))
3800 :  ms(kn)=ms(kn)+s
3810 : nextm
3820 : js=js+ms(kn)
3830 kn=kn+1:goto 3710
3840 su=js:gosub4370
3850 print"{brn}-------------- {red}"j$"{brn} --------------"
3860 print"{blu}nr.  name                 saldo"
3870 print"{brn}----------------------------------"
3880 fork=1tokn-1:l%=len(str$(k))
3890 :printspc(3-l%)k;kn$(k);spc(6-len(str$(int(ms(k)))))"{lblu}"ms(k)"{brn}"
3900 next
3910 print"{brn}----------------------------------"
3920 print" {red}";j$;" saldo ";
3930 printleft$(m$(u),3)" - "left$(m$(o),3)spc(9-(l-1))"{blu}"su$"{brn}"
3940 printspc(23)"==========="
3950 close1:close2:ifx$=chr$(133)thenprint#4:close4
3960 goto2760
3980 rem ========================== **
3990 rem *** programmkopf erstellen **
4000 rem ========================== **
4010 printchr$(147);
4020 printtab(4)"================================"
4030 printtab(4)"h a u s h a l t s b u c h   "+j$
4040 printtab(4)"================================"
4050 print:return
4070 rem *** ====================== **
4080 rem **    konto einlesen       **
4090 rem *** ====================== **
4110 gosub330:ifst=-128orr=21thenreturn
4120 printchr$(147);:gosub760:print:print
4130 print:print"{lblu}konto {red}";kn$(kn);"{lblu} wird eingele-sen !{brn}"
4140 open1,8,2,"konten"+j$+",l,"+chr$(141)
4150 open2,8,15
4160 print#2,"p"+chr$(2)+chr$(kn)+chr$(0)+chr$(1)
4170 rc$=""
4180 :input*1,141,rc$:ifleft$(rc$,1)="~"thenrc$="":goto4310
4190 : input#2,r
4200 :  if r<>50 then 4250
4210 print:print"jahresdatei bzw. konto nicht gefunden !":print
4220 print"weiter mit {rvof}{lgrn} taste {rvof}{brn} !";:wait 198,1:poke 198,0
4230 close1:close2:return
4240 :
4250 kn$=left$(rc$,20)
4260 gs=0
4270 for i=1 to 12
4280 : s(i)=val(mid$(rc$,20+(i-1)*10,10))
4290 : gs=gs+s(i)
4300 next i
4310 return
4320 :
4330 rem ==============================
4340 rem = up summenausgabe aufbereiten
4350 rem =    <print using>-simulation
4360 rem ==============================
4370 su$=str$(su):a=len(su$):l=0:fort=1toa:ifmid$(su$,t,1)="."thenl=t:t=a
4380 nextt
4390 : ifl=0thensu$=su$+".00":l=a+1:return
4400 : ifa>=l+2andsu<0thensu=su-.00001:su$=left$(str$(su),l+2):return
4410 : ifa>=l+2andsu>0thensu=su+.00001:su$=left$(str$(su),l+2):return
4420 : ifa=l+1thensu$=su$+"0"
4430 return
4440 :
4450 rem ============================
4460 rem ==   sonderfunktionen     ==
4470 rem ==  seq.buchungsdateien   ==
4480 rem ============================
4490 :
4500 fs$(1)="datei laden       {$a0}"
4510 fs$(2)="datei sichern     {$a0}"
4520 fs$(3)="buchungen ausgeben{$a0}"
4530 fs$(4)="buchungen aendern {$a0}"
4540 fs$(5)="buchungen sortieren"
4550 fs$(0)="s-funktion beenden "
4560 :
4570 fb$(0)="kostenart    "
4580 fb$(1)="betrag       "
4590 fb$(2)="buchungsmonat"
4600 :s%=0
4610 gosub 3990:print
4620 printtab(8)"{red}sonderfunktion":printtab(8)"-----------------"
4630 printtab(8)"{blu}buchungsposten bearbeiten":print
4640 printtab(5)"  {orng} <datei laden> ----> {rvon}{blu}3{rvof} - {rvon}5{rvof}"
4650 printtab(5)"{blu}{rvon}2{rvof}{brn}  datei sichern":print
4660 printtab(5)"{blu}{rvon}3{rvof}{brn}  buchungen ausgeben"
4670 printtab(5)"{blu}{rvon}4{rvof}{brn}  buchungen aendern"
4680 printtab(5)"{blu}{rvon}5{rvof}{brn}  buchungen sortieren":print:print
4690 printtab(5)"{grn}0{brn}  sonderfunktion verlassen":print:print
4700 :
4710 printtab(8)"{red}{rvon} auswahl  0-5 {rvof}{brn} "
4720 :
4730 getf$:iff$="0"thenclose3:gosub4820:return:rem zum hauptmenue
4740 iff$<"2"orf$>"5"then4730
4750 fu=val(f$)
4760 :onfugosub6300,6560,5070,6880,6030
4770 goto4610
4780 :
4790 rem =*=*=  sonderfunktionen verlassen *=*
4800 rem pruefen, ob aenderungen gesichert =*=
4810 :
4820 ifav=0ands%=0thenreturn
4830 printchr$(147):gosub4990:print
4840 ifav=0ands%=1goto4890
4850 print"die datei {red}"kn$(zw)"{brn} wurde","veraendert, aber nicht gesichert !"
4860 print:print"wollen sie sichern ? --->  {red}{rvon} s {rvof}{blu}"
4870 print:print"zurueck zum menue  ? ---> {red}return{blu}":gosub4920:av=0:return
4880 :
4890 print"datei {red}"kn$(zw)"{brn} wurde","sortiert, aber noch nicht gesichert !"
4900 print:print"wollen sie sichern ? --->  {red}{rvon} s {rvof}{blu}":print
4910 print"zurueck zum menue  ? ---> {red}return{blu}"
4920 getx$:ifx$=chr$(13)thenreturn
4930 ifx$="s"thens%=0:gosub6590:return
4940 goto4920
4950 :
4960 rem =*= ueberschrift / funktion
4970 rem ============================
4980 :
4990 printtab(8)"{orng}UCCCCCCCCCCCCCCCCCCCCCCI"
5000 printtab(8)"B ";fs$(fu);"  B"
5010 printtab(8)"JCCCCCCCCCCCCCCCCCCCCCCK{brn}"
5020 print:return
5030 :
5040 rem ============================
5050 rem == buchungen ausgeben     ==
5060 rem ============================
5070 printchr$(147);
5080 gosub4990:print:print"{blu}drucker ({rvon}{red}d{rvof}{blu}) oder bildschirm ({rvon}{red}b{rvof}{blu}) ?"
5090 geta$:aa$=a$:ifa$<>"d"anda$<>"b"goto5090
5100 gosub6300:ifkn$="e"orak=0thenreturn
5110 ifst=-128orr=21thenreturn
5120 ifa$<>"d"goto5180
5130 gosub250:ifst=-128thenzw=0:return
5140 close4:open4,4:print#4,chr$(27)+chr$(108)+chr$(10);
5145 print#4,chr$(10);chr$(14);kn$(kn);"{$a0}";j$;chr$(10)
5150 print#4,"kostenart                  betrag       datum   "
5160 print#4,"------------------------------------------------":print#4
5170 ifz=0thenprint#4:print#4,spc(9)d$(z,0):print#4:close4:return
5180 fu=3:su=0:zz=0
5190 printchr$(147);:gosub4990:print:print kn$(kn):print
5200 ifz=0thenprinttab(90)"{red}"d$(z,0):fori=0to2000:next:return
5210 : sb$(0)="":sb$(2)=""
5220 poke211,3:poke214,13:sys58732:print"{blu}druecken sie bei nicht relevanten"
5230 printtab(3)"feldern  ---->  {red}return{brn}"
5240 poke214,7:print
5250 : printfb$(0);:inputsb$(0)
5260 : printfb$(2);:inputsb$(2)
5270 ifsb$(2)<>""andval(sb$(2))<1orval(sb$(2))>12thenprintchr$(145);:goto5260
5280 printchr$(147);:gosub4990:print"{red}"kn$(kn)" "j$:print"{brn}":iffu=4goto5300
5290 ifsb$(0)=""andsb$(2)=""anda$<>"d"thenfory=1toz:gosub5680:nexty:goto5470
5300 for y=1 to z
5310 : sb=0
5320 : if sb$(0)="" then sb=1:goto 5340
5330 : if left$(d$(y,0),len(sb$(0)))=sb$(0) then sb=sb+1
5340 : ifsb$(2)=""thensb=sb+1:goto5380
5350 :::rem =*= datum 1- od. 2-stellig?
5360 : iflen(d$(y,2))=5andleft$(d$(y,2),1)=sb$(2)thensb=sb+1:goto5380
5370 : iflen(d$(y,2))=6andleft$(d$(y,2),2)=sb$(2)thensb=sb+1
5380 :iffu=4goto5420
5390 :ifa$<>"d"goto5410
5400 : ifsb=2andfu=3thengosub5860:goto5440
5410 : ifsb=2andfu=3thengosub5680:goto5440
5420 : ifsb=2andzz>0thengosub7150:goto5440
5430 : ifsb=2andzz<1thengosub7140
5440 next y
5450 iffu=4ore$="e"thenreturn:rem zu "aenderungen"
5460 ifa$="d"thengosub5960:goto5500
5470 printtab(20)"----------":printtab(10)"{lblu}summe{blu} ";:gosub4370
5480 printtab(26-(l-1))su$;"{brn}"
5490 zz=0
5500 print:print"{red}dateiende erreicht."
5510 print"suchbegriff nicht (nochmals) gefunden !":print
5520 print"{blu}weitere buchungen suchen (j/n) ?"
5530 : get x$: if x$<>"j" and x$<>"n" goto5530
5540 ::ifx$="j"ands%<>0goto5180
5550 :ifx$="n"thenclose3:return
5560 printchr$(145)"{blu}gleiches konto {brn}"kn$(kn),"{blu} (j/n) ?";
5570 :getx$:ifx$<>"j"andx$<>"n"goto5570
5580 :ifx$="j"goto5180
5590 kn=0
5600 printchr$(147):gosub3110:ifkn$="e"orak=0thenreturn
5610 if kn=zw then 5180: rem pruefen,
5620 zw=kn:rem               ob gleiche kn wie vorher
5630 close3:gosub6330:ifaa$="d"thena$=aa$:goto5140
5640 goto5180
5650 ::rem =*=* buchung auf bildschirm
5660 ::rem ============================
5670 :
5680 printd$(y,0);"{blu}";
5690 d=val(d$(y,1)):su=su+d
5700 printtab(29-len(d$(y,1)));d$(y,1);"{brn}";
5710 iflen(d$(y,2))=5 goto 5730
5720 printtab(31);mid$(d$(y,2),3,2)"."left$(d$(y,2),2)"."right$(d$(y,2),2):goto5740
5730 printtab(31);mid$(d$(y,2),2,2)". "left$(d$(y,2),1)"."right$(d$(y,2),2)
5740 zz=zz+1
5750 ify=z-1andzz>=11thenzz=0:gosub5780:goto5770
5760 ifzz>14andy<z-1thenzz=0:gosub5780:rem =*= ausgeben bis 15 stueck
5770 return
5780 printtab(20)"----------":printtab(10);"{lblu}summe{blu} ";:gosub4370
5790 printtab(26-(l-1))su$;"{brn}"
5800 print:print"{lblu}weiter mit {red}{rvon} taste {rvof}";
5810 : wait 198,1:poke 198,0
5820 ::printchr$(147);:gosub4990:print"{red}"kn$(kn)" "j$"{brn}":print
5830 return
5840 : rem **  ausgabe auf drucker   **
5850 : rem ============================
5860 d=val(d$(y,1)):su=su+d
5870 print#4,chr$(27)"d";
5880 print#4,chr$(1)+chr$(34-len(d$(y,1)))+chr$(39)+chr$(0);
5890 print#4,chr$(9);d$(y,0);chr$(9);d$(y,1);
5900 iflen(d$(y,2))=5goto5930
5910 print#4,chr$(9)mid$(d$(y,2),3,2)"."left$(d$(y,2),2)"."right$(d$(y,2),2)
5920 goto5940
5930 print#4,chr$(9)mid$(d$(y,2),2,2)". "left$(d$(y,2),1)"."right$(d$(y,2),2)
5940 return
5950 :
5960 print#4,spc(25)"----------":print#4,spc(10);"{lblu}summe{blu} ";:gosub4370
5970 print#4,spc(15-(l-1));su$;"{brn}":close4:a$="":return
5980 :
5990 rem ============================
6000 rem ==   datei   sortieren    ==
6010 rem ============================
6020 :
6030 gosub6300:ifkn$="e"orak=0thenreturn
6040 ifst=-128orr=21thenreturn
6050 n=z:fu=5:printchr$(147):gosub4990
6060 ifz=0thenprint:printtab(10)"{red}"d$(z,0):fori=0to2000:next:return
6070 for i=0 to 2
6080 ::printtab(8)"{rvon}{red}"i+1"{rvof}{brn}  "fb$(i)
6090 nexti:print:s%=0
6100 printtab(4)"{blu}wonach soll sortiert werden ?"
6110 printtab(4)"geben sie bitte die nummer an !":print
6120 printtab(4)"zurueck zum menue --> {red}return{blu} !"
6130 getx$:ifx$=chr$(13)thenreturn
6140 ifx$<"1"orx$>"3"goto6130
6150 x=val(x$)-1:print
6160 printtab(4)"ich sortiere, bitte warten sie !":s%=1:rem kennz. datei sort.
6170 ifx=0thengosub600:goto6190
6180 gosub420
6190 printtab(4)"{blu}datei {red}"kn$(kn)"{blu} wurde",tab(4)"nach {red}",fb$(x)"{blu} sortiert !"
6200 print:printtab(4)"buchungsposten ausgeben (j/n) ?"
6210 :getx$:ifx$<>"j"andx$<>"n"goto6210
6220 :ifx$="j"thengosub5180
6230 :fu=5:gosub4820
6240 return
6250 :
6260 rem ============================
6270 rem ==   datei   laden        ==
6280 rem ============================
6290 :
6300 gosub2900:ifkn$="e"orak=0thenreturn
6310 ifkn=zwthenreturn:rem      pruefen,
6320 ifs%<>0orav<>0thengosub4820:s%=0:rem ob gleiche kn wie vorher
6330 zw=kn:n$=left$(kn$(kn),12)
6340 printchr$(147):fu=1:gosub 4990
6350 print:print:print"{blu}datei {red}"kn$(kn) "{blu}wird geladen !"
6360 gosub330:ifst=-128orr=21thenreturn
6370 open2,8,15
6380 open3,8,3,j$+n$+",s,r"
6390 input#2,r:ifr<>62goto6410
6400 ::print"datei nicht gefunden !":close2:close3:fort=0to3000:next:return
6410 z=0:input#3,d$(z,0),d$(z,1):ifst=64thenclose3:close2:return
6420 close3
6430 open3,8,3,j$+n$+",s,r"
6440 input#3,d$(0,0)
6450 z=1
6460 :
6470 ::input#3,d$(z,0),d$(z,1),d$(z,2)
6480 :
6490 if st<>64 then z=z+1:goto 6460
6500 close3:close2:return
6510 :
6520 rem ============================
6530 rem ==   datei sichern        ==
6540 rem ============================
6550 :
6560 ifz>0goto6590
6570 poke214,23:poke211,8:sys58732:print"keine daten im rechner"
6580 :forx=0to2000:next:return
6590 printchr$(147);:fu=2:gosub4990
6600 print:print"{blu}diskette eingelegt ?":print
6610 print"{brn}druecken sie anschliessend {red}{rvon} s {rvof}{blu}":print:fori=0to800:next
6620 print:print"wollen sie die geaenderte datei ",kn$(zw)" nicht sichern  ?"
6630 print"dann menue   --->   {red}return{blu}"
6640 getx$:ifx$<>"s"andx$<>chr$(13)goto6640
6650 : ifx$=chr$(13)thenreturn
6660 gosub330:ifst=-128orr=21thenreturn
6670 print:print"buchungsdatei {red}"kn$(zw)"{blu} wird","gesichert !"
6680 n$=left$(kn$(zw),12)
6690 close3:open3,8,15,"s:"+j$+n$
6700 close3:open3,8,3,j$+n$+",s,w"
6710 : print#3,d$(0,0)
6720 : for y=1 to z
6730 :   for i=0 to 2
6740 :     print#3,d$(y,i)
6750 :   next i
6760 : next y
6770 close3
6780 print:av=0:s%=0
6790 print"buchungsdatei {red}"kn$(zw)"{blu} ist  gesichert !":print
6800 print:print"weiter mit {red}taste{blu} !"
6810 wait 198,1:poke 198,0
6820 return
6830 :
6840 rem ============================
6850 rem == buchungen aendern      ==
6860 rem ============================
6870 :
6880 gosub6300:ifkn$="e"orak=0thenreturn
6890 ifst=-128orr=21thenreturn
6900 printchr$(147):fu=4:gosub 4990
6910 ifz=0thenprint:printtab(9)"{red}"d$(z,0):fori=0to2000:next:return
6920 zz=0:zs=10:av=0:print
6930 print"{blu}wenn sie gezielt buchungpositionen oder monate aendern wollen,";
6940 print" geben sie bitte"," {red}{rvon}e{blu}{rvof}  ein."
6950 print:print"{red}return{lblu} listet die datei vollstaendig           auf !"
6960 gete$:ife$<>"e"ande$<>chr$(13)goto6960
6970 ife$="e"thengosub5190:goto7060
6980 :
6990 rem =*= alle pos. auflisten =*=
7000 rem ===========================
7010 printchr$(147);:gosub 4990
7020 gosub 7780
7030 for y=1 to z
7040 :   gosub 7150
7050 next y
7060 print:print"{blu}dateiende erreicht !"
7070 ife$=chr$(13)then7280
7080 ifzz<>0ande$="e"thene$="":goto7280
7090 :::fori=1to2000:next
7100 return
7110 :
7120 rem =*= ausgabe auf bildschirm ==
7130 rem ===-----------------------===
7140 gosub7780:rem bei einzel-selekt.
7150 ify<11ande$<>"e"thenprintspc(3-len(str$(y)))"{red}"y"{brn}"d$(y,0)"{blu}";:goto7170
7160 printspc(4-len(str$(y)))"{red}"y"{brn}"d$(y,0)"{blu}";
7170 printtab(30-len(d$(y,1)));d$(y,1)"{orng}";
7180 iflen(d$(y,2))=5goto7210
7190 printtab(31);mid$(d$(y,2),3,2)"."left$(d$(y,2),2)"."right$(d$(y,2),2)
7200 goto7220
7210 printtab(31);mid$(d$(y,2),2,2)". "left$(d$(y,2),1)"."right$(d$(y,2),2)
7220 zz=zz+1
7230 :ifzz=zsandzz<zthenzs=zs+10:gosub7280
7240 return
7250 :
7260 rem =*= aenderungsabfrage =*=
7270 :
7280 print:print"{red}aenderungen (j/n) ?"
7290 : get x$:if x$<>"j"and x$<>"n" then 7290
7300 : if x$="n"and y<z then printchr$(147):gosub 4990:gosub 7780:return
7310 : ifx$="n"andy>=zandav=1thengosub6590:return:rem aend.sichern
7320 : ifx$="n"andy>=zandav=0thenreturn:rem keine aenderung-->menue
7330 :printchr$(145)"                                       ":rem 39 x leert.
7340 :
7350 rem =*= aenderung         =*=
7360 rem =========================
7370 c=17:s=0:gosub830
7380 print"{lblu}geben sie bitte die zu aendernde posi-  tion ein (zeile, spalte) !"
7390 :inputa,b:b=b-1:ifb<>0andb<>2goto7370
7400 : ifa<1ora>ygoto7370
7410 : ify-1=zanda>y-1orb>2orb<0thenc=17:s=0:gosub830:goto7380
7420 : ifb<>2goto7470
7430 : iflen(d$(a,2))=5goto7460
7440 : printtab(2);mid$(d$(a,2),3,2)"."left$(d$(a,2),2)"."right$(d$(a,2),2)
7450 : goto7480
7460 : printtab(2);mid$(d$(a,2),2,2)". "left$(d$(a,2),1)"."right$(d$(a,2),2)
7470 ifb<>2thenprint"{brn}  ";d$(a,b)
7480 print:print"bitte aendern sie !                    ":av=1
7490 c=20:s=0:gosub830
7500 :
7510 inputd$(a,b):print"  {red}"d$(a,b):iflen(d$(a,b))>20thend$(a,b)=left$(d$(a,b),20)
7520 ifb<>2goto7590:rem datum pruefen
7530 ifmid$(d$(a,2),3,1)="."andmid$(d$(a,2),6,1)="."goto7570
7540 ifmid$(d$(a,2),2,1)="."andmid$(d$(a,2),4,1)="."thengosub7710:goto7590
7550 ifmid$(d$(a,2),2,1)="."andmid$(d$(a,2),5,1)="."thengosub7720:goto7590
7560 ifmid$(d$(a,2),3,1)="."andmid$(d$(a,2),5,1)="."thengosub7730:goto7590
7570 d$(a,2)=mid$(d$(a,2),4,2)+left$(d$(a,2),2)+right$(d$(a,2),2)
7580 :
7590 print" weitere aenderungen (j/n) ?"
7600 : getx$:if x$<>"j"and x$<>"n"then 7600
7610 ::ifx$="n"andy<zthenprintchr$(147):gosub4990:gosub7780:return
7620 :ifx$="n"andy>=zandav=1thengosub6590:return:rem aend.sichern
7630 c=19:s=1:gosub830
7640 print"{blu}        "
7650 print"                                       ":rem 39 x leertaste
7660 print"                                       "
7670 c=17:s=0:gosub830
7680 goto7380
7690 :
7700 rem =*= datum aufbereiten mmttjj *
7710 d$(a,2)=mid$(d$(a,2),3,1)+"0"+left$(d$(a,2),1)+right$(d$(a,2),2):return
7720 d$(a,2)=mid$(d$(a,2),3,2)+"0"+left$(d$(a,2),1)+right$(d$(a,2),2):return
7730 d$(a,2)=mid$(d$(a,2),4,1)+left$(d$(a,2),2)+right$(d$(a,2),2):return
7740 :
7750 rem =*= spalten-beschriftung =*=
7760 rem ===========================
7770 :
7780 printtab(5)"{red}1";tab(26)"2";tab(33)"3":print:return
7790 :
7800 rem ==============================
7810 rem ** datas fuer input-modifikat.
7820 rem ==============================
7830 fori=828to922
7840 readx:pokei,x:s=s+x:nexti
7850 data169,71,160,3,141,8,3,140,9,3,96,32
7860 data115,0,201,133,240,6,32,121,0,76,231,167
7870 data32,115,0,201,172,240,6,32,191,171,76,174
7880 data167,32,155,183,32,30,225,32,253,174,32,158
7890 data183,138,72,32,253,174,32,139,176,133,73,132
7900 data74,32,163,182,104,32,117,180,160,2,185,97
7910 data0,145,73,136,16,248,200,32,18,225,145,98
7920 data200,196,97,208,246,32,204,255,76,174,167
7930 ifs<>11096thenprint"fehler in datas!!":end
7940 sys828:return
7945 rem ==============================
7950 rem * swap - funktion simulieren *
7960 rem ==============================
7970 rem syntax:sys715(string1,string2)
7980 rem ==============================
7990 data 32,250,174,32,158,173,32,143,173,165,100,133,247,165,101,133
8000 data248,32,253,174,32,158,173,32,143,173,160,0,177,247,133,249
8010 data177,100,145,247,165,249,145,100,200,192,3,208,239,32,247,174,96
8030 sa=715:se=sa+48:fori=satose:readx:pokei,x:cs=cs+x:next
8040 ifcs<>7314thenprint"fehler in data's":end
8050 return
  1 REM ********************************* 
  2 REM * > H A U S H A L T S B U C H < * 
  3 REM *                               * 
  4 REM *     MARTIN SCHUMANN           * 
  5 REM ********************************* 
 40 PRINTCHR$ (147):POKE 211,12:POKE 214,10:SYS 58732:PRINT"ICH LESE DATEN !" 
 50 GOSUB 7830:GOSUB 7970:DIM SB$(2),F$(7),FS$(5) 
 60 DIM MS(20),M$(12),D$(200,2),S(12),ZS(12),N$(20),S$(20),KN$(20):T1$="0" 
 70 M$(1)="JANUAR{3SPACE}":M$(2)="FEBRUAR{2SPACE}" 
 80 M$(3)="MAERZ{4SPACE}":M$(4)="APRIL{4SPACE}" 
 90 M$(5)="MAI{6SPACE}":M$(6)="JUNI{5SPACE}" 
 100 M$(7)="JULI{5SPACE}":M$(8)="AUGUST{3SPACE}" 
 110 M$(9)="SEPTEMBER":M$(10)="OKTOBER{2SPACE}" 
 120 M$(11)="NOVEMBER ":M$(12)="DEZEMBER " 
 130 F$(1)=" KONTEN ANLEGEN{6SPACE}" 
 140 F$(2)=" BUCHEN{14SPACE}" 
 150 F$(3)=" KONTENUEBERSICHT{4SPACE}" 
 160 F$(4)=" KONTENNAMEN AUSGEBEN" 
 170 F$(5)=" MONATSUEBERSICHT{4SPACE}" 
 180 F$(6)=" JAHRESUEBERSICHT{4SPACE}" 
 190 F$(7)=" BUCHUNGSPOSTEN ABFR." 
 200 F$(0)=" PROGRAMM BEENDEN{4SPACE}" 
 210 F%=PEEK (768):GOTO 880 
 220 REM 
 230 REM =*=  D R U C K E R  VORHANDEN? 
 240 REM 
 250 POKE 768,185:OPEN 1,4:PRINT#1,"":CLOSE 1:POKE 768,F% 
 260 IF ST<>-128GOTO 290 
 270 POKE 214,24:POKE 211,2:SYS 58732:PRINT"{6SPACE}DRUCKER NICHT BEREIT !{9SPACE}"; 
 280 :FOR I=0 TO2500:NEXT 
 290 RETURN 
 300 REM 
 310 REM =*=   F L O P P Y   VORHANDEN? 
 320 REM 
 330 POKE 768,185:OPEN 1,8,15,"I":CLOSE 1:POKE 768,F% 
 340 IF ST<>-128GOTO 365 
 350 C=23:S=9:GOSUB 830:PRINT"{RED,SPACE}FLOPPY NICHT BEREIT !" 
 360 :FOR I=0 TO2500:NEXT :RETURN 
 365 OPEN 1,8,15,"M-W"+CHR$ (7)+CHR$ (28)+CHR$ (1)+CHR$ (15):REM FLOPPYZUGRIFF BESCHL. 
 370 INPUT#1,R:CLOSE 1 
 375 IF R=21 THENS=9:C=23:GOSUB 830:PRINT"{RED}DISKETTE EINLEGEN !":FOR I=0 TO3500:NEXT 
 380 RETURN 
 390 REM ============================== 
 400 REM **  SHELL - SORT /(NUM.)    ** 
 410 REM ============================== 
 420 D=4 
 430 IF D<N THEND=D+D:GOTO 430 
 440 D=D-1 
 450 D=INT (D/2) 
 460 IF D<1 THENRETURN 
 470 FOR J=1 TON-D 
 480 :FOR I=J TO1STEP -D 
 490 : IF VAL (D$(I+D,X))>=VAL (D$(I,X))GOTO 540 
 500 :  FOR T=0 TO2 
 510 :   SYS 715(D$(I,T),D$(I+D,T)) 
 520 :  NEXT T 
 530 :NEXT I 
 540 NEXT J 
 550 GOTO 450 
 570 REM =========================== 
 580 REM **   SHELL - SORT/ALPHA     ** 
 590 REM =========================== 
 600 D=4 
 610 IF D<N THEND=D+D:GOTO 610 
 620 D=D-1 
 630 D=INT (D/2) 
 640 IF D<1 THENRETURN 
 650 FOR J=1 TON-D 
 660 :FOR I=J TO1STEP -D 
 670 : IF D$(I+D,X)>=D$(I,X) THEN720 
 680 :  FOR T=0 TO2 
 690 :   SYS 715(D$(I,T),D$(I+D,T)) 
 700 : NEXT T 
 710 :NEXT I 
 720 NEXT J 
 730 GOTO 630 
 740 REM 
 750 REM *=* U E B E R S C H R I F T E N 
 760 PRINTTAB( 8)"{ORANGE}UCCCCCCCCCCCCCCCCCCCCCCI":REM 22 CHR$(99)=SHIFT C 
 770 PRINTTAB( 8)"B";F$(X);" B":REM MENUEFUNKTIONEN 
 780 PRINTTAB( 8)"JCCCCCCCCCCCCCCCCCCCCCCK{BROWN}":REM COM-TASTE+2 
 790 RETURN 
 810 REM =*= CURSOR POSITIONIEREN =*= 
 830 POKE 211,S:POKE 214,C:SYS 58732:RETURN 
 850 REM **  ERSTER BILDSCHIRM      **** 
 860 REM =============================== 
 870 : 
 880 POKE 53281,7:POKE 53280,8:PRINT"{BROWN}":BL$="{SPACE,19SPACE}":REM 20 BLANK 
 890 GOSUB 4010:POKE 788,52:REM STOP AUS 
 900 INPUT"AKTUELLES JAHR (1984-1999): ";J$:JA$=RIGHT$ (J$,2) 
 910 :IF J$<"1983"OR J$>"1999" THENPRINT"UNZULAESSIGES JAHR!":PRINT"{2UP}";:GOTO 900 
 920 REM       SHIFT/CRSR↑ <CHR$(145)> 
 930 REM =============================== 
 940 REM  MENUE / AUFRUF UNTERPROGRAMME 
 950 REM =============================== 
 960 GOSUB 4010 
 970 PRINTTAB( 10)"{RED}FUNKTIONSAUSWAHL:" 
 980 PRINTTAB( 10)"-----------------":PRINT 
 990 PRINTTAB( 5)"{BLUE}-1-{BROWN,2SPACE}KONTEN ANLEGEN" 
 1000 PRINTTAB( 5)"{BLUE}-2-{BROWN,2SPACE}BUCHEN":PRINT 
 1010 PRINTTAB( 5)"{BLUE}-3-{BROWN,2SPACE}KONTENUEBERSICHT":PRINT 
 1020 PRINTTAB( 5)"{2SPACE,ORANGE,2SPACE}<KONTENNAMEN AUSGEBEN>":PRINTTAB( 11)"----->{SPACE,BLUE}2-3,5-7" 
 1030 PRINTTAB( 45)"{BLUE}-5-{BROWN,2SPACE}MONATSUEBERSICHT" 
 1040 PRINTTAB( 5)"{BLUE}-6-{BROWN,2SPACE}JAHRESUEBERSICHT":PRINT 
 1050 PRINTTAB( 5)"{BLUE}-7-{BROWN,2SPACE}BUCHUNGSPOSTEN ABFRAGEN":PRINT 
 1060 PRINTTAB( 5)"{GREEN}-0-{BROWN,2SPACE}PROGRAMM BEENDEN":PRINT 
 1070 PRINTTAB( 10)"{RVSON,RED,SPACE}AUSWAHL (0-7){SPACE,RVOFF,BROWN}" 
 1080 GET X$: IF X$<"0"OR X$>"7" THEN1080 
 1090 : X=VAL (X$):IF X=0 GOTO 1200 
 1100 : IF X<>4GOTO 1130 
 1110 :  S=6:C=22:GOSUB 830:PRINT"{RED}WERDEN BEI DEN UEBRIGEN FUNKTIO-" 
 1120 :  PRINTTAB( 6)"NEN AUTOMATISCH AUSGEGEBEN";:FOR I=0 TO2000:NEXT :GOTO 960 
 1130 : ON X GOSUB 1310,1750,2510,2890,3240,3580,4500 
 1140 GOTO 960 
 1160 REM ========================== 
 1170 REM ** PROGRAMM BEENDEN     ** 
 1180 REM ========================== 
 1200 GOSUB 4010:GOSUB 760:PRINT:PRINT:PRINT 
 1210 CLOSE 1:CLOSE 2:CLOSE 3 
 1220 PRINT"SOLLTEN SIE VERSEHENTLICH DAS PROGRAMM{2SPACE}BEENDET HABEN, SO KOENNEN "; 
 1230 PRINT"SIE ES MIT",TAB( 15)CHR$ (17)"{RVSON,RED,SPACE}GOTO 960{SPACE,RVOFF,BROWN}"CHR$ (17),,"WIEDER "; 
 1240 PRINT"STARTEN !":POKE 788,49:REM STOP EIN 
 1250 S=0:C=13:GOSUB 830:SYS 42115:REM END OHNE READY 
 1270 REM ***======================*** 
 1280 REM ===  KONTEN ANLEGEN      === 
 1290 REM ***======================*** 
 1310 GOSUB 4010:GOSUB 760:REM GEW.FUNKT. 
 1320 PRINT"{BLUE}ACHTUNG ! EINE EVTL. BEREITS ANGELEGTE{SPACE,SPACE}DATEI DIESES JAHRES WIRD"; 
 1330 PRINT" GELOESCHT.":PRINTCHR$ (28) 
 1340 PRINT"{RED}WOLLEN SIE DAS (J/N)" 
 1350 GET X$:IF X$<>"J"AND X$<>"N" THEN1350 
 1360 :IF X$="N" THENRETURN 
 1370 GOSUB 330:IF ST=-128OR R=21 THENRETURN 
 1380 OPEN 3,8,15,"S:"+J$+"*":CLOSE 3:AK=0 
 1390 OPEN 2,8,15,"S:KONTEN"+J$ 
 1400 PRINTCHR$ (147);:GOSUB 760 
 1410 PRINT:PRINT" WIEVIELE KONTEN WOLLEN SIE ANLEGEN" 
 1420 PRINT"{2SPACE,RED,RVSON,SPACE}0{SPACE,RVOFF,BROWN,2SPACE}= KEINE KONTEN NEU ANLEGEN{3SPACE}":INPUT"(1-20) ";KZ 
 1430 : IF KZ=0 THENCLOSE 1:CLOSE 2:RETURN 
 1440 : IF KZ<1OR KZ>20 THENPRINTCHR$ (145)CHR$ (145)CHR$ (145);:GOTO 1420 
 1450 OPEN 1,8,2,"KONTEN"+J$+",L,"+CHR$ (141) 
 1460 PRINTCHR$ (145);:ZZ=0:D$(0,0)="NOCH KEINE BUCHUNGEN" 
 1470 S=1:C=4:GOSUB 830:PRINT"<{RED,RVSON}RETURN{RVOFF,BROWN}> = KONTEN ANLEGEN ABBRECHEN{2SPACE}" 
 1480 PRINT"{37SPACE}" 
 1490 PRINT"{37SPACE}":REM 36 X SPACE 
 1500 FOR I=1 TOKZ 
 1510 :PRINT"NAME KONTO NR.";SPC( 3-LEN (STR$ (I)))I":"; 
 1520 : INPUT KN$ 
 1530 :  IF KN$="" THENI=KZ:GOTO 1610 
 1540 :  IF LEN (KN$)>20  THEN KN$=LEFT$ (KN$,20) 
 1550 : RC$=KN$+LEFT$ (BL$,20-LEN (KN$)) 
 1560 : N$(I)=LEFT$ (RC$,12) 
 1570 : FOR T=1  TO 12 
 1580 :  RC$=RC$+STR$ (0)+LEFT$ (BL$,10-LEN (STR$ (0))) 
 1590 : NEXT T:ZZ=ZZ+1 
 1600 : PRINT#1,RC$:KN$="" 
 1610 NEXT I 
 1620 CLOSE 1:CLOSE 2:CLOSE 3 
 1630 IF ZZ<KZ THENKZ=ZZ:REM ABBRUCH ? 
 1640 FOR I=1  TO KZ 
 1650 : OPEN 3,8,3,J$+N$(I)+",S,W" 
 1660 :  PRINT#3,D$(0,0) 
 1670 : CLOSE 3 
 1680 NEXT I 
 1690 CLOSE 1:CLOSE 2:CLOSE 3:RETURN 
 1710 REM ============================ 
 1720 REM ***    B U C H E N       *** 
 1730 REM ============================ 
 1750 GOSUB 2900:IF KN$="E"OR AK=0 THENRETURN 
 1760 IF ST=-128OR R=21 THENRETURN 
 1770 X=2:GOSUB 4110:LV=1 
 1780 PRINTCHR$ (147)"{LIG.BLUE}";:GOSUB 760:SU=0 
 1790 PRINT"-------------------------------" 
 1800 PRINT"{LIG.BLUE}NR.";KN;" -{SPACE,RED}";KN$(KN) 
 1810 PRINT"{BROWN}-------------------------------" 
 1820 PRINT"EINNAHME ODER AUSGABE (E/A) ?" 
 1830 PRINT"-------------------------------" 
 1840 PRINT 
 1850 PRINT"{BLUE,SPACE}FUNKTION VERLASSEN MIT{SPACE,RED}F7{BROWN}!"; 
 1860 GET X$:IF X$<>"E"AND X$<>"A" THENIF X$<>CHR$ (136)GOTO 1860 
 1870 : IF X$=CHR$ (136)AND LV>1 THENLV=LV-1:GOTO 2210 
 1880 : IF X$=CHR$ (136) THENCLOSE 1:CLOSE 2:RETURN 
 1890 BA$=X$:REM BUCHUNGSART MERKEN 
 1900 S=30:C=6:GOSUB 830:PRINTBA$:S=1:C=9:GOSUB 830 
 1910 INPUT"MONAT (1-12){7SPACE}:{5SPACE,BLUE}";MO$:M=VAL (MO$) 
 1920 : IF M<1 OR M>12  THEN PRINTCHR$ (145);:GOTO 1910 
 1930 PRINT"{BROWN}-------------------------------" 
 1940 PRINT"ALTER STAND{6SPACE}:{SPACE,LIG.BLUE}";S(M):ZS(M)=S(M) 
 1950 PRINT"{BROWN}-------------------------------" 
 1960 PRINT"KOSTENART, BETRAG, TAG{2SPACE}:{BLUE}" 
 1970 INPUTD$(LV,0),SU,BD$ 
 1980 PRINT"{BROWN}-------------------------------" 
 1990 IF X$="E" THENS(M)=S(M)+SU:GOTO 2010 
 2000 S(M)=S(M)-SU 
 2010 PRINT"NEUER STAND{6SPACE}:{SPACE,BLUE}";S(M) 
 2020 PRINT"{BROWN}-------------------------------":PRINT 
 2030 PRINT"{LIG.BLUE}ALLES RICHTIG (J/N) ?{BROWN}" 
 2040 GET X$:IF X$<>"J"AND X$<>"N" THEN 2040 
 2050 IF X$="N" THENS(M)=ZS(M):GOTO 1780 
 2090 IF LEN (BD$)=1  THEN BD$=T1$+BD$ 
 2110 :::REM *=*= TAG ZU DATUM AUFBEREITEN       *=*= MONAT/TAG/JAHR 
 2120 : D$(LV,2)=MO$+BD$+JA$ 
 2130 : IF BA$="A" THENSU=SU-2*SU 
 2140 : GOSUB 4370:REM NACHKOMMASTELLE PRUEFEN 
 2150 : IF LEN (D$(LV,0))>20 THEND$(LV,0)=LEFT$ (D$(LV,0),20) 
 2160 : D$(LV,1)=SU$ 
 2180 PRINT:PRINT"{BLUE}WEITERE BUCHUNGEN AUF DIESEM KONTO{SPACE,5SPACE}(J/N) ?{BROWN}" 
 2190 GET X$:IF X$<>"J"AND X$<>"N" THEN 2190 
 2200 :IF X$="J" THENLV=LV+1:SU=0:PRINTCHR$ (147);:GOSUB 760:GOTO 1790 
 2210 PRINTCHR$ (147):POKE 211,10:POKE 214,11:SYS 58732 
 2220 PRINT"{LIG.BLUE}OK. ICH SPEICHERE !" 
 2230 RC$="" 
 2240 RC$=RC$+KN$+LEFT$ (BL$,20-LEN (KN$)) 
 2250 FOR I=1 TO12 
 2260 : S$=STR$ (S(I)) 
 2270 : RC$=RC$+S$+LEFT$ (BL$,10-LEN (S$)) 
 2280 NEXT I 
 2290 PRINT#2,"P"+CHR$ (2)+CHR$ (KN)+CHR$ (0)+CHR$ (1) 
 2300 PRINT#1,RC$ 
 2310 CLOSE 1:CLOSE 2:CLOSE 3 
 2320 : 
 2330 REM == ABSPEICHERN DER SEQ.DATEI 
 2340 REM == DATEN ANHAENGEN ← "APPEND" 
 2350 N$=LEFT$ (KN$(KN),12) 
 2360 OPEN 3,8,3,J$+N$+",S,A" 
 2370 FOR Y=1  TO LV 
 2380 : FOR I=0  TO 2 
 2390 :  PRINT#3,D$(Y,I) 
 2400 : NEXT I 
 2410 NEXT Y 
 2420 CLOSE 3 
 2430 PRINTCHR$ (145);:PRINT"{RED}WEITERE BUCHUNGEN AUF ANDEREN KONTEN{SPACE,3SPACE}(J/N) ?{BROWN}" 
 2440 GET X$:IF X$<>"J"AND X$<>"N" THEN 2440 
 2450 IF X$="J"  THEN 1750 
 2460 RETURN 
 2470 REM ============================ 
 2480 REM ***  KONTEN-UEBERSICHT  **** 
 2490 REM ============================ 
 2500 : 
 2510 GOSUB 2900:IF KN$="E"OR AK=0 THENRETURN 
 2520 X=3:GOSUB 4110:IF ST=-128OR R=21 THENRETURN 
 2530 PRINTCHR$ (147);:GOSUB 760 
 2540 PRINT"{LIG.BLUE}--------------------------------------{BLUE}" 
 2550 PRINT" NR.";KN;"- ";"{RED}"KN$"{LIG.BLUE}" 
 2560 PRINT"--------------------------------------" 
 2570 PRINTSPC( 2)"MONAT"SPC( 22)"SALDO" 
 2580 PRINT"--------------------------------------{BROWN}" 
 2590 GS=0 
 2600 FOR I=1 TO12 
 2610 : PRINTSPC( 2)M$(I);SPC( 22-LEN (STR$ (INT (S(I)))))"{LIG.BLUE}"S(I)"{BROWN}" 
 2620 : GS=GS+S(I) 
 2630 NEXT I 
 2640 PRINT"--------------------------------------" 
 2650 PRINTSPC( 2)"{RED}"J$;SPC( 3)"{BROWN}GESAMT"SPC( 18-LEN (STR$ (INT (GS))))"{BLUE}"GS 
 2660 PRINTSPC( 27)"==========" 
 2670 CLOSE 1:CLOSE 2:IF X$=CHR$ (133) THENPRINT#4:CLOSE 4:GOTO 2780 
 2680 PRINT"WEITERE UEBERSICHTEN ={SPACE,RED}F3{BLUE}" 
 2690 GOTO 2760 
 2700 RETURN 
 2720 REM ============================ 
 2730 REM =*= UP AUSDRUCKEN ?     === 
 2740 REM ============================ 
 2760 POKE 214,24:POKE 211,0:SYS 58732 
 2770 PRINT"{2SPACE}AUSDRUCKEN ={SPACE,RED}F1{BLUE,3SPACE}ZUM MENUE{2SPACE}={SPACE,RED}F5{BLUE}";:PRINTCHR$ (145); 
 2780 : GET X$:IF X$=CHR$ (133)GOTO 2820 
 2790 :  IF X$=CHR$ (134)AND X=3GOTO 2510 
 2800 :IF X$=CHR$ (135)GOTO 960 
 2810 : GOTO 2780 
 2820 GOSUB 250:IF ST=-128 THENX$="":GOTO 2760 
 2830 CLOSE 4:OPEN 4,4:PRINT#4,CHR$ (27)+CHR$ (108)+CHR$ (10):CMD 4:IF X=3GOTO 2540 
 2840 :  IF X=5GOTO 3420 
 2850 :  IF X=6GOTO 3850 
 2860 : 
 2870 REM ============================ 
 2880 REM ** KONTENNAMEN AUSGEBEN  *** 
 2890 REM ============================ 
 2900 X=4:PRINTCHR$ (147);:GOSUB 760:PRINT 
 2910 IF AK<>0 THENGOSUB 3120:RETURN 
 2920 GOSUB 330:IF ST=-128OR R=21 THENRETURN 
 2930 OPEN 1,8,2,"KONTEN"+J$+",L,"+CHR$ (141) 
 2940 OPEN 2,8,15 
 2950 : AK=1 
 2960 : PRINT#2,"P"+CHR$ (2)+CHR$ (AK)+CHR$ (0)+CHR$ (1) 
 2970 : RC$="" 
 2980 : INPUT*1,141,RC$:IF LEFT$ (RC$,1)="" THENRC$="":GOTO 3040 
 2990 :  INPUT#2,R 
 3000 :  IF R=50 THENRC$="":GOTO 3040 
 3010 : KN$(AK)=LEFT$ (RC$,20):L%=LEN (STR$ (AK)) 
 3020 : PRINTSPC( 3-L%)AK;" - ";KN$(AK) 
 3030 : AK=AK+1:GOTO 2960 
 3040 AK=AK-1:CLOSE 1:CLOSE 2:IF AK<>0GOTO 3060 
 3050 PRINTTAB( 6)"{RED}DATEI "J$" NICHT GEFUNDEN !{BROWN}":FOR I=0 TO2000:NEXT :RETURN 
 3060 GOSUB 3130:RETURN 
 3070 : 
 3080 REM ** K O N T O  AUSWAEHLEN  ** 
 3090 REM ============================ 
 3110 GOSUB 4990 
 3120 FOR I=1 TOAK:L%=LEN (STR$ (I)):PRINTSPC( 3-L%)I;KN$(I):NEXT I 
 3130 PRINT:PRINT"ABBRECHEN MIT{SPACE,RVSON,RED,SPACE}E{SPACE,RVOFF,BROWN}" 
 3140 INPUT"KONTONUMMER (1-20) : ";KN$ 
 3150 : IF KN$="E"OR AK=0 THENRETURN 
 3160 : KN=VAL (KN$) 
 3170 : IF KN<1 OR KN>AK THENPRINTCHR$ (145);:GOTO 3140 
 3180 RETURN 
 3200 REM ============================ 
 3210 REM ** MONATSUEBERSICHT      *** 
 3220 REM ============================ 
 3240 PRINTCHR$ (147);:GOSUB 760:PRINT 
 3250 INPUT"MONAT{2SPACE}: ";M 
 3260 : IF M<1OR M>12 THENPRINTCHR$ (145);:GOTO 3250 
 3270 : 
 3280 GOSUB 330:IF ST=-128OR R=21 THENRETURN 
 3290 OPEN 1,8,2,"KONTEN"+J$+",L,"+CHR$ (141) 
 3300 OPEN 2,8,15 
 3310 GS=0:KN=1 
 3320 PRINT#2,"P"+CHR$ (2)+CHR$ (KN)+CHR$ (0)+CHR$ (1) 
 3330 :RC$="" 
 3340 : INPUT*1,141,RC$:IF LEFT$ (RC$,1)="" THENRC$="":GOTO 3410 
 3350 : INPUT#2,R 
 3360 :  IF R=50 THENRC$="":GOTO 3410 
 3370 : KN$(KN)=LEFT$ (RC$,20) 
 3380 : S$(KN)=MID$ (RC$,(20+(M-1)*10),10) 
 3390 : GS=GS+VAL (S$(KN)) 
 3400 : KN=KN+1:GOTO 3320 
 3410 SU=GS:GOSUB 4370 
 3420 PRINTCHR$ (145)"----------{SPACE,RED}";M$(M);" "J$"{SPACE,BROWN}--------" 
 3430 PRINT"{BLUE}NR.{SPACE,2SPACE}NAME{16SPACE}SALDO" 
 3440 PRINT"{BROWN}----------------------------------" 
 3450 FOR K=1 TOKN-1:L%=LEN (STR$ (K)) 
 3460 : PRINTSPC( 3-L%)K;KN$(K);SPC( 6-LEN (STR$ (INT (VAL (S$(K))))))"{LIG.BLUE}"S$(K)"{BROWN}" 
 3470 NEXT 
 3480 PRINT"{BROWN}----------------------------------" 
 3490 PRINTM$(M)" "J$;SPC( 3)"GESAMT "SPC( 7-(L-1))"{BLUE}"SU$"{BROWN}" 
 3500 PRINTSPC( 24)"==========" 
 3510 CLOSE 1:CLOSE 2:IF X$=CHR$ (133) THENPRINT#4:CLOSE 4 
 3520 GOTO 2760 
 3540 REM *** ====================== ** 
 3550 REM ***   JAHRESUEBERSICHT     ** 
 3560 REM *** ====================== ** 
 3580 PRINTCHR$ (147);:GOSUB 760:PRINT 
 3590 PRINT"{2SPACE}SALDO{2SPACE}12{2SPACE}MONATE{2SPACE}( J/ N ) ?":PRINT:PRINT 
 3600 GET X$:IF X$<>"J"AND X$<>"N"GOTO 3600 
 3610 : IF X$="J" THENU=1:O=12:GOTO 3660 
 3620 PRINT"GEBEN SIE BITTE UNTER- UND OBERGRENZE AN":INPUT"(U,O) --> ";U,O 
 3630 IF U<1 OR U>12 OR O<1OR O>12 THENPRINTCHR$ (145)CHR$ (145)CHR$ (145);:GOTO 3620 
 3640 IF U>O THENT=U:U=O:O=T 
 3660 GOSUB 330:IF ST=-128OR R=21 THENRETURN 
 3670 PRINTCHR$ (147);:GOSUB 760:PRINT 
 3680 OPEN 1,8,2,"KONTEN"+J$+",L,"+CHR$ (141) 
 3690 OPEN 2,8,15 
 3700 JS=0:FOR K=1 TOAK:MS(K)=0:NEXT :KN=1 
 3710 : PRINT#2,"P"+CHR$ (2)+CHR$ (KN)+CHR$ (0)+CHR$ (1) 
 3720 ::INPUT*1,141,RC$:IF LEFT$ (RC$,1)="" THENRC$="":GOTO 3840 
 3730 :  INPUT#2,R 
 3740 :  IF R=50  THEN RC$="":GOTO 3840 
 3750 : KN$(KN)=LEFT$ (RC$,20) 
 3760 : FOR M=U TOO 
 3770 :  S$(KN)=" ":S=0 
 3780 :  S$(KN)=MID$ (RC$,(20+(M-1)*10),10) 
 3790 :  S=VAL (S$(KN)) 
 3800 :  MS(KN)=MS(KN)+S 
 3810 : NEXT M 
 3820 : JS=JS+MS(KN) 
 3830 KN=KN+1:GOTO 3710 
 3840 SU=JS:GOSUB 4370 
 3850 PRINT"{BROWN}--------------{SPACE,RED}"J$"{BROWN,SPACE}--------------" 
 3860 PRINT"{BLUE}NR.{SPACE,SPACE}NAME{17SPACE}SALDO" 
 3870 PRINT"{BROWN}----------------------------------" 
 3880 FOR K=1 TOKN-1:L%=LEN (STR$ (K)) 
 3890 :PRINTSPC( 3-L%)K;KN$(K);SPC( 6-LEN (STR$ (INT (MS(K)))))"{LIG.BLUE}"MS(K)"{BROWN}" 
 3900 NEXT 
 3910 PRINT"{BROWN}----------------------------------" 
 3920 PRINT"{SPACE,RED}";J$;" SALDO "; 
 3930 PRINTLEFT$ (M$(U),3)" - "LEFT$ (M$(O),3)SPC( 9-(L-1))"{BLUE}"SU$"{BROWN}" 
 3940 PRINTSPC( 23)"===========" 
 3950 CLOSE 1:CLOSE 2:IF X$=CHR$ (133) THENPRINT#4:CLOSE 4 
 3960 GOTO 2760 
 3980 REM ========================== ** 
 3990 REM *** PROGRAMMKOPF ERSTELLEN ** 
 4000 REM ========================== ** 
 4010 PRINTCHR$ (147); 
 4020 PRINTTAB( 4)"================================" 
 4030 PRINTTAB( 4)"H A U S H A L T S B U C H{3SPACE}"+J$ 
 4040 PRINTTAB( 4)"================================" 
 4050 PRINT:RETURN 
 4070 REM *** ====================== ** 
 4080 REM **    KONTO EINLESEN       ** 
 4090 REM *** ====================== ** 
 4110 GOSUB 330:IF ST=-128OR R=21 THENRETURN 
 4120 PRINTCHR$ (147);:GOSUB 760:PRINT:PRINT 
 4130 PRINT:PRINT"{LIG.BLUE}KONTO{SPACE,RED}";KN$(KN);"{LIG.BLUE,SPACE}WIRD EINGELE-SEN !{BROWN}" 
 4140 OPEN 1,8,2,"KONTEN"+J$+",L,"+CHR$ (141) 
 4150 OPEN 2,8,15 
 4160 PRINT#2,"P"+CHR$ (2)+CHR$ (KN)+CHR$ (0)+CHR$ (1) 
 4170 RC$="" 
 4180 :INPUT*1,141,RC$:IF LEFT$ (RC$,1)="" THENRC$="":GOTO 4310 
 4190 : INPUT#2,R 
 4200 :  IF R<>50  THEN 4250 
 4210 PRINT:PRINT"JAHRESDATEI BZW. KONTO NICHT GEFUNDEN !":PRINT 
 4220 PRINT"WEITER MIT{SPACE,RVOFF,LIG.GREEN,SPACE}TASTE{SPACE,RVOFF,BROWN,SPACE}!";:WAIT 198,1:POKE 198,0 
 4230 CLOSE 1:CLOSE 2:RETURN 
 4240 : 
 4250 KN$=LEFT$ (RC$,20) 
 4260 GS=0 
 4270 FOR I=1  TO 12 
 4280 : S(I)=VAL (MID$ (RC$,20+(I-1)*10,10)) 
 4290 : GS=GS+S(I) 
 4300 NEXT I 
 4310 RETURN 
 4320 : 
 4330 REM ============================== 
 4340 REM = UP SUMMENAUSGABE AUFBEREITEN 
 4350 REM =    <PRINT USING>-SIMULATION 
 4360 REM ============================== 
 4370 SU$=STR$ (SU):A=LEN (SU$):L=0:FOR T=1 TOA:IF MID$ (SU$,T,1)="." THENL=T:T=A 
 4380 NEXT T 
 4390 : IF L=0 THENSU$=SU$+".00":L=A+1:RETURN 
 4400 : IF A>=L+2AND SU<0 THENSU=SU-.00001:SU$=LEFT$ (STR$ (SU),L+2):RETURN 
 4410 : IF A>=L+2AND SU>0 THENSU=SU+.00001:SU$=LEFT$ (STR$ (SU),L+2):RETURN 
 4420 : IF A=L+1 THENSU$=SU$+"0" 
 4430 RETURN 
 4440 : 
 4450 REM ============================ 
 4460 REM ==   SONDERFUNKTIONEN     == 
 4470 REM ==  SEQ.BUCHUNGSDATEIEN   == 
 4480 REM ============================ 
 4490 : 
 4500 FS$(1)="DATEI LADEN{7SPACE,SHIFT-SPACE}" 
 4510 FS$(2)="DATEI SICHERN{5SPACE,SHIFT-SPACE}" 
 4520 FS$(3)="BUCHUNGEN AUSGEBEN{SHIFT-SPACE}" 
 4530 FS$(4)="BUCHUNGEN AENDERN{SPACE,SHIFT-SPACE}" 
 4540 FS$(5)="BUCHUNGEN SORTIEREN" 
 4550 FS$(0)="S-FUNKTION BEENDEN " 
 4560 : 
 4570 FB$(0)="KOSTENART{4SPACE}" 
 4580 FB$(1)="BETRAG{7SPACE}" 
 4590 FB$(2)="BUCHUNGSMONAT" 
 4600 :S%=0 
 4610 GOSUB 3990:PRINT 
 4620 PRINTTAB( 8)"{RED}SONDERFUNKTION":PRINTTAB( 8)"-----------------" 
 4630 PRINTTAB( 8)"{BLUE}BUCHUNGSPOSTEN BEARBEITEN":PRINT 
 4640 PRINTTAB( 5)"{2SPACE,ORANGE,SPACE}<DATEI LADEN> ---->{SPACE,RVSON,BLUE}3{RVOFF,SPACE}-{SPACE,RVSON}5{RVOFF}" 
 4650 PRINTTAB( 5)"{BLUE,RVSON}2{RVOFF,BROWN,2SPACE}DATEI SICHERN":PRINT 
 4660 PRINTTAB( 5)"{BLUE,RVSON}3{RVOFF,BROWN,2SPACE}BUCHUNGEN AUSGEBEN" 
 4670 PRINTTAB( 5)"{BLUE,RVSON}4{RVOFF,BROWN,2SPACE}BUCHUNGEN AENDERN" 
 4680 PRINTTAB( 5)"{BLUE,RVSON}5{RVOFF,BROWN,2SPACE}BUCHUNGEN SORTIEREN":PRINT:PRINT 
 4690 PRINTTAB( 5)"{GREEN}0{BROWN,2SPACE}SONDERFUNKTION VERLASSEN":PRINT:PRINT 
 4700 : 
 4710 PRINTTAB( 8)"{RED,RVSON,SPACE}AUSWAHL{2SPACE}0-5{SPACE,RVOFF,BROWN,SPACE}" 
 4720 : 
 4730 GET F$:IF F$="0" THENCLOSE 3:GOSUB 4820:RETURN :REM ZUM HAUPTMENUE 
 4740 IF F$<"2"OR F$>"5" THEN4730 
 4750 FU=VAL (F$) 
 4760 :ON FUGOSUB 6300,6560,5070,6880,6030 
 4770 GOTO 4610 
 4780 : 
 4790 REM =*=*=  SONDERFUNKTIONEN VERLASSEN *=* 
 4800 REM PRUEFEN, OB AENDERUNGEN GESICHERT =*= 
 4810 : 
 4820 IF AV=0AND S%=0 THENRETURN 
 4830 PRINTCHR$ (147):GOSUB 4990:PRINT 
 4840 IF AV=0AND S%=1GOTO 4890 
 4850 PRINT"DIE DATEI{SPACE,RED}"KN$(ZW)"{BROWN,SPACE}WURDE","VERAENDERT, ABER NICHT GESICHERT !" 
 4860 PRINT:PRINT"WOLLEN SIE SICHERN ? --->{2SPACE,RED,RVSON,SPACE}S{SPACE,RVOFF,BLUE}" 
 4870 PRINT:PRINT"ZURUECK ZUM MENUE{2SPACE}? --->{SPACE,RED}RETURN{BLUE}":GOSUB 4920:AV=0:RETURN 
 4880 : 
 4890 PRINT"DATEI{SPACE,RED}"KN$(ZW)"{BROWN,SPACE}WURDE","SORTIERT, ABER NOCH NICHT GESICHERT !" 
 4900 PRINT:PRINT"WOLLEN SIE SICHERN ? --->{2SPACE,RED,RVSON,SPACE}S{SPACE,RVOFF,BLUE}":PRINT 
 4910 PRINT"ZURUECK ZUM MENUE{2SPACE}? --->{SPACE,RED}RETURN{BLUE}" 
 4920 GET X$:IF X$=CHR$ (13) THENRETURN 
 4930 IF X$="S" THENS%=0:GOSUB 6590:RETURN 
 4940 GOTO 4920 
 4950 : 
 4960 REM =*= UEBERSCHRIFT / FUNKTION 
 4970 REM ============================ 
 4980 : 
 4990 PRINTTAB( 8)"{ORANGE}UCCCCCCCCCCCCCCCCCCCCCCI" 
 5000 PRINTTAB( 8)"B ";FS$(FU);"{2SPACE}B" 
 5010 PRINTTAB( 8)"JCCCCCCCCCCCCCCCCCCCCCCK{BROWN}" 
 5020 PRINT:RETURN 
 5030 : 
 5040 REM ============================ 
 5050 REM == BUCHUNGEN AUSGEBEN     == 
 5060 REM ============================ 
 5070 PRINTCHR$ (147); 
 5080 GOSUB 4990:PRINT:PRINT"{BLUE}DRUCKER ({RVSON,RED}D{RVOFF,BLUE}) ODER BILDSCHIRM ({RVSON,RED}B{RVOFF,BLUE}) ?" 
 5090 GET A$:AA$=A$:IF A$<>"D"AND A$<>"B"GOTO 5090 
 5100 GOSUB 6300:IF KN$="E"OR AK=0 THENRETURN 
 5110 IF ST=-128OR R=21 THENRETURN 
 5120 IF A$<>"D"GOTO 5180 
 5130 GOSUB 250:IF ST=-128 THENZW=0:RETURN 
 5140 CLOSE 4:OPEN 4,4:PRINT#4,CHR$ (27)+CHR$ (108)+CHR$ (10); 
 5145 PRINT#4,CHR$ (10);CHR$ (14);KN$(KN);"{SHIFT-SPACE}";J$;CHR$ (10) 
 5150 PRINT#4,"KOSTENART{18SPACE}BETRAG{7SPACE}DATUM{3SPACE}" 
 5160 PRINT#4,"------------------------------------------------":PRINT#4 
 5170 IF Z=0 THENPRINT#4:PRINT#4,SPC( 9)D$(Z,0):PRINT#4:CLOSE 4:RETURN 
 5180 FU=3:SU=0:ZZ=0 
 5190 PRINTCHR$ (147);:GOSUB 4990:PRINT:PRINT KN$(KN):PRINT 
 5200 IF Z=0 THENPRINTTAB( 90)"{RED}"D$(Z,0):FOR I=0 TO2000:NEXT :RETURN 
 5210 : SB$(0)="":SB$(2)="" 
 5220 POKE 211,3:POKE 214,13:SYS 58732:PRINT"{BLUE}DRUECKEN SIE BEI NICHT RELEVANTEN" 
 5230 PRINTTAB( 3)"FELDERN{2SPACE}---->{2SPACE,RED}RETURN{BROWN}" 
 5240 POKE 214,7:PRINT 
 5250 : PRINTFB$(0);:INPUTSB$(0) 
 5260 : PRINTFB$(2);:INPUTSB$(2) 
 5270 IF SB$(2)<>""AND VAL (SB$(2))<1OR VAL (SB$(2))>12 THENPRINTCHR$ (145);:GOTO 5260 
 5280 PRINTCHR$ (147);:GOSUB 4990:PRINT"{RED}"KN$(KN)" "J$:PRINT"{BROWN}":IF FU=4GOTO 5300 
 5290 IF SB$(0)=""AND SB$(2)=""AND A$<>"D" THENFOR Y=1 TOZ:GOSUB 5680:NEXT Y:GOTO 5470 
 5300 FOR Y=1  TO Z 
 5310 : SB=0 
 5320 : IF SB$(0)=""  THEN SB=1:GOTO 5340 
 5330 : IF LEFT$ (D$(Y,0),LEN (SB$(0)))=SB$(0)  THEN SB=SB+1 
 5340 : IF SB$(2)="" THENSB=SB+1:GOTO 5380 
 5350 :::REM =*= DATUM 1- OD. 2-STELLIG? 
 5360 : IF LEN (D$(Y,2))=5AND LEFT$ (D$(Y,2),1)=SB$(2) THENSB=SB+1:GOTO 5380 
 5370 : IF LEN (D$(Y,2))=6AND LEFT$ (D$(Y,2),2)=SB$(2) THENSB=SB+1 
 5380 :IF FU=4GOTO 5420 
 5390 :IF A$<>"D"GOTO 5410 
 5400 : IF SB=2AND FU=3 THENGOSUB 5860:GOTO 5440 
 5410 : IF SB=2AND FU=3 THENGOSUB 5680:GOTO 5440 
 5420 : IF SB=2AND ZZ>0 THENGOSUB 7150:GOTO 5440 
 5430 : IF SB=2AND ZZ<1 THENGOSUB 7140 
 5440 NEXT Y 
 5450 IF FU=4OR E$="E" THENRETURN :REM ZU "AENDERUNGEN" 
 5460 IF A$="D" THENGOSUB 5960:GOTO 5500 
 5470 PRINTTAB( 20)"----------":PRINTTAB( 10)"{LIG.BLUE}SUMME{BLUE,SPACE}";:GOSUB 4370 
 5480 PRINTTAB( 26-(L-1))SU$;"{BROWN}" 
 5490 ZZ=0 
 5500 PRINT:PRINT"{RED}DATEIENDE ERREICHT." 
 5510 PRINT"SUCHBEGRIFF NICHT (NOCHMALS) GEFUNDEN !":PRINT 
 5520 PRINT"{BLUE}WEITERE BUCHUNGEN SUCHEN (J/N) ?" 
 5530 : GET X$: IF X$<>"J" AND X$<>"N" GOTO 5530 
 5540 ::IF X$="J"AND S%<>0GOTO 5180 
 5550 :IF X$="N" THENCLOSE 3:RETURN 
 5560 PRINTCHR$ (145)"{BLUE}GLEICHES KONTO{SPACE,BROWN}"KN$(KN),"{BLUE,SPACE}(J/N) ?"; 
 5570 :GET X$:IF X$<>"J"AND X$<>"N"GOTO 5570 
 5580 :IF X$="J"GOTO 5180 
 5590 KN=0 
 5600 PRINTCHR$ (147):GOSUB 3110:IF KN$="E"OR AK=0 THENRETURN 
 5610 IF KN=ZW  THEN 5180: REM PRUEFEN, 
 5620 ZW=KN:REM               OB GLEICHE KN WIE VORHER 
 5630 CLOSE 3:GOSUB 6330:IF AA$="D" THENA$=AA$:GOTO 5140 
 5640 GOTO 5180 
 5650 ::REM =*=* BUCHUNG AUF BILDSCHIRM 
 5660 ::REM ============================ 
 5670 : 
 5680 PRINTD$(Y,0);"{BLUE}"; 
 5690 D=VAL (D$(Y,1)):SU=SU+D 
 5700 PRINTTAB( 29-LEN (D$(Y,1)));D$(Y,1);"{BROWN}"; 
 5710 IF LEN (D$(Y,2))=5 GOTO 5730 
 5720 PRINTTAB( 31);MID$ (D$(Y,2),3,2)"."LEFT$ (D$(Y,2),2)"."RIGHT$ (D$(Y,2),2):GOTO 5740 
 5730 PRINTTAB( 31);MID$ (D$(Y,2),2,2)". "LEFT$ (D$(Y,2),1)"."RIGHT$ (D$(Y,2),2) 
 5740 ZZ=ZZ+1 
 5750 IF Y=Z-1AND ZZ>=11 THENZZ=0:GOSUB 5780:GOTO 5770 
 5760 IF ZZ>14AND Y<Z-1 THENZZ=0:GOSUB 5780:REM =*= AUSGEBEN BIS 15 STUECK 
 5770 RETURN 
 5780 PRINTTAB( 20)"----------":PRINTTAB( 10);"{LIG.BLUE}SUMME{BLUE,SPACE}";:GOSUB 4370 
 5790 PRINTTAB( 26-(L-1))SU$;"{BROWN}" 
 5800 PRINT:PRINT"{LIG.BLUE}WEITER MIT{SPACE,RED,RVSON,SPACE}TASTE{SPACE,RVOFF}"; 
 5810 : WAIT 198,1:POKE 198,0 
 5820 ::PRINTCHR$ (147);:GOSUB 4990:PRINT"{RED}"KN$(KN)" "J$"{BROWN}":PRINT 
 5830 RETURN 
 5840 : REM **  AUSGABE AUF DRUCKER   ** 
 5850 : REM ============================ 
 5860 D=VAL (D$(Y,1)):SU=SU+D 
 5870 PRINT#4,CHR$ (27)"D"; 
 5880 PRINT#4,CHR$ (1)+CHR$ (34-LEN (D$(Y,1)))+CHR$ (39)+CHR$ (0); 
 5890 PRINT#4,CHR$ (9);D$(Y,0);CHR$ (9);D$(Y,1); 
 5900 IF LEN (D$(Y,2))=5GOTO 5930 
 5910 PRINT#4,CHR$ (9)MID$ (D$(Y,2),3,2)"."LEFT$ (D$(Y,2),2)"."RIGHT$ (D$(Y,2),2) 
 5920 GOTO 5940 
 5930 PRINT#4,CHR$ (9)MID$ (D$(Y,2),2,2)". "LEFT$ (D$(Y,2),1)"."RIGHT$ (D$(Y,2),2) 
 5940 RETURN 
 5950 : 
 5960 PRINT#4,SPC( 25)"----------":PRINT#4,SPC( 10);"{LIG.BLUE}SUMME{BLUE,SPACE}";:GOSUB 4370 
 5970 PRINT#4,SPC( 15-(L-1));SU$;"{BROWN}":CLOSE 4:A$="":RETURN 
 5980 : 
 5990 REM ============================ 
 6000 REM ==   DATEI   SORTIEREN    == 
 6010 REM ============================ 
 6020 : 
 6030 GOSUB 6300:IF KN$="E"OR AK=0 THENRETURN 
 6040 IF ST=-128OR R=21 THENRETURN 
 6050 N=Z:FU=5:PRINTCHR$ (147):GOSUB 4990 
 6060 IF Z=0 THENPRINT:PRINTTAB( 10)"{RED}"D$(Z,0):FOR I=0 TO2000:NEXT :RETURN 
 6070 FOR I=0  TO 2 
 6080 ::PRINTTAB( 8)"{RVSON,RED}"I+1"{RVOFF,BROWN,2SPACE}"FB$(I) 
 6090 NEXT I:PRINT:S%=0 
 6100 PRINTTAB( 4)"{BLUE}WONACH SOLL SORTIERT WERDEN ?" 
 6110 PRINTTAB( 4)"GEBEN SIE BITTE DIE NUMMER AN !":PRINT 
 6120 PRINTTAB( 4)"ZURUECK ZUM MENUE -->{SPACE,RED}RETURN{BLUE,SPACE}!" 
 6130 GET X$:IF X$=CHR$ (13) THENRETURN 
 6140 IF X$<"1"OR X$>"3"GOTO 6130 
 6150 X=VAL (X$)-1:PRINT 
 6160 PRINTTAB( 4)"ICH SORTIERE, BITTE WARTEN SIE !":S%=1:REM KENNZ. DATEI SORT. 
 6170 IF X=0 THENGOSUB 600:GOTO 6190 
 6180 GOSUB 420 
 6190 PRINTTAB( 4)"{BLUE}DATEI{SPACE,RED}"KN$(KN)"{BLUE,SPACE}WURDE",TAB( 4)"NACH{SPACE,RED}",FB$(X)"{BLUE,SPACE}SORTIERT !" 
 6200 PRINT:PRINTTAB( 4)"BUCHUNGSPOSTEN AUSGEBEN (J/N) ?" 
 6210 :GET X$:IF X$<>"J"AND X$<>"N"GOTO 6210 
 6220 :IF X$="J" THENGOSUB 5180 
 6230 :FU=5:GOSUB 4820 
 6240 RETURN 
 6250 : 
 6260 REM ============================ 
 6270 REM ==   DATEI   LADEN        == 
 6280 REM ============================ 
 6290 : 
 6300 GOSUB 2900:IF KN$="E"OR AK=0 THENRETURN 
 6310 IF KN=ZW THENRETURN :REM      PRUEFEN, 
 6320 IF S%<>0OR AV<>0 THENGOSUB 4820:S%=0:REM OB GLEICHE KN WIE VORHER 
 6330 ZW=KN:N$=LEFT$ (KN$(KN),12) 
 6340 PRINTCHR$ (147):FU=1:GOSUB 4990 
 6350 PRINT:PRINT:PRINT"{BLUE}DATEI{SPACE,RED}"KN$(KN) "{BLUE}WIRD GELADEN !" 
 6360 GOSUB 330:IF ST=-128OR R=21 THENRETURN 
 6370 OPEN 2,8,15 
 6380 OPEN 3,8,3,J$+N$+",S,R" 
 6390 INPUT#2,R:IF R<>62GOTO 6410 
 6400 ::PRINT"DATEI NICHT GEFUNDEN !":CLOSE 2:CLOSE 3:FOR T=0 TO3000:NEXT :RETURN 
 6410 Z=0:INPUT#3,D$(Z,0),D$(Z,1):IF ST=64 THENCLOSE 3:CLOSE 2:RETURN 
 6420 CLOSE 3 
 6430 OPEN 3,8,3,J$+N$+",S,R" 
 6440 INPUT#3,D$(0,0) 
 6450 Z=1 
 6460 : 
 6470 ::INPUT#3,D$(Z,0),D$(Z,1),D$(Z,2) 
 6480 : 
 6490 IF ST<>64  THEN Z=Z+1:GOTO 6460 
 6500 CLOSE 3:CLOSE 2:RETURN 
 6510 : 
 6520 REM ============================ 
 6530 REM ==   DATEI SICHERN        == 
 6540 REM ============================ 
 6550 : 
 6560 IF Z>0GOTO 6590 
 6570 POKE 214,23:POKE 211,8:SYS 58732:PRINT"KEINE DATEN IM RECHNER" 
 6580 :FOR X=0 TO2000:NEXT :RETURN 
 6590 PRINTCHR$ (147);:FU=2:GOSUB 4990 
 6600 PRINT:PRINT"{BLUE}DISKETTE EINGELEGT ?":PRINT 
 6610 PRINT"{BROWN}DRUECKEN SIE ANSCHLIESSEND{SPACE,RED,RVSON,SPACE}S{SPACE,RVOFF,BLUE}":PRINT:FOR I=0 TO800:NEXT 
 6620 PRINT:PRINT"WOLLEN SIE DIE GEAENDERTE DATEI ",KN$(ZW)" NICHT SICHERN{2SPACE}?" 
 6630 PRINT"DANN MENUE{3SPACE}--->{3SPACE,RED}RETURN{BLUE}" 
 6640 GET X$:IF X$<>"S"AND X$<>CHR$ (13)GOTO 6640 
 6650 : IF X$=CHR$ (13) THENRETURN 
 6660 GOSUB 330:IF ST=-128OR R=21 THENRETURN 
 6670 PRINT:PRINT"BUCHUNGSDATEI{SPACE,RED}"KN$(ZW)"{BLUE,SPACE}WIRD","GESICHERT !" 
 6680 N$=LEFT$ (KN$(ZW),12) 
 6690 CLOSE 3:OPEN 3,8,15,"S:"+J$+N$ 
 6700 CLOSE 3:OPEN 3,8,3,J$+N$+",S,W" 
 6710 : PRINT#3,D$(0,0) 
 6720 : FOR Y=1  TO Z 
 6730 :   FOR I=0  TO 2 
 6740 :     PRINT#3,D$(Y,I) 
 6750 :   NEXT I 
 6760 : NEXT Y 
 6770 CLOSE 3 
 6780 PRINT:AV=0:S%=0 
 6790 PRINT"BUCHUNGSDATEI{SPACE,RED}"KN$(ZW)"{BLUE,SPACE}IST{2SPACE}GESICHERT !":PRINT 
 6800 PRINT:PRINT"WEITER MIT{SPACE,RED}TASTE{BLUE,SPACE}!" 
 6810 WAIT 198,1:POKE 198,0 
 6820 RETURN 
 6830 : 
 6840 REM ============================ 
 6850 REM == BUCHUNGEN AENDERN      == 
 6860 REM ============================ 
 6870 : 
 6880 GOSUB 6300:IF KN$="E"OR AK=0 THENRETURN 
 6890 IF ST=-128OR R=21 THENRETURN 
 6900 PRINTCHR$ (147):FU=4:GOSUB 4990 
 6910 IF Z=0 THENPRINT:PRINTTAB( 9)"{RED}"D$(Z,0):FOR I=0 TO2000:NEXT :RETURN 
 6920 ZZ=0:ZS=10:AV=0:PRINT 
 6930 PRINT"{BLUE}WENN SIE GEZIELT BUCHUNGPOSITIONEN ODER MONATE AENDERN WOLLEN,"; 
 6940 PRINT" GEBEN SIE BITTE","{SPACE,RED,RVSON}E{BLUE,RVOFF,2SPACE}EIN." 
 6950 PRINT:PRINT"{RED}RETURN{LIG.BLUE,SPACE}LISTET DIE DATEI VOLLSTAENDIG{11SPACE}AUF !" 
 6960 GET E$:IF E$<>"E"AND E$<>CHR$ (13)GOTO 6960 
 6970 IF E$="E" THENGOSUB 5190:GOTO 7060 
 6980 : 
 6990 REM =*= ALLE POS. AUFLISTEN =*= 
 7000 REM =========================== 
 7010 PRINTCHR$ (147);:GOSUB 4990 
 7020 GOSUB 7780 
 7030 FOR Y=1  TO Z 
 7040 :   GOSUB 7150 
 7050 NEXT Y 
 7060 PRINT:PRINT"{BLUE}DATEIENDE ERREICHT !" 
 7070 IF E$=CHR$ (13) THEN7280 
 7080 IF ZZ<>0AND E$="E" THENE$="":GOTO 7280 
 7090 :::FOR I=1 TO2000:NEXT 
 7100 RETURN 
 7110 : 
 7120 REM =*= AUSGABE AUF BILDSCHIRM == 
 7130 REM ===-----------------------=== 
 7140 GOSUB 7780:REM BEI EINZEL-SELEKT. 
 7150 IF Y<11AND E$<>"E" THENPRINTSPC( 3-LEN (STR$ (Y)))"{RED}"Y"{BROWN}"D$(Y,0)"{BLUE}";:GOTO 7170 
 7160 PRINTSPC( 4-LEN (STR$ (Y)))"{RED}"Y"{BROWN}"D$(Y,0)"{BLUE}"; 
 7170 PRINTTAB( 30-LEN (D$(Y,1)));D$(Y,1)"{ORANGE}"; 
 7180 IF LEN (D$(Y,2))=5GOTO 7210 
 7190 PRINTTAB( 31);MID$ (D$(Y,2),3,2)"."LEFT$ (D$(Y,2),2)"."RIGHT$ (D$(Y,2),2) 
 7200 GOTO 7220 
 7210 PRINTTAB( 31);MID$ (D$(Y,2),2,2)". "LEFT$ (D$(Y,2),1)"."RIGHT$ (D$(Y,2),2) 
 7220 ZZ=ZZ+1 
 7230 :IF ZZ=ZSAND ZZ<Z THENZS=ZS+10:GOSUB 7280 
 7240 RETURN 
 7250 : 
 7260 REM =*= AENDERUNGSABFRAGE =*= 
 7270 : 
 7280 PRINT:PRINT"{RED}AENDERUNGEN (J/N) ?" 
 7290 : GET X$:IF X$<>"J"AND X$<>"N"  THEN 7290 
 7300 : IF X$="N"AND Y<Z  THEN PRINTCHR$ (147):GOSUB 4990:GOSUB 7780:RETURN 
 7310 : IF X$="N"AND Y>=ZAND AV=1 THENGOSUB 6590:RETURN :REM AEND.SICHERN 
 7320 : IF X$="N"AND Y>=ZAND AV=0 THENRETURN :REM KEINE AENDERUNG-->MENUE 
 7330 :PRINTCHR$ (145)"{39SPACE}":REM 39 X LEERT. 
 7340 : 
 7350 REM =*= AENDERUNG         =*= 
 7360 REM ========================= 
 7370 C=17:S=0:GOSUB 830 
 7380 PRINT"{LIG.BLUE}GEBEN SIE BITTE DIE ZU AENDERNDE POSI-{SPACE,SPACE}TION EIN (ZEILE, SPALTE) !" 
 7390 :INPUTA,B:B=B-1:IF B<>0AND B<>2GOTO 7370 
 7400 : IF A<1OR A>YGOTO 7370 
 7410 : IF Y-1=ZAND A>Y-1OR B>2OR B<0 THENC=17:S=0:GOSUB 830:GOTO 7380 
 7420 : IF B<>2GOTO 7470 
 7430 : IF LEN (D$(A,2))=5GOTO 7460 
 7440 : PRINTTAB( 2);MID$ (D$(A,2),3,2)"."LEFT$ (D$(A,2),2)"."RIGHT$ (D$(A,2),2) 
 7450 : GOTO 7480 
 7460 : PRINTTAB( 2);MID$ (D$(A,2),2,2)". "LEFT$ (D$(A,2),1)"."RIGHT$ (D$(A,2),2) 
 7470 IF B<>2 THENPRINT"{BROWN,2SPACE}";D$(A,B) 
 7480 PRINT:PRINT"BITTE AENDERN SIE !{20SPACE}":AV=1 
 7490 C=20:S=0:GOSUB 830 
 7500 : 
 7510 INPUTD$(A,B):PRINT"{2SPACE,RED}"D$(A,B):IF LEN (D$(A,B))>20 THEND$(A,B)=LEFT$ (D$(A,B),20) 
 7520 IF B<>2GOTO 7590:REM DATUM PRUEFEN 
 7530 IF MID$ (D$(A,2),3,1)="."AND MID$ (D$(A,2),6,1)="."GOTO 7570 
 7540 IF MID$ (D$(A,2),2,1)="."AND MID$ (D$(A,2),4,1)="." THENGOSUB 7710:GOTO 7590 
 7550 IF MID$ (D$(A,2),2,1)="."AND MID$ (D$(A,2),5,1)="." THENGOSUB 7720:GOTO 7590 
 7560 IF MID$ (D$(A,2),3,1)="."AND MID$ (D$(A,2),5,1)="." THENGOSUB 7730:GOTO 7590 
 7570 D$(A,2)=MID$ (D$(A,2),4,2)+LEFT$ (D$(A,2),2)+RIGHT$ (D$(A,2),2) 
 7580 : 
 7590 PRINT" WEITERE AENDERUNGEN (J/N) ?" 
 7600 : GET X$:IF X$<>"J"AND X$<>"N" THEN 7600 
 7610 ::IF X$="N"AND Y<Z THENPRINTCHR$ (147):GOSUB 4990:GOSUB 7780:RETURN 
 7620 :IF X$="N"AND Y>=ZAND AV=1 THENGOSUB 6590:RETURN :REM AEND.SICHERN 
 7630 C=19:S=1:GOSUB 830 
 7640 PRINT"{BLUE,8SPACE}" 
 7650 PRINT"{39SPACE}":REM 39 X LEERTASTE 
 7660 PRINT"{39SPACE}" 
 7670 C=17:S=0:GOSUB 830 
 7680 GOTO 7380 
 7690 : 
 7700 REM =*= DATUM AUFBEREITEN MMTTJJ * 
 7710 D$(A,2)=MID$ (D$(A,2),3,1)+"0"+LEFT$ (D$(A,2),1)+RIGHT$ (D$(A,2),2):RETURN 
 7720 D$(A,2)=MID$ (D$(A,2),3,2)+"0"+LEFT$ (D$(A,2),1)+RIGHT$ (D$(A,2),2):RETURN 
 7730 D$(A,2)=MID$ (D$(A,2),4,1)+LEFT$ (D$(A,2),2)+RIGHT$ (D$(A,2),2):RETURN 
 7740 : 
 7750 REM =*= SPALTEN-BESCHRIFTUNG =*= 
 7760 REM =========================== 
 7770 : 
 7780 PRINTTAB( 5)"{RED}1";TAB( 26)"2";TAB( 33)"3":PRINT:RETURN 
 7790 : 
 7800 REM ============================== 
 7810 REM ** DATAS FUER INPUT-MODIFIKAT. 
 7820 REM ============================== 
 7830 FOR I=828 TO922 
 7840 READ X:POKE I,X:S=S+X:NEXT I 
 7850 DATA 169,71,160,3,141,8,3,140,9,3,96,32 
 7860 DATA 115,0,201,133,240,6,32,121,0,76,231,167 
 7870 DATA 32,115,0,201,172,240,6,32,191,171,76,174 
 7880 DATA 167,32,155,183,32,30,225,32,253,174,32,158 
 7890 DATA 183,138,72,32,253,174,32,139,176,133,73,132 
 7900 DATA 74,32,163,182,104,32,117,180,160,2,185,97 
 7910 DATA 0,145,73,136,16,248,200,32,18,225,145,98 
 7920 DATA 200,196,97,208,246,32,204,255,76,174,167 
 7930 IF S<>11096 THENPRINT"FEHLER IN DATAS!!":END 
 7940 SYS 828:RETURN 
 7945 REM ============================== 
 7950 REM * SWAP - FUNKTION SIMULIEREN * 
 7960 REM ============================== 
 7970 REM SYNTAX:SYS715(STRING1,STRING2) 
 7980 REM ============================== 
 7990 DATA 32,250,174,32,158,173,32,143,173,165,100,133,247,165,101,133 
 8000 DATA 248,32,253,174,32,158,173,32,143,173,160,0,177,247,133,249 
 8010 DATA 177,100,145,247,165,249,145,100,200,192,3,208,239,32,247,174,96 
 8030 SA=715:SE=SA+48:FOR I=SA TOSE:READ X:POKE I,X:CS=CS+X:NEXT 
 8040 IF CS<>7314 THENPRINT"FEHLER IN DATA'S":END 
 8050 RETURN 
Das Haushaltsbuch
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →