[comp.sys.handhelds] ->ASC on other computers?

dodgson@sol.cs.wmich.edu (Harry Dodgson) (11/20/90)

Does anyone know of a program that I could run under MSDOS or Un*x that
would let me take some of these binaries that are available and convert
them to the ->ASC format?  I do not yet have the transfer cable and
this seemed like a way to move some of the smaller binaries like usag
into my 48.

Kip DeGraaf

cloos@acsu.buffalo.edu (James H. Cloos) (11/20/90)

In article <1990Nov19.215615.3165@sol.cs.wmich.edu> dodgson@sol.cs.wmich.edu (Harry Dodgson) writes:
>Does anyone know of a program that I could run under MSDOS or Un*x that
>would let me take some of these binaries that are available and convert
>them to the ->ASC format?  I do not yet have the transfer cable and
>this seemed like a way to move some of the smaller binaries like usag
>into my 48.
>
>Kip DeGraaf


Well, I'll take this one.  The following is just a hack, but a more
complete version will be included in my rpl compiler distribution.
This only goes from binary to ASC format, but the reverse is trivial.
To compile, "% cc -o asc asc.c" will do.  (Where % is the shell
prompt.)

Some small changes may be needed in the MSDOS & Mac worlds, but not
too many.

Sorry about lack of cooents, but as I said, it is jsut a quick hack.
(With all the trouble the rpl compiler is giving me just now, I had to
prove to myself that I still can write working code :-).

=====================CUT HERE===================
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then
# unpack it by saving it in a file and typing "sh file".  (Files
# unpacked will be owned by you and have default permissions.)
#
# This archive contains:
# asc.c

echo x - asc.c
sed -e 's/^X//' > "asc.c" << '//E*O*F asc.c//'
X/* The crc routine is from _KERMIT_-_A_File_Transfer_Protocol_ by *
X * Frank da Cruz, Digital Press, 1987. P. 257.                    *
X * The rest is public domain; -JimC.                              */
X#include <stdio.h>
X
Xmain(argc, argv)
Xint argc;
Xchar **argv;
X{
X  FILE *infile, *outfile;
X  int count=0, c=0, hi=0, low=0;
X  unsigned short value=0, dofx=0;
X
X  argc--, argv++;
X  if (argc > 0) {
X    infile = fopen(*argv, "r");
X    argc--, argv++;
X    if (argc > 0)
X      outfile = fopen(*argv, "w");
X    else
X      outfile = stdout;
X  }
X  else infile = stdin;
X
X  for (count=8; count>0; count--)
X    c=getc(infile);
X
X  fprintf(outfile,"%%HP: T(3)A(R)F(.);\n");
X
X  while( (c=getc(infile)) != EOF ) {
X    value = c;
X    count +=1;
X
X    dofx = (dofx >> 4) ^ (((value ^ dofx) & 0xf) * 0x1081);
X    dofx = (dofx >> 4) ^ ((((value >> 4) ^ dofx) & 0xf) * 0x1081);
X
X    fprintf(outfile,"%2.2X",c);
X
X    if (! (count % 32)) 
X      fprintf(outfile,"\n");
X  }
X  dofx &= 0xffff;
X
X  for (count = 1; count < 4; count++) {
X    fprintf(outfile,"%1.1X",dofx & 0xf);
X    dofx >>= 4;
X    }
X  fprintf(outfile,"\n");
X}
X
X/*   @(#)James H. Cloos, Jr.  */
//E*O*F asc.c//

echo Possible errors detected by \'wc\' [hopefully none]:
temp=/tmp/shar$$
trap "rm -f $temp; exit" 0 1 2 3 15
cat > $temp <<\!!!
      51     159    1133 asc.c
!!!
wc  asc.c | sed 's=[^ ]*/==' | diff -b $temp -
exit 0
===========================CUT HERE,TOO===============================

-JimC
--
James H. Cloos, Jr.		Phone:  +1 716 673-1250
cloos@ACSU.Buffalo.EDU		Snail:  PersonalZipCode:  14048-0772, USA
cloos@ub.UUCP			Quote:  <>

