00001 *************************
00002 *
00003 * KBDIN.ASM
00004 * MDJ 09-26-90
00005 *
00006 * KEYBOARD INPUT MANAGER
00007 *
00008 *************************
00009 *
00010 * REQUIRES: SCROLL
00011 *           CURSP
00012 *           KEYBD
00013 *           KBDCNT
00014 *
00015 * FOR EACH OF THE
00016 * ROUTINES IN THIS
00017 * MANAGER:
00018 *  NO ENTRY CONDITIONS
00019 *  ON RETURN, THE
00020 *   TERMINAL INPUT BUFFER
00021 *   (TIB) AND ITS COUNTER
00022 *   (NTIB) WILL HAVE BEEN
00023 *   AFFECTED
00024 *
00025 *************************
00026 *
00027 ADVCOD  EQU     $F7     ADVANCE CODE
00028 BKSP    EQU     $41A0   BACKSPACE ROUTINE
00029 CLRCHR  EQU     $41D1   CLEAR CHARACTER ROUTINE
00030 CRLF    EQU     $41FA   CARRIAGE RETURN/LINE FEED ROUTINE
00031 CURSCR  EQU     $420B   CURSOR ADVANCE/SCROLL ROUTINE
00032 CURSP   EQU     $3F6B   CURSOR ADVANCE ROUTINE
00033 ETIB    EQU     $02D9   END OF TERMINAL INPUT BUFFER
00034 KEYBD   EQU     $3FAA   KEYPRESS TRANSLATOR
00035 LBP     EQU     $FA     LINE BUFFER POINTER
00036 NTIB    EQU     $01D9   NUMBER OF CHARACTERS IN TIB
00037 PCHAR   EQU     $4239   CHARACTER CLEAR/DISPLAY ROUTINE
00038 SCROLL  EQU     $3F33   SCREEN SCROLL ROUTINE
00039 TIB     EQU     $01DA   START OF TERMINAL INPUT BUFFER
00040 XCURS   EQU     $F3     CURSOR X LOCATION
00041 YCURS   EQU     $F5     CURSOR Y LOCATION
00042         ORG     $4240
00043 *
00044 *************************
00045 *
00046 * KBDIN INPUTS A LINE
00047 * (256 CHARACTERS MAX)
00048 * TO THE TERMINAL INPUT
00049 * BUFFER
00050 *
00051 *************************
00052 *
00053 KBDIN   PSHS    A,B,X,Y
00054         JSR     CRLF    GO TO START OF NEXT SCREEN LINE
00055         LDA     ADVCOD  GET ADVANCE CODE
00056         CMPA    #1      IS IT SET?
00057         BNE     INLN1   GO IF NO
00058         JSR     SCROLL  SCROLL SCREEN IF SET
 
 
 
 
 
 
 
 
00059 INLN1   LDX     XCURS   GET CURSOR X LOCATION
00060         STX     HXCURS  TEMPORARY SAVE
00061         LDX     YCURS   GET CURSOR Y LOCATION
00062         STX     HYCURS  TEMPORARY SAVE
00063         JSR     CLRTIB  CLEAR TERMINAL INPUT BUFFER
00064         LDX     #TIB    POINT TO START OF TIB
00065         CLRB            CLEAR CHARACTER COUNTER
00066 INLNLP  JSR     KEYBD   GET A KEY FROM THE KEYBOARD
00067         PULU    A
00068         CMPA    #8      IS IT A BACKSPACE?
00069         BNE     INLN2   GO IF NO
00070         CMPB    #0      IS COUNTER = 0?
00071         BEQ     INLNLP  IGNORE BACKSPACE IF YES
00072         JSR     CLRCHR  CLEAR CHARACTER FROM SCREEN
00073         JSR     BKSP    BACKSPACE SCREEN CURSOR
00074         LDA     #32     SPACEBAR CODE
00075         STA     ,X      STORE TO TIB
00076         LEAX    -1,X    DECREMENT TIB POINTER
00077         DECB            DECREMENT CHARACTER COUNT
00078         BRA     INLNLP  RETURN FOR NEXT KEYPRESS
00079 INLN2   CMPA    #21     IS IT A LINE DELETE?
00080         BNE     INLN3   GO IF NO
00081         CMPB    #0      IS COUNTER = 0?
00082         BEQ     INLNLP  IGNORE LINE DELETE IF YES
00083         JSR     CLRLIN  CLEAR INPUT LINE FROM SCREEN
00084         JSR     CLRTIB  CLEAR TERMINAL INPUT BUFFER
00085         LDX     #TIB    POINT TO START OF TIB
00086         CLRB            CLEAR CHARACTER COUNTER
00087         BRA     INLNLP  RETURN FOR NEXT KEYPRESS
00088 INLN3   CMPA    #13     IS IT THE ENTER KEY?
00089         BNE     INLN4   GO IF NO
00090         CMPX    #ETIB   END OF BUFFER?
00091         BNE     INLN3A  GO IF NO
00092         INCB            INCREMENT THE CHARACTER COUNTER
00093         BRA     INLNEX
00094 INLN3A  JSR     CLRCHR  STORE A SPACE TO THE SCREEN
00095         LDA     #32     SPACEBAR CODE
00096         STA     ,X      STORE TO TIB
00097         JSR     CURSCT  GO ADVANCE CURSOR
00098         INCB            INCREMENT CHARACTER COUNTER
00099         BRA     INLNEX
00100 INLN4   CMPA    #32     IS IT THE SPACEBAR?
00101         BNE     INLN5   GO IF NO
00102         JSR     CLRCHR  STORE A SPACE TO THE SCREEN
00103         BRA     INLN6   GO STORE TO TIB
00104 INLN5   CMPA    #33     IS IT BELOW PRINTABLE RANGE
00105         BLO     INLNLP  IGNORE IF YES
00106         CMPA    #126    IS IT ABOVE PRINTABLE RANGE
00107         BHI     INLNLP  IGNORE IF YES
00108         PSHU    A
00109         JSR     PCHAR   GO DISPLAY CHARACTER
00110 INLN6   STA     ,X      STORE CHARACTER TO TIB
00111         CMPX    #ETIB   END OF BUFFER?
00112         BEQ     INLNLP  GO IF YES
00113         JSR     CURSCT  GO ADVANCE CURSOR
00114         LEAX    1,X     INCREMENT TIB POINTER
00115         INCB            INCREMENT CHARACTER COUNTER
00116         BRA     INLNLP  RETURN FOR NEXT KEYPRESS
 
 
 
 
 
 
 
 
00117 INLNEX  STB     NTIB    STORE CHARACTER COUNT TO NTIB
00118         LDX     #TIB    RESET POINTER
00119         STX     LBP     STORE TO LINE BUFFER POINTER
00120         PULS    A,B,X,Y
00121         RTS
00122 HXCURS  RMB     2       TEMPORARY CURSOR X LOCATION
00123 HYCURS  RMB     2       TEMPORARY CURSOR Y LOCATION
00124 *
00125 *************************
00126 *
00127 * CLRTIB CLEARS THE
00128 * TERMINAL INPUT BUFFER
00129 *
00130 *************************
00131 CLRTIB  PSHS    A,X
00132         LDX     #NTIB
00133         CLR     ,X+
00134         LDA     #32
00135 CLTB1   STA     ,X+
00136         CMPX    #ETIB
00137         BLS     CLTB1
00138         PULS    A,X
00139         RTS
00140 *
00141 *************************
00142 *
00143 * CLRLIN CLEARS THE INPUT
00144 * LINE
00145 *
00146 *************************
00147 *
00148 CLRLIN  PSHS    X,Y
00149         JSR     CLRCHR
00150 CLLN1   JSR     BKSP
00151         JSR     CLRCHR
00152         LDY     YCURS   GET THE CURSOR Y LOCATION
00153         CMPY    HYCURS  IS IT = THE TEMPORARY VALUE?
00154         BHI     CLLN1   GO IF NO
00155         LDX     XCURS   GET THE CURSOR X LOCATION
00156         CMPX    HXCURS  IS IT = THE TEMPORARY VALUE?
00157         BHI     CLLN1   GO IF NO
00158         PULS    X,Y
00159         RTS
00160 *
00161 *************************
00162 *
00163 * CURSCT ADVANCES THE
00164 * CURSOR, SCROLLS THE
00165 * SCREEN IF NECESSARY,
00166 * AND ADVANCES THE
00167 * TEMPORARY CURSOR
00168 *
00169 *************************
00170 *
00171 CURSCT  PSHS    A,B
00172         JSR     CURSP   ADVANCE THE CURSOR
00173         LDA     ADVCOD  GET THE ADVANCE CODE
00174         CMPA    #1      IS IT SET?
 
 
 
 
 
 
 
 
00175         BNE     CRST1   GO IF NO
00176         JSR     SCROLL  SCROLL THE SCREEN IF SET
00177         LDD     HYCURS  TEMPORARY CURSOR Y LOCATION
00178         SUBD    #8      ADVANCE SCREEN ADJUST
00179         STD     HYCURS
00180 CRST1   PULS    A,B
00181 ZEND    RTS
00182         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
