home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / sysutils / nead / nead.h < prev    next >
Text File  |  1989-11-20  |  8KB  |  223 lines

  1. /* This header file does all the necessary includes and defines all the
  2.    structures and constants needed for the nead program                 */
  3.  
  4. #define INCL_WIN
  5. #define INCL_WINHEAP
  6. #define INCL_WINDIALOGS
  7. #define INCL_GPIPRIMITIVES
  8.  
  9. #include <os2.h>
  10. #include <dos.h>
  11. #include <malloc.h>
  12. #include <stdio.h>
  13. #include <string.h>
  14.  
  15. /* The HoldFEA is used to hold individual EAs.  The member names correspond
  16.    directly to those of the FEA structure.  Note however, that both szName
  17.    and aValue are pointers to the values.  An additional field, next, is
  18.    used to link the HoldFEA's together to form a linked list. */
  19.  
  20. struct _HoldFEA
  21. {
  22.    BYTE       fEA;       /* Flag byte */
  23.    BYTE       cbName;
  24.    USHORT     cbValue;
  25.    CHAR      *szName;
  26.    CHAR      *aValue;
  27.    struct _HoldFEA *next;
  28. };
  29. typedef struct _HoldFEA HOLDFEA;
  30.  
  31. /* The DeleteList is used to hold the names of EAs that need to be explicitly
  32.    deleted before the current EAs are written.  This is necessary because
  33.    there does not exist a way to automatically delete all existing EAs
  34.    associated with a file.  The next field allows the structures to be
  35.    linked. */
  36.  
  37. struct _DeleteList
  38. {
  39.    CHAR *EAName;
  40.    struct _DeleteList *next;
  41. };
  42. typedef struct _DeleteList DELETELIST;
  43.  
  44. /* The PassData struct is used to pass data, especially as the user data
  45.    parameter for dialog box calls.  The Point field points to several types
  46.    of data throughout the program.  Usually it points to either an asciiz
  47.    name or a HoldData structure.  The rest of the fields are used for m-m
  48.    recursive calls.  cbMulti is the length of the m-m field currently being
  49.    considered.  usMultiOffset is the offset from the beginning of the
  50.    EA (->aValue) to the start of the current m-m field.  usIndex is a count
  51.    of the number of sub-fields in the current m-m.   */
  52.  
  53. struct _PassData
  54. {
  55.    CHAR   *Point;
  56.    USHORT cbMulti;
  57.    USHORT usMultiOffset;
  58.    USHORT usIndex;
  59.    BYTE   fFlag;
  60. };
  61. typedef struct _PassData PASSDATA;
  62.  
  63. /* The ReEnter structure is used to keep track of the static data for
  64.    MultiTypeProc.  This structure is necessary since the proc is recursive
  65.    and the static data is only available during the initialize message.
  66.    The structure holds the two static variables and has a next field to
  67.    allow the list to be linked. */
  68.  
  69. struct _ReEnter
  70. {
  71.    HOLDFEA *pFEA;
  72.    PASSDATA FAR *pPDat;
  73.    struct _ReEnter *next;
  74. };
  75. typedef struct _ReEnter REENTER;
  76.  
  77. /* This struct holds the static data that allows translation between the
  78.    EA type and descriptor string, etc.  Data is global. */
  79.  
  80. struct _EADATA
  81. {
  82.    USHORT usPrefix;
  83.    CHAR   szFormat[36];
  84.    USHORT usFldType;
  85. };
  86. typedef struct _EADATA EADATA;
  87.  
  88. BOOL OpenFile(HWND,USHORT);
  89. BOOL AddEA(HWND);
  90. BOOL QueryEAs(HWND,CHAR *);
  91. BOOL EditEAValue(HWND, PASSDATA *);
  92. BOOL EAExists(CHAR *);
  93. BOOL EditEA(HWND);
  94. BOOL CheckEAIntegrity(CHAR *,USHORT);
  95. MRESULT EXPENTRY OpenFileProc  (HWND, USHORT, MPARAM, MPARAM);
  96. MRESULT EXPENTRY MainDlgProc   (HWND, USHORT, MPARAM, MPARAM);
  97. MRESULT EXPENTRY AddEAProc     (HWND, USHORT, MPARAM, MPARAM);
  98. MRESULT EXPENTRY AsciiEditProc (HWND, USHORT, MPARAM, MPARAM);
  99. MRESULT EXPENTRY IconDlgProc   (HWND, USHORT, MPARAM, MPARAM);
  100. MRESULT EXPENTRY MultiTypeProc (HWND, USHORT, MPARAM, MPARAM);
  101. VOID  FillDirListBox  (HWND,CHAR *);
  102. VOID  FillFileListBox (HWND);
  103. VOID  Free_FEAList(HOLDFEA *,DELETELIST *);
  104. VOID  ShowEAType(HWND);
  105. VOID  DeleteCurEA(HWND);
  106. VOID  WriteEAs(HWND);
  107. VOID  ChangeName(HWND,HOLDFEA *,CHAR *);
  108. VOID  MultiAdd(HWND, HOLDFEA *, PASSDATA FAR *);
  109. SHORT ParseFileName (CHAR *, CHAR *);
  110. USHORT LookupEAType(USHORT);
  111. USHORT CurEAType(HOLDFEA *);
  112. USHORT GetUSHORT(HOLDFEA *,USHORT);
  113. HOLDFEA *GetCurFEA(HWND, HOLDFEA *);
  114. CHAR *MultiTypeIndex(CHAR *, USHORT);
  115. CHAR *EAValueString(HWND, CHAR *);
  116.  
  117. #define ARGFILE             1
  118. #define MAX_GEA             500L /* Max size for a GEA List              */
  119. #define Ref_ASCIIZ          1    /* Reference type for DosEnumAttribute  */
  120. #define MAXEANAME           255  /* Maximum length an EA Name can be     */
  121. #define MAXEAVALUE         2048  /* Arbitrary max edit fld len of EA Val */
  122. #define EATABLESIZE          12  /* Number of entries in ConvTable       */
  123. #define GROWSIZE            512  /* Minimum size to increase the heap by */
  124. #define FILE_ALL         0x0007  /* Read-only, sys, hidden, & normal     */
  125. #define MAXSHOWSIZE          34  /* Number of chars to place in desc lbox*/
  126. #define LENUSHORTBUF          6  /* Buf size needed to for ascii USHORT  */
  127.  
  128. /* Return values from ParseFileName */
  129. #define FILE_INVALID          0  /* The filename was invalid */
  130. #define FILE_PATH             1  /* The filename was a path  */
  131. #define FILE_VALID            2  /* The filename was valid   */
  132.  
  133. /* definition of level specifiers. required for File Info */
  134.  
  135. #define GetInfoLevel1   1                   /* Get info from SFT */
  136. #define GetInfoLevel2   2                   /* Get size of FEAlist */
  137. #define GetInfoLevel3   3                   /* Get FEAlist given the GEAlist */
  138. #define GetInfoLevel4   4                   /* Get whole FEAlist */
  139. #define GetInfoLevel5   5                   /* Get FSDname */
  140.  
  141. #define SetInfoLevel1   1                   /* Set info in SFT */
  142. #define SetInfoLevel2   2                   /* Set FEAlist */
  143.  
  144. #define     OPENMODE    OM_DENY_NONE+OM_READ_WRITE
  145. #define     OPENFLAG    OF_OPEN_FILE
  146. #define     CREATFLAG   OF_CREATE_FILE+OF_FAIL
  147. #define     REPLFLG     OF_REPLACE_FILE
  148.  
  149. #define EA_LPBINARY     0xfffe /* Length preceeded binary            */
  150. #define EA_LPASCII      0xfffd /* Length preceeded ascii             */
  151. #define EA_ASCIIZ       0xfffc /* Asciiz                             */
  152. #define EA_LPBITMAP     0xfffb /* Length preceeded bitmap            */
  153. #define EA_LPMETAFILE   0xfffa /* metafile                           */
  154. #define EA_LPICON       0xfff9 /* Length preceeded icon              */
  155. #define EA_ASCIIZFN     0xffef /* Asciiz file name of associated dat */
  156. #define EA_ASCIIZEA     0xffee /* Asciiz EA of associated data       */
  157. #define EA_MVMT         0xffdf /* Multi-value multi-typed field      */
  158. #define EA_MVST         0xffde /* Multy value single type field      */
  159. #define EA_ASN1         0xffdd /* ASN.1 field                        */
  160.  
  161. #define  HM_VALIDFLAGS  0x0003
  162.  
  163. /****** Resource IDs *****/
  164.  
  165. #define IDR_EAD             1
  166. #define IDD_MULTILIST       2
  167. #define IDD_BITMAP          3
  168. #define IDD_ASCIIZ          4
  169. #define ID_MENU_MAIN        5
  170. #define IDD_OPENBOX         6
  171. #define IDD_PATH            7
  172. #define IDD_FILEEDIT        8
  173. #define IDD_DIRLIST         9
  174. #define IDD_FILELIST       10
  175. #define IDD_MAIN           11
  176. #define IDD_FNAME          12
  177. #define IDD_LBOX           13
  178. #define IDD_EATYPE         14
  179. #define IDD_ADD            15
  180. #define IDD_DELETE         16
  181. #define IDD_COPY           17
  182. #define IDD_EDIT           18
  183. #define IDD_PASTE          19
  184. #define IDD_NEWFILE        20
  185. #define IDD_WRITE          21
  186. #define IDD_QUIT           22
  187. #define IDD_ADDEA          23
  188. #define IDD_EANAME         24
  189. #define IDD_NEW            25
  190. #define IDD_EXISTING       26
  191. #define IDD_ASCIIEDIT      27
  192. #define IDD_EAVALUE        28
  193. #define IDD_ICONWIN        29
  194. #define BMP_EMPTY          30
  195. #define IDD_ICON           31
  196. #define IDD_MULTIBOX       32
  197. #define DID_DONE           33
  198. #define IDD_TITLE          34
  199. #define IDD_LPDATA         35
  200. #define IDD_NEEDBIT        36
  201. #define IDD_CODEPAGE       37
  202.  
  203.  
  204. /* Macros for allocating and deallocating memory from the heap.  They
  205.    include a crude memory check and assume that the variable hwnd is
  206.    defined in the environment the macro is executed in.               */
  207.  
  208. #define GetMem(x,y) x=(VOID *) WinAllocMem(hhp,y);       \
  209.                     if(!x)                               \
  210.                        WinMessageBox(HWND_DESKTOP, hwnd, \
  211.                        "Sorry, Not enough memory",       \
  212.                        NULL, 0, MB_OK);
  213.  
  214. #define ResizeMem(x,y,z) x=(VOID *) WinReallocMem(hhp,x,y,z); \
  215.                          if(!x)                               \
  216.                             WinMessageBox(HWND_DESKTOP, hwnd, \
  217.                             "Sorry, Not enough memory",       \
  218.                             NULL, 0, MB_OK);
  219.  
  220.  
  221. #define FreeMem(x,y) WinFreeMem(hhp,(NPBYTE) x,(USHORT) y);
  222.  
  223.