232 lines
3.9 KiB
Plaintext
232 lines
3.9 KiB
Plaintext
;
|
|
; S:ICAL3
|
|
;
|
|
; Edit a string. GIVEN:
|
|
;
|
|
; 1)*Routine to BLAK current string
|
|
; edit area. Must also return
|
|
; string address in TMP2.3
|
|
; 2) Routine to crop extra characters
|
|
; off the end of too-long strings.
|
|
; Used when the string will be
|
|
; printed using the loaded font.
|
|
; 3)*Routine to actually draw the
|
|
; string onto the screen.
|
|
;
|
|
; 4)*Maximum width on screen
|
|
; 5)*Maximum number of characters
|
|
; 6)*CSPACE on screen
|
|
; 7)*Kerning?
|
|
;
|
|
; * you must supply this parameter
|
|
;
|
|
;-----------
|
|
;
|
|
; Initialize TEDIT routine
|
|
;
|
|
TEINIT JSR GETINIT
|
|
JSR GETWORD
|
|
STY TBLAKMOD+1
|
|
STA TBLAKMOD+2
|
|
JSR GETWORD
|
|
STY TCROPMOD+1
|
|
STA TCROPMOD+2
|
|
JSR GETWORD
|
|
STY TDRAWMOD+1
|
|
STA TDRAWMOD+2
|
|
JSR GETWORD
|
|
STY TMAXWITH
|
|
STA TMAXCONT
|
|
JSR GETWORD
|
|
STY TCSPACE
|
|
STA TKERNING
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Text edit routine
|
|
;
|
|
TEDIT:
|
|
TBLAKMOD JSR $FFFF
|
|
TCROPMOD JSR $FFFF
|
|
;
|
|
; Screen crop routine
|
|
;
|
|
; Set CSPACE and KERN
|
|
;
|
|
LDY TMP2
|
|
LDA TMP3
|
|
STY SPARM+9
|
|
STA SPARM+10
|
|
;
|
|
LDA #00
|
|
TCSPACE = *-1
|
|
STA SPARM+7
|
|
;
|
|
LDA #00
|
|
TKERNING = *-1
|
|
STA SPARM+11
|
|
;
|
|
LDX #00
|
|
TMAXWITH = *-1
|
|
BEQ TDRAWMOD
|
|
LDY #0
|
|
LDA /UFONT
|
|
JSR STRCROP
|
|
;
|
|
TDRAWMOD JSR $FFFF
|
|
;
|
|
; Main loop (sort of)
|
|
;
|
|
^0 JSR IGETKEY
|
|
PHA
|
|
;
|
|
; Calc length into Y
|
|
;
|
|
LDY #$FF
|
|
^1 INY
|
|
LDA (TMP2),Y
|
|
BNE <1
|
|
;
|
|
PLA
|
|
LDX #1
|
|
JSR PARSE
|
|
.DA #'H'-$40,INPCTRLH
|
|
.DA #127,INPCTRLH
|
|
.DA #'E'-$40,INPCTRLE
|
|
;
|
|
; Return the following commands to
|
|
; the calling program.
|
|
;
|
|
.DA #CR,INPCR
|
|
.DA #'J'-$40,INPCR
|
|
.DA #ESC,INPESC
|
|
.DA #'K'-$40,INPESC
|
|
;
|
|
.DA #'I'-$40,INPCTRLI
|
|
.DA #'S'-$40,INPCTRLS
|
|
.DA #'P'-$40,INPCTRLP
|
|
.DA #'F'-$40,INPCTRLF
|
|
;
|
|
.DA #'@',<0+0
|
|
BRK
|
|
CMP #' '
|
|
BLT <0
|
|
CMP #'Z'+1
|
|
BGE <0
|
|
;
|
|
; Too many letters?
|
|
;
|
|
CPY #00
|
|
TMAXCONT = *-1
|
|
BGE <0
|
|
;
|
|
; Store char into buffer
|
|
;
|
|
STA (TMP2),Y
|
|
INY
|
|
LDA #0
|
|
STA (TMP2),Y
|
|
;
|
|
; If left justify, then don't need
|
|
; to black out old string.
|
|
;
|
|
LDA SPARM+1
|
|
BEQ TCROPMOD
|
|
BNE TBLAKMOD
|
|
;-----------
|
|
;
|
|
; Erase line
|
|
;
|
|
INPCTRLE LDY #1
|
|
;-----------
|
|
;
|
|
; Backspace
|
|
;
|
|
INPCTRLH DEY
|
|
BMI <0
|
|
LDA #0
|
|
STA (TMP2),Y
|
|
JMP TEDIT
|
|
;-----------
|
|
INPCTRLF INX
|
|
INPCTRLP INX
|
|
INPCTRLS INX
|
|
INPCTRLI INX
|
|
INPESC INX
|
|
INPCR TXA
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Get a key with flashing cursor
|
|
;
|
|
IGETKEY ASL ICURFLAG
|
|
^0 JSR ICURSOR
|
|
INC ICURFLAG
|
|
JSR FLSHINIT
|
|
;
|
|
^1 JSR POLEBTN
|
|
BMI >2
|
|
DEC FLASHLO
|
|
BNE <1
|
|
DEC FLASHHI
|
|
BPL <1
|
|
BMI <0
|
|
;
|
|
^2 PHA
|
|
LSR ICURFLAG
|
|
BCC >3
|
|
JSR ICURSOR
|
|
^3 PLA
|
|
RTS
|
|
;
|
|
; EOR cursor onto screen
|
|
;
|
|
ICURSOR LDA #4
|
|
STA SPARM+0
|
|
;
|
|
; SAVE: XOPTION,X,CSPACE
|
|
;
|
|
LDA SPARM+1
|
|
PHA
|
|
LDA SPARM+2
|
|
PHA
|
|
LDA SPARM+3
|
|
PHA
|
|
LDA SPARM+7
|
|
PHA
|
|
;
|
|
LDA #0
|
|
STA SPARM+1
|
|
STA SPARM+7
|
|
LDY #ICURSTXT
|
|
LDA /ICURSTXT
|
|
STY SPARM+9
|
|
STA SPARM+10
|
|
JSR STROUT
|
|
;
|
|
PLA
|
|
STA SPARM+7
|
|
PLA
|
|
STA SPARM+3
|
|
PLA
|
|
STA SPARM+2
|
|
PLA
|
|
STA SPARM+1
|
|
;
|
|
; Set option back to OR
|
|
; (4/2 = 2!!!)
|
|
;
|
|
LSR SPARM+0
|
|
RTS
|
|
;
|
|
ICURSTXT BYT 'II',0
|
|
;-----------
|
|
GETWORD JSR GETBYTE
|
|
TAY
|
|
JMP GETBYTE
|
|
;-----------
|
|
;
|
|
;
|
|
;
|
|
ICL "S:ICAL4"
|