1/*
2** apple.h:	cut down macfile.h from CAP distribution
3*/
4#ifndef _APPLE_H
5
6#include <sys/param.h>
7#include <mactypes.h>
8
9#ifdef __sgi		/* bit of a hack ... need to investigate further */
10#define __svr4__	/* maybe there's a "configure" solution ? */
11#endif /* __sgi */
12
13#ifndef O_BINARY
14#define O_BINARY 0
15#endif /* O_BINARY */
16
17#ifdef _WIN32_TEST
18#undef UNICODE
19#include <windows.h>
20#endif /* _WIN32 */
21
22#ifndef MIN
23#define MIN(a,b) (((a)<(b))?(a):(b))
24#endif /* MIN */
25
26#define CT_SIZE		4			/* Size of type/creator */
27#define NUMMAP		512			/* initial number of maps */
28#define BLANK		"    "			/* blank type/creator */
29#define DEFMATCH	"*"			/* default mapping extension */
30
31typedef struct {
32	char		*extn;			/* filename extension */
33	int		elen;			/* length of extension */
34	char		type[CT_SIZE+1];	/* extension type */
35	char		creator[CT_SIZE+1];	/* extension creator */
36	unsigned short	fdflags;		/* finder flags */
37} afpmap;
38
39/* from "data.h" - libhfs routines */
40unsigned long d_toutime(unsigned long);
41long d_getl(unsigned char *);
42short d_getw(unsigned char *);
43
44#include "libfile/proto.h"
45
46/****** TYPE_CAP ******/
47
48/*
49 * taken from the CAP distribution:
50 * macfile.h - header file with Macintosh file definitions
51 *
52 * AppleTalk package for UNIX (4.2 BSD).
53 *
54 * Copyright (c) 1986, 1987, 1988 by The Trustees of Columbia University in the
55 * City of New York.
56 *
57 * Edit History:
58 *
59 *  Sept 1987	Created by Charlie
60 *
61 */
62
63
64#ifndef USE_MAC_DATES
65#define	USE_MAC_DATES
66#endif /* USE_MAC_DATES */
67
68typedef unsigned char byte;
69typedef char sbyte;
70typedef unsigned short word;
71typedef short sword;
72typedef unsigned int dword;
73typedef int sdword;
74/*
75typedef unsigned long dword;
76typedef long sdword;
77*/
78
79#define MAXCLEN 199		/* max size of a comment string */
80#define FINFOLEN 32		/* Finder info is 32 bytes */
81#define MAXMACFLEN 31		/* max Mac file name length */
82
83typedef struct {
84  /* base finder information */
85  byte fdType[4];		/* File type [4]*/
86  byte fdCreator[4];		/* File creator [8]*/
87  word fdFlags;			/* Finder flags [10]*/
88  word fdLocation[2];		/* File's location [14] */
89  word fdFldr;			/* File's window [16] */
90  /* extended finder information */
91  word fdIconID;		/* Icon ID [18] */
92  word fdUnused[4];		/* Unused [26] */
93  word fdComment;		/* Comment ID [28] */
94  dword fdPutAway;		/* Home directory ID [32] */
95  word fi_attr;			/* attributes */
96#define FI_MAGIC1 255
97  byte fi_magic1;		/* was: length of comment */
98#define FI_VERSION 0x10		/* version major 1, minor 0 */
99				/* if we have more than 8 versions wer're */
100				/* doiong something wrong anyway */
101  byte fi_version;		/* version number */
102#define FI_MAGIC 0xda
103  byte fi_magic;		/* magic word check */
104  byte fi_bitmap;		/* bitmap of included info */
105#define FI_BM_SHORTFILENAME 0x1	/* is this included? */
106#define FI_BM_MACINTOSHFILENAME 0x2 /* is this included? */
107  byte fi_shortfilename[12+1];	/* possible short file name */
108  byte fi_macfilename[32+1];	/* possible macintosh file name */
109  byte fi_comln;		/* comment length */
110  byte fi_comnt[MAXCLEN+1];	/* comment string */
111#ifdef USE_MAC_DATES
112  byte fi_datemagic;		/* sanity check */
113#define FI_MDATE 0x01		/* mtime & utime are valid */
114#define FI_CDATE 0x02		/* ctime is valid */
115  byte fi_datevalid;		/* validity flags */
116  byte fi_ctime[4];		/* mac file create time */
117  byte fi_mtime[4];		/* mac file modify time */
118  byte fi_utime[4];		/* (real) time mtime was set */
119#endif /* USE_MAC_DATES */
120} FileInfo;
121
122/* Atribute flags */
123#define FI_ATTR_SETCLEAR 0x8000 /* set-clear attributes */
124#define FI_ATTR_READONLY 0x20	/* file is read-only */
125#define FI_ATTR_ROPEN 0x10	/* resource fork in use */
126#define FI_ATTR_DOPEN 0x80	/* data fork in use */
127#define FI_ATTR_MUSER 0x2	/* multi-user */
128#define FI_ATTR_INVISIBLE 0x1	/* invisible */
129
130/**** MAC STUFF *****/
131
132/* Flags */
133#define FNDR_fOnDesk 0x1
134#define FNDR_fHasBundle 0x2000
135#define FNDR_fInvisible 0x4000
136/* locations */
137#define FNDR_fTrash -3	/* File in Trash */
138#define FNDR_fDesktop -2	/* File on desktop */
139#define FNDR_fDisk 0	/* File in disk window */
140
141/****** TYPE_ESHARE ******/
142
143/*
144**	Information supplied by Jens-Uwe Mager (jum@helios.de)
145*/
146
147#define ES_VERSION 	0x0102
148#define ES_MAGIC 	0x3681093
149#define ES_INFOLEN	32
150#define ES_INFO_SIZE	512
151
152typedef unsigned char uint8;
153typedef unsigned short uint16;
154typedef unsigned int uint32;
155
156typedef struct {
157	uint32	  	magic;
158	uint32	  	serno;			/* written only, never read */
159	uint16	  	version;
160	uint16	  	attr;			/* invisible... */
161	uint16	  	openMax;		/* max number of opens */
162	uint16	  	filler0;
163	uint32	  	backupCleared;		/* time backup bit cleared */
164	uint32          id;			/* dir/file id */
165        uint32          createTime;             /* unix format */
166        uint32          backupTime;             /* unix format */
167/*	uint8		finderInfo[INFOLEN];*/
168  	/* base finder information (compatible with CAP) */
169	uint8		fdType[4];		/* File type [4]*/
170	uint8		fdCreator[4];		/* File creator [8]*/
171	uint16		fdFlags;		/* Finder flags [10]*/
172	uint16		fdLocation[2];		/* File's location [14] */
173	uint16		fdFldr;			/* File's window [16] */
174	/* extended finder information */
175	uint16		fdIconID;		/* Icon ID [18] */
176	uint16		fdUnused[4];		/* Unused [26] */
177	uint16		fdComment;		/* Comment ID [28] */
178	uint32		fdPutAway;		/* Home directory ID [32] */
179} es_FileInfo;
180
181/****** TYPE_USHARE ******/
182
183/* similar to the EtherShare layout, but the finder info stuff is different
184   info provided by: Phil Sylvester <psylvstr@interaccess.com> */
185
186typedef struct {
187	uint8		fdType[4];		/* File type [4]*/
188	uint8		fdCreator[4];		/* File creator [8]*/
189	uint16		fdFlags;		/* Finder flags [10]*/
190	uint8		unknown1[22];		/* ignore [32] */
191	uint32		btime;			/* mac file backup time [36]*/
192	uint8		unknown2[4];		/* ignore [40] */
193	uint32		ctime;			/* mac file create time [44]*/
194	uint8		unknown3[8];		/* ignore [52] */
195	uint32		mtime;			/* mac file modify time [56]*/
196	uint8		unknown4[456];		/* ignore [512] */
197} us_FileInfo;
198
199/****** TYPE_DOUBLE, TYPE_SINGLE ******/
200
201/*
202**	Taken from cvt2cap (c) May 1988, Paul Campbell
203*/
204
205typedef struct {
206	dword id;
207	dword offset;
208	dword length;
209} a_entry;
210
211typedef struct {
212	dword   magic;
213	dword   version;
214	char    home[16];
215	word    nentries;
216	a_entry	entries[1];
217} a_hdr;
218
219#define A_HDR_SIZE	26
220#define A_ENTRY_SIZE	sizeof(a_entry)
221
222#define A_VERSION	0x00010000
223#define APPLE_SINGLE	0x00051600
224#define APPLE_DOUBLE	0x00051607
225#define ID_DATA		1
226#define ID_RESOURCE	2
227#define ID_NAME		3
228#define ID_FINDER	9
229
230/****** TYPE_MACBIN ******/
231/*
232**	taken from capit.c by Nigel Perry, np@doc.ic.ac.uk which is adapted
233**	from unmacbin by John M. Sellens, jmsellens@watdragon.uwaterloo.ca
234*/
235
236
237#define MB_NAMELEN 63              /* maximum legal Mac file name length */
238#define MB_SIZE 128
239
240/* Format of a bin file:
241A bin file is composed of 128 byte blocks.  The first block is the
242info_header (see below).  Then comes the data fork, null padded to fill the
243last block.  Then comes the resource fork, padded to fill the last block.  A
244proposal to follow with the text of the Get Info box has not been implemented,
245to the best of my knowledge.  Version, zero1 and zero2 are what the receiving
246program looks at to determine if a MacBinary transfer is being initiated.
247*/
248typedef struct {     /* info file header (128 bytes). Unfortunately, these
249                        longs don't align to word boundaries */
250            byte version;           /* there is only a version 0 at this time */
251            byte nlen;              /* Length of filename. */
252            byte name[MB_NAMELEN];  /* Filename */
253            byte type[4];           /* File type. */
254            byte auth[4];           /* File creator. */
255            byte flags;             /* file flags: LkIvBnSyBzByChIt */
256            byte zero1;             /* Locked, Invisible,Bundle, System */
257                                    /* Bozo, Busy, Changed, Init */
258            byte icon_vert[2];      /* Vertical icon position within window */
259            byte icon_horiz[2];     /* Horizontal icon postion in window */
260            byte window_id[2];      /* Window or folder ID. */
261            byte protect;           /* = 1 for protected file, 0 otherwise */
262            byte zero2;
263            byte dflen[4];          /* Data Fork length (bytes) - most sig.  */
264            byte rflen[4];          /* Resource Fork length       byte first */
265            byte cdate[4];          /* File's creation date. */
266            byte mdate[4];          /* File's "last modified" date. */
267            byte ilen[2];           /* GetInfo message length */
268	    byte flags2;            /* Finder flags, bits 0-7 */
269	    byte unused[14];
270	    byte packlen[4];        /* length of total files when unpacked */
271	    byte headlen[2];        /* length of secondary header */
272	    byte uploadvers;        /* Version of MacBinary II that the uploading program is written for */
273	    byte readvers;          /* Minimum MacBinary II version needed to read this file */
274            byte crc[2];            /* CRC of the previous 124 bytes */
275	    byte padding[2];        /* two trailing unused bytes */
276} mb_info;
277
278/*
279**	An array useful for CRC calculations that use 0x1021 as the "seed"
280**	taken from mcvert.c modified by Jim Van Verth.
281*/
282
283static unsigned short mb_magic[] = {
284    0x0000,  0x1021,  0x2042,  0x3063,  0x4084,  0x50a5,  0x60c6,  0x70e7,
285    0x8108,  0x9129,  0xa14a,  0xb16b,  0xc18c,  0xd1ad,  0xe1ce,  0xf1ef,
286    0x1231,  0x0210,  0x3273,  0x2252,  0x52b5,  0x4294,  0x72f7,  0x62d6,
287    0x9339,  0x8318,  0xb37b,  0xa35a,  0xd3bd,  0xc39c,  0xf3ff,  0xe3de,
288    0x2462,  0x3443,  0x0420,  0x1401,  0x64e6,  0x74c7,  0x44a4,  0x5485,
289    0xa56a,  0xb54b,  0x8528,  0x9509,  0xe5ee,  0xf5cf,  0xc5ac,  0xd58d,
290    0x3653,  0x2672,  0x1611,  0x0630,  0x76d7,  0x66f6,  0x5695,  0x46b4,
291    0xb75b,  0xa77a,  0x9719,  0x8738,  0xf7df,  0xe7fe,  0xd79d,  0xc7bc,
292    0x48c4,  0x58e5,  0x6886,  0x78a7,  0x0840,  0x1861,  0x2802,  0x3823,
293    0xc9cc,  0xd9ed,  0xe98e,  0xf9af,  0x8948,  0x9969,  0xa90a,  0xb92b,
294    0x5af5,  0x4ad4,  0x7ab7,  0x6a96,  0x1a71,  0x0a50,  0x3a33,  0x2a12,
295    0xdbfd,  0xcbdc,  0xfbbf,  0xeb9e,  0x9b79,  0x8b58,  0xbb3b,  0xab1a,
296    0x6ca6,  0x7c87,  0x4ce4,  0x5cc5,  0x2c22,  0x3c03,  0x0c60,  0x1c41,
297    0xedae,  0xfd8f,  0xcdec,  0xddcd,  0xad2a,  0xbd0b,  0x8d68,  0x9d49,
298    0x7e97,  0x6eb6,  0x5ed5,  0x4ef4,  0x3e13,  0x2e32,  0x1e51,  0x0e70,
299    0xff9f,  0xefbe,  0xdfdd,  0xcffc,  0xbf1b,  0xaf3a,  0x9f59,  0x8f78,
300    0x9188,  0x81a9,  0xb1ca,  0xa1eb,  0xd10c,  0xc12d,  0xf14e,  0xe16f,
301    0x1080,  0x00a1,  0x30c2,  0x20e3,  0x5004,  0x4025,  0x7046,  0x6067,
302    0x83b9,  0x9398,  0xa3fb,  0xb3da,  0xc33d,  0xd31c,  0xe37f,  0xf35e,
303    0x02b1,  0x1290,  0x22f3,  0x32d2,  0x4235,  0x5214,  0x6277,  0x7256,
304    0xb5ea,  0xa5cb,  0x95a8,  0x8589,  0xf56e,  0xe54f,  0xd52c,  0xc50d,
305    0x34e2,  0x24c3,  0x14a0,  0x0481,  0x7466,  0x6447,  0x5424,  0x4405,
306    0xa7db,  0xb7fa,  0x8799,  0x97b8,  0xe75f,  0xf77e,  0xc71d,  0xd73c,
307    0x26d3,  0x36f2,  0x0691,  0x16b0,  0x6657,  0x7676,  0x4615,  0x5634,
308    0xd94c,  0xc96d,  0xf90e,  0xe92f,  0x99c8,  0x89e9,  0xb98a,  0xa9ab,
309    0x5844,  0x4865,  0x7806,  0x6827,  0x18c0,  0x08e1,  0x3882,  0x28a3,
310    0xcb7d,  0xdb5c,  0xeb3f,  0xfb1e,  0x8bf9,  0x9bd8,  0xabbb,  0xbb9a,
311    0x4a75,  0x5a54,  0x6a37,  0x7a16,  0x0af1,  0x1ad0,  0x2ab3,  0x3a92,
312    0xfd2e,  0xed0f,  0xdd6c,  0xcd4d,  0xbdaa,  0xad8b,  0x9de8,  0x8dc9,
313    0x7c26,  0x6c07,  0x5c64,  0x4c45,  0x3ca2,  0x2c83,  0x1ce0,  0x0cc1,
314    0xef1f,  0xff3e,  0xcf5d,  0xdf7c,  0xaf9b,  0xbfba,  0x8fd9,  0x9ff8,
315    0x6e17,  0x7e36,  0x4e55,  0x5e74,  0x2e93,  0x3eb2,  0x0ed1,  0x1ef0
316};
317
318
319/****** TYPE_FE ******/
320
321/* Information provided by Mark Weinstein <mrwesq@earthlink.net> */
322
323typedef struct {
324	byte	nlen;
325	byte	name[31];
326	byte	type[4];
327	byte	creator[4];
328	byte	flags[2];
329	byte	location[4];
330	byte	fldr[2];
331	byte	xinfo[16];
332	byte	cdate[4];
333	byte	mdate[4];
334	byte	bdate[4];
335	byte	fileid[4];
336	byte	sname[8];
337	byte	ext[3];
338	byte	pad;
339} fe_info;
340
341#define FE_SIZE 92
342
343/****** TYPE_SGI ******/
344
345typedef struct {
346	char    unknown1[8];
347	char    type[4];
348	char    creator[4];
349	char    unknown2[238];
350	char    name[32];
351	char    unknown3[14];
352} sgi_info;
353
354#define SGI_SIZE 300
355
356#define _APPLE_H
357#endif /* _APPLE_H */
358