home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 1 / Meeting Pearls Vol 1 (1994).iso / installed_progs / comm / ums / developer.lha / Developer / demo / ReadMessage.mod < prev    next >
Encoding:
Text File  |  1993-09-23  |  5.2 KB  |  128 lines

  1. (* ------------------------------------------------------------------------
  2.   :Program.       ReadMessage
  3.   :Contents.      reads a message from UMS' messagebase
  4.   :Author.        Kai Bolay [kai]
  5.   :Address.       Snail Mail:              EMail:
  6.   :Address.       Hoffmannstraße 168       UUCP: kai@amokle.stgt.sub.org
  7.   :Address.       D-71229 Leonberg         FIDO: 2:2407/106.3
  8.   :History.       v1.0 [kai] 25-Mar-93 (added Martin's suggestion)
  9.   :History.       v1.1 [kai] 31-Mar-93 (new tags)
  10.   :History.       v1.2 [kai] 15-Apr-93 (added SERVER keyword, better Login() failure)
  11.   :History.       v1.3 [kai] 22-Sep-93 (updated for V40 Intefaces)
  12.   :Copyright.     Public Domain
  13.   :Language.      Oberon
  14.   :Translator.    AMIGA OBERON v3.01d
  15.   :Imports.       ums
  16.   :Bugs.          Does not display links (crosspostings, carbon copies)
  17. ------------------------------------------------------------------------ *)
  18. MODULE ReadMessage;
  19.  
  20. IMPORT
  21.   ums,
  22.   I: Intuition, d: Dos, e: Exec, u: Utility,
  23.   NoGuru, Break,
  24.   y: SYSTEM;
  25. CONST
  26.   Template = "USER/A,PASSWORD/A,SERVER/K,NUM/A/N\o$VER: ReadMessage 1.3 (22.9.93)\n\r";
  27. VAR
  28.   RD: d.RDArgsPtr;
  29.   Args: STRUCT (dummy: d.ArgsStruct)
  30.     name: e.STRPTR;
  31.     password: e.STRPTR;
  32.     server: e.STRPTR;
  33.     num: UNTRACED POINTER TO LONGINT;
  34.   END;
  35.   acc: LONGINT;
  36.   Fields: ums.MsgTextFields;
  37.   Chain: ARRAY 4 OF LONGINT;
  38.  
  39. (* $Debug- *)
  40. PROCEDURE CheckErr;
  41. VAR
  42.   err: INTEGER;
  43.   txt: ums.STRPTR;
  44. BEGIN
  45.   err := ums.ErrNum (acc);
  46.   IF err # ums.ok THEN
  47.     txt := ums.ErrTxt (acc);
  48.     d.PrintF ("UMS-error: %ld, \"%s\"\n", err, txt);
  49.     HALT (20);
  50.   END;
  51. END CheckErr;
  52. (* $Debug= *)
  53.  
  54. BEGIN
  55.   RD := d.ReadArgs (Template, Args, NIL);
  56.   IF RD = NIL THEN
  57.     d.PrintF ("Usage: %s\n", y.ADR (Template));
  58.     HALT (20);
  59.   END;
  60.   (* $OddChk- $NilChk- *)
  61.   acc := ums.UMSRLogin (Args.server^, Args.name^, Args.password^);
  62.   (* $OddChk= $NilChk= *)
  63.   IF acc <= 0 THEN
  64.     d.PrintF ("Unable to login\n");
  65.     HALT (20);
  66.   END;
  67.  
  68.   (* read the message *)
  69.   IF ums.ReadUMSMsgTags (acc, ums.tagMsgNum,     Args.num^,
  70.                               ums.tagTextFields, y.ADR (Fields),
  71.                               ums.tagRReadAll,   I.LTRUE,
  72.                               ums.tagRChainUp,   y.ADR (Chain[0]),
  73.                               ums.tagRChainDn,   y.ADR (Chain[1]),
  74.                               ums.tagRChainLt,   y.ADR (Chain[2]),
  75.                               ums.tagRChainRt,   y.ADR (Chain[3]),
  76.                               u.done) THEN END;
  77.   CheckErr;
  78.  
  79.   IF Fields[ums.fromName] # NIL THEN
  80.     IF Fields[ums.fromAddr] = NIL THEN Fields[ums.fromAddr] := y.VAL (ums.STRPTR, y.ADR ("")) END;
  81.     d.PrintF ("From: %s <%s>\n", Fields[ums.fromName], Fields[ums.fromAddr]);
  82.   END;
  83.  
  84.   IF Fields[ums.replyName] # NIL THEN
  85.     IF Fields[ums.replyAddr] = NIL THEN Fields[ums.replyAddr] := y.VAL (ums.STRPTR, y.ADR ("")) END;
  86.     d.PrintF ("Reply To: %s <%s>\n", Fields[ums.replyName], Fields[ums.replyAddr]);
  87.   END;
  88.  
  89.   IF Fields[ums.toName] # NIL THEN
  90.     IF Fields[ums.toAddr] = NIL THEN Fields[ums.toAddr] :=  y.VAL (ums.STRPTR, y.ADR ("")) END;
  91.     d.PrintF ("To: %s <%s>\n", Fields[ums.toName], Fields[ums.toAddr]);
  92.   END;
  93.  
  94.   IF Fields[ums.group]        # NIL THEN d.PrintF ("Group: %s\n",        Fields[ums.group])        END;
  95.   IF Fields[ums.replyGroup]   # NIL THEN d.PrintF ("Reply Group: %s\n",  Fields[ums.replyGroup])   END;
  96.   IF Fields[ums.subject]      # NIL THEN d.PrintF ("Subject: %s\n",      Fields[ums.subject])      END;
  97.   IF Fields[ums.msgID]        # NIL THEN d.PrintF ("Message ID: %s\n",   Fields[ums.msgID])        END;
  98.   IF Fields[ums.refID]        # NIL THEN d.PrintF ("Refer ID: %s\n",     Fields[ums.refID])        END;
  99.   IF Fields[ums.creationDate] # NIL THEN d.PrintF ("Creation Date: %s\n",Fields[ums.creationDate]) END;
  100.   IF Fields[ums.receiveDate]  # NIL THEN d.PrintF ("Receive Date: %s\n", Fields[ums.receiveDate])  END;
  101.   IF Fields[ums.attributes]   # NIL THEN d.PrintF ("Attributes: %s\n",   Fields[ums.attributes])   END;
  102.   IF Fields[ums.organization] # NIL THEN d.PrintF ("Organization: %s\n", Fields[ums.organization]) END;
  103.   IF Fields[ums.distribution] # NIL THEN d.PrintF ("Distribution: %s\n", Fields[ums.distribution]) END;
  104.   IF Fields[ums.newsreader]   # NIL THEN d.PrintF ("Newsreader: %s\n",   Fields[ums.newsreader])   END;
  105.  
  106.   (*    Message-Tree   This is a tree of messages build by UMS regarding     *)
  107.   (*          a        the reference IDs of messages. (a) and (c) both       *)
  108.   (*         / \       refer to (a). (d), (e) and (f) refer to (b) and       *)
  109.   (*        b   c      (g) refers to (e). If you read message (e) you'll     *)
  110.   (*       /|\         get (b) for chain up ("-"), (g) for chain down ("+")  *)
  111.   (*      d e f        and (d) and (f) as chain left ("<") and right (">").  *)
  112.   (*        |          Please support this in a newsreader and don't forget  *)
  113.   (*        g          to create reference IDs in replies and follow-up      *)
  114.  
  115.   d.PrintF ("Chain: -%-5ld +%-5ld <%-5ld >%-5ld\n", Chain[0], Chain[1], Chain[2], Chain[3]);
  116.  
  117.   d.PrintF ("\n%s\n%s\n", Fields[ums.msgText], Fields[ums.comments]);
  118.  
  119.   ums.FreeUMSMsg (acc, Args.num^);
  120. CLOSE
  121.   IF acc # NIL THEN
  122.     ums.Logout (acc); acc := 0;
  123.   END;
  124.   IF RD # NIL THEN
  125.     d.FreeArgs (RD); RD := NIL;
  126.   END;
  127. END ReadMessage.
  128.