Compare commits

...

30 Commits

Author SHA1 Message Date
d19256621b (MOD) Modified several places to adapt the extraction of Report. 2024-06-26 11:19:11 +08:00
8696b89c2e (ADD) Extracted Report from "status.h" into "report.h". 2024-06-26 10:51:09 +08:00
William
75a2b14c07 (MOD) Resumed using -Wall for compiler options. 2024-06-26 08:56:11 +08:00
William
10b2d4e43b Merge branch 'master' of https://github.com/Wilhelm-Lee/Compound 2024-06-25 22:19:27 +08:00
9f1960e297 (MOD) Refined README. 2024-06-25 20:02:40 +08:00
24cd4a17df (MOD) Refined README 2024-06-25 19:59:13 +08:00
3f0907daa2 (DEL) Deleted github action file. 2024-06-25 19:13:14 +08:00
22db5f0cbc Merge remote-tracking branch 'master/github_action_test' 2024-06-25 19:11:35 +08:00
43afe62ad1 (MOD) Changed default shell from "bash" to "sh" in github action file.
(MOD) Replaced cmake output file with \"/usr/share/libcompound.so\" in github action file.
2024-06-25 18:58:18 +08:00
772a79ce03 (MOD) Changed default shell from "bash" to "sh" in github action file. 2024-06-25 18:57:30 +08:00
5e05e24e38 (MOD) Aborted using bash for script executing for scripts modified are now supporting POSIX Shell.
(MOD) Modified github action file for abort supporting MS Windows as the target in current stage.
2024-06-25 17:51:43 +08:00
b9c5bfbc00 (MOD) Added "bash" before "./preinstall" as well as "./postinstall". 2024-06-25 15:00:50 +08:00
acaa38099f (MOD) Added "sudo" before "./preinstall" as well as "./postinstall". 2024-06-25 14:56:12 +08:00
5026f03692 (MOD) Added a feature where it displays the current user identity once it's not root. 2024-06-25 14:50:37 +08:00
55d9ddef39 (MOD) Added more steps for project building. 2024-06-25 14:15:17 +08:00
092dddf6c4 (MOD) Changed effecting branch from "master" to "github_action_test" which is more reasonable since this is testing on branch github_action_test. 2024-06-25 13:58:54 +08:00
242fcce951 (MOD) Modified github action file for testing for extra step required by project. 2024-06-25 13:52:54 +08:00
bc3fd9dfad (MOD) Modified file install that added auto-creating directory in need. 2024-06-25 13:11:34 +08:00
f88b2b5b02 (MOD) Disabled some parameters for C compiler in order to run github action successfully. 2024-06-25 13:07:03 +08:00
acad934238 (FEA) Now Compound is featured with indexer displaying while printing. 2024-06-25 12:27:21 +08:00
William
bcbec01992 Merge branch 'master' of https://github.com/Wilhelm-Lee/Compound
Update remote repository on branch master with locally newly added github action file.
2024-06-25 10:10:02 +08:00
William
6583335dd6 (ADD) Added github action file. 2024-06-25 09:55:06 +08:00
William Lee
09076d0d00 Delete CompoundTest
(DEL) Deleted an unintentional uploaded executable file for testing.
2024-06-25 09:42:20 +08:00
William
31a997c170 Merge branch 'git.jackcraft/storageonly' 2024-06-25 09:37:03 +08:00
William
794ff14602 (SOC) Storage Only Commit - Tue 25 Jun 09:33:57 CST 2024 2024-06-25 09:33:57 +08:00
William
b316c0e5ee (MOV) Moved test.c function.c/h back to project directory. 2024-06-24 22:37:41 +08:00
William
69d827c38e (SYNC) Synchronisation with local latest modifications. 2024-06-24 22:34:47 +08:00
William
871bab317b (ADD) Added test.c for testing on github action. 2024-06-24 21:59:46 +08:00
William
73e766eef7 (MOD) Forbade ignoring test.c for github action. 2024-06-24 21:48:15 +08:00
1c611ec4e2 (FEA) Compound is now fully featured with literalisation of Status along with its printing! 2024-06-24 14:44:26 +08:00
19 changed files with 1114 additions and 468 deletions

8
.gitignore vendored
View File

