あ伊藤です.
あるページで<select>の数が100を越えていて(私が作ったページ
なんだ,これが),Too many select in one page になってしまい
ました.ちょっと悲しかったので,1ページ内の select と,
ついでに textarea の制限をなくしてみました.
--
山形大学工学部 情報科学科 伊藤 彰則
Akinori Ito, Dr.Eng.
Department of Informatics, Faculty of Engineering
Yamagata University
tel&fax: 0238-26-3369 E-mail: aito@eie.yz.yamagata-u.ac.jp
--- file.c.org Wed Mar 28 17:51:31 2001
+++ file.c Fri Apr 6 09:28:58 2001
@@ -59,16 +59,18 @@
static int cur_status;
#ifdef MENU_SELECT
/* menu based <select> */
-FormSelectOption select_option[MAX_SELECT];
+FormSelectOption *select_option;
+static int max_select = MAX_SELECT;
static int n_select;
static int cur_option_maxwidth;
#endif /* MENU_SELECT */
static Str cur_textarea;
-Str textarea_str[MAX_TEXTAREA];
+Str *textarea_str;
static int cur_textarea_size;
static int cur_textarea_rows;
static int n_textarea;
+static int max_textarea = MAX_TEXTAREA;
static int http_response_code;
@@ -2372,7 +2374,7 @@
select_is_multiple = parsedtag_exists(tag, ATTR_MULTIPLE);
#ifdef MENU_SELECT
- if (!select_is_multiple && n_select < MAX_SELECT) {
+ if (!select_is_multiple) {
#ifdef NEW_FORM
select_str = Sprintf("<pre_int>[<input_alt hseq=\"%d\" "
"fid=\"%d\" type=select name=\"%s\" selectnumber=%d",
@@ -2401,15 +2403,22 @@
return NULL;
process_option();
#ifdef MENU_SELECT
- if (!select_is_multiple && n_select < MAX_SELECT) {
+ if (!select_is_multiple) {
if (select_option[n_select].first)
Strcat(select_str, textfieldrep(chooseSelectOption(
select_option[n_select].first, CHOOSE_OPTION),
cur_option_maxwidth));
Strcat_charp(select_str, "</input_alt>]</pre_int>");
n_select++;
- if (n_select == MAX_SELECT) {
+ if (n_select == max_select) {
+ FormSelectOption *p = select_option;
+ int n = max_select*2;
+ select_option = New_N(FormSelectOption,n);
+ bcopy(p,select_option,max_select*sizeof(FormSelectOption));
+ max_select = n;
+/*
disp_err_message("Too many select in one page", FALSE);
+*/
}
} else
#endif /* MENU_SELECT */
@@ -2498,7 +2507,7 @@
if (cur_option_label == NULL)
cur_option_label = cur_option;
#ifdef MENU_SELECT
- if (!select_is_multiple && n_select < MAX_SELECT) {
+ if (!select_is_multiple) {
if (cur_option_label->length > cur_option_maxwidth)
cur_option_maxwidth = cur_option_label->length;
addSelectOption(&select_option[n_select],
@@ -2536,6 +2545,16 @@
n_selectitem++;
}
+static void
+expand_textarea_str()
+{
+ Str *s = textarea_str;
+ int n = max_textarea;
+ max_textarea *= 2;
+ textarea_str = New_N(Str,max_textarea);
+ bcopy(s,textarea_str,n*sizeof(Str));
+}
+
Str
process_textarea(struct parsed_tag * tag, int width)
{
@@ -2556,8 +2575,9 @@
cur_textarea_size = 40;
cur_textarea_rows = atoi(r);
- if (n_textarea < MAX_TEXTAREA)
- textarea_str[n_textarea] = Strnew();
+ if (n_textarea >= max_textarea)
+ expand_textarea_str();
+ textarea_str[n_textarea] = Strnew();
return NULL;
}
@@ -2567,7 +2587,7 @@
{
Str tmp;
- if (cur_textarea == NULL || n_textarea >= MAX_TEXTAREA)
+ if (cur_textarea == NULL || n_textarea >= max_textarea)
return NULL;
#ifdef NEW_FORM
@@ -2584,11 +2604,13 @@
Strcat(tmp, textfieldrep(textarea_str[n_textarea], cur_textarea_size));
Strcat_charp(tmp, "</u></input_alt>]</pre_int>");
n_textarea++;
- if (n_textarea == MAX_TEXTAREA) {
+ if (n_textarea == max_textarea) {
+ expand_textarea_str();
+/*
disp_err_message("Too many textarea in one page", FALSE);
+*/
}
- else
- textarea_str[n_textarea] = Strnew();
+ textarea_str[n_textarea] = Strnew();
cur_textarea = NULL;
return tmp;
@@ -2597,17 +2619,15 @@
void
feed_textarea(char *str)
{
- if (n_textarea < MAX_TEXTAREA) {
- while (*str) {
- if (*str == '&')
- Strcat_charp(textarea_str[n_textarea], getescapecmd(&str));
- else if (*str == '\n') {
- Strcat_charp(textarea_str[n_textarea], "\r\n");
- str++;
- }
- else
- Strcat_char(textarea_str[n_textarea], *(str++));
+ while (*str) {
+ if (*str == '&')
+ Strcat_charp(textarea_str[n_textarea], getescapecmd(&str));
+ else if (*str == '\n') {
+ Strcat_charp(textarea_str[n_textarea], "\r\n");
+ str++;
}
+ else
+ Strcat_char(textarea_str[n_textarea], *(str++));
}
}
@@ -4717,8 +4737,12 @@
n_textarea = 0;
cur_textarea = NULL;
+ max_textarea = MAX_TEXTAREA;
+ textarea_str = New_N(Str,max_textarea);
#ifdef MENU_SELECT
n_select = 0;
+ max_select = MAX_SELECT;
+ select_option = New_N(FormSelectOption,max_select);
#endif /* MENU_SELECT */
cur_select = NULL;
form_sp = -1;
--- form.c.org Fri Apr 6 10:20:07 2001
+++ form.c Fri Apr 6 10:19:33 2001
@@ -16,9 +16,9 @@
#define lstat stat
#endif /* __EMX__ */
-extern Str textarea_str[];
+extern Str *textarea_str;
#ifdef MENU_SELECT
-extern FormSelectOption select_option[];
+extern FormSelectOption *select_option;
#include "menu.h"
#endif /* MENU_SELECT */
--- form.h.org Fri Mar 23 10:49:53 2001
+++ form.h Fri Apr 6 10:27:15 2001
@@ -32,10 +32,10 @@
#define FORM_ENCTYPE_URLENCODED 0
#define FORM_ENCTYPE_MULTIPART 1
-#define MAX_TEXTAREA 100 /* max number of * <textarea>..</textarea>
+#define MAX_TEXTAREA 10 /* max number of * <textarea>..</textarea>
* within one * document */
#ifdef MENU_SELECT
-#define MAX_SELECT 100 /* max number of <select>..</select> *
+#define MAX_SELECT 10 /* max number of <select>..</select> *
* within one document */
#endif /* MENU_SELECT */
[Next]