diff options
Diffstat (limited to 'atarist/atarist.c')
-rw-r--r-- | atarist/atarist.c | 282 |
1 files changed, 0 insertions, 282 deletions
diff --git a/atarist/atarist.c b/atarist/atarist.c deleted file mode 100644 index 2d69c9db62..0000000000 --- a/atarist/atarist.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - * random stuff for atariST - */ - -#include "EXTERN.h" -#include "perl.h" - -/* call back stuff, atari specific stuff below */ -/* Be sure to refetch the stack pointer after calling these routines. */ - -int -callback(subname, sp, gimme, hasargs, numargs) -char *subname; -int sp; /* stack pointer after args are pushed */ -int gimme; /* called in array or scalar context */ -int hasargs; /* whether to create a @_ array for routine */ -int numargs; /* how many args are pushed on the stack */ -{ - static ARG myarg[3]; /* fake syntax tree node */ - int arglast[3]; - - arglast[2] = sp; - sp -= numargs; - arglast[1] = sp--; - arglast[0] = sp; - - if (!myarg[0].arg_ptr.arg_str) - myarg[0].arg_ptr.arg_str = str_make("",0); - - myarg[1].arg_type = A_WORD; - myarg[1].arg_ptr.arg_stab = stabent(subname, FALSE); - - myarg[2].arg_type = hasargs ? A_EXPR : A_NULL; - - return do_subr(myarg, gimme, arglast); -} - -int -callv(subname, sp, gimme, argv) -char *subname; -register int sp; /* current stack pointer */ -int gimme; /* called in array or scalar context */ -register char **argv; /* null terminated arg list, NULL for no arglist */ -{ - register int items = 0; - int hasargs = (argv != 0); - - astore(stack, ++sp, Nullstr); /* reserve spot for 1st return arg */ - if (hasargs) { - while (*argv) { - astore(stack, ++sp, str_2mortal(str_make(*argv,0))); - items++; - argv++; - } - } - return callback(subname, sp, gimme, hasargs, items); -} - -#include <process.h> -#include <stdio.h> - -long _stksize = 64*1024L; -unsigned long __DEFAULT_BUFSIZ__ = 4 * 1024L; - -/* - * The following code is based on the do_exec and do_aexec functions - * in file doio.c - */ -int -do_aspawn(really,arglast) -STR *really; -int *arglast; -{ - register STR **st = stack->ary_array; - register int sp = arglast[1]; - register int items = arglast[2] - sp; - register char **a; - char **argv; - char *tmps; - int status; - - if (items) { - New(1101,argv, items+1, char*); - a = argv; - for (st += ++sp; items > 0; items--,st++) { - if (*st) - *a++ = str_get(*st); - else - *a++ = ""; - } - *a = Nullch; - if (really && *(tmps = str_get(really))) - status = spawnvp(-P_WAIT,tmps,argv); /* -P_WAIT is a hack, see spawnvp.c in the lib */ - else - status = spawnvp(-P_WAIT,argv[0],argv); - Safefree(argv); - } - return status; -} - - -int -do_spawn(cmd) -char *cmd; -{ - return system(cmd); -} - -#if 0 /* patchlevel 79 onwards we can */ -/* - * we unfortunately cannot use the super efficient fread/write from the lib - */ -size_t fread(void *data, size_t size, size_t count, FILE *fp) -{ - size_t i, j; - unsigned char *buf = (unsigned char *)data; - int c; - - for(i = 0; i < count; i++) - { - for(j = 0; j < size; j++) - { - if((c = getc(fp)) == EOF) - return 0; - *buf++ = c; - } - } - return i; -} - -size_t fwrite(const void *data, size_t size, size_t count, FILE *fp) -{ - size_t i, j; - const unsigned char *buf = (const unsigned char *)data; - - for(i = 0; i < count; i++) - { - for(j = 0; j < size; j++) - { - if(fputc(*buf++, fp) == EOF) - return 0; - } - } - return i; -} -#endif - -#ifdef HAS_SYSCALL -#define __NO_INLINE__ -#include <osbind.h> /* must include this for proper protos */ - -/* these must match osbind.pl */ -#define TRAP_1_W 1 -#define TRAP_1_WW 2 -#define TRAP_1_WL 3 -#define TRAP_1_WLW 4 -#define TRAP_1_WWW 5 -#define TRAP_1_WLL 6 -#define TRAP_1_WWLL 7 -#define TRAP_1_WLWW 8 -#define TRAP_1_WWLLL 9 -#define TRAP_13_W 10 -#define TRAP_13_WW 11 -#define TRAP_13_WL 12 -#define TRAP_13_WWW 13 -#define TRAP_13_WWL 14 -#define TRAP_13_WWLWWW 15 -#define TRAP_14_W 16 -#define TRAP_14_WW 17 -#define TRAP_14_WL 18 -#define TRAP_14_WWW 19 -#define TRAP_14_WWL 20 -#define TRAP_14_WWLL 21 -#define TRAP_14_WLLW 22 -#define TRAP_14_WLLL 23 -#define TRAP_14_WWWL 24 -#define TRAP_14_WWWWL 25 -#define TRAP_14_WLLWW 26 -#define TRAP_14_WWWWWWW 27 -#define TRAP_14_WLLWWWWW 28 -#define TRAP_14_WLLWWWWLW 29 -#define TRAP_14_WLLWWWWWLW 30 - -int syscall(trap, fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 ) -unsigned long trap, fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12; -{ - /* for now */ - switch(trap) - { - case TRAP_1_W: - return trap_1_w(fn); - - case TRAP_1_WW: - return trap_1_ww(fn, a1); - - case TRAP_1_WL: - return trap_1_wl(fn, a1); - - case TRAP_1_WLW: - return trap_1_wlw(fn, a1, a2); - - case TRAP_1_WWW: - return trap_1_www(fn, a1, a2); - - case TRAP_1_WLL: - return trap_1_wll(fn, a1, a2); - - case TRAP_1_WWLL: - return trap_1_wwll(fn, a1, a2, a3); - - case TRAP_1_WLWW: - return trap_1_wlww(fn, a1, a2, a3); - - case TRAP_1_WWLLL: - return trap_1_wwlll(fn, a1, a2, a3, a4); - - case TRAP_13_W: - return trap_13_w(fn); - - case TRAP_13_WW: - return trap_13_ww(fn, a1); - - case TRAP_13_WL: - return trap_13_wl(fn, a1); - - case TRAP_13_WWW: - return trap_13_www(fn, a1, a2); - - case TRAP_13_WWL: - return trap_13_wwl(fn, a1, a2); - - case TRAP_13_WWLWWW: - return trap_13_wwlwww(fn, a1, a2, a3, a4, a5); - - case TRAP_14_W: - return trap_14_w(fn); - - case TRAP_14_WW: - return trap_14_ww(fn, a1); - - case TRAP_14_WL: - return trap_14_wl(fn, a1); - - case TRAP_14_WWW: - return trap_14_www(fn, a1, a2); - - case TRAP_14_WWL: - return trap_14_wwl(fn, a1, a2); - - case TRAP_14_WWLL: - return trap_14_wwll(fn, a1, a2, a3); - - case TRAP_14_WLLW: - return trap_14_wllw(fn, a1, a2, a3); - - case TRAP_14_WLLL: - return trap_14_wlll(fn, a1, a2, a3); - - case TRAP_14_WWWL: - return trap_14_wwwl(fn, a1, a2, a3); - - case TRAP_14_WWWWL: - return trap_14_wwwwl(fn, a1, a2, a3, a4); - - case TRAP_14_WLLWW: - return trap_14_wllww(fn, a1, a2, a3, a4); - - case TRAP_14_WWWWWWW: - return trap_14_wwwwwww(fn, a1, a2, a3, a4, a5, a6); - - case TRAP_14_WLLWWWWW: - return trap_14_wllwwwww(fn, a1, a2, a3, a4, a5, a6, a7); - - case TRAP_14_WLLWWWWLW: - return trap_14_wllwwwwlw(fn, a1, a2, a3, a4, a5, a6, a7, a8); - - case TRAP_14_WLLWWWWWLW: - return trap_14_wllwwwwwlw(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9); - } -} -#endif - |