home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / disk / mkisofs-1.00.7.lha / mkisofs / mkisofs.h < prev    next >
C/C++ Source or Header  |  1994-11-21  |  8KB  |  251 lines

  1. /*
  2.  * Header file mkisofs.h - assorted structure definitions and typecasts.
  3.  
  4.    Written by Eric Youngdale (1993).
  5.  
  6.    Copyright 1993 Yggdrasil Computing, Incorporated
  7.  
  8.    This program is free software; you can redistribute it and/or modify
  9.    it under the terms of the GNU General Public License as published by
  10.    the Free Software Foundation; either version 2, or (at your option)
  11.    any later version.
  12.  
  13.    This program is distributed in the hope that it will be useful,
  14.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.    GNU General Public License for more details.
  17.  
  18.    You should have received a copy of the GNU General Public License
  19.    along with this program; if not, write to the Free Software
  20.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  21.  
  22. #include <stdio.h>
  23.  
  24. #if defined(AMIGA) && !defined(__GNUC__)
  25. #include "unix/unixlib.h"
  26. #include <string.h>
  27.  
  28. #define malloc xmalloc
  29. #define strdup xstrdup
  30. extern void* xmalloc (size_t);
  31. extern char* xstrdup (char*);
  32.  
  33. #else
  34.  
  35. #include <string.h>
  36. #include <sys/types.h>
  37. #include <sys/stat.h>
  38.  
  39. #ifdef VMS
  40. #include <sys/dir.h>
  41. #define dirent direct
  42. #else
  43. #include <dirent.h>
  44. #endif
  45.  
  46. #ifdef linux
  47. #include <sys/dir.h>
  48. #endif
  49.  
  50. #endif
  51.  
  52. #ifdef __STDC__
  53. #define DECL(NAME,ARGS) NAME ARGS
  54. #define FDECL1(NAME,TYPE0, ARG0) \
  55.     NAME(TYPE0 ARG0)
  56. #define FDECL2(NAME,TYPE0, ARG0,TYPE1, ARG1) \
  57.     NAME(TYPE0 ARG0, TYPE1 ARG1)
  58. #define FDECL3(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2) \
  59.     NAME(TYPE0 ARG0, TYPE1 ARG1, TYPE2 ARG2)
  60. #define FDECL4(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3) \
  61.     NAME(TYPE0 ARG0, TYPE1 ARG1, TYPE2 ARG2, TYPE3 ARG3)
  62. #define FDECL5(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3, TYPE4, ARG4) \
  63.     NAME(TYPE0 ARG0, TYPE1 ARG1, TYPE2 ARG2, TYPE3 ARG3, TYPE4 ARG4)
  64. #define FDECL6(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3, TYPE4, ARG4, TYPE5, ARG5) \
  65.     NAME(TYPE0 ARG0, TYPE1 ARG1, TYPE2 ARG2, TYPE3 ARG3, TYPE4 ARG4, TYPE5 ARG5)
  66. #else
  67. #define DECL(NAME,ARGS) NAME()
  68. #define FDECL1(NAME,TYPE0, ARG0) NAME(ARG0) TYPE0 ARG0;
  69. #define FDECL2(NAME,TYPE0, ARG0,TYPE1, ARG1) NAME(ARG0, ARG1) TYPE0 ARG0; TYPE1 ARG1;
  70. #define FDECL3(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2) \
  71.     NAME(ARG0, ARG1, ARG2) TYPE0 ARG0; TYPE1 ARG1; TYPE2 ARG2;
  72. #define FDECL4(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3) \
  73.     NAME(ARG0, ARG1, ARG2, ARG3, ARG4) TYPE0 ARG0; TYPE1 ARG1; TYPE2 ARG2; TYPE3 ARG3;
  74. #define FDECL5(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3, TYPE4, ARG4) \
  75.     NAME(ARG0, ARG1, ARG2, ARG3, ARG4) TYPE0 ARG0; TYPE1 ARG1; TYPE2 ARG2; TYPE3 ARG3; TYPE4 ARG4;
  76. #define FDECL6(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3, TYPE4, ARG4, TYPE5, ARG5) \
  77.     NAME(ARG0, ARG1, ARG2, ARG3, ARG4, ARG5) TYPE0 ARG0; TYPE1 ARG1; TYPE2 ARG2; TYPE3 ARG3; TYPE4 ARG4; TYPE5 ARG5;
  78. #define const
  79. #endif
  80.  
  81.  
  82. #ifdef __svr4__
  83. #include <stdlib.h>
  84. #else
  85. extern int optind;
  86. extern char *optarg;
  87. /* extern int getopt (int __argc, char **__argv, char *__optstring); */
  88. #endif
  89.  
  90. #include "iso9660.h"
  91.  
  92. struct directory_entry{
  93.   struct directory_entry * next;
  94.   struct iso_directory_record isorec;
  95. #ifndef AMIGA
  96.   unsigned int starting_block;
  97. #endif
  98.   unsigned int size;
  99.   unsigned short priority;
  100.   char * name;
  101.   char * table;
  102.   struct directory * filedir;
  103.   struct directory_entry * parent_rec;
  104. #ifdef AMIGA
  105.   short is_a_table;
  106. #else
  107.   ino_t inode;  /* Used in the hash table */
  108.   dev_t dev;  /* Used in the hash table */
  109. #endif
  110.   char * rr_attributes;
  111.   unsigned short rr_attr_size;
  112. };
  113.  
  114. struct file_hash{
  115.   struct file_hash * next;
  116.   ino_t inode;  /* Used in the hash table */
  117.   dev_t dev;  /* Used in the hash table */
  118.   unsigned int starting_block;
  119.   unsigned int size;
  120. };
  121.   
  122. struct directory{
  123.   struct directory * next;  /* Next directory at same level as this one */
  124.   struct directory * subdir; /* First subdirectory in this directory */
  125.   struct directory * parent;
  126.   struct directory_entry * contents;
  127.   struct directory_entry * self;
  128.   char * whole_name;  /* Entire path */
  129.   char * de_name;  /* Entire path */
  130.   unsigned short depth;
  131.   unsigned int size;
  132.   unsigned int extent;
  133.   unsigned short path_index;
  134. };
  135.  
  136. /*
  137. struct deferred{
  138.   struct deferred * next;
  139.   unsigned int starting_block;
  140.   char * name;
  141.   struct directory * filedir;
  142.   unsigned int flags;
  143. };
  144. */
  145.  
  146. extern void DECL(sort_n_finish,(struct directory *));
  147. extern int goof;
  148. extern struct directory * root;
  149. extern struct directory * reloc_dir;
  150. extern unsigned int next_extent;
  151. extern unsigned int last_extent;
  152. extern unsigned int path_table_size;
  153. extern unsigned int path_table[4];
  154. extern unsigned int path_blocks;
  155. extern char * path_table_l;
  156. extern char * path_table_m;
  157. extern struct iso_directory_record root_record;
  158. extern int use_RockRidge;
  159. extern int follow_links;
  160. extern int verbose;
  161. extern int all_files;
  162. extern int generate_tables;
  163.  
  164. extern int DECL(scan_directory_tree,(char * path, struct directory_entry * self));
  165. extern void DECL(dump_tree,(struct directory * node));
  166. extern void DECL(assign_directory_addresses,(struct directory * root));
  167.  
  168. extern int DECL(iso9660_file_length,(const char* name, 
  169.                    struct directory_entry * sresult, int flag,
  170.                    struct transtbl * tbl));
  171. extern int DECL(iso_write,(FILE * outfile, char * volid));
  172. extern void generate_path_tables(void);
  173. extern void DECL(generate_iso9660_directories,(struct directory *, FILE*));
  174. extern void DECL(generate_one_directory,(struct directory *, FILE*));
  175. extern void generate_root_record(void);
  176. extern int DECL(iso9660_date,(char *, time_t));
  177. extern void DECL(add_hash,(struct directory_entry *));
  178. extern struct file_hash * DECL(find_hash,(dev_t, ino_t));
  179. extern void DECL(add_directory_hash,(dev_t, ino_t));
  180. extern struct file_hash * DECL(find_directory_hash,(dev_t, ino_t));
  181. extern void flush_file_hash(void);
  182. extern int DECL(delete_file_hash,(struct directory_entry *));
  183. extern struct directory_entry * DECL(find_file_hash,(char *));
  184. extern void DECL(add_file_hash,(struct directory_entry *));
  185. extern void finish_cl_pl_entries(void);
  186. extern int DECL(get_733,(char *));
  187.  
  188. extern void DECL(set_723,(char *, unsigned int));
  189. extern void DECL(set_733,(char *, unsigned int));
  190. extern void DECL(sort_directory,(struct directory_entry **));
  191. extern int DECL(generate_rock_ridge_attributes,(char *, char *,
  192.                       struct directory_entry *, 
  193.                       struct stat *, struct stat *,
  194.                       int  deep_flag));
  195. extern char * DECL(generate_rr_extension_record,(char * id,  char  * descriptor,
  196.                     char * source, int  * size));
  197.  
  198. extern char * extension_record;
  199. extern int extension_record_extent;
  200. extern int n_data_extents;
  201.  
  202. /* These are a few goodies that can be specified on the command line, and  are
  203.    filled into the root record */
  204.  
  205. extern char * preparer;
  206. extern char * publisher;
  207. extern char * system_identifier;
  208. extern char * copyright;
  209. extern char * biblio;
  210. extern char * abstract;
  211.  
  212. #define SECTOR_SIZE (2048)
  213. #define ROUND_UP(X)    ((X + (SECTOR_SIZE - 1)) & ~(SECTOR_SIZE - 1))
  214.  
  215. #define NEED_RE 1
  216. #define NEED_PL  2
  217. #define NEED_CL 4
  218. #define NEED_CE 8
  219. #define NEED_SP 16
  220.  
  221. #define TABLE_INODE (sizeof(ino_t) >= 4 ? 0x7ffffffe : 0x7ffe)
  222. #define UNCACHED_INODE (sizeof(ino_t) >= 4 ? 0x7fffffff : 0x7fff)
  223. #define UNCACHED_DEVICE (sizeof(dev_t) >= 4 ? 0x7fffffff : 0x7fff)
  224.  
  225. extern int convert_filenames;
  226. extern int inhibit_relocation;
  227. extern int cdtv_trademark_file;
  228. extern int sort_extents;
  229. extern int progress_indicator;
  230. extern unsigned long pr_dir_count;
  231. extern unsigned long pr_file_count;
  232. extern int short_filenames;
  233. extern int map_filenames;
  234. extern int preallocate;
  235.  
  236. /* size of ISO directory record: */
  237. #define ISO_REC_SIZE 33
  238.  
  239. #ifdef AMIGA
  240. void* malloc_forever (size_t);
  241. char* strdup_forever (char*);
  242. #else
  243. #define malloc_forever malloc
  244. #define strdup_forever strdup
  245. #endif
  246.  
  247. char* convert_filename (const char*);
  248. char* convert_dirname (const char*);
  249.  
  250.  
  251.