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
FSD_Traverse
(Function Structure)


Vytvořeno: 01-17-1997 16:56:32
Poslední změna: 12-04-2002 10:19:44

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

Modul

Module: Function Structure

Zdrojový kód:

PROCEDURE FSD_Traverse(Fsd$, Page%,
                       Pfuncno%, Pblockno%, Pcondno%, Ppage%,
                       level%, OnlyFSD%, BYREF fList$)
BEGIN
    indent%=4;
    x%=2;
    // don't increment level for function with OnlyFSD%
    IF OnlyFSD% = 0 THEN
        funcLevelAdd% = 1;
    ELSE
        funcLevelAdd% = 0;
    END
    WHILE x%<=570 DO
        // check functions
        FOR Func WHERE Fsd=Fsd$ AND Page=Page%
                 AND Pfuncno=Pfuncno%
                 AND Pblockno=Pblockno%
                 AND Pcondno=Pcondno%
                 AND Ppage=Ppage%
                 AND X=x% DO
            // save only FSD and STD
            IF OnlyFSD% = 0 THEN
                CALL FSD_FuncListPushLast (fList$, Function, level%);
            END
            // refinement of Func?
            p%=Page%;
            FOR Funcpage WHERE Fsd=Fsd$ AND Funcpage=Page% AND
                               Funcno=Func.Funcno DO
                p%=Page;
            END

            FOR Function WHERE Name=Function DO
                IF Reusable = 0 THEN
                    CALL FSD_Traverse (Fsd$, p%, Funcno, 0, 0, Page%,
                                       level%+funcLevelAdd%, OnlyFSD%, fList$);
                END
            END
        END
        
        // check conditions
        FOR Cond WHERE Fsd=Fsd$ AND Page=Page%
                 AND Pfuncno=Pfuncno%
                 AND Pblockno=Pblockno%
                 AND Pcondno=Pcondno%
                 AND Ppage=Ppage%
                 AND X=x% DO
            // PRINT TAB(level%*indent%), "C ", Cond, " ", Boxname, NL;
                CALL FSD_Traverse (Fsd$, Page, 0, 0, Condno, Page%,
                           level%, OnlyFSD%, fList$);
        END

        // check blocks
        FOR Block WHERE Fsd=Fsd$ AND Page=Page%
                 AND Pfuncno=Pfuncno%
                 AND Pblockno=Pblockno%
                 AND Pcondno=Pcondno%
                 AND Ppage=Ppage%
                 AND X=x% DO
            // PRINT TAB(level%*indent%), "B ", Boxname, NL;
            // refinement for Func?
            p%=Page%;
            FOR Blockpage WHERE Fsd=Fsd$ AND Blockpage=Page% AND
                               Blockno=Block.Blockno DO
                p%=Page;
            END
            CALL FSD_Traverse (Fsd$, p%, 0, Blockno, 0, Page%,
                               level%, OnlyFSD%, fList$);
        END

        // check parts
        FOR Part WHERE Fsd=Fsd$ AND Page=Page%
                 AND Pfuncno=Pfuncno%
                 AND Pblockno=Pblockno%
                 AND Pcondno=Pcondno%
                 AND Ppage=Ppage%
                 AND X=x% DO
           CALL FSD_FuncListPushLast (fList$, Name, level%);
           FOR Functionstructure WHERE Name=Part.Name DO
                FOR Func WHERE Fsd=Name AND
                               Page=1 AND Function=Name DO
                    CALL FSD_Traverse (Fsd, 1, Funcno, 0, 0, 1, level%+1, OnlyFSD%, fList$);
                END
            END
        END
        
        x%=x%+71;
    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\5504.htm (C) microTOOL GmbH 2002