=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2018/builtin/ctrl.c,v retrieving revision 1.1 retrieving revision 1.5 diff -u -p -r1.1 -r1.5 --- OpenXM_contrib2/asir2018/builtin/ctrl.c 2018/09/19 05:45:05 1.1 +++ OpenXM_contrib2/asir2018/builtin/ctrl.c 2020/08/26 06:40:36 1.5 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM$ + * $OpenXM: OpenXM_contrib2/asir2018/builtin/ctrl.c,v 1.4 2019/03/27 06:41:45 ohara Exp $ */ #include "ca.h" #include "parse.h" @@ -70,6 +70,11 @@ static struct { char *release; char *full; char *lang; +#if defined(VISUAL) + int ver_major; + int ver_minor; + int ver_build; +#endif } sysinfo; void Pctrl(); @@ -115,6 +120,7 @@ extern int ASIRLOADPATH_LEN; extern int No_ox_reset; extern int plot_by_bigfloat; extern int debug_plot; +extern int debug_pari; static struct keyval { char *key; @@ -165,6 +171,7 @@ static struct keyval { {"zerorewrite",&zerorewrite,""}, {"itvplotsize",&Itvplot,""}, #endif + {"debug_pari",&debug_pari,"If set to 1, ox_pari is executed with the message window."}, {0,0}, }; @@ -202,12 +209,12 @@ LIST create_control_values(int withdesc) n = sizeof(ctrls)/sizeof(struct keyval)-1; top = 0; for ( i = n-1; i >= 0; i-- ) { - STOQ(*(ctrls[i].val),val); + STOZ(*(ctrls[i].val),val); list = create_control_value(ctrls[i].key,(Obj)val,ctrls[i].desc,withdesc); MKNODE(top1,list,top); top = top1; } /* adj */ - Risa_GC_get_adj(&nm,&dv); UTOQ(nm,num); UTOQ(dv,den); divq((Q)num,(Q)den,&adj); + Risa_GC_get_adj(&nm,&dv); UTOZ(nm,num); UTOZ(dv,den); divq((Q)num,(Q)den,&adj); descstr = "Determines the parameter for Boehm's GC."; list = create_control_value("adj",(Obj)adj,descstr,withdesc); MKNODE(top1,list,top); top = top1; @@ -227,13 +234,13 @@ LIST create_control_values(int withdesc) } } MKLIST(l,node); - descstr = "List of paths in ASIRLOADPATHt."; + descstr = "List of paths in ASIRLOADPATH."; list = create_control_value("loadpath",(Obj)l,descstr,withdesc); MKNODE(top1,list,top); top = top1; /* oxpari_id */ if(!ox_pari_stream_initialized) { - STOQ(-1,val); + STOZ(-1,val); } else val = ox_pari_stream; descstr = "Id of ox_pari."; list = create_control_value("oxpari_id",(Obj)val,descstr,withdesc); @@ -284,8 +291,8 @@ void Pctrl(NODE arg,Obj *rp) /* special treatment is necessary for "adj" */ if ( argc(arg) == 1 ) { Risa_GC_get_adj(&nm,&dv); - UTOQ(dv,num); - UTOQ(nm,den); + UTOZ(dv,num); + UTOZ(nm,den); divq((Q)num,(Q)den,(Q *)rp); } else { absq((Q)ARG1(arg),&c); @@ -293,7 +300,7 @@ void Pctrl(NODE arg,Obj *rp) error("ctrl : adj : invalid argument"); nmq(c,&num); dnq(c,&den); - Risa_GC_set_adj(QTOS(den),QTOS(num)); + Risa_GC_set_adj(ZTOS(den),ZTOS(num)); *rp = (Obj)c; } return; @@ -364,7 +371,7 @@ void Pctrl(NODE arg,Obj *rp) } else if ( !strcmp(key,"oxpari_id") ) { if ( argc(arg) == 1 ) { if(!ox_pari_stream_initialized) { - STOQ(-1,z); + STOZ(-1,z); *rp = (Obj)z; }else { *rp = (Obj)ox_pari_stream; @@ -376,7 +383,7 @@ void Pctrl(NODE arg,Obj *rp) ox_pari_stream = (Z)c; *rp = (Obj)c; }else { - STOQ(-1,z); + STOZ(-1,z); *rp = (Obj)z; } } @@ -402,8 +409,8 @@ void Pctrl(NODE arg,Obj *rp) if ( argc(arg) == 1 ) t = *ctrls[i].val; else - *ctrls[i].val = t = QTOS((Q)ARG1(arg)); - STOQ(t,z); + *ctrls[i].val = t = ZTOS((Q)ARG1(arg)); + STOZ(t,z); *rp = (Obj)z; } else { sprintf(buf,"ctrl : %s : no such key",key); @@ -519,6 +526,8 @@ static char *osnameNT(int major, int minor) return "Windows8"; }else if (major == 6 && minor == 3) { return "Windows8.1"; + }else if (major == 10 && minor == 0) { + return "Windows10"; } return "unknown"; } @@ -547,6 +556,28 @@ static char *get_lang() return "en"; // English } +void get_version_win8(int *major,int *minor,int *build) +{ + char *res; + char fname[4096]; /* fullpath of kernel32.dll (_MAX_PATH==260)*/ + char cmd[4096]; + int size; + char *version_string; + struct LANGANDCODEPAGE { + WORD language; + WORD codepage; + }* lang; + sprintf(fname,"%s\\system32\\kernel32.dll", getenv("SYSTEMROOT")); + size=GetFileVersionInfoSize(fname,0); + res = (char *)MALLOC(size+1); + if(GetFileVersionInfo(fname,0,size+1,res)) { + VerQueryValue(res,"\\VarFileInfo\\Translation",&lang,&size); + sprintf(cmd,"\\StringFileInfo\\%04x%04x\\ProductVersion",lang->language,lang->codepage); + VerQueryValue(res,cmd,&version_string,&size); + sscanf(version_string,"%d.%d.%d.",major,minor,build); + } +} + static void get_sysinfo() { int arch64 = 0; @@ -562,6 +593,14 @@ static void get_sysinfo() v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); + /* Windows8 == version 6.2 */ + if (v.dwPlatformId == VER_PLATFORM_WIN32_NT + && v.dwMajorVersion == 6 && v.dwMinorVersion >= 2) { + get_version_win8(&v.dwMajorVersion, &v.dwMinorVersion, &v.dwBuildNumber); + } + sysinfo.ver_major=v.dwMajorVersion; + sysinfo.ver_minor=v.dwMinorVersion; + sysinfo.ver_build=v.dwBuildNumber; sysinfo.type = "windows"; sysinfo.arch = "x86";