	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

