Студопедия

КАТЕГОРИИ:


Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.