18.1.3.2. Program

18.1.3.2.1. Zásobník
18.1.3.2.2. Obsluha událostí
18.1.3.2.3. Spuštění programu

Program je z důvodů jednoduchosti napsán v jedom souboru (jedné poznámce)

\ Kalkulačka
needs ids       1
needs Resources 2
needs OnDo      3
needs Events    4
needs ezUI      5
needs tester

decimal
1

Potřebujeme slovo (ID)

2

Budeme pracovat se zdroji

3

Používáme konstrukci on: ... do: ... z modulu OnDo.

4

Potřebujeme symbolická jména událostí pro srozumitelnost kodu.

5

Pro práci s polem zobrazovače display použijeme pro jednoduchost modul ezUI.

Teď si otevřeme zdrojovou databázi aplikace s formulářem

(ID) Kalk (ID) rsrs use-resources

A nadefinujeme si symbolické konstanty pro formulář a jednotlivá tlačítka.

1000 constant MainFormID
1010 dblField display
1116 constant btnClrID
1117 constant btnDropID
1118 constant btnOffID

Vytvoření proměnných.

create stack 20 cells allot  1
variable stackp  stack stackp !
1

Vyhrazení 20 buňek paměnti pro zásobník naší kalkulačky. Takto veliký zásobník vystačí na 10 čísel.

Následující slova uvedu v obráceném pořadí, než jsou v souboru. Je to pro souvislost myšenky. Ve forthu totiž musí být slova při definici použitá definována předem.

Slovo go je spouštěcím slovem programu.

: go ( → )
        MainFormID ShowForm  1
        handle-events ;      2
1

Otevření hlavního a jediného formuláře aplikace.

2

Spuštění hlavní smyčky zpracování událostí.

Smyčka zpracování událostí. Kód je jednoduchý. V nekonečné smyčce begin ... again si v každém průchodu vyzvedneme slovem ekey událost z fronty, a tu pak procedurou dispatch-event zpracujeme. Nakonec je třeba událost ze zásobníku zahodit (drop) aby se nám na něm nehromadily.

: handle-events ( → )
        begin
                ekey dispatch-event drop
        again ;

Přidělování „dispatch“ události dalším častem je v našem případě velmi jednoduché. Zajímají nás jen událost stisku tlačítka, tedy ctlSelectEvent.

: dispatch-event ( ekey → ekey )
        on: ctlSelectEvent      do: cltSelect
        ;

Rozhodování které tlčítko bylo zmáčknuto.

: ctlSelect ( ekey → ekey )
        event >abs ItemID
        on: btnOffID    ddo: (bye)
        on: btnClrID    ddo: btnClr
        on: btnDropID   ddo: btnDrop
        ;

Zmáčknutí tlačítka CLR vymaže zobrazovač.

: btnClr ( → )
        0. SET display ;

Program je z důvodů organizace a snadné manipulace napsán do jediné poznámky (memo). První řádek, který je současně názvem poznámky

\ Kalkulačka

Import zdrojů z jiných souborů

needs ids
needs Resources
needs OnDo
needs Events
needs ezUI
needs tester

Pro jistotu se přepneme do dekadické číselné soustavy.

decimal

Otevření zdrojové databáze programu.

(ID) Kalk (ID) resr use-resource

Nadefinujeme si konstanty a prvky grafického rozhraní.

1000 constant MainFormID
1010 dblField display
1116 constant btnClrID
1117 constant btnDropID
1118 constant btnOffID