A Supernova programozási nyelv

A sablon és a konstrukció

Sok alkalmazásban vannak egymáshoz nagyon hasonló programrészletek, amelyek ugyanazokat az utasításokat tartalmazzák ugyanolyan sorrendben, csak más objektumon hajtódnak végre. Ezeket a hasonló programrészleteket össze lehet gyűjteni egy sablonba (TEMPLATE), ahol a valódi objektumok helyett formális objektumok szerepelnek. A létrehozott sablonokat konstrukciók (CONSTRUCT) kialakításával használhatjuk úgy, hogy a formális objektumoknak aktuális objektumokat feleltetünk meg. A SuperNOVA több sablont is biztosít, amelyeket szabadon felhasználhatunk az alkalmazásokban.
Példa sablon definiálására:

#----------------------------------------------------------------------- # # Table Editor Template to handle a dialog containing a viewbox # A zoom dialog is used to change/add records # Delete is not confirmed. # TableZoomViewbox: # Table currency is not necessarily equal to viewbox currency. In case # it is possible to uniquely position on a table record this template # should be used. Caching is used to keep the records read from the # table. Only when necessary a real table read is done. # #----------------------------------------------------------------------- TEMPLATE TZV_EDIT { CTRL_ADD CTRL_DEL CTRL_FIRST CTRL_LAST CTRL_NEXT CTRL_NPAGE CTRL_PPAGE CTRL_PREV CTRL_SEL CTRL_UPD EDIT_DIALOG EDIT_TABLE EDIT_VIEWBOX ZOOM_CANCEL ZOOM_DIALOG ZOOM_OK } #----------------------------------------------------------------------- # Inheritable functions on template TZV_EDIT #----------------------------------------------------------------------- FUNCTION dialog TZV_EDIT { ... } # Sorban a többi függvény... ... #----------------------------------------------------------------------- # Internal functions on member EDIT_TABLE #----------------------------------------------------------------------- FUNCTION NEXTLAST EDIT_TABLE { ... } # Sorban a többi függvény... #----------------------------------------------------------------------- # Internal functions on member EDIT_VIEWBOX #----------------------------------------------------------------------- FUNCTION TF_ADDVISIBLE EDIT_VIEWBOX { ... } # Sorban a többi függvény... #----------------------------------------------------------------------- # Template variable(s) #----------------------------------------------------------------------- FIELD TV_BREAK string(16) EXPR=ok|fail|break STATIC FIELD TV_CHECK string(16) EXPR=ok|fail|break STATIC

