RttyCreate:
PUBLIC PROC [nsp: NetworkStreamPair, args:
ROPE, session: Session, clientData:
REF]
RETURNS [instance: BridgeRTTY.PrivateInstance] ~ {
transportClass: ATOM;
transportName: Rope.ROPE;
banner: Rope.ROPE;
Append:
PROC [name:
ROPE, proc: Menus.MenuProc, doc:
ROPE] ~ {
Menus.AppendMenuEntry[instance.typescript.menu, Menus.CreateEntry[name, proc, instance, doc]]
};
transportClass ¬ NetworkStream.GetStreamInfo[nsp.in].protocolFamily;
transportName ¬ Rope.Cat[" (", Convert.RopeFromAtom[transportClass], ")"];
banner ¬ Rope.Cat[RTTY, ": ", BridgeExec.SessionNameFromSession[session: session], transportName];
instance ¬ NEW [BridgeRTTY.PrivateInstanceObject ¬ [args~args, nsp~nsp, session~session, caveState~dead]];
instance.typescript ¬ TypeScript.Create[info: [
tipTable: tipTable,
name: banner,
icon: rttyIcon,
iconic: FALSE, -- open the viewer at the beginning --
label: BridgeExec.SessionNameFromSession[session: session],
guardDestroy: FALSE,
props: Atom.PutPropOnList[NIL, RTTYPROP, instance]]];
Append["Disconnect!", MyDisconnect, "Close Ethernet connection"];
Append["FlushLog!", MyFlushLog, "Flush Typescript to disk"];
Append["Interrupt!", MyInterrupt, "Try to expedite an interrupt"];
[] ¬ ViewerEvents.RegisterEventProc[proc: ViewerEventDestroyProc,
event: ViewerEvents.ViewerEvent.destroy, filter: instance.typescript, before: TRUE];
ViewerOps.AddProp[viewer: instance.typescript, prop:
InstanceProperty, val: instance];
IF UserProfile.Boolean["Bridge.RTTY.BackingFile",
TRUE]
THEN
[instance.in, instance.out] ¬ ViewerIO.CreateViewerStreams[RTTY, instance.typescript, RTTYLOG, FALSE]
ELSE [instance.in, instance.out] ¬ ViewerIO.CreateViewerStreams[RTTY, instance.typescript, NIL, FALSE];
EditedStream.SetEcho[instance.in, NIL];
TiogaOps.SetNodeStyle["ascii", TiogaOps.ViewerDoc[instance.typescript]];
TypeScript.ChangeLooks[instance.typescript, 'i];
TypeScript.ChangeLooks[instance.typescript, 'b];
TypeScript.ChangeLooks[instance.typescript, 't];
TypeScript.PutRope[instance.typescript, "Bridge RTTY\n"];
TypeScript.ChangeLooks[instance.typescript, 'T];
TypeScript.ChangeLooks[instance.typescript, 'B];
TypeScript.ChangeLooks[instance.typescript, 'I];
TypeScript.PutRope[instance.typescript, "\n"];
TypeScript.Flush[instance.typescript];
ChangeState[instance, starting];
instance.consumeUser ¬ FORK UserInput[instance, instance.in, instance.nsp];
instance.consumeService ¬ FORK ServiceOutput[instance, instance.nsp, instance.out];
instance.typescript.guardDestroy ¬ TRUE;
ViewerOps.PaintViewer[viewer: instance.typescript, hint: caption];
};