This page is part of documentation of C-SaCzech and was created and has been maintained by Jaromír Doleček, dolecek@ics.muni.cz

C-SaCzech 1.3.1


 

Autor: Jára Doleček, dolecek@fi.muni.cz
Datum poslední změny:   16. února 1997

C-SaCzech je zkratka vzniknuvší z C a SaCzech, a znamená C-Satrapa's Czech (tedy Céčkovská Satrapova čeština) Jako jméno se ujalo kratší a výstižné "CSáček".

Jedná se program, který umožňuje změnu kódování WWW dokumentů "on fly" podle přání uživatele. Stránky jsou uloženy v určitém typu kódování (ne nutně jednom) a CSáček je během odesílání uživateli změní tak, aby je klient dokázal správně zobrazit.

Proč verze v jazyce C, když původní sáček skvěle funguje ? Především proto, že verze v Perlu byla na můj vkus trochu pomalá. Moje myšlenka byla, že něco, co bude používat často hodně lidí, má být co nejefektivnější, nejrychlejší a málo náročné na systémové zdroje.
A tak vznikl C-SaCzech 1.0, jako potomek SaCzechu 2.0. Jeho pozdější verze s sebou přinesly mnohá rozšíření, takže není zaručena zpětná kompatibilita nově vytvořených stránek. Staré stránky budou fungovat bez potíží. S novými verzemi SaCzechu se C verze snaží držet krok, což se zatím daří.

CSáček by asi nevznikl bez páně Pavla Satrapy, jehož SaCzech byl předlohou při vytváření tohoto programu. Nikdy by taky nebyl tak dobrý jako je nyní bez podnětných připomínek a pomoci mnohých dalších lidí, z nichž bych chtěl asi nejvíce poděkovat Hynkovi Medovi.

CSáček je možno stáhnout na ftp serveru ftp://ftp.muni.cz/pub/localization/WWW/csacek/.

Ve Zpravodaji ÚVT vyšlo krátké povídání o tom, co CSáček 1.3 umí a jak se to používá.

I když byl dán CSáček k téměř volnému použití, přesto platí jisté licenční podmínky. Prosím přečtěte si je dřív než budete CSáček používat.

 


Dokumentace


Máte-li připomínky k programu, zjistili jste nějaké chyby nebo máte námět na vylepšení, můžete mě kontaktovat na mé e-mailové adrese. Pokud dáváte přednost s-mejlu, tak má adresa na ÚVT:
Jaromír Doleček
ÚVT MU
Botanická 68a
Brno
60200

Rád bych viděl, jak se CSáček šíří, budu potěšen, pokud byste mi napsali krátkou zprávu na adresu dolecek@ics.muni.cz, jestliže jej budete používat.


Pokud se tato stránka už prochází přes CSáček a chcete číst v jiném kódování češtiny, vyberte si z lišty, která se vypíše pod nápisem Výběr kódování:

Výběr kódování:
 


Licence

Upozornění:
Program C-SaCzech je dodáván zcela bez záruk. Autor neručí za jakékoli škody, vzniklé jeho používáním. Zdůrazňuji - autor je zříká VEŠKERÉ ODPOVĚDNOSTI za škody vzniklé přímým či nepřímým používáním CSáčku či kterékoli jeho součásti.

Copyright

CSáček či jeho libovolné části (jako public domain) můžete volně používat ve zdrojové i binární formě, pro soukromou potřebu, výuku, tak i na komerčních serverech. Je dán k všeobecnému užití v podmínkách upravené BSD licence:
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.
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 Jaromir Dolecek, 
	Institute of Computer Science, Masaryk University, Brno
	and contributors
4. Neither the name of Jaromir Dolecek nor the names of ICS MU
   may be used to endorse or promote products derived from this software
   without specific prior written permission.
5. On page, where users choose their encoding (normally the one
   generated by whichcode script) will be text:
        Coded by C-SaCzech.
   and link to program's home page (http://www.ics.muni.cz/~dolecek/c-saczech/)


THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 THE AUTHOR OR CONTRIBUTORS 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.

