Moved doscalls export tables to bottom of sources, like everyone else.
This commit is contained in:
1 parent
33870fc221
commit
c523c36f5e
1 file changed
+160
-158
+160
-158
@@ -129,164 +129,6 @@ typedef struct
|
||||
static DirFinder GHDir1;
|
||||
|
||||
|
||||
LX_NATIVE_MODULE_16BIT_SUPPORT()
|
||||
LX_NATIVE_MODULE_16BIT_API(DosSemRequest)
|
||||
LX_NATIVE_MODULE_16BIT_API(DosSemClear)
|
||||
LX_NATIVE_MODULE_16BIT_API(DosSemWait)
|
||||
LX_NATIVE_MODULE_16BIT_API(DosSemSet)
|
||||
LX_NATIVE_MODULE_16BIT_SUPPORT_END()
|
||||
|
||||
LX_NATIVE_MODULE_DEINIT({
|
||||
GLoaderState->dosExit = NULL;
|
||||
|
||||
ExitListItem *next = GExitList;
|
||||
GExitList = NULL;
|
||||
|
||||
for (ExitListItem *item = next; item; item = next) {
|
||||
next = item->next;
|
||||
free(item);
|
||||
} // for
|
||||
|
||||
for (uint32 i = 0; i < MaxHFiles; i++) {
|
||||
if (HFiles[i].fd != -1)
|
||||
close(HFiles[i].fd);
|
||||
} // for
|
||||
free(HFiles);
|
||||
HFiles = NULL;
|
||||
MaxHFiles = 0;
|
||||
|
||||
pthread_mutex_destroy(&GMutexDosCalls);
|
||||
|
||||
LX_NATIVE_MODULE_DEINIT_16BIT_SUPPORT();
|
||||
})
|
||||
|
||||
static int initDoscalls(void)
|
||||
{
|
||||
LX_NATIVE_MODULE_INIT_16BIT_SUPPORT()
|
||||
LX_NATIVE_INIT_16BIT_BRIDGE(DosSemRequest, 8)
|
||||
LX_NATIVE_INIT_16BIT_BRIDGE(DosSemClear, 4)
|
||||
LX_NATIVE_INIT_16BIT_BRIDGE(DosSemWait, 8)
|
||||
LX_NATIVE_INIT_16BIT_BRIDGE(DosSemSet, 4)
|
||||
LX_NATIVE_MODULE_INIT_16BIT_SUPPORT_END()
|
||||
|
||||
GLoaderState->dosExit = DosExit;
|
||||
|
||||
if (pthread_mutex_init(&GMutexDosCalls, NULL) == -1) {
|
||||
fprintf(stderr, "pthread_mutex_init failed!\n");
|
||||
return 0;
|
||||
} // if
|
||||
|
||||
MaxHFiles = 20; // seems to be OS/2's default.
|
||||
HFiles = (HFileInfo *) malloc(sizeof (HFileInfo) * MaxHFiles);
|
||||
if (!HFiles) {
|
||||
fprintf(stderr, "Out of memory!\n");
|
||||
return 0;
|
||||
} // if
|
||||
|
||||
HFileInfo *info = HFiles;
|
||||
for (uint32 i = 0; i < MaxHFiles; i++, info++) {
|
||||
info->fd = -1;
|
||||
info->type = 0;
|
||||
info->attr = 0;
|
||||
info->flags = 0;
|
||||
} // for
|
||||
|
||||
// launching a Hello World program from CMD.EXE seems to inherit several
|
||||
// file handles. 0, 1, 2 seem to map to stdin, stdout, stderr (and will
|
||||
// be character devices (maybe CON?) by default, unless you redirect
|
||||
// to a file in which case they're physical files, and using '|' in
|
||||
// CMD.EXE will make handle 1 into a Pipe, of course.
|
||||
// Handles, 4, 6 and 9 were also in use (all character devices, attributes
|
||||
// 51585, 51392, 51392), but I don't know what these are, if they are
|
||||
// inherited from CMD.EXE or supplied by OS/2 for whatever purpose.
|
||||
// For now, we just wire up stdio.
|
||||
|
||||
for (int i = 0; i <= 2; i++) {
|
||||
HFiles[i].fd = i;
|
||||
HFiles[i].type = 1; // !!! FIXME: could be a pipe or file.
|
||||
HFiles[i].attr = DAW_STDIN | DAW_STDOUT | DAW_LEVEL1 | DAW_CHARACTER;
|
||||
} // for
|
||||
|
||||
return 1;
|
||||
} // initDoscalls
|
||||
|
||||
LX_NATIVE_MODULE_INIT({ if (!initDoscalls()) return NULL; })
|
||||
LX_NATIVE_EXPORT16(DosSemRequest, 140),
|
||||
LX_NATIVE_EXPORT16(DosSemClear, 141),
|
||||
LX_NATIVE_EXPORT16(DosSemWait, 142),
|
||||
LX_NATIVE_EXPORT16(DosSemSet, 143),
|
||||
LX_NATIVE_EXPORT(DosSetMaxFH, 209),
|
||||
LX_NATIVE_EXPORT(DosSetPathInfo, 219),
|
||||
LX_NATIVE_EXPORT(DosQueryPathInfo, 223),
|
||||
LX_NATIVE_EXPORT(DosQueryHType, 224),
|
||||
LX_NATIVE_EXPORT(DosScanEnv, 227),
|
||||
LX_NATIVE_EXPORT(DosSleep, 229),
|
||||
LX_NATIVE_EXPORT(DosGetDateTime, 230),
|
||||
LX_NATIVE_EXPORT(DosDevConfig, 231),
|
||||
LX_NATIVE_EXPORT(DosExit, 234),
|
||||
LX_NATIVE_EXPORT(DosResetBuffer, 254),
|
||||
LX_NATIVE_EXPORT(DosSetFilePtr, 256),
|
||||
LX_NATIVE_EXPORT(DosClose, 257),
|
||||
LX_NATIVE_EXPORT(DosDelete, 259),
|
||||
LX_NATIVE_EXPORT(DosFindClose, 263),
|
||||
LX_NATIVE_EXPORT(DosFindFirst, 264),
|
||||
LX_NATIVE_EXPORT(DosFindNext, 265),
|
||||
LX_NATIVE_EXPORT(DosOpen, 273),
|
||||
LX_NATIVE_EXPORT(DosQueryCurrentDir, 274),
|
||||
LX_NATIVE_EXPORT(DosQueryCurrentDisk, 275),
|
||||
LX_NATIVE_EXPORT(DosQueryFHState, 276),
|
||||
LX_NATIVE_EXPORT(DosQueryFSAttach, 277),
|
||||
LX_NATIVE_EXPORT(DosQueryFileInfo, 279),
|
||||
LX_NATIVE_EXPORT(DosWaitChild, 280),
|
||||
LX_NATIVE_EXPORT(DosRead, 281),
|
||||
LX_NATIVE_EXPORT(DosWrite, 282),
|
||||
LX_NATIVE_EXPORT(DosExecPgm, 283),
|
||||
LX_NATIVE_EXPORT(DosSetProcessCp, 289),
|
||||
LX_NATIVE_EXPORT(DosQueryCp, 291),
|
||||
LX_NATIVE_EXPORT(DosExitList, 296),
|
||||
LX_NATIVE_EXPORT(DosAllocMem, 299),
|
||||
LX_NATIVE_EXPORT(DosFreeMem, 304),
|
||||
LX_NATIVE_EXPORT(DosSetMem, 305),
|
||||
LX_NATIVE_EXPORT(DosCreateThread, 311),
|
||||
LX_NATIVE_EXPORT(DosGetInfoBlocks, 312),
|
||||
LX_NATIVE_EXPORT(DosLoadModule, 318),
|
||||
LX_NATIVE_EXPORT(DosQueryModuleHandle, 319),
|
||||
LX_NATIVE_EXPORT(DosQueryModuleName, 320),
|
||||
LX_NATIVE_EXPORT(DosQueryProcAddr, 321),
|
||||
LX_NATIVE_EXPORT(DosQueryAppType, 323),
|
||||
LX_NATIVE_EXPORT(DosCreateEventSem, 324),
|
||||
LX_NATIVE_EXPORT(DosCloseEventSem, 326),
|
||||
LX_NATIVE_EXPORT(DosResetEventSem, 327),
|
||||
LX_NATIVE_EXPORT(DosPostEventSem, 328),
|
||||
LX_NATIVE_EXPORT(DosWaitEventSem, 329),
|
||||
LX_NATIVE_EXPORT(DosQueryEventSem, 330),
|
||||
LX_NATIVE_EXPORT(DosCreateMutexSem, 331),
|
||||
LX_NATIVE_EXPORT(DosCloseMutexSem, 333),
|
||||
LX_NATIVE_EXPORT(DosRequestMutexSem, 334),
|
||||
LX_NATIVE_EXPORT(DosReleaseMutexSem, 335),
|
||||
LX_NATIVE_EXPORT(DosSubSetMem, 344),
|
||||
LX_NATIVE_EXPORT(DosSubAllocMem, 345),
|
||||
LX_NATIVE_EXPORT(DosSubFreeMem, 346),
|
||||
LX_NATIVE_EXPORT(DosQuerySysInfo, 348),
|
||||
LX_NATIVE_EXPORT(DosSetExceptionHandler, 354),
|
||||
LX_NATIVE_EXPORT(DosUnsetExceptionHandler, 355),
|
||||
LX_NATIVE_EXPORT(DosQuerySysState, 368),
|
||||
LX_NATIVE_EXPORT(DosSetSignalExceptionFocus, 378),
|
||||
LX_NATIVE_EXPORT(DosEnterMustComplete, 380),
|
||||
LX_NATIVE_EXPORT(DosExitMustComplete, 381),
|
||||
LX_NATIVE_EXPORT(DosSetRelMaxFH, 382),
|
||||
LX_NATIVE_EXPORT(DosFlatToSel, 425),
|
||||
LX_NATIVE_EXPORT(DosSelToFlat, 426),
|
||||
LX_NATIVE_EXPORT(DosAllocThreadLocalMemory, 454),
|
||||
LX_NATIVE_EXPORT(DosFreeThreadLocalMemory, 455),
|
||||
LX_NATIVE_EXPORT(DosR3ExitAddr, 553),
|
||||
LX_NATIVE_EXPORT(DosQueryHeaderInfo, 582),
|
||||
LX_NATIVE_EXPORT(DosQueryExtLIBPATH, 874),
|
||||
LX_NATIVE_EXPORT(DosQueryThreadContext, 877),
|
||||
LX_NATIVE_EXPORT(DosOpenL, 981)
|
||||
LX_NATIVE_MODULE_INIT_END()
|
||||
|
||||
|
||||
static int grabLock(pthread_mutex_t *lock)
|
||||
{
|
||||
return (pthread_mutex_lock(lock) == 0);
|
||||
@@ -3056,5 +2898,165 @@ APIRET DosQueryFSAttach(PSZ pszDeviceName, ULONG ulOrdinal, ULONG ulFSAInfoLevel
|
||||
return ERROR_INVALID_FUNCTION;
|
||||
} // DosQueryFSAttach
|
||||
|
||||
|
||||
|
||||
LX_NATIVE_MODULE_16BIT_SUPPORT()
|
||||
LX_NATIVE_MODULE_16BIT_API(DosSemRequest)
|
||||
LX_NATIVE_MODULE_16BIT_API(DosSemClear)
|
||||
LX_NATIVE_MODULE_16BIT_API(DosSemWait)
|
||||
LX_NATIVE_MODULE_16BIT_API(DosSemSet)
|
||||
LX_NATIVE_MODULE_16BIT_SUPPORT_END()
|
||||
|
||||
LX_NATIVE_MODULE_DEINIT({
|
||||
GLoaderState->dosExit = NULL;
|
||||
|
||||
ExitListItem *next = GExitList;
|
||||
GExitList = NULL;
|
||||
|
||||
for (ExitListItem *item = next; item; item = next) {
|
||||
next = item->next;
|
||||
free(item);
|
||||
} // for
|
||||
|
||||
for (uint32 i = 0; i < MaxHFiles; i++) {
|
||||
if (HFiles[i].fd != -1)
|
||||
close(HFiles[i].fd);
|
||||
} // for
|
||||
free(HFiles);
|
||||
HFiles = NULL;
|
||||
MaxHFiles = 0;
|
||||
|
||||
pthread_mutex_destroy(&GMutexDosCalls);
|
||||
|
||||
LX_NATIVE_MODULE_DEINIT_16BIT_SUPPORT();
|
||||
})
|
||||
|
||||
static int initDoscalls(void)
|
||||
{
|
||||
LX_NATIVE_MODULE_INIT_16BIT_SUPPORT()
|
||||
LX_NATIVE_INIT_16BIT_BRIDGE(DosSemRequest, 8)
|
||||
LX_NATIVE_INIT_16BIT_BRIDGE(DosSemClear, 4)
|
||||
LX_NATIVE_INIT_16BIT_BRIDGE(DosSemWait, 8)
|
||||
LX_NATIVE_INIT_16BIT_BRIDGE(DosSemSet, 4)
|
||||
LX_NATIVE_MODULE_INIT_16BIT_SUPPORT_END()
|
||||
|
||||
GLoaderState->dosExit = DosExit;
|
||||
|
||||
if (pthread_mutex_init(&GMutexDosCalls, NULL) == -1) {
|
||||
fprintf(stderr, "pthread_mutex_init failed!\n");
|
||||
return 0;
|
||||
} // if
|
||||
|
||||
MaxHFiles = 20; // seems to be OS/2's default.
|
||||
HFiles = (HFileInfo *) malloc(sizeof (HFileInfo) * MaxHFiles);
|
||||
if (!HFiles) {
|
||||
fprintf(stderr, "Out of memory!\n");
|
||||
return 0;
|
||||
} // if
|
||||
|
||||
HFileInfo *info = HFiles;
|
||||
for (uint32 i = 0; i < MaxHFiles; i++, info++) {
|
||||
info->fd = -1;
|
||||
info->type = 0;
|
||||
info->attr = 0;
|
||||
info->flags = 0;
|
||||
} // for
|
||||
|
||||
// launching a Hello World program from CMD.EXE seems to inherit several
|
||||
// file handles. 0, 1, 2 seem to map to stdin, stdout, stderr (and will
|
||||
// be character devices (maybe CON?) by default, unless you redirect
|
||||
// to a file in which case they're physical files, and using '|' in
|
||||
// CMD.EXE will make handle 1 into a Pipe, of course.
|
||||
// Handles, 4, 6 and 9 were also in use (all character devices, attributes
|
||||
// 51585, 51392, 51392), but I don't know what these are, if they are
|
||||
// inherited from CMD.EXE or supplied by OS/2 for whatever purpose.
|
||||
// For now, we just wire up stdio.
|
||||
|
||||
for (int i = 0; i <= 2; i++) {
|
||||
HFiles[i].fd = i;
|
||||
HFiles[i].type = 1; // !!! FIXME: could be a pipe or file.
|
||||
HFiles[i].attr = DAW_STDIN | DAW_STDOUT | DAW_LEVEL1 | DAW_CHARACTER;
|
||||
} // for
|
||||
|
||||
return 1;
|
||||
} // initDoscalls
|
||||
|
||||
LX_NATIVE_MODULE_INIT({ if (!initDoscalls()) return NULL; })
|
||||
LX_NATIVE_EXPORT16(DosSemRequest, 140),
|
||||
LX_NATIVE_EXPORT16(DosSemClear, 141),
|
||||
LX_NATIVE_EXPORT16(DosSemWait, 142),
|
||||
LX_NATIVE_EXPORT16(DosSemSet, 143),
|
||||
LX_NATIVE_EXPORT(DosSetMaxFH, 209),
|
||||
LX_NATIVE_EXPORT(DosSetPathInfo, 219),
|
||||
LX_NATIVE_EXPORT(DosQueryPathInfo, 223),
|
||||
LX_NATIVE_EXPORT(DosQueryHType, 224),
|
||||
LX_NATIVE_EXPORT(DosScanEnv, 227),
|
||||
LX_NATIVE_EXPORT(DosSleep, 229),
|
||||
LX_NATIVE_EXPORT(DosGetDateTime, 230),
|
||||
LX_NATIVE_EXPORT(DosDevConfig, 231),
|
||||
LX_NATIVE_EXPORT(DosExit, 234),
|
||||
LX_NATIVE_EXPORT(DosResetBuffer, 254),
|
||||
LX_NATIVE_EXPORT(DosSetFilePtr, 256),
|
||||
LX_NATIVE_EXPORT(DosClose, 257),
|
||||
LX_NATIVE_EXPORT(DosDelete, 259),
|
||||
LX_NATIVE_EXPORT(DosFindClose, 263),
|
||||
LX_NATIVE_EXPORT(DosFindFirst, 264),
|
||||
LX_NATIVE_EXPORT(DosFindNext, 265),
|
||||
LX_NATIVE_EXPORT(DosOpen, 273),
|
||||
LX_NATIVE_EXPORT(DosQueryCurrentDir, 274),
|
||||
LX_NATIVE_EXPORT(DosQueryCurrentDisk, 275),
|
||||
LX_NATIVE_EXPORT(DosQueryFHState, 276),
|
||||
LX_NATIVE_EXPORT(DosQueryFSAttach, 277),
|
||||
LX_NATIVE_EXPORT(DosQueryFileInfo, 279),
|
||||
LX_NATIVE_EXPORT(DosWaitChild, 280),
|
||||
LX_NATIVE_EXPORT(DosRead, 281),
|
||||
LX_NATIVE_EXPORT(DosWrite, 282),
|
||||
LX_NATIVE_EXPORT(DosExecPgm, 283),
|
||||
LX_NATIVE_EXPORT(DosSetProcessCp, 289),
|
||||
LX_NATIVE_EXPORT(DosQueryCp, 291),
|
||||
LX_NATIVE_EXPORT(DosExitList, 296),
|
||||
LX_NATIVE_EXPORT(DosAllocMem, 299),
|
||||
LX_NATIVE_EXPORT(DosFreeMem, 304),
|
||||
LX_NATIVE_EXPORT(DosSetMem, 305),
|
||||
LX_NATIVE_EXPORT(DosCreateThread, 311),
|
||||
LX_NATIVE_EXPORT(DosGetInfoBlocks, 312),
|
||||
LX_NATIVE_EXPORT(DosLoadModule, 318),
|
||||
LX_NATIVE_EXPORT(DosQueryModuleHandle, 319),
|
||||
LX_NATIVE_EXPORT(DosQueryModuleName, 320),
|
||||
LX_NATIVE_EXPORT(DosQueryProcAddr, 321),
|
||||
LX_NATIVE_EXPORT(DosQueryAppType, 323),
|
||||
LX_NATIVE_EXPORT(DosCreateEventSem, 324),
|
||||
LX_NATIVE_EXPORT(DosCloseEventSem, 326),
|
||||
LX_NATIVE_EXPORT(DosResetEventSem, 327),
|
||||
LX_NATIVE_EXPORT(DosPostEventSem, 328),
|
||||
LX_NATIVE_EXPORT(DosWaitEventSem, 329),
|
||||
LX_NATIVE_EXPORT(DosQueryEventSem, 330),
|
||||
LX_NATIVE_EXPORT(DosCreateMutexSem, 331),
|
||||
LX_NATIVE_EXPORT(DosCloseMutexSem, 333),
|
||||
LX_NATIVE_EXPORT(DosRequestMutexSem, 334),
|
||||
LX_NATIVE_EXPORT(DosReleaseMutexSem, 335),
|
||||
LX_NATIVE_EXPORT(DosSubSetMem, 344),
|
||||
LX_NATIVE_EXPORT(DosSubAllocMem, 345),
|
||||
LX_NATIVE_EXPORT(DosSubFreeMem, 346),
|
||||
LX_NATIVE_EXPORT(DosQuerySysInfo, 348),
|
||||
LX_NATIVE_EXPORT(DosSetExceptionHandler, 354),
|
||||
LX_NATIVE_EXPORT(DosUnsetExceptionHandler, 355),
|
||||
LX_NATIVE_EXPORT(DosQuerySysState, 368),
|
||||
LX_NATIVE_EXPORT(DosSetSignalExceptionFocus, 378),
|
||||
LX_NATIVE_EXPORT(DosEnterMustComplete, 380),
|
||||
LX_NATIVE_EXPORT(DosExitMustComplete, 381),
|
||||
LX_NATIVE_EXPORT(DosSetRelMaxFH, 382),
|
||||
LX_NATIVE_EXPORT(DosFlatToSel, 425),
|
||||
LX_NATIVE_EXPORT(DosSelToFlat, 426),
|
||||
LX_NATIVE_EXPORT(DosAllocThreadLocalMemory, 454),
|
||||
LX_NATIVE_EXPORT(DosFreeThreadLocalMemory, 455),
|
||||
LX_NATIVE_EXPORT(DosR3ExitAddr, 553),
|
||||
LX_NATIVE_EXPORT(DosQueryHeaderInfo, 582),
|
||||
LX_NATIVE_EXPORT(DosQueryExtLIBPATH, 874),
|
||||
LX_NATIVE_EXPORT(DosQueryThreadContext, 877),
|
||||
LX_NATIVE_EXPORT(DosOpenL, 981)
|
||||
LX_NATIVE_MODULE_INIT_END()
|
||||
|
||||
|
||||
// end of doscalls.c ...
|
||||
|
||||
Reference in new issue
Block a user