ali@0
|
1 |
/*
|
ali@0
|
2 |
* $Id: message.c,v 1.5 2004/12/30 09:07:47 ali Exp $
|
ali@0
|
3 |
* Copyright (C) 2007 J. Ali Harlow
|
ali@0
|
4 |
* Min Hack may be freely redistributed. See license for details.
|
ali@0
|
5 |
*/
|
ali@0
|
6 |
|
ali@0
|
7 |
#include <stdlib.h>
|
ali@0
|
8 |
#include <stdio.h>
|
ali@0
|
9 |
#include <string.h>
|
ali@0
|
10 |
#include "minhack.h"
|
ali@0
|
11 |
|
ali@0
|
12 |
char minhack_yn_function(const char *ques, const char *choices, char def,
|
ali@0
|
13 |
int *count)
|
ali@0
|
14 |
{
|
ali@0
|
15 |
int i,x,ch,n=0,cnt=0;
|
ali@0
|
16 |
waddstr(windows[message_win].win,ques);
|
ali@0
|
17 |
if (*choices)
|
ali@0
|
18 |
{
|
ali@0
|
19 |
waddstr(windows[message_win].win," [");
|
ali@0
|
20 |
for(i=0;choices[i] && choices[i]!='\033';i++)
|
ali@0
|
21 |
waddch(windows[message_win].win,choices[i]);
|
ali@0
|
22 |
waddstr(windows[message_win].win,"] ");
|
ali@0
|
23 |
if (def)
|
ali@0
|
24 |
{
|
ali@0
|
25 |
char buf[5];
|
ali@0
|
26 |
sprintf(buf,"(%c) ",def);
|
ali@0
|
27 |
waddstr(windows[message_win].win,buf);
|
ali@0
|
28 |
}
|
ali@0
|
29 |
wclrtoeol(windows[message_win].win);
|
ali@0
|
30 |
getyx(windows[message_win].win,i,x);
|
ali@0
|
31 |
for(;;)
|
ali@0
|
32 |
{
|
ali@0
|
33 |
ch=wgetch(windows[message_win].win);
|
ali@0
|
34 |
switch(ch)
|
ali@0
|
35 |
{
|
ali@0
|
36 |
case '\033':
|
ali@0
|
37 |
if (strchr(choices,'q'))
|
ali@0
|
38 |
return 'q';
|
ali@0
|
39 |
else if (strchr(choices,'n'))
|
ali@0
|
40 |
return 'n';
|
ali@0
|
41 |
else
|
ali@0
|
42 |
return def;
|
ali@0
|
43 |
break;
|
ali@0
|
44 |
case ' ':
|
ali@0
|
45 |
case '\r':
|
ali@0
|
46 |
case '\n':
|
ali@0
|
47 |
return def;
|
ali@0
|
48 |
break;
|
ali@0
|
49 |
default:
|
ali@0
|
50 |
if (strchr(choices,'#') && strchr("0123456789",ch))
|
ali@0
|
51 |
{
|
ali@0
|
52 |
waddch(windows[message_win].win,ch);
|
ali@0
|
53 |
n++;
|
ali@0
|
54 |
cnt*=10;
|
ali@0
|
55 |
cnt+=ch-'0';
|
ali@0
|
56 |
}
|
ali@0
|
57 |
else if (strchr(choices,ch))
|
ali@0
|
58 |
{
|
ali@0
|
59 |
if (n)
|
ali@0
|
60 |
*count=cnt;
|
ali@0
|
61 |
return ch;
|
ali@0
|
62 |
}
|
ali@0
|
63 |
else if (cnt && (ch=='\b' || ch==127))
|
ali@0
|
64 |
{
|
ali@0
|
65 |
n--;
|
ali@0
|
66 |
wmove(windows[message_win].win,0,n+x);
|
ali@0
|
67 |
wclrtoeol(windows[message_win].win);
|
ali@0
|
68 |
cnt/=10;
|
ali@0
|
69 |
}
|
ali@0
|
70 |
break;
|
ali@0
|
71 |
}
|
ali@0
|
72 |
}
|
ali@0
|
73 |
}
|
ali@0
|
74 |
else
|
ali@0
|
75 |
return wgetch(windows[message_win].win);
|
ali@0
|
76 |
}
|
ali@0
|
77 |
|
ali@0
|
78 |
char *minhack_getlin(const char *query)
|
ali@0
|
79 |
{
|
ali@0
|
80 |
int ch,n=0,x,i,j;
|
ali@0
|
81 |
static char line[80];
|
ali@0
|
82 |
nhproxy_cb_flush_screen();
|
ali@0
|
83 |
minhack_putstr(message_win,0,query);
|
ali@0
|
84 |
wclrtoeol(windows[message_win].win);
|
ali@0
|
85 |
getyx(windows[message_win].win,i,x);
|
ali@0
|
86 |
for(;;)
|
ali@0
|
87 |
{
|
ali@0
|
88 |
ch=wgetch(windows[message_win].win);
|
ali@0
|
89 |
if (ch>=' ' && ch<='~' && n<sizeof(line)-1)
|
ali@0
|
90 |
{
|
ali@0
|
91 |
waddch(windows[message_win].win,ch);
|
ali@0
|
92 |
line[n++]=ch;
|
ali@0
|
93 |
}
|
ali@0
|
94 |
else if (n && (ch=='\b' || ch==127))
|
ali@0
|
95 |
{
|
ali@0
|
96 |
n--;
|
ali@0
|
97 |
wmove(windows[message_win].win,0,n+x);
|
ali@0
|
98 |
wclrtoeol(windows[message_win].win);
|
ali@0
|
99 |
}
|
ali@0
|
100 |
else if (ch=='\n' || ch=='\r')
|
ali@0
|
101 |
{
|
ali@0
|
102 |
line[n]='\0';
|
ali@0
|
103 |
return line;
|
ali@0
|
104 |
}
|
ali@0
|
105 |
else if (ch=='\033')
|
ali@0
|
106 |
{
|
ali@0
|
107 |
line[0]='\033';
|
ali@0
|
108 |
line[1]='\0';
|
ali@0
|
109 |
return line;
|
ali@0
|
110 |
}
|
ali@0
|
111 |
}
|
ali@0
|
112 |
}
|
ali@0
|
113 |
|
ali@0
|
114 |
int minhack_get_ext_cmd(void)
|
ali@0
|
115 |
{
|
ali@0
|
116 |
int i,cmd=-1;
|
ali@0
|
117 |
char *line;
|
ali@0
|
118 |
struct nhproxy_cb_get_extended_commands_res *commands;
|
ali@0
|
119 |
commands=nhproxy_cb_get_extended_commands();
|
ali@0
|
120 |
line=minhack_getlin("# ");
|
ali@0
|
121 |
for(i=0;i<commands->n_commands;i++)
|
ali@0
|
122 |
if (!strcmp(commands->commands[i],line))
|
ali@0
|
123 |
{
|
ali@0
|
124 |
cmd=i;
|
ali@0
|
125 |
break;
|
ali@0
|
126 |
}
|
ali@0
|
127 |
nhproxy_cb_free_extended_commands(commands);
|
ali@0
|
128 |
return cmd;
|
ali@0
|
129 |
}
|