diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 1999-01-07 16:58:26 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 1999-01-07 16:58:26 +0000 |
| commit | 268771388c2900cc19646ee914098db310b323ba (patch) | |
| tree | 1339796fc45ef71721cba4866926ea928a9827ba | |
| parent | 975612bbe3fbf466a6e1d9c7a6873ac48a18b186 (diff) | |
Dammit, who put that DOS file in here...
git-svn-id: file:///fltk/svn/fltk/trunk@193 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | test/demo.cxx | 584 |
1 files changed, 292 insertions, 292 deletions
diff --git a/test/demo.cxx b/test/demo.cxx index d8263420e..73726f5ce 100644 --- a/test/demo.cxx +++ b/test/demo.cxx @@ -1,292 +1,292 @@ -//
-// "$Id: demo.cxx,v 1.5 1999/01/04 19:25:06 mike Exp $"
-//
-// Main demo program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to "fltk-bugs@easysw.com".
-//
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#if defined(WIN32) && !defined(CYGNUS)
-# include <direct.h>
-#else
-# include <unistd.h>
-#endif
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Button.H>
-#include <FL/filename.H>
-#include <FL/x.H>
-
-/* The form description */
-
-void doexit(Fl_Widget *, void *);
-void doback(Fl_Widget *, void *);
-void dobut(Fl_Widget *, long);
-
-Fl_Window *form;
-Fl_Button *but[9];
-
-void create_the_forms() {
- Fl_Widget *obj;
- form = new Fl_Window(370, 450);
- obj = new Fl_Box(FL_FRAME_BOX,20,390,330,40,"FLTK Demonstration");
- obj->color(FL_GRAY-4);
- obj->labelsize(24);
- obj->labelfont(FL_BOLD);
- obj->labeltype(FL_ENGRAVED_LABEL);
- obj = new Fl_Box(FL_FRAME_BOX,20,50,330,330,0);
- obj->color(FL_GRAY-8);
- obj = new Fl_Button(130,10,110,30,"Exit");
- obj->callback(doexit);
- obj = new Fl_Button(20,50,330,380); obj->type(FL_HIDDEN_BUTTON);
- obj->callback(doback);
- obj = but[0] = new Fl_Button(40,270,90,90);
- obj = but[1] = new Fl_Button(140,270,90,90);
- obj = but[2] = new Fl_Button(240,270,90,90);
- obj = but[5] = new Fl_Button(240,170,90,90);
- obj = but[4] = new Fl_Button(140,170,90,90);
- obj = but[3] = new Fl_Button(40,170,90,90);
- obj = but[6] = new Fl_Button(40,70,90,90);
- obj = but[7] = new Fl_Button(140,70,90,90);
- obj = but[8] = new Fl_Button(240,70,90,90);
- for (int i=0; i<9; i++) {
- but[i]->align(FL_ALIGN_WRAP);
- but[i]->callback(dobut, i);
- }
- form->forms_end();
-}
-
-/* Maintaining and building up the menus. */
-
-typedef struct {
- char name[64];
- int numb;
- char iname[9][64];
- char icommand[9][64];
-} MENU;
-
-#define MAXMENU 32
-
-MENU menus[MAXMENU];
-int mennumb = 0;
-
-int find_menu(char nnn[])
-/* Returns the number of a given menu name. */
-{
- int i;
- for (i=0; i<mennumb; i++)
- if (strcmp(menus[i].name,nnn) == 0) return i;
- return -1;
-}
-
-void create_menu(char nnn[])
-/* Creates a new menu with name nnn */
-{
- if (mennumb == MAXMENU -1) return;
- strcpy(menus[mennumb].name,nnn);
- menus[mennumb].numb = 0;
- mennumb++;
-}
-
-void addto_menu(char men[], char item[], char comm[])
-/* Adds an item to a menu */
-{
- int n = find_menu(men);
- if (n<0) { create_menu(men); n = find_menu(men); }
- if (menus[n].numb == 9) return;
- strcpy(menus[n].iname[menus[n].numb],item);
- strcpy(menus[n].icommand[menus[n].numb],comm);
- menus[n].numb++;
-}
-
-/* Button to Item conversion and back. */
-
-int b2n[][9] = {
- { -1, -1, -1, -1, 0, -1, -1, -1, -1},
- { -1, -1, -1, 0, -1, 1, -1, -1, -1},
- { 0, -1, -1, -1, 1, -1, -1, -1, 2},
- { 0, -1, 1, -1, -1, -1, 2, -1, 3},
- { 0, -1, 1, -1, 2, -1, 3, -1, 4},
- { 0, -1, 1, 2, -1, 3, 4, -1, 5},
- { 0, -1, 1, 2, 3, 4, 5, -1, 6},
- { 0, 1, 2, 3, -1, 4, 5, 6, 7},
- { 0, 1, 2, 3, 4, 5, 6, 7, 8}
- };
-int n2b[][9] = {
- { 4, -1, -1, -1, -1, -1, -1, -1, -1},
- { 3, 5, -1, -1, -1, -1, -1, -1, -1},
- { 0, 4, 8, -1, -1, -1, -1, -1, -1},
- { 0, 2, 6, 8, -1, -1, -1, -1, -1},
- { 0, 2, 4, 6, 8, -1, -1, -1, -1},
- { 0, 2, 3, 5, 6, 8, -1, -1, -1},
- { 0, 2, 3, 4, 5, 6, 8, -1, -1},
- { 0, 1, 2, 3, 5, 6, 7, 8, -1},
- { 0, 1, 2, 3, 4, 5, 6, 7, 8}
- };
-
-int but2numb(int bnumb, int maxnumb)
-/* Transforms a button number to an item number when there are
- maxnumb items in total. -1 if the button should not exist. */
- { return b2n[maxnumb][bnumb]; }
-
-int numb2but(int inumb, int maxnumb)
-/* Transforms an item number to a button number when there are
- maxnumb items in total. -1 if the item should not exist. */
- { return n2b[maxnumb][inumb]; }
-
-/* Pushing and Popping menus */
-
-char stack[64][32];
-char stsize = 0;
-
-void push_menu(char nnn[])
-/* Pushes a menu to be visible */
-{
- int n,i,bn;
- int men = find_menu(nnn);
- if (men < 0) return;
- n = menus[men].numb;
- for (i=0; i<9; i++) but[i]->hide();
- for (i=0; i<n; i++)
- {
- bn = numb2but(i,n-1);
- but[bn]->show();
- but[bn]->label(menus[men].iname[i]);
- }
- strcpy(stack[stsize],nnn);
- stsize++;
-}
-
-void pop_menu()
-/* Pops a menu */
-{
- if (stsize<=1) return;
- stsize -= 2;
- push_menu(stack[stsize]);
-}
-
-/* The callback Routines */
-
-void dobut(Fl_Widget *, long arg)
-/* handles a button push */
-{
- char command[255];
- int men = find_menu(stack[stsize-1]);
- int n = menus[men].numb;
- int bn = but2numb( (int) arg, n-1);
- if (menus[men].icommand[bn][0] == '@')
- push_menu(menus[men].icommand[bn]);
- else {
-#ifdef WIN32
- STARTUPINFO suInfo; // Process startup information
- PROCESS_INFORMATION prInfo; // Process information
-
- memset(&suInfo, 0, sizeof(suInfo));
- suInfo.cb = sizeof(suInfo);
-
-# ifdef _DEBUG
- sprintf(command, "%sd.exe", menus[men].icommand[bn]);
-# else
- sprintf(command, "%s.exe", menus[men].icommand[bn]);
-# endif // _DEBUG
-
- CreateProcess(NULL, command, NULL, NULL, FALSE,
- NORMAL_PRIORITY_CLASS, NULL, NULL, &suInfo, &prInfo);
-#else
- sprintf(command, "./%s &", menus[men].icommand[bn]);
- system(command);
-#endif // WIN32
- }
-}
-
-void doback(Fl_Widget *, void *) {pop_menu();}
-
-void doexit(Fl_Widget *, void *) {exit(0);}
-
-int load_the_menu(const char fname[])
-/* Loads the menu file. Returns whether successful. */
-{
- FILE *fin;
- char line[256], mname[64],iname[64],cname[64];
- int i,j;
- fin = fopen(fname,"r");
- if (fin == NULL)
- {
-// fl_show_message("ERROR","","Cannot read the menu description file.");
- return 0;
- }
- for (;;) {
- if (fgets(line,256,fin) == NULL) break;
- j = 0; i = 0;
- while (line[i] == ' ' || line[i] == '\t') i++;
- if (line[i] == '\n') continue;
- if (line[i] == '#') continue;
- while (line[i] != ':' && line[i] != '\n') mname[j++] = line[i++];
- mname[j] = '\0';
- if (line[i] == ':') i++;
- j = 0;
- while (line[i] != ':' && line[i] != '\n')
- {
- if (line[i] == '\\') {
- i++;
- if (line[i] == 'n') iname[j++] = '\n';
- else iname[j++] = line[i];
- i++;
- } else
- iname[j++] = line[i++];
- }
- iname[j] = '\0';
- if (line[i] == ':') i++;
- j = 0;
- while (line[i] != ':' && line[i] != '\n') cname[j++] = line[i++];
- cname[j] = '\0';
- addto_menu(mname,iname,cname);
- }
- fclose(fin);
- return 1;
-}
-
-int main(int argc, char **argv) {
- create_the_forms();
- char buf[256];
- strcpy(buf, argv[0]);
- filename_setext(buf,".menu");
- const char *fname = buf;
- int i = 0;
- if (!Fl::args(argc,argv,i) || i < argc-1)
- Fl::fatal("Usage: %s <switches> <menufile>\n%s",Fl::help);
- if (i < argc) fname = argv[i];
- if (!load_the_menu(fname)) Fl::fatal("Can't open %s",fname);
- strcpy(buf,fname);
- const char *c = filename_name(buf);
- if (c > buf) {buf[c-buf] = 0; chdir(buf);}
- push_menu("@main");
- form->show(argc,argv);
- Fl::run();
- return 0;
-}
-
-//
-// End of "$Id: demo.cxx,v 1.5 1999/01/04 19:25:06 mike Exp $".
-//
+// +// "$Id: demo.cxx,v 1.6 1999/01/07 16:58:26 mike Exp $" +// +// Main demo program for the Fast Light Tool Kit (FLTK). +// +// Copyright 1998 by Bill Spitzak and others. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems to "fltk-bugs@easysw.com". +// + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#if defined(WIN32) && !defined(CYGNUS) +# include <direct.h> +#else +# include <unistd.h> +#endif +#include <FL/Fl.H> +#include <FL/Fl_Window.H> +#include <FL/Fl_Box.H> +#include <FL/Fl_Button.H> +#include <FL/filename.H> +#include <FL/x.H> + +/* The form description */ + +void doexit(Fl_Widget *, void *); +void doback(Fl_Widget *, void *); +void dobut(Fl_Widget *, long); + +Fl_Window *form; +Fl_Button *but[9]; + +void create_the_forms() { + Fl_Widget *obj; + form = new Fl_Window(370, 450); + obj = new Fl_Box(FL_FRAME_BOX,20,390,330,40,"FLTK Demonstration"); + obj->color(FL_GRAY-4); + obj->labelsize(24); + obj->labelfont(FL_BOLD); + obj->labeltype(FL_ENGRAVED_LABEL); + obj = new Fl_Box(FL_FRAME_BOX,20,50,330,330,0); + obj->color(FL_GRAY-8); + obj = new Fl_Button(130,10,110,30,"Exit"); + obj->callback(doexit); + obj = new Fl_Button(20,50,330,380); obj->type(FL_HIDDEN_BUTTON); + obj->callback(doback); + obj = but[0] = new Fl_Button(40,270,90,90); + obj = but[1] = new Fl_Button(140,270,90,90); + obj = but[2] = new Fl_Button(240,270,90,90); + obj = but[5] = new Fl_Button(240,170,90,90); + obj = but[4] = new Fl_Button(140,170,90,90); + obj = but[3] = new Fl_Button(40,170,90,90); + obj = but[6] = new Fl_Button(40,70,90,90); + obj = but[7] = new Fl_Button(140,70,90,90); + obj = but[8] = new Fl_Button(240,70,90,90); + for (int i=0; i<9; i++) { + but[i]->align(FL_ALIGN_WRAP); + but[i]->callback(dobut, i); + } + form->forms_end(); +} + +/* Maintaining and building up the menus. */ + +typedef struct { + char name[64]; + int numb; + char iname[9][64]; + char icommand[9][64]; +} MENU; + +#define MAXMENU 32 + +MENU menus[MAXMENU]; +int mennumb = 0; + +int find_menu(char nnn[]) +/* Returns the number of a given menu name. */ +{ + int i; + for (i=0; i<mennumb; i++) + if (strcmp(menus[i].name,nnn) == 0) return i; + return -1; +} + +void create_menu(char nnn[]) +/* Creates a new menu with name nnn */ +{ + if (mennumb == MAXMENU -1) return; + strcpy(menus[mennumb].name,nnn); + menus[mennumb].numb = 0; + mennumb++; +} + +void addto_menu(char men[], char item[], char comm[]) +/* Adds an item to a menu */ +{ + int n = find_menu(men); + if (n<0) { create_menu(men); n = find_menu(men); } + if (menus[n].numb == 9) return; + strcpy(menus[n].iname[menus[n].numb],item); + strcpy(menus[n].icommand[menus[n].numb],comm); + menus[n].numb++; +} + +/* Button to Item conversion and back. */ + +int b2n[][9] = { + { -1, -1, -1, -1, 0, -1, -1, -1, -1}, + { -1, -1, -1, 0, -1, 1, -1, -1, -1}, + { 0, -1, -1, -1, 1, -1, -1, -1, 2}, + { 0, -1, 1, -1, -1, -1, 2, -1, 3}, + { 0, -1, 1, -1, 2, -1, 3, -1, 4}, + { 0, -1, 1, 2, -1, 3, 4, -1, 5}, + { 0, -1, 1, 2, 3, 4, 5, -1, 6}, + { 0, 1, 2, 3, -1, 4, 5, 6, 7}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8} + }; +int n2b[][9] = { + { 4, -1, -1, -1, -1, -1, -1, -1, -1}, + { 3, 5, -1, -1, -1, -1, -1, -1, -1}, + { 0, 4, 8, -1, -1, -1, -1, -1, -1}, + { 0, 2, 6, 8, -1, -1, -1, -1, -1}, + { 0, 2, 4, 6, 8, -1, -1, -1, -1}, + { 0, 2, 3, 5, 6, 8, -1, -1, -1}, + { 0, 2, 3, 4, 5, 6, 8, -1, -1}, + { 0, 1, 2, 3, 5, 6, 7, 8, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8} + }; + +int but2numb(int bnumb, int maxnumb) +/* Transforms a button number to an item number when there are + maxnumb items in total. -1 if the button should not exist. */ + { return b2n[maxnumb][bnumb]; } + +int numb2but(int inumb, int maxnumb) +/* Transforms an item number to a button number when there are + maxnumb items in total. -1 if the item should not exist. */ + { return n2b[maxnumb][inumb]; } + +/* Pushing and Popping menus */ + +char stack[64][32]; +char stsize = 0; + +void push_menu(char nnn[]) +/* Pushes a menu to be visible */ +{ + int n,i,bn; + int men = find_menu(nnn); + if (men < 0) return; + n = menus[men].numb; + for (i=0; i<9; i++) but[i]->hide(); + for (i=0; i<n; i++) + { + bn = numb2but(i,n-1); + but[bn]->show(); + but[bn]->label(menus[men].iname[i]); + } + strcpy(stack[stsize],nnn); + stsize++; +} + +void pop_menu() +/* Pops a menu */ +{ + if (stsize<=1) return; + stsize -= 2; + push_menu(stack[stsize]); +} + +/* The callback Routines */ + +void dobut(Fl_Widget *, long arg) +/* handles a button push */ +{ + char command[255]; + int men = find_menu(stack[stsize-1]); + int n = menus[men].numb; + int bn = but2numb( (int) arg, n-1); + if (menus[men].icommand[bn][0] == '@') + push_menu(menus[men].icommand[bn]); + else { +#ifdef WIN32 + STARTUPINFO suInfo; // Process startup information + PROCESS_INFORMATION prInfo; // Process information + + memset(&suInfo, 0, sizeof(suInfo)); + suInfo.cb = sizeof(suInfo); + +# ifdef _DEBUG + sprintf(command, "%sd.exe", menus[men].icommand[bn]); +# else + sprintf(command, "%s.exe", menus[men].icommand[bn]); +# endif // _DEBUG + + CreateProcess(NULL, command, NULL, NULL, FALSE, + NORMAL_PRIORITY_CLASS, NULL, NULL, &suInfo, &prInfo); +#else + sprintf(command, "./%s &", menus[men].icommand[bn]); + system(command); +#endif // WIN32 + } +} + +void doback(Fl_Widget *, void *) {pop_menu();} + +void doexit(Fl_Widget *, void *) {exit(0);} + +int load_the_menu(const char fname[]) +/* Loads the menu file. Returns whether successful. */ +{ + FILE *fin; + char line[256], mname[64],iname[64],cname[64]; + int i,j; + fin = fopen(fname,"r"); + if (fin == NULL) + { +// fl_show_message("ERROR","","Cannot read the menu description file."); + return 0; + } + for (;;) { + if (fgets(line,256,fin) == NULL) break; + j = 0; i = 0; + while (line[i] == ' ' || line[i] == '\t') i++; + if (line[i] == '\n') continue; + if (line[i] == '#') continue; + while (line[i] != ':' && line[i] != '\n') mname[j++] = line[i++]; + mname[j] = '\0'; + if (line[i] == ':') i++; + j = 0; + while (line[i] != ':' && line[i] != '\n') + { + if (line[i] == '\\') { + i++; + if (line[i] == 'n') iname[j++] = '\n'; + else iname[j++] = line[i]; + i++; + } else + iname[j++] = line[i++]; + } + iname[j] = '\0'; + if (line[i] == ':') i++; + j = 0; + while (line[i] != ':' && line[i] != '\n') cname[j++] = line[i++]; + cname[j] = '\0'; + addto_menu(mname,iname,cname); + } + fclose(fin); + return 1; +} + +int main(int argc, char **argv) { + create_the_forms(); + char buf[256]; + strcpy(buf, argv[0]); + filename_setext(buf,".menu"); + const char *fname = buf; + int i = 0; + if (!Fl::args(argc,argv,i) || i < argc-1) + Fl::fatal("Usage: %s <switches> <menufile>\n%s",Fl::help); + if (i < argc) fname = argv[i]; + if (!load_the_menu(fname)) Fl::fatal("Can't open %s",fname); + strcpy(buf,fname); + const char *c = filename_name(buf); + if (c > buf) {buf[c-buf] = 0; chdir(buf);} + push_menu("@main"); + form->show(argc,argv); + Fl::run(); + return 0; +} + +// +// End of "$Id: demo.cxx,v 1.6 1999/01/07 16:58:26 mike Exp $". +// |
