/*
	Tokenizer que lee de un archivo dado, imprime los tokens y los cuenta.
	Oscar Medina Duarte
	www.medina-web.com
*/

	.data
leeaqui:	.word 0
archivo:	.word 0
titulo:		.ascii "Tokenizer para un file\nDame el nombre del archivo :\0"
disclaim:	.ascii "\nCodigo en SPARC asm por Oscar Medina Duarte\n\0"
prtok:		.ascii "%c\0"
err1:		.ascii "Error al abrir archivo : %s\n\0"
fmscan:		.ascii "%s\n\0"
escritura:	.ascii "%s\n\0"
attrib:		.ascii "r"
menu1:		.ascii "%s\0"
opening:	.ascii "\tAbriendo archivo : %s\n\0"
finalmsg:	.ascii "\n\t-> Se leyeron %d Tokens\n\0"


	.text
	.global main
main:
	save %sp, -64, %sp
	set titulo, %o0
	call printf
	nop
				! un poco de interactividad
	set menu1, %o0
	set archivo, %o1
	call scanf
	nop
	
	set opening, %o0
	set archivo, %o1
	call printf
	nop
	
	set attrib, %o1		! abrir como solo lectura
	set archivo, %o0	! abrir archivo
	call fopen		! abrir ya ! apuntador esta en %o0
	nop
	
	cmp %o0, 0		! ver si hay err al abrir
	bne archok		! si no hay
	nop
				! si hay
	set err1, %o0
	set archivo, %o1
	call printf
	nop
	ba end			! si hay
	nop
archok:				! aqui no hubo error
				! por aqui hacer un loop
				! %o0 ya tiene el pointer
	mov %o0, %l2		! respaldar el fpointer
	set fmscan, %o1
	set leeaqui, %o2
	call fscanf
	nop
	
	add %l3, 1, %l3		! contador de tokens
	
	set escritura, %o0
	set leeaqui, %o1	! pasamos el addr a %o1
	call printf
	nop
	
	mov %l2, %o0		! recuperar el fpointer a %o0
	call feof		! lleguemos al final de archivo !
	nop
	
	cmp %o0, 0
	be archok		! loop hasta EOF o algo asi...
	mov %l2, %o0		! recuperar el fpointer a %o0 y sustituir el nop !: )
	
	call fclose
	nop
	
end:
	set finalmsg, %o0
	mov %l3,%o1		! Numero de tokens
	call printf
	nop
	set disclaim, %o0
	call printf
	nop
ret
restore
