home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / oberon / system / xeinstaller.mod (.txt) < prev    next >
Oberon Text  |  1977-12-31  |  3KB  |  62 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10i.Scn.Fnt
  3. StampElems
  4. Alloc
  5. 15 Mar 96
  6. Syntax10b.Scn.Fnt
  7. FoldElems
  8. Syntax10.Scn.Fnt
  9. Oberon.CurTask.time := Oberon.Time()+75
  10. MODULE XEInstaller;    (** SHML 5 Dec 91/
  11.     (** Exchange TextFrames.Handler in visible viewers with XE.Handler **)
  12.     (* !!! IMPORTANT !!!!
  13.         Before compiling, delete one of the two folds in procedure Exchange to adjust the delay.
  14.         You can simply search for the following: CHANGE
  15.     IMPORT Input, Display, Viewers, TF := TextFrames, MV := MenuViewers, Oberon;
  16.         exchanger: Oberon.Task;
  17.         tfHandle, xeHandle: Display.Handler;
  18.     PROCEDURE GetXEHandler;
  19.         VAR save, par: Oberon.ParList; res: INTEGER;
  20.     BEGIN
  21.         save := Oberon.Par;
  22.         NEW(par); NEW(par.frame); par.frame.X := 0; par.frame.Y := 0; par.pos := -210566;    (* magic *)
  23.         Oberon.Call("XE.GetHandler", par, FALSE, res);
  24.         IF res = 0 THEN xeHandle := Oberon.Par.frame.handle
  25.         ELSE xeHandle := NIL
  26.         END;
  27.         Oberon.Par := save
  28.     END GetXEHandler;
  29.     PROCEDURE Change(x, y: INTEGER);    (* change handler for textframes in viewer x, y *)
  30.         VAR v: Viewers.Viewer;
  31.     BEGIN
  32.         v := Viewers.This(x, y);
  33.         IF (v # NIL) & (v IS MV.Viewer) THEN    (* v # NIL necessary for startup *)
  34.             IF (v.dsc IS TF.Frame) & (v.dsc.handle = tfHandle) THEN v.dsc.handle := xeHandle END;
  35.             IF (v.dsc.next IS TF.Frame) & (v.dsc.next.handle = tfHandle) THEN v.dsc.next.handle := xeHandle END
  36.         END
  37.     END Change;
  38.     PROCEDURE Exchange;
  39.         (* Inspect viewer at mouse and caret position and exchange TextFrames with XE handler *)
  40.     BEGIN
  41.         Change(Oberon.Mouse.X, Oberon.Mouse.Y);
  42.         IF Oberon.FocusViewer # NIL THEN Change(Oberon.FocusViewer.X, Oberon.FocusViewer.Y) END;
  43.         (* CHANGE *)
  44.     (* delay for 250 ms: Ceres, MacOberon *)
  45. Oberon.CurTask.time := Oberon.Time()+Input.TimeUnit DIV 4
  46.     (* delay for 250 ms: other Oberons *)
  47.     END Exchange;
  48.     PROCEDURE Start*;
  49.     BEGIN
  50.         Oberon.Remove(exchanger); GetXEHandler;
  51.         IF xeHandle # NIL THEN Oberon.Install(exchanger) END
  52.     END Start;
  53.     PROCEDURE Stop*;
  54.     BEGIN Oberon.Remove(exchanger)
  55.     END Stop;
  56. BEGIN
  57.     NEW(exchanger); exchanger.safe := FALSE; exchanger.handle := Exchange;
  58.     tfHandle := TF.Handle
  59. END XEInstaller.
  60. XEInstaller.Start
  61. XEInstaller.Stop
  62.