Source file: /~heha/basteln/PC/oszi/oszi.zip/src/WUTILS.H

/*********************************************************
 **   WUTILS.H - als Gegenstück zum PASCAL WUTILS.PAS   **
 *********************************************************
 * Dient 1. zur Anpassung der Unterschiede Win16<->Win32 *
 * und 2. zur Nachbildung der "fehlenden" Funktionen     *
 * haftmann#software 07/04				 *
 *
 * Die wutils.obj ist im Gegensatz zur wutils.tpw für	 *
 * jedes Projekt neu zu erzeugen und ggf. nicht benutzte *
 * Funktionen zu entfernen (.obj ist keine .lib bei	 *
 * BorlandC); der Kode ist abhängig von Speichermodell	 *
 * und Aufrufkonvention					 */

#ifndef WUTILS_H
#define WUTILS_H

/* Erster Teil: Standard-Includes sowie Unterschiede bügeln */
#define STRICT
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <windowsx.h>	// Message-Cracker-Makros (un[ter]dokumentiert)
#include <mmsystem.h>
#include <shlwapi.h>

#define VPOINTERS(struc) typedef struc *P##struc,NEAR*NP##struc,FAR*LP##struc;
#define CPOINTERS(struc) typedef const struc *PC##struc,NEAR*NPC##struc,FAR*LPC##struc;
#define POINTERS(struc) VPOINTERS(struc) CPOINTERS(struc)

#ifdef WIN32
# if defined(UNICODE) && !defined(_UNICODE)
#  define _UNICODE	// windows.h will UNICODE, tchar.h will _UNICODE
# endif
# include <tchar.h>	// "Umschalt-Makros" _tcschr, _stscanf, _stprintf
# include <commctrl.h>
typedef LPCTSTR PCTSTR;
# define huge		// wird zu nichts
# ifndef __cplusplus
typedef enum {false,true} bool;	// gibt's nicht in C!
# endif
#else	// Win16, getestet ist's zurzeit nur mit Borland C++ 3.1
typedef int INT;
typedef char CHAR,TCHAR;
typedef void*PVOID;
typedef enum {false,true} bool;	// gibt's nicht in BC3.1!
typedef LPSTR LPTSTR;
typedef LPCSTR LPCTSTR;
typedef const CHAR *PCTSTR;
typedef UINT FAR*LPUINT;
typedef POINT POINTS;	// Point-Short
POINTERS(POINTS)
typedef struct {
 WORD	wFormatTag;
 WORD	nChannels;
 DWORD	nSamplesPerSec;
 DWORD	nAvgBytesPerSec;
 WORD	nBlockAlign;
 WORD	wBitsPerSample;
 WORD	cbSize;		// Extra-Information NACH cbSize! Meist 0
}WAVEFORMATEX;
POINTERS(WAVEFORMATEX)
# define waveInOpen(a,b,c,d,e,f) waveInOpen(a,b,(LPWAVEFORMAT)c,d,e,f)
# define GetCurrentThread() GetCurrentTask()
# include <stddef.h>
typedef wchar_t const far*LPCWSTR;
# include "commctrl.h"	// eigene Version vorziehen
# include <commdlg.h>	// Standard bei Win32
# include <ddeml.h>	// Standard bei Win32
# include <string.h>	// memset u.ä.
# define _stdcall _cdecl
# define va_list const void far*
# define _fastcall _fastcall near
//#define min(a,b) ((a)<(b)?(a):(b))
//#define max(a,b) ((a)>(b)?(a):(b))
typedef TCHAR*PTSTR;
typedef UINT MMRESULT;
# define TEXT(x) x
# define ZeroMemory(p,l) memset(p,0,l)
# define CharNext(s) (LPTSTR)AnsiNext(s)
# define CopyMemory(d,s,l) hmemcpy(d,s,l)
# define MoveMemory(d,s,l) memmove(d,s,l)
# define GET_WM_COMMAND_CMD(w,l) HIWORD(l)
# define _tcschr strchr
# define _stscanf sscanf
# define _stprintf sprintf

# define IDC_SIZEALL IDC_SIZE
# define MAKEWORD(l,h) (((h)<<8)|(l))
# define MAKEPOINTS MAKEPOINT
# define GET_X_LPARAM(lp) (short)LOWORD(lp)
# define GET_Y_LPARAM(lp) (short)HIWORD(lp)
# define MAX_PATH 80		// für KURZE Dateinamen!
# define IDHELP 9
# define MFT_RADIOCHECK 0x200
# define CP_WINNEUTRAL CP_WINANSI

