mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
- Remove old RPCRT4.
svn path=/trunk/; revision=9305
This commit is contained in:
parent
97a1bb9c2e
commit
4aeca8b2b1
12 changed files with 0 additions and 1001 deletions
|
@ -1,117 +0,0 @@
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __LIB_RPCRT4_INCLUDE_RPC_H
|
|
||||||
#define __LIB_RPCRT4_INCLUDE_RPC_H
|
|
||||||
|
|
||||||
#define RPC_MGR_EPV VOID
|
|
||||||
typedef RPC_BINDING_HANDLE handle_t
|
|
||||||
|
|
||||||
/*
|
|
||||||
* RPC packet types
|
|
||||||
*/
|
|
||||||
#define RPC_REQUEST (0x0)
|
|
||||||
#define RPC_PING (0x1)
|
|
||||||
#define RPC_RESPONSE (0x2)
|
|
||||||
#define RPC_FAULT (0x3)
|
|
||||||
#define RPC_WORKING (0x4)
|
|
||||||
#define RPC_NOCALL (0x5)
|
|
||||||
#define RPC_REJECT (0x6)
|
|
||||||
#define RPC_ACK (0x7)
|
|
||||||
#define RPC_CL_CANCEL (0x8)
|
|
||||||
#define RPC_FACK (0x9)
|
|
||||||
#define RPC_CANCEL_ACK (0xa)
|
|
||||||
#define RPC_BIND (0xb)
|
|
||||||
#define RPC_BINDACK (0xc)
|
|
||||||
#define RPC_BINDNACK (0xd)
|
|
||||||
#define RPC_ALTCONT (0xe)
|
|
||||||
#define RPC_AUTH3 (0xf)
|
|
||||||
#define RPC_BINDCONT (0x10)
|
|
||||||
#define RPC_SHUTDOWN (0x10)
|
|
||||||
#define RPC_CO_CANCEL (0x11)
|
|
||||||
#define RPC_ORPHANED (0x12)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Common RPC packet header
|
|
||||||
*/
|
|
||||||
typedef struct _RPC_HEADER_PACKET
|
|
||||||
{
|
|
||||||
UCHAR MajorVersion;
|
|
||||||
UCHAR MinorVersion;
|
|
||||||
UCHAR PacketType;
|
|
||||||
UCHAR Flags;
|
|
||||||
ULONG DataRep;
|
|
||||||
USHORT FragLen;
|
|
||||||
USHORT AuthLen;
|
|
||||||
ULONG CallId;
|
|
||||||
} RPC_HEADER_PACKET, *PRPC_HEADER_PACKET;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Additional header for a RPC request packet
|
|
||||||
*/
|
|
||||||
typedef struct _RPC_REQUEST_PACKET
|
|
||||||
{
|
|
||||||
ULONG AllocHint;
|
|
||||||
USHORT ContextId;
|
|
||||||
USHORT Opcode;
|
|
||||||
} RPC_REQUEST_PACKET, *PRPC_REQUEST_PACKET;
|
|
||||||
|
|
||||||
typedef struct _RPC_RESPONSE_PACKET
|
|
||||||
{
|
|
||||||
ULONG AllocHint;
|
|
||||||
USHORT ContextId;
|
|
||||||
UCHAR CancelCount;
|
|
||||||
UCHAR Reserved;
|
|
||||||
} RPC_RESPONSE_PACKET, *PRPC_RESPONSE_PACKET;
|
|
||||||
|
|
||||||
typedef struct _RPC_VERSION
|
|
||||||
{
|
|
||||||
USHORT MajorVersion;
|
|
||||||
USHORT MinorVersion;
|
|
||||||
} RPC_VERSION, *PRPC_VERSION;
|
|
||||||
|
|
||||||
typedef struct _RPC_SYNTAX_IDENTIFIER
|
|
||||||
{
|
|
||||||
GUID SyntaxGuid;
|
|
||||||
RPC_VERSION SyntaxVersion;
|
|
||||||
} RPC_SYNTAX_IDENTIFIER, *PRPC_SYNTAX_IDENTIFIER;
|
|
||||||
|
|
||||||
typedef struct _RPC_MESSAGE
|
|
||||||
{
|
|
||||||
RPC_BINDING_HANDLE Handle;
|
|
||||||
ULONG DataRepresentation;
|
|
||||||
VOID* Buffer;
|
|
||||||
USHORT BufferLength;
|
|
||||||
USHORT ProcNum;
|
|
||||||
PRPC_SYNTAX_IDENTIFIER TransferSyntax;
|
|
||||||
VOID* RpcInterfaceInformation;
|
|
||||||
VOID* ReservedForRuntime;
|
|
||||||
RPC_MGR_EPV* ManagerEpv;
|
|
||||||
VOID* ImportContext;
|
|
||||||
ULONG RpcFlags;
|
|
||||||
} RPC_MESSAGE, *PRPC_MESSAGE;
|
|
||||||
|
|
||||||
typedef VOID (*RPC_DISPATCH_FUNCTION)(PRPC_MESSAGE Message);
|
|
||||||
|
|
||||||
typedef struct _RPC_DISPATCH_TABLE
|
|
||||||
{
|
|
||||||
ULONG DispatchTableCount;
|
|
||||||
RPC_DISPATCH_FUNCTION* DispatchTable;
|
|
||||||
LONG Reserved;
|
|
||||||
} RPC_DISPATCH_TABLE, *PRPC_DISPATCH_TABLE;
|
|
||||||
|
|
||||||
typedef struct _RPC_SERVER_INTERFACE
|
|
||||||
{
|
|
||||||
ULONG Length;
|
|
||||||
RPC_SYNTAX_IDENTIFIER InterfaceId;
|
|
||||||
RPC_SYNTAX_IDENTIFIER TransferSyntax;
|
|
||||||
PRPC_DISPATCH_TABLE DispatchTable;
|
|
||||||
ULONG RpcProtseqEndpointCount;
|
|
||||||
PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
|
|
||||||
RPC_MGR_EPV* DefaultManagerEpv;
|
|
||||||
VOID CONST* InterpreterInfo;
|
|
||||||
ULONG Flags;
|
|
||||||
} RPC_SERVER_INTERFACE, *PRPC_SERVER_INTERFACE;
|
|
||||||
|
|
||||||
#endif /* __LIB_RPCRT4_INCLUDE_RPC_H */
|
|
|
@ -1,43 +0,0 @@
|
||||||
#ifndef __INCLUDE_RPCRT4_RPC_H
|
|
||||||
#define __INCLUDE_RPCRT4_RPC_H
|
|
||||||
|
|
||||||
typedef void* RPC_BINDING_HANDLE;
|
|
||||||
typedef long RPC_STATUS;
|
|
||||||
|
|
||||||
typedef ULONG RPC_PROTOCOL_ID;
|
|
||||||
typedef ULONG RPC_PROTSEQ_ID;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
RPC_PROTSEQ_ID ProtseqId;
|
|
||||||
ULONG Len;
|
|
||||||
sockaddr_t sa;
|
|
||||||
} *PRPC_ADDR;
|
|
||||||
|
|
||||||
typedef struct _RPC_PROTOCOL_VERSION
|
|
||||||
{
|
|
||||||
ULONG MajorVersion;
|
|
||||||
ULONG MinorVersion;
|
|
||||||
} RPC_PROTOCOL_VERSION, *PRPC_PROTOCOL_VERSION;
|
|
||||||
|
|
||||||
typedef struct _RPC_BINDING_REP
|
|
||||||
{
|
|
||||||
LIST_ENTRY ListEntry;
|
|
||||||
RPC_PROTOCOL_ID ProtocolId;
|
|
||||||
LONG ReferenceCount;
|
|
||||||
UUID ObjectId;
|
|
||||||
PRPC_ADDR RpcAddr;
|
|
||||||
BOOLEAN IsServer;
|
|
||||||
BOOLEAN AddrIsDynamic;
|
|
||||||
PVOID AuthInfo;
|
|
||||||
ULONG ExtendedBindFlag;
|
|
||||||
ULONG BoundServerInstance;
|
|
||||||
ULONG AddrHasEndpoint;
|
|
||||||
LONG CallsInProgress;
|
|
||||||
PVOID NsSpecific;
|
|
||||||
PRPC_PROTOCOL_VERSION ProtocolVersion;
|
|
||||||
} RPC_BINDING_REP, *PRPC_BINDING_REP;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __INCLUDE_RPCRT4_RPC_H */
|
|
|
@ -1,54 +0,0 @@
|
||||||
# $Id: Makefile,v 1.3 2003/08/07 04:03:23 royce Exp $
|
|
||||||
#
|
|
||||||
# ReactOS Operating System
|
|
||||||
#
|
|
||||||
TARGET=midl
|
|
||||||
|
|
||||||
CFLAGS =
|
|
||||||
|
|
||||||
# require os code to explicitly request A/W version of structs/functions
|
|
||||||
CFLAGS += -D_DISABLE_TIDENTS
|
|
||||||
|
|
||||||
all: midl$(EXE_POSTFIX)
|
|
||||||
|
|
||||||
idl.tab.o: idl.y
|
|
||||||
bison -t -v -d idl.y
|
|
||||||
$(NATIVE_CC) -c idl.tab.c -o idl.tab.o
|
|
||||||
|
|
||||||
lex.yy.o: idl.l idl.tab.h
|
|
||||||
flex idl.l
|
|
||||||
$(NATIVE_CC) -c lex.yy.c -o lex.yy.o
|
|
||||||
|
|
||||||
midl.o: midl.c midl.h idl.tab.h
|
|
||||||
$(NATIVE_CC) -c midl.c -o midl.o
|
|
||||||
|
|
||||||
option.o: option.c midl.h idl.tab.h
|
|
||||||
$(NATIVE_CC) -c option.c -o option.o
|
|
||||||
|
|
||||||
interface.o: interface.c midl.h idl.tab.h
|
|
||||||
$(NATIVE_CC) -c interface.c -o interface.o
|
|
||||||
|
|
||||||
types.o: types.c midl.h idl.tab.h types.h
|
|
||||||
$(NATIVE_CC) -c types.c -o types.o
|
|
||||||
|
|
||||||
midl$(EXE_POSTFIX): idl.tab.o lex.yy.o midl.o option.o interface.o types.o
|
|
||||||
$(NATIVE_CC) midl.o idl.tab.o lex.yy.o option.o interface.o -lfl \
|
|
||||||
types.o -o midl$(EXE_POSTFIX)
|
|
||||||
|
|
||||||
include ../../../rules.mak
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
[
|
|
||||||
uuid(b574a080-aceb-11d3-95f9-aa43ded19f71),
|
|
||||||
version(1.0),
|
|
||||||
pointer_default(unique)
|
|
||||||
]
|
|
||||||
interface hello
|
|
||||||
{
|
|
||||||
struct _hello_struct
|
|
||||||
{
|
|
||||||
int hello_member;
|
|
||||||
int hello1_member;
|
|
||||||
float hello3_member;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _hello2_struct
|
|
||||||
{
|
|
||||||
int hello2_member;
|
|
||||||
} __hello2_struct;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
int hello3_member;
|
|
||||||
} hello3_typedef;
|
|
||||||
|
|
||||||
typedef int hello_t;
|
|
||||||
|
|
||||||
void Hello4Proc([in] hello3_typedef ii);
|
|
||||||
void Hello3Proc([in] __hello2_struct h);
|
|
||||||
void Hello2Proc([in] struct _hello_struct h);
|
|
||||||
void HelloProc([in] hello_t pszString);
|
|
||||||
void Shutdown(void);
|
|
||||||
void RpcBenchmark(handle_t Server,
|
|
||||||
[out, size_is(32768)] unsigned char* pcOutBuffer);
|
|
||||||
}
|
|
|
@ -1,114 +0,0 @@
|
||||||
%{
|
|
||||||
#include "midl.h"
|
|
||||||
#include "idl.tab.h"
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
int lineno = 1;
|
|
||||||
void yyerror(char* s);
|
|
||||||
char* current_file;
|
|
||||||
int nr_errors = 0;
|
|
||||||
|
|
||||||
#define TOK(n) { yylval.token = n; return n; }
|
|
||||||
|
|
||||||
%}
|
|
||||||
|
|
||||||
DIGIT [0-9]
|
|
||||||
ID [a-zA-Z_][a-zA-Z0-9_]*
|
|
||||||
UUID [a-z0-9]*
|
|
||||||
|
|
||||||
%%
|
|
||||||
|
|
||||||
uuid { TOK(UUID_KEYWORD); }
|
|
||||||
version { TOK(VERSION_KEYWORD); }
|
|
||||||
pointer_default { TOK(POINTER_DEFAULT_KEYWORD); }
|
|
||||||
unique { TOK(UNIQUE_KEYWORD); }
|
|
||||||
interface { TOK(INTERFACE_KEYWORD); }
|
|
||||||
aggregatable { TOK(AGGREGATABLE_KEYWORD); }
|
|
||||||
allocate { TOK(ALLOCATE_KEYWORD); }
|
|
||||||
appobject { TOK(APPOBJECT_KEYWORD); }
|
|
||||||
|
|
||||||
|
|
||||||
all_nodes { TOK(ALL_NODES_KEYWORD); }
|
|
||||||
single_node { TOK(SINGLE_NODE_KEYWORD); }
|
|
||||||
free { TOK(FREE_KEYWORD); }
|
|
||||||
dont_free { TOK(DONT_FREE_KEYWORD); }
|
|
||||||
|
|
||||||
typedef { TOK(TYPEDEF_KEYWORD); }
|
|
||||||
struct { TOK(STRUCT_KEYWORD); }
|
|
||||||
const { TOK(CONST_KEYWORD); }
|
|
||||||
|
|
||||||
signed { TOK(SIGNED_KEYWORD); }
|
|
||||||
unsigned { TOK(UNSIGNED_KEYWORD); }
|
|
||||||
|
|
||||||
in { TOK(IN_KEYWORD); }
|
|
||||||
out { TOK(OUT_KEYWORD); }
|
|
||||||
string { TOK(STRING_KEYWORD); }
|
|
||||||
implicit_handle { TOK(IMPLICIT_HANDLE_KEYWORD); }
|
|
||||||
auto_handle { TOK(AUTO_HANDLE_KEYWORD); }
|
|
||||||
size_is { TOK(SIZE_IS_KEYWORD); }
|
|
||||||
length_is { TOK(LENGTH_IS_KEYWORD); }
|
|
||||||
|
|
||||||
{ID} { int n;
|
|
||||||
if ((n = token_to_type(yytext)) != 0)
|
|
||||||
{
|
|
||||||
yylval.tval = n;
|
|
||||||
return(TYPE_KEYWORD);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
yylval.id = strdup(yytext);
|
|
||||||
return(ID_TOKEN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{DIGIT}+ { yylval.number = atoi(yytext);
|
|
||||||
return(NUMBER_TOKEN); }
|
|
||||||
|
|
||||||
{DIGIT}+"."{DIGIT}+ { char* ebuf;
|
|
||||||
yylval.version.major = strtoul(yytext, &ebuf, 0);
|
|
||||||
yylval.version.minor = strtoul(ebuf + 1, NULL, 0);
|
|
||||||
return(VERSION_TOKEN); }
|
|
||||||
|
|
||||||
{UUID}+"-"{UUID}+"-"{UUID}+"-"{UUID}+"-"{UUID}+ { yylval.uuid = strdup(yytext);
|
|
||||||
return(UUID_TOKEN); }
|
|
||||||
|
|
||||||
";" { TOK(LINE_TERMINATOR); }
|
|
||||||
|
|
||||||
"(" { TOK(LEFT_BRACKET); }
|
|
||||||
|
|
||||||
")" { TOK(RIGHT_BRACKET); }
|
|
||||||
|
|
||||||
"," { TOK(COMMA); }
|
|
||||||
|
|
||||||
"{" { TOK(LCURLY_BRACKET); }
|
|
||||||
|
|
||||||
"}" { TOK(RCURLY_BRACKET); }
|
|
||||||
|
|
||||||
"[" { TOK(LSQBRACKET); }
|
|
||||||
|
|
||||||
"]" { TOK(RSQBRACKET); }
|
|
||||||
|
|
||||||
"*" { TOK(STAR); }
|
|
||||||
|
|
||||||
"=" { TOK(ASSIGNMENT); }
|
|
||||||
|
|
||||||
\n lineno++;
|
|
||||||
|
|
||||||
[ \t\r]+ ;
|
|
||||||
|
|
||||||
. yyerror("invalid character");
|
|
||||||
|
|
||||||
%%
|
|
||||||
|
|
||||||
void yyerror(char* s)
|
|
||||||
{
|
|
||||||
nr_errors++;
|
|
||||||
printf("%s:%d: %s at %s\n", current_file, lineno, s, yytext);
|
|
||||||
}
|
|
||||||
|
|
||||||
void yyerror1(char* s)
|
|
||||||
{
|
|
||||||
nr_errors++;
|
|
||||||
printf("%s:%d: %s\n", current_file, lineno, s);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,201 +0,0 @@
|
||||||
%{
|
|
||||||
#include "midl.h"
|
|
||||||
%}
|
|
||||||
|
|
||||||
%union {
|
|
||||||
int tval;
|
|
||||||
int token;
|
|
||||||
char* id;
|
|
||||||
int number;
|
|
||||||
char* uuid;
|
|
||||||
char operator;
|
|
||||||
char* string;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
int minor;
|
|
||||||
int major;
|
|
||||||
} version;
|
|
||||||
}
|
|
||||||
|
|
||||||
%token <id> ID_LITERAL
|
|
||||||
%token <uuid> UUID_LITERAL
|
|
||||||
%token NUMBER_LITERAL
|
|
||||||
%token <version> VERSION_LITERAL
|
|
||||||
%token STRING_LITERAL
|
|
||||||
|
|
||||||
%token ENDPOINT_KEYWORD
|
|
||||||
%token EXCEPTIONS_KEYWORD
|
|
||||||
%token LOCAL_KEYWORD
|
|
||||||
%token IMPORT_KEYWORD
|
|
||||||
|
|
||||||
%token UUID_KEYWORD
|
|
||||||
%token VERSION_KEYWORD
|
|
||||||
%token POINTER_DEFAULT_KEYWORD
|
|
||||||
%token <token> UNIQUE_KEYWORD
|
|
||||||
%token INTERFACE_KEYWORD
|
|
||||||
%token IMPLICIT_HANDLE_KEYWORD
|
|
||||||
%token AUTO_HANDLE_KEYWORD
|
|
||||||
%token AGGREGATABLE_KEYWORD
|
|
||||||
%token ALLOCATE_KEYWORD
|
|
||||||
%token APPOBJECT_KEYWORD
|
|
||||||
|
|
||||||
%token ALL_NODES_KEYWORD
|
|
||||||
%token SINGLE_NODE_KEYWORD
|
|
||||||
%token FREE_KEYWORD
|
|
||||||
%token DONT_FREE_KEYWORD
|
|
||||||
|
|
||||||
%token TYPEDEF_KEYWORD
|
|
||||||
%token STRUCT_KEYWORD
|
|
||||||
%token CONST_KEYWORD
|
|
||||||
|
|
||||||
%token IN_KEYWORD
|
|
||||||
%token OUT_KEYWORD
|
|
||||||
%token STRING_KEYWORD
|
|
||||||
%token SIZE_IS_KEYWORD
|
|
||||||
%token LENGTH_IS_KEYWORD
|
|
||||||
|
|
||||||
%token UNSIGNED_KEYWORD
|
|
||||||
%token SIGNED_KEYWORD
|
|
||||||
|
|
||||||
%token LSQBRACKET, RSQBRACKET, LBRACKET, RBRACKET
|
|
||||||
%token LCURLY_BRACKET, RCURLY_BRACKET, LINE_TERMINATOR, COMMA
|
|
||||||
%token LEFT_BRACKET, RIGHT_BRACKET
|
|
||||||
%token STAR
|
|
||||||
%token ASSIGNMENT
|
|
||||||
|
|
||||||
%token <tval> TYPE_KEYWORD
|
|
||||||
|
|
||||||
%type <tval> type
|
|
||||||
%type <tval> sign
|
|
||||||
%type <tval> struct_def
|
|
||||||
|
|
||||||
%%
|
|
||||||
|
|
||||||
idl_file:
|
|
||||||
LSQBRACKET options RSQBRACKET interface
|
|
||||||
;
|
|
||||||
|
|
||||||
options:
|
|
||||||
option
|
|
||||||
| option COMMA options
|
|
||||||
;
|
|
||||||
|
|
||||||
option:
|
|
||||||
UUID_KEYWORD LEFT_BRACKET UUID_TOKEN RIGHT_BRACKET
|
|
||||||
{ set_uuid($3); }
|
|
||||||
| VERSION_KEYWORD LEFT_BRACKET VERSION_TOKEN RIGHT_BRACKET
|
|
||||||
{ set_version($3.major, $3.minor); }
|
|
||||||
| ENDPOINT_KEYWORD LEFT_BRACKET port_specs RIGHT_BRACKET
|
|
||||||
| EXCEPTIONS_KEYWORD LEFT_BRACKET excep_names RIGHT_BRACKET
|
|
||||||
| LOCAL_KEYWORD
|
|
||||||
| POINTER_DEFAULT_KEYWORD LEFT_BRACKET UNIQUE_KEYWORD RIGHT_BRACKET
|
|
||||||
{ set_pointer_default($3); }
|
|
||||||
;
|
|
||||||
|
|
||||||
port_specs:
|
|
||||||
| STRING_TOKEN COMMA port_specs
|
|
||||||
;
|
|
||||||
|
|
||||||
excep_names: ID_TOKEN { }
|
|
||||||
| ID_TOKEN COMMA excep_names { }
|
|
||||||
;
|
|
||||||
|
|
||||||
interface: { start_interface(); }
|
|
||||||
INTERFACE_KEYWORD ID_TOKEN LCURLY_BRACKET interface_components
|
|
||||||
RCURLY_BRACKET
|
|
||||||
{ end_interface($3); }
|
|
||||||
|
|
||||||
interface_components:
|
|
||||||
| interface_component LINE_TERMINATOR interface_components
|
|
||||||
|
|
||||||
interface_component:
|
|
||||||
| IMPORT_KEYWORD import_list
|
|
||||||
| function
|
|
||||||
| TYPEDEF_KEYWORD typedef
|
|
||||||
| CONST_KEYWORD type ID_TOKEN ASSIGNMENT const_expr
|
|
||||||
| STRUCT_KEYWORD struct_def RCURLY_BRACKET
|
|
||||||
;
|
|
||||||
|
|
||||||
import_list: STRING_TOKEN
|
|
||||||
| STRING_TOKEN COMMA import_list
|
|
||||||
;
|
|
||||||
|
|
||||||
const_expr: NUMBER_TOKEN
|
|
||||||
| STRING_TOKEN
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef: type ID_TOKEN { add_typedef($2, $1); };
|
|
||||||
|
|
||||||
function: { start_function(); }
|
|
||||||
type ID_TOKEN LEFT_BRACKET argument_list RIGHT_BRACKET
|
|
||||||
{ end_function($2, $3); }
|
|
||||||
;
|
|
||||||
|
|
||||||
argument_list:
|
|
||||||
| TYPE_KEYWORD { if ($1 != VOID_TYPE)
|
|
||||||
{
|
|
||||||
yyerror("parameter name ommitted");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
| argument
|
|
||||||
| argument COMMA argument_list
|
|
||||||
;
|
|
||||||
|
|
||||||
argument: arg_attrs type ID_TOKEN { add_argument($2, $3); }
|
|
||||||
| type ID_TOKEN { add_argument($1, $2); }
|
|
||||||
;
|
|
||||||
|
|
||||||
type: sign TYPE_KEYWORD STAR { $$ = $2 | POINTER_TYPE_OPTION | $1; }
|
|
||||||
| sign TYPE_KEYWORD { $$ = $2 | $1; }
|
|
||||||
| TYPE_KEYWORD { $$ = $1; }
|
|
||||||
| TYPE_KEYWORD STAR { $$ = $1 | POINTER_TYPE_OPTION; }
|
|
||||||
| STRUCT_KEYWORD struct_def RCURLY_BRACKET { $$ = $2; }
|
|
||||||
| STRUCT_KEYWORD ID_TOKEN { $$ = struct_to_type($2); }
|
|
||||||
;
|
|
||||||
|
|
||||||
struct_def: ID_TOKEN { start_struct($1); } LCURLY_BRACKET
|
|
||||||
struct_members { $$ = end_struct(); }
|
|
||||||
| { start_struct(NULL); } LCURLY_BRACKET
|
|
||||||
struct_members { $$ = end_struct(); }
|
|
||||||
;
|
|
||||||
|
|
||||||
struct_members:
|
|
||||||
| type ID_TOKEN LINE_TERMINATOR struct_members
|
|
||||||
{ add_struct_member($2, $1); }
|
|
||||||
;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Rules for the optional sign for an integer type
|
|
||||||
*/
|
|
||||||
sign: UNSIGNED_KEYWORD { $$ = UNSIGNED_TYPE_OPTION; }
|
|
||||||
| SIGNED_KEYWORD { $$ = SIGNED_TYPE_OPTION; }
|
|
||||||
;
|
|
||||||
|
|
||||||
arg_attrs: LSQBRACKET arg_attr_list RSQBRACKET
|
|
||||||
;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Rules for the list of attributes for arguments
|
|
||||||
*/
|
|
||||||
arg_attr_list: arg_attr
|
|
||||||
| arg_attr COMMA arg_attr_list
|
|
||||||
;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Rules for the various attributes for arguments
|
|
||||||
*/
|
|
||||||
arg_attr: IN_KEYWORD
|
|
||||||
| OUT_KEYWORD
|
|
||||||
| STRING_KEYWORD
|
|
||||||
| LENGTH_IS_KEYWORD BRACKETED_QUANTITY
|
|
||||||
| SIZE_IS_KEYWORD BRACKETED_QUANTITY
|
|
||||||
;
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
BRACKETED_QUANTITY: LEFT_BRACKET NUMBER_TOKEN RIGHT_BRACKET
|
|
||||||
| LEFT_BRACKET ID_TOKEN RIGHT_BRACKET
|
|
||||||
;
|
|
|
@ -1,74 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <malloc.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "midl.h"
|
|
||||||
#include "idl.tab.h"
|
|
||||||
|
|
||||||
static interface* current_interface;
|
|
||||||
static function* current_function;
|
|
||||||
|
|
||||||
void add_argument(int type, char* name)
|
|
||||||
{
|
|
||||||
argument* arg;
|
|
||||||
|
|
||||||
arg = malloc(sizeof(argument));
|
|
||||||
|
|
||||||
arg->type = type;
|
|
||||||
arg->name = strdup(name);
|
|
||||||
|
|
||||||
arg->next = current_function->arguments;
|
|
||||||
current_function->arguments = arg;
|
|
||||||
}
|
|
||||||
|
|
||||||
void start_interface(void)
|
|
||||||
{
|
|
||||||
current_interface = (interface *)malloc(sizeof(interface));
|
|
||||||
}
|
|
||||||
|
|
||||||
void start_function(void)
|
|
||||||
{
|
|
||||||
function* f;
|
|
||||||
|
|
||||||
f = (function *)malloc(sizeof(function));
|
|
||||||
|
|
||||||
f->arguments = NULL;
|
|
||||||
|
|
||||||
f->next = current_interface->function_list;
|
|
||||||
current_interface->function_list = f;
|
|
||||||
current_function = f;
|
|
||||||
}
|
|
||||||
|
|
||||||
void end_function(int rtype, char* name)
|
|
||||||
{
|
|
||||||
current_function->return_type = rtype;
|
|
||||||
current_function->name = strdup(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void end_interface(char* name)
|
|
||||||
{
|
|
||||||
function* cur;
|
|
||||||
argument* a;
|
|
||||||
|
|
||||||
printf("interface_name: %s\n", name);
|
|
||||||
|
|
||||||
current_interface->name = strdup(name);
|
|
||||||
cur = current_interface->function_list;
|
|
||||||
while (cur != NULL)
|
|
||||||
{
|
|
||||||
print_type(cur->return_type);
|
|
||||||
printf(" function_name: %s (\n", cur->name, cur);
|
|
||||||
|
|
||||||
a = cur->arguments;
|
|
||||||
while (a != NULL)
|
|
||||||
{
|
|
||||||
printf("\t");
|
|
||||||
print_type(a->type);
|
|
||||||
printf(" %s\n", a->name);
|
|
||||||
a = a->next;
|
|
||||||
}
|
|
||||||
printf(")\n");
|
|
||||||
|
|
||||||
cur = cur->next;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,79 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
|
|
||||||
extern FILE* yyin;
|
|
||||||
extern int yyparse(void);
|
|
||||||
extern int yydebug;
|
|
||||||
extern int nr_errors;
|
|
||||||
extern char* current_file;
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
char* tempname;
|
|
||||||
int n, p, status;
|
|
||||||
char* args[9];
|
|
||||||
|
|
||||||
if (argc == 1)
|
|
||||||
{
|
|
||||||
printf("Not enough arguments\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
tempname = tempnam(NULL, "midl");
|
|
||||||
|
|
||||||
args[0] = strdup("/usr/bin/gcc");
|
|
||||||
args[1] = strdup("-x");
|
|
||||||
args[2] = strdup("c");
|
|
||||||
args[3] = strdup("-P");
|
|
||||||
args[4] = strdup("-E");
|
|
||||||
args[5] = strdup(argv[1]);
|
|
||||||
args[6] = strdup("-o");
|
|
||||||
args[7] = strdup(tempname);
|
|
||||||
args[8] = NULL;
|
|
||||||
|
|
||||||
if ((n = fork()) == 0)
|
|
||||||
{
|
|
||||||
execv("/usr/bin/gcc", args);
|
|
||||||
perror("gcc");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
else if (n == -1)
|
|
||||||
{
|
|
||||||
perror("midl");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
p = waitpid(n, &status, WUNTRACED);
|
|
||||||
if (p == -1 || p == 0 || !WIFEXITED(status))
|
|
||||||
{
|
|
||||||
perror("midl");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
if (WEXITSTATUS(status) != 0)
|
|
||||||
{
|
|
||||||
printf("midl: the preprocessor %s failed\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// yydebug = 1;
|
|
||||||
|
|
||||||
yyin = fopen(tempname, "r+b");
|
|
||||||
if (yyin == NULL)
|
|
||||||
{
|
|
||||||
perror(argv[1]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
current_file = strdup(argv[1]);
|
|
||||||
|
|
||||||
if (yyparse() != 0 || nr_errors > 0)
|
|
||||||
{
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
unlink(tempname);
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
#ifndef __MIDL_H
|
|
||||||
#define __MIDL_H
|
|
||||||
|
|
||||||
#include "types.h"
|
|
||||||
|
|
||||||
typedef struct _argument
|
|
||||||
{
|
|
||||||
int type;
|
|
||||||
char* name;
|
|
||||||
struct _argument* next;
|
|
||||||
} argument;
|
|
||||||
|
|
||||||
typedef struct _function
|
|
||||||
{
|
|
||||||
int return_type;
|
|
||||||
char* name;
|
|
||||||
argument* arguments;
|
|
||||||
struct _function* next;
|
|
||||||
} function;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
char* name;
|
|
||||||
function* function_list;
|
|
||||||
} interface;
|
|
||||||
|
|
||||||
void set_uuid(char* uuid);
|
|
||||||
void set_version(int major, int minor);
|
|
||||||
void set_pointer_default(int option);
|
|
||||||
|
|
||||||
void start_interface(void);
|
|
||||||
void end_interface(char* name);
|
|
||||||
void start_function(void);
|
|
||||||
void end_function(int rtype, char* name);
|
|
||||||
void add_argument(int type, char* name);
|
|
||||||
|
|
||||||
#endif __MIDL_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "midl.h"
|
|
||||||
#include "idl.tab.h"
|
|
||||||
|
|
||||||
void set_uuid(char* uuid)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_version(int major, int minor)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_pointer_default(int option)
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -1,190 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "midl.h"
|
|
||||||
|
|
||||||
struct _type;
|
|
||||||
|
|
||||||
typedef struct _struct_member
|
|
||||||
{
|
|
||||||
char* name;
|
|
||||||
unsigned int value;
|
|
||||||
struct _struct_member* next;
|
|
||||||
} struct_member;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
struct_member* member_list;
|
|
||||||
char* tag;
|
|
||||||
struct _type* type_value;
|
|
||||||
} struct_type;
|
|
||||||
|
|
||||||
typedef struct _type
|
|
||||||
{
|
|
||||||
char* name;
|
|
||||||
unsigned int value;
|
|
||||||
unsigned int default_sign;
|
|
||||||
struct_type* struct_desc;
|
|
||||||
} type;
|
|
||||||
|
|
||||||
static struct_type struct_types[255];
|
|
||||||
|
|
||||||
static int next_struct_slot_free = 0;
|
|
||||||
static struct_type* current_struct;
|
|
||||||
|
|
||||||
static type types[255] = {
|
|
||||||
{NULL, 0, 0},
|
|
||||||
{"boolean", BOOLEAN_TYPE, UNSIGNED_TYPE_OPTION},
|
|
||||||
{"byte", BYTE_TYPE, 0},
|
|
||||||
{"char", CHAR_TYPE, UNSIGNED_TYPE_OPTION},
|
|
||||||
{"double", DOUBLE_TYPE, 0},
|
|
||||||
{"enum", ENUM_TYPE, 0},
|
|
||||||
{"error_status_t", ERROR_STATUS_TYPE, UNSIGNED_TYPE_OPTION},
|
|
||||||
{"float", FLOAT_TYPE, 0},
|
|
||||||
{"handle_t", HANDLE_TYPE, 0},
|
|
||||||
{"hyper", HYPER_TYPE, SIGNED_TYPE_OPTION},
|
|
||||||
{"int", INT_TYPE, SIGNED_TYPE_OPTION},
|
|
||||||
{"__int32", INT32_TYPE, SIGNED_TYPE_OPTION},
|
|
||||||
{"__int3264", INT32OR64_TYPE, SIGNED_TYPE_OPTION},
|
|
||||||
{"__int64", INT64_TYPE, SIGNED_TYPE_OPTION},
|
|
||||||
{"long", LONG_TYPE, SIGNED_TYPE_OPTION},
|
|
||||||
{"short", SHORT_TYPE, SIGNED_TYPE_OPTION},
|
|
||||||
{"small", SMALL_TYPE, SIGNED_TYPE_OPTION},
|
|
||||||
{"void", VOID_TYPE, 0},
|
|
||||||
{"wchar_t", WCHAR_TYPE, UNSIGNED_TYPE_OPTION},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static int next_free_slot = 18;
|
|
||||||
|
|
||||||
unsigned int struct_to_type(char* tag)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < next_struct_slot_free; i++)
|
|
||||||
{
|
|
||||||
if (strcmp(tag, struct_types[i].tag) == 0)
|
|
||||||
{
|
|
||||||
return(struct_types[i].type_value->value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void start_struct(char* tag)
|
|
||||||
{
|
|
||||||
char* name;
|
|
||||||
|
|
||||||
if (tag == NULL)
|
|
||||||
{
|
|
||||||
tag = malloc(255);
|
|
||||||
sprintf(tag, "__unnamed_struct%d", next_struct_slot_free);
|
|
||||||
}
|
|
||||||
|
|
||||||
name = malloc(strlen("struct ") + strlen(tag) + 1);
|
|
||||||
strcpy(name, "struct ");
|
|
||||||
strcat(name, tag);
|
|
||||||
|
|
||||||
struct_types[next_struct_slot_free].tag = strdup(tag);
|
|
||||||
struct_types[next_struct_slot_free].member_list = NULL;
|
|
||||||
current_struct = &struct_types[next_struct_slot_free];
|
|
||||||
|
|
||||||
types[next_free_slot].name = name;
|
|
||||||
types[next_free_slot].value = next_free_slot << 8;
|
|
||||||
types[next_free_slot].default_sign = 0;
|
|
||||||
types[next_free_slot].struct_desc =
|
|
||||||
&struct_types[next_struct_slot_free];
|
|
||||||
|
|
||||||
struct_types[next_struct_slot_free].type_value = &types[next_free_slot];
|
|
||||||
|
|
||||||
next_struct_slot_free++;
|
|
||||||
next_free_slot++;
|
|
||||||
}
|
|
||||||
|
|
||||||
void add_struct_member(char* name, unsigned int type)
|
|
||||||
{
|
|
||||||
struct_member* member;
|
|
||||||
|
|
||||||
member = malloc(sizeof(struct_member));
|
|
||||||
|
|
||||||
member->name = strdup(name);
|
|
||||||
member->value = type;
|
|
||||||
member->next = current_struct->member_list;
|
|
||||||
current_struct->member_list = member;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int end_struct(void)
|
|
||||||
{
|
|
||||||
int n;
|
|
||||||
struct_member* cur;
|
|
||||||
|
|
||||||
printf("Defining struct %s {\n", current_struct->tag);
|
|
||||||
|
|
||||||
cur = current_struct->member_list;
|
|
||||||
while (cur != NULL)
|
|
||||||
{
|
|
||||||
print_type(cur->value);
|
|
||||||
printf(" %s\n", cur->name);
|
|
||||||
|
|
||||||
cur = cur->next;
|
|
||||||
}
|
|
||||||
printf("}\n");
|
|
||||||
|
|
||||||
n = current_struct->type_value->value;
|
|
||||||
current_struct = NULL;
|
|
||||||
return(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
void add_typedef(char* name, int type)
|
|
||||||
{
|
|
||||||
printf("Adding typedef %s to ", name);
|
|
||||||
print_type(type);
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
types[next_free_slot].name = strdup(name);
|
|
||||||
types[next_free_slot].value = type;
|
|
||||||
types[next_free_slot].default_sign = 0;
|
|
||||||
next_free_slot++;
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_type(int tval)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 1; i < next_free_slot; i++)
|
|
||||||
{
|
|
||||||
if ((tval & BASE_TYPE_MASK) == types[i].value)
|
|
||||||
{
|
|
||||||
if (tval & UNSIGNED_TYPE_OPTION)
|
|
||||||
{
|
|
||||||
printf("unsigned ");
|
|
||||||
}
|
|
||||||
if (tval & SIGNED_TYPE_OPTION)
|
|
||||||
{
|
|
||||||
printf("signed ");
|
|
||||||
}
|
|
||||||
printf("%s", types[i].name);
|
|
||||||
if (tval & POINTER_TYPE_OPTION)
|
|
||||||
{
|
|
||||||
printf("*");
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
printf("unknown type");
|
|
||||||
}
|
|
||||||
|
|
||||||
int token_to_type(char* token)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 1; i < next_free_slot; i++)
|
|
||||||
{
|
|
||||||
if (strcmp(types[i].name, token) == 0)
|
|
||||||
{
|
|
||||||
return(types[i].value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(0);
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
#ifndef __TYPES_H
|
|
||||||
#define __TYPES_H
|
|
||||||
|
|
||||||
#define BASE_TYPE_MASK (~0xff)
|
|
||||||
|
|
||||||
#define BOOLEAN_TYPE (0x100)
|
|
||||||
#define BYTE_TYPE (0x200)
|
|
||||||
#define CHAR_TYPE (0x300)
|
|
||||||
#define DOUBLE_TYPE (0x400)
|
|
||||||
#define ERROR_STATUS_TYPE (0x500)
|
|
||||||
#define FLOAT_TYPE (0x600)
|
|
||||||
#define HANDLE_TYPE (0x700)
|
|
||||||
#define HYPER_TYPE (0x800)
|
|
||||||
#define INT_TYPE (0x900)
|
|
||||||
#define INT32_TYPE (0xA00)
|
|
||||||
#define INT32OR64_TYPE (0xB00)
|
|
||||||
#define INT64_TYPE (0xC00)
|
|
||||||
#define LONG_TYPE (0xD00)
|
|
||||||
#define SHORT_TYPE (0xE00)
|
|
||||||
#define SMALL_TYPE (0xF00)
|
|
||||||
#define VOID_TYPE (0x1000)
|
|
||||||
#define WCHAR_TYPE (0x1100)
|
|
||||||
|
|
||||||
#define UNSIGNED_TYPE_OPTION (0x1)
|
|
||||||
#define SIGNED_TYPE_OPTION (0x2)
|
|
||||||
#define POINTER_TYPE_OPTION (0x4)
|
|
||||||
|
|
||||||
#define IN_TYPE_OPTION (0x8)
|
|
||||||
#define OUT_TYPE_OPTION (0x10)
|
|
||||||
#define STRING_TYPE_OPTION (0x20)
|
|
||||||
|
|
||||||
int token_to_type(char* token);
|
|
||||||
void print_type(int tval);
|
|
||||||
void add_typedef(char* name, int type);
|
|
||||||
|
|
||||||
void start_struct(char* tag);
|
|
||||||
void add_struct_member(char* name, unsigned int type);
|
|
||||||
unsigned int end_struct(void);
|
|
||||||
|
|
||||||
unsigned int struct_to_type(char* tag);
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in a new issue