(*-------------------------------------------------------------------------
:Program.       KeyDemo.mod
:Contents.      Demonstriert das Modul KeyConversion
:Author.        Christian Stiens
:Address.       Heustiege 2, D-4710 Lüdinghausen
:Phone.         02591/6299
:Copyright.     PD
:Language.      Modula-2
:Translator.    M2Amiga V3.3d, © AMSoft
:Imports.       IntuiSupport
:History.       V1.0, 24-Jul-90
-------------------------------------------------------------------------*)

MODULE KeyDemo;

  FROM InOut         IMPORT WriteString,Write,WriteLn;
  FROM KeyConversion IMPORT DeadKeyConvert;
  FROM IntuiSupport  IMPORT CreateWindow,stdWin;
  FROM SYSTEM        IMPORT ADR;
  FROM Exec          IMPORT GetMsg,ReplyMsg,WaitPort;
  FROM Intuition     IMPORT IDCMPFlags,IDCMPFlagSet,CloseWindow,WindowFlags,
                            WindowFlagSet,WindowPtr,IntuiMessagePtr;

  VAR string: ARRAY [0..15] OF CHAR;
      class: IDCMPFlagSet;
      num: LONGINT;
      win: WindowPtr;
      msg: IntuiMessagePtr;

  PROCEDURE Print(s:ARRAY OF CHAR);
    VAR i:INTEGER;
        c:CHAR;
  BEGIN
    FOR i := 0 TO HIGH(s) DO
      c := s[i];
      IF c=0C THEN RETURN END;
      IF c=CHR(27)     THEN WriteString("<ESC>")
      ELSIF c=CHR(155) THEN WriteString("<CSI>")
      ELSIF c >= " "   THEN Write(c)
      ELSE Write("^"); Write(CHR(ORD(c)+ORD("A")-1));
      END
    END;
  END Print;

BEGIN
  win := CreateWindow(ADR("Hit some keys"),200,20,300,150,NIL,stdWin,
                      IDCMPFlagSet{closeWindow,rawKey});
  IF win # NIL THEN
    LOOP
      WaitPort(win^.userPort);
      msg := GetMsg(win^.userPort);
      IF msg # NIL THEN
        class := msg^.class;
        IF closeWindow IN class THEN ReplyMsg(msg); EXIT END;
        IF rawKey IN class THEN
          num := DeadKeyConvert(msg,string,NIL);
          IF num>0 THEN
            Print(string); WriteLn;
          END
        END;
        ReplyMsg(msg)
      END
    END;
    CloseWindow(win);
  ELSE
    WriteString("Can't open window"); WriteLn
  END
END KeyDemo.