degraaf@sol.cs.wmich.edu (Kip DeGraaf) (11/20/90)

In article <47057@eerie.acsu.Buffalo.EDU> cloos@acsu.buffalo.edu (James H. Cloos) writes:
>Well, I'll take this one.  The following is just a hack, but a more
>complete version will be included in my rpl compiler distribution.
>This only goes from binary to ASC format, but the reverse is trivial.
>To compile, "% cc -o asc asc.c" will do.  (Where % is the shell
>prompt.)

Many thanks, this will help greatly.

Kip DeGraaf

cloos@acsu.buffalo.edu (James H. Cloos) (11/21/90)

My appologies.  I made a rather inane mistake in the asc.c file I
posted.  To fix it, make the following two changes:

change the statement   fprintf(outfile,"%%HP: T(3)A(R)F(.);\n");
to                    fprintf(outfile,"%%%%HP: T(3)A(R)F(.);\n\"");

and change the statement   fprintf(outfile,"\n");
to                        fprintf(outfile,"\"\n"0;

These 2 changes will make it work correctly.  Sorry for the
inconvienience.

-JimC
--
James H. Cloos, Jr.		Phone:  +1 716 673-1250
cloos@ACSU.Buffalo.EDU		Snail:  PersonalZipCode:  14048-0772, USA
cloos@ub.UUCP			Quote:  <>

cloos@acsu.buffalo.edu (James H. Cloos) (11/27/90)

Ok, here is the final version of the hack asc.  Use it as you wish.

-JimC
--
James H. Cloos, Jr.		Phone:  +1 716 673-1250
cloos@ACSU.Buffalo.EDU		Snail:  PersonalZipCode:  14048-0772, USA
cloos@ub.UUCP			Quote:  <>

=============================CUT HERE==============================
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then
# unpack it by saving it in a file and typing "sh file".  (Files
# unpacked will be owned by you and have default permissions.)
#
# This archive contains:
# asc.c

echo x - asc.c
sed -e 's/^X//' > "asc.c" << '//E*O*F asc.c//'
X/* The crc routine is from _KERMIT_-_A_File_Transfer_Protocol_ by *
X * Frank da Cruz, Digital Press, 1987. P. 257.                    *
X * The rest is public domain; -JimC.                              *
X * This is the final version; the 3rd to get posted.              */
X#include <stdio.h>
X
Xmain(argc, argv)
Xint argc;
Xchar **argv;
X{
X  FILE *infile, *outfile;
X  int count=0, c=0, hi=0, low=0;
X  unsigned short value=0, dofx=0;
X
X  argc--, argv++;
X  if (argc > 0) 
X    infile = fopen(*argv, "r");
X  else
X    infile = stdin;
X  argc--, argv++;
X  if (argc > 0)
X    outfile = fopen(*argv, "w");
X  else
X    outfile = stdout;
X
X  for (count=8; count>0; count--)
X    c=getc(infile);
X
X  fprintf(outfile,"%%%%HP: T(3)A(R)F(.);\n\"");
X
X  while( (c=getc(infile)) != EOF ) {
X    value = c;
X    count +=1;
X
X    dofx = (dofx >> 4) ^ (((value ^ dofx) & 0xf) * 0x1081);
X    dofx = (dofx >> 4) ^ ((((value >> 4) ^ dofx) & 0xf) * 0x1081);
X
X    fprintf(outfile,"%2.2X",c);
X
X    if (! (count % 32)) 
X      fprintf(outfile,"\n");
X  }
X  dofx &= 0xffff;
X
X  for (count = 1; count < 4; count++) {
X    fprintf(outfile,"%1.1X",dofx & 0xf);
X    dofx >>= 4;
X    }
X  fprintf(outfile,"\"\n");
X}
X
X/*   @(#)James H. Cloos, Jr.  */
//E*O*F asc.c//

echo Possible errors detected by \'wc\' [hopefully none]:
temp=/tmp/shar$$
trap "rm -f $temp; exit" 0 1 2 3 15
cat > $temp <<\!!!
      52     169    1196 asc.c
!!!
wc  asc.c | sed 's=[^ ]*/==' | diff -b $temp -
exit 0