home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Professional
/
OS2PRO194.ISO
/
os2
/
editor
/
me
/
menu.m
< prev
next >
Wrap
Text File
|
1994-01-31
|
5KB
|
241 lines
/*
MENU menu-name r1, c1, r2, c2 [COLOR color]
{
text [->function]
......
}
*/
#define HORIZ 1
#define VERT 2
#define TOP_LEFT 3
#define TOP_RIGHT 4
#define BOT_LEFT 5
#define BOT_RIGHT 6
#define DOWN 208
#define UP 200
string BoxChars[10];
int MenuRow1, MenuCol1, MenuRow2, MenuCol2;
int MenuColor;
string MenuName;
int debug;
do_menu(menuname)
string menuname;
{
debug = 0;
old_buf = currbuf();
/*
The format of a menu is :
MENU menu-name row1, col1, row2, col2 [COLOR colornum]
{
text1 [->function]
..... ............
}
*/
if (!index(menuname, ".mnu"))
menuname = strcat(menuname, ".mnu");
new_buf = setcurrbuf(create_buffer(menuname));
setcol(1);
if (MenuParse() < 0)
{
delete_buffer(new_buf);
show_buffer(old_buf);
return;
}
win_id = create_window(MenuRow1+1, MenuCol1+1, MenuRow2-1, MenuCol2-1, MenuColor);
attach_window(win_id, new_buf);
gobof();
DrawBox(MenuRow1-1, MenuCol1, MenuRow2-1, MenuCol2, MenuColor);
MenuProcess();
delete_buffer(new_buf);
show_buffer(old_buf);
refresh();
}
MenuParse()
{
if (get_token() != "MENU")
{
message("The file is not a menu deinition file");
get_tty_char();
return -1;
}
MenuName = get_token();
MenuRow1 = get_int_token();
MenuCol1 = get_int_token();
MenuRow2 = get_int_token();
MenuCol2 = get_int_token();
if ((s = get_token()) == "COLOR")
{
MenuColor = get_int_token();
s = get_token();
}
else
MenuColor = 07;
if (s != "{")
{
message("Missing '{' in menu definition");
/*
get_tty_char();
return -1;
*/
}
start_text_line = currlinenum();
/* Get rid of the Menu Defn line and the opening brace */
gobof();
setcount(start_text_line-1);
delline();
/* Get rid of the ending brace */
if (fsearch("}") > 0)
delline();
/* Get rid of any trailing blank lines */
while (strlen(currline()) == 0)
delline();
return 1;
}
get_token()
{
string s;
if (is_eol() || currchar() == " ")
nextword();
if (is_eof())
return "";
start = currcol();
while (!is_eol() && currchar() != ' ')
right();
s = substr(currline(), start, currcol() - start);
nextword();
if (debug)
get_tty_str(sprintf("GET_TOKEN - s is [%s]", s));
return s;
}
get_int_token()
{
n = atoi(get_token());
if (debug)
get_tty_str(sprintf("GET_INT_TOKEN - n is %d", n));
return n;
}
/* ------------------------- MENU PROCESSING ------------------------- */
#define ESC 27
#define UP 200
#define DOWN 208
MenuProcess()
{
markline();
do_it:
while ((c = get_tty_char()) != '\n' && c != ESC)
{
switch (c)
{
case UP :
MenuUp();
break;
case DOWN :
MenuDown();
break;
default :
bell();
break;
}
}
if (c == '\n')
{
cln = currlinenum();
if ((i = index(currline(), "->")) > 0)
{
macname = substr(currline(), i+2, 100);
domacro(macname);
}
DrawBox(MenuRow1-1, MenuCol1, MenuRow2-1, MenuCol2, MenuColor);
goline(cln);
goto do_it;
}
}
MenuUp()
{
if (currlinenum() > 1)
{
clear_mark();
up();
markline();
}
}
MenuDown()
{
if (currlinenum() < lastlinenum())
{
clear_mark();
down();
markline();
}
}
DrawBox(row1, col1, row2, col2, color)
{
BoxChars[HORIZ] = "═";
BoxChars[VERT] = "║";
BoxChars[TOP_LEFT] = "╔";
BoxChars[TOP_RIGHT] = "╗";
BoxChars[BOT_LEFT] = "╚";
BoxChars[BOT_RIGHT] = "╝";
start_row = row1;
start_col = col1;
end_row = row2;
end_col = col2;
width = col2 - col1 + 1;
horiz_line = repstr(BoxChars[HORIZ], width - 2);
blank_line = repstr(" ", width - 2);
display(row1, col1 + 1, col1 + width - 1, color, horiz_line);
display(row2, col1 + 1, col1 + width - 1, color, horiz_line);
for (r = row1+1; r < row2; r++)
{
display(r, col1, col1, color, BoxChars[VERT]);
/* display(r, col1+1, col2-1, color, blank_line); */
display(r, col2, col2, color, BoxChars[VERT]);
}
display(row1, col1, col1, color, BoxChars[TOP_LEFT]);
display(row1, col2, col2, color, BoxChars[TOP_RIGHT]);
display(row2, col1, col1, color, BoxChars[BOT_LEFT]);
display(row2, col2, col2, color, BoxChars[BOT_RIGHT]);
}