glaux.pp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. {
  2. $Id$
  3. Translation of the GLaux headers for FreePascal
  4. Version for static linking in Win32 environment by Alexander Stohr.
  5. Latest change: 1999-11-13
  6. Further information:
  7. GLaux is an outdated toolkit from SGI and later used by Microsoft.
  8. }
  9. {*++ BUILD Version: 0004 // Increment this if a change has global effects
  10. Copyright (c) 1985-95, Microsoft Corporation
  11. Module Name:
  12. glaux.h
  13. Abstract:
  14. Procedure declarations, constant definitions and macros for the OpenGL
  15. Auxiliary Library.
  16. --*}
  17. {*
  18. * (c) Copyright 1993, Silicon Graphics, Inc.
  19. * ALL RIGHTS RESERVED
  20. * Permission to use, copy, modify, and distribute this software for
  21. * any purpose and without fee is hereby granted, provided that the above
  22. * copyright notice appear in all copies and that both the copyright notice
  23. * and this permission notice appear in supporting documentation, and that
  24. * the name of Silicon Graphics, Inc. not be used in advertising
  25. * or publicity pertaining to distribution of the software without specific,
  26. * written prior permission.
  27. *
  28. * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
  29. * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
  30. * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
  31. * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
  32. * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
  33. * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
  34. * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
  35. * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
  36. * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN
  37. * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
  38. * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
  39. * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
  40. *
  41. * US Government Users Restricted Rights
  42. * Use, duplication, or disclosure by the Government is subject to
  43. * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
  44. * (c)(1)(ii) of the Rights in Technical Data and Computer Software
  45. * clause at DFARS 252.227-7013 and/or in similar or successor
  46. * clauses in the FAR or the DOD or NASA FAR Supplement.
  47. * Unpublished-- rights reserved under the copyright laws of the
  48. * United States. Contractor/manufacturer is Silicon Graphics,
  49. * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311.
  50. *
  51. * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
  52. *}
  53. {$MODE delphi}
  54. {You have to enable Macros (compiler switch "-Sm") for compiling this unit!
  55. This is necessary for supporting different platforms with different calling
  56. conventions via a single unit.}
  57. {$define WINNT}
  58. {$define GLauximp}
  59. {x$define UNICODE}
  60. unit GLaux; { version which does statically linking }
  61. interface
  62. {$MACRO ON}
  63. {$IFDEF Win32}
  64. {$DEFINE glaux_dll := external 'Glauximp.dll'}
  65. {$DEFINE glaux_callback := cdecl}
  66. {$ELSE}
  67. {$MESSAGE Unsupported platform.}
  68. {$ENDIF}
  69. USES
  70. windows,
  71. GL;
  72. {
  73. }
  74. TYPE
  75. LPCSTR = Pointer; { pointer on a zero terminated string }
  76. LPCWSTR = Pointer; { pointer on a zero terminated unicode string }
  77. {*
  78. ** ToolKit Window Types
  79. ** In the future, AUX_RGBA may be a combination of both RGB and ALPHA
  80. *}
  81. const
  82. AUX_RGB = 0;
  83. AUX_RGBA = AUX_RGB;
  84. AUX_INDEX = 1;
  85. AUX_SINGLE = 0;
  86. AUX_DOUBLE = 2;
  87. AUX_DIRECT = 0;
  88. AUX_INDIRECT = 4;
  89. AUX_ACCUM = 8;
  90. AUX_ALPHA = 16;
  91. AUX_DEPTH24 = 32; {* 24-bit depth buffer *}
  92. AUX_STENCIL = 64;
  93. AUX_AUX = 128;
  94. AUX_DEPTH16 = 256; {* 16-bit depth buffer *}
  95. AUX_FIXED_332_PAL = 512;
  96. AUX_DEPTH = AUX_DEPTH16; {* default is 16-bit depth buffer *}
  97. {*
  98. ** Window Masks
  99. *}
  100. { These have been macros and were converted to boolean funtions }
  101. FUNCTION AUX_WIND_IS_RGB (x : DWORD) : BOOLEAN;
  102. FUNCTION AUX_WIND_IS_INDEX (x : DWORD) : BOOLEAN;
  103. FUNCTION AUX_WIND_IS_SINGLE (x : DWORD) : BOOLEAN;
  104. FUNCTION AUX_WIND_IS_DOUBLE (x : DWORD) : BOOLEAN;
  105. FUNCTION AUX_WIND_IS_INDIRECT (x : DWORD) : BOOLEAN;
  106. FUNCTION AUX_WIND_IS_DIRECT (x : DWORD) : BOOLEAN;
  107. FUNCTION AUX_WIND_HAS_ACCUM (x : DWORD) : BOOLEAN;
  108. FUNCTION AUX_WIND_HAS_ALPHA (x : DWORD) : BOOLEAN;
  109. FUNCTION AUX_WIND_HAS_DEPTH (x : DWORD) : BOOLEAN;
  110. FUNCTION AUX_WIND_HAS_STENCIL (x : DWORD) : BOOLEAN;
  111. FUNCTION AUX_WIND_USES_FIXED_332_PAL(x : DWORD) : BOOLEAN;
  112. {*
  113. ** ToolKit Event Structure
  114. *}
  115. type
  116. AUX_EVENTREC = RECORD
  117. {BEGIN}
  118. event : GLint;
  119. data : ARRAY[0..3] OF GLint;
  120. END;
  121. {*
  122. ** ToolKit Event Types
  123. *}
  124. CONST
  125. AUX_EXPOSE = 1;
  126. AUX_CONFIG = 2;
  127. AUX_DRAW = 4;
  128. AUX_KEYEVENT = 8;
  129. AUX_MOUSEDOWN = 16;
  130. AUX_MOUSEUP = 32;
  131. AUX_MOUSELOC = 64;
  132. {*
  133. ** Toolkit Event Data Indices
  134. *}
  135. AUX_WINDOWX = 0;
  136. AUX_WINDOWY = 1;
  137. AUX_MOUSEX = 0;
  138. AUX_MOUSEY = 1;
  139. AUX_MOUSESTATUS = 3;
  140. AUX_KEY = 0;
  141. AUX_KEYSTATUS = 1;
  142. {*
  143. ** ToolKit Event Status Messages
  144. *}
  145. AUX_LEFTBUTTON = 1;
  146. AUX_RIGHTBUTTON = 2;
  147. AUX_MIDDLEBUTTON = 4;
  148. AUX_SHIFT = 1;
  149. AUX_CONTROL = 2;
  150. {*
  151. ** ToolKit Key Codes
  152. *}
  153. AUX_RETURN = #$0D;
  154. AUX_ESCAPE = #$1B;
  155. AUX_SPACE = #$20;
  156. AUX_LEFT = #$25;
  157. AUX_UP = #$26;
  158. AUX_RIGHT = #$27;
  159. AUX_DOWN = #$28;
  160. AUX_A = 'A';
  161. AUX_B = 'B';
  162. AUX_C = 'C';
  163. AUX_D = 'D';
  164. AUX_E = 'E';
  165. AUX_F = 'F';
  166. AUX_G = 'G';
  167. AUX_H = 'H';
  168. AUX_I = 'I';
  169. AUX_J = 'J';
  170. AUX_K = 'K';
  171. AUX_L = 'L';
  172. AUX_M = 'M';
  173. AUX_N = 'N';
  174. AUX_O = 'O';
  175. AUX_P = 'P';
  176. AUX_Q = 'Q';
  177. AUX_R = 'R';
  178. AUX_S = 'S';
  179. AUX_T = 'T';
  180. AUX_U = 'U';
  181. AUX_V = 'V';
  182. AUX_W = 'W';
  183. AUX_X = 'X';
  184. AUX_Y = 'Y';
  185. AUX_Z = 'Z';
  186. AUX_a_ = 'a';
  187. AUX_b_ = 'b';
  188. AUX_c_ = 'c';
  189. AUX_d_ = 'd';
  190. AUX_e_ = 'e';
  191. AUX_f_ = 'f';
  192. AUX_g_ = 'g';
  193. AUX_h_ = 'h';
  194. AUX_i_ = 'i';
  195. AUX_j_ = 'j';
  196. AUX_k_ = 'k';
  197. AUX_l_ = 'l';
  198. AUX_m_ = 'm';
  199. AUX_n_ = 'n';
  200. AUX_o_ = 'o';
  201. AUX_p_ = 'p';
  202. AUX_q_ = 'q';
  203. AUX_r_ = 'r';
  204. AUX_s_ = 's';
  205. AUX_t_ = 't';
  206. AUX_u_ = 'u';
  207. AUX_v_ = 'v';
  208. AUX_w_ = 'w';
  209. AUX_x_ = 'x';
  210. AUX_y_ = 'y';
  211. AUX_z_ = 'z';
  212. AUX_0 = '0';
  213. AUX_1 = '1';
  214. AUX_2 = '2';
  215. AUX_3 = '3';
  216. AUX_4 = '4';
  217. AUX_5 = '5';
  218. AUX_6 = '6';
  219. AUX_7 = '7';
  220. AUX_8 = '8';
  221. AUX_9 = '9';
  222. {*
  223. ** ToolKit Gets and Sets
  224. *}
  225. AUX_FD = 1; {* return fd (long) *}
  226. AUX_COLORMAP = 3; {* pass buf of r, g and b (unsigned char) *}
  227. AUX_GREYSCALEMAP = 4;
  228. AUX_FOGMAP = 5; {* pass fog and color bits (long) *}
  229. AUX_ONECOLOR = 6; {* pass index, r, g, and b (long) *}
  230. {*
  231. ** Color Macros
  232. *}
  233. AUX_BLACK = 0;
  234. AUX_RED = 13;
  235. AUX_GREEN = 14;
  236. AUX_YELLOW = 15;
  237. AUX_BLUE = 16;
  238. AUX_MAGENTA = 17;
  239. AUX_CYAN = 18;
  240. AUX_WHITE = 19;
  241. { this was a macro and is now a procedure }
  242. { PROCEDURE AUX_SETCOLOR(x, y); - TODO }
  243. {*
  244. ** RGB Image Structure
  245. *}
  246. type
  247. AUX_RGBImageRec = RECORD
  248. {BEGIN}
  249. sizeX, sizeY : GLint;
  250. data : ^BYTE;
  251. END;
  252. pAUX_RGBImageRec = ^AUX_RGBImageRec;
  253. {*
  254. ** Prototypes
  255. *}
  256. Procedure auxInitDisplayMode(mode:GLenum); glaux_dll;
  257. Procedure auxInitPosition(x,y,w,h:Integer); glaux_dll;
  258. {$ifndef WINNT}
  259. FUNCTION auxInitWindow(name:LPCSTR) : GLenum; glaux_dll;
  260. {$else}
  261. {$ifdef UNICODE }
  262. FUNCTION auxInitWindow (name:LPCWSTR) : GLenum; glaux_dll name 'auxInitWindowW';
  263. {$else}
  264. FUNCTION auxInitWindow (name:LPCSTR) : GLenum; glaux_dll name 'auxInitWindowA';
  265. {$endif}
  266. FUNCTION auxInitWindowA(name:LPCSTR) : GLenum; glaux_dll;
  267. FUNCTION auxInitWindowW(name:LPCWSTR) : GLenum; glaux_dll;
  268. {$endif}
  269. PROCEDURE auxCloseWindow; glaux_dll;
  270. PROCEDURE auxQuit; glaux_dll;
  271. PROCEDURE auxSwapBuffers; glaux_dll;
  272. { callbacks }
  273. type
  274. TAUXMAINPROC = PROCEDURE; glaux_callback;
  275. TAUXEXPOSEPROC = PROCEDURE(w, h : integer); glaux_callback;
  276. TAUXRESHAPEPROC = PROCEDURE(w, h : GLsizei); glaux_callback;
  277. TAUXIDLEPROC = PROCEDURE; glaux_callback;
  278. TAUXKEYPROC = PROCEDURE; glaux_callback;
  279. TAUXMOUSEPROC = PROCEDURE(VAR event : AUX_EVENTREC); glaux_callback;
  280. { callback setup routines }
  281. PROCEDURE auxMainLoop (func : TAUXMAINPROC); glaux_dll;
  282. PROCEDURE auxExposeFunc (func : TAUXEXPOSEPROC); glaux_dll;
  283. PROCEDURE auxReshapeFunc(func : TAUXRESHAPEPROC); glaux_dll;
  284. PROCEDURE auxIdleFunc (func : TAUXIDLEPROC); glaux_dll;
  285. PROCEDURE auxKeyFunc (val : integer; func : TAUXKEYPROC); glaux_dll;
  286. PROCEDURE auxMouseFunc (v1, v2 :integer; func : TAUXMOUSEPROC); glaux_dll;
  287. FUNCTION auxGetColorMapSize : integer; glaux_dll;
  288. PROCEDURE auxGetMouseLoc(var x, y : integer); glaux_dll;
  289. PROCEDURE auxSetOneColor(id : integer; r, g, b : GLfloat); glaux_dll;
  290. PROCEDURE auxSetFogRamp(v1, v2 : integer); glaux_dll;
  291. PROCEDURE auxSetGreyRamp; glaux_dll;
  292. PROCEDURE auxSetRGBMap(id : integer; var map : GLfloat); glaux_dll;
  293. {$ifndef WINNT}
  294. FUNCTION auxRGBImageLoad(name : LPCSTR) : pAUX_RGBImageRec; glaux_dll;
  295. {$else}
  296. {$ifndef GLAUXIMP}{ not present in GLauximp.dll }
  297. {$ifdef UNICODE}
  298. FUNCTION auxRGBImageLoad (name : LPCWSTR): pAUX_RGBImageRec; glaux_dll name 'auxRGBImageLoadW';
  299. {$else}
  300. FUNCTION auxRGBImageLoad (name : LPCSTR) : pAUX_RGBImageRec; glaux_dll name 'auxRGBImageLoadA';
  301. {$endif}
  302. FUNCTION auxRGBImageLoadA(name : LPCSTR) : pAUX_RGBImageRec; glaux_dll;
  303. FUNCTION auxRGBImageLoadW(name : LPCWSTR): pAUX_RGBImageRec; glaux_dll;
  304. {$endif}
  305. {$endif}
  306. {$ifndef WINNT}
  307. { this function is Windows specific! }
  308. FUNCTION auxDIBImageLoad(name : LPCSTR) : pAUX_RGBImageRec; glaux_dll;
  309. {$else}
  310. {$ifndef GLAUXIMP}{ not present in GLauximp.dll }
  311. {$ifdef UNICODE }
  312. FUNCTION auxDIBImageLoad (name : LPCWSTR): pAUX_RGBImageRec; glaux_dll name 'auxDIBImageLoadW';
  313. {$else}
  314. FUNCTION auxDIBImageLoad (name : LPCSTR) : pAUX_RGBImageRec; glaux_dll name 'auxDIBImageLoadA';
  315. {$endif}
  316. FUNCTION auxDIBImageLoadA(name : LPCSTR) : pAUX_RGBImageRec; glaux_dll;
  317. FUNCTION auxDIBImageLoadW(name : LPCWSTR): pAUX_RGBImageRec; glaux_dll;
  318. {$endif}
  319. {$endif}
  320. PROCEDURE auxCreateFont; glaux_dll;
  321. {$ifndef WINNT}
  322. PROCEDURE auxDrawStr (name : LPCSTR); glaux_dll;
  323. {$else}
  324. {$ifndef GLAUXIMP}{ not present in GLauximp.dll }
  325. {$ifdef UNICODE }
  326. PROCEDURE auxDrawStr (name : LPCWSTR); glaux_dll name 'auxDrawStrW';
  327. {$else}
  328. PROCEDURE auxDrawStr (name : LPCSTR); glaux_dll name 'auxDrawStrA';
  329. {$endif}
  330. PROCEDURE auxDrawStrA(name : LPCSTR); glaux_dll;
  331. PROCEDURE auxDrawStrW(name : LPCWSTR); glaux_dll;
  332. {$endif}
  333. {$endif}
  334. PROCEDURE auxWireSphere(v : GLdouble); glaux_dll;
  335. PROCEDURE auxSolidSphere(v : GLdouble); glaux_dll;
  336. PROCEDURE auxWireCube(v : GLdouble); glaux_dll;
  337. PROCEDURE auxSolidCube(v : GLdouble); glaux_dll;
  338. PROCEDURE auxWireBox(v1, v2, v3 : GLdouble); glaux_dll;
  339. PROCEDURE auxSolidBox(v1, v2, v3 : GLdouble); glaux_dll;
  340. PROCEDURE auxWireTorus(v1, v2 : GLdouble); glaux_dll;
  341. PROCEDURE auxSolidTorus(v1, v2 : GLdouble); glaux_dll;
  342. PROCEDURE auxWireCylinder(v1, v2 : GLdouble); glaux_dll;
  343. PROCEDURE auxSolidCylinder(v1, v2 : GLdouble); glaux_dll;
  344. PROCEDURE auxWireIcosahedron(v : GLdouble); glaux_dll;
  345. PROCEDURE auxSolidIcosahedron(v : GLdouble); glaux_dll;
  346. PROCEDURE auxWireOctahedron(v : GLdouble); glaux_dll;
  347. PROCEDURE auxSolidOctahedron(v : GLdouble); glaux_dll;
  348. PROCEDURE auxWireTetrahedron(v : GLdouble); glaux_dll;
  349. PROCEDURE auxSolidTetrahedron(v : GLdouble); glaux_dll;
  350. PROCEDURE auxWireDodecahedron(v : GLdouble); glaux_dll;
  351. PROCEDURE auxSolidDodecahedron(v : GLdouble); glaux_dll;
  352. PROCEDURE auxWireCone(v1, v2 : GLdouble); glaux_dll;
  353. PROCEDURE auxSolidCone(v1, v2 : GLdouble); glaux_dll;
  354. PROCEDURE auxWireTeapot(v : GLdouble); glaux_dll;
  355. PROCEDURE auxSolidTeapot(v: GLdouble); glaux_dll;
  356. {*
  357. ** Window specific functions
  358. ** hwnd, hdc, and hglrc valid after auxInitWindow()
  359. *}
  360. FUNCTION auxGetHWND : HWND; glaux_dll;
  361. FUNCTION auxGetHDC : HDC; glaux_dll;
  362. FUNCTION auxGetHGLRC : HGLRC; glaux_dll;
  363. {*
  364. ** Viewperf support functions and constants
  365. *}
  366. {* Display Mode Selection Criteria *}
  367. CONST { was an unnamed enum }
  368. AUX_USE_ID = 1;
  369. AUX_EXACT_MATCH = 2;
  370. AUX_MINIMUM_CRITERIA = 3;
  371. PROCEDURE auxInitDisplayModePolicy(val : GLenum); glaux_dll;
  372. FUNCTION auxInitDisplayModeID(val : GLint) : GLenum; glaux_dll;
  373. FUNCTION auxGetDisplayModePolicy : GLenum; glaux_dll;
  374. FUNCTION auxGetDisplayModeID : GLint; glaux_dll;
  375. FUNCTION auxGetDisplayMode : GLenum; glaux_dll;
  376. implementation
  377. { these functions are resolved macros -
  378. they should be "inline" if compile can do this }
  379. FUNCTION AUX_WIND_IS_RGB(x : DWORD) : BOOLEAN;
  380. BEGIN
  381. AUX_WIND_IS_RGB := ((x AND AUX_INDEX) = 0);
  382. END;
  383. FUNCTION AUX_WIND_IS_INDEX(x : DWORD) : BOOLEAN;
  384. BEGIN
  385. AUX_WIND_IS_INDEX := ((x AND AUX_INDEX) <> 0);
  386. END;
  387. FUNCTION AUX_WIND_IS_SINGLE(x : DWORD) : BOOLEAN;
  388. BEGIN
  389. AUX_WIND_IS_SINGLE := ((x AND AUX_DOUBLE) = 0);
  390. END;
  391. FUNCTION AUX_WIND_IS_DOUBLE(x : DWORD) : BOOLEAN;
  392. BEGIN
  393. AUX_WIND_IS_DOUBLE := ((x AND AUX_DOUBLE) <> 0);
  394. END;
  395. FUNCTION AUX_WIND_IS_INDIRECT(x : DWORD) : BOOLEAN;
  396. BEGIN
  397. AUX_WIND_IS_INDIRECT := ((x AND AUX_INDIRECT) <> 0);
  398. END;
  399. FUNCTION AUX_WIND_IS_DIRECT(x : DWORD) : BOOLEAN;
  400. BEGIN
  401. AUX_WIND_IS_DIRECT := ((x AND AUX_INDIRECT) = 0);
  402. END;
  403. FUNCTION AUX_WIND_HAS_ACCUM(x : DWORD) : BOOLEAN;
  404. BEGIN
  405. AUX_WIND_HAS_ACCUM := ((x AND AUX_ACCUM) <> 0);
  406. END;
  407. FUNCTION AUX_WIND_HAS_ALPHA(x : DWORD) : BOOLEAN;
  408. BEGIN
  409. AUX_WIND_HAS_ALPHA := ((x AND AUX_ALPHA) <> 0);
  410. END;
  411. FUNCTION AUX_WIND_HAS_DEPTH(x : DWORD) : BOOLEAN;
  412. BEGIN
  413. AUX_WIND_HAS_DEPTH := ((x AND (AUX_DEPTH24 OR AUX_DEPTH16)) <> 0);
  414. END;
  415. FUNCTION AUX_WIND_HAS_STENCIL(x : DWORD) : BOOLEAN;
  416. BEGIN
  417. AUX_WIND_HAS_STENCIL := ((x AND AUX_STENCIL) <> 0);
  418. END;
  419. FUNCTION AUX_WIND_USES_FIXED_332_PAL(x : DWORD) : BOOLEAN;
  420. BEGIN
  421. AUX_WIND_USES_FIXED_332_PAL := ((x AND AUX_FIXED_332_PAL) <> 0);
  422. END;
  423. {extern float auxRGBMap[20][3];
  424. PROCEDURE AUX_SETCOLOR(x, y);
  425. BEGIN
  426. IF (AUX_WIND_IS_RGB((x))
  427. THEN glColor3fv(auxRGBMap[y])
  428. ELSE glIndexf(y));
  429. END;
  430. - TODO}
  431. {begin{of init}
  432. end.
  433. {
  434. $Log$
  435. Revision 1.3 2000-10-01 22:17:59 peter
  436. * new bounce demo
  437. Revision 1.1.2.2 2000/10/01 22:12:28 peter
  438. * new demo
  439. }