Pro uživatele to znamená, že jakákoli redistribuce musí obsahovat soubor LICENSE a jakýkoli reklamní materiál hovořící o výhodách a vlastnostech CSáčku či odvozeného software musí jednoznačně říct, že tento produkt obsahuje software vyvinutý Jaromírem Dolečkem, ÚVT MU a jeho následníky. Ani moje jméno, ani jméno Ústavy výpočetní techniky MU nesmí však být použito ke schválení nebo podpoře jakýchkoli odvozených produktů bez písemného povolení od autora nebo ÚVT MU.
Při redistribuci či konečném nasazení na server pak na stránce, nabízející volbu kódování (v původní distribuci generována skriptem whichcode), zůstane zachována informace o tom, že změna kódování je realizována programem C-SaCzech, a odkaz na domácí stránku programu (http://www.ics.muni.cz/~dolecek/c-saczech/).

Zpět  


Proč vznikl ?

Uvědomuji si, že již existují velmi kvalitní programy pro konverzi kódování na WWW - ať už je to WWWdia pana J.Košťála nebo program SaCzech od p. Pavla Satrapy, který byl vzorem i pro tento program.

WWWdia mě osobně připadá až příliš náročný na instalaci (ani po houževnatém asi 2 hodinovém úsilí se mi ho nepodařilo dostat do použitelné běhající verze) a zbytečně komplexní a složitý. SaCzech se mi od prvního pohledu líbil, ale postupem času mi začalo vadit, že odezva s použitím překódování byla výrazně pomalejší než bez něj. A proto jsem se rozhodl napsat nějakou rychlejší verzi, a protože algoritmus překódovávání asi výrazně zlepšit už nelze, zvolil jsem nižší programovací jazyk - C.

Bylo (a stále je) s CSáčkem mnoho práce, ale záměr je splněn - CSáček funguje a je výrazně čipernější než SaCzech.

C-SaCzech 1.3.1 nabízí

C-SaCzech postrádá

 

Budoucnost ...

Zdá se, že se CSáček zalíbil mnoha lidem a je používán. Dokonce se našli lidé, kterým stálo za to udělat port na jiný operační systém. Nejdříve to byly NT. Pan Zdeněk Pokorný jej vytvořil z CSacku 1.23. Jeho funkčnost byla omezena na metodu file. Pan Martin Bílý začal pracovat na portu CSáčku 1.23 pro OpenVMS. na serveru http://cs.felk.cvut.cz/ je CSáček pro OpenVMS úspěšně používán. Domácí stránka tohoto portu je na adrese http://cs.felk.cvut.cz/c-saczech/.

A co čeká CSáček do budoucna ? Je nyní zkompilovatelný "out of box" pro Unix i NT, hodilo by se něco takového udělat i pro OpenVMS port.
Dále je třeba silně pročistit kód, hodila by se podpora Unicode, možná také emulace některých jiných oblíbených kodérů. A pokud se naskytne něco dalšího, co se mi bude zdát užitečné, bude umět snad i něco dalšího.

ZPET Zpět  


Instalace

CSáček je udělán tak, aby byl pokud možno co nejjednodušší na instalaci a údržbu. Od verze 1.3 byly rozděleny zdrojové soubory tak, aby byl pokud možno portovatelný. V 1.3.1 bylo oddělení OS dependant/independant věcí dotaženo do konce a NT verzi je možno zkompilovat ze stejných zdrojáků.

Distribuce zdrojového kódu programu je uložena v souboru csaczech-XXX.tar.gz (kde XXX je označení verze), který můžete získat na URL

ftp://ftp.muni.cz/pub/localization/WWW/csacek/
Zde se nalézá CSáček ve formě zagzipovaného taru i jako zip archiv. Podle gusta a platformy lze použít libovolnou z těchto dvou verzí. Tar lze rozbalit použitím příkazu
gunzip < csaczechXX.tar.gz | tar xvf -
pokud máte GNU tar stačí
tar xvzf csaczechXX.tar.gz
zip pak standardně pomocí programu unzip, pkunzip či kteréhokoli jiného, který jej zvládne. Soubory budou rozbaleny do podadresáře csaczech-XX. Nyní následuje fáze přizpůsobení vašim konkrétním podmínkám. Po krátkém období laškování s GNU configure jsem se rozhodl přece jen používat pouze Makefile. Jednou, až budu mít něco přebytečného času, tak si možná s autokongirací CSáčku pohraju, ale nyní mám jinou zábavu.
Konfigurace tedy spočívá v upravení hlavičkového souboru config.h a úpravě souboru Makefile. Defaultní Makefile je unixový, pokud budete kompilovat pod NT, je třeba nejdříve překopírovat Makefile.NT na Makefile. NT Makefile byl vytvořen z defaultního Makefile udělaný MS VC++ 4.2. Jiné NT kompilátory by mu však měly bez větších potíží rozumět.

Je třeba nastavit potřebné proměnné tak, aby vše odpovídalo vašemu systému a záměrům. Některé proměnné (např.SHELL) v NT Makefajlu nejsou, protože jsou silně unixově orientované a většinou slouží pro generování skriptu whichcode.

Níže je uveden přehled proměnných a voleb, kterými můžete určit chování budoucího CSáčku. Pokud Vám vyhovuje standardní nastavení nebo jsou pro vás dostatečné popisy přímo v souborech config.h a Makefile, můžete tuto část pohodlně přeskočit. Proměnné jsou v pořadí,v jakém je najdete v příslušných souborech.  

Proměnné ovlivňující chování budoucího C-SaCzechu (nastavuje se v config.h):
SEPARATOR
Znak, který chcete použít jako oddělovač jmen souborů v DEFAULTFILE.
Default - ,
DEFAULTFILE
Seznam souborů, které se zobrazí, jestliže je zadán pouze adresář. Nejrozumnější je, pokud je stejný jako seznam jmen za DirectoryIndex v konfiguračním souboru pro httpd. Použije se pouze při volání metodou file, popř. guess.
Default - "index.html,index.cgi,index.htm,welcome.html,Welcome.html,default.htm".
HTTP_SUFFIXES
Jestliže přijde požadavek o překódování dokumentu s příponou uvedenou v tomto seznamu, dokument se nevyzvedává z filesystému, ale použije se metoda http.
Default - ".shtml,.phtml,.idc,.asp,.pl".
CGIPATH
Cesta k CGI skriptům. Obsahem této proměnné by měl být začátek cesty (část uváděná bezprostředně za jménem serveru) ke konverzním skriptům, která se uvádí v odkazech. Jestliže konverzní skripty uložíte do obecného adresáře, obsahujícího ostatní CGI skripty a budete se na ně odkazovat pomocí URL
http://www.kdesi.cz/cgi-bin/toASCII
můžete ponechat implicitní hodnotu "/cgi-bin". Je třeba uvést celou cestu, bez závěrečného lomítka. Tato hodota se používá při metodě guess k určení, zda požadovaný dokument je cgi skipt.
Default - /cgi-bin
CGISUFFIX
Přípona CGI skirptů. Pokud váš server vyžaduje, aby CGI skripty byly vyznačovány určitou konkrétní příponou (nejčastěji .cgi), uveďte ji jako hodnotu této proměnné. Je-li server dostatečně inteligentní na to, aby poznal CGI skript podle cesty, doporučuji ponechat jako hodnotu proměnné prázdný řetězec.
Default - nenastaveno.
DEFSOURCE
Implicitní kódování zdrojových textů stránek. Zde uveďte kódování, ve kterém bude pravděpodobně vytvořena většina Vašich stránek. Jestliže si stránka nepředepíše zdrojový kód, bude jako výchozí pro její překódování použit tento kód. Platné názvy kódů zjistíte prohlédnutím souboru nazvy nebo (lépe) cstools.h. Nedělá se rozdíl mezi velkými a malými písmeny.
Default - ISO-8859-2.
Metoda kódování
Způsob, kterým má C-SaCzech získávat kódované texty. Můžete si vybrat jednu z následujících alternativ (musí být vypsáno malými písmeny):
file
Soubory budou vyzvedávány přímo ze systému souborů počítače. Tento způsob je efektivní a rychlý, ale umožňuje kódovat jen texty, které jsou přítomny v podobě souborů. Nelze např. kódovat výstupy z CGI skriptů.

http
V tomto režimu práce C-SaCzech získává kódované dokumenty od svého serveru prostřednictvím HTTP protokolu. Tedy zahraje si na WWW klienta, odstraní své vlastní jméno z dotazu, který mu byl položen, a položí serveru tento modifikovaný dotaz. Data, která získá jako odpověď, posoudí a buď překóduje (jestliže se jedná o text, přesněji MIME typ text/html nebo text/plain) nebo propustí beze změny.

Tento způsob je podstatně méně efektivní (obsloužení každého dotazu vyvolává jeden dotaz navíc), umožňuje však překódovat vše, co je na serveru k dispozici - včetně výstupů z CGI skriptů.

Zvolíte-li tuto variantu, nemá žádný význam nastavení proměnné DEFAULTFILE a příznaků TIMESERVICES a IFMODIFIEDSINCE.

guess
C-SaCzech se pokusí automaticky určit pro každý dotaz, kterou z výše uvedených metod má použít. Využívá k tomu hodnotu proměnné CGIPATH a CGISUFFIX. Použije se metoda http, jestliže je začátek cesty ke kódované informaci (část URL, uvedená za voláním skriptu) shodný s CGIPATH, obsahuje CGISUFFIX, dokument má jednu z přípon uvedených v HTTP_SUFFIXES nebo v některém adresáři obsaženém v proměnné prostředí PATH_TRANSLATED se nachází soubor s názvem uvedeným v SECURE. V opačném případě jej vyzvedne přímo ze systému souborů.

Metoda guess se tedy snaží o rozumný kompromis mezi předchozími alternativami.

Default - guess.
TIMESERVICES
Jedná se o první z příznaků. Jestliže je definována, znamená to, že se lze spolehnout výsledky funkce stat programovacího jazyka C, kterou C-SaCzech využívá pro získání informací o velikosti a době vzniku souboru.
Default - nastaveno.
IFMODIFIEDSINCE
Má skript reagovat na hlavičku If-Modified-Since? Pokud vámi používaný server nepředává CGI skriptům informace z HTTP hlaviček dotazu (v proměnných prostředí HTTP_hlavička), nedostává C-SaCzech potřebné informace. V takovém případě volbu vypněte.
Default - nastaveno.
SECURE
Pokud je definováno, otestuje se, zda v některém adresáři z PATH_TRANSLATED není soubor omezující přístup a sloužící většinou k autorizaci přístupu. Jméno souboru, který se takto používá záleží na tom, jaký httpd funguje na Vašem serveru, případné dotazy na to, jaký to je, směrujte na Vašeho systémového administrátora.
Default - ".htaccess"
DECODEQUERY
Definujte tuto proměnnou, pokud chcete, aby C-SaCzech překódovával i parametr z příkazové řádky.
Default - nenastaveno.
ADDBAR
Pokud je nastavena tato proměnná, C-SaCzech bude reagovat na text <!--BAR--> (popř.<!--BAR E-->) tak, že v daném místě vypíše text, umožňující změnu kódování dokumentu; podle toho, která varianta je použita, doplní buď českou hlavičku a závěr (obsah proměnných HEADBARTEX a TAILBARTEXT), nebo anglický (EHEADBARTEX a ETAILBARTEXT).
Default - nastaveno.
ALLWAYSADDBAR
Pokud je tato proměnná nastavena, C-SaCzech vypíše lištu vždy; pokud text neobsahuje řetězec <!--BAR-->, vypíše ji na konci dokumentu. Samozřejmě pouze tehdy, pokud daný dokument překódovává (takže obrázky jsou v pohodě) nebo se nejedná pouze o chybové hlášení.
Default - nenastaveno.
LONGNAMEBAR
Pokud je nastavena, v nabídce kódování se zobrazí celá jména kódů a ne pouze trojpísmenné zkratky.
Default - nenastaveno.
HEADBARTEXT, EHEADBARTEXT
Text, který se vypíše před lištu s nabídkou překódování. HEADBARTEXT se vypíše v české verzi, EHEADBARTEXT v anglické.
Default - viz defaultni config.h.
TAILBARTEXT, ETAILBARTEXT
Text, který se vypíše za lištu s nabídkou překódování. Standartně je to "<HR>", tedy vodorovná linka. Opět TAILBARTEXT je pro českou lištu, ETAILBARTEXT pro anglickou.
Default - "<HR>".
ADDWHICHCODE
Pokud je nastavena, v automaticky generované nabídce kódování se zobrazí i obsah proměnné BARWHICHCODENAME, který bude odkazem na volbu pomocí standartního whichcode. Má smysl pouze tehdy, pokud je nastaveno ADDBAR . Specifický pro Unix. Na NT doporučuji nedefinovat (skript whichcode zde není použitelný).
Default - nastaveno.
BARWHICHCODENAME
Text, který se vypíše do lišty. Specifický pro Unix.
Default - "whichcode".
MULTIPART
Nastavením této proměnné bude zkompilovaný C-SaCzech podporovat více různých dokumenů v jednom dokumentu; jak to funguje se můžete podívat na tento příklad. C-SaCzech bude reagovat na <--PART XXXXX--> odpovídajícím tak, že podle názvu zjistí, zda má danou část vypsat (pokud byl spuštěn jako např. toASCII.eng.cgi, bude vypisovat části <--PART eng-->).
Dále lze měnit obsah dokumentu podle domény či IP adresy stroje, odkud vzdálený uživatel přistupuje. Sytax viz DOMAIN, používá se podobným způsobem jako PART, adresu je možno zadat v doménovém tvaru i jako čisté IP. Jako "doménu" lze zapsat samozřejmě zapsat i plné jméno stroje.
Default - nastaveno.
RESTRICTDOMAINS
Od 1.3.1 sloučeno dohromady s Default - nastaveno.
STATUSHACK
Některé httpd (např. NCSA httpd, Apache httpd) mají problémy s parsováním hlavičky dokumentu, jestliže se v části Status: uvede i typ serveru (tzn. předává se i HTTP/1.0). Pokud definujete tuto proměnnou, status se předává tak, aby první uvedený text za "Status:" bylo číslo.
Tuto proměnnou se doporučuje definovat.
Default - nastaveno.
CSACEKFILTERS
CSáček filtry nadále (od verze 1.3.1) nejsou podporovány.
LOCALHOSTHACK
Pokud je definováno, CSáček se místo se serverem uvedeným v proměnné prostředí SERVER_NAME kontaktuje s počítačem na kterém byl spuštěn. V drtivé většině případů se jedná o tentýž stroj, takže je to korektní. Spojení se ale takto naváže rychleji a také komunikace by měla být rychlejší (nebylo testováno). CSáček se pokusí navázat spojení na IP adresu 127.0.0.1 což je speciální adresa, která se používá na spojení se stejným počítačem jako proces běží. Definováním tohoto příznaku většinou nic neztratíte (když nepomůže aspoň neuškodí ;-).
Default - nastaveno.
CSACEK_REPORT
Pokud nastavíte tento příznak, CSáček vypíše svoji konfiguraci, pokud mu jako query podstrčíte parametr csacek_report nebo csacek_info. Celkem užitečné (aspoň se dá kdykoliv zjistit, co momentální verze umí a co ne).
Default - nastaveno.
CSACEK_BANNER
Pokud je definováno, CSáček na začátek dokumentů, které kóduje, napíše krátké info, že to udělal. Pokud vám to vyloženě vadí, můžete to samozřejmě zakázat.
Default - nastaveno.
CSACEK_HELP
Jestliže je definováno a dáte CSáčku parametr ?csacek_help, CSáček vygeneruje krátkou stránku s popisem příkazů, které podporuje.
Default - nastaveno.
REDIRECT_IF_URL_IS_DIR
Pokud bylo zadáno URL ukazující na adresář, je vhodné (kvůli následným reltivním odkazům), aby končilo na /. Pokud to tak není, CSáček přesměruje klienta na správné URL končící na lomítko. Vyzkoušeno a funguje (zdá se) bez problémů. Celkem asi neexistuje důvod proč to zakázat, ale pro jistotu je ta možnost.
Default - nastaveno.
CSACEK_HOMEPAGE
Jestliže je definováno a dáte CSáčku parametr ?csacek_homepage, CSáček přesměruje klienta na domácí stránku programu.
Default - nastaveno.

Proměnné používané pouze v čase kompilace (soubor Makefile):
CC
Tato proměnná obsahuje jméno kompilátoru, který bude použit pro vytvoření spustitelného C-SaCzechu. cc je standartní a programy jím zkompilované by měly běžet bez problémů. gcc je lepší, ale některé WWW servery odmítají spustit jím zkompilované programy. Na systémech BSD/OS se používá cc nebo shlicc, pokud chcete aby program používal sdílené knihovny. Specifický pro Unix.
Nastaveno na: cc
CFLAGS
Zde jsou uvedeny parametry předané kompilátoru uvedenému v ${CC}. Jedna se většinou o volbu optimalizace, popř. i jiné důležité parametry (jako třeba -fno-strength-reduce pokud používáte pro kompilaci nepatchnutý gcc 2.7.2 a používáte -O2). Specifický pro Unix.
LFLAGS
zde jsou uvedeny knihovny, které se musí nalinkovat, aby překlad proběhl úspěšně. Na SunOS a SCO Unix je třeba přidat -lsocket -lnsl, na UnixWare (a možná i jinde) ještě navíc -lresolv. Specifický pro Unix.
LN
Příkaz, kterým se na vašem souboru udělá symbolický (měkký) link. Specifický pro Unix.
SHELL
Jméno shellu, který se má použít ve skriptu whichcode. Má cenu pouze pro Unix (pod NT pokud vím nelze přímo ve skriptu nastavit, pod čím se má spustit). Podporované shelly (respektive ty, které vím, že fungují) jsou: sh, ksh, bash, ash, zsh, pdksh, csh nefunguje, není a nebude podporován. Specifický pro Unix.
Nastaveno na: /bin/sh
STRIP
Zkompilovaný binární soubor obsahuje některé informace, které jsou poté většinou zbytečné (tabulku symbolů atd. používají se při ladění programu). Pokud tedy CSáček budujete pro normální používání, nechte jako obsah strip, jinak echo. Ušetříte títo způsobem asi 3k na disku ;-) Specifický pro Unix.
Nastaveno na: strip
CGIPATH
Pravdépodobně budete chtít nastavit stejnou hodnotu jako v config.h. V souboru Makefile se užívá pro určení hodnory proměnné CGIPATH ve skriptech whichcode, whichcode.eng. Specifický pro Unix.
SUFFIX
Uveďte, pokud chcete, aby generované soubory měly nějakou příponu (např. .cgi). Není závislá na hodnotě CGISUFFIX, nastavené v config.h. Pro NT je vhodné zvolit .cgi nebo .exe, nastavení pro Unix záleží na místní instalaci.
COMPILEDIR
Kam se mají uložit zkompilované binárky, soubory obsahující symbolické linky a soubory whichcode. Může být přímo adresář, kde máte ostatní CGI skripty, ušetříte si pak jeden krok při instalaci.
Nastaveno na: ./compile.
CSACEK_CODES
Seznam kódů, mezi kterými CSáček umí převádět. Když se v závěrečné fázi kompilace budou vytváňet symbolické odkazy na soubor, který bude oním "centrálním" převodníkem, vytvoří se pouze odkazy se jmény z tohoto seznamu. Ve většině případů asi není třeba přenastavit.
PARTLIST
Seznam názvů částí (viz příkaz PART), které chcete na vašem systému používat.
Nastaveno na: eng.
CZ_WHICHCODE, ENG_WHICHCODE, WHICHCODE_DIR
WHICHCODE_DIR obsahuje adresář, ve kterém jsou defaultní základy ke skriptům whichcode a whichcode.eng. Podívejte se tam a podle toho, který vám vyhovuje nastavte příslušně i proměnné CZ_WHICHCODE a ENG_WHICHCODE. Specifický pro Unix.

