ùúùú  ³  &A  
§  
§  -Ò  í  u    b7  i
;TEST

	***************************************************************

		INCDIR	'a_include:'
		INCLUDE	'antix/sysmacros.i'
		INCLUDE	'dos/a_dos.i'
		INCLUDE	'exec/a_memory.i'
		INCLUDE	'lvo/a_dos_lib.i'
		INCLUDE	'lvo/a_exec_lib.i'

	***************************************************************

MEMREQS		=	MEMF_PUBLIC!MEMF_CLEAR

DEVINITVAL	=	9
LIBINITVAL	=	-6

	***************************************************************

		SECTION	ASTRIPI,CODE_P
o:
		bra	.skipver
		dc.b	'$VER: AStripI V2.0 by Cliff Earl (8.9.1997)',10,13,0
		EVEN
.skipver:
		PUSHA

		lea	o(pc),a5

		movem.l	d0/a0,_args-o(a5)

		bsr	_openlibs
		beq	_exit

		bsr	_getstdout
		IFND	TEST
		beq	_exit
		ENDIF

		bsr	_parseargs
		beq	_exit

		bsr	_allocfib
		beq	_exit

		bsr	_allocrwbuffs
		beq	_exit

		bsr	_lockincdir
		beq	_exit

		bsr	_cdincdir

		bsr	_prtintro

		bsr	_domagic

		bsr	_prtresults

	***************************************************************

_exit:
		bsr	_cdorigin

		bsr	_unlockincdir

		bsr	_freerwbuffs

		bsr	_freefib

		bsr	_closelibs

		POPA
		moveq	#0,d0
g:		rts

	***************************************************************

_parseargs:
		movem.l	_args(pc),d0/a0
		sf	-1(a0,d0)
		tst.b	(a0)
		beq	.default

		cmp.b	#'?',(a0)
		bne	.notsyntax
		lea	syntax.txt(pc),a0
		bsr	_writestdout
		moveq	#0,d0
		rts
.notsyntax:
		move.b	(a0)+,d0
		beq	.default
		cmp.b	#' ',d0
		beq	.notsyntax
		cmp.b	#'-',d0
		bne	.wrong
		move.b	(a0)+,d0
		bsr	_chrtoupper

		cmp.b	#'D',d0
		bne	.notdir
		bsr	_getdir
		bra	.notsyntax
.notdir:
		cmp.b	#'R',d0
		bne.b	.notread
		bsr	_readval
		beq	.wrongval
		move.l	d0,_rbuffsize-o(a5)
		bra	.notsyntax
.notread:
		cmp.b	#'W',d0
		bne	.wrong
		bsr	_readval
		beq	.wrongval
		move.l	d0,_wbuffsize-o(a5)
		bra	.notsyntax
.wrongval:
		lea	wrongval.txt(pc),a0
		bsr	_writestdout
		lea	syntax.txt(pc),a0
		bsr	_writestdout
		bra	.fail
.wrong:
		lea	wrong.txt(pc),a0
		bsr	_writestdout
.fail:
		moveq	#0,d0
		rts
.default:
		moveq	#1,d0
		rts

	***************************************

_getdir:
		lea	IncdirName(pc),a1
.findalpha:
		cmp.b	#' ',(a0)
		bne	.notspace
		addq.l	#1,a0
		bra	.findalpha
.notspace:

.loop:
		move.b	(a0)+,d0
		beq	.gotname
		cmp.b	#' ',d0
		beq	.gotname
		move.b	d0,(a1)+
		bra	.loop
.gotname:
		sf	(a1)
		rts

	***************************************

_readval:
		cmp.b	#' ',(a0)
		bne	.notspace
		addq.l	#1,a0
		bra	_readval
.notspace
		moveq	#0,d1
		moveq	#0,d0
.loop:
		cmp	#1000,d0		; so who has 1mb include files?
		bpl	.notnumeric
		move.b	(a0)+,d1
		beq	.gotval
		cmp.b	#' ',d1
		beq	.gotval
		sub.b	#'0',d1
		bmi	.notnumeric
		cmp.b	#9,d1
		bgt	.notnumeric
		mulu	#10,d0
		add	d1,d0
		bra	.loop
.gotval:
		tst.l	d0
		rts
.notnumeric:
		moveq	#0,d0
		rts

	***************************************************************

_prtresults:
		lea	results.txt(pc),a0
		lea	results.args(pc),a1
		lea	_pchar(pc),a2
		move.l	_wbuff(pc),a3
		GLIB	Sys
		CALL	RawDoFmt

		move.l	_wbuff(pc),a0
		GLIB	Dos
		bra	_writestdoutq

	***************************************

_prtintro:
		lea	intro.txt(pc),a0
		lea	intro.args(pc),a1
		lea	_pchar(pc),a2
		move.l	_wbuff(pc),a3
		GLIB	Sys
		CALL	RawDoFmt

		move.l	_wbuff(pc),a0
		GLIB	Dos
		bra	_writestdoutq

	***************************************************************

_convertincfile:
		PUSHA

		GLIB	Dos

		move.l	_rbuffsize(pc),d0
		sub.l	fib_Size(a4),d0
		bmi	.skiptoobig

		lea	fib_FileName(a4),a0

		move.b	(a0),d0
		bsr	_chrtoupper
		rol	#8,d0
		move.b	1(a0),d0
		cmp	#'A_',d0
		beq	.skipainc
