/* redraw flag values */
#define JC_NOPE       0
#define JC_EVENTUALLY 1
#define JC_RIGHT_NOW  2

/* capacity settings */
#define MAX_URL_LEN    500
#define NAME_SEP         3

#define MAX_PAGE      1000
#define MAX_SURF       300
#define PS_TAB_SIZE  20000

#define NICK_LEN        11

#define SURF_DL_BASE   1000
#define NODE_DL_BASE   (SURF_DL_BASE + MAX_SURF)
#define SURF_LBL_BASE  (NODE_DL_BASE + 2*MAX_PAGE)
#define COLOR_BASE     (SURF_LBL_BASE + MAX_SURF)
#define PICKED_DL      (COLOR_BASE + MAX_SURF)
#define SURF_JUMP_BASE (PICKED_DL + 1)

/* display-list idents */
#define INITGL        011
#define TEXT_LABEL    012

#define WEBSITE_NODES 101
#define WEBSITE_EDGES 102
#define WEBSITE_USERS 103
#define GENERIC_EDGE  104
#define GENERIC_AHEAD 105
#define USER_LABELS   106

/* labeled values */
#define UNREACHED       -3
#define INF_VIS_LIM  66666

#define ABYSS_NN    "UNKNOWN"

#include <ogl/defs.h>

/* ========================== */
/* END COMPILER INSTRUCTIONS; */
/* ========================== */

/* ======================= */
/* BEGIN DATA DECLARATIONS */
/* ======================= */

struct trans_parms
{
   GLfloat x,y,z,lat,longt,z_rot;
};

struct jump_rec
{
   int             page_loc, page_duration;
   struct jump_rec *next_page;
};

struct surfer_rec
{
   char            name[50], visible;
   int             first_spline_seg, total_num_jumps, total_path_time;
   struct jump_rec *first_page;
};

struct surf_color_rec
{
   char  sname [22];
   float r,g,b;
};

struct page_rec
{
   char  marked, stuck, filetype, show_as_bg, visible;
   char  nickname[NICK_LEN], *fullname;
   int   dist_to_base;  /*  Length of shortest path to some base node(s) */
   float xpos[2], ypos[2], zpos[2];
   int   same_dir;
   float xdir,ydir,zdir;
};

struct icon_geometry  /* geometry of pickable 3D rectangles */
{
   int                  best_dim;
   /* define a parallelogram in 3D space - corner[0] is "lower left",
      corner[1] is lower right, corner[2] is upper left.  */
   struct point_3d      corner[3];
   struct plane_3d      plane;
};

/* ===================== */
/* END DATA DECLARATIONS */
/* ===================== */


/* ========================= */
/* BEGIN FUNCTION PROTOTYPES */
/* ========================= */

int pick_icon (int this, struct line_3d *in_ray, float xform[],
               float *xpick, float *ypick);

int pick_icon_3d (int this, struct line_3d *in_ray, float xform[],
                  float *xpick, float *ypick, float *zpick);

int pick_loc (struct line_3d *in_ray, float xform[],
              float *xpick, float *ypick);

int pick_loc_3d (struct line_3d *in_ray, float xform[],
                 float *xpick, float *ypick, float *zpick);

int event_to_tcl (HWND top_level_window, HWND target_window);

int set_picked_DL (int picked_node, int *url_len, char picked_url[]);

int show_times_at_node (int picked_node, char *picked_url, char show_all);

int find_surfer (char *sname);

int load_surfer (char *datadir, char *surf_name, int abyss_mode);

int lookup_page (char *target, int quiet);

int update_node_visibility (int vis_limit);

int node_distance ();

int  find_surf_color (char *sname, int num_col, 
                      struct surf_color_rec surf_col[]);