home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 300-399 / ff319.lzh / CNewsSrc / cnews.orig.lzh / relay / sh / defhdrs.awk < prev    next >
Text File  |  1989-06-27  |  3KB  |  103 lines

  1. # defhdrs.awk
  2. # pass 1 - note presence | absence of certain headers
  3. # a header keyword: remember it and its value
  4. /^[^\t ]*:/ {
  5.     hdrval[$1] = $0
  6.     keyword=$1
  7.     next
  8. }
  9. # a continuation: concatenate this line to the value
  10.     { hdrval[keyword] = hdrval[keyword] "\n" $0 }
  11.  
  12. END {
  13.     # pass 2 - cogitate & omit & emit headers
  14.     emptyhdrre = "^[^\t ]*:[\t ]*$"
  15.     subjname = "Subject:"
  16.     ctlname = "Control:"
  17.     ngname = "Newsgroups:"
  18.     msgidname = "Message-ID:"
  19.     typoname =  "Message-Id:"
  20.     pathname = "Path:"
  21.     datename = "Date:"
  22.     fromname = "From:"
  23.     orgname = "Organization:"
  24.     distrname = "Distribution:"
  25.     sendername = "Sender:"
  26.  
  27.     # fill in missing headers
  28.     if (hdrval[typoname] != "") {    # spelling hack
  29.         hdrval[msgidname] = hdrval[typoname]
  30.         hdrval[typoname] = ""
  31.         # fix spelling: Message-Id: -> Message-ID:
  32.         nf = split(hdrval[msgidname], fields);    # bust up
  33.         fields[1] = msgidname;        # fix spelling
  34.         hdrval[msgidname] = fields[1];    # reassemble...
  35.         for (i = 2; i <= nf; i++)
  36.             hdrval[msgidname] = hdrval[msgidname] " " fields[i]
  37.     }
  38.     if (hdrval[msgidname] == "")
  39.         hdrval[msgidname] = msgidname " " defmsgid
  40.     if (hdrval[orgname] == "")
  41.         hdrval[orgname] = orgname " " deforg
  42.  
  43.     # replace users headers (if any)
  44.     hdrval[datename] = datename " " defdate
  45.     hdrval[pathname] = pathname " " defpath
  46.     if (hdrval[fromname] == "")
  47.         hdrval[fromname] = fromname " " deffrom
  48.     else if (hdrval[sendername] == "")
  49.         hdrval[sendername] = sendername " " deffrom
  50.  
  51.     # snuff some headers
  52.     distworld = distrname " world"
  53.     if (hdrval[distrname] == distworld)
  54.         hdrval[distrname] = ""
  55.  
  56.     # the vile cmsg hack, for the sake of the news readers *only*
  57.     if (hdrval[ctlname] == "" && \
  58.         substr(hdrval[subjname], 1, 14) == "Subject: cmsg ")
  59.         hdrval[ctlname] = ctlname " " substr(hdrval[subjname], 15)
  60.  
  61.     # warn if no Newsgroups:
  62.     if (hdrval[ngname] == "")
  63.         print "no newsgroups header!" | "cat >&2"
  64.  
  65.     # field the all.all.ctl hack, for the sake of the backward only:
  66.     # clone Subject: to make Control:
  67.     if (hdrval[ctlname] == "" && hdrval[ngname] ~ /\.ctl(,|$)/)
  68.         hdrval[ctlname] = ctlname " " substr(hdrval[subjname], 8)
  69.  
  70.     # reorder & emit headers
  71.  
  72.     # favour Control: & Newsgroups: for future benefit of rnews
  73.     if (hdrval[ctlname] != "") {
  74.         print hdrval[ctlname]
  75.         hdrval[ctlname] = ""    # no Control: to print now
  76.     }
  77.     if (hdrval[ngname] != "") {
  78.         print hdrval[ngname]
  79.         hdrval[ngname] = ""    # no Newsgroups: to print now
  80.     }
  81.  
  82.     # B inews kludgery: print Path: before From: to avoid confusing it
  83.     if (hdrval[pathname] != "") {
  84.         print hdrval[pathname]
  85.         hdrval[pathname] = ""    # no Path: to print now
  86.     }
  87.     if (hdrval[fromname] != "") {
  88.         print hdrval[fromname]
  89.         hdrval[fromname] = ""    # no From: to print now
  90.     }
  91.  
  92.     # have pity on readers: put Subject: next
  93.     if (hdrval[subjname] != "") {
  94.         print hdrval[subjname]
  95.         hdrval[subjname] = ""    # no Subject: to print now
  96.     }
  97.  
  98.     # print misc. non-empty headers in random order
  99.     for (i in hdrval)
  100.         if (hdrval[i] != "" && hdrval[i] !~ /^[^\t ]*:[\t ]*$/)
  101.             print hdrval[i]
  102. }
  103.