
	load 'macros.dump'
	include 'driver.equ'
	include 'pl.equ'
	include 'scrap.equ'
	
;-----------------------------------------------
;
;   Imported addresses
;
;-----------------------------------------------

	IMPORT	D_ClosePicture
	IMPORT	D_CheckPurge
	IMPORT	X_CopyOneHandle
	IMPORT	X_CopyThread
	IMPORT	D_Deref
	IMPORT	X_DisposeScrap
	IMPORT	X_DisposeThread
	IMPORT	D_KillFont
	IMPORT	D_MemoryError
	IMPORT	P_BoundsRect
	IMPORT	P_BuildUndo
	IMPORT	P_CheckHand
	IMPORT	P_ContentRect
	IMPORT	P_CurrentWin
	IMPORT	P_DefFont
	IMPORT	P_DefSize
	IMPORT	P_DefStyle
	IMPORT	P_DelObjList
	IMPORT	P_DelObjects
	IMPORT	P_DeselectAll
	IMPORT	P_DrawObject
	IMPORT	P_DrawRgn
	IMPORT	P_Entry
	IMPORT	P_errorAlert
	IMPORT	P_FixMenus
	IMPORT	P_FixRect
	IMPORT	P_GetPictSize
	IMPORT	P_HotRect
	IMPORT	P_ImportHdl
	IMPORT	P_ImportType
	IMPORT	P_LastObj
	IMPORT	P_ListOp
	IMPORT	P_LoadWindowStuff
	IMPORT	P_local2PL
	IMPORT	P_NewObj
	IMPORT	P_NewTool
	IMPORT	P_NotActive
	IMPORT	P_ObjList
	IMPORT	P_PL2local
	IMPORT	P_Page
	IMPORT	P_PageMode
	IMPORT	P_PastePt
	IMPORT	P_Placing
	IMPORT	P_ThreadDir
	IMPORT	P_ThreadHdl
	IMPORT	X_PostScrap
	IMPORT	D_ScreenPort
	IMPORT	X_SwitchFont
	IMPORT	T_Clear
	IMPORT	T_Copy
	IMPORT	T_CpyOrClrObj
	IMPORT	T_CurParHdl
	IMPORT	T_Deactivate
	IMPORT	T_Dot
	IMPORT	T_DotLine
	IMPORT	T_DotObj
	IMPORT	T_DotOffset
	IMPORT	T_DotParag
	IMPORT	T_DrawRuler
	IMPORT	T_Editing
	IMPORT	T_GetParSize
	IMPORT	T_InvSelect
	IMPORT	T_Mark
	IMPORT	T_MarkLine
	IMPORT	T_MarkObj
	IMPORT	T_MarkOffset
	IMPORT	T_MarkParag
	IMPORT	T_Offset2Line
	IMPORT	T_PL2WPText
	IMPORT	T_Paste
	IMPORT	T_ReThread
	IMPORT	T_TextSelect
	IMPORT	T_WP2PLText

;-----------------------------------------------
;
;   Forward addresses and entries
;
;-----------------------------------------------

	ENTRY	P_AddObjList
	ENTRY	P_ClearPrim
	ENTRY	P_Copy
	ENTRY	P_CopyObjList
	ENTRY	P_CopyPrim
	ENTRY	P_DrawImage
	ENTRY	P_GetCenter
	ENTRY	P_KillImport




;------------------------------------------------------------------------------
;
; P_Cut (Window:l) : ImageRoutine:l
;

