C 64
Textverarbeitung

Tips zu Textverarbeitungsprogrammen

Bei der Arbeit mit Textprogrammen wie »SM-Text«, »StarTexter« und »Vizawrite« kann man sich durch Tricks das Leben leichter machen. Wir zeigen Ihnen wie es geht.

Kann man Basic-Programme mit Textverarbeitungsprogrammen bearbeiten? Natürlich geht das, Sie brauchen nur ein Programm, das das Basic- in ein Text-File konvertiert, und diesen Vorgang nach der Bearbeitung wieder rückgängig macht. Ein solches Programm ist der »text-transposer«, dessen Listing wir nachfolgend abgedruckt haben.

Bevor wir allerdings dazu kommen, haben wir noch ein paar Tips zu »SM-Text« und »StarTexter«.

Tips zu SM-Text

Lädt man das »!«-Programm (Lader-Programm), so erscheint zunächst ein Menü, in dem man nochmals ein »t« für Textverarbeitung eingeben muß. Wem das zuviel ist, braucht nur im »!«-Programm in Zeile 60 folgende Erweiterung voranzustellen: 60 POKE631,84:POKE632,13: POKE 198,2:..

Es wird ein »t« im Tastaturpuffer abgelegt, und bei der Abfrage eingelesen. So ist es nun möglich, »SM-Text« in einem Stück zu laden.

Bei der neuesten Version (SM-Text+) braucht man diesen Kniff nicht, da das Programm mit »*« geladen werden kann.

Hier gibt es aber die Möglichkeit, kleine Routinen zu programmieren und diese zu speichern. Dadurch kann man einen kleinen Mangel kompensieren, der beim Speichern eines Textes auftritt. Normalerweise wird der Text dann gelöscht und man müßte ihn, wenn man weiterarbeiten möchte, wieder laden. Das Abarbeiten der einzelnen Menüpunkte können Sie dem C 64 überlassen. Nachstehend ist untereinander aufgelistet, was einzugeben ist. Daneben steht die Erklärung der Tastenoperationen:

Beim Eingeben der Routine sollte man einen Text benutzen, der bereits auf Diskette vorhanden ist, damit man die Routine (die ja beim Speichern gleichzeitig ausgeführt wird), eingeben kann.

Will man den laufenden Text zwischendurch einmal speichern, so genügt das Drücken von »RESTORE« und der F1-Taste.

Ein weiterer Trick ist folgender: Es geht darum, einen Info-Text in den vorhandenen Text, den man gerade bearbeitet, einzublenden und wieder zu löschen (Fenstertechnik). In diesem Infotext können zum Beispiel die gängigsten Steuerzeichen erklärt sein. So geht man vor:

Nun kann man durch Drücken von RESTORE und der F3-Taste einen beliebigen Text einblenden und ihn durch Drücken von RESTORE und der F4-Taste wieder löschen.

Tips zu StarTexter

Dieses Programm ist fast als perfekt zu bezeichnen. Es fehlt jedoch der Tabulator. Hier kann man sich aber leicht behelfen.

In einer Zeile setzt man an der gewünschten Tabulatorstelle einen Punkt. Dann vervielfältigt man diese Zeile so oft wie nötig: CTRL, a, e, i; etc. Hat man sich so ein mit Punkten ausgefülltes Feld aufgebaut, kann man mit der RUN/Stop-Taste (Worttabulator) schnell von Punkt zu Punkt springen.

Basic-Programme bearbeiten

Basic-Programme sind im Speicher normalerweise als Gemisch von Klartext und Token vorhanden. Damit kann ein Textprogramm natürlich nichts anfangen. Es ist also erforderlich, das Programm im Klartext zu haben. Der LIST-Befehl benutzt eine Betriebssystem-Routine, die dies bewerkstelligt. Es besteht die Möglichkeit, sein Basic-Programm als Text-File zu speichern. Man gibt im Direktmodus ein: open8,8,8"NAME,P,W":cmd8:list: print#8 und schließt das File mit close8

Ein solches Text-File kann zwar von vielen Textprogrammen geladen werden (auch als sequentielles File denkbar). Leider treten aber verschiedene unangenehme Effekte auf: Anführungsstriche verschwinden; die Formatierung stimmt nicht; Zeichen sind grundsätzlich codemäßig anders definiert.

Das Programm »text-transposer« (Listing) paßt das Text-File an das entsprechende Textprogramm an. Nun kann man mit diesem modifizierten File im Textprogramm hantieren. Beim Speichern macht nun jedes Textprogramm seinen eigenen Spaghetti-Code daraus. Mit »text-transposer« kann dieses File wieder in ein lauffähiges Basic-Programm umgewandelt werden.

Programmbeschreibung und Benutzung

