Adding the BeOS port. More checkins to follow.
diff --git a/BeOS/ar-1.1/mwlib.h b/BeOS/ar-1.1/mwlib.h
new file mode 100644
index 0000000..67af325
--- /dev/null
+++ b/BeOS/ar-1.1/mwlib.h
@@ -0,0 +1,118 @@
+/*
+** mwlib.h - POSIX 1003.2 "ar" command
+**
+** $Id$
+**
+** This isn't a pure POSIX 1003.2 ar; it only manipulates Metrowerks
+** Library files, not general-purpose POSIX 1003.2 format archives.
+**
+** Dec. 14, 1997 Chris Herborth (chrish@qnx.com)
+**
+** This code is donated to the PUBLIC DOMAIN. You can use, abuse, modify,
+** redistribute, steal, or otherwise manipulate this code. No restrictions
+** at all. If you laugh at this code, you can't use it.
+**
+** This "ar" was implemented using IEEE Std 1003.2-1992 as the basis for
+** the interface, and Metrowerk's published docs detailing their library
+** format. Look inside for clues about how reality differs from MW's
+** documentation on BeOS...
+*/
+
+#include <support/SupportDefs.h>
+#include <time.h>
+
+/* ----------------------------------------------------------------------
+** Constants
+**
+*/
+#define MWLIB_MAGIC_WORD 'MWOB'
+#define MWLIB_MAGIC_PROC 'PPC '
+
+/* ----------------------------------------------------------------------
+** Structures
+**
+** This is based on the "Metrowerks CodeWarrior Library Reference
+** Specification", which isn't 100% accurate for BeOS.
+*/
+
+typedef struct MWLibHeader {
+ uint32 magicword;
+ uint32 magicproc;
+ uint32 magicflags;
+ uint32 version;
+
+ uint32 code_size;
+ uint32 data_size;
+
+ uint32 num_objects;
+} MWLibHeader;
+
+typedef struct MWLibFile {
+ time_t m_time;
+
+ uint32 off_filename;
+ uint32 off_fullpath;
+ uint32 off_object;
+ uint32 object_size;
+} MWLibFile;
+
+typedef struct MWLib {
+ MWLibHeader header;
+
+ MWLibFile *files;
+
+ char **names;
+
+ char **data;
+} MWLib;
+
+/* This bears no resemblance to what's in the Metrowerks docs.
+**
+** Note that this is incomplete; this is all the info I needed for
+** ar though.
+*/
+typedef struct MWObject {
+ uint32 magic_word; /* 'MWOB' */
+ uint32 arch; /* 'PPC '; this isn't in the docs */
+ uint32 version;
+ uint32 flags;
+
+ uint32 code_size;
+ uint32 data_size;
+} MWObject;
+
+/* ----------------------------------------------------------------------
+** Function prototypes
+**
+** load_MW_lib() - load a Metrowerks library
+**
+** Returns:
+** B_OK - all is well
+** B_FILE_NOT_FOUND - can't open the given file
+** B_IO_ERROR - can't read from the given file
+** B_BAD_VALUE - invalid magic word in the file
+** B_MISMATCHED_VALUES - invalid processor value (ie, not a PowerPC lib),
+** or the magicflags member is not 0, or the file
+** version number isn't 1.
+** B_NO_MEMORY - unable to allocate memory while loading the lib
+**
+** write_MW_lib() - write a Metrowerks library
+**
+** Returns:
+** B_OK - all is well
+**
+** write_MW_lib() - write a Metrowerks library file
+**
+** Returns:
+** B_OK - all is well; doesn't necessarily mean the file was written
+** properly, just that you didn't lose any data
+** B_NO_MEMORY - unable to allocate offset buffers
+** B_ERROR - problem with backup file (can't rename existing file)
+**
+** Note:
+** If you use this in a long-lived program, it leaks memory; the MWLib
+** contents are never free()'d.
+*/
+status_t load_MW_lib( MWLib *lib, const char *filename );
+status_t write_MW_lib( MWLib *lib, const char *filename );
+void setfiletype( const char *filename, const char *type );