.findeon:
		move.b	(a0)+,d0
		bne	.findeon
		move.b	-3(a0),d0
		rol	#8,d0
		move.b	-2(a0),d0
		bsr	_chrtoupper
		cmp	#'.I',d0
		bne	.skipnotinc

		bsr	_openincfile
		beq	.skipopen

		cmp.l	#$FAF9FAF9,d0
		beq	.skipasmone

		cmp.l	#';ASM',d0
		beq	.skipasm

		bsr	_loadincfile
		bmi	.skipread

		bsr	_seteof

		bsr	_genainc

		bsr	_genaincname
		bsr	_openaincfile
		beq	.skipopen
		bsr	_writeaincfile
		bmi	.skipwrite

		addq.l	#1,savecount-o(a5)
		lea	saved.txt(pc),a0
		bsr	_writestdoutq
.fail:
		bsr	_closeincfile
		bsr	_closeaincfile
		POPA
		rts

.skipwrite:
		lea	write.txt(pc),a0
		bra	.doerr
.skipread:
		lea	read.txt(pc),a0
		bra	.doerr
.skipopen:
		lea	open.txt(pc),a0
.doerr:
		addq.l	#1,errorcount-o(a5)
		bsr	_writestdoutq
		bra	.fail
.skipasm:
		lea	asm.txt(pc),a0
		bra	.doskip
.skiptoobig:
		lea	toobig.txt(pc),a0
		bra	.doskip
.skipainc:
		lea	ainc.txt(pc),a0
		bra	.doskip
.skipnotinc:
		lea	notinc.txt(pc),a0
		bra	.doskip
.skipasmone:
		lea	asmone.txt(pc),a0
.doskip
		PUSH	a0
		bsr	_prtfilename
		POP	a0
		addq.l	#1,skipcount-o(a5)
.prterr:
		bsr	_writestdoutq
		bra	.fail

	***************************************************************

_genaincname:
		lea	fib_FileName(a4),a0
		lea	aincname.buff(pc),a1
.0:
		move.b	(a0)+,(a1)+
		bne.b	.0
		rts

	***************************************

_openaincfile:
		lea	aincname(pc),a0
		move.l	#MODE_NEWFILE,d2
		move.l	a0,d1
		CALL	Open
		move.l	d0,aincfilehd-o(a5)
		rts

	***************************************

_closeaincfile:
		move.l	aincfilehd(pc),d1
		beq	.nohd
		CALL	Close
		clr.l	aincfilehd-o(a5)
.nohd:
		rts

	***************************************

_writeaincfile:
		move.l	_wbuff(pc),a0
		move.l	_wbuffptr(pc),d0
		sub.l	a0,d0

		move.l	aincfilehd(pc),d1
		move.l	a0,d2
		move.l	d0,d3
		CALL	Write
		tst.l	d0
		rts

	***************************************************************

_openincfile:
		lea	fib_FileName(a4),a0
		move.l	#MODE_OLDFILE,d2
		move.l	a0,d1
		CALL	Open
		move.l	d0,incfilehd
		beq	.fail
		move.l	d0,d7

		lea	examine.buff(pc),a0
		move.l	d7,d1
		move.l	a0,d2
		moveq	#4,d3
		CALL	Read
		tst.l	d0
		bmi	.fail

		move.l	d7,d1
		moveq	#-4,d2
		moveq	#OFFSET_CURRENT,d3
		CALL	Seek

		lea	examine.buff(pc),a0
		move.b	0(a0),d0
		bsr	_chrtoupper
		move.b	d0,0(a0)

		move.b	1(a0),d0
		bsr	_chrtoupper
		move.b	d0,1(a0)

		move.b	2(a0),d0
		bsr	_chrtoupper
		move.b	d0,2(a0)

		move.b	3(a0),d0
		bsr	_chrtoupper
		move.b	d0,3(a0)

		move.l	(a0),d0
		rts
.fail:
		moveq	#0,d0
		rts

	***************************************

_closeincfile:
		move.l	incfilehd(pc),d1
		beq	.nohd
		CALL	Close
		clr.l	incfilehd-o(a5)
.nohd:
		rts

	***************************************

_loadincfile:
		move.l	_rbuff(pc),a0
		move.l	incfilehd(pc),d1
		move.l	a0,d2
		move.l	fib_Size(a4),d3
		CALL	Read
		tst.l	d0
		rts

	***************************************

_seteof:
		move.l	_rbuff(pc),a0
		add.l	d0,a0
		moveq	#8-1,d0
.0:
		sf	(a0)+
		dbf	d0,.0

	***************************************************************

_prtfilename:
		IFD	TEST
		rts
		ENDC

		lea	fname.buff(pc),a1
		move.l	subcount(pc),d0
		addq	#2,d0
		moveq	#' ',d1
.0:
		move.b	d1,(a1)+
		dbf	d0,.0

		lea	fib_FileName(a4),a0
.1:
		move.b	(a0)+,(a1)+
		bne.b	.1

		lea	fname.txt(pc),a0
		bra	_writestdoutq

_prtdirname:
		IFD	TEST
		rts
		ENDC

		lea	dname.buff(pc),a1
		move.l	subcount(pc),d0
		moveq	#' ',d1
.0:
		move.b	d1,(a1)+
		dbf	d0,.0

		lea	fib_FileName(a4),a0
.1:
		move.b	(a0)+,(a1)+
		bne.b	.1

		subq.l	#1,a1

		lea	dir.txt(pc),a0
.2:
		move.b	(a0)+,(a1)+
		bne.b	.2

		lea	dname.txt(pc),a0
		bra	_writestdoutq

	***************************************************************

_domagic:
		PUSHA

		clr.l	dircount-o(a5)
		clr.l	filecount-o(a5)
		clr.l	savecount-o(a5)
		clr.l	skipcount-o(a5)
		clr.l	errorcount-o(a5)

		GLIB	Dos

		move.l	incdirlock(pc),d6
		move.l	incdirfib(pc),d7

		move.l	d6,d1
		move.l	d7,d2
		CALL	Examine
