load 'macros.dump' include 'driver.equ' include 'wp.equ' include 'WP.Macros' ;----------------------------------------------- ; ; Imported addresses ; ;----------------------------------------------- IMPORT W_BotLine IMPORT W_BotPB IMPORT W_BotPar IMPORT W_CalcDocRect IMPORT W_CalcFonts IMPORT W_CalcGrowREct IMPORT W_CalcNewLines IMPORT W_CalcPages IMPORT CaretOff IMPORT W_CurDoc IMPORT W_EdMakeCaret IMPORT W_EndLine IMPORT W_EndOffset IMPORT W_EndPar IMPORT W_FindLine IMPORT W_GetBegLine IMPORT W_GetEndLine IMPORT W_GetEndPar IMPORT W_GetHPos IMPORT W_GetLastLine IMPORT W_GetLeft IMPORT W_GetLineOffset IMPORT W_GetPageSize IMPORT W_GetParRec IMPORT W_GrewDoc IMPORT W_LastP IMPORT W_LeftMargin IMPORT W_LineToTopPixel IMPORT W_MakeCaret IMPORT W_MakeLines IMPORT W_MakeVisRuler IMPORT W_ModifyRuler IMPORT W_NewRuler IMPORT W_PaperSize IMPORT W_ParRec IMPORT W_PixelToLine IMPORT W_PixelToOffset IMPORT W_PutOnScreen IMPORT W_ReadRuler IMPORT Q_Rect IMPORT W_RightMargin IMPORT W_RulBytes IMPORT W_RulerClick IMPORT W_ScrollBar IMPORT W_ScrollBarProc IMPORT W_ScrollClick IMPORT W_SetDocRect IMPORT D_SetFileChanged IMPORT W_SetFullREct IMPORT W_ShowRuler IMPORT W_StartLine IMPORT W_StartOffset IMPORT W_StartPar IMPORT D_TextSelectOff IMPORT D_TextSelectOn IMPORT W_TopLine IMPORT W_TopPB IMPORT W_TopPar IMPORT W_TopPg IMPORT W_TopPgPixel IMPORT W_UnUseRuler IMPORT W_UndoOff IMPORT W_UseRuler IMPORT W_WPFontFlag IMPORT W_WordBounds IMPORT W_GetTopSpace IMPORT W_Selected ;----------------------------------------------- ; ; Forward addresses and entries ; ;----------------------------------------------- ENTRY W_DoubleClick ENTRY W_GotPBPar ENTRY W_InvSelect ENTRY W_InvText ENTRY W_MInRuler ENTRY W_MouseInContent ENTRY W_PtToText ENTRY W_SelectOff ENTRY W_SelectOn ENTRY W_StartFirst ENTRY W_TripleClick ***************************************************************** * A mouse down occurred in the (Your) active window. * w-W_MyMouseDown(click:w,TaskRec:l,CLickPt2:l,ClickPt3:l) * input - * Click - the number of the click 1 - single click, 2 for double, 3 for triple * TaskRec - a pointer to an Event Record for you to look at. * ClickPt2 - the Q_Point(global) where the first click of this sequence was * Single click (click=1) look at the TaskRec as before, ClickPts are undefined. * Double click (click=2) look at the pt in the TaskRec(global) and see if it * is D_Close enough to ClickPt2(global) to be a double click. ClickPt3 is undefin * Triple click (click=3) check that ClickPt3 is D_Close enough to ClickPt2 * and the pt in TaskRec. * If you don't support a type of click, or it isn't D_Close enough together * just do the same thing you would do for single clicking W_MyMouseDown PROC EXPORT ;Using WPGlobals input click:w,TaskRec:l,ClickPt2:l,ClickPt3:l local Pt:r,Q_Rect:r,par:w,W_ParRec:l begin +b pushlong W_CurDoc _SetPort jsl CaretOff pha pushlong TaskRec jsl W_ScrollClick pla jne CExit lda W_ShowRuler beq NoRuler pha pushlong TaskRec ;changes Q_Point to local !!!!!! jsl W_RulerClick pla beq NoRuler jsl W_UndoOff jsl W_MInRuler brl CExit NoRuler movelong [TaskRec]:#owhere,Pt pushlong !Pt _GlobalToLocal pushlong !Q_Rect jsl W_CalcGrowREct pha pushlong !Pt pushlong !Q_Rect _PtInRect pla beq InContent pha pha ;room pushword #200 ;minimum width pushword #75 ;minimum W_Height pushlong [TaskRec]:#owhere pushlong W_CurDoc _GrowWindow pushlong W_CurDoc _SizeWindow pushlong W_CurDoc jsl W_GrewDoc bra CExit InContent pushlong !Q_Rect jsl W_CalcDocRect pha pushlong !Pt pushlong !Q_Rect _PtInRect pla jeq CExit jsl W_UndoOff lda click cmp #1 beq Click1 cmp #2 beq Click2 Click3 pushlong Pt jsl W_TripleClick brl CExit Click2 pushlong Pt jsl W_DoubleClick brl CExit Click1 pushlong TaskRec pushlong Pt jsl W_MouseInContent CExit return ENDP *************************************************************** * W_MouseInContent(Pt:l) W_MouseInContent PROC EXPORT ;Using WPGlobals input TaskRec:l,Pt:l local TempPar:w,TempLine:w,TempOffset:w,Q_Rect:r local TempPar2:w,TempLine2:w,TempOffset2:w begin jsl W_SetDocRect pushlong !Q_Rect jsl W_CalcDocRect jsl CaretOff moveword [TaskREc]:#omodifiers,a and #$200 jeq NoShift moveword W_EndPar,TempPar2 moveword W_EndLine,TempLine2 moveword W_EndOffset,TempOffset2 pha pha pha pushlong Pt jsl W_PtToText pullword TempOffset pullword TempLine pullword TempPar jsl W_SetDocRect lda W_Selected beq DoPut cmpw TempPar,W_StartPar bcc DoPut ; cmpw Templine,W_StartLine ; bcc DoPut cmpw TempOffset,W_StartOffset bcs NoPut DoPut moveword W_StartPar,TempPar2 moveword W_StartLine,TempLine2 moveword W_StartOffset,TempOffset2 NoPut pushword TempPar pushword TempLine pushword TempOffset pushword TempPar2 pushword TempLine2 pushword TempOffset2 jsl W_InvText lda W_Selected beq DoPut2 cmpw TempPar,W_StartPar bcc NoPut2 ; cmpw Templine,W_StartLine ; bcc NoPut2 cmpw TempOffset,W_StartOffset bcs DoPut2 NoPut2 moveword W_EndPar,W_StartPar moveword W_EndLine,W_StartLine moveword W_EndOffset,W_StartOffset DoPut2 moveword TempPar,W_EndPar moveword TempLine,W_EndLine moveword TempOffset,W_EndOffset brl TrackLoop NoShift jsl W_SelectOff pha pha pha pushlong Pt jsl W_PtToText tay pullword W_StartOffset sta W_EndOffset pullword W_StartLine sta W_EndLine pullword W_StartPar sta W_EndPar cpy #2 bne NoPB dec W_StartPar stz W_StartLine moveword #W_TextHeader,W_StartOffset moveword #1,W_Selected jsl W_InvSelect NoPB jsl W_SetDocRect TrackLoop moveword #1,W_Selected pha pushword #0 _StillDown pla jeq EndTrack pushlong !pt _GetMouse scmpw pt,Q_Rect bcc ScrollUp scmpw Q_Rect+4,pt bcs NoScroll jsl W_SetFullREct pha ;scroll down pushword #6 pushlong W_ScrollBar jsl W_ScrollBarProc pla brl TrackLoop ScrollUp jsl W_SetFullREct pha ;scroll up pushword #5 pushlong W_ScrollBar jsl W_ScrollBarProc pla brl TrackLoop NoScroll pha pha pha pushlong Pt jsl W_PtToText pullword TempOffset pullword TempLine pullword TempPar jsl W_SetDocRect pushword TempPar pushword TempLine pushword TempOffset pushword W_EndPar pushword W_EndLine pushword W_EndOffset jsl W_InvText moveword TempPar,W_EndPar moveword TempLine,W_EndLine moveword TempOffset,W_EndOffset brl TrackLoop EndTrack stz W_Selected No_Select cmpw W_EndPar,W_StartPar bne SelOn ; cmpw W_EndLine,W_StartLine ; bne SelOn cmpw W_EndOffset,W_StartOffset bne SelOn jsl W_SelectOff jsl W_MakeCaret bra MICExit SelOn jsl W_SelectOn MICExit jsl W_SetFullREct return ENDP **************************************************************** W_InvText PROC EXPORT ;Using wpglobals EXPORT W_GotPBPar input Par1:w,line1:w,offset1:w,tPar2:w,tline2:w,toffset2:w local Q_Rect:r,RectPtr:l,TopFlag:w,BotFlag:w,W_ParRec:l local LastDone:w,Rgn:l,Par2:w,line2:w,offset2:w local PBPar:w,TempPixel:w,OldPar2:w,OldPar1:w begin moveword tPar2,Par2 moveword tline2,line2 moveword toffset2,offset2 cmpw Par1,Par2 bcc SexSet bne DoReverse cmpw line1,line2 bcc SexSet bne DoReverse cmpw offset1,offset2 bcc SexSet jeq ITExit DoReverse moveword Par1,Par2 moveword line1,line2 moveword offset1,offset2 moveword tPar2,Par1 moveword tline2,line1 moveword toffset2,offset1 SexSet moveword par2,OldPar2 moveword par1,Oldpar1 stz TopFlag stz BotFlag _PenNormal pushword #NotXOR _SetPenMode pushlong !Q_Rect jsl W_CalcDocRect cmpw W_TopPB,#2 ;now chwck for PB exception bne NoTop lda W_TopPar dec a cmp par1 bcc NoTop sta PBPar inc TopFlag moveword W_TopPar,par1 stz line1 moveword #W_TextHeader,offset1 brl HighToPB NoTop cmpw W_BotPB,#2 bne NoBot lda W_BotPar dec a ;cmp if (W_BotPar-1)<= par2 cmp par2 bgt NoBot inc BotFlag subword W_BotPar,#2,par2 jsl W_GetLastLine sta line2 pha pushword par2 jsl W_GetEndPar pullword offset2 lda W_BotPar dec a sta PBPar brl W_GotPBPar NoBot subword Q_Rect+4,Q_Rect,a addword a,W_TopPgPixel,a cmp W_PaperSize jcc NoPOnScreen pha pha pha subword W_PaperSize,W_TopPgPixel,a addword a,Q_Rect,s jsl W_PixelToLine ply pullword Tline2 pullword PBPar cpy #2 jne NoPOnScreen dec PBPar W_GotPBPar ; cmpw PBPar,OldPar1 jcc NoPOnScreen cmpw OldPar2,PBPar jcc NoPOnScreen pha pha lda PBPar dec a pha jsl W_GetLastLine pha jsl W_LineToTopPixel pla clc adc 1,s sta TempPixel ply lda TempPixel bmi HightoPB cmp Q_Rect bcc HighToPB sta Q_Rect HighToPB cmpw PBPar,OldPar1 jcc NoPOnScreen cmpw OldPar2,PBPar jcc NoPOnScreen subword Q_Rect+4,Q_Rect,a addword a,W_TopPgPixel,a cmp W_PaperSize bcc NoRectChan lda W_TopPg jsl W_GetTopSpace sta TempPixel lda W_TopPg jsl W_GetPageSize addword a,TempPixel,a subword a,W_TopPgPixel,a bmi NoPOnScreen addword a,Q_Rect,TempPixel PutIfMin TempPixel,Q_Rect+4 NoRectChan lda PBPar dec a jsl W_GetParRec movelong ax,W_ParRec ldy #W_pRulerHand+2 lda [W_ParRec],y tax ldy #W_pRulerHand lda [W_ParRec],y jsl W_ReadRuler moveword W_LeftMargin,Q_Rect+2 moveword W_RightMargin,Q_Rect+6 pushlong !Q_Rect _PaintRect ; here we are done with PB's NoPOnScreen cmpw W_BotPar,par1 bcc W_NoDraw ;top is beloew screen bne NolC cmpw W_BotLine,line1 ;top is below screen bcc W_NoDraw NoLC cmpw par2,W_TopPar ;bottom is above screen bcc W_NoDraw bne SomeDraw cmpw line2,W_TopLine bcs SomeDraw W_NoDraw brl ITExit SomeDraw cmpw Par1,W_TopPar beq CheckLine1 bcs GotTop moveword W_TopPar,Par1 moveword W_TopLine,line1 pha pushword Par1 pushword line1 jsl W_GetBegLine pullword offset1 inc TopFlag bra GotTop CheckLine1 cmpw line1,W_TopLine bcs GotTop moveword W_TopLine,line1 inc TopFlag GotTop cmpw Par2,W_BotPar beq CheckLine2 bcc GotBot moveword W_BotPar,Par2 moveword W_BotLine,line2 pha pushword Par2 pushword line2 jsl W_GetEndLine pullword offset2 inc BotFlag bra GotBot CheckLine2 cmpw W_BotLine,line2 bcs GotBot moveword W_BotLine,line2 inc BotFlag GotBot cmpw par2,par1 jcc ITExit stz RectPtr+2 tdc clc adc #Q_Rect sta RectPtr lda par1 jsl W_GetParRec movelong ax,W_ParRec ldy #W_pRulerHand+2 lda [W_ParRec],y tax ldy #W_pRulerHand lda [W_ParRec],y jsl W_ReadRuler cmpw par1,Par2 bne NotSame cmpw line1,line2 jeq OnSameLine NotSame lda TopFlag jne NoTopPart moveword W_RightMargin,Q_Rect+6 pha pha pushword par1 pushword line1 jsl W_LineToTopPixel pla clc adc 1,s sta Q_Rect+4 pla sta Q_Rect pha pushword par1 pushword line1 pushword offset1 jsl W_GetHPos pla sta Q_Rect+2 jsr CheckRect pushlong RectPtr _PaintRect jsr W_NextLine NoTopPart stz LastDone brl NewPar LineLoop cmpw par1,par2 bcc DoIt jne DoneLines cmpw line1,line2 jcs DoneLines DoIt pha pha pushword par1 pushword line1 jsl W_LineToTopPixel pla clc adc 1,s sta Q_Rect+4 pla sta Q_Rect jsr CheckRect lda line1 jsl W_GetLeft sta Q_Rect+2 pushlong rectptr _PaintRect jsr W_NextLine bcc LineLoop NewPar moveword W_LeftMargin,Q_Rect+2 moveword W_RightMargin,Q_Rect+6 brl LineLoop DoneLines lda LastDone jne DoPaint inc LastDone lda BotFlag jne DoIt lda line2 jsl W_GetLeft sta Q_Rect+2 pha pha pushword par2 pushword line2 jsl W_LineToTopPixel pla clc adc 1,s sta Q_Rect+4 pla sta Q_Rect pha pushword par2 pushword line2 pushword offset2 jsl W_GetHPos pla sta Q_Rect+6 jsr CheckRect pushlong RectPtr _PaintRect DoPaint brl ITExit ;--------------------special case of beginning and end on same Q_Line OnSameLine pha pha pushword par1 pushword line1 jsl W_LineToTopPixel pla clc adc 1,s sta Q_Rect+4 pla sta Q_Rect pha pushword par1 pushword line1 pushword offset1 jsl W_GetHPos pla sta Q_Rect+2 pha pushword par2 pushword line2 pushword offset2 jsl W_GetHPos pla sta Q_Rect+6 jsr CheckRect pushlong RectPtr _PaintRect ITExit _PenNormal return W_NextLine inc line1 cmpw line1,[W_ParRec]:#W_pLastLine bcc AllFine stz line1 inc par1 lda par1 jsl W_GetParRec movelong ax,W_ParRec cmpw [W_ParRec]:#W_pAttr,#W_PgBrk bne NoPBN inc par1 lda par1 jsl W_GetParRec movelong ax,W_ParRec NoPBN ldy #W_pRulerHand+2 lda [W_ParRec],y tax ldy #W_pRulerHand lda [W_ParRec],y jsl W_ReadRuler sec AllFine rts CheckRect lda W_RightMargin cmp Q_Rect+6 bcs ROk sta Q_Rect+6 ROk rts ENDP **************************************************************** * W_SelectOn W_SelectOn PROC EXPORT ;Using wpglobals local W_ParRec:l begin +b jsl D_TextSelectOn moveword #1,W_Selected stz W_WPFontFlag jsl W_StartFirst lda W_StartPar jsl W_GetParRec movelong ax,W_ParRec cmpw [W_ParRec]:#W_pAttr,#W_PgBrk bne NoPN sublong W_ParRec,#W_pBytes,W_ParRec NoPN jsl W_SetFullREct lda W_ShowRuler beq NoShow pushlong [W_ParRec]:#W_pRulerHand jsl W_MakeVisRuler NoShow jsl W_CalcFonts return ENDP **************************************************************** * W_SelectOff W_SelectOff PROC EXPORT ;Using wpglobals begin lda W_Selected beq SOExit jsl D_TextSelectOff jsl W_InvSelect stz W_Selected SOExit return ENDP **************************************************************** * W_KillSelect W_KillSelect PROC EXPORT ;Using wpglobals local W_ParRec:l begin lda W_Selected jeq KSExit jsl W_SelectOff jsl W_StartFirst lda W_StartPar jsl W_GetParRec movelong ax,W_ParRec moveword [W_ParRec]:#W_pAttr,a beq NoPb inc W_StartPar stz W_StartLine moveword #W_TextHeader,W_StartOffset NoPB cmpw W_StartOffset,#W_TextHeader bcs OOk moveword #W_TextHeader,W_StartOffset OOK jsl W_MakeCaret KSExit return ENDP **************************************************************** W_MakeSelect PROC EXPORT ;Using wpglobals lda W_Selected beq TurnOff jsl D_TextSelectOn brl MSExit TurnOff jsl D_TextSelectOff MSExit rtl ENDP **************************************************************** W_InvSelect PROC EXPORT ;Using wpglobals EXPORT W_InvSelectUC begin lda W_Selected beq ISExit jsl W_SetDocRect NoSet pushword W_StartPar pushword W_StartLine pushword W_StartOffset pushword W_EndPar pushword W_EndLine pushword W_EndOffset jsl W_InvText ISExit return W_InvSelectUC ; ;use clip lda W_Selected beq ISExit bra NoSet ENDP **************************************************************** * W_DoubleClick W_DoubleClick PROC EXPORT ;Using wpglobals input Pt:l local Q_Rect:r,tempPar:w,TempLine:w,tempoffset:w begin jsl W_SetDocRect pushlong !Q_Rect jsl W_CalcDocRect jsl CaretOff jsl W_SelectOff pha pha pha pushlong Pt jsl W_PtToText pullword TempOffset pullword TempLine pullword TempPar lda Temppar ldx TempOffset jsl W_WordBounds sta W_StartPar sta W_EndPar stx W_StartOffset sty W_EndOffset pha pushword W_StartPar pushword W_StartOffset jsl W_FindLine pullWord W_StartLine pha pushword W_EndPar pushword W_EndOffset jsl W_FindLine pullWord W_EndLine moveword #1,W_Selected jsl W_InvSelect TrackLoop pha pushword #0 _StillDown pla jeq EndTrack pushlong !pt _GetMouse scmpw pt,Q_Rect bcc ScrollUp scmpw Q_Rect+4,pt bcs NoScroll jsl W_SetFullREct pha ;scroll down pushword #6 pushlong W_ScrollBar jsl W_ScrollBarProc pla brl TrackLoop ScrollUp jsl W_SetFullREct pha ;scroll up pushword #5 pushlong W_ScrollBar jsl W_ScrollBarProc pla brl TrackLoop NoScroll pha pha pha pushlong Pt jsl W_PtToText pullword TempOffset pullword TempLine pullword TempPar jsl W_SetDocRect cmpw TempPar,W_StartPar beq CMo bcs IsBel CMo cmpw TempOffset,W_StartOffset bcs IsBel lda Temppar ldx TempOffset jsl W_WordBounds sta TempPar stx TempOffset bra GotWord IsBel lda Temppar ldx TempOffset jsl W_WordBounds sta TempPar sty TempOffset GotWord pha pushword TempPar pushword TempOffset jsl W_FindLine pullWord TempLine pushword TempPar pushword TempLine pushword TempOffset pushword W_EndPar pushword W_EndLine pushword W_EndOffset jsl W_InvText moveword TempPar,W_EndPar moveword TempLine,W_EndLine moveword TempOffset,W_EndOffset brl TrackLoop EndTrack stz W_Selected No_Select cmpw W_EndPar,W_StartPar bne SelOn cmpw W_EndLine,W_StartLine bne SelOn cmpw W_EndOffset,W_StartOffset bne SelOn jsl W_SelectOff jsl W_MakeCaret bra MICExit SelOn jsl W_SelectOn MICExit jsl W_SetFullREct return ENDP **************************************************************** * W_TripleClick W_TripleClick PROC EXPORT ;Using wpglobals input Pt:l local Q_Rect:r,tempPar:w,TempLine:w,tempoffset:w begin jsl W_SetDocRect pushlong !Q_Rect jsl W_CalcDocRect jsl CaretOff jsl W_SelectOff pha pha pha pushword Pt jsl W_PixelToLine ply pullword Templine pullword Temppar pha pushword TempPar pushword TempLine jsl W_GetBegLine pullword W_StartOffset pha pushword TempPar pushword TempLine jsl W_GetEndLine pullword W_EndOffset lda TempPar sta W_EndPar sta W_StartPar lda TempLine sta W_EndLine sta W_StartLine moveword #1,W_Selected jsl W_InvSelect TrackLoop pha pushword #0 _StillDown pla jeq EndTrack pushlong !pt _GetMouse scmpw pt,Q_Rect bcc ScrollUp scmpw Q_Rect+4,pt bcs NoScroll jsl W_SetFullREct pha ;scroll down pushword #6 pushlong W_ScrollBar jsl W_ScrollBarProc pla brl TrackLoop ScrollUp jsl W_SetFullREct pha ;scroll up pushword #5 pushlong W_ScrollBar jsl W_ScrollBarProc pla brl TrackLoop NoScroll pha pha pha pushword Pt jsl W_PixelToLine ply pullword TempLine pullword TempPar jsl W_SetDocRect cmpw TempPar,W_StartPar beq CMo bcs IsBel CMo cmpw TempOffset,W_StartOffset bcs IsBel pha pushword TempPar pushword TempLine jsl W_GetBegLine pullword TempOffset bra GotWord IsBel pha pushword TempPar pushword TempLine jsl W_GetEndLine pullword TempOffset GotWord pushword TempPar pushword TempLine pushword TempOffset pushword W_EndPar pushword W_EndLine pushword W_EndOffset jsl W_InvText moveword TempPar,W_EndPar moveword TempLine,W_EndLine moveword TempOffset,W_EndOffset brl TrackLoop EndTrack stz W_Selected No_Select cmpw W_EndPar,W_StartPar bne SelOn cmpw W_EndLine,W_StartLine bne SelOn cmpw W_EndOffset,W_StartOffset bne SelOn jsl W_SelectOff jsl W_MakeCaret bra MICExit SelOn jsl W_SelectOn MICExit jsl W_SetFullREct return ENDP **************************************************************** * W_PtToText W_PtToText PROC EXPORT ;Using wpglobals input Pt:l output TempPar:w,TempLine:w,TempOffset:w error MyErr begin pha pha pha pushword Pt jsl W_PixelToLine ply sty MyErr pullword Templine pullword Temppar cpy #0 beq NotBove bmi IsAbove cpy #2 beq GotPB moveword W_LastP,TempPar jsl W_GetLastLine stx TempOffset sta TempLine bra GotTemp IsAbove pha pushword TempPar pushword TempLine jsl W_GetLineOffset pullword TempOffset bra GotTemp NotBove pha pushword TempPar pushword TempLine pushword Pt+2 jsl W_PixelToOffset pullWord TempOffset bra GotTemp GotPB stz TempLine moveword #W_TextHeader,TempOffset GotTemp return ENDP **************************************************************** * W_StartFirst W_StartFirst PROC EXPORT ;Using wpglobals local TempPar:w,TempLine:w,TempOffset:w begin cmpw W_StartPar,W_EndPar bcc SOk bne NOk cmpw W_StartLine,W_EndLine bcc SOk bne NOk cmpw W_StartOffset,W_EndOffset bcc SOk NOk moveword W_StartPar,TempPar moveword W_StartLine,TempLine moveword W_StartOffset,TempOffset moveword W_EndPar,W_StartPar moveword W_EndLine,W_StartLine moveword W_EndOffset,W_StartOffset moveword TempPar,W_EndPar moveword TempLine,W_EndLine moveword TempOffset,W_EndOffset SOk return ENDP **************************************************************** * W_MInRuler W_MInRuler PROC EXPORT ;Using wpglobals local Q_Rect:r,W_ParRec:l,Par:w,NRuler:l,OldRuler:l,times:w local par2:w,NPtr:l,EPar:w begin pushlong W_CurDoc jsl D_SetFileChanged pushword W_StartPar pushword W_StartLine pushlong #0 jsl W_PutOnScreen pushlong !Q_Rect jsl W_CalcDocRect pushlong !Q_Rect _InValRect moveword W_StartPar,par ldy W_Selected bne NoEnd sta EPar bra Parloop NoEnd moveword W_EndPar,EPar cmpw W_EndOffset,#W_TextHeader bne ParLoop dec EPar ParLoop lda par jsl W_GetParRec movelong ax,W_ParRec cmpw [W_ParRec]:#W_pAttr,#W_PgBrk jeq NextRuler moveword [W_ParRec]:#W_pRulerHand+2,a bpl NotDone and #$ff sta [W_ParRec],y brl NextRuler NotDone pha pha jsl W_NewRuler pullLong NRuler movelong [W_ParRec]:#W_pRulerHand,OldRuler pushlong OldRuler pushlong NRuler pushlong #W_RulBytes _HandToHand movelong [NRuler],NPtr moveword #0,[NPtr] movelong NRuler,[W_ParRec]:#W_pRulerHand pushlong NRuler jsl W_ModifyRuler moveword #1,times pushword par jsl W_MakeLines lda NRuler+2 ora #$8000 sta NRuler+2 moveword par,par2 bra StartLoop2 PLoop lda par2 jsl W_GetParRec movelong ax,W_ParRec cmpw [W_ParRec]:#W_pAttr,#W_PgBrk beq StartLoop2 cmpl [W_ParRec]:#W_pRulerHand,OldRuler bne StartLoop2 inc times movelong NRuler,[W_ParRec]:#W_pRulerHand pushword par2 jsl W_MakeLines StartLoop2 inc par2 cmpw EPar,par2 bcs Ploop pushword times pushlong OldRuler jsl W_UnUseRuler pushword times lda NRuler+2 and #$ff pha pushword NRuler jsl W_UseRuler NextRuler inc par lda EPar cmp Par jcs ParLoop DonePars jsl CaretOff jsl W_CalcPages jsl W_CalcNewLines jsl W_EdMakeCaret jsl W_SetFullREct return ENDP END