/******************************************************************************\
* This is a part of the Microsoft Source Code Samples.
* Copyright 1993 - 1998 Microsoft Corporation.
* All rights reserved.
* This source code is only intended as a supplement to
* Microsoft Development Tools and/or WinHelp documentation.
* See these sources for detailed information regarding the
* Microsoft samples programs.
\******************************************************************************/
#include <windows.h>
#include <commdlg.h>
#include <string.h>
#include <stdlib.h>
#define strncpy My_mbsncpy
#define strtok My_mbstok
unsigned char * _cdecl My_mbsncpy(
unsigned char *, const unsigned char *, size_t);
unsigned char * _cdecl My_mbstok(unsigned char *, unsigned char *);
#ifdef RC_INVOKED
#define ID(id) id
#else
#define ID(id) MAKEINTRESOURCE(id)
#endif
#undef EDIT_FIXED
// resource ID's
#define IDPortTool ID(1)
#define IDBkPort ID(2)
#define IDA_PORTTOOL 1
// edit control child window ID
#define IDC_EDIT 1000
// max string lengths
#define MAXSEARCHSTRING 80
#define MAXPTRDEFINITION 200
#define MAXPTRDEVICE 50
#define MAXPTRDRIVER 50
#define MAXPTRPORT 50
// extra byte window word and long definitions
#define WL_HWNDEDIT 0
#define WW_SCROLL 4
#define WW_UNTITLED 6
#define WW_SEARCHCASE 8
#define WW_SEARCHDN 10
#define WL_HPTRDEVNAMES 12
#define CBWNDEXTRA 16
// menuitem IDs, file submenu
#define IDM_FILENEW 1001
#define IDM_FILEOPEN 1002
#define IDM_FILESAVE 1003
#define IDM_FILESAVEAS 1004
#define IDM_FILEPRINT 1005
#define IDM_FILESETUP 1006
#define IDM_FILEEXIT 1007
#define IDM_FILEABOUT 1008
// edit submenu
#define IDM_EDITUNDO 2000
#define IDM_EDITCUT 2001
#define IDM_EDITCOPY 2002
#define IDM_EDITPASTE 2003
#define IDM_EDITCLEAR 2004
#define IDM_EDITSELECT 2005
#define IDM_EDITWRAP 2006
#define IDM_EDITSCROLL 2007
#define IDM_EDITFONT 2008
// search submenu
#define IDM_SEARCHFIND 3001
#define IDM_SEARCHNEXT 3002
#define IDM_SEARCHPREV 3003
// port submenu
#define IDM_PORTCURFILE 4000
#define IDM_PORTBKGND 4001
#define IDM_FUNCTION1 5000
#define IDM_FUNCTION2 5001
#define IDM_FUNCTION3 5002
#define IDM_FUNCTION4 5003
#define IDM_FUNCTION5 5004
// dialog & control IDs
// about dialog
#define IDD_ABOUT ID(300)
#define IDC_SYSTEM 301
#define IDC_APP 302
#define IDC_VERSION 303
#define IDC_COPYRIGHT 304
#define IDC_OSVERSION 305
// cancel print dialog
#define IDD_CANCELDLG ID(400)
#define IDC_PRINTDEVICE 401
#define IDC_PRINTPORT 402
#define IDC_PRINTTITLE 403
// port options dialog
#define IDD_OPTIONSDLG ID(500)
#define IDC_NOAPIS 501
#define IDC_NOMESSAGES 502
#define IDC_NOSTRUCTURES 503
#define IDC_NOMACROS 504
#define IDC_NOCONSTANTS 505
#define IDC_NOTYPES 506
#define IDC_NOCUSTOM 507
#define IDC_IGNORECASE 508
#define IDC_CURTOKEN 509
#define IDC_IGNORETOKEN 510
// port current file dialog
#define IDD_PORTDIALOG ID(600)
#define IDC_SEARCHFOUND 601
#define IDC_ISSUECNT 602
#define IDC_LINENO 603
#define IDC_LINE 604
#define IDC_ISSUE 605
#define IDC_CONTINUE 606
#define IDC_SUGGESTION 608
#define IDC_SUGGESTLABEL 609
#define IDC_OPTIONS 610
#define IDC_DONE 611
#define IDC_HELPM 612
#define IDC_RESTART 613
// background port status dialog
#define IDD_BKPORTDIALOG ID(700)
#define IDC_BKNOAPIS 702
#define IDC_BKNOMESSAGES 703
#define IDC_BKNOSTRUCTURES 704
#define IDC_BKNOMACROS 705
#define IDC_BKNOCONSTANTS 706
#define IDC_BKNOTYPES 707
#define IDC_BKNOCUSTOM 708
#define IDC_BKIGNORECASE 709
#define IDC_CHANGEOPTIONS 710
#define IDC_ADDFILE 711
#define IDC_COMPLETE 712
#define IDC_LINES 713
#define IDC_ISSUES 714
#define IDC_ABORTFILE 715
#define IDC_FILEPATH 716
#define IDC_FILELIST 717
#define IDC_BKDONE 718
// file I/O error stringtable entries
#define IDS_OPENFAILED WM_USER+101
#define IDS_NOSIZE WM_USER+102
#define IDS_READFAILED WM_USER+103
#define IDS_REALLOCFAILED WM_USER+104
#define IDS_EDITWNDFAILED WM_USER+105
#define IDS_GETHANDLEFAILED WM_USER+106
#define IDS_WRITEOPENFAILED WM_USER+107
#define IDS_WRITEFAILED WM_USER+108
#define IDS_PTRCOMMDLGFAILED WM_USER+109
#define IDS_PRINTABORTED WM_USER+110
#define IDS_STARTDOCFAILED WM_USER+111
#define IDS_SETABORTPROCFAILED WM_USER+112
#define IDS_CANCELDLGFAILED WM_USER+113
#define IDS_PTRCONFIGFAILED WM_USER+114
#define IDS_NOFILETOPORT WM_USER+115
#define IDS_PORTINITFAILED WM_USER+116
#define IDS_MEMORYFAILED WM_USER+117
#define IDS_FONTFAILEDTOCREATE WM_USER+118
#define IDS_LOADPORTFAILED WM_USER+119
#define IDS_PROCADDRESSFAILED WM_USER+120
#define IDS_UNTITLED WM_USER+201
#define IDS_APPNAME WM_USER+202
#define IDS_PRINTJOB WM_USER+203
#define IDS_PRINTERROR WM_USER+204
#define IDS_DATACHANGED WM_USER+205
#define IDS_DEFAULTFILEEXT WM_USER+206
#define IDS_SAVEASTITLE WM_USER+207
#define IDS_FILEOPENTITLE WM_USER+208
#define IDS_STRINGNOTFOUND WM_USER+209
#define IDS_SEARCHDLGFAILED WM_USER+210
#define IDS_WINDOWSAPPNAME WM_USER+211
#define IDS_DEVICENAME WM_USER+212
#define IDS_PORTFILE WM_USER+213
#define IDS_SEARCHING WM_USER+214
#define IDS_FOUND WM_USER+215
#define IDS_NOMOREPORTISSUES WM_USER+216
#define IDS_INIFILE WM_USER+217
#define IDS_WINHELP WM_USER+218
#define IDS_NOTYETIMPLEMENTED WM_USER+219
#define IDS_NOT WM_USER+220
#define IDS_PORTDLLFILE WM_USER+221
#define IDS_CHECKSTRING WM_USER+222
#define IDS_BKPORTNEWLINE WM_USER+223
#define IDS_BKPORTHEADER WM_USER+224
#define IDS_BKPORTTOKEN WM_USER+225
#define IDS_BKPORTISSUE WM_USER+226
#define IDS_BKPORTSUGGEST WM_USER+227
#define IDS_BKPORTHELP WM_USER+228
#define IDS_BKPORTHELPFILE WM_USER+229
#define IDS_BKPORTEOL WM_USER+230
#define IDS_BKPORTABORT WM_USER+231
#define IDS_BKPORTSTATUS WM_USER+232
#define IDS_BKPORTCANCEL WM_USER+233
#define IDS_BKPORTSTARTFAILED WM_USER+234
#define IDS_CANTBUILDFILELIST WM_USER+235
#define IDS_PORTFILEBACKMSG WM_USER+236
#define IDS_DEFAULTPORTEXT WM_USER+237
#define IDS_PORTFILEOPENTITLE WM_USER+238
#define IDS_UNKNOWN_ERROR WM_USER+239
#define IDS_ERR_INVALID_THREADHND WM_USER+240
#define IDS_CANCEL_BKGND_PROCESS WM_USER+241
#define IDS_ABORT_TITLE WM_USER+242
#define IDS_FILE_FILTER_SPEC1 WM_USER+243
#define IDS_EXT_FILTER_SPEC1 WM_USER+244
#define IDS_FILE_FILTER_SPEC2 WM_USER+245
#define IDS_EXT_FILTER_SPEC2 WM_USER+246
#define IDS_FILE_FILTER_SPEC3 WM_USER+247
#define IDS_EXT_FILTER_SPEC3 WM_USER+248
#define IDS_FILE_FILTER_SPEC4 WM_USER+249
#define IDS_EXT_FILTER_SPEC4 WM_USER+250
#define IDS_FILE_FILTER_SPEC5 WM_USER+251
#define IDS_EXT_FILTER_SPEC5 WM_USER+252
// define background porting handle array indexes
#define BKPORT_ABORT0
#define BKPORT_STATUS1
#define nBKPORTEVENTS2
#define MAXBKTHREADS20
// define structure used in background porting
typedef struct tagBkPortFile
{
char szFile[MAX_PATH];
char szFilePath[MAX_PATH];
DWORD dwPTFlags;
HANDLE hThread;
HWND hDlg;
}BKPORTFILESTRUCT, * LPBKPORTFILESTRUCT;
// linked list structure defines background files being ported
typedef struct _BKFILELIST
{
BKPORTFILESTRUCTbkFile;
HANDLEhEvents[nBKPORTEVENTS];
LPVOIDNext;
}BKFILELIST, * LPBKFILELIST;
// function prototypes defined in PORTTOOL.C
#define UM_SAVEFILE WM_USER+1
VOIDWINAPI ErrorNotify (HWND, int);
LONGWINAPI MainWndProc (HWND, UINT, UINT, LONG);
BOOLWINAPI AboutDlgProc (HWND, UINT, UINT, LONG);
// globals and function prototypes defined in PTFILE.C
externcharlpszFilePath[MAX_PATH];
BOOLWINAPI GetFileName(HWND, char *, char *);
BOOLWINAPI GetFileFromPath (char *, char *);
BOOLWINAPI GetIniFile (char *);
intWINAPI SaveFile (HWND, char *);
BOOLWINAPI SaveAsFileName (HWND, char *, char *);
intWINAPI LoadFile (HWND, char *);
BOOL WINAPI GetPortIniFileName ( HWND, char *, char *);
// globals and function prototypes defined in PTFIND.C
externcharlpszSearch[MAXSEARCHSTRING+1];
externHWNDhDlgSearch;
BOOLWINAPI FindDialog (HWND, WORD, WORD, char *);
BOOLWINAPI LocateText (HWND, WORD, WORD, char *);
// globals and function prototypes defined in PTPRINT.C
#define UM_CANCELPRINT WM_USER+2
intWINAPI PrintFile (HWND);
intWINAPI PrinterSetup (HWND);
BOOLWINAPI GetPrinterConfig (HWND);
// globals and function prototypes defined in PTDLGS.C
BOOLWINAPI OptionsDlgProc (HWND, UINT, UINT, LONG);
BOOLWINAPI PortDlgProc (HWND, UINT, UINT, LONG);
BOOLWINAPI BkPortDlgProc (HWND, UINT, UINT, LONG);
// globals and function prototypes defined in PTBKPORT.C
#define UM_THREADCOMPLETE WM_USER+2
#define UM_STATUSUPDATE WM_USER+3
HANDLEWINAPI StartBkPortThread (LPBKPORTFILESTRUCT);
BOOLWINAPI CreateEvents (HANDLE *, LPBKPORTFILESTRUCT);
voidWINAPI DestroyEvents (HANDLE *);
BOOL WINAPI InitPortData(CHAR *);
CHAR lpszPortIniFilePath[MAX_PATH];