@@ -2,7 +2,6 @@
*CMakeFiles/* *CMakeFiles/*
*CMakeCache* *CMakeCache*
cmake_install.cmake cmake_install.cmake
*[tT]est*
*~ *~
gitwork gitwork
work work
@@ -13,14 +12,13 @@ todo_stack
getReady.sh getReady.sh
base_type.c base_type.c
sample sample
<<<<<<< HEAD
compile compile
=======
>>>>>>> refs/remotes/master/master
.vscode/ .vscode/
todo todo
vsc* vsc*
libcompound.so libcompound.so
ccwarn
CMakeLists_default.txt CMakeLists_default.txt
CompoundTest
ccwarn
genwarn.sh genwarn.sh
test.sh

View File

@@ -4,74 +4,7 @@ project (Compound)
set(CMAKE_C_COMPILER gcc) set(CMAKE_C_COMPILER gcc)
set(WALL -Waddress add_compile_options(-g -std=c99 -Wall -Wextra -D__DEBUG__)
-Warray-compare
-Warray-parameter=2
-Wbool-compare
-Wbool-operation
-Wchar-subscripts
-Wcomment
-Wdangling-else
-Wdangling-pointer=2
-Wenum-compare
-Wenum-int-mismatch
-Wformat=1
-Wformat-contains-nul
-Wformat-diag
-Wformat-extra-args
-Wformat-overflow=1
-Wformat-truncation=1
-Wformat-zero-length
-Wframe-address
-Wimplicit
-Wimplicit-function-declaration
-Wimplicit-int
-Winfinite-recursion
-Wint-in-bool-context
-Wlogical-not-parentheses
-Wmain
-Wmaybe-uninitialized
-Wmemset-elt-size
-Wmemset-transposed-args
-Wmisleading-indentation
-Wmismatched-dealloc
-Wmissing-attributes
-Wmissing-braces
-Wmultistatement-macros
-Wnonnull
-Wnonnull-compare
-Wopenmp-simd
-Wpacked-not-aligned
-Wparentheses
-Wpointer-sign
-Wrestrict
-Wreturn-type
-Wsequence-point
-Wsizeof-array-div
-Wsizeof-pointer-div
-Wsizeof-pointer-memaccess
-Wstrict-aliasing
-Wstrict-overflow=1
-Wswitch
-Wtautological-compare
-Wtrigraphs
-Wuninitialized
-Wunknown-pragmas
-Wunused
-Wunused-but-set-variable
-Wunused-const-variable=1
-Wunused-function
-Wunused-label
-Wunused-local-typedefs
-Wunused-value
-Wunused-variable
-Wuse-after-free=2
-Wvla-parameter
-Wvolatile-register-var
-Wzero-length-bounds
)
add_compile_options(-g -std=c99 ${WALL} -Wextra -D__DEBUG__)
set(SHARED_SOURCE set(SHARED_SOURCE
MemMan/src/memman.c MemMan/src/memman.c

View File

@@ -5,12 +5,9 @@ Generally, Compound is a library for general-purposes programming which you will
It is worth noticing that, this library is completely aimed for creating another language. That means, every feature update is supposedly to serve the language. It is worth noticing that, this library is completely aimed for creating another language. That means, every feature update is supposedly to serve the language.
--- ---
## BUILDING ## Building
To build Compound, all you need is to type as follow in a terminal:
```shell ```shell
cmake . # Generate "Makefile" cmake . && make
make # Build
``` ```
> *PLEASE NOTICE* > *PLEASE NOTICE*
@@ -35,12 +32,25 @@ Compound, now, roughly divides platform compatibilities into 2 major parts, the
This idea is ready for refinements, you can put up such suggestions and they're welcomed. This idea is ready for refinements, you can put up such suggestions and they're welcomed.
## Installation ## Installation
To install Compound, all you need to do is to run `install`, something like below.
```shell ```shell
./install # (Require root privilege) ./preinstall # (Require root privilege)
./postinstall # (Require root privilege)
``` ```
If you cannot execute ./install script, try to add permission for execution: > *I TELL YOU WHAT*
> *It is for the convenience of project building automation that the installation procedure being devided into two different parts.*
> *In general, the "preinstall" copies the header files into system "include" directory,*
> *while the "postinstall" copies the compiled library into system library directory.*
And if you cannot execute the scripts, try to add permission for execution:
```shell ```shell
chmod +x ./install # (Require root privilege) chmod +x ./the_file_lacks_of_permission_to_execute_and_to_be_honest_i_dont_know_why_do_i_have_to_put_the_name_so_long_that_none_of_you_would_like_to_read_it_through_but_since_you_have_gotten_this_far_congrats_you_are_my_big_star_now_oh_by_the_way_do_you_know_that_the_cat_of_mine_can_actually_talk_cause_last_sunday_when_i_head_to_kitchen_for_some_drinks_and_i_heard_something_mumbling_behind_the_door_and_i_went_up_to_check_what_it_was_and_it_turns_out_that_it_was_my_cat_speaking_and_what_it_said_was_meow
``` ```
## Troubleshoot
For now, we wish more of you to put up issues so that the problems can be spotted.
> *NOT SO FAST*
> *If you got a problem, try to look up for similar or same issues that had been put up already,*
> *'cause you don't want to have your reply simply written something like "ah yeah yeah, we've been through that sometime earlier".*

BIN
Status/StatusTest Executable file

Binary file not shown.

View File

@@ -76,79 +76,7 @@ typedef struct _Status {
# define LOCATION_LITERALISE_FORMAT "at %s:%d, in function `%s\'" # define LOCATION_LITERALISE_FORMAT "at %s:%d, in function `%s\'"
# define STATUS_LITERALISE_FORMAT \ # define STATUS_LITERALISE_FORMAT \
"%s: \"%s\"\n\tpredecessor=<%s> value=(%d) characteristic=[%d]\n\t%s\n" "%s: \"%s\"\n\tpredecessor=<%s> value=(%d) characteristic=(%d)\n\t%s\n"
typedef enum {
REPORT_SENDING_PRIORITY_ALL = 0, // Highest level; least value.
REPORT_SENDING_PRIORITY_FATAL,
REPORT_SENDING_PRIORITY_EXCEPTIONAL,
REPORT_SENDING_PRIORITY_CRITICAL,
REPORT_SENDING_PRIORITY_MAJOR,
REPORT_SENDING_PRIORITY_NORMAL,
REPORT_SENDING_PRIORITY_MINOR,
REPORT_SENDING_PRIORITY_DEBUG,
REPORT_SENDING_PRIORITY_NONE, // Lowest level, greatest value.
} ReportLevel;
typedef enum {
REPORT_SENDING_TASK_STATUS_FINISHED = 0,
REPORT_SENDING_TASK_STATUS_PENDING,
REPORT_SENDING_TASK_STATUS_PROCEEDING,
REPORT_SENDING_TASK_STATUS_PAUSED,
REPORT_SENDING_TASK_STATUS_NOTFOUND
} ReportStatus;
/* "Report" recollects essential informations, included but not limited to
Status and others for making an report for debugging and such. */
typedef struct {
Status content;
char *initiator;
time_t time;
ReportLevel level;
ReportStatus status;
FILE *dst; // The destination where the report is sending to.
} Report;
/*
DATETIME [PRIORITY] STATUSNAME (ORIGINATOR): STATUS.DESCRIPTION
at LOCATION.FILE:LOCATION.LINE, LOCATION.FUNC
at LOCATION.FILE:LOCATION.LINE, LOCATION.FUNC
at LOCATION.FILE:LOCATION.LINE, LOCATION.FUNC
at LOCATION.FILE:LOCATION.LINE, LOCATION.FUNC
Fri 10 May 03:02:37 CST 2024 [URGENT] InvalidParameter (Nullity): Given buffer was unavailable.
at /external/Documents/Projects/Compound/Status/src/status.c:104, Report_Literalise
at /external/Documents/Projects/Compound/Status/src/status.c:114, ReportSender_Send
at /external/Documents/Projects/Compound/Status/src/status.c:69, _throw
!!!!at /external/Documents/Projects/Compound/Array/src/array.c:16, array_create
at /external/Documents/Projects/Compound/test.c:24, main
*/
// DATETIME [LEVEL] STATUS.IDENTITY (INITIATOR): STATUS.DESCRIPTION
# define REPORT_LITERALISE_FORMAT_HEADER "%s [%d] %s (%s): %s\n\tat %s:%d, %s\n%s"
// STATUS.IDENTITY, STATUS.PREV.IDENTITY, STATUS.VALUE, STATUS.CHARACTERISTIC,
// FILE, LINE, FUNC
# define REPORT_LITERALISE_FORMAT_DETAIL "\t%s(%s, %d, %d) at %s:%d, %s\n"
typedef enum {
REPORT_RESULT_SUCCEEDED,
REPORT_RESULT_FAILED,
REPORT_RESULT_PROGRESSING,
REPORT_RESULT_PENDING,
} ReportResult;
typedef struct {
thrd_t thread;
Report report;
time_t elapsed;
ReportResult result;
} ReportSender;
typedef int (*ReportTask)(Report *);
typedef int ReportTaskID;
// typedef thrd_start_t ArgueStart; // typedef thrd_start_t ArgueStart;
@@ -185,7 +113,6 @@ typedef int ReportTaskID;
Status Location_Literalise(Location *inst, char *buff); Status Location_Literalise(Location *inst, char *buff);
bool Location_Equals(Location lc1, Location lc2); bool Location_Equals(Location lc1, Location lc2);
Status Status_Literalise(Status *inst, char *buff); Status Status_Literalise(Status *inst, char *buff);
Status Status_LiteraliseForReport(Status *inst, char *buff);
bool Status_Equal(Status *stat1, Status *stat2); bool Status_Equal(Status *stat1, Status *stat2);
// void StatusUtils_Dump(Status *inst, Status **store, int idx); // void StatusUtils_Dump(Status *inst, Status **store, int idx);
void StatusUtils_Dump(Status *inst, Status *store); void StatusUtils_Dump(Status *inst, Status *store);
@@ -194,20 +121,6 @@ bool StatusUtils_IsOkay(Status inst);
bool StatusUtils_IsRecursive(Status inst); bool StatusUtils_IsRecursive(Status inst);
int StatusUtils_Depth(Status *inst); int StatusUtils_Depth(Status *inst);
Status Report_Create(Report *inst, Status *stat, FILE *dest, char *initiator,
int priority);
Status Report_CopyOf(Report *inst, Report *other);
Status Report_Literalise(Report *inst, char *buff);
void Report_Delete(Report *inst);
bool Report_Equals(Report repo1, Report repo2);
// Status ReportSender_Create(ReportSender *inst, Report *report, thrd_start_t *handler);
Status ReportSender_Create(ReportSender *inst, Report *report);
Status ReportSender_Send(ReportSender *inst, ReportTask task);
// ReportTaskStatus
// ReportSender_GetStatus(ReportSender *inst);
// Status // Status
// arguestarter_create(ArgueStartParam *inst, void *external_param); // arguestarter_create(ArgueStartParam *inst, void *external_param);
// Status // Status
@@ -420,7 +333,10 @@ static inline void PrintStatusDump(Status s)
/* Output by iterating. */ /* Output by iterating. */
for (register int i = 0; i < dump_len; i++) { for (register int i = 0; i < dump_len; i++) {
/* Print out indexer. */
(void)printf("\e[1m[%d/%d]\e[0m", (dump_len - i), dump_len);
/* Print dumped status. */
unsure(PrintStatus(dump[i]), !_.value, { unsure(PrintStatus(dump[i]), !_.value, {
(void)fprintf(stderr, "Unable to literalise.\n"); (void)fprintf(stderr, "Unable to literalise.\n");
}) })
@@ -443,18 +359,4 @@ static inline void PrintStatusDump(Status s)
} }
} }
// ========================================================
/* Add location parameter requirement in order to give proper information
* before throwing the report out. */
// # define throw(report) THROW(report, __HERE__)
/* Useless in C, only for human to see.
Probably rewrite this in Classify. */
# define throws(e)
// ReportTaskID THROW(Report report, Location loc);
// Report CATCH(ReportTaskID taskid, Status (*handler)());
int HANDLER(void *report);
#endif /* COMPOUND_STATUS_H */ #endif /* COMPOUND_STATUS_H */

