***	PROFILE  ---  68000 version
***
***	Copyright © 1990  Glen McDiarmid
***
***	The source for this file is supplied to purchasers of Macro68
***	under the following conditions:
***	
***	1) The executable and the source for it may NOT be distributed in
***	   any manner whatsoever.
***						DigiSoft

**	Tabstops : variable
**	Assemble with Macro68
**	Requires resident maclib > AllSyms.mac (or equivilent includes)


	if1
		EXEOBJ
		ERRFILE	'ram:assem.output'
		VERBOSE
		MC68000
		SUPER
		STRICT
		MULTIPASS
	endc

	objfile	'ram:profile_68000'

**********************************************************************
;ACCESS_READ	equ	-2
;cli_CommandName	equ	$10
;fib_Size	equ	124
;IDNestCnt	equ	$126
;LN_TYPE	equ	8
;MEMF_CLEAR	equ	$10000
;MEMF_PUBLIC	equ	1
;MODE_NEWFILE	equ	1006
;MODE_OLDFILE	equ	1005
;NT_LIBRARY	equ	9
;pr_CLI	equ	172
;TC_TRAPCODE	equ	50
;ThisTask	equ	$114
;_LVOAbleICR	equ	-18
;_LVOAddICRVector	equ	-6
;_LVOAllocMem	equ	-$C6
;_LVOAllocTrap	equ	-$156
;_LVOClose	equ	-$24
;_LVOCloseLibrary	equ	-$19E
;_LVODeleteFile	equ	-$48
;_LVOExamine	equ	-$66
;_LVOExecute	equ	-$DE
;_LVOFreeMem	equ	-$D2
;_LVOFreeTrap	equ	-$15C
;_LVOLoadSeg	equ	-$96
;_LVOLock	equ	-$54
;_LVOOpen	equ	-$1E
;_LVOOpenLibrary	equ	-$228
;_LVOOpenResource	equ	-$1F2
;_LVOOutput	equ	-$3C
;_LVORead	equ	-$2A
;_LVORemICRVector	equ	-12
;_LVOSetICR	equ	-24
;_LVOUnLoadSeg	equ	-$9C
;_LVOUnLock	equ	-$5A
;_LVOWrite	equ	-$30
**********************************************************************

	jmp	(RealProgStart)

	db	'PR V2.100',0
	cnop	0,2
RealProgStart:
	lea	(BssStart,PC),A1
	move.w	#(((BssEnd-BssStart)+3)/4)-1,D1
2$	clr.l	(A1)+
	dbra	D1,2$

	move.l	SP,(SaveSP)
	move.w	#-1,(jsrtrap)
	clr.b	(-1,A0,D0.W)
	move.l	A0,(SaveA0)
	move.l	D0,(SaveD0)
	movea.l	(4),A6
	lea	(DosName,PC),A1
	moveq	#0,D0
	jsr	(_LVOOpenLibrary,A6)
	move.l	D0,(Dos_Base)
	movea.l	(4),A6
	movea.l	(ThisTask,A6),A0
	move.l	A0,(OurTask)
	move.l	($68),(poke1)
	movea.l	(4),A6
	movea.l	(SaveA0,PC),A0
	move.l	(SaveD0,PC),D0
	bsr	FindWordStart
	lea	(RealProgName,PC),A1
	moveq	#0,D1
1$	move.b	(A0)+,D0
	cmpi.b	#' ',D0
	bls.b	FoundNameEnd
	addq.l	#1,D1
	move.b	D0,(A1)+
	bra.b	1$

FoundNameEnd	subq.l	#1,A0
	clr.b	(A1)+
	move.l	D1,(InputFilenameLength)
	bsr	FindWordStart2
	move.l	A0,D1
	lea	(ProgParms,PC),A1
	clr.l	(InputParmsLength)
	move.b	(A0),D2	; get fence
	beq.b	FoundParmsEnd
	addq.l	#1,A0
2$	cmpi.b	#'A',D2
	bcc	ErrorExit18
1$	move.b	(A0)+,D0
	cmp.b	D0,D2
	beq.b	FoundParmsEnd
	addq.l	#1,(InputParmsLength)
	move.b	D0,(A1)+
	bne.b	1$
	subq.l	#1,A1
	subq.l	#1,(InputParmsLength)
FoundParmsEnd	move.b	#10,(A1)
	addq.l	#1,(InputParmsLength)
	move.l	A0,(OldCommandPointer)
	bsr	FindWordStart2
	lea	(DefaultWithFile,PC),A1
	beq.b	2$
	cmpi.b	#'-',(A0)+
	bne	ErrorExit2
	moveq	#$5F,D0
	and.b	(A0)+,D0
	cmpi.b	#'W',D0
	beq.b	1$
	subq.l	#2,A0
2$	move.l	A1,D1
	bra.b	JustWith

1$	cmpi.b	#' ',(A0)
	bls.b	PLBase2
	move.l	A0,(OldCommandPointer)
	move.l	A1,-(SP)
	bsr	SetNameJoin
	move.l	(SP)+,D1
JustWith	move.l	D1,D3
	move.l	#MODE_OLDFILE,D2
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOOpen,A6)
	movea.l	(SP)+,A6
	move.l	D0,(WithFilehandle)
	bne.b	1$
	cmpi.l	#DefaultWithFile,D3
	bne	ErrorExit20
	bra.b	PLBase2
1$	move.l	D0,D1
	lea	(InSourceBuf,PC),A0
	move.l	A0,D2
	move.l	#$3FFF,D3
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVORead,A6)
	movea.l	(SP)+,A6
	movea.l	D2,A0
	clr.b	(0,A0,D0.W)
	tst.l	D0
	beq	ErrorExit21
	st	(WithFlag)
; Remainder of command line is parameters for us!!

PLBase2	bsr	FindWordStart2
	bne.b	1$
	tst.b	(WithFlag)
	beq.b	NoParms
	movea.l	(OldCommandPointer,PC),A0
	clr.b	(WithFlag)
	bra.b	PLBase2

1$	cmpi.b	#'-',(A0)+
	bne	ErrorExit2
PLBase	bsr	FindWordStart2
	lea	(ParameterList,PC),A1
	move.b	(A0)+,D0
	beq.b	NoParms
CheckNextParm	move.w	(A1)+,D1
	beq	ErrorExit2
	move.w	(A1)+,D2
	cmp.b	D1,D0
	beq.b	FoundRightParm
	lsr.w	#8,D1
	cmp.b	D1,D0
	bne.b	CheckNextParm
FoundRightParm	pea	(PLBase2,PC)
	jmp	(PLBase,PC,D2.W)