.loop:
		move.l	d6,d1
		move.l	d7,d2
		CALL	ExNext
		tst.l	d0
		beq.b	.checkeod

		move.l	d7,a4
		tst.l	fib_DirEntryType(a4)
		bmi	.isfile

		bsr	_examinesubdir
		beq	.fail
		bra	.loop
.isfile:
		addq.l	#1,filecount-o(a5)
		bsr	_convertincfile
		bra	.loop
.checkeod:
		CALL	IoErr
		cmp.l	#ERROR_NO_MORE_ENTRIES,d0
		bne	.fail

		POPA
		moveq	#1,d0
		rts
.fail:
		POPA
		moveq	#0,d0
		rts

	***************************************************************

_examinesubdir:
		PUSHA

		addq.l	#1,dircount-o(a5)

		addq.l	#2,subcount-o(a5)

		lea	fib_FileName(a4),a0
		bsr	_prtdirname

		moveq	#0,d5			; parentdir lock
		moveq	#0,d6			; subdir lock
		moveq	#0,d7			; subdir fib

		lea	fib_FileName(a4),a0	; lock subdir
		move.l	a0,d1
		moveq	#ACCESS_READ,d2
		CALL	Lock
		move.l	d0,d6
		beq	.fail

		move.l	#fib_SIZEOF,d0		; create subdir fib
		move.l	#MEMREQS,d1
		GLIB	Sys
		CALL	AllocVec
		move.l	d0,d7
		beq	.fail

		GLIB	Dos			; cd to subdir
		move.l	d6,d1
		CALL	CurrentDir
		move.l	d0,d5

		move.l	d6,d1
		move.l	d7,d2
		CALL	Examine
.loop:
		move.l	d6,d1
		move.l	d7,d2
		CALL	ExNext
		tst.l	d0
		beq.b	.checkeod

		move.l	d7,a4
		tst.l	fib_DirEntryType(a4)
		bmi	.isfile

		bsr	_examinesubdir
		beq	.fail
		bra	.loop
.isfile:
		addq.l	#1,filecount-o(a5)
		bsr	_convertincfile
		bra	.loop
.checkeod:
		CALL	IoErr
		cmp.l	#ERROR_NO_MORE_ENTRIES,d0
		bne	.fail

		bsr	.cleanup
		POPA
		moveq	#1,d0
		rts
.fail:
		bsr	.cleanup
		POPA
		moveq	#0,d0
		rts
.cleanup:
		tst.l	d7
		beq	.nofib
		move.l	d7,a1
		GLIB	Sys
		CALL	FreeVec
.nofib:
		move.l	d5,d1
		beq	.nolock
		GLIB	Dos
		CALL	CurrentDir
.nolock:
		subq.l	#2,subcount-o(a5)
		rts

	***************************************************************

_lockincdir:
		GLIB	Dos
		lea	IncdirName(pc),a0
		moveq	#ACCESS_READ,d2
		move.l	a0,d1
		CALL	Lock
		move.l	d0,incdirlock-o(a5)
		rts

	***************************************

_unlockincdir:
		move.l	incdirlock(pc),d1
		beq	.nolock
		GLIB	Dos
		CALL	UnLock
		clr.l	incdirlock-o(a5)
.nolock:
		rts

	***************************************

_cdincdir:
		GLIB	Dos
		move.l	incdirlock(pc),d1
		CALL	CurrentDir
		move.l	d0,syslock-o(a5)
		rts

	***************************************

_cdorigin:
		move.l	syslock(pc),d1
		beq	.nolock
		GLIB	Dos
		CALL	CurrentDir
		clr.l	syslock-o(a5)
.nolock:
		rts

	***************************************************************

_getstdout:
		GLIB	Dos
		CALL	Output
		move.l	d0,stdout-o(a5)
		rts

_writestdout:
		PUSHM	a0/d1-d3
		move.l	stdout(pc),d1
		move.l	a0,d2
.geteol:
		tst.b	(a0)+
		bne	.geteol
		subq.l	#1,a0
		sub.l	d2,a0
		move.l	a0,d3

		GLIB	Dos
		CALL	Write
		POPM	a0/d1-d3
		rts

_writestdoutq:
		move.l	stdout(pc),d1
		move.l	a0,d2
.geteol:
		tst.b	(a0)+
		bne	.geteol
		subq.l	#1,a0
		sub.l	d2,a0
		move.l	a0,d3
		JLIB	Write

	***************************************************************

_pchar:
		move.b	d0,(a3)+
		rts

_chrtoupper:
		cmp.b	#'a',d0
		blt	.0
		cmp.b	#'z',d0
		bgt	.0
		sub.b	#' ',d0
.0:
		rts

	***************************************************************

_allocfib:
		move.l	#fib_SIZEOF,d0
		move.l	#MEMF_CLEAR!MEMF_PUBLIC,d1
		GLIB	Sys
		CALL	AllocVec
		move.l	d0,incdirfib-o(a5)
		rts
_freefib:
		move.l	incdirfib(pc),d0
		beq	.nofib
		move.l	d0,a1
		GLIB	Sys
		CALL	FreeVec
		clr.l	incdirfib-o(a5)
.nofib:
		rts


	***************************************************************

_allocrwbuffs:
		GLIB	Sys

		move.l	_rbuffsize(pc),d0
		lsl.l	#8,d0
		lsl.l	#2,d0
		move.l	d0,_rbuffsize-o(a5)
		move.l	#MEMREQS,d1
		CALL	AllocVec
		move.l	d0,_rbuff
		beq.b	.0

		move.l	_wbuffsize(pc),d0
		lsl.l	#8,d0
		lsl.l	#2,d0
		move.l	d0,_wbuffsize-o(a5)
		move.l	#MEMREQS,d1
		CALL	AllocVec
		move.l	d0,_wbuff-o(a5)
		move.l	d0,_wbuffptr-o(a5)
