Index: mania_drive.c
===================================================================
--- mania_drive.c	(revision 124)
+++ mania_drive.c	(revision 125)
@@ -41,6 +41,8 @@
 char mni_current[RAYDIUM_MAX_NAME_LEN];
 char mni_next[RAYDIUM_MAX_NAME_LEN];
 
+signed char music_popup_inc=-1;
+
 dReal ptmp=0;
 
 dReal gears[]={-0.4,0.4,0.6,0.8,0.9,1.0};
@@ -49,8 +51,10 @@
 void change_game_state(int type);
 void create_car(void);
 void load_boxes(char *filename);
+void dat_load(char *filename);
 void hms(GLfloat t,int *h, int *m, int *s, int *ms);
 int mni_load(char *mni);
+void build_gui_Main(void);
 
 
 #define NET_SCORE_TRACK	(RAYDIUM_NETWORK_PACKET_BASE+1)
@@ -66,6 +70,15 @@
     char player[RAYDIUM_MAX_NAME_LEN];
     } Score;
 
+typedef struct TrackData
+    {
+    char name[RAYDIUM_MAX_NAME_LEN];
+    char author[RAYDIUM_MAX_NAME_LEN];
+    float gold_time;
+    float author_time;
+    } TrackData;
+
+TrackData trackdata;
 Score best_score[RAYDIUM_NETWORK_MAX_CLIENTS];
 Score track_score;
 
@@ -180,7 +193,9 @@
 raydium_ode_ground_set_name(tri);
 unlink(tri);
 load_boxes("mania.box");
+dat_load("mania.dat");
 
+
 track_score.time=get_score(mni,track_score.player);
 raydium_network_propag_refresh(NET_SCORE_TRACK);
 for(i=0;i<RAYDIUM_NETWORK_MAX_CLIENTS;i++)
@@ -191,7 +206,6 @@
 create_car();
 
 raydium_gui_window_delete_name("menu");
-raydium_gui_window_delete_name("besttime");
 raydium_gui_hide();
 raydium_sound_load_music(NULL);
 
@@ -205,12 +219,24 @@
 }
 
 
+
 void AfterFade(void)
 {
 mni_load(mni_next);
 mni_next[0]=0;
 }
 
+void gui_start(void)
+{
+if(raydium_gui_isvisible())
+    return;
+raydium_gui_show();
+
+// should use a PHP script here
+raydium_sound_load_music("mania_music/i_got_it_bad_-_The_Napoleon_Blown_Aparts.ogg");
+}
+
+
 void btnDrive(raydium_gui_Object *w)
 {
 char track[RAYDIUM_MAX_NAME_LEN];
@@ -226,6 +252,11 @@
 raydium_gui_window_delete_name("besttime");
 }
 
+void btnBackToMainMenu(raydium_gui_Object *w)
+{
+raydium_gui_window_delete_name("menu");
+build_gui_Main();
+}
 
 void gui_menu_BestTime(raydium_gui_Object *w)
 {
@@ -252,20 +283,16 @@
 raydium_gui_label_create("lblBestTime",handle,50,80,str,0,0,0);
 raydium_gui_widget_sizes(15,5,18);
 raydium_gui_button_create("btnBestTimeOkOk",handle,35,15,"OK",btnBestTimeOk);
-
-
 }
 
 
-void build_gui(void)
+void build_gui_InternetTracks(void)
 {
 int handle;
 char l[RAYDIUM_GUI_DATASIZE];
 
 get_tracklist(l);
 
-raydium_gui_theme_load("maniadrive.gui");
-
 handle=raydium_gui_window_create("menu",48,10,50,40);
 raydium_gui_widget_sizes(0,0,18);
 raydium_gui_label_create("lblPlayerName",handle,25,90,"Player Name :",0,0,0);
@@ -288,11 +315,59 @@
 raydium_gui_widget_sizes(15,5,18);
 raydium_gui_button_create("btnDrive",handle,35,5,"Drive !",btnDrive);
 
-raydium_gui_show();
-raydium_sound_load_music("mania_music/i_got_it_bad_-_The_Napoleon_Blown_Aparts.ogg");
+raydium_gui_widget_sizes(5,5,18);
+raydium_gui_button_create("btnBackToMain",handle,5,5,"<",btnBackToMainMenu);
+gui_start();
 }
 
