2 * Copyright (c) 1995, Index Data
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.6 1997-09-04 07:52:27 adam
8 * Moved atoi_n function to separate source file.
10 * Revision 1.5 1997/05/01 15:08:15 adam
11 * Added log_mask_str_x routine.
13 * Revision 1.4 1995/09/29 17:12:34 quinn
16 * Revision 1.3 1995/09/27 15:03:03 quinn
17 * Modified function heads & prototypes.
19 * Revision 1.2 1995/05/16 08:51:12 quinn
20 * License, documentation, and memory fixes
22 * Revision 1.1 1995/04/10 10:28:46 quinn
23 * Added copy of CCL and MARC display
33 int marc_display (const char *buf, FILE *outf)
38 int identifier_length;
40 int length_data_entry;
42 int length_implementation;
46 record_length = atoi_n (buf, 5);
47 if (record_length < 25)
49 indicator_length = atoi_n (buf+10, 1);
50 identifier_length = atoi_n (buf+11, 1);
51 base_address = atoi_n (buf+12, 4);
53 length_data_entry = atoi_n (buf+20, 1);
54 length_starting = atoi_n (buf+21, 1);
55 length_implementation = atoi_n (buf+22, 1);
57 for (entry_p = 24; buf[entry_p] != ISO2709_FS; )
58 entry_p += 3+length_data_entry+length_starting;
59 base_address = entry_p+1;
60 for (entry_p = 24; buf[entry_p] != ISO2709_FS; )
68 memcpy (tag, buf+entry_p, 3);
71 fprintf (outf, "%s ", tag);
72 data_length = atoi_n (buf+entry_p, length_data_entry);
73 entry_p += length_data_entry;
74 data_offset = atoi_n (buf+entry_p, length_starting);
75 entry_p += length_starting;
76 i = data_offset + base_address;
77 end_offset = i+data_length-1;
78 if (memcmp (tag, "00", 2) && indicator_length)
80 for (j = 0; j<indicator_length; j++)
81 fprintf (outf, "%c", buf[i++]);
83 while (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS && i < end_offset)
85 if (memcmp (tag, "00", 2) && identifier_length)
89 for (j = 1; j<identifier_length; j++)
90 fprintf (outf, "%c", buf[i++]);
92 while (buf[i] != ISO2709_RS && buf[i] != ISO2709_IDFS &&
93 buf[i] != ISO2709_FS && i < end_offset)
94 fprintf (outf, "%c", buf[i++]);
97 fprintf (outf, "%c", buf[i++]);
101 fprintf (outf, "-- separator but not at end of field\n");
102 if (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS)
103 fprintf (outf, "-- no separator at end of field\n");
105 return record_length;