home *** CD-ROM | disk | FTP | other *** search
- // ┌───────┐
- // ─────────>│ AVNER │
- // ─────────>│ BEN │──────> Software Engineering Method
- // └───────┘
- // 10 Dov-Hoz st. Tel-Aviv 63416 Israel tel. 972-3-221535
-
- // The Screen NAVigator, ver 1.10 March 1990
- // Copyright (c) 1989 by Avner Ben
- // Snav is not, and never was, free software.
- // for conditions for use refer to file "copyrigh.txt"
-
- // The Screen Navigator is an object-oriented device-independent
- // character-graphics driver package, written in the C++ language,
- // distributed in the form of C++ source code.
- // For further information refer to the documentation files.
-
- // this simple example is intended as a template to be extended and modified
- // by the user, provided the above title and copyright notice are unchanged
- // and are not ommitted.
-
- /***************************************************************************/
-
- // demonstration main program
- // a simple full-screen program, allowing the user accesss to some typical
- // features of the SNAV character-graphics driver, selecting from a
- // sliding-menu.
-
- // 4.11.89 avner ben coded
- /////// snav v1.1
- // 8.3.90-31.3.90 avner ben:
- // * C++ v2.0 upgrade * removed constant declaration of window coordinates
- // * removed inclusion of <io.h> * default screen and keyboard driver
- // allocation * added rotate and color-setup options *
-
- // Site history (of this copy):
- // __.__.__ ____________ : __________________.
-
- #include <stdio.h>
- #include <string.h>
- #include <conio.h>
- #include <ctype.h>
- #include "snav2.hpp"
- #include "demo1.hpp"
- #include "demo0.hpp"
- #include "demo2.hpp"
- #include "demo3.hpp"
-
- screen_driver_manager screen_driver(1);
- keyboard_driver_manager keyboard_driver(1);
- panel *display=screen_driver.allocate(square_pos(point_pos(1,1),point_pos(24,80)));
- panel *dialog=screen_driver.allocate(square_pos(point_pos(25,1),point_pos(25,80)));
- character_input *kbd=keyboard_driver.allocate(dialog);
-
- static void demo_arc(void);
- static void demo_oblong(void);
- static void demo_zigzag(void);
- static void demo_spiral(void);
- static void demo_twg_scr(void);
- static void demo_list_alph(void);
- static void demo_cut(void);
- static void demo_paste(void);
- static void demo_rotate(void);
- static void demo_setup(void);
- static void intro(void);
-
- main()
- {
- display->clear();
- intro();
- slide_menu topmnu(display,dialog); // chops top line off display
- display->enframe(h1v1,"SNAV demo",TRUE);
- // build a one-menu system
- topmnu.append_opt("arc",1,"draw a strait line, possibly with arrowhead");
- topmnu.append_opt("oblong",1,"draw an oblong frame");
- topmnu.append_opt("zigzag",1,"draw a diagonal dented curve");
- topmnu.append_opt("spiral",1,"draw a square-like spiral curve");
- topmnu.append_opt("twg",1,"convert TypeWriter-Graphics on screen (weight 0:0) to semigraphics");
- topmnu.append_opt("cut",1,"trace shape on screen and store in memory");
- topmnu.append_opt("paste",1,"overlay shape stored by last cut operation");
- topmnu.append_opt("roatate",1,"cut, rotate 90 degrees clockwise, paste");
- topmnu.append_opt("internals",1,"list the current internal semigraphic alphabet definition");
- topmnu.append_opt("setup",4,"modify screen colours");
- topmnu.append_opt("clear",2,"clear the screen");
- topmnu.append_opt("quit",1,"return to DOS");
- int opt=topmnu.select(); // msg to menu to query user
- while (opt) {
- if (opt==12) break;
- switch (opt) {
- case 1 : demo_arc(); break;
- case 2 : demo_oblong(); break;
- case 3 : demo_zigzag(); break;
- case 4 : demo_spiral(); break;
- case 5 : demo_twg_scr(); break;
- case 6 : demo_cut(); break;
- case 7 : demo_paste(); break;
- case 8 : demo_rotate(); break;
- case 9 : demo_list_alph(); break;
- case 10 : demo_setup(); break;
- case 11 : display->clear(); break;
- }
- opt=topmnu.select();
- }
- display->deframe();
- // we have thre different screens to clear!
- display->set_def_color(color_ind()); // if background changed...
- topmnu.clear(); display->clear(); kbd->clear();
- return(0);
- }
-
- static void demo_arc()
- {
- if (!kbd->get_position
- ("move cursor to arc start and press enter (escape to quit):",display))
- return;
- point_pos stpoint=display->ask_where();
- int len=kbd->get_number("length:",80); kbd->put_s(", ");
- direction dir=kbd->get_dir(); kbd->put_s(", ");
- weight_d wgt=kbd->get_wgt(); kbd->put_s(", ");
- boolean tipped=kbd->get_boolean("tipped:"); kbd->clear();
- (arc(len,dir,wgt,tipped)).list(display,&stpoint);
- }
-
- static void demo_oblong()
- {
- if (!kbd->get_position
- ("move cursor to Left-Up-corner and press enter (escape to quit):",display))
- return;
- point_pos stpoint=display->ask_where();
- int wd=kbd->get_number("length:",80); kbd->put_s(", ");
- int hgt=kbd->get_number("height:",80); kbd->put_s(", ");
- weight_d wgt=kbd->get_wgt();
- (oblong(wd,hgt,wgt)).list(display,&stpoint);
- }
-
- static void demo_zigzag()
- {
- if (!kbd->get_position
- ("move cursor to curve start and press enter (escape to quit):",display))
- return;
- point_pos stpoint=display->ask_where();
- int len=kbd->get_number("length:",80); kbd->put_s(", ");
- direction dir1=kbd->get_dir(); kbd->put_s(", ");
- direction dir2=kbd->get_dir(); kbd->put_s(", ");
- weight_d wgt=kbd->get_wgt();
- (zigzag(len,dir1,dir2,wgt)).list(display,&stpoint);
- }
-
- static void demo_spiral()
- {
- if (!kbd->get_position
- ("move cursor to curve start and press enter (escape to quit):",display))
- return;
- point_pos stpoint=display->ask_where();
- int len=kbd->get_number("length:",80); kbd->put_s(", ");
- direction dir=kbd->get_dir(); kbd->put_s(", ");
- weight_d wgt=kbd->get_wgt();
- (spiral(len,dir,wgt)).list(display,&stpoint);
- }
-
- static void demo_list_alph()
- {
- display->save(); display->clear();
- FILE *tempf=fopen("temp.$$$","w");
- if (!tempf) { kbd->msg("cannot open temporary file"); return; }
- alph->list(tempf); fclose(tempf);
- tempf=fopen("temp.$$$","r");
- if (!tempf) { kbd->msg("cannot open temporary file"); return; }
- char c; int i=display->ask_limit(up); boolean newline=FALSE;
- while ((c=getc(tempf))!=EOF) {
- if (newline) {
- if (++i>display->ask_limit(dn)) {
- kbd->msg("press any key...");
- display->clear();
- i=display->ask_limit(up);
- } else display->posit(&(point_pos(i,display->ask_limit(lt))));
- newline=FALSE;
- }
- if (c=='\n') newline=TRUE;
- else display->put_c(c);
- }
- fclose(tempf); remove("temp.$$$");
- kbd->msg("press any key..."); display->restore();
- }
-
- static void demo_twg_scr()
- {
- char buf[81];
- sprintf(buf,"%04d characters modified. press any key...",display->twg());
- kbd->msg(buf);
- }
-
- shape *killbuf=NULL;
-
- static void demo_cut(void)
- {
- if (!kbd->get_position
- ("place cursor anywhere on curve and press enter",display,FALSE))
- return;
- kbd->clear();
- kbd->put_s("wait...");
- point_pos stpoint=display->ask_where();
- point_pos savpt=stpoint;
- killbuf=new tracing(display,&stpoint);
- killbuf->clear(display,&savpt);
- }
-
- static void demo_paste(void)
- {
- if (!killbuf) return;
- if (!kbd->get_position
- ("place cursor on curve start and press enter",display,FALSE))
- return;
- killbuf->list(display,&(display->ask_where()));
- }
-
- static void demo_rotate(void)
- {
- if (!kbd->get_position
- ("place cursor anywhere on curve and press enter",display,FALSE))
- return;
- kbd->clear();
- kbd->put_s("wait...");
- point_pos stpoint=display->ask_where();
- point_pos savpt=stpoint;
- killbuf=new tracing(display,&stpoint);
- killbuf->clear(display,&savpt);
- for (stroke *sk=killbuf->ask_start(); sk; sk=sk->get_next())
- sk->turn();
- killbuf->list(display,&savpt);
- }
-
- static void demo_setup()
- {
- display->save();
- display->clear();
- int background_chg=0;
- int opt=99;
- point_pos pt=display->ask_where();
- while (opt) {
- display->clear();
- point_pos pt(dn,display->ask_where());
- display->put_s("screen setup options:",&pt); pt++;
- display->put_s("1. background color",&pt); pt++;
- display->put_s("2. forground color",&pt); pt++;
- display->put_s("3. display attributes",&pt); pt++;
- pt.move(dn);
- display->put_s("WARNING: color recognition is experimental with this release!",&pt); pt++;
- do {
- kbd->clear();
- opt=kbd->get_number("enter selection (escape to quit):",3);
- } while (opt>3);
- if (opt==1) {
- display->clear();
- point_pos pt(dn,display->ask_where());
- display->put_s("background colors:",&pt); pt++;
- display->put_s("1. black",&pt); pt++;
- display->put_s("2. blue",&pt); pt++;
- display->put_s("3. green",&pt); pt++;
- display->put_s("4. cyan",&pt); pt++;
- display->put_s("5. red",&pt); pt++;
- display->put_s("6. magenta",&pt); pt++;
- display->put_s("7. yellow",&pt); pt++;
- display->put_s("8. white",&pt); pt++;
- do {
- kbd->clear();
- opt=kbd->get_number("enter selection (escape to quit):",8);
- } while (opt>8);
- if (opt) {
- display->set_def_background((vd_clr)(opt-1));
- background_chg=opt;
- }
- } else if (opt==2) {
- display->clear();
- point_pos pt(dn,display->ask_where());
- display->put_s("forground colors:",&pt); pt++;
- display->put_s("1. black",&pt); pt++;
- display->put_s("2. blue",&pt); pt++;
- display->put_s("3. green",&pt); pt++;
- display->put_s("4. cyan",&pt); pt++;
- display->put_s("5. red",&pt); pt++;
- display->put_s("6. magenta",&pt); pt++;
- display->put_s("7. yellow",&pt); pt++;
- display->put_s("8. white",&pt); pt++;
- do {
- kbd->clear();
- opt=kbd->get_number("enter selection (escape to quit):",8);
- } while (opt>8);
- if (opt) display->set_def_forground((vd_clr)(opt-1));
- } else if (opt==3) {
- display->clear();
- point_pos pt(dn,display->ask_where());
- display->put_s("visual attributes (toggles):",&pt); pt++;
- display->put_s("1. high-intensity (forground)",&pt); pt++;
- display->put_s("2. blink",&pt); pt++;
- display->put_s("3. reverse-video",&pt); pt++;
- do {
- kbd->clear();
- opt=kbd->get_number("enter selection (escape to quit):",3);
- } while (opt>3);
- if (opt) {
- if (opt==1) opt=(int)VD_HI;
- else if (opt==2) opt=(int)VD_BLNK;
- else if (opt==3) opt=(int)VD_REV;
- display->set_def_attr((vd_attr)opt);
- }
- }
- }
- display->restore();
- if (background_chg)
- display->set_def_background((vd_clr)(background_chg-1));
- }
-
- static void intro()
- {
- static char *text1[]={
- " The Screen NAVigator, ver 1.10 March 1990 ",
- " Copyright (c) 1989 by Avner Ben",
- " ",
- " D E M O N S T R A T I O N",
- " (sample application)",
- "\0"
- };
- static char *text2[]={
- " The Screen NAVigator is an object-oriented device- ",
- " independent character-graphics driver package, written in",
- " the C++ language, distributed as C++ source code. For",
- " further information refer to the documentation files.",
- "\0"
- };
- static char *text3[]={
- " This simplistic application program demonstrates only some",
- " of the things the C++ programmer may do with SNAV package.",
- " The Screen NAVigator is intended to be included in C++",
- " programs, by proffessional programmers. Typical applictions",
- " involve semi-graphic, text-oriented charts.",
- "\0"
- };
-
- text_window *intro_box=new text_window(display,&point_pos(9,7),"demonstration",TRUE,text1);
- intro_box->pause("any key");
- intro_box->put_page(text2);
- intro_box->pause("any key");
- intro_box->put_page(text3);
- intro_box->pause("any key");
- delete intro_box;
- }
-