diff options
| author | Paul Richards <paul@FreeBSD.org> | 1995-01-30 02:41:29 +0000 | 
|---|---|---|
| committer | Paul Richards <paul@FreeBSD.org> | 1995-01-30 02:41:29 +0000 | 
| commit | 0d595e6acd57e9cadc2a1db0453ef7bd2c69f5a1 (patch) | |
| tree | 8104cfa8a2d39c88da1d4853f45a7db056097f1d /lib | |
| parent | 31892b894c5528a801ecf6a2883bdf29ee31a319 (diff) | |
Notes
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/libforms/examples/example.frm | 13 | ||||
| -rw-r--r-- | lib/libforms/forms.c | 85 | ||||
| -rw-r--r-- | lib/libforms/forms.h | 49 | ||||
| -rw-r--r-- | lib/libforms/internal.h | 24 | 
4 files changed, 118 insertions, 53 deletions
| diff --git a/lib/libforms/examples/example.frm b/lib/libforms/examples/example.frm index 542d9094572c..942bbbf3b8d8 100644 --- a/lib/libforms/examples/example.frm +++ b/lib/libforms/examples/example.frm @@ -1,5 +1,10 @@ +Colors example { +	pair = red, yellow +	pair = blue, white +} +  Field Title { -	attributes = A_BOLD +	attributes = COLOR_PAIR(2)  	text = "A Simple Demo"  } @@ -37,13 +42,13 @@ Field field7 {  Field field8 {  	width = 6 -	attributes = A_BOLD|A_REVERSE  	action = "EXIT"  	function = exit_form  }  Field field9 { -	attributes = A_BOLD|A_REVERSE +	attributes = COLOR_PAIR(1) +	highlight = COLOR_PAIR(1)|A_BOLD  	action = "CANCEL"  	function = cancel_form  } @@ -80,6 +85,8 @@ Link cancel as field9 {  Form example at 0,0 {  	height = 24  	width = 80 +	colortable = example +	attributes = COLOR_PAIR(1)  	Field Title  at  0,30 diff --git a/lib/libforms/forms.c b/lib/libforms/forms.c index b0b2acfaaf1d..ab7b17275148 100644 --- a/lib/libforms/forms.c +++ b/lib/libforms/forms.c @@ -1,24 +1,46 @@ -/* - * Copyright (c) 1995 Paul Richards.  +/*- + * Copyright (c) 1995 + *	Paul Richards.  All rights reserved.   * - * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer,  + *    verbatim and that no modifications are made prior to this  + *    point in the file. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + *    must display the following acknowledgement: + *	This product includes software developed by Paul Richards. + * 4. The name Paul Richards may not be used to endorse or promote products + *    derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY PAUL RICHARDS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL PAUL RICHARDS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE.   * - * This software may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file.  Under no circumstances is the author - * responsible for the proper functioning of this software, nor does - * the author assume any responsibility for damages incurred with - * its use.   */  #include <string.h>  #include <stdlib.h>  #include <ctype.h>  #include <forms.h> +#include <ncurses.h> +  #include "internal.h" -unsigned int keymap[] = { +unsigned int f_keymap[] = {  	KEY_UP,			/* F_UP */  	KEY_DOWN,		/* F_DOWN */  	9,			/* F_RIGHT */ @@ -28,8 +50,9 @@ unsigned int keymap[] = {  	KEY_RIGHT,		/* F_CRIGHT */  	KEY_HOME,		/* F_CHOME */  	KEY_END,		/* F_CEND */ -	263,		/* F_CBS */ -	330		/* F_CDEL */ +	263,			/* F_CBS */ +	330,			/* F_CDEL */ +	10			/* F_ACCEPT */  };  int done=0; @@ -39,7 +62,15 @@ initfrm(struct form *form)  {  	struct field *field = &form->field[0]; +	int i; +	if (has_colors()) { +		start_color(); +		if (form->color_table) +			for (i=0; form->color_table[i].f != -1; i++) { +				init_pair(i+1, form->color_table[i].f, form->color_table[i].b); +			} +	}  	cbreak();  	noecho(); @@ -52,6 +83,7 @@ initfrm(struct form *form)  	keypad(form->window, TRUE); +  	while (field->type != F_END) {  		if (field->type == F_INPUT) {  			field->field.input->input = malloc(field->field.input->limit); @@ -81,6 +113,7 @@ initfrm(struct form *form)  		form->no_fields++;  		field = &form->field[form->no_fields];  	} +	form->current_field = form->start_field;  	show_form(form);  	return (OK);  } @@ -104,12 +137,14 @@ endfrm(struct form *form)  int  update_form(struct form *form)  { +	int selattr;  	show_form(form);  	if (form->current_field == -1)  		return (F_CANCEL); +	wattrset(form->window, form->field[form->current_field].selattr);  	switch (form->field[form->current_field].type) {  		case F_MENU:  			field_menu(form); @@ -125,6 +160,7 @@ update_form(struct form *form)  			print_status("Error, current field is invalid");  			return (F_CANCEL);  	} +	wattrset(form->window, 0);  	return (done);  } @@ -133,9 +169,15 @@ static void  show_form(struct form *form)  {  	int i; +	int y, x; + +	wattrset(form->window, form->attr); +	for (y = 0; y < form->height; y++) +		for (x = 0; x < form->width; x++) +			mvwaddch(form->window, y, x, ' ');  	for (i=0; i < form->no_fields; i++) { -		wattrset(form->window, 0); +		wattrset(form->window, form->field[i].attr);  		wmove(form->window, form->field[i].y, form->field[i].x);  		switch (form->field[i].type) {  			case F_TEXT: @@ -155,6 +197,7 @@ show_form(struct form *form)  				break;  		}  	} +	wattrset(form->window, 0);  	wrefresh(form->window);  } @@ -164,8 +207,6 @@ disp_text(struct form *form, int index)  	struct field *field = &form->field[index]; -	wattron(form->window, field->attr); -  	if (print_string(form->window, field->y, field->x,  	             field->width, field->field.text->text) == ERR)  		print_status("Illegal scroll in print_string"); @@ -177,8 +218,6 @@ disp_input(struct form *form, int index)  	struct field *field = &form->field[index]; -	wattron(form->window, field->attr); -  	if (field->field.input->lbl_flag) {  		if (print_string(form->window, field->y, field->x,  						 field->width, field->field.input->label) == ERR) @@ -187,7 +226,6 @@ disp_input(struct form *form, int index)  		if (print_string(form->window, field->y, field->x,  						 field->width, field->field.input->input) == ERR)  			print_status("Illegal scroll in print_string"); -		  }  static void @@ -195,8 +233,6 @@ disp_menu(struct form *form, int index)  {  	struct field *field = &form->field[index]; -	wattron(form->window, field->attr); -  	if (print_string(form->window, field->y, field->x,  			field->width,  			field->field.menu->options[field->field.menu->selected]) == ERR) @@ -208,14 +244,10 @@ disp_action(struct form *form, int index)  {  	struct field *field = &form->field[index]; - -	wattron(form->window, field->attr); -  	if (print_string(form->window, field->y, field->x,  				field->width,  				field->field.action->text) == ERR)  		print_status("Illegal scroll in print_string"); -  }  static void @@ -226,7 +258,6 @@ field_action(struct form *form)  	int ch;  	for (;;) { -		wattron(form->window, F_SELATTR);  		disp_action(form, form->current_field);  		wmove(form->window, field->y, field->x);  		ch = wgetch(form->window); @@ -247,7 +278,6 @@ field_menu(struct form *form)  	int ch;  	for (;;) { -		wattron(form->window, F_SELATTR);  		disp_menu(form, form->current_field);  		wmove(form->window, field->y, field->x);  		switch (ch = wgetch(form->window)) { @@ -367,7 +397,6 @@ field_input(struct form *form)  #define CURSPOS ((len < field->width) ? len : field->width)  	len = strlen(field->field.input->input); -	wattron(form->window, F_SELATTR);  	disp_input(form, form->current_field);  	cursor = CURSPOS; diff --git a/lib/libforms/forms.h b/lib/libforms/forms.h index 7b1bbf4da371..094ca7a2027d 100644 --- a/lib/libforms/forms.h +++ b/lib/libforms/forms.h @@ -1,15 +1,35 @@ -/* - * Copyright (c) 1995 Paul Richards.  +/*- + * Copyright (c) 1995 + *	Paul Richards.  All rights reserved.   * - * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer,  + *    verbatim and that no modifications are made prior to this  + *    point in the file. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + *    must display the following acknowledgement: + *	This product includes software developed by Paul Richards. + * 4. The name Paul Richards may not be used to endorse or promote products + *    derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY PAUL RICHARDS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL PAUL RICHARDS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE.   * - * This software may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file.  Under no circumstances is the author - * responsible for the proper functioning of this software, nor does - * the author assume any responsibility for damages incurred with - * its use.   */  #include <ncurses.h> @@ -26,14 +46,22 @@  #define F_DONE 1  #define F_CANCEL -1 +struct col_pair { +	int f; +	int b; +}; +  struct form {  	int no_fields; +	int start_field;  	int current_field;  	struct field *field;  	int height;  	int width;  	int y;  	int x; +	int attr; +	struct col_pair *color_table;  	WINDOW *window;  }; @@ -68,6 +96,7 @@ struct field {  	int x;  	int width;  	int attr; +	int selattr;  	int next;  	int up;  	int down; diff --git a/lib/libforms/internal.h b/lib/libforms/internal.h index 2a8178e662ce..b7bdb1e04ebd 100644 --- a/lib/libforms/internal.h +++ b/lib/libforms/internal.h @@ -12,18 +12,18 @@   * its use.   */ -#define F_UP		keymap[0] -#define F_DOWN		keymap[1] -#define F_RIGHT	keymap[2] -#define F_LEFT		keymap[3] -#define F_NEXT		keymap[4] -#define F_CLEFT	keymap[5] -#define F_CRIGHT	keymap[6] -#define F_CHOME	keymap[7] -#define F_CEND		keymap[8] -#define F_CBS		keymap[9] -#define F_CDEL		keymap[10] -#define F_ACCEPT	F_NEXT +#define F_UP		f_keymap[0] +#define F_DOWN		f_keymap[1] +#define F_RIGHT		f_keymap[2] +#define F_LEFT		f_keymap[3] +#define F_NEXT		f_keymap[4] +#define F_CLEFT		f_keymap[5] +#define F_CRIGHT	f_keymap[6] +#define F_CHOME		f_keymap[7] +#define F_CEND		f_keymap[8] +#define F_CBS		f_keymap[9] +#define F_CDEL		f_keymap[10] +#define F_ACCEPT	f_keymap[11]  /* Private function declarations */  static void show_form(struct form *); | 
