NEW
  AUTO 3,1
				.LIST OFF
				.OP	65C02
				.OR	$2000
				.TF bin/mac2unix
*--------------------------------------
				.INB inc/macros.i
				.INB inc/a2osx.i
				.INB inc/kernel.i
				.INB inc/mli.i
				.INB inc/mli.e.i
*--------------------------------------
X.ENTER.SUBDIR	.EQ 0
X.COPY.TO.DEST	.EQ 0
X.DELETE.SOURCE	.EQ 0
X.RESET.SRC.DIR	.EQ 0
*--------------------------------------
				.DUMMY
				.OR ZPBIN
ZS.START
ZPPtr1			.BS 2
ZPPtr2			.BS 2
ZPFileName		.BS 2
ZPFileStat		.BS 2

ZPFullPath		.BS 2
ZPRelPath		.BS 2
ZPFileBuf		.BS 2

ArgIndex		.BS 1
hFile			.BS 1

FilePos			.BS 4

ByteCnt			.BS 2

bPause			.BS 1
bContinue		.BS 1
bRecurse		.BS 1

ZS.END			.ED
*--------------------------------------
*			File Header (16 Bytes)
*--------------------------------------
CS.START		cld
				jmp (.1,x)
				.DA #$61				6502,Level 1 (65c02)
				.DA #1					BIN Layout Version 1
				.DA 0
				.DA CS.END-CS.START		Code Size (without Constants)
				.DA DS.END-DS.START		Data SegmentSize
				.DA #64					Stack Size
				.DA #ZS.END-ZS.START	Zero Page Size
				.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1				.DA CS.INIT
				.DA CS.RUN
				.DA CS.DOEVENT		
				.DA	CS.QUIT
L.MSG.USAGE		.DA MSG.USAGE
L.MSG.CRLF		.DA MSG.CRLF
L.MSG.ERR		.DA MSG.ERR
				.DA 0
*--------------------------------------
CS.INIT			clc
				rts
*--------------------------------------
CS.RUN			inc ArgIndex
				lda ArgIndex
				>SYSCALL ArgV
				bcs .5
				
				>STYA ZPPtr1
				lda (ZPPtr1)
				cmp #'-'
				bne .4
				
				jsr CS.RUN.CheckOpt
				bcc CS.RUN

.9				>LDYA L.MSG.USAGE
				>SYSCALL PutS
				lda #E.SYN
				sec
				rts

.4				>LDA.G hSrcBasePath
				bne .9

				>LDYA ZPPtr1
				jsr X.InitSrcDirYA
				bcc CS.RUN

.99				rts
*--------------------------------------
.5				>LDA.G hSrcBasePath
				bne .6
				
				ldy #S.PS.hCWD
				lda (pPS),y
				>SYSCALL GetMemPtr
				>STYA ZPPtr1
				
.6				>LDYAI 256
				>SYSCALL Malloc
				bcs .99

				>STYA ZPFullPath

				>LDA.G hSrcBasePath
				>SYSCALL GetMemPtr
				>STYA ZPPtr1

				ldy #$ff

.80				iny
				lda (ZPPtr1),y
				bne .80

				tya
				clc
				adc ZPFullPath
				sta ZPRelPath
				lda ZPFullPath+1
				adc #0
				sta ZPRelPath+1

				>LDYAI 256
				>SYSCALL Malloc
				bcs .99

				>STYA ZPFileBuf
*--------------------------------------
CS.RUN.LOOP		jsr CS.RUN.CheckSTDIN
				bcs .99

				jsr X.GetEntry
				bcs .9

				ldy #S.STAT.P.DRIVE
				lda (ZPFileStat),y		ProDOS Device ?
				beq .5

				jsr CS.RUN.DEV
				bcc CS.RUN.LOOP

				rts
				
.5				ldy #S.STAT.MODE+1
				lda (ZPFileStat),y
				and #$F0
				cmp /S.STAT.MODE.DIR
				bne .6

				jsr CS.RUN.DIR
				bcs .99

				bra .8			

.6				jsr CS.RUN.FILE
				bcs .99

				bra .8

.9				jsr X.LeaveSubDir
				bcs .90

				jsr X.BasePath..
.8				jsr X.GetNextEntry
				jmp CS.RUN.LOOP

.90				lda #0
				sec
.99				rts
*--------------------------------------
CS.RUN.CheckSTDIN
				ldy #S.PS.hStdIn
				lda (pPS),y
				>SYSCALL FEOF
				bcs .9

				tay
				bne .1

				>SYSCALL GetChar
				bcs .9

				cmp #$03				Ctrl-C
				beq .9					Abort....

				cmp #$13				Ctrl-S
				bne .1

				lda bPause
				eor	#$ff
				sta bPause
				bne CS.RUN.CheckSTDIN
				
				clc
				rts

.1				lda bPause
				bne CS.RUN.CheckSTDIN	Pause...

*				clc

.9				rts	
*--------------------------------------
CS.RUN.DIR		lda bRecurse
				bpl .8

				lda (ZPFileName)
				cmp #'.'
				beq .8

				>LDYA ZPFileName
				jsr X.EnterSubDirYA
				jmp CS.RUN.CheckErr