... a instalace pokračuje

Tím je ukončena konfigurační fáze. Nyní by v ideálním případě (který může a nemusí nastat) mělo stačit dát příkaz:
make
popř. nmake na NT. Ten by měl zajistit (na základě souoru Makefile) zkompilování distribuce do použitelné formy. Do adresáře zadaného jako COMPILEDIR se zkompiluje toASCII a na tomtéž místě se vytvoří symlinky (na Unixu) nebo kopie (na NT) se jmény ostatních kódů. Na unixu se zde ježtě vytvoří skripty whichcode, spolu s linky to__CHARSET__ a to a to__CHARSET__.eng a to.eng vedoucí na příslušný whichcode. Pokud bylo definováno CGISUFFIX, všechny soubory budou mít odpovídající příponu.

Pokud si přejete, můžete nyní ještě upravit komentáře ve vytvořeném $COMPILEDIR/whichcode (na Unixu).

A nyní už jen stačí přesunout soubory z podadresáře $COMPILEDIR do adresáře s ostatními CGI skripty tak, aby je httpd mohl spustit a "HURÁ", CSáček by měl být připraven k používání.

  ZPET Zpět


Přenos do jiného operačního systému

Abych popsal svůj boj s NT: první a nejdůležitější je sebrat pořádnou dávku trpělivosti. Poté aspoň 10 centimetrů tlustou hroší kůži, něco k pití a krabičku pilulek proti bolení hlavy. A pak už stačí jen štěstí ;-). No ale vážně.
Kód odpovídající metodě file byl v pohodě. Jediné, co bylo třeba zajistit, bylo predefinování str[n]casecmp na str[n]icmp. Horší to bylo s networkovací částí. NT je bohužel po této stránce neustále pozadu. Nejvíc mě naštvalo, když při pokusu o otevření streamu nad deskriptorem socketu fuknce fdopen bez udání chyby prostě nezvládla to co měla. Následujícím dotazem ntsecurity@iss.net jsem zjistil, že to opravdu je tak jak jsem se obával - bohužel Winloose NT berou socket a deskriptor fajlu jako dvě naprosto odlišné věci a každá se musí ošetřit samostaně. Což vedlo k tomu, že jsem si musel udělat ze skreče všechny streamovací fce, které jsou pro čtení/zápis dokumentu použity - jednalo se o fgets, fputs, feof, fdopen, fprintf, fflush, fclose. V čem mě Windouzy naopak potěšily bylo to, že tam funguje loopback adresa (127.0.0.1). Nečekal jsem to. Abych je zas nepřechválil, myslím, že to je stejnak v nějakém RFC nebo standardu.
Druhá věc, která mě silně naštvala byla neexistence alarm() (pro nezasvěcené - alarm() řekne kernelu, aby po zadaném počtu sekund poslal procesu signál SIGALRM; používá se tehdy, když se chystáte dělat akci, která se může zablokovat a nechcete, aby proces ztvrdl navždy; typické nasazení je při pokusech o spojení na síti). Mkrvosofti sice naimplementovali pár signálů (naštěstí nevím jak, protože podle filozofie ostatních věcí určitě neudělali obecně použitelný a rozšiřitelný mechanismus, ale sešmudlili každý samostatně), ale mezi nimi bohužel SIGALRM není. Myslel jsem, že tedy použiju jiný signál a naimplementuju alarm() sám, ale narazil jsem na to, že programátorům firmy MS se pravděpodobně zdálo přebytečné volání kill(), takže nemám šanci poslat signál jinému procesu než sám sobě (pomocí raise()). Zkusil jsem to implementovat přes thready, ale opět marná snaha. Podle manuálu sice existuje beginthread(), ale bohužel help a praxe je něco jiného. Zdá se, že to někdo zapoměl naprogramovat, protože ani knihovna, která podle manuálu měla beginthread() obsahovat nic takového nedefinovala.

