home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / pascal / sgem122p / demo / demo.pas < prev    next >
Pascal/Delphi Source File  |  1994-05-30  |  23KB  |  563 lines

  1. (* ------------------------------------------------------------------- *)
  2. (* Module Type          : *) PROGRAM
  3. (* Module Name          : *) Demo;
  4. (* Module Param         : *) {$X+}
  5. (* Module Version       : 1.22                                         *
  6.  * Module Date          : 30-05-94                                     *
  7.  * Last Change          : 30-05-94                                     *
  8.  * Author               : Andrea Pietsch                               *
  9.  * Programming Language : Pure-Pascal                                  *
  10.  * Copyright            : (c) 1994, Andrea Pietsch, 56727 Mayen        *
  11.  * ------------------------------------------------------------------- *)
  12.  
  13. USES    SYS_GEM, GEM;
  14.  
  15. (* ------------------------------------------------------------------- *)
  16.  
  17. {$I DEMO.I }
  18.  
  19. (* ------------------------------------------------------------------- *)
  20.  
  21. CONST   USR_KEY         = 0;
  22.  
  23. (* ------------------------------------------------------------------- *)
  24.  
  25.         ASK_TERM        = '[2][ Wollen Sie das Demo | wirklich verlassen? ][ [Nein | [Ja ]';
  26.         NO_DRAG         = '[1][ Auf dieses Fenster können | Sie keine Objekte ziehen! ][ [Abbruch ]';
  27.  
  28. (* ------------------------------------------------------------------- *)
  29.  
  30. VAR     par             : PARAMETER;
  31.         win_id          : LONGINT;
  32.         pop             : INTEGER;
  33.         slid_txt        : ARRAY [1..20] OF STRING [35];
  34.         zeit            : LONGINT;
  35.         s               : STRING;
  36.         i               : INTEGER;
  37.  
  38. (* ------------------------------------------------------------------- *)
  39.  
  40.         rsc_main        : AESTreePtr;
  41.         rsc_menu        : AESTreePtr;
  42.         rsc_info        : AESTreePtr;
  43.         rsc_bits        : AESTreePtr;
  44.         rsc_tool        : AESTreePtr;
  45.         rsc_pop         : AESTreePtr;
  46.         rsc_edit        : AESTreePtr;
  47.  
  48. (* ------------------------------------------------------------------- *)
  49.  
  50. PROCEDURE LoadText ( CONST fname : STRING ); FORWARD;
  51.  
  52. (* -------------------------------------------------------------------
  53.  * Zeichnet die "Uhr" im Fenster jede Sekunde
  54.  * ------------------------------------------------------------------- *)
  55.  
  56. PROCEDURE draw_bits;
  57.  
  58. VAR     s : STRING [10];
  59.  
  60. BEGIN
  61.   zeit := zeit + 1;
  62.   str ( zeit : 5, s );
  63.   SetText ( rsc_bits, BI_SEC, s );
  64.   RedrawObj ( rsc_bits, BI_SEC, 0, NONE, UPD_STATE );
  65. END;
  66.  
  67. (* -------------------------------------------------------------------
  68.  * Behandelt die Aktivitäten des "Uhren"-Fensters. Wenn das Fenster
  69.  * ausgeblendet oder Iconifiziert wird, müssen die Timer-Funktion
  70.  * ausgeschaltet werden.
  71.  * ------------------------------------------------------------------- *)
  72.  
  73. FUNCTION handle_bits ( msg, button : INTEGER; inf : DIALOG_INFO_PTR ) : INTEGER;
  74.  
  75. BEGIN
  76.   CASE msg OF
  77.     SG_START     : BEGIN
  78.                      SetText ( rsc_bits, BI_SEC, '' );
  79.                      SetProcTimer ( draw_bits );
  80.                      SetTimer ( 1000, 0 );
  81.                    END;
  82.     SG_INVISIBLE : SetTimer ( 0, 0 );
  83.     SG_VISIBLE   : SetTimer ( 1000, 0 );
  84.     SG_QUIT,
  85.     SG_END       : BEGIN
  86.                      SetTimer ( 0, 0 );
  87.                      handle_bits := SG_CLOSE;
  88.                      exit;
  89.                    END;
  90.   END;
  91.   handle_bits := SG_CONT;
  92. END;
  93.  
  94. (* -------------------------------------------------------------------
  95.  * Soll ein Fensterdialog geöffnet werden und steht kein Fenster mehr
  96.  * zur Verfügung, so kann der Dialog entweder abgebrochen (DIAL_ABORT)
  97.  * werden, oder als "normale" Dialogbox weitergeführt werden.
  98.  * ------------------------------------------------------------------- *)
  99.  
  100. FUNCTION no_window_left : INTEGER;
  101.  
  102. BEGIN
  103.   IF ( Alert ( ALERT_NORM, 1, '[4][ Kein Fenster mehr frei! | Möchten Sie mit einer | Dialogbox weiterarbeiten? ][ [Ja | [Nein ]' ) = 1 ) THEN
  104.     BEGIN
  105.       no_window_left := SG_CONT;
  106.       exit;
  107.     END;
  108.   no_window_left := SG_ABORT;
  109. END;
  110.  
  111. (* -------------------------------------------------------------------
  112.  * Mit Hilfe von einer solchen Funktion, können ohne Probleme bestimmte
  113.  * Werte oder Zustände in einem Dialog geprüft werden.
  114.  *
  115.  * ed ist dabei die positive Nummer des Editfeldes, wenn der Cursor das
  116.  * Feld verlassen soll, negativ, wenn der Cursor das Feld betritt.
  117.  *
  118.  * Id ist die Id, die bei WindowDialog angegeben wurde. So kann man eine
  119.  * Routine zum Testen mehrerer Dialoge verwenden.
  120.  *
  121.  *
  122.  * Rückgabe:  -1   Der Cursor soll im Feld bleiben
  123.  *             0   Cursor wurde mittels SetEditField schon gesetzt
  124.  *             1   ok. Weitermachen!
  125.  * ------------------------------------------------------------------- *)
  126.  
  127. FUNCTION check_range ( tree : AESTreePtr; ed : INTEGER; id : LONGINT ) : INTEGER;
  128.  
  129. VAR     s   : STRING [80];
  130.         i   : INTEGER;
  131.         res : INTEGER;
  132.  
  133. BEGIN
  134.   IF ( tree = rsc_edit ) THEN
  135.     BEGIN
  136.       IF ( ed > 0 ) THEN
  137.         BEGIN
  138.           GetText ( rsc_edit, ed, s );
  139.           val ( s, i, res );
  140.           CASE ed OF
  141.             SE_Z50_100 : BEGIN
  142.                            IF (( i < 50 ) or ( i > 100 )) THEN
  143.                              BEGIN
  144.                                Alert ( ALERT_NORM, 1, '[1][ Die Zahl soll zwischen | 50..100 liegen! ][ [Nochmal ]' );
  145.                                check_range := -1;
  146.                                exit;
  147.                              END;
  148.                          END;
  149.             SE_Z90_200 : BEGIN
  150.                            IF (( i < 90 ) or ( i > 200 )) THEN
  151.                              BEGIN
  152.                                Alert ( ALERT_NORM, 1, '[1][ Die Zahl soll zwischen | 90..200 liegen! ][ [Nochmal ]' );
  153.                                check_range := -1;
  154.                                exit;
  155.                              END;
  156.                          END;
  157.             SE_Z99_101 : BEGIN
  158.                            IF (( i < 99 ) or ( i > 101 )) THEN
  159.                              BEGIN
  160.                                Alert ( ALERT_NORM, 1, '[1][ Die Zahl soll zwischen | 99..101 liegen! ][ [Nochmal ]' );
  161.                                check_range := -1;
  162.                                exit;
  163.                              END;
  164.                          END;
  165.             END;
  166.         END;
  167.     END;
  168.   check_range := 1;
  169. END;
  170.  
  171. (* -------------------------------------------------------------------
  172.  * Behandelt alle Aktionen wärend einem Dialog.
  173.  *
  174.  * SG_NOWIN     Kein Fenster mehr da. SG_CONT bedeutet, als Dialog
  175.  *              darstellen --> ist wichtig!
  176.  *
  177.  * SG_START     Der Dialog wird gleich gezeichnet. Hier ist Zeit für
  178.  *              eine eventuelle Initialisierung des Dialogs, Buttons,
  179.  *              Editfelder etc...
  180.  *
  181.  * SG_END       Dialog soll geschlossen werden. button enthält das
  182.  *              Objekt, den der Benutzer gewählt hat.
  183.  *
  184.  * SG_QUIT      wird nach dem Schliessen aufgerufen. Evtl. Speicher
  185.  *              sollte hier freigegeben werden.
  186.  *
  187.  * SG_DRAGDROP  Der User hat Objekte auf das Fenster gezogen. Ob Sie die
  188.  *              Nachricht auswerten oder nicht, liegt allein bei Ihnen.
  189.  * ------------------------------------------------------------------- *)
  190.  
  191. FUNCTION handle_edit ( msg, button : INTEGER; inf : DIALOG_INFO_PTR ) : INTEGER;
  192.  
  193. BEGIN
  194.   CASE msg OF
  195.     SG_NOWIN    : BEGIN
  196.                     handle_edit := no_window_left;
  197.                     exit;
  198.                   END;
  199.     SG_START    : BEGIN
  200.                     ClearEditFields ( rsc_edit );
  201.                     SetReturn ( 1 );
  202.                     SetFieldProc ( check_range );
  203.                     SetText ( rsc_edit, SE_Z50_100, '20'  );
  204.                     SetText ( rsc_edit, SE_Z90_200, '100' );
  205.                     SetText ( rsc_edit, SE_Z99_101, '100' );
  206.                   END;
  207.     SG_END      : BEGIN
  208.                     IF ( button = SE_CLR ) THEN
  209.                       BEGIN
  210.                         ClearEditFields ( rsc_edit );
  211.                         SetEditField ( rsc_edit, SE_Z50_100 );
  212.                         SetText ( rsc_edit, SE_Z50_100, '20'  );
  213.                         SetText ( rsc_edit, SE_Z90_200, '100' );
  214.                         SetText ( rsc_edit, SE_Z99_101, '100' );
  215.                         handle_edit := SG_REDRAW;
  216.                         exit;
  217.                       END
  218.                     ELSE
  219.                       BEGIN
  220.                         handle_edit := SG_CLOSE;
  221.                         exit;
  222.                       END;
  223.                   END;
  224.     SG_DRAGDROP : Alert ( ALERT_NORM, 1, '[1][ Drag & Drop Aktionen | in dieses Fenster | sind nicht möglich! ][ [Abbruch ]' );
  225.   END;
  226.   handle_edit := SG_CONT;
  227. END;
  228.  
  229. (* -------------------------------------------------------------------
  230.  * Verwaltet die Textfenster. Beim Klick ins Fenster können die Stati
  231.  * der Zeile eingestellt werden (SG_.CLICK), oder beim Klick in die
  232.  * Toolbar wird sortiert (SG_BUTTON).
  233.  * ------------------------------------------------------------------- *)
  234.  
  235. FUNCTION handle_text ( msg : INTEGER; inf : WINDOW_INFO_PTR ) : INTEGER;
  236.  
  237. VAR     s : STRING [200];
  238.         i : INTEGER;
  239.  
  240. BEGIN
  241.   CASE msg OF
  242.     SG_END     : BEGIN
  243.                    handle_text := SG_CLOSE;
  244.                    exit;
  245.                  END;
  246.     SG_BUTTON  : BEGIN
  247.                    IF ( inf^.obj_id = MakeId ( 'TOOL' )) THEN
  248.                      BEGIN
  249.                        IF ( inf^.item = TO_SORT ) THEN
  250.                          BEGIN
  251.                            i := Alert ( ALERT_NORM, 3, '[2][ Wie soll sortiert werden? ][ [Auf | A[b | [Nix ]' );
  252.                            IF ( i = 1 ) THEN do_qsort ( inf^.id, cmp_strings_up );
  253.                            IF ( i = 2 ) THEN do_qsort ( inf^.id, cmp_strings_dn );
  254.                          END;
  255.                      END;
  256.                  END;
  257.     SG_KEY     : BEGIN
  258.                    CASE inf^.key OF
  259.                      $4800 : ScrollWindow ( inf^.handle, SCROLL_UP );
  260.                      $4b00 : ScrollWindow ( inf^.handle, SCROLL_LEFT );
  261.                      $5000 : ScrollWindow ( inf^.handle, SCROLL_DOWN );
  262.                      $4d00 : ScrollWindow ( inf^.handle, SCROLL_RIGHT );
  263.                      $4838 : ScrollWindow ( inf^.handle, SCROLL_PG_UP );
  264.                      $4b34 : ScrollWindow ( inf^.handle, SCROLL_PG_LEFT );
  265.                      $5032 : ScrollWindow ( inf^.handle, SCROLL_PG_DOWN );
  266.                      $4d36 : ScrollWindow ( inf^.handle, SCROLL_PG_RIGHT );
  267.                    END;
  268.                  END;
  269.     SG_LCLICK1,
  270.     SG_LCLICK2,
  271.     SG_RCLICK1,
  272.     SG_RCLICK2 : BEGIN
  273.                    IF ( inf^.line_ptr <> NIL ) THEN
  274.                      BEGIN
  275.                        str ( inf^.line, s );
  276.                        s := concat ( '[2][ Sie haben Zeile ', s, ' angeklickt. | Darstellung ändern: ][ [Fett | [Kursiv | [Unterst. | [Nix ]' );
  277.                        CASE Alert ( ALERT_NORM, 4, s ) OF
  278.                          1 : BEGIN
  279.                                inf^.line_ptr^ := #1;
  280.                                RedrawArea ( inf^.handle, inf^.draw_area );
  281.                              END;
  282.                          2 : BEGIN
  283.                                inf^.line_ptr^ := #4;
  284.                                RedrawArea ( inf^.handle, inf^.draw_area );
  285.                              END;
  286.                          3 : BEGIN
  287.                                inf^.line_ptr^ := #8;
  288.                                RedrawArea ( inf^.handle, inf^.draw_area );
  289.                              END;
  290.                          END;
  291.                        END;
  292.                  END;
  293.     SG_DRAGDROP: BEGIN
  294.                    ctopascalstring ( s, inf^.dd^.data );
  295.                    LoadText ( s );
  296.                  END;
  297.   END;
  298.   handle_text := SG_CONT;
  299. END;
  300.  
  301. (* -------------------------------------------------------------------
  302.  * Lädt eine Textdatei und stellt sie im Fenster dar. Die Fenster
  303.  * werden von SysGem verwaltet. Würde statt 'handle_text' NULL über-
  304.  * geben, würde auf keine Nachricht reagiert, außer auf das Schließen
  305.  * des Fensters.
  306.  * ------------------------------------------------------------------- *)
  307.  
  308. PROCEDURE LoadText ( CONST fname : STRING );
  309.  
  310. VAR     i : WORD;
  311.  
  312. BEGIN
  313.   IF ( length ( fname ) > 4 ) THEN
  314.     BEGIN
  315.       ShowBee;
  316.       i := Display ( fname, fname, '', 255, win_id, 8, 90, 300, 200, handle_text );
  317.       ShowArrow;
  318.       IF ( i = 0 ) THEN
  319.         BEGIN
  320.           Alert ( ALERT_NORM, 1, '[1][ Die Datei konnte nicht | geladen werden! ][ [Abbruch ]' );
  321.         END
  322.       else
  323.         BEGIN
  324.           i := WORD ( SetWindowParm ( GetHandle ( win_id ), SET_W, -1 ));
  325.           SetWinMaxSize ( win_id, i, -1 );
  326.           LinkTree ( win_id, rsc_tool, MakeId ( 'TOOL' ), LINK_TOP );
  327.           inc ( win_id );
  328.         END;
  329.     END;
  330. END;
  331.  
  332. (* ------------------------------------------------------------------- *)
  333.  
  334. FUNCTION handle_main ( msg, button : INTEGER; inf : DIALOG_INFO_PTR ) : INTEGER;
  335.  
  336. VAR     s : STRING [255];
  337.  
  338. BEGIN
  339.   CASE msg OF
  340.     SG_START    : LinkSlider ( rsc_main, MA_UP, MA_DN, MA_SHOW, MA_HIDE, 20, MA_BOX, @slid_txt, sizeof ( slid_txt [1] ), 0 );
  341.     SG_END      : BEGIN
  342.                     CASE button OF
  343.                       -1       : BEGIN
  344.                                    IF ( Alert ( ALERT_NORM, 1, ASK_TERM ) = 2 ) THEN
  345.                                      BEGIN
  346.                                        handle_main := SG_TERM;
  347.                                        exit;
  348.                                      END;
  349.                                  END;
  350.                       MA_POP1  : BEGIN
  351.                                    xPopUp ( rsc_main, MA_POP1, rsc_pop, 0, pop );
  352.                                    RedrawObj ( rsc_main, MA_POP2, 0, NONE, UPD_STATE );
  353.                                  END;
  354.                       MA_POP2  : BEGIN
  355.                                    Cycle ( rsc_main, MA_POP1, rsc_pop, SP_1, SP_16, pop );
  356.                                    RedrawObj ( rsc_main, MA_POP2, 0, NONE, UPD_STATE );
  357.                                  END;
  358.                       MA_LIST1,
  359.                       MA_LIST2 : BEGIN
  360.                                    s := '';
  361.                                    s := s + ' Weiß      ' + #0;
  362.                                    s := s + ' Schwarz   ' + #0;
  363.                                    s := s + ' Rot       ' + #0;
  364.                                    s := s + ' Grün      ' + #0;
  365.                                    s := s + ' Blau      ' + #0;
  366.                                    s := s + ' Cyan      ' + #0;
  367.                                    s := s + ' Gelb      ' + #0;
  368.                                    s := s + ' Magenta   ' + #0;
  369.                                    s := s + ' Hellgrau  ' + #0;
  370.                                    s := s + ' Dunkelgrau' + #0;
  371.                                    s := s + ' Hellrot   ' + #0;
  372.                                    s := s + ' Hellgrün  ' + #0;
  373.                                    Listbox ( @s [1], 11, 12, rsc_main, MA_LIST1 );
  374.                                  END;
  375.                     ELSE BEGIN
  376.                            Alert ( ALERT_NORM, 1, '[1][ Dieser Button könnte | eine Funktion haben. ][ [Aha ]' );
  377.                          END;
  378.                     END;
  379.                   END;
  380.     SG_MENU     : BEGIN
  381.                     CASE button OF
  382.                       M2_INFO : DoDialog ( rsc_info, 0, ' Information ' );
  383.                       M2_QUIT : BEGIN
  384.                                   IF ( Alert ( ALERT_NORM, 1, ASK_TERM ) = 2 ) THEN
  385.                                     BEGIN
  386.                                       handle_main := SG_TERM;
  387.                                       exit;
  388.                                     END;
  389.                                 END;
  390.                     END;
  391.                   END;
  392.     SG_KEY      : BEGIN
  393.                     CASE button OF
  394.                       $4800 : ScrollSlider ( rsc_main, MA_BOX, SCROLL_UP );
  395.                       $5000 : ScrollSlider ( rsc_main, MA_BOX, SCROLL_DOWN );
  396.                     END;
  397.                   END;
  398.     SG_DRAGDROP : BEGIN
  399.                    ctopascalstring ( s, inf^.dd^.data );
  400.                    LoadText ( s );
  401.                  END;
  402.     END;
  403.   handle_main := SG_CONT;
  404. END;
  405.  
  406. (* -------------------------------------------------------------------
  407.  * Behandelt die Desktop-Menüzeile
  408.  * ------------------------------------------------------------------- *)
  409.  
  410. FUNCTION handle_menu ( msg : INTEGER; inf : WINDOW_INFO_PTR ) : INTEGER;
  411.  
  412. BEGIN
  413.   IF ( msg = SG_MENU ) THEN
  414.     BEGIN
  415.       CASE inf^.mItem OF
  416.         ME_INFO : DoDialog ( rsc_info, 0, '| Information ' );
  417.         ME_QUIT : BEGIN
  418.                     IF ( Alert ( ALERT_NORM, 1, ASK_TERM ) = 2 ) THEN
  419.                       BEGIN
  420.                         handle_menu := SG_TERM;
  421.                         exit;
  422.                       END;
  423.                   END;
  424.         ME_EDIT : WindowDialog ( MakeId ( 'EDIT' ), -1, -1, ' Edit-Felder ', '', 1, 0, rsc_edit, NIL, SE_Z50_100, NIL, handle_edit );
  425.       END;
  426.     END;
  427.   handle_menu := SG_CONT;
  428. END;
  429.  
  430. (* ------------------------------------------------------------------- *)
  431.  
  432. PROCEDURE first_info;
  433.  
  434. VAR     id      : LONGINT;
  435.  
  436. BEGIN
  437.   id := MakeId ( 'SGEM' );
  438.   IF ( OpenLogWindow ( id, ' SysGem-Information ', '', 61, 15, 8, 20, APROC ( NIL )) <> 0 ) THEN
  439.     BEGIN
  440.       wwrite ( id, 'Willkommen bei ' + #27 + 'pSysGem' + #27 + 'q' + #13 + #13 );
  441.       wwrite ( id, 'Mit ' + #27 + 'pSysGem' + #27 + 'q wird das Erstellen von GEM-Programmen zum Kinder-' + #13 );
  442.       wwrite ( id, 'spiel! (Text-)Fenster und Fensterdialoge werden komplett' + #13 );
  443.       wwrite ( id, 'von ' + #27 + 'pSysGem' + #27 + 'q verwaltet, so daß ' + #27 + '+Sie' + #27 + '- sich in Ruhe um' + #13 );
  444.       wwrite ( id, 'die wichtigeren Dinge kümmern können.' + #13 );
  445.       wwrite ( id, 'SysGem übernimmt z.B. auch die Verwaltung der ' + #27 + '+Iconifizierung' + #13 );
  446.       wwrite ( id, '(ICFS/MTos) und des Drag & Drop (unter Gemini/MTos)' + #27 + '-. Pro-' + #13 );
  447.       wwrite ( id, 'bieren Sie es doch einfach mal mit diesem Demo aus!' + #13 + #13 );
  448.       wwrite ( id, 'Schauen Sie sich doch danach einfach mal die Quelle an,' + #13 );
  449.       wwrite ( id, 'Sie werden überrascht sein, wie einfach und schnell es' + #13 );
  450.       wwrite ( id, 'gehen kann...' + #13 + #13 );
  451.       wwrite ( id, #27 + '(Schließ mich...' + #27 + ')' );
  452.     END;
  453. END;
  454.  
  455. (* ------------------------------------------------------------------- *)
  456.  
  457. BEGIN
  458.   win_id := MakeId ( 'TX00' );
  459.   pop    := 1;
  460.   IF ( Init_GEM ( @par, '', MakeId ( 'DEMO' ), 'SysGem-Demo', MakeId ( 'ANPI' ), 'Andreas Pietsch', USR_KEY ) > 0 ) THEN
  461.     BEGIN
  462.  
  463.       (* --------------------------------------------------------------
  464.        * Initialisiert die Resource
  465.        * -------------------------------------------------------------- *)
  466.  
  467.       IF ( LoadResource ( 'DEMO.RSC' ) = 0 ) THEN
  468.         BEGIN
  469.           exit;
  470.         END;
  471.       rsc_menu  := RscAdr ( R_TREE, MENUE1 );
  472.       rsc_info  := RscAdr ( R_TREE, SGINFO );
  473.       rsc_bits  := RscAdr ( R_TREE, BITS );
  474.       rsc_main  := RscAdr ( R_TREE, MAIN );
  475.       rsc_tool  := RscAdr ( R_TREE, TOOLS );
  476.       rsc_pop   := RscAdr ( R_TREE, SPOPUP );
  477.       rsc_edit  := RscAdr ( R_TREE, SEDIT );
  478.  
  479.       (* --------------------------------------------------------------
  480.        * Überschrift für die Alertbox
  481.        * -------------------------------------------------------------- *)
  482.  
  483.       SetAlertTitle ( '| SysGem-Demo ' );
  484.  
  485.       (* --------------------------------------------------------------
  486.        * Die Texte für die Sliderbox in Buffer schreiben
  487.        * -------------------------------------------------------------- *)
  488.  
  489.       FOR i := 0 TO 19 DO
  490.         BEGIN
  491.           str (( i + 1 ) : 2, s );
  492.           s := concat ( ' Dieses ist die Textzeile Nr ', s, ' ' );
  493.           pascaltocstring ( s, @slid_txt [i + 1] );
  494.         END;
  495.  
  496.       (* --------------------------------------------------------------
  497.        * Dialoge anmelden
  498.        * -------------------------------------------------------------- *)
  499.  
  500.       NewDialog ( rsc_info );
  501.       NewDialog ( rsc_bits );
  502.       NewDialog ( rsc_tool );
  503.       NewDialog ( rsc_main );
  504.       NewDialog ( rsc_edit );
  505.  
  506.       (* --------------------------------------------------------------
  507.        * Menüzeile anmelden
  508.        * -------------------------------------------------------------- *)
  509.  
  510.       SetDeskTopMenu ( rsc_menu, handle_menu );
  511.  
  512.       (* --------------------------------------------------------------
  513.        * Zeituhr starten
  514.        * -------------------------------------------------------------- *)
  515.  
  516.       WindowDialog ( MakeId ( 'ZEIT' ), 8, 0, '| Zeit ', '', 1, 0, rsc_bits, NIL, 0, NIL, handle_bits );
  517.  
  518.       (* --------------------------------------------------------------
  519.        * Hauptfenster öffnen
  520.        * -------------------------------------------------------------- *)
  521.  
  522.       WindowDialog ( MakeId ( 'MAIN' ), -1, -1, ' SysGem-Demo ', '', 1, 0, rsc_main, NIL, 0, NIL, handle_main );
  523.  
  524.       (* --------------------------------------------------------------
  525.        * Text laden und anzeigen
  526.        * -------------------------------------------------------------- *)
  527.  
  528.       LoadText ( 'DEMO.I' );
  529.  
  530.       (* --------------------------------------------------------------
  531.        * Tastendrücke an die Dialoge leiten...
  532.        * -------------------------------------------------------------- *)
  533.  
  534.       TellKeyStrokes ( 1 );
  535.  
  536.       (* --------------------------------------------------------------
  537.        * Info vom Demo anzeigen
  538.        * -------------------------------------------------------------- *)
  539.  
  540.       first_info;
  541.  
  542.       (* --------------------------------------------------------------
  543.        * Timer aktivieren
  544.        * -------------------------------------------------------------- *)
  545.  
  546.       EnableTimer;
  547.  
  548.       (* --------------------------------------------------------------
  549.        * Kontrolle an SysGem abgeben
  550.        * -------------------------------------------------------------- *)
  551.  
  552.       HandleSysGem;
  553.  
  554.       (* --------------------------------------------------------------
  555.        * Programm abmelden und Speicher freigeben
  556.        * -------------------------------------------------------------- *)
  557.  
  558.       Exit_GEM;
  559.     END;
  560. END.
  561.  
  562. (* ------------------------------------------------------------------- *)
  563.