From 982331302aeec43452f7a429baccda47e8a4f814 Mon Sep 17 00:00:00 2001 From: Noah Smith Date: Mon, 16 Sep 2024 02:04:34 +0200 Subject: [PATCH] pdp10 folder --- .gitignore | 1 - pdp10/compuserve/BASBLD.FOR | 45 + pdp10/compuserve/BASKIL.FOR | 66 + pdp10/compuserve/BASPHA.FOR | 87 + pdp10/compuserve/BLKDAT.FOR | 105 + pdp10/compuserve/BUILD.FOR | 114 + pdp10/compuserve/CAPTUR.FOR | 127 + pdp10/compuserve/CHECK.FOR | 97 + pdp10/compuserve/CHKPNT.FOR | 43 + pdp10/compuserve/CISHNG.MAC | 120 + pdp10/compuserve/CLRBUF.FOR | 30 + pdp10/compuserve/DAMAGE.FOR | 80 + pdp10/compuserve/DECFIX.MAC | 51 + pdp10/compuserve/DEFINE.FOR | 93 + pdp10/compuserve/DIST.FOR | 86 + pdp10/compuserve/DOCK.FOR | 83 + pdp10/compuserve/DSHIP.FOR | 39 + pdp10/compuserve/DW2.FOR | 106 + pdp10/compuserve/ENDGAM.FOR | 76 + pdp10/compuserve/ENERGY.FOR | 109 + pdp10/compuserve/ENTER.MAC | 75 + pdp10/compuserve/FREE.FOR | 148 + pdp10/compuserve/GETCMD.FOR | 133 + pdp10/compuserve/GETLIN.MAC | 797 +++ pdp10/compuserve/JUMP.FOR | 82 + pdp10/compuserve/KQSRCH.FOR | 50 + pdp10/compuserve/LIST.FOR | 65 + pdp10/compuserve/LOCAL.FOR | 25 + pdp10/compuserve/LOCATE.FOR | 169 + pdp10/compuserve/LOFCHK.MAC | 81 + pdp10/compuserve/LSTFLG.FOR | 231 + pdp10/compuserve/LSTOBJ.FOR | 89 + pdp10/compuserve/LSTOUT.FOR | 134 + pdp10/compuserve/LSTSCN.FOR | 294 + pdp10/compuserve/LSTSUM.FOR | 44 + pdp10/compuserve/LSTUPD.FOR | 66 + pdp10/compuserve/MOVE.FOR | 159 + pdp10/compuserve/NOVA.FOR | 181 + pdp10/compuserve/OUTHDB.FOR | 41 + pdp10/compuserve/OUTHIT.FOR | 288 + pdp10/compuserve/OUTMSG.FOR | 54 + pdp10/compuserve/PASWRD.FOR | 42 + pdp10/compuserve/PHACON.FOR | 166 + pdp10/compuserve/PLACE.FOR | 57 + pdp10/compuserve/PLNATK.FOR | 95 + pdp10/compuserve/PLNRMV.FOR | 60 + pdp10/compuserve/POINTS.FOR | 200 + pdp10/compuserve/PRIDIS.FOR | 46 + pdp10/compuserve/PRLOC.FOR | 54 + pdp10/compuserve/PROMPT.FOR | 52 + pdp10/compuserve/RADIO.FOR | 87 + pdp10/compuserve/REPAIR.FOR | 72 + pdp10/compuserve/ROMDRV.FOR | 235 + pdp10/compuserve/ROMSTR.FOR | 39 + pdp10/compuserve/ROMTOR.FOR | 139 + pdp10/compuserve/SCAN.FOR | 155 + pdp10/compuserve/SET.FOR | 159 + pdp10/compuserve/SHIELD.FOR | 104 + pdp10/compuserve/SNOVA.FOR | 75 + pdp10/compuserve/STATUS.FOR | 164 + pdp10/compuserve/TELL.FOR | 165 + pdp10/compuserve/TIME.FOR | 48 + pdp10/compuserve/TORDAM.FOR | 188 + pdp10/compuserve/TORP.FOR | 264 + pdp10/compuserve/TRACTR.FOR | 134 + pdp10/compuserve/TRAP.FOR | 40 + pdp10/compuserve/TTY.MAC | 208 + pdp10/compuserve/TYPE.FOR | 103 + pdp10/compuserve/USERS.FOR | 58 + pdp10/compuserve/W.MAC | 77 + pdp10/compuserve/WARVER.MAC | 25 + pdp10/compuserve/docs/DECWAR.COM | 106 + pdp10/compuserve/docs/DECWAR.DOC | 1409 ++++ pdp10/compuserve/docs/DECWAR.LTR | 60 + pdp10/compuserve/docs/DECWAR.MAP | 1668 +++++ pdp10/compuserve/docs/DECWAR.NDX | 72 + pdp10/compuserve/docs/DECWAR.TAP | 42 + pdp10/compuserve/docs/HLP.COM | 19 + pdp10/compuserve/docs/MSC.COM | 11 + pdp10/compuserve/docs/PDWDOC.XF4 | 72 + pdp10/compuserve/docs/TO.DO | 56 + pdp10/decwar.md | 1409 ++++ pdp10/deploy/DECWAR.HLP | 1358 ++++ pdp10/deploy/DECWAR.NWS | 16 + pdp10/deploy/arc/DEFINE.HLP | 21 + pdp10/deploy/arc/SECWAR.HLP | 1399 ++++ pdp10/docs/app0-foundations.md | 221 + pdp10/docs/app1-tops-10-versions.md | 63 + pdp10/docs/app2-tap-files.md | 1243 ++++ pdp10/docs/app3-sos.md | 22 + pdp10/docs/misc/bigdanzblog-dec-10-notes.md | 763 +++ pdp10/docs/misc/boot.simh | 6 + pdp10/docs/misc/boot2.simh | 13 + pdp10/docs/misc/kermit.txt | 102 + pdp10/docs/misc/quentin's-faq.txt | 437 ++ pdp10/docs/readme.md | 95 + pdp10/docs/sec1-boot-disks.md | 57 + pdp10/docs/sec2-kermit.md | 170 + pdp10/docs/sec3-prep-source-files.md | 106 + pdp10/docs/sec4-compiling-decwar.md | 155 + pdp10/docs/sec4a-build-files.md | 240 + pdp10/docs/sec4b-continuation-line-issue.md | 54 + pdp10/docs/sec5-minimalist-walkthrough.md | 47 + pdp10/license.md | 675 ++ pdp10/readme.md | 41 + pdp10/scripts/ALT.COD | 252 + pdp10/scripts/C.ICD | 8 + pdp10/scripts/CAN.MIC | 18 + pdp10/scripts/CAN1.CMD | 17 + pdp10/scripts/CCOM.ICD | 20 + pdp10/scripts/CMP.CMD | 6 + pdp10/scripts/COM1.CMD | 4 + pdp10/scripts/COM2.CMD | 3 + pdp10/scripts/CONTEN.MIC | 11 + pdp10/scripts/CONTEN.TEC | 52 + pdp10/scripts/CUST.CMD | 24 + pdp10/scripts/CXRF.ICD | 18 + pdp10/scripts/D.CMD | 1 + pdp10/scripts/DECCMP.CMD | 6 + pdp10/scripts/DECWAR.CMD | 6 + pdp10/scripts/DECWR.ICD | 8 + pdp10/scripts/L.CMD | 22 + pdp10/scripts/LABCRE.ICD | 7 + pdp10/scripts/LDEB.CMD | 23 + pdp10/scripts/LINE.CMD | 24 + pdp10/scripts/LOAD.CMD | 7 + pdp10/scripts/NETREV.CMD | 24 + pdp10/scripts/PAGE.TCO | 22 + pdp10/scripts/PDWDOC.CMD | 1 + pdp10/scripts/SAKHLP.MIC | 3 + pdp10/scripts/TORP.COD | 23 + pdp10/utexas/DECWAR.FOR | 353 + pdp10/utexas/DECWAR.IMP | 70 + pdp10/utexas/EXTERN.FOR | 400 ++ pdp10/utexas/HIGH.FOR | 25 + pdp10/utexas/HISEG.FOR | 101 + pdp10/utexas/L.MIC | 48 + pdp10/utexas/LOW.FOR | 25 + pdp10/utexas/LOWSEG.FOR | 83 + pdp10/utexas/LSTVAR.FOR | 73 + pdp10/utexas/MSG.MAC | 403 ++ pdp10/utexas/PARAM.FOR | 188 + pdp10/utexas/SETEXT.FOR | 59 + pdp10/utexas/SETMSG.MAC | 67 + pdp10/utexas/SETUP.FOR | 564 ++ pdp10/utexas/WARMAC.MAC | 6574 +++++++++++++++++++ pdp10/utexas/hlp/DECNWS.RNO | 210 + pdp10/utexas/hlp/DECWAR.RNH | 1454 ++++ pdp10/utexas/hlp/MAKHLP.MIC | 3 + pdp10/utexas/hlp/MAKNWS.MIC | 1 + pdp10/utexas/tec/EXTERN.TEC | 10 + pdp10/utexas/tec/HISEG.TEC | 18 + pdp10/utexas/tec/LOWSEG.TEC | 18 + pdp10/utexas/tec/NDX.TEC | 14 + pdp10/utexas/tec/PAGE.TEC | 24 + pdp10/utexas/tec/PARAM.TEC | 20 + pdp10/utexas/tec/SETEXT.TEC | 10 + pdp10/utexas/tec/TECSAV.INF | 3 + 158 files changed, 31730 insertions(+), 1 deletion(-) create mode 100644 pdp10/compuserve/BASBLD.FOR create mode 100644 pdp10/compuserve/BASKIL.FOR create mode 100644 pdp10/compuserve/BASPHA.FOR create mode 100644 pdp10/compuserve/BLKDAT.FOR create mode 100644 pdp10/compuserve/BUILD.FOR create mode 100644 pdp10/compuserve/CAPTUR.FOR create mode 100644 pdp10/compuserve/CHECK.FOR create mode 100644 pdp10/compuserve/CHKPNT.FOR create mode 100644 pdp10/compuserve/CISHNG.MAC create mode 100644 pdp10/compuserve/CLRBUF.FOR create mode 100644 pdp10/compuserve/DAMAGE.FOR create mode 100644 pdp10/compuserve/DECFIX.MAC create mode 100644 pdp10/compuserve/DEFINE.FOR create mode 100644 pdp10/compuserve/DIST.FOR create mode 100644 pdp10/compuserve/DOCK.FOR create mode 100644 pdp10/compuserve/DSHIP.FOR create mode 100644 pdp10/compuserve/DW2.FOR create mode 100644 pdp10/compuserve/ENDGAM.FOR create mode 100644 pdp10/compuserve/ENERGY.FOR create mode 100644 pdp10/compuserve/ENTER.MAC create mode 100644 pdp10/compuserve/FREE.FOR create mode 100644 pdp10/compuserve/GETCMD.FOR create mode 100644 pdp10/compuserve/GETLIN.MAC create mode 100644 pdp10/compuserve/JUMP.FOR create mode 100644 pdp10/compuserve/KQSRCH.FOR create mode 100644 pdp10/compuserve/LIST.FOR create mode 100644 pdp10/compuserve/LOCAL.FOR create mode 100644 pdp10/compuserve/LOCATE.FOR create mode 100644 pdp10/compuserve/LOFCHK.MAC create mode 100644 pdp10/compuserve/LSTFLG.FOR create mode 100644 pdp10/compuserve/LSTOBJ.FOR create mode 100644 pdp10/compuserve/LSTOUT.FOR create mode 100644 pdp10/compuserve/LSTSCN.FOR create mode 100644 pdp10/compuserve/LSTSUM.FOR create mode 100644 pdp10/compuserve/LSTUPD.FOR create mode 100644 pdp10/compuserve/MOVE.FOR create mode 100644 pdp10/compuserve/NOVA.FOR create mode 100644 pdp10/compuserve/OUTHDB.FOR create mode 100644 pdp10/compuserve/OUTHIT.FOR create mode 100644 pdp10/compuserve/OUTMSG.FOR create mode 100644 pdp10/compuserve/PASWRD.FOR create mode 100644 pdp10/compuserve/PHACON.FOR create mode 100644 pdp10/compuserve/PLACE.FOR create mode 100644 pdp10/compuserve/PLNATK.FOR create mode 100644 pdp10/compuserve/PLNRMV.FOR create mode 100644 pdp10/compuserve/POINTS.FOR create mode 100644 pdp10/compuserve/PRIDIS.FOR create mode 100644 pdp10/compuserve/PRLOC.FOR create mode 100644 pdp10/compuserve/PROMPT.FOR create mode 100644 pdp10/compuserve/RADIO.FOR create mode 100644 pdp10/compuserve/REPAIR.FOR create mode 100644 pdp10/compuserve/ROMDRV.FOR create mode 100644 pdp10/compuserve/ROMSTR.FOR create mode 100644 pdp10/compuserve/ROMTOR.FOR create mode 100644 pdp10/compuserve/SCAN.FOR create mode 100644 pdp10/compuserve/SET.FOR create mode 100644 pdp10/compuserve/SHIELD.FOR create mode 100644 pdp10/compuserve/SNOVA.FOR create mode 100644 pdp10/compuserve/STATUS.FOR create mode 100644 pdp10/compuserve/TELL.FOR create mode 100644 pdp10/compuserve/TIME.FOR create mode 100644 pdp10/compuserve/TORDAM.FOR create mode 100644 pdp10/compuserve/TORP.FOR create mode 100644 pdp10/compuserve/TRACTR.FOR create mode 100644 pdp10/compuserve/TRAP.FOR create mode 100644 pdp10/compuserve/TTY.MAC create mode 100644 pdp10/compuserve/TYPE.FOR create mode 100644 pdp10/compuserve/USERS.FOR create mode 100644 pdp10/compuserve/W.MAC create mode 100644 pdp10/compuserve/WARVER.MAC create mode 100644 pdp10/compuserve/docs/DECWAR.COM create mode 100644 pdp10/compuserve/docs/DECWAR.DOC create mode 100644 pdp10/compuserve/docs/DECWAR.LTR create mode 100644 pdp10/compuserve/docs/DECWAR.MAP create mode 100644 pdp10/compuserve/docs/DECWAR.NDX create mode 100644 pdp10/compuserve/docs/DECWAR.TAP create mode 100644 pdp10/compuserve/docs/HLP.COM create mode 100644 pdp10/compuserve/docs/MSC.COM create mode 100644 pdp10/compuserve/docs/PDWDOC.XF4 create mode 100644 pdp10/compuserve/docs/TO.DO create mode 100644 pdp10/decwar.md create mode 100644 pdp10/deploy/DECWAR.HLP create mode 100644 pdp10/deploy/DECWAR.NWS create mode 100644 pdp10/deploy/arc/DEFINE.HLP create mode 100644 pdp10/deploy/arc/SECWAR.HLP create mode 100644 pdp10/docs/app0-foundations.md create mode 100644 pdp10/docs/app1-tops-10-versions.md create mode 100644 pdp10/docs/app2-tap-files.md create mode 100644 pdp10/docs/app3-sos.md create mode 100644 pdp10/docs/misc/bigdanzblog-dec-10-notes.md create mode 100644 pdp10/docs/misc/boot.simh create mode 100644 pdp10/docs/misc/boot2.simh create mode 100644 pdp10/docs/misc/kermit.txt create mode 100644 pdp10/docs/misc/quentin's-faq.txt create mode 100644 pdp10/docs/readme.md create mode 100644 pdp10/docs/sec1-boot-disks.md create mode 100644 pdp10/docs/sec2-kermit.md create mode 100644 pdp10/docs/sec3-prep-source-files.md create mode 100644 pdp10/docs/sec4-compiling-decwar.md create mode 100644 pdp10/docs/sec4a-build-files.md create mode 100644 pdp10/docs/sec4b-continuation-line-issue.md create mode 100644 pdp10/docs/sec5-minimalist-walkthrough.md create mode 100644 pdp10/license.md create mode 100644 pdp10/readme.md create mode 100644 pdp10/scripts/ALT.COD create mode 100644 pdp10/scripts/C.ICD create mode 100644 pdp10/scripts/CAN.MIC create mode 100644 pdp10/scripts/CAN1.CMD create mode 100644 pdp10/scripts/CCOM.ICD create mode 100644 pdp10/scripts/CMP.CMD create mode 100644 pdp10/scripts/COM1.CMD create mode 100644 pdp10/scripts/COM2.CMD create mode 100644 pdp10/scripts/CONTEN.MIC create mode 100644 pdp10/scripts/CONTEN.TEC create mode 100644 pdp10/scripts/CUST.CMD create mode 100644 pdp10/scripts/CXRF.ICD create mode 100644 pdp10/scripts/D.CMD create mode 100644 pdp10/scripts/DECCMP.CMD create mode 100644 pdp10/scripts/DECWAR.CMD create mode 100644 pdp10/scripts/DECWR.ICD create mode 100644 pdp10/scripts/L.CMD create mode 100644 pdp10/scripts/LABCRE.ICD create mode 100644 pdp10/scripts/LDEB.CMD create mode 100644 pdp10/scripts/LINE.CMD create mode 100644 pdp10/scripts/LOAD.CMD create mode 100644 pdp10/scripts/NETREV.CMD create mode 100644 pdp10/scripts/PAGE.TCO create mode 100644 pdp10/scripts/PDWDOC.CMD create mode 100644 pdp10/scripts/SAKHLP.MIC create mode 100644 pdp10/scripts/TORP.COD create mode 100644 pdp10/utexas/DECWAR.FOR create mode 100644 pdp10/utexas/DECWAR.IMP create mode 100644 pdp10/utexas/EXTERN.FOR create mode 100644 pdp10/utexas/HIGH.FOR create mode 100644 pdp10/utexas/HISEG.FOR create mode 100644 pdp10/utexas/L.MIC create mode 100644 pdp10/utexas/LOW.FOR create mode 100644 pdp10/utexas/LOWSEG.FOR create mode 100644 pdp10/utexas/LSTVAR.FOR create mode 100644 pdp10/utexas/MSG.MAC create mode 100644 pdp10/utexas/PARAM.FOR create mode 100644 pdp10/utexas/SETEXT.FOR create mode 100644 pdp10/utexas/SETMSG.MAC create mode 100644 pdp10/utexas/SETUP.FOR create mode 100644 pdp10/utexas/WARMAC.MAC create mode 100644 pdp10/utexas/hlp/DECNWS.RNO create mode 100644 pdp10/utexas/hlp/DECWAR.RNH create mode 100644 pdp10/utexas/hlp/MAKHLP.MIC create mode 100644 pdp10/utexas/hlp/MAKNWS.MIC create mode 100644 pdp10/utexas/tec/EXTERN.TEC create mode 100644 pdp10/utexas/tec/HISEG.TEC create mode 100644 pdp10/utexas/tec/LOWSEG.TEC create mode 100644 pdp10/utexas/tec/NDX.TEC create mode 100644 pdp10/utexas/tec/PAGE.TEC create mode 100644 pdp10/utexas/tec/PARAM.TEC create mode 100644 pdp10/utexas/tec/SETEXT.TEC create mode 100644 pdp10/utexas/tec/TECSAV.INF diff --git a/.gitignore b/.gitignore index 9320173..8f2f87d 100644 --- a/.gitignore +++ b/.gitignore @@ -35,5 +35,4 @@ lang-sentences* /venv310/ /cmake-build-debug-docker/ /build-docs/ -*build* .vscode diff --git a/pdp10/compuserve/BASBLD.FOR b/pdp10/compuserve/BASBLD.FOR new file mode 100644 index 0000000..5a0388c --- /dev/null +++ b/pdp10/compuserve/BASBLD.FOR @@ -0,0 +1,45 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine is activated whenever any player (or the Romulan) +C makes a time-consuming move. It's purpose is to strengthen +C weakened starbases of the opposite team. The Romulan rebuilds +C both side's starbases. The percentage gain in base energy per +C BASBLD call is reduced as the number of players increase. + + subroutine BASBLD + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + ib = 1 ; ie = 2 ; n = 50 / (numply + 1) + if (.not. PLAYER) goto 100 !Romulan? + if (team .eq. 1) ib = 2 ; ie = ib + n = 25 / numsid(team) + 100 do 300 j = ib, ie + do 200 i = 1, KNBASE + if (base(i,3,j) .le. 0) goto 200 !is base dead? + base(i,3,j) = min0 (base(i,3,j) + n, 1000) + 200 continue + 300 continue + return + + end diff --git a/pdp10/compuserve/BASKIL.FOR b/pdp10/compuserve/BASKIL.FOR new file mode 100644 index 0000000..364e8f9 --- /dev/null +++ b/pdp10/compuserve/BASKIL.FOR @@ -0,0 +1,66 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine is activated whenever a starbase or captured +C planet is destroyed. The purpose of the routine is to check +C whether any adjacent ships were docked at this object at the +C time of the attack, and reset their ship's condition to RED +C if true. ITYPE = team of destroyed port. + + subroutine BASKIL (itype) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + ib = 1 ; ie = KNPLAY + if (itype .eq. 1) ie = KNPLAY / 2 + if (itype .eq. 2) ib = (KNPLAY / 2) + 1 + + do 400 i = ib, ie + if (.not. docked(i)) goto 400 !is he docked? + +*.........Check for adjacent starbase + + if (nbase(itype) .le. 0) goto 200 !any bases alive? + do 100 j = 1, KNBASE + if (base(j,3,itype) .le. 0) goto 100 + if (ldis(shpcon(i,KVPOS), shpcon(i,KHPOS), + + base(j,KVPOS,itype), base(j,KHPOS,itype), 1)) goto 400 + 100 continue + +*.........Check for adjacent friendly planet + + 200 if (numcap(itype) .le. 0) goto 400 !any friendly planets? + do 300 j = 1, nplnet + if ((itype + DXNPLN) .ne. dispc(locpln(j,KVPOS), + + locpln(j,KHPOS))) goto 300 + if (ldis(shpcon(i,KVPOS), shpcon(i,KHPOS), locpln(j,KVPOS), + + locpln(j,KHPOS), 1)) goto 400 + 300 continue + +*.........No adjacent friendly port, undock player. + + shpcon(i,KSPCON) = RED + docked(i) = .FALSE. + 400 continue + return + + end diff --git a/pdp10/compuserve/BASPHA.FOR b/pdp10/compuserve/BASPHA.FOR new file mode 100644 index 0000000..ba21942 --- /dev/null +++ b/pdp10/compuserve/BASPHA.FOR @@ -0,0 +1,87 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine controls the phaser defenses of the starbases. +C These defenses are activated whenever a player (or the Romulan) +C performs a time-consuming move. A player only activates the +C opposite team's starbases, with the Romulan activating both +C side's bases. + + subroutine BASPHA + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + jb = 1 ; je = 2 + if (.not. PLAYER) goto 100 !Romulan? + jb = 3 - team ; je = jb + + 100 do 500 i = jb, je + if (nbase(i) .le. 0) goto 500 !active bases? + do 400 j = 1, KNBASE + if (base(j,3,i) .le. 0) goto 400 !base alive? + +*...........Attack the players + + do 300 k = (KNPLAY/2) * (2 - i) + 1, (KNPLAY/2) * (3 - i) + if (.not. alive(k)) goto 300 !player dead? + if (disp(shpcon(k,KVPOS), shpcon(k,KHPOS)) .le. 0) + + goto 300 !player cloaked? + if (.not. ldis(shpcon(k,KVPOS), shpcon(k,KHPOS), + + base(j,KVPOS,i), base(j,KHPOS,i), 4)) goto 300 !player in range? + Vfrom = base(j,KVPOS,i) ; Hfrom = base(j,KHPOS,i) + Vto = shpcon(k,KVPOS) ; Hto = shpcon(k,KHPOS) + dispto = (DXFSHP + (2 - i)) * 100 + k ; iwhat = 1 + dispfr = (DXFBAS + (i - 1)) * 100 + j ; shjump = 0 + id = pdist (Vfrom, Hfrom, Vto, Hto) + call phadam (3-i, k, id, 200/numply, .FALSE.) !hit him! + tmscor(i,KPEDAM) = tmscor(i,KPEDAM) + ihita + shstfr = base(j,3,i) ; shcnfr = 1 + if (klflg .ne. 0) tmscor(i,KPEKIL) = tmscor(i,KPEKIL) + 5000 + 200 call pridis (shpcon(k,KVPOS), shpcon(k,KHPOS), KRANGE, + + team, 0) + call pridis (shpcon(k,KVPOS), shpcon(k,KHPOS), 4, 0, 1) + dbits = dbits .or. bits(k) + call makhit !send hit message + 300 continue + +*...........Attack the Romulan (if he's alive) + + if (.not. ROM) goto 400 !Romulan alive? + if (.not. ldis (locr(KVPOS), locr(KHPOS), base(j,KVPOS,i), + + base(j,KHPOS,i), 4)) goto 400 !Romulan in range? + dispto = DXROM * 100 ; shjump = 0 + dispfr = (DXFBAS + (i - 1)) * 100 + j ; iwhat = 1 + Vfrom = base(j,KVPOS,i) ; Hfrom = base(j,KHPOS,i) + Vto = locr(KVPOS) ; Hto = locr(KHPOS) + id = pdist (Vfrom, Hfrom, Vto, Hto) + call pharom (200/numply, id) !hit Romulan! + shstfr = base(j,3,i) ; shcnfr = 1 + shstto = erom ; shcnto = 1 + call pridis (locr(KVPOS), locr(KHPOS), KRANGE, 0, 0) + tmscor(i,KPRKIL) = tmscor(i,KPRKIL) + ihita + if (.not. ROM) tmscor(i,KPRKIL) = tmscor(i,KPRKIL) + 5000 + call makhit !send hit message + 400 continue + 500 continue + return + + end diff --git a/pdp10/compuserve/BLKDAT.FOR b/pdp10/compuserve/BLKDAT.FOR new file mode 100644 index 0000000..0b1fa96 --- /dev/null +++ b/pdp10/compuserve/BLKDAT.FOR @@ -0,0 +1,105 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + BLOCK DATA + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + + data (device(i), i = 1, KNDEV)/ + + 2HSH, 2HWA, 2HIM, 2HLS, 2HTO, 2HPH, 2HCO, 2HRA, 2HTR / + + data ((isaydo(i,j), i = 1, 2), j = 1, KNCMD)/ + + 'BAses', ' ', + + 'BUild', ' ', + + 'Captu', 're ', + + 'DAmag', 'es ', + + 'DOck ', ' ', + + 'Energ', 'y ', + + 'Gripe', ' ', + + 'Help ', ' ', + + 'Impul', 'se ', + + 'List ', ' ', + + 'Move ', ' ', + + 'News ', ' ', + + 'PHase', 'rs ', + + 'PLane', 'ts ', + + 'POint', 's ', + + 'Quit ', ' ', + + 'RAdio', ' ', + + 'REpai', 'r ', + + 'SCan ', ' ', + + 'SEt ', ' ', + + 'SHiel', 'ds ', + + 'SRsca', 'n ', + + 'STatu', 's ', + + 'SUmma', 'ry ', + + 'TArge', 'ts ', + + 'TEll ', ' ', + + 'TIme ', ' ', + + 'TOrpe', 'dos ', + + 'TRact', 'or ', + + 'TYpe ', ' ', + + 'Users', ' ', + + '*Debu' ,'g ', + + '*Pass' ,'word '/ + + data ((xhelp(i,j), i = 1, 2), j = 1, KNXTR)/ + + 'CTL-C', ' ', + + ' ', ' ', + + 'INTRO', ' ', + + 'HInts', ' ', + + 'INput', ' ', + + 'Outpu', 't ', + + 'PAuse', 's ', + + 'PRega', 'me '/ + + data ((ttydat(i,j), i = 1, 2), j = 1, KNTTY)/ + + 'ACT-I', 'V ', + + 'ADM-2', ' ', + + 'ADM-3', 'a ', + + 'DATAP', 'OINT ', + + 'ACT-V', ' ', + + 'SOROC', ' ', + + 'BEEHI', 'VE ', + + 'CRT ', ' '/ + + data ((names(i,j), j = 1, 3), i = 1, KNPLAY)/ + + 'Lexin', 'gton ', ' L', + + 'Nimit', 'z ', ' N', + + 'Savan', 'nah ', ' S', + + 'Vulca', 'n ', ' V', + + 'Yorkt', 'own ', ' Y', + + 'Cobra', ' ', ' C', + + 'Demon', ' ', ' D', + + 'Hawk ', ' ', ' H', + + 'Jacka', 'l ', ' J', + + 'Wolf ', ' ', ' W'/ + + data (bits(i), i = 1, 10)/ + + "1, "2, "4, "10, "20, "40, "100, "200, "400, "1000/ + + data (sbits(i), i = 0, 2)/ NEUBIT , FEDBIT , EMPBIT / + + data (cmdbts(i), i = 1, KNCMD)/ + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0/ + + end diff --git a/pdp10/compuserve/BUILD.FOR b/pdp10/compuserve/BUILD.FOR new file mode 100644 index 0000000..fdc9d5a --- /dev/null +++ b/pdp10/compuserve/BUILD.FOR @@ -0,0 +1,114 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine is used to fortify captured planets against enemy +C assault, and eventually to transform them into fully operational +C starbases. Each build strengthens the planetary phaser banks, +C with five accumulated 'builds' transforming the planet into a +C starbase (if your team possesses less than the maximum number +C of operational starbases at that time). + + subroutine BUILD (*) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + v = etim(tim0) + (slwest * 1000) + 4000 + tem = locate(2) + 100 if (tem .lt. 0) return 1 !abort 'build' + if (tem .ne. 0) goto 200 + tem = reloc(2) + goto 100 + + 200 Vloc = vallst(1) ; Hloc = vallst(2) + if (.not. ldis(shpcon(who,KVPOS), shpcon(who,KHPOS), Vloc, + + Hloc, 1)) goto 900 !adjacent to sector given? + c = dispc (Vloc,Hloc) + if ((c .lt. DXNPLN) .or. (c .gt. DXEPLN)) goto 800 !is it a planet? + if ((team + DXNPLN) .ne. c) goto 600 !not yet captured! + +* 5th build, but already KNBASE active bases + + i = dispx (Vloc,Hloc) + if ((locpln(i,3) .eq. 4) .and. (nbase(team) .eq. KNBASE)) goto 700 + locpln(i,3) = locpln(i,3) + 1 + if (locpln(i,3) .eq. 5) goto 250 + call odec (locpln(i,3),0) !inform player of number of builds + call out (build3,0) + if (locpln(i,3) .gt. 1) call outc ('s') + call crlf + 250 tpoint(KPBBAS) = tpoint(KPBBAS) + (500 * locpln(i,3)) + if (locpln(i,3) .ne. 5) goto 500 !building complete? + call lock (plnlok,'BUILD') !lock LOCPLN array + if (.not. lkfail) goto 251 + call out ('Sorry, Captain, but the construction crew is', 1) + call out ('busy with repairs at the moment.', 1) + return 1 + +251 do 300 j = 1, KNBASE !search for empty base slot + if (base(j,3,team) .le. 0) goto 400 + 300 continue + locpln(i,3) = locpln(i,3) - 1 + call unlock (plnlok) + goto 700 + +*.......Update starbase information + + 400 tpoint(KPBBAS) = tpoint(KPBBAS) + 2500 + nbase(team) = nbase(team) + 1 + base(j,4,team) = locpln(i,4) !transfer LIST information + call plnrmv (i,team) !update planet information + call unlock (plnlok) !unlock LOCPLN array + base(j,KVPOS,team) = Vloc + base(j,KHPOS,team) = Hloc + base(j,3,team) = 1000 + call setdsp (Vloc, Hloc, ((DXFBAS + (team - 1)) * 100) + j) + +*.......Send player message ... + + call crlf + call odisp (disp (shpcon(who,KVPOS),shpcon(who,KHPOS)), 1) + call out (build1,0) + call prloc (Vloc, Hloc, 0, 0, ocflg, oflg) + call out (build2,0) + call odisp (disp (Vloc, Hloc), 0) + call crlf + 500 ptime = v - etim(tim0) + return + +*.......Error messages + + 600 call out (build7,0) !Planet not yet captured + return 1 + + 700 call out (build4,0) !already KNBASE bases + call odisp ((team+2) * 100, 0) + call out (build5,1) + return 1 + + 800 call out (noplnt,1) !no planet here! + return 1 + + 900 call odisp (disp(shpcon(who,KVPOS),shpcon(who,KHPOS)), 1) !not adjacent to sector given! + call out (captu5,1) + return 1 + + end diff --git a/pdp10/compuserve/CAPTUR.FOR b/pdp10/compuserve/CAPTUR.FOR new file mode 100644 index 0000000..99fa7d1 --- /dev/null +++ b/pdp10/compuserve/CAPTUR.FOR @@ -0,0 +1,127 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine is used to capture neutral or enemy planets. +C Player must be adjacent to planet specified (in 'orbit'). +C If a planet has been fortified by the enemy (using the BUILD +C command), the pause time is increased 1 second and the +C attacking ship's energy is reduced 50 units for each BUILD. + + subroutine CAPTUR (*) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + v = etim (tim0) + 5000 + tem = locate(2) + 100 if (tem .lt. 0) return 1 !abort 'capture' + if (tem .ne. 0) goto 200 + tem = reloc(2) + goto 100 + + 200 Vloc = vallst(1) ; Hloc = vallst(2) + if (.not. ldis(shpcon(who,KVPOS), shpcon(who,KHPOS), Vloc, + + Hloc, 1)) goto 500 !adjacent to sector specified? + c = dispc (Vloc, Hloc) + if ((c .lt. DXNPLN) .or. (c .gt. DXEPLN)) goto 400 !is there a planet here? + if (c .eq. (DXNPLN + team)) goto 600 !planet already captured? + +*.......Capture planet for the good guys! + +300 call lock (plnlok,'CAPTUR') !lock LOCPLN array + if (.not. lkfail) goto 301 + call out ('The planet''s government refuses to surrender.', 1) + return 1 +301 tcap = c - DXNPLN + if (tcap .ne. 0) call pridis (Vloc, Hloc, KRANGE, tcap, 0) + call pridis (Vloc, Hloc, 4, 0, 1) + +*.......Update planet information + + i = dispx (Vloc, Hloc) + if (tcap .ne. 0) call baskil (tcap) + if (tcap .ne. 0) numcap(tcap) = numcap(tcap) - 1 + numcap(team) = numcap(team) + 1 + phit = 50 + (30 * locpln(i,3)) !set planet's phaser strength + shstfr = locpln(i,3) + v = v + locpln(i,3) * 1000 + shpcon(who,KSNRGY) = shpcon(who,KSNRGY) - locpln(i,3) * 500 + locpln(i,3) = 0 + call unlock (plnlok) !unlock LOCPLN array + dispfr = disp (Vloc, Hloc) ; iwhat = 1 + call setdsp (Vloc, Hloc, ((team + DXNPLN) * 100) + i) + dispto = who + (team * 100) ; shjump = 0 + Vfrom = Vloc ; Hfrom = Hloc + Vto = shpcon(who,KVPOS) ; Hto = shpcon(who,KHPOS) + id = pdist (Vfrom, Hfrom, Vto, Hto) + call phadam (team, who, id, phit, .FALSE.) !planet defends itself! + if (tcap .ne. 0) tmscor(tcap,KPEDAM) = tmscor(tcap,KPEDAM) + ihita + if ((klflg .ne. 0) .and. (tcap .ne. 0)) + + tmscor(tcap,KPEKIL) = tmscor(tcap,KPEKIL) + 5000 + call pridis (shpcon(who,KVPOS), shpcon(who,KHPOS), KRANGE, + + team, 0) + call pridis (shpcon(who,KVPOS), shpcon(who,KHPOS), 4, 0, 1) + +*.......Inform player of hit + + call crlf + call odisp (who + (team * 100), 1) + call out (captu0,0) + call odisp ((tcap + DXNPLN) * 100, 1) + call prloc (Vloc, Hloc, 1, 0, ocflg, oflg) + call makhit + tpoint(KPPCAP) = tpoint(KPPCAP) + 1000 !get points + ptime = v - etim(tim0) !pause for capture + if ((shpcon(who,KSDAM) .lt. KENDAM) .and. + + (shpcon(who,KSNRGY) .gt. 0)) return !if player alive, return + +*.......Player dies! + + if (team .eq. 1) call out (captu1,1) + if (team .eq. 2) call out (captu2,1) + call odisp (who + (team * 100), 1) + call out (captu4,1) + return + +*.......Error messages + + 400 idsp = dispc (Vloc, Hloc) !no planet at location + if (idsp .le. 0) call out (noplnt,1) + if ((team .eq. idsp) .or. (team+2 .eq. idsp)) call out (nosur1,1) + if ((3-team .eq. idsp) .or. (5-team .eq. idsp)) + + call out (nosur2,1) + if (idsp .eq. DXROM) call out (nosur3,1) + if (idsp .ge. DXSTAR) call out (nosur4,1) + return 1 + + 500 call crlf !not adjacent to specified location + call odisp (disp(shpcon(who,KVPOS),shpcon(who,KHPOS)), 1) + call out (captu5,1) + return 1 + + 600 if (oflg .eq. long) goto 700 !planet already captured + call out (captu7, 1) + goto 800 + 700 if (team .eq. 1) call out (captu6,1) + if (team .eq. 2) call out (captu8,1) + 800 return 1 + + end diff --git a/pdp10/compuserve/CHECK.FOR b/pdp10/compuserve/CHECK.FOR new file mode 100644 index 0000000..4bd7e38 --- /dev/null +++ b/pdp10/compuserve/CHECK.FOR @@ -0,0 +1,97 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine is used by MOVE, TORP, ROMDRV, and ROMTOR to +C check the projected path of a ship or torpedo for objects +C in the way. +C INPUT +C H,V Initial coordinate +C DH,DV Relative V and H displacement (for direction only) +C Dist Maximum V or H displacement (distance to travel) +C Displ Displacement per sector (abs(Displ) < 0.50) +C +C OUTPUT +C H1,V1 Final location +C H2,V2 Location of object that blocked path, else final location +C Dcode DISP code of object that blocked path, else 0 +C DSH,DSV Delta H and Delta V to add to object to get displacement + + subroutine CHECK (H, V, dH, dV, dist, displ) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /chkout/ H1, V1, H2, V2, dcode, dHs, dVs + real rH, rV, displ, dHs, dVs + + H1 = H ; V1 = V ; dcode = 0 + if (iabs(dV) .gt. iabs(dH)) goto 400 + + inc = isign (1,dH) ; dHs = float (inc) + dVs = float(dV) / float(iabs(dH)) + displ + H2 = H ; rV = float(V) + do 300 i = 1, dist + H2 = H2 + inc ; if (.not. ingal(5,H2)) goto 900 + rV = rV + dVs + call chkpnt (rV, iV1, iV2) + if (.not. ingal(iV1,5)) goto 900 + V2 = iV1 + if (disp(H2,V2) .gt. 0) goto 800 !ran into something + if (iV2 .eq. 0) goto 100 + if (.not. ingal(iV2,5)) goto 900 + V2 = iV2 + if (disp(H2,V2) .gt. 0) goto 800 !ran into something + V1 = int(rV + ran(0)) + goto 200 + 100 V1 = int(rV + .5) + 200 H1 = H2 + 300 continue + V2 = V1 + return !made it to destination + + 400 inc = isign (1, dV) ; dVs = float (inc) + dHs = float(dH) / float(iabs(dV)) + displ + V2 = V ; rH = float(H) + do 700 i = 1, dist + V2 = V2 + inc ; if (.not. ingal(V2,5)) goto 900 + rH = rH + dHs + call chkpnt (rH, iH1, iH2) + if (.not. ingal(5,iH1)) goto 900 + H2 = iH1 + if (disp(H2,V2) .gt. 0) goto 800 !ran into something + if (iH2 .eq. 0) goto 500 + if (.not. ingal(5,iH2)) goto 900 + H2 = iH2 + if (disp(H2,V2) .gt. 0) goto 800 !ran into something + H1 = int(rH + ran(0)) + goto 600 + 500 H1 = int(rH + .5) + 600 V1 = V2 + 700 continue + H2 = H1 + return !made it to destination + + 800 dcode = disp(H2,V2) !ran into something + return + + 900 H2 = H1 ; V2 = V1 !out of the galaxy + return + + end diff --git a/pdp10/compuserve/CHKPNT.FOR b/pdp10/compuserve/CHKPNT.FOR new file mode 100644 index 0000000..c40aec7 --- /dev/null +++ b/pdp10/compuserve/CHKPNT.FOR @@ -0,0 +1,43 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine is used by CHECK to determine the next position +C on the display board to check for objects. +C If the fractional part of C is greater than 0.60, return +C INT(C)+1 in C1, and 0 in C2 +C If the fractional part of C is less than 0.40, return +C INT(C) in C1, and 0 in C2 +C Otherwise, return INT(C) in C1 and INT(C)+1 in C2 + + subroutine CHKPNT (c, c1, c2) + include 'param/nolist' + real c + + if (iabs (mod (int(c*100), 100) - 50) .lt. 10) goto 100 + + c1 = int(c + .5) + c2 = 0 + return + + 100 c1 = int(c) + c2 = c1 + 1 + return + + end diff --git a/pdp10/compuserve/CISHNG.MAC b/pdp10/compuserve/CISHNG.MAC new file mode 100644 index 0000000..d76b62d --- /dev/null +++ b/pdp10/compuserve/CISHNG.MAC @@ -0,0 +1,120 @@ +; This file is part of Decwar. +; Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +; Computation Center and Harris Newman. + +; This program 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 3, or (at your option) +; any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; 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., 51 Franklin Street - Fifth Floor, Boston, MA +; 02110-1301, USA. + + +Title cishng - establish a hang-up intercept (CIS monitor) + + Search SYSMAC + twoseg + reloc 400000 +opdef getnam [calli -14] +OPDEF STINI. [CALLI -162] +OPDEF SCHNA. [CALLI -163] +OPDEF SCHND. [CALLI -164] +OPDEF SEVTA. [CALLI -165] +OPDEF SEVTD. [CALLI -166] +OPDEF DEBRK. [CALLI -174] +OPDEF SRISW. [CALLI -175] + + Internal cishng + Routine cishng + DMOVE TA,[ -1 + [ 2,,CHNTBL + 2,,LVLTBL + 0,,0 + ] + ] + STINI. TA, + JRST [OUTSTR [ASCIZ " +? STINI. failed! +"] + EXIT] + DMOVE TA,[ -1 + 3,,1 + ] + SEVTA. TA, + JRST SEVFLD + dmove ta,[ -1 + 104,,2 + ] + sevta. ta, + jrst sevfld + DMOVE TA,[ -1 + 700000,,0 + ] + SCHNA. TA, + JRST SCHFLD + RETURN +;;; +havenq: setom hv.lok ; tell lock. routine that we have resource + movem $v,save$v + seto $v, + wake $v, ; wake the lock. routine immediately + jfcl + move $v,save$v + debrk. ; return to lock. + +hang: setom hungup## ; set hung up flag + debrk. 1, ; debreak and retain control + jfcl + movem $v,hang$v ; save a register + movem ta,hangta ; and another + move $v,lvltbl ; if executing a ttcall +hang.0: move ta,0($v) ; get the current instruction being executed + camn ta,[output 0,] ; or "output tty," + jrst hang.1 + and ta,[777000,,0] ; mask everything but instruction bits + camn ta,[xct] ; if doing an execute + jrst [hrrz $v,0($v) ; then get the address of that instr. + cain $v,$v ; if one of the saved regs + movei $v,hang$v ; then map it into proper one + cain $v,ta + movei $v,hangta + jrst hang.0] ; and look at the xct'ed instr. + camn ta,[ttcall] ; if doing a ttcall +hang.1: aos lvltbl ; then return to the ttcall + 1 + seto $v, ; wake any hibernate going on + wake $v, + jfcl + move $v,hang$v + move ta,hangta + jrstf @lvltbl + +SCHFLD: OUTSTR [ASCIZ " +? SCHNA. failed! +"] + EXIT +SEVFLD: OUTSTR [ASCIZ " +?SEVTA> failed! +"] + EXIT + +chntbl: + XWD 1,HANG + xwd 2,havenq + + lit ; put lits in hiseg + reloc 0 ; rest must be in impure core +save$v: block 1 ; saves contents of $v in havenq +hang$v: block 1 ; saves contents of $v in hang +hangta: block 1 ; save for register ta +hv.lok::block 1 ; set to -1 when enq. request is granted +LVLTBL: block 2 + reloc + END diff --git a/pdp10/compuserve/CLRBUF.FOR b/pdp10/compuserve/CLRBUF.FOR new file mode 100644 index 0000000..77ca683 --- /dev/null +++ b/pdp10/compuserve/CLRBUF.FOR @@ -0,0 +1,30 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C When this routine is called because ^C is typed it clears the +C player's input buffer. + + subroutine CLRBUF + + call out ("034160703400,0) !4 bells + call clear !clear the input buffer + return + + end diff --git a/pdp10/compuserve/DAMAGE.FOR b/pdp10/compuserve/DAMAGE.FOR new file mode 100644 index 0000000..64b62d9 --- /dev/null +++ b/pdp10/compuserve/DAMAGE.FOR @@ -0,0 +1,80 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine reports on current ship device damages (if any). +C STOKEN = 2 if this is a call from the DAMAGE command, +C STOKEN = 3 if this is a call from the REPAIR routine. +C + subroutine DAMAGE (stoken) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + call crlf + do 100 i = 1, KNDEV !anything damaged? + if (shpdam(who,i) .gt. 0) goto 200 + 100 continue + call out (alldok,1) !nope! + goto 1800 + +*.......Specific device information requested? + + 200 if (typlst(stoken) .ne. KALF) goto 900 + do 800 i = stoken, KMAXTK + if (typlst(i) .ne. KALF) goto 1800 + do 700 j = 1, KNDEV + if (.not. (equal(tknlst(i), device(j)))) goto 700 + call odev (j) + if (oflg) 300, 400, 500 + 300 call space ; goto 600 + 400 call tab (10) ; goto 600 + 500 call tab (19) + 600 call oflt (shpdam(who,j), 4) + if (oflg .eq. long) call out (units1,0) + call crlf + 700 continue + 800 continue + goto 1800 + +*.......General report on ALL damaged devices. + + 900 if (oflg) 1200, 1100, 1000 +1000 call out (damrep,0) + call odisp(disp(shpcon(who,KVPOS),shpcon(who,KHPOS)), 0) + call skip (2) +1100 call out (dmhdr1,0) + if (oflg .eq. long) call spaces (9) + call out (dmhdr2,2) +1200 do 1700 i = 1, KNDEV !scan the devices + if (shpdam(who,i) .le. 0) goto 1700 !damaged? + call odev (i) + if (oflg) 1300, 1400, 1500 +1300 call space ; goto 1600 +1400 call tab (10) ; goto 1600 +1500 call tab (19) +1600 call oflt (shpdam(who,i), 4) + if (oflg .eq. long) call out (units1,0) + call crlf +1700 continue + +1800 return + + end diff --git a/pdp10/compuserve/DECFIX.MAC b/pdp10/compuserve/DECFIX.MAC new file mode 100644 index 0000000..2a78e33 --- /dev/null +++ b/pdp10/compuserve/DECFIX.MAC @@ -0,0 +1,51 @@ +; This file is part of Decwar. +; Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +; Computation Center and Harris Newman. + +; This program 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 3, or (at your option) +; any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; 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., 51 Franklin Street - Fifth Floor, Boston, MA +; 02110-1301, USA. + + + title decfix - get decwar off the swapper + + search uuosym + +start: reset + move 1,[^d8,,filop] + filop. 1, + outstr [asciz /?Broken. +/] + reset + exit 1, + exit + +filop: xwd 400001,.fornm ;rename + exp 17 +; sixbit /gam/ ;commented out by drforbin + sixbit /dskc/ ;changed for proper device + exp 0 + exp 0 + xwd renblk,lokblk + exp 0 + exp 0 + +renblk: +lokblk: sixbit /decwar/ + sixbit /exe/ + exp 0 +; xwd 5,30 ;commented by drforbin + xwd 1,27 ;changed for proper p,pn + + end start diff --git a/pdp10/compuserve/DEFINE.FOR b/pdp10/compuserve/DEFINE.FOR new file mode 100644 index 0000000..d3b9db8 --- /dev/null +++ b/pdp10/compuserve/DEFINE.FOR @@ -0,0 +1,93 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + subroutine DEFINE + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + if (ntok .eq. 1) goto 500 + if (typlst(2) .eq. KALF) goto 200 + 100 call out (defn01,1) + goto 1500 + + 200 g = tknlst(1,2) + p = 3 + if (ntok .gt. 2) goto 600 + do 300 i = 1, KNGRP + if (equal(tknlst(1,2), group(i,1), 5, 5)) goto 400 + 300 continue + call out (defn02,0) + call outw (tknlst(1,2)) ; call crlf + goto 1500 + 400 call out (defn03,0) + call outw (group(i,1)) ; call crlf + group(i,1) = 0 ; group (i,2) = 0 + return + + 500 call out (defn04,0) + call gtkn + if (typlst(1) .eq. KEOL) goto 1500 + if (typlst(1) .ne. KALF) goto 100 + g = tknlst(1,1) + p = 2 + if (ntok .gt. 1) goto 600 + call out (defn05,0) + call gtkn + if (typlst(1) .eq. KEOL) goto 1500 + p = 1 + + 600 ff = 0 + do 700 i = KNGRP, 1, -1 + if (group(i,1) .eq. 0) ff = i + if (equal(g, group(i,1), 5, 5)) goto 800 + 700 continue + if (ff .ne. 0) goto 900 + call out (defn06,1) + goto 1500 + 800 ff = i + + 900 gbits = 0 + do 1400 i = p, ntok + do 1000 j = 1, KNPLAY + if (equal(tknlst(1,i), names(j,1), 5, 5)) goto 1100 +1000 continue + call out (defn07,0) + call outw (tknlst(1,i)) ; call crlf + goto 1500 +1100 if (j .ne. who) goto 1200 + call out (defn08,1) + goto 1400 +1200 if (job(j,KJOB) .ne. 0) goto 1300 + call out (defn09,0) + call out2w (names(j,1),names(j,2)) ; call crlf +1300 gbits = gbits .or. bits(j) +1400 continue + + if (gbits .ne. 0) goto 1600 +1500 call out (defn10,1) + return + +1600 group(ff,1) = g + group(ff,2) = gbits + return + + end diff --git a/pdp10/compuserve/DIST.FOR b/pdp10/compuserve/DIST.FOR new file mode 100644 index 0000000..f70beda --- /dev/null +++ b/pdp10/compuserve/DIST.FOR @@ -0,0 +1,86 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine is used by the Romulan to find the nearest attackable +C object (ship or base). + + subroutine DIST (ip, np, num) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /distlc/ V(4), H(4), iV(4), z(4) + + call blkset (z, (KGALV * KGALH + 1), 4) + RV = locr(KVPOS) ; RH = locr(KHPOS) + +*.......Find closest Federation ship + + do 100 j = 1, KNPLAY / 2 + if (.not. alive(j)) goto 100 + if (disp(shpcon(j,KVPOS),shpcon(j,KHPOS)) .le. 0) goto 100 + ztem = (RV - shpcon(j,KVPOS)) * (RV - shpcon(j,KVPOS)) + + + (RH - shpcon(j,KHPOS)) * (RH - shpcon(j,KHPOS)) + if (ztem .ge. z(1)) goto 100 + iV(1) = j ; z(1) = ztem + V(1) = shpcon(j,KVPOS) ; H(1) = shpcon(j,KHPOS) + 100 continue + +*.......Find closest Klingon ship + + do 200 j = (KNPLAY / 2) + 1, KNPLAY + if (shpcon(j,KVPOS) .eq. 0) goto 200 + if (disp(shpcon(j,KVPOS),shpcon(j,KHPOS)) .le. 0) goto 200 + ztem = (RV - shpcon(j,KVPOS)) * (RV - shpcon(j,KVPOS)) + + + (RH - shpcon(j,KHPOS)) * (RH - shpcon(j,KHPOS)) + if (ztem .ge. z(2)) goto 200 + iV(2) = j ; z(2) = ztem + V(2) = shpcon(j,KVPOS) ; H(2) = shpcon(j,KHPOS) + 200 continue + +*.......Find closest Federation and Klingon starbase + + do 400 k = 1, 2 + if (nbase(k) .le. 0) goto 400 + do 300 j = 1, KNBASE + if (base(j,3,k) .le. 0) goto 300 + if (disp (base(j,KVPOS,k), base(j,KHPOS,k)) .eq. 0) goto 300 + ztem = (RV - base(j,KVPOS,k)) * (RV - base(j,KVPOS,k)) + + + (RH - base(j,KHPOS,k)) * (RH - base(j,KHPOS,k)) + if (ztem .ge. z(2+k)) goto 300 + iV(2+k) = j ; z(2+k) = ztem + V(2+k) = base(j,KVPOS,k) ; H(2+k) = base(j,KHPOS,k) + 300 continue + 400 continue + +*.......Figure out which of the above is closest of all + + np = 1 + if ((z(2) .lt. z(1)) .or. ((z(1) .eq. z(2)) .and. + + (iran(2) .eq. 1))) np = 2 + if ((z(3) .lt. z(np)) .or. ((z(3) .eq. z(np)) .and. + + (iran(2) .eq. 1))) np = 3 + if ((z(4) .lt. z(np)) .or. ((z(4) .eq. z(np)) .and. + + (iran(2) .eq. 1))) np = 4 + ip = iV(np) + num = pdist (V(np), H(np), RV, RH) + return + + end diff --git a/pdp10/compuserve/DOCK.FOR b/pdp10/compuserve/DOCK.FOR new file mode 100644 index 0000000..5881641 --- /dev/null +++ b/pdp10/compuserve/DOCK.FOR @@ -0,0 +1,83 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine checks for an adjacent friendly starbase or planet, +C and if either is found, the ship's energy and supplies are +C fractionally increased (up to the maximum possible). Bases +C supply twice the energy and supplies per dock as do planets. + + subroutine DOCK (*) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + +*.......Check for friendly base in range + + v = etim(tim0) + (slwest * 1000) + 1000 + ifract=0 + do 100 j = 1, KNBASE + if (base(j,3,team) .le. 0) goto 100 !is base alive? + if (ldis (shpcon(who,KVPOS), shpcon(who,KHPOS), + + base(j,KVPOS,team), base(j,KHPOS,team), 1)) + + ifract = ifract + 2 !is base within 1 sector? + 100 continue + +*.......Check for friendly planet in range + + if (numcap(team) .le. 0) goto 300 + do 200 i = 1, nplnet + if ((team + DXNPLN) .ne. dispc(locpln(i,KVPOS),locpln(i,KHPOS))) + + goto 200 !planet friendly? + if (.not. ldis(shpcon(who,KVPOS), shpcon(who,KHPOS), + + locpln(i,KVPOS), locpln(i,KHPOS), 1)) goto 200 !planet within 1 sector? + ifract=ifract + 1 + 200 continue + +*.......No adjacent bases or planets + + 300 if (ifract .ne. 0) goto 400 + call crlf + call odisp (disp(shpcon(who,KVPOS),shpcon(who,KHPOS)), 1) + call out (dock01,1) + return 1 + +*.......Dock the ship (R & R)!! + + 400 if (.not. alive(who)) return 1 !ship already dead + shpcon(who,KNTORP) = min0((shpcon(who,KNTORP) + (ifract*5)), 10) + shpcon(who,KSNRGY) = min0((shpcon(who,KSNRGY) + (ifract*5000)), + + 50000) + shpcon(who,KSSHPC) = min0((shpcon(who,KSSHPC) + (100*ifract)), + + 1000) + shpcon(who,KSDAM) = max0 ((shpcon(who,KSDAM) - (ifract*500)), 0) + if (docked(who)) shpcon(who,KSDAM) = max0((shpcon(who,KSDAM) - + + (ifract*500)), 0) + docked(who) = .TRUE. + shpcon(who,KLFSUP) = 5 ; shpcon(who,KSPCON) = GREEN + + call out (dockin,1) + if (equal(tknlst(2), 'STATUS')) + + call status (3) !status report? + + ptime = v - etim(tim0) !compute pause time for DOCK. + return + + end diff --git a/pdp10/compuserve/DSHIP.FOR b/pdp10/compuserve/DSHIP.FOR new file mode 100644 index 0000000..c4556d4 --- /dev/null +++ b/pdp10/compuserve/DSHIP.FOR @@ -0,0 +1,39 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine is called periodically by GETCMD to check +C for dead ships. + + subroutine DSHIP + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + do 100 i = 1, KNPLAY + if (.not. alive(i)) go to 100 !ship in use? + active(i) = active(i) + 1 + if (active(i) .lt. 2) go to 100 !inactive? + active(i) = 0 + call free (i) !remove dead ship + 100 continue + return + + end diff --git a/pdp10/compuserve/DW2.FOR b/pdp10/compuserve/DW2.FOR new file mode 100644 index 0000000..a25cdae --- /dev/null +++ b/pdp10/compuserve/DW2.FOR @@ -0,0 +1,106 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + BLOCK DATA + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + + data (device(i), i = 1, KNDEV)/ + + 2HSH, 2HWA, 2HIM, 2HLS, 2HTO, 2HPH, 2HCO, 2HRA, 2HTR / + + data ((isaydo(i,j), i = 1, 2), j = 1, KNCMD)/ + + 'BAses', ' ', + + 'BUild', ' ', + + 'Captu', 're ', + + 'DAmag', 'es ', + + 'DOck ', ' ', + + 'Energ', 'y ', + + 'Gripe', ' ', + + 'Help ', ' ', + + 'Impul', 'se ', + + 'List ', ' ', + + 'Move ', ' ', + + 'News ', ' ', + + 'PHase', 'rs ', + + 'PLane', 'ts ', + + 'POint', 's ', + + 'Quit ', ' ', + + 'RAdio', ' ', + + 'REpai', 'r ', + + 'SCan ', ' ', + + 'SEt ', ' ', + + 'SHiel', 'ds ', + + 'SRsca', 'n ', + + 'STatu', 's ', + + 'SUmma', 'ry ', + + 'TArge', 'ts ', + + 'TEll ', ' ', + + 'TIme ', ' ', + + 'TOrpe', 'dos ', + + 'TRact', 'or ', + + 'TYpe ', ' ', + + 'Users', ' ', + + '*Debu' ,'g ', + + '*Pass' ,'word '/ + + data ((xhelp(i,j), i = 1, 2), j = 1, KNXTR)/ + + 'CTL-C', ' ', + + ' ', ' ', + + 'INTRO', ' ', + + 'HInts', ' ', + + 'INput', ' ', + + 'Outpu', 't ', + + 'PAuse', 's ', + + 'PRega', 'me '/ + + data ((ttydat(i,j), i = 1, 2), j = 1, KNTTY)/ + + 'ACT-I', 'V ', + + 'ADM-2', ' ', + + 'ADM-3', 'a ', + + 'DATAP', 'OINT ', + + 'ACT-V', ' ', + + 'SOROC', ' ', + + 'BEEHI', 'VE ', + + 'CRT ', ' '/ + + data ((names(i,j), j = 1, 3), i = 1, KNPLAY)/ + + 'Lexin', 'gton ', ' L', + + 'Nimit', 'z ', ' N', + + 'Savan', 'nah ', ' S', + + 'Vulca', 'n ', ' V', + + 'Yorkt', 'own ', ' Y', + + 'Cobra', ' ', ' C', + + 'Demon', ' ', ' D', + + 'Hawk ', ' ', ' H', + + 'Jacka', 'l ', ' J', + + 'Wolf ', ' ', ' W'/ + + data (bits(i), i = 1, 18)/ + + "1, "2, "4, "10, "20, "40, "100, "200, "400, "1000, "2000, + + "4000, "10000, "20000, "40000, "100000, "200000, "400000/ + + data (sbits(i), i = 0, 2)/ NEUBIT , FEDBIT , EMPBIT / + + data (cmdbts(i), i = 1, KNCMD)/ + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0/ + + end diff --git a/pdp10/compuserve/ENDGAM.FOR b/pdp10/compuserve/ENDGAM.FOR new file mode 100644 index 0000000..81bb087 --- /dev/null +++ b/pdp10/compuserve/ENDGAM.FOR @@ -0,0 +1,76 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine is called whenever a base or planet is destroyed +C to see if the game is over. (all the planets gone, and one +C side's bases). If so, the appropriate message is printed out +C and the job is returned to monitor level. + + subroutine ENDGAM + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /local/ dummy(locsiz) + common /polocl/ total(4) + external monit + + if (ENDFLG) goto 100 !game already over? + if (nplnet .gt. 0) return !any planets left? + if (min0 (nbase(1), nbase(2)) .gt. 0) return !any bases left? + +*.......The game is over!! + + call kilhgh + endflg = .true. + + 100 call out (endgm0,1) + if (max0 (nplnet, nbase(1), nbase(2)) .ne. 0) goto 300 + call out (endgm1, 1) + endflg = -2 ! -2 implies total destruction +300 if (nbase(1) .eq. 0) call out (endgm3,1) + if (nbase(2) .eq. 0) call out (endgm4,1) + if ((team .eq. 1) .and. (nbase(1) .eq. 0)) call out (endgm5,1) + if ((team .eq. 1) .and. (nbase(2) .eq. 0)) call out (endgm6,1) + if ((team .eq. 2) .and. (nbase(1) .eq. 0)) call out (endgm7,1) + if ((team .eq. 2) .and. (nbase(2) .eq. 0)) call out (endgm8,1) + if (who .eq. 0) goto 400 !'player' from restart loop. + txppn = job(who, kppn) + txnm1 = job(who, knam1) + txnm2 = job(who, knam2) + txsh1 = names (who, 1) + txsh2 = names (who, 2) + whowon = 1 + if (nbase(1) .lt. nbase(2)) whowon = 2 + txwhy = 1 ! assume this player won + if (team .ne. whowon) txwhy = 0 ! not same team, so lost! + if (endflg .eq. -2) txwhy = 0 ! or everyone loses! + txtim = etim(job(who, KJOBTM)) + txtem = team - 1 + call points (.TRUE.) + txtot = total (1) + call updsta (txppn,txnm1,txnm2,txsh1,txsh2,txtot,txtim,txwhy, + + txtem, who) + call free (who) + who = 0 +c-- call shosta(0) ! show current standings + 400 call exit + + end diff --git a/pdp10/compuserve/ENERGY.FOR b/pdp10/compuserve/ENERGY.FOR new file mode 100644 index 0000000..7ca43a1 --- /dev/null +++ b/pdp10/compuserve/ENERGY.FOR @@ -0,0 +1,109 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine allows ship-to-ship transfer of energy between +C friendly ships. There is a 10% loss during the transfer. + + subroutine ENERGY + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + call crlf + index = 2 + +*.......Input ship name and energy to transfer + + 100 if ((typlst(index) .eq. KALF) .and. (typlst(index+1) .eq. KINT)) + + goto 500 + if (oflg) 200, 200, 300 + 200 call out (ener1S, 0) ; goto 400 + 300 call out (ener1L, 0) + 400 call gtkn + index = 1 + if (typlst(1) .eq. KEOL) return + goto 100 + +*.......Match input with ship name + + 500 do 600 i = 1, KNPLAY + if (equal(tknlst(index), names(i,1))) goto 700 + 600 continue + call out (unkshp,1) !unknown ship name + return + +*.......Input his own ship name? + + 700 if (i .ne. who) goto 800 + if (oflg .eq. long) call out (begyrp, 0) + call out (energ7, 1) + return + +*.......Ship in game? + + 800 if (alive(i)) goto 900 + call out (noship,1) !ship not in game + return + +*.......Attempting to transfer energy to an enemy ship? + + 900 dteam = 1 ; if (i .gt. KNPLAY/2) dteam = 2 + if (team .eq. dteam) goto 1000 + call out (energ2,1) + return + +*.......Adjacent to destination ship? + +1000 if (ldis(shpcon(who,KVPOS),shpcon(who,KHPOS),shpcon(i,KVPOS), + + shpcon(i,KHPOS),1)) goto 1100 + call out (energ3,1) + return + +*.......Transferring more energy than you possess? + +1100 ihita = vallst(index+1) * 10 + if (ihita .lt. shpcon(who,KSNRGY)) goto 1500 + if (oflg) 1200, 1200, 1300 +1200 call out (ener4S, 1) ; goto 1400 +1300 call out (ener4L, 1) +1400 return + +*.......Energy transfer negative or equal to zero? + +1500 if (ihita .gt. 0) goto 1600 + if (oflg .eq. long) call out (energ8, 0) + call out (energ5,1) + return + +*.......Make energy transfer, inform players + +1600 ihita = min0(int(ihita * 0.9), 50000 - shpcon(i,KSNRGY)) + shpcon(who,KSNRGY) = shpcon(who,KSNRGY) - (ihita + (ihita / 9)) + shpcon(i,KSNRGY) = shpcon(i,KSNRGY) + ihita + call out (energ6,1) !inform transferring ship + dispto = i + (dteam * 100) ; dispfr = who + (team * 100) + dbits = bits(i) ; iwhat = 12 + call makhit !inform destination ship + return + +1700 call out ('Sorry, Captain, but the transfer has failed.', 1) + return + end diff --git a/pdp10/compuserve/ENTER.MAC b/pdp10/compuserve/ENTER.MAC new file mode 100644 index 0000000..45bd4a1 --- /dev/null +++ b/pdp10/compuserve/ENTER.MAC @@ -0,0 +1,75 @@ +; This file is part of Decwar. +; Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +; Computation Center and Harris Newman. + +; This program 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 3, or (at your option) +; any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; 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., 51 Franklin Street - Fifth Floor, Boston, MA +; 02110-1301, USA. + + +;;; This subroutine controls access to a routine that can be +; accessed by only one job at a time. To use it, at the +; beginning of each controlled routine, put the code +; +; MOVEI T1,lock +; PUSHJ P,ENTR. +; +; lock must be a word in a shared, write enabled high +; segment (being used by several jobs). ENTR. will put +; the job in a queue until the routine is available (jobs +; will wait in line for access to the routine -- the first +; ones to request access will be the first ones to get it, +; so the correct order is guaranteed). It will then lock +; the routine and fix up the stack to unlock it when access +; is complete (when the routine completes execution and +; executes a POPJ P,). +; +; lock must be initialized to -1 before this routine is +; ever called (one time only). + + sixbit /ENTR./ +entr.: aosn t2,(t1) ;is anyone currently executing the routine? + jrst entr.3 ;no, it's safe + subi t2,1 + +entr.1: movei t3,ntry ;# of cycles before adjusting lock + movei t4,stry ;sleep time between tries +entr.2: hiber t4, ;wait a while + halt + camn t2,(t1) ;my turn yet? + jrst entr.3 ;yep + sojg t3,entr.2 ;try again + + ;By now it is assumed that something has gone wrong + ;(probably the routine that had control aborted), so + ;the lock must be adjusted to let the next job in line + ;get control of the locked routine. + + msg <%Locked routine time out, modifying lock> + sos t3,(t1) ;adjust lock by 1 + caile t2,(t3) ;my turn yet? + jrst entr.1 ;no, wait some more + + ;It's ok to enter the routine now. Fix up the stack to + ;unlock the routine when done. + +entr.3: movei t1,entr.4 ;address of unlock code + exch t1,(p) ;fix up stack + jrst (t1) ;return + + ;The locked routine has finished executing. Make it + ;available to the next job in line. + +entr.4: sos %%lock%% + popj p, diff --git a/pdp10/compuserve/FREE.FOR b/pdp10/compuserve/FREE.FOR new file mode 100644 index 0000000..868c2a1 --- /dev/null +++ b/pdp10/compuserve/FREE.FOR @@ -0,0 +1,148 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine is called whenever a player dies, quits the game, +C or temporarily CTL-C's out. The appropriate parts of the high +C segment are saved in the low segment, and zeroed out for use by +C others. If a restart is made after a ^C, the information is +C passed back up into the high segment, and the player is again +C active. Any hit or radio messages present before the ^C +C will be lost. + + subroutine FREE (snum) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + common /frlocl/ tship, tshpco(10), tshpda(KNDEV), tjob(KNJBST), + + dum(16) + + if (alive(snum) .gt. 0) return + +11 call lock (frelok) + if (lkfail) goto 11 ! we gotta lock it up! + call setdsp (shpcon(snum,KVPOS), shpcon(snum,KHPOS), 0) + tteam = 1 ; if (snum .gt. (KNPLAY / 2)) tteam = 2 + tship = (tteam * 100) + snum + numply = numply - 1 + if ((numply .eq. 0) .and. .not. ENDFLG) hitime = + + daytim(d) + 300000 !preserve high segment for 5 minutes + numsid(tteam) = numsid(tteam) - 1 + if (trstat(snum) .ne. 0) call trcoff (snum) + +C.......Record the player in the killed player queue, along with the +C.......time when he will again be eligible to play. + + call kqsrch (job(snum,KTTYN), job(snum,KJOB), job(snum,KPPN), + + kindex) + if (kindex .ne. 0) goto 100 + if (nkill .lt. KQLEN) nkill = nkill + 1 + kilndx = kilndx + 1 + if (kilndx .gt. KQLEN) kilndx = 1 + kindex = kilndx + 100 kilque(kindex,1) = job(snum,KJOB) + kilque(kindex,2) = job(snum,KPPN) + kilque(kindex,3) = job(snum,KTTYN) + kilque(kindex,4) = daytim(d) + kilque(kindex,5) = tteam .or. snum*262144 + +*.......Move ship information into low segment arrays +*.......Clear out high segment + + do 200 i= 1, KNJBST + tjob(i) = job(snum,i) + job(snum,i) = 0 + 200 continue + + do 300 i = 1, 10 + tshpco(i) = shpcon(snum,i) + 300 continue + shpcon(snum,KVPOS) = 0 + shpcon(snum,KHPOS) = 0 + shpcon(snum,KSNRGY) = 0 + + do 400 i = 1, KNDEV + tshpda(i) = shpdam(snum,i) + 400 continue + + 500 if (hitflg(snum) .le. 0) goto 600 !clear out hit messages + call gethit (snum) + goto 500 + 600 if (msgflg(snum) .le. 0) goto 700 !clear out radio messages + call getmsg (snum, dum) + goto 600 + 700 dbits = 0 ; dispfr = 0 + call blkset (iwhat, 0, 17) + alive(snum) = 1 + call unlock (frelok) + return + +*.......Continue game after ^C + + entry RSTART (snum) + + 800 if (shpcon(snum,KVPOS) .ne. 0) goto 1100 !tship in use + if (disp(tshpco(KVPOS),tshpco(KHPOS)) .gt. 0) + + goto 1200 ! spot on board is taken +801 call lock (frelok,'RSTART') + if (lkfail) goto 801 ! keep trying! + alive(snum) = .TRUE. + numply = numply + 1 + tteam = (snum - 1) / (KNPLAY / 2) + 1 + numsid(tteam) = numsid(tteam) + 1 + +*.......Move ship information back into high segment + + do 900 i = 1, 10 + shpcon(snum,i) = tshpco(i) + 900 continue + do 1000 i = 1, KNDEV + shpdam(snum,i) = tshpda(i) +1000 continue + + call jobsta ( + + job(snum,KJOB), + + dummy, + + dummy, + + job(snum,KPPN), + + job(snum,KTTYN), + + job(snum,KTTYSP) + + ) + job(snum,KNAM1) = tjob(KNAM1) + job(snum,KNAM2) = tjob(KNAM2) + job(snum,KTTYTP) = tjob(KTTYTP) + job(snum,KJOBTM) = tjob(KJOBTM) + job(snum,KRUNTM) = tjob(KRUNTM) + call setdsp (tshpco(KVPOS), tshpco(KHPOS), tship) + call unlock (frelok) + return + +*.......Error messages + +1100 call out (free01,1) !Ship in use + call monit + goto 800 + +1200 call out (free02,1) !Spot on board taken + call monit + goto 800 + + end diff --git a/pdp10/compuserve/GETCMD.FOR b/pdp10/compuserve/GETCMD.FOR new file mode 100644 index 0000000..5663933 --- /dev/null +++ b/pdp10/compuserve/GETCMD.FOR @@ -0,0 +1,133 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine processes command strings, and also monitors the +C hit and message queues between commands. + + subroutine GETCMD (cmd) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /local/ dummy(locsiz) + common /polocl/ total(4) + external monit + + call ttyon + if (hitflg(who) .ne. 0) call outhit + call ttyon + if (msgflg(who) .ne. 0) call outmsg + + call prgnam ('DECWSL') + call dmpbuf !dump output buffer + call CCTRAP + if (.not. PASFLG) + + call pause (ptime) !pause (mark) after previous command + ptime = 0 !assume no pause for next cmd. + + 100 call crlf + call chkseq ! check for active jobs + if (shpcon(who,KSDAM) .ge. KENDAM) goto 1100 !ship dead? + if (shpcon(who,KSNRGY) .le. 0) goto 1200 !energy gone? + if (shpcon(who,KSNRGY) .le. 10000) shpcon(who,KSPCON) = YELLOW !yellow alert? + if (shpcon(who,KSPCON) .eq. YELLOW) call out ("034160703400,0) !if yellow alert, BEEP! + call ttyon + + call endgam !game over? + CCFLG = .FALSE. + call prompt ; call prgnam ('DECWTI') + call dmpbuf !dump output buffer +200 call zaplok ! remove any and all current locks + if (ccflg .or. hungup) goto 210 + if (input(KCMDTM)) goto 400 !command input? + if (hungup) goto 500 +210 active(who) = 0 + comknt = comknt + 1 + if (comknt .lt. 30 * numply) goto 300 + comknt = 0 +c-- call dship + 300 if ((hitflg(who) .eq. 0) .and. (msgflg(who) .eq. 0)) goto 350 + call ttyon + if (hitflg(who) .ne. 0) call outhit + call ttyon + if (msgflg(who) .ne. 0) call outmsg + goto 100 + + 350 call endgam ; goto 200 !check for end of game + + 400 active(who) = 0 + if (hungup) goto 500 ! job hung up? +C if (lofchk(0)) goto 500 ! drforbin(merlyn) dump user whose time limit is over + comknt = comknt + 1 + call gtkn + if (.not. CCFLG) goto 600 !^C wasn't typed + if (shpcon(who,KSPCON) .ne. RED) goto 500 + call out (noquit,1) + call clear + goto 100 + +500 tknlst(1) = 'QUIT' ! ^C and hangup forces job to quit + typlst(1) = kalf + goto 610 + + 600 if (typlst(1) .eq. KEOL) goto 100 +610 cmd = 0 + + do 700 i = 1, KNCMD !identify command + if (.not. (equal(tknlst(1), isaydo(1,i)))) goto 700 + if (cmd .ne. 0) goto 800 + cmd = i + 700 continue + if (cmd) 800,900,1300 !will never take the neg branch + + 800 call out (ambcom, 0) !input is ambiguous + goto 1000 + + 900 call out (unkcom, 0) !input is trash! +1000 if (oflg .ne. short) call out (forhlp, 0) + call crlf + goto 100 + +1100 continue + txppn = job(who, kppn) + txnm1 = job(who, knam1) + txnm2 = job(who, knam2) + txsh1 = names (who, 1) + txsh2 = names (who, 2) + txtim = etim(job(who, KJOBTM)) + txwhy = 0 + txtem = team - 1 + call points (.TRUE.) + txtot = total (1) + call updsta (txppn,txnm1,txnm2,txsh1,txsh2,txtot,txtim,txwhy, + + txtem, who) + call free (who) !player is dead +c-- call shosta(0) + who = 0 ! return to DECWAR + return + +1200 call odisp (team*100 + who, 1) !ship is out of energy + call out (main02,1) + goto 1100 + +1300 call prgnam ('DECWRN') + return + + end diff --git a/pdp10/compuserve/GETLIN.MAC b/pdp10/compuserve/GETLIN.MAC new file mode 100644 index 0000000..dabefe7 --- /dev/null +++ b/pdp10/compuserve/GETLIN.MAC @@ -0,0 +1,797 @@ +; This file is part of Decwar. +; Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +; Computation Center and Harris Newman. + +; This program 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 3, or (at your option) +; any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; 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., 51 Franklin Street - Fifth Floor, Boston, MA +; 02110-1301, USA. + + +title getlin +; Table of Contents for Line Input/Editing Routines +; +; +; Section Page +; +; 1. GETLIN +; 1.1 INLI. ........................................ 5 +; 1.2 NXCH./RUBT. .................................. 6 +; 1.3 CTAB. ........................................ 7 +; 1.4 DELE. ........................................ 8 +; 1.5 ECHR. ........................................ 9 +; 1.6 DISP. ........................................ 10 +; 1.7 ECHG. ........................................ 11 +; 2. SCAN +; 2.1 SCAN. ........................................ 12 +; 2.2 NXTT. ........................................ 13 + search UUOSYM, MACTEN + twoseg + sall + + f=0 + t1=1 + t2=2 + t3=3 + t4=4 + x1=5 + x2=6 + x3=7 + x4=10 + chr=11 + bytptr=12 + arg=16 + p=17 + + cr=15 ;carriage return + lf=12 ;line feed + tab=11 ;horizontal tab + + tty==0 ;channel to open TTY on + pdlsiz==^D20 ;size of push down list + maxcnt==^D80 ;maximum number of characters per line + maxtok==^D15 ;maximum number of tokens per line + maxchr==^D10 ;maximum number of characters per token + + ;Token types + + typ.mt==0 ;null + typ.in==1 ;integer + typ.fl==2 ;floating point + typ.ch==3 ;non-numeric character + typ.el==4 ;end of line + + ;Token flag bits + + tf.num==1 ;token had some leading digits + tf.nnm==2 ;token is non-numeric + tf.eol==4 ;eol was seen after token + tf.chr==10 ;token has characters (isn't null) + tf.sgn==20 ;token has a sign (+/-) + tf.pnt==40 ;token has a decimal point + tf.neg==100 ;token started with a minus sign + + +define save (arg) +< + irp arg, +> + +define restore (arg) +< + irp arg, +> + +define msg (txt) +< + outstr [asciz /txt +/] +> + + + reloc 0 + +pdl: block pdlsiz ;push down list + +noecho: block 1 ;< 0 if echoing is permanenetly off +echflg: block 1 ;< 0 if echoing is currently off + +hpos: block 1 ;horizontal position of carriage + +scale: block 1 ;scale factor used by ANUM. + +chrcnt: block 1 ;count of number of characters on line +linbuf: block maxcnt+1 ;buffer to store input line + +ntok: block 1 ;number of tokens on input line +tknlst: block *2 ;buffer for tokens from input line +vallst: block maxtok+1 ;numeric values of tokens, else 0 +typlst: block maxtok+1 ;types for corresponding tokens + + reloc 400000 + +crlf: byte (7) CR,LF + +eonblk: .IOASC!IO.LEM ;ASCII mode, special editor mode + sixbit /TTY/ + z + +eofblk: .IOASC!IO.LEM!IO.SUP ;ASCII, special editor mode, suppress echoing + sixbit /TTY/ + z + bit..==1 + +define flgbit (mnemonic) +< + mnemonic==bit.. + bit..=bit.._1 + show. mnemonic +> + + flgbit cf.bsc ;delete previous character + flgbit cf.bsw ;delete previous word + flgbit cf.bsl ;delete entire line + flgbit cf.ign ;ignore this character + flgbit cf.cr ;this character outputs a carriage return + flgbit cf.ff ;this character outputs one or more line feeds + flgbit cf.rpt ;repeat previous command + flgbit cf.eol ;end of line character + flgbit cf.dsp ;display the line + flgbit cf.etg ;toggle echo + flgbit cf.eon ;turn echo on + flgbit cf.eof ;turn echo off + flgbit cf.spc ;spacing character + flgbit cf.dlm ;delimiter + flgbit cf.sgn ;sign (+ or -) + flgbit cf.dig ;digit (0 - 9) + flgbit cf.pnt ;decimal point (.) + flgbit cf.com ;comment character (;) + + cf.del==cf.bsc!cf.bsw!cf.bsl + cf.ecc==cf.etg!cf.eon!cf.eof + cf.spe==cf.del!cf.ecc!cf.eol!cf.dsp + cf.num==cf.sgn!cf.dig!cf.pnt + +define c (width,bits<0>) +< + xwd width,bits +> + +cbits: phase 0 + c 0 ;^@ + c 2,cf.rpt ;^A + c 2 ;^B + c 2,cf.eol!cf.cr!cf.ff ;^C + c 2,cf.eon ;^D + c 2,cf.etg ;^E + c 2 ;^F + c 0,cf.bsc ;^G + c -1,cf.bsc ;^H + c 8,cf.spc!cf.dlm ;^I + c 0,cf.eol!cf.ff ;^J + c 0,cf.eol!cf.ff ;^K + c 0,cf.eol!cf.ff ;^L + c 0,cf.cr!cf.ign ;^M + c 2,cf.eof ;^N + c 2,cf.cr!cf.ff ;^O never passed to the program + c 2 ;^P + c 2 ;^Q if TTY NO PAGE is set + c 2,cf.dsp ;^R if TTY RTCOMP is set or char mode + c 2 ;^S if TTY NO PAGE is set + c 2 ;^T if TTY RTCOMP is set + c 0,cf.bsl ;^U + c 2 ;^V + c 2,cf.bsw ;^W + c 2 ;^X + c 2 ;^Y + c 2,cf.cr!cf.ff!cf.eol ;^Z + c 1 ;^[ altmode + c 2 ;^\ + c 2 ;^] + c 2 ;^^ + c 2 ;^_ + c 1,cf.spc!cf.dlm ; blank + c 1 ;! + c 1 ;" + c 1 ;# + c 1 ;$ + c 1 ;% + c 1 ;% + c 1 ;' + c 1 ;( + c 1 ;) + c 1 ;* + c 1,cf.sgn ;+ + c 1,cf.dlm ;, + c 1,cf.sgn ;- + c 1,cf.pnt ;. + c 1 ;/ + c 1,cf.dig ;0 + c 1,cf.dig ;1 + c 1,cf.dig ;2 + c 1,cf.dig ;3 + c 1,cf.dig ;4 + c 1,cf.dig ;5 + c 1,cf.dig ;6 + c 1,cf.dig ;7 + c 1,cf.dig ;8 + c 1,cf.dig ;9 + c 1 ;: + c 1,cf.com ;; + c 1 ;< + c 1 ;= + c 1 ;> + c 1 ;? + c 1 ;@ + c 1 ;A + c 1 ;B + c 1 ;C + c 1 ;D + c 1 ;E + c 1 ;F + c 1 ;G + c 1 ;H + c 1 ;I + c 1 ;J + c 1 ;K + c 1 ;L + c 1 ;M + c 1 ;N + c 1 ;O + c 1 ;P + c 1 ;Q + c 1 ;R + c 1 ;S + c 1 ;T + c 1 ;U + c 1 ;V + c 1 ;W + c 1 ;X + c 1 ;Y + c 1 ;Z + c 1 ;[ + c 1 ;/ + c 1 ;] + c 1 ;^ + c 1 ;_ + c 1 ;` + c 1 ;a + c 1 ;b + c 1 ;c + c 1 ;d + c 1 ;e + c 1 ;f + c 1 ;g + c 1 ;h + c 1 ;i + c 1 ;j + c 1 ;k + c 1 ;l + c 1 ;m + c 1 ;n + c 1 ;o + c 1 ;p + c 1 ;q + c 1 ;r + c 1 ;s + c 1 ;t + c 1 ;u + c 1 ;v + c 1 ;w + c 1 ;x + c 1 ;y + c 1 ;z + c 1 ;{ + c 1 ;\ + c 1 ;} + c 1 ;~ + c 0,cf.bsc ; + dephase + main.: reset + move p,[iowd pdlsiz,pdl] + pushj p,econ. ;make sure echoing is on + +main.1: outstr crlf + outstr crlf + outstr [asciz /Command: /] + movei t1,^D9 + movem t1,hpos + pushj p,scan. ;get command line + + move x1,ntok + pushj p,onum. + outstr [asciz / word/] + caie x1,1 + outchr ["s"] + outstr [asciz /: /] + movei x1,linbuf +main.2: move chr,(x1) + jumpe chr,main.3 + pushj p,echr. ;output the character + aoja x1,main.2 + +main.3: outstr [byte (7) CR,LF,LF] + msg <# type value word> + msg <-- ---- ----- ----> + + movei x2,1 +main.4: movei x1,(x2) + pushj p,onum. + outchr [TAB] + + move t1,typlst-1(x2) + cain t1,typ.mt + outstr [asciz /Null /] + cain t1,typ.in + outstr [asciz /Integer /] + cain t1,typ.fl + outstr [asciz /Floating Point/] + cain t1,typ.ch + outstr [asciz /Character/] + cain t1,typ.el + outstr [asciz /EOL /] + outchr [TAB] + + move x1,vallst-1(x2) + pushj p,onum. + outchr [TAB] + + outchr ["<"] + movei bytptr,-1(x2) + lsh bytptr,1 + add bytptr,[point 7,tknlst] + movei x3,maxchr +main.5: ildb chr,bytptr + jumpe chr,main.6 + pushj p,echr. + sojg x3,main.5 +main.6: outchr [">"] + + outstr crlf + camg x2,ntok + aoja x2,main.4 + jrst main.1 + + + sixbit /ONUM./ +onum.: jumpge x1,.+2 ;negative? + outchr ["-"] ;yep + movm t1,x1 + tlnn t1,(677B8) ;integer? + pjrst oint. ;yes + + save + movm x2,x1 + fix x1,x2 ;get integer part of floating point number + move t1,x1 + pushj p,oint. ;output integer part + outchr ["."] + movei t2,4 ;maximum number of digits after decimal point +onum.4: fltr x1,x1 + fsb x2,x1 ;X1 get fractional part only + jumpe x2,onum.5 ;number is 0, so we're done + fmpri x2,(10.0) ;get next digit in integer part of number + fix x1,x2 ;get next digit + movei t1,"0"(x1) ;change it to ASCII + outchr t1 ;and output it + sojg t2,onum.4 +onum.5: restore + popj p, + + + sixbit /OINT./ +oint.: idivi t1,^D10 ;get next digit + hrlm t2,(p) ;save it + caie t1,0 ;done yet? + pushj p,oint. ;no + + hlrz t1,(p) ;get next digit + addi t1,"0" ;change it to ASCII + outchr t1 ;output it + popj p, + subttl GETLIN -- INLI. + + ;Read a line from the TTY and store it in LINBUF. + ;Before this routine is called, + ;ECON. or ECOF. should have been called, and + ;HPOS should be set to the current horizontal carriage position. + + sixbit /INLI./ +inli.: pushj p,nxch. ;get first character + trnn f,cf.rpt ;repeat previous command? + jrst inli.1 ;no + pushj p,rubt. + jrst inli.4 + +inli.1: setzm chrcnt ;no characters read yet + jrst .+2 + +inli.2: pushj p,nxch. ;get next character + trne f,cf.spe ;character requires special action? + jrst inli.3 ;yes + aos t1,chrcnt ;increment input character count + movem chr,linbuf-1(t1);store character in line buffer + caige t1,maxcnt ;buffer full yet? + jrst inli.2 ;no, get next character + jrst inli.4 ;yes, terminate input line + +inli.3: trnn f,cf.eol ;end of line character? + jrst inli.5 ;no +inli.4: outchr [15] ;return to the left margin + trnn f,cf.ff ;character already echoed form feed? + outchr [12] ;no, goto next output line + aos t1,chrcnt + setzm linbuf-1(t1) ;end input with a null character + skipl noecho ;echoing permanently turned off? + pushj p,econ. ;no, so make sure echoing is on again + popj p, + +inli.5: pushj p,rubt. ;erase the character from the screen + + trnn f,cf.del ;character to delete earlier characters? + jrst inli.6 ;no + pushj p,dele. + jrst inli.2 + +inli.6: trnn f,cf.dsp ;display line? + jrst inli.7 ;no + pushj p,disp. + jrst inli.2 + +inli.7: trnn f,cf.ecc ;echo modifying character? + jrst inli.8 ;no + pushj p,echg. + jrst inli.2 + +inli.8: jrst inli.2 + subttl GETLIN -- NXCH./RUBT. + + ;Get the next character and return it's flag bits and width. + ; + ;Input + ; F LH line processing flags (global to all characters) + ; HPOS Current horizontal carriage position + ;Output + ; F RH flag bits for character + ; CHR RH character + ; LH width of character + ; HPOS New horizontal carriage position + + sixbit /NXCH./ +nxch.: inchrw chr ;get the next character + hrr f,cbits(chr) ;get the character type bits + hlre t1,cbits(chr) ;get the character width + + trne f,cf.ign ;ignore this character? + jrst nxch. ;yes + + cain chr,TAB ;character is ? + pushj p,ctab. ;yes, compute it's width + + skipl echflg ;characters are being echoed? + jrst nxch.1 ;yes + setz t1, ;not echoed, so width is zero + trz f,cf.cr!cf.ff ;didn't echo or ,, + +nxch.1: hrli chr,(t1) ;save width + addm t1,hpos ;increment horizontal carriage position + + popj p, + + + ;Erase a character from the screen. + ; + ;Input + ; CHR LH Output width of character + + sixbit /RUBT./ +rubt.: hlre t1,chr ;get number of characters to wipe out + jumpe t1,rubt.2 ;character didn't echo anything + subm t1,hpos + movns hpos ;update horizontal carriage position + jumpg t1,rubt.1 ;character spaced forward + + outchr [" "] ;space forward to erase character + aojl t1,.-1 + jrst rubt.2 + +rubt.1: outstr [byte (7) 10," ",10] ;space backward to erase character + sojg t1,.-1 + +rubt.2: popj p, + subttl GETLIN -- CTAB. + + ;Compute horizontal carriage position after tab. + + sixbit /CTAB./ +ctab.: move t1,hpos ;get current horizontal carrige position + andi t1,7 + subi t1,^D8 + movn t1,t1 + popj p, + subttl GETLIN -- DELE. + + ;Delete 1 or more characters, depending on the character + ;flags in F. (Erase it from the screen and back over it + ;in LINBUF.) + + sixbit /DELE./ +dele.: save + skipg x1,chrcnt ;get count of charcters in buffer + jrst dele.6 ;buffer is empty, can't delete anything + + trnn f,cf.bsc ;back up over one character? + jrst dele.1 ;no + + ;Back up over a single character + + move chr,linbuf-1(x1);get character to back up over + pushj p,rubt. ;erase it from the screen + soj x1, ;remove it from the buffer + jrst dele.6 + +dele.1: trnn f,cf.bsw ;back up over one word? + jrst dele.5 ;no + + ;Back up over a word + +dele.2: move chr,linbuf-1(x1);get character from buffer + hrrz t1,cbits(chr) ;get character type bits + trnn t1,cf.spc ;spacing character? + jrst dele.4 ;no, don't skip it + pushj p,rubt. ;erase the character from the screen + sojg x1,dele.2 + jrst dele.6 ;buffer is now empty + +dele.3: move chr,linbuf-1(x1);get character from buffer + hrrz t1,cbits(chr) ;get character type bits + trne t1,cf.dlm ;delimiter? + jrst dele.6 ;yes, finished backing up over word +dele.4: pushj p,rubt. ;erase the character from the screen + sojg x1,dele.3 + jrst dele.6 + + ;Back up over the entire line + +dele.5: move chr,linbuf-1(x1);get character from buffer + pushj p,rubt. ;erase it from the screen + sojg x1,.-2 + setzm hpos ;*** until ^U monitor bug is fixed *** + +dele.6: movem x1,chrcnt + restore + popj p, + subttl GETLIN -- ECHR. + + sixbit /ECHR./ +echr.: hrrzi t1,(chr) ;get only character (no width) + cail t1,007 + caile t1,015 + cail t1,040 + jrst echr.2 ;printing character + cain t1,033 + jrst echr.1 ;altmode + outchr ["^"] + addi t1,100 + jrst .+2 +echr.1: movei t1,"$" +echr.2: outchr t1 + popj p, + subttl GETLIN -- DISP. + + sixbit /DISP./ +disp.: save + outstr crlf ;start new line + setzm hpos + skipge echflg ;is echoing turned on? + pushj p,econ. ;no, turn it on + + movn x1,chrcnt ;negative number of characters in buffer + hrlzi x1,-1(x1) + hrri x1,linbuf-1 + +disp.2: aobjp x1,disp.3 ;no more characters to echo + hrrz chr,(x1) ;get character from buffer + hlre t1,cbits(chr) ;get the character's width + cain chr,TAB ;character is ? + pushj p,ctab. ;yes, compute it's width + hrli chr,(t1) ;save width + addm t1,hpos + movem chr,(x1) ;put character back in buffer as being echoed + pushj p,echr. ;echo character + jrst disp.2 + +disp.3: restore + popj p, + subttl GETLIN -- ECHG. + + sixbit /ECHG./ +echg.: trnn f,cf.etg ;toggle echo? + jrst echg.1 ;no + skipge echflg ;echo on? + pjrst econ. ;no, turn echo on + pjrst ecof. ;yes, turn echo off + +echg.1: trne f,cf.eon + pjrst econ. ;turn echo on + pjrst ecof. ;turn echo off + + + sixbit /ECON./ +econ.: open tty,eonblk ;open TTY with echoing turned on + halt + setzm echflg + popj p, + + + sixbit /ECOF./ +ecof.: open tty,eofblk ;open TTY with echoing turned off + halt + setom echflg + popj p, + subttl SCAN -- SCAN. + + sixbit /SCAN./ +scan.: pushj p,inli. ;get input line + setz f, + movei x1,linbuf ;where the first token starts + movei x2,maxchr ;maximum number of characters to return + hrlzi x4,-maxtok ;maximum number of tokens to return + +scan.1: hrrzi bytptr,(x4) ;number of tokens read so far + lsh bytptr,1 ;multiply by 2 (double word array entries) + add bytptr,[point 7,tknlst] + setzm (bytptr) ;entries are initially zero + setzm 1(bytptr) + + pushj p,nxtt. ;scan off next token + movem x3,vallst(x4) ;store numeric value of token + + movei t1,typ.mt ;assume token is blank + trne f,tf.num + movei t1,typ.in ;token is integer + trne f,tf.pnt + movei t1,typ.fl ;token is floating point + trne f,tf.nnm + movei t1,typ.ch ;token is non-numeric characters + movem t1,typlst(x4) ;store token type + trne f,tf.eol ;end of line? + jrst scan.2 ;yes + + aobjn x4,scan.1 + msg + setz x4, + jrst scan.3 + +scan.2: trnn f,tf.chr ;any characters in token? + trne x4,777777 ;no, is this the first token? + hrrzi x4,1(x4) ;increment token count + hrrzi x4,(x4) + +scan.3: movem x4,ntok + movei t1,typ.el ;type of last token is end of line + movem t1,typlst(x4) + setzm vallst(x4) + movei t1,(x4) + lsh t1,1 + setzm tknlst(t1) + setzm tknlst+1(t1) + popj p, + subttl SCAN -- NXTT. + + ;Get the next token from the input line + ; + ;Input + ; X1 starting address of next token + ; X2 maximum number of characters to store + ; BYTPTR pointer to destination of token + ;Output + ; F LH input line flag bits (LF.EOL) + ; RH token flag bits + ; X1 start address of next token + ; X3 numeric value of token, else 0 + + sixbit /NXTT./ +nxtt.: save + hllz f,f ;zero out local flag bits + setz x3, ;numeric value of token + + move chr,(x1) + pushj p,skpb. ;skip leading spacing characters + jrst .+2 +nxtt.1: hrrz chr,(x1) ;get character from input line + jumpe chr,nxtt.3 ;no more characters + hrl chr,cbits(chr) ;get character type bits + tlne chr,cf.com ;comment character? + jrst nxtt.3 ;yes, end of line + tlne chr,cf.dlm ;delimiter? + jrst nxtt.2 ;yes, done with this token + trnn f,tf.nnm ;non-numeric chars seen already? + tlnn chr,cf.num ;numeric character? + troa f,tf.nnm + pushj p,anum. ;add character to number + sojl x2,.+2 ;make sure there's room for this character + idpb chr,bytptr ;add character to token + tro f,tf.chr ;flag that a character has been seen + aoja x1,nxtt.1 + +nxtt.2: pushj p,skpb. ;skip trailing spacing characters + tlne chr,cf.dlm ;terminating character is a delimiter? + aoj x1, ;yes, skip it + tlnn chr,cf.com ;terminating character is comment character? + jumpn chr,.+2 ;terminating character is EOL? +nxtt.3: tro f,tf.eol ;yes, flag it + + trnn f,tf.nnm ;non-numeric character seen? + jrst nxtt.4 ;no + setz x3, ;make sure 0 is returned for numeric value + trz f,tf.num!tf.sgn!tf.neg!tf.pnt +nxtt.4: trne f,tf.neg ;number is negative? + movn x3,x3 ;yes, take care of it + restore + popj p, + + + + ;Skip string of spacing characters pointed to by X1. + + sixbit /SKPB./ +skpb.: move chr,(x1) ;get next character + hrl chr,cbits(chr) ;get character type bits + tlne chr,cf.spc ;spacing character? + aoja x1,skpb. ;yes, skip it + popj p, + + + + ;Add CHR to the partially built number in X3. + + sixbit /ANUM./ +anum.: tlnn chr,cf.sgn ;sign? + jrst anum.1 ;no + troe f,tf.sgn!tf.chr ;flag that sign has been seen + jrst anum.4 ;this isn't the first character + hrrzi t1,(chr) ;get character only (no flag bits) + cain t1,"-" ;minus sign? + tro f,tf.neg ;yes, remember that + popj p, + +anum.1: tlnn chr,cf.pnt ;decimal point? + jrst anum.2 ;no + troe f,tf.pnt ;flag that decimal point has been seen + jrst anum.4 ;this is the second decimal point + fltr x3,x3 ;float the number + hrlzi x2,(10.0) + movem x2,scale ;scaling factor for first fractional digit + popj p, + +anum.2: tro f,tf.num ;digit seen + trne f,tf.pnt ;working on fraction portion? + jrst anum.3 ;yes + imuli x3,^D10 + addi x3,-"0"(chr) ;add digit into integer + popj p, + +anum.3: movei t1,-"0"(chr) ;get digit to add to fraction + fltr t1,t1 ;float it + move t2,scale ;get scaling factor + fdv t1,t2 ;scale it + fad x3,t1 ;add it into the number + fmpri t2,(10.0) ;adjust scaling factor for next digit + movem t2,scale + popj p, + +anum.4: tro f,tf.nnm ;illegal sequence of numeric characters + setz x3, + popj p, + end main. diff --git a/pdp10/compuserve/JUMP.FOR b/pdp10/compuserve/JUMP.FOR new file mode 100644 index 0000000..8072b67 --- /dev/null +++ b/pdp10/compuserve/JUMP.FOR @@ -0,0 +1,82 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine plots a possible new location for ships and bases +C after novas or photon torpedo hits. If the new location contains +C a black hole, death! + + subroutine JUMP (nplc, j) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /chkout/ V1, H1, V2, H2, dcode, disV, disH + real disV, disH + + shjump = 0 + if (nplc .gt. DXESHP) goto 100 !ship? + iloc1 = shpcon(j,KVPOS) ; jloc1 = shpcon(j,KHPOS) + goto 300 + 100 if (nplc .eq. DXROM) goto 200 !base? + iloc1 = base(j,KVPOS,nplc-2) ; jloc1 = base(j,KHPOS,nplc-2) + goto 300 + 200 iloc1 = locr(KVPOS) ; jloc1 = locr(KHPOS) !romulan + +*.......Determine direction of blast, possible new location + + 300 iVV = iloc1 + disV + iHH = jloc1 + disH + if (.not. ingal (IVV, IHH)) return + if (.not. (pdist (iloc1, jloc1, iVV, iHH) .eq. 1)) return + l = dispc (iVV,iHH) + if (l .eq. DXBHOL) goto 600 !blown into black hole? + if (l .ne. DXMPTY) return !new location already occupied? + +*.......Displace to new location + + call setdsp (iloc1, jloc1, 0) + call setdsp (iVV, iHH, (nplc * 100) + j) + if (nplc .ne. DXROM) goto 400 + locr(KVPOS) = iVV ; locr(KHPOS) = iHH ; goto 500 + 400 if (nplc .lt. DXFBAS) shpcon(j,KVPOS) = iVV + if (nplc .lt. DXFBAS) shpcon(j,KHPOS) = iHH + if (nplc .ge. DXFBAS) base(j,KVPOS,nplc-2) = iVV + if (nplc .ge. DXFBAS) base(j,KHPOS,nplc-2) = iHH + 500 Vto = iVV ; Hto = iHH + shjump = 1 + if (nplc .ge. DXFBAS) return + shpcon(j,KSPCON) = RED ; docked(j) = .FALSE. + return + +*.......Displaced into black hole! + + 600 call setdsp (iloc1, jloc1, 0) !zero out object's old location + shjump = 1 + klflg = 1 ; Vto = iVV ; Hto = iHH + if (nplc .ne. DXROM) goto 700 !romulan? + ROM = .FALSE. + return + + 700 if (nplc .lt. DXFBAS) shpcon(j,KSDAM) = KENDAM + if (nplc .lt. DXFBAS) alive(j) = 0 + if (nplc .ge. DXFBAS) base(j,3,nplc-2) = 0 + return + + end diff --git a/pdp10/compuserve/KQSRCH.FOR b/pdp10/compuserve/KQSRCH.FOR new file mode 100644 index 0000000..a1e242d --- /dev/null +++ b/pdp10/compuserve/KQSRCH.FOR @@ -0,0 +1,50 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine searches the KILQUE array for an entry matching +C the argument list. If a match is found, KINDEX contains the +C the matching KILQUE row number, else it returns as zero. + + subroutine KQSRCH (ttynum, jobnum, ppn, kindex) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + kindex = 0 + if (nkill .eq. 0) return !no one has been killed yet + do 100 ii = 1, nkill + i = ii + if ((jobnum .eq. kilque(i,1)) .and. (ppn .eq. kilque(i,2))) + + goto 200 +c-- if ((ttynum .eq. kilque(i,3)) .and. +c-- + (etim(kilque(i,4)) .lt. 180000)) goto 200 + 100 continue + return !player not found in kill queue + +*.......Set KINDEX, update KILQUE entries + + 200 kindex = i + kilque(i,1) = jobnum + kilque(i,2) = ppn + kilque(i,3) = ttynum + return + + end diff --git a/pdp10/compuserve/LIST.FOR b/pdp10/compuserve/LIST.FOR new file mode 100644 index 0000000..93f17e1 --- /dev/null +++ b/pdp10/compuserve/LIST.FOR @@ -0,0 +1,65 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C LIST -- List various info (location, shield percent, number of +C builds) on ships, bases, and planets. + + subroutine LIST + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + include 'lstvar' + + cmd = LSTCMD !command is LIST + goto 100 + + entry SUMMAR !command is SUMMARY + cmd = SUMCMD + goto 100 + + entry BASES + cmd = BASCMD !command is BASES + goto 100 + + entry PLANET + cmd = PLNCMD !command is PLANET + goto 100 + + entry TARGET + cmd = TARCMD !command is TARGET + + 100 call blkset (lstfz, 0, locf(lstlz)-locf(lstfz)+1) + svpos = shpcon(who,KVPOS) ; shpos = shpcon(who,KHPOS) + + call crlf + + p = 1 ; n = 0 + 200 if (p .gt. KMAXTK) return + if (typlst(p) .eq. KEOL) goto 300 + call lstscn ($400) !scan group from input line + call lstflg ($200) !set list flags according to group bits + n = n + 1 + goto 200 + + 300 if (n .ne. 0) call lstout !output flagged items + 400 return + + end diff --git a/pdp10/compuserve/LOCAL.FOR b/pdp10/compuserve/LOCAL.FOR new file mode 100644 index 0000000..9b43e7d --- /dev/null +++ b/pdp10/compuserve/LOCAL.FOR @@ -0,0 +1,25 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + subroutine turkey + include 'param/nolist' + common /local/ dummy(locsiz) + return + end diff --git a/pdp10/compuserve/LOCATE.FOR b/pdp10/compuserve/LOCATE.FOR new file mode 100644 index 0000000..c28f47f --- /dev/null +++ b/pdp10/compuserve/LOCATE.FOR @@ -0,0 +1,169 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This function is used to obtain location information from the +C player. The parameter n if positive specifies the EXACT number +C of separate items of information needed by the calling routine. +C If n is negative, then it indicates the maximum number of +C OPTIONAL pieces of information the routine will accept, although +C no modifiers are actually required. This routine will process +C coordinates given in ABSOLUTE, RELATIVE, or COMPUTED form. +C The value of LOCATE when returned to the calling routine equals +C the number of 'tokens' actually processed. If LOCATE returns +C with a negative value, this indicates an error condition and +C the calling routine should therefore abort. The entry point +C RELOC is used when a command has already been entered, and the +C first token is now a modifier, rather than the command itself. + + function LOCATE (n) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + real dV, dH + + p = 2 + goto 100 + + entry RELOC (n) + call out (coord1,0) !coordinates? + call gtkn + p = 1 + + 100 sign = isign(1,n) + max = iabs(n) + + if (.not. (typlst(1) .eq. KEOL)) goto 300 + 200 locate = -1 + reloc = locate + return !abort + +*.......Check ICFLG for default location specification type + + 300 dV = 0.0 ; dH = 0.0 ; if (icflg .eq. KABS) goto 400 + dV = float (shpcon(who,KVPOS)) + dH = float (shpcon(who,KHPOS)) + + 400 if (.not. equal(tknlst(p), absfrm)) goto 500 + p = p + 1 + if (icflg .eq. KABS) goto 1400 + dV = 0.0 ; dH = 0.0 + goto 1400 + + 500 if (.not. equal(tknlst(p), relfrm)) goto 600 + p = p + 1 + if (icflg .eq. KREL) goto 1400 + dV = float(shpcon(who,KVPOS)) + dH = float(shpcon(who,KHPOS)) + goto 1400 + + 600 if (.not. equal(tknlst(p), 'COMPUTED')) goto 1400 + if (shpdam(who,KDCOMP) .lt. KCRIT) goto 700 + call out (damcom,1) + goto 200 + 700 if (PASFLG .or. (job(who,KTTYSP) .le. 300)) goto 800 +c-- call out (nocomp,1) +c-- goto 200 + call pause (job(who, KTTYSP) * 2) ! slow down hi-bauders + + 800 k = ntok - p + do 900 i = 1, k + tknlst(i) = tknlst(i+p) + typlst(i) = typlst(i+p) ; vallst(i) = vallst(i+p) + 900 continue + locate = k * 2 + p = 1 + if (.not. (typlst(1) .eq. KINT)) goto 1000 + locate = locate - 1 + k = k - 1 + p = 2 +1000 ntok = locate + reloc = locate + if (locate .eq. 0) return + if ((sign .gt. 0) .and. (locate .ne. max)) goto 2000 + if ((sign .lt. 0) .and. (locate .gt. max)) goto 2100 + + do 1300 i = k+p-1, p, -1 + do 1100 j = 1, KNPLAY + if (.not. (typlst(i) .eq. KALF)) goto 2200 + if (equal(tknlst(i), names(j,1))) goto 1200 +1100 continue + if (.not. equal(tknlst(i), 'ROMULAN')) goto 2300 + if (.not. ROM) goto 2400 + vallst(2*i - p) = locr (KVPOS) ; typlst(2*i - p) = KINT + vallst(2*i - p + 1) = locr (KHPOS) ; typlst(2*i - p + 1) = KINT + goto 1300 +1200 if (.not. alive(j)) goto 2400 + if (disp(shpcon(j,KVPOS),shpcon(j,KHPOS)) .le. 0) goto 2400 + vallst(2*i-p) = shpcon(j,KVPOS) ; typlst(2*i-p) = KINT + vallst(2*i-p+1) = shpcon(j,KHPOS) ; typlst(2*i-p+1) = KINT +1300 continue + return + +1400 locate = ntok - p + 1 !number of tokens that follow + reloc = locate + if (locate .eq. 0) return + if ((sign .gt. 0) .and. (locate .ne. max)) goto 2000 + if ((sign .lt. 0) .and. (locate .gt. max)) goto 2100 + + do 1500 i = p, ntok + if (.not. (typlst(i) .eq. KINT)) goto 2500 +1500 continue + + index = 1 + if (mod(locate,2) .eq. 0) goto 1700 !even # of items + vallst(index) = vallst(p) !don't check for range error or relative + +1600 p = p + 1 + index = index + 1 +1700 if (p .eq. ntok+1) return + + vallst(index) = vallst(p) + dV + if (.not. ingal (vallst(index), 5)) goto 2600 + + p = p + 1 + index = index + 1 + if (p .eq. ntok+1) return + + vallst(index) = vallst(p) + dH + if (.not. ingal (5, vallst(index))) goto 2700 + goto 1600 + + +C.......Error messages + +2000 call out (erloc1,1) !wrong number of coordinates specified + goto 200 +2100 call out (erloc2,1) !too many coordinates specified + goto 200 +2200 call out (erloc3,1) !non-alpha ship name + goto 200 +2300 call out (erloc4,1) !unrecognized ship name + goto 200 +2400 call out (noship,1) !player not in game + goto 200 +2500 call out (erloc7,1) !non-numeric coordinate + goto 200 +2600 call out (erloc8,1) !V coordinate lies outside universe + goto 200 +2700 call out (erloc9,1) !H coordinate lies outside universe + goto 200 + + end diff --git a/pdp10/compuserve/LOFCHK.MAC b/pdp10/compuserve/LOFCHK.MAC new file mode 100644 index 0000000..a73a315 --- /dev/null +++ b/pdp10/compuserve/LOFCHK.MAC @@ -0,0 +1,81 @@ +; This file is part of Decwar. +; Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +; Computation Center and Harris Newman. + +; This program 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 3, or (at your option) +; any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; 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., 51 Franklin Street - Fifth Floor, Boston, MA +; 02110-1301, USA. + + +title lofchk - check to see if user has exceeded his alloted on-time + + search sysmac + twoseg + reloc 400000 + entry lofchk + +lofchk: setz ra, ; assume he can stay + skipn uloft.## ; if a forced log-off time is set + popj $s, ; then + calli $v,-200210 ; get current GMT + setz $v, ; worst case if fails is to keep him + camge $v,uloft.## ; if current GMT exceend logoff time + popj $s, ; then + +; Time to go, Charlie! +; Tell the user it is bye-bye time + + + hlrz $v,usppn.# ; if Tandy demo account + cain $v,70005 + jrst [outstr [asciz " + +The allotted amount of demo time +expired. + +"] + jrst logoff] + hlrz $v,usmxt.## ; get max time allowed + cain $v,^d60 ; if in first hour + jrst [outstr [asciz " + +Your initial hour of connect time +has expired. In order to con- +tinue using the Information +Service, you will have to log +on again and complete the +sign-on procedure (option 1). + +"] + jrst logoff] + cain $v,^d180 ; if signup direct user + jrst [outstr [asciz " + +Your additional 2 hours of con- +nect time has expired. You will +be unable to use the Information +Service until your new password +arrives by mail. + +"] + jrst logoff] + outstr [asciz " +Your allotted amount of time has +expired. +"] +logoff: seto ra, + popj $s, ; return .true. if time to go + + end + diff --git a/pdp10/compuserve/LSTFLG.FOR b/pdp10/compuserve/LSTFLG.FOR new file mode 100644 index 0000000..8d091ef --- /dev/null +++ b/pdp10/compuserve/LSTFLG.FOR @@ -0,0 +1,231 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C LSTFLG -- Set LIST flags +C Set selection bits in SHPLST, BASLST, and PLNLST according +C to the masks returned by LSTSCN for the LIST command. + + subroutine LSTFLG (*) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + include 'lstvar/nolist' + + gxf = IRNBIT !"in range" + if (range .gt. KGALV) gxf = IGMBIT !"in game" + if ((imask .and. RNGBIT) .ne. 0) gxf = ISRBIT !"in specified range" + + grpbts = 0 + if ((smask .ne. sbits(team)) .and. (range .gt. KRANGE) .and. + + (gxf .ne. IGMBIT)) grpbts = KNOBIT + + gxf = gxf .or. lmask + +C --------------------------------------------------------------- + if ((imask .and. CRDBIT) .eq. 0) goto 1200 + +C Specific coordinate was given --------------------------------- + + 100 code = disp(Vpos,Hpos) !display code of object + object = code/100 !object code + index = mod(code,100) !object index + side = 0 !in case empty, star, or black hole + d = pdist (Vpos, Hpos, sVpos, sHpos) !distance from ship + + goto (600, 600, 700, 700, 500, 900, 900, 900) object !E,B,[],(),~~,@,+@,-@ + if (d .gt. KRANGE) goto 300 + if (cmd .ne. LSTCMD) goto 1100 + 200 call lstobj ; return + 300 call out (lstf01,0) !"Sir, our sensors can't scan as far as" + call prloc (Vpos, Hpos, 1, 0, KABS, SHORT) + return + + 500 side = 3 !Romulan + scn = 0 + goto 1000 + 600 side = object !ship + scn = 0 + goto 1000 + 700 if ((omask .and. BASBIT) .eq. 0) goto 1100 + side = object - 2 !base + scn = base(index,4,side) + goto 1000 + 900 if ((omask .and. PLNBIT) .eq. 0) goto 1100 + side = object - 6 !planet + scn = locpln(index,4) + +1000 ctr = 0 + call lstupd (dummy, ctr, scn, dummy) + if (ctr .ne. 0) 200, 300 + +C Specified object was not at coordinate (BASES, PLANETS, or +C TARGETS command) +1100 if (cmd .eq. BASCMD) call out (lstf02,0) !"No base" + if (cmd .eq. PLNCMD) call out (lstf03,0) !"No planet" + if (cmd .eq. TARCMD) call out (lstf04,0) !"No target" + call prloc (Vpos, Hpos, 1, 0, ocflg, LONG) + return + +C --------------------------------------------------------------- +C --------------------------------------------------------------- +1200 if ((imask .and. NAMBIT) .eq. 0) goto 2300 + call crlf + if ((imask .and. ROMBIT) .eq. 0) goto 1700 + +C ROMULAN ------------------------------------------------------- + + if (ROMOPT) goto 1300 + call out (type06,1) !Romulans are NOT in this game + goto 1700 +1300 if (ROM) goto 1400 + call out (lstf05,1) !"The Romulan is dead" + goto 1700 +1400 side = 3 ; code = 500 ; object = 5 + Vpos = locr(KVPOS) ; Hpos = locr(KHPOS) + call lstupd (dummy, dummy, -1, dummy) + call lstobj + +C --------------------------------------------------------------- +1700 if (ships .eq. 0) goto 2200 + +C Ship name ----------------------------------------------------- + + do 2100 index = 1, KNPLAY + if ((ships .and. bits(index)) .eq. 0) goto 2100 !ship not selected + side = 1 ; if (index .gt. KNPLAY/2) side = 2 + object = side + code = object * 100 + index + if (.not. alive(index)) goto 1800 !ship not in game + Vpos = shpcon(index,KVPOS) ; Hpos = shpcon(index,KHPOS) + if (disp(Vpos,Hpos) .eq. 0) goto 1800 !dead, but not gone yet + call lstupd (dummy, dummy, -1, dummy) + call lstobj + goto 2100 +1800 call odisp (code,0) + call out (' is not in the game',1) +2100 continue + +2200 return + +C --------------------------------------------------------------- +C --------------------------------------------------------------- +2300 clsest = MAXINT + if ((omask .and. SHPBIT) .eq. 0) goto 3000 + +C SHIP ---------------------------------------------------------- + + if ((smask .and. ROMBIT) .eq. 0) goto 2600 !Rom not selected + if (.not. ROM) goto 2600 !Rom not in game + Vpos = locr(1) ; Hpos = locr(2) ; side = 3 + scn = 0 !no scan if out of range enemy + if ((gxf .and. IGMBIT) .ne. 0) scn = -1 !unless asking for entire game + if ((imask .and. CLSBIT) .ne. 0) scn = 0 !no scan if asking for closest + call lstupd (romlst, romctr, scn, rxf) + +2600 first = 1 ; last = KNPLAY + if ((smask .and. FEDBIT) .eq. 0) first = KNPLAY/2+1 !Fed not selected + if ((smask .and. EMPBIT) .eq. 0) last = KNPLAY/2 !Emp not selected + if (first .gt. last) goto 3000 !neither; was Rom + do 2900 i = first, last + if (.not. alive(i)) goto 2900 !ship not in game + Vpos = shpcon(i,KVPOS) ; Hpos = shpcon(i,KHPOS) + if (disp(Vpos,Hpos) .eq. 0) goto 2900 !dead, but not gone yet + side = 1 ; if (i .gt. KNPLAY/2) side = 2 + scn = 0 !no scan if out of range enemy + if ((imask .and. CLSBIT) .eq. 0) goto 2700 !~ looking for closest + if (i .ne. who) 2800, 2900 !don't include self as closest +2700 if ((gxf .and. IGMBIT) .ne. 0) scn = -1 !scan if asking for entire game +2800 call lstupd (shplst(i), shpctr(side), scn, sxf(side)) +2900 continue + +C --------------------------------------------------------------- +3000 if ((omask .and. BASBIT) .eq. 0) goto 3500 + +C BASE ---------------------------------------------------------- + + first = 1 ; last = 2 + if ((smask .and. FEDBIT) .eq. 0) first = 2 !Fed not selected + if ((smask .and. EMPBIT) .eq. 0) last = 1 !Emp not selected + do 3400 side = first, last + do 3300 i = 1, KNBASE + if (base(i,3,side) .le. 0) goto 3300 !base is dead + Vpos = base(i,KVPOS,side) ; Hpos = base(i,KHPOS,side) + call lstupd (baslst(i,side), basctr(side), base(i,4,side), + + bxf(side)) +3300 continue +3400 continue + +C --------------------------------------------------------------- +3500 if ((omask .and. PLNBIT) .eq. 0) goto 3800 + +C PLANET -------------------------------------------------------- + + if (nplnet .eq. 0) goto 3800 !no planets left + do 3700 i = 1, nplnet + Vpos = locpln(i,KVPOS) ; Hpos = locpln(i,KHPOS) + side = dispc(vpos,hpos) - 6 + if ((smask .and. sbits(side)) .eq. 0) goto 3700 !wrong side + call lstupd (plnlst(i), plnctr, locpln(i,4), pxf(side)) +3700 continue + +C --------------------------------------------------------------- +3800 if ((imask .and. CLSBIT) .eq. 0) goto 3900 + + Vpos = Vposc ; Hpos = Hposc + imask = imask .and. .not. CLSBIT + if (clsest .eq. MAXINT) 4000, 100 + +3900 if ((grpbts .and. (LSTBIT .or. SUMBIT)) .ne. 0) return +4000 msg = locf(lstf06) !"Sir, there are no" + if (oflg .ne. LONG) msg = locf(lstf07) !"No" + call out (msg,0) + + if ((grpbts .and. KNOBIT) .ne. 0) call out (known,0) !" known" + + msg = 0 + if (smask .eq. NEUBIT) msg = locf(lstf08) !" neutral" + if (smask .eq. FEDBIT) msg = locf(lstf09) !" Federation" + if (smask .eq. EMPBIT) msg = locf(lstf10) !" Empire" + if ((smask .eq. (FEDBIT .or. EMPBIT)) .and. (omask .eq. PLNBIT)) + + msg = locf(lstf11) !" captured" + if (((smask .and. ROMBIT) .ne. 0) .and. (smask .and. NEUBIT) + + .eq. 0) msg = locf(lstf12) !" enemy" + call out (msg,0) + + if (omask .eq. PLNBIT) msg = locf(lstf13) !" planets" + if (omask .eq. BASBIT) msg = locf(lstf14) !" bases" + if (omask .eq. SHPBIT) msg = locf(lstf15) !" ships" + if (omask .eq. (BASBIT .or. PLNBIT)) msg = locf(lstf16) !" ports" + if (omask .eq. (PLNBIT .or. BASBIT .or. SHPBIT)) + + msg = locf(lstf17) !" forces" + call out (msg,0) + + if (oflg .eq. SHORT) goto 4100 + msg = locf(ingame) !" in game" + if ((grpbts .and. IRNBIT) .ne. 0) msg = locf(inrang) !" in range" + if ((grpbts .and. ISRBIT) .ne. 0) msg = locf(inspra) !" in specified range" + if ((grpbts .and. IGMBIT) .ne. 0) msg = locf(ingame) !" in game" + call out (msg,0) +4100 call crlf + + return 1 + + end diff --git a/pdp10/compuserve/LSTOBJ.FOR b/pdp10/compuserve/LSTOBJ.FOR new file mode 100644 index 0000000..17ece95 --- /dev/null +++ b/pdp10/compuserve/LSTOBJ.FOR @@ -0,0 +1,89 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C LISOBJ -- List object (ship, base, or planet). Include +C possibly name, location, shield percent, number of builds, +C depending on the object, range, side, etc. Flag line with * +C in column 1 if the object is an enemy. + + subroutine LSTOBJ + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + include 'lstvar/nolist' + +C Input from LSTVAR: +C SVPOS,SHPOS ship position +C CODE display code of object +C OBJECT object code [CODE/100] +C INDEX object index [MOD(CODE,100)] +C VPOS,HPOS position of object +C SIDE which side the object is on +C CMD command being executed +C XF ORNBIT + + if ((side .eq. 0) .or. (side .eq. team) .or. (cmd .eq. TARCMD)) + + goto 100 + call outc ('*') ; goto 200 + 100 call space + + 200 call odisp (code,0) + if (oflg .eq. LONG) call tab (14) + if (oflg .ne. LONG) call tab (5) + + goto (400, 400, 600, 600, 300, 700, 700, 700) object + +C.......Romulan + 300 if ((xf .and. ORNBIT) .ne. 0) goto 500 !out of range + call prloc (vpos, hpos, 0, 2, ocflg, oflg) + call oflt (erom,6) + if (oflg .ne. SHORT) call outc ('%') + goto 800 + +C.......ship + 400 if ((xf .and. ORNBIT) .ne. 0) goto 500 !out of range + call prloc (vpos, hpos, 0, 2, ocflg, oflg) + spc = shpcon(index,KSHCON) * shpcon(index,KSSHPC) + call osflt (spc,6) + if (oflg .ne. SHORT) call outc ('%') + goto 800 + 500 call out ('out of range',0) + goto 800 + +C.......base + 600 call prloc (vpos, hpos, 0, 2, ocflg, oflg) + if ((xf .and. ORNBIT) .ne. 0) goto 800 !out of range + call oflt (base(index,3,side),6) + if (oflg .ne. SHORT) call outc ('%') + goto 800 + +C.......planet + 700 call prloc (vpos, hpos, 0, 2, ocflg, oflg) + b = locpln(index,3) ; if (b .eq. 0) goto 800 + call odec (b,6) + if ((oflg .eq. LONG) .and. (b .ne. 1)) call out (' builds',0) + if ((oflg .eq. LONG) .and. (b .eq. 1)) call out (build3,0) + if (oflg .eq. MEDIUM) call out (' b',0) + + 800 call crlf + return +c + end diff --git a/pdp10/compuserve/LSTOUT.FOR b/pdp10/compuserve/LSTOUT.FOR new file mode 100644 index 0000000..b007da1 --- /dev/null +++ b/pdp10/compuserve/LSTOUT.FOR @@ -0,0 +1,134 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C LSTOUT -- Output requested LIST info. + + subroutine LSTOUT + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + include 'lstvar/nolist' + integer sum(0:2) + + sum(0) = 0 ; sum(1) = 0 ; sum(2) = 0 !nothing flagged for summary + nt = 0 !no targets yet + +C.......Romulan + + if (romctr .eq. 0) goto 100 + xf = romlst + if ((xf .and. LSTBIT) .eq. 0) goto 50 + side = 3 ; code = DXROM*100 ; object = DXROM + vpos = locr(KVPOS) ; hpos = locr(KHPOS) + call crlf + call lstobj + 50 if ((xf .and. SUMBIT) .eq. 0) goto 100 + nt = nt + 1 + call crlf + call lstsum (romctr, 'Romulan', rxf) + +C.......ships + + 100 first = 1 ; last = KNPLAY + if (shpctr(1) .eq. 0) first = KNPLAY/2 + 1 + if (shpctr(2) .eq. 0) last = KNPLAY/2 + if (first .gt. last) goto 300 + call crlf + do 200 index = first, last + xf = shplst(index) + if (xf .eq. 0) goto 200 + side = 1 ; if (index .gt. KNPLAY/2) side = 2 + if ((xf .and. LSTBIT) .eq. 0) goto 150 + object = side + code = object * 100 + index + vpos = shpcon(index,KVPOS) ; hpos = shpcon(index,KHPOS) + call lstobj + 150 if ((xf .and. SUMBIT) .eq. 0) goto 200 + sum(side) = sum(side) + 1 + if (side .ne. team) nt = nt + 1 + 200 continue + if (cmd .eq. TARCMD) goto 300 + call crlf + call lstsum (sum(1), fedshp, sxf(1)) !"Federation ship" + call lstsum (sum(2), empshp, sxf(2)) !"Empire ship" + +C.......bases + + 300 first = 1 ; last = 2 + if (basctr(1) .eq. 0) first = 2 + if (basctr(2) .eq. 0) last = 1 + if (first .gt. last) goto 600 + call crlf + do 500 side = first, last + do 400 index = 1, KNBASE + xf = baslst(index,side) + if (xf .eq. 0) goto 400 + if ((xf .and. LSTBIT) .eq. 0) goto 350 + object = side + 2 + code = object * 100 + index + vpos = base(index,KVPOS,side) ; hpos = base(index,KHPOS,side) + call lstobj + if ((xf .and. PASBIT) .eq. 0) + + base(index,4,side) = base(index,4,side) .or. team + 350 if ((xf .and. SUMBIT) .eq. 0) goto 400 + sum(side) = sum(side) + 1 + if (side .ne. team) nt = nt + 1 + 400 continue + 500 continue + if (cmd .eq. TARCMD) goto 600 + call crlf + call lstsum (sum(1), fedbas, bxf(1)) !"Federation base" + call lstsum (sum(2), empbas, bxf(2)) !"Empire base" + +C.......planets + + 600 if (plnctr .eq. 0) goto 800 + call crlf + do 700 index = 1, nplnet + xf = plnlst(index) + if (xf .eq. 0) goto 700 + vpos = locpln(index,KVPOS) ; hpos = locpln(index,KHPOS) + object = dispc(vpos,hpos) + side = object - 6 + if ((xf .and. LSTBIT) .eq. 0) goto 650 + code = object * 100 + index + call lstobj + if ((xf .and. PASBIT) .eq. 0) + + locpln(index,4) = locpln(index,4) .or. team + 650 if ((xf .and. SUMBIT) .eq. 0) goto 700 + sum(side) = sum(side) + 1 + if (side .eq. (3-team)) nt = nt + 1 + 700 continue + if (cmd .eq. TARCMD) goto 800 + call crlf + call lstsum (sum(0), neupln, pxf(0)) !"neutral planet" + call lstsum (sum(1), fedpln, pxf(1)) !"Federation planet" + call lstsum (sum(2), emppln, pxf(2)) !"Empire planet" + +C.......targets summary + + 800 if (cmd .ne. TARCMD) return + if (nt .eq. 0) return + call crlf + call lstsum (nt, 'target', txf) + return + + end diff --git a/pdp10/compuserve/LSTSCN.FOR b/pdp10/compuserve/LSTSCN.FOR new file mode 100644 index 0000000..1e368fc --- /dev/null +++ b/pdp10/compuserve/LSTSCN.FOR @@ -0,0 +1,294 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C LSTSCN -- Scan input group for LIST, SUMMARY, TARGETS, BASES, +C and PLANETS commands. + + subroutine LSTSCN (*) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + include 'lstvar/nolist' + + goto (50, 100, 200, 300) cmd + +C LIST command + omask = SHPBIT .or. BASBIT .or. PLNBIT + smask = FEDBIT .or. EMPBIT .or. NEUBIT .or. ROMBIT + lmask = LSTBIT + range = MAXINT + goto 400 + +C SUMMARY command + 50 omask = SHPBIT .or. BASBIT .or. PLNBIT + smask = FEDBIT .or. EMPBIT .or. NEUBIT .or. ROMBIT + lmask = SUMBIT + range = MAXINT + goto 400 + +C BASES command + 100 omask = BASBIT + smask = sbits(team) + lmask = LSTBIT .or. SUMBIT + range = MAXINT + goto 400 + +C PLANETS command + 200 omask = PLNBIT + smask = FEDBIT .or. EMPBIT .or. NEUBIT + lmask = LSTBIT + range = KRANGE + goto 400 + +C TARGETS command + 300 omask = SHPBIT .or. BASBIT .or. PLNBIT + smask = sbits(3-team) .or. ROMBIT + lmask = LSTBIT + range = KRANGE + + 400 imask = 0 !nothing scanned yet + ships = 0 !no ships yet + vpos = 0 ; hpos = 0 !no coordinate scanned + + op = p !remember where we started the scan + 500 p = p + 1 + if (p .gt. KMAXTK) return 1 ! prevent "Data out of bounds" + +C.......Check for end of group + if (typlst(p) .eq. KEOL) goto 600 + token = tknlst(p) + if (equal(token, '&')) goto 600 + if (.not. equal(token, 'AND')) goto 800 + +C.......End of group; check for any last minute syntax errors + 600 if (p .ne. op+1) return + if (op .eq. 1) goto 700 + call out (lsts01,1) !"Null group illegal" + return 1 + +C.......Lone command (no modifiers). In this case, automatically +C include a summary, unless the command was LIST. + 700 continue +* if (cmd .ne. LSTCMD) lmask = lmask .or. SUMBIT + return + +C.......Check for coordinate and range + 800 if ((typlst(p) .eq. KINT) .and. (typlst(p+1) .eq. KINT)) + + goto 2200 + !coordinate + if (typlst(p) .eq. KINT) goto 2900 !range + if (typlst(p) .ne. KALF) goto 1400 + +C.......Check for ship name (Romulan counts as ship name) + if ((cmd .ne. LSTCMD) .and. (cmd .ne. TARCMD)) goto 1000 + do 900 i = 1, KNPLAY + if (equal(token, names(i,1))) goto 1800 !ship name + 900 continue + if (equal(token, 'ROMULAN')) goto 1700 + +C.......Check for other keywords +1000 if ((cmd .ne. LSTCMD) .and. (cmd .ne. SUMCMD) .and. + + (cmd .ne. TARCMD)) goto 1100 + if (equal(token, 'SHIPS')) goto 1900 + if (equal(token, 'BASES')) goto 2000 + if (equal(token, 'PLANETS')) goto 2100 + if (equal(token, 'PORTS')) goto 2150 + +1100 if (cmd .eq. TARCMD) goto 1200 + if (equal(token, 'FRIENDLY')) goto 2300 + if (equal(token, 'ENEMY')) goto 2400 + if (equal(token, 'TARGETS')) goto 2400 + if (equal(token, 'FEDERATION')) goto 2500 + if (equal(token, 'HUMAN')) goto 2500 + if (equal(token, 'EMPIRE')) goto 2600 + if (equal(token, 'KLINGON')) goto 2600 + +1200 if ((cmd .eq. BASCMD) .or. (cmd .eq. TARCMD)) goto 1300 + if (equal(token, 'NEUTRAL')) goto 2700 + if (equal(token, 'CAPTURED')) goto 2800 + +1300 if (equal(token, 'ALL')) goto 2850 !legal for any command + + if ((cmd .ne. SUMCMD) .and. equal(token, 'CLOSEST')) goto 3000 + + if ((cmd .ne. LSTCMD) .and. (cmd .ne. SUMCMD) .and. + + equal(token, 'LIST')) goto 3100 + if ((cmd .ne. SUMCMD) .and. (equal(token, 'SUMMARY'))) goto 3200 + +1400 call out (lsts02,0) ; goto 1600 !"Illegal keyword" +1500 call out (lsts03,0) !"Syntax error near keyword " +1600 call outw (token) ; call crlf + return 1 + +C---------------------------------------------------------------------- +C Object selection +C---------------------------------------------------------------------- + +C.......Romulan +1700 if ((imask .and. ROMBIT) .ne. 0) goto 1500 !Romulan already given + imask = imask .or. ROMBIT .or. NAMBIT + omask = SHPBIT + goto 500 + +C.......ship name +1800 if ((imask .and. .not. (NAMBIT .or. ROMBIT)) .ne. 0) goto 1500 + imask = imask .or. NAMBIT + if ((ship .and. bits(i)) .ne. 0) goto 1500 !name already given + ships = ships .or. bits(i) + omask = SHPBIT + goto 500 + +C.......SHIP +1900 if ((imask .and. (OBJMSK .or. NEUBIT .or. CAPBIT)) .ne. 0) + + goto 1500 + imask = imask .or. SHPBIT + omask = SHPBIT + smask = smask .and. (FEDBIT .or. EMPBIT .or. ROMBIT) + goto 500 + +C.......BASE +2000 if ((imask .and. (OBJMSK .or. NEUBIT .or. CAPBIT)) .ne. 0) + + goto 1500 + imask = imask .or. BASBIT + omask = BASBIT + smask = smask .and. (FEDBIT .or. EMPBIT) + goto 500 + +C.......PLANET +2100 if ((imask .and. OBJMSK) .ne. 0) goto 1500 + imask = imask .or. PLNBIT + omask = PLNBIT + smask = smask .and. (FEDBIT .or. EMPBIT .or. NEUBIT) + goto 500 + +C.......PORT +2150 if (who .eq. 0) goto 1500 !Pre-game? + if ((imask .and. OBJMSK) .ne. 0) goto 1500 + imask = imask .or. PRTBIT + if ((imask .and. NEUBIT) .eq. 0) omask = BASBIT .or. PLNBIT + if ((imask .and. SIDMSK) .eq. 0) smask = sbits(team) .or. NEUBIT + smask = smask .and. .not. ROMBIT + goto 500 + +C.......Coordinate +2200 if (cmd .eq. SUMCMD) goto 1500 + if ((imask .and. (OBJMSK .or. SIDMSK .or. ALLBIT .or. RNGBIT .or. + + CLSBIT .or. OUTMSK)) .ne. 0) goto 1500 + imask = imask .or. CRDBIT + Vpos = vallst(p) ; Hpos = vallst(p+1) + p = p + 1 + if (p .gt. KMAXTK) return 1 + if (ingal(Vpos,Hpos)) goto 500 + call out (lsts04,0) !"Illegal coordinate" + call prloc (Vpos, Hpos, 1, 0, KABS, SHORT) + return 1 + +C---------------------------------------------------------------------- +C Side and range selection +C---------------------------------------------------------------------- + +C.......Friendly +2300 if (who .eq. 0) goto 1500 !Pre-game? + smask = smask .and. .not. ROMBIT + if (team .eq. 1) 2500, 2600 + +C.......Enemy +2400 if (who .eq. 0) goto 1500 !Pre-game? + smask = smask .or. ROMBIT + if (team .eq. 1) 2600, 2500 + +C.......Federation, Human +2500 if ((imask .and. (SIDMSK .or. CRDBIT)) .ne. 0) goto 1500 + imask = imask .or. FEDBIT + smask = (smask .and. ROMBIT) .or. FEDBIT + goto 500 + +C.......Empire, Klingon +2600 if ((imask .and. (SIDMSK .or. CRDBIT)) .ne. 0) goto 1500 + imask = imask .or. EMPBIT + smask = (smask .and. ROMBIT) .or. EMPBIT + goto 500 + +C.......Neutral +2700 if ((imask .and. (SIDMSK .or. (OBJMSK .and. .not. PLNBIT))) + + .ne. 0) goto 1500 + imask = imask .or. NEUBIT + smask = NEUBIT + omask = PLNBIT + goto 500 + +C.......Captured +2800 if ((imask .and. (SIDMSK .or. (OBJMSK .and. .not. PLNBIT))) + + .ne. 0) goto 1500 + imask = imask .or. CAPBIT + smask = FEDBIT .or. EMPBIT + omask = PLNBIT + goto 500 + +C.......ALL +2850 if ((imask .and. (ALLBIT .or. CRDBIT)) .ne. 0) goto 1500 + imask = imask .or. ALLBIT + if (((imask .and. SIDMSK) .eq. 0) .and. (cmd .ne. TARCMD)) + + smask = FEDBIT .or. EMPBIT .or. NEUBIT .or. ROMBIT + if ((imask .and. RNGBIT) .eq. 0) range = MAXINT + goto 500 + +C.......Range +2900 if (who .eq. 0) goto 1500 !Pre-game? + if ((imask .and. (RNGBIT .or. CRDBIT)) .ne. 0) goto 1500 + imask = imask .or. RNGBIT + range = vallst(p) + if (range .lt. 1) goto 1500 + goto 500 + +C.......Closest +3000 if (who .eq. 0) goto 1500 !Pre-game? + if ((imask .and. (CLSBIT .or. CRDBIT .or. OUTMSK)) .ne. 0) + + goto 1500 + imask = imask .or. CLSBIT + lmask = LSTBIT + if ((imask .and. RNGBIT) .eq. 0) range = MAXINT + goto 500 + +C---------------------------------------------------------------------- +C List and summary selection +C---------------------------------------------------------------------- + +C.......LIST +3100 if ((imask .and. (OUTMSK .or. CRDBIT .or. CLSBIT .or. NAMBIT)) + + .ne. 0) goto 1500 + imask = imask .or. LSTBIT + lmask = lmask .or. LSTBIT + if ((cmd .ne. SUMCMD) .and. ((imask .and. SUMBIT) .eq. 0)) + + lmask = LSTBIT + goto 500 + +C.......SUMMARY +3200 if ((imask .and. (OUTMSK .or. CRDBIT .or. CLSBIT .or. NAMBIT)) + + .ne. 0) goto 1500 + imask = imask .or. SUMBIT + if ((imask .and. RNGBIT) .eq. 0) range = MAXINT + lmask = lmask .or. SUMBIT + if ((cmd .ne. LSTCMD) .and. ((imask .and. LSTBIT) .eq. 0)) + + lmask = SUMBIT + goto 500 + + end diff --git a/pdp10/compuserve/LSTSUM.FOR b/pdp10/compuserve/LSTSUM.FOR new file mode 100644 index 0000000..e4149b1 --- /dev/null +++ b/pdp10/compuserve/LSTSUM.FOR @@ -0,0 +1,44 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C LSTSUM -- List summary line + + subroutine LSTSUM (n, str, f) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + integer str(1) + + if (n .eq. 0) return + call odec (n,3) + if ((f .and. KNOBIT) .ne. 0) call out (known,0) !" known" + call space + call out (str,0) ; if (n .ne. 1) call outc('s') + if (oflg .eq. SHORT) goto 100 + msg = locf(inrang) !" in range" + if ((f .and. ISRBIT) .ne. 0) msg = locf(inspra) !" in specified range" + if ((f .and. IGMBIT) .ne. 0) msg = locf(ingame) !" in game" + call out (msg,0) + 100 call crlf + n = 0 + return + + end diff --git a/pdp10/compuserve/LSTUPD.FOR b/pdp10/compuserve/LSTUPD.FOR new file mode 100644 index 0000000..1f65760 --- /dev/null +++ b/pdp10/compuserve/LSTUPD.FOR @@ -0,0 +1,66 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C LSTUPD -- Update list flags for given object (ship, base, planet) +C if it's allowed to be listed (or included in a summary). + + subroutine LSTUPD (lstmsk, objctr, scnbts, xxf) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + include 'lstvar/nolist' + + d = pdist (sVpos, sHpos, Vpos, Hpos) + + xf = gxf + + if (d .le. KRANGE) goto 400 !within range + if (side .eq. team) goto 400 !friendly + if (.not. PASFLG) goto 100 + xf = xf .or. PASBIT ; goto 400 !god + 100 xf = xf .or. ORNBIT !out of range + if (range .le. KRANGE) goto 200 + grpbts = grpbts .or. KNOBIT !"no KNOWN x in s.range/game" + if ((xf .and. IGMBIT) .eq. 0) xf = xf .or. KNOBIT + 200 txf = txf .or. xf !update target summary flags + if ((scnbts .and. team) .ne. 0) goto 400 !already scanned + + if ((xf .and. SUMBIT) .eq. 0) goto 700 !not requesting summary + if ((xf .and. IGMBIT) .eq. 0) goto 700 !not requesting entire game + xf = xf.and..not.LSTBIT !allow summary only (no list) + goto 500 + + 400 if (d .gt. range) goto 700 !not in requested range + if ((imask .and. CLSBIT) .ne. 0) goto 600 !looking for closest + 500 lstmsk = lstmsk .or. xf + objctr = objctr + 1 + grpbts = grpbts .or. xf + xxf = xxf .or. xf + return + + 600 if (d .gt. clsest) goto 700 !looking for closest + clsest = d ; Vposc = Vpos ; Hposc = Hpos + 700 grpbts = grpbts .or. (xf .and. (IRNBIT .or. ISRBIT .or. + + IGMBIT .or. ORNBIT)) + xxf = xxf .or. xf + return + + end diff --git a/pdp10/compuserve/MOVE.FOR b/pdp10/compuserve/MOVE.FOR new file mode 100644 index 0000000..77b286f --- /dev/null +++ b/pdp10/compuserve/MOVE.FOR @@ -0,0 +1,159 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine drives the WARP and IMPULSE engine movement. +C The desired destination coordinates are processed, the path +C searched for collisions, and the energy consumption computed. + + subroutine MOVE (*) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /chkout/ V1, H1, V2, H2, dcode, disV, disH + real d, disV, disH + + iflg = 0 !warp engines + if (shpdam(who,KDWARP) .lt. KCRIT) goto 100 !warp engines kaput? + call out (wrpdam,1) + return 1 + + entry IMPULS (*) + iflg = 1 !impulse engines + if (shpdam(who,KDIMP) .lt. KCRIT) goto 100 !impulse engines kaput? + call out (impdam,1) + return 1 + + 100 v = etim(tim0) + (slwest * 1000) + 1000 + d = 0.0 !initialize random movement + randam = iran (4000) !penalty for going too fast + time = randam / 30 + +*.......Get proposed movement + + tem = locate(2) + 200 if (tem .lt. 0) return 1 + if (tem .ne. 0) goto 300 + tem = reloc(2) + goto 200 + +*.......Convert to relative coordinates + + 300 iV = vallst(1) - shpcon(who,KVPOS) + iH = vallst(2) - shpcon(who,KHPOS) + if (.not. ((iV .eq. 0) .and. (iH .eq. 0))) goto 700 + if (oflg) 400, 400, 500 + 400 call out (error2,1) ; goto 600 + 500 call out (error1,1) + 600 if (reloc(2) .lt. 0) return 1 !aborted move + goto 300 !try again + + 700 shpcon(who,KSPCON) = GREEN !condition green + docked(who) = .FALSE. + ia = max0 (iabs(iV), iabs(iH)) !how far to go? + if (shpdam(who,KDCOMP) .ge. KCRIT) d = (ran(0) - 0.5) / 2.0 !add deflection if computer damaged + if (iflg .eq. 1) goto 800 !impulse + if (ia .gt. 6) goto 1300 !TOO fast! + if ((shpdam(who,KDWARP) .gt. 0) .and. (ia .gt. 3)) goto 900 + if (ia .gt. 4) goto 1700 + goto 1900 + +*.......Impulse movement + + 800 if (ia .eq. 1) goto 1900 !going only 1 sector? + if (oflg .eq. long) call out (move1A,0) + call out (move1B,1) + return 1 + + 900 if (oflg) 1000, 1000, 1100 !warp engines damaged +1000 call out (move2S,1) ; goto 1200 +1100 call out (move2L,1) +1200 return 1 + +1300 if (oflg) 1400, 1400, 1500 !trying to move > 6 sectors +1400 call out (move3S, 0) ; goto 1600 +1500 call out (move3L,0) +1600 if (shpdam(who,KDWARP) .gt. 0) call out2c ('3.') + if (shpdam(who,KDWARP) .eq. 0) call out2c ('6.') + return 1 + +*.......warp 5 or 6 -- might work + +1700 if (oflg .eq. long) call out (engoff,0) !warning of warp factor + if (oflg .ne. short) call out (move5L,1) + if (oflg .eq. short) call out (move5S,1) + tran = iran (100) + if (.not. (((tran .gt. 80) .and. (ia .ge. 6)) .or. + + ((tran .gt. 90) .and. (ia .eq. 5)))) goto 1900 !engines blown? + +*.......Warp engines damaged by overheating (ie speeding) + + call out (move06,0) + call oflt (randam, 3) + call out (move08,1) + if (oflg .eq. short) goto 1800 + call out (move09,0) + call oflt (time, 2) + call out (strdat,1) +1800 shpdam(who,KDWARP) = shpdam(who,KDWARP) + randam + +*.......Check path for obstacles, move to last empty sector + +1900 call check (shpcon(who,KVPOS), shpcon(who,KHPOS), iV, iH, ia, d) + ied = 40 * ia * ia !compute energy consumption + if (shpcon(who,KSHCON) .gt. 0) ied = 2 * ied + if (trstat(who) .ne. 0) ied = 3 * ied + shpcon(who,KSNRGY) = shpcon(who,KSNRGY) - ied + +* move ship + + if ((V1 .eq. shpcon(who,KVPOS)) .and. + + (H1 .eq. shpcon(who,KHPOS))) goto 2000 + indxto = (v1-1)*25 + (h1 - 1)/3 + 1 + indxfm = (shpcon(who, kvpos) - 1)*25 + (shpcon(who, khpos) - 1)/3 + 1 + call lock (board(indxto)) + if (lkfail) return 1 + if (indxto .eq. indxfm) goto 333 + call lock (board(indxfm)) + if (.not. lkfail) goto 333 + call unlock (board(indxto)) + return 1 ! failed to move +333 call setdsp (shpcon(who,KVPOS), shpcon(who,KHPOS), 0) + call setdsp (V1, H1, (team * 100) + who) + shpcon(who,KVPOS) = V1 + shpcon(who,KHPOS) = H1 + if (indxto .ne. indxfm) call unlock (board(indxfm)) + call unlock (board(indxto)) + if (trstat(who) .eq. 0) goto 2000 + tl = disp(shpcon(trstat(who),KVPOS),shpcon(trstat(who),KHPOS)) + call setdsp (V1-int(disV), H1-int(disH), tl) + call setdsp (shpcon(trstat(who),KVPOS), + + shpcon(trstat(who),KHPOS), 0) + shpcon(trstat(who),KVPOS) = V1 - disV + shpcon(trstat(who),KHPOS) = H1 - disH + +2000 if (dcode .ne. 0) call out (move10,1) !run into anything? + +*.......Compute pause time for move + + ptime = v - etim(tim0) + return + + end diff --git a/pdp10/compuserve/NOVA.FOR b/pdp10/compuserve/NOVA.FOR new file mode 100644 index 0000000..6b3c3fa --- /dev/null +++ b/pdp10/compuserve/NOVA.FOR @@ -0,0 +1,181 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine is called by SNOVA to damage an object caught by +C an exploding star. Scoring is updated, plus modifying and/or +C killing the object specified. + + subroutine NOVA (nplc, j) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /chkout/ V1, H1, iVc, iHc, dcode, idisV, idisH + real idisV, idisH + + Vfrom = iVc ; Hfrom = iHc + Vto = V1 ; Hto = H1 + if (nplc .eq. DXROM) goto 800 !Romulan? + if ((nplc .ge. DXNPLN) .and. (nplc .le. DXEPLN)) goto 1000 !Planet? + +*.......Compute size of nova + + d = 1000 + if (nplc .ge. DXFBAS) d = d - base(j,3,nplc-2) + if ((nplc .lt. DXFBAS) .and. (shpcon(j,KSHCON) .gt. 0)) + + d = d - shpcon(j,KSSHPC) + if (d .lt. 200) d = 250 + if (nplc .ge. DXFBAS) goto 200 !base? + +*.......Damage ship's devices + + do 100 i = 1, KNDEV + shpdam(j,i) = shpdam(j,i) + int(ran(0) * d * 4.0) + 100 continue + if (shpdam(j,KDSHLD) .ge. KCRIT) shpcon(j,KSHCON) = -1 + +*.......Update scoring due to nova + + 200 ihita = d * 8 + iran (1000) + if (PLAYER .and. (5-team .eq. nplc)) tpoint(KPBDAM) = + + tpoint(KPBDAM) + ihita + if ((.not. PLAYER) .and. (nplc .ge. DXFBAS)) rsr(KPBDAM) = + + rsr(KPBDAM) + ihita + if (PLAYER .and. (3-team .eq. nplc)) tpoint(KPEDAM) = + + tpoint(KPEDAM) + ihita + if ((.not. PLAYER) .and. (nplc .lt. DXFBAS)) rsr(KPEDAM) = + + rsr(KPEDAM) + ihita + if (PLAYER .and. (team+2 .eq. nplc)) tpoint(KPBDAM) = + + tpoint(KPBDAM) - ihita + if (PLAYER .and. (team .eq. nplc)) tpoint(KPEDAM) = + + tpoint(KPEDAM) - ihita + +*.......Damage ship + + if (nplc .ge. DXFBAS) goto 500 !base? + shpcon(j,KSDAM) = shpcon(j,KSDAM) + ihita + shpcon(j,KSNRGY) = shpcon(j,KSNRGY) - ihita * ran(0) + if (shpcon(j,KSHCON) .gt. 0) shpcon(j,KSSHPC) = max0( + + shpcon(j,KSSHPC) - 300 + iran(100), 0) + if (shpcon(j,KSSHPC) .le. 0) shpcon(j,KSHCON) = -1 + +* Ship destroyed? Else, displace it + + if ((shpcon(j,KSDAM) .lt. KENDAM) .and. (shpcon(j,KSNRGY) .gt. 0)) + + goto 300 + call setdsp (shpcon(j,KVPOS), shpcon(j,KHPOS), 0) + alive(j) = 0 ; klflg = 2 + goto 400 + 300 call jump (nplc,j) !displace the ship + 400 dispfr = DXSTAR * 100 ; dispto = (nplc * 100) + j ; iwhat = 8 + Vto = shpcon(j,KVPOS) ; Hto = shpcon(j,KHPOS) + shstto = shpcon(j,KSSHPC) ; shcnto = shpcon(j,KSHCON) + if ((klflg .ne. 0) .and. PLAYER .and. (team .eq. nplc)) + + tmscor(team,KPEKIL) = tmscor(team,KPEKIL) - 5000 + if ((klflg .ne. 0) .and. PLAYER .and. (team .ne. nplc)) + + tmscor(team,KPEKIL) = tmscor(team,KPEKIL) + 5000 + if ((klflg .ne. 0) .and. (.not. PLAYER)) + + rsr(KPEKIL) = rsr(KPEKIL) + 5000 + call pridis (shpcon(j,KVPOS), shpcon(j,KHPOS), KRANGE, 0, 0) + call makhit !send hit message + if (trstat(j) .ne. 0) call trcoff (j) !break tractor beam? + return + +*.......Damage base + + 500 jbase = nplc - 2 + if (base(j,3,jbase) .ne. 1000) goto 600 !base ALREADY damaged? + dispfr = DXSTAR * 100 ; dispto = (nplc * 100) + j ; iwhat = 9 + call pridis (30, 30, 100, jbase, 0) + dbits = dbits .and. .not. nomsg + call makhit !send galaxy-wide distress call + + 600 base(j,3,jbase) = max0 (base(j,3,jbase) - 300 + iran (100) , 0) + if (base(j,3,jbase) .gt. 0) call jump (nplc,j) !if base still alive, displace + dispfr = DXSTAR * 100 ; dispto = (nplc * 100) + j ; iwhat = 8 + Vfrom = iVc ; Hfrom = iHc + Vto = base(j,KVPOS,jbase) ; Hto = base(j,KHPOS,jbase) + shstto = base(j,3,jbase) ; shcnto = 1 + if (base(j,3,jbase) .gt. 0) goto 700 + if (.not. PLAYER) rsr(KPBDAM) = rsr(KPBDAM) + 10000 + if (PLAYER .and. (team .eq. jbase)) tpoint(KPBDAM) = + + tpoint(KPBDAM) - 10000 + if (PLAYER .and. (team .ne. jbase)) tpoint(KPBDAM) = + + tpoint(KPBDAM) + 10000 + nbase(jbase) = nbase(jbase) - 1 + call baskil (jbase) + klflg = 2 + 700 call pridis (base(j,KVPOS,jbase), base(j,KHPOS,jbase), + + KRANGE, 0, 0) + call makhit + +*.......Base killed? + + if (base(j,3,jbase) .gt. 0) return + call setdsp (base(j,KVPOS,jbase), base(j,KHPOS,jbase), 0) + iwhat = 10 ; dispfr = DXSTAR * 100 ; dispto = (nplc * 100) + j + call pridis (30, 30, 100, jbase, 0) + dbits = dbits .and. .not. nomsg + Vto = base(j,KVPOS,jbase) ; Hto = base(j,KHPOS,jbase) + call makhit !send galaxy-wide death notice + return + +*.......Romulan damaged/killed by nova + +c-- 800 if (iran(2) .eq. 1) call deadro (d1,d2)!kill Romulan? +800 continue ! don't kill the Romulan + if (ROM) call jump (DXROM,1) + if (ROM) erom = erom / 2 + if (.not. PLAYER) rsr(KPRKIL) = rsr(KPRKIL) - erom + if (PLAYER) tpoint(KPRKIL) = tpoint(KPRKIL) + erom + dispfr = DXSTAR * 100 ; dispto = DXROM * 100 ; iwhat = 8 + shstto = erom ; shcnto = 1 + Vto = locr(KVPOS) ; Hto = locr(KHPOS) + call pridis (Vto, Hto, KRANGE, 0, 0) + call makhit !send hit message + if (ROM) goto 900 + if (.not. PLAYER) rsr(KPRKIL) = rsr(KPRKIL) - 5000 + if (PLAYER) tpoint(KPRKIL) = tpoint(KPRKIL) + 5000 + 900 return + +*.......Planet damaged/destroyed by nova + +1000 dispfr = DXSTAR * 100 ; dispto = (nplc * 100) + j ; iwhat = 8 + call lock (plnlok,'NOVA') !lock LOCPLN array + if (lkfail) return ! ignore the destruction + Vto = locpln(j,KVPOS) ; Hto = locpln(j,KHPOS) + locpln(j,3) = locpln(j,3) - 3 + if (locpln(j,3) .lt. 0) klflg = 2 !planet killed? + shstto = max0 (locpln(j,3), 0) + call pridis (Vto, Hto, KRANGE, 0, 0) + call makhit !send hit message + if (locpln(j,3) .ge. 0) goto 1100 + +* Update planet information + + if (PLAYER) tpoint(KNPDES) = tpoint(KNPDES) - 1000 + if (.not. PLAYER) rsr(KNPDES) = rsr(KNPDES) - 1000 + pteam = dispc (locpln(j,KVPOS), locpln(j,KHPOS)) - DXNPLN + call setdsp (locpln(j,KVPOS), locpln(j,KHPOS), 0) + call plnrmv (j,pteam) +1100 call unlock (plnlok) !unlock LOCPLN array + return + + end diff --git a/pdp10/compuserve/OUTHDB.FOR b/pdp10/compuserve/OUTHDB.FOR new file mode 100644 index 0000000..684ac39 --- /dev/null +++ b/pdp10/compuserve/OUTHDB.FOR @@ -0,0 +1,41 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + +*.......Echo input (diagnostic print) + + if (.not. PASFLG) goto 222 + call out ('iwhat: ',0) ; call odec (iwhat,0) + call out (' ihita: ',0) ; call odec (ihita,0) ; call crlf + call out ('xto: ',0) ; call odec (xto,0) + call out (' yto: ',0) ; call odec (yto,0) ; call crlf + call out ('xfrom: ',0) ; call odec (xfrom,0) + call out (' yfrom: ',0) ; call odec (yfrom,0) ; call crlf + call out ('critdv: ',0) ; call odec (critdv,0) + call out (' critdm: ',0) ; call odec (critdm,0) ; call crlf + call out ('klflag: ',0) ; call odec (klflag,0) + call out (' shjump: ',0) ; call odec (shjump,0) ; call crlf + call out ('dispto: ',0) ; call odec (dispto,0) + call out (' dispfr: ',0) ; call odec (dispfr,0) ; call crlf + call out ('shcnto: ',0) ; call odec (shcnto,0) + call out (' shstto: ',0) ; call odec (shstto,0) ; call crlf + call out ('shcnfr: ',0) ; call odec (shcnfr,0) + call out (' shstfr: ',0) ; call odec (shstfr,0) ; call crlf + 222 continue diff --git a/pdp10/compuserve/OUTHIT.FOR b/pdp10/compuserve/OUTHIT.FOR new file mode 100644 index 0000000..8fc6cad --- /dev/null +++ b/pdp10/compuserve/OUTHIT.FOR @@ -0,0 +1,288 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine processes the information stored in the hit queue, +C printing out the text produced during battles, primarily. +C This information is stored in the hit queue using MAKHIT, and +C is retrieved by OUTHIT using GETHIT. The 'type' of message is +C coded into the variable IWHAT: 1=phaser hit, 2=torpedo hit, +C 3=torpedo deflection, 4=torpedo miss, 5=tordedo into black hole, +C 6=star unaffected by torpedo, 7=star goes nova, 8=star damages +C someone, 9=galaxy-wide base request for assistance, 10=galaxy- +C wide report of base destroyed, 11=romulan detected message, +C 12=ship-to-ship energy transfer, 13=Tractor beam activated, +C 14=Tractor beam broken, 15=torpedo neutralized. + + subroutine OUTHIT + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + 100 call blkset (iwhat, 0, 17) !zero out hit info + if (hitflg(who) .eq. 0) return !any(more) hit messages? + if (oflg .eq. long) call crlf + call gethit (who) !get next message off hit queue + +*.......Go to proper section of code depending on type of message + + goto (200,200,200,4600,4600,200,200,200,6000,6000,6800,6900, + + 7300,7600,4600) iwhat + goto 100 + +*.......Phaser, Photon, and Star hits + + 200 call odisp (dispfr, 0) !display hitter + nplcf = dispfr / 100 ; nplct = dispto / 100 + if ((nplcf .lt. DXNPLN) .or. (nplcf .gt. DXEPLN)) goto 300 + if (shstfr .eq. 0) goto 300 + if (oflg .eq. LONG) call outc ('(') + call odec (shstfr, 0) + if (oflg .eq. LONG) call outc (')') + + 300 call space + call prloc (Vfrom, Hfrom, 0, 0, ocflg, oflg) !display hitter's location + if ((oflg .ne. short) .and. (nplcf .lt. DXROM)) call outc (',') + +* Display hitter's shield strength (if ship or base) + + if (nplcf .gt. DXROM) goto 400 !if hitter romulan or star, jump + call space + call osflt (shcnfr*shstfr , 0) !hitter's shield % + if (oflg .ne. short) call outc ('%') + + 400 call space + if (iwhat .ne. 7) goto 800 !star goes nova? + +* Star goes nova message. (IWHAT = 7) + + if (oflg) 500, 500, 600 + 500 call outc ('N') ; goto 700 + 600 call out (outh01 , 0) + 700 call crlf + goto 100 + + 800 if (iwhat .ne. 6) goto 1200 !star unaffected? + +* Star unaffected by torpedo message. (IWHAT = 6) + + if (oflg) 900, 900, 1000 + 900 call outc ('U') ; goto 1100 +1000 call out (star02 , 0) +1100 call crlf + goto 100 + +1200 if (iwhat .ne. 3) goto 1500 !torpedo deflection? + +* Torpedo deflected by shields. (IWHAT = 3) + + if (oflg) 1500, 1300, 1400 +1300 call out (outh29, 0) ; goto 2500 +1400 call out (outh30, 0) ; goto 2500 + +* Someone is getting damaged. + +1500 if (oflg .eq. long) call out (outh02 , 0) !'makes' + call space + if ((nplct .gt. DXROM) .and. (iwhat .ne. 8)) goto 1900 !romulan or planet hit by star? + if (nplct .gt. DXROM) goto 1600 !hittee a romulan or planet? + call oflt (ihita , 0) !size of hit + if (oflg .ne. short) call out (outh03 , 0) !' unit ' + if (iwhat .ne. 8) goto 1900 !not a nova? + +* Star damages someone. (IWHAT = 8) + +1600 if (oflg) 1700, 1700, 1800 +1700 call outc ('N') ; goto 2500 +1800 call out (outh04 , 0) ; goto 2500 + +1900 if (iwhat .eq. 1) goto 2200 !phasers or torpedoes? + +* Torpedo hit. (IWHAT = 2) + + if (oflg) 2000, 2000, 2100 +2000 call outc ('T') ; goto 2500 +2100 call out (outh05 , 0) ; goto 2500 + +* Phaser hit. (IWHAT = 1) + +2200 if (oflg) 2300, 2300, 2400 +2300 call outc ('P') ; goto 2500 +2400 call out (outh06 , 0) + +* Begin printing information on Hittee. + +2500 if (oflg) 2600, 2600, 2700 +2600 call out2c (' ') ; goto 2800 +2700 if ((nplct .lt. DXROM) .and. (hcpos .gt. 40)) call crlf + +2800 call odisp (dispto, 0) !Display hittee + if ((nplct .lt. DXNPLN) .or. (nplct .gt. DXEPLN)) goto 2900 + if (shstto .eq. 0) goto 2900 + if (oflg .eq. LONG) call outc ('(') + call odec (shstto, 0) + if (oflg .eq. LONG) call outc (')') + +2900 call space + if (shjump .eq. 0) goto 3300 !Displacement? + +* Hittee displaced by blast. + + if (oflg) 3200, 3000, 3100 +3000 call out2c ('--') ; goto 3200 +3100 call out (displc,0) ; goto 3400 +3200 call outc ('>') ; goto 3400 + +3300 if (oflg .ne. short) call outc ('@') !print hittee's location +3400 call prloc (Vto, Hto, 0, 0, ocflg, SHORT) + if ((nplct .gt. DXROM) .or. (klflg .ne. 0)) goto 3900 !no hittee shield info or hittee dead? + if (oflg .ne. short) call outc (',') + call space + call osflt (shcnto*shstto , 0) !print hittee shield information + if (oflg .ne. short) call outc ('%') + +* Show any critical device damage, if you are the hittee! + + if (dispto .ne. (who + (team * 100))) goto 3900 + if (critdv .eq. 0) goto 4100 !anything damaged? + call out2c ('; ') + call odev (critdv) !print device name + if (oflg) 3500, 3600, 3700 +3500 call space ; goto 3800 +3600 call out (outh08 , 0) ; goto 3800 +3700 call out (outh07 , 0) +3800 call oflt (critdm , 0) !device damage + if (oflg .eq. long) call out (units1 , 0) !' units' + +* Critical hit on base? + +3900 if ((oflg .ne. LONG) .or. ((nplct .ne. DXFBAS) .and. + + (nplct .ne. DXEBAS))) goto 4100 + if ((klflg .eq. 0) .and. (critdm .eq. 0)) goto 4500 + call out2c (' ') + if (klflg .ne. 0) call crlf + call out (outh31, 1) + if (oflg .ne. LONG) goto 4100 + call out (outh32, 1) + if (klflg .ne. 0) goto 4000 + call out (outh33, 1) + goto 4500 +4000 call out (outh34, 0) + + +* Hittee destroyed by hit? + +4100 if (klflg .eq. 0) goto 4500 + call space + if (oflg .eq. long) call crlf + if (klflg .eq. 2) goto 4400 !ship simply dead, or > black hole? + call odisp (dispto, 0) !ship > black hole!! + if (oflg) 4200, 4200, 4300 +4200 call out (outh10 , 1) ; goto 4400 +4300 call out (outh09 , 1) +4400 call odisp (dispto, 1) !'ship destroyed' message + call out (destry , 1) +4500 call crlf + goto 100 !get next hit message + +*.......Torpedo missed, torpedo into black hole, torpedo neutralized + +4600 if (oflg) 4700, 4700, 4800 +4700 call outc ('T') ; goto 4900 +4800 call out (tormis , 0) +4900 call odec (critdv,0) !torpedo number + if (iwhat - 5) 5000, 5400, 5700 + +* Torpedo miss. (IWHAT = 4) + +5000 if (oflg) 5100, 5100, 5200 +5100 call out (outh13 , 0) ; goto 5300 +5200 call out (outh12 , 0) + +5300 call prloc (Vto, Hto, 1, 0, ocflg, oflg) !print location + goto 100 !get next hit message +* Torpedo into black hole. (IWHAT = 5) + +5400 if (oflg) 5500, 5500, 5600 +5500 call out (outh15 , 0) ; goto 5300 +5600 call out (outh14 , 0) ; goto 5300 + +* Torpedo neutralized by friendly object. (IWHAT = 15) + +5700 if (oflg) 5800, 5800, 5900 +5800 call out (outh28 , 0) ; goto 5300 +5900 call out (outh27 , 0) ; goto 5300 + +*.......Base under attack, base destroyed + +6000 if (shpdam(who,KDRAD) .gt. KCRIT) goto 100 !if radio damaged, don't output + if ((nomsg .and. bits(who)) .ne. 0) goto 100 !if radio off, don't output + call odisp (dispto, 1) !output base 'name' + call prloc (Vto, Hto, 0, 0, ocflg, oflg) + if (iwhat .eq. 10) goto 6400 + +* Galaxy-wide request for assistance. (IWHAT = 9) + + if (oflg) 6100, 6200, 6300 +6100 call out2c (' A') ; call crlf ; goto 100 +6200 call out (outh17 , 1) ; goto 100 +6300 call out (outh16 , 1) ; goto 100 + +* Galaxy-wide report of base destroyed. (IWHAT = 10) + +6400 if (oflg) 6500, 6600, 6700 +6500 call out2c (' D') ; call crlf ; goto 100 +6600 call out (outh19 , 1) ; goto 100 +6700 call out (outh18 , 1) ; goto 100 + +*.......Romulan detected at ... (IWHAT = 11) + +6800 call odisp (dispfr, 1) + if (oflg .eq. long) call out (outh20 , 0) + call space + call prloc (Vfrom, Hfrom, 1, 0, ocflg, oflg) + goto 100 + +*.......Ship-to-ship energy transfer. (IWHAT = 12) + +6900 call odisp (dispfr, 1) !display sender's ship name + if (oflg .eq. long) call out (outh21 , 0) + call oflt (ihita , 0) !print size of energy transfer + if (oflg) 7000, 7000, 7100 +7000 call out2c (' >') ; goto 7200 +7100 call out (outh22 , 0) +7200 call space + call odisp (dispto, 1) !display receiver's ship name + call crlf + goto 100 !get next hit message + +*.......Tractor beam activated. (IWHAT = 13) + +7300 if (oflg) 7400, 7400, 7500 +7400 call out (outh24 , 1) ; goto 100 +7500 call out (outh23 , 1) ; goto 100 + +*.......Tractor beam broken. (IWHAT = 14) + +7600 if (oflg) 7700, 7700, 7800 +7700 call out (outh26 , 1) ; goto 100 +7800 call out (outh25 , 1) ; goto 100 + + end diff --git a/pdp10/compuserve/OUTMSG.FOR b/pdp10/compuserve/OUTMSG.FOR new file mode 100644 index 0000000..e8751f6 --- /dev/null +++ b/pdp10/compuserve/OUTMSG.FOR @@ -0,0 +1,54 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine searches for and prints out messages received by +C the ship's sub-space radio. + + subroutine OUTMSG + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /omlocl/ msg(16) + + 100 dbits = 0 ; dispfr = 0 + if (msgflg(who) .eq. 0) return !any more messages? + + call getmsg (who, msg) !get another message + if (dispfr .eq. 0) goto 400 !message not from player + if ((gagmsg .and. bits(mod(dispfr,100))) .ne. 0) goto 100 + call out (mess01,0) !message from ... + call odisp (dispfr, 1) + call out (mess02,0) + + k = 1 + do 300 i = 1, KNPLAY !message to ... + if ((dbits .and. k) .eq. 0) goto 200 + call out2c (names(i,3)) + 200 k = k * 2 + 300 continue + +*.......Print out message + + call crlf + 400 call out (msg,1) + goto 100 + + end diff --git a/pdp10/compuserve/PASWRD.FOR b/pdp10/compuserve/PASWRD.FOR new file mode 100644 index 0000000..72acb4c --- /dev/null +++ b/pdp10/compuserve/PASWRD.FOR @@ -0,0 +1,42 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine sets (and unsets) the password flag for use in +C debugging, cheating, etc. + + subroutine PASWRD + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + PASFLG = equal(tknlst(2), KPASS, 1) !match the password? + if (PASFLG .eq. -1) PASFLG = 0 !not an exact match +C 70725 project added by merlyn (drforbin) + if ((usrprj(0) .ne. "70000) .and. (usrprj(0) .ne. "337) .and. + + (usrprj(0) .ne. "70006) + +.and. (usrprj(0) .ne. "70725)) !added + + pasflg = 0 + if (PASFLG) return !is he ok? + call out (unkcom, 0) !WHAT password routine!?! + if (oflg .ne. short) call out (forhlp, 1) + return + + end diff --git a/pdp10/compuserve/PHACON.FOR b/pdp10/compuserve/PHACON.FOR new file mode 100644 index 0000000..d9b3c55 --- /dev/null +++ b/pdp10/compuserve/PHACON.FOR @@ -0,0 +1,166 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine controls the phaser banks of an individual ship. +C The target coordinates are read in, verified as being valid, +C the hit is made, and the appropriate messages are printed. + + subroutine PHACON (*) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + +*.......Phasers critically damaged? + + if (shpdam(who,KDPHAS) .lt. KCRIT) goto 100 + call out (phacn0,1) + return 1 + +*.......Target location read in + + 100 tem = locate(-3) + 200 if (tem .eq. 1) call out (erloc1,1) + if ((tem .lt. 0) .or. (tem .eq. 1)) return 1 !abort phasers? + if (tem .ne. 0) goto 300 + tem = reloc(-3) + goto 200 + + 300 bank = 1 ; if (phbank(2) .lt. phbank(1)) bank = 2 + iV = vallst(tem-1) ; iH = vallst(tem) !identify type of target + nplc = dispc (iV,iH) + ip = dispx (iV,iH) + if ((nplc .lt. DXFSHP) .or. (nplc .gt. DXEPLN)) goto 1600 + if ((nplc .lt. DXFBAS) .and. (.not. alive(ip))) goto 1600 + +* determine distance to target, abort if 0 or > KRANGE + + id = pdist (iV, iH, shpcon(who,KVPOS), shpcon(who,KHPOS)) + if (id .ne. 0) goto 600 + if (oflg) 400, 400, 500 + 400 call out (error2,1) ; return 1 + 500 call out (error1,1) ; return 1 + + 600 if ((nplc .eq. team) .or. (nplc .eq. team+2) .or. + + (nplc .eq. team+DXNPLN)) goto 1800 + if (id .le. KRANGE) goto 700 + call out (phacn1,1) ; return 1 + +* Determine size of phaser hit + +700 call pause (phbank(bank) - etim(tim0)) + phit = 200 + if (tem .eq. 2) goto 800 !phaser hit specified? + if ((vallst(1) .gt. 500) .or. (vallst(1) .lt. 50)) goto 1700 + phit = vallst(1) + + 800 if (shpcon(who,KSHCON) .lt. 0) goto 900 !high speed shield control + if (oflg .ne. short) call out (phacn2, 1) + shpcon(who,KSNRGY) = shpcon(who,KSNRGY) - 2000 + 900 if ((iran(100) * phit) .le. 18900) goto 1000 !phasers overheat? + call out (phacn4,1) + if (oflg .eq. long) call out (phacn5,1) + shpdam(who,KDPHAS) = shpdam(who,KDPHAS) + 750 + + + (iran(100) * phit * 7.5) / 100 + +*.......Check target, hit and damage + +1000 if ((nplc .lt. DXNPLN) .or. (nplc .gt. DXEPLN)) goto 1100 + +* damage planet + + Vfrom = shpcon(who,KVPOS) ; Hfrom = shpcon(who,KHPOS) + shstfr = shpcon(who,KSSHPC) ; shcnfr = shpcon(who,KSHCON) + Vto = iV ; Hto = iH ; shjump = 0 + dispfr = who + (team * 100) + dispto = disp(iV,iH) ; iwhat = 1 + call pridis (iV, iH, KRANGE, 0, 0) + if ((iran(100) * phit) / (25 * id) .gt. 150) locpln(ip,3) = + + max0 (locpln(ip,3) - 1, 0) + shstto = locpln(ip,3) + call makhit + goto 1500 + +* damage Romulan + +1100 if (nplc .ne. DXROM) goto 1200 + Vfrom = shpcon(who,KVPOS) ; Hfrom = shpcon(who,KHPOS) + Vto = locr(KVPOS) ; Hto = locr(KHPOS) ; shjump = 0 + call pharom (phit, id) + tpoint(KPRKIL) = tpoint(KPRKIL) + ihita + if (.not. ROM) tpoint(KPRKIL) = tpoint(KPRKIL) + 5000 + shstfr = shpcon(who,KSSHPC) ; shcnfr = shpcon(who,KSHCON) + shstto = erom ; shcnto = 1 + dispfr = who + (team * 100) + dispto = DXROM * 100 ; iwhat = 1 + call pridis (iV, iH, KRANGE, 0, 0) + call makhit + goto 1500 + +* damage ships and bases + +1200 if (nplc .lt. DXFBAS) goto 1300 + if (base(ip,3,nplc-2) .ne. 1000) goto 1300 + Vto = iV ; Hto = iH + iwhat = 9 ; dispto = disp(iV,iH) + dispfr = who + (team * 100) + call pridis (30, 30, 100, nplc-2, 0) + dbits = dbits .and. .not. nomsg + call makhit +1300 call phadam (nplc, ip, id, phit, .TRUE.) !hit him! + +* set up parameters for MAKHIT + + shstfr = shpcon(who,KSSHPC) ; shcnfr = shpcon(who,KSHCON) + Vfrom = shpcon(who,KVPOS) ; Hfrom = shpcon(who,KHPOS) + Vto = iV ; Hto = iH ; shjump = 0 + dispfr = who + (team * 100) + dispto = (nplc * 100) + ip ; iwhat = 1 + if (nplc .ge. DXFBAS) call pridis (iV, iH, KRANGE, nplc-2, 0) + if (nplc .lt. DXFBAS) call pridis (iV, iH, KRANGE, nplc, 0) + call pridis (iV, iH, 4, 0, 1) + dbits = dbits .or. bits(who) + call makhit +1400 if ((nplc .lt. DXFBAS) .or. (disp(iV,iH) .ne. 0)) goto 1500 !base destroyed? + iwhat = 10 ; dispto = (nplc * 100) + ip + dispfr = who + (team * 100) + Vto = iV ; Hto = iH + call pridis (30, 30, 100, nplc-2, 0) + dbits = dbits .and. .not. nomsg + call makhit + +* pay energy for firing, update phaser bank condition + +1500 shpcon(who,KSNRGY) = shpcon(who,KSNRGY) - (phit * 10) + shpcon(who,KSPCON) = RED + phbank(bank) = etim (tim0) + (slwest + 1) * 1500 + + + shpdam(who,KDPHAS) + return + +1600 call out (phacn7,1) !no target at that location + return 1 + +1700 call out (phacn8,1) !Improper size for phaser hit + return 1 + +1800 call out (phacn9,1) !Trying to damage an ally + return 1 + + end diff --git a/pdp10/compuserve/PLACE.FOR b/pdp10/compuserve/PLACE.FOR new file mode 100644 index 0000000..13f976d --- /dev/null +++ b/pdp10/compuserve/PLACE.FOR @@ -0,0 +1,57 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine is used to randomly position objects in the +C universe. It can position one or many such objects in a +C single call. It is called by SETUP and ROMDRV. + + subroutine PLACE (object, n, V, H) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + do 600 k = 1, n + 100 V = iran (KGALV) !find random V location + H = iran (KGALH) !find random H location + if (disp(V,H) .ne. 0) goto 100 !position already filled? + if (object/100 .gt. DXESHP) goto 500 !PLACEing a ship? + +* Check to make sure ship is not PLACEd in enemy territory. + + pteam = 3 - (object/100) + if (nbase(pteam) .le. 0) goto 300 + do 200 i = 1, KNBASE + if (ldis (V, H, base(i,KVPOS,pteam), base(i,KHPOS,pteam), 4)) + + goto 100 + 200 continue + 300 if ((nplnet .le. 0) .or. (numcap(pteam) .le. 0)) goto 500 + do 400 i = 1, nplnet + if (pteam .ne. dispc (locpln(i,KVPOS), locpln(i,KHPOS))) + + goto 400 + if (ldis (V, H, locpln(i,KVPOS), locpln(i,KHPOS), 2)) + + goto 100 + 400 continue + 500 call setdsp (V, H, object) !set up display code +c--- if (object/100 .lt. DXSTAR) call setdsp (V, H, (disp(V,H) + k)) + 600 continue + return + + end diff --git a/pdp10/compuserve/PLNATK.FOR b/pdp10/compuserve/PLNATK.FOR new file mode 100644 index 0000000..576b151 --- /dev/null +++ b/pdp10/compuserve/PLNATK.FOR @@ -0,0 +1,95 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine controls the phaser defenses of planets. These +C are activated whenever a player (or the Romulan) makes a time- +C consuming move. A player only activates enemy and neutral +C planets, not planets on his own side (the Romulan activates +C ALL planets). The size of the hit is controlled by how many +C 'BUILDS' the planet has undergone. + + subroutine PLNATK + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + if (nplnet .le. 0) go to 400 + do 300 k = 1, nplnet + pcode = dispc (locpln(k,KVPOS), locpln(k,KHPOS)) + pteam = pcode - DXNPLN + if ((pcode .eq. DXNPLN) .and. (iran(2) .eq. 1)) goto 300 !50% chance of attack + if (PLAYER .and. (pteam .eq. team)) goto 300 !don't activate friendly planets + +*.........Search for a player within range + + do 200 j = 1, KNPLAY + jtype = DXFPLN + if (j .gt. KNPLAY/2) jtype = DXEPLN + if ((pcode .eq. jtype) .or. (.not. alive(j))) goto 200 + if (disp(shpcon(j,KVPOS),shpcon(j,KHPOS)) .le. 0) goto 200 + if (.not. ldis (shpcon(j,KVPOS), shpcon(j,KHPOS), + + locpln(k,KVPOS), locpln(k,KHPOS), 2)) goto 200 !in range? + +* Set up parameters for call to MAKHIT + + dispfr = disp (locpln(k,KVPOS), locpln(k,KHPOS)) + dispto = disp (shpcon(j,KVPOS), shpcon(j,KHPOS)) + shstfr = locpln(k,3) + Vfrom = locpln(k,KVPOS) ; Hfrom = locpln(k,KHPOS) + Vto = shpcon(j,KVPOS) ; Hto = shpcon(j,KHPOS) + shjump = 0 + iwhat = 1 ; phit = (50 + (30 * locpln(k,3))) / numply + id = pdist (Vfrom, Hfrom, Vto, Hto) + call phadam (2, j, id, phit, .FALSE.) !hit him! + if (pcode .ne. DXNPLN) tmscor(pteam,KPEDAM) = + + tmscor(pteam,KPEDAM) + ihita + if ((klflg .ne. 0) .and. (pcode .ne. DXNPLN)) + + tmscor(pteam,KPEKIL) = tmscor(pteam,KPEKIL) + 5000 + call pridis (shpcon(j,KVPOS), shpcon(j,KHPOS), KRANGE, + + pteam, 0) + call pridis (shpcon(j,KVPOS), shpcon(j,KHPOS), 4, 0, 1) + call makhit !send hit message + 200 continue + +*.........Hit romulan if he's alive and in range + + if (.not. ROM) goto 300 + if (.not. ldis(locr(KVPOS), locr(KHPOS), locpln(k,KVPOS), + + locpln(k,KHPOS), 2)) goto 300 + dispfr = disp (locpln(k,KVPOS), locpln(k,KHPOS)) + dispto = DXROM * 100 ; iwhat = 1 + shstfr = locpln(k,3) + Vfrom = locpln(k,KVPOS) ; Hfrom = locpln(k,KHPOS) + Vto = locr(KVPOS) ; Hto = locr(KHPOS) ; shjump = 0 + call pridis (locr(KVPOS), locr(KHPOS), KRANGE, pteam, 0) + call pridis (locr(KVPOS), locr(KHPOS), 4, 0, 1) + id = pdist (Vfrom, Hfrom, Vto, Hto) + call pharom (50 + (30 * locpln(k,3)), id) + shstto = erom ; shcnto = 1 + if (pcode .ne. DXNPLN) tmscor(pteam,KPRKIL) = + + tmscor(pteam,KPRKIL) + ihita + if ((.not. ROM) .and. (pcode .ne. DXNPLN)) + + tmscor(pteam,KPRKIL) = tmscor(pteam,KPRKIL) + 5000 + call makhit !send hit message + 300 continue + 400 return + + end diff --git a/pdp10/compuserve/PLNRMV.FOR b/pdp10/compuserve/PLNRMV.FOR new file mode 100644 index 0000000..66f5197 --- /dev/null +++ b/pdp10/compuserve/PLNRMV.FOR @@ -0,0 +1,60 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine is called whenever a planet is destroyed. It +C updates the planetary information, and checks if this ends +C the game or undocks a player. + + subroutine PLNRMV (i,pteam) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + if (pteam .lt. 0) return + if (i .gt. nplnet) return + if (i .le. 0) return + if (pteam .le. 0) goto 100 !a captured planet? + if (pteam .gt. 2) goto 100 + numcap(pteam) = numcap(pteam) - 1 + call baskil (pteam) !anybody docked at it? + +* Shift the planet array into the empty row + + 100 if (i .eq. nplnet) goto 110 + call blkmov (locpln(i+1,KVPOS), locpln(i,KVPOS), nplnet-i) + call blkmov (locpln(i+1,KHPOS), locpln(i,KHPOS), nplnet-i) + call blkmov (locpln(i+1,3), locpln(i,3), nplnet-i) + call blkmov (locpln(i+1,4), locpln(i,4), nplnet-i) + +110 nplnet = nplnet - 1 + +* update display codes + + if ((nplnet .le. 0) .or. (i .gt. nplnet)) go to 300 + do 200 j = i, nplnet + call setdsp (locpln(j,KVPOS), locpln(j,KHPOS), + + (disp (locpln(j,KVPOS), locpln(j,KHPOS)) - 1)) + 200 continue + + 300 call endgam !end of game? + return + + end diff --git a/pdp10/compuserve/POINTS.FOR b/pdp10/compuserve/POINTS.FOR new file mode 100644 index 0000000..8753d25 --- /dev/null +++ b/pdp10/compuserve/POINTS.FOR @@ -0,0 +1,200 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine itemizes the current point totals. + + subroutine POINTS (DFLG) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /polocl/ total(4), fflg, eflg, rflg, iflg, owidth + + call blkset (total, 0, 4) + if (DFLG) goto 500 + fflg = .FALSE. ; eflg = .FALSE. + rflg = .FALSE. ; iflg = .FALSE. + if (ntok .gt. 1) goto 50 + if (who .ne. 0) iflg = .TRUE. !No IFLG option in Pre-game + if (iflg) goto 900 + fflg = .TRUE. ; eflg = .TRUE. + rflg = .TRUE. ; goto 700 + +*.......Identify input switches + + 50 do 600 i = 2, KMAXTK + if (typlst(i) .ne. KALF) goto 700 + if (.not. (equal(tknlst(i), 'ME') .or. + + equal(tknlst(i), 'I'))) goto 100 + if (who .eq. 0) goto 100 !No IFLG option in Pre-game + iflg = .TRUE. ; goto 600 + 100 if (.not. (equal(tknlst(i), federa) .or. + + equal(tknlst(i), 'HUMANS'))) goto 200 + fflg = .TRUE. ; goto 600 + 200 if (.not. (equal(tknlst(i), 'EMPIRE') .or. + + equal(tknlst(i), 'KLINGONS'))) goto 300 + eflg = .TRUE. ; goto 600 + 300 if (.not. equal(tknlst(i), 'ROMULANS')) goto 400 + rflg = .TRUE. ; goto 600 + 400 if (equal (tknlst(i), 'ALL')) goto 500 + goto 800 + 500 fflg = .TRUE. ; eflg = .TRUE. ; rflg = .TRUE. ; iflg = .TRUE. + if (who .eq. 0) iflg = .FALSE. !No IFLG option in Pre-game + 600 continue + + 700 if (.not. ROMOPT) rflg = .FALSE. + if (fflg .or. eflg .or. rflg .or. iflg) goto 900 + +*.......Incorrect input, POINTS aborted + + 800 call out (poin04,1) + return + +*.......Print out header for POINTS + + 900 call crlf + if (oflg) 1000, 1100, 1200 +C drforbin mod following lines +1000 call tab (14) ; goto 1300 !plus 3 +1100 call tab (24) ; goto 1300 !plus 1 +1200 call tab (31) !plus 2 +1300 if (.not. iflg) goto 1400 + call space + call out2w (names(who,1), names(who,2)) + if (oflg .ne. short) call out2c (' ') +1400 if (.not. fflg) goto 1500 + call out (federa,0) + call space + if (oflg .ne. short) call out2c (' ') +1500 if (.not. eflg) goto 1600 + call out (empire,0) + call space + if (oflg .ne. short) call out2c (' ') +1600 if (rflg) call out (romula,0) + call crlf + +*.......Print out itemized scoring information + + do 3000 i = 1, KNPOIN + if (.not. ((iflg .and. (score(i, who) .ne. 0)) .or. (fflg .and. + + (tmscor(1,i) .ne. 0)) .or. (eflg .and. (tmscor(2,i) .ne. 0)) + + .or. (rflg .and. (rsr(i) .ne. 0)))) goto 3000 + +* Output the proper title for score breakdown + + goto (1700,1800,1900,2000,2100,2200,2300,2400) i +1700 if (oflg .eq. short) call out (poi11S, 0) + if (oflg .ne. short) call out (poi11L, 0) + if (oflg .eq. long) call tab (26) + goto 2500 +1800 if (oflg .eq. short) call out (poi12S, 0) + if (oflg .ne. short) call out (poi12L, 0) + if (oflg .eq. long) call out (poin22, 0) + goto 2500 +1900 if (oflg .eq. short) call out (poi13S, 0) + if (oflg .ne. short) call out (poi13L, 0) + if (oflg .eq. long) call tab (26) + goto 2500 +2000 if (oflg .eq. short) call out (poi14S, 0) + if (oflg .ne. short) call out (poi14L, 0) + if (oflg .eq. long) call out (poin21, 0) + goto 2500 +2100 if (oflg .eq. short) call out (poi15S, 0) + if (oflg .ne. short) call out (poi15L, 0) + if (oflg .eq. long) call out (poin23, 0) + goto 2500 +2200 if (oflg .eq. short) call out (poi16S, 0) + if (oflg .ne. short) call out (poi16L, 0) + if (oflg .eq. long) call out (poin22, 0) + goto 2500 +2300 if (oflg .eq. short) call out (poi17S, 0) + if (oflg .ne. short) call out (poi17L, 0) + if (oflg .eq. long) call out (poin20, 0) + goto 2500 +2400 if (oflg .eq. short) call out (poi18S, 0) + if (oflg .ne. short) call out (poi18L, 0) + if (oflg .eq. long) call out (poin19, 0) + +*.........Print out scores + +2500 if (.not. iflg) goto 2600 + call oflt (score(i, who), 11) + total(1) = total(1) + score(i, who) +2600 if (.not. fflg) goto 2700 + call oflt (tmscor(1,i), 11) + total(2) = total(2) + tmscor(1,i) +2700 if (.not. eflg) goto 2800 + call oflt (tmscor(2,i), 11) + total(3) = total(3) + tmscor(2,i) +2800 if (.not. rflg) goto 2900 + call oflt (rsr(i), 11) ; total(4) = total(4) + rsr(i) +2900 call crlf +3000 continue + +*.......Print out the total points scored + + if (oflg) 3100, 3200, 3200 +3100 call out (poi03S, 0) ; goto 3300 +3200 call out (poi03L, 0) + if (oflg .eq. long) call tab (26) +3300 if (iflg) call oflt (total(1), 11) + if (fflg) call oflt (total(2), 11) + if (eflg) call oflt (total(3), 11) + if (rflg) call oflt (total(4), 11) + call crlf + +*.......Print out the total number of ships commissioned + + if (.not. (fflg .or. eflg .or. rflg)) goto 4000 + if (oflg) 3400, 3500, 3500 +3400 call out (poi07S, 0) ; goto 3600 +3500 call out (poi07L, 0) + if (oflg .eq. long) call tab (24) +3600 owidth = 13 ; if (oflg .eq. short) owidth = 11 + if (iflg) call spaces (owidth) + if (fflg) call odec (numshp(1), owidth) + if (eflg) call odec (numshp(2), owidth) + if (rflg) call odec (numrom, owidth) + +*.......Print out the total score / number of players + + if (oflg) 3700, 3800, 3800 +3700 call out (poi05S, 0) ; goto 3900 +3800 call out (poi05L, 0) + if (oflg .eq. long) call tab (26) +3900 if (iflg) call spaces (owidth) + if (fflg) call oflt (total(2) / numshp(1), 11) + if (eflg) call oflt (total(3) / numshp(2), 11) + if (rflg) call oflt (total(4) / numrom, 11) + +*.......Print out the total score / number of turns used + +4000 if (oflg) 4100, 4200, 4200 +4100 call out (poi06S, 0) ; goto 4300 +4200 call out (poi06L, 0) + if (oflg .eq. long) call tab (26) +4300 if (iflg) call oflt (total(1) / shpcon(who,KNTURN), 11) + if (fflg) call oflt (total(2) / tmturn(1), 11) + if (eflg) call oflt (total(3) / tmturn(2), 11) + if (rflg) call oflt (total(4) / tmturn(3), 11) + call crlf + return + + end diff --git a/pdp10/compuserve/PRIDIS.FOR b/pdp10/compuserve/PRIDIS.FOR new file mode 100644 index 0000000..31ccf3c --- /dev/null +++ b/pdp10/compuserve/PRIDIS.FOR @@ -0,0 +1,46 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine builds a low segment variable DBITS which +C indicates (using individual bits) the active ships within ILIM +C sectors of the specified location (iV, iH). IFLAG modifies +C this command: 0 = all ships, 1 = only federation ships, and +C 2 = only klingon ships. This routine is used by MAKHIT and +C GETHIT to determine who should receive a particular hit +C message. If ZERO = 0, then DBITS is initially set to 0. + + subroutine PRIDIS (iV, iH, ilim, iflag, zero) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + li = 1 ; lj = KNPLAY + if (iflag .eq. 1) lj = KNPLAY / 2 + if (iflag .eq. 2) li = (KNPLAY / 2) + 1 + if (zero .eq. 0) dbits = 0 + do 100 i = li, lj + if (alive(i) .gt. 0) goto 100 !alive? + if (ldis(iV,iH,shpcon(i,KVPOS),shpcon(i,KHPOS),ilim)) + + dbits = dbits .or. bits(i) !add to DBITS if in range + 100 continue + return + + end diff --git a/pdp10/compuserve/PRLOC.FOR b/pdp10/compuserve/PRLOC.FOR new file mode 100644 index 0000000..32aa479 --- /dev/null +++ b/pdp10/compuserve/PRLOC.FOR @@ -0,0 +1,54 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine prints out a sector location (v,h) in the form +C v-h. A carriage return suffixes this print line if prcflg +C is non-zero. w should be either 2 or 0 (free format). Prlflg +C determines whether to output relative, absolute, or both +C coordinates (usually OCFLG, but sometimes KABS). Proflg +C determines whether to output in the short, medium, or long +C format (usually oflg, but sometimes SHORT). + + subroutine PRLOC (v, h, prcflg, w, prlflg, proflg) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + if (prlflg .eq. KREL) goto 100 + if (proflg .ne. SHORT) call outc('@') + call odec (v,w) + call outc ('-') + call odec (h,w) + + 100 if ((pdist(v, h, shpcon(who,KVPOS), shpcon(who,KHPOS)) .eq. 0) + + .and. (w .eq. 0)) goto 200 + if (prlflg .eq. KBOTH) call space + + if (prlflg .eq. KABS) goto 200 + tw = w ; if (w .ne. 0) tw = w + 1 + call osdec (v-shpcon(who,KVPOS), tw) + call outc (',') + call osdec (h-shpcon(who,KHPOS), tw) + + 200 if (prcflg .ne. 0) call crlf + return + + end diff --git a/pdp10/compuserve/PROMPT.FOR b/pdp10/compuserve/PROMPT.FOR new file mode 100644 index 0000000..f71bd3d --- /dev/null +++ b/pdp10/compuserve/PROMPT.FOR @@ -0,0 +1,52 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine outputs either the 'normal' (Command: ) command +C prompt, or an 'informative' command prompt. The 'informative' +C command prompt consists of a '> ', preceded by any and/or all +C of the following: D : Ship damages > 2000 units, +C E : Ship energy < 1000 units, +C S : Shields down or < 10%, +C nL : Ship life support damaged, reserves +C of n stardates. + + subroutine PROMPT + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + if (prtype) go to 100 !normal or informative prompt? + call out (comlin,0) !normal prompt... + return + +*.......Analyse and output pertinent ship conditions. + + 100 if (shpdam(who,KDLIFE) .ge. KCRIT) + + call odec (shpcon(who,KLFSUP), 0) + if (shpdam(who,KDLIFE) .ge. KCRIT) call outc ('L') + if ((shpcon(who,KSSHPC) .le. 100) .or. (shpcon(who,KSHCON) + + .lt. 0)) call outc ('S') + if (shpcon(who,KSDAM) .ge. 20000) call outc ('D') !ship damages > 2000? + if (shpcon(who,KSNRGY) .le. 10000) call outc ('E') !yellow alert? + call out2c ('> ') !finish prompt... + return + + end diff --git a/pdp10/compuserve/RADIO.FOR b/pdp10/compuserve/RADIO.FOR new file mode 100644 index 0000000..6bfc163 --- /dev/null +++ b/pdp10/compuserve/RADIO.FOR @@ -0,0 +1,87 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine enables the user to stop (or restore) the ability +C to receive messages from other ships using the sub-space radio. +C Messages from individual ships may also be gagged. + + subroutine RADIO + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + +*.......Get commmand (on, off, gag, or ungag) + + call crlf + index = 2 + if (typlst(2) .eq. KALF) goto 200 + 100 index = 1 + call out (radio0, 0) + call gtkn + if (typlst(1) .eq. KEOL) return + call crlf + 200 if (equal (tknlst(index), 'ON')) goto 1000 + if (equal (tknlst(index), 'OFF')) goto 900 + if (.not. (equal(tknlst(index), 'GAG') .or. + + equal(tknlst(index), 'UNGAG'))) goto 100 + gagtyp = 0 + if (equal (tknlst(index), 'UNGAG')) gagtyp = 1 + +*.......Gag and Ungag against messages from individual ships + + 300 if (typlst(index+1) .eq. KALF) goto 400!get desired ship name + call out (radio2,0) + call gtkn + if (typlst(1) .eq. KEOL) return + index = 0 + goto 300 + + 400 do 500 i = 1, KNPLAY !match input with ship names + if (equal (tknlst(index+1), names(i,1))) goto 600 + 500 continue + call out (unkshp,1) !unknown ship name + return + + 600 if (i .eq. who) return !entered own ship name? + if (gagtyp .ne. 0) goto 700 !GAG or UNGAG command? + gagmsg = gagmsg .or. bits(i) !GAG command + call out (radgag, 0) + goto 800 + 700 gagmsg = gagmsg .and. -(bits(i)+1) !UNGAG command + call out (radung, 0) + 800 iteam = 1 ; if (i .gt. KNPLAY/2) iteam = 2 + call odisp ((iteam * 100) + i, 0) + call crlf + return + +*.......Turn off radio + + 900 nomsg = nomsg .or. bits(who) + call out (radoff, 1) + return + +*.......Turn on radio + +1000 nomsg = nomsg .and. -(bits(who)+1) + call out (radon0, 1) + return + + end diff --git a/pdp10/compuserve/REPAIR.FOR b/pdp10/compuserve/REPAIR.FOR new file mode 100644 index 0000000..2e635c3 --- /dev/null +++ b/pdp10/compuserve/REPAIR.FOR @@ -0,0 +1,72 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine repairs damaged ship devices. It is called +C after every time-consuming move to check for and repair any +C such damage. If docked, or if the REPAIR command is used, +C this normal repair process is accelerated. A user may +C specify the exact amount of repairs desired, and the pause +C time will be computed accordingly. Also, the ALL switch will +C determine the repair time needed to fix all the damaged +C devices and will perform those repairs. A call to DAMAGE +C may be appended to such a REPAIR command. + + subroutine REPAIR (il,*) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + v = 0 ; l = il + if (docked(who) .and. (l .ne. 3)) l = 2 + + if (l .eq. 1) repsiz = 500 !DOCKed or REPAIR while underway + if (l .eq. 2) repsiz = 1000 !REPAIR while docked + if (l .eq. 3) repsiz = 300 !normal end-of-turn repair + ntoken = 2 + + if (l .eq. 3) goto 100 + if (typlst(2) .ne. KINT) goto 100 + repsiz = vallst(2) * 10 ; ntoken = 3 + + 100 maxd = 0 + do 200 i = 1, KNDEV + maxd = max0 (maxd, shpdam(who,i)) + 200 continue + if (maxd .eq. 0) goto 600 + repsiz = min0 (repsiz, maxd) + if (.not. (equal (tknlst(2), 'ALL'))) goto 300 + repsiz = maxd ; ntoken = 3 + + 300 if (l .eq. 3) go to 400 + v = etim(tim0) + (repsiz * 8) / l + + 400 do 500 i = 1, KNDEV + shpdam(who,i) = max0((shpdam(who,i) - repsiz), 0) + 500 continue + + 600 if (l .eq. 3) return + if (equal (tknlst(ntoken), 'DAMAGE')) call damage (ntoken+1) !does he want a damage report? + + ptime = v - etim(tim0) + if (ptime .le. 0) return 1 !not a time-consuming repair + return + + end diff --git a/pdp10/compuserve/ROMDRV.FOR b/pdp10/compuserve/ROMDRV.FOR new file mode 100644 index 0000000..26176e4 --- /dev/null +++ b/pdp10/compuserve/ROMDRV.FOR @@ -0,0 +1,235 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine controls the Romulans. If no Romulan presently +C exists, one may be created and randomly placed in the universe. +C If a Romulan already exists, DIST is used to locate the nearest +C attackable object (ship or starbase), the Romulan then moves in +C that direction if he isn't yet at point-blank range, and finally +C if he is in range of his target, he either fires phasers or +C photon torpedos at it. The entry points PHAROM and TOROM are +C used to hit a Romulan with either phasers or torpedos. The +C entry point DEADRO is used to remove a dead romulan from the +C game. + + subroutine ROMDRV (phit, id) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /chkout/ V1, H1, V2, H2, lsym, disV, disH + real disV, disH + +d call timin ('ROMDRV') + romcnt = romcnt + 1 + if (romcnt * 2 .lt. numply) goto 9999 !time to move? + PLAYER = .FALSE. !Romulan moving ... + tmturn(3) = tmturn(3) + 1 + if (ROM) goto 1100 !Romulan already alive? + +*.......Make a Romulan miraculously appear... + + if ((romcnt .lt. numply * 3) .or. (iran(5) .eq. 5)) goto 9999 + romcnt = 0 + call place (DXROM * 100 + 1, 1, locr(KVPOS), locr(KHPOS)) + ROM = .TRUE. + erom = iran(200) + 200 + numrom = numrom + 1 + +*.......Inform nearby players of Romulan's appearance + + iwhat = 11 ; dispfr = DXROM * 100 + Vfrom = locr(KVPOS) ; Hfrom = locr(KHPOS) + call pridis (locr(KVPOS), locr(KHPOS), KRANGE, 0, 0) + if (PASFLG) dbits = dbits .or. bits(who) + call makhit + +151 if (iran (10) .eq. 1) call tell ! let the Romulan speak! + +*.......Romulan searches for a target in range + + 100 call dist (iplace, nplc, numsec) + if (numsec .gt. KRANGE) goto 9999 !in range? + +*.......Romulan attacks something + + 200 goto (400,400,300,300) nplc + 300 i = base(iplace,KVPOS,nplc-2) + j = base(iplace,KHPOS,nplc-2) + goto 500 + 400 i = shpcon(iplace,KVPOS) + j = shpcon(iplace,KHPOS) + 500 ctime = etim (tim0) !Romulan weapon pauses + if (min0 (rtpaus, rppaus) .gt. ctime) goto 9999 + romcnt = 0 + if (max0 (rtpaus, rppaus) .lt. ctime) goto (600, 700) iran(2) + if (rppaus .lt. ctime) goto 700 + +*.......Romulan uses photon torpedos + + 600 call romstr (i, j) !star adjacent to target? + V1 = i - locr(KVPOS) + H1 = j - locr(KHPOS) + call romtor (V1, H1) !fire torps!! + goto 1000 + +*.......Romulan uses phasers + + 700 if (nplc .lt. DXFBAS) goto 800 !base calls for help? + if (base(iplace,3,nplc-2) .ne. 1000) goto 800 + Vto = i ; Hto = j ; iwhat = 9 ; dispto = disp(i,j) + dispfr = DXROM * 100 + call pridis (30, 30, 100, nplc-2, 0) + dbits = dbits .and. .not. nomsg + call makhit + +800 Vfrom = locr(KVPOS) ; Hfrom = locr(KHPOS) + Vto = i ; Hto = j ; shjump = 0 + shstfr = erom ; shcnfr = 1 + id = pdist (Vfrom, Hfrom, Vto, Hto) + call phadam (nplc, iplace, id, 200, .TRUE.) + iwhat = 1 + call pridis (i, j, KRANGE, 0, 0) + dispfr = DXROM * 100 ; dispto = (nplc * 100) + iplace + call makhit !send hit message + rppaus = etim (tim0) + (slwest + 1) * 750 !update phaser bank condition + + if ((nplc .lt. DXFBAS) .or. (disp(i,j) .ne. 0)) goto 1000 !base destroyed? + iwhat = 10 ; dispto = (nplc * 100) + iplace + Vto = i ; Hto = j + call pridis (30, 30, 100, nplc-2, 0) + dbits = dbits .and. .not. nomsg + call makhit + +*.......Activate bases and planets, rebuild bases a little + +1000 if (iran (50) .le. 1) call tell ! let the Romulan speak! +d call timout ('ROMDRV') +d call timin ('BASPHA') + call baspha +d call timout ('BASPHA') +d call timin ('PLNATK') + call plnatk +d call timout ('PLNATK') +d call timin ('BASBLD') + call basbld +d call timout ('BASBLD') + return + +9999 continue +d call timout ('ROMDRV') + return + +*.......Move Romulan a maximum of 4 sectors toward the +*.......nearest attackable object. + +1100 call dist (iplace, nplc, numsec) !find object + if (numsec .le. 1) goto 200 !already point-blank range? + goto (1300, 1300, 1200, 1200) nplc +1200 i = base(iplace,KVPOS,nplc-2) ; j = base(iplace,KHPOS,nplc-2) + goto 1400 +1300 i = shpcon(iplace,KVPOS) ; j = shpcon(iplace,KHPOS) + +* Compute desired new location + +1400 if ((i-locr(KVPOS)) .lt. 0) i = locr(KVPOS) - + + (iabs(i - locr(KVPOS)) - 1) + if ((i-locr(KVPOS)) .gt. 0) i = locr(KVPOS) + + + (iabs(i - locr(KVPOS)) - 1) + if ((i-locr(KVPOS)) .eq. 0) i = locr(KVPOS) + if ((j-locr(KHPOS)) .lt. 0) j = locr(KHPOS) - + + (iabs(j - locr(KHPOS)) - 1) + if ((j-locr(KHPOS)) .gt. 0) j = locr(KHPOS) + + + (iabs(j - locr(KHPOS)) - 1) + if ((j-locr(KHPOS)) .eq. 0) j = locr(KHPOS) + l = 4 !Maximum speed warp 4 + if (numsec .lt. 4) l = numsec + +* Express desired location in relative coordinates + + Vt = i - locr(KVPOS) + Ht = j - locr(KHPOS) + call check (locr(KVPOS), locr(KHPOS), Vt, Ht, l, 0.0) + i = V1 + j = H1 + if (lsym .ne. 0) goto 1500 !ran into something? + call setdsp (locr(KVPOS), locr(KHPOS), 0) + call setdsp (i, j, DXROM*100) + locr(KVPOS) = i + locr(KHPOS) = j + goto 1800 + +* If object in way of move, displace final resting place to +* facilitate getting around it next move. + +1500 do 1700 i1 = 1, l + if (.not. ingal(i-i1,5)) goto 1600 + if (disp(i-i1,j) .gt. 0) goto 1600 + call setdsp (locr(KVPOS), locr(KHPOS), 0) + call setdsp (i-i1, j, DXROM*100) + locr(KVPOS) = i - i1 + locr(KHPOS) = j + goto 1800 +1600 if (.not. ingal(5,j-i1)) goto 1700 + if (disp(i,j-i1) .gt. 0) goto 1700 + call setdsp (locr(KVPOS), locr(KHPOS), 0) + call setdsp (i, j-i1, DXROM*100) + locr(KVPOS) = i + locr(KHPOS) = j - i1 + goto 1800 +1700 continue + +* Check target's relative location after move + +1800 call dist (iplace, nplc, numsec) + if (.not. PASFLG) goto 1900 !inform system player of new location + call odisp (DXROM*100, 1) + call out (romadv,0) + call prloc (locr(KVPOS), locr(KHPOS), 1, 0, ocflg, SHORT) +1900 if (numsec .le. KRANGE) goto 200 !if in range, attack! + romcnt = 0 + goto 9999 + +*.......Romulan gets phasered + + entry PHAROM (phit, id) + + iwhat = 1 ; ihita = ((100 + iran(100)) * phit) / (10 * id) + erom = erom - (ihita / 10) + if (erom .gt. 0) return + +*.......Requiem for a dead romulan (sigh!) + + entry DEADRO (phit, id) + +2000 klflg = 2 + ROM = .FALSE. ; call setdsp (locr(KVPOS), locr(KHPOS), 0) + return + +*.......Romulan gets hit by a torpedo + + entry TOROM (phit, id) + + iwhat = 2 ; ihita = min0 (iran(4000), 2000) + erom = erom - (ihita / 10) + if (erom .le. 0) goto 2000 + return + + end diff --git a/pdp10/compuserve/ROMSTR.FOR b/pdp10/compuserve/ROMSTR.FOR new file mode 100644 index 0000000..a93948f --- /dev/null +++ b/pdp10/compuserve/ROMSTR.FOR @@ -0,0 +1,39 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine is used by the Romulan to see if there is a star +C adjacent to his target. If so, the star becomes the new target. + + subroutine ROMSTR (iV, iH) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + iVf = max0(iV - 1, 1) ; iVl = min0(iV + 1, KGALV) + iHf = max0(iH - 1, 1) ; iHl = min0(iH + 1, KGALH) + do 100 i = iVf, iVl + do 100 j = iHf, iHl + if (dispc (i,j) .ne. DXSTAR) goto 100 !star? + iV = i ; iH = j ; return !Yes! retarget, return + 100 continue + return + + end diff --git a/pdp10/compuserve/ROMTOR.FOR b/pdp10/compuserve/ROMTOR.FOR new file mode 100644 index 0000000..be4c25a --- /dev/null +++ b/pdp10/compuserve/ROMTOR.FOR @@ -0,0 +1,139 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine controls the Romulan's torpedo firing procedure. +C The initial target is fired upon, and later torpedos are +C retargeted as the situation requires. + + subroutine ROMTOR (iV1, iH1) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /chkout/ V1, H1, iVc, iHc, l, disV, disH + real d, disV, disH + + misfir = 0 ; tpaus = 0 + do 800 id = 1, 3 !start torp firing loop + d = (ran(0) - 0.5) / 2.5 !set torp deflection + if (misfir .lt. 0) goto 900 !an earlier misfire? + if (iran(100) .gt. 96) misfir = -1 !he suffers a misfire? + if (misfir .lt. 0) d = d + (ran(0) - 0.5) / 5.0 !increase torp deflection if misfire + +*.........See if anything hit + + idis = KRANGE - 2 + int((ran(0) - 0.5) * 4.0 + 0.5) + tpaus = tpaus + (slwest + 1) * 1000 + call check (locr(KVPOS), locr(KHPOS), iV1, iH1, idis, d) + if (l .eq. 0) goto 800 + aran = iran (100) + +*.........If star affected, check vicinity for target to damage + + if (l .ne. DXSTAR*100) goto 100 + if (aran .gt. 80) goto 300 + iwhat = 7 ; dispfr = DXSTAR * 100 + Vfrom = iVc ; Hfrom = iHc + call pridis (iVc, iHc, KRANGE, 0, 0) + call makhit + rsr(KNSDES) = rsr(KNSDES) - 500 + call snova + if (.not. ROM) return !romulan blew himself up? + goto 300 + +*.........If target hit by torpedo, damage it + +100 nplc = l / 100 ; j = mod (l, 100) + if ((nplc .ge. DXNPLN) .and. (nplc .le. DXEPLN)) goto 600 !planet? + if (nplc .eq. DXBHOL) goto 300 !black hole? + if (nplc .lt. DXFBAS) goto 200 !ship? + +* Base calls for help + + if (base(j,3,nplc-2) .ne. 1000) goto 200 + iwhat = 9 ; dispto = l + Vto = base(j,KVPOS,nplc-2) ; Hto = base(j,KHPOS,nplc-2) + call pridis (30, 30, 100, nplc-2, 0) + dbits = dbits .and. .not. nomsg + call makhit + +* Hit ship or base + + 200 Vto = iVc ; Hto = iHc + call tordam (nplc, j, idum, idum, .TRUE.) + Vfrom = locr(KVPOS) ; Hfrom = locr(KHPOS) + shstfr = erom ; shcnfr = 1 + dispto = l ; dispfr = DXROM * 100 ; iwhat = 2 + call pridis (iVc, iHc, KRANGE, 0, 0) + call makhit !send hit message + if ((nplc .lt. DXFBAS) .and. (trstat(j) .ne. 0)) + + call trcoff (j) !break tractor beam? + +* Base destroyed? + + if ((nplc .lt. DXFBAS) .or. (disp(iVc,iHc) .ne. 0)) goto 300 + dispto = l ; iwhat = 10 + call pridis (30, 30, 100, nplc-2, 0) + dbits = dbits .and. .not. nomsg + Vto = iVc ; Hto = iHc + call makhit + +*.........Retarget for next torpedo + + 300 call dist (iob, nplc, num99) + if (num99 .gt. KRANGE) goto 900 !in range? + if (nplc .lt. DXFBAS) goto 400 + iV2 = base(iob,KVPOS,nplc-2) + iH2 = base(iob,KHPOS,nplc-2) + goto 500 + 400 iV2 = shpcon(iob,KVPOS) + iH2 = shpcon(iob,KHPOS) + 500 call romstr (iV2, iH2) + iV1 = iV2 - locr(KVPOS) + iH1 = iH2 - locr(KHPOS) + goto 800 + +*.........Planet attacked by accident + +600 dispto = l ; iwhat = 2 ; dispfr = DXROM * 100 + Vfrom = locr(KVPOS) ; Hfrom = locr(KHPOS) + Vto = iVc ; Hto = iHc ; shjump = 0 + shstfr = erom ; shcnfr = 1 + call lock (plnlok, 'ROMTOR') !lock LOCPLN array + if (lkfail) goto 800 + i = mod (l, 100) + if (aran .ge. 75) locpln(i,3) = locpln(i,3) - 1 + shstto = max0 (locpln(i,3), 0) + if (locpln(i,3) .lt. 0) klflg = 2 !planet destroyed? + if (klflg .eq. 0) goto 700 + pteam = l/100 - DXNPLN + call setdsp (iVc, iHc, 0) + rsr(KNPDES) = rsr(KNPDES) - 1000 + call plnrmv (i,pteam) + 700 call unlock (plnlok) !unlock LOCPLN array + call pridis (iVc, iHc, KRANGE, 0, 0) + call makhit !send hit message + goto 300 + + 800 continue + 900 rtpaus = etim (tim0) + tpaus + return + + end diff --git a/pdp10/compuserve/SCAN.FOR b/pdp10/compuserve/SCAN.FOR new file mode 100644 index 0000000..9dad2d8 --- /dev/null +++ b/pdp10/compuserve/SCAN.FOR @@ -0,0 +1,155 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C SCAN/SRCAN -- Display the contents of nearby space. +C SCAN range defaults to 10 sectors in each direction. +C SRSCAN range defaults to 7 sectors in each direction. +C The format is: +C SCAN square scan, default distance in each direction +C SCAN d square scan, d sectors each direction +C SCAN dV dH rectangular scan, dV up/down, dH right/left +C SCAN UP scan up/right/left default distance +C SCAN UP d scan up/right/left d sectors +C SCAN UP dV dH scan up dV sectors, right/left dH sectors +C SCAN DOWN/RIGHT/LEFT same format as SCAN UP +C SCAN CORNER dV dH + + subroutine SCAN + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /local/ screen(200) + dimension dist(4) !distance to scan in each direction + !(up, down, right, left) + +*.......SCAN entry point -- default to maximum scanning distance + + dist(1) = krange ; dist(2) = krange + dist(3) = krange ; dist(4) = krange + goto 100 + +*.......SRSCAN entry point -- use a smaller default scanning distance + + entry SRSCAN + dist(1) = 7 ; dist(2) = 7 + dist(3) = 7 ; dist(4) = 7 + +*.......Check for warning switch + + 100 warn = .FALSE. + k = (terwid - 9)/4 ! calc. max width for user + if (dist(1) .le. k) goto 101 + dist(1) = k; dist(2) = k; dist(3) = k; dist(4) = k +101 if (ntok .eq. 1) goto 500 + if (.not. equal (tknlst(ntok), 'WARNING')) goto 200 + warn = .TRUE. + typlst(ntok) = KEOL ; ntok = ntok - 1 + +*.......Check for direction modifier + + 200 mod = 0 ; n = 0 ; p = 2 + if (equal (tknlst(2), 'UP')) mod = 2 + if (equal (tknlst(2), 'DOWN')) mod = 1 + if (equal (tknlst(2), 'RIGHT')) mod = 4 + if (equal (tknlst(2), 'LEFT')) mod = 3 + if (equal (tknlst(2), 'CORNER')) mod = 5 + if (mod .ne. 0) p = 3 + if (typlst(p) .eq. KEOL) goto 300 !no range given; use default + if (typlst(p) .ne. KINT) goto 1000 !expecting range; syntax error + +*.......Get first number + + d = vallst(p) ; n = n + 1 ; p = p + 1 + dist(1) = d ; dist(2) = d + dist(3) = d ; dist(4) = d + + if (typlst(p) .eq. KEOL) goto 300 !no second #; give square scan + if (typlst(p) .ne. KINT) goto 1000 !wasn't number; syntax error + +*.......Get second number + + d = vallst(p) ; n = n + 1 ; p = p + 1 + dist(3) = d ; dist(4) = d + + if (typlst(p) .ne. KEOL) goto 1000 !not last item; error + +*.......Trim scan direction for up/down/right/left + + 300 if (mod .eq. 5) goto 400 !corner + if (mod .ne. 0) dist(mod) = 0 !up, down, right, or left + goto 500 + +*.......Trim scan direction for corner scan + + 400 if (n .ne. 2) goto 1000 !2 #s not given; error + if (dist(1) .gt. 0) dist(2) = 0 + if (dist(1) .lt. 0) dist(2) = -dist(1) + if (dist(3) .gt. 0) dist(4) = 0 + if (dist(3) .lt. 0) dist(4) = -dist(3) + +*.......Compute scan bounds + + 500 do 600 i = 1, 4 + if (dist(i) .lt. 0) dist(i) = 0 + if (dist(i) .gt. KRANGE) dist(i) = KRANGE + 600 continue + Hpos = shpcon(who,KHPOS) + Vpos = shpcon(who,KVPOS) + Vmax = min0 (Vpos+dist(1), KGALV) + Vmin = max0 (Vpos-dist(2), 1) + Hmax = min0 (Hpos+dist(3), KGALH) + Hmin = max0 (Hpos-dist(4), 1) + + call setscn (Hmin, Hmax, Vmin, Vmax) !set up initial scan display + enemy = 3 - team + +*.......Look for planets in scan range + + if (nplnet .le. 0) goto 800 !no planets + do 700 i = 1, nplnet + if (.not. ldis (locpln(i,KVPOS), locpln(i,KHPOS), Vpos, Hpos, + + KRANGE)) goto 700 + locpln(i,4) = locpln(i,4) .or. team !our side has seen this planet + if (dispc(locpln(i,KVPOS),locpln(i,KHPOS))-DXNPLN .ne. enemy) + + goto 700 !not an enemy planet + if (warn) call mark (locpln(i,KVPOS), locpln(i,KHPOS), 2) + 700 continue + +*.......Look for enemy bases in scan range + + 800 do 900 i = 1, KNBASE + if (base(i,3,enemy) .le. 0) goto 900 !not a live base + if (.not. ldis (base(i,KVPOS,enemy), base(i,KHPOS,enemy), + + Vpos, Hpos, KRANGE)) + + goto 900 + base(i,4,enemy) = base(i,4,enemy) .or. team + if (warn) call mark (base(i,KVPOS,enemy),base(i,KHPOS,enemy),4) + 900 continue + +*.......Finally output the scan + + call shwscn !display scan + return + +1000 call out (syntax,1) + return + + end diff --git a/pdp10/compuserve/SET.FOR b/pdp10/compuserve/SET.FOR new file mode 100644 index 0000000..c4f8a3a --- /dev/null +++ b/pdp10/compuserve/SET.FOR @@ -0,0 +1,159 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine permits players to set/reset their NAME, OUTPUT +C message length, TTYTYPE, command PROMPT type, SCAN lengths, +C and default input and output location flags (ICDEF, OCDEF). +C System players are also able to end the current game, turn +C on the Romulan, and remove black holes from the board. + + subroutine SET + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + p = 2 + 100 if (typlst(p) .ne. KALF) goto 200 !no switch yet given? + if (equal (tknlst(p), 'NAME')) goto 300 + if (equal (tknlst(p), 'OUTPUT')) goto 500 + if (equal (tknlst(p), 'TTYTYPE')) goto 700 + if (equal (tknlst(p), 'PROMPT')) goto 1200 + if (equal (tknlst(p), 'SCANS')) goto 1400 + if (equal (tknlst(p), 'ICDEF')) goto 1600 + if (equal (tknlst(p), 'OCDEF')) goto 1800 + if (.not. PASFLG) goto 200 + if (equal (tknlst(p), 'ROMOPT')) goto 1900 + if (equal (tknlst(p), 'ENDFLG')) goto 2000 + if (equal (tknlst(p), 'BHREMV')) goto 2100 + + 200 call out (set001, 0) !get the switch + call gtkn + if (typlst(1) .eq. KEOL) return + p = 1 ; goto 100 + +*.......SET NAME switch + + 300 if (usrnam(p)) return + call out (set002,0) + call gtkn + call usrnam (0) + return + +*.......SET OUTPUT switch + + 400 call out (set003, 0) + call gtkn + if (typlst(1) .eq. KEOL) return + p = 0 + 500 if (typlst(p+1) .ne. KALF) goto 400 + if (equal (tknlst(p+1), shtfrm)) oflg = short + if (equal (tknlst(p+1), medfrm)) oflg = medium + if (equal (tknlst(p+1), lngfrm)) oflg = long + return + +*.......SET TTYTYPE switch + + 600 call crlf + call out (set008,0) + call gtkn + if (typlst(1) .eq. KEOL) return + p = 0 + 700 if (typlst(p+1) .ne. KALF) goto 600 + ttytyp = 0 + do 800 i = 1, KNTTY + if (.not. (equal(tknlst(p+1), ttydat(1,i)))) goto 800 + if (ttytyp .ne. 0) goto 900 + ttytyp = i + 800 continue + if (ttytyp .ne. 0) return + call crlf + goto 1000 + + 900 call out (set009,0) +1000 call out (set010,2) + call out (ttys00,1) + goto 600 + +*.......SET PROMPT switch + +1100 call out (set004, 0) + call gtkn + if (typlst(1) .eq. KEOL) return + p = 0 +1200 if (typlst(p+1) .ne. KALF) goto 1100 + if (equal (tknlst(p+1), normal)) prtype = 0 + if (equal (tknlst(p+1), inform)) prtype = -1 + return + +*.......SET SCAN switch + +1300 call out (set005,0) + call gtkn + if (typlst(1) .eq. KEOL) return + p = 0 +1400 if (typlst(p+1) .ne. KALF) goto 1300 + if (equal (tknlst(p+1), shtfrm)) SCNFLG = SHORT + if (equal (tknlst(p+1), lngfrm)) SCNFLG = LONG + return + +*.......SET ICDEF switch + +1500 call out (set006,0) + call gtkn + if (typlst(1) .eq. KEOL) return + p = 0 +1600 if (typlst(p+1) .ne. KALF) goto 1500 + if (equal (tknlst(p+1), absfrm)) icflg = KABS + if (equal (tknlst(p+1), relfrm)) icflg = KREL + return + +*.......SET OCDEF switch + +1700 call out (set007,0) + call gtkn + if (typlst(1) .eq. KEOL) return + p = 0 +1800 if (typlst(p+1) .ne. KALF) goto 1700 + if (equal (tknlst(p+1), absfrm)) ocflg = KABS + if (equal (tknlst(p+1), relfrm)) ocflg = KREL + if (equal (tknlst(p+1), bthfrm)) ocflg = KBOTH + return + +*.......Set ROMOPT flag to true + +1900 ROMOPT = .TRUE. + return + +*.......Remove HIGH segment flag + +2000 ENDFLG = .TRUE. + call endgam + return + +*.......Remove Black Holes from board. + +2100 do 2200 i = 1, KGALV + do 2200 j = 1, KGALH + if (dispc (i,j) .eq. DXBHOL) call setdsp (i, j, 0) +2200 continue + return + + end diff --git a/pdp10/compuserve/SHIELD.FOR b/pdp10/compuserve/SHIELD.FOR new file mode 100644 index 0000000..4d9e5dc --- /dev/null +++ b/pdp10/compuserve/SHIELD.FOR @@ -0,0 +1,104 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine is used to raise or lower a ship's deflector +C shields, as well as transfer energy between the ship and shield +C energy reserves. The switches recognized are: UP, DOWN, and +C TRANSFER. + + subroutine SHIELD + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + call crlf + if (typlst(2) .ne. KALF) goto 100 !no switch yet given? + if (equal (tknlst(2), 'TRANSFER')) goto 500 + if (equal (tknlst(2), 'UP')) goto 800 + if (equal (tknlst(2), 'DOWN')) goto 1000 + + 100 call out (shld01,0) !get the switch + call gtkn + if (typlst(1) .eq. KEOL) return + if (equal (tknlst(1), 'UP')) goto 800 + if (equal (tknlst(1), 'DOWN')) goto 1000 + if (equal (tknlst(1), 'TRANSFER')) goto 200 + goto 100 + +*.......Transfer energy between shields and ship (engines) + + 200 if (typlst(2) .eq. KINT) goto 400 !amount of energy to transfer already given? + 300 call out (shld02,0) + call gtkn + if (typlst(1) .ne. KINT) return + senrgy = vallst(1) * 10 + goto 600 + 400 senrgy = vallst(2) * 10 + goto 600 + 500 if (typlst(3) .ne. KINT) goto 300 + senrgy = vallst(3) * 10 + +* Is the specified energy transfer reasonable? + + 600 senrgy = min0 (senrgy, (1000 - shpcon(who,KSSHPC)) * 25) + if (senrgy .lt. shpcon(who,KSNRGY)) goto 700 + call out (shld03,0) + call gtkn + if (equal (tknlst(1), 'YES')) goto 700 + call out (shld04,1) + return + +* Make energy transfer + + 700 if ((-1 * senrgy) .gt. (shpcon(who,KSSHPC) * 25)) + + senrgy = -25 * shpcon(who,KSSHPC) + if ((shpcon(who,KSNRGY) - senrgy) .gt. 50000) + + senrgy = -(50000-shpcon(who,KSNRGY)) + shpcon(who,KSSHPC) = shpcon(who,KSSHPC) + (senrgy / 25) + shpcon(who,KSNRGY) = shpcon(who,KSNRGY) - senrgy + call out (shld05,1) + if (shpcon(who,KSSHPC) .le. 0) shpcon(who,KSHCON) = -1 + if (shpcon(who,KSNRGY) .lt. 10000) shpcon(who,KSPCON) = YELLOW + if (shpcon(who,KSNRGY) .ge. 10000) shpcon(who,KSPCON) = GREEN + return + +*.......Raise deflector shields if not critically damaged +*.......(Costs 100 units of ship energy) + + 800 if (shpdam(who,KDSHLD) .gt. KCRIT) goto 1100 + shpcon(who,KSHCON) = 1 + shpcon(who,KSNRGY) = max0 (shpcon(who,KSNRGY) - 1000 , 0 ) + call out (shld06,1) + if (trstat(who) .ne. 0) call trcoff (who) !cut tractor beam? + if (shpcon(who,KSNRGY) .gt. 0) goto 900 + call out (shld07,1) + 900 return + +*.......Lower deflector shields + +1000 shpcon(who,KSHCON) = -1 + call out (shld08,1) + return + +1100 call out (shld09,1) + return + + end diff --git a/pdp10/compuserve/SNOVA.FOR b/pdp10/compuserve/SNOVA.FOR new file mode 100644 index 0000000..18ed3e5 --- /dev/null +++ b/pdp10/compuserve/SNOVA.FOR @@ -0,0 +1,75 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C SNOVA -- This routine is called whenever a star is destroyed by +C a torp. It checks all objects around the destroyed star, and maims +C and destroys as necessary. + + subroutine SNOVA + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /chkout/ V1, H1, iVc, iHc, dcode, idisV, idisH + common /snlocl/ objstk(8,4), strstk(80,2) + real idisV, idisH + + call setdsp (iVc, iHc, 0) !get rid of star + objptr = 0 ; strptr = 0 !initialize stack pointers + + 100 do 400 V = max0 (1,iVc-1), min0(KGALV,iVc+1) + do 300 H = max0 (1,iHc-1), min0(KGALH,iHc+1) + object = dispc (V,H) + if ((object .lt. 1) .or. (object .gt. DXEPLN)) goto 200 + objptr = objptr + 1 + objstk(objptr,1) = V ; objstk(objptr,2) = H + objstk(objptr,3) = V - iVc ; objstk(objptr,4) = H - iHc + goto 300 + 200 if ((object .ne. DXSTAR) .or. (iran(5) .eq. 5)) goto 300 + if (strptr .eq. 29) goto 300 !no more room, so don't blow up star + strptr = strptr + 1 + strstk(strptr,1) = V ; strstk(strptr,2) = H + call setdsp (V, H, 0) + 300 continue + 400 continue + + 500 if (objptr .eq. 0) goto 600 !awwww! no more victims! + V1 = objstk(objptr,1) ; H1 = objstk(objptr,2) + idisV = objstk(objptr,3) ; idisH = objstk(objptr,4) + objptr = objptr - 1 + thing = disp (V1, H1) + if ((thing .le. 0) .or. (thing .ge. 100*DXSTAR)) goto 500 + call nova (thing/100, mod(thing,100)) !damage object + goto 500 + + 600 if (strptr .eq. 0) goto 700 !no stars to destroy + iVc = strstk(strptr,1) ; iHc = strstk(strptr,2) + strptr = strptr - 1 + dispfr = DXSTAR * 100 ; iwhat = 7 + Vfrom = iVc ; Hfrom = iHc + call pridis (Vfrom, Hfrom, KRANGE, 0, 0) + call makhit + if (PLAYER) tpoint(KNSDES) = tpoint(KNSDES) - 500 + if (.not. PLAYER) rsr(KNSDES) = rsr(KNSDES) - 500 + goto 100 + + 700 return + + end diff --git a/pdp10/compuserve/STATUS.FOR b/pdp10/compuserve/STATUS.FOR new file mode 100644 index 0000000..75bb31a --- /dev/null +++ b/pdp10/compuserve/STATUS.FOR @@ -0,0 +1,164 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine prints out useful information on the status of an +C individual ship. It may be used to print out all the information +C available, or just particular items. It can also be called using +C a switch on the DOCK command. STOKEN = 2 if this routine is +C called by a STATUS command, STOKEN = 3 if this routine is +C called from a STATUS string appended to DOCK. + + subroutine STATUS (stoken) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + call crlf + obit = 4 ; if (oflg .eq. short) obit = 0 + if (typlst(stoken) .ne. KEOL) goto 900 !specific information requested? + if (oflg) 100, 200, 300 + 100 call out2c ('SD') ; goto 400 + 200 call out (stat2M,0) ; goto 400 + 300 call out (stat2L,0) + 400 call odec (shpcon(who,KNTURN),obit) + if (oflg) 500, 600, 600 + 500 call space ; goto 700 + 600 call crlf + +*.......Set up dummy TYPLST and TKNLST strings for printing full report + + 700 typlst(stoken+7) = KEOL + tknlst(stoken) = 1hC + tknlst(stoken+1) = 1hL + tknlst(stoken+2) = 1hT + tknlst(stoken+3) = 1hE + tknlst(stoken+4) = 1hD + tknlst(stoken+5) = 1hS + tknlst(stoken+6) = 1hR + do 800 i = stoken, stoken + 6 + typlst(i) = KALF + 800 continue + +*.......Identify and report on specified items + + 900 do 5700 i = stoken, KMAXTK + if ((typlst(i) .ne. KALF) .and. (oflg .eq. short)) + + call crlf + if (typlst(i) .ne. KALF) return + if (equal (tknlst(i), 'SHIELDS')) goto 1000 + if (equal (tknlst(i), 'LOCATION')) goto 1500 + if (equal (tknlst(i), 'CONDITION')) goto 2100 + if (equal (tknlst(i), 'TORPEDO')) goto 2700 + if (equal (tknlst(i), 'ENERGY')) goto 3400 + if (equal (tknlst(i), 'DAMAGE')) goto 4100 + if (equal (tknlst(i), RADIO3)) goto 4800 + call out (syntax, 1) !unknown switch + goto 5700 + +* Shield up/down, energy, and percentage of maximum possible + +1000 if (oflg) 1100, 1200, 1300 +1100 call out2c ('SH') ; goto 1400 +1200 call out (stat3M, 0) ; goto 1400 +1300 call out (stat3L, 0) +1400 call osflt (shpcon(who,KSHCON)*shpcon(who,KSSHPC), obit) + if (oflg .ne. short) call outc ('%') + call space + if (oflg .eq. short) goto 5700 + call oflt (shpcon(who,KSSHPC) * 25, obit) + call out (stat05,0) + if (oflg .ne. short) call crlf + goto 5700 + +* Present ship location + +1500 if (oflg) 1800, 1600, 1700 +1600 call out (stat6M, 0) ; goto 1800 +1700 call out (stat6L, 0) +1800 call prloc(shpcon(who,KVPOS), shpcon(who,KHPOS), 0, 0, + + KABS, SHORT) + if (oflg) 1900, 2000, 2000 +1900 call space ; goto 5700 +2000 call crlf ; goto 5700 + +* Present ship condition (green, yellow or red + docked) + +2100 if (oflg) 2400, 2200, 2300 +2200 call out (stat7M, 0) ; goto 2400 +2300 call out (stat7L, 0) +2400 call ocond (shpcon(who,KSPCON)) + if (oflg) 2500, 2600, 2600 +2500 call space ; goto 5700 +2600 call crlf ; goto 5700 + +* Number of photon torpedos left + +2700 if (oflg) 2800, 2900, 3000 +2800 call outc ('T') ; goto 3100 +2900 call out (stat8M, 0) ; goto 3100 +3000 call out (stat8L, 0) +3100 call odec (shpcon(who,KNTORP), obit) + if (oflg) 3200, 3300, 3300 +3200 call space ; goto 5700 +3300 call crlf ; goto 5700 + +* Ship energy remaining + +3400 if (oflg) 3500, 3600, 3700 +3500 call outc ('E') ; goto 3800 +3600 call out (stat9M, 0) ; goto 3800 +3700 call out (stat9L, 0) +3800 call oflt (shpcon(who,KSNRGY), obit) + if (oflg) 3900, 4000, 4000 +3900 call space ; goto 5700 +4000 call crlf ; goto 5700 + +* Present ship damage + +4100 if (oflg) 4200, 4300, 4400 +4200 call outc ('D') ; goto 4500 +4300 call out (sta10M, 0) ; goto 4500 +4400 call out (sta10L, 0) +4500 call oflt (shpcon(who,KSDAM), obit) + if (oflg) 4600, 4700, 4700 +4600 call space ; goto 5700 +4700 call crlf ; goto 5700 + +* Present Sub-Space Radio status + +4800 if (oflg) 4900, 5000, 5100 +4900 call outc ('R') ; goto 5200 +5000 call out (radio3, 0) ; goto 5200 +5100 call out (radio1, 0) +5200 if (shpdam(who,KDRAD) .lt. KCRIT) goto 5300 + call out (stat11, 0) ; goto 5400 + +5300 if ((bits(who) .and. nomsg) .ne. 0) call out2c ('Of') + if ((bits(who) .and. nomsg) .ne. 0) call outc ('f') + if ((bits(who) .and. nomsg) .eq. 0) call out2c ('On') +5400 if (oflg) 5500, 5600, 5600 +5500 call space ; goto 5700 +5600 call crlf + +5700 continue + return + + end diff --git a/pdp10/compuserve/TELL.FOR b/pdp10/compuserve/TELL.FOR new file mode 100644 index 0000000..0b99714 --- /dev/null +++ b/pdp10/compuserve/TELL.FOR @@ -0,0 +1,165 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine is used to send messages between ships using the + +C sub-space radio. + + subroutine TELL + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + dimension local (17) + + sntrom = .false. ! .true. if "tel rom; xxx" + if (.not. player) goto 1150 ! is the Romulan speaking? + rmspk = .false. ! no. + +*.......Radio operational? + + if (shpdam(who,KDRAD) .lt. KCRIT) goto 200 + call out (tell01,1) + return + +*.......Destination ship or group already specified? + + 200 nomsg = nomsg .and. (.not. bits(who)) !turn radio on + p = 2 + if (ntok .gt. 1) goto 300 + +*.......Get destination ship or group name + + call out (tell02,0) + call gtkn + p = 1 + if (typlst(1) .eq. KEOL) return + +*.......Analyze input string + + 300 dbits = 0 + do 1100 i = p, ntok + if (equal (tknlst (i), 'ROMULAN')) goto 950 +*.......Trying to send junk messages using ALTMODE? + + if (.not. RPTFLG) goto 100 + call out (tell09,1) + return + +100 do 400 j = 1, KNPLAY !valid ship name? + if (equal (tknlst(i), names(j,1))) goto 1000 + 400 continue + gm = .false. + do 500 j = 1, KNGRP !valid group name? + if (group(j,1) .eq. 0) goto 500 + if (.not. equal(tknlst(i), group(j,1))) goto 500 + if (gm) goto 800 + gm = .true. ; gbits = group(j,2) + 500 continue + + if (.not. gm) goto 700 !unrecognized ship or group name? + do 600 j = 1, KNPLAY !player in game? + if (.not. alive(j)) gbits = gbits .and. -(bits(j) + 1) + 600 continue + dbits = dbits .or. gbits !save valid ships + goto 1100 + 700 call out (tell03,0) !unrecognized player or name + goto 900 + 800 call out (tell04,0) !ambiguous group name + 900 call outw (tknlst(i)) ; call crlf + goto 1100 + +950 if (.not. rom) goto 955 ! is the Romulan dead? + svdb = dbits ! preserve destination bits + call romspk (local) ! speak to the player + call makmsg (local) + sntrom = .true. + dbits = svdb + if (iran (4) .gt. 1) goto 1100 ! 25% chance Romulan comes to him + ph = shpcon (who, khpos) ! find vacant spot neareby + pv = shpcon (who, kvpos) + ix = iran(10) - 5 + do 951 ir = ix, 10 + do 951 jr = ix, 10 + if (.not. ingal (pv+jr, ph+ir)) goto 951 + if (disp (pv+jr, ph+ir) .ne. 0) goto 951 + call setdsp (locr(kvpos), locr(khpos), 0) + locr(khpos) = ph+ir + locr(kvpos) = pv+jr + call setdsp (locr(kvpos), locr(khpos), dxrom*100) + goto 1100 +951 continue + goto 1100 ! no empty space???? + +955 call out (tell07, 0) ! "can't raise the " + call out ('Romulan', 1) + goto 1100 + + +1000 dbits = dbits .or. bits(j) !add player to message list + if (j .eq. who) call out (tell05,1) !self excluded!! +1100 continue + goto 1190 + +1150 rmspk = .true. ! the Romulan speaks! + call romspk(local) ! set up target population & msg + + +*.......Search message list for problems .... + +1190 mask = 1 + do 1500 i = 1, KNPLAY + iship = DXFSHP * 100 + i + if ((dbits .and. mask) .eq. 0) goto 1400 !player on message list? + if (shpdam(i,KDRAD) .ge. KCRIT) goto 1300 !player's radio broken? + if (alive(i)) goto 1200 + if (rmspk) goto 1191 + call out (tell06, 0) + call odisp (iship, 0) + call crlf +1191 dbits = dbits .and. (.not. mask) + goto 1400 +1200 if ((nomsg .and. mask) .eq. 0) goto 1400 !radio off? +1300 if (rmspk) goto 1301 + call out (tell07, 0) + call odisp (iship,0) ; call crlf +1301 dbits = dbits .and. (.not. mask) +1400 mask = mask * 2 !update mask +1500 continue + + if (player) + + dbits = dbits .and. (.not. bits(who)) !remove self + gagmsg = gagmsg .and. (.not. dbits) !update individual gag + if (dbits .ne. 0) goto 1600 !anyone to send to? + if (.not. rmspk .and. .not. sntrom) call out (tell08, 1) + return + +*.......Send message to designated players + +1600 if (rmspk) goto 1650 + dispfr = who + (team * 100) + call makmsg + call crlf + return + +1650 call makmsg (local) ! store the Romulan's message + return + + end diff --git a/pdp10/compuserve/TIME.FOR b/pdp10/compuserve/TIME.FOR new file mode 100644 index 0000000..4fff5b0 --- /dev/null +++ b/pdp10/compuserve/TIME.FOR @@ -0,0 +1,48 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine prints out useful information concerning the +C elapsed time and run time of the game, job, and ship involved. + + subroutine TIME + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + call out (time01,0) !total elapsed time of game + call otim (etim(tim0)) + + if (who .eq. 0) goto 100 !in Pre-game section? + call out (time02,0) !elapsed time of ship + call otim (etim(job(who,KJOBTM))) + + call out (time03,0) !run time for this ship + call otim (runtim(d) - job(who,KRUNTM)) + + 100 call out (time04,0) !total run time for this job + call otim (runtim(d)) + + call out (time05,0) !present time of day + call otim (daytim(d)) + call crlf + return + + end diff --git a/pdp10/compuserve/TORDAM.FOR b/pdp10/compuserve/TORDAM.FOR new file mode 100644 index 0000000..5de3bb3 --- /dev/null +++ b/pdp10/compuserve/TORDAM.FOR @@ -0,0 +1,188 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine, along with it's entry point PHADAM, determines +C the amount of damage inflicted on ships and bases by torpedo +C and phaser hits. It also updates the scoring information, and +C sets up many of the variables eventually needed by MAKHIT. + + subroutine TORDAM (nplc, j, id, phit, ship) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + real rand, rana, hit, ranb, hita + +*.......Has the target already been destroyed? + + if ((nplc .lt. DXFBAS) .and. ((shpcon(j,KSDAM) .ge. KENDAM) + + .or. (shpcon(j,KSNRGY) .le. 0))) return + if ((nplc .ge. DXFBAS) .and. (base(j,3,nplc-2) .le. 0)) return + iwhat = 2 + rand = ran(0) + rana = ran(0) + hit = 0.0 + hita = 0.0 + ranb = rand - 0.5 + +*.......Determine size of hit and amount absorbed by shields (if up) +*.......Reduce shield energy due to attack + + hit = 4000.0 + 4000.0 * ran(0) + if (nplc .ge. DXFBAS) goto 1100 + if (shpcon(j,KSHCON) .gt. 0) 1000, 300 + 100 if (nplc .ge. DXFBAS) goto 200 + hita = hit * (1000.0 - shpcon(j,KSSHPC)) * 0.001 + shpcon(j,KSSHPC) = shpcon(j,KSSHPC) - + + (hit * amax1 (float(shpcon(j,KSSHPC)) * 0.001, 0.1) + + + 10) * 0.03 + if (shpcon(j, ksshpc) .lt. 0) shpcon(j, ksshpc) = 0 + goto 300 + 200 hita = hit * (1000 - base(j,3,nplc-2)) * 0.001 + base(j,3,nplc-2) = base(j,3,nplc-2) - + + (hit * amax1(float(base(j,3,nplc-2)) * 0.001, 0.1) + 10) * 0.03 + goto 400 + 300 if (shpcon(j,KSHCON) .lt. 0) hita = hit + +*.......Determine if hit critical. + + 400 ihita = hita + if (((hita * (rana + 0.1)) .lt. 1700.0) .and. (nplc .lt. DXFBAS)) + + goto 500 + if (((hita * (rana + 0.1)) .lt. 1700.0) .and. (nplc .ge. DXFBAS)) + + goto 600 + if ((iran(5) .eq. 5) .and. (nplc .ge. DXFBAS)) goto 1400 + if (nplc .ge. DXFBAS) goto 600 + +*.......Critically damage a random ship device + + hita = hita / 2.0 + critdv = int (KNDEV * ran(0) + 1.0) !pick a device + shpdam(j,critdv) = shpdam(j,critdv) + hita !and damage it + if (critdv .eq. KDSHLD) shpcon(j,KSHCON) = -1 !shields down? + critdm = hita + hita = hita + (ran(0) - 0.5) * 1000.0 + ihita = hita + + 500 shpcon(j,KSDAM) = shpcon(j,KSDAM) + hita + shpcon(j,KSNRGY) = shpcon(j,KSNRGY) - hita + 600 if (nplc .ge. DXFBAS) base(j,3,nplc-2) = + + max0 (int(base(j,3,nplc-2) - hita * 0.01), 0) + 700 if ((nplc .lt. DXFBAS) .and. (shpcon(j,KSSHPC) .le. 0)) + + shpcon(j,KSHCON) = -1 + +*.......Update scoring information + + if (SHIP .and. PLAYER .and. (5-team .eq. nplc)) + + tpoint(KPBDAM) = tpoint(KPBDAM) + hita + if (SHIP .and. (.not. PLAYER) .and. (nplc .ge. DXFBAS)) + + rsr(KPBDAM) = rsr(KPBDAM) + hita + if (PLAYER .and. SHIP .and. (3-team .eq. nplc)) + + tpoint(KPEDAM) = tpoint(KPEDAM) + hita + if (SHIP .and. (.not. PLAYER) .and. (nplc .lt. DXFBAS)) + + rsr(KPEDAM) = rsr(KPEDAM) + hita + + if (nplc .ge. DXFBAS) goto 1300 !base? + shpcon(j,KSPCON) = RED + shstto = shpcon(j,KSSHPC) ; shcnto = shpcon(j,KSHCON) + if ((shpcon(j,KSDAM) .ge. KENDAM) .or. + + (shpcon(j,KSNRGY) .le. 0)) klflg = 2 + + if (klflg .ne. 0) goto 750 !player destroyed? + if (iwhat .eq. 1) return !phaser hit? + call jump (nplc,j) !displaced by torp? + if (klflg .eq. 0) return !displaced into BH? + + 750 call setdsp (shpcon(j,KVPOS), shpcon(j,KHPOS), 0) + alive(j) = 0 + if (PLAYER .and. SHIP) tpoint(KPEKIL) = tpoint(KPEKIL) + 5000 + if (SHIP .and. .not. PLAYER) rsr(KPEKIL) = rsr(KPEKIL) + 5000 + return + + entry PHADAM (nplc, j, id, phit, ship) + +*.......Determine size of phaser hit, and the amount absorbed by the +*.......shields (if up). Decrease shield energy due to attack. + + iwhat = 1 + powfac = 80 + rana = ran(0) + hit = 0.0 + if ((nplc .lt. DXFBAS) .and. (shpcon(j,KSHCON) .gt. 0)) + + powfac = powfac / 2 + if (nplc .ge. DXFBAS) powfac = powfac / 2 + hit = pwr ((0.9 + 0.02 * ran(0)), id) + +*.......If player firing, check if computer or phaser damaged. +*.......Modify size of hit if true. + + if (PLAYER .and. SHIP .and. ((shpdam(who,KDPHAS) .gt. 0) .or. + + (shpdam(who,KDCOMP) .gt. 0))) hit = hit * 0.8 + if (nplc .ge. DXFBAS) goto 900 + if (shpcon(j,KSHCON) .lt. 0) goto 800 + hita = hit + hit = (1000 - shpcon(j,KSSHPC)) * hita * 0.001 + shpcon(j,KSSHPC) = shpcon(j,KSSHPC) - (hita * powfac * phit * + + amax1 (float(shpcon(j,KSSHPC)) * 0.001, 0.1) + 10) * 0.03 + if (shpcon(j, ksshpc) .lt. 0) shpcon(j, ksshpc) = 0 + 800 hita = hit * powfac * phit + goto 400 !use damage and scoring code in common with TORDAM + 900 hita = hit + hit = (1000 - base(j,3,nplc-2)) * hita * 0.001 + base(j,3,nplc-2) = base(j,3,nplc-2) - (hita * powfac * phit * + + amax1 (float(base(j,3,nplc-2)) * 0.001, 0.1) + 10) * 0.03 + goto 800 + +*.......See if torpedo deflected by shields + +1000 rand = rana - (shpcon(j,KSSHPC) * 0.001 * rand) + 0.1 +1100 if (nplc .ge. DXFBAS) rand = rana - (base(j,3,nplc-2) + + * 0.001 * rand) + 0.1 + if (rand .gt. 0.0) goto 100 !torpedo deflected? + iwhat = 3 ; ihita = 0 + if (nplc .ge. DXFBAS) base(j,3,nplc-2) = + + amax1((float(base(j,3,nplc-2)) - 50.0 * rana), 0.0) + if (nplc .ge. DXFBAS) goto 1200 + shpcon(j,KSSHPC) = amax1((float(shpcon(j,KSSHPC))-50.*rana),0.) + if (shpcon(j, ksshpc) .lt. 0) shpcon(j, ksshpc) = 0 +1200 hita = 0.0 + goto 700 + +*.......Critical hit on starbase (base destroyed if klflg .ne. 0) + +1300 shstto = base(j,3,nplc-2) ; shcnto = 1 + if (base(j,3,nplc-2) .gt. 0) return +1400 base(j,3,nplc-2) = base(j,3,nplc-2) - 50 - int(100.0 * ran(0)) + critdm = 1 + if ((iran(10) .eq. 10) .or. (base(j,3,nplc-2) .le. 0)) klflg = 2 + shstto = base(j,3,nplc-2) ; shcnto = 1 + +*.......Destroy starbase if shields gone + + if (klflg .eq. 0) return + call baskil (nplc-2) + nbase(nplc-2) = nbase(nplc-2) - 1 + if (SHIP .and. .not. PLAYER) rsr(KPBDAM) = rsr(KPBDAM) + 10000 + if (SHIP .and. PLAYER) tpoint(KPBDAM) = tpoint(KPBDAM) + 10000 + call setdsp (base(j,KVPOS,nplc-2), base(j,KHPOS,nplc-2), 0) + base(j,3,nplc-2) = 0 + return + + end diff --git a/pdp10/compuserve/TORP.FOR b/pdp10/compuserve/TORP.FOR new file mode 100644 index 0000000..4d729d3 --- /dev/null +++ b/pdp10/compuserve/TORP.FOR @@ -0,0 +1,264 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine controls torpedo fires by players. The desired +C burst is read in, checked for syntax errors, and executed. + + subroutine TORP (*) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /chkout/ V1, H1, iVc, iHc, dcode, idisV, idisH + real d, idisV, idisH + common /tolocl/ torpl(3,2), tpaus + +*.......Torpedo tubes critically damaged? + + if (shpdam(who,KDTORP) .lt. KCRIT) goto 100 + call out (torp00,1) + return 1 + + 100 call blkset (torpl, 0, 7) + iflg = 1 + i = 2 + if (shpcon(who,KNTORP) .gt. 0) goto 200 !any torps left? + if (oflg .eq. short) goto 2600 + call out (torp01,1) + return 1 + +*.......Read number of torps in burst, target locations + + 200 tem = locate(-7) + if (tem .lt. 0) return 1 !abort torpedo burst + if (tem .gt. 0) goto 400 + 300 call out (torp02,0) + tem = reloc (-7) + if (tem .lt. 0) return 1 + if ((tem .eq. 0) .or. (mod(tem,2) .eq. 0)) goto 300 + 400 if (vallst(1) .le. 0) return 1 !negative # of torps aborts burst + ntorp = vallst(1) + if (ntorp .gt. shpcon(who,KNTORP)) call out (torp03,1) + if ((ntorp .gt. shpcon(who,KNTORP)) .or. (ntorp .gt. 3) .or. + + (ntorp .lt. 1)) goto 2600 + if (tem .ne. 1) goto 600 !target locations already given? + 500 tem = reloc(-ntorp * 2) + if (tem .lt. 0) return 1 + if (mod(tem,2) .ne. 0) goto 500 + i = 1 + +* Analyse and store target location information + + 600 torpl(1,1) = vallst(i) + torpl(1,2) = vallst(i+1) + if (ntorp .eq. 1) goto 700 + if (tem .ge. i+2) i = i + 2 + torpl(2,1) = vallst(i) + torpl(2,2) = vallst(i+1) + if (ntorp .eq. 2) goto 700 + if (tem .ge. i+2) i = i + 2 + torpl(3,1) = vallst(i) + torpl(3,2) = vallst(i+1) + +* Input own location or out-of-range location? + + 700 do 800 i = 1, ntorp + if ((torpl(i,1) .eq. shpcon(who,KVPOS)) .and. + + (torpl(i,2) .eq. shpcon(who,KHPOS))) goto 2100 + if (.not. ldis(shpcon(who,KVPOS), shpcon(who,KHPOS), + + torpl(i,1), torpl(i,2), KRANGE)) goto 2700 + 800 continue + +*.......Start torpedo loop + + call pause (tobank - etim(tim0)) !load torpedo tubes + tpaus = 0 + shpcon(who,KSPCON) = RED + do 2000 id = 1, ntorp + dispfr = who + (team * 100) + shstfr = shpcon(who,KSSHPC) ; shcnfr = shpcon(who,KSHCON) + Vfrom = shpcon(who,KVPOS) ; Hfrom = shpcon(who,KHPOS) + if (iflg .lt. 0) goto 2400 + +*.........Calculate deflection--normal, shields, damage to tubes or computer? + + d = (ran(0) - 0.5) / 5.0 + if ((shpdam(who,KDTORP) .gt. 0) .or. (shpdam(who,KDCOMP) + + .gt. 0)) d = d + (ran(0) - 0.5) / 10.0 + if (shpcon(who,KSHCON) .gt. 0) d = d + + + (float(shpcon(who,KSSHPC)) * (ran(0) - 0.5)) / 10000. + iV = torpl(id,1) - shpcon(who,KVPOS) + iH = torpl(id,2) - shpcon(who,KHPOS) + if ((iV .eq. 0) .and. (iH .eq. 0)) goto 2100 + if (.not. docked(who)) shpcon(who,KNTORP) = shpcon(who,KNTORP)-1 + if (iran(100) .gt. 96) goto 2500 !torpedo misfire? + +*.........See if anything hit + + 900 idis = KRANGE - 2 + int((ran(0) - 0.5) * 4.0 + 0.5) + tpaus = tpaus + (slwest + 1) * 1000 + shpdam(who,KDTORP) + call check (shpcon(who,KVPOS), shpcon(who,KHPOS), iV, iH, + + idis, d) + if (dcode .eq. 0) goto 1600 + aran = iran(100) + if (dcode .ne. DXSTAR*100) goto 1100 + if (aran .le. 80) goto 1000 + dbits = bits (who) + Vfrom = iVc ; Hfrom = iHc + dispfr = DXSTAR * 100 ; iwhat = 6 + call makhit +1000 if (aran .gt. 80) goto 2000 + +*.........If star affected, check vicinity for target to damage + + dispfr = DXSTAR * 100 + iwhat = 7 ; Vfrom = iVc ; Hfrom = iHc + call pridis (iVc, iHc, KRANGE, 0, 0) + call makhit + tpoint(KNSDES) = tpoint(KNSDES) - 500 + call snova + goto 2000 + +*.........If target hit by torpedo, damage it + +1100 nplc = dcode / 100 + if ((nplc .ge. DXNPLN) .and. (nplc .le. DXEPLN)) goto 1800 !planet? + if (nplc .ne. DXBHOL) goto 1200 !black hole? + iwhat = 5 ; Vto = iVc ; Hto = iHc ; critdv = id + dbits = bits (who) + call makhit + goto 2000 + +* Damage ships or starbases + +1200 if (nplc .eq. DXROM) goto 1700 !romulan? + +*.........Torpedo hits a friendly base or ship? + + if ((nplc .ne. team) .and. (nplc .ne. team+2)) goto 1400 +1300 iwhat = 15 ; Vto = iVc ; Hto = iHc ; critdv = id + dbits = bits (who) + call makhit + goto 2000 + +1400 j = mod (dcode, 100) + if (nplc .lt. DXFBAS) goto 1500 + +* Base calls for help? + + if (base(j,3,nplc-2) .ne. 1000) goto 1500 + Vto = base(j,KVPOS,nplc-2) ; Hto = base(j,KHPOS,nplc-2) + iwhat = 9 ; dispto = dcode ; dbits = 0 + call pridis (30, 30, 100, nplc-2, 0) + dbits = dbits .and. .not. nomsg + call makhit + iwhat = 2 ; dispfr = who + (team * 100) + Vfrom = shpcon(who,KVPOS) ; Hfrom = shpcon(who,KHPOS) + shstfr = shpcon(who,KSSHPC) ; shcnfr = shpcon(who,KSHCON) + +1500 Vto = iVc ; Hto = iHc + call tordam (nplc, j, idum, idum, .TRUE.) + dispto = dcode + call pridis (iVc, iHc, KRANGE, 0, 0) + call makhit !send hit message + if ((nplc .lt. DXFBAS) .and. (trstat(j) .ne. 0)) + + call trcoff (j) + +* Base destroyed? + + if ((nplc .lt. DXFBAS) .or. (disp(iVc,iHc) .ne. 0)) goto 2000 + dispto = j + (nplc * 100) ; iwhat = 10 + call pridis (30, 30, 100, nplc-2, 0) + dbits = dbits .and. .not. nomsg + Vto = iVc ; Hto = iHc + call makhit + goto 2000 + +*.........Torpedo misses + +1600 iwhat = 4 ; Vto = iVc ; Hto = iHc ; critdv = id + dbits = bits (who) + call makhit + goto 2000 + +*.........Hit Romulan with torpedo + +1700 call torom (d1, d2) + if (ROM .and. iran(10) .gt. 7) call jump (DXROM,1) + tpoint(KPRKIL) = tpoint(KPRKIL) + ihita + if (.not. ROM) tpoint(KPRKIL) = tpoint(KPRKIL) + 5000 + shstto = erom ; shcnto = 1 ; dispto = DXROM * 100 + Vto = locr(KVPOS) ; Hto = locr(KHPOS) + call pridis (iVc, iHc, KRANGE, 0, 0) + call makhit + goto 2000 + +*.........Hit planet with torpedo + +1800 if (nplc .eq. team+DXNPLN) goto 1300 !friendly planet? + dispto = dcode ; i = mod (dcode, 100) + iwhat = 2 + call lock (plnlok,'TORP') !lock LOCPLN array + if (lkfail) goto 2800 ! if can't get plnlok, miss + Vto = locpln(i,KVPOS) ; Hto = locpln(i,KHPOS) + if (iran(4) .eq. 4) locpln(i,3) = locpln(i,3) - 1 + shstto = max0 (locpln(i,3), 0) + if (locpln(i,3) .lt. 0) klflg = 2 !planet killed? + if (klflg .eq. 0) goto 1900 + tpoint(KNPDES) = tpoint(KNPDES) - 1000 + call setdsp (iVc, iHc, 0) + call plnrmv (i, nplc-DXNPLN) +1900 call unlock (plnlok) !unlock LOCPLN array + call pridis (iVc, iHc, KRANGE, 0, 0) + call makhit +2000 continue + goto 2400 + +2100 if (oflg) 2200, 2200, 2300 !attempting to hit own location +2200 call out (error2,1) ; goto 2400 +2300 call out (error1,1) +2400 tobank = etim(tim0) + tpaus !set minimum pause before next burst + return + +*.......Check for torpedo misfire and photon tube damage + +2500 call out (torp04,0) + call odec (id,0) + call out (torp05,1) + d = d + (ran(0) - 0.5) / 5.0 !recompute torpedo deflection + iflg = -1 + if (iran(5) .ne. 5) goto 900 !tubes damaged? + shpdam(who,KDTORP) = shpdam(who,KDTORP) + 500 + iran(3000) + call out (torp06,1) + goto 900 + +*.......Error messages + +2600 call crlf !insufficient torps for burst + call odec (shpcon(who,KNTORP),0) + call out (torp07,1) + return 1 + +2700 call out (phacn1,1) !target out of range + return 1 + +2800 call out ('Sorry, Captain, but the torpedo tubes are empty!', 1) + return 1 + end diff --git a/pdp10/compuserve/TRACTR.FOR b/pdp10/compuserve/TRACTR.FOR new file mode 100644 index 0000000..f2db03f --- /dev/null +++ b/pdp10/compuserve/TRACTR.FOR @@ -0,0 +1,134 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C This routine allows a ship to tow another friendly ship. The +C deflector shields of both ships must be down. Incoming torpedo +C hits or nova damage breaks the tractor beam, as does raising +C either ship's deflector shields. The entry point TRCOFF is +C used to break an active tractor beam. + + subroutine TRACTR (ip) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + call crlf + index = 2 + if ((ntok .gt. 1) .or. (trstat(who) .eq. 0)) goto 100 + ip = who ; goto 1400 + +*.......Input desired ship to tractor beam + + 100 if (typlst(index) .eq. KALF) goto 200 + call out (tract1,0) + call gtkn + if (typlst(1) .eq. KEOL) return + index = 1 + goto 100 + +*.......Turn tractor beam off? + + 200 if (.not. equal(tknlst(index), 'OFF')) goto 300 + ip = who ; if (trstat(ip) .ne. 0) goto 1400 + call out (tract2,1) + return + +*.......Tractor beam ALREADY active? + + 300 if (trstat(who) .eq. 0) goto 400 + call out (tract3,1) + return + +*.......Match input with ship name + + 400 do 500 i = 1, KNPLAY + if (equal (tknlst(index), names(i,1))) goto 600 + 500 continue + call out (unkshp,1) !unknown ship name + return + +*.......Tractoring your own ship? + + 600 if (i .ne. who) goto 700 + call out (tract4,1) + return + +*.......Attempting to tractor an enemy ship? + + 700 dteam = 1 ; if (i .gt. (KNPLAY/2)) dteam = 2 + if (team .eq. dteam) goto 800 + call out (tract5,1) + return + +*.......Ship in game? + + 800 if (alive(i)) goto 900 + call out (noship,1) + return + +*.......Adjacent to destination ship? + + 900 if (ldis(shpcon(who,KVPOS), shpcon(who,KHPOS), + + shpcon(i,KVPOS), shpcon(i,KHPOS), 1)) goto 1000 + call out (energ3,1) + return + +*.......Destination ship already has active tractor beam? + +1000 iship = (DXFSHP * 100) + i + if (i .gt. KNPLAY/2) iship = iship + 100 + if (trstat(i) .eq. 0) goto 1100 + call odisp (iship,1) + call out (tract6,1) + return + +*.......Trying to apply tractor beam with YOUR shields up? + +1100 if (shpcon(who,KSHCON) .lt. 0) goto 1200 + call out (tract7,1) + return + +*.......Trying to apply tractor beam with HIS shields up? + +1200 if (shpcon(i,KSHCON) .lt. 0) goto 1300 + call odisp (iship,1) + call out (tract8,1) + return + +*.......Apply tractor beam, inform players + +1300 trstat(who) = i ; trstat(i) = who + dbits = bits(who) .or. bits(i) + iwhat = 13 + call makhit + return + +*.......Entry point for removing tractor beam + + entry TRCOFF (ip) + +1400 dbits = bits(ip) .or. bits(trstat(ip)) + iwhat = 14 + trstat(trstat(ip)) = 0 ; trstat(ip) = 0 !remove beam + call makhit !inform players + return + + end diff --git a/pdp10/compuserve/TRAP.FOR b/pdp10/compuserve/TRAP.FOR new file mode 100644 index 0000000..89e9fa6 --- /dev/null +++ b/pdp10/compuserve/TRAP.FOR @@ -0,0 +1,40 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + C When this routine is called because ^C is typed it removes +C the player from the game before returning to monitor level, +C thus preventing derelict ships. All pertinent information +C is saved so that the player can continue the game (unless +C his ship has been taken over by someone else). + + subroutine TRAP + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + call CCTRAP + call free (who) !store ship info, remove from high seg + who = 0 + call monit !return to monitor + call rstart (who) !restore ship to high seg if possible + return + + end diff --git a/pdp10/compuserve/TTY.MAC b/pdp10/compuserve/TTY.MAC new file mode 100644 index 0000000..ab32bb2 --- /dev/null +++ b/pdp10/compuserve/TTY.MAC @@ -0,0 +1,208 @@ +; This file is part of Decwar. +; Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +; Computation Center and Harris Newman. + +; This program 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 3, or (at your option) +; any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; 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., 51 Franklin Street - Fifth Floor, Boston, MA +; 02110-1301, USA. + + + title tty + twoseg + search UUOSYM + sall + + t1=1 + t2=2 + t3=3 + c=4 + fnc=14 + udx=15 + arg=16 + p=17 + + reloc 400000 + +opnblk: .IOPIM+IO.LEM + sixbit /TTY/ + z + +tty: reset + + seto udx, + trmno. udx, ;get UDX of TTY + jrst tty1 ;can't; don't try to set TTY NO PAGE + movei fnc,.TOPAG+1000 + movei arg,0 + move t1,[3,,fnc] + trmop. t1, ;set TTY NO PAGE + jfcl + +tty1: open 0,opnblk + jfcl + +tty2: outchr ["<"] + inchrw c + outstr ctbl(c) + outchr [" "] + movei t1,(c) + idivi t1,100 + idivi t2,10 + addi t1,"0" + outchr t1 + addi t2,"0" + outchr t2 + addi t3,"0" + outchr t3 + outstr [byte (7) 15,12] + caie c,003 ;^C? + jrst tty2 + + movei arg,1 + move t1,[3,,fnc] + trmop. t1, ;set TTY PAGE + jfcl + exit 1, + jrst tty + +ctbl: asciz 'NUL>' + asciz 'SOH>' + asciz 'STX>' + asciz 'ETX>' + asciz 'EOT>' + asciz 'ENQ>' + asciz 'ACK>' + asciz 'BEL>' + asciz 'BS> ' + asciz 'HT> ' + asciz 'LF> ' + asciz 'VT> ' + asciz 'FF> ' + asciz 'CR> ' + asciz 'SO> ' + asciz 'SI> ' + asciz 'DLE>' + asciz 'DC1>' + asciz 'DC2>' + asciz 'DC3>' + asciz 'DC4>' + asciz 'NAK>' + asciz 'SYN>' + asciz 'ETB>' + asciz 'CAN>' + asciz 'EM> ' + asciz 'SUB>' + asciz 'ESC>' + asciz 'FS> ' + asciz 'GS> ' + asciz 'RS> ' + asciz 'US> ' + asciz 'SP> ' + asciz '!> ' + asciz '"> ' + asciz '#> ' + asciz '$> ' + asciz '%> ' + asciz '&> ' + asciz "'> " + asciz '(> ' + asciz ')> ' + asciz '*> ' + asciz '+> ' + asciz ',> ' + asciz '-> ' + asciz '.> ' + asciz '/> ' + asciz '0> ' + asciz '1> ' + asciz '2> ' + asciz '3> ' + asciz '4> ' + asciz '5> ' + asciz '6> ' + asciz '7> ' + asciz '8> ' + asciz '9> ' + asciz ':> ' + asciz ';> ' + asciz '<> ' + asciz '=> ' + asciz '>> ' + asciz '?> ' + asciz '@> ' + asciz 'A> ' + asciz 'B> ' + asciz 'C> ' + asciz 'D> ' + asciz 'E> ' + asciz 'F> ' + asciz 'G> ' + asciz 'H> ' + asciz 'I> ' + asciz 'J> ' + asciz 'K> ' + asciz 'L> ' + asciz 'M> ' + asciz 'N> ' + asciz 'O> ' + asciz 'P> ' + asciz 'Q> ' + asciz 'R> ' + asciz 'S> ' + asciz 'T> ' + asciz 'U> ' + asciz 'V> ' + asciz 'W> ' + asciz 'X> ' + asciz 'Y> ' + asciz 'Z> ' + asciz '[> ' + asciz '\> ' + asciz ']> ' + asciz '^> ' + asciz '_> ' + asciz '`> ' + asciz 'a> ' + asciz 'b> ' + asciz 'c> ' + asciz 'd> ' + asciz 'e> ' + asciz 'f> ' + asciz 'g> ' + asciz 'h> ' + asciz 'i> ' + asciz 'j> ' + asciz 'k> ' + asciz 'l> ' + asciz 'm> ' + asciz 'n> ' + asciz 'o> ' + asciz 'p> ' + asciz 'q> ' + asciz 'r> ' + asciz 's> ' + asciz 't> ' + asciz 'u> ' + asciz 'v> ' + asciz 'w> ' + asciz 'x> ' + asciz 'y> ' + asciz 'z> ' + asciz '{> ' + asciz '|> ' + asciz '}> ' + asciz '~> ' + asciz 'DEL>' + + end tty diff --git a/pdp10/compuserve/TYPE.FOR b/pdp10/compuserve/TYPE.FOR new file mode 100644 index 0000000..1a27ae8 --- /dev/null +++ b/pdp10/compuserve/TYPE.FOR @@ -0,0 +1,103 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine informs the player of either the current OUTPUT +C or OPTION switches. The OUTPUT switches are: +C SHORT, MEDIUM, or LONG output, +C NORMAL or INFORMATIVE command prompt, +C SHORT or LONG scan format, +C ABSOLUTE or RELATIVE default for coordinate input, +C ABSOLUTE, RELATIVE or BOTH for coordinate output, +C and the current TTYTYPE. +C The OPTION switches are: +C The current version number and date of implementation, +C Whether there are Romulans in the game, +C and whether there are Black Holes in the game. + + subroutine TYPE(kind) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + p = 2 + if (kind .eq. 1) goto 400 ! show his params + if (kind .eq. 2) goto 2300 + 100 if (typlst(p) .ne. KALF) goto 300 + if (equal (tknlst(p), 'O') .ne. -2) goto 200 + call out (ambswi, 1) !ambiguous switch + goto 300 + + 200 if (equal (tknlst(p), 'OUTPUT')) goto 400 + if (equal (tknlst(p), 'OPTION')) goto 2300 + + 300 call out (type01, 0) !get the switch + call gtkn + if (typlst(1) .eq. KEOL) return + p = 1 ; goto 100 + +*.......TYPE OUTPUT switches + + 400 call out (type02, 2) !Short, Medium or Long output + if (oflg) 500, 600, 700 + 500 call out (shtfrm, 0) ; goto 800 + 600 call out (medfrm, 0) ; goto 800 + 700 call out (lngfrm, 0) + 800 call out (type03, 1) + + if (prtype) 900, 1000 !Normal or Informative prompt + 900 call out (inform, 0) ; goto 1100 +1000 call out (normal, 0) +1100 call out (type04, 1) + + if (scnflg) 1200, 1300 !Short or Long scans +1200 call out (shtfrm, 0) ; goto 1400 +1300 call out (lngfrm, 0) +1400 call out (type05, 1) + + if (icflg) 1500, 1600, 1700 !Abs. or Rel. coordinate input +1500 call out (relfrm, 0) ; goto 1800 +1600 call out (bthfrm, 0) ; goto 1800 +1700 call out (absfrm, 0) +1800 call out (type08, 1) + + if (ocflg) 1900, 2000, 2100 !Abs., Rel. or Both for coord. output +1900 call out (relfrm, 0) ; goto 2200 +2000 call out (bthfrm, 0) ; goto 2200 +2100 call out (absfrm, 0) +2200 call out (type09, 1) + + call out (set008, 0) !Terminal type + call out2w (ttydat(1,ttytyp), ttydat(2,ttytyp)) + call crlf + goto 2400 + +*.......TYPE OPTION switches + +2300 call crlf + call out (decver, 1) + if (ROMOPT) call out (setu06, 1) + if (.not. ROMOPT) call out (type06, 1) + if (BLHOPT) call out (setu07, 1) + if (.not. BLHOPT) call out (type07, 1) + +2400 return + + end diff --git a/pdp10/compuserve/USERS.FOR b/pdp10/compuserve/USERS.FOR new file mode 100644 index 0000000..790fc6b --- /dev/null +++ b/pdp10/compuserve/USERS.FOR @@ -0,0 +1,58 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C This routine prints out information about the currently active +C captains. The information includes their ship name and their +C own name; plus their PPN, TTY number, and TTY speed. If the +C password is set, one also gets their present location. + + subroutine USERS + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + common /local/ line(90) + +*.......Set up output table format + + call crlf + if (oflg .ne. long) goto 100 + call out (users1,0) + if (PASFLG) call out (users2,0) + call crlf + +*.......Print out player information + + 100 do 700 i = 1, KNPLAY + if (i .eq. (KNPLAY/2)+1) call out (users5,1) + if (.not. alive(i)) goto 700 +c-- if (oflg) 200, 300, 400 +c-- 200 num = 2 ; goto 500 +c-- 300 num = 4 ; goto 500 + 400 num = 6 + 500 call stat (num, i+0) + if (.not. PASFLG) goto 600 + call spaces (3) + call prloc(shpcon(i,KVPOS), shpcon(i,KHPOS), 0, 2, ocflg, SHORT) + 600 call crlf + 700 continue + return + + end diff --git a/pdp10/compuserve/W.MAC b/pdp10/compuserve/W.MAC new file mode 100644 index 0000000..fbf2dcf --- /dev/null +++ b/pdp10/compuserve/W.MAC @@ -0,0 +1,77 @@ +; This file is part of Decwar. +; Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +; Computation Center and Harris Newman. + +; This program 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 3, or (at your option) +; any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; 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., 51 Franklin Street - Fifth Floor, Boston, MA +; 02110-1301, USA. + + +;;; WRED. -- Wait until a core area may be read. +; If a job is writing a core area, no other jobs may have +; read or write access to that area. +; Any number of jobs may be reading an area at the same time. +; +; Input T1 = pointer to read flag. +; T2 = pointer to write flag. +; Output Read flag is incremented. +; + sixbit /WRED./ +wred.: aose (t2) ;anyone writing? + pushj p,wait. ;yes, wait until done + aos (t1) ;one more person reading + setom (t2) ;not really planning on writing + popj p, + + + +;;; WWRT. -- Wait until a core area may be written. +; If a job is writing a core area, no other jobs may have +; read or write access to that area. +; +; Input T1 = pointer to read flag. +; T2 = pointer to write flag. +; Output Write flag is set. +; + sixbit /WWRT./ +wwrt.: aose (t2) ;anyone writing? + pushj p,wait. ;yes, wait until done + skipn (t1) ;anyone reading? + jrst wwrt.2 ;no, ok t write + + movei t3,ntry ;# of cycles before breaking lock + movei t4,stry ;time to sleep between tries +wwrt.1: skipn (t1) ;anyone reading core now? + jrst wwrt.2 ;no, ok to start writing + hiber t4, ;yes, wait a while for reads to finish + halt + sojg t3,wwrt.1 ;and try again + msg <%Read lock time out>,crlf +wwrt.2: popj p, + + + +;;; WAIT. -- Wait until no jobs are writing a particular core +; area, then lock it for this job. + + sixbit /WAIT./ +wait.: movei t3,ntry ;# of cycles before breaking lock + movei t4,stry ;time to sleep between tries +wait.1: aosn (t2) ;anyone writing the core area? + jrst wait.2 ;no, this job has it + hiber t4, ;yes, wait a while + halt + sojg t3,wait.1 ;and try again + msg <%Write lock time out>,crlf +wait.2: popj p, diff --git a/pdp10/compuserve/WARVER.MAC b/pdp10/compuserve/WARVER.MAC new file mode 100644 index 0000000..2691a2d --- /dev/null +++ b/pdp10/compuserve/WARVER.MAC @@ -0,0 +1,25 @@ +; This file is part of Decwar. +; Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +; Computation Center and Harris Newman. + +; This program 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 3, or (at your option) +; any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; 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., 51 Franklin Street - Fifth Floor, Boston, MA +; 02110-1301, USA. + + +%EDIT%==20 +title warver + loc 137 + exp %edit% + end diff --git a/pdp10/compuserve/docs/DECWAR.COM b/pdp10/compuserve/docs/DECWAR.COM new file mode 100644 index 0000000..8542706 --- /dev/null +++ b/pdp10/compuserve/docs/DECWAR.COM @@ -0,0 +1,106 @@ +LOCAL .REL [10,30,DECWAR] ;.REL file for LOCAL. +LOW .FOR [10,30,DECWAR] ;Dummy routine used by L.MIC linker to + ;force LOWSEG common block into the low + ;segment. +LOW .REL [10,30,DECWAR] ;.REL file for LOW. +MSG .REL [10,30,DECWAR] ;.REL file for MSG. +NIO .SFD [10,30,DECWAR] ;SFD containing various read/write multiple-acces + ;s routines. +WARMAC.REL [10,30,DECWAR] ;.REL file for WARMAC. +DECWAR.NDX [10,30,DECWAR] ;List of DECWAR.FOR routines and their + ;respective page numbers. (including + ;Entry point locations). Useful when + ;editing. +DECWAR.REL [10,30,DECWAR] ;.REL file for DECWAR. +LOWSEG.FOR [10,30,DECWAR] ;Low segment common block definition + ;file. 'Included' throughout DECWAR, + ;created from WARMAC source using TECO + ;macro LOWSEG.SAV +HISEG .FOR [10,30,DECWAR] ;High segment common block definition + ;file. 'Included' throughout DECWAR, + ;created from WARMAC source using TECO + ;macro HISEG.SAV +PARAM .SAV [10,30,DECWAR] ;TECO macro to create PARAM.FOR file + ;from WARMAC source. +HISEG .SAV [10,30,DECWAR] ;TECO macro to create HISEG.FOR file + ;from WARMAC source. +LOWSEG.SAV [10,30,DECWAR] ;TECO macro to create LOWSEG.FOR file + ;from WARMAC source. +EXTERN.SAV [10,30,DECWAR] ;TECO macro to create EXTERN.FOR file + ;from MSG source. +NDX .SAV [10,30,DECWAR] ;TECO macro to create DECWAR.NDX file + ;from DECWAR source. +EXTERN.FOR [10,30,DECWAR] ;External text string definition file. + ; 'Included' throughout DECWAR, created + ;from MSG source using TECO macro EXTERN.SAV + ;(EXTERN used to force text into high-segment). +SETUP .REL [10,30,DECWAR] ;.REL file for SETUP. +PAGE .SAV [10,30,DECWAR] ;TECO macro to return the appropriate + ;page number (from DECWAR.NDX) for a + ;given DECWAR Fortran routine. +MSC .SFD [10,30,DECWAR] ;SFD containing Misc. DECWAR related + ;files. +HIGH .FOR [10,30,DECWAR] ;Dummy routine used by L.MIC linker to + ;force HISEG common block into the high + ;segment. +HIGH .REL [10,30,DECWAR] ;.REL file for HIGH. +HLP .SFD [10,30,DECWAR] ;SFD containing all documents pertaining + ;to DECWAR (HELP, NEWS, plus various + ;letters). +TEC .SFD [10,30,DECWAR] ;SFD containing all the sources for the + ;many TECO 'tools' used in writing and + ;updating DECWAR. +22 .SFD [10,30,DECWAR] ;SFD containing copies of Version 2.2 + ;sources. +LOCAL .FOR [10,30,DECWAR] ;Dummy subroutine for adding to L.MIC + ;linker when debugging a subroutine declaring + ;the 'LOCAL' common block (eg., to debug + ;a routine w/o recompiling the entire + ;DECWAR source, insert the desired routine + ;before DECWAR in the link sequence, + ;and add LOCAL before that if /LOCAL/ + ;is declared). +SETMSG.REL [10,30,DECWAR] ;.REL file for SETMSG. +SETEXT.SAV [10,30,DECWAR] ;TECO macro to create SETEXT.FOR from + ;SETMSG source file. +SETEXT.FOR [10,30,DECWAR] ;Equivalent file to EXTERN.FOR file for + ;SETUP code (will be loaded into the + ;Low-segment during SETUP, and thrown + ;away after entering the game proper). +LSTVAR.FOR [10,30,DECWAR] ;Definition file for 'LSTVAR' common + ;block (actually, defines the use of + ;/LOCAL/ within the various LIST routines). +DECWAR.TAP [10,30,DECWAR] ;Describes (lists) files to be put on + ;DECWAR **source** distribution tape. + ; This is NOT for making a 'normal' transport + ;tape, which should include only the + ;executable file, plus documentation. +PARAM .FOR [10,30,DECWAR] ;Definition file for PARAM parameter + ;section 'Included' throughout DECWAR. + ; Created using PARAM.SAV TECO macro + ;from WARMAC source. +L .MIC [10,30,DECWAR] ;Sophisticated linker for creating new + ;executable file with various attributes + ;(Debug, DDT, Symbol table, Map, etc.) +DECWAR.COM [10,30,DECWAR] ;Comment file for [10,30,DECWAR] SFD. +SETMSG.MAC [10,30,DECWAR] ;Equivalent to MSG.MAC for SETUP. Will + ;be thrown away after entering main part + ;of game. +SETUP .FOR [10,30,DECWAR] ;Fortran source code for Startup of game, + ;Pre-game activity, reactivation checks + ;for returning players, etc. Is eliminated + ;after entering main part of game. +MSG .MAC [10,30,DECWAR] ;Macro source defining all text strings + ;used with DECWAR. Combined with EXTERN.FOR, + ;it allows all this text to be loaded + ;in the High-segment. +CONTEN.MIC [10,30,DECWAR] ;MICRO to (1) create a new contents for + ;a MACRO file; (2) recompile the resulting + ;new MACRO file; (3) generate the CREF + ;listing; and (4) print the CREF listing. +TO .DO [10,30,DECWAR] ;Somewhat informal list of things 'to + ;do', that have been done, that can't + ;be done although it would be nice, etc., + ;etc. +DECFIX.MAC [10,30,DECWAR] ;source to program to drop decwar off + ;the swapper diff --git a/pdp10/compuserve/docs/DECWAR.DOC b/pdp10/compuserve/docs/DECWAR.DOC new file mode 100644 index 0000000..0bc1838 --- /dev/null +++ b/pdp10/compuserve/docs/DECWAR.DOC @@ -0,0 +1,1409 @@ +DECWAR GAME INSTRUCTIONS Page 1 + + + DECWAR Version 2.3, November 20, 1981 + + +Introduction and Overview of the Game of DECWARs. + + DECWAR is a real time space battle game designed to be +played by from 1 to 10 people. The object of the game is to +destroy all enemy bases and ships, and capture all enemy +planets, before the enemy does the same to you. Each person +plays on a separate terminal, and enters the game by selecting + + 8 DECWAR (on the MultiPlayer Host) + +Players are free to enter and leave the game as desired, since +each has his own job and therefore won't interfere with the +other players (the jobs interact through a shareable high +segment). + + + Besides the enemy (Federation or Empire), the following may +also be a threat to your well being. + + 1. Romulans are nasty beasts that beginners are better off + without. However, if you're the only person playing, + the Romulan is your only competition. Romulans tend to + make for shorter games but when there are 3 or less + players a Romulan will be included. After the fourth + player joins the game, a Romulan will not be re-created + once he is destroyed. include Romulans in the game. + + 2. Black holes are annoying, since if you are displaced + into one, you're dead. They also tend to gobble up + stray torpedos. There is a 25% chance of black holes + being included in the game. + + + There are two primary opposing forces in the galaxy -- +Humans (Federation) and Klingons (Empire). As you enter the +game for the first time, you get to choose which side you'll +join (unless there is a large imbalance in the team sizes). If +you are subsequently destroyed and later reenter the game, you +automatically rejoin your old team. + + You get to select the ship you want to control from a list +of remaining ships on your side. There are 5 ships on each +side: + + Federation ships Empire ships + ---------------- ------------ + Lexington Cobra + Nimitz Demon + Savannah Hawk + Vulcan Jackal + Yorktown Wolf + + DECWAR GAME INSTRUCTIONS Page 2 + + + Due to continuous espionage activities, present front-line +ships of the Federation and the Klingon Empire are identical in +strength and weaponry. These ships can move from sector to +sector using either warp or impulse engines, can attack enemy +installations and ships using either photon torpedoes or +phasers, and can defend themselves against such attack using +their deflector shields. All ships also possess sub-space +radios which keep them in touch with friendly starbases and +other ships. + + + The various devices of a ship are subject to damage. This +damage may be due to enemy attack or to over use. These +damages, unlike total ship damage (see ship attributes below), +may be repaired while underway. If damage on a device is less +than 300 units, its performance is degraded. If damage is 300 +or more units, the device is inoperative. A ship possesses the +following devices: + + 1. Warp Engines -- These engines are the normal mode of + travel for starships. The maximum speed is warp factor + 6, with warps 5 and 6 risking potential damage to the + engines. If warp engines are damaged (less than 300 + units) the maximum speed is warp factor 3. + + + NOTE + + One warp unit is equivalent to one horizontal + or one vertical grid movement. A diagonal + movement is equivalent to the hypotenuse of the + horizontal and vertical sides. + + + + 2. Impulse Engines -- These engines are basically for + emergency use while the warp engines are critically + damaged. Impulse engines move the ship at warp factor + 1. + + 3. Photon Torpedo Tubes -- Used to fire photon torpedoes. + If these tubes are damaged, the accuracy of torpedo + bursts is impaired. The maximum torpedo range is 10 + sectors. + + 4. Phaser Banks -- Each ship possesses two phaser banks, + with a single phaser control. Damage to this phaser + control or to the ship's computer reduces the strength + of the phaser hit. + + 5. Deflector Shields -- The deflector shields of a ship + protect it from damage from phaser and photon torpedo + hits, and shield it from the energy released when a + star goes nova. The percent shield strength indicates + the percent of the incoming hit which will be + nullified. In addition, strong deflector shields may + deflect photon torpedoes with little or no damage. + DECWAR GAME INSTRUCTIONS Page 3 + + + NOTE: If a ship's shields are up, the amount of energy + expended during movement is doubled. + + 6. Computer -- The ship's computer is used for computed + firing, computation during ship movement, and for + phaser control. If the computer is inoperative, + navigation during warp and impulse movement becomes + inexact. + + 7. Life Support -- If the life support units of a starship + are inoperative, the ship must either repair this + damage or dock within 5 stardates. If this is not + accomplished, the crew will die. + + 8. Sub-Space Radio -- The sub-space radio is used to + communicate with other ships, of either side. Bases + under attack also use the sub-space radio to call for + help and notify their team's ships of their + destruction. + + 9. Tractor Beam -- The ship's tractor beam is used + primarily to tow damaged friendly ships away from + danger. The beam can not be used unless both ships + have lowered their shields. + + + In addition to the individual devices discussed above, a +newly commissioned ship (or a fully repaired and rearmed older +ship) possesses the following attributes: + + 1. 5000 units of ship energy. Ship energy is used during + movement and phaser firing. It is also decreased each + time the ship gets hit with phasers or photon + torpedoes. If this quantity ever reaches zero, the + ship is dead. A ship possessing 1000 units of ship + energy or less automatically goes to yellow alert, and + a warning bell sounds after every move. + + 2. 2500 units of shield energy. This energy is stored in + the ship's shields (whether up or down), and is + separate from the ship energy. However, energy may be + transferred between these two energy reserves as + needed. If shields are up, their energy is decreased + each time the ship gets hit. + + 3. Zero units of ship damage. During battle, a ship + collects hits from enemy installations and ships. If + these accumulated hits ever reach 2500 units of damage + or greater, the ship is destroyed. Ship damage may be + reduced only by docking. + + + The galaxy is arranged in a grid of 75 by 75 sectors. +Players can move freely throughout the galaxy in search of +enemies, which come in several categories: + DECWAR GAME INSTRUCTIONS Page 4 + + + 1. Romulan. This can be the most dangerous thing to come + up against, and fortunately there is a maximum of 1 + Romulan in the game at any given time. The Romulan + moves around concealed by his cloaking device until he + comes across a suitable target (Federation or Empire + ship or base) which he immediately proceeds to attack. + An infinite supply of torpedoes and energy make him a + formidable foe. If you kill one, another will + eventually appear somewhere in the galaxy. + + 2. Enemy ship. This is the second most dangerous thing to + come across, since all enemy ships are backed by human + intelligence. All ships are created equal, and so the + outcome of a clash between two ships is usually due to + skill on its captain's part, although some other + factors do come into play. + + 3. Enemy base. These aren't dangerous unless you come + within range (4 sectors) since they are immobile. If + you ARE foolish enough to get within range, however, + their overwhelming phaser power will quickly pound you + into rubble! Destroying a base is useful primarily + because this removes it from use by your enemy (bases + are used as supply stations and as a refuge in times of + stress). A damaged starbase will slowly build itself + back to full strength if it is not completely + destroyed. + + 4. Enemy planet. These are just like enemy bases, except + that they are weaker (how much weaker depends on how + many fortifications the enemy has built on them), and + they can be captured. Their firing range is only two + sectors, and they can re-supply the enemy less rapidly + than can a base. + + 5. Neutral planet. While these aren't strictly classified + as enemies, they will take pot shots at you (their + range is also 2 sectors), so be wary of them. You can + capture neutral planets and win them over to your side. + + + + When playing the game, all commands can be abbreviated to 2 +characters, and some can be abbreviated to 1 character (you can +use the shortest unambiguous abbreviation). For a list of +commands type + + HELP * + +and for a description of an individual command type + + HELP command + +The help on individual commands will be read from this help file +(that's what the periods in column 1 are for in the long +description of each command). The legal commands are: + DECWAR GAME INSTRUCTIONS Page 5 + + + 1. BASES -- List information on friendly and known enemy + bases. + + 2. BUILD -- Develop installations on a planet, and + eventually build it into a base. The planet must first + be captured. + + 3. CAPTURE -- Win a neutral or enemy planet over to your + side. + + 4. DAMAGES -- List damaged devices and their current + status. + + 5. DOCK -- Dock at an adjacent base or planet. This + increases your energy, replenishes your torpedoes, + repairs your ship a little, and reduces your ship + damage. + + 6. ENERGY -- Transfer energy between two ships. + + 7. GRIPE -- Record bugs, comments, suggestion, etc. in + the file GAM:DECWAR.GRP, which is periodically reviewed + by the implementors. + + 8. HELP -- List or describe the legal commands. + + 9. IMPULSE -- Move using impulse engines. + + 10. LIST -- List various information about ships, bases, + and planets. + + 11. MOVE -- Move using warp engines. + + 12. NEWS -- Tell about any new features or enhancements + described in the file GAM:DECWAR.NWS. + + 13. PHASERS -- Fire phasers at a target. + + 14. PLANETS -- List information on friendly and known enemy + and neutral planets. + + 15. POINTS -- List your score breakdown so far. + + 16. QUIT -- Get out of the game. + + 17. RADIO -- Turn ship's sub-space radio on or off; ignore + or restore communications from individual ships. + + 18. REPAIR -- Repair your damaged devices a little. + + 19. SCAN -- Display the galaxy with the default range set + to maximum (10 sectors in each direction from your + ship). + + 20. SET -- Set various input and output defaults. + DECWAR GAME INSTRUCTIONS Page 6 + + + 21. SHIELDS -- Transfer energy to or from your shields; + raise or lower your shields. + + 22. SRSCAN -- Display the galaxy with a default range of 7 + sectors (1 greater than the maximum warp factor). + + 23. STATUS -- List your ship's current status and supply + levels. + + 24. SUMMARY -- List various information on ships, bases, + and planets. + + 25. TARGETS -- List targets (enemies within range) and + their current locations. + + 26. TELL -- Send messages to other ships using the + sub-space radio. + + 27. TIME -- List information on run time and elapsed time. + + 28. TORPEDOES -- Fire photon torpedoes at a target. + + 29. TRACTOR -- Use tractor beam to tow friendly ships. + + 30. TYPE -- List current input, output, and game + characteristics. + + 31. USERS -- List the names and other information known + about the players currently in the game. + + + + DECWAR GAME INSTRUCTIONS Page 7 + + +General INPUT information + +- Only the first 5 characters of each input word are stored. + Any characters beyond that are ignored. +- Input words may be separated by spaces, tabs, or commas. +- The input line can be terminated with , , , , + , or ^Z. +- ^G toggles echo. At the beginning of each input line, echoing + is turned on. Typing ^G turns it off, the next ^G turns it + back on, etc. Echoing is always turned back on at the end of + an input line, or if ^U is typed. +- Multiple commands may be given on a single command line by + separating the commands with / (slash). If the TELL command + is given, it must be last on the line. +- Anything after ; (semicolon) is treated as a comment and is + ignored (but TELL rescans the line and takes the text after + the first ; as the message to send). +- (escape, or altmode) entered as the first character in + response to the command prompt (even before ^H, ^U, or ^R) + repeats the previous command. This is useful when building a + planet, docking, repairing, firing torpedoes, etc. Altmode + can't be used to repeat a TELL command. + +- Any ship name can be abbreviated to 1 character. +- Any command or keyword can be shortened to the shortest + unambiguous abbreviation, which is never more than 2 + characters. + +- Many commands require a coordinate as an argument (PHASERS, + TORPEDOES, CAPTURE, BUILD, etc.). The required coordinate(s) + can be specified in one of three ways: + Absolute - the default coordinate input type, which is simply + an absolute vertical position followed by an absolute + horizontal position. The coordinate may be preceded by the + keyword ABSOLUTE, but this isn't necessary unless the + default coordinate input type has been changed by SET ICDEF + RELATIVE. + Relative - the keyword RELATIVE, followed by a relative + vertical distance and a relative horizontal distance. A + positive distance is either up or right, and negative is + either down or left. The absolute coordinate is computed by + adding the relative distances to your current position. The + keyword RELATIVE isn't needed if the default coordinate + input type has been changed by SET ICDEF RELATIVE. + Computed - the keyword COMPUTED followed by a ship name. The + coordinate used is the location of the given ship. This + type of coordinate computation is available only to captains + controlling their ships through slow terminals (< 1200 + baud), and requires an operational computer. + The keyword ABSOLUTE, RELATIVE, or COMPUTED is only given one + time for each set of coordinates. For instance, the TORPEDO + command can accept up to 3 coordinates, but the keyword + describing the coordinate input type is given only once, and + all coordinates must be of the same type. + + + DECWAR GAME INSTRUCTIONS Page 8 + + +General OUTPUT information + +The SET OUTPUT LONG/MEDIUM/SHORT command controls the length of +text output throughout the game. In particular, Medium or Short +hit messages received during battle are greatly reduced in +length when compared to the Long format. Unfortunately, these +shorter forms are not as self-explanatory as the Long form. The +following are some equivalent Long, Medium and Short hit +messages: + +- Goblin @22-31, +83.6% makes 285.3 unit torpedo hit on + Vulcan displaced to 20-31, +72.1% + + G @22-31, +83.6% 285.3 unit T V -->20-31, +72.1% + + G 22-31 +83 285T V >20-31 +72 + + +- Emp planet(3) @15-16 makes 155.5 unit phaser hit on + Buzzard @15-17, 66.8% + + -@3 @15-16 155.5 unit P B @15-17, 66.8% + + -@3 15-16 155P B 15-17 +66 + + Note: The -@3 indicates an Empire planet built 3 times. + + +- Star @22-31 +4,+2 makes 301.2 unit hit on + Panther displaced to 20-31 +2,+2, -72.1% + + * @22-31 +4,+2 301.2 unit N P -->20-31 +2,+2, -72.1% + + * 22-31 +4,+2 301N P >20-31 +2,+2, -72 + + Note: The relative coordinates appear due to a SET OCDEF BOTH + command. The Panther's shields are 72.1% of max strength, but + down (-72.1%). + + +The Decwar PRE-GAME feature + +DECWAR provides a Pre-game feature to allow: +- New players to view the help file without entering the current + game. +- Experienced players to check the status of a current game + before choosing a side and ship. +- Players to submit Gripes without entering the game. + +The commands currently active within the Pre-game section are: +Activate Gripe Help News Points Quit +Summary Time Users + +The ACTIVATE command (valid only in the pre-game) is used to +exit the pre-game section and enter the normal ship setup stage. +The pre-game can be recognized from the 'PG>' command prompt. + DECWAR GAME INSTRUCTIONS Page 9 + + +Some general HINTS + +- When in doubt, use the on-line help system. See the help on + HELP for more information. +- If the output starts piling up in the middle of a battle, type + ^O (CTL-O). None of your commands will be executed until + output is finished, so it's sometimes better just to ignore + the hit messages so your attack or run commands can be + executed immediately. +- Use multiple commands per line (separate commands with /). + Once you're in a danger area, things can happen faster than + you can react to them. Plan your action ahead of time, before + you enter a danger area. +- If some unexpected action happens, such as an enemy finding + you, and you have several stacked commands (either from a + multiple command line or typing ahead), type ^C to abort all + stacked commands (especially if it involves time consuming + commands such as BUILD, or commands that generate a lot of + output, such as SCAN). You can then proceed to remedy the + situation by giving your unexpected visitor a good beating. +- If you're on a slow terminal, use computed coordinates, and + move around a lot if you're fighting someone on a fast + terminal. Computed coordinates are the primary advantage slow + terminals have over the fast ones (computed coordinates give + slow terminals a fantastic tactical advantage over fast + terminals when used properly). +- Use to repeat commands (see the help on ESCAPE). It's + just a convenience when building planets, etc., but in battle, + and combined with multiple commands per line and/or computed + coordinates (such as PH C B/M R 1 0 or TO 1 32 45), it can + make or break your career as a starship captain. +- Don't get within range of an enemy base, unless you enjoy + being pounded into rubble. You can kill a base just as well + from 1 sector outside it's range (use the WARNING keyword on + SCAN to see the range of an enemy base). +- Don't waste your energy and torpedoes firing at friendly ships + and bases. If you're not sure if it's friendly or not, type + HELP SCAN for a list of what's what. You can also use the + TARGETS command to see which enemies are lurking about (see + the help on TARGETS and LIST). +- Don't make it a habit of sitting next to stars; photon + torpedoes can turn them into novas, which are extremely + destructive. Conversely, if you notice an enemy ship or base + adjacent to a star, take advantage of the situation! +- One sure way to locate enemy ships is to watch for newly + captured enemy planets by using the PLANETS or LIST command. +- In general, don't waste photon torpedoes battering at a target + with 85-100% shields. The chances are good that they will + just be deflected harmlessly away. Use your phasers to weaken + the shields, then use torpedoes to finish him off. This is + especially true when attempting to destroy an enemy starbase. +- Use the SET command in DECWAR.INI to personalize the output to + your own tastes. That way you'll be guaranteed to have the + output set right each time you play a game. +- To always see the range and direction of any object listed (in + hit messages, output from the LIST command, etc.), SET OCDEF + BOTH. (The range is the magnitude of either delta v or delta + DECWAR GAME INSTRUCTIONS Page 10 + + + h, whichever is larger.) + + +Commands that take real time + +Many of the commands are designed to take a certain amount of +real time. This is done to help equalize the game when there +are different speed terminals and different speed typists in the +game. Some commands take a constant amount of time, and some +are based on the speed of the slowest terminal in the game. + +BUILD 5 to 7 seconds +CAPTURE 5 seconds + 1 second for each BUILD of enemy + planet +DOCK 2 to 4 seconds +IMPULSE 2 to 4 seconds +MOVE 2 to 4 seconds +REPAIR (0.08 * repair size) seconds (* 0.5 if docked) + +You have 2 phaser banks, each of which must be cooled off after +it's fired before it can be used again. Each phaser bank takes +3 to 6 seconds plus the amount of phaser damage / 100 to cool +off. For instance, if there was a 300 baud terminal in the +game, and your phasers had 200 units of damage, each of your +phaser banks would take 6 + 2 = 8 seconds to cool off after +being fired. Therefore, you could fire once every 4 seconds, or +twice every 8 seconds. + +After each burst of torpedoes the tubes must be reloaded before +being used again. It takes 2 to 4 seconds plus the amount of +torpedo tube damage / 100 to load a torpedo. For instance, if +there was a 300 baud terminal in the game, your torpedoes had +200 units of damage, and you had just fired 3 torpedoes, it +would take 3 * (4 + 2) = 18 seconds before you could fire +torpedoes again. + + +Use of ^C + +If you're in command input wait (DECWAR is waiting for you to +type a command), typing a ^C will abort the game and return you +to monitor mode. When you abort the game in this manner, your +ship is returned to the pool of available ships. You will be +able to continue unless a new player has taken your ship or +someone has moved into the spot you occupied. + +If you're not in a command input wait state when you type ^C, +any stacked commands (commands that you typed in ahead of time +that haven't been executed yet) will be aborted, and a series of +bells will be output. + +NOTE: A ship under RED alert conditions can not be returned to +the monitor level except by using the QUIT command. + DECWAR GAME INSTRUCTIONS Page 11 + + +List various BASE information + +Syntax: BAses [] + +List location and shield percent of friendly bases; location of +known enemy bases; or count of bases of either side within a +specified range or the entire galaxy. The default range is the +entire galaxy, and the default side is friendly bases only. See +the help for LIST for more information and the complete set of +keywords that can be used to modify BASES output. + +Examples: + +BA List location and shield percent of all friendly + bases. +BA ENEMY List location of all known enemy bases. +BA SUM Give summary of all friendly bases. +BA ALL SUM Give summary of all bases. +BA CL List the location and shield percent of the + closest friendly base. +BA 34 26 List the location and shield percent of friendly + base at 34-26 (it doesn't have to be friendly, + but you can't see the shield percent of an out + of range enemy base). + + +BUILD fortifications on a captured planet + +Syntax: BUild [Absolute|Relative] + +A fortified planet hits harder and is more resistant to +destruction by the enemy. A planet can normally be built up to +4 times. As your team's starbases are destroyed by enemy +action, a fifth build will complete the construction of a new +starbase on the planet. Only 10 starbases can be functional at +any one time. + +Examples: + +BU 32 12 Build the planet at sector 32-12. +BU A 32 12 Equivalent to "BU 32 12" +BU R 1 1 Build the planet at sector 32-12, if your + present location is 31-11. + + +CAPTURE a neutral or enemy planet + +Syntax: CApture [Absolute|Relative] + +At the start of the game, all planets are neutral (they fire at +everyone!). Once captured by either side, they fire only at +enemy ships, and can be DOCKed at to refuel and rearm, just like +a base (except a planet can only supply half the resources that +a base can). Enemy planets can also be captured. When +capturing an enemy planet, 1 second is added to the normal pause +time of 5 seconds for each BUILD present. Also, 50 units of +ship energy are lost for each build. + DECWAR GAME INSTRUCTIONS Page 12 + + +Examples: + +CA 12 32 Capture planet at 12-32. +CA A 12 32 Equivalent to "CA 12 32". +CA R 1 1 Capture planet at sector 12-32, if your present + location is 11-31. + + +DAMAGE report + +Syntax: DAmages [] + +List damaged ship devices and the amount of damage to each. The +condition of all or just selected devices may be examined. +Total ship damage is not reported. + +Examples: + +DA List all damaged devices and their current + damages. +DA SH T List damages for SHields and Torpedo tubes. +DA PH RA C List damages for PHasers, sub-space RAdio, and + Computer. + + +DOCK at a friendly base or planet + +Syntax: DOck [Status []] + +Refuel, repair, and rearm your ship, and set your ship's +condition to green. While docked, any repairs are accelerated, +and you have an "infinite" supply of torps. If you have no +damages and are completely refueled and rearmed, DOCKing will +have no effect on your ship. A STATUS command string can be +appended to a DOCK order. The following table lists the maximum +resources available per move when DOCKing at a base or planet: + +Resource Base Planet +---------------------------------------------- +Ship energy +1000 +500 +Shield energy +500 +250 +Photon Torpedoes +10 +5 +Life Support Reserves +5 +5 +Ship Damage -100 -50 +Ship Damage, if already docked -200 -100 + +Examples: + +DO Dock, no status report. +DO ST Dock, show ship's status AFTER docking. +DO ST SH T Dock, show ship's shield strength and number of + torpedos on board AFTER docking. + + +Transfer ENERGY to a friendly ship + +Syntax: Energy + DECWAR GAME INSTRUCTIONS Page 13 + + +The receiving ship must be located in an adjacent sector. 10% +of the energy transferred will be lost due to broadcast +dissipation. If you attempt to send more energy than the other +ship can store (ie 5000 units), the transfer will automatically +be reduced to the maximum possible. + +Example: + +E I 1000 Transfer 1000 units of energy to the Intrepid. + The Intrepid will receive 900 units of energy. + + +Submit a GRIPE + +Syntax: Gripe + +Add a comment, bug report, suggestion, etc. to the top of file +GAM:DECWAR.GRP. Type in your comments, then ^Z (CTL-Z) to exit +and continue the game, or ^C (CTL-C) to abort and not send the +gripe. Each gripe is preceded with a header that includes the +version number, date, time, ship name, user name, TTY speed, +PPN, TTY number, job number, and whether or not Romulans and/or +black holes are included in the game. Unless you are currently +under red alert, GRIPE will protect you from enemy attack. To +view gripes not yet acted upon, type the file GAM:DECWAR.GRP. +To view answered gripes, and see what action was taken on them, +type the file GAM:DECWAR.FXD. + + +Give HELP + +Syntax: Help [*|] + +Give general help info, a list of available commands, or a +detailed description of a particular command or keyword. Unless +you are under red alert, HELP will protect you from enemy +attack. The following conventions are used in the detailed +descriptions: +- The first line contains, in all caps, the keyword that help is + being given for. +- The syntax line (second line) lists the portion of the keyword + required to make it unique in caps, and the remainder of the + keyword in lower case, followed by any parameters (if the + keyword is a command). +- A quantity to be filled in is lower case and enclosed in <> + (angle brackets). +- Optional parameters are enclosed in [] (square brackets). +- A choice (either or) is indicated by | (vertical bar). +- Any parameter that must be typed in literally is started in + capital letters and continued in lower case. The upper case + letters signal the shortest unambiguous abbreviation (the + shortest abbreviation may change slightly, depending on + context). + +Examples: + +H Give general help info. + DECWAR GAME INSTRUCTIONS Page 14 + + +H * List all available commands. +H H List this block of text. +H SH Give help for the SHIELDS command. +H HI G Give some general HINTS and a description of the + GRIPE command. + + +Move using IMPULSE engines + +Syntax: Impulse [Absolute|Relative] + +Move one sector vertically, horizontally, or diagonally +(equivalent to warp factor 1). Ship condition changes to green. + +Examples: + +I 37 45 Move to sector 37-45. +I A 37 45 Equivalent to "I 37 45". +I R 1 -1 Move to sector 37-45, if your ship's present + location is 36-46. + + +LIST ship, base, and planet info + +Syntax: List [] + +The following information is available via the LIST command: +- Name of any ship currently in the game (including the + Romulan). +- Location and shield percent of any friendly ship, or any ship + within scan range (10 sectors). +- Location and shield percent of any friendly base, or any base + within range. +- Location of any known enemy base (any base that has previously + been SCANned or LISTed by anyone on your team). +- Location and number of builds of any known planet, or any + planet within range. +The above information is also available, in whole or in part, +through the SUMMARY, BASES, PLANETS, and TARGETS commands. Each +command has it's own default range, side (Federation, Empire, +Romulan, Neutral), and object (ship, base, planet). LIST (and +SUMMARY) include everything (infinite range, all sides, all +objects) by default. On output, enemy objects are flagged with +* (star) in column 1 unless the command is TARGETS. + +Keywords used with BASES, PLANETS, TARGETS, LIST, and SUMMARY +(not all keywords are legal for all commands): + +ship names Include only specified ships (several ship names + may be given, including Romulan). +vpos hpos List only the object at the location vpos-hpos. +CLosest List only the closest of the specified objects. + +SHips Include only ships (Federation, Empire, or + Romulan). +BAses Include only bases (Federation or Empire). +PLanets Include only planets (Federation, Empire, or + DECWAR GAME INSTRUCTIONS Page 15 + + + Neutral). +POrts Include only bases and planets. If no side is + specified (Federation, Empire, Neutral, or + Captured), include only friendly ports. + +FEderation Include only Federation forces. +HUman Same as Federation. +EMpire Include only Empire forces. +Klingon Same as Empire. +FRiendly Include only friendly forces (Federation or + Empire). +ENemy Include only enemy forces (Empire or Federation + and Romulan). +TArgets Same as enemy. +NEutral Include only neutral planets. +CAptured Include only captured planets (Federation or + Empire). + +n Include only objects within n sectors. +ALl Include all sides unless a side is explicitly + given. Extend the range to infinity unless a + range is explicitly given. + +LIst List individual items. Turn off summary unless + command is SUMMARY or the keyword SUMMARY is + specified. +SUmmary List summary of all selected items. Turn off + list unless command is LIST or the keyword LIST + is specified. Extend the range to infinity + unless a range is explicitly given. + +And Used to separate groups of keywords. +& Same as AND. + +Examples: + +LIST List all information available on all ships, + bases, and planets. +LIST SUM List all available info plus a summary of the + number of each object in game. +LI EN BA List the location of all known enemy bases. +LI SH List all available info on all ships in the + game. +LI CL PO List closest friendly base or friendly or + neutral planet. +LI 1 3 & 9 5 List the objects at locations 1-3 and 9-5. + + +MOVE using warp drive + +Syntax: Move [Absolute|Relative|Computed] + +Maximum speed is warp factor 6, which will move you 6 sectors +per turn. Maximum SAFE speed is warp factor 4; warp factors 5 +and 6 risk potential warp engine damage. Energy consumption per +move is proportional to the square of the warp factor. If the +ship's shields are up during this movement, the energy + DECWAR GAME INSTRUCTIONS Page 16 + + +consumption is doubled. Moving changes your ship's condition to +green. + +Examples: + +M 37 45 Move to sector 37-45. +M A 37 45 Equivalent to "M 37 45". +M R 4 -5 Move to sector 37-45, if your present location + is 33-50 (move up 4 sectors and left 5 sectors). +M C W "Ram" the Wolf. No actual collision occurs, but + your ship ends up adjacent to the Wolf's current + position. + + +Display the NEWS file + +Syntax: NEws + +Display the file which contains information on any new features, +enhancements, bug fixes, etc for each version of DECWAR. + + +Fire PHASERS at an enemy ship, base, or planet + +Syntax: PHasers [Absolute|Relative|Computed] [energy] + + +Phasers must be directed at a specific target, and only one +target may be specified per command. Obstacles seemingly in the +path of the phaser blast are unaffected, since the energy ray is +not a line-of- sight weapon. The size of the hit is inversely +proportional to the distance from the target. Maximum range is +10 sectors vertically, horizontally, or diagonally. Each phaser +blast consumes 200 units of ship energy, unless a specific +amount of energy is given (the specified energy must be between +50 and 500 units, inclusive). The phaser banks have roughly a +5% chance of damage with a default (200 unit) blast, with the +probability of damage reaching nearly 65% with a maximum (500 +unit) blast. The severity of the resulting damage is also +dependant on the size of the blast. Also, if your ship's +shields are up, a high-speed shield control is used to quickly +lower and then restore the shields during the fire. This +procedure consumes another 200 units of ship energy. The +weapons officer on board your ship will cancel all phaser blasts +directed against friendly ships, bases, or planets. Firing +phasers (or getting hit by phasers) puts you on red alert. +NOTE: Although phasers can damage enemy planetary installations +(BUILDs), they can NOT destroy the planet itself. + +Examples: + +PH 12 32 Phaser target at sector 12-32. +PH A 12 32 Equivalent to "PH 12 32". +PH R 2 -3 Phaser target at sector 12-32, if your location + is 10-35. +PH C BUZZARD Phaser the Buzzard (if in range). +PH C B Same as PH C BUZZARD (ship names can be + DECWAR GAME INSTRUCTIONS Page 17 + + + abbreviated to 1 character). +PH 300 12 32 Phaser target at sector 12-32, using 300 units + of energy. + + +List various PLANET information + +Syntax: PLanets [] + +List location and number of builds for all known planets, and a +summary of planets within a specified range or the entire +galaxy. The default range is 10 sectors, and the default side +is every side. See the help for LIST for more information and +the complete set of keywords that can be used to modify PLANETS +output. + +Examples: + +PL List all planets within 10 sectors. +PL SUM Give summary of all planets in game. +PL ALL NEU List all known neutral planets. +PL ALL CAP List all known captured planets. +PL ALL 20 List all known planets within a radius of 20 + sectors. + + +List POINTS scored so far this game + +Syntax: POints +[Me|I|Federation|Human|Empire|Klingon|Romulan|All] + +Itemize the current point breakdown. Information can be +obtained concerning the points scored by your individual ship, +your team, the opposition, the romulans, or any combination of +the above. If the Romulan Empire is not involved in the game, +the ROMULAN keyword will be ignored. + +Categories in POINTS breakdown: +- Damage to enemies. +- Enemies destroyed (500 points each). +- Damage to bases. +- Planets captured (100 points each). +- Bases built (1000 points each). +- Romulans damaged/destroyed. +- Stars destroyed (-50 points each). +- Planets destroyed (-100 points each). + +- Total points scored. +- Total number of ships commissioned. +- Total score / number of players. +- Total score / stardates. + +Examples: + +PO List points for your ship. +PO ME Equivalent to "PO". +PO KLI FED List the score of the two teams. + DECWAR GAME INSTRUCTIONS Page 18 + + +PO ALL List all the scoring information available. + + +QUIT the game + +Syntax: Quit + +Quit the game before normal end of execution and return to the +monitor. Your ship is released for use by another player, +you're chalked up as just one more casualty, and you can't +CONTINUE the game. If you want to rejoin the game, you'll have +to wait 2 minutes, and then either START or RUN the game. If +you want to exit the game temporarily (to answer SENDS, etc.), +type ^C (CTL-C), and you'll usually be able to CONTINUE. NOTE: +If you're under red alert, you won't be able to ^C out of the +game; you'll have to use the QUIT command. + + +Turn sub-space RADIO on or off, or +set to ignore or restore communications from individual ships + +Syntax: RAdio ON|OFf or RAdio Gag|Ungag + +Turn your ship's sub-space radio on or off, thus controlling +whether or not you'll receive any messages from other ships or +your bases; or suppress or restore messages originating from +specific ships. + +Examples: + +RA ON Turn sub-space radio ON. +RA OFF Turn sub-space radio OFF. +RA G L Suppress all radio messages sent by the + Lexington. +RA U W Allow radio messages sent by the Wolf to be + received. + + +REPAIR device damage + +Syntax: REpair [] + +Repair damaged ship devices. If a ship suffers a critical hit +to a device, REPAIR can be used to restore the device to full +(or partial) working order. A REPAIR removes the specified +units of damage from each damaged device, in addition to the +normal repair rate of 30 units per turn. If the ship is DOCKED, +the pause time for the specified REPAIR is reduced by half of +that needed while in flight. If the repair size is not +specified, REPAIR defaults to a 4 second repair (50 units + 50 +more if docked). REPAIR does NOT reduce the SHIP damage. + +Examples: + +RE 100 Remove up to 100 units of device damage. +RE Same as "RE 100" if DOCKED, else same as "RE + 50". + DECWAR GAME INSTRUCTIONS Page 19 + + +Full range SCAN + +Syntax: SCan [Up|Down|Right|Left|Corner] [|
] [W] + +Display a selected portion of the nearby universe. If no range +is specified, SCAN defaults to a square scan range of ten +sectors from the present ship location. The keywords UP, DOWN, +RIGHT, LEFT, and CORNER modify this to include only the part of +this original square specified (relative to the ship). The +maximum scan range is 10 sectors, and larger specified ranges +are reduced to this value. If individual vertical and +horizontal ranges are specified, the scanning field will be +shaped accordingly. The WARNING keyword if added to the end of +a SCAN command string will flag the empty sectors within range +of an enemy base or planet with !'s instead of . 's. The SCAN +symbols and their meanings are: + +L, N, S, V, Y Federation warships +C, D, H, J, W Empire warships + ?? Romulan warship + <> Federation starbase + )( Empire starbase + @ Neutral planet + @F Federation planet + @E Empire planet + * Star + Black hole + . Empty sector + ! Empty sector within range of enemy port (only + when using WARNING keyword) + +Examples: + + SC Scan universe within a radius 10 sectors. + SC 10 Equivalent to "SC". + SC 13 Equivalent to "SC 10" or "SC". + SC 4 Scan universe within 4 sectors. + SC 4 4 Equivalent to "SC 4". + SC 2 8 Scan up to 5 rows and 17 columns, centered on + the present ship location. + SC U 4 7 Show only upper half of normal "SC 4 7" scan. + SC C -5 -5 Scan the region bounded by the present ship + location and the location (-5,-5) sectors away + (puts ship in upper right corner of the scan). + SC W Same as "SC", plus shows danger zones around + enemy bases and planets. + + +SET input and output parameters + +Syntax: SEt + +Keyword Value Description +------- ----- ----------- +Name name Change name (shows in USERS). +Output Long Default. Use longest output format. + Medium Use medium output format. + DECWAR GAME INSTRUCTIONS Page 20 + + + Short Use short (cryptic) output format. +Scan Long Default. Use long format scans. + Short Use 1 character symbols instead of 2. +Prompt Normal Default. Use "COMMAND: " prompt. + Informative Use "> " for prompt. Precede the ">" with: + S if shields are down or < 10%. + E if ship energy < 1000 (yellow alert). + D if ship damage > 2000. + nL if life support is critically damaged (n + stardates of reserves). Ttytype CRT, ADM-3a, + ADM-2, SOROC, BEEHIVE, ACT-IV, ACT-V Doesn't do + anything yet. +OCdef Absolute Default. Display all coordinates in absolute + format (vpos-hpos). + Relative Display coordinates relative to your location + (dv,dh). + Both Display coordinates in both absolute and + relative form. +Icdef Absolute Default. All input coordinates default to + absolute. + Relative Input coordinates default to relative. + +Examples: + +SE PR I Switch to informative prompt. +SE OU S Set output format to short. +SE N THOR Change your name in USERS to THOR. + + +SHIELD control + +Syntax: SHields Up|Down or SHields Transfer + +Raise or lower ship shields, or transfer energy between ship and +shield energy reserves. Raising shields consumes 100 units of +ship energy, lowering them or transfering energy is "free". +NOTE: Shield condition is displayed as +n% for shields up, n% +of full strength, or -n%, for shields down, n% of full strength. + +Examples: + +SH U Raise shields. +SH D Lower shields. +SH T 500 Transfer 500 units of energy TO shields +SH T -500 Transfer 500 units of energy FROM shields + + +Short Range SCAN + +Syntax: SRscan [Up|Down|Right|Left|Corner] [|
] +[W] + +Equivalent to SCAN, but with a default scan range of 7 sectors. +For complete information on sensor scans, see the help on SCAN. + + +Show ship STATUS + DECWAR GAME INSTRUCTIONS Page 21 + + +Syntax: +STatus +[Condition|Location|Torpedoes|Energy|Damage|Shields|Radio] + +Show the current stardate, plus the status of any of the ship +attributes: ship condition, location, number of torps, ship +energy, ship damage, shield energy, and radio condition. Ship +condition can be green, yellow (low on energy), or red (in +battle). Radio condition is either on or off. + +Examples: + +ST Give full status report. +ST T Report how many torpedos remain on board. +ST E D SH Report the ship energy, the ship damage, and the + shield condition (energy, %, up/down). +ST L Report the current ship location. + + +Give SUMMARY on number of ships, bases, and planets + +Syntax: SUmmary [] + +Give any of the information available from the LIST command, but +give only a summary by default. See the help on LIST for more +information and the complete set of keywords that can be used to +modify SUMMARY output. + +Examples: + +SUM Tell how many ships, bases, and planets are in + the game (broken down into friendly, enemy, and + neutral categories). +SUM EN Tell how many enemies are in the game (number of + Romulans, enemy ships, enemy bases, and enemy + planets). + +List information on TARGETS + +Syntax: TArgets [] + +Primarily for locating targets during battle, when a SCAN would +be too time consuming. List location and shield percent of any +enemy ship, base, or planet in range; name of any enemy ship in +game (including the Romulan); or location and number of builds +of any known enemy planet. TARGETS is equivalent to a LIST +command with a default range of 10 sectors and a default side of +enemy. + +Examples: + +TA List all targets within 10 sectors. +TA 10 Equivalent to "TA". +TA 5 List all targets within 5 sectors. + + +TELL another ship something using the sub-space radio + DECWAR GAME INSTRUCTIONS Page 22 + + +Syntax: TEll +All|FEderation|HUman|EMpire|Klingon|ENemy|FRiendly| ; + +Send messages to one or several of the players currently in the +game, with no range limitation. Players who have turned their +radios off, or have a critically damaged sub-space radio can not +be sent to. The TELL command can not be repeated using the +ESCAPE key (no junk mail!). + +Examples: + +TE V;Hello! Send "Hello!" to the Vulcan. +TE KL;DROP DEAD Send "DROP DEAD" to all Klingons. +TE V,E;HELP ME Send "HELP ME" to the Vulcan and Excalibur. + + +List various TIMEs + +Syntax: TIme + +List time since game started; time since your ship entered the +game; run time for your job so far this game; total run time +since login; and current time of day. + + +Fire photon TORPEDO burst + +Syntax: +TOrpedo [Absolute|Relative|Computed] n

[

+[

]] + +A photon torpedo is aimed along a path in physical space, thus +any object lying along its path will intercept the torpedo. +One, two, or three torpedoes may be fired with one command, and +the torpedoes may be individually targeted, or fired at a common +location. The minimum range of a torpedo is 8 sectors, but some +will travel 10 sectors before self-destructing. Torpedoes may +be deflected from the desired track by a number of different +factors, including your ship's shield strength, computer and +torpedo tube damage, and torpedo misfires. A torpedo misfire +also aborts the remainder of the burst, and sometimes damages +the torpedo tubes as well. Torpedoes can cause stars to go +nova, and can also destroy planets (if no enemy installations +remain intact). "Accidental" hits on friendly ships, bases, or +planets are automatically neutralized. A torpedo burst uses no +ship energy. Firing torpedoes (or getting hit by one) puts you +on red alert. + +Examples: + +TO 1 12 24 Fire one torpedo at sector 12-24. +TO 3 12 24 Fire three torpedoes at sector 12-24. +TO 3 6 7 8 7 9 12 Fire one torpedo at sector 6-7, one at 8-7, + and one at 9-12. +TO 3 12 24 13 39 Fire one torpedo at sector 12-24, and two at + sector 13-39. + DECWAR GAME INSTRUCTIONS Page 23 + + +TO A 3 12 24 Equivalent to "TO 3 12 24". +TO R 2 2 -5 Fire two torpedoes at sector 22-25, assuming + your location is 20-30. +TO C 3 BUZZARD Fire three torpedoes at the Buzzard. +TO C 1 E Fire one torpedo at the Excalibur. + + +TRACTOR beam + +Syntax: TRactor or TRactor Off + +Tow another ship of the same team. The two ships must be +located in adjacent sectors and both ships must have their +shields lowered. Once such a beam is applied, either ship can +pull the other behind it using warp or impulse engines. Energy +consumption for the towing ship is 3 times the normal rate for +movement with the shields down. The ship being towed will end +the move trailing the lead ship. If either ship raises +deflector shields, the tractor beam is automatically cut. The +tractor beam will also be broken if either ship is hit by a +torpedo or damaged by a nova. + +Examples: + +TR Break any existing tractor beam. +TR OFF Equivalent to "TR". +TR B Apply tractor beam to the Buzzard. + + +TYPE game, input, and output settings + +Syntax: TYpe OPtion|OUtput + +Type the current game OPTION and OUTPUT settings. +The OPTION settings are: +- The version number and date of implementation, +- Whether there are Romulans in the game, +- and whether there are Black Holes in the game. +The OUTPUT settings are: +- SHORT, MEDIUM, or LONG output, +- NORMAL or INFORMATIVE command prompt, +- SHORT or LONG sensor scans, +- ABSOLUTE or RELATIVE default for coordinate input, +- ABSOLUTE, RELATIVE, or BOTH for coordinate output, +- and the current TTYTYPE. + +Examples: + +TY OP List the option settings. +TY OU List the output settings. + + +List USERS + +Syntax: Users + +List all ships currently in the game. Include ship name, + DECWAR GAME INSTRUCTIONS Page 24 + + +captain (may be changed by SET NAME), TTY speed, PPN, TTY +number, and job number. If the output format is set to medium +or short, omit the TTY and job numbers. If the output format is +set to short, omit the TTY speed and PPN (include only the ship +name and captain). + INDEX Page 25 + + +BASES . . . . . . . . . . . . . 11 +BUILD . . . . . . . . . . . . . 11 + +CAPTURE . . . . . . . . . . . . 11 +CTL-C . . . . . . . . . . . . . 10 + +DAMAGES . . . . . . . . . . . . 12 +DOCK . . . . . . . . . . . . . . 12 + +ENERGY . . . . . . . . . . . . . 12 + +GRIPE . . . . . . . . . . . . . 13 + +HELP . . . . . . . . . . . . . . 13 +HINTS . . . . . . . . . . . . . 9 + +IMPULSE . . . . . . . . . . . . 14 +INPUT . . . . . . . . . . . . . 7 +INTRODUCTION . . . . . . . . . . 1 + +LIST . . . . . . . . . . . . . . 14 + +MOVE . . . . . . . . . . . . . . 15 + +NEWS . . . . . . . . . . . . . . 16 + +OUTPUT . . . . . . . . . . . . . 8 + +PAUSES . . . . . . . . . . . . . 10 +PHASERS . . . . . . . . . . . . 16 +PLANETS . . . . . . . . . . . . 17 +POINTS . . . . . . . . . . . . . 17 +PREGAME . . . . . . . . . . . . 8 + +QUIT . . . . . . . . . . . . . . 18 + +RADIO . . . . . . . . . . . . . 18 +REPAIR . . . . . . . . . . . . . 18 + +SCAN . . . . . . . . . . . . . . 19 +SET . . . . . . . . . . . . . . 19 +SHIELDS . . . . . . . . . . . . 20 +SRSCAN . . . . . . . . . . . . . 20 +STATUS . . . . . . . . . . . . . 20 +SUMMARY . . . . . . . . . . . . 21 +SYMBOLS USED . . . . . . . . . . 19 + +TARGETS . . . . . . . . . . . . 21 +TELL . . . . . . . . . . . . . . 21 +TIME . . . . . . . . . . . . . . 22 +TORPEDOES . . . . . . . . . . . 22 +TRACTOR . . . . . . . . . . . . 23 +TYPE . . . . . . . . . . . . . . 23 + +USERS . . . . . . . . . . . . . 23 + diff --git a/pdp10/compuserve/docs/DECWAR.LTR b/pdp10/compuserve/docs/DECWAR.LTR new file mode 100644 index 0000000..1f2d7b4 --- /dev/null +++ b/pdp10/compuserve/docs/DECWAR.LTR @@ -0,0 +1,60 @@ + + + + + +I have received your request for sources to the DECWAR program. +We will be pleased to send you the sources, but first we must +ask you to sign and return the enclosed license agreement. +DECWAR was developed at the University of Texas at Austin, and +it is being maintained. Hence our interest in using the +agreement to record and control who gets the source to it. + +DECWAR is a sophisticated real-time space battle game designed +to be played by from 1 to 18 people. It was written at the +University of Texas at Austin, primarily by Jeff Potter and Bob +Hysick. The game was originally based on a very limited, single +job, single terminal, two player Star Trek type game known as +WAR. This game came from the CDC-6600/6400 system at the +University of Texas at Austin, author unknown. Robert Schneider +re-wrote the original source on the CDC and started the transfer +to the DEC-10. In the transfer process, the game was renamed to +DECWAR, largely re-designed, and almost entirely re-written, so +that the current version bears little resemblance to the +original. Almost all the commands were added once the game was +on the DEC-10, as well as the basic concept of separate jobs +controlling each ship, and most of the other features that make +the game challenging, exciting, and enjoyable. The first +version was installed on the DEC-10 in August 1978. After +several revisions, a greatly enhanced and improved game, version +2.0, was installed in July 1979. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pdp10/compuserve/docs/DECWAR.MAP b/pdp10/compuserve/docs/DECWAR.MAP new file mode 100644 index 0000000..3fe6aa7 --- /dev/null +++ b/pdp10/compuserve/docs/DECWAR.MAP @@ -0,0 +1,1668 @@ + LINK symbol map of DECWAR /KI version (20) page 1 + Produced by LINK version 4A(1227) on 19-May-82 at 12:24:46 + + Low segment starts at 0 ends at 12426 length 12427 = 11P + High segment starts at 400000 ends at 470676 length 70677 = 57P + 233 words free in Low segment, 65 words free in high segment + 636 Global symbols loaded, therefore min. hash size is 707 + Start address is 406157, located in program DECWAR + + ************* + +JOBDAT-INITIAL-SYMBOLS + + Zero length module + + ************* + +LOW from DSK:LOW.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:20:00 + Low segment starts at 140 ends at 650 length 511 (octal), 329. (decimal) + High segment starts at 651 ends at 652 length 2 (octal), 2. (decimal) + + LOWSEG 140 Common length 128. LOCAL 340 Common length 200. + LOW 652 Entry Relocatable + + ************* + +HIGH from DSK:HIGH.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:20:00 + Low segment starts at 400010 ends at 406154 length 6145 (octal), 3173. (decimal) + High segment starts at 406155 ends at 406156 length 2 (octal), 2. (decimal) + + HISEG 400010 Common length 2922. TIMERS 405562 Common length 250. + HIGH 406156 Entry Relocatable + + ************* + +DECWAR from DSK:DECWAR.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:14:00 + Low segment starts at 653 ends at 1343 length 471 (octal), 313. (decimal) + High segment starts at 406157 ends at 407337 length 1161 (octal), 625. (decimal) + + POLOCL 653 Common length 9. MAIN. 406157 Global Relocatable + + ************* + +.BLOCK from DSK:BLKDAT.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:14:00 + Low segment starts at 1344 ends at 1346 length 3 (octal), 3. (decimal) + + + ************* + +BASBLD from DSK:BASBLD.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:14:00 + Low segment starts at 1347 ends at 1361 length 13 (octal), 11. (decimal) + High segment starts at 407340 ends at 407416 length 57 (octal), 47. (decimal) + + BASBLD 407341 Entry Relocatable + + ************* + LINK symbol map of DECWAR /KI version (20) page 2 + + +BASKIL from DSK:BASKIL.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:15:00 + Low segment starts at 1362 ends at 1401 length 20 (octal), 16. (decimal) + High segment starts at 407417 ends at 407567 length 151 (octal), 105. (decimal) + + BASKIL 407420 Entry Relocatable + + ************* + +BASPHA from DSK:BASPHA.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:15:00 + Low segment starts at 1402 ends at 1427 length 26 (octal), 22. (decimal) + High segment starts at 407570 ends at 410211 length 422 (octal), 274. (decimal) + + BASPHA 407571 Entry Relocatable + + ************* + +BUILD from DSK:BUILD.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:15:00 + Low segment starts at 1430 ends at 1476 length 47 (octal), 39. (decimal) + High segment starts at 410212 ends at 410707 length 476 (octal), 318. (decimal) + + BUILD 410213 Entry Relocatable + + ************* + +CAPTUR from DSK:CAPTUR.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:15:00 + Low segment starts at 1477 ends at 1540 length 42 (octal), 34. (decimal) + High segment starts at 410710 ends at 411551 length 642 (octal), 418. (decimal) + + CAPTUR 410711 Entry Relocatable + + ************* + +CHECK from DSK:CHECK.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:15:00 + Low segment starts at 1541 ends at 1574 length 34 (octal), 28. (decimal) + High segment starts at 411552 ends at 412074 length 323 (octal), 211. (decimal) + + CHKOUT 1541 Common length 7. CHECK 411553 Entry Relocatable + + ************* + +CHKPNT from DSK:CHKPNT.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:15:00 + Low segment starts at 1575 ends at 1601 length 5 (octal), 5. (decimal) + High segment starts at 412075 ends at 412135 length 41 (octal), 33. (decimal) + + CHKPNT 412076 Entry Relocatable + + ************* + +CLRBUF from DSK:CLRBUF.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:15:00 + Low segment starts at 1602 ends at 1605 length 4 (octal), 4. (decimal) + High segment starts at 412136 ends at 412152 length 15 (octal), 13. (decimal) + + CLRBUF 412137 Entry Relocatable + LINK symbol map of DECWAR /KI version (20) page 3 +CLRBUF + + ************* + +DAMAGE from DSK:DAMAGE.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:15:00 + Low segment starts at 1606 ends at 1631 length 24 (octal), 20. (decimal) + High segment starts at 412153 ends at 412453 length 301 (octal), 193. (decimal) + + DAMAGE 412154 Entry Relocatable + + ************* + +DIST from DSK:DIST.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:15:00 + Low segment starts at 1632 ends at 1700 length 47 (octal), 39. (decimal) + High segment starts at 412454 ends at 413010 length 335 (octal), 221. (decimal) + + DISTLC 1632 Common length 16. DIST 412455 Entry Relocatable + + ************* + +DOCK from DSK:DOCK.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:15:00 + Low segment starts at 1701 ends at 1722 length 22 (octal), 18. (decimal) + High segment starts at 413011 ends at 413304 length 274 (octal), 188. (decimal) + + DOCK 413012 Entry Relocatable + + ************* + +DSHIP from DSK:DSHIP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:16:00 + Low segment starts at 1723 ends at 1727 length 5 (octal), 5. (decimal) + High segment starts at 413305 ends at 413331 length 25 (octal), 21. (decimal) + + DSHIP 413306 Entry Relocatable + + ************* + +ENDGAM from DSK:ENDGAM.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:16:00 + Low segment starts at 1730 ends at 1746 length 17 (octal), 15. (decimal) + High segment starts at 413332 ends at 413561 length 230 (octal), 152. (decimal) + + ENDGAM 413333 Entry Relocatable + + ************* + +ENERGY from DSK:ENERGY.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:16:00 + Low segment starts at 1747 ends at 1776 length 30 (octal), 24. (decimal) + High segment starts at 413562 ends at 414075 length 314 (octal), 204. (decimal) + + ENERGY 413563 Entry Relocatable + + ************* + + LINK symbol map of DECWAR /KI version (20) page 4 + + +FREE from DSK:FREE.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:16:00 + Low segment starts at 1777 ends at 2106 length 110 (octal), 72. (decimal) + High segment starts at 414076 ends at 414527 length 432 (octal), 282. (decimal) + + FRLOCL 1777 Common length 45. FREE 414077 Entry Relocatable + RSTART 414315 Entry Relocatable + + ************* + +GETCMD from DSK:GETCMD.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:16:00 + Low segment starts at 2107 ends at 2145 length 37 (octal), 31. (decimal) + High segment starts at 414530 ends at 415133 length 404 (octal), 260. (decimal) + + GETCMD 414531 Entry Relocatable + + ************* + +JUMP from DSK:JUMP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:16:00 + Low segment starts at 2146 ends at 2160 length 13 (octal), 11. (decimal) + High segment starts at 415134 ends at 415372 length 237 (octal), 159. (decimal) + + JUMP 415135 Entry Relocatable + + ************* + +KQSRCH from DSK:KQSRCH.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:16:00 + Low segment starts at 2161 ends at 2171 length 11 (octal), 9. (decimal) + High segment starts at 415373 ends at 415437 length 45 (octal), 37. (decimal) + + KQSRCH 415374 Entry Relocatable + + ************* + +LIST from DSK:LIST.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:16:00 + Low segment starts at 2172 ends at 2177 length 6 (octal), 6. (decimal) + High segment starts at 415440 ends at 415607 length 150 (octal), 104. (decimal) + + LIST 415441 Entry Relocatable SUMMAR 415453 Entry Relocatable + BASES 415466 Entry Relocatable PLANET 415501 Entry Relocatable + TARGET 415514 Entry Relocatable + + ************* + +LOCATE from DSK:LOCATE.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 12:13:00 + Low segment starts at 2200 ends at 2252 length 53 (octal), 43. (decimal) + High segment starts at 415610 ends at 416477 length 670 (octal), 440. (decimal) + + LOCATE 415611 Entry Relocatable RELOC 415657 Entry Relocatable + + ************* + + LINK symbol map of DECWAR /KI version (20) page 5 + + +LSTSCN from DSK:LSTSCN.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:16:00 + Low segment starts at 2253 ends at 2352 length 100 (octal), 64. (decimal) + High segment starts at 416500 ends at 417534 length 1035 (octal), 541. (decimal) + + LSTSCN 416501 Entry Relocatable + + ************* + +LSTFLG from DSK:LSTFLG.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:17:00 + Low segment starts at 2353 ends at 2410 length 36 (octal), 30. (decimal) + High segment starts at 417535 ends at 420777 length 1243 (octal), 675. (decimal) + + LSTFLG 417536 Entry Relocatable + + ************* + +LSTUPD from DSK:LSTUPD.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:17:00 + Low segment starts at 2411 ends at 2417 length 7 (octal), 7. (decimal) + High segment starts at 421000 ends at 421125 length 126 (octal), 86. (decimal) + + LSTUPD 421001 Entry Relocatable + + ************* + +LSTOUT from DSK:LSTOUT.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:17:00 + Low segment starts at 2420 ends at 2443 length 24 (octal), 20. (decimal) + High segment starts at 421126 ends at 421566 length 441 (octal), 289. (decimal) + + LSTOUT 421127 Entry Relocatable + + ************* + +LSTSUM from DSK:LSTSUM.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:17:00 + Low segment starts at 2444 ends at 2455 length 12 (octal), 10. (decimal) + High segment starts at 421567 ends at 421700 length 112 (octal), 74. (decimal) + + LSTSUM 421570 Entry Relocatable + + ************* + +LSTOBJ from DSK:LSTOBJ.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:17:00 + Low segment starts at 2456 ends at 2510 length 33 (octal), 27. (decimal) + High segment starts at 421701 ends at 422176 length 276 (octal), 190. (decimal) + + LSTOBJ 421702 Entry Relocatable + + ************* + +MOVE from DSK:MOVE.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:17:00 + Low segment starts at 2511 ends at 2545 length 35 (octal), 29. (decimal) + High segment starts at 422177 ends at 423137 length 741 (octal), 481. (decimal) + + MOVE 422200 Entry Relocatable IMPULS 422227 Entry Relocatable + LINK symbol map of DECWAR /KI version (20) page 6 +MOVE + + ************* + +NOVA from DSK:NOVA.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:17:00 + Low segment starts at 2546 ends at 2572 length 25 (octal), 21. (decimal) + High segment starts at 423140 ends at 424222 length 1063 (octal), 563. (decimal) + + NOVA 423141 Entry Relocatable + + ************* + +OUTHIT from DSK:OUTHIT.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:17:00 + Low segment starts at 2573 ends at 2661 length 67 (octal), 55. (decimal) + High segment starts at 424223 ends at 425560 length 1336 (octal), 734. (decimal) + + OUTHIT 424224 Entry Relocatable + + ************* + +OUTMSG from DSK:OUTMSG.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:17:00 + Low segment starts at 2662 ends at 2712 length 31 (octal), 25. (decimal) + High segment starts at 425561 ends at 425663 length 103 (octal), 67. (decimal) + + OMLOCL 2662 Common length 16. OUTMSG 425562 Entry Relocatable + + ************* + +PASWRD from DSK:PASWRD.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:18:00 + Low segment starts at 2713 ends at 2720 length 6 (octal), 6. (decimal) + High segment starts at 425664 ends at 425742 length 57 (octal), 47. (decimal) + + PASWRD 425665 Entry Relocatable + + ************* + +PHACON from DSK:PHACON.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:18:00 + Low segment starts at 2721 ends at 2744 length 24 (octal), 20. (decimal) + High segment starts at 425743 ends at 426735 length 773 (octal), 507. (decimal) + + PHACON 425744 Entry Relocatable + + ************* + +PLACE from DSK:PLACE.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:18:00 + Low segment starts at 2745 ends at 2767 length 23 (octal), 19. (decimal) + High segment starts at 426736 ends at 427116 length 161 (octal), 113. (decimal) + + PLACE 426737 Entry Relocatable + + ************* + + LINK symbol map of DECWAR /KI version (20) page 7 + + +PLNATK from DSK:PLNATK.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:18:00 + Low segment starts at 2770 ends at 3015 length 26 (octal), 22. (decimal) + High segment starts at 427117 ends at 427543 length 425 (octal), 277. (decimal) + + PLNATK 427120 Entry Relocatable + + ************* + +PLNRMV from DSK:PLNRMV.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:18:00 + Low segment starts at 3016 ends at 3031 length 14 (octal), 12. (decimal) + High segment starts at 427544 ends at 427742 length 177 (octal), 127. (decimal) + + PLNRMV 427545 Entry Relocatable + + ************* + +POINTS from DSK:POINTS.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:18:00 + Low segment starts at 3032 ends at 3103 length 52 (octal), 42. (decimal) + High segment starts at 427743 ends at 431326 length 1364 (octal), 756. (decimal) + + POINTS 427744 Entry Relocatable + + ************* + +PRIDIS from DSK:PRIDIS.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:18:00 + Low segment starts at 3104 ends at 3121 length 16 (octal), 14. (decimal) + High segment starts at 431327 ends at 431417 length 71 (octal), 57. (decimal) + + PRIDIS 431330 Entry Relocatable + + ************* + +PRLOC from DSK:PRLOC.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:18:00 + Low segment starts at 3122 ends at 3142 length 21 (octal), 17. (decimal) + High segment starts at 431420 ends at 431566 length 147 (octal), 103. (decimal) + + PRLOC 431421 Entry Relocatable + + ************* + +PROMPT from DSK:PROMPT.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:18:00 + Low segment starts at 3143 ends at 3160 length 16 (octal), 14. (decimal) + High segment starts at 431567 ends at 431663 length 75 (octal), 61. (decimal) + + PROMPT 431570 Entry Relocatable + + ************* + +RADIO from DSK:RADIO.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:18:00 + Low segment starts at 3161 ends at 3206 length 26 (octal), 22. (decimal) + High segment starts at 431664 ends at 432136 length 253 (octal), 171. (decimal) + + RADIO 431665 Entry Relocatable + LINK symbol map of DECWAR /KI version (20) page 8 +RADIO + + ************* + +REPAIR from DSK:REPAIR.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:18:00 + Low segment starts at 3207 ends at 3232 length 24 (octal), 20. (decimal) + High segment starts at 432137 ends at 432336 length 200 (octal), 128. (decimal) + + REPAIR 432140 Entry Relocatable + + ************* + +ROMDRV from DSK:ROMDRV.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:19:00 + Low segment starts at 3233 ends at 3326 length 74 (octal), 60. (decimal) + High segment starts at 432337 ends at 433565 length 1227 (octal), 663. (decimal) + + ROMDRV 432340 Entry Relocatable PHAROM 433212 Entry Relocatable + DEADRO 433247 Entry Relocatable TOROM 433273 Entry Relocatable + + ************* + +ROMSTR from DSK:ROMSTR.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:19:00 + Low segment starts at 3327 ends at 3343 length 15 (octal), 13. (decimal) + High segment starts at 433566 ends at 433663 length 76 (octal), 62. (decimal) + + ROMSTR 433567 Entry Relocatable + + ************* + +ROMTOR from DSK:ROMTOR.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:19:00 + Low segment starts at 3344 ends at 3401 length 36 (octal), 30. (decimal) + High segment starts at 433664 ends at 434426 length 543 (octal), 355. (decimal) + + ROMTOR 433665 Entry Relocatable + + ************* + +SCAN from DSK:SCAN.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:19:00 + Low segment starts at 3402 ends at 3457 length 56 (octal), 46. (decimal) + High segment starts at 434427 ends at 435111 length 463 (octal), 307. (decimal) + + SCAN 434430 Entry Relocatable SRSCAN 434446 Entry Relocatable + + ************* + +SET from DSK:SET.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:19:00 + Low segment starts at 3460 ends at 3530 length 51 (octal), 41. (decimal) + High segment starts at 435112 ends at 435757 length 646 (octal), 422. (decimal) + + SET 435113 Entry Relocatable + + ************* + + LINK symbol map of DECWAR /KI version (20) page 9 + + +SHIELD from DSK:SHIELD.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:19:00 + Low segment starts at 3531 ends at 3555 length 25 (octal), 21. (decimal) + High segment starts at 435760 ends at 436264 length 305 (octal), 197. (decimal) + + SHIELD 435761 Entry Relocatable + + ************* + +SNOVA from DSK:SNOVA.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:19:00 + Low segment starts at 3556 ends at 4077 length 322 (octal), 210. (decimal) + High segment starts at 436265 ends at 436530 length 244 (octal), 164. (decimal) + + SNLOCL 3556 Common length 192. SNOVA 436266 Entry Relocatable + + ************* + +STATUS from DSK:STATUS.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:19:00 + Low segment starts at 4100 ends at 4170 length 71 (octal), 57. (decimal) + High segment starts at 436531 ends at 437437 length 707 (octal), 455. (decimal) + + STATUS 436532 Entry Relocatable + + ************* + +TELL from DSK:TELL.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:19:00 + Low segment starts at 4171 ends at 4260 length 70 (octal), 56. (decimal) + High segment starts at 437440 ends at 440173 length 534 (octal), 348. (decimal) + + TELL 437441 Entry Relocatable + + ************* + +TIME from DSK:TIME.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:19:00 + Low segment starts at 4261 ends at 4266 length 6 (octal), 6. (decimal) + High segment starts at 440174 ends at 440320 length 125 (octal), 85. (decimal) + + TIME 440175 Entry Relocatable + + ************* + +TORDAM from DSK:TORDAM.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:20:00 + Low segment starts at 4267 ends at 4321 length 33 (octal), 27. (decimal) + High segment starts at 440321 ends at 441466 length 1146 (octal), 614. (decimal) + + TORDAM 440322 Entry Relocatable PHADAM 441003 Entry Relocatable + + ************* + +TORP from DSK:TORP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:20:00 + Low segment starts at 4322 ends at 4410 length 67 (octal), 55. (decimal) + High segment starts at 441467 ends at 443037 length 1351 (octal), 745. (decimal) + + TOLOCL 4322 Common length 7. TORP 441470 Entry Relocatable + LINK symbol map of DECWAR /KI version (20) page 10 +TORP + + ************* + +TRACTR from DSK:TRACTR.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:20:00 + Low segment starts at 4411 ends at 4432 length 22 (octal), 18. (decimal) + High segment starts at 443040 ends at 443407 length 350 (octal), 232. (decimal) + + TRACTR 443041 Entry Relocatable TRCOFF 443274 Entry Relocatable + + ************* + +TRAP from DSK:TRAP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:20:00 + Low segment starts at 4433 ends at 4434 length 2 (octal), 2. (decimal) + High segment starts at 443410 ends at 443432 length 23 (octal), 19. (decimal) + + TRAP 443411 Entry Relocatable + + ************* + +TYPE from DSK:TYPE.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:20:00 + Low segment starts at 4435 ends at 4455 length 21 (octal), 17. (decimal) + High segment starts at 443433 ends at 444007 length 355 (octal), 237. (decimal) + + TYPE 443434 Entry Relocatable + + ************* + +USERS from DSK:USERS.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 12:16:00 + Low segment starts at 4456 ends at 4472 length 15 (octal), 13. (decimal) + High segment starts at 444010 ends at 444117 length 110 (octal), 72. (decimal) + + USERS 444011 Entry Relocatable + + ************* + +MSG from DSK:MSG.REL[337,2030] created by MACRO on 19-May-82 at 12:13:00 + High segment starts at 444120 ends at 447325 length 3206 (octal), 1670. (decimal) + + ABSFRM 444120 Global Relocatable ALLDOK 444122 Global Relocatable + AMBCOM 444127 Global Relocatable AMBSWI 444133 Global Relocatable + BEGYRP 444141 Global Relocatable BTHFRM 444147 Global Relocatable + BUILD1 444151 Global Relocatable BUILD2 444154 Global Relocatable + BUILD3 444156 Global Relocatable BUILD4 444160 Global Relocatable + BUILD5 444162 Global Relocatable BUILD7 444170 Global Relocatable + CAPTU0 444176 Global Relocatable CAPTU1 444201 Global Relocatable + CAPTU2 444216 Global Relocatable CAPTU4 444242 Global Relocatable + CAPTU5 444252 Global Relocatable CAPTU6 444257 Global Relocatable + CAPTU7 444276 Global Relocatable CAPTU8 444306 Global Relocatable + COMLIN 444330 Global Relocatable COORD1 444332 Global Relocatable + DAMCOM 444335 Global Relocatable DAMREP 444347 Global Relocatable + DECVER 444353 Global Relocatable DESTRY 444362 Global Relocatable + DISPLC 444365 Global Relocatable DMHDR1 444342 Global Relocatable + DMHDR2 444345 Global Relocatable DOCK01 444370 Global Relocatable + DOCKIN 444375 Global Relocatable EMPBAS 444402 Global Relocatable + LINK symbol map of DECWAR /KI version (20) page 11 +MSG + EMPIRE 444377 Global Relocatable EMPPLN 444405 Global Relocatable + EMPSHP 444410 Global Relocatable ENDGM0 444413 Global Relocatable + ENDGM1 444417 Global Relocatable ENDGM3 444435 Global Relocatable + ENDGM4 444445 Global Relocatable ENDGM5 444462 Global Relocatable + ENDGM6 444475 Global Relocatable ENDGM7 444510 Global Relocatable + ENDGM8 444525 Global Relocatable ENER1L 444545 Global Relocatable + ENER1S 444542 Global Relocatable ENER4L 444604 Global Relocatable + ENER4S 444576 Global Relocatable ENERG2 444557 Global Relocatable + ENERG3 444567 Global Relocatable ENERG5 444617 Global Relocatable + ENERG6 444623 Global Relocatable ENERG7 444631 Global Relocatable + ENERG8 444636 Global Relocatable ENGOFF 444644 Global Relocatable + ERLOC1 444651 Global Relocatable ERLOC2 444661 Global Relocatable + ERLOC3 444670 Global Relocatable ERLOC4 444675 Global Relocatable + ERLOC7 444702 Global Relocatable ERLOC8 444707 Global Relocatable + ERLOC9 444716 Global Relocatable ERROR1 444725 Global Relocatable + ERROR2 444745 Global Relocatable FEDBAS 444756 Global Relocatable + FEDERA 444753 Global Relocatable FEDPLN 444762 Global Relocatable + FEDSHP 444766 Global Relocatable FORHLP 444772 Global Relocatable + FREE01 444777 Global Relocatable FREE02 445006 Global Relocatable + IMPDAM 445017 Global Relocatable INFORM 445024 Global Relocatable + INGAME 445027 Global Relocatable INRANG 445031 Global Relocatable + INSPRA 445033 Global Relocatable KNOWN 445037 Global Relocatable + LIFDAM 445041 Global Relocatable LNGFRM 445053 Global Relocatable + LSTF01 445077 Global Relocatable LSTF02 445110 Global Relocatable + LSTF03 445112 Global Relocatable LSTF04 445115 Global Relocatable + LSTF05 445120 Global Relocatable LSTF06 445124 Global Relocatable + LSTF07 445131 Global Relocatable LSTF08 445132 Global Relocatable + LSTF09 445134 Global Relocatable LSTF10 445137 Global Relocatable + LSTF11 445141 Global Relocatable LSTF12 445143 Global Relocatable + LSTF13 445145 Global Relocatable LSTF14 445147 Global Relocatable + LSTF15 445151 Global Relocatable LSTF16 445153 Global Relocatable + LSTF17 445155 Global Relocatable LSTS01 445055 Global Relocatable + LSTS02 445061 Global Relocatable LSTS03 445065 Global Relocatable + LSTS04 445073 Global Relocatable MAIN02 445157 Global Relocatable + MEDFRM 445164 Global Relocatable MESS01 445166 Global Relocatable + MESS02 445172 Global Relocatable MOVE06 445277 Global Relocatable + MOVE08 445314 Global Relocatable MOVE09 445320 Global Relocatable + MOVE10 445331 Global Relocatable MOVE1A 445173 Global Relocatable + MOVE1B 445205 Global Relocatable MOVE2L 445212 Global Relocatable + MOVE2S 445230 Global Relocatable MOVE3L 445236 Global Relocatable + MOVE3S 445257 Global Relocatable MOVE5L 445262 Global Relocatable + MOVE5S 445272 Global Relocatable NEUPLN 445344 Global Relocatable + NOCOMP 445347 Global Relocatable NOPLNT 445363 Global Relocatable + NOQUIT 445376 Global Relocatable NORMAL 445374 Global Relocatable + NOSHIP 445407 Global Relocatable NOSUR1 445413 Global Relocatable + NOSUR2 445424 Global Relocatable NOSUR3 445437 Global Relocatable + NOSUR4 445450 Global Relocatable OUTH01 445462 Global Relocatable + OUTH02 445464 Global Relocatable OUTH03 445466 Global Relocatable + OUTH04 445470 Global Relocatable OUTH05 445472 Global Relocatable + OUTH06 445476 Global Relocatable OUTH07 445501 Global Relocatable + OUTH08 445503 Global Relocatable OUTH09 445504 Global Relocatable + OUTH10 445514 Global Relocatable OUTH12 445516 Global Relocatable + OUTH13 445520 Global Relocatable OUTH14 445522 Global Relocatable + OUTH15 445530 Global Relocatable OUTH16 445532 Global Relocatable + LINK symbol map of DECWAR /KI version (20) page 12 +MSG + OUTH17 445540 Global Relocatable OUTH18 445542 Global Relocatable + OUTH19 445550 Global Relocatable OUTH20 445552 Global Relocatable + OUTH21 445554 Global Relocatable OUTH22 445557 Global Relocatable + OUTH23 445564 Global Relocatable OUTH24 445573 Global Relocatable + OUTH25 445576 Global Relocatable OUTH26 445605 Global Relocatable + OUTH27 445610 Global Relocatable OUTH28 445617 Global Relocatable + OUTH29 445622 Global Relocatable OUTH30 445625 Global Relocatable + OUTH31 445633 Global Relocatable OUTH32 445643 Global Relocatable + OUTH33 445660 Global Relocatable OUTH34 445666 Global Relocatable + PHACN0 445700 Global Relocatable PHACN1 445706 Global Relocatable + PHACN2 445713 Global Relocatable PHACN3 445723 Global Relocatable + PHACN4 445732 Global Relocatable PHACN5 445742 Global Relocatable + PHACN7 445760 Global Relocatable PHACN8 445773 Global Relocatable + PHACN9 446012 Global Relocatable POI03L 446032 Global Relocatable + POI03S 446027 Global Relocatable POI05L 446051 Global Relocatable + POI05S 446046 Global Relocatable POI06L 446061 Global Relocatable + POI06S 446056 Global Relocatable POI07L 446071 Global Relocatable + POI07S 446066 Global Relocatable POI11L 446077 Global Relocatable + POI11S 446075 Global Relocatable POI12L 446105 Global Relocatable + POI12S 446103 Global Relocatable POI13L 446113 Global Relocatable + POI13S 446111 Global Relocatable POI14L 446121 Global Relocatable + POI14S 446117 Global Relocatable POI15L 446127 Global Relocatable + POI15S 446125 Global Relocatable POI16L 446135 Global Relocatable + POI16S 446133 Global Relocatable POI17L 446143 Global Relocatable + POI17S 446141 Global Relocatable POI18L 446151 Global Relocatable + POI18S 446147 Global Relocatable POIN04 446037 Global Relocatable + POIN19 446155 Global Relocatable POIN20 446157 Global Relocatable + POIN21 446161 Global Relocatable POIN22 446163 Global Relocatable + POIN23 446165 Global Relocatable RADGAG 446211 Global Relocatable + RADIO0 446167 Global Relocatable RADIO1 446202 Global Relocatable + RADIO2 446204 Global Relocatable RADIO3 446207 Global Relocatable + RADOFF 446216 Global Relocatable RADON0 446224 Global Relocatable + RADUNG 446232 Global Relocatable RELFRM 446237 Global Relocatable + ROMADV 446241 Global Relocatable ROMULA 446244 Global Relocatable + SET001 446247 Global Relocatable SET002 446272 Global Relocatable + SET003 446276 Global Relocatable SET004 446305 Global Relocatable + SET005 446316 Global Relocatable SET006 446323 Global Relocatable + SET007 446336 Global Relocatable SET008 446351 Global Relocatable + SET009 446355 Global Relocatable SET010 446362 Global Relocatable + SETU06 446367 Global Relocatable SETU07 446376 Global Relocatable + SHLD01 446406 Global Relocatable SHLD02 446413 Global Relocatable + SHLD03 446424 Global Relocatable SHLD04 446437 Global Relocatable + SHLD05 446444 Global Relocatable SHLD06 446452 Global Relocatable + SHLD07 446457 Global Relocatable SHLD08 446470 Global Relocatable + SHLD09 446476 Global Relocatable SHTFRM 446512 Global Relocatable + STA10L 446562 Global Relocatable STA10M 446564 Global Relocatable + STAR02 446514 Global Relocatable STAT05 446535 Global Relocatable + STAT11 446566 Global Relocatable STAT2L 446523 Global Relocatable + STAT2M 446525 Global Relocatable STAT3L 446527 Global Relocatable + STAT3M 446533 Global Relocatable STAT6L 446537 Global Relocatable + STAT6M 446541 Global Relocatable STAT7L 446543 Global Relocatable + STAT7M 446546 Global Relocatable STAT8L 446550 Global Relocatable + STAT8M 446553 Global Relocatable STAT9L 446555 Global Relocatable + STAT9M 446560 Global Relocatable STRDAT 446570 Global Relocatable + LINK symbol map of DECWAR /KI version (20) page 13 +MSG + SURE00 446573 Global Relocatable SYNTAX 446602 Global Relocatable + TELL01 446605 Global Relocatable TELL02 446613 Global Relocatable + TELL03 446616 Global Relocatable TELL04 446626 Global Relocatable + TELL05 446634 Global Relocatable TELL06 446642 Global Relocatable + TELL07 446651 Global Relocatable TELL08 446663 Global Relocatable + TELL09 446667 Global Relocatable TIME01 446701 Global Relocatable + TIME02 446706 Global Relocatable TIME03 446713 Global Relocatable + TIME04 446720 Global Relocatable TIME05 446725 Global Relocatable + TORMIS 446732 Global Relocatable TORP00 446742 Global Relocatable + TORP01 446751 Global Relocatable TORP02 446763 Global Relocatable + TORP03 446771 Global Relocatable TORP04 447000 Global Relocatable + TORP05 447002 Global Relocatable TORP06 447005 Global Relocatable + TORP07 447012 Global Relocatable TRACT1 447016 Global Relocatable + TRACT2 447025 Global Relocatable TRACT3 447040 Global Relocatable + TRACT4 447050 Global Relocatable TRACT5 447070 Global Relocatable + TRACT6 447101 Global Relocatable TRACT7 447110 Global Relocatable + TRACT8 447123 Global Relocatable TTYS00 447136 Global Relocatable + TYPE01 447157 Global Relocatable TYPE02 447172 Global Relocatable + TYPE03 447201 Global Relocatable TYPE04 447204 Global Relocatable + TYPE05 447210 Global Relocatable TYPE06 447213 Global Relocatable + TYPE07 447222 Global Relocatable TYPE08 447231 Global Relocatable + TYPE09 447240 Global Relocatable UNITS1 447250 Global Relocatable + UNKCOM 447252 Global Relocatable UNKSHP 447256 Global Relocatable + UNKSWI 447262 Global Relocatable USERS1 447265 Global Relocatable + USERS2 447300 Global Relocatable USERS3 447303 Global Relocatable + USERS4 447315 Global Relocatable USERS5 447320 Global Relocatable + WRPDAM 447321 Global Relocatable + + ************* + +WARMAC from DSK:WARMAC.REL[337,2030] created by MACRO on 19-May-82 at 12:22:00 + Low segment starts at 4473 ends at 6546 length 2054 (octal), 1068. (decimal) + High segment starts at 447326 ends at 470034 length 20507 (octal), 8519. (decimal) + + ADDRCK 335 Global Absolute APRSET 464012 Entry Relocatable + BLKMOV 460626 Entry Relocatable BLKSET 460614 Entry Relocatable + CCFLG 302 Global Absolute CCFLG. 4627 Global Relocatable + CCTRAP 460763 Entry Relocatable CHKPAY 463302 Entry Relocatable + CHKSEQ 460370 Global Relocatable CLEAR 460607 Entry Relocatable + CRLF 456154 Entry Relocatable D. 461026 Global Relocatable + DAYTIM 460640 Entry Relocatable DEBUG 461151 Entry Relocatable + DECINI 455134 Entry Relocatable DISP 462654 Entry Relocatable + DISPC 462672 Entry Relocatable DISPX 462676 Entry Relocatable + DMPBUF 455251 Entry Relocatable ECHOFF 455243 Entry Relocatable + ECHON 455235 Entry Relocatable EQUAL 461207 Entry Relocatable + ETIM 460651 Entry Relocatable EXIT 455110 Entry Relocatable + EXIT. 455110 Entry Relocatable FRCCHK 460365 Global Relocatable + GETHIT 460105 Entry Relocatable GETMSG 460322 Entry Relocatable + GRIPE 461626 Entry Relocatable GTKN 455536 Entry Relocatable + HELP 462222 Entry Relocatable HLPALL 462353 Entry Relocatable + HLPXTR 462270 Entry Relocatable HUNGUP 334 Global Absolute + INGAL 461312 Entry Relocatable INPUT 460553 Entry Relocatable + INWAIT 333 Global Absolute IRAN 457211 Entry Relocatable + JOBSTA 460430 Entry Relocatable KILALL 461466 Global Relocatable + LINK symbol map of DECWAR /KI version (20) page 14 +WARMAC + KILHGH 461036 Entry Relocatable KILLOW 461066 Entry Relocatable + LDIS 461275 Entry Relocatable LOCF 460635 Entry Relocatable + LOCK 461335 Entry Relocatable MAKHIT 457725 Entry Relocatable + MAKMSG 460221 Entry Relocatable MARK 457401 Entry Relocatable + MONIT 455112 Entry Relocatable NEWS 461541 Entry Relocatable + OCOND 456717 Entry Relocatable ODEC 456474 Entry Relocatable + ODEV 456652 Entry Relocatable ODISP 456561 Entry Relocatable + OFLT 456522 Entry Relocatable OSDEC 456473 Entry Relocatable + OSFLT 456516 Entry Relocatable OTIM 456220 Entry Relocatable + OUT 456112 Entry Relocatable OUT2C 456172 Entry Relocatable + OUT2W 456207 Entry Relocatable OUTC 456166 Entry Relocatable + OUTW 456200 Entry Relocatable PAUSE 460661 Entry Relocatable + PDIST 461323 Entry Relocatable PDWDOC 463315 Entry Relocatable + PRGNAM 460715 Entry Relocatable PTY 455125 Entry Relocatable + PWR 457233 Entry Relocatable RAN 457216 Entry Relocatable + RESET. 455016 Entry Relocatable ROMSPK 464052 Entry Relocatable + RSRVHQ 457626 Global Relocatable RUNTIM 460644 Entry Relocatable + SETDSP 462703 Entry Relocatable SETQH 457555 Entry Relocatable + SETQM 457563 Entry Relocatable SETRAN 457204 Entry Relocatable + SETSCN 457310 Entry Relocatable SHOSTA 463524 Entry Relocatable + SHWSCN 457476 Entry Relocatable SKIP 456123 Entry Relocatable + SPACE 456150 Entry Relocatable SPACES 456142 Entry Relocatable + STABUF 5243 Global Relocatable START 461077 Global Relocatable + STAT 457047 Entry Relocatable STAZAP 464015 Entry Relocatable + STOP. 455110 Entry Relocatable TAB 456133 Entry Relocatable + TIMIN 461113 Entry Relocatable TIMOUT 461122 Entry Relocatable + TTYON 455255 Entry Relocatable UNLOCK 461462 Entry Relocatable + UPDCAP 463213 Entry Relocatable UPDSTA 463322 Entry Relocatable + USRNAM 460717 Entry Relocatable USRPRJ 460360 Entry Relocatable + ZAPLOK 461476 Global Relocatable + + ************* + +WARVER from DSK:WARVER.REL[337,2030] created by MACRO on 19-May-82 at 11:13:00 + + Zero length module + + ************* + +CISHNG from DSK:CISHNG.REL[337,2030] created by MACRO on 19-May-82 at 11:13:00 + Low segment starts at 6547 ends at 6554 length 6 (octal), 6. (decimal) + High segment starts at 470035 ends at 470157 length 123 (octal), 83. (decimal) + + CISHNG 470035 Global Relocatable HV.LOK 6552 Global Relocatable + + ************* + +USRTMP from DSK:USRTMP.REL[337,2030] created by MACRO on 12-Feb-82 at 14:37:00 + Low segment starts at 6555 ends at 6655 length 101 (octal), 65. (decimal) + + FLG.US 6555 Entry Relocatable NTMP. 4 Global Absolute Suppressed + ULOFT. 6624 Entry Relocatable ULOG. 6603 Entry Relocatable + UPASS. 6577 Entry Relocatable US.PPN 6571 Entry Relocatable + USBLK. 6574 Entry Relocatable USCBH. 6617 Entry Relocatable + LINK symbol map of DECWAR /KI version (20) page 15 +USRTMP + USCIP. 6604 Entry Relocatable USDEV. 6566 Entry Relocatable + USEXT. 6570 Entry Relocatable USFIL. 6567 Entry Relocatable + USHST. 6575 Entry Relocatable USID1. 6557 Entry Relocatable + USID2. 6560 Entry Relocatable USLEN. 100 Global Absolute Suppressed + USLPN. 6615 Entry Relocatable USMDV. 6613 Entry Relocatable + USMEN. 6610 Entry Relocatable USMIP. 6607 Entry Relocatable + USMNM. 6614 Entry Relocatable USMXT. 6625 Entry Relocatable + USNTP. 6561 Entry Relocatable USNXT. 6612 Entry Relocatable + USPGM. 6616 Entry Relocatable USPPN. 6556 Entry Relocatable + USPRI. 6611 Entry Relocatable USSTP. 6573 Entry Relocatable + USTAT. 6576 Entry Relocatable USTER. 6562 Entry Relocatable + USTIP. 6605 Entry Relocatable USTOP. 6606 Entry Relocatable + USTRM. 6572 Entry Relocatable USYOLN 51 Global Absolute Suppressed + UTNOD. 6626 Entry Relocatable + + ************* + +RDUSR. from DSK:USRTMP.REL[337,2030] created by MACRO on 12-Feb-82 at 14:37:00 + High segment starts at 470160 ends at 470177 length 20 (octal), 16. (decimal) + + RDUSR. 470160 Entry Relocatable + + ************* + +WTUSR. from DSK:USRTMP.REL[337,2030] created by MACRO on 12-Feb-82 at 14:37:00 + High segment starts at 470200 ends at 470217 length 20 (octal), 16. (decimal) + + WTUSR. 470200 Entry Relocatable + + ************* + +TRMOPS from DSK:USRTMP.REL[337,2030] created by MACRO on 12-Feb-82 at 14:37:00 + High segment starts at 470220 ends at 470247 length 30 (octal), 24. (decimal) + + TERGET 470220 Entry Relocatable TERSET 470233 Entry Relocatable + + ************* + +TRMTB. from DSK:USRTMP.REL[337,2030] created by MACRO on 12-Feb-82 at 14:37:00 + High segment starts at 470250 ends at 470354 length 105 (octal), 69. (decimal) + + TRMTB. 470250 Entry Relocatable + + ************* + +MAKUSR from DSK:USRTMP.REL[337,2030] created by MACRO on 12-Feb-82 at 14:37:00 + High segment starts at 470355 ends at 470416 length 42 (octal), 34. (decimal) + + MAKUSR 470355 Entry Relocatable + + ************* + + LINK symbol map of DECWAR /KI version (20) page 16 + + +RSTUSR from DSK:USRTMP.REL[337,2030] created by MACRO on 12-Feb-82 at 14:37:00 + High segment starts at 470417 ends at 470427 length 11 (octal), 9. (decimal) + + RSTUSR 470417 Entry Relocatable + + ************* + +GWDUSR from DSK:USRTMP.REL[337,2030] created by MACRO on 12-Feb-82 at 14:37:00 + High segment starts at 470430 ends at 470437 length 10 (octal), 8. (decimal) + + GWDUSR 470430 Entry Relocatable SWDUSR 470434 Entry Relocatable + + ************* + +ENCODE from DSK:USRTMP.REL[337,2030] created by MACRO on 12-Feb-82 at 14:37:00 + High segment starts at 470440 ends at 470511 length 52 (octal), 42. (decimal) + + D.CODE 470467 Entry Relocatable E.CODE 470443 Entry Relocatable + + ************* + +LOFCHK from DSK:LOFCHK.REL[337,2030] created by MACRO on 19-May-82 at 11:12:00 + High segment starts at 470512 ends at 470676 length 165 (octal), 117. (decimal) + + LOFCHK 470512 Entry Relocatable + + ************* + +MAX. from SYS:FORLIB.REL[1,4] created by MACRO on 16-Mar-81 at 21:16:00 + Low segment starts at 6656 ends at 6722 length 45 (octal), 37. (decimal) + + AMAX0. 6677 Entry Relocatable AMAX1. 6657 Entry Relocatable + MAX0. 6664 Entry Relocatable MAX1. 6671 Entry Relocatable + + ************* + +CFRXIT from SYS:FORLIB.REL[1,4] created by MACRO on 16-Mar-81 at 21:16:00 + Low segment starts at 6723 ends at 6730 length 6 (octal), 6. (decimal) + + CEXIT. 6723 Entry Relocatable + + ************* + +A from DSK:SETUP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:14:00 + Low segment starts at 6731 ends at 6731 length 1 (octal), 1. (decimal) + High segment starts at 6732 ends at 6733 length 2 (octal), 2. (decimal) + + A 6733 Entry Relocatable + + ************* + + LINK symbol map of DECWAR /KI version (20) page 17 + + +CC1 from DSK:SETUP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:14:00 + Low segment starts at 6734 ends at 6735 length 2 (octal), 2. (decimal) + High segment starts at 6736 ends at 6753 length 16 (octal), 14. (decimal) + + CC1 6737 Entry Relocatable + + ************* + +CC2 from DSK:SETUP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:14:00 + Low segment starts at 6754 ends at 6755 length 2 (octal), 2. (decimal) + High segment starts at 6756 ends at 6776 length 21 (octal), 17. (decimal) + + CC2 6757 Entry Relocatable + + ************* + +KILCHK from DSK:SETUP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:14:00 + Low segment starts at 6777 ends at 7012 length 14 (octal), 12. (decimal) + High segment starts at 7013 ends at 7252 length 240 (octal), 160. (decimal) + + KILCHK 7014 Entry Relocatable + + ************* + +PREGAM from DSK:SETUP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:14:00 + Low segment starts at 7253 ends at 7323 length 51 (octal), 41. (decimal) + High segment starts at 7324 ends at 7605 length 262 (octal), 178. (decimal) + + PREGAM 7325 Entry Relocatable + + ************* + +SETUP from DSK:SETUP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:14:00 + Low segment starts at 7606 ends at 10002 length 175 (octal), 125. (decimal) + High segment starts at 10003 ends at 11656 length 1654 (octal), 940. (decimal) + + SETUP 10004 Entry Relocatable + + ************* + +XGTCMD from DSK:SETUP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:14:00 + Low segment starts at 11657 ends at 11737 length 61 (octal), 49. (decimal) + High segment starts at 11740 ends at 12105 length 146 (octal), 102. (decimal) + + XGTCMD 11741 Entry Relocatable + + ************* + +Z from DSK:SETUP.REL[337,2030] created by FORTRAN /KI on 19-May-82 at 11:14:00 + Low segment starts at 12106 ends at 12106 length 1 (octal), 1. (decimal) + High segment starts at 12107 ends at 12110 length 2 (octal), 2. (decimal) + + Z 12110 Entry Relocatable + LINK symbol map of DECWAR /KI version (20) page 18 +Z + + ************* + +SETMSG from DSK:SETMSG.REL[337,2030] created by MACRO on 19-May-82 at 11:14:00 + Low segment starts at 12111 ends at 12377 length 267 (octal), 183. (decimal) + + BACKUP 12111 Global Relocatable KILCH4 12113 Global Relocatable + KILCH5 12123 Global Relocatable KILCH6 12126 Global Relocatable + KILCH8 12130 Global Relocatable MAICOM 12133 Global Relocatable + NOGAL1 12143 Global Relocatable PGAME1 12167 Global Relocatable + PTYWRN 12204 Global Relocatable SETU01 12214 Global Relocatable + SETU02 12230 Global Relocatable SETU03 12240 Global Relocatable + SETU04 12246 Global Relocatable SETU05 12262 Global Relocatable + SETU11 12271 Global Relocatable SETU12 12300 Global Relocatable + SETU13 12310 Global Relocatable SETU14 12317 Global Relocatable + SETU15 12326 Global Relocatable SETU16 12336 Global Relocatable + SETU17 12343 Global Relocatable SETU18 12354 Global Relocatable + STRTUP 12370 Global Relocatable STU17A 12350 Global Relocatable + + ************* + +ROYALN from UNV:LAYOR1.REL[1,26] created by MACRO on 15-Mar-82 at 12:35:00 + Low segment starts at 12400 ends at 12426 length 27 (octal), 23. (decimal) + + ROYALN 12401 Entry Relocatable + + ************* + + + Index to LINK symbol map of DECWAR /KI version (20) page 19 + + Name Page Name Page Name Page Name Page + + A 16 GETCMD 4 OUTMSG 6 SETUP 17 + BASBLD 1 GWDUSR 16 PASWRD 6 SHIELD 9 + BASKIL 2 HIGH 1 PHACON 6 SNOVA 9 + BASPHA 2 JUMP 4 PLACE 6 STATUS 9 + BUILD 2 KILCHK 17 PLNATK 7 TELL 9 + CAPTUR 2 KQSRCH 4 PLNRMV 7 TIME 9 + CC1 17 LIST 4 POINTS 7 TORDAM 9 + CC2 17 LOCATE 4 PREGAM 17 TORP 9 + CFRXIT 16 LOFCHK 16 PRIDIS 7 TRACTR 10 + CHECK 2 LOW 1 PRLOC 7 TRAP 10 + CHKPNT 2 LSTFLG 5 PROMPT 7 TRMOPS 15 + CISHNG 14 LSTOBJ 5 RADIO 7 TRMTB. 15 + CLRBUF 2 LSTOUT 5 RDUSR. 15 TYPE 10 + DAMAGE 3 LSTSCN 5 REPAIR 8 USERS 10 + DECWAR 1 LSTSUM 5 ROMDRV 8 USRTMP 14 + DIST 3 LSTUPD 5 ROMSTR 8 WARMAC 13 + DOCK 3 MAKUSR 15 ROMTOR 8 WARVER 14 + DSHIP 3 MAX. 16 ROYALN 18 WTUSR. 15 + ENCODE 16 MOVE 5 RSTUSR 16 XGTCMD 17 + ENDGAM 3 MSG 10 SCAN 8 Z 17 + ENERGY 3 NOVA 6 SET 8 .BLOCK 1 + FREE 4 OUTHIT 6 SETMSG 18 + + +Global Cross Reference for DECWAR version (20) page 20 + +Flags Symbol Octal value Defined in Referenced in + + A 6733 A WARMAC + ABSFRM 444120 MSG LOCATE SET TYPE + ADDRCK 335 WARMAC + ALLDOK 444122 MSG DAMAGE + AMAX0. 6677 MAX. + AMAX1. 6657 MAX. + AMBCOM 444127 MSG GETCMD XGTCMD + AMBSWI 444133 MSG TYPE + APRSET 464012 WARMAC DECWAR + BACKUP 12111 SETMSG KILCHK + BASBLD 407341 BASBLD DECWAR ROMDRV + BASES 415466 LIST DECWAR + BASKIL 407420 BASKIL CAPTUR NOVA PLNRMV TORDAM + BASPHA 407571 BASPHA DECWAR ROMDRV + BEGYRP 444141 MSG ENERGY + BLKMOV 460626 WARMAC PLNRMV + BLKSET 460614 WARMAC DECWAR DIST FREE LIST OUTHIT POINTS TORP SETUP + BTHFRM 444147 MSG SET TYPE + BUILD 410213 BUILD DECWAR + BUILD1 444151 MSG BUILD + BUILD2 444154 MSG BUILD + BUILD3 444156 MSG BUILD LSTOBJ + BUILD4 444160 MSG BUILD + BUILD5 444162 MSG BUILD + BUILD7 444170 MSG BUILD + CAPTUR 410711 CAPTUR DECWAR + CAPTU0 444176 MSG CAPTUR + CAPTU1 444201 MSG CAPTUR + CAPTU2 444216 MSG CAPTUR + CAPTU4 444242 MSG CAPTUR + CAPTU5 444252 MSG BUILD CAPTUR + CAPTU6 444257 MSG CAPTUR + CAPTU7 444276 MSG CAPTUR + CAPTU8 444306 MSG CAPTUR + CCFLG 302 WARMAC + CCFLG. 4627 WARMAC + CCTRAP 460763 WARMAC DECWAR GETCMD TRAP KILCHK SETUP + CC1 6737 CC1 KILCHK SETUP + CC2 6757 CC2 SETUP + CEXIT. 6723 CFRXIT MAX. + CHECK 411553 CHECK MOVE ROMDRV ROMTOR TORP +C CHKOUT 1541 CHECK CHECK JUMP MOVE NOVA ROMDRV ROMTOR SNOVA TORP + CHKPAY 463302 WARMAC PREGAM + CHKPNT 412076 CHKPNT CHECK + CHKSEQ 460370 WARMAC GETCMD + CISHNG 470035 CISHNG + CLEAR 460607 WARMAC DECWAR CLRBUF GETCMD + CLRBUF 412137 CLRBUF SETUP + COMLIN 444330 MSG PROMPT + COORD1 444332 MSG LOCATE + CRLF 456154 WARMAC DECWAR BUILD CAPTUR DAMAGE DOCK ENERGY GETCMD LIST LSTSCN LSTFLG + LSTOUT LSTSUM LSTOBJ OUTHIT OUTMSG POINTS PRLOC RADIO SET SHIELD + +Global Cross Reference for DECWAR version (20) page 21 + +Flags Symbol Octal value Defined in Referenced in + + STATUS TELL TIME TORP TRACTR TYPE USERS KILCHK SETUP XGTCMD + DAMAGE 412154 DAMAGE DECWAR REPAIR + DAMCOM 444335 MSG LOCATE + DAMREP 444347 MSG DAMAGE + DAYTIM 460640 WARMAC FREE TIME SETUP + DEADRO 433247 ROMDRV + DEBUG 461151 WARMAC DECWAR PREGAM + DECINI 455134 WARMAC + DECVER 444353 MSG DECWAR TYPE + DESTRY 444362 MSG OUTHIT + DISP 462654 WARMAC BASPHA BUILD CAPTUR CHECK DAMAGE DIST DOCK FREE LOCATE LSTFLG + MOVE PHACON PLACE PLNATK PLNRMV ROMDRV ROMTOR SNOVA TELL TORP + DISPC 462672 WARMAC BASKIL BUILD CAPTUR DOCK JUMP LSTFLG LSTOUT NOVA PHACON PLACE + PLNATK ROMSTR SCAN SET SNOVA + DISPLC 444365 MSG OUTHIT + DISPX 462676 WARMAC BUILD CAPTUR PHACON + DIST 412455 DIST ROMDRV ROMTOR +C DISTLC 1632 DIST DIST + DMHDR1 444342 MSG DAMAGE + DMHDR2 444345 MSG DAMAGE + DMPBUF 455251 WARMAC GETCMD KILCHK XGTCMD + DOCK 413012 DOCK DECWAR + DOCKIN 444375 MSG DOCK + DOCK01 444370 MSG DOCK + DSHIP 413306 DSHIP + D. 461026 WARMAC + D.CODE 470467 ENCODE RDUSR. WTUSR. + ECHOFF 455243 WARMAC KILCHK + ECHON 455235 WARMAC KILCHK + EMPBAS 444402 MSG LSTOUT + EMPIRE 444377 MSG POINTS + EMPPLN 444405 MSG LSTOUT + EMPSHP 444410 MSG LSTOUT + ENDGAM 413333 ENDGAM GETCMD PLNRMV SET KILCHK + ENDGM0 444413 MSG ENDGAM + ENDGM1 444417 MSG ENDGAM + ENDGM3 444435 MSG ENDGAM + ENDGM4 444445 MSG ENDGAM + ENDGM5 444462 MSG ENDGAM + ENDGM6 444475 MSG ENDGAM + ENDGM7 444510 MSG ENDGAM + ENDGM8 444525 MSG ENDGAM + ENERGY 413563 ENERGY DECWAR + ENERG2 444557 MSG ENERGY + ENERG3 444567 MSG ENERGY TRACTR + ENERG5 444617 MSG ENERGY + ENERG6 444623 MSG ENERGY + ENERG7 444631 MSG ENERGY + ENERG8 444636 MSG ENERGY + ENER1L 444545 MSG ENERGY + ENER1S 444542 MSG ENERGY + ENER4L 444604 MSG ENERGY + +Global Cross Reference for DECWAR version (20) page 22 + +Flags Symbol Octal value Defined in Referenced in + + ENER4S 444576 MSG ENERGY + ENGOFF 444644 MSG MOVE + EQUAL 461207 WARMAC DECWAR DAMAGE DOCK ENERGY GETCMD LOCATE LSTSCN PASWRD POINTS RADIO + REPAIR SCAN SET SHIELD STATUS TELL TRACTR TYPE KILCHK PREGAM + SETUP XGTCMD + ERLOC1 444651 MSG LOCATE PHACON + ERLOC2 444661 MSG LOCATE + ERLOC3 444670 MSG LOCATE + ERLOC4 444675 MSG LOCATE + ERLOC7 444702 MSG LOCATE + ERLOC8 444707 MSG LOCATE + ERLOC9 444716 MSG LOCATE + ERROR1 444725 MSG MOVE PHACON TORP + ERROR2 444745 MSG MOVE PHACON TORP + ETIM 460651 WARMAC DECWAR BUILD CAPTUR DOCK ENDGAM GETCMD MOVE PHACON REPAIR ROMDRV + ROMTOR TIME TORP KILCHK + EXIT 455110 WARMAC DECWAR ENDGAM CC1 CC2 SETUP + EXIT. 455110 WARMAC DECWAR + E.CODE 470443 ENCODE WTUSR. + FEDBAS 444756 MSG LSTOUT + FEDERA 444753 MSG POINTS + FEDPLN 444762 MSG LSTOUT + FEDSHP 444766 MSG LSTOUT + FLG.US 6555 USRTMP RDUSR. MAKUSR + FORHLP 444772 MSG GETCMD PASWRD WARMAC XGTCMD + FRCCHK 460365 WARMAC SETUP + FREE 414077 FREE DECWAR DSHIP ENDGAM GETCMD TRAP WARMAC + FREE01 444777 MSG FREE + FREE02 445006 MSG FREE +C FRLOCL 1777 FREE FREE + GETCMD 414531 GETCMD DECWAR + GETHIT 460105 WARMAC FREE OUTHIT + GETMSG 460322 WARMAC FREE OUTMSG + GRIPE 461626 WARMAC DECWAR PREGAM + GTKN 455536 WARMAC DECWAR ENERGY GETCMD LOCATE RADIO SET SHIELD TELL TRACTR TYPE + KILCHK PREGAM SETUP XGTCMD + GWDUSR 470430 GWDUSR + HELP 462222 WARMAC DECWAR PREGAM + HIGH 406156 HIGH +C HISEG 400010 HIGH HIGH DECWAR .BLOCK BASBLD BASKIL BASPHA BUILD CAPTUR CHECK DAMAGE + DIST DOCK DSHIP ENDGAM ENERGY FREE GETCMD JUMP KQSRCH LIST + LOCATE LSTSCN LSTFLG LSTUPD LSTOUT LSTSUM LSTOBJ MOVE NOVA OUTHIT + OUTMSG PASWRD PHACON PLACE PLNATK PLNRMV POINTS PRIDIS PRLOC PROMPT + RADIO REPAIR ROMDRV ROMSTR ROMTOR SCAN SET SHIELD SNOVA STATUS + TELL TIME TORDAM TORP TRACTR TRAP TYPE USERS WARMAC CC1 + CC2 KILCHK PREGAM SETUP XGTCMD + HLPALL 462353 WARMAC PREGAM + HLPXTR 462270 WARMAC PREGAM + HUNGUP 334 WARMAC CISHNG + HV.LOK 6552 CISHNG + IMPDAM 445017 MSG MOVE + IMPULS 422227 MOVE DECWAR + +Global Cross Reference for DECWAR version (20) page 23 + +Flags Symbol Octal value Defined in Referenced in + + INFORM 445024 MSG SET TYPE + INGAL 461312 WARMAC CHECK JUMP LOCATE LSTSCN ROMDRV TELL + INGAME 445027 MSG LSTFLG LSTSUM + INPUT 460553 WARMAC GETCMD KILCHK XGTCMD + INRANG 445031 MSG LSTFLG LSTSUM + INSPRA 445033 MSG LSTFLG LSTSUM + INWAIT 333 WARMAC + IRAN 457211 WARMAC DECWAR DIST MOVE NOVA PHACON PLACE PLNATK ROMDRV ROMTOR SNOVA + TELL TORDAM TORP + JOBSTA 460430 WARMAC FREE PREGAM SETUP + JUMP 415135 JUMP NOVA TORDAM TORP + KILALL 461466 WARMAC + KILCHK 7014 KILCHK + KILCH4 12113 SETMSG KILCHK + KILCH5 12123 SETMSG KILCHK + KILCH6 12126 SETMSG KILCHK + KILCH8 12130 SETMSG KILCHK + KILHGH 461036 WARMAC ENDGAM SETUP + KILLOW 461066 WARMAC + KNOWN 445037 MSG LSTFLG LSTSUM + KQSRCH 415374 KQSRCH FREE KILCHK SETUP + LDIS 461275 WARMAC BASKIL BASPHA BUILD CAPTUR DOCK ENERGY PLACE PLNATK PRIDIS SCAN + TORP TRACTR + LIFDAM 445041 MSG DECWAR + LIST 415441 LIST DECWAR + LNGFRM 445053 MSG SET TYPE +C LOCAL 340 LOW LOW DECWAR ENDGAM GETCMD LIST LSTSCN LSTFLG LSTUPD LSTOUT LSTOBJ + SCAN USERS WARMAC KILCHK PREGAM SETUP + LOCATE 415611 LOCATE BUILD CAPTUR MOVE PHACON TORP + LOCF 460635 WARMAC DECWAR LIST LSTFLG LSTSUM SETUP + LOCK 461335 WARMAC BUILD CAPTUR FREE MOVE NOVA ROMTOR TORP SETUP + LOFCHK 470512 LOFCHK DECWAR GETCMD KILCHK PREGAM SETUP XGTCMD + LOW 652 LOW +C LOWSEG 140 LOW LOW DECWAR .BLOCK BASBLD BASKIL BASPHA BUILD CAPTUR CHECK DAMAGE + DIST DOCK DSHIP ENDGAM ENERGY FREE GETCMD JUMP KQSRCH LIST + LOCATE LSTSCN LSTFLG LSTUPD LSTOUT LSTSUM LSTOBJ MOVE NOVA OUTHIT + OUTMSG PASWRD PHACON PLACE PLNATK PLNRMV POINTS PRIDIS PRLOC PROMPT + RADIO REPAIR ROMDRV ROMSTR ROMTOR SCAN SET SHIELD SNOVA STATUS + TELL TIME TORDAM TORP TRACTR TRAP TYPE USERS WARMAC CC1 + CC2 KILCHK PREGAM SETUP XGTCMD + LSTFLG 417536 LSTFLG LIST + LSTF01 445077 MSG LSTFLG + LSTF02 445110 MSG LSTFLG + LSTF03 445112 MSG LSTFLG + LSTF04 445115 MSG LSTFLG + LSTF05 445120 MSG LSTFLG + LSTF06 445124 MSG LSTFLG + LSTF07 445131 MSG LSTFLG + LSTF08 445132 MSG LSTFLG + LSTF09 445134 MSG LSTFLG + LSTF10 445137 MSG LSTFLG + LSTF11 445141 MSG LSTFLG + +Global Cross Reference for DECWAR version (20) page 24 + +Flags Symbol Octal value Defined in Referenced in + + LSTF12 445143 MSG LSTFLG + LSTF13 445145 MSG LSTFLG + LSTF14 445147 MSG LSTFLG + LSTF15 445151 MSG LSTFLG + LSTF16 445153 MSG LSTFLG + LSTF17 445155 MSG LSTFLG + LSTOBJ 421702 LSTOBJ LSTFLG LSTOUT + LSTOUT 421127 LSTOUT LIST + LSTSCN 416501 LSTSCN LIST + LSTSUM 421570 LSTSUM LSTOUT + LSTS01 445055 MSG LSTSCN + LSTS02 445061 MSG LSTSCN + LSTS03 445065 MSG LSTSCN + LSTS04 445073 MSG LSTSCN + LSTUPD 421001 LSTUPD LSTFLG + MAICOM 12133 SETMSG XGTCMD + MAIN02 445157 MSG GETCMD + MAIN. 406157 DECWAR + MAKHIT 457725 WARMAC BASPHA CAPTUR ENERGY NOVA PHACON PLNATK ROMDRV ROMTOR SNOVA TORP + TRACTR + MAKMSG 460221 WARMAC TELL + MAKUSR 470355 MAKUSR WARMAC + MARK 457401 WARMAC SCAN + MAX0. 6664 MAX. ENDGAM + MAX1. 6671 MAX. + MEDFRM 445164 MSG SET TYPE + MESS01 445166 MSG OUTMSG + MESS02 445172 MSG OUTMSG + MONIT 455112 WARMAC FREE TRAP KILCHK PREGAM XGTCMD + MOVE 422200 MOVE DECWAR + MOVE06 445277 MSG MOVE + MOVE08 445314 MSG MOVE + MOVE09 445320 MSG MOVE + MOVE1A 445173 MSG MOVE + MOVE1B 445205 MSG MOVE + MOVE10 445331 MSG MOVE + MOVE2L 445212 MSG MOVE + MOVE2S 445230 MSG MOVE + MOVE3L 445236 MSG MOVE + MOVE3S 445257 MSG MOVE + MOVE5L 445262 MSG MOVE + MOVE5S 445272 MSG MOVE + NEUPLN 445344 MSG LSTOUT + NEWS 461541 WARMAC DECWAR PREGAM + NOCOMP 445347 MSG + NOGAL1 12143 SETMSG SETUP + NOPLNT 445363 MSG BUILD CAPTUR + NOQUIT 445376 MSG GETCMD + NORMAL 445374 MSG SET TYPE + NOSHIP 445407 MSG ENERGY LOCATE TRACTR + NOSUR1 445413 MSG CAPTUR + NOSUR2 445424 MSG CAPTUR + +Global Cross Reference for DECWAR version (20) page 25 + +Flags Symbol Octal value Defined in Referenced in + + NOSUR3 445437 MSG CAPTUR + NOSUR4 445450 MSG CAPTUR + NOVA 423141 NOVA SNOVA +S NTMP. 4 USRTMP+ TRMTB.+ MAKUSR + OCOND 456717 WARMAC STATUS + ODEC 456474 WARMAC DECWAR BUILD LSTSUM LSTOBJ OUTHIT POINTS PRLOC PROMPT STATUS TORP + KILCHK SETUP + ODEV 456652 WARMAC DAMAGE OUTHIT + ODISP 456561 WARMAC BUILD CAPTUR DAMAGE DOCK GETCMD LSTFLG LSTOBJ OUTHIT OUTMSG RADIO + ROMDRV TELL TRACTR + OFLT 456522 WARMAC DAMAGE LSTOBJ MOVE OUTHIT POINTS STATUS +C OMLOCL 2662 OUTMSG OUTMSG + OSDEC 456473 WARMAC PRLOC + OSFLT 456516 WARMAC LSTOBJ OUTHIT STATUS + OTIM 456220 WARMAC TIME KILCHK + OUT 456112 WARMAC DECWAR BUILD CAPTUR CLRBUF DAMAGE DOCK ENDGAM ENERGY FREE GETCMD + LOCATE LSTSCN LSTFLG LSTSUM LSTOBJ MOVE OUTHIT OUTMSG PASWRD PHACON + POINTS PROMPT RADIO ROMDRV SCAN SET SHIELD STATUS TELL TIME + TORP TRACTR TYPE USERS KILCHK PREGAM SETUP XGTCMD + OUTC 456166 WARMAC BUILD LSTSUM LSTOBJ OUTHIT PRLOC PROMPT STATUS + OUTHIT 424224 OUTHIT GETCMD + OUTH01 445462 MSG OUTHIT + OUTH02 445464 MSG OUTHIT + OUTH03 445466 MSG OUTHIT + OUTH04 445470 MSG OUTHIT + OUTH05 445472 MSG OUTHIT + OUTH06 445476 MSG OUTHIT + OUTH07 445501 MSG OUTHIT + OUTH08 445503 MSG OUTHIT + OUTH09 445504 MSG OUTHIT + OUTH10 445514 MSG OUTHIT + OUTH12 445516 MSG OUTHIT + OUTH13 445520 MSG OUTHIT + OUTH14 445522 MSG OUTHIT + OUTH15 445530 MSG OUTHIT + OUTH16 445532 MSG OUTHIT + OUTH17 445540 MSG OUTHIT + OUTH18 445542 MSG OUTHIT + OUTH19 445550 MSG OUTHIT + OUTH20 445552 MSG OUTHIT + OUTH21 445554 MSG OUTHIT + OUTH22 445557 MSG OUTHIT + OUTH23 445564 MSG OUTHIT + OUTH24 445573 MSG OUTHIT + OUTH25 445576 MSG OUTHIT + OUTH26 445605 MSG OUTHIT + OUTH27 445610 MSG OUTHIT + OUTH28 445617 MSG OUTHIT + OUTH29 445622 MSG OUTHIT + OUTH30 445625 MSG OUTHIT + OUTH31 445633 MSG OUTHIT + OUTH32 445643 MSG OUTHIT + +Global Cross Reference for DECWAR version (20) page 26 + +Flags Symbol Octal value Defined in Referenced in + + OUTH33 445660 MSG OUTHIT + OUTH34 445666 MSG OUTHIT + OUTMSG 425562 OUTMSG GETCMD + OUTW 456200 WARMAC LSTSCN TELL + OUT2C 456172 WARMAC MOVE OUTHIT OUTMSG POINTS PROMPT STATUS XGTCMD + OUT2W 456207 WARMAC POINTS TYPE SETUP + PASWRD 425665 PASWRD DECWAR PREGAM + PAUSE 460661 WARMAC GETCMD LOCATE PHACON TORP + PDIST 461323 WARMAC BASPHA CAPTUR DIST JUMP LSTFLG LSTUPD PHACON PLNATK PRLOC ROMDRV + PDWDOC 463315 WARMAC PREGAM + PGAME1 12167 SETMSG PREGAM + PHACN0 445700 MSG PHACON + PHACN1 445706 MSG PHACON TORP + PHACN2 445713 MSG PHACON + PHACN3 445723 MSG + PHACN4 445732 MSG PHACON + PHACN5 445742 MSG PHACON + PHACN7 445760 MSG PHACON + PHACN8 445773 MSG PHACON + PHACN9 446012 MSG PHACON + PHACON 425744 PHACON DECWAR + PHADAM 441003 TORDAM BASPHA CAPTUR PHACON PLNATK ROMDRV + PHAROM 433212 ROMDRV BASPHA PHACON PLNATK + PLACE 426737 PLACE DECWAR ROMDRV SETUP + PLANET 415501 LIST DECWAR + PLNATK 427120 PLNATK DECWAR ROMDRV + PLNRMV 427545 PLNRMV BUILD NOVA ROMTOR TORP + POINTS 427744 POINTS DECWAR ENDGAM GETCMD PREGAM + POIN04 446037 MSG POINTS + POIN19 446155 MSG POINTS + POIN20 446157 MSG POINTS + POIN21 446161 MSG POINTS + POIN22 446163 MSG POINTS + POIN23 446165 MSG POINTS + POI03L 446032 MSG POINTS + POI03S 446027 MSG POINTS + POI05L 446051 MSG POINTS + POI05S 446046 MSG POINTS + POI06L 446061 MSG POINTS + POI06S 446056 MSG POINTS + POI07L 446071 MSG POINTS + POI07S 446066 MSG POINTS + POI11L 446077 MSG POINTS + POI11S 446075 MSG POINTS + POI12L 446105 MSG POINTS + POI12S 446103 MSG POINTS + POI13L 446113 MSG POINTS + POI13S 446111 MSG POINTS + POI14L 446121 MSG POINTS + POI14S 446117 MSG POINTS + POI15L 446127 MSG POINTS + POI15S 446125 MSG POINTS + +Global Cross Reference for DECWAR version (20) page 27 + +Flags Symbol Octal value Defined in Referenced in + + POI16L 446135 MSG POINTS + POI16S 446133 MSG POINTS + POI17L 446143 MSG POINTS + POI17S 446141 MSG POINTS + POI18L 446151 MSG POINTS + POI18S 446147 MSG POINTS +C POLOCL 653 DECWAR DECWAR ENDGAM GETCMD POINTS + PREGAM 7325 PREGAM DECWAR + PRGNAM 460715 WARMAC GETCMD PREGAM + PRIDIS 431330 PRIDIS BASPHA CAPTUR NOVA PHACON PLNATK ROMDRV ROMTOR SNOVA TORP + PRLOC 431421 PRLOC BUILD CAPTUR LSTSCN LSTFLG LSTOBJ OUTHIT ROMDRV STATUS USERS + PROMPT 431570 PROMPT GETCMD + PTY 455125 WARMAC + PTYWRN 12204 SETMSG + PWR 457233 WARMAC TORDAM + RADGAG 446211 MSG RADIO + RADIO 431665 RADIO DECWAR + RADIO0 446167 MSG RADIO + RADIO1 446202 MSG STATUS + RADIO2 446204 MSG RADIO + RADIO3 446207 MSG STATUS + RADOFF 446216 MSG RADIO + RADON0 446224 MSG RADIO + RADUNG 446232 MSG RADIO + RAN 457216 WARMAC CHECK MOVE NOVA ROMTOR TORDAM TORP SETUP + RDUSR. 470160 RDUSR. WARMAC MAKUSR RSTUSR + RELFRM 446237 MSG LOCATE SET TYPE + RELOC 415657 LOCATE BUILD CAPTUR MOVE PHACON TORP + REPAIR 432140 REPAIR DECWAR + RESET. 455016 WARMAC DECWAR + ROMADV 446241 MSG ROMDRV + ROMDRV 432340 ROMDRV DECWAR + ROMSPK 464052 WARMAC TELL + ROMSTR 433567 ROMSTR ROMDRV ROMTOR + ROMTOR 433665 ROMTOR ROMDRV + ROMULA 446244 MSG POINTS + ROYALN 12401 ROYALN DECWAR + RSRVHQ 457626 WARMAC + RSTART 414315 FREE TRAP + RSTUSR 470417 RSTUSR + RUNTIM 460644 WARMAC TIME SETUP + SCAN 434430 SCAN DECWAR + SET 435113 SET DECWAR PREGAM + SETDSP 462703 WARMAC BUILD CAPTUR FREE JUMP MOVE NOVA PLACE PLNRMV ROMDRV ROMTOR + SET SNOVA TELL TORDAM TORP + SETQH 457555 WARMAC SETUP + SETQM 457563 WARMAC SETUP + SETRAN 457204 WARMAC SETUP + SETSCN 457310 WARMAC SCAN + SETUP 10004 SETUP DECWAR WARMAC + SETU01 12214 SETMSG SETUP + SETU02 12230 SETMSG SETUP + +Global Cross Reference for DECWAR version (20) page 28 + +Flags Symbol Octal value Defined in Referenced in + + SETU03 12240 SETMSG SETUP + SETU04 12246 SETMSG SETUP + SETU05 12262 SETMSG SETUP + SETU06 446367 MSG TYPE SETUP + SETU07 446376 MSG TYPE SETUP + SETU11 12271 SETMSG SETUP + SETU12 12300 SETMSG SETUP + SETU13 12310 SETMSG SETUP + SETU14 12317 SETMSG SETUP + SETU15 12326 SETMSG SETUP + SETU16 12336 SETMSG SETUP + SETU17 12343 SETMSG SETUP + SETU18 12354 SETMSG SETUP + SET001 446247 MSG SET + SET002 446272 MSG SET + SET003 446276 MSG SET + SET004 446305 MSG SET + SET005 446316 MSG SET + SET006 446323 MSG SET + SET007 446336 MSG SET + SET008 446351 MSG SET TYPE + SET009 446355 MSG SET + SET010 446362 MSG SET + SHIELD 435761 SHIELD DECWAR + SHLD01 446406 MSG SHIELD + SHLD02 446413 MSG SHIELD + SHLD03 446424 MSG SHIELD + SHLD04 446437 MSG SHIELD + SHLD05 446444 MSG SHIELD + SHLD06 446452 MSG SHIELD + SHLD07 446457 MSG SHIELD + SHLD08 446470 MSG SHIELD + SHLD09 446476 MSG SHIELD + SHOSTA 463524 WARMAC PREGAM + SHTFRM 446512 MSG SET TYPE + SHWSCN 457476 WARMAC SCAN + SKIP 456123 WARMAC DAMAGE +C SNLOCL 3556 SNOVA SNOVA + SNOVA 436266 SNOVA ROMTOR TORP + SPACE 456150 WARMAC DAMAGE LSTSUM LSTOBJ OUTHIT POINTS PRLOC STATUS + SPACES 456142 WARMAC DAMAGE POINTS USERS + SRSCAN 434446 SCAN DECWAR + STABUF 5243 WARMAC + START 461077 WARMAC SETUP + STAR02 446514 MSG OUTHIT + STAT 457047 WARMAC USERS + STATUS 436532 STATUS DECWAR DOCK + STAT05 446535 MSG STATUS + STAT11 446566 MSG STATUS + STAT2L 446523 MSG STATUS + STAT2M 446525 MSG STATUS + STAT3L 446527 MSG STATUS + +Global Cross Reference for DECWAR version (20) page 29 + +Flags Symbol Octal value Defined in Referenced in + + STAT3M 446533 MSG STATUS + STAT6L 446537 MSG STATUS + STAT6M 446541 MSG STATUS + STAT7L 446543 MSG STATUS + STAT7M 446546 MSG STATUS + STAT8L 446550 MSG STATUS + STAT8M 446553 MSG STATUS + STAT9L 446555 MSG STATUS + STAT9M 446560 MSG STATUS + STAZAP 464015 WARMAC PREGAM + STA10L 446562 MSG STATUS + STA10M 446564 MSG STATUS + STOP. 455110 WARMAC + STRDAT 446570 MSG DECWAR MOVE + STRTUP 12370 SETMSG PREGAM + STU17A 12350 SETMSG SETUP + SUMMAR 415453 LIST DECWAR PREGAM + SURE00 446573 MSG DECWAR + SWDUSR 470434 GWDUSR + SYNTAX 446602 MSG SCAN STATUS + TAB 456133 WARMAC DAMAGE LSTOBJ POINTS + TARGET 415514 LIST DECWAR + TELL 437441 TELL DECWAR ROMDRV + TELL01 446605 MSG TELL + TELL02 446613 MSG TELL + TELL03 446616 MSG TELL + TELL04 446626 MSG TELL + TELL05 446634 MSG TELL + TELL06 446642 MSG TELL + TELL07 446651 MSG TELL + TELL08 446663 MSG TELL + TELL09 446667 MSG TELL + TERGET 470220 TRMOPS MAKUSR + TERSET 470233 TRMOPS RSTUSR + TIME 440175 TIME DECWAR PREGAM +C TIMERS 405562 HIGH HIGH WARMAC + TIME01 446701 MSG TIME + TIME02 446706 MSG TIME + TIME03 446713 MSG TIME + TIME04 446720 MSG TIME + TIME05 446725 MSG TIME + TIMIN 461113 WARMAC ROMDRV + TIMOUT 461122 WARMAC ROMDRV +C TOLOCL 4322 TORP TORP + TORDAM 440322 TORDAM ROMTOR TORP + TORMIS 446732 MSG OUTHIT + TOROM 433273 ROMDRV TORP + TORP 441470 TORP DECWAR + TORP00 446742 MSG TORP + TORP01 446751 MSG TORP + TORP02 446763 MSG TORP + TORP03 446771 MSG TORP + +Global Cross Reference for DECWAR version (20) page 30 + +Flags Symbol Octal value Defined in Referenced in + + TORP04 447000 MSG TORP + TORP05 447002 MSG TORP + TORP06 447005 MSG TORP + TORP07 447012 MSG TORP + TRACTR 443041 TRACTR DECWAR + TRACT1 447016 MSG TRACTR + TRACT2 447025 MSG TRACTR + TRACT3 447040 MSG TRACTR + TRACT4 447050 MSG TRACTR + TRACT5 447070 MSG TRACTR + TRACT6 447101 MSG TRACTR + TRACT7 447110 MSG TRACTR + TRACT8 447123 MSG TRACTR + TRAP 443411 TRAP + TRCOFF 443274 TRACTR FREE NOVA ROMTOR SHIELD TORP + TRMTB. 470250 TRMTB. TRMOPS + TTYON 455255 WARMAC DECWAR GETCMD PREGAM + TTYS00 447136 MSG SET + TYPE 443434 TYPE DECWAR PREGAM + TYPE01 447157 MSG TYPE + TYPE02 447172 MSG TYPE + TYPE03 447201 MSG TYPE + TYPE04 447204 MSG TYPE + TYPE05 447210 MSG TYPE + TYPE06 447213 MSG LSTFLG TYPE + TYPE07 447222 MSG TYPE + TYPE08 447231 MSG TYPE + TYPE09 447240 MSG TYPE + ULOFT. 6624 USRTMP LOFCHK + ULOG. 6603 USRTMP ENCODE + UNITS1 447250 MSG DAMAGE OUTHIT + UNKCOM 447252 MSG GETCMD PASWRD WARMAC XGTCMD + UNKSHP 447256 MSG ENERGY RADIO TRACTR + UNKSWI 447262 MSG + UNLOCK 461462 WARMAC BUILD CAPTUR FREE MOVE NOVA ROMTOR TORP CC1 CC2 SETUP + UPASS. 6577 USRTMP ENCODE + UPDCAP 463213 WARMAC SETUP + UPDSTA 463322 WARMAC DECWAR ENDGAM GETCMD + USBLK. 6574 USRTMP MAKUSR + USCBH. 6617 USRTMP WARMAC + USCIP. 6604 USRTMP + USDEV. 6566 USRTMP MAKUSR + USERS 444011 USERS DECWAR PREGAM + USERS1 447265 MSG USERS + USERS2 447300 MSG USERS + USERS3 447303 MSG + USERS4 447315 MSG + USERS5 447320 MSG USERS + USEXT. 6570 USRTMP + USFIL. 6567 USRTMP + USHST. 6575 USRTMP MAKUSR + USID1. 6557 USRTMP WARMAC MAKUSR + +Global Cross Reference for DECWAR version (20) page 31 + +Flags Symbol Octal value Defined in Referenced in + + USID2. 6560 USRTMP WARMAC MAKUSR + USLEN. 100 USRTMP RDUSR. WTUSR. + USLPN. 6615 USRTMP + USMDV. 6613 USRTMP + USMEN. 6610 USRTMP + USMIP. 6607 USRTMP + USMNM. 6614 USRTMP + USMXT. 6625 USRTMP LOFCHK + USNTP. 6561 USRTMP MAKUSR + USNXT. 6612 USRTMP + USPGM. 6616 USRTMP + USPPN. 6556 USRTMP WARMAC RDUSR. WTUSR. MAKUSR GWDUSR ENCODE + USPRI. 6611 USRTMP + USRNAM 460717 WARMAC SET + USRPRJ 460360 WARMAC PASWRD + USSTP. 6573 USRTMP MAKUSR + USTAT. 6576 USRTMP WARMAC + USTER. 6562 USRTMP WARMAC MAKUSR RSTUSR + USTIP. 6605 USRTMP + USTOP. 6606 USRTMP + USTRM. 6572 USRTMP + USYOLN 51 USRTMP + US.PPN 6571 USRTMP MAKUSR + UTNOD. 6626 USRTMP + WRPDAM 447321 MSG MOVE + WTUSR. 470200 WTUSR. MAKUSR + XGTCMD 11741 XGTCMD PREGAM + Z 12110 Z WARMAC + ZAPLOK 461476 WARMAC GETCMD + .JBAPR 125 JOBDAT WARMAC + .JBDDT 74 JOBDAT WARMAC + .JBFF 121 JOBDAT WARMAC + .JBINT 134 JOBDAT WARMAC + .JBREL 44 JOBDAT WARMAC + .JBREN 124 JOBDAT WARMAC + .JBSA 120 JOBDAT WARMAC + .JBTPC 127 JOBDAT WARMAC + .JBVER 137 JOBDAT WARMAC + + [End of LINK map of DECWAR] diff --git a/pdp10/compuserve/docs/DECWAR.NDX b/pdp10/compuserve/docs/DECWAR.NDX new file mode 100644 index 0000000..7ddec2d --- /dev/null +++ b/pdp10/compuserve/docs/DECWAR.NDX @@ -0,0 +1,72 @@ +Page 1 program decwar +Page 3 BLOCK DATA +Page 4 subroutine BASBLD +Page 5 subroutine BASKIL (itype) +Page 6 subroutine BASPHA +Page 7 subroutine BUILD (*) +Page 8 subroutine CAPTUR (*) +Page 9 subroutine CHECK (H, V, dH, dV, dist, displ) +Page 10 subroutine CHKPNT (c, c1, c2) +Page 11 subroutine CLRBUF +Page 12 subroutine DAMAGE (stoken) +Page 13 subroutine DIST (ip, np, num) +Page 14 subroutine DOCK (*) +Page 15 subroutine DSHIP +Page 16 subroutine ENDGAM +Page 17 subroutine ENERGY +Page 18 subroutine FREE (snum) +Page 18 entry RSTART (snum) +Page 19 subroutine GETCMD (cmd) +Page 20 subroutine JUMP (nplc, j) +Page 21 subroutine KQSRCH (ttynum, jobnum, ppn, kindex) +Page 22 subroutine LIST +Page 22 entry SUMMAR !command is SUMMARY +Page 22 entry BASES +Page 22 entry PLANET +Page 22 entry TARGET +Page 23 function LOCATE (n) +Page 23 entry RELOC (n) +Page 24 subroutine LSTSCN (*) +Page 25 subroutine LSTFLG (*) +Page 26 subroutine LSTUPD (lstmsk, objctr, scnbts, xxf) +Page 27 subroutine LSTOUT +Page 28 subroutine LSTSUM (n, str, f) +Page 29 subroutine LSTOBJ +Page 30 subroutine MOVE (*) +Page 30 entry IMPULS (*) +Page 31 subroutine NOVA (nplc, j) +Page 32 subroutine OUTHIT +Page 33 subroutine OUTMSG +Page 34 subroutine PASWRD +Page 35 subroutine PHACON (*) +Page 36 subroutine PLACE (object, n, V, H) +Page 37 subroutine PLNATK +Page 38 subroutine PLNRMV (i,pteam) +Page 39 subroutine POINTS (DFLG) +Page 40 subroutine PRIDIS (iV, iH, ilim, iflag, zero) +Page 41 subroutine PRLOC (v, h, prcflg, w, prlflg, proflg) +Page 42 subroutine PROMPT +Page 43 subroutine RADIO +Page 44 subroutine REPAIR (il,*) +Page 45 subroutine ROMDRV (phit, id) +Page 45 entry PHAROM (phit, id) +Page 45 entry DEADRO (phit, id) +Page 45 entry TOROM (phit, id) +Page 46 subroutine ROMSTR (iV, iH) +Page 47 subroutine ROMTOR (iV1, iH1) +Page 48 subroutine SCAN +Page 48 entry SRSCAN +Page 49 subroutine SET +Page 50 subroutine SHIELD +Page 51 subroutine SNOVA +Page 52 subroutine STATUS (stoken) +Page 53 subroutine TELL +Page 54 subroutine TIME +Page 55 subroutine TORDAM (nplc, j, id, phit, ship) +Page 55 entry PHADAM (nplc, j, id, phit, ship) +Page 56 subroutine TORP (*) +Page 57 subroutine TRACTR (ip) +Page 57 entry TRCOFF (ip) +Page 58 subroutine TRAP +Page 59 subroutine TYPE +Page 60 subroutine USERS diff --git a/pdp10/compuserve/docs/DECWAR.TAP b/pdp10/compuserve/docs/DECWAR.TAP new file mode 100644 index 0000000..77c6d15 --- /dev/null +++ b/pdp10/compuserve/docs/DECWAR.TAP @@ -0,0 +1,42 @@ +dskc:[10,30,decwar,hlp]DECWAR.IMP +gam:DECWAR.EXE +gam:DECWAR.HLP +gam:DECWAR.NWS +gam:DECWAR.GRP +dskc:[10,30,decwar]HIGH.FOR +dskc:[10,30,decwar]LOW.FOR +dskc:[10,30,decwar]DECWAR.FOR +dskc:[10,30,decwar]WARMAC.MAC +dskc:[10,30,decwar]MSG.MAC +dskc:[10,30,decwar]SETUP.FOR +dskc:[10,30,decwar]SETMSG.MAC +dskc:[10,30,decwar,hlp]DECWAR.RNH +dskc:[10,30,decwar,hlp]DECNWS.RNO +dskc:[10,30,decwar]PARAM.FOR +dskc:[10,30,decwar]HISEG.FOR +dskc:[10,30,decwar]LOWSEG.FOR +dskc:[10,30,decwar]EXTERN.FOR +dskc:[10,30,decwar]SETEXT.FOR +dskc:[10,30,decwar]LSTVAR.FOR +dskc:[10,30,decwar]HIGH.REL +dskc:[10,30,decwar]LOW.REL +dskc:[10,30,decwar]DECWAR.REL +dskc:[10,30,decwar]WARMAC.REL +dskc:[10,30,decwar]MSG.REL +dskc:[10,30,decwar]SETUP.REL +dskc:[10,30,decwar]SETMSG.REL +dskc:[10,30,decwar]L.MIC +dskc:[10,30,decwar]PARAM.SAV +dskc:[10,30,decwar]HISEG.SAV +dskc:[10,30,decwar]LOWSEG.SAV +dskc:[10,30,decwar]EXTERN.SAV +dskc:[10,30,decwar]SETEXT.SAV +dskc:[10,30,decwar,tec]PARAM.TEC +dskc:[10,30,decwar,tec]HISEG.TEC +dskc:[10,30,decwar,tec]LOWSEG.TEC +dskc:[10,30,decwar,tec]EXTERN.TEC +dskc:[10,30,decwar,tec]SETEXT.TEC +dskc:[10,30,decwar,hlp]MAKHLP.MIC +dskc:[10,30,decwar,hlp]MAKNWS.MIC +dskc:[10,30,decwar,tec]NDX.TEC +dskc:[10,30,decwar,tec]PAGE.TEC diff --git a/pdp10/compuserve/docs/HLP.COM b/pdp10/compuserve/docs/HLP.COM new file mode 100644 index 0000000..c7a5d4a --- /dev/null +++ b/pdp10/compuserve/docs/HLP.COM @@ -0,0 +1,19 @@ +DECNWS.RNO ;RUNOFF source file for DECWAR.NWS document. +DECWAR.DIC ;Dictionary file for DECWAR documentation when using SPELL. +DECWAR.HLP ;Current DECWAR Help file CONTAINING SYSTEM COMMENTS. Will + ;be accessed by DECWAR player if he has Password set (instead + ;of GAM: help file). Should NOT be put on GAM:, if a new + ;copy needed, use MAKHLP. +DECWAR.IMP ;RUNOFF source file for DECWAR implementation notes. +DECWAR.LTR ;RUNOFF source file for response letter to enquiries for + ;the source. +DECWAR.NWS ;Current DECWAR News file (should also be on GAM:). +DECWAR.RNH ;RUNOFF source file for DECWAR.HLP document. +DEFINE.HLP ;Help text for defunct DEFINE command. Probably will never + ;be implemented again, but... +HLP .COM ;DMS comment file for [10,30,DECWAR,HLP] SFD. +LICENS.MEM ;Decwar License agreement document. +LICENS.RNO ;RUNOFF source file for License agreement. +MAKHLP.MIC ;MICro to generate DECWAR.HLP files (either with or without + ;'System' comments). +MAKNWS.MIC ;MICro to generate DECWAR.NWS file. diff --git a/pdp10/compuserve/docs/MSC.COM b/pdp10/compuserve/docs/MSC.COM new file mode 100644 index 0000000..b3d486f --- /dev/null +++ b/pdp10/compuserve/docs/MSC.COM @@ -0,0 +1,11 @@ +DECW11.FXD ;Fixed gripes as of version 1.2 update. +DECW13.FXD ;Fixed gripes as of version 2.0 update. +DECW21.FXD ;Fixed gripes as of version 2.2 update. +DEFINE.FOR ;Archived source code for defunct DEFINE command (was used + ;to define/redefine radio message groups). +MSC .COM ;DMS comment file for [10,30,decwar,msc] SFD. +OUTHDB.FOR ;Fortran 'chunk' for insertion in OUTHIT subroutine in DECWAR + ;when debugging hit messages (will echo back parameters + ;returned by GETHIT call). +TTY .EXE ;Routine to echo ASCII character codes. +TTY .MAC ;Source to TTY.EXE diff --git a/pdp10/compuserve/docs/PDWDOC.XF4 b/pdp10/compuserve/docs/PDWDOC.XF4 new file mode 100644 index 0000000..de031e3 --- /dev/null +++ b/pdp10/compuserve/docs/PDWDOC.XF4 @@ -0,0 +1,72 @@ + options twoseg,literals(high),control + program pdwdoc +c Print documentation for DECWAR + + implicit integer (a-z) + string line + dimension route(7, 7) + + call rstusr ! get tmpcor:usr in place + call gwdusr(0, ppn) ! get user's ppn + call gwdusr(16, status) ! and his status bits + if ((status .and. %100000000000) .ne. 0) then + type "('0Sorry, but you are NOT authorized to')" + type "(' make purchases at this time.')" + goto $exit + endif + type "('0The DECWAR documentation will be')" + type "(' printed at our standard line printer')" + type "(' rates of 10 cents/page plus $1.50')" + type "(' postage and handling. The net cost')" + type "(' will be approximately $4.00 and will')" + type "(' be added to your account.')" + type "('0Do you wish to receive this document? '$)" + accept "([L])", line + if (upper(line) .ne. "Y") goto $exit + open (unit=20, file='DECWAR.DOC', device='DSK', mode='ASCII', + & access='SEQIN', err=$exit) + +$gad: type "('0Please enter mailing information,')" + type "(' enter a blank line to terminate:'/)" + do $clr, i = 1, 7 + do $clr, j = 1, 7 + route(i,j) = ' ' +$clr: continue + pj = ppn/%1000000 + pg = ppn .and. %777777 + encode (32, "(o6','o6)", route(1,1)) pj, pg + i = 1 +$nad: accept "(6a5,a2)", (route(j, i+1), j=1,7) + do $zch, j = 1, 7 + if (route(j,i+1) .ne. ' ') goto $nad0 +$zch: continue + goto $hvadr +$nad0: i = i + 1 + if (i .eq. 7) goto $hvadr + goto $nad + +$hvadr: if (i .eq. 0) then + type "('0I can''t mail it to you unless')" + type "(' I have your address!')" + goto $gad + endif + type "('0Please wait while I print the file....')" + + call devwhe ('LPT', curloc) + call devloc ('LPT', 'COL', lstat) + open (unit=21, file='DECWAR.tmp', device='LPT', mode='FCC', + & access='SEQOUT') + call forms (21, 1, 117, 7, route(1,1), route(1,2), route(1,3), + & route(1,4), route(1,5), route(1,6), route(1,7)) + +$cpy: read (20, "([V])", end=$cpye) line + write (21, "(x[V])") line + goto $cpy + +$cpye: close (unit=21) + close (unit=20) + call devloc('LPT', curloc, lstat) + type "('0Thank you for waiting!'/)" + +$exit: call runit (20, 'DECWAR') + end diff --git a/pdp10/compuserve/docs/TO.DO b/pdp10/compuserve/docs/TO.DO new file mode 100644 index 0000000..fdb3462 --- /dev/null +++ b/pdp10/compuserve/docs/TO.DO @@ -0,0 +1,56 @@ +| => indicates appropriate alterations have been made. +* => can't be done +x => don't do +? => questionable + +=================================================================== + +? 1. Flash for a week or so after every new version. +x 2. NOTE command: +x NOTE INSERT/ADD; txt +x NOTE DELETE nn/* +x NOTE PRINT/LIST nn/* +| 3. SET command: +? SET LOCATION/LOOK?/APPROXIMATE? y,x +| 4. Allow commands before player is actually in the game: +| HELP +| NEWS +| USERS +| GRIPE +| PASSWORD +| SET NAME/OUTPUT/PROMPT/TTYTYPE + Allow commands before entry into game if password is set: + SET LOCATION + SCAN +* 5. Get speed of controlling TTY if logged on to PTY. +* 6. Fix game to delete itself if it's run from a project number > 1000. + 7. Extension of LIST command: + record with each planet the time it was captured + record with each base the time it was built + record with each ship the time it entered the game (already there?) + allow selection of objects by time: + SINCE hh:mm + BEFORE hh:mm +| LIST FEDERATION SHIPS {WITHIN} 10 {SECTORS} + LIST ENEMY PLANETS {CAPTURED} SINCE 23:54 + LIST ENEMY SHIPS {CREATED?} BEFORE 23 +| LIST SUMMARY {OF} ENEMY BASES + LIST ENEMY BASES {BUILT} SINCE -0:5 + 8. Add records for highest score, etc., and add ratings for individual + players. +? 9. Implement probation period. + 10. Change program to + DW-{F/E}{TI/RN/SL} + 11. ^C during HIBER (especially long ones) can exceed max allowable + ^C count and abort. + 12. Check for time limit error, and set CCFLG (and maybe reset + the time limit to 5 seconds or so). Time limit will now be set + when a line is hung up instead of immediate disconnect! On ALL + input, if CCFLG is set afterwards, you should ALWAYS either + return to either monitor mode or command mode. CCFLG can be + set if + ER.ICC ^C (usually the case) + ER.TLC time limit or hang up +? 13. Allow Ramming between ships. + 14. 'Beam' scans. + 15. Check out end-game (# of planets, bases). diff --git a/pdp10/decwar.md b/pdp10/decwar.md new file mode 100644 index 0000000..fba2ef4 --- /dev/null +++ b/pdp10/decwar.md @@ -0,0 +1,1409 @@ + DECWAR GAME INSTRUCTIONS Page 1 + + + DECWAR Version 2.3, November 20, 1981 + + + Introduction and Overview of the Game of DECWARs. + + DECWAR is a real time space battle game designed to be + played by from 1 to 10 people. The object of the game is to + destroy all enemy bases and ships, and capture all enemy + planets, before the enemy does the same to you. Each person + plays on a separate terminal, and enters the game by selecting + + 8 DECWAR (on the MultiPlayer Host) + + Players are free to enter and leave the game as desired, since + each has his own job and therefore won't interfere with the + other players (the jobs interact through a shareable high + segment). + + + Besides the enemy (Federation or Empire), the following may + also be a threat to your well being. + + 1. Romulans are nasty beasts that beginners are better off + without. However, if you're the only person playing, + the Romulan is your only competition. Romulans tend to + make for shorter games but when there are 3 or less + players a Romulan will be included. After the fourth + player joins the game, a Romulan will not be re-created + once he is destroyed. include Romulans in the game. + + 2. Black holes are annoying, since if you are displaced + into one, you're dead. They also tend to gobble up + stray torpedos. There is a 25% chance of black holes + being included in the game. + + + There are two primary opposing forces in the galaxy -- + Humans (Federation) and Klingons (Empire). As you enter the + game for the first time, you get to choose which side you'll + join (unless there is a large imbalance in the team sizes). If + you are subsequently destroyed and later reenter the game, you + automatically rejoin your old team. + + You get to select the ship you want to control from a list + of remaining ships on your side. There are 5 ships on each + side: + + Federation ships Empire ships + ---------------- ------------ + Lexington Cobra + Nimitz Demon + Savannah Hawk + Vulcan Jackal + Yorktown Wolf + + DECWAR GAME INSTRUCTIONS Page 2 + + + Due to continuous espionage activities, present front-line + ships of the Federation and the Klingon Empire are identical in + strength and weaponry. These ships can move from sector to + sector using either warp or impulse engines, can attack enemy + installations and ships using either photon torpedoes or + phasers, and can defend themselves against such attack using + their deflector shields. All ships also possess sub-space + radios which keep them in touch with friendly starbases and + other ships. + + + The various devices of a ship are subject to damage. This + damage may be due to enemy attack or to over use. These + damages, unlike total ship damage (see ship attributes below), + may be repaired while underway. If damage on a device is less + than 300 units, its performance is degraded. If damage is 300 + or more units, the device is inoperative. A ship possesses the + following devices: + + 1. Warp Engines -- These engines are the normal mode of + travel for starships. The maximum speed is warp factor + 6, with warps 5 and 6 risking potential damage to the + engines. If warp engines are damaged (less than 300 + units) the maximum speed is warp factor 3. + + + NOTE + + One warp unit is equivalent to one horizontal + or one vertical grid movement. A diagonal + movement is equivalent to the hypotenuse of the + horizontal and vertical sides. + + + + 2. Impulse Engines -- These engines are basically for + emergency use while the warp engines are critically + damaged. Impulse engines move the ship at warp factor + 1. + + 3. Photon Torpedo Tubes -- Used to fire photon torpedoes. + If these tubes are damaged, the accuracy of torpedo + bursts is impaired. The maximum torpedo range is 10 + sectors. + + 4. Phaser Banks -- Each ship possesses two phaser banks, + with a single phaser control. Damage to this phaser + control or to the ship's computer reduces the strength + of the phaser hit. + + 5. Deflector Shields -- The deflector shields of a ship + protect it from damage from phaser and photon torpedo + hits, and shield it from the energy released when a + star goes nova. The percent shield strength indicates + the percent of the incoming hit which will be + nullified. In addition, strong deflector shields may + deflect photon torpedoes with little or no damage. + DECWAR GAME INSTRUCTIONS Page 3 + + + NOTE: If a ship's shields are up, the amount of energy + expended during movement is doubled. + + 6. Computer -- The ship's computer is used for computed + firing, computation during ship movement, and for + phaser control. If the computer is inoperative, + navigation during warp and impulse movement becomes + inexact. + + 7. Life Support -- If the life support units of a starship + are inoperative, the ship must either repair this + damage or dock within 5 stardates. If this is not + accomplished, the crew will die. + + 8. Sub-Space Radio -- The sub-space radio is used to + communicate with other ships, of either side. Bases + under attack also use the sub-space radio to call for + help and notify their team's ships of their + destruction. + + 9. Tractor Beam -- The ship's tractor beam is used + primarily to tow damaged friendly ships away from + danger. The beam can not be used unless both ships + have lowered their shields. + + + In addition to the individual devices discussed above, a + newly commissioned ship (or a fully repaired and rearmed older + ship) possesses the following attributes: + + 1. 5000 units of ship energy. Ship energy is used during + movement and phaser firing. It is also decreased each + time the ship gets hit with phasers or photon + torpedoes. If this quantity ever reaches zero, the + ship is dead. A ship possessing 1000 units of ship + energy or less automatically goes to yellow alert, and + a warning bell sounds after every move. + + 2. 2500 units of shield energy. This energy is stored in + the ship's shields (whether up or down), and is + separate from the ship energy. However, energy may be + transferred between these two energy reserves as + needed. If shields are up, their energy is decreased + each time the ship gets hit. + + 3. Zero units of ship damage. During battle, a ship + collects hits from enemy installations and ships. If + these accumulated hits ever reach 2500 units of damage + or greater, the ship is destroyed. Ship damage may be + reduced only by docking. + + + The galaxy is arranged in a grid of 75 by 75 sectors. + Players can move freely throughout the galaxy in search of + enemies, which come in several categories: + DECWAR GAME INSTRUCTIONS Page 4 + + + 1. Romulan. This can be the most dangerous thing to come + up against, and fortunately there is a maximum of 1 + Romulan in the game at any given time. The Romulan + moves around concealed by his cloaking device until he + comes across a suitable target (Federation or Empire + ship or base) which he immediately proceeds to attack. + An infinite supply of torpedoes and energy make him a + formidable foe. If you kill one, another will + eventually appear somewhere in the galaxy. + + 2. Enemy ship. This is the second most dangerous thing to + come across, since all enemy ships are backed by human + intelligence. All ships are created equal, and so the + outcome of a clash between two ships is usually due to + skill on its captain's part, although some other + factors do come into play. + + 3. Enemy base. These aren't dangerous unless you come + within range (4 sectors) since they are immobile. If + you ARE foolish enough to get within range, however, + their overwhelming phaser power will quickly pound you + into rubble! Destroying a base is useful primarily + because this removes it from use by your enemy (bases + are used as supply stations and as a refuge in times of + stress). A damaged starbase will slowly build itself + back to full strength if it is not completely + destroyed. + + 4. Enemy planet. These are just like enemy bases, except + that they are weaker (how much weaker depends on how + many fortifications the enemy has built on them), and + they can be captured. Their firing range is only two + sectors, and they can re-supply the enemy less rapidly + than can a base. + + 5. Neutral planet. While these aren't strictly classified + as enemies, they will take pot shots at you (their + range is also 2 sectors), so be wary of them. You can + capture neutral planets and win them over to your side. + + + + When playing the game, all commands can be abbreviated to 2 + characters, and some can be abbreviated to 1 character (you can + use the shortest unambiguous abbreviation). For a list of + commands type + + HELP * + + and for a description of an individual command type + + HELP command + + The help on individual commands will be read from this help file + (that's what the periods in column 1 are for in the long + description of each command). The legal commands are: + DECWAR GAME INSTRUCTIONS Page 5 + + + 1. BASES -- List information on friendly and known enemy + bases. + + 2. BUILD -- Develop installations on a planet, and + eventually build it into a base. The planet must first + be captured. + + 3. CAPTURE -- Win a neutral or enemy planet over to your + side. + + 4. DAMAGES -- List damaged devices and their current + status. + + 5. DOCK -- Dock at an adjacent base or planet. This + increases your energy, replenishes your torpedoes, + repairs your ship a little, and reduces your ship + damage. + + 6. ENERGY -- Transfer energy between two ships. + + 7. GRIPE -- Record bugs, comments, suggestion, etc. in + the file GAM:DECWAR.GRP, which is periodically reviewed + by the implementors. + + 8. HELP -- List or describe the legal commands. + + 9. IMPULSE -- Move using impulse engines. + + 10. LIST -- List various information about ships, bases, + and planets. + + 11. MOVE -- Move using warp engines. + + 12. NEWS -- Tell about any new features or enhancements + described in the file GAM:DECWAR.NWS. + + 13. PHASERS -- Fire phasers at a target. + + 14. PLANETS -- List information on friendly and known enemy + and neutral planets. + + 15. POINTS -- List your score breakdown so far. + + 16. QUIT -- Get out of the game. + + 17. RADIO -- Turn ship's sub-space radio on or off; ignore + or restore communications from individual ships. + + 18. REPAIR -- Repair your damaged devices a little. + + 19. SCAN -- Display the galaxy with the default range set + to maximum (10 sectors in each direction from your + ship). + + 20. SET -- Set various input and output defaults. + DECWAR GAME INSTRUCTIONS Page 6 + + + 21. SHIELDS -- Transfer energy to or from your shields; + raise or lower your shields. + + 22. SRSCAN -- Display the galaxy with a default range of 7 + sectors (1 greater than the maximum warp factor). + + 23. STATUS -- List your ship's current status and supply + levels. + + 24. SUMMARY -- List various information on ships, bases, + and planets. + + 25. TARGETS -- List targets (enemies within range) and + their current locations. + + 26. TELL -- Send messages to other ships using the + sub-space radio. + + 27. TIME -- List information on run time and elapsed time. + + 28. TORPEDOES -- Fire photon torpedoes at a target. + + 29. TRACTOR -- Use tractor beam to tow friendly ships. + + 30. TYPE -- List current input, output, and game + characteristics. + + 31. USERS -- List the names and other information known + about the players currently in the game. + + + + DECWAR GAME INSTRUCTIONS Page 7 + + + General INPUT information + + - Only the first 5 characters of each input word are stored. + Any characters beyond that are ignored. + - Input words may be separated by spaces, tabs, or commas. + - The input line can be terminated with , , , , + , or ^Z. + - ^G toggles echo. At the beginning of each input line, echoing + is turned on. Typing ^G turns it off, the next ^G turns it + back on, etc. Echoing is always turned back on at the end of + an input line, or if ^U is typed. + - Multiple commands may be given on a single command line by + separating the commands with / (slash). If the TELL command + is given, it must be last on the line. + - Anything after ; (semicolon) is treated as a comment and is + ignored (but TELL rescans the line and takes the text after + the first ; as the message to send). + - (escape, or altmode) entered as the first character in + response to the command prompt (even before ^H, ^U, or ^R) + repeats the previous command. This is useful when building a + planet, docking, repairing, firing torpedoes, etc. Altmode + can't be used to repeat a TELL command. + + - Any ship name can be abbreviated to 1 character. + - Any command or keyword can be shortened to the shortest + unambiguous abbreviation, which is never more than 2 + characters. + + - Many commands require a coordinate as an argument (PHASERS, + TORPEDOES, CAPTURE, BUILD, etc.). The required coordinate(s) + can be specified in one of three ways: + Absolute - the default coordinate input type, which is simply + an absolute vertical position followed by an absolute + horizontal position. The coordinate may be preceded by the + keyword ABSOLUTE, but this isn't necessary unless the + default coordinate input type has been changed by SET ICDEF + RELATIVE. + Relative - the keyword RELATIVE, followed by a relative + vertical distance and a relative horizontal distance. A + positive distance is either up or right, and negative is + either down or left. The absolute coordinate is computed by + adding the relative distances to your current position. The + keyword RELATIVE isn't needed if the default coordinate + input type has been changed by SET ICDEF RELATIVE. + Computed - the keyword COMPUTED followed by a ship name. The + coordinate used is the location of the given ship. This + type of coordinate computation is available only to captains + controlling their ships through slow terminals (< 1200 + baud), and requires an operational computer. + The keyword ABSOLUTE, RELATIVE, or COMPUTED is only given one + time for each set of coordinates. For instance, the TORPEDO + command can accept up to 3 coordinates, but the keyword + describing the coordinate input type is given only once, and + all coordinates must be of the same type. + + + DECWAR GAME INSTRUCTIONS Page 8 + + + General OUTPUT information + + The SET OUTPUT LONG/MEDIUM/SHORT command controls the length of + text output throughout the game. In particular, Medium or Short + hit messages received during battle are greatly reduced in + length when compared to the Long format. Unfortunately, these + shorter forms are not as self-explanatory as the Long form. The + following are some equivalent Long, Medium and Short hit + messages: + + - Goblin @22-31, +83.6% makes 285.3 unit torpedo hit on + Vulcan displaced to 20-31, +72.1% + + G @22-31, +83.6% 285.3 unit T V -->20-31, +72.1% + + G 22-31 +83 285T V >20-31 +72 + + + - Emp planet(3) @15-16 makes 155.5 unit phaser hit on + Buzzard @15-17, 66.8% + + -@3 @15-16 155.5 unit P B @15-17, 66.8% + + -@3 15-16 155P B 15-17 +66 + + Note: The -@3 indicates an Empire planet built 3 times. + + + - Star @22-31 +4,+2 makes 301.2 unit hit on + Panther displaced to 20-31 +2,+2, -72.1% + + * @22-31 +4,+2 301.2 unit N P -->20-31 +2,+2, -72.1% + + * 22-31 +4,+2 301N P >20-31 +2,+2, -72 + + Note: The relative coordinates appear due to a SET OCDEF BOTH + command. The Panther's shields are 72.1% of max strength, but + down (-72.1%). + + + The Decwar PRE-GAME feature + + DECWAR provides a Pre-game feature to allow: + - New players to view the help file without entering the current + game. + - Experienced players to check the status of a current game + before choosing a side and ship. + - Players to submit Gripes without entering the game. + + The commands currently active within the Pre-game section are: + Activate Gripe Help News Points Quit + Summary Time Users + + The ACTIVATE command (valid only in the pre-game) is used to + exit the pre-game section and enter the normal ship setup stage. + The pre-game can be recognized from the 'PG>' command prompt. + DECWAR GAME INSTRUCTIONS Page 9 + + + Some general HINTS + + - When in doubt, use the on-line help system. See the help on + HELP for more information. + - If the output starts piling up in the middle of a battle, type + ^O (CTL-O). None of your commands will be executed until + output is finished, so it's sometimes better just to ignore + the hit messages so your attack or run commands can be + executed immediately. + - Use multiple commands per line (separate commands with /). + Once you're in a danger area, things can happen faster than + you can react to them. Plan your action ahead of time, before + you enter a danger area. + - If some unexpected action happens, such as an enemy finding + you, and you have several stacked commands (either from a + multiple command line or typing ahead), type ^C to abort all + stacked commands (especially if it involves time consuming + commands such as BUILD, or commands that generate a lot of + output, such as SCAN). You can then proceed to remedy the + situation by giving your unexpected visitor a good beating. + - If you're on a slow terminal, use computed coordinates, and + move around a lot if you're fighting someone on a fast + terminal. Computed coordinates are the primary advantage slow + terminals have over the fast ones (computed coordinates give + slow terminals a fantastic tactical advantage over fast + terminals when used properly). + - Use to repeat commands (see the help on ESCAPE). It's + just a convenience when building planets, etc., but in battle, + and combined with multiple commands per line and/or computed + coordinates (such as PH C B/M R 1 0 or TO 1 32 45), it can + make or break your career as a starship captain. + - Don't get within range of an enemy base, unless you enjoy + being pounded into rubble. You can kill a base just as well + from 1 sector outside it's range (use the WARNING keyword on + SCAN to see the range of an enemy base). + - Don't waste your energy and torpedoes firing at friendly ships + and bases. If you're not sure if it's friendly or not, type + HELP SCAN for a list of what's what. You can also use the + TARGETS command to see which enemies are lurking about (see + the help on TARGETS and LIST). + - Don't make it a habit of sitting next to stars; photon + torpedoes can turn them into novas, which are extremely + destructive. Conversely, if you notice an enemy ship or base + adjacent to a star, take advantage of the situation! + - One sure way to locate enemy ships is to watch for newly + captured enemy planets by using the PLANETS or LIST command. + - In general, don't waste photon torpedoes battering at a target + with 85-100% shields. The chances are good that they will + just be deflected harmlessly away. Use your phasers to weaken + the shields, then use torpedoes to finish him off. This is + especially true when attempting to destroy an enemy starbase. + - Use the SET command in DECWAR.INI to personalize the output to + your own tastes. That way you'll be guaranteed to have the + output set right each time you play a game. + - To always see the range and direction of any object listed (in + hit messages, output from the LIST command, etc.), SET OCDEF + BOTH. (The range is the magnitude of either delta v or delta + DECWAR GAME INSTRUCTIONS Page 10 + + + h, whichever is larger.) + + + Commands that take real time + + Many of the commands are designed to take a certain amount of + real time. This is done to help equalize the game when there + are different speed terminals and different speed typists in the + game. Some commands take a constant amount of time, and some + are based on the speed of the slowest terminal in the game. + + BUILD 5 to 7 seconds + CAPTURE 5 seconds + 1 second for each BUILD of enemy + planet + DOCK 2 to 4 seconds + IMPULSE 2 to 4 seconds + MOVE 2 to 4 seconds + REPAIR (0.08 * repair size) seconds (* 0.5 if docked) + + You have 2 phaser banks, each of which must be cooled off after + it's fired before it can be used again. Each phaser bank takes + 3 to 6 seconds plus the amount of phaser damage / 100 to cool + off. For instance, if there was a 300 baud terminal in the + game, and your phasers had 200 units of damage, each of your + phaser banks would take 6 + 2 = 8 seconds to cool off after + being fired. Therefore, you could fire once every 4 seconds, or + twice every 8 seconds. + + After each burst of torpedoes the tubes must be reloaded before + being used again. It takes 2 to 4 seconds plus the amount of + torpedo tube damage / 100 to load a torpedo. For instance, if + there was a 300 baud terminal in the game, your torpedoes had + 200 units of damage, and you had just fired 3 torpedoes, it + would take 3 * (4 + 2) = 18 seconds before you could fire + torpedoes again. + + + Use of ^C + + If you're in command input wait (DECWAR is waiting for you to + type a command), typing a ^C will abort the game and return you + to monitor mode. When you abort the game in this manner, your + ship is returned to the pool of available ships. You will be + able to continue unless a new player has taken your ship or + someone has moved into the spot you occupied. + + If you're not in a command input wait state when you type ^C, + any stacked commands (commands that you typed in ahead of time + that haven't been executed yet) will be aborted, and a series of + bells will be output. + + NOTE: A ship under RED alert conditions can not be returned to + the monitor level except by using the QUIT command. + DECWAR GAME INSTRUCTIONS Page 11 + + + List various BASE information + + Syntax: BAses [] + + List location and shield percent of friendly bases; location of + known enemy bases; or count of bases of either side within a + specified range or the entire galaxy. The default range is the + entire galaxy, and the default side is friendly bases only. See + the help for LIST for more information and the complete set of + keywords that can be used to modify BASES output. + + Examples: + + BA List location and shield percent of all friendly + bases. + BA ENEMY List location of all known enemy bases. + BA SUM Give summary of all friendly bases. + BA ALL SUM Give summary of all bases. + BA CL List the location and shield percent of the + closest friendly base. + BA 34 26 List the location and shield percent of friendly + base at 34-26 (it doesn't have to be friendly, + but you can't see the shield percent of an out + of range enemy base). + + + BUILD fortifications on a captured planet + + Syntax: BUild [Absolute|Relative] + + A fortified planet hits harder and is more resistant to + destruction by the enemy. A planet can normally be built up to + 4 times. As your team's starbases are destroyed by enemy + action, a fifth build will complete the construction of a new + starbase on the planet. Only 10 starbases can be functional at + any one time. + + Examples: + + BU 32 12 Build the planet at sector 32-12. + BU A 32 12 Equivalent to "BU 32 12" + BU R 1 1 Build the planet at sector 32-12, if your + present location is 31-11. + + + CAPTURE a neutral or enemy planet + + Syntax: CApture [Absolute|Relative] + + At the start of the game, all planets are neutral (they fire at + everyone!). Once captured by either side, they fire only at + enemy ships, and can be DOCKed at to refuel and rearm, just like + a base (except a planet can only supply half the resources that + a base can). Enemy planets can also be captured. When + capturing an enemy planet, 1 second is added to the normal pause + time of 5 seconds for each BUILD present. Also, 50 units of + ship energy are lost for each build. + DECWAR GAME INSTRUCTIONS Page 12 + + + Examples: + + CA 12 32 Capture planet at 12-32. + CA A 12 32 Equivalent to "CA 12 32". + CA R 1 1 Capture planet at sector 12-32, if your present + location is 11-31. + + + DAMAGE report + + Syntax: DAmages [] + + List damaged ship devices and the amount of damage to each. The + condition of all or just selected devices may be examined. + Total ship damage is not reported. + + Examples: + + DA List all damaged devices and their current + damages. + DA SH T List damages for SHields and Torpedo tubes. + DA PH RA C List damages for PHasers, sub-space RAdio, and + Computer. + + + DOCK at a friendly base or planet + + Syntax: DOck [Status []] + + Refuel, repair, and rearm your ship, and set your ship's + condition to green. While docked, any repairs are accelerated, + and you have an "infinite" supply of torps. If you have no + damages and are completely refueled and rearmed, DOCKing will + have no effect on your ship. A STATUS command string can be + appended to a DOCK order. The following table lists the maximum + resources available per move when DOCKing at a base or planet: + + Resource Base Planet + ---------------------------------------------- + Ship energy +1000 +500 + Shield energy +500 +250 + Photon Torpedoes +10 +5 + Life Support Reserves +5 +5 + Ship Damage -100 -50 + Ship Damage, if already docked -200 -100 + + Examples: + + DO Dock, no status report. + DO ST Dock, show ship's status AFTER docking. + DO ST SH T Dock, show ship's shield strength and number of + torpedos on board AFTER docking. + + + Transfer ENERGY to a friendly ship + + Syntax: Energy + DECWAR GAME INSTRUCTIONS Page 13 + + + The receiving ship must be located in an adjacent sector. 10% + of the energy transferred will be lost due to broadcast + dissipation. If you attempt to send more energy than the other + ship can store (ie 5000 units), the transfer will automatically + be reduced to the maximum possible. + + Example: + + E I 1000 Transfer 1000 units of energy to the Intrepid. + The Intrepid will receive 900 units of energy. + + + Submit a GRIPE + + Syntax: Gripe + + Add a comment, bug report, suggestion, etc. to the top of file + GAM:DECWAR.GRP. Type in your comments, then ^Z (CTL-Z) to exit + and continue the game, or ^C (CTL-C) to abort and not send the + gripe. Each gripe is preceded with a header that includes the + version number, date, time, ship name, user name, TTY speed, + PPN, TTY number, job number, and whether or not Romulans and/or + black holes are included in the game. Unless you are currently + under red alert, GRIPE will protect you from enemy attack. To + view gripes not yet acted upon, type the file GAM:DECWAR.GRP. + To view answered gripes, and see what action was taken on them, + type the file GAM:DECWAR.FXD. + + + Give HELP + + Syntax: Help [*|] + + Give general help info, a list of available commands, or a + detailed description of a particular command or keyword. Unless + you are under red alert, HELP will protect you from enemy + attack. The following conventions are used in the detailed + descriptions: + - The first line contains, in all caps, the keyword that help is + being given for. + - The syntax line (second line) lists the portion of the keyword + required to make it unique in caps, and the remainder of the + keyword in lower case, followed by any parameters (if the + keyword is a command). + - A quantity to be filled in is lower case and enclosed in <> + (angle brackets). + - Optional parameters are enclosed in [] (square brackets). + - A choice (either or) is indicated by | (vertical bar). + - Any parameter that must be typed in literally is started in + capital letters and continued in lower case. The upper case + letters signal the shortest unambiguous abbreviation (the + shortest abbreviation may change slightly, depending on + context). + + Examples: + + H Give general help info. + DECWAR GAME INSTRUCTIONS Page 14 + + + H * List all available commands. + H H List this block of text. + H SH Give help for the SHIELDS command. + H HI G Give some general HINTS and a description of the + GRIPE command. + + + Move using IMPULSE engines + + Syntax: Impulse [Absolute|Relative] + + Move one sector vertically, horizontally, or diagonally + (equivalent to warp factor 1). Ship condition changes to green. + + Examples: + + I 37 45 Move to sector 37-45. + I A 37 45 Equivalent to "I 37 45". + I R 1 -1 Move to sector 37-45, if your ship's present + location is 36-46. + + + LIST ship, base, and planet info + + Syntax: List [] + + The following information is available via the LIST command: + - Name of any ship currently in the game (including the + Romulan). + - Location and shield percent of any friendly ship, or any ship + within scan range (10 sectors). + - Location and shield percent of any friendly base, or any base + within range. + - Location of any known enemy base (any base that has previously + been SCANned or LISTed by anyone on your team). + - Location and number of builds of any known planet, or any + planet within range. + The above information is also available, in whole or in part, + through the SUMMARY, BASES, PLANETS, and TARGETS commands. Each + command has it's own default range, side (Federation, Empire, + Romulan, Neutral), and object (ship, base, planet). LIST (and + SUMMARY) include everything (infinite range, all sides, all + objects) by default. On output, enemy objects are flagged with + * (star) in column 1 unless the command is TARGETS. + + Keywords used with BASES, PLANETS, TARGETS, LIST, and SUMMARY + (not all keywords are legal for all commands): + + ship names Include only specified ships (several ship names + may be given, including Romulan). + vpos hpos List only the object at the location vpos-hpos. + CLosest List only the closest of the specified objects. + + SHips Include only ships (Federation, Empire, or + Romulan). + BAses Include only bases (Federation or Empire). + PLanets Include only planets (Federation, Empire, or + DECWAR GAME INSTRUCTIONS Page 15 + + + Neutral). + POrts Include only bases and planets. If no side is + specified (Federation, Empire, Neutral, or + Captured), include only friendly ports. + + FEderation Include only Federation forces. + HUman Same as Federation. + EMpire Include only Empire forces. + Klingon Same as Empire. + FRiendly Include only friendly forces (Federation or + Empire). + ENemy Include only enemy forces (Empire or Federation + and Romulan). + TArgets Same as enemy. + NEutral Include only neutral planets. + CAptured Include only captured planets (Federation or + Empire). + + n Include only objects within n sectors. + ALl Include all sides unless a side is explicitly + given. Extend the range to infinity unless a + range is explicitly given. + + LIst List individual items. Turn off summary unless + command is SUMMARY or the keyword SUMMARY is + specified. + SUmmary List summary of all selected items. Turn off + list unless command is LIST or the keyword LIST + is specified. Extend the range to infinity + unless a range is explicitly given. + + And Used to separate groups of keywords. + & Same as AND. + + Examples: + + LIST List all information available on all ships, + bases, and planets. + LIST SUM List all available info plus a summary of the + number of each object in game. + LI EN BA List the location of all known enemy bases. + LI SH List all available info on all ships in the + game. + LI CL PO List closest friendly base or friendly or + neutral planet. + LI 1 3 & 9 5 List the objects at locations 1-3 and 9-5. + + + MOVE using warp drive + + Syntax: Move [Absolute|Relative|Computed] + + Maximum speed is warp factor 6, which will move you 6 sectors + per turn. Maximum SAFE speed is warp factor 4; warp factors 5 + and 6 risk potential warp engine damage. Energy consumption per + move is proportional to the square of the warp factor. If the + ship's shields are up during this movement, the energy + DECWAR GAME INSTRUCTIONS Page 16 + + + consumption is doubled. Moving changes your ship's condition to + green. + + Examples: + + M 37 45 Move to sector 37-45. + M A 37 45 Equivalent to "M 37 45". + M R 4 -5 Move to sector 37-45, if your present location + is 33-50 (move up 4 sectors and left 5 sectors). + M C W "Ram" the Wolf. No actual collision occurs, but + your ship ends up adjacent to the Wolf's current + position. + + + Display the NEWS file + + Syntax: NEws + + Display the file which contains information on any new features, + enhancements, bug fixes, etc for each version of DECWAR. + + + Fire PHASERS at an enemy ship, base, or planet + + Syntax: PHasers [Absolute|Relative|Computed] [energy] + + + Phasers must be directed at a specific target, and only one + target may be specified per command. Obstacles seemingly in the + path of the phaser blast are unaffected, since the energy ray is + not a line-of- sight weapon. The size of the hit is inversely + proportional to the distance from the target. Maximum range is + 10 sectors vertically, horizontally, or diagonally. Each phaser + blast consumes 200 units of ship energy, unless a specific + amount of energy is given (the specified energy must be between + 50 and 500 units, inclusive). The phaser banks have roughly a + 5% chance of damage with a default (200 unit) blast, with the + probability of damage reaching nearly 65% with a maximum (500 + unit) blast. The severity of the resulting damage is also + dependant on the size of the blast. Also, if your ship's + shields are up, a high-speed shield control is used to quickly + lower and then restore the shields during the fire. This + procedure consumes another 200 units of ship energy. The + weapons officer on board your ship will cancel all phaser blasts + directed against friendly ships, bases, or planets. Firing + phasers (or getting hit by phasers) puts you on red alert. + NOTE: Although phasers can damage enemy planetary installations + (BUILDs), they can NOT destroy the planet itself. + + Examples: + + PH 12 32 Phaser target at sector 12-32. + PH A 12 32 Equivalent to "PH 12 32". + PH R 2 -3 Phaser target at sector 12-32, if your location + is 10-35. + PH C BUZZARD Phaser the Buzzard (if in range). + PH C B Same as PH C BUZZARD (ship names can be + DECWAR GAME INSTRUCTIONS Page 17 + + + abbreviated to 1 character). + PH 300 12 32 Phaser target at sector 12-32, using 300 units + of energy. + + + List various PLANET information + + Syntax: PLanets [] + + List location and number of builds for all known planets, and a + summary of planets within a specified range or the entire + galaxy. The default range is 10 sectors, and the default side + is every side. See the help for LIST for more information and + the complete set of keywords that can be used to modify PLANETS + output. + + Examples: + + PL List all planets within 10 sectors. + PL SUM Give summary of all planets in game. + PL ALL NEU List all known neutral planets. + PL ALL CAP List all known captured planets. + PL ALL 20 List all known planets within a radius of 20 + sectors. + + + List POINTS scored so far this game + + Syntax: POints + [Me|I|Federation|Human|Empire|Klingon|Romulan|All] + + Itemize the current point breakdown. Information can be + obtained concerning the points scored by your individual ship, + your team, the opposition, the romulans, or any combination of + the above. If the Romulan Empire is not involved in the game, + the ROMULAN keyword will be ignored. + + Categories in POINTS breakdown: + - Damage to enemies. + - Enemies destroyed (500 points each). + - Damage to bases. + - Planets captured (100 points each). + - Bases built (1000 points each). + - Romulans damaged/destroyed. + - Stars destroyed (-50 points each). + - Planets destroyed (-100 points each). + + - Total points scored. + - Total number of ships commissioned. + - Total score / number of players. + - Total score / stardates. + + Examples: + + PO List points for your ship. + PO ME Equivalent to "PO". + PO KLI FED List the score of the two teams. + DECWAR GAME INSTRUCTIONS Page 18 + + + PO ALL List all the scoring information available. + + + QUIT the game + + Syntax: Quit + + Quit the game before normal end of execution and return to the + monitor. Your ship is released for use by another player, + you're chalked up as just one more casualty, and you can't + CONTINUE the game. If you want to rejoin the game, you'll have + to wait 2 minutes, and then either START or RUN the game. If + you want to exit the game temporarily (to answer SENDS, etc.), + type ^C (CTL-C), and you'll usually be able to CONTINUE. NOTE: + If you're under red alert, you won't be able to ^C out of the + game; you'll have to use the QUIT command. + + + Turn sub-space RADIO on or off, or + set to ignore or restore communications from individual ships + + Syntax: RAdio ON|OFf or RAdio Gag|Ungag + + Turn your ship's sub-space radio on or off, thus controlling + whether or not you'll receive any messages from other ships or + your bases; or suppress or restore messages originating from + specific ships. + + Examples: + + RA ON Turn sub-space radio ON. + RA OFF Turn sub-space radio OFF. + RA G L Suppress all radio messages sent by the + Lexington. + RA U W Allow radio messages sent by the Wolf to be + received. + + + REPAIR device damage + + Syntax: REpair [] + + Repair damaged ship devices. If a ship suffers a critical hit + to a device, REPAIR can be used to restore the device to full + (or partial) working order. A REPAIR removes the specified + units of damage from each damaged device, in addition to the + normal repair rate of 30 units per turn. If the ship is DOCKED, + the pause time for the specified REPAIR is reduced by half of + that needed while in flight. If the repair size is not + specified, REPAIR defaults to a 4 second repair (50 units + 50 + more if docked). REPAIR does NOT reduce the SHIP damage. + + Examples: + + RE 100 Remove up to 100 units of device damage. + RE Same as "RE 100" if DOCKED, else same as "RE + 50". + DECWAR GAME INSTRUCTIONS Page 19 + + + Full range SCAN + + Syntax: SCan [Up|Down|Right|Left|Corner] [|
] [W] + + Display a selected portion of the nearby universe. If no range + is specified, SCAN defaults to a square scan range of ten + sectors from the present ship location. The keywords UP, DOWN, + RIGHT, LEFT, and CORNER modify this to include only the part of + this original square specified (relative to the ship). The + maximum scan range is 10 sectors, and larger specified ranges + are reduced to this value. If individual vertical and + horizontal ranges are specified, the scanning field will be + shaped accordingly. The WARNING keyword if added to the end of + a SCAN command string will flag the empty sectors within range + of an enemy base or planet with !'s instead of . 's. The SCAN + symbols and their meanings are: + + L, N, S, V, Y Federation warships + C, D, H, J, W Empire warships + ?? Romulan warship + <> Federation starbase + )( Empire starbase + @ Neutral planet + @F Federation planet + @E Empire planet + * Star + Black hole + . Empty sector + ! Empty sector within range of enemy port (only + when using WARNING keyword) + + Examples: + + SC Scan universe within a radius 10 sectors. + SC 10 Equivalent to "SC". + SC 13 Equivalent to "SC 10" or "SC". + SC 4 Scan universe within 4 sectors. + SC 4 4 Equivalent to "SC 4". + SC 2 8 Scan up to 5 rows and 17 columns, centered on + the present ship location. + SC U 4 7 Show only upper half of normal "SC 4 7" scan. + SC C -5 -5 Scan the region bounded by the present ship + location and the location (-5,-5) sectors away + (puts ship in upper right corner of the scan). + SC W Same as "SC", plus shows danger zones around + enemy bases and planets. + + + SET input and output parameters + + Syntax: SEt + + Keyword Value Description + ------- ----- ----------- + Name name Change name (shows in USERS). + Output Long Default. Use longest output format. + Medium Use medium output format. + DECWAR GAME INSTRUCTIONS Page 20 + + + Short Use short (cryptic) output format. + Scan Long Default. Use long format scans. + Short Use 1 character symbols instead of 2. + Prompt Normal Default. Use "COMMAND: " prompt. + Informative Use "> " for prompt. Precede the ">" with: + S if shields are down or < 10%. + E if ship energy < 1000 (yellow alert). + D if ship damage > 2000. + nL if life support is critically damaged (n + stardates of reserves). Ttytype CRT, ADM-3a, + ADM-2, SOROC, BEEHIVE, ACT-IV, ACT-V Doesn't do + anything yet. + OCdef Absolute Default. Display all coordinates in absolute + format (vpos-hpos). + Relative Display coordinates relative to your location + (dv,dh). + Both Display coordinates in both absolute and + relative form. + Icdef Absolute Default. All input coordinates default to + absolute. + Relative Input coordinates default to relative. + + Examples: + + SE PR I Switch to informative prompt. + SE OU S Set output format to short. + SE N THOR Change your name in USERS to THOR. + + + SHIELD control + + Syntax: SHields Up|Down or SHields Transfer + + Raise or lower ship shields, or transfer energy between ship and + shield energy reserves. Raising shields consumes 100 units of + ship energy, lowering them or transfering energy is "free". + NOTE: Shield condition is displayed as +n% for shields up, n% + of full strength, or -n%, for shields down, n% of full strength. + + Examples: + + SH U Raise shields. + SH D Lower shields. + SH T 500 Transfer 500 units of energy TO shields + SH T -500 Transfer 500 units of energy FROM shields + + + Short Range SCAN + + Syntax: SRscan [Up|Down|Right|Left|Corner] [|
] + [W] + + Equivalent to SCAN, but with a default scan range of 7 sectors. + For complete information on sensor scans, see the help on SCAN. + + + Show ship STATUS + DECWAR GAME INSTRUCTIONS Page 21 + + + Syntax: + STatus + [Condition|Location|Torpedoes|Energy|Damage|Shields|Radio] + + Show the current stardate, plus the status of any of the ship + attributes: ship condition, location, number of torps, ship + energy, ship damage, shield energy, and radio condition. Ship + condition can be green, yellow (low on energy), or red (in + battle). Radio condition is either on or off. + + Examples: + + ST Give full status report. + ST T Report how many torpedos remain on board. + ST E D SH Report the ship energy, the ship damage, and the + shield condition (energy, %, up/down). + ST L Report the current ship location. + + + Give SUMMARY on number of ships, bases, and planets + + Syntax: SUmmary [] + + Give any of the information available from the LIST command, but + give only a summary by default. See the help on LIST for more + information and the complete set of keywords that can be used to + modify SUMMARY output. + + Examples: + + SUM Tell how many ships, bases, and planets are in + the game (broken down into friendly, enemy, and + neutral categories). + SUM EN Tell how many enemies are in the game (number of + Romulans, enemy ships, enemy bases, and enemy + planets). + + List information on TARGETS + + Syntax: TArgets [] + + Primarily for locating targets during battle, when a SCAN would + be too time consuming. List location and shield percent of any + enemy ship, base, or planet in range; name of any enemy ship in + game (including the Romulan); or location and number of builds + of any known enemy planet. TARGETS is equivalent to a LIST + command with a default range of 10 sectors and a default side of + enemy. + + Examples: + + TA List all targets within 10 sectors. + TA 10 Equivalent to "TA". + TA 5 List all targets within 5 sectors. + + + TELL another ship something using the sub-space radio + DECWAR GAME INSTRUCTIONS Page 22 + + + Syntax: TEll + All|FEderation|HUman|EMpire|Klingon|ENemy|FRiendly| ; + + Send messages to one or several of the players currently in the + game, with no range limitation. Players who have turned their + radios off, or have a critically damaged sub-space radio can not + be sent to. The TELL command can not be repeated using the + ESCAPE key (no junk mail!). + + Examples: + + TE V;Hello! Send "Hello!" to the Vulcan. + TE KL;DROP DEAD Send "DROP DEAD" to all Klingons. + TE V,E;HELP ME Send "HELP ME" to the Vulcan and Excalibur. + + + List various TIMEs + + Syntax: TIme + + List time since game started; time since your ship entered the + game; run time for your job so far this game; total run time + since login; and current time of day. + + + Fire photon TORPEDO burst + + Syntax: + TOrpedo [Absolute|Relative|Computed] n

[

+ [

]] + + A photon torpedo is aimed along a path in physical space, thus + any object lying along its path will intercept the torpedo. + One, two, or three torpedoes may be fired with one command, and + the torpedoes may be individually targeted, or fired at a common + location. The minimum range of a torpedo is 8 sectors, but some + will travel 10 sectors before self-destructing. Torpedoes may + be deflected from the desired track by a number of different + factors, including your ship's shield strength, computer and + torpedo tube damage, and torpedo misfires. A torpedo misfire + also aborts the remainder of the burst, and sometimes damages + the torpedo tubes as well. Torpedoes can cause stars to go + nova, and can also destroy planets (if no enemy installations + remain intact). "Accidental" hits on friendly ships, bases, or + planets are automatically neutralized. A torpedo burst uses no + ship energy. Firing torpedoes (or getting hit by one) puts you + on red alert. + + Examples: + + TO 1 12 24 Fire one torpedo at sector 12-24. + TO 3 12 24 Fire three torpedoes at sector 12-24. + TO 3 6 7 8 7 9 12 Fire one torpedo at sector 6-7, one at 8-7, + and one at 9-12. + TO 3 12 24 13 39 Fire one torpedo at sector 12-24, and two at + sector 13-39. + DECWAR GAME INSTRUCTIONS Page 23 + + + TO A 3 12 24 Equivalent to "TO 3 12 24". + TO R 2 2 -5 Fire two torpedoes at sector 22-25, assuming + your location is 20-30. + TO C 3 BUZZARD Fire three torpedoes at the Buzzard. + TO C 1 E Fire one torpedo at the Excalibur. + + + TRACTOR beam + + Syntax: TRactor or TRactor Off + + Tow another ship of the same team. The two ships must be + located in adjacent sectors and both ships must have their + shields lowered. Once such a beam is applied, either ship can + pull the other behind it using warp or impulse engines. Energy + consumption for the towing ship is 3 times the normal rate for + movement with the shields down. The ship being towed will end + the move trailing the lead ship. If either ship raises + deflector shields, the tractor beam is automatically cut. The + tractor beam will also be broken if either ship is hit by a + torpedo or damaged by a nova. + + Examples: + + TR Break any existing tractor beam. + TR OFF Equivalent to "TR". + TR B Apply tractor beam to the Buzzard. + + + TYPE game, input, and output settings + + Syntax: TYpe OPtion|OUtput + + Type the current game OPTION and OUTPUT settings. + The OPTION settings are: + - The version number and date of implementation, + - Whether there are Romulans in the game, + - and whether there are Black Holes in the game. + The OUTPUT settings are: + - SHORT, MEDIUM, or LONG output, + - NORMAL or INFORMATIVE command prompt, + - SHORT or LONG sensor scans, + - ABSOLUTE or RELATIVE default for coordinate input, + - ABSOLUTE, RELATIVE, or BOTH for coordinate output, + - and the current TTYTYPE. + + Examples: + + TY OP List the option settings. + TY OU List the output settings. + + + List USERS + + Syntax: Users + + List all ships currently in the game. Include ship name, + DECWAR GAME INSTRUCTIONS Page 24 + + + captain (may be changed by SET NAME), TTY speed, PPN, TTY + number, and job number. If the output format is set to medium + or short, omit the TTY and job numbers. If the output format is + set to short, omit the TTY speed and PPN (include only the ship + name and captain). + INDEX Page 25 + + + BASES . . . . . . . . . . . . . 11 + BUILD . . . . . . . . . . . . . 11 + + CAPTURE . . . . . . . . . . . . 11 + CTL-C . . . . . . . . . . . . . 10 + + DAMAGES . . . . . . . . . . . . 12 + DOCK . . . . . . . . . . . . . . 12 + + ENERGY . . . . . . . . . . . . . 12 + + GRIPE . . . . . . . . . . . . . 13 + + HELP . . . . . . . . . . . . . . 13 + HINTS . . . . . . . . . . . . . 9 + + IMPULSE . . . . . . . . . . . . 14 + INPUT . . . . . . . . . . . . . 7 + INTRODUCTION . . . . . . . . . . 1 + + LIST . . . . . . . . . . . . . . 14 + + MOVE . . . . . . . . . . . . . . 15 + + NEWS . . . . . . . . . . . . . . 16 + + OUTPUT . . . . . . . . . . . . . 8 + + PAUSES . . . . . . . . . . . . . 10 + PHASERS . . . . . . . . . . . . 16 + PLANETS . . . . . . . . . . . . 17 + POINTS . . . . . . . . . . . . . 17 + PREGAME . . . . . . . . . . . . 8 + + QUIT . . . . . . . . . . . . . . 18 + + RADIO . . . . . . . . . . . . . 18 + REPAIR . . . . . . . . . . . . . 18 + + SCAN . . . . . . . . . . . . . . 19 + SET . . . . . . . . . . . . . . 19 + SHIELDS . . . . . . . . . . . . 20 + SRSCAN . . . . . . . . . . . . . 20 + STATUS . . . . . . . . . . . . . 20 + SUMMARY . . . . . . . . . . . . 21 + SYMBOLS USED . . . . . . . . . . 19 + + TARGETS . . . . . . . . . . . . 21 + TELL . . . . . . . . . . . . . . 21 + TIME . . . . . . . . . . . . . . 22 + TORPEDOES . . . . . . . . . . . 22 + TRACTOR . . . . . . . . . . . . 23 + TYPE . . . . . . . . . . . . . . 23 + + USERS . . . . . . . . . . . . . 23 + diff --git a/pdp10/deploy/DECWAR.HLP b/pdp10/deploy/DECWAR.HLP new file mode 100644 index 0000000..99660c8 --- /dev/null +++ b/pdp10/deploy/DECWAR.HLP @@ -0,0 +1,1358 @@ + DECWAR Version 2.2, December 25, 1979 + + +.Introduction +Introduction and Overview of the Game of DECWARs. + + DECWAR is a real time space battle game designed to be +played by from 1 to 10 people. The object of the game is to +destroy all enemy bases and ships, and capture all enemy +planets, before the enemy does the same to you. Each person +plays on a separate terminal, and enters the game by selecting + + 8 DECWAR (on the MultiPlayer Host) + +Players are free to enter and leave the game as desired, since +each has his own job and therefore won't interfere with the +other players (the jobs interact through a shareable high +segment). + + + Besides the enemy (Federation or Empire), the following may +also be a threat to your well being. + + 1. Romulans are nasty beasts that beginners are better off + without. However, if you're the only person playing, + the Romulan is your only competition. Romulans tend to + make for shorter games but when there are 3 or less + players a Romulan will be included. After the fourth + player joins the game, a Romulan will not be re-created + once he is destroyed. include Romulans in the game. + + 2. Black holes are annoying, since if you are displaced + into one, you're dead. They also tend to gobble up + stray torpedos. There is a 25% chance of black holes + being included in the game. + + + There are two primary opposing forces in the galaxy -- +Humans (Federation) and Klingons (Empire). As you enter the +game for the first time, you get to choose which side you'll +join (unless there is a large imbalance in the team sizes). If +you are subsequently destroyed and later reenter the game, you +automatically rejoin your old team. + + You get to select the ship you want to control from a list +of remaining ships on your side. There are 5 ships on each +side: + + Federation ships Empire ships + ---------------- ------------ + Lexington Cobra + Nimitz Demon + Savannah Hawk + Vulcan Jackal + Yorktown Wolf + + + + Due to continuous espionage activities, present front-line +ships of the Federation and the Klingon Empire are identical in +strength and weaponry. These ships can move from sector to +sector using either warp or impulse engines, can attack enemy +installations and ships using either photon torpedoes or +phasers, and can defend themselves against such attack using +their deflector shields. All ships also possess sub-space +radios which keep them in touch with friendly starbases and +other ships. + + + The various devices of a ship are subject to damage. This +damage may be due to enemy attack or to over use. These +damages, unlike total ship damage (see ship attributes below), +may be repaired while underway. If damage on a device is less +than 300 units, its performance is degraded. If damage is 300 +or more units, the device is inoperative. A ship possesses the +following devices: + + 1. Warp Engines -- These engines are the normal mode of + travel for starships. The maximum speed is warp factor + 6, with warps 5 and 6 risking potential damage to the + engines. If warp engines are damaged (less than 300 + units) the maximum speed is warp factor 3. + + + NOTE + + One warp unit is equivalent to one horizontal + or one vertical grid movement. A diagonal + movement is equivalent to the hypotenuse of the + horizontal and vertical sides. + + + + 2. Impulse Engines -- These engines are basically for + emergency use while the warp engines are critically + damaged. Impulse engines move the ship at warp factor + 1. + + 3. Photon Torpedo Tubes -- Used to fire photon torpedoes. + If these tubes are damaged, the accuracy of torpedo + bursts is impaired. The maximum torpedo range is 10 + sectors. + + 4. Phaser Banks -- Each ship possesses two phaser banks, + with a single phaser control. Damage to this phaser + control or to the ship's computer reduces the strength + of the phaser hit. + + 5. Deflector Shields -- The deflector shields of a ship + protect it from damage from phaser and photon torpedo + hits, and shield it from the energy released when a + star goes nova. The percent shield strength indicates + the percent of the incoming hit which will be + nullified. In addition, strong deflector shields may + deflect photon torpedoes with little or no damage. + NOTE: If a ship's shields are up, the amount of energy + expended during movement is doubled. + 6. Computer -- The ship's computer is used for computed + firing, computation during ship movement, and for + phaser control. If the computer is inoperative, + navigation during warp and impulse movement becomes + inexact. + + 7. Life Support -- If the life support units of a starship + are inoperative, the ship must either repair this + damage or dock within 5 stardates. If this is not + accomplished, the crew will die. + + 8. Sub-Space Radio -- The sub-space radio is used to + communicate with other ships, of either side. Bases + under attack also use the sub-space radio to call for + help and notify their team's ships of their + destruction. + + 9. Tractor Beam -- The ship's tractor beam is used + primarily to tow damaged friendly ships away from + danger. The beam can not be used unless both ships + have lowered their shields. + + + In addition to the individual devices discussed above, a +newly commissioned ship (or a fully repaired and rearmed older +ship) possesses the following attributes: + + 1. 5000 units of ship energy. Ship energy is used during + movement and phaser firing. It is also decreased each + time the ship gets hit with phasers or photon + torpedoes. If this quantity ever reaches zero, the + ship is dead. A ship possessing 1000 units of ship + energy or less automatically goes to yellow alert, and + a warning bell sounds after every move. + + 2. 2500 units of shield energy. This energy is stored in + the ship's shields (whether up or down), and is + separate from the ship energy. However, energy may be + transferred between these two energy reserves as + needed. If shields are up, their energy is decreased + each time the ship gets hit. + + 3. Zero units of ship damage. During battle, a ship + collects hits from enemy installations and ships. If + these accumulated hits ever reach 2500 units of damage + or greater, the ship is destroyed. Ship damage may be + reduced only by docking. + + + The galaxy is arranged in a grid of 75 by 75 sectors. +Players can move freely throughout the galaxy in search of +enemies, which come in several categories: + + 1. Romulan. This can be the most dangerous thing to come + up against, and fortunately there is a maximum of 1 + Romulan in the game at any given time. The Romulan + moves around concealed by his cloaking device until he + comes across a suitable target (Federation or Empire + ship or base) which he immediately proceeds to attack. + An infinite supply of torpedoes and energy make him a + formidable foe. If you kill one, another will + eventually appear somewhere in the galaxy. + + 2. Enemy ship. This is the second most dangerous thing to + come across, since all enemy ships are backed by human + intelligence. All ships are created equal, and so the + outcome of a clash between two ships is usually due to + skill on its captain's part, although some other + factors do come into play. + + 3. Enemy base. These aren't dangerous unless you come + within range (4 sectors) since they are immobile. If + you ARE foolish enough to get within range, however, + their overwhelming phaser power will quickly pound you + into rubble! Destroying a base is useful primarily + because this removes it from use by your enemy (bases + are used as supply stations and as a refuge in times of + stress). A damaged starbase will slowly build itself + back to full strength if it is not completely + destroyed. + + 4. Enemy planet. These are just like enemy bases, except + that they are weaker (how much weaker depends on how + many fortifications the enemy has built on them), and + they can be captured. Their firing range is only two + sectors, and they can re-supply the enemy less rapidly + than can a base. + + 5. Neutral planet. While these aren't strictly classified + as enemies, they will take pot shots at you (their + range is also 2 sectors), so be wary of them. You can + capture neutral planets and win them over to your side. + + + + When playing the game, all commands can be abbreviated to 2 +characters, and some can be abbreviated to 1 character (you can +use the shortest unambiguous abbreviation). For a list of +commands type + + HELP * + +and for a description of an individual command type + + HELP command + +The help on individual commands will be read from this help file +(that's what the periods in column 1 are for in the long +description of each command). The legal commands are: + + 1. BASES -- List information on friendly and known enemy + bases. + + 2. BUILD -- Develop installations on a planet, and + eventually build it into a base. The planet must first + be captured. + + 3. CAPTURE -- Win a neutral or enemy planet over to your + side. + 4. DAMAGES -- List damaged devices and their current + status. + + 5. DOCK -- Dock at an adjacent base or planet. This + increases your energy, replenishes your torpedoes, + repairs your ship a little, and reduces your ship + damage. + + 6. ENERGY -- Transfer energy between two ships. + + 7. GRIPE -- Record bugs, comments, suggestion, etc. in + the file GAM:DECWAR.GRP, which is periodically reviewed + by the implementors. + + 8. HELP -- List or describe the legal commands. + + 9. IMPULSE -- Move using impulse engines. + + 10. LIST -- List various information about ships, bases, + and planets. + + 11. MOVE -- Move using warp engines. + + 12. NEWS -- Tell about any new features or enhancements + described in the file GAM:DECWAR.NWS. + + 13. PHASERS -- Fire phasers at a target. + + 14. PLANETS -- List information on friendly and known enemy + and neutral planets. + + 15. POINTS -- List your score breakdown so far. + + 16. QUIT -- Get out of the game. + + 17. RADIO -- Turn ship's sub-space radio on or off; ignore + or restore communications from individual ships. + + 18. REPAIR -- Repair your damaged devices a little. + + 19. SCAN -- Display the galaxy with the default range set + to maximum (10 sectors in each direction from your + ship). + + 20. SET -- Set various input and output defaults. + + 21. SHIELDS -- Transfer energy to or from your shields; + raise or lower your shields. + + 22. SRSCAN -- Display the galaxy with a default range of 7 + sectors (1 greater than the maximum warp factor). + + 23. STATUS -- List your ship's current status and supply + levels. + + 24. SUMMARY -- List various information on ships, bases, + and planets. + 25. TARGETS -- List targets (enemies within range) and + their current locations. + + 26. TELL -- Send messages to other ships using the + sub-space radio. + + 27. TIME -- List information on run time and elapsed time. + + 28. TORPEDOES -- Fire photon torpedoes at a target. + + 29. TRACTOR -- Use tractor beam to tow friendly ships. + + 30. TYPE -- List current input, output, and game + characteristics. + + 31. USERS -- List the names and other information known + about the players currently in the game. + + + + .INPUT +General INPUT information + +- Only the first 5 characters of each input word are stored. + Any characters beyond that are ignored. +- Input words may be separated by spaces, tabs, or commas. +- The input line can be terminated with , , , , + , or ^Z. +- ^G toggles echo. At the beginning of each input line, echoing + is turned on. Typing ^G turns it off, the next ^G turns it + back on, etc. Echoing is always turned back on at the end of + an input line, or if ^U is typed. +- Multiple commands may be given on a single command line by + separating the commands with / (slash). If the TELL command + is given, it must be last on the line. +- Anything after ; (semicolon) is treated as a comment and is + ignored (but TELL rescans the line and takes the text after + the first ; as the message to send). +- (escape, or altmode) entered as the first character in + response to the command prompt (even before ^H, ^U, or ^R) + repeats the previous command. This is useful when building a + planet, docking, repairing, firing torpedoes, etc. Altmode + can't be used to repeat a TELL command. + +- Any ship name can be abbreviated to 1 character. +- Any command or keyword can be shortened to the shortest + unambiguous abbreviation, which is never more than 2 + characters. + +- Many commands require a coordinate as an argument (PHASERS, + TORPEDOES, CAPTURE, BUILD, etc.). The required coordinate(s) + can be specified in one of three ways: + Absolute - the default coordinate input type, which is simply + an absolute vertical position followed by an absolute + horizontal position. The coordinate may be preceded by the + keyword ABSOLUTE, but this isn't necessary unless the + default coordinate input type has been changed by SET ICDEF + RELATIVE. + Relative - the keyword RELATIVE, followed by a relative + vertical distance and a relative horizontal distance. A + positive distance is either up or right, and negative is + either down or left. The absolute coordinate is computed by + adding the relative distances to your current position. The + keyword RELATIVE isn't needed if the default coordinate + input type has been changed by SET ICDEF RELATIVE. + Computed - the keyword COMPUTED followed by a ship name. The + coordinate used is the location of the given ship. This + type of coordinate computation is available only to captains + controlling their ships through slow terminals (< 1200 + baud), and requires an operational computer. + The keyword ABSOLUTE, RELATIVE, or COMPUTED is only given one + time for each set of coordinates. For instance, the TORPEDO + command can accept up to 3 coordinates, but the keyword + describing the coordinate input type is given only once, and + all coordinates must be of the same type. +. + + + .OUTPUT +General OUTPUT information + +The SET OUTPUT LONG/MEDIUM/SHORT command controls the length of +text output throughout the game. In particular, Medium or Short +hit messages received during battle are greatly reduced in +length when compared to the Long format. Unfortunately, these +shorter forms are not as self-explanatory as the Long form. The +following are some equivalent Long, Medium and Short hit +messages: + +- Goblin @22-31, +83.6% makes 285.3 unit torpedo hit on + Vulcan displaced to 20-31, +72.1% + + G @22-31, +83.6% 285.3 unit T V -->20-31, +72.1% + + G 22-31 +83 285T V >20-31 +72 + + +- Emp planet(3) @15-16 makes 155.5 unit phaser hit on + Buzzard @15-17, 66.8% + + -@3 @15-16 155.5 unit P B @15-17, 66.8% + + -@3 15-16 155P B 15-17 +66 + + Note: The -@3 indicates an Empire planet built 3 times. + + +- Star @22-31 +4,+2 makes 301.2 unit hit on + Panther displaced to 20-31 +2,+2, -72.1% + + * @22-31 +4,+2 301.2 unit N P -->20-31 +2,+2, -72.1% + + * 22-31 +4,+2 301N P >20-31 +2,+2, -72 + + Note: The relative coordinates appear due to a SET OCDEF BOTH + command. The Panther's shields are 72.1% of max strength, but + down (-72.1%). +. + + +.PREGAME +The Decwar PRE-GAME feature + +DECWAR provides a Pre-game feature to allow: +- New players to view the help file without entering the current + game. +- Experienced players to check the status of a current game + before choosing a side and ship. +- Players to submit Gripes without entering the game. + +The commands currently active within the Pre-game section are: +Activate Gripe Help News Points Quit +Summary Time Users + +The ACTIVATE command (valid only in the pre-game) is used to +exit the pre-game section and enter the normal ship setup stage. +The pre-game can be recognized from the 'PG>' command prompt, as +well as the DECWPG program name. + . + + +.HINTS +Some general HINTS + +- When in doubt, use the on-line help system. See the help on + HELP for more information. +- If the output starts piling up in the middle of a battle, type + ^O (CTL-O). None of your commands will be executed until + output is finished, so it's sometimes better just to ignore + the hit messages so your attack or run commands can be + executed immediately. +- Use multiple commands per line (separate commands with /). + Once you're in a danger area, things can happen faster than + you can react to them. Plan your action ahead of time, before + you enter a danger area. +- If some unexpected action happens, such as an enemy finding + you, and you have several stacked commands (either from a + multiple command line or typing ahead), type ^C to abort all + stacked commands (especially if it involves time consuming + commands such as BUILD, or commands that generate a lot of + output, such as SCAN). You can then proceed to remedy the + situation by giving your unexpected visitor a good beating. +- If you're on a slow terminal, use computed coordinates, and + move around a lot if you're fighting someone on a fast + terminal. Computed coordinates are the primary advantage slow + terminals have over the fast ones (computed coordinates give + slow terminals a fantastic tactical advantage over fast + terminals when used properly). +- Use to repeat commands (see the help on ESCAPE). It's + just a convenience when building planets, etc., but in battle, + and combined with multiple commands per line and/or computed + coordinates (such as PH C B/M R 1 0 or TO 1 32 45), it can + make or break your career as a starship captain. +- Don't get within range of an enemy base, unless you enjoy + being pounded into rubble. You can kill a base just as well + from 1 sector outside it's range (use the WARNING keyword on + SCAN to see the range of an enemy base). +- Don't waste your energy and torpedoes firing at friendly ships + and bases. If you're not sure if it's friendly or not, type + HELP SCAN for a list of what's what. You can also use the + TARGETS command to see which enemies are lurking about (see + the help on TARGETS and LIST). +- Don't make it a habit of sitting next to stars; photon + torpedoes can turn them into novas, which are extremely + destructive. Conversely, if you notice an enemy ship or base + adjacent to a star, take advantage of the situation! +- One sure way to locate enemy ships is to watch for newly + captured enemy planets by using the PLANETS or LIST command. +- In general, don't waste photon torpedoes battering at a target + with 85-100% shields. The chances are good that they will + just be deflected harmlessly away. Use your phasers to weaken + the shields, then use torpedoes to finish him off. This is + especially true when attempting to destroy an enemy starbase. +- Use the SET command in DECWAR.INI to personalize the output to + your own tastes. That way you'll be guaranteed to have the + output set right each time you play a game. +- To always see the range and direction of any object listed (in + hit messages, output from the LIST command, etc.), SET OCDEF + BOTH. (The range is the magnitude of either delta v or delta + h, whichever is larger.) +. + + +.PAUSES +Commands that take real time + +Many of the commands are designed to take a certain amount of +real time. This is done to help equalize the game when there +are different speed terminals and different speed typists in the +game. Some commands take a constant amount of time, and some +are based on the speed of the slowest terminal in the game. + +BUILD 5 to 7 seconds +CAPTURE 5 seconds + 1 second for each BUILD of enemy + planet +DOCK 2 to 4 seconds +IMPULSE 2 to 4 seconds +MOVE 2 to 4 seconds +REPAIR (0.08 * repair size) seconds (* 0.5 if docked) + +You have 2 phaser banks, each of which must be cooled off after +it's fired before it can be used again. Each phaser bank takes +3 to 6 seconds plus the amount of phaser damage / 100 to cool +off. For instance, if there was a 300 baud terminal in the +game, and your phasers had 200 units of damage, each of your +phaser banks would take 6 + 2 = 8 seconds to cool off after +being fired. Therefore, you could fire once every 4 seconds, or +twice every 8 seconds. + +After each burst of torpedoes the tubes must be reloaded before +being used again. It takes 2 to 4 seconds plus the amount of +torpedo tube damage / 100 to load a torpedo. For instance, if +there was a 300 baud terminal in the game, your torpedoes had +200 units of damage, and you had just fired 3 torpedoes, it +would take 3 * (4 + 2) = 18 seconds before you could fire +torpedoes again. +. + + +.CTL-C +Use of ^C + +If you're in command input wait (DECWAR is waiting for you to +type a command, and the program name is set to DECWTI), typing +^C will abort the game and return you to monitor mode. When you +abort the game in this manner, your ship is returned to the pool +of available ships. You will be able to continue unless a new +player has taken your ship or someone has moved into the spot +you occupied. + +If you're not in a command input wait state when you type ^C, +any stacked commands (commands that you typed in ahead of time +that haven't been executed yet) will be aborted, and a series of +bells will be output. + +NOTE: A ship under RED alert conditions can not be returned to +the monitor level except by using the QUIT command. +. + .BASES +List various BASE information + +Syntax: BAses [] + +List location and shield percent of friendly bases; location of +known enemy bases; or count of bases of either side within a +specified range or the entire galaxy. The default range is the +entire galaxy, and the default side is friendly bases only. See +the help for LIST for more information and the complete set of +keywords that can be used to modify BASES output. + +Examples: + +BA List location and shield percent of all friendly + bases. +BA ENEMY List location of all known enemy bases. +BA SUM Give summary of all friendly bases. +BA ALL SUM Give summary of all bases. +BA CL List the location and shield percent of the + closest friendly base. +BA 34 26 List the location and shield percent of friendly + base at 34-26 (it doesn't have to be friendly, + but you can't see the shield percent of an out + of range enemy base). +. + + +.BUILD +BUILD fortifications on a captured planet + +Syntax: BUild [Absolute|Relative] + +A fortified planet hits harder and is more resistant to +destruction by the enemy. A planet can normally be built up to +4 times. As your team's starbases are destroyed by enemy +action, a fifth build will complete the construction of a new +starbase on the planet. Only 10 starbases can be functional at +any one time. + +Examples: + +BU 32 12 Build the planet at sector 32-12. +BU A 32 12 Equivalent to "BU 32 12" +BU R 1 1 Build the planet at sector 32-12, if your + present location is 31-11. +. + + +.CAPTURE +CAPTURE a neutral or enemy planet + +Syntax: CApture [Absolute|Relative] + +At the start of the game, all planets are neutral (they fire at +everyone!). Once captured by either side, they fire only at +enemy ships, and can be DOCKed at to refuel and rearm, just like +a base (except a planet can only supply half the resources that +a base can). Enemy planets can also be captured. When +capturing an enemy planet, 1 second is added to the normal pause + time of 5 seconds for each BUILD present. Also, 50 units of +ship energy are lost for each build. + +Examples: + +CA 12 32 Capture planet at 12-32. +CA A 12 32 Equivalent to "CA 12 32". +CA R 1 1 Capture planet at sector 12-32, if your present + location is 11-31. +. + + +.DAMAGES +DAMAGE report + +Syntax: DAmages [] + +List damaged ship devices and the amount of damage to each. The +condition of all or just selected devices may be examined. +Total ship damage is not reported. + +Examples: + +DA List all damaged devices and their current + damages. +DA SH T List damages for SHields and Torpedo tubes. +DA PH RA C List damages for PHasers, sub-space RAdio, and + Computer. +. + + +.DOCK +DOCK at a friendly base or planet + +Syntax: DOck [Status []] + +Refuel, repair, and rearm your ship, and set your ship's +condition to green. While docked, any repairs are accelerated, +and you have an "infinite" supply of torps. If you have no +damages and are completely refueled and rearmed, DOCKing will +have no effect on your ship. A STATUS command string can be +appended to a DOCK order. The following table lists the maximum +resources available per move when DOCKing at a base or planet: + +Resource Base Planet +---------------------------------------------- +Ship energy +1000 +500 +Shield energy +500 +250 +Photon Torpedoes +10 +5 +Life Support Reserves +5 +5 +Ship Damage -100 -50 +Ship Damage, if already docked -200 -100 + +Examples: + +DO Dock, no status report. +DO ST Dock, show ship's status AFTER docking. +DO ST SH T Dock, show ship's shield strength and number of + torpedos on board AFTER docking. +. + .ENERGY +Transfer ENERGY to a friendly ship + +Syntax: Energy + +The receiving ship must be located in an adjacent sector. 10% +of the energy transferred will be lost due to broadcast +dissipation. If you attempt to send more energy than the other +ship can store (ie 5000 units), the transfer will automatically +be reduced to the maximum possible. + +Example: + +E I 1000 Transfer 1000 units of energy to the Intrepid. + The Intrepid will receive 900 units of energy. +. + + +.GRIPE +Submit a GRIPE + +Syntax: Gripe + +Add a comment, bug report, suggestion, etc. to the top of file +GAM:DECWAR.GRP. Type in your comments, then ^Z (CTL-Z) to exit +and continue the game, or ^C (CTL-C) to abort and not send the +gripe. Each gripe is preceded with a header that includes the +version number, date, time, ship name, user name, TTY speed, +PPN, TTY number, job number, and whether or not Romulans and/or +black holes are included in the game. Unless you are currently +under red alert, GRIPE will protect you from enemy attack. To +view gripes not yet acted upon, type the file GAM:DECWAR.GRP. +To view answered gripes, and see what action was taken on them, +type the file GAM:DECWAR.FXD. +. + + +.HELP +Give HELP + +Syntax: Help [*|] + +Give general help info, a list of available commands, or a +detailed description of a particular command or keyword. Unless +you are under red alert, HELP will protect you from enemy +attack. The following conventions are used in the detailed +descriptions: +- The first line contains, in all caps, the keyword that help is + being given for. +- The syntax line (second line) lists the portion of the keyword + required to make it unique in caps, and the remainder of the + keyword in lower case, followed by any parameters (if the + keyword is a command). +- A quantity to be filled in is lower case and enclosed in <> + (angle brackets). +- Optional parameters are enclosed in [] (square brackets). +- A choice (either or) is indicated by | (vertical bar). +- Any parameter that must be typed in literally is started in + capital letters and continued in lower case. The upper case + letters signal the shortest unambiguous abbreviation (the + shortest abbreviation may change slightly, depending on + context). + +Examples: + +H Give general help info. +H * List all available commands. +H H List this block of text. +H SH Give help for the SHIELDS command. +H HI G Give some general HINTS and a description of the + GRIPE command. +. + + +.IMPULSE +Move using IMPULSE engines + +Syntax: Impulse [Absolute|Relative] + +Move one sector vertically, horizontally, or diagonally +(equivalent to warp factor 1). Ship condition changes to green. + +Examples: + +I 37 45 Move to sector 37-45. +I A 37 45 Equivalent to "I 37 45". +I R 1 -1 Move to sector 37-45, if your ship's present + location is 36-46. +. + + +.LIST +LIST ship, base, and planet info + +Syntax: List [] + +The following information is available via the LIST command: +- Name of any ship currently in the game (including the + Romulan). +- Location and shield percent of any friendly ship, or any ship + within scan range (10 sectors). +- Location and shield percent of any friendly base, or any base + within range. +- Location of any known enemy base (any base that has previously + been SCANned or LISTed by anyone on your team). +- Location and number of builds of any known planet, or any + planet within range. +The above information is also available, in whole or in part, +through the SUMMARY, BASES, PLANETS, and TARGETS commands. Each +command has it's own default range, side (Federation, Empire, +Romulan, Neutral), and object (ship, base, planet). LIST (and +SUMMARY) include everything (infinite range, all sides, all +objects) by default. On output, enemy objects are flagged with +* (star) in column 1 unless the command is TARGETS. + +Keywords used with BASES, PLANETS, TARGETS, LIST, and SUMMARY +(not all keywords are legal for all commands): + +ship names Include only specified ships (several ship names + may be given, including Romulan). + vpos hpos List only the object at the location vpos-hpos. +CLosest List only the closest of the specified objects. + +SHips Include only ships (Federation, Empire, or + Romulan). +BAses Include only bases (Federation or Empire). +PLanets Include only planets (Federation, Empire, or + Neutral). +POrts Include only bases and planets. If no side is + specified (Federation, Empire, Neutral, or + Captured), include only friendly ports. + +FEderation Include only Federation forces. +HUman Same as Federation. +EMpire Include only Empire forces. +Klingon Same as Empire. +FRiendly Include only friendly forces (Federation or + Empire). +ENemy Include only enemy forces (Empire or Federation + and Romulan). +TArgets Same as enemy. +NEutral Include only neutral planets. +CAptured Include only captured planets (Federation or + Empire). + +n Include only objects within n sectors. +ALl Include all sides unless a side is explicitly + given. Extend the range to infinity unless a + range is explicitly given. + +LIst List individual items. Turn off summary unless + command is SUMMARY or the keyword SUMMARY is + specified. +SUmmary List summary of all selected items. Turn off + list unless command is LIST or the keyword LIST + is specified. Extend the range to infinity + unless a range is explicitly given. + +And Used to separate groups of keywords. +& Same as AND. + +Examples: + +LIST List all information available on all ships, + bases, and planets. +LIST SUM List all available info plus a summary of the + number of each object in game. +LI EN BA List the location of all known enemy bases. +LI SH List all available info on all ships in the + game. +LI CL PO List closest friendly base or friendly or + neutral planet. +LI 1 3 & 9 5 List the objects at locations 1-3 and 9-5. +. + + +.MOVE +MOVE using warp drive + +Syntax: Move [Absolute|Relative|Computed] + Maximum speed is warp factor 6, which will move you 6 sectors +per turn. Maximum SAFE speed is warp factor 4; warp factors 5 +and 6 risk potential warp engine damage. Energy consumption per +move is proportional to the square of the warp factor. If the +ship's shields are up during this movement, the energy +consumption is doubled. Moving changes your ship's condition to +green. + +Examples: + +M 37 45 Move to sector 37-45. +M A 37 45 Equivalent to "M 37 45". +M R 4 -5 Move to sector 37-45, if your present location + is 33-50 (move up 4 sectors and left 5 sectors). +M C W "Ram" the Wolf. No actual collision occurs, but + your ship ends up adjacent to the Wolf's current + position. +. + + +.NEWS +Display the NEWS file + +Syntax: NEws + +Display the file which contains information on any new features, +enhancements, bug fixes, etc for each version of DECWAR. +. + + +.PHASERS +Fire PHASERS at an enemy ship, base, or planet + +Syntax: PHasers [Absolute|Relative|Computed] [energy] + + +Phasers must be directed at a specific target, and only one +target may be specified per command. Obstacles seemingly in the +path of the phaser blast are unaffected, since the energy ray is +not a line-of- sight weapon. The size of the hit is inversely +proportional to the distance from the target. Maximum range is +10 sectors vertically, horizontally, or diagonally. Each phaser +blast consumes 200 units of ship energy, unless a specific +amount of energy is given (the specified energy must be between +50 and 500 units, inclusive). The phaser banks have roughly a +5% chance of damage with a default (200 unit) blast, with the +probability of damage reaching nearly 65% with a maximum (500 +unit) blast. The severity of the resulting damage is also +dependant on the size of the blast. Also, if your ship's +shields are up, a high-speed shield control is used to quickly +lower and then restore the shields during the fire. This +procedure consumes another 200 units of ship energy. The +weapons officer on board your ship will cancel all phaser blasts +directed against friendly ships, bases, or planets. Firing +phasers (or getting hit by phasers) puts you on red alert. +NOTE: Although phasers can damage enemy planetary installations +(BUILDs), they can NOT destroy the planet itself. + +Examples: + PH 12 32 Phaser target at sector 12-32. +PH A 12 32 Equivalent to "PH 12 32". +PH R 2 -3 Phaser target at sector 12-32, if your location + is 10-35. +PH C BUZZARD Phaser the Buzzard (if in range). +PH C B Same as PH C BUZZARD (ship names can be + abbreviated to 1 character). +PH 300 12 32 Phaser target at sector 12-32, using 300 units + of energy. +. + + +.PLANETS +List various PLANET information + +Syntax: PLanets [] + +List location and number of builds for all known planets, and a +summary of planets within a specified range or the entire +galaxy. The default range is 10 sectors, and the default side +is every side. See the help for LIST for more information and +the complete set of keywords that can be used to modify PLANETS +output. + +Examples: + +PL List all planets within 10 sectors. +PL SUM Give summary of all planets in game. +PL ALL NEU List all known neutral planets. +PL ALL CAP List all known captured planets. +PL ALL 20 List all known planets within a radius of 20 + sectors. +. + + +.POINTS +List POINTS scored so far this game + +Syntax: POints +[Me|I|Federation|Human|Empire|Klingon|Romulan|All] + +Itemize the current point breakdown. Information can be +obtained concerning the points scored by your individual ship, +your team, the opposition, the romulans, or any combination of +the above. If the Romulan Empire is not involved in the game, +the ROMULAN keyword will be ignored. + +Categories in POINTS breakdown: +- Damage to enemies. +- Enemies destroyed (500 points each). +- Damage to bases. +- Planets captured (100 points each). +- Bases built (1000 points each). +- Romulans damaged/destroyed. +- Stars destroyed (-50 points each). +- Planets destroyed (-100 points each). + +- Total points scored. +- Total number of ships commissioned. +- Total score / number of players. + - Total score / stardates. + +Examples: + +PO List points for your ship. +PO ME Equivalent to "PO". +PO KLI FED List the score of the two teams. +PO ALL List all the scoring information available. +. + + +.QUIT +QUIT the game + +Syntax: Quit + +Quit the game before normal end of execution and return to the +monitor. Your ship is released for use by another player, +you're chalked up as just one more casualty, and you can't +CONTINUE the game. If you want to rejoin the game, you'll have +to wait 2 minutes, and then either START or RUN the game. If +you want to exit the game temporarily (to answer SENDS, etc.), +type ^C (CTL-C), and you'll usually be able to CONTINUE. NOTE: +If you're under red alert, you won't be able to ^C out of the +game; you'll have to use the QUIT command. +. + + +.RADIO +Turn sub-space RADIO on or off, or +set to ignore or restore communications from individual ships + +Syntax: RAdio ON|OFf or RAdio Gag|Ungag + +Turn your ship's sub-space radio on or off, thus controlling +whether or not you'll receive any messages from other ships or +your bases; or suppress or restore messages originating from +specific ships. + +Examples: + +RA ON Turn sub-space radio ON. +RA OFF Turn sub-space radio OFF. +RA G L Suppress all radio messages sent by the + Lexington. +RA U W Allow radio messages sent by the Wolf to be + received. +. + + +.REPAIR +REPAIR device damage + +Syntax: REpair [] + +Repair damaged ship devices. If a ship suffers a critical hit +to a device, REPAIR can be used to restore the device to full +(or partial) working order. A REPAIR removes the specified +units of damage from each damaged device, in addition to the +normal repair rate of 30 units per turn. If the ship is DOCKED, + the pause time for the specified REPAIR is reduced by half of +that needed while in flight. If the repair size is not +specified, REPAIR defaults to a 4 second repair (50 units + 50 +more if docked). REPAIR does NOT reduce the SHIP damage. + +Examples: + +RE 100 Remove up to 100 units of device damage. +RE Same as "RE 100" if DOCKED, else same as "RE + 50". +. + + +.SCAN +Full range SCAN + +Syntax: SCan [Up|Down|Right|Left|Corner] [|
] [W] + +Display a selected portion of the nearby universe. If no range +is specified, SCAN defaults to a square scan range of ten +sectors from the present ship location. The keywords UP, DOWN, +RIGHT, LEFT, and CORNER modify this to include only the part of +this original square specified (relative to the ship). The +maximum scan range is 10 sectors, and larger specified ranges +are reduced to this value. If individual vertical and +horizontal ranges are specified, the scanning field will be +shaped accordingly. The WARNING keyword if added to the end of +a SCAN command string will flag the empty sectors within range +of an enemy base or planet with !'s instead of .'s. The SCAN +symbols and their meanings are: + +L, N, S, V, Y Federation warships +C, D, H, J, W Empire warships + ?? Romulan warship + <> Federation starbase + )( Empire starbase + @ Neutral planet + @F Federation planet + @E Empire planet + * Star + Black hole + . Empty sector + ! Empty sector within range of enemy port (only + when using WARNING keyword) + +Examples: + + SC Scan universe within a radius 10 sectors. + SC 10 Equivalent to "SC". + SC 13 Equivalent to "SC 10" or "SC". + SC 4 Scan universe within 4 sectors. + SC 4 4 Equivalent to "SC 4". + SC 2 8 Scan up to 5 rows and 17 columns, centered on + the present ship location. + SC U 4 7 Show only upper half of normal "SC 4 7" scan. + SC C -5 -5 Scan the region bounded by the present ship + location and the location (-5,-5) sectors away + (puts ship in upper right corner of the scan). + SC W Same as "SC", plus shows danger zones around + enemy bases and planets. + . + + +.SET +SET input and output parameters + +Syntax: SEt + +Keyword Value Description +------- ----- ----------- +Name name Change name (shows in USERS). +Output Long Default. Use longest output format. + Medium Use medium output format. + Short Use short (cryptic) output format. +Scan Long Default. Use long format scans. + Short Use 1 character symbols instead of 2. +Prompt Normal Default. Use "COMMAND: " prompt. + Informative Use "> " for prompt. Precede the ">" with: + S if shields are down or < 10%. + E if ship energy < 1000 (yellow alert). + D if ship damage > 2000. + nL if life support is critically damaged (n + stardates of reserves). Ttytype CRT, ADM-3a, + ADM-2, SOROC, BEEHIVE, ACT-IV, ACT-V Doesn't do + anything yet. +OCdef Absolute Default. Display all coordinates in absolute + format (vpos-hpos). + Relative Display coordinates relative to your location + (dv,dh). + Both Display coordinates in both absolute and + relative form. +Icdef Absolute Default. All input coordinates default to + absolute. + Relative Input coordinates default to relative. + +Examples: + +SE PR I Switch to informative prompt. +SE OU S Set output format to short. +SE N THOR Change your name in USERS to THOR. +. + + +.SHIELDS +SHIELD control + +Syntax: SHields Up|Down or SHields Transfer + +Raise or lower ship shields, or transfer energy between ship and +shield energy reserves. Raising shields consumes 100 units of +ship energy, lowering them or transfering energy is "free". +NOTE: Shield condition is displayed as +n% for shields up, n% +of full strength, or -n%, for shields down, n% of full strength. + +Examples: + +SH U Raise shields. +SH D Lower shields. +SH T 500 Transfer 500 units of energy TO shields +SH T -500 Transfer 500 units of energy FROM shields + . + + +.SRSCAN +Short Range SCAN + +Syntax: SRscan [Up|Down|Right|Left|Corner] [|
] +[W] + +Equivalent to SCAN, but with a default scan range of 7 sectors. +For complete information on sensor scans, see the help on SCAN. +. + + +.STATUS +Show ship STATUS + +Syntax: +STatus +[Condition|Location|Torpedoes|Energy|Damage|Shields|Radio] + +Show the current stardate, plus the status of any of the ship +attributes: ship condition, location, number of torps, ship +energy, ship damage, shield energy, and radio condition. Ship +condition can be green, yellow (low on energy), or red (in +battle). Radio condition is either on or off. + +Examples: + +ST Give full status report. +ST T Report how many torpedos remain on board. +ST E D SH Report the ship energy, the ship damage, and the + shield condition (energy, %, up/down). +ST L Report the current ship location. +. + + +.SUMMARY +Give SUMMARY on number of ships, bases, and planets + +Syntax: SUmmary [] + +Give any of the information available from the LIST command, but +give only a summary by default. See the help on LIST for more +information and the complete set of keywords that can be used to +modify SUMMARY output. + +Examples: + +SUM Tell how many ships, bases, and planets are in + the game (broken down into friendly, enemy, and + neutral categories). +SUM EN Tell how many enemies are in the game (number of + Romulans, enemy ships, enemy bases, and enemy + planets). + +.TARGETS +List information on TARGETS + +Syntax: TArgets [] + Primarily for locating targets during battle, when a SCAN would +be too time consuming. List location and shield percent of any +enemy ship, base, or planet in range; name of any enemy ship in +game (including the Romulan); or location and number of builds +of any known enemy planet. TARGETS is equivalent to a LIST +command with a default range of 10 sectors and a default side of +enemy. + +Examples: + +TA List all targets within 10 sectors. +TA 10 Equivalent to "TA". +TA 5 List all targets within 5 sectors. +. + + +.TELL +TELL another ship something using the sub-space radio + +Syntax: TEll +All|FEderation|HUman|EMpire|Klingon|ENemy|FRiendly| ; + +Send messages to one or several of the players currently in the +game, with no range limitation. Players who have turned their +radios off, or have a critically damaged sub-space radio can not +be sent to. The TELL command can not be repeated using the +ESCAPE key (no junk mail!). + +Examples: + +TE V;Hello! Send "Hello!" to the Vulcan. +TE KL;DROP DEAD Send "DROP DEAD" to all Klingons. +TE V,E;HELP ME Send "HELP ME" to the Vulcan and Excalibur. +. + + +.TIME +List various TIMEs + +Syntax: TIme + +List time since game started; time since your ship entered the +game; run time for your job so far this game; total run time +since login; and current time of day. +. + + +.TORPEDOES +Fire photon TORPEDO burst + +Syntax: +TOrpedo [Absolute|Relative|Computed] n

[

+[

]] + +A photon torpedo is aimed along a path in physical space, thus +any object lying along its path will intercept the torpedo. +One, two, or three torpedoes may be fired with one command, and +the torpedoes may be individually targeted, or fired at a common +location. The minimum range of a torpedo is 8 sectors, but some + will travel 10 sectors before self-destructing. Torpedoes may +be deflected from the desired track by a number of different +factors, including your ship's shield strength, computer and +torpedo tube damage, and torpedo misfires. A torpedo misfire +also aborts the remainder of the burst, and sometimes damages +the torpedo tubes as well. Torpedoes can cause stars to go +nova, and can also destroy planets (if no enemy installations +remain intact). "Accidental" hits on friendly ships, bases, or +planets are automatically neutralized. A torpedo burst uses no +ship energy. Firing torpedoes (or getting hit by one) puts you +on red alert. + +Examples: + +TO 1 12 24 Fire one torpedo at sector 12-24. +TO 3 12 24 Fire three torpedoes at sector 12-24. +TO 3 6 7 8 7 9 12 Fire one torpedo at sector 6-7, one at 8-7, + and one at 9-12. +TO 3 12 24 13 39 Fire one torpedo at sector 12-24, and two at + sector 13-39. +TO A 3 12 24 Equivalent to "TO 3 12 24". +TO R 2 2 -5 Fire two torpedoes at sector 22-25, assuming + your location is 20-30. +TO C 3 BUZZARD Fire three torpedoes at the Buzzard. +TO C 1 E Fire one torpedo at the Excalibur. +. + + +.TRACTOR +TRACTOR beam + +Syntax: TRactor or TRactor Off + +Tow another ship of the same team. The two ships must be +located in adjacent sectors and both ships must have their +shields lowered. Once such a beam is applied, either ship can +pull the other behind it using warp or impulse engines. Energy +consumption for the towing ship is 3 times the normal rate for +movement with the shields down. The ship being towed will end +the move trailing the lead ship. If either ship raises +deflector shields, the tractor beam is automatically cut. The +tractor beam will also be broken if either ship is hit by a +torpedo or damaged by a nova. + +Examples: + +TR Break any existing tractor beam. +TR OFF Equivalent to "TR". +TR B Apply tractor beam to the Buzzard. +. + + +.TYPE +TYPE game, input, and output settings + +Syntax: TYpe OPtion|OUtput + +Type the current game OPTION and OUTPUT settings. +The OPTION settings are: +- The version number and date of implementation, + - Whether there are Romulans in the game, +- and whether there are Black Holes in the game. +The OUTPUT settings are: +- SHORT, MEDIUM, or LONG output, +- NORMAL or INFORMATIVE command prompt, +- SHORT or LONG sensor scans, +- ABSOLUTE or RELATIVE default for coordinate input, +- ABSOLUTE, RELATIVE, or BOTH for coordinate output, +- and the current TTYTYPE. + +Examples: + +TY OP List the option settings. +TY OU List the output settings. +. + + +.USERS +List USERS + +Syntax: Users + +List all ships currently in the game. Include ship name, +captain (may be changed by SET NAME), TTY speed, PPN, TTY +number, and job number. If the output format is set to medium +or short, omit the TTY and job numbers. If the output format is +set to short, omit the TTY speed and PPN (include only the ship +name and captain). diff --git a/pdp10/deploy/DECWAR.NWS b/pdp10/deploy/DECWAR.NWS new file mode 100644 index 0000000..d9012db --- /dev/null +++ b/pdp10/deploy/DECWAR.NWS @@ -0,0 +1,16 @@ +The current version of DECWAR has +a new interlocking precedure which +should alleviate many of the long +delays formerly encountered. +It also has parameter settings for +beginner, intermediate, and expert +players. You will be asked which +settings you wish to use once you +are into the game. +The edit number, which is typed +out when you enter the program, +will be incremented whenever major +changes have been made. You can +use the NEWs command whenever you +notice a new version number to find +out what has changed. diff --git a/pdp10/deploy/arc/DEFINE.HLP b/pdp10/deploy/arc/DEFINE.HLP new file mode 100644 index 0000000..a490003 --- /dev/null +++ b/pdp10/deploy/arc/DEFINE.HLP @@ -0,0 +1,21 @@ + + + +_.DEFINE +. +DEFINition of TELL groups +.skip 1 +Syntax: DEfine +.skip 1 +This command is used to assign groups of ships to a specific name, thus +simplifying the sending of messages to multiple players. All players +begin the game with certain standard group names defined, as described +in the TELL help file. Groups may be redefined or eliminated as +desired. Group names will be truncated to five (5) characters. +.skip 1 +Examples: +.skip 1.nf +DE fools i e l TELL FOOLS now equivalent to TELL I E L. +DE fools Eliminates FOOLS as a valid group name. +_. +.skip 1.f diff --git a/pdp10/deploy/arc/SECWAR.HLP b/pdp10/deploy/arc/SECWAR.HLP new file mode 100644 index 0000000..9cc9e1e --- /dev/null +++ b/pdp10/deploy/arc/SECWAR.HLP @@ -0,0 +1,1399 @@ + DECWAR Version 2.3, November 20, 1981 + (Includes help on SYSTEM commands) + + +.Introduction +Introduction and Overview of the Game of DECWARs. + + DECWAR is a real time space battle game designed to be +played by from 1 to 10 people. The object of the game is to +destroy all enemy bases and ships, and capture all enemy +planets, before the enemy does the same to you. Each person +plays on a separate terminal, and enters the game by selecting + + 8 DECWAR (on the MultiPlayer Host) + +Players are free to enter and leave the game as desired, since +each has his own job and therefore won't interfere with the +other players (the jobs interact through a shareable high +segment). + + + Besides the enemy (Federation or Empire), the following may +also be a threat to your well being. + + 1. Romulans are nasty beasts that beginners are better off + without. However, if you're the only person playing, + the Romulan is your only competition. Romulans tend to + make for shorter games but when there are 3 or less + players a Romulan will be included. After the fourth + player joins the game, a Romulan will not be re-created + once he is destroyed. include Romulans in the game. + + 2. Black holes are annoying, since if you are displaced + into one, you're dead. They also tend to gobble up + stray torpedos. There is a 25% chance of black holes + being included in the game. + + + There are two primary opposing forces in the galaxy -- +Humans (Federation) and Klingons (Empire). As you enter the +game for the first time, you get to choose which side you'll +join (unless there is a large imbalance in the team sizes). If +you are subsequently destroyed and later reenter the game, you +automatically rejoin your old team. + + You get to select the ship you want to control from a list +of remaining ships on your side. There are 5 ships on each +side: + + Federation ships Empire ships + ---------------- ------------ + Lexington Cobra + Nimitz Demon + Savannah Hawk + Vulcan Jackal + Yorktown Wolf + + + + Due to continuous espionage activities, present front-line +ships of the Federation and the Klingon Empire are identical in +strength and weaponry. These ships can move from sector to +sector using either warp or impulse engines, can attack enemy +installations and ships using either photon torpedoes or +phasers, and can defend themselves against such attack using +their deflector shields. All ships also possess sub-space +radios which keep them in touch with friendly starbases and +other ships. + + + The various devices of a ship are subject to damage. This +damage may be due to enemy attack or to over use. These +damages, unlike total ship damage (see ship attributes below), +may be repaired while underway. If damage on a device is less +than 300 units, its performance is degraded. If damage is 300 +or more units, the device is inoperative. A ship possesses the +following devices: + + 1. Warp Engines -- These engines are the normal mode of + travel for starships. The maximum speed is warp factor + 6, with warps 5 and 6 risking potential damage to the + engines. If warp engines are damaged (less than 300 + units) the maximum speed is warp factor 3. + + + NOTE + + One warp unit is equivalent to one horizontal + or one vertical grid movement. A diagonal + movement is equivalent to the hypotenuse of the + horizontal and vertical sides. + + + + 2. Impulse Engines -- These engines are basically for + emergency use while the warp engines are critically + damaged. Impulse engines move the ship at warp factor + 1. + + 3. Photon Torpedo Tubes -- Used to fire photon torpedoes. + If these tubes are damaged, the accuracy of torpedo + bursts is impaired. The maximum torpedo range is 10 + sectors. + + 4. Phaser Banks -- Each ship possesses two phaser banks, + with a single phaser control. Damage to this phaser + control or to the ship's computer reduces the strength + of the phaser hit. + + 5. Deflector Shields -- The deflector shields of a ship + protect it from damage from phaser and photon torpedo + hits, and shield it from the energy released when a + star goes nova. The percent shield strength indicates + the percent of the incoming hit which will be + nullified. In addition, strong deflector shields may + deflect photon torpedoes with little or no damage. + NOTE: If a ship's shields are up, the amount of energy + expended during movement is doubled. + 6. Computer -- The ship's computer is used for computed + firing, computation during ship movement, and for + phaser control. If the computer is inoperative, + navigation during warp and impulse movement becomes + inexact. + + 7. Life Support -- If the life support units of a starship + are inoperative, the ship must either repair this + damage or dock within 5 stardates. If this is not + accomplished, the crew will die. + + 8. Sub-Space Radio -- The sub-space radio is used to + communicate with other ships, of either side. Bases + under attack also use the sub-space radio to call for + help and notify their team's ships of their + destruction. + + 9. Tractor Beam -- The ship's tractor beam is used + primarily to tow damaged friendly ships away from + danger. The beam can not be used unless both ships + have lowered their shields. + + + In addition to the individual devices discussed above, a +newly commissioned ship (or a fully repaired and rearmed older +ship) possesses the following attributes: + + 1. 5000 units of ship energy. Ship energy is used during + movement and phaser firing. It is also decreased each + time the ship gets hit with phasers or photon + torpedoes. If this quantity ever reaches zero, the + ship is dead. A ship possessing 1000 units of ship + energy or less automatically goes to yellow alert, and + a warning bell sounds after every move. + + 2. 2500 units of shield energy. This energy is stored in + the ship's shields (whether up or down), and is + separate from the ship energy. However, energy may be + transferred between these two energy reserves as + needed. If shields are up, their energy is decreased + each time the ship gets hit. + + 3. Zero units of ship damage. During battle, a ship + collects hits from enemy installations and ships. If + these accumulated hits ever reach 2500 units of damage + or greater, the ship is destroyed. Ship damage may be + reduced only by docking. + + + The galaxy is arranged in a grid of 75 by 75 sectors. +Players can move freely throughout the galaxy in search of +enemies, which come in several categories: + + 1. Romulan. This can be the most dangerous thing to come + up against, and fortunately there is a maximum of 1 + Romulan in the game at any given time. The Romulan + moves around concealed by his cloaking device until he + comes across a suitable target (Federation or Empire + ship or base) which he immediately proceeds to attack. + An infinite supply of torpedoes and energy make him a + formidable foe. If you kill one, another will + eventually appear somewhere in the galaxy. + + 2. Enemy ship. This is the second most dangerous thing to + come across, since all enemy ships are backed by human + intelligence. All ships are created equal, and so the + outcome of a clash between two ships is usually due to + skill on its captain's part, although some other + factors do come into play. + + 3. Enemy base. These aren't dangerous unless you come + within range (4 sectors) since they are immobile. If + you ARE foolish enough to get within range, however, + their overwhelming phaser power will quickly pound you + into rubble! Destroying a base is useful primarily + because this removes it from use by your enemy (bases + are used as supply stations and as a refuge in times of + stress). A damaged starbase will slowly build itself + back to full strength if it is not completely + destroyed. + + 4. Enemy planet. These are just like enemy bases, except + that they are weaker (how much weaker depends on how + many fortifications the enemy has built on them), and + they can be captured. Their firing range is only two + sectors, and they can re-supply the enemy less rapidly + than can a base. + + 5. Neutral planet. While these aren't strictly classified + as enemies, they will take pot shots at you (their + range is also 2 sectors), so be wary of them. You can + capture neutral planets and win them over to your side. + + + + When playing the game, all commands can be abbreviated to 2 +characters, and some can be abbreviated to 1 character (you can +use the shortest unambiguous abbreviation). For a list of +commands type + + HELP * + +and for a description of an individual command type + + HELP command + +The help on individual commands will be read from this help file +(that's what the periods in column 1 are for in the long +description of each command). The legal commands are: + + 1. BASES -- List information on friendly and known enemy + bases. + + 2. BUILD -- Develop installations on a planet, and + eventually build it into a base. The planet must first + be captured. + + 3. CAPTURE -- Win a neutral or enemy planet over to your + side. + 4. DAMAGES -- List damaged devices and their current + status. + + 5. *DEBUG -- A password-controlled routine to enter DDT + directly from DECWAR. + + 6. DOCK -- Dock at an adjacent base or planet. This + increases your energy, replenishes your torpedoes, + repairs your ship a little, and reduces your ship + damage. + + 7. ENERGY -- Transfer energy between two ships. + + 8. GRIPE -- Record bugs, comments, suggestion, etc. in + the file GAM:DECWAR.GRP, which is periodically reviewed + by the implementors. + + 9. HELP -- List or describe the legal commands. + + 10. IMPULSE -- Move using impulse engines. + + 11. LIST -- List various information about ships, bases, + and planets. + + 12. MOVE -- Move using warp engines. + + 13. NEWS -- Tell about any new features or enhancements + described in the file GAM:DECWAR.NWS. + + 14. *PASSWORD -- Set password for debugging, cheating, etc. + + 15. PHASERS -- Fire phasers at a target. + + 16. PLANETS -- List information on friendly and known enemy + and neutral planets. + + 17. POINTS -- List your score breakdown so far. + + 18. QUIT -- Get out of the game. + + 19. RADIO -- Turn ship's sub-space radio on or off; ignore + or restore communications from individual ships. + + 20. REPAIR -- Repair your damaged devices a little. + + 21. SCAN -- Display the galaxy with the default range set + to maximum (10 sectors in each direction from your + ship). + + 22. SET -- Set various input and output defaults. + + 23. SHIELDS -- Transfer energy to or from your shields; + raise or lower your shields. + + 24. SRSCAN -- Display the galaxy with a default range of 7 + sectors (1 greater than the maximum warp factor). + + 25. STATUS -- List your ship's current status and supply + levels. + 26. SUMMARY -- List various information on ships, bases, + and planets. + + 27. TARGETS -- List targets (enemies within range) and + their current locations. + + 28. TELL -- Send messages to other ships using the + sub-space radio. + + 29. TIME -- List information on run time and elapsed time. + + 30. TORPEDOES -- Fire photon torpedoes at a target. + + 31. TRACTOR -- Use tractor beam to tow friendly ships. + + 32. TYPE -- List current input, output, and game + characteristics. + + 33. USERS -- List the names and other information known + about the players currently in the game. + + + + . .INPUT +General INPUT information + +- Only the first 5 characters of each input word are stored. + Any characters beyond that are ignored. +- Input words may be separated by spaces, tabs, or commas. +- The input line can be terminated with , , , , + , or ^Z. +- ^G toggles echo. At the beginning of each input line, echoing + is turned on. Typing ^G turns it off, the next ^G turns it + back on, etc. Echoing is always turned back on at the end of + an input line, or if ^U is typed. +- Multiple commands may be given on a single command line by + separating the commands with / (slash). If the TELL command + is given, it must be last on the line. +- Anything after ; (semicolon) is treated as a comment and is + ignored (but TELL rescans the line and takes the text after + the first ; as the message to send). +- (escape, or altmode) entered as the first character in + response to the command prompt (even before ^H, ^U, or ^R) + repeats the previous command. This is useful when building a + planet, docking, repairing, firing torpedoes, etc. Altmode + can't be used to repeat a TELL command. + +- Any ship name can be abbreviated to 1 character. +- Any command or keyword can be shortened to the shortest + unambiguous abbreviation, which is never more than 2 + characters. + +- Many commands require a coordinate as an argument (PHASERS, + TORPEDOES, CAPTURE, BUILD, etc.). The required coordinate(s) + can be specified in one of three ways: + Absolute - the default coordinate input type, which is simply + an absolute vertical position followed by an absolute + horizontal position. The coordinate may be preceded by the + keyword ABSOLUTE, but this isn't necessary unless the + default coordinate input type has been changed by SET ICDEF + RELATIVE. + Relative - the keyword RELATIVE, followed by a relative + vertical distance and a relative horizontal distance. A + positive distance is either up or right, and negative is + either down or left. The absolute coordinate is computed by + adding the relative distances to your current position. The + keyword RELATIVE isn't needed if the default coordinate + input type has been changed by SET ICDEF RELATIVE. + Computed - the keyword COMPUTED followed by a ship name. The + coordinate used is the location of the given ship. This + type of coordinate computation is available only to captains + controlling their ships through slow terminals (< 1200 + baud), and requires an operational computer. + * If the password is set you can use computed coordinates + even on a fast terminal. + The keyword ABSOLUTE, RELATIVE, or COMPUTED is only given one + time for each set of coordinates. For instance, the TORPEDO + command can accept up to 3 coordinates, but the keyword + describing the coordinate input type is given only once, and + all coordinates must be of the same type. +. + .OUTPUT +General OUTPUT information + +The SET OUTPUT LONG/MEDIUM/SHORT command controls the length of +text output throughout the game. In particular, Medium or Short +hit messages received during battle are greatly reduced in +length when compared to the Long format. Unfortunately, these +shorter forms are not as self-explanatory as the Long form. The +following are some equivalent Long, Medium and Short hit +messages: + +- Goblin @22-31, +83.6% makes 285.3 unit torpedo hit on + Vulcan displaced to 20-31, +72.1% + + G @22-31, +83.6% 285.3 unit T V -->20-31, +72.1% + + G 22-31 +83 285T V >20-31 +72 + + +- Emp planet(3) @15-16 makes 155.5 unit phaser hit on + Buzzard @15-17, 66.8% + + -@3 @15-16 155.5 unit P B @15-17, 66.8% + + -@3 15-16 155P B 15-17 +66 + + Note: The -@3 indicates an Empire planet built 3 times. + + +- Star @22-31 +4,+2 makes 301.2 unit hit on + Panther displaced to 20-31 +2,+2, -72.1% + + * @22-31 +4,+2 301.2 unit N P -->20-31 +2,+2, -72.1% + + * 22-31 +4,+2 301N P >20-31 +2,+2, -72 + + Note: The relative coordinates appear due to a SET OCDEF BOTH + command. The Panther's shields are 72.1% of max strength, but + down (-72.1%). +. + + +.PREGAME +The Decwar PRE-GAME feature + +DECWAR provides a Pre-game feature to allow: +- New players to view the help file without entering the current + game. +- Experienced players to check the status of a current game + before choosing a side and ship. +- Players to submit Gripes without entering the game. + +The commands currently active within the Pre-game section are: +Activate Gripe Help News Points Quit +Summary Time Users + +The ACTIVATE command (valid only in the pre-game) is used to +exit the pre-game section and enter the normal ship setup stage. +The pre-game can be recognized from the 'PG>' command prompt. +. + .HINTS +Some general HINTS + +- When in doubt, use the on-line help system. See the help on + HELP for more information. +- If the output starts piling up in the middle of a battle, type + ^O (CTL-O). None of your commands will be executed until + output is finished, so it's sometimes better just to ignore + the hit messages so your attack or run commands can be + executed immediately. +- Use multiple commands per line (separate commands with /). + Once you're in a danger area, things can happen faster than + you can react to them. Plan your action ahead of time, before + you enter a danger area. +- If some unexpected action happens, such as an enemy finding + you, and you have several stacked commands (either from a + multiple command line or typing ahead), type ^C to abort all + stacked commands (especially if it involves time consuming + commands such as BUILD, or commands that generate a lot of + output, such as SCAN). You can then proceed to remedy the + situation by giving your unexpected visitor a good beating. +- If you're on a slow terminal, use computed coordinates, and + move around a lot if you're fighting someone on a fast + terminal. Computed coordinates are the primary advantage slow + terminals have over the fast ones (computed coordinates give + slow terminals a fantastic tactical advantage over fast + terminals when used properly). +- Use to repeat commands (see the help on ESCAPE). It's + just a convenience when building planets, etc., but in battle, + and combined with multiple commands per line and/or computed + coordinates (such as PH C B/M R 1 0 or TO 1 32 45), it can + make or break your career as a starship captain. +- Don't get within range of an enemy base, unless you enjoy + being pounded into rubble. You can kill a base just as well + from 1 sector outside it's range (use the WARNING keyword on + SCAN to see the range of an enemy base). +- Don't waste your energy and torpedoes firing at friendly ships + and bases. If you're not sure if it's friendly or not, type + HELP SCAN for a list of what's what. You can also use the + TARGETS command to see which enemies are lurking about (see + the help on TARGETS and LIST). +- Don't make it a habit of sitting next to stars; photon + torpedoes can turn them into novas, which are extremely + destructive. Conversely, if you notice an enemy ship or base + adjacent to a star, take advantage of the situation! +- One sure way to locate enemy ships is to watch for newly + captured enemy planets by using the PLANETS or LIST command. +- In general, don't waste photon torpedoes battering at a target + with 85-100% shields. The chances are good that they will + just be deflected harmlessly away. Use your phasers to weaken + the shields, then use torpedoes to finish him off. This is + especially true when attempting to destroy an enemy starbase. +- Use the SET command in DECWAR.INI to personalize the output to + your own tastes. That way you'll be guaranteed to have the + output set right each time you play a game. +- To always see the range and direction of any object listed (in + hit messages, output from the LIST command, etc.), SET OCDEF + BOTH. (The range is the magnitude of either delta v or delta + h, whichever is larger.) +. + .PAUSES +Commands that take real time + +Many of the commands are designed to take a certain amount of +real time. This is done to help equalize the game when there +are different speed terminals and different speed typists in the +game. Some commands take a constant amount of time, and some +are based on the speed of the slowest terminal in the game. + +BUILD 5 to 7 seconds +CAPTURE 5 seconds + 1 second for each BUILD of enemy + planet +DOCK 2 to 4 seconds +IMPULSE 2 to 4 seconds +MOVE 2 to 4 seconds +REPAIR (0.08 * repair size) seconds (* 0.5 if docked) + +You have 2 phaser banks, each of which must be cooled off after +it's fired before it can be used again. Each phaser bank takes +3 to 6 seconds plus the amount of phaser damage / 100 to cool +off. For instance, if there was a 300 baud terminal in the +game, and your phasers had 200 units of damage, each of your +phaser banks would take 6 + 2 = 8 seconds to cool off after +being fired. Therefore, you could fire once every 4 seconds, or +twice every 8 seconds. + +After each burst of torpedoes the tubes must be reloaded before +being used again. It takes 2 to 4 seconds plus the amount of +torpedo tube damage / 100 to load a torpedo. For instance, if +there was a 300 baud terminal in the game, your torpedoes had +200 units of damage, and you had just fired 3 torpedoes, it +would take 3 * (4 + 2) = 18 seconds before you could fire +torpedoes again. +. + + +.CTL-C +Use of ^C + +If you're in command input wait (DECWAR is waiting for you to +type a command), typing a ^C will abort the game and return you +to monitor mode. When you abort the game in this manner, your +ship is returned to the pool of available ships. You will be +able to continue unless a new player has taken your ship or +someone has moved into the spot you occupied. + +If you're not in a command input wait state when you type ^C, +any stacked commands (commands that you typed in ahead of time +that haven't been executed yet) will be aborted, and a series of +bells will be output. + +NOTE: A ship under RED alert conditions can not be returned to +the monitor level except by using the QUIT command. +. + .BASES +List various BASE information + +Syntax: BAses [] + +List location and shield percent of friendly bases; location of +known enemy bases; or count of bases of either side within a +specified range or the entire galaxy. The default range is the +entire galaxy, and the default side is friendly bases only. See +the help for LIST for more information and the complete set of +keywords that can be used to modify BASES output. + +Examples: + +BA List location and shield percent of all friendly + bases. +BA ENEMY List location of all known enemy bases. +BA SUM Give summary of all friendly bases. +BA ALL SUM Give summary of all bases. +BA CL List the location and shield percent of the + closest friendly base. +BA 34 26 List the location and shield percent of friendly + base at 34-26 (it doesn't have to be friendly, + but you can't see the shield percent of an out + of range enemy base). +. + + +.BUILD +BUILD fortifications on a captured planet + +Syntax: BUild [Absolute|Relative] + +A fortified planet hits harder and is more resistant to +destruction by the enemy. A planet can normally be built up to +4 times. As your team's starbases are destroyed by enemy +action, a fifth build will complete the construction of a new +starbase on the planet. Only 10 starbases can be functional at +any one time. + +Examples: + +BU 32 12 Build the planet at sector 32-12. +BU A 32 12 Equivalent to "BU 32 12" +BU R 1 1 Build the planet at sector 32-12, if your + present location is 31-11. +. + + +.CAPTURE +CAPTURE a neutral or enemy planet + +Syntax: CApture [Absolute|Relative] + +At the start of the game, all planets are neutral (they fire at +everyone!). Once captured by either side, they fire only at +enemy ships, and can be DOCKed at to refuel and rearm, just like +a base (except a planet can only supply half the resources that +a base can). Enemy planets can also be captured. When +capturing an enemy planet, 1 second is added to the normal pause + time of 5 seconds for each BUILD present. Also, 50 units of +ship energy are lost for each build. + +Examples: + +CA 12 32 Capture planet at 12-32. +CA A 12 32 Equivalent to "CA 12 32". +CA R 1 1 Capture planet at sector 12-32, if your present + location is 11-31. +. + + +.DAMAGES +DAMAGE report + +Syntax: DAmages [] + +List damaged ship devices and the amount of damage to each. The +condition of all or just selected devices may be examined. +Total ship damage is not reported. + +Examples: + +DA List all damaged devices and their current + damages. +DA SH T List damages for SHields and Torpedo tubes. +DA PH RA C List damages for PHasers, sub-space RAdio, and + Computer. +. + + +.*DEBUG +DEBUG the game + +If DDT is loaded: + Chain to DDT to allow variables to be examined and altered, + set break points, etc. To get back to DECWAR, type C.$G. +If DDT is not loaded: + Exit to the monitor. If a symbol file is present, variables + can still be easily examined by entering DDT through the + monitor command DDT. +. + + +.DOCK +DOCK at a friendly base or planet + +Syntax: DOck [Status []] + +Refuel, repair, and rearm your ship, and set your ship's +condition to green. While docked, any repairs are accelerated, +and you have an "infinite" supply of torps. If you have no +damages and are completely refueled and rearmed, DOCKing will +have no effect on your ship. A STATUS command string can be +appended to a DOCK order. The following table lists the maximum +resources available per move when DOCKing at a base or planet: + +Resource Base Planet +---------------------------------------------- +Ship energy +1000 +500 + Shield energy +500 +250 +Photon Torpedoes +10 +5 +Life Support Reserves +5 +5 +Ship Damage -100 -50 +Ship Damage, if already docked -200 -100 + +Examples: + +DO Dock, no status report. +DO ST Dock, show ship's status AFTER docking. +DO ST SH T Dock, show ship's shield strength and number of + torpedos on board AFTER docking. +. + + +.ENERGY +Transfer ENERGY to a friendly ship + +Syntax: Energy + +The receiving ship must be located in an adjacent sector. 10% +of the energy transferred will be lost due to broadcast +dissipation. If you attempt to send more energy than the other +ship can store (ie 5000 units), the transfer will automatically +be reduced to the maximum possible. + +Example: + +E I 1000 Transfer 1000 units of energy to the Intrepid. + The Intrepid will receive 900 units of energy. +. + + +.GRIPE +Submit a GRIPE + +Syntax: Gripe + +Add a comment, bug report, suggestion, etc. to the top of file +GAM:DECWAR.GRP. Type in your comments, then ^Z (CTL-Z) to exit +and continue the game, or ^C (CTL-C) to abort and not send the +gripe. Each gripe is preceded with a header that includes the +version number, date, time, ship name, user name, TTY speed, +PPN, TTY number, job number, and whether or not Romulans and/or +black holes are included in the game. Unless you are currently +under red alert, GRIPE will protect you from enemy attack. To +view gripes not yet acted upon, type the file GAM:DECWAR.GRP. +To view answered gripes, and see what action was taken on them, +type the file GAM:DECWAR.FXD. +. + + +.HELP +Give HELP + +Syntax: Help [*|] + +Give general help info, a list of available commands, or a +detailed description of a particular command or keyword. Unless +you are under red alert, HELP will protect you from enemy + attack. The following conventions are used in the detailed +descriptions: +- The first line contains, in all caps, the keyword that help is + being given for. +- The syntax line (second line) lists the portion of the keyword + required to make it unique in caps, and the remainder of the + keyword in lower case, followed by any parameters (if the + keyword is a command). +- A quantity to be filled in is lower case and enclosed in <> + (angle brackets). +- Optional parameters are enclosed in [] (square brackets). +- A choice (either or) is indicated by | (vertical bar). +- Any parameter that must be typed in literally is started in + capital letters and continued in lower case. The upper case + letters signal the shortest unambiguous abbreviation (the + shortest abbreviation may change slightly, depending on + context). + +Examples: + +H Give general help info. +H * List all available commands. +H H List this block of text. +H SH Give help for the SHIELDS command. +H HI G Give some general HINTS and a description of the + GRIPE command. +. + + +.IMPULSE +Move using IMPULSE engines + +Syntax: Impulse [Absolute|Relative] + +Move one sector vertically, horizontally, or diagonally +(equivalent to warp factor 1). Ship condition changes to green. + +Examples: + +I 37 45 Move to sector 37-45. +I A 37 45 Equivalent to "I 37 45". +I R 1 -1 Move to sector 37-45, if your ship's present + location is 36-46. +. + + +.LIST +LIST ship, base, and planet info + +Syntax: List [] + +The following information is available via the LIST command: +- Name of any ship currently in the game (including the + Romulan). +- Location and shield percent of any friendly ship, or any ship + within scan range (10 sectors). +- Location and shield percent of any friendly base, or any base + within range. +- Location of any known enemy base (any base that has previously + been SCANned or LISTed by anyone on your team). + - Location and number of builds of any known planet, or any + planet within range. +* Note: If the password flag is set, all ships, bases, and + planets are "known" about. So, with the password set, LIST, + SUMMARY, BASES, PLANETS, and TARGETS will allow you access to + any information they are capable of providing. However, any + information received because of the password being set is not + "remembered" like information learned through normal use of + these commands. +The above information is also available, in whole or in part, +through the SUMMARY, BASES, PLANETS, and TARGETS commands. Each +command has it's own default range, side (Federation, Empire, +Romulan, Neutral), and object (ship, base, planet). LIST (and +SUMMARY) include everything (infinite range, all sides, all +objects) by default. On output, enemy objects are flagged with +* (star) in column 1 unless the command is TARGETS. + +Keywords used with BASES, PLANETS, TARGETS, LIST, and SUMMARY +(not all keywords are legal for all commands): + +ship names Include only specified ships (several ship names + may be given, including Romulan). +vpos hpos List only the object at the location vpos-hpos. +CLosest List only the closest of the specified objects. + +SHips Include only ships (Federation, Empire, or + Romulan). +BAses Include only bases (Federation or Empire). +PLanets Include only planets (Federation, Empire, or + Neutral). +POrts Include only bases and planets. If no side is + specified (Federation, Empire, Neutral, or + Captured), include only friendly ports. + +FEderation Include only Federation forces. +HUman Same as Federation. +EMpire Include only Empire forces. +Klingon Same as Empire. +FRiendly Include only friendly forces (Federation or + Empire). +ENemy Include only enemy forces (Empire or Federation + and Romulan). +TArgets Same as enemy. +NEutral Include only neutral planets. +CAptured Include only captured planets (Federation or + Empire). + +n Include only objects within n sectors. +ALl Include all sides unless a side is explicitly + given. Extend the range to infinity unless a + range is explicitly given. + +LIst List individual items. Turn off summary unless + command is SUMMARY or the keyword SUMMARY is + specified. +SUmmary List summary of all selected items. Turn off + list unless command is LIST or the keyword LIST + is specified. Extend the range to infinity + unless a range is explicitly given. + And Used to separate groups of keywords. +& Same as AND. + +Examples: + +LIST List all information available on all ships, + bases, and planets. +LIST SUM List all available info plus a summary of the + number of each object in game. +LI EN BA List the location of all known enemy bases. +LI SH List all available info on all ships in the + game. +LI CL PO List closest friendly base or friendly or + neutral planet. +LI 1 3 & 9 5 List the objects at locations 1-3 and 9-5. +. + + +.MOVE +MOVE using warp drive + +Syntax: Move [Absolute|Relative|Computed] + +Maximum speed is warp factor 6, which will move you 6 sectors +per turn. Maximum SAFE speed is warp factor 4; warp factors 5 +and 6 risk potential warp engine damage. Energy consumption per +move is proportional to the square of the warp factor. If the +ship's shields are up during this movement, the energy +consumption is doubled. Moving changes your ship's condition to +green. + +Examples: + +M 37 45 Move to sector 37-45. +M A 37 45 Equivalent to "M 37 45". +M R 4 -5 Move to sector 37-45, if your present location + is 33-50 (move up 4 sectors and left 5 sectors). +M C W "Ram" the Wolf. No actual collision occurs, but + your ship ends up adjacent to the Wolf's current + position. +. + + +.NEWS +Display the NEWS file + +Syntax: NEws + +Display the file which contains information on any new features, +enhancements, bug fixes, etc for each version of DECWAR. +. + + +.*PASSWORD +Set PASSWORD + +Syntax: *Password [] + +If the correct password is given, set the password flag. If no +password is given, or the password is incorrect, issue an error + message and clear the flag. The password flag must be set to +access system commands (*DEBUG). Also, with the password flag +set, you have access to ANY information that LIST can supply, +including detailed information on out of range enemy forces. It +is suggested that you turn off echoing by typing ^G (CTL-G) +before you type in any system command, and especially before +typing in the password. +. + + +.PHASERS +Fire PHASERS at an enemy ship, base, or planet + +Syntax: PHasers [Absolute|Relative|Computed] [energy] + + +Phasers must be directed at a specific target, and only one +target may be specified per command. Obstacles seemingly in the +path of the phaser blast are unaffected, since the energy ray is +not a line-of- sight weapon. The size of the hit is inversely +proportional to the distance from the target. Maximum range is +10 sectors vertically, horizontally, or diagonally. Each phaser +blast consumes 200 units of ship energy, unless a specific +amount of energy is given (the specified energy must be between +50 and 500 units, inclusive). The phaser banks have roughly a +5% chance of damage with a default (200 unit) blast, with the +probability of damage reaching nearly 65% with a maximum (500 +unit) blast. The severity of the resulting damage is also +dependant on the size of the blast. Also, if your ship's +shields are up, a high-speed shield control is used to quickly +lower and then restore the shields during the fire. This +procedure consumes another 200 units of ship energy. The +weapons officer on board your ship will cancel all phaser blasts +directed against friendly ships, bases, or planets. Firing +phasers (or getting hit by phasers) puts you on red alert. +NOTE: Although phasers can damage enemy planetary installations +(BUILDs), they can NOT destroy the planet itself. + +Examples: + +PH 12 32 Phaser target at sector 12-32. +PH A 12 32 Equivalent to "PH 12 32". +PH R 2 -3 Phaser target at sector 12-32, if your location + is 10-35. +PH C BUZZARD Phaser the Buzzard (if in range). +PH C B Same as PH C BUZZARD (ship names can be + abbreviated to 1 character). +PH 300 12 32 Phaser target at sector 12-32, using 300 units + of energy. +. + + +.PLANETS +List various PLANET information + +Syntax: PLanets [] + +List location and number of builds for all known planets, and a +summary of planets within a specified range or the entire +galaxy. The default range is 10 sectors, and the default side + is every side. See the help for LIST for more information and +the complete set of keywords that can be used to modify PLANETS +output. + +Examples: + +PL List all planets within 10 sectors. +PL SUM Give summary of all planets in game. +PL ALL NEU List all known neutral planets. +PL ALL CAP List all known captured planets. +PL ALL 20 List all known planets within a radius of 20 + sectors. +. + + +.POINTS +List POINTS scored so far this game + +Syntax: POints +[Me|I|Federation|Human|Empire|Klingon|Romulan|All] + +Itemize the current point breakdown. Information can be +obtained concerning the points scored by your individual ship, +your team, the opposition, the romulans, or any combination of +the above. If the Romulan Empire is not involved in the game, +the ROMULAN keyword will be ignored. + +Categories in POINTS breakdown: +- Damage to enemies. +- Enemies destroyed (500 points each). +- Damage to bases. +- Planets captured (100 points each). +- Bases built (1000 points each). +- Romulans damaged/destroyed. +- Stars destroyed (-50 points each). +- Planets destroyed (-100 points each). + +- Total points scored. +- Total number of ships commissioned. +- Total score / number of players. +- Total score / stardates. + +Examples: + +PO List points for your ship. +PO ME Equivalent to "PO". +PO KLI FED List the score of the two teams. +PO ALL List all the scoring information available. +. + + +.QUIT +QUIT the game + +Syntax: Quit + +Quit the game before normal end of execution and return to the +monitor. Your ship is released for use by another player, +you're chalked up as just one more casualty, and you can't +CONTINUE the game. If you want to rejoin the game, you'll have + to wait 2 minutes, and then either START or RUN the game. If +you want to exit the game temporarily (to answer SENDS, etc.), +type ^C (CTL-C), and you'll usually be able to CONTINUE. NOTE: +If you're under red alert, you won't be able to ^C out of the +game; you'll have to use the QUIT command. +. + + +.RADIO +Turn sub-space RADIO on or off, or +set to ignore or restore communications from individual ships + +Syntax: RAdio ON|OFf or RAdio Gag|Ungag + +Turn your ship's sub-space radio on or off, thus controlling +whether or not you'll receive any messages from other ships or +your bases; or suppress or restore messages originating from +specific ships. + +Examples: + +RA ON Turn sub-space radio ON. +RA OFF Turn sub-space radio OFF. +RA G L Suppress all radio messages sent by the + Lexington. +RA U W Allow radio messages sent by the Wolf to be + received. +. + + +.REPAIR +REPAIR device damage + +Syntax: REpair [] + +Repair damaged ship devices. If a ship suffers a critical hit +to a device, REPAIR can be used to restore the device to full +(or partial) working order. A REPAIR removes the specified +units of damage from each damaged device, in addition to the +normal repair rate of 30 units per turn. If the ship is DOCKED, +the pause time for the specified REPAIR is reduced by half of +that needed while in flight. If the repair size is not +specified, REPAIR defaults to a 4 second repair (50 units + 50 +more if docked). REPAIR does NOT reduce the SHIP damage. + +Examples: + +RE 100 Remove up to 100 units of device damage. +RE Same as "RE 100" if DOCKED, else same as "RE + 50". +. + + +.SCAN +Full range SCAN + +Syntax: SCan [Up|Down|Right|Left|Corner] [|
] [W] + +Display a selected portion of the nearby universe. If no range +is specified, SCAN defaults to a square scan range of ten + sectors from the present ship location. The keywords UP, DOWN, +RIGHT, LEFT, and CORNER modify this to include only the part of +this original square specified (relative to the ship). The +maximum scan range is 10 sectors, and larger specified ranges +are reduced to this value. If individual vertical and +horizontal ranges are specified, the scanning field will be +shaped accordingly. The WARNING keyword if added to the end of +a SCAN command string will flag the empty sectors within range +of an enemy base or planet with !'s instead of .'s. The SCAN +symbols and their meanings are: + +L, N, S, V, Y Federation warships +C, D, H, J, W Empire warships + ?? Romulan warship + <> Federation starbase + )( Empire starbase + @ Neutral planet + @F Federation planet + @E Empire planet + * Star + Black hole + . Empty sector + ! Empty sector within range of enemy port (only + when using WARNING keyword) + +Examples: + + SC Scan universe within a radius 10 sectors. + SC 10 Equivalent to "SC". + SC 13 Equivalent to "SC 10" or "SC". + SC 4 Scan universe within 4 sectors. + SC 4 4 Equivalent to "SC 4". + SC 2 8 Scan up to 5 rows and 17 columns, centered on + the present ship location. + SC U 4 7 Show only upper half of normal "SC 4 7" scan. + SC C -5 -5 Scan the region bounded by the present ship + location and the location (-5,-5) sectors away + (puts ship in upper right corner of the scan). + SC W Same as "SC", plus shows danger zones around + enemy bases and planets. +. + + +.SET +SET input and output parameters + +Syntax: SEt + +Keyword Value Description +------- ----- ----------- +Name name Change name (shows in USERS). +Output Long Default. Use longest output format. + Medium Use medium output format. + Short Use short (cryptic) output format. +Scan Long Default. Use long format scans. + Short Use 1 character symbols instead of 2. +Prompt Normal Default. Use "COMMAND: " prompt. + Informative Use "> " for prompt. Precede the ">" with: + S if shields are down or < 10%. + E if ship energy < 1000 (yellow alert). + D if ship damage > 2000. + nL if life support is critically damaged (n + stardates of reserves). Ttytype CRT, ADM-3a, + ADM-2, SOROC, BEEHIVE, ACT-IV, ACT-V Doesn't do + anything yet. +OCdef Absolute Default. Display all coordinates in absolute + format (vpos-hpos). + Relative Display coordinates relative to your location + (dv,dh). + Both Display coordinates in both absolute and + relative form. +Icdef Absolute Default. All input coordinates default to + absolute. + Relative Input coordinates default to relative. + +Examples: + +SE PR I Switch to informative prompt. +SE OU S Set output format to short. +SE N THOR Change your name in USERS to THOR. +. + + +.SHIELDS +SHIELD control + +Syntax: SHields Up|Down or SHields Transfer + +Raise or lower ship shields, or transfer energy between ship and +shield energy reserves. Raising shields consumes 100 units of +ship energy, lowering them or transfering energy is "free". +NOTE: Shield condition is displayed as +n% for shields up, n% +of full strength, or -n%, for shields down, n% of full strength. + +Examples: + +SH U Raise shields. +SH D Lower shields. +SH T 500 Transfer 500 units of energy TO shields +SH T -500 Transfer 500 units of energy FROM shields +. + + +.SRSCAN +Short Range SCAN + +Syntax: SRscan [Up|Down|Right|Left|Corner] [|
] +[W] + +Equivalent to SCAN, but with a default scan range of 7 sectors. +For complete information on sensor scans, see the help on SCAN. +. + + +.STATUS +Show ship STATUS + +Syntax: +STatus +[Condition|Location|Torpedoes|Energy|Damage|Shields|Radio] + Show the current stardate, plus the status of any of the ship +attributes: ship condition, location, number of torps, ship +energy, ship damage, shield energy, and radio condition. Ship +condition can be green, yellow (low on energy), or red (in +battle). Radio condition is either on or off. + +Examples: + +ST Give full status report. +ST T Report how many torpedos remain on board. +ST E D SH Report the ship energy, the ship damage, and the + shield condition (energy, %, up/down). +ST L Report the current ship location. +. + + +.SUMMARY +Give SUMMARY on number of ships, bases, and planets + +Syntax: SUmmary [] + +Give any of the information available from the LIST command, but +give only a summary by default. See the help on LIST for more +information and the complete set of keywords that can be used to +modify SUMMARY output. + +Examples: + +SUM Tell how many ships, bases, and planets are in + the game (broken down into friendly, enemy, and + neutral categories). +SUM EN Tell how many enemies are in the game (number of + Romulans, enemy ships, enemy bases, and enemy + planets). + +.TARGETS +List information on TARGETS + +Syntax: TArgets [] + +Primarily for locating targets during battle, when a SCAN would +be too time consuming. List location and shield percent of any +enemy ship, base, or planet in range; name of any enemy ship in +game (including the Romulan); or location and number of builds +of any known enemy planet. TARGETS is equivalent to a LIST +command with a default range of 10 sectors and a default side of +enemy. + +Examples: + +TA List all targets within 10 sectors. +TA 10 Equivalent to "TA". +TA 5 List all targets within 5 sectors. +. + + +.TELL +TELL another ship something using the sub-space radio + +Syntax: TEll + All|FEderation|HUman|EMpire|Klingon|ENemy|FRiendly| ; + +Send messages to one or several of the players currently in the +game, with no range limitation. Players who have turned their +radios off, or have a critically damaged sub-space radio can not +be sent to. The TELL command can not be repeated using the +ESCAPE key (no junk mail!). + +Examples: + +TE V;Hello! Send "Hello!" to the Vulcan. +TE KL;DROP DEAD Send "DROP DEAD" to all Klingons. +TE V,E;HELP ME Send "HELP ME" to the Vulcan and Excalibur. +. + + +.TIME +List various TIMEs + +Syntax: TIme + +List time since game started; time since your ship entered the +game; run time for your job so far this game; total run time +since login; and current time of day. +. + + +.TORPEDOES +Fire photon TORPEDO burst + +Syntax: +TOrpedo [Absolute|Relative|Computed] n

[

+[

]] + +A photon torpedo is aimed along a path in physical space, thus +any object lying along its path will intercept the torpedo. +One, two, or three torpedoes may be fired with one command, and +the torpedoes may be individually targeted, or fired at a common +location. The minimum range of a torpedo is 8 sectors, but some +will travel 10 sectors before self-destructing. Torpedoes may +be deflected from the desired track by a number of different +factors, including your ship's shield strength, computer and +torpedo tube damage, and torpedo misfires. A torpedo misfire +also aborts the remainder of the burst, and sometimes damages +the torpedo tubes as well. Torpedoes can cause stars to go +nova, and can also destroy planets (if no enemy installations +remain intact). "Accidental" hits on friendly ships, bases, or +planets are automatically neutralized. A torpedo burst uses no +ship energy. Firing torpedoes (or getting hit by one) puts you +on red alert. + +Examples: + +TO 1 12 24 Fire one torpedo at sector 12-24. +TO 3 12 24 Fire three torpedoes at sector 12-24. +TO 3 6 7 8 7 9 12 Fire one torpedo at sector 6-7, one at 8-7, + and one at 9-12. +TO 3 12 24 13 39 Fire one torpedo at sector 12-24, and two at + sector 13-39. + TO A 3 12 24 Equivalent to "TO 3 12 24". +TO R 2 2 -5 Fire two torpedoes at sector 22-25, assuming + your location is 20-30. +TO C 3 BUZZARD Fire three torpedoes at the Buzzard. +TO C 1 E Fire one torpedo at the Excalibur. +. + + +.TRACTOR +TRACTOR beam + +Syntax: TRactor or TRactor Off + +Tow another ship of the same team. The two ships must be +located in adjacent sectors and both ships must have their +shields lowered. Once such a beam is applied, either ship can +pull the other behind it using warp or impulse engines. Energy +consumption for the towing ship is 3 times the normal rate for +movement with the shields down. The ship being towed will end +the move trailing the lead ship. If either ship raises +deflector shields, the tractor beam is automatically cut. The +tractor beam will also be broken if either ship is hit by a +torpedo or damaged by a nova. + +Examples: + +TR Break any existing tractor beam. +TR OFF Equivalent to "TR". +TR B Apply tractor beam to the Buzzard. +. + + +.TYPE +TYPE game, input, and output settings + +Syntax: TYpe OPtion|OUtput + +Type the current game OPTION and OUTPUT settings. +The OPTION settings are: +- The version number and date of implementation, +- Whether there are Romulans in the game, +- and whether there are Black Holes in the game. +The OUTPUT settings are: +- SHORT, MEDIUM, or LONG output, +- NORMAL or INFORMATIVE command prompt, +- SHORT or LONG sensor scans, +- ABSOLUTE or RELATIVE default for coordinate input, +- ABSOLUTE, RELATIVE, or BOTH for coordinate output, +- and the current TTYTYPE. + +Examples: + +TY OP List the option settings. +TY OU List the output settings. +. + + +.USERS +List USERS + Syntax: Users + +List all ships currently in the game. Include ship name, +captain (may be changed by SET NAME), TTY speed, PPN, TTY +number, and job number. If the output format is set to medium +or short, omit the TTY and job numbers. If the output format is +set to short, omit the TTY speed and PPN (include only the ship +name and captain). +* If the password is set, you also get each ship's location. + \ No newline at end of file diff --git a/pdp10/docs/app0-foundations.md b/pdp10/docs/app0-foundations.md new file mode 100644 index 0000000..eb91ad4 --- /dev/null +++ b/pdp10/docs/app0-foundations.md @@ -0,0 +1,221 @@ + +# notes from merlyn around the work he did getting things going on simh pdp10 + + changed files: + 4 -rw-r--r-- 1 mercou 382 Jul 4 01:50 DECWAR.CMD + 4 -rw-r--r-- 1 mercou 3896 Jul 9 08:19 GETCMD.FOR + 12 -rw-r--r-- 1 mercou 9503 Jul 13 01:59 DECWAR.FOR + 4 -rw-r--r-- 1 mercou 1526 Jul 15 19:11 PASWRD.FOR + 16 -rw-r--r-- 1 mercou 13784 Jul 18 04:05 MSG.MAC + 20 -rw-r--r-- 1 mercou 16599 Jul 19 18:10 SETUP.FOR + 8 -rw-r--r-- 1 mercou 6762 Jul 20 03:17 POINTS.FOR + 160 -rw-r--r-- 1 mercou 160801 Jul 24 04:07 WARMAC.MAC + + all changes commented and additions noted by DrForbin AKA Merlyn Cousins. + search for (drforbin), all things yet to be fixed, search (tofix). + email drforbin6@gmail.com to contact me. + + files added: + -rw-r--r-- 1 mercou mercou 528 Jul 31 22:22 CAN1.CMD + -rw-r--r-- 1 mercou mercou 549 Jul 31 22:22 CAN.MIC + and DECCMP.CMD. + + CAN.MIC is linker control file for debug. + CAN1.CMD is linker control file for building executable. + DECCMP.CMD full compile control file. + + to compile unpack all files in directory, preferably a SFD (sub file directory). + and do the following + + compile @com1 + compile @com2 + + This should compile ALL files without any (note WARMAC.MAC) errors. + The compiler should issue 3 warnings for WARMAC. These warnings are understood and will be fixed. There should also be some "Possible index modified in DO loop" warnings. + Ignore these. + They should not affect anything. + This will compile each file into a *.REL file (relocatable file). + + next, + + r link + @can1 + + You should get an EXIT. + than. + + get decwar + ssave + + than create p,pn [1,27] and install + DECWAR.EXE + DECWAR.GRP + DECWAR.HLP + DECWAR.NWS + + in that p,pn + + than path [1,27] + run decwar + +# notes around simh pdp10 + + Requirements: + 1) a copy of bzip2 to extract the image. + 2) a working copy of simh + 3) an intrest in archaic software. + + Getting started: + Obtain a copy of bzip2 and extract the disk image. + Build simh you will only need to build the pdp10 emulator. + put t10.dsk in the same directory as the pdp10 binary. + Run pdp10 and then follow the following dialog: + Script started on Wed 01 Jan 2003 12:22:49 AM EST + %nice +20 ./pdp10 + PDP-10 simulator V2.10-0 + sim> set dz 8b + sim> set tim y2k + sim> att rp0 dskb.dsk + sim> att rp1 dskc.dsk + sim> att lp20 printer.out + sim> att -am dz 2020 + Listening on port 2020 (socket 5) + Modem control activated + Auto disconnect activated + sim> boot rp + BOOT V3(47) + BOOT> + [Loading from DSKB:SYSTEM.EXE[1,4]] + VNW 10-14-99 + Why reload: shced + OPR,PARITY,POWER,STATIC,HARDWARE + NXM,HALT,LOOP,HUNG + PM,CM,SA + NEW,SCHED + OTHER + /H for help + Why reload: sched + Date: 01-jan-2003 + Time: 12:24:15 + Startup option: quick + [Rebuilding the system search list from the HOMe blocks] + [Rebuilding the active swapping list from the HOMe blocks] + [Rebuilding the system dump list from the HOMe blocks] + VNW 12:24:18 CTY system 4097 + Connected to Node (0) Line # 12 + .LOGIN 1,2 + .R OPSER + [CCPWFD Waiting for file daemon to start] + [OPRPAF Processing auto command file] + ?OPRALF LOOKUP failure 0 + * + *%%TTY STOMPER - Starting + ^C + .kjob + + .login public + Job 3 VNW CTY + %LGNSLE Search list is empty + 12:24 1-Jan-3 Wednesday + Welcome to TOPS-10 7.03 + Installed software: + BASIC,COBOL(68 and 74), FORTRAN, ALGOL10A + ,BLISS-36 V4.2, SORT, RMS, APLSFV2, + DBMS V5A, IQL3A V30, Message System V11CK + + .r haunt + This is HAUNT. Version 4.6 + To the west a bus is pulling away from the next bus stop. + *stop + The party's over. + Your final score is 0 + The total possible is 440 + Hmm... I don't think you tried very hard. + .. + + .r aplsf + terminal..tty + HI!: PLEASE LET ME KNOW IF APL IS BROKEN + APL-10 DECSYSTEM-10 APLSF 2(435) + CTY) 12:25:16 WEDNESDAY 1-JAN103 PUBLIC [42,42] + CLEAR WS + )END + 21 INCORRECT COMMAND + )END + ^ + )OFF + CTY) 12:27:17 1-JAN103 + CONNECTED 0:02:01 CPU TIME 0:00:00 + 0 STATEMENTS 0 OPERATIONS + KILO-CORE-SECS 4 + Job 3 User PUBLIC [42,42] + Logged-off CTY at 12:27:16 on 1-Jan-3 + Runtime: 0:00:07, KCS:1247, Connect time: 0:02:30 + Disk Reads:1906, Writes:11, Blocks saved:0 + ##### This section shows how ot shut down the system #################### + .kjob + + .login 1,2 + Job 2 VNW CTY + [LGNJSP Other jobs same PPN] + [LGNLAS Last access to [1,2] succeeded on 31-Dec-2:22:31:54] + 12:27 1-Jan-3 Wednesday + + .r opr + + OPR> + 12:24:27 -- [SYSTEM]CATALOG error -- + Input error reading DSKB:STRLST.SYS[1,4]; End of file + + 12:24:27 -- [SYSTEM]CATALOG error -- + Input error reading DSKB:MTALST.SYS[1,4]; End of file + + 12:24:27 -- [SYSTEM]CATALOG error -- + Input error reading DSKB:DTALST.SYS[1,4]; End of file + + 12:24:27 -- Begin auto take file -- + File: SYS:SYSTEM.CMD[3,3] + + 12:24:28 -- End auto take file -- + 8 lines processed + + 12:24:28 Batch-Stream 0 -- Started -- + + 12:24:28 Batch-Stream 1 -- Started -- + + 12:24:28 Batch-Stream 2 -- Started -- + + 12:24:28 Printer 0 -- Started -- + + KOPR>set ksys +0:01 + OPR> + 12:27:41 -- Event KSYS queued, request #5 -- + + SYSTEM: - Timesharing ends in 1 min at 1-Jan-3 12:28:59 + + KOPR> + 12:27:59 -- Timesharing is over -- + + 12:27:59 -- KSYS processing completed -- + + KOPR> + SYSTEM: - Timesharing is over! + + OPR>exit + + .kjob + [LGTOUL Other users logged-in under [1,2]] + Job 2 User OPERATOR [1,2] + Logged-off CTY at 12:28:08 on 1-Jan-3 + Runtime: 0:00:00, KCS:21, Connect time: 0:00:40 + Disk Reads:210, Writes:1, Blocks saved:0 + . + Simulation stopped, PC: 000001 (SOJG 6,1) + sim> set fe stop + sim> go + BOOT> + Simulation stopped, PC: 706226 (SKIPN 0,302032) + sim> exit + Goodbye + %exit + script done on Wed 01 Jan 2003 12:28:21 AM EST diff --git a/pdp10/docs/app1-tops-10-versions.md b/pdp10/docs/app1-tops-10-versions.md new file mode 100644 index 0000000..8a10f7b --- /dev/null +++ b/pdp10/docs/app1-tops-10-versions.md @@ -0,0 +1,63 @@ + from bitsavers. simh decwars is 7.03 + + $Id: tops-10,v 1.10 2003/08/12 05:25:19 phil Exp $ + TOPS-10 Evolution + Phil Budne + + date release(s) UUOSYM features + 1964-66 1.4-1.9 PDP-6. DECtape only, 27 jobs (UFA, 1 bit per job) + 12/1964 ? CALL (RESET, EXIT), but no CALLI? + 1967 2.18 KA10 support, disk support, shuffler + 1968 3.27 swapping, 36 jobs (using JFFO) + 1969 4.50 dual segments + 4.72 CCL (COMPIL, DIR command), 63 jobs + 1970 5.01 "TOPS-10" name, Disk Service rewrite (Phase I) + 1971 5.02 MPB (batch), RTTRP (real time), + Disk Service rewrite (phase II) + 1972 5.03 1055 multiprocessor (dual KA) + 5/1972? 5.04 3(67)? KI10 support + 7/1972? 5.05 4(110)? 1077 support (dual KI) + 11/1972 5.06 5(115) SFDs (subdirectories) + 5/1974 5.07/6.01 + 7(163) KL support, VM, IPCF (interprocess communication) + 5/1975 5.07A/6.01A + 10(206) + 1975 6.02 11(225) 1088 support (dual KL), class sched, RH10 RP04/6 + ENQ/DEQ (resource locking), Galaxy I (spooling) + DX10/TU7x support? + 3/1977 6.03 12(336) MIC, ANF (PDP-10 comm network) FILDAE (file access daemon) + TTY ALTMODE; many ersatz devices; TM02/TU16 + Unbundled options: DC44, VM, DAS78, XTCSER, TSKSER, ANF + 2/1978 6.03LIR 13(367) "6.03 Scheduler LIR release" + 11/1978 6.03A 13A(406) KLINIK LIR, scheduler LIR, 1091 LIR (MOS memory, RH20) + KS10 support; PATH logical names? + SPPRM., MERGE., UTRP. + 8/1979 7.00 14(457) SMP (limited) only released to SMP sites + 7/1980 7.01 15(521) 1091 MOS support (TGHA); TSK., KDP., QUEUE., RECON. + 5/1982 N/R 15A(547) GALAXY 4.1 (never field image); merged with 7.01A + 7/1982 7.01A 15B(552) GALAXY 4.1 + 12/1983 7.02 16(773) DECnet-10 Phase III (w/ MCB); PITMR. ACCLG. CMAND. SAVE. + user defined commands; monitor can use KL paging + 2/1985 7.02A 16(776) AP11; CI clisters (RA disks on HSC50); TU78 + 1/1986 7.03 17(1060) Ethernet (KLNI): DECnet Phase IV, LAT + job contexts (PUSH/POP); 8 bit character support + terminal "special character" handling + Monitor uses PSECTS, 6 letter stopcodes, GALAXY 5.1 + User mode extended addressing. SYSTEM[MAILER] PID + obsolete: 2741, uk modems, half duplex terminals + Last update to UUOSYM revision history + 6/1986 7.03A 17(1065) AP14 + 7/1986 7.03A 17(1067) AP16 + 1/1988 7.03A 17(1127) AP18 + 5/1988 7.03A 17(1135) AP19 + 7/1988 7.04 17(1137) Command line editing? + SA10 w/ 3330/3331 + LLMOP/LAT PSI events + KS10 memory error table + terminal attributes + DDP., SEGOP. + 3/1989 7.04A? 17(1141) 7.04 autopatch tape 24; RM05 + 1/1990 7.04B? 17(1144) TSU01; ERRPT. obsolete; interval timer patch instructions + 2/1990 ? 17(1145) on TOPS-20 v7.0 TSU02; VM gettabs + 4/1990 ? 17(1146) on TOPS-20 v7.0 TSU03; ISO/LATIN-1 + diff --git a/pdp10/docs/app2-tap-files.md b/pdp10/docs/app2-tap-files.md new file mode 100644 index 0000000..eb042d7 --- /dev/null +++ b/pdp10/docs/app2-tap-files.md @@ -0,0 +1,1243 @@ +*.tap files seem to be binary images of original tapes, and amazingly it's still possible to use these directly. below is the log of supratim sanyal installing tops-10 on simh pdp-10 from tape *.tap files. copying this over from https://gist.github.com/tuklusan/8ef1d91b776580763698183af7266e57 + +Installation of TOPS-10 operating system fresh from tapes on SIMH PDP-10 using +latest SIMH 4.0 PDP-10 V4.0-0 (git commit id: 314a1da9). This is a screen session +log of executing the awesome procedure documented at: +http://www.asun.net/pdp10/downloads/t10inst.txt + +Visit the above URL for very helpful tips. + +- Supratim Sanyal (http://tuklusan.decsystem.org) +---- +Script started on 2019-03-17 22:10:04+00:00 [TERM="xterm-256color" TTY="/dev/pts/5" COLUMNS="80" LINES="37"] + ______________________ +< Type louder, please. > + ---------------------- + \ ^__^ + \ (oo)\_______ + (__)\ )\/\ + ||----w | + || || +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> ls -l +total 46376 +-r--r--r-- 1 localuser users 44328 Mar 17 22:00 asun-reference-install-log.txt +-rw-r--r-- 1 localuser users 9507448 Mar 17 22:05 cuspbinsrc_1of2_bb-x128c-sb.tap.bz2 +-rw-r--r-- 1 localuser users 6756987 Mar 17 22:06 cuspbinsrc_2of2_bb-fp63b-sb.tap.bz2 +-rw-r--r-- 1 localuser users 3647397 Mar 17 22:06 cust_sup_cusp_bb-x130c-sb.tap.bz2 +-rw-r--r-- 1 localuser users 11907593 Oct 20 13:06 mig704.pdf +-r-xr-xr-x 1 localuser users 1364080 Mar 17 21:59 pdp10 +-rw-r--r-- 1 localuser users 6024515 Feb 4 2002 tops10_704_monitoranf_bb-x140c-sb.tap.bz2 +-rw-r--r-- 1 localuser users 563615 Mar 17 22:07 tops10_ks_bootable_bb-x138c-bb_704.tap.bz2 +-rw-r--r-- 1 localuser users 7570334 Mar 17 22:08 tops10_tools_bb-fp64b-sb.tap.bz2 +-rw-r--r-- 1 localuser users 0 Mar 17 22:10 tuklus-install-log01.log +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> mkdir TAPES +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> cd TAPES +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> mv ../*bz2 . +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> ls -l +total 33344 +-rw-r--r-- 1 localuser users 9507448 Mar 17 22:05 cuspbinsrc_1of2_bb-x128c-sb.tap.bz2 +-rw-r--r-- 1 localuser users 6756987 Mar 17 22:06 cuspbinsrc_2of2_bb-fp63b-sb.tap.bz2 +-rw-r--r-- 1 localuser users 3647397 Mar 17 22:06 cust_sup_cusp_bb-x130c-sb.tap.bz2 +-rw-r--r-- 1 localuser users 6024515 Feb 4 2002 tops10_704_monitoranf_bb-x140c-sb.tap.bz2 +-rw-r--r-- 1 localuser users 563615 Mar 17 22:07 tops10_ks_bootable_bb-x138c-bb_704.tap.bz2 +-rw-r--r-- 1 localuser users 7570334 Mar 17 22:08 tops10_tools_bb-fp64b-sb.tap.bz2 +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> bunzip *bz2 +If 'bunzip' is not a typo you can use command-not-found to lookup the package that contains it, like this: + cnf bunzip +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> bunzip2 *bz2 +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> ls -l +total 104908 +-rw-r--r-- 1 localuser users 29244288 Mar 17 22:05 cuspbinsrc_1of2_bb-x128c-sb.tap +-rw-r--r-- 1 localuser users 20730080 Mar 17 22:06 cuspbinsrc_2of2_bb-fp63b-sb.tap +-rw-r--r-- 1 localuser users 11431920 Mar 17 22:06 cust_sup_cusp_bb-x130c-sb.tap +-rw-r--r-- 1 localuser users 18391604 Feb 4 2002 tops10_704_monitoranf_bb-x140c-sb.tap +-rw-r--r-- 1 localuser users 1289752 Mar 17 22:07 tops10_ks_bootable_bb-x138c-bb_704.tap +-rw-r--r-- 1 localuser users 26292472 Mar 17 22:08 tops10_tools_bb-fp64b-sb.tap +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> ls -1 +cuspbinsrc_1of2_bb-x128c-sb.tap +cuspbinsrc_2of2_bb-fp63b-sb.tap +cust_sup_cusp_bb-x130c-sb.tap +tops10_704_monitoranf_bb-x140c-sb.tap +tops10_ks_bootable_bb-x138c-bb_704.tap +tops10_tools_bb-fp64b-sb.tap +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> mv tops10_ks_bootable_bb-x138c-bb_704.tap t10boot.tap +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> mv cuspbinsrc_1of2_bb-x128c-sb.tap t10cusp1.tap +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> mv cuspbinsrc_2of2_bb-fp63b-sb.tap t10cusp2.tap +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> mv cust_sup_cusp_bb-x130c-sb.tap t10cust.tap +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> mv tops10_704_monitoranf_bb-x140c-sb.tap t10mon.tap +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> mv tops10_tools_bb-fp64b-sb.tap t10tool.tap +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> ls -1 +t10boot.tap +t10cusp1.tap +t10cusp2.tap +t10cust.tap +t10mon.tap +t10tool.tap +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> ls -l +total 105008 +-rw-r--r-- 1 localuser users 1289752 Mar 17 22:07 t10boot.tap +-rw-r--r-- 1 localuser users 29244288 Mar 17 22:05 t10cusp1.tap +-rw-r--r-- 1 localuser users 20730080 Mar 17 22:06 t10cusp2.tap +-rw-r--r-- 1 localuser users 11431920 Mar 17 22:06 t10cust.tap +-rw-r--r-- 1 localuser users 18391604 Feb 4 2002 t10mon.tap +-rw-r--r-- 1 localuser users 26292472 Mar 17 22:08 t10tool.tap +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/TAPES> cd .. +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> ls +asun-reference-install-log.txt pdp10 tuklus-install-log01.log +mig704.pdf TAPES +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> ./pdp10 + +PDP-10 simulator V4.0-0 Current git commit id: 314a1da9 +sim> set cpu idle +sim> attach rp0 t10.dsk +RP: creating new file +sim> set tu0 lock +sim> attach tu0 TAPES/t10boot.tap +sim> boot tu +BOOT V4(76) + +BOOT>/tm02 +[Loading from DSKB:SYSTEM.EXE[1,4]] + +KS10 07-Oct-88 +Why reload: new +Date: 3-18-2019 +Time: 00:07 +% RPA0 first HOM block consistency error +% RPA0 second HOM block consistency error +Startup option: define +Define (ASL,SDL,SSL,STRUCT): struct + +In the following dialogue, all numbers are decimal unless +otherwise indicated. Values within parenthesis are options. +Values within square brackets are defaults which will be +substituted if RETURN is pressed. + +Any question preceeded with an asterisk indicates changing that +parameter will require the structure to be refreshed. + + + *** Note *** +HOME blocks will be initialized immediately after all units in +the structure have been entered. + + +Structure to define: dskb +Disk drive for logical unit 0: rpa0 +Disk drive for logical unit 1: +Do you want to see the bad regions (NO,YES) [NO]: +[HOM blocks initialized on RPA0] +% RPA0 first BAT block consistency error +% RPA0 second BAT block consistency error +[BAT blocks initialized on RPA0] + +Parameters for structure DSKB + *Blocks per cluster (3 - 131071) [10]: + Private structure (NO,YES) [NO]: + Owner PPN (NONE,[p,pn]) [NONE]: + Disk-set (1 - 36,ALL,NONE) [ALL]: + *Number of K for CRASH.EXE (0 - 4096) [512]: + Blocks allowed for overdraw per user (0 - 307800) [500]: + Consecutive blocks tried for on output (0 - 262143) [30]: + *Bits per cluster count (1 - 18) [12]: + Make this the only structure in the SSL (NO,YES) [NO]: yes + Make this the only structure in the SDL (NO,YES) [NO]: yes + +Parameters for unit RPA0 + Unit ID [DSKB0]: + *SAT blocks per unit (8 - 81) [8]: + SAT blocks in core (1 - 8) [8]: + *K for swapping (0 - 4807) [1000]: 4807 + *First logical block for swapping (4420 - 269332) [134672]: + Swapping class (0 - 1) [0]: + Make this the only unit in the ASL (NO,YES) [NO]: yes +% Structure DSKB must be refreshed before it can be used. + +Structure to define: +[Rebuilding the system search list from the HOM blocks] + +[Rebuilding the active swapping list from the HOM blocks] + +[Rebuilding the system dump list from the HOM blocks] + +Startup option: refresh + +Needs refreshing: DSKB +Structure to refresh: dskb +[Updated HOM blocks on unit RPA0] +[Structure DSKB refreshed] +Structure to refresh: +[Rebuilding the system search list from the HOM blocks] + +[Rebuilding the active swapping list from the HOM blocks] + +[Rebuilding the system dump list from the HOM blocks] + +Startup option: noinit +[Rebuilding the system search list from the HOM blocks] + +[Rebuilding the active swapping list from the HOM blocks] + +[Rebuilding the system dump list from the HOM blocks] + +To automatically log in under [1,2] type "LOGIN" + +KS10 Monday 18-Mar-119 :09:05 + +.SET TTY FILL 0 + +.SET TTY LC + +.daytime +Monday 18-Mar-119 :09:27 + +.login + +.assign mta0: tape: +MTA0 assigned +.get tape:backup +Job setup + +.save backup +BACKUP saved + +.run backup + +/tape tape: +/supersede always +/interchange +/files +/restore sys:=*.* +! SYSTEM EXE + +"Done + +/restore dec:=*.* +! KSBOOT EXE + SMFILE EXE + SMFILE HLP + SMFILE TXT + T10KL RAM + T10KL ULD + +"Done + +/unload tape: + +[MTA0: Read(C/H/S) = 1227040/0/0] +/exit + +. +Simulation stopped, PC: 000001 (SOJG 6,1) +sim> show config +PDP-10 simulator configuration + +CPU idle enabled, Serial: 4097 (default) + 1024KW, TOPS-10 +PAG 2 units + PAG0 512W + PAG1 512W +TIM address=3760770-3760775 + non Y2K OS +FE 3 units + FE0 + FE1 + FE2 +UBA 2 units + UBA0 64W + UBA1 64W +PTR disabled +PTP disabled +RY disabled +LP20 address=3775400-3775417, vector=754*, BR4, DAVFU not ready + 6 LPI + not attached +CR disabled +RP address=1776700-1776747, vector=254, BR6, 8 units + RP0 39MW, attached to t10.dsk, write enabled + RP06 + RP1 39MW, not attached, write enabled + RP06 + RP2 39MW, not attached, write enabled + RP06 + RP3 39MW, not attached, write enabled + RP06 + RP4 39MW, not attached, write enabled + RP06 + RP5 39MW, not attached, write enabled + RP06 + RP6 39MW, not attached, write enabled + RP06 + RP7 39MW, not attached, write enabled + RP06 +TU address=3772440-3772473, vector=224, BR6, 8 units + TU0 not attached, write locked, SIMH format + unlimited capacity + TU1 not attached, write enabled, SIMH format + unlimited capacity + TU2 not attached, write enabled, SIMH format + unlimited capacity + TU3 not attached, write enabled, SIMH format + unlimited capacity + TU4 not attached, write enabled, SIMH format + unlimited capacity + TU5 not attached, write enabled, SIMH format + unlimited capacity + TU6 not attached, write enabled, SIMH format + unlimited capacity + TU7 not attached, write enabled, SIMH format + unlimited capacity +DZ address=3760010-3760047, vector=340-374*, BR5, lines=32 + not attached, 7b +XU disabled +DUP disabled +KDP disabled +DMR disabled +CH disabled +sim> attach tu0 TAPES/t10mon.tap +sim> go + +.run backup + +/tape tape: +/rewind +/supersede always +/protection 155 +/ssname all +/restore dskb: +!10,7 DSKB + +"Done + +/unload tape: + +[MTA0: Read(C/H/S) = 18335520/0/0] +/ +Simulation stopped, PC: 000001 (SOJG 6,1) +sim> attach tu0 TAPES/t10cust.tap +sim> go + +/rewind +/restore dskb: +!10,7 DSKB + +"Done + +/unload tape: + +[MTA0: Read(C/H/S) = 11391360/0/0] +/ +Simulation stopped, PC: 000001 (SOJG 6,1) +sim> attach tu0 TAPES/t10cusp1.tap +sim> go + +/ +/rewind +/restore dskb: +!10,7 DSKB +DSKB:[10,7,LOGIN]LOGIN.MAC (BLOCK=245) + +[MTA0: Read(C/H/S) = 29158400/0/0] + +$BKPEOT Reached EOT--mount new tape then type "GO" +/ +Simulation stopped, PC: 000001 (SOJG 6,1) +sim> attach tu0 TAPES/t10cusp2.tap +sim> go + +/go +!10,7 + +"Done + +/unload tape: + +[MTA0: Read(C/H/S) = 20669280/0/0] +/ +Simulation stopped, PC: 000001 (SOJG 6,1) +sim> attach tu0 TAPES/t10tool.tap +sim> go + +/rewind +/restore dskb: +!10,7 DSKB + +"Done + +/unload tape: + +[MTA0: Read(C/H/S) = 26215360/0/0] +/exit + +.run dskb:[10,7,direct]direct + +*dskb:[1,1] + + + 1,1 1 <555> 18-Mar-19 704(151) DSKB: [1,1] + 1,4 1 <775> 18-Mar-19 704(151) + 3,3 0 <777> 18-Mar-19 704(151) + 10,1 0 <750> 18-Mar-19 704(151) + 1,2 1 <775> 18-Mar-19 704(151) + 1,5 0 <775> 18-Mar-19 704(151) + 1,3 0 <775> 18-Mar-19 704(151) + 10,7 3 <775> 18-Mar-19 + Total of 6 blocks in 8 files on DSKB: [1,1] +*dskb:[1,2] + + +BACKUP EXE 128 <057> 18-Mar-19 5A(625) DSKB: [1,2] +*dskb:[1,4] + + +SAT SYS 89 <355> 18-Mar-19 704(151) DSKB: [1,4] +HOME SYS 29 <355> 18-Mar-19 704(151) +SWAP SYS 38469 <357> 18-Mar-19 704(151) +BADBLK SYS 9 <357> 18-Mar-19 704(151) +CRASH EXE 4100 <357> (undated) 704(151) +SYSTEM EXE 1236 <057> 7-Oct-88 704(33461) + Total of 43932 blocks in 6 files on DSKB: [1,4] +*^Z + +.run dskb:[10,7,credir]credir + +Create directory: hlp: + Created DSKB0:[2,5].UFD/PROTECTION:775 +Create directory: doc: + Created DSKB0:[5,14].UFD/PROTECTION:775 +Create directory: rel: + Created DSKB0:[5,11].UFD/PROTECTION:775 +Create directory: unv: + Created DSKB0:[5,17].UFD/PROTECTION:775 +Create directory: act: + Created DSKB0:[1,7].UFD/PROTECTION:775 +Create directory: ups: + Created DSKB0:[5,35].UFD/PROTECTION:775 +Create directory: ^Z + +.run dskb:[10,7,nft]nft + +*copy sys:/protection:055=dskb:[10,7,*,*,*,*,*]*.exe + DSKB:[1,4]KSBOOT.EXE <= DSKB:[10,7]KSBOOT.EXE + DSKB:[1,4]SMFILE.EXE <= DSKB:[10,7]SMFILE.EXE + DSKB:[1,4]MONGEN.EXE <= DSKB:[10,7,MON]MONGEN.EXE + DSKB:[1,4]AID.EXE <= DSKB:[10,7,UNSCSP,AID]AID.EXE + DSKB:[1,4]BOOT11.EXE <= DSKB:[10,7,UNSCSP,BOOT11]BOOT11.EXE + DSKB:[1,4]BOOTDX.EXE <= DSKB:[10,7,UNSCSP,BOOTDX]BOOTDX.EXE + DSKB:[1,4]BOOTM.EXE <= DSKB:[10,7,UNSCSP,BOOTM]BOOTM.EXE + DSKB:[1,4]BOOTMS.EXE <= DSKB:[10,7,UNSCSP,BOOTM]BOOTMS.EXE + DSKB:[1,4]WIBOOT.EXE <= DSKB:[10,7,UNSCSP,BOOTS]WIBOOT.EXE + DSKB:[1,4]WLBOOT.EXE <= DSKB:[10,7,UNSCSP,BOOTS]WLBOOT.EXE + DSKB:[1,4]WSBOOT.EXE <= DSKB:[10,7,UNSCSP,BOOTS]WSBOOT.EXE + DSKB:[1,4]DMPFIL.EXE <= DSKB:[10,7,UNSCSP,DMPFIL]DMPFIL.EXE + DSKB:[1,4]COPY.EXE <= DSKB:[10,7,UNSCSP,DTCOPY]COPY.EXE + DSKB:[1,4]DTCOPY.EXE <= DSKB:[10,7,UNSCSP,DTCOPY]DTCOPY.EXE + DSKB:[1,4]DUMP.EXE <= DSKB:[10,7,UNSCSP,DUMP]DUMP.EXE + DSKB:[1,4]FACTPR.EXE <= DSKB:[10,7,UNSCSP,FACTPR]FACTPR.EXE + DSKB:[1,4]FAILSA.EXE <= DSKB:[10,7,UNSCSP,FAILSA]FAILSA.EXE + DSKB:[1,4]FILEX.EXE <= DSKB:[10,7,UNSCSP,FILEX]FILEX.EXE + DSKB:[1,4]GRIPE.EXE <= DSKB:[10,7,UNSCSP,GRIPE]GRIPE.EXE + DSKB:[1,4]KNILDR.EXE <= DSKB:[10,7,UNSCSP,KNILDR]KNILDR.EXE + DSKB:[1,4]GLXLGO.EXE <= DSKB:[10,7,UNSCSP,GLXLGO]GLXLGO.EXE + DSKB:[1,4]LINED.EXE <= DSKB:[10,7,UNSCSP,LINED]LINED.EXE + DSKB:[1,4]GRAPH1.EXE <= DSKB:[10,7,UNSCSP,LODTST]GRAPH1.EXE + DSKB:[1,4]LINES.EXE <= DSKB:[10,7,UNSCSP,LODTST]LINES.EXE + DSKB:[1,4]LNSRPT.EXE <= DSKB:[10,7,UNSCSP,LODTST]LNSRPT.EXE + DSKB:[1,4]LODAVE.EXE <= DSKB:[10,7,UNSCSP,LODTST]LODAVE.EXE + DSKB:[1,4]LODCOR.EXE <= DSKB:[10,7,UNSCSP,LODTST]LODCOR.EXE + DSKB:[1,4]LODCPU.EXE <= DSKB:[10,7,UNSCSP,LODTST]LODCPU.EXE + DSKB:[1,4]LODIO.EXE <= DSKB:[10,7,UNSCSP,LODTST]LODIO.EXE + DSKB:[1,4]LODOPN.EXE <= DSKB:[10,7,UNSCSP,LODTST]LODOPN.EXE + DSKB:[1,4]LODPQ1.EXE <= DSKB:[10,7,UNSCSP,LODTST]LODPQ1.EXE + DSKB:[1,4]LODSLP.EXE <= DSKB:[10,7,UNSCSP,LODTST]LODSLP.EXE + DSKB:[1,4]LODTST.EXE <= DSKB:[10,7,UNSCSP,LODTST]LODTST.EXE + DSKB:[1,4]MAKVFU.EXE <= DSKB:[10,7,UNSCSP,MAKVFU]MAKVFU.EXE + DSKB:[1,4]MONEY.EXE <= DSKB:[10,7,UNSCSP,MONEY]MONEY.EXE + DSKB:[1,4]BUFIO.EXE <= DSKB:[10,7,UNSCSP,MONTST]BUFIO.EXE + DSKB:[1,4]ENQDEQ.EXE <= DSKB:[10,7,UNSCSP,MONTST]ENQDEQ.EXE + DSKB:[1,4]PAGUUO.EXE <= DSKB:[10,7,UNSCSP,MONTST]PAGUUO.EXE + DSKB:[1,4]REDUPD.EXE <= DSKB:[10,7,UNSCSP,MONTST]REDUPD.EXE + DSKB:[1,4]UPDATE.EXE <= DSKB:[10,7,UNSCSP,MONTST]UPDATE.EXE + DSKB:[1,4]WRTUPD.EXE <= DSKB:[10,7,UNSCSP,MONTST]WRTUPD.EXE + DSKB:[1,4]MOUNT.EXE <= DSKB:[10,7,UNSCSP,MOUNT]MOUNT.EXE + DSKB:[1,4]MTCOPY.EXE <= DSKB:[10,7,UNSCSP,MTCOPY]MTCOPY.EXE + DSKB:[1,4]NEWACT.EXE <= DSKB:[10,7,UNSCSP,NEWACT]NEWACT.EXE + DSKB:[1,4]NOPAG0.EXE <= DSKB:[10,7,UNSCSP,NOPAG0]NOPAG0.EXE + DSKB:[1,4]NRT.EXE <= DSKB:[10,7,UNSCSP,NRT]NRT.EXE + DSKB:[1,4]OMOUNT.EXE <= DSKB:[10,7,UNSCSP,OMOUNT]OMOUNT.EXE + DSKB:[1,4]PAL10.EXE <= DSKB:[10,7,UNSCSP,PAL10]PAL10.EXE + DSKB:[1,4]PATH.EXE <= DSKB:[10,7,UNSCSP,PATH]PATH.EXE + DSKB:[1,4]QMANGR.EXE <= DSKB:[10,7,UNSCSP,QMANGR]QMANGR.EXE + DSKB:[1,4]REATTA.EXE <= DSKB:[10,7,UNSCSP,REATTA]REATTA.EXE + DSKB:[1,4]REDALL.EXE <= DSKB:[10,7,UNSCSP,REDALL]REDALL.EXE + DSKB:[1,4]WPS.EXE <= DSKB:[10,7,UNSCSP,RX20]WPS.EXE + DSKB:[1,4]DOS210.EXE <= DSKB:[10,7,UNSCSP,RX20]DOS210.EXE + DSKB:[1,4]ASC210.EXE <= DSKB:[10,7,UNSCSP,RX20]ASC210.EXE + DSKB:[1,4]ASC211.EXE <= DSKB:[10,7,UNSCSP,RX20]ASC211.EXE + DSKB:[1,4]RTFLX.EXE <= DSKB:[10,7,UNSCSP,RX20]RTFLX.EXE + DSKB:[1,4]SCRIPT.EXE <= DSKB:[10,7,UNSCSP,SCRIPT]SCRIPT.EXE + DSKB:[1,4]SDLCNV.EXE <= DSKB:[10,7,UNSCSP,SDLCNV]SDLCNV.EXE + DSKB:[1,4]SOS.EXE <= DSKB:[10,7,UNSCSP,SOS]SOS.EXE + DSKB:[1,4]CAM.EXE <= DSKB:[10,7,UNSCSP,SOUP]CAM.EXE + DSKB:[1,4]COMP10.EXE <= DSKB:[10,7,UNSCSP,SOUP]COMP10.EXE + DSKB:[1,4]FED.EXE <= DSKB:[10,7,UNSCSP,SOUP]FED.EXE + DSKB:[1,4]SPACE.EXE <= DSKB:[10,7,UNSCSP,SPACE]SPACE.EXE + DSKB:[1,4]SPROUT.EXE <= DSKB:[10,7,UNSCSP,SPROUT]SPROUT.EXE + DSKB:[1,4]SYSINF.EXE <= DSKB:[10,7,UNSCSP,SYSINF]SYSINF.EXE + DSKB:[1,4]TWICE.EXE <= DSKB:[10,7,UNSCSP,TWICE]TWICE.EXE + DSKB:[1,4]UMOUNT.EXE <= DSKB:[10,7,UNSCSP,UMOUNT]UMOUNT.EXE + DSKB:[1,4]REACT.EXE <= DSKB:[10,7,ACCT]REACT.EXE + DSKB:[1,4]ACTDAE.EXE <= DSKB:[10,7,ACCT]ACTDAE.EXE + DSKB:[1,4]BACKUP.EXE <= DSKB:[10,7,BACKUP]BACKUP.EXE + DSKB:[1,4]BTDDT.EXE <= DSKB:[10,7,BOOT]BTDDT.EXE + DSKB:[1,4]BOOT.EXE <= DSKB:[10,7,BOOT]BOOT.EXE + DSKB:[1,4]BTONCE.EXE <= DSKB:[10,7,BOOT]BTONCE.EXE + DSKB:[1,4]KSBOOT.EXE <= DSKB:[10,7,BOOT]KSBOOT.EXE + DSKB:[1,4]KSONCE.EXE <= DSKB:[10,7,BOOT]KSONCE.EXE + DSKB:[1,4]COMPIL.EXE <= DSKB:[10,7,COMPIL]COMPIL.EXE + DSKB:[1,4]CREDIR.EXE <= DSKB:[10,7,CREDIR]CREDIR.EXE + DSKB:[1,4]CREF.EXE <= DSKB:[10,7,CREF]CREF.EXE + DSKB:[1,4]CRSCPY.EXE <= DSKB:[10,7,CRSCPY]CRSCPY.EXE + DSKB:[1,4]CTHNRT.EXE <= DSKB:[10,7,CTHNRT]CTHNRT.EXE + DSKB:[1,4]DAEMON.EXE <= DSKB:[10,7,DAEMON]DAEMON.EXE + DSKB:[1,4]DDT.EXE <= DSKB:[10,7,DDT]DDT.EXE + DSKB:[1,4]FILDDT.EXE <= DSKB:[10,7,DDT]FILDDT.EXE + DSKB:[1,4]VMDDT.EXE <= DSKB:[10,7,DDT]VMDDT.EXE + DSKB:[1,4]DDT11.EXE <= DSKB:[10,7,DDT11]DDT11.EXE + DSKB:[1,4]DECLAR.EXE <= DSKB:[10,7,DECLAR]DECLAR.EXE + DSKB:[1,4]MX.EXE <= DSKB:[10,7,DECMAI,MX]MX.EXE + DSKB:[1,4]MS.EXE <= DSKB:[10,7,DECMAI]MS.EXE + DSKB:[1,4]MX.EXE <= DSKB:[10,7,DECMAI]MX.EXE + DSKB:[1,4]DELFIL.EXE <= DSKB:[10,7,DELFIL]DELFIL.EXE + DSKB:[1,4]DIRECT.EXE <= DSKB:[10,7,DIRECT]DIRECT.EXE + DSKB:[1,4]DSKLST.EXE <= DSKB:[10,7,DSKLST]DSKLST.EXE + DSKB:[1,4]DSKRAT.EXE <= DSKB:[10,7,DSKRAT]DSKRAT.EXE + DSKB:[1,4]DTELDR.EXE <= DSKB:[10,7,DTELDR]DTELDR.EXE + DSKB:[1,4]F11.EXE <= DSKB:[10,7,F11]F11.EXE + DSKB:[1,4]FAL.EXE <= DSKB:[10,7,FAL]FAL.EXE + DSKB:[1,4]FE.EXE <= DSKB:[10,7,FE]FE.EXE + DSKB:[1,4]FEFILE.EXE <= DSKB:[10,7,FEFILE]FEFILE.EXE + DSKB:[1,4]FILCOM.EXE <= DSKB:[10,7,FILCOM]FILCOM.EXE + DSKB:[1,4]FILDAE.EXE <= DSKB:[10,7,FILDAE]FILDAE.EXE + DSKB:[1,4]BATCON.EXE <= DSKB:[10,7,GALAXY,BATCON]BATCON.EXE + DSKB:[1,4]CATCNV.EXE <= DSKB:[10,7,GALAXY,CATLOG]CATCNV.EXE + DSKB:[1,4]CATLOG.EXE <= DSKB:[10,7,GALAXY,CATLOG]CATLOG.EXE + DSKB:[1,4]CDRIVE.EXE <= DSKB:[10,7,GALAXY,CDRIVE]CDRIVE.EXE + DSKB:[1,4]GALGEN.EXE <= DSKB:[10,7,GALAXY,GLXLIB]GALGEN.EXE + DSKB:[1,4]GLXLIB.EXE <= DSKB:[10,7,GALAXY,GLXLIB]GLXLIB.EXE + DSKB:[1,4]LPTSPL.EXE <= DSKB:[10,7,GALAXY,LPTSPL]LPTSPL.EXE + DSKB:[1,4]NEBULA.EXE <= DSKB:[10,7,GALAXY,NEBULA]NEBULA.EXE + DSKB:[1,4]OPR.EXE <= DSKB:[10,7,GALAXY,OPERAT]OPR.EXE + DSKB:[1,4]ORION.EXE <= DSKB:[10,7,GALAXY,OPERAT]ORION.EXE + DSKB:[1,4]PLEASE.EXE <= DSKB:[10,7,GALAXY,PLEASE]PLEASE.EXE + DSKB:[1,4]PULSAR.EXE <= DSKB:[10,7,GALAXY,PULSAR]PULSAR.EXE + DSKB:[1,4]QUASAR.EXE <= DSKB:[10,7,GALAXY,QUASAR]QUASAR.EXE + DSKB:[1,4]QUEUE.EXE <= DSKB:[10,7,GALAXY,QUEUE]QUEUE.EXE + DSKB:[1,4]SPRINT.EXE <= DSKB:[10,7,GALAXY,SPRINT]SPRINT.EXE + DSKB:[1,4]GLOB.EXE <= DSKB:[10,7,GLOB]GLOB.EXE + DSKB:[1,4]HELP.EXE <= DSKB:[10,7,HELP]HELP.EXE + DSKB:[1,4]INITIA.EXE <= DSKB:[10,7,INITIA]INITIA.EXE + DSKB:[1,4]KDPLDR.EXE <= DSKB:[10,7,KDPLDR]KDPLDR.EXE + DSKB:[1,4]LINK.EXE <= DSKB:[10,7,LINK]LINK.EXE + DSKB:[1,4]LNK999.EXE <= DSKB:[10,7,LINK]LNK999.EXE + DSKB:[1,4]LNKERR.EXE <= DSKB:[10,7,LINK]LNKERR.EXE + DSKB:[1,4]LNKLOD.EXE <= DSKB:[10,7,LINK]LNKLOD.EXE + DSKB:[1,4]LNKMAP.EXE <= DSKB:[10,7,LINK]LNKMAP.EXE + DSKB:[1,4]LNKOV1.EXE <= DSKB:[10,7,LINK]LNKOV1.EXE + DSKB:[1,4]LNKOV2.EXE <= DSKB:[10,7,LINK]LNKOV2.EXE + DSKB:[1,4]LNKSCN.EXE <= DSKB:[10,7,LINK]LNKSCN.EXE + DSKB:[1,4]LNKXIT.EXE <= DSKB:[10,7,LINK]LNKXIT.EXE + DSKB:[1,4]LOGIN.EXE <= DSKB:[10,7,LOGIN]LOGIN.EXE + DSKB:[1,4]LOGOUT.EXE <= DSKB:[10,7,LOGIN]LOGOUT.EXE + DSKB:[1,4]LP20.EXE <= DSKB:[10,7,LP20]LP20.EXE + DSKB:[1,4]MACDLX.EXE <= DSKB:[10,7,MACDLX]MACDLX.EXE + DSKB:[1,4]MACRO.EXE <= DSKB:[10,7,MACRO]MACRO.EXE + DSKB:[1,4]MAKLIB.EXE <= DSKB:[10,7,MAKLIB]MAKLIB.EXE + DSKB:[1,4]MIC.EXE <= DSKB:[10,7,MIC]MIC.EXE + DSKB:[1,4]NETLDR.EXE <= DSKB:[10,7,NETLDR]NETLDR.EXE + DSKB:[1,4]NETWOR.EXE <= DSKB:[10,7,NETWOR]NETWOR.EXE + DSKB:[1,4]NFT.EXE <= DSKB:[10,7,NFT]NFT.EXE + DSKB:[1,4]OPSER.EXE <= DSKB:[10,7,OPSER]OPSER.EXE + DSKB:[1,4]PATH.EXE <= DSKB:[10,7,PATH]PATH.EXE + DSKB:[1,4]PIP.EXE <= DSKB:[10,7,PIP]PIP.EXE + DSKB:[1,4]PROJCT.EXE <= DSKB:[10,7,PROJCT]PROJCT.EXE + DSKB:[1,4]QUOLST.EXE <= DSKB:[10,7,QUOLST]QUOLST.EXE + DSKB:[1,4]RMS.EXE <= DSKB:[10,7,RMS10]RMS.EXE + DSKB:[1,4]RMSCOB.EXE <= DSKB:[10,7,RMS10]RMSCOB.EXE + DSKB:[1,4]RMSUTL.EXE <= DSKB:[10,7,RMS10]RMSUTL.EXE + DSKB:[1,4]RSXT10.EXE <= DSKB:[10,7,RSXT10]RSXT10.EXE + DSKB:[1,4]RUNOFF.EXE <= DSKB:[10,7,RUNOFF]RUNOFF.EXE + DSKB:[1,4]SCDSET.EXE <= DSKB:[10,7,SCDSET]SCDSET.EXE + DSKB:[1,4]SETSRC.EXE <= DSKB:[10,7,SETSRC]SETSRC.EXE + DSKB:[1,4]SMFILE.EXE <= DSKB:[10,7,SMFILE]SMFILE.EXE + DSKB:[1,4]COMPAR.EXE <= DSKB:[10,7,SOUPR]COMPAR.EXE + DSKB:[1,4]MERGE.EXE <= DSKB:[10,7,SOUPR]MERGE.EXE + DSKB:[1,4]UPDATE.EXE <= DSKB:[10,7,SOUPR]UPDATE.EXE + DSKB:[1,4]NOTIFY.EXE <= DSKB:[10,7,SPEAR]NOTIFY.EXE + DSKB:[1,4]SCOMM.EXE <= DSKB:[10,7,SPEAR]SCOMM.EXE + DSKB:[1,4]SPEAR.EXE <= DSKB:[10,7,SPEAR]SPEAR.EXE + DSKB:[1,4]SPRCOM.EXE <= DSKB:[10,7,SPEAR]SPRCOM.EXE + DSKB:[1,4]SPRINS.EXE <= DSKB:[10,7,SPEAR]SPRINS.EXE + DSKB:[1,4]SPRKLE.EXE <= DSKB:[10,7,SPEAR]SPRKLE.EXE + DSKB:[1,4]SPRRET.EXE <= DSKB:[10,7,SPEAR]SPRRET.EXE + DSKB:[1,4]SPRSUM.EXE <= DSKB:[10,7,SPEAR]SPRSUM.EXE + DSKB:[1,4]SYSANS.EXE <= DSKB:[10,7,SYSDPY]SYSANS.EXE + DSKB:[1,4]SYSDLT.EXE <= DSKB:[10,7,SYSDPY]SYSDLT.EXE + DSKB:[1,4]SYSDPA.EXE <= DSKB:[10,7,SYSDPY]SYSDPA.EXE + DSKB:[1,4]SYSDPB.EXE <= DSKB:[10,7,SYSDPY]SYSDPB.EXE + DSKB:[1,4]SYSDPY.EXE <= DSKB:[10,7,SYSDPY]SYSDPY.EXE + DSKB:[1,4]SYSHZL.EXE <= DSKB:[10,7,SYSDPY]SYSHZL.EXE + DSKB:[1,4]SYSV50.EXE <= DSKB:[10,7,SYSDPY]SYSV50.EXE + DSKB:[1,4]SYSV52.EXE <= DSKB:[10,7,SYSDPY]SYSV52.EXE + DSKB:[1,4]SYSV61.EXE <= DSKB:[10,7,SYSDPY]SYSV61.EXE + DSKB:[1,4]SYSVBX.EXE <= DSKB:[10,7,SYSDPY]SYSVBX.EXE + DSKB:[1,4]SYSTAT.EXE <= DSKB:[10,7,SYSTAT]SYSTAT.EXE + DSKB:[1,4]TECO.EXE <= DSKB:[10,7,TECO]TECO.EXE + DSKB:[1,4]TGHA.EXE <= DSKB:[10,7,TGHA]TGHA.EXE + DSKB:[1,4]FELOAD.EXE <= DSKB:[10,7,FELOAD]FELOAD.EXE + DSKB:[1,4]DDT11.EXE <= DSKB:[10,7,FELOAD]DDT11.EXE + DSKB:[1,4]NEWGEN.EXE <= DSKB:[10,7,AMIS]NEWGEN.EXE + DSKB:[1,4]AMIS.EXE <= DSKB:[10,7,AMIS]AMIS.EXE + DSKB:[1,4]ATEACH.EXE <= DSKB:[10,7,AMIS]ATEACH.EXE + DSKB:[1,4]MAKTRM.EXE <= DSKB:[10,7,AMIS]MAKTRM.EXE + DSKB:[1,4]DISCON.EXE <= DSKB:[10,7,AMIS]DISCON.EXE + DSKB:[1,4]CICTRS.EXE <= DSKB:[10,7,CICTRS]CICTRS.EXE + DSKB:[1,4]CISNUP.EXE <= DSKB:[10,7,CISNUP]CISNUP.EXE + DSKB:[1,4]CITATL.EXE <= DSKB:[10,7,CISNUP]CITATL.EXE + DSKB:[1,4]CISTS.EXE <= DSKB:[10,7,CISTS]CISTS.EXE + DSKB:[1,4]CPU.EXE <= DSKB:[10,7,CPU]CPU.EXE + DSKB:[1,4]CONFIG.EXE <= DSKB:[10,7,CONFIG]CONFIG.EXE + DSKB:[1,4]CSHDPY.EXE <= DSKB:[10,7,CSHDPY]CSHDPY.EXE + DSKB:[1,4]CSHDMP.EXE <= DSKB:[10,7,CSHDPY]CSHDMP.EXE + DSKB:[1,4]DBUSY.EXE <= DSKB:[10,7,DBUSY]DBUSY.EXE + DSKB:[1,4]DDBDPY.EXE <= DSKB:[10,7,DDBDPY]DDBDPY.EXE + DSKB:[1,4]DCNSPY.EXE <= DSKB:[10,7,DECNET,DCNSPY]DCNSPY.EXE + DSKB:[1,4]DNSNUP.EXE <= DSKB:[10,7,DECNET,DNSNUP]DNSNUP.EXE + DSKB:[1,4]DNTATL.EXE <= DSKB:[10,7,DECNET,DNTATL]DNTATL.EXE + DSKB:[1,4]DTR.EXE <= DSKB:[10,7,DECNET,DTS]DTR.EXE + DSKB:[1,4]DTS.EXE <= DSKB:[10,7,DECNET,DTS]DTS.EXE + DSKB:[1,4]GETNOD.EXE <= DSKB:[10,7,DECNET,GETNOD]GETNOD.EXE + DSKB:[1,4]ANF.EXE <= DSKB:[10,7,DECNET,KSONLY]ANF.EXE + DSKB:[1,4]DECNET.EXE <= DSKB:[10,7,DECNET,KSONLY]DECNET.EXE + DSKB:[1,4]NETPTH.EXE <= DSKB:[10,7,DECNET,NETPTH]NETPTH.EXE + DSKB:[1,4]NODNAM.EXE <= DSKB:[10,7,DECNET,NODNAM]NODNAM.EXE + DSKB:[1,4]DSKDMP.EXE <= DSKB:[10,7,DSKDMP]DSKDMP.EXE + DSKB:[1,4]DTECO.EXE <= DSKB:[10,7,DTECO]DTECO.EXE + DSKB:[1,4]ERSATZ.EXE <= DSKB:[10,7,ERSATZ]ERSATZ.EXE + DSKB:[1,4]FAST.EXE <= DSKB:[10,7,FAST]FAST.EXE + DSKB:[1,4]FEDEL.EXE <= DSKB:[10,7,FEDEL]FEDEL.EXE + DSKB:[1,4]FRCINI.EXE <= DSKB:[10,7,FRCINI]FRCINI.EXE + DSKB:[1,4]FRECOR.EXE <= DSKB:[10,7,FRECOR]FRECOR.EXE + DSKB:[1,4]FSCOPY.EXE <= DSKB:[10,7,FSCOPY]FSCOPY.EXE + DSKB:[1,4]GALDPY.EXE <= DSKB:[10,7,GALTOL]GALDPY.EXE + DSKB:[1,4]GALKIL.EXE <= DSKB:[10,7,GALTOL]GALKIL.EXE + DSKB:[1,4]GALTRK.EXE <= DSKB:[10,7,GALTOL]GALTRK.EXE + DSKB:[1,4]QSRCVT.EXE <= DSKB:[10,7,GALTOL]QSRCVT.EXE + DSKB:[1,4]TYPIDS.EXE <= DSKB:[10,7,GALTOL]TYPIDS.EXE + DSKB:[1,4]VEREDT.EXE <= DSKB:[10,7,GALTOL]VEREDT.EXE + DSKB:[1,4]INFTST.EXE <= DSKB:[10,7,INFTST]INFTST.EXE + DSKB:[1,4]KDPDPY.EXE <= DSKB:[10,7,KDPDPY]KDPDPY.EXE + DSKB:[1,4]KILL.EXE <= DSKB:[10,7,KILL]KILL.EXE + DSKB:[1,4]KLBPA.EXE <= DSKB:[10,7,KLBPA]KLBPA.EXE + DSKB:[1,4]KLEPTO.EXE <= DSKB:[10,7,KLEPTO]KLEPTO.EXE + DSKB:[1,4]LINCLN.EXE <= DSKB:[10,7,LINCLN]LINCLN.EXE + DSKB:[1,4]LNM.EXE <= DSKB:[10,7,LNM]LNM.EXE + DSKB:[1,4]MAKSYM.EXE <= DSKB:[10,7,MAKSYM]MAKSYM.EXE + DSKB:[1,4]MBR.EXE <= DSKB:[10,7,MBR]MBR.EXE + DSKB:[1,4]MCBDA.EXE <= DSKB:[10,7,MCBDA]MCBDA.EXE + DSKB:[1,4]MONDM4.EXE <= DSKB:[10,7,MONDM4]MONDM4.EXE + DSKB:[1,4]MONITR.EXE <= DSKB:[10,7,MONITR]MONITR.EXE + DSKB:[1,4]NETTST.EXE <= DSKB:[10,7,NETTST]NETTST.EXE + DSKB:[1,4]PIVOT.EXE <= DSKB:[10,7,PIVOT]PIVOT.EXE + DSKB:[1,4]PSTHRU.EXE <= DSKB:[10,7,PSTHRU]PSTHRU.EXE + DSKB:[1,4]DX20.EXE <= DSKB:[10,7,RDREG]DX20.EXE + DSKB:[1,4]RELOAD.EXE <= DSKB:[10,7,RELOAD]RELOAD.EXE + DSKB:[1,4]RMTCON.EXE <= DSKB:[10,7,RMTCON]RMTCON.EXE + DSKB:[1,4]RNXPRT.EXE <= DSKB:[10,7,RP20]RNXPRT.EXE + DSKB:[1,4]RNXTRC.EXE <= DSKB:[10,7,RP20]RNXTRC.EXE + DSKB:[1,4]SEARCH.EXE <= DSKB:[10,7,SEARCH]SEARCH.EXE + DSKB:[1,4]SED.EXE <= DSKB:[10,7,SED]SED.EXE + DSKB:[1,4]SEDONL.EXE <= DSKB:[10,7,SED]SEDONL.EXE + DSKB:[1,4]SEDRNO.EXE <= DSKB:[10,7,SED]SEDRNO.EXE + DSKB:[1,4]SNOOPY.EXE <= DSKB:[10,7,SNOOPY]SNOOPY.EXE + DSKB:[1,4]TATTLE.EXE <= DSKB:[10,7,SNOOPY]TATTLE.EXE + DSKB:[1,4]MSTCKS.EXE <= DSKB:[10,7,SNUP]MSTCKS.EXE + DSKB:[1,4]STOPCD.EXE <= DSKB:[10,7,STOPCD]STOPCD.EXE + DSKB:[1,4]SPY.EXE <= DSKB:[10,7,SPY]SPY.EXE + DSKB:[1,4]TRACER.EXE <= DSKB:[10,7,TRACER]TRACER.EXE + DSKB:[1,4]TRDUMP.EXE <= DSKB:[10,7,TRACER]TRDUMP.EXE + DSKB:[1,4]TRACK.EXE <= DSKB:[10,7,TRACK]TRACK.EXE + DSKB:[1,4]XLATE.EXE <= DSKB:[10,7,TRACK]XLATE.EXE + DSKB:[1,4]XLPLOT.EXE <= DSKB:[10,7,TRACK]XLPLOT.EXE + DSKB:[1,4]TRMTYP.EXE <= DSKB:[10,7,TRMTYP]TRMTYP.EXE + DSKB:[1,4]TSTSUP.EXE <= DSKB:[10,7,TSTSUP]TSTSUP.EXE + DSKB:[1,4]ACCCHK.EXE <= DSKB:[10,7,USAGE]ACCCHK.EXE + DSKB:[1,4]SPCUSG.EXE <= DSKB:[10,7,USAGE]SPCUSG.EXE + DSKB:[1,4]USRENT.EXE <= DSKB:[10,7,USAGE]USRENT.EXE + DSKB:[1,4]VALID.EXE <= DSKB:[10,7,USAGE]VALID.EXE + DSKB:[1,4]USERS.EXE <= DSKB:[10,7,USERS]USERS.EXE + DSKB:[1,4]WHOONC.EXE <= DSKB:[10,7,WHO]WHOONC.EXE + DSKB:[1,4]DMPAVL.EXE <= DSKB:[10,7,WHYCRS]DMPAVL.EXE + DSKB:[1,4]WHYCRS.EXE <= DSKB:[10,7,WHYCRS]WHYCRS.EXE +Total of 3051008 words in 23836 blocks in 261 files +*copy sys:/protection:055=dskb:[10,7,*,*,*,*,*]*.ram + DSKB:[1,4]T10KL.RAM <= DSKB:[10,7]T10KL.RAM + DSKB:[1,4]T10KL.RAM <= DSKB:[10,7,KSU]T10KL.RAM + DSKB:[1,4]LP64.RAM <= DSKB:[10,7,SYSTEM]LP64.RAM + DSKB:[1,4]LP96.RAM <= DSKB:[10,7,SYSTEM]LP96.RAM +Total of 12544 words in 98 blocks in 4 files +*copy sys:/protection:055=dskb:[10,7,*,*,*,*,*]*.vfu + DSKB:[1,4]NORMAL.VFU <= DSKB:[10,7,SYSTEM]NORMAL.VFU +Total of 26 words in 1 block in 1 file +*copy sys:/protection:055=dskb:[10,7,*,*,*,*,*]ddt.rel + DSKB:[1,4]DDT.REL <= DSKB:[10,7,DDT]DDT.REL +Total of 11891 words in 93 blocks in 1 file +*copy sys:/protection:055=dskb:[10,7,*,*,*,*,*]jobdat.rel + DSKB:[1,4]JOBDAT.REL <= DSKB:[10,7,JOBDAT]JOBDAT.REL +Total of 155 words in 2 blocks in 1 file +*copy sys:/protection:055=dskb:[10,7,*,*,*,*,*]ovrlay.rel + DSKB:[1,4]OVRLAY.REL <= DSKB:[10,7,LINK]OVRLAY.REL +Total of 4050 words in 32 blocks in 1 file +*copy sys:/protection:055=dskb:[10,7,*,*,*,*,*]teco.err + DSKB:[1,4]TECO.ERR <= DSKB:[10,7,TECO]TECO.ERR +Total of 5611 words in 44 blocks in 1 file +*copy hlp:/protection:055=dskb:[10,7,*,*,*,*,*]*.hlp + DSKB:[2,5]SMFILE.HLP <= DSKB:[10,7]SMFILE.HLP + DSKB:[2,5]BOOT11.HLP <= DSKB:[10,7,UNSCSP,BOOT11]BOOT11.HLP + DSKB:[2,5]BOOTDX.HLP <= DSKB:[10,7,UNSCSP,BOOTDX]BOOTDX.HLP + DSKB:[2,5]FAILSA.HLP <= DSKB:[10,7,UNSCSP,FAILSA]FAILSA.HLP + DSKB:[2,5]FILEX.HLP <= DSKB:[10,7,UNSCSP,FILEX]FILEX.HLP + DSKB:[2,5]GRIPE.HLP <= DSKB:[10,7,UNSCSP,GRIPE]GRIPE.HLP + DSKB:[2,5]GLXLGO.HLP <= DSKB:[10,7,UNSCSP,GLXLGO]GLXLGO.HLP + DSKB:[2,5]MAKVFU.HLP <= DSKB:[10,7,UNSCSP,MAKVFU]MAKVFU.HLP + DSKB:[2,5]MTCOPY.HLP <= DSKB:[10,7,UNSCSP,MTCOPY]MTCOPY.HLP + DSKB:[2,5]OMOUNT.HLP <= DSKB:[10,7,UNSCSP,OMOUNT]OMOUNT.HLP + DSKB:[2,5]PATH.HLP <= DSKB:[10,7,UNSCSP,PATH]PATH.HLP + DSKB:[2,5]RTFLX.HLP <= DSKB:[10,7,UNSCSP,RX20]RTFLX.HLP + DSKB:[2,5]SDLCNV.HLP <= DSKB:[10,7,UNSCSP,SDLCNV]SDLCNV.HLP + DSKB:[2,5]SOS.HLP <= DSKB:[10,7,UNSCSP,SOS]SOS.HLP + DSKB:[2,5]SOUP.HLP <= DSKB:[10,7,UNSCSP,SOUP]SOUP.HLP + DSKB:[2,5]SPACE.HLP <= DSKB:[10,7,UNSCSP,SPACE]SPACE.HLP + DSKB:[2,5]UMOUNT.HLP <= DSKB:[10,7,UNSCSP,UMOUNT]UMOUNT.HLP + DSKB:[2,5]UDISMO.HLP <= DSKB:[10,7,UNSCSP,UMOUNT]UDISMO.HLP + DSKB:[2,5]BACKUP.HLP <= DSKB:[10,7,BACKUP]BACKUP.HLP + DSKB:[2,5]CREDIR.HLP <= DSKB:[10,7,CREDIR]CREDIR.HLP + DSKB:[2,5]CREF.HLP <= DSKB:[10,7,CREF]CREF.HLP + DSKB:[2,5]CRSCPY.HLP <= DSKB:[10,7,CRSCPY]CRSCPY.HLP + DSKB:[2,5]CTHNRT.HLP <= DSKB:[10,7,CTHNRT]CTHNRT.HLP + DSKB:[2,5]DECLAR.HLP <= DSKB:[10,7,DECLAR]DECLAR.HLP + DSKB:[2,5]MS.HLP <= DSKB:[10,7,DECMAI,MS]MS.HLP + DSKB:[2,5]DELFIL.HLP <= DSKB:[10,7,DELFIL]DELFIL.HLP + DSKB:[2,5]DIL.HLP <= DSKB:[10,7,DIL,DILDOC]DIL.HLP + DSKB:[2,5]DIRECT.HLP <= DSKB:[10,7,DIRECT]DIRECT.HLP + DSKB:[2,5]DSKRAT.HLP <= DSKB:[10,7,DSKRAT]DSKRAT.HLP + DSKB:[2,5]DTELDR.HLP <= DSKB:[10,7,DTELDR]DTELDR.HLP + DSKB:[2,5]FILCOM.HLP <= DSKB:[10,7,FILCOM]FILCOM.HLP + DSKB:[2,5]CATLOG.HLP <= DSKB:[10,7,GALAXY,CATLOG]CATLOG.HLP + DSKB:[2,5]CONFIG.HLP <= DSKB:[10,7,GALAXY,OPERAT]CONFIG.HLP + DSKB:[2,5]OPR.HLP <= DSKB:[10,7,GALAXY,OPERAT]OPR.HLP + DSKB:[2,5]PLEASE.HLP <= DSKB:[10,7,GALAXY,PLEASE]PLEASE.HLP + DSKB:[2,5]QUOTA.HLP <= DSKB:[10,7,GALAXY,PULSAR]QUOTA.HLP + DSKB:[2,5]QUEUE.HLP <= DSKB:[10,7,GALAXY,QUEUE]QUEUE.HLP + DSKB:[2,5]ALLOCA.HLP <= DSKB:[10,7,GALAXY,QUEUE]ALLOCA.HLP + DSKB:[2,5]CANCEL.HLP <= DSKB:[10,7,GALAXY,QUEUE]CANCEL.HLP + DSKB:[2,5]DEALLO.HLP <= DSKB:[10,7,GALAXY,QUEUE]DEALLO.HLP + DSKB:[2,5]DISMOU.HLP <= DSKB:[10,7,GALAXY,QUEUE]DISMOU.HLP + DSKB:[2,5]MOUNT.HLP <= DSKB:[10,7,GALAXY,QUEUE]MOUNT.HLP + DSKB:[2,5]SHOW.HLP <= DSKB:[10,7,GALAXY,QUEUE]SHOW.HLP + DSKB:[2,5]GLOB.HLP <= DSKB:[10,7,GLOB]GLOB.HLP + DSKB:[2,5]HELP.HLP <= DSKB:[10,7,HELP]HELP.HLP + DSKB:[2,5]INITIA.HLP <= DSKB:[10,7,INITIA]INITIA.HLP + DSKB:[2,5]KDPLDR.HLP <= DSKB:[10,7,KDPLDR]KDPLDR.HLP + DSKB:[2,5]LINK.HLP <= DSKB:[10,7,LINK]LINK.HLP + DSKB:[2,5]LOGIN.HLP <= DSKB:[10,7,LOGIN]LOGIN.HLP + DSKB:[2,5]KJOB.HLP <= DSKB:[10,7,LOGIN]KJOB.HLP + DSKB:[2,5]REATTA.HLP <= DSKB:[10,7,LOGIN]REATTA.HLP + DSKB:[2,5]SESSIO.HLP <= DSKB:[10,7,LOGIN]SESSIO.HLP + DSKB:[2,5]ATTACH.HLP <= DSKB:[10,7,LOGIN]ATTACH.HLP + DSKB:[2,5]PASSWO.HLP <= DSKB:[10,7,LOGIN]PASSWO.HLP + DSKB:[2,5]MACRO.HLP <= DSKB:[10,7,MACRO]MACRO.HLP + DSKB:[2,5]MAKLIB.HLP <= DSKB:[10,7,MAKLIB]MAKLIB.HLP + DSKB:[2,5]MIC.HLP <= DSKB:[10,7,MIC]MIC.HLP + DSKB:[2,5]NCP.HLP <= DSKB:[10,7,NCPTAB]NCP.HLP + DSKB:[2,5]NETLDR.HLP <= DSKB:[10,7,NETLDR]NETLDR.HLP + DSKB:[2,5]NETWOR.HLP <= DSKB:[10,7,NETWOR]NETWOR.HLP + DSKB:[2,5]NFT.HLP <= DSKB:[10,7,NFT]NFT.HLP + DSKB:[2,5]OPSER.HLP <= DSKB:[10,7,OPSER]OPSER.HLP + DSKB:[2,5]PATH.HLP <= DSKB:[10,7,PATH]PATH.HLP + DSKB:[2,5]PIP.HLP <= DSKB:[10,7,PIP]PIP.HLP + DSKB:[2,5]QUOLST.HLP <= DSKB:[10,7,QUOLST]QUOLST.HLP + DSKB:[2,5]RSXFMT.HLP <= DSKB:[10,7,RSXT10]RSXFMT.HLP + DSKB:[2,5]RUNINP.HLP <= DSKB:[10,7,RUNOFF]RUNINP.HLP + DSKB:[2,5]RUNOFF.HLP <= DSKB:[10,7,RUNOFF]RUNOFF.HLP + DSKB:[2,5]SETSRC.HLP <= DSKB:[10,7,SETSRC]SETSRC.HLP + DSKB:[2,5]SMFILE.HLP <= DSKB:[10,7,SMFILE]SMFILE.HLP + DSKB:[2,5]COMPAR.HLP <= DSKB:[10,7,SOUPR]COMPAR.HLP + DSKB:[2,5]MERGE.HLP <= DSKB:[10,7,SOUPR]MERGE.HLP + DSKB:[2,5]UPDATE.HLP <= DSKB:[10,7,SOUPR]UPDATE.HLP + DSKB:[2,5]SYSTAT.HLP <= DSKB:[10,7,SYSTAT]SYSTAT.HLP + DSKB:[2,5]TGHA.HLP <= DSKB:[10,7,TGHA]TGHA.HLP + DSKB:[2,5]CISTS.HLP <= DSKB:[10,7,CISTS]CISTS.HLP + DSKB:[2,5]NODNAM.HLP <= DSKB:[10,7,DECNET,NODNAM]NODNAM.HLP + DSKB:[2,5]FEDEL.HLP <= DSKB:[10,7,FEDEL]FEDEL.HLP + DSKB:[2,5]FRCINI.HLP <= DSKB:[10,7,FRCINI]FRCINI.HLP + DSKB:[2,5]FSCOPY.HLP <= DSKB:[10,7,FSCOPY]FSCOPY.HLP + DSKB:[2,5]KILL.HLP <= DSKB:[10,7,KILL]KILL.HLP + DSKB:[2,5]KLBPA.HLP <= DSKB:[10,7,KLBPA]KLBPA.HLP + DSKB:[2,5]KLEPTO.HLP <= DSKB:[10,7,KLEPTO]KLEPTO.HLP + DSKB:[2,5]MAKSYM.HLP <= DSKB:[10,7,MAKSYM]MAKSYM.HLP + DSKB:[2,5]MCBDA.HLP <= DSKB:[10,7,MCBDA]MCBDA.HLP + DSKB:[2,5]MONITR.HLP <= DSKB:[10,7,MONITR]MONITR.HLP + DSKB:[2,5]NETTST.HLP <= DSKB:[10,7,NETTST]NETTST.HLP + DSKB:[2,5]RDREG.HLP <= DSKB:[10,7,RDREG]RDREG.HLP + DSKB:[2,5]RMTCON.HLP <= DSKB:[10,7,RMTCON]RMTCON.HLP + DSKB:[2,5]SED.HLP <= DSKB:[10,7,SED]SED.HLP + DSKB:[2,5]SEDONL.HLP <= DSKB:[10,7,SED]SEDONL.HLP + DSKB:[2,5]TRACK.HLP <= DSKB:[10,7,TRACK]TRACK.HLP + DSKB:[2,5]XLATE.HLP <= DSKB:[10,7,TRACK]XLATE.HLP + DSKB:[2,5]XLPLOT.HLP <= DSKB:[10,7,TRACK]XLPLOT.HLP + DSKB:[2,5]TRMTYP.HLP <= DSKB:[10,7,TRMTYP]TRMTYP.HLP + DSKB:[2,5]USAG10.HLP <= DSKB:[10,7,USAGE]USAG10.HLP + DSKB:[2,5]USAH10.HLP <= DSKB:[10,7,USAGE]USAH10.HLP + DSKB:[2,5]WHO.HLP <= DSKB:[10,7,WHO]WHO.HLP + DSKB:[2,5]WHYCRS.HLP <= DSKB:[10,7,WHYCRS]WHYCRS.HLP +Total of 98886 words in 820 blocks in 99 files +*copy doc:/protection:055=dskb:[10,7,*,*,*,*,*]*.doc + DSKB:[5,14]DC72NP.DOC <= DSKB:[10,7,UNSCOM,DC72]DC72NP.DOC + DSKB:[5,14]DC7621.DOC <= DSKB:[10,7,UNSCOM,DC76]DC7621.DOC + DSKB:[5,14]DN92.DOC <= DSKB:[10,7,UNSCOM,DN92]DN92.DOC + DSKB:[5,14]DN9210.DOC <= DSKB:[10,7,UNSCOM,DN92]DN9210.DOC + DSKB:[5,14]X6801A.DOC <= DSKB:[10,7,UNSCOM,X680]X6801A.DOC + DSKB:[5,14]AID20A.DOC <= DSKB:[10,7,UNSCSP,AID]AID20A.DOC + DSKB:[5,14]BOOT11.DOC <= DSKB:[10,7,UNSCSP,BOOT11]BOOT11.DOC + DSKB:[5,14]BOOTDX.DOC <= DSKB:[10,7,UNSCSP,BOOTDX]BOOTDX.DOC + DSKB:[5,14]BOOTS.DOC <= DSKB:[10,7,UNSCSP,BOOTS]BOOTS.DOC + DSKB:[5,14]WTBOOT.DOC <= DSKB:[10,7,UNSCSP,BOOTS]WTBOOT.DOC + DSKB:[5,14]DML6A.DOC <= DSKB:[10,7,UNSCSP,DMPFIL]DML6A.DOC + DSKB:[5,14]CPY007.DOC <= DSKB:[10,7,UNSCSP,DTCOPY]CPY007.DOC + DSKB:[5,14]DTC007.DOC <= DSKB:[10,7,UNSCSP,DTCOPY]DTC007.DOC + DSKB:[5,14]DMP4.DOC <= DSKB:[10,7,UNSCSP,DUMP]DMP4.DOC + DSKB:[5,14]FACTOR.DOC <= DSKB:[10,7,UNSCSP,FACTOR]FACTOR.DOC + DSKB:[5,14]FPR2A.DOC <= DSKB:[10,7,UNSCSP,FACTPR]FPR2A.DOC + DSKB:[5,14]FAILSA.DOC <= DSKB:[10,7,UNSCSP,FAILSA]FAILSA.DOC + DSKB:[5,14]FILEX.DOC <= DSKB:[10,7,UNSCSP,FILEX]FILEX.DOC + DSKB:[5,14]GRP4.DOC <= DSKB:[10,7,UNSCSP,GRIPE]GRP4.DOC + DSKB:[5,14]LND13B.DOC <= DSKB:[10,7,UNSCSP,LINED]LND13B.DOC + DSKB:[5,14]MNY17B.DOC <= DSKB:[10,7,UNSCSP,MONEY]MNY17B.DOC + DSKB:[5,14]MTY3.DOC <= DSKB:[10,7,UNSCSP,MTCOPY]MTY3.DOC + DSKB:[5,14]NPG1.DOC <= DSKB:[10,7,UNSCSP,NOPAG0]NPG1.DOC + DSKB:[5,14]OMOUNT.DOC <= DSKB:[10,7,UNSCSP,OMOUNT]OMOUNT.DOC + DSKB:[5,14]RTA3.DOC <= DSKB:[10,7,UNSCSP,REATTA]RTA3.DOC + DSKB:[5,14]RX20.DOC <= DSKB:[10,7,UNSCSP,RX20]RX20.DOC + DSKB:[5,14]SCT014.DOC <= DSKB:[10,7,UNSCSP,SCRIPT]SCT014.DOC + DSKB:[5,14]SDLCNV.DOC <= DSKB:[10,7,UNSCSP,SDLCNV]SDLCNV.DOC + DSKB:[5,14]SOS.DOC <= DSKB:[10,7,UNSCSP,SOS]SOS.DOC + DSKB:[5,14]SOSMCR.DOC <= DSKB:[10,7,UNSCSP,SOS]SOSMCR.DOC + DSKB:[5,14]SPC3.DOC <= DSKB:[10,7,UNSCSP,SPACE]SPC3.DOC + DSKB:[5,14]STR1.DOC <= DSKB:[10,7,UNSCSP,STRLIB]STR1.DOC + DSKB:[5,14]SYSINF.DOC <= DSKB:[10,7,UNSCSP,SYSINF]SYSINF.DOC + DSKB:[5,14]UMT26A.DOC <= DSKB:[10,7,UNSCSP,UMOUNT]UMT26A.DOC + DSKB:[5,14]KSDMR.DOC <= DSKB:[10,7,UNSMON]KSDMR.DOC + DSKB:[5,14]DIL.DOC <= DSKB:[10,7,DIL,DILDOC]DIL.DOC + DSKB:[5,14]GALAXY.DOC <= DSKB:[10,7,GALAXY]GALAXY.DOC + DSKB:[5,14]RMS10.DOC <= DSKB:[10,7,RMS10,RMSSRC]RMS10.DOC + DSKB:[5,14]SPEAR.DOC <= DSKB:[10,7,SPEAR]SPEAR.DOC + DSKB:[5,14]DEMO.DOC <= DSKB:[10,7,GALTOL]DEMO.DOC + DSKB:[5,14]SED.DOC <= DSKB:[10,7,SED]SED.DOC + DSKB:[5,14]TRK5.DOC <= DSKB:[10,7,TRACK]TRK5.DOC +Total of 124343 words in 989 blocks in 42 files +*copy rel:/protection:055=dskb:[10,7,*,*,*,*,*]*.rel + DSKB:[5,11]TOPS10.REL <= DSKB:[10,7,MON,KL]TOPS10.REL + DSKB:[5,11]TOPS10.REL <= DSKB:[10,7,MON,KS]TOPS10.REL + DSKB:[5,11]STRLIB.REL <= DSKB:[10,7,UNSCSP,STRLIB]STRLIB.REL + DSKB:[5,11]ACTLIB.REL <= DSKB:[10,7,ACCT]ACTLIB.REL + DSKB:[5,11]D60JSY.REL <= DSKB:[10,7,D60JSY]D60JSY.REL + DSKB:[5,11]DDT.REL <= DSKB:[10,7,DDT]DDT.REL + DSKB:[5,11]EDDT.REL <= DSKB:[10,7,DDT]EDDT.REL + DSKB:[5,11]B361LB.REL <= DSKB:[10,7,DECMAI,MX]B361LB.REL + DSKB:[5,11]M10INT.REL <= DSKB:[10,7,DECMAI,MX]M10INT.REL + DSKB:[5,11]MXNMEM.REL <= DSKB:[10,7,DECMAI,MX]MXNMEM.REL + DSKB:[5,11]MXNPAG.REL <= DSKB:[10,7,DECMAI,MX]MXNPAG.REL + DSKB:[5,11]MXNQUE.REL <= DSKB:[10,7,DECMAI,MX]MXNQUE.REL + DSKB:[5,11]MXNTBL.REL <= DSKB:[10,7,DECMAI,MX]MXNTBL.REL + DSKB:[5,11]MXNTXT.REL <= DSKB:[10,7,DECMAI,MX]MXNTXT.REL + DSKB:[5,11]MXDATA.REL <= DSKB:[10,7,DECMAI,MX]MXDATA.REL + DSKB:[5,11]MXHOST.REL <= DSKB:[10,7,DECMAI,MX]MXHOST.REL + DSKB:[5,11]MXLCL.REL <= DSKB:[10,7,DECMAI,MX]MXLCL.REL + DSKB:[5,11]MXQMAN.REL <= DSKB:[10,7,DECMAI,MX]MXQMAN.REL + DSKB:[5,11]MXUFIL.REL <= DSKB:[10,7,DECMAI,MX]MXUFIL.REL + DSKB:[5,11]TBL.REL <= DSKB:[10,7,DECMAI,MX]TBL.REL + DSKB:[5,11]MXERR.REL <= DSKB:[10,7,DECMAI,MX]MXERR.REL + DSKB:[5,11]MXDCNT.REL <= DSKB:[10,7,DECMAI,MX]MXDCNT.REL + DSKB:[5,11]M10IPC.REL <= DSKB:[10,7,DECMAI,MX]M10IPC.REL + DSKB:[5,11]MXNSKD.REL <= DSKB:[10,7,DECMAI,MX]MXNSKD.REL + DSKB:[5,11]MXNNET.REL <= DSKB:[10,7,DECMAI,MX]MXNNET.REL + DSKB:[5,11]CPYRYT.REL <= DSKB:[10,7,DECMAI,MX]CPYRYT.REL + DSKB:[5,11]MXNT10.REL <= DSKB:[10,7,DECMAI,MX]MXNT10.REL + DSKB:[5,11]NETTAB.REL <= DSKB:[10,7,DECMAI,MX]NETTAB.REL + DSKB:[5,11]MXVER.REL <= DSKB:[10,7,DECMAI,MX]MXVER.REL + DSKB:[5,11]SMTLIS.REL <= DSKB:[10,7,DECMAI,MX]SMTLIS.REL + DSKB:[5,11]SMTSEN.REL <= DSKB:[10,7,DECMAI,MX]SMTSEN.REL + DSKB:[5,11]LISVAX.REL <= DSKB:[10,7,DECMAI,MX]LISVAX.REL + DSKB:[5,11]SENVAX.REL <= DSKB:[10,7,DECMAI,MX]SENVAX.REL + DSKB:[5,11]MXUT10.REL <= DSKB:[10,7,DECMAI,MX]MXUT10.REL + DSKB:[5,11]MX10.REL <= DSKB:[10,7,DECMAI,MX]MX10.REL + DSKB:[5,11]DIL1V2.REL <= DSKB:[10,7,DIL,DILBLD]DIL1V2.REL + DSKB:[5,11]DIT1V2.REL <= DSKB:[10,7,DIL,DILBLD]DIT1V2.REL + DSKB:[5,11]DIX1V2.REL <= DSKB:[10,7,DIL,DILBLD]DIX1V2.REL + DSKB:[5,11]DAP1V1.REL <= DSKB:[10,7,DIL,DILBLD]DAP1V1.REL + DSKB:[5,11]XPN1V1.REL <= DSKB:[10,7,DIL,DILBLD]XPN1V1.REL + DSKB:[5,11]DIL.REL <= DSKB:[10,7,DIL,DILSYS]DIL.REL + DSKB:[5,11]CATTAB.REL <= DSKB:[10,7,GALAXY,CATLOG]CATTAB.REL + DSKB:[5,11]GLXLIB.REL <= DSKB:[10,7,GALAXY,GLXLIB]GLXLIB.REL + DSKB:[5,11]CHRFRM.REL <= DSKB:[10,7,GALAXY,NEBULA]CHRFRM.REL + DSKB:[5,11]OPRPAR.REL <= DSKB:[10,7,GALAXY,OPERAT]OPRPAR.REL + DSKB:[5,11]QUOTAB.REL <= DSKB:[10,7,GALAXY,PULSAR]QUOTAB.REL + DSKB:[5,11]HELPER.REL <= DSKB:[10,7,HELPER]HELPER.REL + DSKB:[5,11]JOBDAT.REL <= DSKB:[10,7,JOBDAT]JOBDAT.REL + DSKB:[5,11]OVRLAY.REL <= DSKB:[10,7,LINK]OVRLAY.REL + DSKB:[5,11]MACTEN.REL <= DSKB:[10,7,MACTEN]MACTEN.REL + DSKB:[5,11]NCPTAB.REL <= DSKB:[10,7,NCPTAB]NCPTAB.REL + DSKB:[5,11]B361LB.REL <= DSKB:[10,7,RMS10,RMSSRC]B361LB.REL + DSKB:[5,11]RMS.REL <= DSKB:[10,7,RMS10]RMS.REL + DSKB:[5,11]RMS101.REL <= DSKB:[10,7,RMS10]RMS101.REL + DSKB:[5,11]RMS1P1.REL <= DSKB:[10,7,RMS10]RMS1P1.REL + DSKB:[5,11]RMS1U1.REL <= DSKB:[10,7,RMS10]RMS1U1.REL + DSKB:[5,11]RMSINI.REL <= DSKB:[10,7,RMS10]RMSINI.REL + DSKB:[5,11]SCAN.REL <= DSKB:[10,7,SCAN]SCAN.REL + DSKB:[5,11]SWIL.REL <= DSKB:[10,7,SWIL]SWIL.REL + DSKB:[5,11]UFDSET.REL <= DSKB:[10,7,UFDSET]UFDSET.REL + DSKB:[5,11]UUOSYM.REL <= DSKB:[10,7,UUOSYM]UUOSYM.REL + DSKB:[5,11]WILD.REL <= DSKB:[10,7,WILD]WILD.REL + DSKB:[5,11]ROOT.REL <= DSKB:[10,7,AMIS]ROOT.REL + DSKB:[5,11]TTYIO.REL <= DSKB:[10,7,AMIS]TTYIO.REL + DSKB:[5,11]MAIN.REL <= DSKB:[10,7,AMIS]MAIN.REL + DSKB:[5,11]UTILIT.REL <= DSKB:[10,7,AMIS]UTILIT.REL + DSKB:[5,11]INPUT.REL <= DSKB:[10,7,AMIS]INPUT.REL + DSKB:[5,11]BUFFER.REL <= DSKB:[10,7,AMIS]BUFFER.REL + DSKB:[5,11]SCREEN.REL <= DSKB:[10,7,AMIS]SCREEN.REL + DSKB:[5,11]TERM.REL <= DSKB:[10,7,AMIS]TERM.REL + DSKB:[5,11]TTYIOT.REL <= DSKB:[10,7,AMIS]TTYIOT.REL + DSKB:[5,11]MBUF.REL <= DSKB:[10,7,AMIS]MBUF.REL + DSKB:[5,11]DSKIO.REL <= DSKB:[10,7,AMIS]DSKIO.REL + DSKB:[5,11]SEARCH.REL <= DSKB:[10,7,AMIS]SEARCH.REL + DSKB:[5,11]POM.REL <= DSKB:[10,7,AMIS]POM.REL + DSKB:[5,11]DISCON.REL <= DSKB:[10,7,AMIS]DISCON.REL + DSKB:[5,11]DCN.REL <= DSKB:[10,7,DECNET,DCN]DCN.REL + DSKB:[5,11]DCNSPY.REL <= DSKB:[10,7,DECNET,DCNSPY]DCNSPY.REL + DSKB:[5,11]DPY.REL <= DSKB:[10,7,DECNET,DPY]DPY.REL + DSKB:[5,11]DPYPAK.REL <= DSKB:[10,7,DPYPAK]DPYPAK.REL + DSKB:[5,11]DPYSUB.REL <= DSKB:[10,7,DPYPAK]DPYSUB.REL + DSKB:[5,11]DPYNEW.REL <= DSKB:[10,7,DPYPAK]DPYNEW.REL + DSKB:[5,11]MAP.REL <= DSKB:[10,7,MAP]MAP.REL + DSKB:[5,11]SNUP.REL <= DSKB:[10,7,SNUP]SNUP.REL + DSKB:[5,11]TRACK.REL <= DSKB:[10,7,TRACK]TRACK.REL + DSKB:[5,11]LIBFOR.REL <= DSKB:[10,7,TRACK]LIBFOR.REL + DSKB:[5,11]XLATE.REL <= DSKB:[10,7,TRACK]XLATE.REL + DSKB:[5,11]XLPLOT.REL <= DSKB:[10,7,TRACK]XLPLOT.REL +Total of 1264437 words in 9921 blocks in 88 files +*copy unv:/protection:055=dskb:[10,7,*,*,*,*,*]*.unv + DSKB:[5,17]MACROS.UNV <= DSKB:[10,7,UNSCSP,MAKVFU]MACROS.UNV + DSKB:[5,17]ACTPRM.UNV <= DSKB:[10,7,ACCT]ACTPRM.UNV + DSKB:[5,17]ACTSYM.UNV <= DSKB:[10,7,ACTSYM]ACTSYM.UNV + DSKB:[5,17]BTSPRM.UNV <= DSKB:[10,7,BOOT]BTSPRM.UNV + DSKB:[5,17]D60UNV.UNV <= DSKB:[10,7,D60JSY]D60UNV.UNV + DSKB:[5,17]MSUNV.UNV <= DSKB:[10,7,DECMAI,MS]MSUNV.UNV + DSKB:[5,17]MSUNV.UNV <= DSKB:[10,7,DECMAI,MX]MSUNV.UNV + DSKB:[5,17]GALCNF.UNV <= DSKB:[10,7,GALAXY,GLXLIB]GALCNF.UNV + DSKB:[5,17]GLXMAC.UNV <= DSKB:[10,7,GALAXY,GLXLIB]GLXMAC.UNV + DSKB:[5,17]ORNMAC.UNV <= DSKB:[10,7,GALAXY,OPERAT]ORNMAC.UNV + DSKB:[5,17]PLRMAC.UNV <= DSKB:[10,7,GALAXY,PULSAR]PLRMAC.UNV + DSKB:[5,17]QSRMAC.UNV <= DSKB:[10,7,GALAXY,QUASAR]QSRMAC.UNV + DSKB:[5,17]JOBDAT.UNV <= DSKB:[10,7,JOBDAT]JOBDAT.UNV + DSKB:[5,17]MACSYM.UNV <= DSKB:[10,7,MACSYM]MACSYM.UNV + DSKB:[5,17]MACTEN.UNV <= DSKB:[10,7,MACTEN]MACTEN.UNV + DSKB:[5,17]MONSYM.UNV <= DSKB:[10,7,MONSYM]MONSYM.UNV + DSKB:[5,17]RMSINT.UNV <= DSKB:[10,7,RMS10]RMSINT.UNV + DSKB:[5,17]SCNMAC.UNV <= DSKB:[10,7,SCAN]SCNMAC.UNV + DSKB:[5,17]$SCNDC.UNV <= DSKB:[10,7,SCAN]$SCNDC.UNV + DSKB:[5,17]SWIL.UNV <= DSKB:[10,7,SWIL]SWIL.UNV + DSKB:[5,17]UFDPRM.UNV <= DSKB:[10,7,UFDSET]UFDPRM.UNV + DSKB:[5,17]UUOSYM.UNV <= DSKB:[10,7,UUOSYM]UUOSYM.UNV + DSKB:[5,17]DCN.UNV <= DSKB:[10,7,DECNET,DCN]DCN.UNV + DSKB:[5,17]DPYDEF.UNV <= DSKB:[10,7,DECNET,DPY]DPYDEF.UNV + DSKB:[5,17]HILOW.UNV <= DSKB:[10,7,FAST]HILOW.UNV + DSKB:[5,17]QSRMV2.UNV <= DSKB:[10,7,GALTOL]QSRMV2.UNV + DSKB:[5,17]QSRMV4.UNV <= DSKB:[10,7,GALTOL]QSRMV4.UNV + DSKB:[5,17]QSRMV5.UNV <= DSKB:[10,7,GALTOL]QSRMV5.UNV + DSKB:[5,17]COMMOD.UNV <= DSKB:[10,7,KLEPTO]COMMOD.UNV + DSKB:[5,17]MAC10.UNV <= DSKB:[10,7,KLEPTO]MAC10.UNV + DSKB:[5,17]Q.UNV <= DSKB:[10,7,MONDM4]Q.UNV + DSKB:[5,17]SNUP.UNV <= DSKB:[10,7,SNUP]SNUP.UNV +Total of 170248 words in 1347 blocks in 32 files +*copy sys:/protection:055=dskb:[10,7,*,*,*,*,*]system.cmd + DSKB:[1,4]SYSTEM.CMD <= DSKB:[10,7,SYSTEM]SYSTEM.CMD +Total of 162 words in 2 blocks in 1 file +*copy sys:/protection:055=dskb:[10,7,*,*,*,*,*]*.sys + DSKB:[1,4]CORIMG.SYS <= DSKB:[10,7,RSX20F,DECTAP]CORIMG.SYS + DSKB:[1,4]RSX20F.SYS <= DSKB:[10,7,RSX20F,DECTAP]RSX20F.SYS + DSKB:[1,4]CORIMG.SYS <= DSKB:[10,7,RSX20F,FLOPPY]CORIMG.SYS + DSKB:[1,4]RSX20F.SYS <= DSKB:[10,7,RSX20F,FLOPPY]RSX20F.SYS + DSKB:[1,4]ACTDAE.SYS <= DSKB:[10,7,SYSTEM]ACTDAE.SYS + DSKB:[1,4]CATLOG.SYS <= DSKB:[10,7,SYSTEM]CATLOG.SYS + DSKB:[1,4]PROJCT.SYS <= DSKB:[10,7,SYSTEM]PROJCT.SYS +Total of 49410 words in 387 blocks in 7 files +*copy sys:/protection:055=dskb:[10,7,*,*,*,*,*]*.ini + DSKB:[1,4]SYSJOB.INI <= DSKB:[10,7,SYSTEM]SYSJOB.INI + DSKB:[1,4]TTY.INI <= DSKB:[10,7,SYSTEM]TTY.INI + DSKB:[1,4]LINES.INI <= DSKB:[10,7,WHO]LINES.INI +Total of 379 words in 5 blocks in 3 files +* +*exit + +.r credir + +Create directory: dskb:[6,2020]/exit + Created DSKB0:[6,2020].UFD/PROTECTION:775 + +.run dec:smfile + + +DECSYSTEM 2020 DIAGNOSTICS FE-FILE PROGRAM +VERSION 2.7, TOPS-10, KS10, CPU#=4097 +[FOR HELP TYPE "HELP"] +SMFILE>write setup dskb: +SMFILE>write reset +SMFILE>read dec:t10kl.ram +SMFILE>serial 4097 +SMFILE>write cram +SMFILE>write boot dec:ksboot.exe +SMFILE>write done +SMFILE>exit + +EXIT + +.dir sys:sysjob.* + + +SYSJOB INI 1 <055> 24-Jun-88 DSKB: [1,4] + +.sos sys:sysjob.ini +Editing SYSJOB.INI[1,4] +*p^:* +00100 SET DEFAULT ACCOUNT SYSTEM +00200 LOG +00300 FILDAE +00400 LOG +00500 ACTDAE +00600 LOG +00700 DAEMON +00800 LOG ;GALAXY JOBS +00900 QUASAR +01000 LOG +01100 R DEC:MIC +01200 LOG +01300 DTELDR +01400 /ASWITCH:00:100205 +01500 /ASWITCH:10:100205 +01600 /ASWITCH:20:100205 +01700 /IGNORE:01:03:11:13:21:22:23 +01800 /DETACH/AUTOMATIC +01900 LOG +02000 MIC +02100 !Modern MICs (later than 11C(1231)) don't need this blank line, +older ones do. +*d1100:1900 +9 lines (01100/1:01900) deleted +*eub +[DSKB:SYSJOB.INI[1,4]] + +.type sys:sysjob.ini +SET DEFAULT ACCOUNT SYSTEM +LOG +FILDAE +LOG +ACTDAE +LOG +DAEMON +LOG ;GALAXY JOBS +QUASAR +LOG +MIC +!Modern MICs (later than 11C(1231)) don't need this blank line, older on +es do. + +.type sys:tty.ini +ALL KSYS CHECK:DEFAULT TEXT +CTY: GALOPR NO REMOTE ACCOUNT "SYSTEM" +STOMP ACCOUNT "SYSTEM" + +.sos sys:tty.ini +Editing TTY.INI[1,4] +*p^:* +00100 ALL KSYS CHECK:DEFAULT TEXT +00200 CTY: GALOPR NO REMOTE ACCOUNT "SYSTEM" +00300 STOMP ACCOUNT "SYSTEM" +*sCHECK:DEFAULT $$100 +00100 ALL KSYS TEXT +*sTEXT$\$\$TEXT FILL:0 LC WIDTH:80$. +00100 ALL KSYS TEXT FILL:0 LC WIDTH:80 +*i150 +00150 TTY0-37: SPEED:9600 +*eub +[DSKB:TTY.INI[1,4]] + +.type sys:tty.ini +ALL KSYS TEXT FILL:0 LC WIDTH:80 +TTY0-37: SPEED:9600 +CTY: GALOPR NO REMOTE ACCOUNT "SYSTEM" +STOMP ACCOUNT "SYSTEM" + +.systat + +Status of KS10 at 0:16:52 on 18-Mar-119 + +Uptime 7:46, 99% Null time = 99% Idle + 0% Lost, 0% Overhead +1 Jobs in use out of 35. 1 logged in, 0 detached. + +Job Who Line# What Size(P) State Run Time + + 1 [OPR] CTY SYSTAT 22+SPY RN 3 + +Swapping space used = 19/9614 = 0% +Virt. Core used = 22/9614 = 0% +606P Core left +Active swapping ratio = 22/628 = .03 +Average job size =22/1 = 22.0P+0/1 = .00P Total=22/1 = 22.0P + +Busy devices: +Device Job Why Logical + +MTA0 1 as TAPE + +System File Structures: +Name Free Mount +DSKB 66270 1 +Total Free 66270 + + +.r opr + +^C + +. +Simulation stopped, PC: 000001 (SOJG 6,1) +sim> set fe stop +sim> go +[Dumping on DSKB:CRASH.EXE[1,4]] +[Loading from DSKB:SYSTEM.EXE[1,4]] + +KS10 07-Oct-88 +Why reload: +Simulation stopped, PC: 762630 (PUSHJ 1,762650) +sim> quit +Goodbye +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> ls +asun-reference-install-log.txt t10.dsk.bak tuklus-install-log03.log +mig704.pdf TAPES tuklus-install-log04.log +pdp10 tuklus-install-log01.log +t10.dsk tuklus-install-log02.log +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> cat > pdp10.ini +set cpu idle +set tim y2k +attach rp0 /mnt/asun/t10.dsk +attach -am dz 2020 +boot rp0 +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> vi pdp10.ini +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> cat pdp10.ini +set cpu idle +set tim y2k +attach rp0 t10.dsk +attach -am dz 2020 +boot rp0 +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> ./pdp10 pdp10.ini + +PDP-10 simulator V4.0-0 Current git commit id: 314a1da9 +/disk2/home/localuser/simh.run/T10_EXPERIMENTAL/pdp10.ini-4> attach -am dz 2020 +Listening on port 2020 +Modem control activated +Auto disconnect activated +BOOT V4(76) + +BOOT> +[Loading from DSKB:SYSTEM.EXE[1,4]] + +KS10 07-Oct-88 +Why reload: new +Date: +Time: +Startup option: go +[Rebuilding the system search list from the HOM blocks] + +[Rebuilding the active swapping list from the HOM blocks] + +[Rebuilding the system dump list from the HOM blocks] + + +KS10 04:06:42 CTY system 4097 +Connected to Node CENTRA(0) Line # 42 +.LOGIN 1,2 +.R OPR + +[CCPWFD Waiting for file daemon to start] +%%TTY STOMPER - Starting +OPR> + 4:06:53 -- Message from the Accounting System -- + Account validation is not required + + 4:06:53 -- Begin auto take file -- + File: SYS:SYSTEM.CMD[1,4] + + 4:06:53 -- End auto take file -- + 17 lines processed + +OPR> +[CCPCPY Copied DSKB:CRASH.EXE[1,4] to DSKB:SER001.EXE[10,1]] + +OPR>set ksys now +OPR> + 4:07:34 -- Event KSYS queued, request #4 -- + + 4:07:34 -- Timesharing is over -- + Wait for "KSYS processing complete" message before SHUTDOWN + + 4:07:34 -- Waiting for BATCON to start for KSYS logouts -- +OPR> +;;SYSTEM: - Timesharing is over! + + 4:07:35 -- KSYS processing completed -- + +OPR>exit + +.kjob +[LGNJSP Other jobs same PPN] +Job 2 User OPR [1,2] +Logged-off CTY at 4:07:55 on 18-Mar-119 +Runtime: 0:00:00, KCS:0, Connect time: 0:01:12 +Disk Reads:503, Writes:0, Blocks saved:0 + +. +Simulation stopped, PC: 000001 (SOJG 6,1) +sim> set fe stop +sim> go +BOOT> +[Loading from DSKB:SYSTEM.EXE[1,4]] + +KS10 07-Oct-88 +Why reload: +Simulation stopped, PC: 762633 (SKIPN 4,32) +sim> quit +Goodbye +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> +localuser@opensuse:/disk2/home/localuser/simh.run/T10_EXPERIMENTAL> exit + +Script done on 2019-03-18 04:11:12+00:00 [COMMAND_EXIT_CODE="0"] diff --git a/pdp10/docs/app3-sos.md b/pdp10/docs/app3-sos.md new file mode 100644 index 0000000..6590ee5 --- /dev/null +++ b/pdp10/docs/app3-sos.md @@ -0,0 +1,22 @@ + note the $ symbols in f and s commands are 'esc'! + + ^ = first line + . = curr line + * = last line + esc = print prev, exit insert mode if inside + ctrl-j = print next + pln1:ln2 = print lines in range + iln1 = insert mode at ln1 + cln1,ln2:ln3 = copy range to ln1 + tln1,ln2:ln3 = move range to ln1 + rln1:ln2 = delete range and insert at ln1 + fstring$ln1:ln2 = find string in range + sstring1$string2$ln1:ln2 = substitute string in range + nx = renumber lines using step x + w = save + e = save and exit + es = save without line numbers + eq = exit without save + g = save and exit and rerun + ctrl-u = retype current line, any mode + diff --git a/pdp10/docs/misc/bigdanzblog-dec-10-notes.md b/pdp10/docs/misc/bigdanzblog-dec-10-notes.md new file mode 100644 index 0000000..bc42a58 --- /dev/null +++ b/pdp10/docs/misc/bigdanzblog-dec-10-notes.md @@ -0,0 +1,763 @@ +**Getting TOPS-10 Running on PDP-10 Emulation** + +Happily someone has done ALL the work for this one. Good thing because I never operated this system and only know if from a user perspective. + +SIM-H compliant disks already exist as dskb.dsk and dskc.dsk. I created the following cmd file for pdp-10.exe to load the operating system: + +set dz 8b +set tim y2k +att rp0 dskb.dsk +att rp1 dskc.dsk +att lp20 printer.out +att \-am dz 2020 +boot rp + +this is invoked by simply typing *do tops10* + +\[C:\\Simulators\\DEC10Sim\\emulator\]pdp10 + +PDP-10 simulator V3.8-1 +sim\> do tops10 +Listening on port 2020 (socket 1912\) +Modem control activated +Auto disconnect activated +BOOT V3(47) + +I created a BAT file that does this and can have a shortcut linked to to make starting as easy as double clicking. + +You will end up with a boot prompt to which you just press enter and then begin the boot sequence: + +BOOT\> +\[Loading from DSKB:SYSTEM.EXE\[1,4\]\] + +VNW 10-14-99 +Why reload: sched +Date: 07-28-2011 +Time: 14:49:00 + +Startup option: quick +\[Rebuilding the system search list from the HOMe blocks\] + +\[Rebuilding the active swapping list from the HOMe blocks\] \[Rebuilding the system dump list from the HOMe blocks\] + +The system will automatically login and run OPSER: + +VNW 14:51:07 CTY system 4097 +Connected to Node (0) Line \# 12 +.LOGIN 1,2 +.R OPSER +\[CCPWFD Waiting for file daemon to start\] +\[OPRPAF Processing auto command file\] +?OPRALF LOOKUP failure 0 +\*%%TTY STOMPER \- Starting + +After you get this far in opser, you can control-C out. + +Once the emulator is up, you can telnet into it using port 2020 (I used VT100 emulation). + +The non-operator login is + +login public +or +login 42,42 + +and there is no password + +**Various useful commands** + +kjob logout +sys sysstat \- shows various items of interest +sos easier than teco + +**To shut down** + +At console, type: + +r opr + +set ksys \+0:01 {turn off time sharing in 1 minute} wait for timesharing to end: + +OPR\> +;;SYSTEM: \- Timesharing ends in 1 min at 22-Sep-11 13:45:00 13:43:59 \-- Timesharing is over \-- + +13:43:59 Batch-Stream 32 \-- KSYS stream started \-- 13:43:59 Batch-Stream 32 \-- Begin \-- + + Log file: DSKB:B24644.LOG\[3,3\] +13:43:59 Batch-Stream 32 \-- End \-- + Job KSYS Req \#261632 for PUBLIC \[42,42\] 13:43:59 \-- KSYS processing completed \-- + +OPR\> +;;SYSTEM: \- Timesharing is over\! + +OPR\>exit + +control-e to get to sim prompt +type: + +set fe stop +g + +to return to boot prompt + +**SOS Commands** + +SOS is way easier to use than teco, but it produces numbered lines only. sos \ + +This puts you in a blank file in insert mode. Press \ to escape. + +| \ | prints next line | +| ----- | :---- | +| \ | print prev line | +| c d,f:l | copy f:l to/after d | +| d \\[:\\] | to delete lines | +| e \[s|q\] | exit\&save, exit & save w/o lines, exit and don’t save | +| f\\:0 | find text starting at beginning | +| i \ | starts inserting at/after \ | +| n \ | renumbers | +| p \\[:\\] | to print lines | +| r \:\ | replace lines f thru l | + +**Stream a batch job** + +Batch jobs are simply commands placed in a .ctl file such as: + +.type test.ctl + +sys + +dir + +to stream(queue) it, type: + +.submit test.ctl + +\[Batch job TEST queued, request \#19, limit 0:05:00\] + +Normally output would go to printer, but there is no printer, so you will find output in test.log. + +**Monitoring batch jobs** +At console, in OPR (.r opr) + +To *see batchjobs*, type: + +OPR\>show queues batch-jobs +OPR\> +16:27:28 \-- System Queues Listing \-- + +Batch Queue: +Job Name Req\# Run Time Core User +\-------- \------ \-------- \----- \------------------------ \* LOOP 25 00:05:00 512 PUBLIC \[42,42\] In Stream:0 Job 14 Running LOOP Runtime 0:01:00 + +There is 1 job in the queue (1 in progress); 00:05:00 runtime To *stop batch jobs*: + +hold batch-jobs \* + +then + +release batch-jobs \* + +To *suspend a running job*: + +requeue batch-stream \ (you must list jobs to see the stream it is in) then + +release batch-jobs \* + +to *abort a job*: + +abort batch-stream \ + +**Detaching** + +The best thing in TOPS-1o. At ., type detach: + +.det + +From job 2 + +To reattach, specify the job\#: + +.att 2 + +Password: + +\[LGNNOC No operator coverage\] + +\[LGNATJ Attaching to job 2 \[42,42\] in monitor mode\] + +If something big is running, ctl-C, ccont, and det to run it in the background: +.exe loop.for + +LINK: Loading + +\[LNKXCT LOOP execution\] + +^C + +^C + +.ccont + +.det + +From job 2 + +and you can see it running detached: + +Job Who Line\# What Size(P) State Run Time + + 1 \[OPR\] DET STOMPR 9+8 SL 0 + + 2 42,42 DET LOOP 7+28 RN 8:58 + +**Printer Control** + +Printing should automatically occur to the file printer.out. If you want to clear this file while the O/S is running, control-e, detach from the printer, delete printer.out, then attach back to the printer. + +(These notes are from the Operator’s Guide) + +Printer control is done in OPR (.r opr) + +*Printer requires operator action*: + +Generally I have not had to do anything to make the printer work correctly. However, sometimes I have to respond to a request in OPR. + +Here I print a file and type print again to see if it is done: + +.print dsklst.lst +\[Printer job DSKLST queued, request \#11, limit 197\] + +.print + +Printer Queue: +Job Name Req\# Limit User +\-------- \------ \------- \------------------------ +\* DSKLST 11 197 OPSER \[1,2\] On Unit:0 \--Waiting For Operator Response-- + +There is 1 job in the queue (1 in progress); 197 pages + +The printer is waiting for an operator response. So at the console, I run OPR and respond to the request: + +12:52:01 Printer 0 \-- Begin \-- + Job DSKLST Req \#11 for OPSER \[1,2\] +12:52:01 Printer 0 \-- Loading RAM with 'LP96' \-- 12:52:01 Printer 0 \-- Loading VFU with 'NORMAL' \-- + +12:52:01 \<1\> Printer 0 \-- Align Forms and Put Online \-- Type 'RESPOND \ PROCEED' when ready OPR\>respond 1 proceed + +To *start the printer*: + +OPR\>start printer 0 +OPR\> +16:47:04 Printer 0 \-- Already Started \-- + +To *stop the printer:* + +OPR\>stop printer 0 +OPR\> +16:47:53 Printer 0 \-- Stopped \-- + +To *restart printer after stop:* + +OPR\>continue printer 0 +OPR\> +16:49:52 Printer 0 \-- Continued \-- + +To *abort current printout*: + +abort printer 0 /purge + +Misc + +OPR\>**Show parameters printer** + +Printer Parameters: + Unit Page Limits Form Prio Lim Ex Dev-Chars \---- \------------ \------ \----- \------- \--------- 0 0:2000 NORMAL 1:63 Ask Lower LP05 + +OPR\>**show status printer** +OPR\> +10:10:09 \-- System Device Status \-- + +Printer Status: + Unit Status Jobname Req\# User \---- \--------------- \------- \------ \------------------------ 0 Opr Resp Wait TEST 5 PUBLIC \[42,42\] Started at 10:01:13 + +OPR\>**show messages** +OPR\> +10:12:01 \-- System messages outstanding \-- + +10:01:13 \<1\> Printer 0 \-- Align Forms and Put Online \-- Type 'RESPOND \ PROCEED' when ready +OPR\>**respond 1 proceed** +OPR\> +10:12:26 Printer 0 \-- End \-- + Job TEST Req \#5 for PUBLIC \[42,42\] OPR\> + +10:12:26 Printer 0 \-- Begin \-- + Job INP Req \#8 for PUBLIC \[42,42\] Printer Config info is kept in sys:lpform.ini + +**Card Reader** + +To assign a text file to the card reader: + +sim\> set cr enabled +sim\> att cr carddeck.txt +CR: unit is read only + +In OPR: + +NOTE: I never successfully figured out how to read from the card reader. + +start reader 0 +stop reader 0 + +continue reader 0 (if stop command issued from hardware) + +OPR\>show status reader +OPR\> +11:10:24 \-- System Device Status \-- + +Reader Status: + Unit Status + \---- \--------------- + 0 No processor + +**Tape Drive** + +To make tapes available on the emulator, first enable: + +set tu enable + +then assign to file + +attach tu0 magtape.bin + +In OPR these are the useful commands: + +OPR\>**show statUS tapE-DRIVE** +OPR\> +13:45:25 \-- Tape Drive Status \-- + +Drive Trk Status AVR Density Write Volume \------ \--- \----------- \--- \------------- \------- \------ +MTA000 9 Online Yes 1600 Enabled +MTA001 9 Free Yes 800/1600 +MTA002 9 Free Yes 800/1600 +MTA003 9 Free Yes 800/1600 + +**Using the tape drive** + +Here is how I mounted a tape and wrote a single file to it: + +At terminal I typed: + +.mount mt: /scratch + +\[Mount request MT-Q0RFXI queued, request \#25\] + +Note that MT is a logical name for my session, it can be anything. + +This produces a tape mount request on the console: + +15:24:27 \-- Magtape mount request \#25 \-- + User: PUBLIC \[42,42\] Job \#12 + Volume-set name: MT-Q0RFXI + + Volume-ID Write Labels Track Density + \--------- \------- \------ \----- \------- + Scratch Enabled No 9 1600 + +The tape is assigned to a file using the emulator’s ATT command. + +sim\> att tu0 mag3.bin +TU: creating new file + +When you restart the emulator, the console will report it cannot read the tape label: + +15:22:28 \<14\> Device MTA000 \-- Label error \-- + Can't read this tape's labels on this drive Type 'RESPOND \ ABORT' to unload the tape on MTA000 Type 'RESPOND \ PROCEED' to treat the tape on MTA000 as u + +nlabled + +Respond with proceed to make this tape unlabeled: + +OPR\>respond 14 proceed +15:22:53 Device MTA000 \-- Unlabeled volume mounted \-- Density 1600 BPI, write-Enabled + +To assign this tape to the user, you must first identify the volume on the tape drive. At console I typed: + +OPR\>ident mta0: volume-id scratch +15:26:30 Device MTA000 \-- Unlabeled volume SCRATC mounted \-- +Now you can assign the tape drive/volume to the mount request: + +OPR\>ident mta0: request 25 +15:27:40 Device MTA000 \-- Volume SCRATC reassigned \-- User: PUBLIC \[42,42\] Job \#12 + +Back at the terminal, the mount request will now complete and you can copy a file to the psuedo dev: + +\[Magtape SCRATC mounted on MTA000 with logical name MT\] + +now to copy a file to the tape drive, I type: + +.copy mt:=myfile.txt + +then dismount the tape: + +.dismount mt: + +\[MTA000 dismounted\] + +**Misc Tape Commands** + +To Create an unlabeled blank tape: + +OPR\>SET TAPE MTA0: INIT /LABEL-TYPE:UNLABELED +OPR\> +14:58:53 Device MTA000 \-- Volume initialized \-- + Unlabeled tape, Density:1600 + +14:58:53 Device MTA000 \-- Volume initialization complete \-- Drive is available for use + +14:58:53 \<12\> Device MTA000 \-- Label error \-- + Can't read this tape's labels on this drive Type 'RESPOND \ ABORT' to unload the tape on MTA000 Type 'RESPOND \ PROCEED' to treat the tape on MTA000 as u + +nlabled +OPR\>RESPOND 12 PROCEED +OPR\> +14:59:07 Device MTA000 \-- Unlabeled volume mounted \-- Density 1600 BPI, write-Enabled + +To dismount a tape + +dismount tape-drive mta0: + +To cancel a tape mount request: + +In OPR: +cancel mount-request \* +**Full Backup:** + +.MOUNT MT:/SCRATCH /NOWAIT +{note the request \#} +.r opr +{request \# will show up in OPR} +^E {get into simulator} +\>att tu0 fullbackup-yymmnn.tap +\>g +{IF OPR shows label error reading tape:} +\>RESPOND \ PROCEED +{OPR responds \--unlabeled vol mounted--} +\>ident mta0: volume-id scratch +{Opr responds \--unlabeled vol SCRATC mounted--} +\>ident mta0: request \ +{OPR responds \--volume SCRATC reassigned--} +\>exit {OPR} + +{tape is now ready to be written to} + +. R BACKUP \ Run the BACKUP program. +/TAPE MT: \ Identifies logical tape MT. +/REWIND \ Rewind to the beginning of the tape. /LIST DSK: \ Request a directory listing of disk. /SAVE DSKB: \ Save system disk. + +\!\~DSKB BACKUP prints each UFD as it begins to save files from that area. + +"Done The SAVE is complete. +/exit +.dismount mt: + +**Backup Utility** + +See Operators Guide, App E for full explanation. + +before invoking mount a tape such as: + +mount mt: /scratch /nowait + +then go into OPR to assign a tape to the request as described in the section on accessing tape. + +To invoke backup: + +.r backup + +To specify a tape: + +/tape mt: + +To backup: + +/save \ +save myfile.txt +save myfile.\* +save \* +save \*\[1,2\] +save dskb: {system drive} +save \[42,42,\*\] + +To restore + +/restore \ + +restore dskc:myfile.txt\[42,42\] note \- do a /rewind before the restore To validate backup: + +/check \ + +To print the tape directory: + +/\[N\]Print \ {N means narrow, \ is the output file name} **To Compile** + +compile \ \[/compile\]\[/list\] + +exe \ is generally enough \- it will compile only if necessary, link, then run. use exe \ /compile/list as well. + +**Get info on mounted hard drives** + +OPR\>**show stat str** +OPR\> +13:20:57 \-- Disk File Structures \-- + +Name Time Free Mount \#Req Volume Type Drive Owner PPN \---- \------ \-------- \----- \---- \---------- \---- \------ \------------- DSKB 0:40 2230 2 0 ONC312 1/1 RP06 RPA0 + +DSKC 0:40 289350 3 0 HELLO 1/1 RP06 RPA1 + Total of 2 file structures, 2 mounted; 291580 free blocks + +OPR\>**show status disk-DRIVE** +OPR\> +13:23:15 \-- Disk Drive Status \-- + +Drive Type Status AVR STR Volume Unit\# +\------ \---- \----------- \--- \----- \------ \----- +RPA0 RP06 Mounted Yes DSKB ONC312 0 +RPA1 RP06 Mounted Yes DSKC HELLO 0 +RPA2 RP06 Free Yes +RPA3 RP06 Free Yes +RPA4 RP06 Free Yes +RPA5 RP06 Free Yes +RPA6 RP06 Free Yes +RPA7 RP06 Free Yes + +**Subdirectories** + +To create: + +.r credir + +Create directory: \[42,42,PASCAL\] + +Protection: 057 + +Name: PASCAL + +Allocation: + + Created DSKC0:\[42,42,PASCAL\].SFD/PROTECTION:057 Create directory: ^C + +.DIR PASCAL.\* + +PASCAL LOG 100 \<057\> 21-Sep-11 DSKC: \[42,42\] PASCAL DOC 29 \<000\> 5-Sep-77 + +PASCAL EXE 220 \<000\> 5-Sep-77 + +PASCAL MAN 40 \<000\> 5-Sep-77 + +PASCAL REL 51 \<000\> 5-Sep-77 + +PASCAL SFD 1 \<057\> 21-Sep-11 PASCAL Total of 441 blocks in 6 files on DSKC: \[42,42\] + +**To delete a directory** + +First, you must empty the directory: + +.del \*.\*\[,,oldpas\] + +Files deleted: + +DSKC:PASCAL.DOC + +DSKC:PASCAL.EXE + +DSKC:PASCAL.MAN + +DSKC:PASCAL.REL + +340 Blocks freed + +.del oldpas.sfd + +Files deleted: + +DSKC:OLDPAS.SFD + +01 Blocks freed + +**Restoring from DECUS Tape** + +Decus tapes are found at: + +http://pdp-10.trailing-edge.com/ +Had to do the restore the tape from console into end-user’s dir .r backup +/tape pascal +/rewind +/protection 775 +/restore dskc:\[42,42,pascal\]=all:\*.\*\[43,50531\] + +**Change file protection (including subdirs)** + +.protect pascal.sfd\<775\> + +Files renamed: + +DSKC:PASCAL.SFD + +**Pascal** + +I was able to restore pascal from Pascal-declib10.tap. All of the files are in \[42,42,pascal\]. I moved the critical files to SYS: so they will work for all. + +**Adventure** + +The initial game came on advent.tap. I restored that into \[42,42,advent\]. I copied that into \[42,42\] to play with. Compile with: + +.COMPILE ADV.F4 + +FORTRAN: ADV + +.COMPILE IOFIL.FOR + +FORTRAN: IOFIL + +and link with: + +.LOAD ADV.REL,IOFIL.REL + +LINK: Loading + +EXIT + +.EXE + +LINK: Loading + +\[LNKXCT ADV execution\] + +PAUSE + +INIT DONE + +Type G to Continue, X to Exit, T To Trace. + +\*G + +WELCOME TO ADVENTURE\!\! WOULD YOU LIKE INSTRUCTIONS? or save with +.save adv.exe + +ADV saved + +and run with + +.run adv.exe + +WELCOME TO ADVENTURE\!\! WOULD YOU LIKE INSTRUCTIONS? + +I also doctored ADV.DAT so each line starts with X instead of 0 so that CCTL works correctly. + +Note: I didn’t make any changes to the source, so I deleted it from \[42,42\]. I copied adv.exe and adv.dat to sys: + +To run from SYS, just type “r adv” and respond as follows: + +.**r adv** + +?FRSNAM OPEN unit 1 DSK:ADV.DAT at IFILE+14 (PC 73033\) +?FRSOPN Can't OPEN file: No such file +\[FRSEFS Enter correct file specs\] +\***sys:adv.dat** +PAUSE +INIT DONE +Type G to Continue, X to Exit, T To Trace. +\***g** +WELCOME TO ADVENTURE\!\! WOULD YOU LIKE INSTRUCTIONS? + +**kermit** + +You can xfer files between PC and emulator using kermit. I have had luck transferring ASCII files but not binary. + +Start kermit on the dec-10: + +.r kermit + +TOPS-10 KERMIT version 3(136) + +make sure you enter this command or the transfer might act like it is working, but it isn’t really: + +Kermit-10\>set file byte-size 36-bit + +Kermit-10\>server + +\[Kermit Server running on the DEC Host. Please type your escape sequence to return to your local machine. Shut down the server by typing the Kermit BYE command on your local machine.\] +In reflections File | transfer and make sure protocol is kermit and transfer type is binary: ![][image1] +Ascii files seem to work fine in both directions. Something goes wrong with binary files but I can’t tell what. + +**SYSANS** + +This is like top in linux. + +**REACT** + +Used to manage users. + +**Changing Directory** + +To change to subdir pascal: + +.r setsrc + +\*dir + +?ILLEGAL COMMAND 'DIR' + +\*help + +Src.Lst.Commands: C M A R T LIB NOLIB SYS NOSYS NEW NONEW + +Sys.Src.Lst.Commands: CS MS AS RS TS + +Path Commands: CP TP SCAN NOSCAN + +File Str. Switches: /WRITE /NOWRITE /CREATE /NOCREATE + +Src.Lst.Switches: /LIB:\[ppn\] /NOLIB /SYS /NOSYS /NEW /NONEW Path Switches: /SCAN /NOSCAN + +\* \= Current Src.Lst. + +For complete description type monitor command 'HELP SETSRC' \*cp \[,,pascal\] + +to change back to main dir: +cp \[,\] + +**Labeled Tapes** + +Using labeled tapes is kind of easier. + +First mount the tape using simh. Note that mounting labeled tapes defaults as read-only (locked) and if your request doesn’t match the real status of the write-ring, you won’t get assigned the tape. + +sim\> att tu0 clisp.tap +sim\> set tu0 locked + +If opr doesn’t automatically recognize the tape, ‘recognize’ it: + +OPR\>rec mta0 +OPR\> +15:35:42 Device MTA000 \-- Volume CLISP mounted \-- + ANSI labels, 1600 BPI, write-Locked + +Note that this tape is called CLISP, has ANSI labels and is read-only. + +Now the user mounts the tape. Note the volume is “CLISP” which must be specified. The only reel-id (inside parens) I’ve been able to get to work is also CLISP. Also match up the label types and if the tape is read or write: + +.mount clisp(clisp)/label:ansi/read + +\[Mount request CLISP queued, request \#28\] + +\[Magtape CLISP mounted on MTA000 with logical name CLISP\] + +**To get rid of irritating beeps on console window** + +net stop beep + +**sys:sysjob.ini** + +Edit this job to add sprint. Sprint is needed to read batch decks using submit/reader. + +[image1]: \ No newline at end of file diff --git a/pdp10/docs/misc/boot.simh b/pdp10/docs/misc/boot.simh new file mode 100644 index 0000000..34875b7 --- /dev/null +++ b/pdp10/docs/misc/boot.simh @@ -0,0 +1,6 @@ +set cons telnet=1026 +at rp0 dskb.dsk +at rp1 dskc.dsk +at rp2 dskd.dsk +boot rp + diff --git a/pdp10/docs/misc/boot2.simh b/pdp10/docs/misc/boot2.simh new file mode 100644 index 0000000..5e47956 --- /dev/null +++ b/pdp10/docs/misc/boot2.simh @@ -0,0 +1,13 @@ +set cons telnet=1026 +set cpu tops10 +set dz 8b +set tim y2k +set dz lines=32 +att -am dz 2010 speed=*32,buffer=1024k +att rp0 dskb.dsk +att rp1 dskc.dsk +att rp2 dskd.dsk +att lp20 printer.out +set cpu idle +;set throttle 2M +boot rp diff --git a/pdp10/docs/misc/kermit.txt b/pdp10/docs/misc/kermit.txt new file mode 100644 index 0000000..c39d82c --- /dev/null +++ b/pdp10/docs/misc/kermit.txt @@ -0,0 +1,102 @@ +Transfering files between simh and UNIX using K10MIT 3(136) + +This document describes how to transfer files back and forth between UNIX and +TOPS-10 using kermit and the simh DZ11 terminal emulation support. + +Requirements: +1. a working copy of the simh pdp10 emulator (simh.trailing-edge.com) +2. A copy of TOPS10 with K10MIT installed on it +(www.steubentech.com/~talon/pdp10) +3. A copy of C-Kermit (http://www.columbia.edu/kermit/ck80.html) + + +Getting started: + +I am assuming that you have read all teh documentation for simh and for my +TOPS-10 distribution so that you can now easily log in over telnet + +(if not try running +set dz 8b +at -am dz 2020 + +as part of the simh setup) + +Once you have the simh booting tops10 and tops10 listening ot port 202 for +terminal connections. + +build the C-Kermit source on the UNIX machine and you will get a binary called +wermit + +Execute the wermit binary to get a screen somewhat like this: +C-Kermit 8.0.211, 10 Apr 2004, for Solaris 8 + Copyright (C) 1985, 2004, + Trustees of Columbia University in the City of New York. +Type ? or HELP for help. +(/opt/home/talon/kermit/cobol/) C-Kermit> + +Type set host 2020 /raw-socket to connect to the emulator + +Example: +(/opt/home/talon/kermit/cobol/) C-Kermit>set host ayeka 2020 /raw-socket + DNS Lookup... Trying 192.168.93.50... Reverse DNS Lookup... (OK) + ayeka connected on port 2020 +(/opt/home/talon/kermit/cobol/) C-Kermit> + +Type c to get to the login prompt + +Example: +(/opt/home/talon/kermit/cobol/) C-Kermit>c +Connecting to host ayeka:2020 + Escape character: Ctrl-\ (ASCII 28, FS): enabled +Type the escape character followed by C to get back, +or followed by ? to see other options. +---------------------------------------------------- +��"�������� + +Connected to the PDP-10 simulator + +Hit return until you get a '.' character then type login public. + + + +Example: +.login public +Job 3 VNW TTY0 +20:02 23-Oct-6 Monday + +. + +Run K10MIT to send/receive files on the tops-10 end +Example (BEWARE be sure to type teh set file byte-size +line unless you like transferring garbage instead of real data): +.r k10mit + +TOPS-10 KERMIT version 3(136) +Kermit-10>set file byte-size 36-bit +Kermit-10> + +Downloading files from TOPS-10: +Simply type send filename from the Kermit-10 prompt + +Uploading files to TOPS-10: +This is a bit more involved +make sure you are at the Kermit-10 prompt and type Receive filename +You won't get a prompt back and it will just sit there. thats just what we want. +The next step is to escape back into C-Kermit by typing Control-\c (hit control and \ and then type c and possibly a carrage return) + +You should now be back to the +C-Kermit> prompt +Example: +(Back at ayeka) +---------------------------------------------------- +(/opt/home/talon/kermit/cobol/) C-Kermit> + +once there its as simple as typing send filename + +finally to quit kermit go back to tops-10 and exit out of K10MIT, log out by typing kjob and then escape back to C-Kermit and type quit and say yes when it asks if you want to disconnect. + + +As a final note you can actually transmit binarys back and forth and it works just fine. just be sure to set file byte-size 36-bit in Kermit-10> + +test.exe in this distribution makes a great test of this ability. + diff --git a/pdp10/docs/misc/quentin's-faq.txt b/pdp10/docs/misc/quentin's-faq.txt new file mode 100644 index 0000000..0153575 --- /dev/null +++ b/pdp10/docs/misc/quentin's-faq.txt @@ -0,0 +1,437 @@ +https://www.quentin.org.uk/tops-10-faq/ + +How do I create a standard user? +How do I create a default account template? +How do I manage user accounts? +How do I restore a tape? +How do I mount a tape? +How do I access a subdirectory? +How do I create a new subdirectory? +Why is there no BCL: device on my system? +Why won’t the TOPS-10 system printer work? +But my TOPS-10 printer still doesn’t work. What now? + How do I create a standard user? +First ensure that there is a default user template. See the FAQ for that. Next run the user account management utility REACT and insert a new user PPN following the example below. You will need to be on the OPR account to do this. + +.r react + +REACT>ins [27,101] +[READPL Default profile loaded: [%,%]] +New user name: test +USER>done +User [27,101] test inserted with password YEBOWUPUC + +A total of one user inserted +REACT>exit + +Now login to the new user account using login and the password generated above. + +.login test +Job 3 PDP10 TTY0 +Password: +%LGNPCR A password change is required by the system administrator +New password: +Verification: +[LGNPHC Password has been changed] +16:37 28-Mar-118 Wednesday + +. + +Your user account is now ready for use. + + + Back to Index + How do I create a default account template? +Start the REACT utility and follow the recipe below. I have been choosy about access-types, you could just use ALL if you aren’t worried about how your system’s users can access the system and its resources: + +.r react + +REACT>ins [%,%] +USER>login-times +LOGIN-TIMES>all +LOGIN-TIMES>show +Weekdays 0:23 Weekends 0:23 +LOGIN-TIMES>done +USER>struct +STRUCTURE-QUOTAS>add dskb infinite +STRUCTURE-QUOTAS>show + +Structure Quota in Quota out Reserved Status +--------- ----------- ---------- ---------- ---------- +DSKB -infinite- -infinite- 0 +STRUCTURE-QUOTAS>done +USER>access-types +ACCESS-TYPES>local +ACCESS-TYPES>remote +ACCESS-TYPES>batch +ACCESS-TYPES>subj +ACCESS-TYPES>show +Local, Remote, Subjob of batch, Batch +ACCESS-TYPES>done +USER>core +USER>show core +Physical 512, Virtual 512 +USER>con 30 1000 +USER>ipcf 511 511 511 +%REARIQ Reducing IPCF send quota from 511 to 511 +%REARIQ Reducing IPCF receive quota from 511 to 511 +%REARIQ Reducing IPCF PID quota from 511 to 511 +USER>enq 511 +USER>req +REQUIREMENTS>change pass both +REQUIREMENTS>pass both +REQUIREMENTS>show + +Account and remark strings are not required +Name is not required +Password under timesharing and batch +Password change at next LOGIN +Minimum password length: -none- +Password change interval: -none- +Password changes are allowed +REQUIREMENTS>done +USER>done +REACT>show [%,%] + +PPN: [%,%] +User name: *-DEFAULT +Profile default: [777777,%] or [%,%] +* Personal name: -none- +* Distribution location: -none- +* Mailing address: -none- + +* Expiration date: never +LOGIN times: Weekdays 0:23 Weekends 0:23 +Access types: Local, Remote, Subjob of batch, Batch +Requirements for LOGIN: +Account and remark strings are not required +Name is not required +Password under timesharing and batch +Password change at next LOGIN +Minimum password length: -none- +Password change interval: -none- +Password changes are allowed +* Schedular type: 0 +* Program to run: -none- + +* Context-quotas: Contexts 30, Total pages 10000 +* Core Limits: Physical 512, Virtual 512 +* ENQ/DEQ quota: 0 +* IPCF quotas: Send 511, Receive 511, PIDs 511 +* Privileges: -none- +* Spooled device bits: -none- +* Watch bits: -none- + +Structure quotas: +Structure Quota in Quota out Reserved Status +--------- ----------- ---------- ---------- ---------- +DSKB -infinite- -infinite- 0 + +Administrative data: +Profile last changed by [1,2] at 28-Mar-18 16:17:04 +Last access -never- +Last password change at 7-Feb-18 22:05:09 + +A total of one user listed +REACT>exit + +You should now have a default user who can login, is forced to change/set a password on first login, has access to the disk storage and can submit batch jobs. There are infinite quotas on the disk and the maximum core use is 512 Pages. This is very generous, but unless you are intending on running a real timesharing service this will probably be the best options as it will put the lowest number of barriers in place for a user to do things. + + + Back to Index + How do I manage user accounts? +As the OPR you can manage user accounts with the REACT utility. This utility allows you to create, delete, and modify user accounts and their attributes. You would normally use this for creating a standard user account. Before creating any standard user accounts it is a good idea to create a system wide user account template first so that any new accounts inherit some standard attributes such as the ability to login on a terminal. To execute REACT just type: + +.r react + +REACT> + +The REACT> prompt is where you can enter into a dialog about user accounts. HELP works in this dialog. + + + Back to Index + How do I restore a tape? +First mount the tape, see the FAQ on how to do this. + +Second use the BACKUP utility to restore the files from tape. BACKUP uses “/” as a prompt. + +.r backup + +/tape tape: +/rewind +/protection 155 +/files +/restore dsk:=*.* + +You will then get a list of files and directories being restored to your disk, at the end of which your will see the following to which you type ctrl-Z to exit from BACKUP: + +"Done + +/^Z + +.dismount tape: + +[MTA0:BCPL Read(C/H/S) = 2173280/0/0] +[MTA0 dismounted] + +You will now find the files in the directory you were using when you ran backup. + + + Back to Index + How do I mount a tape? +If you need to mount a tape from a operational TOPS-10 system as a user, use a command similar to the following: + +.mount tape:/reelid:label/nowait + +The reeled: parameter specifies the tape label. + +This will queue the tape mount request and the OPR console will then need to action the request. + +When using simh you will need to attach the tape file on the console and respond to the OPR console. + +14:44:01 -- Magtape mount request #4 -- +User: OPR [1,2] Job #2 +Volume-set name: TAPE + +Volume-ID Write Labels Track Density +--------- ------- ------ ----- ------- +BCPL Locked No 9 1600 +OPR> +Simulation stopped, PC: 000001 (SOJG 6,1) +sim> att tu0 tapes/BCPL.tap +sim> set tu0 lock +sim> c + +14:44:16 Device MTA0 -- Unlabeled volume mounted -- +Density 1600 BPI, write-Locked + +OPR>sho que +OPR> +14:44:53 -- System Queues Listing -- + +Mount Queue: +Volume Status Type Write Req# Job# User +------- -------- -------- ------- ------ ---- ------------------- +BCPL Waiting Magtape Locked 4 2 OPR [1,2] +Volume-set: TAPE +Label-Type: No, Tracks: 9, Density: 1600 BPI +There is 1 request in the queue +OPR>ide mta0: re 4 +OPR> +14:45:04 Device MTA0 -- Volume BCPL reassigned -- +User: OPR [1,2] Job #2 + +Your tape should now be mounted on the system and accessible through tools such as BACKUP. + + + Back to Index + How do I access a subdirectory? +You can either include the subdirectory in the command PPN argument or change your working directory to where you want to be. + +To include the subdirectory in the command, simply append it after a comma in the PPN argument. Eg: + +.dir [,,mud] + +To temporarily change your working directory for a series of actions, use SETSRC as follows: + +.r setsrc + +*cp [,,BCPL] + +*^Z + +EXIT + +To return to your PPN just reference it with a PPN of [,] in any command. + + + Back to Index + How do I create a new subdirectory? +To create a new SFD (subdirectory) in your own PPN you use CREDIR: + +.r credir + +Create directory: [,,BCPL] +Created DSKB0:[27,100,BCPL].SFD/PROTECTION:775 +Create directory: ^Z + +.dir + +HELLO BAS 1 7-Feb-18 DSKB: [27,100] +BCPL SFD 1 28-Mar-18 +Total of 2 blocks in 2 files on DSKB: [27,100] + + + Back to Index + Why is there no BCL: device on my system? +BCPL needs to have a BCL: ersatz device to function effectively. You can use the PATH command to set one up on a use by use basis, but the recommended solution in the BCPL documentation is to configure a permanent ersatz device in MONGEN. This is how you do it based on the TOPS-10 configuration I am running. The key piece is the ersatz device line towards the end of the MONGEN program dialog: + +.r mongen + +Write MONGEN.MIC (YES,NO) : n +MONGEN for 704 monitors + +MONGEN will generate any known TOPS-10 configuration. For information +about which configurations are supported, please refer to the SPD. + +/HELP (PROMPT,SHORT,LONG) ]: prompt +Which GEN (SYS,F) : s +Output(DSK:SYSCNF.MAC): +DECsystem10 (KL,KS) : ks +System name : PDP10 +CPU0 serial number (1-10000) : 4097 +Exclude monitor overhead from user run time (YES,NO) : y +Account verification (YES,NO) : n + +Autoconfigured device options: +Include Ethernet service (NO,YES,PROMPT): n +Prompt for RP0x/RM0x Massbus disks (NO,YES): n +Include TM02/TM03 magtapes (NO,YES,PROMPT): y +Include UNIBUS/LP20 printers (NO,YES,PROMPT): y +Include UNIBUS/CD20 card readers (NO,YES,PROMPT): n + +Local terminal configuration: +DZ-11 TTY lines (0-32) : 32 + +OPR octal line number (CTY,0-37) : cty +Data set lines + +Number of Jobs (1-511) : 127 +Maximum pages of core for each job (0,0-16384) : +Total amount of system core in K (512-4096) : 1024 +Clock ticks per second (60,50) : 60 +Allow jobs to be locked in core (YES,NO) : +Guaranteed number of pages for unlocked jobs (0,0-16384) : +Number of pages reserved for locking jobs in Exec Virtual Memory (10,0-?) : +Number of high priority interrupt queues (0,0-15): 15 +Meter (NO,YES) : +KASER (NO,YES) : +MPXSER (YES,NO) : +PSISER (YES,NO) : +IPCF (YES,NO) : +ENQ/DEQ (YES,NO) : +Disk sets (ALL) : +Configure non-autoconfigured hardware (NO,YES) : +Number of KMC/DUP Lines (0,0-2) : +Number of PTYs (20,1-476) : + +Network software (YES,NO) : n + +Decimal "symbol,value" + +Octal "symbol,value" + +SIXBIT "symbol,value" + +Type "device-mnemonic,PI-channel" for special devices + +Type "device-mnemonic,PI-channel,no.-of-devices" + +Type "device-mnemonic,PI-channel,highest-ac-to-save" + +Type "ersatz-device,P,Pn,search-list-type" +BCL,5,24,SYS + +Type "command-name,dispatch,flags,unique-bits,PRVTAB-name" + +Terminal class : + +Additional terminals for classes: + +Class to extend : + +System default terminal type (TTY) : +File DSK:SYSCNF.MAC Closed + +Which GEN (SYS,F) : f +Output(DSK:F.MAC): +Feature set (KL10,KS10) : ks10 +Standard settings (YES,NO) : +File DSK:F.MAC Closed + +Which GEN (SYS,F) : ^Z + +EXIT + +.compile/compile f,s +MACRO: F +MACRO: S + +EXIT + +.compile/compile devprm,dteprm,netprm,d36par +MACRO: DEVPRM +MACRO: DTEPRM +MACRO: NETPRM +MACRO: D36PAR + +EXIT + +.compile/compile syscnf+ +MACRO: COMMON +MACRO: COMDEV +MACRO: COMMOD + +EXIT + +.r link + +*sys2/save/noinitial/hash:13k = /locals - +#common,comdev,commod,tops10[10,7,mon,ks]/search- +#/patch:200/counters/go +[LNKRLC Reloc. ctr. initial value current value limit value +.LOW. 0 64443 344000 +.HIGH. 344000 607662 720000 +.INIT. 740000 764722 771000 +.TWIC. 771000 772401 1000000 +Absolute code loaded] + +EXIT + +. + +This has now created a new system monitor in [10,7,mon] called SYS2.EXE which should now include the BCL: ersatz device. You will need to boot from this new system monitor and also create a PPN of [5,24] to be the directory for the BCL: ersatz device. + + + Back to Index + Why won’t the TOPS-10 system printer work? +Assuming you are using simh to run your TOPS-10 install on, you need to make sure the following lines are in your simh script or entered on the simh console before booting Tops-10. + + +att lp20 printer.out +set lp20 enable + +All printer output will now go to a file called printer.out in the directory to start simh in. + +Next you need to make sure that Tops-10 has started the printer and the spooler. To do this ensure that SYSTEM.CMD has the following: + +SET PRINTER 0 PAGE-LIMIT 2000 +START PRINTER 0 + +You may not need to do the next step as the Galaxy system should just start the spooler when it is need, but for completeness I did do this. In the SYSJOB.INI ensure the following lines are included: + +LPTSPL +LOG + +Finally you need to ensure there is a forms descriptor for the printer in LPFORM.INI + +.type sys:lpform.ini + +NORMAL/BANNER:1/HEADER:1/TRAILER:1/WIDTH:136/LINES:66/RAM:LP96 + +This should allow output to be queued for printing and then appear in the printer.out file on the host. + + + Back to Index + But my TOPS-10 printer still doesn’t work. What now? +I found that there may be an issue if you do not have a non-zero ANF-10 node number and networking enabled. In this case the system does not appear to correctly assign the device to printer 0. In this case, you need to manually assign the device as follows in OPR or amend the SYSTEM.CMD to include the /device switch on the start printer command. + +OPR>shutdown printer 0 +OPR> +13:30:18 Printer 0 -- Shutdown -- +OPR>start printer 0/device:lpt0 +OPR> +13:30:41 Printer 0 -- Startup Scheduled -- +OPR> + +If you then send something to the printer it should just work. The more comprehensive fix to this is to setup ANF-10 and give yourself a nod number greater than 0. The printer device identifier will then become LPTn00 where n is the ANF-10 node number, and this is supposed to fix the automatic start but I have not tested that. The simplest solution is just to put START PRINTER 0/DEVICE:LPT0 in the SYSTEM.CMD diff --git a/pdp10/docs/readme.md b/pdp10/docs/readme.md new file mode 100644 index 0000000..455af2c --- /dev/null +++ b/pdp10/docs/readme.md @@ -0,0 +1,95 @@ +20240819 had an awesome chat with merlyn yesterday and have many things to begin remembering. will just focus on decwar here. my starting point - 'new' raspi5 prepped and ready to integrate into pidp-10 front panel. pidp-10 software is installed and running great for months now. first played with its - emacs, lisp, spacewar, adventure, etc. then switched to tops-10 - sos, macro, fortran. + +yesterday merlyn shared the disk image he's built up. it has a working decwar, old fortran iv needed for that, tops-10 7.03 monitor, etc. here's a minimal simh script which roughly speaking could boot it + +``` +set cons telnet=1025 +at rpa0 dskb.dsk +at rpa1 dskc.dsk +at rpa2 dskd.dsk +boot rpa +``` + +was curious how the pdp10-kl binary in pidp-10 package would react - the package binaries were built by richard cornwell? here's what that looked like + +noah@raspberrypi:/opt/pidp10/bin $ ./pdp10-kl dsk.txt +%SIM-INFO: Created blink_thread +warning: failed to set RT priority +%SIM-INFO: PiDP-10 FP on + +KL-10 simulator Open SIMH V4.1-0 Current +/opt/pidp10/bin/dsk.txt-1> set cons telnet=1025 +%SIM-INFO: Listening on port 1025 +/opt/pidp10/bin/dsk.txt-5> boot rpa + %SIM-INFO: Waiting for console Telnet connection +%SIM-INFO: Running +Killed + +it didn't crash and burn immediately - but didn't really boot either. + +next step seems to be to build a simh pdp10 binary matching what merlyn uses!:) + +wootwoot! quick update - plain vanilla simh pdp10 binary built and booting from merlyn's disk image first try:) + +``` +set cons telnet=1025 +at rp0 dskb.dsk +at rp1 dskc.dsk +at rp2 dskd.dsk +boot rp +``` + +VNW 12:24:23 CTY system 4097 +Connected to Node (0) Line # 12 +Welcome to the decSystem-10 Running Tops10 v7.03 +...snip... +Do you want black holes? (no) + +Currently there are 0 Federation ships and 0 Empire ships. +Which side do you wish to join? (Federation or Empire) fed + +You will join the forces of the Federation. + +The following vessels are available for you to use. + +Excalibur +Farragut +Intrepid +Lexington +Nimitz +Savannah +Trenton +Vulcan +Yorktown + +Which vessel do you wish to command? ex + +Command: scan + +``` + 33 35 37 39 41 43 45 47 49 51 53 +23 . . . . . . . . . . . . . . . . . . . . . 23 +22 . . . . . . * . . . . . . . . . . . . . . 22 +21 . . . . . . . . . . . . . . . . . . . . . 21 +20 . . . . * . . * . . . . . . . . . . . . . 20 +19 . . . . . . . . . . . . . . . . . . . . . 19 +18 . . . . . . . . . . . . . . . . . . . . . 18 +17 . . . . . . . . .[] . . . . . . . . . . . 17 +16 . . . . . . . . . . . . . . . . . . . . . 16 +15 . . . . . . . . . . . . . . . . . . . . . 15 +14 . . . . . . . . . . . . . . . . . . . . . 14 +13 . . . . * . . . . . E . . . . . . . . . . 13 +12 * . . . . . . . . . . . . . . . . . . . . 12 +11 . . . . . . . . . . . . . . . * . . . . . 11 +10 . . . . . . . . . . . . . . . . . . . . . 10 + 9 . . . . . . . . . . . . . . . . . . . . . 9 + 8 . . . . . . * . . . . . . . . . . . . . . 8 + 7 . . . . . . . . . . . . . . . . . . * . . 7 + 6 . . . . . . . . . . . * . . . . . . . . . 6 + 5 . . . . . . . . . . * . . . . . . . . . * 5 + 4 @ * . . . . * . . . . . . . * . . * . . . 4 + 3 . . . . . . * * . . . . . . . . . . . . . 3 + 33 35 37 39 41 43 45 47 49 51 53 +``` + +first time have seen that in forty years!:0 diff --git a/pdp10/docs/sec1-boot-disks.md b/pdp10/docs/sec1-boot-disks.md new file mode 100644 index 0000000..d42ee0c --- /dev/null +++ b/pdp10/docs/sec1-boot-disks.md @@ -0,0 +1,57 @@ +there are three disk image binary files and the objective is to boot into the tops-10 they contain. the following are simh commands to save in a text file beside the three binary files, for example boot.simh + + set cons telnet=1025 + at rp0 dskb.dsk + at rp1 dskc.dsk + at rp2 dskd.dsk + boot rp + +we also want to use simh to build a pdp10 binary executable beside the four files above. what worked on a raspi5 was to clone the simh repo + + noah@raspberrypi:~ $ git clone https://github.com/open-simh/simh.git + Cloning into 'simh'... + remote: Enumerating objects: 36708, done. + remote: Counting objects: 100% (8679/8679), done. + remote: Compressing objects: 100% (590/590), done. + remote: Total 36708 (delta 8252), reused 8122 (delta 8088), pack-reused 28029 (from 1) + Receiving objects: 100% (36708/36708), 70.94 MiB | 3.83 MiB/s, done. + Resolving deltas: 100% (28747/28747), done. + +go into the repo and make pdp10 + + noah@raspberrypi:~ $ cd simh/ + noah@raspberrypi:~/simh $ make pdp10 + +then go into the build folder, have all five files there, and run the new pdp10 binary + + noah@raspberrypi:~/simh $ cd BIN/ + noah@raspberrypi:~/simh/BIN $ ls + buildtools dskb.dsk dskc.dsk dskd.dsk boot.simh pdp10 + noah@raspberrypi:~/simh/BIN $ ./pdp10 boot.simh + PDP-10 simulator Open SIMH V4.1-0 Current git commit id: 8ed26d30 + /home/noah/simh/BIN/dsk.txt-1> set cons telnet=1025 + %SIM-INFO: Listening on port 1025 + /home/noah/simh/BIN/dsk.txt-5> boot rp + %SIM-INFO: Waiting for console Telnet connection + %SIM-INFO: Running + +when sim-info says 'waiting for console telnet connection', go into another window and telnet in + + noah@raspberrypi:~ $ telnet localhost 1025 + Trying ::1... + Connected to localhost. + Escape character is '^]'. + Connected to the PDP-10 simulator CON-TELNET device + BOOT V3(47) + BOOT> + +from here on, things have 'gone internal' within tops-10 and the topics become tops-10 specific. + +# later / follow-on notes + +first got a copy of these disk images from merlyn. he's done awesome work on them, getting fortran and then decwar working. thank you merlyn! + +as part of learning to use them, am gradually learning more about their heritage. + +first steps down the rabbit hole was looking through the [joerg hoppe](https://retrocmp.com/impressum) [retrocmp.com website](https://retrocmp.com/), especially the section about [blinkenbone](https://retrocmp.com/projects/blinkenbone/simulated-panels). there, it was first dawning that the disk images could have been built on top of some from [steubentech](https://steubentech.com/~talon/pdp10/). screenshots of booting the steubentech disk images looked familiar! + diff --git a/pdp10/docs/sec2-kermit.md b/pdp10/docs/sec2-kermit.md new file mode 100644 index 0000000..e074132 --- /dev/null +++ b/pdp10/docs/sec2-kermit.md @@ -0,0 +1,170 @@ +# remember + +on raspi side. + + set transfer mode manual + set file type binary + +on tops10 side. + + set file byte-size 36-bit + +# intro + +objective here is syncing .for and .mac files between 'simh decwar' and 'other machines'. lots of the below is a walkthrough of notes tracing back via drforbin to the ancestral 'steubentech disk images'. here's a copy of the [kermit specific notes](./misc/kermit.txt). + +seems there was good discussion of all this back in early 2010s - roughly 2013? seeing several simh scripts similar to the following. have this one saved in boot2.simh - it's second experiment, and is targeting kermit. note, am starting console on 1026 so it doesn't clash with simh pidp-10 ka-10 for front panel. + + set cons telnet=1026 + set cpu tops10 + set dz 8b + set tim y2k + set dz lines=32 + att -am dz 2010 speed=*32,buffer=1024k + att rp0 dskb.dsk + att rp1 dskc.dsk + att rp2 dskd.dsk + att lp20 printer.out + set cpu idle + ;set throttle 2M + boot rp + +seems the important thing here is the 'att -am dz 2010'. this is a multi serial adapter dz10 listening over telnet to port 2010. this is where we want to use kermit. we've booted simh with this script and telnetted in, aiming to start kermit server on simh decwar and connect to it via port 2010 from a kermit client. + + noah@raspberrypi:~ $ telnet localhost 1026 + Trying ::1... + Connected to localhost. + Escape character is '^]'. + Connected to the PDP-10 simulator CON-TELNET device + BOOT V3(47) + BOOT> + [Loading from DSKB:SYSTEM.EXE[1,4]] + VNW 10-14-99 + Why reload: + +can wait and default answers will be given. or answer. some useful ones are 'why reload' = 'sched' and 'startup option' = 'quick' + + Welcome to the decSystem-10 Running Tops10 v7.03 + +does auto login to [1,2] opser. 'tty stomper' starts, get out of it with ctrl-c. can logout of opser with 'kjob' or 'k/f' then login as another user. + +we've got a '.' prompt from the monitor. + +# onboard the raspi + +meanwhile, onboard the raspi. first get [latest kermit](https://www.kermitproject.org/ckdaily.html). here we see it as x.zip. make, run, and connect. + + noah@raspberrypi:~/kermit $ mv ~/Downloads/x.zip . + noah@raspberrypi:~/kermit $ unzip x.zip + noah@raspberrypi:~/kermit $ make linux + noah@raspberrypi:~/kermit $ ./wermit + C-Kermit 10.0 Beta.11, 2024/08/08, for Linux (64-bit) + Copyright (C) 1985, 2024, + Trustees of Columbia University in the City of New York. + Open Source 3-clause BSD license since 2011. + Type ? or HELP for help. + +here's the important part for get connection to pdp10 + + (~/kermit/) C-Kermit>set host localhost 2010 /raw-socket + DNS Lookup... Trying 127.0.0.1... Reverse DNS Lookup... (OK) + localhost connected on port 2010 + +then + + (~/kermit/) C-Kermit>c + Connecting to host localhost:2010 + Escape character: Ctrl-\ (ASCII 28, FS): enabled + Type the escape character followed by C to get back, + or followed by ? to see other options. + +for escaping back to the raspi with ctrl-\c, be sure your keyboard is really sending backslash! had to switch keyboard config to exactly the right one by trial and error. + +we're ready from the raspi side! now prepare the tops10 side. we need to be able to login from the raspi side! turns out, do walk through first [using react to create default user template](https://www.quentin.org.uk/tops-10-faq/#qaef-176). doesn't take as long as it looks! then [create your account](https://www.quentin.org.uk/tops-10-faq/#qaef-177). did that here for [27,101] usr noah pwd noah and logged in from the raspi kermit side. + + .login noah + Job 3 VNW TTY0 + Password: + %LGNPCR A password change is required by the system administrator + New password: + Verification: + [LGNNOC No operator coverage] + [LGNPHC Password has been changed] + 10:20 31-Aug-24 Saturday + Welcome to the decSystem-10 Running Tops10 v7.03 + Have fun! + . + +create a little text file on tops10 side + + .sos test2.txt + Creating TEST2.TXT + 00100 hello world + 00200 $ + *e + [DSKB:TEST2.TXT] + .type test2.txt + 00100 hello world + +# onboard tops10 + +now can start kermit on tops10 side and send it over to raspi side. both 'r k10mit' and 'r kermit' seem to be same. + + .r k10mit + TOPS-10 KERMIT version 3(136) + Kermit-10>set file byte-size 36-bit + Kermit-10>send test2.txt + +can check it on raspi side + + noah@raspberrypi:~/kermit $ cat test2.txt + +on tops10 side go into 'server mode' + + Kermit-10> server + +escape back to raspi side with ctrl-\c. keyboard has to really be sending backslash! then can simply send files. especially, 'send *.*' from raspi decwar folder to copy them over to tops10 side. + +# switching back and forth + +on raspi side, we're in raspi kermit. enter 'c' to connect back to tops10. + +on tops10 side, hit crtl-\c to 'disconnect back to raspi' + +# fortran continuation line issue + +seems the beginning line preceding a continuation line needs to end with a space character. examples from hiseg.for and lowseg.for + + common /hiseg/ + + hfz, shpcon, shpdam, base, nbase, board, locpln, locr, + + common /lowseg/ + + lfz, ntok, tknlst, vallst, typlst, ptrlst, who, iwhat, + +if there's a space char right after '/' in the beginning line, they work. another example, from captur.for. need a space after Vloc, + + if (.not. ldis(shpcon(who,KVPOS), shpcon(who,KHPOS), Vloc, + + Hloc, 1)) goto 500 !adjacent to sector specified? + +if the three examples above are fixed with spaces at the end of their beginning lines, then captur.for compiles ok. + +ending space is stripped off by kermit, learned that for certain the hard way. if we could stop kermit from stripping off end spaces, it'd be huge. we've got 'properly fixed' files on raspi, just need to get them onto tops10 without 'unfixing'. + +got it! at last! + +on raspi side need to set kermit to transfer mode manual and then file type binary + + C-Kermit>set transfer mode manual + C-Kermit>set file type binary + C-Kermit>send LOWSEG.FOR + C-Kermit>send HISEG.FOR + C-Kermit>send CAPTUR.FOR + +on raspi side. + + set transfer mode manual + set file type binary + +on tops10 side. + + set file byte-size 36-bit diff --git a/pdp10/docs/sec3-prep-source-files.md b/pdp10/docs/sec3-prep-source-files.md new file mode 100644 index 0000000..37fbdfd --- /dev/null +++ b/pdp10/docs/sec3-prep-source-files.md @@ -0,0 +1,106 @@ +we want to create a subdirectory called decwar and then 'change directories' so its our working directory. then we want to use kermit to copy the source files from raspi side over to tops10 side. + +to create the subdirectory, use the credir command. at the start here, we're logged in our own user account [27,101], and we're in our own user directory [27,101] + + .dir + TEST2 TXT 1 <057> 31-Aug-24 DSKB: [27,101] + .r credir + Create directory: [,,decwar] + Created DSKB0:[27,101,DECWAR].SFD/PROTECTION:775 + Create directory: ^C + .dir + TEST2 TXT 1 <057> 31-Aug-24 DSKB: [27,101] + DECWAR SFD 1 <775> 3-Sep-24 + Total of 2 blocks in 2 files on DSKB: [27,101] + .dir[,,decwar] + %WLDDEM Directory is empty [,,decwar] + +now we change directories using the setsrc command. it's documented in the operating system commands manual. 'cp' is for 'create a new default directory path' + + .r setsrc + *cp [,,decwar] + *^C + .dir + %WLDDEM Directory is empty + +and to change back to main directory + + .r setsrc + *cp [,] + *^C + .dir + TEST2 TXT 1 <057> 31-Aug-24 DSKB: [27,101] + DECWAR SFD 1 <775> 3-Sep-24 + Total of 2 blocks in 2 files on DSKB: [27,101] + +get into our decwar folder and get kermit going there. put kermit into server mode. + + Kermit-10> server + +escape back to raspi side with ctrl-\c. keyboard has to really be sending backslash! then can simply send files. especially, 'send *.*' from raspi decwar folder to copy them over to tops10 side. + + .r setsrc + *cp [,,decwar] + *^C + .dir + %WLDDEM Directory is empty + .r kermit + TOPS-10 KERMIT version 3(136) + Kermit-10>set file byte-size 36-bit + Kermit-10>server + [Kermit Server running on the DEC Host. Please type your escape + sequence to return to your local machine. Shut down the server by + typing the Kermit BYE command on your local machine.] + ctrl-\c + (Back at raspberrypi) + ---------------------------------------------------- + (~/decwar/) C-Kermit>dir + -rw-r--r-- 2675 2024-08-21 06:07:34 ALT.COD + -rw-r--r-- 1639 2024-08-21 06:07:34 BASBLD.FOR + -rw-r--r-- 2254 2024-08-21 06:07:34 BASKIL.FOR + ...snip + (~/decwar/) C-Kermit>remote dir + Press the X or E key to cancel. + File name Size Creation date + words blocks and time + DSKB:[27,101,DECWAR] + CHANGE. 333 10 6-Sep-24 19:47:02 + (~/decwar/) C-Kermit>send *.* + ...snip long wait with kermit on its 'send files screen' doing stuff + (~/decwar/) C-Kermit>remote dir + Press the X or E key to cancel. + File name Size Creation date + words blocks and time + DSKB:[27,101,DECWAR] + CHANGE. 333 10 6-Sep-24 19:47:02 + ALT .COD 586 10 6-Sep-24 19:47:41 + BASBLD.FOR 337 10 6-Sep-24 19:48:22 + BASKIL.FOR 464 10 6-Sep-24 19:48:42 + ...snip + +kermit seems to have skipped our 'docs folder' with 'send *.*', which is perfect! we don't want it copied over to tops10 side in any case! fine with us. + +# permissions + +once we got rolling with attempts to compile, it looked like there were permissions issues. to just bypass those, set permissions on decwar folder to <000>, and even then, started doing everything as user opr [1,2]. + + .r setsrc + *cp [,] + *^C + .dir + TEST2 TXT 1 <057> 31-Aug-24 DSKB: [27,101] + DECWAR SFD 3 <775> 3-Sep-24 + CHANGE 3 <057> 6-Sep-24 + Total of 7 blocks in 3 files on DSKB: [27,101] + .protect decwar.sfd<000> + Files renamed: + DSKB:DECWAR.SFD + .dir + TEST2 TXT 1 <057> 31-Aug-24 DSKB: [27,101] + DECWAR SFD 3 <000> 3-Sep-24 + CHANGE 3 <057> 6-Sep-24 + Total of 7 blocks in 3 files on DSKB: [27,101] + .r setsrc + *cp [,,decwar] + *^C + .protect *.*<000> diff --git a/pdp10/docs/sec4-compiling-decwar.md b/pdp10/docs/sec4-compiling-decwar.md new file mode 100644 index 0000000..c3607d8 --- /dev/null +++ b/pdp10/docs/sec4-compiling-decwar.md @@ -0,0 +1,155 @@ +# starting point + +with kermit rolling and files prepped over from raspi side to tops10 side, time this weekend to start digging into merlyn's instructions from the file 'changes' in the repo. + + CAN1.CMD is linker control file for building executable. + DECCMP.CMD full compile control file. + +these two @com1, @com2 are splitting up and equiv to @deccmp. @can1 gets used for r link. + + .compile @com1 + .compile @com2 + .r link + *@can1 + .get decwar + .ssave + then create p,pn [1,27] and install DECWAR.EXE, DECWAR.GRP, DECWAR.HLP, DECWAR.NWS in that p,pn. then + .dir [1,27] + .r [1,27] decwar + +the one already there decwar in [1,27] is definitely working. and looks like there's also another older one already there in [5,30] + + .dir [5,30] + .r [5,30] decwar + +# experiments with macro compile + +here we're user opr [1,2] and getting first rel files. looking in cmp.cmd, tried lofchk, warmac, cishng, msg, setmsg. + +warmac, msg, setmsg seem to work. + + .comp warmac + MACRO: WARMAC + % .SGNAM will be obsolete; please use GETTAB .GTRFN instead. + % .SGPPN will be obsolete; please use GETTAB .GTRDI instead. + % .SGDEV will be obsolete; please use GETTAB .GTRDV instead. + EXIT + .comp msg + MACRO: msg + EXIT + .comp setmsgmsg + MACRO: setmsg + EXIT + .dir + WARMAC REL 109 <057> 7-Sep-24 + MSG REL 21 <057> 7-Sep-24 + SETMSG REL 3 <057> 7-Sep-24 + Total of 1541 blocks in 142 files on DSKB: [27,101,DECWAR] + +lofchk and cishng not, but actually they seem not to appear much elsewhere. bypassing these two for now, probly not needed! + + .compile lofchk + MACRO: lofchk + ?MCRCFU CANNOT FIND UNIVERSAL SYSMAC + EXIT + .comp cishng + MACRO: cishng + ?MCRCFU CANNOT FIND UNIVERSAL SYSMAC + EXIT + +# experiments with fortran compile + +some files seem to go + + .comp param + FORTRAN: PARAM + 00193 + %FTNNED No END statement in program + %FTNWRN MAIN. No fatal errors and 1 warning + .dir + PARAM REL 1 <057> 8-Sep-24 + Total of 1543 blocks in 145 files on DSKB: [27,101,DECWAR] + +some not + + .comp decwar + FORTRAN: DECWAR + ?FTNFWE Line:00239 Found STATEMENT END when expecting IDENTIFIER + 00240* + ?FTNNRC Line:00240 Statement not recognized + 00241* + hfz, shpcon, shpdam, base, nbase, board, locpln, locr, + 00242* + ...snip............ + ?Internal Compiler Error + ?Memory Protection Violation at location 453034 in Phase FORTB + ?while processing statement 00870 + . + +would guess that because param.for has no 'include' statements, it's simpler and working. other words, the 'include' statements are causing trouble! + +# learnings around fortran versions + + .r fortra + *^C + .version + FORTRA 6(1144) + + .r fortra + */h + FORTRA.HLP -- HELP file for FORTRAN-10 version 6 December 1981 + +tape files at https://pdp-10.trailing-edge.com/ +FORTRAN-10 V6.0 1981 3.52 Mbyte 385 +FORTRAN-10_V7wLink_Feb83 4.96 Mbyte 502 +Fortran-10 Version 11 5.54 Mbyte 432 + +https://github.com/PDP-10/its/issues/170#issuecomment-414909112 +philbudne commented on Aug 22, 2018 +F10/FORTRA (FORTRAN-10) was FORTRAN-IV (FORTRAN 66) until version 7, +which supported the FORTRAN-77 standard. I seem to recall finding +version 1 of F10 in ITS' DECSYS directory. I can't IMAGINE anyone +ever running v7 on ITS, and I wouldn't be shocked if it used TOP-10 +monitor calls not supported by DECUUO. + +current pic is that we're on dec fortran-10 v6 from 1981, which makes sense historically for decwar. this means a dec superset of fortran IV / f66. it meets the f66 ansi standard, and has dec extensions. we know for a fact that v5 did the same and already had the 'include' statement. highly likely that 'include' is one of the dec extensions to f66! here's a nutshell of current learnings for decwar context +dec fortran-10 v5, 1977, fortran iv / f66, plus dec extensions +dec fortran-10 v6, 1981, fortran iv / f66, plus dec extensions +dec fortran-10 v7, 1983, f77, ?plus dec extensions, !probly!? + +# does decwar.com matter for compiling? + +turns out, nope! this is a 'comments' file! com == comments. but understanding this did lead onwards to decwar.imp, where probably imp == important! decwar.com is additional comments, on top of decwar.imp and decwar.tap + +# decwar.imp has mucho learnings about 'building decwar from tape' + +this is clearly some important stuff. hence the '.imp' extension. and note it's first thing listed in decwar.tap file. in fact, decwar.imp and decwar.tap match up perfectly. + +one useful thing could be that [10,30,DECWAR] was an important folder / sfd at some point, probably for the build from tape described in decwar.imp, so p,pn 10,30 and sfd [10,30,decwar] were important back then, and could still be! in fact it's even possible that if we were 10,30 and in [10,30,decwar] then everything would magically work. this may be something to try asap. + +for our possible 'include' troubles, note especially + + Files INCLUDEd in DECWAR.FOR (extracted from WARMAC.MAC by TECO macros): + PARAM.FOR Parameters (constants). + HISEG.FOR High segment common block. + LOWSEG.FOR Low segment common block. + + Tools used to build game (.SAV files generated from TECO macros): + PARAM.SAV Build PARAM.FOR from WARMAC.MAC. + HISEG.SAV Build HISEG.FOR from WARMAC.MAC. + LOWSEG.SAV Build LOWSEG.FOR from WARMAC.MAC. + EXTERN.SAV Build EXTERN.FOR from MSG.MAC. + SETEXT.SAV Build SETEXT.FOR from SETMSG.MAC. + + TECO macros used to build game (require TECO 124): + PARAM.TEC Source for PARAM.SAV. + HISEG.TEC Source for HISEG.SAV. + LOWSEG.TEC Source for LOWSEG.SAV. + EXTERN.TEC Source for EXTERN.SAV. + SETEXT.TEC Source for SETEXT.SAV. + +hmmm, don't have teco 124, potential trouble? wasn't for merlyn! but potentially could be for a 'build from tape'? + + .teco param.tec + [2K Core] + *^C + .version + TECO 24A(235) + diff --git a/pdp10/docs/sec4a-build-files.md b/pdp10/docs/sec4a-build-files.md new file mode 100644 index 0000000..8dfad66 --- /dev/null +++ b/pdp10/docs/sec4a-build-files.md @@ -0,0 +1,240 @@ +here's some comments from merlyn + + The original place where decwar was placed was 5,30 which was the GAM: + ersatz device, CIS was using [1,27] was the multiplayer decwar directory. + Everyone would be handed off from their original hosts to that HOST and logged onto that directory. + The CIS source is Always referencing it. + +current pic is that the three files below could be direct from the utexas tape that got sent to compuserve. notice they don't mention the many 'newer / later / compuserve' fortran files. so... + +at utexas the build was done in [10,30,decwar] and then deployed to gam: which was a 'logical device name' assigned to [5,30]. + +at compuserve, the build was deployed to [1,27]. not clear yet where they did there build, hopefully doesn't really matter too much? + + +# 'important' file decwar.imp + + The following files are included on the DECWAR source distribution tape: + + DECWAR.IMP This file. + + Files to be installed on GAM: + DECWAR.EXE DECWAR game. Protected for EXECUTE access. + DECWAR.HLP Help for DECWAR. Source for on line help system. + Protected for READ access. + DECWAR.NWS News file (recent developments). Protected for READ access. + DECWAR.GRP Gripe file. Initially empty, added to by the DECWAR GRIPE + command. Must be protected to allow write access. + + Files from which the GAM: files are derived: + DECWAR.EXE: + HIGH.FOR Used to force common block into high segment. + LOW.FOR Used to force common block into low segment. + DECWAR.FOR FORTRAN source. + WARMAC.MAC MACRO source. + MSG.MAC Output text source (to force text into the high segment, + and to get rid of the annoying trailing blanks FORTRAN + generates for literals). + SETUP.FOR Once only code, deleted from core after initialization. + SETMSG.MAC Equivalent to MSG.MAC for SETUP text strings. + DECWAR.RNH Help file source. + DECNWS.RNO News file source. + + Files INCLUDEd in DECWAR.FOR (extracted from WARMAC.MAC by TECO macros): + PARAM.FOR Parameters (constants). + HISEG.FOR High segment common block. + LOWSEG.FOR Low segment common block. + + Other files INCLUDEd in DECWAR.FOR: + EXTERN.FOR External declarations for strings used in DECWAR (extracted + from MSG.MAC). + SETEXT.FOR Equivalent external declarations used by SETUP (extracted + from SETMSG.MAC). + LSTVAR.FOR Common block INCLUDEd by all LIST routines (LST???). + + Relocatable files needed to produce DECWAR.EXE: + HIGH.REL High segment common block. + LOW.REL Low segment common block. + DECWAR.REL From DECWAR.FOR source. + WARMAC.REL From WARMAC.MAC source. + MSG.REL From MSG.MAC source. + SETUP.REL From SETUP.FOR source. + SETMSG.REL From SETMSG.MAC source. + + Tools used to build game (.SAV files generated from TECO macros): + L.MIC Load REL files in proper sequence into right segments. + Note you can DO L/H for help on building the DECWAR core + image. + PARAM.SAV Build PARAM.FOR from WARMAC.MAC. + HISEG.SAV Build HISEG.FOR from WARMAC.MAC. + LOWSEG.SAV Build LOWSEG.FOR from WARMAC.MAC. + EXTERN.SAV Build EXTERN.FOR from MSG.MAC. + SETEXT.SAV Build SETEXT.FOR from SETMSG.MAC. + + TECO macros used to build game (require TECO 124): + PARAM.TEC Source for PARAM.SAV. + HISEG.TEC Source for HISEG.SAV. + LOWSEG.TEC Source for LOWSEG.SAV. + EXTERN.TEC Source for EXTERN.SAV. + SETEXT.TEC Source for SETEXT.SAV. + + Misc. utilities: + MAKHLP.MIC Build DECWAR.HLP file from DECWAR.RNH using RUNOFF. + MAKNWS.MIC Build DECWAR.NWS file from DECNWS.RNO using RUNOFF. + NDX.TEC Build DECWAR.NDX file to be used by PAGE.TEC. + PAGE.TEC Search DECWAR.NDX file for page number of desired + DECWAR.FOR subprogram. + +# 'listing' file decwar.tap + + dskc:[10,30,decwar,hlp]DECWAR.IMP + gam:DECWAR.EXE + gam:DECWAR.HLP + gam:DECWAR.NWS + gam:DECWAR.GRP + dskc:[10,30,decwar]HIGH.FOR + dskc:[10,30,decwar]LOW.FOR + dskc:[10,30,decwar]DECWAR.FOR + dskc:[10,30,decwar]WARMAC.MAC + dskc:[10,30,decwar]MSG.MAC + dskc:[10,30,decwar]SETUP.FOR + dskc:[10,30,decwar]SETMSG.MAC + dskc:[10,30,decwar,hlp]DECWAR.RNH + dskc:[10,30,decwar,hlp]DECNWS.RNO + dskc:[10,30,decwar]PARAM.FOR + dskc:[10,30,decwar]HISEG.FOR + dskc:[10,30,decwar]LOWSEG.FOR + dskc:[10,30,decwar]EXTERN.FOR + dskc:[10,30,decwar]SETEXT.FOR + dskc:[10,30,decwar]LSTVAR.FOR + dskc:[10,30,decwar]HIGH.REL + dskc:[10,30,decwar]LOW.REL + dskc:[10,30,decwar]DECWAR.REL + dskc:[10,30,decwar]WARMAC.REL + dskc:[10,30,decwar]MSG.REL + dskc:[10,30,decwar]SETUP.REL + dskc:[10,30,decwar]SETMSG.REL + dskc:[10,30,decwar]L.MIC + dskc:[10,30,decwar]PARAM.SAV + dskc:[10,30,decwar]HISEG.SAV + dskc:[10,30,decwar]LOWSEG.SAV + dskc:[10,30,decwar]EXTERN.SAV + dskc:[10,30,decwar]SETEXT.SAV + dskc:[10,30,decwar,tec]PARAM.TEC + dskc:[10,30,decwar,tec]HISEG.TEC + dskc:[10,30,decwar,tec]LOWSEG.TEC + dskc:[10,30,decwar,tec]EXTERN.TEC + dskc:[10,30,decwar,tec]SETEXT.TEC + dskc:[10,30,decwar,hlp]MAKHLP.MIC + dskc:[10,30,decwar,hlp]MAKNWS.MIC + dskc:[10,30,decwar,tec]NDX.TEC + dskc:[10,30,decwar,tec]PAGE.TEC + +# 'comments' file decwar.com + + LOCAL .REL [10,30,DECWAR] ;.REL file for LOCAL. + LOW .FOR [10,30,DECWAR] ;Dummy routine used by L.MIC linker to + ;force LOWSEG common block into the low + ;segment. + LOW .REL [10,30,DECWAR] ;.REL file for LOW. + MSG .REL [10,30,DECWAR] ;.REL file for MSG. + NIO .SFD [10,30,DECWAR] ;SFD containing various read/write multiple-acces + ;s routines. + WARMAC.REL [10,30,DECWAR] ;.REL file for WARMAC. + DECWAR.NDX [10,30,DECWAR] ;List of DECWAR.FOR routines and their + ;respective page numbers. (including + ;Entry point locations). Useful when + ;editing. + DECWAR.REL [10,30,DECWAR] ;.REL file for DECWAR. + LOWSEG.FOR [10,30,DECWAR] ;Low segment common block definition + ;file. 'Included' throughout DECWAR, + ;created from WARMAC source using TECO + ;macro LOWSEG.SAV + HISEG .FOR [10,30,DECWAR] ;High segment common block definition + ;file. 'Included' throughout DECWAR, + ;created from WARMAC source using TECO + ;macro HISEG.SAV + PARAM .SAV [10,30,DECWAR] ;TECO macro to create PARAM.FOR file + ;from WARMAC source. + HISEG .SAV [10,30,DECWAR] ;TECO macro to create HISEG.FOR file + ;from WARMAC source. + LOWSEG.SAV [10,30,DECWAR] ;TECO macro to create LOWSEG.FOR file + ;from WARMAC source. + EXTERN.SAV [10,30,DECWAR] ;TECO macro to create EXTERN.FOR file + ;from MSG source. + NDX .SAV [10,30,DECWAR] ;TECO macro to create DECWAR.NDX file + ;from DECWAR source. + EXTERN.FOR [10,30,DECWAR] ;External text string definition file. + ; 'Included' throughout DECWAR, created + ;from MSG source using TECO macro EXTERN.SAV + ;(EXTERN used to force text into high-segment). + SETUP .REL [10,30,DECWAR] ;.REL file for SETUP. + PAGE .SAV [10,30,DECWAR] ;TECO macro to return the appropriate + ;page number (from DECWAR.NDX) for a + ;given DECWAR Fortran routine. + MSC .SFD [10,30,DECWAR] ;SFD containing Misc. DECWAR related + ;files. + HIGH .FOR [10,30,DECWAR] ;Dummy routine used by L.MIC linker to + ;force HISEG common block into the high + ;segment. + HIGH .REL [10,30,DECWAR] ;.REL file for HIGH. + HLP .SFD [10,30,DECWAR] ;SFD containing all documents pertaining + ;to DECWAR (HELP, NEWS, plus various + ;letters). + TEC .SFD [10,30,DECWAR] ;SFD containing all the sources for the + ;many TECO 'tools' used in writing and + ;updating DECWAR. + 22 .SFD [10,30,DECWAR] ;SFD containing copies of Version 2.2 + ;sources. + LOCAL .FOR [10,30,DECWAR] ;Dummy subroutine for adding to L.MIC + ;linker when debugging a subroutine declaring + ;the 'LOCAL' common block (eg., to debug + ;a routine w/o recompiling the entire + ;DECWAR source, insert the desired routine + ;before DECWAR in the link sequence, + ;and add LOCAL before that if /LOCAL/ + ;is declared). + SETMSG.REL [10,30,DECWAR] ;.REL file for SETMSG. + SETEXT.SAV [10,30,DECWAR] ;TECO macro to create SETEXT.FOR from + ;SETMSG source file. + SETEXT.FOR [10,30,DECWAR] ;Equivalent file to EXTERN.FOR file for + ;SETUP code (will be loaded into the + ;Low-segment during SETUP, and thrown + ;away after entering the game proper). + LSTVAR.FOR [10,30,DECWAR] ;Definition file for 'LSTVAR' common + ;block (actually, defines the use of + ;/LOCAL/ within the various LIST routines). + DECWAR.TAP [10,30,DECWAR] ;Describes (lists) files to be put on + ;DECWAR **source** distribution tape. + ; This is NOT for making a 'normal' transport + ;tape, which should include only the + ;executable file, plus documentation. + PARAM .FOR [10,30,DECWAR] ;Definition file for PARAM parameter + ;section 'Included' throughout DECWAR. + ; Created using PARAM.SAV TECO macro + ;from WARMAC source. + L .MIC [10,30,DECWAR] ;Sophisticated linker for creating new + ;executable file with various attributes + ;(Debug, DDT, Symbol table, Map, etc.) + DECWAR.COM [10,30,DECWAR] ;Comment file for [10,30,DECWAR] SFD. + SETMSG.MAC [10,30,DECWAR] ;Equivalent to MSG.MAC for SETUP. Will + ;be thrown away after entering main part + ;of game. + SETUP .FOR [10,30,DECWAR] ;Fortran source code for Startup of game, + ;Pre-game activity, reactivation checks + ;for returning players, etc. Is eliminated + ;after entering main part of game. + MSG .MAC [10,30,DECWAR] ;Macro source defining all text strings + ;used with DECWAR. Combined with EXTERN.FOR, + ;it allows all this text to be loaded + ;in the High-segment. + CONTEN.MIC [10,30,DECWAR] ;MICRO to (1) create a new contents for + ;a MACRO file; (2) recompile the resulting + ;new MACRO file; (3) generate the CREF + ;listing; and (4) print the CREF listing. + TO .DO [10,30,DECWAR] ;Somewhat informal list of things 'to + ;do', that have been done, that can't + ;be done although it would be nice, etc., + ;etc. + DECFIX.MAC [10,30,DECWAR] ;source to program to drop decwar off + ;the swapper diff --git a/pdp10/docs/sec4b-continuation-line-issue.md b/pdp10/docs/sec4b-continuation-line-issue.md new file mode 100644 index 0000000..1ba5b08 --- /dev/null +++ b/pdp10/docs/sec4b-continuation-line-issue.md @@ -0,0 +1,54 @@ +# remember + +on raspi side. + + set transfer mode manual + set file type binary + +on tops10 side. + + set file byte-size 36-bit + +# fortran continuation line issue + +seems the beginning line preceding a continuation line needs to end with a space character. examples from hiseg.for and lowseg.for + + common /hiseg/ + + hfz, shpcon, shpdam, base, nbase, board, locpln, locr, + + common /lowseg/ + + lfz, ntok, tknlst, vallst, typlst, ptrlst, who, iwhat, + +if there's a space char right after '/' in the beginning line, they work. another example from captur.for needs a space after 'Vloc,' + + if (.not. ldis(shpcon(who,KVPOS), shpcon(who,KHPOS), Vloc, + + Hloc, 1)) goto 500 !adjacent to sector specified? + +if the three examples above are fixed with spaces at the end of their beginning lines, then captur.for compiles ok. + +ending space is stripped off by kermit, learned that for certain the hard way. if we could stop kermit from stripping off end spaces, it'd be huge. we've got 'properly fixed' files on raspi, just need to get them onto tops10 without 'unfixing by stripping'. + +# kermit fix + +got it! at last! this works, major celebration. on raspi side need to set kermit to transfer mode manual and then file type binary + + C-Kermit>set transfer mode manual + C-Kermit>set file type binary + C-Kermit>send LOWSEG.FOR + C-Kermit>send HISEG.FOR + C-Kermit>send CAPTUR.FOR + +on raspi side. + + set transfer mode manual + set file type binary + +on tops10 side. + + set file byte-size 36-bit + +and confirmed that git is not stripping the end spaces. can fix in the git repo, and now can kermit them to tops10. + +# success + +fixed all continuation beginning lines with an ending space character in git. used kermit properly to move them from raspi to tops10. successful build! diff --git a/pdp10/docs/sec5-minimalist-walkthrough.md b/pdp10/docs/sec5-minimalist-walkthrough.md new file mode 100644 index 0000000..814631b --- /dev/null +++ b/pdp10/docs/sec5-minimalist-walkthrough.md @@ -0,0 +1,47 @@ +assume you've started simh pdp10 and it's listening on 2010 for connections. + +# on raspi side, start kermit + + ./kermit/wermit + C-Kermit>set host localhost 2010 /raw-socket + C-Kermit>c + +# on tops10 side, start kermit + +assume you've created a subfolder [,,decwar] in your home folder [,]. + + .r setsrc + *cp [,,decwar] + *^C + .r kermit + Kermit-10>set file byte-size 36-bit + Kermit-10>server + +ctrl-\c back over to raspi kermit + +# in raspi kermit + + C-Kermit>set transfer mode manual + C-Kermit>set file type binary + C-Kermit>send utexas/*.* + C-Kermit>send compuserve/*.* + C-Kermit>send scripts/COM1.CMD + C-Kermit>send scripts/COM2.CMD + C-Kermit>send scripts/CAN1.CMD + +can leave this connection in this state for further usage and get on tops10 via another connection, but if you like to use just this connection + + C-Kermit>c + Kermit-10>^c^c^c + . + +# on tops10 side + + .compile @com1 + .compile @com2 + .r link + *@can1 + .get decwar + .ssave + +if it's not already there, create p,pn [1,27] using react, then copy DECWAR.EXE, DECWAR.GRP, DECWAR.HLP, DECWAR.NWS to its home folder to 'deploy/install' it. [1,27] is where decwar was deployed for compuserve. for utexas it was logical device name 'gam:', assigned to [5,30]. diff --git a/pdp10/license.md b/pdp10/license.md new file mode 100644 index 0000000..6d9f59c --- /dev/null +++ b/pdp10/license.md @@ -0,0 +1,675 @@ + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/pdp10/readme.md b/pdp10/readme.md new file mode 100644 index 0000000..2fdf4b9 --- /dev/null +++ b/pdp10/readme.md @@ -0,0 +1,41 @@ +# decwar + +historic fortran, macro, and teco code running on simh pdp10 with standard tops10. here's [game instructions](decwar.md), the excellent [decwar wikipedia page](https://en.wikipedia.org/wiki/Decwar), the [utexas center for american history](https://briscoecenter.org/) [catalog info](https://repositories.lib.utexas.edu/items/7e2ccf50-e814-4bce-91d2-a7f6440eabe4), and a 1982 letter from utexas to compuserve, before utexas sent the primordial decwar tape. + +_I have received your request for sources to the DECWAR program. We will be pleased to send you the sources, but first we must ask you to sign and return the enclosed license agreement. DECWAR was developed at the University of Texas at Austin, and it is being maintained. Hence our interest in using the agreement to record and control who gets the source to it._ + +_DECWAR is a sophisticated real-time space battle game designed to be played by from 1 to 18 people. It was written at the University of Texas at Austin, primarily by Jeff Potter and Bob Hysick. The game was originally based on a very limited, single job, single terminal, two player Star Trek type game known as WAR. This game came from the CDC-6600/6400 system at the University of Texas at Austin, author unknown. Robert Schneider re-wrote the original source on the CDC and started the transfer to the DEC-10. In the transfer process, the game was renamed to DECWAR, largely re-designed, and almost entirely re-written, so that the current version bears little resemblance to the original. Almost all the commands were added once the game was on the DEC-10, as well as the basic concept of separate jobs controlling each ship, and most of the other features that make the game challenging, exciting, and enjoyable. The first version was installed on the DEC-10 in August 1978. After several revisions, a greatly enhanced and improved game, version 2.0, was installed in July 1979._ + +# folder structure + +- utexas folder reflects the contents of utexas/decwar.imp and the primordial tape sent from utexas to compuserve + - utexas/tec are teco files for extracting fortran from macro + - utexas/hlp are files used as part of building the game's help system +- compuserve folder is fortran and macro files likely associated with compuserve + - compuserve/docs folder is files associated with compuserve documenting the primordial tape's arrival from utexas. also some related 'operational' files. decwar.map has logging from a compuserve ki10 dated 19820519. +- deploy folder is files expected for 'deploying' the built game. these are generated, for example see utexas/hlp +- scripts folder is build automations +- docs are notes from 2024 forward + - docs/misc are miscellaneous tops-10 related things + +# docs + +- [section 1, boot disk](docs/sec1-boot-disks.md) +- [section 2, kermit](docs/sec2-kermit.md) +- [section 3, prep source files](docs/sec3-prep-source-files.md) +- [section 4, building decwar](docs/sec4-compiling-decwar.md) +- [section 4a, build files](docs/sec4a-build-files.md) +- [section 4b, continuation line issue](docs/sec4b-continuation-line-issue.md) +- [section 5, minimalist walkthrough](docs/sec5-minimalist-walkthrough.md) +- [appendix 0, foundations](docs/app0-foundations.md) +- [appendix 1, tops-10 versions](docs/app1-tops-10-versions.md) +- [appendix 2, tap files](docs/app2-tap-files.md) +- [appendix 3, sos](docs/app3-sos.md) + +# special thanks to merlyn + +here's the original note from merlyn concerning the work he did to get things working on simh pdp10. + +_all changes commented and additions noted by DrForbin AKA Merlyn Cousins. search for (drforbin), all things yet to be fixed, search (tofix)_ + +here's [more info](docs/app0-foundations.md) from merlyn around that. diff --git a/pdp10/scripts/ALT.COD b/pdp10/scripts/ALT.COD new file mode 100644 index 0000000..b4629bf --- /dev/null +++ b/pdp10/scripts/ALT.COD @@ -0,0 +1,252 @@ +[asciz / +C <> +1 C. +/] + +BA.CMD: [asciz / +C +1 <>. +1 *. +1 . +/] + +CA.CMD: [asciz / +C +1 *. +/] + +CO.DET: [asciz / +* +1 <> +1 +1 +1 +2 +3 . +/] + +DA.CMD: [asciz / +C +1 . +1 . +/] + +%D.CMD: [asciz / +C <*DEBUG>. +/] + +DE.CMD: [asciz / +C +1 +2 . +2 . +/] + +DO.CMD: [asciz / +C +1 . +1 C. +/] + +EN.CMD: [asciz / +C +1 +2 . +/] + +GR.CMD: [asciz / +C . +/] + +HE.CMD: [asciz / +C +1 <>. +1 <*>. +1 . +1 . +/] + +IM.CMD: [asciz / +C +1 *. +/] + +%K.CMD: [asciz / +C <*KILL>. +/] + +MO.CMD: [asciz / +C +1 *. +/] + +%P.CMD: [asciz / +C <*PASSWORD> +1 . +/] + +PH.CMD: [asciz / +C +1 *. +1 +2 *. +/] + +PL.CMD: [asciz / +C +1 +1 +1 +1 +1 +1 +1 +1 * +2 . +2 +3 1 +/] + +PO.CMD: [asciz / +C +1 . +1 . +1 . +1 +2 . +2 . +1 +1 +2 . +2 . +1 . +/] + +RA.CMD: [asciz / +C +1 . +1 . +/] + +RE.CMD: [asciz / +C +1 . +1 . +/] + +SC.CMD: [asciz / +C +1 . +1 <> +1 +1 +1 +1 +2 +2 +3 +4 . +4 . +1 +2 +3 +4 . +4 . +/] + +SE.CMD: [asciz / +C +1 +1 +1 +1 +1 +1 +1 +2 <> +2 1 +3 <;> +4 +/] + +SH.CMD: [asciz / +C +1 . +1 . +1 +2 . +/] + +SR.CMD: [asciz / +C +1 . +1 <> +1 +1 +1 +1 +2 +2 +3 +4 . +4 . +1 +2 +3 +4 . +4 . +/] + +ST.CMD: [asciz / +C +1 . +2 +2 +2 +2 +2 +2 +2 +3 . +3 2 +/] + +TA.CMD: [asciz / +C +1 . +1 . +/] + +TE.CMD: [asciz / +C . +/] + +TO.CMD: [asciz / +C +1 <> +1 +1 +1 +2 +3 +4 . +4 +5 . +5 . +/] + +TR.CMD: [asciz / +C +1 . +1 . +1 . +/] + +US.CMD: [asciz / +C . +/] + +%W.CMD: [asciz / +C <*WEB> +1 . +/] diff --git a/pdp10/scripts/C.ICD b/pdp10/scripts/C.ICD new file mode 100644 index 0000000..d7087c7 --- /dev/null +++ b/pdp10/scripts/C.ICD @@ -0,0 +1,8 @@ +limit sru 0 +compile/c lofchk +compile/c setmmn +compile/c warmac,warver,cishng,msg,setmsg,(nowarn)/f10 setup,@decwar,low,high +r link +@l +r link +@ldeb diff --git a/pdp10/scripts/CAN.MIC b/pdp10/scripts/CAN.MIC new file mode 100644 index 0000000..3d943b1 --- /dev/null +++ b/pdp10/scripts/CAN.MIC @@ -0,0 +1,18 @@ +.r link +*/debug +*low/seg:low +*high/seg:high +*/seg:def +*decwar,blkdat,basbld,baskil,baspha,build,captur,check,chkpnt,clrbuf +*damage,dist,dock,dship,endgam,energy,free,getcmd,jump,kqsrch,list +*locate,lstscn,lstflg,lstupd,lstout,lstsum,lstobj,move,nova,outhit,outmsg +*paswrd,phacon,place,plnatk,plnrmv,points,pridis,prloc,prompt,radio,repair +*romdrv,romstr,romtor,scan,set,shield,snova,status,tell,time,tordam,torp,tractr +*trap,type,users +*msg +*warmac,warver +*sys:forlib/sea/seg:def +*setup/seg:low +*setmsg +*sys:forlib/sea/seg:low +*/g diff --git a/pdp10/scripts/CAN1.CMD b/pdp10/scripts/CAN1.CMD new file mode 100644 index 0000000..1688665 --- /dev/null +++ b/pdp10/scripts/CAN1.CMD @@ -0,0 +1,17 @@ +decwar/save +low/seg:low +high/seg:high +/seg:def +decwar,blkdat,basbld,baskil,baspha,build,captur,check,chkpnt,clrbuf +damage,dist,dock,dship,endgam,energy,free,getcmd,jump,kqsrch,list +locate,lstscn,lstflg,lstupd,lstout,lstsum,lstobj,move,nova,outhit,outmsg +paswrd,phacon,place,plnatk,plnrmv,points,pridis,prloc,prompt,radio,repair +romdrv,romstr,romtor,scan,set,shield,snova,status,tell,time,tordam,torp,tractr +trap,type,users +msg +warmac,warver +sys:forlib/sea/seg:def +setup/seg:low +setmsg +sys:forlib/sea/seg:low +/g diff --git a/pdp10/scripts/CCOM.ICD b/pdp10/scripts/CCOM.ICD new file mode 100644 index 0000000..01e42a2 --- /dev/null +++ b/pdp10/scripts/CCOM.ICD @@ -0,0 +1,20 @@ +limit sru 0 +compile/c/x lofchk,warmac,cishng,setmmn +compile/c/s msg,setmsg +compile/c/s/print (nowarn)/f10 setup,@decwar,low,high +r glob +low,high,decwar,blkdat,basbld,baskil,baspha,build,captur,check,chkpnt,clrbuf +damage,dist,dock,dship,endgam,energy,free,getcmd,jump,kqsrch,list +locate,lstscn,lstflg,lstupd,lstout,lstsum,lstobj,move,nova,outhit,outmsg +paswrd,phacon,place,plnatk,plnrmv,points,pridis,prloc,prompt,radio,repair +romdrv,romstr,romtor,scan,set,shield,snova,status,tell,time,tordam,torp,tractr +trap,type,users +warmac,cishng,lofchk,setup,setmsg,sys:forlib/l +decwar.glb=^$ +^C +$r link +@l +r link +@ldeb +^C +$printnh decwar.map,decwar.glb diff --git a/pdp10/scripts/CMP.CMD b/pdp10/scripts/CMP.CMD new file mode 100644 index 0000000..9e42819 --- /dev/null +++ b/pdp10/scripts/CMP.CMD @@ -0,0 +1,6 @@ +compile lofchk +compile warmac,cishng,msg,setmsg,(nowarn)/f10 setup,@decwar,low,high +r link +@l +r link +@ldeb diff --git a/pdp10/scripts/COM1.CMD b/pdp10/scripts/COM1.CMD new file mode 100644 index 0000000..d4285b3 --- /dev/null +++ b/pdp10/scripts/COM1.CMD @@ -0,0 +1,4 @@ +decwar,blkdat,basbld,baskil,baspha,build,captur,check,chkpnt,clrbuf +damage,dist,dock,dship,endgam,energy,free,getcmd,jump,kqsrch,list +locate,lstscn,lstflg,lstupd,lstout,lstsum,lstobj,move,nova,outhit,outmsg +paswrd diff --git a/pdp10/scripts/COM2.CMD b/pdp10/scripts/COM2.CMD new file mode 100644 index 0000000..0590b76 --- /dev/null +++ b/pdp10/scripts/COM2.CMD @@ -0,0 +1,3 @@ +phacon,place,plnrmv,points,pridis,prloc,prompt,radio,repair +romdrv,romstr,romtor,scan,set,shield,snova,status,tell,time,tordam,torp,tractr +trap,type,users,low,high,msg,warmac,warver,setup,setmsg,plnatk diff --git a/pdp10/scripts/CONTEN.MIC b/pdp10/scripts/CONTEN.MIC new file mode 100644 index 0000000..4c19142 --- /dev/null +++ b/pdp10/scripts/CONTEN.MIC @@ -0,0 +1,11 @@ +.if ($a # "") .goto OK +!@CONTEN file +!to build a table of contents for a MACRO program +.mic exit +OK:: .revive +.ru conten[10,30 +*'a +*'a +*Y +*eb'a.MAC^[ +*a ^E"f a'' hk gc ex^[^[ diff --git a/pdp10/scripts/CONTEN.TEC b/pdp10/scripts/CONTEN.TEC new file mode 100644 index 0000000..9ae68a2 --- /dev/null +++ b/pdp10/scripts/CONTEN.TEC @@ -0,0 +1,52 @@ +!TABLE OF CONTENTS GENERATOR %2:! +[1[2[3[L[S[M[T[P[N[F "?" FOR HELP!ST!HKI:ER +FILE:  .U3 !NXCHR! UT QT-^O10"E .-Q3"N -D' ONXCHR' QT-63"E +TYPE THE FILESPEC OF THE (MACRO) PROGRAM FOR WHICH YOU WANT THE TABLE +OF CONTENTS. DEFAULT EXTN IS .MAC. END WITH .OST +' QT-^O177"E.-1,.T:-DONXCHR'QT-^O25"E^UOST' +QT-^O15"NQTIONXCHR'IJ:S."FZ-1JI.MAC' +HXTMT"FNOT FOUND.OST' +!ST2!HKI;Table of Contents for NAME:  +.U3 !NXC! UT QT-^O10"E .-Q3"N -D' ONXC' QT-63"E +TYPE THE NAME TO BE INCLUDED IN THE "TABLE OF CONTENTS FOR " HEAD- +ING, WHICH IS INCLUDED IN THE TABLE (PROBABLY THE PROGRAM NAME). +END WITH . +OST2'QT-^O177"E.-1,.T:-DONXC'QT-^O25"E^U +OST2' +QT-^O15"NQTIONXC' .U1 (66-.)/2U2 BJ C Q2 Q1+Q2J I +; +; +; Section Page +; +!FIRST!-1UNFIRST? UT QT-^^Z"G QT-^o40UT' +QT-^O15"ENUT'QT-N"NQT-Y"N +TYPE "Y" IF YOU WANT TO INCLUDE THE FIRST SUBTTL IN THE TABLE, "N" IF +NOT (E.G. IF IT'S THE AUTHOR'S NAME). NO . +OFIRST'%N' +[WAIT] +1UPHXCY!RESTART!"EA"EORESTART'' +!NEWPG!0UF:SSUBTTL"FONXTPG'QN"L%NONEWPG' +!AGAIN!C1A-^O15"N1A-^O12"N1A-^O11"N1A-^O40"N !NOW COPY THE LINE! +0,.KL.,ZKJ:S -- "S!DS!1A-^O40"EDODS'5R!DS2!1A-^O40"EDRODS2'5C +QM"G HXF XL4R.,ZKI +ZUT GS Z-(2*QT)"E QTJI:B,QT\IS +! make sure string is not too long!(Z-.-36)"G(z-.-36)D' + ZJI +QTJ.,ZXT MT"S OSAME'' +HKGFJ:S -- "FOOPS...'' 0UM XL4RKI +-XSHKI; 0UTQN-8"G%TQN-98"G%TQN-998"G%TQN-9998"G%T'''' +4-QT%N\I. GS JGCHXC !SAME! HKI; +0UTQN-9"G%TQN-99"G%TQN-999"G%TQN-9999"G%T''''9-QTQN\I.%M\ +0UTQM-9"G%TQM-99"G%TQM-999"G%T'''3-QTOCONT '0UM +XLHKI;0UTQN-8"G%TQN-98"G%TQN-998"G%TQN-9998"G%T'''' +!T ==> #DIGITS-1! 4-QT%N\I. !CONT!GL-2DJ:S "SRK'ZJ +Z-60"G60J.,ZK'I 62-Z!NOW INSERT PAGE#! +0UTQP-9"G%TQP-99"G%TQP-999"G%T'''3-QTQP\I + !NOW CONCATENATE TO TEXT ALREADY IN C! +1UFJGCHXC'' +!AT THIS POINT, WE EITHER PROCESSED LINE, OR FOUND TAB OR SPACE ABOVE! +QF"EOAGAIN'''!OK, NOW WE CAN PROCESS NEXT LINE! +!NXTPG!"EY!GETFF!"EA"EOGETFF''%P +!NOW WE CAN PROCESS THIS PAGE.! ONEWPG' +!AT THIS POINT, WE ARE DONE.!1et[CONTENTS ARE IN Q-REG C] +0etHKEF]F]N]P]T]M]S]2]1]L diff --git a/pdp10/scripts/CUST.CMD b/pdp10/scripts/CUST.CMD new file mode 100644 index 0000000..709f2e5 --- /dev/null +++ b/pdp10/scripts/CUST.CMD @@ -0,0 +1,24 @@ +CISREV.DAT/SKIP:1 +B.AN +Y +DIF:CUST.DIF +NLT +KB +SX +SY +HX +KT +IA:X,1.5 +IA:Y,1.5 +LOC:D,2.25,1.5,7,4 + +2/BLU +\TR\CompuServe\CR\ Information Service +VALID CUSTOMERS +FISCAL '82 +CUSTOMERS +2 +CUSTOMERS/BLU +0,30000,5000 +1 +1 diff --git a/pdp10/scripts/CXRF.ICD b/pdp10/scripts/CXRF.ICD new file mode 100644 index 0000000..8c71f00 --- /dev/null +++ b/pdp10/scripts/CXRF.ICD @@ -0,0 +1,18 @@ +limit sru 0 +compile/x/c lofchk,warmac,cishng +compile/s/c msg,setmsg +compile/s/c (nowarn)/f10 setup,@decwar,low,high +r link +@l +r link +@ldeb +^C +$cref dsk:= +printnh *.lst +;--printnh /r *.lst +;--Bill Louden +;--Building Four +;--First Floor +;--=============== +;--* D E C W A R * +;-- diff --git a/pdp10/scripts/D.CMD b/pdp10/scripts/D.CMD new file mode 100644 index 0000000..cdc6ec9 --- /dev/null +++ b/pdp10/scripts/D.CMD @@ -0,0 +1 @@ +dir /b/l/sor:cre:des *.rel diff --git a/pdp10/scripts/DECCMP.CMD b/pdp10/scripts/DECCMP.CMD new file mode 100644 index 0000000..c283c27 --- /dev/null +++ b/pdp10/scripts/DECCMP.CMD @@ -0,0 +1,6 @@ +decwar,blkdat,basbld,baskil,baspha,build,captur,check,chkpnt,clrbuf +damage,dist,dock,dship,endgam,energy,free,getcmd,jump,kqsrch,list +locate,lstscn,lstflg,lstupd,lstout,lstsum,lstobj,move,nova,outhit,outmsg +paswrd,phacon,place,plnatk,plnrmv,points,pridis,prloc,prompt,radio,repair +romdrv,romstr,romtor,scan,set,shield,snova,status,tell,time,tordam,torp,tractr +trap,type,users,low,high,msg,warmac,warver,setup,setmsg diff --git a/pdp10/scripts/DECWAR.CMD b/pdp10/scripts/DECWAR.CMD new file mode 100644 index 0000000..6f782b2 --- /dev/null +++ b/pdp10/scripts/DECWAR.CMD @@ -0,0 +1,6 @@ +decwar,blkdat,basbld,baskil,baspha,build,captur,check,chkpnt,clrbuf +damage,dist,dock,dship,endgam,energy,free,getcmd,jump,kqsrch,list +locate,lstscn,lstflg,lstupd,lstout,lstsum,lstobj,move,nova,outhit,outmsg +paswrd,phacon,place,plnatk,plnrmv,points,pridis,prloc,prompt,radio,repair +romdrv,romstr,romtor,scan,set,shield,snova,status,tell,time,tordam,torp,tractr +trap,type,users diff --git a/pdp10/scripts/DECWR.ICD b/pdp10/scripts/DECWR.ICD new file mode 100644 index 0000000..867c294 --- /dev/null +++ b/pdp10/scripts/DECWR.ICD @@ -0,0 +1,8 @@ +limit sru 0 +level 0 +compile/c lofchk +compile/c warmac,warver,cishng,msg,setmsg,(nowarn)/f10 setup,@decwar,low,high +r link +@l +r link +@ldeb diff --git a/pdp10/scripts/L.CMD b/pdp10/scripts/L.CMD new file mode 100644 index 0000000..722b8aa --- /dev/null +++ b/pdp10/scripts/L.CMD @@ -0,0 +1,22 @@ +decwr/ssave +decwar/map/contents:cref +low/seg:low +high/seg:high +/seg:def +decwar,blkdat,basbld,baskil,baspha,build,captur,check,chkpnt,clrbuf +damage,dist,dock,dship,endgam,energy,free,getcmd,jump,kqsrch,list +locate,lstscn,lstflg,lstupd,lstout,lstsum,lstobj,move,nova,outhit,outmsg +paswrd,phacon,place,plnatk,plnrmv,points,pridis,prloc,prompt,radio,repair +romdrv,romstr,romtor,scan,set,shield,snova,status,tell,time,tordam,torp,tractr +trap,type,users +msg +warmac,warver +cishng +usrtmp +lofchk +sys:forlib/sea/seg:def +setup/seg:low +setmsg +sys:forlib/sea/seg:low +unv:layor1.rel +/g diff --git a/pdp10/scripts/LABCRE.ICD b/pdp10/scripts/LABCRE.ICD new file mode 100644 index 0000000..dbe621f --- /dev/null +++ b/pdp10/scripts/LABCRE.ICD @@ -0,0 +1,7 @@ +lim sru 0 + +r 1022 +@labcre.dmc + + + diff --git a/pdp10/scripts/LDEB.CMD b/pdp10/scripts/LDEB.CMD new file mode 100644 index 0000000..f253a75 --- /dev/null +++ b/pdp10/scripts/LDEB.CMD @@ -0,0 +1,23 @@ +dwdeb/ssave +dwdeb/map +/symseg:high +low/seg:low +high/seg:high +/seg:def +decwar/l,blkdat/l,basbld/l,baskil/l,baspha/l,build/l,captur/l,check/l,chkpnt/l,clrbuf/l +damage/l,dist/l,dock/l,dship/l,endgam/l,energy/l,free/l,getcmd/l,jump/l,kqsrch/l,list/l +locate/l,lstscn/l,lstflg/l,lstupd/l,lstout/l,lstsum/l,lstobj/l,move/l,nova/l,outhit/l,outmsg/l +paswrd/l,phacon/l,place/l,plnatk/l,plnrmv/l,points/l,pridis/l,prloc/l,prompt/l,radio/l,repair/l +romdrv/l,romstr/l,romtor/l,scan/l,set/l,shield/l,snova/l,status/l,tell/l,time/l,tordam/l,torp/l,tractr/l +trap/l,type/l,users/l +msg/l +warmac/l,warver/l +cishng/l +usrtmp/l +lofchk/l +sys:forlib/sea/seg:def +setup/seg:low/l +setmsg/l +sys:forlib/sea/seg:low +unv:layor1.rel +/g diff --git a/pdp10/scripts/LINE.CMD b/pdp10/scripts/LINE.CMD new file mode 100644 index 0000000..77d6f77 --- /dev/null +++ b/pdp10/scripts/LINE.CMD @@ -0,0 +1,24 @@ +cisrev.dat/skip:1 +B.AN +Y +dif:line.dif +nlt +kb +SX +SY +HX +KT +IA:X,1.5 +IA:Y,1.5 +loc:d,2.25,1.5,7,4 + +2/blu +\TR\CompuServe\CR\ Information Service +ON LINE SERVICE REVENUE +FISCAL '82 +REVENUE +3 +REVENUE/GRN + +1 +1 diff --git a/pdp10/scripts/LOAD.CMD b/pdp10/scripts/LOAD.CMD new file mode 100644 index 0000000..dce7907 --- /dev/null +++ b/pdp10/scripts/LOAD.CMD @@ -0,0 +1,7 @@ +set echo on +compile lofchk +compile warmac,cishng,msg,setmsg,(nowarn)/f10 setup,@decwar,low,high +r link +@l +r link +@ldeb diff --git a/pdp10/scripts/NETREV.CMD b/pdp10/scripts/NETREV.CMD new file mode 100644 index 0000000..f0b71da --- /dev/null +++ b/pdp10/scripts/NETREV.CMD @@ -0,0 +1,24 @@ +CISREV.DAT/SKIP:1 +B.AN +Y +DIF:NETREV.DIF +NLT +KB +SX +SY +HX +kt +ia:x,1.5 +ia:y,1.5 +loc:d,2.25,1.5,7,4 + +2/BLU +\tr\CompuServe\cr\ Information Service +REVENUE NET OF CREDITS +FISCAL '82 +REVENUE +1 +REVENUE NET OF CREDITS/GRN + +1 +1 diff --git a/pdp10/scripts/PAGE.TCO b/pdp10/scripts/PAGE.TCO new file mode 100644 index 0000000..a8d5635 --- /dev/null +++ b/pdp10/scripts/PAGE.TCO @@ -0,0 +1,22 @@ +hk erDECWAR.NDX$ j i<_^R^T$ + +:8^T"s +!RESCAN! ^Tuc +qc-^^-"n oRESCAN$' + +!IN! ^Tuc +qc-^O012"e oSEARCH$' +qc-^O013"e oSEARCH$' +qc-^O014"e oSEARCH$' +qc-^O015"e oIN$' +qc-^o022"e oSEARCH$' +qc-^o024"e oSEARCH$' +qc-^O032"e oSEARCH$' +qc-^O033"e ^A^M^J^A oSEARCH$' +qci$ oIN$' + +!SEARCH! +i^R$; 0tt %m>$ +3,.-10xs -zxi mi +qm"e ^ACan't find "^A 0et qs= ^A"^M^J^A' +^C diff --git a/pdp10/scripts/PDWDOC.CMD b/pdp10/scripts/PDWDOC.CMD new file mode 100644 index 0000000..81aa7f5 --- /dev/null +++ b/pdp10/scripts/PDWDOC.CMD @@ -0,0 +1 @@ +pdwdoc/ssave pdwdoc,usrtmp diff --git a/pdp10/scripts/SAKHLP.MIC b/pdp10/scripts/SAKHLP.MIC new file mode 100644 index 0000000..df58b03 --- /dev/null +++ b/pdp10/scripts/SAKHLP.MIC @@ -0,0 +1,3 @@ +.let a = "/var:system" +.revive +.r new:runoff (decwar.hlp/cr/und:sep'a=decwar.rnh) diff --git a/pdp10/scripts/TORP.COD b/pdp10/scripts/TORP.COD new file mode 100644 index 0000000..84f324c --- /dev/null +++ b/pdp10/scripts/TORP.COD @@ -0,0 +1,23 @@ +n accept an arbitrary number +n[min..max] accept a number within the given range +t accept a type (absolute,relative,computed) +t=n accept a type, default to n +o(....) if out of range, execute stuff within parentheses +"...." print the message within the quotes +rn take alternate return n +------- +? conditional + . at end of input +i get another line of input + +C +{The $ message is , f1 is initially false} +1 f1:F +{If at EOL (print "Number of torps to fire: ", get a line, if at EOL + take the first alternate return, set f1 to true} + ?i.("Number of torps to fire: " l ?i.(r1) f1:T) +{If the token is not an integer in the range 0 to 3 (print "Wrong +number of torps in burst", take the first alternate return), set f2 +to the integer numeric value of the word} + ?i^[0,3]("Wrong number of torps in burst" r1) f2:vi +2 i[t(a)] diff --git a/pdp10/utexas/DECWAR.FOR b/pdp10/utexas/DECWAR.FOR new file mode 100644 index 0000000..a28ae63 --- /dev/null +++ b/pdp10/utexas/DECWAR.FOR @@ -0,0 +1,353 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + program decwar + include 'param' + include 'hiseg' + include 'lowseg' + include 'extern' + common /local/ dummy(locsiz) + common /polocl/ total(9) + external monit + + call blkset (lfz, 0, locf(llz) - locf(lfz) + 1) !zero out low segment + versio = 24 !version number +C call royaln('CSIS86') drforbin(merlyn) + oflg = medium + call out (decver, 1) + call out ('Are you: ', 1) + + call out ('1 Beginner', 1) + call out ('2 Intermediate', 1) + call out ('3 Expert', 1) + call out (' ', 1) + call out ('Which? ', 0) + call gtkn + if(vallst(1).ne.1.and.(equal(tknlst(1),'BEGINNER').eq.0)) goto 2 + scnflg = long + oflg = medium + prtype = 0 + icflg = kabs + goto 4 + +2 if(vallst(1).ne.2.and.(equal(tknlst(1),'INTERMEDIATE').eq.0)) + + goto 3 + scnflg = long + prtype = -1 + icflg = krel + oflg = medium + goto 4 + +3 if(vallst(1).ne.3.and.(equal(tknlst(1),'EXPERT').eq.0)) goto 4 + scnflg = short + prtype = -1 + icflg = krel + oflg = short + +4 continue + call type (1) + call type (2) + call summar +1 continue + call pregam !enter Pre-game stage + + call ttyon + call setup !start up player in game + call aprset($9999) ! set up trap for data out of bounds + call place ((100 * team) + who, 1, shpcon(who,KVPOS), + + shpcon(who,KHPOS)) + +49 continue + 50 PLAYER = .TRUE. !regular player, not a Romulan +d call timin ('GETCMD') + call getcmd (n) !get next command to execute +d call timout('GETCMD') + if (who .eq. 0) goto 1 ! hmmm....he died, so reincarnate him! + + goto (100,200,300,400,500,600,700,800,900,1000,1100,1200, + + 1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300, + + 2400,2500,2600,2700,2800,2900,3000,3100,3200,3300) n + +100 continue +d call timin ('CMDBA ') + call bases ! bases +d call timout('CMDBA ') + goto 50 +200 continue +d call timin ('CMDBU ') + call build ($49) ! build +d call timout('CMDBU ') + goto 3400 +300 continue +d call timin ('CMDCA ') + call captur ($49) +d call timout('CMDCA ') + goto 3400 +400 continue +d call timin ('CMDDA ') + call damage(2) !damages +d call timout('CMDDA ') + goto 50 +500 continue +d call timin ('CMDDO ') + call dock ($49) +d call timout('CMDDO ') + goto 3400 +600 continue +d call timin ('CMDEN ') + call energy +d call timout('CMDEN ') + goto 50 +700 continue +d call timin ('CMDGR ') + call gripe !gripe +d call timout('CMDGR ') + goto 50 +800 continue +d call timin ('CMDHEL') + call help !help +d call timout('CMDHEL') + goto 50 +900 continue +d call timin ('CMDIMP') + call impuls ($49) +d call timout('CMDIMP') + if (.not. alive(who)) 3810, 3400 +1000 continue +d call timin ('CMDLIS') + call list !list +d call timout('CMDLIS') + goto 50 +1100 continue +d call timin ('CMDMOV') + call move ($49) +d call timout('CMDMOV') + if (.not. alive(who)) 3810, 3400 +1200 continue +d call timin ('CMDNEW') + call news !news +d call timout('CMDNEW') + goto 50 +1300 continue +d call timin ('CMDPHA') + call phacon ($49) +d call timout('CMDPHA') + goto 3500 +1400 continue +d call timin ('CMDPLA') + call planet !planets +d call timout('CMDPLA') + goto 50 +1500 continue +d call timin ('CMDPOI') + call points (.FALSE.) !points +d call timout('CMDPOI') + goto 50 +1600 if (hungup) goto 3800 ! don't ask if job is hungup +C if (lofchk(0)) goto 3800 drforbin (merlyn) ! also if his time is up + call out (sure00,0) !quit + ccflg = .false. + call clear ! zap input buffer + call gtkn + if (equal(tknlst(1), 'YES')) 3800, 50 +1700 continue +d call timin ('CMDRAD') + call radio !radio +d call timout('CMDRAD') + goto 50 +1800 continue +d call timin ('CMDREP') + call repair (1, $49) +d call timout('CMDREP') + goto 3400 +1900 continue +d call timin ('CMDSCA') + call scan !scan +d call timout('CMDSCA') + goto 50 +2000 continue +d call timin ('CMDSET') + call set !set +d call timout('CMDSET') + goto 50 +2100 continue +d call timin ('CMDSHI') + call shield !shields +d call timout('CMDSHI') + goto 50 +2200 continue +d call timin ('CMDSRS') + call srscan !srscan +d call timout('CMDSRS') + goto 50 +2300 continue +d call timin ('CMDSTA') + call status (2) !status +d call timout('CMDSTA') + goto 50 +2400 continue +d call timin ('CMDSUM') + call summar !summary +d call timout('CMDSUM') + goto 50 +2500 continue +d call timin ('CMDTAR') + call target !targets +d call timout('CMDTAR') + goto 50 +2600 continue +d call timin ('CMDTEL') + call tell +d call timout('CMDTEL') + goto 49 +2700 continue +d call timin ('CMDTIM') + call time !time +d call timout('CMDTIM') + goto 50 +2800 continue +d call timin ('CMDTOR') + call torp ($49) +d call timout('CMDTOR') + goto 3500 +2900 continue +d call timin ('CMDTRA') + call tractr +d call timout('CMDTRA') + goto 49 +3000 continue +d call timin ('CMDTYP') + call type(0) !type +d call timout('CMDTYP') + goto 50 +3100 continue +d call timin ('CMDUSE') + call users !users +d call timout('CMDUSE') + goto 50 +3200 continue + call debug !*debug + goto 50 +3300 call paswrd !*password +/ + goto 50 + +*.......A time-consuming move has occurred .... + +3400 call repair (3, $3500) +3500 continue + dotime = dotime + 1 + if (dotime .lt. numply) goto 3501 ! if time to do rebuilding etc + dotime = 0 +d call timin ('BASPHA') + call baspha ! activate enemy starbase defense +d call timout('BASPHA') +d call timin ('PLNATK') + call plnatk !activate neutral and enemy planets +d call timout('PLNATK') +d call timin ('BASBLD') + call basbld !partially rebuild enemy bases +d call timout('BASBLD') + if (ROMOPT) call romdrv(d1,d2) !activate Romulan? +3501 shpcon(who,KNTURN) = shpcon(who,KNTURN) + 1 !update stardate + tmturn(team) = tmturn(team) + 1 + +* Critical life-support damage warning + + if (shpdam(who,KDLIFE) .lt. KCRIT) goto 3600 + if (.not. docked(who)) shpcon(who,KLFSUP) = shpcon(who,KLFSUP) - 1 !reduce life-support reserves + if (shpcon(who,KLFSUP) .lt. 0) shpcon(who,KSDAM) = KENDAM !life-support gone? + if (prtype) goto 3600 + call out (lifdam,0) + call odec (shpcon(who,KLFSUP),0) + call out (strdat,1) + +* Update scoring information + +3600 do 3700 i = 1, KNPOIN + score(i, who) = score(i, who) + tpoint(i) + tmscor(team,i) = tmscor(team,i) + tpoint(i) + tpoint(i) = 0 +3700 continue + goto 49 + +9999 call crlf + call crlf + i = iran(5) ! five fatal messages + goto (5001, 5002, 5003, 5004, 5005), i +5001 call out ('The Romulans have devised a fiendish new',1) + call out ('weapon! Your ship and crew have been',1) + call out ('reduced to quarks and now reside in the',1) + call out ('Romulan''s energy banks!',1) + goto 3810 + +5002 call out ('Your Navigation officer contracted a strange', 1) + call out ('virus during R&R on Zzarpion III. The Medical', 1) + call out ('officer has been uable to diagnose it or to', 1) + call out ('devise a cure or vaccine for it. Your entire', 1) + call out ('crew became infected, and all have died, including', 1) + call out ('you.', 1) + goto 3810 + +5003 call out ('Due to a design error, the Doomsday Device aboard', 1) + call out ('your vessel has detonated. The error, a missing', 1) + call out ('instruction in the built-in microprocessor, will', 1) + call out ('remain undetected for several decades.', 1) + goto 3810 + +5004 call out ('An ancient Romulan space mine has exploded,', 1) + call out ('flooding your ship with deadly radiation.', 1) + call out ('You are forgiven, Captain, for not noticing the',1) + call out ('mine, since it was constructed of a special', 1) + call out ('plastic which is nearly transparant to most', 1) + call out ('forms of radiation. Perhaps your crew also', 1) + call out ('forgave you as they disintegrated in a blaze', 1) + call out ('of glory!', 1) + goto 3810 + +5005 call out ('I regret to report, Captain, that your', 1) + call out ('ship''s computer became defective, and', 1) + call out ('consequently you have flown into a', 1) + call out ('massive star. The star''s gravitation has', 1) + call out ('torn your ship apart.', 1) + goto 3810 +*.......Player dead or quitting + +3810 continue +3800 call cctrap ! disable ^C trapping, if any + txppn = job(who, kppn) + txnm1 = job(who, knam1) + txnm2 = job(who, knam2) + txsh1 = names (who, 1) + txsh2 = names (who, 2) + txtim = etim(job(who, KJOBTM)) + txwhy = -1 + if (addrck) txwhy = 0 ! hmmmm....he seems to have died! + txtem = team - 1 + call points (.TRUE.) !show final point totals + txtot = total (1) + call updsta (txppn,txnm1,txnm2,txsh1,txsh2,txtot,txtim,txwhy, + + txtem, who) + call free (who) ! release the ship + who = 0 + call exit + +C call onexit ;drforbin added + end diff --git a/pdp10/utexas/DECWAR.IMP b/pdp10/utexas/DECWAR.IMP new file mode 100644 index 0000000..222b2dc --- /dev/null +++ b/pdp10/utexas/DECWAR.IMP @@ -0,0 +1,70 @@ +The following files are included on the DECWAR source distribution tape: + +DECWAR.IMP This file. + +Files to be installed on GAM: +DECWAR.EXE DECWAR game. Protected for EXECUTE access. +DECWAR.HLP Help for DECWAR. Source for on line help system. + Protected for READ access. +DECWAR.NWS News file (recent developments). Protected for READ access. +DECWAR.GRP Gripe file. Initially empty, added to by the DECWAR GRIPE + command. Must be protected to allow write access. + +Files from which the GAM: files are derived: +DECWAR.EXE: + HIGH.FOR Used to force common block into high segment. + LOW.FOR Used to force common block into low segment. + DECWAR.FOR FORTRAN source. + WARMAC.MAC MACRO source. + MSG.MAC Output text source (to force text into the high segment, + and to get rid of the annoying trailing blanks FORTRAN + generates for literals). + SETUP.FOR Once only code, deleted from core after initialization. + SETMSG.MAC Equivalent to MSG.MAC for SETUP text strings. +DECWAR.RNH Help file source. +DECNWS.RNO News file source. + +Files INCLUDEd in DECWAR.FOR (extracted from WARMAC.MAC by TECO macros): +PARAM.FOR Parameters (constants). +HISEG.FOR High segment common block. +LOWSEG.FOR Low segment common block. + +Other files INCLUDEd in DECWAR.FOR: +EXTERN.FOR External declarations for strings used in DECWAR (extracted + from MSG.MAC). +SETEXT.FOR Equivalent external declarations used by SETUP (extracted + from SETMSG.MAC). +LSTVAR.FOR Common block INCLUDEd by all LIST routines (LST???). + +Relocatable files needed to produce DECWAR.EXE: +HIGH.REL High segment common block. +LOW.REL Low segment common block. +DECWAR.REL From DECWAR.FOR source. +WARMAC.REL From WARMAC.MAC source. +MSG.REL From MSG.MAC source. +SETUP.REL From SETUP.FOR source. +SETMSG.REL From SETMSG.MAC source. + +Tools used to build game (.SAV files generated from TECO macros): +L.MIC Load REL files in proper sequence into right segments. + Note you can DO L/H for help on building the DECWAR core + image. +PARAM.SAV Build PARAM.FOR from WARMAC.MAC. +HISEG.SAV Build HISEG.FOR from WARMAC.MAC. +LOWSEG.SAV Build LOWSEG.FOR from WARMAC.MAC. +EXTERN.SAV Build EXTERN.FOR from MSG.MAC. +SETEXT.SAV Build SETEXT.FOR from SETMSG.MAC. + +TECO macros used to build game (require TECO 124): +PARAM.TEC Source for PARAM.SAV. +HISEG.TEC Source for HISEG.SAV. +LOWSEG.TEC Source for LOWSEG.SAV. +EXTERN.TEC Source for EXTERN.SAV. +SETEXT.TEC Source for SETEXT.SAV. + +Misc. utilities: +MAKHLP.MIC Build DECWAR.HLP file from DECWAR.RNH using RUNOFF. +MAKNWS.MIC Build DECWAR.NWS file from DECNWS.RNO using RUNOFF. +NDX.TEC Build DECWAR.NDX file to be used by PAGE.TEC. +PAGE.TEC Search DECWAR.NDX file for page number of desired + DECWAR.FOR subprogram. diff --git a/pdp10/utexas/EXTERN.FOR b/pdp10/utexas/EXTERN.FOR new file mode 100644 index 0000000..b916656 --- /dev/null +++ b/pdp10/utexas/EXTERN.FOR @@ -0,0 +1,400 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + external absfrm !Absolute ! + external alldok !All devices functional.! + external ambcom !Ambiguous command! + external ambswi !! + !Ambiguous switch for TYPE.! + external begyrp !Beg your pardon, sir? ! + external bthfrm !Both ! + external build1 !builds planet ! + external build2 ! into a ! + external build3 ! build! + external build4 !! + !All ! + external build5 !s still functional, captain.! + external build7 !! + !Planet not yet captured.! + external captu0 !capturing ! + external captu1 !! + !! + !Science Officer: Captain, that was a MOST illogical tactic.! + external captu2 !! + !! + !First Officer: Commander, because of your incompetence! + !we must suffer the shame of DEFEAT!!! + external captu4 !DESTROYED during capture of planet!!! + external captu5 !not adjacent to planet.! + external captu6 !! + !Captain, are you feeling well?! + !We are orbiting a FEDERATION planet!! + external captu7 !! + !Planet already captured, sir.! + external captu8 !! + !MESSAGE FROM PLANET: Veer off you idiot!! + !We are ALREADY part of the Klingon Empire!! + external comlin !Command: ! + external coord1 !Coordinates: ! + external damcom !Computer inoperative.! + external dmhdr1 !Device ! + external dmhdr2 !Damage! + external damrep !Damage Report for ! + external decver ![DECWAR Version 2.2, 25-Dec-79]! + external destry !DESTROYED!!! + external displc !displaced to ! + external dock01 ! not adjacent to base!!! + external dockin !! + !DOCKED.! + external empire ! Empire! + external empbas !Empire base! + external emppln !Empire planet! + external empshp !Empire ship! + external endgm0 !THE WAR IS OVER!!! + !! + external endgm1 !The entire known galaxy has been depopulated.! + !! + !BOTH sides lose!!! + external endgm3 !The Klingon Empire is VICTORIOUS!!! + !! + external endgm4 !The Federation has successfully repelled the Klingon hordes!! + !! + external endgm5 !Please proceed to the nearest Klingon slave planet.! + external endgm6 !Congratulations. Freedom again reigns the galaxy.! + external endgm7 !The Empire salutes you. Begin slave operations immediately.! + external endgm8 !The Empire has fallen. Initiate self-destruction procedure.! + external ener1S !Ship, energy: ! + external ener1L !Destination ship name and energy to transfer: ! + external energ2 !Can not transfer energy to enemy ship.! + external energ3 !Not adjacent to destination ship.! + external ener4S !Insufficient ship energy.! + external ener4L !Sir, our ship doesn't possess that much energy!! + external energ5 !Transfer aborted.! + external energ6 !Energy transferred, sir.! + external energ7 !Transfer energy to US!?!! + external energ8 !Illegal energy transfer. ! + external engoff !Engineering Officer: ! + external erloc1 !Wrong number of coordinates specified.! + external erloc2 !Too many coordinates specified.! + external erloc3 !Non-alpha ship name.! + external erloc4 !Unrecognized ship name.! + external erloc7 !Non-numeric coordinate.! + external erloc8 !X coordinate lies outside galaxy.! + external erloc9 !Y coordinate lies outside galaxy.! + external error1 !ERROR detected by computer!! You have attempted! + !to use your present location.! + external error2 !ERROR! Own location used!! + external federa !Federation! + external fedbas !Federation base! + external fedpln !Federation planet! + external fedshp !Federation ship! + external forhlp ! -- for help type HELP! + external free01 !Sorry, but your ship is in use!! + external free02 !Sorry, but your spot on the board is taken!! + external impdam !Impulse engines damaged.! + external inform !Informative ! + external ingame ! in game! + external inrang ! in range! + external inspra ! in specified range! + external known !/!known/ + external lifdam !! + !WARNING!! Life Support damaged.! + !Reserves of ! + external lngfrm !Long ! + external lsts01 !Null group illegal! + external lsts02 !Illegal keyword ! + external lsts03 !Syntax error near keyword ! + external lsts04 !Illegal coordinate ! + external lstf01 !Sir, our sensors can't scan as far as ! + external lstf02 !No base ! + external lstf03 !No planet ! + external lstf04 !No target ! + external lstf05 !The Romulan is dead! + external lstf06 !Sir, there are no! + external lstf07 !No! + external lstf08 ! neutral! + external lstf09 ! Federation! + external lstf10 ! Empire! + external lstf11 ! captured! + external lstf12 ! enemy! + external lstf13 ! planets! + external lstf14 ! bases! + external lstf15 ! ships! + external lstf16 ! ports! + external lstf17 ! forces! + external main02 !RUNS OUT OF ENERGY!!! + external medfrm !Medium ! + external mess01 !! + !Message from ! + external mess02 !to ! + external move1A !Captain, the impulse engines won't take it. ! + external move1B !Maximum speed warp 1.! + external move2L !Captain, our warp engines are damaged. I can only give you warp 3.! + external move2S !Engines damaged, warp 3 max.! + external move3L !Engineering Officer: The engines won't take it sir.! + !I can only give you warp ! + external move3S !Maximum warp ! + external move5L !Captain, our engines are overheating!! + external move5S !Engines overheating.! + external move06 !EEEEERRRRRROOOOOOOMMMMMmmmmm!!! + !Captain, the engines suffered ! + external move08 ! units of damage.! + external move09 !Sir, repairs will take approximately ! + external move10 !! + !Navigation Officer: "Collision averted, sir!"! + external neupln !neutral planet! + external nocomp !Computed coordinates are not supported for fast terminals.! + external noplnt !! + !No planet at those coordinates, sir.! + external normal !Normal ! + external noquit !Use QUIT to terminate while under RED alert.! + external noship !Player not in game.! + external nosur1 !! + !But sir, he's already on our side!! + external nosur2 !! + !Sir, the enemy refuses our surrender ultimatum!! + external nosur3 !! + !Sir, the Romulan refuses to surrender!! + external nosur4 !! + !Capture THAT?? You have GOT to be kidding!!! + external outh01 !novas! + external outh02 !makes! + external outh03 ! unit ! + external outh04 !hit on ! + external outh05 !torpedo hit on ! + external outh06 !phaser hit on ! + external outh07 !damaged ! + external outh08 !dam ! + external outh09 ! displaced by blast into BLACK HOLE!! + external outh10 ! -> BH! + external outh12 ! lost ! + external outh13 ! miss ! + external outh14 ! swallowed by black hole ! + external outh15 ! gulp ! + external outh16 ! is under attack, sir.! + external outh17 ! attacked! + external outh18 ! has been destroyed, sir.! + external outh19 ! dead! + external outh20 !detected! + external outh21 ! transfers ! + external outh22 ! units of energy to the ! + external outh23 !! + !Tractor beam activated, sir.! + external outh24 !Trac. Beam on! + external outh25 !! + !Tractor beam broken, sir.! + external outh26 !Trac. Beam off! + external outh27 ! neutralized by friendly object ! + external outh28 ! neutralized ! + external outh29 !deflected T! + external outh30 !has torpedo deflected by ! + external outh31 !Critical hit on starbase, shields down!! + external outh32 !Starbase attempts to re-establish shields using emergency power!! + external outh33 !Base shields RE-ESTABLISHED!!! + external outh34 !Base FAILS to re-establish shields........BOOM!! ! + external phacn0 !Phasers critically damaged.! + external phacn1 !Target out of range.! + external phacn2 !High speed shield control activated.! + external phacn3 !SHIELDS USE UP LAST OF ENERGY!! + external phacn4 !WARNING! WARNING! PHASERS OVERHEATING.! + external phacn5 !********** CRACKLE! POP! SIZZLE! POOF! **********! + !PHASERS DAMAGED.! + external phacn7 !! + !Phaser control unable to lock on target, sir.! + external phacn8 !! + !Weapons Officer: Improper energy consumption for phaser hit, sir.! + external phacn9 !! + !Weapons Officer: Attempting to hit friendly object, sir.! + external poi03S !! + !Tot Pts ! + external poi03L !! + !Total points: ! + external poin04 !! + !Incorrect input, POINTS aborted.! + external poi05S !! + !Pts / Pl ! + external poi05L !! + !Pts. / player: ! + external poi06S !! + !Pts / SD ! + external poi06L !! + !Pts. / stardate: ! + external poi07S !! + !# of shps! + external poi07L !! + !Number of ships:! + external poi11S !Dam E's ! + external poi11L !Damage to enemies ! + external poi12S !E's dest ! + external poi12L !Enemies destroyed ! + external poi13S !Dam B's ! + external poi13L !Damage to bases ! + external poi14S !@'s capt ! + external poi14L !Planets captured ! + external poi15S !B's built! + external poi15L !Bases built ! + external poi16S !Dam ~~'s ! + external poi16L !Damage to Romulans! + external poi17S !*'s dest ! + external poi17L !Stars destroyed ! + external poi18S !@'s dest ! + external poi18L !Planets destroyed ! + external poin19 ! (-100)! + external poin20 ! ( -50)! + external poin21 ! ( 100)! + external poin22 ! ( 500)! + external poin23 ! (1000)! + external radio0 !Turn radio ON or OFF, GAG or UNGAG individual ship? ! + external radio1 !Radio ! + external radio2 !Ship name: ! + external radio3 !Radio ! + external radgag !Radio gagged against ! + external radoff !Radio turned off, sir.! + external radon0 !Radio turned on, sir.! + external radung !Radio ungagged against ! + external relfrm !Relative ! + external romadv !advances to ! + external romula ! Romulans! + external set001 !! + !Name, Output, Ttytype, Prompt, Scans,! + !Input or Output location defaults (ICDEF, OCDEF)? ! + external set002 !! + !Desired name: ! + external set003 !! + !Short, Medium, or Long output? ! + external set004 !! + !Normal or Informative command prompt? ! + external set005 !! + !Short or Long scans? ! + external set006 !! + !Absolute or Relative default for location input? ! + external set007 !! + !Absolute, Relative, or Both for location output? ! + external set008 !Terminal type: ! + external set009 !! + !Ambiguous TTY type. ! + external set010 !Supported TTY types are:! + external setu06 !There are Romulans in this game.! + external setu07 !There are Black holes in this game.! + external shld01 !Transfer, Up, Down ? ! + external shld02 !Units of energy to transfer to shields: ! + external shld03 !Transferring all ship energy to shields. Confirm? ! + external shld04 !Energy NOT transferred.! + external shld05 !Energy transferred, sir.! + external shld06 !Shields raised, sir.! + external shld07 !! + !Shield control uses remaining ship energy!! + external shld08 !Shields lowered, sir.! + external shld09 !Sir, unable to raise shields due to critical damage.! + external shtfrm !Short ! + external star02 ! UNAFFECTED by Photon Torpedo!! + external stat2L !Stardate ! + external stat2M !SDate ! + external stat3L !Shields ! + external stat3M !Shlds ! + external stat05 ! units! + external stat6L !Location ! + external stat6M !Loc ! + external stat7L !Condition ! + external stat7M !Cond ! + external stat8L !Torpedoes ! + external stat8M !Torps ! + external stat9L !Energy left ! + external stat9M !Ener ! + external sta10L !Damage ! + external sta10M !Dam ! + external stat11 !damaged! + external strdat ! stardates.! + external sure00 !! + !Do you really want to quit? ! + external syntax !%Syntax error! + external tell01 !! + !Sub-Space radio damaged.! + external tell02 !! + !To ship: ! + external tell03 !! + !Unrecognized player or group name: ! + external tell04 !! + !Ambiguous group name: ! + external tell05 !! + !Self excluded from message.! + external tell06 !! + !Player is not in the game: ! + external tell07 !! + !Communications: Sir, we cannot raise the ! + external tell08 !! + !No message sent.! + external tell09 !! + !Wake up, sir, I just sent that message!! + external time01 !! + !Game's elapsed time: ! + external time02 !! + !Ship's elapsed time: ! + external time03 !! + !Run time in game: ! + external time04 !! + !Job's total run time: ! + external time05 !! + !Current time of day: ! + external tormis !Weapons Officer: Sir, torpedo ! + external torp00 !Torpedo tubes critically damaged.! + external torp01 !You have already used your supply of torpedoes!! + external torp02 !Number in burst (1-3) and ! + external torp03 !Insufficient torpedoes for burst!! + external torp04 !Torpedo ! + external torp05 ! MISFIRES!! + external torp06 !PHOTON TUBES DAMAGED!! + external torp07 ! torpedoes left.! + external tract1 !Ship to apply tractor beam to: ! + external tract2 !Tractor beam not in operation at this time, sir.! + external tract3 !Tractor beam already active, sir.! + external tract4 !Beg your pardon, sir? You want to apply a tractor! + !beam to your own ship?! + external tract5 !Can not apply tractor beam to enemy ship.! + external tract6 !already has tractor beam active.! + external tract7 !Can not apply tractor beam through shields, sir.! + external tract8 !has his shields up. Unable to apply tractor beam.! + external ttys00 !ACT-IV ADM-2 ADM-3a DATAPOINT! + !ACT-V SOROC BEEHIVE CRT! + external type01 !! + !Do you wish to see the OUTPUT or OPTION switches? ! + external type02 !! + !Current output switch settings:! + external type03 !output format.! + external type04 !command prompt.! + external type05 !SCAN format.! + external type06 !Romulans are NOT in this game.! + external type07 !Black holes are NOT in this game.! + external type08 !coordinates are default for input.! + external type09 !coordinates are default for output.! + external units1 ! units! + external unkcom !Unknown command! + external unkshp !Unknown ship name.! + external unkswi !Unknown switch! + external users1 !Ship Captain Speed PPN TTY Job! + external users2 ! Location! + external users3 !! + !---- ------- ----- --- --- ---! + external users4 ! --------! + external users5 !----! + external wrpdam !Warp engines damaged.! + + + diff --git a/pdp10/utexas/HIGH.FOR b/pdp10/utexas/HIGH.FOR new file mode 100644 index 0000000..b7fa237 --- /dev/null +++ b/pdp10/utexas/HIGH.FOR @@ -0,0 +1,25 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + subroutine high + include 'param' + include 'hiseg' + common /timers/ timdum(250) ! used in WARMAC for performance timers + end diff --git a/pdp10/utexas/HISEG.FOR b/pdp10/utexas/HISEG.FOR new file mode 100644 index 0000000..76ac6c9 --- /dev/null +++ b/pdp10/utexas/HISEG.FOR @@ -0,0 +1,101 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + common /hiseg/ + + hfz, shpcon, shpdam, base, nbase, board, locpln, locr, + + erom, eromo, rsr, nplnet, rom, romcnt, rtpaus, rppaus, + + job, msgflg, hitflg, numcap, romopt, blhopt, endflg, nomsg, + + tmscor, tim0, slwest, kilque, nkill, kilndx, tmturn, numshp, + + numrom, trstat, active, alive, comknt, hitime, dead, docked, + + hlz, plnlok, frelok, quelok, device, isaydo, xhelp, ttydat, + + names, bits, sbits, cmdbts, numply, numsid, versio, gameno, + + dotime, score + +c Note: the following MUST be last entry in hiseg impure area + common /hiseg/ hilst + + !High core zeroed out by first player + + integer hfz !first location to zero out + integer shpcon(KNPLAY,10) !ship information + integer shpdam(KNPLAY,KNDEV) !damage to ship devices + integer base(KNBASE,4,2) !base information + integer nbase(2) !number of federation and klingon bases + integer board(brdsiz) !board + integer locpln(KNPLNT,4) !planet info + integer locr(2) !romulan position + integer erom !romulan energy + integer eromo !initial rom energy + integer rsr(8) !romulan scoring info + integer nplnet !number of existing planets + logical rom !true if Romulan exists + integer romcnt !Romulan move counter + integer rtpaus !Romulan torpedo tube pause time + integer rppaus !Romulan phaser pause time + integer job(KNPLAY,KNJBST) !various job status information + integer msgflg(KNPLAY) !flag for message routine + integer hitflg(KNPLAY) !flag for MAKHIT, GETHIT + integer numcap(2) !number of fed and emp planets + integer romopt !romulan option flag + integer blhopt !black hole option flag + integer endflg !universe is destroyed flag + integer nomsg !radio off flag + integer tmscor(2,8) !team scoring information + integer tim0 !initial startup time + integer slwest !class code of slowest terminal + integer kilque(KQLEN,5) !list of players recently killed + integer nkill !current length of killed queue + integer kilndx !current index into killed queue + integer tmturn(3) !total # of turns used by each side + integer numshp(2) !total numbers of ships used + integer numrom !total number of romulans used + integer trstat(KNPLAY) !tractor beam status + integer active(KNPLAY) !dead ship flags + logical alive(KNPLAY) !true if player is alive + integer comknt !dead ship monitor count + integer hitime !time to reinitialize HISEG + logical dead !true if KILHGH already called + integer docked(KNPLAY) !docked flags + integer hlz !last location to zero out + + !high core not zeroed out by first player + + integer plnlok !lock variable for LOCPLN array + integer frelok !lock variable for FREE routine + integer quelok !lock variable for queue routines + + integer device(KNDEV) !device names + integer isaydo(2,KNCMD) !mnemonics for commands + integer xhelp(2,KNXTR) !extra things help is available for + integer ttydat(2,KNTTY) !mnemonics for supported TTYs + integer names(KNPLAY,3) !names of players + integer bits(18) !player's identification bit + !(powers of 2 table) + integer sbits(0 : 2) !flag bits for different sides + integer cmdbts(KNCMD) !flags commands usable before game + integer numply !number of active players + integer numsid(2) !current # of active ships per side + integer versio !version number + integer gameno ! game number + integer dotime ! counter for rebuilding bases + integer score(knpoin, knplay) + + + diff --git a/pdp10/utexas/L.MIC b/pdp10/utexas/L.MIC new file mode 100644 index 0000000..4cf6a08 --- /dev/null +++ b/pdp10/utexas/L.MIC @@ -0,0 +1,48 @@ +.set tty uc +.let a = "'a" +.set tty lc +.if ($a = $a.[1,"/H"]) .goto L1 +!To load DECWAR, type @L/sw/sw... +! +!/D debug using all symbols +!/F use FORDDT instead of DDT +!/E:nam generate an EXE file (nam defaults to DECWAR.EXE) +!/G debug using only global symbols +!/H type this text +!/M:nam generate a map file (nam defaults to DECWAR.MAP) +!/Q quick load, ignores any other switches except /H +!/S:nam generate a symbol file (nam defaults to DECWAR.SYM) +! +!For most debugging sessions use @L/D +!For fast debugging sessions use @L/G +!For fast debugging that doesn''t require symbols use @L/Q +!To generate the production version use @L/M/S/E +.mic exit +L1:: +.if ($a # $a.[1,"/Q"]) .goto L2 +.if ($a # $a.[1,"/D"]) .let d = "/d" +.if ($a # $a.[1,"/F"]) .let d = "/d:for" +.if ($a # $a.[1,"/G"]) .let g = "/d" +.if ($a # $a.[1,"/M"]) .let m = "/map" +.if ($a # $a.[1,"/M:"]) .let m = $a.["/M:","/"] + "/map" +.if ($a # $a.[1,"/S"]) .let s = "/syfile" +.if ($a # $a.[1,"/S:"]) .let s = $a.["/S:","/"] + "/syfile" +.if ($a # $a.[1,"/E"]) .let e = "/ssave" +.if ($a # $a.[1,"/E:"]) .let e = $a.["/E:","/"] + "/ssave" +L2:: +.revive .r link +*'m +*'s +*'d +*low/seg:low +*high/seg:hi +*decwar/seg:def +*msg +*warmac +*sys:forlib/sea/seg:def +*setup/seg:low +*setmsg +*sys:forlib/sea/seg:low +*'g +*'e +*/g diff --git a/pdp10/utexas/LOW.FOR b/pdp10/utexas/LOW.FOR new file mode 100644 index 0000000..071c9f7 --- /dev/null +++ b/pdp10/utexas/LOW.FOR @@ -0,0 +1,25 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + subroutine low + include 'param' + include 'lowseg' + common /local/ locdum(200) + end diff --git a/pdp10/utexas/LOWSEG.FOR b/pdp10/utexas/LOWSEG.FOR new file mode 100644 index 0000000..662b2f6 --- /dev/null +++ b/pdp10/utexas/LOWSEG.FOR @@ -0,0 +1,83 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + common /lowseg/ + + lfz, ntok, tknlst, vallst, typlst, ptrlst, who, iwhat, + + ihita, Vto, Hto, Vfrom, Hfrom, critdv, critdm, klflg, + + dispfr, dispto, dbits, shcnto, shstto, shcnfr, shstfr, shjump, + + group, ngroup, pasflg, shtype, team, ccflg, player, tpoint, + + phbank, tobank, ptime, prtype, rptflg, gagmsg, oflg, scnflg, + + ttytyp, hcpos, icflg, ocflg, blank, llz, inflag, hungup, + + addrck, lkfail, terwid + + integer lfz !first location of LOWSEG + integer ntok !number of tokens on input line + integer tknlst(kmaxtk) !buffer for tokens from input line + integer vallst(kmaxtk) !numeric values of tokens, else 0 + integer typlst(kmaxtk) !types for corresponding tokens + integer ptrlst(kmaxtk) !pointers to beginning of each token + integer who !which player you are + integer iwhat !type of hit for MAKHIT, GETHIT + integer ihita !size of hit for MAKHIT, GETHIT + integer Vto !V disp. location for MAKHIT, GETHIT + integer Hto !H disp. location for MAKHIT, GETHIT + integer Vfrom !V disp. location for MAKHIT, GETHIT + integer Hfrom !H disp. location for MAKHIT, GETHIT + integer critdv !dev. # of crit. hit for MAKHIT, GETHIT + integer critdm !size of crit. hit for MAKHIT, GETHIT + integer klflg !killed flag for MAKHIT, GETHIT + integer dispfr !DISP code of sender of information + integer dispto !DISP code of receiver + integer dbits !destination bits for MAKHIT, GETHIT + integer shcnto !hittee's shield condition + integer shstto !hittee's shield strength + integer shcnfr !hitter's shield condition + integer shstfr !hitter's shield strength + integer shjump !object displacement flag + integer group(kngrp,2) !player groups for SEND command + integer ngroup !number of defined groups + integer pasflg !true if the guy knows the password + integer shtype !shiptype (1=norm,10=trainer) + integer team !1 for federation, 2 for empire + logical ccflg !-1 if ^C while turned off + logical player !player / romulan movement flag + integer tpoint(knpoin) !points to be stored into SCORE + integer phbank(2) !time of last phaser fire + integer tobank !time of last torpedo fire + integer ptime !pause after last command in GETCMD + integer prtype !prompt type (0 = normal) + logical rptflg !TRUE if command was repeated with $ + integer gagmsg !mask to gag msgs from individual ships + integer oflg !output verbosity flag + integer scnflg !scan verbosity flag + integer ttytyp !terminal type + integer hcpos !horizontal cursor position + integer icflg !default coord input type (abs,rel) + integer ocflg !default coord out type (abs,rel,both) + integer blank !number of consecutive blank lines + integer llz !last location in LOWSEG + integer inflag ! -1 if waiting for input + integer hungup ! -1 if job has hung up + integer addrck ! -1 if an address failure occured + integer lkfail ! -1 if a lock request failed + integer terwid + + + diff --git a/pdp10/utexas/LSTVAR.FOR b/pdp10/utexas/LSTVAR.FOR new file mode 100644 index 0000000..94056b1 --- /dev/null +++ b/pdp10/utexas/LSTVAR.FOR @@ -0,0 +1,73 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + common /local/ + + lstfz, + + shpctr(2), shplst(KNPLAY), sxf(2), + + romctr, romlst, rxf, + + basctr(2), baslst(KNBASE,2), bxf(2), + + plnctr, plnlst(KNPLNT), pxf(0:2), + + txf, + + lstlz, + + cmd, svpos, shpos, + + p, omask, smask, lmask, imask, ships, range, vpos, hpos, gxf, + + vposc, hposc, clsest, + + xf, grpbts, code, object, index, side + +C shpctr number of ships selected for output +C shplst output flags for each ship +C sxf ship summary flags +C romctr number of Romulans selected for output (0 or 1) +C romlst Romulan output flags +C rxf Romulan summary flags +C basctr number of bases selected for output +C baslst output flags for each base +C bxf base summary flags +C plnctr number of planets selected for output +C plnlst output flags for each planet +C pxf planet summary flags +C txf target summary flags + +C cmd command being executed +C svpos vertical position of ship +C shpos horizontal position of ship + +C p pointer to current input token +C omask object mask (SHPBIT,BASBIT,PLNBIT) +C smask side mask (FEDBIT,EMPBIT,NEUBIT,ROMBIT) +C lmask listing flags (LSTBIT,SUMBIT) +C imask input flags (NAMBIT,ROMBIT,SHPBIT,BASBIT,PLNBIT,PRTBIT, +C CRDBIT,FEDBIT,EMPBIT,NEUBIT,CAPBIT,RNGBIT,CLSBIT,OUTBIT) +C ships ships encountered on input line +C range maximum range to look for objects +C vpos vertical position of object +C hpos horizontal position of object +C gxf group summary flags + +C vposc vertical coordinate of closest object +C hposc horizontal coordinate of closest object +C clsest distance to closest object + +C xf {LSTBIT,SUMBIT,ORNBIT,PASBIT} +C grpbts selection bits for group (used for error message) +C code disply code of object +C object object code (code div 100) +C index object index (code mod 100) +C side team object is on (0=neutral,1=Federation,2=Empire,3=Romulan) diff --git a/pdp10/utexas/MSG.MAC b/pdp10/utexas/MSG.MAC new file mode 100644 index 0000000..905b0a7 --- /dev/null +++ b/pdp10/utexas/MSG.MAC @@ -0,0 +1,403 @@ +; This file is part of Decwar. +; Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +; Computation Center and Harris Newman. + +; This program 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 3, or (at your option) +; any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; 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., 51 Franklin Street - Fifth Floor, Boston, MA +; 02110-1301, USA. + + +title msg + twoseg + reloc 400000 + +absfrm::asciz /Absolute / +alldok::asciz /All devices functional./ +ambcom::asciz /Ambiguous command/ +ambswi::asciz / +Ambiguous switch for TYPE./ +begyrp::asciz /Beg your pardon, Captain? / +bthfrm::asciz /Both / +build1::asciz /builds planet / +build2::asciz / into a / +build3::asciz / build/ +build4::asciz / +All / +build5::asciz /s still functional, captain./ +build7::asciz / +Planet not yet captured./ +captu0::asciz /capturing / +captu1::asciz / + +Science Officer: Captain, that was a MOST illogical tactic./ +captu2::asciz / + +First Officer: Commander, because of your incompetence +we must suffer the shame of DEFEAT!!/ +captu4::asciz /DESTROYED during capture of planet!!/ +captu5::asciz /not adjacent to planet./ +captu6::asciz / +Captain, are you feeling well? +We are orbiting a FEDERATION planet!/ +captu7::asciz / +Planet already captured, Captain./ +captu8::asciz / +MESSAGE FROM PLANET: Veer off you idiot! +We are ALREADY part of the Klingon Empire!/ +comlin::asciz /Command: / +coord1::asciz /Coordinates: / +damcom::asciz /Computer inoperative./ +dmhdr1::asciz /Device / +dmhdr2::asciz /Damage/ +damrep::asciz /Damage Report for / +decver::asciz /[DECWAR Version 2.3, 20-Nov-81]/ +destry::asciz /DESTROYED!!/ +displc::asciz /displaced to / +dock01::asciz / not adjacent to base!!/ +dockin::asciz / +DOCKED./ +empire::asciz / Empire/ +empbas::asciz /Empire base/ +emppln::asciz /Empire planet/ +empshp::asciz /Empire ship/ +endgm0::asciz /THE WAR IS OVER!! +/ +endgm1::asciz /The entire known galaxy has been depopulated. + +BOTH sides lose!!/ +endgm3::asciz /The Klingon Empire is VICTORIOUS!! +/ +endgm4::asciz /The Federation has successfully repelled the Klingon hordes! +/ +endgm5::asciz /Please proceed to the nearest Klingon slave planet./ +endgm6::asciz /Congratulations. Freedom again reigns the galaxy./ +endgm7::asciz /The Empire salutes you. Begin slave operations immediately./ +endgm8::asciz /The Empire has fallen. Initiate self-destruction procedure./ +ener1S::asciz /Ship, energy: / +ener1L::asciz /Destination ship name and energy to transfer: / +energ2::asciz /Can not transfer energy to enemy ship./ +energ3::asciz /Not adjacent to destination ship./ +ener4S::asciz /Insufficient ship energy./ +ener4L::asciz /Captain, our ship doesn't possess that much energy!/ +energ5::asciz /Transfer aborted./ +energ6::asciz /Energy transferred, Captain./ +energ7::asciz /Transfer energy to US!?!/ +energ8::asciz /Illegal energy transfer. / +engoff::asciz /Engineering Officer: / +erloc1::asciz /Wrong number of coordinates specified./ +erloc2::asciz /Too many coordinates specified./ +erloc3::asciz /Non-alpha ship name./ +erloc4::asciz /Unrecognized ship name./ +erloc7::asciz /Non-numeric coordinate./ +erloc8::asciz /X coordinate lies outside galaxy./ +erloc9::asciz /Y coordinate lies outside galaxy./ +error1::asciz /ERROR detected by computer!! You have attempted +to use your present location./ +error2::asciz /ERROR! Own location used!/ +federa::asciz /Federation/ +fedbas::asciz /Federation base/ +fedpln::asciz /Federation planet/ +fedshp::asciz /Federation ship/ +forhlp::asciz / -- for help type HELP/ +free01::asciz /Sorry, but your ship is in use!/ +free02::asciz /Sorry, but your spot on the board is taken!/ +impdam::asciz /Impulse engines damaged./ +inform::asciz /Informative / +ingame::asciz / in game/ +inrang::asciz / in range/ +inspra::asciz / in specified range/ +known:: asciz / known/ +lifdam::asciz / +WARNING!! Life Support damaged. +Reserves of / +lngfrm::asciz /Long / +lsts01::asciz /Null group illegal/ +lsts02::asciz /Illegal keyword / +lsts03::asciz /Syntax error near keyword / +lsts04::asciz /Illegal coordinate / +lstf01::asciz /Captain, our sensors can't scan as far as / +lstf02::asciz /No base / +lstf03::asciz /No planet / +lstf04::asciz /No target / +lstf05::asciz /The Romulan is dead/ +lstf06::asciz /Captain, there are no/ +lstf07::asciz /No/ +lstf08::asciz / neutral/ +lstf09::asciz / Federation/ +lstf10::asciz / Empire/ +lstf11::asciz / captured/ +lstf12::asciz / enemy/ +lstf13::asciz / planets/ +lstf14::asciz / bases/ +lstf15::asciz / ships/ +lstf16::asciz / ports/ +lstf17::asciz / forces/ +main02::asciz /RUNS OUT OF ENERGY!!/ +medfrm::asciz /Medium / +mess01::asciz / +Message from / +mess02::asciz /to / +move1A::asciz /Captain, the impulse engines won't take it. / +move1B::asciz /Maximum speed warp 1./ +move2L::asciz /Captain, our warp engines are damaged. I can only give you warp 3./ +move2S::asciz /Engines damaged, warp 3 max./ +move3L::asciz /Engineering Officer: The engines won't take it Captain. +I can only give you warp / +move3S::asciz /Maximum warp / +move5L::asciz /Captain, our engines are overheating!/ +move5S::asciz /Engines overheating./ +move06::asciz /EEEEERRRRRROOOOOOOMMMMMmmmmm!! +Captain, the engines suffered / +move08::asciz / units of damage./ +move09::asciz /Captain, repairs will take approximately / +move10::asciz / +Navigation Officer: "Collision averted, Captain!"/ +neupln::asciz /neutral planet/ +nocomp::asciz /Computed coordinates are not supported for fast terminals./ +noplnt::asciz / +No planet at those coordinates, Captain./ +normal::asciz /Normal / +noquit::asciz /Use QUIT to terminate while under RED alert./ +noship::asciz /Player not in game./ +nosur1::asciz / +But Captain, he's already on our side!/ +nosur2::asciz / +Captain, the enemy refuses our surrender ultimatum!/ +nosur3::asciz / +Captain, the Romulan refuses to surrender!/ +nosur4::asciz / +Capture THAT?? You have GOT to be kidding!!/ +outh01::asciz /novas/ +outh02::asciz /makes/ +outh03::asciz / unit / +outh04::asciz /hit on / +outh05::asciz /torpedo hit on / +outh06::asciz /phaser hit on / +outh07::asciz /damaged / +outh08::asciz /dam / +outh09::asciz / displaced by blast into BLACK HOLE!/ +outh10::asciz / -> BH/ +outh12::asciz / lost / +outh13::asciz / miss / +outh14::asciz / swallowed by black hole / +outh15::asciz / gulp / +outh16::asciz / is under attack, Captain./ +outh17::asciz / attacked/ +outh18::asciz / has been destroyed, Captain./ +outh19::asciz / dead/ +outh20::asciz /detected/ +outh21::asciz / transfers / +outh22::asciz / units of energy to the / +outh23::asciz / +Tractor beam activated, Captain./ +outh24::asciz /Trac. Beam on/ +outh25::asciz / +Tractor beam broken, Captain./ +outh26::asciz /Trac. Beam off/ +outh27::asciz / neutralized by friendly object / +outh28::asciz / neutralized / +outh29::asciz /deflected T/ +outh30::asciz /has torpedo deflected by / +outh31::asciz /Critical hit on starbase, shields down!/ +outh32::asciz /Starbase attempts to re-establish shields using emergency power!/ +outh33::asciz /Base shields RE-ESTABLISHED!!/ +outh34::asciz /Base FAILS to re-establish shields........BOOM!! / +phacn0::asciz /Phasers critically damaged./ +phacn1::asciz /Target out of range./ +phacn2::asciz /High speed shield control activated./ +phacn3::asciz /SHIELDS USE UP LAST OF ENERGY!/ +phacn4::asciz /WARNING! WARNING! PHASERS OVERHEATING./ +phacn5::asciz /********** CRACKLE! POP! SIZZLE! POOF! ********** +PHASERS DAMAGED./ +phacn7::asciz / +Phaser control unable to lock on target, Captain./ +phacn8::asciz / +Weapons Officer: Improper energy consumption for phaser hit, Captain./ +phacn9::asciz / +Weapons Officer: Attempting to hit friendly object, Captain./ +poi03S::asciz / +Tot Pts / +poi03L::asciz / +Total points: / +poin04::asciz / +Incorrect input, POINTS aborted./ +poi05S::asciz | +Pts / Pl | +poi05L::asciz | +Pts. / player: | +poi06S::asciz | +Pts / SD | +poi06L::asciz | +Pts. / stardate: | +poi07S::asciz / +# of shps/ +poi07L::asciz / +Number of ships:/ +poi11S::asciz /Dam E's / +poi11L::asciz /Damage to enemies / +poi12S::asciz /E's dest / +poi12L::asciz /Enemies destroyed / +poi13S::asciz /Dam B's / +poi13L::asciz /Damage to bases / +poi14S::asciz /@'s capt / +poi14L::asciz /Planets captured / +poi15S::asciz /B's built/ +poi15L::asciz /Bases built / +poi16S::asciz /Dam ??'s / +poi16L::asciz /Damage to Romulans/ +poi17S::asciz /*'s dest / +poi17L::asciz /Stars destroyed / +poi18S::asciz /@'s dest / +poi18L::asciz /Planets destroyed / +poin19::asciz / (-100)/ +poin20::asciz / ( -50)/ +poin21::asciz / ( 100)/ +poin22::asciz / ( 500)/ +poin23::asciz / (1000)/ +radio0::asciz /Turn radio ON or OFF, GAG or UNGAG individual ship? / +radio1::asciz /Radio / +radio2::asciz /Ship name: / +radio3::asciz /Radio / +radgag::asciz /Radio gagged against / +radoff::asciz /Radio turned off, Captain./ +radon0::asciz /Radio turned on, Captain./ +radung::asciz /Radio ungagged against / +relfrm::asciz /Relative / +romadv::asciz /advances to / +romula::asciz / Romulans/ +set001::asciz / +Name, Output, Ttytype, Prompt, Scans, +Input or Output location defaults (ICDEF, OCDEF)? / +set002::asciz / +Desired name: / +set003::asciz / +Short, Medium, or Long output? / +set004::asciz / +Normal or Informative command prompt? / +set005::asciz / +Short or Long scans? / +set006::asciz / +Absolute or Relative default for location input? / +set007::asciz / +Absolute, Relative, or Both for location output? / +set008::asciz /Terminal type: / +set009::asciz / +Ambiguous TTY type. / +set010::asciz /Supported TTY types are:/ +setu06::asciz /There are Romulans in this game./ +setu07::asciz /There are Black holes in this game./ +shld01::asciz /Transfer, Up, Down ? / +shld02::asciz /Units of energy to transfer to shields: / +shld03::asciz /Transferring all ship energy to shields. Confirm? / +shld04::asciz /Energy NOT transferred./ +shld05::asciz /Energy transferred, Captain./ +shld06::asciz /Shields raised, Captain./ +shld07::asciz / +Shield control uses remaining ship energy!/ +shld08::asciz /Shields lowered, Captain./ +shld09::asciz /Captain, unable to raise shields due to critical damage./ +shtfrm::asciz /Short / +star02::asciz / UNAFFECTED by Photon Torpedo!/ +stat2L::asciz /Stardate / +stat2M::asciz /SDate / +stat3L::asciz /Shields / +stat3M::asciz /Shlds / +stat05::asciz / units/ +stat6L::asciz /Location / +stat6M::asciz /Loc / +stat7L::asciz /Condition / +stat7M::asciz /Cond / +stat8L::asciz /Torpedoes / +stat8M::asciz /Torps / +stat9L::asciz /Energy left / +stat9M::asciz /Ener / +sta10L::asciz /Damage / +sta10M::asciz /Dam / +stat11::asciz /damaged/ +strdat::asciz / stardates./ +sure00::asciz / +Do you really want to quit? / +syntax::asciz /%Syntax error/ +tell01::asciz / +Sub-Space radio damaged./ +tell02::asciz / +To ship: / +tell03::asciz / +Unrecognized player or group name: / +tell04::asciz / +Ambiguous group name: / +tell05::asciz / +Self excluded from message./ +tell06::asciz / +Player is not in the game: / +tell07::asciz / +Communications: Captain, we cannot raise the / +tell08::asciz / +No message sent./ +tell09::asciz / +Wake up, Captain, I just sent that message!/ +time01::asciz / +Game's elapsed time: / +time02::asciz / +Ship's elapsed time: / +time03::asciz / +Run time in game: / +time04::asciz / +Job's total run time: / +time05::asciz / +Current time of day: / +tormis::asciz /Weapons Officer: Captain, torpedo / +torp00::asciz /Torpedo tubes critically damaged./ +torp01::asciz /You have already used your supply of torpedoes!/ +torp02::asciz /Number in burst (1-3) and / +torp03::asciz /Insufficient torpedoes for burst!/ +torp04::asciz /Torpedo / +torp05::asciz / MISFIRES!/ +torp06::asciz /PHOTON TUBES DAMAGED!/ +torp07::asciz / torpedoes left./ +tract1::asciz /Ship to apply tractor beam to: / +tract2::asciz /Tractor beam not in operation at this time, Captain./ +tract3::asciz /Tractor beam already active, Captain./ +tract4::asciz /Beg your pardon, Captain? You want to apply a tractor +beam to your own ship?/ +tract5::asciz /Can not apply tractor beam to enemy ship./ +tract6::asciz /already has tractor beam active./ +tract7::asciz /Can not apply tractor beam through shields, Captain./ +tract8::asciz /has his shields up. Unable to apply tractor beam./ +ttys00::asciz /ACT-IV ADM-2 ADM-3a DATAPOINT +ACT-V SOROC BEEHIVE CRT/ +type01::asciz / +Do you wish to see the OUTPUT or OPTION switches? / +type02::asciz / +Current output switch settings:/ +type03::asciz /output format./ +type04::asciz /command prompt./ +type05::asciz /SCAN format./ +type06::asciz /Romulans are NOT in this game./ +type07::asciz /Black holes are NOT in this game./ +type08::asciz /coordinates are default for input./ +type09::asciz /coordinates are default for output./ +units1::asciz / units/ +unkcom::asciz /Unknown command/ +unkshp::asciz /Unknown ship name./ +unkswi::asciz /Unknown switch/ +users1::asciz /Ship Captain Baud User ID TTY Job/;pretty changes drforbin(Merlyn) +users2::asciz / Location/ +users3::asciz / +---- ------- ----- --- --- ---/ +users4::asciz / --------/ +users5::asciz /----/ +wrpdam::asciz /Warp engines damaged./ + + end diff --git a/pdp10/utexas/PARAM.FOR b/pdp10/utexas/PARAM.FOR new file mode 100644 index 0000000..d907a0e --- /dev/null +++ b/pdp10/utexas/PARAM.FOR @@ -0,0 +1,188 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + implicit integer (a-z) + +!;; General constants used by DECWAR + + parameter knplay=10 !maximum number of players (can't be increased) + parameter knbase=10 !initial number of bases on each side + parameter kgalv=75 !maximum Vertical coordinate in galaxy + parameter ksid=25 !# of words to hold compressed row of galaxy + parameter kgalh=75 !maximum Horizontal coordinate in galaxy + parameter brdsiz=1875 !board size (kgalv * kgalh / 3) + parameter knplnt=60 !maximum number of planets +! kmnpln==20 ;minimum number of planets +! kmxpln==80 ;maximum number of planets + parameter kndev=9 !number of devices + parameter kpass='*MINK' !password for system (*) commands + parameter knmsg=32 !maximum number of messages in queue + parameter msglen=17 !max # of words per msg (header + 80 chars) + parameter kngrp=7 !number of defined message groups + parameter knhit=64 !maximum number of hits in queue + parameter kncmd=33 !number of available commands + parameter knpcmd=16 !number of available commands in PREGAM + parameter knpoin=8 !number of different scoring categories + parameter knxtr=8 !# of things besides commands HELP knows + parameter kscmd=2 !number of * (system) commands + parameter kmaxtk=15 !max number of tokens to scan per input line + parameter kntty=8 !number of TTY types supported + parameter krange=10 !maximum range of scan, phasers, and torps + parameter kcrit=3000 !amount of device damage deemed critical + parameter kendam=25000 !amount of ship damage deemed fatal + parameter kwait=0 !milliseconds to wait before restart + parameter kcmdtm=2000 !milliseconds to wait for command before loop + parameter kqlen=10 !length of killed queue + parameter maxint="377777777777 !biggest integer + parameter locsiz=200 !size of LOCAL common block + +!;; Token types returned by GTKN + + parameter keol=-1 !end of line + parameter knul=0 !null + parameter kint=1 !integer + parameter kflt=2 !floating point + parameter kalf=3 !alphanumeric + +!;; SHPCON indeces + + parameter kvpos=1 !V coordinate of ships, etc. + parameter khpos=2 !H coordinate of ship, etc. + parameter knturn=3 !number of turns player has taken + parameter kspcon=4 !condition of ship (1=green, 2 = yellow, + ! 3=red) + parameter kntorp=5 !number of torps remaining + parameter kshcon=6 !condition of shields (1=up, -1=down) + parameter klfsup=7 !life support reserves in stardates + parameter ksnrgy=8 !units of ship energy remaining + parameter ksdam=9 !amount of ship damage + parameter ksshpc=10 !shield % + +!;; SCORE indeces + + parameter kpedam=1 !points for damage to enemy + parameter kpekil=2 !points for enemies killed + parameter kpbdam=3 !points for damage to bases + parameter kppcap=4 !points for planets captured + parameter kpbbas=5 !points for building bases + parameter kprkil=6 !points for Romulans killed + parameter knsdes=7 !numbers of stars destroyed + parameter knpdes=8 !number of planets destroyed + +!;; SHPDAM indeces + + parameter kdshld=1 !damage to shields + parameter kdwarp=2 !damage to warp engines + parameter kdimp=3 !damage to impulse engines + parameter kdlife=4 !damage to life support + parameter kdtorp=5 !damage to photon torpedo tubes + parameter kdphas=6 !damage to phasers + parameter kdcomp=7 !damage to computer + parameter kdrad=8 !damage to radio + +!;; JOB constants + + parameter knjbst=9 !total number of job status words + parameter kjob=1 !job number + parameter knam1=2 !first half of SIXBIT user name + parameter knam2=3 !second half of SIXBIT user name + parameter kppn=4 !PPN + parameter kttyn=5 !TTY # + parameter kttysp=6 !TTY speed + parameter kttytp=7 !TTY type + parameter kjobtm=8 !daytime at start up of present ship + parameter kruntm=9 !run time at start up of present ship + +!;; Bits used by LIST + + parameter nambit="000001 !ship name + parameter prtbit="000002 !PORT + parameter shpbit="000004 !SHIP + parameter basbit="000010 !BASE + parameter plnbit="000020 !PLANET + parameter crdbit="000040 !coordinate + + parameter fedbit="000100 !FEDERATION, HUMAN + parameter empbit="000200 !EMPIRE, KLINGON + parameter rombit="000400 !ROMULAN + parameter neubit="001000 !NEUTRAL + parameter capbit="002000 !CAPTURED + parameter allbit="004000 !ALL + parameter rngbit="010000 !range + parameter clsbit="020000 !CLOSEST + + parameter sumbit="040000 !SUMMARY + parameter lstbit="100000 !LIST + parameter outmsk="140000 !SUMMARY|LIST + + parameter irnbit="000001 !in range + parameter isrbit="000002 !in specified range + parameter igmbit="000004 !in game + parameter ornbit="000010 !out of range + parameter pasbit="000020 !selected only because password is set + parameter knobit="000040 !only known about because it's been scanned + + parameter sidmsk="003700 !fedbit|empbit|neubit|rombit|capbit + parameter objmsk="000077 !nambit|crdbit|basbit|shpbit|plnbit|prtbit + +!;; Ship conditions + + parameter green=1 + parameter yellow=2 + parameter red=3 + +!;; OFLG values + + parameter short=-1 !use short format output + parameter medium=0 !use medium format output + parameter long=1 !use long format output + +!;; ICFLG/OCFLG values + + parameter krel=-1 !default to relative coordinates + parameter kboth=0 !output both relative and absolute coords + parameter kabs=1 !default to absolute coordinates + +!;; Codes for commands that are entry points in the LIST command + + parameter lstcmd=0 !LIST + parameter sumcmd=1 !SUMMARY + parameter bascmd=2 !BASES + parameter plncmd=3 !PLANETS + parameter tarcmd=4 !TARGETS + +!;; DISP constants + + parameter dxmpty=0 !empty space + parameter dxfshp=1 !federation ship + parameter dxeshp=2 !empire ship + parameter dxfbas=3 !feceration base + parameter dxebas=4 !empire base + parameter dxrom=5 !romulan ship + parameter dxnpln=6 !neutral planet + parameter dxfpln=7 !federation planet + parameter dxepln=8 !empire planet + parameter dxstar=9 !star + parameter dxbhol=10 !black hole + + real ran,pwr + + + diff --git a/pdp10/utexas/SETEXT.FOR b/pdp10/utexas/SETEXT.FOR new file mode 100644 index 0000000..f43009c --- /dev/null +++ b/pdp10/utexas/SETEXT.FOR @@ -0,0 +1,59 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + + external backup !) 10,10,10,10,10,10,10,10,0,! + external kilch4 !You are scheduled for reincarnation in ! + external kilch5 ! minutes and ! + external kilch6 ! seconds.! + external kilch8 !! + !Time left: ! + external maicom !This command unavailable in Pre-game ! + external nogal1 !This particular galaxy has been depopulated!!! + !Please try again. A new battle is forming now!!! + external pgame1 !! + !Now entering DECWAR Pre-game, type Activate to enter/reenter game.! + external ptywrn !DECWAR may not be played from a PTY.! + external setu01 !Sorry, but all ships are in use. Try again later.! + external setu02 !Regular or Tournament game? (Regular) ! + external setu03 !Tournament name or number: ! + external setu04 !! + !Is the Romulan Empire involved in this conflict? (yes) ! + external setu05 !! + !Do you want black holes? (no) ! + external setu11 !! + !You will join the forces of the Federation.! + external setu12 !! + !You will join the forces of the Klingon Empire.! + external setu13 !! + !The following vessels are available for you to use.! + external setu14 !! + !Which vessel do you wish to command? ! + external setu15 !! + !Sorry, that vessel is being used.! + external setu16 !! + !Currently there are ! + external setu17 ! Federation ships and ! + external stu17a ! Empire ships. ! + external setu18 !Which side do you wish to join? (Federation or Empire) ! + external strtup !! + !Type HELP for help, PREGAME to enter Pre-game, or . ! + + + diff --git a/pdp10/utexas/SETMSG.MAC b/pdp10/utexas/SETMSG.MAC new file mode 100644 index 0000000..1ba02b3 --- /dev/null +++ b/pdp10/utexas/SETMSG.MAC @@ -0,0 +1,67 @@ +; This file is part of Decwar. +; Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +; Computation Center and Harris Newman. + +; This program 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 3, or (at your option) +; any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; 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., 51 Franklin Street - Fifth Floor, Boston, MA +; 02110-1301, USA. + + +title setmsg +backup::byte (7) 10,10,10,10,10,10,10,10,0,7 +kilch4::asciz /You are scheduled for reincarnation in / +kilch5::asciz / minutes and / +kilch6::asciz / seconds./ +kilch8::asciz / +Time left: / +maicom::asciz /This command unavailable in Pre-game / +nogal1::asciz /This particular galaxy has been depopulated!! +Please try again. A new battle is forming now!!/ +pgame1::asciz | +Now entering DECWAR Pre-game; type +ACtivate to enter game.| +ptywrn::asciz /DECWAR may not be played from a PTY./ +setu01::asciz /Sorry, but all ships are in use. +I will start a new game./ +setu02::asciz /Regular or Tournament game? (Regular) / +setu03::asciz /Tournament name or number: / +setu04::asciz / +Is the Romulan Empire involved in this conflict? (yes) / +setu05::asciz / +Do you want black holes? (no) / +setu11::asciz / +You will join the Federation./ +setu12::asciz / +You will join the Klingon Empire./ +setu13::asciz / +These vessels are available:/ +setu14::asciz / +Which vessel do you desire? / +setu15::asciz / +Sorry, that vessel is being used./ +setu16::asciz / +Currently there are / +setu17::asciz / +Federation ships and / +stu17a::asciz / +Empire ships. +/ +setu18::asciz / +Which side do you wish to join? +(Federation or Empire) / +strtup::asciz / +Enter HELp, PREgame, or blank +line: / + + end diff --git a/pdp10/utexas/SETUP.FOR b/pdp10/utexas/SETUP.FOR new file mode 100644 index 0000000..b5d1ef4 --- /dev/null +++ b/pdp10/utexas/SETUP.FOR @@ -0,0 +1,564 @@ +C This file is part of Decwar. +C Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +C Computation Center and Harris Newman. + +C This program is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Public License as published by +C the Free Software Foundation; either version 3, or (at your option) +C any later version. + +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. + +C You should have received a copy of the GNU General Public License +C along with this program; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +C 02110-1301, USA. + + +C Everything after this routine will be removed from the low- +C segment after the game is started up by KILLOW. + + subroutine A + end + C This routine is called by SETUP if a player types CTL-C before +C he has been completely 'created'. This prevents the player +C from attempting a 'continue' using the existing code. +C CC2 is called instead if he has already chosen a side. + + subroutine CC1 + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + numply = numply - 1 + call unlock (frelok) ! make sure we release the database + call exit + + end +C This routine is called by SETUP if a player types CTL-C before +C he has been completely 'created'. This prevents the player +C from attempting a 'continue' using the existing code. +C CC1 is called instead if he hasnt already chosen a side. + + + subroutine CC2 + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + + numply = numply - 1 + numsid(team) = numsid(team) - 1 + call unlock (frelok) ! make sure we release the database + call exit + + end + C This routine checks all incoming players to see if they have +C previously died in the present game. If so, they are only +C allowed to start the game if they have waited the prescribed +C time, or are implementors of the game and know the password. + + subroutine KILCHK + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + include 'setext/nolist' + external cc1 + common /local/ jobnum, nam1, nam2, ppn, ttynum, ttyspd + + PASFLG = .FALSE. + call kqsrch (ttynum, jobnum, ppn, kindex) + if (kindex .eq. 0) return !This player hasn't been killed + + timlft = KWAIT - etim(kilque(kindex,4)) + if (timlft .le. 0) return !he has been dead long enough + +*.......Inform player of remaining time to wait + + call out (kilch4, 0) + timlft = KWAIT - etim(kilque(kindex,4)) + if (timlft .lt. 1000) timlft = 1000 + timlft = timlft / 1000 + minute = timlft / 60 ; second = mod(timlft,60) + call odec (minute,0) ; call out (kilch5, 0) + call odec (second,0) ; call out (kilch6, 1) + +*.......Countdown to restart, check for password input + + call cctrap(cc1) + call out (kilch8, 0) + call dmpbuf + call echoff + call otim (KWAIT - etim(kilque(kindex,4))) + 100 if (input (min0(5000, timlft))) goto 300 + if (ENDFLG) call endgam + timlft = KWAIT - etim(kilque(kindex,4)) + if (timlft .le. 0) goto 200 + call out (backup,0) + call otim (timlft) + call dmpbuf + goto 100 + 200 call crlf + call echon + return + + 300 call gtkn + call echon + if (equal(tknlst(1),KPASS) .eq. -2) return +C if (lofchk(0)) call monit drforbin(merlyn) + call cc1 + + end + subroutine PREGAM + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + include 'setext/nolist' + common /local/ jobnum, nam1, nam2, ppn, ttynum, ttyspd + + call jobsta (jobnum, nam1, nam2, ppn, ttynum, ttyspd) + if(ccflg) call monit !added by drforbin for ctrl-C bug + + 10 call ttyon + call out (strtup, 0) !PREGAME or + call gtkn + if (CCFLG .or. hungup) call monit +C if (lofchk(0)) call monit drforbin(merlyn)-watch above line + if (ntok .eq. 0) return + + if (.not. equal (tknlst(1), 'HONORROLL')) goto 25 + call shosta (.true.) + goto 10 + +25 if (.not. equal(tknlst(1), 'HELP')) goto 20 + call hlpxtr + call hlpall + call ttyon ; goto 10 + + 20 if (.not. equal(tknlst(1), 'PREGAME')) goto 10 + + call out (pgame1, 1) !inform player he is in Pre-game + !tell him of ACTIVATE command + call out ('Use the HO command to view the honor roll.', 1) +C if (.not. chkpay(0)) goto 50 drforbin(merlyn) + call out('Use the DO command to purchase', 1) + call out('documentation for DECWAR.', 1) + + 50 call xgtcmd (n) !get next command to execute + + goto (100,305,200,300,310,400,500,600,710,700,800,810,900, + + 1000,1100,1200), n + + + 100 call prgnam ('DECWAR') !activate + return + 200 call gripe !gripe + goto 50 + 300 call help !help + goto 50 +C 305 call pdwdoc !drforbin edit +305 call out ('This is where CompuServe rips you off for + + Documentation!',1) +C 305 if (chkpay(0)) call pdwdoc drforbin(merlyn) ! print DECWAR.DOC + goto 50 ! purchase DECWAR documentation + 310 call shosta (.true.) ! Honor Roll + goto 50 + 400 call news !news + goto 50 + 500 call points (.FALSE.) !points + goto 50 + 600 call monit !quit + goto 50 + 710 call set ! set + goto 50 + 700 call summar !summary + goto 50 + 800 call time !time + goto 50 + 810 call type ! type + goto 50 + 900 call users !users + goto 50 +1000 call debug !*debug + goto 50 +1100 call paswrd !*password + goto 50 + +1200 if (pasflg) call stazap + goto 50 + end + C This routine is called whenever a new player enters the game. +C If he is the first player, the Romulan and black hole options +C are discussed, and the Universe and other high-segment variables +C are initialized. Later players are told whether the Romulan or +C black holes are present in the game, and their high-segment +C areas are setup for play. It is not possible to continue a +C game which was CTL-C while still in SETUP. + + subroutine SETUP + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + include 'setext/nolist' + external cc1 !^C trap routine to prevent continuing + external cc2 !^C trap routine during ship selection + external trap !^C trap routine to allow continuing + external clrbuf !^C trap routine to clear input buffer + common /local/ jobnum, nam1, nam2, ppn, ttynum, ttyspd + data numply /0/ !these aren't constants! + data numsid(1), numsid(2) /0, 0/ + data tim0 /-1/ + + who = 0 + call frcchk ! force scan of jobsequence numbers + call crlf + call jobsta (jobnum, nam1, nam2, ppn, ttynum, ttyspd) + if (numply .ne. KNPLAY) goto 100 + call out (setu01, 1) !all ships in use + call kilhgh ! remove high seg from swapper + call start ! try a run to new segment + call exit + + + 100 call cctrap !turn off ^C +101 call lock (frelok) ! lock out other users + if (hungup .or. ccflg) call exit ! get out if ^C or hung up + if (lkfail) goto 101 ! we must lock others out! + numply = numply + 1 !number of players + if (CCFLG .or. hungup) call cc1 + call cctrap(cc1) + + call setran (daytim (d)) + if (tim0 .lt. 0) goto 200 + if ((numply .ne. 1) .or. ((hitime-daytim(d)) .gt. 0)) goto 1200 !universe already set up? + 200 call blkset (hfz, 0, locf(hlz) - locf(hfz) + 1) + tim0 = daytim (d) !get initial start time + +*.......Regular or Tournament game? + + call setqh ; call setqm !set up the hit and message queues +C goto 600 !set to enable choice (drforbin) + 300 call out (setu02, 0) + call gtkn + if (CCFLG) goto 700 !in case the user typed ^C + if (hungup) call cc1 +C if (lofchk(0)) call cc1 drforbin(merlyn) + if (typlst(1) .eq. KEOL) goto 600 + if (equal (tknlst(1), 'TOURNAMENT')) goto 400 + if (equal (tknlst(1), 'REGULAR')) 600, 300 + 400 i = 2 + if (typlst(2) .ne. KEOL) goto 500 + i = 1 + call out (setu03, 0) + call gtkn + if (CCFLG) goto 700 + if (hungup) call cc1 +C if (lofchk(0)) call cc1 drforbin(merlyn) + 500 call setran (iabs(tknlst(i))) + +*.......Romulan option? + +600 ROMOPT = .TRUE. +C 601 call out (setu06, 1) !added drforbin +C goto 700 !added by drforbin + call out (setu04, 0) + call gtkn + if (CCFLG) goto 700 + if (hungup) call cc1 +C if (lofchk(0)) call cc1 drforbin(merlyn) + if (typlst(1) .eq. KEOL) goto 700 + if ((.not. equal(tknlst(1), 'YES')) .and. + + (.not. equal(tknlst(1), 'NO'))) goto 600 + if (equal (tknlst(1), 'NO')) ROMOPT = .FALSE. + +*.......Initialize universe + + 700 ROM = .FALSE. + do 800 j = 1 , 2 + do 800 i = 1 , KNBASE + base(i,3,j) = 1000 + base(i,4,j) = j + 800 continue + nbase(1) = 10 + nbase(2) = 10 + call blkset (alive, 1, KNPLAY) + +*.......Determine number of stars and insert bases and planets. + + nstar = int(51 * ran(0)) * 5 + 100 + nhole = int(41.0 * ran(0) + 10) +c-- nplnet = int(20.0 + ran(0) * 61.0) + nplnet = 60 ! ALWAYS insert max. # of planets + do 900 i = 1 , KNBASE + call place (((DXFBAS*100) + i), 1, base(i,KVPOS,1), + + base(i,KHPOS,1)) + call place (((DXEBAS*100) + i), 1, base(i,KVPOS,2), + + base(i,KHPOS, 2)) + 900 continue + do 1000 i = 1 , nplnet + call place (((DXNPLN*100) + i), 1, locpln(i,KVPOS), + + locpln(i,KHPOS)) +1000 continue + call place (dxstar*100, nstar, dm1, dm2) + if (CCFLG .or. hungup) goto 1400 + +*.......Black hole option? +C all comments below inserted by drforbin +C BLHOPT = .FALSE. +C if (ran(0) .lt. 0.75) goto 1400 +C blhopt = .true. +C call out (setu07, 1) +C goto 1400 + +1100 call out (setu05, 0) + call gtkn + if (CCFLG .or. hungup) goto 1400 +C if (lofchk(0)) goto 1400 drforbin(merlyn) + if (typlst(1) .eq. KEOL) goto 1400 + if (.not. (equal(tknlst(1), 'YES') .or. + + equal(tknlst(1), 'NO'))) goto 1100 + if (equal (tknlst(1), 'YES')) BLHOPT = .TRUE. + if (BLHOPT) call place ((DXBHOL*100), nhole, i, j) + goto 1400 + +*.......Inform later players of type of game set up + +1200 if (.not. ENDFLG) goto 1300 + call kilhgh + call out (nogal1,1) + call exit + +1300 continue + if (ROMOPT) call out (setu06,1) + if (BLHOPT) call out (setu07,1) + +*.......Set up individual player + +1400 if (CCFLG .or. hungup) call cc1 !let him out if he typed ^C already + call cctrap (CC1) !exit on ^C, but zero the guy out first + +*.......Determine which side he will go on. + + ttytyp = 8 + call kqsrch (ttynum, jobnum, ppn, kindex) + if (kindex .eq. 0) goto 1600 + team = kilque(kindex,5) .and. "777777 + who = kilque(kindex,5)/"1000000 + if (numsid(team) .lt. knplay/2) goto 1410 + if(team.eq.1)call out('Sorry, Captain, but the Federation', 1) + if(team .eq. 2) call out ('Sorry, Captain, but the Empire', 1) + call out ('fleet is at capacity.', 1) + call out ('Do you wish to defect? ',0) + call gtkn + if (ccflg .or. hungup) call cc1 +C if (lofchk(0)) call cc1 drforbin(merlyn) + if (typlst(1) .eq. keol) call cc1 + if (equal (tknlst(1), 'YES')) goto 1401 + call cc1 +1401 team = team + 1 + if (team .eq. 3) team = 1 + goto 1900 ! he has defected + +1410 if (alive(who) .gt. 0) goto 1420 ! keep same ship if possible + call out ('Sorry, Captain, but the', 0) + call out2w (names(who, 1), names(who, 2)) + call crlf + call out ('has been reassigned.', 1) + call out ('Do you wish to choose another ship? ', 0) + call gtkn + if (ccflg .or. hungup) call cc1 +C if (lofchk(0)) call cc1 drforbin(merlyn) + if (typlst(1) .eq. keol) call cc1 + if (equal (tknlst(1), 'YES')) goto 1900 + call cc1 + +1420 call cctrap(0) ! clear ^C trap + numsid(team) = numsid(team) + 1 + numshp(team) = numshp(team) + 1 + call cctrap (cc2) + if (ccflg .or. hungup) call cc2 ! get out + goto 2500 + +1600 call out (setu16,0) + call odec (numsid(1),0) + call out (setu17,0) + call odec (numsid(2),0) + call out (stu17a, 0) + if (iabs (numsid(1) - numsid(2)) .lt. 2) goto 1700 + team = 1 + if (numsid(1) .gt. numsid(2)) team = 2 + goto 1900 +1700 call out (setu18,0) + call gtkn + if (CCFLG .or. hungup) call cc1 +C if (lofchk(0)) call cc1 drforbin(merlyn) + if (.not. (typlst(1) .eq. KEOL)) goto 1800 + team = 1 + if (numsid(1) .gt. numsid(2)) team = 2 + goto 1900 +1800 if (.not. (equal(tknlst(1), 'FEDERATION') .or. + + equal(tknlst(1), 'EMPIRE'))) goto 1700 + team = 1 + if (equal (tknlst(1), 'EMPIRE')) team = 2 +1900 call cctrap(0) ! kill ^C trap + numsid(team) = numsid(team) + 1 + numshp(team) = numshp(team) + 1 + call cctrap (CC2) + if (ccflg .or. hungup) call cc2 + if (team .eq. 2) goto 2000 + call out (setu11,1) + ibeg = 1 + iend = KNPLAY / 2 + goto 2100 +2000 call out (setu12,1) + ibeg = (KNPLAY / 2) + 1 + iend = KNPLAY +2100 call out (setu13,2) + do 2200 i = ibeg , iend + if (alive(i) .le. 0) goto 2200 + call out2w (names(i,1), names(i,2)) + call crlf +2200 continue + call out (setu14,0) + call gtkn + if (CCFLG .or. hungup) call cc2 +C if (lofchk(0)) call cc2 drforbin(merlyn) + do 2300 who = 1, KNPLAY + if (equal (tknlst(1), names(who,1))) goto 2400 +2300 continue + goto 2100 +2400 if ((who .lt. ibeg) .or. (who .gt. iend)) goto 2100 + if (alive(who) .gt. 0) goto 2500 + call out (setu15,1) + goto 2100 + +*.......Initialize player's high and low-segments + +2500 call unlock(frelok) ! release the interlock + call updcap (who) ! update mission # + do 2501 i = 1, knpoin ! zap his score +2501 score(i, who) = 0 + alive(who) = .TRUE. !reserve his chosen ship + + group (1,1) = 'ALL' ; group (1,2) = "1777 + group (2,1) = 'KLINGON' ; group (2,2) = "1740 + group (3,1) = 'EMPIRE' ; group (3,2) = "1740 + group (4,1) = 'HUMAN' ; group (4,2) = "000037 + group (5,1) = 'FEDERATION' ; group (5,2) = "000037 + group (6,1) = 'FRIENDLY' ; group (6,2) = group (5-team,2) + group (7,1) = 'ENEMY' ; group (7,2) = group (2+team,2) + + call cctrap (clrbuf) !clear input buffer on ^C + call jobsta ( + + job(who,KJOB), + + job(who,KNAM1), + + job(who,KNAM2), + + job(who,KPPN), + + job(who,KTTYN), + + job(who,KTTYSP) + + ) + job(who,KTTYTP) = ttytyp + job(who,KJOBTM) = daytim (d) + job(who,KRUNTM) = runtim (d) + do 2600 i = 1, 10 + shpcon(who,i) = 0 +2600 continue + do 2700 i = 1, KNDEV + shpdam(who,i) = 0 +2700 continue + ttyspd = 9600 + do 2800 i = 1 , KNPLAY + if (.not. alive(who)) goto 2800 + if (job (i,KTTYSP) .lt. ttyspd) ttyspd = job(i,KTTYSP) +2800 continue + if (ttyspd .le. 1200) slwest = 3 + if (ttyspd .eq. 1200) slwest = 2 + if (ttyspd .gt. 1200) slwest = 1 + if (ttyspd .eq. 0) slwest = 1 + shpcon(who,KSPCON) = GREEN + shpcon(who,KNTORP) = 10 + shpcon(who,KSHCON) = 1 + shpcon(who,KLFSUP) = 5 + shpcon(who,KSNRGY) = 50000 + shpcon(who,KSSHPC) = 1000 + + return + + end + C This routine processes command strings during the pre-game +C (before a side and ship have been chosen). + + subroutine XGTCMD (cmd) + include 'param/nolist' + include 'hiseg/nolist' + include 'lowseg/nolist' + include 'extern/nolist' + include 'setext/nolist' + dimension precmd(2,KNPCMD) + data ((precmd(i,j), i = 1, 2), j = 1, KNPCMD)/ + + 'Activ', 'ate ', + + 'DOcum', 'ent ', + + 'Gripe', ' ', + + 'Help ', ' ', + + 'HOnor', 'roll ', + + 'News ', ' ', + + 'Point', 's ', + + 'Quit ', ' ', + + 'Set ', ' ', + + 'Summa', 'ry ', + + 'TIme ', ' ', + + 'TYpe ', ' ', + + 'Users', ' ', + + '*Debu', 'g ', + + '*Pass', 'word ', + + '*Zap ', ' '/ + + 100 call crlf + CCFLG = .FALSE. + call out2c ( 'PG' ) ; call out2c ( '> ' ) + call dmpbuf !dump output buffer + 200 if (input(10000)) goto 400 !command input? + goto 200 + + 400 call gtkn + if (CCFLG .or. hungup) call monit !^C was typed +C if (lofchk(0)) call monit drforbin(merlyn) ! time is up! + if (typlst(1) .eq. KEOL) goto 100 + cmd = 0 + + do 700 i = 1, KNPCMD !identify command + if (.not. (equal(tknlst(1), precmd(1,i)))) goto 700 + if (cmd .ne. 0) goto 800 + cmd = i + 700 continue + if (cmd) 800,900,1300 !will never take the neg branch + + 800 call out (ambcom, 0) !input is ambiguous + goto 1200 + + 900 do 1000 i = 1, KNCMD !a 'main-game command only? + if (equal(tknlst(1), isaydo(1,i))) goto 1100 +1000 continue + call out (unkcom, 0) !input is trash! + goto 1200 + +1100 call out (maicom, 0) !input not valid in pre-game +1200 call out (forhlp, 1) + goto 100 + +1300 return + + end + C When DECWAR is STARTed, the startup routine will ensure that +C all code through Z is present, else DECWAR will be run over +C again. + + subroutine Z + end diff --git a/pdp10/utexas/WARMAC.MAC b/pdp10/utexas/WARMAC.MAC new file mode 100644 index 0000000..494a446 --- /dev/null +++ b/pdp10/utexas/WARMAC.MAC @@ -0,0 +1,6574 @@ +; This file is part of Decwar. +; Copyright 1979, 2011 Bob Hysick, Jeff Potter, The University of Texas +; Computation Center and Harris Newman. + +; This program 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 3, or (at your option) +; any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; 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., 51 Franklin Street - Fifth Floor, Boston, MA +; 02110-1301, USA. + + + title WARMAC -- MACRO support routines for DECWAR.FOR + + %deb%==-1 + + twoseg + search UUOSYM,MACTEN + sall + .directive flblst + + + subttl Macro definitions + + ;added date macro drforbin + define dacon(cndat,day,month,year)< + idivi cndat,^D31 + addi t2,1 + movem t2,day + idivi cndat,^D12 + addi t2,1 + movem t2,month + addi cndat,^D1964 + subi cndat,^D2000 + movem cndat,year + > + + + + +;;; ASCIL -- Define an ASCII string with tacked on the end. +; + define ascil (txt), < + asciz `txt +` + > + +;;; WARN -- Dump TTY buffer and output warning message. Go to addr (if +; given), else continue in sequence. +; + define warn (txt,addr<.+1>), < + jrst [skipn hungup ; if not hungup + output tty, ; then flush the tty buffer + skipn hungup + outstr [ascil <%'txt>] + jrst addr + ] + > + +;;; ERR -- Dump TTY buffer, output error message, and exit. Go to +; addr on CONTINUE (else if addr is blank, exit again). +; + define err (txt,addr<.-1>), < + jrst [skipn hungup + output tty, + skipn hungup + outstr [ascil ] + jrst monit + ] + > + +;;; SAVE -- Save data on argument stack (S). +; + define save (addr), < + xlist + irp addr, + list + > + +;;; RESTOR -- Restore data from argument stack (S). +; + define restor (addr), < + xlist + irp addr,< + camn s,[iowd stksiz,stk] + jrst [skipn hungup + outstr [asciz " +???? data stack underflow! +"] + halt .+1 + ] + pop s,addr> + list + > + +;;; COMMON -- Define a FORTRAN compatible common block. Any following +; REAL, INTEGER, or LOGICAL, macros define symbols relative to name. +; + define common (name), < + .common name [1] + comblk=!name + size==0 + > + +;;; REAL -- Define a real scalar or array to be in the most recently +; defined common block. +; + define real (name,size), > + +;;; INTEGER -- Define an integer scalar or array to be in the most recently +; defined common block. +; + define integer (name,size), > + +;;; LOGICAL -- Define a logical scalar or array to be in the most recently +; defined common block. +; + define logical (name,size), > + +;;; ARRAY -- Define an n dimensional array (n >= 0) in the most recently +; defined common block. +; + define array (name,dim), < + name=size+comblk + x..==1 + odim..==1 + f..==0 + irp dim,< + ifdif <:>,< + ife f..,< + x..==x..*odim.. + odim..==dim + > + ifn f..,< + x..==x..* + odim..==1 + f..==0 + > + > + ifidn <:>, + > + x..==x..*odim.. + size==size+x.. + > + +;;; SHOW -- Show value of symbol equated inside a macro. +; + define show (sym), < + exp sym + .org .-1 + > + +;;; FLGBIT -- Define a flag bit in terms of the previoulsy defined flag +; bit. To initialize this macro, set bit..==1. +; + define flgbit (mnemonic), < + mnemonic==bit.. + bit..==bit.._1 + show. mnemonic + > + +;;; GTTAB. -- GETTAB a value into ac. +; + define gttab. (ac,number), < + xlist + move ac,[number] + gettab ac, + halt + list + > + +;;; OSTR -- Output asciz string. +; + define ostr (addr), < + xlist + movei t1,addr + pushj p,ostr. + list + > + +;;; OCHR -- Output character. +; + define ochr (chr), < + xlist + movei c,chr + pushj p,ochr. + list + > + +;;; ARGBLK -- Define a fortran compatible argument block, and load a +; pointer to it into the argument block pointer, arg. +; + define argblk (args), < + t..==0 + irp , + movei arg,[ + -t..,,0 + irp , + ]+1 + > + + lofst.==0 + define local (var), > + define loc1 (var1), + define loc2 (name,size<1>), < + if1, < + name=lowend+lofst. + lofst.==lofst.+size + > + if2, < + name=lowend + lowend=lowend+size + > + > + subttl FORTRAN interface -- parameters + + radix 10 + +;;; General constants used by DECWAR + + knplay==10 ;maximum number of players (can't be increased) + knloks==^d20 ; maximum number of active locks (LOCK./UNLOk.) + knstat==10 ; number of statistic entries retained + knbase==10 ;initial number of bases on each side + kgalv==75 ;maximum Vertical coordinate in galaxy + ksid==25 ;# of words to hold compressed row of galaxy + kgalh==75 ;maximum Horizontal coordinate in galaxy + brdsiz==1875 ;board size (kgalv * kgalh / 3) + knplnt==60 ;maximum number of planets +; kmnpln==20 ;minimum number of planets +; kmxpln==80 ;maximum number of planets + kndev==9 ;number of devices + kpass=="S2K" ;password for system (*) commands + knmsg==32 ;maximum number of messages in queue + msglen==17 ;max # of words per msg (header + 80 chars) + kngrp==7 ;number of defined message groups + knhshp==^d40 ; number of hit queue entries per ship + knhit==knhshp*^d10 ; max number of hit entries + kncmd==33 ;number of available commands + knpcmd==12 ;number of available commands in PREGAM + knpoin==8 ;number of different scoring categories + knxtr==8 ;# of things besides commands HELP knows + kscmd==2 ;number of * (system) commands + kmaxtk==15 ;max number of tokens to scan per input line + kntty==8 ;number of TTY types supported + krange==10 ;maximum range of scan, phasers, and torps + kcrit==3000 ;amount of device damage deemed critical + kendam==25000 ;amount of ship damage deemed fatal + kwait==120000 ;milliseconds to wait before restart + kcmdtm==2000 ;milliseconds to wait for command before loop + kqlen==10 ;length of killed queue + maxint==^o377777777777 ;biggest integer + locsiz==200 ;size of LOCAL common block + +;;; Token types returned by GTKN + + keol==-1 ;end of line + knul==0 ;null + kint==1 ;integer + kflt==2 ;floating point + kalf==3 ;alphanumeric + +;;; SHPCON indeces + + kvpos==1 ;V coordinate of ships, etc. + khpos==2 ;H coordinate of ship, etc. + knturn==3 ;number of turns player has taken + kspcon==4 ;condition of ship (1=green, 2 = yellow, + ; 3=red) + kntorp==5 ;number of torps remaining + kshcon==6 ;condition of shields (1=up, -1=down) + klfsup==7 ;life support reserves in stardates + ksnrgy==8 ;units of ship energy remaining + ksdam==9 ;amount of ship damage + ksshpc==10 ;shield % + +;;; SCORE indeces + + kpedam==1 ;points for damage to enemy + kpekil==2 ;points for enemies killed + kpbdam==3 ;points for damage to bases + kppcap==4 ;points for planets captured + kpbbas==5 ;points for building bases + kprkil==6 ;points for Romulans killed + knsdes==7 ;numbers of stars destroyed + knpdes==8 ;number of planets destroyed + +;;; SHPDAM indeces + + kdshld==1 ;damage to shields + kdwarp==2 ;damage to warp engines + kdimp==3 ;damage to impulse engines + kdlife==4 ;damage to life support + kdtorp==5 ;damage to photon torpedo tubes + kdphas==6 ;damage to phasers + kdcomp==7 ;damage to computer + kdrad==8 ;damage to radio + +;;; JOB constants + + knjbst==9 ;total number of job status words + kjob==1 ;job number + knam1==2 ;first half of SIXBIT user name + knam2==3 ;second half of SIXBIT user name + kppn==4 ;PPN + kttyn==5 ;TTY # + kttysp==6 ;TTY speed + kttytp==7 ;TTY type + kjobtm==8 ;daytime at start up of present ship + kruntm==9 ;run time at start up of present ship + +;;; Bits used by LIST + + nambit==^o000001 ;ship name + prtbit==^o000002 ;PORT + shpbit==^o000004 ;SHIP + basbit==^o000010 ;BASE + plnbit==^o000020 ;PLANET + crdbit==^o000040 ;coordinate + + fedbit==^o000100 ;FEDERATION, HUMAN + empbit==^o000200 ;EMPIRE, KLINGON + rombit==^o000400 ;ROMULAN + neubit==^o001000 ;NEUTRAL + capbit==^o002000 ;CAPTURED + allbit==^o004000 ;ALL + rngbit==^o010000 ;range + clsbit==^o020000 ;CLOSEST + + sumbit==^o040000 ;SUMMARY + lstbit==^o100000 ;LIST + outmsk==^o140000 ;SUMMARY|LIST + + irnbit==^o000001 ;in range + isrbit==^o000002 ;in specified range + igmbit==^o000004 ;in game + ornbit==^o000010 ;out of range + pasbit==^o000020 ;selected only because password is set + knobit==^o000040 ;only known about because it's been scanned + + sidmsk==^o003700 ;fedbit|empbit|neubit|rombit|capbit + objmsk==^o000077 ;nambit|crdbit|basbit|shpbit|plnbit|prtbit + +;;; Ship conditions + + green==1 + yellow==2 + red==3 + +;;; OFLG values + + short==-1 ;use short format output + medium==0 ;use medium format output + long==1 ;use long format output + +;;; ICFLG/OCFLG values + + krel==-1 ;default to relative coordinates + kboth==0 ;output both relative and absolute coords + kabs==1 ;default to absolute coordinates + +;;; Codes for commands that are entry points in the LIST command + + lstcmd==0 ;LIST + sumcmd==1 ;SUMMARY + bascmd==2 ;BASES + plncmd==3 ;PLANETS + tarcmd==4 ;TARGETS + +;;; DISP constants + + dxmpty==0 ;empty space + dxfshp==1 ;federation ship + dxeshp==2 ;empire ship + dxfbas==3 ;feceration base + dxebas==4 ;empire base + dxrom==5 ;romulan ship + dxnpln==6 ;neutral planet + dxfpln==7 ;federation planet + dxepln==8 ;empire planet + dxstar==9 ;star + dxbhol==10 ;black hole + subttl FORTRAN interface -- high segment common block + + common hiseg + + ;High core zeroed out by first player + integer hfz ;first location to zero out +hi.fst==hfz + integer shpcon, ;ship information + integer shpdam, ;damage to ship devices + integer base, ;base information + integer nbase,<2> ;number of federation and klingon bases + integer board, ;board + integer locpln, ;planet info + integer locr,<2> ;romulan position + integer erom ;romulan energy + integer eromo ;initial rom energy + integer rsr,<8> ;romulan scoring info + integer nplnet ;number of existing planets + logical rom ;true if Romulan exists + integer romcnt ;Romulan move counter + integer rtpaus ;Romulan torpedo tube pause time + integer rppaus ;Romulan phaser pause time + integer job, ;various job status information + integer msgflg, ;flag for message routine + integer hitflg, ;flag for MAKHIT, GETHIT + integer numcap,<2> ;number of fed and emp planets + integer romopt ;romulan option flag + integer blhopt ;black hole option flag + integer endflg ;universe is destroyed flag + integer nomsg ;radio off flag + integer tmscor,<2,8> ;team scoring information + integer tim0 ;initial startup time + integer slwest ;class code of slowest terminal + integer kilque, ;list of players recently killed + integer nkill ;current length of killed queue + integer kilndx ;current index into killed queue + integer tmturn,<3> ;total # of turns used by each side + integer numshp,<2> ;total numbers of ships used + integer numrom ;total number of romulans used + integer trstat, ;tractor beam status + integer active, ;dead ship flags + logical alive, ;true if player is alive + integer comknt ;dead ship monitor count + integer hitime ;time to reinitialize HISEG + logical dead ;true if KILHGH already called + integer docked, ;docked flags + integer hlz ;last location to zero out + + ;high core not zeroed out by first player + + integer plnlok ;lock variable for LOCPLN array + integer frelok ;lock variable for FREE routine + integer quelok ;lock variable for queue routines + + integer device, ;device names + integer isaydo,<2,KNCMD> ;mnemonics for commands + integer xhelp,<2,KNXTR> ;extra things help is available for + integer ttydat,<2,KNTTY> ;mnemonics for supported TTYs + integer names, ;names of players + integer bits,<18> ;player's identification bit + ;(powers of 2 table) + integer sbits,<0,:,2> ;flag bits for different sides + integer cmdbts, ;flags commands usable before game + integer numply ;number of active players + integer numsid,<2> ;current # of active ships per side + integer versio ;version number + integer gameno ; game number + integer dotime ; counter for driving base rebuild etc. + integer score, ;ship score information + integer hi.lst ; highest location for remap + + common timers ; block of data for timers + integer timnam,^d50 ; names + integer timcnt,^d50 ; # times used + integer timtot,^d50 ; total time + integer timhi,^d50 ; high time + subttl FORTRAN interface -- low segment common block + + common lowseg + + integer lfz ;first location of LOWSEG + integer ntok ;number of tokens on input line + integer tknlst, ;buffer for tokens from input line + integer vallst, ;numeric values of tokens, else 0 + integer typlst, ;types for corresponding tokens + integer ptrlst, ;pointers to beginning of each token + integer who ;which player you are + integer iwhat ;type of hit for MAKHIT, GETHIT + integer ihita ;size of hit for MAKHIT, GETHIT + integer Vto ;V disp. location for MAKHIT, GETHIT + integer Hto ;H disp. location for MAKHIT, GETHIT + integer Vfrom ;V disp. location for MAKHIT, GETHIT + integer Hfrom ;H disp. location for MAKHIT, GETHIT + integer critdv ;dev. # of crit. hit for MAKHIT, GETHIT + integer critdm ;size of crit. hit for MAKHIT, GETHIT + integer klflg ;killed flag for MAKHIT, GETHIT + integer dispfr ;DISP code of sender of information + integer dispto ;DISP code of receiver + integer dbits ;destination bits for MAKHIT, GETHIT + integer shcnto ;hittee's shield condition + integer shstto ;hittee's shield strength + integer shcnfr ;hitter's shield condition + integer shstfr ;hitter's shield strength + integer shjump ;object displacement flag + integer group, ;player groups for SEND command + integer ngroup ;number of defined groups + integer pasflg ;true if the guy knows the password + integer shtype ;shiptype (1=norm,10=trainer) + integer team ;1 for federation, 2 for empire + logical ccflg ;-1 if ^C while turned off + internal ccflg + logical player ;player / romulan movement flag + integer tpoint, ;points to be stored into SCORE + integer phbank,<2> ;time of last phaser fire + integer tobank ;time of last torpedo fire + integer ptime ;pause after last command in GETCMD + integer prtype ;prompt type (0 = normal) + logical rptflg ;TRUE if command was repeated with $ + integer gagmsg ;mask to gag msgs from individual ships + integer oflg ;output verbosity flag + integer scnflg ;scan verbosity flag + integer ttytyp ;terminal type + integer hcpos ;horizontal cursor position + integer icflg ;default coord input type (abs,rel) + integer ocflg ;default coord out type (abs,rel,both) + integer blank ;number of consecutive blank lines + integer llz ;last location in LOWSEG + integer inwait ; -1 if waiting for input + integer hungup ; -1 if user has hungup + integer addrck ; -1 if address check has occured + integer lkfail ; -1 if a lock request failed + integer terwid ; holds user's terminal width (chars) + + internal inwait,hungup,addrck + subttl FORTRAN interface -- general purpose common block (low seg) + + common local + + integer loc.., + + ;SCAN variables + Hmin==loc..+0 + Hmax==loc..+1 + Vmin==loc..+2 + Vmax==loc..+3 + dH==loc..+4 + dV==loc..+5 + screen==loc..+6 + + ;OSTS.Y variables (Pre-game GRIPE line info) + jobnum==loc..+0 + nam1==loc..+1 + nam2==loc..+2 + ppn==loc..+3 + ttynum==loc..+4 + ttyspd==loc..+5 + + radix 8 + subttl Registers and other constants + + f=0 ;flags + t0=0 ;FORTRAN function value + t1=1 ;temporary + t2=2 + t3=3 + t4=4 + + x1=5 ;must be preserved by low level routines + x2=6 + x3=7 + x4=10 + + c=11 ;character + p1=12 ;byte pointer + p2=13 + + s=15 ;arg save stack + arg=16 + p=17 + + + pdlsiz==50 ;depth of push down list + stksiz==50 ;depth of argument save stack + ntry=^D30 ;# of times to try to access locked routine + slptim=^D100 ;milliseconds to sleep between tries + cmdtim=^D5000 ;milliseconds to sleep between commands + maxcnt==^D80 ;maximum number of characters per line + grpsiz==^D20 ;maximum number of lines in a gripe + + cr=15 ;carriage return + lf=12 ;line feed + sp=40 ;space + + tty==0 ;TTY output channel + nws==1 ;NEWS input channel + hlp==2 ;HELP input channel + grp==3 ;GRIPE I/O channel + ini==4 ;DECWAR.INI input channel + ren==5 ;channel to rename high seg on + sta==6 ; channel for DECWAR.STA + + ;Token flag bits + + tf.num==1 ;token had some leading digits + tf.nnm==2 ;token is non-numeric + tf.eol==4 ;eol was seen after token + tf.chr==10 ;token has characters (isn't null) + tf.sgn==20 ;token has a sign (+/-) + tf.pnt==40 ;token has a decimal point + tf.neg==100 ;token started with a minus sign + + ;File block offsets (see Low Level I/O for a detailed description) + + .fbcio==0 ;addr of char I/O routines + .fbbuf==1 ;addr of buffers + .fbfnc==2 ;channel,,function + .fbios==3 ;data mode + .fbdev==4 ;device + .fbbrh==5 ;addr of buffer ring headers + .fbnbf==6 ;number of buffers + .fbnam==7 ;file name + .fbext==10 ;extension + .fbprv==11 ;protection code + .fbppn==12 ;PPN + .fbsfd==13 ;SFDs + + debug.==-1 ;if nonzero, include error checking and + ;diagnostic prints + dbque.==0 ; -1 to check the queues + dbzer.==0 ; -1 to check for storing zero values in setdsp + db777.==-1 ; -1 to check for storing 7777 in setdsp + subttl low segment data + + reloc 0 + +hand: block 2 ;drforbin +uscbh.: block 2 ;drforbin +save$v: block 1 ; saves contents of $v in havenq +hang$v: block 1 ; saves contents of $v in hang +hangta: block 1 ; save for register ta +hv.lok: block 1 ; set to -1 when enq. request is granted +LVLTBL: block 2 +pdl: block pdlsiz ;push down list +stk: block stksiz ;argument save stack + + ;Info needed to rename/delete program binary +p.nam: block 1 ;filename +p.ppn: block 1 ;PPN +p.dev: block 1 ;device + +echflg: block 1 ;-1 if echoing is currently off, else 0 +iniflg: block 1 ;-1 if input from DECWAR.INI, else 0 + +scale: block 1 ;scale factor used by ANUM. + +ccflg.::block 1 ;used to unstack multiple cmds/line on ^C +bufptr: block 1 ;pointer to input buffer, or -1 +chrcnt: block 1 ;count of number of characters on line +linbuf: block maxcnt+1 ;buffer to store input line + +obflb: block 1 ;address of current output file block +obfctr: 0+.BFCTR ;address of current output character count +obfptr: 0+.BFPTR ;address of current output character pointer +obfins: output 0, ;current buffer output instruction +oc: pushj p,ochr. ;current character output routine + +ibflb: block 1 ;address of current input file block +ibfctr: 0+.BFCTR ;address of current input character count +ibfptr: 0+.BFPTR ;address of current input character pointer +ibfins: in 0, ;current buffer input instruction +ic: pushj p,ichr. ;current character input routine + +tobcb: block 3 ;tty output buffer control block +tobuf: block 3 ;tty output buffer header block + block 50 ;tty output buffer + +frebie: block 1 ; -1 if free user running +ftlerr: block 1 ; holds address of where to go on APR trap +locked: block 1 ; holds address of most recent LOCK,,UNLOCK +svlock: block 1 ; saves lock over hiber etc. +whohas: block 3 ; job number of user who has a queue +loktab: block knloks ; table of active locks +jsqwho: block 1 ; ship number (index into jsqtab) +timsta: block ^d50 ; holds time into given routine +timlcn: block ^d50 ; holds timer name locally +stabuf::block ^d128*5 ; buffer for DECWAR.STA +staend==.-1 ; end of the status buffer +staser==stabuf+0 ; game serial # +stafed==stabuf+1 ; Federation high score +stanfw==stabuf+2 ; # times Federation "won" +staemp==stabuf+^d129 ; Empire high score +stanew==staemp+1 ; # times Empire "won" +staflv==stabuf+3 ; surviving captains (Federation) +stafka==staflv+^d10*knstat ; killed in action (Fed) +staelv==staflv+^d256 ; surviving captains (Empire) +staeka==staelv+^d10*knstat ; killed in action (Empire) +stacap==stabuf+^d512 ; count of commissions for each ship +stakil==stacap+knplay ; counter for # times destroyed +staiow: iowd ^d128*5,stabuf + 0 +stfiow: iowd ^d128*5,stabuf + 0 +sysppn==1,,27 ; ppn for system files +debflg: block 1 ; 0 = user PPN; -1 = 55,7; +1 = 77xxx,* + +dbuf: block 3 ;disk I/O buffer cntrl blk (news,gripe,help) +dibuf: block 3 ;DECWAR.INI input buffer control block + +tmp: block 6 + + ;^C and fatal error intercept block +intblk: 4,,inth. ;block length ,, addr of interrupt handler + ER.ICC ;intercept ^C and fatal errors +intadr: block 1 ;PC word at time of interrupt +inttyp: block 1 ;error bit ,, channel number + +intsav: block 1 ;save AC to check out interrupt type +intflg: block 1 ;-1 if ^C is being processed, else 0 +trpadr: block 1 ;address of ^C trap routine +savr: block 17 ;for storage of ACs during trap routine + +seed: block 1 ;random number seed + + ;OPEN./CLOSE. data block + +fl.ff: block 1 ;old .JBFF + +foblk: ;filop. block +fo.fnc: block 1 ;protection bit,,function code +fo.ios: block 1 ;open flags, data mooe +fo.dev: block 1 ;device name +fo.brh: block 1 ;addr of output,,input buffer control blocks +fo.nbf: block 1 ;number of output,,input buffers +fo.leb: block 1 ;addr of rename,,lookup/enter blocks + +leblk: ;lookup/enter block +le.nam: block 1 ;file name +le.ext: block 1 ;extension +le.prv: block 1 ;protection code +le.ppn: block 1 ;PPN or pointer to path. block + +ptblk: ;path. block +pt.fcn: block 1 ;function code +pt.swt: block 1 ;flags and switches +pt.ppn: block 1 ;PPN +pt.sfd: block 5 ;SFDs +pt.max: block 1 ;terminating word + +ifn debug., < +oldobj: block 1 ;object at location on board before zero +> ;end ifn debug. + + ;RUN code in low seg, so can recover from RUN error +rundec: run t1, + jrst monit + +queue: xwd 1,5 ; used by LOCK. and UNL. +quereq: xwd 0,0 ; rh = request ID + xwd 200000,-2 ; ignore sequence errors +queuen: xwd 500000,0 + xwd 0 + subttl high segment data + + reloc 400000 + +jsqtim: block 1 ; time for next scan for job activity +jsqtab: block ^d10 ; table of jsq,,jbn for active jobs + +hitser: block 1 ; serial number for finding oldest hit queue entry + block 1 ; master pointer for hit queue +hitql: block knhit ;hit queue link list +hitq: block 4*knhit ;hit queue + + block 1 ; master pointer for message queue +msgql: block knmsg ;message queue link list +msgq: block msglen*knmsg ;message queue + + ;File blocks + + ;TTY I/O +ttyfil: ochr.b,,ichr.t ;buffered output, TTCALLs for input + 0,,tobuf ;address of output buffer + tty,,.FOWRT ;channel TTY,,open for input + .IOASC+UU.PHS+IO.LEM ;physical device only, special editor mode + sixbit /TTY/ + tobcb,,0 ;output buffer control block + 1,,0 ;1 output buffer + z + + ;DECWAR.INI +inibeg: 0,,iich. ;buffered input + -1,,203 ;generate 203 words of buffer space + ini,,.FORED ;channel INI,,open for input + .IOASC+UU.PHS + sixbit /DSK/ + 0,,dibuf + 0,,2 + sixbit /DECWAR/ + sixbit /BEG/ + 0 + -1 ;use logged in PPN + z + +iniint: 0,,iich. ;buffered input + -1,,203 ;generate 203 words of buffer space + ini,,.FORED ;channel INI,,open for input + .IOASC+UU.PHS + sixbit /DSK/ + 0,,dibuf + 0,,2 + sixbit /DECWAR/ + sixbit /INT/ + 0 + -1 ;use logged in PPN + z + +iniexp: 0,,iich. ;buffered input + -1,,203 ;generate 203 words of buffer space + ini,,.FORED ;channel INI,,open for input + .IOASC+UU.PHS + sixbit /DSK/ + 0,,dibuf + 0,,2 + sixbit /DECWAR/ + sixbit /EXP/ + 0 + -1 ;use logged in PPN + z + ;News file +nwsfil: 0,,ichr.b ;buffered input + -1,,406 ;generate 406 words of buffer space + nws,,.FORED ;channel NWS,,open for input + .IOASC+UU.PHS ;physical device only + sixbit /DSK/ + 0,,dbuf ;input buffer control block + 0,,2 ;2 input buffers + sixbit /DECWAR/ + sixbit /NWS/ + 0 + z + + ;Special help file +hl1fil: 0,,ichr.b ;buffered input + -1,,406 ;generate 406 words of buffer space + hlp,,.FORED ;channel HLP,,open for input + .IOASC + sixbit /DSK/ + 0,,dbuf ;input buffer control block + 0,,2 ;2 input buffers + sixbit /DECWAR/ + sixbit /HLP/ + 0 + 0 + sixbit /DECWAR/ + sixbit /HLP/ + z + + ;Standard help file +hl2fil: 0,,ichr.b + -1,,406 + hlp,,.FORED + .IOASC+UU.PHS + sixbit /DSK/ + 0,,dbuf + 0,,2 + sixbit /DECWAR/ + sixbit /HLP/ + z + z + + ;Gripe file +grpfil: ogch.,,0 + 0,,0 + grp,,.FOSAU + .IODMP+UU.PHS + sixbit /DSK/ + dbuf,,0 + 0 + sixbit /DECWAR/ + sixbit /GRP/ + byte (9) 010,0,0,0 + exp sysppn + + ; DECWAR.STA +stared: xwd 0,0 + xwd 0,0 + xwd sta,.fored + exp .iodmp+uu.phs + sixbit /DSK/ + xwd stabuf,0 + 0 + sixbit /DECWAR/ + sixbit /STA/ + 0 + exp sysppn + +staupd: xwd 0,0 + xwd 0,0 + xwd sta,.fowrt + exp .iodmp+uu.phs + sixbit /DSK/ + xwd stabuf,0 + 0 + sixbit /DECWAR/ + sixbit /STA/ + byte (9) 010,0,0,0 + exp sysppn + + ; DECWAF.STA (status for "free" users) +stfred: xwd 0,0 + xwd 0,0 + xwd sta,.fored + exp .iodmp+uu.phs + sixbit /DSK/ + xwd stabuf,0 + 0 + sixbit /DECWAF/ + sixbit /STA/ + 0 + exp sysppn + +stfupd: xwd 0,0 + xwd 0,0 + xwd sta,.fowrt + exp .iodmp+uu.phs + sixbit /DSK/ + xwd stabuf,0 + 0 + sixbit /DECWAF/ + sixbit /STA/ + byte (9) 010,0,0,0 + exp sysppn + +eonblk: .IOASC+UU.PHS+IO.LEM ;TTY:, echo on + sixbit /TTY/ + z + +eofblk: .IOASC+UU.PHS+IO.LEM+IO.SUP ;TTY:, echo off + sixbit /TTY/ + z + +cpopj1: aos (p) ;skip return +cpopj: popj p, ;non-skip return + + point 7,screen,-1 +b7tbl: point 7,screen,6 + point 7,screen,13 + point 7,screen,20 + point 7,screen,27 + point 7,screen,34 + + point 12,board,-1 +b12tbl: point 12,board,11 + point 12,board,23 + point 12,board,35 + subttl Character type bits + + bit..==1 + + flgbit cf.bsc ;delete previous character + flgbit cf.bsl ;delete entire line + flgbit cf.ign ;ignore this character + flgbit cf.cr ;this character outputs a carriage return + flgbit cf.ff ;this character outputs one or more line feeds + flgbit cf.eof ;end of file character (^Z or EOF) + flgbit cf.rpt ;repeat previous command + flgbit cf.eol ;end of line character + flgbit cf.eoc ;end of command character + flgbit cf.dsp ;display the line + flgbit cf.etg ;toggle echo + flgbit cf.spc ;spacing character + flgbit cf.dlm ;delimiter + flgbit cf.com ;comment character (;) + flgbit cf.sgn ;sign (+ or -) + flgbit cf.dig ;digit (0 - 9) + flgbit cf.pnt ;decimal point (.) + + cf.del==cf.bsc!cf.bsl + cf.spe==cf.del!cf.etg!cf.eol!cf.dsp + cf.num==cf.sgn!cf.dig!cf.pnt + +cbits: phase 0 + cf.eol!cf.eoc ;^@ + z ;^A + z ;^B + cf.eol!cf.eoc!cf.cr!cf.ff ;^C + z ;^D + z ;^E + z ;^F + cf.etg ;^G + cf.bsc ;^H + cf.spc!cf.dlm ;^I + cf.eol!cf.eoc!cf.ff ;^J + cf.eol!cf.eoc!cf.ff ;^K + cf.eol!cf.eoc!cf.ff ;^L + cf.cr!cf.ign ;^M + z ;^N + cf.cr!cf.ff ;^O never passed to the program + z ;^P + z ;^Q if TTY NO PAGE is set + cf.dsp ;^R if TTY RTCOMP is set or char mode + z ;^S if TTY NO PAGE is set + z ;^T if TTY RTCOMP is set + cf.bsl ;^U + z ;^V + z ;^W + z ;^X + z ;^Y + cf.eol!cf.eoc!cf.cr!cf.ff!cf.eof;^Z + cf.rpt!cf.eol!cf.eoc ;^[ altmode + z ;^\ + z ;^] + z ;^^ + z ;^_ + cf.spc!cf.dlm ; blank + z ;! + z ;" + z ;# + z ;$ + z ;% + z ;& + z ;' + z ;( + z ;) + z ;* + cf.sgn ;+ + cf.dlm ;, + cf.sgn ;- + cf.pnt ;. + cf.eoc ;/ + cf.dig ;0 + cf.dig ;1 + cf.dig ;2 + cf.dig ;3 + cf.dig ;4 + cf.dig ;5 + cf.dig ;6 + cf.dig ;7 + cf.dig ;8 + cf.dig ;9 + z ;: + cf.com!cf.eoc ;; + z ;< + z ;= + z ;> + z ;? + z ;@ + z ;A + z ;B + z ;C + z ;D + z ;E + z ;F + z ;G + z ;H + z ;I + z ;J + z ;K + z ;L + z ;M + z ;N + z ;O + z ;P + z ;Q + z ;R + z ;S + z ;T + z ;U + z ;V + z ;W + z ;X + z ;Y + z ;Z + z ;[ + z ;/ + z ;] + z ;^ + z ;_ + z ;` + z ;a + z ;b + z ;c + z ;d + z ;e + z ;f + z ;g + z ;h + z ;i + z ;j + z ;k + z ;l + z ;m + z ;n + z ;o + z ;p + z ;q + z ;r + z ;s + z ;t + z ;u + z ;v + z ;w + z ;x + z ;y + z ;z + z ;{ + z ;\ + z ;} + z ;~ + cf.bsc ; + dephase + subttl RESET./STOP./EXIT./EXIT/MONIT + + +;all changes below made by drforbin(merlyn) +;changes include ridding CIS variables and defining terminal wdth to 80 characters + +;to fix -drforbin---p.nam,p.ppn,p.dev +;;; RESET. -- This routine is called automatically by the FORTRAN +; generated code. It initializes all the I/O, etc. Most of the +; actual initialization is done in SETUP, which is low segment +; code that is removed once the player is solidly in the game. +; + extern setup,z ;what a kludge, but for a Monitor bug + ;what can you do? + entry reset. + sixbit /RESET./ +reset.: reset + movem .sgnam,p.nam ;save program name + movem .sgppn,p.ppn ;save source PPN + movem .sgdev,p.dev ;save device + + move t1,.JBFF ;get last used location in low seg + cail t1,z ;setup code loaded? + skipn setup ;for sure? + jrst start ;low seg not all there; try a RUN + + move p,[iowd pdlsiz,pdl] ;init subroutine stack + move s,[iowd stksiz,stk] ;init data stack + addi 16,1 ;return addr -1 is passed in AC16 + push p,16 +; pushj p,rdusr.## ; if tmpcor:usr not found +; skipe 0 +; pushj p,makusr## ; then set it up now +; ldb t1,[point 9,1+uster.##,8] ; set up terminal width +; skipn t1 + movei t1,^d80 ; default + movem t1,terwid + + hrroi t0,30 ; if not 'WIZARD' running + gettab t0, + setz t0, + +iswiz: + setz t1, + setuwp t1, + halt + + setzm ccflg ;^C not typed yet + setzm ccflg. ;used to unstack multiple commands per line + setzm trpadr ;no ^C trap routine selected + setom intflg ;not processing ^C interrupt + setzm inwait + setzm hungup + setzm addrck +; pushj p,cishng ; enable hangup detect and enq. interrupt + movei t1,intblk ;enable interception of ^C and fatal errors + setzm intblk+2 + movem t1,.JBINT + movei t1,aprtrp ; set up to capture APR failures + hrrm t1,.jbapr## + movei t1,1b19+1b22 + aprenb t1, + setom bufptr ;time to read another line of input + setzm echflg ;echoing is turned on + + move x1,[ttyfil,,ttyfil] + pushj p,open. ;open TTY + halt + pushj p,seto. ;set up for output to TTY + pushj p,seti. ;set up for input from TTY + setzm iniflg ;not getting input from DECWAR.INI + movei p1,[asciz "DECWAR, Edit "] + pushj p,ostr. + hrrz x1,.jbver## + movei x2,5 + pushj p,odec. + pushj p,crlf + skipn hungup + output tty, + + popj p, + + + entry stop., exit., exit + sixbit /EXIT/ +stop.: +exit.: +exit: + jrst monit + entry monit + sixbit /MONIT/ +monit: skipn hungup + output tty, + hllzs .jbsa## ; no restarts allowed + pushj p,zaplok ; zap all pending locks + reset ; kill any pending locks + skipe t1,who ; if ship apparently active + jrst [movei arg,[who] + pushj p,free## ; then free it + jrst .+1 + skipe t1,jsqwho ;drforbin ; if job has entry in jsqtab + setzm jsqtab-1(t1) ;drforbin ; then clear it + ] + +;2 lines below commented drforbin. +; skipe t1,jsqwho ; if job has entry in jsqtab +; setzm jsqtab-1(t1) ; then clear it + monrt. ;drforbin (add) + +; +; jrst rdwhst ; run "DWHOST" + + subttl PTY + +;;; PTY -- Check to see if job is logged on to a PTY. This is done +; because a ^C received by such a job will unconditionally stop it, +; without even checking for an intercept routine. So, since DECWAR +; has to do some cleaning up before letting a player out, we have to +; say that you can't play from a PTY. +; +; PTY(dummy) = TRUE if running from a PTY. +; + entry pty + sixbit /PTY/ +pty: seto t1, + getlch t1 ;get line characteristics + txnn t1,GL.ITY ;PTY? + tdza t0,t0 ;no, FALSE + seto t0, ;yes, TRUE + popj p, + subttl DECINI + +;;; DECINI -- Switch input from TTY to DECWAR.INI, and back again +; on eof. +; + entry DECINI + sixbit /DECINI/ +decini: save +decin0: skipn hungup + outstr [asciz " +Are you: +1 - Beginner +2 - Intermediate +3 - Expert + +Which? "] + skipe hungup + skipa p1,["3"] + inchwl p1 + jfcl + skipn hungup + clrbfi + jfcl + movei t1,10 ; hibernate to clear the wake state + hiber t1, + jfcl + cail p1,"1" + caile p1,"3" + jrst decin0 + setom bufptr ;and get set to read new line + + movei x1,iniexp ; choose ini file + cain p1,"3" + jrst decin1 + movei x1,iniint + cain p1,"2" + jrst decin1 + movei x1,inibeg +decin1: pushj p,open. + jrst deci.1 ;no can do, so don't bother + + pushj p,ttyon ;clear ^O + pushj p,ocrl. + + pushj p,seti. ;set up for input from DECWAR.INI + setom iniflg ;getting input from DECWAR.INI +deci.1: restor + popj p, + + +;;; Here to read a character from DECWAR.INI +; +iich.: pushj p,ichr.b ;get character from DECWAR.INI + jumpl c,iich.2 ;eof, switch back to TTY + skipge ccflg ;^C? + jrst iich.1 ;yes, stop processing DECWAR.INI + caie c,007 ;^G? + skipge echflg ;or, echoing turned off? + jrst .+2 + pushj p,ochr. ;no, echo character + popj p, ;and do normal input stuff + +iich.1: setzm ccflg ;ok, we've taken care of what ^C asked for +iich.2: save + pushj p,close. ;close file, get rid of buffers, etc. + + pushj p,ttyon ;clear ^O + pushj p,dmpbuf + + movei x1,ttyfil + pushj p,seti. ;set up for input from TTY + setzm iniflg ;no longer getting input from DECWAR.INI + setom blank ;no blank lines yet + restor + pjrst ichr. ;now get character from TTY + subttl ECHON/ECHOFF/DMPBUF/TTYON + +;;; ECHON -- turn echoing on +; + entry echon + sixbit /ECHON/ +echon: popj p, + open tty,eonblk ;open TTY, don't suppress echoing + halt + setzm echflg + popj p, + + +;;; ECHOFF -- turn echoing off +; + entry echoff + sixbit /ECHOFF/ +echoff: popj p, + open tty,eofblk ;open TTY with echoing suppressed + halt + setom echflg + popj p, + + +;;; DMPBUF -- dump the tty output buffer +; + entry dmpbuf + sixbit /DMPBUF/ +dmpbuf: skipn hungup + output tty, + popj p, + + +;;; TTYON -- dump the TTY buffer and clear ^O +; + entry ttyon + sixbit /TTYON/ +ttyon: skipn hungup + output tty, + skipn hungup + skpinl + jfcl + popj p, + subttl Low Level I/O -- Introduction + +comment % + +To suspend output to the current file and open a new file for output + + MOVE X1,[,,] + PUSHJ P,OPEN. + open failed + PUSHJ P,SETO. + +To output the character from c to the current output file, + + PUSHJ P,OCHR. + +To close the current output file and restore the old output file + + PUSHJ P,CLOSE. + PUSHJ P,SETO. (X1 must have value returned by previous call to SETO.) + + +To suspend input from the current file and open a new file for input + + HRLI X1, + PUSHJ P,OPEN. + open failed + PUSHJ P,SETI. + +To input a character from the current input file into c + + PUSHJ P,ICHR. + +To close the current input file and restore the old input file + + PUSHJ P,CLOSE. + PUSHJ P,SETI. (X1 must have value returned by previous call to SETI.) + + +The file block has the format + + .fbcio address of character output,,input routines + .fbbuf 0,,address of buffers + or -1,,amount of space to allocate for buffers @ .JBFF + .fbfnc protection bit, channel,,filop. function code + .fbios open flags, data mode + .fbdev device name + .fbbrh address of output,,input buffer control blocks + .fbnbf number of output,,input buffers + .fbnam file name + or 0 to end block (if init device only) + .fbext extension + .fbprv protection code (if writing file) + .fbppn PPN + or 0 to end block (if ersatz device) + .fbsfd SFDs, terminated by the first 0 word +% + subttl Low Level I/O -- OPEN./CLOSE. + +;;; OPEN. -- Open file for input and/or output. +; +; MOVEI X1, +; PUSHJ P,OPEN. +; nope +; success +; +; Input +; X1 address of file block +; +; Note: throughout this routine, +; X2 points to the bottom of the buffer space. If buffer space +; is allocated by this routine X2 will be the value of .JBFF upon +; entry, else it will be the address of the static buffer space +; (probably the TTY output buffer). +; X3 holds the value of .JBFF (.JBFF itself is changed so FILOP. +; allocates any buffer space in the right place). +; +open.: save + setzm fl.ff ;no buffers allocated yet + move x3,.JBFF ;save real value of .JBFF + skipl x2,.fbbuf(x1) ;need to allocate buffers? + jrst open.1 ;no, buffers are static + movem x3,fl.ff ;reduce core to here on close + addi x3,(x2) ;new .JBFF + move x2,.JBFF ;start of allocated buffers + movei t1,-1(x3) ;last word needed for buffers + camg t1,.JBREL ;already allocated? + jrst open.1 ;yes, don't need to grab any more + core t1, + warn ,open.7 +open.1: movem x2,.JBFF ;start of buffers (for filop.) + + hrlzi t1,.fbfnc(x1) ;copy filop. block + hrri t1,foblk + blt t1,foblk+4 + + skipn .fbnam(x1) ;file name given? + jrst open.4 ;no, just opening device (must be tty) + hrrzi t1,leblk + movem t1,foblk+.foleb ;filop. block points to lookup/enter block + hrlzi t1,.fbnam(x1) ;copy lookup/enter block + hrri t1,leblk + blt t1,leblk+3 + skipl .fbppn(x1) ;negative PPN? + jrst open.2 ;no + getppn t1, ;use logged in PPN + jfcl + movem t1,leblk+3 + jrst open.3 ;and ignore any SFDs + +open.2: +open.3: skipa t1,[6,,foblk] ;use long filop. block (open file too) +open.4: move t1,[5,,foblk] + skipn debflg ; if running from funny PPN + jrst open.8 + skipg debflg ; then if in development area + jrst [ movsi t2,'DSK' ; then use local files + movem t2,fo.dev + setzm le.ppn + jrst open.8 + ] + hlrz t2,le.ext ; if 'STA' + cain t2,'STA' + setzm le.ppn ; then use local file + cain t2,'GRP' ; map DECWAR.GRP to + movei t2,'MPH' ; DECWAR.MPH + hrlm t2,le.ext +open.8: filop. t1, ;open it, set up buffers, etc. + jrst open.5 ;oops! + aos (p) + jrst open.6 + +open.5: came x3,.JBFF ;buffer space allocated by this routine? + jrst open.6 ;no, don't need to deallocate + movei x3,(x2) ;pull .JBFF back down + core x2, ;shrink (maybe) + jfcl +open.6: movem x3,.JBFF ;restore .JBFF +open.7: restor + popj p, + + + +;;; CLOSE. -- Close the most recently opened file and release any +; core that was allocated for buffers. +; +close.: hrlzi t1,(close 0,) ;build close instr + hlrz t2,fo.fnc ;add in channel number + dpb t2,[point 4,t1,12] + xct t1 ;close it + + skipg t1,fl.ff ;need to reduce core? + popj p, ; no + + setzm fl.ff + movem t1,.JBFF + andi t1,^-777 ;last page used + move t2,.JBREL + andi t2,^-777 ;last page allocated + cain t1,(t2) ;same? + popj p, ;yes, forget CORE UUO + + core t1, ;deallocate buffer space + warn + popj p, + subttl Low Level I/O -- SETO./SETI. + +;;; SETO. -- Set up for output to new file. +; +; Input +; X1[L] address of new output file block +; Output +; X1[L] address of old output file block +; +seto.: hlrz t1,x1 + hrl x1,obflb ;get addr of old file block + hrrm t1,obflb ;save addr of new file block + + hlrz t2,.fbcio(t1) ;get addr of char out routine + movem t2,oc ;save it + + hlrz t2,.fbbrh(t1) ;addr of buffer control block + movei t3,.BFCTR(t2) ;addr of char count + movem t3,obfctr + movei t3,.BFPTR(t2) ;addr of char pointer + movem t3,obfptr + + hrlzi t2,(output 0,) ;build output instr + movem t2,obfins + hlrz t2,.fbfnc(t1) ;add in channel number + dpb t2,[point 4,obfins,12] + + popj p, + + + +;;; SETI. -- Set up for input from new file. +; +; Input +; X1[R] address of new input file block +; Output +; X1[R] address of old input file block +; +seti.: hrrzi t1,(x1) + hrr x1,ibflb ;get addr of old file block + hrrm t1,ibflb ;save addr of new file block + + hrrz t2,.fbcio(t1) ;get addrr of char in routine + movem t2,ic ;save it + + hrrz t2,.fbbrh(t1) ;addr of buffer control block + movei t3,.BFCTR(t2) ;addr of char count + movem t3,ibfctr + movei t3,.BFPTR(t2) ;addr of char pointer + movem t3,ibfptr + + hrlzi t2,(in 0,) ;build in instr + movem t2,ibfins + hlrz t2,.fbfnc(t1) ;add in channel number + dpb t2,[point 4,ibfins,12] + + popj p, + subttl Low Level I/O -- OCHR./ICHR. + +;;; OCHR. -- Low level character output routine. +; Output the character from c. +; +ochr.: jrst @oc ;dispatch to character output routine + +ochr.b: skipe hungup ; if job hung up + popj p, ; then ignore this output request! + sosl @obfctr ;buffered output + jrst ochr.x + xct obfins ;output buffer + push p,0 + movei 0,^d80 ; force byte count to small number + movem 0,@obfctr + pop p,0 + jrst ochr.b + +ochr.t: skipn hungup ; ignore outchr if job hungup + outchr c ;ttcall output + jrst .+2 + +ochr.x: idpb c,@obfptr + aos hcpos ;update horizontal cursor position + trne c,140 ;control char? + popj p, ;no, no special processing required + + save + hrrzi c,(c) + sos hcpos ;most control chars are non printing + + caie c,cr ;carriage return? + jrst ochr.1 ;no + skipe hcpos ;line was blank? + setom blank ;no, next will be first blank line + setzm hcpos ;back at left margin + jrst ochr.2 + +ochr.1: cain c,lf ;line feed? + aos blank ;yes, increment blank line count + + cain c,010 ;backspace? + sos hcpos ;yes, back up one + + caie c,011 ;tab? + jrst ochr.2 ;no + move c,hcpos ;get old horizontal cursor position + addi c,10 ;compute new position + andi c,^-37 + movem c,hcpos + +ochr.2: restor + popj p, + + +;;; ICHR. -- Low level character input routine. +; Input a character into c. +; +ichr.: jrst @ic ;dispatch to character input routine + +ichr.b: sosge @ibfctr ;buffered input + jrst ichr.1 + ildb c,@ibfptr ;get character + jumpe c,ichr.b ;ignore nulls + popj p, + +ichr.1: xct ibfins ;get next buffer + jrst ichr.b + seto c, ;any error is assumed to be eof + popj p, + +ichr.t: skipn hungup ; if job is hungup + skipe ccflg ; or ^C was seen + jrst incr.h ; then return an + setom inwait ; tell hangup detect we are waiting for input + inchwl c + setzm inwait + skipn ccflg ; if ^C or + skipe hungup ; if hangup +incr.h: jrst [movei c,12 ; then return + skipn hungup ; if hungup + clrbfi ; don't do this + popj p, + ] + jumpe c,ichr.t + cain c,15 ; ignore + jrst ichr.t + popj p, + subttl GTKN -- GTKN + +;;; GTKN -- Read and parse a line of input. Return the individual +; tokens in TKNLST, their numeric value in VALLST (else 0), their +; type (eol, null, integer, floating point, alfa) in TYPLST, and +; a pointer to the first character in PTRLST. The last token will +; always be EOL. Return the number of tokens (minus the EOL) in +; NTOK. +; + entry gtkn + sixbit /GTKN/ +gtkn: skipe hungup ; if job is hung up + popj p, ; then don't try to get anything + save + aose ccflg. ;^C after last GTKN call? + aosg bufptr ;at end of line? + jrst gtkn.1 ;yes, get new input line + pushj p,ocrl. + jrst gtkn.2 + +gtkn.1: + move t1,locked ; if we have database locked + movem t1,svlock + skipe t1 + pushj p,unlo. + pushj p,inli. ;get input line + skipe t1,svlock ; re-grab database if necessary + jrst [pushj p,lock. + skipe lkfail + jrst .-1 ; we have to get the lock back + jrst .+1] + movei t1,linbuf + movem t1,bufptr +gtkn.2: setz f, + hrlzi x1,- ;maximum number of tokens to return + skipe hungup ; if job has hungup + jrst [movei t1,kalf ; force 'QUIT' token + movem t1,typlst(x1) + move t1,[asciz 'QUIT'] + movem t1,tknlst(x1) + aoja x1,gtkn.5 + ] + +gtkn.3: pushj p,nxtt. ;scan off next token + movei t1,knul ;assume token is blank + trne f,tf.num + movei t1,kint ;token is integer + trne f,tf.pnt + movei t1,kflt ;token is floating point + trne f,tf.nnm + movei t1,kalf ;token is non-numeric characters + movem t1,typlst(x1) ;store token type + trne f,tf.eol ;end of line? + jrst gtkn.4 ;yes + + aobjn x1,gtkn.3 + movei p1,[ascil ] + pushj p,ostr. + setz x1, + setom bufptr + jrst gtkn.5 + +gtkn.4: trnn f,tf.chr ;any characters in token? + trne x1,777777 ;no, is this the first token? + hrrzi x1,1(x1) ;increment token count + hrrzi x1,(x1) + +gtkn.5: movem x1,ntok + movx t1,keol ;type of last token is end of line + movem t1,typlst(x1) + setzm vallst(x1) + movei t1,(x1) + setzm tknlst(t1) + restor + popj p, + subttl GTKN -- NXTT. + +;;; NXTT. -- Get the next token from the input line and store it +; in TKNLST, store it's numeric value is VALLST, and store the +; index to the first character of the token in PTRLST. +; +; Input +; X1 Token index +; Output +; F LH input line flag bits (lf.eol) +; RH token flag bits + + sixbit /NXTT./ +nxtt.: save + hllz f,f ;zero out local flag bits + movei p1,tknlst(x1) ;place to stick token + hrli p1,(point 7) + setzm (p1) + movei x3,5 ;max number of chars in token + setz x2, ;numeric value of token + + pushj p,skpb. ;skip leading spacing characters + move t1,bufptr + movem t1,ptrlst(x1) ;save index to beginning of token + tlza c,-1 ;mask out character type bits +nxtt.1: hrrz c,@bufptr ;get character from input line + caile c,137 ;character is lower case? + subi c,040 ;yes, change to upper case + hrl c,cbits(c) ;get character type bits + tlne c,cf.eoc ;end of command? + jrst nxtt.3 ;yes + tlne c,cf.dlm ;delimiter? + jrst nxtt.2 ;yes, done with this token + trnn f,tf.nnm ;non-numeric chars seen already? + tlnn c,cf.num ;numeric character? + troa f,tf.nnm + pushj p,anum. ;add character to number + sojl x3,.+2 ;make sure there's room for this character + idpb c,p1 ;add character to token + tro f,tf.chr ;flag that a character has been seen + aos bufptr + jrst nxtt.1 + +nxtt.2: pushj p,skpb. ;skip trailing spacing characters + tlne c,cf.dlm ;terminating character is a delimiter? + aos bufptr ;yes, skip it + tlne c,cf.eoc ;end of command line? +nxtt.3: tro f,tf.eol ;yes, flag it + tlne c,cf.eol!cf.com ;end of line? + setom bufptr ;yes + + trnn f,tf.nnm ;non-numeric character seen? + jrst nxtt.4 ;no + setz x2, ;make sure 0 is returned for numeric value + trz f,tf.num!tf.sgn!tf.neg!tf.pnt +nxtt.4: trne f,tf.neg ;number is negative? + movn x2,x2 ;yes, take care of it + movem x2,vallst(x1) + restor + popj p, + + + + ;Skip string of spacing characters pointed to by BUFPTR. + + sixbit /SKPB./ +skpb.: move c,@bufptr ;get next character + hrl c,cbits(c) ;get character type bits + tlnn c,cf.spc ;spacing character? + popj p, ;no, done + aos bufptr ;yes, skip it + jrst skpb. + + + + ;Add C to the partially built number in X2. + + sixbit /ANUM./ +anum.: tlnn c,cf.sgn ;sign? + jrst anum.1 ;no + troe f,tf.sgn!tf.chr ;flag that sign has been seen + jrst anum.4 ;this isn't the first character + hrrzi t1,(c) ;get character only (no flag bits) + cain t1,"-" ;minus sign? + tro f,tf.neg ;yes, remember that + popj p, + +anum.1: tlnn c,cf.pnt ;decimal point? + jrst anum.2 ;no + troe f,tf.pnt ;flag that decimal point has been seen + jrst anum.4 ;this is the second decimal point + fltr x2,x2 ;float the number + hrlzi x3,(10.0) + movem x3,scale ;scaling factor for first fractional digit + popj p, + +anum.2: tro f,tf.num ;digit seen + trne f,tf.pnt ;working on fraction portion? + jrst anum.3 ;yes + imuli x2,^D10 + addi x2,-"0"(c) ;add digit into integer + popj p, + +anum.3: movei t1,-"0"(c) ;get digit to add to fraction + fltr t1,t1 ;float it + move t2,scale ;get scaling factor + fdv t1,t2 ;scale it + fad x2,t1 ;add it into the number + fmpri t2,(10.0) ;adjust scaling factor for next digit + movem t2,scale + popj p, + +anum.4: tro f,tf.nnm ;illegal sequence of numeric characters + setz x2, + popj p, + subttl GETLIN -- INLI. + +;;; INLI. -- Read a line from the tty and store it in LINBUF. +; If the first character typed is (even before ^H or ^U), +; return the previous input line. Handle line editing (^H, ^U, +; ^R) to allow backing up over ^G, which is the echo toggle char. +; Ignore , and convert the end of line character to . +; Always echo , and also echo if the end of line char +; didn't output any line feed (). +; + sixbit /INLI./ +inli.: skipn hungup + output tty, + setom bufptr ;new line + pushj p,nxch. ;get first character + trnn f,cf.rpt ;repeat previous command? + jrst inli.1 ;no + setom rptflg ;yes, say so (can't repeat TELL commands) + jrst inli.5 + +inli.1: setzm rptflg ;this is a new command + setzm chrcnt ;no characters read yet + jrst .+2 + +inli.2: pushj p,nxch. ;get next character + trne f,cf.spe ;character requires special action? + jrst inli.3 ;yes + aos t1,chrcnt ;increment input character count + movem c,linbuf-1(t1) ;store character in line buffer + caige t1,maxcnt ;buffer full yet? + jrst inli.2 ;no, get next character + jrst inli.4 ;yes, terminate input line + +inli.3: trnn f,cf.eol ;end of line character? + jrst inli.6 ;no +inli.4: aos t1,chrcnt + setzm linbuf-1(t1) ;end input with a null character +inli.5: movei c,cr ;return to left margin + pushj p,ochr. + movei c,lf + skipl iniflg ;input from DECWAR.INI? + trne f,cf.ff ;character already echoed form feed? + aosa blank ;yes, already on next line + pushj p,ochr. ;no, goto next output line + skipe echflg ;echoing turned off? + pushj p,echon ;yes, turn it on again + popj p, + +inli.6: trne f,cf.etg + pushj p,echg. ;toggle echo + + trne f,cf.dsp + pushj p,disp. ;display line + + trnn f,cf.bsc ;back up over single character? + jrst inli.7 ;no + sosge chrcnt + setzm chrcnt + +inli.7: trnn f,cf.bsl ;back space over entire line? + jrst inli.2 ;no + setzm chrcnt ;yes, no more chars in buffer + skipn hungup + outstr [byte (7) 15,12] + skipge echflg ;echoing off? + pushj p,echon ;yes, turn it on + jrst inli.2 + subttl GETLIN -- NXCH. + +;;; Get the next character and return it's flag bits. +; +; Input +; F LH line processing flags (global to all characters) +; Output +; F RH flag bits for character +; CHR RH character +; + sixbit /NXCH./ +nxch.: pushj p,ichr. ;get the next character + hrr f,cbits(c) ;get the character type bits + + trne f,cf.ign ;ignore this character? + jrst nxch. ;yes + + skipe echflg ;characters are being echoed? + trz f,cf.cr!cf.ff ;no, didn't echo or ,, + + popj p, + subttl GETLIN -- DISP. + +;;; DISP. -- Display the current input line in response to ^R. +; + sixbit /DISP./ +disp.: skipn hungup + outstr [byte (7) 15,12] + skipge echflg ;is echoing turned on? + pushj p,echon ;no, turn it on + + movn t1,chrcnt ;negative number of characters in buffer + hrlzi t1,-1(t1) + hrri t1,linbuf-1 + +disp.2: aobjp t1,disp.4 ;no more characters to echo + hrrz c,(t1) ;get character from buffer + cail c,007 + caile c,015 + cail c,040 + jrst disp.3 ;printing character + skipn hungup + outchr ["^"] + addi c,100 +disp.3: skipn hungup + outchr c + jrst disp.2 + +disp.4: popj p, + subttl GETLIN -- ECHG. + +;;; ECHG. -- Toggle echo in response to ^G input. +; + sixbit /ECHG./ +echg.: skipge echflg ;echo on? + pjrst echon ;no, turn echo on + pjrst echoff ;yes, turn echo off + subttl Output -- OUT/SKIP + +;;; OUT -- output an asciz string, optionally followed by a number +; of . +; +; CALL OUT (str,n) +; +; str is either the address of an asciz string, else the address +; of the actual address (indirect bit won't be set). n is the +; number of to output after the string. +; + entry out + sixbit /OUT/ +out: movei p1,@0(arg) ;address of string to output + jumpe p1,cpopj + move t1,(p1) ;get first word of string + tlnn t1,777777 + move p1,(p1) ;was really the address of an address + pushj p,ostr. + + move t1,@1(arg) ;get number of s to output + jrst skip.1 ;go do it + + entry skip ;output specified number of s + sixbit /SKIP/ +skip: move t1,@0(arg) ;get number of s to output + +skip.1: sojl t1,cpopj + ochr cr + ochr lf + jrst skip.1 + subttl Output -- TAB/SPACES/OSPC./OCRL./CRLF + +;;; TAB -- absolute tab to column +; +; CALL TAB (col) +; + entry tab + sixbit /TAB/ +tab: move x1,@0(arg) +tab.: sub x1,hcpos + movei c," " + sojle x1,cpopj + pushj p,ochr. + jrst .-2 + + +;;; SPACES -- relative tab (output n spaces) +; +; CALL SPACES (n) +; + entry spaces + sixbit /SPACES/ +spaces: move x1,@0(arg) +spcs.: movei c,sp + sojl x1,cpopj + pushj p,ochr. + jrst .-2 + + + +;;; SPACE/OSPC. -- Output a space. +; +; PUSHJ P,OSPC. +; + entry space + sixbit /SPACE/ +space: +ospc.: movei c,sp ;get a space + pushj p,ochr. ;and output it + popj p, + + +;;; OCRL./CRLF -- Output if not at left margin or previous +; output line wasn't blank. +; +; PUSHJ P,OCRL. +; + entry crlf + sixbit /CRLF/ +crlf: +ocrl.: skiple blank ;any blank lines yet? + skipe hcpos ;and at left margin? + jrst .+2 + popj p, ;yes, don't output another blank line + + movei c,cr + pushj p,ochr. + movei c,lf ;get a line feed + pushj p,ochr. + popj p, + subttl Output -- OUTC/OUT2C/OUTW/OUT2W + + entry outc ;output a single, left justified character + sixbit /OUTC/ +outc: ldb c,[point 7,@0(arg),6] + pushj p,ochr. + popj p, + + + entry out2c ;output two left justified characters + sixbit /OUT2C/ +out2c: ldb c,[point 7,@0(arg),6] + pushj p,ochr. + ldb c,[point 7,@0(arg),13] + pushj p,ochr. + popj p, + + + entry outw ;output a single left justified word + sixbit /OUTW/ +outw: move t1,@0(arg) ;get word + movem t1,tmp+0 + setzm tmp+1 + movei p1,tmp + pushj p,ostr. + popj p, + + + entry out2w ;output two words + sixbit /OUT2W/ +out2w: move t1,@0(arg) ;get first word + movem t1,tmp+0 + move t1,@1(arg) ;get second word + movem t1,tmp+1 + setzm tmp+2 + movei p1,tmp + pushj p,ostr. + popj p, + subttl Output -- OTIM + + ;Output the time in the format hh:mm:ss + ; + ; CALL OTIM (TIME) + + entry otim + sixbit /OTIM/ +otim: move x1,@0(arg) + idiv x1,[^D1000*^D60*^D60] + idivi x2,^D1000*^D60 + idivi x3,^D1000 + movei t1,(x1) + pushj p,o2d ;output the hours + ochr ":" + movei t1,(x2) + pushj p,o2d ;output the minutes + ochr ":" + movei t1,(x3) + pushj p,o2d ;output the seconds + popj p, + + sixbit /O2D/ +o2d: idivi t1,^D10 + movei c,"0"(t1) ;output first digit + pushj p,ochr. + movei c,"0"(t2) ;output second digit + pushj p,ochr. + popj p, + subttl Output -- OSTR./OSTB./O2DG./O2DB./OSIX. + +;;; OSTR. -- Output the asciz string pointed to by P1. +; +ostr.: hrli p1,(point 7) +ostr.x: ildb c,p1 + jumpe c,cpopj + pushj p,ochr. + jrst ostr.x + + +;;; OSTB. -- Output the string pointed to by P1. Either a null or +; blank terminates the string. Output no more than 10 characters. +; +ostbx.: hrli p1,(point 7,0) + save + movei x1,^d10 + seto x2, ; pad out to 10 columns + jrst ostb.1 + +ostb.: hrli p1,(point 7) +ostb.x: save + setz x2, + movei x1,^D10 + +ostb.1: ildb c,p1 + caie c,0 + cain c," " + jrst ostb.2 + pushj p,ochr. + sojg x1,ostb.1 + +ostb.2: + jumpe x2,ostb.4 +ostb.3: sojle x1,ostb.4 + movei c," " + pushj p,ochr. + jrst ostb.3 +ostb.4: + restor + popj p, + + +;;; O2DG. -- output the 2 digit decimal number from X1. +; +; MOVE X1,number +; PUSHJ P,O2DG. +; + sixbit /O2DG./ +o2dg.: save + idivi x1,^D100 ;ignore any overflow digits + movei x1,(x2) + idivi x1,^D10 ;split into constituent digits + movei c,"0"(x1) ;get tens + pushj p,ochr. + movei c,"0"(x2) ;get ones + pushj p,ochr. + restor + popj p, + + +;;; O2DB. -- Output a 2 digit number, suppress leading 0. +; +o2db.: save + idivi x1,^D10 + movei c,"0"(x1) + cain c,"0" + movei c," " + pushj p,ochr. + movei c,"0"(x2) + pushj p,ochr. + restor + popj p, + + +;;; OSIX. -- output the sixbit word from X1 using the field width +; in X2. +; +; MOVE X1,[sixbit /str/] +; PUSHJ P,OSIX. +; + sixbit /OSIX./ +osix.: save + move c+1,x1 ;sixbit word to output + movei x1,6 ;output exactly 6 characters +osix.1: setz c, + lshc c,6 ;get character + addi c,040 ;change it to ascii + pushj p,ochr. + sojg x1,osix.1 + restor + popj p, + subttl Output -- ODEC./OOCT. + +;;; ODEC. -- output the decimal number from X1 using the field width +; in X2. +; +; MOVE X1,number +; MOVEI X2,field width +; PUSHJ P,ODEC. +; + sixbit /ODEC./ +odec.: save + movei x3,^D10 ;radix 10 + pushj p,onum. ;output the number + restor + popj p, + + +;;; OOCT. -- output the octal number from X1 using the field width in +; X2. +; +; MOVE X1,number +; MOVEI X2,field width +; PUSHJ P,OOCT. +; + sixbit /OOCT./ +ooct.: save + movei x3,^D8 ;radix 8 + pushj p,onum. ;output the number + restor + popj p, + subttl Output -- ONUM./OSN1./OSN2./OSN3. + +;;; In the following output routines, the field width has the +; following meanings: +; +; w > 0 --> pad out to field width (blanks before numbers and after +; after strings) or truncate if neccessary. +; w = 0 --> use free format (take up just as much space as needed). +; w < 0 --> pad out to field width, expand field if neccessary. +; +; The actual field width used is always returned in the same AC +; that the original field width was passed in (X2). + + +;;; ONUM. -- output the number from X1, using the field width in X2 +; and the radix in X3. +; +; MOVE X1,number +; MOVEI X2,width +; MOVEI X3,radix +; PUSHJ P,ONUM. +; +; entry ONUM. -- Output sign if negative. +; entry OSN1. -- Output sign if non-zero. +; entry OSN2. -- Output sign always. 0 counts as positive. +; entry OSN3. -- Output sign always. 0 counts as negative. +; +osn1.: jumpe x1,onum. ;-1 --> -1 ; 0 --> 0 ; 1 --> +1 +osn2.: jumpge x1,.+2 ;-1 --> -1 ; 0 --> +0 ; 1 --> +1 +osn3.: jumple x1,.+2 ;-1 --> -1 ; 0 --> -0 ; 1 --> +1 + skipa t2,["+"] + movei t2,"-" + jrst onum.1 +onum.: jumpl x1,.+2 ;negative; output sign + tdza t2,t2 + movei t2,"-" + +onum.1: save + movm x4,x2 ;get abs(field width) + movni x4,(x4) + hrlzi x4,(x4) ;-width,,0 + + save <[-1]> ; save sentinel + + movm t1,x1 ;get number to output + movei x1,(t2) ;remember sign + jumpe x1,onum.2 ;don't output sign + aobjn x4,.+2 ;more room in field + jumpg x2,onum.4 ;field is full + +onum.2: idivi t1,(x3) ;get least significant digit + save ; save it + jumpe t1,onum.3 ;no more digits to strip off + aobjn x4,onum.2 ;more room in field + jumple x2,onum.2 ;free format or expand field if necessary + jrst onum.4 ;overflow + + pushj p,ospc. ;pad in leading space +onum.3: aobjn x4,.-1 ;field not full yet + tdza x2,x2 ;field didn't overflow +onum.4: seto x2, ;field did overflow + + skipe c,x1 + pushj p,ochr. ;output sign + +onum.5: restor ; get digit + jumpl c,onum.6 ;-1 signals end of number + addi c,"0" ;change to character code + jumpe x2,.+2 ;field overflowed? + movei c,"*" ;yes, output stars instead + pushj p,ochr. ;output character + jrst onum.5 ;loop for remaining digits + +onum.6: movei x2,(x4) ;get actual field width used + restor + popj p, + subttl Output -- ODEC/OSDEC + +;;; ODEC -- Output decimal number (-1, 0, 1) +;;; OSDEC -- Output signed decimal number (-1, 0, +1) +; +; CALL ODEC/OSDEC (n,w) +; +; n is number to output +; w is field width +; + entry odec,osdec ;output decimal number +osdec: skipa t1,[osn1.] +odec: movei t1,onum. + save + move x1,@0(arg) ;get number + move x2,@1(arg) ;get field width + movei x3,^D10 ;get radix + pushj p,(t1) ;output number + restor + popj p, + subttl Output -- OFLT/OSFLT + +;;; OFLT -- Output a fixed point decimal number (-1.0, 0.0, 1.0) +;;; OSFLT -- Output a signed fixed point decimal number (-1.0, -0.0, +1.0) +; (The sign is fixed at 1 fractional digit.). Omit the decimal +; point and fractional digit if output format is set to short. +; +; CALL OFLT (n,w) +; +; n = number to output +; w = field width for integer part +; + entry oflt,osflt +osflt: skipg @0(arg) ;n > 0? + skipa t1,[osn3.] ;no, output as negative + movei t1,osn2. ;yes, positive, even if integer part is zero + jrst .+2 +oflt: movei t1,onum. + save + move x1,@0(arg) ;get number to output + idivi x1,^D10 ;split into integer and fraction + movm x4,x2 + move x2,@1(arg) ;get field width + movei x3,^D10 ;output in decimal + pushj p,(t1) ;output integer part + skipge oflg ;short format? + jrst oflt.1 ;yes, truncate + movei c,"." + pushj p,ochr. + movei c,"0"(x4) ;get fractional digit + pushj p,ochr. +oflt.1: restor + popj p, + subttl Output -- ODISP + +;;; ODISP -- output the symbol for the object whose display code +; is disp_code. Use the long form if LNGBIT is set in OFLG, +; else use the short form. Output a space after the symbol if +; space_flag > 0. +; +; CALL ODISP (disp_code,space_flag) +; + entry odisp + sixbit /ODISP/ +odisp: move t1,@0(arg) ;get display code of object to output + skipge t1 ; defensive - watch out for 777777 + setz t1, + idivi t1,^D100 ;t1 <-- object, t2 <-- index + caile t1,^d10 ; defensive - watch out for "cloaked" ships + setzb t1,t2 + skipg oflg + movei p1,@shtdsp(t1) ;short format + skiple oflg + movei p1,@lngdsp(t1) ;long format + pushj p,ostr. + skiple @1(arg) + pushj p,ospc. + popj p, + +shtdsp: [asciz /./] + shtshp-1(t2) ;federation ship + shtshp-1(t2) ;empire ship + [asciz /<>/] ;fed base + [asciz /)(/] ;emp base + [asciz /??/] ;romulan + [asciz / @/] ;neutral planet + [asciz /+@/] ;Federation planet + [asciz /-@/] ;Empire planet + [asciz /*/] ;star + [asciz /BH/] ;black hole + +shtshp: asciz /L/ + asciz /N/ + asciz /S/ + asciz /V/ + asciz /Y/ + + asciz /C/ + asciz /D/ + asciz /H/ + asciz /J/ + asciz /W/ + +lngdsp: [asciz /Empty Space/] + @lngshp-1(t2) ;federation ship + @lngshp-1(t2) ;empire ship + [asciz /Fed Base/] + [asciz /Emp Base/] + [asciz /Romulan/] + [asciz /Neu planet/] + [asciz /Fed planet/] + [asciz /Emp planet/] + [asciz /Star/] + [asciz /Black Hole/] + +lngshp: [asciz /Lexington/] + [asciz /Nimitz/] + [asciz /Savannah/] + [asciz /Vulcan/] + [asciz /Yorktown/] + + [asciz /Cobra/] + [asciz /Demon/] + [asciz /Hawk/] + [asciz /Jackal/] + [asciz /Wolf/] + subttl Output -- ODEV + +;;; ODEV -- Output the name of a device. Use different formats +; depending on the value of OFLG (short, medium, or long). +; +; CALL ODEV (dev_num) +; + entry odev + sixbit /ODEV/ +odev: move t1,@0(arg) ;get device number + skipge oflg + movei p1,shtdev-1(t1) ;short format + skipn oflg + move p1,meddev-1(t1) ;medium format + skiple oflg + move p1,lngdev-1(t1) ;long format + pushj p,ostr. + popj p, + +shtdev: asciz /SH / ;deflector shields + asciz /WA / ;warp engines + asciz /IM / ;impulse engines + asciz /LS / ;life support + asciz /TO / ;torpedo tubes + asciz /PH / ;phasers + asciz /CO / ;computer + asciz /RA / ;radio + asciz /TR / ;tractor beam + +meddev: [asciz /Shields /] + [asciz /Warp /] + [asciz /Impulse /] + [asciz /Life Sup /] + [asciz /Torps /] + [asciz /Phasers /] + [asciz /Computer /] + [asciz /Radio /] + [asciz /Tractor /] + +lngdev: [asciz /Deflector Shields /] + [asciz /Warp Engines /] + [asciz /Impulse Engines /] + [asciz /Life Support /] + [asciz /Torpedo Tubes /] + [asciz /Phasers /] + [asciz /Computer /] + [asciz /Radio /] + [asciz /Tractor Beam /] + subttl Output -- OCOND + +;;; OCOND -- Output condition ([docked +] green, yellow, red) +; +; CALL OCOND (condition) +; + entry OCOND + sixbit /OCOND/ +ocond: move t1,who ;get player index + skipl docked-1(t1) ;docked? + jrst ocon.1 ;no, don't need "Docked+" + movei p1,[asciz /Docked+/] + skipge oflg ;short output format? + movei p1,[asciz /D+/] ;yes, use compressed format + pushj p,ostr. +ocon.1: move t1,@0(arg) ;get ship condition code + move p1,lngcnd-1(t1) + skipge oflg ;short format? + move p1,shtcnd-1(t1) ;yes, get single character condition code + pushj p,ostr. + popj p, + +lngcnd: [asciz /Green/] + [asciz /Yellow/] + [asciz /Red/] + +shtcnd: [asciz /G/] + [asciz /Y/] + [asciz /R/] + subttl Output -- OSTS./STAT + +;;; OSTS. -- Output initial gripe line info. +; +osts.: save + + ochr "[" + ochr "V" ;output version number + move x1,versio ;get version number + idivi x1,^D10 + movei c,"0"(x1) ;major version + pushj p,ochr. + movei c,"." + pushj p,ochr. + movei c,"0"(x2) ;minor version + pushj p,ochr. + + pushj p,ospc. ;output date + pushj p,ospc. + + movei x1,tmp ; get current date + calli x1,-121 ; UNDAT. uuo + jfcl + pushj p,xfrtmp + pushj p,ospc. + movei x1,tmp ; get current time + calli x1,-120 ; UNTIM. uuo + jfcl + pushj p,xfrtmp + pushj p,ospc. + pushj p,ospc. + + move x3,who ;who to output user info for + movni x4,-100 ;output all there is + skipe who ;Player in pre-game? + jrst osts.p ;no + pushj p,stat.y ;output rest of gripe info (same as user info) + skipa +osts.p: pushj p,stat.x + pushj p,ospc. + move x1,gameno ; output game # + movei x2,5 + pushj p,odec. + movei p1,[asciz / B/] + skipge blhopt ;black holes in this game? + pushj p,ostr. ;yes, show it + movei p1,[asciz / R/] + skipge romopt ;romulan in this game? + pushj p,ostr. ;yes + ochr "]" + pushj p,ocrl. + restor + popj p, + +xfrtmp: move x1,[point 7,tmp] +xfrtm1: ildb c,x1 + skipn c + popj p, + pushj p,ochr. + jrst xfrtm1 + + +;;; STAT -- Output user info. +; + entry stat + sixbit /STAT/ +stat: move x3,@1(arg) ;get player to output info for + movn x4,@0(arg) ;get number of items to output + +;;; STAT.X: In-game output routine for user info. +; +stat.x: aojg x4,stat.1 ;ship name + move p1,lngshp-1(x3) + hrli p1,(point 7) + move x1,hcpos ;remember where we started from + pushj p,ostr. ;output ship name + sub x1,hcpos ;negative number of spaces used + addi x1,^D10 ;number of filler spaces needed + pushj p,spcs. + + aojg x4,stat.1 ;captain's name + pushj p,ospc. +; pushj p,osix. + move x1,job+KNPLAY*-1(x3) ;first half of name + pushj p,osix. + move x1,job+KNPLAY*-1(x3) ;second half of name + pushj p,osix. + + aojg x4,stat.1 ;terminal speed + pushj p,ospc. + move x1,job+knplay*-1(x3) + movei x2,4 + pushj p,odec. + + aojg x4,stat.1 ;PPN + pushj p,ospc. + pushj p,ospc. + hlrz x1,job+KNPLAY*-1(x3) ;project number + movni x2,6 ;field width 6, expandable + pushj p,ooct. + movei c,"," + pushj p,ochr. + hrrz x1,job+KNPLAY*-1(x3) ;programmer number + setz x2, ;use free format + pushj p,ooct. + subi x2,6 + jrst .+2 + pushj p,ospc. ;pad in a trailing blank + aojl x2,.-1 ;go back for more + + aojg x4,stat.1 ;TTY number + pushj p,ospc. + move x1,job+KNPLAY*-1(x3) ;TTY number + pushj p,osix. ; output in sixbit! + + aojg x4,stat.1 ;job number + pushj p,ospc. + pushj p,ospc. + move x1,job+KNPLAY*-1(x3) ;job number + movei x2,3 ;field width of 3 + pushj p,odec. + +stat.1: popj p, + +;;; STAT.Y: For use in Pre-game gripes only. +; +stat.y: aojg x4,stat.2 ;ship name + movei p1,[asciz /Pre-game/] + hrli p1,(point 7) + move x1,hcpos ;remember where we started from + pushj p,ostr. ;output ship name + sub x1,hcpos ;negative number of spaces used + addi x1,^D10 ;number of filler spaces needed + pushj p,spcs. + + aojg x4,stat.2 ;captain's name + pushj p,ospc. + move x1,nam1 ;first half of name + pushj p,osix. + move x1,nam2 ;second half of name + pushj p,osix. + + aojg x4,stat.2 ;terminal speed + pushj p,ospc. + move x1,ttyspd ;TTY speed + movei x2,4 ;field width of 4 + pushj p,odec. + + aojg x4,stat.2 ;PPN + pushj p,ospc. + pushj p,ospc. + hlrz x1,ppn ;project number + movni x2,6 ;field width 6, expandable + pushj p,ooct. + movei c,"," + pushj p,ochr. + hrrz x1,ppn ;programmer number + setz x2, ;use free format + pushj p,ooct. + subi x2,6 + jrst .+2 + pushj p,ospc. ;pad in a trailing blank + aojl x2,.-1 ;go back for more + + aojg x4,stat.2 ;TTY number + pushj p,ospc. + move x1,ttynum ;TTY number + pushj p,osix. + + aojg x4,stat.2 ;job number + pushj p,ospc. + pushj p,ospc. + move x1,jobnum ;job number + movei x2,2 ;field width of 2 + pushj p,odec. + +stat.2: popj p, + subttl Random number generator + + +;;; SETRAN -- Initialize the random number generator. +; + entry setran + sixbit /SETRAN/ +setran: skipn t1,@0(arg) ;seed given? + mstime t1, ;no, make one up + movem t1,seed + popj p, + + +;;; IRAN -- Return an integer random integer between 1 and n, inclusive. +; +; ir = IRAN(n) +; + entry iran + sixbit /IRAN/ +iran: pushj p,ran. ;get "random" number + idiv t0,@0(arg) ;scale it to desired range + movei t0,1(t1) + popj p, + + +;;; RAN -- Return a floating point random number n, where 0 <= n < 1. +; +; r = RAN(dummy) +; + entry ran + sixbit /RAN/ +ran: pushj p,ran. ;get random number + fsc t0,200 ;float it + popj p, + + +ran.: move t1,seed ;get current seed + trnn t1,-1 ;any low order bits set? + hrri t1,^D260543 ;no, set some + imuli t1,^D260543 ;a big prime number < 2^18 + tlz t1,400000 ;make sure it's positive + movem t1,seed + move t0,t1 + idivi t0,^D257 ;the first prime number > 2^8 + popj p, + subttl PWR + +;;; PWR -- Raise a floating point number to an integer power. +; +; PWR(f,n) = f^n +; + entry pwr + sixbit /PWR/ +pwr: save + move x2,@0(arg) + move x3,@1(arg) + pushj p,pwr. + move t0,x1 + restor + popj p, + + +pwr.: save + cail x3,5 ;small enough to compute without recursing? + jrst pwr.1 ;no + + hrlzi t1,(1.0) ;X2 ^ 0 + cail x3,1 + move t1,x2 ;X2 ^ 1 + cail x3,2 + fmpr t1,x2 ;X2 ^ 2 + cail x3,3 + fmpr t1,X2 ;X2 ^ 3 + cail x3,4 + fmpr t1,X2 ;X2 ^ 4 + movem t1,x1 + jrst pwr.2 + +pwr.1: idivi x3,2 ;split power in half + pushj p,pwr. ;compute the value of the first half + fmpr x1,x1 ;compute the value of the two halves combined + jumpe x4,pwr.2 ;did the original power divide evenly? + fmpr x1,x2 ;no, add in one more + +pwr.2: restor + popj p, + subttl SCAN -- SETSCN + + entry setscn + sixbit /SETSCN/ +setscn: move x1,@0(arg) ;Hmin + movem x1,Hmin + move x2,@2(arg) ;Vmin + movem x2,Vmin + move x3,@3(arg) ;Vmax + movem x3,Vmax + subi x3,-1(x2) ;dV + movem x3,dV + move x4,@1(arg) ;Hmax + movem x4,Hmax + subi x4,-1(x1) ;dH + movem x4,dH + + movei p1,-1(x2) + imuli p1,ksid + movei t1,-1(x1) + idivi t1,3 + addi p1,(t1) + add p1,b12tbl-1(t2) + + move x1,p1 + move p2,[point 7,screen] + move x2,p2 + jrst sets.2 + +sets.1: addi x1,ksid + move p1,x1 + addi x2,^D9 + move p2,x2 + move x4,dH + +sets.2: ildb t1,p1 ;get object code from board + cain t1,7777 ;cloaked ship? + setz t1, ;yes, show empty space + idivi t1,^D100 ;get object code and index + xct objtbl(t1) ;get characters for object + skipl scnflg ;short scans omit the first char of pair + idpb t1,p2 ;save them in temporary screen buffer + idpb t2,p2 + sojg x4,sets.2 ;finish remaining columns on row + setz t1, + idpb t1,p2 ;terminate row with null byte + sojg x3,sets.1 ;finish remaining rows + + popj p, + + + dmove t1,[exp " ","!"] ;-1 = warning symbol +objtbl: dmove t1,[exp " ","."] ; 0 = nothing + pushj p,getshp ; 1 = fed ship + pushj p,getshp ; 2 = emp ship + dmove t1,[exp "<",">"] ; 3 = fed base + dmove t1,[exp ")","("] ; 4 = emp base + dmove t1,[exp "?","?"] ; 5 = romulan + dmove t1,[exp " ","@"] ; 6 = neutral planet + dmove t1,[exp "@","F"] ; 7 = fed planet + dmove t1,[exp "@","E"] ; 8 = emp planet + dmove t1,[exp " ","*"] ; 9 = star + dmove t1,[exp " "," "] ; 10 = black hole + +getshp: add t2,[point 7,shtshp-1,6] + movei t1," " + ldb t2,t2 + popj p, + subttl SCAN -- MARK + + entry mark + sixbit /MARK/ +mark: move x1,@1(arg) ;horizontal center + move x2,@2(arg) ;radius + move t1,Hmin + move t2,Hmax + pushj p,reloc. + jumple x2,cpopj + dmove x3,x1 ;X3 = Hf, X4 = dH + + move x1,@0(arg) ;vertical center + move x2,@2(arg) + move t1,Vmin + move t2,Vmax + pushj p,reloc. ;X1 = Vf, X2 = dV + jumple x2,cpopj + + movei p1,-1(x1) + imuli p1,ksid + movei t1,-1(x3) + idivi t1,3 + addi p1,(t1) + add p1,b12tbl-1(t2) + + movei p2,(x1) + sub p2,Vmin + imuli p2,^D9 + movei t1,(x3) + sub t1,Hmin + skipl scnflg ;short scans are only half width + addi t1,(t1) + idivi t1,5 + addi p2,(t1) + add p2,b7tbl-1(t2) + + move x1,p1 ;pointer to board + move x3,p2 ;pointer to screen buffer + movei t3,(x4) ;distance to scan accross + jrst mark.2 + +mark.1: addi x1,ksid ;next row of board + move p1,x1 + addi x3,^D9 ;next row of screen buffer + move p2,x3 + movei t3,(x4) + +mark.2: ildb t1,p1 ;get object code from board + caie t1,0 ;empty space? + cain t1,7777 ;or cloaked ship? + skipa t1,[-1] ;yes, get index to warning symbol + idivi t1,^D100 + xct objtbl(t1) ;get code for object at that location + skipl scnflg ;short scans omit first char of pair + idpb t1,p2 + idpb t2,p2 + sojg t3,mark.2 ;flag remaining columns + sojg x2,mark.1 ;flag remaining rows + popj p, + + +; Input +; X1: center +; X2: radius +; T1: min +; T2: max +; Output +; X1: first +; X2: distance +; +reloc.: movei t3,(x1) + addi t3,(x2) + caile t3,(t2) + movei t3,(t2) + subi x1,(x2) + caige x1,(t1) + movei x1,(t1) + subi t3,(x1) + hrrei x2,1(t3) + popj p, + subttl SCAN -- SHWSCN + + entry shwscn + sixbit /SHWSCN/ +shwscn: pushj p,ocrl. + pushj p,labl. ;label horizontal sectors + move x1,Vmax ;first row to display + move x2,dV + imuli x2,^D9 + addi x2,screen-^D9 ;pointer to string for row + jrst shws.2 + + +shws.1: subi x1,1 ;next row + camge x1,Vmin + jrst shws.3 ;done + subi x2,^D9 +shws.2: pushj p,o2db. ;output row number + pushj p,ospc. + movei p1,(x2) + pushj p,ostr. ;display row + pushj p,ospc. + pushj p,o2db. + pushj p,ocrl. + skipn ccflg ;^C during output? + jrst shws.1 ;no, continue scan output + setzm ccflg ;yes, clear it + popj p, ;and quit + +shws.3: pushj p,labl. + popj p, + + +labl.: save + pushj p,ospc. + move x1,Hmin + skipge scnflg ;short scan format? + addi x1,1 ;yes, make numbers line up over columns + pushj p,ospc. + pushj p,ospc. + jrst labl.2 + +labl.1: pushj p,ospc. + skipl scnflg ;short scan? + pushj p,ospc. ;no, output 2 spaces between column numbers +labl.2: pushj p,o2db. + addi x1,2 ;label every second column + skipge scnflg + addi x1,1 ;short scans label every third column + camg x1,Hmax + jrst labl.1 + pushj p,ocrl. + restor + popj p, + subttl Qmanager -- SETQH/SEQTM + +Comment % + +The procedure to make a queue entry: + 1. Call RSRV. to reserve a spot in the queue. + 2. Make an entry into the queue data area. + 3. Call UPDT. to update the queue pointers and make the new entry + available to other jobs. + +The procedure to retrieve a queue entry: + 1. Call SRCH. to locate an entry intended for a particular user. + 2. Read the specified entry. + 3. Call REMV. to remove the user from the destination word of the + entry, and possibly remove the entry. + +Structure of the queue link lists: + + +-------+-------+ + |^first | ^last | + +-------+-------+ + QLNK: | ^next | dbits | \ + +-------+-------+ \ + | ^next | dbits | QLEN + +-------+-------+ / + | -1 | dbits | / + +-------+-------+ + +All pointers (in the left half word) are relative to QLNK. +The destination bits (right half word) are never zero if the pointer in +the left half of the same word is nonzero. +% + + +;;; SETQH -- Initialize the hit queue. +; + entry setqh + sixbit /SETQH/ +setqh: setom hitql-1 ;link list header word + setzm hitql+0 ;zero all entry words + move t1,[hitql+0,,hitql+1] + blt t1,hitql+knhit-1 + popj p, + + +;;; SETQM -- Initialize the message queue. +; + entry setqm + sixbit /SETQM/ +setqm: setom msgql-1 ;link list header word + setzm msgql+0 ;zero all entry words + move t1,[msgql+0,,msgql+1] + blt t1,msgql+knmsg-1 + popj p, + subttl Qmanager -- SHQA./SHQD. + +ifn dbque., < + +;;; SHQA./SHQD. -- Show addition to/deletion from queue (for +; debugging purposes only). +; +; Input +; X1 Address of queue link list +; +shqa.: skipa t1,["+"] ;adding entry to queue +shqd.: movei t1,"-" ;removing entry from queue + skipn pasflg ; only if user has *password set! + popj p, + save + movei x3,(t1) + + hrrzi x1,(x1) ;addr of queue link list + movei p1,[asciz /[?Q/] ;unknown queue + cain x1,hitql + movei p1,[asciz /[HQ/] ;hit queue + cain x1,msgql + movei p1,[asciz /[MQ/] ;message queue + pushj p,ostr. + + movei c,(x3) ;+/- + pushj p,ochr. + pushj p,ospc. + + hrrei x3,(x2) ;entry index + addi x3,(x1) ;link list entry address + hrrz x3,(x3) ;get destination bits + + hrrei x1,(x2) ;show entry index + setz x2, + pushj p,odec. + pushj p,ospc. + + tdza x1,x1 ;show who entry is intended for +shq.1: lsh x3,-1 + jumpe x3,shq.2 + movei p1,shtshp(x1) ;pointer to first char of ship name + trne x3,1 + pushj p,ostr. ;output first char of ship name + aoja x1,shq.1 + +shq.2: movei p1,[byte (7) "]",cr,lf,0] + pushj p,ostr. + skipn hungup + output tty, + + restor + popj p, + +> ;end ifn debug. + subttl Qmanager -- RSRV. + +;;; RSRV. -- Reserve a spot in a queue. If the queue is full, it +; must be because a player somehow died without first removing his +; queue entries, or else the hit and message routines don't know +; the player is dead and are therefore still sending messages to +; him. So, in this case, take the player found in the destination +; of the first (oldest) queue entry, and remove that player from +; all queue entries. +; +; Input +; X1[L] Negative length of queue link list +; X1[R] Address of queue link list +; Output +; X2 Index of reserved entry +; +; MOVE X1,[-QLEN,,QLNK] +; PUSHJ P,RSRV. +; X2 has index +; +rsrv.: move t1,[[asciz /RSRV./],,quelok] + pushj p,lock. ;single job access only + skipe lkfail ; if lock request failed, + popj p, ; then don't mess around + pushj p,qrsrv. ; do the reserve + popj p, + + +qrsrv.: +rsrv.1: move t1,x1 ;get pointer to queue link list + skipn (t1) ;spot available? + jrst rsrv.4 ;yes, go flag it + aobjn t1,.-2 + + ;Queue is full, so remove the player probably responsible + ;for it from all queue entries. + + save + hlrz t1,-1(x1) ;get index to first (oldest) entry + addi t1,(x1) ;get addr of entry + hrrz t1,(t1) ;get destination bits of entry + movni x3,(t1) + andi x3,(t1) ;get single destination bit +rsrv.2: pushj p,srch.x ;find entry destined for player + jrst rsrv.3 ;no more entries destined for him + pushj p,remv.x ;remove player from entry + jrst rsrv.2 ;and all remaining entries +rsrv.3: restor + jrst rsrv.1 ;and start over + + ;Found an empty spot in queue. + +rsrv.4: setom (t1) ;reserve spot in queue + subi t1,(x1) ;get it's index + hrrzi x2,(t1) + + movei t1,quelok + pushj p,unlo. + popj p, + page + subttl Qmanager -- RSRVHQ +; CALL RSRVHQ (q) +; Called from FORTRAN level to reserve a spot in the hit queue. +; The que spot is returned in q +; If unable to reserve a spot, lkfail is set + +rsrvhq:: + setzm lkfail ; new MAKHIT does not need this routine + popj p, + + + subttl Qmanager -- UPDT. + +;;; UPDT. -- Update queue link list pointers to make new entry +; available. +; +; Input +; X1[R] Address of queue link list +; X2 Index to reserved spot +; X3[R] Destination bits +; +updt.: move t1,[[asciz /UPDT./],,quelok] + pushj p,lock. ;single job access only + skipe lkfail + jrst updt. ; we must update the queue! + pushj p,qupdt. ; do the actual update + popj p, + + +qupdt.: hrre t1,-1(x1) ;index to last entry in queue link list + addi t1,(x1) ;address of last entry + hrlm x2,(t1) ;add new entry to chain + hrrm x2,-1(x1) ;new last entry + movei t1,(x2) ;index to new entry + addi t1,(x1) ;address of new entry + hrrom x3,(t1) ;save destination bits,,data + + movei t1,quelok + pushj p,unlo. +ifn dbque., < + pushj p,shqa. +> ;end ifn debug. + popj p, + subttl Qmanager -- SRCH. + +;;; SRCH. -- Search a queue link list for an entry to be received +; by a particular player. +; +; Input +; X1[R] Address of queue link list +; X3 Destination bit to check for +; Output +; X2[R] Index to entry +; X2[L] Address of previous entry +; +; MOVEI X1,QLNK +; PUSHJ P,SRCH. +; no matching entries found +; X2 contains index to entry +; +srch.: move t1,[[asciz /SRCH./],,quelok] + pushj p,lock. ;single job access only + skipe lkfail + popj p, + pushj p,srch.x + jrst .+2 + aos (p) + movei t1,quelok + pushj p,unlo. + popj p, + +srch.x: hrlzi x2,-1(x1) + hlre t1,-1(x1) ;index to first entry in queue +srch.1: jumpl t1,srch.3 ;end of chain, and no match + addi t1,(x1) ;address of entry + tdne x3,(t1) ;this entry for this player? + jrst srch.2 ;yes + hrlzi x2,(t1) ;remember address of entry + hlre t1,(t1) ;get index to next entry + jrst srch.1 + +srch.2: subi t1,(x1) + hrri x2,(t1) + aos (p) + +srch.3: popj p, + subttl Qmanager -- REMV. + +;;; REMV. -- Remove a player from the destination bits of a queue +; entry. If no more destination bits are set, remove the entry +; from the queue. +; +; Input +; X1[R] Address of queue link list +; X2[L] Address of entry preceding the entry to be removed +; X2[R] Index to entry to remove +; X3 Bit to zero in destination word +; +remv.: move t1,[[asciz /REMV./],,quelok] + pushj p,lock. ;single job access only + skipe lkfail ; if lock failed + jrst remv. ; then keep trying (we gotta remove him!) + pushj p,remv.x + movei t1,quelok + pushj p,unlo. + popj p, + +remv.x: +ifn dbque., < + pushj p,shqd. +> ;end ifn debug. + movei t1,(x1) ;address of queue link list + addi t1,(x2) ;address of entry to remove player from + andcam x3,(t1) ;zero out player's bit + move t2,(t1) ;get remaining destination bits + trne t2,777777 ;any of them set? + jrst remv.2 ;yes, done + + hlrz t3,x2 ;get address of preceding entry + hllm t2,(t3) ;forget about the removed entry + jumpge t2,remv.1 ;wasn't last entry + subi t3,(x1) ;get index to preceding entry + hrrm t3,-1(x1) ;new last entry +remv.1: setzm (t1) ;zero entry so it can be used again + +remv.2: popj p, + subttl Hit communication -- MAKHIT + +;;; MAKHIT -- Record a hit in the hit queue so the victim can receive +; a message that he's been hit. +; +; SUBROUTINE MAKHIT +; +; Uses these low segment common variables: +; DBITS (18) Bits of players to receive the message +; +; DISPFR (18) DISP code of player who scored the hit +; DISPTO (18) DISP code of player who received the hit +; IWHAT ( 4) The type of hit +; IHITA (18) The size of the hit +; CRITDV ( 4) The critical device that was damaged +; CRITDM (18) The amount of damage done to the device +; VFROM ( 7) The vertical coordinate of the source +; HFROM ( 7) The horizontal coordinate of the source +; VTO ( 7) The vertical coordinate of the destination +; HTO ( 7) The horizontal coordinate of the destination +; KLFLG ( 2) Swallowed by black hole flag +; SHCNFR ( 1) +; SHCNTO ( 1) +; SHSTFR (10) +; SHSTTO (10) +; SHJUMP ( 1) +; +; Structure of hit queue entry: +; +; DISPFR,,DISPTO +; IHITA,,CRITDM +; B3 + B7 + B14 + B21 + B28 + B35 +; B1 + B2 + B3 + B13 + B23 +; + B24 +; + entry makhit + sixbit /MAKHIT/ +makhit: skipn dbits + jrst mhit.3 ;no players to inform, so don't + move x1,who ; scan this ship's hit list for first + sos x1 ; free entry or the oldest one + imuli x1,knhshp ; x1 = first entrh in hitql + move x2,x1 + movei t1,knhshp ; scan this many entries + move t3,hitser ; = highest entry expected +mhit.a: move t2,hitql(x1) ; get the queue entry + trnn t2,777777 ; if this one is empty + jrst [move x2,x1 ; then use it + jrst mhit.b] + hlrzs t2 ; else check its age + camge t2,t3 + jrst [move t3,t2 ; save the new oldest one + move x2,x1 + jrst .+1] + aos x1 + sojg t1,mhit.a + ; x2 now points to the oldest entry +mhit.b: aos t1,hitser ; bump the serial number + hrlzm t1,hitql(x2) + movei t1,(x2) + imuli t1,4 ;get offset into hit queue + addi t1,hitq ;get absolute address of entry + + move t2,dispfr ;DISP code of source + hrlm t2,0(t1) + move t2,dispto ;DISP code of target + hrrm t2,0(t1) + move t2,ihita ;size of hit + hrlm t2,1(t1) + move t2,critdm ;amount of critical damage + hrrm t2,1(t1) + move t2,iwhat ;type of hit + caile t2,0 + caile t2,^D15 + jrst .+2 + jrst mhit.1 + skipn pasflg + jrst mhit.1 + save + pushj p,ocrl. + movei p1,[asciz /%Illegal IWHAT code in MAKHIT: /] + pushj p,ostr. + move x1,t2 + setz x2, + pushj p,odec. + pushj p,ocrl. + restor +mhit.1: + dpb t2,[point 4,2(t1),3] + move t2,critdv ;device critically damaged + dpb t2,[point 4,2(t1),7] + move t2,Vfrom + dpb t2,[point 7,2(t1),14] + move t2,Hfrom + dpb t2,[point 7,2(t1),21] + move t2,Vto + dpb t2,[point 7,2(t1),28] + move t2,Hto + dpb t2,[point 7,2(t1),35] + move t2,klflg ;killed flag + dpb t2,[point 2,3(t1),1] + skipg t2,shcnfr ;+1 + setz t2, ;-1 goes to 0 for queue storage + dpb t2,[point 1,3(t1),2] + move t2,shcnto + skipg t2,shcnto + setz t2, + dpb t2,[point 1,3(t1),3] + move t2,shstfr + dpb t2,[point 10,3(t1),13] + move t2,shstto + dpb t2,[point 10,3(t1),23] + move t2,shjump + dpb t2,[point 1,3(t1),24] + + move x3,dbits ;destination bits + iorm x3,hitql(x2) ; set the destination bits in queue +mhit2a: move t1,dbits ;get bits of players to inform + setzb t2,dbits +mhit.2: trne t1,1 ;inform this guy? + aos hitflg(t2) ;yes, increment his hit flag + lsh t1,-1 ;get bit for next guy + aoj t2, ;index for next guy's hit flag + jumpn t1,mhit.2 ;inform next guy + +mhit.3: setzm dispfr + setzm dispto + setzm ihita + setzm critdm + setzm iwhat + setzm critdv + setzm Vfrom + setzm Hfrom + setzm Vto + setzm Hto + setzm klflg + setzm shcnfr + setzm shcnto + setzm shstfr + setzm shstto + setzm shjump + popj p, + subttl Hit communication -- GETHIT + +;;; GETHIT -- Retrieve hit information from the hit queue for the +; specified player. +; +; SUBROUTINE GETHIT (player) +; +; Parameters are the same as in MAKHIT, except they are returned +; instead of set. +; + entry gethit + sixbit /GETHIT/ +gethit: move t1,@0(arg) ;index of player + sosl hitflg-1(t1) ;decrement hit count + jrst ghit.2 ;there was at least one hit queued +ghit.1: setzm dispfr + setzm dispto + setzm ihita + setzm critdm + setzm iwhat + setzm critdv + setzm Vfrom + setzm Hfrom + setzm Vto + setzm Hto + setzm klflg + setzm shcnfr + setzm shcnto + setzm shstfr + setzm shstto + setzm shjump + popj p, + +ghit.2: setz x2, ; index into hit queue + move x3,bits-1(t1) ;bit of player to check for + movei t1,knhit ; total number of entries in hit queue +ghit.a: tdnn x3,hitql(x2) ; if this one is for this ship + sojg t1,[aoja x2,ghit.a] + jumple t1,ghit.1 ; jump if none found + movei t1,(x2) + imuli t1,4 ;offset into hit queue + addi t1,hitq ;absolute location of entry + + hlrz t2,0(t1) + cain t2,777777 ; defensive + setz t2, + movem t2,dispfr ;DISP code of source + hrrz t2,0(t1) + cain t2,777777 ; defensive + setz t2, + movem t2,dispto ;DISP code of destination + hlrz t2,1(t1) + movem t2,ihita ;size of hit + hrrz t2,1(t1) + movem t2,critdm ;amount of critical damage + ldb t2,[point 4,2(t1),3] + movem t2,iwhat ;type of hit + ldb t2,[point 4,2(t1),7] + movem t2,critdv ;device critically damaged + ldb t2,[point 7,2(t1),14] + movem t2,Vfrom + ldb t2,[point 7,2(t1),21] + movem t2,Hfrom + ldb t2,[point 7,2(t1),28] + movem t2,Vto + ldb t2,[point 7,2(t1),35] + movem t2,Hto + ldb t2,[point 2,3(t1),1] + movem t2,klflg ;swallowed by black hole flag + ldb t2,[point 1,3(t1),2] + trnn t2,1 ;0 in queue + seto t2, ;was really -1 on input + movem t2,shcnfr + ldb t2,[point 1,3(t1),3] + trnn t2,1 + seto t2, + movem t2,shcnto + ldb t2,[point 10,3(t1),13] + movem t2,shstfr + ldb t2,[point 10,3(t1),23] + movem t2,shstto + ldb t2,[point 1,3(t1),24] + movem t2,shjump + movei t2,(x2) + addi t2,hitql ;index into destination list + hrrz t2,(t2) + movem t2,dbits ;destination bits + andcam x3,hitql(x2) ; remove this entry + popj p, + subttl Message communication -- MAKMSG + +;;; MAKMSG -- Enter a message into the message queue. +; +; SUBROUTINE MAKMSG (msg) +; +; Uses the low segment variables DISPFR and DBITS, which tell who +; the message came from and who it's going to. MSG is optional, +; and if not specified the message will be taken from the TTY. +; + entry makmsg + sixbit /MAKMSG/ +makmsg: skipn dbits + popj p, ;no guys to inform, so don't + + hlre p1,-1(arg) ;neg number of args + jumpe p1,mmsg.1 ;no arguments, so get input from TTY + movei p1,@0(arg) ;get address of string to send + move t3,(p1) ;get first word of string + tlnn t3,777777 + move p1,(p1) ;arg was really address of address + hrli p1,(point 7) ;create pointer to source string + jrst mmsg.3 + +mmsg.1: move p1,[point 36,linbuf] +mmsg.2: ildb c,p1 ;get char + cain c,";" ;start of message + jrst mmsg.3 ;yes, message has already been typed + jumpn c,mmsg.2 ;search rest of line + movei p1,[asciz /Msg: /] + pushj p,ostr. + pushj p,inli. ;get line of input + skipe ccflg ;^C? + jrst mmsg.5 ;yes, no message sent + move p1,[point 36,linbuf] + +mmsg.3: move x1,[-knmsg,,msgql] ;message queue link list + pushj p,rsrv. ;reserve a spot in the message queue + skipe lkfail ; if lock failed, + jrst mmsg.3 + movei t1,(x2) + imuli t1,msglen ;get offset into message queue + add t1,[point 7,msgq+1] + hrlz t2,dispfr ;from + hrr t2,dbits ;to + movem t2,-1(t1) + movni t2,*5-3 ;max number of chars to store + +mmsg.4: ildb c,p1 + aojge t2,.+2 ;more room in buffer? + idpb c,t1 ;yes, stick character into buffer + move t3,cbits(c) ;get character type bits + trnn t3,cf.eol ;end of line? + jrst mmsg.4 ;no, keep on reading + + movei c,cr + dpb c,t1 ;force a + movei c,lf + idpb c,t1 ;force a + setz c, + idpb c,t1 ;end message with null byte + + addi t2,*5-3 ;number of characters in message + caile t2,2 ;more than 2 characters? + jrst mmsg.6 ;yes +mmsg.5: movei p1,[ascil ] + pushj p,ostr. + seto x3, + move x1,[-knmsg,,msgql] + pushj p,remv. ;free up reserved spot + jrst mmsg.8 + +mmsg.6: move x3,dbits ;destination bits + pushj p,updt. ;make queue entry + move t1,dbits ;get bits of players to inform + setz t2, +mmsg.7: trne t1,1 ;inform this player? + aos msgflg(t2) ;yes, increment his message count + lsh t1,-1 ;get next player's bit + aoj t2, ;index of next player's mesage count + jumpn t1,mmsg.7 ;inform next player + +mmsg.8: setzm dbits + popj p, + subttl Message communication -- GETMSG + +;;; GETMSG -- Retrieve a message from the message queue for the +; specified player. +; +; SUBROUTINE GETMSG (player,msg) +; +; Output +; DISPFR code for sender of message +; DBITS bits of all receivers of message +; + entry getmsg + sixbit /GETMSG/ +getmsg: move t1,@0(arg) ;index of player + sosl msgflg-1(t1) ;decrement message count + jrst gmsg.2 ;there was a message waiting +gmsg.1: move t1,@0(arg) + setzm msgflg-1(t1) + setzm dispfr + setzm dbits + popj p, + +gmsg.2: movei x4,@1(arg) ;address of array to store message in + movei x1,msgql ;address of message queue link list + move x3,bits-1(t1) ;bit of player to check for + pushj p,srch. ;get index into message queue + jrst gmsg.1 ;no entry -- something went wrong + movei t1,(x2) + imuli t1,msglen ;get relative index to message + addi t1,msgq ;get absolute index to message + hlrz t2,(t1) + cain t2,777777 + setz t2, + movem t2,dispfr ;who sent the message + hrrz t2,(t1) + cain t2,777777 + setzm t2, + movem t2,dbits ;who the message was sent to + + hrlzi t1,1(t1) ;FROM,,0 + addi t1,(x4) ;FROM,,TO + blt t1,msglen-2(x4) ;transfer message to array + + pushj p,remv. ;remove entry from message queue + popj p, + subttl JOBSTA + + ;Return various job related parameters. + ; + ;SUBROUTINE JOBSTA (job,nam1,nam2,ppn,TTY#,TTYspeed) + + entry jobsta + sixbit /JOBSTA/ + entry usrprj +usrprj: hlrz 0,usppn.# ; return user's project # + cain 0,337 ; watch for devel. ppn + movei 0,70000 ; make it look like CIS staff + popj p, + +; chkseq: check jobs for continued activity +; call chkseq (from GETCMD) + + sixbit /frcchk/ +frcchk:: + setzm jsqtim + jrst chkseq ; force sequence check on new user + sixbit /chkseq/ +chkseq:: + + popj p, ; ignore it for now! + + calli t1,-210 ; is it time to check? + move t1,jsqtim ; in case of failure, do check now + camge t1,jsqtim + popj p, ; no + addi t1,^d60*3 ; yes. set time for next check + movem t1,jsqtim + movei t1,^d9 ; scan the table +chksq0: skipn t2,jsqtab(t1) ; if this one active + jrst chksq1 ; then + hrlz t3,t2 ; get that job's sequence number + hrri t3,45 + gettab t3, + jrst chksq2 ; failure - go free the ship + xor t3,t2 ; if same seq # + tlnn t3,-1 ;then + jrst chksq1 ; check next ship +chksq2: save + setzm jsqtab-1(t1) + movei t2,1(t1) ; else free this ship + push p,t2 + movei arg,0(p) + push p,arg + movei arg,0(p) + pushj p,free## + sub p,[2,,2] + restore +chksq1: sojge t1,chksq0 + popj p, + + sixbit /JOBSTA/ +jobsta: + output tty, ; flush tty buffer + pjob t1, + movem t1,@kjob-1(arg) ;job number + +;commented by merlyn (drforbin) +; move t1,[ 2,,[ 1016 +; -1 +; ] +; ] +; trmop. t1, ; get terminal's baud code +; movei t1,4 ; assume 300 baud +; caile t1,8 ; don't show higher than 2400 baud +; movei t1,6 +; move t1,[ ^d300 ; 0 = undefined; assume 300 +; ^d110 ; 1 +; ^d134 ; 2 +; ^d150 ; 3 +; ^d300 ; 4 +; ^d600 ; 5 +; ^d1200 ; 6 +; ^d1800 ; 7 +; ^d2400 ; 8 +; ](t1) +; movem t1,@kttysp-1(arg) + + + +;rewrite by merlyn (drforbin) + move t1,[ 2,,[ .TORSP + -1 + ] + ] + trmop. t1, ; get terminal's baud code + movei t1,7 ; assume 300 baud + caile t1,13 ; don't show higher than 2400 baud + movei t1,11 + move t1,[ ^d300 ; 0 = undefined; assume 300 + ^d50 ; 1 + ^d75 ; 2 + ^d110 ; 3 + ^d134 ; 4 + ^d150 ; 5 + ^d200 ; 6 + ^d300 ; 7 + ^d600 ; 8 + ^d1200 ; 9 + ^d1800 ; 10 + ^d2400 ; 11 + ](t1) + movem t1,@kttysp-1(arg) +;end rewrite + + + skipe t1,who ; if ship is assigned +; jrst [calli t2,-46 ;commented drforbin;then set up the sequence # + jrst [pjob t2, ;added drforbin;then set up the sequence # + jfcl + movem t1,jsqwho ; remember that we have it + movem t2,jsqtab-1(t1) + jrst .+1 + ] + setz t2, + getppn t1, + jfcl + camn t1,[337,,2030] + seto t2, + ldb t3,[point 9,t1,8] + cain t3,077 + movei t2,1 + movem t2,debflg + +;changed by drforbin (merlyn) +;replaced use of tmpcor ppn with standard monitor call +; move t1,usppn.## ; transfer user's ppn + + + getppn t1, ;added drforin + movem t1,usppn.# ;added drforbin + movem t1,@kppn-1(arg) + setzm frebie + hlrz t1,t1 + caige t1,70010 + setom frebie + trc t1,77000 + trnn t1,77000 + setom frebie + andi t1,7 + cain t1,3 + setom frebie +;drforbin below commented-Used by CIS for returing to fortran (user id #1 user id #2) +; move t1,usid1.## ; and account id +; movem t1,@knam1-1(arg) +; move t1,usid2.## +; movem t1,@knam2-1(arg) + getlin t1, ;tofix ; store tty name + movem t1,@4(arg) +;all 3 commented below by drforbin(merlyn) was used by CIS for player name from cb handle uscbh. (user cb handle). +;also remove usid1. (user id #1) CIS + move t1,[point 7,uscbh.] +; ldb t2,[point 7,uscbh.,6];drforbin(merlyn)deleted ## ; if there is a CB handle + ldb t2,[point 7,uscbh.,7];changed 6 to 7 right most bit ; if there is a CB handle + jumpn t2,gnm2 ; then use it as player's name +; skipe usid1.## ; else if user has an acct ID +; jrst gnm5 ; then use that + +gnm: skipn hungup + setzm uscbh. + setzm uscbh.+1 + setzm hand + setzm hand+1 + setzm @knam1-1(arg) + setzm @knam2-1(arg) + outstr [asciz " +Your name please: "] ; else ask for his/her name +; move t1,[point 7,uscbh.];deleted drforbin(merlyn) # + setzm ccflg +gnm0: inchwl t2 + caie t2,03 ; if ^C + skipe ccflg + popj p, ; return if ^C while doing this + jumpe t2,gnm0 + cain t2,15 + jrst gnm0 + caie t2,12 + cain t2,33 + jrst gnm1 + cain t2,7 + jrst gnm1 + idpb t2,t1 + jrst gnm0 + +gnm1: movei t2,0 + idpb t2,t1 + move t1,[point 7,uscbh.] ;deleted # drforbin + +gnm2: move t2,[point 6,hand] ;added 'hand' as variable (DF) drforbin + setzm tmp + setzm tmp+1 + +gnm3: ildb t3,t1 + jumpe t3,gnm4 + cail t3,"a" + caile t3,"z" + trc t3,40 + idpb t3,t2 + came t2,[point 6,hand+1,35] ;same as above(DF) drforbin + jrst gnm3 + +gnm4: move t1,hand ;same as above(DF) drforbin + jumpe t1,gnm + movem t1,@knam1-1(arg) + move t1,hand+1 + movem t1,@knam2-1(arg) +gnm5: +;*** CIS change: + + popj p, + + subttl INPUT/CLEAR + + entry input + sixbit /INPUT/ +input: skiple bufptr ;any part of multiple command line left? + jrst inpt.2 ;yes, go get it + skipge iniflg ;input from DECWAR.INI? + jrst inpt.2 ;yes, always return input ready + skipg t1,@0(arg) ;get # of milliseconds to wait for input + jrst inpt.1 ;he doesn't want us to wait + move t1,locked ; don't keep database while hibernating + movem t1,svlock + skipe t1 + pushj p,unlo. + move t1,@0(arg) + hrli t1,(HB.RTC) ;wake when character is ready + hiber t1, ;wait for command + halt + skipe t1,svlock + jrst [pushj p,lock. + skipe lkfail + jrst .-1 + jrst .+1] +inpt.1: setz 0, ;assume wake because of time out + skipe hungup ; if user hung up + jrst inpt.2 ; then we will force "input" + skpinc ;input waiting? + skipe ccflg ;or ^C interrupt? +inpt.2: seto 0, ;yes, flag input ready + save<0> + restore<0> + popj p, + + + entry clear + sixbit /CLEAR/ +clear: skipe hungup ; if job is not hungup + clrbfi ;clear the input buffer + setom bufptr ;clear multiple command line + popj p, + subttl BLKSET/BLKMOV/LOCF + +;;; BLKSET -- Fill a array or data area with a value. +; +; CALL BLKSET (array,value,size) +; + entry blkset + sixbit /BLKSET/ +blkset: move t1,@1(arg) ;get value + movem t1,@0(arg) ;store it in the first word + movei t1,@0(arg) + hrli t1,(t1) + aoj t1, + movei t2,-2(t1) + add t2,@2(arg) + blt t1,(t2) + popj p, + + +;;; BLKMOV -- Move a block of data. +; +; call BLKMOV (from,to,nwords) +; + entry blkmov + sixbit /BLKMOV/ +blkmov: hrli t1,@0(arg) + hrri t1,@1(arg) + movei t2,-1(t1) + add t2,@2(arg) + blt t1,(t2) + popj p, + + +;;; LOCF -- Return the location of a variable. +; +; addr = LOCF(var) +; + entry locf + sixbit /LOCF/ +locf: movei 0,@0(16) + popj 17, + subttl DAYTIM/RUNTIM/ETIM/PAUSE + + ;Return the current time of day. + ; + ; CALL DAYTIM (DTIM) + + entry daytim + sixbit /DAYTIM/ +daytim: mstime 0, + movem 0,@0(arg) + popj p, + + + ;Return the current run time. + ; + ; CALL RUNTIM (RTIM) + + entry runtim + sixbit /RUNTIM/ +runtim: setz 0, + runtim 0, + movem 0,@0(arg) + popj p, + + + ;Return the amount of time elapsed since the given time. + ;The given time is in milliseconds past midnight, and may + ;exceed 24*60*60*1000. + ;If the given time is yet to come, return a negative elapsed + ;time. This routine will not return an elapsed time with + ;an absolute value greater than 12 -- it returns the smallest + ;of the values + ; abs(TIM0) - current_time + ; abs(TIM0) - current_time + 12 hours + ; + ; dT = ETIM (TIM0) + + entry etim + sixbit /ETIM/ +etim: mstime 0, + sub 0,@0(arg) + camge 0,[-<^D1000*^D60*^D60*^D12>] + sub 0,[-<^D1000*^D60*^D60*^D24>] + camle 0,[^D1000*^D60*^D60*^D12] + sub 0,[^D1000*^D60*^D60*^D24] + popj p, + + + ;Pause for the specified number of milliseconds. + ; + ; CALL PAUSE (time) + + entry pause + sixbit /PAUSE/ + + +;both comments and mstime calls added by merlyn + + +pause: + skipg @0(arg) ; if hibernate time .le. 0 + popj p, ; then don't hibernate! + move t1,locked + movem t1,svlock + skipe t1 + pushj p,unlo. + move t1,@0(arg) + jumple t1,paus.3 + caile t1,^d10000 ; if > 10 seconds, make it 10 seconds + movei t1,^d10000 +; idivi t1,^d333 ; convert ms to (approx) unitics + mstime t3, ; get current UTC +; setz t3, + add t3,t1 ; t3 holds end of time period + move t1,@0(arg) ; get MS again + caile t1,^d10000 + movei t1,^d10000 + +paus.4: hiber t1, + halt + + mstime t2, ; get current UTC +; setz t2, + movei t1,^d1000 ; hibernate extra second + camge t2,t3 ; if not time to wake up yet + jrst paus.4 +paus.3: skipe t1,svlock + jrst [pushj p,lock. + skipe lkfail + jrst .-1 + jrst .+1] + popj p, + subttl PRGNAM/USRNAM + +;;; PRGNAM -- Change the name of the program. +; +; CALL PRGNAM (name) +; + entry prgnam + sixbit /PGRNAM/ +prgnam: + popj p, + +;;; USRNAM -- Change the name of the user in the JOB array. +; +; f = USRNAM (index) +; +; where index is the number of the token preceding the name. +; f is true if the name got set (non zero), otherwise it's false. +; + entry usrnam + sixbit /USRNAM/ +usrnam: setz t0, ;get set to return false + skipn p1,@0(arg) ;get token index + jrst usrn.2 ;first token, so start scanning at first char + + move p1,ptrlst-1(p1) ;get ptr to first char of token preceding name +usrn.1: skipn c,(p1) ;get char of token + jrst usrn.5 ;end of line, and no name found + hrl c,cbits(c) ;get character type bits + tlnn c,cf.dlm ;delimiter (end of token)? + aoja p1,usrn.1 ;no, keep looking + + aoja p1,.+2 ;skip to first char of new name +usrn.2: movei p1,linbuf ;pointer to first char of input line + move p2,[point 6,tmp];stick it here for right now + setzm tmp+0 + setzm tmp+1 + + movei t1,^D12 ;copy at most 12 characters +usrn.3: skipn c,(p1) ;get character from input line + jrst usrn.4 ;end of line, so done + caile c,137 ;lower case? + trz c,040 ;yes, make upper case + subi c,040 ;convert to sixbit + jumpge c,.+2 + addi c,100 ;oops, went the wrong way + idpb c,p2 ;and stow it away + addi p1,1 ;point to next char of input + sojg t1,usrn.3 ;and get any more characters + +usrn.4: dmove t1,tmp + jumpn t1,.+3 ;first half of name zero? + jumpn t2,.+2 ;and second half of name zero? + jrst usrn.5 ;yes, don't set name, and return false + seto t0, ;return true + move t3,who ;get index of player + movem t1,JOB-1+*KNPLAY(t3) + movem t2,JOB-1+*KNPLAY(t3) + +usrn.5: setom bufptr ;SET NAME is last on line + popj p, + subttl CCTRAP + +;;; CCTRAP -- Control action of ^C when not waiting for input. +; +; CALL CCTRAP !turn ^C off +; or +; CALL CCTRAP (sub) !trap to sub on ^C +; +; The FORTRAN calling routine must declare sub to be external. +; ^C will be disabled for the duration of the trap routine, +; but the original action will be automatically restored when +; the routine is finished (the trap routine may call CCTRAP, +; but it won't take affect until after the return from the +; original trap routine). +; + entry cctrap + sixbit /CCTRAP/ +cctrap: movei t1,@0(arg) ;get address of trap routine + movem t1,trpadr ;save it for ^C interrupt handler + setzm ccflg ;clear ^C flag + popj p, + subttl INTH. + +;;; INTH. -- Interrupt handler. Take care of ^C and fatal errors. +; +; On trapped interrupt: +; If fatal error then +; Abort. +; (If we get this far the interrupt must have been ^C.) +; Decrement CCFLG (sets it to TRUE if it was FALSE). +; If CCFLG < -10 then +; Something must be wrong, so abort. +; Re-enable interrupt handler. +; If not already processing ^C interrupt then +; Set ^C process flag. +; Save the ACs. +; If INCHWL instruction was interrupted then +; Store ^C in character address (as if input had returned ^C). +; Set interrupted PC to continue at instruction following the +; input instruction. +; Else if HIBER instr with wake on input selected was interrupted then +; Set PC to continue at normal return from HIBER (satisfy input +; ready condition). +; Else if a trap routine is selected then +; Execute the trap routine. +; Restore the ACs. +; Clear ^C process flag. +; Continue execution at the interrupted PC. +; +inth.: + push p,intadr ;set up stack with PC at time of interrupt + skipge ccflg. ; if already working on ^C + jrst [setzm intadr + popj p,] + setom ccflg. ; cleared by GTKN. call + setom ccflg + skipe inwait ; if waiting for input + aos 0(p) ; then don't continue with the inchwl + setzm intadr + skipn trpadr ; if a ^C trap processor given + popj p, ; then do something about it + aose intflg ; if already processing ^C + popj p, ; then don't do it again + movem 0,savr+0 ;save AC0 to AC16 + move 0,[1,,savr+1] + blt 0,savr+16 + skipe t1,trpadr ; safety first! + pushj p,(t1) ; do it + move 16,[savr+0,,0] ;restore AC0 to AC16 + blt 16,16 + setom intflg ;finished processing ^C interrupt + popj p, + subttl ABORT + +;;; ABORT -- If you have to leave the hard way, at least die gracefully. +; +; (Doesn't really do all of this yet) +; If we got this far, the high segment must be bashed, so: +; Rename high segment to itself to remove it from the swapper. +; Set ENDFLG to true so all players will die on their next turn. +; Issue message to all players. +; Log the error. +; Exit. +; +abort: skipn hungup + outstr [asciz " +The center of the galaxy has exploded! +This game and all living things are +now ended! +"] + move t1,intsav ;restore only bashed AC + skipn hungup + output tty, + skipn .JBDDT ;DDT loaded? + jrst abor.1 ;no, do normal error exit + skipn hungup + outstr [asciz /CONTINUE to finish up, DDT to examine error/] + calli 1,-2 ; "silent exit" +d.:: +abor.1: pushj p,kilhgh ;remove high segment from swapper + setom endflg ;game is over + setzm dispfr ;who the message is coming from + setom dbits ;who it's going to + argblk <[asciz "The center of tha galaxy has exploded!"]> + pushj p,makmsg + ;log error + jrst monit + subttl KILHGH/KILLOW + +;to fix---drforbin- +;;; KILHGH -- Remove DECWAR high segment from the swapper. +; + entry kilhgh + sixbit /KILHGH/ +kilhgh: skipe dead ;high seg alread removed? + popj p, ;yes, don't kill it again + + setz t1, + move t2,p.dev + setz t3, + open ren,t1 + jrst kilh.1 + + move t1,p.nam ;get name of binary file + hrlzi t2,'SHR' ;assume an extension of SHR + setzb t3, + + move t4,p.ppn + lookup ren,t1 + jrst kilh.1 + + move t4,p.ppn + rename ren,t1 ;remove high segment from swapper +kilh.1: warn ,kilh.2 + movei p1,[ascil <[DECWAR high segment removed from swapper]>] + pushj p,ostr. + setom dead + skipn hungup + output tty, + jfcl +kilh.2: popj p, + + +;;; KILLOW -- Get rid of once only low segment code (SETUP, etc.) +; and fix up the start address to do a RUN on DECWAR. +; + extern a ;kill everything after this dummy subroutine + entry killow + sixbit /KILLOW/ +killow: skipe .JBDDT ;DDT loaded? + popj p, ;yes, don't wipe out DDT + + movei t1,start + hrrm t1,.JBSA ;on a START do a RUN instead + movei t1,a + movem t1,.JBFF + core t1, ;get rid of once only code + warn + popj p, + +start:: move t1,p.dev + movem t1,tmp+0 ;device + move t1,p.nam + movem t1,tmp+1 ;name + setzm tmp+2 ;extension + setzm tmp+3 + move t1,p.ppn + movem t1,tmp+4 ;PPN + setzm tmp+5 ;core + movei t1,tmp + jrst rundec ;go run the game (from the low segment) + subttl DEBUG + + extern unkcom,forhlp + + entry timin,timout + sixbit /TIMIN/ +timin: pushj p,timsrc ; find index in TIMNAM + movem t1,timlcn(t2) ; save name locally + calli t1,-210 ; get UCT + setz t1, + movem t1,timsta(t2) + popj p, + + sixbit /TIMOUT/ +timout: pushj p,timsrc ; get index + came t1,timlcn(t2) ; if not same name + popj p, ; forget it this time! + aos timcnt(t2) ; bump total count + calli t1,-210 ; get current time + setz t1, + sub t1,timsta(t2) ; t1 = unitics + addm t1,timtot(t2) + camle t1,timhi(t2) + movem t1,timhi(t2) + popj p, + +timsrc: move t1,@0(arg) ; search for the timer name + movei t2,^d49 + camn t1,timnam(t2) + popj p, + skipe timnam(t2) + sojg t2,.-3 + skipn t2 + move t1,[asciz '?????'] + movem t1,timnam(t2) + setzm timhi(t2) + popj p, + entry debug + sixbit /DEBUG/ +debug: skipge pasflg ;has the user supplied the password? + jrst deb.1 ;yes, he's ok + movei p1,unkcom ;"Unknown command" + pushj p,ostr. + movei p1,forhlp ;" -- for help type HELP" + pushj p,ostr. + popj p, + +deb.1: ; display the timers + outstr [asciz " +Name Calls Total High + +"] + movei x1,^d49 +deb.2: skipn timnam(x1) + popj p, + move t1,timnam(x1) + setz t2, + outstr t1 + outchr [11] + move t1,timcnt(x1) + pushj p,debdec + outchr [11] + move t1,timtot(x1) + imuli t1,^d60*^d60*^d24 + hlrzs t1 + pushj p,debdec + outchr [11] + move t1,timhi(x1) + imuli t1,^d60*^d60*^d24 + hlrzs t1 + pushj p,debdec + outstr [asciz " +"] + soja x1,deb.2 + + + subttl EQUAL + +;;; EQUAL -- compare equality of 2 strings. The case of the characters +; doesn't matter. Either null, space, or 5 characters is end of string. +; +; v = EQUAL (str1,str2) +; +; If str1 is exactly equal to str2, v is -2. +; If str1 is a substring of str2, v is -1. +; If str1 doesn't match str2 at all, v is 0. +; + entry equal + sixbit /EQUAL/ +equal: save + movei p1,@0(arg) ;pointer to substring string + movei p2,@1(arg) ;pointer to master string + pushj p,equal. + restor + popj p, + +equal.: save + hrli p1,(point 7) + hrli p2,(point 7) + move t1,p1 + ildb c,t1 ;get first char of substring + caie c,000 ;null? + cain c,040 ;or space? + jrst equa.4 ;yes; null substring always returns not equal + + movei t1,5 ;check at most 5 characters +equa.1: ildb c,p1 ;get char from substring + caie c,000 ;null? + cain c,040 ;or space? + jrst equa.2 ;yes, no differences encountered + caile t0,137 ;lower case? + trz t0,040 ;yes, convert to upper case + ildb t0,p2 ;get char from master string + caile t0,137 ;lower case? + trz t0,040 ;yes, convert to upper case + caie t0,(c) ;same? + jrst equa.4 ;no, strings aren't equal + sojg t1,equa.1 ;check remaining characters + jrst equa.3 ;strings are equal + +equa.2: movni t0,1 ;end of 1st string; assume substring match + ildb c,p2 ;get next char from master string + caie c,000 ;null? + cain c,040 ;or space? +equa.3: movni t0,2 ;yes, exact match + jrst .+2 +equa.4: setz t0, ;strings aren't equal + restor + popj p, + subttl LDIS + +;;; LDIS(v1,h1,v2,h2,n) is TRUE if +; (v1,h1) is within n sectors of (v2,h2). +; + entry ldis + sixbit /LDIS/ +ldis: move t1,@0(arg) ;get vertical coordinate of first point + sub t1,@2(arg) ;get distance from second point + movm t1,t1 + camle t1,@4(arg) ;within range? + jrst ldis.1 ;no + move t1,@1(arg) ;get horizontal coordinate of first point + sub t1,@3(arg) ;get distance from second point + movm t1,t1 + camle t1,@4(arg) ;within range? +ldis.1: tdza 0,0 ;no, return FALSE + seto 0, ;yes, return TRUE + popj p, + subttl INGAL + +;;; INGAL(v,h) is TRUE if +; (v,h) is a legal coordinate (if it's in the "galaxy"). +; + entry ingal + sixbit /INGAL/ +ingal: skiple t1,@0(arg) ;vertical coordinate too small? + caile t1,KGALV ;or too big? + jrst inga.1 ;yes + skiple t1,@1(arg) ;horizontal coordinate too small? + caile t1,KGALH ;or too big? +inga.1: tdza 0,0 ;yes, return FALSE + seto 0, ;no, return TRUE + popj p, + subttl PDIST + +;;; PDIST(v1,h1,v2,h2) = distance between points (v1,h1) and (v2,h2). +; + entry pdist + sixbit /PDIST/ +pdist: move t0,@0(arg) ;get vertical coordinate of first point + sub t0,@2(arg) ;get distance from second point + movm t0,t0 + move t1,@1(arg) ;get horizontal coordinate of first point + sub t1,@3(arg) ;get distance from second point + movm t1,t1 + caige t0,(t1) ;horizontal distance > vertical distance? + movei t0,(t1) ;yes, use horizontal distance instead + popj p, + subttl LOCK/LOCK./UNLOCK/UNLO. + +;;; LOCK -- lock a critical data area (don't let anyone else write +; into it until you're done). +; +; CALL LOCK (key,str) +; +; where key is a high segment variable unique to the data area +; being protected, and str is a string to output (generally the +; name of the routine that called LOCK) when the lock is broken +; (the lock is broken if it has to try too many times to access +; the data -- it is assumed that somebody set the lock and didn't +; clear it for some reason after they were done). +; + entry lock + sixbit /LOCK/ +lock: + + hrrzi t1,@0(arg) ;address of key + movem t1,locked + + +;;; LOCK. -- same as LOCK, but input is T1: str,,key +; +lock.: + setzm lkfail ; no failure + setzm hv.lok ; set to -1 if psi gets interrupt + andi t1,777777 ; mask off possible trash + movei t2,knloks-1 ; see if this lock already active + came t1,loktab(t2) + sojge t2,.-1 + skipl t2 ; if already locked by us, + jrst lock.3 + movei t2,knloks-1 ; scan for empty slot + skipe loktab(t2) + sojge t2,.-1 + skipge t2 ; if full + move t0,200000 ; then take a fatal error trap right now! + movem t1,loktab(t2) ; remember this lock! + hrrm t1,queuen ; set up enq. code + hrrm t1,quereq + move t2,gameno + caie t1,frelok + cain t1,staupd ; all universes update same files + setz t2, + dpb t2,[point 6,queuen,17] +lock.5: move t2,[2,,queue] ; get the queue or return + enq. t2, + jrst lock.0 +lock.3: + popj p, + + +lock.0: + caie t2,1 ; if not busy resourse + jrst [caie t2,13 ; then if not out of memory + jrst [outstr [asciz " +Fatal ENQ. error code "] + move t1,t2 ; report the error code + pushj p,debdec + jrst monit ; exit stage left! + ] + movei t2,^d1000 ; hibernate a second + hiber t2, + jfcl + jrst lock.5 ; and try once again + ] + movei t2,^d100 ; in case input waiting has awakwned us + hiber t2, + jfcl + calli t1,-210 ; get uct + setz t1, + setzm ccflg ; no ^C seen + setzm ccflg. + addi t1,^d4*3 ; about 4 seconds + movei t2,^d5000 ; hibernate for five seconds +lock.1: hiber t2, + jfcl + skipe hv.lok ; if request has been granted, + jrst lock.3 ; then exit + calli t2,-210 ; get current UCT + movei t2,^d10000 ; force exit if failed + camge t2,t1 + jrst [movei t2,^d1000 ; hibernate extra second + jrst lock.1] +;-- skipn pasflg ; if debugger is running +;-- jrst lock.4 + outstr [asciz " +**** Lockup on queue "] + hrrz t1,queuen + pushj p,fndlok + andi t1,77 + addi t1,40 + skipn hungup + outchr t1 + skipn hungup + outstr [asciz " by job "] + movei t1,queue ; get job number that has the lock + movei t2,whohas + enqc. t1, + setzm whohas + hrrz t1,whohas + cain t1,-1 + setz t1, + pushj p,debdec + skipn hungup + outstr [asciz " +"] +;--lock.4: skipn ccflg ; if user got tired and hit ^C + jrst lock.0 ; then + hrrz t1,queuen ; release our claim + pushj p,unlo. + setom lkfail ; tell caller we failed + jrst lock.3 + +deboct: idivi t1,8 + hrlm t2,0(p) + skipe t1 + pushj p,deboct +debcom: hlrz t1,0(p) + addi t1,"0" + skipn hungup + outchr t1 + popj p, + +debdec: idivi t1,^d10 + hrlm t2,0(p) + skipe t1 + pushj p,debdec + jrst debcom + + + + + +;;; UNLOCK -- make a data area available to other jobs again (after +; a lock to that area). +; +; CALL UNLOCK (key) +; + entry unlock + sixbit /UNLOCK/ +unlock: + movei t1,@0(arg) + setzm locked + pushj p,unlo. + popj p, + + + +;;; UNLO. -- same as lock, but input is T1: key +; +kilall:: ; kill all current locks outstanding + push p,x2 + movei x2,knloks-1 + skipe t1,loktab(x2) + pushj p,unlo. + sojge x2,.-2 + pop p,x2 + popj p, + + sixbit /zaplok/ +zaplok:: + movei x2,knloks-1 ; remove all queue entries + skipe t1,loktab(x2) + pushj p,unlo. ; unlock this one + sojge x2,.-2 + popj p, + +unlo.: + hrrm t1,queuen + hrrm t1,quereq + movei t2,knloks-1 + andi t1,777777 + came t1,loktab(t2) + sojge t2,.-1 + skipl t2 + setzm loktab(t2) + move t2,gameno ; include game # in lock + caie t1,frelok + cain t1,staupd ; this one is universal + setz t2, + dpb t2,[point 6,queuen,17] + movei t2,queue + deq. t2, + cain t2,24 ; = "you don't have it dummy" error code + popj p, + outstr [asciz " +Failure "] + pushj p,deboct + outstr [asciz " releasing "] + hrrz t1,queuen + pushj p,fndlok + andi t1,77 + addi t1,40 + skipn hungup + outchr t1 + skipn hungup + outstr [asciz " +"] + popj p, + + + subttl NEWS + +;;; NEWS -- Display the DECWAR news file. +; + entry news + sixbit /NEWS/ +news: save + hrrzs .jbren## + movei x1,nwsfil + pushj p,open. ;open DECWAR.NWS for input + warn ,news.5 + pushj p,seti. ;set up for input from news file + +news.1: setz x3, ;last char wasn't eol +news.2: pushj p,ichr. ;get char from news file + jumpl c,news.4 ;eof + jumpe x3,.+2 ;last char was eol? + caie c,"." ;and this char is "."? + jrst news.3 ;no, keep going + + pushj p,ttyon ;clear ^O + movei p1,[asciz /Do you want to continue viewing the news file? /] + pushj p,ostr. + pushj p,seti. ;set up for input from TTY + pushj p,gtkn + pushj p,seti. ;set up for input from news file + movei p1,tknlst+0 + movei p2,[asciz /YES/] + pushj p,equal. + jumpl t0,news.1 ;yes + jrst news.4 ;no, done + +news.3: pushj p,ochr. ;echo character + cail c,012 + caile c,014 + jrst news.1 ;not eol + seto x3, ;eol + skipn ccflg ;^C was typed? + skipge .jbren## ; or ^P? + jrst news.4 ;yes, quit + skipn t1,who ;is player in game yet? + jrst news.2 ;no + skipge alive-1(t1) ;alive? + setzm active-1(t1) ;yes, don't count as idle during news output + jrst news.2 + +news.4: setzm ccflg ;in case exit because of ^C + hrrzs .jbren## ; or ^P + pushj p,close. ;close news file + pushj p,seti. ;restore original input file +news.5: restor + popj p, + subttl GRIPE + +;;; GRIPE -- Prompt for and read a gripe from the current input, +; and add the gripe to the beginning of DECWAR.GRP +; + entry gripe + sixbit /GRIPE/ +gripe: + skipe t3,who ; if user is under RED alert + jrst [ + move t1,shpcon+*KNPLAY-1(t3) + cain t1,red ;condition red? + jrst [outstr [asciz " +You are not permitted to GRIPE +while under RED alert! +"] + popj p,] + jrst .+1] + pushj p,eshp. ;erase ship from board unless condition red + + move t1,.JBFF + movem t1,dbuf+.BFADR ;this is where the gripe buffer starts + hrli t1,(point 7) + movem t1,dbuf+.BFPTR ;pointer to first character space in buffer + setzm dbuf+.BFCTR ;buffer length is currently 0 + + movei p1,[ascil ] + skipn addrck ; if processing an address check, don't + pushj p,ostr. + move x1,[grpfil,,grpfil] + pushj p,seto. ;set up for output to gripe buffer + pushj p,osts. ;output status line (version, date, time, etc.) + + skipe addrck ; if address failure + jrst grip.a ; then dump the information + movei x2,grpsiz +grip.1: subi x2,1 + pushj p,inli. ;get input line + skipe ccflg ;^C? + jrst grip.8 ;yes, abort gripe + move p1,[point 36,linbuf] + pushj p,ostr.x ;add line to gripe + trne f,cf.eof ;eof? + jrst grip.2 ;yes, end of gripe + pushj p,ocrl. ;INLI. changes all eol to nul + skipe t1,who ;is player in game? + skipl alive-1(t1) ;and alive? + jrst .+2 ;no + setzm active-1(t1) ;yes, don't count as idle during GRIPE input + + setz p1, + cain x2,2 + movei p1,[ascil <[Only 2 more message lines allowed]>] + cain x2,0 + movei p1,[ascil <[Too many lines -- end of gripe]>] + jumpe p1,grip.1 + pushj p,seto. ;restore output to tty + pushj p,ostr. ;output message + pushj p,seto. ;restore output to gripe file + jumpn x2,grip.1 + jrst grip.3 + +;;; Here to write out the diagnostic dump from an address failure + +grip.a: + skipl addrck ; if doing a *Zap + jrst grip.z ; then write out the statistics into gripe file + movei p1,[asciz "**** Data out of bounds **** +**** Command line: +"] + pushj p,ostr. + movei x1,0 +grip.u: move c,linbuf(x1) + caig c,37 ; if control char + jrst [movei c,"^" ; then flag it + pushj p,ochr. + move c,linbuf(x1) + addi c,"@" ; make ascii char + jrst .+1] + pushj p,ochr. + aos x1 + caige x1,maxcnt + skipn linbuf-1(x1) + skipa + jrst grip.u + pushj p,crlf + pushj p,crlf + hrrz x1,stabuf ; = address of the bad instruction + movei x2,6 + pushj p,oct.o + pushj p,ospc. + pushj p,ospc. + move x1,stabuf+1 ; = the offending instruction + movei x2,^d12 + pushj p,oct.o + pushj p,ospc. + pushj p,ospc. + ldb x1,[point 9,stabuf+1,8] ; output instr as: xxx xx,{@}xxxxxx{(xx)} + movei x2,3 + pushj p,oct.o + pushj p,ospc. + ldb x1,[point 4,stabuf+1,12] ; = AC field + movei x2,2 + pushj p,oct.o + movei c,"," + pushj p,ochr. + movsi t1,(1b13) ; if @ bit set + movei c,"@" + tdne t1,stabuf+1 ; then output "@" + pushj p,ochr. + hrrz x1,stabuf+1 + movei x2,6 + pushj p,oct.o + ldb x1,[point 4,stabuf+1,17] ; if index non zero + jumpe x1,grip.b ; then output (xx) + movei c,"(" + pushj p,ochr. + movei x2,2 + pushj p,oct.o + movei c,")" + pushj p,ochr. +grip.b: pushj p,crlf + hlrz x1,stabuf ; = locked resource if any + movei x2,6 + skipe x1 + pushj p,oct.o + pushj p,crlf + movei x3,0 ; dump the registers +grip.c: move x1,stabuf+2(x3) + movei x2,^d12 + pushj p,oct.o + pushj p,ospc. + aos x3 + trnn x3,7 ; if mod 8 = 0 + pushj p,crlf ; then go to new line + caie x3,^d16 ; if dumped 16 regs + jrst grip.c ; then + pushj p,crlf + movei p1,[asciz "*** PDL: "] + pushj p,ostr. + movei x1,pdl + movei x2,6 + pushj p,oct.o + pushj p,crlf + movei x3,0 ; dump pdl +grip.t: move x1,pdl(x3) + movei x2,^d12 + pushj p,oct.o + pushj p,ospc. + aos x3 + trnn x3,7 + pushj p,crlf + movei t1,pdl(x3) + hrrz t2,stabuf+2+17 ; = rh of pdl pointer + camg t1,t2 + jrst grip.t + pushj p,crlf + + movei p1,[asciz "*** HITQL-1:"] + pushj p,ostr. + movei x1,hitql-1 + movei x2,6 + pushj p,oct.o + pushj p,crlf + movei x3,1 +griptt: move x1,hitql-2(x3) + movei x2,^d12 + pushj p,oct.o + pushj p,ospc. + trnn x3,7 + pushj p,crlf + caie x3,knhit+3 + aoja x3,griptt + pushj p,crlf + movei p1,[asciz "*** LOKTAB:"] + pushj p,ostr. + pushj p,crlf + movei x3,1 +griptu: move x1,loktab-1(x3) + movei x2,^d12 + pushj p,oct.o + pushj p,ospc. + trnn x3,7 + pushj p,crlf + caie x3,knloks + aoja x3,griptu + pushj p,crlf + jrst grip.3 ; copy to gripe file + +oct.o: save <[-1]> + move t1,x1 +oct.01: hrrz t2,t1 + save + lsh t1,-3 + sojg x2,oct.01 +oct.02: restore + skipge c + popj p, + andi c,7 + addi c,"0" + pushj p,ochr. + jrst oct.02 + +grip.z: movei arg,[[1]] + pushj p,shosta ; display to gripe buffer + jrst grip.3 + +grip.2: cain x2,grpsiz-1 ;any full lines entered? + skipe linbuf ;no, any chars on the first line? + jrst .+2 ;yes, record gripe + jrst grip.8 ;no, empty gripe; abort + skipe linbuf ;last line is blank? + pushj p,ocrl. ;no, end it with +grip.3: movei p1,[asciz /----------/] + pushj p,ostr. + pushj p,ocrl. + move x2,dbuf+.BFPTR ;address of word containing last gripe char + hrli x2,(x2) + +grip.4: move x1,[grpfil,,grpfil] + pushj p,open. ;open DECWAR.GRP + jrst .+2 + jrst grip.5 + hrrz t1,leblk+1 ;see why open failed + caie t1,ERFBM% + warn ,grip.8 + warn + movei t1,ntry*slptim + hiber t1, + halt + skipn ccflg ;^C during wait? + jrst grip.4 ;no, try again + jrst grip.8 ;yes, forget it + +grip.5: skipl t4,leblk+3 ;neg length of file,,0 + jrst [setzm leblk+3 ; force to 0 (virgin file bug) + jrst grip.7] + hlre t1,t4 ;neg # of words in current gripe file + movn t1,t1 ;make it positive + addi x2,(t1) ;last word of core needed to read in gripe file + movei t1,(x2) + camg t1,.JBREL ;core already allocated? + jrst grip.6 ;yes, don't need to allocate any more + core t1, + warn ,grip.8 + +grip.6: hlr t4,x2 ;build IOWD word for dump mode transfer + movem t4,tmp ;must be in low core (not in an AC) to work + setzm tmp+1 + in grp,tmp ;append old gripes to new one in core + jrst .+2 + warn ,grip.8 + +grip.7: move t1,dbuf+.BFADR ;address of output buffer + subi t1,1(x2) ;neg # of words in buffer + hrl t1,dbuf+.BFADR ;build IOWD word for dump mode transfer + sub t1,[1,,0] + movsm t1,tmp + setzm tmp+1 + useto grp,1 + out grp,tmp ;write new gripe file + jrst .+2 + warn + +grip.8: move t1,dbuf+.BFADR ;reduce core to here + movem t1,fl.ff + pushj p,close. ;close gripe file & deallocate buffer space + move x1,[ttyfil,,ttyfil] + pushj p,seto. ;restore original output file + pushj p,pshp. ;put ship back on board + setzm ccflg ;clear ^C flag + popj p, + + +;;; OGCH. -- Output character to gripe buffer. +; +ogch.: sosl @obfctr ;any room in buffer? + pjrst ochr.x ;yes, add character normally + + hrrz t1,dbuf+.BFPTR ;last word used in gripe buffer + movei t2,^D20(t1) ;allocate another 20 words + camg t2,.JBREL ;already there? + jrst ogch.1 ;yes, no need for CORE UUO + movei t3,(t2) + core t3, + warn ,cpopj +ogch.1: movem t2,.JBFF + + setzm 1(t1) ;zero out allocated words + movei t1,2(t1) + hrli t1,-1(t1) + blt t1,(t2) + movei t1,^D20*5 ;number of character spaces allocated + movem t1,dbuf+.BFCTR + jrst ogch. + subttl HELP -- HELP + +;;; HELP -- On line DECWAR help system. Give general info, command list, +; and text from help file on individual commands. +; +; HELP ;give general info, direct to other sources of help +; HELP * ;give list of commands +; HELP keyword ;type text associated with keyword from help file +; + entry help + sixbit /HELP/ +help: + skipe t3,who ; if user is under RED alert + jrst [ + move t1,shpcon+*KNPLAY-1(t3) + cain t1,red ;condition red? + jrst [outstr [asciz " +You cannot get HELP while under +RED alert! +"] + popj p,] + jrst .+1 + ] + pushj p,eshp. ;remove ship from board + setz x3, ;index to current modifier + + skipl typlst+1 ;any modifiers? + jrst help.1 ;yes + pushj p,hlpxtr ;give general help info + jrst help.4 + + pushj p,ttyon ;clear ^O + +help.1: addi x3,1 ;index to next help item + skipl typlst(x3) ;end of list? + skipe ccflg ;or ^C typed? + jrst help.4 ;yes, done + + movei p1,tknlst(x3) ;build pointer to next item + movei p2,[asciz /*/] + pushj p,equal. + jumpge t0,help.2 ;not HELP * + pushj p,hlpall + jrst help.1 + +help.2: skipl pasflg ;password set? + skipa x1,[<-2*>,,isaydo] + move x1,[<-2*kncmd>,,isaydo] + setz x2, + pushj p,slst. + jrst .+2 + jrst help.3 + jumpge x1,help.1 ;ambiguous, so don't try any more + move x1,[<-2*knxtr>,,xhelp] + hrrzi x2,[asciz /I don't know the term /] + pushj p,slst. + jrst help.1 + +help.3: movei p1,(p2) + pushj p,shlp. ;search help file and show info + jrst help.1 + +help.4: setzm ccflg + pushj p,pshp. ;put ship back on board + popj p, + subttl HELP -- HLPXTR/HLPALL + +;;; HLPXTR -- Give general help info and list extra things help is +; available for (besides commands). +; + entry hlpxtr + sixbit /HLPXTR/ +hlpxtr: movei p1,xhlp1 + pushj p,ostr. + move x1,[<-2*knxtr>,,xhelp] + pushj p,olst. + movei p1,xhlp2 + pushj p,ostr. + popj p, + +xhlp1: asciz / +For a list of commands type HELP * +For help on a particular command type HELP command + +Besides commands, help is also available for: + +/ +xhlp2: asciz / +Upper case letters mark the shortest acceptable abbreviation. + +/ + + +;;; HLPALL -- Give list of all commands +; + entry hlpall + sixbit /HLPALL/ +hlpall: pushj p,ocrl. + movei p1,[ascil ] + pushj p,ostr. + pushj p,ocrl. + skipl pasflg + skipa x1,[<-2*>,,isaydo] + move x1,[<-2*kncmd>,,isaydo] + pushj p,olst. + popj p, + subttl HELP -- SHLP. + +;;; SHLP. -- Search help file for keyword and type text associated +; with keyword. +; +shlp.: save + hrrzs .jbren ; clear ^P flag + setzm ccflg ; and ^C flag + pushj p,ocrl. + skipl pasflg ;password set? + jrst shlp.1 ;no, don't try special help file + hrrzi x1,hl1fil + pushj p,open. ;try help file with special commands documented + jrst shlp.1 ;no good; use normal help file + jrst shlp.2 +shlp.1: hrrzi x1,hl2fil + pushj p,open. ;try standard help file + warn ,shlp.e +shlp.2: pushj p,seti. ;set up for input from help file + + hrli p1,(point 7) ;pointer to keyword being searched for + seto x2, ;not on right section yet +shlp.3: pushj p,ichr. ;get next char from help file +shlp.4: jumpl c,shlp.8 ;eof + cain c,014 ;form feed? + jrst shlp.5 ;yes, ignore it, but count as eol + jumple x2,.+2 ;not in right section yet + pushj p,ochr. ;type this section of help file + caie c,012 ;eol? + jrst shlp.3 ;no, don't check for section border + +shlp.5: skipn ccflg ;^C was typed? + skipge .jbren## ; or ^P? + jrst shlp.9 ;yes, quit + skipe t1,who ;is player in game? + skipl alive-1(t1) ;and alive? + jrst .+2 ;no + setzm active-1(t1) ;yes, don't count as idle during HELP output + jumpn x2,.+2 ;ignore key word line of right section? + aoja x2,shlp.3 ;yes, time to start typing it + pushj p,ichr. ;get first char of line + caie c,"." ;section border? + jrst shlp.4 ;no, false alarm + jumpg x2,shlp.9 ;finished typing help text + + move p2,p1 ;get pointer to keyword being searched for + movei x3,5 ;check at most 5 characters +shlp.6: pushj p,ichr. ;get char from help file + caile c,137 ;lower case? + trz c,040 ;yes, make upper + ildb t1,p2 ;get char from keyword + caie t1,040 ;blank? + cain t1,000 ;or null? + jrst shlp.7 ;yes, end of keyword, and no mismatch + caile t1,137 ;lower case? + trz t1,040 ;yes, make upper + caie c,(t1) ;characters match? + jrst shlp.3 ;no, this isn't the right section + sojg x3,shlp.6 ;check remaining chars in keyword +shlp.7: setz x2, + jrst shlp.3 + +shlp.8: jumpg x2,shlp.9 + movei p2,(p1) + movei p1,[asciz /%Can't find help on /] + pushj p,ostr. + movei p1,(p2) + pushj p,ostb. + pushj p,ocrl. + +shlp.9: pushj p,close. ;close help file + pushj p,seti. ;restore input from tty +shlp.e: restor + hrrzs .jbren## ; clear ^P flag + setzm ccflg ; and ^C + popj p, + subttl SLST./OLST. + +;;; SLST. -- Search list. +; +; Input +; P1 pointer to word to search for +; X1 -2*n,,addr +; addr = address of list of 2 word entries to search +; n = number of entries in the list +; X2[L] if negative, don't list ambiguous hits +; X2[R] address of warning message to output when no match is found +; +; Output +; P2 pointer to word in list that matched +; X1 entry index (0..n-1) +; +; Note on the error return, +; X1 < 0 if no match +; X1 >= 0 if ambiguous match +; +; PUSHJ P,SLST. +; not a unique match +; P1 points to the matched entry, X1 contains it's index +; +slst.: save + + seto x3, ;no matches yet + setz x4, ;address,,index of matching entry + jrst slst.2 +slst.1: aobjp x1,slst.6 ;advance to next entry + aobjp x1,slst.6 + jumpge x3,.+2 ;any match yet? + addi x4,1 ;no, increment entry index +slst.2: movei p2,(x1) ;get addr of word to check + pushj p,equal. + jumpge slst.1 ;no match + + aojg x3,slst.3 ;more than 1 match; ambiguous + hrli x4,(p2) ;remember which one matched + jrst slst.1 + +slst.3: save + caie x3,1 ;first ambiguous match? + jrst slst.4 ;no, don't repeat message + pushj p,ostb. ;output ambiguous input + movei p1,[asciz / is ambiguous./] + pushj p,ostr. + jumpl x2,slst.5 ;don't list ambiguous hits + movei p1,[ascil < Could be:>] + pushj p,ostr. + hlrz p1,x4 ;output first hit + pushj p,ostb. +slst.4: movei c,"," + pushj p,ochr. + pushj p,ospc. + movei p1,(p2) ;output this hit + pushj p,ostb. +slst.5: restor + jumpge x2,slst.1 + +slst.6: jumpe x3,slst.8 ;unambiguous match + setz x1, ;assume ambiguous + jumpg x3,slst.7 ;ambiguous + seto x1, + movei x3,(p1) ;remember address of input string + movei p1,(x2) ;address of warning message + jumpe p1,slst.9 ;don't gripe if match not found + pushj p,ostr. + movei p1,(x3) ;output unknown input + pushj p,ostb. +slst.7: pushj p,ocrl. + jrst slst.9 + +slst.8: hlrz p2,x4 + hrrzi x1,(x4) + aos (p) +slst.9: restor + popj p, + + +;;; OLST. -- Output a list. +; +; Input +; X1 -2*n,,addr +; addr = addres of list of 2 word entries +; n = number of entries +; +olst.: save +olst.1: movei x2,7 ;6 columns per line +olst.2: dmove t1,(x1) ;get words to output + dmovem t1,tmp + setzm tmp+2 + movei p1,tmp + pushj p,ostr. ;output entry + aobjp x1,olst.3 ;point to next entry + aobjp x1,olst.3 + sojg x2,olst.2 + pushj p,ocrl. ;start a new line + jrst olst.1 + +olst.3: pushj p,ocrl. + restor + popj p, + subttl ESHP./PSHP. + +;;; ESHP. -- Erase a ship from the board (replace it with a 10) if +; it's condition isn't red. +; +; Input +; WHO number of ship to remove from board +; +eshp.: skipg t3,who ;see whose ship to erase + jrst eshp.1 ;nobody's + move t1,shpcon+*KNPLAY-1(t3) + cain t1,red ;condition red? + jrst eshp.1 ;yes, leave it there + + move t1,shpcon+*KNPLAY-1(t3) ;vertical position + move t2,shpcon+*KNPLAY-1(t3) ;horizontal position + movei t3,^D1000 ;make black hole + pushj p,sdsp. ;set display value +eshp.1: popj p, + + +;;; PSHP. -- Put ship on board. +; +; Input +; WHO ship number to put back on board +; +pshp.: skipg t3,who + jrst pshp.1 + skipl alive-1(t3) ;alive? + jrst eshp.1 ;no, forget it + + move t1,shpcon+*KNPLAY-1(t3) + move t2,shpcon+*KNPLAY-1(t3) + addi t3,^D100 ;code for fed ship + caile t3,^D100+KNPLAY/2 + addi t3,^D100 ;change to emp ship + pushj p,sdsp. +pshp.1: popj p, + subttl DISP/DISPC/DISPX/SETDSP + +;;; DISP -- Return the code of a location on the board. +; +; n = DISP(v,h) +; + entry disp + sixbit /DISP/ +disp: +ifn debug., < + pushj p,chkc. ;check coordinate legality +> ;end ifn debug. + move t0,@1(arg) ; H + subi t0,1 ; H - 1 + idivi t0,3 ; (H - 1) / 3 + move arg,@0(arg) ; V + imuli arg,ksid ; V * KSID + addi t0,-ksid(arg) ; (H - 1) / 3 + (V * KSID) - KSID + add t0,b12tbl(t1) ;build pointer + ldb t0,t0 ;get contents of location in space + cain t0,7777 ;12 bits of 1? + seto t0, ;yes, must be -1 +ifn debug., < + pushj p,chkd. ;check value of display code +> ;end ifn debug. + popj p, + + +;;; DISPC -- Return DISP(v,h) div 100 +; + entry dispc + sixbit /DISPC/ +dispc: pushj p,disp + idivi t0,^D100 + popj p, + + +;;; DISPX -- Return DISP(v,h) mod 100 +; + entry dispx + sixbit /DISPX/ +dispx: pushj p,disp + idivi t0,^D100 + movei t0,(t1) + popj p, + + +;;; SETDSP -- Set the contents of a location on the board. +; +; CALL SETDSP (v,h,n) +; + entry setdsp + sixbit /SETDSP/ +setdsp: +ifn debug., < + pushj p,chkc. ;check coordinate legality +> ;end ifn debug. + move t0,@1(arg) ; H + subi t0,1 ; H - 1 + idivi t0,3 ; (H - 1) / 3 + move t2,@0(arg) ; V + imuli t2,ksid ; V * KSID + addi t0,-ksid(t2) ; (H - 1) / 3 + (V * KSID) - KSID + add t0,b12tbl(t1) ;build pointer +ifn debug., < + ldb t1,t0 + movem t1,oldobj +> ;end ifn debug. + move t1,@2(arg) ;get contents to deposit in space + dpb t1,t0 ;stick it there +ifn debug., < + movei t0,(t1) + pushj p,chkd. ;check value of display code + skipn pasflg + popj p, +ifn dbzer., < + jumpe t0,.+2 ;to see why ships disappear +> +> ;end ifn debug. + popj p, + +ifn dbzer., < + save + pushj p,ocrl. + movei p1,[asciz /%Zeroing location /] + pushj p,ostr. + move x1,@0(arg) + setz x2, + pushj p,odec. + pushj p,ospc. + move x1,@1(arg) + setz x2, + pushj p,odec. + movei p1,[asciz / (was /] + pushj p,ostr. + move x1,oldobj + setz x2, + pushj p,odec. + movei p1,[byte (7) ")",015,012] + pushj p,ostr. + pushj p,trac. + restor + popj p, +> ;end ifn debug. + + +;;; GDSP. -- Return the contents of a location on the board. +; +; Input +; T1 Vpos +; T2 Hpos +; Output +; T3 Value +; +gdsp.: pushj p,gptr. ;get pointer to location + ildb t3,t2 ;get object at location + popj p, + + +;;; SDSP. -- Set the value of a location on the board. +; +; Input +; T1 Vpos +; T2 Hpos +; T3 Value +; +sdsp.: save + pushj p,gptr. ;get pointer to location + restor + idpb t3,t2 ;put object there + popj p, + + +;;; GPTR. -- Return a pointer to a location on the board. +; +; Input +; T1 Vpos +; T2 Hpos +; Output +; T2 pointer +; +gptr.: movei t2,-1(t2) ;Hpos - 1 + idivi t2,3 ;(Hpos - 1) / 3 + imuli t1,ksid ;Vpos * KSID + addi t2,-ksid(t1) ;(Hpos-1) / 3 + (Vpos * Ksid) - Ksid + add t2,b12tbl-1(t3) ;build pointer to location + popj p, + subttl CHKC./CHKD./TRAC. + +ifn debug., < + +;;; CHKC. -- Check coordinates for legality. Since this is a debug +; routine, to be placed anywhere, don't bash any ACs. +; It is assumed that the calling routine was called from FORTRAN +; with +; CALL X (v,h) +; + sixbit /CHKC./ +chkc.: skipn pasflg + popj p, + save + move t0,@0(arg) ;check vertical coordinate + caile t0,0 + caile t0,KGALV + jrst chkc.1 + move t0,@1(arg) ;check horizontal coordinate + caile t0,0 + caile t0,KGALH + jrst chkc.1 + restor + popj p, + +chkc.1: save + movei p1,[asciz /%Illegal coordinate: /] + pushj p,ostr. + setz x2, + move x1,@0(arg) + pushj p,odec. + pushj p,ospc. + move x1,@1(arg) + pushj p,odec. + pushj p,ocrl. + pushj p,trac. + restor + restor + popj p, + + + +;;; CHKD. -- Check display code for legality. Since this is a debug +; routine, to be placed anywhere, don't bash any ACs. +; +; Input +; T0 Display code to check. +; + sixbit /CHKD./ +chkd.: skipn pasflg + popj p, + save + hrrz t1,t0 + idivi t1,^D100 + caile t1,^d10 ; max object code + jrst chkd.1 + hlrz t3,rngtbl(t1) ;get lower range + caige t2,(t3) + jrst chkd.1 + hrrz t3,rngtbl(t1) ;get upper range + caile t2,(t3) + jrst chkd.1 + restor + popj p, + +chkd.1: save + movei p1,[asciz /%Illegal display code: /] + pushj p,ostr. + move x1,t0 + setz x2, + pushj p,odec. + pushj p,ocrl. + pushj p,trac. + restor + restor + popj p, + + radix 10 +rngtbl: 0,,0 ;empty space + 1,,5 ;federation ship + 6,,10 ;empire ship + 1,,10 ;federation base + 1,,10 ;empire base + 0,,1 ;romulan + 1,,80 ;neutral planet + 1,,80 ;federation planet + 1,,80 ;empire planet + 0,,0 ;star + 0,,0 ;black hole + radix 8 + + + +;;; TRAC. -- Trace back the subroutine calls. +; + sixbit /TRAC./ +trac.: save + hlre x2,p + addi x2,pdlsiz-1 ;depth of sub nesting (TRAC. doesn't count) + hrrzi x3,-1(p) ;ptr to first return addr +trac.1: sojl x2,trac.2 ;done + hrrz x1,(x3) ;get return addr + hrrz x1,-1(x1) ;get addr of subroutine + move x1,-1(x1) ;get name of subroutine + pushj p,osix. ;output it + pushj p,ospc. ;end with + soja x3,trac.1 +trac.2: pushj p,ocrl. + skipn hungup + output tty, + restor + popj p, + +> ;end ifn debug. + subttl updsta/shosta - Player Status register + + + entry updcap ; update the "Captain" count for given ship +updcap: movei t1,staupd ; lock the file + pushj p,lock. + skipe lkfail + jrst updcap ; we have to have it! + setzm stabuf + move t1,[stabuf,,stabuf+1] + blt t1,staend ; clear status buffer + move x1,[xwd stared,stared] + pushj p,open. + jrst updcax + skipge le.ppn + input sta,staiow + close sta, +updcax: + skipn gameno ; if this is a new game + aos stabuf ; bump the game number + move t1,stabuf ; save game number + movem t1,gameno + skipe frebie ; if free player running + jrst [ + move x1,[xwd staupd,staupd] + pushj p,open. + jrst .+1 + output sta,staiow + close sta, + setzm stabuf + setzm stabuf + move t1,[stabuf,,stabuf+1] + blt t1,staend + move x1,[xwd stfred,stfred] + pushj p,open. + jrst .+1 + skipge le.ppn + input sta,staiow + close sta, + move t1,gameno + movem t1,stabuf + jrst .+1] + move t1,@0(arg) ; get ship number + aos stacap(t1) ; bump the counter + move x1,[xwd staupd,staupd] ; rewrite the file + skipe frebie + move x1,[xwd stfupd,stfupd] + pushj p,open. + jrst updcay + output sta,staiow + close sta, +updcay: movei t1,staupd ; release the file + pushj p,unlo. + skipn hungup + output tty, + outstr [asciz " +DECWAR game #"] + move x1,gameno + movei x2,0 + pushj p,odec. + skipn hungup + output tty, + skipn hungup + outstr [asciz " + +This is mission #"] + move t1,@0(arg) + move x1,stacap(t1) + movei x2,0 + pushj p,odec. + skipn hungup + output tty, + skipn hungup + outstr [asciz " for the +"] + move t1,@0(arg) + skipn hungup + outstr @lngshp-1(t1) + skipn hungup +; outstr [asciz " +;"] + skipn hungup + popj p, + +;ALL commented out by drforbin(merlyn). not needed used by CIS for user pay/nopay status +; entry chkpay ; return .true. if user is paying customer +;chkpay: seto 0, +; hlrz t1,usppn. +; caige t1,70010 +; setz 0, +; andi t1,7 +; cain t1,3 +; setz 0, +; move t1,ustat.## +; tlne t1,(1b2) +; setz 0, +; popj p, + + entry pdwdoc +pdwdoc: output tty, + movei t1,[ sixbit 'DSK' + sixbit 'PDWDOC' + exp 0,0,0,0 + ] + run t1, + jfcl + popj p, ; Well, it should NEVER get here!!!! + + entry updsta ; update the status file +updsta: + move t1,@6(arg) ; if score is too small + caige t1,^d1000 + popj p, ; then don't record it! + skipn hungup + output tty, + movei t1,staupd ; lock up the stat file + pushj p,lock. + skipe lkfail + jrst .-3 + setzm stabuf + move t1,[stabuf,,stabuf+1] + blt t1,staend + move x1,[xwd stared,stared] ; open the file in input mode + pushj p,open. + jrst updstx + skipge le.ppn ; if no file yet, don't read! + input sta,staiow + close sta, + skipn frebie ; if "free" user + jrst updstx ; then + setzm stabuf + move t1,[stabuf,,stabuf+1] + blt t1,staend + move x1,[xwd stfred,stfred] ; get free stats + pushj p,open. + jrst updstx + skipge le.ppn + input sta,stfiow + close sta, +updstx: move t2,@9(arg) ; = ship # + skipn @7(arg) ; if ship was destroyed + jrst [aos t1,stakil(t2) ; bump killed count + cain t1,1 ; if this is not first time + jrst .+1 ; then + skipn hungup + output tty, + skipn hungup + outstr [asciz " + +Don't feel bad; the "] + skipn hungup + outstr @lngshp-1(t2) + skipn hungup + outstr [asciz " +has been destroyed "] + move x1,stakil(t2) + sos x1 ; give count BEFORE this time! + setz x2, + pushj p,odec. + skipn hungup + output tty, + skipn hungup + outstr [asciz " times +out of "] + move t2,@9(arg) + move x1,stacap(t2) + setz x2, + pushj p,odec. + skipn hungup + output tty, + skipn hungup + outstr [asciz " missions! +"] + jrst .+1 + ] + movei x1,stabuf+3 ; t2 is pointer into the buffer + skipe @8(arg) ; if Empire team + addi x1,^d256 ; then move on to the Empire's database +;-- skipn @7(arg) ; if killed in action +;-- addi x1,knstat*^d10 ; then move up to the Memorial list + movei t2,0(x1) + move t3,@5(arg) ; t3 holds current player's score + movei t1,knstat + +updst0: skipn 0(t2) ; if file entry is null + jrst updst2 ; then insert new data + camge t3,6(t2) ; if new lss old + jrst updst1 ; then go to next entry + came t3,6(t2) ; if new eql old + jrst updst2 ; then + move t4,7(t2) ; if new turns < old turns + caml t4,@6(arg) + jrst updst1 ; then +updst2: subi t1,knstat+1 + save + movei x2,0(x1) ; scan for higher score for same PPN + move t3,@0(arg) ; = PPN +upst2a: caig t2,0(x2) ; if at or beyond place of insertion + jrst upst2b ; then do the insertion + camn t3,0(x2) ; if same PPN + jrst [ ; then ignore the lower placement + restore + skipn @7(arg) ; if killed in action + jrst updstf ; then update the file + jrst updst9 ; else just exit + ] + addi x2,^d10 ; try next one + jrst upst2a + +upst2b: + movm x1,t1 + skipe hungup + jrst updst5 + cain x1,1 ; if #1 + jrst [outstr [asciz " +Congratulations, Captain! You +are now in first place! +"] + jrst updst5 + ] + cain x1,knstat ; if last place + jrst [skipn hungup + outstr [asciz " +Well, Captain, you at least +made tenth place! Try harder +next time! +"] + jrst updst5 + ] + outstr [asciz " +You have placed as number "] + setz x2, + pushj p,odec. + output tty, + outstr [asciz "! +"] +updst5: restor + skipe hungup + jrst upst5a + skipn @7(arg) ; if he got killed + outstr [asciz "...at least the history books +will remember you.... +for a while! +"] +upst5a: movei t4,knstat*^d10-1(x1) ; move old entries down one +updst3: + caile t2,-^d10(t4) ; if moved all entries + jrst updst8 ; then go insert new data + move t3,-^d10(t4) + movem t3,0(t4) + soja t4,updst3 ; then do next one +updst8: move t3,@0(arg) ; else move new data + movem t3,0(t2) ; PPN + move t3,@1(arg) + movem t3,1(t2) ; Captain's name-1 + move t3,@2(arg) + movem t3,2(t2) ; " name-2 + move t3,@3(arg) + movem t3,3(t2) ; Ship's name-1 + move t3,@4(arg) + movem t3,4(t2) ; " name-2 +; movei t3,400000 ;drforbin(CIS remove); get player's time & zone +; calli t3,-211 ;drforbin(CIS remove); GTADN. uuo (CIS) + date t3, ;added drforbin +; setzb t3,t4 ;comment drforbin + movem t3,5(t2) ; save time + move t4,@9(arg) + move t3,stacap(t4) ; preserve mission # + movem t3,9(t2) + move t3,@7(arg) ; and killed flag + hrlm t3,9(t2) + move t3,@5(arg) + movem t3,6(t2) ; player's score + move t3,@6(arg) + movem t3,7(t2) ; number of turns +updstf: move x1,[staupd,,staupd] + skipe frebie ; if free user + move x1,[stfupd,,stfupd] ; then update proper file + pushj p,open. + jrst updst9 + output sta,staiow + close sta, + jrst updst9 ; go close the file and exit + +updst1: addi t2,^d10 ; point to next entry + sojg t1,updst0 + skipn hungup + outstr [asciz " +Sorry, but you didn't make the +cut! Better luck next time! +"] + skipn @7(arg) ; if killed in action + jrst updstf ; then make sure file is updated + +updst9: movei t1,staupd ; release the interlock + pushj p,unlo. + popj p, ; return to caller + + + entry shosta ; display the status file +shosta: + skipe frebie + skipa x1,[xwd stfred,stfred] ; read DECWAF.STA +shopay: move x1,[xwd stared,stared] ; open in read mode + pushj p,open. + popj p, ; DECWAR.STA not found + input sta,staiow ; read the data + close sta, + move t1,stabuf+3 + ior t1,stabuf+3+knstat*^d10 ; check for any high rollers + ior t1,stabuf+3+^d256 + ior t1,stabuf+3+^d256+knstat*^d10 + skipn t1 + jrst shockp + skipn hungup + output tty, ; flush TTY: buffer + movei p1,[asciz " + + +-------------- + +The DECWAR Honor Roll + +(* indicates Missing in Action) + +"] + pushj p,ostr. + move t1,le.nam + camn t1,[sixbit 'DECWAF'] + jrst [ + movei p1,[asciz "(**** non-paying users ****) + +"] + pushj p,ostr. + jrst .+1] + + move t1,stabuf+9 ; if hi Fed >= hi Emp + camge t1,stabuf+9+^d256 + jrst shost1 ; then + pushj p,dofed ; display Fed first + pushj p,doemp + jrst shockp + +shost1: pushj p,doemp ; else display Emp first + pushj p,dofed + +shockp: + skipe ccflg ; if ^C entered + jrst [setzm ccflg ; then exit + popj p,] + skipn frebie ; if freebie running + popj p, + skipn @0(arg) ; if freebie issued PREgame ST command + popj p, + move t1,le.nam ; if we just did the freebies + came t1,[sixbit "DECWAF"] + popj p, ; then do the income-producers! + jrst shopay + +dofed: skipn stabuf+3 ; if living Federation Captains + jrst dofed0 ; then + movei p1,[asciz " +The Federation has awarded the +following Captains the Emerald +Star Cluster for outstanding +service: + +"] + pushj p,ostr. + movei x1,stabuf+3 + pushj p,dspsta ; display them + skipe ccflg ; if ^C typed + popj p, +dofed0: skipn stabuf+3+knstat*^d10 ; if any that have expired + popj p, + movei p1,[asciz " + +The Golden Galaxy Medal has been +awarded in memory of these brave +Captains: + +"] + pushj p,ostr. + movei x1,stabuf+3+knstat*^d10 + pushj p,dspsta + popj p, + +doemp: skipn stabuf+3+^d256 ; if any meritorous Empire Captains + jrst doemp0 ; then display them + movei p1,[asciz " + +The following Captains have served +their Empire well: + +"] + pushj p,ostr. + movei x1,stabuf+3+^d256 + pushj p,dspsta + skipe ccflg + popj p, +doemp0: skipn stabuf+3+^d256+knstat*^d10 + popj p, + movei p1,[asciz " + +The Distinguished Service Cross +has been posthumously awarded +to the following Captains for +their outstanding service: + +"] + pushj p,ostr. + movei x1,stabuf+3+^d256+knstat*^d10 + pushj p,dspsta + popj p, + +dspsta: + skipe ccflg ; if ^C typed + popj p, ; then quit + save + movei x3,1 ; begin with #1 + move x4,x1 ; save pointer + movei p1,[asciz " +Captain Service # Credits"];pretty changes drforbin(merlyn) + pushj p,ostr. +; ldb t1,[point 9,1+uster.##,8];edit here drforbin(merlyn) + skipg @0(arg) ; if doing *Zap then use long form +; cail t1,^d64 ;drforbin + jrst [ + movei p1,[asciz " Ship Runtm Date"] + pushj p,ostr. + jrst .+1 + ] + pushj p,crlf +dspst0: skipn 0(x4) ; if no more to do + jrst dspst1 ; then exit +;++ + movei c," " + hlrz t1,9(x4) ; if killed in action + skipn t1 + movei c,"*" ; then flag it + pushj p,ochr. + move x1,1(x4) ; output Captain's name + pushj p,osix. + move x1,2(x4) + pushj p,osix. + pushj p,ospc. + hlrz x1,0(x4) ; output PPN + movei x2,6 + pushj p,ooct. + movei c,"-" + pushj p,ochr. + hrrz x1,0(x4) + setz x2, + pushj p,ooct. + subi x2,5 + pushj p,ospc. + aojl x2,.-1 + move x1,6(x4) ; points + addi x1,500 ; round + idivi x1,^d1000 + movei x2,^d6 + pushj p,odec. +; ldb t1,[point 9,1+uster.##,8] ; if wide terminal;edit drforbin(merlyn) + move t1,terwid + skiple @0(arg) ; or doing *Zap + jrst .+3 + caige t1,^d80 ;test;drforbin + jrst dspst2 ; then + pushj p,ospc. + movei p1,3(x4) ; output ship's name + pushj p,ostbx. ; output to 10 spaces + move x1,7(x4) ; runtime + addi x1,^d30000 ; round to nearest minute + idivi x1,^d60*^d1000 ; convert to minutes + movei x2,^d5 + pushj p,odec. + pushj p,ospc. + + +; movei t1,400000 ; get user's time zone +; calli t1,-211-200000 +; setz t1, +; movns t1 +; add t1,5(x4) ; date/time +; move t2,[exp 1b10+1b11+1b17] ;convert to string +; movei t3,tmp +; calli t1,-213 +; jrst dspst2 +; movei p1,tmp +; pushj p,ostr. + + movei p1,[asciz " "];drforbin code + pushj p,ostr. + move t1,5(x4) + dacon t1,day#,month#,year# + move x1,day + pushj p,o2dg. + movei p1,[asciz "/"] + pushj p,ostr. + move x1,month + pushj p,o2dg. + movei p1,[asciz "/"] + pushj p,ostr. + move x1,year + pushj p,o2dg.;drforbin end code + + +dspst2: pushj p,crlf +dspst1: addi x4,knstat + aos x3 + caig x3,knstat + jrst dspst0 + restor + skipn hungup + output tty, + popj p, + popj p, + subttl END + +; Get here on an APR trap (data out of bounds/pdl overflow) + +aprtrp: setom addrck ; we had a failure + movem 0,stabuf+2 ; save regs + move 0,[1,,stabuf+3] + blt 0,stabuf+21 + hrrz t1,.jbtpc## ; save address + hrrzm t1,stabuf + move t1,0(t1) + movem t1,stabuf+1 + move t1,locked ; preserve current locked address + hrlm t1,stabuf + move p,[iowd pdlsiz,stabuf+^d128] ; in case stack is messed up + move s,[iowd stksiz,stk] + pushj p,gripe ; put data into gripe file + move p,[iowd pdlsiz,pdl] + skipe t1,ftlerr ; if setftl called + jrst 0(t1) ; then go there + movei 16,[[5]] ; gen one of 5 possible fatal errors + move 1,0 + outstr @0(1) + jrst monit + +fmsgs: exp [asciz " +You have blundered into an ancient +Romulan space mine. Being made of a +special plastic which is nearly trans- +parent to nearly all wavelenths of +radiation, you are forgiven. +Perhaps your crew also forgave you +as their bodies went up in a blast +of quarks! +"] + + exp [asciz " +A delayed-action virus, picked up +by your Navigation Officer on +Xyglion IV during R&R, has +spread throughout the entire crew. +Unfortunately, the medical crew +has been unaware of it, and it has +suddenly and simultaneously killed +every living thing aboard. +"] + + exp [asciz " +Due to an oversight by the designers, +the Doomsday device has detonated. +Unfortunately, the information as to +what caused it to happen will never +be relayed home! +"] + + exp [asciz " +Your ship's hull has been eaten through +by a Space Mole, a creature about the +size of a grape and composed of pure +energy. Fortunately, word of this new +menace was sent homeward abord a distress +beacon immediately prior to the final +disruption of the ship's life support +systems. +"] + + exp [asciz " +A slight navigational error has placed +your ship in a magnetic vortex. This +tremendous storm, equivalent to an +Eartly tornado, has torn your ship +apart. The crew died almost instantly. +Perhaps we will oneday capture the +Romulan's Vortex Detector and be safe +from this menace! +"] + + entry aprset ; set fatal return for APR trap +aprset: movei 0,@0(arg) + movem 0,ftlerr + popj p, + page + subttl *Zap - clear statistics data files + entry stazap +stazap: outstr [asciz " +Zapping statistics logs...."] + movei t1,stabuf ; lock the files + pushj p,lock. + skipe lkfail + jrst .-3 + movei t1,1 ; tell gripe what's happening + movem t1,addrck + pushj p,gripe ; record the data + movei t1,5*^d128-1 ; zap everything + setzm stabuf(t1) + sojg t1,.-1 + move x1,[staupd,,staupd] + pushj p,open. + jrst stzapx ; report failure + output sta,staiow + close sta, + move x1,[stfupd,,stfupd] ; zap freebies + pushj p,open. + jrst stzapx + output sta,staiow + close sta, +stzap0: movei t1,stabuf ; release the files + pushj p,unlo. + outstr [asciz " +Finished! +"] + setzm addrck + popj p, + +stzapx: outstr [asciz " + +Can't open file for output! + +"] + jrst stzap0 + popj p, + + page + subttl ROMSPK - The Romulan speaks! + + entry romspk +romspk: + save + skipe player ; if the Romulan has just reincarnated + jrst rmspk0 ; then + movei arg,[[3]] ; choose who gets the message + pushj p,iran + move t1,0 + movem t1,tmp ; save the target population + move t1,-1+[ 777777 ; all + 000777 ; humans (Federation) + 777000 ; klingons (Empire) + ](t1) + jrst rmspk1 + +rmspk0: move t1,who ; get bit for the talking player + move t1,bits-1(t1) + setzm tmp ; remember single player! +rmspk1: movem t1,dbits + movei t1,dxrom*^d100 + movem t1,dispfr ; say that the Romulan is speaking + restore + movei p1,@0(arg) ; init pointer to destination string + hrli p1,(point 7,0) + movei arg,[[4]] ; get leadin + pushj p,iran + sos t1,0 + move p2,[ point 7,[asciz "Death to "] + point 7,[asciz "Destruction to "] + point 7,[asciz "I will crush "] + point 7,[asciz "Prepare to die, "] + ](t1) + skipn tmp ; if single player response + move p2,[ point 7,[asciz "You have aroused my wrath, "] + point 7,[asciz "You will witness my vengence, "] + point 7,[asciz "May you be attacked by a slime-devil, "] + point 7,[asciz "I will reduce you to quarks, "] + ](t1) + pushj p,rmcopy ; copy to destination + movei arg,[[5]] ; get adjective + pushj p,iran + sos p2,0 + move p2,[ point 7,[asciz "mindless "] + point 7,[asciz "worthless "] + point 7,[asciz "ignorant "] + point 7,[asciz "idiotic "] + point 7,[asciz "stupid "] + ](p2) + pushj p,rmcopy + sosl p2,tmp ; if broadcasting + skipa p2,[ point 7,[asciz "sub-Romulan "] + point 7,[asciz "human "] + point 7,[asciz "klingon "] + ](p2) + pushj p,rmgply ; else get player-specific quip + pushj p,rmcopy + movei arg,[[5]] ; get object + pushj p,iran + sos p2,0 + move p2,[ point 7,[asciz "mutant"] + point 7,[asciz "cretin"] + point 7,[asciz "toad"] + point 7,[asciz "worm"] + point 7,[asciz "parasite"] + ](p2) + pushj p,rmcopy + movei c,"s" + skipl tmp ; if not single player + idpb c,p1 ; then make the object plural + movei c,"!" + idpb c,p1 + setz c, + idpb c,p1 ; tack on a null + popj p, + +rmcopy: ildb c,p2 ; copy (p2) to (p1) + skipn c + popj p, + idpb c,p1 + jrst rmcopy + +rmgply: + movei arg,[[3]] ; 33% chance of node-specific quip + pushj p,iran + caie 0,1 + jrst rmgprn ; else make up random one + getlin t1, ; get terminal name + hrlz t1,t1 ; put node name in left half + setz t2, ; search node name table +rmgpl0: hllz t3,nodnam(t2) + jumpe t3,rmgpl1 ; jump if node not found + came t1,t3 + aoja t2,rmgpl0 + hrrz p2,nodnam(t2) ; found it! get quip + hrli p2,(point 7,0) + popj p, + +rmgpl1: hlrz t1,t1 ; check for special node names + andi t1,77 ; if 'CLx' or 'CSx' + caie t1,'CL ' + cain t1,'CS ' + jrst [move p2,[point 7,[asciz "Columbus "]] + popj p,] + andi t1,7777 ; if 'Qxx' + cain t1,'Q ' + jrst [move p2,[point 7,[asciz "Tymnet "]] + popj p,] +rmgprn: movei arg,[[5]] + pushj p,iran + cain 0,5 + jrst [move t1,team ; use team basis + move p2,-1+[ point 7,[asciz "human "] + point 7,[asciz "klingon "] + ](t1) + popj p,] + sos t1,0 + move p2,[ point 7,[asciz "sub-Romulan "] + point 7,[asciz "vertebrate "] + point 7,[asciz "endo-skeletal "] + point 7,[asciz "soft-skinned "] + ](t1) + popj p, + +nodnam: 'AKR',,[asciz "Akron "] + 'ANA',,[asciz "Anahiem "] + 'ARL',,[asciz "Arlington "] + 'ATL',,[asciz "Atlanta "] + 'BOS',,[asciz "Boston "] + 'CAN',,[asciz "Canton "] + 'CGI',,[asciz "Chicago "] + 'CGO',,[asciz "Chicago "] + 'CIN',,[asciz "Cincinnatti "] + 'CSC',,[asciz "ISD "] + 'CSW',,[asciz "Wats user "] + 'CLG',,[asciz "Columbus "] + 'CVL',,[asciz "Cleveland "] + 'DAL',,[asciz "Dallas "] + 'DAY',,[asciz "Dayton "] + 'DEN',,[asciz "Colorado "] + 'DET',,[asciz "Detroit "] + 'FTW',,[asciz "Fort Worth "] + 'HOU',,[asciz "Houston "] + 'IND',,[asciz "Indianapolis "] + 'KCI',,[asciz "Kansas "] + 'KXT',,[asciz "Knoxville "] + 'LAN',,[asciz "Los Angeles "] + 'LOU',,[asciz "Louisville "] + 'MEM',,[asciz "Memphis "] + 'MIA',,[asciz "Florida "] + 'MIN',,[asciz "Minneapolis "] + 'NFK',,[asciz "Norfolk "] + 'NOL',,[asciz "Lousiana "] + 'NYC',,[asciz "New York "] + 'NYF',,[asciz "New York "] + 'NYN',,[asciz "New York "] + 'NYW',,[asciz "Wall Street "] + 'PIT',,[asciz "Pittsburgh "] + 'PNX',,[asciz "Phoenix "] + 'QBA',,[asciz "Quebec "] + 'SEA',,[asciz "Seattle "] + 'SFA',,[asciz "San Francisco "] + 'SFM',,[asciz "California "] + 'SJO',,[asciz "Silicon Gultch "] + 'SLC',,[asciz "Salt Lake City "] + 'STL',,[asciz "St. Louis "] + 'TSA',,[asciz "Tucson "] + 'TSB',,[asciz "Tucson "] + 'WES',,[asciz "West Port "] + 'WQB',,[asciz "Qube "] + 0 ; end of table + + page + subttl updnam - update program's running name for tracking + +; move t1,newinfo +; move t2,mask ; 77 in each position to be changed +; pushj p,updnam + +updnam: popj 17, + + save + calli t3,-14 + jfcl + and t1,t2 + or t3,t2 + xor t3,t2 + or t3,t1 + setnam t3, + restore + popj p, + +; FNDLOK - translate lock address into six-bit chracter +; movei t1,lokaddress +; pushj p,fndlok +; return with rh of t1 having the lock ID in all three 6-bit positions + +fndlok: + save + movei t2,0 +fndlo1: skipn loknam(t2) + jrst fndlo2 + hrrz t3,loknam(t2) + came t3,t1 + aoja t2,fndlo1 + hlrz t1,loknam(t2) + jrst fndlo3 + +fndlo2: cail t1,board + caile t1,board+brdsiz-1 ; if in the board + skipa t1,['???'] ; then returh unknown lock + movei t1,'BBB' ; else return board flag +fndlo3: restore + popj p, + +loknam: xwd 'PPP',plnlok + xwd 'FFF',frelok + xwd 'QQQ',quelok + xwd 'NNN',numply + xwd 'SSS',staupd + 0 + + page + +;commented out COmpuserve's modifications (merlyn) +;subttl cishng - establish a hang-up intercept (CIS monitor) +; +; Search SYSMAC +;opdef getnam [calli -14] +;OPDEF STINI. [CALLI -162] +;OPDEF SCHNA. [CALLI -163] +;OPDEF SCHND. [CALLI -164] +;OPDEF SEVTA. [CALLI -165] +;OPDEF SEVTD. [CALLI -166] +;OPDEF DEBRK. [CALLI -174] +;OPDEF SRISW. [CALLI -175] +; +;cishng: DMOVE TA,[ -1 +; [ 2,,CHNTBL +; 2,,LVLTBL +; 0,,0 +; ] +; ] +; STINI. TA, +; JRST [OUTSTR [ASCIZ " +;? STINI. failed! +;"] +; jrst rdwhst] +; DMOVE TA,[ -1 +; 3,,1 +; ] +; SEVTA. TA, +; JRST SEVFLD +; dmove ta,[ -1 +; 104,,2 +; ] +; sevta. ta, +; jrst sevfld +; DMOVE TA,[ -1 +; 700000,,0 +; ] +; SCHNA. TA, +; JRST SCHFLD +; popj p, +;;; +;havenq: setom hv.lok ; tell lock. routine that we have resource +; movem $v,save$v +; seto $v, +; wake $v, ; wake the lock. routine immediately +; jfcl +; move $v,save$v +; debrk. ; return to lock. +; +;hang: +; setom hungup ; set hung up flag +; skipn who ; if user has a ship, the he may have resource +; jrst hang.4 +; movem $v,hang$v ; save a register +; movem ta,hangta ; and another +; movei $v,knloks-1 ; if the user has an interlock set +; skipn loktab($v) +; sojge $v,.-1 +; jumpl $v,hang.2 ; then +; move $v,lvltbl ; if executing a ttcall +;hang.0: move ta,0($v) ; get the current instruction being executed +; camn ta,[output 0,] ; or "output tty," +; jrst hang.1 +; and ta,[777000,,0] ; mask everything but instruction bits +; camn ta,[xct] ; if doing an execute +; jrst [hrrz $v,0($v) ; then get the address of that instr. +; cain $v,$v ; if one of the saved regs +; movei $v,hang$v ; then map it into proper one +; cain $v,ta +; movei $v,hangta +; jrst hang.0] ; and look at the xct'ed instr. +; camn ta,[ttcall] ; if doing a ttcall +;hang.1: aos lvltbl ; then return to the ttcall + 1 +; seto $v, ; wake any hibernate going on +; wake $v, +; jfcl +; move $v,hang$v +; move ta,hangta +; debrk. ; return to main code +; +;hang.2: movei re,[who] ; release the player +; pushj p,free## ; ... but good! +;rdwhst: +;hang.4: debrk. 1, ; clear the interrupt system +; jfcl +; reset ; clear bufferd I/O +; movei ra,[ sixbit 'DSK' ; return to DWHOST +; sixbit 'DWHOST' +; exp 0,0,0,0 +; ] +; run ra, +; halt +; +;SCHFLD: OUTSTR [ASCIZ " +;? SCHNA. failed! +;"] +; jrst rdwhst +;SEVFLD: OUTSTR [ASCIZ " +;?SEVTA> failed! +;"] +; jrst rdwhst +; +;chntbl: +; XWD 1,HANG +; xwd 2,havenq +; +; lit ; put lits in hiseg + + +;below added by merlyn + + entry onexit + sixbit /onexit/ +onexit: + monrt. + +;not used drforbin(merlyn) + entry pauses + sixbit /pauses/ +pauses: + movei 1,@0(arg) + + sleep 1, + popj p, + + end diff --git a/pdp10/utexas/hlp/DECNWS.RNO b/pdp10/utexas/hlp/DECNWS.RNO new file mode 100644 index 0000000..aa610e7 --- /dev/null +++ b/pdp10/utexas/hlp/DECNWS.RNO @@ -0,0 +1,210 @@ +.ps 60,70.npa +.br;[DECWAR Version 2.2, 25-Dec-79] +.ls.lm 5 + +.le;New Pre-game feature implemented. Users now will have the +ability to 'inspect' a game (relative strengths of the two sides, +who is on which side, etc.) before entering the game itself. Gripes +can also be submitted from the pre-game, and the Help and News files +can be inspected. See HELP PREGAME for details. + +.els.sk +_. + +.br;[DECWAR Version 2.1, 18-Nov-79] +.ls.lm 5 + +.le;TRACTOR command fixed. + +.le;Ships will no longer start the game within range of enemy bases +or planets. + +.le;Ships will no longer blindly drive into black holes. Ships can +still be DISPLACED into black holes by photon torpedoes and novas, +however. + +.els.sk +_. + +.br;[DECWAR Version 2.0, 10-Jul-79] +.ls.lm 5 + +.le;DECWAR.INI is here! See help on DECINI. + +.le;Short, medium, and long output (controls output from hit messages, +USERS, the LIST commands, POINTS, etc.). See help on OUTPUT. + +.le;You can give multiple commands per line. See help on INPUT. + +.le;New commands LIST and SUMMARY, and expanded commands BASES, PLANETS, +and TARGETS. See help on LIST. + +.le;New default action for PLANETS (LIST PLANETS 10) and TARGETS (LIST +TARGETS 10). + +.le;The help file has been reworked, and there is now help on all +commands, plus some helpful hints and a description of the input +scanner. +For best results, print GAM:DECWAR.HLP on LPT1 (about 25 pages). + +.le;GRIPES are now added to the beginning of the gripe file, and more +information is recorded with each gripe (version, date, time, ship name, +user name, TTY speed, PPN, TTY number, job number, and whether or not +Romulans and/or black holes were included in the game). + +.le;There are more SET commands, and the TYPE command has been added. +See help on SET and TYPE. + +.le;You can gag against an individual ship. + +.le;Even if everyone gets killed, the old game hangs around for 5 minutes +before self destructing. + +.le;If the teams are too skewed you're forced to join the smaller team. + +.le;There are 9 ships on each side instead of 8, and some of the +ship names have been changed. + +.le;There's a clock to keep you amused when waiting for reentry after +being killed. + +.le;The amount of core required has been reduced from 8+58 to 5+46 pages. + +.els.sk +_. + +.br;[DECWAR Version 1.4, 3-Apr-79] +.ls.lm 5 + +.le;TERMINATE command changed to QUIT. +.br;SEND command changed to TELL. +.br;New command SET NAME/PROMPT. No help available yet. + +.le;New players to a game will now have their choice of sides. +Old players (ones that have met their maker) will join their +previous team. + +.le;A _^C will now exit the game only at command level. + +.le;Players no longer will be able to _^C out of game while under +red alert (you must QUIT to get out). + +.le;The Klingon ship RAVEN has been rechristened the MANTA to prevent +conflicts between Romulan and Raven in computed fires. + +.le;Multiple jobs / TTY will no longer circumvent the dead ship +wait time. + +.le;The REPAIR command has two new features. Using the ALL switch +will initiate a repair sufficient to completely repair all damaged +ship devices (with the corresponding pause time, of course). A user +may also specify the amount of repair desired by simply appending +a number to the REPAIR command line. (See HELP REPAIR for details). + +.le;Capturing a fortified (ie, built) planet will now involve an +extra second of pause time for each BUILD the enemy has completed. +50 units of ship energy will also be subtracted for each BUILD. + +.le;Recently killed players reentering the game before their required +wait time has been completed can now ask the program to wait the +remaining time for them (saves timing it yourself). + +.le;The default for Romulans in the setup of the game is now TRUE. + +.le;NEWS will now pause between notes on each version to query the +user whether to continue printing the file. + +.els.sk +_. +.br;[DECWAR Version 1.3, 09-Feb-79] +.ls.lm 5 + +.le;Code removing dead and/or derelict ships thoroughly rewritten and +debugged. We apologize for the many problems associated with version +1.2, the present version should now work properly. Please report any +further problems with sudden ship removal via the GRIPE command. + +.le;A computed Photon Torpedo fire at a ship out of range will simply +report this fact, rather than miss in the proper direction. Tracking +of enemy ships will thus no longer be possible using this method. + +.le;Recent problems with continuing a CTRL-C'ed job resolved. + +.le;HELP and GRIPE now correctly restore the ship onto the display. + +.le;Error returns from CAPTURE and DOCK no longer considered as +time-consuming moves. + +.els.sk +_. +.br;[DECWAR Version 1.2, 03-Feb-79] +.ls.lm 5 + +.le;Code removing dead and/or derelict ships much improved. This +fix should eliminate the full hit queue errors also. + +.le;PLANET command, plus dead planet removal code debugged and +improved to prevent bizarre results under special conditions. + +.le;Critically damaged life-support will now decrement life-support +reserves after time-consuming moves only. + +.le;USERS output shortened, but includes more info. + +.le;GRIPErs are now identified in the gripe file. + +.els;.sk +_. +.br;[DECWAR Version 1.1, 21-Sep-78] +.ls.lm 5 + +.le;New command ENERGY, for transferring energy ship-to-ship. For +more details, see HELP ENERGY. + +.le;New command TRACTOR, for applying tractor beam to friendly ship. +For more details, see HELP TRACTOR. + +.le;POINTS command greatly improved. For more details, see HELP POINTS. + +.le;Pauses in REPAIR, PHASERS, and TORPEDOES improved. + +.le;GRIPE and HELP now protect user from attack, unless he is already +under red alert conditions. + +.le;Ship condition (green, red, etc.) more closely controlled. + +.le;When the first player is choosing the setup options, a +entered in response to the questions will produce a regular +game with no Romulans or black holes. + +.le;Output routines greatly improved, changes should be transparent +to users. + +.els;.sk +_. +.br;[DECWAR Version 1.0, 8-Sep-78] +.ls.lm 5 + +.le;New additions to SCAN command. See HELP SCAN for details. + +.le;New command TIME gives various time info. + +.le;The commands BUILD, CAPTURE, DOCK, IMPULSE, MOVE, PHASERS, REPAIR, +SCAN, and TORPEDOES now take actual physical time (most times are +dependent on the slowest terminal in the game). See HELP PAUSES +for details. + +.le;When you get killed, you now have to wait 2 minutes before +restarting (don't try to cheat, or you'll have to wait even longer). + +.le;_^C will now abort stacked commands. See HELP CTL-C for more +information. + +.le;_^T will tell you what state you're in via a changing program name. +See HELP CTL-T for more information. + +.le;A lone altmode entered in response to the COMMAND prompt will now +execute the previously entered command. This is useful when building +a planet into a base, when docking, repairing, firing torpedoes, etc. + +.els diff --git a/pdp10/utexas/hlp/DECWAR.RNH b/pdp10/utexas/hlp/DECWAR.RNH new file mode 100644 index 0000000..4676eda --- /dev/null +++ b/pdp10/utexas/hlp/DECWAR.RNH @@ -0,0 +1,1454 @@ +.variable system,s,u +.ps 60,64.lm 0.rm 64.ft +.nm +.title [DECWAR.HLP] +.c;DECWAR Version 2.3, November 20, 1981 + +.IF SYSTEM +.c;(Includes help on SYSTEM commands) +.ENDIF SYSTEM + +.sk 2 +_.Introduction +.br;Introduction and Overview of the Game of DECWARs. +.p;DECWAR is a real time space battle game designed to be played +by from 1 to 10 people. The object of the game is to destroy all +enemy bases and ships, and capture all enemy planets, before the +enemy does the same to you. Each person plays on a separate +terminal, and enters the game by selecting +.sk +.c;8 DECWAR (on the MultiPlayer Host) +.sk +Players are free to enter and leave the game as desired, since +each has his own job and therefore won't interfere with +the other players (the jobs interact through a shareable high +segment). +.sk +.P;Besides the enemy (Federation or Empire), the +following may also be a threat to your well being. +.ls +.le +Romulans are nasty beasts that beginners are +better off without. However, if you're the only person playing, +the Romulan is your only competition. Romulans tend to +make for shorter games but when there are 3 or less players +a Romulan will be included. After the fourth player joins the +game, a Romulan will not be re-created once he is destroyed. +include Romulans in the game. +.le +Black holes are annoying, since if you are +displaced into one, you're dead. They also tend to gobble up stray +torpedos. There is a 25% chance of black holes being +included in the game. +.els +.p;There are two primary opposing forces in the galaxy -- Humans +(Federation) and Klingons (Empire). As you enter the game +for the first time, you get to choose which side you'll join +(unless there is a large imbalance in the team sizes). +If you are subsequently destroyed and later reenter the game, you +automatically rejoin your old team. +.p;You get to select the ship you want to control from a +list of remaining ships on your side. There are 5 ships on each side: +.sk.nf +.i13;Federation ships Empire ships +.i13;---------------- ------------ +.i16;Lexington Cobra +.i16;Nimitz Demon +.i16;Savannah Hawk +.i16;Vulcan Jackal +.i16;Yorktown Wolf +.sk.f +.skip 2 +.p;Due to continuous espionage activities, present front-line +ships of the Federation and the Klingon Empire are identical in +strength and weaponry. These ships can move from sector to sector +using either warp or impulse engines, can attack enemy +installations and ships using either photon torpedoes +or phasers, and can defend themselves against such attack using their +deflector shields. All ships also possess sub-space radios which keep +them in touch with friendly starbases and other ships. +.sk +.p;The various devices of a ship are subject to damage. This +damage may be due to enemy attack or to over use. These damages, unlike +total ship damage (see ship attributes below), may be repaired while +underway. If damage on a device is less than 300 units, its +performance is degraded. If damage is 300 or more units, the device is +inoperative. +A ship possesses the following devices: +.ls +.le;Warp Engines -- +These engines are the normal mode of travel for starships. The maximum +speed is warp factor 6, with warps 5 and 6 risking +potential damage to the engines. If warp engines are damaged (less +than 300 units) the maximum speed is warp factor 3. +.note;One warp unit is equivalent to one horizontal or +one vertical grid movement. A diagonal movement is +equivalent to the hypotenuse of the horizontal and +vertical sides. +.end note +.le;Impulse Engines -- +These engines are basically for emergency use while the warp engines +are critically damaged. Impulse engines move the ship at warp factor 1. +.le;Photon Torpedo Tubes -- +Used to fire photon torpedoes. If these tubes are damaged, the +accuracy of torpedo bursts is impaired. The maximum torpedo range +is 10 sectors. +.le;Phaser Banks -- +Each ship possesses two phaser banks, with a single phaser control. +Damage to this phaser control or to the ship's computer reduces the +strength of the phaser hit. +.le;Deflector Shields -- +The deflector shields of a ship protect it from damage from phaser +and photon torpedo hits, and shield it from the energy released when a +star goes nova. The percent shield strength indicates the +percent of the incoming hit which will be nullified. In addition, +strong deflector shields may deflect photon torpedoes with little or +no damage. NOTE: If a ship's shields are up, the amount of energy +expended during movement is doubled. +.le;Computer -- +The ship's computer is used for computed firing, computation during +ship movement, and for phaser control. If the computer is +inoperative, navigation during warp and impulse movement becomes inexact. +.le;Life Support -- +If the life support units of a starship are inoperative, the +ship must either repair this damage or dock within 5 stardates. If +this is not accomplished, the crew will die. +.le;Sub-Space Radio -- +The sub-space radio is used to communicate with other ships, of either +side. Bases under attack also use the sub-space radio to call for help +and notify their team's ships of their destruction. +.le;Tractor Beam -- +The ship's tractor beam is used primarily to tow damaged friendly +ships away from danger. The beam can not be used unless both ships +have lowered their shields. +.els +.p;In addition to the individual devices discussed above, a newly +commissioned ship (or a fully repaired and rearmed older ship) +possesses the following attributes: +.ls +.le;5000 units of ship energy. Ship energy is used during movement and +phaser firing. It is also decreased each time the ship gets hit +with phasers or photon torpedoes. If this quantity ever reaches zero, +the ship is dead. A ship possessing 1000 units of ship energy or less +automatically goes to yellow alert, and a warning bell sounds after +every move. +.le;2500 units of shield energy. This energy is stored in the ship's +shields (whether up or down), and is separate from the ship energy. +However, energy may be transferred between these two energy reserves +as needed. If shields are up, their energy is decreased each time +the ship gets hit. +.le;Zero units of ship damage. During battle, a ship collects +hits from enemy installations and ships. If these accumulated hits +ever reach 2500 units of damage or greater, the ship is destroyed. +Ship damage may be reduced only by docking. +.els +.p;The galaxy is arranged in a grid of 75 by 75 sectors. Players +can move freely throughout the galaxy in search of enemies, which +come in several categories: +.ls +.le +Romulan. This can be the most dangerous thing to come up against, and +fortunately there is a maximum of 1 Romulan in the game at any given +time. The Romulan moves around concealed by his cloaking device +until he comes across a suitable target (Federation or Empire ship +or base) which he immediately proceeds to attack. An infinite supply +of torpedoes and energy make him a formidable foe. If you kill one, +another will eventually appear somewhere in the galaxy. +.le +Enemy ship. This is the second most dangerous thing to come across, +since all enemy ships are backed by human intelligence. All ships are +created equal, and so the outcome of a clash between two ships is +usually due to skill on its captain's part, although some other factors +do come into play. +.le +Enemy base. These aren't dangerous unless you come within range +(4 sectors) since they are immobile. If you ARE foolish enough to +get within range, however, their overwhelming phaser power will +quickly pound you into rubble! Destroying a base is useful +primarily because this removes it from use by your enemy (bases +are used as supply stations and as a refuge in times of stress). A +damaged starbase will slowly build itself back to full strength if +it is not completely destroyed. +.le +Enemy planet. These are just like enemy bases, except that they are +weaker (how much weaker depends on how many fortifications the enemy +has built on them), and they can be captured. Their firing range is only +two sectors, and they can re-supply the enemy less rapidly than can a base. +.le +Neutral planet. While these aren't strictly classified as enemies, +they will take pot shots at you (their range is also 2 sectors), +so be wary of them. You can capture neutral planets and win them over +to your side. +.els +.sk +.p;When playing the game, all commands can be abbreviated to 2 +characters, and some can be abbreviated to 1 character (you can +use the shortest unambiguous abbreviation). For a list of +commands type +.sk +.i9;HELP * +.sk +and for a description of an individual command type +.sk +.i9;HELP command +.sk +The help on individual commands will +be read from this help file (that's what the periods in column 1 +are for in the long description of each command). The legal +commands are: +.ls +.le;BASES -- +List information on friendly and known enemy bases. +.le;BUILD -- +Develop installations on a planet, and eventually build it into a +base. The planet must first be captured. +.le;CAPTURE -- +Win a neutral or enemy planet over to your side. +.le;DAMAGES -- +List damaged devices and their current status. +.IF SYSTEM +.le;*DEBUG -- +A password-controlled routine to enter DDT directly from DECWAR. +.ENDIF SYSTEM +.le;DOCK -- +Dock at an adjacent base or planet. This increases your energy, +replenishes your torpedoes, repairs your ship a little, and reduces +your ship damage. +.le;ENERGY -- +Transfer energy between two ships. +.le;GRIPE -- +Record bugs, comments, suggestion, etc. in the file GAM:DECWAR.GRP, +which is periodically reviewed by the implementors. +.le;HELP -- +List or describe the legal commands. +.le;IMPULSE -- +Move using impulse engines. +.le;LIST -- +List various information about ships, bases, and planets. +.le;MOVE -- +Move using warp engines. +.le;NEWS -- +Tell about any new features or enhancements described in the file +GAM:DECWAR.NWS. +.IF SYSTEM +.le;*PASSWORD -- +Set password for debugging, cheating, etc. +.ENDIF SYSTEM +.le;PHASERS -- +Fire phasers at a target. +.le;PLANETS -- +List information on friendly and known enemy and neutral planets. +.le;POINTS -- +List your score breakdown so far. +.le;QUIT -- +Get out of the game. +.le;RADIO -- +Turn ship's sub-space radio on or off; ignore or restore communications +from individual ships. +.le;REPAIR -- +Repair your damaged devices a little. +.le;SCAN -- +Display the galaxy with the default range set to maximum (10 sectors +in each direction from your ship). +.le;SET -- +Set various input and output defaults. +.le;SHIELDS -- +Transfer energy to or from your shields; raise or lower your +shields. +.le;SRSCAN -- +Display the galaxy with a default range of 7 sectors (1 greater than +the maximum warp factor). +.le;STATUS -- +List your ship's current status and supply levels. +.le;SUMMARY -- +List various information on ships, bases, and planets. +.le;TARGETS -- +List targets (enemies within range) and their current locations. +.le;TELL -- +Send messages to other ships using the sub-space radio. +.le;TIME -- +List information on run time and elapsed time. +.le;TORPEDOES -- +Fire photon torpedoes at a target. +.le;TRACTOR -- +Use tractor beam to tow friendly ships. +.le;TYPE -- +List current input, output, and game characteristics. +.le;USERS -- +List the names and other information known about the players +currently in the game. +.els +.sk 2 + .pg.ts 16 + +.br;_. +_.INPUT +.br;General INPUT information +.sk +.lm 2 +.i-2;-#Only the first 5 characters of each input word are stored. Any +characters beyond that are ignored. +.i-2;-#Input words may be separated by spaces, tabs, or commas. +.i-2;-#The input line can be terminated with , , , , +, or _^Z. +.i-2;-#_^G toggles echo. At the beginning of each input line, +echoing is turned on. Typing _^G turns it off, the next _^G turns +it back on, etc. Echoing is always turned back on at the end of +an input line, or if _^U is typed. +.i-2;-#Multiple commands may be given on a single command line by +separating the commands with / (slash). If the TELL command is given, +it must be last on the line. +.i-2;-#Anything after ; (semicolon) is treated as a comment and is +ignored (but TELL rescans the line and takes the text after the +first ; as the message to send). +.i-2;-# (escape, or altmode) entered as the first character in +response to the command prompt (even before _^H, _^U, or _^R) repeats +the previous command. This is useful when building a planet, docking, +repairing, firing torpedoes, etc. Altmode can't be used to repeat a TELL +command. +.sk +.i-2;-#Any ship name can be abbreviated to 1 character. +.i-2;-#Any command or keyword can be shortened to the shortest unambiguous +abbreviation, which is never more than 2 characters. +.sk +.i-2;-#Many commands require a coordinate as an argument (PHASERS, TORPEDOES, +CAPTURE, BUILD, etc.). The required coordinate(s) can be specified in one +of three ways: +.lm +2 +.i-2;Absolute - the default coordinate input type, which is simply an +absolute vertical position followed by an absolute horizontal position. The +coordinate may be preceded by the keyword ABSOLUTE, but this isn't necessary +unless the default coordinate input type has been changed by SET ICDEF +RELATIVE. +.i-2;Relative - the keyword RELATIVE, followed by a relative vertical +distance and a relative horizontal distance. A positive distance +is either up or right, and negative is either down or left. The absolute +coordinate is computed by adding the relative distances to your current +position. The keyword RELATIVE isn't needed if the default coordinate input +type has been changed by SET ICDEF RELATIVE. +.i-2;Computed - the keyword COMPUTED followed by a ship name. +The coordinate used is the location of the given ship. +This type of coordinate computation is available only to captains +controlling their ships through slow terminals (< 1200 baud), and +requires an operational computer. +.IF SYSTEM +.lm +2 +.i-2;* If the password is set you can use computed coordinates even on +a fast terminal. +.lm -2 +.ENDIF SYSTEM +.lm -2 +The keyword ABSOLUTE, RELATIVE, or COMPUTED is only given one time for +each set of coordinates. For instance, the TORPEDO command can accept +up to 3 coordinates, but the keyword describing the coordinate input type +is given only once, and all coordinates must be of the same type. +.lm 0 +.br;_. +.sk 2.tp 4 + + + +_.OUTPUT +.br;General OUTPUT information +.sk +The SET OUTPUT LONG/MEDIUM/SHORT command controls the length +of text output throughout the game. In particular, Medium or +Short hit messages received during battle are greatly reduced +in length when compared to the Long format. Unfortunately, these +shorter forms are not as self-explanatory as the Long form. The +following are some equivalent Long, Medium and Short hit messages: +.sk.lm 2.nf +.i-2;-#Goblin @22-31, +83.6% makes 285.3 unit torpedo hit on +Vulcan displaced to 20-31, +72.1% +.sk +G @22-31, +83.6% 285.3 unit T V -->20-31, +72.1% +.sk +G 22-31 +83 285T V >20-31 +72 +.sk 2 +.i-2;-#Emp planet(3) @15-16 makes 155.5 unit phaser hit on +Buzzard @15-17, 66.8% +.sk +-@3 @15-16 155.5 unit P B @15-17, 66.8% +.sk +-@3 15-16 155P B 15-17 +66 +.sk +Note: The -@3 indicates an Empire planet built 3 times. +.sk 2 +.i-2;-#Star @22-31 +4,+2 makes 301.2 unit hit on +Panther displaced to 20-31 +2,+2, -72.1% +.sk +* @22-31 +4,+2 301.2 unit N P -->20-31 +2,+2, -72.1% +.sk +* 22-31 +4,+2 301N P >20-31 +2,+2, -72 +.sk.f +Note: The relative coordinates appear due to a SET OCDEF BOTH +command. The Panther's shields are 72.1% of max strength, but +down (-72.1%). +.lm 0 +.br;_. +.sk 2.ts 16.tp 4 + + + +_.PREGAME +.br;The Decwar PRE-GAME feature +.sk +DECWAR provides a Pre-game feature to allow: +.lm 2 +.i-2;-#New players to view the help file without entering the current +game. +.i-2;-#Experienced players to check the status of a current game +before choosing a side and ship. +.i-2;-#Players to submit Gripes without entering the game. +.lm 0.sk +The commands currently active within the Pre-game section are: +.br;Activate##Gripe#####Help######News######Points####Quit +.br;Summary###Time######Users +.sk;The ACTIVATE command (valid only in the pre-game) is used to exit +the pre-game section and enter the normal ship setup stage. The +pre-game can be recognized from the 'PG>' command prompt. +.br;_. +.sk 2.tp 4 + + + +_.HINTS +.br;Some general HINTS +.sk +.lm 2 +.i-2;-#When in doubt, use the on-line help system. See the help +on HELP for more information. +.i-2;-#If the output starts piling up in the middle of a battle, type +_^O (CTL-O). None of your commands will be executed until output is +finished, so it's sometimes better just to ignore the hit messages so +your attack or run commands can be executed immediately. +.i-2;-#Use multiple commands per line (separate commands with /). Once +you're in a danger area, things can happen faster than you can react to +them. Plan your action ahead of time, before you enter a danger area. +.i-2;-#If some unexpected action happens, such as an enemy finding you, +and you have several stacked commands (either from a multiple command +line or typing ahead), type _^C to abort all stacked commands (especially +if it involves time consuming commands such as BUILD, or commands that +generate a lot of output, such as SCAN). You can then proceed to remedy +the situation by giving your unexpected visitor a good beating. +.i-2;-#If you're on a slow terminal, use computed coordinates, and move +around a lot if you're fighting someone on a fast terminal. Computed +coordinates are the primary advantage slow terminals have over the fast +ones (computed coordinates give slow terminals a fantastic tactical +advantage over fast terminals when used properly). +.i-2;-#Use to repeat commands (see the help on ESCAPE). It's just a +convenience when building planets, etc., but in battle, and combined with +multiple commands per line and/or computed coordinates +(such as PH C B/M R 1 0##or##TO 1 32 45), it can make or break your career +as a starship captain. +.i-2;-#Don't get within range of an enemy base, unless you enjoy being +pounded into rubble. You can kill a base just as well from 1 sector outside +it's range (use the WARNING keyword on SCAN to see the range of an enemy +base). +.i-2;-#Don't waste your energy and torpedoes firing at friendly ships +and bases. If you're not sure if it's friendly or not, type HELP SCAN +for a list of what's what. You can also use the TARGETS command to see +which enemies are lurking about (see the help on TARGETS and LIST). +.i-2;-#Don't make it a habit of sitting next to stars; photon +torpedoes can turn them into novas, which are extremely destructive. +Conversely, if you notice an enemy ship or base adjacent to a star, +take advantage of the situation! +.i-2;-#One sure way to locate enemy ships is to watch for newly +captured enemy planets by using the PLANETS or LIST command. +.i-2;-#In general, don't waste photon torpedoes battering at a target +with 85-100% shields. The chances are good that they will just be +deflected harmlessly away. Use your phasers to weaken the shields, +then use torpedoes to finish him off. This is especially true when +attempting to destroy an enemy starbase. +.i-2;-#Use the SET command in DECWAR.INI to personalize the output to +your own tastes. That way you'll be guaranteed to have the output set +right each time you play a game. +.i-2;-#To always see the range and direction of any object listed (in +hit messages, output from the LIST command, etc.), SET OCDEF BOTH. +(The range is the magnitude of either delta v or delta h, whichever is +larger.) +.lm 0 +.br;_. +.sk 2.tp 4 + + + +_.PAUSES +.br;Commands that take real time +.sk +Many of the commands are designed to take a certain amount of +real time. This is done to help equalize the game when there are +different speed terminals and different speed typists in the game. +Some commands take a constant amount of time, and some are based +on the speed of the slowest terminal in the game. +.sk.lm 16.nj +.i-16;BUILD 5 to 7 seconds +.i-16;CAPTURE 5 seconds + 1 second for each BUILD of enemy planet +.i-16;DOCK 2 to 4 seconds +.i-16;IMPULSE 2 to 4 seconds +.i-16;MOVE 2 to 4 seconds +.i-16;REPAIR (0.08 * repair size) seconds (* 0.5 if docked) +.lm 0.j +.sk +You have 2 phaser banks, each of which must be cooled off after it's fired +before it can be used again. Each phaser bank takes 3 to 6 seconds plus +the amount of phaser damage / 100 to cool off. For instance, if there +was a 300 baud terminal in the game, and your phasers had 200 units of +damage, each of your phaser banks would take 6 + 2 = 8 seconds to cool +off after being fired. Therefore, you could fire once every 4 seconds, +or twice every 8 seconds. +.sk +After each burst of torpedoes the +tubes must be reloaded before being used again. It takes 2 to 4 seconds +plus the amount of torpedo tube damage / 100 to load a torpedo. For +instance, if there was a 300 baud terminal in the game, your torpedoes had +200 units of damage, and you had just fired 3 torpedoes, it would take +3 * (4 + 2) = 18 seconds before you could fire torpedoes again. +.br;_. +.sk 2.tp 4 + + + +_.CTL-C +.br;Use of _^C +.sk +If you're in command input wait (DECWAR is waiting for you to type +a command), typing a _^C will +abort the game and +return you to monitor mode. When you abort the game in this manner, +your ship is returned to the pool of available ships. You will be +able to continue unless a new player has taken your ship or someone +has moved into the spot you occupied. +.sk +If you're not in a command input wait state when you type _^C, any +stacked commands (commands that you typed in ahead of time that haven't +been executed yet) will be aborted, and a series of bells will be +output. +.sk +NOTE: A ship under RED alert conditions can not be returned to +the monitor level except by using the QUIT command. +.br;_. + .pg.ts 16 + +_.BASES +.br;List various BASE information +.sk +Syntax: BAses [] +.sk +List location and shield percent of friendly bases; location of known +enemy bases; or count of bases of either side within a specified range +or the entire galaxy. The default range is the entire galaxy, and the +default side is friendly bases only. See the help for LIST for more +information and the complete set of keywords that can be used to modify +BASES output. +.sk +Examples: +.sk.lm 16.nj +.i-16;BA List location and shield percent of all friendly bases. +.i-16;BA ENEMY List location of all known enemy bases. +.i-16;BA SUM Give summary of all friendly bases. +.i-16;BA ALL SUM Give summary of all bases. +.i-16;BA CL List the location and shield percent of the closest friendly +base. +.i-16;BA 34 26 List the location and shield percent of friendly base at 34-26 +(it doesn't have to be friendly, but you can't see the shield percent of an +out of range enemy base). +.lm 0.j +.br;_. +.sk 2 + + + +_.BUILD +.br;BUILD fortifications on a captured planet +.sk +Syntax: BUild [Absolute|Relative] +.sk +A fortified planet hits harder and is more resistant to destruction by +the enemy. A planet can normally be built up to 4 times. As your team's +starbases are destroyed by enemy action, a fifth build will complete the +construction of a new starbase on the planet. Only 10 starbases can be +functional at any one time. +.sk +Examples: +.sk.lm 16.nj +.i-16;BU 32 12 Build the planet at sector 32-12. +.i-16;BU A 32 12 Equivalent to "BU 32 12" +.i-16;BU R 1 1 Build the planet at sector 32-12, if your present location +is 31-11. +.lm 0.j +.br;_. +.sk 2 + + + +_.CAPTURE +.br;CAPTURE a neutral or enemy planet +.sk +Syntax: CApture [Absolute|Relative] +.sk +At the start of the game, all planets are neutral (they fire at everyone!). +Once captured by either side, they fire only at enemy ships, and can be +DOCKed at to refuel and rearm, just like a base (except a planet can only +supply half the resources that a base can). Enemy planets can also be +captured. When capturing an enemy planet, 1 second is added to the +normal pause time of 5 seconds for each BUILD present. Also, 50 units of +ship energy are lost for each build. +.sk +Examples: +.sk.lm 16.nj +.i-16;CA 12 32 Capture planet at 12-32. +.i-16;CA A 12 32 Equivalent to "CA 12 32". +.i-16;CA R 1 1 Capture planet at sector 12-32, if your present location is +11-31. +.lm 0.j +.br;_. +.sk 2 + + + +_.DAMAGES +.br;DAMAGE report +.sk +Syntax: DAmages [] +.sk +List damaged ship devices and the amount of damage to each. The condition +of all or just selected devices may be examined. Total ship damage is not +reported. +.sk +Examples: +.sk.lm 16.nj +.i-16;DA List all damaged devices and their current damages. +.i-16;DA SH T List damages for SHields and Torpedo tubes. +.i-16;DA PH RA C List damages for PHasers, sub-space RAdio, +and Computer. +.lm 0.j +.br;_. +.sk 2 + + + +.IF SYSTEM +_.*DEBUG +.br;DEBUG the game +.sk +.lm 2 +.i-2;If DDT is loaded: +.br;Chain to DDT to allow variables to be examined and altered, set break +points, etc. To get back to DECWAR, type C.$G. +.i-2;If DDT is not loaded: +.br;Exit to the monitor. If a symbol file is present, variables can still +be easily examined by entering DDT through the monitor command DDT. +.lm 0 +.br;_. +.sk 2 +.ENDIF SYSTEM + + + +_.DOCK +.br;DOCK at a friendly base or planet +.sk +Syntax: DOck [Status []] +.sk +Refuel, repair, and rearm your ship, and set your ship's condition +to green. While docked, any repairs are accelerated, and you have an +"infinite" supply of torps. If you have no damages and are completely +refueled and rearmed, DOCKing will have no effect on your ship. A +STATUS command string can be appended to a DOCK order. The following +table lists the maximum resources available per move when +DOCKing at a base or planet: +.sk +.lit +Resource Base Planet +---------------------------------------------- +Ship energy +1000 +500 +Shield energy +500 +250 +Photon Torpedoes +10 +5 +Life Support Reserves +5 +5 +Ship Damage -100 -50 +Ship Damage, if already docked -200 -100 +.el +.sk +Examples: +.sk.lm 16.nj +.i-16;DO Dock, no status report. +.i-16;DO ST Dock, show ship's status AFTER docking. +.i-16;DO ST SH T Dock, show ship's shield strength and number of +torpedos on board AFTER docking. +.lm 0.j +.br;_. +.sk 2 + + + +_.ENERGY +.br;Transfer ENERGY to a friendly ship +.sk +Syntax: Energy +.sk +The receiving ship must be located in an adjacent sector. 10% of the +energy transferred will be lost due to broadcast dissipation. If you +attempt to send more energy than the other ship can store +(ie 5000 units), the transfer will automatically be reduced to the +maximum possible. +.sk +Example: +.sk.lm 16.nj +.i-16;E I 1000 Transfer 1000 units of energy to the Intrepid. The +Intrepid will receive 900 units of energy. +.lm 0.j +.br;_. +.sk 2 + + + +_.GRIPE +.br;Submit a GRIPE +.sk +Syntax: Gripe +.sk +Add a comment, bug report, suggestion, etc. to the top of file +GAM:DECWAR.GRP. Type in your comments, then _^Z (CTL-Z) to exit and +continue the game, or _^C (CTL-C) to abort and not send the gripe. +Each gripe is preceded with a header that includes the version number, +date, time, ship name, user name, TTY speed, PPN, TTY number, job number, +and whether or not Romulans and/or black holes are included in the game. +Unless you are currently under red alert, GRIPE will protect you from +enemy attack. +To view gripes not yet acted upon, type the file GAM:DECWAR.GRP. +To view answered gripes, and see what action was taken on them, type +the file GAM:DECWAR.FXD. +.br;_. +.sk 2 + + + +_.HELP +.br;Give HELP +.sk +Syntax: Help [*|] +.sk +Give general help info, a list of available commands, or a detailed +description of a particular command or keyword. Unless you are under red +alert, HELP will protect you from enemy attack. +The following conventions are used in the detailed descriptions: +.lm 2 +.i-2;-#The first line contains, in all caps, the keyword that help is being +given for. +.i-2;-#The syntax line (second line) lists the portion of the keyword required +to make it unique in caps, and the remainder of the keyword in lower case, +followed by any parameters (if the keyword is a command). +.i-2;-#A quantity to be filled in is lower case and enclosed in <> (angle +brackets). +.i-2;-#Optional parameters are enclosed in [] (square brackets). +.i-2;-#A choice (either or) is indicated by | (vertical bar). +.i-2;-#Any parameter that must be typed in literally is started in capital +letters and continued in lower case. The upper case letters signal the +shortest unambiguous abbreviation (the shortest abbreviation +may change slightly, depending on context). +.lm 0 +.sk +Examples: +.sk.lm 16.nj +.i-16;H Give general help info. +.i-16;H * List all available commands. +.i-16;H H List this block of text. +.i-16;H SH Give help for the SHIELDS command. +.i-16;H HI G Give some general HINTS and a description of the GRIPE +command. +.lm 0.j +.br;_. +.sk 2 + + + +_.IMPULSE +.br;Move using IMPULSE engines +.sk +Syntax: Impulse [Absolute|Relative] +.sk +Move one sector vertically, horizontally, or diagonally (equivalent +to warp factor 1). Ship condition changes to green. + +.sk +Examples: +.sk.lm 16.nj +.i-16;I 37 45 Move to sector 37-45. +.i-16;I A 37 45 Equivalent to "I 37 45". +.i-16;I R 1 -1 Move to sector 37-45, if your ship's present +location is 36-46. +.lm 0.j +.br;_. +.sk 2 + + + +_.LIST +.br;LIST ship, base, and planet info +.sk +Syntax: List [] +.sk +The following information is available via the LIST command: +.lm 2 +.i-2;-#Name of any ship currently in the game (including the Romulan). +.i-2;-#Location and shield percent of any friendly ship, or any ship +within scan range (10 sectors). +.i-2;-#Location and shield percent of any friendly base, or any base +within range. +.i-2;-#Location of any known enemy base (any base that has previously +been SCANned or LISTed by anyone on your team). +.i-2;-#Location and number of builds of any known planet, or any planet +within range. +.lm 0 +.IF SYSTEM +.lm +2 +.i-2;* Note: If the password flag is set, all ships, bases, and planets +are "known" about. So, with the password set, LIST, SUMMARY, BASES, +PLANETS, and TARGETS will allow you access to any information they are +capable of providing. However, any information received because of the +password being set is not "remembered" like information learned through +normal use of these commands. +.lm -2 +.ENDIF SYSTEM +.br;The above information is also available, in whole or in part, through +the SUMMARY, BASES, PLANETS, and TARGETS commands. +Each command has it's own default range, side (Federation, Empire, +Romulan, Neutral), and object (ship, base, planet). LIST (and SUMMARY) +include everything (infinite range, all sides, all objects) by default. +On output, enemy objects are flagged with * (star) in column 1 unless +the command is TARGETS. +.sk +Keywords used with BASES, PLANETS, TARGETS, LIST, and SUMMARY (not all +keywords are legal for all commands): +.sk +.lm 16.nj +.i-16;ship names Include only specified ships (several ship +names may be given, including Romulan). +.i-16;vpos hpos List only the object at the location vpos-hpos. +.i-16;CLosest List only the closest of the specified objects. +.sk +.i-16;SHips Include only ships (Federation, Empire, or Romulan). +.i-16;BAses Include only bases (Federation or Empire). +.i-16;PLanets Include only planets (Federation, Empire, or Neutral). +.i-16;POrts Include only bases and planets. If no side is specified +(Federation, Empire, Neutral, or Captured), include only friendly ports. +.sk +.i-16;FEderation Include only Federation forces. +.i-16;HUman Same as Federation. +.i-16;EMpire Include only Empire forces. +.i-16;Klingon Same as Empire. +.i-16;FRiendly Include only friendly forces (Federation or Empire). +.i-16;ENemy Include only enemy forces (Empire or Federation and Romulan). +.i-16;TArgets Same as enemy. +.i-16;NEutral Include only neutral planets. +.i-16;CAptured Include only captured planets (Federation or Empire). +.sk +.i-16;n Include only objects within n sectors. +.i-16;ALl Include all sides unless a side is explicitly given. Extend +the range to infinity unless a range is explicitly given. +.sk +.i-16;LIst List individual items. Turn off summary unless command is +SUMMARY or the keyword SUMMARY is specified. +.i-16;SUmmary List summary of all selected items. Turn off list unless +command is LIST or the keyword LIST is specified. Extend the range to +infinity unless a range is explicitly given. +.sk +.i-16;And Used to separate groups of keywords. +.i-16;_& Same as AND. +.lm 0 +.sk +Examples: +.sk.lm 16.nj +.i-16;LIST List all information available on all ships, bases, +and planets. +.i-16;LIST SUM List all available info plus a summary of the number of each +object in game. +.i-16;LI EN BA List the location of all known enemy bases. +.i-16;LI SH List all available info on all ships in the game. +.i-16;LI CL PO List closest friendly base or friendly or neutral planet. +.i-16;LI 1 3 _& 9 5 List the objects at locations 1-3 and 9-5. +.lm 0.j +.br;_. +.sk 2 + + +_.MOVE +.br;MOVE using warp drive +.sk +Syntax: Move [Absolute|Relative|Computed] +.sk +Maximum speed is warp factor 6, which will move you 6 sectors per +turn. Maximum SAFE speed is warp factor 4; warp factors 5 and +6 risk potential warp engine damage. Energy consumption per move is +proportional to the square of the warp factor. If the ship's shields +are up during this movement, the energy consumption is doubled. +Moving changes your ship's condition to green. +.sk +Examples: +.sk.lm 16.nj +.i-16;M 37 45 Move to sector 37-45. +.i-16;M A 37 45 Equivalent to "M 37 45". +.i-16;M R 4 -5 Move to sector 37-45, if your present location is 33-50 +(move up 4 sectors and left 5 sectors). +.i-16;M C W "Ram" the Wolf. No actual collision occurs, but your + ship ends up adjacent to the Wolf's current position. +.lm 0.j +.br;_. +.sk 2 + + + +_.NEWS +.br;Display the NEWS file +.sk +Syntax: NEws +.sk +Display the file which contains information on any new +features, enhancements, bug fixes, etc for each version of DECWAR. +.br;_. +.sk 2 + + + +.IF SYSTEM +_.*PASSWORD +.br;Set PASSWORD +.sk +Syntax: *Password [] +.sk +If the correct password is given, set the password flag. +If no password is given, or the password is incorrect, issue an +error message and clear the flag. +The password flag must be set to access system commands (*DEBUG). +Also, with the password flag set, you have access to ANY information +that LIST can supply, including detailed information on out of range +enemy forces. +It is suggested that you turn off echoing by typing _^G (CTL-G) +before you type in any system command, and especially before typing +in the password. +.br;_. +.sk 2 +.ENDIF SYSTEM + + + +_.PHASERS +.br;Fire PHASERS at an enemy ship, base, or planet +.sk +Syntax: PHasers [Absolute|Relative|Computed] [energy] +.sk +Phasers must be directed at a specific target, and only one target may +be specified per command. Obstacles seemingly in the path of the phaser +blast are unaffected, since the energy ray is not a line-of- sight + +weapon. The size of the hit is inversely proportional to the distance +from the target. Maximum range is 10 sectors vertically, horizontally, +or diagonally. Each phaser blast consumes 200 units of ship energy, +unless a specific amount of energy is given (the specified energy must +be between 50 and 500 units, inclusive). The phaser banks have +roughly a 5% chance of damage with a default (200 unit) blast, with the +probability of damage reaching nearly 65% with a maximum (500 unit) +blast. The severity of the resulting damage is also dependant on the +size of the blast. Also, if your ship's shields are up, a +high-speed shield control is used to quickly lower and then restore the +shields during the fire. This procedure consumes another 200 units of +ship energy. The weapons officer on board your ship will cancel +all phaser blasts directed against friendly ships, bases, or planets. +Firing phasers (or getting hit by phasers) puts you on red alert. +NOTE: Although phasers can damage enemy planetary installations +(BUILDs), they can NOT destroy the planet itself. +.sk +Examples: +.sk.lm 16.nj +.i-16;PH 12 32 Phaser target at sector 12-32. +.i-16;PH A 12 32 Equivalent to "PH 12 32". +.i-16;PH R 2 -3 Phaser target at sector 12-32, if your location is 10-35. +.i-16;PH C BUZZARD Phaser the Buzzard (if in range). +.i-16;PH C B Same as PH C BUZZARD (ship names can be abbreviated to 1 +character). +.i-16;PH 300 12 32 Phaser target at sector 12-32, using 300 units +of energy. +.lm 0.j +.br;_. +.sk 2 + + + +_.PLANETS +.br;List various PLANET information +.sk +Syntax: PLanets [] +.sk +List location and number of builds for all known planets, and a +summary of planets within a specified range or the entire galaxy. +The default range is 10 sectors, and the default side is every side. +See the help for LIST for more information and the complete set of +keywords that can be used to modify PLANETS output. +.sk +Examples: +.sk.lm 16.nj +.i-16;PL List all planets within 10 sectors. +.i-16;PL SUM Give summary of all planets in game. +.i-16;PL ALL NEU List all known neutral planets. +.i-16;PL ALL CAP List all known captured planets. +.i-16;PL ALL 20 List all known planets within a radius of 20 sectors. +.lm 0.j +.br;_. +.sk 2 + + + +_.POINTS +.br;List POINTS scored so far this game +.sk +Syntax: POints [Me|I|Federation|Human|Empire|Klingon|Romulan|All] +.sk +Itemize the current point breakdown. Information +can be obtained concerning the points scored by your individual ship, +your team, the opposition, the romulans, or any combination of the +above. If the Romulan Empire is not involved in the game, the ROMULAN +keyword will be ignored. +.sk.nf +Categories in POINTS breakdown: +-#Damage to enemies. +-#Enemies destroyed (500 points each). +-#Damage to bases. +-#Planets captured (100 points each). +-#Bases built (1000 points each). +-#Romulans damaged/destroyed. +-#Stars destroyed (-50 points each). +-#Planets destroyed (-100 points each). +.sk +-#Total points scored. +-#Total number of ships commissioned. +-#Total score / number of players. +-#Total score / stardates. +.sk +Examples: +.sk.lm 16.nj +.i-16;PO List points for your ship. +.i-16;PO ME Equivalent to "PO". +.i-16;PO KLI FED List the score of the two teams. +.i-16;PO ALL List all the scoring information available. +.lm 0.f.j +.br;_. +.sk 2 + + + +_.QUIT +.br;QUIT the game +.sk +Syntax: Quit +.sk +Quit the game before normal end of execution and return to the monitor. +Your ship is released for use by another player, you're chalked up as +just one more casualty, and you can't CONTINUE the game. If you want +to rejoin the game, you'll have to wait 2 minutes, and then either START +or RUN the game. If you want to exit the game temporarily (to answer +SENDS, etc.), type _^C (CTL-C), and you'll usually be able to CONTINUE. +NOTE: If you're under red alert, you won't be able to _^C out of the +game; you'll have to use the QUIT command. +.br;_. +.sk 2 + + + +_.RADIO +.br;Turn sub-space RADIO on or off, or +.br;set to ignore or restore communications from individual ships +.sk +Syntax: RAdio ON|OFf##or##RAdio Gag|Ungag +.sk +Turn your ship's sub-space radio on or off, thus controlling whether +or not you'll receive any messages from other ships or your bases; +or suppress or restore messages originating from specific ships. +.sk +Examples: +.sk.lm 16.nj +.i-16;RA ON Turn sub-space radio ON. +.i-16;RA OFF Turn sub-space radio OFF. +.i-16;RA G L Suppress all radio messages sent by the Lexington. +.i-16;RA U W Allow radio messages sent by the Wolf to be received. +.lm 0.j +.br;_. +.sk 2 + + + +_.REPAIR +.br;REPAIR device damage +.sk +Syntax: REpair [] +.sk +Repair damaged ship devices. If a ship suffers a critical +hit to a device, REPAIR can be used to restore the device to +full (or partial) working order. A REPAIR removes +the specified units of damage from each damaged device, in +addition to the normal repair rate of 30 units per turn. +If the ship is DOCKED, the pause time for the specified REPAIR +is reduced by half of that needed while in flight. If the +repair size is not specified, REPAIR defaults to a 4 +second repair (50 units + 50 more if docked). REPAIR +does NOT reduce the SHIP damage. +.sk +Examples: +.sk.lm 16.nj +.i-16;RE 100 Remove up to 100 units of device damage. +.i-16;RE Same as "RE 100" if DOCKED, else same as "RE 50". +.lm 0.j +.br;_. +.sk 2 + + + +_.SCAN +.br;Full range SCAN +.sk +Syntax: SCan [Up|Down|Right|Left|Corner] [|
] [W] +.sk +Display a selected portion of the nearby universe. If no range is +specified, SCAN defaults to a square scan range of ten sectors +from the present ship location. The keywords UP, DOWN, RIGHT, LEFT, +and CORNER modify this to include only the part of this original square +specified (relative to the ship). The maximum scan range is 10 +sectors, and larger specified ranges are reduced to this value. If +individual vertical and horizontal ranges are specified, the scanning +field will be shaped accordingly. The WARNING keyword if added to the +end of a SCAN command string will flag the empty sectors within range +of an enemy base or planet with _!'s instead of _.'s. The SCAN +symbols and their meanings are: +.sk.lm 18.nj +.i-18;L, N, S, V, Y Federation warships +.i-18;C, D, H, J, W Empire warships +.i-18;########?? ##Romulan warship +.i-18;########<> ##Federation starbase +.i-18;########)( ##Empire starbase +.i-18;#########@ ##Neutral planet +.i-18;########@F ##Federation planet +.i-18;########@E ##Empire planet +.i-18;#########* ##Star +.i-18; ##Black hole +.i-18;#########. ##Empty sector +.i-18;#########_! ##Empty sector within range of enemy port +(only when using WARNING keyword) +.sk +.i-18;Examples: +.sk.nj +.i-16;SC ##Scan universe within a radius 10 sectors. +.i-16;SC 10 ##Equivalent to "SC". +.i-16;SC 13 ##Equivalent to "SC 10" or "SC". +.i-16;SC 4 ##Scan universe within 4 sectors. +.i-16;SC 4 4 ##Equivalent to "SC 4". +.i-16;SC 2 8 ##Scan up to 5 rows and 17 columns, centered on the +present ship location. +.i-16;SC U 4 7 ##Show only upper half of normal "SC 4 7" scan. +.i-16;SC C -5 -5 ##Scan the region bounded by the present ship location +and the location (-5,-5) sectors away (puts ship in +upper right corner of the scan). +.i-16;SC W ##Same as "SC", plus shows danger zones around enemy +bases and planets. +.lm 0.j +.br;_. +.sk 2 + + + +_.SET +.br;SET input and output parameters +.sk +Syntax: SEt +.sk +.ts 8,17.lm 17.nj +.i-17;Keyword Value Description +.i-17;------- ----- ----------- +.i-17;Name name Change name (shows in USERS). +.i-17;Output Long Default. Use longest output format. +.i-9;Medium Use medium output format. +.i-9;Short Use short (cryptic) output format. +.i-17;Scan Long Default. Use long format scans. +.i-9;Short Use 1 character symbols instead of 2. +.i-17;Prompt Normal Default. Use "COMMAND: " prompt. +.i-9;Informative Use "> " for prompt. Precede the ">" with: +.br;S if shields are down or < 10%. +.br;E if ship energy < 1000 (yellow alert). +.br;D if ship damage > 2000. +.br;nL if life support is critically damaged (n stardates of reserves). +.Comment .i-17;Ttytype CRT, ADM-3a, ADM-2, SOROC, BEEHIVE, ACT-IV, ACT-V +.Comment .br;Doesn't do anything yet. +.i-17;OCdef Absolute Default. Display all coordinates in absolute +format (vpos-hpos). +.i-9;Relative Display coordinates relative to your location (dv,dh). +.i-9;Both Display coordinates in both absolute and relative form. +.i-17;Icdef Absolute Default. All input coordinates default to +absolute. +.i-9;Relative Input coordinates default to relative. +.ts 16.lm 0.j +.sk +Examples: +.sk.lm 16.nj +.i-16;SE PR I Switch to informative prompt. +.i-16;SE OU S Set output format to short. +.i-16;SE N THOR Change your name in USERS to THOR. +.lm 0.j +.br;_. +.sk 2 + + + +_.SHIELDS +.br;SHIELD control +.sk +Syntax: SHields Up|Down##or##SHields Transfer +.sk +Raise or lower ship shields, or transfer energy between ship and shield +energy reserves. Raising shields consumes 100 units of ship energy, +lowering them or transfering energy is "free". NOTE: Shield condition +is displayed as +n% for shields up, n% of full strength, or -n%, for +shields down, n% of full strength. +.sk +Examples: +.sk.lm 16.nj +.i-16;SH U Raise shields. +.i-16;SH D Lower shields. +.i-16;SH T 500 Transfer 500 units of energy TO shields +.i-16;SH T -500 Transfer 500 units of energy FROM shields +.lm 0.j +.br;_. +.sk 2 + + + +_.SRSCAN +.br;Short Range SCAN +.sk +Syntax: SRscan [Up|Down|Right|Left|Corner] [|
] [W] +.sk +Equivalent to SCAN, but with a default scan range of 7 sectors. For +complete information on sensor scans, see the help on SCAN. +.br;_. +.sk 2 + + + +_.STATUS +.br;Show ship STATUS +.sk +Syntax: +.br;STatus [Condition|Location|Torpedoes|Energy|Damage|Shields|Radio] +.sk +Show the current stardate, plus +the status of any of the ship attributes: ship condition, location, +number of torps, ship energy, ship damage, shield energy, and radio +condition. Ship condition can be green, yellow (low on energy), or +red (in battle). Radio condition is either on or off. +.sk +Examples: +.sk.lm 16.nj +.i-16;ST Give full status report. +.i-16;ST T Report how many torpedos remain on board. +.i-16;ST E D SH Report the ship energy, the ship damage, and the +shield condition (energy, %, up/down). +.i-16;ST L Report the current ship location. +.lm 0.j +.br;_. +.sk 2 + + + +_.SUMMARY +.br;Give SUMMARY on number of ships, bases, and planets +.sk +Syntax: SUmmary [] +.sk +Give any of the information available from the LIST command, but give +only a summary by default. See the help on LIST for more information +and the complete set of keywords that can be used to modify SUMMARY output. +.sk +Examples: +.sk.lm 16.nj +.i-16;SUM Tell how many ships, bases, and planets are in the game +(broken down into friendly, enemy, and neutral categories). +.i-16;SUM EN Tell how many enemies are in the game (number of +Romulans, enemy ships, enemy bases, and enemy planets). +.lm 0.j +.sk + + + +_.TARGETS +.br;List information on TARGETS +.sk +Syntax: TArgets [] +.sk +Primarily for locating targets during battle, when a SCAN would be +too time consuming. +List location and shield percent of any enemy ship, base, or planet +in range; name of any enemy ship in game (including the Romulan); or +location and number of builds of any known enemy planet. TARGETS is +equivalent to a LIST command with a default range of 10 sectors and +a default side of enemy. +.sk +Examples: +.sk.lm 16.nj +.i-16;TA List all targets within 10 sectors. +.i-16;TA 10 Equivalent to "TA". +.i-16;TA 5 List all targets within 5 sectors. +.lm 0.j +.br;_. +.sk 2 + + + +_.TELL +.br;TELL another ship something using the sub-space radio +.sk +Syntax: TEll All|FEderation|HUman|EMpire|Klingon|ENemy|FRiendly| +; +.sk +Send messages to one or several of the players currently in +the game, with no range limitation. Players who have turned +their radios off, or have a critically damaged sub-space radio +can not be sent to. The TELL command can not be repeated using +the ESCAPE key (no junk mail!). +.sk +Examples: +.sk.lm 16.nj +.i-16;TE V;Hello! Send "Hello!" to the Vulcan. +.i-16;TE KL;DROP DEAD Send "DROP DEAD" to all Klingons. +.i-16;TE V,E;HELP ME Send "HELP ME" to the Vulcan and Excalibur. +.lm 0.j +.br;_. +.sk 2 + + + +_.TIME +.br;List various TIMEs +.sk +Syntax: TIme +.sk +List time since game started; time since your ship entered the game; +run time for your job so far this game; total run time since login; +and current time of day. +.br;_. +.sk 2 + + + +_.TORPEDOES +.br;Fire photon TORPEDO burst +.sk +Syntax: +.br;TOrpedo [Absolute|Relative|Computed] n

[

[

]] +.sk +A photon torpedo is aimed along a path in physical space, thus +any object lying along its path will intercept the torpedo. One, +two, or three torpedoes may be fired with one command, +and the torpedoes may be individually targeted, or fired at a +common location. The minimum range of a torpedo is 8 +sectors, but some will travel 10 sectors before self-destructing. +Torpedoes may be deflected from the desired track by a number +of different factors, including your +ship's shield strength, computer and torpedo tube damage, and torpedo +misfires. A torpedo misfire also aborts the remainder of the burst, and +sometimes damages the torpedo tubes as well. Torpedoes can cause +stars to go nova, and can also destroy planets (if no enemy +installations remain intact). "Accidental" hits on friendly ships, +bases, or planets are automatically neutralized. A torpedo burst uses +no ship energy. Firing torpedoes (or getting hit by one) +puts you on red alert. +.sk +Examples: +.sk.lm 18.nj +.i-18;TO 1 12 24 ##Fire one torpedo at sector 12-24. +.i-18;TO 3 12 24 ##Fire three torpedoes at sector 12-24. +.i-18;TO 3 6 7 8 7 9 12 Fire one torpedo at sector 6-7, one at 8-7, +and one at 9-12. +.i-18;TO 3 12 24 13 39##Fire one torpedo at sector 12-24, +and two at sector 13-39. +.i-18;TO A 3 12 24 ##Equivalent to "TO 3 12 24". +.i-18;TO R 2 2 -5 ##Fire two torpedoes at sector 22-25, +assuming your location is 20-30. +.i-18;TO C 3 BUZZARD ##Fire three torpedoes at the Buzzard. +.i-18;TO C 1 E ##Fire one torpedo at the Excalibur. +.lm 0.j +.br;_. +.sk 2 + + + +_.TRACTOR +.br;TRACTOR beam +.sk +Syntax: TRactor ##or##TRactor Off +.sk +Tow another ship of the same team. The two ships +must be located in adjacent sectors and both ships must have their +shields lowered. Once such a beam is applied, either ship can pull +the other behind it using warp or impulse engines. Energy +consumption for the towing ship is 3 times the normal rate for +movement with the shields down. The ship being towed will end +the move trailing the lead ship. If either ship raises deflector +shields, the tractor beam is automatically cut. The tractor beam will +also be broken if either ship is hit by a torpedo or damaged by a nova. +.sk +Examples: +.sk.lm 16.nj +.i-16;TR Break any existing tractor beam. +.i-16;TR OFF Equivalent to "TR". +.i-16;TR B Apply tractor beam to the Buzzard. +.lm 0.j +.br;_. +.sk 2 + + + +_.TYPE +.br;TYPE game, input, and output settings +.sk +Syntax: TYpe OPtion|OUtput +.sk +Type the current game OPTION and OUTPUT settings. +.lm 2 +.i-2;The OPTION settings are: +.i-2;-#The version number and date of implementation, +.i-2;-#Whether there are Romulans in the game, +.i-2;-#and whether there are Black Holes in the game. +.i-2;The OUTPUT settings are: +.i-2;-#SHORT, MEDIUM, or LONG output, +.i-2;-#NORMAL or INFORMATIVE command prompt, +.i-2;-#SHORT or LONG sensor scans, +.i-2;-#ABSOLUTE or RELATIVE default for coordinate input, +.i-2;-#ABSOLUTE, RELATIVE, or BOTH for coordinate output, +.i-2;-#and the current TTYTYPE. +.lm 0 +.sk +Examples: +.sk.lm 16.nj +.i-16;TY OP List the option settings. +.i-16;TY OU List the output settings. +.lm 0.j +.br;_. +.sk 2 + + + +_.USERS +.br;List USERS +.sk +Syntax: Users +.sk +List all ships currently in the game. Include ship name, captain +(may be changed by SET NAME), TTY speed, PPN, TTY number, and job number. +If the output format is set to medium or short, omit the TTY and job +numbers. +If the output format is set to short, omit the TTY speed and PPN (include +only the ship name and captain). + +.IF SYSTEM +.lm +2 +.i-2;* If the password is set, you also get each ship's location. +.lm -2 +.ENDIF SYSTEM diff --git a/pdp10/utexas/hlp/MAKHLP.MIC b/pdp10/utexas/hlp/MAKHLP.MIC new file mode 100644 index 0000000..0b8beb0 --- /dev/null +++ b/pdp10/utexas/hlp/MAKHLP.MIC @@ -0,0 +1,3 @@ +.if ($a="s") .let a = "/var:system" +.revive +.r new:runoff (decwar.hlp/cr/und:sep'a=decwar.rnh) diff --git a/pdp10/utexas/hlp/MAKNWS.MIC b/pdp10/utexas/hlp/MAKNWS.MIC new file mode 100644 index 0000000..ec9d8ea --- /dev/null +++ b/pdp10/utexas/hlp/MAKNWS.MIC @@ -0,0 +1 @@ +.r new:runoff (decwar.nws/cr=decnws.rno) diff --git a/pdp10/utexas/tec/EXTERN.TEC b/pdp10/utexas/tec/EXTERN.TEC new file mode 100644 index 0000000..f600273 --- /dev/null +++ b/pdp10/utexas/tec/EXTERN.TEC @@ -0,0 +1,10 @@ +[Building EXTERN.FOR] + erMSG.MAC ewEXTERN.FOR +ey s:: 0l -zk j +!N! :s::"f oD' -2d 6d 0xl 0k .,.+1xd d i external  gl i ! +!L! .u1 l 2r +:q1,.fsd!"f i! l 1a"e a' i ! oL' l 1a"e a' oN +!D! zk i + + + [Done] ex diff --git a/pdp10/utexas/tec/HISEG.TEC b/pdp10/utexas/tec/HISEG.TEC new file mode 100644 index 0000000..3053ded --- /dev/null +++ b/pdp10/utexas/tec/HISEG.TEC @@ -0,0 +1,18 @@ +erWARMAC.MAC +_subttl FORTRAN interface -- high 0l 4k !L1! "f a oL1' +[Building HISEG.FOR] + ewHISEG.FOR +j j i common /hiseg/ b,.xc b,.k 999un +!L2! 1a"e oL3' .u1 l 2r :q1,.fs;!"s r' .u2 +:q1,q2ss"u l oL2' +:q1,q2s,"s r fs,<( fs>) q2-1u2 .-q1-1u3 q3-(q3/8*8)-6"g '' +q1j ss ss .u3 s[(, ] r q3,.xs l .u1 j gc %n-999"l i, ' qn-7"g i + +  0un' gs b,.xc b,.k q3j l oL2 +!L3! j gc i + + zj i + + + hp ef  +Don't forget to recompile HIGH + ^C diff --git a/pdp10/utexas/tec/LOWSEG.TEC b/pdp10/utexas/tec/LOWSEG.TEC new file mode 100644 index 0000000..a8549b7 --- /dev/null +++ b/pdp10/utexas/tec/LOWSEG.TEC @@ -0,0 +1,18 @@ +erWARMAC.MAC +_subttl FORTRAN interface -- low 0l 4k !L1! "f a oL1' +[Building LOWSEG.FOR] + ewLOWSEG.FOR +j i common /lowseg/ b,.xc b,.k 999un +!L2! 1a"e oL3' .u1 l 2r :q1,.fs;!"s r' .u2 +:q1,q2ss"u l oL2' +:q1,q2s,"s r fs,<( fs>) q2-3u2 .-q1-1u3 q3-(q3/8*8)-6"g '' +q1j ss ss .u3 s[(, ] r q3,.xs l .u1 j gc %n-999"l i, ' qn-7"g i + +  0un' gs b,.xc b,.k q3j l oL2 +!L3! j gc i + + zj i + + + hp ef  +Don't forget to recompile LOW + ^C diff --git a/pdp10/utexas/tec/NDX.TEC b/pdp10/utexas/tec/NDX.TEC new file mode 100644 index 0000000..755f8b3 --- /dev/null +++ b/pdp10/utexas/tec/NDX.TEC @@ -0,0 +1,14 @@ +[Building DECWAR.NDX] + erdecwar.for ewdecwar.ndx +hk bub 1up !P! "t %p' "t oD' qb,zk a !N! +:ssubroutine"s 10uc oA' +:sfunction"s 8uc oA' +:sentry"s 5uc oA' +:sprogram"s 7uc oA' +:sblock"s 5uc oA' +oP +!A! .u1 0l ss r q1-.-qc"n l oN' +. 0l qb,.k iPage  qp\ ^o11i l .ub oN +!D! qb,zk  +Done + pef ^c diff --git a/pdp10/utexas/tec/PAGE.TEC b/pdp10/utexas/tec/PAGE.TEC new file mode 100644 index 0000000..1dbe381 --- /dev/null +++ b/pdp10/utexas/tec/PAGE.TEC @@ -0,0 +1,24 @@ +hk erDECWAR.NDX j i<_ + +:8"s +!RESCAN! uc +qc--"n oRESCAN' + +!IN! uc +qc-012"e oSEARCH' +qc-013"e oSEARCH' +qc-014"e oSEARCH' +qc-015"e oIN' +qc-022"e oSEARCH' +qc-024"e oSEARCH' +qc-032"e oSEARCH' +qc-033"e  + oSEARCH' +qci oIN' + +!SEARCH! +i; 0ttl %m> +3,.-10xs -zxi mi +qm"e Can't find " 0et qs= " +' + diff --git a/pdp10/utexas/tec/PARAM.TEC b/pdp10/utexas/tec/PARAM.TEC new file mode 100644 index 0000000..d5fc9a4 --- /dev/null +++ b/pdp10/utexas/tec/PARAM.TEC @@ -0,0 +1,20 @@ +erWARMAC.MAC +_subttl FORTRAN interface -- param 0l 4k !L1! "f a oL1' +[Building PARAM.FOR] + ewPARAM.FOR + j +!L2! 1a"e oL3' .u1 l 2r :q1,.fs;!"s r' .u2 +:q1,q2ss"u l oL2' +:q1,q2fs==="s -s  iparameter  q2+9u2 s= 1u3 +1a-^^^"e 0u3 2d i" q2-1u2' +:.,q2fs "s q2-1u2 +1a-^o11"e .-q1-1u4 q4-(q4/8*8)-q3"l 1a-^o11"e d q2-1u2'''' +' q2-1j 1a-^o011"n 1a-^o040"n c 1a-^o015"n i ''' l oL2 +!L3! j i implicit integer (a-z) + + zji + real ran,pwr + + + + hp ef ^c diff --git a/pdp10/utexas/tec/SETEXT.TEC b/pdp10/utexas/tec/SETEXT.TEC new file mode 100644 index 0000000..3a9c63b --- /dev/null +++ b/pdp10/utexas/tec/SETEXT.TEC @@ -0,0 +1,10 @@ +[Building SETEXT.FOR] + erSETMSG.MAC ewSETEXT.FOR +ey s:: 0l -zk j +!N! :s::"f oD' -2d 6d 0xl 0k .,.+1xd d i external  gl i ! +!L! .u1 l 2r +:q1,.fsd!"f i! l 1a"e a' i ! oL' l 1a"e a' oN +!D! zk i + + + [Done] ex diff --git a/pdp10/utexas/tec/TECSAV.INF b/pdp10/utexas/tec/TECSAV.INF new file mode 100644 index 0000000..b3739b2 --- /dev/null +++ b/pdp10/utexas/tec/TECSAV.INF @@ -0,0 +1,3 @@ +to create a SAV file using TECO... + +R TECO / EPfil$ EEfil$ M*$$ / ^C