P_Cut	PROC		EXPORT
			;Using P_Data
			;Using T_Data
			;Using X_ClipData

		input  Window:l
		output ImageRoutine:l
		local  SType:w,ScrapHdl:l

		error  Err

		begin +b

		in Window:l
		out ImageRoutine:l,SType:w,ScrapHdl:l
		xerr Err
		xcall P_Copy
		bcs Exit

		call X_PostScrap,in=(SType:w,ScrapHdl:l)
		call P_ClearPrim,in=(#1:w)

Exit	return
		ENDP





;------------------------------------------------------------------------------
;
; P_Copy (Window:l) : ImageRoutine:l,SType:w,ScrapHdl:l
;

P_Copy	PROC		EXPORT
			;Using P_Data
			;Using P_ObjData
			;Using T_Data
			;Using X_ClipData

		input  Window:l
		output ImageRoutine:l,SType:w,ScrapHdl:l
		error  Err

		begin +b

		jsl P_Entry

		stz Err
		stz SType
		stzl ImageRoutine
		call P_BuildUndo,in=(#P_NoUndo:w)

		lda T_Editing
		beq NotText

		lda T_TextSelect
		beq Exit
		call T_Copy,out=(ScrapHdl:l),err=(Err)
		bcs Exit

		call T_PL2WPText,in=(ScrapHdl:l)
		moveword #WPText,SType
		bra Exit


NotText
		call P_CopyPrim,out=(ScrapHdl:l),err=(Err)
		bcs Exit
		cpzl ScrapHdl
		beq Exit

		moveword #PLPict,SType
		movelong #P_DrawImage,ImageRoutine

Exit
		return
		ENDP




;------------------------------------------------------------------------------
;
; P_Paste (Window:l,ScrapHdl:l,X_ScrapType:w,PasteType:w,Where:l)
;
; Window	- Window to paste into
; ScrapHdl  - Handle to the scrap
; X_ScrapType - The type of scrap
; PasteType - 0:from menu; 1:directional; 2:import
; Where	 - Used if paste is directional

P_Paste	PROC		EXPORT
			;Using P_Data
			;Using P_ObjData
			;Using T_Data
			;Using X_ClipData

		input Window:l,ScrapHdl:l,X_ScrapType:w,PasteType:w,Where:l
		local ObjRect:r,Vert:w,Horiz:w,MidPt:w,Pt:l
		local Hdl:l,Ptr:l,PCount:w,OldWindow:l,OldEditing:w

		error Err

		begin +b

		stz Err
		movelong P_CurrentWin,OldWindow

		cmpl Window,P_CurrentWin
		beq Active

		inc P_NotActive
		call P_LoadWindowStuff,in=(Window:l)
		moveword T_Editing,OldEditing
		stz T_Editing
Active


		jsl P_Entry

		call P_BuildUndo,in=(#P_NoUndo:w)
		jsl P_KillImport


		cmpw PasteType,#1
		bne NotDir
		rcall P_local2PL,in=(Where:ax),out=(Where:ax)
		bra WhereSet
NotDir	rcall P_GetCenter,out=(Where:ax)
WhereSet

		cmpw X_ScrapType,#WPTEXT
		jeq PasteText

		call T_Deactivate,in=(#1:w,#1:w)
		lda X_ScrapType
		cmp #PICT
		beq PastePict
		cmp #PLPICT
		jeq PasteObj
		brl Done


PastePict
		lda PasteType
		cmp #2
		jeq ImportPict

		call P_GetPictSize,in=(ScrapHdl:l),out=(Pt:l)
		lsr Pt
		lsr Pt+2

		subword Where,Pt,ObjRect
		subword Where+2,Pt+2,ObjRect+2

		lda P_PageMode
		bne MakePictObj

		lda ObjRect
		bpl TryLeft
		stz ObjRect
TryLeft	lda ObjRect+2
		bpl MakePictObj
		stz ObjRect+2



; Make D_New object code set the obj bounds from the picture

MakePictObj
		movelong ObjRect,ObjRect+4

		call P_NewTool,in=(#P_ARROW:w,#1:w)
		call P_NewObj,in=(#P_PICTURE:w,!ObjRect:l,ScrapHdl:l),out=(a:l)
		brl Done


ImportPict
		inc P_Placing
		moveword #1,P_ImportType
		movelong ScrapHdl,P_ImportHdl
		stzl P_ThreadHdl
		brl Done




PasteObj
		cmpw PasteType,#1
		bne NotDir2
		movelong Where,P_PastePt
NotDir2

		call P_NewTool,in=(#P_ARROW:w,#1:w)
		call P_AddObjList,in=(ScrapHdl:l)
		brl Done



PasteText
		movelong [ScrapHdl],Ptr
		moveword [Ptr],PCount
		cmp #2500
		blt Okay
		call P_errorAlert,in=(#0:w)
		brl KillScrap
Okay


; Convert the scrap type

		in P_DefSize:b,P_DefStyle:b,P_DefFont:w,#0:w,ScrapHdl:l
		xcall X_SwitchFont

		call T_WP2PLText,in=(ScrapHdl:l),err=(Err)
		jcs KillScrap


		lda T_Editing
		bne InsertText

		cmpw PasteType,#2
		beq ImportText


; Make a D_New Q_Text object and thread

NewTextObj
		subword Where,#30,ObjRect
		addword Where,#30,ObjRect+4
		subword Where+2,#100,ObjRect+2
		addword Where+2,#100,ObjRect+6

		call P_NewTool,in=(#P_ARROW:w,#1:w)
		call P_NewObj,in=(#P_ALPHA:w,!ObjRect:l,ScrapHdl:l),out=(a:l)
		brl Done


ImportText
		inc P_Placing
		stz P_ImportType
		stzl P_ThreadHdl
		stz P_ThreadDir
		movelong ScrapHdl,P_ImportHdl
		bra Done


InsertText
		call P_CheckHand,in=(#$8000:l),err=(Err)
		bcc Okay2

		call P_errorAlert,in=(#1:w)
		call X_DisposeThread,in=(ScrapHdl:l,#1:w)
		bra Done
Okay2

		movelong T_CurParHdl,Hdl
		movelong [Hdl],Ptr
		addword [Ptr],PCount,a
		cmp #2500
		blt Okay3

		call P_errorAlert,in=(#0:w)
		call X_DisposeThread,in=(ScrapHdl:l,#1:w)
		bra Done

Okay3
		call T_Paste,in=(ScrapHdl:l,#1:w)
		bra Done


KillScrap
		call X_DisposeScrap,in=(X_ScrapType:w,ScrapHdl:l)


Done
		jsl P_FixMenus

		lda P_NotActive
		beq Exit
		moveword OldEditing,T_Editing
		call P_LoadWindowStuff,in=(OldWindow:l)
		stz P_NotActive

Exit	return
		ENDP





;------------------------------------------------------------------------------
;
; P_Clear ()
;

P_Clear	PROC		EXPORT
		begin +b

		jsl P_Entry
		call P_ClearPrim,in=(#0:w)

		return
		ENDP




;------------------------------------------------------------------------------
;
; P_ClearPrim (D_DoCut:w)
;

P_ClearPrim	PROC		EXPORT
			;Using P_Data
			;Using T_Data

		input D_DoCut:w
		begin

		lda T_Editing
		beq DoObj

		lda D_DoCut
		bne @Cut
		pushword #P_ClearTextUndo
		bra Build
@Cut	pushword #P_CutTextUndo
Build	jsl P_BuildUndo

		jsl T_Clear
		bra Exit


DoObj
		lda D_DoCut
		bne Cut2
		pushword #P_ClearObjUndo
		bra Build2
Cut2	pushword #P_CutObjUndo
Build2	jsl P_BuildUndo

		call P_DelObjects,in=(#0:w)


Exit	jsl P_FixMenus

		return
		ENDP



;------------------------------------------------------------------------------
;
; P_SelectAll ()
;

P_SelectAll	PROC		EXPORT
			;Using P_DATA
			;Using P_OBJDATA
			;Using T_Data

		local ParagHdl:l,ParagPtr:l

		begin +b

		jsl P_Entry

		lda T_Editing
		jeq SelObject

		call P_BuildUndo,in=(#0:w)
		jsl T_InvSelect

		stz T_DotParag
		moveword #7,T_DotOffset
		movelong T_CurParHdl,ParagHdl
		movelong [ParagHdl],ParagPtr
		lda [ParagPtr]
		dec a
		sta T_MarkParag
		rcall T_GetParSize,in=(a:a),out=(a:a)
		dec a					 ; No CR
		sta T_MarkOffset


		in T_DotParag:w,T_DotOffset:w
		out T_DotObj:l,T_DotLine:w
		xcall T_Offset2Line


		in T_MarkParag:w,T_MarkOffset:w
		out T_MarkObj:l,T_MarkLine:w
		xcall T_Offset2Line

		call T_DrawRuler
		cmpl T_Dot,T_Mark
		beq Exit

		moveword #1,T_TextSelect
		jsl T_InvSelect
		bra Exit

SelObject	call P_NewTool,in=(#P_Arrow:w,#1:w)
		call P_ListOp,in=(P_ObjList:l,#PL_SelectAll:w,#0:l,#0:l)

Exit	jsl P_FixMenus
		return
		ENDP





;------------------------------------------------------------------------------
;
; P_Duplicate ()
;

P_Duplicate	PROC		EXPORT
			;Using P_Data
			;Using P_ObjData

		local ObjList:l

		begin +b

		jsl P_Entry
		call P_BuildUndo,in=(#P_NoUndo:w)
		call P_CopyPrim,out=(ObjList:l)
		bcs _MemErr

		call P_AddObjList,in=(ObjList:l)

Exit	return

_MemErr
		jsl D_MemoryError
		bra Exit

		ENDP




;------------------------------------------------------------------------------
;
; P_CopyPrim (): ObjList:l
;

P_CopyPrim	PROC		EXPORT
			;Using P_Data
			;Using P_ObjData

		output ObjList:l
		error  Err

		begin

		call P_CopyObjList,in=(P_ObjList:l,#1:w),out=(ObjList:l),err=(Err)
		bcs Exit

		call P_BoundsRect,in=(ObjList:l,#P_HotRect:l),out=(a:w)


; Set P_PastePt to middle of the bounds rectangle plus an offset

		addword P_HotRect,P_HotRect+4,a
		lsr a
		addword a,#6,P_PastePt
		addword P_HotRect+2,P_HotRect+6,a
		lsr a
		addword a,#12,P_PastePt+2


; Offset object list to start at (0,0)

		pushlong ObjList
		pushword #PL_OffsetObj
		subword #0,P_HotRect+2,s
		subword #0,P_HotRect,s
		pushlong #0
		jsl P_ListOp

		lda P_PageMode
		beq Exit

		call P_FixRect,in=(#P_HotRect:l,#P_RECTANGLE:w,#1:w,#0:w)

Exit	return
		ENDP




;-----------------------------------------------------------------------------
;
; P_CopyObjList (ObjHdl:l,CopyData:w) : CopyList:l
;
; If CopyData is true, any handles hanging off the object are also copied.

P_CopyObjList	PROC		EXPORT
			;Using P_Data
			;Using P_ObjData
			;Using T_Data
			;Using T_TextEqu

		input  ObjHdl:l,CopyData:w
		output CopyList:l
		error  Err

		local ObjPtr:l,NewObj:l,NewPtr:l,LastObj:l,LastPtr:l
		local ObjNo:w,Size:l,ParagHdl:l,PictHdl:l,PictSize:l
		local SPar:w,EPar:w,SOffset:w,EOffset:w,Q_Line:w,LinePtr:l

		begin +b

		stz Err
		stzl CopyList
		stzl LastObj
		stz ObjNo


WhileLoop	cpzl ObjHdl
		jeq EndLoop

		rcall D_Deref,in=(ObjHdl:ax),out=(ObjPtr:ax)
		moveword [ObjPtr]:#P_Selected,a
		jeq NextObject

		call X_CopyOneHandle,in=(ObjHdl:l),out=(NewObj:l),err=(err)
		jcs CleanUp

		lda CopyData
		jeq DidObject



; If its a Q_Text object, call X_CopyWPScrap
; If its a picture, copy the PictHdl

		moveword [ObjPtr]:#P_Type,a
		cmp #P_ALPHA
		jne TryPict


; If this is the only object in the thread, I can copy it all.
; Otherwise I need to call T_Copy with the proper Dot and D_Mark.

		movelong [ObjPtr]:#P_ParagHdl,ParagHdl
		cpzl [ObjPtr]:#P_PThread
		bne PartCopy
		cpzl [ObjPtr]:#P_NThread
		bne PartCopy

		call X_CopyThread,in=(ParagHdl:l,#1:w),out=(ParagHdl:l),err=(Err)
		jcs PreCleanUp
		bra SetParHdl

PartCopy
		call T_CpyOrClrObj,in=(ObjPtr:l,#1:w),out=(ParagHdl:l)

SetParHdl
		movelong [NewObj],NewPtr
		movelong ParagHdl,[NewPtr]:#P_ParagHdl
		lda #0
		moveword a,[NewPtr]:#P_PThread
		moveword a,[NewPtr]:#P_PThread+2
		moveword a,[NewPtr]:#P_NThread
		moveword a,[NewPtr]:#P_NThread+2
		bra DidObject


TryPict
		cmp #P_PICTURE
		bne DidObject

		in [ObjPtr]:#P_PictHandle:l
		out PictHdl:l
		xerr Err
		xcall X_CopyOneHandle
		jcs PreCleanUp

		movelong [NewObj],NewPtr
		movelong PictHdl,[NewPtr]:#P_PictHandle


DidObject

; Set CopyList if its the first object
		cpzl CopyList
		bne Set
		movelong NewObj,CopyList
Set

; Maintain the links
		movelong [NewObj],NewPtr
		movelong LastObj,[NewPtr]:#P_Prev
		movelong #0,[NewPtr]:#P_Next
		cpzl LastObj
		beq First
		movelong [LastObj],LastPtr
		movelong NewObj,[LastPtr]:#P_Next
First

		moveword ObjNo,[NewPtr]:#P_UndoData
		movelong NewObj,LastObj


NextObject
		tool _HUnlock,in=(ObjHdl:l)
		inc ObjNo
		movelong [ObjPtr],ObjHdl
		brl WhileLoop
EndLoop



Exit	return

PreCleanUp	tool _DisposeHandle,in=(NewObj:l)
CleanUp	call P_DelObjList,in=(CopyList:l,CopyData:w,#1:w)
		stzl CopyList
		bra Exit

		ENDP




;------------------------------------------------------------------------------
;
; P_AddObjList (ObjList:l)

P_AddObjList	PROC		EXPORT
			;Using P_Data
			;Using P_ObjData
			;Using T_Data

		input ObjList:l
		local CurObj:l,CurPtr:l,NextObj:l,ObjHdl:l,ObjPtr:l
		local RgnHdl:l,ScreenRect:r,BRect:r,Pt:l

		begin

		jsl P_DeselectAll

		cpzl ObjList
		jeq Exit


; Make sure PastePt is on screen

		rcall P_PL2local,in=(P_PastePt:ax),out=(Pt:ax)
		tool _PtInRect,in=(!Pt:l,#P_ContentRect:l),out=(a:w)
		bne OnScreen
		rcall P_GetCenter,out=(P_PastePt:ax)
OnScreen



; Set Pt to offset each object to

		call P_BoundsRect,in=(ObjList:l,!BRect:l),out=(a:w)
		lsr BRect+4
		subword P_PastePt,BRect+4,Pt
		lsr BRect+6
		subword P_PastePt+2,BRect+6,Pt+2


; Offset object list

		call P_ListOp,in=(ObjList:l,#PL_OffsetObj:w,Pt:l,#0:l)

		tool _NewRgn,out=(RgnHdl:l)
		call P_ListOp,in=(ObjList:l,#PL_AddUpdate:w,RgnHdl:l,#0:l)


		movelong ObjList,CurObj

Loop
		movelong [CurObj],CurPtr
		movelong [CurPtr],NextObj

		cmpw [CurPtr]:#P_Type,#P_ALPHA
		bne Next
		lda #0
		moveword a,[CurPtr]:#P_PThread
		moveword a,[CurPtr]:#P_PThread+2
		moveword a,[CurPtr]:#P_NThread
		moveword a,[CurPtr]:#P_NThread+2
		moveword a,[CurPtr]:#P_StartParag
		moveword a,[CurPtr]:#P_StartLine
		moveword P_Page,[CurPtr]:#P_PageNo
		call T_ReThread,in=(CurObj:l)

Next	cpzl NextObj
		beq EndLoop
		movelong NextObj,CurObj
		bra Loop
EndLoop


		movelong [CurObj],CurPtr
		movelong P_ObjList,[CurPtr]:#P_Next

		cpzl P_ObjList
		beq NoObjects

		movelong P_ObjList,ObjHdl
		movelong [ObjHdl],ObjPtr
		movelong CurObj,[ObjPtr]:#P_Prev
		bra SetList

NoObjects	movelong CurObj,P_LastObj
SetList	movelong ObjList,P_ObjList


		call P_DrawRgn,in=(RgnHdl:l)

		addword P_PastePt,#6,P_PastePt
		addword P_PastePt+2,#12,P_PastePt+2


Exit
		return
		ENDP



;-------------------------------------------------------------------------------
;
; P_GetCenter () : Q_center:ax
;
; Gets the Q_center of the screen and returns it in D_PL Coordinates.

P_GetCenter	PROC		EXPORT
			;Using P_Data

		addword P_ContentRect+2,P_ContentRect+6,a
		lsr a
		tax

		addword P_ContentRect,P_ContentRect+4,a
		lsr a

		rcall P_local2PL,in=(ax:ax),out=(ax:ax)

		rtl
		ENDP




;------------------------------------------------------------------------------
;
; P_DrawImage (Where:l)
;

P_DrawImage	PROC		EXPORT
			;Using P_Data

		input Where:l
		local Q_Rect:r,Tmp:w

		begin +b

		subword P_HotRect+4,P_HotRect,a
		lsr a
		sta Tmp
		subword Where,Tmp,Q_Rect
		addword Where,Tmp,Q_Rect+4

		subword P_HotRect+6,P_HotRect+2,a
		lsr a
		sta Tmp
		subword Where+2,Tmp,Q_Rect+2
		addword Where+2,Tmp,Q_Rect+6

		cmpw Q_Rect,Q_Rect+4
		beq Q_Line
		cmpw Q_Rect+2,Q_Rect+6
		beq Q_Line
		tool _FrameRect,in=(!Q_Rect:l)
		bra Exit

Q_Line
		tool _MoveTo,in=(Q_Rect:l)
		tool _LineTo,in=(Q_Rect+4:l)

Exit	return
		ENDP




;------------------------------------------------------------------------------
;
; P_MakePict (ObjHdl:l) : PictHdl:l
;
; This routine makes a picture out of an object list.
; It can be called when I get a convert scrap message routine from the
; driver or when I get unloaded.

P_MakePict	PROC		EXPORT
			;Using D_GlobalData
			;Using P_ObjData
			;Using P_Data
			;Using T_Data

		input  ObjHdl:l
		output PictHdl:l
		error  Err

		local  PicFrame:r,ObjPtr:l,LastObj:l,OldPort:l,ClipRgn:l

		begin +b


		stz Err

		pushword P_PageMode
		stz P_PageMode



; Get the bounding Q_Rect

		call P_BoundsRect,in=(ObjHdl:l,!PicFrame:l),out=(a:w)
		call P_FixRect,in=(!PicFrame:l,#P_RECTANGLE:w,#0:w,#1:w)


; Get the last object, so I can draw them back to front.

Loop
		movelong ObjHdl,LastObj
		movelong [ObjHdl],ObjPtr
		movelong [ObjPtr],ObjHdl
		cpzl ObjHdl
		bne Loop


		tool _GetPort,out=(OldPort:l)
		tool _SetPort,in=(>D_ScreenPort:l)
		jsl D_KillFont

		tool _NewRgn,out=(ClipRgn:l)
		tool _GetClip,in=(ClipRgn:l)
		tool _ClipRect,in=(!PicFrame:l)
		tool _OpenPicture,in=(!PicFrame:l),out=(PictHdl:l),err=(Err)
		bcs RestorePort

		tool _SetFontFlags,in=(#4:w)
		tool _SetTextMode,in=(#modeForeCopy:w)



; Draw the objects
		movelong LastObj,ObjHdl

WhileLoop
		cpzl ObjHdl
		beq EndLoop

		call P_DrawObject,in=(ObjHdl:l,#1:w),err=err
		bcs	endloop

		movelong [ObjHdl],ObjPtr
		movelong [ObjPtr]:#P_Prev,ObjHdl
		bra WhileLoop
EndLoop


		jsl D_ClosePicture
		bcc	@ok
@picErr	lda	#$201
		bra	@bad
		
@ok		lda	err
		bne	@bad
		jsl D_CheckPurge
		bcc RestorePort
@bad	sta Err
		tool _KillPicture,in=(PictHdl:l)
		jsl D_CheckPurge

RestorePort
		tool _PenNormal
		tool _SetClip,in=(ClipRgn:l)
		tool _SetPort,in=(OldPort:l)

		pullword P_PageMode

		return
		ENDP







;------------------------------------------------------------------------------
;
; P_KillImport ()
;
; Kills a pending import or thread operation.

P_KillImport	PROC		EXPORT
			;Using P_Data

		begin

		lda P_Placing
		beq Exit

		stz P_Placing
		cpzl P_ThreadHdl
		bne ZeroStuff

		lda P_ImportType
		beq Q_Text
		tool _DisposeHandle,in=(P_ImportHdl:l)
		bra ZeroStuff

Q_Text
		call X_DisposeThread,in=(P_ImportHdl:l,#1:w)

ZeroStuff
		stzl P_ThreadHdl
		stzl P_ImportHdl

Exit	return
		ENDP
		END