.0:
		rts
_freerwbuffs:
		GLIB	Sys

		move.l	_rbuff(pc),d0
		beq.b	.norbuff
		move.l	d0,a1
		CALL	FreeVec
		clr.l	_rbuff-o(a5)
.norbuff:
		move.l	_wbuff(pc),d0
		beq.b	.nowbuff
		move.l	d0,a1
		CALL	FreeVec
		clr.l	_wbuff-o(a5)
		clr.l	_wbuffptr-o(a5)
.nowbuff:
		rts

	***************************************************************

_openlibs:
		move.l	4.w,a6
		move.l	a6,_SysBase-o(a5)

		lea	DosName(pc),a1
		moveq	#37,d0
		CALL	OpenLibrary
		move.l	d0,_DosBase-o(a5)
		rts

	***************************************

_closelibs:
		move.l	_DosBase(pc),d0
		beq	.nodos
		move.l	d0,a1
		GLIB	Sys
		CALL	CloseLibrary
		clr.l	_DosBase-o(a5)
.nodos:
		rts

	***************************************************************

_genainc:
		PUSHA

		move.l	_rbuff(pc),a4
		move.l	_wbuff(pc),a5

		move.l	#LIBINITVAL*5,funcval
.loop:
		move.l	a4,d7
		bsr	checkfirstchar
		bmi	.done
		beq	.loop
		bsr	checkforindentedcomment
		bne	.loop
		bsr	skiptillascii
		bne	.loop
		bsr	checkforlvo
		bne	.loop
		bsr	domacroskip
		bne	.loop

		bsr	hashword
		lea	table1(pc),a0
		bsr	findfunc
		beq	.nofunc
		jsr	0(a0)
		bra	.loop
.nofunc:
		move.l	a2,a4
		bsr	skiptillascii

		bsr	scanforequ
		beq	.notequ
		bsr	do_equ
		bra	.loop
.notequ:
		bsr	checkforrs
		bne	.loop
		bsr	copytillwhiteoreol
		bne	.loop
		bsr	_newline
		bsr	skiptilleol
		bra	.loop
.done:
		move.l	a5,d0
		POPA
		move.l	d0,_wbuffptr-o(a5)
		moveq	#1,d0
		rts

	***************************************************************

findfunc:
		move.l	(a0)+,d1
		beq	.notfound
		cmp.l	d0,d1
		beq	.found
		addq.l	#4,a0
		bra	findfunc
.found:
		move.l	(a0)+,d0
		move.l	d0,a0
.notfound
		rts

	***************************************************************

hashword:
		PUSH	a1
		move.l	a4,a2
		lea	hashbuff(pc),a1
		move.l	#'    ',d0
		move.l	d0,(a1)
		move.l	d0,4(a1)
		move.l	d0,8(a1)
.getstr:
		move.b	(a4)+,d0
		beq	.gotstr
		bsr	_chrtoupper
		cmp.b	#' ',d0
		beq	.gotstr
		cmp.b	#'	',d0
		beq	.gotstr
		cmp.b	#'=',d0
		beq	.gotstr
		cmp.b	#10,d0
		beq	.gotstr2
		move.b	d0,(a1)+
		bra	.getstr
.gotstr2:
		subq.l	#1,a4
.gotstr:
		lea	hashbuff(pc),a1
		move.l	(a1),d0
		add.l	4(a1),d0
		add.l	8(a1),d0

		POP	a1
		rts

	***************************************
	***************************************

do_rs:
		move.l	d7,a4
		bra	copytilleol

checkforrs:
		PUSH	a4
.loop:
		move.b	(a4)+,d0
		cmp.b	#10,d0
		beq	.notrs
		bsr	_chrtoupper
		cmp.b	#'R',d0
		bne	.loop

		move.b	(a4)+,d0
		cmp.b	#10,d0
		beq	.notrs
		bsr	_chrtoupper
		cmp.b	#'S',d0
		bne	.loop

		move.b	(a4)+,d0
		cmp.b	#10,d0
		beq	.notrs
		cmp.b	#'.',d0
		bne	.loop
		POP	a4

		bsr	copytilleol
		moveq	#1,d0
		rts
.notrs:
		POP	a4
		moveq	#0,d0
		rts

copytilleol:
		move.b	(a4)+,d1
		cmp.b	#10,d1
		beq	.done
		move.b	d1,(a5)+
		bra	copytilleol
.done:
		move.b	d1,(a5)+
		rts


	***************************************

do_funcdef:
		bsr	skiptillascii
		bsr	copytillwhiteoreol
		beq	.0
		subq.l	#1,a5
		subq.l	#1,d0
.0:
		lea	equ.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		move.l	funcval(pc),d0
		add.l	#LIBINITVAL,funcval
		bsr	_hexwordtostr
		bra	_newline

funcval:	dc.l	0

	***************************************

checkforlvo:
		move.b	-1(a4),d0
		rol.l	#8,d0
		move.b	0(a4),d0
		rol.l	#8,d0
		move.b	1(a4),d0
		rol.l	#8,d0
		move.b	2(a4),d0
		cmp.l	#'_LVO',d0
		beq	.islvo
		moveq	#0,d0
		rts
.islvo:
		PUSH	a4
		move.b	#'_',(a5)+
		bsr	copytillwhiteorequ
		POP	a4
		bsr	skiptillminus
		lea	equ.txt(pc),a0
		addq	#1,d0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy

		bsr	copytillwhiteoreol
		beq	.0
		moveq	#1,d0
		rts
.0:
		bsr	_newline
		bsr	skiptilleol
		moveq	#1,d0
		rts

