~aleteoryx/uxn

55f239d000936c242d0ed32c7d7aaf30744e5f8f — Aleteoryx 2 months ago 43a23ce front
ibm, fold, dos<->unix
5 files changed, 90 insertions(+), 1 deletions(-)

A dos2unix.tal
A fold.tal
A ibm.tal
M mkfile
A unix2dos.tal
A dos2unix.tal => dos2unix.tal +17 -0
@@ 0,0 1,17 @@
@on-reset ( -> )
	;on-input #10 DEO2
	BRK

@on-input ( last-byte -> last-byte )
	#12 DEI

	[ LIT &need-byte 01 ]
	[ LIT2 00 _/need-byte ] STR
	?{
		SWP
		DUP2 #0a0d NEQ2 ?{
			POP
			[ LIT2 01 _/need-byte ] STR
		}
		#18 DEO ( #010e DEO )
	}

A fold.tal => fold.tal +38 -0
@@ 0,0 1,38 @@
@on-reset ( -> )
	;on-char #10 DEO2 BRK


@on-char ( linelen toklen -> linelen toklen )
	OVR INC #49 NEQ ?{
		NEQk ?{ put-token }
		#0a18 DEO #00 SWP
	}

	#0a12 DEI EQU ?newline
	#2012 DEI EQU ?space

	#12 DEI OVR STZ
	INC SWP INC SWP

	BRK

@newline ( linelen toklen -- linelen toklen )
	put-nonempty
	#0a18 DEO #00 SWP
	BRK
@space ( linelen toklen -- linelen toklen )
	SWP INC SWP
	put-nonempty
	#2018 DEO
	BRK

@put-nonempty ( linelen toklen -- linelen toklen )
	DUP #00 EQU ?{ put-token }
	JMP2r

@put-token ( linelen toklen -- linelen toklen )
	#00
	&loop
		LDZk #18 DEO
		INC NEQk ?/loop
	POP2 #00 JMP2r

A ibm.tal => ibm.tal +22 -0
@@ 0,0 1,22 @@
@on-reset
	[ LITr 01 ]
	#18
	@loop24
		#14
		@loop80
			;str puts
			#2018 DEO
			STHrk SUB
			DUP ?loop80
		POP
		#0a18 DEO
		STHrk SUB
		DUP ?loop24
	BRK

@puts ( s* -- )
	LDAk #18 DEO
	INC2 LDAk ?puts
	POP2 JMP2r

@str "IBM

M mkfile => mkfile +5 -1
@@ 6,7 6,11 @@ roms=\
	grep.rom\
	rot.rom\
	decroaker.rom\
	morse.rom
	morse.rom\
	fold.rom\
	ibm.rom\
	dos2unix.rom\
	unix2dos.rom

all:VQ: $roms


A unix2dos.tal => unix2dos.tal +8 -0
@@ 0,0 1,8 @@
@on-reset ( -> )
	;on-input #10 DEO2
	BRK

@on-input ( -> )
	#12 DEI
	DUP #0a NEQ ?{ #0d18 DEO }
	#18 DEO