Web 51 - html2db.pl |
Skript html2db.pl je určen ke konverzi html stránek a některých dalších formátů, jako jsou například jpeg či gif obrázky do zdrojových textů v assembleru. Zdrojové texty, vzniklé konverzí, jsou doplněny příslušnými hlavičkami, používanými souborovým systémem serveru Web 51.
Konverzí např. souboru config.html vznikne následující fragment zdrojového kódu:
.section cpu_dir, #alloc .word 'c'+'o'+'n'+'f'+'i'+'g'+'.'+'h'+'t'+'m'+'l' .byte 1 ;text/html .byte 0 ;reserved .word begin0 .word end0 .section cpu_files, #alloc begin0: .ascii "...
Obsah hlavičky je možno ovlivnit parametry zadávanými na příkazové řádce při volání skriptu. Jména segmentu pro uložení položky souborového adresáře a jméno segmentu pro uložení obsahu souboru je možno přepínat pomocí přepínačů -cpurom, -cpueeprom a -eeprom na defaultní jména segmentů.
přepínač adresář soubor -cpurom cpu_dir cpu_files -cpueeprom ee_dir ee_files -eeprom i2c_dir i2c_files Jména segmentů je možno zadat i explicitně pomocí přepínačů:
přepínač parametr -dir jméno segmentu -body jméno segmentu Dalšími přepínači je možno ovlivnit obsah druhé položky v adresáři - typ souboru. Typ souboru je odvozován automaticky z typu jména zdrojového souboru. Explicitní určení typu je ovlivňováno přepínači:
přepínač typ Pozn. -html 1 #text/html -plain 2 #text/plain -jpeg 3 #image/jpeg -gif 4 #image/gif -png 5 #image/png -app 6 #application/octet-stream -noheader 0 #without header Zároveň s určením typu, je přepnut režim vlastního převodu souboru. Skript html2db umožňuje dva režimy činnosti:
Jeden textový, hledající ve zdrojovém souboru cgi skripty a umožňující konverzi jejich parametrů.
Druhý, bez konverze, zachází se souborem jako by byl binární a převádí jej do sekvence příkazů typu DB 047h, 049h,... Konverzi je možno explicitně vypnout zadáním parametru -noconverthtmlMimo určení jména segmentů pomocí přepínačů -cpurom, -cpueeprom a -eeprom jsou těmito přepínači určeny i implicitní offsety přičítané k adresám uvedeným v hlavičce. Tento offset vychází ze "zvláštností" linkování hex souboru nahrávaného do procesoru AT89C8252. Tento procesor má uložen obsah EEPROM ve výsledném souboru od 2000h, ale jeho adresace je ve skutečnosti od 0h. Korekci těchto vzlášností je možno zadat i explicitně pomocí přepínače -offset.
Posledním funkčním přepínačem je přepínač -index. Pomocí tohoto přepínače je možno imlicitně generovanou adresářovou položku zduplikovat. Zadaná hodnota indexu se použije jako hash hodnota doplněná do hlavičky. Praktické využití tohoto přepínače je především při generování odkazu na root stránku www serveru. Jako hodnotu parametru uvedeme 0. Takto "zduplikovanou" stránku je potom možno volat bez udání jejího jména, pouze zadáním adresy www serveru. Výsledný kód, ovlivněný zadáním parametru -index 0 je vidět na následujících řádcích.
.section cpu_dir, #alloc .word 'c'+'o'+'n'+'f'+'i'+'g'+'.'+'h'+'t'+'m'+'l' .byte 1 ;text/html .byte 0 ;reserved .word begin0 .word end0 .word 0 ;hodnota zadaná parametrem -index .byte 1 ;text/html .byte 0 ;reserved .word begin0 .word end0 .section cpu_files, #alloc begin0: .ascii "...
Přepínač -appendlf ovlivňuje pouze konverzi zdrojových html souborů. Tento přepínač způsobí, že ve výsledném html kódu budou ponechány oddělovače řádků (či v případě MS-DOSovských dvojznaků <CR><LF> budou nahrazeny <LF>) Implicitně jsou ze zdrojového souboru vynechány všechny ukončující znaky řádků. Tento režim však vynecháním oddělovače řádků maže i oddělovací tzv. "bílý" znak. Což předpokládá, že na konci řádku, nebo na začátku následujícího řádku je html tag, oddělující oba řádky. Doporučuji proto raději, pokud nepotřebujete maximální úspornost výsledného html kódu, raději pomocí -appendlf vypouštění oddělovačů řádků vypnout. Toto vypnutí vypouštění oddělovačů řádků doporučuji rovněž vypnout v případě použití JavaScriptu, který je na vypuštěné "bílé" znaky poměrně citlivý.
Přepínač -binutils ovlivňuje režim konverze z hlediska generace kódu pro daný překladač assembleru. Je-li tento přepínač uveden, odpovídá vygenerovaný kód svojí syntaxí asembleru z balíku binutils tj. assembleru mcs51-as, v opačném případě je generován kód se syntaxí požadovanou překladače firmy Intel, Keil,...
Zbývající dva přepínače -version a -help vypisují verzi a jednoduchý help:
usage: html2db.pl [-cpurom] [-cpueeprom ] [-eeprom] [-html] [-plain] [-jpeg] [-gif] [-png] [-app] [-noheader] [-index VALUE] [-dir DIR_SEGMENT] [-body BODY_SEGMENT] [-offset VALUE] [-noconverthtml] [-appendlf] [-version] [-help] file
Ve zdrojových html souborech je, pokud není konverze zakázána parametrem -noconverthtml, prováděna konverze cgi parametrů. Parametry cgi souborů můžou být zadávány ve třech tvarech:
- Zadání ve tvaru ASCII konstanty: 'xyz.cgi?'7''. Jednopísmenová konstanta je ve zdrojovém html textu ohraničena z obou stran apostrofem.
- Zadání ve tvaru proměnné: 'xyz.cgi?flash_my_ip'.
- Zadání ve tvaru konstanty: 'xyz.cgi?0x13'.
- (Konstanta je zadávána ve tvaru požadovanám příslušným překladačem,
pro překladače Intel, Keil,...je nutno použít: 'xyz.cgi?13h'.)Zadávání parameru ve tvaru proměnné vyžaduje pro některé překladač (Intel, Keil,...) deklaraci proměnné před jejím použitím.
Pro deklaraci proměnných nepoužívá skript html2db žádnou automatickou metodu. Zda jsou proměnné správně nadeklarovány je na rozhodnutí překladače assembleru či linkeru výsledného kódu.
Překladač z balíku binutils tj. mcs51-as deklarování proměnných nepotřebuje, deklaruje použité proměnné automaticky.
Samotný html2db rozšiřuje zápis html kódu ve zdrojovém souboru o speciální řádky, nesoucí informace s deklaracemi, popř. s dalšími údaji řídícími překlad z html do assembleru.
Řádky s deklaracemi začínají dvojicí znaků #:, následovanou jednopísmenovým kódem příkazu a parametrem uzavřeným do kulatých závorek. Možně příkazy jsou následující: #:C(xyz) definuje externí proměnnou typu code, odpovídá assemblerovskému extrn CODE(xyz)
#:D(xyz) definuje externí proměnnou typu data, odpovídá assemblerovskému extrn DATA(xyz)
#:X(xyz) definuje externí proměnnou typu xdata, odpovídá assemblerovskému extrn XDATA(xyz)
#:Y(xyz) definuje externí proměnnou typu idata, odpovídá assemblerovskému extrn IDATA(xyz)
#:N(xyz) definuje externí proměnnou typu number, odpovídá assemblerovskému extrn NUMBER(xyz)
#:H(xyz) definuje jméno segmentu s adresářem filesystému, odpovídá parametru -dir xyz
#:B(xyz) definuje jméno segmentu s daty filesystému, odpovídá parametru -body xyz
#:I(xyz) duplikuje jméno adresářové položky a přiřazuje mu hash hodnotu rovnou xyz, odpovídá parametru -index xyz
POPIS Web51 | NOVINKY | FAQ | OBJEDNÁVKA | DOWNLOAD |
(c)Copyright 2000, 2001, HW server & Radek Benedikt
Web51@HW.cz, Web51.HW.cz Final applications of the Web51 : www.HWgroup.cz |