]> git.pond.sub.org Git - empserver/blobdiff - src/lib/commands/cons.c
commands: Rename the command functions
[empserver] / src / lib / commands / cons.c
index a6c7d68011bcbc831ab29555f0d0c2f1da58c28a..a2d56dbf16cb0f3bf07a5e5dd5fa22e7a3656cd3 100644 (file)
@@ -1,11 +1,11 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
- *                           Ken Stevens, Steve McClure
+ *  Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *                Ken Stevens, Steve McClure, Markus Armbruster
  *
- *  This program is free software; you can redistribute it and/or modify
+ *  Empire is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
+ *  the Free Software Foundation, either version 3 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -14,8 +14,7 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  *  ---
  *
  *
  *  ---
  *
- *  cons.c: Consider a loan or treaty
+ *  cons.c: Consider a loan
  *
  *  Known contributors to this file:
- *
+ *     Markus Armbruster, 2004-2014
  */
 
 #include <config.h>
 #include "loan.h"
 #include "news.h"
 #include "optlist.h"
-#include "treaty.h"
 
-/*
- * Things common to a loan or treaty.
- */
 struct ltcomstr {
-    int type;                  /* EF_LOAN or EF_TREATY */
+    int type;                  /* currently always EF_LOAN */
     int num;                   /* number */
-    char *name;                        /* "loan" or "treaty" */
-    char *Name;                        /* "Loan" or "Treaty" */
+    char *name;                        /* "loan" */
+    char *Name;                        /* "Loan" */
     natid proposer;            /* country offering */
     natid proposee;            /* country offered to */
     natid mailee;              /* who gets mail about it */
     char op;                   /* 'a', 'd', or 'p' */
     union {
        struct lonstr l;        /* the loan */
-       struct trtstr t;        /* the treaty */
     } u;
 };
 
 static int cons_choose(struct ltcomstr *ltcp);
-static int treaty_accept(struct ltcomstr *ltcp);
-static int treaty_decline(struct ltcomstr *ltcp);
+static int cons_display(struct ltcomstr *ltcp);
+static int cons_accept(struct ltcomstr *ltcp);
+static int cons_decline(struct ltcomstr *ltcp);
+static int cons_postpone(struct ltcomstr *ltcp);
 static int loan_accept(struct ltcomstr *ltcp);
 static int loan_decline(struct ltcomstr *ltcp);
-static int postpone(struct ltcomstr *ltcp);
 static void accpt(struct ltcomstr *ltcp);
 static void decline(struct ltcomstr *ltcp);
 static void late(struct ltcomstr *ltcp);
 static void prev_signed(struct ltcomstr *ltcp);
 
 int