No a to už se blížím k závěru. Moje streamové funkcičky kupodivu fungovaly. Odlađoval jsem je radší u sebe na NetBSD, protože si nemůžu pomoct, ale dělání čehokoli na NT mi připadá jako škrábání pravou nohou za levým uchem. Možná to vyhovuje někomu, kdo neví co chce udělat, ale nesnáším, když vím co chci a systém mi nedovolí to udělat jednoduše. Tfuj.
Při závěrečném dolađování jsem došel na zajímavou perličku. Fce stat() se chová poněkud zvláštně - systém sice dokáže stat()nout cesta\adresar, ale nedokáže cesta\adresar\. Takže jsem si pro NT naimplementoval malý wrapper, jménem xstat(), který před voláním stat() odstraní závěrečné backslashe.

Veškeré OS dependant věci jsou v compat.c a compat.h. Pokud budete nuceni něco portovat na NT, doporučuju se na to podívat, ušetříte si mnoho starostí. Pracoval jsem na NT serveru 4.0 s MS VC++ 4.0, takže ony informace jsou v době psaní této části (16.2.1997) vcelku aktuální.

Každopádně - CSáček je nyní k dispozici pro Unix i NT zároveň. Co bude fungovat na Unixu bude vždy fungovat i na NT a naopak. Jediná vyjímka je momentálné skript whichcode, který je na NT samozřejmě nepoužitelný. Ale chystám se jej stejně přepsat do perlu, tak pak udělám změny do kódu tak, aby se dal použít i na NT (především aby se psala správná linka do lišty).

