pfuetz@agd.fhg.de (02/26/91)
Submitted-by: pfuetz@agd.fhg.de Posting-number: Volume 11, Issue 100 Archive-name: xstrek/part14 #!/bin/sh # To unshare, sh or unshar this file echo xstrek/strek_prune_db.c 1>&2 sed -e 's/^X//' > xstrek/strek_prune_db.c <<'E!O!F! xstrek/strek_prune_db.c' X/* strek_prune_db.f -- translated by f2c (version of 19 December 1990 16:50:21). X You must link the resulting object file with the libraries: X -lF77 -lI77 -lm -lc (in that order) X*/ X X#include "f2c.h" X X/* Table of constant values */ X Xstatic integer c__1 = 1; X X/* Main program */ MAIN__() X{ X /* System generated locals */ X integer i__1; X olist o__1; X cllist cl__1; X X /* Builtin functions */ X integer f_open(), s_rdue(), do_uio(), e_rdue(), s_cmp(), s_wdue(), e_wdue( X ), f_clos(); X /* Subroutine */ int s_stop(); X X /* Local variables */ X static real year; X static char key_file__[256*1000]; X static integer num_kept__, ship_retired__[1000], i, j; X static real check; X static shortint clock[6]; X static char nick_name__[10*1000], capt_name__[10*1000], ship_name__[30* X 1000]; X static integer month; X static char user_name__[10*1000]; X static integer cum_score__[1000], num_lines__, ship_avail__[3000] /* X was [1000][3] */; X extern /* Subroutine */ int caldecodelocaltime_(); X static integer last_score__[1000]; X X /* Fortran I/O blocks */ X static cilist io___2 = { 0, 1, 0, 0, 1 }; X static cilist io___5 = { 0, 1, 0, 0, 0 }; X static cilist io___20 = { 0, 1, 0, 0, 0 }; X static cilist io___21 = { 0, 1, 0, 0, 0 }; X static cilist io___22 = { 0, 1, 0, 0, 1 }; X X X X/* ******************************************************************* X*/ X/* ***** ***** X*/ X/* ***** STAR TREK VERSION 3.0 ***** X*/ X/* ***** ***** X*/ X/* ***** written by ***** X*/ X/* ***** ***** X*/ X/* ***** Justin S. Revenaugh ***** X*/ X/* ***** ***** X*/ X/* ***** 7/87 ***** X*/ X/* ***** ***** X*/ X/* ***** Massachussetts Institute of Technology ***** X*/ X/* ***** Department of Earth, Atmospheric and Planetary Science ***** X*/ X/* ***** ***** X*/ X/* ******************************************************************* X*/ X X/* STREK_PRUNE_INFO helps weed out retired or unused ships from the */ X/* ship's registry (STREK_INFO). Used occasionally it should prevent */ X X/* this file from growing too huge. */ X X/* version 1 */ X/* -jsr 8/85 */ X X X/* get local date */ X X caldecodelocaltime_(clock); X X/* open up file and read num_lines */ X X o__1.oerr = 0; X o__1.ounit = 1; X o__1.ofnmlen = 30; X o__1.ofnm = "/usr/lib/X11/xstrek/strek_info"; X o__1.orl = 1000; X o__1.osta = 0; X o__1.oacc = "direct"; X o__1.ofm = "unformatted"; X o__1.oblnk = 0; X f_open(&o__1); X s_rdue(&io___2); X do_uio(&c__1, (char *)&num_lines__, (ftnlen)sizeof(integer)); X e_rdue(); X i__1 = num_lines__; X for (j = 1; j <= i__1; ++j) { X io___5.cirec = j + 1; X s_rdue(&io___5); X do_uio(&c__1, ship_name__ + (j - 1) * 30, 30L); X do_uio(&c__1, user_name__ + (j - 1) * 10, 10L); X do_uio(&c__1, capt_name__ + (j - 1) * 10, 10L); X do_uio(&c__1, nick_name__ + (j - 1) * 10, 10L); X do_uio(&c__1, key_file__ + (j - 1 << 8), 256L); X for (i = 1; i <= 3; ++i) { X do_uio(&c__1, (char *)&ship_avail__[j + i * 1000 - 1001], (ftnlen) X sizeof(integer)); X } X do_uio(&c__1, (char *)&last_score__[j - 1], (ftnlen)sizeof(integer)); X do_uio(&c__1, (char *)&cum_score__[j - 1], (ftnlen)sizeof(integer)); X do_uio(&c__1, (char *)&ship_retired__[j - 1], (ftnlen)sizeof(integer)) X ; X e_rdue(); X/* L10: */ X } X num_kept__ = 0; X i__1 = num_lines__; X for (j = 1; j <= i__1; ++j) { X if (ship_retired__[j - 1] != 1) { X check = (real) (clock[1] - 2); X year = (real) (clock[0] - 1); X month = clock[1] - 10; X if (ship_avail__[j - 1] >= clock[0] && (real) ship_avail__[j + X 999] > check || (real) ship_avail__[j - 1] == year && X month > 0) { X if (s_cmp(ship_name__ + (j - 1) * 30, " ", 30L, 1L) != 0) { X ++num_kept__; X io___20.cirec = num_kept__ + 1; X s_wdue(&io___20); X do_uio(&c__1, ship_name__ + (j - 1) * 30, 30L); X do_uio(&c__1, user_name__ + (j - 1) * 10, 10L); X do_uio(&c__1, capt_name__ + (j - 1) * 10, 10L); X do_uio(&c__1, nick_name__ + (j - 1) * 10, 10L); X do_uio(&c__1, key_file__ + (j - 1 << 8), 256L); X for (i = 1; i <= 3; ++i) { X do_uio(&c__1, (char *)&ship_avail__[j + i * 1000 - X 1001], (ftnlen)sizeof(integer)); X } X do_uio(&c__1, (char *)&last_score__[j - 1], (ftnlen) X sizeof(integer)); X do_uio(&c__1, (char *)&cum_score__[j - 1], (ftnlen)sizeof( X integer)); X do_uio(&c__1, (char *)&ship_retired__[j - 1], (ftnlen) X sizeof(integer)); X e_wdue(); X } X } X } X/* L20: */ X } X X/* erase all former ships */ X X i__1 = num_lines__ + 1; X for (j = num_kept__ + 2; j <= i__1; ++j) { X io___21.cirec = j; X s_wdue(&io___21); X e_wdue(); X/* L30: */ X } X X/* rewrite the number of ships in the registry */ X X s_wdue(&io___22); X do_uio(&c__1, (char *)&num_kept__, (ftnlen)sizeof(integer)); X e_wdue(); X cl__1.cerr = 0; X cl__1.cunit = 1; X cl__1.csta = 0; X f_clos(&cl__1); X s_stop("", 0L); X} /* MAIN__ */ X X/* Main program alias */ int strek_prune_info__ () { MAIN__ (); } E!O!F! xstrek/strek_prune_db.c echo xstrek/strek_random_subs.c 1>&2 sed -e 's/^X//' > xstrek/strek_random_subs.c <<'E!O!F! xstrek/strek_random_subs.c' X/* strek_random_subs.f -- translated by f2c (version of 19 December 1990 16:50:21). X You must link the resulting object file with the libraries: X -lF77 -lI77 -lm -lc (in that order) X*/ X X#include "f2c.h" X X/* Table of constant values */ X Xstatic integer c__1 = 1; Xstatic integer c__3 = 3; X X/* Subroutine */ int strek_assess_damage__(d_pct__, damage, scan, tract, X phase, energy, seed) Xreal *d_pct__, *damage; Xlogical *scan, *tract, *phase; Xreal *energy, *seed; X{ X extern /* Subroutine */ int rand_(); X static integer j; X X X/* ******************************************************************* X*/ X/* ***** ***** X*/ X/* ***** STAR TREK VERSION 3.0 ***** X*/ X/* ***** ***** X*/ X/* ***** written by ***** X*/ X/* ***** ***** X*/ X/* ***** Justin S. Revenaugh ***** X*/ X/* ***** ***** X*/ X/* ***** 7/87 ***** X*/ X/* ***** ***** X*/ X/* ***** Massachussetts Institute of Technology ***** X*/ X/* ***** Department of Earth, Atmospheric and Planetary Science ***** X*/ X/* ***** ***** X*/ X/* ******************************************************************* X*/ X X/* STREK_ASSESS_DAMAGE assesses enemy damage done to the player's */ X/* ship. If a damage percent reaches 100 (i.e. d_pct = 0.0) then */ X/* the associated function (if any) is deactivated. */ X X X X/* adjust energy */ X X /* Parameter adjustments */ X --d_pct__; X X /* Function Body */ X if (*damage > (float)0.) { X *energy -= *damage / (float)10.; X X/* apply damage */ X X for (j = 1; j <= 6; ++j) { X rand_(seed); X d_pct__[j] -= *seed * *damage * (float).0025; X if (d_pct__[j] < (float)0.) { X d_pct__[j] = (float)0.; X } X/* L10: */ X } X X/* check for function loss */ X X if (d_pct__[3] == (float)0.) { X *phase = FALSE_; X } X if (d_pct__[5] == (float)0.) { X *scan = FALSE_; X } X if (d_pct__[6] == (float)0.) { X *tract = FALSE_; X } X *damage = (float)0.; X } X return 0; X} /* strek_assess_damage__ */ X X/* Subroutine */ int strek_photon_damage__(distance, damage, seed, type) Xreal *distance, *damage, *seed; Xinteger *type; X{ X /* Builtin functions */ X double sqrt(); X X /* Local variables */ X extern /* Subroutine */ int rand_(); X static real mult, t1; X X X/* STREK_PHOTON_DAMAGE calculates the damage do to anyone's */ X/* photons hitting anyone. */ X X/* version 1 */ X/* -jsr 8/85 */ X X X/* using distance figure damage. Falls off as 1/sqrt(distance) */ X/* instead as 1/distance (which is physically correct, but destroys */ X/* game balance). Type is the rating of damage (mild - severe). */ X X rand_(seed); X if (*seed < (float).8) { X mult = (float).8; X } else { X mult = *seed; X } X t1 = (float)100. / sqrt(sqrt(*distance) + (float)3.) * mult; X *damage = t1 + *damage; X if (t1 < (float)5.) { X *type = 1; X } X if (t1 >= (float)5. && t1 < (float)15.) { X *type = 2; X } X if (t1 >= (float)15.) { X *type = 3; X } X return 0; X} /* strek_photon_damage__ */ X X/* Subroutine */ int strek_phaser_damage__(range, damage, seed, target) Xreal *range, *damage, *seed; Xlogical *target; X{ X /* Initialized data */ X X static char message[80*3+1] = "Ship hit by enemy phaser fire. \ X \ X \ X "; X static char text[80+1] = "Repair parties report that the damage was \ X "; X static char dam_rating__[10*3+1] = "light moderate heavy "; X X /* System generated locals */ X real r__1, r__2; X X /* Builtin functions */ X double sqrt(); X integer s_wsfi(), do_fio(), e_wsfi(); X X /* Local variables */ X extern /* Subroutine */ int rand_(); X static integer type; X static real t1, t2, t3, t4; X extern /* Subroutine */ int strek_message__(); X X /* Fortran I/O blocks */ X static icilist io___12 = { 0, message+160, 0, "(a42, a10)", 80, 1 }; X X X X/* STREK_PHASER_DAMAGE computes klingon phaser damage */ X X/* version 1 */ X/* -jsr 8/85 */ X X X/* figure damage */ X X t4 = (float)0.; X rand_(seed); X if (*seed <= (float)80.) { X rand_(seed); X/* Computing MAX */ X r__1 = (float)10., r__2 = sqrt(*range); X t1 = dmax(r__1,r__2); X t2 = (float)15. - t1 * (float).075; X t3 = *seed * (float).2 + (float).8; X t4 = dmax((float)0.,t2) * t3; X *damage += t4; X } X X/* write damage message */ X X if (*target) { X type = 1; X if (t4 < (float)5.) { X type = 1; X } X if (t4 >= (float)5. && t4 < (float)15.) { X type = 2; X } X if (t4 >= (float)15.) { X type = 3; X } X s_wsfi(&io___12); X do_fio(&c__1, text, 80L); X do_fio(&c__1, dam_rating__ + (type - 1) * 10, 10L); X e_wsfi(); X strek_message__(message, &c__3, 80L); X } X return 0; X} /* strek_phaser_damage__ */ X X/* Subroutine */ int strek_phaser_fire__(range, seed, damage, type) Xreal *range, *seed, *damage; Xinteger *type; X{ X /* System generated locals */ X real r__1, r__2; X X /* Builtin functions */ X double sqrt(); X X /* Local variables */ X extern /* Subroutine */ int rand_(); X static real t1, t2, t3; X X X/* STREK_PHASER_FIRE evaluates the damage done by the players */ X/* phasers to all other objects. */ X X/* version 1 */ X/* - jsr 8/85 */ X X X rand_(seed); X if (*seed <= (float)80.) { X rand_(seed); X t3 = *seed * (float).2 + (float).8; X/* Computing MAX */ X r__1 = (float)10., r__2 = sqrt(*range); X t1 = dmax(r__1,r__2); X t2 = (float)25. - t1 * (float).075; X t2 = dmax((float)0.,t2) * t3; X *damage += t2; X } X if (t2 < (float)5.) { X *type = 1; X } X if (t2 >= (float)5. && t2 < (float)15.) { X *type = 2; X } X if (t2 >= (float)15.) { X *type = 3; X } X return 0; X} /* strek_phaser_fire__ */ X E!O!F! xstrek/strek_random_subs.c echo xstrek/strek_ships_subs.c 1>&2 sed -e 's/^X//' > xstrek/strek_ships_subs.c <<'E!O!F! xstrek/strek_ships_subs.c' X/* strek_ships_subs.f -- translated by f2c (version of 19 December 1990 16:50:21). X You must link the resulting object file with the libraries: X -lF77 -lI77 -lm -lc (in that order) X*/ X X#include "f2c.h" X X/* Table of constant values */ X Xstatic integer c__10 = 10; Xstatic integer c__6 = 6; Xstatic integer c__15 = 15; Xstatic integer c__5 = 5; Xstatic integer c__12 = 12; Xstatic integer c__9 = 9; Xstatic integer c__8 = 8; Xstatic integer c__14 = 14; X X/* Subroutine */ int strek_nemian__(xc, yc, zc, xs, ys, zs, csa, ssa, csp, X ssp, dir, sa, ca, sp, cp) Xreal *xc, *yc, *zc, *xs, *ys, *zs, *csa, *ssa, *csp, *ssp; Xlogical *dir; Xreal *sa, *ca, *sp, *cp; X{ X /* Initialized data */ X X static real x1[10] = { (float)2.5,(float)2.5,(float)2.5,(float)-2.5,( X float)-2.5,(float)-2.5,(float)-2.5,(float)2.5,(float)2.5,(float) X -2.5 }; X static real y1[10] = { (float)-5.,(float)-7.5,(float)3.5,(float)3.5,( X float)-7.5,(float)-5.,(float)2.5,(float)2.5,(float)-5.,(float)-5. X }; X static real z1[10] = { (float)-2.5,(float)2.5,(float)2.5,(float)2.5,( X float)2.5,(float)-2.5,(float)-2.5,(float)-2.5,(float)-2.5,(float) X -2.5 }; X static real x2[7] = { (float)-2.5,(float)2.5,(float)-2.5,(float)-2.5,( X float)2.5,(float)2.5,(float)0. }; X static real y2[7] = { (float)-7.5,(float)-7.5,(float)3.5,(float)2.5,( X float)3.5,(float)2.5,(float)5. }; X static real z2[7] = { (float)2.5,(float)2.5,(float)2.5,(float)-2.5,(float) X 2.5,(float)-2.5,(float)0. }; X X extern /* Subroutine */ int gprpolyline_(); X static shortint x_pt__[10], y_pt__[10], x_pt1__[6], y_pt1__[6]; X extern /* Subroutine */ int gprmultiline_(); X static integer j, istat; X extern /* Subroutine */ int gprcircle_(); X static real r1[10], r2[10], t1[10], t2[10], t3[10], t4[10], t5[10], t6[10] X , r3[10], r4[10], r5[10], r6[10]; X static shortint center[2], radius; X extern /* Subroutine */ int gprmove_(); X X X X/* ******************************************************************* X*/ X/* ***** ***** X*/ X/* ***** STAR TREK VERSION 3.0 ***** X*/ X/* ***** ***** X*/ X/* ***** written by ***** X*/ X/* ***** ***** X*/ X/* ***** Justin S. Revenaugh ***** X*/ X/* ***** ***** X*/ X/* ***** 7/87 ***** X*/ X/* ***** ***** X*/ X/* ***** Massachussetts Institute of Technology ***** X*/ X/* ***** Department of Earth, Atmospheric and Planetary Science ***** X*/ X/* ***** ***** X*/ X/* ******************************************************************* X*/ X/* STREK_NEMIAN draws a nemian freighter in 3-d at xs, ys, zs as */ X/* seen from xc, yc, zc. */ X X X/* % include '/sys/ins/base.ins.ftn' */ X/* % include '/sys/ins/gpr.ins.ftn' */ X X X/* saves and data for ship config */ X X X/* if dir then rotate ship into galatic coordinates */ X X if (*dir) { X X/* rotate the points about the local position */ X X for (j = 1; j <= 10; ++j) { X t1[j - 1] = x1[j - 1] * *ca - y1[j - 1] * *sa * *cp + z1[j - 1] * X *sa * *sp + *xs; X t2[j - 1] = x1[j - 1] * *sa + y1[j - 1] * *ca * *cp - z1[j - 1] * X *ca * *sp + *ys; X t3[j - 1] = y1[j - 1] * *sp + z1[j - 1] * *cp + *zs; X/* L10: */ X } X for (j = 1; j <= 7; ++j) { X t4[j - 1] = x2[j - 1] * *ca - y2[j - 1] * *sa * *cp + z2[j - 1] * X *sa * *sp + *xs; X t5[j - 1] = x2[j - 1] * *sa + y2[j - 1] * *ca * *cp - z2[j - 1] * X *ca * *sp + *ys; X t6[j - 1] = y2[j - 1] * *sp + z2[j - 1] * *cp + *zs; X/* L20: */ X } X X/* form offsets from player ship and rotate them about it */ X X for (j = 1; j <= 10; ++j) { X t1[j - 1] -= *xc; X t2[j - 1] -= *yc; X t3[j - 1] -= *zc; X r1[j - 1] = t1[j - 1] * *csa + t2[j - 1] * *ssa; X r2[j - 1] = -(doublereal)t1[j - 1] * *ssa * *csp + t2[j - 1] * * X csa * *csp + t3[j - 1] * *ssp; X r3[j - 1] = t1[j - 1] * *ssa * *ssp - t2[j - 1] * *csa * *ssp + X t3[j - 1] * *csp; X if (r2[j - 1] < (float)1.) { X r2[j - 1] = (float)1.; X } X x_pt__[j - 1] = r1[j - 1] / r2[j - 1] * (float)350. + (float)450.; X X y_pt__[j - 1] = (float)400. - r3[j - 1] / r2[j - 1] * (float)350.; X X/* L30: */ X } X for (j = 1; j <= 7; ++j) { X t4[j - 1] -= *xc; X t5[j - 1] -= *yc; X t6[j - 1] -= *zc; X r4[j - 1] = t4[j - 1] * *csa + t5[j - 1] * *ssa; X r5[j - 1] = -(doublereal)t4[j - 1] * *ssa * *csp + t5[j - 1] * * X csa * *csp + t6[j - 1] * *ssp; X r6[j - 1] = t4[j - 1] * *ssa * *ssp - t5[j - 1] * *csa * *ssp + X t6[j - 1] * *csp; X if (r5[j - 1] < (float)1.) { X r5[j - 1] = (float)1.; X } X if (j != 7) { X x_pt1__[j - 1] = r4[j - 1] / r5[j - 1] * (float)350. + (float) X 450.; X y_pt1__[j - 1] = (float)400. - r6[j - 1] / r5[j - 1] * (float) X 350.; X } else { X center[0] = r4[j - 1] / r5[j - 1] * (float)350. + (float)450.; X X center[1] = (float)400. - r6[j - 1] / r5[j - 1] * (float)350.; X X } X/* L40: */ X } X radius = (float)2.5 / r5[6] * (float)350. + (float).5; X X/* draw the object */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__10, &istat); X gprmultiline_(x_pt1__, y_pt1__, &c__6, &istat); X if (radius > 0) { X gprcircle_(center, &radius, &istat); X } X } else { X X/* erase old lines by drawing over them in black */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__10, &istat); X gprmultiline_(x_pt1__, y_pt1__, &c__6, &istat); X if (radius > 0) { X gprcircle_(center, &radius, &istat); X } X } X return 0; X} /* strek_nemian__ */ X X/* Subroutine */ int strek_klingon__(xc, yc, zc, xs, ys, zs, csa, ssa, csp, X ssp, dir, pcen, sa, ca, sp, cp) Xreal *xc, *yc, *zc, *xs, *ys, *zs, *csa, *ssa, *csp, *ssp; Xlogical *dir; Xshortint *pcen; Xreal *sa, *ca, *sp, *cp; X{ X /* Initialized data */ X X static real x1[15] = { (float).75,(float)1.,(float)6.5,(float)7.5,(float) X 7.5,(float)6.5,(float)6.5,(float)0.,(float)-6.5,(float)-6.5,( X float)-7.5,(float)-7.5,(float)-6.5,(float)-1.,(float)-.75 }; X static real y1[15] = { (float)6.,(float)3.,(float)0.,(float)0.,(float) X -7.5,(float)-7.5,(float)-1.5,(float)-3.5,(float)-1.5,(float)-7.5,( X float)-7.5,(float)0.,(float)0.,(float)3.,(float)6. }; X static real z1[15] = { (float)1.,(float).8,(float).1,(float).1,(float).1,( X float).1,(float).1,(float)1.,(float).1,(float).1,(float).1,(float) X .1,(float).1,(float).8,(float)1. }; X static real x3[5] = { (float)6.5,(float)6.5,(float)7.5,(float)7.5,(float) X 6.5 }; X static real y3[5] = { (float)0.,(float)-7.5,(float)-7.5,(float)0.,(float) X 0. }; X static real z3[5] = { (float)-2.,(float)-2.,(float)-2.,(float)-2.,(float) X -2. }; X static real x4[5] = { (float)-6.5,(float)-6.5,(float)-7.5,(float)-7.5,( X float)-6.5 }; X static real y4[5] = { (float)0.,(float)-7.5,(float)-7.5,(float)0.,(float) X 0. }; X static real z4[5] = { (float)-2.,(float)-2.,(float)-2.,(float)-2.,(float) X -2. }; X static real x5[13] = { (float)7.5,(float)7.5,(float)7.5,(float)7.5,(float) X 6.5,(float)6.5,(float)-7.5,(float)-7.5,(float)-7.5,(float)-7.5,( X float)-6.5,(float)-6.5,(float)0. }; X static real y5[13] = { (float)0.,(float)0.,(float)-7.5,(float)-7.5,(float) X -7.5,(float)-7.5,(float)0.,(float)0.,(float)-7.5,(float)-7.5,( X float)-7.5,(float)-7.5,(float)7.5 }; X static real z5[13] = { (float).1,(float)-2.,(float).1,(float)-2.,(float) X .1,(float)-2.,(float).1,(float)-2.,(float).1,(float)-2.,(float).1, X (float)-2.,(float)1. }; X X extern /* Subroutine */ int gprpolyline_(); X static shortint x_pt__[15], y_pt__[15], x3_pt__[5], y3_pt__[5], x4_pt__[5] X , y4_pt__[5], x5_pt__[12], y5_pt__[12]; X extern /* Subroutine */ int gprmultiline_(); X static integer j, istat; X extern /* Subroutine */ int gprcircle_(); X static real r1[15], r2[15], t1[15], t2[15], t3[15], t7[15], t8[15], t9[15] X , r3[15], r7[15], r8[15], r9[15], t10[15], t11[15], t12[15], t13[ X 15], t14[15], t15[15], r10[15], r11[15], r12[15], r13[15], r14[15] X , r15[15]; X static shortint center[2], radius; X extern /* Subroutine */ int gprmove_(); X X X/* STREK_KLINGON_1 draws a klingon in 3-d at xs, ys, zs as */ X/* seen from xc, yc, zc. */ X X/* version 1 */ X/* -jsr 8/85 */ X X/* % include '/sys/ins/base.ins.ftn' */ X/* % include '/sys/ins/gpr.ins.ftn' */ X X X/* saves and data for ship config */ X X /* Parameter adjustments */ X --pcen; X X /* Function Body */ X X/* if dir then rotate into galatic coords */ X X if (*dir) { X X/* rotate the points about the local position */ X X for (j = 1; j <= 15; ++j) { X t1[j - 1] = x1[j - 1] * *ca - y1[j - 1] * *sa * *cp + z1[j - 1] * X *sa * *sp + *xs; X t2[j - 1] = x1[j - 1] * *sa + y1[j - 1] * *ca * *cp - z1[j - 1] * X *ca * *sp + *ys; X t3[j - 1] = y1[j - 1] * *sp + z1[j - 1] * *cp + *zs; X/* L10: */ X } X for (j = 1; j <= 5; ++j) { X t7[j - 1] = x3[j - 1] * *ca - y3[j - 1] * *sa * *cp + z3[j - 1] * X *sa * *sp + *xs; X t8[j - 1] = x3[j - 1] * *sa + y3[j - 1] * *ca * *cp - z3[j - 1] * X *ca * *sp + *ys; X t9[j - 1] = y3[j - 1] * *sp + z3[j - 1] * *cp + *zs; X t10[j - 1] = x4[j - 1] * *ca - y4[j - 1] * *sa * *cp + z4[j - 1] * X *sa * *sp + *xs; X t11[j - 1] = x4[j - 1] * *sa + y4[j - 1] * *ca * *cp - z4[j - 1] * X *ca * *sp + *ys; X t12[j - 1] = y4[j - 1] * *sp + z4[j - 1] * *cp + *zs; X/* L20: */ X } X for (j = 1; j <= 13; ++j) { X t13[j - 1] = x5[j - 1] * *ca - y5[j - 1] * *sa * *cp + z5[j - 1] * X *sa * *sp + *xs; X t14[j - 1] = x5[j - 1] * *sa + y5[j - 1] * *ca * *cp - z5[j - 1] * X *ca * *sp + *ys; X t15[j - 1] = y5[j - 1] * *sp + z5[j - 1] * *cp + *zs; X/* L30: */ X } X X/* form offsets from player ship and rotate them about it */ X X for (j = 1; j <= 15; ++j) { X t1[j - 1] -= *xc; X t2[j - 1] -= *yc; X t3[j - 1] -= *zc; X r1[j - 1] = t1[j - 1] * *csa + t2[j - 1] * *ssa; X r2[j - 1] = -(doublereal)t1[j - 1] * *ssa * *csp + t2[j - 1] * * X csa * *csp + t3[j - 1] * *ssp; X r3[j - 1] = t1[j - 1] * *ssa * *ssp - t2[j - 1] * *csa * *ssp + X t3[j - 1] * *csp; X if (r2[j - 1] < (float)1.) { X r2[j - 1] = (float)1.; X } X x_pt__[j - 1] = r1[j - 1] / r2[j - 1] * (float)350. + (float)450.; X X y_pt__[j - 1] = (float)400. - r3[j - 1] / r2[j - 1] * (float)350.; X X/* L40: */ X } X for (j = 1; j <= 5; ++j) { X t7[j - 1] -= *xc; X t8[j - 1] -= *yc; X t9[j - 1] -= *zc; X r7[j - 1] = t7[j - 1] * *csa + t8[j - 1] * *ssa; X r8[j - 1] = -(doublereal)t7[j - 1] * *ssa * *csp + t8[j - 1] * * X csa * *csp + t9[j - 1] * *ssp; X r9[j - 1] = t7[j - 1] * *ssa * *ssp - t8[j - 1] * *csa * *ssp + X t9[j - 1] * *csp; X if (r8[j - 1] < (float)1.) { X r8[j - 1] = (float)1.; X } X x3_pt__[j - 1] = r7[j - 1] / r8[j - 1] * (float)350. + (float) X 450.; X y3_pt__[j - 1] = (float)400. - r9[j - 1] / r8[j - 1] * (float) X 350.; X t10[j - 1] -= *xc; X t11[j - 1] -= *yc; X t12[j - 1] -= *zc; X r10[j - 1] = t10[j - 1] * *csa + t11[j - 1] * *ssa; X r11[j - 1] = -(doublereal)t10[j - 1] * *ssa * *csp + t11[j - 1] * X *csa * *csp + t12[j - 1] * *ssp; X r12[j - 1] = t10[j - 1] * *ssa * *ssp - t11[j - 1] * *csa * *ssp X + t12[j - 1] * *csp; X if (r11[j - 1] < (float)1.) { X r11[j - 1] = (float)1.; X } X x4_pt__[j - 1] = r10[j - 1] / r11[j - 1] * (float)350. + (float) X 450.; X y4_pt__[j - 1] = (float)400. - r12[j - 1] / r11[j - 1] * (float) X 350.; X/* L50: */ X } X for (j = 1; j <= 13; ++j) { X t13[j - 1] -= *xc; X t14[j - 1] -= *yc; X t15[j - 1] -= *zc; X r13[j - 1] = t13[j - 1] * *csa + t14[j - 1] * *ssa; X r14[j - 1] = -(doublereal)t13[j - 1] * *ssa * *csp + t14[j - 1] * X *csa * *csp + t15[j - 1] * *ssp; X r15[j - 1] = t13[j - 1] * *ssa * *ssp - t14[j - 1] * *csa * *ssp X + t15[j - 1] * *csp; X if (r14[j - 1] < (float)1.) { X r14[j - 1] = (float)1.; X } X if (j == 13) { X center[0] = r13[j - 1] / r14[j - 1] * (float)350. + (float) X 450.; X center[1] = (float)400. - r15[j - 1] / r14[j - 1] * (float) X 350.; X pcen[1] = center[0]; X pcen[2] = center[1]; X } else { X x5_pt__[j - 1] = r13[j - 1] / r14[j - 1] * (float)350. + ( X float)450.; X y5_pt__[j - 1] = (float)400. - r15[j - 1] / r14[j - 1] * ( X float)350.; X } X/* L60: */ X } X radius = (float)1.5 / r14[12] * (float)350. + (float).5; X X/* draw the object */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__15, &istat); X gprmove_(x3_pt__, y3_pt__, &istat); X gprpolyline_(x3_pt__, y3_pt__, &c__5, &istat); X gprmove_(x4_pt__, y4_pt__, &istat); X gprpolyline_(x4_pt__, y4_pt__, &c__5, &istat); X gprmultiline_(x5_pt__, y5_pt__, &c__12, &istat); X if (radius > 0) { X gprcircle_(center, &radius, &istat); X } X } else { X X/* erase old lines by drawing over them in black */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__15, &istat); X gprmove_(x3_pt__, y3_pt__, &istat); X gprpolyline_(x3_pt__, y3_pt__, &c__5, &istat); X gprmove_(x4_pt__, y4_pt__, &istat); X gprpolyline_(x4_pt__, y4_pt__, &c__5, &istat); X gprmultiline_(x5_pt__, y5_pt__, &c__12, &istat); X if (radius > 0) { X gprcircle_(center, &radius, &istat); X } X } X return 0; X} /* strek_klingon__ */ X X/* Subroutine */ int strek_romulan_1__(xc, yc, zc, xs, ys, zs, csa, ssa, csp, X ssp, dir, sa, ca, sp, cp) Xreal *xc, *yc, *zc, *xs, *ys, *zs, *csa, *ssa, *csp, *ssp; Xlogical *dir; Xreal *sa, *ca, *sp, *cp; X{ X /* Initialized data */ X X static real x1[9] = { (float)6.5,(float)3.3,(float)0.,(float)-3.3,(float) X -6.5,(float)0.,(float)6.5,(float)0.,(float)-6.5 }; X static real y1[9] = { (float)-3.5,(float)3.,(float)5.,(float)3.,(float) X -3.5,(float)-5.,(float)-3.5,(float)-5.,(float)-3.5 }; X static real z1[9] = { (float)0.,(float)0.,(float)0.,(float)0.,(float)0.,( X float)1.5,(float)0.,(float)-1.5,(float)0. }; X static real x2[10] = { (float)0.,(float)0.,(float)3.3,(float)0.,(float) X -3.3,(float)0.,(float)0.,(float)0.,(float)7.5,(float)-7.5 }; X static real y2[10] = { (float)5.,(float)-5.,(float)3.,(float)0.,(float)3., X (float)0.,(float)-5.,(float)0.,(float)-3.5,(float)-3.5 }; X static real z2[10] = { (float)0.,(float)1.5,(float)0.,(float)-1.,(float) X 0.,(float)-1.,(float)-1.5,(float)-1.,(float)0.,(float)0. }; X X extern /* Subroutine */ int gprpolyline_(); X static shortint x_pt__[9], y_pt__[9], x_pt1__[8], y_pt1__[8]; X static integer i, j; X extern /* Subroutine */ int gprmultiline_(); X static integer istat; X extern /* Subroutine */ int gprcircle_(); X static real r1[10], r2[10], t1[10], t2[10], t3[10], t4[10], t5[10], t6[10] X , r3[10], r4[10], r5[10], r6[10]; X static shortint center[4] /* was [2][2] */, radius[2], xpt[2]; X extern /* Subroutine */ int gprmove_(); X X X/* STREK_ROMULAN_1 draws a romulan in 3-d at xs, ys, zs as */ X/* seen from xc, yc, zc. */ X X/* version 1 */ X/* -jsr 8/85 */ X X/* % include '/sys/ins/base.ins.ftn' */ X/* % include '/sys/ins/gpr.ins.ftn' */ X X X/* saves and data for ship config */ X X X/* if dir then rotate into galatic coords */ X X if (*dir) { X X/* rotate the points about the local position */ X X for (j = 1; j <= 9; ++j) { X t1[j - 1] = x1[j - 1] * *ca - y1[j - 1] * *sa * *cp + z1[j - 1] * X *sa * *sp + *xs; X t2[j - 1] = x1[j - 1] * *sa + y1[j - 1] * *ca * *cp - z1[j - 1] * X *ca * *sp + *ys; X t3[j - 1] = y1[j - 1] * *sp + z1[j - 1] * *cp + *zs; X/* L10: */ X } X for (j = 1; j <= 10; ++j) { X t4[j - 1] = x2[j - 1] * *ca - y2[j - 1] * *sa * *cp + z2[j - 1] * X *sa * *sp + *xs; X t5[j - 1] = x2[j - 1] * *sa + y2[j - 1] * *ca * *cp - z2[j - 1] * X *ca * *sp + *ys; X t6[j - 1] = y2[j - 1] * *sp + z2[j - 1] * *cp + *zs; X/* L20: */ X } X X/* form offsets from player ship and rotate them about it */ X X for (j = 1; j <= 9; ++j) { X t1[j - 1] -= *xc; X t2[j - 1] -= *yc; X t3[j - 1] -= *zc; X r1[j - 1] = t1[j - 1] * *csa + t2[j - 1] * *ssa; X r2[j - 1] = -(doublereal)t1[j - 1] * *ssa * *csp + t2[j - 1] * * X csa * *csp + t3[j - 1] * *ssp; X r3[j - 1] = t1[j - 1] * *ssa * *ssp - t2[j - 1] * *csa * *ssp + X t3[j - 1] * *csp; X if (r2[j - 1] < (float)1.) { X r2[j - 1] = (float)1.; X } X x_pt__[j - 1] = r1[j - 1] / r2[j - 1] * (float)350. + (float)450.; X X y_pt__[j - 1] = (float)400. - r3[j - 1] / r2[j - 1] * (float)350.; X X/* L30: */ X } X for (j = 1; j <= 10; ++j) { X t4[j - 1] -= *xc; X t5[j - 1] -= *yc; X t6[j - 1] -= *zc; X r4[j - 1] = t4[j - 1] * *csa + t5[j - 1] * *ssa; X r5[j - 1] = -(doublereal)t4[j - 1] * *ssa * *csp + t5[j - 1] * * X csa * *csp + t6[j - 1] * *ssp; X r6[j - 1] = t4[j - 1] * *ssa * *ssp - t5[j - 1] * *csa * *ssp + X t6[j - 1] * *csp; X if (r5[j - 1] < (float)1.) { X r5[j - 1] = (float)1.; X } X if (j <= 8) { X x_pt1__[j - 1] = r4[j - 1] / r5[j - 1] * (float)350. + (float) X 450.; X y_pt1__[j - 1] = (float)400. - r6[j - 1] / r5[j - 1] * (float) X 350.; X } else { X i = j - 8; X center[i - 1] = r4[j - 1] / r5[j - 1] * (float)350. + (float) X 450.; X center[i + 1] = (float)400. - r6[j - 1] / r5[j - 1] * (float) X 350.; X } X/* L40: */ X } X radius[0] = (float)1. / r5[8] * (float)350. + (float).5; X radius[1] = (float)1. / r5[9] * (float)350. + (float).5; X X/* draw the object */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__9, &istat); X gprmultiline_(x_pt1__, y_pt1__, &c__8, &istat); X for (j = 1; j <= 2; ++j) { X xpt[0] = center[j - 1]; X xpt[1] = center[j + 1]; X if (radius[j - 1] > 0) { X gprcircle_(xpt, &radius[j - 1], &istat); X } X/* L50: */ X } X } else { X X/* erase old lines by drawing over them in black */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__9, &istat); X gprmultiline_(x_pt1__, y_pt1__, &c__8, &istat); X for (j = 1; j <= 2; ++j) { X xpt[0] = center[j - 1]; X xpt[1] = center[j + 1]; X if (radius[j - 1] > 0) { X gprcircle_(xpt, &radius[j - 1], &istat); X } X/* L60: */ X } X } X return 0; X} /* strek_romulan_1__ */ X X/* Subroutine */ int strek_romulan_2__(xc, yc, zc, xs, ys, zs, csa, ssa, csp, X ssp, dir, sa, ca, sp, cp) Xreal *xc, *yc, *zc, *xs, *ys, *zs, *csa, *ssa, *csp, *ssp; Xlogical *dir; Xreal *sa, *ca, *sp, *cp; X{ X /* Initialized data */ X X static real x1[9] = { (float)6.5,(float)3.3,(float)0.,(float)-3.3,(float) X -6.5,(float)0.,(float)6.5,(float)0.,(float)-6.5 }; X static real y1[9] = { (float)-3.5,(float)3.,(float)5.,(float)3.,(float) X -3.5,(float)-5.,(float)-3.5,(float)-5.,(float)-3.5 }; X static real z1[9] = { (float)0.,(float)0.,(float)0.,(float)0.,(float)0.,( X float)1.5,(float)0.,(float)-1.5,(float)0. }; X static real x2[10] = { (float)0.,(float)0.,(float)3.3,(float)0.,(float) X -3.3,(float)0.,(float)0.,(float)0.,(float)7.5,(float)-7.5 }; X static real y2[10] = { (float)5.,(float)-5.,(float)3.,(float)0.,(float)3., X (float)0.,(float)-5.,(float)0.,(float)-3.5,(float)-3.5 }; X static real z2[10] = { (float)0.,(float)1.5,(float)0.,(float)-1.,(float) X 0.,(float)-1.,(float)-1.5,(float)-1.,(float)0.,(float)0. }; X X extern /* Subroutine */ int gprpolyline_(); X static shortint x_pt__[9], y_pt__[9], x_pt1__[8], y_pt1__[8]; X static integer i, j; X extern /* Subroutine */ int gprmultiline_(); X static integer istat; X extern /* Subroutine */ int gprcircle_(); X static real r1[10], r2[10], t1[10], t2[10], t3[10], t4[10], t5[10], t6[10] X , r3[10], r4[10], r5[10], r6[10]; X static shortint center[4] /* was [2][2] */, radius[2], xpt[2]; X extern /* Subroutine */ int gprmove_(); X X X/* STREK_ROMULAN_2 draws a romulan in 3-d at xs, ys, zs as */ X/* seen from xc, yc, zc. */ X X/* version 1 */ X/* -jsr 8/85 */ X X/* % include '/sys/ins/base.ins.ftn' */ X/* % include '/sys/ins/gpr.ins.ftn' */ X X X/* saves and data for ship config */ X X X/* if dir then rotate into galatic coords */ X X if (*dir) { X X/* rotate the points about the local position */ X X for (j = 1; j <= 9; ++j) { X t1[j - 1] = x1[j - 1] * *ca - y1[j - 1] * *sa * *cp + z1[j - 1] * X *sa * *sp + *xs; X t2[j - 1] = x1[j - 1] * *sa + y1[j - 1] * *ca * *cp - z1[j - 1] * X *ca * *sp + *ys; X t3[j - 1] = y1[j - 1] * *sp + z1[j - 1] * *cp + *zs; X/* L10: */ X } X for (j = 1; j <= 10; ++j) { X t4[j - 1] = x2[j - 1] * *ca - y2[j - 1] * *sa * *cp + z2[j - 1] * X *sa * *sp + *xs; X t5[j - 1] = x2[j - 1] * *sa + y2[j - 1] * *ca * *cp - z2[j - 1] * X *ca * *sp + *ys; X t6[j - 1] = y2[j - 1] * *sp + z2[j - 1] * *cp + *zs; X/* L20: */ X } X X/* form offsets from player ship and rotate them about it */ X X for (j = 1; j <= 9; ++j) { X t1[j - 1] -= *xc; X t2[j - 1] -= *yc; X t3[j - 1] -= *zc; X r1[j - 1] = t1[j - 1] * *csa + t2[j - 1] * *ssa; X r2[j - 1] = -(doublereal)t1[j - 1] * *ssa * *csp + t2[j - 1] * * X csa * *csp + t3[j - 1] * *ssp; X r3[j - 1] = t1[j - 1] * *ssa * *ssp - t2[j - 1] * *csa * *ssp + X t3[j - 1] * *csp; X if (r2[j - 1] < (float)1.) { X r2[j - 1] = (float)1.; X } X x_pt__[j - 1] = r1[j - 1] / r2[j - 1] * (float)350. + (float)450.; X X y_pt__[j - 1] = (float)400. - r3[j - 1] / r2[j - 1] * (float)350.; X X/* L30: */ X } X for (j = 1; j <= 10; ++j) { X t4[j - 1] -= *xc; X t5[j - 1] -= *yc; X t6[j - 1] -= *zc; X r4[j - 1] = t4[j - 1] * *csa + t5[j - 1] * *ssa; X r5[j - 1] = -(doublereal)t4[j - 1] * *ssa * *csp + t5[j - 1] * * X csa * *csp + t6[j - 1] * *ssp; X r6[j - 1] = t4[j - 1] * *ssa * *ssp - t5[j - 1] * *csa * *ssp + X t6[j - 1] * *csp; X if (r5[j - 1] < (float)1.) { X r5[j - 1] = (float)1.; X } X if (j <= 8) { X x_pt1__[j - 1] = r4[j - 1] / r5[j - 1] * (float)350. + (float) X 450.; X y_pt1__[j - 1] = (float)400. - r6[j - 1] / r5[j - 1] * (float) X 350.; X } else { X i = j - 8; X center[i - 1] = r4[j - 1] / r5[j - 1] * (float)350. + (float) X 450.; X center[i + 1] = (float)400. - r6[j - 1] / r5[j - 1] * (float) X 350.; X } X/* L40: */ X } X radius[0] = (float)1. / r5[8] * (float)350. + (float).5; X radius[1] = (float)1. / r5[9] * (float)350. + (float).5; X X/* draw the object */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__9, &istat); X gprmultiline_(x_pt1__, y_pt1__, &c__8, &istat); X for (j = 1; j <= 2; ++j) { X xpt[0] = center[j - 1]; X xpt[1] = center[j + 1]; X if (radius[j - 1] > 0) { X gprcircle_(xpt, &radius[j - 1], &istat); X } X/* L50: */ X } X } else { X X/* erase old lines by drawing over them in black */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__9, &istat); X gprmultiline_(x_pt1__, y_pt1__, &c__8, &istat); X for (j = 1; j <= 2; ++j) { X xpt[0] = center[j - 1]; X xpt[1] = center[j + 1]; X if (radius[j - 1] > 0) { X gprcircle_(xpt, &radius[j - 1], &istat); X } X/* L60: */ X } X } X return 0; X} /* strek_romulan_2__ */ X X/* Subroutine */ int strek_photon_1__(xc, yc, zc, xs, ys, zs, csa, ssa, csp, X ssp, dir) Xreal *xc, *yc, *zc, *xs, *ys, *zs, *csa, *ssa, *csp, *ssp; Xlogical *dir; X{ X /* Initialized data */ X X static real xp[8] = { (float)0.,(float)3.5,(float)-3.5,(float)0.,(float) X 0.,(float)-3.5,(float)3.5,(float)0. }; X static real yp[8] = { (float)3.,(float)-3.,(float)-3.,(float)3.,(float)0., X (float)-3.,(float)-3.,(float)0. }; X static real zp[8] = { (float)-2.6,(float)-2.6,(float)-2.6,(float)-2.6,( X float)2.6,(float)-2.6,(float)-2.6,(float)2.6 }; X static real sda = (float).0998; X static real sdp = (float).0998; X static real cda = (float).995; X static real cdp = (float).995; X static real ca = (float)1.; X static real cp = (float)1.; X static real sa = (float)0.; X static real sp = (float)0.; X X extern /* Subroutine */ int gprpolyline_(); X static real temp; X static shortint x_pt__[8], y_pt__[8]; X static integer j, istat; X static real t1[8], t2[8], t3[8], t4[8], t5[8], t6[8]; X extern /* Subroutine */ int gprmove_(); X X X/* STREK_PHOTON_1 draws an enemy photon similar to a player photon */ X/* (see strek_photon_4). */ X X/* version 1 */ X/* -jsr 8/85 */ X X/* % include '/sys/ins/base.ins.ftn' */ X/* % include '/sys/ins/gpr.ins.ftn' */ X X X/* data for photon config and saves */ X X if (*dir) { X temp = ca; X ca = ca * cda - sa * sda; X sa = sa * cda + sda * temp; X temp = cp; X cp = cp * cdp - sp * sdp; X sp = sp * cdp + sdp * temp; X X/* rotate the points about the local position into galatic coords X*/ X X for (j = 1; j <= 8; ++j) { X t1[j - 1] = xp[j - 1] * ca - yp[j - 1] * sa * cp + zp[j - 1] * sa X * sp + *xs; X t2[j - 1] = xp[j - 1] * sa + yp[j - 1] * ca * cp - zp[j - 1] * ca X * sp + *ys; X t3[j - 1] = yp[j - 1] * sp + zp[j - 1] * cp + *zs; X/* L10: */ X } X X/* form offsets from player ship and rotate them about it */ X X for (j = 1; j <= 8; ++j) { X t1[j - 1] -= *xc; X t2[j - 1] -= *yc; X t3[j - 1] -= *zc; X t4[j - 1] = t1[j - 1] * *csa + t2[j - 1] * *ssa; X t5[j - 1] = -(doublereal)t1[j - 1] * *ssa * *csp + t2[j - 1] * * X csa * *csp + t3[j - 1] * *ssp; X t6[j - 1] = t1[j - 1] * *ssa * *ssp - t2[j - 1] * *csa * *ssp + X t3[j - 1] * *csp; X if (t5[j - 1] < (float)1.) { X t5[j - 1] = (float)1.; X } X x_pt__[j - 1] = t4[j - 1] / t5[j - 1] * (float)350. + (float)450.; X X y_pt__[j - 1] = (float)400. - t6[j - 1] / t5[j - 1] * (float)350.; X X/* L20: */ X } X X/* draw the object */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__8, &istat); X } else { X X/* erase old lines by drawing over them in black */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__8, &istat); X } X return 0; X} /* strek_photon_1__ */ X X/* Subroutine */ int strek_photon_2__(xc, yc, zc, xs, ys, zs, csa, ssa, csp, X ssp, dir) Xreal *xc, *yc, *zc, *xs, *ys, *zs, *csa, *ssa, *csp, *ssp; Xlogical *dir; X{ X /* Initialized data */ X X static real xp[8] = { (float)0.,(float)3.5,(float)-3.5,(float)0.,(float) X 0.,(float)-3.5,(float)3.5,(float)0. }; X static real yp[8] = { (float)3.,(float)-3.,(float)-3.,(float)3.,(float)0., X (float)-3.,(float)-3.,(float)0. }; X static real zp[8] = { (float)-2.6,(float)-2.6,(float)-2.6,(float)-2.6,( X float)2.6,(float)-2.6,(float)-2.6,(float)2.6 }; X static real sda = (float).0998; X static real sdp = (float).0998; X static real cda = (float).995; X static real cdp = (float).995; X static real ca = (float)1.; X static real cp = (float)1.; X static real sa = (float)0.; X static real sp = (float)0.; X X extern /* Subroutine */ int gprpolyline_(); X static real temp; X static shortint x_pt__[8], y_pt__[8]; X static integer j, istat; X static real t1[8], t2[8], t3[8], t4[8], t5[8], t6[8]; X extern /* Subroutine */ int gprmove_(); X X X/* STREK_PHOTON_2 draws an enemy photon similar to a player photon */ X/* (see strek_photon_4). */ X X/* version 1 */ X/* -jsr 8/85 */ X X/* % include '/sys/ins/base.ins.ftn' */ X/* % include '/sys/ins/gpr.ins.ftn' */ X X X/* data for photon config and saves */ X X if (*dir) { X temp = ca; X ca = ca * cda - sa * sda; X sa = sa * cda + sda * temp; X temp = cp; X cp = cp * cdp - sp * sdp; X sp = sp * cdp + sdp * temp; X X/* rotate the points about the local position into galatic coords X*/ X X for (j = 1; j <= 8; ++j) { X t1[j - 1] = xp[j - 1] * ca - yp[j - 1] * sa * cp + zp[j - 1] * sa X * sp + *xs; X t2[j - 1] = xp[j - 1] * sa + yp[j - 1] * ca * cp - zp[j - 1] * ca X * sp + *ys; X t3[j - 1] = yp[j - 1] * sp + zp[j - 1] * cp + *zs; X/* L10: */ X } X X/* form offsets from player ship and rotate them about it */ X X for (j = 1; j <= 8; ++j) { X t1[j - 1] -= *xc; X t2[j - 1] -= *yc; X t3[j - 1] -= *zc; X t4[j - 1] = t1[j - 1] * *csa + t2[j - 1] * *ssa; X t5[j - 1] = -(doublereal)t1[j - 1] * *ssa * *csp + t2[j - 1] * * X csa * *csp + t3[j - 1] * *ssp; X t6[j - 1] = t1[j - 1] * *ssa * *ssp - t2[j - 1] * *csa * *ssp + X t3[j - 1] * *csp; X if (t5[j - 1] < (float)1.) { X t5[j - 1] = (float)1.; X } X x_pt__[j - 1] = t4[j - 1] / t5[j - 1] * (float)350. + (float)450.; X X y_pt__[j - 1] = (float)400. - t6[j - 1] / t5[j - 1] * (float)350.; X X/* L20: */ X } X X/* draw the object */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__8, &istat); X } else { X X/* erase old lines by drawing over them in black */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__8, &istat); X } X return 0; X} /* strek_photon_2__ */ X X/* Subroutine */ int strek_photon_3__(xc, yc, zc, xs, ys, zs, csa, ssa, csp, X ssp, dir) Xreal *xc, *yc, *zc, *xs, *ys, *zs, *csa, *ssa, *csp, *ssp; Xlogical *dir; X{ X /* Initialized data */ X X static real xp[8] = { (float)0.,(float)3.5,(float)-3.5,(float)0.,(float) X 0.,(float)-3.5,(float)3.5,(float)0. }; X static real yp[8] = { (float)3.,(float)-3.,(float)-3.,(float)3.,(float)0., X (float)-3.,(float)-3.,(float)0. }; X static real zp[8] = { (float)-2.6,(float)-2.6,(float)-2.6,(float)-2.6,( X float)2.6,(float)-2.6,(float)-2.6,(float)2.6 }; X static real sda = (float).0998; X static real sdp = (float).0998; X static real cda = (float).995; X static real cdp = (float).995; X static real ca = (float)1.; X static real cp = (float)1.; X static real sa = (float)0.; X static real sp = (float)0.; X X extern /* Subroutine */ int gprpolyline_(); X static real temp; X static shortint x_pt__[8], y_pt__[8]; X static integer j, istat; X static real t1[8], t2[8], t3[8], t4[8], t5[8], t6[8]; X extern /* Subroutine */ int gprmove_(); X X X/* STREK_PHOTON_3 draws an enemy photon similar to a player photon */ X/* (see strek_photon_4). */ X X/* version 1 */ X/* -jsr 8/85 */ X X/* % include '/sys/ins/base.ins.ftn' */ X/* % include '/sys/ins/gpr.ins.ftn' */ X X X/* data for photon config and saves */ X X if (*dir) { X temp = ca; X ca = ca * cda - sa * sda; X sa = sa * cda + sda * temp; X temp = cp; X cp = cp * cdp - sp * sdp; X sp = sp * cdp + sdp * temp; X X/* rotate the points about the local position into galatic coords X*/ X X for (j = 1; j <= 8; ++j) { X t1[j - 1] = xp[j - 1] * ca - yp[j - 1] * sa * cp + zp[j - 1] * sa X * sp + *xs; X t2[j - 1] = xp[j - 1] * sa + yp[j - 1] * ca * cp - zp[j - 1] * ca X * sp + *ys; X t3[j - 1] = yp[j - 1] * sp + zp[j - 1] * cp + *zs; X/* L10: */ X } X X/* form offsets from player ship and rotate them about it */ X X for (j = 1; j <= 8; ++j) { X t1[j - 1] -= *xc; X t2[j - 1] -= *yc; X t3[j - 1] -= *zc; X t4[j - 1] = t1[j - 1] * *csa + t2[j - 1] * *ssa; X t5[j - 1] = -(doublereal)t1[j - 1] * *ssa * *csp + t2[j - 1] * * X csa * *csp + t3[j - 1] * *ssp; X t6[j - 1] = t1[j - 1] * *ssa * *ssp - t2[j - 1] * *csa * *ssp + X t3[j - 1] * *csp; X if (t5[j - 1] < (float)1.) { X t5[j - 1] = (float)1.; X } X x_pt__[j - 1] = t4[j - 1] / t5[j - 1] * (float)350. + (float)450.; X X y_pt__[j - 1] = (float)400. - t6[j - 1] / t5[j - 1] * (float)350.; X X/* L20: */ X } X X/* draw the object */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__8, &istat); X } else { X X/* erase old lines by drawing over them in black */ X X gprmove_(x_pt__, y_pt__, &istat); X gprpolyline_(x_pt__, y_pt__, &c__8, &istat); X } X return 0; X} /* strek_photon_3__ */ X X/* Subroutine */ int strek_photon_4__(xc, yc, zc, xs, ys, zs, csa, ssa, csp, X ssp, dir) Xreal *xc, *yc, *zc, *xs, *ys, *zs, *csa, *ssa, *csp, *ssp; Xlogical *dir; X{ X /* Initialized data */ X X static real xp[14] = { (float)0.,(float)0.,(float)0.,(float)0.,(float)3.5, X (float)-3.5,(float)-1.75,(float)1.75,(float)1.75,(float)-1.75,( X float)-1.75,(float)1.75,(float)1.75,(float)-1.75 }; X static real yp[14] = { (float)0.,(float)0.,(float)-3.5,(float)3.5,(float) X 0.,(float)0.,(float)-1.75,(float)1.75,(float)-1.75,(float)1.75,( X float)1.75,(float)-1.75,(float)1.75,(float)-1.75 }; X static real zp[14] = { (float)3.5,(float)-3.5,(float)0.,(float)0.,(float) X 0.,(float)0.,(float)2.5,(float)-2.5,(float)2.5,(float)-2.5,(float) X 2.5,(float)-2.5,(float)2.5,(float)-2.5 }; X static real sda = (float).0998; X static real sdp = (float).0998; X static real cda = (float).995; X static real cdp = (float).995; X static real ca = (float)1.; X static real cp = (float)1.; X static real sa = (float)0.; X static real sp = (float)0.; X X static real temp; X static shortint x_pt__[14], y_pt__[14]; X extern /* Subroutine */ int gprmultiline_(); X static integer j, istat; X static real t1[14], t2[14], t3[14], t4[14], t5[14], t6[14]; X X X/* STREK_PHOTON_4 draws a player photon torpedo (or erases depending */ X X/* on dir) at the point xs, ys, zs as viewed from xc, yc, zc by a */ X/* ship with angles csa, ssa, csp, and ssp. No provision is made */ X/* for views that are both in front of and behind the viewer, other */ X/* than to do a first order correction to the projected y coord. */ X X/* version 1 */ X/* -jsr 8/85 */ X X/* % include '/sys/ins/base.ins.ftn' */ X/* % include '/sys/ins/gpr.ins.ftn' */ X X X/* data for photon config and saves */ X X if (*dir) { X X/* use double angle formulas to update rotations */ X X temp = ca; X ca = ca * cda - sa * sda; X sa = sa * cda + sda * temp; X temp = cp; X cp = cp * cdp - sp * sdp; X sp = sp * cdp + sdp * temp; X X/* rotate the points about their local frame to bring them into the X */ X/* absolute frame */ X X for (j = 1; j <= 14; ++j) { X t1[j - 1] = xp[j - 1] * ca - yp[j - 1] * sa * cp + zp[j - 1] * sa X * sp + *xs; X t2[j - 1] = xp[j - 1] * sa + yp[j - 1] * ca * cp - zp[j - 1] * ca X * sp + *ys; X t3[j - 1] = yp[j - 1] * sp + zp[j - 1] * cp + *zs; X/* L10: */ X } X X/* form offsets from player ship and rotate them into its local fra Xme */ X X for (j = 1; j <= 14; ++j) { X t1[j - 1] -= *xc; X t2[j - 1] -= *yc; X t3[j - 1] -= *zc; X t4[j - 1] = t1[j - 1] * *csa + t2[j - 1] * *ssa; X t5[j - 1] = -(doublereal)t1[j - 1] * *ssa * *csp + t2[j - 1] * * X csa * *csp + t3[j - 1] * *ssp; X t6[j - 1] = t1[j - 1] * *ssa * *ssp - t2[j - 1] * *csa * *ssp + X t3[j - 1] * *csp; X x_pt__[j - 1] = t4[j - 1] / t5[j - 1] * (float)350. + (float)450.; X X y_pt__[j - 1] = (float)400. - t6[j - 1] / t5[j - 1] * (float)350.; X X/* L20: */ X } X X/* draw the object */ X X gprmultiline_(x_pt__, y_pt__, &c__14, &istat); X } else { X X/* erase old lines by drawing over them again (i.e. change color to X */ X/* black, or set xor raster op) */ X X gprmultiline_(x_pt__, y_pt__, &c__14, &istat); X } X return 0; X} /* strek_photon_4__ */ X X/* Subroutine */ int strek_photon_5__(xc, yc, zc, xs, ys, zs, csa, ssa, csp, X ssp, dir) Xreal *xc, *yc, *zc, *xs, *ys, *zs, *csa, *ssa, *csp, *ssp; Xlogical *dir; X{ X /* Initialized data */ X X static real xp[14] = { (float)0.,(float)0.,(float)0.,(float)0.,(float)3.5, X (float)-3.5,(float)-1.75,(float)1.75,(float)1.75,(float)-1.75,( X float)-1.75,(float)1.75,(float)1.75,(float)-1.75 }; X static real yp[14] = { (float)0.,(float)0.,(float)-3.5,(float)3.5,(float) X 0.,(float)0.,(float)-1.75,(float)1.75,(float)-1.75,(float)1.75,( X float)1.75,(float)-1.75,(float)1.75,(float)-1.75 }; X static real zp[14] = { (float)3.5,(float)-3.5,(float)0.,(float)0.,(float) X 0.,(float)0.,(float)2.5,(float)-2.5,(float)2.5,(float)-2.5,(float) X 2.5,(float)-2.5,(float)2.5,(float)-2.5 }; X static real sda = (float).0998; X static real sdp = (float).0998; X static real cda = (float).995; X static real cdp = (float).995; X static real ca = (float)1.; X static real cp = (float)1.; X static real sa = (float)0.; X static real sp = (float)0.; X X static real temp; X static shortint x_pt__[14], y_pt__[14]; X extern /* Subroutine */ int gprmultiline_(); X static integer j, istat; X static real t1[14], t2[14], t3[14], t4[14], t5[14], t6[14]; X X X/* STREK_PHOTON_5 draws a player photon torpedo (or erases depending */ X X/* on dir) at the point xs, ys, zs as viewed from xc, yc, zc by a */ X/* ship with angles csa, ssa, csp, and ssp. No provision is made */ X/* for views that are both in front of and behind the viewer, other */ X/* than to do a first order correction to the projected y coord. */ X X/* version 1 */ X/* -jsr 8/85 */ X X/* % include '/sys/ins/base.ins.ftn' */ X/* % include '/sys/ins/gpr.ins.ftn' */ X X X/* data for photon config and saves */ X X if (*dir) { X X/* use double angle formulas to update rotations */ X X temp = ca; X ca = ca * cda - sa * sda; X sa = sa * cda + sda * temp; X temp = cp; X cp = cp * cdp - sp * sdp; X sp = sp * cdp + sdp * temp; X X/* rotate the points about their local frame to bring them into the X */ X/* absolute frame */ X X for (j = 1; j <= 14; ++j) { X t1[j - 1] = xp[j - 1] * ca - yp[j - 1] * sa * cp + zp[j - 1] * sa X * sp + *xs; X t2[j - 1] = xp[j - 1] * sa + yp[j - 1] * ca * cp - zp[j - 1] * ca X * sp + *ys; X t3[j - 1] = yp[j - 1] * sp + zp[j - 1] * cp + *zs; X/* L10: */ X } X X/* form offsets from player ship and rotate them into its local fra Xme */ X X for (j = 1; j <= 14; ++j) { X t1[j - 1] -= *xc; X t2[j - 1] -= *yc; X t3[j - 1] -= *zc; X t4[j - 1] = t1[j - 1] * *csa + t2[j - 1] * *ssa; X t5[j - 1] = -(doublereal)t1[j - 1] * *ssa * *csp + t2[j - 1] * * X csa * *csp + t3[j - 1] * *ssp; X t6[j - 1] = t1[j - 1] * *ssa * *ssp - t2[j - 1] * *csa * *ssp + X t3[j - 1] * *csp; X x_pt__[j - 1] = t4[j - 1] / t5[j - 1] * (float)350. + (float)450.; X X y_pt__[j - 1] = (float)400. - t6[j - 1] / t5[j - 1] * (float)350.; X X/* L20: */ X } X X/* draw the object */ X X gprmultiline_(x_pt__, y_pt__, &c__14, &istat); X } else { X X/* erase old lines by drawing over them again (i.e. change color to X */ X/* black, or set xor raster op) */ X X gprmultiline_(x_pt__, y_pt__, &c__14, &istat); X } X return 0; X} /* strek_photon_5__ */ X X/* Subroutine */ int strek_photon_6__(xc, yc, zc, xs, ys, zs, csa, ssa, csp, X ssp, dir) Xreal *xc, *yc, *zc, *xs, *ys, *zs, *csa, *ssa, *csp, *ssp; Xlogical *dir; X{ X /* Initialized data */ X X static real xp[14] = { (float)0.,(float)0.,(float)0.,(float)0.,(float)3.5, X (float)-3.5,(float)-1.75,(float)1.75,(float)1.75,(float)-1.75,( X float)-1.75,(float)1.75,(float)1.75,(float)-1.75 }; X static real yp[14] = { (float)0.,(float)0.,(float)-3.5,(float)3.5,(float) X 0.,(float)0.,(float)-1.75,(float)1.75,(float)-1.75,(float)1.75,( X float)1.75,(float)-1.75,(float)1.75,(float)-1.75 }; X static real zp[14] = { (float)3.5,(float)-3.5,(float)0.,(float)0.,(float) X 0.,(float)0.,(float)2.5,(float)-2.5,(float)2.5,(float)-2.5,(float) X 2.5,(float)-2.5,(float)2.5,(float)-2.5 }; X static real sda = (float).0998; X static real sdp = (float).0998; X static real cda = (float).995; X static real cdp = (float).995; X static real ca = (float)1.; X static real cp = (float)1.; X static real sa = (float)0.; X static real sp = (float)0.; X X static real temp; X static shortint x_pt__[14], y_pt__[14]; X extern /* Subroutine */ int gprmultiline_(); X static integer j, istat; X static real t1[14], t2[14], t3[14], t4[14], t5[14], t6[14]; X X X/* STREK_PHOTON_6 draws a player photon torpedo (or erases depending */ X X/* on dir) at the point xs, ys, zs as viewed from xc, yc, zc by a */ X/* ship with angles csa, ssa, csp, and ssp. No provision is made */ X/* for views that are both in front of and behind the viewer, other */ X/* than to do a first order correction to the projected y coord. */ X X/* version 1 */ X/* -jsr 8/85 */ X X/* % include '/sys/ins/base.ins.ftn' */ X/* % include '/sys/ins/gpr.ins.ftn' */ X X X/* data for photon config and saves */ X X if (*dir) { X X/* use double angle formulas to update rotations */ X X temp = ca; X ca = ca * cda - sa * sda; X sa = sa * cda + sda * temp; X temp = cp; X cp = cp * cdp - sp * sdp; X sp = sp * cdp + sdp * temp; X X/* rotate the points about their local frame to bring them into the X */ X/* absolute frame */ X X for (j = 1; j <= 14; ++j) { X t1[j - 1] = xp[j - 1] * ca - yp[j - 1] * sa * cp + zp[j - 1] * sa X * sp + *xs; X t2[j - 1] = xp[j - 1] * sa + yp[j - 1] * ca * cp - zp[j - 1] * ca X * sp + *ys; X t3[j - 1] = yp[j - 1] * sp + zp[j - 1] * cp + *zs; X/* L10: */ X } X X/* form offsets from player ship and rotate them into its local fra Xme */ X X for (j = 1; j <= 14; ++j) { X t1[j - 1] -= *xc; X t2[j - 1] -= *yc; X t3[j - 1] -= *zc; X t4[j - 1] = t1[j - 1] * *csa + t2[j - 1] * *ssa; X t5[j - 1] = -(doublereal)t1[j - 1] * *ssa * *csp + t2[j - 1] * * X csa * *csp + t3[j - 1] * *ssp; X t6[j - 1] = t1[j - 1] * *ssa * *ssp - t2[j - 1] * *csa * *ssp + X t3[j - 1] * *csp; X x_pt__[j - 1] = t4[j - 1] / t5[j - 1] * (float)350. + (float)450.; X X y_pt__[j - 1] = (float)400. - t6[j - 1] / t5[j - 1] * (float)350.; X X/* L20: */ X } X X/* draw the object */ X X gprmultiline_(x_pt__, y_pt__, &c__14, &istat); X } else { X X/* erase old lines by drawing over them again (i.e. change color to X */ X/* black, or set xor raster op) */ X X gprmultiline_(x_pt__, y_pt__, &c__14, &istat); X } X return 0; X} /* strek_photon_6__ */ X X/* Subroutine */ int strek_starbase__(xc, yc, zc, csa, csp, ssa, ssp, dir) Xreal *xc, *yc, *zc, *csa, *csp, *ssa, *ssp; Xlogical *dir; X{ X /* Initialized data */ X X static real xp[13] = { (float)0.,(float)0.,(float)0.,(float)0.,(float) X -7.5,(float)-12.,(float)7.5,(float)12.,(float)0.,(float)0.,(float) X 0.,(float)-15.,(float)15. }; X static real yp[13] = { (float)0.,(float)0.,(float)8.66,(float)13.855,( X float)-4.33,(float)-6.92,(float)-4.33,(float)-6.92,(float)0.,( X float)0.,(float)17.3,(float)-8.66,(float)-8.66 }; X static real zp[13] = { (float)10.,(float)16.,(float)-5.,(float)-8.,(float) X -5.,(float)-8.,(float)-5.,(float)-8.,(float)0.,(float)20.,(float) X -10.,(float)-10.,(float)-10. }; X static real radii[5] = { (float)10.,(float)4.,(float)4.,(float)4.,(float) X 4. }; X static real sda = (float).049979; X static real cda = (float).998749; X static real ca = (float)1.; X static real cp = (float)1.; X static real sa = (float)0.; X static real sp = (float)0.; X X static real temp; X static shortint x_pt__[8], y_pt__[8]; X static integer i, j; X extern /* Subroutine */ int gprmultiline_(); X static integer istat; X extern /* Subroutine */ int gprcircle_(); X static real t1[13], t2[13], t3[13], t4[13], t5[13], t6[13]; X static shortint center[10] /* was [5][2] */, radius[5], xpt[2]; X X X/* STREK_STARBASE draws a 3-d starbase at the origin as viewed */ X/* from xc, yc, zc, at the angle csa, csp, ssa, ssp. */ X X/* version 1 */ X/* -jsr 8/85 */ X X/* % include '/sys/ins/base.ins.ftn' */ X/* % include '/sys/ins/gpr.ins.ftn' */ X X X/* data for unrotated base */ X X X/* rotate and project all points */ X X if (*dir) { X temp = ca; X ca = ca * cda - sa * sda; X sa = sa * cda + sda * temp; X for (j = 1; j <= 13; ++j) { X t1[j - 1] = xp[j - 1] * ca - yp[j - 1] * sa * cp + zp[j - 1] * sa X * sp; X t2[j - 1] = xp[j - 1] * sa + yp[j - 1] * ca * cp - zp[j - 1] * ca X * sp; X t3[j - 1] = yp[j - 1] * sp + zp[j - 1] * cp; X/* L10: */ X } X X/* form offsets from player ship and rotate them about it */ X X for (j = 1; j <= 13; ++j) { X t1[j - 1] -= *xc; X t2[j - 1] -= *yc; X t3[j - 1] -= *zc; X t4[j - 1] = t1[j - 1] * *csa + t2[j - 1] * *ssa; X t5[j - 1] = -(doublereal)t1[j - 1] * *ssa * *csp + t2[j - 1] * * X csa * *csp + t3[j - 1] * *ssp; X t6[j - 1] = t1[j - 1] * *ssa * *ssp - t2[j - 1] * *csa * *ssp + X t3[j - 1] * *csp; X if (t5[j - 1] < (float)5.) { X t5[j - 1] = (float)5.; X } X if (j <= 8) { X x_pt__[j - 1] = t4[j - 1] / t5[j - 1] * (float)350. + (float) X 450.; X y_pt__[j - 1] = (float)400. - t6[j - 1] / t5[j - 1] * (float) X 350.; X } else { X i = j - 8; X center[i - 1] = t4[j - 1] / t5[j - 1] * (float)350. + (float) X 450.; X center[i + 4] = (float)400. - t6[j - 1] / t5[j - 1] * (float) X 350.; X radius[i - 1] = radii[i - 1] / t5[j - 1] * (float)350. + ( X float).5; X } X/* L20: */ X } X gprmultiline_(x_pt__, y_pt__, &c__8, &istat); X for (j = 1; j <= 5; ++j) { X xpt[0] = center[j - 1]; X xpt[1] = center[j + 4]; X if (radius[j - 1] > 0) { X gprcircle_(xpt, &radius[j - 1], &istat); X } X/* L30: */ X } X } else { X X/* erase old figure by redrawing in black or with xor raster op */ X X gprmultiline_(x_pt__, y_pt__, &c__8, &i); X for (j = 1; j <= 5; ++j) { X xpt[0] = center[j - 1]; X xpt[1] = center[j + 4]; X if (radius[j - 1] > 0) { X gprcircle_(xpt, &radius[j - 1], &istat); X } X/* L40: */ X } X } X return 0; X} /* strek_starbase__ */ X E!O!F! xstrek/strek_ships_subs.c echo xstrek/strek_startup_db.c 1>&2 sed -e 's/^X//' > xstrek/strek_startup_db.c <<'E!O!F! xstrek/strek_startup_db.c' X/* strek_startup_db.f -- translated by f2c (version of 19 December 1990 16:50:21). X You must link the resulting object file with the libraries: X -lF77 -lI77 -lm -lc (in that order) X*/ X X#include "f2c.h" X X/* Table of constant values */ X Xstatic integer c__1 = 1; X X/* Main program */ MAIN__() X{ X /* Initialized data */ X X static integer ship_avail__[3] = { 0,0,0 }; X static integer last_score__ = 0; X static integer score = 0; X static integer ship_retired__ = 1; X static char ship_name__[30+1] = "unused "; X static char user_name__[10+1] = "unused "; X static char capt_name__[10+1] = "unused "; X static char nick_name__[10+1] = "unused "; X static char key_file__[256+1] = " \ X \ X \ X "; X X /* Format strings */ X static char fmt_110[] = "(a10,a10,a30,i10)"; X X /* System generated locals */ X olist o__1; X cllist cl__1; X X /* Builtin functions */ X integer f_open(), s_wdue(), do_uio(), e_wdue(), f_clos(), s_wsfe(), X do_fio(), e_wsfe(); X /* Subroutine */ int s_stop(); X X /* Local variables */ X static integer i, j; X X /* Fortran I/O blocks */ X static cilist io___11 = { 0, 1, 0, 0, 1 }; X static cilist io___12 = { 0, 1, 0, 0, 2 }; X static cilist io___14 = { 0, 1, 0, fmt_110, 0 }; X X X X/* ******************************************************************* X*/ X/* ***** ***** X*/ X/* ***** STAR TREK VERSION 3.0 ***** X*/ X/* ***** ***** X*/ X/* ***** written by ***** X*/ X/* ***** ***** X*/ X/* ***** Justin S. Revenaugh ***** X*/ X/* ***** ***** X*/ X/* ***** 7/87 ***** X*/ X/* ***** ***** X*/ X/* ***** Massachussetts Institute of Technology ***** X*/ X/* ***** Department of Earth, Atmospheric and Planetary Science ***** X*/ X/* ***** ***** X*/ X/* ******************************************************************* X*/ X X X/* STREK_STARTUP_DB initializes the strek database. It creates */ X/* two files in the directory it is run in. These files are */ X/* STREK_INFO which contains the ship registry and STREK_TOP_SCORES */ X/* which contains the top ten scores. */ X X/* version 1 */ X/* -jsr 8/85 */ X X X/* open and write strek_info */ X X o__1.oerr = 0; X o__1.ounit = 1; X o__1.ofnmlen = 30; X o__1.ofnm = "/usr/lib/X11/xstrek/strek_info"; X o__1.orl = 1000; X o__1.osta = 0; X o__1.oacc = "direct"; X o__1.ofm = "unformatted"; X o__1.oblnk = 0; X f_open(&o__1); X j = 1; X s_wdue(&io___11); X do_uio(&c__1, (char *)&j, (ftnlen)sizeof(integer)); X e_wdue(); X s_wdue(&io___12); X do_uio(&c__1, ship_name__, 30L); X do_uio(&c__1, user_name__, 10L); X do_uio(&c__1, capt_name__, 10L); X do_uio(&c__1, nick_name__, 10L); X do_uio(&c__1, key_file__, 256L); X for (i = 1; i <= 3; ++i) { X do_uio(&c__1, (char *)&ship_avail__[i - 1], (ftnlen)sizeof(integer)); X } X do_uio(&c__1, (char *)&last_score__, (ftnlen)sizeof(integer)); X do_uio(&c__1, (char *)&score, (ftnlen)sizeof(integer)); X do_uio(&c__1, (char *)&ship_retired__, (ftnlen)sizeof(integer)); X e_wdue(); X cl__1.cerr = 0; X cl__1.cunit = 1; X cl__1.csta = 0; X f_clos(&cl__1); X X/* open and write strek_top_scores */ X X o__1.oerr = 0; X o__1.ounit = 1; X o__1.ofnmlen = 36; X o__1.ofnm = "/usr/lib/X11/xstrek/strek_top_scores"; X o__1.orl = 1000; X o__1.osta = 0; X o__1.oacc = 0; X o__1.ofm = "formatted"; X o__1.oblnk = 0; X f_open(&o__1); X for (j = 1; j <= 10; ++j) { X s_wsfe(&io___14); X do_fio(&c__1, user_name__, 10L); X do_fio(&c__1, capt_name__, 10L); X do_fio(&c__1, ship_name__, 30L); X do_fio(&c__1, (char *)&score, (ftnlen)sizeof(integer)); X e_wsfe(); X/* L10: */ X } X cl__1.cerr = 0; X cl__1.cunit = 1; X cl__1.csta = 0; X f_clos(&cl__1); X s_stop("", 0L); X} /* MAIN__ */ X X/* Main program alias */ int strek_startup_db__ () { MAIN__ (); } E!O!F! xstrek/strek_startup_db.c echo xstrek/strek_stats.c 1>&2 sed -e 's/^X//' > xstrek/strek_stats.c <<'E!O!F! xstrek/strek_stats.c' X/* strek_stats.f -- translated by f2c (version of 19 December 1990 16:50:21). X You must link the resulting object file with the libraries: X -lF77 -lI77 -lm -lc (in that order) X*/ X X#include "f2c.h" X X/* Table of constant values */ X Xstatic integer c__9 = 9; Xstatic integer c__1 = 1; X X/* Main program */ MAIN__() X{ X /* Builtin functions */ X integer s_wsle(), do_lio(), e_wsle(), s_rsfe(), do_fio(), e_rsfe(); X /* Subroutine */ int s_stop(); X X /* Local variables */ X extern /* Subroutine */ int strek_scores__(); X static char answer[1]; X extern /* Subroutine */ int strek_ships__(); X X /* Fortran I/O blocks */ X static cilist io___1 = { 0, 6, 0, 0, 0 }; X static cilist io___2 = { 0, 6, 0, 0, 0 }; X static cilist io___3 = { 0, 6, 0, 0, 0 }; X static cilist io___4 = { 0, 6, 0, 0, 0 }; X static cilist io___5 = { 0, 6, 0, 0, 0 }; X static cilist io___6 = { 0, 5, 0, "(a)", 0 }; X X X X/* ******************************************************************* X*/ X/* ***** ***** X*/ X/* ***** STAR TREK VERSION 3.0 ***** X*/ X/* ***** ***** X*/ X/* ***** written by ***** X*/ X/* ***** ***** X*/ X/* ***** Justin S. Revenaugh ***** X*/ X/* ***** ***** X*/ X/* ***** 7/87 ***** X*/ X/* ***** ***** X*/ X/* ***** Massachussetts Institute of Technology ***** X*/ X/* ***** Department of Earth, Atmospheric and Planetary Science ***** X*/ X/* ***** ***** X*/ X/* ******************************************************************* X*/ X X/* STREK_STATS allows the user to peruse the STREK database without */ X/* playing the game. */ X X/* version 1 */ X/* -jsr 8/85 */ X X X/* begin loop over options */ X XL10: X s_wsle(&io___1); X do_lio(&c__9, &c__1, " ", 1L); X e_wsle(); X s_wsle(&io___2); X do_lio(&c__9, &c__1, "Enter <r> to view the ship registry,", 36L); X e_wsle(); X s_wsle(&io___3); X do_lio(&c__9, &c__1, " <s> to view the top ten scores or", 39L); X e_wsle(); X s_wsle(&io___4); X do_lio(&c__9, &c__1, " <return> to quit.", 23L); X e_wsle(); X s_wsle(&io___5); X do_lio(&c__9, &c__1, " ", 1L); X e_wsle(); X s_rsfe(&io___6); X do_fio(&c__1, answer, 1L); X e_rsfe(); X if (*answer == 'r') { X strek_ships__(); X goto L10; X } else if (*answer == 's') { X strek_scores__(); X goto L10; X } else { X s_stop("", 0L); X } X} /* MAIN__ */ X X/* Main program alias */ int strek_stats__ () { MAIN__ (); } E!O!F! xstrek/strek_stats.c exit ===== @work: | Matthias Pfuetzner | @home: ZGDV, Wilhelminenstrasse 7 | 6100 Darmstadt, FRG | Lichtenbergstrasse 73 +49 6151 155-164 or -101 \ <- Tel.nr. -> / +49 6151 75717 pfuetzner@agd.fhg.de pfuetzner@zgdvda.UUCP XBR1YD3U@DDATHD21.BITNET -- Dan Heller ------------------------------------------------ O'Reilly && Associates ZipCode Software Senior Writer President argv@ora.com argv@zipcode.com