.8				clc
				rts
*--------------------------------------
CS.RUN.DEV
.8				jsr X.GetNextEntry

CS.RUN.DEV.CLC.RTS
				clc
				rts
*--------------------------------------
CS.RUN.FILE		jsr X.IncludeMatch
				bcs CS.RUN.DEV.CLC.RTS	no match, skip....

				jsr CS.RUN.GetFilePath

				jsr CS.RUN.OpenFile
				bcs .9

				jsr CS.RUN.FILE.LOOP
				bcs .7
				
				jmp CS.RUN.CloseFile

.8				clc
				rts

.7				pha
				jsr CS.RUN.CloseFile
				pla
				sec
.9				jmp CS.RUN.CheckErr

.99				rts
*--------------------------------------
CS.RUN.FILE.LOOP
.1				>PUSHB hFile
				>PUSHW ZPFileBuf
				>PUSHWI 256
				>SYSCALL FRead
				bcs .8

				>STYA ByteCnt
				
				jsr CS.RUN.FILE.MOD

				jsr CS.RUN.FSeek
				bcs .99

				>PUSHB hFile
				>PUSHW ZPFileBuf
				>PUSHW ByteCnt
				>SYSCALL FWrite
				bcs .99
				
				lda ByteCnt
*				clc
				adc FilePos
				sta FilePos
				lda ByteCnt+1
				adc FilePos+1
				sta FilePos+1
				bcc .1
				
				inc FilePos+2
				bne .1
				
				inc FilePos+3
				jmp .1
				
.8				cmp #MLI.E.EOF
				bne .99

				clc

.99				rts
*--------------------------------------
CS.RUN.FILE.MOD	ldy #0
				
.2				lda	(ZPFileBuf),y
				cmp #C.LF
				bne .3
				
				lda #C.CR
				sta	(ZPFileBuf),y

.3				iny
				cpy ByteCnt
				bne .2

				rts
*--------------------------------------
CS.RUN.CheckErr	bcc .9

				pha
				>PUSHW L.MSG.ERR
				>PUSHA
				>PUSHBI 1
				>SYSCALL PrintF
				lda bContinue
				eor #$80
				asl
				pla

.9				rts
*--------------------------------------
CS.RUN.GetFilePath
				>PUSHW ZPFullPath
				>LDA.G hSrcBasePath
				>SYSCALL GetMemPtr
				>PUSHYA
				>SYSCALL StrCpy

				>PUSHW ZPFullPath
				>PUSHW ZPFileName
				>SYSCALL StrCat
				rts
*--------------------------------------
CS.RUN.OpenFile	>PUSHW ZPFullPath
				>PUSHBI	O.RDWR+O.APPEND
				>PUSHBI 0				Type
				>PUSHWZ					Aux type
				>SYSCALL FOpen
				bcs CS.RUN.FSeek.9

				sta hFile
				
				stz FilePos
				stz FilePos+1
				stz FilePos+2
				stz FilePos+3
				
CS.RUN.FSeek	>PUSHB hFile
				>PUSHL FilePos
				>PUSHBI SEEK.SET
				>SYSCALL fseek
				
CS.RUN.FSeek.9	rts
*--------------------------------------
CS.RUN.CloseFile
				lda hFile
				>SYSCALL FClose
				bcs .9
				
				stz hFile
				
.9				rts
*--------------------------------------
CS.DOEVENT		sec
				rts
*--------------------------------------
CS.QUIT			jsr X.LeaveSubDir
				bcc CS.QUIT

				>LDA.G hInclude
				beq .1

				>SYSCALL FreeMem

.1				>LDYA ZPFileBuf
				>SYSCALL Free

.2				>LDYA ZPFullPath
				>SYSCALL Free

.8				clc
				rts
*--------------------------------------
CS.RUN.CheckOpt	ldy #1 
				lda (ZPPtr1),y

				ldx #OptionVars-OptionList-1

.2				cmp OptionList,x
				beq .3

				dex
				bpl .2

				sec
				rts

.3				ldy OptionVars,x
				lda #$ff
				sta 0,y
				clc
				rts
*--------------------------------------
				.INB usr/src/shared/x.fileenum.s
*--------------------------------------
CS.END
*--------------------------------------
OptionList		.AS "CRcr"
OptionVars		.DA #bContinue,#bRecurse
				.DA #bContinue,#bRecurse
*--------------------------------------
MSG.USAGE		.CS "Usage : MAC2UNIX File(s) (*,? wildcards allowed)\r\n"
				.CS "   -C : Continue on error\r\n"
				.CS "   -R : Recurse subdirectories\r\n"
MSG.CRLF		.CZ "\r\n"
MSG.ERR			.CZ "[%h]\r\n"
*--------------------------------------
				.DUMMY
				.OR 0
DS.START
				.INB usr/src/shared/x.fileenum.g

DS.END			.ED
*--------------------------------------
MAN
SAVE usr/src/bin/mac2unix.s
ASM
