BSD 4_4 release
[unix-history] / usr / src / games / larn / bill.c
index 3926a2e..dd74c11 100644 (file)
-#include "header.h"
-/* bill.c               "Larn is copyrighted 1986 by Noah Morgan. */
-static char mail600[32];
-/*
- *     function to create the tax bill for the user
+/*-
+ * Copyright (c) 1991 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
  */
  */
-static int pid;
-static letter1()
-  {
-  sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
-  if (lcreat(mail600) < 0) { write(1,"can't write 600 letter\n",23); return(0);}
-  lprcat("\n\n\n\n\n\n\n\n\n\n\n\n");
-  standout("From:"); lprcat("  the LRS (Larn Revenue Service)\n");
-  standout("\nSubject:"); lprcat("  undeclared income\n");
-  lprcat("\n   We heard you survived the caverns of Larn.  Let me be the");
-  lprcat("\nfirst to congratulate you on your success.  It is quite a feat.");
-  lprcat("\nIt must also have been very profitable for you.");
-  lprcat("\n\n   The Dungeon Master has informed us that you brought");
-  lprintf("\n%d gold pieces back with you from your journey.  As the",(long)c[GOLD]);
-  lprcat("\ncounty of Larn is in dire need of funds, we have spared no time");
-  lprintf("\nin preparing your tax bill.  You owe %d gold pieces as",
-       (long)c[GOLD]*TAXRATE);
-  lprcat("\nof this notice, and is due within 5 days.  Failure to pay will");
-  lprcat("\nmean penalties.  Once again, congratulations, We look forward");
-  lprcat("\nto your future successful expeditions.\n");
-  lwclose(); return(1);
-  }
 
 
-static letter2()
-  {
-  sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
-  if (lcreat(mail600) < 0) { write(1,"can't write 601 letter\n",23); return(0);}
-  lprcat("\n\n\n\n\n\n\n\n\n\n\n\n");
-  standout("From:"); lprcat("  His Majesty King Wilfred of Larndom\n");
-  standout("\nSubject:"); lprcat("  a noble deed\n");
-  lprcat("\n   I have heard of your magnificent feat, and I, King Wilfred,");
-  lprcat("\nforthwith declare today to be a national holiday.  Furthermore,");
-  lprcat("\nhence three days, Ye be invited to the castle to receive the");
-  lprcat("\nhonour of Knight of the realm.  Upon thy name shall it be written. . .");
-  lprcat("\nBravery and courage be yours.");
-  lprcat("\nMay you live in happiness forevermore . . .\n");
-  lwclose(); return(1);
-  }
+#ifndef lint
+static char sccsid[] = "@(#)bill.c     5.2 (Berkeley) 5/28/91";
+#endif /* not lint */
 
 
-static letter3()
-  {
-  sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
-  if (lcreat(mail600) < 0) { write(1,"can't write 602 letter\n",23); return(0);}
-  lprcat("\n\n\n\n\n\n\n\n\n\n\n\n");
-  standout("From:"); lprcat("  Count Endelford\n");
-  standout("\nSubject:"); lprcat("  You Bastard!\n");
-  lprcat("\n   I heard (from sources) of your journey.  Congratulations!");
-  lprcat("\nYou Bastard!  With several attempts I have yet to endure the");
-  lprcat(" caves,\nand you, a nobody, makes the journey!  From this time");
-  lprcat(" onward, bewarned\nupon our meeting you shall pay the price!\n");
-  lwclose(); return(1);
-  }
-
-static letter4()
-  {
-  sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
-  if (lcreat(mail600) < 0) { write(1,"can't write 603 letter\n",23); return(0);}
-  lprcat("\n\n\n\n\n\n\n\n\n\n\n\n");
-  standout("From:"); lprcat("  Mainair, Duke of Larnty\n");
-  standout("\nSubject:"); lprcat("  High Praise\n");
-  lprcat("\n   With a certainty a hero I declare to be amongst us!  A nod of");
-  lprcat("\nfavour I send to thee.  Me thinks Count Endelford this day of");
-  lprcat("\nright breath'eth fire as of dragon of whom ye are slayer.  I");
-  lprcat("\nyearn to behold his anger and jealously.  Should ye choose to");
-  lprcat("\nunleash some of thy wealth upon those who be unfortunate, I,");
-  lprcat("\nDuke Mainair, Shall equal thy gift also.\n");
-  lwclose(); return(1);
-  }
+#include <sys/file.h>
+#include <sys/wait.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include "header.h"
 
 
-static letter5()
-  {
-  sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
-  if (lcreat(mail600) < 0) { write(1,"can't write 604 letter\n",23); return(0);}
-  lprcat("\n\n\n\n\n\n\n\n\n\n\n\n");
-  standout("From:"); lprcat("  St. Mary's Children's Home\n");
-  standout("\nSubject:"); lprcat("  these poor children\n");
-  lprcat("\n   News of your great conquests has spread to all of Larndom.");
-  lprcat("\nMight I have a moment of a great man's time.  We here at St.");
-  lprcat("\nMary's Children's Home are very poor, and many children are");
-  lprcat("\nstarving.  Disease is widespread and very often fatal without");
-  lprcat("\ngood food.  Could you possibly find it in your heart to help us");
-  lprcat("\nin our plight?  Whatever you could give will help much.");
-  lprcat("\n(your gift is tax deductible)\n");
-  lwclose(); return(1);
-  }
+/* bill.c               Larn is copyrighted 1986 by Noah Morgan. */
 
 
-static letter6()
-  {
-  sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
-  if (lcreat(mail600) < 0) { write(1,"can't write 605 letter\n",23); return(0);}
-  lprcat("\n\n\n\n\n\n\n\n\n\n\n\n");
-  standout("From:"); lprcat("  The National Cancer Society of Larn\n");
-  standout("\nSubject:"); lprcat("  hope\n");
-  lprcat("\nCongratulations on your successful expedition.  We are sure much");
-  lprcat("\ncourage and determination were needed on your quest.  There are");
-  lprcat("\nmany though, that could never hope to undertake such a journey");
-  lprcat("\ndue to an enfeebling disease -- cancer.  We at the National");
-  lprcat("\nCancer Society of Larn wish to appeal to your philanthropy in");
-  lprcat("\norder to save many good people -- possibly even yourself a few");
-  lprcat("\nyears from now.  Much work needs to be done in researching this");
-  lprcat("\ndreaded disease, and you can help today.  Could you please see it");
-  lprcat("\nin your heart to give generously?  Your continued good health");
-  lprcat("\ncan be your everlasting reward.\n");
-  lwclose(); return(1);
-  }
+char *mail[] = {
+       "From: the LRS (Larn Revenue Service)\n",
+       "~s undeclared income\n",
+       "\n   We have heard you survived the caverns of Larn.  Let me be the",
+       "\nfirst to congratulate you on your success.  It was quite a feat.",
+       "\nIt was also very profitable for you...",
+       "\n\n   The Dungeon Master has informed us that you brought",
+       "1",
+       "\ncounty of Larn is in dire need of funds, we have spared no time",
+       "2",
+       "\nof this notice, and is due within 5 days.  Failure to pay will",
+       "\nmean penalties.  Once again, congratulations, We look forward",
+       "\nto your future successful expeditions.\n",
+       NULL,
+       "From: His Majesty King Wilfred of Larndom\n",
+       "~s a noble deed\n",
+       "\n   I have heard of your magnificent feat, and I, King Wilfred,",
+       "\nforthwith declare today to be a national holiday.  Furthermore,",
+       "\nhence three days, ye be invited to the castle to receive the",
+       "\nhonour of Knight of the realm.  Upon thy name shall it be written...",
+       "\n\nBravery and courage be yours.",
+       "\n\nMay you live in happiness forevermore...\n",
+       NULL,
+       "From: Count Endelford\n",
+       "~s You Bastard!\n",
+       "\n   I have heard (from sources) of your journey.  Congratulations!",
+       "\nYou Bastard!  With several attempts I have yet to endure the",
+       " caves,\nand you, a nobody, makes the journey!  From this time",
+       " onward, bewarned\nupon our meeting you shall pay the price!\n",
+       NULL,
+       "From: Mainair, Duke of Larnty\n",
+       "~s High Praise\n",
+       "\n   With certainty, a hero I declare to be amongst us!  A nod of",
+       "\nfavour I send to thee.  Me thinks Count Endelford this day of",
+       "\nright breath'eth fire as of dragon of whom ye are slayer.  I",
+       "\nyearn to behold his anger and jealously.  Should ye choose to",
+       "\nunleash some of thy wealth upon those who be unfortunate, I,",
+       "\nDuke Mainair, shall equal thy gift also.\n",
+       NULL,
+       "From: St. Mary's Children's Home\n",
+       "~s these poor children\n",
+       "\n   News of your great conquests has spread to all of Larndom.",
+       "\nMight I have a moment of a great adventurers's time?  We here at",
+       "\nSt. Mary's Children's Home are very poor, and many children are",
+       "\nstarving.  Disease is widespread and very often fatal without",
+       "\ngood food.  Could you possibly find it in your heart to help us",
+       "\nin our plight?  Whatever you could give will help much.",
+       "\n(your gift is tax deductible)\n",
+       NULL,
+       "From: The National Cancer Society of Larn\n",
+       "~s hope\n",
+       "\nCongratulations on your successful expedition.  We are sure much",
+       "\ncourage and determination were needed on your quest.  There are",
+       "\nmany though, that could never hope to undertake such a journey",
+       "\ndue to an enfeebling disease -- cancer.  We at the National",
+       "\nCancer Society of Larn wish to appeal to your philanthropy in",
+       "\norder to save many good people -- possibly even yourself a few",
+       "\nyears from now.  Much work needs to be done in researching this",
+       "\ndreaded disease, and you can help today.  Could you please see it",
+       "\nin your heart to give generously?  Your continued good health",
+       "\ncan be your everlasting reward.\n",
+       NULL
+};
 
 /*
  *     function to mail the letters to the player if a winner
  */
 
 /*
  *     function to mail the letters to the player if a winner
  */
