
; Storm C Compiler
; Work:Sources/C/Bin2H/Bin2H.c


	XREF	_exit
	XREF	_ftell
	XREF	_fseek
	XREF	_fread
	XREF	_fprintf
	XREF	_printf
	XREF	_ferror
	XREF	_fclose
	XREF	_fopen
	XREF	_fputs
	XREF	_std__in
	XREF	_std__out
	XREF	_std__err

	SECTION ":0",CODE


;int StrCmpNC(char *string1, char *string2)
	XDEF	_StrCmpNC
_StrCmpNC
L55	EQU	-2
	link	a5,#L55
	movem.l	d2/a2,-(a7)
	move.l	$C(a5),a0
	move.l	$8(a5),a1
L41
;  
L42
;  
;    c1 = (((c1 = *string1++) >= 'a' && c1 <= 'z') ? c1 - ' ' : c
	move.b	(a1)+,d1
	cmp.b	#$61,d1
	blo.b	L45
L43
	cmp.b	#$7A,d1
	bhi.b	L45
L44
	moveq	#0,d0
	move.b	d1,d0
	sub.l	#$20,d0
	bra.b	L46
L45
	moveq	#0,d0
	move.b	d1,d0
L46
	move.b	d0,d1
;    c2 = (((c2 = *string2++) >= 'a' && c2 <= 'z') ? c2 - ' ' : c
	move.b	(a0)+,d0
	cmp.b	#$61,d0
	blo.b	L49
L47
	cmp.b	#$7A,d0
	bhi.b	L49
L48
	and.l	#$FF,d0
	sub.l	#$20,d0
	bra.b	L50
L49
	and.l	#$FF,d0
L50
;    if (c1 != c2)
	cmp.b	d0,d1
	beq.b	L52
L51
;      return(-1);
	moveq	#-1,d0
	movem.l	(a7)+,d2/a2
	unlk	a5
	rts
L52
	tst.b	d1
	beq.b	L54
L53
	tst.b	d0
	bne.b	L42
L54
;  return(0);
	moveq	#0,d0
	movem.l	(a7)+,d2/a2
	unlk	a5
	rts

;int ConvertBinary()
	XDEF	_ConvertBinary
_ConvertBinary
L75	EQU	-$1C
	link	a5,#L75
	movem.l	d2-d4,-(a7)
L60
;  unsigned long rpos = 0;
	moveq	#0,d4
;  while (rlen = fread(Buffer,1,LINESIZE,infile))
	bra	L73
L61
;  
;    if (ferror(infile)) 
	move.l	_infile(a4),-(a7)
	bsr	_ferror
	addq.w	#4,a7
	tst.l	d0
	beq.b	L63
L62
;    if (ferror(infile)) return CONV_ERROR_RE
	moveq	#1,d0
	movem.l	(a7)+,d2-d4
	unlk	a5
	rts
L63
;    fputs("\n\t",outfile);
	move.l	_outfile(a4),-(a7)
	move.l	#L56,-(a7)
	bsr	_fputs
	addq.w	#$8,a7
;    for (i = 0;
	moveq	#0,d2
	bra.b	L70
L64
;    
;      rpos++;
	addq.l	#1,d4
;      fprintf(outfile,"0x%02x",*(Buffer+i));
	lea	-$10(a5),a0
	moveq	#0,d0
	move.b	0(a0,d2.l),d0
	move.l	d0,-(a7)
	move.l	#L57,-(a7)
	move.l	_outfile(a4),-(a7)
	bsr	_fprintf
	add.w	#$C,a7
;      if ((rpos != len) || i != rlen-1)
	cmp.l	_len(a4),d4
	bne.b	L66
L65
	move.l	d3,d0
	subq.l	#1,d0
	cmp.l	d0,d2
	beq.b	L67
L66
;        fputs(",",outfile);
	move.l	_outfile(a4),-(a7)
	move.l	#L58,-(a7)
	bsr	_fputs
	addq.w	#$8,a7
L67
;      if (i != rlen-1) 
	move.l	d3,d0
	subq.l	#1,d0
	cmp.l	d0,d2
	beq.b	L69
L68
;      if (i != rlen-1) fputs(" ",outfile);
	move.l	_outfile(a4),-(a7)
	move.l	#L59,-(a7)
	bsr	_fputs
	addq.w	#$8,a7
L69
	addq.l	#1,d2
L70
	cmp.l	d3,d2
	blo.b	L64
L71
;    if (ferror(outfile)) 
	move.l	_outfile(a4),-(a7)
	bsr	_ferror
	addq.w	#4,a7
	tst.l	d0
	beq.b	L73
L72
;    if (ferror(outfile)) return CONV_ERROR_
	moveq	#2,d0
	movem.l	(a7)+,d2-d4
	unlk	a5
	rts
L73
	move.l	_infile(a4),-(a7)
	pea	$10.w
	pea	1.w
	pea	-$10(a5)
	bsr	_fread
	add.w	#$10,a7
	move.l	d0,d3
	bne	L61
L74
;  return(0);
	moveq	#0,d0
	movem.l	(a7)+,d2-d4
	unlk	a5
	rts

;int ConvertASCII()
	XDEF	_ConvertASCII
_ConvertASCII
L96	EQU	-$1E
	link	a5,#L96
	movem.l	d2-d4,-(a7)
L77
;  unsigned long rpos = 0;
	moveq	#0,d4
;  while (rlen = fread(Buffer,1,LINESIZE,infile))
	bra	L94
L78
;  
;    if (ferror(infile)) 
	move.l	_infile(a4),-(a7)
	bsr	_ferror
	addq.w	#4,a7
	tst.l	d0
	beq.b	L80
L79
;    if (ferror(infile)) return CONV_ERROR_RE
	moveq	#1,d0
	movem.l	(a7)+,d2-d4
	unlk	a5
	rts
L80
;    fputs("\n\t",outfile);
	move.l	_outfile(a4),-(a7)
	move.l	#L56,-(a7)
	bsr	_fputs
	addq.w	#$8,a7
;    for (i = 0;
	moveq	#0,d2
	bra	L91
L81
;    
;      rpos++;
	addq.l	#1,d4
;      cbyte = Buffer[i];
	lea	-$10(a5),a0
	move.b	0(a0,d2.l),d0
;      if ((cbyte > 31) && (cbyte < 128))
	cmp.b	#$1F,d0
	bls.b	L84
L82
	cmp.b	#$80,d0
	bhs.b	L84
L83
;        fprintf(outfile,"'%c'",cbyte);
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	#L76,-(a7)
	move.l	_outfile(a4),-(a7)
	bsr	_fprintf
	add.w	#$C,a7
	bra.b	L85
L84
;        fprintf(outfile,"0x%02x",cbyte);
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	#L57,-(a7)
	move.l	_outfile(a4),-(a7)
	bsr	_fprintf
	add.w	#$C,a7
L85
;      if ((rpos != len) || i != rlen-1)
	cmp.l	_len(a4),d4
	bne.b	L87
L86
	move.l	d3,d0
	subq.l	#1,d0
	cmp.l	d0,d2
	beq.b	L88
L87
;        fputs(",",outfile);
	move.l	_outfile(a4),-(a7)
	move.l	#L58,-(a7)
	bsr	_fputs
	addq.w	#$8,a7
L88
;      if (i != rlen-1) 
	move.l	d3,d0
	subq.l	#1,d0
	cmp.l	d0,d2
	beq.b	L90
L89
;      if (i != rlen-1) fputs(" ",outfile);
	move.l	_outfile(a4),-(a7)
	move.l	#L59,-(a7)
	bsr	_fputs
	addq.w	#$8,a7
L90
	addq.l	#1,d2
L91
	cmp.l	d3,d2
	blo	L81
L92
;    if (ferror(outfile)) 
	move.l	_outfile(a4),-(a7)
	bsr	_ferror
	addq.w	#4,a7
	tst.l	d0
	beq.b	L94
L93
;    if (ferror(outfile)) return CONV_ERROR_
	moveq	#2,d0
	movem.l	(a7)+,d2-d4
	unlk	a5
	rts
L94
	move.l	_infile(a4),-(a7)
	pea	$10.w
	pea	1.w
	pea	-$10(a5)
	bsr	_fread
	add.w	#$10,a7
	move.l	d0,d3
	bne	L78
L95
;  return(0);
	moveq	#0,d0
	movem.l	(a7)+,d2-d4
	unlk	a5
	rts

;int main(int argc,char **argv)
	XDEF	_main
_main
L137	EQU	-6
	link	a5,#L137
	movem.l	d2-d4/a2,-(a7)
	movem.l	$8(a5),d3/a2
L110
;  char Mode = BINARY;
	moveq	#0,d4
;  int conv = 0;
	moveq	#0,d2
;  printf("Bin2H v%d.%02d (c) 1999 by Basty/Seasons (%s, %s).\n\n",
	move.l	#L97,-(a7)
	move.l	#L98,-(a7)
	clr.l	-(a7)
	pea	1.w
	move.l	#L99,-(a7)
	bsr	_printf
	add.w	#$14,a7
;  if (argc != 3 && argc != 4) 
	cmp.l	#3,d3
	beq.b	L113
L111
	cmp.l	#4,d3
	beq.b	L113
L112
;  if (argc != 3 && argc != 4) goto 
	bra	L132
L113
;  if (argc == 4)
	cmp.l	#4,d3
	bne.b	L117
L114
;  
;    if (StrCmpNC(argv[3],"ASCII")) 
	move.l	#L100,-(a7)
	move.l	$C(a2),-(a7)
	bsr	_StrCmpNC
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L116
L115
;    if (StrCmpNC(argv[3],"ASCII"))
	bra	L132
L116
;    Mode = ASCII;
	moveq	#1,d4
L117
;  if (!(infile = fopen(argv[1],"rb"))) 
	move.l	#L101,-(a7)
	move.l	4(a2),-(a7)
	bsr	_fopen
	addq.w	#$8,a7
	move.l	d0,_infile(a4)
	tst.l	_infile(a4)
	bne.b	L119
L118
;  if (!(infile = fopen(argv[1
	bra	L133
L119
;  fseek(infile,0,SEEK_END);
	pea	1.w
	clr.l	-(a7)
	move.l	_infile(a4),-(a7)
	bsr	_fseek
	add.w	#$C,a7
;  len = ftell(infile);
	move.l	_infile(a4),-(a7)
	bsr	_ftell
	addq.w	#4,a7
	move.l	d0,_len(a4)
;  fseek(infile,0,SEEK_SET);
	move.l	#-1,-(a7)
	clr.l	-(a7)
	move.l	_infile(a4),-(a7)
	bsr	_fseek
	add.w	#$C,a7
;  if (ferror(infile)) 
	move.l	_infile(a4),-(a7)
	bsr	_ferror
	addq.w	#4,a7
	tst.l	d0
	beq.b	L121
L120
;  if (ferror(infile)) goto 
	bra	L133
L121
;  if (!(outfile = fopen(argv[2],"w"))) 
	move.l	#L102,-(a7)
	move.l	$8(a2),-(a7)
	bsr	_fopen
	addq.w	#$8,a7
	move.l	d0,_outfile(a4)
	tst.l	_outfile(a4)
	bne.b	L123
L122
;  if (!(outfile = fopen(argv[
	bra	L134
L123
;    fprintf(outfile,"/* Converted with binary to C-include.  (c)
	move.l	_len(a4),-(a7)
	move.l	4(a2),-(a7)
	move.l	#L103,-(a7)
	move.l	_outfile(a4),-(a7)
	bsr	_fprintf
	add.w	#$10,a7
;  switch (Mode)
	cmp.b	#0,d4
	beq.b	L124
	cmp.b	#1,d4
	beq.b	L125
	bra.b	L126
;  
;    
L124
;    
;      conv = ConvertBinary();
	bsr	_ConvertBinary
	move.l	d0,d2
;      
	bra.b	L126
L125
;    
;      conv = ConvertASCII();
	bsr	_ConvertASCII
	move.l	d0,d2
;      
L126
;  if (conv == CONV_OKAY) 
	tst.l	d2
	bne.b	L128
L127
;  if (conv == CONV_OKAY) fputs("\n};\n",out
	move.l	_outfile(a4),-(a7)
	move.l	#L104,-(a7)
	bsr	_fputs
	addq.w	#$8,a7
L128
;  fclose(outfile);
	move.l	_outfile(a4),-(a7)
	bsr	_fclose
	addq.w	#4,a7
;  fclose(infile);
	move.l	_infile(a4),-(a7)
	bsr	_fclose
	addq.w	#4,a7
;  switch (conv)
	cmp.l	#1,d2
	beq	L135
	cmp.l	#2,d2
	beq	L136
	bra.b	L131
;  
;  
L129
;    goto 
	bra	L135
L130
;    goto 
	bra	L136
L131
;  exit(0);
	clr.l	-(a7)
	bsr	_exit
	addq.w	#4,a7
L132
;  printf("Invalid parameters !\n\nUsage is: %s <infile> <outfile> 
	move.l	(a2),-(a7)
	move.l	#L105,-(a7)
	bsr	_printf
	addq.w	#$8,a7
;  exit(20);
	pea	$14.w
	bsr	_exit
	addq.w	#4,a7
L133
;  printf("%s: Couldn't open %s.\nProgram terminated !\n",argv[0],a
	move.l	4(a2),-(a7)
	move.l	(a2),-(a7)
	move.l	#L106,-(a7)
	bsr	_printf
	add.w	#$C,a7
;  exit(10);
	pea	$A.w
	bsr	_exit
	addq.w	#4,a7
L134
;  fclose(infile);
	move.l	_infile(a4),-(a7)
	bsr	_fclose
	addq.w	#4,a7
;  printf("%s: Couldn't create %s.\nProgram terminated !\n",argv[0]
	move.l	$8(a2),-(a7)
	move.l	(a2),-(a7)
	move.l	#L107,-(a7)
	bsr	_printf
	add.w	#$C,a7
;  exit(10);
	pea	$A.w
	bsr	_exit
	addq.w	#4,a7
L135
;  printf("%s: Couldn't read in %s.\nProgram terminated !\n",argv[0
	move.l	4(a2),-(a7)
	move.l	(a2),-(a7)
	move.l	#L108,-(a7)
	bsr	_printf
	add.w	#$C,a7
;  exit(10);
	pea	$A.w
	bsr	_exit
	addq.w	#4,a7
L136
;  printf("%s: Couldn't write to %s.\nProgram terminated !\n",argv[
	move.l	$8(a2),-(a7)
	move.l	(a2),-(a7)
	move.l	#L109,-(a7)
	bsr	_printf
	add.w	#$C,a7
;  exit(10);
	pea	$A.w
	bsr	_exit
	addq.w	#4,a7
	movem.l	(a7)+,d2-d4/a2
	unlk	a5
	moveq	#0,d0
	rts

L56
	dc.b	$A,$9,0
L104
	dc.b	$A,'};',$A,0
L59
	dc.b	' ',0
L107
	dc.b	'%s: Couldn't create %s.',$A,'Program terminated !',$A,0
L106
	dc.b	'%s: Couldn't open %s.',$A,'Program terminated !',$A,0
L108
	dc.b	'%s: Couldn't read in %s.',$A,'Program terminated !',$A,0
L109
	dc.b	'%s: Couldn't write to %s.',$A,'Program terminated !',$A,0
L76
	dc.b	''%c'',0
L58
	dc.b	',',0
L103
	dc.b	'/* Converted with binary to C-include.  (c) 1999 by Basty/Season'
	dc.b	's. */',$A,$A,'unsigned char %s[%ld] =',$A,'{',0
L97
	dc.b	'00:05:53',0
L57
	dc.b	'0x%02x',0
L100
	dc.b	'ASCII',0
L98
	dc.b	'Aug 06 1999',0
L99
	dc.b	'Bin2H v%d.%02d (c) 1999 by Basty/Seasons (%s, %s).',$A,$A,0
L105
	dc.b	'Invalid parameters !',$A,$A,'Usage is: %s <infile> <outfile> [A'
	dc.b	'SCII]',$A,0
L101
	dc.b	'rb',0
L102
	dc.b	'w',0

	SECTION ":2",BSS

	XDEF	_infile
_infile
	ds.l	1
	XDEF	_outfile
_outfile
	ds.l	1
	XDEF	_len
_len
	ds.l	1

	END
