00001 *************************
00002 *
00003 * SAG.ASM
00004 * MDJ 11-21-90
00005 *
00006 * KEYBOARD OPERATORS
00007 *
00008 *************************
00009 *
00010 * REQUIRES: KEYBD
00011 *           KBDCNT
00012 *           KBDIN
00013 *           OUTPUT
00014 *
00015 *************************
00016 *
00017 XCURS   EQU     $F3     SYSTEM VARIABLES
00018 YCURS   EQU     $F5
00019 TOINL   EQU     $01D1
00020 SPANL   EQU     $01D5
00021 NTIBL   EQU     $01D8
00022 TIB     EQU     $01DA
00023 KEYBD   EQU     $3FAA   KEYBD ROUTINES
00024 KBNC    EQU     $3FB1
00025 BKSP    EQU     $41A0   KBDCNT ROUTINES
00026 CLRCHR  EQU     $41D1
00027 HXCURS  EQU     $42D8   KBDIN WORDS
00028 HYCURS  EQU     $42DA
00029 CLRLIN  EQU     $42EF
00030 CURSCT  EQU     $430D
00031 PUTCHR  EQU     $45DC   OUTPUT WORDS
00032 CRLFS   EQU     $4694
00033         ORG     $5023
00034 *
00035 *************************
00036 *
00037 * NTIB
00038 * ( -- addr)
00039 * THE ADDRESS OF A
00040 * VARIABLE CONTAINING THE
00041 * NUMBER OF BYTES IN THE
00042 * TEXT INPUT BUFFER
00043 *
00044 *************************
00045 *
00046 NTIB    PSHS    X       #TIB
00047         LDX     #NTIBL
00048         PSHU    X
00049         PULS    X
00050         RTS
00051 *
00052 *************************
00053 *
00054 * TOIN
00055 * ( -- addr)
00056 * THE ADDRESS OF A
00057 * VARIABLE WHICH CONTAINS
00058 * THE PRESENT CHARACTER
 
 
 
 
 
 
 
 
00059 * OFFSET WITHIN THE INPUT
00060 * STREAM
00061 *
00062 *************************
00063 *
00064 TOIN    PSHS    X       >IN
00065         LDX     #TOINL
00066         PSHU    X
00067         PULS    X
00068         RTS
00069 *
00070 *************************
00071 *
00072 * SPAN
00073 * ( -- addr)
00074 * THE ADDRESS OF A 
00075 * VARIABLE CONTAINING THE
00076 * COUNT OF CHARACTERS
00077 * ACTUALLY RECEIVED AND
00078 * STORED BY THE LAST
00079 * EXECUTION OF EXPCT
00080 *
00081 *************************
00082 *
00083 SPAN    PSHS    X
00084         LDX     #SPANL
00085         PSHU    X
00086         PULS    X
00087         RTS
00088 *
00089 *************************
00090 *
00091 * KEY
00092 * ( -- 16b)
00093 * THE LEAST SIGNIFICANT
00094 * 8 BITS OF 16b IS THE
00095 * NEXT KEYPRESS RECEIVED.
00096 * ALL VALID KEYPRESSES
00097 * CAN BE RECEIVED.
00098 * VALID INPUT = 0 THROUGH
00099 * 255.  KEYPRESSES
00100 * RECEIVED WILL NOT BE
00101 * DISPLAYED
00102 *
00103 *************************
00104 *
00105 KEY     PSHS    A,B
00106         JSR     KBNC
00107         CLRA
00108         PULU    B
00109         PSHU    A,B
00110         PULS    A,B
00111         RTS
00112 *
00113 *************************
00114 *
00115 * EXPCT
00116 * (addr +n -- )
 
 
 
 
 
 
 
 
00117 * RECEIVE CHARACTERS AND
00118 * STORE EACH INTO MEMORY.
00119 * THE TRANSFER BEGINS AT
00120 * addr PROCEEDING TOWARDS
00121 * HIGHER ADDRESSES ONE
00122 * BYTE PER CHARACTER 
00123 * UNTIL EITHER A "RETURN"
00124 * IS RECEIVED OR UNTIL +n
00125 * CHARACTERS HAVE BEEN
00126 * TRANSFERRED.  NO MORE
00127 * THAN +n CHARACTERS WILL
00128 * BE STORED.  VALID INPUT
00129 * = 0 THROUGH 255.  THE
00130 * "RETURN" IS NOT STORED
00131 * INTO MEMORY.  ALL
00132 * CHARACTERS ACTUALLY
00133 * RECEIVED AND STORED
00134 * INTO MEMORY WILL BE
00135 * DISPLAYED, WITH THE
00136 * "RETURN" DISPLAYED AS A
00137 * SPACE.  INPUT < 33 AND
00138 * INPUT > 126 WILL
00139 * DISPLAY AS A SPACE. 
00140 * INPUT 13 (RETURN), 8
00141 * (BACKSPACE), AND 21
00142 * (LINE DELETE) ARE
00143 * ACTED UPON RATHER THAN
00144 * STORED
00145 *
00146 *************************
00147 *
00148 EXPCT   PSHS    A,B,X,Y EXPECT
00149         LDX     XCURS
00150         STX     HXCURS
00151         LDX     YCURS
00152         STX     HYCURS
00153         CLR     SPANL
00154         CLR     SPANL+1
00155         PULU    X
00156         PULU    Y
00157         PSHU    Y
00158         PSHU    X
00159 EXPCT1  CMPX    #0
00160         BEQ     EXPCT6
00161         JSR     KEYBD
00162         PULU    A
00163         CMPA    #13     RETURN
00164         BEQ     EXPCT5
00165         CMPA    #8      BACKSPACE
00166         BEQ     EXPCT2
00167         CMPA    #21     LINE DELETE
00168         BEQ     EXPCT3
00169         CMPA    #126    NON-PRINT RANGES
00170         BHI     EXPCT4
00171         CMPA    #33
00172         BLO     EXPCT4
00173         PSHU    A
00174         JSR     PUTCHR
 
 
 
 
 
 
 
 
00175         JSR     SPXP
00176         STA     ,Y+
00177         LEAX    -1,X
00178         BRA     EXPCT1
00179 EXPCT2  CMPX    ,U      ATTEMPT TO BACKSPACE TOO FAR?
00180         BEQ     EXPCT1  GO IF YES
00181         JSR     BKSP
00182         JSR     SPXM
00183         LEAY    -1,Y
00184         LEAX    1,X
00185         BRA     EXPCT1
00186 EXPCT3  CLR     SPANL   RESET NUMBER OF CHARACTERS
00187         CLR     SPANL+1
00188         JSR     CLRLIN
00189         PULU    X       RESET TO EXPECT START ADDRESS
00190         PULU    Y
00191         PSHU    Y
00192         PSHU    X
00193         BRA     EXPCT1
00194 EXPCT4  JSR     CLRCHR
00195         JSR     CURSCT
00196         JSR     SPXP
00197         STA     ,Y+
00198         LEAX    -1,X
00199         BRA     EXPCT1
00200 EXPCT5  JSR     CLRCHR
00201         JSR     CURSCT
00202 EXPCT6  JSR     CRLFS
00203         PULU    X,Y
00204         PULS    A,B,X,Y
00205         RTS
00206 SPXP    PSHS    A,B
00207         LDD     SPANL
00208         ADDD    #1
00209         STD     SPANL
00210         PULS    A,B
00211         RTS
00212 SPXM    PSHS    A,B
00213         LDD     SPANL
00214         SUBD    #1
00215         STD     SPANL
00216         PULS    A,B
00217 ZEND    RTS
00218         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
