These are brief descriptions of the demo programs and what you can expect them to do. demo: control the postion of a square using two sliders. Use the return value of dopanel to compare against globals and decide what action to take. Control the value of an actuator from user code. demo2: like demo, except two vertical sliders, with one controlling the width of the other. demo3: like demo, but uses two panels, with some actuators on one and some on the other. demo4: like demo, three panels, buttons select color, call dumppanel(). demo5: overlapping actuators, (not really handled by the panel lib by the way). use of needredraw() and userredraw() to avoid continually redrawing the data window. note careful use of odd number of swapbuffers between dopanels(). demo6: use of drawpanel instead of dopanel, should allow moving of panels but doesn't. actuators don't do anything. demo7: uses downfuncs to set color, save drawing function, choose drawing function. uses activefunc of one button to continually update random number. uses upfunc to restore drawing function to that previously saved. bug- after drawing newsnorks, data window does not redisplay saved function until redraw is forced. demo8: like demo7, but now display reverts to saved function after newsnorks. initscriptpanel() called to create the default scripting control panel. Widebuttons used. demo9: no graphics, build a useract structure, use it as an actuator in one function and as a useract in another function. demo10: color map stepper, Marty's original demo for strip charts and meters. demo11: no panel library panels, just a demo of g_getstring. on NeWS systems there seems to be a bug if any other event get in the queue, so no clicking or moving this window. demo12: like demo4, with a typein that is not connected to anything. demo13: like demo12, with filled sliders. demo14: like demo4, with a puck instead of two sliders. uses PNL_ACCESS macro to access the actuator specific data for the puck. demo15: like demo14, with a floating puck. uses an upfunc to save the last position of the square so that it does not reset to zero each time the puck is selected (which is what floating pucks do). demo16: like demo15 with a rubber puck. demo17: first demo with no data window. action functions are used to set contents and mode of typeout. demo18: file viewer. another typeout demo. note not so good behaviour when clicking on the elevator region and then dragging into text. demo19: something like a dialog box, wioth error messages. demo20: demo14 with an expanded panel2. along with a button to call dumppanel(), there are the scripting functions. an up to date version of panel2 is available now with initscriptpanel(). demo21: like demo14, but no puck, use the mouse actuator instead. note use of a separately declared pointer to access actuator-specific data for the mouse (instead of PNL_ACCESS()). demo22: like demo, with slideroids instead of sliders. demo23: black data window, buttons flip visibility flags for sliders. panel's upfunc is fixpanel, reshapes panel to reflect appearance of sliders. demo24: no data window. two palettes, one input one, shaped like a slider and colored over a large range, and an output one, square with minval and maxval set to the same color. demo25: like demo, with dials. demo26: an interesting arrangement of dials and buttons. demo27: every kind of actutator up to this point, plus arrow buttons. note use of macros to control positioning of actuators in defpanel(). demo28: three multislider modes. one slider is unselectable, and so appears cross-hatched. note fine-control mode (holding down the control key) works for multisliders as well and sliders. demo29: a multislider with some fancy behaviour wired in for its sliderbars. lower sliderbar is an hslider, that controls the rate the middle slider bounces between the top and bottom. something like this is used in electro-paint for the modulating sliders. the sliderbar motions are all controlled by user code in the animatesliders() function. this is the first demo where the user builds a complex actuator by adding subactuators. demo30: a menu actuator. user builds a menu. menus don't pop by themselves, they are a stable rectangular region where you pick the subactuators just by dragging across them. demo31: the menu from demo30 gets added as a subactuator to an icon actuator, to add the popping behaviour. demo32: like demo31, but the subactuators of the menu are hsliders instead of menuitems. demo33: three popping menus as in demo31. this demo verifies left/right positioning of menus after being deiconified. demo34: like demo31, but uses the predefined iconmenu actuator instead of the icon/menu combination. see iconmenu.c for an example of a hierarchical actuator that looks like a simple actuator to the user. demo35: three frames at different sizes. note procedural definition of the frames. demo36: like demo30, but a cycle instead of a menu. demo37, demo38: (same code) the three menus from demo33 in a nested menu. demo39: a wild demo of label positioning. demo40: a panel with no actuators, to test library's behaviour under this admittedly degenerate case. demo41: like demo, but no dopanels, calls startpanel before entering main loop, and gets current actuator from the pnl_ca global. idea is to have the library running asynchronously in another thread. this is not working yet. demo42: like demo12, with the addition of a panel to control the visibility of the other panels. demo43: a large number of sliders scrolling in a scroll actuator. demo44: the mondo collection of actuators of demo27 in a scroll actuator. demo45: like demo12, with the addition of a delete button on each panel. After deleting all the panels there's not much left to do but kill it. demo46: like demo45, but comes up with a a single panel with buttons that create copies of the other three panels. nothing gets drawn in the data window until a panel3 (color) panel is created. multiple copies of each panel may exist. demo47: like demo28, but with horizontal multisliders.