home *** CD-ROM | disk | FTP | other *** search
- (*************************************************************************
-
- $RCSfile: AppWindow.mod $
- Description:
-
- Created by: fjc (Frank Copeland)
- $Revision: 1.5 $
- $Author: fjc $
- $Date: 1995/07/02 17:01:00 $
-
- Copyright © 1994-1995, Frank Copeland.
- This example program is part of Oberon-A.
- See Oberon-A.doc for conditions of use and distribution.
-
- *************************************************************************)
-
- <* STANDARD- *>
-
- MODULE AppWindow;
-
- IMPORT
- SYS := SYSTEM,
- e := Exec,
- u := Utility,
- I := Intuition,
- wb := Workbench,
- IO := StdIO;
-
- CONST VersionTag = "$VER: AppWindow 1.3 (25.1.95)\r\n";
-
- VAR
-
- awport : e.MsgPortPtr;
- win : I.WindowPtr;
- appwin : wb.AppWindowPtr;
- imsg : I.IntuiMessagePtr;
- amsg : wb.AppMessagePtr;
-
- winsig, appwinsig : SHORTINT;
- id, userdata : LONGINT;
- signals : SET;
- done : BOOLEAN;
- i : INTEGER;
-
- BEGIN (* AppWindow *)
- IF I.base.libNode.version >= 37 THEN
- IF (wb.base # NIL) & (wb.base.version >= 37) THEN
- awport := e.CreateMsgPort ();
- IF awport # NIL THEN
- win := I.OpenWindowTagsA
- ( NIL,
- I.waWidth, 200,
- I.waHeight, 50,
- I.waIDCMP, {I.closeWindow},
- I.waFlags, {I.windowClose, I.windowDrag},
- I.waTitle, SYS.ADR ("AppWindow"),
- u.done );
- IF win # NIL THEN
- id := 1; userdata := 0;
- appwin := wb.AddAppWindow ( id, userdata, win, awport, NIL );
- IF appwin # NIL THEN
- IO.WriteStr ("AppWindow added... Drag files into AppWindow\n");
- winsig := win.userPort.sigBit;
- appwinsig := awport.sigBit;
- done := FALSE;
- WHILE ~done DO
- (* Wait for IDCMP messages and AppMessages *)
- signals := e.Wait ({winsig, appwinsig});
- IF winsig IN signals THEN (* Got an IDCMP message *)
- LOOP
- imsg := SYS.VAL (I.IntuiMessagePtr,
- e.GetMsg (win.userPort));
- IF imsg = NIL THEN EXIT END;
- IF imsg.class = {I.closeWindow} THEN
- done := TRUE
- END;
- e.ReplyMsg (imsg)
- END;
- END;
- IF appwinsig IN signals THEN (* Got an AppMessage *)
- LOOP
- amsg := SYS.VAL (wb.AppMessagePtr,
- e.GetMsg (awport));
- IF amsg = NIL THEN EXIT END;
- IO.WriteF3
- ( "AppMsg: Type=%ld, ID=%ld, NumArgs=%ld\n",
- amsg.type, amsg.id, amsg.numArgs );
- FOR i := 0 TO amsg.numArgs - 1 DO
- IO.WriteF3
- ( " arg(%ld): Name='%s', Lock=%lx\n",
- i, amsg.argList[i].name, amsg.argList[i].lock )
- END;
- e.ReplyMsg (amsg)
- END;
- END;
- END; (* WHILE *)
- IF wb.RemoveAppWindow (appwin) THEN END
- END; (* IF *)
- I.CloseWindow (win)
- END; (* IF *)
- (* Make sure there are no more outstanding messages *)
- LOOP
- amsg := SYS.VAL (wb.AppMessagePtr,
- e.GetMsg (awport));
- IF imsg = NIL THEN EXIT END;
- e.ReplyMsg (amsg)
- END;
- e.DeleteMsgPort (awport)
- END; (* IF *)
- END; (* IF *)
- END; (* IF *)
- END AppWindow.
-