# define VK_XBUTTON1		0x05
# define VK_XBUTTON2		0x06
# define VK_KANA		0x15
# define VK_JUNJA		0x17
# define VK_FINAL		0x18
# define VK_KANJI		0x19
# define VK_NONCONVERT		0x1D
# define VK_ACCEPT		0x1E
# define VK_MODECHANGE		0x1F
# define VK_PRINT		0x2A
# define VK_LWIN		0x5B
# define VK_RWIN		0x5C
# define VK_APPS		0x5D	// ContextKey
# define VK_SLEEP		0x5F
# define VK_LSHIFT		0xA0
# define VK_RSHIFT		0xA1
# define VK_LCONTROL		0xA2
# define VK_RCONTROL		0xA3
# define VK_LMENU		0xA4
# define VK_RMENU		0xA5
# define VK_BROWSER_BACK	0xA6
# define VK_BROWSER_FORWARD	0xA7
# define VK_BROWSER_REFRESH	0xA8
# define VK_BROWSER_STOP	0xA9
# define VK_BROWSER_SEARCH	0xAA
# define VK_BROWSER_FAVORITES	0xAB
# define VK_BROWSER_HOME	0xAC
# define VK_VOLUME_MUTE		0xAD
# define VK_VOLUME_DOWN		0xAE
# define VK_VOLUME_UP		0xAF
# define VK_MEDIA_NEXT_TRACK	0xB0
# define VK_MEDIA_PREV_TRACK	0xB1
# define VK_MEDIA_STOP		0xB2
# define VK_MEDIA_PLAY_PAUSE	0xB3
# define VK_LAUNCH_MAIL		0xB4
# define VK_LAUNCH_MEDIA_SELECT	0xB5
# define VK_LAUNCH_APP1		0xB6
# define VK_LAUNCH_APP2		0xB7

# define WM_MOUSEWHEEL		0x020A
# define MSH_MOUSEWHEEL		"MSWHEEL_ROLLMSG"
# define WHEEL_DELTA		120
# define WM_SIZING		0x0214
# define WM_MOVING		0x0216
# define WMSZ_LEFT		1
# define WMSZ_RIGHT		2
# define WMSZ_TOP		3
# define WMSZ_TOPLEFT		4
# define WMSZ_TOPRIGHT		5
# define WMSZ_BOTTOM		6
# define WMSZ_BOTTOMLEFT	7
# define WMSZ_BOTTOMRIGHT	8
# define WM_PRINT			0x0317
# define WM_PRINTCLIENT			0x0318
# define WM_NOTIFY			0x004E
# define WM_INPUTLANGCHANGEREQUEST	0x0050
# define WM_INPUTLANGCHANGE		0x0051
# define WM_TCARD			0x0052
# define WM_HELP			0x0053
# define WM_CONTEXTMENU			0x007B
# define WM_STYLECHANGING		0x007C
# define WM_STYLECHANGED		0x007D
# define WM_DISPLAYCHANGE		0x007E
# define WM_NCMOUSEHOVER		0x02A0	/*??*/
# define WM_MOUSEHOVER			0x02A1
# define WM_NCMOUSELEAVE		0x02A2	/*??*/
# define WM_MOUSELEAVE			0x02A3
# define CF_SELECTSCRIPT	0x00400000L
# define CF_NOSCRIPTSEL		0x00800000L
# define CF_NOVERTFONTS		0x01000000L
# define OFN_LONGNAMES		0x00200000L
# define INVALID_HANDLE_VALUE	((HANDLE)-1)
# define WF_WINNT		0x4000
typedef struct{
 UINT cbSize;
 int iContextType;
 int iCtrlId;
 HWND hItemHandle;
 DWORD dwContextId;
 DWORD MousePos;
}HELPINFO;
VPOINTERS(HELPINFO)
# define HELPINFO_WINDOW	1
# define HELPINFO_MENUITEM	2
#endif //WIN32

typedef VOID NEAR*NPVOID;
CPOINTERS(RECT)
CPOINTERS(POINT)
CPOINTERS(HELPINFO)

#ifdef UNICODE
# define FORMATPSTR L"%S"	// Formatier-Anweisung für "normalen" String
# define FORMATPWSTR L"%s"	// Formatier-Anweisung für "weiten" String
#else
# define FORMATPSTR "%s"
# define FORMATPWSTR "%S"
#endif

#define HKCR HKEY_CLASSES_ROOT
#define HKCU HKEY_CURRENT_USER
#define HKLM HKEY_LOCAL_MACHINE
#define HKCC HKEY_CURRENT_CONFIG
#define HKU  HKEY_USERS
#define HKPD HKEY_PERFORMANCE_DATA
#define HKDD HKEY_DYN_DATA

// Extrem wichtige ("fehlende") Makros für Win16 UND Win32
#define T(x) TEXT(x)		// Schreibfaulheit...
#define elemof(x) (sizeof(x)/sizeof(*(x)))	// Elemente eines Arrays
#define nobreak			// expliziter Durchlauf bei switch/case