A co OpenVMS ? Hodilo by se jeho port taktéž nějak vložit do kódu, ale bohužel nemám přístup k žádnému stroji s OpenVMS, takže bude asi dost problematické ladění. Existuje port CSáčku 1.23, který má na svědomí pan Martin Bílý, viz Budoucnost ....

  ZPET Zpět


Návod k použití

CSáček předpokládá, že bude spuštěn jako CGI skript a využívá příslušné proměnné prostředí. Nelze jej tedy spouštět samostatně (alespoň ne jednoduše).

Obsah

Základy - URL stránky

Stránku napište v kódu, který odpovídá zvolenému implicitnímu kódu serveru. (Ve skutečnosti zdrojový kód není omezen.) Vystavte ji, jak je obvyklé. Jediné, co se změní, bude URL, kterým je třeba se odkázat na stránku. Jestliže URL stránky bez překódování by bylo
http://www.kdesi.cz/cesta/stranka.html
bude URL téže stránky při požadavku jejího překódování do sedmibitového ASCII
http://www.kdesi.cz/cgi-bin/toXXXX/cesta/stranka.html
Předpokládám, že cesta ke kódujícím skriptům je /cgi-bin. Na místo XXXX můžete dosadit kterýkoli z podporovaných typů kódování (ASCII, ISO-8859-2, CP1250, ISO-8859-1, CP852, KEYBCS2, MAC nebo KOI8-CS).

Tento odkaz však předpokládá, že předem víte, jaký kód bude uživatel vyžadovat. To často nemusí být pravda. V takovém případě doporučuji použít skript whichcode a URL

http://www.kdesi.cz/cgi-bin/whichcode/cesta/stranka.html
Skript whichcode uživateli oznámí, že cílový dokument obsahuje diakritická znaménka a umožní mu zvolit kód, který považuje za optimální.

Zachování kódu při odkazech

Je přirozeným požadavkem, aby uživatel vybíral kód jen jednou a při odkazech na další dokumenty z téhož zdroje se uchovávala informace o zvoleném kódování. Nejjednodušší cestou je relativní odkaz. Když do dokumentu vložíte odkaz pomocí značky
<A HREF="kapitola1.html">První kapitola</A>
klient přepracuje relativní URL kapitola1.html na absolutní. Vyjde přitom z URL dokumentu, obsahujícího značku. Pokud bylo původní URL dokumentu například http://www.kdesi.cz/cgi-bin/toCP1250/cesta/obsah.html, povede zmíněný odkaz k dokumentu http://www.kdesi.cz/cgi-bin/toCP1250/cesta/kapitola1.html. Informace o kódu byla zachována.

  Trik - můžete použít v dokumentu značku <BASE> na rozskokové stránce (ta, na kterou čtenáři většinou dojdou bez prekódování). Všechna relativní URL vztažena k lokátoru, definovanému touto značkou, nikoli k URL, pod kterým klient získal stránku.

Příklad:
stránka http://kdesi/~ja/moje.html může obsahovat značku <BASE HREF=http://kdesi/cgi-bin/to__CHARSET__/~ja/moje.html>. Pokud čtenář použije některý relativní link, je přinucen vybrat si kódování a dál už se mu stránky zobrazují v tom "jeho".

Absolutní odkazy je třeba řešit jinak. Tady používá CSáček metodu podobnou programu WWWdia. Do textu můžete na kterékoli místo (včetně cest) vložit řetězec

__CHARSET__
Kódující skript nahradí každý výskyt tohoto řetězce identifikací kódu, do kterého právě převádí stránku. Proto můžete v textu použít značku
<A HREF="http://www.jinde.cz/cgi-bin/to__CHARSET__/jinacesta/str.html">odkaz</A>
Pokud stránka projde skriptem toKEYBCS2, který ji převede do kódu KEYBCS2 (Kameníci), bude v odeslaném dokumentu v této značce uvedeno URL
<A HREF="http://www.saczechserver.cz/cgi-bin/toKEYBCS2/jinacesta/str.html">odkaz</A>
Předpokládám, že server, určený tímto absolutním URL, má instalován C-SaCzech nebo SaCzech. Může, ale nemusí se jednat o tentýž server, který poskytl původní dokument.

Jelikož jsou názvy kódů shodné s programem WWWdia, mohou se na sebe navzájem korektně odkazovat stránky, jejichž servery používají různé implementace češtiny. Absolutní URL, uvedené výše, lze použít i na stránce, která je překódovávána programem WWWdia. Potřebujete-li naopak skočit ze stránky kódované pomocí C-SaCzechu nebo SaCzechu na stránku v pomocí WWWdia, použijte pro tento odkaz URL

<A HREF="http://www.diaserver.cz/cgi-bin/charset/jestecesta/str.html?charset=__CHARSET__">odkaz</A>

Nekódovat obrázky!

C-SaCzech je selektivní. Kóduje jen soubory s určitými příponami (implicitně .html, .htm, .txt a .cz ; jak je změnit se dočtete v kapitole Pod kapotou). Dostane-li k překódování soubor s jinou příponou, odmítne se akce účastnit a přesměruje klienta přímo na dotyčný soubor. Důsledkem je, že klient získá soubor v původním tvaru beze změny kódování.

Díky tomuto mechanismu můžete na své stránky vkládat relativní odkazy na obrázky, zvuky a další druhy dat, kterým by překódování rozhodně neprospělo.

Jestliže se na stránce vyskytne značka

<IMG SRC="obraz.gif">
a URL stránky je http://www.kdesi.cz/cgi-bin/toASCII/cesta/stranka.html, bude klient po serveru požadovat http://www.kdesi.cz/cgi-bin/toASCII/cesta/obraz.gif. Server spustí program toASCII. Ten však zjistí, že je po něm požadováno kódování souboru s příponou .gif. Místo aby se pustil do díla, odpoví klientovi "hele s tímhle já nechci nic mít, vezmi si rovnou ten soubor". Klient si ho vezme a vše funguje k plné spokojenosti všech zúčastněných.

Změna výchozího kódu

