	load 'macros.dump'
	include 'driver.equ'
	include 'wp.equ'
	include 'wp.macros'

;-----------------------------------------------
;
;   Imported addresses
;
;-----------------------------------------------

	IMPORT	W_CalcDocRect
	IMPORT	W_CalcFBytes
	IMPORT	W_CalcPages
	IMPORT	W_CheckDocPos
	IMPORT	W_CurDoc
	IMPORT	W_DelPars
	IMPORT	W_DoRoom
	IMPORT	W_eOffset
	IMPORT	W_EndLine
	IMPORT	W_EndOffset
	IMPORT	W_EndPar
	IMPORT	W_FindFont
	IMPORT	W_FindLine
	IMPORT	W_GetAddr
	IMPORT	W_GetEndPar
	IMPORT	W_GetParRec
	IMPORT	W_JunkLeft
	IMPORT	W_JunkRight
	IMPORT	W_LessRoom
	IMPORT	W_LineToTopPixel
	IMPORT	W_MakeCaret
	IMPORT	W_MakeLines
	IMPORT	W_ParRec
	IMPORT	W_PutOnScreen
	IMPORT	W_SelectOff
	IMPORT	W_STLIne
	IMPORT	W_StartLine
	IMPORT	W_StartOffset
	IMPORT	W_StartPar
	IMPORT	W_UnUseRuler
	IMPORT	W_UpdateText
	IMPORT	W_UseRuler
	IMPORT	W_WriteFBytes2
	IMPORT	Q_Line
	IMPORT	W_offset
	IMPORT	Q_Rect
	IMPORT	W_Selected

********************************************************************
*	Includes....
* Thursday, April 27, 1989 1:38:25 AM
********************************************************************




****************************************************************
* W_DeleteRange(par,Q_Line,W_offset,par,Q_Line,W_offset)
W_DeleteRange	PROC		EXPORT

		input par:w,Q_Line:w,W_offset:w,EPar:w,ELine:w,W_eOffset:w
		local FBytes:w,temp:w,PlacePtr:l,bytes:w
		local Font1:l,col1:w,Font2:l,col2:w,PBFlag:w,W_ParRec:l
		local SParRec:l,EParRec:l
		output OPar:w,OLine:w,OOffset:w
		begin

		stz PBFlag
		moveword par,OPar
		moveword Q_Line,Oline

		lda Par
		jsl W_GetParRec
		movelong ax,W_ParRec

		moveword [W_ParRec]:#W_pAttr,a
		and #W_PgBrk
		beq NoPb

		inc PBFlag
		inc par
		stz Q_Line
		moveword #W_TextHeader,W_offset

		cmpw par,EPar
		bne NoPb
		cmpw Q_Line,ELine
		bne NoPB
		cmpw W_offset,W_eOffset
		jeq AllPB

NoPB
		in par:w,Q_Line:w,W_offset:w
		out W_offset:w
		Xcall W_JunkLeft
		sta OOffset

		in Epar:w,Eline:w,W_eOffset:w
		out W_eOffset:w
		Xcall W_JunkRight

		pha   ;space for output
		pha
		pha
		pha
		pushword par
		pushword Q_Line
		pushword W_offset
		jsl W_FindFont
		moveword 1:s,col1
		movelong 3:s,font1
		pha
		pha
		pha
		pushword Epar
		pushword Eline
		pushword W_eOffset
		jsl W_FindFont
		moveword 1:s,col2
		movelong 3:s,font2
		jsl W_CalcFBytes
		pullword fBytes

		cmpw par,EPar
		jeq SamePar

		pha
		pushword EPar
		jsl W_GetEndPar
		pla
		sec
		sbc W_eOffset
		sta bytes

		pha
		pushword Par
		jsl W_GetEndPar
		pla
		sta temp

		pushword Par
		pushword W_offset
		lda bytes
		clc					  ;bytes+fbytes-(temp-W_offset)
		adc fbytes
		adc W_offset
		sec
		sbc temp
		pha
		jsl W_DoRoom

		cmpw W_offset,#W_TextHeader
		bne NotBegR

		lda par
		jsl W_GetParRec
		movelong ax,SParRec

		lda EPar
		jsl W_GetParRec
		movelong ax,EParRec

		pushword #1
		pushlong [SParRec]:#W_pRulerHand
		jsl W_UnUseRuler

		movelong [EParRec]:#W_pRulerHand,[SParRec]:#W_pRulerHand

		pushword #1
		pushlong [SParRec]:#W_pRulerHand
		jsl W_UseRuler