/* Zweiter Teil: "Fehlende" Funktionen nachbilden */
#ifdef __cplusplus
extern "C" {
#endif

#ifdef __BORLANDC__		// Sorgendkind BC31: bei <extern "C">
# define _defentry_ PASCAL	// schaltet er auf stets auf <cdecl> um,
#else				// aber eben nicht bei C (ohne ++):
# define _defentry_		// Kollision der Objektdateien bei C++-
#endif				// Programmierung

#ifdef WIN32
extern HINSTANCE HInstance;	// Diese Programm-Datensegment
#else
#define HInstance (HINSTANCE)_DS// Datensegmentregister bei BC und Win16
#endif				// (eigentlich nur bei SMALL und COMPACT!)

extern PTSTR MBoxTitle;

int  _defentry_ Limit(int x, int u, int o);
#ifdef WIN32
# define LimitL Limit	// dasselbe
bool ScreenToClientS(HWND w,POINTS*ps);	// Short-Punkt-Version
bool ClientToScreenS(HWND w,POINTS*ps);
bool PtInRectS(PCRECT r,POINTS p);
// Das folgende Makro expandiert wParam,lParam für Send/PostMessage
# define CONTROLPARAMS(id,wnd,notify) MAKELONG((id),(notify)),(LPARAM)(wnd)
#else
long _defentry_ LimitL(long x, long u, long o);
# define ScreenToClientS ScreenToClient
# define ClientToScreenS ClientToScreen
# define PtInRectS PtInRect
# define CONTROLPARAMS(id,wnd,notify) (id),MAKELONG((wnd),(notify))
#endif
//Die folgenden Makros erzeugen die Argumente für Send/PostMessage,
//am einfachsten sit CONTROLPARAMS3 zu verwenden
#define CONTROLPARAMS2(wnd,notify) CONTROLPARAMS(GetDlgCtrlID(wnd),wnd,notify)
#define CONTROLPARAMS3(msg,wnd,notify) GetParent(wnd),(msg),CONTROLPARAMS2(wnd,notify)
#define CONTROLPARAMS4(msg,id,wnd,notify) GetParent(wnd),(msg),CONTROLPARAMS(id,wnd,notify)
#define CONTROLPARAMS5(dst,msg,id,wnd,notify) (dst),(msg),CONTROLPARAMS(id,wnd,notify)
UINT _defentry_ InitStruct(void*buf, unsigned len);
int  _defentry_ vMBox(HWND Wnd, UINT id, UINT style, va_list arglist);
int  _cdecl MBox(HWND Wnd, UINT id, UINT style,...);
void _defentry_ SetEditFocus(HWND Wnd, UINT id);
PTSTR _defentry_ GetFileNamePtr(PTSTR s);
PTSTR _defentry_ GetFileNameExt(PTSTR s);
BYTE _defentry_ MoveRectIntoRect(PRECT R, PCRECT R2);
void _defentry_ GetFullScreenRect(PRECT R);
BYTE _defentry_ MoveRectIntoFullScreen(PRECT R);
int  _defentry_ MoveRectNoIntersect(PRECT R, PCRECT vis, PCRECT border);
BOOL _defentry_ EnableDlgItem(HWND Wnd, UINT id, BOOL state);
int  _defentry_ GetRadioCheck(HWND Wnd, UINT u, UINT o);
UINT _defentry_ GetCheckboxGroup(HWND Wnd, UINT u, UINT o);
void _defentry_ SetCheckboxGroup(HWND Wnd, UINT u, UINT o, UINT v);
void _defentry_ EnableMenuGroup(HMENU m,UINT u, UINT o, UINT mask, UINT flags);
BOOL _defentry_ GetModifiedEditText(HWND w, PTSTR buf, UINT buflen);
BOOL _defentry_ GetModifiedEditItemText(HWND w, UINT id, PTSTR buf, UINT buflen);
void _defentry_ StripAmp(PTSTR s);		// Kaufmanns-Und wegschneiden
void _defentry_ InsertAmp(PTSTR s, size_t buflen, int pos);	// Kaufmanns-Und einfügen
int  _defentry_ iitrafo(int x, int a, int e, int A, int E);
int  _defentry_ bsf(UINT w);	// Niederwertigstes Bit suchen, Nummer liefern
int  _defentry_ bsr(UINT w);	// Höchstwertiges Bit suchen, -1 bei w=0
BOOL _defentry_ IsClassName(HWND w, LPCTSTR s);
// Kodes für MoveRectIntoRect(), MoveRectIntoFullScreen()
#define MOVERECT_LEFT	1	// nach rechts(!), weil links überhängend
#define MOVERECT_TOP	2	// nach unten(!), weil oben überhängend
#define MOVERECT_RIGHT	4	// usw.
#define MOVERECT_BOTTOM	8	// (passend zur RECT-Struktur-Komponenten)

#ifdef __cplusplus
}
#endif

#endif //WUTILS_H
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded