/*
 * cardfile.h main include file for CARDFILE
 */
#include <windows.h>
#include "indexrc.h"
#include <commdlg.h>                            /* Standard dialogs */
#include "ecda.h"                /* OLE */

/*
 * WIN16/32 compatability
 */
#if defined(WIN32)
#define HFILE    HANDLE
#define HUGE
#define WPARAM  DWORD
#define MYPOINT POINTS
#define LPMYPOINT POINTS *
#define MYMAKEPOINT(l) MAKEPOINTS(l)
#define MYPOINTTOPOINT( pt, pts ) { (pt).x = (LONG)(pts).x ; \
                                    (pt).y = (LONG)(pts).y ; }
#define MyGetTextExtent( a, b, c, d ) GetTextExtentPoint( a, b, c, &d )
#ifndef JAPAN
#define IsDBCSLeadByte(a) a,FALSE
#endif
#define LockData(h) (h)
#define UnlockData(h) (h)
#else
#define HFILE   int
#define HUGE    huge
#define WPARAM  WORD
#define UINT    unsigned int
#define WNDPROC FARPROC
#define MYPOINT POINT
#define MYMAKEPOINT(l) MAKEPOINT(l)
#define MyGetTextExtent( a, b, c, d ) d = GetTextExtent( a, b, c )
#endif


#define KEYNAMESIZE     300
#define OBJSTRINGSMAX    64

#ifdef DEBUG
#define NOEXPORT
#else
#define NOEXPORT static
#endif

#define     ABOUT       100
#define     NEW         101
#define     OPEN        102
#define     SAVE        103
#define     SAVEAS      104
#define     PRINT       105
#define     PRINTALL    106
#define     MERGE       107
#define     EXIT        108
#define     PAGESETUP   109
#define     PRINTSETUP  110

#define     CCARDFILE   141
#define     PHONEBOOK   142
#define     VIEW        143

#define     UNDO        118
#define     HEADER      111
#define     RESTORE     112
#define     CUT         113
#define     COPY        114
#define     PASTE       115
#define     I_TEXT      116
#define     I_OBJECT    117
#define     IDM_SETFONT 120
#define     ADD         121
#define     CARDDELETE  122
#define     DUPLICATE   123
#define     DIAL        124
#define     GOTO        131
#define     FIND        132
#define     FINDNEXT    133
#define     IDM_PASTESPECIAL    134
#define     IDM_INSERTOBJECT    135


/* Use standard help numbers */
#define     ID_INDEX    301             //0xFFFF
#define     ID_SEARCH   302             //0x0021
#define     ID_USEHELP  303             //0XFFFC


#define     EDITWINDOW      200
#define     LEFTWINDOW      201
#define     RIGHTWINDOW     202
#define     SCROLLWINDOW    203
#define     LISTWINDOW      204
#define     CARDWINDOW      205

/* -------------------------------------------------------------------- */
/* Added conditional compilation for long filename support under OS/2   */
/* t-carlh - August, 1990                                               */
/* -------------------------------------------------------------------- */
#ifdef OS2
#define PATHMAX 260     /* Maximum OS/2 filename length */
#else
#if defined(WIN32)
#define PATHMAX MAX_PATH
#else
#define PATHMAX 128     /* Maximum filename length */
#endif
#endif

#define PT_LEN  50              /* max length of page setup strings */

#if DBG
extern TCHAR dbuf[100];
#endif

extern TCHAR szText[];          /* buffer for reading in card text, etc */
extern TCHAR DefaultNullStr[];

extern BOOL bAskForUpdate;

extern UINT wFRMsg;              /* Registered "Find/Replace" message */

extern TCHAR *szOpenMergeText;

extern HWND hListWnd;
extern HWND hCardWnd;
extern HWND hIndexWnd;
extern HWND hEditWnd;
extern HWND hLeftWnd;
extern HWND hRightWnd;
extern HWND hScrollWnd;
extern HWND hEditWnd;
extern HWND hDlgFind;
extern BOOL fInSaveAsDlg;
extern BOOL fValidate;
extern TCHAR szValidateFileWrite[];

extern HANDLE hAccel;
extern HANDLE hEditCurs;
extern HANDLE hIndexInstance;
extern HDC hMemoryDC;
extern HDC hDisplayDC;

