Ahoj,
nemá někdo nějaký nápad na editaci vstupního souboru s textem v konzolové aplikaci?
Předem díky za vaše tipy :)
#3 Jakub
Zkus si vybrat z tohoto:
#3 Jakub
Ještě se zkus podívat sem:
http://www.jbox.dk/sanos/editor.htm
Je to sice napsáno v C, ale snad si s tím poradíš.
Hotové knihovny pro textový režim (Turbo vision apod.) použít nechceš? Super, tím je to zajímavější :-).
Jestli ti stačí délka řádku omezená délkou standardního stringu, můžeš si text v paměti uložit jako pole stringů (případně pole ukazatelů na stringy, kdyby tě trápil realmódový limit 64 KB na proměnnou, ale to nepředpokládám). Dále si musíš pamatovat polohu obrazovky nad textem (x a y levého horního rohu). Pro začátek se vykašli na automatické zalamování řádků podle šířky obrazovky a na blokové operace (kopírování, vkládání apod.), ty by to hodně zkomplikovaly. Dejme tomu, že dovolíme volný pohyb kurzoru za konci řádků a že řádky můžou být širší než obrazovka. Předpokládám, že ti fungují příkazy Gotoxy, Wherex, Wherey, Clrscr a Readkey (jednotka Crt).
Takže stačí napsat obsluhu všech použitých kláves a je hotovo (u šipek a dalších rozšířených kláves pozor na to, že vracejí dva znaky). Třeba takhle:
- Šipka nahoru: pokud je kurzor na prvním řádku textu, nedělej nic. Jinak jestli je kurzor na prvním řádku obrazovky, posuň obrazovku o řádek nahoru a překresli ji, jinak jenom posuň kurzor o řádek nahoru.
- Šipka dolů: totéž, ale se zarážením o poslední řádek textu.
- Šipka doprava: jestli je kurzor u pravého okraje obrazovky, posuň ji o znak doprava a překresli. Jinak posuň kurzor doprava. Limitem může být maximální možná šířka řádku.
- Šipka doleva: podobně.
- Home: pokud není obrazovka úplně vlevo, posuň ji tam a překresli. Posuň kurzor úplně doleva.
- Písmena a jiné psatelné znaky (tj. cokoli od #32 do #255): zjisti pozici kurzoru nad textem (souřadnice obrazovky + souřadnice kurzoru). Jestli jsi za koncem řádku, doplň ho až ke kurzoru mezerami (pokud to Insert nedělá automaticky - zpaměti nevím). Na pozici kurzoru vlož znak z klávesy. Překresli řádek, na kterém je kurzor. Proveď stejný postup jako pro šipku doprava.
- Enter: všechny řádky od následujícího po poslední posuň o pozici dolů. Na následující řádek přesuň text mezi kurzorem a koncem řádku. Proveď akce pro šipku dolů a Home.
- Delete: smaž jeden znak na pozici kurzoru. S kurzorem ani obrazovkou nehýbej. (alternativně by se mohlo mazat zalomení řádku jako s Backspacem, ale pro jednoduchost to vynechám).
- Backspace: jestli nejsi na začátku řádku, tak proveď akce pro šipku doleva a Delete. Jestli jo, tak proveď akce šipka nahoru a End, následující řádek zkopíruj na pozici kurzoru a pak všechny řádky od aktuálního+2 do posledního posuň o pozici nahoru.
Překreslení obrazovky by mohlo být něco ve stylu zapamatování pozice kurzoru, Clrscr, pak cyklus pro všechny řádky write(copy(texty[yObrazovky+i],xObrazovky,sirkaObrazovky)) a nakonec návrat kurzoru do původní pozice. Pozor jenom u pravého dolního rohu, kde by mohl kurzor přetéct do následujícího řádku a odscrollovat s obrazovkou o řádek nahoru.
Držím palce!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku