1801 586e 0000 T ... BASICODE 29-41
                                - 29 -
630 man ziehe eine Linie nach Punkt HO, VE in Farbe CN
650 man drucke SRS als Text aus der Position HO; VE 
950 man schließe das Programm ab und schalte die Maschine auf
    normalen Betrieb 
4.5 Variable und BASIC-Aufträge

Die Variablen, die im Programm verwendet werden, sind an einige
Einsachränkngen gebunden. Das ist nötig, um die
Austauschbarkeit des Programms zu gewährleisten.

a. Numerisache Variable sind "real" und haben einige Präzision.
   Die Genauigkeit beträgt in Abhängigkeit vom Computer mitunter
   nicht mehr als 6 Dezimale; man rechne auf keinen Fall  mit einer
   größeren Genauigkeit.

b. Die Namen der Variablen sind maximal zwei Zeichen lang, wobei
   das erste Zeichen ein Großbuchstabe sein muß. Wenn noch ein
   weiters Zeichen folgt, darf es ein Großbuchstabe oder eine
   Zahl sein. In Namen von Variablen dürfen somit keine
   Kleinbuchstaben gebraucht werden. Für "String" -Variable
   folgt dem Namen ein S. Alle anderen Zusätze (wie %,# und !) sind in BASICODE-3
   untersagt.

c. Logisch Variable sind Variable, die "wahr" oder "unwahr"
   sind. Es darf kein Gebrauch gemacht werden, von dem evtl.
   numerischen Wert logischer Variablen. In einigen Computern
   wird "wahr" nämlich


                                - 30 - 

    ducrch +1 dargestellt, in anderen d3urch -1.
    Das Ergebnis kann nur verwendet werden in einer
    IF...THEN-Konstruktion (so etwas wie A=3*(B=1) ist also
    absolut nicht erlaubt! Man gebrauche in einem solchen Falle
    beispielsweise A=0: IF B=1 THEN  (A=3).

d. Bevor eine Variable verwendet wird, muß sie stets einen
   Wert    bekommen. Sie dürfen mithin nicht annehmen, daß die
   Variablen beim Start eines Programmes automatisach auf Null
   gesetzt werden.

e. "String"-Variable dürfen maximal 255 Zeichen lang sein.

f. Namen von Variablen dürfen nich mit dem Buchstaben O
   beginnen. So lche Namen sind dem Gebrauch innerhalb der
   BASICODE-3-Standardroutinen vorbehalten.

g. Ausgeschlossen sind gleichzeitig folgende Variablen:
   AS, AT, DI, EI, FN, GO, GR, IF, LN, PI, SQ, ST, TI, TIS, TO.

h. Beim Aufrufen von BASICODE-3-Subroutinen können die
   fkolgenden Variablen verwendet werden: CN, CT, FR, HG, HO, IN,
   INS, NF, NFS, RV, SD, SP, SR, SRS, SV, VE, VG.

4.6 Erlaubte BASIC- Aufträge

Dieser Paragraph gibt eine erschöpfende Darstellung der
Programme in BASIC. Von jedem Auftrag wird eine kurze,
sachliche Beschreibung gegeben, weil das BASICODE-3-Protokoll
der Verwendung mancher Aufträge einige Einschränkungen
auferlegt.  
                                - 31 - 

Ausschließlich die nachstehenden BASIC-Aufträge und -Operatoren
dürfen in den Programmen verwendet werden:
ABS    AND    ASC    ATN     CHRS   COS    DATA   DIM
EXP    FOR    GOSUB  GOTO    IF     INPUT  INT    LEFTS
LEN    LET    LOG    MIDS    NEXT   NOT    ON     OR
PRINT  READ   REM    RESTORE RETURN RIGHTS SGN    SIN
SOR    STEP   TAB    TAN     THEN   TO     VAL


Graphisache Zeichen vgl. Or. S. 34 unten


Nachstehen finden Sie in alphabetischer Reihenlfolge die
Beschreibungen der Arbeitsweise der erlaubten BASIC-Aufträge.

ABS Gibt den absoluten Wert der mitgegebenen Variablen.Beispiele:
    A = 10 : B = ABS (A)     nach Ablauf ist B = 10
    A = -20 : B = ABS (A)    nach Ablauf ist B = 20
    A = -1 : B = ABS (A-5)   nach Ablauf ist B = 6

AND Logisches AND. Darf nur verwendet werden, für logische
    Variable. Das Ergebnis ist ein logisacher Ausweg. Die
    Verwendung von Klammern, um die Bearbeitiungsfolge klar
    anzugeben, ist in BASICODE-3 obligatorisch. 

Beispiele:
    IF (A=5) AND (B=0) THEN ...
    Q=(A=5) AND (B=0) : IF Q THEN ...

ASC Gibt den ASCII-Wert des ersten Zeichens des mitgegebenen
    'string'.


                                - 32 -

Beispiele:

    AS = "A" : B=ASC(AS)       meistens gilt jetzt: B=65
    AS = "BEER" : B=ASC(AS)    meistens gilt jetzt: B=66

Nachbemerkung: Bei einigen Computer-Typen wird intern ein
    anderer Code für die verschiedenen Zeichen verwendet. Es
    kann dann beispielsweise geschehen, daß in den obigen
    Beispielen in B die Zahlen 193 bzw. 194 stehen. Was die
    Buchstaben oder Zahlen betrifft, gilt wohl immer, daß sich
    die abweichenden Werte um ein Vielfaches von 32 vom
    "normalen" Wert unterscheiden. Die Verwendung der
    ASC-Funktion muß daher am besten so weit wie nur möglich
    vermieden werden.  
ANT Gibt den Arctangens in Radialen der beigegebenen Variablen.

Beispiele:
PRINT ANT(1)           gibt das Ergebnis .785398
PRINT ANT(-1.5)        gibt das Ergebnis -0.982794

CHRS Gibt ein Zeichen, das im Computer übereinstimmt mit dem
    Wert der mitgegebenen Variablen. Die Variable darf einen
    Wert von 32 bis einsachlileßl. 127 annehmen. Bei Werten,
    die kleiner sind als 32, ist Vorsicht am Platze, da sich die
    Kontrollzeichen bei verschiedenen Computern stark
    unterscheiden; lediglich die RETURN-Taste hat immer ASCII-
    Code 13.
Beispiel:

AS=CHRS(66)    AS enthält jetzt (meistens) den Buchstaben B.
Wie bereits bei ASC erwähnt, gibt es Computer,

                                - 33 -

die intern abweichende Codes verwenden. Man gebrauche daher
auch die CHRS-Funktion mit der gößtmöglichen Vorsicht.

COS Gibt den 0co2sinus des mitgegebenen Winkels. Die Variable
    muß den Winkel in Radialen enthalten.

Beispiel:
PRINT COS(1)   gibt das Ergebnis .540302

DATA Nach diesem Kommando folgen bis zum Ende des Zeile Werte
    für Variable, die mit READ gelesen werden können. Auf der
    Zeile dürfen nach mit READ zu lesenden Variablen keine
    anderen Kommandos (beispielsweise REM) auftreten.

Beispiel:
DATA 100, 200, "HALLO", "BASICODE", 4.6.89

DIM muß immer verwendet werden, um 'arrays' zu dimensionieren.
    Ein 'array' darf nur einmal in einem Programm dimensioniert
    werden, und zwar ehe es im Programm verwendet wird. Die
    Zahl der Dimensionen beträgt im BASICODE-3 maximal zwei. die
    zahl der Elemente wird begrenzt durch die Größe des
    Gedächtnisses. Verschiedene 'arrays' dürfen mit dem gleichen
    DIM-Auftrag dimensioniert werden. Man vergleiche das
     Beispiel.
Nachbemerkung 1: Bei einigen Computern brauchen 'arrays' bis zu
    zehn Elementen nicht dimensioniert zu werden. In
    BASICODE-Programmen ist das an sich immer nötig!

                                - 34 - 

Nachbemerkung 2: Auch das Element mit der Nummer 0 mach mit,
    also A(0), und ADS (0,0) gibt es auch.

Beispiel:
DIM AS(12), HD(100,100), MP(1000).

EXP Erhebt die Zahl e (2.71828...)in eine bestimmte Potenz.

Beispiel:
PRINT EXP(2)     erbringt als Ergebnis 7.38906

FOR FOR ... TO ... STEP ... NEXT ... 
    Schleifenkonstruktion; die Schleife wird midesten einmal
    durchlaufen. STEP und der Wert dürfen weggelassen werden,
    die Schrittgröße ist dann 1. Nach NEXT muß immer die
    Variable mitgegeben werden! Mehr als eine Variable nach
    NEXT ist nicht zulässig.

Beispiele:

FOR X=10 TO 100
PRINT X,X+34
NEXT X
FOR C=A TO B STEP -3
PRINT C,C-B
NEXT C
FOR I=1 TO 10; FOR J=1 TO 5
PRINT I; " "; J; "="; I; J
NEXT J : NEXT I
Nachbemerkukng: Man verhüte das Springen aus einer FOR-NEXT-
    Schleife, ohne daß diese beendet ist! Man verlasse eine
    FOR-NEXT-Schleife also nur über NEXT, nötigenfalls durch
    die Schleifenvariable auf den Endwert zu setzen.
    Verwenden Sie in Fällen, bei denen Sie aus der

                                - 35 - 

     Schleife springen wollen, kein FOR-NEXT für die
     Schleifenstruktur.

GOSUB Man rufe eine Subroutine auf, beginnend bei der
    Zeilenzahl, die hinter diesem Kommando erwähnt wird.
  
Beispiel:
GOSUB 100
Nachbemerkung: Verboten ist A = 100: GOSUB A


GOTO Man springe auf die Zeilenzahl, die hinter diesem
     Kommando erwähnt wird.

Beispiel:

GOTO 1500
Nachbemerkung 1: Verboten ist A=1500. GOTO A
Nachbemerkung 2: Ein GOTO-Auftrag darf nie auf eine
     nicht vorhandene Zeilennummer oder auf eine Zeilennummer in
     einer BASICODE - Subroutine springen. Für das letztgenannte
     gibt es zwei Ausnahmen:
     -1- In Zeile 1000 muß GOTO20 stehen und
     -2-  GOTO950 muß mindestens einmal im Programm als
          Absachluß Programmes vorkommen (an Stelle der in den
          meisten BASIC- Versionen gebräuchlichen END- oder
          STOP-Aufträge, die in BASICODE nicht erlaubt sind).

IF IF ... THEN Bedingte Spaltung. Zwischen IF und THEN  steht
     eine logische Variable oder ein logischer Vergleich. Wenn
     dieser 'wahr' ist, geht die Ausführung nach THEN weiter,
     wenn nicht, dann geht die Ausführung weiter auf die
     nächste BASIC- Zeile. Auch kann nach THEN eine Zeilennummer folgen, wo

                                - 36 - 

     die Ausführung des Programmes weitergehen soll. 

Nachbemerkkung: ELSE ist in BASICODE-3 nicht zulässig.

Beispiele: vgl. Or. S. 38 oben

INPUT  Ersucht den Nutzer um Eingabe, die der Variablen nach
     INPUT zuerkannt wird. Diese Variable darf eine numerisache
     Variable oder eine 'string'-Variable sein. Ein
     eingegebener 'string' darf keine Kommas oder
     'Doppelpunkte' enthalten. Wenn man das doch wünscht,
     sollte man lieber die Subroutine auf Zeile 210
     verwenden. Ein 'prompt-string' ist nicht erlaubt,
     ebensowenig wie mehr als eine  Variable nach einem INPUT.
     Die mesten BASICs drucken ein Fragezeichen, wenn
     dieser Auftrag erteilt wird.
     Nach dem Eintippen der Return-Taste wird bei einigen
     Computern die übrige Zeie von der Curskorposition bis zum
     Ende ausgelöscht.

Beispiele:

PRINT 'Wie ist Ihr Name';: INPUT NS
PRINT 'Tippen Sie die Werte ein';: INPUT A: INPUT B

Nachbemerkung: INPUT'Ihr Name'; AS
               ist somit nicht zulässig!

INT Geben Sie die größte ganze Zahl, die höchstens der
     mitgegebenen  Variablen gleich ist. 

Beispiele:
A=2.1 : B=INT(A)  nach Ablauf ist B=2
B=INT(-2.5)       nach Ablauf ist B=3


                                - 37 -

LEFTS Geben Sie einen 'string', der aus mehreren Zeichen des
     mitgegebenen 'string' besteht, zu beginnen mit dem am
     meisten links stehenden Zeichen. Die Zahl der Zeichen,
     die verlangt wird, muß minimal 1 sein und darf maximal die
     Länge des 'string' betragen.

Beispiele: 

AS=LEFTS ("BASICODE",5) nach Ablauf ist AS=BASIC

Nachbemerkung: CS=LEFTS (BASICODE, 0) ist also nicht erlaubt!

LEN Gibt die Länge des mitgegebenen 'string' 

Beispiele.

AS=BASICODE-3 : A=LEN(AS)  nach Ablauf ist A=10
AS="" : A=LEN(AS)          nach Ablauf ist A=0

LET  darf verwendet werden, wenn einer Variablen ein Wert
     zuerkannt wird, ist jedoch nicht erforderlich.
  
Beispiel:

LET A=5 ist dasselbe wie A=5
     LET wird daher fast immer weggelassen.

LOG Berechnet den natürlichen Logarithmus der mitgegebenen
     Variablen oder des mitgegebenen Ausdruckes.

Beispiele:

PRINT LOG(1)     bringt das Ergebnis  0
PRINT LOG(10)    bringt das Ergebnis  2.302585

Nachbemerkung: In einigen Computern wird der e-Logarithmus
     nicht mit LOG, sondern mit LN angegeben; in diesem Falle
     wird also LOG für den 10-Logarithmus gebraucht. Das
     Übersetzungsprogramm sorgt in diesen Fällen für eine
     richtige Übersetzung.

                                - 38 -

MIDS Holt eine Anzahl von Zeichen aus einem 'string'.
     MIDS(AS, X, Y) gibt Y Zeichen von AS zu beginnen mit dem
     X-ten Zeichen (das erste Zeichen hat die Nummer 1, X=0
     oder Y=0 ist nicht erlaubt).

Beispiele:

AS = BASICODE IST HüBSCH: BS = MIDS (AS,10,2)
BS enthält nun IS
Nachbemerkung: Nicht erlaubt ist der Auftrag 
               AS=MIDS (CS,5)

NEXT Abschließende Aufbringung einer Wiederholungsschleife
     (vgl. auch FOR). Nach NEXT muß immer die dazugehörige
     Variable stehen.
Beispiele: vgl. FOR...

NOT Logische Verneinung, nur anwendbar auf logische Variable
     (vgl. auch AND).
Beispiele:
A=5; B=NOT(A=6)     nach Ablauf ist B= 'wahr'
A=(5=5): B = NOT A  nach Ablauf ist B = 'unwahr'

ON   ON ... GOSUB ... oder
     ON ... GOTO ...
     Machen Sie einen Sprung zu einer Subroutine oder zu einer
     Programmzeile. Nach ON folgt ein Ausdruck oder eine
     Variable, nach GOSUB oder GOTO eine Reihe von Zeilenzahlen,
     untereinander durch Kommas getrennt. Der Wert der Variablen
     oder des Ausdrucks muß eine ganze Zahl sein und bestimmt,
     welche Zeilennummer gewählt wird. Dazu können Sie sich die
     Zeilenzahlen nummeriert denken: Wenn die Variable 1 ist,
     wird die erste Zeilenzahl  gewählt, wenn die Variable

                                - 39 -

     2 ist, die zweite Zeilenahl usw. Die Variable darf nicht
     grösser werden können als die Zahl der angegebenen
     Zeilennummern.
Beispiel:
ON K GOTO 100,3400,1500         K muss nun 1, 2, oder 3 sein!
ON K-5 GOSUB 6000, 7000, 3000   K muss nun 6, 7, oder 8 sein!

OR  Logischer OR, darf nur verwendet werden, bei logischen
     Variablen (vgl. auch AND).
Beispiele:
IF (A=5) OR (B=3) THEN ...
C = (A=5) OR (B 3): IF C THEN ...
Nachbemerkung: Ebenso wie bei AND ist die Verwendung von
     Klammern obligatorisch.

PRINT Druckt eine Variable oder 'string' auf dem Schirm ab.
     Verschiedene Variable in einem PRINT-Auftrag müssen
     getrennt weden durch ein Semikolon. Wenn kein
     automatischer Übergang zur nächsten Zeile gewünscht wird,
     muß am Ende des Auftrages ein Semikolon stehen. Bei einigen
     Computern werden beim Drucken einer Zahl ein Zwischenraum
     oder mehrere Zwischenräume vor und/oder nach den Zahlen   
     gedruckt. Wenn Sie das nicht möchten, können Sie die
     Subroutine auf Zeile 300 oder Zeile 310 verwenden.

Beispiele:
Vgl. Or. S. 40, Mitte

READ  Liest die Angaben in den DATA-Aufträgen und erkennt
      sie der/den Variablen nach READ zu. Mehrere Variable nach einem
      READ müssen durch ein Komma getrennt werden. Nach dem 
      Starten eines Programms
                                - 40 -

     beginnt das Lesen beim DATA-Auftrag mit der niedrigsten
     Zeilenzahl, bis alle Angaben auf dieser Zeile gelesen
     sind. Danach ist die nächste DATA-Zeile an der Reihe. Man
     beachte: Eine numerische Variable muß Zahlen lesen, eine
     'string'- Variable muß 'strings' lesen!

Beispiele:
DATA 1, "COMPUTER" , 3
READ A: READ AS: READ B  oder
READ A, AS: READ B       oder
READ A, AS, B

REM  Mit diesem Auftrag können Sie einen Kommentar in ein
     Programm bringen, um es für andere verständlicher zu
     machen. Alles, was nach REM steht bis zum Ende der Zeile,
wird von BASIC übersprungen. Es darf in der Zeile kein
Doppelpunkt vorkommen. Das bringt mitunter Probleme mit sich.

RESORE Lassen Sie das READ-Kommando wieder von der ersten DATA
     Zeile an im Programm lesen. Beachten Sie: Nach RESORE darf
     keine Zeilenzahl sehen!

RETURN Gibt das Ende einer Subroutine an. Nach diesem Auftrag
     geht die Ausführung des Programms weiter bem ersten Auftrag ,
     der dem dazugehörigen GOSUB folgt. Eine Subroutine muß
     immer mit RETURN abgeschlossen werden!

RHIGS Gibt eine Anzahl von Zeichen eines bestimmten 'string',
     der beim letzten Zeichen endet. Die Mindestzahl der
     geforderten Zeichen muß 1 sein, die Höchstzahl die Länge
     des 'string'. 
                                - 41-

Beispiele:
AS = BASICODE: BS=RIGHTS (AS, 4)  nach Ablauf ist BS = "CODE"
Man beachte: AS = Protokoll: A = 0: BS=RIGHTS (AS,A) ist nicht
erlaubt, weil A = 0

SIN  Bestimmt den Sinus eines in Radialen angegebenen Winkels.
     Man vergleiche des weiteren bei COS.

SGN  Gibt -1, wenn die Variable (oder der Ausdruck) negativ ist,
     0, wenn die Variable gleich 0 ist und +1, wenn die Variable
     positiv ist.
Beispiele:
A=5: B=SGN(A)      nach Ablauf ist B = 1
A=- 001: B=SGN(A)  nach Ablauf ist B = - 1

SQR  Bestimmt die Wurzel einer Variablen oder eines Ausdrucks,
     die nicht negativ sein dürfen.

Beispiel:
A=SQR(2*32)     Nach Ablauf ist A = 8

STEP bestimmt die Schrittgröße in elner Wiederolungsschleife.
     Vgl FOR ...
TAB  Wird in den Print-Aufträgen verwendet, um den Cursor auf
     eine bestimmte Stelle auf der Zeile zu setzen. Der Cursor
     kann weiter in die Zeile gesetzt werden, und in
     Abhängigkeit vom Computer werden Zwischenräume gedruckt,
     oder es bleibt stehen, was schon auf der Zeile stand.
     TAB (0) ist nicht gestattet. Die meisten Computer
     beginnen bei 0 zu zählen. Es gibt jedoch auch Computer,
     die bei 1 zu zählen beginnen. Daher ist es besser, die
     Subroutine auf Zeile 110 zu verwenden!

Beispiel:
PRINT "A"; TAB (5); "B"; TAB (10); "C"

folgt Seite 42