home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / useful / dev / obero / oberon-a / examples / libraries / workbench / appwindow.mod < prev    next >
Encoding:
Text File  |  1994-08-08  |  4.0 KB  |  134 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: AppWindow.mod $
  4.   Description:
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 1.2 $
  8.       $Author: fjc $
  9.         $Date: 1994/08/08 16:59:51 $
  10.  
  11.   Copyright © 1994, Frank Copeland.
  12.   This example program is part of Oberon-A.
  13.   See Oberon-A.doc for conditions of use and distribution.
  14.  
  15.   Log entries are at the end of the file.
  16.  
  17. *************************************************************************)
  18.  
  19. MODULE AppWindow;
  20.  
  21. (*
  22. ** $C= CaseChk       $I= IndexChk  $L= LongAdr   $N= NilChk
  23. ** $P- PortableCode  $R= RangeChk  $S= StackChk  $T= TypeChk
  24. ** $V= OvflChk       $Z= ZeroVars
  25. *)
  26.  
  27. IMPORT
  28.   SYS := SYSTEM,
  29.   e   := Exec,
  30.   u   := Utility,
  31.   I   := Intuition,
  32.   wb  := Workbench,
  33.   IO  := StdIO;
  34.  
  35. CONST
  36.   VersionTag = "\0$VER: AppWindow 1.0 (20.6.94)";
  37.  
  38. VAR
  39.  
  40.   awport : e.MsgPortPtr;
  41.   win    : I.WindowPtr;
  42.   appwin : wb.AppWindowPtr;
  43.   imsg   : I.IntuiMessagePtr;
  44.   amsg   : wb.AppMessagePtr;
  45.  
  46.   winsig, appwinsig : SHORTINT;
  47.   id, userdata : LONGINT;
  48.   signals : SET;
  49.   done : BOOLEAN;
  50.   i : INTEGER;
  51.  
  52. BEGIN (* AppWindow *)
  53.   IF I.base.version >= 37 THEN
  54.     wb.OpenLib (FALSE);
  55.     IF wb.base.version >= 37 THEN
  56.       awport := e.base.CreateMsgPort ();
  57.       IF awport # NIL THEN
  58.         win := I.base.OpenWindowTagsA
  59.           ( NIL,
  60.             I.waWidth,  200,
  61.             I.waHeight, 50,
  62.             I.waIDCMP,  {I.idcmpCloseWindow},
  63.             I.waFlags,  {I.wflgCloseGadget, I.wflgDragBar},
  64.             I.waTitle,  SYS.ADR ("AppWindow"),
  65.             u.tagDone );
  66.         IF win # NIL THEN
  67.           id := 1; userdata := 0;
  68.           appwin := wb.base.AddAppWindow
  69.             ( id, userdata, win, awport, NIL );
  70.           IF appwin # NIL THEN
  71.             IO.WriteStr ("AppWindow added... Drag files into AppWindow\n");
  72.             winsig := win.userPort.sigBit;
  73.             appwinsig := awport.sigBit;
  74.             done := FALSE;
  75.             WHILE ~done DO
  76.               (* Wait for IDCMP messages and AppMessages *)
  77.               signals := e.base.Wait ({winsig, appwinsig});
  78.               IF winsig IN signals THEN (* Got an IDCMP message *)
  79.                 LOOP
  80.                   imsg := SYS.VAL (I.IntuiMessagePtr,
  81.                     e.base.GetMsg (win.userPort));
  82.                   IF imsg = NIL THEN EXIT END;
  83.                   IF imsg.class = {I.idcmpCloseWindow} THEN
  84.                     done := TRUE
  85.                   END;
  86.                   e.base.ReplyMsg (imsg)
  87.                 END;
  88.               END;
  89.               IF appwinsig IN signals THEN (* Got an AppMessage *)
  90.                 LOOP
  91.                   amsg := SYS.VAL (wb.AppMessagePtr,
  92.                     e.base.GetMsg (awport));
  93.                   IF amsg = NIL THEN EXIT END;
  94.                   IO.WriteF3
  95.                     ( "AppMsg: Type=%ld, ID=%ld, NumArgs=%ld\n",
  96.                       LONG (amsg.amType), amsg.id, amsg.numArgs );
  97.                   FOR i := 0 TO amsg.numArgs - 1 DO
  98.                     IO.WriteF3
  99.                       ( "  arg(%ld): Name='%s', Lock=%lx\n",
  100.                         LONG (i), amsg.argList[i].name, amsg.argList[i].lock )
  101.                   END;
  102.                   e.base.ReplyMsg (amsg)
  103.                 END;
  104.               END;
  105.             END; (* WHILE *)
  106.             IF wb.base.RemoveAppWindow (appwin) THEN END
  107.           END; (* IF *)
  108.           I.base.CloseWindow (win)
  109.         END; (* IF *)
  110.         (* Make sure there are no more outstanding messages *)
  111.         LOOP
  112.           amsg := SYS.VAL (wb.AppMessagePtr,
  113.             e.base.GetMsg (awport));
  114.           IF imsg = NIL THEN EXIT END;
  115.           e.base.ReplyMsg (amsg)
  116.         END;
  117.         e.base.DeleteMsgPort (awport)
  118.       END; (* IF *)
  119.     END; (* IF *)
  120.   END; (* IF *)
  121. END AppWindow.
  122.  
  123. (*************************************************************************
  124.  
  125.   $Log: AppWindow.mod $
  126.   Revision 1.2  1994/08/08  16:59:51  fjc
  127.   Release 1.4
  128.  
  129.   Revision 1.1  1994/07/03  15:17:26  fjc
  130.   - Incorporated changes in 3.1 Interfaces
  131.  
  132. *************************************************************************)
  133.  
  134.