skiptillminus:
		cmp.b	#'-',(a4)+
		bne	skiptillminus
		subq.l	#1,a4
		rts

copytillwhiteorequ:
		moveq	#0,d0
.loop:
		move.b	(a4)+,d1
		beq	.done
		cmp.b	#' ',d1
		beq	.done
		cmp.b	#'	',d1
		beq	.done
		cmp.b	#'=',d1
		beq	.done
		move.b	d1,(a5)+
		addq	#1,d0
		bra	.loop
.done:
		rts

	***************************************

domacroskip:
		PUSH	a4
		bsr	skiptillwhiteorcr
		bne	.0
		bsr	skiptillascii
		move.b	(a4),d0
		bsr	_chrtoupper
		cmp.b	#'M',d0
		bne	.0
		move.b	1(a4),d0
		bsr	_chrtoupper
		cmp.b	#'A',d0
		bne	.0
		move.b	2(a4),d0
		bsr	_chrtoupper
		cmp.b	#'C',d0
		bne	.0
		POP	a4
		bsr	do_macro
		moveq	#1,d0
		rts
.0:
		POP	a4
		moveq	#0,d0
		rts

	***************************************

do_ifd:
		lea	ifd.txt(pc),a0
		bsr	_strcpy
		bsr	copytillwhiteoreol
		subq.l	#2,a4
		bra	skiptilleol
		rts


	***************************************

do_devcmd:
		bsr	skiptillascii
		bsr	newcopytillwhiteoreol
		lea	equ.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		move.l	devval(pc),d0
		addq.l	#1,devval
		bsr	_hexwordtostr
		bsr	_newline
		subq.l	#3,a4
		bra	skiptilleol

	***************************************

do_devinit:
		move.l	#DEVINITVAL,devval
		cmp.b	#10,(a4)
		beq	.noval
		clr.l	devval
		bra	skiptilleol
.noval:
		addq.l	#1,a4
		rts

devval:		dc.l	0

	***************************************

do_enum:
		clr.l	etext
		clr.l	eval
		cmp.b	#10,(a4)
		beq	.noval

		bsr	skiptillascii
		PUSHM	a4-a5
		lea	etext(pc),a5
		bsr	newcopytillwhiteoreol
		move.b	#'+',(a5)+
		sf	(a5)+
		POPM	a4-a5
		bra	skiptilleol
.noval:
		addq.l	#1,a4
		rts

do_eitem:
		bsr	skiptillascii
		bsr	newcopytillwhiteoreol
		lea	equ.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		lea	etext(pc),a0
		bsr	_strcpy
		move.l	eval(pc),d0
		bsr	_hexlongtostr
		addq.l	#1,eval
		bra	_newline

etext:		dcb.b	256,0

eval:		dc.l	0

	***************************************

do_libdef:
		bsr	skiptillwhite
		bsr	skiptillascii
		bsr	copytillwhite
		lea	equ.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		move.l	libval(pc),d0
		add.l	#-6,libval
		bsr	_hexwordtostr
		bsr	_newline
		subq.l	#3,a4
		bra	skiptilleol
		rts

	***************************************


do_libinit:
		move.l	#LIBINITVAL,libval
		bra	skiptilleol

libval:		dc.l	0

	***************************************

do_macro:
.0:
		move.b	(a4)+,d0
		bsr	_chrtoupper
		cmp.b	#'E',d0
		bne	.0
		move.b	(a4)+,d0
		bsr	_chrtoupper
		cmp.b	#'N',d0
		bne	.0
		move.b	(a4)+,d0
		bsr	_chrtoupper
		cmp.b	#'D',d0
		bne	.0
		move.b	(a4)+,d0
		bsr	_chrtoupper
		cmp.b	#'M',d0
		bne	.0
		bra	skiptilleol
		rts

	***************************************

scanforequ:
		PUSH	a4
		bsr	skiptillwhiteoreol
		bsr	skiptillascii
		move.l	a4,a3
		POP	a4

		move.b	(a3),d0
		bsr	_chrtoupper
		cmp.b	#'=',d0
		beq	.isequ
		cmp.b	#'E',d0
		beq	.isequ
		moveq	#0,d0
		rts
.isequ:
		moveq	#1,d0
		rts

do_equ:
		bsr	skiptillascii
		bsr	copytillwhite
		lea	equ.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		bsr	skiptillnonwhite
		bsr	skiptillwhite
		bsr	skiptillnonwhite
		bsr	copytillwhiteoreol
		beq	.0
		rts
.0:
		bsr	_newline
		bra	skiptilleol

	***************************************

do_bitdef:
		bsr	skiptillascii
		PUSH	a4
		bsr	copytillcomma
		move.b	#'B',(a5)+
		move.b	#'_',(a5)+
		move.l	d0,d6
		addq	#2,d6
		bsr	copytillcomma
		add	d6,d0
		lea	equ.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		bsr	copytillwhiteoreol
		bne	.0
		bsr	_newline
.0:
		POP	a4
		bsr	copytillcomma
		move.b	#'F',(a5)+
		move.b	#'_',(a5)+
		move.l	d0,d6
		addq	#2,d6
		bsr	copytillcomma
		add	d6,d0
		lea	equ.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		lea	bitdef.txt(pc),a0
		bsr	_strcpy
		bsr	copytillwhiteoreol
		bne	.1
		bsr	_newline
		bra	skiptilleol
.1:
		rts

	***************************************

do_fptr:
do_long:
do_ulong:
do_float:
do_aptr:
do_cptr:
do_bptr:
do_bstr:
		bsr	skiptillascii
		bsr	copytillwhite
		bne	.0
		bsr	skiptilleol
.0:
		lea	rs.l.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		move.b	#'1',(a5)+
		bra	_newline

	***************************************