Példa konstrukció definiálására:
CONSTRUCT INHERIT TZV_EDIT { CTRL_ADD cDmn1Buj # felvitel nyomógomb CTRL_UPD cDmn1Bmod # módosítás nyomógomb CTRL_SEL cDmn1Bval # válogatás nyomógomb CTRL_FIRST cDmn1Bfirst # első lap nyomógomb CTRL_LAST cDmn1Blast # utolsó lap nyomógomb CTRL_NEXT cDmn1Bnext # következő sor nyomógomb CTRL_NPAGE cDmn1Bnpage # előző sor nyomógomb CTRL_PPAGE cDmn1Bppage # következő lap nyomógomb CTRL_PREV cDmn1Bprev # előző lap nyomógomb EDIT_DIALOG cDmn1 # fődialóg EDIT_TABLE MANUAL # tábla EDIT_VIEWBOX cVmn1 # viewbox ZOOM_CANCEL cZmn1Bmegsem # zoom_dialóg 'mégsem' nyomógomb ZOOM_DIALOG cZmn1 # zoom_dialóg ZOOM_OK cZmn1Bjo_mod # zoom_dialóg 'rendben' nyomógomb } FUNCTION TF_NORECS cDmn1 # nem talált rekordot FUNCTION TF_SHOW cVmn1 # viewbox megmutatása FUNCTION uncolor cVmn1 # viewbox sor normál színezése FUNCTION color cVmn1 # viewbox aktuális sor színezése FUNCTION TF_NOCURR cDmn1 # viewbox-ban nincs aktuális rekord FUNCTION TF_YESNO cZmn1 # rákérdezés a törlésre FUNCTION TF_FOCUS cZmn1 # cursor beállítás a zoom_dialógon FUNCTION TF_ADD_INIT cZmn1 # felvitel előtti tevékenység FUNCTION TF_SEL_INIT cZmn1 # válogatás előtti tevékenység FUNCTION TF_UPD_INIT cZmn1 # módosítás előtti tevékenység FUNCTION TF_DEL_INIT cZmn1 # törlés előtti tevékenység FUNCTION TF_MUT_INIT cZmn1 # megmutatás előtti tevékenység FUNCTION TF_ADD_CHECK cDmn1 # rekord-felvitel előtti ellenőrzés FUNCTION TF_UPD_CHECK cDmn1 # rekord-módosítás előtti ellenőrzés FUNCTION TF_SHOW cZmn1 # zoom_dialóg megmutatása FUNCTION TF_HIDE cZmn1 # zoom_dialóg eltüntetése FUNCTION TF_ORDER cDmn1 # tábla-rekord sorrend a viewbox-ban FUNCTION TF_GETPOS MANUAL # aktuális viewbox rekordhoz a megfelelő tábla rekord beolvasása FUNCTION TF_ADD_OK cDmn1 # rekord-felvitel sikerült FUNCTION TF_INIT MANUAL # tábla rekord inicializálás

Az üzenetállomány

A SuperNOVA lehetőséget biztosít arra, hogy egy alkalmazást több nyelven is lehessen használni a programkód megváltoztatása nélkül. Egy-egy külön adatállományban leírható, hogy milyen szimbolikus névhez milyen konkrét, nyelvfüggő szöveg tartozzon, és ezt az alkalmazásban fel lehet használni. Ezek alkalmazásához elegendő a SuperNOVA megfelelő környezeti változóit beállítani.
Példa üzenetállomány használatára:

FSUSRLANG=hun # a nyelv beállítása, lehet pl. en vagy ita is. FSUSRMSG=fsusr

Az fsusrhun.dat állomány tartalma:
BUT_CANCEL ~Mé&gsem BUT_CANCEL ~&Cancel BUT_DEL ~&Törlés BUT_DEL ~&Delete BUT_DELALL ~T&örli mindet BUT_DELALL ~Delete &all BUT_END ~&Vége BUT_END ~&End BUT_FIRST ~|| BUT_LAST ~>| BUT_NEW ~&Felvitel BUT_NEW ~&New BUT_NEXT ~> BUT_NEXT ~> BUT_PRINT ~&Nyomtatás BUT_PRINT ~&Print BUT_PREV ~
Használata programból: pl. BUTTON DdialogBok X=20 Y=20 TEXT=message('BUT_OK')

Adatbázis kapcsolódás

A SuperNOVA egységes adatbázis felületet biztosít, ami olyan alkalmazások készítését teszi lehetővé, melyek teljesen függetlenek az adatbázis valós típusától és struktúrájától. Egyetlen lényeges elvárás a SuperNOVA interfész számára az adatbázis és az adatok formális leírása (a mezők és táblák megfelelő definiálása). Ez a formális reprezentáció megengedi egy bizonyos adatstruktúrára épülő alkalmazás létrehozását, amiről az alkalmazás fejlesztésének befejezése után egyszerűen áttérhetünk más típusú adatbázisra a táblák típusának megváltoztatásával.

SQL felületek

A SuperNOVA megengedi SQL interfész használatát. Ilyenkor lehetséges SQL utasítások létrehozása és végrehajtása, illetve ezek eredményének SuperNOVA függvények által történő feldolgozása. Az SQL utasítások használhatóak a SuperNOVA kódba ágyazva vagy külső Script-állományon keresztül. Az alkalmazásból három fajta módon érhetünk el SQL utasításokat: