@fnndsc/brasa 0.37.1 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +48 -0
- package/dist/buildinfo.json +1 -1
- package/dist/builtins/fs/cp.js +9 -5
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/destination.d.ts +15 -1
- package/dist/builtins/fs/destination.js +35 -2
- package/dist/builtins/fs/destination.js.map +1 -1
- package/dist/builtins/fs/mv.js +9 -5
- package/dist/builtins/fs/mv.js.map +1 -1
- package/dist/builtins/fs/rm.js +17 -1
- package/dist/builtins/fs/rm.js.map +1 -1
- package/dist/builtins/games/lab.js +3 -1
- package/dist/builtins/games/lab.js.map +1 -1
- package/dist/builtins/games/shelf.js +1 -1
- package/dist/builtins/games/shelf.js.map +1 -1
- package/dist/builtins/games/stdin.d.ts +0 -13
- package/dist/builtins/games/stdin.js +9 -0
- package/dist/builtins/games/stdin.js.map +1 -1
- package/dist/builtins/games/trek/abandon.d.ts +3 -0
- package/dist/builtins/games/trek/abandon.js +159 -0
- package/dist/builtins/games/trek/abandon.js.map +1 -0
- package/dist/builtins/games/trek/attack.d.ts +3 -0
- package/dist/builtins/games/trek/attack.js +185 -0
- package/dist/builtins/games/trek/attack.js.map +1 -0
- package/dist/builtins/games/trek/autover.d.ts +3 -0
- package/dist/builtins/games/trek/autover.js +79 -0
- package/dist/builtins/games/trek/autover.js.map +1 -0
- package/dist/builtins/games/trek/capture.d.ts +3 -0
- package/dist/builtins/games/trek/capture.js +117 -0
- package/dist/builtins/games/trek/capture.js.map +1 -0
- package/dist/builtins/games/trek/check_out.d.ts +3 -0
- package/dist/builtins/games/trek/check_out.js +67 -0
- package/dist/builtins/games/trek/check_out.js.map +1 -0
- package/dist/builtins/games/trek/checkcond.d.ts +3 -0
- package/dist/builtins/games/trek/checkcond.js +101 -0
- package/dist/builtins/games/trek/checkcond.js.map +1 -0
- package/dist/builtins/games/trek/compkl.d.ts +8 -0
- package/dist/builtins/games/trek/compkl.js +66 -0
- package/dist/builtins/games/trek/compkl.js.map +1 -0
- package/dist/builtins/games/trek/computer.d.ts +3 -0
- package/dist/builtins/games/trek/computer.js +310 -0
- package/dist/builtins/games/trek/computer.js.map +1 -0
- package/dist/builtins/games/trek/consts.d.ts +109 -0
- package/dist/builtins/games/trek/consts.js +159 -0
- package/dist/builtins/games/trek/consts.js.map +1 -0
- package/dist/builtins/games/trek/context.d.ts +27 -0
- package/dist/builtins/games/trek/context.js +2 -0
- package/dist/builtins/games/trek/context.js.map +1 -0
- package/dist/builtins/games/trek/damage.d.ts +3 -0
- package/dist/builtins/games/trek/damage.js +87 -0
- package/dist/builtins/games/trek/damage.js.map +1 -0
- package/dist/builtins/games/trek/damaged.d.ts +3 -0
- package/dist/builtins/games/trek/damaged.js +58 -0
- package/dist/builtins/games/trek/damaged.js.map +1 -0
- package/dist/builtins/games/trek/dcrept.d.ts +3 -0
- package/dist/builtins/games/trek/dcrept.js +86 -0
- package/dist/builtins/games/trek/dcrept.js.map +1 -0
- package/dist/builtins/games/trek/destruct.d.ts +3 -0
- package/dist/builtins/games/trek/destruct.js +114 -0
- package/dist/builtins/games/trek/destruct.js.map +1 -0
- package/dist/builtins/games/trek/dock.d.ts +5 -0
- package/dist/builtins/games/trek/dock.js +133 -0
- package/dist/builtins/games/trek/dock.js.map +1 -0
- package/dist/builtins/games/trek/dumpgame.d.ts +15 -0
- package/dist/builtins/games/trek/dumpgame.js +29 -0
- package/dist/builtins/games/trek/dumpgame.js.map +1 -0
- package/dist/builtins/games/trek/dumpme.d.ts +3 -0
- package/dist/builtins/games/trek/dumpme.js +81 -0
- package/dist/builtins/games/trek/dumpme.js.map +1 -0
- package/dist/builtins/games/trek/dumpssradio.d.ts +6 -0
- package/dist/builtins/games/trek/dumpssradio.js +72 -0
- package/dist/builtins/games/trek/dumpssradio.js.map +1 -0
- package/dist/builtins/games/trek/events.d.ts +3 -0
- package/dist/builtins/games/trek/events.js +407 -0
- package/dist/builtins/games/trek/events.js.map +1 -0
- package/dist/builtins/games/trek/getcodi.d.ts +14 -0
- package/dist/builtins/games/trek/getcodi.js +24 -0
- package/dist/builtins/games/trek/getcodi.js.map +1 -0
- package/dist/builtins/games/trek/getpar.d.ts +40 -0
- package/dist/builtins/games/trek/getpar.js +174 -0
- package/dist/builtins/games/trek/getpar.js.map +1 -0
- package/dist/builtins/games/trek/help.d.ts +3 -0
- package/dist/builtins/games/trek/help.js +155 -0
- package/dist/builtins/games/trek/help.js.map +1 -0
- package/dist/builtins/games/trek/impulse.d.ts +6 -0
- package/dist/builtins/games/trek/impulse.js +85 -0
- package/dist/builtins/games/trek/impulse.js.map +1 -0
- package/dist/builtins/games/trek/initquad.d.ts +17 -0
- package/dist/builtins/games/trek/initquad.js +79 -0
- package/dist/builtins/games/trek/initquad.js.map +1 -0
- package/dist/builtins/games/trek/io.d.ts +102 -0
- package/dist/builtins/games/trek/io.js +216 -0
- package/dist/builtins/games/trek/io.js.map +1 -0
- package/dist/builtins/games/trek/kill.d.ts +21 -0
- package/dist/builtins/games/trek/kill.js +194 -0
- package/dist/builtins/games/trek/kill.js.map +1 -0
- package/dist/builtins/games/trek/klmove.d.ts +3 -0
- package/dist/builtins/games/trek/klmove.js +181 -0
- package/dist/builtins/games/trek/klmove.js.map +1 -0
- package/dist/builtins/games/trek/lose.d.ts +9 -0
- package/dist/builtins/games/trek/lose.js +36 -0
- package/dist/builtins/games/trek/lose.js.map +1 -0
- package/dist/builtins/games/trek/lrscan.d.ts +3 -0
- package/dist/builtins/games/trek/lrscan.js +96 -0
- package/dist/builtins/games/trek/lrscan.js.map +1 -0
- package/dist/builtins/games/trek/main.d.ts +24 -0
- package/dist/builtins/games/trek/main.js +37 -0
- package/dist/builtins/games/trek/main.js.map +1 -0
- package/dist/builtins/games/trek/move.d.ts +3 -0
- package/dist/builtins/games/trek/move.js +229 -0
- package/dist/builtins/games/trek/move.js.map +1 -0
- package/dist/builtins/games/trek/nova.d.ts +3 -0
- package/dist/builtins/games/trek/nova.js +135 -0
- package/dist/builtins/games/trek/nova.js.map +1 -0
- package/dist/builtins/games/trek/out.d.ts +3 -0
- package/dist/builtins/games/trek/out.js +52 -0
- package/dist/builtins/games/trek/out.js.map +1 -0
- package/dist/builtins/games/trek/phaser.d.ts +3 -0
- package/dist/builtins/games/trek/phaser.js +341 -0
- package/dist/builtins/games/trek/phaser.js.map +1 -0
- package/dist/builtins/games/trek/play.d.ts +3 -0
- package/dist/builtins/games/trek/play.js +112 -0
- package/dist/builtins/games/trek/play.js.map +1 -0
- package/dist/builtins/games/trek/printf.d.ts +31 -0
- package/dist/builtins/games/trek/printf.js +157 -0
- package/dist/builtins/games/trek/printf.js.map +1 -0
- package/dist/builtins/games/trek/ram.d.ts +3 -0
- package/dist/builtins/games/trek/ram.js +97 -0
- package/dist/builtins/games/trek/ram.js.map +1 -0
- package/dist/builtins/games/trek/rand.d.ts +29 -0
- package/dist/builtins/games/trek/rand.js +109 -0
- package/dist/builtins/games/trek/rand.js.map +1 -0
- package/dist/builtins/games/trek/rest.d.ts +3 -0
- package/dist/builtins/games/trek/rest.js +76 -0
- package/dist/builtins/games/trek/rest.js.map +1 -0
- package/dist/builtins/games/trek/schedule.d.ts +23 -0
- package/dist/builtins/games/trek/schedule.js +55 -0
- package/dist/builtins/games/trek/schedule.js.map +1 -0
- package/dist/builtins/games/trek/score.d.ts +8 -0
- package/dist/builtins/games/trek/score.js +61 -0
- package/dist/builtins/games/trek/score.js.map +1 -0
- package/dist/builtins/games/trek/setup.d.ts +18 -0
- package/dist/builtins/games/trek/setup.js +251 -0
- package/dist/builtins/games/trek/setup.js.map +1 -0
- package/dist/builtins/games/trek/setwarp.d.ts +8 -0
- package/dist/builtins/games/trek/setwarp.js +28 -0
- package/dist/builtins/games/trek/setwarp.js.map +1 -0
- package/dist/builtins/games/trek/shield.d.ts +3 -0
- package/dist/builtins/games/trek/shield.js +139 -0
- package/dist/builtins/games/trek/shield.js.map +1 -0
- package/dist/builtins/games/trek/snova.d.ts +3 -0
- package/dist/builtins/games/trek/snova.js +156 -0
- package/dist/builtins/games/trek/snova.js.map +1 -0
- package/dist/builtins/games/trek/srscan.d.ts +3 -0
- package/dist/builtins/games/trek/srscan.js +176 -0
- package/dist/builtins/games/trek/srscan.js.map +1 -0
- package/dist/builtins/games/trek/state.d.ts +190 -0
- package/dist/builtins/games/trek/state.js +84 -0
- package/dist/builtins/games/trek/state.js.map +1 -0
- package/dist/builtins/games/trek/style.d.ts +7 -0
- package/dist/builtins/games/trek/style.js +93 -0
- package/dist/builtins/games/trek/style.js.map +1 -0
- package/dist/builtins/games/trek/systemname.d.ts +10 -0
- package/dist/builtins/games/trek/systemname.js +12 -0
- package/dist/builtins/games/trek/systemname.js.map +1 -0
- package/dist/builtins/games/trek/torped.d.ts +3 -0
- package/dist/builtins/games/trek/torped.js +232 -0
- package/dist/builtins/games/trek/torped.js.map +1 -0
- package/dist/builtins/games/trek/trek.d.ts +27 -0
- package/dist/builtins/games/trek/trek.js +96 -0
- package/dist/builtins/games/trek/trek.js.map +1 -0
- package/dist/builtins/games/trek/visual.d.ts +3 -0
- package/dist/builtins/games/trek/visual.js +87 -0
- package/dist/builtins/games/trek/visual.js.map +1 -0
- package/dist/builtins/games/trek/warp.d.ts +5 -0
- package/dist/builtins/games/trek/warp.js +173 -0
- package/dist/builtins/games/trek/warp.js.map +1 -0
- package/dist/builtins/games/trek/win.d.ts +12 -0
- package/dist/builtins/games/trek/win.js +34 -0
- package/dist/builtins/games/trek/win.js.map +1 -0
- package/dist/builtins/help.js +6 -0
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/net/query.js +11 -2
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/res/play.js +9 -0
- package/dist/builtins/res/play.js.map +1 -1
- package/dist/core/cancellation.d.ts +7 -0
- package/dist/core/cancellation.js +18 -0
- package/dist/core/cancellation.js.map +1 -1
- package/dist/core/commandOrder.js +3 -3
- package/dist/core/commandOrder.js.map +1 -1
- package/dist/core/coreCommands.js +3 -0
- package/dist/core/coreCommands.js.map +1 -1
- package/dist/core/engine.d.ts +16 -0
- package/dist/core/engine.js +12 -2
- package/dist/core/engine.js.map +1 -1
- package/dist/core/listing.js +9 -0
- package/dist/core/listing.js.map +1 -1
- package/dist/core/turn.d.ts +50 -0
- package/dist/core/turn.js +60 -0
- package/dist/core/turn.js.map +1 -0
- package/dist/notes.json +1 -1
- package/dist/session/recorder.d.ts +0 -15
- package/dist/session/recorder.js +9 -0
- package/dist/session/recorder.js.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { EOF } from './io.js';
|
|
2
|
+
/** get integer parameter */
|
|
3
|
+
export async function getintpar(t, s) {
|
|
4
|
+
while (true) {
|
|
5
|
+
if ((await testnl(t)) && s)
|
|
6
|
+
t.io.printf('%s: ', s);
|
|
7
|
+
const read = await t.io.scanInt();
|
|
8
|
+
if (read.count < 0)
|
|
9
|
+
t.io.exit(1);
|
|
10
|
+
if (read.count > 0 && (await testterm(t)))
|
|
11
|
+
return read.value;
|
|
12
|
+
t.io.printf('invalid input; please enter an integer\n');
|
|
13
|
+
await skiptonl(t, 0);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** get floating parameter */
|
|
17
|
+
export async function getfltpar(t, s) {
|
|
18
|
+
while (true) {
|
|
19
|
+
if ((await testnl(t)) && s)
|
|
20
|
+
t.io.printf('%s: ', s);
|
|
21
|
+
const read = await t.io.scanDouble();
|
|
22
|
+
if (read.count < 0)
|
|
23
|
+
t.io.exit(1);
|
|
24
|
+
if (read.count > 0 && (await testterm(t)))
|
|
25
|
+
return read.value;
|
|
26
|
+
t.io.printf('invalid input; please enter a double\n');
|
|
27
|
+
await skiptonl(t, 0);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** The yes/no table. */
|
|
31
|
+
const Yntab = [
|
|
32
|
+
{ abbrev: 'y', full: 'es', value: null, value2: 1 },
|
|
33
|
+
{ abbrev: 'n', full: 'o', value: null, value2: 0 },
|
|
34
|
+
];
|
|
35
|
+
/** get yes/no parameter */
|
|
36
|
+
export async function getynpar(t, s) {
|
|
37
|
+
const r = await getcodpar(t, s, Yntab);
|
|
38
|
+
return r.value2;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* get coded parameter: a word matched against a table by its abbreviation
|
|
42
|
+
* and as much of the rest as was typed; `?` lists the table.
|
|
43
|
+
*/
|
|
44
|
+
export async function getcodpar(t, s, tab) {
|
|
45
|
+
let flag = false;
|
|
46
|
+
while (true) {
|
|
47
|
+
const f = await testnl(t);
|
|
48
|
+
flag = flag || f;
|
|
49
|
+
if (flag)
|
|
50
|
+
t.io.printf('%s: ', s);
|
|
51
|
+
if (f) {
|
|
52
|
+
// throw out the newline
|
|
53
|
+
await t.io.getchar();
|
|
54
|
+
}
|
|
55
|
+
await t.io.scanSkip(' \t;');
|
|
56
|
+
const read = await t.io.scanUntil(' \t;\n', 99);
|
|
57
|
+
if (read.count < 0)
|
|
58
|
+
t.io.exit(1);
|
|
59
|
+
if (read.count === 0)
|
|
60
|
+
continue;
|
|
61
|
+
flag = true;
|
|
62
|
+
const input = read.value;
|
|
63
|
+
// if command list, print four per line
|
|
64
|
+
if (input === '?') {
|
|
65
|
+
let c = 4;
|
|
66
|
+
for (const r of tab) {
|
|
67
|
+
t.io.printf('%14.14s', r.abbrev + r.full);
|
|
68
|
+
if (--c > 0)
|
|
69
|
+
continue;
|
|
70
|
+
c = 4;
|
|
71
|
+
t.io.printf('\n');
|
|
72
|
+
}
|
|
73
|
+
if (c !== 4)
|
|
74
|
+
t.io.printf('\n');
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// search for in table
|
|
78
|
+
const found = tab.find((r) => {
|
|
79
|
+
if (!input.startsWith(r.abbrev))
|
|
80
|
+
return false;
|
|
81
|
+
return rest_match(input.slice(r.abbrev.length), r.full);
|
|
82
|
+
});
|
|
83
|
+
// check for not found
|
|
84
|
+
if (found === undefined) {
|
|
85
|
+
t.io.printf('invalid input; ? for valid inputs\n');
|
|
86
|
+
await skiptonl(t, 0);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
return found;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The C's match of what follows the abbreviation: characters compared
|
|
95
|
+
* while both last; a match when either runs out first (so a word typed
|
|
96
|
+
* past the table's spelling still matches, as in the original).
|
|
97
|
+
*/
|
|
98
|
+
function rest_match(rest, full) {
|
|
99
|
+
let i = 0;
|
|
100
|
+
while (i < rest.length && i < full.length) {
|
|
101
|
+
if (rest[i] !== full[i])
|
|
102
|
+
return false;
|
|
103
|
+
i++;
|
|
104
|
+
}
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
/** get string parameter: up to l characters, ended by any of t (default white space and ;). */
|
|
108
|
+
export async function getstrpar(t, s, l, terminators) {
|
|
109
|
+
const stop = terminators ?? ' \t\n;';
|
|
110
|
+
while (true) {
|
|
111
|
+
const f = await testnl(t);
|
|
112
|
+
if (f && s)
|
|
113
|
+
t.io.printf('%s: ', s);
|
|
114
|
+
if (f)
|
|
115
|
+
await t.io.getchar();
|
|
116
|
+
await t.io.scanSkip('\t ;');
|
|
117
|
+
const read = await t.io.scanUntil(stop, l);
|
|
118
|
+
if (read.count < 0)
|
|
119
|
+
t.io.exit(1);
|
|
120
|
+
if (read.count !== 0)
|
|
121
|
+
return read.value;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/** test if newline is next valid character */
|
|
125
|
+
export async function testnl(t) {
|
|
126
|
+
let c;
|
|
127
|
+
while ((c = await t.io.getchar()) !== 10) {
|
|
128
|
+
if (c === EOF)
|
|
129
|
+
t.io.exit(1);
|
|
130
|
+
if ((c >= 48 && c <= 57) || c === 46 || c === 33 || (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || c === 45) {
|
|
131
|
+
t.io.ungetc(c);
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
t.io.ungetc(c);
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
/** scan for newline */
|
|
139
|
+
export async function skiptonl(t, c) {
|
|
140
|
+
while (c !== 10) {
|
|
141
|
+
c = await t.io.getchar();
|
|
142
|
+
if (c === EOF)
|
|
143
|
+
t.io.exit(1);
|
|
144
|
+
}
|
|
145
|
+
t.io.ungetc(10);
|
|
146
|
+
}
|
|
147
|
+
/** test for valid terminator */
|
|
148
|
+
async function testterm(t) {
|
|
149
|
+
const c = await t.io.getchar();
|
|
150
|
+
if (c === EOF)
|
|
151
|
+
t.io.exit(1);
|
|
152
|
+
if (c === 46)
|
|
153
|
+
return false;
|
|
154
|
+
if (c === 10 || c === 59)
|
|
155
|
+
t.io.ungetc(c);
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* TEST FOR SPECIFIED DELIMITER: the input is scanned for the delimiter;
|
|
160
|
+
* found, it is thrown away and true is returned; not found, false.
|
|
161
|
+
*/
|
|
162
|
+
export async function readdelim(t, d) {
|
|
163
|
+
let c;
|
|
164
|
+
while ((c = await t.io.getchar()) !== EOF) {
|
|
165
|
+
if (c === d)
|
|
166
|
+
return true;
|
|
167
|
+
if (c === 32)
|
|
168
|
+
continue;
|
|
169
|
+
t.io.ungetc(c);
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
return t.io.exit(1);
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=getpar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getpar.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/getpar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* help.ts: a TypeScript port of BSD trek(6), from help.c.
|
|
3
|
+
* Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): help.c 1.13 2009/08/12.
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 1980, 1993
|
|
6
|
+
* The Regents of the University of California. All rights reserved.
|
|
7
|
+
*
|
|
8
|
+
* Redistribution and use in source and binary forms, with or without
|
|
9
|
+
* modification, are permitted provided that the following conditions
|
|
10
|
+
* are met:
|
|
11
|
+
* 1. Redistributions of source code must retain the above copyright
|
|
12
|
+
* notice, this list of conditions and the following disclaimer.
|
|
13
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
|
14
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
15
|
+
* documentation and/or other materials provided with the distribution.
|
|
16
|
+
* 3. Neither the name of the University nor the names of its contributors
|
|
17
|
+
* may be used to endorse or promote products derived from this software
|
|
18
|
+
* without specific prior written permission.
|
|
19
|
+
*
|
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
21
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
24
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
25
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
26
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
27
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
28
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
29
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
30
|
+
* SUCH DAMAGE.
|
|
31
|
+
*
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* @file Calling a starbase for help: the closest one tries three times to
|
|
35
|
+
* rematerialize the ship beside it.
|
|
36
|
+
*
|
|
37
|
+
* @module
|
|
38
|
+
*/
|
|
39
|
+
import { DOCKED, EMPTY, L_NOHELP, NSECTS, SSRADIO, TOOLARGE } from './consts.js';
|
|
40
|
+
import { compkldist } from './compkl.js';
|
|
41
|
+
import { damaged } from './damaged.js';
|
|
42
|
+
import { dock } from './dock.js';
|
|
43
|
+
import { initquad } from './initquad.js';
|
|
44
|
+
import { lose } from './lose.js';
|
|
45
|
+
import { out } from './out.js';
|
|
46
|
+
import { franf, ranf } from './rand.js';
|
|
47
|
+
/*
|
|
48
|
+
** call starbase for help
|
|
49
|
+
**
|
|
50
|
+
** First, the closest starbase is selected. If there is a
|
|
51
|
+
** a starbase in your own quadrant, you are in good shape.
|
|
52
|
+
** This distance takes quadrant distances into account only.
|
|
53
|
+
**
|
|
54
|
+
** A magic number is computed based on the distance which acts
|
|
55
|
+
** as the probability that you will be rematerialized. You
|
|
56
|
+
** get three tries.
|
|
57
|
+
**
|
|
58
|
+
** When it is determined that you should be able to be remater-
|
|
59
|
+
** ialized (i.e., when the probability thing mentioned above
|
|
60
|
+
** comes up positive), you are put into that quadrant (anywhere).
|
|
61
|
+
** Then, we try to see if there is a spot adjacent to the star-
|
|
62
|
+
** base. If not, you can't be rematerialized!!! Otherwise,
|
|
63
|
+
** it drops you there. It only tries five times to find a spot
|
|
64
|
+
** to drop you. After that, it's your problem.
|
|
65
|
+
*/
|
|
66
|
+
const Cntvect = ['first', 'second', 'third'];
|
|
67
|
+
/** call starbase for help */
|
|
68
|
+
export async function help(t, _v) {
|
|
69
|
+
let i;
|
|
70
|
+
let dist;
|
|
71
|
+
let x;
|
|
72
|
+
let dx = 0;
|
|
73
|
+
let dy = 0;
|
|
74
|
+
let j;
|
|
75
|
+
let l = 0;
|
|
76
|
+
/* check to see if calling for help is reasonable ... */
|
|
77
|
+
if (t.s.Ship.cond === DOCKED) {
|
|
78
|
+
t.io.printf("Uhura: But Captain, we're already docked\n");
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
/* or possible */
|
|
82
|
+
if (damaged(t, SSRADIO)) {
|
|
83
|
+
await out(t, SSRADIO);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (t.s.Now.bases <= 0) {
|
|
87
|
+
t.io.printf("Uhura: I'm not getting any response from starbase\n");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
/* tut tut, there goes the score */
|
|
91
|
+
t.s.Game.helps += 1;
|
|
92
|
+
/* find the closest base */
|
|
93
|
+
dist = TOOLARGE;
|
|
94
|
+
if (t.s.Quad[t.s.Ship.quadx][t.s.Ship.quady].bases <= 0) {
|
|
95
|
+
/* there isn't one in this quadrant */
|
|
96
|
+
for (i = 0; i < t.s.Now.bases; i++) {
|
|
97
|
+
/* compute distance */
|
|
98
|
+
const base = t.s.Now.base[i];
|
|
99
|
+
dx = base.x - t.s.Ship.quadx;
|
|
100
|
+
dy = base.y - t.s.Ship.quady;
|
|
101
|
+
x = dx * dx + dy * dy;
|
|
102
|
+
x = Math.sqrt(x);
|
|
103
|
+
/* see if better than what we already have */
|
|
104
|
+
if (x < dist) {
|
|
105
|
+
dist = x;
|
|
106
|
+
l = i;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/* go to that quadrant */
|
|
110
|
+
const best = t.s.Now.base[l];
|
|
111
|
+
t.s.Ship.quadx = best.x;
|
|
112
|
+
t.s.Ship.quady = best.y;
|
|
113
|
+
await initquad(t, 1);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
dist = 0.0;
|
|
117
|
+
}
|
|
118
|
+
/* dematerialize the Enterprise */
|
|
119
|
+
t.s.Sect[t.s.Ship.sectx][t.s.Ship.secty] = EMPTY;
|
|
120
|
+
t.io.printf('Starbase in %d,%d responds\n', t.s.Ship.quadx, t.s.Ship.quady);
|
|
121
|
+
/* this next thing acts as a probability that it will work */
|
|
122
|
+
x = Math.pow(1.0 - Math.pow(0.94, dist), 0.3333333);
|
|
123
|
+
/* attempt to rematerialize */
|
|
124
|
+
for (i = 0; i < 3; i++) {
|
|
125
|
+
await t.io.sleep(2);
|
|
126
|
+
t.io.printf('%s attempt to rematerialize ', Cntvect[i]);
|
|
127
|
+
if (franf(t.rnd) > x) {
|
|
128
|
+
/* ok, that's good. let's see if we can set her down */
|
|
129
|
+
for (j = 0; j < 5; j++) {
|
|
130
|
+
dx = t.s.Etc.starbase.x + ranf(t.rnd, 3) - 1;
|
|
131
|
+
if (dx < 0 || dx >= NSECTS)
|
|
132
|
+
continue;
|
|
133
|
+
dy = t.s.Etc.starbase.y + ranf(t.rnd, 3) - 1;
|
|
134
|
+
if (dy < 0 || dy >= NSECTS || t.s.Sect[dx][dy] !== EMPTY)
|
|
135
|
+
continue;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
if (j < 5) {
|
|
139
|
+
/* found an empty spot */
|
|
140
|
+
t.io.printf('succeeds\n');
|
|
141
|
+
t.s.Ship.sectx = dx;
|
|
142
|
+
t.s.Ship.secty = dy;
|
|
143
|
+
t.s.Sect[dx][dy] = t.s.Ship.ship;
|
|
144
|
+
await dock(t, 0);
|
|
145
|
+
compkldist(t, 0);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
/* the starbase must have been surrounded */
|
|
149
|
+
}
|
|
150
|
+
t.io.printf('fails\n');
|
|
151
|
+
}
|
|
152
|
+
/* one, two, three strikes, you're out */
|
|
153
|
+
await lose(t, L_NOHELP);
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/help.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* impulse.ts: a TypeScript port of BSD trek(6), from impulse.c.
|
|
3
|
+
* Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): impulse.c 1.10 2009/05/24.
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 1980, 1993
|
|
6
|
+
* The Regents of the University of California. All rights reserved.
|
|
7
|
+
*
|
|
8
|
+
* Redistribution and use in source and binary forms, with or without
|
|
9
|
+
* modification, are permitted provided that the following conditions
|
|
10
|
+
* are met:
|
|
11
|
+
* 1. Redistributions of source code must retain the above copyright
|
|
12
|
+
* notice, this list of conditions and the following disclaimer.
|
|
13
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
|
14
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
15
|
+
* documentation and/or other materials provided with the distribution.
|
|
16
|
+
* 3. Neither the name of the University nor the names of its contributors
|
|
17
|
+
* may be used to endorse or promote products derived from this software
|
|
18
|
+
* without specific prior written permission.
|
|
19
|
+
*
|
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
21
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
24
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
25
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
26
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
27
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
28
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
29
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
30
|
+
* SUCH DAMAGE.
|
|
31
|
+
*
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* @file Moving under impulse power.
|
|
35
|
+
*
|
|
36
|
+
* @module
|
|
37
|
+
*/
|
|
38
|
+
import { DOCKED, IMPULSE } from './consts.js';
|
|
39
|
+
import { damaged } from './damaged.js';
|
|
40
|
+
import { getcodi } from './getcodi.js';
|
|
41
|
+
import { getynpar } from './getpar.js';
|
|
42
|
+
import { move } from './move.js';
|
|
43
|
+
import { out } from './out.js';
|
|
44
|
+
/**
|
|
45
|
+
** move under impulse power
|
|
46
|
+
**/
|
|
47
|
+
/** The impulse command. */
|
|
48
|
+
export async function impulse(t, _v) {
|
|
49
|
+
const { Ship, Move } = t.s;
|
|
50
|
+
let percent;
|
|
51
|
+
if (Ship.cond === DOCKED) {
|
|
52
|
+
t.io.printf('Scotty: Sorry captain, but we are still docked.\n');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (damaged(t, IMPULSE)) {
|
|
56
|
+
await out(t, IMPULSE);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const codi = await getcodi(t);
|
|
60
|
+
if (codi === null)
|
|
61
|
+
return;
|
|
62
|
+
const course = codi.co;
|
|
63
|
+
const dist = codi.value;
|
|
64
|
+
// power is an int, as is the energy: 100 * power / energy divides as ints
|
|
65
|
+
const power = Math.trunc(20 + 100 * dist);
|
|
66
|
+
percent = Math.trunc(Math.trunc(100 * power / Ship.energy) + 0.5);
|
|
67
|
+
if (percent >= 85) {
|
|
68
|
+
t.io.printf('Scotty: That would consume %d%% of our remaining ' +
|
|
69
|
+
'energy.\n', percent);
|
|
70
|
+
if (!(await getynpar(t, 'Are you sure that is wise')))
|
|
71
|
+
return;
|
|
72
|
+
t.io.printf('Aye aye, sir\n');
|
|
73
|
+
}
|
|
74
|
+
const time = dist / 0.095;
|
|
75
|
+
percent = Math.trunc(100 * time / t.s.Now.time + 0.5);
|
|
76
|
+
if (percent >= 85) {
|
|
77
|
+
t.io.printf('Spock: That would take %d%% of our remaining time.\n', percent);
|
|
78
|
+
if (!(await getynpar(t, 'Are you sure that is wise')))
|
|
79
|
+
return;
|
|
80
|
+
t.io.printf("(He's finally gone mad)\n");
|
|
81
|
+
}
|
|
82
|
+
Move.time = await move(t, 0, course, time, 0.095);
|
|
83
|
+
Ship.energy = Math.trunc(Ship.energy - (20 + 100 * Move.time * 0.095));
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=impulse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impulse.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/impulse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B;;IAEI;AAEJ,2BAA2B;AAC3B,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,CAAO,EAAE,EAAU;IAC/C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,OAAe,CAAC;IAEpB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAyC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO;IAC1B,MAAM,MAAM,GAAW,IAAI,CAAC,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC;IAChC,0EAA0E;IAC1E,MAAM,KAAK,GAAW,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;IAClD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;IAClE,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;QAClB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,mDAAmD;YAC7D,WAAW,EACb,OAAO,CAAC,CAAC;QACT,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC;YAAE,OAAO;QAC9D,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,IAAI,GAAW,IAAI,GAAG,KAAK,CAAC;IAClC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACtD,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;QAClB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,sDAAsD,EAChE,OAAO,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC;YAAE,OAAO;QAC9D,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Entering a quadrant: its contents laid out at random from what the
|
|
3
|
+
* Quad matrix holds, the starship in its fixed sector; and the choice of
|
|
4
|
+
* an empty sector.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import type { Trek } from './context.js';
|
|
9
|
+
import type { XY } from './state.js';
|
|
10
|
+
/**
|
|
11
|
+
* Paramize Quadrant Upon Entering. With Klingons present the captain is
|
|
12
|
+
* told the condition is RED and offered the shields. The flag `f`
|
|
13
|
+
* disables that check, for when you are about to be docked.
|
|
14
|
+
*/
|
|
15
|
+
export declare function initquad(t: Trek, f: number): Promise<void>;
|
|
16
|
+
/** An empty sector, chosen at random. */
|
|
17
|
+
export declare function sector(t: Trek): XY;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { BASE, COMPUTER, EMPTY, HOLE, INHABIT, KLINGON, NSECTS, RED, STAR } from './consts.js';
|
|
2
|
+
import { compkldist } from './compkl.js';
|
|
3
|
+
import { damaged } from './damaged.js';
|
|
4
|
+
import { ranf } from './rand.js';
|
|
5
|
+
import { shield } from './shield.js';
|
|
6
|
+
/**
|
|
7
|
+
* Paramize Quadrant Upon Entering. With Klingons present the captain is
|
|
8
|
+
* told the condition is RED and offered the shields. The flag `f`
|
|
9
|
+
* disables that check, for when you are about to be docked.
|
|
10
|
+
*/
|
|
11
|
+
export async function initquad(t, f) {
|
|
12
|
+
const q = t.s.Quad[t.s.Ship.quadx][t.s.Ship.quady];
|
|
13
|
+
// ignored supernova'ed quadrants (this is checked again later anyway
|
|
14
|
+
if (q.stars < 0)
|
|
15
|
+
return;
|
|
16
|
+
t.s.Etc.nkling = q.klings;
|
|
17
|
+
const nbases = q.bases;
|
|
18
|
+
let nstars = q.stars;
|
|
19
|
+
const nholes = q.holes;
|
|
20
|
+
// have we blundered into a battle zone w/ shields down?
|
|
21
|
+
if (t.s.Etc.nkling > 0 && !f) {
|
|
22
|
+
t.io.printf('Condition RED\n');
|
|
23
|
+
t.s.Ship.cond = RED;
|
|
24
|
+
if (!damaged(t, COMPUTER))
|
|
25
|
+
await shield(t, 1);
|
|
26
|
+
}
|
|
27
|
+
// clear out the quadrant
|
|
28
|
+
for (let i = 0; i < NSECTS; i++)
|
|
29
|
+
for (let j = 0; j < NSECTS; j++)
|
|
30
|
+
t.s.Sect[i][j] = EMPTY;
|
|
31
|
+
// initialize Enterprise
|
|
32
|
+
t.s.Sect[t.s.Ship.sectx][t.s.Ship.secty] = t.s.Ship.ship;
|
|
33
|
+
// initialize Klingons
|
|
34
|
+
for (let i = 0; i < t.s.Etc.nkling; i++) {
|
|
35
|
+
const r = sector(t);
|
|
36
|
+
t.s.Sect[r.x][r.y] = KLINGON;
|
|
37
|
+
const k = t.s.Etc.klingon[i];
|
|
38
|
+
k.x = r.x;
|
|
39
|
+
k.y = r.y;
|
|
40
|
+
k.power = t.s.Param.klingpwr;
|
|
41
|
+
k.srndreq = 0;
|
|
42
|
+
}
|
|
43
|
+
compkldist(t, 1);
|
|
44
|
+
// initialize star base
|
|
45
|
+
if (nbases > 0) {
|
|
46
|
+
const r = sector(t);
|
|
47
|
+
t.s.Sect[r.x][r.y] = BASE;
|
|
48
|
+
t.s.Etc.starbase.x = r.x;
|
|
49
|
+
t.s.Etc.starbase.y = r.y;
|
|
50
|
+
}
|
|
51
|
+
// initialize inhabited starsystem
|
|
52
|
+
if (q.qsystemname !== 0) {
|
|
53
|
+
const r = sector(t);
|
|
54
|
+
t.s.Sect[r.x][r.y] = INHABIT;
|
|
55
|
+
nstars -= 1;
|
|
56
|
+
}
|
|
57
|
+
// initialize black holes
|
|
58
|
+
for (let i = 0; i < nholes; i++) {
|
|
59
|
+
const r = sector(t);
|
|
60
|
+
t.s.Sect[r.x][r.y] = HOLE;
|
|
61
|
+
}
|
|
62
|
+
// initialize stars
|
|
63
|
+
for (let i = 0; i < nstars; i++) {
|
|
64
|
+
const r = sector(t);
|
|
65
|
+
t.s.Sect[r.x][r.y] = STAR;
|
|
66
|
+
}
|
|
67
|
+
t.s.Move.newquad = 1;
|
|
68
|
+
}
|
|
69
|
+
/** An empty sector, chosen at random. */
|
|
70
|
+
export function sector(t) {
|
|
71
|
+
let i;
|
|
72
|
+
let j;
|
|
73
|
+
do {
|
|
74
|
+
i = ranf(t.rnd, NSECTS);
|
|
75
|
+
j = ranf(t.rnd, NSECTS);
|
|
76
|
+
} while (t.s.Sect[i][j] !== EMPTY);
|
|
77
|
+
return { x: i, y: j };
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=initquad.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initquad.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/initquad.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file trek's terminal: printf out, a character stream in.
|
|
3
|
+
*
|
|
4
|
+
* The C reads its input a character at a time (getchar, ungetc, scanf),
|
|
5
|
+
* which is what lets a player type ahead — `move 2 45 3` on one line — and
|
|
6
|
+
* what makes it prompt only when the next character is a newline. This is
|
|
7
|
+
* that stream over a surface that answers questions a line at a time: when
|
|
8
|
+
* the stream runs dry, the partial line printed so far (`Command: `) is the
|
|
9
|
+
* question asked, and the answer, with its newline, is what getchar reads.
|
|
10
|
+
*
|
|
11
|
+
* exit() and longjmp() are thrown, as TrekExit and TrekReset, and caught
|
|
12
|
+
* where the C's main() and setjmp() stood. Written for the port.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import { type PrintfArg } from './printf.js';
|
|
17
|
+
/** exit(code): the game is over and the command returns. */
|
|
18
|
+
export declare class TrekExit extends Error {
|
|
19
|
+
readonly code: number;
|
|
20
|
+
/** @param code - The exit status. */
|
|
21
|
+
constructor(code: number);
|
|
22
|
+
}
|
|
23
|
+
/** longjmp(env, 1): back to main's "Another game" question. */
|
|
24
|
+
export declare class TrekReset extends Error {
|
|
25
|
+
constructor();
|
|
26
|
+
}
|
|
27
|
+
/** What the terminal is wired to. */
|
|
28
|
+
export interface TrekTerminal {
|
|
29
|
+
/** Writes text out (whole lines, or the rest at the end). */
|
|
30
|
+
write(text: string): void;
|
|
31
|
+
/** Asks for a line with a prompt; null at end of input. */
|
|
32
|
+
ask(prompt: string): Promise<string | null>;
|
|
33
|
+
/** Waits a number of seconds (sleep()); a test passes a no-op. */
|
|
34
|
+
sleep(seconds: number): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
/** End of input, as getchar() returns it. */
|
|
37
|
+
export declare const EOF: number;
|
|
38
|
+
/** The terminal the game reads and writes. */
|
|
39
|
+
export declare class TrekIO {
|
|
40
|
+
private readonly terminal;
|
|
41
|
+
/** Printed, not yet written out (the tail is the next prompt). */
|
|
42
|
+
private pending;
|
|
43
|
+
/** Characters typed, not yet read. */
|
|
44
|
+
private input;
|
|
45
|
+
/** @param terminal - What it is wired to. */
|
|
46
|
+
constructor(terminal: TrekTerminal);
|
|
47
|
+
/** printf(format, ...). */
|
|
48
|
+
printf(format: string, ...args: PrintfArg[]): void;
|
|
49
|
+
/** putchar(c). */
|
|
50
|
+
putchar(c: string | number): void;
|
|
51
|
+
/** Writes out every complete line printed; the partial tail waits. */
|
|
52
|
+
private lines_flush;
|
|
53
|
+
/** Writes out everything printed, the partial tail too (fflush). */
|
|
54
|
+
fflush(): void;
|
|
55
|
+
/** getchar(): the next character typed, asking when none is waiting. */
|
|
56
|
+
getchar(): Promise<number>;
|
|
57
|
+
/** ungetc(c): puts a character back to be read next. */
|
|
58
|
+
ungetc(c: number): void;
|
|
59
|
+
/** sleep(seconds). */
|
|
60
|
+
sleep(seconds: number): Promise<void>;
|
|
61
|
+
/** exit(code). */
|
|
62
|
+
exit(code: number): never;
|
|
63
|
+
/** Skips white space, as a scanf numeric conversion does; returns the next character, unread. */
|
|
64
|
+
private space_skip;
|
|
65
|
+
/**
|
|
66
|
+
* scanf("%d"): skips white space and reads an integer.
|
|
67
|
+
*
|
|
68
|
+
* @returns The count (1 read, 0 no match, -1 end of input) and the value.
|
|
69
|
+
*/
|
|
70
|
+
scanInt(): Promise<{
|
|
71
|
+
count: number;
|
|
72
|
+
value: number;
|
|
73
|
+
}>;
|
|
74
|
+
/**
|
|
75
|
+
* scanf("%lf"): skips white space and reads a decimal number.
|
|
76
|
+
*
|
|
77
|
+
* @returns The count (1 read, 0 no match, -1 end of input) and the value.
|
|
78
|
+
*/
|
|
79
|
+
scanDouble(): Promise<{
|
|
80
|
+
count: number;
|
|
81
|
+
value: number;
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* scanf("%*[set]"): reads and discards characters in the set (no white
|
|
85
|
+
* space skipped first).
|
|
86
|
+
*
|
|
87
|
+
* @param set - The characters.
|
|
88
|
+
* @returns -1 at end of input before any, else 0.
|
|
89
|
+
*/
|
|
90
|
+
scanSkip(set: string): Promise<number>;
|
|
91
|
+
/**
|
|
92
|
+
* scanf("%N[^set]"): reads up to N characters not in the set.
|
|
93
|
+
*
|
|
94
|
+
* @param stop - The characters that end it.
|
|
95
|
+
* @param max - At most this many.
|
|
96
|
+
* @returns The count (1 read, 0 none, -1 end of input) and the text.
|
|
97
|
+
*/
|
|
98
|
+
scanUntil(stop: string, max: number): Promise<{
|
|
99
|
+
count: number;
|
|
100
|
+
value: string;
|
|
101
|
+
}>;
|
|
102
|
+
}
|