Im Hauptmenü besteht die Auswahl zwischen

  1. »prg-file« in »textprg-file« wandeln und
  2. »textprg-file« in »basic-file« wandeln.

Hat man sein Basic-Programm in der oben erwähnten Weise abgespeichert, wählt man (a). Dann wählt man sein Textprogramm 1 bis 3 und lädt sein Text-Quellprogramm. Danach speichert man das modifizierte Textfile (unter anderem Namen).

Liegt nach der Bearbeitung mit einem Textprogramm ein von diesem gespeichertes File vor, wählt man (b) und lädt dieses Programm. Es besteht die Möglichkeit, das zu wandelnde Text-File komplett zu übernehmen oder einzeln nach Zeilennummern zu editieren. Editiert man im Textprogramm, sollte man die READY-Meldung unbedingt stehen lassen, »text-transposer« erkennt dadurch das Ende durch einen SYNTAX ERROR. Ist dies geschehen, kann man mit RUN 61500 den »text-transposer« löschen.

Bemerkungen zu SM-Text

Bevor man das gewandelte Text-File (sequentiell) lädt, muß man die Zeilenbreite auf die längste auftretende Zeile stellen (zirka 100). SM-Text hat die Eigenschaft, Buchstaben zu verlieren, wenn das Format größer ist als die eingestellte Zeilenzahl. Weiter ist die Umstellung vom deutschen Zeichensatz auf Commodore(ASCII-)Tastatur sinnvoll, aber nicht unbedingt nötig.

Hat man den Text geladen, bleibt als einzige Forderung nur, daß eine Leerzeile nach dem Textnamen stehenbleiben muß. Weiterhin sollte das Programm nicht mehr als 100 Zeilen haben, da SM-Text sonst indiskutabel langsam wird.

Bemerkungen zu StarTexter

Das Programm verarbeitet maximal 250 Zeilen ohne merkbar langsamer zu werden. Die Pfeil-nach-links-Taste wird durch das Telefonsymbol (Commodore-Taste »t«), und der Klammeraffe durch Pac-man dargestellt. Man fängt in der ersten Zeile an. Auch hier muß die READY-Meldung als Endekennzeichen am Schluß stehenbleiben.

Bemerkungen zu Vizawrite

Das Text-File wird als sequentielles File eingelesen. Dazu geht man ins Editierfeld und benutzt die Merge-Funktion: Commodore-Taste drücken, großes M, Namen eingeben, bei page ein »s« eingeben, RETURN. Nun wird das Text-File als sequentielles File geladen. Dabei sollte die Formatzeile unbedingt 75 Zeichen lang sein (sonst klappt die Rückwandlung nicht richtig).

Ist das Text-File geladen, muß man die ersten zwei Leerzeilen unbedingt stehenlassen. Man sollte sich nicht daran stören, wenn eine Basic-Zeile etwas unkonventionell abgekürzt wird (durch word-wrapping, also automatischem Zeilenumbruch); den Abschluß einer Basic-Zeile bildet immer das Dreieck-Sonderzeichen für RETURN.

Die Anführungsstriche werden von Vizawrite normalerweise eliminiert und sind daher vom »text-transposer« durch ein Sonderzeichen ersetzt. Beim weiteren Editieren des Programms kann man natürlich Anführungsstriche weiterverwenden. Beim Rücktransformieren werden die Anführungsstriche und das Sonderzeichen in jeden Fall als Anführungsstriche ausgegeben.

Funktionsweise von »text-transposer«

Der Klartext wird ab Adresse 20 000 geladen (die Lade- und Speicherroutine ist angelehnt an filecopy der Test/Demo-Disk). Die Parameter sind ab Zeile 61070 aufgeführt (lb = 32,hb = 78). Je nach verwendetem Textprogramm wird etwas unelegant von außen in ein Maschinenprogramm hineingePOKEt, um eine Verzweigung zu erreichen. Bei Vizawrite und SM-Text werden die Zeichen nacheinander eingelesen. Bei StarTexter wird beim Einlesen gleich formatiert, das heißt eine Zeile wird auf 80 Zeichen mit Leerzeichen aufgefüllt.

Vor dem Speichern werden, je nach Textprogramm, die entsprechenden Parameter (a) gesetzt (Zeile 60710, 60830, 60940). Zur Erklärung der einzelnen Parameter:

Wünscht man weitere Code-Wandlungen, so braucht man dies nur mit POKE TA + (ALTER CODE),(NEUER CODE) zu machen. TA ist eine Tabelle, die ab 50 000 im Speicher steht.

Hat man das Text-File mit einem Textprogramm bearbeitet und gespeichert, muß eine erneute Code-Wandlung erfolgen (b).

