Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
clean-compiler-and-rts
compiler
Commits
b67a7d10
Commit
b67a7d10
authored
Apr 29, 2004
by
John van Groningen
Browse files
add set_compiler_id and get_compiler_id
parent
01b02a6d
Changes
3
Hide whitespace changes
Inline
Side-by-side
main/Windows/Clean System Files/thread_message.obj
View file @
b67a7d10
No preview for this file type
main/Windows/thread_message.c
0 → 100644
View file @
b67a7d10
#include
<stdio.h>
#include
<windows.h>
#include
"Clean.h"
#include
"thread_message.h"
static
int
CleanCompiler_message_nunber
;
int
get_message_number
(
void
)
{
return
RegisterWindowMessage
(
"CleanCompiler"
);
}
int
get_current_thread_id
(
void
)
{
return
GetCurrentThreadId
();
}
int
compiler_result_handler_installed
=
0
;
#ifdef IDE
extern
void
(
*
dispatch_null_message_hook
)
(
MSG
*
);
#define MAX_N_COMPILERS 32
int
compiler_finished
[
MAX_N_COMPILERS
];
int
compiler_exit_codes
[
MAX_N_COMPILERS
];
void
compiler_result_handler
(
MSG
*
msg
)
{
if
(
msg
->
message
==
CleanCompiler_message_nunber
){
unsigned
int
compiler_n
;
compiler_n
=
msg
->
wParam
;
if
(
compiler_n
<
MAX_N_COMPILERS
){
compiler_exit_codes
[
compiler_n
]
=
msg
->
lParam
;
compiler_finished
[
compiler_n
]
=
1
;
}
}
}
void
install_compiler_result_handler
(
void
)
{
CleanCompiler_message_nunber
=
get_message_number
();
dispatch_null_message_hook
=
&
compiler_result_handler
;
}
int
start_compiler_process
(
CleanString
compiler_path
,
CleanString
compiler_directory
,
CleanString
command
,
int
*
compiler_thread_id_p
,
int
*
compiler_thread_handle_p
,
int
*
compiler_process_handle_p
)
{
PSTR
application_name
,
command_line
,
env
,
dir
;
STARTUPINFO
si
;
PROCESS_INFORMATION
pi
;
int
r
;
if
(
!
compiler_result_handler_installed
){
install_compiler_result_handler
();
compiler_result_handler_installed
=
1
;
}
application_name
=
CleanStringCharacters
(
compiler_path
);
dir
=
CleanStringCharacters
(
compiler_directory
);
command_line
=
CleanStringCharacters
(
command
);
env
=
NULL
;
si
.
cb
=
sizeof
(
STARTUPINFO
);
si
.
lpReserved
=
NULL
;
si
.
lpReserved2
=
NULL
;
si
.
cbReserved2
=
0
;
si
.
lpDesktop
=
NULL
;
si
.
lpTitle
=
NULL
;
si
.
dwFlags
=
0
;
r
=
CreateProcess
(
application_name
,
command_line
,
NULL
,
NULL
,
TRUE
,
DETACHED_PROCESS
/*0*/
,
env
,
dir
,
&
si
,
&
pi
);
if
(
r
!=
0
){
*
compiler_thread_id_p
=
pi
.
dwThreadId
;
*
compiler_thread_handle_p
=
pi
.
hThread
;
*
compiler_process_handle_p
=
pi
.
hProcess
;
}
else
{
*
compiler_thread_id_p
=
0
;
*
compiler_thread_handle_p
=
0
;
*
compiler_process_handle_p
=
0
;
}
return
r
;
}
int
get_finished_compiler_id_and_exit_code
(
int
*
exit_code_p
)
{
int
compiler_n
;
for
(
compiler_n
=
0
;
compiler_n
<
MAX_N_COMPILERS
;
++
compiler_n
)
if
(
compiler_finished
[
compiler_n
]){
*
exit_code_p
=
compiler_exit_codes
[
compiler_n
];
compiler_finished
[
compiler_n
]
=
0
;
return
compiler_n
;
}
*
exit_code_p
=
0
;
return
-
1
;
}
#endif
int
get_integers_from_message
(
int
wm_number
,
int
*
i1_p
,
int
*
i2_p
)
{
MSG
message
;
int
r
;
r
=
GetMessage
(
&
message
,
NULL
,
wm_number
,
wm_number
);
if
(
r
!=
0
){
*
i1_p
=
message
.
wParam
;
*
i2_p
=
message
.
lParam
;
}
else
{
*
i1_p
=
0
;
*
i2_p
=
0
;
}
return
r
;
}
#define PM_QS_POSTMESSAGE ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16)
int
get_integers_from_thread_message
(
int
wm_number
,
int
thread_handle
,
int
*
i1_p
,
int
*
i2_p
)
{
MSG
message
;
int
r
;
r
=
PeekMessage
(
&
message
,
INVALID_HANDLE_VALUE
,
wm_number
,
wm_number
,
PM_NOREMOVE
|
(
QS_POSTMESSAGE
<<
16
));
while
(
r
==
0
){
r
=
MsgWaitForMultipleObjects
(
1
,
&
thread_handle
,
0
,
INFINITE
,
QS_POSTMESSAGE
);
if
(
r
==-
1
||
r
==
WAIT_OBJECT_0
||
r
==
WAIT_ABANDONED_0
){
*
i1_p
=
0
;
*
i2_p
=
0
;
return
0
;
}
r
=
PeekMessage
(
&
message
,
INVALID_HANDLE_VALUE
,
wm_number
,
wm_number
,
PM_NOREMOVE
|
(
QS_POSTMESSAGE
<<
16
));
}
r
=
PeekMessage
(
&
message
,
INVALID_HANDLE_VALUE
,
wm_number
,
wm_number
,
PM_REMOVE
|
(
QS_POSTMESSAGE
<<
16
));
/* r=GetMessage (&message,INVALID_HANDLE_VALUE,wm_number,wm_number); */
if
(
r
!=
0
){
*
i1_p
=
message
.
wParam
;
*
i2_p
=
message
.
lParam
;
}
else
{
*
i1_p
=
0
;
*
i2_p
=
0
;
}
return
r
;
}
int
get_string_from_file_map_and_delete_map
(
int
file_map
,
CleanString
s
)
{
int
l
,
i
;
char
*
chars
,
*
p
;
chars
=
CleanStringCharacters
(
s
);
l
=
CleanStringLength
(
s
);
p
=
MapViewOfFile
((
HANDLE
)
file_map
,
FILE_MAP_ALL_ACCESS
,
0
,
0
,
l
);
if
(
p
==
NULL
)
return
0
;
for
(
i
=
0
;
i
<
l
;
++
i
)
chars
[
i
]
=
p
[
i
];
UnmapViewOfFile
(
p
);
CloseHandle
((
HANDLE
)
file_map
);
return
1
;
}
int
send_string_to_thread
(
int
thread_id
,
int
process_handle
,
int
wm_number
,
CleanString
s
)
{
HANDLE
file_map
,
file_map2
;
char
*
chars
,
*
p1
;
int
r
,
l
;
/*
int a;
*/
chars
=
CleanStringCharacters
(
s
);
l
=
CleanStringLength
(
s
);
if
(
l
==
0
||
chars
[
l
-
1
]
!=
'\0'
)
return
0
;
file_map
=
CreateFileMapping
((
HANDLE
)
0xFFFFFFFF
,
NULL
,
PAGE_READWRITE
,
0
,
l
,
NULL
);
if
(
file_map
==
NULL
)
return
0
;
p1
=
MapViewOfFile
(
file_map
,
FILE_MAP_ALL_ACCESS
,
0
,
0
,
l
);
if
(
p1
==
NULL
)
return
0
;
{
char
*
s_p
,
*
d_p
,
c
;
s_p
=
chars
;
d_p
=
p1
;
do
{
c
=*
s_p
++
;
*
d_p
++=
c
;
}
while
(
c
!=
'\0'
);
}
UnmapViewOfFile
(
p1
);
r
=
DuplicateHandle
(
GetCurrentProcess
(),
file_map
,(
HANDLE
)
process_handle
,
&
file_map2
,
0
,
0
,
DUPLICATE_CLOSE_SOURCE
|
DUPLICATE_SAME_ACCESS
);
if
(
r
==
0
)
return
0
;
do
{
/*
r=PostThreadMessage (thread_id,wm_number,a,l);
*/
r
=
PostThreadMessage
(
thread_id
,
wm_number
,
l
,(
int
)
file_map2
);
}
while
(
r
==
0
);
return
r
;
}
int
send_integers_to_thread
(
int
thread_id
,
int
wm_number
,
int
i1
,
int
i2
)
{
int
r
;
do
{
r
=
PostThreadMessage
(
thread_id
,
wm_number
,
i1
,
i2
);
}
while
(
r
==
0
);
return
r
;
}
int
compiler_id
=-
1
;
int
set_compiler_id
(
int
compiler_id_p
)
{
compiler_id
=
compiler_id_p
;
return
compiler_id_p
;
}
int
get_compiler_id
(
void
)
{
return
compiler_id
;
}
main/Windows/thread_message.h
0 → 100644
View file @
b67a7d10
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment