C-SaCzech 2.1

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

Autor: Jaromír Doleček, dolecek@sky.cz
Datum poslední změny tohoto dokumentu: $Date: 2002/02/17 12:36:19 $

## Dokumentace

- Proč zvolit právě CSáček ?
- Budoucí vývoj CSáčku
- Programátorký boj s windoze aneb portování CSáčku na nový OS
- Mutace CSáčku
- Návod k použití
  - Základy - URL stránky
  - Zachování kódu při odkazech
  - Kódovat jen text a HTML!
  - Změna výchozího kódu
  - Lišta s nabídkou kódování
  - Dokumenty ve více verzích
  - Překódovávání "chráněných" stránek
  - Vypisování konfigurace CSáčka
- Apache CSáček
  - Konfigurace Apache CSáčku
  - Apache, SSL a CSáček - jak to jde dohromady ?
- ISAPI CSáček
  - Konfigurace ISAPI CSáčku
  - Objednávka ISAPI CSáčku
- Konfigurace CSáčku
- Příkazy CSáčku
  - Příklady použití
- Historie

- Úvodní stránka

Zpět k hlavní stránce

## Výhody CSáčku

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 třeba SaCzech od p. Pavla Satrapy, který byl vzorem pro CSáček, nehledě na množství jiných kodérů.

Zásadní nevýhoda WWWdia je v tom, že nepodporuje relativní odkazy, protože na konec odkazu je vždy třeba psát řetězec `?__CHARSET__`. Je tedy vždy třeba v každém odkazu uvést celé URL. Další nevýhodou je, že umí překódovat jen statické stránky a nedá se tedy použít pro překódování například výstupu různých CGI skriptů.
SaCzech tohle vše odstraňuje, ale je napsán v Perlu a odezva s použitím překódování je výrazně horší než bez něj. Rozhodl se tedy napsat rychlejší a na systémové prostředky méně náročnou verzi a přepsat SaCzech 2.0 do jazyka C.
CGI CSáček má výhody SaCzechu, je ale mnohem rychlejší a mocnější. CSáček lze také v případě potřeby zkompilat jako FastCGI program, čímž se podstatně urychlí jeho provoz.

U Apache se dají použít také interní apache moduly. Výkon modulu je oproti CGI mnohem vyšší - nemusí se kvůli každé stránce spouštět samostatný proces atd. Existující mod_czech od InterSoftu i i mod_html od pana Lampy ovšem potřebují zásah do zdrojáků serveru a jeho rekompilaci. Nejen že to znesnadňuje nasazení (všeobecný trend je používání DSO, tedy dynamického nahrávanání modulů), ale může způsobit i další problémy, pokud je na serveru také například PHP či Apache-SSL. CSáček je jako jediný schopen vložení jako DSO modul, bez nutnosti patchovat server a další moduly jako PHP či Apache-SSL. Je tedy velice jednoduché ho nasadit a upgrejdovat - a také (v nepravděpodobném případě, že se neosvědčí) bezbolestně odstranit.

Modul na překódování češtiny pro IIS (ISAPI filtr) existuje kromě CSáčku jen jediný - CZFILTER od firmy Sprinx. Podle reakcí uživatelů je v daný moment (12.9.1999) CSáček mnohem stabilnější, asi dvakrát rychlejší a narozdíl od něj podporuje i FrontPage extensions a provoz pod SSL.

### CSáček nabízí

- možnost funkce jako CGI, FastCGI nebo Apache modul, na UN*Xu (NetBSD, Linux, Solaris, IRIX, Digital Unix), CGI a ISAPI na MS Windows NT
- pod Apache 1.3.X možnost používat CSáček jako DSO modul
- on-fly kompresi dokumentů, posílaných klientovi (kompresi podporuje např. Netscape 4.5+, lynx, MSIE 4.0+)
- podpora `META` tagu pro označení kódování češtiny v dokumentu
- podporu Unicode (UTF-8)
- podporu relativních odkazů i absolutních odkazů, automatické přepisování absolutních odkazů pro zachování výběru kódování
- možnost používat různé typy kódování češtiny ve zdrojových textech stránek; je dokonce možno použít víc kódů v rámci jedné stránky
- možnost kódovat i dynamicky vytvářené stránky (např. výsledky různých skriptů)
- překódování vstupu od klienta (data z formulářů) do kódování serveru
- možnost držení více verzí (například jazykových) dokumentu v jednom souboru
- podporu azbuky

## Budoucnost - verze 2.1.X a dál

Jednou se snad splní i smysl existence CSáčka a bude standardní součástí každého českého Webu, zmírňujíc tak chaos v používaných kodérů češtiny. A nebo jednou (což by bylo snad ještě lepší) už nic takového nebude třeba - to je ale bohužel spíš utopie :)

Jaké jsou tedy plány ?

1. podpora Apache 2.0 - konečně má podporu filtrů, takže nebude třeba takový odpudivý hack jako pro Apache 1.X :)
2. zprovoznit Apache modul pod NT - ve verzi 2.1 CSáčku se Apache modul pod NT sice nahraje, ale kvůli (zatím) poměrně záhadné chybě ještě není funkční
3. dopsat plnou podporu azbuky, včetně překladu z/do latinky a Unicode
4. vytvoření NSAPI mutace, tj. modul do Netscape serverů
5. přeložit dokumentaci do angličtiny a aktivně CSáček rozšiřovat do ostatních středoevropských zemí a Ruska (žádný konkrétní termín)

Hodilo by se naportovat CSáček na OS/2 a MacOS. Bylo by to přinejmenším poučné pro mě samého. Inu - až bude jednou všechna práce hotova ...
Také by bylo dobré nějak využít dávného VMS portu pana Bílého pro plné naportování CSáčku na tuto platformu. Nemám ale na žádný stroj s tímto operačním systémem přístup, takže se to asi nezdaří.

Možná by se také hodila emulace některých jiných oblíbených kodérů, jako je třeba `compose`.

Zpět

## Programátorský boj s windoze aneb portování CSáčku na nový OS

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 se síťovou čá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 funkce `fdopen()` bez udání chyby prostě nezvládla to co měla. Následujícím dotazem na `ntsecurity@iss.net` jsem zjistil, že to opravdu je tak jak jsem se obával - bohužel Winloose NT berou socket a deskriptor souboru jako dvě naprosto odlišné věci a nad socketem stdio stream otevřít nelze. Což vedlo k tomu, že jsem byl nucet si sám naimplementovat všechny fce nad streamy, které jsou pro čtení/zápis dokumentu použity.
Druhá věc, která mě silně naštvala byla neexistence `alarm()`. Používá se například tehdy, když dělám nějakou akci, která se může zablokovat na blíže neurčenou dobu (typicky síťová komunikace); procesu je po zadaném počtu sekund poslán signál SIGALRM. I přesto, že tato funkce je součástí IEEE Std1003.1-1990 (POSIX.1), na Windows tak nějak chybí. Mrkvosofti všude prohlašují, jak jejich NT jsou POSIX-compliant a skutek utek. Pro CGI CSáčka tohle naštěstí příliš nevadí - navazuje spojení vždy na stejný počítač, na kterém jede, takže je solidní šance, že k žádným síťovým problémům nedojde (ovšem modulo MS Windows NT Workstation a jeho omezení na 10 příchozích TCP/IP spojení).

Pod MS Windows také není implementováno POSIX.2 `sleep()` a nejsou definována makra pro zjištění typu soboru ze struktury, vrácené voláním `stat()`.

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 dělání čehokoli na Mrkvosoftech je (alespoň pro mě) neuvěřitelně flustrující; nesnáším, když vím co chci udělat a systém mi to nedovolí udělat (nebo nedovolí 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(2)` se na NT chová poněkud zvláštně - systém sice dokáže `stat()`nout `cesta\adresar`, ale nedokáže `cesta\adresar\`. Takže jsem byl nucet pro NT naimplementoval malý wrapper, který před voláním `stat(2)` odstraní závěrečné backslashe.

Při ověřování zkompilovatelnosti verze 2.0 na NT jsem bohužel opět narazil. Nic netuše jsem mezitím zupgrejdoval MS VC na 5.0 a najednou nefungovalo `str[i]cmp()` - bylo přejmenováno na `_str[i]cmp()`. Fce `vsnprintf()` se na NT jmenuje `_vsnprintf()`. Struktura `stat` se jmenuje `_stat`. Tentokrát mě nejvíc naštvalo to, že kompilátor standardně nedefinuje `__STDC__` i přesto, že rozumí ANSI C. Pokud se symbol definuje, má to vedlejší efekty (některé fce mají před jméno přidáno _ například), takže to bylo nutné obejít jinak.

Veškeré OS závislé věci jsou v souborech `compat.c` a `csa_compat.h`. Pokud budete nuceni něco portovat na NT, doporučuju se na ně podívat, ušetříte si tak určitě 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í.

Ať už bylo naportování CSáčku na NT jakkoli těžké, nyní je práce hotova a CSáček je od nynějška k dispozici pro Unix i NT přímo z police. Co funguje na Unixu bude vždy fungovat i na NT a naopak.

A co OpenVMS ? Hodilo by se jeho port také nějak integrovat do kódu, ale bohužel nemám přístup k žádnému stroji s OpenVMS, takže by bylo asi dost problematické ladění. Navíc mi pan Bílý ani nedal k dispozici své zdrojové kódy, takže se nemám od čeho "odpíchnout".

Port na jiný operační systém zatím nebyl potřeba, takže jsem ani nezkoumal, jak by to bylo optížné. Možná by se hodil port pro NeXtStep a pro MacOS, ale tak jako tak to nemám kde ladit.

## Mutace CSáčku

Co je to mutace ? Je to určitá forma CSáčku, uzpůsobená pro určité prostředí. Momentálně je CSáček k dispozici jako CGI, FastCGI, Apache a ISAPI mutace, v budoucnosti se chystám také na NSAPI mutaci. Každá mutace MUSÍ implementovat několik základních funkcí, obvykle v samostatném souboru podle názvu mutace (`cgi.c` pro (Fast)CGI, `apache.c` pro Apache modul). Ve stejném souboru je obvykle i další kód, který daná mutace ke svému běhu potřebuje - například `main()` pro CGI CSáček nebo kód pro zapojení do Apache serveru pro Apache CSáček.

Tyto základní funkce používá na mutaci nezávislé jádro CSáčku k tomu, aby dělalo to, co má. Ve výsledku to znamená, že jen minimální množství kódu se musí přepisovat a upravovat v případě, že se píše nová mutace a drtivá většina kódu se sdílí. Značně to přizpívá ke stabilitě CSáčku - na CSáček jsou v různých prostředích kladeny různé požadavky a najde-li se chyba, její oprava automaticky znamená zlepšení i pro ostatní mutace bez další práce. Navíc většina kódu je opravdu neutrální k mutaci, takže i v případě přidání nějaké nové vlastnosti tuto vlastnost získá bezprostředně každá mutace. Usnadňuje to také opravování chyb, protože v různých situacích může být pohodlnější trasování různé mutace - někdy je pohodlnější třeba CGI a někdy zase Apache CSáček.

I v tomto systému, kde je oddělen na mutaci závislý a nezávislý kód, je někdy nutno upravovat na mutaci "nezávislý" kód proto, aby nová mutace fungovala korektně. Pro Apache a CGI CSáček například platí, že je k dispozici celá odpověď (hlavičky i tělo) najednou; u ISAPI CSáčku to neplatí, není tam ani zaručeno, že najednou dostanu všechny hlavičky - kód, který počítal s původním chováním musel tedy být upraven tak, aby bylo možně hlavičky i tělo odpovědi zpracovávat po částech.
Podobné změny ale nejsou příliš časté a s postupem času stále méně nutné. Nejvíc práce dalo kdysi ono oddělení MD a MI kódu při psaní Apache mutace - do té doby CSáček fungoval pouze jako CGI. Musel se vyseparovat kód, který je specifický pro CGI a stanovit interface, kterým se mutace zapojí do CSáčku. Od té doby bylo provedeno několik změn interface tak, aby se ještě víc sdílel kód mezi Apache a CGI mutací. To se zúročilo při psaní ISAPI mutace, kdy jsem pak strávil nejvíc času při ladění ISAPI-specifického kódu a vlastní jádro CSáčku se měnilo minimálně.

Zpět

### 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 kódování stránky není omezeno). 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/toASCII/cesta/stranka.html`

za předpokladu, že používáte Apache CSáček.

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 spustit CSáček v módu `whichcode` - URL bude vypadat nějak takto:

> `http://www.kdesi.cz/whichcode/cesta/stranka.html`

Na základě externí šablony bude vygenerována stránka, kde bude uživateli bude oznámeno, že cílový dokument obsahuje diakritická znaménka a umožní mu zvolit kód, který považuje za optimální.

Druhá možnost je použít `toGUESS`. V tomto módu se CSáček pokusí zjistit, jaké kódování a jazyk klient podporuje a přesměruje klienta na URL, které odpovídá jeho jazykovým/kódovacím schopnostem. Momentálně každému klientovi z Česka vnutí `ISO-8859-2` (klient, který by nerozuměl tomuto kódování se dá považovat za nefunkční), ostatním pak `ASCII`. Pokud by měl uživatel tu smůlu, že používá nefunkčního klienta, může si typ kódování později změnit explicitně přes `whichcode`.
V případě Apache modulu a ISAPI filteru se mód `toGUESS` používá implicitně v případě, že URL neobsahuje CSáček, tj. jedná se o jednoduché URL typu `http://www.nekde.cz/cosi.html`. Zjednodušuje se tak URL v obvyklém případě, kdy uživateli uhádnutý default vyhovuje.

### Zachování kódování při odkazech

CSáček od verze 2.0 automaticky přepisuje odkazy v dokumentu tak, aby se v daném URL opět objevil a zachovala se tak informace o vybraném kódování a (jazykové) variantě dokumentu. Jakmile tedy zajistíte, aby dokument šel přes CSáček, můžete další odkazy pustit z hlavy. To "zajištění" je problém jen pro (Fast)CGI CSáček; u Apache modulu a ISAPI filtru jde přes CSáček každý dokument. Pro (Fast)CGI lze například použít rozskokovou stránku s tagem `BASE`, který zajistí, že všechny relativní odkazy jsou vztaženy k URL, které je tam uvedeno, místo toho, pod kterým byl dokument získán.

> Příklad:
> stránka `http://kdesi/~ja/moje.html` může obsahovat značku `<BASE HREF="http://kdesi/to__CHARSET__/~ja/moje.html">`. Pokud čtenář použije některý relativní link, je mu automaticky vybráno kódování a jazyková varianta podle jeho preferencí a dál se už stránky zobrazují v uhádnutém kódování.

Pokud se odkazujete na jiné servery s CSáčkem a chcete, aby se při odkazech zachovala informace o uživatelem vybraném kódování, musíte CSáčkovi seznam takových serverů sdělit. CSáček pak upravuje URL v dokumentech podobným způsobem, jako při odkazech v rámci "svého" serveru. Podrobněji viz popis konfiguračního příkazu Apache `csacekServers` a stejnojmenného CSáček příkazu.

Samozřejmě lze na stránku napsat klasickou sbírku odkazů pro zobrazení dokumentu v ASCII, ISO-8859-2 či CP1250:

> `<A HREF="/toASCII/">ASCII</A>`
> `<A HREF="/toISO-8859-2/">ISO-8859-2</A>`
> `<A HREF="/toCP1250/">CP1250</A>`

Pro odkazy na servery, používající nekompatibilní češtinu, lze využít příkazu `CHARSET`. Při odkazech na servery používající SaCzech či WWWdia lze v textu použít řetězec `__CHARSET__`, který je (C)Sáčkem nahrazen jménem výstupního kódování ve tvaru, kterému (C)SaCzech a WWWdia rozumí.
Příklad použití:

> `<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.jinde.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 CGI CSáček 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 a SaCzech, 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í CSáčku 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>`

Podobně jako `__CHARSET__` pro WWWdia kompatibilní češtiny lze použít `__LAMPACHARSET__` pro odkazy na servery, používající `mod_html` pana Lampy.

### Kódovat pouze text a HTML!

CSáček kóduje pouze dokumenty typu `text/plain` (čistý text) a `text/html` (HTML dokument). Jiná data předá beze změny.

CGI CSáček navíc pokládá za "překódovatelné" soubory, končící na `.html`, `.htm`, `.txt`. O všechny ostatní dokumenty požádá server a rozhodne se, zda daný dokument kódovat nebo ne, podle informací, které server vrátí.

### 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 CSáčku. 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á jiné kódování, má v základě 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.
  CSáček podporuje `META` tag a zařídí se podle informace, která je tam uvedena, tj. je-li tam `<META HTTP-Equiv="Content-Type" Content="text/html; charset=windows-1250">` CSáček správně pochopí, že obsah dokumentu je v kódování používaném na MS Windows a zařídí se podle toho.

  CSáček podporuje také jiný mechanismus vyznačení kódování textu - pomocí příkazu `MYCHARSET`. Vhodný je zejména tehdy, pokud různé části dokumentu obsahují text v různém kódování nebo chcete zachovat kompatibilitu se SaCzechem.

Účinnost příkazu `MYCHARSET`, popř. `META` tagu začíná místem, kde byl uveden.

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

CSáček umí na stránce generovat lištu s nabídkou kódování. Slouží na to speciální příkaz `BAR`, který způsobí, že CSáček v daném místě vytvoří a vypíše lištu s nabídkou kódování. V době kompilace může být CSáček nakonfigurován tak, že lištu automaticky vytvoří na konci každého HTML dokumentu.

Tvar lišty lze ovlivnit zadáním dalších parametrů příkazu `BAR`. Příkladům použití je věnována samostatná stránka.

### Dokumenty v několika podobných verzích

Celkem častá situace na WWW serverech je, ze se dokumenty vyskytují v několika verzích, které mají ve svém základě stejný obsah, ale z různých důvodů je nelze sloučit; jedná se například o dvě jazykové varianty téhož textu, HTML stránky upravené pro speciální browser atd.
Pokud se takových stránek nahromadí víc, začíná být celkem nepřehledné, odkud a kam mají vést hypertextové odkazy a kde všude se má provést změna, když je třeba něco upravit. I při jisté automatizaci je to nezanedbatelné množství administrativní práce navíc a bylo by tedy vhodné, aby všechna související data (či texty) byly pokud možno v jednom souboru v nějakém konzistentním formátu.

CSáček na to používá metodu takzvaných částí. Část začíná příkazem `PART`, jehož parametr je název části, bez ohledu na velká/malá písmena (tj. "CS" je považováno za ekvivalentní s "cs"). Věci specifické pro určitou variantu dokumentu tedy můžete napsat jako nějakou část a nechat pak CSáček dynamicky vybrat to "pravé ořechové" podle přaní uživatele.
Podprobnější popis viz popis příkazu `PART`, kde naleznete i pár příkladů použití.

### Podpora chráněných stránek

Následující text platí pouze pro (Fast)CGI CSáček; pokud je CSáček součást WWW serveru (Apache modul nebo ISAPI filter), použijí se bezpečnostní mechanismy daného serveru bez toho, že by je CSáček nějak ovlivňoval.

Při přímém předávání obsahu souboru CGI CSáček dává pozor, jestli se na "cestě" k němu nevyskytuje nějaký konfigurační soubor (standardně `.htaccess`). Pokud ano, o dokument požádá server.
Bohužel pak nastane problém v tom, že CGI skriptům se standardně nepředává login a heslo, které poslal klient. Při požadavku o chráněný dokument tedy CSáček nemůže tuto informaci poslat a přístup k dokumentu je většinou zamítnut. Pokud máte zdrojový kód serveru, který používáte, dá se toto chování změnit, tj. přinutit server, aby ony informace od klienta předával. Součástí distribuce je i patch pro Apache a NCSA httpd, který to zajistí.
V případě CGI CSáčka nelze použít ani (mnohem méně spolehlivou) autorizaci přes název přistupujícího počítače - vzhledem k tomu, že CGI CSáček sám žádá o dokument, požadavek nakonec přijde vždy z lokálního počítače.

Pokud jste z předchozích několika odstavců získali pocit, že CGI CSáček a chráněné stránky nejdou příliš dohromady, je to správně. Pokud to jen trochu jde, je mnohem lepší použít modul do serveru.

### Vypisování konfigurace CSáčka

Pokud CSáček spustíte s URL s připojeným `?csacek_info`, CSáček vytvoří a vypíše krátkou informační HTML stránku s popisem konfigurace pro toto URL a seznamem zakompilovaných nastavení. Tato vlastnost je užitečná zejména při upgrejdech či ladění konfigurace CSáčku pro daný server. Tuto vlastnost lze v čase kompilace vypnout.

Zpět

## Apache CSáček

CSáček na Apache byl původně na 1.2.4. Nyní je primárně vyvíjen na Apache 1.3.9 s tím, že je možné ho používat i na Apache 1.1.1 i Apache 1.2.X. Není nutné patchovat server, CSáček modul se do serveru přidává jako kterýkoli jiný modul. Pod Apache 1.3.X je ho možné dokonce (s pomocí `axps`) zkompilovat jako DSO modul a nahrávat do serveru dynamicky.

Apache CSáček jede např. na serveru Masarykovy univerzity nebo na 4Web. Pokud ho používáte a líbí se vám, dejte mi vědět.

### Konfigurace Apache CSáčku

Apache CSáček se nastavuje pomocí sady direktiv, uvedených v konfiguračních souborech serveru (ať už těch "globálních" nebo `.htaccess`). Přesný popis viz níže. Lze nastavovat CSáček různě pro každý virtualní server nebo adresář - stačí danou direktivu uvést v příslušné sekci `<Location>` či `<VirtualHost>`.
Pokud je jako parametr direktivy řetezec obsahující mezery, je nutné jej celý uzavřít mezi uvozovky (viz příklad `csacekBarDef`).

Příklad z konfigurace:

> `csacekEngine On
> csacekDefaultCharset windows-1250
> csacekIgnorePrefix /cgi-b/
> csacekBarDef "ADDALWAYS=YES CS"
> `

### Apache, SSL a CSáček - jak to jde dohromady ?

#### Apache-SSL

U Apache-SSL od verze 1.17 stačí v souboru `apache_ssl.c` změnit `SSL_IS_OPTIONAL` na `TRUE`. Apache-SSL pak bude fungovat i bez CSáčku, pouze se přidá několik testů na obsah některých struktur. Tyto testy jsou nutné proto, aby CSáček byl schopen během své práce dočasně "vypnout" SSL. SSL se stále použije při komunikaci s klientem, CSáček dočasným vypnutím dosáhne jen toho, že on sám od jádra Apache dostane předávaný dokument nezakódovaný.

#### mod_ssl

Od verze 2.1.2 funguje CSáček i společně s mod_ssl. Nejsou třeba žádné úpravy kódu. Ať žije mod_ssl!

#### Stronghold

Od verze 2.1.3 CSáček funguje i pod Strongholdem. Testováno na verzi Stronghold 2.4.2 pro NetBSD/i386.

Zpět

## ISAPI CSáček

V rámci vývoje webových stránek Masarykovy univerzity byl financován i vývoj CSáčku pro IIS, tj. ISAPI filtru. ISAPI CSáček je nyní dopracován a od verze 2.1 je k dispozici jako komerční software.

ISAPI CSáček překódovává korektně výstup z ASP, CGI, server extensions (včetně FP extensions) a samozřejmě statické stránky, funguje i pri provozu s SSL a je velmi rychlý - podle namátkových testů asi dvakrát rychlejší než `CZFILTER`.

Pokud máte zájem ISAPI CSáček vyzkoušet, je k dispozici časově omezená verze, která přestane fungovat přibližně po měsíci. Objednat CSáček lze na samostatné stránce - lze tam nalézt i přesné finanční podmínky a další podrobnosti distribuce.

### Konfigurace ISAPI CSáčku

ISAPI CSáček je konfiguruje pomocí záznamu v MS Windows Registry. Jeho větev je `HKEY_LOCAL_MACHINE\Software\CSacek`. Jednotlivé direktivy jsou zadávány jako stringové hodnoty, přesný seznam viz Konfigurace CSáčka.

Záznam v CSáčkovském klíči Registry platí jako "globální". Je ale také možno nastavit vlastnosti CSáčka pro jednotlivé virtuální servery. Konfigurace pro každý virtuální server je uvedena v podklíči CSáček klíče - jako jméno klíče se použije název virtuálního serveru. Je možno uvést i port, od jména serveru je oddělen dvojtečkou. Pokud je port uveden, konfigurace platí jen při přístupu na tento konkrétní port, pokud ne, platí pro jakýkoli přístup na daný virtuální server. Příklad názvu podklíče:

> `www.muj.cz`
> `www.jiny.cz:8000`

V konfiguraci virtuálního serveru mohou být uvedeny všechny direktivy jako v té globální, jen `csacekIgnorePrefix` se pro virtuální servery ignoruje - v době, kdy je třeba, ještě není jasné, na který virtuální server požadavek přišel a musí se tedy použít globální nastavení. Pro `csacekServers` platí něco podobného, ale z jiného důvodu - opět se použije vždy to, co je nastaveno jako "globální" (tedy to, co je nastaveno přímo v CSáček klíči), protože to je opravdu globální věc a nemá smysl to nastavovat různě pro každý virtuální server.

Po každé změně konfigurace je nutno přestartovat Web server - jen tak se zajistí, aby CSáček změněný záznam z registry znovu načetl.

Zpět

## Konfigurace CSáčka

Některé vlastnosti CSáčka lze ovlivnit vhodným nastavením. Pro CGI CSáčka to lze pouze v čase kompilace (možnost run-time konfigurace není pro CGI rozumná). Chování Apache CSáčku a ISAPI CSáčku lze ale poměrně jednoduchým způsobem ovlivnit i později - nastavením v kofiguraci serveru (Apache) nebo nastavením v registry (ISAPI). Zde je popis jednotlivých direktiv:

`csacekBarDef`
  Definice defaultního tvaru lišty; funguje úplně stejně, jako by byl na začátku každého dokumentu uveden příkaz `BARDEF` ve stejném tvaru.
  Default: nic
`csacekChangeURL` On nebo Off
  Nastavuje, jestli se v dokumentu odkazy upravovat tak, aby šly "přes CSáček".
  Default: On
`csacekCompress` On nebo Off
  Nastavuje, jestli se má použít komprese nebo ne.
  Default: On
`csacekDefaultCharset`
  Nastavuje defaultní kódování serveru. CSáček bude předpokládat, že stránka je v tomto kódování, pokud si sama neřekne jinak. Textová data od klienta budou převedeny do tohoto kódování před předáním dat ostatním modulům.
  Default: `iso-8859-2` na Unixu a `windows-1250` na MS Windows
`csacekDefaultPartname`
  Jméno části, které se použije pokud nebylo zadáno při volání CSáčku (tj. URL bylo typu `http://kdesi/toASCII/cosi`)
  Default: .cs
`csacekEngine` On nebo Off
  Zapíná CSáček (a'la Apachovske `RewriteEngine`).
  Default: On
`csacekImplicitWork` On nebo Off
  Pokud cílové kódování není v URL uvedeno (URL je typu `http://kdesi/cosi/neco.html`, tj. `bez toXXX`), CSáček se pokusí uhádnou klientem podporované kódování a automaticky do něj požadovaný dokument převede. Pokud se vám toto chování nehodí, lze implicitní překódování pomocí této direktivy vypnout.
  Default: On
`csacekIgnorePrefix`
  Nastavuje prefix URL, který se bude ignorovat při hledání označení cílového kódování; defaultně `/cgi-bin`. Je to direktiva sloužící pouze k usnadnění přechodu od CGI (C)Sáčku k modulu.
  Upozornění: tuto direktivu lze použít pouze v globální konfiguraci serveru - v čase, kdy je potřeba, ještě není k dispozici lokální konfigurace.
  Default: /cgi-bin
`csacekServers`
  Seznam "CSáček kompatibilních" serverů - v předávaných HTML dokumentech se odkazy na tyto servery automaticky upraví tak, aby se zachovalo uživatelem používané kódování a jazyková verze
  Jednotlivé názvy serverů se píšou navzájem oddělené čárkou. Je možné zadat i port (od jména serveru oddělený dvojtečkou) - pak se budou odkazy měnit jen pokud URL vede na daný port daného serveru.
  Default: Apache - všechny virtuální servery, ISAPI - servery, které mají vlastní konfiguraci v CSáček větvi v registry
  Příklad: `www.nekde.cz:900,www.cosi.cz`
`csacekTemplateDir`
  Adresář se šablonami - momentálně pouze šablonou k `whichcode` (soubor `whichcode_template.html`).
  Default: `/www/csacek` na UN*Xu a `C:/CSacek` na MS Windows.
`csacekTestJS` On nebo Off
  Experimentální vlastnost, v příští verzi může zmizet nebo se změnit.
  Zapíná heuristiku pro rozpoznávání "čistého" JavaScript dokumentu (default vypnuto). Pokud je dokument typu `text/html`, při zapnutí této direktivy CSáček prohlédne prvních 200 znaků dokumentu nebo první tři neprázdné řádky. Pokud se zde nalezne řetězec `//` nebo `/*` (JavaScript komentář) nebo znak `;` na konci řádku (případné mezery nebo tabelátory mezi znakem `;` a koncem řádku jsou ignorovány), dokument zpracovává jako `text/plain`, tedy HTML tagu (např. odkazy) nejsou přepisovány.

  > Pozor - při neopatrném použití může tato heuristika dávat špatné výsledky. Mohou existovat platné HTML stránky, které splňují výše uvedené kritéria a nejedná se přitom o JavaScript zdrojový kód. Pokud možno tuto direktivu vždy aplikujte jen na omezený podstrom dokumentů a zkontrolujte, že absolutní odkazy a tagů `<A>`, `<FORM>` atd. jsou správně přepisovány při použití explicitního překódování (jako např. `/toASCII/`).

CSáček je standardně "zapnutý", pokud ho chcete vypnout, je třeba ho explicitně vypnout pomocí `csacekEngine`. Stále se bude interně z URL odstraňovat CSáčková část (tj. pokud server bude požádán o `http://server/toASCII/dir/doc.html`, převede se požadavek interně na `http://server/dir/doc.html`), CSáček ale s dokumentem poslaným nazpátek klientovi nebude nic dělat.

Zpět

## Seznam CSáčkovských příkazů

Příkazy v CSáčku se uzavírají mezi `<?` a `?>`. `?` je použito proto, že se jedna o speciální SGML "tag", určený pro vkládání příkazů jazyků vložených (embedded) do SGML dokumentu. Kvůli kompatibilitě s SaCzechem je podporováno také `<!--` a `-->`.

Příklad použití:

> `<? BAR EN LONGNAMES=YES ?>`

Obecně platná pravidla:

- příkaz(y) musí být uzavřen(y) do dvojice `<?` a `?>`; je-li jich víc, musí být navzájem odděleny znakem ';' (středník)
- příkaz včetně parametrů může být na několik řádků
- ve jméně příkazu nezáleží na velkých/malých písmenech (tj. např. `PART` se považuje za ekvivalentní s `PaRt`); to samé většinou platí i pro parametry (pokud to tak není u konkrétního příkazu je to vždy uvedeno)
- parametry příkazu se vyhodnocují obvyklým způsobem zleva doprava; jsou podporováný znaky " a ' s obvyklým HTML významem; zápis `\x` způsobí, že znak `x` nebude chápán jako speciální, ani když je (dobré zejména pokud má být znak " nebo ' v textu některého parametru)
- při zadání vzájemně protikladných parametrů (například u příkazu `BAR`), platí poslední uvedený
- parametry příkazu mají vždy přednost před defaultním nastavením
- pokud se příkaz nepozná, opíše se do výstupu, včetně `<?` a `?>`

### Příkazy:

- BAR, BARDEF
- csacekServers
- DOMAIN
- CHARSET
- MYCHARSET
- PART
- SET

  ### ... 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ódování`
    Příklad použití: `MYCHARSET=ISO-8859-2`

    - říká CSáčku, že následující text je zapsán v zadaném kódování.
    - může být uvedeno jméno kteréhokoli podporovaného kódování
    - příkaz lze v dokumentu použít i několikrát, vztahuje se na něj omezení `PART`, `DOMAIN` a `CHARSET`

  `BAR, BARDEF`
    Syntax: `BAR[DEF] [parametry]`
    Příklad použití: `BAR LOGNAMES=YES ADDWHICH=NO SEP=" o "`

    Příkaz `BAR` slouží k 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. Pokud je příkaz uveden bez parametrů, vypíše lištu ve tvaru, jak bylo nastaveno předchozími příkazy `BAR(DEF)` nebo ve tvaru jak bylo nastaveno při kompilaci CSáčku.

    `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ší volání příkazu `BAR`.

    Parametry:

    `ADDALWAYS=[YES|NO]` | nastavuje, zda se má na konci dokumentu automaticky přidat lišta (defaultně se nepřipíše)
    `ADDHEADER=[YES|NO]` | nastavuje, zda bude vypsána hlavička (`HEADBARTEXT`) - default je vypsat
    `ADDTAIL=[YES|NO]` | nastavuje, zda bude vypsán závěr (obsah `TAILBARTEXT`) - default je vypsat
    `ADDWHICH=[YES|NO]` | nastavuje, zda se má do lišty připsat i odkaz na výběr kódování přes standardní `whichcode`
    `CS` nebo `CZ` | česká verze lišty (default)
    `DEFAULT` | nastavení parametrů lišty do tvaru, který byl definován při instalaci CSáčku jako standardní; zrušení veškerých změn provedených předcházejícími příkazy `BAR` nebo `BARDEF`
    `EN` | anglická verze lišty
    `EHEADTEXT="XX"` | definice hlavičky lišty v anglické verzi
    `ETAILTEXT="XX"` | definice závěru anglické lišty
    `HEADTEXT="XX"` | definice hlavičky lišty v české verzi
    `LONGNAMES=[YES|NO]` | nastavuje, zda se v linkách na dokument použijí dlouhá jména
    `SEP="XX"` | definice oddělovače mezi kódovými linkami (default je mezera)
    `TAILTEXT="XX"` | definice závěru české lišty
    `WHICHCODE="XX"` | definice textu linky na výběr kódování pomocí `whichcode`
    `název kódování="XX"` | definice textu linky na dokument v daném kódování

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

  `PART`
    Syntax: `PART název_části[="text"] ...`
    Příklad použití: `PART EN`

    Tímto příkazem lze vyznačit, ve kterých verzích dokumentu se má vypsat následující text (text za tímto příkazem). Pokud se použije tvar název_části="nějaký_text" a název_části souhlasí s verzí dokumentu, nějaký_text se vloží do výstupu, aniž by to mělo dopad na (ne)vypisování následujícího textu; tuto syntax lze velmi dobře využít pro vpisování krátkých, na verzi závislých textů do jinak společného dokumentu. Názvy platné části získává CSáček ze jména, pod kterým byl spuštěn; jestliže URL bylo něco ve tvaru: `http://server/cgi-bin/toXXX.FOO/cosi`, platná část je část "`FOO`". Pokud CGI skript neměl příponu (URL bylo ve tvaru `http://server/cgi-bin/toXXX/cosi`), tak je platný název části "`CS`".

    Speciální "názvy částí":
    - `ALL` - následující text bude vypsán vždy
    - `OTHER` - následující text bude vypsán tehdy, jestliže od posledního `PART ALL` nebyl `PART` volán s platným parametrem název_části

    Zde je uveden malý příklad; bude funkční pouze pokud se dokument už filtruje přes CSáček.

  `DOMAIN`
    Syntax: `DOMAIN označení_domény[="text"] ...`
    Příklad použití: `DOMAIN ics.muni.cz 147.251`

    Syntaxe je podobná jako u `PART`. Části dokumentu 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. Ve výše 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`. Lze samozřejmě zadat i celé adresy. Jména místo IP adres lze používat pouze tehdy, provádí-li server převody IP adres na jména.
    Příkaz `DOMAIN` není určen k tomu, aby řídil přístup k citlivým datům; vzhledem k povaze DNS se nedá na spolehlivost jmen či IP adres příliš spolehnout. `DOMAIN` tedy slouží spíše pro selektivní zobrazení dat, které mohou být zajímavé jen pro určitou omezenou skupinu lidí z určitých domén nebo adres.

    Speciální "názvy domén":
    - `ALL` - následující text bude vypsán vždy
    - `OTHER` - následující text bude vypsán tehdy, jestliže od posledního `DOMAIN ALL` nebyl `DOMAIN` volán s platným parametrem označení_domény

  `CHARSET`
    Syntax: `CHARSET název_kódu[="text"] ...`
    Příklad použití: `CHARSET ASCII ISO-8859-1 KAM`

    Syntax je stejná jako u `PART` či `DOMAIN`. Příkaz `CHARSET` slouží k řízení obsahu dokumentu podle kódování, do kterého se převádí. Jeho primární účel je, aby bylo nějakým solidním způsobem možné předávat vybrané kódování na servery s jiným systémem češtiny, než (C)Sáček nebo WWWdia kompatibilní.

    Speciální "názvy kódů":
    - `ALL` - následující text bude vypsán vždy
    - `OTHER` - následující text bude vypsán tehdy, jestliže od posledního `CHARSET ALL` nebyl `CHARSET` volán s platným parametrem kód

  `csacekServers`
    Syntax: `csacekServers jmeno[:port] [jmeno[:port] ...]`
    Příklad použití: `csacekServers www.ics.muni.cz www.moje.cz:8008`

    Způsobí, že odkazy na zadané servery budou přepisovány podobným způsobem jako absolutní odkazy na server, na kterém CSáček běží. Pokud není zadán port, chápe se to jako kterýkoli port na daném serveru.

    Starší příkaz `csacekServer` je stále podporován, ale neměl by už být používán.

  `SET`
    Syntax: `SET volba1=hodnota1 ...`
    Příklad použití: `SET CHANGEURL=NO`

    Nastavuje některé vlastnosti zpracování textu. Rozpoznávané parametry mohou být nastaveny na `YES` nebo `NO`.

    Parametry:

    `CHECKURL` | nastavuje, jestli se má v následujícím textu u HTML značek, používajících URL (`A`, `BASE` atd.), toto URL přepisovat tak, aby vedlo přes CSáček; defaultně zapnuto
    `EXECCMDS` | nastavuje, jestli se v následujícím textu mají provádět CSáček příkazy; i v případě, že je provádění příkazů vypnuto se stále některé provádějí (např. `SET`) - jinak by nebylo možné příznak zase zapnout; defaultně zapnuto

  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 2.1.8 (17.3.2002)

  - META tag v xHTML tvaru (`<meta ... />`) je podporován - lomítko a původní názvy parametrů jsou zachovány
  - přidáno csacekTestJS: pokud zapnuto (default vypnuto), CSáček použije heuristiku pro uhádnutí, zda předávaný `text/html` text není ve skutečnosti čistý JavaScript
  - parser přegenerován novou verzí Bisonu - 2.18
  - výstup z `csacek_info` je nyní validní HTML 4.03 (oveřeno validátorem W3C)
  - zrušeno přepisování DOCTYPE (potřeba jen pro MSIE 3.0 a ten už není používán
  - při zpracování embedded JavaScriptu (kódu mezi `<SCRIPT>` a </SCRIPT>) se vypne přepisování všech tagů, včetně `FONT`
  - mírná optimalizace memory managementu pro dočasnou paměť
  - zajištěno, aby parametr při volání `isspace(3)` nebyl záporný - mohlo vést k pádu modulu pokud tag obsahoval české znaky
  - tag `<?xml>` je nyní předáván bez poničení
  - hlavička `Content-Length` se posílá i při metodě `HEAD` - nemusí být správně, ale jako informace je lepší než žádná hlavička
  - verze 2.1.7 obsahovala chybu (zanechaný debug výpis), 2.1.8 ji opravuje

  verze 2.1.6 (12.4.2001)

  - ISAPI: oprav pád při poslání POST formuláře bez dat, CSáček je nyní také opatrněji detekuje začátek nového požadavku; CSáček tak funguje na IIS 4.0 (pomoc: Jaromír Ocelka)
  - configure: pro převod na velká písmena použij `tr abcd...z ABCD...Z` misto `tr [a-z] [A-Z]` - tu druhou formu některé implementace tr neznají (našel: Libor Bubík)
  - cstools: přidán "stupeň" (`DEGREE SIGN`) a paragraf (`SECTION SIGN`)
  - oprava kódu počítajícího priority v `Accept-Charset`, což mohlo vést k výběru špatného kódování (Martin "Marji" Čermák)
  - hádání uživatelem podporovaného kódování se řídí hlavičkou `Accept-Charset` i tehdy, když klient v `Accept-Language` poslal `cs` (Martin "Marji" Čermák)
  - URL se opravuje i u atributu `SRC` tagu `SCRIPT` (doporučil: Daniel Kafka)
  - oprava: v tagu `<?xml ...?>` se omylem po přepsání názvu kodování vložila mezera mezi `<?` a `xml`, což onen tag znehodnotilo
  - `configure`: přidán parametr `--with-apxs`, který umožňuje explicitně zadat celou cestu k apxs, pokud není v cestě; také byl mírně upraven algoritmus hledání `apxs`, nyní se dívá také do několika často používaných adresářů, které nemusí být v cestě (opravu poslal Ivo Panáček)
  - součástí distribuce je nyní `mod_czech` kompatibilní soubor `cestina.html` (vyrobil a dal k dispozici Ivo Panáček)

  verze 2.1.5 (3.5.2000)

  - Apache + mod_ssl: při sub-requestu se nyní dává zpět SSL kontext, aby mod_ssl mohl udělat příslušná ověření; to mimo jiné znamená, že direktiva `SSLRequireSSL` funguje tak jak má
    (našel Petr Šimek)
  - opravena další chyba zpracování uvozovek/apostrofů v odkazech
    (našel Robert Janáček)
  - Apache: na `csacek_info` stránce se vypisuje i to, jestli byl modul zkompilován s podporou EAPI (podpora EAPI je nutná pro korektní funkci CSáčku s `mod_ssl`)
  - Apache: opravena chyba zanesená při úpravách ve verzi 2.1.4 - některé konfigurační parametry byly pro virtuální servery ignorovány a vždy se použily globální hodnoty
    (našel Pavel Kalián)

  verze 2.1.4 (31.3.2000)

  - oprava přepisování hlaviček `Set-Cookie` - při určitém tvaru cookie CSáček alokoval méně paměti než potřeboval a mohl přepsat kus náhodné paměti, což vedlo nejčastěji k brzkému pádu serveru (našel: Tomáš Zeman)
  - přidáno FAQ
  - seznam nakonfigurovaných CSáček serverů se udržuje jako globální (předtím se pro Apache sdílel jen seznam virtuálních serverů); direktiva `csacekServers` může být použita jen v konfiguračních souborech serveru (tedy nesmí být v `.htaccess`)
  - cstools: opraven překlad Ú (U s čárkou) a Ů (U s kroužkem) v kódování bratří kameníků (oprava: Tomáš Churavý)
  - při úpravě hlavičky `Accept-Charset` se jméno aktivní části (viz `PART`) přidá jen tehdy, pokud se nerovná prvnímu tokenu
  - implementována záplata na podivné chování PHP4v3
  - znak označující CSáček "tag" (defaultně `?`) lze změnit pomocí parametru `--with-cmdtag` skriptu `configure`
  - `PART`: opraveno zpracování atributu `OTHER`
  - zrušena vlastnost CSáčku, kdy se v URL typu `http://server/.XXX/neco/` část `XXX` vzala jako název části a předalo se URL `http://server/neco/` - není užitečná z způsobuje problémy (na chybu upozornil Petr Linke)
  - CGI: server Zeus CGI skriptům tvrdí, že klient podporuje HTTP/1.1 i když to tak není (`SERVER_PROTOCOL` je vždy `HTTP/1.1`) - pokud CGI CSáček jede pod Zeusem, neveří mu v tomto ohledu ani slovo a vždy použije jen vlastnosti `HTTP/1.0`
  - doc: přidán velmi stručný soubor `INSTALL` - slouží pro odpíchnutí a informaci, kde lze najít více
  - opravena chyba, kdy pro určité stránky CSáček předal na výstup jen jejich část (s nalezením chyby pomohl Honza Dušák a Radek Vybíral)
  - při parsování dokumentu na CSáček příkazy se ošetřují i případné chyby v HTML kódu - jako konec příkazu se vždy povačuje první nalezené `>`, i když je v uvozovkách
  - při přepisování URL se názvy HTML tagů do výstupu píší ve stejné podobě, jako byly uvedeny v originále
  - změna průběhu hádání podporovaného kódování při implicitním překódování - `Accept-Language` se dává větší váha, `Accept-Charset` se parsuje správně tak, aby se použilo kódování s nejvyšší prioritou (`iso-8859-2` je stále preferováno) - založeno na diskuzi s Petrem Součkem
  - Poláci, Maďaři dostávají dokumenty také v `iso-8859-2`, jako Češi a Slováci
  - Apache, ISAPI: pročištěn kód spravující konfiguraci CSáčku
  - změna struktury `csa_params_t` - místo sady "flagovitých" atributů se používají bitové příznaky v jediném atributu `flags`
  - debug pod MS Windows: místo čísla procesu se používá náhodné číslo - PID se pod Windows příliš rychle recykluje
  - `CSA_USE_CHARSET` už není nastavitelné, `charset` se v hlaviččce `Content-Type` posílá vždy - i tehdy, pokud je výstupní kódování `US-ASCII`
  - cstools: přidány aliasy `lat`, `iso` a `koi` - používá je `mod_czech` a usnadní se tak přechod na CSáček (oprava: Zdeněk Šindelář)

  verze 2.1.3 (25.2.2000)

  - změna licence na BSD-like
  - Apache: CSáček funční i se Strongholdem (testováno na Stronghold 2.4.2 pro NetBSD)
  - URL se v sekcích `<SCRIPT>` nepřepisuje - CSáček má problémy s JavaScriptem a ostatními klient-side skripty; tohle je dočasné řešení, než bude implementována opravdová oprava
  - pročištěn kód vyhledávající CSáček příkazy, je nyní optimalizován pro obvyklý případ, kdy nalezená sekvence `<--` nebo `<?` neoznačuje CSáček příkaz
  - zoptimalizován a pročištěn kód starající se o překódování řetězců
  - opravena chyba v `csa_decodequery()` - pokud vstup obsahoval sekvence `%XY`, posunul se špatně ukazatel pozice a kód se pokoušel číst za koncem předaného řetězce
  - ISAPI: pročištěno zpracování vstupních dat (adaptace na změny `csa_decodequery()` v minulé verzi)
  - opraveno vypisování seznamu CSáček serverů v `csacek_info`
  - `configure`: jména parametrů a vypisované zprávy poangličtěny, mírné změny názvů (podrobněji viz `./configure --help`); jako název defaultního kódování serveru lze použít jakýkoli název podporovaný v příkazech `MYCHARSET` nebo `META` tagu
  - mezi přípustné názvy kódování přidáno `iso8859-2` a `iso8859-1` - tato mutace správných MIME názvů se občas používá

  verze 2.1.2 (25.1.2000)

  - CSáček má své logo!
  - Apache: přidána podpora `mod_ssl`
  - Apache, CGI: odstraněny problémy s uploadem souborů, nyní funční (našel: Michal Krause)
  - ISAPI: opraveny problémy s autentifikací typu NTLM (našel: Ladislav Kubeš)
  - přepsán a zoptimalizován kód udržujíjí seznam CSáček serverů, rychlost vyhledávání pro seznam o velikosti 1000 se zvýšila asi 50-80x, pro 50 serverů asi 6-10x
  - Apache: opravena chyba s `apxs` - `apxs` se nevolalo ani v případě, že ho `configure` našel (našel: Radek Vybíral)
  - hlavička `Vary` se teď už opravdu posílá tehdy, když má (našel: Hynek Med)
  - přidána podpora XML tagu `XML` - pomocí tohoto tagu se indikuje mimo jiné použité kódování znaků; CSáček použije jednak pro určení, v čem je daný dokument napsán, druhak ji přepíše tak, aby odpovídala kódování, do kterého se dokument převádí
  - CSáček části: pokud název části nebyl uveden v URL předávaného dokumentu, necpe se ani do přepisovaných URL
  - opravena chyba zpracování `Range` v případě, že klient podporuje HTTP/1.1 a/nebo kompresi
  - dokumentace: dopsán podrobný průvodce instalací CSáčku
  - Apache: nyní je možné modul používat se zapnutým laděním (`--with-debug`) - `csa_debug_register_cleanup()` chybně nezadalo child_cleanup, což vedlo k dereferenci nulového ukazatele např. při spouštění CGI
  - přidán CSáček příkaz `csacekServers`, syntaxi má podobnou jako stejnojmenná konfigurační direktiva
  - pročištěna struktura `csa_params_t`, význam jednotlivých "flagovitých" atributů převzal atribut `flags`
  - `csa_decodequery()` zoptimalizováno a vrací nyní vždy řetezec o stejné délce jako byl ten původní; umožňuje to rapidní zjednodušení volajícího kódu (zejména v ISAPI modulu) - z Apache modulu byl nyní zbytečný kód odstraněn, z ISAPI ještě ne
  - úpravy kódu tak, aby byl zkompilovatelný pokud možno bez warningů i v případě zapnutí velmi přísných kontrol kompilátoru gcc; příslušné parametry se při kompilaci CGI použijí tehdy, pokud se skriptu `configure` dá parametr `--with-debug`

  verze 2.1.1 (15.11.1999)

  - opravena fce `csa_strcasestr()` aby se hledalo opravdu hledalo nezávisle na velkých/malých písmenech ve všech případech; chyba se projevila například tak, že Apache nebo ISAPI CSáček URL typu `http://nekde/guess/cosi.html` přesměroval na `http://nekde/guessISO-8859-2/cosi.html` místo na `http://nekde/ISO-8859-2/cosi.html`.
    Našel Jakub Rosa.
  - ISAPI: opravena potencialní chyba při předávání chunkovaných dat - pokud server posílal hlavičky na několikrát a `Transfer-Encoding` nebylo až v té poslední dávce, jádro CSáčku považovalo data za nechunkované
  - Apache: direktiva `csacekChangeURL` nyní funguje.
    Opravu poslal: Pavel Krebs
  - při přepisování META tagu se použijí stejné uvozovky jako byly ve zdroji; také opravena chyba ve vypisování atributu `HTTP-Equiv`, kde jeho hodnota se neukončovala uvozovkou
  - ISAPI, Apache: pokud na začátku URL byl jakýkoli podřetězec `guess`, `whichcode` nebo `__CHARSET__`, bralo se to chybně jako označení cílového kódování/akce; CSáček při následném zpracování zahlásil "Bad output code name".
    Našel Jakub Rosa.
  - ISAPI: expirující verze psala do Event Logu řetězec `991026:991126` nebo podobný; jednalo se o omylem zanechaný ladicí výpis
  - CGI: při subrequestu se nyní používá HTTP/1.1 a v odpovědi serveru se nyní posílají všechny hlavičky i tehdy, zpracovává-li se HTTP/0.9 požadavek - nyní HTTP/0.9 funguje proti Apache serveru i v případě, že požadavek jde přes CGI CSáček
  - CSáček nyní posílá hlavičku `Vary` - nutné proto, aby případná proxy keš věděla, podle čeho se odpověď mění a klientům nabídla pro ně vhodnou verzi dokumentu.
    Našel Hynek Med.
  - překódovávají se i chybové odpovědi od serveru
  - Apache: opravena chyba při použití chunked kódování (tj. proti HTTP/1.1 klientům), kdy se chunked odpověď nezakončovala sekvencí `0\r\n\r\n`.
    Našel Patrik Rak.
  - Apache: použití direktivy `csacekRecodeInput` nyní nezpůsobí pád serveru při čtení konfigurace
  - Apache: opraveno zacyklení v případě, že HTTP/1.1 klient požádal o dokument delší než `X_CSA_OUT_BUFLEN_CHUNK` (tj. 8150) bajtů
  - úprava dokumentace (INSTALL): defaultní RedHat konfigurace Apache používá direktivy `ClearModuleList` a `AddModule`, pokud má CSáček jako modul fungovat, je třeba na příslušné místo přidat direktivu `AddModule mod_csacek.c`, jinak CSáček není aktivní (a tedy "nefunguje")
  - při přepisování tagů se použijí uvozovky nebo apostrofy tak, jak bylo uvedeno ve zdroji místo toho, aby se vždy použily uvozovky - znamená to, že např. následující JavaScript kód:

    > `val = "<A HREF='http://nekde/neco.html'>"`

    je platný i po překódování CSáčkem

  verze 2.1.0 (23.9.1999)

  - CSáček nyní funguje i jako ISAPI modul
  - Apache: pokud je na systému k dispozici `apxs`, modul se s jeho pomocí rovnou i zkompiluje
  - plná podpora HTTP/1.1 uvnitř CSáčku, včetně podpory `Range` a chunked kódování; CSáček také HTTP/1.1 klientům posílá data dokumentu průběžně, což šetří paměť i čas
  - Apache, ISAPI: nová direktiva `csacekImplicitWork` - pokud se vypne, CSáček pracuje jen v případě, že kódování bylo explicitně určeno (tj. požadované URI bylo typu `.../toXXX/...`)
  - Apache, ISAPI: nová direktiva `csacekServers`, direktiva `csacekServer` zrušena
  - překódovává se cokoli, co má `Content-Type` začínající na `text/` - kromě `text/html` se všechny takové dokumenty zpracovávají jako by byly typu `text/plain`
  - zrušen "příkaz" typu `<?proměnná?>` - praktické využití bylo jen pro `whichcode` (tam se to nyní dělá jinak) a jeho podpora zmanenala poměrně o dost víc práce při zpracování CSáček příkazů
  - přidána základní podpora azbuky - CSáček umí překódovávat mezi `KOI8-R`, `ISO-8859-5`, `windows-1251` a `CP866`; podpora převodů azbuka <-> latinka a azbuka <-> Unicode bude přidána v 2.1.1

  verze 2.0.9 (13.9.1999)

  - `META` s označením kódování se nyní neruší, pouze se parametr `charset` přepíše na správnou hodnotu - MSIE naštěstí při ukládání (Save) dokumentu při případném převodu do jiného kódování přepisuje i `META` tag
  - překódovávání dat serveru: pokud vzorek vypadá na `iso-8859-1`, pokračuje se v hledání - může se jednat o text, který jen náhodou obsahuje platné `iso-8859-1` znaky, ale jedná se ve zkutečnosti o text v `iso-8859-2`; např. tehdy, když text obsahuje jen znak 'ť' - v `iso-8859-1` je na stejné pozici ve znakové sadě jeden druh apostrofu
  - Apache: při překódování dat od klienta se neupdejtovala hodnota vstupní hlavičky `Content-Length`, což mohlo vést k zajímavým efektům v případě, že tuto hodnotu někaterý modul používal k určení celkové délky vstupních dat; např. u PHP to vedlo k tomu, že se ke vstupním datům přidávalo náhodné "smetí"
    díky moc zejména Michalovi Krause za neocenitelnou pomoc při zjišťování, v čem je vlastně chyba
  - přidána podpora několika dalších windows znaků: left single quotation mark, right single quotation mark, right double quotation mark (Petr Snajdr)

  verze 2.0.8 (31.8.1999)

  - starší verze `mod_html` padala, pokud odpověd od CGI skriptu neobsahovala `Content-Type` - CSáček proto posílal jako `Content-Type` posílal `text/plain` v případě, že v původní odpovědi nebyl specifikován; nyní upraveno tak, aby se to dělalo jen u (Fast)CGI mutace a když opravdu CGI běží pod serverem s `mod_html` aktivním
  - hádaní kódování a jazyka při implicitním překódovóní: pokud klient má `sk` nebo `cs` mezi preferovanými jazyky a neposlal `Accept-Charset`, pošli mu dokument v `iso-8859-2` -> eliminuje se z velke casti potreba delat DNS lookup
  - Apache-SSL: novejsi verze (minimalne od verze 1.29) uz neni treba patchovat, staci v `apache_ssl.c` nastavit `SSL_IS_OPTIONAL` na `TRUE`
  - z hlaviček `If-Modified-Since` se musí odstraňovat nestandardní parametr `length`, který používá MSIE - CSáčkem předaný dokument může mít jinou délku, než je fyzická velikost dokumentu a zbytečně se dokument předává znovu i tehdy, když se nezměnil
  - opraven problém s kompilací pod AIX 4.2 nativním IBM kompilátorem

  verze 2.0.7 (13.7.1999)

  - opraven nefunkční příkaz csacekServer: jméno serveru při vkládání do seznamu CSáček serveru nezkopírovalo do "trvalé" paměti a nechalo se zkopírované z dočasného poolu; díky tomu se později při testování hodnoty mohl pointr odkazovat na nějaké znovu využité místo a to mohlo obsahovat prakticky jakákoli data, pravděpodobně už však ne to původní jméno serveru; za určitých okolností to mohlo způsobit i pád CSáčku
    tato chyba neměla žádný vliv na direktivu `csacekServers` v konfiguraci serveru
  - opravena stará chyba v `csa_DocParts()` - při použití `PART` ve tvaru `<? PART xx=yy OTHER=neco ?>` se při platném `OTHER` jeho text vypíše jen poprvé nebo po `<? PART ALL ?>`
  - přepisování URL: neni-li v URL za CSáčkem uvedeno URI, připiš tam URI aktuálního dokumentu vč. `QUERY_STRING` - lze využít při odkazu na dokument v jiné jazykové verzi nebo třeba pro `whichcode` (v efektu je tato změna obdoba lampovského `select` až na to, že nepotřebuje, aby klient posílal hlavičku `Referer`)
  - cstools: opravena velmi stara chyba v `cstools_guess_charset()` - pokud v textu byly nějaké CSáčkovi neznámé znaky, při procházení cstools_map[] mohl číst za koncem pole, což v závislosti na OS nemuselo mít žádný následek nebo mohlo způsobit pád CSáčka (objeveno při ladění ISAPI filtru)
  - cstools: do tabulek přidán znak apostrof - ne ten klasický ', ale ten, vyskytující se v iso-8859-[12] a windows-1250 na pozici 180
  - Apache: zoptimalizováno zpracování dat při `POST`, nyní méně náročné na paměť
  - komprese: dává se přednost deflate před gzip
  - překódovávání dat od klienta do kódování serveru lze přepínat konfigurační direktivou, nastavení při kompilaci se používá jako default
  - zoptimalizováno překódovávání uživatelských dat
  - `csacek_info` předěláno, mimo jiné vypisuje konfiguraci platnou pro dané URL, informace lépe setříděny
  - zlepšena podpora přepínání jazykové varianty - pokud URL obsahuje `.../to.XX/...` nebo `.../toGUESS.XX/...` a uživatel si vybral nějaké určité kódování, ta CSáčkovská část se přepíše tak, aby zachoval uživatelův výběr kódování
  - CSáček na MS Windows: defaultní kodování změněno na `windows-1250`, samozřejmě lze změnit v konfiguraci (pro CGI jen přímou editaci `NT/NTcsa_config.h` a rekompilací)
  - `User-Agent` se nyní nijak nepřenastastavuje - zbytečně to zaneřádí logy
  - překódovávání dat od uživatele: opravena chyba v `cstools_guess_charset()`, která způsobila, že data obsahující znak "nový řádek" nebo tabelátor, se považovala za binární a nepřekódovala se
  - opravena chyba v `csa_setitem()`: za určitých okolností se mohlo zacyklit (nedělalo problémy v současném kódu, projevilo se až při vývoji ISAPI CSáčka)
  - `whichcode_template.html`: v anglické verzi opraveno několik gramatických chyb
  - `csa_init_params()`: pokud je cfg NULL, použij csa_cfg_def - také opravuje známou chybu CSáčku 2.0.6, při které CSáček hlásil "Bad default source code name"
  - Apache: opraveno předávání Set-Cookie, nyní se předájí správně všechny bez duplikací
  - zdrojový kód nyní testován lintem, který objevil několik potenciálních chyb a write-only proměnných
  - opraveno `csa_is_csacek_server()`: nyní opravdu funguje přepisování URL na ostatní CSáček servery
  - `csa_process_headers()` - mirná optimalizace: nezpracovávej hlavičky, ktere stejně nebudou předány klientovi

  verze 2.0.6 (24.2.1999)

  - pokud není výstupní kódování určeno explicitně a hádá se, použije se iso-8859-2 pro klienty, kteří nespecifikovali podporované kódování a chtějí dokument v češtině
  - Apache: POST data se předávají korektně i v případě, že je vypnuté automatické překódování uživatelského vstupu do kódování serveru
  - opravena chyba v převodu do Unicode (UTF-8), kód mírně zoptimalizován
  - při převodu z windows-1250 do jiného kódování se převádí znaky `copyright sign`, `trade mark sign` a `registered sign` do příslušné HTML/textové podoby; do překódovacích tabulek přidána podpora pro znak `multiplication sign`
  - zoptimalizováno "hádání" uživatelem podporovaného kódování/jazyka (eliminován DNS lookup v případě, že se už z hlaviček uhodne podporovaný jazyk a znaková sada), kód pročištěn a zčitelněn
  - zoptimalizován kód pro úpravu URL
  - zrušen banner (byl to HTML komentář, který CSáček vpisoval do předávaných HTML dokumentů)
  - opravena poměrně stará chyba ve zpracování hlaviček vrácených sub-requestem - na jednom místě se kopírovalo o jeden znak méně než mělo, takže například hodnota hlavička
    `Content-Type: text/html; charset=iso-8859-2`
    se pochopila jako `text/htm` a dokument se pak vůbec nekonvertil
  - komprese: kosmetické změny inicializačního kódu, žádné funční změny
  - ošetření chyb klientů: MSIE 3.0 nepoužije "české", tj. CE fonty pro fonty explicitně definované pomocí tagu `FONT`, pokud dokument není ve `windows-1250`; CSáček nyní při převodu do jiného kódování než `windows-1250` upravuje `<FONT FACE=...>` tak, aby obsahovalo nejdříve CE variantu
  - ošetření chyb klientů: MSIE 3.0 nezobrazí dokument, pokud tento má vyznačené kódování v hlavičkách a obsahuje tag `<!DOCTYPE>` s uvedeným URL na použité DTD; CSáček nyní to URL odstraňuje, aby to fungovalo i přes proxy

  verze 2.0.5 (15.11.1998)

  - patch release - stabilní verze, doufejme už poslední v řadě 2.0.X
  - porty: použití `alloca(3)` nyní portabilnější, CSáček nyní funguje i na systémech bez (fungujícího) `alloca(3)`
  - Apache: pod Apache 1.1 nyní modul funguje (v kódu se používal Apachem 1.1 nepodporovaný návratový kód 301 Moved Permanently)
  - (Fast)CGI: opraveno dublování hodnoty `Content-Length` při přeposílání POST dat
  - opraveno dublování znaku '=' v URL (chyba zavlečena při opravě chyby s rovnítkem při zpracování parametrů typu `jméno=hodnota`); při té příležistosti přepsán kód kolem do mnohem čitelnější podoby
  - CSáček lze nyní zkompilovat také pod AIX 4.2; získal jsem nový přístup na RS6000 stroj s AIXem, takže je to nyní jedna z podporovaných platforem
  - CSáček lze nyni zkompilovat i pod HP-UX (testováno na HP/UX 10.20 s K&R cc); bohužel nemám stálý přístup k systému s HP/UX

  verze 2.0.4 (30.10.1998)

  - patch release
  - jedna velmi (alespoň půl roku) stará chyba - při zpracování parametru CSáček příkazu ve tvaru `jméno=hodnota` se příkaz špatně rozeznal a neprovedl pokud `hodnota` nebylo v uvozovkách a obsahovalo rovnítko
  - aby se upravoval obsah HTML tagu `META`, `A`, `BODY` a `FORM`, musí být v dokumentu opravdu uvedeny jako HTML tag; předchozí implementace umožňovala, aby byly uvedeny i v HTML komentáři (`<!--` a `-->`), což mohlo někdy vadit
  - Apache: opraven kód tak, aby modul opět fungoval i pod Apache 1.1
  - (Fast)CGI: při předávání dokumentu přímo ze souboru se špatně nastavil příznak, zda se jedná o HTML dokument - byl vždy false (má význam jen pro vypisování CSáček banneru)
  - přepisování URL nefungovalo korektně, pokud přepisované URL už obsahovalo CSáček a začínalo na `csacekIgnorePrefix` (defaultně `/cgi-bin`)
  - plain UNICODE opravy: odstraněna chyba při překódování do plain unicode (tj. klasického 2B zapisu); banner a URL při automatickém přepisu URL se nyní před vložením do výstupu překódují
  - úprava zacházení se seznamem CSáček serverů - pokud není u direktivy `csacekServer` zadán port, chápe se to jako kterýkoli port - má význam pro automatické přepisování URL
  - Netscape a komprese: v NC 4.5b2 je chyba, která způsobí, že za určitých okolností se místo dokumentu zobrazí prázdná stránka; tento problém se dá obejít například tak, že hlavička `Via` má délku jakéhokoli tokenu maximálně rovnu 60 bajtům
  - Apache: opraveno zacházení s hlavičkami `Connection` a `Keep-Alive`, téměř nikdy by nyní server neměl posílat klientovi požadavek o uzavření spojení při Keep-Alive (tj. `Connection: close`) ani při předávání dynamických dat
  - komprese: chybně se kompresovalo vše a ne jen text/html a text/plain; pod Apache toto "vše" znamená text/html, text/plain a dynamicky generovaná data; za určitých okolností se na začátek dat připsala inicializační hlavička komprese, ale obsah se nekompresoval --> data se pokazila
  - `__LAMPACHARSET__` se nenahrazovalo správnou hodnotou, pokud se používalo implicitní kódování (tj. když URL bylo bez `/toXXX`)
  - Apache: modul nešlo použít pod Apache 1.3X (na jednom místě bylo použito `table_get()` místo `ap_table_get()`)

  verze 2.0.3 (13.10.1998)

  - patch release
  - opravena chyba 2.0.2, kdy CSáček překódovával vše (a ne jen text/html a text/plain)
  - do seznamu nazvu kodovani přidáno "ISO Latin 1" a "ISO Latin 2" - to druhé je časté (defaultní ?) nastavení preferovaného jazyka v Lynxu
  - cstools & Apache: chyba v kódu měla za následek, že i řetězec pouze částečně odpovídající nazvu kódování se bral jako platný match; CSáček tak mohl zbytečně "ořezávat" URL před předáním requestu dále Apache rutinám a perfektně platné URL najednou nefungovalo
  - dokumentace: v části Historie u 2.0.2 přepsána do háčkované češtiny, dodán uzavírající `</TT>` tag
  - díky použití neinicializované proměnné se na některých architekturách/OS místo stránky jako HTML zobrazil dokument jako text spolu s částí hlaviček; nyní se vše zobrazuje korektně kdekoli

  verze 2.0.2 (11.9.1998)

  - patch release
  - definitivně (doufejme) opraveno zacyklení kódu starajícího se o "nadějné" zbytky řetězce začínajícího na "_" v pracovním bufferu
  - Netscape servery: "správné" jméno virtuálního serveru se získávalo z `SERVER_URL`; to může obsahovat i číslo portu, s čímž se nepočítalo; nyní se na analýzu `SERVER_URL` používá `csa_parse_url()`
  - Apache: Linux (a možná další OSy): kód předpokladal, ze `rewind()` udělá implicitní `lseek()` na začátek souboru, i když představa stdio o streamu je, že nebyl měněn - což vadí, protože se na několika místech zapisuje do souboru přes deskriptor (Apache kód, ne přímo CSáček) - výsledek byl, že na Linuxu se místo dokumentu vrátily špatné hlavičky a žádné tělo; nyní se místo `rewind()` volá `lseek()`, takže to funguje korektně všude (a ne jen na BSD systémech)
  - opraveno nefungující `PART` v případě, že jmeno CGI skriptu mělo příponu, nepatřící do `PART` - například `.cgi` nebo `.exe` (fatální na NT serverech jedoucích pod IIS)
  - cstools: opravena mapa x-mac-ce (prohozené I acute a I circumflex, špatný kód pro division sign) a cp852 (prohozené I acute a I circumflex); opraveno překódování UTF-->8bit kodování (kód nezvládal ciste 8bit znaky)
  - čistě implementována podpora HTTP/0.9, HTTP/0.9 klientům se nyní neposílají hlavičky
  - přidána podpora URL typu `http:/path/`, používané Mrkvosoftem (a podporovane také Netscape)
  - WNT: urychlení kompilace pod MSVC++ použitím speciálních konstant pro preprocesor
  - W32: distribuční `Makefile` a `copy_csacek.bat` nyní funguje také pod W95
  - Apache: CSáček je nyní defaultně _zapnutý_, tj. pokud nemá být aktivní, je ho třeba explicitně vypnout

  verze 2.0.1 (21.6.1998)

  - patch release
  - opraveno zacyklení při určitém výskytu retězce `__` v dokumentu, problém s whichcode (vypisování provedených příkazů `PART` do výstupu), CGI CSáček lze nyní bez problémů zkompilovat při použití metody HTTP vyzvedávání dokumentu, `__CHARSET_` se nyní nahrazuje správnou hodnotou i při implicitním hádání vystupního kodování
  - specialně je ošetřeno, jestli klient žádá o dokument pomocí `HEAD` a pokud ano, tělo se vůbec neposílá; Apache si to bohuzel neošetřuje (alespoň ne ve verzi 1.2.6)

  verze 2.0 (3.6.1998)

  > Během téměř osmiměsíční práce byl kód takřka kompletně přepsán a byla přidána podpora FastCGI a Apache. CSáček je možno bez problémů přeložit na NetBSD, Linuxu, Solarisu, IRIXu i MS Windows NT - a díky nasazení GNU autoconf by měl být CSáček bez větších problémů zkompilovatelný i na kterémkoli jiném modernějším Un*xu. CSáček nyní vždy posílá hlavičku `Content-Length` a pokud to klient zvládne, textové dokumenty kompresuje. Byla přidána podpora Unicode ve formě UTF-8. Je podporováno vyznačení kódování dokumentu pomocí tagu `META`. Příkazy CSáčku jsou nyní implementovány čistě, s použitím lexikálního analyzátoru. Mohou nyní být na několik řádků a může jich být na jednom řádku i víc. Je také možné, aby na jednom řádku byl příkaz a zároveň HTML text. Při tom všem CSáček funguje rychleji -- CGI CSáček 2.0b1 je přibližně 1.2x - 2x rychlejší než CSáček 1.3.5.

  verze 1.3.4 (listopad 1997)

  - patch release - jen opraveny chyby nalezené ve verzi 1.3.3
  verze 1.3.3 (červen 1997)
  - patch release - jen opraveny chyby nalezené ve verzi 1.3.2
  - označení verze přesunuto do samostatného souboru `version.h`
  verze 1.3.2 (únor-březen 1997)
  - CSáček byl plně naportován na NT
  - DECODEQUERY je nyní doporučená volba
  - opravena chyba, kdy se pri určitém tvaru příkazu `BAR` CSáček zacyklil
  - opravena chyba s připisováním znaku ^Q do QUERY_STRING při určité délce předaného QUERY_STRING
  - opravena chyba dealokace pole ve `freecmdarr()` (mohla se projevit u příkazů jako je např. `PART`, tj. těch, které mohou mít víc parametrů)
  - opravena chyba v `connect_server()` - špatné mapování adresy na IP adresu (projeví se pokud CSáček nebyl zkompilován s LOCALHOSTHACK)
  - při kompilaci je možno zadat seznam přípon označujících soubory, které se mají vždy kódovat metodou `http`
  - CSáček filtry byly odstraněny a nadále nejsou podporovány; pokud bude poptávka, snad se jednou zas objeví v jiné formě
  - `RESTRICTDOMAINS` a `MULTIPART` bylo sloučeno dohromady pod hlavičkou `MULTIPART`
  - je-li aktivní `NOCODE`, příkazy `PART, DOMAIN` se ignorují
  - byly rozšíženy možnosti definování lišty s nabídkou kódování přímo v dokumentu; lze dynamicky měnit hlavičku české i anglické verze, závěr a pojmenování linky na volbu pomocí `whichcode`
  - z CSáčku byl odstraněn kód, starající se o SSI; nechává se nyní zcela na straně serveru
  - volba NPH spolu se souvisejícím kódem je také minulostí
  - pokud požadované URL ukazuje na adresář a nekončí na /, CSáček klienta přesměruje na `URL/`
  verze 1.3.1 (únor 1996) - interní velmi chybová verze, nebyla dána veřejně k dispozici

  verze 1.3 (srpen-listopad 1996)

  - podpora SSI a shtml
  - možnost více defaultních souborů (tzn. souborů, které se poskytnou pokud se zadá jako požadovaný dokument jméno adresáře)
  - u kódovaných dokumentů předáván parametr "`charset`" u `Content-type`
  - podpora autorizace přístupu
  - zavedení CSáček filtrů
  - optimalizovány nároky na paměť - na mnoha místech odstraněny statické buffery, nahrazeny pointry a dynamickou alokací
  - animované GIFy zůstávají animované i po dokončení první smyčky
  - zjednodušena struktura funkcí, opraveno mnoho drobných chyb, nejdůležitější asi správný přenos obrázků, předávání správného statutu, fungující podpora metody POST a PUT, zpracování hlavičky If-Modified-Since, uděláno více "blbuvzdorné", všude kde se může vyskytnout chyba je detekována a ohlášena, a mnoho dalšího
  - možnost zjištění zakompilované konfigurace CSáčku (`?csacek_report`)

  verze 1.23 (začátek června 1996)

  - dost chybový, doporučuji když tak jen vybrat opravenou verzi `cstools.h`
  - podpora skriptů volaných metodou `POST`
  - lépe zachovává `HTTP` hlavičky
  - opraveno chybné překódovávání některých znaků
  - opraven `whichcode.sl`
  verze 1.22 (konec května 1996)
  - možnost nastavení (téměř) jakéhokoli tvaru automaticky generované lišty s nabídkou kódování přímo v dokumentu
  - podpora vícejazyčných dokumentů - možnost mít v jednom dokumentu víc různých částí a dynamicky vybírat, které zobrazit
  verze 1.21 (konec května 1996)
  - součástí automaticky generované lišty s nabídkou kódování může být i možnost přepnout kódování pomocí původního `whichcode`.
  - opraveno špatné používání metody FILE (koliduje s definicí FILE ve `stdio.h`); názvy metod jsou nyní opět malými písmeny
  verze 1.2 (konec května 1996)
  - automatické vložení lišty s nabídkou kódování
  - kódovací tabulky rozšířeny o většinu ostatních znaků s diakritikou (i např. a se stříškou apod.)
  - opraven `whichcode.src`, aby vytvořený `whichcode` byl zpracovatelný i bashem
  verze 1.1 (květen 1996)
  - opraveno špatné nahrazování řetězce `__CHARSET__` při metodě `http`
  - kódovací tabulky rozšířeny o slovenské znaky
  - chybové hlášky jsou "systémovější" - v hlavičce vrací (po vzoru SaCzechu 2.1) i Status s platným kódem.
  - `__CHARSET__` rozpoznáván i v HTML hlavičkách při metodě http (umožňuje zachování kódu i v obrázcích s klikou)
  - lze překódovat i parametry, zadané programu (obsah proměnné `QUERY_STRING`)
  - zdokonaleno rozhodování, která metoda se má použít při `guess` tak, že metoda `http` se použije i tehdy, když požadované URL obsahuje `CGISUFFIX`.
  verze 1.0 (květen 1996)
  - možnost získávat kódované dokumenty prostřednictvím HTTP
  - podpora HTTP hlaviček `Last-Modified, Content-Size` a `If-Modified-Since` při zpracování souborů
  - možnost opatřit konverzní sadu příponou (např. `.cgi`) pokud to systém vyžaduje
  - při metodě `HTTP` nebo `GUESS` je volanému skriptu předáván i dotaz (`QUERY_STRING`)
  - korektní chování při chybně zadaném URL (neexistující soubor)
  - je možno používat více jmen kódů (aliasy)
  - součástí distribuce je `which.src` s příklady kódů

  Zpět

  This page is part of documentation of C-SaCzech. It has been created and is maintained by Jaromír Doleček, dolecek@sky.cz
  $Id: csacek.html,v 1.94 2002/02/17 12:36:19 dolecek Exp $