Beim Editieren (Schleife 60310 bis 60390) wird durch SYS 864 eine Basic-Zeile nach der anderen auf den Bildschirm geschrieben, gleichzeitig der Code geändert, und die Zeile durch ein »Carriage Return« im Tastaturpuffer übernommen. Bei Zeilen, die länger als 80 Zeichen sind, erfolgt die Aufforderung zum Kürzen.

Die Schleife wird beendet, wenn die READY-Meldung auf dem Bildschirm erscheint, und bei dem Versuch, diese mit RETURN zu übernehmen, ein Syntax Error entsteht. Man hat nun die Möglichkeit, mit RUN 61500 den »text-transposer« zu löschen.

Hinweise zum Abtippen

Alle REM-Zeilen können weggelassen werden. Umnummerierung ist jedoch nicht ratsam, da aus dem Direktmodus heraus Zeilen direkt angesprungen werden, und durch ein Renumber nicht geändert würden (Zeilen 60380 und 61550).

(M. Schacht/og)
60000 rem *****************************
60010 rem **     text-transposer     **
60020 rem **(vizawrite/startexter/sm)**
60030 rem **   m.schacht (c) 1985    **
60040 rem *****************************
60050 :
60060 printchr$(147):poke788,52:rem run/stop blockieren
60070 an=32:en=78:rem lb/hb basic-ende=anfang textspeicher
60080 zs=20000:ta=50000:rem adressen zwischenspeicher/tabelle
60090 poke53280,0:poke53281,0
60100 fori=1to38:bl$=bl$+chr$(32):bs$=bs$+chr$(163):next
60110 gosub61220:gosub61300:rem datas einlesen
60120 poke250,80:poke251,195:sys927:rem tabelle vorbelegen
60130 :
60140 rem ---------------menue/abfragen
60150 po=4:az=18:gosub60690:printchr$(159)chr$(14)chr$(8):poke214,1:print
60160 printchr$(18)left$(bl$,14);"Text-Editor";left$(bl$,13):printbl$:printbs$
60170 poke214,22:print:printchr$(18)left$(bl$,13);"mit _ zurueck";left$(bl$,12)
60180 poke214,8:print:fori=0to1:printme$(i):print:next
60190 poke198,0:wait198,1:getx$:ifx$="_"thenprintchr$(147):poke788,49:end
60200 ifasc(x$)<65orasc(x$)>66then60190
60210 poke214,2:print:printtab(2)right$(me$(asc(x$)-65),34)
60220 on(asc(x$)-64)gosub60420,60510
60230 po=4:az=18:gosub60690:goto60150
60240 :
60250 rem ---------------file editieren
60260 poke214,20:print:printchr$(18)"einzeln oder komplett editieren (e/k)?"
60270 poke198,0:wait198,1:getx$:ifx$<>"e"andx$<>"k"andx$<>"_"then60270
60280 ifx$="_"then run 60070
60290 poke788,49:poke49155,0:ifx$="e"thenpoke49155,1:rem flag
60300 :
60310 rem......schleife anfang.........
60320 printchr$(147):poke214,0:sys58640
60330 sys864:rem codewandlung und print
60340 an=peek(5)+peek(250)+1:en=peek(251):ifan>255thenan=an-256:en=en+1
60350 poke250,an:poke251,en:rem neue anfangsadresse
60360 poke631,19:poke632,13:poke633,13:poke634,13:poke198,4:ifpeek(49155)=1thenpoke198,2
60370 ifpeek(214)>2andpeek(1104)<>32thenpoke198,2:poke214,3:poke211,0:print:print"kuerzen!?"
60380 printchr$(18)"run 60320":end
60390 rem.....schleife ende............
60400 :
60410 rem --------------(a)-prg => text
60420 po=8:az=3:gosub60690:poke214,4:print
60430 printtab(4)chr$(28)me$(5):printme$(6)chr$(34)me$(7)chr$(34);me$(8)
60440 printme$(9)chr$(159):printbs$
60450 poke214,6:print:gosub60580:ift$="_"thenreturn
60460 gosub61080:rw$="r":ad=828:gosub61140:ifn$="_"thenreturn
60470 poke214,19:print:onval(t$)gosub60720,60840,60950
60480 rw$="w":ad=885:gosub61140:run 60070
60490 :
60500 rem --------------(b)-text => prg
60510 po=8:az=3:gosub60690
60520 gosub60580:ift$="_"thenreturn
60530 poke214,19:print:onval(t$)gosub60770,60890,61020
60540 rw$="r":poke936,96:ad=828:gosub61140:poke936,234:ifn$="_"thenreturn
60550 goto60260:rem editieren
60560 :
60570 rem-----------------------auswahl
60580 poke214,8:print:fori=2to4:print:printtab(12)me$(i):next
60590 poke198,0:wait198,1:gett$:ift$="_"thenreturn
60600 ifasc(t$)<49orasc(t$)>51 then60590
60610 poke214,val(t$)*2+7:print:printtab(12)chr$(18)me$(val(t$)+1):return
60620 :
60630 rem -----------------------fehler
60640 input#15,fe,fe$:iffe=0thenreturn
60650 poke214,20:print:printtab(19)chr$(28)left$(fe$+bl$,19)chr$(159)
60660 fori=0to2000:next:po=19:az=3:gosub60690:poke214,po:print:return
60670 :
60680 rem ---------teilbereich loeschen
60690 poke214,po:print:forq=1toaz:printbl$:next:return
60700 :
60710 rem -----------(a)-parameter-viza
60720 f$="s":an=32:en=78
60730 poketa+34,191
60740 return
60750 :
60760 rem -----------(b)-parameter-viza
60770 f$="p":poke985,96:rem prg-file/flag
60780 fori=0to31:poketa+i,i+64:poketa+65+i,i+97:next
60790 poketa+220,13:poketa+127,34
60800 poke250,an+23:poke251,en+1:rem bytes ueberlesen
60810 return
60820 :
60830 rem -----------(a)-parameter-star
60840 f$="p":an=184:en=78
60850 poketa+95,163:poketa+13,95
60860 return
60870 :
60880 rem -----------(b)-parameter-star
60890 f$="p":poke985,234
60900 poketa+95,13:poketa+163,95
60910 poke250,an+2:poke251,en:rem bytes ueberlesen
60920 return
60930 :
60940 rem -----------(a)-parameter---sm
60950 f$="s":an=15:en=78
60960 nn$=">.............000"
60970 fori=1to17:pokezs-18+i,asc(mid$(nn$,i,1)):next
60980 poketa+34,191
60990 return
61000 :
61010 rem -----------(b)-parameter---sm
61020 f$="s":poke985,96:rem seq-file/flag
61030 poketa+191,34
61040 poke250,an+19:poke251,en:rem bytes ueberlesen
61050 return
61060 :
61070 rem --------(a)-all.parameter-prg
61080 f$="p":an=32:en=78
61090 ift$="1"ort$="3"thenpoke936,96
61100 ift$="2"thenpoke936,234
61110 return
61120 :
61130 rem ---------file lesen/schreiben
61140 w$="<load> ":ifrw$="w"thenw$="<save> "
61150 poke214,19:print:print:printw$;:input"file-name:";n$:ifn$="_"thenreturn
61160 open15,8,15:open2,8,2,"@:"+n$+","+f$+","+rw$:gosub60640
61170 iffe<>0thenclose2:close15:goto61140
61180 poke3,an:poke4,en:sys ad:poke214,21:print:printbs$
61190 close2:close15:return
61200 :
61210 rem ------------------datas menue
61220 fori=0to9:readme$(i):next:return
61230 data "(a) prg-file  in  textprg-file wandeln"
61240 data "(b) textprg-file in basic-file wandeln"
61250 data "(1) Vizawrite ","(2) StarTexter ","(3) SM - Text "
61260 data "prg-file zuvor abspeichern mit","open8,8,8,","name,p,w"
61270 data ":cmd8:list:print#8","close8"
61280 :
61290 rem ------datas maschinenroutinen
61300 ifpeek(828)=162thenreturn:rem bereits eingelesen
61310 fori=0to170:readdt:poke828+i,dt:next:return
61320 data162,2,32,198,255,160,0,32,207,255,32,168,3,145,3,230,3,208,2,230,4
61330 data36,144,80,238,165,3,133,5,165,4,133,6,76,204,255,160,0,177,250,170
61340 data189,80,195,32,210,255,201,13,240,106,200,132,5,208,238,96,162,2,32
61350 data201,255,198,1,160,0,56,165,3,229,5,165,4,229,6,176,17,177,3,170,189
61360 data80,195,32,210,255,230,3,208,232,230,4,208,228,230,1,76,204,255,160
61370 data0,152,145,250,200,208,250,96,234,232,201,13,240,1,96,145,3,224,82,240
61380 data13,176,16,169,32,232,230,3,208,241,230,4,208,237,162,2,96,145,3,224
61390 data162,240,11,169,32,232,230,3,208,243,230,4,208,239,162,2,96,96,200,177
61400 data250,201,32,240,1,96,132,5,76,218,3
61410 :
61490 rem -----------------prg loeschen
61500 printchr$(147);tab(7)"Text-Editor loeschen (j/n)?":poke198,0:wait198,1:getx$
61510 ifx$<>"j"andx$<>"n"then61500
61520 ifx$="n"thenrun60060
61530 poke49152,0
61540 printchr$(147);:fori=peek(49152)topeek(49152)+7:print(i+6000)*10:next
61550 print"goto61540":poke49152,peek(49152)+8
61560 poke631,19:fori=632to640:pokei,13:next:poke198,10
Listing. »text-transposer«
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →