Logo Search packages:      
Sourcecode: unadf version File versions  Download package

adf_blk.h

/*
 *  ADF Library. (C) 1997-2002 Laurent Clevy
 *
 *  adf_blk.h
 *
 *  $Id$
 *
 *  general blocks structures
 *
 *  This file is part of ADFLib.
 *
 *  ADFLib 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 of the License, or
 *  (at your option) any later version.
 *
 *  ADFLib 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 Foobar; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */


#ifndef ADF_BLK_H
#define ADF_BLK_H 1

#define ULONG   unsigned long
#define USHORT  unsigned short
#define UCHAR   unsigned char

#define LOGICAL_BLOCK_SIZE    512

/* ----- FILE SYSTEM ----- */

#define FSMASK_FFS         1
#define FSMASK_INTL        2
#define FSMASK_DIRCACHE    4

#define isFFS(c)           ((c)&FSMASK_FFS)
#define isOFS(c)           (!((c)&FSMASK_FFS))
#define isINTL(c)          ((c)&FSMASK_INTL)
#define isDIRCACHE(c)      ((c)&FSMASK_DIRCACHE)


/* ----- ENTRIES ----- */

/* access constants */

#define ACCMASK_D (1<<0)
#define ACCMASK_E (1<<1)
#define ACCMASK_W (1<<2)
#define ACCMASK_R (1<<3)
#define ACCMASK_A (1<<4)
#define ACCMASK_P (1<<5)
#define ACCMASK_S (1<<6)
#define ACCMASK_H (1<<7)

#define hasD(c)    ((c)&ACCMASK_D)
#define hasE(c)    ((c)&ACCMASK_E)
#define hasW(c)    ((c)&ACCMASK_W)
#define hasR(c)    ((c)&ACCMASK_R)
#define hasA(c)    ((c)&ACCMASK_A)
#define hasP(c)      ((c)&ACCMASK_P)
#define hasS(c)    ((c)&ACCMASK_S)
#define hasH(c)    ((c)&ACCMASK_H)


/* ----- BLOCKS ----- */

/* block constants */

#define BM_VALID  -1
#define BM_INVALID      0

#define HT_SIZE         72
#define BM_SIZE     25
#define MAX_DATABLK     72

#define MAXNAMELEN      30
#define MAXCMMTLEN      79


/* block primary and secondary types */

#define T_HEADER  2
#define ST_ROOT         1
#define ST_DIR          2
#define ST_FILE         -3
#define ST_LFILE  -4
#define ST_LDIR         4
#define ST_LSOFT  3
#define T_LIST          16
#define T_DATA          8
#define T_DIRC          33


/*--- blocks structures --- */


struct bBootBlock {
/*000*/     char  dosType[4];
/*004*/     ULONG checkSum;
/*008*/     long  rootBlock;
/*00c*/     UCHAR data[500+512];
};


struct bRootBlock {
/*000*/     long  type;
        long      headerKey;
        long      highSeq;
/*00c*/     long  hashTableSize;
        long      firstData;
/*014*/     ULONG checkSum;
/*018*/     long  hashTable[HT_SIZE];           /* hash table */
/*138*/     long  bmFlag;                       /* bitmap flag, -1 means VALID */
/*13c*/     long  bmPages[BM_SIZE];
/*1a0*/     long  bmExt;
/*1a4*/     long  cDays;      /* creation date FFS and OFS */
/*1a8*/     long  cMins;
/*1ac*/     long  cTicks;
/*1b0*/     char  nameLen;
/*1b1*/     char  diskName[MAXNAMELEN+1];
        char      r2[8];
/*1d8*/     long  days;       /* last access : days after 1 jan 1978 */
/*1dc*/     long  mins;       /* hours and minutes in minutes */
/*1e0*/     long  ticks;            /* 1/50 seconds */
/*1e4*/     long  coDays;     /* creation date OFS */
/*1e8*/     long  coMins;
/*1ec*/     long  coTicks;
        long      nextSameHash;     /* == 0 */
        long      parent;           /* == 0 */
/*1f8*/     long  extension;        /* FFS: first directory cache block */
/*1fc*/     long  secType;    /* == 1 */
};


struct bFileHeaderBlock {
/*000*/     long  type;       /* == 2 */
/*004*/     long  headerKey;  /* current block number */
/*008*/     long  highSeq;    /* number of data block in this hdr block */
/*00c*/     long  dataSize;   /* == 0 */
/*010*/     long  firstData;
/*014*/     ULONG checkSum;
/*018*/     long  dataBlocks[MAX_DATABLK];
/*138*/     long  r1;
/*13c*/     long  r2;
/*140*/     long  access;     /* bit0=del, 1=modif, 2=write, 3=read */
/*144*/     unsigned long     byteSize;
/*148*/     char  commLen;
/*149*/     char  comment[MAXCMMTLEN+1];
        char      r3[91-(MAXCMMTLEN+1)];
/*1a4*/     long  days;
/*1a8*/     long  mins;
/*1ac*/     long  ticks;
/*1b0*/     char  nameLen;
/*1b1*/     char  fileName[MAXNAMELEN+1];
        long      r4;
/*1d4*/     long  real;       /* unused == 0 */
/*1d8*/     long  nextLink;   /* link chain */
        long      r5[5];
/*1f0*/     long  nextSameHash;     /* next entry with sane hash */
/*1f4*/     long  parent;           /* parent directory */
/*1f8*/     long  extension;  /* pointer to extension block */
/*1fc*/     long  secType;    /* == -3 */
};


/*--- file header extension block structure ---*/

struct bFileExtBlock {
/*000*/     long  type;       /* == 0x10 */
/*004*/     long  headerKey;
/*008*/     long  highSeq;
/*00c*/     long  dataSize;   /* == 0 */
/*010*/     long  firstData;  /* == 0 */
/*014*/     ULONG checkSum;
/*018*/     long  dataBlocks[MAX_DATABLK];
        long      r[45];
        long      info;       /* == 0 */
        long      nextSameHash;     /* == 0 */
/*1f4*/     long  parent;           /* header block */
/*1f8*/     long  extension;  /* next header extension block */
/*1fc*/     long  secType;    /* -3 */    
};



struct bDirBlock {
/*000*/     long  type;       /* == 2 */
/*004*/     long  headerKey;
/*008*/     long  highSeq;    /* == 0 */
/*00c*/     long  hashTableSize;    /* == 0 */
        long      r1;         /* == 0 */
/*014*/     ULONG checkSum;
/*018*/     long  hashTable[HT_SIZE];           /* hash table */
        long      r2[2];
/*140*/     long  access;
        long      r4;         /* == 0 */
/*148*/     char  commLen;
/*149*/     char  comment[MAXCMMTLEN+1];
        char      r5[91-(MAXCMMTLEN+1)];
/*1a4*/     long  days;       /* last access */
/*1a8*/     long  mins;
/*1ac*/     long  ticks;
/*1b0*/     char  nameLen;
/*1b1*/     char  dirName[MAXNAMELEN+1];
        long      r6;
/*1d4*/     long  real;       /* ==0 */
/*1d8*/     long  nextLink;   /* link list */
        long      r7[5];
/*1f0*/     long  nextSameHash;
/*1f4*/     long  parent;
/*1f8*/     long  extension;        /* FFS : first directory cache */
/*1fc*/     long  secType;    /* == 2 */
};



struct bOFSDataBlock{
/*000*/     long  type;       /* == 8 */
/*004*/     long  headerKey;  /* pointer to file_hdr block */
/*008*/     long  seqNum;     /* file data block number */
/*00c*/     long  dataSize;   /* <= 0x1e8 */
/*010*/     long  nextData;   /* next data block */
/*014*/     ULONG checkSum;
/*018*/     UCHAR data[488];
/*200*/     };


/* --- bitmap --- */

struct bBitmapBlock {
/*000*/     ULONG checkSum;
/*004*/     ULONG map[127];
      };


struct bBitmapExtBlock {
/*000*/     long  bmPages[127];
/*1fc*/     long  nextBlock;
      };


struct bLinkBlock {
/*000*/     long  type;       /* == 2 */
/*004*/     long  headerKey;  /* self pointer */
        long      r1[3];
/*014*/     ULONG checkSum;
/*018*/     char  realName[64];
        long      r2[83];
/*1a4*/     long  days;       /* last access */
/*1a8*/     long  mins;
/*1ac*/     long  ticks;
/*1b0*/     char  nameLen;
/*1b1*/     char  name[MAXNAMELEN+1];
        long      r3;
/*1d4*/     long  realEntry;
/*1d8*/     long  nextLink;
        long      r4[5];
/*1f0*/     long  nextSameHash;
/*1f4*/     long  parent;     
        long      r5;
/*1fc*/     long  secType;    /* == -4, 4, 3 */
      };



/*--- directory cache block structure ---*/

struct bDirCacheBlock {
/*000*/     long  type;       /* == 33 */
/*004*/     long  headerKey;
/*008*/     long  parent;
/*00c*/     long  recordsNb;
/*010*/     long  nextDirC;
/*014*/     ULONG checkSum;
/*018*/     unsigned char records[488];
      };


#endif /* ADF_BLK_H */
/*##########################################################################*/

Generated by  Doxygen 1.6.0   Back to index