+void build_gui_Story(void)
+{
+int handle;
 
+handle=raydium_gui_window_create("menu",48,10,50,40);
+raydium_gui_label_create("lblMode",handle,50,90,"I'm coding it right now ! ;)",0,0,0);
+
+// parse story file
+// parse story state file
+// use PHP for this ?
+
+raydium_gui_widget_sizes(5,5,18);
+raydium_gui_button_create("btnBackToMain",handle,5,5,"<",btnBackToMainMenu);
+gui_start();
+}
+
+void btnModeNetTracks(raydium_gui_Object *w)
+{
+raydium_gui_window_delete_name("menu");
+build_gui_InternetTracks();
+}
+
+void btnModeStory(raydium_gui_Object *w)
+{
+raydium_gui_window_delete_name("menu");
+build_gui_Story();
+}
+
+
+
+void build_gui_Main(void)
+{
+int handle;
+
+handle=raydium_gui_window_create("menu",48,10,50,40);
+
+raydium_gui_widget_sizes(0,0,18);
+raydium_gui_label_create("lblMode",handle,50,90,"- Select Game Mode - ",0,0,0);
+
+raydium_gui_widget_sizes(25,4,18);
+raydium_gui_button_create("btnModeStory",handle,25,65,"Story",btnModeStory);
+raydium_gui_button_create("btnModeNetTracks",handle,25,45,"Internet Tracks",btnModeNetTracks);
+raydium_gui_button_create("btnModeLAN",handle,25,25,"LAN Multiplayer",NULL);
+
+gui_start();
+}
+
+
 void network_ask_restart(void)
 {
 unsigned char buff[RAYDIUM_NETWORK_PACKET_SIZE];
@@ -348,6 +423,86 @@
 fclose(fp);
 }
 
+// load associated track data
+void dat_load(char *filename)
+{
+FILE *fp;
+int ret;
+char var[RAYDIUM_MAX_NAME_LEN];
+char val_s[RAYDIUM_MAX_NAME_LEN];
+float val_f[10];
+int size;
+int done;
+
+fp=raydium_file_fopen(filename,"rt");
+
+if(!fp)
+    {
+    raydium_log("error: cannot open '%s'",filename);
+    return;
+    }
+
+// reset
+trackdata.name[0]=0;
+trackdata.author[0]=0;
+trackdata.gold_time=0;
+trackdata.author_time=0;
+
+while( (ret=raydium_parser_read(var,val_s,val_f,&size,fp))!=RAYDIUM_PARSER_TYPE_EOF)
+    {
+    done=0;
+
+    if(!strcasecmp(var,"name"))
+	{
+	if(ret!=RAYDIUM_PARSER_TYPE_STRING)
+	    {
+	    raydium_log("'name' is wrong type");
+	    continue;
+	    }
+	strcpy(trackdata.name,val_s);
+	done=1;
+	}
+
+    if(!strcasecmp(var,"author"))
+	{
+	if(ret!=RAYDIUM_PARSER_TYPE_STRING)
+	    {
+	    raydium_log("'author' is wrong type");
+	    continue;
+	    }
+	strcpy(trackdata.author,val_s);
+	done=1;
+	}
+
+    if(!strcasecmp(var,"gold_time"))
+	{
+	if(ret!=RAYDIUM_PARSER_TYPE_FLOAT || size!=1)
+	    {
+	    raydium_log("'gold_time' is wrong type");
+	    continue;
+	    }
+	trackdata.gold_time=val_f[0];
+	done=1;
+	}
+
+    if(!strcasecmp(var,"author_time"))
+	{
+	if(ret!=RAYDIUM_PARSER_TYPE_FLOAT || size!=1)
+	    {
+	    raydium_log("'author_time' is wrong type");
+	    continue;
+	    }
+	trackdata.author_time=val_f[0];
+	done=1;
+	}
+
+    if(!done)
+	raydium_log("invalid statement '%s'",var);
+
+    }
+}
+
+
 void frame_step(GLfloat step)
 {
 partytime-=step;
@@ -489,6 +644,69 @@
     }
 }
 
