Holy fucking shit I don't want to work on this. Sibly, you son of a ...
This commit is contained in:
@@ -0,0 +1,260 @@
|
||||
|
||||
#include "std.h"
|
||||
#include "bbsys.h"
|
||||
#include "bbruntime.h"
|
||||
|
||||
void bbEnd() {
|
||||
ThrowRuntimeException(0);
|
||||
}
|
||||
void bbStop() {
|
||||
gx_runtime->debugStop();
|
||||
if (!gx_runtime->idle()) ThrowRuntimeException(0);
|
||||
}
|
||||
|
||||
void bbAppTitle(BBStr *ti, BBStr *cp) {
|
||||
gx_runtime->setTitle(*ti, *cp);
|
||||
delete ti; delete cp;
|
||||
}
|
||||
|
||||
void bbRuntimeError(BBStr *str) {
|
||||
string t = *str; delete str;
|
||||
if (t.size() > 255) t[255] = 0;
|
||||
static char err[256];
|
||||
strcpy(err, t.c_str());
|
||||
ThrowRuntimeException(err);
|
||||
}
|
||||
|
||||
int bbExecFile(BBStr *f) {
|
||||
string t = *f; delete f;
|
||||
int n = gx_runtime->execute(t);
|
||||
if (!gx_runtime->idle()) ThrowRuntimeException(0);
|
||||
return n;
|
||||
}
|
||||
|
||||
void bbDelay(int ms) {
|
||||
if (!gx_runtime->delay(ms)) ThrowRuntimeException(0);
|
||||
}
|
||||
|
||||
int bbMilliSecs() {
|
||||
return gx_runtime->getMilliSecs();
|
||||
}
|
||||
|
||||
BBStr * bbCommandLine() {
|
||||
return d_new BBStr(gx_runtime->commandLine());
|
||||
}
|
||||
|
||||
BBStr * bbSystemProperty(BBStr *p) {
|
||||
string t = gx_runtime->systemProperty(*p);
|
||||
delete p; return d_new BBStr(t);
|
||||
}
|
||||
|
||||
BBStr * bbGetEnv(BBStr *env_var) {
|
||||
char *p = getenv(env_var->c_str());
|
||||
BBStr *val = d_new BBStr(p ? p : "");
|
||||
delete env_var;
|
||||
return val;
|
||||
}
|
||||
|
||||
void bbSetEnv(BBStr *env_var, BBStr *val) {
|
||||
string t = *env_var + "=" + *val;
|
||||
_putenv(t.c_str());
|
||||
delete env_var;
|
||||
delete val;
|
||||
}
|
||||
|
||||
gxTimer * bbCreateTimer(int hertz) {
|
||||
gxTimer *t = gx_runtime->createTimer(hertz);
|
||||
return t;
|
||||
}
|
||||
|
||||
int bbWaitTimer(gxTimer *t) {
|
||||
int n = t->wait();
|
||||
if (!gx_runtime->idle()) ThrowRuntimeException(0);
|
||||
return n;
|
||||
}
|
||||
|
||||
void bbFreeTimer(gxTimer *t) {
|
||||
gx_runtime->freeTimer(t);
|
||||
}
|
||||
|
||||
void bbDebugLog(BBStr *t) {
|
||||
gx_runtime->debugLog(t->c_str());
|
||||
delete t;
|
||||
}
|
||||
|
||||
void _bbDebugStmt(int pos, const char *file) {
|
||||
gx_runtime->debugStmt(pos, file);
|
||||
if (!gx_runtime->idle()) ThrowRuntimeException(0);
|
||||
}
|
||||
|
||||
void _bbDebugEnter(void *frame, void *env, const char *func) {
|
||||
gx_runtime->debugEnter(frame, env, func);
|
||||
}
|
||||
|
||||
void _bbDebugLeave() {
|
||||
gx_runtime->debugLeave();
|
||||
}
|
||||
|
||||
bool basic_create();
|
||||
bool basic_destroy();
|
||||
void basic_link(void(*rtSym)(const char *sym, void *pc));
|
||||
bool math_create();
|
||||
bool math_destroy();
|
||||
void math_link(void(*rtSym)(const char *sym, void *pc));
|
||||
bool string_create();
|
||||
bool string_destroy();
|
||||
void string_link(void(*rtSym)(const char *sym, void *pc));
|
||||
bool stream_create();
|
||||
bool stream_destroy();
|
||||
void stream_link(void(*rtSym)(const char *sym, void *pc));
|
||||
bool sockets_create();
|
||||
bool sockets_destroy();
|
||||
void sockets_link(void(*rtSym)(const char *sym, void *pc));
|
||||
bool filesystem_create();
|
||||
bool filesystem_destroy();
|
||||
void filesystem_link(void(*rtSym)(const char *sym, void *pc));
|
||||
bool bank_create();
|
||||
bool bank_destroy();
|
||||
void bank_link(void(*rtSym)(const char *sym, void *pc));
|
||||
bool graphics_create();
|
||||
bool graphics_destroy();
|
||||
void graphics_link(void(*rtSym)(const char *sym, void *pc));
|
||||
bool input_create();
|
||||
bool input_destroy();
|
||||
void input_link(void(*rtSym)(const char *sym, void *pc));
|
||||
bool audio_create();
|
||||
bool audio_destroy();
|
||||
void audio_link(void(*rtSym)(const char *sym, void *pc));
|
||||
//bool multiplay_create();
|
||||
//bool multiplay_destroy();
|
||||
//void multiplay_link( void (*rtSym)( const char *sym,void *pc ) );
|
||||
bool userlibs_create();
|
||||
void userlibs_destroy();
|
||||
void userlibs_link(void(*rtSym)(const char *sym, void *pc));
|
||||
bool blitz3d_create();
|
||||
bool blitz3d_destroy();
|
||||
void blitz3d_link(void(*rtSym)(const char *sym, void *pc));
|
||||
|
||||
void bbruntime_link(void(*rtSym)(const char *sym, void *pc)) {
|
||||
|
||||
rtSym("End", bbEnd);
|
||||
rtSym("Stop", bbStop);
|
||||
rtSym("AppTitle$title$close_prompt=\"\"", bbAppTitle);
|
||||
rtSym("RuntimeError$message", bbRuntimeError);
|
||||
rtSym("ExecFile$command", bbExecFile);
|
||||
rtSym("Delay%millisecs", bbDelay);
|
||||
rtSym("%MilliSecs", bbMilliSecs);
|
||||
rtSym("$CommandLine", bbCommandLine);
|
||||
rtSym("$SystemProperty$property", bbSystemProperty);
|
||||
rtSym("$GetEnv$env_var", bbGetEnv);
|
||||
rtSym("SetEnv$env_var$value", bbSetEnv);
|
||||
|
||||
rtSym("%CreateTimer%hertz", bbCreateTimer);
|
||||
rtSym("%WaitTimer%timer", bbWaitTimer);
|
||||
rtSym("FreeTimer%timer", bbFreeTimer);
|
||||
rtSym("DebugLog$text", bbDebugLog);
|
||||
|
||||
rtSym("_bbDebugStmt", _bbDebugStmt);
|
||||
rtSym("_bbDebugEnter", _bbDebugEnter);
|
||||
rtSym("_bbDebugLeave", _bbDebugLeave);
|
||||
|
||||
basic_link(rtSym);
|
||||
math_link(rtSym);
|
||||
string_link(rtSym);
|
||||
stream_link(rtSym);
|
||||
sockets_link(rtSym);
|
||||
filesystem_link(rtSym);
|
||||
bank_link(rtSym);
|
||||
graphics_link(rtSym);
|
||||
input_link(rtSym);
|
||||
audio_link(rtSym);
|
||||
//multiplay_link( rtSym );
|
||||
blitz3d_link(rtSym);
|
||||
userlibs_link(rtSym);
|
||||
}
|
||||
|
||||
//start up error
|
||||
static void sue(const char *t) {
|
||||
string p = string("Startup Error: ") + t;
|
||||
gx_runtime->debugInfo(p.c_str());
|
||||
}
|
||||
|
||||
bool bbruntime_create() {
|
||||
if (basic_create()) {
|
||||
if (math_create()) {
|
||||
if (string_create()) {
|
||||
if (stream_create()) {
|
||||
if (sockets_create()) {
|
||||
if (filesystem_create()) {
|
||||
if (bank_create()) {
|
||||
if (graphics_create()) {
|
||||
if (input_create()) {
|
||||
if (audio_create()) {
|
||||
//if( multiplay_create() ){
|
||||
if (blitz3d_create()) {
|
||||
if (userlibs_create()) {
|
||||
return true;
|
||||
}
|
||||
} else sue("blitz3d_create failed");
|
||||
// multiplay_destroy();
|
||||
//}else sue( "multiplay_create failed" );
|
||||
audio_destroy();
|
||||
} else sue("audio_create failed");
|
||||
input_destroy();
|
||||
} else sue("input_create failed");
|
||||
graphics_destroy();
|
||||
} else sue("graphics_create failed");
|
||||
bank_destroy();
|
||||
} else sue("bank_create failed");
|
||||
filesystem_destroy();
|
||||
} else sue("filesystem_create failed");
|
||||
sockets_destroy();
|
||||
} else sue("sockets_create failed");
|
||||
stream_destroy();
|
||||
} else sue("stream_create failed");
|
||||
string_destroy();
|
||||
} else sue("string_create failed");
|
||||
math_destroy();
|
||||
} else sue("math_create failed");
|
||||
basic_destroy();
|
||||
} else sue("basic_create failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool bbruntime_destroy() {
|
||||
userlibs_destroy();
|
||||
blitz3d_destroy();
|
||||
//multiplay_destroy();
|
||||
audio_destroy();
|
||||
input_destroy();
|
||||
graphics_destroy();
|
||||
bank_destroy();
|
||||
filesystem_destroy();
|
||||
sockets_destroy();
|
||||
stream_destroy();
|
||||
string_destroy();
|
||||
math_destroy();
|
||||
basic_destroy();
|
||||
return true;
|
||||
}
|
||||
|
||||
const char *bbruntime_run(gxRuntime *rt, void(*pc)(), bool dbg) {
|
||||
debug = dbg;
|
||||
gx_runtime = rt;
|
||||
|
||||
if (!bbruntime_create()) return "Unable to start program";
|
||||
const char *t = 0;
|
||||
try {
|
||||
if (!gx_runtime->idle()) ThrowRuntimeException(0);
|
||||
pc();
|
||||
gx_runtime->debugInfo("Program has ended");
|
||||
} catch (bbEx x) {
|
||||
t = x.err;
|
||||
}
|
||||
bbruntime_destroy();
|
||||
return t;
|
||||
}
|
||||
|
||||
void bbruntime_panic(const char *err) {
|
||||
ThrowRuntimeException(err);
|
||||
}
|
||||
Reference in New Issue
Block a user