Quicktext
Daß eine gute Textverarbeitung nicht unbedingt mehrere hundert Mark kosten muß, zeigt das selbstgeschriebene Programm Quicktext. Auf dem Commodore 64 mit der entsprechenden Hardware bietet es den Komfort, den man manchmal bei den »Professionellen« vermißt.
Ouicktext ist ein vielfältig einsetzbares Textverarbeitungsprogramm für den Commodore 64 in Verbindung mit der Floppy 1541 und einem Matrixdrucker (zum Beispiel Epson MX-80/82, FX 80 mit Data Becker Interface). Das Programm benötigt zirka 12 KByte Speicherplatz; es bleiben also etwas mehr als 25 KByte zur Texteingabe übrig. Der einzige Nachteil ist eine relativ langsame Textausgabe auf dem Drucker, die sich aber durch Compilieren des Programms beschleunigen läßt.
- Zeilenlänge frei definieren
- Vorgegebenes Textformat übernehmen
- Neue Texteingabe
- Zeilen ändern, einfügen, löschen und kopieren
- Buchstaben oder Wörter im Text suchen und gegen neue Wörter oder Buchstaben austauschen
- Beliebiges Ausdrucken von Texten (Zeilen oder Blöcke)
- Variabler Zeilenabstand (1, 1,5, 2)
- Textformatierung (rechter Randausgleich)
- Seitennumerierung
- Briefkopf und Adresse nach DIN 676
- Unterstreichen, Fettdruck und Breitschrift in allen möglichen Kombinationen
- Wahlweiser Ausdruck auf Endlospapier oder Einzelblatt
- Druck der Sonderzeichen ä, ö, ü, Ä, Ü, Ö, ß
- Druck von hoch- und tiefgestellten Textteilen
- Umfangreiche Diskettenbefehle (siehe Bild 1).

Nach dem Laden und Starten meldet sich Quicktext mit dem Hauptmenü (Bild 2). Von dort aus werden die einzelnen Unterprogramme sowie das Diskettenmenü angewählt. Kehrt das Programm nicht von selbst ins Hauptmenü zurück, so ist dies jederzeit durch Betätigen der »Pfeil-Links-Taste« möglich (auch während der Texteingabe). Erläuterungen zu den einzelnen Unterprogrammen:

1. Text eingeben
Zunächst fragt das Programm, ob man neuen Text eingeben oder an einem bereits im Speicher befindlichen Text weiterschreiben will. Danach wird die Zeilenlänge bestimmt. Nach Eingabe der Zeilenlänge schaltet der Computer auf den Textmodus um, was am Farbwechsel des Bildschirms und dem neuen Cursor zu erkennen ist. Jetzt kann mit der Texteingabe begonnen werden. Der Wagenrücklauf wird mit der »Return«-Taste betätigt oder von selbst ausgelöst, wenn die maximale Zeilenlänge erreicht ist.
Die Cursorsteuertasten funktionieren im Texteingabemodus nicht. Der Textcursor kann mit Hilfe der INST/DEL-Taste rückwärts bewegt werden. Größere Fehler können aber immer noch mit Hilfe des Editierprogrammes korrigiert werden.
Zur Eingabe von Sonderzeichen und Sonderfunktionen wird die Commodore-Taste in Verbindung mit der jeweiligen Buchstabentaste gedrückt (Bild 3).

