home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Revista CD Expert 10
/
CDE10.mdf
/
ah3
/
menu.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-11-28
|
6KB
|
357 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <graph.h>
//#include "netnow\hmistd.h"
#include "iff.h"
#include "shell.h"
#include "types.h"
#include "frontend.h"
#include "frglobs.h"
#include "frontdef.h"
#define PAPER _CYAN
typedef int BOOL;
/*-----------------03/05/95 10:11-------------------
SIMPLE MENU SYSTEM
Up to 10 menu entries displayed, with title and instructions.
Keys 0-9 select menu entry- entry highlighted and number returned to app.
--------------------------------------------------*/
/*-----------------01/08/95 15:04-------------------
I'm about to attempt converting it to use the pcshell. Tch.
--------------------------------------------------*/
/*-----------------01/08/95 16:22-------------------
nah.
--------------------------------------------------*/
/****************************************************************************
GLOBALS
***************************************************************************/
char menu[10][40];
char title[30];
char instruct[30];
char oldMensel=0;
char swazzBlazz=0; /*Ooh fuck*/
char oMess[40]; /*Current message*/
char blanx[39]=" ";
short mensel;
short menu_h,menu_y;
#define MENU_WIDTH 200
#define MENU_X 60
/***************************************************************************
FUNCTIONS
***************************************************************************/
BOOL doKey (void)
{
return (keydata->keys_held);
}
/*Checks if 'q' is pressed*/
BOOL quitKey (void)
{
if(keydeb(K_Q))
return (1);
else
return (0);
}
/*Waits for any key to be pressed*/
void anyKey (void)
{
while (keydata->keys_held==0)
{}
}
/*Waits until 'q' is pressed. */
void waitQuit (void)
{
while (quitKey()!=TRUE)
{
wait_loop(1);
}
}
/*Clear the screen in current background colour*/
void cls (void)
{
// _clearscreen (_GCLEARSCREEN);
}
/*Initialize the menu system (MODE and COLOURS)*/
void openGraph (void)
{
}
/*Resets to default, on application end*/
void closeGraph (void)
{
}
/*Fills a string with blank characters (use memcpy ???)*/
void clrString (char *the_string,short siz)
{
//short i;
//
//for (i=0;i<siz;i++)
// {
// the_string[i]=' ';
// }
}
/*Hellishly boring function*/
void stringInput (char *nm,short ypos,short xpos,short siz)
{
int i;
char inch=' ';
int letters=0;
int maxText=siz;
char digit[3];
memset (nm,0,maxText);
while (inch!=13)
{
if (kbhit())
{
inch= getch();
/*
itoa (inch,digit,10);
_settextposition (ypos+2,xpos);
_outtext (digit);
*/
if (inch!=13)
{
if (inch==8)
{
if (letters!=0) letters--;
nm[letters]=' ';
}
else
if (letters<maxText)
{
nm[letters]=inch;
letters++;
}
}
}
}
}
/*Never makes a menu */
void makeMenu (char *mtitle,char *minstruct,char *m0,
char *m1,char *m2,char *m3,char *m4,char *m5,
char *m6,char *m7,char *m8,char *m9)
{
int i,j,k;
strcpy (title,mtitle);
strcpy (instruct,minstruct);
strcpy (menu[0],m0);
strcpy (menu[1],m1);
strcpy (menu[2],m2);
strcpy (menu[3],m3);
strcpy (menu[4],m4);
strcpy (menu[5],m5);
strcpy (menu[6],m6);
strcpy (menu[7],m7);
strcpy (menu[8],m8);
strcpy (menu[9],m9);
/*
for(i=0,j=0;i<10;i++)
{
k=stringlen(menu[i]);
if(k>j)
j=k;
}
menu_w=j;
menu_x=(SCREEN_WIDTH/2)-(menu_w/2);
*/
mensel=0;
oldMensel=0;
}
/* Display all menu entries */
void drawMenu (short entries)
{
short i,j;
char msel[20];
cls();
menu_h=entries*10;
menu_y=(SCREEN_HEIGHT/2)-(menu_h/2);
memcpy(scrptr,backim.data,320*200);
disp_3d_transbox(MENU_X-10,menu_y-10,MENU_WIDTH+20,menu_h+20);
set_col(255);
sprint(title,(SCREEN_WIDTH/2)-(stringlen(title))/2,20);
set_col(255);
sprint(instruct,(SCREEN_WIDTH/2)-(strlen(instruct))/2,30);
/************************/
for (i=0;i<entries;i++)
{
if(mensel==i)
{
set_col(255);
}
else
{
set_col(253);
}
sprint (menu[i],MENU_X+20,menu_y+(i*10));
}
dispexit();
disp_cursor();
/*
sprint ("MENSEL ",10,30);
sprintf (msel,"%d",mensel);
sprint (msel,100,30);
*/
dump_vram();
}
void reMessPort ()
{
messPort (oMess);
}
/*display system message in user port*/
void messPort (char *strg)
{
strcpy (oMess,strg);
_settextcolor(_WHITE);
_setbkcolor (_BLACK);
_settextposition (24,1);
_outtext (blanx);
_settextposition (24,1);
_outtext(strg);
_setbkcolor(PAPER);
}
/*Poll keyboard for MENU input, 0-9*/
short menuKey ()
{
char inch;
if (kbhit())
{
inch =tolower (getch());
if (inch=='q') return (-2);
if (inch>='0'&&inch<='9') return (atoi (&inch));
}
return (-1);
}
short menuMouseThingy(short entries)
{int i;
if(ctrlval !=CTRL_SELECT)
return -1;
if(mx<MENU_X || mx>MENU_X+MENU_WIDTH)
return -1;
if(my<menu_y || my>menu_y+menu_h)
return -1;
mensel=(my-menu_y)/10;
if(mensel==entries)
--mensel;
}
/*If menu key pressed , highlight and return entry number*/
short menuReq (short entries)
{
drawMenu(entries);
read_joypad();
if(menuMouseThingy(entries)!=-1)
return (mensel);
switch(ctrlval)
{
case CTRL_SELECT:
ctrlval=0;
return (mensel);
case CTRL_UP:
if(--mensel<0)
mensel=entries-1;
drawMenu(entries);
break;
case CTRL_CANCEL:
return (-2);
case CTRL_DOWN:
if(++mensel==entries)
mensel=0;
drawMenu(entries);
break;
}
return (-1);
}