; Assembly Program Checker (also a test of ss.library), (c) 1993 MJSoft

;	opt	x+

	include	"ssmac.h"

	tbase	a4
	clistart

	dbuf	anchor,ap_SIZEOF+256

	geta	anchor,a0
	move.w	#$1000,ap_BreakBits+2(a0)
	move.w	#256,ap_Strlen(a0)
	get.l	files,d1
	move.l	a0,d2
	call	dos,MatchFirst
	tst.l	d0
	beq.s	loopit
	sub.l	a0,a0
	jump	ss,DosError

loopit	geta	anchor,a0
	tst.l	ap_Info+fib_DirEntryType(a0)
	bmi.s	isfile
	bclr	#APB_DIDDIR,ap_Flags(a0)
	bne	donext
	bset	#APB_DODIR,ap_Flags(a0)
	bra	donext

isfile	geta	anchor+ap_Buf,a0
	call	ss,PutsNL
	call	CreateResList
	geta	anchor+ap_Buf,a0
	call	LoadFile
	move.l	d0,a0
	moveq	#0,d7		; LineCount
scanline	move.l	a0,a2
	addq.l	#1,d7
	call	TestBreak
	move.l	a2,a0
scan1	move.b	(a0)+,d0	; 1st field
	beq	scanend
	cmp.b	#';',d0
	beq	scanskip
	cmp.b	#10,d0
	beq.s	scanline
	cmp.b	#33,d0
	bcc.s	scan1
scan1a	move.b	(a0)+,d0	; space between fields
	beq	scanend
	cmp.b	#10,d0
	beq.s	scanline
	cmp.b	#33,d0
	bcs.s	scan1a
	subq.l	#1,a0
scan2	move.b	(a0)+,d0	; 2nd field
	beq	scanend
	cmp.b	#';',d0
	beq.s	scanskip
	cmp.b	#10,d0
	beq.s	scanline
	cmp.b	#33,d0
	bcc.s	scan2
scan2a	move.b	(a0)+,d0	; space between fields
	beq	scanend
	cmp.b	#10,d0
	beq.s	scanline
	cmp.b	#33,d0
	bcs.s	scan2a
	subq.l	#1,a0
scan3	move.b	(a0)+,d0	; 3rd field
	beq	scanend
	cmp.b	#10,d0
	beq.s	scanline
	cmp.b	#'''',d0
	beq.s	scanq
	cmp.b	#'<',d0
	beq.s	scanl
	cmp.b	#';',d0
	beq.s	scanskip
	cmp.b	#33,d0
	bcc.s	scan3
scan3a	move.b	(a0)+,d0
	beq.s	scanend
	cmp.b	#10,d0
	beq	scanline
	cmp.b	#33,d0
	bcs.s	scan3a
	move.b	-1(a0),d0
	cmp.b	#';',d0
	bne.s	scanwarn
scanskip	move.b	(a0)+,d0
	beq.s	scanend
	cmp.b	#10,d0
	bne.s	scanskip
	bra	scanline

scanq	move.b	(a0)+,d0
	beq.s	scanend
	cmp.b	#10,d0
	beq	scanline
	cmp.b	#'''',d0
	bne.s	scanq
	bra.s	scan3

scanl	move.b	(a0)+,d0
	beq.s	scanend
	cmp.b	#10,d0
	beq	scanline
	cmp.b	#'>',d0
	bne.s	scanl
	bra.s	scan3

scanwarn	push	a0
	printfr.l	<Look at line %ld!>,d7
	pop	a0
	bra.s	scanskip

scanend	call	FreeResList

donext	geta	anchor,a0
	move.l	a0,d1
	call	dos,MatchNext
	tst.l	d0
	beq	loopit

ready
	rts

cleanup	geta	anchor,a0
	move.l	a0,d1
	call	dos,MatchEnd
	rts

	tags

	exitrout	cleanup
	template	<FILES/A>
	dv.l	files

	finish

	end