View File

@@ -79,21 +79,6 @@ Status Status_Literalise(Status *inst, char *buff)
}); });
} }
Status Status_LiteraliseForReport(Status *inst, char *buff)
{
/* Skip unavailable instance and invalid parameter. */
nonull(inst, apply(UnavailableInstance));
nonull(buff, apply(UnavailableBuffer));
where(
snprintf(buff, LITERALISATION_LENGTH_MAXIMUM, REPORT_LITERALISE_FORMAT_DETAIL,
strnil(inst->identity), strnil(inst->prev->identity),
inst->value, inst->characteristic, inst->loc.file, inst->loc.line,
inst->loc.func), {
return apply(value(TraditionalFunctionReturn, _));
});
}
bool StatusUtils_HasPrev(Status stat) bool StatusUtils_HasPrev(Status stat)
{ {
return (stat.prev != NULL); return (stat.prev != NULL);
@@ -166,156 +151,6 @@ int StatusUtils_Depth(Status *stat)
// return cnt; // return cnt;
} }
Status Report_Create(Report *inst, Status *stat, FILE *dest, char *initiator,
int priority)
{
/* Skip unavailable parameters. */
nonull(inst, apply(UnavailableInstance));
nonull(stat, apply(error(InvalidParameter, "Given stat was null.")));
nonull(initiator, apply(error(InvalidParameter, "Given initiator was null.")));
state(priority < 0, apply(error(InvalidParameter, "Given priority was negative.")));
/* Copy and assign. */
inst->content = *stat;
inst->initiator = calloc(strlen(initiator), sizeof(char));
(void)strcpy(inst->initiator, initiator);
inst->time = time(NULL);
inst->level = priority;
inst->status = REPORT_SENDING_TASK_STATUS_PENDING;
inst->dst = (dest == NULL ? stdout : dest);
return apply(NormalStatus);
}
Status Report_CopyOf(Report *inst, Report *other)
{
nonull(inst, apply(UnavailableInstance));
nonull(other, apply(error(InvalidParameter, "Given report is unavailable.")));
// Status status;
// char *initiator;
// time_t time;
// ReportLevel priority;
// ReportTaskStatus taskprint_status;
// FILE *dest;
inst->content = other->content;
return apply(NormalStatus);
}
void Report_Delete(Report *inst)
{
svoid(inst);
free(inst->initiator);
inst->initiator = NULL;
inst->dst = NULL;
inst->level = 0;
inst->content = (Status){};
inst->status = REPORT_SENDING_TASK_STATUS_NOTFOUND;
inst->time = 0;
inst = NULL;
}
/*
Status status;
char *initiator;
time_t time;
ReportLevel priority;
ReportTaskStatus taskprint_status;
FILE *dest;
*/
Status Report_Literalise(Report *inst, char *buff)
{
nonull(inst, apply(UnavailableInstance));
nonull(buff, apply(UnavailableBuffer));
/* Report literalisation. */
char report_literalising[LITERALISATION_LENGTH_MAXIMUM] = EMPTY;
/** Status literalisation. **/
char status_literalising[LITERALISATION_LENGTH_MAXIMUM] = EMPTY;
/* Fault detection on status literalisation. */
// settle(Status_LiteraliseForReport(&inst->status, status_literalising),
// _.characteristic == STATUS_UNKNOWN, {
// nest(_, __, {
// /* Skip when ZERO byte were written. (failed to write) */
// state(!__.value, apply(
// error(value(TraditionalFunctionReturn, __.value),
// "ZERO byte were written.")
// ));
// })
// });
/* Traditional function returning handling. */
settle(Status_LiteraliseForReport(&inst->content, status_literalising),
!_.value, {
return apply(annot(RuntimeError, "Failed to literalise status for report."));
});
/* Write result to buffer. */
/* Write the report "header". */
/* Literalise current time and date. */
char datetime[LITERALISATION_LENGTH_MAXIMUM];
// settle(strftime(datetime, 64, "%c", localtime(&inst->time)), )
// DATETIME [LEVEL] STATUS.IDENTITY (INITIATOR): STATUS.DESCRIPTION
state(!snprintf(report_literalising, LITERALISATION_LENGTH_MAXIMUM,
REPORT_LITERALISE_FORMAT_HEADER, datetime, inst->level,
inst->content.identity, inst->initiator, inst->content.description),
apply(annot(NoBytesWereWritten, "Failed to literalise date and time."))
);
/* Write the report "detail". */
return apply(NormalStatus);
}
/*
thrd_t thread;
Report report;
time_t elapsed;
ReportResult result;
*/
Status ReportSender_Create(ReportSender *inst, Report *report)
{
nonull(inst, apply(UnavailableInstance));
nonull(report, error(UnavailableParameter, "Given report was unavailable."));
thrd_create(&inst->thread, &HANDLER, report);
notok(Report_CopyOf(&inst->report, report),
return apply(annot(InstanceCreatingFailure,
"Cannot copy to create new instance of report."));
);
inst->report = *report;
inst->elapsed = 0;
inst->result = REPORT_RESULT_PENDING;
return apply(NormalStatus);
}
Status ReportSender_Send(ReportSender *inst, ReportTask task)
{
// /* Skip when inst or task is unavailable. */
// nonull(inst,
// error(UnavailableInstance, "Report sender was given unavailable."));
// nonull(task, InvalidReportTask);
// /* Assign for dest. */
// const FILE *dest = (inst->report->dest == NULL ? stdout : inst->report->dest);
// // char buff[];
// // TODO(william): HERE, Report_Literalise
// /* Write/Send data. */
// inst->report->taskprint_status = REPORT_SENDING_TASK_STATUS_PROCEEDING;
// if (!fprintf(dest, buff)) {
// }
// /* Sent successfully! Mark down properties. */
return apply(NormalStatus);
}
// bool arguestarter_equal(ArgueStarter *inst1, ArgueStarter *inst2) // bool arguestarter_equal(ArgueStarter *inst1, ArgueStarter *inst2)
// { // {
// /* Skip when either inst1 or inst2 is unavailable. */ // /* Skip when either inst1 or inst2 is unavailable. */
@@ -324,65 +159,3 @@ Status ReportSender_Send(ReportSender *inst, ReportTask task)
// return (inst1->argue_start == inst2->argue_start) // return (inst1->argue_start == inst2->argue_start)
// || (inst1->external_param == inst2->external_param); // || (inst1->external_param == inst2->external_param);
// } // }
ReportTaskID THROW(Report report, Location loc)
{
// // /* Create new a instance of ReportSender. */
// // ReportSender sender;
// // ReportSender_Create(&sender, stderr);
// // /* Send message. */
// // /* Initialise sender's thread. */
// // thrd_t sending;
// // /* Skip on failing on creating thread. */
// // if (!thrd_create(&sending, starter, NULL)) {
// // /* Conclude the session of sender. */
// // report.status = REPORT_SENDING_TASK_STATUS_FINISHED,
// // report.result = (ARGUE_RESULT_FINALISED | ARGUE_RESULT_NEGATIVE);
// // sender.result = REPORT_SENDER_RESULT_FINISHED;
// // sender.successful = false;
// // return -1;
// // }
// // /* Perform sending. */
// // ReportSender_Send(&sender, NULL);
// /* Initialise sender. */
// ReportSender sender;
// /* Return with -1 when initialisation failed. */
// state(!(StatusUtils_IsOkay(ReportSender_Create(&sender, &report))), -1);
// /* Inject location information. Could be more elegant, though. */
// sender.report->status.loc = loc;
// /* Send. */ /* Return -1 when failed on sending. */
// state(!StatusUtils_IsOkay(ReportSender_Send(&sender, HANDLER)), -1);
return 0;
}
int HANDLER(void *report)
{
// /* Throw UnableToThrowError when param is unavailable. */
// if (report == NULL) {
// /* Create report on this. */
// Report e;
// Report_Create(
// &e,
// &error(UnableToThrowError, "Cannot perform throwing. Aborted."),
// stderr, nameof(DEFAULT_ARGUE_STARTER),
// REPORT_SENDING_PRIORITY_FATAL);
// /* Perform throwing. */
// (void)throw(e); // Throw the report alone.
// return 1;
// }
// (void)throw(*(Report *)report); // Lonely throw, no catch will company.
// return 0;
return 0;
}