-static int (*pfn[])()= { letter1, letter2, letter3, letter4, letter5, letter6 };
+
+void
 mailbill()
 mailbill()
-       {
+{
        register int i;
        register int i;
+       char fname[32];
        char buf[128];
        char buf[128];
-       wait(0);  pid=getpid();
-       if (fork() == 0)
-               {
+       char **cp;
+       int fd;
+
+       wait(0);
+       if (fork() == 0) {
                resetscroll();
                resetscroll();
-               for (i=0; i<sizeof(pfn)/sizeof(int (*)()); i++)
-                       if ((*pfn[i])())
-                               {
-                               sleep(20);  sprintf(buf,"mail %s < %s",loginname,mail600);
-                               system(buf);  unlink(mail600);
-                               }
-               exit();
+               cp = mail;
+               sprintf(fname, "/tmp/#%dlarnmail", getpid());
+               for (i = 0; i < 6; i++) {
+                       if ((fd = open(fname, O_WRONLY | O_TRUNC | O_CREAT),
+                           0666) == -1)
+                               exit(0);
+                       while (*cp != NULL) {
+                               if (*cp[0] == '1') {
+                                       sprintf(buf, "\n%d gold pieces back with you from your journey.  As the",
+                                           (long)c[GOLD]);
+                                       write(fd, buf, strlen(buf));
+                               } else if (*cp[0] == '2') {
+                                       sprintf(buf, "\nin preparing your tax bill.  You owe %d gold pieces as", (long)c[GOLD]*TAXRATE);
+                                       write(fd, buf, strlen(buf));
+                               } else
+                                       write(fd, *cp, strlen(*cp));
+                               cp++;
+                       }
+                       cp++;
+
+                       close(fd);
+                       sprintf(buf, "mail -I %s < %s > /dev/null",
+                           loginname, fname);
+                       system(buf);
+                       unlink(fname);
                }
        }
                }
        }
+       exit(0);
+}