Premium

Získejte všechny články
jen za 89 Kč/měsíc

Úvod do jazyka OPL (13)

Pokračujeme v pokročilejším programování v OPL.

Víceřádková editace

dEDITMULTI adresa&, vyzva$, sirka%, vyska%, max_delka_textu%

Nejsložitějším příkazem definujícím část dialogu je bezesporu dEDITMULTI. Tento příkaz vloží do dialogu oblast pro editaci víceřádkového textu. Prvním parametrem příkazu je adresa pole, do kterého budou uložena data; po něm následuje text výzvy a šířka a výška okna ve znacích. Posledním parametrem je nejvyšší povolená délka textu.

Text je ukládán přímo do oblasti v paměti; první 4 byte této oblasti obsahují délku textu jako 32bitové číslo a po nich začíná vlastní text, jehož délka je menší nebo rovna poslední proměnné na řádku.

Oblast v paměti je možné rezervovat příkazem ALLOC, nebo použít - pro jednoduchost - pole 32bitových čísel jako v následujícím příkladu. Funkce ADDR(pole&(1)) vrátí adresu prvního prvku pole pro použití na místě prvního parametru. Pole musí být dostatečně veliké, aby do něj bylo možné bezpečně uložit nejvyšší povolenou délku textu. Protože klávesa Enter se používá k přechodu na nový řádek, nesmíme zapomenout uvést v dialogu tlačítka (příkaz dBUTTONS), aby jej bylo možné ukončit i jinak než klávesou Esc.

PROC multi:
  LOCAL text&(500)
  text&(1)=0 : REM -- žádný text --
  dINIT "Jednoduchý editor"
  dEDITMULTI ADDR(text&(1)), "Text", 30, 6, (500-1)*4
  dBUTTONS "Konec", %e, "Ulož", %s
  DIALOG
ENDP

Do tohoto víceřádkového pole můžeme text nejen zapisovat, ale i používat klávesové zkratky pro kopírování a vkládání textu. Text není možné nijak formátovat, nicméně můžeme používat obecné znaky jako tabulátor (ASCII $09), konec odstavce ($06), konec řádky ($07), nedělitelnou mezeru ($0F) a další - podívejte se do manuálu na příslušné heslo.

Text do pole můžeme vložit například použitím příkazu POKEB, který uloží na adresu, jež je jeho prvním parametrem, byte, který je jeho druhým parametrem. Nesmíme zapomenout uložit do prvních 4 byte pole aktuální délku textu.

PROC multi2:
  LOCAL text&(65), t$(255), i%, addr&
  t$="Toto je vzorový text..."  
  text&(1)=LEN(t$)
  i%=1
  addr&=ADDR(text&(2))
  WHILE i%<=text&(1)
    POKEB addr&, ASC(MID$(t$, i%, 1))
    i%=i%+1
    addr&=addr&+1
  ENDWH
  dINIT "Jednoduchý editor"
  dEDITMULTI ADDR(text&(1)), "", 30, 6, 255
  dBUTTONS "Konec", %e, "Ulož", %s
  DIALOG
ENDP

Po skončení dialogu je pak v prvních 4 byte uložena aktuální délka textu v rámečku a poté následuje vlastní text. Text můžeme číst po znacích funkcí PEEKB, které předáváme adresu v paměti a která vrací byte, který je na ní uložen.

PROC multi3:
  LOCAL text&(65), i%, addr&
  text&(1)=0
  dINIT "Jednoduchý editor"
  dEDITMULTI ADDR(text&(1)), "Text", 30, 6, 255
  dBUTTONS "Konec", %e, "Ulož", %s
  IF DIALOG
    PRINT "Text je: ";  
    addr&=ADDR(text&(2))
    WHILE i%<text&(1)
      IF PEEKB(addr&+i%)>=32
        PRINT CHR$(PEEKB(addr&+i%));
      ELSE
        STYLE 4 : PRINT "<";PEEKB(addr&+i%);">"; : STYLE 0
      ENDIF
      i%=i%+1
    ENDWH
    GET
  ENDIF
