⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atarist.c

📁 早期freebsd实现
💻 C
字号:
/* * 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. */intcallback(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);}intcallv(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 */intdo_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;}intdo_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	30int 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -