Example #1
0
//
// 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);
        }
      }
    }
  }
}
Example #2
0
/**
 * 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
}