213
Status/status_test.c Normal file
View File

@@ -0,0 +1,213 @@
#include <stdio.h>
#include <time.h>
#include <Compound/status.h>
int main(void) {
Status Example1Status = {.description = "Example1 Status",
.characteristic = STATUS_NORMAL,
.prev = &NormalStatus};
Status Example2Status = {.description = "Example2 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example1Status};
Status Example3Status = {.description = "Example3 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example2Status};
Status Example4Status = {.description = "Example4 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example3Status};
Status Example5Status = {.description = "Example5 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example4Status};
Status Example6Status = {.description = "Example6 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example5Status};
Status Example7Status = {.description = "Example7 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example6Status};
Status Example8Status = {.description = "Example8 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example7Status};
Status Example9Status = {.description = "Example9 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example8Status};
Status Example10Status = {.description = "Example10 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example9Status};
Status Example11Status = {.description = "Example11 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example10Status};
Status Example12Status = {.description = "Example12 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example11Status};
Status Example13Status = {.description = "Example13 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example12Status};
Status Example14Status = {.description = "Example14 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example13Status};
Status Example15Status = {.description = "Example15 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example14Status};
Status Example16Status = {.description = "Example16 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example15Status};
Status Example17Status = {.description = "Example17 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example16Status};
Status Example18Status = {.description = "Example18 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example17Status};
Status Example19Status = {.description = "Example19 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example18Status};
Status Example20Status = {.description = "Example20 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example19Status};
Status Example21Status = {.description = "Example21 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example20Status};
Status Example22Status = {.description = "Example22 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example21Status};
Status Example23Status = {.description = "Example23 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example22Status};
Status Example24Status = {.description = "Example24 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example23Status};
Status Example25Status = {.description = "Example25 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example24Status};
Status Example26Status = {.description = "Example26 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example25Status};
Status Example27Status = {.description = "Example27 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example26Status};
Status Example28Status = {.description = "Example28 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example27Status};
Status Example29Status = {.description = "Example29 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example28Status};
Status Example30Status = {.description = "Example30 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example29Status};
Status Example31Status = {.description = "Example31 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example30Status};
Status Example32Status = {.description = "Example32 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example31Status};
Status Example33Status = {.description = "Example33 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example32Status};
Status Example34Status = {.description = "Example34 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example33Status};
Status Example35Status = {.description = "Example35 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example34Status};
Status Example36Status = {.description = "Example36 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example35Status};
Status Example37Status = {.description = "Example37 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example36Status};
Status Example38Status = {.description = "Example38 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example37Status};
Status Example39Status = {.description = "Example39 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example38Status};
Status Example40Status = {.description = "Example40 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example39Status};
Status Example41Status = {.description = "Example41 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example40Status};
Status Example42Status = {.description = "Example42 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example41Status};
Status Example43Status = {.description = "Example43 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example42Status};
Status Example44Status = {.description = "Example44 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example43Status};
Status Example45Status = {.description = "Example45 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example44Status};
Status Example46Status = {.description = "Example46 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example45Status};
Status Example47Status = {.description = "Example47 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example46Status};
Status Example48Status = {.description = "Example48 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example47Status};
Status Example49Status = {.description = "Example49 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example48Status};
Status Example50Status = {.description = "Example50 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example49Status};
Status Example51Status = {.description = "Example51 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example50Status};
Status Example52Status = {.description = "Example52 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example51Status};
Status Example53Status = {.description = "Example53 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example52Status};
Status Example54Status = {.description = "Example54 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example53Status};
Status Example55Status = {.description = "Example55 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example54Status};
Status Example56Status = {.description = "Example56 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example55Status};
Status Example57Status = {.description = "Example57 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example56Status};
Status Example58Status = {.description = "Example58 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example57Status};
Status Example59Status = {.description = "Example59 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example58Status};
Status Example60Status = {.description = "Example60 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example59Status};
Status Example61Status = {.description = "Example61 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example60Status};
Status Example62Status = {.description = "Example62 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example61Status};
Status Example63Status = {.description = "Example63 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example62Status};
Status Example64Status = {.description = "Example64 Status",
.characteristic = STATUS_NORMAL,
.prev = &Example63Status};
Status statbuff[64] = {{0}};
status_dump(Example64Status, statbuff, 0);
Status *p = &Example64Status;
int cnt = 0;
while (p != NULL) {
(void)printf("%d:%d %s\n", cnt++, p->characteristic, p->description);
p = p->prev;
};
return 0;
}

View File

@@ -1,11 +1,9 @@
#ifndef COMPOUND_UTILS_H #ifndef COMPOUND_UTILS_H
# define COMPOUND_UTILS_H # define COMPOUND_UTILS_H
# include <time.h>
# include <string.h>
# include <stdlib.h>
# include <math.h> # include <math.h>
# include <stdint.h> # include <string.h>
# include <time.h>
# include <Compound/common.h> # include <Compound/common.h>
# include <Compound/const.h> # include <Compound/const.h>

BIN
Var/VarTest Executable file

Binary file not shown.

26
Var/test.c Normal file
View File

@@ -0,0 +1,26 @@
#include <Compound/var.h>
int main(void)
{
Var v1 = {
.addr = malloc(sizeof(int)),
.sz = sizeof(int)
};
Var v2 = (Var){v1.addr, v1.sz};
wchar_t wbuff[UINT8_MAX + 1] = {};
wchar_t *wp = wbuff;
(void)var_literalise(v1, &wp);
(void)wprintf(L"%ls\n", wp);
(void)var_literalise(v2, &wp);
(void)wprintf(L"%ls\n", wp);
free(v1.addr);
return 0;
}

View File

@@ -1,4 +1,3 @@
#include "Status/include/status.h"
#include <Compound/common.h> #include <Compound/common.h>
#include <Compound/status.h> #include <Compound/status.h>
#include <Compound/catlog.h> #include <Compound/catlog.h>

View File

@@ -182,10 +182,10 @@ typedef struct {
Coordination end; Coordination end;
} Selection; } Selection;
typedef struct { // typedef struct {
void *addr; // void *addr;
size_t sz; // size_t sz;
} MemoryInst; // } MemoryInst;
typedef Coordination ArrayIndexerRange; typedef Coordination ArrayIndexerRange;
typedef bool _Bit; typedef bool _Bit;
@@ -209,4 +209,8 @@ typedef bool _Bit;
# define __ATTRIBUTABLE__ # define __ATTRIBUTABLE__
# define attr(a) # define attr(a)
/* Useless in C, only for human to see.
Probably rewrite this in Classify. */
# define throws(e)
#endif /* COMPOUND_COMMON_H */ #endif /* COMPOUND_COMMON_H */

View File

@@ -7,11 +7,8 @@ typedef Var Type;
typedef struct { typedef struct {
attr(registered 1) Type type; attr(registered 1) Type type;
attr(nullity false) String identity;
attr(nullity false) String identity; attr(alignwith 1; optional true) Type value;
attr(alignwith 1)
attr(optional true) Type value;
} Parameter; } Parameter;
typedef void * Block; typedef void * Block;

43
install
View File

@@ -1,43 +0,0 @@
#!/bin/sh
if [ "`whoami`" != "root" ]; then
echo "The script require root privilege to execute properly."
exit 1
fi
# echo "Please ensure the current work directory is the home directory to the project Compound!
# Press enter key to continue..."
# read
SRC="$PWD"
DST=/usr/include/Compound
PROJ=("Array" "Paper" "Pen" "Render" "Status" "Var" "MemMan" "Stack" "Utils"\
"String" "Object")
PROJLEN=${#PROJ[*]}
echo "======== $PROJLEN projects in total ========"
idx=0
while :; do
if [[ $idx -eq $PROJLEN || $idx -gt $PROJLEN ]]; then
break;
fi
p="${PROJ[$idx]}"
cd "$p"
echo "`date` >>> Installing $p"
cp -v include/*.h "$DST"
cd "$SRC"
((idx++))
echo
done
cp -v "common.h" "const.h" "platform.h"\
"name.h" "namescope.h" "type.h" "catlog.h"\
"attr.h" "registry.h" "class.h" "function.h" "$DST"
echo "Installing libcompound:"
cp -v "libcompound.so" "/usr/lib"
printf "\nDone\n"

11
postinstall Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/sh
if [ "$(whoami)" != "root" ]; then
echo "The script require root privilege to execute properly. Current identity: $(whoami)"
exit 1
fi
# Install Compound library.
echo "Installing libcompound:"
cp -v "libcompound.so" "/usr/lib"

35
preinstall Executable file
View File

@@ -0,0 +1,35 @@
#!/bin/sh
if [ "$(whoami)" != "root" ]; then
echo "The script require root privilege to execute properly. Current identity: $(whoami)"
exit 1
fi
SRC="$PWD"
DST=/usr/include/Compound
set -- Array Paper Pen Render Status Var MemMan Stack Utils String Object
# Create directory.
if [ ! -d "$DST" ]; then
mkdir -pv "$DST"
fi
# Install project-like headers.
while :; do
p="$1"
if [ -z "$1" ]; then break; fi
cd "$p" || exit 1
echo "$(date) >>> Installing $p"
cp -v include/*.h "$DST"
cd "$SRC" || exit 1
shift 1
echo
done
# Install individual headers.
cp -v "common.h" "const.h" "platform.h"\
"name.h" "namescope.h" "type.h" "catlog.h"\
"attr.h" "registry.h" "class.h" "function.h" "report.h" "$DST"
printf "\nDone\n"

233
report.c Normal file
View File

@@ -0,0 +1,233 @@
#include <Compound/report.h>
Status Report_Create(Report *inst, Status *stat, FILE *dest, char *initiator,
int priority)
{
/* Skip unavailable parameters. */
nonull(inst, apply(UnavailableInstance));
nonull(stat, apply(error(InvalidParameter, "Given stat was null.")));
nonull(initiator, apply(error(InvalidParameter, "Given initiator was null.")));
state(priority < 0, apply(error(InvalidParameter, "Given priority was negative.")));
/* Copy and assign. */
inst->content = *stat;
inst->initiator = calloc(strlen(initiator), sizeof(char));
(void)strcpy(inst->initiator, initiator);
inst->time = time(NULL);
inst->level = priority;
inst->status = REPORT_SENDING_TASK_STATUS_PENDING;
inst->dst = (dest == NULL ? stdout : dest);
return apply(NormalStatus);
}
Status Report_CopyOf(Report *inst, Report *other)
{
nonull(inst, apply(UnavailableInstance));
nonull(other, apply(error(InvalidParameter, "Given report is unavailable.")));
// Status status;
// char *initiator;
// time_t time;
// ReportLevel priority;
// ReportTaskStatus taskprint_status;
// FILE *dest;
inst->content = other->content;
return apply(NormalStatus);
}
void Report_Delete(Report *inst)
{
svoid(inst);
free(inst->initiator);
inst->initiator = NULL;
inst->dst = NULL;
inst->level = 0;
inst->content = (Status){};
inst->status = REPORT_SENDING_TASK_STATUS_NOTFOUND;
inst->time = 0;
inst = NULL;
}
/*
Status status;
char *initiator;
time_t time;
ReportLevel priority;
ReportTaskStatus taskprint_status;
FILE *dest;
*/
Status Report_Literalise(Report *inst, char *buff)
{
// nonull(inst, apply(UnavailableInstance));
// nonull(buff, apply(UnavailableBuffer));
// /* Report literalisation. */
// char report_literalising[LITERALISATION_LENGTH_MAXIMUM] = EMPTY;
// /** Status literalisation. **/
// char status_literalising[LITERALISATION_LENGTH_MAXIMUM] = EMPTY;
// /* Fault detection on status literalisation. */
// // settle(Status_LiteraliseForReport(&inst->status, status_literalising),
// // _.characteristic == STATUS_UNKNOWN, {
// // nest(_, __, {
// // /* Skip when ZERO byte were written. (failed to write) */
// // state(!__.value, apply(
// // error(value(TraditionalFunctionReturn, __.value),
// // "ZERO byte were written.")
// // ));
// // })
// // });
// /* Traditional function returning handling. */
// // settle(Status_LiteraliseForReport(&inst->content, status_literalising),
// // !_.value, {
// // return apply(annot(RuntimeError, "Failed to literalise status for report."));
// // });
// where(
// snprintf(buff, LITERALISATION_LENGTH_MAXIMUM, REPORT_LITERALISE_FORMAT_DETAIL,
// strnil(inst->content.identity), strnil(inst->content.prev->identity),
// inst->content.value, inst->content.characteristic,
// inst->content.loc.file, inst->content.loc.line,
// inst->content.loc.func), {
// return apply(value(TraditionalFunctionReturn, _));
// });
// /* Write result to buffer. */
// /* Write the report "header". */
// /* Literalise current time and date. */
// char datetime[LITERALISATION_LENGTH_MAXIMUM];
// // settle(strftime(datetime, 64, "%c", localtime(&inst->time)), )
// // DATETIME [LEVEL] STATUS.IDENTITY (INITIATOR): STATUS.DESCRIPTION
// state(!snprintf(report_literalising, LITERALISATION_LENGTH_MAXIMUM,
// REPORT_LITERALISE_FORMAT_HEADER, datetime, inst->level,
// inst->content.identity, inst->initiator, inst->content.description),
// apply(annot(NoBytesWereWritten, "Failed to literalise date and time."))
// );
// /* Write the report "detail". */
return apply(NormalStatus);
}
/*
thrd_t thread;
Report report;
time_t elapsed;
ReportResult result;
*/
Status ReportSender_Create(ReportSender *inst, Report *report)
{
nonull(inst, apply(UnavailableInstance));
nonull(report, error(UnavailableParameter, "Given report was unavailable."));
thrd_create(&inst->thread, &HANDLER, report);
notok(Report_CopyOf(&inst->report, report),
return apply(annot(InstanceCreatingFailure,
"Cannot copy to create new instance of report."));
);
inst->report = *report;
inst->elapsed = 0;
inst->result = REPORT_RESULT_PENDING;
return apply(NormalStatus);
}
Status ReportSender_Send(ReportSender *inst, ReportTask task)
{
// /* Skip when inst or task is unavailable. */
// nonull(inst,
// error(UnavailableInstance, "Report sender was given unavailable."));
// nonull(task, InvalidReportTask);
// /* Assign for dest. */
// const FILE *dest = (inst->report->dest == NULL ? stdout : inst->report->dest);
// // char buff[];
// // TODO(william): HERE, Report_Literalise
// /* Write/Send data. */
// inst->report->taskprint_status = REPORT_SENDING_TASK_STATUS_PROCEEDING;
// if (!fprintf(dest, buff)) {
// }
// /* Sent successfully! Mark down properties. */
return apply(NormalStatus);
}
ReportTaskID THROW(Report report, Location loc)
{
// // /* Create new a instance of ReportSender. */
// // ReportSender sender;
// // ReportSender_Create(&sender, stderr);
// // /* Send message. */
// // /* Initialise sender's thread. */
// // thrd_t sending;
// // /* Skip on failing on creating thread. */
// // if (!thrd_create(&sending, starter, NULL)) {
// // /* Conclude the session of sender. */
// // report.status = REPORT_SENDING_TASK_STATUS_FINISHED,
// // report.result = (ARGUE_RESULT_FINALISED | ARGUE_RESULT_NEGATIVE);
// // sender.result = REPORT_SENDER_RESULT_FINISHED;
// // sender.successful = false;
// // return -1;
// // }
// // /* Perform sending. */
// // ReportSender_Send(&sender, NULL);
// /* Initialise sender. */
// ReportSender sender;
// /* Return with -1 when initialisation failed. */
// state(!(StatusUtils_IsOkay(ReportSender_Create(&sender, &report))), -1);
// /* Inject location information. Could be more elegant, though. */
// sender.report->status.loc = loc;
// /* Send. */ /* Return -1 when failed on sending. */
// state(!StatusUtils_IsOkay(ReportSender_Send(&sender, HANDLER)), -1);
return 0;
}
int HANDLER(void *report)
{
// /* Throw UnableToThrowError when param is unavailable. */
// if (report == NULL) {
// /* Create report on this. */
// Report e;
// Report_Create(
// &e,
// &error(UnableToThrowError, "Cannot perform throwing. Aborted."),
// stderr, nameof(DEFAULT_ARGUE_STARTER),
// REPORT_SENDING_PRIORITY_FATAL);
// /* Perform throwing. */
// (void)throw(e); // Throw the report alone.
// return 1;
// }
// (void)throw(*(Report *)report); // Lonely throw, no catch will company.
// return 0;
return 0;
}

100
report.h Normal file
View File

@@ -0,0 +1,100 @@
#ifndef COMPOUND_REPORT_H
# define COMPOUND_REPORT_H
# include <Compound/status.h>
typedef enum {
REPORT_SENDING_PRIORITY_ALL = 0, // Highest level; least value.
REPORT_SENDING_PRIORITY_FATAL,
REPORT_SENDING_PRIORITY_EXCEPTIONAL,
REPORT_SENDING_PRIORITY_CRITICAL,
REPORT_SENDING_PRIORITY_MAJOR,
REPORT_SENDING_PRIORITY_NORMAL,
REPORT_SENDING_PRIORITY_MINOR,
REPORT_SENDING_PRIORITY_DEBUG,
REPORT_SENDING_PRIORITY_NONE, // Lowest level, greatest value.
} ReportLevel;
typedef enum {
REPORT_SENDING_TASK_STATUS_FINISHED = 0,
REPORT_SENDING_TASK_STATUS_PENDING,
REPORT_SENDING_TASK_STATUS_PROCEEDING,
REPORT_SENDING_TASK_STATUS_PAUSED,
REPORT_SENDING_TASK_STATUS_NOTFOUND
} ReportStatus;
/* "Report" recollects essential informations, included but not limited to
Status and others for making an report for debugging and such. */
typedef struct {
Status content;
char *initiator;
time_t time;
ReportLevel level;
ReportStatus status;
FILE *dst; // The destination where the report is sending to.
} Report;
/*
DATETIME [PRIORITY] STATUSNAME (ORIGINATOR): STATUS.DESCRIPTION
at LOCATION.FILE:LOCATION.LINE, LOCATION.FUNC
at LOCATION.FILE:LOCATION.LINE, LOCATION.FUNC
at LOCATION.FILE:LOCATION.LINE, LOCATION.FUNC
at LOCATION.FILE:LOCATION.LINE, LOCATION.FUNC
Fri 10 May 03:02:37 CST 2024 [URGENT] InvalidParameter (Nullity): Given buffer was unavailable.
at /external/Documents/Projects/Compound/Status/src/status.c:104, Report_Literalise
at /external/Documents/Projects/Compound/Status/src/status.c:114, ReportSender_Send
at /external/Documents/Projects/Compound/Status/src/status.c:69, _throw
!!!!at /external/Documents/Projects/Compound/Array/src/array.c:16, array_create
at /external/Documents/Projects/Compound/test.c:24, main
*/
// DATETIME [LEVEL] STATUS.IDENTITY (INITIATOR): STATUS.DESCRIPTION
# define REPORT_LITERALISE_FORMAT_HEADER "%s [%d] %s (%s): %s\n\tat %s:%d, %s\n%s"
// STATUS.IDENTITY, STATUS.PREV.IDENTITY, STATUS.VALUE, STATUS.CHARACTERISTIC,
// FILE, LINE, FUNC
# define REPORT_LITERALISE_FORMAT_DETAIL "\t%s(%s, %d, %d) at %s:%d, %s\n"
typedef enum {
REPORT_RESULT_SUCCEEDED,
REPORT_RESULT_FAILED,
REPORT_RESULT_PROGRESSING,
REPORT_RESULT_PENDING,
} ReportResult;
typedef struct {
thrd_t thread;
Report report;
time_t elapsed;
ReportResult result;
} ReportSender;
typedef int (*ReportTask)(Report *);
typedef int ReportTaskID;
Status Report_Create(Report *inst, Status *stat, FILE *dest, char *initiator,
int priority);
Status Report_CopyOf(Report *inst, Report *other);
Status Report_Literalise(Report *inst, char *buff);
void Report_Delete(Report *inst);
bool Report_Equals(Report repo1, Report repo2);
// Status ReportSender_Create(ReportSender *inst, Report *report, thrd_start_t *handler);
Status ReportSender_Create(ReportSender *inst, Report *report);
Status ReportSender_Send(ReportSender *inst, ReportTask task);
// ReportTaskStatus
// ReportSender_GetStatus(ReportSender *inst);
/* Add location parameter requirement in order to give proper information
* before throwing the report out. */
// # define throw(report) THROW(report, __HERE__)
// ReportTaskID THROW(Report report, Location loc);
// Report CATCH(ReportTaskID taskid, Status (*handler)());
int HANDLER(void *report);
#endif /* COMPOUND_REPORT_H */

457
test.c Normal file
View File

@@ -0,0 +1,457 @@
#include <Compound/array.h>
#include <Compound/catlog.h>
#include <Compound/common.h>
#include <Compound/memman.h>
#include <Compound/status.h>
#include <Compound/var.h>
Status func(void)
{
return apply(
error(ErrorStatus, "This function does not accept any parameters!"));
}
__attribute__((constructor))
void __CONSTRUCT__() {
cat("Hello, Compound!\n");
}
__attribute__((destructor))
void __DESTRUCT__() {}
Status Main(void)
{
// Memory mem1;
// seek(Memory_Create(&mem1, INT64_MAX), {
// print_status(_);
// });
// seek(Memory_Allocate(&mem1), {
// print_status(_);
// });
// seek(Memory_Allocate(&mem1), {
// print_status(_);
// });
// seek(Memory_Release(&mem1), {
// print_status(_);
// });
// seek(Memory_Release(&mem1), {
// print_status(_);
// });
// seek(Memory_Delete(&mem1), {
// print_status(_);
// });
// PrintStatusDump(unknown(normal(MaximumLiteralisationLengthExceeded, ":O"), "OMGIDKWTD", 1));
// PrintStatusDump(apply(extend(MaximumLiteralisationLengthExceeded, normal(UnavailableBuffer, "OMGIDKWTD"))));
// PrintStatusDump(MaximumLiteralisationLengthExceeded);
DEFSTATUS(TestStatus0, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &MaximumLiteralisationLengthExceeded);
DEFSTATUS(TestStatus1, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus0);
DEFSTATUS(TestStatus2, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus1);
DEFSTATUS(TestStatus3, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus2);
DEFSTATUS(TestStatus4, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus3);
DEFSTATUS(TestStatus5, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus4);
DEFSTATUS(TestStatus6, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus5);
DEFSTATUS(TestStatus7, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus6);
DEFSTATUS(TestStatus8, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus7);
DEFSTATUS(TestStatus9, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus8);
DEFSTATUS(TestStatus10, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus9);
DEFSTATUS(TestStatus11, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus10);
DEFSTATUS(TestStatus12, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus11);
DEFSTATUS(TestStatus13, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus12);
DEFSTATUS(TestStatus14, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus13);
DEFSTATUS(TestStatus15, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus14);
DEFSTATUS(TestStatus16, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus15);
DEFSTATUS(TestStatus17, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus16);
DEFSTATUS(TestStatus18, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus17);
DEFSTATUS(TestStatus19, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus18);
DEFSTATUS(TestStatus20, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus19);
DEFSTATUS(TestStatus21, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus20);
DEFSTATUS(TestStatus22, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus21);
DEFSTATUS(TestStatus23, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus22);
DEFSTATUS(TestStatus24, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus23);
DEFSTATUS(TestStatus25, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus24);
DEFSTATUS(TestStatus26, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus25);
DEFSTATUS(TestStatus27, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus26);
DEFSTATUS(TestStatus28, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus27);
DEFSTATUS(TestStatus29, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus28);
DEFSTATUS(TestStatus30, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus29);
DEFSTATUS(TestStatus31, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus30);
DEFSTATUS(TestStatus32, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus31);
DEFSTATUS(TestStatus33, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus32);
DEFSTATUS(TestStatus34, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus33);
DEFSTATUS(TestStatus35, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus34);
DEFSTATUS(TestStatus36, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus35);
DEFSTATUS(TestStatus37, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus36);
DEFSTATUS(TestStatus38, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus37);
DEFSTATUS(TestStatus39, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus38);
DEFSTATUS(TestStatus40, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus39);
DEFSTATUS(TestStatus41, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus40);
DEFSTATUS(TestStatus42, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus41);
DEFSTATUS(TestStatus43, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus42);
DEFSTATUS(TestStatus44, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus43);
DEFSTATUS(TestStatus45, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus44);
DEFSTATUS(TestStatus46, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus45);
DEFSTATUS(TestStatus47, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus46);
DEFSTATUS(TestStatus48, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus47);
DEFSTATUS(TestStatus49, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus48);
DEFSTATUS(TestStatus50, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus49);
DEFSTATUS(TestStatus51, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus50);
DEFSTATUS(TestStatus52, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus51);
DEFSTATUS(TestStatus53, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus52);
DEFSTATUS(TestStatus54, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus53);
DEFSTATUS(TestStatus55, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus54);
DEFSTATUS(TestStatus56, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus55);
DEFSTATUS(TestStatus57, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus56);
DEFSTATUS(TestStatus58, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus57);
DEFSTATUS(TestStatus59, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus58);
DEFSTATUS(TestStatus60, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus59);
DEFSTATUS(TestStatus61, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus60);
DEFSTATUS(TestStatus62, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus61);
DEFSTATUS(TestStatus63, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus62);
DEFSTATUS(TestStatus64, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus63);
DEFSTATUS(TestStatus65, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus64);
DEFSTATUS(TestStatus66, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus65);
DEFSTATUS(TestStatus67, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus66);
DEFSTATUS(TestStatus68, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus67);
DEFSTATUS(TestStatus69, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus68);
DEFSTATUS(TestStatus70, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus69);
DEFSTATUS(TestStatus71, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus70);
DEFSTATUS(TestStatus72, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus71);
DEFSTATUS(TestStatus73, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus72);
DEFSTATUS(TestStatus74, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus73);
DEFSTATUS(TestStatus75, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus74);
DEFSTATUS(TestStatus76, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus75);
DEFSTATUS(TestStatus77, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus76);
DEFSTATUS(TestStatus78, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus77);
DEFSTATUS(TestStatus79, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus78);
DEFSTATUS(TestStatus80, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus79);
DEFSTATUS(TestStatus81, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus80);
DEFSTATUS(TestStatus82, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus81);
DEFSTATUS(TestStatus83, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus82);
DEFSTATUS(TestStatus84, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus83);
DEFSTATUS(TestStatus85, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus84);
DEFSTATUS(TestStatus86, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus85);
DEFSTATUS(TestStatus87, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus86);
DEFSTATUS(TestStatus88, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus87);
DEFSTATUS(TestStatus89, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus88);
DEFSTATUS(TestStatus90, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus89);
DEFSTATUS(TestStatus91, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus90);
DEFSTATUS(TestStatus92, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus91);
DEFSTATUS(TestStatus93, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus92);
DEFSTATUS(TestStatus94, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus93);
DEFSTATUS(TestStatus95, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus94);
DEFSTATUS(TestStatus96, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus95);
DEFSTATUS(TestStatus97, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus96);
DEFSTATUS(TestStatus98, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus97);
DEFSTATUS(TestStatus99, 1,
"This status is used for displaying multi-layer of status dumping.",
STATUS_NORMAL, &TestStatus98);
PrintStatusDump(apply(TestStatus99));
return apply(NormalStatus);
}
int main(void)
{
return Main().value;
}