=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/miscf.c,v retrieving revision 1.24 retrieving revision 1.34 diff -u -p -r1.24 -r1.34 --- OpenXM_contrib2/asir2000/builtin/miscf.c 2004/10/27 08:21:47 1.24 +++ OpenXM_contrib2/asir2000/builtin/miscf.c 2015/08/06 10:01:52 1.34 @@ -45,20 +45,26 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/miscf.c,v 1.23 2004/03/11 09:53:34 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/miscf.c,v 1.33 2015/03/16 00:08:32 noro Exp $ */ #include "ca.h" #include "parse.h" -#if !defined(VISUAL) && defined(DO_PLOT) +#include +#if !defined(VISUAL) && !defined(__MINGW32__) && !defined(__MINGW64__) && defined(DO_PLOT) #include #include #endif -#if defined(VISUAL) +#if defined(VISUAL) || defined(__MINGW32__) || defined(__MINGW64__) +#include #include #include +#else +#include +#include #endif +void Pgetcwd(), Pchdir(); void Pset_secure_mode(); void Pset_secure_flag(); void Pquit(), Pdebug(), Pnmono(), Pnez(), Popt(), Pshell(), Pheap(); @@ -77,8 +83,11 @@ void Pmodule_definedp(); void Ptest(); void delete_history(int,int); +void grab_pointer(); struct ftab misc_tab[] = { + {"pwd",Pgetcwd,0}, + {"chdir",Pchdir,1}, {"set_secure_mode",Pset_secure_mode,-1}, {"set_secure_flag",Pset_secure_flag,-2}, {"module_list",Pmodule_list,0}, @@ -109,7 +118,7 @@ struct ftab misc_tab[] = { {"hex_dump",Phex_dump,2}, {"peek",Ppeek,1}, {"poke",Ppoke,2}, -#if !defined(VISUAL) && defined(DO_PLOT) +#if !defined(VISUAL) && !defined(__MINGW32__) && !defined(__MINGW64__) && defined(DO_PLOT) {"xpause",Pxpause,0}, #endif #if 0 @@ -118,6 +127,32 @@ struct ftab misc_tab[] = { {0,0,0}, }; +void Pgetcwd(STRING *rp) +{ + char *r; +#if defined(VISUAL) || defined(__MINGW32__) || defined(__MINGW64__) + char buf[_MAX_PATH]; + _getcwd(buf, _MAX_PATH); +#else + char buf[MAXPATHLEN]; + getcwd(buf, MAXPATHLEN); +#endif + r = (char *)MALLOC_ATOMIC(strlen(buf)+1); + strcpy(r,buf); + MKSTR(*rp,r); +} + +void Pchdir(NODE arg, Q *rp) +{ + char *dir = BDY((STRING)ARG0(arg)); +#if defined(VISUAL) || defined(__MINGW32__) || defined(__MINGW64__) + int status = _chdir(dir); +#else + int status = chdir(dir); +#endif + STOQ(status,*rp); +} + void Pset_secure_mode(NODE arg,Q *rp) { int s; @@ -129,7 +164,9 @@ void Pset_secure_mode(NODE arg,Q *rp) void Pset_secure_flag(NODE arg,Q *rp) { - int ac,s; + int ac,s,status; + Obj f; + char *fname; ac = argc(arg); if ( !ac ) @@ -138,7 +175,20 @@ void Pset_secure_flag(NODE arg,Q *rp) s = QTOS((Q)ARG1(arg)); else s = 1; - setsecureflag(BDY((STRING)ARG0(arg)),s); + f = ARG0(arg); + if ( !f ) + error("set_secure_flag : invalid argument"); + switch ( OID(f) ) { + case O_STR: + fname = BDY((STRING)f); break; + case O_P: + fname = NAME(VR((P)f)); break; + default: + error("set_secure_flag : invalid argument"); break; + } + status = setsecureflag(fname,s); + if ( status < 0 ) + error("set_secure_flag : function not found"); STOQ(s,*rp); } @@ -159,7 +209,7 @@ Q *rp; int ms; ms = QTOS((Q)ARG0(arg)); -#if defined(VISUAL) +#if defined(VISUAL) || defined(__MINGW32__) || defined(__MINGW64__) Sleep(ms); #else usleep(ms*1000); @@ -227,7 +277,7 @@ NODE arg; STRING *rp; { char *e,*f; - int len; + size_t len; e = (char *)getenv(BDY((STRING)ARG0(arg))); if ( e ) { @@ -249,12 +299,11 @@ Q *rp; void Pquit(rp) pointer *rp; { - if ( !NEXT(asir_infile) ) - asir_terminate(2); + if ( asir_infile && NEXT(asir_infile) && asir_infile->ready_for_longjmp ) + LONGJMP(asir_infile->jmpbuf,1); else { closecurrentinput(); - if ( !asir_infile->fp && strcmp(asir_infile->name,"string") ) - asir_terminate(2); + asir_terminate(2); } *rp = 0; } @@ -307,7 +356,9 @@ void Pheap(arg,rp) NODE arg; Q *rp; { - int h0,h; + size_t h0,h; + unsigned int u,l; + N n; void GC_expand_hp(int); h0 = get_heapsize(); @@ -317,7 +368,16 @@ Q *rp; GC_expand_hp(h-h0); } h = get_heapsize(); - STOQ(h,*rp); + if(sizeof(size_t)>sizeof(int)) { + u = h>>(sizeof(int)*CHAR_BIT); l = h&(~0); + if ( !u ) UTOQ(l,*rp); + else { + n = NALLOC(2); PL(n)=2; BD(n)[0] = l; BD(n)[1] = u; + NTOQ(n,1,*rp); + } + }else { + UTOQ(h,*rp); + } } unsigned int get_asir_version(); @@ -388,7 +448,7 @@ Q *rp; s = ""; else s = BDY((STRING)ARG0(arg)); - toplevel(s); + goto_toplevel(s); *rp = 0; } @@ -405,7 +465,7 @@ Q *rp; code = QTOS((Q)ARG0(arg)); reason = BDY((STRING)ARG1(arg)); action = BDY((STRING)ARG2(arg)); -#if defined(VISUAL) +#if defined(VISUAL) || defined(__MINGW32__) || defined(__MINGW64__) set_error(code,reason,action); #endif error(""); @@ -514,7 +574,7 @@ Q *rp; STOQ(ret,*rp); } -#if !defined(VISUAL) && defined(DO_PLOT) +#if !defined(VISUAL) && !defined(__MINGW32__) && !defined(__MINGW64__) && defined(DO_PLOT) void Pxpause(rp) Q *rp; { @@ -550,7 +610,7 @@ init_display() rootwin = RootWindow(display,DefaultScreen(display)); } -grab_pointer() +void grab_pointer() { XEvent ev; static Cursor cursor; @@ -571,7 +631,7 @@ grab_pointer() void Psend_progress(NODE arg,Q *rp) { -#if defined(VISUAL) +#if defined(VISUAL) || defined(__MINGW32__) || defined(__MINGW64__) short per; char *msg;