* Umwandlung des Bytes $1E in $0D $0A
* ist als ausfhrbares Programm und Accessory lauff„hig
* Jens Mller 1992

	output	.PRG

	include "C:\TOSDEF.S"
	include "C:\AESDEF.S"



	section text

start	lea	mystack(pc),sp
	lea	start-256(pc),a6	* Anfang Basepage
	tst.l	$24(a6)			* Zeiger auf Vaterprozež
	beq.s	access			* Accessory
	move.l	#$100,a5		* L„nge Basepage
	add.l	$0C(a6),a5		* + L„nge Text
	add.l	$14(a6),a5		* + L„nge DATA
	add.l	$1C(a6),a5		* + L„nge BSS
	move.l	a5,-(sp)		* Ben”tigte L„nge
	move.l	a6,-(sp)		* Anfangsadresse
	clr.w	-(sp)
	call_gemdos Mshrink
	lea	$0C(sp),sp
	appl_init
	move.w	d0,ap_id
	bsr.s	main
	appl_exit
	call_gemdos Pterm0

access	appl_init
	move.w	d0,ap_id
	menu_register ap_id,#mymenu
wait_for_event
	evnt_mesag #messagebuf
	cmp.w	#40,messagebuf		* Accessory angeklickt?
	bne.s	wait_for_event
	bsr.s	main
	bra.s	wait_for_event

main	graf_mouse #ARROW		* Maus als Zeiger
	form_alert #1,#titel
	call_gemdos Dgetdrv		* aktuelles LW ermitteln
	addq.l	#2,sp
	add.w	#'A',d0
	lea	path(pc),a0
	move.b	d0,(a0)+
	move.b	#':',(a0)+
	clr.w	-(sp)			* aktueller Pfad
	move.l	a0,-(sp)
	call_gemdos Dgetpath
	addq.l	#8,sp
	lea	t_all(pc),a0
	lea	path(pc),a1
	bsr.w	strcat
main1	clr.b	f_name			* Schleife "Nochmal?"
	lea	path(pc),a0
	lea	f_name(pc),a1
	lea	source_label(pc),a2
	lea	file(pc),a3
	bsr.w	file_select
	tst.w	d0
	beq.w	app_end
	graf_mouse #BUSYBEE
	clr.w	-(sp)			* Quelldatei ”ffnen, nur Lesen
	pea	file
	call_gemdos Fopen
	addq.l	#8,sp
	tst.w	d0
	bpl.s	main2
	graf_mouse #ARROW
	form_alert #1,#not_open
	bra.w	app_end
main2	move.w	d0,f_handle
	move.w	#2,-(sp)		* Filel„nge ermitteln
	move.w	f_handle,-(sp)
	clr.l	-(sp)
	call_gemdos Fseek
	lea	$A(sp),sp
	move.l	d0,f_length
	clr.w	-(sp)			* Dateizeiger auf Anfang zurck
	move.w	f_handle,-(sp)
	clr.l	-(sp)
	call_gemdos Fseek
	lea	$A(sp),sp
	move.l	f_length,-(sp)		* Puffer allokieren
	call_gemdos Malloc
	addq.l	#6,sp
	tst.l	d0
	bne.s	main3
	graf_mouse #ARROW
	form_error #8			* zu wenig Speicher
	bsr.w	f_close
	bra.w	app_end
main3	move.l	d0,buffer
	move.l	d0,-(sp)		* Datei einlesen
	move.l	f_length,-(sp)
	move.w	f_handle,-(sp)
	call_gemdos Fread
	lea	$C(sp),sp
	cmp.l	f_length,d0
	beq.s	main4
	graf_mouse #ARROW
	form_alert #1,#read_error
	bsr.w	buf_fre
	bsr.w	f_close
	bra.w	app_end
main4	bsr.w	f_close			* Quelldatei schliežen
	graf_mouse #ARROW
	lea	path(pc),a0		* Zieldatei ausw„hlen
	lea	f_name(pc),a1
	lea	des_label(pc),a2
	lea	file(pc),a3
	bsr.w	file_select
	tst.w	d0
	bne.s	main5
	bsr.w	buf_fre
	bra.w	app_end
main5	graf_mouse #BUSYBEE
	clr.w	-(sp)			* Zieldatei anlegen
	pea	file
	call_gemdos Fcreate
	addq.l	#8,sp
	tst.w	d0
	bpl.s	main6
	graf_mouse #ARROW
	form_alert #1,#not_create
	bsr.w	buf_fre
	bra.s	app_end
main6	move.l	buffer,a6		* Zeiger
	move.l	a6,a5
	move.l	f_length,d7		* Z„hlvariable
main7	tst.l	d7			* Zeilenende suchen
	beq.s	main8
	move.b	(a6)+,d0		* Byte holen
	subq.l	#1,d7
	cmp.b	#$1E,d0			* Zeilenende?
	bne.s	main7
	move.l	a6,d0			* Anzahl unver„nderter Bytes
	sub.l	a5,d0			* schreiben
	subq.l	#1,d0
	move.l	a5,a0
	move.l	a6,a5
	bsr.s	f_write
	tst.l	d0
	beq.s	main9			* Schreibfehler
	lea	CRLF(pc),a0		* danach CR LF
	moveq.l	#2,d0
	bsr.s	f_write
	tst.l	d0
	bne.s	main7			* von vorn beginnen
	bra.s	main9			* Schreibfehler
main8	move.l	a6,d0			* Rest schreiben
	sub.l	a5,d0
	move.l	a5,a0
	bsr.s	f_write
