PrintShopCompanion-Apple-II/PSC Source Disk 2 - Editors.../S_FOEDIT2.txt

603 lines
12 KiB
Plaintext

;
; S:FOEDIT2
;
; Routines necessary to edit
; single character.
;
; Main Editor loop
;
EDITCHAR JSR EDITLOOP
JSR >1
JMP EDITCHAR
;
^1 JSR PARSE
.DA #'L',CMDLINES
.DA #'R',CMDRAYS
.DA #'B',CMDBOX
.DA #'O',CMDOVAL
;
.DA #'C'-$40,CMDCLEAR
.DA #'P'-$40,CMDPRINT
.DA #'D'-$40,CMDDEVIC
.DA #'I'-$40,CMDREFLN
.DA #'A'-$40,CMDADJST
.DA #'R'-$40,CMDRESTR
.DA #' ',CMDSPACE
.DA #ESC,EDITDESC
.DA #'S'-$40,EDITDCR
BRK
RTS
;-----------
;
; Restore old character
;
CMDRESTR JSR BUFFSAVE
JSR LOADCHAR
JMP SHOWGR
;-----------
;
; Leave the EDIT mode
;
EDITDESC SEC
HEX 24
EDITDCR CLC
PLA
PLA
RTS
;-----------
;
; Toggle reference lines
;
CMDREFLN LDA REFFLAGS
EOR #$80
STA REFFLAGS
JMP SHOWGR
;-----------
;
; Adjust reference lines
;
ARY1 = 34
ARY2 = ARY1+80
;
; Save ref lines and X,Y
;
CMDADJST JSR BLAKDONE
LDA XCOOR
PHA
LDA YCOOR
PHA
LDX #2
^0 LDA REFX1,X
PHA
DEX
BPL <0
;
BIT REFFLAGS
BMI >1
JSR CMDREFLN
;
^1 JSR BLAKRIT2
LDX #26
LDY #ARY1
LDA #0
JSR SHOWAROW
JSR PRINT
BYT PRSPC,9
.DA #PRLOC,227,#ARY1+3
BYT 'MOVE',CR
BYT 'CURSOR',CR
BYT 'TO',CR
BYT 'ADJUST',CR
BYT PRCNTR
.DA #PRHTAB,XCENT
BYT 'INDEX',CR
.DA #PRSTR,TXTLINES,#CR
;
BYT PRVTAB,ARY2
BYT 'PRESS',CR
.DA #PRSTR,TXTRET,#CR
.DA #PRSTR,TXTWD,#CR
BRK
JSR SHOWCOOR
;
LDX #1
JSR ADJUST1
BCS >0
LDX #0
JSR ADJUST1
;
; If SEC then restore ref lines
;
^0 ROR TMP0
LDX #0
^1 PLA
BIT TMP0
BPL >2
STA REFX1,X
^2 INX
CPX #3
BLT <1
PLA
STA YCOOR
PLA
STA XCOOR
JSR SHOWGR
JMP SCR2RITE
;---
;
; Enter with X=0 or 1, move the
; reference lines.
;
ADJUST1 STX MOVERFY
LDA REFY1,X
STA YCOOR
LDA REFX1
STA XCOOR
LDX #6
CLC
JMP DOSHAPE
;
; DOSHAPE calls this routine which
; erases the old reference lines.
; DOSHAPE will plot the new lines
; automatically upon return.
;
MOVEREFS STX >8+1
STY >9+1
;
; Erase horizontal line
;
LDX #00
MOVERFY = *-1
LDY REFY1,X
LDX #FONTW-1
^0 JSR MOVEREF1
DEX
BPL <0
;
; Erase vertical line
;
LDX REFX1
LDY #FONTH-1
^1 JSR MOVEREF1
DEY
BPL <1
;
^8 LDX #00
STX REFX1
^9 LDA #00
LDX MOVERFY
STA REFY1,X
RTS
;---
;
; Reset bit at X,Y
;
MOVEREF1 STX XCOOR
STY YCOOR
JSR RESETBIT
LDX XCOOR
LDY YCOOR
RTS
;-----------
;
; Clear work area
;
CMDCLEAR JSR BLAKBOTM
JSR PRINT
.DA #PRLOC,140,#185
BYT PRCNTR
.DA #PRSTR,TXTRET
.DA #PRSTR,TXTTOCLR
.DA #PRSTR,TXTCHAR,#CR,#0
JSR GETKEY
CMP #CR
BNE >0
JSR BUFFSAVE
JSR CLRBUFF
JSR SHOWGR
^0 JMP SCR2BOTM
TXTCHAR BYT 'CHARACTER',0
;-----------
;
; Check SETUP
;
CKPRINT JSR BLAKBOTM
JSR PRINT
.DA #PRLOC,140,#184
BRK
LDA #'-'
JMP CHKPRINT
;-----------
;
; Print character
;
CMDPRINT JSR CKPRINT
BCS >0
JSR PRINT
BYT PRCNTR
.DA #PRSTR,TXTPRET
.DA #PRSTR,TXTTOPRN
.DA #PRSTR,TXTCHAR
BYT CR,0
JSR GETKEY
CMP #CR
BNE >0
JSR PRINTGR
^0 JMP SCR2BOTM
;-----------
;
; Change input device
;
CMDDEVIC JSR DEVICECH
JMP SCR2BOTM
;-----------
;
; Shape handlers
;
CMDLINES LDA #0
HEX 2C
CMDRAYS LDA #1
HEX 2C
CMDBOX LDA #2
HEX 2C
CMDOVAL LDA #3
JSR SHAPHELP
JSR SHOWCOOR
;
LDA SHAPETYP
AND #7
STA >0+1
CLC
;
^0 LDX #00
JSR DOSHAPE
BCS >1
LDA #00
SHAPETYP = *-1
ASL
BMI <0
;
; Fix up screen when done
;
^1 JMP SCR2RITE
;-----------
;
; Print help screen
;
HY1 = 2
HY2 = 36
HY3 = 105
HY4 = 164
;
SHAPHELP STA TMP0
ASL
ADC TMP0
ASL
TAX
LDY SHAPHLP9+0,X
LDA SHAPHLP9+1,X
STY >0+1
STA >0+2
LDA SHAPHLP9+2,X
STA SHAPETYP
;
LDY SHAPHLP9+3,X
LDA SHAPHLP9+4,X
STY >4+1
STA >4+2
;
LDA SHAPHLP9+5,X
STA HELPTEMP
;
JSR SETPLOTX
JSR BUFFSAVE
;
JSR BLAKDONE
JSR BLAKRIT2
JSR PRINT
BYT PRBIG,PRCNTR
.DA #PRLOC,XCENT,#HY1
^0 .DA #PRSTR,$FFFF,#NOCR,#0
;
LDX #26
LDY #HY2
LDA #0
JSR SHOWAROW
JSR PRINT
.DA #PRLOC,227,#HY2+3
BYT 'MOVE',CR
BYT 'CURSOR',CR
BYT 'TO',CR
BYT 'DRAW',CR
.DA #PRLOC,XCENT,#HY2+48
BYT PRCNTR
BYT PRCSPACE,1
.DA 'N ',#PRSTR,TXTNEGA,#CR
BYT PRCSPACE,2
BYT PRCNTR
.DA #PRLOC,XCENT,#HY3
BYT 'PRESS',CR
.DA #PRSTR,TXTRET,#CR
BYT 'TO PLACE',CR
BYT PRCNTR
^4 .DA #PRSTR,$FFFF,#CR
BYT RTOSWITE,26,HY4-6,14,2
BYT PRVTAB,HY4
BYT 'PRESS <ESC>',CR,0
;
LDA #00
HELPTEMP = *-1
BPL >5
JSR PRINT
BYT PRCNTR
.DA #PRSTR,TXTWD,#CR,#0
JMP >6
;
^5 JSR PRINT
BYT PRCNTR
BYT 'TO GO BACK',CR,0
;
^6 RTS
;
TXTWD BYT 'WHEN DONE',0
;
; 64 means stay in shape routine
; until ESC is pressed. 128 means
; don't re-initialize X1,Y1 each time
; the remaining number is the shape
; number used by DOSHAPE
;
SHAPHLP9 .DA TXTLINES,#0+64
.DA TXTLINE,#$80
;
.DA TXTRAYS,#0+64+128
.DA TXTLINE,#$80
;
.DA TXTBOX,#2
.DA TXTBOX,#$00
;
.DA TXTOVAL,#4
.DA TXTOVAL,#$00
;
TXTLINE BYT 'LINE',0
TXTLINES BYT 'LINES',0
TXTRAYS BYT 'RAYS',0
TXTBOX BYT 'BOX',0
TXTOVAL BYT 'OVAL',0
;-----------
;
; Show next page
;
CMDSPACE INC PAGENUM
LDA PAGENUM
EOR #4
BNE SHOWPAGE
STA PAGENUM
;
; Show help screen
;
SHOWPAGE JSR BLAKPAGE
;
LDY #0
PAGENUM = *-1
JSR JMPVECTS
ADR PAGE1
ADR PAGE2
ADR PAGE3
ADR PAGE4
;
XCENT = 231
XEDGE = 182
XR1 = 13
XR2 = 24
P1SPC = 13
;
PG1Y = 69
PAGE1 JSR PRINT
BYT PRCSPACE,1
BYT PRSPC,P1SPC
.DA #PRLOC,XEDGE,#PG1Y
.DA #PRSTR,TXTCTRL,'P',#CR
.DA #PRSTR,TXTCTRL,'C',#CR
.DA #PRSTR,TXTCTRL,'D',#CR
.DA #PRSTR,TXTCTRL,'L',#CR
.DA #PRSTR,TXTCTRL,'I'
BYT PRSPC,8+P1SPC,CR
.DA #PRSTR,TXTCTRL,'A'
BYT PRSPC,8+P1SPC,CR
.DA #PRSTR,TXTCTRL,'R',#CR
;
BYT PRRITE,PRSPC,P1SPC
.DA #PRLOC,279,#PG1Y
BYT 'PRINT',CR
BYT 'CLEAR',CR
BYT 'DEVICE',CR
BYT 'LOCK',CR
BYT PRSPC,8
BYT 'INDEX',CR
BYT PRSPC,P1SPC
BYT 'LINES',CR
BYT PRSPC,8
BYT 'ADJUST',CR
BYT PRSPC,P1SPC
BYT 'INDEX LINES',CR
BYT 'REDO',CR
;
BRK
RTS
;-----------
PAGE2 JSR PRINT
BYT PRSPC,14
BYT PRCSPACE,1
.DA #PRLOC,XEDGE,#66
;
BYT 'D - DRAW',CR
BYT 'E',PRRTAB,XR1,'- ERASE',CR
BYT '1',PRRTAB,XR1,'- INSERT ROW',CR
BYT '2',PRRTAB,XR1,'- DELETE ROW',CR
;
BYT PRSPC,8
BYT '3',PRRTAB,XR1,'- INSERT',CR
BYT PRSPC,14,PRRTAB,XR2
.DA #PRSTR,PAGE2COL,#CR
;
BYT PRSPC,8
BYT '4',PRRTAB,XR1,'- DELETE',CR
BYT PRSPC,14,PRRTAB,XR2
.DA #PRSTR,PAGE2COL,#CR
;
BYT 'F',PRRTAB,XR1,'- FLOOD FILL',CR
BRK
RTS
;
PAGE2COL BYT 'COLUMN',0
;-----------
PAGE3 JSR PRINT
BYT PRCSPACE,1
.DA #PRLOC,XEDGE,#66
;
BYT PRSPC,8
BYT 'H - FLIP',CR
BYT PRSPC,12,PRRTAB,XR2
BYT 'HORIZONTAL',CR
;
BYT PRSPC,8
BYT 'V',PRRTAB,XR1,'- FLIP',CR
BYT PRSPC,12,PRRTAB,XR2
BYT 'VERTICAL',CR
;
BYT 'N',PRRTAB,XR1
.DA #PRSTR,TXTNEGA,#CR
BYT 'ESC - GO BACK',CR
BRK
LDX #26
LDY #133
LDA #1
JSR SHOWAROW
JSR PRINT
BYT PRRITE
.DA #PRLOC,279,#148
BYT 'SCROLL',CR,0
RTS
TXTNEGA BYT '- NEGATIVE',0
;-----------
PAGE4Y = 105
Z1 = 17
Z2 = PAGE4Y-1
;
PAGE4 JSR PRINT
.DA #PRLOC,XCENT,#66
BYT PRCNTR
BYT 'POSITION',CR
BYT 'CURSOR',CR
BYT '& PRESS:',CR
; BYT RTOSWITE,26,92,14,2
BYT PRLEFT,PRSPC,Z1
BYT PRVTAB,PAGE4Y
.DA #PRHTAB,XEDGE
;
BYT 'L',PRRTAB,XR1,'- '
.DA #PRSTR,TXTLINES,#CR
BYT PRPIC,37,Z2,2,9
HEX 813E70230F2081208123602018200620
HEX C13F
;
BYT 'R',PRRTAB,XR1,'- '
.DA #PRSTR,TXTRAYS,#CR
BYT PRPIC,37,Z2+Z1,2,9
HEX 218131811181191809064D0135810F81
HEX C13F
;
BYT 'B',PRRTAB,XR1,'- '
.DA #PRSTR,TXTBOX,#CR
BYT PRPIC,37,Z2+Z1*2,2,9
HEX C13F0120012001200120012001200120
HEX C13F
;
BYT 'O',PRRTAB,XR1,'- '
.DA #PRSTR,TXTOVAL,#CR
BYT PRPIC,37,Z2+Z1*3,2,9
HEX 70030C0C021001200120012002100C0C
HEX 7003
BRK
RTS
;-----------
;
; Erase the top of the right side
; used by EDIT screen.
;
BLAKRIT2 JSR PRINT
BYT RTOSBLAK,26,0,14,16
BRK
;
; Erase right side of screen
;
BLAKRITE JSR PRINT
BYT RTOSBLAK,26,16,14,176
BRK
;
; Erase bottom of screen
;
BLAKBOTM JSR PRINT
BYT RTOSBLAK,0,181,40,11,0
CLC
RTS
;
; Erase help page area
;
BLAKPAGE JSR PRINT
BYT RTOSBLAK,26,63,14,114,0
RTS
;-----------
;
; Show right part of screen
;
SCR2RITE JSR TOP2
JSR BLAKRIT2
LDX #26
LDY #0
TYA
JSR SHOWAROW
JSR PRINT
.DA #PRLOC,227,#11
BYT 'MOVE',CR
BYT 'CURSOR',CR
.DA #PRLOC,182,#39
BYT PRSPC,11
BYT PRCSPACE,1
BYT 'P - PATTERN',CR
BYT 'X',PRRTAB,XR1,'- MIRRORS',CR
BYT RTOSWITE,26,61,14,2
BYT RTOSWITE,26,177,14,2
BRK
JSR SHOWBOXS
JSR SHOWPAGE
;
; Display bottom help stuff
;
SCR2BOTM JSR BLAKBOTM
JSR SHOWCOOR
JSR PRINT
.DA #PRHTAB,169
BYT PRRITE,PRCSPACE,1
BYT 'U - UNDO',NOCR,0
;
LDA #XEDGE/7
JMP SPACEBAR
;-----------
;
; Show coordinates X= Y=
;
SHOWCOOR JSR PRINT
.DA #PRLOC,7,#185
BYT 'X=',NOCR
.DA #PRHTAB,49
BYT 'Y=',NOCR,0
RTS
;-----------
;
;
;
ICL "S:FOEDIT3"