(*********************************************************************
 *
 *  :Program.    Nahverkehrssystem.mod
 *  :Project.    Nahverkehrssystem
 *  :Author.     Ingo Goldak
 *  :Address.    Hohenzollerndamm 8
 *  :Address.    1000 Berlin 31
 *  :Copyright.  PD
 *  :Language.   Modula-II
 *  :Translator. M2Amiga V3.3d
 *  :Imports.    Werkzeuge, Initializations, Datenblatt, Sortieren, Zeichnen,
 *  :Imports.    Listen, Diskette [Ingo Goldak]
 *  :Contents.   Hauptprogramm mit Menu-Verteiler
 *  :History. V1.0 [Ingo Goldak] 30.03.90
 *
 *********************************************************************)

MODULE Nahverkehrssystem;

FROM SYSTEM IMPORT
     ADDRESS,SHIFT,ADR;
FROM Arts IMPORT
     Assert;
FROM Intuition IMPORT
     SetPointer,IntuiMessagePtr,IDCMPFlags,IDCMPFlagSet,ModifyIDCMP,
     SetMenuStrip,ClearMenuStrip,MenuPtr,ScreenPtr,WindowPtr;
FROM Exec IMPORT
     GetMsg,ReplyMsg;
FROM Werkzeuge IMPORT
     String,DATUM,DATENSATZ,DATUMSLISTE,FLAGSET,
     SetMenues,ClearWindow;
FROM Initializations IMPORT
     MousePtr,InitMouse,InitWait,InitMenu,InitWindow,InitScreen,InitColors;
FROM Datenblatt IMPORT
     ReadDataSet,WriteDataSet,ChangeDataSet,PrintDataSet,DeleteDataSet,
     RenameDataSet,CopyDataSet;
FROM Sortieren IMPORT
     SortNames,SortOpen;
FROM Zeichnen IMPORT
     WriteScreen,WritePrinter;
FROM Listen IMPORT
     BListNames,DListNames,BListOpen,DListOpen,BListClose,DListClose;
FROM Diskette IMPORT
     ChooseTown,WriteIFF,ReadIFF,
     CheckColors,EndAll;


VAR Menue : MenuPtr;
    Mouse,Wait : MousePtr;
    Screen : ScreenPtr;
    Window : WindowPtr;
    Dir : String;
    IntuiMsg : IntuiMessagePtr;
    class : IDCMPFlagSet;
    Date : DATUM;
    code,item,menu : CARDINAL;
    Datensatz : DATENSATZ;
    Opens : DATUMSLISTE;
    Flags : FLAGSET;
    Menu : BOOLEAN;


BEGIN (* Modul *)
   Dir:="";
   Flags:=FLAGSET{};
   InitScreen(Screen);
   Assert(Screen#NIL,ADR("Kann Screen nicht öffnen !"));
   InitColors(Screen);
   InitMenu(Menue);
   InitWindow(Window,Screen);
   Assert(Window#NIL,ADR("Kann Window nicht öffnen !"));
   Menu:=SetMenuStrip(Window,Menue);
   ModifyIDCMP(Window,IDCMPFlagSet{menuPick});
   InitMouse(Mouse);
   InitWait(Wait);
   SetPointer(Window,Mouse,16,16,-4,-1);
   SetMenues(Menue,Flags,1);
   LOOP
      IntuiMsg:=GetMsg(Window^.userPort);
      WHILE IntuiMsg#NIL DO
         class:=IntuiMsg^.class;
         code:=IntuiMsg^.code;
         ReplyMsg(IntuiMsg);
         IF (menuPick IN class)
         THEN
            menu := code MOD 32;
            item := (code DIV 32) MOD 64;
            CASE menu OF
               0 : CASE item OF
                      0 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          ReadDataSet(Window,Dir,Datensatz,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 1 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          WriteDataSet(Window,Dir,Datensatz,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 2 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          ChangeDataSet(Window,Dir,Datensatz,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 3 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          PrintDataSet(Datensatz);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 4 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          DeleteDataSet(Window,Dir,Datensatz,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 5 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          RenameDataSet(Window,Dir,Datensatz,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 6 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          CopyDataSet(Window,Dir,Datensatz,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 7 : ClearWindow(Window,Flags);
                          SetMenues(Menue,Flags,1);
                   ELSE
                   END (* CASE *);
             | 1 : CASE item OF
                      0 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          SortNames(Window,Dir,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 1 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          SortOpen(Window,Dir,Opens,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 2 : ClearWindow(Window,Flags);
                          SetMenues(Menue,Flags,1);
                   ELSE
                   END (* CASE *);
             | 2 : CASE item OF
                      0 : ClearMenuStrip(Window);
                    WriteScreen(Window,Screen,Mouse,Wait,Dir,Opens,Date,Flags);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 1 : ClearMenuStrip(Window);
                   WritePrinter(Window,Screen,Mouse,Wait,Dir,Opens,Date,Flags);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 2 : ClearWindow(Window,Flags);
                          SetMenues(Menue,Flags,1);
                   ELSE
                   END; (* CASE *)
             | 3 : CASE item OF
                      0 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          BListNames(Window,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 1 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          DListNames(Window,Dir,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 2 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          BListOpen(Window,Opens,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 3 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          DListOpen(Window,Opens,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 4 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          BListClose(Window,Opens,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 5 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          DListClose(Window,Opens,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 6 : ClearWindow(Window,Flags);
                          SetMenues(Menue,Flags,1);
                   ELSE
                   END (* CASE *);
             | 4 : CASE item OF
                      0 : CheckColors(Window,Flags);
                          SetMenues(Menue,Flags,1);
                    | 1 : ClearMenuStrip(Window);
                          ChooseTown(Screen,Window,Mouse,Wait,Dir,Flags);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 2 : ClearMenuStrip(Window);
                          SetPointer(Window,Wait,16,16,-4,-1);
                          WriteIFF(Screen,Window,Dir,Date,Flags);
                          SetPointer(Window,Mouse,16,16,-4,-1);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 3 : ClearMenuStrip(Window);
                          ReadIFF(Screen,Window,Mouse,Wait,Dir,Flags);
                          Menu:=SetMenuStrip(Window,Menue);
                          SetMenues(Menue,Flags,1);
                    | 4 : ClearMenuStrip(Window);
                          EndAll(Screen,Window,Mouse,Dir,Flags);
                          EXIT;
                    | 5 : ClearWindow(Window,Flags);
                          SetMenues(Menue,Flags,1);
                   ELSE
                   END (* CASE *);
            ELSE
            END (* CASE *);
         END (* IF *);
         IntuiMsg:=GetMsg(Window^.userPort);
      END (* WHILE *);
   END (* LOOP *);
END Nahverkehrssystem.
