DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T p

⟦6e2fa224c⟧ TextFile

    Length: 5228 (0x146c)
    Types: TextFile
    Names: »plot.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Vtrek/plot.c« 

TextFile

/* plot.c -- plot routines for visual star trek */

#include "vtrek.h"
#ifdef BSD
#include <strings.h>
#else
#include <string.h>
#endif

/* replot screen */
replot()
{
	clear ();
	plt_stat(ALL, 0);
	plt_srs(ALL, 0, 0);
	plt_dam(ALL, 0);
	plt_gal(ALL, 0, 0);
	mvaddstr (11, 17, "READOUT");
	mvaddstr (12, 17, "-------");
	plt_num(ALL);
}

/* plot status (upper left) */
plt_stat(op, item)
int op, item;
{
	static char *text[9] = {
	    "      Status", "      ------", "Stardate     :",
	    "Condition    :", "Quadrant     :", "Sector       :",
	    "Energy       :", "Photon torps :", "Shields      :"
	};
	static char *ctext[4] = {
	    "Green", "Yellow", "Red", "Docked"
	};
	int i, high, low;

	if (op & TEXT)
	    for (i = 0; i < 9; i++)
		mvaddstr (i + 1, 0, text[i]);

	if (op & (INFO | ELEMENT)) {
	    if (op & INFO) {
		low = STARDATE;
		high = SHIELDS;
	    }
	    else {
		low = item;
		high = item;
	    }

	    for (i = low; i <= high; i++) {
		switch (i) {
		case STARDATE :
		    (void) mvprintw (3, 15, "%-.1f", stardate);
		    break;
		case CONDITION :
		    (void) mvprintw (4, 15, "%-6s", ctext[condition]);
		    break;
		case QUADRANT :
		    (void) mvprintw (5, 15, "[%d,%d]", xquad + 1, yquad + 1);
		    break;
		case SECTOR :
		    (void) mvprintw (6, 15, "[%d,%d]", xsect + 1, ysect + 1);
		    break;
		case ENERGY :
		    (void) mvprintw (7, 15, "%-4d", energy);
		    break;
		case TORPS :
		    (void) mvprintw (8, 15, "%-2d", torps);
		    break;
		case SHIELDS :
		    (void) mvprintw (9, 15, "%-4d", shields);
		    break;
		}
	    }
	}
}

/* plot short range scan */
plt_srs(op, xs, ys)
int op, xs, ys;
{
	static char *htext = "-1--2--3--4--5--6--7--8-";
	static char *stext[6] = {
	    "   ", "<K>", "<S>", " * ", "???", " + "
	};
	int i, j;

	if (op & TEXT) {
	    mvaddstr (0, 27, htext);
	    for (i = 1; i < 9; i++) {
		(void) mvprintw (i, 26, "%d", i);
		(void) mvprintw (i, 51, "%d", i);
	    }
	    mvaddstr (9, 27, htext);
	}

	(void) strcpy(stext[PLAYER], playership);

	if (op & INFO) {
	    for (i = 0; i < 8; i++) {
		move (i + 1, 27);
		for (j = 0; j < 8; j++)
		    (void) printw ("%s", stext[(damage[SRS] <= 0) ? EMPTY : quadrant[j][i]]);
	    }
	}
	else if (op & ELEMENT) {
	    (void) mvprintw (ys + 1, 27 + 3 * xs, "%s", stext[(damage[SRS] <= 0) ? EMPTY : quadrant[xs][ys]]);
	}
}

/* plot damage info */
plt_dam(op, item)
int op, item;
{
	static char *text[10] = {
	    "    Damage Report", "    -------------",
	    "Warp engines    :", "S.R. sensors    :", "L.R. sensors    :",
	    "Phaser control  :", "Damage control  :", "Defense control :",
	    "Computer        :", "Photon tubes    :"
	};
	int i;

	if (op & TEXT)
	    for (i = 0; i < 10; i++)
		mvaddstr (i, 55, text[i]);

	if (op & INFO)
	    for (i = 0; i < 8; i++) {
		move (i + 2, 73);
		if (damage[DAMAGE] <= 0)
		    (void) printw ("    ");
		else
		    (void) printw ("%4d", damage[i]);
	    }
	else if (op & ELEMENT) {
	    move (item + 2, 73);
	    if (damage[DAMAGE] <= 0)
		(void) printw ("    ");
	    else
		(void) printw ("%4d", damage[item]);
	}
}

/* plot galaxy map */
plt_gal(op, xq, yq)
int op, xq, yq;
{
	static char *htext = "-1- -2- -3- -4- -5- -6- -7- -8-";
	int i, j, fedquad;

	if (op & TEXT) {
	    mvaddstr (12, 46, htext);
	    for (i = 1; i < 9; i++) {
		(void) mvprintw (i + 12, 44, "%d:", i);
		for (j = 0; j < 7; j++)
		    mvaddch (i + 12, 49 + (j << 2), ':');
		(void) mvprintw (i + 12, 77, ":%d", i);
	    }
	    mvaddstr (21, 46, htext);
	}

	if (op & INFO) {
	    for (i = 0; i < 8; i++)
		for (j = 0; j < 8; j++) {
		    move (i + 13, 46 + (j << 2));
		    if (damage[COMPUTER] <= 0 || !galaxy[j][i].known)
			(void) printw ("   ");
		    else
			(void) printw ("%01d%01d%01d", galaxy[j][i].nkling, galaxy[j][i].nbase,
			    galaxy[j][i].nstar);
		}
	    mvaddch (yquad + 13, 45 + (xquad << 2), '[');
	    mvaddch (yquad + 13, 49 + (xquad << 2), ']');
	}
	else if (op & ELEMENT) {
	    move (yq + 13, 45 + (xq << 2));
	    fedquad = (xq == xquad && yq == yquad);
	    addch (fedquad ? '[' : ':');
	    if (damage[COMPUTER] <= 0)
		(void) printw ("   ");
	    else
		(void) printw ("%01d%01d%01d", galaxy[xq][yq].nkling, galaxy[xq][yq].nbase, galaxy[xq][yq].nstar);
	    addch (fedquad ? ']' : ':');
	}
}

/* plot number of star bases & klingons */
plt_num(op)
int op;
{
	float kf;

	if (op & TEXT) {
	    mvaddstr (22, 46, "Base stars = ");
	    mvaddstr (22, 62, "Klingons = ");
	    mvaddstr (23, 53, "Kill Factor = ");
	}

	if (op & INFO) {
	    (void) mvprintw (22, 58, " %d", numbases);
	    (void) mvprintw (22, 72, " %d/%d  ", numkling, begkling);
	    move (23, 67);
	    if (begdate != stardate)
		kf = (begkling - numkling) / (stardate - begdate);
	    else
		kf = 0.0;
	    (void) printw ("%5.3f  ", kf);
	}
}

/* change readout */
readout(op, str)
int op;
char *str;
{
	int i, j;

	switch (op) {

	case CLEAR :		/* clear readout */
	    for (i = 14; i <= 13 + rolines; i++) {
		move (i-1, 0);
		for (j = 0; j < 44; j++)
		    addch (' ');
	    }
	    rolines = 0;
	    break;

	case ADDLINE :		/* add line to readout */
	    if (rolines >= 10)
		readout(CLEAR, (char *) 0);
	    (void) mvprintw (13 + rolines, 0, "%-.44s", str);
	    rolines++;
	    break;
	}
}