mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-23 05:30:29 +00:00
1 line
23 KiB
ArmAsm
Executable File
1 line
23 KiB
ArmAsm
Executable File
|
||
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
|
||
|