Jednotky pro Turbo Pascal

Všechny najednou si můžete stáhnout ZIP hned tady (345 kB, dema nejsou přibalena). Případně, pokud dáte přednost samostatným souborům s podrobnějšími popisy, tady jsou:

TXT Přehled návaznosti jednotek - co všechno je potřeba stáhnout, aby mi to pak šlo přeložit (tedy pokud se vám nechce stahovat všechno).

PAS VESA - grafická jednotka založená na knihovně SVGA 4 od ASP/VR Group. Vše pro bankovanou 256barevnou grafiku s rozlišením od 640×* po 1024×768. Obsah:

Soubory s fonty nutné pro zobrazování textů jsou spolu s editorem v sekci Programy. Pokud jste si odkazem nahoře stáhli všechny jednotky najednou, máte základní font přibalen.
Zajímavé triky: kreslicí algoritmy, VESA grafika obecně, virtuální obrazovka a stránkování a spousta podrobně okomentovaného Assembleru.

Soubor už tu nechávám jen tak pro zajímavost, nahradila ho novější verze:

PAS VESA 2 - další iterace jednotky VESA. Princip funkce je stejný, ale rozhraní se změnilo natolik, že není kompatibilní s původní verzí a zaslouží si jiné pořadové číslo. Co se změnilo:

PAS VGA - grafická jednotka pro 256barevnou grafiku v rozlišení 320×200. Založeno na jednotce VGA256 od ASP/VR Group, rozšířeno a optimalizováno. Obsahuje sadu základních kreslicích procedur (čáry, obdélníky, elipsy apod.), ale ne tak bohatou jako VESA. Procedury pro zobrazování textu jsou kompletně převzaté z Vesy (zatím té starší verze), používají se a fungují naprosto stejně. Za nejdůležitější považuji práci s obrázky (Getimage, Putimage a 32bitové zobrazování "průhledných" obrázků) a virtuálními obrazovkami. Samozřejmostí je spuštění a ukončení grafiky a nastavitelné ořezávací okno.
Zajímavé triky: je to v podstatě o dost jednodušší VESA, takže celkem nic nového.

PAS Images - univerzální jednotka pro práci s rastrovými obrázky. Pracuje většinou pouze s daty v paměti a ne s obrazovkou, takže může spolupracovat s jakoukoli grafikou, kde 1 pixel = 1 byte (u mě jednotky VESA a VGA). Umí obrázky zvětšovat a zmenšovat, ořezávat, zrcadlit vodorovně i svisle, otáčet o čtvrtotočky i jemně po stupních, různě zešikmovat, nahrazovat barvy a plynule měnit jas od jedné hrany ke druhé. Dále převádí obdélníkové obrázky na "průhledný" sprite a zpět a načítá a ukládá formáty BMP, PCX, CUT a ORF. BMP umí načíst z jakékoli bitové hloubky (pokud neobsahuje víc než 256 různých barev), ukládá pouze v 8 b/px. Ukládání se dá z nadřazeného programu modifikovat tak, aby bralo data odjinud než z normální paměti (třeba z XMS nebo z obrazovky), takže se dají uložit i obrázky větší než 64 KB.
Zajímavé triky: prakticky všechno výše uvedené :-). Plus na konci zdrojáku podrobný popis použitých grafických formátů.

PAS Zvuky - jednotka pro přehrávání zvuků přes Sound Blaster, založená je na jednotce Smix od Ethana Brodského. Umí přehrávat až osm zvuků současně a u každého zvlášť nastavovat hlasitost. Zvuky umí načítat ze souborů *.WAV, které si automaticky převádí na svůj interní osmibitový monofonní formát. Za chodu je má uložené v rozšířené paměti (XMS). Rozhraní je kompletně v češtině a zdroják samá vysvětlivka :-).
Zajímavé triky: obsluha zvukové karty, nízkoúrovňová práce s XMS a hlavně spousta Assembleru, místy poněkud obskurnějšího (32bitové instrukce psané napůl ve strojovém kódu).
Známé chyby, které snad někdy opravím: ve Windows XP někdy zvuk chrchlá a v Dosboxu prý padá.

ZIP Woknows 5 - grafické rozhraní pro pascalovské programy "nepatrně" připomínající Okna od pana Gatese. Obsah: objektová tlačítka, přepínače, nabídky, posuvníky, textová pole atd., různá dialogová okna (místní nabídka, menu, otázka ano/ne, zadávání textu nebo čísla, výběr souboru atd.) a pár dalších věcí pro usnadnění práce. Veškeré texty v jednotce (včetně klávesových zkratek) jsou uloženy v externím souboru a načítají se až při startu programu, což velice zjednodušuje tvorbu různých jazykových mutací (balík obsahuje českou a anglickou verzi). Toto úložiště textů mohou využít i programy, které jednotku používají.
Zajímavé triky: spousta objektů, dynamických struktur a mravenčí práce.
ZIP Tady je demo.