NoParms	movea.l	(OurTask,PC),A0
	movea.l	(pr_CLI,A0),A0
	adda.l	A0,A0
	adda.l	A0,A0
	movea.l	(cli_CommandName,A0),A1
	adda.l	A1,A1
	adda.l	A1,A1
	move.b	(InputFilenameLength+3,PC),(A1)+
	lea	(RealProgName,PC),A0
1$	move.b	(A0)+,(A1)+
	bne.b	1$
3$	move.l	A1,D0
	andi.b	#3,D0
	beq.b	2$
	clr.b	(A1)+
	bra.b	3$

2$	lea	(ProgParms,PC),A0
	move.b	(InputParmsLength+3,PC),(A1)+
	move.l	A1,(SaveA0)
4$	move.b	(A0)+,(A1)+
	bne.b	4$
	clr.b	(A1)+
	clr.b	(A1)+
	clr.b	(A1)+
	lea	(RealSourceName,PC),A0
	tst.b	(A0)
	bne.b	5$
	lea	(RealProgName,PC),A0
5$	lea	(OutputFileName,PC),A1
	tst.b	(A1)
	bne.b	Pr3Label1
CopyMemLoop	move.b	(A0)+,(A1)+
	bne.b	CopyMemLoop
	subq.l	#1,A1
	movea.l	A1,A0
	moveq	#$5F,D0
	and.b	-(A0),D0
	cmpi.b	#'M',D0
	bne.b	1$
	moveq	#$5F,D0
	and.b	-(A0),D0
	cmpi.b	#'S',D0
	bne.b	1$
	moveq	#$5F,D0
	and.b	-(A0),D0
	cmpi.b	#'A',D0
	bne.b	1$
	moveq	#$5F,D0
	and.b	-(A0),D0
	cmpi.b	#'.',D0
	bne.b	1$
	movea.l	A0,A1
1$	move.b	#'.',(A1)+
	move.b	#'p',(A1)+
	move.b	#'r',(A1)+
	move.b	#'f',(A1)+
	clr.b	(A1)+
Pr3Label1	lea	(RealProgName,PC),A0
	move.l	A0,D1
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOLoadSeg,A6)
	movea.l	(SP)+,A6
	move.l	D0,(SegStart)
	beq	ErrorExit3
	lsl.l	#2,D0
	movem.l	D0-D7/A0-A6,-(SP)
	move.l	#40,D1
timecountloop	movea.l	D0,A0
	move.l	(A0),D0
	beq.b	timecountdone
	lsl.l	#2,D0
	addi.l	#4,D1
	bra.b	timecountloop

timecountdone	cmpi.l	#$8000,D1
	bcs.b	withinrange
	move.w	#$8000,D1
withinrange	cmp.w	(Interval,PC),D1
	bls.b	highenough
	move.w	D1,(Interval)
highenough	movem.l	(SP)+,D0-D7/A0-A6
	movem.l	D0/D2,-(SP)
	tst.b	(libraryflag)
	beq	7$
	movem.l	D0-D7/A0-A6,-(SP)
	movea.l	(OurTask),A0
	move.l	#TrapHandler,(TC_TRAPCODE,A0)
	moveq	#-1,D0
	move.w	D0,(jsrtrap)
	jsr	(_LVOAllocTrap,A6)
	tst.l	D0
	bmi	ErrorExit22
	move.l	D0,D1
	ori.w	#%0100111001000000,D1
	move.w	D1,(jsrtrap)
	lsl.b	#2,D0
	addi.l	#$80,D0	; address of trap
	move.l	D0,(trapaddress)
	movea.l	D0,A0
	bsr	disable
	move.l	(A0),(oldtrap)
	move.l	#newtrap,(A0)
	bsr	enable
	movem.l	(SP)+,D0-D7/A0-A6
	movea.l	D0,A0
6$	move.l	(-4,A0),D1
	move.l	(A0)+,D2
	lsl.l	#2,D2
4$	cmpi.w	#$4EAE,(A0)
	beq.b	1$
	cmpi.w	#$4EEE,(A0)
	bne.b	2$
1$	addq.l	#2,A0
	subq.l	#2,D1
	beq.b	5$
	move.w	(A0),D0
	ext.l	D0
	neg.l	D0
	cmpi.w	#$600,D0
	bhi.b	2$
	divu.w	#6,D0
	swap	D0
	tst.w	D0
	bne.b	2$	; must be even multiple of 6
	cmpi.b	#$AE,(-1,A0)
	beq.b	3$
	bclr	#7,(A0)
3$	move.w	(jsrtrap,PC),(-2,A0)
2$	addq.l	#2,A0
	subq.l	#2,D1
	bne.b	4$
5$	tst.l	D2
	beq.b	7$
	movea.l	D2,A0
	bra.b	6$

7$	movem.l	(SP)+,D0/D2
	moveq	#0,D1	; total size
Pr3Label2	movea.l	D0,A2
	move.l	(-4,A2),D0
	subq.l	#8,D0
	add.l	D0,D1
	move.l	(A2),D0
	lsl.l	#2,D0
	bne.b	Pr3Label2
	move.l	D1,D0
	add.l	D0,D0
	move.l	D0,(BlockSize)
	move.l	#MEMF_CLEAR,D1
	jsr	(_LVOAllocMem,A6)
	move.l	D0,(_BigBlock)
	beq	ErrorExit4
	move.l	(SP)+,D0
	move.l	D0,(ReturnAddress)
	lea	(MyReturn,PC),A0
	move.l	A0,D0
	move.l	D0,-(SP)
	move.l	(SegStart,PC),D0
	lsl.l	#2,D0
	addq.l	#4,D0
	move.l	D0,-(SP)
	bsr	disable
	lea	(lev3int,PC),A0
	move.l	A0,($68)
	tst.b	(libraryflag)
	bne.b	1$
	movea.l	(trapaddress,PC),A0
	move.l	(oldtrap,PC),D0
	beq.b	1$
	move.l	D0,(A0)
1$	bsr	enable
	movea.l	(4),A6
	moveq	#0,D0
	lea	(CiaName,PC),A1
	jsr	(_LVOOpenResource,A6)
	move.l	D0,(Cia_Base)
	movea.l	D0,A6
	lea	(intstructure,PC),A1
	moveq	#0,D0	; interrupt bit number
	jsr	(_LVOAddICRVector,A6)
	move.w	(Interval,PC),D0
	move.b	D0,($BFE401)	; low micros
	lsr.w	#8,D0
	move.b	D0,($BFE501)	; high micros
	moveq	#1,D0
	jsr	(_LVOSetICR,A6)
	movem.l	(SaveAllRegs,PC),D1-D7/A1-A6
	movea.l	(SaveA0,PC),A0
	move.l	(InputParmsLength,PC),D0
	bne.b	2$
	moveq	#1,D0
	move.b	#10,(A0)
	clr.b	(1,A0)