Nach Beendigung der Texteingabe erfolgt die Rückkehr in das Hauptmenü durch Drücken der »Pfeil-Links-Taste«.
2. Text ändern
Zunächst fragt das Programm nach dem Textbereich, der gezeigt werden soll. Dieser wird jeweils zusammen mit zwei Befehlszeilen am unteren Bildschirmrand angezeigt. Die einzelnen Editierfunktionen sind in Bild 4 erläutert.
Umlaute bei Briefkopf:
SHIFT + linke eckige Klammer ergibt Ä
SHIFT + rechte eckige Klammer ergibt Ü
£ ergibt ö
3. Text formatieren
Der Text wird auf Basis der eingegebenen Zeilenlänge formatiert (rechter Randausgleich).
4. Text ausdrucken
Das Programm fragt den Benutzer nun nach seinen Wünschen hinsichtlich Briefkopf, Zeilenabstand, Seitennumerierung, Länge des Ausdrucks, Linker Randabstand, Endlospapier oder Einzelblatteinzug.
In einem weiteren Durchgang werden nochmals alle gewünschten Funktionen angezeigt. Änderungen der Parameter sind vor der Ausgabe möglich. Dies ist wichtig, falls zum Beispiel vergessen wurde, den Briefkopf einzugeben. Nach Beendigung der Druckausgabe fragt das Programm, ob noch ein weiterer Druck gewünscht wird. Wenn ja, so geht es zurück zu den Einzelfragen. Wenn nein, so kehrt man ins Hauptmenü zurück.
5. Diskettenverwaltung
Vom Diskettenmenü (Bild 1) aus werden die einzelnen Unterprogramme angewählt, die in Bild 5 erläutert werden.
Zeilennummer | |
---|---|
10- 20 | Bildschirmfarben, Dimensionierung, Initialisierung |
30-100 | Sonderzeichendefinition; Sprung zum Hauptmenü |
200-405 | Steuerung und Abfragen des Eingabecursors |
2000-2620 | Texteingabe |
3000-3170 | Edit-Bildschirm und Anwahl der Edit-Funktionen |
3200-3220 | Änderung einer Textzeile |
3300-3310 | Löschen einer Textzeile |
3400-3510 | Einfügen einer Textzeile |
3600-3690 | Wort- oder Buchstabenaustausch |
3800-3875 | Blockaustausch |
4000-4620 | Textformatierung (rechter Randausgleich) |
5000-5220 | Eingabe der Druckparameter |
5230-5395 | Nochmaliges Anzeigen der Druckparameter |
5400-5560 | Druck des Briefkopfes |
5600-5880 | Druckausgabe |
6000-6070 | Diskettenmenü |
6200-6250 | Speichern eines Textes |
6400-6460 | Einlesen eines Textes |
6600-6620 | Löschen eines Textes |
6800-6820 | Neuer Dateiname |
7000-7100 | Directory lesen |
7200-7600 | Texte verketten |
8000-8100 | Bildschirmfarben |
8500-8560 | Änderung der Variable t (Zeilen pro Seite) |
9000-9092 | Sonderzeichen und Sonderfunktionen für Druckausgabe |
9100-9110 | Auslesen des Fehlerkanals der Diskette |
9200-9250 | Datei auf Diskette überschreiben |
10000-10080 | Hauptmenü |
11000-11110 | Eingabe des Briefkopfes |
6. Briefkopf eingeben
Es gibt zwei Möglichkeiten, einen Briefkopf einzugeben: mit oder ohne Adreß-feld für einen Fensterbriefumschlag nach DIN 676. Das Programm fragt nach der gewünschten Form der Eingabe des eigentlichen Briefkopfes. Soll die betreffende Zeile des Briefkopfes oder der Adresse im Adressenfenster leer bleiben, so ist einfach die »Return«-Taste einzugeben.
7. End
Ausstieg aus dem Programm. Diese Funktion ist mit Vorsicht zu genießen, denn ein eventuell vorhandener Text bleibt zwar im Speicher zunächst erhalten; wird Quicktext jedoch neu gestartet, werden alle Variablen (auch der Text in Z$) unwiederbringlich gelöscht.
Für das einwandfreie Funktionieren des Programms sind natürlich noch einige Dinge zu berücksichtigen:
- Die maximale Zeilenlänge beträgt 80 Zeichen. Bei der Eingabe von Sonderfunktionen erscheinen auf dem Bildschirm Grafikzeichen, die zwar nicht abgedruckt, jedoch im Text mit abgespeichert werden. Bei der Eingabe von Sonderfunktionen erhöht das Programm die Zeilenlänge jeweils entsprechend, aber nur bis maximal 80 Zeichen/Zeile.
- Wenn der Zeilenabstand über mehrere Zeilen hinweg verändert werden soll, so ist das Sonderzeichen an den Beginn jeder Zeile zu stellen. Dies ist zum Beispiel bei längeren Zitaten erforderlich, die sich über mehrere Zeilen hinziehen. Das Unterprogramm in den Zeilen 8500 bis 8560 verändert dann die Variable t (Zeilen pro Seite).
- Das Programm akzeptiert nur die Eingabe von maximal 500 Zeilen. Sind 90 Prozent des Speichers vollgeschrieben, kehrt das Programm ebenfalls ins Hauptmenü zurück. Der Text kann anschließend noch geändert und abgespeichert werden.
- Die RUN/STOP-Taste ist durch einen POKE-Befehl in Zeile 10 ausgeschaltet, um zu vermeiden, daß das Programm durch versehentliches Betätigen dieser Taste aussteigt.
- Die Verwendung von Anführungszeichen ist nicht möglich. Sie werden durch das Hochkomma (’) gesetzt.
Editiermöglichkeiten
-A- Das Programm fragt nach der zu ändernden Zeile. Diese wird auf den Bildschirm gebracht und kann nun beliebig geändert werden. Das Fragezeichen und die Anführungsstriche dürfen nicht geändert werden, da sonst Fehler auftreten. Mit der »Return-Taste« kehrt man ins Hauptmenü zurück.
-L- Die betreffende Zeile wird gelöscht.
-E- Das Programm fragt, vor welcher Zeile eingefügt werden soll und schaltet dann in den Texteingabemodus um. Es können nur 60 Zeilen auf einmal eingefügt werden. Rückkehr mit der »Pfeil-Links-Taste«.
-T- Hier kann ein Buchstabe oder ein Wort im ganzen Text ausgetauscht werden. Das Programm fragt bei jeder einzelnen Möglichkeit, ob ausgetauscht werden kann. Ist dies nicht möglich, so wird »Tausch nicht möglich« eingeblendet. Wird bei der Bereichseingabe ’0’ eingegeben, so wird der gesamte Text nach Änderungsmöglichkeiten durchsucht.
-B- Beim Blocktausch können ganze Textblöcke mit beliebiger Länge versetzt werden. Auch eine Kopie ist möglich, wenn der alte Block einfach nicht gelöscht wird.
’+‘ Mit dieser Taste wird der Text nach vorne geblättert ‘-’ Mit dieser Taste wird der Text zurückgeblättert
Mit der »Pfeil-Links-Taste« schließlich kehrt man ins Hauptmenü zurück.
Diskettenfunktionen
1. Text speichern
Das Programm initialisiert die Diskette, liest den Fehlerkanal aus und fragt dann den Benutzer nach dem Dateinamen. Anschließend wird der Fehlerkanal wieder ausgelesen. Wenn alles in Ordnung ist, wird der Text gespeichert und das Programm kehrt ins Hauptmenü zurück. Ist ein Text mit gleichem Dateinamen vorhanden, wird gemeldet: »File exists«, und das Programm fragt, ob die alte Datei überschrieben werden soll. Wenn ja, wird die alte Datei überschrieben und durch die neue ersetzt. Wenn nein, muß man sich einen neuen Dateinamen überlegen.
2. Text einlesen
Das Programm fragt nach dem Dateinamen und liest den Text ein.
3. Text löschen
Der gewünschte Text wird gelöscht.
4. Neuer Dateiname
Mit Hilfe dieses Befehls kann ein Text einen neuen Filenamen erhalten. Das Programm fragt nach dem alten und dem neuen Dateinamen und führt die Operationen aus.
5. Directory lesen
Das Directory (Inhaltsverzeichnis) der Diskette wird gelesen, ohne daß das Programm gelöscht wird; wichtig zum Auffinden von Dateinamen.
6. Texte verketten
Mit Hilfe dieser Subroutine können bis zu vier Programme verknüpft werden.
7. Hauptmenü
Mit diesem Befehl kehrt man ins Hauptmenü zurück, wenn dies nicht schon vom Programm erledigt wurde.
(Joachim Schaller)u | Zeilenlänge |
z | Gesamtzahl der Zeilen |
z$(x) | Zeilennummer |
t$ | normale Get-Abfrage nach Zeichen |
fr | freier Speicherraum |
l | Anzahl der geschriebenen Zeichen |
t | Zahl der Zeilen pro Seite |
a | erste Zeile, die ausgedruckt werden soll |
b | letzte Zeile, die ausgedruckt werden soll |
P | Druckstartposition |
za | Zeilenabstand |
ma$ | Variable für Sonderzeichen |
ul | Seitenzähler |
ma | Zeilenzähler |
ip$ | zu druckendes Zeichen |
cb$ | Dateiname |
10 print"{clr}":poke53280,0:poke53281,0:poke53272,23:poke788,peek(788)+3:poke650,128 20 dimz$(500),e$(61) 30 ae$=chr$(4)+chr$(10)+chr$(170)+chr$(0)+chr$(42)+chr$(0)+chr$(170)+chr$(30)+chr$(2) 40 oe$=chr$(0)+chr$(28)+chr$(162)+chr$(0)+chr$(34)+chr$(0)+chr$(162)+chr$(28)+chr$(0) 50 ue$=chr$(0)+chr$(60)+chr$(130)+chr$(0)+chr$(2)+chr$(0)+chr$(130)+chr$(60)+chr$(0) 60 ga$=chr$(6)+chr$(140)+chr$(20)+chr$(32)+chr$(68)+chr$(32)+chr$(20)+chr$(140)+chr$(6) 70 gi$=chr$(28)+chr$(162)+chr$(34)+chr$(0)+chr$(34)+chr$(0)+chr$(34)+chr$(162)+chr$(28) 80 gu$=chr$(60)+chr$(130)+chr$(2)+chr$(0)+chr$(2)+chr$(0)+chr$(2)+chr$(130)+chr$(60) 90 ss$=chr$(126)+chr$(128)+chr$(0)+chr$(146)+chr$(0)+chr$(146)+chr$(146)+chr$(108)+chr$(0) 100 fr=fre(0):goto10000 200 print"{CBM-@}{left}"; 205 gett$:ift$=""then205 210 t=asc(t$):ift=20andw=1andz<=1andlen(tt$)=0thent$="":print"{clr}";:z=1:goto200 215 ifw=2andt=20andlen(tt$)=0thent$="":goto205 220 ift=164ort=167ort=170ort=173ort=188ort=189ort=190ort=172ort=191thenu=u+1 222 ift=171ort=179ort=187ort=177thenu=u+1 225 ift=13thenprint" ";:p1=0:p2=0:p3=0:p4=0:u=u2:goto335 230 ift>13andt<20ort>20andt<32ort>128andt<133ort>144andt<160thent$="":goto205 235 ift=95thenp1=0:p2=0:p3=0:p4=0:u=u2:return 240 ift=34thent$="'" 250 ift=190ort=191ort=170ort=167thenp1=len(tt$):p4=1 260 ift=164andp4=1thenp2=len(tt$):p3=p2-p1:u=u-p3 270 ift<>20andlen(t$)=1thenprintt$; 280 ift<>20then355 290 iflen(tt$)=1then315 300 iflen(tt$)=0andw=1thenz=z-1:tt$=z$(z):goto325 305 ifw=1then310 309 iflen(tt$)=0andw=0thene=e-1:tt$=e$(e):goto325 310 tt$=left$(tt$,len(tt$)-1):printchr$(20);:goto200 315 l=l-len(tt$):tt$="":print" {left}";chr$(20);:ifw=1thenz$(z)="":z=z-1:ifz=0thenz=1 318 ifw=1thentt$=z$(z) 320 ifw=0thene=e-1:ife=0thene=1 323 ifw=0thentt$=e$(e) 324 ifw=2thentt$="":goto205 325 iflen(tt$)>38thenprint" {up}{left}"; 330 print" {left}{up}";tt$;:goto200 335 iflen(tt$)<40thenx=218+peek(214):pokex,(peek(x)or128) 340 printchr$(13);:q=0:l=l+len(tt$):ifl>.9*frthengosub400:return 345 return 355 ifq=0andlen(tt$)>u-3andt$=" "then370 360 tt$=tt$+t$:iflen(tt$)=80then370 365 iflen(tt$)<u+2then200 370 p1=0:p2=0:p3=0:p4=0:u=u2:goto340 400 print"{clr}Freier Speicherplatz in Bytes:";int(fr)" 405 print"{down}Die Eingaberoutine wird abgebrochen.":forx=1to1000:next:t$="_":return 2000 w=1:print"{clr}{yel}{rvon}1-{rvof} Weiterschreiben"spc(62)"{rvon}2-{rvof} Neuen Text eingeben{down}{down}{down}Eingabe > 2020 getx$:x=val(x$):ifx<1orx>2then2020 2030 onxgoto2100,2600 2100 print"{clr}{blu}";:gosub8100:z=z+1:gosub200 2105 ift$="_"thenz$(z)=tt$:tt$="":t$="":w=0:gosub8000:return 2110 z$(z)=tt$:z=z+1:tt$="":gosub200 2120 ift$="_"thenz$(z)=tt$:tt$="":t$="":w=0:gosub8000:return 2130 goto2110 2200 print"{clr}{blu}";:forx=1toz:z$(x)="":next:z=1:gosub8100:gosub200 2210 ift$="_"thenz$(z)=tt$:tt$="":t$="":w=0:gosub8000:return 2220 z$(z)=tt$:z=z+1:tt$="":gosub200 2230 ift$="_"thenz$(z)=tt$:tt$="":t$="":w=0:gosub8000:return 2240 goto2220 2600 print"{clr}Geben Sie nun die maximale Zeilen-{down}":print"laenge (10-70) ein "; 2610 inputu:ifu<10oru>70thenprint"{up}{up}":goto2610 2620 u2=u:print"{down}Wagenruecklauf zwischen"u-3"und"u+2:forx=1to1000:next:goto2200 3000 print"{clr}Geben Sie nun die Zeilen ein, die Sie sehen moechten. (Irrtum = 0) 3010 input"{down}Die kleinere Zahl: ";a:ifa>500thenprint"{up}{up}":goto3010 3015 ifa=0thenreturn 3020 input"{down}Die hoehere Zahl: ";b:ifb<aorb>500thenprint"{up}{up}":goto3020 3100 print"{clr}":c=b-a:forx=atobstep2:print"{rvon}{pur}";x;"{left}.:{rvof}{yel}";tab(7);z$(x) 3107 print"{rvon}{pur}";x+1;"{left}.:{rvof}{grn}";tab(7);z$(x+1):next 3110 poke214,20:print:print:print"{cyn}{rvon}A{rvof}endern {rvon}L{rvof}oeschen {rvon}E{rvof}infuegen {rvon}T{rvof}ausch 3115 poke214,21:print:print:print"{rvon}B{rvof}locktausch {rvon}+{rvof} vor {rvon}-{rvof} zurueck {rvon}_{rvof} Menue 3120 getk$:ifk$=""then3120 3125 ifk$="a"then3200 3130 ifk$="l"then3300 3135 ifk$="e"then3400 3140 ifk$="t"then3600 3142 ifk$="b"then3800 3145 ifk$="-"thena=a-1-c:b=a+c:ifa<1thena=1:b=a+c 3155 ifk$="+"thena=b+1:b=b+1+c:ifb+1+c>500thenb=500:a=b-c 3165 ifk$="_"thena=0:b=0:return 3170 goto3100 3200 input"{down}{yel}{rvon}AENDERUNG{rvof} Zeile ";kk:w=2:ifkk<aorkk>bthen3100 3220 print"{clr}"spc(2)chr$(34)z$(kk):print"{home}{up}";:inputz$(kk):goto3100 3300 input"{down}{yel}{rvon}LOESCHEN{rvof} (Irrtum =0) ";kk:ifkk=0orkk>zthen3100 3310 forx=kktoz:z$(x)=z$(x+1):next:z$(z)="":z=z-1:kk=0:goto3100 3400 print"{down}{yel}{rvon}EINFUEGEN{rvof} vor Zeile (Irrtum = 0)";:inputkk:ifkk>zorkk<0then3100 3407 ifkk=0then3100 3410 w=0:e=0:print"Es koennen maximal 60 Zeilen eingefuegt werden." 3415 forx=1to1000:next:print"{clr}":e=1:ifz+1>=500then3100 3420 gosub200:ift$="_"thene$(e)=tt$:tt$="":t$="":goto3500 3425 e$(e)=tt$:tt$="":t$="":e=e+1:ife=61then3500 3430 ifz+e=500then3500 3435 gosub200 3440 ift$="_"thene$(e)=tt$:tt$="":t$="":goto3500 3445 goto3425 3500 z=z+e:forx=ztokk+e-1step-1::z$(x)=z$(x-e):next 3505 f=0:forx=kktokk+e-1:f=f+1:z$(x)=e$(f):e$(f)="":next:kk=0:e=1 3510 goto3100 3600 print"{clr}{yel}{rvon} TAUSCH {rvof}":input"{down}Altes Wort";t$:ift$=""then3600 3605 input"{down}Neues Wort";at$:ifat$=""then3605 3610 print"{down}TEXTBEREICH (alle Zeilen = 0)" 3615 input"{down}Die kleinere Zeile";kk:ifkk>zthenprint"{up}{up}{up}":goto3615 3620 ifkk=0thenkk=1:km=z:goto3630 3625 input"{down}Die hoehere Zeile:";km:ifkm<kkorkm>zthenprint"{up}{up}{up}":goto3625 3630 forf=kktokm:l=len(t$):m=len(z$(f)):forq=1tom-l+1 3635 ifmid$(z$(f),q,l)<>t$then3660 3640 a$=left$(z$(f),q-1):b$=right$(z$(f),len(z$(f))+1-(q+l)) 3645 c$=mid$(z$(f),q+l,1):goto3670 3655 z$(f)=a$+at$+b$ 3660 nextq:nextf:a$="":b$="":t$="":at$="":q=0:f=0:forp=1to1000:next:goto3100 3670 print"{clr}"f,a$"{rvon}"t$"{rvof}"b$:print"{down}Austausch ? (j/n){down}" 3675 getx$:ifx$=""then3675 3680 ifx$="j"then3655 3685 ifx$="n"then3660 3690 goto3675 3800 input"{yel}{down}{rvon}BLOCKTAUSCH{rvof} (Irrtum=0) von Zeile";aa:ifaa=0then3100 3805 ifaa<1oraa>zthenprint"{up}{up}{up}":goto3800 3810 printspc(23):input"bis Zeile";bb:ifbb<aaorbb>zthenprint"{up}{up}":goto3810 3820 print"{rvon}EINFUEGEN{rvof}"spc(14)"vor Zeile";:inputcc:ifcc<1orcc>zthenprint"{up}{up}":goto3820 3830 dd=bb+1-aa:ifdd>60thenprint"Block zu gross":goto3100 3835 e=0:e$=""::ford=aatobb:e=e+1:e$(e)=z$(d):next 3840 z=z+dd+1:ford=ztocc+dd-1step-1:z$(d)=z$(d-dd):next:d=0:e=0 3845 ford=cctocc+dd-1:e=e+1:z$(d)=e$(e):next:x=0 3850 print"{rvon}LOESCHEN{rvof} von Block 1 (j/n)?" 3855 getx$:ifx$=""then3855 3860 ifx$="j"then3875 3865 ifx$="n"then3100 3870 goto3855 3875 forx=aatoz:z$(x)=z$(x+dd):next:z=z-dd:goto3100 4000 print"{cyn}{clr}Der Text wird auf";u+2;"Zeichen/Zeile for- matiert.{down}":ifz=0thenreturn 4100 print"{rvon}Bitte warten Sie.":v=u+2:m5=0:forx=1toz:l=len(z$(x)):tt=0 4105 ifl<v-5orl=0andx<zthennextx:goto4500 4106 ifl>vthen4600 4110 v=v+m5:forj=lto1step-1:ifl=vthenj=1:goto4150 4130 ifmid$(z$(x),j,1)<>" "then4150 4140 tt=1:z$(x)=left$(z$(x),j)+" "+right$(z$(x),l-j):l=l+1 4150 nextj:v=u+2:m5=0:nextx:return 4500 ifx>=zthenreturn 4600 fort5=lto1step-1:o=asc(mid$(z$(x),t5,1)) 4610 ifo=173oro=189oro=188oro=190oro=191oro=170oro=167oro=164oro=171thenm5=m5+1 4615 ifo=179oro=177oro=172oro=187thenm5=m5+1 4620 o=0:nextt5:goto4110 5000 print"{red}{clr}{rvon}Ausdruck:":print"{down}{down} {rvon}A{rvof}usdruck"spc(72)"{rvon}_{rvof} Menue 5020 getx$:ifx$=""then5020 5030 ifx$="a"then5060 5040 ifx$="_"thenreturn 5050 goto5020 5060 print"{clr}Briefkopf drucken ? (j/n) 5070 getw$:ifw$=""then5070 5075 ifw$="n"orw$="j"then5080 5077 goto5070 5080 print"{down}Geben Sie bitte den Zeilenabstand ein:{down} 5090 input"{rvon} 1 {rvof} , {rvon} 1.5 {rvof} , {rvon} 2 {rvof} ";za 5100 ifza=1orza=1.5orza=2then5105 5102 print"{up}{up}":goto5090 5105 ifza=1thenza=36 5107 ifza=1.5thenza=54 5109 ifza=2thenza=72 5110 zb=za 5120 print"{down}Linker Randabstand (max."78-u")";:inputp:ifp+u+2>80thenprint"{up}{up}{up}":goto5120 5140 print"{down}Seitennumerierung (j/n)? 5150 getab$:ifab$=""then5150 5160 ifab$="j"orab$="n"then5180 5170 print"{clr}":goto5140 5180 print"{down}{rvon}B{rvof}latteinzug {rvon}E{rvof}ndlospapier 5182 getf2$:iff2$=""then5182 5184 iff2$="b"orf2$="e"then5190 5186 print"{clr}":goto5180 5190 print"{down}Welche Zeilen sollen ausgedruckt werden?0=Alle 5200 input"{down}Die kleinere Zahl:";a:ifa=0thena=1:b=z:j=1:goto5230 5210 ifa<0ora>zthenprint"{up}{up}{up}":goto5200 5220 input"{down}Die hoehere Zeile:";b:ifb<aorb>zthenprint"{up}{up}":goto5220 5230 ifw$="j"thenprint"{clr}Briefkopf wird abgedruckt 5240 ifw$="n"thenprint"{clr}Briefkopf wird nicht abgedruckt 5260 print"{down}Zeilenabstand ";:ifza=36thenprint"{rvon} 1 {rvof} 5270 ifza=54thenprint"{rvon} 1.5 {rvof} 5280 ifza=72thenprint"{rvon} 2 {rvof} 5290 print"{down}Linker Randabstand {rvon}"p"{rvof} 5300 ifj=1thenprint"{down}Ausdruck aller Zeilen":goto5320 5310 print"{down}Ausdruck von Zeile"a" bis Zeile"b 5320 ifab$="j"thenprint"{down}Seitennumerierung 5330 ifab$="n"thenprint"{down}Keine Seitennumerierung 5340 iff2$="b"thenprint"{down}Einzelblatteinzug 5350 iff2$="e"thenprint"{down}Endlospapier 5360 print"{down}{down}Alle Eingaben richtig? (j/n) 5370 getf1$:iff1$=""then5370 5380 iff1$="j"thenprint"{clr}Ausdruck erfolgt. Bitte warten Sie.":goto5400 5390 iff1$="n"thenp=0:a=0:b=0:f$="":goto5000 5395 goto5370 5400 open1,4,1:open2,4,7:print#1,chr$(27)"d"chr$(p)chr$(0);:ifw$="n"then5600 5410 print#1,chr$(27)"e"spc(6)w1$spc(64-(len(w1$)))w4$ 5420 print#1,spc(6)w2$spc(64-(len(w2$)))w5$ 5430 print#1,spc(6)w3$spc(64-(len(w3$)))w6$:print#1,spc(6)w8$ 5440 ifa$(1)<>""then5470 5450 print#1,chr$(13)chr$(27)"f":print#1,spc(73)w7$ 5460 forx=1to3:print#1,chr$(13):next:goto5600 5470 forx=1to2:print#1,chr$(13):next:print#1,chr$(27)"f" 5480 print#1,chr$(15)spc(15)w1$" * "w4$" * "w5$chr$(18):print#1,spc(8); 5490 fort=1to40:print#2,"E";:next 5500 print#1,chr$(13) 5510 forp=1to5:ifa$(p)=""then5540 5520 ifp=5thenprint#1,chr$(13)spc(8)a$(p):goto5560 5530 print#1,spc(8)a$(p) 5540 nextp 5560 fory=1to3:print#1,chr$(13):next:print#1,spc(74)w7$:print#1,chr$(13) 5600 ma=0:u1=1:ifza=36thenr8=4 5603 ifza=54thenr8=3 5606 ifza=72thenr8=2 5610 iff2$="e"andab$="n"thenr8=r8+1 5620 ifw$="n"then5650 5630 ifw$="j"anda$(1)=""then5640 5635 ifza=36thent=41 5636 ifza=54thent=27 5637 ifza=72thent=20 5638 gosub5800:a=x+1:goto5700 5640 ifza=36thent=51 5641 ifza=54thent=34 5642 ifza=72thent=26 5643 gosub5800:a=x+1:goto5700 5650 ifza=36thent=64 5651 ifza=54thent=43 5652 ifza=72thent=32 5653 gosub5800:a=x+1:goto5700 5700 ma=0:u1=u1+1 5710 iff2$="b"thenprint"{clr}Seite"u1" eingelegt?(j/n)";:inputf3$:iff3$<>"j"then5710 5720 iff2$="e"thenforr9=1tor8:print#1,chr$(13):nextr9 5730 ifab$="j"thenprint#1,spc(35)"-"u1"-"chr$(13) 5740 ifzb=36thent=62 5741 ifzb=54thent=41 5742 ifzb=72thent=30 5750 gosub5800:a=x+1:goto5700 5800 forx=atob:print#1,chr$(8);:forzz=1tolen(z$(x)):ip$=mid$(z$(x),zz,1) 5805 ifip$=" "orip$=""then5830 5808 ip=asc(mid$(z$(x),zz,1)) 5810 ifip=176orip=185orip=184orip=91orip=168orip=93orip=174then9000 5820 ifip=173orip=189orip=188orip=190orip=191orip=170orip=167orip=164then9035 5825 ifip=172orip=187orip=171orip=179orip=177then9035 5830 print#1,chr$(27)"3"chr$(za);:print#2,ip$;:nextzz:print#2:ma=ma+1:print#1,chr$(27)"3"chr$(za); 5840 ifma=int(t)thenreturn 5850 nextx:print#1:close1:close2:print"{clr}Noch ein Druck (j/n)?" 5860 gety$:ify$=""then5860 5870 ify$="j"thena=0:x=0:t=0:goto5060 5880 ify$="n"thenma=0:goto10000 6000 print"{pur}{clr}Textprogramm {rvon}QUICKTEXT"spc(100)"Diskettenverwaltung{rvof}{down}{down} 6010 printspc(11)"{rvon}1-{rvof} Text speichern"spc(63)"{rvon}2-{rvof} Text einlesen"spc(64) 6020 print"{rvon}3-{rvof} Text loeschen"spc(64)"{rvon}4-{rvof} Neuer Dateiname"spc(62) 6030 print"{rvon}5-{rvof} Directory lesen"spc(62)"{rvon}6-{rvof} Texte verketten"spc(62) 6035 print"{rvon}7-{rvof} Hauptmenue{down}{down}{down}{rght}{rght}{rght}Eingabe > 6040 getx$:x=val(x$):ifx<1orx>7then6040 6050 ifx=7then10000 6060 onxgosub6200,6400,6600,6800,7000,7200 6070 goto10000 6200 print"{clr}SPEICHERN{down}":open15,8,15:print#15,"i0":gosub9100:input"{rvon}Dateiname: {rvof}";cb$ 6205 ifz=0thenclose15:return 6210 db$="0:"+cb$+",s,w":goto9200 6220 open2,8,2,db$:print"{down}Datei {rvon}"cb$"{rvof} wird gespeichert." 6230 print#2,z:print#2,u:forx=1toz:ifz$(x)=""thenz$(x)="_" 6240 print#2,chr$(34);z$(x):ifz$(x)="_"thenz$(x)="" 6250 next:close2:close15:return 6400 print"{clr}EINLESEN{down}":open15,8,15:print#15,"i0":gosub9100:input"{rvon}Dateiname: {rvof}";cb$ 6405 db$="0:"+cb$+",s,r 6410 gosub9100:open2,8,2,db$:gosub9100:print"{down}Datei {rvon}"cb$"{rvof} wird eingelesen. 6420 ifw$<>"ok"thenclose2:close15:goto10000 6430 input#2,z:input#2,u:u2=u:forx=1to500 6440 input#2,z$(x) 6445 ifz$(x)=""then6460 6447 ifz$(x)="_"thenz$(x)="" 6450 nextx 6460 close2:close15:return 6600 print"{clr}LOESCHEN{down}{down}":open15,8,15:print#15,"i0":gosub9100 6610 print"{rvon}Dateiname?{rvof}":inputcb$:db$="s0:"+cb$ 6620 print"{down}{down}Datei {rvon}"cb$"{rvof} wird geloescht.":print#15,db$:close15:return 6800 print"{clr}NEUER DATEINAME{down}{down} 6810 open15,8,15:print#15,"i0":gosub9100:input"{rvon}Alter Dateiname: {rvof}";cb$ 6820 input"{down}{down}{rvon}Neuer Dateiname: {rvof}";cf$:db$="r0:"+cf$+"="+cb$:print#15,db$:close15:return 7000 print"{clr}":open15,8,15:print#15,"i0":gosub9100:close15 7010 open1,8,0,"$":a=0:b$="":c$="":fori=1to6:get#1,a$:next 7020 fori=7to25:print"{rvon}";:get#1,a$:b$=b$+a$:next:printtab(10)b$:b$="" 7030 fori=25to38:get#1,a$:next:fori=1to500:forj=1to18 7040 get#1,a$:ifa$<>chr$(34)thenc$=c$+a$ 7050 nextj 7060 forj=1to5:get#1,a$:ifa$<>chr$(32)thenb$=b$+a$ 7070 next 7080 ifc$="GGGGGGGGGGGGGGGGGG"thenclose1:print"Bitte Taste druecken!":wait198,1:return 7090 close15:close2 7100 printa,c$tab(33)b$:a=a+1:c$="":b$="":forj=1to9:get#1,a$:next:next 7200 print"{clr}TEXTE VERKETTEN"spc(26)"{down}{down}Wieviele Dateien (max. 4)? Irrtum > 1 7210 getx$:x=val(x$):ifx<1orx>4then7210 7215 ifx=1thenreturn 7220 input"{down}{down}Neuer Dateiname?";db$:open15,8,15 7230 fors=1tox:print"{down}Datei #"s;:inputd$(s):nexts 7260 print"{down}{down}{rvon}Dateien werden verkettet. 7270 onxgosub5,7300,7400,7500 7280 return 7300 da$="c0:"+db$+"=0:"+d$(1)+",0:"+d$(2):goto7600 7400 da$="c0:"+db$+"=0:"+d$(1)+",0:"+d$(2)+",0:"+d$(3):goto7600 7500 da$="c0:"+db$+"=0:"+d$(1)+",0:"+d$(2)+",0:"+d$(3)+",0:"+d$(4):goto7600 7600 print#15,da$:gosub9100:close15:return 8000 poke53280,0:poke53281,0:return 8100 poke53280,12:poke53281,12:return 8500 ifzb=36andza=54thent=t-.3 8510 ifzb=36andza=72thent=t-.6 8520 ifzb=54andza=36thent=t+.3 8530 ifzb=54andza=72thent=t-.3 8540 ifzb=72andza=36thent=t+.6 8550 ifzb=72andza=54thent=t+.3 8560 return 9000 ifip=176thenma$=ae$ 9002 ifip=185thenma$=oe$ 9004 ifip=184thenma$=ue$ 9006 ifip=91thenma$=ga$ 9008 ifip=168thenma$=gi$ 9010 ifip=93thenma$=gu$ 9012 ifip=174thenma$=ss$ 9030 print#1,chr$(27)"l"chr$(11);chr$(0);:print#1,ma$+chr$(0)+chr$(0);:ip$="":goto5830 9035 ifip=173thenprint#1,chr$(27)"-"chr$(1);:ip$="" 9040 ifip=189thenprint#1,chr$(27)"e";:ip$="" 9045 ifip=188thenprint#1,chr$(27)"e"chr$(27)"-"chr$(1);:ip$="" 9050 ifip=190thenip$=chr$(14) 9055 ifip=191thenprint#1,chr$(27)"-"chr$(1);:ip$=chr$(14) 9060 ifip=170thenprint#1,chr$(27)"e";:ip$=chr$(14) 9065 ifip=167thenprint#1,chr$(27)"e"chr$(27)"-"chr$(1);:ip$=chr$(14) 9067 ifip=164thenprint#1,chr$(27)"f"chr$(27)"t"chr$(27)"h"chr$(27)"-"chr$(0);:ip$=chr$(20) 9070 ifip=171thenza=36:ip$="" 9072 ifip=179thenza=54:ip$="" 9074 ifip=177thenza=72:ip$="" 9076 ifip=172thenprint#1,chr$(27)"s"chr$(0);:ip$="" 9078 ifip=187thenprint#1,chr$(27)"s"chr$(1);:ip$="" 9090 ifzb<>zathengosub8500 9092 goto5830 9100 input#15,v$,w$,x$,y$:ifval(v$)<>0thenprint"{down}"v$,w$,x$,y$"{down} 9110 return 9200 open2,8,2,db$:gosub9100:ifval(v$)<>63thenclose2:print#15,"s0:"+cb$:goto6220 9210 ifval(v$)=63thenprint"Datei ueberschreiben {rvon}(j/n) 9220 getz$:ifz$=""then9220 9230 ifz$="n"thenclose2:close15:goto6200 9240 ifz$="j"thenclose2:print#15,"s0:"+cb$:gosub9100:goto6220 9250 goto9220 10000 x$="":x=0:q=0:w=0:print"{clr}{grn}Textprogramm {rvon}QUICKTEXT{rvof}{down}{down} 10010 print" Menue:"spc(34)"{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{down}{down}{rght}{rght}{rvon}1-{rvof} Text eingeben"spc(64) 10020 print"{rvon}2-{rvof} Text korrigieren"spc(61)"{rvon}3-{rvof} Text formatieren"spc(61) 10030 print"{rvon}4-{rvof} Text ausdrucken"spc(62)"{rvon}5-{rvof} Diskettenverwaltung"spc(58) 10040 print"{rvon}6-{rvof} Briefkopf eingeben"spc(59)"{rvon}7-{rvof} Ende{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}Eingabe > 10060 getx$:x=val(x$):ifx<1orx>7then10060 10070 ifx=7thenpoke788,49:print"{clr}";:end 10075 ifx=5then6000 10080 onxgosub2000,3000,4000,5000,,11000:goto10000 11000 print"{blu}{clr}Geben Sie bitte den Text des Briefkopfesein: (Irrtum = 0) 11010 input"{down}Zeile 1 li:";w1$:ifw1$="0"thenreturn 11015 input"{down}Zeile 2 li:";w2$ 11020 input"{down}Zeile 3 li:";w3$:input"{down}Zeile 4 li:";w8$ 11030 input"{down}Strasse:";w4$:input"{down}PLZ/Wohnort/PA:";w5$ 11050 input"{down}Telefon:";w6$:input"{down}Datum:";w7$ 11060 print"{down}Anschrift eingeben? (j/n) 11070 gety$:ify$=""then11070 11080 ify$="n"thenreturn 11090 ify$="j"then11110 11100 goto11070 11110 print"{clr}":forp=1to5:print"{down}Zeile"p":";:inputa$(p):nextp:return