/* * random stuff for atariST */ #include "EXTERN.h" #include "perl.h" #include #include 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); } int userinit() { install_null(); /* install device /dev/null or NUL: */ return 0; } /* * 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; } #ifdef HAS_SYSCALL #define __NO_INLINE__ #include /* 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