diff options
Diffstat (limited to 'mdk-stage1/newt-frontend.c')
| -rw-r--r-- | mdk-stage1/newt-frontend.c | 156 | 
1 files changed, 73 insertions, 83 deletions
| diff --git a/mdk-stage1/newt-frontend.c b/mdk-stage1/newt-frontend.c index 416d05ae6..c0489b58d 100644 --- a/mdk-stage1/newt-frontend.c +++ b/mdk-stage1/newt-frontend.c @@ -1,7 +1,7 @@  /* - * Guillaume Cottenceau (gc@mandrakesoft.com) + * Guillaume Cottenceau (gc)   * - * Copyright 2000 MandrakeSoft + * Copyright 2000 Mandriva   *   * This software may be freely redistributed under the terms of the GNU   * public license. @@ -24,6 +24,7 @@   * Each different frontend must implement all functions defined in frontend.h   */ +#define _GNU_SOURCE  #include <stdlib.h>  #include <unistd.h> @@ -31,21 +32,29 @@  #include <stdio.h>  #include <stdarg.h>  #include <sys/time.h> -#include "stage1.h" -#include "log.h" -#include "newt.h" +#include <newt.h> -#include "frontend.h" +#include <probing.h> +#include "frontend.h" -void init_frontend(void) +void init_frontend(char * welcome_msg)  { +	int i; +	for (i=0; i<38; i++) printf("\n");  	newtInit();  	newtCls(); -	 -	newtDrawRootText(0, 0, "Welcome to " DISTRIB_NAME " (" VERSION ") " __DATE__ " " __TIME__); -	 -	newtPushHelpLine(" <Alt-F1> for here, <Alt-F3> to see the logs, <Alt-F4> for kernel msg"); + +	if (welcome_msg[0]) { +		char *msg; +		int cols, rows; +		newtGetScreenSize(&cols, &rows); +		asprintf(&msg, " %-*s", cols - 1, welcome_msg); +		newtDrawRootText(0, 0, msg); +		free(msg); +		newtPushHelpLine(" <Alt-F1> for here, <Alt-F3> to see the logs, <Alt-F4> for kernel msg"); +	} +	newtRefresh();  } @@ -55,58 +64,48 @@ void finish_frontend(void)  } -void error_message(char *msg, ...) +void verror_message(char *msg, va_list ap)  { -	va_list args; -	va_start(args, msg); -	va_end(args); -	newtWinMessagev("Error", "Ok", msg, args); -	unset_param(MODE_AUTOMATIC); +	newtWinMessagev("Error", "Ok", msg, ap);  } -void info_message(char *msg, ...) +void vinfo_message(char *msg, va_list ap)  { -	va_list args; -	va_start(args, msg); -	va_end(args); -	if (!IS_AUTOMATIC) -		newtWinMessagev("Notice", "Ok", msg, args); -	else -		vlog_message(msg, args); +	newtWinMessagev("Notice", "Ok", msg, ap);  } -void wait_message(char *msg, ...) +void vwait_message(char *msg, va_list ap)  { -	int width = 8; -	int height = 3; +	int width, height;  	char * title = "Please wait...";  	newtComponent c, f; +	newtGrid grid;  	char * buf = NULL; +	char * flowed;  	int size = 0;  	int i = 0; -	va_list args; -	 -	va_start(args, msg);  	do {  		size += 1000;  		if (buf) free(buf);  		buf = malloc(size); -		i = vsnprintf(buf, size, msg, args); -		width += i; -	} while (i == size); -	 -	va_end(args); +		i = vsnprintf(buf, size, msg, ap); +	} while (i >= size || i == -1); + +	flowed = newtReflowText(buf, 60, 5, 5, &width, &height); -	newtCenteredWindow(width, height, title); +	c = newtTextbox(-1, -1, width, height, NEWT_TEXTBOX_WRAP); +	newtTextboxSetText(c, flowed); -	c = newtTextbox(1, 1, width - 2, height - 2, NEWT_TEXTBOX_WRAP); -	newtTextboxSetText(c, buf); -	f = newtForm(NULL, NULL, 0); +	grid = newtCreateGrid(1, 1); +	newtGridSetField(grid, 0, 0, NEWT_GRID_COMPONENT, c, 0, 0, 0, 0, 0, 0); +	newtGridWrappedWindow(grid, title); +	free(flowed);  	free(buf); +	f = newtForm(NULL, NULL, 0);  	newtFormAddComponent(f, c);  	newtDrawForm(f); @@ -125,7 +124,7 @@ static int size_progress;  static int actually_drawn;  static char * msg_progress; -void init_progression(char *msg, int size) +void init_progression_raw(char *msg, int size)  {  	size_progress = size;  	if (size) { @@ -144,7 +143,7 @@ void init_progression(char *msg, int size)  	}  } -void update_progression(int current_size) +void update_progression_raw(int current_size)  {  	if (size_progress) {  		if (current_size <= size_progress) @@ -167,7 +166,7 @@ void update_progression(int current_size)  	}  } -void end_progression(void) +void end_progression_raw(void)  {  	if (size_progress) {  		newtPopWindow(); @@ -178,52 +177,39 @@ void end_progression(void)  } -enum return_type ask_from_list_comments(char *msg, char ** elems, char ** elems_comments, char ** choice) +enum return_type ask_from_list_index(char *msg, char ** elems, char ** elems_comments, int * answer)  { -	char * items[50]; -	int answer = 0, rc; -	char ** sav_elems = elems; -	int i; +	char * items[50000]; +	int rc; -	i = 0; -	while (elems && *elems) { -		items[i] = malloc(sizeof(char) * (strlen(*elems) + strlen(*elems_comments) + 4)); -		strcpy(items[i], *elems); -		strcat(items[i], " ("); -		strcat(items[i], *elems_comments); -		strcat(items[i], ")"); -		i++; -		elems++; -		elems_comments++; +	if (elems_comments) { +	    int i; + +	    i = 0; +	    while (elems && *elems) { +		    int j = (*elems_comments) ? strlen(*elems_comments) : 0; +		    items[i] = malloc(sizeof(char) * (strlen(*elems) + j + 4)); +		    strcpy(items[i], *elems); +		    if (*elems_comments) { +			    strcat(items[i], " ("); +			    strcat(items[i], *elems_comments); +			    strcat(items[i], ")"); +		    } +		    elems_comments++; +		    i++; +		    elems++; +	    } +	    items[i] = NULL;  	} -	items[i] = NULL; -	rc = newtWinMenu("Please choose...", msg, 52, 5, 5, 7, items, &answer, "Ok", "Cancel", NULL); +	rc = newtWinMenu("Please choose...", msg, 52, 5, 5, 7, elems_comments ? items : elems, answer, "Ok", "Cancel", NULL);  	if (rc == 2)  		return RETURN_BACK; -	*choice = strdup(sav_elems[answer]); -  	return RETURN_OK;  } - -enum return_type ask_from_list(char *msg, char ** elems, char ** choice) -{ -	int answer = 0, rc; - -	rc = newtWinMenu("Please choose...", msg, 52, 5, 5, 7, elems, &answer, "Ok", "Cancel", NULL); - -	if (rc == 2) -		return RETURN_BACK; - -	*choice = strdup(elems[answer]); - -	return RETURN_OK; -} - -  enum return_type ask_yes_no(char *msg)  {  	int rc; @@ -240,7 +226,7 @@ enum return_type ask_yes_no(char *msg)  static void (*callback_real_function)(char ** strings) = NULL; -static void default_callback(newtComponent co, void * data) +static void default_callback(newtComponent co __attribute__ ((unused)), void * data)  {  	newtComponent * entries = data;  	char * strings[50], ** ptr; @@ -313,7 +299,7 @@ static int mynewtWinEntries(char * title, char * text, int suggestedWidth, int f  	for (i = 0; i < numItems; i++) {  		newtComponent entr = newtEntry(-1, -1, items[i].value ?   					       *items[i].value : NULL, dataWidth, -					       items[i].value, items[i].flags); +					       (const char**)items[i].value, items[i].flags);  		newtGridSetField(subgrid, 0, i, NEWT_GRID_COMPONENT,  				 newtLabel(-1, -1, items[i].text), @@ -367,7 +353,7 @@ enum return_type ask_from_entries(char *msg, char ** questions, char *** answers  	while (questions && *questions) {  		entries[i].text = *questions; -		entries[i].flags = NEWT_FLAG_SCROLL; +		entries[i].flags = NEWT_FLAG_SCROLL | (!strcmp(*questions, "Password") ? NEWT_FLAG_PASSWORD : 0);  		i++;  		questions++;  	} @@ -375,7 +361,7 @@ enum return_type ask_from_entries(char *msg, char ** questions, char *** answers  	entries[i].value = NULL;  	if (*answers == NULL) -		*answers = (char **) malloc(sizeof(char *) * i); +		*answers = (char **) calloc(1, sizeof(char *) * i);  	else  		already_answers = *answers; @@ -388,7 +374,7 @@ enum return_type ask_from_entries(char *msg, char ** questions, char *** answers  			*(entries[j].value) = NULL;  	} -	rc = mynewtWinEntries("Please fill entries...", msg, 52, 5, 5, entry_size, callback_func, entries, "Ok", "Cancel", NULL);  +	rc = mynewtWinEntries("Please fill in entries...", msg, 52, 5, 5, entry_size, callback_func, entries, "Ok", "Cancel", NULL);   	if (rc == 3)  		return RETURN_BACK; @@ -397,3 +383,7 @@ enum return_type ask_from_entries(char *msg, char ** questions, char *** answers  	return RETURN_OK;  } + + +void suspend_to_console(void) { newtSuspend(); } +void resume_from_suspend(void) { newtResume(); } | 
