--- /dev/null
+/*---------------------------------------------------------------------------
+
+ os2data.h
+
+ OS/2-specific structures and data to be included in the global data struc-
+ ture.
+
+ ---------------------------------------------------------------------------*/
+
+
+#define MAXNAMLEN 256
+#define MAXPATHLEN 256
+#define MAXLEN 256 /* temporary buffer length */
+#define IBUF_LEN 4096 /* input buffer length */
+
+#define INCL_NOPM
+#define INCL_DOSNLS
+#define INCL_DOSPROCESS
+#define INCL_DOSDEVICES
+#define INCL_DOSDEVIOCTL
+#define INCL_DOSERRORS
+#define INCL_DOSMISC
+
+#if (defined(OS2DLL) && !defined(DLL))
+# undef OS2DLL
+#endif
+
+#ifdef OS2DLL
+# define INCL_REXXSAA
+# include <rexxsaa.h>
+#endif
+
+#include <os2.h>
+
+
+struct direct
+{
+ ino_t d_ino; /* a bit of a farce */
+ int d_reclen; /* more farce */
+ int d_namlen; /* length of d_name */
+ char d_name[MAXNAMLEN + 1]; /* null terminated */
+ /* nonstandard fields */
+ long d_size; /* size in bytes */
+ unsigned d_mode; /* MS-DOS or OS/2 file attributes */
+ unsigned d_time;
+ unsigned d_date;
+};
+
+/* The fields d_size and d_mode are extensions by me (Kai Uwe Rommel). The
+ * find_first and find_next calls deliver these data without any extra cost.
+ * If these data are needed, the fields save a lot of extra calls to stat()
+ * (each stat() again performs a find_first call !).
+ */
+
+struct _dircontents
+{
+ char *_d_entry;
+ long _d_size;
+ unsigned _d_mode, _d_time, _d_date;
+ struct _dircontents *_d_next;
+};
+
+typedef struct _dirdesc
+{
+ int dd_id; /* uniquely identify each open directory */
+ long dd_loc; /* where we are in directory entry is this */
+ struct _dircontents *dd_contents; /* pointer to contents of dir */
+ struct _dircontents *dd_cp; /* pointer to current position */
+}
+DIR;
+
+
+struct os2Global {
+
+#ifndef SFX
+ HDIR hdir;
+#ifdef __32BIT__
+ ULONG count;
+ FILEFINDBUF3 find;
+#else
+ USHORT count;
+ FILEFINDBUF find;
+#endif
+#endif /* !SFX */
+
+ int created_dir; /* used by mapname(), checkdir() */
+ int renamed_fullpath; /* ditto */
+ int fnlen; /* ditto */
+#ifdef __32BIT__
+ ULONG nLabelDrive; /* ditto */
+#else
+ USHORT nLabelDrive;
+#endif
+ int longnameEA; /* checkdir(), close_outfile() */
+ char *lastpathcomp; /* ditto */
+
+ struct direct dp;
+ int lower;
+ USHORT nLastDrive, nResult;
+
+ DIR *dir;
+ char *dirname, *wildname, matchname[FILNAMSIZ];
+ int firstcall, have_dirname, dirnamelen;
+
+ int rootlen; /* length of rootpath */
+ char *rootpath; /* user's "extract-to" directory */
+ char *buildpathHPFS; /* full path (so far) to extracted file, */
+ char *buildpathFAT; /* both HPFS/EA (main) and FAT versions */
+ char *endHPFS; /* corresponding pointers to end of */
+ char *endFAT; /* buildpath ('\0') */
+
+#ifdef OS2DLL
+ char buffer[IBUF_LEN];
+ char output_var[MAXLEN];
+ char getvar_buf[MAXLEN];
+ int getvar_len;
+
+ int output_idx;
+ int stem_len;
+ int putchar_idx;
+ int rexx_error;
+ char *rexx_mes;
+
+ SHVBLOCK request;
+#endif
+};
+
+
+#define SYSTEM_SPECIFIC_GLOBALS struct os2Global os2;
+#define SYSTEM_SPECIFIC_CTOR os2GlobalsCtor
+
+#ifdef OS2DLL
+# ifdef API_DOC
+# define SYSTEM_API_BRIEF REXXBrief
+# define SYSTEM_API_DETAILS REXXDetails
+ extern char *REXXBrief;
+ extern APIDocStruct REXXDetails[];
+# endif
+#endif