Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi. These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00
|
|
|
/*
|
|
|
|
BINPRINT.C
|
|
|
|
|
|
|
|
Displays files in hex-dump format (with ascii subdisplay if desired)
|
|
|
|
|
|
|
|
v1.2 Optimized and fixed input from terminal bug (pv)
|
|
|
|
v1.1 Added stacksize directive (jb)
|
|
|
|
v1.0 Original version by Derek Taubert
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma optimize -1
|
|
|
|
#pragma stacksize 1024
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <ctype.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
extern FILE *fdopen(int,char *);
|
|
|
|
|
|
|
|
unsigned int doline(char *dest, char *source,
|
|
|
|
unsigned int actual, unsigned int cols);
|
|
|
|
|
|
|
|
unsigned char *buffer2;
|
|
|
|
|
|
|
|
main(argc,argv)
|
1999-01-15 15:54:40 +00:00
|
|
|
int argc;
|
|
|
|
char **argv;
|
Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi. These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00
|
|
|
{
|
1999-01-15 15:54:40 +00:00
|
|
|
int duh;
|
|
|
|
int a;
|
|
|
|
int c,errflg = 0,columns = 16;
|
|
|
|
size_t pos = 0;
|
|
|
|
unsigned char *buffer;
|
|
|
|
extern char *optarg;
|
|
|
|
extern int optind;
|
|
|
|
extern int getopt(int,char **,char*);
|
Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi. These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00
|
|
|
|
1999-01-15 15:54:40 +00:00
|
|
|
while ((c = getopt(argc,argv, "Vc:")) != EOF)
|
|
|
|
switch (c) {
|
|
|
|
case 'c' :
|
|
|
|
columns = atoi(optarg);
|
|
|
|
break;
|
|
|
|
case 'V' :
|
|
|
|
fprintf(stdout, "binprint v1.2 for GNO/ME\n");
|
|
|
|
exit(0);
|
|
|
|
default : errflg++;
|
Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi. These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00
|
|
|
}
|
1999-01-15 15:54:40 +00:00
|
|
|
if (errflg) {
|
|
|
|
fprintf(stderr,"usage: binprint [-c<columns>] files...\n");
|
|
|
|
exit(2);
|
|
|
|
}
|
|
|
|
argv += optind;
|
|
|
|
if (columns < 8) columns = 8;
|
|
|
|
if ((buffer2 = (unsigned char *)malloc((size_t)(columns*4)+1)) == NULL) {
|
|
|
|
fprintf(stderr,"Cannot allocate buffer space\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
buffer = (unsigned char *)(buffer2+(columns*3));
|
|
|
|
if (optind == argc) {
|
|
|
|
duh = STDIN_FILENO;
|
|
|
|
goto action;
|
|
|
|
}
|
|
|
|
for (;optind<argc;optind++) {
|
|
|
|
if ((duh = open(*argv,O_RDONLY|O_BINARY)) == -1) {
|
|
|
|
fprintf(stderr,"error opening %s\n",*argv);
|
|
|
|
exit(1);
|
Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi. These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00
|
|
|
}
|
1999-01-15 15:54:40 +00:00
|
|
|
printf("\n%s\n",*argv);
|
|
|
|
action:
|
|
|
|
while ((a = (int)read(duh, buffer,
|
|
|
|
(size_t)(columns * sizeof(unsigned char)))) != 0) {
|
|
|
|
printGood(pos,buffer,a,columns);
|
|
|
|
pos += a;
|
Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi. These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00
|
|
|
}
|
1999-01-15 15:54:40 +00:00
|
|
|
close(duh);
|
|
|
|
}
|
|
|
|
free(buffer);
|
|
|
|
free(buffer2);
|
|
|
|
exit(0);
|
Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi. These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
printGood(off,buf,real,form)
|
1999-01-15 15:54:40 +00:00
|
|
|
long off;
|
|
|
|
unsigned char *buf;
|
|
|
|
int real;
|
|
|
|
int form;
|
Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi. These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00
|
|
|
{
|
1999-01-15 15:54:40 +00:00
|
|
|
if (!real) return;
|
|
|
|
#if 0
|
Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi. These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00
|
|
|
printf("%8lX: ",off);
|
1999-01-15 15:54:40 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* The following is a hack required because of buffering by the stdio
|
|
|
|
libraries. I wish it was not necesary... */
|
|
|
|
|
|
|
|
{
|
|
|
|
static char puthere[11];
|
|
|
|
int howmany;
|
|
|
|
|
|
|
|
howmany = sprintf(puthere,"%8lX: ",off);
|
|
|
|
write(STDOUT_FILENO, puthere, (size_t)howmany);
|
|
|
|
}
|
|
|
|
|
|
|
|
write(STDOUT_FILENO, buffer2, (size_t)doline(buffer2,buf,form,real));
|
Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi. These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00
|
|
|
}
|