2$	move.b	#$99,($BFEE01)
	rts

MyReturn	clr.b	(TimerGo)
	move.l	(Cia_Base,PC),D0
	movea.l	D0,A6
	moveq	#1,D0
	jsr	(_LVOAbleICR,A6)	; cancel interrupts
	lea	(intstructure,PC),A1
	moveq	#0,D0
	jsr	(_LVORemICRVector,A6)
	clr.l	(Cia_Base)
	move.l	(ReturnAddress,PC),D0
	move.l	D0,-(SP)
	move.l	(poke1,PC),D0
	bsr	disable
	move.l	D0,($68)
	movea.l	(trapaddress,PC),A0
	move.l	(oldtrap,PC),(A0)
	bsr	enable
	move.l	#OutputFileName,D1
	move.l	#MODE_NEWFILE,D2
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOOpen,A6)
	movea.l	(SP)+,A6
	move.l	D0,(Filehandle)
	beq	ErrorExit5
	movea.l	(_BigBlock,PC),A0
	move.l	(BlockSize,PC),D5
	lsr.l	#2,D5
	subq.l	#1,D5
	moveq	#0,D0
NextConv	add.l	(A0)+,D0
	dbra	D5,NextConv
	subi.l	#$10000,D5
	bcc.b	NextConv
	move.l	D0,(TotalTicks)
ConvAllDone:
**********************************************************************
	lea	(RealProgName,PC),A0
	move.l	A0,D1
	moveq	#ACCESS_READ,D2
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOLock,A6)
	movea.l	(SP)+,A6
	move.l	D0,(InputFileLock)
	beq	ErrorExit6
	move.l	D0,D1
	lea	(MyInfoBlock,PC),A2
	move.l	A2,D2
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOExamine,A6)
	movea.l	(SP)+,A6
	move.l	(fib_Size,A2),(InputFileSize)
	beq	ErrorExit7
	tst.l	D0
	beq	ErrorExit8
	move.l	(InputFileSize,PC),D0
	moveq	#MEMF_PUBLIC,D1
	movea.l	(4),A6
	jsr	(_LVOAllocMem,A6)
	move.l	D0,(BigInputBuf)
	beq	ErrorExit4
	lea	(RealProgName,PC),A0
	move.l	A0,D1
	move.l	#MODE_OLDFILE,D2
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOOpen,A6)
	movea.l	(SP)+,A6
	move.l	D0,(InputFilehandle)
	beq	ErrorExit9
	move.l	D0,D1
	move.l	(BigInputBuf,PC),D2
	move.l	(fib_Size,A2),D3
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVORead,A6)	; read executable
	movea.l	(SP)+,A6
	cmp.l	D0,D3
	bne	ErrorExit10
	movea.l	(BigInputBuf,PC),A3
	movea.l	(SegStart,PC),A4	; need to get hunk sizes
	adda.l	A4,A4
	adda.l	A4,A4
	move.l	A3,D7
	add.l	D0,D7	; D7 points to end of file
	cmpi.l	#$3F3,(A3)+
	beq.b	FoundHunkHeader
_ErrorExit11	bra	ErrorExit11

FoundHunkHeader	tst.l	(A3)+
	bne.b	_ErrorExit11	; new library stuff
	move.l	(A3)+,D0
	move.l	(A3)+,D1
	move.l	(A3)+,D6	; hunks to go!
	sub.l	D1,D6
	addq.l	#1,D6
	cmp.l	D0,D6
	bne.b	_ErrorExit11	; overlays!
	lsl.l	#2,D0
	adda.l	D0,A3
	cmp.l	A3,D7
	bls.b	_ErrorExit11
	movea.l	(_BigBlock,PC),A6
ScanLoop	move.l	(A3)+,D0
	cmpi.l	#$3F2,D0
	bne.b	NotHunkEnd
	cmp.l	(lasthunktype,PC),D0
	beq.b	ScanLoop
NotHunkEnd	move.l	D0,(lasthunktype)
	subi.l	#999,D0
	bcs.b	_ErrorExit11
	dbra	D0,rel_hunk_name

SkipName	move.l	(A3)+,D0
	beq.b	ScanLoop
	lsl.l	#2,D0
	adda.l	D0,A3
_ScanLoop	bra.b	ScanLoop

rel_hunk_name	dbra	D0,rel_hunk_kode

	bra.b	SkipName

rel_hunk_kode	dbra	D0,rel_hunk_data

SkipName2	move.l	(A3)+,D0
	beq.b	_ScanLoop
	move.l	A3,(LastHunk)
	lsl.l	#2,D0
	adda.l	D0,A3
	bra.b	_ScanLoop

rel_hunk_data	dbra	D0,rel_hunk_bss

	bra.b	SkipName2

rel_hunk_bss	dbra	D0,rel_hunk_reloc32

	addq.l	#4,A3
	bra.b	ScanLoop

rel_hunk_reloc32	dbra	D0,rel_hunk_reloc16

InnerScanLoop	move.l	(A3)+,D0
_ScanLoop2	beq.b	_ScanLoop
	lsl.l	#2,D0
	adda.l	D0,A3
	addq.l	#4,A3
	bra.b	InnerScanLoop

rel_hunk_reloc16	subq.w	#2,D0
	bmi	ErrorExit11
	dbra	D0,rel_hunk_symbol

	move.l	(A3)+,D0
1$	lsl.l	#2,D0
	adda.l	D0,A3
	move.l	(A3)+,D0
	bne.b	1$
	bra.b	_ScanLoop2

rel_hunk_symbol	dbra	D0,rel_hunk_debug

	bra.b	InnerScanLoop

rel_hunk_debug	dbra	D0,rel_hunk_end

	st	(FoundDebugHunkFlag)
	move.l	(A3)+,D5	; debug block size in longs
	lsl.l	#2,D5
	add.l	A3,D5
	bcs	ErrorExit17
	addq.l	#4,A3
	move.l	(A3)+,D0
	cmpi.l	#'LINE',D0
	beq.b	3$
	movea.l	D5,A3	; there may be other debug hunks
	bra.b	_ScanLoop2

3$	move.l	(A3)+,D0
	beq	ErrorExit17	;  must have name of source file
	lsl.l	#2,D0
	lea	(RealSourceName,PC),A1
	tst.b	(A1)
	beq.b	1$
	adda.l	D0,A3
	bra.b	NextLineNumberLoop3

