void TM1628::setTime(int hour,int min,int sec) { if (hour >= 100) setSeg(0, (hour/100)); if (hour >= 10) setSeg(1, (hour%100)/10); setSeg(2, (hour%100)%10); setSeg(3, (min/10)); setSeg(4, (min%10)); setSeg(5, (sec/10)); setSeg(6, (sec%10)); update(); }
static route convertSPtoRoute (sgraph* g, snode* fst, snode* lst) { route rte; snode* ptr; snode* next; snode* prev; /* node in shortest path just previous to next */ int i, sz = 0; cell* cp; cell* ncp; segment seg; double fix, b1, b2; int l1, l2; pointf bp1, bp2, prevbp; /* bend points */ /* count no. of nodes in shortest path */ for (ptr = fst; ptr; ptr = N_DAD(ptr)) sz++; rte.n = 0; rte.segs = N_NEW(sz-2, segment); /* at most sz-2 segments */ seg.prev = seg.next = 0; ptr = prev = N_DAD(fst); next = N_DAD(ptr); if (IsNode(ptr->cells[0])) cp = ptr->cells[1]; else cp = ptr->cells[0]; bp1 = sidePt (ptr, cp); while (N_DAD(next)!=NULL) { ncp = cellOf (prev, next); updateWts (g, ncp, N_EDGE(ptr)); /* add seg if path bends or at end */ if ((ptr->isVert != next->isVert) || (N_DAD(next) == lst)) { if (ptr->isVert != next->isVert) bp2 = midPt (ncp); else bp2 = sidePt(next, ncp); if (ptr->isVert) { /* horizontal segment */ if (ptr == N_DAD(fst)) l1 = B_NODE; else if (prevbp.y > bp1.y) l1 = B_UP; else l1 = B_DOWN; if (ptr->isVert != next->isVert) { if (next->cells[0] == ncp) l2 = B_UP; else l2 = B_DOWN; } else l2 = B_NODE; fix = cp->bb.LL.y; b1 = cp->bb.LL.x; b2 = ncp->bb.LL.x; } else { /* vertical segment */ if (ptr == N_DAD(fst)) l1 = B_NODE; else if (prevbp.x > bp1.x) l1 = B_RIGHT; else l1 = B_LEFT; if (ptr->isVert != next->isVert) { if (next->cells[0] == ncp) l2 = B_RIGHT; else l2 = B_LEFT; } else l2 = B_NODE; fix = cp->bb.LL.x; b1 = cp->bb.LL.y; b2 = ncp->bb.LL.y; } setSeg (&seg, !ptr->isVert, fix, b1, b2, l1, l2); rte.segs[rte.n++] = seg; cp = ncp; prevbp = bp1; bp1 = bp2; if ((ptr->isVert != next->isVert) && (N_DAD(next) == lst)) { bp2 = sidePt(next, ncp); l2 = B_NODE; if (next->isVert) { /* horizontal segment */ if (prevbp.y > bp1.y) l1 = B_UP; else l1 = B_DOWN; fix = cp->bb.LL.y; b1 = cp->bb.LL.x; b2 = ncp->bb.LL.x; } else { if (prevbp.x > bp1.x) l1 = B_RIGHT; else l1 = B_LEFT; fix = cp->bb.LL.x; b1 = cp->bb.LL.y; b2 = ncp->bb.LL.y; } setSeg (&seg, !next->isVert, fix, b1, b2, l1, l2); rte.segs[rte.n++] = seg; } ptr = next; } prev = next; next = N_DAD(next); } rte.segs = realloc (rte.segs, rte.n*sizeof(segment)); for (i=0; i<rte.n; i++) { if (i > 0) rte.segs[i].prev = rte.segs + (i-1); if (i < rte.n-1) rte.segs[i].next = rte.segs + (i+1); } return rte; }
//8e mov seg,memw auto V30MZ::opMoveSegMem() { wait(1); modRM(); setSeg(getMem(Word)); if((modrm.reg & 3) == 3) state.poll = false; }