static mpdm_t F_escape(F_ARGS) { mpdm_t v, low, high, f; v = A0; low = A1; high = A2; f = A3; return mpdm_escape(v, mpdm_string(low)[0], mpdm_string(high)[0], f); }
static mpdm_t F_bincall(F_ARGS) { void *func; char *ptr = mpdm_wcstombs(mpdm_string(mpdm_get_i(a, 0)), NULL); sscanf(ptr, "%p", &func); free(ptr); return MPDM_X(func); }
/** * mpdm_get_o - Gets a value from an object. * @o: the object * @i: the index * * Returns the value from @o by index @i, or NULL if there is no * value addressable by that index. * [Objects] */ mpdm_t mpdm_get_o(const mpdm_t o, const mpdm_t i) /* do not use it; use mpdm_get() */ { mpdm_t r; mpdm_ref(i); r = mpdm_get_wcs(o, mpdm_string(i)); mpdm_unref(i); return r; }
/** integer = ord(str); */ static mpdm_t F_ord(F_ARGS) { int ret = 0; mpdm_t v = mpdm_get_i(a, 0); if (v != NULL) { wchar_t *ptr = mpdm_string(v); ret = (int) *ptr; } return MPDM_I(ret); }
/** print(arg1 [,arg2 ... argn]); */ static mpdm_t F_print(F_ARGS) { int n; for (n = 0; n < mpdm_size(a); n++) { if (n) mpdm_write_wcs(stdout, L" "); mpdm_write_wcs(stdout, mpdm_string(A(n))); } mpdm_write_wcs(stdout, L"\n"); return NULL; }
/** * mpsl_is_true - Tests if a value is true. * @v: the value * * If @v is a valid MPSL 'false' value (NULL, "" or the "0" string), * returns zero, or nonzero otherwise. */ int mpsl_is_true(mpdm_t v) { /* if value is NULL, it's false */ if (v == NULL) return 0; /* if it's a printable string... */ if (v->flags & MPDM_STRING) { wchar_t *ptr = mpdm_string(v); /* ... and it's "" or the "0" string, it's false */ if (*ptr == L'\0' || (*ptr == L'0' && *(ptr + 1) == L'\0')) return 0; } /* any other case is true */ return 1; }
static mpdm_t kde4_drv_form(mpdm_t a, mpdm_t ctxt) { int n; mpdm_t widget_list; QWidget *qlist[100]; mpdm_t r; KDialog *dialog = new KDialog(window); dialog->setModal(true); dialog->setButtons(KDialog::Ok | KDialog::Cancel); widget_list = mpdm_aget(a, 0); KVBox *vb = new KVBox(dialog); dialog->setMainWidget(vb); for (n = 0; n < mpdm_size(widget_list); n++) { mpdm_t w = mpdm_aget(widget_list, n); wchar_t *type; mpdm_t t; KHBox *hb = new KHBox(vb); type = mpdm_string(mpdm_hget_s(w, L"type")); if ((t = mpdm_hget_s(w, L"label")) != NULL) { QLabel *ql = new QLabel(hb); ql->setText(str_to_qstring(mpdm_gettext(t))); } t = mpdm_hget_s(w, L"value"); if (wcscmp(type, L"text") == 0) { mpdm_t h; QComboBox *ql = new QComboBox(hb); ql->setEditable(true); ql->setMinimumContentsLength(30); ql->setMaxVisibleItems(8); if (t != NULL) ql->setEditText(str_to_qstring(t)); qlist[n] = ql; if ((h = mpdm_hget_s(w, L"history")) != NULL) { int i; /* has history; fill it */ h = mp_get_history(h); for (i = mpdm_size(h) - 1; i >= 0; i--) ql->addItem(str_to_qstring(mpdm_aget(h, i))); } } else if (wcscmp(type, L"password") == 0) { QLineEdit *ql = new QLineEdit(hb); ql->setEchoMode(QLineEdit::Password); qlist[n] = ql; } else if (wcscmp(type, L"checkbox") == 0) { QCheckBox *qc = new QCheckBox(hb); if (mpdm_ival(t)) qc->setCheckState(Qt::Checked); qlist[n] = qc; } else if (wcscmp(type, L"list") == 0) { int i; QListWidget *ql = new QListWidget(hb); ql->setMinimumWidth(480); /* use a monospaced font */ ql->setFont(QFont(QString("Mono"))); mpdm_t l = mpdm_hget_s(w, L"list"); for (i = 0; i < mpdm_size(l); i++) ql->addItem(str_to_qstring(mpdm_aget(l, i))); ql->setCurrentRow(mpdm_ival(t)); qlist[n] = ql; } if (n == 0) qlist[n]->setFocus(Qt::OtherFocusReason); } n = dialog->exec(); if (!n) return NULL; r = MPDM_A(mpdm_size(widget_list)); /* fill the return values */ for (n = 0; n < mpdm_size(widget_list); n++) { mpdm_t w = mpdm_aget(widget_list, n); mpdm_t v = NULL; wchar_t *type; type = mpdm_string(mpdm_hget_s(w, L"type")); if (wcscmp(type, L"text") == 0) { mpdm_t h; QComboBox *ql = (QComboBox *) qlist[n]; v = qstring_to_str(ql->currentText()); /* if it has history, add to it */ if ((h = mpdm_hget_s(w, L"history")) != NULL && v != NULL && mpdm_cmp_s(v, L"") != 0) { h = mp_get_history(h); if (mpdm_cmp(v, mpdm_aget(h, -1)) != 0) mpdm_push(h, v); } } else if (wcscmp(type, L"password") == 0) { QLineEdit *ql = (QLineEdit *) qlist[n]; v = qstring_to_str(ql->text()); } else if (wcscmp(type, L"checkbox") == 0) { QCheckBox *qb = (QCheckBox *) qlist[n]; v = MPDM_I(qb->checkState() == Qt::Checked); } else if (wcscmp(type, L"list") == 0) { QListWidget *ql = (QListWidget *) qlist[n]; v = MPDM_I(ql->currentRow()); } mpdm_aset(r, v, n); } return r; }
static mpdm_t F_string(F_ARGS) { return MPDM_S(mpdm_string(A0)); }