mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-02-06 02:01:50 +08:00
cleanup: convert tab to spaces and trim tail spaces
This commit is contained in:
@@ -6,99 +6,99 @@
|
||||
#include <sys/wait.h>
|
||||
|
||||
/*
|
||||
* A simple filter for the templates
|
||||
* A simple filter for the templates
|
||||
*/
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char buf[1024];
|
||||
char *vec[8192];
|
||||
char *fvec[200];
|
||||
char **svec;
|
||||
char type[64];
|
||||
int i;
|
||||
int vp=2;
|
||||
int ret=0;
|
||||
pid_t pid;
|
||||
char buf[1024];
|
||||
char *vec[8192];
|
||||
char *fvec[200];
|
||||
char **svec;
|
||||
char type[64];
|
||||
int i;
|
||||
int vp=2;
|
||||
int ret=0;
|
||||
pid_t pid;
|
||||
|
||||
|
||||
if(chdir(getenv("TOPDIR")))
|
||||
{
|
||||
perror("chdir");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Build the exec array ahead of time.
|
||||
*/
|
||||
vec[0]="kernel-doc";
|
||||
vec[1]="-docbook";
|
||||
for(i=1;vp<8189;i++)
|
||||
{
|
||||
if(argv[i]==NULL)
|
||||
break;
|
||||
vec[vp++]=type;
|
||||
vec[vp++]=argv[i];
|
||||
}
|
||||
vec[vp++]=buf+2;
|
||||
vec[vp++]=NULL;
|
||||
|
||||
/*
|
||||
* Now process the template
|
||||
*/
|
||||
|
||||
while(fgets(buf, 1024, stdin))
|
||||
{
|
||||
if(*buf!='!') {
|
||||
printf("%s", buf);
|
||||
continue;
|
||||
}
|
||||
if(chdir(getenv("TOPDIR")))
|
||||
{
|
||||
perror("chdir");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
svec = vec;
|
||||
if(buf[1]=='E')
|
||||
strcpy(type, "-function");
|
||||
else if(buf[1]=='I')
|
||||
strcpy(type, "-nofunction");
|
||||
else if(buf[1]=='F') {
|
||||
int snarf = 0;
|
||||
fvec[0] = "kernel-doc";
|
||||
fvec[1] = "-docbook";
|
||||
strcpy (type, "-function");
|
||||
vp = 2;
|
||||
for (i = 2; buf[i]; i++) {
|
||||
if (buf[i] == ' ' || buf[i] == '\n') {
|
||||
buf[i] = '\0';
|
||||
snarf = 1;
|
||||
continue;
|
||||
}
|
||||
/*
|
||||
* Build the exec array ahead of time.
|
||||
*/
|
||||
vec[0]="kernel-doc";
|
||||
vec[1]="-docbook";
|
||||
for(i=1;vp<8189;i++)
|
||||
{
|
||||
if(argv[i]==NULL)
|
||||
break;
|
||||
vec[vp++]=type;
|
||||
vec[vp++]=argv[i];
|
||||
}
|
||||
vec[vp++]=buf+2;
|
||||
vec[vp++]=NULL;
|
||||
|
||||
if (snarf) {
|
||||
snarf = 0;
|
||||
fvec[vp++] = type;
|
||||
fvec[vp++] = &buf[i];
|
||||
}
|
||||
}
|
||||
fvec[vp++] = &buf[2];
|
||||
fvec[vp] = NULL;
|
||||
svec = fvec;
|
||||
} else
|
||||
{
|
||||
fprintf(stderr, "Unknown ! escape.\n");
|
||||
exit(1);
|
||||
}
|
||||
switch(pid=fork())
|
||||
{
|
||||
case -1:
|
||||
perror("fork");
|
||||
exit(1);
|
||||
case 0:
|
||||
execvp("scripts/kernel-doc", svec);
|
||||
perror("exec scripts/kernel-doc");
|
||||
exit(1);
|
||||
default:
|
||||
waitpid(pid, &ret ,0);
|
||||
}
|
||||
}
|
||||
exit(ret);
|
||||
/*
|
||||
* Now process the template
|
||||
*/
|
||||
|
||||
while(fgets(buf, 1024, stdin))
|
||||
{
|
||||
if(*buf!='!') {
|
||||
printf("%s", buf);
|
||||
continue;
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
svec = vec;
|
||||
if(buf[1]=='E')
|
||||
strcpy(type, "-function");
|
||||
else if(buf[1]=='I')
|
||||
strcpy(type, "-nofunction");
|
||||
else if(buf[1]=='F') {
|
||||
int snarf = 0;
|
||||
fvec[0] = "kernel-doc";
|
||||
fvec[1] = "-docbook";
|
||||
strcpy (type, "-function");
|
||||
vp = 2;
|
||||
for (i = 2; buf[i]; i++) {
|
||||
if (buf[i] == ' ' || buf[i] == '\n') {
|
||||
buf[i] = '\0';
|
||||
snarf = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (snarf) {
|
||||
snarf = 0;
|
||||
fvec[vp++] = type;
|
||||
fvec[vp++] = &buf[i];
|
||||
}
|
||||
}
|
||||
fvec[vp++] = &buf[2];
|
||||
fvec[vp] = NULL;
|
||||
svec = fvec;
|
||||
} else
|
||||
{
|
||||
fprintf(stderr, "Unknown ! escape.\n");
|
||||
exit(1);
|
||||
}
|
||||
switch(pid=fork())
|
||||
{
|
||||
case -1:
|
||||
perror("fork");
|
||||
exit(1);
|
||||
case 0:
|
||||
execvp("scripts/kernel-doc", svec);
|
||||
perror("exec scripts/kernel-doc");
|
||||
exit(1);
|
||||
default:
|
||||
waitpid(pid, &ret ,0);
|
||||
}
|
||||
}
|
||||
exit(ret);
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ static int list_width, check_x, item_x, checkflag;
|
||||
*/
|
||||
static void
|
||||
print_item (WINDOW * win, const char *item, int status,
|
||||
int choice, int selected)
|
||||
int choice, int selected)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -38,22 +38,22 @@ print_item (WINDOW * win, const char *item, int status,
|
||||
wattrset (win, menubox_attr);
|
||||
wmove (win, choice, 0);
|
||||
for (i = 0; i < list_width; i++)
|
||||
waddch (win, ' ');
|
||||
waddch (win, ' ');
|
||||
|
||||
wmove (win, choice, check_x);
|
||||
wattrset (win, selected ? check_selected_attr : check_attr);
|
||||
if (checkflag == FLAG_CHECK)
|
||||
wprintw (win, "[%c]", status ? 'X' : ' ');
|
||||
wprintw (win, "[%c]", status ? 'X' : ' ');
|
||||
else
|
||||
wprintw (win, "(%c)", status ? 'X' : ' ');
|
||||
wprintw (win, "(%c)", status ? 'X' : ' ');
|
||||
|
||||
wattrset (win, selected ? tag_selected_attr : tag_attr);
|
||||
mvwaddch(win, choice, item_x, item[0]);
|
||||
wattrset (win, selected ? item_selected_attr : item_attr);
|
||||
waddstr (win, (char *)item+1);
|
||||
if (selected) {
|
||||
wmove (win, choice, check_x+1);
|
||||
wrefresh (win);
|
||||
wmove (win, choice, check_x+1);
|
||||
wrefresh (win);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,37 +62,37 @@ print_item (WINDOW * win, const char *item, int status,
|
||||
*/
|
||||
static void
|
||||
print_arrows (WINDOW * win, int choice, int item_no, int scroll,
|
||||
int y, int x, int height)
|
||||
int y, int x, int height)
|
||||
{
|
||||
wmove(win, y, x);
|
||||
|
||||
if (scroll > 0) {
|
||||
wattrset (win, uarrow_attr);
|
||||
waddch (win, ACS_UARROW);
|
||||
waddstr (win, "(-)");
|
||||
wattrset (win, uarrow_attr);
|
||||
waddch (win, ACS_UARROW);
|
||||
waddstr (win, "(-)");
|
||||
}
|
||||
else {
|
||||
wattrset (win, menubox_attr);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
wattrset (win, menubox_attr);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
}
|
||||
|
||||
y = y + height + 1;
|
||||
wmove(win, y, x);
|
||||
|
||||
if ((height < item_no) && (scroll + choice < item_no - 1)) {
|
||||
wattrset (win, darrow_attr);
|
||||
waddch (win, ACS_DARROW);
|
||||
waddstr (win, "(+)");
|
||||
wattrset (win, darrow_attr);
|
||||
waddch (win, ACS_DARROW);
|
||||
waddstr (win, "(+)");
|
||||
}
|
||||
else {
|
||||
wattrset (win, menubox_border_attr);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
wattrset (win, menubox_border_attr);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,8 +118,8 @@ print_buttons( WINDOW *dialog, int height, int width, int selected)
|
||||
*/
|
||||
int
|
||||
dialog_checklist (const char *title, const char *prompt, int height, int width,
|
||||
int list_height, int item_no, const char * const * items, int flag)
|
||||
|
||||
int list_height, int item_no, const char * const * items, int flag)
|
||||
|
||||
{
|
||||
int i, x, y, box_x, box_y;
|
||||
int key = 0, button = 0, choice = 0, scroll = 0, max_choice, *status;
|
||||
@@ -129,16 +129,16 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
|
||||
|
||||
/* Allocate space for storing item on/off status */
|
||||
if ((status = malloc (sizeof (int) * item_no)) == NULL) {
|
||||
endwin ();
|
||||
fprintf (stderr,
|
||||
"\nCan't allocate memory in dialog_checklist().\n");
|
||||
exit (-1);
|
||||
endwin ();
|
||||
fprintf (stderr,
|
||||
"\nCan't allocate memory in dialog_checklist().\n");
|
||||
exit (-1);
|
||||
}
|
||||
|
||||
/* Initializes status */
|
||||
for (i = 0; i < item_no; i++) {
|
||||
status[i] = !strcasecmp (items[i * 3 + 2], "on");
|
||||
if (!choice && status[i])
|
||||
status[i] = !strcasecmp (items[i * 3 + 2], "on");
|
||||
if (!choice && status[i])
|
||||
choice = i;
|
||||
}
|
||||
|
||||
@@ -157,23 +157,23 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
|
||||
wattrset (dialog, border_attr);
|
||||
mvwaddch (dialog, height-3, 0, ACS_LTEE);
|
||||
for (i = 0; i < width - 2; i++)
|
||||
waddch (dialog, ACS_HLINE);
|
||||
waddch (dialog, ACS_HLINE);
|
||||
wattrset (dialog, dialog_attr);
|
||||
waddch (dialog, ACS_RTEE);
|
||||
|
||||
if (title != NULL && strlen(title) >= width-2 ) {
|
||||
/* truncate long title -- mec */
|
||||
char * title2 = malloc(width-2+1);
|
||||
memcpy( title2, title, width-2 );
|
||||
title2[width-2] = '\0';
|
||||
title = title2;
|
||||
/* truncate long title -- mec */
|
||||
char * title2 = malloc(width-2+1);
|
||||
memcpy( title2, title, width-2 );
|
||||
title2[width-2] = '\0';
|
||||
title = title2;
|
||||
}
|
||||
|
||||
if (title != NULL) {
|
||||
wattrset (dialog, title_attr);
|
||||
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
|
||||
waddstr (dialog, (char *)title);
|
||||
waddch (dialog, ' ');
|
||||
wattrset (dialog, title_attr);
|
||||
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
|
||||
waddstr (dialog, (char *)title);
|
||||
waddch (dialog, ' ');
|
||||
}
|
||||
|
||||
wattrset (dialog, dialog_attr);
|
||||
@@ -190,29 +190,29 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
|
||||
|
||||
/* draw a box around the list items */
|
||||
draw_box (dialog, box_y, box_x, list_height + 2, list_width + 2,
|
||||
menubox_border_attr, menubox_attr);
|
||||
menubox_border_attr, menubox_attr);
|
||||
|
||||
/* Find length of longest item in order to center checklist */
|
||||
check_x = 0;
|
||||
for (i = 0; i < item_no; i++)
|
||||
check_x = MAX (check_x, + strlen (items[i * 3 + 1]) + 4);
|
||||
for (i = 0; i < item_no; i++)
|
||||
check_x = MAX (check_x, + strlen (items[i * 3 + 1]) + 4);
|
||||
|
||||
check_x = (list_width - check_x) / 2;
|
||||
item_x = check_x + 4;
|
||||
|
||||
if (choice >= list_height) {
|
||||
scroll = choice - list_height + 1;
|
||||
choice -= scroll;
|
||||
scroll = choice - list_height + 1;
|
||||
choice -= scroll;
|
||||
}
|
||||
|
||||
/* Print the list */
|
||||
for (i = 0; i < max_choice; i++) {
|
||||
print_item (list, items[(scroll+i) * 3 + 1],
|
||||
status[i+scroll], i, i == choice);
|
||||
print_item (list, items[(scroll+i) * 3 + 1],
|
||||
status[i+scroll], i, i == choice);
|
||||
}
|
||||
|
||||
print_arrows(dialog, choice, item_no, scroll,
|
||||
box_y, box_x + check_x + 5, list_height);
|
||||
box_y, box_x + check_x + 5, list_height);
|
||||
|
||||
print_buttons(dialog, height, width, 0);
|
||||
|
||||
@@ -221,149 +221,149 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
|
||||
doupdate ();
|
||||
|
||||
while (key != ESC) {
|
||||
key = wgetch (dialog);
|
||||
key = wgetch (dialog);
|
||||
|
||||
for (i = 0; i < max_choice; i++)
|
||||
for (i = 0; i < max_choice; i++)
|
||||
if (toupper(key) == toupper(items[(scroll+i)*3+1][0]))
|
||||
break;
|
||||
|
||||
|
||||
if ( i < max_choice || key == KEY_UP || key == KEY_DOWN ||
|
||||
key == '+' || key == '-' ) {
|
||||
if (key == KEY_UP || key == '-') {
|
||||
if (!choice) {
|
||||
if (!scroll)
|
||||
continue;
|
||||
/* Scroll list down */
|
||||
if (list_height > 1) {
|
||||
/* De-highlight current first item */
|
||||
print_item (list, items[scroll * 3 + 1],
|
||||
status[scroll], 0, FALSE);
|
||||
scrollok (list, TRUE);
|
||||
wscrl (list, -1);
|
||||
scrollok (list, FALSE);
|
||||
}
|
||||
scroll--;
|
||||
print_item (list, items[scroll * 3 + 1],
|
||||
status[scroll], 0, TRUE);
|
||||
wnoutrefresh (list);
|
||||
|
||||
print_arrows(dialog, choice, item_no, scroll,
|
||||
box_y, box_x + check_x + 5, list_height);
|
||||
|
||||
wrefresh (dialog);
|
||||
|
||||
continue; /* wait for another key press */
|
||||
} else
|
||||
i = choice - 1;
|
||||
} else if (key == KEY_DOWN || key == '+') {
|
||||
if (choice == max_choice - 1) {
|
||||
if (scroll + choice >= item_no - 1)
|
||||
continue;
|
||||
/* Scroll list up */
|
||||
if (list_height > 1) {
|
||||
/* De-highlight current last item before scrolling up */
|
||||
print_item (list, items[(scroll + max_choice - 1) * 3 + 1],
|
||||
status[scroll + max_choice - 1],
|
||||
max_choice - 1, FALSE);
|
||||
scrollok (list, TRUE);
|
||||
scroll (list);
|
||||
scrollok (list, FALSE);
|
||||
}
|
||||
scroll++;
|
||||
print_item (list, items[(scroll + max_choice - 1) * 3 + 1],
|
||||
status[scroll + max_choice - 1],
|
||||
max_choice - 1, TRUE);
|
||||
wnoutrefresh (list);
|
||||
|
||||
print_arrows(dialog, choice, item_no, scroll,
|
||||
box_y, box_x + check_x + 5, list_height);
|
||||
|
||||
wrefresh (dialog);
|
||||
|
||||
continue; /* wait for another key press */
|
||||
} else
|
||||
i = choice + 1;
|
||||
}
|
||||
if (i != choice) {
|
||||
/* De-highlight current item */
|
||||
print_item (list, items[(scroll + choice) * 3 + 1],
|
||||
status[scroll + choice], choice, FALSE);
|
||||
/* Highlight new item */
|
||||
choice = i;
|
||||
print_item (list, items[(scroll + choice) * 3 + 1],
|
||||
status[scroll + choice], choice, TRUE);
|
||||
wnoutrefresh (list);
|
||||
wrefresh (dialog);
|
||||
}
|
||||
continue; /* wait for another key press */
|
||||
}
|
||||
switch (key) {
|
||||
case 'H':
|
||||
case 'h':
|
||||
case '?':
|
||||
delwin (dialog);
|
||||
free (status);
|
||||
return 1;
|
||||
case TAB:
|
||||
case KEY_LEFT:
|
||||
case KEY_RIGHT:
|
||||
button = ((key == KEY_LEFT ? --button : ++button) < 0)
|
||||
? 1 : (button > 1 ? 0 : button);
|
||||
|
||||
print_buttons(dialog, height, width, button);
|
||||
wrefresh (dialog);
|
||||
break;
|
||||
case 'S':
|
||||
case 's':
|
||||
case ' ':
|
||||
case '\n':
|
||||
if (!button) {
|
||||
if (flag == FLAG_CHECK) {
|
||||
status[scroll + choice] = !status[scroll + choice];
|
||||
wmove (list, choice, check_x);
|
||||
wattrset (list, check_selected_attr);
|
||||
wprintw (list, "[%c]", status[scroll + choice] ? 'X' : ' ');
|
||||
} else {
|
||||
if (!status[scroll + choice]) {
|
||||
for (i = 0; i < item_no; i++)
|
||||
status[i] = 0;
|
||||
status[scroll + choice] = 1;
|
||||
for (i = 0; i < max_choice; i++)
|
||||
print_item (list, items[(scroll + i) * 3 + 1],
|
||||
status[scroll + i], i, i == choice);
|
||||
}
|
||||
}
|
||||
wnoutrefresh (list);
|
||||
wrefresh (dialog);
|
||||
|
||||
for (i = 0; i < item_no; i++) {
|
||||
if (status[i]) {
|
||||
if (flag == FLAG_CHECK) {
|
||||
fprintf (stderr, "\"%s\" ", items[i * 3]);
|
||||
} else {
|
||||
fprintf (stderr, "%s", items[i * 3]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if ( i < max_choice || key == KEY_UP || key == KEY_DOWN ||
|
||||
key == '+' || key == '-' ) {
|
||||
if (key == KEY_UP || key == '-') {
|
||||
if (!choice) {
|
||||
if (!scroll)
|
||||
continue;
|
||||
/* Scroll list down */
|
||||
if (list_height > 1) {
|
||||
/* De-highlight current first item */
|
||||
print_item (list, items[scroll * 3 + 1],
|
||||
status[scroll], 0, FALSE);
|
||||
scrollok (list, TRUE);
|
||||
wscrl (list, -1);
|
||||
scrollok (list, FALSE);
|
||||
}
|
||||
delwin (dialog);
|
||||
free (status);
|
||||
return button;
|
||||
case 'X':
|
||||
case 'x':
|
||||
key = ESC;
|
||||
case ESC:
|
||||
break;
|
||||
}
|
||||
scroll--;
|
||||
print_item (list, items[scroll * 3 + 1],
|
||||
status[scroll], 0, TRUE);
|
||||
wnoutrefresh (list);
|
||||
|
||||
/* Now, update everything... */
|
||||
doupdate ();
|
||||
print_arrows(dialog, choice, item_no, scroll,
|
||||
box_y, box_x + check_x + 5, list_height);
|
||||
|
||||
wrefresh (dialog);
|
||||
|
||||
continue; /* wait for another key press */
|
||||
} else
|
||||
i = choice - 1;
|
||||
} else if (key == KEY_DOWN || key == '+') {
|
||||
if (choice == max_choice - 1) {
|
||||
if (scroll + choice >= item_no - 1)
|
||||
continue;
|
||||
/* Scroll list up */
|
||||
if (list_height > 1) {
|
||||
/* De-highlight current last item before scrolling up */
|
||||
print_item (list, items[(scroll + max_choice - 1) * 3 + 1],
|
||||
status[scroll + max_choice - 1],
|
||||
max_choice - 1, FALSE);
|
||||
scrollok (list, TRUE);
|
||||
scroll (list);
|
||||
scrollok (list, FALSE);
|
||||
}
|
||||
scroll++;
|
||||
print_item (list, items[(scroll + max_choice - 1) * 3 + 1],
|
||||
status[scroll + max_choice - 1],
|
||||
max_choice - 1, TRUE);
|
||||
wnoutrefresh (list);
|
||||
|
||||
print_arrows(dialog, choice, item_no, scroll,
|
||||
box_y, box_x + check_x + 5, list_height);
|
||||
|
||||
wrefresh (dialog);
|
||||
|
||||
continue; /* wait for another key press */
|
||||
} else
|
||||
i = choice + 1;
|
||||
}
|
||||
if (i != choice) {
|
||||
/* De-highlight current item */
|
||||
print_item (list, items[(scroll + choice) * 3 + 1],
|
||||
status[scroll + choice], choice, FALSE);
|
||||
/* Highlight new item */
|
||||
choice = i;
|
||||
print_item (list, items[(scroll + choice) * 3 + 1],
|
||||
status[scroll + choice], choice, TRUE);
|
||||
wnoutrefresh (list);
|
||||
wrefresh (dialog);
|
||||
}
|
||||
continue; /* wait for another key press */
|
||||
}
|
||||
|
||||
switch (key) {
|
||||
case 'H':
|
||||
case 'h':
|
||||
case '?':
|
||||
delwin (dialog);
|
||||
free (status);
|
||||
return 1;
|
||||
case TAB:
|
||||
case KEY_LEFT:
|
||||
case KEY_RIGHT:
|
||||
button = ((key == KEY_LEFT ? --button : ++button) < 0)
|
||||
? 1 : (button > 1 ? 0 : button);
|
||||
|
||||
print_buttons(dialog, height, width, button);
|
||||
wrefresh (dialog);
|
||||
break;
|
||||
case 'S':
|
||||
case 's':
|
||||
case ' ':
|
||||
case '\n':
|
||||
if (!button) {
|
||||
if (flag == FLAG_CHECK) {
|
||||
status[scroll + choice] = !status[scroll + choice];
|
||||
wmove (list, choice, check_x);
|
||||
wattrset (list, check_selected_attr);
|
||||
wprintw (list, "[%c]", status[scroll + choice] ? 'X' : ' ');
|
||||
} else {
|
||||
if (!status[scroll + choice]) {
|
||||
for (i = 0; i < item_no; i++)
|
||||
status[i] = 0;
|
||||
status[scroll + choice] = 1;
|
||||
for (i = 0; i < max_choice; i++)
|
||||
print_item (list, items[(scroll + i) * 3 + 1],
|
||||
status[scroll + i], i, i == choice);
|
||||
}
|
||||
}
|
||||
wnoutrefresh (list);
|
||||
wrefresh (dialog);
|
||||
|
||||
for (i = 0; i < item_no; i++) {
|
||||
if (status[i]) {
|
||||
if (flag == FLAG_CHECK) {
|
||||
fprintf (stderr, "\"%s\" ", items[i * 3]);
|
||||
} else {
|
||||
fprintf (stderr, "%s", items[i * 3]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
delwin (dialog);
|
||||
free (status);
|
||||
return button;
|
||||
case 'X':
|
||||
case 'x':
|
||||
key = ESC;
|
||||
case ESC:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Now, update everything... */
|
||||
doupdate ();
|
||||
}
|
||||
|
||||
|
||||
delwin (dialog);
|
||||
free (status);
|
||||
return -1; /* ESC pressed */
|
||||
return -1; /* ESC pressed */
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
#define ACS_DARROW 'v'
|
||||
#endif
|
||||
|
||||
/*
|
||||
/*
|
||||
* Attribute names
|
||||
*/
|
||||
#define screen_attr attributes[0]
|
||||
@@ -158,23 +158,23 @@ void color_setup (void);
|
||||
void print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x);
|
||||
void print_button (WINDOW * win, const char *label, int y, int x, int selected);
|
||||
void draw_box (WINDOW * win, int y, int x, int height, int width, chtype box,
|
||||
chtype border);
|
||||
chtype border);
|
||||
void draw_shadow (WINDOW * win, int y, int x, int height, int width);
|
||||
|
||||
int first_alpha (const char *string, const char *exempt);
|
||||
int dialog_yesno (const char *title, const char *prompt, int height, int width);
|
||||
int dialog_msgbox (const char *title, const char *prompt, int height,
|
||||
int width, int pause);
|
||||
int width, int pause);
|
||||
int dialog_textbox (const char *title, const char *file, int height, int width);
|
||||
int dialog_menu (const char *title, const char *prompt, int height, int width,
|
||||
int menu_height, const char *choice, int item_no,
|
||||
const char * const * items);
|
||||
int menu_height, const char *choice, int item_no,
|
||||
const char * const * items);
|
||||
int dialog_checklist (const char *title, const char *prompt, int height,
|
||||
int width, int list_height, int item_no,
|
||||
const char * const * items, int flag);
|
||||
int width, int list_height, int item_no,
|
||||
const char * const * items, int flag);
|
||||
extern unsigned char dialog_input_result[];
|
||||
int dialog_inputbox (const char *title, const char *prompt, int height,
|
||||
int width, const char *init);
|
||||
int width, const char *init);
|
||||
|
||||
/*
|
||||
* This is the base for fictitious keys, which activate
|
||||
|
||||
@@ -44,7 +44,7 @@ print_buttons(WINDOW *dialog, int height, int width, int selected)
|
||||
*/
|
||||
int
|
||||
dialog_inputbox (const char *title, const char *prompt, int height, int width,
|
||||
const char *init)
|
||||
const char *init)
|
||||
{
|
||||
int i, x, y, box_y, box_x, box_width;
|
||||
int input_x = 0, scroll = 0, key = 0, button = -1;
|
||||
@@ -65,23 +65,23 @@ dialog_inputbox (const char *title, const char *prompt, int height, int width,
|
||||
wattrset (dialog, border_attr);
|
||||
mvwaddch (dialog, height-3, 0, ACS_LTEE);
|
||||
for (i = 0; i < width - 2; i++)
|
||||
waddch (dialog, ACS_HLINE);
|
||||
waddch (dialog, ACS_HLINE);
|
||||
wattrset (dialog, dialog_attr);
|
||||
waddch (dialog, ACS_RTEE);
|
||||
|
||||
if (title != NULL && strlen(title) >= width-2 ) {
|
||||
/* truncate long title -- mec */
|
||||
char * title2 = malloc(width-2+1);
|
||||
memcpy( title2, title, width-2 );
|
||||
title2[width-2] = '\0';
|
||||
title = title2;
|
||||
/* truncate long title -- mec */
|
||||
char * title2 = malloc(width-2+1);
|
||||
memcpy( title2, title, width-2 );
|
||||
title2[width-2] = '\0';
|
||||
title = title2;
|
||||
}
|
||||
|
||||
if (title != NULL) {
|
||||
wattrset (dialog, title_attr);
|
||||
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
|
||||
waddstr (dialog, (char *)title);
|
||||
waddch (dialog, ' ');
|
||||
wattrset (dialog, title_attr);
|
||||
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
|
||||
waddstr (dialog, (char *)title);
|
||||
waddch (dialog, ' ');
|
||||
}
|
||||
|
||||
wattrset (dialog, dialog_attr);
|
||||
@@ -93,7 +93,7 @@ dialog_inputbox (const char *title, const char *prompt, int height, int width,
|
||||
box_y = y + 2;
|
||||
box_x = (width - box_width) / 2;
|
||||
draw_box (dialog, y + 1, box_x - 1, 3, box_width + 2,
|
||||
border_attr, dialog_attr);
|
||||
border_attr, dialog_attr);
|
||||
|
||||
print_buttons(dialog, height, width, 0);
|
||||
|
||||
@@ -102,139 +102,139 @@ dialog_inputbox (const char *title, const char *prompt, int height, int width,
|
||||
wattrset (dialog, inputbox_attr);
|
||||
|
||||
if (!init)
|
||||
instr[0] = '\0';
|
||||
instr[0] = '\0';
|
||||
else
|
||||
strcpy (instr, init);
|
||||
strcpy (instr, init);
|
||||
|
||||
input_x = strlen (instr);
|
||||
|
||||
if (input_x >= box_width) {
|
||||
scroll = input_x - box_width + 1;
|
||||
input_x = box_width - 1;
|
||||
for (i = 0; i < box_width - 1; i++)
|
||||
waddch (dialog, instr[scroll + i]);
|
||||
scroll = input_x - box_width + 1;
|
||||
input_x = box_width - 1;
|
||||
for (i = 0; i < box_width - 1; i++)
|
||||
waddch (dialog, instr[scroll + i]);
|
||||
} else
|
||||
waddstr (dialog, instr);
|
||||
waddstr (dialog, instr);
|
||||
|
||||
wmove (dialog, box_y, box_x + input_x);
|
||||
|
||||
wrefresh (dialog);
|
||||
|
||||
while (key != ESC) {
|
||||
key = wgetch (dialog);
|
||||
key = wgetch (dialog);
|
||||
|
||||
if (button == -1) { /* Input box selected */
|
||||
switch (key) {
|
||||
case TAB:
|
||||
case KEY_UP:
|
||||
case KEY_DOWN:
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
continue;
|
||||
case KEY_RIGHT:
|
||||
continue;
|
||||
case KEY_BACKSPACE:
|
||||
case 127:
|
||||
if (input_x || scroll) {
|
||||
wattrset (dialog, inputbox_attr);
|
||||
if (!input_x) {
|
||||
scroll = scroll < box_width - 1 ?
|
||||
0 : scroll - (box_width - 1);
|
||||
wmove (dialog, box_y, box_x);
|
||||
for (i = 0; i < box_width; i++)
|
||||
waddch (dialog, instr[scroll + input_x + i] ?
|
||||
instr[scroll + input_x + i] : ' ');
|
||||
input_x = strlen (instr) - scroll;
|
||||
} else
|
||||
input_x--;
|
||||
instr[scroll + input_x] = '\0';
|
||||
mvwaddch (dialog, box_y, input_x + box_x, ' ');
|
||||
wmove (dialog, box_y, input_x + box_x);
|
||||
wrefresh (dialog);
|
||||
}
|
||||
continue;
|
||||
default:
|
||||
if (key < 0x100 && isprint (key)) {
|
||||
if (scroll + input_x < MAX_LEN) {
|
||||
wattrset (dialog, inputbox_attr);
|
||||
instr[scroll + input_x] = key;
|
||||
instr[scroll + input_x + 1] = '\0';
|
||||
if (input_x == box_width - 1) {
|
||||
scroll++;
|
||||
wmove (dialog, box_y, box_x);
|
||||
for (i = 0; i < box_width - 1; i++)
|
||||
waddch (dialog, instr[scroll + i]);
|
||||
} else {
|
||||
wmove (dialog, box_y, input_x++ + box_x);
|
||||
waddch (dialog, key);
|
||||
}
|
||||
wrefresh (dialog);
|
||||
} else
|
||||
flash (); /* Alarm user about overflow */
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
switch (key) {
|
||||
case 'O':
|
||||
case 'o':
|
||||
delwin (dialog);
|
||||
return 0;
|
||||
case 'H':
|
||||
case 'h':
|
||||
delwin (dialog);
|
||||
return 1;
|
||||
case KEY_UP:
|
||||
case KEY_LEFT:
|
||||
switch (button) {
|
||||
case -1:
|
||||
button = 1; /* Indicates "Cancel" button is selected */
|
||||
print_buttons(dialog, height, width, 1);
|
||||
break;
|
||||
case 0:
|
||||
button = -1; /* Indicates input box is selected */
|
||||
print_buttons(dialog, height, width, 0);
|
||||
wmove (dialog, box_y, box_x + input_x);
|
||||
wrefresh (dialog);
|
||||
break;
|
||||
case 1:
|
||||
button = 0; /* Indicates "OK" button is selected */
|
||||
print_buttons(dialog, height, width, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TAB:
|
||||
case KEY_DOWN:
|
||||
case KEY_RIGHT:
|
||||
switch (button) {
|
||||
case -1:
|
||||
button = 0; /* Indicates "OK" button is selected */
|
||||
print_buttons(dialog, height, width, 0);
|
||||
break;
|
||||
case 0:
|
||||
button = 1; /* Indicates "Cancel" button is selected */
|
||||
print_buttons(dialog, height, width, 1);
|
||||
break;
|
||||
case 1:
|
||||
button = -1; /* Indicates input box is selected */
|
||||
print_buttons(dialog, height, width, 0);
|
||||
wmove (dialog, box_y, box_x + input_x);
|
||||
wrefresh (dialog);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ' ':
|
||||
case '\n':
|
||||
delwin (dialog);
|
||||
return (button == -1 ? 0 : button);
|
||||
case 'X':
|
||||
case 'x':
|
||||
key = ESC;
|
||||
case ESC:
|
||||
break;
|
||||
}
|
||||
if (button == -1) { /* Input box selected */
|
||||
switch (key) {
|
||||
case TAB:
|
||||
case KEY_UP:
|
||||
case KEY_DOWN:
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
continue;
|
||||
case KEY_RIGHT:
|
||||
continue;
|
||||
case KEY_BACKSPACE:
|
||||
case 127:
|
||||
if (input_x || scroll) {
|
||||
wattrset (dialog, inputbox_attr);
|
||||
if (!input_x) {
|
||||
scroll = scroll < box_width - 1 ?
|
||||
0 : scroll - (box_width - 1);
|
||||
wmove (dialog, box_y, box_x);
|
||||
for (i = 0; i < box_width; i++)
|
||||
waddch (dialog, instr[scroll + input_x + i] ?
|
||||
instr[scroll + input_x + i] : ' ');
|
||||
input_x = strlen (instr) - scroll;
|
||||
} else
|
||||
input_x--;
|
||||
instr[scroll + input_x] = '\0';
|
||||
mvwaddch (dialog, box_y, input_x + box_x, ' ');
|
||||
wmove (dialog, box_y, input_x + box_x);
|
||||
wrefresh (dialog);
|
||||
}
|
||||
continue;
|
||||
default:
|
||||
if (key < 0x100 && isprint (key)) {
|
||||
if (scroll + input_x < MAX_LEN) {
|
||||
wattrset (dialog, inputbox_attr);
|
||||
instr[scroll + input_x] = key;
|
||||
instr[scroll + input_x + 1] = '\0';
|
||||
if (input_x == box_width - 1) {
|
||||
scroll++;
|
||||
wmove (dialog, box_y, box_x);
|
||||
for (i = 0; i < box_width - 1; i++)
|
||||
waddch (dialog, instr[scroll + i]);
|
||||
} else {
|
||||
wmove (dialog, box_y, input_x++ + box_x);
|
||||
waddch (dialog, key);
|
||||
}
|
||||
wrefresh (dialog);
|
||||
} else
|
||||
flash (); /* Alarm user about overflow */
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
switch (key) {
|
||||
case 'O':
|
||||
case 'o':
|
||||
delwin (dialog);
|
||||
return 0;
|
||||
case 'H':
|
||||
case 'h':
|
||||
delwin (dialog);
|
||||
return 1;
|
||||
case KEY_UP:
|
||||
case KEY_LEFT:
|
||||
switch (button) {
|
||||
case -1:
|
||||
button = 1; /* Indicates "Cancel" button is selected */
|
||||
print_buttons(dialog, height, width, 1);
|
||||
break;
|
||||
case 0:
|
||||
button = -1; /* Indicates input box is selected */
|
||||
print_buttons(dialog, height, width, 0);
|
||||
wmove (dialog, box_y, box_x + input_x);
|
||||
wrefresh (dialog);
|
||||
break;
|
||||
case 1:
|
||||
button = 0; /* Indicates "OK" button is selected */
|
||||
print_buttons(dialog, height, width, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TAB:
|
||||
case KEY_DOWN:
|
||||
case KEY_RIGHT:
|
||||
switch (button) {
|
||||
case -1:
|
||||
button = 0; /* Indicates "OK" button is selected */
|
||||
print_buttons(dialog, height, width, 0);
|
||||
break;
|
||||
case 0:
|
||||
button = 1; /* Indicates "Cancel" button is selected */
|
||||
print_buttons(dialog, height, width, 1);
|
||||
break;
|
||||
case 1:
|
||||
button = -1; /* Indicates input box is selected */
|
||||
print_buttons(dialog, height, width, 0);
|
||||
wmove (dialog, box_y, box_x + input_x);
|
||||
wrefresh (dialog);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ' ':
|
||||
case '\n':
|
||||
delwin (dialog);
|
||||
return (button == -1 ? 0 : button);
|
||||
case 'X':
|
||||
case 'x':
|
||||
key = ESC;
|
||||
case ESC:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
delwin (dialog);
|
||||
return -1; /* ESC pressed */
|
||||
return -1; /* ESC pressed */
|
||||
}
|
||||
|
||||
@@ -67,19 +67,19 @@ main (int argc, const char * const * argv)
|
||||
trace(TRACE_CALLS|TRACE_UPDATE);
|
||||
#endif
|
||||
if (argc < 2) {
|
||||
Usage (argv[0]);
|
||||
exit (-1);
|
||||
Usage (argv[0]);
|
||||
exit (-1);
|
||||
}
|
||||
|
||||
while (offset < argc - 1 && !end_common_opts) { /* Common options */
|
||||
if (!strcmp (argv[offset + 1], "--title")) {
|
||||
if (argc - offset < 3 || title != NULL) {
|
||||
Usage (argv[0]);
|
||||
exit (-1);
|
||||
} else {
|
||||
title = argv[offset + 2];
|
||||
offset += 2;
|
||||
}
|
||||
while (offset < argc - 1 && !end_common_opts) { /* Common options */
|
||||
if (!strcmp (argv[offset + 1], "--title")) {
|
||||
if (argc - offset < 3 || title != NULL) {
|
||||
Usage (argv[0]);
|
||||
exit (-1);
|
||||
} else {
|
||||
title = argv[offset + 2];
|
||||
offset += 2;
|
||||
}
|
||||
} else if (!strcmp (argv[offset + 1], "--backtitle")) {
|
||||
if (backtitle != NULL) {
|
||||
Usage (argv[0]);
|
||||
@@ -88,48 +88,48 @@ main (int argc, const char * const * argv)
|
||||
backtitle = argv[offset + 2];
|
||||
offset += 2;
|
||||
}
|
||||
} else if (!strcmp (argv[offset + 1], "--clear")) {
|
||||
if (clear_screen) { /* Hey, "--clear" can't appear twice! */
|
||||
Usage (argv[0]);
|
||||
exit (-1);
|
||||
} else if (argc == 2) { /* we only want to clear the screen */
|
||||
init_dialog ();
|
||||
refresh (); /* init_dialog() will clear the screen for us */
|
||||
end_dialog ();
|
||||
return 0;
|
||||
} else {
|
||||
clear_screen = 1;
|
||||
offset++;
|
||||
}
|
||||
} else /* no more common options */
|
||||
end_common_opts = 1;
|
||||
} else if (!strcmp (argv[offset + 1], "--clear")) {
|
||||
if (clear_screen) { /* Hey, "--clear" can't appear twice! */
|
||||
Usage (argv[0]);
|
||||
exit (-1);
|
||||
} else if (argc == 2) { /* we only want to clear the screen */
|
||||
init_dialog ();
|
||||
refresh (); /* init_dialog() will clear the screen for us */
|
||||
end_dialog ();
|
||||
return 0;
|
||||
} else {
|
||||
clear_screen = 1;
|
||||
offset++;
|
||||
}
|
||||
} else /* no more common options */
|
||||
end_common_opts = 1;
|
||||
}
|
||||
|
||||
if (argc - 1 == offset) { /* no more options */
|
||||
Usage (argv[0]);
|
||||
exit (-1);
|
||||
if (argc - 1 == offset) { /* no more options */
|
||||
Usage (argv[0]);
|
||||
exit (-1);
|
||||
}
|
||||
/* use a table to look for the requested mode, to avoid code duplication */
|
||||
|
||||
for (modePtr = modes; modePtr->name; modePtr++) /* look for the mode */
|
||||
if (!strcmp (argv[offset + 1], modePtr->name))
|
||||
break;
|
||||
for (modePtr = modes; modePtr->name; modePtr++) /* look for the mode */
|
||||
if (!strcmp (argv[offset + 1], modePtr->name))
|
||||
break;
|
||||
|
||||
if (!modePtr->name)
|
||||
Usage (argv[0]);
|
||||
Usage (argv[0]);
|
||||
if (argc - offset < modePtr->argmin)
|
||||
Usage (argv[0]);
|
||||
Usage (argv[0]);
|
||||
if (modePtr->argmax && argc - offset > modePtr->argmax)
|
||||
Usage (argv[0]);
|
||||
Usage (argv[0]);
|
||||
|
||||
|
||||
|
||||
init_dialog ();
|
||||
retval = (*(modePtr->jumper)) (title, argc - offset, argv + offset);
|
||||
|
||||
if (clear_screen) { /* clear screen before exit */
|
||||
attr_clear (stdscr, LINES, COLS, screen_attr);
|
||||
refresh ();
|
||||
if (clear_screen) { /* clear screen before exit */
|
||||
attr_clear (stdscr, LINES, COLS, screen_attr);
|
||||
refresh ();
|
||||
}
|
||||
end_dialog();
|
||||
|
||||
@@ -173,21 +173,21 @@ int
|
||||
j_menu (const char *t, int ac, const char * const * av)
|
||||
{
|
||||
return dialog_menu (t, av[2], atoi (av[3]), atoi (av[4]),
|
||||
atoi (av[5]), av[6], (ac - 6) / 2, av + 7);
|
||||
atoi (av[5]), av[6], (ac - 6) / 2, av + 7);
|
||||
}
|
||||
|
||||
int
|
||||
j_checklist (const char *t, int ac, const char * const * av)
|
||||
{
|
||||
return dialog_checklist (t, av[2], atoi (av[3]), atoi (av[4]),
|
||||
atoi (av[5]), (ac - 6) / 3, av + 6, FLAG_CHECK);
|
||||
atoi (av[5]), (ac - 6) / 3, av + 6, FLAG_CHECK);
|
||||
}
|
||||
|
||||
int
|
||||
j_radiolist (const char *t, int ac, const char * const * av)
|
||||
{
|
||||
return dialog_checklist (t, av[2], atoi (av[3]), atoi (av[4]),
|
||||
atoi (av[5]), (ac - 6) / 3, av + 6, FLAG_RADIO);
|
||||
atoi (av[5]), (ac - 6) / 3, av + 6, FLAG_RADIO);
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
*
|
||||
* *) A bugfix for the Page-Down problem
|
||||
*
|
||||
* *) Formerly when I used Page Down and Page Up, the cursor would be set
|
||||
* *) Formerly when I used Page Down and Page Up, the cursor would be set
|
||||
* to the first position in the menu box. Now lxdialog is a bit
|
||||
* smarter and works more like other menu systems (just have a look at
|
||||
* it).
|
||||
@@ -80,7 +80,7 @@ print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < menu_width; i++)
|
||||
waddch (win, ' ');
|
||||
waddch (win, ' ');
|
||||
}
|
||||
#else
|
||||
wclrtoeol(win);
|
||||
@@ -88,12 +88,12 @@ print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey
|
||||
wattrset (win, selected ? item_selected_attr : item_attr);
|
||||
mvwaddstr (win, choice, item_x, menu_item);
|
||||
if (hotkey) {
|
||||
wattrset (win, selected ? tag_key_selected_attr : tag_key_attr);
|
||||
mvwaddch(win, choice, item_x+j, menu_item[j]);
|
||||
wattrset (win, selected ? tag_key_selected_attr : tag_key_attr);
|
||||
mvwaddch(win, choice, item_x+j, menu_item[j]);
|
||||
}
|
||||
if (selected) {
|
||||
wmove (win, choice, item_x+1);
|
||||
wrefresh (win);
|
||||
wmove (win, choice, item_x+1);
|
||||
wrefresh (win);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey
|
||||
*/
|
||||
static void
|
||||
print_arrows (WINDOW * win, int item_no, int scroll,
|
||||
int y, int x, int height)
|
||||
int y, int x, int height)
|
||||
{
|
||||
int cur_y, cur_x;
|
||||
|
||||
@@ -111,32 +111,32 @@ print_arrows (WINDOW * win, int item_no, int scroll,
|
||||
wmove(win, y, x);
|
||||
|
||||
if (scroll > 0) {
|
||||
wattrset (win, uarrow_attr);
|
||||
waddch (win, ACS_UARROW);
|
||||
waddstr (win, "(-)");
|
||||
wattrset (win, uarrow_attr);
|
||||
waddch (win, ACS_UARROW);
|
||||
waddstr (win, "(-)");
|
||||
}
|
||||
else {
|
||||
wattrset (win, menubox_attr);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
wattrset (win, menubox_attr);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
}
|
||||
|
||||
y = y + height + 1;
|
||||
wmove(win, y, x);
|
||||
|
||||
if ((height < item_no) && (scroll + height < item_no)) {
|
||||
wattrset (win, darrow_attr);
|
||||
waddch (win, ACS_DARROW);
|
||||
waddstr (win, "(+)");
|
||||
wattrset (win, darrow_attr);
|
||||
waddch (win, ACS_DARROW);
|
||||
waddstr (win, "(+)");
|
||||
}
|
||||
else {
|
||||
wattrset (win, menubox_border_attr);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
wattrset (win, menubox_border_attr);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
waddch (win, ACS_HLINE);
|
||||
}
|
||||
|
||||
wmove(win, cur_y, cur_x);
|
||||
@@ -164,8 +164,8 @@ print_buttons (WINDOW *win, int height, int width, int selected)
|
||||
*/
|
||||
int
|
||||
dialog_menu (const char *title, const char *prompt, int height, int width,
|
||||
int menu_height, const char *current, int item_no,
|
||||
const char * const * items)
|
||||
int menu_height, const char *current, int item_no,
|
||||
const char * const * items)
|
||||
|
||||
{
|
||||
int i, j, x, y, box_x, box_y;
|
||||
@@ -188,24 +188,24 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
|
||||
wattrset (dialog, border_attr);
|
||||
mvwaddch (dialog, height - 3, 0, ACS_LTEE);
|
||||
for (i = 0; i < width - 2; i++)
|
||||
waddch (dialog, ACS_HLINE);
|
||||
waddch (dialog, ACS_HLINE);
|
||||
wattrset (dialog, dialog_attr);
|
||||
wbkgdset (dialog, dialog_attr & A_COLOR);
|
||||
waddch (dialog, ACS_RTEE);
|
||||
|
||||
if (title != NULL && strlen(title) >= width-2 ) {
|
||||
/* truncate long title -- mec */
|
||||
char * title2 = malloc(width-2+1);
|
||||
memcpy( title2, title, width-2 );
|
||||
title2[width-2] = '\0';
|
||||
title = title2;
|
||||
/* truncate long title -- mec */
|
||||
char * title2 = malloc(width-2+1);
|
||||
memcpy( title2, title, width-2 );
|
||||
title2[width-2] = '\0';
|
||||
title = title2;
|
||||
}
|
||||
|
||||
if (title != NULL) {
|
||||
wattrset (dialog, title_attr);
|
||||
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
|
||||
waddstr (dialog, (char *)title);
|
||||
waddch (dialog, ' ');
|
||||
wattrset (dialog, title_attr);
|
||||
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
|
||||
waddstr (dialog, (char *)title);
|
||||
waddch (dialog, ' ');
|
||||
}
|
||||
|
||||
wattrset (dialog, dialog_attr);
|
||||
@@ -217,85 +217,85 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
|
||||
|
||||
/* create new window for the menu */
|
||||
menu = subwin (dialog, menu_height, menu_width,
|
||||
y + box_y + 1, x + box_x + 1);
|
||||
y + box_y + 1, x + box_x + 1);
|
||||
keypad (menu, TRUE);
|
||||
|
||||
/* draw a box around the menu items */
|
||||
draw_box (dialog, box_y, box_x, menu_height + 2, menu_width + 2,
|
||||
menubox_border_attr, menubox_attr);
|
||||
menubox_border_attr, menubox_attr);
|
||||
|
||||
/*
|
||||
* Find length of longest item in order to center menu.
|
||||
* Set 'choice' to default item.
|
||||
* Set 'choice' to default item.
|
||||
*/
|
||||
item_x = 0;
|
||||
for (i = 0; i < item_no; i++) {
|
||||
item_x = MAX (item_x, MIN(menu_width, strlen (items[i * 2 + 1]) + 2));
|
||||
if (strcmp(current, items[i*2]) == 0) choice = i;
|
||||
item_x = MAX (item_x, MIN(menu_width, strlen (items[i * 2 + 1]) + 2));
|
||||
if (strcmp(current, items[i*2]) == 0) choice = i;
|
||||
}
|
||||
|
||||
item_x = (menu_width - item_x) / 2;
|
||||
|
||||
/* get the scroll info from the temp file */
|
||||
if ( (f=fopen("lxdialog.scrltmp","r")) != NULL ) {
|
||||
if ( (fscanf(f,"%d\n",&scroll) == 1) && (scroll <= choice) &&
|
||||
(scroll+max_choice > choice) && (scroll >= 0) &&
|
||||
(scroll+max_choice <= item_no) ) {
|
||||
first_item = scroll;
|
||||
choice = choice - scroll;
|
||||
fclose(f);
|
||||
} else {
|
||||
scroll=0;
|
||||
remove("lxdialog.scrltmp");
|
||||
fclose(f);
|
||||
f=NULL;
|
||||
}
|
||||
if ( (fscanf(f,"%d\n",&scroll) == 1) && (scroll <= choice) &&
|
||||
(scroll+max_choice > choice) && (scroll >= 0) &&
|
||||
(scroll+max_choice <= item_no) ) {
|
||||
first_item = scroll;
|
||||
choice = choice - scroll;
|
||||
fclose(f);
|
||||
} else {
|
||||
scroll=0;
|
||||
remove("lxdialog.scrltmp");
|
||||
fclose(f);
|
||||
f=NULL;
|
||||
}
|
||||
}
|
||||
if ( (choice >= max_choice) || (f==NULL && choice >= max_choice/2) ) {
|
||||
if (choice >= item_no-max_choice/2)
|
||||
scroll = first_item = item_no-max_choice;
|
||||
else
|
||||
scroll = first_item = choice - max_choice/2;
|
||||
choice = choice - scroll;
|
||||
if (choice >= item_no-max_choice/2)
|
||||
scroll = first_item = item_no-max_choice;
|
||||
else
|
||||
scroll = first_item = choice - max_choice/2;
|
||||
choice = choice - scroll;
|
||||
}
|
||||
|
||||
/* Print the menu */
|
||||
for (i=0; i < max_choice; i++) {
|
||||
print_item (menu, items[(first_item + i) * 2 + 1], i, i == choice,
|
||||
print_item (menu, items[(first_item + i) * 2 + 1], i, i == choice,
|
||||
(items[(first_item + i)*2][0] != ':'));
|
||||
}
|
||||
|
||||
wnoutrefresh (menu);
|
||||
|
||||
print_arrows(dialog, item_no, scroll,
|
||||
box_y, box_x+item_x+1, menu_height);
|
||||
box_y, box_x+item_x+1, menu_height);
|
||||
|
||||
print_buttons (dialog, height, width, 0);
|
||||
wmove (menu, choice, item_x+1);
|
||||
wrefresh (menu);
|
||||
|
||||
while (key != ESC) {
|
||||
key = wgetch(menu);
|
||||
key = wgetch(menu);
|
||||
|
||||
if (key < 256 && isalpha(key)) key = tolower(key);
|
||||
if (key < 256 && isalpha(key)) key = tolower(key);
|
||||
|
||||
if (strchr("ynm", key))
|
||||
i = max_choice;
|
||||
else {
|
||||
if (strchr("ynm", key))
|
||||
i = max_choice;
|
||||
else {
|
||||
for (i = choice+1; i < max_choice; i++) {
|
||||
j = first_alpha(items[(scroll+i)*2+1], "YyNnMm");
|
||||
if (key == tolower(items[(scroll+i)*2+1][j]))
|
||||
break;
|
||||
}
|
||||
if (i == max_choice)
|
||||
for (i = 0; i < max_choice; i++) {
|
||||
j = first_alpha(items[(scroll+i)*2+1], "YyNnMm");
|
||||
if (key == tolower(items[(scroll+i)*2+1][j]))
|
||||
break;
|
||||
}
|
||||
}
|
||||
j = first_alpha(items[(scroll+i)*2+1], "YyNnMm");
|
||||
if (key == tolower(items[(scroll+i)*2+1][j]))
|
||||
break;
|
||||
}
|
||||
if (i == max_choice)
|
||||
for (i = 0; i < max_choice; i++) {
|
||||
j = first_alpha(items[(scroll+i)*2+1], "YyNnMm");
|
||||
if (key == tolower(items[(scroll+i)*2+1][j]))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < max_choice ||
|
||||
if (i < max_choice ||
|
||||
key == KEY_UP || key == KEY_DOWN ||
|
||||
key == '-' || key == '+' ||
|
||||
key == KEY_PPAGE || key == KEY_NPAGE) {
|
||||
@@ -303,9 +303,9 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
|
||||
print_item (menu, items[(scroll+choice)*2+1], choice, FALSE,
|
||||
(items[(scroll+choice)*2][0] != ':'));
|
||||
|
||||
if (key == KEY_UP || key == '-') {
|
||||
if (key == KEY_UP || key == '-') {
|
||||
if (choice < 2 && scroll) {
|
||||
/* Scroll menu down */
|
||||
/* Scroll menu down */
|
||||
scrollok (menu, TRUE);
|
||||
wscrl (menu, -1);
|
||||
scrollok (menu, FALSE);
|
||||
@@ -314,19 +314,19 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
|
||||
|
||||
print_item (menu, items[scroll * 2 + 1], 0, FALSE,
|
||||
(items[scroll*2][0] != ':'));
|
||||
} else
|
||||
choice = MAX(choice - 1, 0);
|
||||
} else
|
||||
choice = MAX(choice - 1, 0);
|
||||
|
||||
} else if (key == KEY_DOWN || key == '+') {
|
||||
} else if (key == KEY_DOWN || key == '+') {
|
||||
|
||||
print_item (menu, items[(scroll+choice)*2+1], choice, FALSE,
|
||||
print_item (menu, items[(scroll+choice)*2+1], choice, FALSE,
|
||||
(items[(scroll+choice)*2][0] != ':'));
|
||||
|
||||
if ((choice > max_choice-3) &&
|
||||
(scroll + max_choice < item_no)
|
||||
) {
|
||||
/* Scroll menu up */
|
||||
scrollok (menu, TRUE);
|
||||
/* Scroll menu up */
|
||||
scrollok (menu, TRUE);
|
||||
scroll (menu);
|
||||
scrollok (menu, FALSE);
|
||||
|
||||
@@ -338,14 +338,14 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
|
||||
} else
|
||||
choice = MIN(choice+1, max_choice-1);
|
||||
|
||||
} else if (key == KEY_PPAGE) {
|
||||
scrollok (menu, TRUE);
|
||||
} else if (key == KEY_PPAGE) {
|
||||
scrollok (menu, TRUE);
|
||||
for (i=0; (i < max_choice); i++) {
|
||||
if (scroll > 0) {
|
||||
wscrl (menu, -1);
|
||||
scroll--;
|
||||
print_item (menu, items[scroll * 2 + 1], 0, FALSE,
|
||||
(items[scroll*2][0] != ':'));
|
||||
wscrl (menu, -1);
|
||||
scroll--;
|
||||
print_item (menu, items[scroll * 2 + 1], 0, FALSE,
|
||||
(items[scroll*2][0] != ':'));
|
||||
} else {
|
||||
if (choice > 0)
|
||||
choice--;
|
||||
@@ -356,17 +356,17 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
|
||||
} else if (key == KEY_NPAGE) {
|
||||
for (i=0; (i < max_choice); i++) {
|
||||
if (scroll+max_choice < item_no) {
|
||||
scrollok (menu, TRUE);
|
||||
scroll(menu);
|
||||
scrollok (menu, FALSE);
|
||||
scroll++;
|
||||
print_item (menu, items[(scroll+max_choice-1)*2+1],
|
||||
max_choice-1, FALSE,
|
||||
(items[(scroll+max_choice-1)*2][0] != ':'));
|
||||
} else {
|
||||
if (choice+1 < max_choice)
|
||||
choice++;
|
||||
}
|
||||
scrollok (menu, TRUE);
|
||||
scroll(menu);
|
||||
scrollok (menu, FALSE);
|
||||
scroll++;
|
||||
print_item (menu, items[(scroll+max_choice-1)*2+1],
|
||||
max_choice-1, FALSE,
|
||||
(items[(scroll+max_choice-1)*2][0] != ':'));
|
||||
} else {
|
||||
if (choice+1 < max_choice)
|
||||
choice++;
|
||||
}
|
||||
}
|
||||
|
||||
} else
|
||||
@@ -381,30 +381,30 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
|
||||
wnoutrefresh (dialog);
|
||||
wrefresh (menu);
|
||||
|
||||
continue; /* wait for another key press */
|
||||
continue; /* wait for another key press */
|
||||
}
|
||||
|
||||
switch (key) {
|
||||
case KEY_LEFT:
|
||||
case TAB:
|
||||
case KEY_RIGHT:
|
||||
button = ((key == KEY_LEFT ? --button : ++button) < 0)
|
||||
? 2 : (button > 2 ? 0 : button);
|
||||
switch (key) {
|
||||
case KEY_LEFT:
|
||||
case TAB:
|
||||
case KEY_RIGHT:
|
||||
button = ((key == KEY_LEFT ? --button : ++button) < 0)
|
||||
? 2 : (button > 2 ? 0 : button);
|
||||
|
||||
print_buttons(dialog, height, width, button);
|
||||
wrefresh (menu);
|
||||
break;
|
||||
case ' ':
|
||||
case 's':
|
||||
case 'y':
|
||||
case 'n':
|
||||
case 'm':
|
||||
/* save scroll info */
|
||||
if ( (f=fopen("lxdialog.scrltmp","w")) != NULL ) {
|
||||
fprintf(f,"%d\n",scroll);
|
||||
fclose(f);
|
||||
}
|
||||
delwin (dialog);
|
||||
print_buttons(dialog, height, width, button);
|
||||
wrefresh (menu);
|
||||
break;
|
||||
case ' ':
|
||||
case 's':
|
||||
case 'y':
|
||||
case 'n':
|
||||
case 'm':
|
||||
/* save scroll info */
|
||||
if ( (f=fopen("lxdialog.scrltmp","w")) != NULL ) {
|
||||
fprintf(f,"%d\n",scroll);
|
||||
fclose(f);
|
||||
}
|
||||
delwin (dialog);
|
||||
fprintf(stderr, "%s\n", items[(scroll + choice) * 2]);
|
||||
switch (key) {
|
||||
case 's': return 3;
|
||||
@@ -413,31 +413,31 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
|
||||
case 'm': return 5;
|
||||
case ' ': return 6;
|
||||
}
|
||||
return 0;
|
||||
case 'h':
|
||||
case '?':
|
||||
button = 2;
|
||||
case '\n':
|
||||
delwin (dialog);
|
||||
if (button == 2)
|
||||
fprintf(stderr, "%s \"%s\"\n",
|
||||
items[(scroll + choice) * 2],
|
||||
items[(scroll + choice) * 2 + 1] +
|
||||
first_alpha(items[(scroll + choice) * 2 + 1],""));
|
||||
else
|
||||
fprintf(stderr, "%s\n", items[(scroll + choice) * 2]);
|
||||
return 0;
|
||||
case 'h':
|
||||
case '?':
|
||||
button = 2;
|
||||
case '\n':
|
||||
delwin (dialog);
|
||||
if (button == 2)
|
||||
fprintf(stderr, "%s \"%s\"\n",
|
||||
items[(scroll + choice) * 2],
|
||||
items[(scroll + choice) * 2 + 1] +
|
||||
first_alpha(items[(scroll + choice) * 2 + 1],""));
|
||||
else
|
||||
fprintf(stderr, "%s\n", items[(scroll + choice) * 2]);
|
||||
|
||||
remove("lxdialog.scrltmp");
|
||||
return button;
|
||||
case 'e':
|
||||
case 'x':
|
||||
key = ESC;
|
||||
case ESC:
|
||||
break;
|
||||
}
|
||||
remove("lxdialog.scrltmp");
|
||||
return button;
|
||||
case 'e':
|
||||
case 'x':
|
||||
key = ESC;
|
||||
case ESC:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
delwin (dialog);
|
||||
remove("lxdialog.scrltmp");
|
||||
return -1; /* ESC pressed */
|
||||
return -1; /* ESC pressed */
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
*/
|
||||
int
|
||||
dialog_msgbox (const char *title, const char *prompt, int height, int width,
|
||||
int pause)
|
||||
int pause)
|
||||
{
|
||||
int i, x, y, key = 0;
|
||||
WINDOW *dialog;
|
||||
@@ -44,40 +44,40 @@ dialog_msgbox (const char *title, const char *prompt, int height, int width,
|
||||
draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
|
||||
|
||||
if (title != NULL && strlen(title) >= width-2 ) {
|
||||
/* truncate long title -- mec */
|
||||
char * title2 = malloc(width-2+1);
|
||||
memcpy( title2, title, width-2 );
|
||||
title2[width-2] = '\0';
|
||||
title = title2;
|
||||
/* truncate long title -- mec */
|
||||
char * title2 = malloc(width-2+1);
|
||||
memcpy( title2, title, width-2 );
|
||||
title2[width-2] = '\0';
|
||||
title = title2;
|
||||
}
|
||||
|
||||
if (title != NULL) {
|
||||
wattrset (dialog, title_attr);
|
||||
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
|
||||
waddstr (dialog, (char *)title);
|
||||
waddch (dialog, ' ');
|
||||
wattrset (dialog, title_attr);
|
||||
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
|
||||
waddstr (dialog, (char *)title);
|
||||
waddch (dialog, ' ');
|
||||
}
|
||||
wattrset (dialog, dialog_attr);
|
||||
print_autowrap (dialog, prompt, width - 2, 1, 2);
|
||||
|
||||
if (pause) {
|
||||
wattrset (dialog, border_attr);
|
||||
mvwaddch (dialog, height - 3, 0, ACS_LTEE);
|
||||
for (i = 0; i < width - 2; i++)
|
||||
waddch (dialog, ACS_HLINE);
|
||||
wattrset (dialog, dialog_attr);
|
||||
waddch (dialog, ACS_RTEE);
|
||||
wattrset (dialog, border_attr);
|
||||
mvwaddch (dialog, height - 3, 0, ACS_LTEE);
|
||||
for (i = 0; i < width - 2; i++)
|
||||
waddch (dialog, ACS_HLINE);
|
||||
wattrset (dialog, dialog_attr);
|
||||
waddch (dialog, ACS_RTEE);
|
||||
|
||||
print_button (dialog, " Ok ",
|
||||
height - 2, width / 2 - 4, TRUE);
|
||||
print_button (dialog, " Ok ",
|
||||
height - 2, width / 2 - 4, TRUE);
|
||||
|
||||
wrefresh (dialog);
|
||||
while (key != ESC && key != '\n' && key != ' ' &&
|
||||
wrefresh (dialog);
|
||||
while (key != ESC && key != '\n' && key != ' ' &&
|
||||
key != 'O' && key != 'o' && key != 'X' && key != 'x')
|
||||
key = wgetch (dialog);
|
||||
key = wgetch (dialog);
|
||||
} else {
|
||||
key = '\n';
|
||||
wrefresh (dialog);
|
||||
key = '\n';
|
||||
wrefresh (dialog);
|
||||
}
|
||||
|
||||
delwin (dialog);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -29,40 +29,40 @@ const char *backtitle = NULL;
|
||||
|
||||
const char *dialog_result;
|
||||
|
||||
/*
|
||||
/*
|
||||
* Attribute values, default is for mono display
|
||||
*/
|
||||
chtype attributes[] =
|
||||
{
|
||||
A_NORMAL, /* screen_attr */
|
||||
A_NORMAL, /* shadow_attr */
|
||||
A_NORMAL, /* dialog_attr */
|
||||
A_BOLD, /* title_attr */
|
||||
A_NORMAL, /* border_attr */
|
||||
A_REVERSE, /* button_active_attr */
|
||||
A_DIM, /* button_inactive_attr */
|
||||
A_REVERSE, /* button_key_active_attr */
|
||||
A_BOLD, /* button_key_inactive_attr */
|
||||
A_REVERSE, /* button_label_active_attr */
|
||||
A_NORMAL, /* button_label_inactive_attr */
|
||||
A_NORMAL, /* inputbox_attr */
|
||||
A_NORMAL, /* inputbox_border_attr */
|
||||
A_NORMAL, /* searchbox_attr */
|
||||
A_BOLD, /* searchbox_title_attr */
|
||||
A_NORMAL, /* searchbox_border_attr */
|
||||
A_BOLD, /* position_indicator_attr */
|
||||
A_NORMAL, /* menubox_attr */
|
||||
A_NORMAL, /* menubox_border_attr */
|
||||
A_NORMAL, /* item_attr */
|
||||
A_REVERSE, /* item_selected_attr */
|
||||
A_BOLD, /* tag_attr */
|
||||
A_REVERSE, /* tag_selected_attr */
|
||||
A_BOLD, /* tag_key_attr */
|
||||
A_REVERSE, /* tag_key_selected_attr */
|
||||
A_BOLD, /* check_attr */
|
||||
A_REVERSE, /* check_selected_attr */
|
||||
A_BOLD, /* uarrow_attr */
|
||||
A_BOLD /* darrow_attr */
|
||||
A_NORMAL, /* screen_attr */
|
||||
A_NORMAL, /* shadow_attr */
|
||||
A_NORMAL, /* dialog_attr */
|
||||
A_BOLD, /* title_attr */
|
||||
A_NORMAL, /* border_attr */
|
||||
A_REVERSE, /* button_active_attr */
|
||||
A_DIM, /* button_inactive_attr */
|
||||
A_REVERSE, /* button_key_active_attr */
|
||||
A_BOLD, /* button_key_inactive_attr */
|
||||
A_REVERSE, /* button_label_active_attr */
|
||||
A_NORMAL, /* button_label_inactive_attr */
|
||||
A_NORMAL, /* inputbox_attr */
|
||||
A_NORMAL, /* inputbox_border_attr */
|
||||
A_NORMAL, /* searchbox_attr */
|
||||
A_BOLD, /* searchbox_title_attr */
|
||||
A_NORMAL, /* searchbox_border_attr */
|
||||
A_BOLD, /* position_indicator_attr */
|
||||
A_NORMAL, /* menubox_attr */
|
||||
A_NORMAL, /* menubox_border_attr */
|
||||
A_NORMAL, /* item_attr */
|
||||
A_REVERSE, /* item_selected_attr */
|
||||
A_BOLD, /* tag_attr */
|
||||
A_REVERSE, /* tag_selected_attr */
|
||||
A_BOLD, /* tag_key_attr */
|
||||
A_REVERSE, /* tag_key_selected_attr */
|
||||
A_BOLD, /* check_attr */
|
||||
A_REVERSE, /* check_selected_attr */
|
||||
A_BOLD, /* uarrow_attr */
|
||||
A_BOLD /* darrow_attr */
|
||||
};
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ int color_table[][3] =
|
||||
{CHECK_SELECTED_FG, CHECK_SELECTED_BG, CHECK_SELECTED_HL},
|
||||
{UARROW_FG, UARROW_BG, UARROW_HL},
|
||||
{DARROW_FG, DARROW_BG, DARROW_HL},
|
||||
}; /* color_table */
|
||||
}; /* color_table */
|
||||
|
||||
/*
|
||||
* Set window to attribute 'attr'
|
||||
@@ -115,9 +115,9 @@ attr_clear (WINDOW * win, int height, int width, chtype attr)
|
||||
|
||||
wattrset (win, attr);
|
||||
for (i = 0; i < height; i++) {
|
||||
wmove (win, i, 0);
|
||||
for (j = 0; j < width; j++)
|
||||
waddch (win, ' ');
|
||||
wmove (win, i, 0);
|
||||
for (j = 0; j < width; j++)
|
||||
waddch (win, ' ');
|
||||
}
|
||||
touchwin (win);
|
||||
}
|
||||
@@ -144,14 +144,14 @@ void dialog_clear (void)
|
||||
void
|
||||
init_dialog (void)
|
||||
{
|
||||
initscr (); /* Init curses */
|
||||
initscr (); /* Init curses */
|
||||
keypad (stdscr, TRUE);
|
||||
cbreak ();
|
||||
noecho ();
|
||||
|
||||
|
||||
if (use_colors) /* Set up colors */
|
||||
color_setup ();
|
||||
if (use_colors) /* Set up colors */
|
||||
color_setup ();
|
||||
|
||||
|
||||
dialog_clear ();
|
||||
@@ -165,16 +165,16 @@ color_setup (void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (has_colors ()) { /* Terminal supports color? */
|
||||
start_color ();
|
||||
if (has_colors ()) { /* Terminal supports color? */
|
||||
start_color ();
|
||||
|
||||
/* Initialize color pairs */
|
||||
for (i = 0; i < ATTRIBUTE_COUNT; i++)
|
||||
init_pair (i + 1, color_table[i][0], color_table[i][1]);
|
||||
/* Initialize color pairs */
|
||||
for (i = 0; i < ATTRIBUTE_COUNT; i++)
|
||||
init_pair (i + 1, color_table[i][0], color_table[i][1]);
|
||||
|
||||
/* Setup color attributes */
|
||||
for (i = 0; i < ATTRIBUTE_COUNT; i++)
|
||||
attributes[i] = C_ATTR (color_table[i][2], i + 1);
|
||||
/* Setup color attributes */
|
||||
for (i = 0; i < ATTRIBUTE_COUNT; i++)
|
||||
attributes[i] = C_ATTR (color_table[i][2], i + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,50 +204,50 @@ print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x)
|
||||
strcpy (tempstr, prompt);
|
||||
|
||||
prompt_len = strlen(tempstr);
|
||||
|
||||
|
||||
/*
|
||||
* Remove newlines
|
||||
*/
|
||||
for(i=0; i<prompt_len; i++) {
|
||||
if(tempstr[i] == '\n') tempstr[i] = ' ';
|
||||
if(tempstr[i] == '\n') tempstr[i] = ' ';
|
||||
}
|
||||
|
||||
if (prompt_len <= width - x * 2) { /* If prompt is short */
|
||||
wmove (win, y, (width - prompt_len) / 2);
|
||||
waddstr (win, tempstr);
|
||||
if (prompt_len <= width - x * 2) { /* If prompt is short */
|
||||
wmove (win, y, (width - prompt_len) / 2);
|
||||
waddstr (win, tempstr);
|
||||
} else {
|
||||
cur_x = x;
|
||||
cur_y = y;
|
||||
newl = 1;
|
||||
word = tempstr;
|
||||
while (word && *word) {
|
||||
sp = index(word, ' ');
|
||||
if (sp)
|
||||
*sp++ = 0;
|
||||
cur_x = x;
|
||||
cur_y = y;
|
||||
newl = 1;
|
||||
word = tempstr;
|
||||
while (word && *word) {
|
||||
sp = index(word, ' ');
|
||||
if (sp)
|
||||
*sp++ = 0;
|
||||
|
||||
/* Wrap to next line if either the word does not fit,
|
||||
or it is the first word of a new sentence, and it is
|
||||
short, and the next word does not fit. */
|
||||
room = width - cur_x;
|
||||
wlen = strlen(word);
|
||||
if (wlen > room ||
|
||||
(newl && wlen < 4 && sp && wlen+1+strlen(sp) > room
|
||||
&& (!(sp2 = index(sp, ' ')) || wlen+1+(sp2-sp) > room))) {
|
||||
cur_y++;
|
||||
cur_x = x;
|
||||
}
|
||||
wmove (win, cur_y, cur_x);
|
||||
waddstr (win, word);
|
||||
getyx (win, cur_y, cur_x);
|
||||
cur_x++;
|
||||
if (sp && *sp == ' ') {
|
||||
cur_x++; /* double space */
|
||||
while (*++sp == ' ');
|
||||
newl = 1;
|
||||
} else
|
||||
newl = 0;
|
||||
word = sp;
|
||||
}
|
||||
/* Wrap to next line if either the word does not fit,
|
||||
or it is the first word of a new sentence, and it is
|
||||
short, and the next word does not fit. */
|
||||
room = width - cur_x;
|
||||
wlen = strlen(word);
|
||||
if (wlen > room ||
|
||||
(newl && wlen < 4 && sp && wlen+1+strlen(sp) > room
|
||||
&& (!(sp2 = index(sp, ' ')) || wlen+1+(sp2-sp) > room))) {
|
||||
cur_y++;
|
||||
cur_x = x;
|
||||
}
|
||||
wmove (win, cur_y, cur_x);
|
||||
waddstr (win, word);
|
||||
getyx (win, cur_y, cur_x);
|
||||
cur_x++;
|
||||
if (sp && *sp == ' ') {
|
||||
cur_x++; /* double space */
|
||||
while (*++sp == ' ');
|
||||
newl = 1;
|
||||
} else
|
||||
newl = 0;
|
||||
word = sp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -265,14 +265,14 @@ print_button (WINDOW * win, const char *label, int y, int x, int selected)
|
||||
temp = strspn (label, " ");
|
||||
label += temp;
|
||||
wattrset (win, selected ? button_label_active_attr
|
||||
: button_label_inactive_attr);
|
||||
: button_label_inactive_attr);
|
||||
for (i = 0; i < temp; i++)
|
||||
waddch (win, ' ');
|
||||
waddch (win, ' ');
|
||||
wattrset (win, selected ? button_key_active_attr
|
||||
: button_key_inactive_attr);
|
||||
: button_key_inactive_attr);
|
||||
waddch (win, label[0]);
|
||||
wattrset (win, selected ? button_label_active_attr
|
||||
: button_label_inactive_attr);
|
||||
: button_label_inactive_attr);
|
||||
waddstr (win, (char *)label + 1);
|
||||
wattrset (win, selected ? button_active_attr : button_inactive_attr);
|
||||
waddstr (win, ">");
|
||||
@@ -284,32 +284,32 @@ print_button (WINDOW * win, const char *label, int y, int x, int selected)
|
||||
*/
|
||||
void
|
||||
draw_box (WINDOW * win, int y, int x, int height, int width,
|
||||
chtype box, chtype border)
|
||||
chtype box, chtype border)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
wattrset (win, 0);
|
||||
for (i = 0; i < height; i++) {
|
||||
wmove (win, y + i, x);
|
||||
for (j = 0; j < width; j++)
|
||||
if (!i && !j)
|
||||
waddch (win, border | ACS_ULCORNER);
|
||||
else if (i == height - 1 && !j)
|
||||
waddch (win, border | ACS_LLCORNER);
|
||||
else if (!i && j == width - 1)
|
||||
waddch (win, box | ACS_URCORNER);
|
||||
else if (i == height - 1 && j == width - 1)
|
||||
waddch (win, box | ACS_LRCORNER);
|
||||
else if (!i)
|
||||
waddch (win, border | ACS_HLINE);
|
||||
else if (i == height - 1)
|
||||
waddch (win, box | ACS_HLINE);
|
||||
else if (!j)
|
||||
waddch (win, border | ACS_VLINE);
|
||||
else if (j == width - 1)
|
||||
waddch (win, box | ACS_VLINE);
|
||||
else
|
||||
waddch (win, box | ' ');
|
||||
wmove (win, y + i, x);
|
||||
for (j = 0; j < width; j++)
|
||||
if (!i && !j)
|
||||
waddch (win, border | ACS_ULCORNER);
|
||||
else if (i == height - 1 && !j)
|
||||
waddch (win, border | ACS_LLCORNER);
|
||||
else if (!i && j == width - 1)
|
||||
waddch (win, box | ACS_URCORNER);
|
||||
else if (i == height - 1 && j == width - 1)
|
||||
waddch (win, box | ACS_LRCORNER);
|
||||
else if (!i)
|
||||
waddch (win, border | ACS_HLINE);
|
||||
else if (i == height - 1)
|
||||
waddch (win, box | ACS_HLINE);
|
||||
else if (!j)
|
||||
waddch (win, border | ACS_VLINE);
|
||||
else if (j == width - 1)
|
||||
waddch (win, box | ACS_VLINE);
|
||||
else
|
||||
waddch (win, box | ' ');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -322,17 +322,17 @@ draw_shadow (WINDOW * win, int y, int x, int height, int width)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (has_colors ()) { /* Whether terminal supports color? */
|
||||
wattrset (win, shadow_attr);
|
||||
wmove (win, y + height, x + 2);
|
||||
for (i = 0; i < width; i++)
|
||||
waddch (win, winch (win) & A_CHARTEXT);
|
||||
for (i = y + 1; i < y + height + 1; i++) {
|
||||
wmove (win, i, x + width);
|
||||
waddch (win, winch (win) & A_CHARTEXT);
|
||||
waddch (win, winch (win) & A_CHARTEXT);
|
||||
}
|
||||
wnoutrefresh (win);
|
||||
if (has_colors ()) { /* Whether terminal supports color? */
|
||||
wattrset (win, shadow_attr);
|
||||
wmove (win, y + height, x + 2);
|
||||
for (i = 0; i < width; i++)
|
||||
waddch (win, winch (win) & A_CHARTEXT);
|
||||
for (i = y + 1; i < y + height + 1; i++) {
|
||||
wmove (win, i, x + width);
|
||||
waddch (win, winch (win) & A_CHARTEXT);
|
||||
waddch (win, winch (win) & A_CHARTEXT);
|
||||
}
|
||||
wnoutrefresh (win);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -342,18 +342,18 @@ draw_shadow (WINDOW * win, int y, int x, int height, int width)
|
||||
int
|
||||
first_alpha(const char *string, const char *exempt)
|
||||
{
|
||||
int i, in_paren=0, c;
|
||||
int i, in_paren=0, c;
|
||||
|
||||
for (i = 0; i < strlen(string); i++) {
|
||||
c = tolower(string[i]);
|
||||
for (i = 0; i < strlen(string); i++) {
|
||||
c = tolower(string[i]);
|
||||
|
||||
if (strchr("<[(", c)) ++in_paren;
|
||||
if (strchr(">])", c)) --in_paren;
|
||||
if (strchr("<[(", c)) ++in_paren;
|
||||
if (strchr(">])", c)) --in_paren;
|
||||
|
||||
if ((! in_paren) && isalpha(c) &&
|
||||
strchr(exempt, c) == 0)
|
||||
return i;
|
||||
}
|
||||
if ((! in_paren) && isalpha(c) &&
|
||||
strchr(exempt, c) == 0)
|
||||
return i;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -59,23 +59,23 @@ dialog_yesno (const char *title, const char *prompt, int height, int width)
|
||||
wattrset (dialog, border_attr);
|
||||
mvwaddch (dialog, height-3, 0, ACS_LTEE);
|
||||
for (i = 0; i < width - 2; i++)
|
||||
waddch (dialog, ACS_HLINE);
|
||||
waddch (dialog, ACS_HLINE);
|
||||
wattrset (dialog, dialog_attr);
|
||||
waddch (dialog, ACS_RTEE);
|
||||
|
||||
if (title != NULL && strlen(title) >= width-2 ) {
|
||||
/* truncate long title -- mec */
|
||||
char * title2 = malloc(width-2+1);
|
||||
memcpy( title2, title, width-2 );
|
||||
title2[width-2] = '\0';
|
||||
title = title2;
|
||||
/* truncate long title -- mec */
|
||||
char * title2 = malloc(width-2+1);
|
||||
memcpy( title2, title, width-2 );
|
||||
title2[width-2] = '\0';
|
||||
title = title2;
|
||||
}
|
||||
|
||||
if (title != NULL) {
|
||||
wattrset (dialog, title_attr);
|
||||
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
|
||||
waddstr (dialog, (char *)title);
|
||||
waddch (dialog, ' ');
|
||||
wattrset (dialog, title_attr);
|
||||
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
|
||||
waddstr (dialog, (char *)title);
|
||||
waddch (dialog, ' ');
|
||||
}
|
||||
|
||||
wattrset (dialog, dialog_attr);
|
||||
@@ -84,35 +84,35 @@ dialog_yesno (const char *title, const char *prompt, int height, int width)
|
||||
print_buttons(dialog, height, width, 0);
|
||||
|
||||
while (key != ESC) {
|
||||
key = wgetch (dialog);
|
||||
switch (key) {
|
||||
case 'Y':
|
||||
case 'y':
|
||||
delwin (dialog);
|
||||
return 0;
|
||||
case 'N':
|
||||
case 'n':
|
||||
delwin (dialog);
|
||||
return 1;
|
||||
key = wgetch (dialog);
|
||||
switch (key) {
|
||||
case 'Y':
|
||||
case 'y':
|
||||
delwin (dialog);
|
||||
return 0;
|
||||
case 'N':
|
||||
case 'n':
|
||||
delwin (dialog);
|
||||
return 1;
|
||||
|
||||
case TAB:
|
||||
case KEY_LEFT:
|
||||
case KEY_RIGHT:
|
||||
button = ((key == KEY_LEFT ? --button : ++button) < 0)
|
||||
? 1 : (button > 1 ? 0 : button);
|
||||
case TAB:
|
||||
case KEY_LEFT:
|
||||
case KEY_RIGHT:
|
||||
button = ((key == KEY_LEFT ? --button : ++button) < 0)
|
||||
? 1 : (button > 1 ? 0 : button);
|
||||
|
||||
print_buttons(dialog, height, width, button);
|
||||
wrefresh (dialog);
|
||||
break;
|
||||
case ' ':
|
||||
case '\n':
|
||||
delwin (dialog);
|
||||
return button;
|
||||
case ESC:
|
||||
break;
|
||||
}
|
||||
print_buttons(dialog, height, width, button);
|
||||
wrefresh (dialog);
|
||||
break;
|
||||
case ' ':
|
||||
case '\n':
|
||||
delwin (dialog);
|
||||
return button;
|
||||
case ESC:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
delwin (dialog);
|
||||
return -1; /* ESC pressed */
|
||||
return -1; /* ESC pressed */
|
||||
}
|
||||
|
||||
@@ -53,129 +53,129 @@ static char *configs[] __initdata =
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define VERSION "0.2"
|
||||
#define LINE_SIZE 1000
|
||||
#define VERSION "0.2"
|
||||
#define LINE_SIZE 1000
|
||||
|
||||
int include_all_lines = 1; // whether to include "=n" lines in the output
|
||||
int include_all_lines = 1; // whether to include "=n" lines in the output
|
||||
|
||||
void usage (const char *progname)
|
||||
{
|
||||
fprintf (stderr, "%s ver. %s\n", progname, VERSION);
|
||||
fprintf (stderr, "usage: %s input.config.name path/configs.c\n",
|
||||
progname);
|
||||
exit (1);
|
||||
fprintf (stderr, "%s ver. %s\n", progname, VERSION);
|
||||
fprintf (stderr, "usage: %s input.config.name path/configs.c\n",
|
||||
progname);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
void make_intro (FILE *sourcefile)
|
||||
{
|
||||
fprintf (sourcefile, "#include <linux/init.h>\n");
|
||||
///// fprintf (sourcefile, "#include <linux/module.h>\n");
|
||||
fprintf (sourcefile, "\n");
|
||||
///// fprintf (sourcefile, "char *configs[] __initdata = {\n");
|
||||
fprintf (sourcefile, "static char __attribute__ ((unused)) *configs[] __initdata = {\n");
|
||||
fprintf (sourcefile, " \"CONFIG_BEGIN=n\\n\" ,\n");
|
||||
fprintf (sourcefile, "#include <linux/init.h>\n");
|
||||
///// fprintf (sourcefile, "#include <linux/module.h>\n");
|
||||
fprintf (sourcefile, "\n");
|
||||
///// fprintf (sourcefile, "char *configs[] __initdata = {\n");
|
||||
fprintf (sourcefile, "static char __attribute__ ((unused)) *configs[] __initdata = {\n");
|
||||
fprintf (sourcefile, " \"CONFIG_BEGIN=n\\n\" ,\n");
|
||||
}
|
||||
|
||||
void make_ending (FILE *sourcefile)
|
||||
{
|
||||
fprintf (sourcefile, " \"CONFIG_END=n\\n\"\n");
|
||||
fprintf (sourcefile, "};\n");
|
||||
///// fprintf (sourcefile, "EXPORT_SYMBOL (configs);\n");
|
||||
fprintf (sourcefile, " \"CONFIG_END=n\\n\"\n");
|
||||
fprintf (sourcefile, "};\n");
|
||||
///// fprintf (sourcefile, "EXPORT_SYMBOL (configs);\n");
|
||||
}
|
||||
|
||||
void make_lines (FILE *configfile, FILE *sourcefile)
|
||||
{
|
||||
char cfgline[LINE_SIZE];
|
||||
char *ch;
|
||||
char cfgline[LINE_SIZE];
|
||||
char *ch;
|
||||
|
||||
while (fgets (cfgline, LINE_SIZE, configfile)) {
|
||||
/* kill the trailing newline in cfgline */
|
||||
cfgline[strlen (cfgline) - 1] = '\0';
|
||||
while (fgets (cfgline, LINE_SIZE, configfile)) {
|
||||
/* kill the trailing newline in cfgline */
|
||||
cfgline[strlen (cfgline) - 1] = '\0';
|
||||
|
||||
/* don't keep #-only line or an empty/blank line */
|
||||
if ((cfgline[0] == '#' && cfgline[1] == '\0') ||
|
||||
cfgline[0] == '\0')
|
||||
continue;
|
||||
/* don't keep #-only line or an empty/blank line */
|
||||
if ((cfgline[0] == '#' && cfgline[1] == '\0') ||
|
||||
cfgline[0] == '\0')
|
||||
continue;
|
||||
|
||||
if (!include_all_lines &&
|
||||
cfgline[0] == '#') // strip out all comment lines
|
||||
continue;
|
||||
if (!include_all_lines &&
|
||||
cfgline[0] == '#') // strip out all comment lines
|
||||
continue;
|
||||
|
||||
/* really only want to keep lines that begin with
|
||||
* "CONFIG_" or "# CONFIG_" */
|
||||
if (strncmp (cfgline, "CONFIG_", 7) &&
|
||||
strncmp (cfgline, "# CONFIG_", 9))
|
||||
continue;
|
||||
/* really only want to keep lines that begin with
|
||||
* "CONFIG_" or "# CONFIG_" */
|
||||
if (strncmp (cfgline, "CONFIG_", 7) &&
|
||||
strncmp (cfgline, "# CONFIG_", 9))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* use strchr() to check for "-quote in cfgline;
|
||||
* if not found, output the line, quoted;
|
||||
* if found, output a char at a time, with \\-quote
|
||||
* preceding double-quote chars
|
||||
*/
|
||||
if (!strchr (cfgline, '"')) {
|
||||
fprintf (sourcefile, " \"%s\\n\" ,\n", cfgline);
|
||||
continue;
|
||||
}
|
||||
/*
|
||||
* use strchr() to check for "-quote in cfgline;
|
||||
* if not found, output the line, quoted;
|
||||
* if found, output a char at a time, with \\-quote
|
||||
* preceding double-quote chars
|
||||
*/
|
||||
if (!strchr (cfgline, '"')) {
|
||||
fprintf (sourcefile, " \"%s\\n\" ,\n", cfgline);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* go to char-at-a-time mode for this config and
|
||||
* precede any double-quote with a backslash */
|
||||
fprintf (sourcefile, " \""); /* lead-in */
|
||||
for (ch = cfgline; *ch; ch++) {
|
||||
if (*ch == '"')
|
||||
fputc ('\\', sourcefile);
|
||||
fputc (*ch, sourcefile);
|
||||
}
|
||||
fprintf (sourcefile, "\\n\" ,\n");
|
||||
}
|
||||
/* go to char-at-a-time mode for this config and
|
||||
* precede any double-quote with a backslash */
|
||||
fprintf (sourcefile, " \""); /* lead-in */
|
||||
for (ch = cfgline; *ch; ch++) {
|
||||
if (*ch == '"')
|
||||
fputc ('\\', sourcefile);
|
||||
fputc (*ch, sourcefile);
|
||||
}
|
||||
fprintf (sourcefile, "\\n\" ,\n");
|
||||
}
|
||||
}
|
||||
|
||||
int make_configs (FILE *configfile, FILE *sourcefile)
|
||||
{
|
||||
make_intro (sourcefile);
|
||||
make_lines (configfile, sourcefile);
|
||||
make_ending (sourcefile);
|
||||
make_intro (sourcefile);
|
||||
make_lines (configfile, sourcefile);
|
||||
make_ending (sourcefile);
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
char *progname = argv[0];
|
||||
char *configname, *sourcename;
|
||||
FILE *configfile, *sourcefile;
|
||||
char *progname = argv[0];
|
||||
char *configname, *sourcename;
|
||||
FILE *configfile, *sourcefile;
|
||||
|
||||
if (argc != 3)
|
||||
usage (progname);
|
||||
if (argc != 3)
|
||||
usage (progname);
|
||||
|
||||
configname = argv[1];
|
||||
sourcename = argv[2];
|
||||
configname = argv[1];
|
||||
sourcename = argv[2];
|
||||
|
||||
configfile = fopen (configname, "r");
|
||||
if (!configfile) {
|
||||
fprintf (stderr, "%s: cannot open '%s'\n",
|
||||
progname, configname);
|
||||
exit (2);
|
||||
}
|
||||
sourcefile = fopen (sourcename, "w");
|
||||
if (!sourcefile) {
|
||||
fprintf (stderr, "%s: cannot open '%s'\n",
|
||||
progname, sourcename);
|
||||
exit (2);
|
||||
}
|
||||
configfile = fopen (configname, "r");
|
||||
if (!configfile) {
|
||||
fprintf (stderr, "%s: cannot open '%s'\n",
|
||||
progname, configname);
|
||||
exit (2);
|
||||
}
|
||||
sourcefile = fopen (sourcename, "w");
|
||||
if (!sourcefile) {
|
||||
fprintf (stderr, "%s: cannot open '%s'\n",
|
||||
progname, sourcename);
|
||||
exit (2);
|
||||
}
|
||||
|
||||
make_configs (configfile, sourcefile);
|
||||
make_configs (configfile, sourcefile);
|
||||
|
||||
if (fclose (sourcefile)) {
|
||||
fprintf (stderr, "%s: error %d closing '%s'\n",
|
||||
progname, errno, sourcename);
|
||||
exit (3);
|
||||
}
|
||||
if (fclose (configfile)) {
|
||||
fprintf (stderr, "%s: error %d closing '%s'\n",
|
||||
progname, errno, configname);
|
||||
exit (3);
|
||||
}
|
||||
if (fclose (sourcefile)) {
|
||||
fprintf (stderr, "%s: error %d closing '%s'\n",
|
||||
progname, errno, sourcename);
|
||||
exit (3);
|
||||
}
|
||||
if (fclose (configfile)) {
|
||||
fprintf (stderr, "%s: error %d closing '%s'\n",
|
||||
progname, errno, configname);
|
||||
exit (3);
|
||||
}
|
||||
|
||||
exit (0);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
/* end mkconfigs.c */
|
||||
|
||||
650
scripts/mkdep.c
650
scripts/mkdep.c
File diff suppressed because it is too large
Load Diff
@@ -30,13 +30,13 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define ERROR_EXIT(strExit) \
|
||||
{ \
|
||||
const int errnoSave = errno; \
|
||||
fprintf(stderr, "%s: ", str_my_name); \
|
||||
errno = errnoSave; \
|
||||
perror((strExit)); \
|
||||
exit(1); \
|
||||
#define ERROR_EXIT(strExit) \
|
||||
{ \
|
||||
const int errnoSave = errno; \
|
||||
fprintf(stderr, "%s: ", str_my_name); \
|
||||
errno = errnoSave; \
|
||||
perror((strExit)); \
|
||||
exit(1); \
|
||||
}
|
||||
|
||||
|
||||
@@ -63,8 +63,8 @@ int main(int argc, const char * argv [])
|
||||
/* Check arg count. */
|
||||
if (argc != 3)
|
||||
{
|
||||
fprintf(stderr, "%s: wrong number of arguments.\n", argv[0]);
|
||||
exit(1);
|
||||
fprintf(stderr, "%s: wrong number of arguments.\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
str_my_name = argv[0];
|
||||
@@ -73,30 +73,30 @@ int main(int argc, const char * argv [])
|
||||
|
||||
/* Find a buffer size. */
|
||||
if (stat(str_file_autoconf, &stat_buf) != 0)
|
||||
ERROR_EXIT(str_file_autoconf);
|
||||
ERROR_EXIT(str_file_autoconf);
|
||||
buffer_size = 2 * stat_buf.st_size + 4096;
|
||||
|
||||
/* Allocate buffers. */
|
||||
if ( (line = malloc(buffer_size)) == NULL
|
||||
|| (old_line = malloc(buffer_size)) == NULL
|
||||
|| (list_target = malloc(buffer_size)) == NULL )
|
||||
ERROR_EXIT(str_file_autoconf);
|
||||
ERROR_EXIT(str_file_autoconf);
|
||||
|
||||
/* Open autoconfig file. */
|
||||
if ((fp_config = fopen(str_file_autoconf, "r")) == NULL)
|
||||
ERROR_EXIT(str_file_autoconf);
|
||||
ERROR_EXIT(str_file_autoconf);
|
||||
|
||||
/* Make output directory if needed. */
|
||||
if (stat(str_dir_config, &stat_buf) != 0)
|
||||
{
|
||||
if (mkdir(str_dir_config, 0755) != 0)
|
||||
ERROR_EXIT(str_dir_config);
|
||||
if (mkdir(str_dir_config, 0755) != 0)
|
||||
ERROR_EXIT(str_dir_config);
|
||||
}
|
||||
|
||||
/* Change to output directory. */
|
||||
if (chdir(str_dir_config) != 0)
|
||||
ERROR_EXIT(str_dir_config);
|
||||
|
||||
ERROR_EXIT(str_dir_config);
|
||||
|
||||
/* Put initial separator into target list. */
|
||||
ptarget = list_target;
|
||||
*ptarget++ = '\n';
|
||||
@@ -104,66 +104,66 @@ int main(int argc, const char * argv [])
|
||||
/* Read config lines. */
|
||||
while (fgets(line, buffer_size, fp_config))
|
||||
{
|
||||
const char * str_config;
|
||||
int is_same;
|
||||
int itarget;
|
||||
const char * str_config;
|
||||
int is_same;
|
||||
int itarget;
|
||||
|
||||
if (line[0] != '#')
|
||||
continue;
|
||||
if ((str_config = strstr(line, "CONFIG_")) == NULL)
|
||||
continue;
|
||||
if (line[0] != '#')
|
||||
continue;
|
||||
if ((str_config = strstr(line, "CONFIG_")) == NULL)
|
||||
continue;
|
||||
|
||||
/* Make the output file name. */
|
||||
str_config += sizeof("CONFIG_") - 1;
|
||||
for (itarget = 0; !isspace((int)str_config[itarget]); itarget++)
|
||||
{
|
||||
char c = str_config[itarget];
|
||||
if (isupper((int)c)) c = tolower((int)c);
|
||||
if (c == '_') c = '/';
|
||||
ptarget[itarget] = c;
|
||||
}
|
||||
ptarget[itarget++] = '.';
|
||||
ptarget[itarget++] = 'h';
|
||||
ptarget[itarget++] = '\0';
|
||||
/* Make the output file name. */
|
||||
str_config += sizeof("CONFIG_") - 1;
|
||||
for (itarget = 0; !isspace((int)str_config[itarget]); itarget++)
|
||||
{
|
||||
char c = str_config[itarget];
|
||||
if (isupper((int)c)) c = tolower((int)c);
|
||||
if (c == '_') c = '/';
|
||||
ptarget[itarget] = c;
|
||||
}
|
||||
ptarget[itarget++] = '.';
|
||||
ptarget[itarget++] = 'h';
|
||||
ptarget[itarget++] = '\0';
|
||||
|
||||
/* Check for existing file. */
|
||||
is_same = 0;
|
||||
if ((fp_target = fopen(ptarget, "r")) != NULL)
|
||||
{
|
||||
fgets(old_line, buffer_size, fp_target);
|
||||
if (fclose(fp_target) != 0)
|
||||
ERROR_EXIT(ptarget);
|
||||
if (!strcmp(line, old_line))
|
||||
is_same = 1;
|
||||
}
|
||||
/* Check for existing file. */
|
||||
is_same = 0;
|
||||
if ((fp_target = fopen(ptarget, "r")) != NULL)
|
||||
{
|
||||
fgets(old_line, buffer_size, fp_target);
|
||||
if (fclose(fp_target) != 0)
|
||||
ERROR_EXIT(ptarget);
|
||||
if (!strcmp(line, old_line))
|
||||
is_same = 1;
|
||||
}
|
||||
|
||||
if (!is_same)
|
||||
{
|
||||
/* Auto-create directories. */
|
||||
int islash;
|
||||
for (islash = 0; islash < itarget; islash++)
|
||||
{
|
||||
if (ptarget[islash] == '/')
|
||||
{
|
||||
ptarget[islash] = '\0';
|
||||
if (stat(ptarget, &stat_buf) != 0
|
||||
&& mkdir(ptarget, 0755) != 0)
|
||||
ERROR_EXIT( ptarget );
|
||||
ptarget[islash] = '/';
|
||||
}
|
||||
}
|
||||
if (!is_same)
|
||||
{
|
||||
/* Auto-create directories. */
|
||||
int islash;
|
||||
for (islash = 0; islash < itarget; islash++)
|
||||
{
|
||||
if (ptarget[islash] == '/')
|
||||
{
|
||||
ptarget[islash] = '\0';
|
||||
if (stat(ptarget, &stat_buf) != 0
|
||||
&& mkdir(ptarget, 0755) != 0)
|
||||
ERROR_EXIT( ptarget );
|
||||
ptarget[islash] = '/';
|
||||
}
|
||||
}
|
||||
|
||||
/* Write the file. */
|
||||
if ((fp_target = fopen(ptarget, "w" )) == NULL)
|
||||
ERROR_EXIT(ptarget);
|
||||
fputs(line, fp_target);
|
||||
if (ferror(fp_target) || fclose(fp_target) != 0)
|
||||
ERROR_EXIT(ptarget);
|
||||
}
|
||||
/* Write the file. */
|
||||
if ((fp_target = fopen(ptarget, "w" )) == NULL)
|
||||
ERROR_EXIT(ptarget);
|
||||
fputs(line, fp_target);
|
||||
if (ferror(fp_target) || fclose(fp_target) != 0)
|
||||
ERROR_EXIT(ptarget);
|
||||
}
|
||||
|
||||
/* Update target list */
|
||||
ptarget += itarget;
|
||||
*(ptarget-1) = '\n';
|
||||
/* Update target list */
|
||||
ptarget += itarget;
|
||||
*(ptarget-1) = '\n';
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -171,7 +171,7 @@ int main(int argc, const char * argv [])
|
||||
* Terminate the target list.
|
||||
*/
|
||||
if (fclose(fp_config) != 0)
|
||||
ERROR_EXIT(str_file_autoconf);
|
||||
ERROR_EXIT(str_file_autoconf);
|
||||
*ptarget = '\0';
|
||||
|
||||
/*
|
||||
@@ -190,37 +190,37 @@ int main(int argc, const char * argv [])
|
||||
|
||||
fp_find = popen("find * -type f -name \"*.h\" -print", "r");
|
||||
if (fp_find == 0)
|
||||
ERROR_EXIT( "find" );
|
||||
ERROR_EXIT( "find" );
|
||||
|
||||
line[0] = '\n';
|
||||
while (fgets(line+1, buffer_size, fp_find))
|
||||
{
|
||||
if (strstr(list_target, line) == NULL)
|
||||
{
|
||||
/*
|
||||
* This is an old file with no CONFIG_* flag in autoconf.h.
|
||||
*/
|
||||
if (strstr(list_target, line) == NULL)
|
||||
{
|
||||
/*
|
||||
* This is an old file with no CONFIG_* flag in autoconf.h.
|
||||
*/
|
||||
|
||||
/* First strip the \n. */
|
||||
line[strlen(line)-1] = '\0';
|
||||
/* First strip the \n. */
|
||||
line[strlen(line)-1] = '\0';
|
||||
|
||||
/* Grab size. */
|
||||
if (stat(line+1, &stat_buf) != 0)
|
||||
ERROR_EXIT(line);
|
||||
/* Grab size. */
|
||||
if (stat(line+1, &stat_buf) != 0)
|
||||
ERROR_EXIT(line);
|
||||
|
||||
/* If file is not empty, make it empty and give it a fresh date. */
|
||||
if (stat_buf.st_size != 0)
|
||||
{
|
||||
if ((fp_target = fopen(line+1, "w")) == NULL)
|
||||
ERROR_EXIT(line);
|
||||
if (fclose(fp_target) != 0)
|
||||
ERROR_EXIT(line);
|
||||
}
|
||||
}
|
||||
/* If file is not empty, make it empty and give it a fresh date. */
|
||||
if (stat_buf.st_size != 0)
|
||||
{
|
||||
if ((fp_target = fopen(line+1, "w")) == NULL)
|
||||
ERROR_EXIT(line);
|
||||
if (fclose(fp_target) != 0)
|
||||
ERROR_EXIT(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (pclose(fp_find) != 0)
|
||||
ERROR_EXIT("find");
|
||||
ERROR_EXIT("find");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
826
scripts/tkcond.c
826
scripts/tkcond.c
File diff suppressed because it is too large
Load Diff
1730
scripts/tkgen.c
1730
scripts/tkgen.c
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -21,10 +21,10 @@
|
||||
enum e_token
|
||||
{
|
||||
token_UNKNOWN,
|
||||
token_bool,
|
||||
token_bool,
|
||||
token_choice_header,
|
||||
token_choice_item,
|
||||
token_comment,
|
||||
token_comment,
|
||||
token_define_bool,
|
||||
token_define_hex,
|
||||
token_define_int,
|
||||
@@ -33,18 +33,18 @@ enum e_token
|
||||
token_dep_bool,
|
||||
token_dep_mbool,
|
||||
token_dep_tristate,
|
||||
token_else,
|
||||
token_else,
|
||||
token_endmenu,
|
||||
token_fi,
|
||||
token_fi,
|
||||
token_hex,
|
||||
token_if,
|
||||
token_if,
|
||||
token_int,
|
||||
token_mainmenu_name,
|
||||
token_mainmenu_option,
|
||||
token_mainmenu_name,
|
||||
token_mainmenu_option,
|
||||
token_source,
|
||||
token_string,
|
||||
token_then,
|
||||
token_tristate,
|
||||
token_tristate,
|
||||
token_unset,
|
||||
};
|
||||
|
||||
@@ -83,10 +83,10 @@ enum operator
|
||||
|
||||
struct condition
|
||||
{
|
||||
struct condition * next;
|
||||
enum operator op;
|
||||
const char * str; /* op_constant */
|
||||
int nameindex; /* op_variable */
|
||||
struct condition * next;
|
||||
enum operator op;
|
||||
const char * str; /* op_constant */
|
||||
int nameindex; /* op_variable */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -95,8 +95,8 @@ struct condition
|
||||
|
||||
struct dependency
|
||||
{
|
||||
char * name;
|
||||
struct dependency * next;
|
||||
char * name;
|
||||
struct dependency * next;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -105,26 +105,26 @@ struct dependency
|
||||
|
||||
struct kconfig
|
||||
{
|
||||
struct kconfig * next;
|
||||
enum e_token token;
|
||||
int nameindex;
|
||||
char * label;
|
||||
char * value;
|
||||
struct condition * cond;
|
||||
struct dependency * depend; /* token_dep_tristate */
|
||||
struct kconfig * cfg_parent; /* token_choice_item */
|
||||
struct kconfig * next;
|
||||
enum e_token token;
|
||||
int nameindex;
|
||||
char * label;
|
||||
char * value;
|
||||
struct condition * cond;
|
||||
struct dependency * depend; /* token_dep_tristate */
|
||||
struct kconfig * cfg_parent; /* token_choice_item */
|
||||
|
||||
/* used only in tkgen.c */
|
||||
int menu_number;
|
||||
int menu_line;
|
||||
struct kconfig * menu_next;
|
||||
int menu_number;
|
||||
int menu_line;
|
||||
struct kconfig * menu_next;
|
||||
};
|
||||
|
||||
struct variable
|
||||
{
|
||||
char * name;
|
||||
char defined;
|
||||
char global_written;
|
||||
char * name;
|
||||
char defined;
|
||||
char global_written;
|
||||
};
|
||||
|
||||
extern struct variable *vartable;
|
||||
@@ -134,6 +134,6 @@ extern int max_varnum;
|
||||
* Prototypes
|
||||
*/
|
||||
|
||||
extern void fix_conditionals ( struct kconfig * scfg ); /* tkcond.c */
|
||||
extern void dump_tk_script ( struct kconfig * scfg ); /* tkgen.c */
|
||||
extern int get_varnum ( char * name ); /* tkparse.c */
|
||||
extern void fix_conditionals ( struct kconfig * scfg ); /* tkcond.c */
|
||||
extern void dump_tk_script ( struct kconfig * scfg ); /* tkgen.c */
|
||||
extern int get_varnum ( char * name ); /* tkparse.c */
|
||||
|
||||
Reference in New Issue
Block a user