From 191f86396f357a0d26df67ce6b7d9ccb23f3e207 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Wed, 24 Sep 1997 13:29:40 +0000 Subject: [PATCH] Added verbose option -v to marcdump utility. --- util/marcdisp.c | 31 ++++++++++++++-- util/marcdump.c | 105 +++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 96 insertions(+), 40 deletions(-) diff --git a/util/marcdisp.c b/util/marcdisp.c index 336cae8..8ed80e3 100644 --- a/util/marcdisp.c +++ b/util/marcdisp.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: marcdisp.c,v $ - * Revision 1.6 1997-09-04 07:52:27 adam + * Revision 1.7 1997-09-24 13:29:40 adam + * Added verbose option -v to marcdump utility. + * + * Revision 1.6 1997/09/04 07:52:27 adam * Moved atoi_n function to separate source file. * * Revision 1.5 1997/05/01 15:08:15 adam @@ -30,7 +33,7 @@ #include #include -int marc_display (const char *buf, FILE *outf) +int marc_display_ex (const char *buf, FILE *outf, int debug) { int entry_p; int record_length; @@ -50,10 +53,22 @@ int marc_display (const char *buf, FILE *outf) identifier_length = atoi_n (buf+11, 1); base_address = atoi_n (buf+12, 4); + indicator_length = identifier_length = 2; + length_data_entry = atoi_n (buf+20, 1); length_starting = atoi_n (buf+21, 1); length_implementation = atoi_n (buf+22, 1); + if (debug) + { + fprintf (outf, "Record length %5d\n", record_length); + fprintf (outf, "Indicator length %5d\n", indicator_length); + fprintf (outf, "Identifier length %5d\n", identifier_length); + fprintf (outf, "Base address %5d\n", base_address); + fprintf (outf, "Length data entry %5d\n", length_data_entry); + fprintf (outf, "Length starting %5d\n", length_starting); + fprintf (outf, "Length implementation %5d\n", length_implementation); + } for (entry_p = 24; buf[entry_p] != ISO2709_FS; ) entry_p += 3+length_data_entry+length_starting; base_address = entry_p+1; @@ -68,6 +83,8 @@ int marc_display (const char *buf, FILE *outf) memcpy (tag, buf+entry_p, 3); entry_p += 3; tag[3] = '\0'; + if (debug) + fprintf (outf, "Tag: "); fprintf (outf, "%s ", tag); data_length = atoi_n (buf+entry_p, length_data_entry); entry_p += length_data_entry; @@ -75,11 +92,15 @@ int marc_display (const char *buf, FILE *outf) entry_p += length_starting; i = data_offset + base_address; end_offset = i+data_length-1; + if (debug) + fprintf (outf, " Ind: "); if (memcmp (tag, "00", 2) && indicator_length) { for (j = 0; j #include #include +#include #ifndef SEEK_SET #define SEEK_SET 0 @@ -33,50 +37,75 @@ int main (int argc, char **argv) { + int ret; + char *arg; + int verbose = 0; FILE *inf; long file_size; char *buf; - int r; + char *prog = *argv; + int count = 0; + int no = 0; - if (argc < 2) - { - fprintf (stderr, "usage\n%s \n", *argv); - exit (1); - } - inf = fopen (argv[1], "r"); - if (!inf) - { - fprintf (stderr, "%s: cannot open %s:%s\n", - *argv, argv[1], strerror (errno)); - exit (1); - } - if (fseek (inf, 0L, SEEK_END)) + while ((ret = options("v", argv, argc, &arg)) != -2) { - fprintf (stderr, "%s: cannot seek in %s:%s\n", - *argv, argv[1], strerror (errno)); - exit (1); + no++; + switch (ret) + { + case 0: + inf = fopen (arg, "r"); + if (!inf) + { + fprintf (stderr, "%s: cannot open %s:%s\n", + prog, arg, strerror (errno)); + exit (1); + } + if (fseek (inf, 0L, SEEK_END)) + { + fprintf (stderr, "%s: cannot seek in %s:%s\n", + prog, arg, strerror (errno)); + exit (1); + } + file_size = ftell (inf); + if (fseek (inf, 0L, SEEK_SET)) + { + fprintf (stderr, "%s: cannot seek in %s:%s\n", + prog, arg, strerror (errno)); + exit (1); + } + buf = xmalloc (file_size); + if (!buf) + { + fprintf (stderr, "%s: cannot xmalloc: %s\n", + prog, strerror (errno)); + exit (1); + } + if (fread (buf, 1, file_size, inf) != file_size) + { + fprintf (stderr, "%s: cannot read %s: %s\n", + prog, arg, strerror (errno)); + exit (1); + } + while ((ret = marc_display_ex (buf, stdout, verbose)) > 0) + { + buf += ret; + count++; + } + fclose (inf); + xfree (buf); + break; + case 'v': + verbose++; + break; + default: + fprintf (stderr, "Usage: %s [-v] file...\n", prog); + exit (1); + } } - file_size = ftell (inf); - if (fseek (inf, 0L, SEEK_SET)) + if (!no) { - fprintf (stderr, "%s: cannot seek in %s:%s\n", - *argv, argv[1], strerror (errno)); - exit (1); - } - buf = xmalloc (file_size); - if (!buf) - { - fprintf (stderr, "%s: cannot xmalloc: %s\n", - *argv, strerror (errno)); - exit (1); - } - if (fread (buf, 1, file_size, inf) != file_size) - { - fprintf (stderr, "%s: cannot read %s: %s\n", - *argv, argv[1], strerror (errno)); - exit (1); + fprintf (stderr, "Usage: %s [-v] file...\n", prog); + exit (1); } - while ((r = marc_display (buf, stdout)) > 0) - buf += r; exit (0); } -- 1.7.10.4