100 lines
3.3 KiB
Plaintext
100 lines
3.3 KiB
Plaintext
/*
|
|
* External Communications Program
|
|
*/
|
|
|
|
#include <ARES/a>
|
|
#define CLIENT_VERSION "0.0.1"
|
|
#define CLIENT_VERSION_TAGS "alpha 1"
|
|
|
|
#define C_UNHEARING 20538
|
|
#define LN_UNHEARING 4
|
|
|
|
#define UH_CLEAR 0
|
|
#define UH_GARBLE 1
|
|
#define UH_DEAF 2
|
|
|
|
integer hearing_state = 1;
|
|
integer language_state = 1;
|
|
|
|
integer unhearing_state = UH_CLEAR;
|
|
|
|
main(integer src, integer n, string m, key outs, key ins, key user) {
|
|
if (n == SIGNAL_INVOKE) {
|
|
list argv = split(m, " ");
|
|
integer argc = count(argv);
|
|
string cmd = gets(argv, 1);
|
|
string output_msg = "";
|
|
if (argc == 1 || cmd == "help") {
|
|
output_msg = "Syntax: " + PROGRAM_NAME + " <action>";
|
|
} else if (cmd == "dictionary") {
|
|
linked(LN_UNHEARING, C_UNHEARING, "dictionary", user);
|
|
} else if (cmd == "refresh") {
|
|
@refresh_start;
|
|
output_msg = "Refreshing externals...";
|
|
if (unhearing_state == UH_CLEAR) {
|
|
linked(LN_UNHEARING, C_UNHEARING, "on:ARES", user);
|
|
} else if (unhearing_state == UH_GARBLE) {
|
|
linked(LN_UNHEARING, C_UNHEARING, "garble:ARES", user);
|
|
} else if (unhearing_state == UH_DEAF) {
|
|
linked(LN_UNHEARING, C_UNHEARING, "off:ARES", user);
|
|
} else {
|
|
// Something went wrong, reset.
|
|
unhearing_state = UH_CLEAR;
|
|
jump refresh_start;
|
|
}
|
|
} else {
|
|
output_msg = "Unknown command \"" + cmd + "\".";
|
|
}
|
|
|
|
if(output_msg != "")
|
|
print(outs, user, output_msg);
|
|
} else if (n == SIGNAL_NOTIFY) {
|
|
list argv = delitem(splitnulls(m, " "), 0);
|
|
integer ci = count(argv);
|
|
while (ci > 0) {
|
|
ci -= 2;
|
|
string cmd = gets(argv, ci);
|
|
string status = gets(argv, ci + 1);
|
|
if (cmd == "hearing") {
|
|
hearing_state = (status == "y");
|
|
} else if (cmd == "language") {
|
|
language_state = (status == "y");
|
|
}
|
|
}
|
|
#ifdef DEBUG
|
|
echo("[" + PROGRAM_NAME + "] received notify from " + (string)src + ", user " + (string)user + ": [" + concat(argv, ", ") + "]");
|
|
#endif
|
|
|
|
if (hearing_state) {
|
|
if (language_state) {
|
|
if (unhearing_state != UH_CLEAR) {
|
|
linked(LN_UNHEARING, C_UNHEARING, "on:ARES", user);
|
|
unhearing_state = UH_CLEAR;
|
|
}
|
|
} else {
|
|
if (unhearing_state != UH_GARBLE) {
|
|
linked(LN_UNHEARING, C_UNHEARING, "garble:ARES", user);
|
|
unhearing_state = UH_GARBLE;
|
|
}
|
|
}
|
|
} else {
|
|
if (unhearing_state != UH_DEAF) {
|
|
linked(LN_UNHEARING, C_UNHEARING, "off:ARES", user);
|
|
unhearing_state = UH_DEAF;
|
|
}
|
|
}
|
|
} else if (n == SIGNAL_INIT) {
|
|
#ifdef DEBUG
|
|
echo("[" + PROGRAM_NAME + "] init event");
|
|
#endif
|
|
hearing_state = 1;
|
|
language_state = 1;
|
|
} else if (n == SIGNAL_UNKNOWN_SCRIPT) {
|
|
echo("[" + PROGRAM_NAME + "] failed to run '" + m + "' (kernel could not find the program specified)");
|
|
} else {
|
|
echo("[" + PROGRAM_NAME + "] unimplemented signal " + (string)n + ": " + m);
|
|
}
|
|
}
|
|
|
|
#include <ARES/program>
|