* 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