ZIP Klávesy 2 - jednotka pro obsluhu klávesnice. Obsahuje vlastní Keypressed a Readkey (bez CRT), funkce pro zjištění stavu Shiftů, Altů, Ctrlů a Locků, přepínání Locků, zápis do bufferu klávesnice, čekání na klávesu, diagnostiku atd.. Především ale má vlastní ovladač klávesnice a když ho spustíte, získáte možnost detekovat víc stisknutých kláves najednou, rychlejší bufferované čtení (protože už nemusí volat žádné systémové služby), možnost pověsit si proceduru na Printscreen a vůbec kompletně předefinovat celé rozložení kláves. Rozložení se načítá ze souboru (přiloženy jsou dva základní pro českou a anglickou), takže nejsme závislí na OS. Dá se nadefinovat samostatná tabulka kódů pro každý přeřaďovač (levý a pravý Alt se rozlišuje, Controly a Shifty ne) i mrtvé klávesy (háčky, čárky a tak). Fungují všechny tři Locky (včetně kontrolek), Pause/Break, zadávání ASCIIkódů přes Alt+čísla, a spousta dalších věcí se dá překonfigurovat podle potřeby.
Zajímavé triky: obsluha klávesnice přes int $16, int $21 a stavový word, i přes vlastní přerušení. Dále podrobný popis, jak klávesnice funguje.
ZIP Demo zde.
Program pro vytváření nových definic rozložení kláves najdete v sekci Programy.

PAS Myš 4 - prakticky všechno, co potřebujete pro práci s myší ve VESA grafice: inicializace, kontrola polohy a stavu tlačítek, nastavení citlivosti, omezení rozsahu pohybu, zobrazování a pohyb kurzoru (podporuje i stránkovanou grafiku), záměna tlačítek apod.. Může pracovat ve dvou režimech. Buď ruční, kdy je potřeba neustále volat proceduru pro zobrazení kurzoru, nebo automatický, kdy se celá obsluha myši pověsí na příslušné přerušení a vše je pak ještě jednodušší než u standardního kurzoru v BGI.
Soubory s kurzory nutné pro funkci jednotky jsou spolu s editorem v sekci Programy (jeden základní kurzor je přibalen v balíku všech jednotek).
Zajímavé triky: základní obsluha myši přes přerušení $33 a zavedení vlastního handleru na pozadí.

PAS Myš pro VGA - jednotka pro práci s myší v grafice VGA (320×200 px, 256 barev). Používá se úplně stejně a umí přesně totéž jako Myš 4.
Zajímavé triky: viz výše.

PAS Grafika 4 - obsahuje různé grafické blbinky (oblouky, výseče, stínovaný text, "procentové" indikátory, komiksové bubliny apod.), procedury pro ukládání a opětovné načítání celé obrazovky (využívá XMS), vypnutí a zapnutí obrazovky, objekt pro pohodlnější ukládání a zobrazování výřezů obrazovky (aplikovaný Getimage a Putimage s ošetřením vyčuhování části obrázku mimo obrazovku) a procedury pro vektorovou řetězcovou grafiku včetně písma (ZIP tři ukázkové fonty jsou zde).
Zajímavé triky: použití XMS paměti pro ukládání obrazovky a dynamická pole s proměnnou velikostí prvku u vektorového fontu.

PAS uMAC 4 - jednotka pro zobrazování vektorových grafických struktur (*.MAC), které se vytvářejí editorem AlmostCAD (viz sekci Programy). Výhodou tohoto formátu jsou jeho minimální nároky na paměť i místo na disku při libovolných vizuálních rozměrech obrázku, možnost plynule měnit měřítko zobrazení (po procentech) a úhel natočení (po stupních) a možnost tvorby animací. Tento formát byl vyvinut hlavně pro hry, ale už jsem v něm kreslil i pár schémat do školy :-).
Zajímavé triky: dynamická beztypová pole s proměnnou velikostí prvku a přetypované ukazatele, to vše v maximálním možném množství.

