mirror of
https://github.com/reactos/reactos.git
synced 2024-12-26 17:14:41 +00:00
Move VMS subtree in the proper place.
svn path=/trunk/; revision=14948
This commit is contained in:
parent
51e5c11dc8
commit
143f5e1f74
17 changed files with 724 additions and 0 deletions
10
vms/include/vms/lpcproto.h
Normal file
10
vms/include/vms/lpcproto.h
Normal file
|
@ -0,0 +1,10 @@
|
|||
#ifndef __VMS_SYS_LPCPROTO_H
|
||||
#define __VMS_SYS_LPCPROTO_H
|
||||
|
||||
#define VMS_LPCPROTO_VERSION 1
|
||||
|
||||
#define VMS_OBNS_ROOT L"\\VMS"
|
||||
#define VMS_API_PORT_NAME L"\\VMS\\ApiPort"
|
||||
#define VMS_SBAPI_PORT_NAME L"\\VMS\\SbApiPort"
|
||||
|
||||
#endif
|
39
vms/lib/vmsdll/dllmain.c
Normal file
39
vms/lib/vmsdll/dllmain.c
Normal file
|
@ -0,0 +1,39 @@
|
|||
/* $Id: dllmain.c,v 1.5 2002/11/24 18:42:15 robd Exp $
|
||||
*
|
||||
* dllmain.c
|
||||
*
|
||||
* A stub DllMain function which will be called by DLLs which do not
|
||||
* have a user supplied DllMain.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRENTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warrenties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Revision: 1.5 $
|
||||
* $Author: robd $
|
||||
* $Date: 2002/11/24 18:42:15 $
|
||||
*
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
|
||||
/* LIBRARY ENTRY POINT ********************************************************/
|
||||
|
||||
BOOL
|
||||
WINAPI
|
||||
DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* EOF */
|
1
vms/lib/vmsdll/lib/stubs.c
Normal file
1
vms/lib/vmsdll/lib/stubs.c
Normal file
|
@ -0,0 +1 @@
|
|||
void lib$find_file () { }
|
44
vms/lib/vmsdll/makefile
Normal file
44
vms/lib/vmsdll/makefile
Normal file
|
@ -0,0 +1,44 @@
|
|||
# $Id$
|
||||
#
|
||||
PATH_TO_TOP = ../../../reactos
|
||||
|
||||
TARGET_TYPE = dynlink
|
||||
|
||||
TARGET_NAME = vmsdll
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror -fno-builtin \
|
||||
-D__USE_W32API \
|
||||
-D_WIN32_IE=0x0500 \
|
||||
-D_WIN32_WINNT=0x501 \
|
||||
-DWINVER=0x600 \
|
||||
|
||||
TARGET_LFLAGS = -nostartfiles -nostdlib
|
||||
|
||||
TARGET_SDKLIBS = ntdll.a
|
||||
|
||||
LIB_OBJECTS = \
|
||||
lib\stubs.o
|
||||
|
||||
RMS_OBJECTS = \
|
||||
rms\stubs.o
|
||||
|
||||
MISC_OBJECTS = \
|
||||
dllmain.o
|
||||
|
||||
SYS_OBJECTS = \
|
||||
sys\stubs.o
|
||||
|
||||
TARGET_OBJECTS = \
|
||||
$(LIB_OBJECTS) \
|
||||
$(RMS_OBJECTS) \
|
||||
$(SYS_OBJECTS) \
|
||||
$(MISC_OBJECTS)
|
||||
|
||||
DEP_OBJECTS = $(TARGET_OBJECTS)
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
include $(TOOLS_PATH)/depend.mk
|
||||
|
7
vms/lib/vmsdll/readme.txt
Normal file
7
vms/lib/vmsdll/readme.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
VMSDLL - ReactOS VMS+ Environment Subsystem
|
||||
|
||||
lib = Library APIs
|
||||
|
||||
rms = Record Management Services APIs
|
||||
|
||||
sys = System APIs
|
0
vms/lib/vmsdll/rms/stubs.c
Normal file
0
vms/lib/vmsdll/rms/stubs.c
Normal file
30
vms/lib/vmsdll/sys/stubs.c
Normal file
30
vms/lib/vmsdll/sys/stubs.c
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* $Id$ */
|
||||
void sys$ascefc (void) {}
|
||||
void sys$asctim (void) {}
|
||||
void sys$assign (void) {}
|
||||
void sys$bintim (void) {}
|
||||
void sys$clref (void) {}
|
||||
void sys$crelnm (void) {}
|
||||
void sys$crelnt (void) {}
|
||||
void sys$dclast (void) {}
|
||||
void sys$enq (void) {}
|
||||
void sys$forcex (void) {}
|
||||
void sys$gettim (void) {}
|
||||
void sys$hiber (void) {}
|
||||
void sys$numtim (void) {}
|
||||
void sys$qio (void) {}
|
||||
void sys$qiow (void) {}
|
||||
void sys$readef (void) {}
|
||||
void sys$schdwk (void) {}
|
||||
void sys$setef (void) {}
|
||||
void sys$setast (void) {}
|
||||
void sys$setime (void) {}
|
||||
void sys$setimr (void) {}
|
||||
void sys$setpri (void) {}
|
||||
void sys$setprn (void) {}
|
||||
void sys$synch (void) {}
|
||||
void sys$trnlnm (void) {}
|
||||
void sys$waitfr (void) {}
|
||||
void sys$wake (void) {}
|
||||
|
||||
/* EOF */
|
32
vms/lib/vmsdll/vmsdll.def
Normal file
32
vms/lib/vmsdll/vmsdll.def
Normal file
|
@ -0,0 +1,32 @@
|
|||
LIBRARY vmsdll.dll
|
||||
EXPORTS
|
||||
; LIB
|
||||
lib$find_file
|
||||
; SYS
|
||||
sys$ascefc
|
||||
sys$asctim
|
||||
sys$assign
|
||||
sys$bintim
|
||||
sys$clref
|
||||
sys$crelnm
|
||||
sys$crelnt
|
||||
sys$dclast
|
||||
sys$enq
|
||||
sys$forcex
|
||||
sys$gettim
|
||||
sys$hiber
|
||||
sys$numtim
|
||||
sys$qio
|
||||
sys$qiow
|
||||
sys$readef
|
||||
sys$schdwk
|
||||
sys$setef
|
||||
sys$setast
|
||||
sys$setime
|
||||
sys$setimr
|
||||
sys$setpri
|
||||
sys$setprn
|
||||
sys$synch
|
||||
sys$trnlnm
|
||||
sys$waitfr
|
||||
sys$wake
|
4
vms/lib/vmsdll/vmsdll.rc
Normal file
4
vms/lib/vmsdll/vmsdll.rc
Normal file
|
@ -0,0 +1,4 @@
|
|||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS/VMS API Client Library\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "vmsdll\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "vmdsll.dll\0"
|
||||
#include <reactos/version.rc>
|
120
vms/makefile
Normal file
120
vms/makefile
Normal file
|
@ -0,0 +1,120 @@
|
|||
# $Id$
|
||||
#
|
||||
# ReactOS VMS Personality
|
||||
#
|
||||
|
||||
PATH_TO_TOP = ../reactos
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
VMS_PATH = .
|
||||
|
||||
VMS_OTHER = server
|
||||
|
||||
VMS_TOOLS = mksystab
|
||||
|
||||
VMS_LIBS = vmsdll
|
||||
|
||||
VMS_APPS = # vmsw32
|
||||
|
||||
VMS_MODULES = $(VMS_OTHER) $(VMS_TOOLS) $(VMS_LIBS) $(VMS_APPS)
|
||||
|
||||
all: implib $(VMS_MODULES)
|
||||
|
||||
implib: $(VMS_MODULES:%=%_implib)
|
||||
|
||||
clean: $(VMS_MODULES:%=%_clean)
|
||||
|
||||
install: $(VMS_MODULES:%=%_install)
|
||||
|
||||
.PHONY: all implib clean
|
||||
|
||||
|
||||
#
|
||||
# Other VMS+ Modules
|
||||
#
|
||||
$(VMS_OTHER): %:
|
||||
make -f Makefile -C $(VMS_PATH)/$*
|
||||
|
||||
$(VMS_OTHER:%=%_implib): %_implib:
|
||||
make -f Makefile -C $(VMS_PATH)/$* implib
|
||||
|
||||
$(VMS_OTHER:%=%_clean): %_clean:
|
||||
make -f Makefile -C $(VMS_PATH)/$* clean
|
||||
|
||||
$(VMS_OTHER:%=%_dist): %_dist:
|
||||
make -f Makefile -C $(VMS_PATH)/$* dist
|
||||
|
||||
$(VMS_OTHER:%=%_install): %_install:
|
||||
make -f Makefile -C $(VMS_PATH)/$* install
|
||||
|
||||
.PHONY: $(VMS_OTHER) $(VMS_OTHER:%=%_implib) $(VMS_OTHER:%=%_clean) $(VMS_OTHER:%=%_install) $(VMS_OTHER:%=%_dist)
|
||||
|
||||
|
||||
#
|
||||
# VMS+ Tools
|
||||
#
|
||||
$(VMS_TOOLS): %:
|
||||
make -f Makefile -C $(VMS_PATH)/tools/$*
|
||||
|
||||
$(VMS_TOOLS:%=%_implib): %_implib:
|
||||
make -f Makefile -C $(VMS_PATH)/tools/$* implib
|
||||
|
||||
$(VMS_TOOLS:%=%_clean): %_clean:
|
||||
make -f Makefile -C $(VMS_PATH)/tools/$* clean
|
||||
|
||||
$(VMS_TOOLS:%=%_dist): %_dist:
|
||||
make -f Makefile -C $(VMS_PATH)/tools/$* dist
|
||||
|
||||
$(VMS_TOOLS:%=%_install): %_install:
|
||||
make -f Makefile -C $(VMS_PATH)/tools/$* install
|
||||
|
||||
.PHONY: $(VMS_LIBS) $(VMS_LIBS:%=%_implib) $(VMS_LIBS:%=%_clean) $(VMS_LIBS:%=%_install) $(VMS_LIBS:%=%_dist)
|
||||
|
||||
|
||||
#
|
||||
# VMS+ DLLs
|
||||
#
|
||||
$(VMS_LIBS): %:
|
||||
make -f Makefile -C $(VMS_PATH)/lib/$*
|
||||
|
||||
$(VMS_LIBS:%=%_implib): %_implib:
|
||||
make -f Makefile -C $(VMS_PATH)/lib/$* implib
|
||||
|
||||
$(VMS_LIBS:%=%_clean): %_clean:
|
||||
make -f Makefile -C $(VMS_PATH)/lib/$* clean
|
||||
|
||||
$(VMS_LIBS:%=%_dist): %_dist:
|
||||
make -f Makefile -C $(VMS_PATH)/lib/$* dist
|
||||
|
||||
$(VMS_LIBS:%=%_install): %_install:
|
||||
make -f Makefile -C $(VMS_PATH)/lib/$* install
|
||||
|
||||
.PHONY: $(VMS_LIBS) $(VMS_LIBS:%=%_implib) $(VMS_LIBS:%=%_clean) $(VMS_LIBS:%=%_install) $(VMS_LIBS:%=%_dist)
|
||||
|
||||
|
||||
#
|
||||
# VMS+ Programs
|
||||
#
|
||||
$(VMS_APPS): %:
|
||||
make -f Makefile -C $(VMS_PATH)/apps/$*
|
||||
|
||||
$(VMS_APPS:%=%_implib): %_implib:
|
||||
make -f Makefile -C $(VMS_PATH)/apps/$* implib
|
||||
|
||||
$(VMS_APPS:%=%_clean): %_clean:
|
||||
make -f Makefile -C $(VMS_PATH)/apps/$* clean
|
||||
|
||||
$(VMS_APPS:%=%_dist): %_dist:
|
||||
make -f Makefile -C $(VMS_PATH)/apps/$* dist
|
||||
|
||||
$(VMS_APPS:%=%_install): %_install:
|
||||
make -f Makefile -C $(VMS_PATH)/apps/$* install
|
||||
|
||||
.PHONY: $(VMS_APPS) $(VMS_APPS:%=%_implib) $(VMS_APPS:%=%_clean) $(VMS_APPS:%=%_install) $(VMS_APPS:%=%_dist)
|
||||
|
||||
|
||||
etags:
|
||||
find . -name "*.[ch]" -print | etags --language=c -
|
||||
|
||||
# EOF
|
275
vms/server/init.c
Normal file
275
vms/server/init.c
Normal file
|
@ -0,0 +1,275 @@
|
|||
/* $Id: $
|
||||
*
|
||||
* init.c - VMS Enviroment Subsystem Server - Initialization
|
||||
*
|
||||
* ReactOS Operating System
|
||||
*
|
||||
* --------------------------------------------------------------------
|
||||
*
|
||||
* This software is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING.LIB. If not, write
|
||||
* to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
|
||||
* MA 02139, USA.
|
||||
*
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
#include "vmsss.h"
|
||||
|
||||
//#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
|
||||
HANDLE VmsSbApiPort = (HANDLE) 0; // \VMS\SbApiPort
|
||||
HANDLE SmCalledBack = (HANDLE) 0; // signalled when SM connects to \VMS\SbApiPort
|
||||
HANDLE SmVmsSbApiPort = (HANDLE) 0; // server side (our one) port for SM conn request
|
||||
HANDLE SmApiPort = (HANDLE) 0; // client side of \SmApiPort
|
||||
|
||||
HANDLE VmsSessionPort = (HANDLE) 0; // pseudo terminals call here for a new session
|
||||
HANDLE VmsApiPort = (HANDLE) 0; // VMS processes call here for system calls
|
||||
|
||||
/**********************************************************************
|
||||
* SB API Port Thread
|
||||
*********************************************************************/
|
||||
static VOID STDCALL
|
||||
VmsSbApiPortThread (PVOID x)
|
||||
{
|
||||
HANDLE Port = (HANDLE) x;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
LPC_MAX_MESSAGE ConnectionRequest = {{0}};
|
||||
|
||||
DPRINT("VMS: %s: called\n", __FUNCTION__);
|
||||
|
||||
Status = NtListenPort (Port, & ConnectionRequest.Header);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("VMS: %s: NtListenPort failed (Status=0x%08lx)\n",
|
||||
__FUNCTION__, Status);
|
||||
}else{
|
||||
DPRINT("VMS: %s received a connection request\n", __FUNCTION__);
|
||||
Status = NtAcceptConnectPort (& SmVmsSbApiPort,
|
||||
0,
|
||||
& ConnectionRequest.Header,
|
||||
TRUE, /* accept it */
|
||||
NULL,
|
||||
NULL);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("VMS: %s: NtAcceptConnectPort failed (Status=0x%08lx)\n",
|
||||
__FUNCTION__, Status);
|
||||
}else{
|
||||
DPRINT("VMS: %s accepted the connection request\n", __FUNCTION__);
|
||||
Status = NtCompleteConnectPort (SmVmsSbApiPort);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("VMS: %s: NtCompleteConnectPort failed (Status=0x%08lx)\n",
|
||||
__FUNCTION__, Status);
|
||||
}else{
|
||||
DPRINT("VMS: %s completed the connection request\n", __FUNCTION__);
|
||||
Status = NtSetEvent (SmCalledBack, NULL);
|
||||
DPRINT("VMS: %s signalled the main thread to initialize the subsystem\n", __FUNCTION__);
|
||||
DPRINT("VMS: %s enters main loop\n", __FUNCTION__);
|
||||
while (TRUE)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
NtClose (Port);
|
||||
NtTerminateThread (NtCurrentThread(), Status);
|
||||
}
|
||||
/**********************************************************************
|
||||
* API Port Thread
|
||||
*********************************************************************/
|
||||
static VOID STDCALL
|
||||
VmsApiPortThread (PVOID x)
|
||||
{
|
||||
HANDLE Port = (HANDLE) x;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
DPRINT("VMS: %s: called\n", __FUNCTION__);
|
||||
while (TRUE)
|
||||
{
|
||||
}
|
||||
NtClose (Port);
|
||||
NtTerminateThread (NtCurrentThread(), Status);
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* NAME PRIVATE
|
||||
* VmspCreateObDirectory/1
|
||||
*/
|
||||
static NTSTATUS FASTCALL
|
||||
VmspCreateObDirectory (PWSTR DirectoryName)
|
||||
{
|
||||
UNICODE_STRING usDirectoryName = {0};
|
||||
OBJECT_ATTRIBUTES DirectoryAttributes = {0};
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
HANDLE hDirectory = (HANDLE) 0;
|
||||
|
||||
DPRINT("VMS: %s called\n", __FUNCTION__);
|
||||
|
||||
RtlInitUnicodeString (& usDirectoryName,
|
||||
DirectoryName);
|
||||
InitializeObjectAttributes (& DirectoryAttributes,
|
||||
& usDirectoryName,
|
||||
0, NULL, NULL);
|
||||
Status = NtCreateDirectoryObject (& hDirectory,
|
||||
DIRECTORY_CREATE_SUBDIRECTORY,
|
||||
& DirectoryAttributes);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("VMS: %s: NtCreateDirectoryObject failed (Status=0x%08lx)\n",
|
||||
__FUNCTION__, Status);
|
||||
return Status;
|
||||
}
|
||||
NtClose (hDirectory);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* NAME PRIVATE
|
||||
* VmspCreatePort/1
|
||||
*/
|
||||
static NTSTATUS STDCALL
|
||||
VmspCreatePort (IN OUT PHANDLE pPortHandle,
|
||||
IN PWSTR PortName,
|
||||
IN ULONG MaxDataSize,
|
||||
IN ULONG MaxMessageSize,
|
||||
IN PTHREAD_START_ROUTINE ListeningThread)
|
||||
{
|
||||
UNICODE_STRING usPortName = {0};
|
||||
OBJECT_ATTRIBUTES PortAttributes = {0};
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
DPRINT("VMS: %s called\n", __FUNCTION__);
|
||||
|
||||
if(NULL == ListeningThread)
|
||||
{
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
RtlInitUnicodeString (& usPortName, PortName);
|
||||
Status = NtCreatePort (pPortHandle,
|
||||
& PortAttributes,
|
||||
MaxDataSize,
|
||||
MaxMessageSize,
|
||||
0);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("VMS: %s: NtCreatePort failed (Status=0x%08lx)\n", __FUNCTION__, Status);
|
||||
return Status;
|
||||
}
|
||||
Status = RtlCreateUserThread (NtCurrentProcess(),
|
||||
NULL,
|
||||
FALSE,
|
||||
0, 0, 0,
|
||||
ListeningThread,
|
||||
pPortHandle,
|
||||
NULL, NULL);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("VMS: %s: RtlCreateUserThread failed (Status=0x%08lx)\n", __FUNCTION__, Status);
|
||||
return Status;
|
||||
}
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* VmsInitializeServer/0
|
||||
*/
|
||||
NTSTATUS
|
||||
VmsInitializeServer(VOID)
|
||||
{
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
WCHAR NameBuffer [32];
|
||||
|
||||
DPRINT("VMS: %s called\n", __FUNCTION__);
|
||||
|
||||
/* Create the \VMS directory */
|
||||
wcscpy (NameBuffer, L"\\VMS");
|
||||
Status = VmspCreateObDirectory (NameBuffer);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("VMS: %s: VmspCreateObDirectory failed!\n", __FUNCTION__);
|
||||
}else{
|
||||
/* Create the \VMS\SbApiPort port */
|
||||
wcscat (NameBuffer, L"\\SbApiPort");
|
||||
Status = VmspCreatePort (& VmsSbApiPort,
|
||||
NameBuffer,
|
||||
0x104,
|
||||
0x148,
|
||||
VmsSbApiPortThread);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("VMS %s: VmspCreatePort failed (Status=%08lx)\n",
|
||||
__FUNCTION__, Status);
|
||||
return Status;
|
||||
}else{
|
||||
OBJECT_ATTRIBUTES EventAttributes;
|
||||
|
||||
InitializeObjectAttributes (& EventAttributes,
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
NULL);
|
||||
Status = NtCreateEvent (& SmCalledBack,
|
||||
EVENT_ALL_ACCESS,
|
||||
& EventAttributes,
|
||||
SynchronizationEvent,
|
||||
FALSE);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("VMS: %s: NtCreateEvent failed (Status=0x%08lx)\n",
|
||||
__FUNCTION__, Status);
|
||||
return Status;
|
||||
}else{
|
||||
UNICODE_STRING VmsSbApiPortName;
|
||||
|
||||
RtlInitUnicodeString (& VmsSbApiPortName, NameBuffer);
|
||||
Status = SmConnectApiPort (& VmsSbApiPortName,
|
||||
VmsSbApiPort,
|
||||
77, /* VMS CUI */
|
||||
& SmApiPort);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("VMS: %s: SmConnectApiPort failed (Status=0x%08lx)\n",
|
||||
__FUNCTION__, Status);
|
||||
return Status;
|
||||
}else{
|
||||
Status = NtWaitForSingleObject (SmCalledBack,
|
||||
FALSE,
|
||||
INFINITE);
|
||||
/* OK initialize the VMS subsystem */
|
||||
wcscpy (& NameBuffer[4], L"\\ApiPort");
|
||||
Status = VmspCreatePort (& VmsApiPort,
|
||||
NameBuffer,
|
||||
0x104,
|
||||
0x148,
|
||||
VmsApiPortThread);
|
||||
/* TODO */
|
||||
|
||||
wcscpy (& NameBuffer[4], L"\\Session");
|
||||
Status = VmspCreateObDirectory (NameBuffer);
|
||||
/* TODO */
|
||||
|
||||
Status = SmCompleteSession (SmApiPort,
|
||||
VmsSbApiPort,
|
||||
VmsApiPort);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* EOF */
|
24
vms/server/makefile
Normal file
24
vms/server/makefile
Normal file
|
@ -0,0 +1,24 @@
|
|||
# $Id: $
|
||||
#
|
||||
# ReactOS VMS+ Environment Subsystem Server
|
||||
#
|
||||
|
||||
PATH_TO_TOP = ../../reactos
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = native
|
||||
|
||||
TARGET_NAME = vmsss
|
||||
|
||||
TARGET_SDKLIBS = ntdll.a smdll.a
|
||||
|
||||
TARGET_CFLAGS = -Iinclude -I../include
|
||||
|
||||
TARGET_OBJECTS = vmsss.o init.o server.o
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
68
vms/server/server.c
Normal file
68
vms/server/server.c
Normal file
|
@ -0,0 +1,68 @@
|
|||
/* $Id: $
|
||||
*
|
||||
* init.c - VMS Enviroment Subsystem Server - Initialization
|
||||
*
|
||||
* ReactOS Operating System
|
||||
*
|
||||
* --------------------------------------------------------------------
|
||||
*
|
||||
* This software is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING.LIB. If not, write
|
||||
* to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
|
||||
* MA 02139, USA.
|
||||
*
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
#define __USE_NT_LPC__
|
||||
#include "vmsss.h"
|
||||
|
||||
//#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME PRIVATE
|
||||
* VmspCreatePort/1
|
||||
*/
|
||||
NTSTATUS VmsRunServer (VOID)
|
||||
{
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
LPC_MAX_MESSAGE Request;
|
||||
PLPC_MESSAGE Reply = NULL;
|
||||
ULONG MessageType = 0;
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
Status = NtReplyWaitReceivePort (VmsApiPort,
|
||||
0,
|
||||
Reply,
|
||||
& Request);
|
||||
if(NT_SUCCESS(Status))
|
||||
{
|
||||
MessageType = PORT_MESSAGE_TYPE(Request);
|
||||
DPRINT("VMS: %s received a message (Type=%d)\n",
|
||||
__FUNCTION__, MessageType);
|
||||
switch(MessageType)
|
||||
{
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
}else{
|
||||
DPRINT("VMS: %s: NtReplyWaitReceivePort failed (Status=%08lx)\n",
|
||||
__FUNCTION__, Status);
|
||||
}
|
||||
}
|
||||
return Status;
|
||||
}
|
||||
|
||||
/* EOF */
|
46
vms/server/vmsss.c
Normal file
46
vms/server/vmsss.c
Normal file
|
@ -0,0 +1,46 @@
|
|||
/* $Id: $
|
||||
*
|
||||
* vmsss.c - VMS Enviroment Subsystem Server
|
||||
*
|
||||
* ReactOS Operating System
|
||||
*
|
||||
* --------------------------------------------------------------------
|
||||
*
|
||||
* This software is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING.LIB. If not, write
|
||||
* to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
|
||||
* MA 02139, USA.
|
||||
*
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
#include "vmsss.h"
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
/* Native image's entry point */
|
||||
|
||||
VOID STDCALL
|
||||
NtProcessStartup(PPEB Peb)
|
||||
{
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
Status = VmsInitializeServer();
|
||||
if(STATUS_SUCCESS != Status)
|
||||
{
|
||||
DPRINT("VMS: VmsInitializeServer failed! Aborting. (Status=%lx)\n", Status);
|
||||
}
|
||||
Status = VmsRunServer();
|
||||
NtTerminateProcess(NtCurrentProcess(),Status);
|
||||
}
|
||||
/* EOF */
|
15
vms/server/vmsss.h
Normal file
15
vms/server/vmsss.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
#ifndef _VMSSS_H_INCLUDED_
|
||||
#define _VMSSS_H_INCLUDED_
|
||||
|
||||
#define NTOS_MODE_USER
|
||||
#include <ntos.h>
|
||||
#include <sm/helper.h>
|
||||
|
||||
/* init.c */
|
||||
extern HANDLE VmsApiPort;
|
||||
NTSTATUS VmsInitializeServer(VOID);
|
||||
|
||||
/* server.c */
|
||||
NTSTATUS VmsRunServer(VOID);
|
||||
|
||||
#endif /* ndef _VMSSS_H_INCLUDED_ */
|
4
vms/server/vmsss.rc
Normal file
4
vms/server/vmsss.rc
Normal file
|
@ -0,0 +1,4 @@
|
|||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS/VMS Environment Subsystem Server\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "vmsss\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "vmsss.exe\0"
|
||||
#include <reactos/version.rc>
|
5
vms/tools/mksystab/makefile
Normal file
5
vms/tools/mksystab/makefile
Normal file
|
@ -0,0 +1,5 @@
|
|||
all: implib
|
||||
|
||||
implib:
|
||||
|
||||
clean:
|
Loading…
Reference in a new issue