if ( iFlagL )
{
/* 詳細表示 */
- StdIo_PutString("filename size attr\n");
- StdIo_PutString("------------+-----------+------\n");
+ StdIo_PutString("filename size attr information\n");
+ StdIo_PutString("------------+-----------+------+---------------\n");
}
/* ディレクトリを読み出す */
if ( FileInf.Attribute & FILE_ATTR_HIDDEN ) { StdIo_PutChar('h'); } else { StdIo_PutChar('-'); }
if ( FileInf.Attribute & FILE_ATTR_DIR ) { StdIo_PutChar('d'); } else { StdIo_PutChar('-'); }
if ( FileInf.Attribute & FILE_ATTR_ARCHIVE ) { StdIo_PutChar('a'); } else { StdIo_PutChar('-'); }
+ StdIo_PutChar(' ');
+ StdIo_PutString(FileInf.szInformation);
StdIo_PutChar('\n');
}
else
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file processsignal.h
+ * @brief %jp{プロセスシグナルコマンド}
+ *
+ * Copyright (C) 2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __HOS__processsignal_h__
+#define __HOS__processsignal_h__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int ProcessSignal_Main(int argc, char *argv[]);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __HOS__processsignal_h__ */
+
+
+/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file processsignal.h
+ * @brief %jp{プロセスシグナルコマンド}
+ *
+ * Copyright (C) 2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include <stdlib.h>
+#include <string.h>
+#include "hosaplfw.h"
+#include "processsignal.h"
+
+
+int ProcessSignal_Main(int argc, char *argv[])
+{
+ HANDLE hProcess;
+ int iSignal = PROCESS_SIGNAL_KILL;
+
+ if ( argc < 2 )
+ {
+ StdIo_PrintFormat(
+ "<usage>\n"
+ " %s [options] prosesshandle\n\n",
+ argv[0]
+ );
+ return 1;
+ }
+
+ hProcess = (HANDLE)strtoul(argv[1], NULL, 0);
+
+
+ Process_SendSignal(hProcess, iSignal);
+
+
+ return 0;
+}
+
+
+/* end of file */
Inf.hStdIn = Process_GetStdIn(HANDLE_NULL); /* 標準入力 */
Inf.hStdOut = Process_GetStdOut(HANDLE_NULL); /* 標準出力 */
Inf.hStdErr = Process_GetStdErr(HANDLE_NULL); /* 標準エラー出力 */
- hProcess = Process_Create(&Inf);
+ hProcess = Process_CreateEx(&Inf);
if ( iBackGround )
{
$(OBJS_DIR)/sysprc_resume.$(EXT_OBJ): $(SYSAPI_DIR)/sysprc_resume.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/sysprc_getparam.$(EXT_OBJ): $(SYSAPI_DIR)/sysprc_getparam.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/sysprc_getcurrenthandle.$(EXT_OBJ): $(SYSAPI_DIR)/sysprc_getcurrenthandle.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/sysprc_setsignalhandler.$(EXT_OBJ): $(SYSAPI_DIR)/sysprc_setsignalhandler.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/sysprc_sendsignal.$(EXT_OBJ): $(SYSAPI_DIR)/sysprc_sendsignal.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/systim_signal.$(EXT_OBJ): $(SYSAPI_DIR)/systim_signal.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/systim_wait.$(EXT_OBJ): $(SYSAPI_DIR)/systim_wait.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/systim_getsystemtime.$(EXT_OBJ): $(SYSAPI_DIR)/systim_getsystemtime.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/time_getsystemtime.$(EXT_OBJ): $(TIME_DIR)/time_getsystemtime.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/time_wait.$(EXT_OBJ): $(TIME_DIR)/time_wait.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/process_create.$(EXT_OBJ): $(PROCESS_DIR)/process_create.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/process_createex.$(EXT_OBJ): $(PROCESS_DIR)/process_createex.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/process_delete.$(EXT_OBJ): $(PROCESS_DIR)/process_delete.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/process_constructor.$(EXT_OBJ): $(PROCESS_DIR)/process_constructor.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/process_destructor.$(EXT_OBJ): $(PROCESS_DIR)/process_destructor.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/process_getcurrenthandle.$(EXT_OBJ): $(PROCESS_DIR)/process_getcurrenthandle.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/process_exit.$(EXT_OBJ): $(PROCESS_DIR)/process_exit.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/process_waitexit.$(EXT_OBJ): $(PROCESS_DIR)/process_waitexit.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/process_setsignalproc.$(EXT_OBJ): $(PROCESS_DIR)/process_setsignalproc.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/process_sendsignal.$(EXT_OBJ): $(PROCESS_DIR)/process_sendsignal.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/process_getexitcode.$(EXT_OBJ): $(PROCESS_DIR)/process_getexitcode.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/process_getparam.$(EXT_OBJ): $(PROCESS_DIR)/process_getparam.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/process_setparam.$(EXT_OBJ): $(PROCESS_DIR)/process_setparam.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/file_readdir.$(EXT_OBJ): $(FILE_DIR)/file_readdir.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/file_seek.$(EXT_OBJ): $(FILE_DIR)/file_seek.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/file_write.$(EXT_OBJ): $(FILE_DIR)/file_write.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/file_driveropen.$(EXT_OBJ): $(FILE_DIR)/file_driveropen.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/file_getdriverinformation.$(EXT_OBJ): $(FILE_DIR)/file_getdriverinformation.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/file_printformat.$(EXT_OBJ): $(FILE_DIR)/file_printformat.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/file_printformatv.$(EXT_OBJ): $(FILE_DIR)/file_printformatv.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/stdio_printformat.$(EXT_OBJ): $(FILE_DIR)/stdio_printformat.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/fatfile_delete.$(EXT_OBJ): $(FATVOL_DIR)/fatfile_delete.c $(COMMON_HEADERS)
$(OBJS_DIR)/fatfile_constructor.$(EXT_OBJ): $(FATVOL_DIR)/fatfile_constructor.c $(COMMON_HEADERS)
$(OBJS_DIR)/fatfile_destructor.$(EXT_OBJ): $(FATVOL_DIR)/fatfile_destructor.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memdrv_create.$(EXT_OBJ): $(MEMDRV_DIR)/memdrv_create.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memdrv_delete.$(EXT_OBJ): $(MEMDRV_DIR)/memdrv_delete.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memdrv_constructor.$(EXT_OBJ): $(MEMDRV_DIR)/memdrv_constructor.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memdrv_destructor.$(EXT_OBJ): $(MEMDRV_DIR)/memdrv_destructor.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memdrv_open.$(EXT_OBJ): $(MEMDRV_DIR)/memdrv_open.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memdrv_close.$(EXT_OBJ): $(MEMDRV_DIR)/memdrv_close.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memdrv_iocontrol.$(EXT_OBJ): $(MEMDRV_DIR)/memdrv_iocontrol.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memdrv_flush.$(EXT_OBJ): $(MEMDRV_DIR)/memdrv_flush.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memdrv_read.$(EXT_OBJ): $(MEMDRV_DIR)/memdrv_read.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memdrv_seek.$(EXT_OBJ): $(MEMDRV_DIR)/memdrv_seek.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memdrv_write.$(EXT_OBJ): $(MEMDRV_DIR)/memdrv_write.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memfile_create.$(EXT_OBJ): $(MEMDRV_DIR)/memfile_create.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memfile_delete.$(EXT_OBJ): $(MEMDRV_DIR)/memfile_delete.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memfile_constructor.$(EXT_OBJ): $(MEMDRV_DIR)/memfile_constructor.c $(COMMON_HEADERS)
+$(OBJS_DIR)/memfile_destructor.$(EXT_OBJ): $(MEMDRV_DIR)/memfile_destructor.c $(COMMON_HEADERS)
$(OBJS_DIR)/shell_main.$(EXT_OBJ): $(SHELL_DIR)/shell_main.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/shell_create.$(EXT_OBJ): $(SHELL_DIR)/shell_create.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/shell_delete.$(EXT_OBJ): $(SHELL_DIR)/shell_delete.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/shell_curleft.$(EXT_OBJ): $(SHELL_DIR)/shell_curleft.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/shell_replaceline.$(EXT_OBJ): $(SHELL_DIR)/shell_replaceline.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/processlist_main.$(EXT_OBJ): $(PROCESSLIST_DIR)/processlist_main.c $(COMMON_HEADERS)
+$(OBJS_DIR)/processsignal_main.$(EXT_OBJ): $(PROCESSSIGNAL_DIR)/processsignal_main.c $(COMMON_HEADERS)
$(OBJS_DIR)/commandlist_main.$(EXT_OBJ): $(COMMANDLIST_DIR)/commandlist_main.c $(COMMON_HEADERS)
$(OBJS_DIR)/memdump_main.$(EXT_OBJ): $(MEMDUMP_DIR)/memdump_main.c $(COMMON_HEADERS)
$(OBJS_DIR)/memwrite_main.$(EXT_OBJ): $(MEMWRITE_DIR)/memwrite_main.c $(COMMON_HEADERS)
LINK_MN103SC ?= No
LINK_WINSOCK ?= No
LINK_FATVOL ?= Yes
+LINK_MEMDRV ?= Yes
# Applications
LINK_SHELL ?= Yes
LINK_PROCESSLIST ?= Yes
+LINK_PROCESSSIGNAL ?= Yes
LINK_COMMANDLIST ?= Yes
LINK_MEMDUMP ?= Yes
LINK_MEMWRITE ?= Yes
CSRCS += $(SYSAPI_DIR)/sysprc_resume.c
CSRCS += $(SYSAPI_DIR)/sysprc_getparam.c
CSRCS += $(SYSAPI_DIR)/sysprc_getcurrenthandle.c
+CSRCS += $(SYSAPI_DIR)/sysprc_setsignalhandler.c
+CSRCS += $(SYSAPI_DIR)/sysprc_sendsignal.c
CSRCS += $(SYSAPI_DIR)/systim_signal.c
CSRCS += $(SYSAPI_DIR)/systim_wait.c
CSRCS += $(SYSAPI_DIR)/systim_getsystemtime.c
PROCESS_DIR = $(HOSAPLFW_DIR)/system/process
SRC_DIRS += $(PROCESS_DIR)
CSRCS += $(PROCESS_DIR)/process_create.c
+CSRCS += $(PROCESS_DIR)/process_createex.c
CSRCS += $(PROCESS_DIR)/process_delete.c
CSRCS += $(PROCESS_DIR)/process_constructor.c
CSRCS += $(PROCESS_DIR)/process_destructor.c
CSRCS += $(PROCESS_DIR)/process_getcurrenthandle.c
CSRCS += $(PROCESS_DIR)/process_exit.c
CSRCS += $(PROCESS_DIR)/process_waitexit.c
+CSRCS += $(PROCESS_DIR)/process_setsignalproc.c
+CSRCS += $(PROCESS_DIR)/process_sendsignal.c
CSRCS += $(PROCESS_DIR)/process_getexitcode.c
CSRCS += $(PROCESS_DIR)/process_getparam.c
CSRCS += $(PROCESS_DIR)/process_setparam.c
CSRCS += $(FILE_DIR)/file_readdir.c
CSRCS += $(FILE_DIR)/file_seek.c
CSRCS += $(FILE_DIR)/file_write.c
+CSRCS += $(FILE_DIR)/file_driveropen.c
+CSRCS += $(FILE_DIR)/file_getdriverinformation.c
CSRCS += $(FILE_DIR)/file_printformat.c
CSRCS += $(FILE_DIR)/file_printformatv.c
CSRCS += $(FILE_DIR)/stdio_printformat.c
endif
+# Memory maped file driver
+ifeq ($(LINK_MEMDRV),Yes)
+MEMDRV_DIR = $(HOSAPLFW_DIR)/driver/misc/memdrv
+SRC_DIRS += $(MEMDRV_DIR)
+CSRCS += $(MEMDRV_DIR)/memdrv_create.c
+CSRCS += $(MEMDRV_DIR)/memdrv_delete.c
+CSRCS += $(MEMDRV_DIR)/memdrv_constructor.c
+CSRCS += $(MEMDRV_DIR)/memdrv_destructor.c
+CSRCS += $(MEMDRV_DIR)/memdrv_open.c
+CSRCS += $(MEMDRV_DIR)/memdrv_close.c
+CSRCS += $(MEMDRV_DIR)/memdrv_iocontrol.c
+CSRCS += $(MEMDRV_DIR)/memdrv_flush.c
+CSRCS += $(MEMDRV_DIR)/memdrv_read.c
+CSRCS += $(MEMDRV_DIR)/memdrv_seek.c
+CSRCS += $(MEMDRV_DIR)/memdrv_write.c
+CSRCS += $(MEMDRV_DIR)/memfile_create.c
+CSRCS += $(MEMDRV_DIR)/memfile_delete.c
+CSRCS += $(MEMDRV_DIR)/memfile_constructor.c
+CSRCS += $(MEMDRV_DIR)/memfile_destructor.c
+endif
+
+
# --------------------------------------------------
# Applications
endif
+# Process Signal
+ifeq ($(LINK_PROCESSSIGNAL),Yes)
+PROCESSSIGNAL_DIR = $(HOSAPLFW_DIR)/application/syscmd/processsignal
+SRC_DIRS += $(PROCESSSIGNAL_DIR)
+CSRCS += $(PROCESSSIGNAL_DIR)/processsignal_main.c
+endif
+
+
# Command List
ifeq ($(LINK_COMMANDLIST),Yes)
COMMANDLIST_DIR = $(HOSAPLFW_DIR)/application/syscmd/commandlist
$(OBJS_DIR)\sysprc_getcurrenthandle.c : $(SYSAPI_DIR)\sysprc_getcurrenthandle.c
$(CMD_CP) $(SYSAPI_DIR)\sysprc_getcurrenthandle.c $(OBJS_DIR)\
+$(OBJS_DIR)\sysprc_setsignalhandler.c : $(SYSAPI_DIR)\sysprc_setsignalhandler.c
+ $(CMD_CP) $(SYSAPI_DIR)\sysprc_setsignalhandler.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\sysprc_sendsignal.c : $(SYSAPI_DIR)\sysprc_sendsignal.c
+ $(CMD_CP) $(SYSAPI_DIR)\sysprc_sendsignal.c $(OBJS_DIR)\
+
$(OBJS_DIR)\systim_signal.c : $(SYSAPI_DIR)\systim_signal.c
$(CMD_CP) $(SYSAPI_DIR)\systim_signal.c $(OBJS_DIR)\
$(OBJS_DIR)\process_create.c : $(PROCESS_DIR)\process_create.c
$(CMD_CP) $(PROCESS_DIR)\process_create.c $(OBJS_DIR)\
+$(OBJS_DIR)\process_createex.c : $(PROCESS_DIR)\process_createex.c
+ $(CMD_CP) $(PROCESS_DIR)\process_createex.c $(OBJS_DIR)\
+
$(OBJS_DIR)\process_delete.c : $(PROCESS_DIR)\process_delete.c
$(CMD_CP) $(PROCESS_DIR)\process_delete.c $(OBJS_DIR)\
$(OBJS_DIR)\process_waitexit.c : $(PROCESS_DIR)\process_waitexit.c
$(CMD_CP) $(PROCESS_DIR)\process_waitexit.c $(OBJS_DIR)\
+$(OBJS_DIR)\process_setsignalproc.c : $(PROCESS_DIR)\process_setsignalproc.c
+ $(CMD_CP) $(PROCESS_DIR)\process_setsignalproc.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\process_sendsignal.c : $(PROCESS_DIR)\process_sendsignal.c
+ $(CMD_CP) $(PROCESS_DIR)\process_sendsignal.c $(OBJS_DIR)\
+
$(OBJS_DIR)\process_getexitcode.c : $(PROCESS_DIR)\process_getexitcode.c
$(CMD_CP) $(PROCESS_DIR)\process_getexitcode.c $(OBJS_DIR)\
$(OBJS_DIR)\file_write.c : $(FILE_DIR)\file_write.c
$(CMD_CP) $(FILE_DIR)\file_write.c $(OBJS_DIR)\
+$(OBJS_DIR)\file_driveropen.c : $(FILE_DIR)\file_driveropen.c
+ $(CMD_CP) $(FILE_DIR)\file_driveropen.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\file_getdriverinformation.c : $(FILE_DIR)\file_getdriverinformation.c
+ $(CMD_CP) $(FILE_DIR)\file_getdriverinformation.c $(OBJS_DIR)\
+
$(OBJS_DIR)\file_printformat.c : $(FILE_DIR)\file_printformat.c
$(CMD_CP) $(FILE_DIR)\file_printformat.c $(OBJS_DIR)\
$(CMD_CP) $(FATVOL_DIR)\fatfile_destructor.c $(OBJS_DIR)\
+$(OBJS_DIR)\memdrv.h : $(MEMDRV_DIR)\memdrv.h
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv.h $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_local.h : $(MEMDRV_DIR)\memdrv_local.h
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_local.h $(OBJS_DIR)\
+
+$(OBJS_DIR)\memfile.h : $(MEMDRV_DIR)\memfile.h
+ $(CMD_CP) $(MEMDRV_DIR)\memfile.h $(OBJS_DIR)\
+
+$(OBJS_DIR)\memfile_local.h : $(MEMDRV_DIR)\memfile_local.h
+ $(CMD_CP) $(MEMDRV_DIR)\memfile_local.h $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_create.c : $(MEMDRV_DIR)\memdrv_create.c
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_create.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_delete.c : $(MEMDRV_DIR)\memdrv_delete.c
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_delete.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_constructor.c : $(MEMDRV_DIR)\memdrv_constructor.c
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_constructor.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_destructor.c : $(MEMDRV_DIR)\memdrv_destructor.c
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_destructor.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_open.c : $(MEMDRV_DIR)\memdrv_open.c
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_open.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_close.c : $(MEMDRV_DIR)\memdrv_close.c
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_close.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_iocontrol.c : $(MEMDRV_DIR)\memdrv_iocontrol.c
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_iocontrol.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_flush.c : $(MEMDRV_DIR)\memdrv_flush.c
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_flush.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_read.c : $(MEMDRV_DIR)\memdrv_read.c
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_read.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_seek.c : $(MEMDRV_DIR)\memdrv_seek.c
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_seek.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memdrv_write.c : $(MEMDRV_DIR)\memdrv_write.c
+ $(CMD_CP) $(MEMDRV_DIR)\memdrv_write.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memfile_create.c : $(MEMDRV_DIR)\memfile_create.c
+ $(CMD_CP) $(MEMDRV_DIR)\memfile_create.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memfile_delete.c : $(MEMDRV_DIR)\memfile_delete.c
+ $(CMD_CP) $(MEMDRV_DIR)\memfile_delete.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memfile_constructor.c : $(MEMDRV_DIR)\memfile_constructor.c
+ $(CMD_CP) $(MEMDRV_DIR)\memfile_constructor.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\memfile_destructor.c : $(MEMDRV_DIR)\memfile_destructor.c
+ $(CMD_CP) $(MEMDRV_DIR)\memfile_destructor.c $(OBJS_DIR)\
+
+
$(OBJS_DIR)\shell.h : $(SHELL_DIR)\shell.h
$(CMD_CP) $(SHELL_DIR)\shell.h $(OBJS_DIR)\
$(CMD_CP) $(PROCESSLIST_DIR)\processlist_main.c $(OBJS_DIR)\
+$(OBJS_DIR)\processsignal.h : $(PROCESSSIGNAL_DIR)\processsignal.h
+ $(CMD_CP) $(PROCESSSIGNAL_DIR)\processsignal.h $(OBJS_DIR)\
+
+$(OBJS_DIR)\processsignal_main.c : $(PROCESSSIGNAL_DIR)\processsignal_main.c
+ $(CMD_CP) $(PROCESSSIGNAL_DIR)\processsignal_main.c $(OBJS_DIR)\
+
+
$(OBJS_DIR)\commandlist.h : $(COMMANDLIST_DIR)\commandlist.h
$(CMD_CP) $(COMMANDLIST_DIR)\commandlist.h $(OBJS_DIR)\
$(OBJS_DIR)\sysprc_resume.$(EXT_OBJ): $(OBJS_DIR)\sysprc_resume.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\sysprc_getparam.$(EXT_OBJ): $(OBJS_DIR)\sysprc_getparam.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\sysprc_getcurrenthandle.$(EXT_OBJ): $(OBJS_DIR)\sysprc_getcurrenthandle.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\sysprc_setsignalhandler.$(EXT_OBJ): $(OBJS_DIR)\sysprc_setsignalhandler.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\sysprc_sendsignal.$(EXT_OBJ): $(OBJS_DIR)\sysprc_sendsignal.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\systim_signal.$(EXT_OBJ): $(OBJS_DIR)\systim_signal.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\systim_wait.$(EXT_OBJ): $(OBJS_DIR)\systim_wait.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\systim_getsystemtime.$(EXT_OBJ): $(OBJS_DIR)\systim_getsystemtime.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\time_wait.$(EXT_OBJ): $(OBJS_DIR)\time_wait.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\process_create.$(EXT_OBJ): $(OBJS_DIR)\process_create.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\process_createex.$(EXT_OBJ): $(OBJS_DIR)\process_createex.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\process_delete.$(EXT_OBJ): $(OBJS_DIR)\process_delete.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\process_constructor.$(EXT_OBJ): $(OBJS_DIR)\process_constructor.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\process_destructor.$(EXT_OBJ): $(OBJS_DIR)\process_destructor.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\process_getcurrenthandle.$(EXT_OBJ): $(OBJS_DIR)\process_getcurrenthandle.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\process_exit.$(EXT_OBJ): $(OBJS_DIR)\process_exit.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\process_waitexit.$(EXT_OBJ): $(OBJS_DIR)\process_waitexit.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\process_setsignalproc.$(EXT_OBJ): $(OBJS_DIR)\process_setsignalproc.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\process_sendsignal.$(EXT_OBJ): $(OBJS_DIR)\process_sendsignal.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\process_getexitcode.$(EXT_OBJ): $(OBJS_DIR)\process_getexitcode.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\process_getparam.$(EXT_OBJ): $(OBJS_DIR)\process_getparam.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\process_setparam.$(EXT_OBJ): $(OBJS_DIR)\process_setparam.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\file_readdir.$(EXT_OBJ): $(OBJS_DIR)\file_readdir.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\file_seek.$(EXT_OBJ): $(OBJS_DIR)\file_seek.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\file_write.$(EXT_OBJ): $(OBJS_DIR)\file_write.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\file_driveropen.$(EXT_OBJ): $(OBJS_DIR)\file_driveropen.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\file_getdriverinformation.$(EXT_OBJ): $(OBJS_DIR)\file_getdriverinformation.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\file_printformat.$(EXT_OBJ): $(OBJS_DIR)\file_printformat.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\file_printformatv.$(EXT_OBJ): $(OBJS_DIR)\file_printformatv.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\stdio_printformat.$(EXT_OBJ): $(OBJS_DIR)\stdio_printformat.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\fatfile_constructor.$(EXT_OBJ): $(OBJS_DIR)\fatfile_constructor.c $(COMMON_HEADERS)
$(OBJS_DIR)\fatfile_destructor.$(EXT_OBJ): $(OBJS_DIR)\fatfile_destructor.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memdrv_create.$(EXT_OBJ): $(OBJS_DIR)\memdrv_create.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memdrv_delete.$(EXT_OBJ): $(OBJS_DIR)\memdrv_delete.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memdrv_constructor.$(EXT_OBJ): $(OBJS_DIR)\memdrv_constructor.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memdrv_destructor.$(EXT_OBJ): $(OBJS_DIR)\memdrv_destructor.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memdrv_open.$(EXT_OBJ): $(OBJS_DIR)\memdrv_open.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memdrv_close.$(EXT_OBJ): $(OBJS_DIR)\memdrv_close.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memdrv_iocontrol.$(EXT_OBJ): $(OBJS_DIR)\memdrv_iocontrol.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memdrv_flush.$(EXT_OBJ): $(OBJS_DIR)\memdrv_flush.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memdrv_read.$(EXT_OBJ): $(OBJS_DIR)\memdrv_read.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memdrv_seek.$(EXT_OBJ): $(OBJS_DIR)\memdrv_seek.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memdrv_write.$(EXT_OBJ): $(OBJS_DIR)\memdrv_write.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memfile_create.$(EXT_OBJ): $(OBJS_DIR)\memfile_create.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memfile_delete.$(EXT_OBJ): $(OBJS_DIR)\memfile_delete.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memfile_constructor.$(EXT_OBJ): $(OBJS_DIR)\memfile_constructor.c $(COMMON_HEADERS)
+$(OBJS_DIR)\memfile_destructor.$(EXT_OBJ): $(OBJS_DIR)\memfile_destructor.c $(COMMON_HEADERS)
+
$(OBJS_DIR)\shell_main.$(EXT_OBJ): $(OBJS_DIR)\shell_main.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\shell_create.$(EXT_OBJ): $(OBJS_DIR)\shell_create.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\shell_delete.$(EXT_OBJ): $(OBJS_DIR)\shell_delete.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)\processlist_main.$(EXT_OBJ): $(OBJS_DIR)\processlist_main.c $(COMMON_HEADERS)
+$(OBJS_DIR)\processsignal_main.$(EXT_OBJ): $(OBJS_DIR)\processsignal_main.c $(COMMON_HEADERS)
+
$(OBJS_DIR)\commandlist_main.$(EXT_OBJ): $(OBJS_DIR)\commandlist_main.c $(COMMON_HEADERS)
$(OBJS_DIR)\memdump_main.$(EXT_OBJ): $(OBJS_DIR)\memdump_main.c $(COMMON_HEADERS)
!ifndef LINK_FATVOL
LINK_FATVOL = Yes
!endif
+!ifndef LINK_MEMDRV
+LINK_MEMDRV = Yes
+!endif
# Applications
!ifndef LINK_SHELL
!ifndef LINK_PROCESSLIST
LINK_PROCESSLIST = Yes
!endif
+!ifndef LINK_PROCESSSIGNAL
+LINK_PROCESSSIGNAL = Yes
+!endif
!ifndef LINK_COMMANDLIST
LINK_COMMANDLIST = Yes
!endif
OBJS = $(OBJS) $(OBJS_DIR)\sysprc_getparam.$(EXT_OBJ)
CSRCS = $(CSRCS) $(SYSAPI_DIR)\sysprc_getcurrenthandle.c
OBJS = $(OBJS) $(OBJS_DIR)\sysprc_getcurrenthandle.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SYSAPI_DIR)\sysprc_setsignalhandler.c
+OBJS = $(OBJS) $(OBJS_DIR)\sysprc_setsignalhandler.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SYSAPI_DIR)\sysprc_sendsignal.c
+OBJS = $(OBJS) $(OBJS_DIR)\sysprc_sendsignal.$(EXT_OBJ)
CSRCS = $(CSRCS) $(SYSAPI_DIR)\systim_signal.c
OBJS = $(OBJS) $(OBJS_DIR)\systim_signal.$(EXT_OBJ)
CSRCS = $(CSRCS) $(SYSAPI_DIR)\systim_wait.c
HEADERS = $(HEADERS) $(OBJS_DIR)\process_local.h
CSRCS = $(CSRCS) $(PROCESS_DIR)\process_create.c
OBJS = $(OBJS) $(OBJS_DIR)\process_create.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(PROCESS_DIR)\process_createex.c
+OBJS = $(OBJS) $(OBJS_DIR)\process_createex.$(EXT_OBJ)
CSRCS = $(CSRCS) $(PROCESS_DIR)\process_delete.c
OBJS = $(OBJS) $(OBJS_DIR)\process_delete.$(EXT_OBJ)
CSRCS = $(CSRCS) $(PROCESS_DIR)\process_constructor.c
OBJS = $(OBJS) $(OBJS_DIR)\process_exit.$(EXT_OBJ)
CSRCS = $(CSRCS) $(PROCESS_DIR)\process_waitexit.c
OBJS = $(OBJS) $(OBJS_DIR)\process_waitexit.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(PROCESS_DIR)\process_setsignalproc.c
+OBJS = $(OBJS) $(OBJS_DIR)\process_setsignalproc.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(PROCESS_DIR)\process_sendsignal.c
+OBJS = $(OBJS) $(OBJS_DIR)\process_sendsignal.$(EXT_OBJ)
CSRCS = $(CSRCS) $(PROCESS_DIR)\process_getexitcode.c
OBJS = $(OBJS) $(OBJS_DIR)\process_getexitcode.$(EXT_OBJ)
CSRCS = $(CSRCS) $(PROCESS_DIR)\process_getparam.c
OBJS = $(OBJS) $(OBJS_DIR)\file_seek.$(EXT_OBJ)
CSRCS = $(CSRCS) $(FILE_DIR)\file_write.c
OBJS = $(OBJS) $(OBJS_DIR)\file_write.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(FILE_DIR)\file_driveropen.c
+OBJS = $(OBJS) $(OBJS_DIR)\file_driveropen.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(FILE_DIR)\file_getdriverinformation.c
+OBJS = $(OBJS) $(OBJS_DIR)\file_getdriverinformation.$(EXT_OBJ)
CSRCS = $(CSRCS) $(FILE_DIR)\file_printformat.c
OBJS = $(OBJS) $(OBJS_DIR)\file_printformat.$(EXT_OBJ)
CSRCS = $(CSRCS) $(FILE_DIR)\file_printformatv.c
!endif
+# Memory maped file driver
+!if "$(LINK_MEMDRV)" == "Yes"
+MEMDRV_DIR = $(HOSAPLFW_DIR)\driver\misc\memdrv
+HEADERS = $(HEADERS) $(OBJS_DIR)\memdrv.h
+HEADERS = $(HEADERS) $(OBJS_DIR)\memdrv_local.h
+HEADERS = $(HEADERS) $(OBJS_DIR)\memfile.h
+HEADERS = $(HEADERS) $(OBJS_DIR)\memfile_local.h
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memdrv_create.c
+OBJS = $(OBJS) $(OBJS_DIR)\memdrv_create.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memdrv_delete.c
+OBJS = $(OBJS) $(OBJS_DIR)\memdrv_delete.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memdrv_constructor.c
+OBJS = $(OBJS) $(OBJS_DIR)\memdrv_constructor.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memdrv_destructor.c
+OBJS = $(OBJS) $(OBJS_DIR)\memdrv_destructor.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memdrv_open.c
+OBJS = $(OBJS) $(OBJS_DIR)\memdrv_open.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memdrv_close.c
+OBJS = $(OBJS) $(OBJS_DIR)\memdrv_close.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memdrv_iocontrol.c
+OBJS = $(OBJS) $(OBJS_DIR)\memdrv_iocontrol.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memdrv_flush.c
+OBJS = $(OBJS) $(OBJS_DIR)\memdrv_flush.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memdrv_read.c
+OBJS = $(OBJS) $(OBJS_DIR)\memdrv_read.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memdrv_seek.c
+OBJS = $(OBJS) $(OBJS_DIR)\memdrv_seek.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memdrv_write.c
+OBJS = $(OBJS) $(OBJS_DIR)\memdrv_write.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memfile_create.c
+OBJS = $(OBJS) $(OBJS_DIR)\memfile_create.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memfile_delete.c
+OBJS = $(OBJS) $(OBJS_DIR)\memfile_delete.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memfile_constructor.c
+OBJS = $(OBJS) $(OBJS_DIR)\memfile_constructor.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(MEMDRV_DIR)\memfile_destructor.c
+OBJS = $(OBJS) $(OBJS_DIR)\memfile_destructor.$(EXT_OBJ)
+!endif
+
+
# --------------------------------------------------
# Applications
!endif
+# Process Signal
+!if "$(LINK_PROCESSSIGNAL)" == "Yes"
+PROCESSSIGNAL_DIR = $(HOSAPLFW_DIR)\application\syscmd\processsignal
+HEADERS = $(HEADERS) $(OBJS_DIR)\processsignal.h
+CSRCS = $(CSRCS) $(PROCESSSIGNAL_DIR)\processsignal_main.c
+OBJS = $(OBJS) $(OBJS_DIR)\processsignal_main.$(EXT_OBJ)
+!endif
+
+
# Command List
!if "$(LINK_COMMANDLIST)" == "Yes"
COMMANDLIST_DIR = $(HOSAPLFW_DIR)\application\syscmd\commandlist
"sysprc_resume.c",
"sysprc_getparam.c",
"sysprc_getcurrenthandle.c",
+ "sysprc_setsignalhandler.c",
+ "sysprc_sendsignal.c",
"systim_signal.c",
"systim_wait.c",
"systim_getsystemtime.c",
],
[
"process_create.c",
+ "process_createex.c",
"process_delete.c",
"process_constructor.c",
"process_destructor.c",
"process_getcurrenthandle.c",
"process_exit.c",
"process_waitexit.c",
+ "process_setsignalproc.c",
+ "process_sendsignal.c",
"process_getexitcode.c",
"process_getparam.c",
"process_setparam.c",
"file_readdir.c",
"file_seek.c",
"file_write.c",
+ "file_driveropen.c",
+ "file_getdriverinformation.c",
"file_printformat.c",
"file_printformatv.c",
"stdio_printformat.c",
"fatfile_destructor.c",
],
],
+ [
+ "Memory maped file driver",
+ "\$(COMMON_HEADERS)",
+ "\$(HOSAPLFW_DIR)/driver/misc/memdrv",
+ "MEMDRV",
+ "Yes",
+ [
+ "memdrv.h",
+ "memdrv_local.h",
+ "memfile.h",
+ "memfile_local.h",
+ ],
+ [
+ "memdrv_create.c",
+ "memdrv_delete.c",
+ "memdrv_constructor.c",
+ "memdrv_destructor.c",
+ "memdrv_open.c",
+ "memdrv_close.c",
+ "memdrv_iocontrol.c",
+ "memdrv_flush.c",
+ "memdrv_read.c",
+ "memdrv_seek.c",
+ "memdrv_write.c",
+ "memfile_create.c",
+ "memfile_delete.c",
+ "memfile_constructor.c",
+ "memfile_destructor.c",
+ ],
+ ],
],
[
"Applications",
],
],
[
+ "Process Signal",
+ "\$(COMMON_HEADERS)",
+ "\$(HOSAPLFW_DIR)/application/syscmd/processsignal",
+ "PROCESSSIGNAL",
+ "Yes",
+ [
+ "processsignal.h",
+ ],
+ [
+ "processsignal_main.c",
+ ],
+ ],
+ [
"Command List",
"\$(COMMON_HEADERS)",
"\$(HOSAPLFW_DIR)/application/syscmd/commandlist",
#define __HOS__memdrv_h__
-#include "system/sysapi/sysapi.h"
#include "system/file/drvobj.h"
-/* ドライバ制御部 */
-typedef struct c_memdrv
-{
- C_DRVOBJ DrvObj; /* デバイスドライバを継承 */
-
- int iOpenCount; /* オープンカウンタ */
- unsigned char *pubMemAddr; /* メモリの先頭アドレス */
- FILE_POS MemSize; /* メモリサイズ */
- FILE_POS FileSize; /* ファイルとしてのサイズ */
- int iAttr; /* 属性 */
-
- SYSMTX_HANDLE hMtx; /* 排他制御用ミューテックス */
-} C_MEMDRV;
-
-
-
#ifdef __cplusplus
extern "C" {
#endif
-void MemDrv_Create(C_MEMDRV *self, void *pMemAddr, FILE_POS MemSize, FILE_POS IniSize, int iAttr); /**< コンストラクタ */
-void MemDrv_Delete(C_DRVOBJ *self); /**< デストラクタ */
+HANDLE MemDrv_Create(void *pMemAddr, FILE_POS MemSize, FILE_POS IniSize, int iAttr); /**< 生成 */
+void MemDrv_Delete(HANDLE hDriver); /**< 削除 */
#ifdef __cplusplus
}
/* upper cast */
self = (C_MEMDRV *)pDrvObj;
pFile = (C_MEMDRVFILE *)pFileObj;
+
+ SysMtx_Lock(self->hMtx);
/* クローズ処理 */
- SysMtx_Lock(self->hMtx);
--self->iOpenCount;
- SysMtx_Unlock(self->hMtx);
/* ディスクリプタ削除 */
FileObj_Delete((C_FILEOBJ *)pFile);
SysMem_Free(pFile);
+
+ SysMtx_Unlock(self->hMtx);
}
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file memdrv.h
+ * @brief %jp{メモリマップドファイル用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "memdrv_local.h"
+
+
+/* 仮想関数テーブル */
+static const T_DRVOBJ_METHODS MemDrv_Methods =
+ {
+ { MemDrv_Delete },
+ MemDrv_Open,
+ MemDrv_Close,
+ MemDrv_IoControl,
+ MemDrv_Seek,
+ MemDrv_Read,
+ MemDrv_Write,
+ MemDrv_Flush,
+ };
+
+
+/** コンストラクタ */
+void MemDrv_Constructor(C_MEMDRV *self, const T_DRVOBJ_METHODS *pMethods, void *pMemAddr, FILE_POS MemSize, FILE_POS IniSize, int iAttr)
+{
+ if ( pMethods == NULL )
+ {
+ pMethods = &MemDrv_Methods;
+ }
+
+ /* 親クラスコンストラクタ呼び出し */
+ DrvObj_Constructor(&self->DrvObj, pMethods);
+
+ /* メンバ変数初期化 */
+ self->iOpenCount = 0;
+ self->pubMemAddr = pMemAddr; /* メモリの先頭アドレス */
+ self->MemSize = MemSize; /* メモリサイズ */
+ self->FileSize = IniSize; /* ファイルとしてのサイズ */
+ self->iAttr = iAttr; /* 属性 */
+
+ /* ミューテックス生成 */
+ self->hMtx = SysMtx_Create(SYSMTX_ATTR_NORMAL);
+}
+
+
+/* end of file */
#include "memdrv_local.h"
-/* 仮想関数テーブル */
-static const T_DRVOBJ_METHODS MemDrv_Methods =
- {
- MemDrv_Delete,
- MemDrv_Open,
- MemDrv_Close,
- MemDrv_IoControl,
- MemDrv_Seek,
- MemDrv_Read,
- MemDrv_Write,
- MemDrv_Flush,
- };
-
-
-/** コンストラクタ */
-void MemDrv_Create(C_MEMDRV *self, void *pMemAddr, FILE_POS MemSize, FILE_POS IniSize, int iAttr)
+
+
+/** 生成 */
+HANDLE MemDrv_Create(void *pMemAddr, FILE_POS MemSize, FILE_POS IniSize, int iAttr)
{
- void *pMem;
+ C_MEMDRV *self;
- /* 親クラスコンストラクタ呼び出し */
- DrvObj_Create(&self->DrvObj, &MemDrv_Methods);
+ /* メモリ確保 */
+ if ( (self = (C_MEMDRV *)SysMem_Alloc(sizeof(C_MEMDRV))) == NULL )
+ {
+ return HANDLE_NULL;
+ }
- /* メンバ変数初期化 */
- self->iOpenCount = 0;
- self->pubMemAddr = pMemAddr; /* メモリの先頭アドレス */
- self->MemSize = MemSize; /* メモリサイズ */
- self->FileSize = IniSize; /* ファイルとしてのサイズ */
- self->iAttr = iAttr; /* 属性 */
+ /* コンストラクタ呼び出し */
+ MemDrv_Constructor(self, NULL, pMemAddr, MemSize, IniSize, iAttr);
- /* ミューテックス生成 */
- self->hMtx = SysMtx_Create(SYSMTX_ATTR_NORMAL);
+ return (HANDLE)self;
}
#include "memdrv_local.h"
-#include "system/sysapi/sysapi.h"
-/** デストラクタ */
-void MemDrv_Delete(C_DRVOBJ *pDrvObj)
+/** 削除 */
+void MemDrv_Delete(HANDLE hDriver)
{
- C_MEMDRV *self;
+ C_MEMDRV *self;
/* upper cast */
- self = (C_MEMDRV *)pDrvObj;
+ self = (C_MEMDRV *)hDriver;
- /* オブジェクト削除 */
- SysMtx_Delete(self->hMtx);
+ /* デストラクタ呼び出し */
+ MemDrv_Destructor(self);
+
+ /* メモリ削除 */
+ SysMem_Free(self);
}
+
/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file memdrv.h
+ * @brief %jp{メモリマップドファイル用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "memdrv_local.h"
+
+
+/** デストラクタ */
+void MemDrv_Destructor(C_MEMDRV *self)
+{
+ /* オブジェクト削除 */
+ SysMtx_Delete(self->hMtx);
+
+ /* 親クラスデストラクタ */
+ DrvObj_Destructor(&self->DrvObj);
+}
+
+
+/* end of file */
#include "memdrv.h"
+#include "system/file/drvobj_local.h"
+#include "system/sysapi/sysapi.h"
+
+
+/* ドライバ制御部 */
+typedef struct c_memdrv
+{
+ C_DRVOBJ DrvObj; /* デバイスドライバを継承 */
+
+ int iOpenCount; /* オープンカウンタ */
+ unsigned char *pubMemAddr; /* メモリの先頭アドレス */
+ FILE_POS MemSize; /* メモリサイズ */
+ FILE_POS FileSize; /* ファイルとしてのサイズ */
+ int iAttr; /* 属性 */
+
+ SYSMTX_HANDLE hMtx; /* 排他制御用ミューテックス */
+} C_MEMDRV;
+
typedef struct c_memdrvfile
extern "C" {
#endif
+void MemDrv_Constructor(C_MEMDRV *self, const T_DRVOBJ_METHODS *pMethods, void *pMemAddr, FILE_POS MemSize, FILE_POS IniSize, int iAttr); /** コンストラクタ */
+void MemDrv_Destructor(C_MEMDRV *self); /** デストラクタ */
+
HANDLE MemDrv_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode);
void MemDrv_Close(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj);
FILE_ERR MemDrv_IoControl(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize);
#include "memdrv_local.h"
#include "system/sysapi/sysapi.h"
-
+#include "memfile.h"
/** オープン */
HANDLE MemDrv_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode)
{
- C_MEMDRV *self;
- C_MEMDRVFILE *pFile;
+ C_MEMDRV *self;
+ HANDLE hFile;
/* upper cast */
self = (C_MEMDRV *)pDrvObj;
+
+ SysMtx_Lock(self->hMtx);
/* create file descriptor */
- if ( (pFile = SysMem_Alloc(sizeof(C_MEMDRVFILE))) == NULL )
+ hFile = MemFile_Create(self, iMode);
+ if ( hFile == HANDLE_NULL )
{
+ SysMtx_Unlock(self->hMtx);
return HANDLE_NULL;
}
- FileObj_Create(&pFile->FileObj, pDrvObj, NULL);
- pFile->FilePos = 0;
-
+
+ if ( iMode & FILE_OPEN_CREATE )
+ {
+ self->FileSize = 0;
+ }
+
/* オープン処理 */
- SysMtx_Lock(self->hMtx);
self->iOpenCount++;
+
SysMtx_Unlock(self->hMtx);
- return (HANDLE)pFile;
+ return hFile;
}
break;
case FILE_SEEK_END:
- pFile->FilePos = self ->FileSize - Offset;
+ pFile->FilePos = self ->FileSize + Offset;
break;
default:
#include <string.h>
#include "memdrv_local.h"
-
+#include "memfile_local.h"
FILE_SIZE MemDrv_Write(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, const void *pData, FILE_SIZE Size)
{
- C_MEMDRV *self;
- C_MEMDRVFILE *pFile;
+ C_MEMDRV *self;
+ C_MEMFILE *pFile;
SysMtx_Lock(self->hMtx);
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file memfile.h
+ * @brief %jp{memory file 公開ヘッダファイル}%en{Memory File public header file}
+ *
+ * Copyright (C) 2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __HOS__memfile_h__
+#define __HOS__memfile_h__
+
+
+#include "memdrv_local.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HANDLE MemFile_Create(C_MEMDRV *pMemDrv, int iMode);
+void MemFile_Delete(HANDLE hFile);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __HOS__memfile_h__ */
+
+
+/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file memfile_constructor.c
+ * @brief %jp{memory file コンストラクタ}%en{Memory File constructor}
+ *
+ * Copyright (C) 2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "memfile_local.h"
+
+
+void MemFile_Constructor(C_MEMFILE *self, const T_FILEOBJ_METHODS *pMethods, C_MEMDRV *pMemDrv, int iMode)
+{
+ /* 親クラスコンストラクタ */
+ FileObj_Constructor(&self->FileObj, pMethods, &pMemDrv->DrvObj, iMode);
+
+ /* メンバ変数初期化 */
+ self->FilePos = 0;
+}
+
+
+/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file memfile.h
+ * @brief %jp{memory file 公開ヘッダファイル}%en{Memory File public header file}
+ *
+ * Copyright (C) 2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "memfile_local.h"
+
+
+static const T_FILEOBJ_METHODS MemFile_FileObjMethods =
+ {
+ {File_Close}, /* デストラクタ */
+ };
+
+
+HANDLE MemFile_Create(C_MEMDRV *pMemVol, int iMode)
+{
+ C_MEMFILE *self;
+
+ /* create file descriptor */
+ if ( (self = (C_MEMFILE *)SysMem_Alloc(sizeof(C_MEMFILE))) == NULL )
+ {
+ return HANDLE_NULL;
+ }
+
+ /* コンストラクタ呼び出し */
+ MemFile_Constructor(self, &MemFile_FileObjMethods, pMemVol, iMode);
+
+ return (HANDLE)self;
+}
+
+
+/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file memfile.h
+ * @brief %jp{memory file オブジェクト削除}%en{Memory File delete}
+ *
+ * Copyright (C) 2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "memfile_local.h"
+
+
+void MemFile_Delete(HANDLE hFile)
+{
+ C_MEMFILE *self;
+
+ self = (C_MEMFILE *)hFile;
+
+ /* デストラクタ */
+ MemFile_Destructor(self);
+
+ /* メモリ削除 */
+ SysMem_Free(self);
+}
+
+
+/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file memfile_destructor.c
+ * @brief %jp{memory file デストラクタ}%en{Memory File destructor}
+ *
+ * Copyright (C) 2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "memfile_local.h"
+
+
+void MemFile_Destructor(C_MEMFILE *self)
+{
+ /* 親クラスデストラクタ */
+ FileObj_Destructor(&self->FileObj);
+}
+
+
+/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file memfile.h
+ * @brief %jp{memory file ローカルヘッダファイル}%en{Memory File private header file}
+ *
+ * Copyright (C) 2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __HOS__memfile_local_h__
+#define __HOS__memfile_local_h__
+
+
+#include "memfile.h"
+#include "system/file/fileobj_local.h"
+#include "system/sysapi/sysapi.h"
+
+
+/* ファイルディスクリプタ */
+typedef struct c_memfile
+{
+ C_FILEOBJ FileObj; /* 継承 */
+
+ FILE_POS FilePos;
+} C_MEMFILE;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void MemFile_Constructor(C_MEMFILE *self, const T_FILEOBJ_METHODS *pMethods, C_MEMDRV *pMemDrv, int iMode);
+void MemFile_Destructor(C_MEMFILE *self);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* __HOS__memfile_local_h__ */
+
+
+/* end of file */
/* ファイル属性 */
pFileInf->Attribute = ubBuf[11];
+ /* 情報 */
+ pFileInf->szInformation[0] = '\0';
+
return FILE_ERR_OK;
}
break;
#include "system/file/volume.h"
#include "system/file/stdfile.h"
+#include "library/algorithm/stringformat/stringformat.h"
+
+
#define _DEBUG_PRINTF StdIo_PrintFormat
ProcInf.hStdErr = Process_GetStdErr(HANDLE_NULL); /* 標準エラー出力 */
for ( ; ; )
{
- hProcess = Process_Create(&ProcInf);
+ hProcess = Process_CreateEx(&ProcInf);
Process_WaitExit(hProcess);
Process_Delete(hProcess);
}
ProcInf.hStdErr = Process_GetStdErr(HANDLE_NULL); /* 標準エラー出力 */
for ( ; ; )
{
- hProcess = Process_Create(&ProcInf);
+ hProcess = Process_CreateEx(&ProcInf);
Process_WaitExit(hProcess);
Process_Delete(hProcess);
}
FILE_SIZE (*pfncRead)(struct c_drvobj *self, struct c_fileobj *pFileObj, void *pBuf, FILE_SIZE Size);
FILE_SIZE (*pfncWrite)(struct c_drvobj *self, struct c_fileobj *pFileObj, const void *pData, FILE_SIZE Size);
FILE_ERR (*pfncFlush)(struct c_drvobj *self, struct c_fileobj *pFileObj);
+ FILE_ERR (*pfncGetInformation)(struct c_drvobj *self, char *pszInformation, int iLen);
} T_DRVOBJ_METHODS;
/* IoControl機能コード(ディレクトリ) */
-#define FILE_IOCTL_DIR_READ 0x0101 /* デバイス情報を得る */
+#define FILE_IOCTL_DIR_READ 0x0101 /* ディレクトリ情報を得る */
+
/* IoControl機能コード(コンソール) */
#define FILE_IOCTL_CON_GETCH 0x0201 /* 文字読込み */
FILE_TIME timeAceess;
FILE_TIME timeWrite;
*/
+
+ char szInformation[64];
} T_FILE_FILEINF;
/* 基本API */
-HANDLE File_Open(const char *pszPatah, int iMode);
+HANDLE File_Open(const char *pszPath, int iMode);
void File_Close(HANDLE hFile);
FILE_ERR File_IoControl(HANDLE hFile, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize);
FILE_POS File_Seek(HANDLE hFile, FILE_POS Offset, int iOrign);
FILE_SIZE File_Write(HANDLE hFile, const void *pData, FILE_SIZE Size);
FILE_ERR File_Flush(HANDLE hFile);
+/* デバイスドライバ直接制御 */
+HANDLE File_DriverOpen(HANDLE hDriver, const char *pszPath, int iMode); /* 名無しファイルのオープン */
+FILE_ERR File_GetDriverInformation(HANDLE hDriver, char *pszInformation, int iLen); /* デバイスドライバ情報取得 */
+
/* 同期制御API */
FILE_ERR File_SetWriteMode(HANDLE hFile, int iWriteMode);
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file file_driveropen.c
+ * @brief %jp{ファイルシステム}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include <stdio.h>
+#include "file_local.h"
+#include "drvobj_local.h"
+
+
+
+/* ドライバから直接名無しファイルとしてオープン */
+HANDLE File_DriverOpen(HANDLE hDriver, const char *pszPath, int iMode)
+{
+ C_DRVOBJ *self;
+
+ self = (C_DRVOBJ *)hDriver;
+
+ if ( DrvObj_GetMethods(self)->pfncOpen == NULL )
+ {
+ return HANDLE_NULL;
+ }
+
+ return DrvObj_GetMethods(self)->pfncOpen(self, pszPath, iMode);
+}
+
+
+/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file file_driveropen.c
+ * @brief %jp{ファイルシステム}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include <stdio.h>
+#include "file_local.h"
+#include "drvobj_local.h"
+
+
+
+/* デバイスドライバ情報取得 */
+FILE_ERR File_GetDriverInformation(HANDLE hDriver, char *pszInformation, int iLen)
+{
+ C_DRVOBJ *self;
+
+ self = (C_DRVOBJ *)hDriver;
+
+ if ( DrvObj_GetMethods(self)->pfncGetInformation == NULL )
+ {
+ return FILE_ERR_NG;
+ }
+
+ return DrvObj_GetMethods(self)->pfncGetInformation(self, pszInformation, iLen);
+}
+
+
+/* end of file */
{
strcpy(pFileInf->szFileName, self->DevTable[pFile->iReadPtr].szName);
pFileInf->FileSize = 0;
- pFileInf->Attribute = self->DevTable[pFile->iReadPtr].iAttr;
+ pFileInf->Attribute = self->DevTable[pFile->iReadPtr].iAttr;
+ if ( File_GetDriverInformation(self->DevTable[pFile->iReadPtr].hDriver, pFileInf->szInformation, sizeof(pFileInf->szInformation)) != FILE_ERR_OK )
+ {
+ pFileInf->szInformation[0] = '\0';
+ }
+ pFileInf->szInformation[sizeof(pFileInf->szInformation) - 1] = '\0';
pFile->iReadPtr++;
+
return FILE_ERR_OK;
}
}
#define PROCESS_PRIORITY_NORMAL 12
#define PROCESS_PRIORITY_HIGH 11
+#define PROCESS_SIGNAL_HUP 1
+#define PROCESS_SIGNAL_KILL 9
+
#define PROCESS_ERR_OK 0
#define PROCESS_ERR_NG (-1)
extern "C" {
#endif
-HANDLE Process_Create(const T_PROCESS_CREATE_INF *pInf); /**< プロセス生成 */
-void Process_Delete(HANDLE hProcess); /**< プロセス削除 */
-
-HANDLE Process_GetCurrentHandle(void); /**< 現在のプロセスハンドル取得 */
-void Process_Exit(int iExitCode); /**< 現在のプロセスを終了させる */
-
-int Process_IsExit(HANDLE hProcess); /**< プロセスの終了を確認 */
-int Process_WaitExit(HANDLE hProcess); /**< プロセスの終了を待つ */
-int Process_GetExitCode(HANDLE hProcess); /**< プロセスの終了コード取得 */
-
-PROCESS_ERR Process_EnterSystemMode(void); /**< システムモードに入る */
-void Process_LeaveSystemMode(void); /**< システムモードを出る */
-int Process_IsSystemMode(void); /**< システムモードかどうか問い合わせ */
-
-const char *Process_GetCommandLine(HANDLE hProcess); /**< コマンドラインの取得 */
-unsigned long Process_GetExecutionTime(HANDLE hProcess, unsigned long *pulNanosecond); /**< 実行時間の取得 */
-HANDLE Process_GetParentProcess(HANDLE hProcess); /**< 親プロセスの取得 */
-
-void Process_SetParam(HANDLE hProcess, VPARAM Param); /**< プロセス固有情報の設定 */
-VPARAM Process_GetParam(HANDLE hProcess); /**< プロセス固有情報の取得 */
-
-int Process_SetCurrentDir(HANDLE hProcess, const char *pszPath); /**< プロセスのカレントディレクトリ設定 */
-const char *Process_GetCurrentDir(HANDLE hProcess); /**< プロセスのカレントディレクトリ取得 */
-
-void Process_SetTerminal(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準ターミナル設定 */
-HANDLE Process_GetTerminal(HANDLE hProcess); /**< プロセスの標準ターミナル取得 */
-void Process_SetConIn(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準コンソール設定 */
-HANDLE Process_GetConIn(HANDLE hProcess); /**< プロセスの標準コンソール取得 */
-void Process_SetConOut(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準コンソール設定 */
-HANDLE Process_GetConOut(HANDLE hProcess); /**< プロセスの標準コンソール取得 */
-void Process_SetStdIn(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準入力設定 */
-HANDLE Process_GetStdIn(HANDLE hProcess); /**< プロセスの標準入力取得 */
-void Process_SetStdOut(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準出力設定 */
-HANDLE Process_GetStdOut(HANDLE hProcess); /**< プロセスの標準出力取得 */
-void Process_SetStdErr(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準エラー出力設定 */
-HANDLE Process_GetStdErr(HANDLE hProcess); /**< プロセスの標準エラー出力取得 */
+HANDLE Process_Create(const char *pszCommand, MEMSIZE StackSize, int Priority); /**< プロセス生成 */
+HANDLE Process_CreateEx(const T_PROCESS_CREATE_INF *pInf); /**< プロセス生成(詳細制御版) */
+void Process_Delete(HANDLE hProcess); /**< プロセス削除 */
+
+HANDLE Process_GetCurrentHandle(void); /**< 現在のプロセスハンドル取得 */
+void Process_Exit(int iExitCode); /**< 現在のプロセスを終了させる */
+
+int Process_IsExit(HANDLE hProcess); /**< プロセスの終了を確認 */
+int Process_WaitExit(HANDLE hProcess); /**< プロセスの終了を待つ */
+int Process_GetExitCode(HANDLE hProcess); /**< プロセスの終了コード取得 */
+
+void Process_SetSignalProc(HANDLE hProcess, void (*pfncSignalProc)(int iSignal)); /**< プロセスにシグナル受信プロシージャを登録 */
+void Process_SendSignal(HANDLE hProcess, int iSignal); /**< プロセスにシグナルを送信 */
+
+PROCESS_ERR Process_EnterSystemMode(void); /**< システムモードに入る */
+void Process_LeaveSystemMode(void); /**< システムモードを出る */
+int Process_IsSystemMode(void); /**< システムモードかどうか問い合わせ */
+
+const char *Process_GetCommandLine(HANDLE hProcess); /**< コマンドラインの取得 */
+unsigned long Process_GetExecutionTime(HANDLE hProcess, unsigned long *pulNanosecond); /**< 実行時間の取得 */
+HANDLE Process_GetParentProcess(HANDLE hProcess); /**< 親プロセスの取得 */
+
+void Process_SetParam(HANDLE hProcess, VPARAM Param); /**< プロセス固有情報の設定 */
+VPARAM Process_GetParam(HANDLE hProcess); /**< プロセス固有情報の取得 */
+
+int Process_SetCurrentDir(HANDLE hProcess, const char *pszPath); /**< プロセスのカレントディレクトリ設定 */
+const char *Process_GetCurrentDir(HANDLE hProcess); /**< プロセスのカレントディレクトリ取得 */
+
+void Process_SetTerminal(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準ターミナル設定 */
+HANDLE Process_GetTerminal(HANDLE hProcess); /**< プロセスの標準ターミナル取得 */
+void Process_SetConIn(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準コンソール設定 */
+HANDLE Process_GetConIn(HANDLE hProcess); /**< プロセスの標準コンソール取得 */
+void Process_SetConOut(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準コンソール設定 */
+HANDLE Process_GetConOut(HANDLE hProcess); /**< プロセスの標準コンソール取得 */
+void Process_SetStdIn(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準入力設定 */
+HANDLE Process_GetStdIn(HANDLE hProcess); /**< プロセスの標準入力取得 */
+void Process_SetStdOut(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準出力設定 */
+HANDLE Process_GetStdOut(HANDLE hProcess); /**< プロセスの標準出力取得 */
+void Process_SetStdErr(HANDLE hProcess, HANDLE hFile); /**< プロセスの標準エラー出力設定 */
+HANDLE Process_GetStdErr(HANDLE hProcess); /**< プロセスの標準エラー出力取得 */
#ifdef __cplusplus
}
static void Process_Entry(void);
+static void Process_SignalHandler(void);
/** コンストラクタ */
}
/* メンバ変数初期化 */
- self->iExitCode = -1; /* 終了コード */
- self->pHandleList = NULL; /* 所有するハンドルのリスト(終了時に開放) */
- self->pfncEntry = pInf->pfncEntry; /* 起動アドレス */
- self->Param = pInf->Param; /* ユーザーパラメータ */
- self->StackSize = pInf->StackSize; /* スタックサイズ */
- self->Priority = pInf->Priority; /* プロセス優先度 */
- self->SysMode = 0; /* システムモード */
- self->Exit = 0; /* 終了フラグ */
- self->hTerminal = pInf->hTerminal; /* ターミナル */
- self->hConIn = pInf->hConIn; /* コンソール入力 */
- self->hConOut = pInf->hConOut; /* コンソール出力 */
- self->hStdIn = pInf->hStdIn; /* 標準入力 */
- self->hStdOut = pInf->hStdOut; /* 標準出力 */
- self->hStdErr = pInf->hStdErr; /* 標準エラー出力 */
+ self->iExitCode = -1; /* 終了コード */
+ self->iSignal = 0; /* シグナル番号 */
+ self->pfncSignalProc = NULL;
+ self->pHandleList = NULL; /* 所有するハンドルのリスト(終了時に開放) */
+ self->pfncEntry = pInf->pfncEntry; /* 起動アドレス */
+ self->Param = pInf->Param; /* ユーザーパラメータ */
+ self->StackSize = pInf->StackSize; /* スタックサイズ */
+ self->Priority = pInf->Priority; /* プロセス優先度 */
+ self->SysMode = 0; /* システムモード */
+ self->Exit = 0; /* 終了フラグ */
+ self->hTerminal = pInf->hTerminal; /* ターミナル */
+ self->hConIn = pInf->hConIn; /* コンソール入力 */
+ self->hConOut = pInf->hConOut; /* コンソール出力 */
+ self->hStdIn = pInf->hStdIn; /* 標準入力 */
+ self->hStdOut = pInf->hStdOut; /* 標準出力 */
+ self->hStdErr = pInf->hStdErr; /* 標準エラー出力 */
/* コマンドラインコピー */
if ( pInf->pszCommandLine != NULL )
self = (C_PROCESS *)SysPrc_GetParam(SysPrc_GetCurrentHandle());
+ SysPrc_SetSignalHandler(SysPrc_GetCurrentHandle(), Process_SignalHandler);
+
pfncEntry = self->pfncEntry;
ProcParam = self->Param;
}
+/* シグナル受信ポイント */
+void Process_SignalHandler(void)
+{
+ C_PROCESS *self;
+
+ self = (C_PROCESS *)SysPrc_GetParam(SysPrc_GetCurrentHandle());
+
+ if ( self->pfncSignalProc != NULL )
+ {
+ self->pfncSignalProc(self->iSignal);
+ return;
+ }
+
+ if ( self->iSignal == PROCESS_SIGNAL_KILL )
+ {
+ Process_Exit(-1);
+ }
+}
+
+
/* end of file */
/* プロセス生成 */
-HANDLE Process_Create(const T_PROCESS_CREATE_INF *pInf)
+HANDLE Process_Create(const char *pszCommand, MEMSIZE StackSize, int Priority)
{
- C_PROCESS *self;
+ T_PROCESS_CREATE_INF Inf;
- /* ã\83¡ã\83¢ã\83ªç¢ºä¿\9d */
- if ( (self = (C_PROCESS *)SysMem_Alloc(sizeof(C_PROCESS))) == NULL )
+ /* ã\83\87ã\83\95ã\82©ã\83«ã\83\88å\80¤ */
+ if ( StackSize == 0 )
{
- return HANDLE_NULL;
+ StackSize = 4096;
}
-
- /* コンストラクタ呼び出し */
- if ( Process_Constructor(self, NULL, pInf) != PROCESS_ERR_OK )
+ if ( Priority == 0 )
{
- SysMem_Free(self);
- return HANDLE_NULL;
+ Priority = PROCESS_PRIORITY_NORMAL;
}
- return (HANDLE)self;
+ Inf.pszCommandLine = pszCommand; /**< コマンドライン */
+ Inf.pszCurrentDir = Process_GetCurrentDir(HANDLE_NULL); /**< 起動ディレクトリ */
+ Inf.pfncEntry = NULL; /**< 起動アドレス */
+ Inf.Param = 0; /**< ユーザーパラメータ */
+ Inf.StackSize = StackSize; /**< スタックサイズ */
+ Inf.Priority = Priority; /**< プロセス優先度 */
+ Inf.hTerminal = Process_GetTerminal(HANDLE_NULL); /**< ターミナル */
+ Inf.hConIn = Process_GetConIn(HANDLE_NULL); /**< コンソール入力 */
+ Inf.hConOut = Process_GetConOut(HANDLE_NULL); /**< コンソール出力 */
+ Inf.hStdIn = Process_GetStdIn(HANDLE_NULL); /**< 標準入力 */
+ Inf.hStdOut = Process_GetStdOut(HANDLE_NULL); /**< 標準出力 */
+ Inf.hStdErr = Process_GetStdErr(HANDLE_NULL); /**< 標準エラー出力 */
+
+ return Process_CreateEx(&Inf);
}
+
/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file process.h
+ * @brief %jp{プロセスオブジェクト}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+#include "process_local.h"
+
+
+
+/* プロセス生成 */
+HANDLE Process_CreateEx(const T_PROCESS_CREATE_INF *pInf)
+{
+ C_PROCESS *self;
+
+ /* メモリ確保 */
+ if ( (self = (C_PROCESS *)SysMem_Alloc(sizeof(C_PROCESS))) == NULL )
+ {
+ return HANDLE_NULL;
+ }
+
+ /* コンストラクタ呼び出し */
+ if ( Process_Constructor(self, NULL, pInf) != PROCESS_ERR_OK )
+ {
+ SysMem_Free(self);
+ return HANDLE_NULL;
+ }
+
+ return (HANDLE)self;
+}
+
+
+/* end of file */
int (*pfncEntry)(VPARAM Param); /**< 起動アドレス */
VPARAM Param; /**< ユーザーパラメータ */
+ void (*pfncSignalProc)(int iSignal); /**< シグナル受信プロシージャ */
+ int iSignal; /**< ユーザーパラメータ */
+
MEMSIZE StackSize; /**< スタックサイズ */
int Priority; /**< プロセス優先度 */
char SysMode; /**< システムモード */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file process.c
+ * @brief %jp{プロセスオブジェクト}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "process_local.h"
+
+
+
+/**< プロセスにシグナル受信プロシージャを登録 */
+void Process_SendSignal(HANDLE hProcess, int iSignal)
+{
+ C_PROCESS *self;
+
+ /* 指定が無ければ現在のプロセスとする */
+ if ( hProcess == HANDLE_NULL )
+ {
+ hProcess = Process_GetCurrentHandle();
+ }
+
+ /* ハンドルをキャスト */
+ self = (C_PROCESS *)hProcess;
+
+ /* シグナル送信 */
+ self->iSignal = iSignal;
+ SysPrc_SendSignal(self->hPrc);
+}
+
+
+
+/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file process.c
+ * @brief %jp{プロセスオブジェクト}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "process_local.h"
+
+
+/**< プロセスにシグナル受信プロシージャを登録 */
+void Process_SetSignalProc(HANDLE hProcess, void (*pfncSignalProc)(int iSignal))
+{
+ C_PROCESS *self;
+
+ /* 指定が無ければ現在のプロセスとする */
+ if ( hProcess == HANDLE_NULL )
+ {
+ hProcess = Process_GetCurrentHandle();
+ }
+
+ /* ハンドルをキャスト */
+ self = (C_PROCESS *)hProcess;
+
+ /* ハンドルを設定 */
+ self->pfncSignalProc = pfncSignalProc;
+}
+
+
+
+/* end of file */
void SysPrc_Terminate(SYSPRC_HANDLE hPrc); /**< プロセス終了(システム用) */
void SysPrc_Suspend(SYSPRC_HANDLE hPrc); /**< プロセス強制停止(システム用) */
void SysPrc_Resume(SYSPRC_HANDLE hPrc); /**< プロセス強制停止解除(システム用) */
-void SysPrc_Signal(SYSPRC_HANDLE hPrc, VPARAM Signal); /**< プロセスへのシグナル送信(システム用) */
-void SysPrc_SetSignalHandler(SYSPRC_HANDLE hPrc, void (*pfncHanler)(VPARAM Signal));
+void SysPrc_SendSignal(SYSPRC_HANDLE hPrc); /**< プロセスへのシグナル送信(システム用) */
+void SysPrc_SetSignalHandler(SYSPRC_HANDLE hPrc, void (*pfncHanler)(void));
/**< プロセスへのシグナルハンドラ登録(システム用) */
SYSPRC_HANDLE SysPrc_GetCurrentHandle(void); /**< 現在のプロセスの取得(システム用) */
void SysPrc_SetExecTime(SYSPRC_HANDLE hPrc, SYSTIM_CPUTIME Time); /**< プロセス実行時間計測タイマを初期化 */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file system.h
+ * @brief %jp{システム用API定義}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "sysapi_local.h"
+
+
+void SysPrc_SendSignal(SYSPRC_HANDLE hPrc)
+{
+ ras_tex((ID)hPrc, 1);
+}
+
+
+/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file system.h
+ * @brief %jp{システム用API定義}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "sysapi_local.h"
+
+
+void SysPrc_SetSignalHandler(SYSPRC_HANDLE hPrc, void (*pfncSinalProc)(void))
+{
+ T_DTEX dtex;
+
+ dtex.texatr = TA_HLNG;
+ dtex.texrtn = (FP)pfncSinalProc;
+ def_tex((ID)hPrc, &dtex);
+ ena_tex();
+}
+
+
+/* end of file */
pProcessInf = (T_PROCESS_CREATE_INF *)Param2;
/* ブートプロセスをシステムプロセスの子プロセスとして開始 */
- self->hBootProcess = Process_Create(pProcessInf);
+ self->hBootProcess = Process_CreateEx(pProcessInf);
/* プロセス生成情報用メモリ開放 */
SysMem_Free(pProcessInf);
$(OBJS_DIR)/ref_tst.$(EXT_OBJ): $(TSKOBJ_DIR)/ref_tst.c $(COMMON_HEADERS)
$(OBJS_DIR)/def_tex.$(EXT_OBJ): $(TSKOBJ_DIR)/def_tex.c $(COMMON_HEADERS)
$(OBJS_DIR)/ras_tex.$(EXT_OBJ): $(TSKOBJ_DIR)/ras_tex.c $(COMMON_HEADERS)
+$(OBJS_DIR)/ena_tex.$(EXT_OBJ): $(TSKOBJ_DIR)/ena_tex.c $(COMMON_HEADERS)
$(OBJS_DIR)/kexe_tex.$(EXT_OBJ): $(TSKOBJ_DIR)/kexe_tex.c $(COMMON_HEADERS)
$(OBJS_DIR)/cre_sem.$(EXT_OBJ): $(SEMOBJ_DIR)/cre_sem.c $(COMMON_HEADERS) $(SEMOBJ_HEADERS)
CSRCS += $(TSKOBJ_DIR)/ref_tst.c
CSRCS += $(TSKOBJ_DIR)/def_tex.c
CSRCS += $(TSKOBJ_DIR)/ras_tex.c
+CSRCS += $(TSKOBJ_DIR)/ena_tex.c
CSRCS += $(TSKOBJ_DIR)/kexe_tex.c
$(OBJS_DIR)\ras_tex.c : $(TSKOBJ_DIR)\ras_tex.c
$(CMD_CP) $(TSKOBJ_DIR)\ras_tex.c $(OBJS_DIR)\
+$(OBJS_DIR)\ena_tex.c : $(TSKOBJ_DIR)\ena_tex.c
+ $(CMD_CP) $(TSKOBJ_DIR)\ena_tex.c $(OBJS_DIR)\
+
$(OBJS_DIR)\kexe_tex.c : $(TSKOBJ_DIR)\kexe_tex.c
$(CMD_CP) $(TSKOBJ_DIR)\kexe_tex.c $(OBJS_DIR)\
$(OBJS_DIR)\exe_isr..$(EXT_OBJ): $(OBJS_DIR)\ref_tst.c $(COMMON_HEADERS)
$(OBJS_DIR)\exe_isr..$(EXT_OBJ): $(OBJS_DIR)\def_tex.c $(COMMON_HEADERS)
$(OBJS_DIR)\exe_isr..$(EXT_OBJ): $(OBJS_DIR)\ras_tex.c $(COMMON_HEADERS)
+$(OBJS_DIR)\exe_isr..$(EXT_OBJ): $(OBJS_DIR)\ena_tex.c $(COMMON_HEADERS)
$(OBJS_DIR)\exe_isr..$(EXT_OBJ): $(OBJS_DIR)\kexe_tex.c $(COMMON_HEADERS)
$(OBJS_DIR)\exe_isr..$(EXT_OBJ): $(OBJS_DIR)\cre_sem.c $(COMMON_HEADERS) $(SEMOBJ_HEADERS)
CSRCS = $(CSRCS) $(TSKOBJ_DIR)\ref_tst.c
CSRCS = $(CSRCS) $(TSKOBJ_DIR)\def_tex.c
CSRCS = $(CSRCS) $(TSKOBJ_DIR)\ras_tex.c
+CSRCS = $(CSRCS) $(TSKOBJ_DIR)\ena_tex.c
CSRCS = $(CSRCS) $(TSKOBJ_DIR)\kexe_tex.c
OBJS = $(OBJS) $(OBJS_DIR)\acre_tsk.$(EXT_OBJ)
OBJS = $(OBJS) $(OBJS_DIR)\kcre_tsk.$(EXT_OBJ)
OBJS = $(OBJS) $(OBJS_DIR)\ref_tst.$(EXT_OBJ)
OBJS = $(OBJS) $(OBJS_DIR)\def_tex.$(EXT_OBJ)
OBJS = $(OBJS) $(OBJS_DIR)\ras_tex.$(EXT_OBJ)
+OBJS = $(OBJS) $(OBJS_DIR)\ena_tex.$(EXT_OBJ)
OBJS = $(OBJS) $(OBJS_DIR)\kexe_tex.$(EXT_OBJ)
"ref_tst.c",
"def_tex.c",
"ras_tex.c",
+ "ena_tex.c",
"kexe_tex.c",
],
[
if ( !_KERNEL_SEM_CHECK_EXS(semid) )
{
_KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */
- return E_NOEXS; /* %jp{オブジェクト未生成} */
+ return; /* %jp{オブジェクト未生成} */
}
#endif
/* %jp{セマフォコントロールブロック取得} */
--- /dev/null
+/**
+ * Hyper Operating System V4 Advance
+ *
+ * @file rsm_tsk.c
+ * @brief
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+#if _KERNEL_SPT_ENA_TEX
+
+
+/* %jp{タスク例外処理の禁止} */
+ER ena_tex(void)
+{
+ _KERNEL_T_TSKHDL tskhdl;
+ _KERNEL_T_TCB *tcb;
+ _KERNEL_TSK_T_TSKSTAT tskstat;
+
+
+#if _KERNEL_SPT_ENA_TSK_E_CTX
+ if ( _KERNEL_SYS_SNS_CTX() )
+ {
+ return E_CTX;
+ }
+#endif
+
+ _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */
+
+
+ /* %jp{実行中タスクを取得} */
+ tskhdl = _KERNEL_SYS_GET_RUNTSK();
+
+ /* %jp{コントロールブロック取得} */
+ tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+ _KERNEL_TSK_SET_TEXSTAT(tcb, _KERNEL_TXS_ENA);
+
+ _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */
+
+ return E_OK;
+}
+
+
+#else /* _KERNEL_SPT_ENA_TEX */
+
+
+#if _KERNEL_SPT_ENA_TEX_E_NOSPT
+
+ER ena_tex(void)
+{
+ return E_NOSPT;
+}
+
+#endif
+
+
+#endif
+
+
+/* end of file */