do_double:
		bsr	skiptillascii
		bsr	copytillwhite
		bne	.0
		bsr	skiptilleol
.0:
		lea	rs.b.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		move.b	#'8',(a5)+
		bra	_newline

	***************************************

do_bool:
do_word:
do_uword:
do_short:
do_ushort:
do_rptr:
		bsr	skiptillascii
		bsr	copytillwhite
		bne	.0
		bsr	skiptilleol
.0:
		lea	rs.w.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		move.b	#'1',(a5)+
		bra	_newline

	***************************************

do_byte:
do_ubyte:
		bsr	skiptillascii
		bsr	copytillwhite
		bne	.0
		bsr	skiptilleol
.0:
		lea	rs.b.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		move.b	#'1',(a5)+
		bra	_newline

	***************************************

do_label:
		bsr	skiptillascii
		bsr	copytillwhite
		bne	.0
		bsr	skiptilleol
.0:
		lea	rs.b.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		move.b	#'0',(a5)+
		bra	_newline

	***************************************

do_struct:
		bsr	skiptillascii
		bsr	copytillcomma
		lea	rs.b.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		bsr	copytillwhiteoreol
		bne	.1
		bsr	skiptilleol
		bra	_newline
.1:
		rts

	***************************************

do_structure:
		bsr	checkforcommazero
		beq	.notzero
		lea	rsreset.txt(pc),a0
		bsr	_strcpy
		bsr	_newline
		bra	skiptilleol
.notzero:
		lea	rsset.txt(pc),a0
		divu	#8,d0
		add	d0,a0
		bsr	_strcpy
		move.l	a3,a4
		bsr	copytillwhiteoreol
		bne	.0
		bsr	skiptilleol
		bra	_newline
.0:
		rts

	***************************************

do_endc:
		lea	endc.txt(pc),a0
		bsr	_strcpy
		bsr	_newline
		bra	skiptilleol

	***************************************

do_include:
		PUSH	a4
		move.l	d7,a4
.loop:
		move.b	(a4)+,d0
		cmp.b	#10,d0
		beq	.notainc
		cmp.b	#'a',d0
		bne	.loop
		cmp.b	#'_',(a4)
		bne	.loop
		POP	a4
		move.l	d7,a4
		bsr	copytilleol
		subq.l	#1,a4
		rts
.notainc:
		POP	a4

		lea	include.txt(pc),a0
		bsr	_strcpy
		move.b	(a4)+,(a5)+
.0:
		move.b	(a4)+,d0
		cmp.b	#'/',d0
		bne	.1
		move.b	d0,(a5)+
		move.b	#'a',(a5)+
		move.b	#'_',(a5)+
		bsr	copytillwhiteoreol
		bne	.3
		bsr	_newline
		bsr	skiptilleol
		subq.l	#1,a4
		rts
.1:
		move.b	d0,(a5)+
		bra	.0
.2:
		bsr	copytillwhiteoreol
		bne	.3
		bsr	_newline
		bsr	skiptilleol
		subq.l	#1,a4
		rts
.3:
		rts

	***************************************

do_ifnd:
		lea	ifnd.txt(pc),a0
		bsr	_strcpy
		bsr	copytillwhiteoreol
		rts

	***************************************

_newline:
		move.b	#10,(a5)+
		rts
_strcpy:
		moveq	#0,d0
.0:
		addq	#1,d0
		move.b	(a0)+,(a5)+
		bne	_strcpy
		subq.l	#1,a5
		rts

	***************************************

checkforcommazero:
		move.l	a4,a3
.0:
		move.b	(a3)+,d0
		cmp.b	#',',d0
		bne	.0
		cmp.b	#'0',(a3)
		bne	.1
		moveq	#1,d0
		rts
.1:
		moveq	#0,d0
		rts

	***************************************************************

foo1:
		addq.l	#1,a4
skiptillascii:
		move.b	(a4),d0
		cmp.b	#' ',d0
		beq	foo1
		cmp.b	#'	',d0
		beq	foo1
		bra	foo2
skiploop0:
		addq.l	#1,a4
foo2:
		move.b	(a4),d0
		cmp.b	#10,d0
		bne	.1
		addq.l	#1,a4
		moveq	#1,d0
		rts
.1:
		cmp.b	#'a',d0
		blt.b	.0
		cmp.b	#'z',d0
		bgt.b	.0
		sub.b	#' ',d0
.0:
		cmp.b	#'A',d0
		blt.b	skiploop0
		cmp.b	#'Z',d0
		bgt.b	skiploop0
		moveq	#0,d0
		rts
skiptilleol:
		cmp.b	#10,(a4)+
		bne	skiptilleol
		rts


checkforindentedcomment:
		PUSH	a4
.0:
		move.b	(a4)+,d0
		cmp.b	#10,d0
		beq	.scanned
		cmp.b	#';',d0
		beq	.comment
		cmp.b	#'*',d0
		beq	.comment
		cmp.b	#'	',d0
		blt.b	.scanned
		cmp.b	#' ',d0
		bgt.b	.scanned
		bra	.0
.comment:
		POP	a4
		bsr	skiptilleol
		moveq	#1,d0
		rts
.scanned:
		POP	a4
		moveq	#0,d0
		rts

checkfirstchar:
		move.b	(a4),d0
		bne	.1
		moveq	#-1,d0
		rts
.1:
		cmp.b	#10,d0
		bne	.2
		addq.l	#1,a4
		moveq	#0,d0
		rts
.2:
		cmp.b	#'*',d0
		beq	.0
		cmp.b	#';',d0
		beq	.0
		moveq	#1,d0
		rts
.0:
		cmp.b	#10,(a4)+
		bne	.0
		moveq	#0,d0
		rts

copytillcomma:
		moveq	#0,d0
