2
#include "../fileio/machdr.h"
3
#include "../fileio/kind.h"
4
#include "../util/util.h"
8
extern void do_indent();
10
static void skip_file();
12
static void get_idf();
17
char header[INFOBYTES];
21
if((c = fgetc(infp)) == EOF) {
24
(void)ungetc(c, infp);
25
if(fread(header, 1, INFOBYTES, infp) != INFOBYTES) {
26
(void)fprintf(stderr, "Can't read MacBinary header.\n");
29
if(header[I_NAMEOFF] & 0x80) {
33
in_data_size = get4(header + I_DLENOFF);
34
in_rsrc_size = get4(header + I_RLENOFF);
35
in_ds = (((in_data_size + 127) >> 7) << 7);
36
in_rs = (((in_rsrc_size + 127) >> 7) << 7);
37
ds_skip = in_ds - in_data_size;
38
rs_skip = in_rs - in_rsrc_size;
40
skip_file(in_ds + in_rs);
44
if(header[I_NAMEOFF] == 0) {
45
get_idf((int)header[I_NAMEOFF + 1]);
46
skip_file(ds_skip + in_rs);
50
if(header[0] == 0 /* MORE CHECKS HERE! */) {
51
mcb(header, (unsigned long)in_rsrc_size,
52
(unsigned long)in_data_size, in_ds + in_rs);
55
(void)fprintf(stderr, "Unrecognized header.\n");
61
static void skip_file(skip)
68
n = (skip < 1024 ? skip : 1024);
69
if(fread(buff, 1, n, infp) != n) {
70
(void)fprintf(stderr, "Incomplete file.\n");
78
static void get_idf(kind)
81
char filename[1024], filename1[255];
83
if(fread(filename, 1, in_data_size, infp) != in_data_size) {
84
(void)fprintf(stderr, "Incomplete file.\n");
87
filename[in_data_size] = 0;
92
(void)fprintf(stderr, "Unix filename: \"%s\"\n", filename);
95
transname(filename, filename1, in_data_size);
96
(void)fprintf(stderr, "Packed filename: \"%s\"\n", filename1);
99
transname(filename, filename1, in_data_size);
100
(void)fprintf(stderr, "Archive name: \"%s\"\n", filename1);
103
(void)fprintf(stderr, "Unknown method detected\n");
106
(void)fprintf(stderr, "Error detected\n");
109
(void)fprintf(stderr, "Protected file detected\n");
112
(void)fprintf(stderr, "Copied file found\n");
115
(void)fprintf(stderr, "Do not understand this identification\n");