summaryrefslogtreecommitdiff
path: root/ipl/progs/reply.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/progs/reply.icn')
-rw-r--r--ipl/progs/reply.icn115
1 files changed, 115 insertions, 0 deletions
diff --git a/ipl/progs/reply.icn b/ipl/progs/reply.icn
new file mode 100644
index 0000000..e919650
--- /dev/null
+++ b/ipl/progs/reply.icn
@@ -0,0 +1,115 @@
+############################################################################
+#
+# File: reply.icn
+#
+# Subject: Program to reply to news-articles or mail
+#
+# Author: Ronald Florence
+#
+# Date: March 8, 1991
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# Version: 1.4
+#
+############################################################################
+#
+# This program creates the appropriate headers and attribution,
+# quotes a news or mail message, and uses system() calls to put the
+# user in an editor and then to mail the reply. The default prefix
+# for quoted text is ` > '.
+#
+# usage: reply [prefix] < news-article or mail-item
+#
+# If a smarthost is defined, Internet addresses are converted to bang
+# paths (name@site.domain -> site.domain!name). The mail is routed
+# to a domained smarthost as address@smarthost.domain, otherwise to
+# smarthost!address.
+#
+# The default editor can be overridden with the EDITOR environment variable.
+#
+############################################################################
+
+procedure main(arg)
+ local smarthost, editor, console, tmpdir, tmpfile, reply, fullname
+ local address, quoter, date, id, subject, newsgroup, refs, edstr, stdin
+ local mailstr
+
+ smarthost := ""
+ editor := "vi"
+
+ if find("UNIX", &features) then {
+ console := "/dev/tty"
+ tmpdir := "/tmp/"
+ }
+ else if find("MS-DOS", &features) then {
+ console := "CON"
+ tmpdir := ""
+ }
+ (\console & \tmpdir) | stop("reply: missing system information")
+
+ every tmpfile := tmpdir || "reply." || right(1 to 999,3,"0") do
+ close(open(tmpfile)) | break
+ reply := open(tmpfile, "w") | stop("reply: cannot write temp file")
+
+ # Case-insensitive matches for headers.
+ every !&input ? {
+ tab(match("from: " | "reply-to: ", map(&subject))) & {
+ if find("<") then {
+ fullname := tab(upto('<'))
+ address := (move(1), tab(find(">")))
+ }
+ else {
+ address := trim(tab(upto('(') | 0))
+ fullname := (move(1), tab(find(")")))
+ }
+ while match(" ", \fullname, *fullname) do fullname ?:= tab(-1)
+ quoter := if *\fullname > 0 then fullname else address
+ }
+ tab(match("date: ", map(&subject))) & date := tab(0)
+ tab(match("message-id: ", map(&subject))) & id := tab(0)
+ match("subject: ", map(&subject)) & subject := tab(0)
+ match("newsgroups: ", map(&subject)) & newsgroup := tab(upto(',') | 0)
+ match("references: ", map(&subject)) & refs := tab(0)
+ (\address & *&subject = 0) & {
+ \subject & write(reply, subject)
+ \newsgroup & write(reply, newsgroup)
+ \refs & write(reply, refs, " ", id)
+ write(reply, "In-reply-to: ", quoter, "'s message of ", date);
+ write(reply, "\nIn ", id, ", ", quoter, " writes:\n")
+ break
+ }
+ }
+
+ every write(reply, \arg[1] | " > ", !&input)
+ edstr := (getenv("EDITOR") | editor) || " " || tmpfile || " < " || console
+ system(edstr)
+ stdin := open(console)
+ writes("Send y/n? ")
+ upto('nN', read(stdin)) & {
+ writes("Save your draft reply y/n? ")
+ if upto('yY', read(stdin)) then
+ stop("Your draft reply is saved in ", tmpfile)
+ else {
+ remove(tmpfile)
+ stop("Reply aborted.")
+ }
+ }
+
+ (*smarthost > 0) & not find(map(smarthost), map(address)) & {
+ find("@", address) & address ? {
+ name := tab(upto('@'))
+ address := (move(1), tab(upto(' ') | 0)) || "!" || name
+ }
+ if find(".", smarthost) then address ||:= "@" || smarthost
+ else address := smarthost || "!" || address
+ }
+ mailstr := "mail " || address || " < " || tmpfile
+ system(mailstr)
+ write("Reply sent to " || address)
+ remove(tmpfile)
+end