+void music_change(void)
+{
+music_popup_inc=1;
+}
+
+#define sizepp 50.f
+#define maxpp	0.f
+#define minpp  -sizepp
+#define posypp 5.f
+#define ratiopp 3.f
+#define rollbackpp 200.f
+#define speedpp	100.f
+#define printoffsetpp 4.f
+#define printcolpp "^0"
+#define printcol2pp "^f"
+#define printlenpp 24
+#define shadowoffpp 0.2f
+void trc(char *in, char *out, int len)
+{
+strcpy(out,in);
+if(strlen(out)>len)
+    {
+    out[len-3]=0;
+    strcat(out,"...");
+    }
+}
+
+void draw_music_popup(void)
+{
+char str[RAYDIUM_MAX_NAME_LEN];
+static GLfloat pos=0;
+GLfloat real;
+
+pos+=(raydium_frame_time*speedpp*music_popup_inc);
+
+real=pos;
+
+if(real>maxpp)
+    real=maxpp;
+
+if(real<minpp)
+    {
+    real=minpp;
+    pos=minpp;
+    }
+
+if(pos>rollbackpp)
+    {
+    music_popup_inc=-1;
+    }
+
+raydium_osd_draw_name("BOXmania_music_popup.tga",real,posypp,sizepp+real,posypp+sizepp/ratiopp);
+trc(raydium_sound_music_info.title,str,printlenpp);
+raydium_osd_printf(real+2+shadowoffpp,posypp+sizepp/ratiopp-printoffsetpp-shadowoffpp,  20,0.4,"font2.tga","%s%s",printcol2pp,str);
+raydium_osd_printf(real+2,posypp+sizepp/ratiopp-printoffsetpp,  20,0.4,"font2.tga","%s%s",printcolpp,str);
+trc(raydium_sound_music_info.artist,str,printlenpp);
+raydium_osd_printf(real+2+shadowoffpp,posypp+sizepp/ratiopp-printoffsetpp*2-shadowoffpp,  20,0.4,"font2.tga","%s%s",printcol2pp,str);
+raydium_osd_printf(real+2,posypp+sizepp/ratiopp-printoffsetpp*2,20,0.4,"font2.tga","%s%s",printcolpp,str);
+trc(raydium_sound_music_info.album,str,printlenpp);
+raydium_osd_printf(real+2+shadowoffpp,posypp+sizepp/ratiopp-printoffsetpp*3-shadowoffpp,  20,0.4,"font2.tga","%s%s",printcol2pp,str);
+raydium_osd_printf(real+2,posypp+sizepp/ratiopp-printoffsetpp*3,20,0.4,"font2.tga","%s%s",printcolpp,str);
+}
+
 void col_car_box(int car, int box_id)
 {
 int id;
@@ -807,7 +1025,7 @@
 
     if(!raydium_gui_isvisible())
 	{
-	build_gui();
+	build_gui_Main();
 	raydium_video_open("mania_menu_v1.jpgs","video");
 	raydium_osd_cursor_set("BOXcursor.tga",6,6);
 	}
@@ -824,6 +1042,7 @@
     }
 
     //raydium_osd_logo("logoc.tga");
+    draw_music_popup();
     raydium_rendering_finish();
     return;
     }
@@ -1034,6 +1253,8 @@
     raydium_osd_printf(5,50,40,0.5,"font2.tga","^cReady ? Start in ^f%i^c seconds.",(int)countdown+1);
     }
 raydium_osd_logo("logoc.tga");
+draw_music_popup();
+
 //memset(raydium_vertex_tag,0,RAYDIUM_MAX_VERTICES);
 raydium_rendering_finish();
 
@@ -1104,10 +1325,11 @@
 if(raydium_init_cli_option_default("mni",mni_current,""))
     mni_load(mni_current);
 
-
+raydium_gui_theme_load("maniadrive.gui");
 raydium_timecall_add(frame_step,-1);
 change_game_state(GAME_COUNTDOWN);
 
+raydium_sound_music_changed_callback=music_change;
 raydium_ode_AfterElementDrawCallback=draw_element_after;
 raydium_ode_CollideCallback=collide;
 raydium_ode_ObjectNearCollide=nearcall;
 4, GLUT_UP, lastx, lasty ) ;
