/*
* This file has been modified for the cdrkit suite.
*
* The behaviour and appearence of the program code below can differ to a major
* extent from the version distributed by the original author(s).
*
* For details, see Changelog file distributed with the cdrkit package. If you
* received this file from another source then ask the distributing person for
* a log of modifications.
*
*/
/* @(#)apple.h 1.7 04/03/02 joerg, Copyright 1997, 1998, 1999, 2000 James Pearson */
/*
* Copyright (c) 1997, 1998, 1999, 2000 James Pearson
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* apple.h: cut down macfile.h from CAP distribution
*/
#ifndef _APPLE_H
#define _APPLE_H
#include "mactypes.h"
#ifndef O_BINARY
#define O_BINARY 0
#endif /* O_BINARY */
#ifdef _WIN32_TEST
#undef UNICODE
#include <windows.h>
#endif /* _WIN32 */
#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a):(b))
#endif /* MIN */
#define CT_SIZE 4 /* Size of type/creator */
#define NUMMAP 512 /* initial number of maps */
#define BLANK " " /* blank type/creator */
#define DEFMATCH "*" /* default mapping extension */
typedef struct {
char *extn; /* filename extension */
int elen; /* length of extension */
char type[CT_SIZE+1]; /* extension type */
char creator[CT_SIZE+1]; /* extension creator */
unsigned short fdflags; /* finder flags */
} afpmap;
/* from "data.h" - libhfs routines */
unsigned long d_toutime(unsigned long);
unsigned long d_dtoutime(long);
long d_getl(unsigned char *);
short d_getw(unsigned char *);
/* for libfile routines */
int init_magic(char *);
char * get_magic_match(const char *);
typedef unsigned char byte;
typedef unsigned char word[2];
typedef unsigned char dword[4];
#define INFOLEN 32 /* Finder info is 32 bytes */
typedef struct {
/* base finder information */
char fdType[4]; /* File type [4] */
char fdCreator[4]; /* File creator [8] */
word fdFlags; /* Finder flags [10] */
word fdLocation[2]; /* File's location [14] */
word fdFldr; /* File's window [16] */
/* extended finder information */
word fdIconID; /* Icon ID [18] */
word fdUnused[3]; /* Unused [24] */
byte fdScript; /* Script system used [25] */
byte fdXFlags; /* Reserved [26] */
word fdComment; /* Comment ID [28] */
dword fdPutAway; /* Home directory ID [32] */
} Finfo;
typedef struct {
/* base finder information */
word frRect[4]; /* Folder's rectangle [8] */
word frFlags; /* Finder flags [10] */
word frLocation[2]; /* Folder's location [14] */
word frView; /* Folder's view [16] */
/* extended finder information */
word frScroll[2]; /* Folder's scroll position [20] */
dword frOpenChain; /* ID's of open folders [24] */
byte frScript; /* Script system used [25] */
byte frXFlags; /* Reserved [26] */
word frComment; /* Comment ID [28] */
dword frPutAway; /* Home directory ID [32] */
} Dinfo;
/****** TYPE_CAP ******/
/*
* taken from the CAP distribution:
* macfile.h - header file with Macintosh file definitions
*
* AppleTalk package for UNIX (4.2 BSD).
*
* Copyright (c) 1986, 1987, 1988 by The Trustees of Columbia University in the
* City of New York.
*
* Edit History:
*
* Sept 1987 Created by Charlie
*
*/
#ifndef USE_MAC_DATES
#define USE_MAC_DATES
#endif /* USE_MAC_DATES */
#define MAXCLEN 199 /* max size of a comment string */
#define FINFOLEN 32 /* Finder info is 32 bytes */
#define MAXMACFLEN 31 /* max Mac file name length */
typedef struct {
byte finderinfo[INFOLEN]; /* Finder info */
word fi_attr; /* attributes */
#define FI_MAGIC1 255
byte fi_magic1; /* was: length of comment */
#define FI_VERSION 0x10 /* version major 1, minor 0 */
/* if we have more than 8 versions wer're */
/* doiong something wrong anyway */
byte fi_version; /* version number */
#define FI_MAGIC 0xda
byte fi_magic; /* magic word check */
byte fi_bitmap; /* bitmap of included info */
#define FI_BM_SHORTFILENAME 0x1 /* is this included? */
#define FI_BM_MACINTOSHFILENAME 0x2 /* is this included? */
byte fi_shortfilename[12+1]; /* possible short file name */
byte fi_macfilename[32+1]; /* possible macintosh file name */
byte fi_comln; /* comment length */
byte fi_comnt[MAXCLEN+1]; /* comment string */
#ifdef USE_MAC_DATES
byte fi_datemagic; /* sanity check */
#define FI_MDATE 0x01 /* mtime & utime are valid */
#define FI_CDATE 0x02 /* ctime is valid */
byte fi_datevalid; /* validity flags */
byte fi_ctime[4]; /* mac file create time */
byte fi_mtime[4]; /* mac file modify time */
byte fi_utime[4]; /* (real) time mtime was set */
#endif /* USE_MAC_DATES */
} FileInfo;
/* Atribute flags */
#define FI_ATTR_SETCLEAR 0x8000 /* set-clear attributes */
#define FI_ATTR_READONLY 0x20 /* file is read-only */
#define FI_ATTR_ROPEN 0x10 /* resource fork in use */
#define FI_ATTR_DOPEN 0x80 /* data fork in use */
#define FI_ATTR_MUSER 0x2 /* multi-user */
#define FI_ATTR_INVISIBLE 0x1 /* invisible */
/**** MAC STUFF *****/
/* Flags */
#define FNDR_fOnDesk 0x1
#define FNDR_fHasBundle 0x2000
#define FNDR_fInvisible 0x4000
/* locations */
#define FNDR_fTrash -3 /* File in Trash */
#define FNDR_fDesktop -2 /* File on desktop */
#define FNDR_fDisk 0 /* File in disk window */
/****** TYPE_ESHARE ******/
/*
* Information supplied by Jens-Uwe Mager (jum@helios.de)
*/
#define ES_VERSION 0x0102
#define ES_MAGIC 0x3681093
#define ES_INFOLEN 32
#define ES_INFO_SIZE 512
typedef struct {
dword magic;
dword serno; /* written only, never read */
word version;
word attr; /* invisible... */
word openMax; /* max number of opens */
word filler0;
dword backupCleared; /* time backup bit cleared */
dword id; /* dir/file id */
dword createTime; /* unix format */
dword backupTime; /* unix format */
byte finderinfo[INFOLEN]; /* Finder info */
} es_FileInfo;
/****** TYPE_USHARE ******/
/*
* similar to the EtherShare layout, but the finder info stuff is different
* info provided by: Phil Sylvester <psylvstr@interaccess.com>
*/
typedef struct {
byte finderinfo[INFOLEN]; /* Finder info */
dword btime; /* mac file backup time [36]*/
byte unknown2[4]; /* ignore [40] */
dword ctime; /* mac file create time [44]*/
byte unknown3[8]; /* ignore [52] */
dword mtime; /* mac file modify time [56]*/
byte unknown4[456]; /* ignore [512] */
} us_FileInfo;
/****** TYPE_DOUBLE, TYPE_SINGLE ******/
/*
* Taken from cvt2cap (c) May 1988, Paul Campbell
*/
typedef struct {
dword id;
dword offset;
dword length;
} a_entry;
typedef struct {
dword magic;
dword version;
char home[16];
word nentries;
a_entry entries[1];
} a_hdr;
#define A_HDR_SIZE 26
#define A_ENTRY_SIZE sizeof (a_entry)
#define A_VERSION1 0x00010000
#define A_VERSION2 0x00020000
#define APPLE_SINGLE 0x00051600
#define APPLE_DOUBLE 0x00051607
#define ID_DATA 1
#define ID_RESOURCE 2
#define ID_NAME 3
#define ID_FILEI 7 /* v1 */
#define ID_FILEDATESI 8 /* v2 */
#define ID_FINDER 9
#define A_DATE 16
/****** TYPE_MACBIN ******/
/*
* taken from capit.c by Nigel Perry, np@doc.ic.ac.uk which is adapted
* from unmacbin by John M. Sellens, jmsellens@watdragon.uwaterloo.ca
*/
#define MB_NAMELEN 63 /* maximum legal Mac file name length */
#define MB_SIZE 128
/*
* Format of a bin file:
* A bin file is composed of 128 byte blocks. The first block is the
* info_header (see below). Then comes the data fork, null padded to fill the
* last block. Then comes the resource fork, padded to fill the last block. A
* proposal to follow with the text of the Get Info box has not been implemented,
* to the best of my knowledge. Version, zero1 and zero2 are what the receiving
* program looks at to determine if a MacBinary transfer is being initiated.
*/
typedef struct { /* info file header (128 bytes). Unfortunately, these */
/* longs don't align to word boundaries */
byte version; /* there is only a version 0 at this time */
byte nlen; /* Length of filename. */
byte name[MB_NAMELEN]; /* Filename */
byte type[4]; /* File type. */
byte auth[4]; /* File creator. */
byte flags; /* file flags: LkIvBnSyBzByChIt */
byte zero1; /* Locked, Invisible,Bundle, System */
/* Bozo, Busy, Changed, Init */
byte icon_vert[2]; /* Vertical icon position within window */
byte icon_horiz[2]; /* Horizontal icon postion in window */
byte window_id[2]; /* Window or folder ID. */
byte protect; /* = 1 for protected file, 0 otherwise */
byte zero2;
byte dflen[4]; /* Data Fork length (bytes) - most sig. */
byte rflen[4]; /* Resource Fork length byte first */
byte cdate[4]; /* File's creation date. */
byte mdate[4]; /* File's "last modified" date. */
byte ilen[2]; /* GetInfo message length */
byte flags2; /* Finder flags, bits 0-7 */
byte unused[14];
byte packlen[4]; /* length of total files when unpacked */
byte headlen[2]; /* length of secondary header */
byte uploadvers; /* Version of MacBinary II that the uploading program is written for */
byte readvers; /* Minimum MacBinary II version needed to read this file */
byte crc[2]; /* CRC of the previous 124 bytes */
byte padding[2]; /* two trailing unused bytes */
} mb_info;
/****** TYPE_FE ******/
/* Information provided by Mark Weinstein <mrwesq@earthlink.net> */
typedef struct {
byte nlen;
byte name[31];
byte finderinfo[INFOLEN]; /* Finder info */
byte cdate[4];
byte mdate[4];
byte bdate[4];
byte fileid[4];
byte sname[8];
byte ext[3];
byte pad;
} fe_info;
#define FE_SIZE 92
/****** TYPE_SGI ******/
typedef struct {
byte unknown1[8];
byte finderinfo[INFOLEN]; /* Finder info */
byte unknown2[214];
byte name[32];
byte unknown3[14];
} sgi_info;
#define SGI_SIZE 300
/****** TYPE_SFM ******/
/*
* Information provided by Lou Rieger <lrieger@meridiancg.com> taken from
* an email from Eddie Bowers <eddieb@microsoft.com>
*/
typedef struct {
byte afpi_Signature[4]; /* Must be 0x00504641 */
byte afpi_Version[4]; /* Must be 0x00010000 */
byte afpi_Reserved1[4];
byte afpi_BackupTime[4]; /* Backup time for the file/dir */
byte finderinfo[INFOLEN]; /* Finder info */
byte afpi_ProDosInfo[6]; /* ProDos Info */
byte afpi_Reserved2[6];
} sfm_info;
#define SFM_MAGIC 0x00504641
#define SFM_VERSION 0x00010000
/****** TYPE_DHFS ******/
#ifdef IS_MACOS_X
/*
* Code ideas from 'hfstar' by Marcel Weiher marcel@metaobject.com,
* another GNU hfstar by Torres Vedras paulotex@yahoo.com and
* hfspax by Howard Oakley howard@quercus.demon.co.uk
*/
#include <sys/attr.h>
typedef struct {
unsigned long info_length;
struct timespec ctime;
struct timespec mtime;
byte info[32];
} attrinfo;
#endif /* IS_MACOS_X */
#endif /* _APPLE_H */