#define INITPOINTSIZE 120      // initial point size of font in edit control
extern LOGFONT FontStruct;     // logical font in edit control
extern INT     iPointSize;     // current point size of FontStruct
extern HFONT   hFont;          // current font in edit control

extern INT EditWidth;
extern INT EditHeight;

extern INT xCardWnd;        /* size of the Card window */
extern INT yCardWnd;
extern INT cxHScrollBar;
extern INT cyHScrollBar;

extern int CardPhone;
extern int fCanPrint;
extern BOOL bPrinterSetupDone;
extern int fNeedToUpdateObject;
extern int fSettingText;

extern OPENFILENAME OFN;
extern FINDREPLACE FR;
extern PRINTDLG PD;

extern TCHAR szFileName[];
extern TCHAR TempFile[];
extern TCHAR szOpenCaption[];       /* File open dialog caption text       */
extern TCHAR szSaveCaption[];       /* File Save as dialog caption text    */
extern TCHAR szMergeCaption[];      /* File Merge dialog caption text      */

extern TCHAR chPageText[6][PT_LEN];
extern TCHAR SavedIndexLine[];
extern int DBcmd;
extern int ySpacing;


extern TCHAR szPrinter[];
extern TCHAR szMarginError[160];
extern TCHAR szDec[];
extern int fEnglish;               /* true if using English measure system  */

extern TCHAR CurIFile[PATHMAX];
extern TCHAR szSearch[40];
extern BOOL fCase, fReverse, fRepeatSearch;

extern FARPROC lpfnAbortProc;
extern FARPROC lpfnAbortDlgProc;
extern FARPROC lpfnPageDlgProc;
extern FARPROC lpPrinterSetDlg;
extern FARPROC lpDlgProc;
extern FARPROC lpfnOpen;
extern FARPROC lpfnSave;
extern FARPROC lpfnDial;
extern FARPROC lpEditWndProc;
extern FARPROC lpfnLinksDlg;           /* OLE */
extern FARPROC lpfnInvalidLink;        /* OLE */

extern TCHAR szCardView[25];
extern TCHAR szListView[25];

extern HANDLE fhMain;        /* file handle for source file                */
extern WORD   fFileType;     /* file type indicator (OLD_FORMAT, ANSI_FILE or UNICODE_FILE) */
extern int    fReadOnly;
extern TCHAR  szValidateFileWrite[];
extern BOOL   fValidate;     /* TRUE if validating on save       */
extern TCHAR  TempFile[];
extern int    fNoTempFile;
extern BYTE   chDKO[];       /* Unicode cardfile signature.(OLE) */
extern BYTE   chRRG[];       /* new cardfile signature.(OLE)     */
extern BYTE   chMGC[];       /* old cardfile signature.          */
extern TCHAR  SavedIndexLine[];

/* these must be in the same order as the openfile dialog filter */
#define UNICODE_FILE   1        /* new Unicode format type  */
#define ANSI_FILE      2        /* new OLE ANSI format type */
#define OLD_FORMAT     3        /* 3.0 Cardfile format type */


#define LINELENGTH  40
#define CARDLINES   11
#define CARDTEXTSIZE    ((LINELENGTH+1) * CARDLINES)
#define CARDCY      12

typedef struct tagTIME
{
    TCHAR szSep[2];          /* Separator character for date string */
    TCHAR sz1159[6];         /* string for AM */
    TCHAR sz2359[6];         /* string for PM */
    int   iTime;             /* time format */
    int   iTLZero;           /* lead zero for hour */
} TIME;

/* max size of short date format string */
#define MAX_FORMAT              12

typedef struct tagDATE
{
    TCHAR szFormat[MAX_FORMAT];
} DATE;

typedef struct
{
    BYTE     reserved[6];               /* bytes available for future use */
    DWORD    lfData;                    /* file offset of data */
    BYTE     flags;                     /* flags */
    CHAR     line[LINELENGTH+1];        /* 40 character lines plus null */
} CARDHEADERA;

typedef CARDHEADERA *PCARDHEADERA;
typedef CARDHEADERA far *LPCARDHEADERA;

typedef struct
{
    BYTE     reserved[6];               /* bytes available for future use */
    DWORD    lfData;                    /* file offset of data */
    BYTE     flags;                     /* flags */
    WCHAR    line[LINELENGTH+1];        /* 40 character lines plus null */
} CARDHEADERW;

