home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C!T ROM 2
/
ctrom_ii_b.zip
/
ctrom_ii_b
/
PROGRAM
/
BASIC
/
MNUSYS11
/
MENUSYS.TXT
< prev
next >
Wrap
Text File
|
1993-09-23
|
11KB
|
313 lines
Menusys Menuing System
Text-Mode GUI for PowerBASIC 3.0
(C) Copyright 1993 by Tim Gerchmez
----------------------------------
** Sub and Function Reference **
Total Routines: 24
-----------------------------------------------------------------------------
* FUNCTION altkey%
This function returns the state of the ALT key. It will return one
if the ALT key is pressed, or zero if it isn't.
Example: IF altkey% <> 0 THEN PRINT "ALT Key Pressed!"
-----------------------------------------------------------------------------
* SUB dopcopyfrom
This routine copies the page zero text screen to page
one, turning off the mouse first if necessary.
Example: CALL dopcopyfrom
-----------------------------------------------------------------------------
* SUB dopcopyto
This routine copies the text screen at page one back
to page zero, turning off the mouse first if necessary.
Example: CALL dopcopyto
-----------------------------------------------------------------------------
* SUB drawbox (yd%, xd%, tpe%, shadow%, title$)
Draws a box with the upper left corner at the current cursor
position.
yd% / xd% = Y and X dimensions of the box desired
tpe% = border type:
0 = no border
1 = single border
2 = double border
shadow% = shadow type:
0 = no shadow
1 = left shadow
2 = right shadow
title$ = title for box (set to "" for none)
Example: LOCATE 1,1
CALL drawbox(10, 10, 1, 2, "This is a box")
------------------------------------------------------------------------------
* SUB findfile (fi$, yn%)
Searches for the specified path\file in fi$. If not
found, yn% = 0, else yn% = 1.
example: INPUT "Filename ";fi$
call findfile(fi$, yn%)
if yn% = 0 then print "File Not Found"
-----------------------------------------------------------------------------
* SUB mcheck
Checks current position of mouse cursor and state of buttons
and updates the corresponding global variables msy%, msx%, lb%
and rb% (for lb% and rb%, 1 = pressed, 0 = not pressed).
msy% = y coordinates of mouse cursor (1-25)
msx% = x coordinates of mouse cursor (1-80)
lb% = left button
rb% = right button
Example: CALL mcheck
-----------------------------------------------------------------------------
* SUB MENUSYS (menu$(), help$(), menucount%(), menutype%(), topchoice%, bottomchoice%)
Displays a pull-down menu at the top of the screen. DIM menu$
(topcount%, bottomcount%), help$(topcount%, bottomcount%),
menutype%(topcount%, bottomcount%). Topcount% should correspond
to the number of top (bar) menu choices available, and bottomcount%
to the MAXIMUM number of bottom menu choices available.
topchoice% and bottomchoice% will be returned, corresponding to the top
(bar) and bottom (box) menu choices selected by the user. If the user
presses ESC, bottomchoice% will equal zero.
* This is the "main" routine in the MENUSYS Library,
* and the one routine that calls most of the others.
Menu Types (for menutype%):
0 = Available (normal)
1 = Unavailable (cannot be selected)
2 = Bullet On
3 = Bullet Off
Use Function ALTKEY in a separate program to determine if the ALT key
is pressed (to call this routine) and/or use the mouse routines to
determine if the mouse cursor is in the top row and proper column
to call this routine. If not using ALTKEY or mouse cursor to call
MENUSYS, you can set topchoice% to the starting choice number for
the top menu before calling (defaults to menu option one).
Menu Selection Columns (for each top item):
1 = 1-10 2 = 11-20 3 = 21-30 4 = 31-40
5 = 41-50 6 = 51-60 7 = 61-70 8 = 71-80
Example: CALL menusys(menu$(), help$(), menucount%(), menutype%(), topch%, botch%)
PRINT "You Chose ";topch%; botch%
-----------------------------------------------------------------------------
* SUB mhardreset (ms%, nb%)
Checks status of mouse and resets if present. Use this routine
at the beginning of a program to check for the presence of a mouse
and to reset it if present.
Returns ms% = -1 and nb% = number of buttons if mouse driver present
and reset, otherwise ms% = 0.
Example: CALL mhardreset(ms%, nb%)
IF ms%<>0 then print "Mouse Found, with ";nb%;" buttons."
-----------------------------------------------------------------------------
* SUB mhide
Makes the mouse cursor invisible, and decrements the internal
mouse cursor flag by one.
Example: IF mouse% <> 0 THEN CALL mhide
-----------------------------------------------------------------------------
* SUB mscrolldown (nls%, uly%, ulx%, lry%, lrx%, atrb%)
Scrolls a portion of the text screen down, turning the mouse
cursor off first if necessary. Set uly% and ulx% to the
coordinates for the upper left corner of the area to scroll,
and lry% and lrx% to the lower right corner of the area to
scroll. Set atrb% to the attribute to scroll into the blank
area. nls% = number of lines to scroll down (if 0, the entire
area is blanked).
Example: CALL mscrolldown(1, 1, 1, 25, 80, 7)
-----------------------------------------------------------------------------
* SUB mscrollup (nls%, uly%, ulx%, lry%, lrx%, atrb%)
Scrolls a portion of the text screen up, turning the mouse
cursor off first if necessary. Set uly% and ulx% to the
coordinates for the upper left corner of the area to scroll,
and lry% and lrx% to the lower right corner of the area to
scroll. Set atrb% to the attribute to scroll into the blank
area. nls% = number of lines to scroll up (if 0, the entire
area is blanked).
Example: CALL mscrollup(1, 1, 1, 25, 80, 7)
-----------------------------------------------------------------------------
* SUB mshow
Increments the internal mouse cursor flag, and if flag = 0, makes
the mouse cursor visible. Flag defaults to -1 when driver is reset,
so this function will usually make the cursor visible on the screen.
Example: CALL mshow
-----------------------------------------------------------------------------
* SUB mwaitrelease
Waits for Left/Right Mouse Button to be Released.
Example: CALL mwaitrelease
------------------------------------------------------------------------------
* sub pagecopy(source%, dest%)
This routine copies the screen page specified in source% to the page
specified in dest%, and is called by dopcopyfrom and dopcopyto to
save/restore the current text screen.
This is a text-mode only imitation of the
QuickBASIC/QBASIC PCOPY command.
Example: CALL pagecopy(1, 0)
-----------------------------------------------------------------------------
* SUB printbottomhelp (hlp$)
Internal routine used by Menusys, but can be used externally as well.
Displays the line of help text in hlp$ on the bottom of the screen.
Blanks the bottom screen line if hlp$ = "-". To skip print, set hlp$
to "".
Example: hlp$="Press F1 for Help"
CALL printbottomhelp(hlp$)
-----------------------------------------------------------------------------
* SUB readhelp (topchoice%, bottomchoice%)
A routine to display context-sensitive help. Utilized by MENUSYS but can
also be called externally. The global variable HELPFN$ should be set to
the path\filename of the help file, and PROGNAME$ to the name of the program
that the help is for. The format of the help files in MENUSYS is:
[1/1]
HELP TEXT
~~~
[1/2]
HELP TEXT
~~~
[1/3]
HELP TEXT
~~~
The top and bottom menu entries for the help item desired should be in
topchoice% and bottomchoice% before calling. Notice that each help entry
in the help file has the top/bottom menu entries defined in square brackets,
followed immediately by the help text. At the end of the help text for each
menu item, there are three tildes in a row. There can be an unlimited
number of help items in each help file, as long as they follow the above
format (see the example help file included with MENUSYS). If you use
[0/0] or any other numbers that don't fall in the area of the top/bottom
menu entries, you can call readhelp from the main program to display help
on other program options. For example, you could CALL READHELP(0,0) and
have a [0/0] entry in your help file.
If you don't want MENUSYS to display help for the various pulldown menu
items, just set HELPFN$ to "" before calling. Also, if READHELP doesn't
find the help file indicated in HELPFN$, it won't crash but it won't
display any help either. If it finds the help file but not the entry
specified in topchoice%/bottomchoice%, it will display "NO HELP AVAILABLE
FOR THIS MENU ENTRY."
Example: PRINT "You Pressed F1!"
CALL readhelp(0, 0)
-----------------------------------------------------------------------------
* SUB readscreen (y%, x%, ch%, atr%, fgd%, bkg%)
A routine to read the contents of the screen at the Y (1-25) and X
(1-80) coordinates specified in y% and x%. The character at the screen
position specified will be returned in ch%, the attribute value in atr%,
the foreground color in fgd%, and the background color in bkg%.
Example: CALL readscreen(1, 1, ch%, atr%, fgd%, bkg%)
-----------------------------------------------------------------------------
* FUNCTION vidseg&
A function to return the correct video segment. VIDSEG& will equal
&hb800 if color or &hb000 if a monochrome monitor is detected. These
values can then be used with DEF SEG and an offset to access video
(text) memory directly.
Example: IF vidseg& = &Hb800 then print "Color"
-----------------------------------------------------------------------------
* SUB writescreen (y%, x%, ch%, atr%, fgd%, bkg%)
A routine to store a certain value at a specified screen location. Set y%
and x% to the Y and X screen coordinates desired, ch% to the character to
store. Then either set atr% to 0 and fgd% and bkg% to the desired
foreground/background colors, or set atr% to the desired attribute and
ignore the values of fgd% and bkg%, and call this routine.
Example: CALL writescreen(1, 1, 32, 0, 7, 1)
-----------------------------------------------------------------------------
Internal Routines used by function MENUSYS:
* SUB bottomdehilight (top%, bottom%, menu$(), menutype%())
This is an internal routine used by MENUSYS to dehighlight
box menu options.
* SUB bottomhilight (top%, bottom%, menu$(), menutype%())
This is an internal routine used by MENUSYS to highlight
box menu options.
* SUB printbottommenu (top%, menu$(), menucount%(), menutype%(), bcheck$)
An internal routine used by MENUSYS to display the bottom (box) menus.
* SUB printtopmenu (menu$(), hilight%)
An internal routine used by MENUSYS to display the top (bar) menu.
* SUB tophilight (top%, hilight%, menu$())
An internal routine used by MENUSYS to highlight entries on the top
(bar) menu.
-----------------------------------------------------------------------------