// 
// Torbert, 11.6.2009
// 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <GL/glut.h>

double xmin,ymin,xmax,ymax;                // vertex coordinates
int w=400,h=300;                           // screen coordinates

void drawString(char* s)
{
	int k;
	for(k=0;k<strlen(s);k++)
		glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18,s[k]);
}
/*
	GLUT_BITMAP_8_BY_13
	GLUT_BITMAP_9_BY_15
	GLUT_BITMAP_TIMES_ROMAN_10
	GLUT_BITMAP_TIMES_ROMAN_24
	GLUT_BITMAP_HELVETICA_10
	GLUT_BITMAP_HELVETICA_12
	GLUT_BITMAP_HELVETICA_18
*/
void display(void)
{
	char buf[100];
   glClear(GL_COLOR_BUFFER_BIT); // clear the screen
   glColor3f(0.0,0.0,0.0);
	glRasterPos2f(xmax/4.0,ymax/2.0);
	sprintf(buf,"Hello...");
	drawString(buf);
   glColor3f(1.0,0.0,0.0);
	glRasterPos2f(xmax/2.0,ymax/4.0);
	sprintf(buf,"...world!");
	drawString(buf);
   glutSwapBuffers();
}
void reshape(int wscr,int hscr)
{
	w=wscr; h=hscr;
   glViewport(0,0,(GLsizei)w,(GLsizei)h);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
	xmin=ymin=0.0; xmax=ymax=1.0;
	if(w<=h)
	   ymax=1.0*(GLfloat)h/(GLfloat)w;
	else
		xmax=1.0*(GLfloat)w/(GLfloat)h;
	gluOrtho2D(xmin,xmax,ymin,ymax);
   glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char* argv[])
{
   glutInit(&argc,argv);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
   glutInitWindowSize(w,h);
   glutInitWindowPosition(100,50);
   glutCreateWindow("String Demo");
   glClearColor(1.0,1.0,1.0,0.0);
	glShadeModel(GL_SMOOTH);
   glutDisplayFunc(display);
	glutReshapeFunc(reshape);
   glutMainLoop();
	return 0;
}
