DEFDBL  -  FIX Inhalt | INPUT$ - LPRINT


Kapitel 5-5
Der Befehlssatz

FN  -  INPUT USING



 

FN
Typ: Funktion
Syntax:  FN <Variable>[(<Ausdruck>[[,<Ausdruck>]])] 
FN <Funktions-Variable>[(<Parameter>[[,Parameter]])]
Erklärung:  Ruft eine durch DEF FN definierte Funktion auf und weist der Funktions-Variablen den Funktionswert zu. Die in der Definition genannten Parameter müssen in Klammern und durch Kommata getrennt übergeben werden.
Beispiel: PRINT FN Dreifach(3) 
PRINT FN Primzahl$(12) 
END 


DEF FN Dreifach(A)=3*A 
DEF FN Primzahl$(A) 
 LOCAL N,P$="Primzahl" 
 FOR N=2 TO SQR(A) 
  IF A MOD N=0 THEN P$="keine Primzahl" 
 NEXT N 
 RETURN P$ 
END_FN
Ergebnis:   9 
keine Primzahl 
siehe auch:  DEF FN   END_FN   RETURN
   
 

 
 
FOR 
Typ: Befehl 
Syntax:  FOR <num.Variable>= <num.Ausdruck>TO <num.Ausdruck>[STEP] <num.Ausdruck><Befehle>NEXT [<num.Variable>] 
FOR <Schleifenvariable>= <Start>TO <End>[STEP <Schrittweite>] <Schleifeninhalt>NEXT [<Schleifenvariable>] 
Erklärung:  Das ist die wohl bekannteste Programmschleife. Der Schleifenvariablen wird zu Beginn der Startwert zugewiesen, welcher sodann bei jedem neuen Durchlauf um die Schrittweite erhöht oder erniedrigt wird. Fehlt die Schrittweite, so wird sie automatisch auf "+1" festgelegt. 
Mögliche Schleifenvariablen sind alle einfachen Variablentypen, jedoch keine Feldelemente. Wenn die Schleifenvariable abwärts gezählt werden soll, ist eine negative Schrittweite anzugeben (z.B. "-1"). 
Wenn die Schleifenbedingung gleich zu Anfang nicht erfüllt ist (z.B. Startwert ist größer als Endwert bei positiver Schrittweite), dann wird die Schleife überhaupt nicht durchlaufen. Die FOR ... NEXT Schleife ist also eine abweisende Schleife. 
Die Schleife wird geschlossen durch die NEXT-Anweisung wobei die Schleifenvariable weggelassen werden kann. Die NEXT-Anweisung bezieht sich dann immer auf die letzte FOR-Anweisung. 
Die Schleife kann auch vorzeitig mit EXIT verlassen werden.  
Beispiel: FOR X#=-PI TO PI STEP .1# 
 PRINT X# 
NEXT 


DIM A(10) 
FOR I=0 TO 10 
 A(I)=RND(20):PRINT A(I) 
NEXT I 
Maximum=0 
FOR I=0 TO 10 
 Maximum=MAX(Maximum,A(I)) 
NEXT I 
PRINT "Die größte Zahl ist: ";Maximum 
Ergebnis:  Zunächst werden Zahlen zwischen -PI und PI im Abstand von 0.1 ausgegeben. 
Die zweite Schleife schreibt 11 Zufallszahlen zwischen 0 und 20 auf den Bildschirm. 
Die dritte Schleife schließlich gibt die größte dieser Zufallszahlen aus:
Die größte Zahl ist: .... 
siehe auch:  NEXT   WHILE   REPEAT 
   
 
 