+    }
+      
+    case WM_KEYDOWN:
+      // If the key is already down, we are on auto-repeat.  Break if the autorepeat is disabled.
+      if ( ( updown == GLUT_DOWN ) && ( (int)wParam == old_key ) )
+      {
+/*        if ( autoRepeat )
+        {*/
+          // Disable CTRL, SHIFT, CapsLock keys from making a callback
+          if ( ( key == VK_CONTROL ) || ( key == VK_SHIFT ) || ( key == VK_CAPITAL ) )
+            break ;
+
+/*          if ( key != -1 && kbCB )  // Autorepeat enabled, call the callback with an "up" setting
+            (*kbCB) ( key, PW_UP, lastx, lasty ) ;
+        }
+        else*/
+          repeating=1;
+        }
+
+      updown = GLUT_DOWN ;
+      old_key = wParam ;
+      // FALLTHROUGH
+    case WM_KEYUP:
+      if ( uMsg == WM_KEYUP ) updown = GLUT_UP ;
+      key = wParam ;
+
+      // Disable CTRL, SHIFT, CapsLock keys from making a callback
+      if ( ( key == VK_CONTROL ) || ( key == VK_SHIFT ) || ( key == VK_CAPITAL ) )
+        break ;
+
+      switch ( key )
+      {
+        case VK_F1:     key = GLUT_KEY_F1;   special=1;     break;
+        case VK_F2:     key = GLUT_KEY_F2;   special=1;     break;
+        case VK_F3:     key = GLUT_KEY_F3;   special=1;     break;
+        case VK_F4:     key = GLUT_KEY_F4;   special=1;     break;
+        case VK_F5:     key = GLUT_KEY_F5;   special=1;     break;
+        case VK_F6:     key = GLUT_KEY_F6;   special=1;     break;
+        case VK_F7:     key = GLUT_KEY_F7;   special=1;     break;
+        case VK_F8:     key = GLUT_KEY_F8;   special=1;     break;
+        case VK_F9:     key = GLUT_KEY_F9;   special=1;     break;
+        case VK_F10:    key = GLUT_KEY_F10;  special=1;     break;
+        case VK_F11:    key = GLUT_KEY_F11;  special=1;     break;
+        case VK_F12:    key = GLUT_KEY_F12;  special=1;     break;
+
+        case VK_LEFT:   key = GLUT_KEY_LEFT;   special=1;   break;
+        case VK_RIGHT:  key = GLUT_KEY_RIGHT;  special=1;   break;
+        case VK_UP:     key = GLUT_KEY_UP;     special=1;   break;
+        case VK_DOWN:   key = GLUT_KEY_DOWN;   special=1;   break;
+
+        case VK_PRIOR:  key = GLUT_KEY_PAGE_UP;   special=1; break;
+        case VK_NEXT:   key = GLUT_KEY_PAGE_DOWN; special=1; break;
+        case VK_HOME:   key = GLUT_KEY_HOME;      special=1; break;
+        case VK_END:    key = GLUT_KEY_END;       special=1; break;
+        case VK_INSERT: key = GLUT_KEY_INSERT;    special=1; break;
+
+				default:
+					// don't do this for WinCE
+
+
+          b = GetKeyboardState( state );
+					assert(b);
+
+					code [ 0 ] = 0; // WK: I need to do this, or on my Win2k box, the upper bits remain unchanged.
+          if( ToAscii( key, 0, state, code, 0 ) == 1 )
+						if((0xFF00 & code[0]) == 0) // setting a high bit in key causes crashes later on (out of range array access)
+							key=code[ 0 ];
+
+      }
+      if ( key != -1)
+        {
+
+	    // special down
+	    if(special && updown==GLUT_DOWN && glutSpecialFuncCB && !repeating)
+		glutSpecialFuncCB(key,lastx,lasty);
+
+	    // special up
+	    if(special && updown==GLUT_UP && glutSpecialUpFuncCB && !repeating)
+		glutSpecialUpFuncCB(key,lastx,lasty);
+        
+        // normal
+	    if(!special && updown==GLUT_DOWN && glutKeyboardFuncCB)
+		glutKeyboardFuncCB(key,lastx,lasty);
+
+        
+        /*if(!special && repeating && glutKeyboardFuncCB)
+        glutKeyboardFuncCB(key,lastx,lasty);*/
+        
+        //(*kbCB) ( key, updown, lastx, lasty ) ;
+        }
+      break;
+
+    case WM_SIZE:
+      size[0] = LOWORD(lParam) ;
+      size[1] = HIWORD(lParam) ;
+      _glutWindowSize[0]=size[0];
+      _glutWindowSize[1]=size[1];    
+      if (glutReshapeFuncCB)
+    	    glutReshapeFuncCB(size[0], size[1]);
+      break;
+
+    case WM_CLOSE:
+      exit(0);
+      break;
+
+    default:
+      return ( DefWindowProc ( hWnd, uMsg, wParam, lParam ) ) ;
+  }
+
+  return 0;
+}
Index: myglut.c
===================================================================
--- myglut.c	(revision 170)
+++ myglut.c	(revision 171)
@@ -0,0 +1,145 @@
+/*
+    Raydium - CQFD Corp.
+    http://raydium.org/
+    License: GPL - GNU General Public License, see "gpl.txt" file.
+*/
+
+// avoid "real GLUT"
+#ifndef GLUT_API_VERSION
+
+#ifndef DONT_INCLUDE_HEADERS
+#include "../index.h"
+#else
+#include "myglut.h"
+#endif
+
+
+void raydium_log(char *format, ...);
+
+#ifdef WIN32
+#include "myglut-win32.c"
+#else
+#include "myglut-x11.c"
+#endif
+
+//glutInitDisplayMode
+//glutGameModeString
+//glutEnterGameMode
+//glutInitWindowSize
+//glutCreateWindow
+// are replaced by .. myglutCreateWindow
+void myglutCreateWindow(GLuint tx, GLuint ty, signed char rendering, char *name)
+{
+switch(rendering)
+    {
+    case RAYDIUM_RENDERING_NONE:
+	return;
+    case RAYDIUM_RENDERING_WINDOW:
+	pwInit(-1,-1,tx,ty,0,name,1,0);
+	break;
+    case RAYDIUM_RENDERING_FULLSCREEN:
+	pwInit(0,0,-1,-1,0,name,0,0);
+	break;    
+    }
+}
+
+//glutMainLoop
+void glutMainLoop(void)
+{
+#ifdef WIN32
+    // since windows is firing WM_SIZE too quickly ...
+    if(glutReshapeFuncCB)
+        glutReshapeFuncCB(_glutWindowSize[0],_glutWindowSize[1]);
+#endif
+do{
+    glutIdleFuncCB();
+    myglutGetEvents();
+  }while(1);
+}
+
+// glutWireSphere
+void glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
+{
+  static GLUquadricObj *quadObj=NULL;
+
+  if(!quadObj)
+    quadObj=gluNewQuadric();
+
+  gluQuadricDrawStyle(quadObj, GLU_LINE);
+  gluQuadricNormals(quadObj, GLU_SMOOTH);
+  gluSphere(quadObj, radius, slices, stacks);
+}
+
+//glutGet
+int glutGet(int enu)
+{
+switch(enu)
+    {
+    default:
+	raydium_log("(my)glutGet: ERROR: unknown 'enu' %i",enu);
+    }
+return 0;
+}
+
+
+//glutIgnoreKeyRepeat (1 = yes)
+void glutIgnoreKeyRepeat(int ignore)
+{
+//glutIgnoreKeyRepeatFlag=(ignore?1:0);
+}
+
+//glutReshapeFunc - void (GLUTCALLBACK *func)(int width, int height)
+void glutReshapeFunc(void *func)
+{
+glutReshapeFuncCB=func;
+}
+
+//glutKeyboardFunc - void (GLUTCALLBACK *func)(unsigned char key, int x, int y)
+void glutKeyboardFunc(void *func)
+{
+glutKeyboardFuncCB=func;
+}
+
+//glutSpecialUpFunc - void (GLUTCALLBACK *func)(int key, int x, int y)
+void glutSpecialUpFunc(void *func)
+{
+glutSpecialUpFuncCB=func;
+}
+
+//glutSpecialFunc - void (GLUTCALLBACK *func)(int key, int x, int y)
+void glutSpecialFunc(void *func)
+{
+glutSpecialFuncCB=func;
+}
+
+//glutMotionFunc - void (GLUTCALLBACK *func)(int x, int y)
+void glutMotionFunc(void *func)
+{
+glutMotionFuncCB=func;
+}
+
+//glutPassiveMotionFunc - void (GLUTCALLBACK *func)(int x, int y)
+void glutPassiveMotionFunc(void *func)
+{
+glutPassiveMotionFuncCB=func;
+}
+
+//glutMouseFunc - void (GLUTCALLBACK *func)(int button, int state, int x, int y)
+void glutMouseFunc(void *func)
+{
+glutMouseFuncCB=func;
+}
+
+//glutDisplayFunc - void (GLUTCALLBACK *func)(void)
+void glutDisplayFunc(void *func)
+{
+glutDisplayFuncCB=func;
+}
+
+//glutIdleFunc - void (GLUTCALLBACK *func)(void)
+void glutIdleFunc(void *func)
+{
+glutIdleFuncCB=func;
+}
+
+#endif
Index: myglut.h
===================================================================
--- myglut.h	(revision 170)
+++ myglut.h	(revision 171)
@@ -0,0 +1,93 @@
+/*
+    Raydium - CQFD Corp.
+    http://raydium.org/
+    License: GPL - GNU General Public License, see "gpl.txt" file.
+*/
+
+// avoid "real GLUT"
+#ifndef GLUT_API_VERSION
+#ifndef MYGLUT
+#define MYGLUT
+
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+#define GLUT_LEFT_BUTTON		0
+#define GLUT_MIDDLE_BUTTON		1
+#define GLUT_RIGHT_BUTTON		2
+
+#define GLUT_DOWN			0
+#define GLUT_UP				1
+
+#define GLUT_KEY_F1			1
+#define GLUT_KEY_F2			2
+#define GLUT_KEY_F3			3
+#define GLUT_KEY_F4			4
+#define GLUT_KEY_F5			5
+#define GLUT_KEY_F6			6
+#define GLUT_KEY_F7			7
+#define GLUT_KEY_F8			8
+#define GLUT_KEY_F9			9
+#define GLUT_KEY_F10			10
+#define GLUT_KEY_F11			11
+#define GLUT_KEY_F12			12
+#define GLUT_KEY_LEFT			100
+#define GLUT_KEY_UP			101
+#define GLUT_KEY_RIGHT			102
+#define GLUT_KEY_DOWN			103
+#define GLUT_KEY_PAGE_UP		104
+#define GLUT_KEY_PAGE_DOWN		105
+#define GLUT_KEY_HOME			106
+#define GLUT_KEY_END			107
+#define GLUT_KEY_INSERT			108
+
+#define GLUT_WINDOW_WIDTH		102
+#define GLUT_WINDOW_HEIGHT		103
+#define GLUT_WINDOW_DEPTH_SIZE		106
+#define GLUT_WINDOW_CURSOR		122
+
+#define GLUT_CURSOR_LEFT_ARROW		1
+#define GLUT_CURSOR_NONE		101
+
+#define GLUT_RGB			0
+#define GLUT_DOUBLE			2
+#define GLUT_DEPTH			16
+
+#define GLUT_GAME_MODE_POSSIBLE         1
+
+// ------------------- variables
+
+// callbacks:
+void (*glutReshapeFuncCB)(int width, int height);
+void (*glutKeyboardFuncCB)(unsigned char key, int x, int y);
+void (*glutSpecialUpFuncCB)(int key, int x, int y);
+void (*glutSpecialFuncCB)(int key, int x, int y);
+void (*glutMotionFuncCB)(int x, int y);
+void (*glutPassiveMotionFuncCB)(int x, int y);
+void (*glutMouseFuncCB)(int button, int state, int x, int y);
+void (*glutDisplayFuncCB)(void);
+void (*glutIdleFuncCB)(void);
+
+// protos
+void glutInit(int *argc, char **argv);
+int glutGet(int enu);
+void glutSetCursor(int cursor);
+void glutWarpPointer(int x, int y);
+void glutSwapBuffers(void);
+void glutIgnoreKeyRepeat(int ignore);
+void glutReshapeFunc(void *func);
+void glutKeyboardFunc(void *func);
+void glutSpecialUpFunc(void *func);
+void glutSpecialFunc(void *func);
+void glutMotionFunc(void *func);
+void glutPassiveMotionFunc(void *func);
+void glutMouseFunc(void *func);
+void glutDisplayFunc(void *func);
+void glutIdleFunc(void *func);
+void glutMainLoop(void);
+void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
+void myglutCreateWindow(GLuint tx, GLuint ty, signed char rendering, char *name);
+
+
+#endif
+#endif