Implicitní výchozí kód, ve kterém budou psány dokumenty, určuje správce serveru při instalaci programů C-SaCzech. Mělo by se jednat o kód, ve kterém bude vytvářena většina stránek (nejlépe všechny). Pokud autor používá kód jiný, má dvě možnosti:
Převést stránku do implicitního kódu.
To je méně pohodlné a navíc to komplikuje pozdější úpravy na stránce (každá úprava bude vyžadovat nové překódování).
Ponechat stránku v kódu původním a vyznačit jej.
K vyznačení původního kódu dokumentu se používá HTML komentář v přesně definovaném tvaru
<!--MYCHARSET=kód-->
Například <!--MYCHARSET=CP1250-->. Počínaje řádkem, obsahujícím tento komentář (doporučuji jej uvést na samostatném řádku na začátku dokumentu), bude za výchozí kód dokumentu považován kód CP1250.

Dokonce můžete používat několik různých kódů v jednom dokumentu. Jestliže je první polovina textu psána v kódu Kamenických a druhá v MS-Windows, stačí před každou část vložit příslušný komentář a výsledek bude uživateli odeslán ve správné podobě - obě poloviny se korektně překódují například do ISO Latin 2. Takové dokumenty sice považuji za zvěrstvo, ale ta možnost tu je...

Pro milovníky patologických případů:

Lišta s nabídkou kódování

Pokud se tak správce rozhodne při instalaci, můžete na stránkách kódovaných C-SaCzech využívat automatického generování lišty s nabídkou kódování. Jak se to dělá a co vše lze nastavit se dočtete v části Instalace. Ve stránkách pak stačí v místě, kde chcete mít nabídkovou lištu, napsat příkaz
<--BAR-->
který způsobí, že C-SaCzech v daném místě vytvoří a vypíše lištu s nabídkou. Pokud je tak C-SaCzech nakonfigurován, vypisuje lištu automaticky na konci dokumentu, pokud už lišta nebyla alespoň jednou vypsána předtím.

Pokud chcete docílit speciálního tvaru lišty, máte dvě možnosti. Jedna je zadat parametry přímo v příkazu BAR a druhá použít příkazu BARDEF, který je identický s BAR až na to, že nezpůsobí vypsání lišty. V obou příkazech jsou zadané parametry platné i pro všechny následující příkazy BAR. S výhodou lze takto např. předefinovat tvar lišty a nechat C-SaCzech vypsat lištu na konci dokumentu (k použití příkazu BAR viz. příklad).

Vícejazyčné dokumenty

Pokud pořizujete dokumenty, které mají víc variant, ať už jsou například ve dvou různých jazycích nebo jsou například odlišně zpracovány pro zobrazení různými WWW browsery, vynoří se problém s aktualizací. Jestliže je takových dokumentů více, je třeba pamatovat na to, aby se případné změny provedly v každém souboru, a může se stát (protože jsme lidi omylní), že se změny neudělají všude. Bylo by vhodné mít v nějakém konzistentním formátu všechna spolusouvisející data v jediném souboru.

Jak se to používá ? Části označíme tak, že na začátek dáme speciální příkaz, podle kterého C-SaCzech pozná, že zde začíná nová část. Např.

<--PART ENG-->
vyznačí novou část se jménem ENG. Pokud je pak je daný dokument překládán skriptem se jménem toXXXX.eng (popř. toXXXX.ENG), vypíšou se části mezi <--PART ENG--> a jinými částmi (praktická ukázka použití viz příklad). Při pojmenování částí nezáleží nezáleží na malých a velkých písmenech (tzn. část MoJe se bere stejná jako moje).

Je rezervováno jedno jméno, a to ALL. Část pojmenovaná jako ALL bude vypsána vždy, stejně jako část dokumentu do prvního výskytu příkazu PART.

Je třeba zajitit, aby se k dokumentům, které jsou takto napsány, nedostal uživatel, aniž by přešel přes CSáček. Protože bez překódování může být onen text poněkud nečitelný ...

Syntax je dále rozebírána v seznamu příkazů

Podpora autorizaci přístupu

Možná jste se dostali do situace, kdy jste sice chtěli zpřístupnit informace přes Web, ale chtěli jste tyto informace vystavit jen pro nějakou uzavřenou skupinu lidí. Ať už třeba lokální zrcadlo Pethousu nebo informace, za jejichž poskytování se obyčejně berou peníze (inzeráty, statistiky, nabídky ...). WWW server obyčejně umožňuje omezit přístup k adresáčům obsahujícím takové informace pomocí speciálních konfiguračních souborů (nejčastěji .htaccess). Od verze 1.3_ALPHA CSáček tuto ideu podporuje a pokud je přinucen přenášet takto chráněný dokument, požádá o přenos přímo http démona místo aby si ho sám vyzvedl ze systému souborů.

Potenciální problémy s překódováváním chráněných souborů jsou diskutovány níže.

Překódovávání chráněných (veřejně nepřístupných) souborů

Bohužel to není tak jednoduché jak by se na první pohled zdálo. CSáček totiž samozřejmě potřebuje k přístupu příslušné heslo. Ale toto heslo se standardně žádným způsobem skriptu při spouštění nepředává, z bezpečnostních důvodů. Pokud totiž nemáte absolutní kontrolu nad tím jaké CGI skripty se Vám na serveru vyskytnou, mohl by spuštěný skript velice snadno tuto informaci zneužít, protože heslo se v protokolu HTTP přenáší nezakódované, jen upravené pro přenos (použitím base64).
Pokud tedy máte kontrolu nad všemi skripty na Vašem serveru, můžete vcelku jednoduchým způsobem upravit httpd tak, aby mezi proměnné prosředí spouštěného skriptu byl přidán i obsah hlavičky "Authorization".

Podpora SSI a shtml

CSáček od verze 1.3.1 přenechává SSI v rukou serveru (kam patří). Při konfiguraci před kompilací je pouze třeba zkontrolovat, zda je přípona .shtml (popř. jiná, kterou používáte k označení souborů používajících SSI) v seznamu HTTP_SUFFIXES, aby CSáček při přístupu ke stránce požádal o dokument WWW server.

Zjištění zakompilovaných defaultů a on-line help

