antoine-source/appleworksgs/PL/Src/PARRANGE.S

1 line
5.3 KiB
ArmAsm
Executable File

load 'macros.dump'
include 'driver.equ'
include 'pl.equ'
;-----------------------------------------------
;
; Imported addresses
;
;-----------------------------------------------
IMPORT D_Deref
IMPORT D_LoadSegment
IMPORT Q_ManglePict
IMPORT Q_ManglePoint
IMPORT D_MemoryError
IMPORT P_AddObjRgn
IMPORT P_BoundsRect
IMPORT P_BuildUndo
IMPORT P_DrawRgn
IMPORT P_FixRect
IMPORT P_FixSpecRect
IMPORT P_InsertObj
IMPORT P_LastObj
IMPORT P_ObjList
IMPORT P_PrintHand
IMPORT P_RemoveObj
IMPORT T_ReThread
IMPORT D_UnloadSegment
;-----------------------------------------------
;
; Forward addresses and entries
;
;-----------------------------------------------
ENTRY P_DoRotate
ENTRY P_RotateRect
;-------------------------------------------------------------------------
;
; P_BringFront ()
;
P_BringFront PROC EXPORT
;Using P_Data
;Using P_ObjData
local ObjHdl:l,PlaceHdl:l,ObjPtr:l,NextObj:l,UpdateRgn:l
begin +b
call P_BuildUndo,in=(#P_NoUndo:w)
tool _NewRgn,out=(UpdateRgn:l)
movelong P_ObjList,ObjHdl
stzl PlaceHdl
Loop cpzl ObjHdl
beq EndLoop
movelong [ObjHdl],ObjPtr
movelong [ObjPtr],NextObj
moveword [ObjPtr]:#P_Selected,a
beq NoChange
tool _HLock,in=(ObjHdl:l)
call P_AddObjRgn,in=(ObjPtr:l,UpdateRgn:l)
tool _HUnlock,in=(ObjHdl:l)
call P_RemoveObj,in=(ObjHdl:l)
call P_InsertObj,in=(ObjHdl:l,PlaceHdl:l)
movelong ObjHdl,PlaceHdl
NoChange
movelong NextObj,ObjHdl
bra Loop
EndLoop
call P_DrawRgn,in=(UpdateRgn:l)
return
ENDP
;-------------------------------------------------------------------------
;
; P_SendBack ()
P_SendBack PROC EXPORT
;Using P_Data
;Using P_ObjData
local ObjHdl:l,ObjPtr:l,NextObj:l,UpdateRgn:l,LastObj:l
begin +b
call P_BuildUndo,in=(#P_NoUndo:w)
tool _NewRgn,out=(UpdateRgn:l)
movelong P_ObjList,ObjHdl
movelong P_LastObj,LastObj
cpzl ObjHdl
beq EndLoop
Loop movelong [ObjHdl],ObjPtr
movelong [ObjPtr],NextObj
moveword [ObjPtr]:#P_Selected,a
beq NoChange
tool _HLock,in=(ObjHdl:l)
call P_AddObjRgn,in=(ObjPtr:l,UpdateRgn:l)
call P_RemoveObj,in=(ObjHdl:l)
call P_InsertObj,in=(ObjHdl:l,P_LastObj:l)
NoChange
cmpl ObjHdl,LastObj
beq EndLoop
movelong NextObj,ObjHdl
bra Loop
EndLoop
call P_DrawRgn,in=(UpdateRgn:l)
Exit return
ENDP
;---------------------------------------------------------------------------
;
; P_FlipHoriz ()
;
P_FlipHoriz PROC EXPORT
begin
call P_DoRotate,in=(#0:w)
return
ENDP
;---------------------------------------------------------------------------
;
; P_FlipVert ()
;
P_FlipVert PROC EXPORT
begin
call P_DoRotate,in=(#1:w)
return
ENDP
;---------------------------------------------------------------------------
;
; P_RotateLeft
;
P_RotateLeft PROC EXPORT
begin
call P_DoRotate,in=(#3:w)
return
ENDP
;---------------------------------------------------------------------------
;
; P_RotateRight
;
P_RotateRight PROC EXPORT
begin
call P_DoRotate,in=(#2:w)
return
ENDP
;------------------------------------------------------------------------------
;
; P_DoRotate (Verb:w)
;
P_DoRotate PROC EXPORT
;Using P_Data
;Using P_ObjData
input Verb:w
local ObjHdl:l,ObjPtr:l,UpdateRgn:l,UnionRect:r
local PrintHdl:l,PrintPtr:l,Scale:l,ObjType:w
local PictHdl1:l,PictHdl2:l
begin +b
call D_LoadSegment,in=(#segPict:w,#4:w),out=(a:l)
jcs _MemErr
call P_BuildUndo,in=(#P_NoUndo:w)
movelong P_PrintHand,PrintHdl
movelong [PrintHdl],PrintPtr
tool _FixRatio,in=([PrintPtr]:#6:w,[PrintPtr]:#4:w),out=(Scale:l)
movelong P_ObjList,ObjHdl
call P_BoundsRect,in=(P_ObjList:l,!UnionRect:l),out=(a:w)
tool _NewRgn,out=(UpdateRgn:l)
movelong P_ObjList,ObjHdl
Loop cpzl ObjHdl
jeq EndLoop
rcall D_Deref,in=(ObjHdl:ax),out=(ObjPtr:ax)
moveword [ObjPtr]:#P_Selected,a
jeq NextObj
call P_AddObjRgn,in=(ObjPtr:l,UpdateRgn:l)
moveword [ObjPtr]:#P_Type,ObjType
cmp #P_PICTURE
jne NotPict
movelong [ObjPtr]:#P_PictHandle,PictHdl1
call Q_ManglePict,in=(PictHdl1:l,Verb:w),out=(PictHdl2:l)
bcc NoErr
jsl D_MemoryError
brl NextObj
NoErr
tool _KillPicture,in=(PictHdl1:l)
movelong PictHdl2,[ObjPtr]:#P_PictHandle
addlong ObjPtr,#P_PictRect,s
pushlong !UnionRect
pushword Verb
pushword ObjType
jsl P_RotateRect
NotPict
addlong ObjPtr,#P_ObjRect,s
pushlong !UnionRect
pushword Verb
pushword ObjType
jsl P_RotateRect
call P_FixSpecRect,in=(ObjPtr:l)
cmpw ObjType,#P_ALPHA
bne NotAlpha
call T_ReThread,in=(ObjHdl:l)
NotAlpha
call P_AddObjRgn,in=(ObjPtr:l,UpdateRgn:l)
NextObj tool _HUnlock,in=(ObjHdl:l)
movelong [ObjPtr],ObjHdl
brl Loop
EndLoop
call D_UnloadSegment,in=(#segPict:w,#4:w)
call P_DrawRgn,in=(UpdateRgn:l)
Exit return
_MemErr
jsl D_MemoryError
bra Exit
ENDP
;------------------------------------------------------------------------------
;
; P_RotateRect (RectPtr:l,RectPtr2:l,Opcode:w)
;
P_RotateRect PROC EXPORT
;Using P_Data
;Using P_ObjData
input RectPtr:l,RectPtr2:l,Opcode:w,ObjType:w
begin
in [RectPtr]:l,RectPtr2:l,OpCode:w,P_PrintHand:l
out [RectPtr]:l
xcall Q_ManglePoint
in [RectPtr]:#4:l,RectPtr2:l,OpCode:w,P_PrintHand:l
out [RectPtr]:#4:l
xcall Q_ManglePoint
call P_FixRect,in=(RectPtr:l,ObjType:w,#0:w,#0:w)
return
ENDP
END