3000 61e6 cc00 T ... BASICODE S.19-28
		    - 19 -	
5000 SR=VR: GOSUB 300
5010 PRINT 'Ihr habt jetzt SRS Fragen gehabt'

GOSUB 310 (Zahl formatieren)
Diese Subroutine macht in SRS einen 'string', der be-
stimmt wird durch die Variablen CT, CN und SR. SRS
wird ebebso wie in der vorigen Routine den Wert von
SR angegeben. Die Gesamtlänge von SRS beträgt nun ge-
nau CT Zeichen, davon CN Zeichen nach dem Dezimal-
punkt, besteht SRS aus CT Sternen. Falls erforderlich,
wird SR korrekt abgerundet. Die Variablen CT, CN und
SR werden nicht verändert durch Aufruf der Routine.
Einige Beispiele:  (Or. S. 27 unten)

GOSUB 330 (Großbuchstaben machen)
Diese Subroutine verwendet alle eventuell in SRS vor-
handenen Buchstaben in Großbuchstaben. Nach Ablauf
kann beispielsweise MIDS (SRS, 3.1) wohl 'A', aber
nie 'a' sein. In Programmen, wo Daten in alphabeti-
scher Reihenfolge sortiert werden, kann das sehr nütz-
lich sein.
GOSUB 350 (Text nach Printer)
Man drucke SRS auf dem Printer ab, schließe jedoch
die Zeile noch nicht ab. Sie kÖnnen somit noch mehr
mittels dieser Routiene auf die gleiche Zeile printen.
Auf eine andere Weise etwas zum Printer zu schicken,
ist in BASICODE-3 nicht gestattet.
Man beachte: Lange nicht jeder hat einen Printer zur
Verfügung! Man bitte daher im Programm den Nutzer,


		    - 20 -
eine Wahl zu treffen zwischen dem Abdrucken auf dem
Printer und dem Abdrucken auf dem Schirm.
GOSUB 360 (Printer für die Zeilenführung)
Man schließe die Zeile auf dem Printer ab und begin-
ne eine neue Printerzeile. Wenn auf einem neuen Blatt
Papier angefangen werden muß, wird es nötig sein, daß
das Programm selbst behält, wieviele Zeilen schon ge-
druckt sind, und aufgrund dessen die Subroutine in
einer richtigen Zahl von Malen aufruft.
GOSUB 400 (Musik)
Diese Subroutiene produziert einen Ton. Der gewünsch-
te Ton wird in drei Variablen angegeben:
   SP (Sound Pitch) für die Tonhöhe,  0 < = SP < = 127
   SD (Sound Duration) für die Dauer, 1 < = SD < = 255
   sv (Sound Volume) für die Stärke,  0 < = SV < =  15
Die Subroutine wird erst beendet, wenn der Ton abge-
laufen ist.
Ein paar Beispiele:
SV = 0    absolute Stille
SV = 7    durchschnittliche, normale Stärke
SV = 15   maximale Stärke
SD        die Zeitdauer in Einheiten von 100 Milli-
          sekunden. SD = 10 stimmt somit überein mit
          einer Dauer von 1 Sekunde.
SP = 1    der niedrigste Ton, ein abscheuliches Ge-
          brumm
SP = 60   das 'zentrale C'
SP = 69   das 'Standard'-A, meistens etwa 440 Hz
SP = 127  der höchste Ton, für viele Mensschen unhörbar

		    - 21 -