PAS Matematika - obsahuje rozsáhlý soubor procedur pro práci s maticemi, např.: zadání hodnot z textového řetězce i číselně prvek po prvku, kopírování, součet, součin, transpozici, výměnu řádků, úpravu na trojúhelníkovou matici a dokonce i determinant a inverzi. To vše pro matice libovolných rozměrů. Zkrátka MATLAB se může jít zahrabat :-).
Další soubor procedur je věnován komplexním číslům: zadání v algebraickém i goniometrickém tvaru, součet, rozdíl, součin, podíl a součin s reálným číslem.
Dále tu máme funkci na vyhodnocení a vyčíslení hodnoty matematického výrazu zadaného v textovém řetězci. Umí počítat s prioritou operátorů, závorkami, až třemi proměnnými a řadou konstant a funkcí.
Potom objekt Obrčíslo, který umí pracovat s celými čísly obecné délky (až cca půl milionu bitů). Zvládá přiřazování, negaci, bitové posuny, sčítání, odčítání, násobení, dělení, druhou odmocninu, porovnávání a převod do čitelného tvaru (desítkového nebo hexa).
Zbytek tvoří různé všeobecné matematické funkce: tg, cotg, arcsin, arccos, sgn, obecná mocnina, vzdálenost bodů v rovině, vzdálenost bodu od přímky, dělení zaokrouhlené nahoru, vektorový součin, kvadratická rovnice, převody do/z různých číselných soustav, zrcadlové otočení čísla po bitech, výpočet úhlu ze souřadnic, rozvin plášťů rotačních geometrických těles atd..
Zajímavé triky: z programátorského hlediska jsou nejzajímavější matice (dynamická 2D pole), vyhodnocování výrazů (práce se zásobníky) a obrčísla (dynamická pole, bitové operace a výpočetní algoritmy), jinak je to prostě hromada aplikovaných vzorečků od základní školy po vysokou.

PAS Čas - obsahuje procedury pro čekání nebo měření času nezávislé na rychlosti počítače (fungují na bázi zrychleného systémového časovače, přesnost na 5 ms nebo v případě potřeby až 1 ms). Začátek a konec čekání je oddělený. Použití je velmi jednoduché, protože veškerá instalace i odinstalace přerušení probíhá plně automaticky a ostatní je podobné jako u Delay. Dále tu najdete jednoduché objektové stopky na bázi GetTime (přesnost na sekundy) a možnost nechat jakoukoli proceduru automaticky volat na pozadí v zadaném časovém intervalu.
Zajímavé triky: zrychlení časovače, použití vlastního přerušení včetně jeho automatické instalace a odinstalace a volání procedury z tohoto přerušení.

PAS COM - jednotka pro komunikaci dvou počítačů po kříženém sériovém kabelu RS-232, plně funkční a odzkoušená. Využívá FIFO frontu na příjem i odesílání, o oboje se stará obsluha přerušení. Několik portů současně provozovat neumí. ZIP Demo zde.
Zajímavé triky: sériová komunikace obecně - co, jak a proč. Snad každý krok je v komentářích podrobně vysvětlen, najdete tam i teoretický úvod.

PAS XMS - tato jednotka umožňuje využít až 64 MB rozšířené paměti, a to z obyčejného real módu. V případě, že rozšířená paměť není dostupná, kompletně ji emuluje pomocí dočasných souborů na disku. Ošetřeno je i automatické uvolnění alokované paměti při ukončení programu.
Jako high-level jsou tu dva objekty: jeden pro načítání a uchovávání textů z textových souborů (což umožní výrazně snížit spotřebu omezené základní paměti bez toho, aby se muselo pořád štrachat v souborech) a druhý pro uchovávání spritů (což je nezbytné, protože do základní paměti se žádná rozsáhlejší grafika prostě nevejde).
Zajímavé triky: využití funkcí ovladače paměti (hodně Asm) a ukládání řetězců do beztypové struktury.

PAS Generátor Xspritů - malá jednoúčelová jednotka pro tvorbu knihoven spritů, které se dají načítat do objektů typu Xsprite z jednotky XMS a dále zpracovávat jednotkami Images, VGA nebo VESA.

PAS CFG - jednotka pro načítání a ukládání konfiguračních dat do a z textových souborů (formát je za určitých podmínek kompatibilní se soubory *.INI, já nejradši používám koncovku CFG). Vše je řešeno pomocí objektu. Načítat se dá buď celý soubor nebo jen vybrané sekce. V souborech mohou být komentáře a prázdné řádky, které se ale nenačítají, aby se šetřilo pamětí. Při ukládání zůstane zachována vnitřní struktura souboru včetně původních komentářů, pře(/při)píšou se pouze změněné datové položky.
Jako high-level funkce tu je možnost uložit do konfiguračního souboru něco jako "podpis" a z něj potom poznat, jestli program běží na tomto počítači poprvé nebo ne.
Zajímavé triky: spojové seznamy s proměnnou velikostí prvků, práce s řetězci a hledání "zaručeně unikátních" informací v počítači.
Novinka: přibylo čtení položek typu char.

