VirtualBox

source: kStuff/trunk/kProfiler2/kPrf2WinApi-gencode.sed@ 121

Last change on this file since 121 was 29, checked in by bird, 15 years ago

Finally got around execute the switch to the MIT license.

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id
File size: 3.6 KB
Line 
1# $Id: kPrf2WinApi-gencode.sed 29 2009-07-01 20:30:29Z bird $
2## @file
3# Generate code (for kernel32).
4#
5
6#
7# Copyright (c) 2008 Knut St. Osmundsen <[email protected]>
8#
9# Permission is hereby granted, free of charge, to any person
10# obtaining a copy of this software and associated documentation
11# files (the "Software"), to deal in the Software without
12# restriction, including without limitation the rights to use,
13# copy, modify, merge, publish, distribute, sublicense, and/or sell
14# copies of the Software, and to permit persons to whom the
15# Software is furnished to do so, subject to the following
16# conditions:
17#
18# The above copyright notice and this permission notice shall be
19# included in all copies or substantial portions of the Software.
20#
21# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
23# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
26# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
28# OTHER DEALINGS IN THE SOFTWARE.
29#
30
31# Example:
32# BOOL WINAPI FindActCtxSectionGuid( DWORD dwFlags, const GUID * lpExtensionGuid, ULONG ulSectionId, const GUID * lpGuidToFind, PACTCTX_SECTION_KEYED_DATA ReturnedData );
33#
34# Should be turned into:
35# typedef BOOL WINAPI FN_FindActCtxSectionGuid( DWORD dwFlags, const GUID * lpExtensionGuid, ULONG ulSectionId, const GUID * lpGuidToFind, PACTCTX_SECTION_KEYED_DATA ReturnedData );
36# __declspec(dllexport) BOOL WINAPI kPrf2Wrap_FindActCtxSectionGuid( DWORD dwFlags, const GUID * lpExtensionGuid, ULONG ulSectionId, const GUID * lpGuidToFind, PACTCTX_SECTION_KEYED_DATA ReturnedData )
37# {
38# static FN_FindActCtxSectionGuid *pfn = 0;
39# if (!pfn)
40# kPrfWrapResolve((void **)&pfn, "FindActCtxSectionGuid", &g_Kernel32);
41# return pfn( dwFlags, lpExtensionGuid, ulSectionId, lpGuidToFind, ReturnedData );
42# }
43#
44
45# Ignore empty lines.
46/^[[:space:]]*$/b delete
47
48# Some hacks.
49/([[:space:]]*VOID[[:space:]]*)/b no_hacking_void
50s/([[:space:]]*\([A-Z][A-Z0-9_]*\)[[:space:]]*)/( \1 a)/
51:no_hacking_void
52
53
54# Save the pattern space.
55h
56
57# Make the typedef.
58s/[[:space:]]\([A-Za-z_][A-Za-z0-9_]*\)(/ FN_\1(/
59s/^/typedef /
60p
61
62# Function definition
63g
64s/\n//g
65s/\r//g
66s/[[:space:]]\([A-Za-z_][A-Za-z0-9_]*\)(/ kPrf2Wrap_\1(/
67s/^/__declspec(dllexport) /
68s/;//
69p
70i\
71{
72
73# static FN_FindActCtxSectionGuid *pfn = 0;
74# if (!pfn)
75g
76s/^.*[[:space:]]\([A-Za-z_][A-Za-z0-9_]*\)(.*$/ static FN_\1 *pfn = 0;/
77p
78i\
79 if (!pfn)
80
81# kPrfWrapResolve((void **)&pfn, "FindActCtxSectionGuid", &g_Kernel32);
82g
83s/^.*[[:space:]]\([A-Za-z_][A-Za-z0-9_]*\)(.*$/ kPrf2WrapResolve((void **)\&pfn, "\1\", \&g_Kernel32);/
84p
85
86# The invocation and return statement.
87# Some trouble here....
88g
89/^VOID WINAPI/b void_return
90/^void WINAPI/b void_return
91/^VOID __cdecl/b void_return
92/^void __cdecl/b void_return
93/^VOID NTAPI/b void_return
94/^void NTAPI/b void_return
95s/^.*(/ return pfn(/
96b morph_params
97
98:void_return
99s/^.*(/ pfn(/
100
101:morph_params
102s/ *\[\] *//
103s/ \*/ /g
104s/, *[a-zA-Z_][^,)]* \([a-zA-Z_][a-zA-Z_0-9]* *)\)/, \1/g
105s/( *[a-zA-Z_][^,)]* \([a-zA-Z_][a-zA-Z_0-9]* *[,)]\)/( \1/g
106s/, *[a-zA-Z_][^,)]* \([a-zA-Z_][a-zA-Z_0-9]* *,\)/, \1/g
107s/, *[a-zA-Z_][^,)]* \([a-zA-Z_][a-zA-Z_0-9]* *,\)/, \1/g
108s/, *[a-zA-Z_][^,)]* \([a-zA-Z_][a-zA-Z_0-9]* *,\)/, \1/g
109s/, *[a-zA-Z_][^,)]* \([a-zA-Z_][a-zA-Z_0-9]* *,\)/, \1/g
110s/( VOID )/ ()/
111s/( void )/ ()/
112p
113i\
114}
115i\
116
117# Done
118:delete
119d
120
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette