Ahoj lidi,
zajímalo by mě, jak vlastními prostředky napsat obdobu procedury Textcolor z jednotky CRT - prostě něco, co mi umožní nastavit barvu písma, kterou pak bude na obrazovku psát standardní Write a Writeln. Vím, jak psát barevně přímým zápisem do VRAM, ale to se mi teď zrovna nehodí, potřebuju Writeln.
Hledal jsem všude možně a nic. Dělám v TP 7.
Fórum › Pascal
Jak udělat Textcolor?
Moje stránka.
Použijou proměnnou TextAttr. (z jednotky Crt)
Např. TextAttr:=2; znamená černý text na zeleném pozadí. TextAttr:=128 je šedý(?) text na černém pozadí. Je to každopádně popsáno v nápovědě TP.
Další možnost je použít ANSI kódy v případě, že má uživatel zaveden ovladač ANSI.SYS
Textattr znam. Myslel jsem vlastnimi prostredky, tj. bez CRT. Ta to preci taky musi nejak delat, ne? A urcite bez ANSI, protoze jeji barevny text funguje kdekoli.
Moje stránka.
To jako napsat vlastní variantu Writeln, která by psal pomocí služeb BIOSu? No jo, ale to bych přišel o ty báječné nekonzistentní parametry, které writeln baští. Jestli jsi myslel přes nějakou službu BIOSu nastavit atribut a pak psát writeln, tak takovou službu právě hledám, ale nenacházím (AThelp, Sysman). Ale jít to musí - když nastavím barvu a ukončím program, píšu v DOSu pořád tou barvou, takže si to musí pamatovat hadrware a ne jednotka CRT. Jenom zjistit, co to je za podslužbu int $10...
Moje stránka.
Další co mě napadá, je využít skutečnosti, že DOS píše jenom na sudé adresy - jinými slovy, zapisuje jenom znaky, nikoliv atributy.
Proto je možné, "předpřípravit" si liché adresy obrazovky (barevné atributy), aby když přes to DOS něco napíše na sudé adresy, tak aby to vytvořilo barevný text.
Nejsem si ale jistý, jestli by to fungovalo i s ovladačem ANSI.SYS
Není mi ale jasné, proč nechceš použít jednotku Crt.
Prostě proto, že když to zvládne CRT, tak my přece taky :-). A taky se chci definitivně vyhnout možnosti, že si pak někdy někdo zkompiluje můj zdroják se svojí nepatchlou CRT a pak mi bude nadávat, že ten program umírá na error 200.
Zkusím disassembler. Porovnám prázdný program s programem obsahujícím jeden Textcolor a třeba z toho půjde vykoukat, jak je udělaný.
Moje stránka.
Ještě jsem se na to díval a teď si jsem jistý: To, že někdy i po ukončení programu píšeš jinými barvami než standardní bílou na černé, je způsobené efektem, o kterém jsem psal v minulém příspěvku. Disassembler netřeba, jinak to být nemůže. Akorát je potřeba prozkoušet, jestli DOS vůbec nešahá na atributy, nebo jestli na lichý adresy v některých případech nává atribut předešlého znaku a jak se to celé chová při rolování obrazovky.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Jak to udělat — založil Dave
Jak udělat hodiny — založil frontm4n
Otázka - Jak to udělat? — založil Q.
Jak udělat gradient? — založil ingiraxo
Jak to lze udělat — založil Radka
Moderátoři diskuze