mirror of
https://github.com/antoinevignau/source.git
synced 2024-09-29 22:55:21 +00:00
1 line
15 KiB
ArmAsm
Executable File
1 line
15 KiB
ArmAsm
Executable File
|
|
load 'macros.dump'
|
|
include 'driver.equ'
|
|
include 'pl.equ'
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Imported addresses
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
IMPORT D_CloseDialog
|
|
IMPORT D_DigitsOnly
|
|
IMPORT D_FastMult
|
|
IMPORT D_GetNewModalDialog
|
|
IMPORT P_AllHGCount
|
|
IMPORT P_AllHGuides
|
|
IMPORT P_AllVGCount
|
|
IMPORT P_AllVGuides
|
|
IMPORT P_ContentRect
|
|
IMPORT P_CurrentWin
|
|
IMPORT P_DPageDlog
|
|
IMPORT P_DblPage
|
|
IMPORT P_DelObjList
|
|
IMPORT P_DeleteData
|
|
IMPORT P_DrawContent
|
|
IMPORT P_DrawObjList
|
|
IMPORT P_FirstPOff
|
|
IMPORT P_FixMenus
|
|
IMPORT P_FixSpecMenu
|
|
IMPORT P_GrewDoc
|
|
IMPORT P_HorizGCount
|
|
IMPORT P_HorizGuides
|
|
IMPORT P_InsertData
|
|
IMPORT P_KillUndo
|
|
IMPORT P_LastObj
|
|
IMPORT P_ListOp
|
|
IMPORT P_Merge
|
|
IMPORT P_ObjList
|
|
IMPORT P_PIconRect
|
|
IMPORT P_PInfoSize
|
|
IMPORT P_Page
|
|
IMPORT P_PageArray
|
|
IMPORT P_PageCount
|
|
IMPORT P_PageDlog
|
|
IMPORT P_PageIcons
|
|
IMPORT P_PageInfo
|
|
IMPORT P_PageStart
|
|
IMPORT P_PortRect
|
|
IMPORT P_ToolType
|
|
IMPORT P_UseTemplate
|
|
IMPORT P_VertGCount
|
|
IMPORT P_VertGuides
|
|
IMPORT T_ClipThread
|
|
IMPORT T_DotObj
|
|
IMPORT D_UseStdColors
|
|
IMPORT D_SetFileChanged
|
|
IMPORT T_Editing
|
|
IMPORT T_Deactivate
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Forward addresses and entries
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
ENTRY P_CenterPage
|
|
ENTRY P_ChangePage
|
|
ENTRY P_FixTextObj
|
|
ENTRY P_InitPage
|
|
ENTRY P_KillPage
|
|
ENTRY P_LoadPage
|
|
ENTRY P_MergeGuides
|
|
ENTRY P_SavePage
|
|
ENTRY P_InsPgFilter
|
|
|
|
; ppage.s
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------------
|
|
;
|
|
; P_InsertPages
|
|
;
|
|
;
|
|
; OKBut 1
|
|
; CancelBut 2
|
|
; Text1 3 ; Insert
|
|
; PgCnt 4 ; 1
|
|
; Text2 5 ; page(s)
|
|
; RCtl1 6 ; at the beginning.
|
|
; RCtl2 7 ; after the current page.
|
|
; RCtl3 8 ; at the end.
|
|
;
|
|
; invariants: P_PageCount = # of user pages
|
|
; P_PageStart = 1st user page that is displayed as an icon
|
|
; P_Page = current page's index into page array
|
|
; = user page # + 1
|
|
; P_DblPage = bool. F=1 template, T=L/R template
|
|
|
|
|
|
P_InsertPages PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_AttrData
|
|
;Using P_ICONDATA
|
|
|
|
Text1I equ 3
|
|
PgCntI equ 4
|
|
Text2I equ 5
|
|
RCtl1 equ 6
|
|
RCtl2 equ 7
|
|
RCtl3 equ 8
|
|
|
|
local TheDlog:l,result:w,NewPages:w,thepage:w
|
|
local WhichCtl:w,offset:w,ptr:l,count:w,hdl:l,oldpage:w
|
|
local Len:w,pagetext:r
|
|
error err
|
|
|
|
begin +b
|
|
|
|
|
|
moveword #RCtl2,WhichCtl
|
|
moveword P_Page,oldpage
|
|
|
|
jsl D_UseStdColors
|
|
call D_GetNewModalDialog,in=(#P_PageDlog:l),out=(TheDlog:l)
|
|
cmpw P_Page,#2
|
|
bge DlogLoop
|
|
|
|
|
|
moveword #RCtl1,WhichCtl
|
|
tool _SetDItemValue,in=(#1:w,TheDlog:l,#RCtl1:w)
|
|
|
|
pushword #255
|
|
tool _GetControlDItem,in=(TheDlog:l,#RCtl2:w),out=(:l)
|
|
tool _HiliteControl,in=(:w,:l) ; [sic]
|
|
|
|
DlogLoop
|
|
tool _ModalDialog,in=(#P_InsPgFilter+$80000000:l),out=(result:w)
|
|
cmp #OK
|
|
jeq HitOK
|
|
cmp #Cancel
|
|
jeq DoCancel
|
|
cmp #RCtl1
|
|
blt DlogLoop
|
|
cmp #RCtl3+1
|
|
bge DlogLoop
|
|
|
|
sta WhichCtl
|
|
|
|
tool _SetDItemValue,in=(#1:w,TheDlog:l,WhichCtl:w)
|
|
brl DlogLoop
|
|
|
|
|
|
DoCancel
|
|
call D_CloseDialog,in=(TheDlog:l)
|
|
brl Exit
|
|
|
|
|
|
HitOK tool _GetIText,in=(TheDlog:l,#PgCntI:w,!pagetext:l)
|
|
lda pagetext
|
|
and #$00FF
|
|
sta Len
|
|
|
|
tool _Dec2Int,in=(!pagetext+1:l,Len:w,#0:w),out=(NewPages:w)
|
|
|
|
lda NewPages
|
|
beq DoCancel
|
|
|
|
call D_CloseDialog,in=(TheDlog:l)
|
|
|
|
|
|
|
|
call P_KillUndo
|
|
call P_SavePage,in=(P_Page:w)
|
|
|
|
|
|
cmpw WhichCtl,#RCtl1
|
|
bne Ck2 ; after the first page
|
|
|
|
moveword #2,thepage
|
|
bra DoneCk
|
|
|
|
Ck2 cmp #RCtl2
|
|
bne Ck3 ; after the current page
|
|
|
|
lda P_Page
|
|
ina
|
|
sta thepage
|
|
bra DoneCk
|
|
|
|
Ck3 ; ; must be Ctl3: ; after the last page
|
|
addword P_PageCount,#2,thepage
|
|
|
|
DoneCk addword P_PageCount,#2,count
|
|
rcall D_FastMult,in=(#P_PInfoSize:x,thepage:y),out=(offset:a)
|
|
in P_PageArray:l,offset:w,NewPages:w,#P_PInfoSize:w,count:w
|
|
xerr err
|
|
xcall P_InsertData
|
|
jcs whoops
|
|
|
|
|
|
moveword NewPages,count
|
|
moveword thepage,offset
|
|
|
|
ZilchLoop call P_InitPage,in=(offset:w)
|
|
|
|
inc offset
|
|
dec count
|
|
jne ZilchLoop
|
|
|
|
lda offset ; Make P_Page correspond
|
|
dec a ; to the page globals, so
|
|
sta P_Page ; P_ChangePage is happy.
|
|
|
|
addword P_PageCount,NewPages,P_PageCount
|
|
|
|
call P_FixTextObj
|
|
call P_GrewDoc,in=(P_CurrentWin:l)
|
|
call P_ChangePage,in=(thepage:w,#1:w)
|
|
tool _ValidRect,in=(#P_ContentRect:l)
|
|
call D_SetFileChanged,in=(P_CurrentWin:l)
|
|
bra exit
|
|
|
|
|
|
whoops call P_ChangePage,in=(oldpage:w,#0:w)
|
|
|
|
Exit return
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------------
|
|
;
|
|
; P_InsPgFilter (don't activate OK until there is a number we can use.
|
|
; note that we're guaranteed we won't be called if the max.
|
|
; number of pages has already been reached.)
|
|
;
|
|
|
|
P_InsPgFilter PROC EXPORT
|
|
|
|
input TheDlog:l,TheEvent:l,ItemHit:l
|
|
local Len:w,pagetext:r
|
|
output TheResult:w
|
|
begin +b
|
|
|
|
PgCntI equ 4
|
|
|
|
tool _GetIText,in=(TheDlog:l,#PgCntI:w,!pagetext:l)
|
|
lda pagetext
|
|
and #$00FF
|
|
sta Len
|
|
beq NoOK
|
|
|
|
tool _Dec2Int,in=(!pagetext+1:l,Len:w,#0:w),out=(a:w)
|
|
bcs NoOK
|
|
beq NoOK
|
|
addword a,P_PageCount,a
|
|
cmp #P_MaxPages+1
|
|
blt DoOK
|
|
|
|
|
|
NoOK pushword #255
|
|
bra DoHilite
|
|
DoOK pushword #0
|
|
|
|
DoHilite
|
|
tool _GetControlDItem,in=(TheDlog:l,#1:w),out=(:l)
|
|
tool _HiliteControl,in=(:w,:l) ; [sic]
|
|
|
|
call D_DigitsOnly,in=(TheDlog:l,TheEvent:l,ItemHit:l),out=(TheResult:w)
|
|
|
|
exit return
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------------
|
|
;
|
|
; P_DeletePage
|
|
;
|
|
; Item#'s:
|
|
;
|
|
; 1 = OK
|
|
; 2 = Cancel
|
|
; 3 = 'Delete pages'
|
|
; 4 = FromPage
|
|
; 5 = 'through'
|
|
; 6 = ToPage
|
|
;
|
|
|
|
P_DeletePage PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_AttrData
|
|
|
|
local count:w,offset:w,TheDlog:l,result:w
|
|
local first:w,last:w,oldpage:w,hdl:l,ptr:l,oldcount:w
|
|
local tmp:l
|
|
local pagetext:r
|
|
|
|
error err
|
|
|
|
begin +b
|
|
|
|
call P_KillUndo
|
|
call P_SavePage,in=(P_Page:w)
|
|
moveword P_Page,oldpage
|
|
jsl D_UseStdColors
|
|
call D_GetNewModalDialog,in=(#P_DPageDlog:l),out=(TheDlog:l)
|
|
|
|
DlogLoop
|
|
tool _ModalDialog,in=(#D_DigitsOnly+$80000000:l),out=(a:w)
|
|
cmp #Cancel
|
|
jeq QuitDlog
|
|
cmp #OK
|
|
bne DlogLoop
|
|
|
|
tool _GetIText,in=(TheDlog:l,#4:w,!pagetext:l)
|
|
lda pagetext
|
|
and #$00FF
|
|
jeq QuitDlog
|
|
|
|
tax
|
|
tool _Dec2Int,in=(!pagetext+1:l,x:w,#0:w),out=(first:w)
|
|
jcs QuitDlog
|
|
|
|
tool _GetIText,in=(TheDlog:l,#6:w,!pagetext:l)
|
|
lda pagetext
|
|
and #$00FF
|
|
bne GetLast
|
|
|
|
moveword last,first
|
|
bra GotLast
|
|
|
|
GetLast tax
|
|
tool _Dec2Int,in=(!pagetext+1:l,x:w,#0:w),out=(last:w)
|
|
jcs QuitDlog
|
|
|
|
GotLast
|
|
scmpw last,first
|
|
bge GotOrder
|
|
|
|
swap first,last
|
|
|
|
GotOrder subword first,P_FirstPOff,first
|
|
subword a,#2,tmp
|
|
scmpw tmp,P_PageCount
|
|
jge QuitDlog ; beyond page range.
|
|
lda tmp
|
|
bpl CkLast
|
|
moveword #2,first ; don't delete before first
|
|
|
|
CkLast subword last,P_FirstPOff,last
|
|
jmi QuitDlog ;
|
|
cmp #2 ;
|
|
jlt QuitDlog ; before page range.
|
|
subword a,#2,a
|
|
cmp P_PageCount
|
|
blt StartDel
|
|
|
|
addword P_PageCount,#1,last ; don't delete beyond last.
|
|
|
|
StartDel
|
|
lda P_ToolType
|
|
cmp #P_Alpha
|
|
bne SkipIt
|
|
call T_Deactivate,in=(#1:w,#1:w)
|
|
SkipIt
|
|
moveword P_PageCount,oldcount
|
|
moveword last,count
|
|
DeleteLoop cmpw count,first
|
|
blt DidDelete
|
|
Killit
|
|
call P_KillPage,in=(count:w,#0:w)
|
|
|
|
dec count
|
|
dec P_PageCount
|
|
bra DeleteLoop
|
|
|
|
DidDelete pushlong P_PageArray
|
|
tool _Multiply,in=(#P_PInfoSize:w,first:w),out=(a:w,x:w)
|
|
phx
|
|
subword last,first,a
|
|
ina
|
|
pha
|
|
pushword #P_PInfoSize
|
|
addword oldcount,#2,s
|
|
call P_DeleteData,in=(:l,:w,:w,:w,:w)
|
|
; ;.. Hdl:l,offset:w,items:w,UnitSize:w,Count:w
|
|
|
|
|
|
lda P_PageCount
|
|
jne GotOne
|
|
; make a D_New page.
|
|
|
|
moveword #1,P_PageCount
|
|
|
|
cmpw oldpage,#2
|
|
blt DoInit
|
|
moveword #2,oldpage
|
|
stz T_Editing
|
|
|
|
DoInit in P_PageArray:l,#2*P_PInfoSize:w,#1:w,#P_PInfoSize:w,#2:w
|
|
xerr err
|
|
xcall P_InsertData
|
|
call P_InitPage,in=(#2:w)
|
|
|
|
bra LoadIt
|
|
|
|
GotOne cmpw first,oldpage ; Page was before deletion range
|
|
bgt LoadIt ;
|
|
|
|
cmpw oldpage,last
|
|
ble InTheMiddle
|
|
|
|
subword oldpage,last,a ; Page was after deletion range
|
|
dec a ;
|
|
addword a,first,oldpage ;
|
|
stz T_Editing
|
|
bra Loadit
|
|
|
|
InTheMiddle
|
|
stz T_Editing
|
|
subword first,#1,oldpage ; Page was in the deletion range.
|
|
cmp #1 ;
|
|
bgt LoadIt ; Go to first page before deletion
|
|
inc oldpage ; range if possible, or just 1st page.
|
|
|
|
LoadIt
|
|
call D_CloseDialog,in=(TheDlog:l)
|
|
call D_SetFileChanged,in=(P_CurrentWin:l)
|
|
call P_FixTextObj
|
|
call P_GrewDoc,in=(P_CurrentWin:l)
|
|
call P_LoadPage,in=(oldpage:w) ; <- hacks to get the right
|
|
call P_CenterPage,in=(#2:w) ; <- stuff for change page
|
|
call P_ChangePage,in=(oldpage:w,#1:w) ; set up.
|
|
tool _ValidRect,in=(#P_ContentRect:l)
|
|
|
|
bra Exit
|
|
|
|
whoops
|
|
QuitDlog call D_CloseDialog,in=(TheDlog:l)
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------------
|
|
;
|
|
; P_InitPage (PageNo:w)
|
|
;
|
|
|
|
P_InitPage PROC EXPORT
|
|
;Using P_Data
|
|
|
|
input PageNo:w
|
|
begin
|
|
|
|
stzl P_ObjList
|
|
stzl P_LastObj
|
|
stzl P_VertGuides
|
|
stzl P_HorizGuides
|
|
stz P_VertGCount
|
|
stz P_HorizGCount
|
|
|
|
cmpw PageNo,#2
|
|
bge UseIt
|
|
stz P_UseTemplate
|
|
bra Done
|
|
|
|
UseIt moveword #1,P_UseTemplate
|
|
Done call P_SavePage,in=(PageNo:w)
|
|
|
|
return
|
|
ENDP
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; P_SavePage (Page:w)
|
|
;
|
|
|
|
P_SavePage PROC EXPORT
|
|
;Using P_Data
|
|
;Using T_Data
|
|
|
|
input Page:w
|
|
local Hdl:l,Ptr:l,Size:l
|
|
|
|
begin
|
|
|
|
movelong P_PageArray,Hdl
|
|
movelong [Hdl],Ptr
|
|
|
|
tool _Multiply,in=(Page:w,#P_PINFOSIZE:w),out=(Size:l)
|
|
|
|
pushlong #P_PageInfo
|
|
addlong Size,Ptr,s
|
|
tool _BlockMove,in=(:l,:l,#P_PINFOSIZE:l)
|
|
|
|
return
|
|
ENDP
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; P_LoadPage (NewPage:w)
|
|
;
|
|
; Sets P_Page to NewPage, loads page data into globals.
|
|
|
|
P_LoadPage PROC EXPORT
|
|
;Using P_Data
|
|
|
|
input NewPage:w
|
|
local Hdl:l,Ptr:l,Size:l
|
|
|
|
begin
|
|
|
|
movelong P_PageArray,Hdl
|
|
movelong [Hdl],Ptr
|
|
|
|
tool _Multiply,in=(NewPage:w,#P_PINFOSIZE:w),out=(Size:l)
|
|
|
|
addlong Size,Ptr,s
|
|
tool _BlockMove,in=(:l,#P_PageInfo:l,#P_PINFOSIZE:l)
|
|
|
|
moveword NewPage,P_Page
|
|
|
|
return
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; P_ChangePage (Page:w,Redraw:w)
|
|
;
|
|
; Changes the document to the given page, and changes the window to reflect
|
|
; this. Any objects on the D_New page are deselected if the arrow tool is
|
|
; not in use.
|
|
|
|
P_ChangePage PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
|
|
INPUT Page:w,Redraw:w
|
|
BEGIN
|
|
|
|
lda Redraw
|
|
beq DidCenter
|
|
call P_CenterPage,in=(page:w)
|
|
DidCenter
|
|
|
|
tool _ClipRect,in=(#P_PortRect:l)
|
|
|
|
call P_SavePage,in=(P_Page:w)
|
|
tool _EraseRect,in=(#P_ContentRect:l)
|
|
|
|
call P_LoadPage,in=(Page:w) ; Sets P_Page = page.
|
|
call P_MergeGuides
|
|
|
|
lda P_ToolType
|
|
beq IsArrow
|
|
call P_ListOp,in=(P_ObjList:l,#PL_DeselectAll:w,#0:w,#1:w,#0:l)
|
|
IsArrow
|
|
|
|
lda Redraw
|
|
beq DidDraw
|
|
tool _EraseRect,in=(#P_PIconRect:l)
|
|
call P_PageIcons
|
|
DidDraw
|
|
|
|
tool _ClipRect,in=(#P_ContentRect:l)
|
|
|
|
call T_ClipThread,in=(T_DotObj:l)
|
|
call P_DrawContent,in=(#P_ContentRect:l,#0:w)
|
|
call P_FixMenus
|
|
call P_FixSpecMenu
|
|
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; P_DrawTemplate (PageNo:w; RectPtr:l)
|
|
;
|
|
|
|
P_DrawTemplate PROC EXPORT
|
|
;Using P_Data
|
|
|
|
input PageNo:w,RectPtr:l
|
|
local PHdl:l,PPtr:l,UseRight:w
|
|
|
|
begin
|
|
|
|
; Use Right Template if not DoublePage.
|
|
; Otherwise Even Pages use Right Template (MPage = 1)
|
|
; and Odd Pages use Left Template (MPage = 0)
|
|
|
|
moveword #1,UseRight
|
|
|
|
lda P_DblPage
|
|
beq DoIt
|
|
addword PageNo,P_FirstPOff,a
|
|
bit #1
|
|
bne DoIt
|
|
stz UseRight
|
|
DoIt
|
|
|
|
movelong P_PageArray,PHdl
|
|
movelong [PHdl],PPtr
|
|
|
|
lda UseRight
|
|
beq No
|
|
addlong #P_PINFOSIZE,PPtr,PPtr
|
|
No
|
|
|
|
call P_DrawObjList,in=([PPtr]:#4:l,RectPtr:l,#1:w)
|
|
|
|
return
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; P_KillPage (PageNo:w,All:w)
|
|
;
|
|
|
|
P_KillPage PROC EXPORT
|
|
;Using P_Data
|
|
|
|
input PageNo:w,All:w
|
|
|
|
begin
|
|
|
|
call P_LoadPage,in=(PageNo:w)
|
|
call P_DelObjList,in=(P_ObjList:l,#1:w,All:w)
|
|
stzl P_ObjList
|
|
stzl P_LastObj
|
|
|
|
cpzl P_VertGuides
|
|
beq DoHoriz
|
|
tool _DisposeHandle,in=(P_VertGuides:l)
|
|
stzl P_VertGuides
|
|
|
|
DoHoriz cpzl P_HorizGuides
|
|
beq Exit
|
|
tool _DisposeHandle,in=(P_HorizGuides:l)
|
|
stzl P_HorizGuides
|
|
|
|
Exit call P_SavePage,in=(PageNo:w)
|
|
return
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------------
|
|
;
|
|
; P_MergeGuides
|
|
;
|
|
|
|
P_MergeGuides PROC EXPORT
|
|
;Using P_Data
|
|
|
|
local UseRight:l,Ptr:l,Hdl:l
|
|
local TemplV:l,TemplH:l,HCount:w,VCount:w
|
|
begin
|
|
|
|
stzl TemplV
|
|
stzl TemplH
|
|
stz HCount
|
|
stz VCount
|
|
|
|
lda P_UseTemplate
|
|
beq DidSetup
|
|
|
|
moveword #1,UseRight
|
|
|
|
lda P_DblPage
|
|
beq DoIt
|
|
addword P_Page,P_FirstPOff,a
|
|
bit #1
|
|
bne DoIt
|
|
stz UseRight
|
|
DoIt
|
|
|
|
movelong P_PageArray,Hdl
|
|
movelong [Hdl],Ptr
|
|
|
|
lda UseRight
|
|
beq No
|
|
addlong #P_PINFOSIZE,Ptr,Ptr
|
|
No
|
|
|
|
lda P_UseTemplate
|
|
beq DidSetup
|
|
|
|
movelong [Ptr]:#8,TemplV
|
|
movelong [Ptr]:#12,TemplH
|
|
|
|
moveword [Ptr]:#16,VCount
|
|
moveword [Ptr]:#18,HCount
|
|
|
|
DidSetup
|
|
|
|
in TemplV:l,P_VertGuides:l,P_AllVGuides:l
|
|
in VCount:w,P_VertGCount:w
|
|
out P_AllVGCount:w
|
|
xcall P_Merge
|
|
|
|
in TemplH:l,P_HorizGuides:l,P_AllHGuides:l
|
|
in HCount:w,P_HorizGCount:w
|
|
out P_AllHGCount:w
|
|
xcall P_Merge
|
|
|
|
return
|
|
ENDP
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------------
|
|
;
|
|
; P_CenterPage
|
|
;
|
|
; given a page # (literal, not user) calculate P_PageStart
|
|
; so as to Q_center that page icon as well as possible.
|
|
;
|
|
; only side effect is the modification of P_PageStart
|
|
|
|
P_CenterPage PROC EXPORT
|
|
;Using P_Data
|
|
|
|
input page:w
|
|
local newfirst:w,userpage:w
|
|
begin
|
|
|
|
cmpw page,#2 ; Don't Q_center master pages.
|
|
blt exit ;
|
|
|
|
cmpw P_PageCount,#6 ; No scroll arrows.
|
|
blt UseFirst ;
|
|
|
|
addword page,P_FirstPOff,userpage
|
|
subword a,P_PageStart,a
|
|
bmi DoSet
|
|
cmp #5
|
|
blt exit ; It's already visible
|
|
|
|
DoSet cmpw page,#4
|
|
blt UseFirst ; Too D_Close to the left
|
|
|
|
cmp P_PageCount ; Obscure hack.
|
|
blt GotIt
|
|
|
|
subword P_PageCount,#3,a ; Too D_Close to the right,
|
|
addword a,P_FirstPOff,P_PageStart ; so get (last page - 4)
|
|
bra exit ; to display the last 5 pp.
|
|
|
|
GotIt subword userpage,#2,P_PageStart
|
|
bra exit
|
|
UseFirst addword P_FirstPOff,#2,P_PageStart
|
|
exit return
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;-------------------------------------------------------------------------------
|
|
;
|
|
; P_FixTextObj ()
|
|
;
|
|
; This routine is called after pages have been inserted or deleted.
|
|
; It D_Update the PageNo field in Q_Text objects.
|
|
|
|
|
|
P_FixTextObj PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
|
|
local PageHdl:l,PagePtr:l,PageCount:w,CurPage:w
|
|
|
|
begin
|
|
|
|
movelong P_PageArray,PageHdl
|
|
movelong [PageHdl],PagePtr
|
|
addwl #P_PINFOSIZE*2,PagePtr ;Skip master pages
|
|
|
|
stz PageCount
|
|
moveword #2,CurPage
|
|
|
|
PLoop
|
|
|
|
call P_ListOp,in=([PagePtr]:l,#PL_FixTObj:w,#0:w,CurPage:w,#0:l)
|
|
|
|
addwl #P_PINFOSIZE,PagePtr
|
|
inc CurPage
|
|
inc PageCount
|
|
cmpw PageCount,P_PageCount
|
|
blt PLoop
|
|
|
|
return
|
|
ENDP
|
|
END
|
|
|