|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T r
Length: 2415 (0x96f)
Types: TextFile
Names: »repa.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Empire.V/V1.1/COMMANDS/repa.c«
#define D_LONSTR
#define D_NATSTR
#define D_NEWSVERBS
#define D_FILES
#include "empdef.h"
repa()
{
register arg;
long now, due, last, rdur, xdur;
double rate, owed, pay;
if( (arg = onearg(argp[1], "repay loan #")) == -1) return(SYN_RETURN);
if( getloan(arg) == -1 ) goto X102;
if( cnum != loan.l_lonee ) goto X102;
if( loan.l_ldur != 0 ) goto X112;
X102:
printf("You don't owe anything on that loan...");
return(FAIL_RETURN);
X112:
time(&now);
due = loan.l_duedate;
last = loan.l_lastpay;
if( now >= due ) goto X240;
rdur = now - last;
xdur = 0;
X240:
if( last >= due ) goto X370;
if( due >= now ) goto X370;
rdur = due - last;
xdur = now - due;
X370:
if( due >= last ) goto X454;
rdur = 0;
xdur = now - last;
X454:
rate = loan.l_irate / (loan.l_ldur * 8.64e6);
owed = (rdur * rate + xdur * rate * 2.0 + 1.0) * loan.l_amtdue;
sprintf(fmtbuf,"You presently owe $%.0f payment : $", owed);
pay = onearg(argp[2], fmtbuf);
if( pay > owed + 1.0 || pay < 0 ) {
printf("You don't owe that much...");
return(FAIL_RETURN);
}
if( pay == 0 ) return(SYN_RETURN);
getnat(cnum);
if( pay > nat.nat_money ) {
printf("You only have $%.0f...", nat.nat_money);
return(FAIL_RETURN);
}
nat.nat_money -= pay;
sigsave();
putnat(cnum);
getnat(loan.l_loner);
nat.nat_money += pay;
putnat(loan.l_loner);
time(&loan.l_lastpay);
if( pay + 1.0 >= owed ) {
sprintf(fmtbuf,"Country #%d paid off loan %d with $%.0f", cnum, arg, pay);
wu(0, loan.l_loner, fmtbuf);
nreport(cnum, N_REPAY_LOAN, loan.l_loner);
loan.l_ldur = 0;
printf("Congratulations, you've paid off the loan!\n");
} else {
sprintf(fmtbuf,"Country #%d paid $%.0f on loan %d", cnum, pay, arg);
wu(0, loan.l_loner, fmtbuf);
loan.l_amtdue = min(owed - pay, 32767.);
pay = loan.l_amtpaid + pay;
loan.l_amtpaid = min(pay, 32767.);
}
putloan(arg);
return(NORM_RETURN);
}