--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file commandlist.h
+ * @brief %jp{コマンドリストコマンド}
+ *
+ * Copyright (C) 2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __HOS__commandlist_h__
+#define __HOS__commandlist_h__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int CommandList_Main(int argc, char *argv[]);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __HOS__commandlist_h__ */
+
+
+/* end of file */
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file commandlist_main.c
+ * @brief %jp{コマンドリストコマンド}
+ *
+ * Copyright (C) 2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include <stdlib.h>
+#include <string.h>
+#include "hosaplfw.h"
+#include "commandlist.h"
+
+
+int CommandList_Main(int argc, char *argv[])
+{
+ COMMAND_PTR Ptr;
+ const char *pszName;
+
+ /* 最初のコマンドを得る */
+ Ptr = Command_GetFirstCommand();
+ while ( Ptr != NULL )
+ {
+ Ptr = Command_GetNextCommand(Ptr, &pszName);
+
+ StdIo_PrintFormat("%s\n", pszName);
+ }
+
+ return 0;
+}
+
+
+/* end of file */
$(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)/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)
$(OBJS_DIR)/memtest_main.$(EXT_OBJ): $(MEMTEST_DIR)/memtest_main.c $(COMMON_HEADERS)
# Applications
LINK_SHELL ?= Yes
LINK_PROCESSLIST ?= Yes
+LINK_COMMANDLIST ?= Yes
LINK_MEMDUMP ?= Yes
LINK_MEMWRITE ?= Yes
LINK_MEMTEST ?= Yes
endif
+# Command List
+ifeq ($(LINK_COMMANDLIST),Yes)
+COMMANDLIST_DIR = $(HOSAPLFW_DIR)/application/syscmd/commandlist
+SRC_DIRS += $(COMMANDLIST_DIR)
+CSRCS += $(COMMANDLIST_DIR)/commandlist_main.c
+endif
+
+
# Memory Dump
ifeq ($(LINK_MEMDUMP),Yes)
MEMDUMP_DIR = $(HOSAPLFW_DIR)/application/utility/memdump
$(CMD_CP) $(PROCESSLIST_DIR)\processlist_main.c $(OBJS_DIR)\
+$(OBJS_DIR)\commandlist.h : $(COMMANDLIST_DIR)\commandlist.h
+ $(CMD_CP) $(COMMANDLIST_DIR)\commandlist.h $(OBJS_DIR)\
+
+$(OBJS_DIR)\commandlist_main.c : $(COMMANDLIST_DIR)\commandlist_main.c
+ $(CMD_CP) $(COMMANDLIST_DIR)\commandlist_main.c $(OBJS_DIR)\
+
+
$(OBJS_DIR)\memdump.h : $(MEMDUMP_DIR)\memdump.h
$(CMD_CP) $(MEMDUMP_DIR)\memdump.h $(OBJS_DIR)\
$(OBJS_DIR)\processlist_main.$(EXT_OBJ): $(OBJS_DIR)\processlist_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)
$(OBJS_DIR)\memwrite_main.$(EXT_OBJ): $(OBJS_DIR)\memwrite_main.c $(COMMON_HEADERS)
!ifndef LINK_PROCESSLIST
LINK_PROCESSLIST = Yes
!endif
+!ifndef LINK_COMMANDLIST
+LINK_COMMANDLIST = Yes
+!endif
!ifndef LINK_MEMDUMP
LINK_MEMDUMP = Yes
!endif
!endif
+# Command List
+!if "$(LINK_COMMANDLIST)" == "Yes"
+COMMANDLIST_DIR = $(HOSAPLFW_DIR)\application\syscmd\commandlist
+HEADERS = $(HEADERS) $(OBJS_DIR)\commandlist.h
+CSRCS = $(CSRCS) $(COMMANDLIST_DIR)\commandlist_main.c
+OBJS = $(OBJS) $(OBJS_DIR)\commandlist_main.$(EXT_OBJ)
+!endif
+
+
# Memory Dump
!if "$(LINK_MEMDUMP)" == "Yes"
MEMDUMP_DIR = $(HOSAPLFW_DIR)\application\utility\memdump
],
],
[
+ "Command List",
+ "\$(COMMON_HEADERS)",
+ "\$(HOSAPLFW_DIR)/application/syscmd/commandlist",
+ "COMMANDLIST",
+ "Yes",
+ [
+ "commandlist.h",
+ ],
+ [
+ "commandlist_main.c",
+ ],
+ ],
+ [
"Memory Dump",
"\$(COMMON_HEADERS)",
"\$(HOSAPLFW_DIR)/application/utility/memdump",
+++ /dev/null
-/**
- * Hyper Operating System Application Framework
- *
- * @file fatvol.c
- * @brief %jp{FATボリューム用デバイスドライバ}
- *
- * Copyright (C) 2006-2007 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#include <stdio.h>
-#include "fatvol_local.h"
-
-
-HANDLE FatVol_FileCreate(C_FATVOL *self, FATVOL_UINT uiStartCluster, FATVOL_UINT uiDirCluster, FATVOL_UINT uiDirEntryPos, FILE_POS FileSize, int iMode)
-{
- C_FATFILE *pFile;
-
- /* create file descriptor */
- if ( (pFile = SysMem_Alloc(sizeof(*pFile))) == NULL )
- {
- return HANDLE_NULL;
- }
- FileObj_Create(&pFile->FileObj, (C_DRVOBJ *)self, NULL);
-
- /* 初期化 */
- pFile->iMode = iMode;
- pFile->uiStartCluster = uiStartCluster;
- pFile->uiDirCluster = uiDirCluster;
- pFile->uiDirEntryPos = uiDirEntryPos;
- pFile->FileSize = FileSize;
-
- /* ファイルポインタ初期化 */
- pFile->FilePos = 0;
-
- return (HANDLE)pFile;
-}
-
-
-/* end of file */
+++ /dev/null
-/**
- * Hyper Operating System Application Framework
- *
- * @file fatvol.c
- * @brief %jp{FATボリューム用デバイスドライバ}
- *
- * Copyright (C) 2006-2007 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#include <stdio.h>
-#include "fatvol_local.h"
-
-
-void FatVol_FileDelete(C_FATVOL *self, HANDLE hFile)
-{
- C_FATFILE *pFile;
-
- pFile = (C_FATFILE *)hFile;
-
- FileObj_Delete(pFile);
- SysMem_Free(pFile);
-}
-
-
-/* end of file */
return NULL;
}
+
+
+ASSOC_POS Assoc_GetFirst(C_ASSOC *self)
+{
+ return (ASSOC_POS)List_GetHeadPos(&self->List);
+}
+
+
+ASSOC_POS Assoc_GetNext(C_ASSOC *self, ASSOC_POS *Pos)
+{
+ return (ASSOC_POS)List_GetNextPos(&self->List, (LIST_POS)Pos);
+}
+
+
+const void *Assoc_GetAt(C_ASSOC *self, ASSOC_POS *Pos, const char **ppszKey)
+{
+ char *pDataKey;
+
+ pDataKey = List_GetAt(&self->List, Pos);
+ *ppszKey = pDataKey;
+
+ return (void *)(pDataKey + MEMIF_ALIGNSIZE(strlen(pDataKey) + 1));
+}
+
#include "library/container/list/list.h"
-#define ASSOC_ERR_OK 0
-#define ASSOC_ERR_NG (-1)
+#define ASSOC_ERR_OK 0
+#define ASSOC_ERR_NG (-1)
+#define ASSOC_POS_NULL LIST_POS_NULL
typedef void* ASSOC_POS;
typedef int ASSOC_ERR;
+
/* ストリームバッファクラス */
typedef struct c_assocbuf
{
return Ret;
}
+
+COMMAND_PTR Command_GetFirstCommand(void)
+{
+ ASSOC_POS Pos;
+
+ Pos = Assoc_GetFirst(&Command_Assoc);
+
+ return (COMMAND_PTR)Pos;
+}
+
+
+COMMAND_PTR Command_GetNextCommand(COMMAND_PTR Ptr, const char **ppszName)
+{
+ ASSOC_POS Pos;
+
+ Pos = (ASSOC_POS)Ptr;
+
+ Assoc_GetAt(&Command_Assoc, Pos, ppszName);
+
+ Pos = Assoc_GetNext(&Command_Assoc, Pos);
+
+ return (COMMAND_PTR)Pos;
+}
+
+
+COMMAND_FUNC Command_GetCommandAddr(const char *pszName)
+{
+ const COMMAND_FUNC *ppfncMain;
+
+ ppfncMain = (const COMMAND_FUNC *)Assoc_Get(&Command_Assoc, pszName);
+
+ return *ppfncMain;
+}
+
+
+
typedef int COMMAND_ERR;
typedef int (*COMMAND_FUNC)(int argc, char *argv[]);
+typedef void *COMMAND_PTR;
+
#ifdef __cplusplus
extern "C" {
#endif
-void Command_Initialize(void);
-void Command_AddCommand(const char *pszName, COMMAND_FUNC pfncMain); /* コマンドを登録する */
-COMMAND_ERR Command_Execute(const char *pszCommandLine, int *piExitCode); /* コマンドを実行する */
+void Command_Initialize(void);
+void Command_AddCommand(const char *pszName, COMMAND_FUNC pfncMain); /* コマンドを登録する */
+COMMAND_ERR Command_Execute(const char *pszCommandLine, int *piExitCode); /* コマンドを実行する */
+
+COMMAND_PTR Command_GetFirstCommand(void);
+COMMAND_PTR Command_GetNextCommand(COMMAND_PTR Ptr, const char **ppszName);
+COMMAND_FUNC Command_GetCommandAddr(const char *pszName);
#ifdef __cplusplus
}
SRC_DIRS += $(SRC_PROC_DIR) $(SRC_PROC_DIR) $(SRC_PROC_ASM_DIR) $(SRC_IRC_DIR) $(SRC_IRC_ASM_DIR)
# %jp{オプションフラグ}
-AFLAGS +=
-CFLAGS +=
-ARFLAGS +=
+AFLAGS =
+CFLAGS =
+ARFLAGS =
# %jp{コンフィギュレータ定義}
CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc
*/
-
+#include <process.h>
#include "core/core.h"
#include "object/inhobj.h"
+static unsigned __stdcall _kernel_ctx_ent(void *param); /**< %jp{スレッドの開始関数} */
+static void _kernel_run_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{スレッドの実行開始} */
+static void _kernel_wai_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{スレッドの停止待ち} */
-static DWORD WINAPI _kernel_ctx_ent(LPVOID param); /* %jp{スレッドの開始関数} */
-static void _kernel_run_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /* %jp{スレッドの実行開始} */
-static void _kernel_wai_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /* %jp{スレッドの停止待ち} */
-
-
-static CRITICAL_SECTION _kernel_win32_CriticalSection;
-static _KERNEL_T_CTXCB *_kernel_win32_runctxcb = NULL; /**< %jp{実行中のコンテキスト} */
-static _KERNEL_T_CTXCB *_kernel_win32_intctxcb = NULL; /**< %jp{割込みからスイッチされたコンテキスト} */
-static HANDLE _kernel_win32_hSemDisInt = NULL; /**< %jp{システムの排他制御用セマフォ} */
-static volatile BOOL _kernel_win32_blIntCtx = FALSE; /**< %jp{割込み処理中フラグ} */
-static volatile BOOL _kernel_win32_blDisInt = TRUE; /**< %jp{割込み禁止フラグ} */
-static volatile BOOL _kernel_win32_blIntDsp = FALSE; /**< %jp{割込み時ディスパッチフラグ} */
-static DWORD _kernel_win32_hPrimaryThreadId = 0; /**< %jp{プライマリスレッドID} */
+static CRITICAL_SECTION _kernel_win32_CriticalSection;
+static _KERNEL_T_CTXCB *_kernel_win32_runctxcb = NULL; /**< %jp{実行中のコンテキスト} */
+static _KERNEL_T_CTXCB *_kernel_win32_intctxcb = NULL; /**< %jp{割込みからスイッチされたコンテキスト} */
+static HANDLE _kernel_win32_hSemDisInt = NULL; /**< %jp{システムの排他制御用セマフォ} */
+static volatile BOOL _kernel_win32_blIntCtx = FALSE; /**< %jp{割込み処理中フラグ} */
+static volatile BOOL _kernel_win32_blDisInt = TRUE; /**< %jp{割込み禁止フラグ} */
+static volatile BOOL _kernel_win32_blIntDsp = FALSE; /**< %jp{割込み時ディスパッチフラグ} */
+static DWORD _kernel_win32_hPrimaryThreadId = 0; /**< %jp{プライマリスレッドID} */
}
-
/** %jp{実行コンテキストの作成} */
void _kernel_cre_ctx(
_KERNEL_T_CTXCB *pk_ctxcb, /* コンテキストを作成するアドレス */
/* %jp{コンテキストスレッド生成} */
pk_ctxcb->hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
- pk_ctxcb->hThread = CreateThread(NULL, 0, _kernel_ctx_ent, (LPVOID)pk_ctxcb,
- 0, &pk_ctxcb->dwThreadId);
+
+#if defined(_MSC_VER) /* Visual-C++ の場合 */
+ pk_ctxcb->hThread = (HANDLE)_beginthreadex(NULL, 0, _kernel_ctx_ent, (void *)pk_ctxcb, 0, &pk_ctxcb->dwThreadId);
+#else /* Visual-C++ 以外 */
+ pk_ctxcb->hThread = CreateThread(NULL, 0, _kernel_ctx_ent, (LPVOID)pk_ctxcb, 0, &pk_ctxcb->dwThreadId);
+#endif
}
/** %jp{スレッドの開始関数} */
-DWORD WINAPI _kernel_ctx_ent(LPVOID param)
+unsigned __stdcall _kernel_ctx_ent(void *param)
{
_KERNEL_T_CTXCB *pk_ctxcb;
}
-
/* %jp{割り込み用処理} */
void vsig_int(int inhno)
{
/* %jp{コンテキストチェック} */
#if _KERNEL_SPT_SUS_TSK_E_CTX
- if ( _KERNEL_SYS_GET_RUNTSK() == _KERNEL_SYS_SNS_DPN() && _KERNEL_SYS_SNS_DPN() )
+ if ( _KERNEL_SYS_GET_RUNTSK() == tskhdl && _KERNEL_SYS_SNS_DPN() )
{
_KERNEL_LEAVE_SVC(); /* %jp{サービスコールを出る}%en{leave service-call} */
return E_CTX; /* %jp{コンテキスト不正} */
{
T_CMPF cmpf;
T_CMBX cmbx;
- T_CCYC ccyc;
/* %jp{固定長メモリプール生成} */
cmpf.mpfatr = TA_TFIFO;