static void putSrc(any s, any k) { if (!isNil(val(Dbg)) && !isExt(s) && InFile && InFile->name) { any x, y; cell c1; Push(c1, boxCnt(InFile->src)); data(c1) = cons(data(c1), mkStr(InFile->name)); x = get(s, Dbg); if (!k) { if (isNil(x)) put(s, Dbg, cons(data(c1), Nil)); else car(x) = data(c1); } else if (isNil(x)) put(s, Dbg, cons(Nil, cons(data(c1), Nil))); else { for (y = cdr(x); isCell(y); y = cdr(y)) if (caar(y) == k) { cdar(y) = data(c1); drop(c1); return; } cdr(x) = cons(cons(k, data(c1)), cdr(x)); } drop(c1); } }
void initSymbols(void) { int i; Nil = symPtr(Avail), Avail = Avail->car->car; // Allocate 2 cells for NIL val(Nil) = tail(Nil) = val(Nil+1) = tail(Nil+1) = Nil; Zero = box(0); One = box(2); for (i = 0; i < IHASH; ++i) Intern[i] = Transient[i] = Nil; for (i = 0; i < EHASH; ++i) Extern[i] = Nil; initSym(mkStr(_OS), "*OS"); DB = initSym(Nil, "*DB"); Meth = initSym(box(num(doMeth)), "meth"); Quote = initSym(box(num(doQuote)), "quote"); T = initSym(Nil, "T"), val(T) = T; // Last protected symbol mkExt(val(DB) = DbVal = consStr(DbTail = box('1'))); Extern['1'] = cons(DbVal, Nil); Solo = initSym(Zero, "*Solo"); PPid = initSym(Nil, "*PPid"); Pid = initSym(boxCnt(getpid()), "*Pid"); At = initSym(Nil, "@"); At2 = initSym(Nil, "@@"); At3 = initSym(Nil, "@@@"); This = initSym(Nil, "This"); Dbg = initSym(Nil, "*Dbg"); Zap = initSym(Nil, "*Zap"); Ext = initSym(Nil, "*Ext"); Scl = initSym(Zero, "*Scl"); Class = initSym(Nil, "*Class"); Run = initSym(Nil, "*Run"); Hup = initSym(Nil, "*Hup"); Sig1 = initSym(Nil, "*Sig1"); Sig2 = initSym(Nil, "*Sig2"); Up = initSym(Nil, "^"); Err = initSym(Nil, "*Err"); Msg = initSym(Nil, "*Msg"); Uni = initSym(Nil, "*Uni"); Led = initSym(Nil, "*Led"); Tsm = initSym(Nil, "*Tsm"); Adr = initSym(Nil, "*Adr"); Fork = initSym(Nil, "*Fork"); Bye = initSym(Nil, "*Bye"); // Last unremovable symbol for (i = 0; i < (int)(sizeof(Symbols)/sizeof(symInit)); ++i) initSym(box(num(Symbols[i].code)), Symbols[i].name); }
// (sys 'any ['any]) -> sym any doSys(any x) { any y; y = evSym(x = cdr(x)); { char nm[bufSize(y)]; bufString(y,nm); if (!isCell(x = cdr(x))) return mkStr(getenv(nm)); y = evSym(x); { char val[bufSize(y)]; bufString(y,val); return setenv(nm,val,1)? Nil : y; } } }
// (pd-board) -> sym any pd_board(any x) { return mkStr(MACRO_NAME(ALCOR_BOARD)); }
// (pd-cpu) -> sym any pd_cpu(any x) { return mkStr(MACRO_NAME(ALCOR_CPU)); }
// (pd-platform) -> sym any pd_platform(any x) { return mkStr(MACRO_NAME(ALCOR_PLATFORM)); }