.loop:
		move.b	(a4)+,d1
		cmp.b	#',',d1
		beq	.done
		move.b	d1,(a5)+
		addq	#1,d0
		bra	.loop
.done:
		rts

copytillwhiteoreol:
		moveq	#0,d0
		cmp.b	#'*',(a4)
		bne	.loop
.0:
		cmp.b	#10,(a4)+
		bne	.0
		rts
.loop:
		move.b	(a4)+,d1
		beq	.done
		cmp.b	#' ',d1
		beq	.done
		cmp.b	#',',d1
		beq	.done
		cmp.b	#'=',d1
		beq	.done
		cmp.b	#'	',d1
		beq	.done
		cmp.b	#';',d1
		beq	.done
		cmp.b	#10,d1
		beq	.1
		move.b	d1,(a5)+
		addq	#1,d0
		bra	.loop
.1:
		addq	#1,d0
		move.b	d1,(a5)+
		moveq	#1,d1
		rts
.done:
		moveq	#0,d1
		rts

skiptillwhiteoreol:
		moveq	#0,d0
		cmp.b	#'*',(a4)
		bne	.loop
.0:
		cmp.b	#10,(a4)+
		bne	.0
		rts
.loop:
		move.b	(a4)+,d1
		beq	.done
		cmp.b	#' ',d1
		beq	.done
		cmp.b	#'	',d1
		beq	.done
		cmp.b	#';',d1
		beq	.done
		cmp.b	#10,d1
		beq	.1
		addq	#1,d0
		bra	.loop
.1:
		addq	#1,d0
		moveq	#1,d1
		rts
.done:
		moveq	#0,d1
		rts


copytillwhite:
		moveq	#0,d0
		cmp.b	#'*',(a4)
		bne	.loop
.0:
		cmp.b	#10,(a4)+
		bne	.0
		rts
.loop:
		move.b	(a4)+,d1
		beq	.done
		cmp.b	#' ',d1
		beq	.done
		cmp.b	#'	',d1
		beq	.done
		cmp.b	#';',d1
		beq	.done
		cmp.b	#',',d1
		beq	.done
		cmp.b	#'=',d1
		beq	.done
		cmp.b	#10,d1
		beq	.1
		move.b	d1,(a5)+
		addq	#1,d0
		bra	.loop
.1:
		moveq	#1,d1
		rts
.done:
		moveq	#0,d1
		rts

skiptillwhiteorcr:
skiptillwhite:
.loop:
		move.b	(a4)+,d1
		cmp.b	#10,d1
		beq	.done
		cmp.b	#' ',d1
		beq	.done
		cmp.b	#'	',d1
		beq	.done
		cmp.b	#';',d1
		beq	.done
		cmp.b	#'=',d1
		beq	.done
		bra	.loop
.done:
		moveq	#0,d1
		rts
.cr:
		moveq	#1,d0
		rts

skiploop1:
		addq.l	#1,a4
skiptillnonwhite:
		move.b	(a4),d0
		cmp.b	#10,d0
		bne	.1
		addq.l	#1,a4
		moveq	#1,d0
		rts
.1:
		cmp.b	#'-',d0
		beq	.0
		cmp.b	#'$',d0
		beq	.0
		cmp.b	#' ',d0
		beq	skiploop1
		cmp.b	#'	',d0
		beq	skiploop1
.0:
		rts

_hexwordtostr:
		tst.l	d0
		bpl.b	.0
		move.b	#'-',(a5)+
		neg.l	d0
.0:
		move.b	#'$',(a5)+
		moveq	#4-1,d2
.1:
		rol	#4,d0
		move	d0,d1
		and	#$f,d1
		move.b	.hextab(pc,d1),(a5)+
		dbf	d2,.1
		rts

.hextab:	dc.b	'0123456789ABCDEF'


_hexlongtostr:
		move.b	#'$',(a5)+
		moveq	#8-1,d2
.1:
		rol.l	#4,d0
		move	d0,d1
		and	#$f,d1
		move.b	.hextab(pc,d1),(a5)+
		dbf	d2,.1
		rts

.hextab:	dc.b	'0123456789ABCDEF'

newcopytillwhiteoreol:
		moveq	#0,d0
		cmp.b	#'*',(a4)
		bne	.loop
.0:
		cmp.b	#10,(a4)+
		bne	.0
		rts
.loop:
		move.b	(a4)+,d1
		beq	.done
		cmp.b	#' ',d1
		beq	.done
		cmp.b	#',',d1
		beq	.done
		cmp.b	#'=',d1
		beq	.done
		cmp.b	#'	',d1
		beq	.done
		cmp.b	#';',d1
		beq	.done
		cmp.b	#10,d1
		beq	.1
		move.b	d1,(a5)+
		addq	#1,d0
		bra	.loop
.1:
		moveq	#1,d1
		rts
.done:
		moveq	#0,d1
		rts

	***************************************************************

_SysBase:	dc.l	0
_DosBase:	dc.l	0

_args:		dc.l	0,0

stdout:		dc.l	0

syslock:	dc.l	0

incdirlock:	dc.l	0
incdirfib:	dc.l	0

incfilehd:	dc.l	0

aincfilehd:	dc.l	0

subcount:	dc.l	1

examine.buff:	dc.l	0

_rbuff:		dc.l	0

_wbuff:		dc.l	0
_wbuffptr:	dc.l	0

results.args:
dircount:	dc.l	0
filecount:	dc.l	0
savecount:	dc.l	0
skipcount:	dc.l	0
errorcount:	dc.l	0

intro.args:
		dc.l	IncdirName
_rbuffsize:	dc.l	100
_wbuffsize:	dc.l	128

