mirror of
https://github.com/antoinevignau/source.git
synced 2024-10-01 20:57:22 +00:00
1 line
21 KiB
Plaintext
Executable File
1 line
21 KiB
Plaintext
Executable File
load 'macros.dump'
|
|
include 'driver.equ'
|
|
include 'wp.equ'
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Imported addresses
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
IMPORT W_BotLine
|
|
IMPORT W_BotPB
|
|
IMPORT W_BotPar
|
|
IMPORT W_CalcDocRect
|
|
IMPORT W_CalcFonts
|
|
IMPORT W_CalcLineHeight
|
|
IMPORT W_CaretBot
|
|
IMPORT W_CaretTop
|
|
IMPORT W_CheckWidow
|
|
IMPORT W_CutLine
|
|
IMPORT W_DateStr
|
|
IMPORT D_Deref
|
|
IMPORT W_GetAddr
|
|
IMPORT W_GetLRecPtr
|
|
IMPORT W_GetLineRec
|
|
IMPORT W_GetPageSize
|
|
IMPORT W_GetParRec
|
|
IMPORT W_GetTopSpace
|
|
IMPORT D_GetWdth
|
|
IMPORT W_Indent
|
|
IMPORT W_JustBits
|
|
IMPORT W_JustExtra
|
|
IMPORT W_JustPtr
|
|
IMPORT W_lastline
|
|
IMPORT W_LastP
|
|
IMPORT W_LeftMargin
|
|
IMPORT W_MakeVisRuler
|
|
IMPORT W_PageStr
|
|
IMPORT W_PaperSize
|
|
IMPORT W_ParLock
|
|
IMPORT W_ParRec
|
|
IMPORT W_ParUnLock
|
|
|
|
IMPORT Q_Point
|
|
IMPORT W_Ptr
|
|
IMPORT W_PutOnScreen
|
|
IMPORT W_ReadRulerP
|
|
IMPORT W_RulBits
|
|
IMPORT W_STFont
|
|
IMPORT W_STPtr
|
|
IMPORT W_STColor
|
|
IMPORT W_STStyle
|
|
IMPORT D_SelectFont
|
|
IMPORT W_SetFullREct
|
|
IMPORT W_ShowRuler
|
|
IMPORT W_STLIne
|
|
IMPORT W_StartLine
|
|
IMPORT W_StartOffset
|
|
IMPORT W_StartPar
|
|
IMPORT W_StartRuler
|
|
IMPORT W_TimeStr
|
|
IMPORT W_TopLine
|
|
IMPORT W_TopPB
|
|
IMPORT W_TopPar
|
|
IMPORT W_TopParHeight
|
|
IMPORT W_TopPg
|
|
IMPORT W_TopPgLine
|
|
IMPORT W_TopPgPar
|
|
IMPORT W_TopPgPixel
|
|
IMPORT D_UnLock
|
|
IMPORT W_UseTab
|
|
IMPORT W_ValidLines
|
|
IMPORT W_Height
|
|
IMPORT Q_Line
|
|
IMPORT W_offset
|
|
IMPORT Q_Rect
|
|
IMPORT W_Selected
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Forward addresses and entries
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
ENTRY W_GetHPos
|
|
ENTRY JustCheck
|
|
ENTRY W_LineToPixel
|
|
ENTRY W_MakeCaretGuts
|
|
ENTRY W_PixelToLine
|
|
|
|
********************************************************************
|
|
*
|
|
* IncludesÉ
|
|
* Wednesday, May 3, 1989 12:47:59 AM
|
|
********************************************************************
|
|
|
|
|
|
|
|
****************************************************************
|
|
* W_SetBounds
|
|
W_SetBounds PROC EXPORT
|
|
;Using wpglobals
|
|
|
|
local Q_Rect:r
|
|
begin
|
|
|
|
pushlong !Q_Rect
|
|
jsl W_CalcDocRect
|
|
|
|
pha
|
|
pha
|
|
pha
|
|
pushword Q_Rect
|
|
jsl W_PixelToLine
|
|
pla
|
|
sta W_TopPB
|
|
cmp #1
|
|
bne NoProb2
|
|
lda #$ffff
|
|
sta 1,s
|
|
sta 3,s
|
|
NoProb2
|
|
pullword W_TopLine
|
|
pullword W_TopPar
|
|
|
|
pha
|
|
pha
|
|
pha
|
|
pushword Q_Rect+4
|
|
jsl W_PixelToLine
|
|
pla
|
|
sta W_BotPB
|
|
cmp #1
|
|
bne NoProb
|
|
lda #$ffff
|
|
sta 1,s
|
|
sta 3,s
|
|
NoProb
|
|
pullword W_BotLine
|
|
pullword W_BotPar
|
|
|
|
return
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
****************************************************************
|
|
* W_MakeCaretNS - sets the W_Caret positions and menu for a D_New selection
|
|
* The D_New selection is the W_StartPar,W_StartLine,W_StartOffset
|
|
* Does not put W_Caret on screen
|
|
W_MakeCaretNS PROC EXPORT
|
|
begin
|
|
|
|
jsl W_MakeCaretGuts
|
|
|
|
jsl W_SetBounds
|
|
|
|
return
|
|
|
|
ENDP
|
|
|
|
|
|
****************************************************************
|
|
* W_MakeCaretGuts
|
|
W_MakeCaretGuts PROC EXPORT
|
|
;Using wpglobals
|
|
local W_Ptr:l,tempv:w
|
|
begin
|
|
|
|
lda W_Selected
|
|
bne NotOnScreen
|
|
|
|
stz W_CaretTop
|
|
stz W_CaretBot
|
|
|
|
pha
|
|
pushword W_StartPar
|
|
pushword W_StartLine
|
|
jsl W_LineToPixel
|
|
pla
|
|
bmi NotOnScreen
|
|
sta TempV
|
|
|
|
spacelong
|
|
pushword W_StartPar
|
|
pushword W_StartLine
|
|
jsl W_GetLRecPtr
|
|
PullLong W_Ptr
|
|
|
|
addword [W_Ptr]:#W_lDescent,TempV,W_CaretBot
|
|
subword TempV,[W_Ptr]:#W_lAscent,W_CaretTop
|
|
|
|
pha
|
|
pushword W_StartPar
|
|
pushword W_StartLine
|
|
pushword W_StartOffset
|
|
jsl W_GetHPos
|
|
pla
|
|
sta W_CaretTop+2
|
|
sta W_CaretBot+2
|
|
|
|
NotOnScreen
|
|
|
|
return
|
|
|
|
ENDP
|
|
|
|
|
|
****************************************************************
|
|
* W_MakeCaret - sets the W_Caret positions and menu for a D_New selection
|
|
* The D_New selection is the W_StartPar,W_StartLine,W_StartOffset
|
|
* Does put W_Caret on screen
|
|
W_MakeCaret PROC EXPORT
|
|
;Using wpglobals
|
|
|
|
local W_ParRec:l
|
|
begin +b
|
|
|
|
pushword W_StartPar
|
|
pushword W_StartLine
|
|
pushlong #0
|
|
jsl W_PutOnScreen
|
|
|
|
lda W_Selected
|
|
jne IsSel
|
|
|
|
jsl W_MakeCaretGuts
|
|
|
|
IsSel
|
|
lda W_StartPar
|
|
jsl W_GetParRec
|
|
movelong ax,W_ParRec
|
|
|
|
cmpw [W_ParRec]:#W_pAttr,#W_PgBrk
|
|
bne NoPB
|
|
|
|
addlong #W_pBytes,W_ParRec,W_ParRec
|
|
|
|
NoPB
|
|
jsl W_SetFullREct
|
|
movelong [W_ParRec]:#W_pRulerHand,W_StartRuler
|
|
|
|
lda W_ShowRuler
|
|
beq NoDrawVis
|
|
|
|
pushlong [W_ParRec]:#W_pRulerHand
|
|
jsl W_MakeVisRuler
|
|
|
|
NoDrawVis
|
|
jsl W_CalcFonts
|
|
|
|
jsl W_SetBounds
|
|
|
|
return
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
****************************************************************
|
|
* W_LineToPixel(par,Q_Line)
|
|
* Possible bugs with W_TopParHeight,W_TopPgLine
|
|
* Not yet done: widowing and pictures
|
|
* Out of bounds checking
|
|
W_LineToPixel PROC EXPORT
|
|
;Using WPGlobals
|
|
;Using ScreenData
|
|
|
|
input par:w,Q_Line:w
|
|
local ParPtr:l,Page:w,LineHand:l,LinePtr:l,CurPar:w,CurLine:w
|
|
local StartPixel:w,PagePixs:w,CrossPage:w,TopParPix:w,SPixel:w
|
|
output pixel:w
|
|
begin
|
|
|
|
moveword #-1,pixel
|
|
|
|
cmpw Par,W_TopPar
|
|
bcc NoGood
|
|
bne NextCheck
|
|
cmpw Q_Line,W_TopLine
|
|
bcc NoGood
|
|
NextCheck cmpw W_BotPar,par
|
|
bcc NoGood
|
|
bne IsGood
|
|
cmpw W_BotLine,Q_Line
|
|
bcs IsGood
|
|
NoGood brl ErrExit
|
|
IsGood
|
|
|
|
moveword W_TopPg,Page
|
|
|
|
moveword W_TopPgPar,CurPar
|
|
jsl W_GetParRec
|
|
movelong ax,ParPtr
|
|
moveword [ParPtr]:#W_pPixels,TopParPix
|
|
sec
|
|
sbc W_TopParHeight
|
|
moveword a,[ParPtr]:#W_pPixels
|
|
|
|
stz CrossPage
|
|
|
|
lda Page
|
|
jsl W_GetTopSpace
|
|
sta pixel
|
|
sta SPixel
|
|
lda Page
|
|
jsl W_GetPageSize
|
|
addword a,Pixel,PagePixs
|
|
|
|
lda CurPar
|
|
jsl W_GetParRec
|
|
movelong ax,ParPtr
|
|
|
|
; this loop is for normal pars, drops into subloop for pars that cross Q_Line
|
|
AddLoop
|
|
cmpw Par,CurPar
|
|
jeq W_GotPar
|
|
|
|
moveword [ParPtr]:#W_pAttr,a
|
|
beq OkPar
|
|
and #W_PgBrk
|
|
beq OkPar
|
|
inc Page
|
|
|
|
lda CrossPage
|
|
beq TryMo
|
|
|
|
moveword #-1,pixel
|
|
brl LPExit
|
|
|
|
TryMo
|
|
inc CrossPage
|
|
lda Page
|
|
jsl W_GetTopSpace
|
|
sta pixel
|
|
lda Page
|
|
jsl W_GetPageSize
|
|
addword a,Pixel,PagePixs
|
|
|
|
addword Pixel,W_PaperSize,Pixel
|
|
sta SPixel
|
|
brl NextPar
|
|
|
|
OkPar
|
|
lda pixel
|
|
clc
|
|
ldy #W_pPixels
|
|
adc [ParPtr],y
|
|
cmp PagePixs
|
|
jcc GotNewPixel
|
|
|
|
ldy CrossPage
|
|
jne GotNewPixel
|
|
|
|
lda curpar
|
|
jsl W_CheckWidow
|
|
bcc NoWidow
|
|
|
|
cmpw pixel,SPixel
|
|
beq NoWidow
|
|
|
|
inc CrossPage
|
|
inc Page
|
|
lda Page
|
|
jsl W_GetTopSpace
|
|
sta pixel
|
|
lda Page
|
|
jsl W_GetPageSize
|
|
addword a,Pixel,PagePixs
|
|
|
|
addword Pixel,W_PaperSize,Pixel
|
|
sta SPixel
|
|
brl addloop
|
|
|
|
NoWidow
|
|
|
|
inc CrossPage
|
|
|
|
pushword CurPar
|
|
jsl W_ValidLines
|
|
|
|
movelong ParPtr,ax
|
|
jsl W_ReadRulerP
|
|
|
|
movelong [ParPtr]:#W_pLineHand,LineHand
|
|
movelong LineHand,ax
|
|
jsl D_Deref
|
|
ldy CurPar
|
|
cpy W_TopPgPar
|
|
bne NoTop
|
|
ldy W_TopPgLine
|
|
bra IsTop
|
|
NoTop ldy #0
|
|
IsTop jsl W_GetLineRec
|
|
movelong ax,LinePtr
|
|
moveword Pixel,StartPixel
|
|
|
|
LineLoop
|
|
movelong LinePtr,ax
|
|
jsl W_CalcLineHeight
|
|
clc
|
|
adc Pixel
|
|
cmp PagePixs
|
|
bcs GotLine
|
|
sta Pixel
|
|
addlong #W_lBytes,LinePtr,LinePtr
|
|
bra LineLoop
|
|
|
|
GotLine
|
|
addword [ParPtr]:#W_pPixels,StartPixel,a
|
|
subword a,Pixel,StartPixel ; SP = [par]:#pix-(pixel-sp)
|
|
inc Page
|
|
|
|
lda Page
|
|
jsl W_GetTopSpace
|
|
sta pixel
|
|
lda Page
|
|
jsl W_GetPageSize
|
|
addword a,Pixel,PagePixs
|
|
lda pixel
|
|
clc
|
|
adc W_PaperSize
|
|
adc StartPixel
|
|
sta pixel
|
|
sta SPixel
|
|
|
|
movelong LineHand,ax
|
|
jsl D_UnLock
|
|
bra NextPar
|
|
|
|
|
|
GotNewPixel sta Pixel
|
|
|
|
NextPar inc CurPar
|
|
addlong #W_pBytes,ParPtr,ParPtr
|
|
brl AddLoop
|
|
|
|
; got the par check that is not widowed
|
|
W_GotPar
|
|
|
|
ldy CrossPage
|
|
jne NoWidow2
|
|
|
|
lda pixel
|
|
clc
|
|
ldy #W_pPixels
|
|
adc [ParPtr],y
|
|
cmp PagePixs
|
|
jcc NoWidow2
|
|
|
|
cmpw pixel,spixel
|
|
beq NoWidow2
|
|
|
|
lda curpar
|
|
jsl W_CheckWidow
|
|
bcc NoWidow2
|
|
|
|
cmpw pixel,spixel
|
|
beq NoWidow2
|
|
|
|
inc CrossPage
|
|
inc Page
|
|
lda Page
|
|
jsl W_GetTopSpace
|
|
sta pixel
|
|
lda Page
|
|
jsl W_GetPageSize
|
|
addword a,Pixel,PagePixs
|
|
|
|
addword Pixel,W_PaperSize,Pixel
|
|
sta SPixel
|
|
|
|
NoWidow2
|
|
pushword CurPar
|
|
jsl W_ValidLines
|
|
|
|
movelong ParPtr,ax
|
|
jsl W_ReadRulerP
|
|
|
|
stz CurLine
|
|
cmpw CurPar,W_TopPgPar
|
|
bne NoTTop2
|
|
moveword W_TopPgLine,CurLine
|
|
NotTop2
|
|
|
|
movelong [ParPtr]:#W_pLineHand,LineHand
|
|
movelong LineHand,ax
|
|
jsl D_Deref
|
|
ldy CurLine
|
|
jsl W_GetLineRec
|
|
movelong ax,LinePtr
|
|
|
|
LLoop
|
|
movelong LinePtr,ax
|
|
jsl W_CalcLineHeight
|
|
clc
|
|
adc Pixel
|
|
cmp PagePixs
|
|
bcc NoProb
|
|
|
|
ldy CrossPage
|
|
bne NoProb
|
|
inc CrossPage
|
|
|
|
inc Page
|
|
|
|
lda Page
|
|
jsl W_GetTopSpace
|
|
sta pixel
|
|
lda Page
|
|
jsl W_GetPageSize
|
|
addword a,Pixel,PagePixs
|
|
addword W_PaperSize,pixel,pixel
|
|
sta SPixel
|
|
bra LLoop
|
|
|
|
NoProb
|
|
sta Pixel
|
|
inc CurLine
|
|
|
|
SLloop cmpw Q_Line,CurLine
|
|
bcc DoneLastStuff
|
|
addlong #W_lBytes,LinePtr,LinePtr
|
|
bra LLoop
|
|
|
|
|
|
DoneLastStuff
|
|
|
|
subword pixel,[LinePtr]:#W_lDescent,a
|
|
sbc W_TopPgPixel
|
|
sta pixel
|
|
|
|
movelong LineHand,ax
|
|
jsl D_UnLock
|
|
|
|
lda W_ShowRuler
|
|
beq LPExit
|
|
|
|
addword pixel,#W_RulerHt,pixel
|
|
|
|
LPExit
|
|
lda W_TopPgPar
|
|
jsl W_GetParRec
|
|
movelong ax,ParPtr
|
|
moveword TopParPix,[ParPtr]:#W_pPixels
|
|
|
|
ErrExit
|
|
return
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
****************************************************************
|
|
* W_LineToTopPixel(par,Q_Line):pixel
|
|
* returns pixel above Q_Line
|
|
* Possible bugs with W_TopParHeight,W_TopPgLine
|
|
* Not yet done: widowing and pictures
|
|
W_LineToTopPixel PROC EXPORT
|
|
|
|
input par:w,Q_Line:w
|
|
output pixel:w,W_Height:w
|
|
begin
|
|
|
|
pha
|
|
pushword par
|
|
pushword Q_Line
|
|
jsl W_LineToPixel
|
|
pullword pixel
|
|
|
|
lda par
|
|
jsl W_GetParRec
|
|
jsl W_ReadRulerP
|
|
|
|
spacelong
|
|
pushword par
|
|
pushword Q_Line
|
|
jsl W_GetLRecPtr
|
|
pla
|
|
plx
|
|
jsl W_CalcLineHeight
|
|
sta W_Height
|
|
txa
|
|
clc
|
|
adc pixel
|
|
sec
|
|
sbc W_Height
|
|
sta pixel
|
|
|
|
return
|
|
|
|
ENDP
|
|
|
|
|
|
****************************************************************
|
|
* W_PixelToLine(V:w):par,Q_Line,dir
|
|
* dir is 1 for round down and -1 to round up, when between lines
|
|
* If par is 0 then pixel is below all Q_Text
|
|
W_PixelToLine PROC EXPORT
|
|
;Using WPGlobals
|
|
;Using ScreenData
|
|
|
|
input EndPixel:w
|
|
local ParPtr:l,Page:w,LineHand:l,LinePtr:l,LastPixel:w
|
|
local W_lastline:w,StartPixel:w,PagePixs:w,CrossPage:w,pixel:w
|
|
local TopParPix:w,CrossPage2:w,SPixel:w
|
|
output par:w,Q_Line:w,dir:w
|
|
begin
|
|
|
|
addword EndPixel,W_TopPgPixel,EndPixel
|
|
|
|
lda W_ShowRuler
|
|
beq NoSub
|
|
subword EndPixel,#W_RulerHt,EndPixel
|
|
NoSub
|
|
|
|
moveword W_TopPg,Page
|
|
|
|
moveword W_TopPgPar,par
|
|
jsl W_GetParRec
|
|
movelong ax,ParPtr
|
|
moveword [ParPtr]:#W_pPixels,TopParPix
|
|
sec
|
|
sbc W_TopParHeight
|
|
moveword a,[ParPtr]:#W_pPixels
|
|
|
|
stz CrossPage
|
|
stz CrossPage2
|
|
|
|
lda Page
|
|
jsl W_GetTopSpace
|
|
sta pixel
|
|
sta SPixel
|
|
lda Page
|
|
jsl W_GetPageSize
|
|
addword a,Pixel,PagePixs
|
|
|
|
lda par
|
|
jsl W_GetParRec
|
|
movelong ax,ParPtr
|
|
|
|
moveword pixel,LastPixel
|
|
|
|
moveword #-1,dir
|
|
|
|
moveword W_TopPgLine,Q_Line
|
|
|
|
cmpw Pixel,EndPixel
|
|
jcs LPExit
|
|
|
|
; this loop is for normal pars, drops into subloop for pars that cross Q_Line
|
|
AddLoop
|
|
|
|
moveword pixel,LastPixel
|
|
moveword CrossPage2,CrossPage
|
|
|
|
moveword [ParPtr]:#W_pAttr,a
|
|
beq OkPar
|
|
and #W_PgBrk
|
|
beq OkPar
|
|
inc Page
|
|
|
|
lda CrossPage
|
|
jne W_GotPar
|
|
|
|
inc CrossPage
|
|
lda Page
|
|
jsl W_GetTopSpace
|
|
sta pixel
|
|
lda Page
|
|
jsl W_GetPageSize
|
|
addword a,Pixel,PagePixs
|
|
addword Pixel,W_PaperSize,Pixel
|
|
sta SPixel
|
|
brl NextPar
|
|
|
|
OkPar
|
|
lda pixel
|
|
clc
|
|
ldy #W_pPixels
|
|
adc [ParPtr],y
|
|
cmp PagePixs
|
|
jcc GotNewPixel
|
|
|
|
ldy CrossPage
|
|
jne GotNewPixel
|
|
|
|
lda par
|
|
jsl W_CheckWidow
|
|
bcc NoWidow
|
|
|
|
cmpw pixel,SPixel
|
|
beq NoWidow
|
|
|
|
inc CrossPage2
|
|
inc Page
|
|
lda Page
|
|
jsl W_GetTopSpace
|
|
sta pixel
|
|
lda Page
|
|
jsl W_GetPageSize
|
|
addword a,Pixel,PagePixs
|
|
addword Pixel,W_PaperSize,Pixel
|
|
sta SPixel
|
|
brl AddLoop
|
|
|
|
NoWidow
|
|
inc CrossPage2
|
|
|
|
pushword par
|
|
jsl W_ValidLines
|
|
|
|
movelong ParPtr,ax
|
|
jsl W_ReadRulerP
|
|
|
|
movelong [ParPtr]:#W_pLineHand,LineHand
|
|
movelong LineHand,ax
|
|
jsl D_Deref
|
|
ldy Par
|
|
cpy W_TopPgPar
|
|
bne NoTop
|
|
ldy W_TopPgLine
|
|
bra IsTop
|
|
NoTop ldy #0
|
|
IsTop jsl W_GetLineRec
|
|
movelong ax,LinePtr
|
|
moveword Pixel,StartPixel
|
|
|
|
LineLoop
|
|
movelong LinePtr,ax
|
|
jsl W_CalcLineHeight
|
|
clc
|
|
adc Pixel
|
|
cmp PagePixs
|
|
bcs GotLine
|
|
sta Pixel
|
|
addlong #W_lBytes,LinePtr,LinePtr
|
|
bra LineLoop
|
|
|
|
GotLine
|
|
addword [ParPtr]:#W_pPixels,StartPixel,a
|
|
subword a,Pixel,StartPixel ; SP = [par]:#pix-(pixel-sp)
|
|
inc Page
|
|
|
|
lda Page
|
|
jsl W_GetTopSpace
|
|
sta pixel
|
|
lda Page
|
|
jsl W_GetPageSize
|
|
addword a,Pixel,PagePixs
|
|
lda pixel
|
|
clc
|
|
adc W_PaperSize
|
|
adc StartPixel
|
|
sta pixel
|
|
sta SPixel
|
|
|
|
movelong LineHand,ax
|
|
jsl D_UnLock
|
|
bra NextPar
|
|
|
|
|
|
GotNewPixel sta Pixel
|
|
|
|
NextPar
|
|
cmpw Pixel,EndPixel
|
|
bcs W_GotPar
|
|
inc Par
|
|
cmpw W_LastP,par
|
|
bcc PastAll
|
|
stz Q_Line
|
|
addlong #W_pBytes,ParPtr,ParPtr
|
|
brl AddLoop
|
|
|
|
PastAll
|
|
dec par
|
|
moveword #1,dir
|
|
moveword [ParPtr]:#W_pLastLine,a
|
|
dec a
|
|
sta Q_Line
|
|
brl LPExit
|
|
|
|
W_GotPar
|
|
stz Q_Line
|
|
|
|
cmpw [ParPtr]:#W_pAttr,#W_PgBrk
|
|
bne NoPB
|
|
|
|
inc par
|
|
moveword #2,dir
|
|
brl LPExit
|
|
|
|
NoPB
|
|
moveword LastPixel,pixel
|
|
moveword #-1,dir
|
|
|
|
pushword par
|
|
jsl W_ValidLines
|
|
|
|
movelong ParPtr,ax
|
|
jsl W_ReadRulerP
|
|
|
|
cmpw Par,W_TopPgPar
|
|
bne NoTTop2
|
|
moveword W_TopPgLine,Q_Line
|
|
NotTop2
|
|
|
|
movelong [ParPtr]:#W_pLineHand,LineHand
|
|
movelong LineHand,ax
|
|
jsl D_Deref
|
|
ldy Q_Line
|
|
jsl W_GetLineRec
|
|
movelong ax,LinePtr
|
|
|
|
LLoop
|
|
movelong LinePtr,ax
|
|
jsl W_CalcLineHeight
|
|
clc
|
|
adc Pixel
|
|
cmp PagePixs
|
|
bcc NoProb
|
|
|
|
ldy CrossPage
|
|
bne NoProb
|
|
inc CrossPage
|
|
|
|
inc Page
|
|
|
|
lda Page
|
|
jsl W_GetTopSpace
|
|
sta pixel
|
|
lda Page
|
|
jsl W_GetPageSize
|
|
addword a,Pixel,PagePixs
|
|
addword W_PaperSize,pixel,pixel
|
|
sta SPixel
|
|
cmp EndPixel
|
|
bcs LPExit
|
|
brl LLoop
|
|
|
|
NoProb
|
|
sta Pixel
|
|
cmp EndPixel
|
|
bcs DoneLastStuff
|
|
inc Q_Line
|
|
addlong #W_lBytes,LinePtr,LinePtr
|
|
bra LLoop
|
|
|
|
|
|
DoneLastStuff
|
|
stz dir
|
|
|
|
movelong LineHand,ax
|
|
jsl D_UnLock
|
|
|
|
LPExit
|
|
|
|
lda W_TopPgPar
|
|
jsl W_GetParRec
|
|
movelong ax,ParPtr
|
|
moveword TopParPix,[ParPtr]:#W_pPixels
|
|
|
|
return
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
****************************************************************
|
|
* W_GetLeft(a:Q_Line number)a:left margin or W_Indent
|
|
W_GetLeft PROC EXPORT
|
|
;Using WPGlobals
|
|
|
|
tay
|
|
lda W_LeftMargin
|
|
tyx
|
|
bne GLExit
|
|
lda W_Indent
|
|
|
|
GLExit
|
|
rtl
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
****************************************************************
|
|
* W_GetHPos(par,Q_Line,W_offset)
|
|
W_GetHPos PROC EXPORT
|
|
;Using wpglobals
|
|
EXPORT JustCheck
|
|
input par:w,Q_Line:w,W_offset:w
|
|
local W_ParRec:l,LineRecPtr:l,LineHand:l,changed:w,SetJust:w
|
|
local YStop2:w,YStop:w,Ptr2:l,Q_Point:l,ChrPtr:l,StopPtr:l
|
|
local FracBits:w,StringPtr:l
|
|
output CurH:w
|
|
begin
|
|
|
|
stz SetJust
|
|
stz FracBits
|
|
|
|
lda par
|
|
jsl W_GetParRec
|
|
jsl W_ReadRulerP
|
|
|
|
pushword par
|
|
jsl W_ParLock
|
|
|
|
pushword par
|
|
jsl W_ValidLines
|
|
|
|
lda par
|
|
jsl W_GetParRec
|
|
movelong ax,W_ParRec
|
|
|
|
movelong [W_ParRec]:#W_pLineHand,LineHand
|
|
movelong [LineHand],LineRecPtr
|
|
|
|
movelong LineRecPtr,ax
|
|
ldy Q_Line
|
|
jsl W_GetLineRec
|
|
movelong ax,LineRecPtr
|
|
|
|
moveword [LineRecPtr]:#W_lFont,W_STFont
|
|
moveword [LineRecPtr]:#W_lStyle,W_STStyle
|
|
moveword [LineRecPtr]:#W_lColor,W_STColor
|
|
moveword [LineRecPtr]:#W_lOffset,a
|
|
tax
|
|
lda par
|
|
jsl W_GetAddr
|
|
movelong ax,W_STPtr
|
|
movelong ax,ChrPtr
|
|
moveword Q_Line,W_STLIne
|
|
ldx W_offset
|
|
lda par
|
|
jsl W_GetAddr
|
|
movelong ax,W_JustPtr
|
|
movelong ax,StopPtr
|
|
|
|
lda W_RulBits
|
|
and #W_r_left
|
|
bne NoCut
|
|
|
|
jsl W_CutLine
|
|
|
|
NoCut
|
|
|
|
lda Q_Line
|
|
jsl W_GetLeft
|
|
sta CurH
|
|
|
|
lda W_RulBits
|
|
and #W_r_left+W_r_full
|
|
bne GotCurH
|
|
|
|
lda W_RulBits
|
|
and #W_r_center
|
|
bne ItsCenter
|
|
|
|
lda W_JustBits
|
|
bmi GotCurH
|
|
addword a,CurH,CurH
|
|
bra GotCurH
|
|
|
|
ItsCenter
|
|
lda W_JustBits
|
|
bmi GotCurH
|
|
lsr a
|
|
clc
|
|
adc CurH
|
|
sta CurH
|
|
|
|
GotCurH
|
|
NewChrPtr
|
|
moveword #1,changed
|
|
subword W_JustPtr,ChrPtr,YStop2
|
|
subword StopPtr,ChrPtr,YStop
|
|
jeq DLExit
|
|
ldy #0
|
|
PLoop
|
|
lda [ChrPtr],y
|
|
and #$ff
|
|
cmp #sp
|
|
bcc DumpIt
|
|
phy
|
|
pha
|
|
|
|
lda changed
|
|
beq NoChange
|
|
|
|
lda W_STFont
|
|
ldx W_STStyle
|
|
ldy W_STColor
|
|
jsl D_SelectFont
|
|
|
|
stz changed
|
|
|
|
NoChange
|
|
pla
|
|
tay ;get character
|
|
cmp #sp
|
|
bne DoReg
|
|
lda W_RulBits
|
|
and #W_r_full
|
|
beq DoReg
|
|
lda SetJust
|
|
beq DoReg
|
|
|
|
addword W_JustExtra,FracBits,FracBits
|
|
bcc NoBit
|
|
inc CurH
|
|
NoBit
|
|
|
|
addword W_JustExtra+2,CurH,CurH
|
|
|
|
ldy #sp
|
|
|
|
DoReg tya
|
|
jsl D_GetWdth
|
|
|
|
GotWidth
|
|
clc
|
|
adc CurH
|
|
sta CurH
|
|
ply
|
|
|
|
iny
|
|
cpy YStop2
|
|
bcc NoCheck
|
|
jsr JustCheck
|
|
NoCheck
|
|
cpy YStop
|
|
bcs DumpIt
|
|
brl PLoop
|
|
|
|
DumpIt
|
|
tya
|
|
clc
|
|
adc ChrPtr
|
|
sta Ptr2
|
|
lda ChrPtr+2
|
|
adc #0
|
|
sta Ptr2+2
|
|
|
|
cmpl ChrPtr,W_JustPtr
|
|
bcc NoExtra
|
|
|
|
jsr JustCheck
|
|
|
|
NoExtra
|
|
|
|
cmpl Ptr2,StopPtr
|
|
bcs DLExit
|
|
|
|
lda [Ptr2] ;change or cr
|
|
and #$ff
|
|
asl a
|
|
tax
|
|
jmp (ChrTable,x)
|
|
|
|
DLExit
|
|
|
|
pushword par
|
|
jsl W_ParUnLock
|
|
|
|
return
|
|
|
|
;--------------------------------------------
|
|
|
|
AdjustTab
|
|
pha
|
|
pushword W_STFont
|
|
pushword W_STStyle
|
|
pushword W_STColor
|
|
pushword CurH
|
|
pushlong Ptr2
|
|
jsl W_UseTab
|
|
pla
|
|
sta CurH
|
|
|
|
addlong Ptr2,#1,ChrPtr
|
|
|
|
brl NewChrPtr
|
|
|
|
|
|
PageWidth
|
|
movelong #W_PageStr,StringPtr
|
|
bra DoWidth
|
|
|
|
DateWidth
|
|
movelong #W_DateStr,StringPtr
|
|
bra DoWidth
|
|
|
|
TimeWidth
|
|
movelong #W_TimeStr,StringPtr
|
|
|
|
DoWidth
|
|
pha
|
|
pushlong StringPtr
|
|
_StringWidth
|
|
pla
|
|
addword a,CurH,CurH
|
|
|
|
addlong Ptr2,#1,ChrPtr
|
|
|
|
brl NewChrPtr
|
|
|
|
|
|
|
|
|
|
FChange
|
|
ldy #1
|
|
lda [Ptr2],y
|
|
sta W_STFont
|
|
addlong #3,Ptr2,ChrPtr
|
|
brl NewChrPtr
|
|
|
|
|
|
SizeChange
|
|
ldy #1
|
|
lda [Ptr2],y
|
|
shortm
|
|
sta W_STStyle+1
|
|
longm
|
|
addlong #2,Ptr2,ChrPtr
|
|
brl NewChrPtr
|
|
|
|
|
|
|
|
StyleChange
|
|
ldy #1
|
|
lda [Ptr2],y
|
|
shortm
|
|
sta W_STStyle
|
|
longm
|
|
addlong #2,Ptr2,ChrPtr
|
|
brl NewChrPtr
|
|
|
|
|
|
|
|
ColorChange
|
|
ldy #1
|
|
lda [Ptr2],y
|
|
and #$ff
|
|
sta W_STColor
|
|
addlong #2,Ptr2,ChrPtr
|
|
brl NewChrPtr
|
|
|
|
JustCheck ;
|
|
phy
|
|
lda SetJust
|
|
bne JCExit
|
|
inc SetJust
|
|
|
|
JCExit ply
|
|
rts
|
|
|
|
|
|
ChrTable DC.W 0,FChange ;0,1
|
|
DC.W StyleChange,SizeChange ;2,3
|
|
DC.W ColorChange,PageWidth ;4,5
|
|
DC.W DateWidth,TimeWidth ;6,7
|
|
DC.W 0,AdjustTab ;8,9
|
|
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
****************************************************************
|
|
* W_PixelToOffset(par,Q_Line,pixel) : W_offset
|
|
W_PixelToOffset PROC EXPORT
|
|
;Using wpglobals
|
|
|
|
input par:w,Q_Line:w,pixel:w
|
|
local W_ParRec:l,LineRecPtr:l,LineHand:l,changed:w,DoneFull:w
|
|
local YStop:w,Ptr2:l,ChrPtr:l,StopPtr:l,CurH:w,CurWidth:w
|
|
local YStop2:w,ExBits:w,tempCur:w,StringPtr:l
|
|
output W_offset:w
|
|
begin
|
|
|
|
stz ExBits
|
|
|
|
pushword par
|
|
jsl W_ValidLines
|
|
|
|
pushword par
|
|
jsl W_ParLock
|
|
|
|
lda par
|
|
jsl W_GetParRec
|
|
movelong ax,W_ParRec
|
|
jsl W_ReadRulerP
|
|
|
|
movelong [W_ParRec]:#W_pLineHand,LineHand
|
|
movelong [LineHand],LineRecPtr
|
|
|
|
movelong LineRecPtr,ax
|
|
ldy Q_Line
|
|
jsl W_GetLineRec
|
|
movelong ax,LineRecPtr
|
|
|
|
moveword [LineRecPtr]:#W_lFont,W_STFont
|
|
moveword [LineRecPtr]:#W_lStyle,W_STStyle
|
|
moveword [LineRecPtr]:#W_lColor,W_STColor
|
|
moveword [LineRecPtr]:#W_lOffset,a
|
|
tax
|
|
lda par
|
|
jsl W_GetAddr
|
|
movelong ax,W_STPtr
|
|
movelong ax,ChrPtr
|
|
moveword Q_Line,W_STLIne
|
|
moveword [LineRecPtr]:#W_lOffset+W_lBytes,a
|
|
tax
|
|
lda par
|
|
jsl W_GetAddr
|
|
movelong ax,W_JustPtr
|
|
movelong ax,StopPtr
|
|
|
|
lda W_RulBits
|
|
and #W_r_left
|
|
bne NoCut
|
|
|
|
jsl W_CutLine
|
|
|
|
NoCut
|
|
|
|
lda Q_Line
|
|
jsl W_GetLeft
|
|
sta CurH
|
|
|
|
lda W_RulBits
|
|
and #W_r_left+W_r_full
|
|
bne GotCurH
|
|
|
|
lda W_RulBits
|
|
and #W_r_center
|
|
bne ItsCenter
|
|
|
|
lda W_JustBits
|
|
bmi GotCurH
|
|
addword a,CurH,CurH
|
|
bra GotCurH
|
|
|
|
ItsCenter
|
|
lda W_JustBits
|
|
bmi GotCurH
|
|
lsr a
|
|
clc
|
|
adc CurH
|
|
sta CurH
|
|
|
|
GotCurH
|
|
stz CurWidth ;last used W_Char width
|
|
stz DoneFull
|
|
NewChrPtr
|
|
ldy #0
|
|
moveword #1,changed
|
|
subword W_JustPtr,ChrPtr,YStop2
|
|
subword StopPtr,ChrPtr,YStop
|
|
jeq GotOffset
|
|
PLoop
|
|
cmpw CurH,Pixel
|
|
jcs GotOffset
|
|
lda [ChrPtr],y
|
|
and #$ff
|
|
cmp #sp
|
|
bcc DumpIt
|
|
phy
|
|
pha
|
|
|
|
lda changed
|
|
beq NoChange
|
|
|
|
lda W_STFont
|
|
ldx W_STStyle
|
|
ldy W_STColor
|
|
jsl D_SelectFont
|
|
|
|
stz changed
|
|
|
|
NoChange
|
|
pla
|
|
tay
|
|
cmp #sp
|
|
bne DoReg
|
|
lda W_RulBits
|
|
and #W_r_full
|
|
beq DoReg
|
|
lda DoneFull
|
|
beq DoReg
|
|
|
|
moveword CurH,TempCur
|
|
|
|
addword W_JustExtra+2,CurH,CurH
|
|
addword W_JustExtra,ExBits,ExBits
|
|
bcc NoCInc
|
|
inc CurH
|
|
NoCInc
|
|
|
|
lda #sp
|
|
jsl D_GetWdth
|
|
clc
|
|
adc CurH
|
|
sta CurH
|
|
|
|
subword CurH,TempCur,CurWidth
|
|
bra DoneAdjust
|
|
|
|
DoReg tya
|
|
jsl D_GetWdth
|
|
sta CurWidth
|
|
clc
|
|
adc CurH
|
|
sta CurH
|
|
|
|
DoneAdjust
|
|
ply
|
|
|
|
iny
|
|
cpy YStop2
|
|
bcc NoCheck
|
|
jsr JustCheck
|
|
NoCheck
|
|
cpy YStop
|
|
bcs GotOffset
|
|
brl PLoop
|
|
|
|
DumpIt
|
|
tya
|
|
clc
|
|
adc ChrPtr
|
|
sta Ptr2
|
|
lda ChrPtr+2
|
|
adc #0
|
|
sta Ptr2+2
|
|
|
|
cmpl ChrPtr,W_JustPtr
|
|
bcc NoExtra
|
|
|
|
lda DoneFull
|
|
bne NoExtra
|
|
|
|
jsr JustCheck
|
|
|
|
NoExtra
|
|
|
|
lda [Ptr2] ;change or cr
|
|
and #$ff
|
|
asl a
|
|
tax
|
|
jmp (ChrTable,x)
|
|
|
|
|
|
GotOffset
|
|
tya
|
|
clc
|
|
adc ChrPtr
|
|
sta ChrPtr
|
|
lda #0
|
|
adc ChrPtr+2
|
|
sta ChrPtr+2
|
|
|
|
subword CurH,CurWidth,a
|
|
cmp Pixel
|
|
bcs MakeOffset
|
|
lsr CurWidth
|
|
adc CurWidth
|
|
cmp Pixel
|
|
bcc MakeOffset
|
|
|
|
decL ChrPtr
|
|
|
|
MakeOffset
|
|
lda par
|
|
ldx #0
|
|
jsl W_GetAddr
|
|
pha
|
|
lda ChrPtr
|
|
sec
|
|
sbc 1,s
|
|
sta W_offset
|
|
pla
|
|
|
|
DLExit
|
|
|
|
pushword par
|
|
jsl W_ParUnLock
|
|
|
|
return
|
|
|
|
;--------------------------------------------
|
|
|
|
AdjustTab
|
|
pha
|
|
pushword W_STFont
|
|
pushword W_STStyle
|
|
pushword W_STColor
|
|
pushword CurH
|
|
pushlong Ptr2
|
|
jsl W_UseTab
|
|
subword 1:s,CurH,CurWidth
|
|
pla
|
|
sta CurH
|
|
|
|
addlong Ptr2,#1,ChrPtr
|
|
|
|
brl NewChrPtr
|
|
|
|
|
|
PageWidth
|
|
movelong #W_PageStr,StringPtr
|
|
bra DoWidth
|
|
|
|
DateWidth
|
|
movelong #W_DateStr,StringPtr
|
|
bra DoWidth
|
|
|
|
TimeWidth
|
|
movelong #W_TimeStr,StringPtr
|
|
|
|
DoWidth
|
|
pha
|
|
pushlong StringPtr
|
|
_StringWidth
|
|
pla
|
|
sta CurWidth
|
|
addword a,CurH,CurH
|
|
|
|
addlong Ptr2,#1,ChrPtr
|
|
|
|
brl NewChrPtr
|
|
|
|
|
|
|
|
FChange
|
|
ldy #1
|
|
lda [Ptr2],y
|
|
sta W_STFont
|
|
addlong #3,Ptr2,ChrPtr
|
|
brl NewChrPtr
|
|
|
|
|
|
SizeChange
|
|
ldy #1
|
|
lda [Ptr2],y
|
|
shortm
|
|
sta W_STStyle+1
|
|
longm
|
|
addlong #2,Ptr2,ChrPtr
|
|
brl NewChrPtr
|
|
|
|
|
|
|
|
StyleChange
|
|
ldy #1
|
|
lda [Ptr2],y
|
|
shortm
|
|
sta W_STStyle
|
|
longm
|
|
addlong #2,Ptr2,ChrPtr
|
|
brl NewChrPtr
|
|
|
|
|
|
|
|
ColorChange
|
|
ldy #1
|
|
lda [Ptr2],y
|
|
and #$ff
|
|
sta W_STColor
|
|
addlong #2,Ptr2,ChrPtr
|
|
brl NewChrPtr
|
|
|
|
|
|
JustCheck
|
|
lda DoneFull
|
|
bne JCExit
|
|
inc DoneFull
|
|
JCExit
|
|
rts
|
|
|
|
ChrTable DC.W 0,FChange ;0,1
|
|
DC.W StyleChange,SizeChange ;2,3
|
|
DC.W ColorChange,PageWidth ;4,5
|
|
DC.W DateWidth,TimeWidth ;6,7
|
|
DC.W 0,AdjustTab ;8,9
|
|
|
|
ENDP
|
|
END
|
|
|