|
|
1.1 ! root 1: #ifndef lint ! 2: static char *rcsid = ! 3: "$Header: sysat.c,v 1.20 85/03/13 17:19:21 sklower Exp $"; ! 4: #endif ! 5: ! 6: /* -[Thu Sep 29 14:05:32 1983 by jkf]- ! 7: * sysat.c $Locker: $ ! 8: * startup data structure creation ! 9: * ! 10: * (c) copyright 1982, Regents of the University of California ! 11: */ ! 12: ! 13: #include "global.h" ! 14: #include "lfuncs.h" ! 15: #define FIDDLE(z,b,c,y) z->a.clb=newdot(); (z->a.clb->d.car=newint())->i=b->i; \ ! 16: z->a.clb->d.cdr=newdot(); (z->a.clb->d.cdr->d.car=newint())->i=c->i; \ ! 17: z->a.clb->d.cdr->d.cdr=newdot(); (z->a.clb->d.cdr->d.cdr->d.car=newint())->i=y; \ ! 18: b = z->a.clb->d.car; c = z->a.clb->d.cdr->d.car; \ ! 19: copval(z,z->a.clb); z->a.clb = nil; ! 20: ! 21: #define cforget(x) protect(x); Lforget(); unprot(); ! 22: ! 23: /* The following array serves as the temporary counters of the items */ ! 24: /* and pages used in each space. */ ! 25: ! 26: long int tint[2*NUMSPACES]; ! 27: ! 28: extern int tgcthresh; ! 29: extern int initflag; /* starts off TRUE to indicate unsafe to gc */ ! 30: ! 31: extern int *beginsweep; /* place for garbage collector to begin sweeping */ ! 32: extern int page_limit; /* begin warning messages about running out of space */ ! 33: extern char purepage[]; /* which pages should not be swept by gc */ ! 34: extern int ttsize; /* need to know how much of pagetable to set to other */ ! 35: ! 36: extern lispval Iaddstat(), Isstatus(); ! 37: lispval inewatom(); ! 38: ! 39: makevals() ! 40: { ! 41: int i; ! 42: lispval temp; ! 43: ! 44: /* system list structure and atoms are initialized. */ ! 45: ! 46: /* Before any lisp data can be created, the space usage */ ! 47: /* counters must be set up, temporarily in array tint. */ ! 48: ! 49: atom_items = (lispval) &tint[0]; ! 50: atom_pages = (lispval) &tint[1]; ! 51: str_items = (lispval) &tint[2]; ! 52: str_pages = (lispval) &tint[3]; ! 53: int_items = (lispval) &tint[4]; ! 54: int_pages = (lispval) &tint[5]; ! 55: dtpr_items = (lispval) &tint[6]; ! 56: dtpr_pages = (lispval) &tint[7]; ! 57: doub_items = (lispval) &tint[8]; ! 58: doub_pages = (lispval) &tint[9]; ! 59: sdot_items = (lispval) &tint[10]; ! 60: sdot_pages = (lispval) &tint[11]; ! 61: array_items = (lispval) &tint[12]; ! 62: array_pages = (lispval) &tint[13]; ! 63: val_items = (lispval) &tint[14]; ! 64: val_pages = (lispval) &tint[15]; ! 65: funct_items = (lispval) &tint[16]; ! 66: funct_pages = (lispval) &tint[17]; ! 67: ! 68: for (i=0; i < 7; i++) ! 69: { ! 70: hunk_pages[i] = (lispval) &tint[18+i*2]; ! 71: hunk_items[i] = (lispval) &tint[19+i*2]; ! 72: } ! 73: ! 74: vect_items = (lispval) &tint[34]; ! 75: vecti_items = (lispval) &tint[35]; ! 76: vect_pages = (lispval) &tint[36]; ! 77: vecti_pages = (lispval) &tint[37]; ! 78: other_items = (lispval) &tint[38]; ! 79: other_pages = (lispval) &tint[39]; ! 80: ! 81: /* This also applies to the garbage collection threshhold */ ! 82: ! 83: gcthresh = (lispval) &tgcthresh; ! 84: ! 85: /* Now we commence constructing system lisp structures. */ ! 86: ! 87: /* nil is a special case, constructed especially at location zero */ ! 88: ! 89: hasht[hashfcn("nil")] = (struct atom *)nil; ! 90: ! 91: ! 92: /* allocate space for namestack and bindstack first ! 93: * then set up beginsweep variable so that the sweeper will ! 94: * ignore these `always in use' pages ! 95: */ ! 96: ! 97: lbot = orgnp = np = ((struct argent *)csegment(VALUE,NAMESIZE,FALSE)); ! 98: orgbnp = bnp = ((struct nament *)csegment(DTPR,NAMESIZE,FALSE)); ! 99: /* since these dtpr pages will not be swept, we don't want them ! 100: * to show up in count of dtpr pages allocated or it will confuse ! 101: * gcafter when it tries to determine how much space is free ! 102: */ ! 103: dtpr_pages->i = 0; ! 104: beginsweep = (int *) xsbrk(0); ! 105: ! 106: /* ! 107: * patching up info in type and pure tables ! 108: */ ! 109: #if unisys3botch ! 110: /* ! 111: * This code is in here because Schriebman made Romberger tend ! 112: * more important things for too long for Apple and Fateman to ! 113: * wait ! 114: */ ! 115: {extern int dmpmode; int jj = ATOX(beginsweep); ! 116: dmpmode = 407; for(i=19;i < jj; i++) typetable[i] = 0; } ! 117: #endif ! 118: for(i=ATOX(beginsweep); i < ttsize; i++) (typetable+1)[i] = OTHER; ! 119: purepage[ATOX(np)] = 1; /* Mark these as non-gc'd arrays */ ! 120: purepage[ATOX(bnp)] = 1; ! 121: ! 122: /* ! 123: * Names of various spaces and things ! 124: */ ! 125: ! 126: atom_name = inewatom("symbol"); ! 127: str_name = inewatom("string"); ! 128: int_name = inewatom("fixnum"); ! 129: dtpr_name = inewatom("list"); ! 130: doub_name = inewatom("flonum"); ! 131: sdot_name = inewatom("bignum"); ! 132: array_name = inewatom("array"); ! 133: val_name = inewatom("value"); ! 134: funct_name = inewatom("binary"); ! 135: port_name = inewatom("port"); /* not really a space */ ! 136: vect_name = inewatom("vector"); ! 137: vecti_name = inewatom("vectori"); ! 138: other_name = inewatom("other"); ! 139: ! 140: { ! 141: char name[6], *strcpy(); ! 142: ! 143: strcpy(name, "hunk0"); ! 144: for (i=0; i< 7; i++) { ! 145: hunk_name[i] = matom(name); ! 146: name[4]++; ! 147: } ! 148: } ! 149: ! 150: /* set up the name stack as an array of pointers */ ! 151: nplim = orgnp+NAMESIZE-6*NAMINC; ! 152: temp = inewatom("namestack"); ! 153: nstack = temp->a.fnbnd = newarray(); ! 154: nstack->ar.data = (char *) (np); ! 155: (nstack->ar.length = newint())->i = NAMESIZE; ! 156: (nstack->ar.delta = newint())->i = sizeof(struct argent); ! 157: Vnogbar = inewatom("unmarked_array"); ! 158: /* marking of the namestack will be done explicitly in gc1 */ ! 159: (nstack->ar.aux = newdot())->d.car = Vnogbar; ! 160: ! 161: ! 162: /* set up the binding stack as an array of dotted pairs */ ! 163: ! 164: bnplim = orgbnp+NAMESIZE-5; ! 165: temp = inewatom("bindstack"); ! 166: bstack = temp->a.fnbnd = newarray(); ! 167: bstack->ar.data = (char *) (bnp); ! 168: (bstack->ar.length = newint())->i = NAMESIZE; ! 169: (bstack->ar.delta = newint())->i = sizeof(struct nament); ! 170: /* marking of the bindstack will be done explicitly in gc1 */ ! 171: (bstack->ar.aux = newdot())->d.car = Vnogbar; ! 172: ! 173: /* more atoms */ ! 174: ! 175: tatom = inewatom("t"); ! 176: tatom->a.clb = tatom; ! 177: lambda = inewatom("lambda"); ! 178: nlambda = inewatom("nlambda"); ! 179: cara = inewatom("car"); ! 180: cdra = inewatom("cdr"); ! 181: Veval = inewatom("eval"); ! 182: quota = inewatom("quote"); ! 183: reseta = inewatom("reset"); ! 184: gcafter = inewatom("gcafter"); /* garbage collection wind-up */ ! 185: macro = inewatom("macro"); ! 186: ibase = inewatom("ibase"); /* base for input conversion */ ! 187: ibase->a.clb = inewint(10); ! 188: (inewatom("base"))->a.clb = ibase->a.clb; ! 189: fclosure = inewatom("fclosure"); ! 190: clos_marker = inewatom("int:closure-marker"); ! 191: Vpbv = inewatom("value-structure-argument"); ! 192: rsetatom = inewatom("*rset"); ! 193: rsetatom->a.clb = nil; ! 194: Vsubrou = inewatom("subroutine"); ! 195: Vpiport = inewatom("piport"); ! 196: Vpiport->a.clb = P(piport = stdin); /* standard input */ ! 197: Vpoport = inewatom("poport"); ! 198: Vpoport->a.clb = P(poport = stdout); /* stand. output */ ! 199: inewatom("errport")->a.clb = (P(errport = stderr));/* stand. err. */ ! 200: ioname[PN(stdin)] = (lispval) pinewstr("$stdin"); ! 201: ioname[PN(stdout)] = (lispval) pinewstr("$stdout"); ! 202: ioname[PN(stderr)] = (lispval) pinewstr("$stderr"); ! 203: inewatom("Standard-Input")->a.clb = Vpiport->a.clb; ! 204: inewatom("Standard-Output")->a.clb = Vpoport->a.clb; ! 205: inewatom("Standard-Error")->a.clb = P(errport); ! 206: (Vreadtable = inewatom("readtable"))->a.clb = Imkrtab(0); ! 207: strtab = Imkrtab(0); ! 208: Vptport = inewatom("ptport"); ! 209: Vptport->a.clb = nil; /* protocal port */ ! 210: ! 211: Vcntlw = inewatom("^w"); /* when non nil, inhibits output to term */ ! 212: Vcntlw->a.clb = nil; ! 213: ! 214: Vldprt = inewatom("$ldprint"); ! 215: /* when nil, inhibits printing of fasl/autoload */ ! 216: /* cfasl messages to term */ ! 217: Vldprt->a.clb = tatom; ! 218: ! 219: Vprinlevel = inewatom("prinlevel"); /* printer recursion count */ ! 220: Vprinlevel->a.clb = nil; /* infinite recursion */ ! 221: ! 222: Vprinlength = inewatom("prinlength"); /* printer element count */ ! 223: Vprinlength->a.clb = nil; /* infinite elements */ ! 224: ! 225: Vfloatformat = inewatom("float-format"); ! 226: Vfloatformat->a.clb = (lispval) pinewstr("%.16g"); ! 227: ! 228: Verdepth = inewatom("Error-Depth"); ! 229: Verdepth->a.clb = inewint(0); /* depth of error */ ! 230: ! 231: Vpurcopylits = inewatom("$purcopylits"); ! 232: Vpurcopylits->a.clb = tatom; /* tells fasl to purcopy ! 233: * literals it reads ! 234: */ ! 235: Vdisplacemacros = inewatom("displace-macros"); ! 236: Vdisplacemacros->a.clb = nil; /* replace macros calls ! 237: * with their expanded forms ! 238: */ ! 239: ! 240: Vprintsym = inewatom("print"); ! 241: ! 242: atom_buffer = (lispval) strbuf; ! 243: Vlibdir = inewatom("lisp-library-directory"); ! 244: Vlibdir->a.clb = inewatom("/usr/lib/lisp"); ! 245: /* The following atoms are used as tokens by the reader */ ! 246: ! 247: perda = inewatom("."); ! 248: lpara = inewatom("("); ! 249: rpara = inewatom(")"); ! 250: lbkta = inewatom("["); ! 251: rbkta = inewatom("]"); ! 252: snqta = inewatom("'"); ! 253: exclpa = inewatom("!"); ! 254: ! 255: ! 256: (Eofa = inewatom("eof"))->a.clb = eofa; ! 257: ! 258: /* The following few atoms have values the reader tokens. */ ! 259: /* Perhaps this is a kludge which should be abandoned. */ ! 260: /* On the other hand, perhaps it is an inspiration. */ ! 261: ! 262: inewatom("perd")->a.clb = perda; ! 263: inewatom("lpar")->a.clb = lpara; ! 264: inewatom("rpar")->a.clb = rpara; ! 265: inewatom("lbkt")->a.clb = lbkta; ! 266: inewatom("rbkt")->a.clb = rbkta; ! 267: ! 268: noptop = inewatom("noptop"); ! 269: ! 270: /* atoms used in connection with comments. */ ! 271: ! 272: commta = inewatom("comment"); ! 273: rcomms = inewatom("readcomments"); ! 274: ! 275: /* the following atoms are used for lexprs */ ! 276: ! 277: lexpr_atom = inewatom("last lexpr binding\7"); ! 278: lexpr = inewatom("lexpr"); ! 279: ! 280: /* the following atom is used to reference the bind stack for eval */ ! 281: bptr_atom = inewatom("eval1 binding pointer\7"); ! 282: bptr_atom->a.clb = nil; ! 283: ! 284: /* the following atoms are used for evalhook hackery */ ! 285: evalhatom = inewatom("evalhook"); ! 286: evalhatom->a.clb = nil; ! 287: evalhcallsw = FALSE; ! 288: ! 289: funhatom = inewatom("funcallhook"); ! 290: funhatom->a.clb = nil; ! 291: funhcallsw = FALSE; ! 292: ! 293: Vevalframe = inewatom("evalframe"); ! 294: ! 295: sysa = inewatom("sys"); ! 296: plima = inewatom("pagelimit"); /* max number of pages */ ! 297: ! 298: ! 299: startup = inewatom("startup"); /* used by save and restore */ ! 300: sysa = inewatom("sys"); /* sys indicator for system variables */ ! 301: splice = inewatom("splicing"); ! 302: ! 303: ! 304: ! 305: /* vector stuff */ ! 306: ! 307: odform = inewatom("odformat"); /* format for printf's used in od */ ! 308: rdrsdot = newsdot(); /* used in io conversions of bignums */ ! 309: rdrsdot2 = newsdot(); /* used in io conversions of bignums */ ! 310: rdrint = newint(); /* used as a temporary integer */ ! 311: (nilplist = newdot())->d.cdr = newdot(); ! 312: /* used as property list for nil, ! 313: since nil will eventually be put at ! 314: 0 (consequently in text and not ! 315: writable) */ ! 316: ! 317: /* error variables */ ! 318: (Vererr = inewatom("ER%err"))->a.clb = nil; ! 319: (Vertpl = inewatom("ER%tpl"))->a.clb = nil; ! 320: (Verall = inewatom("ER%all"))->a.clb = nil; ! 321: (Vermisc = inewatom("ER%misc"))->a.clb = nil; ! 322: (Verbrk = inewatom("ER%brk"))->a.clb = nil; ! 323: (Verundef = inewatom("ER%undef"))->a.clb = nil; ! 324: (Vlerall = newdot())->d.car = Verall; /* list (ER%all) */ ! 325: (Veruwpt = inewatom("ER%unwind-protect"))->a.clb = nil; ! 326: (Verrset = inewatom("errset"))->a.clb = nil; ! 327: ! 328: ! 329: /* set up the initial status list */ ! 330: ! 331: stlist = nil; /* initially nil */ ! 332: { ! 333: lispval feature, dom; ! 334: Iaddstat(inewatom("features"),ST_READ,ST_NO,nil); ! 335: Iaddstat(feature = inewatom("feature"),ST_FEATR,ST_FEATW,nil); ! 336: Isstatus(feature,inewatom("franz")); ! 337: Isstatus(feature,inewatom("Franz")); ! 338: Isstatus(feature,inewatom(OS)); ! 339: Isstatus(feature,inewatom("string")); ! 340: Isstatus(feature,dom = inewatom(DOMAIN)); ! 341: Iaddstat(inewatom("domain"),ST_READ,ST_NO,dom); ! 342: Isstatus(feature,inewatom(MACHINE)); ! 343: #ifdef PORTABLE ! 344: Isstatus(feature,inewatom("portable")); ! 345: #endif ! 346: #ifdef unisoft ! 347: Isstatus(feature,inewatom("unisoft")); ! 348: #endif ! 349: #ifdef sun ! 350: Isstatus(feature,inewatom("sun")); ! 351: #endif ! 352: #ifdef os_masscomp ! 353: Isstatus(feature,inewatom("mc500")); ! 354: #endif ! 355: #if os_4_1c | os_4_2 | os_4_3 ! 356: Isstatus(feature,inewatom("long-filenames")); ! 357: #endif ! 358: } ! 359: Iaddstat(inewatom("nofeature"),ST_NFETR,ST_NFETW,nil); ! 360: Iaddstat(inewatom("syntax"),ST_SYNT,ST_NO,nil); ! 361: Iaddstat(inewatom("uctolc"),ST_READ,ST_TOLC,nil); ! 362: Iaddstat(inewatom("dumpcore"),ST_READ,ST_CORE,nil); ! 363: Isstatus(inewatom("dumpcore"),nil); /*set up signals*/ ! 364: ! 365: Iaddstat(inewatom("chainatom"),ST_RINTB,ST_INTB,inewint(0)); ! 366: Iaddstat(inewatom("dumpmode"),ST_DMPR,ST_DMPW,nil); ! 367: Iaddstat(inewatom("appendmap"),ST_READ,ST_SET,nil); /* used by fasl */ ! 368: Iaddstat(inewatom("debugging"),ST_READ,ST_SET,nil); ! 369: Iaddstat(inewatom("evalhook"),ST_RINTB,ST_INTB,inewint(3)); ! 370: Isstatus(inewatom("evalhook"),nil); /*evalhook switch off */ ! 371: Iaddstat(inewatom("bcdtrace"),ST_READ,ST_BCDTR,nil); ! 372: Iaddstat(inewatom("ctime"),ST_CTIM,ST_NO,nil); ! 373: Iaddstat(inewatom("localtime"),ST_LOCT,ST_NO,nil); ! 374: Iaddstat(inewatom("isatty"),ST_ISTTY,ST_NO,nil); ! 375: Iaddstat(inewatom("ignoreeof"),ST_READ,ST_SET,nil); ! 376: Iaddstat(inewatom("version"),ST_READ,ST_NO,mstr("Franz Lisp, Opus 38")); ! 377: Iaddstat(inewatom("automatic-reset"),ST_READ,ST_AUTR,nil); ! 378: Iaddstat(inewatom("translink"),ST_READ,ST_TRAN,nil); ! 379: Isstatus(inewatom("translink"),nil); /* turn off tran links */ ! 380: Iaddstat(inewatom("undeffunc"),ST_UNDEF,ST_NO,nil); /* list undef funcs */ ! 381: Iaddstat(inewatom("gcstrings"),ST_READ,ST_GCSTR,nil); /* gc strings */ ! 382: ! 383: /* garbage collector things */ ! 384: ! 385: gcport = inewatom("gcport"); /* port for gc dumping */ ! 386: gccheck = inewatom("gccheck"); /* flag for checking during gc */ ! 387: gcdis = inewatom("gcdisable"); /* variable for disabling the gc */ ! 388: gcdis->a.clb = nil; ! 389: gcload = inewatom("gcload"); /* option for gc while loading */ ! 390: loading = inewatom("loading"); /* flag--in loader if = t */ ! 391: noautot = inewatom("noautotrace"); /* option to inhibit auto-trace */ ! 392: Vgcprint = inewatom("$gcprint"); /* if t then pring gc messages */ ! 393: Vgcprint->a.clb = nil; ! 394: ! 395: (gcthresh = newint())->i = tgcthresh; ! 396: gccall1 = newdot(); gccall2 = newdot(); /* used to call gcafter */ ! 397: gccall1->d.car = gcafter; /* start constructing a form for eval */ ! 398: ! 399: arrayst = mstr("ARRAY"); /* array marker in name stack */ ! 400: bcdst = mstr("BINARY"); /* binary function marker */ ! 401: listst = mstr("INTERPRETED"); /* interpreted function marker */ ! 402: macrost = mstr("MACRO"); /* macro marker */ ! 403: protst = mstr("PROTECTED"); /* protection marker */ ! 404: badst = mstr("BADPTR"); /* bad pointer marker */ ! 405: argst = mstr("ARGST"); /* argument marker */ ! 406: hunkfree = mstr("EMPTY"); /* empty hunk cell value */ ! 407: ! 408: /* type names */ ! 409: ! 410: FIDDLE(atom_name,atom_items,atom_pages,ATOMSPP); ! 411: FIDDLE(str_name,str_items,str_pages,STRSPP); ! 412: FIDDLE(other_name,other_items,other_pages,STRSPP); ! 413: FIDDLE(int_name,int_items,int_pages,INTSPP); ! 414: FIDDLE(dtpr_name,dtpr_items,dtpr_pages,DTPRSPP); ! 415: FIDDLE(doub_name,doub_items,doub_pages,DOUBSPP); ! 416: FIDDLE(sdot_name,sdot_items,sdot_pages,SDOTSPP); ! 417: FIDDLE(array_name,array_items,array_pages,ARRAYSPP); ! 418: FIDDLE(val_name,val_items,val_pages,VALSPP); ! 419: FIDDLE(funct_name,funct_items,funct_pages,BCDSPP); ! 420: ! 421: FIDDLE(hunk_name[0], hunk_items[0], hunk_pages[0], HUNK2SPP); ! 422: FIDDLE(hunk_name[1], hunk_items[1], hunk_pages[1], HUNK4SPP); ! 423: FIDDLE(hunk_name[2], hunk_items[2], hunk_pages[2], HUNK8SPP); ! 424: FIDDLE(hunk_name[3], hunk_items[3], hunk_pages[3], HUNK16SPP); ! 425: FIDDLE(hunk_name[4], hunk_items[4], hunk_pages[4], HUNK32SPP); ! 426: FIDDLE(hunk_name[5], hunk_items[5], hunk_pages[5], HUNK64SPP); ! 427: FIDDLE(hunk_name[6], hunk_items[6], hunk_pages[6], HUNK128SPP); ! 428: ! 429: FIDDLE(vect_name, vect_items, vect_pages, VECTORSPP) ! 430: FIDDLE(vecti_name, vecti_items, vecti_pages, VECTORSPP) ! 431: ! 432: (plimit = newint())->i = page_limit; ! 433: copval(plima,plimit); /* default value */ ! 434: ! 435: /* the following atom is used when reading caar, cdar, etc. */ ! 436: ! 437: xatom = inewatom("??"); ! 438: dofuns(); ! 439: #if sun_4_1c ||sun_4_2 || sun_4_2beta ! 440: hookupcore(); ! 441: #endif ! 442: /* now it is OK to collect garbage */ ! 443: ! 444: initflag = FALSE; ! 445: } ! 446: ! 447: /* matom("name") ******************************************************/ ! 448: /* */ ! 449: /* simulates an atom being read in from the reader and returns a */ ! 450: /* pointer to it. */ ! 451: /* */ ! 452: /* BEWARE: if an atom becomes "truly worthless" and is collected, */ ! 453: /* the pointer becomes obsolete. */ ! 454: /* */ ! 455: lispval ! 456: matom(string) ! 457: char *string; ! 458: { ! 459: strbuf[0] = 0; ! 460: strncat(strbuf,string,STRBLEN-1); /* strcpyn always pads to n */ ! 461: strbuf[STRBLEN-1] = 0; ! 462: return(getatom(TRUE)); ! 463: } ! 464: ! 465: /* mstr ***************************************************************/ ! 466: /* */ ! 467: /* Makes a string. Uses matom. */ ! 468: /* Not the most efficient but will do until the string from the code */ ! 469: /* itself can be used as a lispval. */ ! 470: ! 471: lispval mstr(string) char *string; ! 472: { ! 473: return((lispval)(pinewstr(string))); ! 474: } ! 475: ! 476: /* mfun("name",start) *************************************************/ ! 477: /* */ ! 478: /* Same as matom, but entry point to c code is associated with */ ! 479: /* "name" as function binding. */ ! 480: /* A pointer to the atom is returned. */ ! 481: /* */ ! 482: lispval mfun(string,start,discip) char *string; lispval (*start)(), discip; ! 483: { ! 484: lispval v; ! 485: v = inewatom(string); ! 486: v->a.fnbnd = newfunct(); ! 487: v->a.fnbnd->bcd.start = start; ! 488: v->a.fnbnd->bcd.discipline = discip; ! 489: return(v); ! 490: } ! 491: ! 492: struct ftab { ! 493: char *string; ! 494: lispval (*start)(); ! 495: lispval *discip; ! 496: }; ! 497: ! 498: lispval ! 499: mftab(table) ! 500: register struct ftab *table; ! 501: { ! 502: register lispval v; ! 503: for(;table->string;table++) { ! 504: v = inewatom(table->string); ! 505: v = v->a.fnbnd = newfunct(); ! 506: v->bcd.start = table->start; ! 507: v->bcd.discipline = *table->discip; ! 508: } ! 509: } ! 510: ! 511: static struct ftab cfuns[] = { ! 512: {"car", Lcar, &(lambda)}, ! 513: {"cdr", Lcdr, &(lambda)}, ! 514: {"eval", Leval1, &(lambda)}, ! 515: {"asin", Lasin, &(lambda)}, ! 516: {"acos", Lacos, &(lambda)}, ! 517: {"atan", Latan, &(lambda)}, ! 518: {"cos", Lcos, &(lambda)}, ! 519: {"sin", Lsin, &(lambda)}, ! 520: {"sqrt", Lsqrt, &(lambda)}, ! 521: {"exp", Lexp, &(lambda)}, ! 522: {"log", Llog, &(lambda)}, ! 523: {"lsh", Llsh, &(lambda)}, ! 524: {"bignum-leftshift", Lbiglsh, &(lambda)}, ! 525: {"sticky-bignum-leftshift", Lsbiglsh, &(lambda)}, ! 526: {"frexp", Lfrexp, &(lambda)}, ! 527: {"rot", Lrot, &(lambda)}, ! 528: {"random", Lrandom, &(lambda)}, ! 529: {"atom", Latom, &(lambda)}, ! 530: {"apply", Lapply, &(lambda)}, ! 531: {"funcall", Lfuncal, &(lambda)}, ! 532: {"lexpr-funcall", Llexfun, &(lambda)}, ! 533: {"return", Lreturn, &(lambda)}, ! 534: /* MK("cont",Lreturn,lambda), */ ! 535: {"cons", Lcons, &(lambda)}, ! 536: {"scons", Lscons, &(lambda)}, ! 537: {"bignum-to-list", Lbigtol, &(lambda)}, ! 538: {"cadr", Lcadr, &(lambda)}, ! 539: {"caar", Lcaar, &(lambda)}, ! 540: {"cddr", Lc02r, &(lambda)}, ! 541: {"caddr", Lc12r, &(lambda)}, ! 542: {"cdddr", Lc03r, &(lambda)}, ! 543: {"cadddr", Lc13r, &(lambda)}, ! 544: {"cddddr", Lc04r, &(lambda)}, ! 545: {"caddddr", Lc14r, &(lambda)}, ! 546: {"nthelem", Lnthelem, &(lambda)}, ! 547: {"eq", Leq, &(lambda)}, ! 548: {"equal", Lequal, &(lambda)}, ! 549: /** MK("zqual",Zequal,lambda), */ ! 550: {"numberp", Lnumberp, &(lambda)}, ! 551: {"dtpr", Ldtpr, &(lambda)}, ! 552: {"bcdp", Lbcdp, &(lambda)}, ! 553: {"portp", Lportp, &(lambda)}, ! 554: {"arrayp", Larrayp, &(lambda)}, ! 555: {"valuep", Lvaluep, &(lambda)}, ! 556: {"get_pname", Lpname, &(lambda)}, ! 557: {"ptr", Lptr, &(lambda)}, ! 558: {"arrayref", Larayref, &(lambda)}, ! 559: {"marray", Lmarray, &(lambda)}, ! 560: {"getlength", Lgetl, &(lambda)}, ! 561: {"putlength", Lputl, &(lambda)}, ! 562: {"getaccess", Lgeta, &(lambda)}, ! 563: {"putaccess", Lputa, &(lambda)}, ! 564: {"getdelta", Lgetdel, &(lambda)}, ! 565: {"putdelta", Lputdel, &(lambda)}, ! 566: {"getaux", Lgetaux, &(lambda)}, ! 567: {"putaux", Lputaux, &(lambda)}, ! 568: {"getdata", Lgetdata, &(lambda)}, ! 569: {"putdata", Lputdata, &(lambda)}, ! 570: {"mfunction", Lmfunction, &(lambda)}, ! 571: {"getentry", Lgtentry, &(lambda)}, ! 572: {"getdisc", Lgetdisc, &(lambda)}, ! 573: {"putdisc", Lputdisc, &(lambda)}, ! 574: {"segment", Lsegment, &(lambda)}, ! 575: {"rplaca", Lrplca, &(lambda)}, ! 576: {"rplacd", Lrplcd, &(lambda)}, ! 577: {"set", Lset, &(lambda)}, ! 578: {"replace", Lreplace, &(lambda)}, ! 579: {"infile", Linfile, &(lambda)}, ! 580: {"outfile", Loutfile, &(lambda)}, ! 581: {"terpr", Lterpr, &(lambda)}, ! 582: {"print", Lprint, &(lambda)}, ! 583: {"close", Lclose, &(lambda)}, ! 584: {"patom", Lpatom, &(lambda)}, ! 585: {"pntlen", Lpntlen, &(lambda)}, ! 586: {"read", Lread, &(lambda)}, ! 587: {"ratom", Lratom, &(lambda)}, ! 588: {"readc", Lreadc, &(lambda)}, ! 589: {"truename", Ltruename, &(lambda)}, ! 590: {"implode", Limplode, &(lambda)}, ! 591: {"maknam", Lmaknam, &(lambda)}, ! 592: {"deref", Lderef, &(lambda)}, ! 593: {"concat", Lconcat, &(lambda)}, ! 594: {"uconcat", Luconcat, &(lambda)}, ! 595: {"putprop", Lputprop, &(lambda)}, ! 596: {"monitor", Lmonitor, &(lambda)}, ! 597: {"get", Lget, &(lambda)}, ! 598: {"getd", Lgetd, &(lambda)}, ! 599: {"putd", Lputd, &(lambda)}, ! 600: {"prog", Nprog, &(nlambda)}, ! 601: {"quote", Nquote, &(nlambda)}, ! 602: {"function", Nfunction, &(nlambda)}, ! 603: {"go", Ngo, &(nlambda)}, ! 604: {"*catch", Ncatch, &(nlambda)}, ! 605: {"errset", Nerrset, &(nlambda)}, ! 606: {"status", Nstatus, &(nlambda)}, ! 607: {"sstatus", Nsstatus, &(nlambda)}, ! 608: {"err-with-message", Lerr, &(lambda)}, ! 609: {"*throw", Nthrow, &(lambda)}, /* this is a lambda now !! */ ! 610: {"reset", Nreset, &(nlambda)}, ! 611: {"break", Nbreak, &(nlambda)}, ! 612: {"exit", Lexit, &(lambda)}, ! 613: {"def", Ndef, &(nlambda)}, ! 614: {"null", Lnull, &(lambda)}, ! 615: /*{"framedump", Lframedump, &(lambda)},*/ ! 616: {"and", Nand, &(nlambda)}, ! 617: {"or", Nor, &(nlambda)}, ! 618: {"setq", Nsetq, &(nlambda)}, ! 619: {"cond", Ncond, &(nlambda)}, ! 620: {"list", Llist, &(lambda)}, ! 621: {"load", Lload, &(lambda)}, ! 622: {"nwritn", Lnwritn, &(lambda)}, ! 623: {"*process", Lprocess, &(lambda)}, /* execute a shell command */ ! 624: {"allocate", Lalloc, &(lambda)}, /* allocate a page */ ! 625: {"sizeof", Lsizeof, &(lambda)}, /* size of one item of a data type */ ! 626: {"dumplisp", Ndumplisp, &(nlambda)}, /* NEW save the world */ ! 627: {"top-level", Ntpl, &(nlambda)}, /* top level eval-print read loop */ ! 628: {"mapcar", Lmpcar, &(lambda)}, ! 629: {"maplist", Lmaplist, &(lambda)}, ! 630: {"mapcan", Lmapcan, &(lambda)}, ! 631: {"mapcon", Lmapcon, &(lambda)}, ! 632: {"assq", Lassq, &(lambda)}, ! 633: {"mapc", Lmapc, &(lambda)}, ! 634: {"map", Lmap, &(lambda)}, ! 635: {"flatc", Lflatsi, &(lambda)}, ! 636: {"alphalessp", Lalfalp, &(lambda)}, ! 637: {"drain", Ldrain, &(lambda)}, ! 638: {"killcopy", Lkilcopy, &(lambda)}, /* forks aand aborts for adb */ ! 639: {"opval", Lopval, &(lambda)}, /* sets and retrieves system variables */ ! 640: {"ncons", Lncons, &(lambda)}, ! 641: {"remob", Lforget, &(lambda)}, /* function to take atom out of hash table */ ! 642: {"not", Lnull, &(lambda)}, ! 643: {"plus", Ladd, &(lambda)}, ! 644: {"add", Ladd, &(lambda)}, ! 645: {"times", Ltimes, &(lambda)}, ! 646: {"difference", Lsub, &(lambda)}, ! 647: {"quotient", Lquo, &(lambda)}, ! 648: {"+", Lfp, &(lambda)}, ! 649: {"-", Lfm, &(lambda)}, ! 650: {"*", Lft, &(lambda)}, ! 651: {"/", Lfd, &(lambda)}, ! 652: {"1+", Lfadd1, &(lambda)}, ! 653: {"1-", Lfsub1, &(lambda)}, ! 654: {"^", Lfexpt, &(lambda)}, ! 655: {"double-to-float", Ldbtofl, &(lambda)}, ! 656: {"float-to-double", Lfltodb, &(lambda)}, ! 657: {"<", Lflessp, &(lambda)}, ! 658: {"mod", Lmod, &(lambda)}, ! 659: {"minus", Lminus, &(lambda)}, ! 660: {"absval", Labsval, &(lambda)}, ! 661: {"add1", Ladd1, &(lambda)}, ! 662: {"sub1", Lsub1, &(lambda)}, ! 663: {"greaterp", Lgreaterp, &(lambda)}, ! 664: {"lessp", Llessp, &(lambda)}, ! 665: {"any-zerop", Lzerop, &(lambda)}, /* used when bignum arg possible */ ! 666: {"zerop", Lzerop, &(lambda)}, ! 667: {"minusp", Lnegp, &(lambda)}, ! 668: {"onep", Lonep, &(lambda)}, ! 669: {"sum", Ladd, &(lambda)}, ! 670: {"product", Ltimes, &(lambda)}, ! 671: {"do", Ndo, &(nlambda)}, ! 672: {"progv", Nprogv, &(nlambda)}, ! 673: {"progn", Nprogn, &(nlambda)}, ! 674: {"prog2", Nprog2, &(nlambda)}, ! 675: {"oblist", Loblist, &(lambda)}, ! 676: {"baktrace", Lbaktrace, &(lambda)}, ! 677: {"tyi", Ltyi, &(lambda)}, ! 678: {"tyipeek", Ltyipeek, &(lambda)}, ! 679: {"untyi", Luntyi, &(lambda)}, ! 680: {"tyo", Ltyo, &(lambda)}, ! 681: {"termcapinit", Ltci, &(lambda)}, ! 682: {"termcapexe", Ltcx, &(lambda)}, ! 683: {"int:setsyntax", Lsetsyn, &(lambda)}, /* an internal function */ ! 684: {"int:getsyntax", Lgetsyntax, &(lambda)}, ! 685: {"int:showstack", LIshowstack, &(lambda)}, ! 686: {"int:franz-call", LIfranzcall, &(lambda)}, ! 687: {"makereadtable", Lmakertbl, &(lambda)}, ! 688: {"zapline", Lzapline, &(lambda)}, ! 689: {"aexplode", Lxplda, &(lambda)}, ! 690: {"aexplodec", Lxpldc, &(lambda)}, ! 691: {"aexploden", Lxpldn, &(lambda)}, ! 692: {"hashtabstat", Lhashst, &(lambda)}, ! 693: #ifdef METER ! 694: {"gcstat", Lgcstat, &(lambda)}, ! 695: #endif ! 696: {"argv", Largv, &(lambda)}, ! 697: {"arg", Larg, &(lambda)}, ! 698: {"setarg", Lsetarg, &(lambda)}, ! 699: {"showstack", Lshostk, &(lambda)}, ! 700: {"freturn", Lfretn, &(lambda)}, ! 701: {"*rset", Lrset, &(lambda)}, ! 702: {"eval1", Leval1, &(lambda)}, ! 703: {"evalframe", Levalf, &(lambda)}, ! 704: {"evalhook", Levalhook, &(lambda)}, ! 705: {"funcallhook", Lfunhook, &(lambda)}, ! 706: {"int:fclosure-stack-stuff", LIfss, &(lambda)}, ! 707: {"resetio", Nioreset, &(nlambda)}, ! 708: {"chdir", Lchdir, &(lambda)}, ! 709: {"ascii", Lascii, &(lambda)}, ! 710: {"boole", Lboole, &(lambda)}, ! 711: {"type", Ltype, &(lambda)}, /* returns type-name of argument */ ! 712: {"fix", Lfix, &(lambda)}, ! 713: {"float", Lfloat, &(lambda)}, ! 714: {"fact", Lfact, &(lambda)}, ! 715: {"cpy1", Lcpy1, &(lambda)}, ! 716: {"Divide", LDivide, &(lambda)}, ! 717: {"Emuldiv", LEmuldiv, &(lambda)}, ! 718: {"readlist", Lreadli, &(lambda)}, ! 719: {"plist", Lplist, &(lambda)}, /* gives the plist of an atom */ ! 720: {"setplist", Lsetpli, &(lambda)}, /* get plist of an atom */ ! 721: {"eval-when", Nevwhen, &(nlambda)}, ! 722: {"syscall", Lsyscall, &(lambda)}, ! 723: {"intern", Lntern, &(lambda)}, ! 724: {"ptime", Lptime, &(lambda)}, /* return process user time */ ! 725: {"fork", Lfork, &(lambda)}, /* turn on fork and wait */ ! 726: {"wait", Lwait, &(lambda)}, ! 727: /* MK("pipe",Lpipe,lambda), */ ! 728: /* MK("fdopen",Lfdopen,lambda), */ ! 729: {"exece", Lexece, &(lambda)}, ! 730: {"gensym", Lgensym, &(lambda)}, ! 731: {"remprop", Lremprop, &(lambda)}, ! 732: {"bcdad", Lbcdad, &(lambda)}, ! 733: {"symbolp", Lsymbolp, &(lambda)}, ! 734: {"stringp", Lstringp, &(lambda)}, ! 735: {"rematom", Lrematom, &(lambda)}, ! 736: /** MK("prname",Lprname,lambda), */ ! 737: {"getenv", Lgetenv, &(lambda)}, ! 738: {"I-throw-err", Lctcherr, &(lambda)}, /* directly force a throw or error */ ! 739: {"makunbound", Lmakunb, &(lambda)}, ! 740: {"haipart", Lhaipar, &(lambda)}, ! 741: {"haulong", Lhau, &(lambda)}, ! 742: {"signal", Lsignal, &(lambda)}, ! 743: {"fasl", Lfasl, &(lambda)}, /* NEW - new fasl loader */ ! 744: {"cfasl", Lcfasl, &(lambda)}, /* read in compiled C file */ ! 745: {"getaddress", Lgetaddress, &(lambda)}, ! 746: {"removeaddress", Lrmadd, &(lambda)}, /* unbind symbols */ ! 747: {"make-c-thunk", Lmkcth, &(lambda)}, /* make wrappers */ ! 748: {"boundp", Lboundp, &(lambda)}, /* tells if an atom is bound */ ! 749: {"fake", Lfake, &(lambda)}, /* makes a fake lisp pointer */ ! 750: /*** MK("od",Lod,lambda), /* dumps info */ ! 751: {"maknum", Lmaknum, &(lambda)}, /* converts a pointer to an integer */ ! 752: {"*mod", LstarMod, &(lambda)}, /* return fixnum modulus */ ! 753: {"*invmod", Lstarinvmod, &(lambda)}, /* return fixnum modulus ^-1 */ ! 754: {"fseek", Lfseek, &(lambda)}, /* seek to a specific byte in a file */ ! 755: {"fileopen", Lfileopen, &( lambda)}, ! 756: {"pv%", Lpolyev, &(lambda)}, /* polynomial evaluation instruction*/ ! 757: {"cprintf", Lcprintf, &(lambda)}, /* formatted print */ ! 758: {"sprintf", Lsprintf, &(lambda)}, /* formatted print to string */ ! 759: {"copyint*", Lcopyint, &(lambda)}, /* copyint* */ ! 760: {"purcopy", Lpurcopy, &(lambda)}, /* pure copy */ ! 761: {"purep", Lpurep, &(lambda)}, /* check if pure */ ! 762: {"int:memreport", LImemory, &(lambda)}, /* dump memory stats */ ! 763: /* ! 764: * Hunk stuff ! 765: */ ! 766: {"*makhunk", LMakhunk, &(lambda)}, /* special hunk creater */ ! 767: {"hunkp", Lhunkp, &(lambda)}, /* test a hunk */ ! 768: {"cxr", Lcxr, &(lambda)}, /* cxr of a hunk */ ! 769: {"rplacx", Lrplcx, &(lambda)}, /* replace element of a hunk */ ! 770: {"*rplacx", Lstarrpx, &(lambda)}, /* rplacx used by hunk */ ! 771: {"hunksize", Lhunksize, &(lambda)}, /* size of a hunk */ ! 772: {"hunk-to-list", Lhtol, &(lambda)}, /* hunk to list */ ! 773: {"new-vector", Lnvec, &(lambda)}, ! 774: {"new-vectori-byte", Lnvecb, &(lambda)}, ! 775: {"new-vectori-word", Lnvecw, &(lambda)}, ! 776: {"new-vectori-long", Lnvecl, &(lambda)}, ! 777: {"vectorp", Lvectorp, &(lambda)}, ! 778: {"vectorip", Lpvp, &(lambda)}, ! 779: {"int:vref", LIvref, &(lambda)}, ! 780: {"int:vset", LIvset, &(lambda)}, ! 781: {"int:vsize", LIvsize, &(lambda)}, ! 782: {"vsetprop", Lvsp, &(lambda)}, ! 783: {"vprop", Lvprop, &(lambda)}, ! 784: {"probef", Lprobef, &(lambda)}, /* test file existance */ ! 785: {"substring", Lsubstring, &(lambda)}, ! 786: {"substringn", Lsstrn, &(lambda)}, ! 787: {"character-index", Lcharindex, &(lambda)}, /* index of char in string */ ! 788: {"time-string", Ltymestr, &(lambda)}, ! 789: {"gc", Ngc, &(nlambda)}, ! 790: {"gcafter", Ngcafter, &(nlambda)}, /* garbage collection wind-up */ ! 791: {0} ! 792: }; ! 793: static dofuns(){mftab(cfuns);}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.