PrintShopCompanion-Apple-II/PSC Source Disk 3 - Calenda.../S_ICAL3.txt

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"