FORM_ALERT 
Typ: Befehl 
Syntax:  FORM_ALERT (<num.Ausdruck>,<String-Ausdruck>[,<Variable>) 
FORM_ALERT (<Default>,<Warnmeldung>[,<Rückgabe>) 
Erklärung:  Stellt eine Warn-Box dar. <Default> gibt an, welcher der in <Warnmeldung> genannten Knöpfe durch die Return-Taste ausgelöst werden kann. Soll dies für keinen gelten, so ist <Default> gleich 0 zu übergeben. 
Die Warnmeldung ist folgendermaßen aufgebaut: 

[Icon][Zeile 1|Zeile 2|Zeile 3|Zeile 4|Zeile 5|][Knopf 1|Knopf 2| Knopf 3] 

Icon ist eine Zahl zwischen 0 und 3:

0: kein Icon 
1: Achtung-Symbol 
2: Hinweis-Symbol 
3: Stop-Symbol

Andere Werte können zu Störungen im Layout der Alertbox oder sogar zum Absturz führen. Die Zeilen dürfen jeweils höchstens 39 Zeichen lang sein. Die Knopfgröße orientiert sich an der Länge des jeweiligen Textes (notfalls Leerzeichen einfügen, um einen breiteren Knopf zu erhalten). 
Nach Ausführung enthält <Rückgabe> die Nummer des gewählten Knopfes. 

Achtung: Wenn die Maus ausgeschaltet ist, so muß sie vor dem Aufruf unbedingt eingeschaltet werden, da man sonst die Buttons der Alert-Box nicht bedienen kann. 
Beispiel: Datei$="Abfall" 
FORM_ALERT (1,"[2][Die Datei|"+Datei$+"|wird unwiderruflich gelöscht.][OK|Abbruch]",Datei_Ex) 
IF Datei_Ex=1 THEN KILL FN Get_Fsspec$(0,0,Datei$) 
Ergebnis:  Wenn die Rückfrage in der Alert-Box bestätigt wird, so wird die Datei Abfall im aktuellen Ordner gelöscht.
   
 
 

FRAC 
Typ: Funktion 
Syntax:  FRAC(<num.Ausdruck>) 
Erklärung:  Ergibt den Nachkommateil des numerischen Ausdrucks. Das Vorzeichen bleibt erhalten. Das Gegenstück zu FRAC ist FIX
Beispiel: PRINT FRAC( PI ),FRAC(5.36),FRAC(-5.36) 
Ergebnis:   0.141592653589793   .36   -.36 
siehe auch:  FIX   INT 
   
 
 

FRE 
Typ: Befehl 
Syntax:  FRE <num.Ausdruck> 
FRE <Speicheradresse> 
Erklärung:  Gibt einen durch MEMORY reservierten Speicherbereich wieder frei. Als Speicheradresse ist die Adresse anzugeben, die beim Aufruf von MEMORY zurückgegeben wurde. 
Beispiel: Puffer=MEMORY(1024) 
PRINT "Puffer angelegt bei: ";HEX$(Puffer) 
FRE Puffer 
Ergebnis:  Ein Puffer wird angelegt und der Vorgang auf dem Bildschirm dokumentiert. Danach wird der Puffer mit FRE wieder freigegeben. 
siehe auch:  FRE als Funktion   MEMORY   CLEAR 
   
 

 
 
FRE
Typ: Funktion 
Syntax:  FRE({<num.Ausdruck>|<String-Ausdruck>}) 
FRE({<Dummy>|<Laufwerk>}) 
Erklärung:  Wird ein numerischer Dummy angegeben, so ergibt die Funktion den für den Benutzer freien BASIC-Speicher, nachdem der String-Heap aufgeräumt wurde (garbage collection). Der Wert des Dummys ist dabei ohne Belang. 
Wird ein Leerstring (="") übergeben, so ergibt die Funktion den für den Benutzer freien BASIC-Speicher, ohne daß zuvor eine garbage collection durchgeführt wird. 
Sonst wird der String-Ausdruck als Volume-Bezeichner interpretiert, und der auf diesem Volume freie Speicherbereich ermittelt. 
Beispiel: PRINT FRE(0), FRE(""), FRE("MacintoshHD:") 
Ergebnis:  Es werden drei Zahlen ausgegebn, welche den jeweils freien Speicher in Byte enthalten. 
siehe auch:  FRE als Befehl   MEMORY   CLEAR
   
 
 

FSEL_INPUT
siehe: FILESELECT
   
 

GEMDOS 
Erklärung:  hat in Omikron Basic 6 keine Bedeutung und wird vom Compiler ignoriert. Bitte nicht verwenden.
   
 
 

GET 
Typ: Befehl 
Syntax:  GET <num.Ausdruck>,{<num.Ausdruck>[,<num. Ausdruck]|<String-Variable>,<num.Ausdruck>} 
1: GET <Dateinummer>,<Satznummer> 
2: GET <Dateinummer>,<Speicheradresse>,<Anzahl> 
3: GET <Dateinummer>,<String-Variable>,<Anzahl> 
Erklärung:  Nach Syntax 1 wird ein Datensatz aus der durch die Dateinummer gegebenen Datei gelesen und den in FIELD genannten Puffervariablen zugewiesen. Die Datei muß zuvor mittels OPEN "R" geöffnet worden sein.  Ist der Datensatz nicht vorhanden, so enthalten die Puffervariablen Leerzeichen.  Man kann das jederzeit mit der Funktion EOF prüfen, die in diesem Fall den Wert "-1" (=wahr) zurückgibt. 
Nach Syntax 2 und 3 wird aus der durch die Dateinummer gegebenen Datei die angegebene Anzahl Zeichen gelesen und ab der Speicheradresse bzw. in der String-Variablen abgelegt. Die Datei muß zuvor mit OPEN "U" geöffnet worden sein. Gelesen wird ab der aktuellen Dateiposition, die mit SEEK gesetzt werden kann. 
GET kann auch benutzt werden, um Daten von der Modemschnittstelle bzw. von der Druckerschnittstelle zu holen. In diesem Fall muß der Kanal zuvor mit OPEN "V" bzw. OPEN "P" geöffnet worden sein. 
siehe auch:  PUT   FIELD   OPEN 
   
 
 

GOSUB 
Typ: Befehl 
Syntax:  GOSUB <Marke> 
Erklärung:  Verzweigt in das durch <Marke>definierte Unterprogramm. Vom Unterprogramm aus kann mittels RETURN  wieder in das Hauptprogramm zurückgesprungen werden. Dann wird als nächstes der auf die GOSUB-Anweisung folgende Befehl ausgeführt. 
Die im Unterprogramm verwendeten Variablen sind global (siehe LOCAL). In Omikron Basic geschriebene Programme können im Prinzip vollständig auf GOSUB verzichten, da ein Unterprogrammaufruf immer auch mittels einer Prozedur verwirklicht werden kann. Ein Unterprogramm per GOSUB aufzurufen ist eigentlich nicht mehr zeitgemäß. Aus Gründen der Kompatibilität wurde der Befehl allerdings im Sprachumfang belassen. 
siehe auch:  RETURN   GOTO   DEF PROC 
   
 
 

GOTO 
Typ: Befehl 
Syntax:  GOTO <Marke> 
Erklärung:  Verzweigt an die durch <Marke>definierte Stelle im Programm. Generell führt die Verwendung von GOTO sehr schnell zu sehr unübersichtlichen Programmen. Man sollte daher zu viele GOTOs nach Möglichkeit vermeiden. Die strukturierte Programmierung, wie sie von Omikron Basic unterstützt wird, kommt in jedem Falle auch ganz ohne GOTO aus. Es ist jedoch nicht auszuschließen, daß in dem einen oder anderen Fall (z.B. bei nicht behebbaren Fehlern) ein GOTO einfach praktischer ist.

Achtung: Verzweigen Sie niemals in eine Struktur (Schleife oder SELECT ... CASE) oder in eine Prozedur. Sprünge per GOTO sind nur in der gleichen Hierarchie-Ebene erlaubt. Um eine Struktur vorzeitig zu verlassen, verwenden Sie EXIT
siehe auch:  GOSUB  ON   DEF PROC 
   
 
 

GRAF_PORT
Typ: Befehl 
Syntax:  GRAF_PORT <num.Ausdruck> 
GRAF_PORT {<0>|<1>|<GrafPtr>}
Erklärung:  Mit diesem Befehl ist es möglich, alle nachfolgenden Zeichenbefehle sowie PRINT und WRITE in den angegebenen GraficsPort umzuleiten. In dem numerischen Ausdruck muß 0,1 oder ein gültiger <GrafPtr> übergeben werden. Wie Sie selbst einen neuen GraficsPort öffnen können, ist in "Inside Macintosh, Imaging with QuickDraw" erläutert.
Der GRAF_PORT 1 Befehl überprüft zunächst, ob schon eine Seite auf dem Drucker geöffnet wurde. Wenn ja, erfolgen alle Ausgaben auf diese Seite, ansonsten wird eine neue Seite geöffnet. Wenn Sie mehr als eine Seite auf einmal bedrucken wollen, können Sie mit LPRINT CHR$(12); (Form Feed) erreichen, daß eine neue Seite angefangen wird.
Mit GRAF_PORT 0 schließlich beenden Sie die Druckroutine, die letzte Seite wird geschlossen und das ganze Dokument (kann aus mehreren Seiten bestehen) wird auf dem Drucker ausgegeben.

Achtung: Ungültige Werte hinter GRAF_PORT führen meißt zur sofortigen Beendigung des Programms oder gar zum Absturz des ganzen Systems. Auch wenn nur das Programm beendet wurde, sollte der Rechner neu gestartet werden, da es sonst zu unkalkulierbarem Verhalten kommen kann.

Die Werte 0 und 1 sind vom Omikron Basic vordefiniert: 

0: Alle Ausgaben landen auf dem Bildschirm bzw. im obersten Ausgabefenster. 
1: Alle Ausgaben werden auf dem Drucker gemacht. 

Hinweis: Die Befehle INPUT und INPUT USING sowie FORM_ALERT setzen den GRAF_PORT immer auf 0 zurück
Beispiel: Kreis 0,1,"Dieser Keis wird auf dem Bildschirm gezeichnet" 
Kreis 1,4,"Dieser Keis wird auf Papier gezeichnet" 
GRAF_PORT 0 


DEF PROC Kreis(GrafPtr,F,Text$) 
 GRAF_PORT GrafPtr 
 PRINT Text$ 
 CIRCLE 200*F,220*F,100*F 
END_PROC
Ergebnis:  Es wird zunächst der Text auf dem Bildschirm ausgegeben und danach ein Kreis gezeichnet. Anschließend erfolgt das Gleiche noch einmal auf Papier. Man kann also ein und dieselbe Zeichenroutine für die Ausgabe auf verschiedenen Geräten benutzen. Die Verwendung des Scalierungsfaktors F ermöglicht es außerdem, von der höheren Druckerauflösung zu profitieren. 
siehe auch:  CMD  LPRINT
   
 
 

HCOPY 
Typ: Befehl 
Syntax:  HCOPY 
Erklärung:  Wenn das OUTPUT_WINDOW eingeschaltet ist, wird eine Hardcopy des Puffers gemacht, der zum obersten Fenster gehört, sonst wird der komplette Bildschirminhalt auf dem Drucker ausgegeben. 
   
 

 
 
HCOPY TEXT 
Erklärung:   hat in Omikron Basic 6 keine Bedeutung und wird vom Compiler ignoriert. Bitte nicht verwenden.
   
 
 

HEIGHT
Erklärung: siehe TEXT HEIGHT
   
 
 

HELP
Erklärung: siehe ON HELP GOSUB
   
 
 

HEX$ 
Typ: Funktion 
Syntax:  HEX$(<num.Ausdruck>) 
Erklärung:  Wandelt den numerischen Ausdruck in eine Zeichenkette um, die den gerundeten Wert des Ausdrucks als Hexadezimalzahl darstellt. 
Beispiel: PRINT HEX$(255), HEX$(-255), HEX$(-1) 
Ergebnis:  $FF   -$FF   -$1 
siehe auch:  BIN$  OCT$   VAL 
   
 
 

HIGH 
Typ: Funktion 
Syntax:  HIGH(<num.Ausdruck>) 
Erklärung:  Ermittelt die oberen 16 Bit des in Long-Integer-Format gewandelten numerischen Ausdrucks. Gegenstück zu dieser Funktion ist LOW. 
Beispiel: PRINT HEX$(HIGH($12346789)), HIGH(-1) 
Ergebnis:  $1234   -1 
siehe auch:  LOW 
   
 
 

H_CHAR 
Typ: Funktion 
Syntax:  H_CHAR 
Erklärung:  Diese Funktion gibt an, wieviele Zeichen untereinander auf den Bildschirms passen. Das hängt natürlich von dem eingestellten Zeichensatz und der Zeichengröße ab.
siehe auch:  H_PIXEL   W_CHAR   W_PIXEL 
   
 
 

H_PIXEL 
Typ: Funktion 
Syntax:  H_PIXEL 
Erklärung:  Diese Funktion ergibt die Höhe des Bildschirms in Pixeln. 
siehe auch:  H_CHAR   W_CHAR   W_PIXEL 
   
 
 

IF ... THEN ... ELSE ... ENDIF
Typ: Befehl
Syntax: IF <num.Ausdruck>THEN <Befehle>[ELSE <Befehle>] [ENDIF
IF <log.Ausdruck>THEN <abhängige Befehle (wahr) [ELSE <abhängige Befehle (falsch)>] [ENDIF]
Erklärung: Die IF...THEN Anweisung erlaubt die bedingte Ausführung von Befehlen. Die von der THEN-Anweisung abhängigen Befehle werden nur ausgeführt, wenn der logische Ausdruck wahr (ungleich 0) ist. Die von der ELSE-Anweisung abhängigen Befehle entsprechend bei falschem logischen Ausdruck (gleich 0). Wenn alle abhängigen Befehle in eine Zeile passen, kann das ENDIF entfallen. Ansonsten beschließt das ENDIF den Block der abhängigen Anweisungen. Stehen sehr viele Alternativen zur Auswahle so ist in vielen Fällen die Verwendung von SELECT... CASE vorteilhafter.
Beispiele:  einzeilig: 
IF <Bedingung> THEN ...IF <Bedingung> THEN ... ELSE ... 

mehrzeilig: 
IF <Bedingung>THEN 
  ... 
ENDIF 

mehrzeilig geschachtelt mit ELSE: 
IF <Bedingung1> 
 THEN ... 
  IF <Bedingung2> 
   THEN ... 
   ELSE ... 
  ENDIF 
 ELSE ... 
ENDIF 

Ergebnis:
siehe auch:  THEN   ELSE   ENDIF   SELECT   CASE
   
 
 

IMP 
Typ: Operator 
Syntax:  <num.Ausdruck>IMP <num.Ausdruck> 
Erklärung:  Die beiden Aussagen werden "logisch-implement" verknüpft. Die Wahrheitstabelle hierzu führt nur zu einer unwahren Aussage, wenn der erste Ausdruck wahr, er zweite aber unwahr ist. 
Beispiel:  PRINT BIN$((%1010 IMP %1100)+%10000) 
Ergebnis:   %1101 
siehe auch:  OR   XOR   AND   NAND   NOR 
   
 
 

INKEY$ 
Typ: Funktion 
Syntax:  INKEY$ 
Erklärung:  Holt eine Eingabe von der Tastatur. Ist keine Eingabe vorhanden, ergibt die Funktion einen Leerstring. Sonst ist der String 4 Zeichen lang. Im ersten Byte werden die Modifier-Keys zurückgeliefert. 
Die einzelnen Bits haben dabei folgende Bedeutung: 

Bit 0: Comand-Taste 
Bit 1: Shift-Taste 
Bit 2: Caps-Lock-Taste 
Bit 3: Alternate-Taste 
Bit 4: Control-Taste

Wenn eine normale Taste gedrückt ist, so wird im zweiten Byte der Virtual Key Code eingetragen. Siehe "Inside MacIntosh, Toolbox Essentials". Da bei Apple-Computern zwei Tasten gleichzeitig gedrückt sein können, enthält das dritte Byte den Wert der zweiten Taste, wobei bei zwei gleichzeitig gedrückten Tasten immer der niedrigere Wert im zweiten Byte und der höhere im dritten enthalten ist. Das vierte Byte schließlich enthält den Charakter-Code, wie er durch die 'KCHR'-Resource im Systemordner definiert ist. 
Beispiel: REPEAT 
 REPEAT 
  A$= INKEY$ 
 UNTIL LEN(A$) 
 FOR N=1 TO 4 
  PRINT ASC( MID$(A$,N,1)), 
 NEXT 
 IF RIGHT$(A$,1)>=" " THEN PRINT RIGHT$(A$,1) ELSE PRINT 
UNTIL ASC( MID$(A$,2,1))=53 'Ende mit [Esc] 
Ergebnis:  Es wird gewartet bis der Benutzer eine Taste drückt. Dann werden die ASCII-Werte der vier Zeichen sowie das zur gedrückten Taste gehörende Zeichen auf dem Bildschirm ausgegeben. Das Programm wird abgebrochen, sobald die [Esc]-Taste gedrückt wurde. 
siehe auch:  INPUT   INPUT$ 
   
 
 

INLINE 
Typ: Befehl 
Syntax:  INLINE <String-Ausdruck> 
Erklärung:  Der Befehl führt Maschinensprachebefehle aus. Das Maschinenprogramm muß dabei als Hexcode im <String-Ausdruck> abgelegt sein. 
Es dürfen nur die von Apple als 'volatile' deklarierten Register verändert werden. Im einzelnen sind dies: 
                           R0,R3-R12                       FPR0-FPR13                       CR0,CR1,CR5-CR7 
R31 zeigt auf den dynamischen Stack. Fehler, die Ihr Maschinenprogramm verursacht, können vom Omikron Basic nicht abgefangen werden. Es empfiehlt sich daher, in der Testphase zuvor einen geeigneten Debugger zu starten.

Hinweis: Wenn <String-Ausdruck> eine Konstante ist, kann das Maschinenprogramm schon vom Compiler dekodiert und in den Programmcode eingefügt werden. Dadurch ist eine wesentlich schnellere Ausführung möglich, als bei einer Stringvariablen oder gar einem String-Ausdruck.
siehe auch:  CALL   USR 
   
 
 

INPUT 
Typ: Befehl 
Syntax:  INPUT [[<String-Ausdruck>;]]<Variable>[[,<Variable>]] 
INPUT [[<Prompt>;]]<Variable>[[,<Variable>]] 
Erklärung:  Der INPUT Befehl liest eine oder mehrere Variablen von der Tastatur ein. Wenn angegeben, wird eine Eingabeaufforderung (<Prompt>) ausgegeben, ansonsten einfach ein Fragezeichen. Der Prompt kann auch aus einzelnen Strings und Stringausdrücken, die jeweils durch ein Semikolon getrennt sind, zusammengesetzt sein.
Die Eingabe wird mit [Return] abgeschlossen. Wenn mehrere Werte in einer Zeile eingegeben werden sollen, müssen diese durch Kommata abgetrennt werden. Wenn numerische Variablen eingelesen werden sollen, wird alles bis zum ersten ungültigen Zahlzeichen als Wert übernommen, der Rest wird ignoriert. Führende Leerzeichen werden bei numerischen Variablen überlesen. Besteht das erste Zeichen aus Anführungsstrichen, so werden nur die Zeichen bis zu den nächsten Anführungsstrichen übernommen. Die Anführungsstriche selbst entfallen dabei.
Der Wert, den die Variable vor Ausführung des INPUT-Befehls hatte, spielt keine Rolle. Es wird im jedem Fall ein neuer Wert zugewiesen. Mit der Prozedur 'Fill_Input_Buffer' aus der ExtensionLibrary kann ein Default-Wert vorgegeben werden, der dann zunächst auf dem Bildschirm erscheint und vom Anwender verändert oder mit der [Return]-Taste bestätigt werden kann.
Wesentlich erweiterte Möglichkeiten bietet der INPUT USING Befehl.

Hinweis: INPUT  blockiert das System nicht. Die Pseudo-Multitaskingbefhle (z.B. ON TIMER GOSUB) werden weiterhin ausgeführt und auch andere Programme laufen weiter. Auch ein Programmabbruch mit [Ctrl]+[C] ist während der Eingabe möglich.
Beispiel: INPUT "Geben Sie 3 Werte ein: ";A,B,C 
PRINT A,B,C 
INPUT @(10,0);"Geben Sie Ihren Namen ein: ";N$ 
PRINT N$ 
Ergebnis:  Es werden die Eingaben des Users auf dem Bildschirm dargestellt. 
siehe auch:  INPUT USING   INPUT$   INKEY$ 
   
 
 

INPUT # 
Typ: Befehl 
Syntax:  INPUT #<num.Ausdruck>,<Variable>[[,<Variable>]] 
INPUT #<Dateinummer>,<Variable>[[,<Variable>]] 
Erklärung:  Es werden aus einer sequentiellen Datei eine oder mehrere Variablen eingelesen. Wie bei INPUT können mehrere Variablen in einer Zeile durch Kommata getrennt erscheinen.

Hinweis: Zwar können Sie mit mehreren INPUT # Anweisungen nacheinander die Elemente einer Zeile einlesen. Es empfiehlt sich aber aus Gründen der Übersichtlichkeit, hinter INPUT # immer genau soviele Variablen anzugeben, wie sich in einer Zeile der Datei befinden. Wenn Sie nicht wissen, wieviele Werte sich in einer Zeile befinden, so können Sie auch mit LINE INPUT zunächst die ganze Zeile einlesen und dann die verschiedenen Werte den einzelnen Variablen zuweisen.

Achtung: INPUT # ist nicht geeignet, um Daten von der Modemschnittstelle bzw. von der Druckerschnittstelle zu holen. Verwenden Sie dafür INPUT$ oder besser GET
Beispiel: OPEN "O",1,FN Get_Fsspec$(0,0,"TEST.DAT") 
WRITE #1,1,2,3 
WRITE #1,4,5,6 
CLOSE 1 
 
OPEN "I",1,FN Get_Fsspec$(0,0,"TEST.DAT") 
WHILE NOT EOF(1) 
 INPUT #1,A,B,C 
 PRINT A,B,C 
WEND 
CLOSE 1 
Ergebnis:   1  2  3  4  5  6
siehe auch:  LINE INPUT #   INPUT$   GET
   
 
 

INPUT USING 
Typ: Befehl 
Syntax:  INPUT [<String-Ausdruck>;]<String-Variable> USING [<String-Ausdruck>],[<num.Variable>],[<num.Ausdruck>], [<num.Ausdruck>][,<num.Variable>] 
INPUT [<Prompt>;]<Eingabe-Variable> USING [<Steuerstring>],[<Rückgabe-Variable>],[<Länge>], [<Füllzeichen>][,<Positions-Variable>] 
Erklärung:  INPUT USING ermöglicht eine formatierte Maskeneingabe mit diversen Einstellungsmöglichkeiten. Abhängig vom Steuerstring werden bei der Eingabe nur bestimmte Zeichen zugelassen:

"0" Ziffern 
"à" Buchstaben (einschl. länderspezifische Zeichen) 
"a" Buchstaben (ausschl. länderspezifische Zeichen) 
"%" Sonderzeichen (ausschl. länderspezifische Zeichen) 
"^" Ctrl-Zeichen (Eingabe mit [Ctrl]+[A],[Ctrl]+[Buchstabe]) 
"+<Zeichen>" einzelnes Zeichen zulassen 
"-<Zeichen>" einzelnes Zeichen verbieten 

Die Steuerzeichen selbst können groß oder klein geschrieben werden. Um also Namen eingeben zu können, könnte Ihr Steuerstring so aussehen: "A +- +." (Alle Buchstaben einschl. Sonderzeichen, der Bindestrich und der Punkt sind zugelassen). Telefonnummern würde man mit "0 +/" eingeben können. 
Weiterhin besteht die Möglichkeit, bestimmte Zeichen gleich bei der Eingabe umwandeln zu lassen:

"u" alles nach Großbuchstaben wandeln 
"l" alles nach Kleinbuchstaben wandeln 
"c<Zeichen1><Zeichen2>" wird <Zeichen1> eingegeben so wird es automatisch durch <Zeichen 2> ersetzt.

Hinweis: <Zeichen1> muß natürlich auch in der Auswahl der zugelassenen Zeichen sein.

Um also bei einer Zahleneingabe immer sofort statt Dezimalpunkt mit Komma zu arbeiten, würde ein Steuerstring "0 +.+, c.," benötigt. 
Grundsätzlich wird die Eingabe mit [Return] beendet. Sie können jedoch mit dem Steuerstring weitere Tasten oder Ereignisse bestimmen, die die Eingabe beenden: 

"x<Zeichen>" Sobald die Taste mit demselben ASCII-Code wie <Zeichen>  gedrückt wird, wird die Eingabe abgebrochen.

"s<Zeichen>" Sobald die Taste mit demselben VirtuelKeyCode wie der ASCII-Code von <Zeichen> gedrückt wird, wird die Eingabe abgebrochen. Dies ermöglicht z.B. die Unterscheidung zwischen Ziffernblock und Haupttastatur und erlaubt auch den Abbruch durch Tasten, die als ASCII-Code eine Null zurückgeben, wie z.B. [Cursor hoch]. 

"<" linke Randüberschreitung. Die Eingabe wird abgebrochen, wenn der Cursor über den linken Rand hinaus bewegt wird. 

">" rechte Randüberschreitung. Die Eingabe wird abgebrochen, wenn der Cursor über den rechten Rand hinaus bewegt wird. 

Der <Prompt> wird wie bei allen Eingabeanweisungen vor der Eingabe ausgegeben und kann natürlich auch eine Positionsangabe mit "@" enthalten.

Die <Eingabe-Variable> muß immer vom Stringtyp sein, da sie während der Eingabe als Puffer dient. Numerische Eingaben werden nach der Eingabe mittels VAL umgewandelt. 
Die <Rückgabe-Variable> gibt Aufschluß über die Abbruchursache:

 0 die Eingabe wurde mit [Return] verlassen 
-1 linke Randüberschreitung 
-2 rechte Randüberschreitung 

Positive Werte stehen für eine andere Abbruchtaste. Sie wird durch einen vier Byte langen Wert gekennzeichnet, der - ähnlich wie bei INKEY$ - die (C)ommandbits, den (V)irtuelKeyCode und den (A)SCII-Code enthält: $CC VV 00 AA (hexadezimale Darstellung). 

Durch die Angabe einer <Länge> kann die Eingabe auf eine bestimmte Zeichenzahl begrenzt werden. Die Länge sollte immer mit angegeben werden, da eine zu lange Eingabezeile (mehr Spalten als darstellbar) nicht vernünftig funktioniert.

Der ASCII-Code des <Füllzeichens> bestimmt das Zeichen, mit dem die Eingabezeile hinterlegt wird, um das Eingabefeld anzudeuten. Wird nichts angegeben so ist das "_"-Zeichen voreingestellt. Denkbar wäre z.B. 42 ("*") für Zahleneingaben bei Schecks oder 32 (Leerzeichen), wenn gar nicht hinterlegt werden soll.

Die <Positions-Variable> schließlich bestimmt die Position, die der Cursor zu Beginn der Eingabe einnimmt. Sie liefert auch die zuletzt eingenomme Cursor-Position zurück. Man kann also z.B. den Cursor gezielt an die Fehlerstelle bewegen, wenn im Fehlerfall die Eingabe wiederholt werden muß. Es wäre auch denkbar, den Cursor immer wieder an den Anfang der Eingabe zu stellen, um so schneller Korrekturen vornehmen zu können.

Wichtig: Die <Eingabe-Variable> wird im Unterschied zu INPUT nicht in jedem Fall zuerst gelöscht, sondern erscheint als Vorgabe in der Eingabezeile. Damit können Sie dem Anwender bereits sinnvolle Eingaben vorschlagen, z.B. das aktuelle Datum. Es genügt dann ein einfaches [Return], um die Eingabe zu übernehmen. Wenn mehrfach dieselben oder ähnliche Eingaben verlangt werden, kann der alte Wert einfach stehen bleiben oder geringfügig modifiziert übernommen werden.

Nach Beendigung der Eingabe mit INPUT USING wird kein Zeilenvorschub ausgegeben. Soll also die nächste Ausgabe in einer neuen Zeile erfolgen, so muß zuvor mit PRINT ein Zeilenvorschub ausgelöst werden.

Hinweis: INPUT USING blockiert das System nicht. Die Pseudo-Multitaskingbefhle (z.B. ON TIMER GOSUB) werden weiterhin ausgeführt und auch andere Programme laufen weiter. Auch ein Programmabbruch mit [Ctrl]+[C] ist während der Eingabe möglich.
Beispiel: Eingabe 
END 

DEF PROC Eingabe 
 CLS 
 PRINT @(5,5);"Name :"; 
 PRINT @(6,5);"Stra*e :"; 
 PRINT @(8,5);"PLZ/Ort :"; 
 PRINT @(10,5);"Telefon :"; 
 PRINT @(13,5);"Angaben in Ordnung (J/N) ?"; 
 Exit$="s"+ CHR$($48)+"s"+ CHR$($50) 
 Max_Feld=5 
 REPEAT 
  SELECT Feld 
   CASE 0: INPUT @(5,15);Name$ USING "a+-+ "+Exit$,Taste,50 
   CASE 1: INPUT @(6,15);Strasse$ USING "a0+ +-"+Exit$,Taste,30 
   CASE 2: INPUT @(8,15);Plz$ USING "0x "+Exit$,Taste,4 
   CASE 3: INPUT @(8,20);Ort$ USING "a0+ +-+/"+Exit$,Taste,50 
   CASE 4: INPUT @(10,15);Tel$ USING "0c-/+/+ "+Exit$,Taste,15 
   CASE 5: Jn$="": INPUT @(13,32);Jn$ USING "u+J+N"+Exit$,Taste,1 
  END_SELECT 
  Scan= HIGH(Taste) AND $FF 
  IF Scan=$48 THEN Feld= MAX(Feld- 1,0):' Cursor hoch 
  IF Scan=$50 OR Taste=0 THEN Feld=MIN(Feld+1,Max_Feld):' Cursor runter 
 UNTIL Jn$="J" 
END_PROC 
 

Ergebnis:  Das Programm ermöglicht die Eingabe einer kompletten Adresse. 
siehe auch:  INPUT   INPUT$   INKEY$    USING 
   
 
   

DEFDBL  -  FIX Inhalt | INPUT$ - LPRINT

Support | Bestellen | Start | Home: http://www.berkhan.de


© 1997-2001 Berkhan-Software