Abandon the current work on windows-namespace-and-hresult-cleanup. I'll take a different approach.
This commit is contained in:
parent
a03754512f
commit
f1d9e36a0e
|
@ -1,55 +0,0 @@
|
||||||
@BOOL GetWindowPlacement HWND hwnd uiprivLPWWINDOWPLACEMENT wp == 0
|
|
||||||
$typedef const WINDOWPLACEMENT *uiprivLPCWINDOWPLACEMENT;
|
|
||||||
@BOOL SetWindowPlacement HWND hwnd uiprivLPCWINDOWPLACEMENT wp == 0
|
|
||||||
@HWND SetParent HWND hwnd HWND newParent == NULL
|
|
||||||
@BOOL GetClientRect HWND hwnd LPRECT r == 0
|
|
||||||
@BOOL GetWindowRect HWND hwnd LPRECT r == 0
|
|
||||||
@int GetClassNameW HWND hwnd LPWSTR name int n == 0
|
|
||||||
|
|
||||||
@BOOL SetWindowSubclass HWND hwnd SUBCLASSPROC proc UINT_PTR id DWORD_PTR dwRefData == FALSE
|
|
||||||
@BOOL RemoveWindowSubclass HWND hwnd SUBCLASSPROC proc UINT_PTR id == FALSE
|
|
||||||
|
|
||||||
@*HWND CreateDialogIndirectParamW HINSTANCE hInstance LPCDLGTEMPLATE dialog HWND parent DLGPROC proc LPARAM param == NULL
|
|
||||||
// note: this gives dialogs in libui the condition that they must NOT call uiprivTODOEndDialog() with a negative result code
|
|
||||||
@*INT_PTR DialogBoxIndirectParamW HINSTANCE hInstance LPCDLGTEMPLATE dialog HWND parent DLGPROC proc LPARAM param < 0
|
|
||||||
@BOOL EndDialog HWND hdlg INT_PTR result == 0
|
|
||||||
@*HWND GetDlgItem HWND hdlg int id == NULL
|
|
||||||
|
|
||||||
@*HMENU CreateMenu == NULL
|
|
||||||
@*HMENU CreatePopupMenu == NULL
|
|
||||||
@BOOL AppendMenuW HMENU menu UINT flags UINT_PTR id LPCWSTR text == 0
|
|
||||||
@BOOL SetMenu HWND hwnd HMENU menu == 0
|
|
||||||
@BOOL GetMenuItemInfoW HMENU menu UINT item BOOL byPosition LPMENUITEMINFO info == 0
|
|
||||||
@BOOL SetMenuItemInfoW HMENU menu UINT item BOOL byPosition LPMENUITEMINFO info == 0
|
|
||||||
|
|
||||||
@*HDC BeginPaint HWND hwnd LPPAINTSTRUCT ps == NULL
|
|
||||||
@*HDC GetDC HWND hwnd == NULL
|
|
||||||
@int ReleaseDC HWND hwnd HDC dc == 0
|
|
||||||
@*HDC CreateCompatibleDC HDC dc == NULL
|
|
||||||
@BOOL DeleteDC HDC dc == 0
|
|
||||||
$typedef const RECT *uiprivLPCRECT;
|
|
||||||
@BOOL InvalidateRect HWND hwnd uiprivLPCRECT r BOOL erase == 0
|
|
||||||
@BOOL ValidateRect HWND hwnd uiprivLPCRECT r == 0
|
|
||||||
|
|
||||||
@*HBITMAP CreateCompatibleBitmap HDC dc int width int height == NULL
|
|
||||||
@*HBRUSH CreatePatternBrush HBITMAP bitmap == NULL
|
|
||||||
@BOOL DeleteObject HGDIOBJ obj == 0
|
|
||||||
|
|
||||||
@BOOL SetBrushOrgEx HDC dc int x int y LPPOINT prev == 0
|
|
||||||
@int SetBkMode HDC dc int mode == 0
|
|
||||||
@BOOL BitBlt HDC dest int destX int destY int destWidth int destHeight HDC src int srcX int srcY DWORD op == 0
|
|
||||||
|
|
||||||
@BOOL GetTextMetricsW HDC dc LPTEXTMETRIC tm == 0
|
|
||||||
@BOOL APIENTRY GetTextExtentPoint32W HDC dc LPCWSTR str int n LPSIZE size == 0
|
|
||||||
|
|
||||||
@BOOL ReleaseCapture == 0
|
|
||||||
@BOOL _TrackMouseEvent LPTRACKMOUSEEVENT tme == 0
|
|
||||||
|
|
||||||
@BOOL GetScrollInfo HWND hwnd int bar LPSCROLLINFO si == 0
|
|
||||||
|
|
||||||
@BOOL SystemParametersInfoW UINT action UINT param PVOID v UINT winini == 0
|
|
||||||
@BOOL GetMonitorInfoW HMONITOR monitor LPMONITORINFO info == 0
|
|
||||||
|
|
||||||
@*int GetLocaleInfoEx LPCWSTR name LCTYPE type LPWSTR buf int n == 0
|
|
||||||
|
|
||||||
@BOOL UnhookWindowsHookEx HHOOK hook == 0
|
|
|
@ -1,29 +0,0 @@
|
||||||
{{/* 8 august 2018 */}}// this file is generated by tools/hresultwrap and should NOT be modified directly
|
|
||||||
#include "uipriv_windows.hpp"
|
|
||||||
|
|
||||||
static inline HRESULT lastErrorToHRESULT(DWORD lasterr, const char *funcname)
|
|
||||||
{
|
|
||||||
HRESULT hr;
|
|
||||||
|
|
||||||
hr = E_FAIL;
|
|
||||||
if (lasterr != 0)
|
|
||||||
hr = HRESULT_FROM_WIN32(lasterr);
|
|
||||||
uiprivImplBug("error calling %s: last error %I32d\n", funcname, lasterr);
|
|
||||||
return hr;
|
|
||||||
}{{range .}}
|
|
||||||
|
|
||||||
{{$narg := len .Arg}}HRESULT {{if .CallingConvention}}{{.CallingConvention}}{{else}}WINAPI{{end}} uiprivHR{{.Name}}({{range $i, $a := .Arg}}{{$a}}{{argcomma $i $narg}}{{end}}{{if .Save}}, _Out_ {{.Ret}} *outRet{{end}})
|
|
||||||
{
|
|
||||||
{{.Ret}} xyzret;
|
|
||||||
DWORD xyzlasterr;
|
|
||||||
|
|
||||||
{{if .Save}} if (outRet == NULL)
|
|
||||||
return E_POINTER;
|
|
||||||
{{end}} SetLastError(0);
|
|
||||||
xyzret = {{.Name}}({{range $i, $a := .Arg}}{{argname $a}}{{argcomma $i $narg}}{{end}});
|
|
||||||
xyzlasterr = GetLastError();
|
|
||||||
{{if .Save}} *outRet = xyzret;
|
|
||||||
{{end}} if (xyzret != {{.Failval}})
|
|
||||||
return S_OK;
|
|
||||||
return lastErrToHRESULT(xyzlasterr, "{{.Name}}()");
|
|
||||||
}{{/*TODO cleanup*/}}{{end}}
|
|
|
@ -1,134 +0,0 @@
|
||||||
# 8 august 2018
|
|
||||||
|
|
||||||
# TODO preserve lpRect on failure
|
|
||||||
func: {
|
|
||||||
name: "AdjustWindowRectEx"
|
|
||||||
arg: "_Inout_ LPRECT lpRect"
|
|
||||||
arg: "_In_ DWORD dwStyle"
|
|
||||||
arg: "_In_ BOOL bMenu"
|
|
||||||
arg: "_In_ DWORD dwExStyle"
|
|
||||||
ret: "BOOL"
|
|
||||||
failval: "0"
|
|
||||||
}
|
|
||||||
|
|
||||||
func: {
|
|
||||||
name: "CreateWindowExW"
|
|
||||||
arg: "_In_ DWORD dwExStyle"
|
|
||||||
arg: "_In_opt_ LPCWSTR lpClassName"
|
|
||||||
arg: "_In_opt_ LPCWSTR lpWindowName"
|
|
||||||
arg: "_In_ DWORD dwStyle"
|
|
||||||
arg: "_In_ int X"
|
|
||||||
arg: "_In_ int Y"
|
|
||||||
arg: "_In_ int nWidth"
|
|
||||||
arg: "_In_ int nHeight"
|
|
||||||
arg: "_In_opt_ HWND hWndParent"
|
|
||||||
arg: "_In_opt_ HMENU hMenu"
|
|
||||||
arg: "_In_opt_ HINSTANCE hInstance"
|
|
||||||
arg: "_In_opt_ LPVOID lpParam"
|
|
||||||
ret: "HWND"
|
|
||||||
failval: "NULL"
|
|
||||||
save: true
|
|
||||||
}
|
|
||||||
|
|
||||||
func: {
|
|
||||||
name: "DestroyWindow"
|
|
||||||
arg: "_In_ HWND hWnd"
|
|
||||||
ret: "BOOL"
|
|
||||||
failval: "0"
|
|
||||||
cleanup: true
|
|
||||||
}
|
|
||||||
|
|
||||||
# TODO failexpr is < 0
|
|
||||||
func: {
|
|
||||||
name: "GetMessageW"
|
|
||||||
arg: "_Out_ LPMSG lpMsg"
|
|
||||||
arg: "_In_opt_ HWND hWnd"
|
|
||||||
arg: "_In_ UINT wMsgFilterMin"
|
|
||||||
arg: "_In_ UINT wMsgFilterMax"
|
|
||||||
ret: "BOOL"
|
|
||||||
failval: "-1"
|
|
||||||
}
|
|
||||||
|
|
||||||
# TODO write a L'\0' to lpString[0] on failure
|
|
||||||
# TODO also add extra checks to make sure lpString is not NULL
|
|
||||||
func: {
|
|
||||||
name: "GetWindowTextW"
|
|
||||||
arg: "_In_ HWND hWnd"
|
|
||||||
arg: "_Out_writes_(nMaxCount) LPWSTR lpString"
|
|
||||||
arg: "_In_ int nMaxCount"
|
|
||||||
ret: "int"
|
|
||||||
failval: "0"
|
|
||||||
}
|
|
||||||
|
|
||||||
func: {
|
|
||||||
name: "KillTimer"
|
|
||||||
arg: "_In_opt_ HWND hWnd"
|
|
||||||
arg: "_In_ UINT_PTR uIDEvent"
|
|
||||||
ret: "BOOL"
|
|
||||||
failval: "0"
|
|
||||||
}
|
|
||||||
|
|
||||||
func: {
|
|
||||||
name: "PostMessageW"
|
|
||||||
arg: "_In_opt_ HWND hWnd"
|
|
||||||
arg: "_In_ UINT Msg"
|
|
||||||
arg: "_In_ WPARAM wParam"
|
|
||||||
arg: "_In_ LPARAM lParam"
|
|
||||||
ret: "BOOL"
|
|
||||||
failval: "0"
|
|
||||||
}
|
|
||||||
|
|
||||||
func: {
|
|
||||||
name: "RegisterClassW"
|
|
||||||
arg: "_In_ CONST WNDCLASSW *lpWndClass"
|
|
||||||
ret: "ATOM"
|
|
||||||
failval: "0"
|
|
||||||
save: true
|
|
||||||
}
|
|
||||||
|
|
||||||
func: {
|
|
||||||
name: "SetTimer"
|
|
||||||
arg: "_In_opt_ HWND hWnd"
|
|
||||||
arg: "_In_ UINT_PTR nIDEvent"
|
|
||||||
arg: "_In_ UINT uElapse"
|
|
||||||
arg: "_In_opt_ TIMERPROC lpTimerFunc"
|
|
||||||
ret: "UINT_PTR"
|
|
||||||
failval: "0"
|
|
||||||
}
|
|
||||||
|
|
||||||
func: {
|
|
||||||
name: "SetWindowPos"
|
|
||||||
arg: "_In_ HWND hWnd"
|
|
||||||
arg: "_In_opt_ HWND hWndInsertAfter"
|
|
||||||
arg: "_In_ int X"
|
|
||||||
arg: "_In_ int Y"
|
|
||||||
arg: "_In_ int cx"
|
|
||||||
arg: "_In_ int cy"
|
|
||||||
arg: "_In_ UINT uFlags"
|
|
||||||
ret: "BOOL"
|
|
||||||
failval: "0"
|
|
||||||
}
|
|
||||||
|
|
||||||
func: {
|
|
||||||
name: "SetWindowTextW"
|
|
||||||
arg: "_In_ HWND hWnd"
|
|
||||||
arg: "_In_opt_ LPCWSTR lpString"
|
|
||||||
ret: "BOOL"
|
|
||||||
failval: "0"
|
|
||||||
}
|
|
||||||
|
|
||||||
func: {
|
|
||||||
name: "UnregisterClassW"
|
|
||||||
arg: "_In_ LPCWSTR lpClassName"
|
|
||||||
arg: "_In_opt_ HINSTANCE hInstance"
|
|
||||||
ret: "BOOL"
|
|
||||||
failval: "0"
|
|
||||||
cleanup: true
|
|
||||||
}
|
|
||||||
|
|
||||||
func: {
|
|
||||||
name: "UpdateWindow"
|
|
||||||
arg: "_In_ HWND hWnd"
|
|
||||||
ret: "BOOL"
|
|
||||||
failval: "0"
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
./hresultwrap funclist.textpb cpp.template
|
|
|
@ -1,70 +0,0 @@
|
||||||
// 8 august 2018
|
|
||||||
// usage: hresultwrap funclist template out
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"io/ioutil"
|
|
||||||
"text/template"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
func argname(arg string) string {
|
|
||||||
fields := strings.Fields(arg)
|
|
||||||
last := fields[len(fields) - 1]
|
|
||||||
start := strings.LastIndexFunc(last, func(r rune) bool {
|
|
||||||
return !(r >= 'A' && r <= 'Z') &&
|
|
||||||
!(r >= 'a' && r <= 'z') &&
|
|
||||||
!(r >= '0' && r <= '9') &&
|
|
||||||
r != '_'
|
|
||||||
})
|
|
||||||
if start == -1 {
|
|
||||||
return last
|
|
||||||
}
|
|
||||||
// TODO replace + 1 with + len of that last rune
|
|
||||||
return last[start + 1:]
|
|
||||||
}
|
|
||||||
|
|
||||||
func argcomma(n, len int) string {
|
|
||||||
if n == len - 1 {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return ", "
|
|
||||||
}
|
|
||||||
|
|
||||||
var templateFuncs = template.FuncMap{
|
|
||||||
"argname": argname,
|
|
||||||
"argcomma": argcomma,
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
if len(os.Args) != 3 {
|
|
||||||
fmt.Fprintf(os.Stderr, "usage: %s funclist template\n", os.Args[0])
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
b, err := ioutil.ReadFile(os.Args[1])
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintf(os.Stderr, "error reading %s: %v\n", os.Args[1], err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
var f File
|
|
||||||
err = proto.UnmarshalText(string(b), &f)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintf(os.Stderr, "error parsing %s: %v\n", os.Args[1], err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
tmpl, err := template.New(os.Args[2]).Funcs(templateFuncs).ParseFiles(os.Args[2])
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintf(os.Stderr, "error parsing %s: %v\n", os.Args[2], err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
err = tmpl.Execute(os.Stdout, f.Func)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintf(os.Stderr, "error executing template: %v\n", err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
// 8 august 2018
|
|
||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
option go_package = "main";
|
|
||||||
|
|
||||||
message File {
|
|
||||||
repeated Function func = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Function {
|
|
||||||
string name = 1;
|
|
||||||
string calling_convention = 2; // defaults to WINAPI
|
|
||||||
repeated string arg = 3;
|
|
||||||
string ret = 4;
|
|
||||||
string failval = 5;
|
|
||||||
bool save = 6;
|
|
||||||
bool cleanup = 7;
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
rm -f hresultwrap.pb.go hresultwrap &&
|
|
||||||
protoc --go_out=. hresultwrap.proto &&
|
|
||||||
go build hresultwrap.go hresultwrap.pb.go
|
|
Loading…
Reference in New Issue