home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------------------------
- :Program. ReadMessage
- :Contents. reads a message from UMS' messagebase
- :Author. Kai Bolay [kai]
- :Address. Snail Mail: EMail:
- :Address. Hoffmannstraße 168 UUCP: kai@amokle.stgt.sub.org
- :Address. D-71229 Leonberg FIDO: 2:2407/106.3
- :History. v1.0 [kai] 25-Mar-93 (added Martin's suggestion)
- :History. v1.1 [kai] 31-Mar-93 (new tags)
- :History. v1.2 [kai] 15-Apr-93 (added SERVER keyword, better Login() failure)
- :History. v1.3 [kai] 22-Sep-93 (updated for V40 Intefaces)
- :Copyright. Public Domain
- :Language. Oberon
- :Translator. AMIGA OBERON v3.01d
- :Imports. ums
- :Bugs. Does not display links (crosspostings, carbon copies)
- ------------------------------------------------------------------------ *)
- MODULE ReadMessage;
-
- IMPORT
- ums,
- I: Intuition, d: Dos, e: Exec, u: Utility,
- NoGuru, Break,
- y: SYSTEM;
- CONST
- Template = "USER/A,PASSWORD/A,SERVER/K,NUM/A/N\o$VER: ReadMessage 1.3 (22.9.93)\n\r";
- VAR
- RD: d.RDArgsPtr;
- Args: STRUCT (dummy: d.ArgsStruct)
- name: e.STRPTR;
- password: e.STRPTR;
- server: e.STRPTR;
- num: UNTRACED POINTER TO LONGINT;
- END;
- acc: LONGINT;
- Fields: ums.MsgTextFields;
- Chain: ARRAY 4 OF LONGINT;
-
- (* $Debug- *)
- PROCEDURE CheckErr;
- VAR
- err: INTEGER;
- txt: ums.STRPTR;
- BEGIN
- err := ums.ErrNum (acc);
- IF err # ums.ok THEN
- txt := ums.ErrTxt (acc);
- d.PrintF ("UMS-error: %ld, \"%s\"\n", err, txt);
- HALT (20);
- END;
- END CheckErr;
- (* $Debug= *)
-
- BEGIN
- RD := d.ReadArgs (Template, Args, NIL);
- IF RD = NIL THEN
- d.PrintF ("Usage: %s\n", y.ADR (Template));
- HALT (20);
- END;
- (* $OddChk- $NilChk- *)
- acc := ums.UMSRLogin (Args.server^, Args.name^, Args.password^);
- (* $OddChk= $NilChk= *)
- IF acc <= 0 THEN
- d.PrintF ("Unable to login\n");
- HALT (20);
- END;
-
- (* read the message *)
- IF ums.ReadUMSMsgTags (acc, ums.tagMsgNum, Args.num^,
- ums.tagTextFields, y.ADR (Fields),
- ums.tagRReadAll, I.LTRUE,
- ums.tagRChainUp, y.ADR (Chain[0]),
- ums.tagRChainDn, y.ADR (Chain[1]),
- ums.tagRChainLt, y.ADR (Chain[2]),
- ums.tagRChainRt, y.ADR (Chain[3]),
- u.done) THEN END;
- CheckErr;
-
- IF Fields[ums.fromName] # NIL THEN
- IF Fields[ums.fromAddr] = NIL THEN Fields[ums.fromAddr] := y.VAL (ums.STRPTR, y.ADR ("")) END;
- d.PrintF ("From: %s <%s>\n", Fields[ums.fromName], Fields[ums.fromAddr]);
- END;
-
- IF Fields[ums.replyName] # NIL THEN
- IF Fields[ums.replyAddr] = NIL THEN Fields[ums.replyAddr] := y.VAL (ums.STRPTR, y.ADR ("")) END;
- d.PrintF ("Reply To: %s <%s>\n", Fields[ums.replyName], Fields[ums.replyAddr]);
- END;
-
- IF Fields[ums.toName] # NIL THEN
- IF Fields[ums.toAddr] = NIL THEN Fields[ums.toAddr] := y.VAL (ums.STRPTR, y.ADR ("")) END;
- d.PrintF ("To: %s <%s>\n", Fields[ums.toName], Fields[ums.toAddr]);
- END;
-
- IF Fields[ums.group] # NIL THEN d.PrintF ("Group: %s\n", Fields[ums.group]) END;
- IF Fields[ums.replyGroup] # NIL THEN d.PrintF ("Reply Group: %s\n", Fields[ums.replyGroup]) END;
- IF Fields[ums.subject] # NIL THEN d.PrintF ("Subject: %s\n", Fields[ums.subject]) END;
- IF Fields[ums.msgID] # NIL THEN d.PrintF ("Message ID: %s\n", Fields[ums.msgID]) END;
- IF Fields[ums.refID] # NIL THEN d.PrintF ("Refer ID: %s\n", Fields[ums.refID]) END;
- IF Fields[ums.creationDate] # NIL THEN d.PrintF ("Creation Date: %s\n",Fields[ums.creationDate]) END;
- IF Fields[ums.receiveDate] # NIL THEN d.PrintF ("Receive Date: %s\n", Fields[ums.receiveDate]) END;
- IF Fields[ums.attributes] # NIL THEN d.PrintF ("Attributes: %s\n", Fields[ums.attributes]) END;
- IF Fields[ums.organization] # NIL THEN d.PrintF ("Organization: %s\n", Fields[ums.organization]) END;
- IF Fields[ums.distribution] # NIL THEN d.PrintF ("Distribution: %s\n", Fields[ums.distribution]) END;
- IF Fields[ums.newsreader] # NIL THEN d.PrintF ("Newsreader: %s\n", Fields[ums.newsreader]) END;
-
- (* Message-Tree This is a tree of messages build by UMS regarding *)
- (* a the reference IDs of messages. (a) and (c) both *)
- (* / \ refer to (a). (d), (e) and (f) refer to (b) and *)
- (* b c (g) refers to (e). If you read message (e) you'll *)
- (* /|\ get (b) for chain up ("-"), (g) for chain down ("+") *)
- (* d e f and (d) and (f) as chain left ("<") and right (">"). *)
- (* | Please support this in a newsreader and don't forget *)
- (* g to create reference IDs in replies and follow-up *)
-
- d.PrintF ("Chain: -%-5ld +%-5ld <%-5ld >%-5ld\n", Chain[0], Chain[1], Chain[2], Chain[3]);
-
- d.PrintF ("\n%s\n%s\n", Fields[ums.msgText], Fields[ums.comments]);
-
- ums.FreeUMSMsg (acc, Args.num^);
- CLOSE
- IF acc # NIL THEN
- ums.Logout (acc); acc := 0;
- END;
- IF RD # NIL THEN
- d.FreeArgs (RD); RD := NIL;
- END;
- END ReadMessage.
-