MODULE WinCmc ["MAPI32"];
(**

   project   = "BlackBox"
   organization   = "www.oberon.ch"
   contributors   = "Oberon microsystems"
   version   = "System/Rsrc/About"
   copyright   = "System/Rsrc/About"
   license   = "Docu/BB-License"
   changes   = ""
   issues   = ""

**)

   CONST

      NO_TIMEZONE* = MIN(SHORTINT);
      
      EXT_REQUIRED* = {16};
      EXT_OUTPUT* ={17};
      EXT_LAST_ELEMENT* = {31};
      EXT_RSV_FLAG_MASK* = {16..31};
      EXT_ITEM_FLAG_MASK* = {0..15};
      
      ATT_APP_OWNS_FILE* = {0};
      ATT_LAST_ELEMENT* = {31};
      ATT_OID_BINARY* = "? ? ? ? ? ?";

      ATT_OID_TEXT* = "? ? ? ? ? ?";
      
      TYPE_UNKNOWN* = 0;
      TYPE_INDIVIDUAL* = 1;
      TYPE_GROUP* = 2;
      ROLE_TO* = 0;

      ROLE_CC* = 1;
      ROLE_BCC* = 2;
      ROLE_ORIGINATOR* = 3;
      ROLE_AUTHORIZING_USER* = 4;
      RECIP_IGNORE* = {0};

      RECIP_LIST_TRUNCATED* = {1};
      RECIP_LAST_ELEMENT* = {31};
      MSG_READ* = {0};

      MSG_TEXT_NOTE_AS_FILE* = {1};
      MSG_UNSENT* = {2};
      MSG_LAST_ELEMENT* = {31};
      SUM_READ* = {0};

      SUM_UNSENT* = {1};
      SUM_LAST_ELEMENT* = {31};
      ERROR_UI_ALLOWED* = {24};

      LOGON_UI_ALLOWED* = {25};
      COUNTED_STRING_TYPE* = {26};
      SEND_UI_REQUESTED* = {0};

      FIRST_ATTACH_AS_TEXT_NOTE* = {1};
      ACT_ON_EXTENDED* = 0;

      ACT_ON_DELETE* = 1;
      LIST_UNREAD_ONLY* = {0};

      LIST_MSG_REFS_ONLY* = {1};
      LIST_COUNT_ONLY* = {2};
      LENGTH_UNKNOWN* = 0FFFFFFFFH;

      DO_NOT_MARK_AS_READ* = {0};

      MSG_AND_ATT_HDRS_ONLY* = {1};
      READ_FIRST_UNREAD_MESSAGE* = {2};
      LOOKUP_RESOLVE_PREFIX_SEARCH* = {0};

      LOOKUP_RESOLVE_IDENTITY* = {1};
      LOOKUP_RESOLVE_UI* = {2};
      LOOKUP_DETAILS_UI* = {3};
      LOOKUP_ADDRESSING_UI* = {4};
      LOGOFF_UI_ALLOWED* = {0};

      VERSION* = 100;

      CONFIG_CHARACTER_SET* = 1;

      CONFIG_LINE_TERM* = 2;
      CONFIG_DEFAULT_SERVICE* = 3;
      CONFIG_DEFAULT_USER* = 4;
      CONFIG_REQ_PASSWORD* = 5;
      CONFIG_REQ_SERVICE* = 6;
      CONFIG_REQ_USER* = 7;
      CONFIG_UI_AVAIL* = 8;
      CONFIG_SUP_NOMKMSGREAD* = 9;
      CONFIG_SUP_COUNTED_STR* = 10;
      CONFIG_VER_IMPLEM* = 11;
      CONFIG_VER_SPEC* = 12;
      LINE_TERM_CRLF* = 0;

      LINE_TERM_CR* = 1;
      LINE_TERM_LF* = 2;
      REQUIRED_NO* = 0;

      REQUIRED_YES* = 1;
      REQUIRED_OPT* = 2;
      CHAR_CP437* = "1 2 840 113556 3 2 437";

      CHAR_CP850* = "1 2 840 113556 3 2 850";
      CHAR_CP1252* = "1 2 840 113556 3 2 1252";
      CHAR_ISTRING* = "1 2 840 113556 3 2 0";
      CHAR_UNICODE* = "1 2 840 113556 3 2 1";
      ERROR_DISPLAYED* = 00008000H;

      ERROR_RSV_MASK* = 0000FFFFH;
      ERROR_IMPL_MASK* = 0FFFF0000H;
      SUCCESS* = 0;

      E_AMBIGUOUS_RECIPIENT* = 1;

      E_ATTACHMENT_NOT_FOUND* = 2;
      E_ATTACHMENT_OPEN_FAILURE* = 3;
      E_ATTACHMENT_READ_FAILURE* = 4;
      E_ATTACHMENT_WRITE_FAILURE* = 5;
      E_COUNTED_STRING_UNSUPPORTED* = 6;
      E_DISK_FULL* = 7;
      E_FAILURE* = 8;
      E_INSUFFICIENT_MEMORY* = 9;
      E_INVALID_CONFIGURATION* = 10;
      E_INVALID_ENUM* = 11;
      E_INVALID_FLAG* = 12;
      E_INVALID_MEMORY* = 13;
      E_INVALID_MESSAGE_PARAMETER* = 14;
      E_INVALID_MESSAGE_REFERENCE* = 15;
      E_INVALID_PARAMETER* = 16;
      E_INVALID_SESSION_ID* = 17;
      E_INVALID_UI_ID* = 18;
      E_LOGON_FAILURE* = 19;
      E_MESSAGE_IN_USE* = 20;
      E_NOT_SUPPORTED* = 21;
      E_PASSWORD_REQUIRED* = 22;
      E_RECIPIENT_NOT_FOUND* = 23;
      E_SERVICE_UNAVAILABLE* = 24;
      E_TEXT_TOO_LARGE* = 25;
      E_TOO_MANY_FILES* = 26;
      E_TOO_MANY_RECIPIENTS* = 27;
      E_UNABLE_TO_NOT_MARK_AS_READ* = 28;
      E_UNRECOGNIZED_MESSAGE_TYPE* = 29;
      E_UNSUPPORTED_ACTION* = 30;
      E_UNSUPPORTED_CHARACTER_SET* = 31;
      E_UNSUPPORTED_DATA_EXT* = 32;
      E_UNSUPPORTED_FLAG* = 33;
      E_UNSUPPORTED_FUNCTION_EXT* = 34;
      E_UNSUPPORTED_VERSION* = 35;
      E_USER_CANCEL* = 36;
      E_USER_NOT_LOGGED_ON* = 37;
   
   TYPE
      sint8* = BYTE;
      sint16* = SHORTINT;
      sint32* = INTEGER;
      uint16* = SHORTINT;
      uint32* = INTEGER;
      buffer* = INTEGER;   (* POINTER TO RECORD [untagged] END *)
      string* = POINTER TO ARRAY [untagged] OF SHORTCHAR;
      boolean* = uint16;
      enum* = sint32;
      return_code* = uint32;
      flags* = SET;
      object_identifier* = string;
      session_id* = uint32;
      ui_id* = uint32;
      
      counted_string* = RECORD [untagged]
         length*: uint32;
         string*: ARRAY 32000 OF SHORTCHAR;
      END;
      
      message_reference* = counted_string;
      
      time* = RECORD [untagged]
         second*, minute*, hour*: sint8;
         day*, month*, year*: sint8;
         isdst*: sint8;
         tmzone*: sint16
      END;
      
      extension* = RECORD [untagged]
         item_code*: uint32;
         item_data*: uint32;
         item_reference*: buffer;
         extension_flags*: flags
      END;
      
      attachment* = RECORD [untagged]
         attach_title*: string;
         attach_type*: object_identifier;
         attach_filename*: string;
         attach_flags*: flags;
         attach_extensions*: POINTER TO extension
      END;
      
      recipient* = RECORD [untagged]
         name*: string;
         name_type*: enum;
         address*: string;
         role*: enum;
         recip_flags*: flags;
         recip_extensions*: POINTER TO extension
      END;
   
      message* = RECORD [untagged]
         message_ref*: POINTER TO message_reference;
         message_type*: string;
         subject*: string;
         time_sent*: time;
         text_note*: string;
         recipients*: POINTER TO recipient;
         attachments*: POINTER TO attachment;
         message_flags*: flags;
         message_extensions*: POINTER TO extension
      END;
      
      message_summary* = RECORD [untagged]
         message_ref*: POINTER TO message_reference;
         message_type*: string;
         subject*: string;
         time_sent*: time;
         byte_length*: uint32;
         originator*: POINTER TO recipient;
         summary_flags*: flags;
         message_summary_extensions*: POINTER TO extension
      END;
   

   PROCEDURE send* ["cmc_send"] (session: session_id; VAR msg: message; flgs: flags; id: ui_id; VAR [nil] ext: ARRAY [untagged] OF extension): return_code;
   (*END send;*)
   
   PROCEDURE send_documents* ["cmc_send_documents"] (adr, subject, note: string; flgs: flags; paths, names, delimiter: string; id: ui_id): return_code;
   (*END send_documents;*)
   PROCEDURE act_on* ["cmc_act_on"] (session: session_id; VAR ref: message_reference; operation: enum; flgs: flags; id: ui_id; VAR [nil] ext: ARRAY [untagged] OF extension): return_code;

   (*END act_on;*)
   
   PROCEDURE list* ["cmc_list"] (session: session_id; type: string; flgs: flags; VAR [nil] seed: message_reference; VAR count: uint32; id: ui_id; VAR result: POINTER TO ARRAY [untagged] OF message_summary; VAR [nil] ext: ARRAY [untagged] OF extension): return_code;
   (*END list;*)
   PROCEDURE read* ["cmc_read"] (session: session_id; VAR ref: message_reference; flgs: flags; VAR msg: POINTER TO message; id: ui_id; VAR [nil] ext: ARRAY [untagged] OF extension): return_code;

   (*END read;*)
   PROCEDURE look_up* ["cmc_look_up"] (session: session_id; VAR rin: ARRAY [untagged] OF recipient; flgs: flags; id: ui_id; VAR count: uint32; VAR rout: POINTER TO ARRAY [untagged] OF recipient; VAR [nil] ext: ARRAY [untagged] OF extension): return_code;

   (*END look_up;*)
   PROCEDURE logoff* ["cmc_logoff"] (session: session_id; id: ui_id; flgs: flags; VAR [nil] ext: ARRAY [untagged] OF extension): return_code;

   (*END logoff;*)
   PROCEDURE logon* ["cmc_logon"] (service, user, password: string; chset: object_identifier; id: ui_id; version: uint16; flgs: flags; VAR session: session_id; VAR [nil] ext: ARRAY [untagged] OF extension): return_code;

   (*END logon;*)
   PROCEDURE query_configuration* ["cmc_query_configuration"] (session: session_id; item: enum; ref: buffer; VAR [nil] ext: ARRAY [untagged] OF extension): return_code;

   (*END query_configuration;*)
   
   PROCEDURE free* ["cmc_free"] (mem: buffer): return_code;
   (*END free;*)
END WinCmc.