NotBegR
		lda EPar
		ldx W_eOffset
		jsl W_GetAddr
		phx
		pha
		addword W_offset,fbytes,x
		lda Par
		jsl W_GetAddr
		phx
		pha
		pushword #0
		pushword bytes
		_BlockMove

		pha
		pushword par
		pushword W_offset
		pushlong Font1
		pushword col1
		pushlong Font2
		pushword col2
		jsl W_WriteFBytes2
		pla

		lda par
		inc a
		pha
		pushword EPar
		jsl W_DelPars

		lda PBFlag
		jeq DRExit

AllPB
		lda par
		dec a
		pha
		pha
		jsl W_DelPars

		lda par
		dec a
		sta OPar
		stz OLine
		moveword #W_TextHeader,OOffset

		brl DRExit

;---------------------delete within a par
SamePar

		pushword par
		pushword W_offset
		subword W_eOffset,W_offset,a
		subword a,fbytes,a
		pha
		jsl W_LessRoom

		pha
		pushword par
		pushword W_offset
		pushlong Font1
		pushword col1
		pushlong Font2
		pushword col2
		jsl W_WriteFBytes2
		pla

DRExit

		pushword par
		jsl W_MakeLines

		pha
		pushword OPar
		pushword OOffset
		jsl W_FindLine
		pullword OLine

		return

		ENDP


****************************************************************
* W_DelSelect - deletes selection and turns off selc
W_DelSelect	PROC		EXPORT

		local Q_Rect:r,temp:w
		begin +b

		pushlong W_CurDoc
		_SetPort

		lda W_Selected
		jeq DSExit

		pushword W_StartPar
		pushword W_StartLine
		pushlong #0
		jsl W_PutOnScreen

		jsl W_SelectOff

		pha
		pha
		pha
		pushword W_StartPar
		pushword W_StartLine
		pushword W_StartOffset
		pushword W_EndPar
		pushword W_EndLine
		pushword W_EndOffset
		jsl W_DeleteRange
		pullword W_StartOffset
		pullword W_StartLine
		pullword W_StartPar

		jsl W_CalcPages

		pushlong !Q_Rect
		jsl W_CalcDocRect

		pha
		pha
		pushword W_StartPar
		lda W_StartLine
		beq DoPush
		dec a
DoPush	pha
		jsl W_LineToTopPixel
		pla
		pla
		sta temp
		bmi ClipIt 						;if minus it was a page break!
		PutIfMax temp,Q_Rect

ClipIt
		pushlong !Q_Rect
		_ClipRect

		pushlong !Q_Rect
		_EraseRect

		jsl W_UpdateText

		jsl W_CheckDocPos

;			  pha
;			  pushword W_StartPar
;			  pushword W_StartOffset
;			  jsl W_FindLine
;			  pullword W_StartLine

		jsl W_MakeCaret

DSExit
		return

		ENDP



****************************************************************
* W_DelSelect - deletes selection and turns off selc
W_DeleteRangeD	PROC		EXPORT

		input StPar:w,W_STLIne:w,StOffset:w,EPar:w,ELine:w,W_eOffset:w
		local Q_Rect:r,temp:w
		output OPar:w,OLine:w,OOffset:w
		begin +b

		pushlong W_CurDoc
		_SetPort

		pushword StPar
		pushword W_STLIne
		pushlong #0
		jsl W_PutOnScreen

		pha
		pha
		pha
		pushword StPar
		pushword W_STLIne
		pushword StOffset
		pushword EPar
		pushword ELine
		pushword W_eOffset
		jsl W_DeleteRange
		pullword OOffset
		pullword OLine
		pullword OPar

		jsl W_CalcPages

		pushlong !Q_Rect
		jsl W_CalcDocRect

		pha
		pha
		pushword OPar
		lda Oline
		beq DoPush
		dec a
DoPush	pha
		jsl W_LineToTopPixel
		pla
		pla
		sta temp
		scmpw temp,Q_Rect
		bcc NoChan
		moveword temp,Q_Rect

NoChan
		pushlong !Q_Rect
		_ClipRect

		pushlong !Q_Rect
		_EraseRect

		jsl W_UpdateText

		jsl W_CheckDocPos

DSExit
		return

		ENDP
		END

