VaxNt/ProDB.PGuide.Virtual
Na tomto místě si trochu popíšeme implementaci interpreteru VaxNt. Každý skript při startu dostává jednu "čistou" kopii interpretečního prostředí, tuto kopii nazýváme virtuálním strojem VaxNt. Tento stroj z pohledu skriptu implementuje všechny funkce, obsahuje proměnné v Contextu, odkazy na globální soubory atd. Není-li stanoveno jinak, skript manipuluje svůj vlastní virtuální stroj. Vedle Contextu existují pro implementaci důležité níže popsané objekty.
Jejich existence je tak trochu vynucena požadavkem na efektivnost interpretetace. Obsah Contextu bohatě stačí na běžné manipulace, ale načíst například do jedné proměnné seznam všech databázových klíčů z nějaké velké tabulky není moc dobrý nápad - přístup ke každé proměnné Contextu je pak zoufale pomalý. Proto tedy některé operace provádí interpreter na izolovaných objektech, obvykle jsou to Stringy nebo jejich pole. Týká se to headerů reportů, seznamů apod.
Přehled vnitřních proměnných virtuálního stroje VaxNt
Objekt Typ Popis
------------------------------------------------------------------------------------------------------------
Context TStringList Vlastní proměnné, se kterými skript pracuje explicitně
Watches TStringList Seznam hlídaných proměnných v ladícím režimu
Data TStringList Sem se načítají hodnoty z sql dotazů a mixují se posléze do Context
List,List2,List3 TStringList Pomocné proměnné pro konstrukce sáhodlouhých seznamů
Op String Kód právě prováděné funkce
Arg String ArgList právě prováděné funkce
Arg1 String 1.slozka operandu
Arg2 String 2.slozka operandu
DbName String Implicitní nastavitelné jméno databáze, které se týkají všechny
databázové operace insert, update apod.
_S String Stringový registr
_Sreg String Stringový registr
_Atom String Stringový registr
_Separator String Stringový registr
_Separator2 String Stringový registr
_SCnt Integer Pointer do _SReg
_ExitLabel String Stringový registr
R0 String Stringový registr
R1 String Stringový registr
S1 String Stringový registr
ReturnedList String Stringový registr
AnalyzedList String Stringový registr
SavedList String Stringový registr
ConstructedList String Stringový registr
Spacing String Stringový registr
ReturnStack Array[1..64] of Integer Stack pro _call a _return
ReturnSP Integer Stack pointer pro _call a _return
DebugLevel Integer Úroveň ladícího režimu (0-3)
Stack Array[1..64] of String Stack pro operace push a pop
SP Integer Jeho pointer
Prg Array[1..512] of String Text právě interpretovaného skriptu
PC Integer Program counter
PrgLen Integer Délka programu
PreviousResult Integer Výsledek předešlé funkce, CC
A1 String Během analýzy řádku typicky 1.Argument, jméno
A2 String Během analýzy řádku typicky 2.Argument, jméno
A3 String Během analýzy řádku typicky 3.Argument, jméno
A4 String Během analýzy řádku typicky 4.Argument, jméno
V1 String Během analýzy řádku typicky hodnota 1.Argumentu
V2 String Během analýzy řádku typicky hodnota 2.Argumentu
V3 String Během analýzy řádku typicky hodnota 3.Argumentu
V4 String Během analýzy řádku typicky hodnota 4.Argumentu
ReportHeader1 String Hlavička generovaného reportu, řádek 1
ReportFooter1 String Patička generovaného reportu, řádek 1
ReportHeader2 String Hlavička generovaného reportu, řádek 2
ReportFooter2 String Patička generovaného reportu, řádek 1
ReportHeader3 String Hlavička generovaného reportu, řádek 3
ReportFooter3 String Patička generovaného reportu, řádek 1
ReportNewLine String String vypisovaný při konci řádku
ReportPageLength Integer Počet řádků na stránku reportu
NoRefreshAtAll Boolean Indikátor potlačující refresh zobrazení po funkci exit
Přehled globálních proměnných interpreteru sdílených všemi kopiemi virtuálního stroje VaxNt
Objekt Typ Popis
------------------------------------------------------------------------------------------------------------
fIndention String Autoindentační prefix pro zápisy do textových souborů
DropSrc TStringList Zdrojový kontext pro operace "drag-and-drop", tedy obsah řádku v
pohledu, kde bylo myší "bafnuto"
DropDst TStringList Komplementární kontext pro "drag-and-drop:, tedy kam se data
"bafnutá" myší "mrsknou".
ImpliciteContext TStringList Náhradní kontext volání v situacích, kdy žádný neexistuje, například
při start-upu.
SavedContext TStringList Transientní místo pro operace save a restore přes hranici života
jednoho skriptu.
CallingContext TStringList Dočasná proměnná při volání skriptu
ReturnedContext TStringList Dtto
Defaults TStringList Systémové defaulty, platí globálně
Vector TStringList Pomocná proměnná pro vektorové operace
Vector2 TStringList Dtto
GlobalAnalyzedList String Pomocná proměnná pro vracení konstruovaných seznamů z privátních
dat každé kopie virtuálního stroje VaxNt
------------------------------------------------------------------------------------------------------------