int dsortidx(darray *pvda, int idxs[], int sze) { darray_t *pda = (darray_t *)pvda; if (sze != pda->elem_num_) { return 0; } darray_t *ptmp = (darray_t *)dclone(pda); ptmp = dclear(ptmp); int i; for (i = 0; i < sze; ++i) { int id = idxs[i]; dpush(ptmp, dgetp(pda, id), dgetlen(pda, id)); } pda = drefer(pda, ptmp); free(ptmp); return 1; }
void getstatement(void) /* get next statement */ { EPNODE *ep; char *qname; VARDEF *vdef; if (nextc == ';') { /* empty statement */ scan(); return; } if (esupport&E_OUTCHAN && nextc == '$') { /* channel assignment */ ep = getchan(); addchan(ep); } else { /* ordinary definition */ ep = getdefn(); qname = qualname(dname(ep), 0); if (esupport&E_REDEFW && (vdef = varlookup(qname)) != NULL) { if (vdef->def != NULL && epcmp(ep, vdef->def)) { wputs(qname); if (vdef->def->type == ':') wputs(": redefined constant expression\n"); else wputs(": redefined\n"); } else if (ep->v.kid->type == FUNC && vdef->lib != NULL) { wputs(qname); wputs(": definition hides library function\n"); } } if (ep->type == ':') dremove(qname); else dclear(qname); dpush(qname, ep); } if (nextc != EOF) { if (nextc != ';') syntax("';' expected"); scan(); } }
void varset( /* set a variable's value */ char *vname, int assign, double val ) { char *qname; EPNODE *ep1, *ep2; /* get qualified name */ qname = qualname(vname, 0); /* check for quick set */ if ((ep1 = dlookup(qname)) != NULL && ep1->v.kid->type == SYM && (ep1->type == ':') <= (assign == ':')) { ep2 = ep1->v.kid->sibling; if (ep2->type == NUM) { ep2->v.num = val; ep1->type = assign; return; } } /* hand build definition */ ep1 = newnode(); ep1->type = assign; ep2 = newnode(); ep2->type = SYM; ep2->v.name = savestr(vname); addekid(ep1, ep2); ep2 = newnode(); ep2->type = NUM; ep2->v.num = val; addekid(ep1, ep2); if (assign == ':') dremove(qname); else dclear(qname); dpush(qname, ep1); }
void dcleanup( /* clear definitions (0->vars,1->output,2->consts) */ int lvl ) { int i; VARDEF *vp; EPNODE *ep; /* if context is global, clear all */ for (i = 0; i < NHASH; i++) for (vp = hashtbl[i]; vp != NULL; vp = vp->next) if (incontext(vp->name)) { if (lvl >= 2) dremove(vp->name); else dclear(vp->name); } if (lvl >= 1) { for (ep = outchan; ep != NULL; ep = ep->sibling) epfree(ep); outchan = NULL; } }
INT CMain::Render() { m_pDev->BeginScene(); m_pDev->Clear(LC_CLEAR_COLOR_BUFFER | LC_CLEAR_DEPTH_BUFFER); LCXCOLOR dclear(0,0,0,1); m_pDev->SetRenderState(LC_RS_CLEAR_COLOR, &dclear); m_pCam->SetTransformPrj(); m_pCam->SetTransformViw(); m_pDev->SetRenderState(LC_RS_CULL_FACE, LC_ST_DISABLE); m_pDev->SetRenderState(LC_RS_LIGHTING, LC_ST_DISABLE); // m_pXYZ->Render(); // m_pGrid->Render(); m_pSpt->Begin(); m_pSpt->SetRenderState(LC_RS_BLEND_SRC , LC_ST_SRC_ALPHA); m_pSpt->SetRenderState(LC_RS_BLEND_DEST, LC_ST_ONE); m_pEft1->Render(); m_pEft2->Render(); m_pEft3->Render(); m_pEft4->Render(); m_pSpt->End(); m_pDev->EndScene(); return LC_OK; }
dstrlist* dstrlex_parse(const dstring* text, int* errorcode) { int in_escape = 0; int in_string = 0; dstring* buffer = dnew(); dstrlist* tokens = dlist_new(); dstrlen_t i, len; int ch; if (errorcode) { *errorcode = DSTRLEX_OK; } len = text->len; for(i = 0; i < len; i++) { ch = text->data[i]; if (in_escape) { switch (ch) { case 'n': dcatc(buffer, '\n'); break; case 'r': dcatc(buffer, '\r'); break; case '0': dcatc(buffer, '\0'); break; case '"': dcatc(buffer, '"'); break; case 't': dcatc(buffer, '\t'); break; case '\\': dcatc(buffer, '\\'); break; default: dcatc(buffer, ch); break; } in_escape = 0; } else if (in_string) { if (ch == '"') { dlist_add(tokens, buffer); dclear(buffer); in_string = 0; } else if (ch == '\\') { in_escape = 1; } else { dcatc(buffer, ch); } } else { if (ch == '"') { if (buffer->len) { dlist_add(tokens, buffer); dclear(buffer); } in_string = 1; } else if (ch == '\\') { in_escape = 1; } else if (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r') { if (buffer->len) { dlist_add(tokens, buffer); dclear(buffer); } } else { dcatc(buffer, ch); } } } if (in_escape) { if (errorcode) *errorcode = DSTRLEX_ESCAPE; dfree(buffer); dlist_free(tokens); return NULL; } else if (in_string) { if (errorcode) *errorcode = DSTRLEX_STRING; dfree(buffer); dlist_free(tokens); return NULL; } else if (buffer->len) { dlist_add(tokens, buffer); } dfree(buffer); return tokens; }