Set Input 10,-1 : Rem ist für Input # und Line Input # erforderlich
Curs Off : Flash Off 
Rem ***********************************
Rem * Verbesserte Input-Routine die   *
Rem * auch eine Steuerung mit den     *
Rem * Curor-Tasten erlaubt, sowie die *
Rem * Eingabelänge begrenzt.          *
Rem * Verwendung in eigenen Programmen*
Rem * erlaubt.  H. König 1989         *
Rem ***********************************
'    Die Auswertung der Ctrl-Tasten müssen Sie ändern, weil das mit AMOS 
'    nicht oder anders geht! 
'
Dim CO(1)
QSTART:
Cls : Rem                       Farbe des letzen Paper-Befehls anfügen   
TX$="Test.........." : Rem      Vorgabe fuer INPUT, kann  
LG=Len(TX$) : Rem               lg = Eingabelänge
CO(0)=1 : Rem                   Farben fuer Ersatz-Cursor  
CO(1)=2
ZEILE=10
SPALTE=16
Gosub EINGABE : Rem             Unterprogramm aufrufen 
Rem                             nur fuer Demo erforderlich 
ANZEIGEN:
Print " Ihre Eingabe: ";TX$
Gosub TASTE
Goto QSTART
Rem
Rem
Rem  hier beginnen die Unterprogramm fuer die Verwendung in eigene Programme 
Rem
Rem
EINGABE:
SP=1 : Rem                      Position in der Eingabe 
EINGABE0:
Locate SPALTE,ZEILE : Rem       Cursor setzen
Print TX$ : Rem                 String anzeigen
EINGABE1:
If SP<1 : Rem                   Cursorposition < 1 
   SP=1 : Rem                   ja, dann Spalte = 1
Else If SP>LG : Rem             Cursorposition > Laenge
   ' ^^^  Else If ist nur mit AMOS prof möglich   ^^^ 
   SP=LG : Rem                  ja, dann Spalte = Laenge  
End If 
Locate SPALTE+SP-1,ZEILE : Rem  Cursor auf Spalte und Zeile 
Paper CO(1) : Rem               Ersatz-Cursor anschalten 
Pen CO(0)
Print Mid$(TX$,SP,1) : Rem      Zeichen ausgeben  
Paper CO(0) : Rem               Ersatz-Cursor aus
Pen CO(1)
Gosub TASTE : Rem               ein Zeichen holen
If X=13 or X=27 : Rem           RETURN oder Esc
   Goto EINGABE_ENDE : Rem      dann abbrechen  
Else If XX=78 : Rem             Cursor rechts (Scancode) 
   ' ^^^  Else If ist nur mit AMOS prof möglich   ^^^ 
   Gosub CURSOR_AUS : Rem       Cursor ausschalten 
   SP=SP+1 : Rem                Spalte +1 
   Goto EINGABE1 : Rem          und weitermachen  
Else If XX=79 : Rem             Cursor links (Scancode)  
   ' ^^^  Else If ist nur mit AMOS prof möglich   ^^^ 
   Gosub CURSOR_AUS : Rem       Cursor ausschalten 
   SP=SP-1 : Rem                Spalte -1 
   Goto EINGABE1 : Rem   und weitermachen 
End If 
EINGABE_BACKSPACE:
If X<>8 : Rem   keine Backspace-Taste
   Goto EINGABE_DELETE : Rem    ja, dann weiter 
End If 
If SP<2 : Rem                   noch Platz fuer zurueck? 
   Goto EINGABE1 : Rem          nein, dann naechstes zeichen  
End If 
TX$=Left$(TX$,SP-2)+Mid$(TX$,SP,LG-SP+1)+" "
SP=SP-1 : Rem                   Spalte -1
Goto EINGABE0 : Rem             String erneut ausgeben 
EINGABE_DELETE:
If XX<>70 : Rem                 Del-Taste
   Goto EINGABE_INSERT : Rem    nein, dann weiter 
End If 
TX$=Left$(TX$,SP-1)+Mid$(TX$,SP+1,LG-SP)+" " : Rem   Zeichen loeschen 
Goto EINGABE0 : Rem             String erneut ausgeben 
Rem                             Insert-Taste = Crtl-p oder 
EINGABE_INSERT:
If X<>16 : Rem                  Crtl + 7 auf Zehnerblock  
   Goto EINGABE_HOME : Rem      nein, dann weiter 
End If 
TX$=Left$(TX$,SP-1)+" "+Mid$(TX$,SP,LG-SP) : Rem   Leerzeichen einfuegen
Goto EINGABE0 : Rem             String erneut ausgeben 
EINGABE_HOME:
If X<>23 : Rem                  Home-Taste  
   Goto EINGABE_ZEICHEN : Rem   nein, dann weiter
End If 
Goto EINGABE : Rem              Eingabe qstarten  
EINGABE_ZEICHEN:
If X<32 or X>127
   If X<160
      Goto EINGABE1
   End If 
End If 
Mid$(TX$,SP,1)=X$ : Rem         Zeichen in String uebernehmen
Gosub CURSOR_AUS : Rem          Hilfs-Cursor ausschalten  
SP=SP+1 : Rem                   Spaltenzaehler +1
Goto EINGABE1 : Rem             und naechstes Zeichen
Rem                             Rueckgabestring in tx$ 
EINGABE_ENDE:
Return 
CURSOR_AUS:
Rem                             ist Bestandteil von "Eingabe"  
Locate SPALTE+SP-1,ZEILE : Rem  Cursor positionieren  
Paper CO(0) : Rem               Farbe zurucksetzen 
Pen CO(1)
Print Mid$(TX$,SP,1) : Rem      letztes Zeichen ausgeben  
Return : Rem                    und zurueck 
TASTE:
Rem                             wird auch von "Eingabe" verwendet  
X$="" : Rem                     x$ loeschen
While X$="" : Rem               auf Tastendruck warten 
   X$=Inkey$
Wend 
X=Asc(X$) : Rem                 ASCII-Wert des Zeichens zur Auswertung 
XX=Scancode : Rem               Steuertaste merken 
Return 
