LOAD 'Macros.dump' INCLUDE 'SS.equ' INCLUDE 'Driver.equ' INCLUDE 'Heap.aii.i' ; IMPORT ArrowCursor ; IMPORT LeftRightCursor ; IMPORT OkBox ; IMPORT appleKey ; IMPORT shiftKey ;----------------------------------------------- ; ; Imported addresses ; ;----------------------------------------------- IMPORT D_AlertBox IMPORT D_BitMapChanged IMPORT D_BitMapPtr IMPORT D_MemoryError IMPORT D_SetCursor IMPORT S_ActivateScrlBars IMPORT S_ActiveWindow IMPORT S_AdjustCell IMPORT S_AdjustPoint IMPORT S_AdjustSheetColumns IMPORT S_CalculateSheet IMPORT S_Cell2Str IMPORT S_ChangeColWidth IMPORT S_ColLabRect IMPORT S_CurBRSelect IMPORT S_CurBScrl IMPORT S_CurContHt IMPORT S_CurContWd IMPORT S_CurContXpt IMPORT S_CurContYpt IMPORT S_CurEditFlag IMPORT S_CurEditRect IMPORT S_CurGrow IMPORT S_CurLEHandle IMPORT S_CurRScrl IMPORT S_CurTLCell IMPORT S_CurTLSelect IMPORT S_CurTwiceVertLines IMPORT S_CurVertLines IMPORT S_CurWindow IMPORT S_DashMask IMPORT S_DeltaMove IMPORT S_DoChecks IMPORT S_DoMove IMPORT S_DrawLocation IMPORT S_DrawMove IMPORT S_FindRect IMPORT S_FixLE IMPORT S_GrowDoc IMPORT S_HScrlAction IMPORT S_HiliteCells IMPORT S_MoveSrcBR IMPORT S_MoveSrcTL IMPORT S_NoMoveReasonMsg IMPORT S_NormalMask IMPORT S_RefreshScreen IMPORT S_RowLabRect IMPORT S_SetCurFormat IMPORT S_SetEdittingMenus IMPORT S_SetUndoOn IMPORT S_SetVertLines IMPORT S_SwapIn IMPORT S_Thumb IMPORT S_VScrlAction IMPORT S_WhereCell IMPORT S_WhichCell ;----------------------------------------------- ; ; Forward addresses and entries ; ;----------------------------------------------- ENTRY S_ColLabelClick ENTRY S_GIFinish ENTRY S_GIMiddle ENTRY S_GIScroll ENTRY S_GIStart ENTRY S_PointShootMove ENTRY S_SelectCells ENTRY S_SelectFinish ENTRY S_SelectMiddle ENTRY S_SelectScroll ENTRY S_SelectStart ENTRY S_TrackVertLine ;-------------------------------------------------------------------------; ; S_MouseInfo ( TaskRecordPtr:l ) ; ; S_MouseInfo is called by the driver to handle a mouse down event in ; the currently active window's info bar. S_MouseInfo PROC EXPORT input TaskRecordPtr:l BEGIN ; +b RETURN ENDP ;-------------------------------------------------------------------------; ; S_MouseUp ( TaskRecordPtr:l ) ; ; S_MouseUp is called by the driver when the preceding mouse down was in ; an SS window and a mouse up has occured. S_MouseUp PROC EXPORT input TaskRecordPtr:l BEGIN ; +b RETURN ENDP ;-------------------------------------------------------------------------; ; S_MouseDown ( Click:w,TaskRecordPtr:l,ClickPt2:l,ClickPt3:l ) ; ; S_MouseDown is called by the driver to handle a mouse down event in ; SS's currently active window. S_MouseDown PROC EXPORT ;Using S_CurrentData input Click:w,TaskRecordPtr:l,ClickPt2:l,ClickPt3:l local Point:l,Control:l local ModField:w,Rect:r BEGIN +b Call S_SwapIn,in=(S_ActiveWindow:l) Tool _SetPort,in=(S_ActiveWindow:l) MoveLong [TaskRecordPtr]:#10,Point MoveWord [TaskRecordPtr]:#14,ModField out a:w in !Control:l,Point:l,S_CurWindow:l XTool _FindControl jeq notcontrol docontrol Call D_SetCursor,in=(#ArrowCursor:w) CmpLong Control,S_CurGrow bne dotrack out :l in #200:w,#70:w,Point:l,S_CurWindow:l XTool _GrowWindow Tool _SizeWindow,in=(:l,S_CurWindow:l) Call S_GrowDoc,in=(S_CurWindow:l) brl Exit dotrack Tool _GetCtlRefCon,in=(Control:l),out=(ax:l) asl a asl a tax in Point:l,ActionTable:x:l,Control:l out a:w XTool _TrackControl beq skipThumb ; Check if thumb was tracked. cmp #$81 bne skipThumb Call S_Thumb,in=(Control:l) skipThumb Call S_SetVertLines brl Exit notcontrol Tool _GlobalToLocal,in=(!Point:l) ; Handle Line Edit click ; Tool _PtInRect,in=(!Point:l,#S_CurEditRect:l),out=(a:w) beq notEdit CmpLong S_CurTLSelect,S_CurBRSelect jne Exit lda S_CurEditFlag and #S_EditingBit bne doLEClick lda S_CurEditFlag ora #S_EditingBit sta S_CurEditFlag Tool _LEActivate,in=(S_CurLEHandle:l) Call S_SetCurFormat,in=(S_CurTLSelect:l) Call S_SetEdittingMenus doLEClick Tool _LEClick,in=(TaskRecordPtr:l,S_CurLEHandle:l) brl Exit notEdit ; Any other mouse down in window checks can go here. ; MoveWord S_CurContWd,S_ColLabRect+6 Tool _PtInRect,in=(!Point:l,#S_ColLabRect:l),out=(a:w) beq chkRowSelect Call S_ColLabelClick,in=(Point:l,ModField:w) brl Exit chkRowSelect ; MoveWord S_CurContHt,S_RowLabRect+4 Tool _PtInRect,in=(!Point:l,#S_RowLabRect:l),out=(a:w) beq chkContent lda S_CurEditFlag and #S_EditingBit jne Exit lda ModField and #shiftKey beq doRowSelect lda S_CurTLSelect+2 cmp #1 jne Exit lda S_CurBRSelect+2 cmp #702 jne Exit doRowSelect in Point:l,ModField:w,#1:w,#0:w in #S_SelectStart:l,#S_SelectMiddle:l,#S_SelectFinish:l in #S_SelectScroll:l XCall S_SelectCells brl Exit chkContent MoveWord S_CurContYpt,Rect MoveWord S_CurContXpt,Rect+2 MoveWord S_CurContHt,Rect+4 MoveWord S_CurContWd,Rect+6 Tool _PtInRect,in=(!Point:l,!Rect:l),out=(a:w) beq Exit lda S_CurEditFlag and #S_EditingBit beq notGraphInput ldx #0 in Point:l,x:w,x:w,x:w in #S_GIStart:l,#S_GIMiddle:l,#S_GIFinish:l in #S_GIScroll:l XCall S_SelectCells bra Exit notGraphInput lda ModField and #appleKey beq doContSelect Call S_PointShootMove,in=(Point:l) bra Exit doContSelect ldx #0 in Point:l,ModField:w,x:w,x:w in #S_SelectStart:l,#S_SelectMiddle:l,#S_SelectFinish:l in #S_SelectScroll:l XCall S_SelectCells Exit RETURN ActionTable DC.L S_VScrlAction DC.L S_HScrlAction DC.L 0 ENDP ;----------------------------------------------------------------------- ; ; S_ColLabelClick PROC EXPORT ;Using S_CurrentData input Point:l,ModField:w local VertLineHandle:l local EditCol:w,VertLines:l,CurXPos:w local NewWidth:w,PrevVertLine:w BEGIN ldx S_CurTwiceVertLines jeq notColWd MoveLong S_CurVertLines,VertLineHandle MoveLong [VertLineHandle],VertLines txy lda Point+2 and #$FFFC loop dey dey jmi notColWd cmp [VertLines],y blt loop jne notColWd sty EditCol sta CurXPos tya beq first ; first vert line dey dey MoveWord [VertLines]:y,PrevVertLine bra trackIt first MoveWord S_CurContXpt,PrevVertLine trackIt Call D_SetCursor,in=(#LeftRightCursor:w) SpaceWord PushWord CurXPos AddWord PrevVertLine,#S_MinCellWidth,s AddWord 1:s,#S_MaxCellWidth-S_MinCellWidth,s cmp S_CurContWd blt contTrack lda S_CurContWd dec a and #$FFFC sta 1,s contTrack PushWord #S_EditHeight+2 PushWord S_CurContHt Call S_TrackVertLine,in=(:w,:w,:w,:w,:w) ; out= New pos pla CmpWord a,CurXPos jeq Exit SubWord a,PrevVertLine,NewWidth ; Call D_SetCursor,in=(#WatchCursor:w) lda EditCol lsr a AddWord a,S_CurTLCell+2,a Call S_ChangeColWidth,in=(a:w,NewWidth:w) bcs memError Call S_ActivateScrlBars Call S_SetUndoOn,in=(#S_UndoColWdType:w) Call S_AdjustSheetColumns bra refreshScreen memError Call D_MemoryError refreshScreen Call S_RefreshScreen,in=(#1:w) bra Exit notColWd lda S_CurEditFlag and #S_EditingBit bne Exit lda ModField and #shiftKey beq doSelect lda S_CurTLSelect cmp #1 bne Exit lda S_CurBRSelect cmp #9999 bne Exit doSelect in Point:l,ModField:w,#0:w,#1:w in #S_SelectStart:l,#S_SelectMiddle:l,#S_SelectFinish:l in #S_SelectScroll:l XCall S_SelectCells Exit RETURN ENDP ;-------------------------------------------------------------------------; ; S_SelectCells ; S_SelectCells PROC EXPORT ;Using S_CurrentData input Xpt:w,Ypt:w,Modfield:w,FixedCol:w,FixedRow:w input StartRoutine:l,MiddleRoutine:l,FinishRoutine:l input ScrollRoutine:l local OldClipRgn:l,NewClipRgn:l local WorkClipRgn:l,Work2Rgn:l local ClipRect:r local NewPt:l,MouseStatus:w local AnchorCell:l,NewCell:l,OldCell:l local ContWd:w,ContHt:w BEGIN MoveWord StartRoutine,StartCall+1 sta StartCall2+1 MoveWord StartRoutine+1,StartCall+2 sta StartCall2+2 MoveWord MiddleRoutine,MiddleCall+1 MoveWord MiddleRoutine+1,MiddleCall+2 MoveWord FinishRoutine,FinishCall+1 MoveWord FinishRoutine+1,FinishCall+2 MoveWord ScrollRoutine,ScrollCall+1 MoveWord ScrollRoutine+1,ScrollCall+2 MoveWord #S_EditHeight+2,ClipRect stz ClipRect+2 MoveWord S_CurContHt,ClipRect+4 sta ContHt MoveWord S_CurContWd,ClipRect+6 sta ContWd ; Set the Clip Rgn ; Tool _NewRgn,out=(:l) MoveLong 1:s,OldClipRgn Tool _GetClip,in=(:l) Tool _NewRgn,out=(:l) MoveLong 1:s,NewClipRgn Tool _RectRgn,in=(:l,!ClipRect:l) Tool _SectRgn,in=(NewClipRgn:l,OldClipRgn:l,NewClipRgn:l) Tool _SetClip,in=(NewClipRgn:l) Tool _NewRgn,out=(WorkClipRgn:l) Tool _NewRgn,out=(Work2Rgn:l) ; Common loop initialization ; in Xpt:w,Ypt:w out AnchorCell:l,a:w,a:w XCall S_WhichCell CmpWord AnchorCell+2,#703 jge cleanup CmpWord AnchorCell,#10000 jge cleanup MoveLong #$02BE270F,NewCell ; Check if shift-Select or just Select ; chkSelect lda ModField and #shiftKey bne ShiftSelect doStart SpaceLong SpaceLong PushLong AnchorCell PushWord FixedRow PushWord FixedCol PushLong WorkClipRgn PushLong Work2Rgn StartCall jsl * PullLong OldCell PullLong AnchorCell brl loop ; Initialize loop for shift-Select ; ShiftSelect lda FixedRow bne rowSet2 MoveWord AnchorCell,NewCell rowSet2 lda FixedCol bne colSet2 MoveWord AnchorCell+2,NewCell+2 colSet2 MoveLong S_CurTLSelect,AnchorCell MoveLong S_CurBRSelect,OldCell lda FixedRow bne OKanchorRow CmpWord NewCell,AnchorCell ; compare rows only bge OKanchorRow MoveWord OldCell,AnchorCell MoveWord S_CurTLSelect,OldCell OKanchorRow lda FixedCol bne OKanchorCol CmpWord NewCell+2,AnchorCell+2 ; compare cols only bge OKanchorCol MoveWord OldCell+2,AnchorCell+2 MoveWord S_CurTLSelect+2,OldCell+2 OKanchorCol lda #0 pha pha pha pha pha pha pha pha PushLong WorkClipRgn PushLong Work2Rgn StartCall2 jsl * pla pla pla pla MoveWord #-1,MouseStatus brl doMiddle ; Track mouse loop ; loop Tool _GetMouse,in=(!NewPt:l) MoveWord #-1,MouseStatus Tool _EventAvail,in=(#4:w,#EventRec:l),out=(a:w) beq stillDown Tool _GlobalToLocal,in=(#MousePos:l) MoveLong MousePos,NewPt stz MouseStatus stillDown Call S_AdjustPoint,in=(NewPt:l) PullLong NewPt chkScrolls lda FixedCol bne chkTop CmpWord NewPt+2,S_CurContXpt bge chkRight jsr scrollLeft bra chkTop chkRight cmp ContWd blt chkTop jsr scrollRight MoveWord ContWd,NewPt+2 chkTop lda FixedRow bne OKScroll CmpWord NewPt,S_CurContYpt bge chkBottom jsr scrollUp bra OKscroll chkBottom cmp ContHt blt OKscroll jsr scrollDown MoveWord ContHt,NewPt OKscroll in NewPt:l out :l,:l XCall S_WhichCell Call S_AdjustCell,in=(:l,:l) pla pla pla plx ldy FixedRow bne rowStored sta NewCell rowStored ldy FixedCol bne colStored stx NewCell+2 colStored lda MouseStatus beq mouseUp CmpLong NewCell,OldCell bne doMiddle brl loop mouseUp CmpLong NewCell,OldCell beq doFinish doMiddle PushLong AnchorCell PushLong OldCell PushLong NewCell MiddleCall jsl * MoveLong NewCell,OldCell lda MouseStatus beq doFinish brl loop doFinish PushLong AnchorCell PushLong OldCell FinishCall jsl * ; Clean up ; cleanup Call S_SetVertLines Tool _DisposeRgn,in=(WorkClipRgn:l) Tool _DisposeRgn,in=(Work2Rgn:l) Tool _DisposeRgn,in=(NewClipRgn:l) Tool _SetClip,in=(OldClipRgn:l) Tool _DisposeRgn,in=(OldClipRgn:l) RETURN ;-------------------------------- scrollLeft lda #5 bra ScrollH scrollRight lda #6 ScrollH pha pha PushLong S_CurBScrl jsr doScrollRoutine Tool _SetClip,in=(OldClipRgn:l) Call S_HScrlAction Tool _SetClip,in=(NewClipRgn:l) jsr doScrollRoutine pla rts ;-------------------------------- scrollUp lda #5 bra ScrollV scrollDown lda #6 ScrollV pha pha PushLong S_CurRScrl jsr doScrollRoutine Tool _SetClip,in=(OldClipRgn:l) Call S_VScrlAction Tool _SetClip,in=(NewClipRgn:l) jsr doScrollRoutine pla rts ;-------------------------------- doScrollRoutine PushLong AnchorCell PushLong OldCell ScrollCall jsl * rts ;-------------------------------- EventRec DS.B 10 MousePos DS.B 6 ENDP ;-------------------------------------------------------------------------- S_SelectData PROC EXPORT EXPORT S_SelectWorkRgn EXPORT S_SelectWork2Rgn S_SelectWorkRgn DS.B 4 S_SelectWork2Rgn DS.B 4 ENDP ;----------------------------------------------------------------------------- ; ; S_SelectScroll PROC EXPORT input Cell1:l,Cell2:l BEGIN RETURN ENDP ;----------------------------------------------------------------------------- ; ; S_SelectStart PROC EXPORT ;Using S_CurrentData ;Using S_SelectData output AnchorCell:l,OldCell:l input StartCell:l,FixedRow:w,FixedCol:w input WorkClipRgn:l,Work2Rgn:l BEGIN MoveLong WorkClipRgn,S_SelectWorkRgn MoveLong Work2Rgn,S_SelectWork2Rgn lda StartCell ora StartCell+2 beq Exit ; Initialize loop for Select ; lda FixedRow ora FixedCol bne hiliteCell CmpLong StartCell,S_CurTLSelect bne hilitecell CmpLong StartCell,S_CurBRSelect beq setAnchor hiliteCell Call S_HiliteCells MoveLong #$00010001,S_CurTLSelect MoveLong #$02BE270F,S_CurBRSelect lda FixedRow bne rowSet MoveWord StartCell,S_CurTLSelect sta S_CurBRSelect rowSet lda FixedCol bne colSet MoveWord StartCell+2,S_CurTLSelect+2 sta S_CurBRSelect+2 colSet Call S_HiliteCells setAnchor MoveLong S_CurTLSelect,AnchorCell MoveLong S_CurBRSelect,OldCell Exit RETURN ENDP ;------------------------------------------------------------------------ ; ; S_SelectMiddle PROC EXPORT ;Using S_CurrentData ;Using S_SelectData input AnchorCell:l,OldCell:l,NewCell:l local OldRect:r,NewRect:r BEGIN PushLong AnchorCell PushLong OldCell pha pha pha pha Call S_FindRect PullLong OldRect PullLong OldRect+4 pla pla pla pla inc OldRect inc OldRect+2 inc OldRect+2 inc OldRect+4 inc OldRect+6 inc OldRect+6 Tool _RectRgn,in=(S_SelectWorkRgn:l,!OldRect:l) PushLong AnchorCell PushLong NewCell pha pha pha pha Call S_FindRect PullLong NewRect PullLong NewRect+4 PullLong S_CurBRSelect PullLong S_CurTLSelect inc NewRect inc NewRect+2 inc NewRect+2 inc NewRect+4 inc NewRect+6 inc NewRect+6 Tool _RectRgn,in=(S_SelectWork2Rgn:l,!NewRect:l) in S_SelectWorkRgn:l,S_SelectWork2Rgn:l,S_SelectWorkRgn:l XTool _XorRgn Tool _InvertRgn,in=(S_SelectWorkRgn:l) RETURN ENDP ;------------------------------------------------------------------------ ; ; S_SelectFinish PROC EXPORT ;Using S_CurrentData input AnchorCell:l,OldCell:l BEGIN Call S_FixLE Call S_DoChecks Call S_DrawLocation RETURN ENDP ;----------------------------------------------------------------------------- ; ; S_GIScroll PROC EXPORT ;Using S_CurrentData ;Using S_SelectData input Cell1:l,Cell2:l local Rect:r BEGIN Tool _SetPenMode,in=(#$8002:w) ; not Xor Mode PushLong Cell1 PushLong Cell2 pha pha pha pha Call S_FindRect PullLong Rect PullLong Rect+4 pla pla pla pla inc Rect inc Rect+2 inc Rect+2 Tool _FrameRect,in=(!Rect:l) Tool _SetPenMode,in=(#0:w) RETURN ENDP ;----------------------------------------------------------------------------- ; ; S_GIStart PROC EXPORT ;Using S_CurrentData ;Using S_SelectData output AnchorCell:l,OldCell:l input StartCell:l,FixedRow:w,FixedCol:w input WorkClipRgn:l,Work2Rgn:l local Rect:r BEGIN MoveLong WorkClipRgn,S_SelectWorkRgn MoveLong Work2Rgn,S_SelectWork2Rgn MoveWord StartCell,AnchorCell sta OldCell MoveWord StartCell+2,AnchorCell+2 sta OldCell+2 Tool _SetPenMode,in=(#$8002:w) ; not Xor Mode in StartCell:l out Rect+4:l,Rect:l XCall S_WhereCell inc Rect inc Rect+2 inc Rect+2 Tool _FrameRect,in=(!Rect:l) Tool _SetPenMode,in=(#0:w) RETURN ENDP ;------------------------------------------------------------------------ ; ; S_GIMiddle PROC EXPORT ;Using S_CurrentData ;Using S_SelectData input AnchorCell:l,OldCell:l,NewCell:l local Rect:r,RectPtr:l BEGIN Tool _SetPenMode,in=(#$8002:w) ; not Xor Mode MoveLong !Rect,RectPtr PushLong AnchorCell PushLong OldCell pha pha pha pha Call S_FindRect PullLong Rect PullLong Rect+4 pla pla pla pla inc Rect inc Rect+2 inc Rect+2 Tool _FrameRect,in=(RectPtr:l) PushLong AnchorCell PushLong NewCell pha pha pha pha Call S_FindRect PullLong Rect PullLong Rect+4 pla pla pla pla inc Rect inc Rect+2 inc Rect+2 Tool _FrameRect,in=(RectPtr:l) Tool _SetPenMode,in=(#0:w) RETURN ENDP ;------------------------------------------------------------------------ ; ; S_GIFinish PROC EXPORT ;Using S_CurrentData ;Using D_GlobalData input Cell1:l,Cell2:l local Len:w,Len2:w,TextPtr:l,Text2Ptr:l,Rect:r BEGIN Tool _SetPenMode,in=(#$8002:w) ; not Xor Mode PushLong Cell1 PushLong Cell2 pha pha pha pha Call S_FindRect PullLong Rect PullLong Rect+4 pla pla pla pla inc Rect inc Rect+2 inc Rect+2 Tool _FrameRect,in=(!Rect:l) Tool _SetPenMode,in=(#0:w) Tool _ClipRect,in=(#S_CurEditRect:l) MoveLong >D_BitMapPtr,TextPtr MoveWord #1,>D_BitMapChanged Call S_Cell2Str,in=(TextPtr:l,Cell1:l) lda [TextPtr] and #$00FF sta Len incl TextPtr CmpLong Cell1,Cell2 beq insertText MoveWord #$2E2E,[TextPtr]:Len ; hex for '..' tya inc a inc a sta Len AddLong a,TextPtr,Text2Ptr Call S_Cell2Str,in=(Text2Ptr:l,Cell2:l) lda [Text2Ptr] and #$00FF sta Len2 AddWord a,Len,Len ldy #1 loop lda [Text2Ptr],y dey sta [Text2Ptr],y iny iny cpy Len2 blt loop insertText Tool _LEDelete,in=(S_CurLEHandle:l) Tool _LEInsert,in=(TextPtr:l,Len:w,S_CurLEHandle:l) Exit RETURN ENDP ;-------------------------------------------------------------------------; ; S_TrackVertLine( CurXPos:w,MinXPos:w,MaxXPos:w,TopVerPos:w,BottomVerPos:w ) ; :NewXPos:w ; ; CurXPos, MinXPos and MaxXPos are x-coordinates with the lowest 2 bits ; cleared. S_TrackVertLine PROC EXPORT ;Using S_ConstantData output NewXPos:w input CurXPos:w,MinXPos:w,MaxXPos:w input TopVerPos:w,BottomVerPos:w local NewPt:l,MouseStatus:w,FieldPtr:l BEGIN ; Set pen mode and mask to draw dotted line. setPen Tool _SetPenMode,in=(#$8002:w) ; not Xor Mode Tool _SetPenMask,in=(#S_DashMask:l) CmpWord CurXPos,MinXPos blt set2Min cmp MaxXPos blt drawLine set2Max MoveWord MaxXPos,CurXPos bra drawLine set2Min MoveWord MinXPos,CurXPos drawLine Tool _MoveTo,in=(CurXPos:w,TopVerPos:w) Tool _LineTo,in=(CurXPos:w,BottomVerPos:w) ; Wait for the user to either let go of the mouse or move it. waitloop Tool _GetMouse,in=(!NewPt:l) Tool _StillDown,in=(#0:w),out=(MouseStatus:w) Call S_AdjustPoint,in=(NewPt:l) PullLong NewPt and #$FFFC sta NewPt+2 cmp MinXPos blt setNewMin cmp MaxXPos blt NewSet setNewMax MoveWord MaxXPos,NewPt+2 bra NewSet setNewMin MoveWord MinXPos,NewPt+2 NewSet lda MouseStatus beq doUnLine CmpWord NewPt+2,CurXPos beq waitloop ; Undraw the old line. doUnline Tool _MoveTo,in=(CurXPos:w,TopVerPos:w) Tool _LineTo,in=(CurXPos:w,BottomVerPos:w) ; Set the New draw point. setnew MoveWord NewPt+2,CurXPos ; If the user has not let go of the mouse then repeat loop. endloop lda MouseStatus jne drawLine ; User has released mouse so adjust New position of form bottom line ; and Update the view rect. Exit Tool _SetPenMode,in=(#0:w) Tool _SetPenMask,in=(#S_NormalMask:l) MoveWord CurXPos,NewXPos RETURN ENDP ;---------------------------------------------------------------------------- ; ; S_PointShootMove PROC EXPORT ;Using S_CurrentData ;Using S_MoveData ;Using S_ErrorData input Point:l local DestTL:l error ErrFlag BEGIN stz ErrFlag in Point:l out DestTL:l,ax:l XCall S_WhichCell SubWord DestTL,S_CurTLSelect,S_DeltaMove SubWord DestTL+2,S_CurTLSelect+2,S_DeltaMove+2 lda S_DeltaMove ora S_DeltaMove+2 bne contMove Call D_AlertBox,in=(#OkBox:w,#S_NoMoveReasonMsg:l),out=(a:w) bra Exit contMove MoveLong S_CurTLSelect,S_MoveSrcTL MoveLong S_CurBRSelect,S_MoveSrcBR Call S_DoMove,err=ErrFlag bcc doHilite lda ErrFlag and #$FF00 cmp #$0200 bne Exit memError Call D_MemoryError doHilite Call S_HiliteCells AddWord S_CurTLSelect+2,S_DeltaMove+2,S_CurTLSelect+2 AddWord S_CurTLSelect,S_DeltaMove,S_CurTLSelect AddWord S_CurBRSelect+2,S_DeltaMove+2,S_CurBRSelect+2 AddWord S_CurBRSelect,S_DeltaMove,S_CurBRSelect Call S_HiliteCells Call S_DrawMove Call S_DrawLocation Call S_SetUndoOn,in=(#S_UndoMoveType:w) lda S_CurEditFlag and #S_ManCalcBit bne Exit Call S_CalculateSheet Exit RETURN ENDP END