home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
tolkit45.zip
/
os2tk45
/
samples
/
os2
/
eaedit
/
eas.h
< prev
next >
Wrap
C/C++ Source or Header
|
1999-05-11
|
19KB
|
410 lines
/*static char *SCCSID = "@(#)eas.h 6.12 92/02/18";*/
/*==============================================================*\
* *
* EAS.H - Sample PM application eas header file *
* (C) Copyright IBM Corporation 1992. *
* *
*--------------------------------------------------------------*
* *
* This header file contains the application wide constants *
* and structure definitions. *
* *
\*==============================================================*/
#define INCL_WIN
#define INCL_HELP
#define INCL_WINHEAP
#define INCL_WINMENU /* For menu control function */
#define INCL_WINDIALOGS
#define INCL_WINMESSAGEMGR
#define INCL_DOSPROCESS /* For init function */
#define INCL_GPIPRIMITIVES
#define INCL_GPIBITMAPS
#include <os2.h>
#include <malloc.h>
#include <stdio.h>
#include <string.h>
/*--------------------------------------------------------------*\
* Resource IDs *
\*--------------------------------------------------------------*/
#define ID_RESOURCE 1
#define IDR_BITMAP 2
#define ID_BMP 3
#define ID_LOGOTEXT 4
#define IDC_BITMAP 5
/*--------------------------------------------------------------*\
* Menu item ids *
\*--------------------------------------------------------------*/
#define IDM_HELPINDEX 1010
#define IDM_GENERALHELP 1011
#define IDM_TUTORIAL 1012
#define IDM_USINGHELP 1013
#define IDM_HELPPRODUCTINFO 1014
#define IDM_MSGBOX 1015
#define IDM_OPEN 1016
#define IDM_SAVE 1017
#define IDM_EDIT 1018
#define IDM_ADD 1019
#define IDM_DELETE 1020
/*--------------------------------------------------------------*\
* Message item ids *
\*--------------------------------------------------------------*/
#define IDD_ABOUTBOX 151
#define IDD_MULTILIST 152
#define IDD_ASCIIZ 153
#define IDD_MENU_MAIN 154
#define IDD_OPENBOX 155
#define IDD_PATH 156
#define IDD_FILEEDIT 157
#define IDD_DIRLIST 158
#define IDD_FILELIST 159
#define IDD_WINLBOX 160
#define IDD_LBOX 161
#define IDD_ADD 162
#define IDD_DELETE 163
#define IDD_EDIT 164
#define IDD_EATYPE 165
#define IDD_ADDEA 166
#define IDD_EANAME 167
#define IDD_NEW 168
#define IDD_EXISTING 169
#define IDD_ASCIIEDIT 170
#define IDD_EAVALUE 171
#define IDD_LOGO 172
#define IDD_ICON 173
#define IDD_MULTIBOX 174
#define DID_DONE 175
#define IDD_TITLE 176
#define IDD_LPDATA 177
#define IDD_NEEDBIT 178
#define IDD_CODEPAGE 179
#define IDD_PRODUCTINFO 180
/*--------------------------------------------------------------*\
* Help table and subtables *
\*--------------------------------------------------------------*/
#define EAS_HELP_TABLE 4000
/*--------------------------------------------------------------*\
* Main window help panels *
\*--------------------------------------------------------------*/
#define SUBTABLE_MAIN 4100
#define PANEL_MAIN 4110
#define PANEL_HELP 4120
#define PANEL_GENERALHELP 4130
#define PANEL_USINGHELP 4140
#define PANEL_TUTORIAL 4150
#define PANEL_HELPINDEX 4160
#define PANEL_HELPPRODUCTINFO 4170
#define PANEL_KEYSHELP 4180
#define PANEL_OPENHELP 4190
#define PANEL_SAVEHELP 4191
#define PANEL_ADDHELP 4193
#define PANEL_DELETEHELP 4194
#define PANEL_EDITHELP 4195
/*--------------------------------------------------------------*\
* Enter text dialog help subtable *
\*--------------------------------------------------------------*/
#define SUBTABLE_ABOUTBOXDLG 4200
#define PANEL_ABOUTBOXDLG 4210
#define PANEL_ABOUTBOX_OK 4220
#define SUBTABLE_OPENBOXDLG 4225
#define PANEL_OPENBOXDLG 4226
#define PANEL_OPENBOX_OK 4227
#define SUBTABLE_ADDBOXDLG 4230
#define PANEL_ADDBOXDLG 4231
#define PANEL_ADDBOX_OK 4232
#define SUBTABLE_MULTIBOXDLG 4235
#define PANEL_MULTIBOXDLG 4236
#define PANEL_MULTIBOX_OK 4237
#define SUBTABLE_PRODUCTINFODLG 4240
#define PANEL_PRODUCTINFODLG 4241
#define PANEL_PRODUCTINFO_OK 4242
/*--------------------------------------------------------------*\
* Stringtable ids *
\*--------------------------------------------------------------*/
#define IDS_APPNAME 101
#define IDS_HELPLIBRARYNAME 102
#define IDS_HELPWINDOWTITLE 103
#define IDS_TITLE 104
#define IDS_UNTITLED 105
/*--------------------------------------------------------------*\
* Messagetable ids *
\*--------------------------------------------------------------*/
#define IDMSG_FILECHANGED 301
#define IDMSG_ERROREANAME 302
#define IDMSG_DUPLICATENAME 303
#define IDMSG_ERRORVALUE 304
#define IDMSG_MEMORYFULL 305
#define IDMSG_ERRORSELECT 306
#define IDMSG_NOFILEOPEN 307
#define IDMSG_ERROREATYPE 308
#define IDMSG_WRITEERROR 309
#define IDMSG_WRITEOK 310
#define IDMSG_ERRORMULTIVALUE 311
#define IDMSG_INITFAILED 312
#define IDMSG_MAINWINCREATEFAILED 313
#define IDMSG_CANNOTGETHPS 314
#define IDMSG_CANNOTLOADSTRING 315
#define IDMSG_CANNOTLOADEXITLIST 316
#define IDMSG_HELPLOADERROR 317
#define IDMSG_HELPDISPLAYERROR 318
#define IDMSG_ERRORMULTITYPE 319
#define IDMSG_ERRORFILEOPEN 320
/*--------------------------------------------------------------*\
* Macro constants *
\*--------------------------------------------------------------*/
/* The HoldFEA is used to hold individual EAs. The member names correspond
directly to those of the FEA structure. Note however, that both szName
and aValue are pointers to the values. An additional field, next, is
used to link the HoldFEA's together to form a linked list. */
struct _HoldFEA
{
ULONG oNextEntryOffset; /* new field */
BYTE fEA; /* Flag byte */
BYTE cbName;
USHORT cbValue;
CHAR *szName;
CHAR *aValue;
struct _HoldFEA *next;
};
typedef struct _HoldFEA HOLDFEA;
/* The DeleteList is used to hold the names of EAs that need to be explicitly
deleted before the current EAs are written. This is necessary because
there does not exist a way to automatically delete all existing EAs
associated with a file. The next field allows the structures to be
linked. */
struct _DeleteList
{
CHAR *EAName;
struct _DeleteList *next;
};
typedef struct _DeleteList DELETELIST;
/* The PassData struct is used to pass data, especially as the user data
parameter for dialog box calls. The Point field points to several types
of data throughout the program. Usually it points to either an asciiz
name or a HoldData structure. The rest of the fields are used for m-m
recursive calls. cbMulti is the length of the m-m field currently being
considered. usMultiOffset is the offset from the beginning of the
EA (->aValue) to the start of the current m-m field. usIndex is a count
of the number of sub-fields in the current m-m. */
struct _PassData
{
CHAR *Point;
USHORT cbMulti;
USHORT usMultiOffset;
USHORT usIndex;
BYTE fFlag;
};
typedef struct _PassData PASSDATA;
typedef PASSDATA FAR *PPASSDATA;
struct _MVSTdata
{
CHAR *szName;
USHORT usType;
};
typedef struct _MVSTdata MVSTDATA;
/* The ReEnter structure is used to keep track of the static data for
MultiTypeProc. This structure is necessary since the proc is recursive
and the static data is only available during the initialize message.
The structure holds the two static variables and has a next field to
allow the list to be linked. */
struct _ReEnter
{
HOLDFEA *pFEA;
PASSDATA FAR *pPDat;
struct _ReEnter *next;
};
typedef struct _ReEnter REENTER;
/* This struct holds the static data that allows translation between the
EA type and descriptor string, etc. Data is global. */
struct _EADATA
{
USHORT usPrefix;
CHAR szFormat[36];
USHORT usFldType;
};
typedef struct _EADATA EADATA;
#define FreeMem(p) DosFreeMem(p)
/*--------------------------------------------------------------*\
* Entry point declarations *
\*--------------------------------------------------------------*/
/* from easinit.c */
BOOL Init(VOID);
VOID APIENTRY ExitProc(ULONG);
/* from eashelp.c */
VOID InitHelp(VOID);
VOID HelpHelpForHelp(MPARAM);
VOID HelpExtended(MPARAM);
VOID HelpKeys(MPARAM);
VOID HelpIndex(MPARAM);
VOID HelpAbout(MPARAM);
VOID DisplayHelpPanel(LONG);
VOID DestroyHelpInstance(VOID);
VOID FixSysMenu(HWND);
MRESULT EXPENTRY AboutDlgProc(HWND, ULONG, MPARAM, MPARAM);
/* from eas.c */
INT main(int argc, char *argv[]);
MRESULT EXPENTRY MainWndProc(HWND, ULONG, MPARAM, MPARAM);
VOID MainCommand(HWND, MPARAM, MPARAM);
VOID MainPaint(HWND);
VOID MainControl(HWND, MPARAM, MPARAM);
VOID UserCommand(HWND, MPARAM, MPARAM);
VOID ProcExit(HWND, MPARAM);
LONG MessageBox(HWND, LONG, PSZ, LONG, BOOL);
BOOL OpenFile(HWND,ULONG);
BOOL AddEA(HWND);
BOOL QueryEAs(CHAR *);
BOOL EditEAValue(HWND, PPASSDATA);
BOOL EAExists(CHAR *);
BOOL EditEA(HWND);
BOOL CheckEAIntegrity(CHAR *, ULONG);
MRESULT EXPENTRY OpenFileProc (HWND, ULONG, MPARAM, MPARAM);
MRESULT EXPENTRY MainDlgProc (HWND, ULONG, MPARAM, MPARAM);
MRESULT EXPENTRY AddEAProc (HWND, ULONG, MPARAM, MPARAM);
MRESULT EXPENTRY AsciiEditProc (HWND, ULONG, MPARAM, MPARAM);
MRESULT EXPENTRY IconDlgProc (HWND, ULONG, MPARAM, MPARAM);
MRESULT EXPENTRY MultiTypeProc (HWND, ULONG, MPARAM, MPARAM);
MRESULT EXPENTRY MultiValueProc(HWND, ULONG, MPARAM, MPARAM);
VOID FillDirListBox (HWND,CHAR *);
VOID FillFileListBox (HWND);
VOID Free_FEAList(HOLDFEA *,DELETELIST *);
VOID ShowEAType(HWND);
VOID DeleteCurEA(HWND);
VOID WriteEAs(VOID);
VOID ChangeName(HOLDFEA *,CHAR *);
VOID MultiAdd(HWND, HOLDFEA *, PPASSDATA);
LONG ParseFileName (CHAR *, CHAR *);
ULONG LookupEAType(ULONG);
ULONG CurEAType(HOLDFEA *);
USHORT GetUSHORT(HOLDFEA *,ULONG);
HOLDFEA *GetCurFEA(HWND, HOLDFEA *);
CHAR *MultiTypeIndex(CHAR *, ULONG);
CHAR *EAValueString(CHAR *);
VOID GetMem(PVOID *pvMessage, ULONG ulSize);
VOID ResizeMem(PVOID *, ULONG, ULONG);
/*--------------------------------------------------------------*\
* Other constants *
\*--------------------------------------------------------------*/
#define RETURN_SUCCESS 0 /* successful return in DosExit */
#define RETURN_ERROR 1 /* error return in DosExit */
#define BEEP_WARN_FREQ 60 /* frequency of warning beep */
#define BEEP_WARN_DUR 100 /* duration of warning beep */
#define MAXAPPNAMELEN 15
#define HELPLIBRARYNAMELEN 20 /* The length of library name */
#define MAX_EDIT_BUFF 21 /* length of string to query size */
#define BUFF_SIZE 200
#define MAXTEXTLEN 40 /* maximum text length for window */
#define MESSAGELEN 80 /* maximum length for messages */
#define HORZ_INDENT 10
#define VERT_TEXT_POS 15 /* from top to display text info */
#define ARGFILE 1
#define MAX_GEA 500L /* Max size for a GEA List */
#define Ref_ASCIIZ 1 /* Reference type for DosEnumAttribute */
#define MAXEANAME 255 /* Maximum length an EA Name can be */
#define MAXEAVALUE 2048 /* Arbitrary max edit fld len of EA Val */
#define EATABLESIZE 12 /* Number of entries in ConvTable */
#define GROWSIZE 512 /* Minimum size to increase the heap by */
#define FILE_ALL 0x0007 /* Read-only, sys, hidden, & normal */
#define MAXSHOWSIZE 34 /* Number of chars to place in desc lbox */
#define LENUSHORTBUF 6 /* Buf size needed to for ascii USHORT */
#define MESSAGELEN 80 /* Maximum length for messages */
#define MSNUM 5 /* Number of MVST data list */
/* Return values from ParseFileName */
#define FILE_INVALID 0 /* The filename was invalid */
#define FILE_PATH 1 /* The filename was a path */
#define FILE_VALID 2 /* The filename was valid */
/* definition of level specifiers. required for File Info */
#define GetInfoLevel1 1 /* Get info from SFT */
#define GetInfoLevel2 2 /* Get size of FEAlist */
#define GetInfoLevel3 3 /* Get FEAlist given the GEAlist */
#define GetInfoLevel4 4 /* Get whole FEAlist */
#define GetInfoLevel5 5 /* Get FSDname */
#define SetInfoLevel1 1 /* Set info in SFT */
#define SetInfoLevel2 2 /* Set FEAlist */
#define OPENMODE OM_DENY_NONE+OM_READ_WRITE
#define OPENFLAG OF_OPEN_FILE
#define CREATFLAG OF_CREATE_FILE+OF_FAIL
#define REPLFLG OF_REPLACE_FILE
#define EA_LPBINARY 0xfffe /* Length preceeded binary */
#define EA_LPASCII 0xfffd /* Length preceeded ascii */
#define EA_ASCIIZ 0xfffc /* Asciiz */
#define EA_LPBITMAP 0xfffb /* Length preceeded bitmap */
#define EA_LPMETAFILE 0xfffa /* metafile */
#define EA_LPICON 0xfff9 /* Length preceeded icon */
#define EA_ASCIIZFN 0xffef /* Asciiz file name of associated dat */
#define EA_ASCIIZEA 0xffee /* Asciiz EA of associated data */
#define EA_MVMT 0xffdf /* Multi-value multi-typed field */
#define EA_MVST 0xffde /* Multy value single type field */
#define EA_ASN1 0xffdd /* ASN.1 field */
#define HM_VALIDFLAGS 0x0003
/*--------------------------------------------------------------*\
* Global variables *
\*--------------------------------------------------------------*/
CHAR szWindowText[MAXTEXTLEN]; /* text drawn in window */
HWND hwndMainFrame; /* handle to the main frame window */
HWND hwndMain; /* handle to the main client window */
HWND hwndChild1; /* handle to child window */
HAB hab; /* anchor block for the process */
HMQ hmq; /* handle to the process' message queue */
CHAR szAppName[MAXAPPNAMELEN]; /* buffer for application name string */
CHAR szUntitled[MESSAGELEN]; /* buffer for "Untitled" string */
/* for help menu module */
BOOL fHelpEnabled; /* flag to determine if help is enabled */
static CHAR szLibName[HELPLIBRARYNAMELEN];
static CHAR szWindowTitle[HELPLIBRARYNAMELEN];
static HWND hwndHelpInstance;
CHAR szFileName[CCHMAXPATH]; /* Holds current EA file */
CHAR szEAName[MAXEANAME+1]; /* Used to return the EA name +1 for NULL */
CHAR szEAType[36]; /* Store current EA type */
USHORT usRetEAType; /* Used to return selected EA Type */
BOOL FILE_ISOPEN; /* File Open flag */
BOOL FILE_CHANGED; /* File Changed flag */
BOOL COMMAND_LINE_FILE; /* Flag to determine if a file was on the CL */
PVOID szAscii,szScratch; /* 2 Pointer used to return misc. strings */
CHAR *pAlloc,*szEditBuf;
HOLDFEA *pHoldFEA; /* Global EA linked-list pointer */
DELETELIST *pDelList; /* Global ptr to l-l of deleted EAs */
HAB hab; /* Anchor block for the process */
HMQ hmq;
MVSTDATA MSdata[MSNUM]; /* MVST name & type stored */