main9	bsr.w	f_close
	bsr.w	buf_fre
app_end	graf_mouse #ARROW
	form_alert #1,#t_again
	move.w	d0,-(sp)
	move.w	(sp)+,d0
	cmp.w	#1,d0
	beq.w	main1
	rts


* schreibt Anzahl Bytes (d0.l) in Datei, a0: Zeiger auf Puffer
* OUTPUT: d0.w = 0 -> Schreibfehler
f_write	move.l	d0,-(sp)
	move.l	a0,-(sp)
	move.l	d0,-(sp)
	move.w	f_handle,-(sp)
	call_gemdos Fwrite
	lea	$C(sp),sp
	cmp.l	(sp)+,d0
	beq.s	write1
	graf_mouse #ARROW
	form_alert #1,#write_error
	clr.l	d0
write1	rts
	
* gibt Puffer wieder frei
buf_fre	move.l	buffer,-(sp)
	call_gemdos Mfree
	addq.l	#6,sp
	rts

* schliežt Datei
f_close	move.w	f_handle,-(sp)
	call_gemdos Fclose
	addq.l	#4,sp
	rts

* h„ngt den String a0 an den von a1 an
strcat	tst.b	(a1)+
	bne.s	strcat
	subq.l	#1,a1

* kopiert einen String von a0 nach a1
strcpy	move.b	(a0)+,(a1)+
	bne.s	strcpy
	rts

* Erzeugen der Dateiauswahlbox
* INPUT:	a0: Zeiger auf gltigen Pfad
*		a1: Zeiger auf Dateiname
*		a2: Zeiger auf Label
*		a3: Puffer fr vollst„ndigen Dateinamen
* OUTPUT:	a0: Zeiger auf vollst„ndigen Dateinamen
*		d0: 0 = Abbruch, 1 = OK
file_select
	movem.l	a0-a3,f_help
	wind_update #BEG_UPDATE
	pea	get_ver
	call_xbios Supexec
	addq.l	#6,sp
	movem.l	f_help,a0-a3
	cmp.w	#$104,tos_ver		* TOS 1.4 oder h”her?
	bcs.s	f_old
	fsel_exinput a0,a1,a2
	bra.s	f_file
f_old	lea	f_alert(pc),a0		* beim alten TOS Form-Alert-Box
	lea	hilf_alert(pc),a1
	bsr.s	strcpy
	move.l	a2,a0
	lea	hilf_alert(pc),a1
	bsr.w	strcat
	lea	al_end(pc),a0
	lea	hilf_alert(pc),a1
	bsr.w	strcat
	form_alert #1,#hilf_alert
	movem.l	f_help,a0-a3
	fsel_input a0,a1
f_file	movem.l	f_help,a0-a3		* vollst„ndigen Namen generieren
	move.l	a3,a1			* Pfad kopieren
	bsr.w	strcpy
	move.l	a3,a0
	move.w	#'\',d0
	bsr.w	strrchr			* letzten Backslash suchen
	addq.l	#1,a0
	cmp.l	#1,a0
	bne.s	f_file1
	move.l	a3,a0			* nicht gefunden
f_file1	move.l	a0,-(sp)
	movem.l	f_help,a0-a3
	move.l	a1,a0
	move.l	(sp)+,a1
	bsr.w	strcpy
	wind_update #END_UPDATE
	movem.l	f_help,a0-a3
	move.l	a3,a0
	move.w	int_out+2,d0
	rts

* Ermitteln der TOS-Version
get_ver	move.l	_sysbase,a0
	move.w	2(a0),tos_ver
	rts

* letztes Vorkommen des Zeichens in d0.b im String a0 suchen
strrchr	move.l	a0,a1
	sub.l	a0,a0
	subq.l	#1,a1
chr1	addq.l	#1,a1
	cmp.b	(a1),d0
	bne.s	chr2
	move.l	a1,a0
chr2	tst.b	(a1)
	bne.s	chr1
	rts



	section	data

mymenu	dc.b	'  NL to CRLF',0
titel	dc.b	'[1][ Konvertierung von  |  $1E --> $0D $0A'
	dc.b	'|     PRG & ACC| PD J. Mller 1992'
al_end	dc.b	'  ][  OK  ]',0
CRLF	dc.b	13,10
t_all	dc.b	'\*.*',0
t_again	dc.b	'[2][ | Noch einen Text  | konvertieren?][Ja| Nein ]',0
f_alert	dc.b	'[1][ | ',0

source_label	dc.b	'Quelldatei laden',0
des_label	dc.b	'Zieldatei angeben',0
not_open	dc.b	'[2][ | Datei kann nicht  | ge”ffnet werden!][ Abbruch ]',0
read_error	dc.b	'[2][ | Datei kann nicht  | gelesen werden!][ Abbruch ]',0
not_create	dc.b	'[2][ | Datei kann nicht  | angelegt werden!][ Abbruch ]',0
write_error	dc.b	'[2][ | Datei kann nicht  | geschrieben werden!][ Abbruch ]',0



	section	bss

path		ds.b	128
f_name		ds.b	128
file		ds.b	128
hilf_alert	ds.b	254
		even
ap_id		ds.w	1
f_handle	ds.w	1
f_length	ds.l	1
buffer		ds.l	1
f_help		ds.l	4
tos_ver		ds.w	1
messagebuf	ds.w	8
		ds.l	200
mystack		ds.l	1


	include "C:\AESLIB.S"

	END
