void CacheList::preload_cache_object(int type) { if (type<0xffff) { if (!figures[type]->get_cflag(CFLAG_NEED_CACHE_IN)) // see if it's already marked { figures[type]->set_cflag(CFLAG_NEED_CACHE_IN,1); void *cache_fun=figures[type]->get_fun(OFUN_GET_CACHE_LIST); if (cache_fun) { LSpace *sp = LSpace::Current; LSpace::Current = &LSpace::Perm; void *call_with=NULL; push_onto_list(LNumber::Create(type),call_with); void *CacheList = ((LSymbol *)cache_fun)->EvalFunction(call_with); PtrRef r1(CacheList); if (CacheList && lcar(CacheList)) { void *obj_list=lcar(CacheList); while (obj_list) { int t=lnumber_value(CAR(obj_list)); if (t<0 || t>=total_objects) lbreak("Get cache list returned a bad object number %d\n",t); else preload_cache_object(t); obj_list=CDR(obj_list); } } if (CacheList && lcdr(CacheList)) { void *id_list=lcar(lcdr(CacheList)); while (id_list) { int id=lnumber_value(CAR(id_list)); if (id<0 || id>=total) lbreak("Get cache list returned a bad id number %d\n",id); else if (list[id].last_access<0) list[id].last_access=-2; else list[id].last_access=2; id_list=CDR(id_list); } } LSpace::Current=sp; } } } }
idle_manager::idle_manager() { cursor_frame_on=-1; first=last=0; bFILE *fp=open_file("art/wait.spe","rb"); char name[20]; spec_directory sd(fp); for (int i=0;i<total_wait_frames;i++) { sprintf(name,"watch_%d",i+1); spec_entry *se=sd.find(name); if (!se) { lbreak("could not find %s in %s\n",name,"art/wait.spe"); exit(0); } wait_cursors[i]=new image(se,fp); } delete fp; }