|
|
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 s
Length: 8339 (0x2093)
Types: TextFile
Names: »screen.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Midway/screen.c«
#include "externs.h"
plotships()
{
register int n, k, r, c;
int dr = 0, dc = 0;
int *table1, *table2, start1, start2, end1, end2;
viewrow = shiplist[virtual].row - HALFROW;
viewcol = shiplist[virtual].col - HALFCOL;
werase(view);
werase(bridge);
if (scale == 0) {
if (viewrow < 1018 && viewrow > 957 && viewcol > 952 && viewcol < 1057) { /* land ho! */
for (n=0; n < 6; n++)
mvwputs(view, 981 + n - viewrow, 1012 - viewcol, Reef[n]);
for (n=0; n < 18; n++)
mvwputs(view, 1000 + n - viewrow, 1000 - viewcol, Sand_Island[n]);
for (n=0; n < 8; n++)
mvwputs(view, 1007 + n - viewrow, 1034 - viewcol, Eastern_Island[n]);
}
for (n = 0; n < MAXSHIPS; n++) {
if (shiplist[n].hits && shiplist[n].torps && (r = shiplist[n].row - viewrow) >= 0 && r < MAXROWS && (c = shiplist[n].col - viewcol) >= 0 && c < MAXCOLS) {
wmove(view, r, c);
if (n != MIDWAY && winch(view) == 'x') {
dr = dc = 0;
drdc(shiplist[n].course, &dr, &dc);
shiplist[n].row -= dr;
shiplist[n].col -= dc;
}
for (k=0; k < 5; k++)
mvwputs(view, r+k-2, c-2, shapes[shiplist[n].type - CV][shiplist[n].course/45][k]);
}
}
} else {
if (Japanese(player)) {
if (scale < 4) {
start1 = JAPANESE;
end1 = MAXSHIPS;
start2 = 0;
end2 = JAPANESE;
} else {
start1 = japtable[0];
end1 = MAXSHIPS;
start2 = amtable[0];
end2 = MAXSHIPS;
}
table1 = japtable;
table2 = amtable;
} else {
if (scale < 4) {
start1 = 0;
end1 = JAPANESE;
start2 = JAPANESE;
end2 = MAXSHIPS;
} else {
start1 = amtable[0];
end1 = MAXSHIPS;
start2 = japtable[0];
end2 = MAXSHIPS;
}
table1 = amtable;
table2 = japtable;
}
for (n = start1; n < end1; scale < 4 ? n++ : (n = *++table1)) {
if (shiplist[n].hits && shiplist[n].torps) {
r = (shiplist[n].row - viewrow - HALFROW) / scaler[scale] + HALFROW;
c = (shiplist[n].col - viewcol - HALFCOL) / scaler[scale] + HALFCOL;
if (r >= 0 && r < MAXROWS && c >= 0 && c < MAXCOLS) {
mvwputs(view, r, c, overviews[shiplist[n].type]);
}
}
}
for (n = start2; n < end2; scale < 4 ? n++ : (n = *++table2)) {
if (sighted[n] && shiplist[n].hits && shiplist[n].torps) {
r = (shiplist[n].row - viewrow - HALFROW) / scaler[scale] + HALFROW;
c = (shiplist[n].col - viewcol - HALFCOL) / scaler[scale] + HALFCOL;
if (r >= 0 && r < MAXROWS && c >= 0 && c < MAXCOLS) {
mvwputs(view, r, c, overviews[shiplist[n].type]);
mvwputs(view, r, c + 3, shiplist[n].name);
}
}
}
}
if (scale == 0 && virtual == player) {
for (n = 7; n < 16; n++) {
for (k = 21; k < 26; k++) {
wmove(view, n, k);
wmove(bridge, n - 7, k - 21);
waddch(bridge, winch(view));
}
}
} else {
for (k=0; k < 5; k++)
mvwputs(bridge, k+2, 0, shapes[shiplist[player].type - CV][shiplist[player].course/45][k]);
}
}
plotplanes()
{
register int n, k, r, c;
int danger = 0;
int dr = 0, dc = 0;
struct squadron *planes;
if (scale == 0) {
for (planes = (Japanese(player) ? japscouts : amscouts); planes; planes = planes -> s_next)
if ((r = planes -> row - viewrow) >= 0 && r < MAXROWS && (c = planes -> col - viewcol) >= 0 && c < MAXCOLS)
mvwaddch(view, r, c, '?');
for (planes = japanese; planes; planes = planes -> s_next) {
if ((r = planes -> row - viewrow) >= 0 && r < MAXROWS && (c = planes -> col - viewcol) >= 0 && c < MAXCOLS) {
for (n = - (k = planes -> planes)/2; n < k - k/2; n++) {
dr = dc = 0;
vshape(setcourse(planes, planes -> course), n, &dr, &dc);
mvwaddch(view, r + dr, c + dc, '-');
}
}
}
for (planes = american; planes; planes = planes -> s_next) {
if ((r = planes -> row - viewrow) >= 0 && r < MAXROWS && (c = planes -> col - viewcol) >= 0 && c < MAXCOLS) {
for (n = - (k = planes -> planes)/2; n < k - k/2; n++) {
dr = dc = 0;
vshape(setcourse(planes, planes -> course), n, &dr, &dc);
mvwaddch(view, r + dr, c + dc, '+');
}
}
}
} else {
for (planes = (Japanese(player) ? japscouts : amscouts); planes; planes = planes -> s_next) {
r = (planes -> row - viewrow - HALFROW) / scaler[scale] + HALFROW;
c = (planes -> col - viewcol - HALFCOL) / scaler[scale] + HALFCOL;
if (r >= 0 && r < MAXROWS && c >= 0 && c < MAXCOLS) {
mvwaddch(view, r, c, '?');
}
}
for (planes = (Japanese(player) ? japanese : american); planes; planes = planes -> s_next) {
r = (planes -> row - viewrow - HALFROW) / scaler[scale] + HALFROW;
c = (planes -> col - viewcol - HALFCOL) / scaler[scale] + HALFCOL;
if (r >= 0 && r < MAXROWS && c >= 0 && c < MAXCOLS) {
mvwaddch(view, r, c, (Japanese(player) ? '-' : '+'));
}
}
for (planes = (Japanese(player) ? american : japanese); planes; planes = planes -> s_next) {
r = (planes -> row - viewrow - HALFROW) / scaler[scale] + HALFROW;
c = (planes -> col - viewcol - HALFCOL) / scaler[scale] + HALFCOL;
if ((scale < 4 || sighted[planes -> from]) && r >= 0 && r < MAXROWS && c >= 0 && c < MAXCOLS) {
mvwaddch(view, r, c, (Japanese(player) ? '+' : '-'));
if (planes -> course == player) danger = 1;
}
}
}
if (danger)
c = '?';
else
c = '|';
for (n=0; n < 9; n++) {
mvwaddch(panel1, n, 0, c);
mvwaddch(panel2, n, 0, c);
}
}
screen()
{
char buf[32];
mvwputs(date, 0, 0, daytime(clock, buf));
mvwprintw(stats, 0, 4, "%2d", capplanes[virtual]);
mvwprintw(stats, 1, 4, "%2d", shiplist[virtual].f4f);
mvwprintw(stats, 2, 4, "%2d", shiplist[virtual].tbf);
mvwprintw(stats, 3, 4, "%2d", shiplist[virtual].sbd);
mvwprintw(stats, 0, 14, "%2d", shiplist[virtual].hits);
mvwprintw(stats, 1, 14, "%2d", shiplist[virtual].torps);
mvwprintw(stats, 3, 14, "%-3d", shiplist[virtual].points);
mvwprintw(stats, 1, 18, "%-6d", shiplist[virtual].row);
mvwprintw(stats, 3, 18, "%-6d", shiplist[virtual].col);
mvwaddch(hole, 0, 0, scale + '0');
wrefresh(view);
wrefresh(bridge);
wrefresh(stats);
wrefresh(date);
wrefresh(hole);
wrefresh(panel1);
wrefresh(panel2);
} /*end screen */
#include <pwd.h>
#define LOGFILE "/usr/public/.midwaylog"
int maxpoints[2] = {637, 384};
struct logs {
int uid;
int fshipnum;
int netpoints;
};
die()
{
FILE *fp;
register int n, k;
struct passwd *getpwuid();
int score;
long st;
struct logs log[20], temp;
if (!shiplist[player].hits || !shiplist[player].torps)
inform("You went down with the ship!", 0);
mvcur(0, COLS-1, LINES-1, 0);
echo();
nocrmode();
signal(SIGINT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
if (fp = fopen(LOGFILE, "r+")){
n = fread(log, sizeof(struct logs), 20, fp);
for (; n < 20; n++)
log[n].uid = log[n].fshipnum = log[n].netpoints = 0;
rewind(fp);
for (n=0; n < 20; n++)
if (shiplist[player].points > log[n].netpoints){
fwrite(log, sizeof(struct logs), n, fp);
temp.uid = getuid();
temp.fshipnum = player;
temp.netpoints = shiplist[player].points;
fwrite(&temp, sizeof(struct logs), 1, fp);
fwrite(log + n, sizeof(struct logs), 19 - n, fp);
break;
}
printf("\n\nNAME\t\tSHIP\t\t\tTONS SUNK\tPERCENT\n\n");
if (n == 21) n = 20;
for (k=0; k < n; k++) {
if (log[k].netpoints) {
st = (long) log[k].netpoints * 100L;
score = (int) (st / (long) maxpoints[(Japanese(log[k].fshipnum))]);
printf("%-10s%16s%20ld%10d%%\n", getpwuid(log[k].uid) -> pw_name, shiplist[log[k].fshipnum].name, log[k].netpoints * 1000L, score);
}
}
if (shiplist[player].points) {
st = (long) temp.netpoints * 100L;
score = (int) (st / (long) maxpoints[(Japanese(temp.fshipnum))]);
printf("%-10s%16s%20ld%10d%%\n", getpwuid(temp.uid) -> pw_name, shiplist[temp.fshipnum].name, temp.netpoints * 1000L, score);
}
for (; k < 20; k++) {
if (log[k].netpoints) {
st = (long) log[k].netpoints * 100L;
score = (int) (st / (long) maxpoints[(Japanese(log[k].fshipnum))]);
printf("%-10s%16s%20ld%10d%%\n", getpwuid(log[k].uid) -> pw_name, shiplist[log[k].fshipnum].name, log[k].netpoints * 1000L, score);
}
}
}
exit(0);
}
interrupt()
{
automatic = 0;
signal(SIGINT, interrupt);
}
mvwputs(win, row, col, string)
WINDOW *win;
register int row, col;
register char *string;
{
register int n;
for (n=0; string[n]; n++)
if (row >= 0 && row < win -> _maxy && col+n >= 0 && col+n < win -> _maxx)
mvwaddch(win, row, col + n, string[n]);
}