antoine-source/appleworksgs/PL/Src/pl.s

1 line
23 KiB
ArmAsm
Executable File
Raw Blame History

LOAD 'macros.dump'
include 'pl.equ'
include 'driver.equ'
include 'scrap.equ'
;-----------------------------------------------
;
; Imported addresses
;
;-----------------------------------------------
IMPORT D_MakeNewWin
IMPORT D_AddStrings
IMPORT D_BitMapPtr
IMPORT D_Deref
IMPORT D_DisposePtr
IMPORT D_FastMult
IMPORT D_GetNewUntitled
IMPORT X_GetPLSCRAPAddr
IMPORT D_GetPrintHandle
IMPORT D_GetRefCon
IMPORT D_LoadSegment
IMPORT D_NeedHand
IMPORT D_NeedHandle
IMPORT D_NewCtl
IMPORT P_AllHGCount
IMPORT P_AllHGuides
IMPORT P_AllVGCount
IMPORT P_AllVGuides
IMPORT P_ArrowRect
IMPORT P_AttrTable
IMPORT P_BuildUndo
IMPORT P_CheckHand
IMPORT P_Clear
IMPORT P_ContentRect
IMPORT P_ConvErr
IMPORT P_Copy
IMPORT P_CurDate
IMPORT P_CurrentWin
IMPORT P_Cursor
IMPORT P_Cut
IMPORT P_DblPage
IMPORT P_DefColor
IMPORT P_DefFont
IMPORT P_DefJust
IMPORT P_DefSize
IMPORT P_DefSpacing
IMPORT P_DefStyle
IMPORT P_DelObjects
IMPORT P_DoScritch
IMPORT P_DrawContent
IMPORT P_Entry
IMPORT P_FillMode
IMPORT P_FirstPOff
IMPORT P_FixMenus
IMPORT P_FixSpecMenu
IMPORT P_ForceUpdate
IMPORT P_FullPageRect
IMPORT P_FullPaperRect
IMPORT P_GrowRect
IMPORT P_H
IMPORT P_HDataSize
IMPORT P_HRulRect
IMPORT P_HScrTempl
IMPORT P_HScroll
IMPORT P_HValue
IMPORT P_HViewSize
IMPORT P_HorizGCount
IMPORT P_HorizGuides
IMPORT P_ImportHdl
IMPORT P_ImportType
IMPORT P_KillImport
IMPORT P_KillPage
IMPORT P_KillUndo
IMPORT P_LastObj
IMPORT P_LineSize
IMPORT P_LoadWindowStuff
IMPORT P_LockGuides
IMPORT P_MagGuides
IMPORT P_MakePict
IMPORT P_MouseDown
IMPORT P_MouseUp
IMPORT P_ObjList
IMPORT P_OldIdlePt
IMPORT P_OpenDoc
IMPORT P_OrgOffset
IMPORT P_PIconRect
IMPORT P_PInfoSize
IMPORT P_Page
IMPORT P_PageArray
IMPORT P_PageCount
IMPORT P_PageMode
IMPORT P_PageRect
IMPORT P_PageStart
IMPORT P_Palette
IMPORT P_PaperRect
IMPORT P_Placing
IMPORT P_Plane
IMPORT P_PortRect
IMPORT P_PrintDoc
IMPORT P_PrintHand
IMPORT P_QDPict
IMPORT P_SWinParams
IMPORT P_SampTitle
IMPORT P_SaveDoc
IMPORT P_SavePage
IMPORT P_SaveWindowStuff
IMPORT P_TBarColor
IMPORT P_TitleColor
IMPORT P_ToolType
IMPORT P_TrackCursor
IMPORT P_TrackOn
IMPORT P_Undo
IMPORT P_UpDateDoc
IMPORT P_UseTemplate
IMPORT P_V
IMPORT P_VDataSize
IMPORT P_VRulRect
IMPORT P_VScrTempl
IMPORT P_VScroll
IMPORT P_VValue
IMPORT P_VViewSize
IMPORT P_VertGCount
IMPORT P_VertGuides
IMPORT P_VisGuides
IMPORT P_VisPalette
IMPORT P_VisRuler
IMPORT P_WinStuffSize
IMPORT P_WindColors
IMPORT P_paste
IMPORT X_ScrapRefCon
IMPORT X_ScrapType
IMPORT D_SetRefCon
IMPORT T_ClipThread
IMPORT T_Deactivate
IMPORT T_DotObj
IMPORT T_Editing
IMPORT T_Idle
IMPORT T_Key
IMPORT T_ScaleLocInfo
IMPORT T_ScalePort
IMPORT D_TodaysDate
IMPORT D_UnloadSegment
IMPORT D_UnLock
;-----------------------------------------------
;
; Forward addresses and entries
;
;-----------------------------------------------
ENTRY P_ActivateDoc
ENTRY P_DeActivateDoc
ENTRY P_DisposeDoc
ENTRY P_GrewDoc
ENTRY P_IdleProc
ENTRY P_Ignore
ENTRY P_InitDoc
ENTRY P_KeyDown
ENTRY P_LoadMod
ENTRY P_MakeRoom
ENTRY P_MakeWin
ENTRY P_Message
ENTRY P_NewDoc
ENTRY P_PrintChanged
ENTRY P_RelockMem
ENTRY P_ShowDoc
ENTRY P_UnloadMod
ENTRY P_UnlockMem
P_Procs PROC EXPORT
;Using P_AttrData
DC.L P_AttrTable ;attribute table for module
jml P_OpenDoc ;D_Open a file
jml P_NewDoc ;D_Create a D_New file
jml P_DisposeDoc ;dispose of a window
jml P_SaveDoc ;D_Save a document
jml P_Undo ;undo in active window
jml P_Cut ;cut in active window
jml P_Copy ;do a copy in a window active or not
jml P_paste ;Do a Paste in a window active or not
jml P_Clear ;Do a clear in the active window
jml P_ActivateDoc ;make a window active
jml P_DeActivateDoc
jml P_UpDateDoc ;D_Update a window
jml P_MouseDown ;mouse down in active window
jml P_KeyDown ;key down in active window
jml P_Ignore ;mouse down in active window bar
jml P_GrewDoc ;document changed size (zoomed)
jml P_IdleProc ;called in D_MainLoop
jml P_MakeRoom ;release unneeded memory
jml P_PrintChanged ;print record changed
jml P_PrintDoc
jml P_MouseUp
jml P_Message
jml P_LoadMod
jml P_UnloadMod
jml P_UnlockMem
jml P_RelockMem
jml P_MakeWin
P_Vers DC.W 101 ; official module version number.
ENDP
P_Ignore PROC EXPORT
begin
return
ENDP
;---------------------------------------------------------------------------
;
; P_MakeWin
;
P_MakeWin PROC EXPORT
;Using P_Data
;Using P_AttrData
input plane:l,RectPtr:l
output window:l
error err
begin +b
MoveLong #-1,Window
movelong Plane,P_Plane
tool _NewWindow,in=(#P_SWinParams:l),out=(window:l),err=(err)
jcs whoops
tool _SetOriginMask,in=(#$fffc:w,window:l)
tool _GetFrameColor,in=(#P_WindColors:l,window:l)
moveword #$20f,P_TBarColor
moveword #$f00,P_TitleColor
tool _SetFrameColor,in=(#P_WindColors:l,window:l)
tool _SetPort,in=(window:l)
tool _SetFontFlags,in=(#4:w)
tool _SetTextMode,in=(#modeForeCopy:w)
whoops return
ENDP
;---------------------------------------------------------------------------
; NewDoc - opens a blank document on the desktop
; input - ModuleNum use as reference for D_MakeNewWin
; Return memory error. If successful call D_MakeNewWin so the driver
; can init the window.
P_NewDoc PROC EXPORT
;Using P_data
;Using P_iconData
;Using P_RulerData
;Using T_TextEqu
INPUT MWinPtr:l
ERROR err
LOCAL tmp:l,ptr:l,OldWindow:l,refcon:l
BEGIN +B
movelong P_CurrentWin,OldWindow
call P_CheckHand,in=(#$8000:l),err=(err)
jcs Whoops
call P_SaveWindowStuff,in=(P_CurrentWin:l)
call P_InitDoc,in=(MWinPtr:l),out=(RefCon:l),err=(err)
bcs ToWhoops
moveword #ArrowCursor,P_Cursor
moverect P_ArrowRect,P_Palette
moveword #Black,P_DefColor
call D_NeedHand,in=(#P_PInfoSize*3:l),out=(tmp:l),err=(err)
bcc NoErrs
tool _DisposeHandle,in=(RefCon:l)
ToWhoops brl Whoops
NoErrs
movelong [tmp],ptr
ldy #P_PInfoSize*3-3
lda #0
Zilchloop sta [ptr],y
dey
bpl Zilchloop
movelong tmp,P_PageArray
; Zeroes
stz P_FillMode
stz P_PageMode
stz P_LockGuides
stz P_MagGuides
stz P_ToolType
stz P_VertGCount
stz P_HorizGCount
stzl P_ObjList
stzl P_LastObj
stzl P_OrgOffset
stzl P_PIconRect
stzl P_PIconRect+4
stz P_ImportType
stz P_DblPage
stz P_UseTemplate
stzl P_VertGuides
stzl P_HorizGuides
; Ones
lda #1
sta P_LineSize
sta P_PageCount
sta P_VisRuler
sta P_VisPalette
sta P_VisGuides
sta P_PageStart
moveword a,[ptr]:#P_PInfoSize*3-2
moveword #-1,P_FirstPOff
moveword #3,P_DefFont ; Geneva
moveword #0,P_DefStyle ; Plain
moveword #12,P_DefSize ; 12 Point
moveword #T_Left,P_DefJust
moveword #T_Single,P_DefSpacing
call P_SavePage,in=(#0:w)
call P_SavePage,in=(#1:w)
moveword #1,P_UseTemplate
call P_SavePage,in=(#2:w)
moveword #2,P_Page
call P_ShowDoc,in=(MWinPtr:l),err=(err)
Whoops
call P_LoadWindowStuff,in=(OldWindow:l)
RETURN
ENDP
*****************************************************************************************************
; P_InitDoc ( WindowPtr:long ): RefCon:long
;
; This routine will create a window refcon for the given window and call the driver to put our
; our refcon in the window structure. Memory errors can be returned. The allocated refcon is
; returned to the caller. The guide counts for the document are also cleared. Current window will be
; set to the given window.
P_InitDoc PROC EXPORT
;Using P_data
input window:l
output refcon:l
error err
begin
; Clear guide counts for the document.
stz P_AllHGCount
stz P_AllVGCount
; Get refcon handle if successful then call driver to put it in the window structure.
movelong window,P_CurrentWin
call D_NeedHand,in=(#P_WinStuffSize:l),out=(refcon:l),err=(err)
bcs whoops
call D_SetRefCon,in=(refcon:l,window:l)
whoops return
ENDP
;---------------------------------------------------------------------------
;
; P_ShowDoc
;
P_ShowDoc PROC EXPORT
;Using P_Data
;Using P_RulerData
INPUT window:l
ERROR err
LOCAL tmp:l,ptr:l
BEGIN
call D_NeedHand,in=(#4:l),out=(tmp:l),err=(err)
jcs whoops
movelong [tmp],ptr
movelong #0,[ptr]
movelong tmp,P_AllHGuides
call D_NeedHand,in=(#4:l),out=(tmp:l),err=(err)
jcs whoops
movelong [tmp],ptr
movelong #0,[ptr]
movelong tmp,P_AllVGuides
moveword #P_HRulTop,P_HRulRect
moveword #P_HRulLeft,P_HRulRect+2
lda #P_HRulTop+P_HRulWdth
moveword #P_HRulTop+P_HRulWdth,P_HRulRect+4
moveword #P_VRulTop,P_VRulRect
moveword #P_VRulLeft,P_VRulRect+2
moveword #P_VRulLeft+P_VRulWdth,P_VRulRect+6
stz P_TrackOn
stzl P_HScroll
stzl P_VScroll
stzl P_ImportHdl
stz P_Placing
call D_TodaysDate,out=(P_CurDate:l)
call P_PrintChanged,in=(window:l)
tool _SetPort,in=(window:l)
whoops return
ENDP
;----------------------------------------------------------------
;
; P_ActivateDoc (Window:l)
;
; The Frame assures that the menu is as you left it except for
; checks, any menu item style change etc. Items are enabled,
; disabled, inserted and deleted just as you last saw this document.
P_ActivateDoc PROC EXPORT
;Using P_Data
;Using P_RulerData
;Using P_AttrData
input window:l
local ctl:l,tmprect:r,ptr:l
begin +b
cmpl Window,P_CurrentWin
jeq Exit
call P_LoadWindowStuff,in=(window:l)
jsl P_Entry
tool _GetPortRect,in=(!tmprect:l)
tool _ClipRect,in=(!tmprect:l)
movelong P_HScroll,ctl
movelong [ctl],ptr
moveword [ptr]:#oCtlHilite,a
and #$FF
bne @hilite ; Draw the controls the first time through.
tool _DrawOneCtl,in=(P_HScroll:l) ; since the controls will be hilighted correctly
tool _DrawOneCtl,in=(P_VScroll:l) ; on the very first activate.
bra @valid
@hilite tool _HiliteControl,in=(#noHilite:w,P_HScroll:l)
tool _HiliteControl,in=(#noHilite:w,P_VScroll:l)
; <20> Do this so we don't redraw the controls in a subsequent update.
@valid movelong [ctl],ptr
moverect [ptr]:#oCtlRect,tmprect
tool _ValidRect,in=(!tmprect:l)
movelong P_VScroll,ctl
movelong [ctl],ptr
moverect [ptr]:#oCtlRect,tmprect
tool _ValidRect,in=(!tmprect:l)
tool _ClipRect,in=(#P_ContentRect:l)
call P_FixSpecMenu
call P_FixMenus
Exit return
ENDP
;------------------------------------------------------------------------------
;
; P_DeactivateDoc (Window:l)
;
P_DeactivateDoc PROC EXPORT
;Using P_Data
;Using T_Data
input window:l
local ctl:l,tmprect:r,ptr:l
begin +b
cmpl window,P_CurrentWin
bne ToExit
cpzl Window
bne Cont
ToExit brl Exit
Cont
jsl P_Entry
call T_Deactivate,in=(#1:w,#0:w)
jsl P_KillImport
jsl P_KillUndo
tool _ClipRect,in=(#P_PortRect:l)
lda P_TrackOn
beq Off
call P_DoScritch,in=(P_OldIdlePt:l) ; Erase scritches
Off
tool _HiliteControl,in=(#inactiveHilite:w,P_HScroll:l)
tool _HiliteControl,in=(#inactiveHilite:w,P_VScroll:l)
tool _ClipRect,in=(#P_ContentRect:l)
stz P_TrackOn
call P_SavePage,in=(P_Page:w)
call P_SaveWindowStuff,in=(window:l)
stzl P_CurrentWin
Exit RETURN
ENDP
;------------------------------------------------------------------------------
;
; P_DisposeDoc (Window:l)
;
; Don't call D_CloseWindow, driver will do it for you.
P_DisposeDoc PROC EXPORT
;Using P_Data
INPUT Window:l
LOCAL NotActive:w,ActiveWin:l,CurPage:w,StopPage:w
BEGIN +b
stz NotActive
cmpl Window,P_CurrentWin
beq Okay
inc NotActive
movelong P_CurrentWin,ActiveWin
call P_LoadWindowStuff,in=(Window:l)
Okay
call P_DeactivateDoc,in=(Window:l)
tool _DisposeControl,in=(P_HScroll:l)
tool _DisposeControl,in=(P_VScroll:l)
addword P_PageCount,#1,CurPage
PageLoop call P_KillPage,in=(CurPage:w,#1:w)
dec CurPage
bpl PageLoop
tool _DisposeHandle,in=(P_PageArray:l)
call D_GetRefCon,in=(window:l),out=(:l)
_DisposeHandle
tool _DisposeHandle,in=(P_AllVGuides:l)
tool _DisposeHandle,in=(P_AllHGuides:l)
lda NotActive
beq Exit
call P_LoadWindowStuff,in=(ActiveWin:l)
Exit
RETURN
ENDP
;------------------------------------------------------------------------------
;
; P_KeyDown (TaskRec:l)
;
P_KeyDown PROC EXPORT
;Using P_Data
;Using P_ObjData
;Using T_Data
input TaskRec:l
local objhdl:l,objptr:l
begin +b
jsl P_Entry
lda T_Editing
beq DoneText
call T_Key,in=(TaskRec:l)
bra Exit
DoneText moveword [TaskRec]:#oMessage,a
and #$FF
cmp #$7F
bne Exit
call P_BuildUndo,in=(#P_ClearObjUndo:w)
call P_DelObjects,in=(#0:w)
jsl P_FixMenus
Exit
RETURN
ENDP
;-----------------------------------------------------------------------------
; The Window was grown. You should use this make any scroll bar
; adjustments, updates etc. (Should ;*only** be called if active window)
; input - window, the one that changed size.
;
; Notes: ;always* (erase/D_New)'s the horizontal scrollbar.
; only (erase/D_New)'s the vert scrollbar if the window size has changed
; otherwise
;
; Caveat: this is a hideous piece of code. The kitchen sink was taken out,
; but everything else is still there. It is called by anybody
; a general recalc of rulers/scrollbars, etc.
;
P_GrewDoc PROC EXPORT
;Using P_Data
;Using P_ICONData
;Using P_RulerData
;Using T_Data
input Window:l
local tmprect:r,changed:w,tmp:l,vert:w,horz:w
begin +b
jsl P_Entry
tool _GetPortRect,in=(#P_PortRect:l)
tool _ClipRect,in=(#P_PortRect:l)
; Use old vert. scrollbar, iff the window size hasn't changed.
subword P_PortRect+6,#P_ScrollWidth,tmprect+6
subword P_PortRect+4,#P_ScrollHeight-1,tmprect+4
cmpl tmprect+4,P_ContentRect+4
bne Cont
stz changed
bra DoHoriz
; Erase V ScrollBar
Cont moveword #1,changed
IsNil P_VScroll
jeq NewVert
movelong P_VScroll,tmprect
movelong [tmprect],tmp
moverect [tmp]:#oCtlRect,tmprect
moveword P_GrowRect+4,tmprect+4
tool _EraseRect,in=(!tmprect:l)
tool _InvalRect,in=(!tmprect:l)
DoHoriz
; Erase H scrollbar
IsNil P_HScroll
beq NewVert
movelong P_HScroll,tmp
pushlong [tmp]
addlong 1:s,#oCtlRect,1:s
pushlong 1:s
_EraseRect
_InvalRect
; Old page icons
tool _EraseRect,in=(#P_PIconRect:l)
tool _InvalRect,in=(#P_PIconRect:l)
NewVert
DoInit
moveword #P_VScrollT,P_VScrTempl
subword P_PortRect+6,#P_ScrollWidth,P_VScrTempl+2
addword P_PortRect+6,#2,P_VScrTempl+6
moveword P_PortRect+4,P_HScrTempl+4
inc P_HScrTempl+4
subword P_HScrTempl+4,#P_ScrollHeight,P_HScrTempl
moveword P_HScrTempl,P_VScrTempl+4
inc P_VScrTempl+4
addword P_VScrTempl+2,#2,P_HScrTempl+6
; 1 templ page + 2 spaces.
moveword #P_PageWidth+(2*P_SpaceWidth)-1,P_HScrTempl+2
lda P_DblPage
beq DidTempl
; 2nd templ page
addword #P_PageWidth-2,P_HScrTempl+2,P_HScrTempl+2
DidTempl cmpw P_PageCount,#6
blt LessThan6
; 2 controls
addword #2*(P_ControlWidth-2),P_HScrTempl+2,P_HScrTempl+2
lda #5
Lessthan6 rcall D_FastMult,in=(a:x,#P_PageWidth-2:y)
; 1-5 pages.
ina ; add in 2 Q_Pixels for righthand edge.
ina
addword a,P_HScrTempl+2,P_HScrTempl+2
tool _InvalRect,in=(#P_HScrTempl:l)
tool _InvalRect,in=(#P_VScrTempl:l)
subword P_PaperRect+4,P_PaperRect,P_VDataSize
subword P_PaperRect+6,P_PaperRect+2,a
and #$FFFE
sta P_HDataSize
moveword P_H,P_HValue
moveword P_V,P_VValue
lda P_PageMode
beq NormMode
moveword P_VDataSize,P_VViewSize ; Make scrollbars empty
moveword P_HDataSize,P_HViewSize ;
bra DoRulers
NormMode lda P_VisRuler
bne VisRulers
moveword P_HScrTempl,P_VViewSize
subword P_VScrTempl+2,#P_TabWLeft,a
bra FixView
VisRulers subword P_HScrTempl,#P_TabWBottom,P_VViewSize
subword P_VScrTempl+2,#P_TabWRight,a
FixView ldy P_VisPalette
bne DidPal
addword a,#P_TabWLeft,a
DidPal and #$FFFE
sta P_HViewSize
DoRulers IsNil P_HScroll
jeq NilHScroll
; first, check controls for out-of-boundedness.
tool _GetCtlValue,in=(P_HScroll:l),out=(a:w)
addword a,P_HViewSize,a
cmp P_HDataSize
blt ResizeVert
subword P_HDataSize,P_HViewSize,P_HValue
bpl @sta
lda #0 ; origin shouldn't ever go negative
@sta sta P_H
call T_ClipThread,in=(T_DotObj:l)
lda P_PageMode
bne ResizeVert
tool _InvalRect,in=(#P_HRulRect:l)
tool _ClipRect,in=(#P_ContentRect:l)
tool _EraseRect,in=(#P_ContentRect:l)
call P_DrawContent,in=(#P_ContentRect:l,#0:w)
ResizeVert tool _GetCtlValue,in=(P_VScroll:l),out=(a:w)
addword a,P_VViewSize,a
cmp P_VDataSize
blt DidResize
subword P_VDataSize,P_VViewSize,P_VValue
bpl @sta
lda #0 ; origin shouldn't ever go negative
@sta sta P_V
call T_ClipThread,in=(T_DotObj:l)
lda P_PageMode
bne DidResize
tool _ClipRect,in=(#P_ContentRect:l)
tool _EraseRect,in=(#P_ContentRect:l)
tool _InvalRect,in=(#P_VRulRect:l)
call P_DrawContent,in=(#P_ContentRect:l,#0:w)
DidResize tool _ClipRect,in=(#P_PortRect:l)
tool _DisposeControl,in=(P_HScroll:l)
NilHScroll IsNil P_VScroll
beq NoVert
lda changed
beq NoVert
tool _DisposeControl,in=(P_VScroll:l)
NoVert
; rulers need to be resized also?
moveword P_HScrTempl,P_PIconRect
stz P_PIconRect+2
moveword P_HScrTempl+4,P_PIconRect+4
moveword P_HScrTempl+2,P_PIconRect+6
tool _EraseRect,in=(#P_PIconRect:l)
tool _InvalRect,in=(#P_PIconRect:l)
tool _ClipRect,in=(#P_PortRect:l)
call D_NewCtl,in=(#P_HScrTempl:l,P_CurrentWin:l),out=(P_HScroll:l)
lda changed
jeq exit
call D_NewCtl,in=(#P_VScrTempl:l,P_CurrentWin:l),out=(P_VScroll:l)
addword P_HScrTempl,#1,P_GrowRect
addword P_VScrTempl+2,#2,P_GrowRect+2
movelong P_PortRect+4,P_GrowRect+4
subword P_GrowRect,#1,P_ContentRect+4 ; bottom
subword P_GrowRect+2,#2,P_ContentRect+6 ; right
stz P_ContentRect+2
; P_ContentRect[2] = visP?TabWL:0 + visR?TabWR-TabWL-1:0
; P_ContentRect[0] = visR?TabWB:0
lda P_VisPalette
beq CkRuler
moveword #P_TabWLeft-1,P_ContentRect+2 ; left (palette vis)
CkRuler lda P_VisRuler
beq NoRulers
moveword #P_TabWBottom,P_ContentRect
addword P_ContentRect+2,#P_TabWRight-P_TabWLeft,P_ContentRect+2
bra contRects
NoRulers stz P_ContentRect
contRects moveword P_ContentRect+4,P_VRulRect+4
moveword P_ContentRect+6,P_HRulRect+6
moveword P_ContentRect+2,P_VRulRect+6
sta P_HRulRect+2
subword P_ContentRect+2,#P_VRulWdth,P_VRulRect+2
addword P_ContentRect,#10,P_FullPaperRect
subword P_ContentRect+4,#10,P_FullPaperRect+4
rcall D_Deref,in=(P_PrintHand:ax),out=(tmp:ax)
moveword [tmp]:#$C,vert
moveword [tmp]:#$E,horz
rcall D_UnLock,in=(P_PrintHand:ax)
subword P_FullPaperRect+4,P_FullPaperRect,tmp
tool _Multiply,in=(horz:w,tmp:w),out=(tmp:l)
in tmp:l,#0:w,vert:w
out a:w,a:w,a:w,tmp:w
xtool _LongDivide
; tmp is the width of the fullpaperrect
subword P_ContentRect+6,P_ContentRect+2,a
subword a,tmp,a
bmi TooSmall
bra JustRight
TooSmall addword P_ContentRect+2,#20,P_FullPaperRect+2
subword P_ContentRect+6,#20,P_FullPaperRect+6
subword P_FullPaperRect+6,P_FullPaperRect+2,tmp
tool _Multiply,in=(vert:w,tmp:w),out=(tmp:l)
in tmp:l,#0:w,horz:w
out a:w,a:w,a:w,tmp:w
xtool _LongDivide
subword P_ContentRect+4,P_ContentRect,a
subword a,tmp,a
lsr a
addword a,P_ContentRect,P_FullPaperRect
addword tmp,P_FullPaperRect,P_FullPaperRect+4
bra GotFull
JustRight lsr a
addword a,P_ContentRect+2,P_FullPaperRect+2
addword tmp,P_FullPaperRect+2,P_FullPaperRect+6
; PageRect : FullPageRect :: PaperRect : FullPaperRect
GotFull moverect P_PageRect,P_FullPageRect
in #P_FullPageRect:l,#P_PaperRect:l,#P_FullPaperRect:l
xtool _MapRect
tool _InvalRect,in=(#P_GrowRect:l)
lda P_PageMode
beq exit
movelong P_ContentRect,tmprect
moveword #200,tmprect+4
moveword #640,tmprect+6
tool _EraseRect,in=(!tmprect:l)
stz tmprect
moveword #P_VRulLeft,tmprect+2
tool _InvalRect,in=(!tmprect:l)
exit tool _ClipRect,in=(#P_ContentRect:l)
call T_ClipThread,in=(T_DotObj:l)
call P_ForceUpdate,in=(Window:l)
return
ENDP
;-------------------------------------------------------------------------------
;
; P_IdleProc (InMyWin:w,RectPtr:l,PtPtr:l,Time:l)
;
; input - InMyWin boolean, is the D_Cursor over my active window
; - RectPtr pointer to your the Port Q_Rect of the active window
; - PtPtr pointer to the current (local) Q_Point that the D_Cursor is over
; - Time The current TickCount
P_IdleProc PROC EXPORT
;Using P_RulerData
;Using P_Data
;Using T_Data
input InMyWin:w,RectPtr:l,PtPtr:l,Time:l
begin +b
; Don't check InMyWin, because we want to erase scritch marks
; when the D_Cursor goes outside the window.
IsNil P_CurrentWin
beq Exit ; He hasn't activated the window yet.
jsl P_Entry
lda T_Editing
beq DoTrack
call T_Idle,in=(Time:l)
DoTrack call P_TrackCursor,in=(PtPtr:l)
Exit RETURN
ENDP
;------------------------------------------------------------------------------
;
; P_PrintChanged (Window:l)
;
P_PrintChanged PROC EXPORT
;Using P_DATA
;Using P_RulerData
input window:l
local tmp:l,tmprect:l,oldwin:l
begin +b
movelong P_CurrentWin,oldwin
call P_LoadWindowStuff,in=(Window:l)
jsl P_Entry
call D_GetPrintHandle,in=(window:l),out=(P_PrintHand:l)
rcall D_Deref,in=(P_PrintHand:ax),out=(tmp:ax)
moverect [tmp]:#oPrInfo+oRPage,P_PageRect
moverect [tmp]:#oRPaper,P_PaperRect
rcall D_UnLock,in=(P_PrintHand:ax)
pushlong #P_PageRect
subword #0,P_PaperRect+2,s
subword #0,P_PaperRect,s
pushlong #P_PaperRect
pushlong 5:s
_OffsetRect
_OffsetRect
IsNil P_ContentRect
beq NotThere
tool _EraseRect,in=(#P_ContentRect:l)
NotThere stzl P_contentRect
stzl P_Contentrect+4
tool _GetPortRect,in=(#P_PortRect:l)
moverect P_PortRect,tmprect
moveword P_VRulRect+2,tmprect+2
tool _InvalRect,in=(!tmprect:l)
call P_GrewDoc,in=(window:l)
call P_LoadWindowStuff,in=(OldWin:l)
Exit RETURN
ENDP
;---------------------------------------------------------------------------
;
; P_Message (Type:w,Message:l) : Answer:l
;
P_Message PROC EXPORT
input Type:w,Message:l
output answer:l
error Err
begin
stz Err
return
ENDP
;---------------------------------------------------------------------------
;
; P_LoadMod ()
;
P_LoadMod PROC EXPORT
;Using T_Data
;Using D_GlobalData
error Err
local Hdl:l
begin +b
call X_GetPLSCRAPAddr,out=(a:l),err=(Err)
jcs Exit
call D_LoadSegment,in=(#segPL2:w,#4:w),out=(a:l),err=(Err)
jcs Exit
call D_LoadSegment,in=(#segWPIO:w,#4:w),out=(ax:l),err=err
bcc @loadAscii
@unloadPL2 call D_UnloadSegment,in=(#segPL2:w,#4:w)
brl exit
@loadAscii call D_LoadSegment,in=(#segTOStatText:w,#4:w),out=(ax:l),err=err
bcc gotsegs
call D_UnloadSegment,in=(#segWPIO:w,#4:w)
bra @unloadPL2
gotsegs
; Allocate the port used for scaling text
call D_NeedHandle,in=(#$AA:l,#$4010:w),out=(Hdl:l),err=(Err)
bcs Exit
movelong [Hdl],T_ScalePort
tool _OpenPort,in=(T_ScalePort:l),err=(Err)
bcs DoErr
movelong >D_BitMapPtr,T_ScaleLocInfo+2
tool _SetPortLoc,in=(#T_ScaleLocInfo:l)
tool _SetTextMode,in=(#ModeForeCopy:w)
tool _SetFontFlags,in=(#4:w)
Exit return
DoErr
tool _DisposeHandle,in=(Hdl:l)
bra Exit
ENDP
;---------------------------------------------------------------------------
;
; P_UnloadMod ()
;
P_UnloadMod PROC EXPORT
;Using T_Data
;Using X_ClipData
;Using P_ScrapData
begin +b
cpzl T_ScalePort
beq DoUnload
tool _ClosePort,in=(T_ScalePort:l)
call D_DisposePtr,in=(T_ScalePort:l)
cmpw >X_ScrapType,#PLPICT
bne DoUnload
in >X_ScrapRefCon:l
out >P_QDPict:l
xerr >P_ConvErr
xcall P_MakePict
DoUnload
call D_UnloadSegment,in=(#segPL2:w,#4:w)
call D_UnloadSegment,in=(#segWPIO:w,#4:w)
call D_UnloadSegment,in=(#segTOStatText:w,#4:w)
Exit return
ENDP
;---------------------------------------------------------------------------
; This will be called when memory is needed. You should make purgeable
; any handle not needed.
; This call WILL change as this project progresses.
P_MakeRoom PROC EXPORT
input Window:l
begin
return
ENDP
;---------------------------------------------------------------------------
;
; P_UnlockMem ()
;
P_UnlockMem PROC EXPORT
input Window:l
begin
return
ENDP
;---------------------------------------------------------------------------
;
; P_RelockMem ()
;
P_RelockMem PROC EXPORT
input Window:l
begin
return
ENDP
END