2$	move.b	(A3)+,(A1)+
1$	dbra	D0,2$

	clr.b	(A1)+

; A6 -> working buffer
; A3 -> debug block
; A4 -> segment
; A2 -> base of current hunk
; D7 -> end of input file
; D6 = remaining hunks to process
; D5 -> end of debug hunk
; D4 = source code line number
NextLineNumberLoop3	movea.l	(LastHunk,PC),A2
NextLineNumberLoop	cmp.l	A3,D5
	bls.b	_ScanLoop3
NextLineNumberLoop2	move.l	(A3)+,D4
	move.l	(A3)+,D3
	btst	#0,D3
	bne.b	NextLineNumberLoop	; code MUST be word aligned
	add.l	D3,D3	; out buffer is double size
	move.w	D4,(0,A6,D3.L)	; store lower 16 bits of line number
	cmp.l	A3,D5
	bhi.b	NextLineNumberLoop2
_ScanLoop3	bra	ScanLoop

rel_hunk_end	dbra	D0,ErrorExit11	; all remaining hunk types illegal

	move.l	(-4,A4),D0
	subq.l	#8,D0
	add.l	D0,D0
	adda.l	D0,A6	; point to start of next hunk in buf
	move.l	(A4),D0
	beq.b	DebugStuffAllDone
	lsl.l	#2,D0
	movea.l	D0,A4	; point to start of next hunk in file
	subq.l	#1,D6
	bne	ScanLoop
DebugStuffAllDone:

; _BigBlock table now ready to use.

	tst.b	(FoundDebugHunkFlag)
	beq	ErrorExit16
	move.l	(SegStart,PC),D1
	beq.b	1$
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOUnLoadSeg,A6)
	movea.l	(SP)+,A6
	clr.l	(SegStart)
1$	move.l	(InputFilehandle,PC),D1
	beq.b	2$
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOClose,A6)
	movea.l	(SP)+,A6
	clr.l	(InputFilehandle)
2$	move.l	(BigInputBuf,PC),D0
	beq.b	3$
	movea.l	D0,A1
	move.l	(InputFileSize,PC),D0
	movea.l	(4),A6
	jsr	(_LVOFreeMem,A6)
	clr.l	(BigInputBuf)
3$	movea.l	(_BigBlock,PC),A0
	move.l	(BlockSize,PC),D7
	add.l	A0,D7	; D7 -> end of bigblock
	move.l	A0,D6	; D6 -> start of bigblock
AddTotalsLoop	cmp.l	A0,D7
	bls.b	AddTotalsAllDone
	move.w	(A0)+,D0
	move.w	(A0)+,D1
	beq.b	AddTotalsLoop
	tst.w	D0
	bne.b	AddTotalsLoop
	lea	(-8,A0),A1
	tst.w	(A0)
	bne.b	1$
	cmp.l	A1,D6
	beq.b	AddTotalsLoop	; hopeless case
1$	move.w	(-2,A0),D0
	add.w	(2,A1),D0
	bcc.b	2$
	move.w	#$FFFF,D0
2$	move.w	D0,(2,A1)
	clr.w	(-2,A0)	; just in case change later
	bra.b	AddTotalsLoop


AddTotalsAllDone:
	lea	(RealSourceName,PC),A0
	tst.b	(A0)
	beq	ErrorExit13
	move.l	A0,D1
	move.l	#MODE_OLDFILE,D2
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOOpen,A6)
	movea.l	(SP)+,A6
	move.l	D0,(RealSourceHandle)
	beq	ErrorExit14
	lea	(OutSourceBuf,PC),A5
	movea.l	A5,A4
	movea.l	(_BigBlock,PC),A3
	move.l	A3,D7
	add.l	(BlockSize,PC),D7	; limit of BigBlock
	bsr	GetNextByte
	subq.l	#1,A4
	clr.b	(FirstReadFlag)
	addq.l	#1,(LineNumber)
1$	move.l	(lastlong,PC),D0
	move.w	(A3),D0
	cmp.l	(LineNumber,PC),D0
	beq	FixSourceLoop
	tst.b	(FirstReadFlag)
	bne	FixSourceLoop
	bsr.b	CheckForInfo
	bra.b	1$
CheckForInfo:
	cmpi.b	#';',(A4)
	bne.b	6$
	cmpi.b	#'_',(1,A4)
	bne.b	6$
	cmpi.b	#'[',(2,A4)
	bne.b	6$
	cmpi.b	#']',(3,A4)
	beq.b	2$
	tst.b	(StripTotalsFlag)
	bne.b	1$
2$	bsr	GetNextByte
	cmpi.b	#10,D0
	bne.b	2$
	lea	(CommentString,PC),A2	; ";_["
	bsr	PutString
	bra.b	4$

6$	bsr	CheckOutputBuf
	bsr.b	GetNextByte
	move.b	D0,(A5)+
	cmpi.b	#10,D0
	bne.b	6$
	addq.l	#1,(LineNumber)
	rts

1$	bsr.b	GetNextByte
	cmpi.b	#10,D0
	beq.b	3$
	bsr	CheckOutputBuf
	move.b	D0,(A5)+
	bra.b	1$

3$	lea	(ExtraCommentString,PC),A2
	bsr	PutString
4$	move.l	(TotalTicks,PC),D0
	bsr	ShowDecimal
	bsr	CheckOutputBuf
	move.b	#'/',(A5)+
	bsr	CheckOutputBuf
	move.l	(ThisTaskTicks,PC),D0
	bsr	ShowDecimal
	bsr	CheckOutputBuf
	move.b	#'/',(A5)+
	bsr	CheckOutputBuf
	move.l	(RealTotalTicks,PC),D0
	bsr	ShowDecimal
	bsr	CheckOutputBuf
	move.b	#']',(A5)+
	bsr	CheckOutputBuf
	move.b	#10,(A5)+
	addq.l	#1,(LineNumber)
	rts

; A4 -> input source
; A5 -> output source

GetNextByte	cmpa.l	#InSourceEnd,A4
	bcs.b	PlentySourceLeft
	st	(FirstReadFlag)
	move.l	(RealSourceHandle,PC),D1
	move.l	#InSourceBuf,D2
	move.l	#$2000,D3	; 8k buffer
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVORead,A6)
	movea.l	(SP)+,A6
	tst.l	D0
	beq	FixSourceAllDone
	movea.l	D2,A4
	cmp.l	D0,D3
	beq.b	PlentySourceLeft
	movea.l	D2,A0
	movea.l	D2,A1
	adda.l	D3,A1
	adda.l	D0,A0
	bra.b	2$