table1:		dc.l	'IFND'+'    '+'    ',do_ifnd
		dc.l	'INCL'+'UDE '+'    ',do_include
		dc.l	'ENDC'+'    '+'    ',do_endc
		dc.l	'STRU'+'CTUR'+'E   ',do_structure
		dc.l	'LABE'+'L   '+'    ',do_label
		dc.l	'UBYT'+'E   '+'    ',do_ubyte
		dc.l	'BYTE'+'    '+'    ',do_byte
		dc.l	'BOOL'+'    '+'    ',do_bool
		dc.l	'WORD'+'    '+'    ',do_word
		dc.l	'UWOR'+'D   '+'    ',do_uword
		dc.l	'SHOR'+'T   '+'    ',do_short
		dc.l	'USHO'+'RT  '+'    ',do_ushort
		dc.l	'RPTR'+'    '+'    ',do_rptr
		dc.l	'FPTR'+'    '+'    ',do_fptr
		dc.l	'LONG'+'    '+'    ',do_long
		dc.l	'ULON'+'G   '+'    ',do_ulong
		dc.l	'FLOA'+'T   '+'    ',do_float
		dc.l	'APTR'+'    '+'    ',do_aptr
		dc.l	'CPTR'+'    '+'    ',do_cptr
		dc.l	'BPTR'+'    '+'    ',do_bptr
		dc.l	'BSTR'+'    '+'    ',do_bstr
		dc.l	'DOUB'+'LE  '+'    ',do_double
		dc.l	'BITD'+'EF  '+'    ',do_bitdef
		dc.l	'STRU'+'CT  '+'    ',do_struct
		dc.l	'LIBI'+'NIT '+'    ',do_libinit
		dc.l	'LIBD'+'EF  '+'    ',do_libdef
		dc.l	'ENUM'+'    '+'    ',do_enum
		dc.l	'EITE'+'M   '+'    ',do_eitem
		dc.l	'DEVI'+'NIT '+'    ',do_devinit
		dc.l	'DEVC'+'MD  '+'    ',do_devcmd
		dc.l	'IFD '+'    '+'    ',do_ifd
		dc.l	'RSRE'+'SET '+'    ',do_rs
		dc.l	'RSSE'+'T   '+'    ',do_rs
		dc.l	0,0

hashbuff:	dcb.b	64,0

	***************************************************************

DosName:	dc.b	'dos.library',0

dir.txt:	dc.b	' (dir)',$1b,'[0m',10,0

IncdirName:	dc.b	'INCLUDE:'
		dcb.b	120,0

aincname:	dc.b	'a_'
aincname.buff:	dcb.b	64,0

fname.txt:
fname.buff:	dcb.b	128,0

dname.txt:	dc.b	$1b,'[32m'
dname.buff:	dcb.b	128,0

results.txt:
		dc.b	$1b,'[32m',10
		dc.b	' Results..',10
		dc.b	' dirs:    %ld',10
		dc.b	' files:   %ld',10
		dc.b	' saved:   %ld',10
		dc.b	' skipped: %ld',10
		dc.b	' errors:  %ld',10
		dc.b	$1b,'[0m',10,0
intro.txt:
		dc.b	$1b,'[32m',10
		dc.b	' AStripI v2.0 (8.9.1997)',10
		dc.b	' by Cliff Earl (cee@voyager.co.nz)',10
		dc.b	' © 1997 Antix Software',10
		dc.b	10
		dc.b	' SourceDir:     "%s"',10
		dc.b	' ReadBuffSize:  %ld bytes',10
		dc.b	' WriteBuffSize: %ld bytes',10
		dc.b	$1b,'[0m',10,0
asm.txt:
asmone.txt:
notinc.txt:
ainc.txt:	dc.b	'.. skipping ..',10,0
write.txt:	dc.b	'.. unable to write file!!',10,0
read.txt:	dc.b	'.. unable to read file!!',10,0
open.txt:	dc.b	'.. unable to open file!!',10,0
convert.txt:	dc.b	'.. error occured while processing!!',10,0
toobig.txt:	dc.b	'.. too big!!',10,0
saved.txt:	dc.b	'.. OK..',10,0

wrongval.txt:
		dc.b	10
		dc.b	'Maximum Buffer size is 1000 kb!!',0
wrong.txt:
		dc.b	10
		dc.b	'Invalid Options!!',10
syntax.txt:
		dc.b	$1b,'[32m',10
		dc.b	10
		dc.b	' AStripI v2.0 (8.9.1997)',10
		dc.b	' by Cliff Earl (cee@voyager.co.nz)',10
		dc.b	' © 1997 Antix Software',10
		dc.b	10
		dc.b	' Options..',10
		dc.b	$1b,'[0m'
		dc.b	'   -d <incdir>',10
		dc.b	'   -r <readbuff> (kb)',10
		dc.b	'   -w <writebuff> (kb)',10
		dc.b	'   -q (supress all output)',10
		dc.b	10
		dc.b	$1b,'[32m'
		dc.b	' Defaults..',10
		dc.b	$1b,'[0m'
		dc.b	'   -d INCLUDE:',10
		dc.b	'   -r 100',10
		dc.b	'   -w 128',10
		dc.b	10
		dc.b	0

bitdef.txt:	dc.b	'1<<',0
include.txt:	dc.b	'				INCLUDE	',0
ifd.txt:	dc.b	'				IFD	',0
ifnd.txt:	dc.b	'				IFND	',0
endc.txt:	dc.b	'				ENDC',0
rsreset.txt:	dc.b	'				RSRESET',0
rsset.txt:	dc.b	'				RSSET	',0
rs.b.txt:	dc.b	'				rs.b	',0
rs.w.txt:	dc.b	'				rs.w	',0
rs.l.txt:	dc.b	'				rs.l	',0
equ.txt:	dc.b	'				=	',0

		EVEN

		END
