Annotation of OpenXM_contrib2/asir2000/parse/glob.c, Revision 1.1
1.1 ! noro 1: /* $OpenXM: OpenXM/src/asir99/parse/glob.c,v 1.2 1999/11/17 08:57:10 noro Exp $ */
! 2: #include "ca.h"
! 3: #include "al.h"
! 4: #include "parse.h"
! 5: #if PARI
! 6: #include "genpari.h"
! 7: #endif
! 8: #if !defined(THINK_C) && !defined(VISUAL) && !defined(_PA_RISC1_1) && !defined(linux) && !defined(SYSV)
! 9: #include <sgtty.h>
! 10: #else
! 11: #if defined(THINK_C) && !defined(__MWERKS__)
! 12: #include <console.h>
! 13: #endif
! 14: #endif
! 15:
! 16: #if defined(VISUAL)
! 17: #include <io.h>
! 18: #include <direct.h>
! 19: #endif
! 20:
! 21: #if defined(SYSV)
! 22: #include <sys/ttold.h>
! 23: #endif
! 24:
! 25: #if defined(THINK_C) || defined(VISUAL)
! 26: #if defined(VISUAL)
! 27: #define HISTORY asir_history
! 28: #else
! 29: #define HISTORY "history"
! 30: #endif
! 31: #endif
! 32: #define MAXHIST 100
! 33:
! 34: extern int GC_free_space_divisor;
! 35: extern int GC_free_space_numerator;
! 36: extern FILE *asir_out;
! 37:
! 38: IN asir_infile;
! 39: jmp_buf env,debug_env,timer_env;
! 40: int little_endian,debug_mode;
! 41: char *asir_libdir;
! 42: char *asir_pager;
! 43:
! 44: NODE usrf,sysf,noargsysf,ubinf,parif;
! 45: NODE ONENODE;
! 46: int main_parser, ox_do_copy, ox_do_count, ox_count_length;
! 47: int ox_file_io, ox_need_conv;
! 48: char *ox_copy_bptr;
! 49: char *parse_strp;
! 50: SNODE parse_snode;
! 51: FUNC parse_targetf;
! 52: FILE *ox_istream,*ox_ostream;
! 53: int do_server_in_X11;
! 54: Obj LastVal;
! 55: char LastError[BUFSIZ];
! 56:
! 57: struct oV oVAR[] = {
! 58: {"x",0,0}, {"y",0,0}, {"z",0,0}, {"u",0,0},
! 59: {"v",0,0}, {"w",0,0}, {"p",0,0}, {"q",0,0},
! 60: {"r",0,0}, {"s",0,0}, {"t",0,0}, {"a",0,0},
! 61: {"b",0,0}, {"c",0,0}, {"d",0,0}, {"e",0,0},
! 62: {"f",0,0}, {"g",0,0}, {"h",0,0}, {"i",0,0},
! 63: {"j",0,0}, {"k",0,0}, {"l",0,0}, {"m",0,0},
! 64: {"n",0,0}, {"o",0,0},
! 65: {"_x",0,0}, {"_y",0,0}, {"_z",0,0}, {"_u",0,0},
! 66: {"_v",0,0}, {"_w",0,0}, {"_p",0,0}, {"_q",0,0},
! 67: {"_r",0,0}, {"_s",0,0}, {"_t",0,0}, {"_a",0,0},
! 68: {"_b",0,0}, {"_c",0,0}, {"_d",0,0}, {"_e",0,0},
! 69: {"_f",0,0}, {"_g",0,0}, {"_h",0,0}, {"_i",0,0},
! 70: {"_j",0,0}, {"_k",0,0}, {"_l",0,0}, {"_m",0,0},
! 71: {"_n",0,0}, {"_o",0,0}
! 72: };
! 73:
! 74: struct oVL oVLIST[52];
! 75:
! 76: VL CO = oVLIST;
! 77: VL ALG;
! 78:
! 79: struct oVS oGPVS,oAPVS,oEPVS;
! 80: VS GPVS = &oGPVS;
! 81: VS APVS = &oAPVS;
! 82: VS EPVS = &oEPVS;
! 83: VS CPVS;
! 84:
! 85: struct oF oF_TRUE,oF_FALSE;
! 86: F F_TRUE = &oF_TRUE;
! 87: F F_FALSE = &oF_FALSE;
! 88:
! 89: #if defined(__SVR4) && defined(sun)
! 90: char cppname[64] = "/usr/ccs/lib/cpp ";
! 91: #else
! 92: #if defined(__FreeBSD__) || defined(__NetBSD__)
! 93: char cppname[64] = "/usr/bin/cpp ";
! 94: #else
! 95: #if defined(VISUAL)
! 96: char cppname[64] = "c:\\asir\\stdlib\\cpp ";
! 97: #else
! 98: char cppname[64] = "/lib/cpp ";
! 99: #endif
! 100: #endif
! 101: #endif
! 102: char asirname[64];
! 103: char displayname[BUFSIZ];
! 104:
! 105: int Verbose;
! 106:
! 107: void glob_init() {
! 108: int i;
! 109:
! 110: for ( i = 0; i < 51; i++ ) {
! 111: VR(&oVLIST[i]) = &oVAR[i]; NEXT(&oVLIST[i]) = &oVLIST[i+1];
! 112: }
! 113: VR(&oVLIST[i]) = &oVAR[i]; NEXT(&oVLIST[i]) = 0;
! 114: reallocarray((char **)&GPVS->va,(int *)&GPVS->asize,(int *)&GPVS->n,(int)sizeof(struct oPV));
! 115: reallocarray((char **)&APVS->va,(int *)&APVS->asize,(int *)&APVS->n,(int)sizeof(struct oPV));
! 116: CPVS = GPVS;
! 117: MKNODE(ONENODE,mkfnode(1,I_FORMULA,ONE),0);
! 118: OID(F_TRUE)=O_F; FOP(F_TRUE)=AL_TRUE; F_TRUE->arg.dummy = 0;
! 119: OID(F_FALSE)=O_F; FOP(F_FALSE)=AL_FALSE; F_FALSE->arg.dummy = 0;
! 120: sprintf(asirname,"%s/asir_symtab",asir_libdir);
! 121: #if defined(THINK_C)
! 122: initVol();
! 123: #endif
! 124: }
! 125:
! 126: void input_init(fp,name)
! 127: FILE *fp;
! 128: char *name;
! 129: {
! 130: asir_infile = (IN)CALLOC(sizeof(struct oIN),1);
! 131: asir_infile->name = name; asir_infile->fp = fp;
! 132: asir_infile->ln = 1; NEXT(asir_infile) = 0;
! 133: }
! 134:
! 135: void notdef(vl,a,b,c)
! 136: VL vl;
! 137: Obj a,b,*c;
! 138: {
! 139: *c = 0;
! 140: error("undefined arithmetic operation.");
! 141: }
! 142:
! 143: int kernelmode;
! 144: int do_asirrc;
! 145: int do_file;
! 146: int do_message;
! 147: int do_fep;
! 148: int no_prompt;
! 149: int read_exec_file;
! 150: static int buserr_sav;
! 151: static char asir_history[BUFSIZ];
! 152:
! 153: extern int mpi_myid;
! 154:
! 155: /*
! 156: * status = 1 abnormal termination (error() etc.)
! 157: * status = 2 normal termination (end(), quit() etc.)
! 158: */
! 159:
! 160: void asir_terminate(status)
! 161: int status;
! 162: {
! 163: if ( read_exec_file ) {
! 164: read_exec_file = 0; longjmp(env,status);
! 165: } else {
! 166: tty_reset();
! 167: #if INET && !defined(THINK_C)
! 168: #if MPI
! 169: if ( !mpi_myid )
! 170: close_allconnections();
! 171: mpi_finalize();
! 172: #else
! 173: close_allconnections();
! 174: #endif
! 175: #endif
! 176: if ( kernelmode )
! 177: fputc(0xff,asir_out);
! 178: if ( asir_out )
! 179: fflush(asir_out);
! 180: #if defined(THINK_C) && !defined(__MWERKS__)
! 181: *((int *)0x8) = buserr_sav;
! 182: while ( NEXT(asir_infile) )
! 183: closecurrentinput();
! 184: console_options.pause_atexit = 0;
! 185: resetDir();
! 186: write_hist(HISTORY);
! 187: #endif
! 188: ExitAsir();
! 189: }
! 190: }
! 191:
! 192: void param_init() {
! 193: unsigned int et = 0xff;
! 194: extern int paristack;
! 195: #if defined(THINK_C)
! 196: char name[BUFSIZ];
! 197: int c;
! 198: int val;
! 199: FILE *fp;
! 200: int stacksize;
! 201:
! 202: #include <Memory.h>
! 203: GC_free_space_divisor = 4; stacksize = 0x40000;
! 204: if ( fp = fopen("params","r") ) {
! 205: while ( 1 ) {
! 206: c = fgetc(fp);
! 207: if ( c == EOF )
! 208: break;
! 209: else
! 210: ungetc(c,fp);
! 211: fscanf(fp,"%s %d",name,&val);
! 212: if ( !strcmp(name,"stacksize") )
! 213: stacksize = val;
! 214: else if ( !strcmp(name,"adj") )
! 215: GC_free_space_divisor = val;
! 216: #if PARI
! 217: else if ( !strcmp(name,"paristack") )
! 218: paristack = val;
! 219: #endif
! 220: }
! 221: fclose(fp);
! 222: }
! 223: #if defined(__MWERKS__)
! 224: {
! 225: Ptr al;
! 226: al = LMGetApplLimit();
! 227: LMSetApplLimit(al-stacksize);
! 228: }
! 229: #else
! 230: ApplLimit = (Ptr)((char *)ApplLimit-stacksize);
! 231: console_options.title = "\pAsir";
! 232: #endif
! 233: #endif
! 234: if ( *((char *)&et) )
! 235: little_endian = 1;
! 236: else
! 237: little_endian = 0;
! 238: }
! 239:
! 240: void prompt() {
! 241: if ( !no_prompt && !do_fep && asir_infile->fp == stdin )
! 242: fprintf(asir_out,"[%d]%c",APVS->n,kernelmode?0xfe:' ');
! 243: fflush(asir_out);
! 244: }
! 245:
! 246: void sprompt(ptr)
! 247: char *ptr;
! 248: {
! 249: sprintf(ptr,"[%d]%c",APVS->n,kernelmode?0xfe:' ');
! 250: }
! 251:
! 252: #if 0 && !defined(THINK_C) && !defined(VISUAL) && !defined(_PA_RISC1_1)
! 253: static struct tchars tc;
! 254: static char oldeof;
! 255: struct winsize wsize;
! 256: int ttywidth;
! 257: char *upperbuf,*lowerbuf;
! 258: #endif
! 259:
! 260: FILE *in_fp;
! 261:
! 262: void process_args(ac,av)
! 263: int ac;
! 264: char **av;
! 265: {
! 266: #if !defined(THINK_C)
! 267: do_asirrc = 1;
! 268: #if !MPI
! 269: do_message = 1;
! 270: #endif
! 271: while ( ac > 0 ) {
! 272: if ( !strcmp(*av,"-heap") && (ac >= 2) ) {
! 273: void GC_expand_hp(int);
! 274:
! 275: GC_expand_hp(atoi(*(av+1))); av += 2; ac -= 2;
! 276: } else if ( !strcmp(*av,"-adj") && (ac >= 2) ) {
! 277: char *slash;
! 278:
! 279: slash = strrchr(*(av+1),'/');
! 280: if ( slash ) {
! 281: *slash = 0;
! 282: GC_free_space_numerator = atoi(slash+1);
! 283: }
! 284: GC_free_space_divisor = atoi(*(av+1));
! 285: av += 2; ac -= 2;
! 286: } else if ( !strcmp(*av,"-cpp") && (ac >= 2) ) {
! 287: strcpy(cppname,*(av+1)); av += 2; ac -= 2;
! 288: } else if ( !strcmp(*av,"-f") && (ac >= 2) ) {
! 289: in_fp = fopen(*(av+1),"r");
! 290: if ( !in_fp ) {
! 291: fprintf(stderr,"%s does not exist!",*(av+1));
! 292: asir_terminate(1);
! 293: }
! 294: do_file = 1;
! 295: av += 2; ac -= 2;
! 296: } else if ( !strcmp(*av,"-kernel") ) {
! 297: kernelmode = 1; av++; ac--;
! 298: } else if ( !strcmp(*av,"-norc") ) {
! 299: do_asirrc = 0; av++; ac--;
! 300: } else if ( !strcmp(*av,"-nomessage") ) {
! 301: do_message = 0; av++; ac--;
! 302: } else if ( !strcmp(*av,"-terse") ) {
! 303: no_prompt = 0; av++; ac--;
! 304: } else if ( !strcmp(*av,"-maxheap") && (ac >= 2) ) {
! 305: void GC_set_max_heap_size(int);
! 306:
! 307: GC_set_max_heap_size(atoi(*(av+1))); av += 2; ac -= 2;
! 308: #if !defined(VISUAL)
! 309: } else if ( !strcmp(*av,"-display") && (ac >= 2) ) {
! 310: strcpy(displayname,*(av+1)); av += 2; ac -= 2;
! 311: #endif
! 312: #if PARI
! 313: } else if ( !strcmp(*av,"-paristack") ) {
! 314: extern int paristack;
! 315:
! 316: paristack = atoi(*(av+1)); av += 2; ac -= 2;
! 317: #endif
! 318: } else {
! 319: fprintf(stderr,"%s : unknown option.\n",*av);
! 320: asir_terminate(1);
! 321: }
! 322: }
! 323: #endif
! 324: #if (defined(THINK_C) && !defined(__MWERKS__))
! 325: init_hist(MAXHIST);
! 326: read_hist(HISTORY);
! 327: #endif
! 328: }
! 329:
! 330: #include <signal.h>
! 331:
! 332: void sig_init() {
! 333: #if !defined(VISUAL)
! 334: signal(SIGINT,int_handler);
! 335: #else
! 336: register_ctrlc_handler();
! 337: #endif
! 338: signal(SIGSEGV,segv_handler);
! 339:
! 340: #if defined SIGFPE
! 341: signal(SIGFPE,fpe_handler);
! 342: #endif
! 343:
! 344: #if defined SIGPIPE
! 345: signal(SIGPIPE,pipe_handler);
! 346: #endif
! 347:
! 348: #if defined SIGILL
! 349: signal(SIGILL,ill_handler);
! 350: #endif
! 351:
! 352: #if defined(THINK_C)
! 353: buserr_sav = *((int *)0x8);
! 354: *((int *)0x8) = (int)bus_handler;
! 355: #else /* THINK_C */
! 356:
! 357: #if !defined(VISUAL)
! 358: signal(SIGBUS,bus_handler);
! 359: #endif
! 360:
! 361: #if 0
! 362: #if !defined(VISUAL) && !defined(_PA_RISC1_1)
! 363: signal(SIGWINCH,winch_handler);
! 364: #endif
! 365: #endif
! 366:
! 367: #endif /* THINK_C */
! 368: }
! 369:
! 370: static void (*old_int)(int);
! 371:
! 372: void asir_save_handler() {
! 373: old_int = signal(SIGINT,SIG_IGN);
! 374: signal(SIGINT,old_int);
! 375: }
! 376:
! 377: void asir_set_handler() {
! 378: signal(SIGINT,int_handler);
! 379: }
! 380:
! 381: void asir_reset_handler() {
! 382: signal(SIGINT,old_int);
! 383: }
! 384:
! 385: void resetenv(s)
! 386: char *s;
! 387: {
! 388: extern FILE *outfile;
! 389:
! 390: fprintf(stderr,"%s\n",s);
! 391: while ( NEXT(asir_infile) )
! 392: closecurrentinput();
! 393: resetpvs();
! 394: #if !defined(VISUAL)
! 395: if ( do_server_in_X11 )
! 396: #endif
! 397: show_debug_window(0);
! 398: #if defined(VISUAL_LIB)
! 399: w_noflush_stderr(0);
! 400: #endif
! 401: asir_out = stdout;
! 402: #if PARI
! 403: pari_outfile = stdout;
! 404: #endif
! 405: /* restore states */
! 406: reset_engine();
! 407: reset_io();
! 408: longjmp(env,1);
! 409: }
! 410:
! 411: void fatal(n)
! 412: int n;
! 413: {
! 414: resetenv("return to toplevel");
! 415: }
! 416:
! 417: FUNC registered_handler;
! 418: extern int ox_int_received, critical_when_signal;
! 419:
! 420: void int_handler(sig)
! 421: int sig;
! 422: {
! 423: extern NODE PVSS;
! 424:
! 425: if ( do_file ) {
! 426: ExitAsir();
! 427: }
! 428: if ( critical_when_signal ) {
! 429: ox_int_received = 1;
! 430: return;
! 431: }
! 432: #if defined(THINK_C) || defined(VISUAL)
! 433: suspend_timer(); signal(SIGINT,SIG_IGN);
! 434: #endif
! 435: #if defined(_PA_RISC1_1) || defined(linux) || defined(VISUAL) || defined(__svr4__)
! 436: signal(SIGINT,SIG_IGN);
! 437: #endif
! 438: #if defined(linux)
! 439: #if 1
! 440: while ( stdin->_IO_read_ptr < stdin->_IO_read_end )
! 441: #else
! 442: while ( stdin->_gptr < stdin->_egptr )
! 443: #endif
! 444: getchar();
! 445: #endif
! 446: while ( 1 ) {
! 447: char buf[BUFSIZ];
! 448: char c;
! 449:
! 450: fprintf(stderr,"interrupt ?(q/t/c/d/u/w/?) "); fflush(stderr);
! 451: if ( kernelmode )
! 452: fputc('\0',stderr);
! 453: buf[0] = '\n';
! 454: while ( buf[0] == '\n' )
! 455: fgets(buf,BUFSIZ,stdin);
! 456: switch ( c = buf[0] ) {
! 457: case 'q':
! 458: while ( 1 ) {
! 459: fprintf(stderr,"Abort this session? (y or n) "); fflush(stderr);
! 460: fgets(buf,BUFSIZ,stdin);
! 461: if ( !strncmp(buf,"y",1) ) {
! 462: read_exec_file = 0;
! 463: fprintf(stderr,"Bye\n"); asir_terminate(1);
! 464: } else if ( !strncmp(buf,"n",1) ) {
! 465: restore_handler();
! 466: return;
! 467: }
! 468: }
! 469: break;
! 470: case 't':
! 471: case 'u':
! 472: while ( 1 ) {
! 473: fprintf(stderr,"Abort this computation? (y or n) "); fflush(stderr);
! 474: fgets(buf,BUFSIZ,stdin);
! 475: if ( !strncmp(buf,"y",1) )
! 476: break;
! 477: else if ( !strncmp(buf,"n",1) ) {
! 478: restore_handler();
! 479: return;
! 480: }
! 481: }
! 482: if ( debug_mode )
! 483: debug_mode = 0;
! 484: if ( kernelmode )
! 485: fputc('\0',stderr);
! 486: restore_handler();
! 487: if ( c == 'u' ) {
! 488: if ( registered_handler ) {
! 489: fprintf(stderr,
! 490: "Calling the registered exception handler...");
! 491: bevalf(registered_handler,0);
! 492: fprintf(stderr, "done.\n");
! 493: }
! 494: }
! 495: if ( read_exec_file ) {
! 496: read_exec_file = 0;
! 497: resetenv("initialization aborted; return to toplevel");
! 498: } else
! 499: resetenv("return to toplevel");
! 500: break;
! 501: case 'd':
! 502: #if 0
! 503: nextbp = 1; nextbplevel = -1;
! 504: #endif
! 505: debug(PVSS?((VS)BDY(PVSS))->usrf->f.usrf->body:0);
! 506: restore_handler();
! 507: return;
! 508: case 'c':
! 509: if ( kernelmode )
! 510: fputc('\0',stderr);
! 511: restore_handler();
! 512: return; break;
! 513: case 'w':
! 514: showpos(); break;
! 515: case '?':
! 516: fprintf(stderr, "q:quit t:toplevel c:continue d:debug u:call registered handler w:where\n");
! 517: break;
! 518: default:
! 519: break;
! 520: }
! 521: }
! 522: }
! 523:
! 524: void restore_handler() {
! 525: #if defined(THINK_C) || defined(VISUAL)
! 526: resume_timer(); signal(SIGINT,int_handler);
! 527: #endif
! 528: #if defined(_PA_RISC1_1) || defined(linux) || defined(__svr4__)
! 529: signal(SIGINT,int_handler);
! 530: #endif
! 531: }
! 532:
! 533: void segv_handler(sig)
! 534: int sig;
! 535: {
! 536: #if defined(THINK_C) || defined(_PA_RISC1_1) || defined(linux) || defined(VISUAL) || defined(__svr4__)
! 537: signal(SIGSEGV,segv_handler);
! 538: #endif
! 539: error("internal error (SEGV)");
! 540: }
! 541:
! 542: void ill_handler(sig)
! 543: int sig;
! 544: {
! 545: #if defined(THINK_C) || defined(_PA_RISC1_1) || defined(linux) || defined(VISUAL) || defined(__svr4__)
! 546: signal(SIGILL,ill_handler);
! 547: #endif
! 548: error("illegal instruction (ILL)");
! 549: }
! 550:
! 551: void alrm_handler(sig)
! 552: int sig;
! 553: {
! 554: fprintf(stderr,"interval timer expired (VTALRM)\n");
! 555: longjmp(timer_env,1);
! 556: }
! 557:
! 558: void bus_handler(sig)
! 559: int sig;
! 560: {
! 561: #if defined(SIGBUS)
! 562: signal(SIGBUS,bus_handler);
! 563: error("internal error (BUS ERROR)");
! 564: #endif
! 565: }
! 566:
! 567: void fpe_handler(sig)
! 568: int sig;
! 569: {
! 570: #if defined(THINK_C) || defined(_PA_RISC1_1) || defined(linux) || defined(VISUAL) || defined(__svr4__)
! 571: signal(SIGFPE,fpe_handler);
! 572: #endif
! 573: error("internal error (FPE)");
! 574: }
! 575:
! 576: void winch_handler(sig)
! 577: int sig;
! 578: {
! 579: #if 0
! 580: #if !defined(THINK_C) && !defined(VISUAL) && !defined(_PA_RISC1_1) && !defined(__svr4__)
! 581: if ( isatty(1) ) {
! 582: struct winsize t;
! 583:
! 584: if ( ioctl(1,TIOCGWINSZ,&t) == -1 )
! 585: perror("TIOCGWINSZ");
! 586: if ( t.ws_col != wsize.ws_col || t.ws_row != wsize.ws_row ) {
! 587: resize_buffer();
! 588: if ( killpg(getpgrp(0),SIGWINCH) == -1 )
! 589: perror("killpg");
! 590: }
! 591: }
! 592: #endif
! 593: #endif
! 594: }
! 595:
! 596: void pipe_handler(sig)
! 597: int sig;
! 598: {
! 599: #if defined(SIGPIPE)
! 600: signal(SIGPIPE,pipe_handler);
! 601: error("internal error (BROKEN PIPE)");
! 602: #endif
! 603: }
! 604:
! 605: void resize_buffer()
! 606: {
! 607: #if 0 && !defined(THINK_C) && !defined(VISUAL) && !defined(_PA_RISC1_1)
! 608: if ( isatty(1) ) {
! 609: if ( ioctl(1,TIOCGWINSZ,&wsize) == -1 )
! 610: perror("TIOCGWINSZ");
! 611: if ( wsize.ws_col > 2 ) {
! 612: ttywidth = wsize.ws_col - 2;
! 613: upperbuf = (char *)MALLOC(wsize.ws_col);
! 614: lowerbuf = (char *)MALLOC(wsize.ws_col);
! 615: }
! 616: }
! 617: #endif
! 618: }
! 619:
! 620: void tty_init() {
! 621: #if 0 && !defined(THINK_C) && !defined(VISUAL) && !defined(_PA_RISC1_1)
! 622: if ( isatty(0) ) {
! 623: if ( ioctl(0,TIOCGETC,&tc) == -1 )
! 624: perror("TIOCGETC");
! 625: oldeof = tc.t_eofc; tc.t_eofc = 0xff;
! 626: if ( ioctl(0,TIOCSETC,&tc) == -1 )
! 627: perror("TIOCSETC");
! 628: setpgrp(0, getpid());
! 629: }
! 630: resize_buffer();
! 631: #endif
! 632: }
! 633:
! 634: void tty_reset() {
! 635: #if 0 && !defined(THINK_C) && !defined(VISUAL) && !defined(_PA_RISC1_1)
! 636: if ( oldeof ) {
! 637: tc.t_eofc = oldeof;
! 638: if ( ioctl(0,TIOCSETC,&tc) == -1 )
! 639: perror("TIOCSETC");
! 640: }
! 641: #endif
! 642: }
! 643:
! 644: extern int evalstatline;
! 645:
! 646: void set_lasterror(s)
! 647: char *s;
! 648: {
! 649: strncpy(LastError,s,BUFSIZ);
! 650: LastError[BUFSIZ-1] = 0;
! 651: }
! 652:
! 653: SNODE error_snode;
! 654:
! 655: void error(s)
! 656: char *s;
! 657: {
! 658: SNODE *snp;
! 659:
! 660: fprintf(stderr,"%s\n",s);
! 661: set_lasterror(s);
! 662: if ( CPVS != GPVS ) {
! 663: searchsn(&BDY(CPVS->usrf->f.usrf),evalstatline,&snp);
! 664: error_snode = *snp;
! 665: } else
! 666: error_snode = 0;
! 667: if ( do_file ) {
! 668: char errbuf[BUFSIZ*5]; /* sufficient to store stack information ? */
! 669:
! 670: sprintf(errbuf,"%s\n",s);
! 671: showpos_to_string(errbuf+strlen(errbuf));
! 672: set_lasterror(errbuf);
! 673: ExitAsir();
! 674: }
! 675: if ( debug_mode )
! 676: longjmp(debug_env,1);
! 677: if ( CPVS != GPVS )
! 678: if ( do_server_in_X11 || isatty(0) )
! 679: bp(error_snode);
! 680: if ( read_exec_file )
! 681: read_exec_file = 0;
! 682: resetenv("return to toplevel");
! 683: }
! 684:
! 685: #if !defined(VISUAL)
! 686: #include <sys/time.h>
! 687:
! 688: void set_timer(interval)
! 689: int interval;
! 690: {
! 691: struct itimerval it;
! 692:
! 693: it.it_interval.tv_sec = interval;
! 694: it.it_interval.tv_usec = 0;
! 695: it.it_value.tv_sec = interval;
! 696: it.it_value.tv_usec = 0;
! 697: setitimer(ITIMER_VIRTUAL,&it,0);
! 698: signal(SIGVTALRM,alrm_handler);
! 699: }
! 700:
! 701: void reset_timer()
! 702: {
! 703: struct itimerval it;
! 704:
! 705: it.it_interval.tv_sec = 0;
! 706: it.it_interval.tv_usec = 0;
! 707: it.it_value.tv_sec = 0;
! 708: it.it_value.tv_usec = 0;
! 709: setitimer(ITIMER_VIRTUAL,&it,0);
! 710: signal(SIGVTALRM,SIG_IGN);
! 711: }
! 712: #endif
! 713:
! 714: unsigned int get_asir_version();
! 715:
! 716: void copyright() {
! 717: printf("This is Asir, Version %d.\n",get_asir_version());
! 718: printf("Copyright (C) FUJITSU LABORATORIES LIMITED.\n");
! 719: printf("3 March 1994. All rights reserved.\n");
! 720: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>