Für jeden halben Ton höher oder tiefer ist SP 1 höher
bzw. tiefer. Jede Oktave umfaßt 12 Töne. Es ist nicht
sinnvoll, alle möglichen Werte von SP zu verwenden.
Erstens weil die sehr niedrigen und sehr hohen Werte
kein angenehmes Geräusch erbringen, und zweitens weil
nicht jeder Computer in der Lage ist, den vollen Be-
reich von 127 Tönen hören zu lassen. In bezug auf die-
ses Letztgenannte sei auch auf Anhang 1 verwiesen.
GOSUB 450 (abbrechbare Warteroutine)
Beim Aufrufen dieser Subroutine muß in SD eine Zahl
stehen, die eine Wartezeit in Einheiten von 100 Mil-
lisekunden angibt. SD = 10 stimmt somit genau mit ei-
ner Sekunde überein. Die Subroutine wird automatisch
verlassen, wenn die angegebene Zeit um ist. In die-
sem Fall ist beim Verlassen der Routine SD = 0, INS
= "" und IN = 0.
Wenn jedoch während der Wartezeit eine Taste einge-
drückt wird, wird die Routine sofort beendet. In SD
steht dann noch die übrige Zeit in Einheiten von 100
Millisekunden, in INS die eingedrückte Taste und in
IN der Code dieser Taste. Man beachte für die Codes
in IN die Bemerkungen bei Subroutinne 200.
Bemerkung: Für eine nicht unterbrechbare Warteroutine
können Sie GOSUB 400 mit SV=0 benutzen.
Ein Beispiel: (Or. S. 29, Mitte)
1 Drücken Sie auf eine Taste ...
2 Nach 5 Sekunden haben Sie noch immer nichts eingedruckt
3 Es dauerte SRS Sekunden
4 ehe Sie die INS eindrucken

		    - 22 -
GOSSUB 500 (Bestand öffnen)
Beim Aufrufen dieser Subroutine muß in NFS der Name
des zu öffnenden Bestandes stehen (maximal 7 Zeichen),
und in NF ein Code:
NF = 0 : Öffnen für eine Eingabe von der BASICODE-
         -Kassette aus
NF = 1 : Öffnen für die Ausgabe zur BASICODE-Kassette
NF = 2 : Öffnen für eine Eingabe aus dem eigenen Hin-
         tergrundgedächtnis
NF = 3 : Öffnen für die Ausgabe an das eigene Hinter-
         grundgedächtnis
NF = 4 : Öffnen für die Eingabe aus der Diskette
NF = 5 : Öffnen für die Ausgabe aus der Diskette
NF = 6 : Öffnen für die Eingabe aus der Diskette
NF = 7 : Öffnen für die Ausgabe in die Diskette.
Kurzum:
gerade Zahlen = Eingabe
ungerade Zahlen = Ausgabe
Nummer 0 und 1: Kassette in BASICODE-Format (siehe
                weiter unten); NSF nicht verwendet;
Nummer 2 und 3: Diskette oder Kassette auf die Art,
                gemäß der es der Computer normaler-
                weise selbst tut;
Nummer 4 und 5: ein zweiter Bestand, der nur möglich
                ist nach der Diskette;
Nummer 6 und 7: ein dritter Bestand, auch wieder nur
                auf Diskette.
Kassetten, die mit Beständen in BASICODE-Format (NF =
1) beschrieben sind, können allen BASICODE-Compu-

		    - 23 -
-tern eingelesen (NF = 0) und verarbeitet werden.
Auf diese Weise können Computer verschiedener Typen
somit Daten austauschen.
Während des Arbeitens dieser Bestandsroutine und
der folgenden Bestandsroutinen können auf der unter-
sten Schirmzeile bestimmte Meldungen erscheinen (bei-
spielsweise: 'Stell den Recorder auf Wiedergabe').
Diese Meldungen müssen natürlich vom Nutzer befolgt
werden. Während des Lesens und Schreibens von der
Kassette wird auf dem Schirm 'unterste Zeile) eini-
ge Aktivität sichtbar sein. Diese dient als Kontrol-
le über die Wirkung der Routinen. Nach Ablauf der Rou-
tine werden diese Meldungen wieder gelöscht. Dabei
kann somit die unterste Schirmzeile gelöscht werden.
Diese Zeile wird somit durch ein gutes BASICODE-3-
Programm nicht genutzt werden.
Bemerkung: Zur Diskette können somit maximal drei Be-
stände zugleich geöffnet werden. Es gibt keine Ga-
rantie (im Gegenteil), daß jeder BASICODE-Computer
dazu imstande ist.
GOSUB 540 (Eingabe aus Bestand)
Bei Aifruf dieser Subroutine steht in NF der Bestands-
code liefert in INS den ersten 'string' aus dem zuvor
geöffneten Bestand und zugleich in IN den Wert 0. Wenn
jedoch in INS der letzte 'string' aus dem Bestand ge-
liefert wird, wird in IN der Wert 1 abgegeben. Wenn
die Subroutine aufgerufen wird, wenn der letzte 'string'
bereits abgeliefert ist, wird INS = "" und IN = 1.
Wenn die Subroutine einen Fehler entdeckt, beisiels-

		    - 24 -
-weise einen Lesefehler von der Kassette her, so
wird IN = -1 gemacht. Wenn keine Antwort in INS mög-
lich ist, beispielsweise wenn der Bestand nicht geöff-
net ist, wird INS = "" und IN = -1 abgeliefert.
GOSUB 560 (Ausgabe zum Bestand)
Der Inhalt von SRS wird in den Bestand mit Codenummer
NF geschrieben. In der Variablen IN werden eventueel-
le Fehler gemeldet: IN=0 wenn alles gut ist, IN = -1
wenn die erbetene Ausgabe unmöglich ist
GOSUB 580 (Bestand abschließen)
Der Bestand mit Code NF wird abgeschlossen. In der
Variablen IN werden eventuelle Fehler gemeldet: IN = 0
wenn alles gut ist, IN = -1, wenn die erbetenen Aktion
unmöglich ist.
Ein Programmbeispiel für die Bestandsroutinen:
Or. S. 31
1 REM offen für Ausgabe
2 Tippe einen Namen ein
3 REM-Bestand abschließen
4 Spule die Kassette zurück dann auf eine
  Taste
5 REM offen für Eingabe

GOSUB 600 (graphischer Betrieb und Löschen des Schirms)
Diese Subroutine schaltet auf graphischen Betrieb um
und löscht/reinigt den Schirm. Der graphische Cursor
wird am Punkt 0,0 aufgestellt, was übereistimmt mit 
dem linken oberen Winkel des graphischen Schirms. Die
Einteilung des graphischen Schirms ist folgendermaßen:

		    - 25 -
0,0 ist der Punkt genau links oben auf dem graphi-
schen Schirm,
1,0 ist der Punkt genau außerhalb des rechten obe-
ren Winkels,
0,1 ist der Punkt genau unter dem linken unteren
Winkel und
1,1 liegt schräg unter dem rechten unteren Winkel
des graphische Schirms.
Nachbemerkung 1: Im graphischen Betrieb haben der
übliche PRINT-Auftrag und die Subroutinen 100, 110,
120, 150, und 220 keine Bedeutung. Diese dürfen nicht
verwendet werden, bevor mit GOSUB 100 wieder auf den
textlichen Betrieb zurückgeschaltet worden ist. Be-
halten Sie das im Auge, wenn Sie mit Beständen ar-
beiten!
Nachbemerkung 2: Gemessen auf dem Bildschirm ist der
Abstand von Punkt (0,0) zum Punkt (0,1) genau 3/4
(75%) des Abstandes von (0,0) zu (0,1). Der Punkt
(1/2, 1/2) kommt in die Mitte des Bildschirms.
GOSUB 620 (Plot und Punkt)
Diese Subroutine setzt den graphische Cursor auf den
Punkt Ho, VE und 'plottet' diesen Punkt. Sowohl HO
als VE müssen mindestens gleich 0 und kleiner
als 1 sein. Wenn CN = 0 wird, wird der Schirmpunkt
angesetzt (Vordergrundfarbe), wenn CN = 1 wird, wird
gerade dieser Punkt ausgesetzt (Hintergrundfarbe).
GOSUB 630 (Zug und Linienstück)
Diese Subroutine tut fst das gleiche wie Subroutine

		    - 26 -
