NEW
PREFIX
AUTO 4,1
				.LIST OFF
				.OP	65C02
				.OR	$2000
				.TF BIN/MD5
*--------------------------------------
				.INB INC/MACROS.I
				.INB INC/A2OSX.I
				.INB INC/MLI.E.I
				.INB INC/LIBCRYPT.I
*--------------------------------------
FILEBUF.SIZE	.EQ 4096
*--------------------------------------
				.DUMMY
				.OR ZPBIN
ZS.START				
ZPPtr1			.BS 2
ZPDataBufPtr	.BS 2
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		CS
				.DA DS.END-DS.START		DS
				.DA #16					SS
				.DA #ZS.END-ZS.START	ZP
				.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------				
.1				.DA CS.INIT
				.DA CS.RUN
				.DA CS.DOEVENT		
				.DA	CS.QUIT
L.LIBCRYPT		.DA LIBCRYPT
L.MSG.USAGE		.DA MSG.USAGE
				.DA 0
*--------------------------------------
CS.INIT			>LDYA L.LIBCRYPT
				>SYSCALL LoadLib
				bcs .9
				
				sta hLIBCRYPT

.9				rts
*--------------------------------------
CS.RUN			ldy #S.PS.ARGC
				lda (pPs),y
				beq .99

.1				>INC.G ArgIndex
				
				>SYSCALL ArgV
				bcs .8
				
				>STYA ZPPtr1
				
				lda (ZPPtr1)
				cmp #'-'
				bne .4
				
				ldy #1 
				lda (ZPPtr1),y
				beq .99

				ldx OptionList
				
.2				cmp OptionList,x
				beq .3
				dex
				bne .2

.99				>PUSHBI 0
				>LDYA L.MSG.USAGE
				>SYSCALL printf
				lda #E.SYN
				sec
				rts
				
.3				ldy OptionVars-1,x
				lda #$80
				sta (pData),y
				bra .1
				
.4				>LDA.G Arg
				bne .99
				
				>LDA.G ArgIndex
				>STA.G Arg
				bra .1
				
.8				>LDA.G Arg
				beq .99
				
				>LDA.G bText
				beq CS.RUN.FILE
*--------------------------------------
CS.RUN.TEXT		>PUSHEA.G MD5Buf
				
				>LDA.G Arg
				>SYSCALL ArgV
				>PUSHYA
				>LIBCALL hLIBCRYPT,LIBCRYPT.MD5
				
				jmp CS.RUN.PRINT
*--------------------------------------
CS.RUN.FILE		>LDYAI FILEBUF.SIZE
				>SYSCALL getmem
				bcs .9
				>STYA ZPDataBufPtr
				txa
				>STA.G hDataBuf
				
				>PUSHWZ				Aux type
				>PUSHBI 0				ftype
				>PUSHBI	O.RDONLY
				
				>LDA.G Arg
				>SYSCALL ArgV
				>SYSCALL FOpen
				bcs .9
				>STA.G hFile
				
				>LIBCALL hLIBCRYPT,LIBCRYPT.MD5Init
				bcs .9
				
				>STA.G hMD5Ctx
				
.1				>PUSHWI FILEBUF.SIZE	Bytes To Read
				>PUSHW ZPDataBufPtr		Dst Ptr
				>LDA.G hFile
				>SYSCALL FRead
				
				bcc .2
				eor #MLI.E.EOF
				beq .8
.9				rts
				
.2				>PUSHYA					MD5 DataLen
				>PUSHW ZPDataBufPtr
				>LDA.G hMD5Ctx
				>LIBCALL hLIBCRYPT,LIBCRYPT.MD5Update
				bra .1
				
.8				>PUSHEA.G MD5Buf
				>LDA.G hMD5Ctx
				>LIBCALL hLIBCRYPT,LIBCRYPT.MD5Finalize
				
CS.RUN.PRINT	>LEA.G MD5Buf
				>SYSCALL strlwr
				>SYSCALL puts
				
				lda #0
				
*				sec
*				rts
*--------------------------------------
CS.DOEVENT		sec
				rts
*--------------------------------------
CS.QUIT			>LDA.G hDataBuf
				beq .2
				>SYSCALL FreeMem
				
.2				>LDA.G hFile
				beq .3
	
				>SYSCALL fclose

.3				lda hLIBCRYPT
				beq .4
				
				>SYSCALL UnloadLib
				
.4				clc
				rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList		>PSTR "Dd"
OptionVars		.DA #bText,#bText
*--------------------------------------
MSG.USAGE		.AZ "Usage : MD5 [ -d input text | input file ]\r\n"
*--------------------------------------
LIBCRYPT		.AZ "libcrypt"
hLIBCRYPT		.BS 1
*--------------------------------------
				.DUMMY
				.OR 0
DS.START
ArgIndex		.BS 1
Arg				.BS 1
bText			.BS 1
hFile			.BS 1
hDataBuf		.BS 1
hMD5Ctx			.BS 1
MD5Buf			.BS 33
DS.END			.ED
*--------------------------------------
MAN
SAVE USR/SRC/BIN/MD5.S
ASM
