(*---------------------------------------------------------------------------
    :Program.     IntuiPointer.mod
    :Contents.    Prozeduren zum Setzen des Mauszeigers auf 'Busy' (ZZ)
    :Author.      Bernd Preusing
    :Address.     Gerhardstr. 16  D-2200 Elmshorn
    :Phone.       04121/22486
    :Copyright.   Public Domain
    :Language.    Modula-2
    :Translator.  M2Amiga V3.2e
    :History.     V1.0 08-Oct-89 Bernd Preusing
    :History.     V1.1 10-Jan-90 [bne] (original (ZZ).-Image)
    :Bugs.        none
    :Remark.      Please, create beautiful pointers for me!
---------------------------------------------------------------------------*)
IMPLEMENTATION MODULE IntuiPointer;

FROM SYSTEM IMPORT ADDRESS, ADR, INLINE;
IMPORT Arts, Intuition, Exec;

CONST
  POINTERSIZE = (22+2)*2*2; (* Never change this! [bep] Why? [bne] *)

VAR
  ZZ: ADDRESS;
  StartLevel: INTEGER;

(* $E- *)
PROCEDURE ZZData(); (* I'm busy or tired! *)
BEGIN
INLINE(
        00000H,00000H,
        00600H,00600H,
        00F40H,00F40H,
        03FE0H,03FE0H,
        07FE0H,07FE0H,
        07FF0H,061F0H,
        07FF8H,07BF8H,
        0FFF8H,0F7F8H,
        07FFCH,061FCH,
        07FFCH,07F0CH,
        03FFEH,03FDEH,
        07FFCH,07FBCH,
        03FFCH,03F0CH,
        01FF8H,01FF8H,
        007F0H,007F0H,
        001C0H,001C0H,
        00700H,00700H,
        00FC0H,00FC0H,
        00680H,00680H,
        00000H,00000H,
        000C0H,000C0H,
        000E0H,000E0H,
        00040H,00040H,
        00000H,00000H
)
END ZZData;

PROCEDURE Normal(Win:Intuition.WindowPtr);
BEGIN
  Intuition.ClearPointer(Win);
END Normal;

PROCEDURE Busy(Win:Intuition.WindowPtr);
BEGIN
  Intuition.SetPointer(Win,ZZ,22,16,-7,-7);
END Busy;

PROCEDURE Exit;
BEGIN
  IF Arts.CurrentLevel()<=StartLevel THEN
    IF ZZ#NIL THEN
      Exec.FreeMem(ZZ,POINTERSIZE);
      ZZ:=NIL;
    END;
  END
END Exit;

BEGIN
  StartLevel:=Arts.CurrentLevel();
  ZZ:=NIL;
  Arts.TermProcedure(Exit);
  ZZ:=Exec.AllocMem(POINTERSIZE,Exec.MemReqSet{Exec.chip,Exec.public});
  Arts.Assert(ZZ#NIL,ADR('no chipmem for Busy Pointer'));
  Exec.CopyMem(ADR(ZZData),ZZ,POINTERSIZE);
END IntuiPointer.mod
