Remove Twitter links.
[SquirrelJME.git] / nanocoat / include / sjme / nvm / task.h
blob038285b17f945b733f6d2d4361c01ed7f717767c
1 /* -*- Mode: C; indent-tabs-mode: t; tab-width: 4 -*-
2 // ---------------------------------------------------------------------------
3 // SquirrelJME
4 // Copyright (C) Stephanie Gawroriski <xer@multiphasicapps.net>
5 // ---------------------------------------------------------------------------
6 // SquirrelJME is under the Mozilla Public License Version 2.0.
7 // See license.mkd for licensing and copyright information.
8 // -------------------------------------------------------------------------*/
10 /**
11 * Tasks support.
13 * @since 2023/07/29
16 #ifndef SQUIRRELJME_TASK_H
17 #define SQUIRRELJME_TASK_H
19 #include "sjme/list.h"
20 #include "sjme/nvm/nvm.h"
21 #include "sjme/nvm/rom.h"
22 #include "sjme/nvm/classyVm.h"
24 /* Anti-C++. */
25 #ifdef __cplusplus
26 #ifndef SJME_CXX_IS_EXTERNED
27 #define SJME_CXX_IS_EXTERNED
28 #define SJME_CXX_SQUIRRELJME_TASK_H
29 extern "C" {
30 #endif /* #ifdef SJME_CXX_IS_EXTERNED */
31 #endif /* #ifdef __cplusplus */
33 /*--------------------------------------------------------------------------*/
35 /**
36 * The type of redirection to use for pipes.
38 * @since 2023/12/17
40 typedef enum sjme_task_pipeRedirectType
42 /** Discard everything. */
43 SJME_TASK_PIPE_REDIRECT_TYPE_DISCARD = 0,
45 /** Store everything into a buffer. */
46 SJME_TASK_PIPE_REDIRECT_TYPE_BUFFER = 1,
48 /** Send everything to the terminal. */
49 SJME_TASK_PIPE_REDIRECT_TYPE_TERMINAL = 2,
51 /** The number of redirect types. */
52 SJME_NUM_TASK_PIPE_REDIRECT_TYPES
53 } sjme_task_pipeRedirectType;
55 /**
56 * The configuration that stores the information needed for starting the task.
58 * @since 2023/12/17
60 typedef struct sjme_task_startConfig
62 /** Redirection for standard output. */
63 sjme_task_pipeRedirectType stdOut;
65 /** Redirection for standard error. */
66 sjme_task_pipeRedirectType stdErr;
68 /** The class path to use. */
69 sjme_list_sjme_rom_library* classPath;
71 /** Main class to start in. */
72 sjme_lpcstr mainClass;
74 /** Main arguments. */
75 sjme_list_sjme_lpcstr* mainArgs;
77 /** System properties. */
78 sjme_list_sjme_lpcstr* sysProps;
80 /** The class loader for this task. */
81 sjme_vmClass_loader classLoader;
82 } sjme_task_startConfig;
84 /**
85 * Starts the task.
87 * @param inState The input state.
88 * @param startConfig The start configuration for this task.
89 * @param outTask The resultant task.
90 * @return Any error state.
91 * @since 2023/12/17
93 sjme_errorCode sjme_task_start(
94 sjme_attrInNotNull sjme_nvm inState,
95 sjme_attrInNotNull const sjme_task_startConfig* startConfig,
96 sjme_attrOutNullable sjme_nvm_task* outTask);
98 /*--------------------------------------------------------------------------*/
100 /* Anti-C++. */
101 #ifdef __cplusplus
102 #ifdef SJME_CXX_SQUIRRELJME_TASK_H
104 #undef SJME_CXX_SQUIRRELJME_TASK_H
105 #undef SJME_CXX_IS_EXTERNED
106 #endif /* #ifdef SJME_CXX_SQUIRRELJME_TASK_H */
107 #endif /* #ifdef __cplusplus */
109 #endif /* SQUIRRELJME_TASK_H */