Initial revision
diff --git a/progs/beos/demo.cpp b/progs/beos/demo.cpp
new file mode 100644
index 0000000..c25eb93
--- /dev/null
+++ b/progs/beos/demo.cpp
@@ -0,0 +1,153 @@
+// $Id: demo.cpp,v 1.1 1999/08/19 00:55:40 jtg Exp $
+
+// Simple BeOS GLView demo
+// Written by Brian Paul
+// This file is in the public domain.
+
+
+
+#include <stdio.h>
+#include <Application.h>
+#include <Window.h>
+#include <GLView.h>
+
+
+class MyWindow : public BWindow
+{
+public:
+   MyWindow(BRect frame);
+   virtual bool QuitRequested();
+};
+
+
+MyWindow::MyWindow(BRect frame)
+   : BWindow(frame, "demo", B_TITLED_WINDOW, B_NOT_ZOOMABLE)
+{
+   // no-op
+}
+
+bool MyWindow::QuitRequested()
+{
+   be_app->PostMessage(B_QUIT_REQUESTED);
+   return true;
+}
+
+
+class MyGL : public BGLView
+{
+public:
+   MyGL(BRect rect, char *name, ulong options);
+
+//	virtual void AttachedToWindow();
+   virtual void Draw(BRect updateRect);
+   virtual void Pulse();
+   virtual void FrameResized(float w, float h);
+private:
+   float mAngle;
+};
+
+
+MyGL::MyGL(BRect rect, char *name, ulong options)
+   : BGLView(rect, name, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP_BOTTOM, 0, options)
+{
+   mAngle = 0.0;
+}
+
+
+#if 0
+void MyGL::AttachedToWindow()
+{
+   BGLView::AttachedToWindow();
+   LockGL();
+   glClearColor(.7, .7, 0, 0);
+   UnlockGL();
+}
+#endif
+
+
+void MyGL::FrameResized(float w, float h)
+{
+    BGLView::FrameResized(w, h);
+
+    printf("FrameResized\n");
+    LockGL();
+    BGLView::FrameResized(w,h);
+    glViewport(0, 0, (int) (w + 1), (int) (h + 1));
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    glFrustum(-1, 1, -1, 1, 10, 30);
+    glMatrixMode(GL_MODELVIEW);
+    glLoadIdentity();
+    glTranslatef(0, 0, -18);
+    UnlockGL();
+}
+
+
+
+void MyGL::Draw(BRect r)
+{
+    printf("MyGL::Draw\n");
+    BGLView::Draw(r);
+    LockGL();
+    glClear(GL_COLOR_BUFFER_BIT);
+    glPushMatrix();
+    glRotatef(mAngle, 0, 0, 1);
+    glColor3f(0, 0, 1);
+    glBegin(GL_POLYGON);
+    glVertex2f(-1, -1);
+    glVertex2f( 1, -1);
+    glVertex2f( 1,  1);
+    glVertex2f(-1,  1);
+    glEnd();
+    SwapBuffers();
+    UnlockGL();
+}
+
+
+void MyGL::Pulse()
+{
+   printf("pulse\n");
+   BGLView::Pulse();
+   mAngle += 1.0;
+
+   LockGL();
+   glClear(GL_COLOR_BUFFER_BIT);
+   glPushMatrix();
+   glRotatef(mAngle, 0, 0, 1);
+   glColor3f(0, 0, 1);
+   glBegin(GL_POLYGON);
+   glVertex2f(-1, -1);
+   glVertex2f( 1, -1);
+   glVertex2f( 1,  1);
+   glVertex2f(-1,  1);
+   glEnd();
+   SwapBuffers();
+   UnlockGL();
+}
+
+
+
+int main(int argc, char *argv[])
+{
+   BApplication *app = new BApplication("application/demo");
+
+   // make top-level window
+   int x = 500, y = 500;
+   int w = 400, h = 400;
+   MyWindow *win = new MyWindow(BRect(x, y, x + w, y + h));
+   //	win->Lock();
+   //	win->Unlock();
+   win->Show();
+
+   // Make OpenGL view and put it in the window
+   MyGL *gl = new MyGL(BRect(5, 5, w-10, h-10), "GL", BGL_RGB | BGL_DOUBLE);
+   //	MyGL *gl = new MyGL(BRect(5, 5, w-10, h-10), "GL", BGL_RGB );
+   win->AddChild(gl);
+
+   printf("calling app->Run\n");	
+   app->Run();
+
+   delete app;
+
+   return 0;
+}