1$	move.b	-(A0),-(A1)
2$	dbra	D0,1$

	movea.l	A1,A4	; part way through buffer
PlentySourceLeft	move.b	(A4)+,D0
	rts

FixSourceLoop2	clr.b	(StripFlag2)
FixSourceLoop	bsr.b	GetNextByte
	cmpi.b	#10,D0
	bls.b	4$
	cmpi.b	#']',D0
	beq.b	5$
6$	bsr	CheckOutputBuf
	move.b	D0,(A5)+
	bra.b	FixSourceLoop

5$	bsr	CheckOutputBuf
	move.b	D0,(A5)+
	bsr.b	GetNextByte
	cmpi.b	#10,D0
	bls.b	4$
	cmpi.b	#'Z',D0
	bhi.b	6$
	cmpi.b	#'A'-1,D0
	bls.b	6$
	move.b	D0,D1
	bsr	GetNextByte
	cmpi.b	#10,D0
	bne.b	7$
	ori.b	#' ',D1
	bsr	CheckOutputBuf
	move.b	D1,(A5)+
	bra.b	4$

7$	bsr	CheckOutputBuf
	move.b	D1,(A5)+
4$	bsr	CheckOutputBuf
	move.b	D0,(A5)+
	cmpi.b	#9,D0
	bne.b	NotCommentYet
	bsr	GetNextByte
	moveq	#1,D4
	cmpi.b	#';',D0
	bne.b	1$
	addq.b	#1,D4
	bsr	GetNextByte
	cmpi.b	#' ',D0
	bne.b	1$
	addq.b	#1,D4
	bsr	GetNextByte
	cmpi.b	#'[',D0
	bne.b	1$
	addq.b	#1,D4
	tst.b	(StripFlag)
	beq.b	2$
	st	(StripFlag2)
	bra.b	1$

2$	bsr	GetNextByte
	cmpi.b	#10,D0
	bne.b	2$
	move.b	D0,(-1,A5)	; overwrite tab
	bra.b	NotCommentYet

1$	move.w	D0,-(SP)
	bsr	CheckOutputBuf
	subq.w	#1,D4
	beq.b	3$
	move.b	#';',(A5)+
	bsr	CheckOutputBuf
	subq.w	#1,D4
	beq.b	3$
	move.b	#' ',(A5)+
3$	move.w	(SP)+,D0
	bsr	CheckOutputBuf
	move.b	D0,(A5)+
NotCommentYet	cmpi.b	#10,D0
	beq.b	7$
	bsr	CheckOutputBuf
	bra	FixSourceLoop

7$	cmp.l	A3,D7
	bls	FixSourceLoop2	; must be into data area
	move.l	(LineNumber,PC),D0
	addq.l	#1,(LineNumber)
	move.l	(lastlong,PC),D1
	move.w	(A3),D1
	cmp.l	(lastlong,PC),D1
	bcc.b	8$
	addi.l	#$10000,D1
8$	move.l	D1,(lastlong)
	cmp.l	D0,D1
	bhi	FixSourceLoop2
	tst.w	(2,A3)
	beq.b	4$
	subq.l	#1,A5
	tst.b	(StripFlag2)
	bne.b	6$
	bsr	CheckOutputBuf
	move.b	#9,(A5)+
	bsr	CheckOutputBuf
	move.b	#';',(A5)+
6$	clr.b	(StripFlag2)
	bsr	CheckOutputBuf
	move.b	#' ',(A5)+
	bsr	CheckOutputBuf
	move.b	#'[',(A5)+
	moveq	#0,D0
	move.w	(2,A3),D0
	bsr	ShowDecimal
	bsr	CheckOutputBuf
	move.b	#']',(A5)+
	moveq	#0,D0
	move.w	(2,A3),D0
	move.l	(TotalTicks,PC),D1
	lsr.l	#1,D1
	moveq	#'A'-1,D2
1$	addq.l	#1,D2
	lsr.l	#1,D1
	cmp.l	D1,D0
	bls.b	1$
	cmpi.l	#'Z',D2
	bls.b	5$
	moveq	#'Z',D2
5$	bsr	CheckOutputBuf
	move.b	D2,(A5)+
	bsr	CheckOutputBuf
	move.b	#10,(A5)+
4$	cmp.l	A3,D7
	beq	FixSourceLoop
	addq.l	#4,A3
	tst.w	(A3)
	bne	FixSourceLoop
	bra.b	4$

FixSourceAllDone	cmpa.l	#OutSourceBuf,A5
	beq	NormalExit
	move.l	A5,D3
	move.l	#OutSourceBuf,D2
	sub.l	D2,D3
	move.l	(Filehandle,PC),D1
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOWrite,A6)
	movea.l	(SP)+,A6
	cmp.l	D0,D3
	bne	ErrorExit15
	bsr	CloseStuff
	tst.b	(CopyFlag)
	beq	NormalExit
	lea	(CopyMesg,PC),A0
	lea	(TempXName,PC),A1
	move.l	A1,D1
1$	move.b	(A0)+,(A1)+
	bne.b	1$
	lea	(OutputFileName,PC),A0
	move.b	#' ',(-1,A1)
2$	move.b	(A0)+,(A1)+
	bne.b	2$
	lea	(RealSourceName,PC),A0
	move.b	#' ',(-1,A1)
3$	move.b	(A0)+,(A1)+
	bne.b	3$
	moveq	#0,D2
	moveq	#0,D3
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOExecute,A6)
	movea.l	(SP)+,A6
	beq	ErrorExit19
	tst.b	(DeleteFlag)
	bne	NormalExit
	lea	(OutputFileName,PC),A0
	move.l	A0,D1
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVODeleteFile,A6)
	movea.l	(SP)+,A6
	bra	NormalExit

ErrorExit2	lea	(BadParameter,PC),A0
	bra.b	ExitExit

ErrorExit3	lea	(CantLoadExecutable,PC),A0
	bra.b	ExitExit

ErrorExit4	lea	(NotEnoughMemory,PC),A0
	bra.b	ExitExit

ErrorExit5	lea	(CantOpenOutput,PC),A0
	bra.b	ExitExit

ErrorExit6	lea	(CantFindExec,PC),A0
	bra.b	ExitExit

ErrorExit7	lea	(ExecFileEmpty,PC),A0
	bra.b	ExitExit

ErrorExit8	lea	(CouldntExamineExec,PC),A0
	bra.b	ExitExit

ErrorExit9	lea	(CouldntOpenExec,PC),A0
	bra.b	ExitExit

