pointer seld_notes() { amc_found=tst_alive_amc(); if (!amc_found && !find_amc()) return Error_0("STOP! amc not running"); BMessage mes(STORE_SEL), reply; StoredNote *notes; Settings *settings; ssize_t bytes=0; int n, items=0; amc_application.SendMessage(&mes,&reply); puts("amc did reply"); switch (reply.what) { case CONTENTS_SEL: reply.FindData(SELD_NOTES,B_OBJECT_TYPE,(const void**)(¬es),&bytes); items=bytes/sizeof(StoredNote); reply.FindData(SETTINGS,B_OBJECT_TYPE,(const void**)(&settings),&bytes); break; default: return Error_0("seld notes: unknown reply"); } pointer ptr, out=nil_pointer(); for (n=0;n<items;++n) { ptr=cons(mk_integer(notes[n].lnr), cons(mk_integer(notes[n].snr), cons(mk_integer(notes[n].sign), cons(mk_integer(notes[n].dur),nil_pointer())))); out=cons(ptr,out); } ptr=cons(mk_integer(settings->meter),nil_pointer()); ptr=cons(mk_symbol("meter"),ptr); ptr=cons(ptr,nil_pointer()); return cons(ptr,out); }
/* (random [optional-max]) */ static pointer s_random(scheme* sc, pointer args) { if(!seed_inited) { srand(time(0)); seed_inited = 1; } if(args == sc->NIL) return mk_integer(sc, rand()); pointer a = sc->vptr->pair_car(args); if(a == sc->NIL || !sc->vptr->is_integer(a)) { /* TODO: this should be an error */ return sc->F; } long v = sc->vptr->ivalue(a); return mk_integer(sc, rand() % v); }
pointer list_to_int(pointer a) { int res=0; char *dispatch; if (is_symbol(car(a))) { dispatch=sym_name(car(a)); if (!strcmp(dispatch,"random")) return random_int(cadr(a),caddr(a)); else return Error_1("list>int: unknown dispatch type:",car(a)); } else return Error_1("list>int: no symbol:",car(a)); return mk_integer(res); }
pointer random_int(pointer v1,pointer v2) { int minv=int_value(v1), maxv=int_value(v2); return mk_integer(minv + rand() % (maxv - minv + 1)); }
value_ptr Integer_literal::eval(const Environment&) const { return mk_integer(val_); }