if ( isdir(pagefile) )kde isdir je funkce definovan� v <www.h>. Pokud je to tedy adres��, p�ipoj� se na konec pagefile jm�no souboru, kter� m� b�t u�ivateli p�edlo�en v takov�m p��pad� (typicky index.html). V�sledkem je napln�n� prom�nn� pagefile jm�nem souboru, kter� m� b�t p�ek�dov�n a odesl�n u�ivateli.
Ukazatel b je nastaven tak, aby ukazoval na za��tek p��pony p�ekl�dan�ho souboru (resp. na znak za posledn� te�kou v n�zvu souboru).
Pole ext obsahuje typy (hodnoty HTTP hlavi�ky Content-Type), p�i�azen� p��pon�m, kter� maj� b�t k�dov�ny. Implicitn� se C-SaCzech star� jen o soubory s p��ponami html, htm (typ text/html) txt (typ text/plain) a cz (typ text/html). Chcete-li zm�nit sortiment zpracov�van�ch p��pon, mus�te na za��tku souboru csaczechXX.c zm�nit pole ext a znovu instalovat C-SaCzech.if ( ISEXT(b) )
M�-li p��pona souboru v poli ext p�i�azen typ, bude programem zpracov�na. V opa�n�m p��pad� (a tak� tehdy, pokud soubor nem� p��ponu) po�le procedura jako odpov�� klientovi p�esm�rov�n� (s vyu�it�m HTTP hlavi�ky Location) p��mo na soubor - vynech� z URL s�m sebe. Klient se po t�to odpov�di obr�t� znovu na WWW server s nov�m URL souboru, kter� ji� neobsahuje vol�n� k�duj�c�ho programu. To samoz�ejm� znamen� jist� zpo�d�n�. Sekvence dotaz-p�esm�rov�n�-dotaz-odpov�� je jist� pomalej�� ne� dotaz-odpov��. Ov�em zpo�d�n�, zp�soben� p�esm�rov�n�m a nov�m dotazem, je zpravidla zanedbateln� ve srovn�n� s p�epravn� dobou dokumentu.
Alternativn�m �e�en�m by bylo, aby program klientovi rovnou odpov�d�l a poslal mu soubor v p�vodn�m zn�n� beze zm�ny k�dov�n�. Tento p��stup m� dva velmi z�va�n� nedostatky.
Nejprve se pod�vejte na jeho z�v�r, kde najdete vol�n� procedury EncodeLine. To je j�dro cel�ho C-SaCzechu, zaji��uj�c� vlastn� zm�nu k�du. Je to vlastn� alias, ve skute�nosti se vol�while(fgets(buff, 512, fd )!=NULL)
cs_encode( XX, source, target )kde source je zdrojov� a target c�lov� k�dov�n�. Procedura cs_encode je definov�na v souboru <cstools.h>. D�l� to, �e si vytvo�� he�ovac� tabulku pro p�evod z jednoho k�du do druh�ho a potom postupn� p�evede ka�d� znak ze vstupn�ho �et�zce.
Vra�me se te� zp�t na za��tek t�la zpracov�vaj�c�ho cyklu. Jestli�e se na ��dku vyskytuje slovo CHARSET, provede se t�lo podm�n�n�ho p��kazu. V n�m se zaji��uj� dv� operace. ��dek
zajist� nahrazen� �et�zce __CHARSET__ jm�nem k�du, do kter�ho se dokument p�ev�d�.subs( buff, "__CHARSET__", TRUENAME(target) );
N�sleduje pas�, kter� umo��uje nastaven� v�choz�ho k�du. Program j� proch�z� jen v p��pad�, �e ��dek obsahuje �et�zece MYCHARSET. V tom p��pad� se zavol� procedura newsource, kter� zajist� korektn� p�e�ten� a rozpozn�n� n�zvu k�du, do kter�ho se chce dokument p�epnout. Jestli�e se jedn� o n�kter� ze jmen podporovan�ch k�d�, p�enastav� se prom�nn� source, jinak se nastav� zp�tky na default hodnotu.
kter� na z�klad� p��pony souboru vytvo�� hlavi�ku Content-Type s odpov�daj�c�m typem.for(i=0; i<4; i+=2) if ( !strcasecmp(extt, ext[i] ) ) break; printf( "Content-Type: %s\r\n", ext[i+1] ); printf( "\r\n" );
Jestli�e p�i instalaci byla zapnuta volba TIMESERVICES, je pr�ce procedury mnohem n�ro�n�j��. Na jej�m za��tku se napln� centr�ln� struktura buff vol�n�m funkce stat a struktura tmi �asem modifikace po�adovan�ho souboru.
N�sleduje (pokud jste to nezak�zali volbou IFMODIFIEDSINCE) podm�n�n� p��kaz, obsluhuj�c� podm�n�n� odesl�n� souboru. Jestli�e dotaz obsahoval HTTP hlavi�ku If-Modified-Since a soubor nen� nov�j��, odpov� program stavov�m k�dem 304 Not Modified a ukon�� svou �innost. V opa�n�m p��pad� pokra�uje norm�ln� d�l. ��st programu v t�le podm�n�n�ho p��kazu za��naj�c�ho
if ( g == a || b[3] == *a || &b[3] == g )zaji��uje p�evod �asov�ho �daje (m�l by rozezn�vat v�echny t�i tvary, povolen� podle RFC 1866, stejn� jako p�vodn� SaCzech ) na vnit�n� tvar, pou��van� C-SaCzechem.
Po hlavi�ce Content-Type pak skript vytvo�� je�t� Content-Length a Last-Modified podle �daj�, kter� z�skal na za��tku podprogramu p�i vol�n� stat.
Tato str�nka je sou��st� dokumentace programu C-SaCzech.