ErrorExit10	lea	(ReadErrorExec,PC),A0
	bra.b	ExitExit

ErrorExit11	lea	(BadHeaderExec,PC),A0
	bra.b	ExitExit

ErrorExit13	lea	(NoSourceName,PC),A0
	bra.b	ExitExit

ErrorExit14	lea	(CantOpenSource,PC),A0
	bra.b	ExitExit

ErrorExit15	lea	(WriteErrorOP,PC),A0
	bra.b	ExitExit

ErrorExit16	lea	(NoDebugHunk,PC),A0
	bra.b	ExitExit

ErrorExit17	lea	(BadDebugHunk,PC),A0
	bra.b	ExitExit

ErrorExit18	lea	(BadFence,PC),A0
	bra.b	ExitExit

ErrorExit19	lea	(CouldntCopy,PC),A0
	bra.b	ExitExit

ErrorExit20	lea	(CantOpenWith,PC),A0
	bra.b	ExitExit

ErrorExit21	lea	(CouldntReadWith,PC),A0
	bra.b	ExitExit

ErrorExit22	lea	(NoTraps,PC),A0
	bra.b	ExitExit

NormalExit	lea	(ExecMesg,PC),A0
	bra.b	ExJoin

ExitExit	move.l	A0,(ErrorStringPointer)
	lea	(ErrorXMesg,PC),A0
ExJoin	clr.b	(TimerGo)
	tst.b	(A0)
	beq.b	NormalExit2
	move.l	A0,D1
	moveq	#0,D2
	moveq	#0,D3
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOExecute,A6)
	movea.l	(SP)+,A6
NormalExit2	suba.l	A0,A0
	move.l	(Cia_Base,PC),D0
	beq.b	NoCia
	movea.l	D0,A6
	moveq	#1,D0
	jsr	(_LVOAbleICR,A6)	; cancel interrupts
	lea	(intstructure,PC),A1
	moveq	#0,D0
	jsr	(_LVORemICRVector,A6)
	clr.l	(Cia_Base)
NoCia	tst.l	(ErrorStringPointer)
	beq.b	RealExit
	move.l	(OutputHandle,PC),D1
	bne.b	GotOPHandle
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOOutput,A6)
	movea.l	(SP)+,A6
	move.l	D0,(OutputHandle)
	move.l	D0,D1
GotOPHandle	move.l	(ErrorStringPointer,PC),D0
	movea.l	D0,A0
	moveq	#$7F,D2
1$	and.b	D2,(A0)+
	bne.b	1$
	suba.l	D0,A0
	subq.l	#1,A0
	move.l	A0,D3
	move.l	D0,D2
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOWrite,A6)
	movea.l	(SP)+,A6
RealExit	movea.l	(4),A6
	bsr	CloseStuff
	move.l	(ErrorStringPointer,PC),D0
	cmpi.l	#WriteErrorOP,D0
	bne.b	8$
	lea	(OutputFileName,PC),A0
	move.l	A0,D1
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVODeleteFile,A6)
	movea.l	(SP)+,A6
8$	moveq	#0,D0
	move.w	(jsrtrap,PC),D0
	bmi.b	1$
	andi.w	#15,D0
	movea.l	(4),A6
	jsr	(_LVOFreeTrap,A6)
1$	move.l	(Dos_Base,PC),D0
	beq.b	4$
	movea.l	(4),A6
	movea.l	D0,A1
	jsr	(_LVOCloseLibrary,A6)
4$	movea.l	(SaveSP,PC),SP
	moveq	#0,D0
	rts		; final exit

newtrap	move.l	(2,SP),(realtrapaddress)
	dw	$4EF9
oldtrap	dl	0

lev3int	move.l	(2,SP),(RealReturnAddress)
	dw	$4EF9
poke1	dl	0

InterruptHandler	tst.b	(interruptdisabler)
	bne	7$
	addq.l	#1,(RealTotalTicks)
	movem.l	D2-D4,(SaveIntRegs)
	move.l	(OurTask,PC),D0
	tst.l	(librarycaller)
	beq.b	9$
	move.l	(librarycaller,PC),(A1)
	bra.b	10$

9$	cmp.l	(ThisTask,A6),D0
	bne.b	6$
10$	addq.l	#1,(ThisTaskTicks)
6$	move.l	(SegStart,PC),D0
	lsl.l	#2,D0
	movea.l	D0,A0
	move.l	(A1),D4	; actual return address
	moveq	#0,D3	; total offset
4$	move.l	(A0),D0	; top of loop
	lsl.l	#2,D0
	move.l	-(A0),D1
	subq.l	#8,D1
	addq.l	#8,A0
	move.l	A0,D2
	add.l	D1,D2	; points to end of hunk
	cmp.l	D2,D4
	bcc.b	1$
	cmp.l	A0,D4
	bcs.b	1$
	sub.l	A0,D4
	add.l	D3,D4
	add.l	D4,D4	; longwords now!
	add.l	(_BigBlock,PC),D4
	movea.l	D4,A0
	addq.w	#1,(2,A0)
	bcc.b	3$
	subq.w	#1,(2,A0)
	bra.b	3$

1$	tst.l	D0
	beq.b	3$
	add.l	D1,D3
	movea.l	D0,A0
	bra.b	4$
3$:
	move.w	(Interval,PC),D0
	movea.l	(NextPtr,PC),A0
	move.b	(A0)+,D0
	cmpa.l	#$FFFFFF,A0
	bne.b	8$
	movea.l	#$FC0000,A0
8$	move.l	A0,(NextPtr)
	move.b	D0,($BFE401)
	lsr.w	#8,D0
	move.b	D0,($BFE501)
	movem.l	(SaveIntRegs,PC),D2-D4
7$	move.b	(TimerGo,PC),($BFEE01)	; get timer going again
	rts
FindWordStart:
	move.l	D0,-(SP)
1$	move.b	(A0)+,D0
	beq	ErrorExit2
	cmpi.b	#' ',D0
	bls.b	1$
	subq.l	#1,A0
	move.l	(SP)+,D0
	rts
	
FindWordStart2	; okay if line runs out
	move.l	D0,-(SP)
1$	move.b	(A0)+,D0
	beq.b	2$
	cmpi.b	#' ',D0
	bls.b	1$
	move.l	(SP)+,D0
	cmpa.l	A0,SP
	subq.l	#1,A0
	rts

2$	move.l	(SP)+,D0
	subq.l	#1,A0
	cmp.w	D0,D0
	rts

	
CheckOutputBuf	cmpa.l	#OutSourceEnd,A5
	bcc.b	1$
	rts

1$	movem.l	D0-D3/A0/A1,-(SP)
	move.l	(Filehandle,PC),D1
	move.l	#OutSourceBuf,D2
	move.l	#$2000,D3
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOWrite,A6)	; write new source file
	movea.l	(SP)+,A6
	cmp.l	D0,D3
	bne	ErrorExit15
	movea.l	D2,A5
	movem.l	(SP)+,D0-D3/A0/A1
	rts

ShowDecimal:
; A5 -> output buffer
; D0 = number
; A5 advanced, D0 trashed
	movem.l	D1/D2/D3/A1,-(SP)
	moveq	#0,D3	; leading zero flag
	lea	(DecimalTable,PC),A1
3$	move.l	(A1)+,D1
	beq.b	DecimalAllDone
	moveq	#-1,D2
1$	sub.l	D1,D0
	dbcs	D2,1$
	add.l	D1,D0
	neg.w	D2
	subq.w	#1,D2
	bne.b	2$
	tst.w	D3
	beq.b	3$
2$	st	D3
	bsr.b	CheckOutputBuf
	addi.b	#'0',D2
	move.b	D2,(A5)+
	bra.b	3$

DecimalAllDone	tst.w	D3
	bne.b	1$
	bsr.b	CheckOutputBuf
	move.b	#'0',(A5)+
1$	movem.l	(SP)+,D1/D2/D3/A1
	rts
**********************************************************************
SetInterval:
	moveq	#0,D2	; total
	moveq	#0,D0
1$	move.b	(A0)+,D0
	beq.b	SIVExit
	cmpi.b	#' ',D0
	beq.b	SIVExit
	cmpi.b	#'0'-1,D0
	bls	ErrorExit2
	cmpi.b	#'9',D0
	bhi	ErrorExit2
	subi.b	#'0',D0
	add.l	D2,D2
	move.l	D2,D1
	lsl.l	#2,D2
	add.l	D1,D2	; multiply by ten
	add.l	D0,D2
	bra.b	1$

SIVExit	cmpi.l	#$FFFF,D2
	bhi	ErrorExit2
	cmpi.w	#40,D2
	bls	ErrorExit2
	move.w	D2,(Interval)
	move.b	-(A0),D0
	rts
**********************************************************************
DoExecute	lea	(TempXName,PC),A1
	move.l	A1,-(SP)
	bsr.b	SetNameJoin
	move.l	(SP)+,D1
	moveq	#0,D2
	moveq	#0,D3
	movem.l	A0/A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOExecute,A6)
	movem.l	(SP)+,A0/A6
	rts
**********************************************************************
GetErrorString:
	lea	(ErrorXMesg,PC),A1
	bra.b	SetNameJoin
GetXString:
	lea	(ExecMesg,PC),A1
	bra.b	SetNameJoin

SetOuputName	lea	(OutputFileName,PC),A1
	bra.b	SetNameJoin

SetSourceName	lea	(RealSourceName,PC),A1
SetNameJoin	bsr	FindWordStart
	moveq	#' ',D1	; char to look for
	cmpi.b	#$27,(A0)
	bhi.b	1$
	move.b	(A0)+,D1
1$	move.b	(A0)+,D0
	beq.b	SSNExit
	cmp.b	D1,D0
	beq.b	SSNExit2
	move.b	D0,(A1)+
	bra.b	1$

SSNExit	move.b	-(A0),D0
SSNExit2	clr.b	(A1)
	rts
**********************************************************************
NoHandler:
NoBase	lea	(NoList,PC),A1
	move.b	(A0)+,D0
	beq.b	NoExit
	cmpi.b	#' ',D0
	beq.b	NoExit
CheckNextNo	move.w	(A1)+,D1
	beq	ErrorExit2
	move.w	(A1)+,D2
	cmp.b	D1,D0
	beq.b	1$
	lsr.w	#8,D1
	cmp.b	D1,D0
	bne.b	CheckNextNo
1$	lea	(NoBase,PC,D2.W),A1
	clr.b	(A1)
	bra.b	NoBase

NoExit	move.b	-(A0),D0
	rts
**********************************************************************
enable	move.l	A0,-(SP)
	movea.l	(4),A0
	subq.b	#1,(IDNestCnt,A0)
	bge.b	1$
	move.w	#$C000,($DFF09A)
1$	movea.l	(SP)+,A0
	rts

disable	move.l	A0,-(SP)
	movea.l	(4),A0
	move.w	#$4000,($DFF09A)
	addq.b	#1,(IDNestCnt,A0)
	movea.l	(SP)+,A0
	rts
**********************************************************************
PutString:
1$	bsr	CheckOutputBuf
	move.b	(A2)+,(A5)+
	bne.b	1$
	subq.l	#1,A5
	rts
**********************************************************************
CloseStuff	movea.l	(4),A6
	move.l	(WithFilehandle,PC),D1
	beq.b	10$
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOClose,A6)
	movea.l	(SP)+,A6
	clr.l	(WithFilehandle)
10$	move.l	(RealSourceHandle,PC),D1
	beq.b	9$
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOClose,A6)
	movea.l	(SP)+,A6
	clr.l	(RealSourceHandle)
9$	move.l	(InputFilehandle,PC),D1
	beq.b	7$
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOClose,A6)
	movea.l	(SP)+,A6
	clr.l	(InputFilehandle)
7$	move.l	(InputFileLock,PC),D1
	beq.b	5$
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOUnLock,A6)
	movea.l	(SP)+,A6
	clr.l	(InputFileLock)
5$	move.l	(BigInputBuf,PC),D0
	beq.b	6$
	movea.l	D0,A1
	lea	(MyInfoBlock,PC),A0
	move.l	(fib_Size,A0),D0
	jsr	(_LVOFreeMem,A6)
	clr.l	(BigInputBuf)
6$	move.l	(_BigBlock,PC),D0
	beq.b	1$
	movea.l	D0,A1
	move.l	(BlockSize,PC),D0
	jsr	(_LVOFreeMem,A6)
	clr.l	(_BigBlock)
1$	move.l	(SegStart,PC),D1
	beq.b	2$
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOUnLoadSeg,A6)
	movea.l	(SP)+,A6
	clr.l	(SegStart)
2$	move.l	(Filehandle,PC),D1
	beq.b	3$
	move.l	A6,-(SP)
	movea.l	(Dos_Base,PC),A6
	jsr	(_LVOClose,A6)
	movea.l	(SP)+,A6
	clr.l	(Filehandle)
