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
Statearea
(Web Publishing)


Vytvořeno: 11-12-1998 16:12:14
Poslední změna: 01-14-2003 10:23:03

Outputs detailed information about the given state transition diagram.

Modul

Module: Web Publishing

Zdrojový kód:

PROCEDURE Statearea(func$,name$)
BEGIN
  foundsomething! = FALSE;
  FOR Statearea WHERE Function = func$ AND Name = name$ DO
    foundsomething! = TRUE;
    FOR Function WHERE Name = func$ DO
        CALL Header("Stavový diagram - " + Conv$(Boxname));
        CALL Title ("Stavový diagram", Conv$(Boxname));
    END
  END
  
  //display a dummy title if the state area does not exist
  IF NOT foundsomething! THEN
    CALL Header("Stavový diagram - " + func$);
    CALL Title ("Stavový diagram", func$);
  END

  IF foundsomething! THEN
    FOR Statearea WHERE Function = func$ AND Name = name$ DO
      //this element has only one page
      PRINT {HTML} "<P ALIGN=CENTER><IMG SRC=" + Str$(Object) + ".png BORDER=0 usemap=""#map""></P>", NL;
      
      //general object data
      CALL GenObjectData(Object, FALSE, TRUE);
      PRINT {HTML} "<HR SIZE=""1"" COLOR=""#3366CC"">", NL;
  
      //two column table with userdefined properties of the element - one line per property
      CALL GenUserdefinedProperties(Object);

      // link to control function
      PRINT {HTML} "<TABLE>",NL;
      PRINT {HTML} " <TR>", NL;
      PRINT {HTML} " <TD WIDTH=170 ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
      PRINT {HTML} "<B>Řídicí funkce:</B></FONT></TD>", NL;
      PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
      FOR Function WHERE Name= Statearea.Function DO
          PRINT {HTML} Anchor$("<B>" + Conv$(Function.Boxname) + "</B>", "", Str$(Function.Object) + ".htm");
      END
      PRINT {HTML} "</FONT></TD>", NL;
      PRINT {HTML} " </TR>", NL;
      PRINT {HTML} "</TABLE>",NL;
      PRINT {HTML} "<HR SIZE=""1"" COLOR=""#3366CC""><BR>", NL;
      
      // list of all states
      CALL H2_TopSpaceless("Stavy");
      foundstate! = FALSE;
      FOREACH State WHERE Function = Statearea.Function DO
        foundstate! = TRUE;
        BREAK;
      END
      
      // get DescPageMode
      CALL GetSystemProperty("WebPubDescriptionPage", sepPage$);
      
      IF foundstate! THEN
        PRINT {HTML} "<TABLE CELLPADDING=2 VALIGN=BASELINE NOWRAP>", NL;
        PRINT {HTML} " <TR>", NL;
        PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">Název</FONT></TH>", NL;
        PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">Počáteční/konečný stav</FONT></TH>", NL;
        PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">Popis</FONT></TH>", NL;
        PRINT {HTML} " </TR>", NL;
        FOREACH State WHERE Function = Statearea.Function ORDER BY Name DO
          PRINT {HTML} " <TR>",NL;

          //first column - state name
          PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
          PRINT {HTML} Anchor$(CONV$(Boxname), "State"+SUBST$(Name," ","_"), "");
          PRINT {HTML} "</FONT></TD>",NL;
          
          //second column - state type
          PRINT {HTML} " <TD ALIGN=CENTER VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
          statetype$ = "-";
          IF IsFinal<>0 THEN
             statetype$ = "konečný stav";
          ELSE
              FOR Function WHERE Name=State.Function AND Creationstate=State.Name DO
                  statetype$ = "počáteční stav";
              END
          END
          PRINT {HTML} statetype$;
          PRINT {HTML} "</FONT></TD>",NL;
          
          // third column - description
          PRINT {HTML} " <TD ALIGN=CENTER VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
          IF State.hasText THEN
              IF sepPage$ = "TRUE" THEN
                  PRINT {HTML} Anchor$( "Text", "", "desc_st_" + SUBST$(Name," ","_") + "_"+ Str$(Statearea.Object) + ".htm");
              ELSE
                  PRINT {HTML} Anchor$( "Text", "", "#StateDesc"+SUBST$(Name," ","_"));
              END
          ELSE
              PRINT {HTML} "-";
          END
          PRINT {HTML} "</FONT></TD>",NL;
          PRINT {HTML} " </TR>",NL;
        END
        PRINT {HTML} "</TABLE>",NL;
       
      // descriptions of states
      IF sepPage$ <> "TRUE" THEN
          firstStateDesc! = TRUE;
          FOREACH State WHERE Function = Statearea.Function AND hasText ORDER BY Name DO
            IF firstStateDesc! THEN
              PRINT {HTML} "<BR>",NL;
              CALL H2_TopSpaceless("Popis stavu");
              firstStateDesc! = FALSE;
            END
            PRINT {HTML} "<IMG SRC=""bullet.gif"" ALIGN=""top"">";
            PRINT {HTML} " <I>", Anchor$(CONV$(Boxname),"StateDesc" + SUBST$(Name," ","_"),"") +"</I><BR><BR>",NL;
            dummy$ = Text;
            PRINT dummy$;
            PRINT {HTML} "<BR>",NL," ", Anchor$("<IMG SRC=""triangle.gif"" BORDER=""0"" WIDTH=""14"" HEIGHT=""14"" ALIGN=""top"">","","#State" + SUBST$(Name," ","_")), NL;
            PRINT {HTML} "<BR>",NL;
          END
      END
      
      // list of transitions
      PRINT {HTML} "<BR>",NL;
      CALL H2_TopSpaceless("Přechody");
      foundtrans! = FALSE;
      FOREACH Transition WHERE Function = Statearea.Function DO
        foundtrans! = TRUE;
        BREAK;
      END
      IF foundtrans! THEN
        PRINT {HTML} "<TABLE CELLPADDING=2 VALIGN=BASELINE NOWRAP>", NL;
        PRINT {HTML} " <TR>", NL;
        PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">Výchozí stav</FONT></TH>", NL;
        PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">Cílový stav</FONT></TH>", NL;
        PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">Podmínky</FONT></TH>", NL;
        PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">Akce</FONT></TH>", NL;
        PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">Popis</FONT></TH>", NL;
        PRINT {HTML} " </TR>", NL;
        FOREACH Transition WHERE Function = Statearea.Function ORDER BY Sourcestate,Name DO
          PRINT {HTML} " <TR>",NL;

          //first column - source state
          PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
          
          // transition into start state
          IF Transition.Sourcestate="" THEN
             sourcestate$="-";
             desclinkid$="TransDescStart";
             translinkid$="TransStart";
             descPageLink$ = "desc_tr_" + Subst$(Transition.Name, " ", "_");
          ELSE
              FOR State WHERE Function=Transition.Function AND Name=Transition.Sourcestate DO
                  sourcestate$=Conv$(Boxname);
                  tmpStr$ = SUBST$(Name," ","_");
                  desclinkid$="TransDesc" + tmpStr$;
                  translinkid$="Trans" + tmpStr$;
                  descPageLink$ = "desc_tr_" + tmpStr$;
              END
              desclinkid$=desclinkid$+"_"+Right$(Transition.Name,1);
              translinkid$=translinkid$+"_"+Right$(Transition.Name,1);
              descPageLink$ = descPageLink$ + "_" + Subst$(Transition.Name, " ", "_");
          END
          PRINT {HTML} Anchor$(sourcestate$, translinkid$, "");
          PRINT {HTML} "</FONT></TD>",NL;
          
          //second column - target state
          PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
          FOR state WHERE Function = Transition.Function AND Name = Transition.Targetstate DO
              PRINT {HTML} Conv$(Boxname);
          END
          PRINT {HTML} "</FONT></TD>",NL;
                   
             // determine number of rows according to number of conditions and actions
          condcnt%=0;
          actcnt%=0;
          FOREACH Combinationpart WHERE Function=Transition.Function AND Sourcestate=Transition.Sourcestate
                                    AND Transition=Transition.Name DO
              condcnt%=COUNT();
          END
          IF Transition.Sourcestate="" THEN
              FOREACH Creationaction WHERE Function=Transition.Function AND State=Transition.Targetstate DO
                  actcnt%=COUNT();
              END
          ELSE
              FOREACH Controlaction WHERE Function=Transition.Function AND Sourcestate=Transition.Sourcestate
                                      AND Transition=Transition.Name DO
                  actcnt%=COUNT();
              END
          END
          IF actcnt%>condcnt% THEN
             maxRow%=actcnt%;
          ELSE
             maxRow%=condcnt%;
          END
          row%=1;
          WHILE row%<=maxRow% DO
              // first and second column stay empty
              IF row%>1 THEN
                  PRINT {HTML} " <TR>",NL;
                  PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                  PRINT {HTML} "";
                  PRINT {HTML} "</FONT></TD>",NL;
                  
                  PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                  PRINT {HTML} "";
                  PRINT {HTML} "</FONT></TD>",NL;
              END
              // third column empty if more actions than conditions
              IF row%>condcnt% THEN
                  PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                  PRINT {HTML} "";
                  PRINT {HTML} "</FONT></TD>",NL;
              ELSE
                  // third column - conditions
                  i%=1;
                  FOREACH Combinationpart WHERE Function=Transition.Function AND Sourcestate=Transition.Sourcestate
                                            AND Transition=Transition.Name DO
                     IF i%=row% THEN
                         PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                         IF i%>1 THEN
                            PRINT {HTML} "And ";
                         END
                         IF Negated<>0 THEN
                            PRINT {HTML} "Not ";
                         END
                         FOR Datastructure WHERE Name = Combinationpart.Event DO
                             PRINT {HTML} Conv$(Boxname);
                         END
                         PRINT {HTML} "</FONT></TD>",NL;
                         BREAK;
                     ELSE
                        i%=i%+1;
                     END
                  END
              END
              // forth column empty if more conditions than actions
              IF row%>actcnt% AND actcnt%<>0 THEN
                  PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                  PRINT {HTML} "";
                  PRINT {HTML} "</FONT></TD>",NL;
              ELSE
                  // forth column - actions
                  i%=1;
                  IF Transition.Sourcestate="" THEN // start state
                      FOREACH Creationaction WHERE Function=Transition.Function AND State=Transition.Targetstate ORDER BY Pos DO
                         IF i%=row% THEN
                             PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                             // get flow
                             CALL GetEventFlow(Function, Connectionno, act$,target$);
                             PRINT {HTML} act$ + "-->" + target$;
                             PRINT {HTML} "</FONT></TD>",NL;
                             BREAK;
                         ELSE
                            i%=i%+1;
                         END
                      END
                  ELSE
                      foundact!=FALSE;
                      FOREACH Controlaction WHERE Function=Transition.Function AND Sourcestate=Transition.Sourcestate
                                              AND Transition=Transition.Name ORDER BY Pos DO
                         foundact!=TRUE;
                         IF i%=row% THEN
                             PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                             // get flow
                             CALL GetEventFlow(Function, Connectionno, act$,target$);
                             PRINT {HTML} act$ + "-->" + target$;
                             PRINT {HTML} "</FONT></TD>",NL;
                             BREAK;
                         ELSE
                            i%=i%+1;
                         END
                      END
                     // not bound incoming flow => action not defined
                      IF NOT foundact! THEN
                         PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                         PRINT {HTML} "není určeno";
                         PRINT {HTML} "</FONT></TD>",NL;
                      END
                  END
              END

              // fifth column - description
              PRINT {HTML} " <TD ALIGN=CENTER VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
              IF row%=1 THEN
                 IF Transition.hasText THEN
                    IF sepPage$ = "TRUE" THEN
                        PRINT {HTML} Anchor$( "Text", "", descPageLink$ + "_"+ Str$(Statearea.Object) + ".htm");
                    ELSE
                        PRINT {HTML} Anchor$( "Text", "", "#"+desclinkid$);
                    END
                 ELSE
                    PRINT {HTML} "-";
                 END
              END
              PRINT {HTML} "</FONT></TD>",NL;
              PRINT {HTML} " </TR>",NL;
              row%=row%+1;
          END // while
        END // Transition
        PRINT {HTML} "</TABLE>",NL;
      

        // descriptions of transitions
        IF sepPage$ <> "TRUE" THEN
            firstTransDesc! = TRUE;
            FOREACH Transition WHERE Function = Statearea.Function AND Text <> "" ORDER BY SourceState,Name DO
               IF firstTransDesc! THEN
                  PRINT {HTML} "<BR>",NL;
                  CALL H2_TopSpaceless("Popisy přechodů");
                  firstTransDesc! = FALSE;
               END
               PRINT {HTML} "<IMG SRC=""bullet.gif"" ALIGN=""top"">";
               IF Transition.Sourcestate="" THEN
                   desclinkname$="Přechod do počátečního stavu";
                   desclinkid$="TransDescStart";
                   translinkid$="TransStart";
               ELSE
                   FOR State WHERE Function=Transition.Function AND Name=Transition.Sourcestate DO
                       desclinkname$="Přechod z "+Conv$(Boxname) +" do ";
                       desclinkid$="TransDesc"+SUBST$(Name," ","_");
                       translinkid$="Trans"+SUBST$(Name," ","_");
                   END
                   desclinkid$=desclinkid$+"_"+Right$(Transition.Name,1);
                   translinkid$=translinkid$+"_"+Right$(Transition.Name,1);
               END
               FOR State WHERE Function=Transition.Function AND Name=Transition.Targetstate DO
                   desclinkname$=desclinkname$+Conv$(Boxname);
               END
               PRINT {HTML} " <I>", Anchor$(desclinkname$,desclinkid$,"") +"</I><BR><BR>",NL;
               IF Text <> "" THEN
                  dummy$ = Text;
                  PRINT dummy$;
               END
               PRINT {HTML} "<BR>",NL," ", Anchor$("<IMG SRC=""triangle.gif"" BORDER=""0"" WIDTH=""14"" HEIGHT=""14"" ALIGN=""top"">","","#" + translinkid$), NL;
               PRINT {HTML} "<BR><BR>",NL;
           END
        END
              
      END // foundtrans!
     END // foundstate!
    END // statearea
  ELSE
    CALL H2_Spaceless("Tato funkce nemá žádný stvový diagram.");
    PRINT {HTML} "<BR>",NL;
  END
  CALL Footer("");
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\33320226.htm (C) microTOOL GmbH 2002