ENDP

Při použití příkazu dEDITMULTI je potřeba ohlídat si, aby nebyl text delší než pole, do kterého jej ukládáme. Pokud se pokusíme uložit do pole více znaků, než je jeho skutečná velikost v byte, dojde ke kritické situaci a zhroucení operačního systému.

  • Nejčtenější

Spotem s Trojanem na horách operátor popudil Poláky. Nerozuměli nadsázce

21. dubna 2024  8:01

Po dvojici Vojtěch Kotek a Lukáš Pavlásek, k níž později přibyl Jakub Kohák, vsadil T-Mobile ve...

Je to už spíš foťák s mobilem a opravdu se povedl. Test Xiaomi 14 Ultra

21. dubna 2024

Prémiový smartphone Xiaomi 14 Ultra působí mezi současnou nabídkou mobilů jako unikát. Jaký jiný...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Toto zařízení mělo nahradit mobily. V recenzích se mu vysmáli

23. dubna 2024

Novinka s názvem Humane AI Pin se zdála být převratným zařízením. V mnoha ohledech měla nahradit...

Vodafone měl výpadek, někteří zákazníci se nemohli dovolat

25. dubna 2024  10:03,  aktualizováno  10:15

Síť mobilního operátora Vodafone postihl ráno výpadek. Týkal se části zákazníků, kteří se nemohli...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Operátoři zahušťují pokrytí Česka signálem 5G. Máte ho doma? Podívejte se

20. dubna 2024

Premium V červenci to budou již čtyři roky, co byla v Česku spuštěna první komerční 5G síť. Zatímco v...

Úřad chce zatočit se spoofingem. Podezřelé hovory operátoři nespojí

26. dubna 2024  16:02

Český telekomunikační úřad (ČTÚ) vydal novelu všeobecného opatření, která stanovuje nové podmínky,...

Hlasujte o nejlepší sportovní fotku. Vyberete tak vítěze smartphonu vivo

26. dubna 2024

Soutěž o úplnou novinku, smartphone vivo V40 SE s bohatou výbavou nebo podepsaný dres...

Xiaomi už se nebude držet zpátky. Pro řadu T chystá další prémiové funkce

26. dubna 2024

Smartphony řady T od Xiaomi mají vždy parádní výbavu, ale zároveň i pár kompromisů, aby trochu...

Vodafone měl výpadek, někteří zákazníci se nemohli dovolat

25. dubna 2024  10:03,  aktualizováno  10:15

Síť mobilního operátora Vodafone postihl ráno výpadek. Týkal se části zákazníků, kteří se nemohli...

Bývalý fitness trenér Kavalír zrušil asistovanou sebevraždu, manželka je těhotná

Bývalý fitness trenér Jan Kavalír (33) trpí osmým rokem amyotrofickou laterální sklerózou. 19. dubna tohoto roku měl ve...

Herečka Hunter Schaferová potvrdila románek se španělskou zpěvačkou

Americká herečka Hunter Schaferová potvrdila domněnky mnoha jejích fanoušků. A to sice, že před pěti lety opravdu...

Největší mýty o zubní hygieně, kvůli kterým si můžete zničit chrup

Možná si myslíte, že se v péči o zuby orientujete dost dobře, přesto v této oblasti stále ještě existuje spousta...

Tenistka Markéta Vondroušová se po necelých dvou letech manželství rozvádí

Sedmá hráčka světa a aktuální vítězka nejprestižnějšího turnaje světa Wimbledonu, tenistka Markéta Vondroušová (24), se...

Horňáci versus dolňáci. Víme, čemu muži dávají přednost, a je to překvapení

Ženské tělo je pro muže celkově velmi atraktivní a nabízí jejich očím mnoho zajímavých partií. Největší pozornosti se...