КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Листинr 3.8. Файл chapter3/validation/controls/controls. c
// ============================================== // Програма CGI controls.с //Одержання даних від форми і їхнє відображення в документі HTML, //утворюваному динамічно // // (С) Фролов А.В., 1997, 1998 // E-mail: [email protected] // WWW: http://www.glasnet.ru/~frolov // або // http://www.dials-ccas.ru/frolov #include <stdio.h> #include <stdlib.h> #include <string.h> //Прототипи функцій перекодування void DecodeStr(char *szString); char DecodeHex(char *str); //---------------------------------------------------- // Функція main // Точка входу програми CGI // --------------------------------------------------- void main(int argc, char *argv[]) { int lSize; FILE * fileReceived; char * szMethod; char szBuf[8196]; char szSrcBuf[8196]; char * szPtr; char * szParam; // Висновок заголовка HTTP і розділювального рядка printf("Content-type: text/html\n\n"); // Висновок початкового фрагмента документа HTML, // формованого динамічно printf("<!DOCTYPE HTML PUBLIC" " \"-//W3C//DTD HTML 3.2//EN\">"); printf("<HTML><HEAD><TITLE>User Registration" "</TITLE></HEAD><BODY BGCOLOR=#FFFFFF>"); // Визначаємо метод передачі даних szMethod = getenv("REQUEST_METHOD"); // Опрацювання методу POST if(!strcmp(szMethod, "POST")) // Визначаємо розмір даних, отриманих від браузера // при передачі даних із полів форми lSize = atoi(getenv("CONTENT_LENGTH")); // Читаємо ці дані в буфер szBuf із // стандартного потоку запровадження STDIN fread(szBuf, lSize, l, stdin); // Створюємо файл, у який будуть записані // прийняті дані fileReceived = fopen("received.dat", "w"); // Виконуємо запис прийнятих даних fwrite(szBuf, lSize, l, fileReceived); // Закриваємо файл прийнятих даних fclose(fileReceived); // Відображаємо значення деякий переменных середовища printf("<Н2>Перемінне середовище</Н2>"); // Метод доступу printf("REQUEST_METHOD = %s", getenv("REQUEST_METHOD")); // Розмір отриманих даних у байтах printf("<BR>CONTENT_LENGTH = %ld", ISize); // Тип отриманих даних printf("<BR>CONTENT_TYPE = %s", getenv("CONTENT_TYPE"));
// Закриваємо буфер даних двоичным нулем, // перетворюючи його в такий спосіб у рядок szBuf[lSize] = '\0'; // Робимо копію прийнятих даних у буфер szSrcBuf strcpy(szSrcBuf, szBuf); // Відображаємо прийняті дані без опрацювання printf("<Н2>Прийняті дані</Н2>"); printf("<P>%s", szSrcBuf); // Виконуємо перекодування прийнятих даних DecodeStr(szSrcBuf); // Відображаємо результат перекодування printf("<Н2>Дані після перекодування</Н2>"); printf("<P>%s", szSrcBuf); // Выводим список значень поляж форми printf("<Н2>Список значень поляж</Н2>"); // Дописуємо в кінець буфера прийнятих даних // символ &, що використовується в якості // роздільника значень поляж szBuf[lSize] = '&'; szBuf[lSize + 1] = '\0'; // Цикл по полях форми for(szParam = szBuf;;) { // Ищем черговий разделитель szPtr = strchr(szParam, '&'); // Якщо він знайдений, раскодируем рядок параметрів if(szPtr!= NULL) { *szPtr = '\0'; DecodeStr(szParam); // Выводим у документ значення параметра printf("%s<BR>", szParam); // Переходимо до такого параметра szParam = szPtr + 1; // Якщо досягнутий кінець буфера, завершуємо цикл if(szParam >= (szBuf + lSize)) break; } else break; } // Выводим завершальний фрагмент документа HTML printf("</BODY></HTML>"); return; } } // ---------------------------------------------------------------- // Функція DecodeStr // Раскодирование рядка з кодировки URL void DecodeStr(char *szString) { int src; int dst; char ch; // Цикл по рядку for(src=0, dst=0; szString[src]; src++, dst++) { // Одержуємо черговий символ перекодирует рядка ch = szString[src]; // Заміняємо символ "+" на прогалину ch = (ch =='+')? ' ': ch; // Сохраняем результат szString[dst] = ch; // Опрацювання шестнадцатеричных кодів виду "%хх" if(ch == '%') { // Виконуємо перетворення рядка "%хх" // у код символу szString[dst] = DecodeHex(&szString[src + 1]); src += 2; } } // Закриваємо рядок двоичным нулем szString[dst] = '\0'; // ------------------------------------------------------------ // Функція DecodeHex // Раскодирование рядка "%хх" char DecodeHex(char *str) { char ch; // Опрацьовуємо старший розряд if(str[O] >= 'A') ch = ((str[0] & Oxdf) - 'A') + 10;
else ch = str[O] - '0'; // Зрушуємо його вліво на 4 бита ch <<= 4; // Опрацьовуємо молодший розряд і складаємо // його зі старшим if(str[1] >= 'A') ch += ((str[1] & Oxdf) - 'А') + 10; else ch += str[l] - '0'; // Повертаємо результат перекодування return ch; }
Це спрощений варіант програми CGI, що описана в попередніх главах.. 3.5. Шестнадцатеричный калькулятор На мові сценаріїв JavaScript можна складати достатньо великі програми. Як приклад приведений вихідний текст сценарію, що виконує функції шестнадцатеричного калькулятора. Калькулятор створений у документі HTML як форма з двома текстовими полями і кнопками, розташованими в осередках таблиці. За допомогою кнопок 0 - F можна вводити шестнадцатеричные число, що будуть відображатися в текстовому полі Hex. У поле Dec знаходиться десяткове значення введеного шестнадцатеричного числа або результату обчислень. Кнопки +, -, * і / призначені відповідно для виконання операцій додавання, вирахування, множення і розподілу. За допомогою кнопки Enter можна одержати результат обчислень. Кнопка СЕ дозволяє стерти поточне введене число, а кнопка С - скинути проміжний результат обчислень і поточне введене число. Вихідний текст документа HTML із калькулятором поданий у листинге З.9.
Дата добавления: 2014-11-29; Просмотров: 379; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |