-- LTComSoftImplA.mesa - last edited
-- Bruce 21-Jun-83 18:11:24
-- JFung.pasa 29-Aug-84 11:12:11 / added tajoAtom
DIRECTORY
Atom USING [ATOM, MakeAtom],
-- CMsg USING [MsgNumber],
LTComSoftOps,
DESFace USING [Key],
Inline USING [LowHalf],
-- Msg USING [Argument, nullArg, Severity],
Process,
System USING [GetClockPulses],
TIP USING [CreateTable, globalTable, InvalidTable, PushLocal, Table];
LTComSoftImplA: PROGRAM
IMPORTS Atom, Inline, System, TIP
EXPORTS LTComSoftOps =
BEGIN
-- encryption stuff
key: PUBLIC DESFace.Key;
-- TIP stuff
abortAtom, lispToolAtom, diagnosticAtom, lispAtom, tajoAtom, userAtom: PUBLIC Atom.ATOM;
comTip: PUBLIC TIP.Table ← NIL;
MakeTIP: PROC = {
firstTime: BOOLEAN ← TRUE;
abortAtom ← Atom.MakeAtom["abortAtom"L];
lispToolAtom ← Atom.MakeAtom["lispToolAtom"L];
diagnosticAtom ← Atom.MakeAtom["diagnosticAtom"L];
lispAtom ← Atom.MakeAtom["lispAtom"L];
tajoAtom ← Atom.MakeAtom["tajoAtom"L];
userAtom ← Atom.MakeAtom["userAtom"L];
comTip ← TIP.CreateTable[
file: "SystemTools.TIP"L,
contents:
"--SystemTools.TIP
-- Version of Harmony
SELECT TRIGGER FROM
Adjust Down AND Point Down BEFORE 250 =>abortAtom;
Point Down AND Adjust Down BEFORE 250 =>abortAtom;
Adjust Down=>diagnosticAtom;
Point Down=>lispToolAtom;
Menu Down=>abortAtom;
USERABORT Down => lispAtom;
T Down => tajoAtom;
UNDO Down => userAtom;
ENDCASE..."L
!
TIP.InvalidTable =>
IF firstTime THEN {firstTime ← FALSE; RESUME }]};
-- random number generator
Random: PUBLIC PROC [high: CARDINAL] RETURNS [CARDINAL -- IN [0..high] -- ] =
{seed ← Word[]; RETURN[seed MOD (high + 1)]};
VectorSize: CARDINAL = 55;
seed: CARDINAL;
i1, i2: CARDINAL;
vector: ARRAY [0..VectorSize) OF CARDINAL ← [
031575B, 055455B, 147160B, 176745B, 173126B, 117426B, 033612B, 130620B,
054013B, 167672B, 070252B, 033100B, 015700B, 113523B, 170465B, 024344B,
175535B, 137325B, 126211B, 010207B, 173547B, 016071B, 056622B, 014433B,
113225B, 047553B, 103025B, 110174B, 000125B, 173304B, 076700B, 104042B,
135030B, 126234B, 175154B, 140123B, 167542B, 000405B, 035464B, 166537B,
050260B, 167655B, 123615B, 175164B, 172206B, 140365B, 074606B, 075656B,
176163B, 030027B, 022102B, 040051B, 154630B, 017144B, 073372B];
Word: PROC RETURNS [ret: CARDINAL] = {
ret ← vector[i1] ← vector[i1] + vector[i2];
IF (i1 ← i1 + 1) >= VectorSize THEN i1 ← 0;
IF (i2 ← i2 + 1) >= VectorSize THEN i2 ← 0};
InitRandom: PROC [seed: CARDINAL] = {
FOR i: CARDINAL IN [0..VectorSize) DO
vector[i] ← vector[i] + seed ENDLOOP;
i1 ← 0;
i2 ← 24};
-- message stuff
-- Fail: PUBLIC ERROR [
-- level: Msg.Severity, code: CMsg.MsgNumber, arg1: Msg.Argument ← Msg.nullArg]
-- = CODE;
StartTrap: PROC = {
InitRandom[Inline.LowHalf[System.GetClockPulses[]]];
MakeTIP[];
TIP.PushLocal[push: comTip, onto: TIP.globalTable[formSW]]};
StartTrap[];
END.