Informační tok Funkční structura Datová struktura ER model Modulová struktura Typová struktura Relační model Dokumentace


[Celkový datový model] [Funkce] [Externí rohraní] [Stavové diagramy] [Datové elementy] [Entity] [Relace]
[Databáze] [Události] [Materiály] [Generovací funkce] [Vyhodnocovací funkce] [Konfigurace] [Uživatelé] [Projekt] [Home]



Vyhodnocovací funkce
DSD_Traverse
(Data Structure/Event/Material)


Vytvořeno: 11-01-2000 13:36:10
Poslední změna: 12-03-2002 13:02:49

Traverses a data structure using a "depth first search" algorithm. This function returns a list of data structure elements consisting of the name of each element and its hierarchy level.

Modul

Module: Data Structure/Event/Material

Zdrojový kód:

PROCEDURE DSD_Traverse(Dsd$, Page%, Pfieldno%, Pcondno%, Ppage%, level%, OnlyParts!, maxLevel%, BYREF dsdElemList$)
BEGIN
/*
    Traverses a data structure using a "depth first search" algorithm.
    This function returns a list of data structure elements consisting
    of the name of each element and its hierarchy level.
*/

IF maxLevel% = -1 OR level% < maxLevel% + 1 THEN // check recursion depth
    
    CurrentPage% = Page%;
    
    x%=2;
    WHILE x%<=570 DO
        // Fields checken
        FOR Field WHERE Datastructure=Dsd$ AND Page=Page%
                 AND Pfieldno=Pfieldno%
                 AND Pcondno=Pcondno%
                 AND Ppage=Ppage%
                 AND X=x% DO
            FOR Dpage WHERE Datastructure=Dsd$ AND FieldPage=Page% AND Fieldno=Field.Fieldno DO
                Page%=Page;
            END
                 
            IF OnlyParts! THEN
                CALL DSD_Traverse (Dsd$, Page%, Fieldno, 0, Field.Page, level%, OnlyParts!, maxLevel%, dsdElemList$);
            ELSE
                dsdElemList$=dsdElemList$ + "f"+Field.Tid + "@" + STR$(level%) + "~";
                CALL DSD_Traverse (Dsd$, Page%, Fieldno, 0, Field.Page, level% + 1, OnlyParts!, maxLevel%, dsdElemList$);
            END
            Page% = CurrentPage%;
        END
        
        // Conditions checken
        FOR Dcond WHERE Datastructure=Dsd$ AND Page=Page%
                 AND Pfieldno=Pfieldno%
                 AND Pcondno=Pcondno%
                 AND Ppage=Ppage%
                 AND X=x% DO
            IF Condition = "em" THEN
                CALL DSD_Traverse (Dsd$, Page%, 0, Dcondno, Page%, level%, OnlyParts!, maxLevel%, dsdElemList$);
            ELSE
                IF OnlyParts! THEN
                    CALL DSD_Traverse (Dsd$, Page%, 0, Dcondno, Page%, level%, OnlyParts!, maxLevel%, dsdElemList$);
                ELSE
                    dsdElemList$=dsdElemList$ + "c"+Dcond.Tid + "@" + STR$(level%) + "~";
                    CALL DSD_Traverse (Dsd$, Page%, 0, Dcondno, Page%, level% + 1, OnlyParts!, maxLevel%, dsdElemList$);
                END
            END
        END
        
        // Parts checken
        FOR DPart WHERE Datastructure=Dsd$ AND Page=Page%
                 AND Pfieldno=Pfieldno%
                 AND Pcondno=Pcondno%
                 AND Ppage=Ppage%
                 AND X=x% DO
            FOR Field WHERE Field.Datastructure = DPart.Dpartname AND
                            Field.Page = 1 AND
                            Field.Y = 15 DO
                pos% = Instr%(dsdElemList$, Field.Tid + "@");
                dsdElemList$=dsdElemList$ + "p"+Field.Tid + "@" + STR$(level%) + "~";
                IF pos% = 0 THEN // prevent recursive calls
                    CALL DSD_Traverse (DPart.Dpartname, 1, Fieldno, 0, 1, level%+1, OnlyParts!, maxLevel%, dsdElemList$);
                END
            END // FOR Field
        END // FOR DPart

        
        // Entity parts checken
        IF NOT OnlyParts! THEN
            FOR EntityPart WHERE Datastructure = dsd$ AND
                            PFieldno = pfieldno% AND
                            PCondno = pcondno% AND
                            PPage = ppage% AND
                            X = x%
            DO
               dsdElemList$=dsdElemList$ + "e"+EntityPart.Tid + "@" + STR$(level%) + "~";
            END // FOR EntityPart
        END
        x%=x%+71;
    END
END
END


Generováno: 16.10.2003 7:41 Systém: C:\Documents and Settings\hajsman\Dokumenty\Vyuka\Irs2\Projekt case40\Projekt03.csf Generováno systémem case/4/0
Vygeneroval: Administrator Soubor: C:\Documents and Settings\hajsman\Dokumenty\Vyuka\Irs2\Projekt case40\html\515896892.htm (C) microTOOL GmbH 2002