Пример #1
0
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++;
}
Пример #2
0
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);
}
Пример #3
0
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;
}
Пример #4
0
Файл: macro.c Проект: taysom/tau
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;
}
Пример #5
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);
}