This is breakout.h in view mode; [Download] [Up]
#import "stuff/ofile.h" /* * The input files are broken out in to their object files and then placed in * these structures. These structures are then used to edit the object files' * symbol table. And then finally used to reassemble the object file for * output. */ struct arch { char *file_name; /* name of file this arch came from */ enum ofile_type type; /* The type of file for this architecture */ /* can be OFILE_ARCHIVE, OFILE_Mach_O or */ /* OFILE_UNKNOWN. */ struct fat_arch *fat_arch; /* If this came from fat file this is valid */ /* and not NULL (needed for the align value */ /* and to output a fat file if only one arch)*/ char *fat_arch_name; /* If this came from fat file this is valid */ /* and is tthe name of this architecture */ /* (used for error messages). */ /* if this is an archive: the members of this archive */ struct member *members; /* the members of the library for this arch */ unsigned long nmembers; /* the number of the above members */ /* * The output table of contents (toc) for this arch in the library (this * must be recreated, or at least the time of the toc member set, when * the output is modified because modifiy time is shared by all libraries * in the file). */ unsigned long toc_size; /* total size of the toc including ar_hdr */ struct ar_hdr toc_ar_hdr; /* the archive header for this member */ struct ranlib *toc_ranlibs; /* ranlib structs */ unsigned long toc_nranlibs;/* number of ranlib structs */ char *toc_strings; /* strings of symbol names for ranlib structs */ unsigned long toc_strsize; /* number of bytes for the strings above */ unsigned long library_size; /* current working size and final output size */ /* for this arch when it's a library (used */ /* for creating the toc entries). */ /* if this is an object file: the object file */ struct object *object; /* the object file */ /* if this is an unknown file: the addr and size of the file */ char *unknown_addr; unsigned long unknown_size; }; struct member { enum ofile_type type; /* the type of this member can be OFILE_Mach_O*/ /* or OFILE_UNKNOWN */ struct ar_hdr *ar_hdr; /* the archive header for this member */ unsigned long offset; /* current working offset and final offset */ /* use in creating the table of contents */ /* if this member is an object file: the object file */ struct object *object; /* the object file */ /* if this member is an unknown file: the addr and size of the member */ char *unknown_addr; unsigned long unknown_size; /* * If this member was created from a file then input_file_name is set else * it is NULL and input_ar_hdr is set (these are recorded to allow * warn_member() messages to be printed) */ char *input_file_name; struct ar_hdr *input_ar_hdr; }; struct object { char *object_addr; /* the address of the object file */ unsigned long object_size; /* the size of the object file on input */ enum byte_sex object_byte_sex; /* the byte sex of the object file */ struct mach_header *mh; /* the mach_header of the object file */ struct load_command /* the start of the load commands */ *load_commands; struct symtab_command *st; /* the symbol table command */ struct segment_command *seg_linkedit; /* the link edit segment command */ unsigned long input_sym_info_size; unsigned long output_sym_info_size; struct nlist *output_symbols; unsigned long output_nsymbols; char *output_strings; unsigned long output_strings_size; }; extern void breakout( char *filename, struct arch **archs, unsigned long *narchs); extern void free_archs( struct arch *archs, unsigned long narchs); extern void writeout( struct arch *archs, unsigned long narchs, char *output, unsigned short mode, enum bool sort_toc, enum bool commons_in_toc, enum bool library_warnings); void checkout( struct arch *archs, unsigned long narchs); void warning_arch( struct arch *arch, struct member *member, char *format, ...) __attribute__ ((format (printf, 3, 4))); void error_arch( struct arch *arch, struct member *member, char *format, ...) __attribute__ ((format (printf, 3, 4))); void fatal_arch( struct arch *arch, struct member *member, char *format, ...) __attribute__ ((format (printf, 3, 4)));
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.