#include "solid.h"

/* global variables */
struct obj_defn *defn_ptr[MAX_TYPES] = {NULL, NULL,
    NULL, NULL}; /* pointers to object definitions */
struct solid_obj *obj_first = (struct solid_obj *)NULL;
    /* pointer to first object in scene */
int sweeps = 20; /* number of sweeps to construct
    sphere; must be even */
int facets = 36; /* number of facets per sweep */
float proj_z = 100.0; /* distance between viewer and
    model */
float proj_d = 10.0; /* distance between viewer and
    picture plane */
BOOL init_screen = FALSE; /* indicates whether screen
    is initialized */
int maxx, maxy; /* maximum x and y screen coords */
float border = 0.05; /* fraction of graphics screen to
    use as a border when maximizing image size */
float screen_x_min, screen_x_max, screen_y_min,
    screen_y_max; /* minimum and maximum coordinates
    used to maximize image size */
int color_bkgd = BLUE, color_visible = RED,
    color_hidden = WHITE; /* color selections for
    background, visible lines, hidden lines */
enum LINESTYLE disp_hidden = LINE_NOSHOW; /* how to
    display hidden lines: don't display, broken line,
    solid line */
float light_x, light_y, light_z; /* light source
    coordinates */
int render_opt = TRUE; /* rendering option */
void main(void)
{
    struct solid_obj *obj_ptr;
    int gdriver = DETECT, gmode;
    if (registerbgidriver(EGAVGA_driver) < 0)
        quit(ERR_DRIVER, __FILE__, __LINE__);
    initgraph(&gdriver, &gmode, "");
    setbkcolor(color_bkgd);
    setcolor(color_visible);
    maxx = getmaxx();
    maxy = getmaxy();
    outtext("Copyright (c) 1991 by Saul Mooallem");
    light_x = 300.0;
    light_y = 300.0;
    light_z = 300.0;
    obj_ptr = make_object(CUBE_OBJ); /* construct
        instance */
    obj_ptr->color = YELLOW;
    obj_ptr->scale = 7.0; /* scaling factor */
    obj_ptr->xlate[0] = 20.0; /* translation */
    obj_ptr->xlate[1] = -20.0;
    obj_ptr->xlate[2] = 15.0;
    obj_ptr->YAW = PI / 8.0; /* rotation */
    obj_ptr->ROLL = PI / 16.0;
    obj_ptr->PITCH = 3.0 * PI / 16.0;
    obj_ptr = make_object(SPHERE_OBJ);
    obj_ptr->color = RED;
    obj_ptr->scale = 30.0;
    obj_ptr->YAW = PI / 4.0;
    obj_ptr->ROLL = 3 * PI / 4.0;
    obj_ptr->PITCH = 3.0 * PI / 8.0;
    obj_ptr->xlate[1] = -12.0;
    obj_ptr = make_object(CYLIND_OBJ);
    obj_ptr->color = YELLOW;
    obj_ptr->scale = 6.0;
    obj_ptr->YAW = PI / 4.0;
    obj_ptr->ROLL = PI / 4.0;
    obj_ptr->PITCH = PI / 4.0;
    obj_ptr->xlate[0] = -8.0;
    obj_ptr->xlate[1] = 8.0;
    obj_ptr->xlate[2] = 25.0;
    obj_ptr = make_object(CONE_OBJ);
    obj_ptr->color = RED;
    obj_ptr->scale = 12.0;
    obj_ptr->YAW = 3 * PI / 4.0;
    obj_ptr->ROLL = 7 * PI / 4.0;
    obj_ptr->PITCH = PI / 4.0;
    obj_ptr->xlate[0] = 15.0;
    obj_ptr->xlate[1] = 8.0;
    show_scene();
    getch();
    closegraph();
}