PAS Paleta 2 - jednotka pro práci s barevnou paletou ve 256barevné grafice: čtení a nastavování jednotlivých barev i celých palet, změny jasu (0..200%), plynulé přechody jedné palety do druhé, rotace palety, vyhledávání nejbližší barvy a možnost přepnout grafickou kartu do 8bitového režimu (kdy se rozsah RGB složek zvětší ze standardních 0..63 na 0..255) a zpět.
Zajímavé triky: vlastní Get- a Setrgbpalette, zbytek je o cyklech, počítání procent a v případě hledání nejbližší barvy o Pythagorově větě.

PAS Need For Speed UnderPascal - obsahuje různé variace na Move (32 a 64bitová varianta) a Fillchar (32bitová; přidán ještě Fillword, který vyplňuje wordem místo bytem) a rychlý celočíselný sinus a cosinus. Zrychlení oproti standardním procedurám je poměrně výrazné. Dále tu najdete vylepšenou verzi datového typu množina: bitové pole, do kterého se dá ukládat víc než 256 prvků (až 65535). Obsluha je rychlá a množiny zabírají málo paměti.
Zajímavé triky: 32bitové instrukce v Asm a kopírování dat přes koprocesor.

PAS Chybové hlášky - obsahuje proceduru pro pohodlné vypisování chybových hlášení s možností ukončit program, pokračovat nebo se zeptat uživatele (pro jakýkoli textový i grafický režim, při kompilaci se dá zvolit mezi češtinou a angličtinou) a dále české chybové hlášky pro jednotku XMS, standardní proměnnou Doserror a funkci IOresult.
Zajímavé triky: výpis hlášky na obrazovku pomocí služeb Dosu (takže nezáleží na režimu obrazovky a nejsou potřeba žádné další jednotky).

PAS Disk - věci pro práci se soubory (kopírování, mazání, test existence, přejmenování na windowsovsky dlouhé jméno, jednoduché šifrování, vytvoření seznamu nebo stromu adresářů...), několik diagnostických procedur (existence a vlastnosti diskových jednotek a mechanik) a pár dalších drobností (operace se jmény souborů, reset počítače, hromadné nastavení atributů apod.).
Zajímavé triky: kopírování souborů se hodí vždycky, ale není problém si ten příklad z nápovědy přepsat taky. Šifrování je jen kopírování s několika řádky navíc, seznam souborů je hlavně o Findfirst + Findnext, dynamických spojových strukturách a insertsortu. Stromový seznam adresářů je ukázkou použití rekurzivního volání procedury a stromovitých datových struktur. Detekce disků je o volání funkcí Dosu a koukání do paměti Biosu.
Novinka: přibyl objekt Turbosoubor, který řeší nejběžnější úkoly při čtení souborů: otevření (Reset), zavření (Close), detekce konce souboru (Eof), čtení po blocích (Blockread) nebo po řádcích (Readln), najetí na daný ofset (Seek) a hlavně najetí za daný řetězec a čtení dat až do nejbližšího výskytu daného řetězce. Funguje bez omezení na binární i textové soubory a pro urychlení má vestavěný buffer.

PAS Řetězce - funkce pro operace s řetězci: převod nejrůznějších číselných typů na řetězec a řetězců na čísla, zarovnávání a ořezávání řetězců, kopírování úseků, převod řetězců na velká nebo malá písmena, rozklad řetězce na slova nebo na řádky, převody české diakritiky nebo obecně nahrazování jedněch znaků druhými, řetězce neomezené délky apod..
Zajímavé triky: práce s řetězci a spojovými seznamy, občas trochu Asm a dost divokého přístupu ke stringům.

PAS Texty 2 - přepnutí do textového režimu 80×25, vypnutí, zapnutí a přesouvání textového kurzoru, nastavení znakové sady a dále různé procedury pro výstup na obrazovku přímým zápisem do videopaměti: psaní znaku a řetězce, smazání řádku, sloupce, bloku řádků nebo celé obrazovky, barvení písma. Vše pro fyzickou i virtuální obrazovku. Nepoužívá jednotku CRT.
Zajímavé triky: přístup k obrazovce přes ukazatel na absolutní proměnnou a spousta Asm.
Novinka: zobrazování libovolně velkých číslic a písmen ve stylu sedmisegmentového displeje.

