// // SOUND frq, dur [, vol] [BG] // void cmd_sound() { int frq, ms = 250, vol = 100; int bg = 0; frq = par_getint(); if (!prog_error) { par_getcomma(); if (!prog_error) { ms = par_getint(); if (!prog_error) { if (code_peek() == kwTYPE_SEP) { par_getcomma(); if (!prog_error) { vol = par_getint(); } } if (code_peek() == kwBACKG) { code_skipnext(); bg = 1; } if (!prog_error) { dev_sound(frq, ms, vol, bg); } } } } }
/** * build parameter table */ int slib_build_ptable(slib_par_t *ptable) { #if defined(LNX_EXTLIB) || defined(WIN_EXTLIB) int pcount = 0; var_t *arg = NULL; byte ready, code; bcip_t ofs; if (code_peek() == kwTYPE_LEVEL_BEGIN) { code_skipnext(); ready = 0; do { code = code_peek(); switch (code) { case kwTYPE_EOC: code_skipnext(); break; case kwTYPE_SEP: code_skipsep(); break; case kwTYPE_LEVEL_END: ready = 1; break; case kwTYPE_VAR: // variable ofs = prog_ip; if (code_isvar()) { // push parameter ptable[pcount].var_p = code_getvarptr(); ptable[pcount].byref = 1; pcount++; break; } // restore IP prog_ip = ofs; // no 'break' here default: // default --- expression (BYVAL ONLY) arg = v_new(); eval(arg); if (!prog_error) { // push parameter ptable[pcount].var_p = arg; ptable[pcount].byref = 0; pcount++; } else { v_free(arg); v_detach(arg); return pcount; } } } while (!ready); // kwTYPE_LEVEL_END code_skipnext(); } return pcount; #else return 0; #endif }