3$	rts
**********************************************************************
TrapHandler:
	st	(interruptdisabler)
	addq.l	#4,SP
	movem.l	D0-D1/A0/A1/A6,-(SP)
	movea.l	(realtrapaddress,PC),A0
	move.l	USP,A1
	tst.b	(A0)	; jsr or jmp?
	bpl.b	1$	; branch if jmp
	move.l	A0,D0
	addq.l	#2,D0
	move.l	D0,-(A1)
1$	move.l	#CancelTrap,-(A1)
	move.l	A1,USP
	move.w	(A0),D0
	bset	#15,D0
	cmpi.b	#NT_LIBRARY,(LN_TYPE,A6)	; is this REALLY a library?
	beq.b	3$
	move.w	#$4EAE,(-2,A0)	; turn back into JSR
	tst.b	(A0)
	bmi.b	4$
	move.w	#$4EEE,(-2,A0)
4$	move.w	D0,(A0)
	suba.l	A0,A0
	addq.l	#2,A0
3$	adda.w	D0,A6
	move.l	A6,(22,SP)	; address of library vector
	subq.l	#2,A0
	tst.b	(TimerGo)
	beq.b	2$
	move.l	A0,(librarycaller)
2$	clr.b	(interruptdisabler)
	movem.l	(SP)+,D0-D1/A0/A1/A6
	rte

CancelTrap:
	movem.l	A0/A0,-(SP)
	lea	(0),A0
	movem.l	A0/A0,(librarycaller)
	movem.l	(SP)+,A0/A0
	rts
**********************************************************************
DecimalTable:

	dl	1000000000
	dl	100000000
	dl	10000000
	dl	1000000
	dl	100000
	dl	10000
	dl	1000
	dl	100
	dl	10
	dl	1
	dl	0

**********************************************************************
TimerGo	db	$99
StripTotalsFlag	db	$FF
CopyFlag	db	$FF
StripFlag	db	$FF
DeleteFlag	db	$FF
libraryflag	db	$FF
FoundDebugHunkFlag	db	0
FirstReadFlag	db	0
	cnop	0,2
NextPtr	dl	$FC0000
intstructure	dl	0
	dl	0
	db	2
	db	-128
	dl	myname
	dl	RealReturnAddress
	dl	InterruptHandler
Interval	dw	2000
ParameterList	dw	'Tt'
	dw	SetInterval-PLBase
	dw	'Ss'
	dw	SetSourceName-PLBase
	dw	'Oo'
	dw	SetOuputName-PLBase
	dw	'Cc'
	dw	NoHandler-PLBase
	dw	'Gg'
	dw	GetXString-PLBase
	dw	'Ee'
	dw	GetErrorString-PLBase
	dw	'Xx'
	dw	DoExecute-PLBase
	dw	0
NoList	dw	'Ss'
	dw	StripFlag-NoBase
	dw	'Cc'
	dw	CopyFlag-NoBase
	dw	'Dd'
	dw	DeleteFlag-NoBase
	dw	'Tt'
	dw	StripTotalsFlag-NoBase
	dw	'lL'
	dw	libraryflag-NoBase
	dw	0
DefaultWithFile	db	's:Profiler.wth',0
DosName	db	'dos.library',0
myname	db	'Glen''s timer interrupt',0
CiaName	db	'ciaa.resource',0
OutputFileName	db	't:PRSource.backup',0
CommentString	db	';_[',0
ExtraCommentString	db	',[',0
CopyMesg	db	'copy',0
BadParameter	db	'Invocation Error - Please check manual for syntax',10,0
CantLoadExecutable	db	'Couldn''t run the executable!',10,0
NotEnoughMemory	db	'Not enough memory!',10,0
CantOpenOutput	db	'Couldn''t open output file',10,0
CantFindExec	db	'Couldn''t find executable!',10,0
ExecFileEmpty	db	'Executable file empty!',10,0
CouldntExamineExec	db	'Couldn''t examine executable!',10,0
CouldntOpenExec	db	'Couldn''t open executable',10,0
ReadErrorExec	db	'Error while reading executable',10,0
BadHeaderExec	db	'Unexpected hunk type in executable',10,0
NoSourceName	db	'Source code filename required!',10,0
CantOpenSource	db	'Can''t open source code file!',10,0
WriteErrorOP	db	'Write Error on output file - deleted',10,0
NoDebugHunk	db	'No debug hunk found in executable!',10,0
BadDebugHunk	db	'Debug hunk not of required type!',10,0
BadFence	db	'Quotes are required around parameters for target program',10,0
CouldntCopy	db	'Error while copying back to source code file!',10,0
CantOpenWith	db	'Couldn''t open WITH file!',10,0
CouldntReadWith	db	'Couldn''t read WITH file!',10,0
NoTraps	db	'Could not allocate traps',10,0
	cnop	0,4
BssStart:
lastlong	dx.l	1
jsrtrap	dx.w	1
	dx.w	1	; must keep "MyInfoBlock" longword aligned
RealProgName	dx.b	240
ProgParms	dx.b	240
SaveAllRegs	dx.b	60
MyInfoBlock	dx.b	260
InSourceBuf	dx.b	$2000
InSourceEnd:
OutSourceBuf	dx.b	$2000
OutSourceEnd:
SaveIntRegs	dx.b	28
RealReturnAddress	dx.l	1
OutputHandle	dx.l	1
ErrorStringPointer	dx.l	1
Cia_Base	dx.l	1
InputFilenameLength	dx.l	1
InputParmsLength	dx.l	1
SaveSP	dx.l	1
LastHunk	dx.l	1
OurTask	dx.l	1
MaxTicks	dx.l	1
RealTotalTicks	dx.l	1
ThisTaskTicks	dx.l	1
TotalTicks	dx.l	1
SaveA0	dx.l	1
SaveD0	dx.l	1
Dos_Base	dx.l	1
SegStart	dx.l	1
_BigBlock	dx.l	1
BlockSize	dx.l	1
ReturnAddress	dx.l	1
Filehandle	dx.l	1
librarycaller	dx.l	1
trapaddress	dx.l	1
realtrapaddress	dx.l	1
StripFlag2	dx.b	2
lasthunktype	dx.l	1
LineNumber	dx.l	1
RealSourceHandle	dx.l	1
RealSourceName	dx.b	108
BigInputBuf	dx.l	1
InputFileSize	dx.l	1
InputFileLock	dx.l	1
InputFilehandle	dx.l	1
ExecMesg	dx.b	240
ErrorXMesg	dx.b	240
OldCommandPointer	dx.l	1
WithFlag	dx.l	1
TempXName	dx.b	240
WithFilehandle	dx.l	1
interruptdisabler	dx.b	1
BssEnd:
***********************************************************************************
	END
