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


Vytvořeno: 12-08-1995 16:02:01
Poslední změna: 12-04-2002 10:20:03

Traverses a function structure from the specified function back to the header box. Returns a list of records consisting of the name of each function and its level.

Modul

Module: Function Structure

Zdrojový kód:

PROCEDURE FSD_TraverseReverse(funcName$, BYREF funcList$)
BEGIN
    /*
         pre: funcName$ ist der Name einer Function
        post: funcList enthält alle Funktionen von der Root bis zur
              Function mit dem Namen funcName$
    */
    funcList$="";
    /*
        elemType%: 1 = Func
                    2 = Block
                    3 = Condition
                    4 = Part?
    */
    FOR Func WHERE Function = funcName$ DO
        elemType%=1;
        elemNo%=Funcno;
        page%=Page;
        fsd$=Fsd;
        
        ready% = 0;
        WHILE ready%=0 DO

            // Func0
            IF elemType%=1 THEN
                FOR Func WHERE Fsd=fsd$ AND Page=page% AND Funcno=elemNo% DO
                    CALL FSD_FuncListPushFirst (funcList$, Function, 0);
                    
                    // für Standardbausteine Traversierung beenden
                    FOR Function WHERE Name = Func.Function DO
                        standard% = 0;
                        IF Reusable <> 0 THEN
                            standard% = 1;
                        END
                    END
                    IF standard% = 1 THEN
                        BREAK;
                    END
                    
                    IF Pfuncno <> 0 THEN
                        elemNo% = Pfuncno;
                        elemType% = 1;
                    ELSIF Pblockno <> 0 THEN
                        elemNo% = Pblockno;
                        elemType% = 2;
                    ELSIF Pcondno <> 0 THEN
                        elemNo% = Pcondno;
                        elemType% = 3;
                    ELSE
                        elemType%=4;
                    END
                    IF Ppage <> 0 THEN
                        page% = Ppage;
                    END
                END
                IF standard% = 1 THEN
                    BREAK;
                END
  
            // Block
            ELSIF elemType%=2 THEN
                FOR Block WHERE Fsd=fsd$ AND Page=page% AND Blockno=elemNo% DO
                    IF Pfuncno <> 0 THEN
                        elemNo% = Pfuncno;
                        elemType% = 1;
                    ELSIF Pblockno <> 0 THEN
                        elemNo% = Pblockno;
                        elemType% = 2;
                    ELSIF Pcondno <> 0 THEN
                        elemNo% = Pcondno;
                        elemType% = 3;
                    ELSE
                        ready%=1;
                    END
                    IF Ppage <> 0 THEN
                        page% = Ppage;
                    END
                END
            
            // Condition
            ELSIF elemType%=3 THEN
                FOR Cond WHERE Fsd=fsd$ AND Page=page% AND Condno=elemNo% DO
                    IF Pfuncno <> 0 THEN
                        elemNo% = Pfuncno;
                        elemType% = 1;
                    ELSIF Pblockno <> 0 THEN
                        elemNo% = Pblockno;
                        elemType% = 2;
                    ELSIF Pcondno <> 0 THEN
                        elemNo% = Pcondno;
                        elemType% = 3;
                    ELSE
                        ready%=1;
                    END
                    IF Ppage <> 0 THEN
                        page% = Ppage;
                    END
                END
            ELSE
                ready%=1;
                // eventuell ist FSD als Part referenziert
                FOR Part WHERE Name=fsd$ DO
                    ready%=0;
                    fsd$=Fsd;
                    page%=Page;
                    IF Pfuncno <> 0 THEN
                        elemNo% = Pfuncno;
                        elemType% = 1;
                    ELSIF Pblockno <> 0 THEN
                        elemNo% = Pblockno;
                        elemType% = 2;
                    ELSIF Pcondno <> 0 THEN
                        elemNo% = Pcondno;
                        elemType% = 3;
                    ELSE
                        ready%=1;
                    END
                    IF Ppage <> 0 THEN
                        page% = Ppage;
                    END
                END
                
            END
        END

        // In Liste die Levels eintragen
        level%=0;
        pathList$="";
        CALL FSD_FuncListIsEmpty (funcList$, isEmpty%);
        WHILE isEmpty%=0 DO
            CALL FSD_FuncListPopFirst (funcList$, func$, dummy%);
            CALL FSD_FuncListPushLast (pathList$, func$, level%);
            level%=level%+1;
            CALL FSD_FuncListIsEmpty (funcList$, isEmpty%);
        END
        funcList$=pathList$;
    
    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\8543.htm (C) microTOOL GmbH 2002