;***************************************************************************;
;                                                                           ;
;                                    GET                                    ;
;                 Subroutine to wait for a single character                 ;
;                                                                           ;
;***************************************************************************;
;Copyright (C) 1986 by UltraSoft.  All Rights Reserved.
;
;Written by: David Pallmann
;
;Usage: XCALL GET, {string_variable}
;
;Notes: this routine waits for a character to be input
;
;Assembly instructions: .M68 GET       << creates GET.SBR
;
;Edit History:
;1.0 01-Jan-86 created. /DFP
;1.1 03-Jun-86 add error checking just for Brad. /DFP

       VMAJOR=1
       VMINOR=1

       OBJNAM  .SBR

       SEARCH  SYS
       SEARCH  SYSSYM
       SEARCH  TRM

;AlphaBASIC sets up XCALL argument list this way, indexed by A3:

       .OFINI
       .OFDEF  XC.ARG,2                ; number of arguments in XCALL
       .OFDEF  XC.TY1,2                ; argument #1 - type code
       .OFDEF  XC.AD1,4                ; argument #1 - address
       .OFDEF  XC.SZ1,4                ; argument #1 - size
       .OFSIZ  XC.SIZ

       XC$STR=2                        ; type code for string arguments

GET:    PHDR    -1,PV$RSM!PV$WSM,PH$REE!PH$REU  ; program header
       CMMW    XC.ARG(A3),#1           ; one argument specified in XCALL?
       BNE     ARGERR                  ;  nope
       CMMW    XC.TY1(A3),#XC$STR      ; is argument a string?
       BNE     TYPERR                  ;  uh-uh
       JOBIDX  A5                      ; index JCB with A5
       MOV     JOBTRM(A5),A4           ; index TCB with A4
       ORW     #T$IMI!T$ECS,T.STS(A4)  ; set image mode, no-echo
       KBD                             ; get a char into D1
       MOV     XC.AD1(A3),A0           ; index string var
       MOVB    D1,@A0                  ; return char
       ANDW    #^C<T$IMI!T$ECS>,T.STS(A4) ; set line mode w/echo
       RTN                             ; return

ARGERR: TYPESP  ?Argument count
       BR      ERROR

TYPERR: TYPESP  ?Argument type

ERROR:  TYPECR  error in GET.SBR
       EXIT                            ; exit on error

       END