load 'macros.dump' include 'driver.equ' include 'pl.equ' ;----------------------------------------------- ; ; Imported addresses ; ;----------------------------------------------- IMPORT D_Deref IMPORT D_DrawIcon IMPORT P_ContentRect IMPORT P_CtlBoxIcon IMPORT P_CurrentWin IMPORT P_DblPage IMPORT P_DoScritch IMPORT P_DrawGuides IMPORT P_DrawObjList IMPORT P_DrawRulers IMPORT P_DrawTemplate IMPORT P_DrawTools IMPORT P_Entry IMPORT P_FirstPOff IMPORT P_FullPageRect IMPORT P_FullPaperRect IMPORT P_GrowIcon IMPORT P_GrowRect IMPORT P_H IMPORT P_HScroll IMPORT P_IconPalette IMPORT P_LIcon IMPORT P_LPageIcon IMPORT P_L_ArrHollowIcon IMPORT P_LastObj IMPORT P_LoadWindowStuff IMPORT P_NewClip IMPORT P_NumberTab IMPORT P_OldClip IMPORT P_OldIdlePt IMPORT P_PIconRect IMPORT P_Page IMPORT P_PageCount IMPORT P_PageMode IMPORT P_PageRect IMPORT P_PageStart IMPORT P_PaperRect IMPORT P_PortRect IMPORT P_RIcon IMPORT P_RPageIcon IMPORT P_R_ArrHollowIcon IMPORT P_TIcon IMPORT P_TrackOn IMPORT P_UseTemplate IMPORT P_V IMPORT P_VScroll IMPORT P_VisGuides IMPORT P_VisPalette IMPORT P_VisRuler IMPORT P__LPIcon IMPORT P__RPIcon IMPORT D_RectSect IMPORT D_Set4Pat IMPORT T_BlinkCaret IMPORT T_CaretDrawn IMPORT T_Editing IMPORT T_InvSelect IMPORT T_TextSelect IMPORT T_ThreadRgn IMPORT D_UnLock ;----------------------------------------------- ; ; Forward addresses and entries ; ;----------------------------------------------- ENTRY P_DrawAPage ENTRY P_DrawContent ENTRY P_PageIcons ENTRY P_UpdateDoc ; pupdate.s ;------------------------------------------------------------------------------- ; ; P_ForceUpdate (WindowPtr:l) ; ; Forces an D_Update of the current window. P_ForceUpdate PROC EXPORT INPUT WindowPtr:l BEGIN tool _BeginUpdate,in=(WindowPtr:l) call P_UpdateDoc,in=(WindowPtr:l) tool _EndUpdate,in=(WindowPtr:l) RETURN ENDP ;------------------------------------------------------------------------------ ; ; P_UpdateDoc (Window:l) ; ; Do not call BeginUpdate, EndUpdate or set your own origin. ; P_UpdateDoc PROC EXPORT ;Using P_RulerData ;Using P_Data ;Using P_IconDATA ;Using P_ObjData ;Using T_Data input window:l local rectptr:l,rgn:l,OldWind:l,OldEdit:w,NotActive:w local tmp:l,ObjHdl:l,ObjPtr:l,tmprect:r begin +b stz NotActive cmpl Window,P_CurrentWin beq DoUpdate inc NotActive movelong P_CurrentWin,OldWind moveword T_Editing,OldEdit stz T_Editing call P_LoadWindowStuff,in=(window:l) DoUpdate tool _GetVisHandle,out=(rgn:l) rcall D_Deref,in=(rgn:ax),out=(tmp:ax) addlong tmp,#2,rectptr tool _EraseRect,in=(RectPtr:l) lda P_VisPalette beq NoPalette call D_RectSect,in=(rectptr:l,#P_IconPalette:l),out=(a:w) beq NoPalette moverect P_IconPalette,tmprect moveword P_ContentRect+4,tmprect+4 tool _ClipRect,in=(!tmprect:l) call P_DrawTools NoPalette DoRulers lda P_VisRuler beq DoneRulers call P_DrawRulers,in=(rgn:l) DoneRulers tool _ClipRect,in=(#P_PortRect:l) ; Redraw scritches. lda P_TrackOn beq CkGrow call P_DoScritch,in=(P_OldIdlePt:l) CkGrow call D_RectSect,in=(rectptr:l,#P_GrowRect:l),out=(a:w) beq CkScroll pushlong #P_GrowIcon subword P_GrowRect+2,#1,s pushword P_GrowRect pushword #modeCopy jsl D_DrawIcon CkScroll movelong P_HScroll,tmp spaceword pushlong [tmp]:#0 addlong 1:s,#8,1:s ; get address of Q_Rect call D_RectSect,in=(rectptr:l) pla beq CkVert tool _DrawOneCtl,in=(P_HScroll:l) CkVert movelong P_VScroll,tmp spaceword pushlong [tmp]:#0 addlong 1:s,#8,1:s ; get address of Q_Rect call D_RectSect,in=(rectptr:l) pla beq CkIcons tool _DrawOneCtl,in=(P_VScroll:l) CkIcons call D_RectSect,in=(rectptr:l,#P_PIconRect:l),out=(a:w) beq CkContent call P_PageIcons CkContent call D_RectSect,in=(rectptr:l,#P_ContentRect:l),out=(a:w) beq Done tool _ClipRect,in=(#P_ContentRect:l) call P_DrawContent,in=(rectptr:l,#0:w) Done rcall D_UnLock,in=(rgn:ax) lda NotActive beq Exit call P_LoadWindowStuff,in=(OldWind:l) moveword OldEdit,T_Editing Exit RETURN ENDP ;--------------------------------------------------------------------------- ; ; P_PageIcons ; ; ; 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 ; ; ; variables: xpos = current icon x coordinate ; ypos = ' ' y " ; xnum = current number icon x coordinate ; ynum = ' ' ' y ' P_PageIcons PROC EXPORT ;Using P_Data ;Using P_IconData local xpos:w,ypos:w local count:w,pagenum:w begin moveword P_ContentRect+4,ypos moveword #-1,xpos ; Draw the template page(s) lda P_DblPage beq DoRPage call P_DrawAPage,in=(xpos:w,ypos:w,P_FirstPOff:w,#1:w) addword #P_PageWidth-2,xpos,xpos DoRPage addword P_FirstPOff,#1,a call P_DrawAPage,in=(xpos:w,ypos:w,a:w,#1:w) addword xpos,#P_PageWidth,a addword a,#P_SpaceWidth,xpos DoPages ; Draw the user page(s) ; Draw the left control if necess. cmpw P_PageCount,#P_MaxVisPages+1 blt DrawVis call D_DrawIcon,in=(#P_CtlBoxIcon:l,xpos:w,ypos:w,#notBIC:w) addword xpos,#4,xpos inc ypos call D_DrawIcon,in=(#P_L_ArrHollowIcon:l,xpos:w,ypos:w,#modeCOPY:w) dec ypos addword xpos,#P_ControlWidth-6,xpos DrawVis ; Draw the visible pages cmpw P_PageCount,#6 blt GotCount lda #5 GotCount sta count ; this is the # of icons moveword P_PageStart,pagenum loop call P_DrawAPage,in=(xpos:w,ypos:w,pagenum:w,#1:w) addword xpos,#P_PageWidth-2,xpos inc pagenum dec count bne loop DrawRCtl ; Draw the right control if necess. cmpw P_PageCount,#P_MaxVisPages+1 blt exit call D_DrawIcon,in=(#P_CtlBoxIcon:l,xpos:w,ypos:w,#notBIC:w) addword xpos,#4,xpos inc ypos call D_DrawIcon,in=(#P_R_ArrHollowIcon:l,xpos:w,ypos:w,#modeCOPY:w) exit return ENDP ;--------------------------------------------------------------------------- ; ; P_DrawAPage ; need to be able to draw page '0'.. set templates to p-2,-1. ; P_DrawAPage PROC EXPORT ;Using P_Data ;Using P_IconData input xpos:w,ypos:w,pagenum:w,showpage:w local mode:w,icon:l,ptr:l,tmppage:w,tmprect:l begin lda showpage bne GoAhead ; erase the old page moveword ypos,tmprect addword xpos,#2,tmprect+2 addword xpos,#P_PageWidth,tmprect+6 addword ypos,#11,tmprect+4 tool _EraseRect,in=(!tmprect:l) GoAhead addword P_Page,P_FirstPOff,a cmp pagenum beq InvertMode moveword #modeCOPY,mode lda P_DblPage beq DoRight subword pagenum,P_FirstPOff,a ; actual page # cmp #2 bge One bit #1 bne DoRight bra DoLeft One lda pagenum bit #1 bne DoRight DoLeft movelong #P_LPageIcon,icon bra DoCall DoRight movelong #P_RPageIcon,icon bra DoCall InvertMode moveword #notCOPY,mode lda P_DblPage beq Do_Right subword pagenum,P_FirstPOff,a cmp #2 bge _One bit #1 bne Do_Right bra Do_Left _One lda pagenum bit #1 bne Do_Right Do_Left movelong #P__LPIcon,icon bra DoCall Do_Right movelong #P__RPIcon,icon DoCall call D_DrawIcon,in=(icon:l,xpos:w,ypos:w,#notBIC:w) ; Do the page numbers addword #5,ypos,ypos subword pagenum,P_FirstPOff,a cmp #1 bge CheckRightPage call D_DrawIcon,in=(#P_LIcon:l,#8:w,ypos:w,mode:w) brl exit CheckRightPage cmp #2 bge TheNum lda P_DblPage beq DoTemplate call D_DrawIcon,in=(#P_RIcon:l,#P_PageWidth+7:w,ypos:w,mode:w) brl exit DoTemplate call D_DrawIcon,in=(#P_TIcon:l,#8:w,ypos:w,mode:w) brl exit ; ; xpos: + #5, #9, #14: left, Q_center, right... TheNum tool _UDivide,in=(pagenum:w,#10:w),out=(tmppage:w,x:w) txa beq NoLeading cmp #10 blt DoLeading tool _UDivide,in=(a:w,#10:w),out=(a:w,x:w) DoLeading asl a asl a addlong a,#P_NumberTab,ptr addword #5,xpos,xpos call D_DrawIcon,in=([ptr]:l,xpos:w,ypos:w,mode:w) NoLeading addword #9,xpos,xpos lda tmppage asl a asl a addlong a,#P_NumberTab,ptr call D_DrawIcon,in=([ptr]:l,xpos:w,ypos:w,mode:w) exit return ENDP ;--------------------------------------------------------------------------- ; ; P_DrawContent (RectPtr:l,Printing:w) ; P_DrawContent PROC EXPORT ;Using P_Data ;Using T_Data input rectptr:l,printing:w local tmprect:r,tmp:l begin jsl P_Entry lda T_Editing beq NotEdit lda Printing bne NotEdit tool _GetClipHandle,out=(P_OldClip:l) tool _NewRgn,out=(P_NewClip:l) tool _DiffRgn,in=(P_OldClip:l,T_ThreadRgn:l,P_NewClip:l) tool _SetClipHandle,in=(P_NewClip:l) NotEdit lda Printing jne DoContent lda P_PageMode bne DoPageMode moverect P_PageRect,tmprect ; ; offset to the content Q_Rect & offset by paper Q_Rect into content Q_Rect ; with H,V scrolling offsets subword P_ContentRect,P_V,a subword a,P_PaperRect,tmp subword P_ContentRect+2,P_H,a subword a,P_PaperRect+2,tmp+2 addword tmprect,tmp,tmprect addword tmprect+4,tmp,tmprect+4 addword tmprect+2,tmp+2,tmprect+2 addword tmprect+6,tmp+2,tmprect+6 brl DoDotted DoPageMode call D_RectSect,in=(rectptr:l,#P_FullPaperRect:l),out=(a:w) jeq DoneRects tool _SetPenSize,in=(#2:w,#1:w) tool _FrameRect,in=(#P_FullPaperRect:l) ; Shadow... addword P_FullPaperRect+2,#2,s pushword P_FullPaperRect+4 _MoveTo tool _LineTo,in=(P_FullPaperRect+6:w,P_FullPaperRect+4:w) pushword P_FullPaperRect+6 lda P_FullPaperRect inc a pha _LineTo call D_RectSect,in=(rectptr:l,#P_FullPageRect:l),out=(a:w) beq DoneRects moverect P_FullPageRect,tmprect DoDotted tool _SetPenSize,in=(#2:w,#1:w) call D_Set4Pat,in=(#LightGray:w) tool _FrameRect,in=(!tmprect:l) DoneRects _PenNormal lda P_VisGuides beq DoContent call P_DrawGuides,in=(rectptr:l) DoContent cmpw P_Page,#2 blt DidTemplate lda P_UseTemplate beq DidTemplate call P_DrawTemplate,in=(P_Page:w,rectptr:l) DidTemplate in P_LastObj:l,RectPtr:l,Printing:w xcall P_DrawObjList lda T_Editing beq Exit lda Printing bne Exit tool _SetClipHandle,in=(P_OldClip:l) tool _DisposeRgn,in=(P_NewClip:l) lda T_TextSelect bne DoInvert lda T_CaretDrawn beq Exit jsl T_BlinkCaret bra Exit DoInvert jsl T_InvSelect Exit RETURN ENDP END