void StackPush( int type, char *data, int size ) { STMDATA *stm; double *dptr; if ( stm_cur >= stm_maxptr ) throw HSPERR_STACK_OVERFLOW; stm = stm_cur; stm->type = type; switch( type ) { case HSPVAR_FLAG_LABEL: case HSPVAR_FLAG_INT: // stm->mode = STMMODE_SELF; stm->ival = *(int *)data; // stm->ptr = (char *)&(stm->ival); stm_cur++; return; case HSPVAR_FLAG_DOUBLE: //dptr = (double *)&stm->ival; //*dptr = *(double *)data; memcpy(&stm->ival, data, sizeof(double)); // stm->mode = STMMODE_SELF; // stm->ptr = (char *)dptr; stm_cur++; return; default: break; } StackAlloc( stm, size ); memcpy( stm->ptr, data, size ); stm_cur++; }
void DrawCircle(udword nb_segments, const Matrix4x4& matrix, const Point& color, float radius, bool semi_circle) { float step = TWOPI / float(nb_segments); udword segs = nb_segments; if(semi_circle) segs /= 2; Point* tmp = (Point*)StackAlloc(sizeof(Point)*segs*2); for(udword i=0;i<segs;i++) { udword j=i+1; if(j==nb_segments) j=0; const float angle0 = float(i) * step; const float angle1 = float(j) * step; const Point p0 = Point(radius * sinf(angle0), radius * cosf(angle0), 0.0f) * matrix; const Point p1 = Point(radius * sinf(angle1), radius * cosf(angle1), 0.0f) * matrix; // DrawLine(p0, p1, color); tmp[i*2+0] = p0; tmp[i*2+1] = p1; } DrawSegments(segs, tmp, color, 1.0f); }
void *StackPushSize( int type, int size ) { STMDATA *stm; if ( stm_cur >= stm_maxptr ) throw HSPERR_STACK_OVERFLOW; stm = stm_cur; stm->type = type; StackAlloc( stm, size ); stm_cur++; return (void *)stm->ptr; }
int main (int argc, char *argv[]) { Descriptor d = {0, NULL}, *dp; dp =&d; printf("%ld\n", A(dp, n)); StackAlloc(BagBytes, a, 10); StackAlloc(BagBytes, b, 10); printf("%p\n", a); printf("%p\n", b); #if 0 printf("%d\n", size219); printf("%d\n", size320); printf("%d\n", P(4)); printf("%d\n", P(5)); printf("%d\n", P(3)); #endif return 0; }
int main(void) { Stack s; if(StackAlloc(&s, 100) == -1){ puts("すたっくの確保に失敗しました。"); return (1); } while(1){ int m, x; printf("現在のでーた数:%d/%d\n", StackNo(&s), StackSize(&s)); printf("(1)ぷっしゅ (2)ぽっぷ (0)終了 :"); scanf("%d", &m); if(m == 0){ break; } switch (m){ case 1: printf("でーた:"); scanf("%d", &x); if(StackPush(&s, x) == -1){ puts("すたっくへのぷっしゅに失敗しました。"); } break; case 2: if(StackPop(&s, &x) == -1){ puts("ぽっぷできません。"); }else{ printf("ぽっぷしたでーたは%dです。\n", x); } break; } } StackFree(&s); return (0); }