Loading and resolving of suite libraries.
[SquirrelJME.git] / nanocoat / include / sjme / task.h
blob35304a12bb4788f150d2e217baa25cb983af172b
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 "list.h"
20 #include "sjme/nvm.h"
21 #include "sjme/rom.h"
23 /* Anti-C++. */
24 #ifdef __cplusplus
25 #ifndef SJME_CXX_IS_EXTERNED
26 #define SJME_CXX_IS_EXTERNED
27 #define SJME_CXX_SQUIRRELJME_TASK_H
28 extern "C" {
29 #endif /* #ifdef SJME_CXX_IS_EXTERNED */
30 #endif /* #ifdef __cplusplus */
32 /*--------------------------------------------------------------------------*/
34 /**
35 * The type of redirection to use for pipes.
37 * @since 2023/12/17
39 typedef enum sjme_task_pipeRedirectType
41 /** Discard everything. */
42 SJME_TASK_PIPE_REDIRECT_TYPE_DISCARD = 0,
44 /** Store everything into a buffer. */
45 SJME_TASK_PIPE_REDIRECT_TYPE_BUFFER = 1,
47 /** Send everything to the terminal. */
48 SJME_TASK_PIPE_REDIRECT_TYPE_TERMINAL = 2,
50 /** The number of redirect types. */
51 SJME_NUM_TASK_PIPE_REDIRECT_TYPES
52 } sjme_task_pipeRedirectType;
54 /**
55 * The configuration that stores the information needed for starting the task.
57 * @since 2023/12/17
59 typedef struct sjme_task_startConfig
61 /** Redirection for standard output. */
62 sjme_task_pipeRedirectType stdOut;
64 /** Redirection for standard error. */
65 sjme_task_pipeRedirectType stdErr;
67 /** The class path to use. */
68 sjme_list_sjme_rom_library* classPath;
70 /** Main class to start in. */
71 sjme_lpcstr mainClass;
73 /** Main arguments. */
74 sjme_list_sjme_lpcstr* mainArgs;
76 /** System properties. */
77 sjme_list_sjme_lpcstr* sysProps;
78 } sjme_task_startConfig;
80 /**
81 * Starts the task.
83 * @param inState The input state.
84 * @param startConfig The start configuration for this task.
85 * @param outTask The resultant task.
86 * @return Any error state.
87 * @since 2023/12/17
89 sjme_errorCode sjme_task_start(
90 sjme_attrInNotNull sjme_nvm inState,
91 sjme_attrInNotNull const sjme_task_startConfig* startConfig,
92 sjme_attrOutNullable sjme_nvm_task* outTask);
94 /*--------------------------------------------------------------------------*/
96 /* Anti-C++. */
97 #ifdef __cplusplus
98 #ifdef SJME_CXX_SQUIRRELJME_TASK_H
100 #undef SJME_CXX_SQUIRRELJME_TASK_H
101 #undef SJME_CXX_IS_EXTERNED
102 #endif /* #ifdef SJME_CXX_SQUIRRELJME_TASK_H */
103 #endif /* #ifdef __cplusplus */
105 #endif /* SQUIRRELJME_TASK_H */