mirror of
https://git.zap.org.au/git/trader.git
synced 2024-12-04 14:46:45 -05:00
Implement the show_help() function with sample text
This commit is contained in:
parent
09d4455c3e
commit
92a95b253f
@ -104,7 +104,9 @@ typedef enum map_val {
|
|||||||
MAP_LAST = MAP_A + MAX_COMPANIES - 1
|
MAP_LAST = MAP_A + MAX_COMPANIES - 1
|
||||||
} map_val_t;
|
} map_val_t;
|
||||||
|
|
||||||
#define MAP_COMPANY(x) (MAP_A + x)
|
#define MAP_COMPANY(x) (MAP_A + (x))
|
||||||
|
#define MAP_ISCOMPANY(x) ((x) >= MAP_A && (x) <= MAP_LAST)
|
||||||
|
#define PRINTABLE_MAP_VAL(x) ((char) (x))
|
||||||
|
|
||||||
|
|
||||||
// Information about a move
|
// Information about a move
|
||||||
@ -113,6 +115,11 @@ typedef struct move_rec {
|
|||||||
int y;
|
int y;
|
||||||
} move_rec_t;
|
} move_rec_t;
|
||||||
|
|
||||||
|
#define MOVE_TO_KEY(m) ((m) + 'a')
|
||||||
|
#define KEY_TO_MOVE(k) \
|
||||||
|
((tolower(k) < 'a' || tolower(k) >= MOVE_TO_KEY(NUMBER_MOVES)) ? \
|
||||||
|
ERR : (tolower(k) - 'a'));
|
||||||
|
|
||||||
|
|
||||||
// Company names
|
// Company names
|
||||||
extern const char *company_name[MAX_COMPANIES];
|
extern const char *company_name[MAX_COMPANIES];
|
||||||
|
241
src/help.c
241
src/help.c
@ -31,11 +31,250 @@
|
|||||||
#include "trader.h"
|
#include "trader.h"
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************
|
||||||
|
* Help text definition *
|
||||||
|
************************************************************************/
|
||||||
|
|
||||||
|
#define HELP_TEXT_PAGES (3)
|
||||||
|
const char *help_text[HELP_TEXT_PAGES] = {
|
||||||
|
"^BStar Traders^N help text, page 1."
|
||||||
|
,
|
||||||
|
|
||||||
|
"Page 2. Test of ^B~~^N constants and ^B^^^N attributes.\n"
|
||||||
|
"MAX_X = ~x\n"
|
||||||
|
"MAX_Y = ~y\n"
|
||||||
|
"NUMBER_MOVES = ~m (~1, ~2, ~3, ~4, ~5, ~6, ~7, ~8, ~9, ... ~M)\n"
|
||||||
|
"MAX_COMPANIES = ~c\n"
|
||||||
|
"DEFAULT_MAX_TURN = ~t\n"
|
||||||
|
"\n"
|
||||||
|
"^BBold text^N\n"
|
||||||
|
"^HHighlight text^N\n"
|
||||||
|
"^KKeycode string^N, for example, \"Press ^K<ESC>^N to quit\".\n"
|
||||||
|
"Map: ^eempty space^N as in ^e . ^N\n"
|
||||||
|
"Map: ^ooutpost^N as in ^o + ^N\n"
|
||||||
|
"Map: ^sstar^N as in ^s * ^N\n"
|
||||||
|
"Map: ^ccompany^N as in ^c ~A ~B ~C ~D ~E ~F ~G ~H ^N\n"
|
||||||
|
"Map: ^kkey choice^N as in ^k~1^N, ^k~2^N, ^k~3^N, up to ^k~M^N.\n"
|
||||||
|
,
|
||||||
|
|
||||||
|
"Page 3. Test map\n"
|
||||||
|
"\n"
|
||||||
|
" ^c~A^e . . ^o+^e ^o+^e . ^s*^e .^N\n"
|
||||||
|
" ^c~A^e ^s*^e ^s*^e . . . . .^N\n"
|
||||||
|
" ^c~A^e ^c~A^e . . . ^s*^e ^c~C^e .^N\n"
|
||||||
|
" ^e. . ^k~2^e ^s*^e . . ^k~3^e .^N\n"
|
||||||
|
" ^e. ^k~1^e . ^c~B^e ^c~B^e . . .^N\n"
|
||||||
|
,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Help text function definitions *
|
* Help text function definitions *
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
void show_help (void)
|
void show_help (void)
|
||||||
{
|
{
|
||||||
// @@@ To be written
|
int curpage = 0;
|
||||||
|
bool done = false;
|
||||||
|
|
||||||
|
|
||||||
|
newtxwin(23, 80, LINE_OFFSET+1, COL_CENTER(80));
|
||||||
|
|
||||||
|
while (! done) {
|
||||||
|
// Display a page of instructions
|
||||||
|
|
||||||
|
werase(curwin);
|
||||||
|
wbkgd(curwin, ATTR_NORMAL_WINDOW);
|
||||||
|
box(curwin, 0, 0);
|
||||||
|
center(curwin, 1, ATTR_WINDOW_TITLE, " How to Play ");
|
||||||
|
center(curwin, 2, ATTR_NORMAL_WINDOW, "Page %d of %d",
|
||||||
|
curpage + 1, HELP_TEXT_PAGES);
|
||||||
|
wmove(curwin, 4, 2);
|
||||||
|
|
||||||
|
// Process the help text string
|
||||||
|
|
||||||
|
const char *s = help_text[curpage];
|
||||||
|
int curattr = ATTR_NORMAL_WINDOW;
|
||||||
|
|
||||||
|
while (*s != '\0') {
|
||||||
|
switch (*s) {
|
||||||
|
case '\n':
|
||||||
|
// Start a new line, suitably indented
|
||||||
|
wmove(curwin, getcury(curwin) + 1, 2);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '^':
|
||||||
|
// Set the current attribute
|
||||||
|
s++;
|
||||||
|
switch (*s) {
|
||||||
|
case '^':
|
||||||
|
waddch(curwin, *s | curattr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'N':
|
||||||
|
curattr = ATTR_NORMAL_WINDOW;
|
||||||
|
wattrset(curwin, curattr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'B':
|
||||||
|
curattr = ATTR_NORMAL_WINDOW | A_BOLD;
|
||||||
|
wattrset(curwin, curattr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'H':
|
||||||
|
curattr = ATTR_HIGHLIGHT_STR;
|
||||||
|
wattrset(curwin, curattr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'K':
|
||||||
|
curattr = ATTR_KEYCODE_STR;
|
||||||
|
wattrset(curwin, curattr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'e':
|
||||||
|
curattr = ATTR_MAP_EMPTY;
|
||||||
|
wattrset(curwin, curattr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'o':
|
||||||
|
curattr = ATTR_MAP_OUTPOST;
|
||||||
|
wattrset(curwin, curattr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 's':
|
||||||
|
curattr = ATTR_MAP_STAR;
|
||||||
|
wattrset(curwin, curattr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
curattr = ATTR_MAP_COMPANY;
|
||||||
|
wattrset(curwin, curattr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'k':
|
||||||
|
curattr = ATTR_MAP_CHOICE;
|
||||||
|
wattrset(curwin, curattr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
waddch(curwin, '^' | curattr);
|
||||||
|
waddch(curwin, *s | curattr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '~':
|
||||||
|
// Print a global constant
|
||||||
|
s++;
|
||||||
|
switch (*s) {
|
||||||
|
case '~':
|
||||||
|
waddch(curwin, *s | curattr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'x':
|
||||||
|
wprintw(curwin, "%2d", MAX_X);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'y':
|
||||||
|
wprintw(curwin, "%2d", MAX_Y);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'm':
|
||||||
|
wprintw(curwin, "%2d", NUMBER_MOVES);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
wprintw(curwin, "%d", MAX_COMPANIES);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 't':
|
||||||
|
wprintw(curwin, "%2d", DEFAULT_MAX_TURN);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '1':
|
||||||
|
case '2':
|
||||||
|
case '3':
|
||||||
|
case '4':
|
||||||
|
case '5':
|
||||||
|
case '6':
|
||||||
|
case '7':
|
||||||
|
case '8':
|
||||||
|
case '9':
|
||||||
|
// N-th choice of move, as a key press
|
||||||
|
wprintw(curwin, "%c", MOVE_TO_KEY(*s - '1'));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'M':
|
||||||
|
// Last choice of move, as a key press
|
||||||
|
wprintw(curwin, "%c", MOVE_TO_KEY(NUMBER_MOVES - 1));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'A':
|
||||||
|
case 'B':
|
||||||
|
case 'C':
|
||||||
|
case 'D':
|
||||||
|
case 'E':
|
||||||
|
case 'F':
|
||||||
|
case 'G':
|
||||||
|
case 'H':
|
||||||
|
// Map representation of company
|
||||||
|
wprintw(curwin, "%c",
|
||||||
|
PRINTABLE_MAP_VAL(MAP_COMPANY(*s - 'A')));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
waddch(curwin, '~' | curattr);
|
||||||
|
waddch(curwin, *s | curattr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// Print the character
|
||||||
|
waddch(curwin, *s | curattr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
|
||||||
|
center(curwin, 21, ATTR_WAITNORMAL_STR, (curpage == 0) ?
|
||||||
|
"[ Press <SPACE> to continue ] " :
|
||||||
|
"[ Press <SPACE> to continue or <BACKSPACE> for the previous page ] ");
|
||||||
|
|
||||||
|
wrefresh(curwin);
|
||||||
|
|
||||||
|
int key = gettxchar(curwin);
|
||||||
|
|
||||||
|
switch (key) {
|
||||||
|
case KEY_BS:
|
||||||
|
case KEY_BACKSPACE:
|
||||||
|
case KEY_DEL:
|
||||||
|
case KEY_PPAGE:
|
||||||
|
case KEY_UP:
|
||||||
|
case KEY_LEFT:
|
||||||
|
case KEY_BTAB:
|
||||||
|
if (curpage == 0) {
|
||||||
|
beep();
|
||||||
|
} else {
|
||||||
|
curpage--;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY_CANCEL:
|
||||||
|
case KEY_CTRL('G'):
|
||||||
|
case KEY_ESC:
|
||||||
|
done = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
curpage++;
|
||||||
|
done = (curpage == HELP_TEXT_PAGES);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deltxwin();
|
||||||
|
txrefresh();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user