-cons(void)
+c_consider(void)
 {
     int rv;
     struct ltcomstr ltc;
@@ -80,52 +75,35 @@ cons(void)
 
     switch (ltc.op) {
     case 'a':
-       rv = (ltc.type == EF_TREATY) ? treaty_accept(&ltc)
-           : loan_accept(&ltc);
-       break;
+       return cons_accept(&ltc);
     case 'd':
-       rv = (ltc.type == EF_TREATY) ? treaty_decline(&ltc)
-           : loan_decline(&ltc);
-       break;
+       return cons_decline(&ltc);
     case 'p':
-       rv = postpone(&ltc);
-       break;
+       return cons_postpone(&ltc);
     default:
-       pr("Bad operation %c from cons_choose; get help!\n", ltc.op);
-       break;
-    };
-
-    return rv;
+       CANT_REACH();
+       return RET_SYN;
+    }
 }
 
 /*
  * Choose whether we want to accept, decline, or postpone a
- * loan or treaty.  Put all the goodies in ltcp, and return
+ * loan.  Put all the goodies in ltcp, and return
  * RET_OK if all goes well, and anything else on error.
  */
 static int
 cons_choose(struct ltcomstr *ltcp)
 {
-    static int lon_or_trt[] = { EF_LOAN, EF_TREATY, EF_BAD };
+    static int lon_or_trt[] = { EF_LOAN, EF_BAD };
     char *p;
     struct lonstr *lp;
-    struct trtstr *tp;
     char prompt[128];
     char buf[1024];
 
     memset(ltcp, 0, sizeof(*ltcp));
-    if (!getstarg(player->argp[1], "loan or treaty? ", buf))
-       return RET_SYN;
-    ltcp->type = ef_byname_from(buf, lon_or_trt);
+    p = player->argp[1] ? player->argp[1] : "loan";
+    ltcp->type = ef_byname_from(p, lon_or_trt);
     switch (ltcp->type) {
-    case EF_TREATY:
-       if (!opt_TREATIES) {
-           pr("Treaties are not enabled.\n");
-           return RET_FAIL;
-       }
-       ltcp->name = "treaty";
-       ltcp->Name = "Treaty";
-       break;
     case EF_LOAN:
        if (!opt_LOANS) {
            pr("Loans are not enabled.\n");
@@ -135,16 +113,13 @@ cons_choose(struct ltcomstr *ltcp)
        ltcp->Name = "Loan";
        break;
     default:
-       pr("You must specify \"loan\" or \"treaty\".\n");
+       pr("You must specify \"loan\".\n");
        return RET_SYN;
     }
     sprintf(prompt, "%s number? ", ltcp->Name);
     if ((ltcp->num = onearg(player->argp[2], prompt)) < 0)
        return RET_SYN;
-    if (!ef_read(ltcp->type, ltcp->num, &ltcp->u) ||
-       !(ltcp->type == EF_TREATY
-         ? distrea(ltcp->num, &ltcp->u.t)
-         : disloan(ltcp->num, &ltcp->u.l))) {
+    if (!ef_read(ltcp->type, ltcp->num, &ltcp->u) || !cons_display(ltcp)) {
        pr("%s #%d is not being offered to you!\n", ltcp->Name, ltcp->num);
        return RET_SYN;
     }
@@ -158,15 +133,6 @@ cons_choose(struct ltcomstr *ltcp)
        ltcp->proposer = lp->l_loner;
        ltcp->proposee = lp->l_lonee;
        break;
-    case EF_TREATY:
-       tp = &ltcp->u.t;
-       if (tp->trt_status == TS_SIGNED) {
-           pr("That treaty has already been accepted!\n");
-           return RET_FAIL;
-       }
-       ltcp->proposer = tp->trt_cna;
-       ltcp->proposee = tp->trt_cnb;
-       break;
     }
     ltcp->mailee = (ltcp->proposer == player->cnum)
        ? ltcp->proposee : ltcp->proposer;
@@ -177,6 +143,52 @@ cons_choose(struct ltcomstr *ltcp)
     return RET_OK;
 }
 
+static int
+cons_display(struct ltcomstr *ltcp)
+{
+    switch (ltcp->type) {
+    case EF_LOAN:
+       return disloan(ltcp->num, &ltcp->u.l);
+    default:
+       CANT_REACH();
+       return 0;
+    }
+}
+
+static int
+cons_accept(struct ltcomstr *ltcp)
+{
+    switch (ltcp->type) {
+    case EF_LOAN:
+       return loan_accept(ltcp);
+    default:
+       CANT_REACH();
+       return RET_FAIL;
+    }
+}
+
+static int
+cons_decline(struct ltcomstr *ltcp)
+{
+    switch (ltcp->type) {
+    case EF_LOAN:
+       return loan_decline(ltcp);
+    default:
+       CANT_REACH();
+       return RET_FAIL;
+    }
+}
+
+static int
+cons_postpone(struct ltcomstr *ltcp)
+{
+    pr("%s %d is still pending.\n", ltcp->Name, ltcp->num);
+    if (ltcp->proposee == player->cnum)
+       wu(0, ltcp->proposer, "%s %d considered by %s\n",
+          ltcp->name, ltcp->num, cname(player->cnum));
+    return RET_OK;
+}
+
 /*
  * Accept a loan.  If the offering country has too little money,
  * leave him $100 left and offer the rest.  Return RET_OK on
@@ -223,26 +235,26 @@ loan_accept(struct ltcomstr *ltcp)
        pr("%s no longer has the funds.\n", cname(ltcp->proposer));
        if (lp->l_amtdue <= 0)
            return RET_FAIL;
-       pr("You may borrow $%ld at the same terms.\n", lp->l_amtdue);
+       pr("You may borrow $%d at the same terms.\n", lp->l_amtdue);
     }
     lender->nat_money -= lp->l_amtdue;
     putnat(lender);
     player->dolcost -= lp->l_amtdue;
     lp->l_amtpaid = 0;
     (void)time(&lp->l_lastpay);
-    lp->l_duedate = lp->l_ldur * 86400 + lp->l_lastpay;
+    lp->l_duedate = lp->l_ldur * SECS_PER_DAY + lp->l_lastpay;
     lp->l_status = LS_SIGNED;
     if (!putloan(ltcp->num, lp)) {
        pr("Problem writing lp->to disk; get help!\n");
        return RET_FAIL;
     }
     accpt(ltcp);
-    pr("You are now $%ld richer (sort of).\n", lp->l_amtdue);
+    pr("You are now $%d richer (sort of).\n", lp->l_amtdue);
     return RET_OK;
 }
 
 /*
- * Declne a loan.  Return RET_OK on success, anything else on error.
+ * Decline a loan.  Return RET_OK on success, anything else on error.
  */
 static int
 loan_decline(struct ltcomstr *ltcp)
@@ -271,87 +283,8 @@ loan_decline(struct ltcomstr *ltcp)
 }
 
 /*
- * Accept a treaty.  Return RET_OK on success, anything else on error.
- */
-static int
-treaty_accept(struct ltcomstr *ltcp)
-{
-    struct trtstr *tp;
-
-    tp = &ltcp->u.t;
-    if (ltcp->proposee != player->cnum) {
-       pr("%s %d is still pending.\n", ltcp->Name, ltcp->num);
-       return RET_OK;
-    }
-    if (!gettre(ltcp->num, tp)) {
-       pr("treaty_accept: can't read treaty");
-       pr("can't read treaty; get help!\n");
-       return RET_FAIL;
-    }
-    if (tp->trt_status == TS_FREE) {   /* treaty offer withdrawn */
-       late(ltcp);
-       return RET_OK;
-    }
-    if (tp->trt_status == TS_SIGNED) { /* somehow got accepted */
-       prev_signed(ltcp);
-       return RET_OK;
-    }
-    tp->trt_status = TS_SIGNED;
-    if (!puttre(ltcp->num, tp)) {
-       pr("treaty_accept: can't write treaty");
-       pr("Problem saving treaty; get help!\n");
-       return RET_FAIL;
-    }
-    accpt(ltcp);
-    pr("Treaty in effect until %s", ctime(&tp->trt_exp));
-    return RET_OK;
-}
-
-/*
- * Decline a treaty.  Return RET_OK on success, anything else on error.
- */
-static int
-treaty_decline(struct ltcomstr *ltcp)
-{
-    struct trtstr *tp;
-
-    tp = &ltcp->u.t;
-    if (!gettre(ltcp->num, tp)) {
-       logerror("treaty_decline: can't read treaty");
-       pr("can't read treaty; get help!\n");
-       return RET_FAIL;
-    }
-    /* treaty got signed somehow between now and last time we read it */
-    if (tp->trt_status == TS_SIGNED) {
-       late(ltcp);
-       return RET_OK;
-    }
-    tp->trt_status = TS_FREE;
-    if (!puttre(ltcp->num, tp)) {
-       logerror("treaty_decline: can't write treaty");
-       pr("Problem saving treaty; get help!\n");
-       return RET_FAIL;
-    }
-    decline(ltcp);
-    return RET_OK;
-}
-
-/*
- * Postpone a treaty; always succeeds.
- */
-static int
-postpone(struct ltcomstr *ltcp)
-{
-    pr("%s %d is still pending.\n", ltcp->Name, ltcp->num);
-    if (ltcp->proposee == player->cnum)
-       wu(0, ltcp->proposer, "%s %d considered by %s\n",
-          ltcp->name, ltcp->num, cname(player->cnum));
-    return RET_OK;
-}
-
-/*
- * Somebody tried to accept a loan/treaty that was retracted,
- * or to decline a loan/treaty they already signed.
+ * Somebody tried to accept a loan that was retracted,
+ * or to decline a loan they already signed.
  */
 static void
 late(struct ltcomstr *ltcp)
