annotate libmenu/menu_console.c @ 26286:fc1724f6552c

Darwin and Win32 DVD support libs are handled separately, take them back out of the combined system and DVD header test in the dvdread check.
author diego
date Tue, 01 Apr 2008 21:59:39 +0000
parents 605d4e3e403f
children f8b6c7045cf8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
1
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 14087
diff changeset
2 #include "config.h"
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17993
diff changeset
3 #include "mp_msg.h"
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17993
diff changeset
4 #include "help_mp.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
5
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
6 #include <stdlib.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
7 #include <stdio.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
8 #include <string.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
9 #include <ctype.h>
8229
rfelker
parents: 8227
diff changeset
10 #include <sys/time.h>
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
11 #include <sys/types.h>
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 10333
diff changeset
12 #ifndef __MINGW32__
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
13 #include <sys/wait.h>
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 10333
diff changeset
14 #endif
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
15 #include <unistd.h>
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
16 #include <errno.h>
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
17
19431
ac69ba536915 Explicitly include libmpcodecs/img_format.h and libvo/fastmemcpy.h.
diego
parents: 18858
diff changeset
18 #include "libmpcodecs/img_format.h"
ac69ba536915 Explicitly include libmpcodecs/img_format.h and libvo/fastmemcpy.h.
diego
parents: 18858
diff changeset
19 #include "libmpcodecs/mp_image.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
20
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 14087
diff changeset
21 #include "m_struct.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 14087
diff changeset
22 #include "m_option.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
23 #include "menu.h"
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
24
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 14087
diff changeset
25 #include "libvo/font_load.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 14087
diff changeset
26 #include "osdep/keycodes.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 14087
diff changeset
27 #include "input/input.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 14087
diff changeset
28 #include "osdep/timer.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
29
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
30 typedef struct history_st history_t;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
31
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
32 struct history_st {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
33 char* buffer;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
34 int size;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
35 history_t* next;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
36 history_t* prev;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
37 };
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
38
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
39 struct menu_priv_s {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
40 char** lines; // Our buffer
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
41 int last_line;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
42 int num_lines;
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
43 int add_line;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
44 unsigned int hide_ts;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
45 unsigned int show_ts;
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
46 pid_t child; // Child process if we are running a shell cmd
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
47 int child_fd[3]; // The 3 default fd
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
48 char* prompt;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
49 //int max_lines; // Max number of lines with the last mpi
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
50 history_t* history;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
51 history_t* cur_history;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
52 int history_size;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
53
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
54 char* mp_prompt;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
55 char* child_prompt;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
56 int buf_lines; // Buffer size (in line)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
57 int height; // Display size in %
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
58 int minb;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
59 int vspace;
17993
98eb966a4024 Add a function to draw flat boxes and use it to make the list
albeu
parents: 16862
diff changeset
60 int bg,bg_alpha;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
61 unsigned int hide_time;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
62 unsigned int show_time;
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
63 int history_max;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
64 int raw_child;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
65 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
66
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
67 static struct menu_priv_s cfg_dflt = {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
68 NULL,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
69 0,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
70 0,
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
71 1,
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
72 0,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
73 0,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
74 0,
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
75 { 0 , 0, 0 },
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
76 NULL,
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
77 NULL,
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
78 NULL,
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
79 0,
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
80
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
81 "# ",
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
82 "$ ",
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
83 50, // lines
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
84 33, // %
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
85 3,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
86 3,
17993
98eb966a4024 Add a function to draw flat boxes and use it to make the list
albeu
parents: 16862
diff changeset
87 0x80,0x40,
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
88 500,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
89 500,
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
90 10,
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
91 0
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
92 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
93
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
94 #define ST_OFF(m) M_ST_OFF(struct menu_priv_s,m)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
95
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
96 static m_option_t cfg_fields[] = {
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
97 { "prompt", ST_OFF(mp_prompt), CONF_TYPE_STRING, M_OPT_MIN, 1, 0, NULL },
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
98 { "child-prompt", ST_OFF(child_prompt), CONF_TYPE_STRING, M_OPT_MIN, 1, 0, NULL },
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
99 { "buffer-lines", ST_OFF(buf_lines), CONF_TYPE_INT, M_OPT_MIN, 5, 0, NULL },
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
100 { "height", ST_OFF(height), CONF_TYPE_INT, M_OPT_RANGE, 1, 100, NULL },
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
101 { "minbor", ST_OFF(minb), CONF_TYPE_INT, M_OPT_MIN, 0, 0, NULL },
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
102 { "vspace", ST_OFF(vspace), CONF_TYPE_INT, M_OPT_MIN, 0, 0, NULL },
17993
98eb966a4024 Add a function to draw flat boxes and use it to make the list
albeu
parents: 16862
diff changeset
103 { "bg", ST_OFF(bg), CONF_TYPE_INT, M_OPT_RANGE, -1, 255, NULL },
98eb966a4024 Add a function to draw flat boxes and use it to make the list
albeu
parents: 16862
diff changeset
104 { "bg-alpha", ST_OFF(bg_alpha), CONF_TYPE_INT, M_OPT_RANGE, 0, 255, NULL },
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
105 { "show-time",ST_OFF(show_time), CONF_TYPE_INT, M_OPT_MIN, 0, 0, NULL },
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
106 { "hide-time",ST_OFF(hide_time), CONF_TYPE_INT, M_OPT_MIN, 0, 0, NULL },
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
107 { "history-size",ST_OFF(history_max), CONF_TYPE_INT, M_OPT_MIN, 1, 0, NULL },
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
108 { "raw-child", ST_OFF(raw_child), CONF_TYPE_FLAG, 0, 0, 1, NULL },
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
109 { NULL, NULL, NULL, 0,0,0,NULL }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
110 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
111
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
112 #define mpriv (menu->priv)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
113
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
114 static void check_child(menu_t* menu);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
115
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
116 static void add_line(struct menu_priv_s* priv, char* l) {
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
117 char* eol = strchr(l,'\n');
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
118
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
119 if(eol) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
120 if(eol != l) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
121 eol[0] = '\0';
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
122 add_line(priv,l);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
123 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
124 if(eol[1]) add_line(priv,eol+1);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
125 return;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
126 }
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
127
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
128 if(priv->num_lines >= priv->buf_lines && priv->lines[priv->last_line])
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
129 free(priv->lines[priv->last_line]);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
130 else
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
131 priv->num_lines++;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
132
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
133 priv->lines[priv->last_line] = strdup(l);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
134 priv->last_line = (priv->last_line + 1) % priv->buf_lines;
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
135 priv->add_line = 1;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
136 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
137
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
138 static void add_string(struct menu_priv_s* priv, char* l) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
139 char* eol = strchr(l,'\n');
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
140 int ll = priv->last_line > 0 ? priv->last_line - 1 : priv->buf_lines-1;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
141
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
142 if(priv->num_lines <= 0 || priv->add_line || eol == l) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
143 add_line(priv,l);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
144 priv->add_line = 0;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
145 return;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
146 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
147
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
148 if(eol) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
149 eol[0] = '\0';
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
150 add_string(priv,l);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
151 if(eol[1]) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
152 add_line(priv,eol+1);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
153 priv->add_line = 0;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
154 } else
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
155 priv->add_line = 1;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
156 return;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
157 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
158 priv->lines[ll] = realloc(priv->lines[ll],strlen(priv->lines[ll]) + strlen(l) + 1);
12646
9a495bdc3a1e string handling security fixes
diego
parents: 10864
diff changeset
159 if ( priv->lines[ll] != NULL )
9a495bdc3a1e string handling security fixes
diego
parents: 10864
diff changeset
160 {
9a495bdc3a1e string handling security fixes
diego
parents: 10864
diff changeset
161 strcat(priv->lines[ll],l);
9a495bdc3a1e string handling security fixes
diego
parents: 10864
diff changeset
162 }
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
163 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
164
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
165 static void draw(menu_t* menu, mp_image_t* mpi) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
166 int h = mpi->h*mpriv->height/100;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
167 int w = mpi->w - 2* mpriv->minb;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
168 int x = mpriv->minb, y;
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
169 int lw,lh,i, ll;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
170
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
171 if(mpriv->child) check_child(menu);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
172
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
173 ll = mpriv->last_line - 1;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
174
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
175 if(mpriv->hide_ts) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
176 unsigned int t = GetTimerMS() - mpriv->hide_ts;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
177 if(t >= mpriv->hide_time) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
178 mpriv->hide_ts = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
179 menu->show = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
180 return;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
181 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
182 h = mpi->h*(mpriv->height - (mpriv->height * t /mpriv->hide_time))/100;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
183 } else if(mpriv->show_time && mpriv->show_ts == 0) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
184 mpriv->show_ts = GetTimerMS();
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
185 return;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
186 } else if(mpriv->show_ts > 0) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
187 unsigned int t = GetTimerMS() - mpriv->show_ts;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
188 if(t > mpriv->show_time)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
189 mpriv->show_ts = -1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
190 else
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
191 h = mpi->h*(mpriv->height * t /mpriv->hide_time)/100;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
192 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
193
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
194 y = h - mpriv->vspace;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
195
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
196 if(x < 0 || y < 0 || w <= 0 || h <= 0 )
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
197 return;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
198
17993
98eb966a4024 Add a function to draw flat boxes and use it to make the list
albeu
parents: 16862
diff changeset
199 if(mpriv->bg >= 0)
98eb966a4024 Add a function to draw flat boxes and use it to make the list
albeu
parents: 16862
diff changeset
200 menu_draw_box(mpi,mpriv->bg,mpriv->bg_alpha,0,0,mpi->w,h);
98eb966a4024 Add a function to draw flat boxes and use it to make the list
albeu
parents: 16862
diff changeset
201
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
202 if(!mpriv->child || !mpriv->raw_child){
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
203 char input[strlen(mpriv->cur_history->buffer) + strlen(mpriv->prompt) + 1];
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
204 sprintf(input,"%s%s",mpriv->prompt,mpriv->cur_history->buffer);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
205 menu_text_size(input,w,mpriv->vspace,1,&lw,&lh);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
206 menu_draw_text_full(mpi,input,x,y,w,h,mpriv->vspace,1,
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
207 MENU_TEXT_BOT|MENU_TEXT_LEFT,
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
208 MENU_TEXT_BOT|MENU_TEXT_LEFT);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
209 y -= lh + mpriv->vspace;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
210 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
211
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
212
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
213 for( i = 0 ; y > mpriv->minb && i < mpriv->num_lines ; i++){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
214 int c = (ll - i) >= 0 ? ll - i : mpriv->buf_lines + ll - i;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
215 menu_text_size(mpriv->lines[c],w,mpriv->vspace,1,&lw,&lh);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
216 menu_draw_text_full(mpi,mpriv->lines[c],x,y,w,h,mpriv->vspace,1,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
217 MENU_TEXT_BOT|MENU_TEXT_LEFT,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
218 MENU_TEXT_BOT|MENU_TEXT_LEFT);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
219 y -= lh + mpriv->vspace;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
220 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
221 return;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
222 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
223
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
224 static void check_child(menu_t* menu) {
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 10333
diff changeset
225 #ifndef __MINGW32__
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
226 fd_set rfd;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
227 struct timeval tv;
8297
879f88c3212e fix 100l typo :)
colin
parents: 8229
diff changeset
228 int max_fd = mpriv->child_fd[2] > mpriv->child_fd[1] ? mpriv->child_fd[2] :
879f88c3212e fix 100l typo :)
colin
parents: 8229
diff changeset
229 mpriv->child_fd[1];
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
230 int i,r,child_status,w;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
231 char buffer[256];
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
232
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
233 if(!mpriv->child) return;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
234
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
235 memset(&tv,0,sizeof(struct timeval));
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
236 FD_ZERO(&rfd);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
237 FD_SET(mpriv->child_fd[1],&rfd);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
238 FD_SET(mpriv->child_fd[2],&rfd);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
239
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
240 r = select(max_fd+1,&rfd, NULL, NULL, &tv);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
241 if(r == 0) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
242 r = waitpid(mpriv->child,&child_status,WNOHANG);
13391
b6c3752d9544 handle sigchld in mplayer.c
faust3
parents: 12874
diff changeset
243 if(r < 0){
23871
426c20bcfddf typo fix: childs --> children
diego
parents: 19431
diff changeset
244 if(errno==ECHILD){ ///exiting children get handled in mplayer.c
13391
b6c3752d9544 handle sigchld in mplayer.c
faust3
parents: 12874
diff changeset
245 for(i = 0 ; i < 3 ; i++)
b6c3752d9544 handle sigchld in mplayer.c
faust3
parents: 12874
diff changeset
246 close(mpriv->child_fd[i]);
b6c3752d9544 handle sigchld in mplayer.c
faust3
parents: 12874
diff changeset
247 mpriv->child = 0;
b6c3752d9544 handle sigchld in mplayer.c
faust3
parents: 12874
diff changeset
248 mpriv->prompt = mpriv->mp_prompt;
b6c3752d9544 handle sigchld in mplayer.c
faust3
parents: 12874
diff changeset
249 //add_line(mpriv,"Child process exited");
b6c3752d9544 handle sigchld in mplayer.c
faust3
parents: 12874
diff changeset
250 }
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17993
diff changeset
251 else mp_msg(MSGT_GLOBAL,MSGL_ERR,MSGTR_LIBMENU_WaitPidError,strerror(errno));
13391
b6c3752d9544 handle sigchld in mplayer.c
faust3
parents: 12874
diff changeset
252 }
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
253 } else if(r < 0) {
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17993
diff changeset
254 mp_msg(MSGT_GLOBAL,MSGL_ERR,MSGTR_LIBMENU_SelectError);
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
255 return;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
256 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
257
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
258 w = 0;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
259 for(i = 1 ; i < 3 ; i++) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
260 if(FD_ISSET(mpriv->child_fd[i],&rfd)){
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
261 if(w) mpriv->add_line = 1;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
262 r = read(mpriv->child_fd[i],buffer,255);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
263 if(r < 0)
23874
702707dc7521 Give message string a more meaningful name.
diego
parents: 23871
diff changeset
264 mp_msg(MSGT_GLOBAL,MSGL_ERR,MSGTR_LIBMENU_ReadErrorOnChildFD, i == 1 ? "stdout":"stderr");
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
265 else if(r>0) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
266 buffer[r] = '\0';
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
267 add_string(mpriv,buffer);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
268 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
269 w = 1;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
270 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
271 }
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 10333
diff changeset
272 #endif
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
273
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
274 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
275
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
276 #define close_pipe(pipe) close(pipe[0]); close(pipe[1])
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
277
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
278 static int run_shell_cmd(menu_t* menu, char* cmd) {
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 10333
diff changeset
279 #ifndef __MINGW32__
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
280 int in[2],out[2],err[2];
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
281
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17993
diff changeset
282 mp_msg(MSGT_GLOBAL,MSGL_INFO,MSGTR_LIBMENU_ConsoleRun,cmd);
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
283 if(mpriv->child) {
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17993
diff changeset
284 mp_msg(MSGT_GLOBAL,MSGL_ERR,MSGTR_LIBMENU_AChildIsAlreadyRunning);
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
285 return 0;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
286 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
287
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
288 pipe(in);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
289 pipe(out);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
290 pipe(err);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
291
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
292 mpriv->child = fork();
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
293 if(mpriv->child < 0) {
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17993
diff changeset
294 mp_msg(MSGT_GLOBAL,MSGL_ERR,MSGTR_LIBMENU_ForkFailed);
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
295 close_pipe(in);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
296 close_pipe(out);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
297 close_pipe(err);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
298 return 0;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
299 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
300 if(!mpriv->child) { // Chlid process
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
301 int err_fd = dup(2);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
302 FILE* errf = fdopen(err_fd,"w");
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
303 // Bind the std fd to our pipes
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
304 dup2(in[0],0);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
305 dup2(out[1],1);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
306 dup2(err[1],2);
10333
7b8a3f2101b6 64bit support
alex
parents: 9380
diff changeset
307 execl("/bin/sh","sh","-c",cmd,(void*)NULL);
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
308 fprintf(errf,"exec failed : %s\n",strerror(errno));
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
309 exit(1);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
310 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
311 // MPlayer
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
312 mpriv->child_fd[0] = in[1];
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
313 mpriv->child_fd[1] = out[0];
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
314 mpriv->child_fd[2] = err[0];
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
315 mpriv->prompt = mpriv->child_prompt;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
316 //add_line(mpriv,"Child process started");
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 10333
diff changeset
317 #endif
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
318 return 1;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
319 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
320
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
321 static void enter_cmd(menu_t* menu) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
322 history_t* h;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
323 char input[strlen(mpriv->cur_history->buffer) + strlen(mpriv->prompt) + 1];
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
324
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
325 sprintf(input,"%s%s",mpriv->prompt,mpriv->cur_history->buffer);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
326 add_line(mpriv,input);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
327
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
328 if(mpriv->history == mpriv->cur_history) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
329 if(mpriv->history_size >= mpriv->history_max) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
330 history_t* i;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
331 for(i = mpriv->history ; i->prev ; i = i->prev)
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
332 /**/;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
333 i->next->prev = NULL;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
334 free(i->buffer);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
335 free(i);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
336 } else
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
337 mpriv->history_size++;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
338 h = calloc(1,sizeof(history_t));
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
339 h->size = 255;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
340 h->buffer = calloc(h->size,1);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
341 h->prev = mpriv->history;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
342 mpriv->history->next = h;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
343 mpriv->history = h;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
344 } else
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
345 mpriv->history->buffer[0] = '\0';
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
346
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
347 mpriv->cur_history = mpriv->history;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
348 //mpriv->input = mpriv->cur_history->buffer;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
349 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
350
25263
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
351 static void read_cmd(menu_t* menu,int cmd) {
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
352 switch(cmd) {
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
353 case MENU_CMD_CANCEL:
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
354 if(mpriv->hide_time)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
355 mpriv->hide_ts = GetTimerMS();
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
356 else
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
357 menu->show = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
358 mpriv->show_ts = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
359 return;
25263
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
360 case MENU_CMD_OK: {
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
361 mp_cmd_t* c;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
362 if(mpriv->child) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
363 char *str = mpriv->cur_history->buffer;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
364 int l = strlen(str);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
365 while(l > 0) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
366 int w = write(mpriv->child_fd[0],str,l);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
367 if(w < 0) {
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17993
diff changeset
368 mp_msg(MSGT_GLOBAL,MSGL_ERR,MSGTR_LIBMENU_WriteError);
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
369 break;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
370 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
371 l -= w;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
372 str += w;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
373 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
374 if(write(mpriv->child_fd[0],"\n",1) < 0)
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17993
diff changeset
375 mp_msg(MSGT_GLOBAL,MSGL_ERR,MSGTR_LIBMENU_WriteError);
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
376 enter_cmd(menu);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
377 return;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
378 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
379 c = mp_input_parse_cmd(mpriv->cur_history->buffer);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
380 enter_cmd(menu);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
381 if(!c)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
382 add_line(mpriv,"Invalid command try help");
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
383 else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
384 switch(c->id) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
385 case MP_CMD_CHELP:
12874
4e8887e99fef Fix typos and better explanatory text.
diego
parents: 12646
diff changeset
386 add_line(mpriv,"MPlayer console 0.01");
4e8887e99fef Fix typos and better explanatory text.
diego
parents: 12646
diff changeset
387 add_line(mpriv,"TODO: meaningful help message ;)");
4e8887e99fef Fix typos and better explanatory text.
diego
parents: 12646
diff changeset
388 add_line(mpriv,"Enter any slave command");
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
389 add_line(mpriv,"exit close this console");
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
390 break;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
391 case MP_CMD_CEXIT:
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
392 menu->show = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
393 menu->cl = 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
394 break;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
395 case MP_CMD_CHIDE:
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
396 if(mpriv->hide_time)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
397 mpriv->hide_ts = GetTimerMS();
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
398 else
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
399 menu->show = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
400 mpriv->show_ts = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
401 break;
14087
26937d8c5c9e enable the run slave commande even without libmenu
aurel
parents: 13391
diff changeset
402 case MP_CMD_RUN:
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
403 run_shell_cmd(menu,c->args[0].v.s);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
404 break;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
405 default: // Send the other commands to mplayer
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
406 mp_input_queue_cmd(c);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
407 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
408 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
409 return;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
410 }
25263
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
411 case MENU_CMD_UP:
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
412 if(mpriv->cur_history->prev)
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
413 mpriv->cur_history = mpriv->cur_history->prev;
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
414 break;
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
415 case MENU_CMD_DOWN:
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
416 if(mpriv->cur_history->next)
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
417 mpriv->cur_history = mpriv->cur_history->next;
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
418 break;
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
419 }
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
420 }
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
421
25502
605d4e3e403f From now on, libmenu does not steal all input keys from input modules.
ulion
parents: 25263
diff changeset
422 static int read_key(menu_t* menu,int c) {
25263
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
423 if(mpriv->child && mpriv->raw_child) {
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
424 write(mpriv->child_fd[0],&c,sizeof(int));
25502
605d4e3e403f From now on, libmenu does not steal all input keys from input modules.
ulion
parents: 25263
diff changeset
425 return 1;
25263
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
426 }
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
427
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
428 if (c == KEY_DELETE || c == KEY_BS) {
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
429 unsigned int i = strlen(mpriv->cur_history->buffer);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
430 if(i > 0)
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
431 mpriv->cur_history->buffer[i-1] = '\0';
25502
605d4e3e403f From now on, libmenu does not steal all input keys from input modules.
ulion
parents: 25263
diff changeset
432 return 1;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
433 }
25263
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 23874
diff changeset
434 if (menu_dflt_read_key(menu, c))
25502
605d4e3e403f From now on, libmenu does not steal all input keys from input modules.
ulion
parents: 25263
diff changeset
435 return 1;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
436
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
437 if(isascii(c)) {
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
438 int l = strlen(mpriv->cur_history->buffer);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
439 if(l >= mpriv->cur_history->size) {
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
440 mpriv->cur_history->size += 255;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
441 mpriv->cur_history->buffer = realloc(mpriv->cur_history,mpriv->cur_history->size);
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
442 }
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
443 mpriv->cur_history->buffer[l] = (char)c;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
444 mpriv->cur_history->buffer[l+1] = '\0';
25502
605d4e3e403f From now on, libmenu does not steal all input keys from input modules.
ulion
parents: 25263
diff changeset
445 return 1;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
446 }
25502
605d4e3e403f From now on, libmenu does not steal all input keys from input modules.
ulion
parents: 25263
diff changeset
447 return 0;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
448 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
449
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
450
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 10333
diff changeset
451 static int openMenu(menu_t* menu, char* args) {
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
452
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
453
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
454 menu->draw = draw;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
455 menu->read_cmd = read_cmd;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
456 menu->read_key = read_key;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
457
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
458 mpriv->lines = calloc(mpriv->buf_lines,sizeof(char*));
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
459 mpriv->prompt = mpriv->mp_prompt;
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
460 mpriv->cur_history = mpriv->history = calloc(1,sizeof(history_t));
18858
ac17673b640d gets ride of a few more sizeof(char)s
reynaldo
parents: 17994
diff changeset
461 mpriv->cur_history->buffer = calloc(255,1);
8227
3050cfda3c61 A new command to run shell process and a command history.
albeu
parents: 8197
diff changeset
462 mpriv->cur_history->size = 255;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
463
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
464 if(args)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
465 add_line(mpriv,args);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
466
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
467 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
468 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
469
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
470 const menu_info_t menu_info_console = {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
471 "MPlayer console",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
472 "console",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
473 "Albeu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
474 "",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
475 {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
476 "console_cfg",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
477 sizeof(struct menu_priv_s),
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
478 &cfg_dflt,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
479 cfg_fields
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
480 },
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 10333
diff changeset
481 openMenu,
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
482 };