620. Jetzt jedoch nicht nur der angegebene Punkt
geplottet, sondern ein vollständiges Linienstück von
dort an, wo der graphische Cursor stand, zu dem in
HO und VE angegebenen Punkt. Das gesamte Linienstück
wird in die mi CN bezeichnete Farbe gezogen. Nach
Ablauf steht der graphische Cursor in dem von HO und
VE angegebenen Endpunkt.
GOSUB 650 (Text auf dem graphischen Schirm)
Diese Subroutine printet den Text in SRS auf den gra-
phischen Schirm. HO und VE müssen die (graphische) Po-
sition des linken oberen Wnnkels des ersten Zeichens
angeben. Die Zeichen werden so weit wie nur möglich
auf dem Schirm im 'normalen' Format abgebildet, wo-
bei somit prinzipiell 40 auf den Schirm passen. Das
ist jedoch nicht in allen Computern gewährleistet
(vgl. Anhang 1). Es wird daher empfohlen, in SRS nicht
zu viele Zeichen einzugeben. Der Text wird wiederge-
geben in Vordergrundfarbe (wie CN =0 ) oder in Hin-
tergrundfarbe (wie CN = 1). Nach Beendigung steht der
graphische Cursor in HO, VE.
Ein einfaches Beispiel:
Original S. 32, Mitte

Dieses Stückchen Programm zeichnet auf den Schirm ein
großes Quatrat, wobeei zum linken unteren Winkel hin
die Werte stehen 'LINKS UNTEN'.

GOTO 950 (Programm-Beendigung)
Die Aufträge END und STOP sind in BASICODE-3 nicht zu-

		    - 27 -
-lässig. Stattdessen muß man verwenden: GOTO 950.
Dann wird diee Maschine wieder in den Zustand gebracht,
in dem sie sich auch normalerweise auch nach dem Ein-
schalten befindet, also Cursor an, Stopptaste in Be-
trieb, normaler Schirm, normaler 'string'-Raum usw.
Danach wird der Schirm gelöscht, und und das Programm ist
zu Ende. Jedoch das Programm wird nicht angetasteet,
und die BASICODE-Routine werden nicht vernichtet.
BASICODE-2-Programme müssen - um in BASICODE-3 arbei-
ten zu können - auf die gleiche Weise angepaßt wer-
den.
GOTO 1000 (Programmstart)
Die Instruktion RUN ist in einem BASICODE-3-Programm
untersagt. Wenn es erforderlich ist, vom Programm
aus neu zu beginnen (beispielsweise um 'arrays' zu
löschen und neu zu dimensionieren), so muß man (obli-
gatorisch) GOTO 1000 verwenden.

4.4. Übersicht der BASICODE-3-Subroutinen
__________________________________________
 10 erste Zeile des Subroutineblocks
 20 Programmstart, System-Reset, Variable löschen usw.
100 man schalte um auf textlichen Betrib und lösche
    den Schirm
110 man versetze den Cursor in die Position HO, VE
120 man registriere die Cursor-Positio in HO, VE
150 man drucke auf aufällige Weise 3 Zwischenräume;
    SRS; 3 Zwischenräume
200 man gebe eine eventuell eingedrückte Taste in INS
    und IN
210 man warte bis zum Tastendruck und gebe diesen
    in INS und IN

		    - 28 -
220 man gebe in IN den Code desse, was in Schirmpo-
    sition HO, VE zu sehen ist
250 man gebe einen kleinen Pfiff als Aufmerksamkeits-
    zeichen
260 man gebe 'random' in rv, so daß 0 < = RV < 1
270 man mache 'garbage collect' und gebe in FR die
    Gesamtzahl freier 'bytes'
280 man schalte die Stopp-Taste ein (FR = 0) oder
    aus (FR = 1)
300 man gebe in SRS die Textform von SR, ohne Zwischen-
    räume
310 man gebe in SRS die Textform von SR, formatiert
    gemäß CT und CN
330 man verändere alle Kleinbuchstaben in SRS in Groß-
    buchstaben
350 man schicke SRS in den Printer
360 man schließe die Printzeile ab mit 'Wagen zu-
    rück' und 'Papierstapeln'
400 man mache einen Ton gemäß SV, SD und SP
450 man warte maximal SD + 100 Millisekunden auf ei-
    nen Tastendruck
500 man öffne den Bestand NFS gemäß code NF
540 man lese INS aus geöffneten Bestand NF und in
    IN den Status
560 man Bringe SRS in den geöffneten Bestand mit Co-
    de NF
580 man schließe den Bestand mit Code NF ab
600 man schalte um auf graphischen Betrieb und lösche
    den Schirm
620 man plotte den Punkt in Position HO, VE in Farbe
    CN