typedef CARDHEADERW *PCARDHEADERW;
typedef CARDHEADERW far *LPCARDHEADERW;

#ifdef UNICODE
#define CARDHEADER   CARDHEADERW
#else
#define CARDHEADER   CARDHEADERA
#endif

typedef CARDHEADER *PCARDHEADER;
typedef CARDHEADER far *LPCARDHEADER;

// do something to get rid of warnings
#ifndef OLE_20
#define OLECHAR CHAR
#else
#define OLECHAR TCHAR
#endif

#define ODS OutputDebugString


// FOR PACKING/NON_PACKING PORTABILITY
#if !defined (WIN32)
#define SIZEOFCARDHEADERA sizeof(CARDHEADERA)
#define SIZEOFCARDHEADERW sizeof(CARDHEADERW)
#else
#define SIZEOFCARDHEADERW (11 + (LINELENGTH + 1) * sizeof(WCHAR))
#define SIZEOFCARDHEADERA (11 + LINELENGTH + 1)
#ifdef UNICODE
#define SIZEOFCARDHEADER  SIZEOFCARDHEADERW
#else
#define SIZEOFCARDHEADER  SIZEOFCARDHEADERA
#endif
#endif


typedef struct
{
    /*
     * For OLE, the BITMAP is just a special frozen object.
     *
     * If we're in compatibility mode (lpObject is an HBITMAP) the
     * selector of lpObject will be NULL.
     */
    DWORD       idObject;        /* What is the object name? */
    OBJECTTYPE  otObject;        /* What kind of object is this? */
    RECT        rcObject;        /* Where should the object be drawn? */
    LPOLEOBJECT lpObject;        /* Handle to the object */
    HANDLE      hText;
} CARD, FAR *PCARD;

extern DWORD idObjectMax;

extern int    cCards;        /* the current count of cards */
extern HANDLE hCards;        /* the handle to the buffer   */

extern INT CharFixWidth;    /* the character width  */
extern INT CharFixHeight;   /* the character height */
extern INT ExtLeading;      /* the external leading */

extern int CardWidth;
extern int CardHeight;
extern int fColor;

extern HBRUSH hbrCard;
extern HBRUSH hbrBorder;
extern HANDLE hArrowCurs;
extern HANDLE hWaitCurs;

extern CARDHEADER CurCardHead;
extern CARD       CurCard;

#define FNEW        0x01
#define FDIRTY      0x02
#define FTMPFILE    0x04

/* Return values from OleError: No problem, error with/without warning */
#define FOLEERROR_OK       0x00
#define FOLEERROR_GIVEN    0x01
#define FOLEERROR_NOTGIVEN 0x02

extern RECT dragRect;

extern int iTopScreenCard;
extern int iCurCard;
extern int iFirstCard;

#define LEFTMARGIN      8
#define TOPMARGIN       8
#define BOTTOMMARGIN    8

extern int cScreenHeads;
extern int cScreenCards;
extern int cFSHeads;        /* count of fully visible headers */

#define SBINDEX SB_HORZ

extern int ySpacing;
extern int xFirstCard;
extern int yFirstCard;

extern int EditMode;

extern TCHAR *pcComNum;
extern TCHAR *pcTonePulse;
extern TCHAR *pcSpeedNum;

extern TCHAR szMerge[3];       /* two characters for string insertion   */

extern BOOL fFileDirty;        /* does disk match current set of cards? */
extern BOOL fFullSize;

extern BOOL fInsertComplete;   /* If insertObject in progress, it is FALSE   */
                               /* Reset to TRUE when InsertObjectis complete */

#ifdef JAPAN    //KKBUGFIX  #3082: 02/02/1993: Disabling IME while Picture mode
extern BOOL fNowFocus;
#endif

#define INDEXICON   1
#define MAINACC     1
#define MTINDEX     1

/* prompts */
#define IDELCURCARD     0
#define ICREATEFILE     1
#define IOKTOSAVE       2
#define ICARDS          3
#define ICARD           4
#define IONECARD        5
#define IUNTITLED       6
#define ICARDDATA       7
#define IWARNING        8
#define INOTE           9
#define IPICKUPPHONE    10
#define ICARDFILE       11
#define IMARGINERR      12
#define IMERGE          13
#define IOPEN           14
#define ICARDVIEW       15
#define ILISTVIEW       16
#define IHELPFILE       18

