1 /* $Id: main.c,v 1.6 2002/10/29 04:45:33 rex Exp $
4 * COPYRIGHT: See COPYING in the top level directory
5 * PROJECT: ReactOS POSIX+ Subsystem
6 * FILE: subsys/psx/lib/psxdll/misc/main.c
7 * PURPOSE: psxdll.dll entry point
8 * PROGRAMMER: KJK::Hyperion <noog@libero.it>
13 #include <ddk/ntddk.h>
15 #include <psx/debug.h>
16 #include <psx/fdtable.h>
17 #include <psx/pdata.h>
18 #include <psx/stdlib.h>
21 #define DLL_PROCESS_ATTACH 1
22 #define DLL_THREAD_ATTACH 2
23 #define DLL_THREAD_DETACH 3
24 #define DLL_PROCESS_DETACH 0
26 /* WARNING: PRELIMINARY CODE FOR DEBUGGING PURPOSES ONLY - DO NOT CHANGE */
27 static __PDX_PDATA __PdxPdata
;
28 static WCHAR __tempPathBuf
[32768];
29 static char * __tempSelf
= "-sh";
30 static char * __tempArgv
[2] = {0, 0};
32 VOID
__PdxSetProcessData(__PPDX_PDATA NewPdata
)
34 memcpy(&__PdxPdata
, NewPdata
, sizeof(__PdxPdata
));
37 __PPDX_PDATA
__PdxGetProcessData(VOID
)
42 BOOL STDCALL
DllMain(PVOID pDllInstance
, DWORD nReason
, PVOID pUnknown
)
48 /* process created, first thread created */
49 case DLL_PROCESS_ATTACH
:
51 __PPDX_TDATA ThreadData
;
54 INFO("new process and new thread created");
56 __PdxPdata
.Spawned
= 1;
58 __PdxPdata
.ArgCount
= 1;
59 __tempArgv
[0] = __tempSelf
;
60 __PdxPdata
.ArgVect
= __tempArgv
;
62 __PdxPdata
.NativePathBuffer
.Length
= 0;
63 __PdxPdata
.NativePathBuffer
.MaximumLength
= sizeof(__tempPathBuf
);
64 __PdxPdata
.NativePathBuffer
.Buffer
= __tempPathBuf
;
66 INFO("about to initialize process data lock");
67 RtlInitializeCriticalSection(&__PdxPdata
.Lock
);
69 INFO("about to allocate TLS slot");
70 __PdxPdata
.TlsIndex
= RtlFindClearBitsAndSet(NtCurrentPeb()->TlsBitmap
, 1, 0);
72 if(__PdxPdata
.TlsIndex
== -1)
75 NtRaiseHardError(STATUS_NO_MEMORY
, 0, 0, 0, 1, (ULONG
)&nJunk
);
79 INFO("allocated TLS slot %d", __PdxPdata
.TlsIndex
);
81 INFO("about to allocate thread data");
82 ThreadData
= __malloc(sizeof(*ThreadData
));
87 NtRaiseHardError(STATUS_NO_MEMORY
, 0, 0, 0, 1, (ULONG
)&nJunk
);
91 NtCurrentTeb()->TlsSlots
[__PdxPdata
.TlsIndex
] = ThreadData
;
93 INFO("about to initialize file descriptors table");
94 __fdtable_init(&__PdxPdata
.FdTable
);
96 INFO("end of initialization");
100 /* process about to exit */
101 case DLL_PROCESS_DETACH
:
103 INFO("process about to exit");
105 INFO("about to deallocate thread data");
106 __free(NtCurrentTeb()->TlsSlots
[__PdxPdata
.TlsIndex
]);
112 case DLL_THREAD_ATTACH
:
114 __PPDX_TDATA ThreadData
;
116 INFO("new thread created");
118 INFO("about to allocate thread data");
119 ThreadData
= __malloc(sizeof(*ThreadData
));
124 NtRaiseHardError(STATUS_NO_MEMORY
, 0, 0, 0, 1, (ULONG
)&nJunk
);
128 NtCurrentTeb()->TlsSlots
[__PdxPdata
.TlsIndex
] = ThreadData
;
134 case DLL_THREAD_DETACH
:
136 INFO("thread about to exit");
138 INFO("about to deallocate thread data");
139 __free(NtCurrentTeb()->TlsSlots
[__PdxPdata
.TlsIndex
]);