2004-11-08 23:27:00 +00:00
|
|
|
#include "QF/progs.h"
|
|
|
|
|
|
|
|
int
|
|
|
|
call_progs_main (progs_t *pr, int argc, const char **argv)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
dfunction_t *dfunc;
|
2022-01-18 06:32:43 +00:00
|
|
|
pr_func_t progs_main = 0;
|
2004-11-08 23:27:00 +00:00
|
|
|
string_t *pr_argv;
|
|
|
|
|
|
|
|
if ((dfunc = PR_FindFunction (pr, "main"))) {
|
|
|
|
progs_main = dfunc - pr->pr_functions;
|
|
|
|
} else {
|
|
|
|
PR_Undefined (pr, "function", "main");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
PR_PushFrame (pr);
|
|
|
|
pr_argv = PR_Zone_Malloc (pr, (argc + 1) * 4);
|
|
|
|
for (i = 0; i < argc; i++)
|
|
|
|
pr_argv[i] = PR_SetTempString (pr, argv[1 + i]);
|
|
|
|
pr_argv[i] = 0;
|
2005-06-12 09:54:01 +00:00
|
|
|
PR_RESET_PARAMS (pr);
|
2004-11-08 23:27:00 +00:00
|
|
|
P_INT (pr, 0) = argc;
|
|
|
|
P_POINTER (pr, 1) = PR_SetPointer (pr, pr_argv);
|
2020-02-25 08:28:32 +00:00
|
|
|
pr->pr_argc = 2;
|
2004-11-08 23:27:00 +00:00
|
|
|
PR_ExecuteProgram (pr, progs_main);
|
|
|
|
PR_PopFrame (pr);
|
|
|
|
PR_Zone_Free (pr, pr_argv);
|
|
|
|
return R_INT (pr);
|
|
|
|
}
|