(****************************** Module Header ****************************** * * Copyright (c) 1989..1992 Clarion Software Corporation * * This file is compatible with OS/2 version 1.2. * * Module Name: Win * * OS/2 Presentation Manager Window Manager definition file * Release 3.10 * ***************************************************************************** *) (*# call(o_a_size => off, o_a_copy=>off, result_optional=>on, reg_saved => (si, di, ds, st1, st2), reg_param => (), seg_name => none, near_call => off, ds_eq_ss => off) *) (*# module(implementation=>off, init_code => off) *) (*# name(prefix => os2_lib) *) (*# data(near_ptr => off,var_enum_size=>off) *) (*# check(index=>off,range=>off,overflow=>off,nil_ptr=>off) *) DEFINITION MODULE Win; FROM OS2DEF IMPORT HDC,HRGN,HAB,HPS,HBITMAP,HWND,HMODULE,HSEM,LSET, POINTL,RECTL,PID,TID,COLOR,BOOL,ERRORID,LHANDLE ; (**) (*--- Conditional sections, set to TRUE if required ------------------------*) (**) CONST i_GEN1 = TRUE ; (* General section 1 *) i_GEN2 = TRUE ; (* General section 2 *) i_GEN3 = TRUE ; (* General section 3 *) i_MSG1 = TRUE ; (* Message management *) i_DTYPES = FALSE; (* WinRegisterUserDatatype types *) i_MSG2 = FALSE; (* Message management uncommon *) i_KBDMOU = TRUE ; (* Mouse and keyboard input *) i_DIALOG1 = TRUE ; (* Dialog boxes *) i_DIALOG2 = TRUE ; (* Dialog boxes uncommon *) i_STATIC = FALSE; (* Static controls *) i_BUTTON = TRUE ; (* Button controls *) i_ENTRY = TRUE ; (* Entry fields *) i_MLENTRY = FALSE; (* Multiple line entry fields *) i_LIST = TRUE ; (* List box controls *) i_MENU = TRUE ; (* Menu controls *) i_SCROLL = FALSE; (* Scroll bar controls *) i_FRAME1 = TRUE ; (* Frame manager *) i_FRAME2 = TRUE ; (* Frame manager uncommon *) i_FRAMECTL = FALSE; (* Frame controls (title bars & size border) *) i_RECT = TRUE ; (* Rectangle routines *) i_SYS = TRUE ; (* System values *) i_COLOR = FALSE; (* Colors *) i_TIMER = TRUE ; (* Timer routines *) i_ACCEL = FALSE; (* Keyboard accelerators *) i_TRACK = TRUE ; (* WinTrackRect() function *) i_CLIP = FALSE; (* Clipboard manager *) i_CURSOR = FALSE; (* Text cursors *) i_POINTER = FALSE; (* Mouse pointers *) i_LATER = FALSE; (* Defines which version of SPTR definitions to include *) i_HOOK = FALSE; (* Hook manager *) i_SHELL = TRUE ; (* Shell API *) i_COUNTRY = FALSE; (* Country support *) i_HEAP = FALSE; (* Heap Manager *) i_ATOM = FALSE; (* Atom Manager *) i_CATCH = FALSE; (* WinCatch/WinThrow support *) i_ERROR = TRUE ; (* Error code definitions *) i_DDE = FALSE; (* DDE Manager *) i_NLS = FALSE; (* DBCS window manager definition *) i_WINHELP = FALSE; (* Help Manager definitions *) i_WINLOAD = FALSE; (* Load/Delete Library/Procedure *) i_MACROS = TRUE ; (* Inline Helper Macro Procedures *) (*%T i_MACROS *) (* Inline utility procedures *) (*# save, call(inline =>on) *) CONST (*%T _fcall *) _Ret = 0CBH; (*%E *) (*%F _fcall *) _Ret = 0C3H; (*%E *) TYPE _C1 = ARRAY[0..0] OF BYTE; _C3 = ARRAY[0..2] OF BYTE; (*# call(reg_param=>(ax,dx),reg_saved=>(bx,cx,si,di,es,ds,st1,st2)) *) INLINE PROCEDURE MAKELONG(lo,hi:WORD):LONGWORD = _C1(_Ret); (*# call(reg_param=>(ax,dx),reg_saved=>(bx,cx,si,di,es,ds,st1,st2)) *) INLINE PROCEDURE LOWORD(lw:LONGWORD):WORD = _C1(_Ret); (*# call(reg_param=>(dx,ax),reg_saved=>(bx,cx,si,di,es,ds,st1,st2)) *) INLINE PROCEDURE HIWORD(lw:LONGWORD):WORD = _C1(_Ret); (*# call(reg_param=>(ax),reg_saved=>(bx,cx,dx,si,di,es,ds,st1,st2)) *) INLINE PROCEDURE LOBYTE(lw:WORD):BYTE = _C1(_Ret); (*# call(reg_param=>(ax),reg_saved=>(bx,cx,dx,si,di,es,ds,st1,st2)) *) INLINE PROCEDURE HIBYTE(lw:WORD):BYTE = _C3(86H,0C4H (* xchg al,ah *),_Ret); (*# restore *) (*%E *) (* i_MACROS *) (**) (**--- Win General section 1 -----------------------------------------------*) (**) (*%T i_GEN1*) TYPE MPARAM = LONGCARD; MRESULT = LONGCARD; PFNWP = PROCEDURE(HWND,CARDINAL,MPARAM,MPARAM):MRESULT; CONST HWND_DESKTOP = HWND(1); HWND_OBJECT = HWND(2); HWND_TOP = HWND(3); HWND_BOTTOM = HWND(4); HWND_THREADCAPTURE = HWND(5); (* Standard Window Styles *) WS_VISIBLE = 080000000H; WS_DISABLED = 040000000H; WS_CLIPCHILDREN = 020000000H; WS_CLIPSIBLINGS = 010000000H; WS_PARENTCLIP = 08000000H; WS_SAVEBITS = 04000000H; WS_SYNCPAINT = 02000000H; WS_MINIMIZED = 01000000H; WS_MAXIMIZED = 0800000H; (* Dialog manager styles *) WS_GROUP = 010000H; WS_TABSTOP = 020000H; WS_MULTISELECT = 040000H; (* Class styles *) CS_MOVENOTIFY = 01H; CS_SIZEREDRAW = 04H; CS_HITTEST = 08H; CS_PUBLIC = 010H; CS_FRAME = 020H; CS_CLIPCHILDREN = 020000000H; CS_CLIPSIBLINGS = 010000000H; CS_PARENTCLIP = 08000000H; CS_SAVEBITS = 04000000H; CS_SYNCPAINT = 02000000H; PROCEDURE RegisterClass(h: HAB; c: FarADDRESS; p: PFNWP; l: LONGCARD; e: CARDINAL) : BOOLEAN; PROCEDURE DefWindowProc(h: HWND; m: CARDINAL; p1,p2: MPARAM) : MRESULT; PROCEDURE DestroyWindow(h: HWND) : BOOLEAN; PROCEDURE ShowWindow(h: HWND; v: BOOL) : BOOLEAN; PROCEDURE QueryWindowRect(h: HWND; VAR r: RECTL) : BOOLEAN; PROCEDURE BeginPaint(h: HWND; s:HPS; VAR r: RECTL) : HPS; PROCEDURE EndPaint(h:HPS) : BOOLEAN; PROCEDURE GetPS(h: HWND) : HPS; PROCEDURE GetClipPS(h: HWND; w: HWND; c: CARDINAL) : HPS; PROCEDURE ReleasePS(h:HPS) : BOOLEAN; PROCEDURE OpenWindowDC(h: HWND) : HDC; PROCEDURE ScrollWindow(h: HWND; x,y: INTEGER; VAR s,c: RECTL; u: HRGN; VAR ur: RECTL; o: CARDINAL) : CARDINAL; PROCEDURE IsWindowShowing(h : HWND) : BOOLEAN; CONST (* WinGetClipPS flags *) PSF_LOCKWINDOWUPDATE = 01H; PSF_CLIPUPWARDS = 02H; PSF_CLIPDOWNWARDS = 04H; PSF_CLIPSIBLINGS = 08H; PSF_CLIPCHILDREN = 010H; PSF_PARENTCLIP = 020H; (* WinScrollWindow() flags *) SW_SCROLLCHILDREN = 01H; SW_INVALIDATERGN = 02H; PROCEDURE FillRect(h : HPS; VAR r : RECTL; c: COLOR) : BOOLEAN; (* WinInitialize/WinTerminate Interface declarations *) TYPE QVERSDATA = RECORD environment : CARDINAL; version : CARDINAL; END; CONST QV_OS2 = 00H; QV_CMS = 01H; QV_TSO = 02H; QV_TSOBATCH = 03H; QV_OS400 = 04H; PROCEDURE QueryVersion(h:HAB) : LONGCARD; PROCEDURE Initialize(o:CARDINAL) : HAB; PROCEDURE Terminate(h:HAB) : BOOLEAN; PROCEDURE QueryAnchorBlock(hwnd : LONGCARD) : LONGCARD; PROCEDURE SetActiveWindow(d,w: HWND) : BOOLEAN; PROCEDURE QueryActiveWindow(h: HWND; l: BOOL) : HWND; (*%E*) (**) (**--- Win General section 2 -----------------------------------------------*) (**) (*%T i_GEN2*) PROCEDURE CreateWindow(pa: HWND; c,n: ARRAY OF CHAR; s: LONGCARD; x,y,w,h: INTEGER; o,b: HWND; i: CARDINAL; d,p: FarADDRESS) : HWND; PROCEDURE EnableWindow(h: HWND; e: BOOL) : BOOLEAN; PROCEDURE IsWindowEnabled(h: HWND) : BOOLEAN; PROCEDURE EnableWindowUpdate(h: HWND; v: BOOL) : BOOLEAN; PROCEDURE IsWindowVisible(h: HWND) : BOOLEAN; PROCEDURE QueryWindowText(h: HWND; l: CARDINAL; VAR b: ARRAY OF CHAR) : CARDINAL; PROCEDURE SetWindowText(h: HWND; s: ARRAY OF CHAR) : BOOLEAN; PROCEDURE QueryWindowTextLength(h: HWND) : CARDINAL; PROCEDURE WindowFromID(p: HWND; i: CARDINAL) : HWND; PROCEDURE MultWindowFromIDs(p: HWND; VAR w: HWND; f,l: CARDINAL) : INTEGER; PROCEDURE IsWindow(h:HAB; w: HWND) : BOOLEAN; (* QueryWindow Codes *) TYPE QW = (QW_NEXT, QW_PREV, QW_TOP, QW_BOTTOM, QW_OWNER, QW_PARENT, QW_NEXTTOP, QW_PREVTOP, QW_FRAMEOWNER); PROCEDURE QueryWindow(h: HWND; c: QW; l: BOOL) : HWND; PROCEDURE SetParent(h,p: HWND; r: BOOL) : BOOLEAN; PROCEDURE IsChild(c,p: HWND) : BOOLEAN; PROCEDURE SetOwner(h,o: HWND) : BOOLEAN; PROCEDURE QueryWindowProcess(h: HWND; VAR p: PID; VAR t: TID) : BOOLEAN; PROCEDURE QueryObjectWindow(h: HWND) : HWND; PROCEDURE QueryDesktopWindow(h:HAB; c: HDC) : HWND; TYPE SWP = RECORD options : BITSET; cy : INTEGER; cx : INTEGER; y : INTEGER; x : INTEGER; InsertBehind : HWND; hwnd : HWND; END; PROCEDURE SetWindowPos(h,b: HWND; x,y,cx,cy: INTEGER; s: BITSET) : BOOLEAN; PROCEDURE QueryWindowPos(h: HWND; VAR s: SWP) : BOOLEAN; PROCEDURE SetMultWindowPos(h:HAB; VAR s: ARRAY OF SWP; c: CARDINAL) : BOOLEAN; (* SWP options *) CONST SWP_SIZE = {0}; SWP_MOVE = {1}; SWP_ZORDER = {2}; SWP_SHOW = {3}; SWP_HIDE = {4}; SWP_NOREDRAW = {5}; SWP_NOADJUST = {6}; SWP_ACTIVATE = {7}; SWP_DEACTIVATE = {8}; SWP_EXTSTATECHANGE = {9}; SWP_MINIMIZE = {10}; SWP_MAXIMIZE = {11}; SWP_RESTORE = {12}; SWP_FOCUSACTIVATE = {13}; SWP_FOCUSDEACTIVATE = {14}; (* Values returned from WM_ADJUSTWINDOWPOS and passed to WM_WINDOWPOSCHANGED *) AWP_MINIMIZED = 00010000H; AWP_MAXIMIZED = 00020000H; AWP_RESTORED = 00040000H; AWP_ACTIVATE = 00080000H; AWP_DEACTIVATE = 00100000H; (* Window painting *) PROCEDURE UpdateWindow(h: HWND) : BOOLEAN; PROCEDURE InvalidateRect(h: HWND; VAR p: RECTL; i: BOOL) : BOOLEAN; PROCEDURE InvalidateRegion(h: HWND; r: HRGN; i: BOOL) : BOOLEAN; (* Drawing helpers *) PROCEDURE InvertRect(h:HPS; VAR r: RECTL) : BOOLEAN; PROCEDURE DrawBitmap(h:HPS; bm: HBITMAP; VAR s: RECTL; VAR d: POINTL; f,b: LONGINT; r: BITSET) : BOOLEAN; (* WinDrawBitmap() flags *) CONST DBM_NORMAL = {}; DBM_INVERT = {1}; DBM_HALFTONE = {2}; DBM_STRETCH = {3}; DBM_IMAGEATTRS = {4}; PROCEDURE DrawText(h:HPS; n: INTEGER; t: ARRAY OF CHAR; VAR r: RECTL; f,b: LONGINT; c:BITSET ) : INTEGER; (* DrawText() Codes: From DT_LEFT to DT_EXTERNALLEADING, the codes are designed to be combined with SS_TEXT to create variations of the basic text static item. *) CONST DT_LEFT = {}; DT_EXTERNALLEADING = {7}; DT_CENTER = {8}; DT_RIGHT = {9}; DT_TOP = {}; DT_VCENTER = {10}; DT_BOTTOM = {11}; DT_HALFTONE = {12}; DT_MNEMONIC = {13}; DT_WORDBREAK = {14}; DT_ERASERECT = {15}; DT_QUERYEXTENT = {1}; DT_TEXTATTRS = {6}; PROCEDURE DrawBorder(s:HPS; VAR r: RECTL; h,v: INTEGER; b,i: LONGINT; c: BITSET) : BOOLEAN; (* WinDrawBorder() flags *) CONST DB_PATCOPY = {}; DB_PATINVERT = {0}; DB_DESTINVERT = {1}; DB_AREAMIXMODE = {0,1}; DB_ROP = {0..2}; DB_INTERIOR = {3}; DB_AREAATTRS = {4}; DB_STANDARD = {8}; DB_DLGBORDER = {9}; (* Resource Loading Functions *) PROCEDURE LoadString(h:HAB; r: HMODULE; i,m: CARDINAL; VAR b: ARRAY OF CHAR) : INTEGER; PROCEDURE LoadMessage(h:HAB; m: HMODULE; c: CARDINAL; i: INTEGER; VAR a: ARRAY OF CHAR) : INTEGER; (*?*) (*%E*) (**) (**--- Win General section 3 -----------------------------------------------*) (**) (*%T i_GEN3*) TYPE CREATESTRUCT = RECORD PresParams : FarADDRESS; CtlData : FarADDRESS; id : CARDINAL; InsertBehind : HWND; Owner : HWND; cy,cx,y,x : INTEGER; Style : LONGCARD; Text : FarADDRESS; Class : FarADDRESS; Parent : HWND; END; CLASSINFO = RECORD ClassStyle : LONGCARD; WindowProc : PFNWP; WindowData : CARDINAL; END; PROCEDURE SubclassWindow(h: HWND; p: PFNWP) : PFNWP; PROCEDURE QueryClassName(h: HWND; l: CARDINAL; VAR b: ARRAY OF CHAR) : CARDINAL; PROCEDURE QueryClassInfo(h:HAB; n: FarADDRESS; VAR c: CLASSINFO) : BOOLEAN; PROCEDURE IsThreadActive(h:HAB) : BOOLEAN; PROCEDURE QuerySysModalWindow(h: HWND; l: BOOL) : HWND; PROCEDURE SetSysModalWindow(d: HWND; w: HWND) : BOOLEAN; PROCEDURE LockWindow(h: HWND; l: BOOL) : HWND; PROCEDURE RegisterWindowDestroy(h: HWND; r: BOOL) : BOOLEAN; PROCEDURE QueryWindowLockCount(h: HWND) : INTEGER; PROCEDURE QueryWindowUShort(h: HWND; b: INTEGER) : CARDINAL; PROCEDURE SetWindowUShort(h: HWND; b: INTEGER; d: CARDINAL ) : BOOLEAN; PROCEDURE QueryWindowULong(h: HWND; b: INTEGER) : LONGCARD; PROCEDURE SetWindowULong(h: HWND; b: INTEGER; d: LONGCARD) : BOOLEAN; PROCEDURE QueryWindowPtr(h: HWND; i: CARDINAL) : FarADDRESS; PROCEDURE SetWindowPtr(h: HWND; b: CARDINAL; p: FarADDRESS) : BOOLEAN; PROCEDURE SetWindowBits(h: HWND; b: CARDINAL; d,m: LONGCARD) : BOOLEAN; (* Standard QueryWindowShort/ULong() Indexes *) CONST QWS_USER = 0; QWS_ID = -1; QWS_MIN = -1; QWL_USER = 0; QWL_STYLE = -2; QWP_PFNWP = -3; QWL_HMQ = -4; QWL_MIN = -4; (* WC_FRAME QueryWindowUShort/ULong() Indexes *) QWL_HHEAP = 04H; QWL_HWNDFOCUSSAVE = 018H; QWS_FLAGS = 08H; QWS_RESULT = 0AH; QWS_XRESTORE = 0CH; QWS_YRESTORE = 0EH; QWS_CXRESTORE = 010H; QWS_CYRESTORE = 012H; QWS_XMINIMIZE = 014H; QWS_YMINIMIZE = 016H; (* Window enumeration *) TYPE HENUM = LHANDLE; PROCEDURE BeginEnumWindows(h: HWND) : HENUM; PROCEDURE GetNextWindow(h: HENUM) : HWND; PROCEDURE EndEnumWindows(h: HENUM) : BOOLEAN; PROCEDURE WindowFromPoint(h: HWND; VAR p: POINTL; e,l: BOOL) : HWND; PROCEDURE MapWindowPoints(f,t: HWND; VAR p: POINTL; c: INTEGER) : BOOLEAN; (* More window painting routines *) PROCEDURE ValidateRect(h: HWND; VAR r: RECTL; c: BOOL) : BOOLEAN; PROCEDURE ValidateRegion(h: HWND; r: HRGN; c: BOOL) : BOOLEAN; PROCEDURE WindowFromDC(h:HDC) : HWND; PROCEDURE QueryWindowDC(h: HWND) : HDC; PROCEDURE GetScreenPS(h: HWND) : HPS; PROCEDURE QueryUpdateRect(h: HWND; VAR r: RECTL) : BOOLEAN; PROCEDURE QueryUpdateRegion(h: HWND; r: HRGN) : INTEGER; PROCEDURE ExcludeUpdateRegion(h:HPS; w: HWND) : INTEGER; PROCEDURE LockWindowUpdate(d,l: HWND) : BOOLEAN; PROCEDURE LockVisRegions(h: HWND; l: BOOL) : BOOLEAN; (*%E*) (**) (**--- Win Message Manager Common ------------------------------------------*) (**) (*%T i_MSG1*) TYPE QMSG = RECORD hwnd : HWND; msg : CARDINAL; mp1 : FarADDRESS; mp2 : FarADDRESS; time : LONGCARD; ptl : POINTL; END; HMQ = LHANDLE; CONST WM_NULL = 00H; WM_CREATE = 01H; WM_DESTROY = 02H; WM_OTHERWINDOWDESTROYED = 03H; WM_ENABLE = 04H; WM_SHOW = 05H; WM_MOVE = 06H; WM_SIZE = 07H; WM_ADJUSTWINDOWPOS = 08H; WM_CALCVALIDRECTS = 09H; WM_SETWINDOWPARAMS = 0AH; WM_QUERYWINDOWPARAMS = 0BH; WM_HITTEST = 0CH; WM_ACTIVATE = 0DH; WM_SETFOCUS = 0FH; WM_SETSELECTION = 010H; WM_PPAINT = 011H; WM_PSETFOCUS = 012H; WM_PSYSCOLORCHANGE = 013H; WM_PSIZE = 014H; WM_PACTIVATE = 015H; WM_PCONTROL = 016H; WM_COMMAND = 020H; WM_SYSCOMMAND = 021H; WM_HELP = 022H; WM_PAINT = 023H; WM_TIMER = 024H; WM_SEM1 = 025H; WM_SEM2 = 026H; WM_SEM3 = 027H; WM_SEM4 = 028H; WM_CLOSE = 029H; WM_QUIT = 02AH; WM_SYSCOLORCHANGE = 02BH; WM_SYSVALUECHANGED = 02DH; WM_APPTERMINATENOTIFY = 02EH; WM_PRESPARAMCHANGED = 02FH; (* control Notification Messages *) WM_CONTROL = 030H; WM_VSCROLL = 031H; WM_HSCROLL = 032H; WM_INITMENU = 033H; WM_MENUSELECT = 034H; WM_MENUEND = 035H; WM_DRAWITEM = 036H; WM_MEASUREITEM = 037H; WM_CONTROLPOINTER = 038H; WM_CONTROLHEAP = 039H; WM_QUERYDLGCODE = 03AH; WM_INITDLG = 03BH; WM_SUBSTITUTESTRING = 03CH; WM_MATCHMNEMONIC = 03DH; WM_SAVEAPPLICATION = 03EH; WM_HELPBASE = 0F00H; WM_HELPTOP = 0FFFH; WM_USER = 01000H; (* WM_COMMAND Msg Source Codes *) CMDSRC_PUSHBUTTON = 1; CMDSRC_MENU = 2; CMDSRC_ACCELERATOR = 3; CMDSRC_OTHER = 0; (* The following record is used to access the WM_COMMAND, WM_HELP, and WM_SYSCOMMAND message parameters: *) TYPE COMMANDMSG = RECORD source : CARDINAL; mouse : CARDINAL; cmd : CARDINAL; unused : CARDINAL; END; (*COMMANDMSG*) CONTROLMSG = RECORD controlspec: LONGCARD; id : CARDINAL; notifycode : CARDINAL; END; (*CONTROLMSG*) (* To use COMMANDMSG or CONTROLMSG, assign typecasted mp2 to local variable of type COMMANDMSG i.e. cm := COMMANDMSG(mp2); *) TYPE MQINFO = RECORD cb : CARDINAL; pid : PID; tid : TID; cmsgs : CARDINAL; reserved : FarADDRESS; END; PROCEDURE SendMsg(h: HWND; m: CARDINAL; p1,p2 :MPARAM) : MRESULT; PROCEDURE QueryQueueInfo(h: HMQ; VAR i: MQINFO; c: CARDINAL) : BOOLEAN; PROCEDURE CreateMsgQueue(h:HAB; s: INTEGER) : HMQ; PROCEDURE DestroyMsgQueue(q: HMQ) : BOOLEAN; PROCEDURE CancelShutdown(q: HMQ; always: BOOL) : BOOLEAN; PROCEDURE GetMsg(h:HAB; VAR m: QMSG; w: HWND; f,l: CARDINAL) : BOOLEAN; PROCEDURE DispatchMsg(h:HAB; VAR m: QMSG) : MRESULT; PROCEDURE PostMsg(h: HWND; i: CARDINAL; p1,p2: MPARAM) : BOOLEAN; PROCEDURE RegisterUserMsg(h:HAB; id: CARDINAL; dtype1,dir1,dtype2,dir2,dtyper : INTEGER) : BOOLEAN; PROCEDURE RegisterUserDatatype(h:HAB; d: INTEGER; c: INTEGER; VAR t : INTEGER) : BOOLEAN; PROCEDURE SetMsgMode(h:HAB; c: ARRAY OF CHAR; ctrl: INTEGER) : BOOLEAN; PROCEDURE SetSynchroMode(h:HAB; m: INTEGER) : BOOLEAN; (* PeekMsg() Constants *) TYPE WPM = (PM_NO_REMOVE,PM_REMOVE); PROCEDURE PeekMsg(h:HAB; VAR m: QMSG; w: HWND; f,l: CARDINAL; o : WPM) : BOOLEAN; (* WinRegisterUserMsg direction codes *) CONST RUM_IN = 1; RUM_OUT = 2; RUM_INOUT = 3; (* WinSetMsgMode constants *) SMD_DELAYED = 01H; SMD_IMMEDIATE = 02H; (* WinSetSynchroMode constants *) SSM_SYNCHRONOUS = 01H; SSM_ASYNCHRONOUS = 02H; SSM_MIXED = 03H; (*%E*) (**) (**--- WinRegisterUserDatatype types ---------------------------------------*) (**) (*%T i_DTYPES*) CONST DTYP_USER = 16384; DTYP_CTL_ARRAY = 1; DTYP_CTL_PARRAY = -1; DTYP_CTL_OFFSET = 2; DTYP_CTL_LENGTH = 3; DTYP_ACCEL = 28; DTYP_ACCELTABLE = 29; DTYP_ARCPARAMS = 38; DTYP_AREABUNDLE = 139; DTYP_ATOM = 90; DTYP_BITMAPINFO = 60; DTYP_BITMAPINFOHEADER = 61; DTYP_BIT16 = 20; DTYP_BIT32 = 21; DTYP_BIT8 = 19; DTYP_BOOL = 18; DTYP_BTNCDATA = 35; DTYP_BYTE = 13; DTYP_CATCHBUF = 141; DTYP_CHAR = 15; DTYP_CHARBUNDLE = 135; DTYP_CLASSINFO = 95; DTYP_COUNT2 = 93; DTYP_COUNT2B = 70; DTYP_COUNT2CH = 82; DTYP_COUNT4 = 152; DTYP_COUNT4B = 42; DTYP_CPID = 57; DTYP_CREATESTRUCT = 98; DTYP_CURSORINFO = 34; DTYP_DEVOPENSTRUC = 124; DTYP_DLGTEMPLATE = 96; DTYP_DLGTITEM = 97; DTYP_ENTRYFDATA = 127; DTYP_ERRORID = 45; DTYP_FATTRS = 75; DTYP_FFDESCS = 142; DTYP_FIXED = 99; DTYP_FONTMETRICS = 74; DTYP_FRAMECDATA = 144; DTYP_GRADIENTL = 48; DTYP_HAB = 10; DTYP_HACCEL = 30; DTYP_HAPP = 146; DTYP_HATOMTBL = 91; DTYP_HBITMAP = 62; DTYP_HCINFO = 46; DTYP_HDC = 132; DTYP_HENUM = 117; DTYP_HHEAP = 109; DTYP_HINI = 53; DTYP_HLIB = 147; DTYP_HMF = 85; DTYP_HMQ = 86; DTYP_HPOINTER = 106; DTYP_HPROGRAM = 131; DTYP_HPS = 12; DTYP_HRGN = 116; DTYP_HSEM = 140; DTYP_HSPL = 32; DTYP_HSWITCH = 66; DTYP_HVPS = 58; DTYP_HWND = 11; DTYP_IDENTITY = 133; DTYP_IDENTITY4 = 169; DTYP_IMAGEBUNDLE = 136; DTYP_INDEX2 = 81; DTYP_IPT = 155; DTYP_KERNINGPAIRS = 118; DTYP_LENGTH2 = 68; DTYP_LENGTH4 = 69; DTYP_LINEBUNDLE = 137; DTYP_LONG = 25; DTYP_MARKERBUNDLE = 138; DTYP_MATRIXLF = 113; DTYP_MLECTLDATA = 161; DTYP_MLEMARGSTRUCT = 157; DTYP_MLEOVERFLOW = 158; DTYP_OFFSET2B = 112; DTYP_OWNERITEM = 154; DTYP_PID = 92; DTYP_PIX = 156; DTYP_POINTERINFO = 105; DTYP_POINTL = 77; DTYP_PROGCATEGORY = 129; DTYP_PROGRAMENTRY = 128; DTYP_PROGTYPE = 130; DTYP_PROPERTY2 = 88; DTYP_PROPERTY4 = 89; DTYP_QMSG = 87; DTYP_RECTL = 121; DTYP_RESID = 125; DTYP_RGB = 111; DTYP_RGNRECT = 115; DTYP_SBCDATA = 159; DTYP_SEGOFF = 126; DTYP_SHORT = 23; DTYP_SIZEF = 101; DTYP_SIZEL = 102; DTYP_STRL = 17; DTYP_STR16 = 40; DTYP_STR32 = 37; DTYP_STR64 = 47; DTYP_STR8 = 33; DTYP_SWBLOCK = 63; DTYP_SWCNTRL = 64; DTYP_SWENTRY = 65; DTYP_SWP = 31; DTYP_TID = 104; DTYP_TIME = 107; DTYP_TRACKINFO = 73; DTYP_UCHAR = 22; DTYP_ULONG = 26; DTYP_USERBUTTON = 36; DTYP_USHORT = 24; DTYP_WIDTH4 = 108; DTYP_WNDPARAMS = 83; DTYP_WNDPROC = 84; DTYP_WPOINT = 59; DTYP_WRECT = 55; DTYP_XYWINSIZE = 52; DTYP_PACCEL = -28; DTYP_PACCELTABLE = -29; DTYP_PARCPARAMS = -38; DTYP_PAREABUNDLE = -139; DTYP_PATOM = -90; DTYP_PBITMAPINFO = -60; DTYP_PBITMAPINFOHEADER = -61; DTYP_PBIT16 = -20; DTYP_PBIT32 = -21; DTYP_PBIT8 = -19; DTYP_PBOOL = -18; DTYP_PBTNCDATA = -35; DTYP_PBYTE = -13; DTYP_PCATCHBUF = -141; DTYP_PCHAR = -15; DTYP_PCHARBUNDLE = -135; DTYP_PCLASSINFO = -95; DTYP_PCOUNT2 = -93; DTYP_PCOUNT2B = -70; DTYP_PCOUNT2CH = -82; DTYP_PCOUNT4 = -152; DTYP_PCOUNT4B = -42; DTYP_PCPID = -57; DTYP_PCREATESTRUCT = -98; DTYP_PCURSORINFO = -34; DTYP_PDEVOPENSTRUC = -124; DTYP_PDLGTEMPLATE = -96; DTYP_PDLGTITEM = -97; DTYP_PENTRYFDATA = -127; DTYP_PERRORID = -45; DTYP_PFATTRS = -75; DTYP_PFFDESCS = -142; DTYP_PFIXED = -99; DTYP_PFONTMETRICS = -74; DTYP_PFRAMECDATA = -144; DTYP_PGRADIENTL = -48; DTYP_PHAB = -10; DTYP_PHACCEL = -30; DTYP_PHAPP = -146; DTYP_PHATOMTBL = -91; DTYP_PHBITMAP = -62; DTYP_PHCINFO = -46; DTYP_PHDC = -132; DTYP_PHENUM = -117; DTYP_PHHEAP = -109; DTYP_PHINI = -53; DTYP_PHLIB = -147; DTYP_PHMF = -85; DTYP_PHMQ = -86; DTYP_PHPOINTER = -106; DTYP_PHPROGRAM = -131; DTYP_PHPS = -12; DTYP_PHRGN = -116; DTYP_PHSEM = -140; DTYP_PHSPL = -32; DTYP_PHSWITCH = -66; DTYP_PHVPS = -58; DTYP_PHWND = -11; DTYP_PIDENTITY = -133; DTYP_PIDENTITY4 = -169; DTYP_PIMAGEBUNDLE = -136; DTYP_PINDEX2 = -81; DTYP_PIPT = -155; DTYP_PKERNINGPAIRS = -118; DTYP_PLENGTH2 = -68; DTYP_PLENGTH4 = -69; DTYP_PLINEBUNDLE = -137; DTYP_PLONG = -25; DTYP_PMARKERBUNDLE = -138; DTYP_PMATRIXLF = -113; DTYP_PMLECTLDATA = -161; DTYP_PMLEMARGSTRUCT = -157; DTYP_PMLEOVERFLOW = -158; DTYP_POFFSET2B = -112; DTYP_POWNERITEM = -154; DTYP_PPID = -92; DTYP_PPIX = -156; DTYP_PPOINTERINFO = -105; DTYP_PPOINTL = -77; DTYP_PPROGCATEGORY = -129; DTYP_PPROGRAMENTRY = -128; DTYP_PPROGTYPE = -130; DTYP_PPROPERTY2 = -88; DTYP_PPROPERTY4 = -89; DTYP_PQMSG = -87; DTYP_PRECTL = -121; DTYP_PRESID = -125; DTYP_PRGB = -111; DTYP_PRGNRECT = -115; DTYP_PSBCDATA = -159; DTYP_PSEGOFF = -126; DTYP_PSHORT = -23; DTYP_PSIZEF = -101; DTYP_PSIZEL = -102; DTYP_PSTRL = -17; DTYP_PSTR16 = -40; DTYP_PSTR32 = -37; DTYP_PSTR64 = -47; DTYP_PSTR8 = -33; DTYP_PSWBLOCK = -63; DTYP_PSWCNTRL = -64; DTYP_PSWENTRY = -65; DTYP_PSWP = -31; DTYP_PTID = -104; DTYP_PTIME = -107; DTYP_PTRACKINFO = -73; DTYP_PUCHAR = -22; DTYP_PULONG = -26; DTYP_PUSERBUTTON = -36; DTYP_PUSHORT = -24; DTYP_PWIDTH4 = -108; DTYP_PWNDPARAMS = -83; DTYP_PWNDPROC = -84; DTYP_PWPOINT = -59; DTYP_PWRECT = -55; DTYP_PXYWINSIZE = -52; (*%E*) (**) (**--- Win Message Manager Uncommon ----------------------------------------*) (**) (*%T i_MSG2*) (* WM_CALCVALIDRECTS Return Flags *) CONST CVR_ALIGNLEFT = 01H; CVR_ALIGNBOTTOM = 02H; CVR_ALIGNRIGHT = 04H; CVR_ALIGNTOP = 08H; CVR_REDRAW = 010H; (* WM_HITTEST Return Codes *) HT_NORMAL = 0; HT_TRANSPARENT = -1; HT_DISCARD = -2; HT_ERROR = -3; (* WM_SET/QUERYWINDOWPARAMS Structure and Flags *) TYPE WNDPARAMS = RECORD Status : CARDINAL; CText : CARDINAL; Text : FarADDRESS; CPresParams : CARDINAL; PresParams : FarADDRESS; CCtlData : CARDINAL; CtlData : FarADDRESS; END; (* Flags used by WM_SET/QUERYWINDOWPARAMS *) CONST WPM_TEXT = 01H; WPM_CTLDATA = 02H; WPM_PRESPARAMS = 04H; WPM_CCHTEXT = 08H; WPM_CBCTLDATA = 010H; WPM_CBPRESPARAMS = 020H; PROCEDURE InSendMsg(h:HAB) : BOOLEAN; PROCEDURE BroadcastMsg(h: HWND; id: CARDINAL; p1,p2: MPARAM; c:BITSET) : BOOLEAN; (* WinBroadcastMsg codes *) CONST BMSG_POST = {}; BMSG_SEND = {0}; BMSG_POSTQUEUE = {1}; BMSG_DESCENDANTS = {2}; BMSG_FRAMEONLY = {3}; PROCEDURE WaitMsg(h:HAB; f,l: CARDINAL) : BOOLEAN; PROCEDURE QueryQueueStatus(h: HWND) : LONGCARD; (* QueryQueueStatus() Constants *) CONST QS_KEY = 01H; QS_MOUSEBUTTON = 02H; QS_MOUSEMOVE = 04H; QS_MOUSE = 06H; QS_TIMER = 08H; QS_PAINT = 010H; QS_POSTMSG = 020H; QS_SEM1 = 040H; QS_SEM2 = 080H; QS_SEM3 = 0100H; QS_SEM4 = 0200H; QS_SENDMSG = 0400H; PROCEDURE PostQueueMsg(q: FarADDRESS; i: CARDINAL; mp1,mp2: MPARAM) : BOOLEAN; PROCEDURE QueryMsgPos(h:HAB; VAR p: POINTL) : BOOLEAN; PROCEDURE QueryMsgTime(h:HAB) : LONGCARD; PROCEDURE MsgSemWait(h:HSEM; t: LONGINT) : CARDINAL; PROCEDURE MsgMuxSemWait(VAR i: CARDINAL; l: FarADDRESS; t: LONGINT) : CARDINAL; (*SetMsgInterest()/ SetClassMsgInterest() Constants *) CONST SMIM_ALL = 0EFFH; SMI_NOINTEREST = {0}; SMI_INTEREST = {1}; SMI_RESET = {2}; SMI_AUTODISPATCH = {3}; PROCEDURE SetMsgInterest(h: HWND; m: CARDINAL; c: BITSET) : BOOLEAN; PROCEDURE SetClassMsgInterest(h:HAB; VAR s: ARRAY OF CHAR; c: CARDINAL; i: INTEGER) : BOOLEAN; (*%E*) (**) (**--- Win Keyboard and Mouse ----------------------------------------------*) (**) (*%T i_KBDMOU*) (*** Keyboard and Mouse Input COMMON Subsection ***) PROCEDURE SetFocus(d,f: HWND) : BOOLEAN; PROCEDURE FocusChange(d,n: HWND; c: BITSET) : BOOLEAN; CONST FC_NOSETFOCUS = {0}; FC_NOLOSEFOCUS = {1}; FC_NOSETACTIVE = {2}; FC_NOLOSEACTIVE = {3}; FC_NOSETSELECTION = {4}; FC_NOLOSESELECTION = {5}; QFC_NEXTINCHAIN = 1; QFC_ACTIVE = 2; QFC_FRAME = 3; QFC_SELECTACTIVE = 4; PROCEDURE SetCapture(d,w: HWND) : BOOLEAN; PROCEDURE QueryCapture(h: HWND; l: BOOL) : HWND; (* Mouse input messages *) CONST WM_MOUSEFIRST = 070H; WM_MOUSELAST = 079H; WM_BUTTONCLICKFIRST = 071H; WM_BUTTONCLICKLAST = 079H; WM_MOUSEMOVE = 070H; WM_BUTTON1DOWN = 071H; WM_BUTTON1UP = 072H; WM_BUTTON1DBLCLK = 073H; WM_BUTTON2DOWN = 074H; WM_BUTTON2UP = 075H; WM_BUTTON2DBLCLK = 076H; WM_BUTTON3DOWN = 077H; WM_BUTTON3UP = 078H; WM_BUTTON3DBLCLK = 079H; PROCEDURE QueryFocus(h: HWND; l: BOOL) : HWND; (* Key/Character Input Msg *) CONST WM_CHAR = 07AH; WM_VIOCHAR = 07BH; (* CHARMSG flags *) KC_CHAR = {0}; KC_VIRTUALKEY = {1}; KC_SCANCODE = {2}; KC_SHIFT = {3}; KC_CTRL = {4}; KC_ALT = {5}; KC_KEYUP = {6}; KC_PREVDOWN = {7}; KC_LONEKEY = {8}; KC_DEADKEY = {9}; KC_COMPOSITE = {10}; KC_INVALIDCOMP = {11}; KC_TOGGLE = {12}; KC_INVALIDCHAR = {13}; KC_DBCSRSRVD1 = {14}; KC_DBCSRSRVD2 = {15}; TYPE MOUSEMSG = RECORD codeHitTest : CARDINAL; unused : CARDINAL; x,y : INTEGER; END; (* To use MOUSEMSG, assign typecasted mp2 to local variable of type MOUSEMSG i.e. mm := MOUSEMSG(mp2); *) (*** Virtual Key values *) TYPE VK = (VK_NULL, VK_BUTTON1, VK_BUTTON2, VK_BUTTON3, VK_BREAK, VK_BACKSPACE, VK_TAB, VK_BACKTAB, VK_NEWLINE, VK_SHIFT, VK_CTRL, VK_ALT, VK_ALTGRAF, VK_PAUSE, VK_CAPSLOCK, VK_ESC, VK_SPACE, VK_PAGEUP, VK_PAGEDOWN, VK_END, VK_HOME , VK_LEFT , VK_UP , VK_RIGHT, VK_DOWN, VK_PRINTSCRN, VK_INSERT, VK_DELETE, VK_SCRLLOCK, VK_NUMLOCK, VK_ENTER, VK_SYSRQ , VK_F1, VK_F2, VK_F3, VK_F4, VK_F5, VK_F6, VK_F7, VK_F8, VK_F9, VK_F10, VK_F11, VK_F12, VK_F13, VK_F14, VK_F15, VK_F16, VK_F17, VK_F18, VK_F19, VK_F20, VK_F21, VK_F22, VK_F23, VK_F24); CONST VK_MENU = VK_F10; TYPE CHARMSG = RECORD chr : CARDINAL; vkey : VK; flags : BITSET; cRepeat : SHORTCARD; scancode : SHORTCARD; END; PCHARMSG = POINTER TO CHARMSG; (* To use CHARMSG, assign typecasted mp2 to local variable of type CHARMSG i.e. cm := CHARMSG(mp2); *) TYPE KEYSTATETABLE = ARRAY[0..255] OF SHORTCARD; PROCEDURE GetKeyState(h: HWND; k:VK) : INTEGER; PROCEDURE GetPhysKeyState(h: HWND; sc: CARDINAL) : INTEGER; PROCEDURE EnablePhysInput(h: HWND; e: BOOL) : BOOLEAN; PROCEDURE IsPhysInputEnabled(h: HWND) : BOOLEAN; PROCEDURE SetKeyboardStateTable(h: HWND; VAR k:KEYSTATETABLE; s: BOOL) : BOOLEAN; CONST (* Journal Notification messages *) WM_JOURNALNOTIFY = 07CH; (* valid commands (lParm1) for journal notify message *) JRN_QUEUESTATUS = 01H; JRN_PHYSKEYSTATE = 02H; (*%E*) (**) (**--- Win Dialog Manager Common -------------------------------------------*) (**) (*%T i_DIALOG1*) PROCEDURE GetDlgMsg(h: HWND; VAR q: QMSG) : BOOLEAN; PROCEDURE LoadDlg(p,o: HWND; d: PFNWP; r: HMODULE; i: CARDINAL; v: FarADDRESS) : HWND; PROCEDURE DlgBox(p,o: HWND; d: PFNWP; r: HMODULE; i: CARDINAL; k: FarADDRESS) : CARDINAL; PROCEDURE DismissDlg(h: HWND; r: CARDINAL) : BOOLEAN; PROCEDURE SetDlgItemShort(h:HWND;i:CARDINAL;v:INTEGER;s:BOOL):BOOLEAN; PROCEDURE QueryDlgItemShort(h: HWND; i: CARDINAL; VAR r: INTEGER; s: BOOL) : BOOLEAN; PROCEDURE SetDlgItemText(h: HWND; i: CARDINAL; t: ARRAY OF CHAR) : BOOLEAN; PROCEDURE QueryDlgItemText(h: HWND; i,m: CARDINAL; VAR t: ARRAY OF CHAR) : CARDINAL; PROCEDURE QueryDlgItemTextLength(h: HWND; i: CARDINAL) : INTEGER; PROCEDURE DefDlgProc(h: HWND; m: CARDINAL; p1,p2: MPARAM) : MRESULT; (* Special Item IDs *) CONST DID_OK = 1; DID_CANCEL = 2; DID_ERROR = 0FFFFH; TYPE WA = (WA_WARNING,WA_NOTE,WA_ERROR,WA_CWINALARMS); PROCEDURE Alarm(h: HWND; w: WA) : BOOLEAN; TYPE (* Message Box return codes *) MBID = (MBID_NULL, MBID_OK, MBID_CANCEL, MBID_ABORT, MBID_RETRY, MBID_IGNORE, MBID_YES, MBID_NO, MBID_HELP, MBID_ENTER ); CONST MBID_ERROR = MBID(0FFFFH); PROCEDURE MessageBox(p,o: HWND; s,t: ARRAY OF CHAR; i: CARDINAL; op: BITSET) : MBID; (* Message Box types *) CONST MB_OK = {}; MB_OKCANCEL = {0}; MB_RETRYCANCEL = {1}; MB_ABORTRETRYIGNORE = {0,1}; MB_YESNO = {2}; MB_YESNOCANCEL = {0,2}; MB_CANCEL = {1,2}; MB_ENTER = {0,1,2}; MB_ENTERCANCEL = {3}; MB_NOICON = {}; MB_CUANOTIFICATION = {}; MB_ICONQUESTION = {4}; MB_ICONEXCLAMATION = {5}; MB_CUAWARNING = {5}; MB_ICONASTERISK = {4,5}; MB_ICONHAND = {6}; MB_CUACRITICAL = {6}; MB_QUERY = MB_ICONQUESTION; MB_WARNING = MB_CUAWARNING; MB_INFORMATION = MB_ICONASTERISK; MB_CRITICAL = MB_CUACRITICAL; MB_ERROR = MB_CRITICAL; MB_DEFBUTTON1 = {}; MB_DEFBUTTON2 = {8}; MB_DEFBUTTON3 = {9}; MB_APPLMODAL = {}; MB_SYSTEMMODAL = {12}; MB_HELP = {13}; MB_MOVEABLE = {14}; (*%E*) (**) (**--- Win Dialog Manager Uncommon -----------------------------------------*) (**) (*%T i_DIALOG2*) CONST (* Dialog codes: returned by WM_QUERYDLGCODE *) DLGC_ENTRYFIELD = 01H; DLGC_BUTTON = 02H; DLGC_RADIOBUTTON = 04H; DLGC_STATIC = 08H; DLGC_DEFAULT = 010H; DLGC_PUSHBUTTON = 020H; DLGC_CHECKBOX = 040H; DLGC_SCROLLBAR = 080H; DLGC_MENU = 0100H; DLGC_TABONCLICK = 0200H; DLGC_MLE = 0400H; (* Multiple Line Entry *) PROCEDURE ProcessDlg(h: HWND) : CARDINAL; PROCEDURE StartDlg(h: HWND) : CARDINAL; PROCEDURE SendDlgItemMsg(h: HWND; i,m: CARDINAL; p1,p2:MPARAM) : MRESULT; PROCEDURE MapDlgPoints(d: HWND; VAR p: POINTL; c: CARDINAL; o: BOOL) : BOOLEAN; PROCEDURE SubstituteStrings(h: HWND; s: ARRAY OF CHAR; m: CARDINAL; VAR d: ARRAY OF CHAR) : CARDINAL; (* EnumDlgItem() Constants *) TYPE EDI = (EDI_FIRSTTABITEM, EDI_LASTTABITEM, EDI_NEXTTABITEM, EDI_PREVTABITEM, EDI_FIRSTGROUPITEM, EDI_LASTGROUPITEM, EDI_NEXTGROUPITEM, EDI_PREVGROUPITEM); PROCEDURE EnumDlgItem(d,h: HWND; c: EDI; l: BOOL) : HWND; TYPE (* Variable-sized dialog template items *) DLGTITEM = RECORD ItemStatus : CARDINAL; Children : CARDINAL; CClassName : CARDINAL; ClassName : CARDINAL; CText : CARDINAL; Text : CARDINAL; Style : LONGCARD; x,y,cx,cy : INTEGER; id : CARDINAL; PresParams : CARDINAL; CtlData : CARDINAL; END; DLGTEMPLATE = RECORD CTemplate : CARDINAL; type : CARDINAL; codepage : CARDINAL; offdlgti : CARDINAL; TemplateStatus : CARDINAL; ItemFocus : CARDINAL; PresParams : CARDINAL; dlgti : ARRAY [0..0] OF DLGTITEM; END; PROCEDURE CreateDlg(p,o: HWND; d: PFNWP; VAR t: DLGTEMPLATE; r: FarADDRESS) : HWND; (*%E*) (**) (**--- Win Static Control Manager ------------------------------------------*) (**) (*%T i_STATIC*) CONST (* Static control styles * * NOTE: the top 9 bits of the LOWORD of the window flStyle are used for * DT_* flags. The lower 7 bits are for SS_* styles. This gives us up * to 128 distinct static control types (we currently use 11 of them). *) SS_TEXT = 01H; SS_GROUPBOX = 02H; SS_ICON = 03H; SS_BITMAP = 04H; SS_FGNDRECT = 05H; SS_HALFTONERECT = 06H; SS_BKGNDRECT = 07H; SS_FGNDFRAME = 08H; SS_HALFTONEFRAME = 09H; SS_BKGNDFRAME = 0AH; SS_SYSICON = 0BH; (* Static control class name *) WC_STATIC = FarADDRESS(0FFFF0005H); (* Static control messages *) SM_SETHANDLE = 0100H; SM_QUERYHANDLE = 0101H; (*%E*) (**) (**--- Win Button Control Manager ------------------------------------------*) (**) (*%T i_BUTTON*) (* Button control styles *) CONST BS_PUSHBUTTON = 0; BS_CHECKBOX = 1; BS_AUTOCHECKBOX = 2; BS_RADIOBUTTON = 3; BS_AUTORADIOBUTTON = 4; BS_3STATE = 5; BS_AUTO3STATE = 6; BS_USERBUTTON = 7; BS_HELP = 0100H; BS_SYSCOMMAND = 0200H; BS_DEFAULT = 0400H; BS_NOPOINTERFOCUS = 0800H; BS_NOBORDER = 01000H; BS_NOCURSORSELECT = 02000H; (* Button class name *) WC_BUTTON = FarADDRESS(0FFFF0003H); TYPE BTNCDATA = RECORD cb : CARDINAL; CheckState : CARDINAL; HiliteState : CARDINAL; END; USERBUTTON = RECORD hwnd : HWND; hps : HPS; State : CARDINAL; StateOld : CARDINAL; END; (* Button control messages *) CONST BM_CLICK = 0120H; BM_QUERYCHECKINDEX = 0121H; BM_QUERYHILITE = 0122H; BM_SETHILITE = 0123H; BM_QUERYCHECK = 0124H; BM_SETCHECK = 0125H; BM_SETDEFAULT = 0126H; (* Button notification codes *) BN_CLICKED = 1; BN_DBLCLICKED = 2; BN_PAINT = 3; (* BN_PAINT button draw state codes *) BDS_HILITED = 0100H; BDS_DISABLED = 0200H; BDS_DEFAULT = 0400H; (*%E*) (**) (**--- Entry Fields ------------------------------------------------------*) (**) (*%T i_ENTRY*) (* Entryfield controls *) CONST ES_LEFT = 00H; ES_CENTER = 01H; ES_RIGHT = 02H; ES_AUTOSCROLL = 04H; ES_MARGIN = 08H; ES_AUTOTAB = 0010H; ES_READONLY = 0020H; ES_COMMAND = 0040H; ES_UNREADABLE = 0080H; ES_PICTUREMASK= 0100H; ES_ANY = 00000H; ES_SBCS = 01000H; ES_DBCS = 02000H; ES_MIXED = 03000H; WC_COMBOBOX = FarADDRESS(0FFFF0002H); (* combo box styles *) CBS_SIMPLE = 01H; CBS_DROPDOWN = 02H; CBS_DROPDOWNLIST = 04H; CBM_SHOWLIST = 0170H; CBM_HILITE = 0171H; CBM_ISLISTSHOWING = 0172H; CBN_EFCHANGE = 1; CBN_EFSCROLL = 2; CBN_MEMERROR = 3; CBN_LBSELECT = 4; CBN_LBSCROLL = 5; CBN_SHOWLIST = 6; CBN_ENTER = 7; WC_ENTRYFIELD = FarADDRESS(0FFFF0006H); TYPE ENTRYFDATA = RECORD cb : CARDINAL; EditLimit : CARDINAL; MinSel : CARDINAL; MaxSel : CARDINAL; END; (* Entry Field messages *) CONST EM_QUERYCHANGED = 0140H; EM_QUERYSEL = 0141H; EM_SETSEL = 0142H; EM_SETTEXTLIMIT = 0143H; EM_CUT = 0144H; EM_COPY = 0145H; EM_CLEAR = 0146H; EM_PASTE = 0147H; EM_QUERYFIRSTCHAR = 0148H; EM_SETFIRSTCHAR = 0149H; EM_QUERYREADONLY = 014AH; EM_SETREADONLY = 014BH; EM_SETINSERTMODE = 014CH; (* Entry Field notification messages *) EN_SETFOCUS = 01H; EN_KILLFOCUS = 02H; EN_CHANGE = 04H; EN_SCROLL = 08H; EN_MEMERROR = 010H; EN_OVERFLOW = 020H; EN_INSERTMODETOGGLE = 040H; (*%E*) (**) (**--- Multiple Line Entry Fields------------------------------------------*) (**) (*%T i_MLENTRY*) (* MLE Window styles ( in addition to WS_* ) *) CONST MLS_WORDWRAP = 01H; MLS_BORDER = 02H; MLS_VSCROLL = 04H; MLS_HSCROLL = 08H; MLS_READONLY = 010H; MLS_IGNORETAB = 020H; (* MLE External Data Types *) TYPE IPT = LONGINT; (* Insertion point *) PIX = LONGINT; (* Pixel *) LINE = LONGCARD; (* Line number *) MLEFORMATRECT = RECORD (* MLEFRD format rectangle data *) cxFormat : LONGINT; (* format rectangle width *) cyFormat : LONGINT; (* format rectangle height *) END; MLECTLDATA = RECORD (* MLECTL control data *) CtlData : CARDINAL; (* Length of the MLECTLDATA structure *) IEFormat : CARDINAL; (* import/export format *) cchText : LONGCARD; (* text limit *) iptAnchor : IPT; (* beginning of selection *) iptCursor : IPT; (* ending of selection *) cxFormat : LONGINT; (* format rectangle width *) cyFormat : LONGINT; (* format rectangle height *) FormatFlags : LONGCARD; (* formatting rectangle flags *) END; CONST (* FormatFlags mask *) MLFFMTRECT_LIMITHORZ = 01H; MLFFMTRECT_LIMITVERT = 02H; MLFFMTRECT_MATCHWINDOW = 04H; MLFFMTRECT_FORMATRECT = 07H; (* IEFormat - Import/Export Format flags *) MLFIE_CFTEXT = 0; MLFIE_NOTRANS = 1; MLFIE_WINFMT = 2; MLFIE_RTF = 3; (* MLN_OVERFLOW structure *) TYPE MLEOVERFLOW = RECORD (* overflow structure *) afErrInd : LONGCARD; (* see mask below *) nBytesOver : LONGINT; (* bytes overflowed *) pixHorzOver : LONGINT; (* pixels horizontally overflowed *) pixVertOver : LONGINT; (* pixels vertically overflowed *) END; (* ErrInd - error format rectangle flags *) CONST MLFEFR_RESIZE = 01H; MLFEFR_TABSTOP = 02H; MLFEFR_FONT = 04H; MLFEFR_TEXT = 08H; MLFEFR_WORDWRAP = 010H; MLFETL_TEXTBYTES = 020H; TYPE (* MLN_MARGIN structure *) MLEMARGSTRUCT = RECORD (* margin structure *) afMargins : CARDINAL; (* margin indicator *) usMouMsg : CARDINAL; (* mouse message *) iptNear : IPT; (* geometrically nearest insertion point *) END; CONST (* afFlags - margin notification indicators *) MLFMARGIN_LEFT = 01H; MLFMARGIN_BOTTOM = 02H; MLFMARGIN_RIGHT = 03H; MLFMARGIN_TOP = 04H; (* MLM_QUERYSELECTION flags *) MLFQS_MINMAXSEL = 0; MLFQS_MINSEL = 1; MLFQS_MAXSEL = 2; MLFQS_ANCHORSEL = 3; MLFQS_CURSORSEL = 4; (* MLN_CLPBDFAIL flags *) MLFCLPBD_TOOMUCHTEXT = 01H; MLFCLPBD_ERROR = 02H; TYPE (* MLM_SEARCH structure *) MLE_SEARCHDATA = RECORD (* search structure *) cb : CARDINAL; (* size of search spec structure *) Find : FarADDRESS; (* string to search for *) Replace : FarADDRESS; (* string to replace with *) cFind : INTEGER; (* length of pchFindString *) cReplace : INTEGER; (* length of replace string *) iptStart : IPT; (* point at which to start search *) (* (negative indicates cursor pt) *) (* becomes pt where string found *) iptStop : IPT; (* point at which to stop search *) (* (negative indicates EOT) *) cchFound : CARDINAL; (* Length of found string *) END; CONST (* MLM_SEARCH style flags *) MLFSEARCH_CASESENSITIVE = 01H; MLFSEARCH_SELECTMATCH = 02H; MLFSEARCH_CHANGEALL = 04H; (* MLE messages - MLM from 0x01b0 to 0x01de; MLN from 0x0001 to 0x000f *) (* formatting messages *) MLM_SETTEXTLIMIT = 01B0H; MLM_QUERYTEXTLIMIT = 01B1H; MLM_SETFORMATRECT = 01B2H; MLM_QUERYFORMATRECT = 01B3H; MLM_SETWRAP = 01B4H; MLM_QUERYWRAP = 01B5H; MLM_SETTABSTOP = 01B6H; MLM_QUERYTABSTOP = 01B7H; MLM_SETREADONLY = 01B8H; MLM_QUERYREADONLY = 01B9H; (* text content manipulation and queries messages *) MLM_QUERYCHANGED = 01BAH; MLM_SETCHANGED = 01BBH; MLM_QUERYLINECOUNT = 01BCH; MLM_CHARFROMLINE = 01BDH; MLM_LINEFROMCHAR = 01BEH; MLM_QUERYLINELENGTH = 01BFH; MLM_QUERYTEXTLENGTH = 01C0H; (* text import and export messages *) MLM_FORMAT = 01C1H; MLM_SETIMPORTEXPORT = 01C2H; MLM_IMPORT = 01C3H; MLM_EXPORT = 01C4H; MLM_DELETE = 01C6H; MLM_QUERYFORMATLINELENGTH = 01C7H; MLM_QUERYFORMATTEXTLENGTH = 01C8H; MLM_INSERT = 01C9H; (* selection messages *) MLM_SETSEL = 01CAH; MLM_QUERYSEL = 01CBH; MLM_QUERYSELTEXT = 01CCH; (* undo and redo messages *) MLM_QUERYUNDO = 01CDH; MLM_UNDO = 01CEH; MLM_RESETUNDO = 01CFH; (* text attributes messages *) MLM_QUERYFONT = 01D0H; MLM_SETFONT = 01D1H; MLM_SETTEXTCOLOR = 01D2H; MLM_QUERYTEXTCOLOR = 01D3H; MLM_SETBACKCOLOR = 01D4H; MLM_QUERYBACKCOLOR = 01D5H; (* scrolling messages *) MLM_QUERYFIRSTCHAR = 01D6H; MLM_SETFIRSTCHAR = 01D7H; (* clipboard messages *) MLM_CUT = 01D8H; MLM_COPY = 01D9H; MLM_PASTE = 01DAH; MLM_CLEAR = 01DBH; (* display manipulation messages *) MLM_ENABLEREFRESH = 01DCH; MLM_DISABLEREFRESH = 01DDH; (* search message *) MLM_SEARCH = 01DEH; MLM_QUERYIMPORTEXPORT = 01DFH; (* notification messages *) MLN_OVERFLOW = 01H; MLN_PIXHORZOVERFLOW = 02H; MLN_PIXVERTOVERFLOW = 03H; MLN_TEXTOVERFLOW = 04H; MLN_VSCROLL = 05H; MLN_HSCROLL = 06H; MLN_CHANGE = 07H; MLN_SETFOCUS = 08H; MLN_KILLFOCUS = 09H; MLN_MARGIN = 0AH; MLN_SEARCHPAUSE = 0BH; MLN_MEMERROR = 0CH; MLN_UNDOOVERFLOW = 0DH; MLN_CLPBDFAIL = 0FH; (*%E*) (**) (**--- List box controls ------------------------------------------*) (**) (*%T i_LIST*) CONST (* List Box styles *) LS_MULTIPLESEL = 01H; LS_OWNERDRAW = 02H; LS_NOADJUSTPOS = 04H; LS_HORZSCROLL = 08H; (* List Box class name *) WC_LISTBOX = FarADDRESS(0FFFF0007H); (* List Box notification messages *) LN_SELECT = 1; LN_SETFOCUS = 2; LN_KILLFOCUS = 3; LN_SCROLL = 4; LN_ENTER = 5; (* List Box messages *) LM_QUERYITEMCOUNT = 0160H; LM_INSERTITEM = 0161H; LM_SETTOPINDEX = 0162H; LM_DELETEITEM = 0163H; LM_SELECTITEM = 0164H; LM_QUERYSELECTION = 0165H; LM_SETITEMTEXT = 0166H; LM_QUERYITEMTEXTLENGTH = 0167H; LM_QUERYITEMTEXT = 0168H; LM_SETITEMHANDLE = 0169H; LM_QUERYITEMHANDLE = 016AH; LM_SEARCHSTRING = 016BH; LM_SETITEMHEIGHT = 016CH; LM_QUERYTOPINDEX = 016DH; LM_DELETEALL = 016EH; (* List Box constants *) LIT_ERROR = MAX(MRESULT)-2; LIT_MEMERROR = MAX(MRESULT)-1; LIT_NONE = MAX(MRESULT); LIT_FIRST = MAX(MRESULT); (* For LM_INSERTITEM *) LIT_END = MAX(MRESULT); LIT_SORTASCENDING = MAX(MRESULT)-1; LIT_SORTDESCENDING = MAX(MRESULT)-2; (* For LM_SEARCHSTRING *) LSS_SUBSTRING = 01H; LSS_PREFIX = 02H; LSS_CASESENSITIVE = 04H; (*%E*) (**) (**--- Win Menu Manager ----------------------------------------------------*) (**) (*%T i_MENU*) (* Menu control styles *) CONST MS_ACTIONBAR = 01H; MS_TITLEBUTTON = 02H; MS_VERTICALFLIP = 04H; PROCEDURE LoadMenu(h: HWND; r:HMODULE; i:CARDINAL) : HWND; CONST (* Menu class name *) WC_MENU = FarADDRESS(0FFFF0004H); (* Menu control messages *) MM_INSERTITEM = 0180H; MM_DELETEITEM = 0181H; MM_QUERYITEM = 0182H; MM_SETITEM = 0183H; MM_QUERYITEMCOUNT = 0184H; MM_STARTMENUMODE = 0185H; MM_ENDMENUMODE = 0186H; MM_DISMISSMENU = 0187H; MM_REMOVEITEM = 0188H; MM_SELECTITEM = 0189H; MM_QUERYSELITEMID = 018AH; MM_QUERYITEMTEXT = 018BH; MM_QUERYITEMTEXTLENGTH = 018CH; MM_SETITEMHANDLE = 018DH; MM_SETITEMTEXT = 018EH; MM_ITEMPOSITIONFROMID = 018FH; MM_ITEMIDFROMPOSITION = 0190H; MM_QUERYITEMATTR = 0191H; MM_SETITEMATTR = 0192H; MM_ISITEMVALID = 0193H; PROCEDURE CreateMenu(o: HWND; t:FarADDRESS) : HWND; TYPE (* Owner Item Structure (Also used for listboxes) *) OWNERITEM = RECORD hwnd : HWND; hps : HPS; State : CARDINAL; Attribute : CARDINAL; StateOld : CARDINAL; AttributeOld : CARDINAL; Item : RECTL; IdItem : INTEGER; HItem : LONGCARD; END; MENUITEM = RECORD Position : INTEGER; Style : BITSET; Attribute : CARDINAL; id : CARDINAL; SubMenu : HWND; HItem : LONGCARD; END; CONST MIT_END = -1; MIT_NONE = -1; MIT_MEMERROR = -1; MIT_ERROR = -1; MID_NONE = MIT_NONE; MID_ERROR = -1; (* MENUITEM Style *) MIS_TEXT = {0}; MIS_BITMAP = {1}; MIS_SEPARATOR = {2}; MIS_OWNERDRAW = {3}; MIS_SUBMENU = {4}; MIS_MULTMENU = {5}; (* Multiple choice submenu *) MIS_SYSCOMMAND = {6}; MIS_HELP = {7}; MIS_STATIC = {8}; MIS_BUTTONSEPARATOR = {9}; MIS_BREAK = {10}; MIS_BREAKSEPARATOR = {11}; MIS_GROUP = {12}; (* Multiple choice group start *) (* In multiple choice submenus a style of 'single' denotes the item is a ** radiobutton. Absence of this style defaults the item to a checkbox. *) MIS_SINGLE = {13}; MIA_NODISMISS = {5}; MIA_FRAMED = {12}; MIA_CHECKED = {13}; MIA_DISABLED = {14}; MIA_HILITED = {15}; (*%E*) (**) (**--- Win Scroll Bar Controls ---------------------------------------------*) (**) (*%T i_SCROLL*) CONST (* Scroll Bar styles *) SBS_HORZ = 0; SBS_VERT = 1; SBS_THUMBSIZE = 2; SBS_AUTOTRACK = 4; (* Scroll Bar class name *) WC_SCROLLBAR = FarADDRESS(0FFFF0008H); (* Scroll Bar messages *) SBM_SETSCROLLBAR = 01A0H; SBM_SETPOS = 01A1H; SBM_QUERYPOS = 01A2H; SBM_QUERYRANGE = 01A3H; SBM_SETHILITE = 01A4H; SBM_QUERYHILITE = 01A5H; SBM_SETTHUMBSIZE = 01A6H; (* Scroll Bar commands *) SB_LINEUP = 1; SB_LINEDOWN = 2; SB_LINELEFT = 1; SB_LINERIGHT = 2; SB_PAGEUP = 3; SB_PAGEDOWN = 4; SB_PAGELEFT = 3; SB_PAGERIGHT = 4; SB_SLIDERTRACK = 5; SB_SLIDERPOSITION = 6; SB_ENDSCROLL = 7; TYPE SBCDATA = RECORD cb : CARDINAL; Hilite : CARDINAL; (* Reserved - should point to zero *) posFirst : INTEGER; posLast : INTEGER; posThumb : INTEGER; cVisible : INTEGER; cTotal : INTEGER; END; (*%E*) (**) (**--- Win Frame Manager Common --------------------------------------------*) (**) (*%T i_FRAME1*) TYPE FRAMECDATA = RECORD cb : CARDINAL; CreateFlags : LSET; Resources : HMODULE; ResId : CARDINAL; END; CONST FCF_TITLEBAR = LSET{0}; FCF_SYSMENU = LSET{1}; FCF_MENU = LSET{2}; FCF_SIZEBORDER = LSET{3}; FCF_MINBUTTON = LSET{4}; FCF_MAXBUTTON = LSET{5}; FCF_MINMAX = FCF_MINBUTTON+FCF_MAXBUTTON; FCF_VERTSCROLL = LSET{6}; FCF_HORZSCROLL = LSET{7}; FCF_DLGBORDER = LSET{8}; FCF_BORDER = LSET{9}; FCF_SHELLPOSITION = LSET{10}; FCF_TASKLIST = LSET{11}; FCF_NOBYTEALIGN = LSET{12}; FCF_NOMOVEWITHOWNER = LSET{13}; FCF_ICON = LSET{14}; FCF_ACCELTABLE = LSET{15}; FCF_SYSMODAL = LSET{16}; FCF_SCREENALIGN = LSET{17}; FCF_MOUSEALIGN = LSET{18}; (* New values to enable multiple palettes. Note that if none of the four *) (* styles specified below are used then we default to the 'system' palette *) FCF_PALETTE_NORMAL = LSET{19}; (* Normal palette *) FCF_PALETTE_HELP = LSET{20}; (* Help palette *) FCF_PALETTE_POPUPODD = LSET{21}; (* Odd level popup palette *) FCF_PALETTE_POPUPEVEN = LSET{22}; (* Even level popup palette *) FCF_STANDARD = FCF_TITLEBAR+FCF_SYSMENU+FCF_MENU+FCF_SIZEBORDER+ FCF_MINMAX+FCF_ICON+FCF_ACCELTABLE+FCF_SHELLPOSITION+ FCF_TASKLIST+FCF_PALETTE_NORMAL; FS_ICON = 01H; FS_ACCELTABLE = 02H; FS_SHELLPOSITION = 04H; FS_TASKLIST = 08H; FS_NOBYTEALIGN = 010H; FS_NOMOVEWITHOWNER = 020H; FS_SYSMODAL = 040H; FS_DLGBORDER = 080H; FS_BORDER = 0100H; FS_SCREENALIGN = 0200H; FS_MOUSEALIGN = 0400H; FS_STANDARD = 0FH; (* Frame Window flags accessed via Set/QueryWindowUShort(QWS_FLAGS) *) FF_FLASHWINDOW = 01H; FF_ACTIVE = 02H; FF_FLASHHILITE = 04H; FF_OWNERHIDDEN = 08H; FF_DLGDISMISSED = 010H; FF_OWNERDISABLED = 020H; FF_SELECTED = 040H; FF_NOACTIVATESWP = 080H; PROCEDURE CreateStdWindow(h: HWND; s: LONGCARD; VAR f: LSET; cc: FarADDRESS; t: ARRAY OF CHAR; sc: LONGCARD; r: HMODULE; i: CARDINAL; VAR c: HWND) : HWND; (* To use a WC_ constant as cc parameter cast to LPSTR and de-reference LPSTR(WC_SCROLLBAR)^ NB !!!!!!!!!! *) (*%E*) (**) (**--- Win Frame Manager Uncommon ------------------------------------------*) (**) (*%T i_FRAME2*) PROCEDURE FlashWindow(h: HWND; f: BOOL) : BOOLEAN; CONST (* Frame Window related messages *) WM_FLASHWINDOW = 040H; WM_FORMATFRAME = 041H; WM_UPDATEFRAME = 042H; WM_FOCUSCHANGE = 043H; WM_SETBORDERSIZE = 044H; WM_TRACKFRAME = 045H; WM_MINMAXFRAME = 046H; WM_SETICON = 047H; WM_QUERYICON = 048H; WM_SETACCELTABLE = 049H; WM_QUERYACCELTABLE = 04AH; WM_TRANSLATEACCEL = 04BH; WM_QUERYTRACKINFO = 04CH; WM_QUERYBORDERSIZE = 04DH; WM_NEXTMENU = 04EH; WM_ERASEBACKGROUND = 04FH; WM_QUERYFRAMEINFO = 050H; (* Note 0x0051/5 are reserved *) WM_QUERYFOCUSCHAIN = 051H; WM_CALCFRAMERECT = 053H; WM_WINDOWPOSCHANGED = 055H; WM_QUERYFRAMECTLCOUNT = 059H; (* Note 0x005A is reserved *) WM_QUERYHELPINFO = 05BH; WM_SETHELPINFO = 05CH; WM_ERROR = 05DH; (* WM_QUERYFRAMEINFO constants *) FI_FRAME = 01H; FI_OWNERHIDE = 02H; FI_ACTIVATEOK = 04H; FI_NOMOVEWITHOWNER = 08H; (* Frame Class name *) WC_FRAME = FarADDRESS(0FFFF0001H); PROCEDURE CreateFrameControls(h: HWND; s: LONGCARD; VAR f:FRAMECDATA; t: ARRAY OF CHAR) : BOOLEAN; (* PROCEDURE FormatFrame(h: HWND; VAR r: RECTL; VAR s: SWP; m: CARDINAL; VAR c: RECTL) : INTEGER; *) PROCEDURE CalcFrameRect(h: HWND; VAR r: RECTL; f: BOOL) : BOOLEAN; PROCEDURE GetMinPosition(h: HWND; VAR s: SWP; VAR p: POINTL) : BOOLEAN; PROCEDURE GetMaxPosition(h: HWND; VAR s: SWP) : BOOLEAN; CONST (* Frame Control IDs *) FID_SYSMENU = 08002H; FID_TITLEBAR = 08003H; FID_MINMAX = 08004H; FID_MENU = 08005H; FID_VERTSCROLL = 08006H; FID_HORZSCROLL = 08007H; FID_CLIENT = 08008H; (* Note 08009H is reserved *) FID_DBE_APPSTAT = 08010H; FID_DBE_KBDSTAT = 08011H; FID_DBE_PECIC = 08012H; FID_DBE_KKPOPUP = 08013H; (* Standard WM_SYSCOMMAND command values *) SC_SIZE = 08000H; SC_MOVE = 08001H; SC_MINIMIZE = 08002H; SC_MAXIMIZE = 08003H; SC_CLOSE = 08004H; SC_NEXT = 08005H; SC_APPMENU = 08006H; SC_SYSMENU = 08007H; SC_RESTORE = 08008H; SC_NEXTFRAME = 08009H; SC_NEXTWINDOW = 08010H; SC_TASKMANAGER = 08011H; SC_HELPKEYS = 08012H; SC_HELPINDEX = 08013H; SC_HELPEXTENDED = 08014H; SC_SWITCHPANELIDS = 08015H; SC_DBE_FIRST = 08018H; SC_DBE_LAST = 0801FH; (*%E*) (**) (**--- Win Frame Controls --------------------------------------------------*) (**) (*%T i_FRAMECTL*) CONST (* Title Bar control class name *) WC_TITLEBAR = FarADDRESS(0FFFF0009H); (* Title Bar control messages *) TBM_SETHILITE = 01E3H; TBM_QUERYHILITE = 01E4H; TBM_TRACKMOVE = 01E5H; (*%E*) (**) (**--- Win Rectangles ------------------------------------------------------*) (**) (*%T i_RECT*) TYPE WRECT = RECORD xLeft : INTEGER; dummy1 : INTEGER; yBottom : INTEGER; dummy2 : INTEGER; xRight : INTEGER; dummy3 : INTEGER; yTop : INTEGER; dummy4 : INTEGER; END; WPOINT = RECORD x : INTEGER; dummy1 : INTEGER; y : INTEGER; dummy2 : INTEGER; END; PROCEDURE SetRect(h: HAB; VAR s: RECTL; l,b,r,t: INTEGER) : BOOLEAN; PROCEDURE IsRectEmpty(h:HAB; VAR r: RECTL) : BOOLEAN; PROCEDURE CopyRect(h:HAB; VAR s: RECTL; VAR d: RECTL) : BOOLEAN; PROCEDURE EqualRect(h:HAB; VAR r1,r2: RECTL) : BOOLEAN; PROCEDURE SetRectEmpty(h:HAB; VAR r: RECTL) : BOOLEAN; PROCEDURE OffsetRect(h:HAB; VAR r: RECTL; cx,cy: INTEGER) : BOOLEAN; PROCEDURE InflateRect(h:HAB; VAR r: RECTL; x,y: INTEGER) : BOOLEAN; PROCEDURE PtInRect(h:HAB; VAR r: RECTL; VAR p: POINTL) : BOOLEAN; PROCEDURE IntersectRect(h:HAB; VAR d,r1,r2: RECTL) : BOOLEAN; PROCEDURE UnionRect(h:HAB; VAR d: RECTL; VAR s1,s2: RECTL) : BOOLEAN; PROCEDURE SubtractRect(h:HAB; VAR r: RECTL; VAR s1,s2: RECTL) : BOOLEAN; PROCEDURE MakeRect(h:HAB; VAR r: WRECT) : BOOLEAN; PROCEDURE MakePoints(h:HAB; VAR p: WPOINT; c: CARDINAL) : BOOLEAN; (*%E*) (**) (**--- Win System Values ---------------------------------------------------*) (**) (*%T i_SYS*) TYPE SV = ( SV_SWAPBUTTON, SV_DBLCLKTIME, SV_CXDBLCLK, SV_CYDBLCLK, SV_CXSIZEBORDER, SV_CYSIZEBORDER, SV_ALARM, SV_RESERVEDFIRST1, SV_RESERVEDLAST1, SV_CURSORRATE, SV_FIRSTSCROLLRATE, SV_SCROLLRATE, SV_NUMBEREDLISTS, SV_WARNINGFREQ, SV_NOTEFREQ, SV_ERRORFREQ, SV_WARNINGDURATION, SV_NOTEDURATION, SV_ERRORDURATION, SV_RESERVEDFIRST, SV_CXSCREEN, SV_CYSCREEN, SV_CXVSCROLL, SV_CYHSCROLL, SV_CYVSCROLLARROW, SV_CXHSCROLLARROW, SV_CXBORDER, SV_CYBORDER, SV_CXDLGFRAME, SV_CYDLGFRAME, SV_CYTITLEBAR, SV_CYVSLIDER, SV_CXHSLIDER, SV_CXMINMAXBUTTON, SV_CYMINMAXBUTTON, SV_CYMENU, SV_CXFULLSCREEN, SV_CYFULLSCREEN, SV_CXICON, SV_CYICON, SV_CXPOINTER, SV_CYPOINTER, SV_DEBUG, SV_CMOUSEBUTTONS, SV_POINTERLEVEL, SV_CURSORLEVEL, SV_TRACKRECTLEVEL, SV_CTIMERS, SV_MOUSEPRESENT, SV_CXBYTEALIGN, SV_CYBYTEALIGN, (* Values of 51-55 are spare for extra non-settable system values *) SV_SPARE51, SV_SPARE52, SV_SPARE53, SV_SPARE54, SV_SPARE55, (* The following value enables any greater value to be set by WinSetSysVlaue. *) SV_NOTRESERVED, (* This is to enable the setting of SV_EXTRAKEYBEEP by applications. *) SV_EXTRAKEYBEEP, (* The following system value controls whether PM controls the keyboard *) (* lights for light key keystrokes (else applications will) *) SV_SETLIGHTS, SV_INSERTMODE, SV_SPARE60, SV_SPARE61, SV_SPARE62, SV_SPARE63, SV_MENUROLLDOWNDELAY, SV_MENUROLLUPDELAY, SV_ALTMNEMONIC, SV_TASKLISTMOUSEACCESS, SV_CSYSVALUES, SV_CPOINTERBUTTONS, SV_CXALIGN, SV_CYALIGN, SV_MNEMONICSENABLED); PROCEDURE QuerySysValue(h: HWND; i: SV) : LONGINT; PROCEDURE SetSysValue(h: HWND; i: SV; v: LONGINT) : BOOLEAN; (* * Presentation parameter structures. *) TYPE PARAM = RECORD id : LONGCARD; cb : LONGCARD; ab : ARRAY [1..1] OF BYTE; END; PRESPARAMS = RECORD cb: LONGCARD; aparam: ARRAY [1..1] OF PARAM; END; (* * Presentation parameter APIs *) PROCEDURE SetPresParam(h:HWND;id,cb:LONGCARD;p:FarADDRESS):BOOLEAN; PROCEDURE QueryPresParam(h:HWND;id1,id2:LONGCARD;VAR pId: LONGCARD;cb:LONGCARD;pb:FarADDRESS;fs:CARDINAL):LONGCARD; PROCEDURE RemovePresParam(h:HWND;id:LONGCARD):BOOLEAN; (* Presentation parameter types *) CONST PP_FOREGROUNDCOLOR = 1; PP_FOREGROUNDCOLORINDEX = 2; PP_BACKGROUNDCOLOR = 3; PP_BACKGROUNDCOLORINDEX = 4; PP_HILITEFOREGROUNDCOLOR = 5; PP_HILITEFOREGROUNDCOLORINDEX = 6; PP_HILITEBACKGROUNDCOLOR = 7; PP_HILITEBACKGROUNDCOLORINDEX = 8; PP_DISABLEDFOREGROUNDCOLOR = 9; PP_DISABLEDFOREGROUNDCOLORINDEX = 10; PP_DISABLEDBACKGROUNDCOLOR = 11; PP_DISABLEDBACKGROUNDCOLORINDEX = 12; PP_BORDERCOLOR = 13; PP_BORDERCOLORINDEX = 14; PP_FONTNAMESIZE = 15; PP_FONTHANDLE = 16; (* Flags for WinQueryPresParams *) QPF_NOINHERIT = 01H; (* Don't inherit *) QPF_ID1COLORINDEX = 02H; (* Convert id1 color index into RGB *) QPF_ID2COLORINDEX = 04H; (* Convert id2 color index into RGB *) QPF_PURERGBCOLOR = 08H; (* Return pure RGB colors *) QPF_VALIDFLAGS = 0FH; (* Valid WinQueryPresParams() flags. *) (*%E*) (**) (**--- Win Color Functions -------------------------------------------------*) (**) (*%T i_COLOR*) PROCEDURE QuerySysColor(h: HWND; c: COLOR; r: LONGINT) : COLOR; PROCEDURE SetSysColors(h: HWND; o,f,s: LONGCARD; l: LONGCARD; VAR t: ARRAY OF COLOR) : BOOLEAN; CONST SYSCLR_BUTTONLIGHT = -41; SYSCLR_BUTTONMIDDLE = -40; SYSCLR_BUTTONDARK = -39; SYSCLR_BUTTONDEFAULT = -38; SYSCLR_TITLEBOTTOM = -37; SYSCLR_SHADOW = -36; SYSCLR_ICONTEXT = -35; SYSCLR_DIALOGBACKGROUND = -34; SYSCLR_HILITEFOREGROUND = -33; SYSCLR_HILITEBACKGROUND = -32; SYSCLR_INACTIVETITLETEXTBGND = -31; SYSCLR_ACTIVETITLETEXTBGND = -30; SYSCLR_INACTIVETITLETEXT = -29; SYSCLR_ACTIVETITLETEXT = -28; SYSCLR_OUTPUTTEXT = -27; SYSCLR_WINDOWSTATICTEXT = -26; SYSCLR_SCROLLBAR = -25; SYSCLR_BACKGROUND = -24; SYSCLR_ACTIVETITLE = -23; SYSCLR_INACTIVETITLE = -22; SYSCLR_MENU = -21; SYSCLR_WINDOW = -20; SYSCLR_WINDOWFRAME = -19; SYSCLR_MENUTEXT = -18; SYSCLR_WINDOWTEXT = -17; SYSCLR_TITLETEXT = -16; SYSCLR_ACTIVEBORDER = -15; SYSCLR_INACTIVEBORDER = -14; SYSCLR_APPWORKSPACE = -13; SYSCLR_HELPBACKGROUND = -12; SYSCLR_HELPTEXT = -11; SYSCLR_HELPHILITE = -10; SYSCLR_CSYSCOLORS = 32; (*%E*) (**) (**--- Win Timer Functions -------------------------------------------------*) (**) (*%T i_TIMER*) PROCEDURE StartTimer(h:HAB; w: HWND; i: CARDINAL; t: CARDINAL) : CARDINAL; PROCEDURE StopTimer(h:HAB; w: HWND; i: CARDINAL) : BOOLEAN; PROCEDURE GetCurrentTime(h:HAB) : LONGCARD; CONST (* Reserved timer ids *) TID_CURSOR = 0FFFFH; (* Reserved cursor timer ID *) TID_SCROLL = 0FFFEH; (* Reserved scrolling timer ID *) TID_FLASHWINDOW = 0FFFDH; (* Reserved for window flashing timer ID *) TID_USERMAX = 07FFFH; (* Maximum user timer ID *) (*%E*) (**) (**--- Win Accelerator -----------------------------------------------------*) (**) (*%T i_ACCEL*) CONST (* ACCEL flags *) AF_CHAR = {0}; AF_VIRTUALKEY = {1}; AF_SCANCODE = {2}; AF_SHIFT = {3}; AF_CONTROL = {4}; AF_ALT = {5}; AF_LONEKEY = {6}; AF_SYSCOMMAND = {8}; AF_HELP = {9}; TYPE HACCEL = LHANDLE; ACCEL = RECORD flags : BITSET; key : CARDINAL; cmd : CARDINAL; END; ACCELTABLE = RECORD CAccel : CARDINAL; codepage : CARDINAL; Accel : ARRAY [0..0] OF ACCEL; END; PROCEDURE LoadAccelTable(h:HAB; r: HMODULE; i: CARDINAL) : HACCEL; PROCEDURE CreateAccelTable(h:HAB; VAR t: ACCELTABLE) : HACCEL; PROCEDURE DestroyAccelTable(a: HACCEL) : BOOLEAN; PROCEDURE CopyAccelTable(a: HACCEL; VAR t: ACCELTABLE; m: CARDINAL) : CARDINAL; PROCEDURE TranslateAccel(h:HAB; w: HWND; a: HACCEL; VAR q: QMSG) : BOOLEAN; PROCEDURE SetAccelTable(h:HAB; a: HACCEL; f: HWND) : BOOLEAN; PROCEDURE QueryAccelTable(h:HAB; f: HWND) : HACCEL; (*%E*) (**** Extended Attribute Flags (Association Table) *) CONST EAF_DEFAULTOWNER = 01H; EAF_UNCHANGEABLE = 02H; EAF_REUSEICON = 04H; (**) (**--- Win Track Rectangle -------------------------------------------------*) (**) (*%T i_TRACK*) TYPE (* TrackRect() tracking information *) TRACKINFO = RECORD cxBorder : INTEGER; cyBorder : INTEGER; cxGrid : INTEGER; cyGrid : INTEGER; cxKeyboard : INTEGER; cyKeyboard : INTEGER; Track : RECTL; Boundary : RECTL; MinTrackSize : POINTL; MaxTrackSize : POINTL; options : BITSET; END; PROCEDURE TrackRect(h: HWND; s: HPS; VAR t: TRACKINFO) : BOOLEAN; PROCEDURE ShowTrackRect(h: HWND; s: BOOL) : BOOLEAN; CONST (* TRACKINFO options *) TF_LEFT = {0}; TF_TOP = {1}; TF_RIGHT = {2}; TF_BOTTOM = {3}; TF_MOVE = {0..3}; TF_SETPOINTERPOS = {4}; TF_GRID = {5}; TF_STANDARD = {6}; TF_ALLINBOUNDARY = {7}; TF_VALIDATETRACKRECT = {8}; TF_PARTINBOUND = {9}; (*%E*) (**) (**--- Win Clipboard -------------------------------------------------------*) (**) (*%T i_CLIP*) CONST WM_RENDERFMT = 060H; WM_RENDERALLFMTS = 061H; WM_DESTROYCLIPBOARD = 062H; WM_PAINTCLIPBOARD = 063H; WM_SIZECLIPBOARD = 064H; WM_HSCROLLCLIPBOARD = 065H; WM_VSCROLLCLIPBOARD = 066H; WM_DRAWCLIPBOARD = 067H; TYPE CF = (CF_NULL, CF_TEXT, CF_BITMAP, CF_DSPTEXT, CF_DSPBITMAP,CF_METAFILE,CF_DSPMETAFILE ); PROCEDURE SetClipbrdOwner(h:HAB; w: HWND) : BOOLEAN; PROCEDURE SetClipbrdData(a:HAB; h: LONGCARD; f: CF; i: CARDINAL) : BOOLEAN; PROCEDURE QueryClipbrdData(h:HAB; f: CF) : LONGCARD; PROCEDURE QueryClipbrdFmtInfo(h:HAB; f: CF; VAR m: CARDINAL) : BOOLEAN; PROCEDURE SetClipbrdViewer(h:HAB; w: HWND) : BOOLEAN; PROCEDURE EnumClipbrdFmts(h:HAB; p: CF) : CF; PROCEDURE OpenClipbrd(h:HAB) : BOOLEAN; PROCEDURE CloseClipbrd(h:HAB) : BOOLEAN; PROCEDURE EmptyClipbrd(h:HAB) : BOOLEAN; PROCEDURE QueryClipbrdOwner(h:HAB; l: BOOL) : HWND; PROCEDURE QueryClipbrdViewer(h:HAB; l: BOOL) : HWND; CONST (* SetClipbrdData() flags *) CFI_OWNERFREE = 01H; CFI_OWNERDISPLAY = 02H; CFI_SELECTOR = 0100H; CFI_HANDLE = 0200H; (*%E*) (**) (**--- Win Cursor Management -----------------------------------------------*) (**) (*%T i_CURSOR*) PROCEDURE DestroyCursor(h: HWND) : BOOLEAN; PROCEDURE ShowCursor(h: HWND; s: BOOL) : BOOLEAN; PROCEDURE CreateCursor(h: HWND; x,y,cx,cy: INTEGER; f: BITSET; VAR c: RECTL) : BOOLEAN; CONST (* CreatCursor()/CURSORINFO flags *) CURSOR_SOLID = {}; CURSOR_HALFTONE = {0}; CURSOR_FRAME = {1}; CURSOR_FLASH = {2}; CURSOR_SETPOS = {15}; TYPE CURSORINFO = RECORD hwnd : HWND; x,y,cx,cy : INTEGER; flags : BITSET; rclClip : RECTL; END; PROCEDURE QueryCursorInfo(h: HWND; VAR c: CURSORINFO) : BOOLEAN; (*%E*) (**) (**--- Win Pointer Management ----------------------------------------------*) (**) (*%T i_POINTER*) TYPE HPOINTER = LHANDLE; PROCEDURE SetPointer(h: HWND; p: HPOINTER) : BOOLEAN; PROCEDURE ShowPointer(h: HWND; s: BOOL) : BOOLEAN; PROCEDURE QuerySysPointer(h: HWND; i: INTEGER; c: BOOL) : HPOINTER; (* System pointers *) (*%T i_LATER *) CONST SPTR_ARROW = 1; SPTR_TEXT = 2; SPTR_WAIT = 3; SPTR_MOVE = 4; SPTR_SIZENWSE = 5; SPTR_SIZENESW = 6; SPTR_SIZEWE = 7; SPTR_SIZENS = 8; SPTR_APPICON = 9; SPTR_ICONINFORMATION = 10; SPTR_ICONQUESTION = 11; SPTR_ICONERROR = 12; SPTR_ICONWARNING = 13; SPTR_CPTR = 13; (* Count of pointers loaded by PMWIN *) SPTR_ILLEGAL = 14; SPTR_FILE = 15; SPTR_FOLDER = 16; SPTR_MULTFILE = 17; SPTR_PROGRAM = 18; (*%E *) (*%F i_LATER *) CONST SPTR_ARROW = 1; SPTR_TEXT = 2; SPTR_WAIT = 3; SPTR_SIZE = 4; SPTR_MOVE = 5; SPTR_SIZENWSE = 6; SPTR_SIZENESW = 7; SPTR_SIZEWE = 8; SPTR_SIZENS = 9; SPTR_APPICON = 10; SPTR_ICONINFORMATION = 11; SPTR_ICONQUESTION = 12; SPTR_ICONERROR = 13; SPTR_ICONWARNING = 14; SPTR_CPTR = 14; (* count loaded by pmwin *) SPTR_ILLEGAL = 18; SPTR_FILE = 19; SPTR_FOLDER = 20; SPTR_MULTFILE = 21; SPTR_PROGRAM = 22; (* backward compatibility *) SPTR_HANDICON = SPTR_ICONERROR; SPTR_QUESICON = SPTR_ICONQUESTION; SPTR_BANGICON = SPTR_ICONWARNING; SPTR_NOTEICON = SPTR_ICONINFORMATION; (*%E *) PROCEDURE LoadPointer(h: HWND; r: HMODULE; idres: CARDINAL) : HPOINTER; PROCEDURE CreatePointer(h: HWND; b: HBITMAP; p: BOOL; x,y: INTEGER) : HPOINTER; PROCEDURE DestroyPointer(p: HPOINTER) : BOOLEAN; PROCEDURE QueryPointer(h: HWND) : HPOINTER; PROCEDURE SetPointerPos(h: HWND; x,y: INTEGER) : BOOLEAN; PROCEDURE QueryPointerPos(h: HWND; VAR p: POINTL) : BOOLEAN; TYPE POINTERINFO = RECORD flag : BOOL; xHotspot : INTEGER; yHotspot : INTEGER; Pointer, Color : HBITMAP; END; PROCEDURE WinCreatePointerIndirect(h: HWND; VAR i: POINTERINFO): HPOINTER; PROCEDURE QueryPointerInfo(h: HPOINTER; VAR i: POINTERINFO) : BOOLEAN; TYPE DP=(DP_NORMAL,DP_HALFTONED,DP_INVERTED); PROCEDURE DrawPointer(s:HPS; x,y: INTEGER; p: HPOINTER; h: DP) : BOOLEAN; (* System Bitmaps *) TYPE SBMP=(SBMP_NULL, SBMP_OLD_SYSMENU, SBMP_OLD_SBUPARROW, SBMP_OLD_SBDNARROW, SBMP_OLD_SBRGARROW, SBMP_OLD_SBLFARROW, SBMP_MENUCHECK, SBMP_CHECKBOXES, SBMP_BTNCORNERS, SBMP_OLD_MINBUTTON, SBMP_OLD_MAXBUTTON, SBMP_OLD_RESTOREBUTTON, SBMP_OLD_CHILDSYSMENU, SBM_13, SBM_14, SBMP_DRIVE, SBMP_FILE, SBMP_FOLDER, SBMP_TREEPLUS, SBMP_TREEMINUS, SBMP_20, SBMP_21, SBMP_PROGRAM, SBMP_MENUATTACHED, SBMP_SIZEBOX, SBMP_SYSMENU, SBMP_MINBUTTON, SBMP_MAXBUTTON, SBMP_RESTOREBUTTON, SBMP_CHILDSYSMENU, SBMP_SYSMENUDEP, SBMP_MINBUTTONDEP, SBMP_MAXBUTTONDEP, SBMP_RESTOREBUTTONDEP, SBMP_CHILDSYSMENUDEP, SBMP_SBUPARROW, SBMP_SBDNARROW, SBMP_SBLFARROW, SBMP_SBRGARROW, SBMP_SBUPARROWDEP, SBMP_SBDNARROWDEP, SBMP_SBLFARROWDEP, SBMP_SBRGARROWDEP, SBMP_SBUPARROWDIS, SBMP_SBDNARROWDIS, SBMP_SBLFARROWDIS, SBMP_SBRGARROWDIS, SBMP_COMBODOWN); PROCEDURE GetSysBitmap(h: HWND; s: SBMP) : HBITMAP; (*%E*) (**) (**--- Win Hook Manager ----------------------------------------------------*) (**) (*%T i_HOOK*) TYPE HK=(HK_SENDMSG,HK_INPUT,HK_MSGFILTER,HK_JOURNALRECORD, HK_JOURNALPLAYBACK,HK_HELP,HK_LOADER,HK_REGISTERUSERMSG, HK_MSGCONTROL,HK_PLIST_ENTRY,HK_PLIST_EXIT,HK_FINDWORD, HK_CODEPAGECHANGED); PROCEDURE SetHook(h:HAB; q: HMQ; t: HK; p: PROC; m: HMODULE) : BOOLEAN; PROCEDURE ReleaseHook(h:HAB; q: HMQ; t: HK; p: PROC; m: HMODULE) : BOOLEAN; PROCEDURE CallMsgFilter(h:HAB; VAR m: QMSG; f: INTEGER) : BOOLEAN; CONST HMQ_CURRENT = HMQ(1); (* WH_MSGFILTER context codes *) MSGF_DIALOGBOX = 1; MSGF_MESSAGEBOX = 2; MSGF_TRACK = 8; (* HK_HELP help modes *) HLPM_FRAME = -1; HLPM_WINDOW = -2; HLPM_MENU = -3; TYPE (* HK_SENDMSG structure *) SMHSTRUCT = RECORD mp2 : MPARAM; mp1 : MPARAM; msg : CARDINAL; hwnd : HWND; END; CONST (*HK_LOADER context codes *) LHK_DELETEPROC = 1; LHK_DELETELIB = 2; LHK_LOADPROC = 3; LHK_LOADLIB = 4; (*HK_MSGCONTROL context codes *) MCHK_MSGINTEREST = 1; MCHK_CLASSMSGINTEREST = 2; MCHK_SYNCHRONISATION = 3; MCHK_MSGMODE = 4; (*HK_REGISTERUSERMSG conext codes *) RUMHK_DATATYPE = 1; RUMHK_MSG = 2; (*%E*) (**) (**--- Win Shell API -------------------------------------------------------*) (**) (*%T i_SHELL*) (* Maximum filename length *) CONST MAXNAMEL = 60; (* Maximum path length *) MAXPATHL = 128; TYPE PATHSTR = ARRAY[0..MAXPATHL] OF CHAR; NAMESTR = ARRAY[0..MAXNAMEL] OF CHAR; XYWINSIZE = RECORD x,y,cx,cy : INTEGER; flags : BITSET; END; CONST (* XYWINSIZE flags *) XYF_NOAUTOCLOSE = {3}; XYF_MINIMIZED = {2}; XYF_MAXIMIZED = {1}; XYF_INVISIBLE = {0}; XYF_NORMAL = {}; TYPE HPROGRAM = LHANDLE; HINI = LHANDLE; CONST HINI_PROFILE = 0; HINI_USERPROFILE = -1; HINI_SYSTEMPROFILE = -2; HINI_USER = HINI_USERPROFILE; HINI_SYSTEM = HINI_SYSTEMPROFILE; TYPE PRFPROFILE = RECORD cchUserName : LONGCARD; UserName : POINTER TO CHAR; cchSysName : LONGCARD; SysName : POINTER TO CHAR; END; CONST (* Root group handle *) SGH_ROOT = 2; TYPE HPROGARRAY = RECORD hprog : ARRAY [0..0] OF HPROGRAM; END; PROGCATEGORY = SHORTCARD; (* values acceptable for PROGCATEGORY for PM groups *) CONST PROG_DEFAULT = 0; PROG_FULLSCREEN = 1; PROG_WINDOWABLEVIO = 2; PROG_PM = 3; PROG_GROUP = 5; PROG_REAL = 4; (* Was 7 *) PROG_DLL = 6; PROG_RESERVED = 255; (* visibility flag for PROGTYPE structure *) SHE_VISIBLE = 0; SHE_INVISIBLE = 1; SHE_RESERVED = 255; (* Protected group flag for PROGTYPE structure *) SHE_UNPROTECTED = 0; SHE_PROTECTED = 2; TYPE PROGTYPE = RECORD progc : PROGCATEGORY; Visible : SHORTCARD; END; PROGRAMENTRY = RECORD hprog : HPROGRAM; progt : PROGTYPE; Title : NAMESTR; END; PIBSTRUCT = RECORD progt : PROGTYPE; Title : NAMESTR; IconFileName : PATHSTR; Executable : PATHSTR; StartupDir : PATHSTR; winInitial : XYWINSIZE; res1 : CARDINAL; res2 : FarADDRESS; CEnvironmentVars : CARDINAL; EnvironmentVars : FarADDRESS; CProgramParameter : CARDINAL; ProgramParameter : FarADDRESS; END; (* Structures associated with 'Prf' calls *) PROGDETAILS = RECORD Length: LONGCARD; (* set this to sizeof(PROGDETAILS) *) progt: PROGTYPE; pad1: ARRAY[0..2] OF SHORTCARD; (* ready for 32-bit PROGTYPE *) Title: FarADDRESS; (* any of the pointers can be NIL *) Executable: FarADDRESS; Parameters: FarADDRESS; StartupDir: FarADDRESS; Icon: FarADDRESS; Environment: FarADDRESS; (* terminated by /0/0 *) Initial: SWP; (* this replaces XYWINSIZE *) pad2: ARRAY[0..4] OF SHORTCARD; (* ready for 32-bit SWP *) END; PROGTITLE = RECORD hprog: HPROGRAM; progt: PROGTYPE; pad1: ARRAY[0..2] OF SHORTCARD; (* padding ready for 32-bit PROGTYPE *) Title: FarADDRESS; END; QFEOUTBLK = RECORD Total: SHORTCARD; Count: SHORTCARD; ProgramArr: ARRAY [0..0] OF HPROGRAM; END; (* Program List API Function Definitions *) PROCEDURE QueryProgramTitles(h:HAB; p:HPROGRAM; VAR b:PROGRAMENTRY; l:CARDINAL; VAR t:CARDINAL) : CARDINAL; PROCEDURE AddProgram(h:HAB; VAR i:PIBSTRUCT; p:HPROGRAM) : HPROGRAM; PROCEDURE QueryDefinition(h:HAB; p:HPROGRAM; VAR i:PIBSTRUCT; m:CARDINAL) : CARDINAL; PROCEDURE CreateGroup(h:HAB; t:ARRAY OF CHAR; v:CARDINAL; r1,r2:LONGCARD) : HPROGRAM; (* Program List API available 'Prf' calls *) PROCEDURE PrfQueryProgramTitles(h: HINI; pgroup: HPROGRAM; VAR T: PROGTITLE; Max: LONGCARD; VAR Count: LONGCARD): LONGCARD; PROCEDURE PrfAddProgram (h:HINI; VAR p: PROGDETAILS; hpGroup: HPROGRAM): HPROGRAM; PROCEDURE PrfChangeProgram (h:HINI; hp: HPROGRAM; VAR p: PROGDETAILS): BOOLEAN; PROCEDURE PrfQueryDefinition (h:HINI; hp:HPROGRAM; VAR p: PROGDETAILS; BufMax: LONGCARD): LONGCARD; PROCEDURE PrfRemoveProgram(h:HINI; hp:HPROGRAM): BOOLEAN; PROCEDURE PrfQueryProgramHandle (h:HINI; Exe: FarADDRESS; VAR p:HPROGARRAY; bufmax: LONGCARD; VAR Count: LONGCARD): LONGCARD; PROCEDURE PrfCreateGroup (h:HINI; Title: FarADDRESS; Visibility: SHORTCARD): HPROGRAM; PROCEDURE PrfDestroyGroup(h:HINI; hp:HPROGRAM): BOOLEAN; PROCEDURE PrfQueryProgramCategory(h:HINI; Exe: FarADDRESS): PROGCATEGORY; TYPE HSWITCH = LHANDLE; CONST (* SWCNTRL Visibility *) SWL_VISIBLE = 4; SWL_INVISIBLE = 1; SWL_GRAYED = 2; (* SWCNTRL Jump *) SWL_JUMPABLE = 2; SWL_NOTJUMPABLE = 1; TYPE SWCNTRL = RECORD hwnd : HWND; hwndIcon : HWND; hprog : HPROGRAM; idProcess : CARDINAL; idSession : CARDINAL; Visibility : SHORTCARD; Jump : SHORTCARD; Swtitle : NAMESTR; Reserved : SHORTCARD; END; PROCEDURE AddSwitchEntry(VAR c:SWCNTRL) : HSWITCH; PROCEDURE RemoveSwitchEntry(h:HSWITCH) : CARDINAL; TYPE SWENTRY = RECORD hswitch: HSWITCH; swctl: SWCNTRL; END; SWBLOCK = RECORD cswentry: CARDINAL; swentry: ARRAY [0..0] OF SWENTRY; END; PROCEDURE ChangeSwitchEntry(s:HSWITCH; VAR c:SWCNTRL) : CARDINAL; PROCEDURE QueryTaskTitle(c:CARDINAL; VAR t:ARRAY OF CHAR; c2:CARDINAL) : CARDINAL; PROCEDURE CreateSwitchEntry(h: HAB; VAR c:SWCNTRL ): HSWITCH; PROCEDURE QuerySessionTitle(h:HAB; s: CARDINAL; VAR Title: ARRAY OF CHAR; Titlelen: CARDINAL): CARDINAL; PROCEDURE QuerySwitchEntry(h:HSWITCH; VAR SwitchData: SWCNTRL): CARDINAL; PROCEDURE QuerySwitchHandle(h:HWND; process: PID): HSWITCH; PROCEDURE QuerySwitchList(h:HAB; VAR Entries: SWBLOCK; Datalen: CARDINAL): CARDINAL; PROCEDURE QueryTaskSizePos(h:HAB; ScreenGroup: CARDINAL; VAR pdata: SWP): CARDINAL; PROCEDURE SwitchToProgram(h:HSWITCH): CARDINAL; (* OS2.INI access functions *) PROCEDURE QueryProfileInt(h:HAB; a,k:ARRAY OF CHAR; d:INTEGER) : INTEGER; PROCEDURE QueryProfileString(h:HAB; a,k,d:ARRAY OF CHAR; VAR p : ARRAY OF CHAR; m:CARDINAL) : CARDINAL; PROCEDURE WriteProfileString(h:HAB; a,k,v:ARRAY OF CHAR) : BOOLEAN; PROCEDURE QueryProfileSize(h:HAB; a,k:ARRAY OF CHAR; VAR s:CARDINAL) : CARDINAL; PROCEDURE QueryProfileData(h:HAB; a,k:ARRAY OF CHAR; v:FarADDRESS; VAR s:CARDINAL) : BOOLEAN; PROCEDURE WriteProfileData(h:HAB; a,k:ARRAY OF CHAR; v:FarADDRESS; s:CARDINAL) : BOOLEAN; (* new public message, broadcast on WinReset *) CONST PL_ALTERED =08EH; (* WM_SHELLFIRST + 0E *) TYPE HAPP = LHANDLE; PROCEDURE InstStartApp(h:HINI; Notify:HWND; Count: CARDINAL; Application: FarADDRESS; VAR CmdLine: ARRAY OF CHAR; Data: FarADDRESS; Options: CARDINAL): HAPP; PROCEDURE TerminateApp(h: HAPP): BOOLEAN; CONST (* bit values for Options parameter of WinInstStartAppl *) SAF_INSTALLEDCMDLINE = 1; (* use installed parameters *) SAF_STARTCHILDAPP = 2; (* related application *) (*%E*) (**) (**--- Win Country Functions -----------------------------------------------*) (**) (*%T i_COUNTRY*) PROCEDURE SetCp(h: HMQ; c: CARDINAL) : BOOLEAN; PROCEDURE QueryCp(q: HMQ) : CARDINAL; PROCEDURE QueryCpList(h:HAB; n: CARDINAL; VAR c: ARRAY OF CARDINAL) : CARDINAL; PROCEDURE CpTranslateString(h:HAB; cs: CARDINAL; s: ARRAY OF CHAR; cd: CARDINAL; m: CARDINAL; VAR d: ARRAY OF CHAR) : BOOLEAN; PROCEDURE CpTranslateChar(h:HAB; cs: CARDINAL; c: CHAR; cd: CARDINAL) : CHAR; PROCEDURE Upper(h:HAB; p,c: CARDINAL; VAR s: ARRAY OF CHAR) : CARDINAL; PROCEDURE UpperChar(h:HAB; p,c: CARDINAL; i: CARDINAL) : CARDINAL; PROCEDURE NextChar(h:HAB; p,c: CARDINAL; ca: FarADDRESS) : FarADDRESS; PROCEDURE PrevChar(h:HAB; p,c: CARDINAL; s,ca: FarADDRESS) : FarADDRESS; TYPE WCS = (WCS_ERROR,WCS_EQ,WCS_LT,WCS_GT); PROCEDURE CompareStrings(h:HAB; c1,c2: CARDINAL; s1,s2: ARRAY OF CHAR; o: CARDINAL) : WCS; (*%E*) (**) (**--- Win Heap Manager ----------------------------------------------------*) (**) (*%T i_HEAP*) TYPE HHEAP = LHANDLE; CONST HM_NULL = 0; HM_MOVEABLE = 1; HM_VALIDSIZE = 2; PROCEDURE CreateHeap(b,s,g,mi,ma: CARDINAL; o: CARDINAL) : HHEAP; PROCEDURE DestroyHeap(h: HHEAP) : HHEAP; PROCEDURE AvailMem(h: HHEAP; c: BOOL; r: CARDINAL) : CARDINAL; PROCEDURE AllocMem(h: HHEAP; a: CARDINAL) : CARDINAL; PROCEDURE ReallocMem(h: HHEAP; s,o,n: CARDINAL ) : CARDINAL; PROCEDURE FreeMem(h: HHEAP; m,l: CARDINAL) : CARDINAL; PROCEDURE LockHeap(h: HHEAP) : FarADDRESS; (*%E*) (**) (**--- Win Atom Manager ----------------------------------------------------*) (**) (*%T i_ATOM*) TYPE HATOMTBL = LHANDLE; ATOM = CARDINAL; PROCEDURE QuerySystemAtomTable() : HATOMTBL; PROCEDURE CreateAtomTable(i,b: CARDINAL) : HATOMTBL; PROCEDURE DestroyAtomTable(h: HATOMTBL) : HATOMTBL; PROCEDURE AddAtom(h: HATOMTBL; s: ARRAY OF CHAR) : ATOM; PROCEDURE FindAtom(h: HATOMTBL; s: ARRAY OF CHAR) : ATOM; PROCEDURE DeleteAtom(h: HATOMTBL; a: ATOM) : ATOM; PROCEDURE QueryAtomUsage(h: HATOMTBL; a: ATOM) : INTEGER; PROCEDURE QueryAtomLength(h: HATOMTBL; a: ATOM) : CARDINAL; PROCEDURE QueryAtomName(h: HATOMTBL; a: ATOM; VAR b: ARRAY OF CHAR; m: CARDINAL) : CARDINAL; (*%E*) (**) (**--- Win Catch and Throw -------------------------------------------------*) (**) (*%T i_CATCH*) TYPE CATCHBUF = RECORD reserved : ARRAY [0..3] OF LONGCARD; END; PROCEDURE Catch(VAR b: CATCHBUF) : INTEGER; PROCEDURE Throw(VAR b: CATCHBUF; r: INTEGER); (*%E*) (**) (**--- Win Errors ---------------------------------------------------*) (**) (*%T i_ERROR*) (* Error codes for debugging support *) (* 0x1001 - 0x1021, 0x1034, 0x1036 - 0x1050 are reserved *) CONST WINDBG_HWND_NOT_DESTROYED = 01022H; WINDBG_HPTR_NOT_DESTROYED = 01023H; WINDBG_HACCEL_NOT_DESTROYED = 01024H; WINDBG_HENUM_NOT_DESTROYED = 01025H; WINDBG_VISRGN_SEM_BUSY = 01026H; WINDBG_USER_SEM_BUSY = 01027H; WINDBG_DC_CACHE_BUSY = 01028H; WINDBG_HOOK_STILL_INSTALLED = 01029H; WINDBG_WINDOW_STILL_LOCKED = 0102AH; WINDBG_UPDATEPS_ASSERTION_FAIL = 0102BH; WINDBG_SENDMSG_WITHIN_USER_SEM = 0102CH; WINDBG_USER_SEM_NOT_ENTERED = 0102DH; WINDBG_PROC_NOT_EXPORTED = 0102EH; WINDBG_BAD_SENDMSG_HWND = 0102FH; WINDBG_ABNORMAL_EXIT = 01030H; WINDBG_INTERNAL_REVISION = 01031H; WINDBG_INITSYSTEM_FAILED = 01032H; WINDBG_HATOMTBL_NOT_DESTROYED = 01033H; WINDBG_WINDOW_UNLOCK_WAIT = 01035H; (* Get/Set Error Information Interface declarations *) TYPE ERRINFO = RECORD FixedErrInfo : CARDINAL; idError : LONGCARD; DetailLevel : CARDINAL; Msg : CARDINAL; BinaryData : CARDINAL; END; PERRINFO = POINTER TO ERRINFO; PROCEDURE GetLastError(h: HAB): ERRORID; PROCEDURE GetErrorInfo(h: HAB): PERRINFO; PROCEDURE FreeErrorInfo(VAR e: ERRINFO): BOOLEAN; (* SetErrorInfo API *) (*# save *) (*# call(c_conv=>on,var_arg=>on,reg_param=>()) *) PROCEDURE WinSetErrorInfo(e:ERRORID; flg:CARDINAL): ERRORID; (*# restore *) CONST SEI_BREAKPOINT = 08000H; (* Always enter an INT 3 breakpt *) SEI_NOBEEP = 04000H; (* Do not call DosBeep *) SEI_NOPROMPT = 02000H; (* Do not prompt the user *) SEI_DBGRSRVD = 01000H; (* Reserved for debug use *) SEI_DEBUGONLY = 0F000H; (* SEI_BREAKPOINT | SEI_NOBEEP | SEI_NOPROMPT | SEI_RSRVD *) SEI_STACKTRACE = 00001H; (* save the stack trace *) SEI_REGISTERS = 00002H; (* save the registers *) SEI_ARGCOUNT = 00004H; (* first USHORT in args is arg count *) SEI_DOSERROR = 00008H; (* first USHORT in args is OS2 error code *) SEI_MSGSTR = 00010H; (* first PSZ in arg -> msg string *) SEI_RESERVED = 00FE0H; (* Reserved for future use *) (* Note that when SEI_ARGCOUNT, SEI_DOSERROR and DOS_MSGSTR are specified *) (* together, then the implied order of the parameters is: *) (* *) (* *) (* WinSetErrorInfo( MAKEERRORID( .... ), *) (* SEI_ARGCOUNT | SEI_DOSERROR | SEI_MSGSTR, *) (* argCount, *) (* dosErrorCode, *) (* "This is the error msg string: %s\n", *) (* "This is an insert for the %s format specifier" ); *) (* *) (*%E*) (**) (**--- Win DDE Structure ---------------------------------------------------*) (**) (*%T i_DDE*) TYPE DDEINIT = RECORD cb : CARDINAL; AppName : FarADDRESS; Topic : FarADDRESS; END ; DDESTRUCT = RECORD Data : LONGINT; Status : BITSET; Format : CARDINAL; OffItemName : CARDINAL; OffData : CARDINAL; END; (* DDESTRUCT Status *) CONST DDE_FACK = {0}; DDE_FBUSY = {1}; DDE_FNODATA = {2}; DDE_FACKREQ = {3}; DDE_FRESPONSE = {4}; DDE_NOTPROCESSED = {5}; DDE_FRESERVED = {6,7}; DDE_FAPPSTATUS = {8..15}; (* DDESTRUCT Format *) DDEFMT_TEXT = 1; PROCEDURE DdeInitiate (h: HWND; n,t:ARRAY OF CHAR) : BOOLEAN; PROCEDURE DdeRespond (c,s: HWND; n,t:ARRAY OF CHAR) : MRESULT; PROCEDURE DdePostMsg (f,t: HWND; m:CARDINAL; VAR d:DDESTRUCT; r:BOOL) : BOOL; CONST (* DDE Messages *) WM_DDE_FIRST = 00A0H; WM_DDE_INITIATE = 00A0H; WM_DDE_REQUEST = 00A1H; WM_DDE_ACK = 00A2H; WM_DDE_DATA = 00A3H; WM_DDE_ADVISE = 00A4H; WM_DDE_UNADVISE = 00A5H; WM_DDE_POKE = 00A6H; WM_DDE_EXECUTIVE = 00A7H; WM_DDE_TERMINATE = 00A8H; WM_DDE_INITIATEACK = 00A9H; WM_DDE_LAST = 00AFH; (*%E*) CONST WM_QUERYCONVERTPOS = 0B0H; (* Return values for WM_QUERYCONVERTPOS *) QCP_CONVERT = 1; QCP_NOCONVERT = 0; (**) (**--- Win HELP Structure ---------------------------------------------------*) (**) (*%T i_WINHELP*) TYPE HELPSUBTABLE = INTEGER; PHELPSUBTABLE = POINTER TO HELPSUBSABLE; HELPTABLE = RECORD AppWindow : CARDINAL; HelpSubTable: PHELPSUBTABLE; ExtPanel : CARDINAL; END; PHELPTABLE = POINTER TO HELPTABLE; HELPINIT = RECORD cb : CARDINAL; ReturnCode : LONGCARD; TutorialName : FarADDRESS; HelpTable : PHELPTABLE; HelpTableModule : HMODULE; AccelActionBarModule : HMODULE; AccelTable : CARDINAL; ActionBar : CARDINAL; HelpWindowTitle : FarADDRESS; ShowPanelId : CARDINAL; HelpLibraryName : FarADDRESS; END; CONST HWND_NULL = HWND (0); (* Constants used to define whether user wants to display panel using *) (* panel number or panel name. *) HM_RESOURCEID = 0; HM_PANELNAME = 1; HMPANELTYPE_NUMBER = 0; HMPANELTYPE_NAME = 1; (* Constants used to define how the panel IDs are displayed on *) (* help panels. *) CMIC_HIDE_PANEL_ID = 00H; CMIC_SHOW_PANEL_ID = 01H; CMIC_TOGGLE_PANEL_ID = 02H; PROCEDURE DestroyHelpInstance(HelpInstance : HWND): BOOLEAN; PROCEDURE CreateHelpInstance(hab : HAB; VAR HMInitStructure : HELPINIT) : HWND; PROCEDURE AssociateHelpInstance(HelpInstance, App: HWND) : BOOLEAN; PROCEDURE QueryHelpInstance(App: HWND) : HWND; PROCEDURE LoadHelpTable(HelpInstance: HWND; HelpTable : CARDINAL; Module : HMODULE) : BOOLEAN; PROCEDURE CreateHelpTable(HelpInstance: HWND; VAR HelpTable : HELPTABLE) : BOOLEAN; CONST HM_MSG_BASE = 0220H; HM_DISMISS_WINDOW = HM_MSG_BASE+01H; HM_DISPLAY_HELP = HM_MSG_BASE+02H; HM_EXT_HELP = HM_MSG_BASE+03H; HM_SET_ACTIVE_WINDOW = HM_MSG_BASE+04H; HM_LOAD_HELP_TABLE = HM_MSG_BASE+05H; HM_CREATE_HELP_TABLE = HM_MSG_BASE+06H; HM_SET_HELP_WINDOW_TITLE = HM_MSG_BASE+07H; HM_SET_SHOW_PANEL_ID = HM_MSG_BASE+08H; HM_REPLACE_HELP_FOR_HELP = HM_MSG_BASE+09H; HM_HELP_INDEX = HM_MSG_BASE+0AH; HM_HELP_CONTENTS = HM_MSG_BASE+0BH; HM_KEYS_HELP = HM_MSG_BASE+0CH; HM_SET_HELP_LIBRARY_NAME = HM_MSG_BASE+0DH; HM_ERROR = HM_MSG_BASE+0EH; HM_HELPSUBITEM_NOT_FOUND = HM_MSG_BASE+0FH; HM_QUERY_KEYS_HELP = HM_MSG_BASE+010H; HM_TUTORIAL = HM_MSG_BASE+011H; HM_EXT_HELP_UNDEFINED = HM_MSG_BASE+012H; HM_ACTIONBAR_COMMAND = HM_MSG_BASE+013H; HM_INFORM = HM_MSG_BASE+014H; HMERR_NO_FRAME_WND_IN_CHAIN = 01001H; HMERR_INVALID_ASSOC_APP_WND = 01002H; HMERR_INVALID_ASSOC_HELP_INST = 01003H; HMERR_INVALID_DESTROY_HELP_INST = 01004H; HMERR_NO_HELP_INST_IN_CHAIN = 01005H; HMERR_INVALID_HELP_INSTANCE_HDL = 01006H; HMERR_INVALID_QUERY_APP_WND = 01007H; HMERR_HELP_INST_CALLED_INVALID = 01008H; HMERR_HELPTABLE_UNDEFINE = 01009H; HMERR_HELP_INSTANCE_UNDEFINE = 0100AH; HMERR_HELPITEM_NOT_FOUND = 0100BH; HMERR_INVALID_HELPSUBITEM_SIZE = 0100CH; HMERR_HELPSUBITEM_NOT_FOUND = 0100DH; HMERR_INDEX_NOT_FOUND = 02001H; HMERR_CONTENT_NOT_FOUND = 02002H; HMERR_OPEN_LIB_FILE = 02003H; HMERR_READ_LIB_FILE = 02004H; HMERR_CLOSE_LIB_FILE = 02005H; HMERR_INVALID_LIB_FILE = 02006H; HMERR_NO_MEMORY = 02007H; HMERR_ALLOCATE_SEGMENT = 02008H; HMERR_FREE_MEMORY = 02009H; HMERR_PANEL_NOT_FOUND = 02010H; HMERR_DATABASE_NOT_OPEN = 02011H; (*%E*) (**) (**--- Win Load procedure ---------------------------------------------------*) (**) (*%T i_WINLOAD*) TYPE HLIB = HMODULE; PROCEDURE DeleteProcedure(h:HAB; wndproc: FarADDRESS): BOOLEAN; PROCEDURE DeleteLibrary(h:HAB; libhandle: HLIB): BOOLEAN; PROCEDURE LoadProcedure(h:HAB; libhandle: HLIB; VAR procname: ARRAY OF CHAR): FarADDRESS; PROCEDURE LoadLibrary(h:HAB; VAR libname: ARRAY OF CHAR): HLIB; (*%E*) (**) (**--- Win DBCS Structure ---------------------------------------------------*) (**) (*%T i_NLS*) CONST WM_DBCSFIRST = 0B0H; WM_DBCSLAST = 0CFH; WC_APPSTAT = FarADDRESS(0FFFF0010H); WC_KBDSTAT = FarADDRESS(0FFFF0011H); WC_PECIC = FarADDRESS(0FFFF0012H); WC_DBE_KKPOPUP = FarADDRESS(0FFFF0013H); (*%E *) END Win.