ares-scripties/applications/extcom.lsl

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>