|
|
1.1 ! root 1: #include "global.h" ! 2: ! 3: /* Ngcafter *************************************************************/ ! 4: /* */ ! 5: /* Default garbage collector routine which does nothing. */ ! 6: ! 7: lispval ! 8: Ngcafter() ! 9: { ! 10: return(nil); ! 11: } ! 12: ! 13: /* Nopval *************************************************************/ ! 14: /* */ ! 15: /* Routine which allows system registers and options to be examined */ ! 16: /* and modified. Calls copval, the routine which is called by c code */ ! 17: /* to do the same thing from inside the system. */ ! 18: ! 19: lispval ! 20: Nopval() ! 21: { ! 22: lispval quant; ! 23: snpand(0); ! 24: ! 25: if( TYPE(lbot->val) != DTPR ) ! 26: return(error("BAD CALL TO OPVAL",TRUE)); ! 27: quant = eval(lbot->val->car); /* evaluate name of sys variable */ ! 28: while( TYPE(quant) != ATOM ) ! 29: quant = error("FIRST ARG TO OPVAL MUST BE AN ATOM",TRUE); ! 30: ! 31: if( (vtemp=lbot->val->cdr) != nil && TYPE(lbot->val->cdr) != DTPR ) ! 32: return(error("BAD ARG LIST FOR OPVAL",TRUE)); ! 33: return(copval( ! 34: quant, ! 35: vtemp==nil ? (lispval)CNIL : eval(vtemp->car) ! 36: )); ! 37: } ! 38: /* copval *************************************************************/ ! 39: /* This routine keeps track of system quantities, and is called from */ ! 40: /* C code. If the second argument is CNIL, no change is made in the */ ! 41: /* quantity. */ ! 42: /* Since this routine may call newdot() if the second argument is not */ ! 43: /* CNIL, the arguments should be protected somehow in that case. */ ! 44: ! 45: lispval ! 46: copval(option,value) ! 47: lispval option, value; ! 48: { ! 49: struct dtpr fake; ! 50: lispval rval; ! 51: snpand(0); ! 52: ! 53: ! 54: if( option->plist == nil && value != (lispval) CNIL) ! 55: { ! 56: protect(option); protect(value); ! 57: option->plist = newdot(); ! 58: option->plist->car = sysa; ! 59: option->plist->cdr = newdot(); ! 60: option->plist->cdr->car = value; ! 61: unprot(); unprot(); ! 62: return(nil); ! 63: } ! 64: ! 65: ! 66: if( option->plist == nil ) return(nil); ! 67: ! 68: fake.cdr = option->plist; ! 69: option = (lispval) (&fake); ! 70: ! 71: while( option->cdr != nil ) /* can't be nil first time through */ ! 72: { ! 73: option = option->cdr; ! 74: if( option->car == sysa ) ! 75: { ! 76: rval = option->cdr->car; ! 77: if( value != (lispval)CNIL ) ! 78: option->cdr->car = value; ! 79: return(rval); ! 80: } ! 81: option = option->cdr; ! 82: } ! 83: ! 84: if( value != (lispval)CNIL ) ! 85: { ! 86: protect(option); protect(value); ! 87: option->cdr = newdot(); ! 88: option->cdr->car = sysa; ! 89: option->cdr->cdr = newdot(); ! 90: option->cdr->cdr->car = value; ! 91: unprot(); unprot(); ! 92: } ! 93: ! 94: ! 95: return(nil); ! 96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.