517 lines
14 KiB
C
517 lines
14 KiB
C
// This file contains example uses of the port1632.h macros.
|
|
// compile with -DWINxx where xx = 16 or 32
|
|
|
|
#define USECOMM
|
|
#define WIN31
|
|
#include <malloc.h>
|
|
#include <memory.h>
|
|
#include <string.h>
|
|
#include <windows.h>
|
|
#include <dde.h>
|
|
#ifdef WIN16
|
|
// #include <netcons.h>
|
|
// #include <server.h>
|
|
#endif
|
|
#include <port1632.h> /* should come last */
|
|
#include <io.h>
|
|
#include <fcntl.h>
|
|
#ifdef WIN32
|
|
#include <setjmp.h>
|
|
#endif
|
|
//#include <sys\types.h>
|
|
//#include <sys\stat.h>
|
|
|
|
|
|
LONG APIENTRY MyWndProc(HWND hwnd, WORD msg, WPARAM wp, DWORD lp);
|
|
VOID UserCalls(VOID);
|
|
VOID GDICalls(VOID);
|
|
VOID DEVCalls(VOID);
|
|
VOID KernelCalls(VOID);
|
|
|
|
MMain(hInst, hPrev, lpCmdLine, cmdShow)
|
|
//{
|
|
|
|
if (_argc) {
|
|
**_argv;
|
|
}
|
|
|
|
return(0);
|
|
}
|
|
|
|
|
|
LONG APIENTRY MyWndProc(
|
|
HWND hwnd,
|
|
WORD msg,
|
|
WPARAM wp,
|
|
DWORD lp)
|
|
{
|
|
|
|
switch (msg) {
|
|
case WM_ACTIVATE:
|
|
{
|
|
WORD state = GET_WM_ACTIVATE_STATE(wp, lp);
|
|
BOOL fMinimized = GET_WM_ACTIVATE_FMINIMIZED(wp, lp);
|
|
HWND hwndAct = GET_WM_ACTIVATE_HWND(wp, lp);
|
|
}
|
|
break;
|
|
|
|
case WM_CHARTOITEM:
|
|
{
|
|
CHAR ch = (CHAR)GET_WM_CHARTOITEM_CHAR(wp, lp);
|
|
WORD posItem = GET_WM_CHARTOITEM_POS(wp, lp);
|
|
HWND hwndLB = GET_WM_CHARTOITEM_HWND(wp, lp);
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
{
|
|
WORD idCtrl = GET_WM_COMMAND_ID(wp, lp);
|
|
HWND hwndCtrl = GET_WM_COMMAND_HWND(wp, lp);
|
|
WORD cmd = GET_WM_COMMAND_CMD(wp, lp);
|
|
SendMessage(hwnd, WM_COMMAND, GET_WM_COMMAND_MPS(idCtrl, hwndCtrl, cmd));
|
|
}
|
|
break;
|
|
|
|
case WM_CTLCOLOR:
|
|
case WM_CTLCOLORBTN:
|
|
case WM_CTLCOLORDLG:
|
|
case WM_CTLCOLORLISTBOX:
|
|
case WM_CTLCOLORMSGBOX:
|
|
case WM_CTLCOLORSCROLLBAR:
|
|
case WM_CTLCOLORSTATIC:
|
|
case WM_CTLCOLOREDIT:
|
|
{
|
|
HDC hdc = GET_WM_CTLCOLOR_HDC(wp, lp, msg);
|
|
HWND hwndCtrl2 = GET_WM_CTLCOLOR_HWND(wp, lp, msg);
|
|
WORD type = GET_WM_CTLCOLOR_TYPE(wp, lp, msg);
|
|
SendMessage(hwnd, WM_CTLCOLOR, GET_WM_CTLCOLOR_MPS(hdc, hwndCtrl2, type));
|
|
}
|
|
break;
|
|
|
|
case WM_MENUSELECT:
|
|
{
|
|
WORD cmdMenu = GET_WM_MENUSELECT_CMD(wp, lp);
|
|
WORD flags = GET_WM_MENUSELECT_FLAGS(wp, lp);
|
|
HMENU hMenu = GET_WM_MENUSELECT_HMENU(wp, lp);
|
|
}
|
|
break;
|
|
|
|
case WM_MDIACTIVATE: // from MDI child's perspective
|
|
{
|
|
BOOL fActivate = GET_WM_MDIACTIVATE_FACTIVATE(hwnd, wp, lp);
|
|
HWND hwndActivate = GET_WM_MDIACTIVATE_HWNDACTIVATE(wp, lp);
|
|
HWND hwndDeactivate = GET_WM_MDIACTIVATE_HWNDDEACT(wp, lp);
|
|
}
|
|
break;
|
|
|
|
case WM_MDISETMENU:
|
|
{
|
|
HMENU hMenuFrame, hMenuWindow;
|
|
SendMessage(hwnd, WM_MDISETMENU,
|
|
GET_WM_MDISETMENU_MPS(hMenuFrame, hMenuWindow));
|
|
}
|
|
break;
|
|
|
|
case WM_MENUCHAR:
|
|
{
|
|
CHAR chMenu = GET_WM_MENUCHAR_CHAR(wp, lp);
|
|
BOOL fMenu = GET_WM_MENUCHAR_FMENU(wp, lp);
|
|
HWND hwndMenu = GET_WM_MENUCHAR_HMENU(wp, lp);
|
|
}
|
|
break;
|
|
|
|
case WM_PARENTNOTIFY:
|
|
{
|
|
WORD msgPn = GET_WM_PARENTNOTIFY_MSG(wp, lp);
|
|
WORD idPn = GET_WM_PARENTNOTIFY_ID(wp, lp);
|
|
HWND hwndChild = GET_WM_PARENTNOTIFY_HWNDCHILD(wp, lp);
|
|
INT x = GET_WM_PARENTNOTIFY_X(wp, lp);
|
|
INT y = GET_WM_PARENTNOTIFY_Y(wp, lp);
|
|
}
|
|
break;
|
|
|
|
case WM_VKEYTOITEM:
|
|
{
|
|
WORD codeVk = GET_WM_VKEYTOITEM_CODE(wp, lp);
|
|
INT itemLB = GET_WM_VKEYTOITEM_ITEM(wp, lp);
|
|
HWND hwndLBvk = GET_WM_VKEYTOITEM_HWND(wp, lp);
|
|
}
|
|
break;
|
|
|
|
case EM_GETSEL:
|
|
{
|
|
INT iStartGS;
|
|
INT iEndGS;
|
|
MSendMsgEM_GETSEL(hwnd, &iStartGS, &iEndGS);
|
|
}
|
|
break;
|
|
|
|
case EM_SETSEL:
|
|
{
|
|
INT iStartSS;
|
|
INT iEndSS;
|
|
SendMessage(hwnd, EM_SETSEL, GET_EM_SETSEL_MPS(iStartSS, iEndSS));
|
|
}
|
|
break;
|
|
|
|
case EM_LINESCROLL:
|
|
{
|
|
INT vert, horz;
|
|
SendMessage(hwnd, EM_LINESCROLL, GET_EM_LINESCROLL_MPS(vert, horz));
|
|
}
|
|
break;
|
|
|
|
case WM_HSCROLL:
|
|
{
|
|
WORD codeHs = GET_WM_HSCROLL_CODE(wp, lp);
|
|
WORD posHs = GET_WM_HSCROLL_POS(wp, lp);
|
|
HWND hwndHs = GET_WM_HSCROLL_HWND(wp, lp);
|
|
}
|
|
break;
|
|
|
|
case WM_VSCROLL:
|
|
{
|
|
WORD codeVs = GET_WM_VSCROLL_CODE(wp, lp);
|
|
WORD posVs = GET_WM_VSCROLL_POS(wp, lp);
|
|
HWND hwndVs = GET_WM_VSCROLL_HWND(wp, lp);
|
|
}
|
|
break;
|
|
|
|
case WM_CHANGECBCHAIN:
|
|
{
|
|
HWND hwndNext = GET_WM_CHANGECBCHAIN_HWNDNEXT(wp, lp);
|
|
}
|
|
break;
|
|
|
|
case WM_DDE_ACK:
|
|
{
|
|
HWND hwndFrom = (HWND)wp;
|
|
WORD wStatus = GET_WM_DDE_ACK_STATUS(wp, lp);
|
|
ATOM aItem = GET_WM_DDE_ACK_ITEM(wp, lp);
|
|
HANDLE hDataExec = GET_WM_DDE_EXECACK_HDATA(wp, lp);
|
|
DDEFREE(WM_DDE_ACK, lp);
|
|
MPostWM_DDE_ACK(hwndFrom, hwnd, wStatus, aItem);
|
|
|
|
MPostWM_DDE_EXECACK(hwndFrom, hwnd, wStatus, aItem);
|
|
}
|
|
break;
|
|
|
|
case WM_DDE_ADVISE:
|
|
{
|
|
HWND hwndAdv = (HWND)wp;
|
|
HANDLE hOptions = GET_WM_DDE_ADVISE_HOPTIONS(wp, lp);
|
|
ATOM aItemAdv = GET_WM_DDE_ADVISE_ITEM(wp, lp);
|
|
DDEFREE(WM_DDE_ADVISE, lp);
|
|
MPostWM_DDE_ADVISE(hwndAdv, hwnd, hOptions, aItemAdv);
|
|
}
|
|
break;
|
|
|
|
case WM_DDE_DATA:
|
|
{
|
|
HWND hwndData = (HWND)wp;
|
|
HANDLE hDataData = GET_WM_DDE_DATA_HDATA(wp, lp);
|
|
ATOM aItemData = GET_WM_DDE_DATA_ITEM(wp, lp);
|
|
DDEFREE(WM_DDE_DATA, lp);
|
|
MPostWM_DDE_DATA(hwndData, hwnd, hDataData, aItemData);
|
|
}
|
|
break;
|
|
|
|
case WM_DDE_EXECUTE:
|
|
{
|
|
HWND hwndData = (HWND)wp;
|
|
HANDLE hDataExec = GET_WM_DDE_EXECUTE_HDATA(wp, lp);
|
|
DDEFREE(WM_DDE_EXECUTE, lp);
|
|
MPostWM_DDE_EXECUTE(hwndData, hwnd, hDataExec);
|
|
}
|
|
break;
|
|
|
|
case WM_DDE_POKE:
|
|
{
|
|
HWND hwndPoke = (HWND)wp;
|
|
HANDLE hDataPoke = GET_WM_DDE_POKE_HDATA(wp, lp);
|
|
ATOM aItemPoke = GET_WM_DDE_POKE_ITEM(wp, lp);
|
|
DDEFREE(WM_DDE_POKE, lp);
|
|
MPostWM_DDE_POKE(hwndPoke, hwnd, hDataPoke, aItemPoke);
|
|
}
|
|
break;
|
|
|
|
case WM_DDE_REQUEST:
|
|
{
|
|
HWND hwndReq = (HWND)wp;
|
|
ATOM fmt = GET_WM_DDE_REQUEST_FORMAT(wp, lp);
|
|
ATOM aItem = GET_WM_DDE_REQUEST_ITEM(wp, lp);
|
|
DDEFREE(WM_DDE_REQUEST, lp);
|
|
MPostWM_DDE_REQUEST(hwndReq, hwnd, fmt, aItem);
|
|
}
|
|
break;
|
|
|
|
case WM_DDE_UNADVISE:
|
|
{
|
|
HWND hwndUnadv = (HWND)wp;
|
|
ATOM fmt = GET_WM_DDE_UNADVISE_FORMAT(wp, lp);
|
|
ATOM aItem = GET_WM_DDE_UNADVISE_ITEM(wp, lp);
|
|
DDEFREE(WM_DDE_UNADVISE, lp);
|
|
MPostWM_DDE_UNADVISE(hwndUnadv, hwnd, fmt, aItem);
|
|
}
|
|
break;
|
|
|
|
case WM_DDE_TERMINATE:
|
|
{
|
|
HWND hwndTerm = (HWND)wp;
|
|
DDEFREE(WM_DDE_TERMINATE, lp);
|
|
MPostWM_DDE_TERMINATE(hwndTerm, hwnd);
|
|
}
|
|
}
|
|
return(0);
|
|
}
|
|
|
|
|
|
VOID UserCalls()
|
|
{
|
|
VERSION ver;
|
|
HWND hDlg, hwndParent, hwnd;
|
|
WORD nLen, nID;
|
|
HCURSOR hCur;
|
|
HICON hIcon;
|
|
HBRUSH hbr;
|
|
HMODULE hmod;
|
|
MPOINT mpt;
|
|
POINT pt;
|
|
LONG l;
|
|
HINSTANCE hInst;
|
|
UINT ui;
|
|
|
|
nLen;
|
|
|
|
/* HELPER MACRO TESTING */
|
|
|
|
nLen = MAPVALUE(16, 32);
|
|
ui = GETWINDOWUINT(hwnd, 0);
|
|
ui = SETWINDOWUINT(hwnd, 0, ui);
|
|
ui = GETCLASSUINT(hwnd, 0);
|
|
ui = SETCLASSUINT(hwnd, 0, ui);
|
|
hbr = GETCLASSBRBACKGROUND(hwnd);
|
|
hbr = SETCLASSBRBACKGROUND(hwnd, hbr);
|
|
hCur = GETCLASSCURSOR(hwnd);
|
|
hCur = SETCLASSCURSOR(hwnd, hCur);
|
|
hmod = GETCLASSHMODULE(hwnd);
|
|
hmod = SETCLASSHMODULE(hwnd, hmod);
|
|
hIcon = GETCLASSICON(hwnd);
|
|
hIcon = SETCLASSICON(hwnd, hIcon);
|
|
ui = GETCLASSSTYLE(hwnd);
|
|
ui = SETCLASSSTYLE(hwnd, 0);
|
|
hInst = GETHWNDINSTANCE(hwnd);
|
|
hInst = SETHWNDINSTANCE(hwnd, hInst);
|
|
hwnd = GETHWNDPARENT(hwnd);
|
|
hwnd = SETHWNDPARENT(hwnd, hwndParent);
|
|
ui = GETWINDOWID(hwnd);
|
|
ui = SETWINDOWID(hwnd, 0);
|
|
|
|
MPOINT2POINT(mpt, pt);
|
|
POINT2MPOINT(pt, mpt);
|
|
mpt = MAKEMPOINT(l);
|
|
|
|
MGetLastError();
|
|
GETMAJORVERSION(ver);
|
|
GETMINORVERSION(ver);
|
|
MDlgDirSelect(hDlg, "foo", nLen, nID);
|
|
MDlgDirSelectCOMBOBOX(hDlg, "foo", nLen, nID);
|
|
}
|
|
|
|
VOID GDICalls()
|
|
{
|
|
HDC hdc;
|
|
HBITMAP hbmp;
|
|
HANDLE h;
|
|
BOOL b;
|
|
LPSTR lpstr;
|
|
INT i;
|
|
HMETAFILE hmf;
|
|
|
|
b = MGetAspectRatioFilter(hdc, &i, &i);
|
|
b = MGetTextExtent(hdc, lpstr, i, &i, &i);
|
|
b = MGetBitmapDimension(hbmp, &i, &i);
|
|
b = MGetBrushOrg(hdc, &i, &i);
|
|
b = MGetCurrentPosition(hdc, &i, &i);
|
|
b = MGetViewportExt(hdc, &i, &i);
|
|
b = MGetViewportOrg(hdc, &i, &i);
|
|
b = MGetWindowExt(hdc, &i, &i);
|
|
b = MGetWindowOrg(hdc, &i, &i);
|
|
MMoveTo(hdc, i, i);
|
|
MSetBrushOrg(hdc, i, i);
|
|
MOffsetViewportOrg(hdc, i, i);
|
|
MOffsetWindowOrg(hdc, i, i);
|
|
MScaleViewportExt(hdc, i, i, i, i);
|
|
MScaleWindowExt(hdc, i, i, i, i);
|
|
MSetBitmapDimension(hbmp, i, i);
|
|
MSetViewportExt(hdc, i, i);
|
|
MSetViewportOrg(hdc, i, i);
|
|
MSetWindowExt(hdc, i, i);
|
|
MSetWindowOrg(hdc, i, i);
|
|
b = MUnrealizeObject(h);
|
|
h = MGetMetaFileBits(hmf);
|
|
hmf = MSetMetaFileBits(h);
|
|
}
|
|
|
|
|
|
|
|
VOID DEVCalls()
|
|
{
|
|
HWND hwnd;
|
|
INT i;
|
|
LPDEVMODE lpdevmode;
|
|
DWORD dw;
|
|
WORD2DWORD w2dw;
|
|
LPSTR lpstr;
|
|
|
|
MDeviceMode(hwnd, lpstr, lpstr, lpstr);
|
|
i = MExtDeviceMode(hwnd, lpstr, lpdevmode, lpstr, lpstr, lpdevmode, lpstr, w2dw);
|
|
dw = MDeviceCapabilities(lpstr, lpstr, lpstr, w2dw, lpstr, lpdevmode);
|
|
}
|
|
|
|
|
|
VOID KernelCalls()
|
|
{
|
|
DCB FAR *lpDCB;
|
|
HANDLE h;
|
|
DWORD dw;
|
|
WORD2DWORD w2dw;
|
|
//TEMPFIX OFSTRUCT ofs;
|
|
BYTE byte;
|
|
WORD w;
|
|
INT i;
|
|
LONG l;
|
|
LPSTR lpstr;
|
|
HFILE fh;
|
|
INT2WORD i2w;
|
|
MCATCHBUF mcb;
|
|
|
|
|
|
#ifdef WIN31
|
|
lpstr = MGetDOSEnvironment();
|
|
MFreeDOSEnvironment(lpstr);
|
|
#endif
|
|
fh = DUPHFILE(fh);
|
|
i = MCatch(mcb);
|
|
MThrow(mcb, 0);
|
|
h = MLoadLibrary(lpstr);
|
|
i = MGetModuleUsage(h);
|
|
|
|
dw = MGetWinFlags();
|
|
h = MGetCurrentTask();
|
|
|
|
fh = MOpenComm(lpstr, w, w);
|
|
if (MSetCommState(fh, lpDCB)) {
|
|
i = MReadComm(fh, lpstr, i);
|
|
i = MWriteComm(fh, lpstr, i);
|
|
i = MCloseComm(fh);
|
|
}
|
|
|
|
byte = MGetTempDrive(byte);
|
|
i = MGetTempFileName(byte, lpstr, w, lpstr);
|
|
w = MGetDriveType(i);
|
|
fh = M_lcreat(lpstr, i2w);
|
|
fh = M_lopen(lpstr, i);
|
|
//TEMPFIX fh = MOpenFile(lpstr, &ofs, w2dw);
|
|
l = M_llseek(fh, l, i);
|
|
i = M_lread(fh, lpstr, w2dw);
|
|
i = M_lwrite(fh, lpstr, w2dw);
|
|
i = M_lclose(fh);
|
|
i = MDeleteFile(lpstr);
|
|
l = OF_CREATE |
|
|
OF_CANCEL |
|
|
OF_DELETE |
|
|
OF_EXIST |
|
|
OF_PARSE |
|
|
OF_PROMPT |
|
|
OF_READ |
|
|
OF_READWRITE |
|
|
OF_REOPEN |
|
|
OF_SHARE_DENY_NONE |
|
|
OF_SHARE_DENY_READ |
|
|
OF_SHARE_DENY_WRITE |
|
|
OF_SHARE_EXCLUSIVE |
|
|
OF_WRITE;
|
|
|
|
|
|
h = MDllSharedAlloc(DLLMEM_MOVEABLE | DLLMEM_ZEROINIT, 5);
|
|
MDllSharedRealloc(h, 4, DLLMEM_MOVEABLE | DLLMEM_ZEROINIT);
|
|
MDllSharedSize(h);
|
|
MDllSharedFlags(h);
|
|
MDllSharedHandle((PDLLMEM)MDllSharedLock(h));
|
|
MDllSharedUnlock(h);
|
|
MDllSharedFree(h);
|
|
}
|
|
|
|
|
|
VOID CRuntimeCalls()
|
|
{
|
|
INT i;
|
|
HFILE fh;
|
|
|
|
i = open("file", O_APPEND);
|
|
fh = INT2HFILE(i);
|
|
i = HFILE2INT(fh, O_APPEND);
|
|
close(i);
|
|
}
|
|
|
|
VOID TemporaryFixes()
|
|
{
|
|
LPSTR psz;
|
|
INT i;
|
|
|
|
#ifdef LATER
|
|
BOOL f;
|
|
DWORD dw;
|
|
WH_VISRGN_PARAMS wh_visrgn_params;
|
|
HDC hdc;
|
|
LONG l;
|
|
DCHOOKPROC dcHookProc;
|
|
RECT rc;
|
|
HBITMAP hbm;
|
|
HRGN hrgn;
|
|
HCURSOR hCursor;
|
|
HOTKEYPROC hotkeyProc;
|
|
HANDLE h;
|
|
HWND hwnd;
|
|
WORD w;
|
|
#endif // LATER
|
|
|
|
i = AnsiToOem(psz, psz);
|
|
i = OemToAnsi(psz, psz);
|
|
AnsiToOemBuff(psz, psz, i);
|
|
OemToAnsiBuff(psz, psz, i);
|
|
AnsiUpper(psz);
|
|
AnsiLower(psz);
|
|
psz = AnsiNext(psz);
|
|
psz = AnsiPrev(psz, psz);
|
|
GlobalHandle(MGLOBALPTR(psz));
|
|
#ifdef LATER
|
|
hdc = GetDCEx(hwnd, hrgn, dw);
|
|
f = SetDCHook(hdc, dcHookProc, dw);
|
|
dw = GetDChook(hdc, &dcHookProc);
|
|
w = SetHookFlags(hdc, w);
|
|
w = SetBoundsRect(hdc, &rc, w);
|
|
w = GetBoundsRect(hdc, &rc, w);
|
|
hbm = SelectBitmap(hdc, hbm);
|
|
l = GetMessageExtraInfo();
|
|
hwnd = GetOpenClipboardWindow();
|
|
f = SetHotKeyHook(hotkeyProc, h, f);
|
|
f = PostHokKeyEvent(h);
|
|
f = RedrawWindow(hwnd, &rc, hrgn, w);
|
|
f = LockWindowUpdate(hwnd);
|
|
i = ScrollWindowEx(hwnd, i, i, &rc, &rc, hrgn, &rc, w);
|
|
hCursor = GetCursor();
|
|
f = UnkookWindowsHookEx(h);
|
|
dw = CallNextHookEx(h, i, w, l);
|
|
dw = DefVisRgnHook(&wh_visrgn_params);
|
|
f = InvalidateDCCache(hwnd, w);
|
|
f = EnableCommNotification(i, hwnd, i, i);
|
|
h = OpenDriver(psz, psz, l);
|
|
l = CloseDriver(h, l, l);
|
|
h = GetDriverModuleHandle(h);
|
|
l = SendDriverMessage(h, w, l, l);
|
|
l = DefDriverProc(dw, h, w, l, l);
|
|
#endif // LATER
|
|
}
|