/* errors */
#define ECANTDIAL       19
#define ECANTPRINTPICT  20
#define EINSMEMORY      21
#define EINVALIDFILE    23
#define ECLIPEMPTYTEXT  24
#define ENOTEXTSEL      25
#define EDISKFULLFILE   26
#define ECANTMAKETEMP   27
#define EINSMEMSAVE     28
#define EDISKFULLSAVE   29
#define EOPENTEMPSAVE   30
#define ECANTREADPICT   31
#define EINSMEMRUN      32
#define ENOTVALIDFILE   33
#define ECANTFIND       34
#define EINSMEMREAD     35
#define ECANTPRINT      36
#define ECLIPEMPTYPICT  37
#define ENOMODEM        38
#define ENOPICTURES     39
#define ECANTMAKEFILE   40
#define EMEMPRINT       41
#define EDISKPRINT      42
#define ISTRINGINSERT   43
#define IFILEEXTENSION  44
#define E_NOUNICODEFONT 45
#define E_UNICODETEXT   46

/**** WARNING!  DO NOT CHANGE THE ORDER OF THESE! ***/
#define IHEADER         50
#define IFOOTER         51
#define ILEFT           52
#define IRIGHT          53
#define ITOP            54
#define IBOT            55
/*** END OF WARNING ***/

#define IDS_LETTERS     60
/* A whole slew of E_ errors defined in ecda.h, starting at 0x100 */
/* A few W_ errors defined in ecda.h, starting at 0x200 */
#define E_CANT_REOPEN_FILE       61
#define E_FILEUPDATEFAILED       62
#define E_FILEWRITEFAILED        63
#define E_FILECANTWRITE          64
#define IDS_CANNOTQUIT           65
#define E_CANTSAVETOREADONLYFILE 66
#define W_OPENFILEFORREADONLY    67
#define E_PASTEDTEXTTOOLONG      68
#define E_FILESAVE               69

#define CAPTIONMAX  30          /* max size of captions in dialogs  */
#define OBJNAMEMAX  30          /* Length of IDS_OBJNAME w/o the %d */

#define IDS_FILTERSPEC    0x300   /* file open/save dlg. filter spec. string */
#define IDS_FILTERSPEC2   0x301
#define IDS_FILTERSPEC3   0x302
#define IDS_FILTERSPEC4   0x303
#define IDS_OPENDLGTITLE  0x304   /* caption of the open dialog              */
#define IDS_SAVEDLGTITLE  0x305   /* caption of the saveas dialog            */
#define IDS_MERGEDLGTITLE 0x306   /* caption of the merge dialog             */
#define IDS_LINKTITLE     0x307   /* Caption of the link repair dialog       */
#define IDS_VALIDATE      0x308   /* Validate check box text */
#define IDS_OBJNAME       0x309   /* Used to construct OLE object names */
#define IDS_UPDATEEMBOBJECT  0x30A
#define IDS_RETRYAFTERINSERT 0x30B
#define IDS_OBJECTCMD     0x30C
#define IDS_PICTUREFMT    0x30D
#define IDS_BITMAPFMT     0x30E
#define IDS_UPDATELINK    0x30F
#define IDS_OBJECTFMT     0x310
#define IDS_PopupVerbs    0x311
#define IDS_SingleVerb    0x312
#define IDS_Edit          0x313
#define IDS_NOOLESERVERS  0x314
#define IDS_SPACEISINCH   0x315
#define IDS_SPACEISCENTI  0x316

extern TCHAR szCardfile[40];
extern TCHAR szCardClass[];
extern TCHAR szWindows[];
extern TCHAR szDevice[];

extern TCHAR NotEnoughMem[160];
extern TCHAR szHelpFile[30];
extern TCHAR szUntitled[30];
extern TCHAR szWarning[30];
extern TCHAR szNote[30];
extern TCHAR szFileExtension[5];

extern int iTopCard;

extern TCHAR szServerFilter[];      /* default filter spec. for servers  */
extern TCHAR szFilterSpec[];        /* default filter spec. */
extern TCHAR szLinkCaption[];
extern TCHAR szLastDir[];

HANDLE hFind;
extern TCHAR szCustFilterSpec[];    /* buffer for custom filters created */
extern BOOL fValidDB;               /* Validate on/off in Save dialog box */

#include "funcs.h"
#include "uniconv.h"