' *****************
' *** INPUT.LST ***
' *****************
'
DEFWRD "a-z"
'
> PROCEDURE yes.no.input
  ' *** choose between YES and NO
  ' *** YES = <Y> of <y> of <Return> or left mouse-button
  ' *** NO = <N> of <n> of right mouse-button
  ' *** global :  YES!   NO!
  LOCAL x,y,in$,w1$,w2$,k
  CLR yes!,no!,in$,k
  HIDEM
  x=CRSCOL
  y=CRSLIN
  w1$="(y/n)"
  w2$=SPACE$(5)
  REPEAT          ! clear key-buffer
    in$=INKEY$
  UNTIL in$=""
  PRINT AT(x,y);w1$;
  REPEAT
    PAUSE 30
    SWAP w1$,w2$
    PRINT AT(x,y);w1$;
    k=MOUSEK
    in$=INKEY$
  UNTIL INSTR("yYnN"+CHR$(13),in$) OR k>0
  IF INSTR("yY"+CHR$(13),in$) OR k=1
    yes!=TRUE
    PRINT AT(x,y);"YES  ";
  ELSE
    no!=TRUE
    PRINT AT(x,y);"NO   ";
  ENDIF
  PAUSE 10             ! short pause for release of button
RETURN
' **********
'
> PROCEDURE pos.number.input(len,VAR number#)
  ' *** geformatteerde input van positieve getallen
  LOCAL x,y,in$,txt$,enter!
  HIDEM
  x=CRSCOL
  y=CRSLIN
  LET field$=STRING$(len,".")
  PRINT LEFT$("_"+field$,len);
  REPEAT
    REPEAT
      in$=INKEY$
    UNTIL LEN(in$)=1
    IF in$=CHR$(13)
      enter!=TRUE
    ENDIF
    IF in$=backspace$
      IF LEN(txt$)>0
        txt$=LEFT$(txt$,LEN(txt$)-1)
      ELSE
        OUT 2,7
      ENDIF
    ENDIF
    IF LEN(txt$)<len AND INSTR(".0123456789",in$)
      txt$=txt$+in$
    ELSE
      OUT 2,7
    ENDIF
    PRINT AT(x,y);LEFT$(txt$+"_"+field$,len);
  UNTIL enter!
  PRINT AT(x,y);VAL(txt$);SPACE$(len-LEN(txt$));
  number#=VAL(txt$)
RETURN
' **********
'
> PROCEDURE pos.integer.input(len,VAR number%)
  ' *** geformatteerde input van positieve integers
  LOCAL x,y,in$,txt$,enter!
  HIDEM
  x=CRSCOL
  y=CRSLIN
  LET field$=STRING$(len,".")
  PRINT LEFT$("_"+field$,len);
  REPEAT
    REPEAT
      in$=INKEY$
    UNTIL LEN(in$)=1
    IF in$=CHR$(13)
      enter!=TRUE
    ENDIF
    IF in$=backspace$
      IF LEN(txt$)>0
        txt$=LEFT$(txt$,LEN(txt$)-1)
      ELSE
        OUT 2,7
      ENDIF
    ENDIF
    IF LEN(txt$)<len AND INSTR("0123456789",in$)
      txt$=txt$+in$
    ELSE
      OUT 2,7
    ENDIF
    PRINT AT(x,y);LEFT$(txt$+"_"+field$,len);
  UNTIL enter!
  PRINT AT(x,y);VAL(txt$);SPACE$(len-LEN(txt$));
  number%=VAL(txt$)
RETURN
' **********
'
> PROCEDURE text.input(default$,len,VAR txt$)
  ' *** geformatteerde input van tekst
  LOCAL x,y,in$,code$,enter!
  HIDEM
  x=CRSCOL
  y=CRSLIN
  LET field$=STRING$(len,".")
  txt$=default$
  PRINT AT(x,y);LEFT$(txt$+"_"+field$,len);
  GRAPHMODE 3
  BOX (x-1)*8-2,(y-1)*char.height-2,(x-1)*8+len*8+2,y*char.height+2
  PLOT (x-1)*8-2,(y-1)*char.height-2
  GRAPHMODE 1
  DO
    REPEAT
      in$=INKEY$
    UNTIL in$<>""
    EXIT IF in$=CHR$(13)
    IF in$=backspace$
      IF LEN(txt$)>0
        txt$=LEFT$(txt$,LEN(txt$)-1)
      ELSE
        OUT 2,7
      ENDIF
    ENDIF
    IF in$=esc$
      txt$=""
    ENDIF
    IF ASC(in$)=1            ! <CONTROL> <A> voor invoer speciale karakters
      code$=INPUT$(3)        ! ASCII-code (3 cijfers !!)
      in$=CHR$(VAL(code$))
    ENDIF
    IF LEN(txt$)<len AND in$>=CHR$(32) AND LEN(in$)=1
      txt$=txt$+in$
    ELSE
      IF in$<>esc$ AND in$<>backspace$
        OUT 2,7
      ENDIF
    ENDIF
    PRINT AT(x,y);LEFT$(txt$+"_"+field$,len);
  LOOP
  GRAPHMODE 3
  BOX (x-1)*8-2,(y-1)*char.height-2,(x-1)*8+len*8+2,y*char.height+2
  PLOT (x-1)*8-2,(y-1)*char.height-2
  GRAPHMODE 1
  PRINT AT(x,y);txt$;SPACE$(len-LEN(txt$));
RETURN
' **********
'