PAS Textové menu - jednoduchý objekt pro obsluhu nabídek v textovém režimu. Umožňuje udělat menu s nápovědou ke každé položce a řeší interakci s uživatelem.
Zajímavé triky: asi nic, nejsložitější použitý algoritmus je hledání maxima v poli.

PAS Náhoda - Random s longintovým rozsahem, x-stěnná a procentová kostka, funkce, která vrací náhodné číslo ze zadaného rozsahu a automatické Randomize při startu.
Zajímavé triky: jednoduchá aplikace metody půlení intervalu; zbytek je jenom o použití standardní funkce Random.

Zbytky a trosky

Staré a překonané jednotky, které už nepoužívám a nebudu vylepšovat. Všechny je najdete v ZIP tomhle balíku (153 kB), samostatné soubory by byly zbytečné plýtvání místem. Neručím za funkčnost - stahujete je na vlastní nebezpečí a na bugreporty už asi nebudu reagovat.

Konstanty - různé konstanty, znaky (šipky...), pomocné množiny znaků (např. pro rychlé roztřídění vstupu z klávesnice) apod.
Zajímavé triky: asi nic.

Klávesy - obsluha klávesnice. Pro bufferované čtení používá služby Dosu, pro okamžité čtení stisků jednotlivých kláves má vlastní přerušení. Vlastní řešení bufferovaného vstupu jako verze 2 ovšem ještě nemá.
Zajímavé triky: jak napsat vlastní Keypressed a Readkey, jak číst shifty a spol. a jak detekovat víc současně stisknutých kláves.

PCX - načítání a ukládání obrázků mezi obrazovkou a soubory typu PCX. Spolupracuje s jednotkami VGA a VESA, přepíná se to direktivou při kompilaci.
Zajímavé triky: nic moc, radši si stáhněte Images - tam je to líp popsané a implementované bez chyb :-).

Paleta - starší, ale univerzálnější jednotka pro práci s paletou. Funguje s 16 i 256barevnými paletami, ale pro 256barevné nemá tolik funkcí jako Paleta 2.
Zajímavé triky: viz Paleta 2, plus práce s 16barevnou paletou.

SVGA 4.1 - upravená jednotka pro 256barevnou grafiku z knihovny SVGA 4 od ASP/VR Group. Podrobný seznam úprav je ve zdrojáku. Postupně se z ní vyvinula jednotka VESA.

Grafika - různé grafické procedury, např. ukládání a načítání celé obrazovky (do konvenční paměti (640×480×16) nebo na disk (univerzální, ale někdy pomalá)), vypnutí nebo zapnutí obrazovky, rychlý Getimage a Putimage pro režim 640×480×16, procedury pro psaní vlastními fonty (rastrové, 8×8 pixelů, kreslí se Putpixelem) a další.

Myš - jednotka pro základní obsluhu myši. Obsahuje mj. několik integrovaných grafických kurzorů (kreslených pomocí čar, dá se nastavit barva i velikost). Funguje ve všech BGI režimech.
Zajímavé triky: použití proměnných typu procedura a základy práce s myší.

Woknows 3 - poslední verze GUI jednotky, která má ještě texty zapsané přímo ve zdrojáku. Pro VESA grafiku.

Woknows - první verze GUI. Pracuje v BGI grafice, obsahuje mnohem méně objektů a funkcí než Woknows 3 a už neručím za provozuschopnost.

Spouštěč VGA - stačí ji použít v programu a o start grafického režimu se nemusíte dále starat (BGI, 640×480×16).
Zajímavé triky: přilinkování grafického ovladače do programu (už žádné *.BGI soubory!).

Spouštěč SVGA - totéž, ale spouští grafiku SVGA (SVGA256.BGI). Skládá se ze dvou jednotek (jedné pro režim 640×480×256 a druhé pro 800×600×256) a OBJ souboru s grafickým ovladačem.
Zajímavé triky: viz výše + použití nestandardního BGI ovladače (InstallUserDriver a spol.).

Zvuky - vlastní Sound a Nosound (Asm, nepotřebuje CRT), jedna pípací procedura a nevyzkoušený pokus o objektový přehrávač melodií, vše pro interní PC speaker. Nezaměňujte se stejnojmennou novější jednotkou Zvuky, která pracuje se zvukovou kartou.

Texty - jednotka pro textový výstup, prakticky jenom aplikace standardních funkcí z CRT.

Global - konstanty (kódy grafických a textových režimů) a proměnné (stav monitoru, myši, klávesnice atd.), které slouží k výměně informací mezi jednotkami navzájem a programy. Některé z předchozích jednotek ji využívají.

Reklamy:
Ronnie.cz - kulturistika, fitness, bojové sporty