@@ -362,7 +295,7 @@ late(struct ltcomstr *ltcp)
 }
 
 /*
- * Loan or treaty was previously signed.
+ * Loan was previously signed.
  */
 static void
 prev_signed(struct ltcomstr *ltcp)
@@ -371,7 +304,7 @@ prev_signed(struct ltcomstr *ltcp)
 }
 
 /*
- * Post-processing after successful declination of loan or treaty.
+ * Post-processing after successful declination of loan.
  * Notify the folks involved.
  */
 static void
@@ -390,17 +323,20 @@ decline(struct ltcomstr *ltcp)
 }
 
 /*
- * Post-processing after successful acceptance of loan or treaty.
+ * Post-processing after successful acceptance of loan.
  * Notify the press, and the folks involved.
  * (Weird spelling is to avoid accept(2)).
  */
 static void
 accpt(struct ltcomstr *ltcp)
 {
-    if (ltcp->type == EF_LOAN)
+    switch (ltcp->type) {
+    case EF_LOAN:
        nreport(ltcp->proposer, N_MAKE_LOAN, player->cnum, 1);
-    else
-       nreport(player->cnum, N_SIGN_TRE, ltcp->mailee, 1);
+       break;
+    default:
+       CANT_REACH();
+    }
     wu(0, ltcp->mailee, "%s #%d accepted by %s\n",
        ltcp->Name, ltcp->num, cname(player->cnum));
 }