NEW
  AUTO 3,1
				.LIST OFF
				.OP 65C02
				.OR $2000
				.TF bin/xargs
*--------------------------------------
				.INB inc/macros.i
				.INB inc/a2osx.i
				.INB inc/kernel.i
				.INB inc/mli.i
				.INB inc/mli.e.i
*--------------------------------------
				.DUMMY
				.OR ZPBIN
ZS.START
ArgIndex		.BS 1
ArgPattern		.BS 1
ZPPtr1			.BS 2
ZPCommandPtr	.BS 2
ZPBufPtr		.BS 2
ZPCmdBuf		.BS 2
hFile			.BS 1
hBuf			.BS 1
hCmdBuf			.BS 1
DashArgs		.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                  S.PS.F.EVENT
				.DA #0
				.DA CS.END-CS.START     Code Size (without Constants)
				.DA DS.END-DS.START     Data Segment Size
				.DA #16                 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.CMD.SPC		.DA CMD.SPC
				.DA 0
*--------------------------------------
CS.INIT         clc
                rts
*--------------------------------------
CS.RUN          jsr CS.RUN.CheckArgs
                bcs CS.RUN.LOOP.RTS

CS.RUN.LOOP     >SLEEP

				>PUSHB hFile
				>PUSHW ZPBufPtr
				>PUSHWI 256
				>SYSCALL FGetS
				bcs .9

.2				jsr CS.RUN.EXEC

				bcc CS.RUN.LOOP
				rts

.9              cmp #MLI.E.EOF
                bne .99

                lda #0                    Exit with no Error

.99             sec
CS.RUN.LOOP.RTS rts
*--------------------------------------
CS.RUN.CheckArgs
				jsr CS.RUN.NextArg
				bcs .4

				lda (ZPPtr1)
				cmp #'-'
				beq .1

				lda ArgPattern
				bne .11

				lda ArgIndex
				sta ArgPattern
				>LDYA ZPPtr1
				>STYA ZPCommandPtr
				bra CS.RUN.CheckArgs

.11				lda hFile
				bne .97

				>LDYA ZPPtr1
				jsr CS.RUN.OPEN
				bcs .9

				sta hFile
				bra CS.RUN.CheckArgs
*--------------------------------------
.1				ldy #1 
				lda (ZPPtr1),y

				ldx #OptionList.Cnt-1

.2              cmp OptionList,x
                beq .3

				dex
				bpl .2

				bra .97

.3              txa
				lsr
				beq .98

				tax
				lda #$80
				sta DashArgs-1,x 
				bra CS.RUN.CheckArgs
*--------------------------------------
.4              lda hFile
				bne .80

				ldy #S.PS.hStdIn
				lda (pPS),y
				tay
				ldx FILEs.hFD-1,y
				lda FDs.pLO-1,x
				sta ZPPtr1
				lda FDs.pHI-1,x
				sta ZPPtr1+1

				lda (ZPPtr1)
				cmp #S.FD.T.PIPE
				bne .97
				
				sty hFile
        
.80             >LDYAI 256
				>SYSCALL GetMem
				bcs .9

				>STYA ZPBufPtr
				stx hBuf

				>LDYAI 256
				>SYSCALL GetMem
				bcs .9

				>STYA ZPCmdBuf
				stx hCmdBuf

*               clc

.9              rts

.97 			lda #E.SYN

.98             pha
				>LDYA L.MSG.USAGE
				>SYSCALL PutS
				pla
				sec
				rts
*--------------------------------------
CS.RUN.NextArg  inc ArgIndex
				lda ArgIndex
				>SYSCALL ArgV
				bcs .9

				>STYA ZPPtr1

.9              rts
*--------------------------------------
CS.RUN.OPEN     >PUSHYA
				>PUSHBI O.RDONLY+O.TEXT
				>PUSHBI S.FI.T.TXT
				>PUSHWZ                         Aux type
				>SYSCALL FOpen
				bcs .9

				sta hFile

.9              rts
*--------------------------------------
CS.RUN.EXEC   	>PUSHW ZPCmdBuf
				>PUSHW ZPCommandPtr
				>SYSCALL StrCpy

				>PUSHW ZPCmdBuf
				>PUSHW L.CMD.SPC
				>SYSCALL StrCat

				>PUSHW ZPCmdBuf
				>LDYA ZPBufPtr
				>PUSHYA
				>SYSCALL StrCat

*				>LDYA ZPCmdBuf
*				>SYSCALL PutS

				>PUSHW ZPCmdBuf
				>PUSHBI S.PS.F.HOLD

				>SYSCALL ExecL
				bcs .9
	
				>SLEEP
				
				ldy #S.PS.RC
				lda (pPS),y
				beq .9
				
				sec
	
.9				rts
*--------------------------------------
CS.QUIT         lda hFile
                beq .1

                >SYSCALL FClose

.1              lda hBuf
                beq .2
                
                >SYSCALL FreeMem

.2				lda hCmdBuf
				beq .8

                >SYSCALL FreeMem

.8              clc
                rts
*--------------------------------------
CS.DOEVENT		sec
				rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList      .AS "Hh"
OptionList.Cnt  .EQ *-OptionList
*--------------------------------------
MSG.USAGE       .CS "Usage : XARGS command <file>\r\n"
                .CS "   or : CMD|XARGS command"
MSG.CRLF        .CZ "\r\n"
CMD.SPC         .CZ " "
*--------------------------------------
				.DUMMY
				.OR 0
DS.START
DS.END          .ED
*--------------------------------------
MAN
SAVE usr/src/bin/xargs.s
ASM