Verze 1.3 přináší další dvě užitečné drobnosti - je možno zjistit, jak byl CSáček nakonfigurován při kompilaci a také nabízí on-line help. To první se vypíše, pokud dáte CSáčku parametr ?csacek_report nebo ?csacek_info, tedy celé URL bude vypadat nějak takto: http://server/cgi-bin/toASCII?csacek_report. CSáček automaticky vygeneruje HTML stránku s požadovanými informacemi. Aby vypsal help, musí URL vypadat nějak takto : http://server/cgi-bin/toASCII?csacek_help. CSáček vygeneruje stránku, popisující základní příkazy, které v této verzi CSáčku je možno používat, spolu s krátkým popisem, co která dělá. Na domovskou stránku se dostanete, pokud CSáčku podstrčíte parametr ?csacek_homepage.

  ZPET Zpět


Seznam příkazů

Každý příkaz pro C-SaCzech je uzavřen do komentáře mezi <!-- a -->, tedy např.
<!--BAR E LONG-->
Pro milovníky patologických případů:

Seznam:

... a popis:

V následujícím popisu hranaté závorky označují části, které nemusí (ale mohou) být zadány. U každého příkazu je uvedena jeho syntax, jeden jednoduchý příklad použití, dále pak krátký popis, co daný příkaz dělá a poté případně přehled voleb či parametrů, které můžete příkazu zadat. U některých je uveden ještě odkaz na další, podrobnější příklady užití.

MYCHARSET
Syntax: <!--MYCHARSET=kód-->
Příklad použití: <!--MYCHARSET=ISO-8859-2-->

BAR, BARDEF
Syntax: <!--BAR[DEF] [parametry]-->
Příklad použití: <!--BAR SHORT NOWHICH SEP=" o "-->

Příkaz BAR slouží k automatickému vypsání lišty s nabídkou kódování. V lišté se objeví seznam kódů, které CSáček zvládá a každý z nich je odkaz na aktuální stránku, převedenou do příslušného kódu. Parametry nemusíte uvést, BAR bez parametrů vypíše lištu v takovém tvaru, jak je právě nastaveno.

BARDEF má stejné volby a parametry jako BAR, s tím rozdílem, že lištu nevypíše, pouze nastaví vnitřní proměnné CSáčku pro pozdější použití na stránce.

Význam jednotlivých parametrů:

Zde je několik dalších příkladů, pokud se už tento dokument filtruje přes CSáček, uvidíte také jak ona generovaná lišta vypadá.

PART
Syntax: <!--PART [jméno_části1 jméno_části2 ...]-->
Příklad použití: <!--PART ENG-->

Následující část textu do výskytu dalšího příkazu PART je předána pouze pokud některé jméno části odpovídá příponě CGI skriptu, kterým se dokument filtruje; například pokud je odkaz ve tvaru: http://server/cgi-bin/toXXX.eng/cosi, předá se vše v dokumentu /cosi mezi <!--PART ENG--> a dalším příkazem PART. Kromě částí uzavřené mezi příkazy PART s odpovídajícím parametrem se také předá vše do prvního výskytu příkazu PART. Pokud jméno části není uvedeno, text za <!--PART--> se předá na výstup pouze pokud u filtrujícího CGI skriptu nebyla uvedena přípona, tzn. odkaz vypadal nějak takto: http://server/cgi-bin/toXXX/cosi. Ve jméně části nezáleží na velkých/malých písmenech (MoJe se vyhodnotí jako ekvivalentní části moje).

Význam jednotlivých parametrů:

Zde je uveden malý příklad; příklad bude funkční pouze pokud již máte nainstalovaný CSáček v angločeské verzi nebo si prohlížíte domácí stránku.

DOMAIN
Syntax: <!--DOMAIN označení_domény_1 [označení_domény2 ...]-->
Příklad použití: <!--DOMAIN ics.muni.cz 147.251-->

Syntaxe je podobná jako u PART. Části mezi jednotlivými příkazy DOMAIN se vypíší pouze tehdy, když vzdálený uživatel přistupuje z některé ze zadaných domén. V uvedeném příkladě tehdy, pokud vzdálený uživatel přistupuje ze stroje v doméně ics.muni.cz nebo s IP adresou začínající na 147.251 (.muni.cz).

NOCODE
Syntax: <!--NOCODE-->
Příklad použití: <!--NOCODE-->

Od řádku na kterém byl tento příkaz se dokument nebude překódovávat; využití například v dokumentech v čistém ASCII (např. anglické) ke zrychlení překladu nebo v částech, které nechcete překódovávat z jakéhokoli jiného důvodu. Příkazy PART a DOMAIN se v takto nekódovaných částech ignorují.

CODE
Syntax: <!--CODE-->
Příklad použití: <!--CODE-->

Od výskytu tohoto příkazu se dokument bude opět kódovat; inverzní volba s NOCODE.

ZPET Zpět

 


Historie

C-SaCzech vznikl během dubna a začátku května léta Páně tisícího devítistého devadesátého šestého.

Verze 1.2Y jsou vývojové verze, které už byly překonány verzí 1.3. Verze 1.3.X budou především opravovat chyby a bude pročištěn kód.

Vývoj

verze 1.3.1 (únor 1996)
verze 1.3 (srpen-listopad 1996)
verze 1.23 (začátek června 1996) - dost chybový, doporučuji když tak jen vybrat opravenou verzi cstools.h
verze 1.22 (konec května 1996)
verze 1.21 (konec května 1996)
verze 1.2 (konec května 1996)
verze 1.1 (květen 1996)
verze 1.0 (květen 1996)

  ZPET Zpět


Chyby CSáčku

  ZPET Zpět


Zajímavosti a linky na stránky o různých konverzních programech a češtině na WWW

Jen stručně (seřazeno v chronologickém sledu, jak jsem se o nich dozvěděl): Články: Také jsou nově k dispozici FAQ týkající se češtiny: ale jeste se mi na tu adresu nepodarilo dostat (tento material vytvoril Lukas Petrlik, luki@pafos.zcu.cz), nejake problemy se serverem (odmita ftp, http a dokonce i finger :-(.

ZPET Zpět


This page is part of documentation of C-SaCzech and was created and has been maintained by Jaromír Doleček, dolecek@ics.muni.cz