-- DiagnosticsImplA.mesa - edited by:
-- Poskanzer 12-Sep-83 17:11:55
-- Paul 17-Jul-84 17:51:29
DIRECTORY
ByeOps USING [ResumeBouncing, StopBouncing],
CH USING [zeroMaxLengthNames],
CHStubInternal USING [FindDomainAddr],
CommOnlineDiagnostics USING [PatternType, WordsInPacket],
DiagnosticsOps USING [
AppendServers, ConfirmIndex, Data, DataDisplayed, DataHandle, EchoUserTest,
FloppyCleanReadWriteHeads, FloppyCommandFileTest,
FloppyDisplayErrorLog, FloppyExerciser, FloppyFormatDiskette,
FloppyStandardTest, FloppyTest, Help, KeyboardAndMouseTest, LFDisplayTest,
Operation, PlotPattern, PlotScreen, PlotterType, PrintPattern, PutLine,
RS232CLoopBackTest, RS232LineType, SendCommand, StringIndex,
Tests, Two90Mode, Two90Pattern, Two90Test],
Format USING [HostNumber, NetworkNumber, StringProc],
FormSW USING [
AllocateItemDescriptor, BooleanItem, ClientItemsProcType, CommandItem,
Destroy, Display, DisplayItem, Enumerated, EnumeratedItem,
EnumeratedNotifyProcType, FindItem, ItemHandle, newLine,
nullIndex, NumberItem, ProcType, StringItem],
GreenFace USING [Command, Status],
Heap USING [systemZone],
Msg USING [FeedBack, SetWindow],
NetworkStream USING [AssignNetworkAddress],
OnlineDiagnostics USING [ErrorHandling, SectorLength],
Process USING [Detach],
Profile USING [GetDefaultDomain, GetDefaultOrganization, String],
RS232C USING [LineSpeed],
RS232CEnvironment USING [LineSpeed],
String USING [
AppendNumber, AppendString, AppendStringAndGrow, Copy, CopyToNewString],
System USING [NetworkAddress, switches],
Tool USING [Create, MakeFileSW, MakeFormSW, MakeSWsProc, UnusedLogName],
ToolWindow USING [Activate, Deactivate, TransitionProcType],
UserInput USING [CreatePeriodicNotify, PeriodicProcType],
UserTerminal USING [BlinkDisplay],
Window USING [GetChild, GetParent, Handle, rootWindow, Stack, ValidateTree],
WindowFont USING [FontHeight];
DiagnosticsImplA: MONITOR
IMPORTS
ByeOps, CH, CHStubInternal, DiagnosticsOps, Format, FormSW,
Heap, Msg, NetworkStream, Process, Profile, String, System, Tool,
ToolWindow, UserInput, UserTerminal, Window, WindowFont
EXPORTS DiagnosticsOps =
BEGIN
-- TYPEs
FormIndex: TYPE = {
help, start, cancel, addCommand, deleteCommand, test, floppyTest,
currOrganization, currDomain, thisEthernetID, thisProcessorID, listFS, listPS,
listMS, testEthernetID, testProcessorID, realFeedBack, dataPattern,
minPacketSize, maxPacketSize, waitResponse, delayBetween, displayServers,
lineType, lineSpeed, pattern, constant, doubleDensity, doubleSided,
sectorsPerTrack, sectorLength, errorHandling, operation, cmdFile, trackNumber,
startingSector, sectorCount, increment, dataWord, loopCount, dataDisplayed,
two90TestType, two90PlotterType, two90Status, two90Mode, two90command,
plotprint};
-- Variable declarations.
oldMsgwh: Window.Handle ← NIL; --where Msg window was
diagnosticwh: PUBLIC Window.Handle ← NIL; -- Tool's window
toolData: PUBLIC DiagnosticsOps.DataHandle ← NIL; -- Tool's data
z: UNCOUNTED ZONE = Heap.systemZone;
-- Some of the following should probably be in toolData.
-- to let the GetXXXProc's know when ConfirmCommand has been bugged
confirmation: PUBLIC CONDITION;
cmdMax: CARDINAL = 100;
running: PUBLIC BOOLEAN ← FALSE; -- whether there is a detached process running
probing: BOOLEAN ← FALSE; -- whether we are probing the ethernet; like running
calledByBye: PUBLIC BOOLEAN ← FALSE; -- whether we were activated by Bye
active: BOOLEAN ← FALSE; -- whether the tool is currently active
-- FormSW support routines.
ConfirmCommand: ENTRY FormSW.ProcType =
BEGIN
ENABLE UNWIND => NULL;
IF NOT toolData.confirming THEN UserTerminal.BlinkDisplay[]
ELSE
BEGIN
toolData.latestConfirm ← LOOPHOLE[index, DiagnosticsOps.ConfirmIndex];
NOTIFY confirmation;
END;
END;
ActionCommand: FormSW.ProcType =
BEGIN
IF toolData.confirming OR running THEN
BEGIN
DiagnosticsOps.PutLine["There is already a command running. Please wait."L];
UserTerminal.BlinkDisplay[];
END
ELSE
BEGIN
SELECT LOOPHOLE[index, FormIndex] FROM
help => DiagnosticsOps.Help[toolData.test];
start =>
BEGIN --start--
SELECT toolData.test FROM
display =>
BEGIN --display--
IF calledByBye THEN ByeOps.StopBouncing[];
DiagnosticsOps.LFDisplayTest[];
UglyHackToGetAroundBugInFormSW[];
IF calledByBye THEN ByeOps.ResumeBouncing[];
END --display-- ;
keyboard =>
BEGIN --keyboard--
IF calledByBye THEN ByeOps.StopBouncing[];
DiagnosticsOps.KeyboardAndMouseTest[];
UglyHackToGetAroundBugInFormSW[];
IF calledByBye THEN ByeOps.ResumeBouncing[];
END --keyboard-- ;
RS232C =>
BEGIN --RS232C Loopback
DiagnosticsOps.RS232CLoopBackTest[
host: toolData.strings[thisProcessorID],
hostNet: toolData.strings[thisEthernetID],
lineType: toolData.lineType, lineSpeed: toolData.lineSpeed,
pattern: toolData.pattern, constant: toolData.constant,
minPacketSize: toolData.minPacketSize,
maxPacketSize: toolData.maxPacketSize];
END --RS232C Loopback-- ;
ethernet =>
IF probing THEN
BEGIN
DiagnosticsOps.PutLine["Probing the ethernet. Please wait."L];
UserTerminal.BlinkDisplay[];
END
ELSE
DiagnosticsOps.EchoUserTest[
currDomain: toolData.strings[currDomain],
currOrganization: toolData.strings[currOrganization],
usernet: toolData.strings[thisEthernetID],
user: toolData.strings[thisProcessorID],
targetnet: toolData.strings[testEthernetID],
target: toolData.strings[testProcessorID],
realFeedBack: toolData.realFeedBack,
waitResponse: toolData.waitResponse,
dataPattern: toolData.dataPattern,
minPacketSize: toolData.minPacketSize,
maxPacketSize: toolData.maxPacketSize,
delayBetween: toolData.delayBetween];
floppy =>
BEGIN --floppy--
running ← TRUE;
SELECT toolData.floppyTest FROM
clean =>
Process.Detach[FORK DiagnosticsOps.FloppyCleanReadWriteHeads[]];
standard =>
Process.Detach[FORK DiagnosticsOps.FloppyStandardTest[]];
summary =>
Process.Detach[FORK DiagnosticsOps.FloppyDisplayErrorLog[]];
format =>
Process.Detach[FORK DiagnosticsOps.FloppyFormatDiskette[]];
exercise => Process.Detach[FORK DiagnosticsOps.FloppyExerciser[]];
cmdFile =>
BEGIN --cmdFile--
IF toolData.inALoop THEN
BEGIN
CmdAppend["E,"L];
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[cmdFile]]];
END;
Process.Detach[
FORK DiagnosticsOps.FloppyCommandFileTest[
toolData.doubleDensity, toolData.doubleSided,
toolData.sectorsPerTrack, toolData.sectorLength,
toolData.errorHandling, toolData.strings[cmdFile]]];
END --cmdFile-- ;
ENDCASE;
END --floppy-- ;
two90 =>
BEGIN --two90--
t: DiagnosticsOps.PlotterType ← toolData.two90Plotter;
IF System.switches['g] = down THEN {
SELECT toolData.two90test FROM
command =>
Process.Detach[
FORK DiagnosticsOps.SendCommand[t, toolData.two90Command]];
output =>
SELECT toolData.two90Output FROM
plot => Process.Detach[FORK DiagnosticsOps.PlotPattern[t]];
print => Process.Detach[
FORK DiagnosticsOps.PrintPattern[t]];
screen => Process.Detach[FORK DiagnosticsOps.PlotScreen[t]];
ENDCASE => ERROR;
ENDCASE => ERROR}
ELSE Msg.FeedBack["290 Not Enabled"L, warning, TRUE];
END; --two90--
none => NULL;
ENDCASE;
END --start-- ;
cancel =>
IF probing THEN
BEGIN
DiagnosticsOps.PutLine["Probing the ethernet. Please wait."L];
UserTerminal.BlinkDisplay[];
END
ELSE [] ← ToolWindow.Deactivate[diagnosticwh];
addCommand =>
BEGIN --addCommand--
temp: LONG STRING = [100];
SELECT toolData.operation FROM
initialize => CmdAppend["I,"L];
recalibrate => CmdAppend["RC,"L];
readStatus => CmdAppend["RAST,"L];
readHeader =>
BEGIN --readHeader--
String.Copy[temp, "RAH,"L];
IF AppendTrackNumber[temp] THEN
IF toolData.inALoop THEN
BEGIN IF AppendIncrement[temp] THEN CmdAppend[temp]; END
ELSE CmdAppend[temp];
END --readHeader-- ;
readSectors =>
BEGIN --readSectors--
String.Copy[temp, "RASE,"L];
IF AppendTrackNumber[temp] THEN
IF AppendStartingSector[temp] THEN
IF toolData.inALoop THEN
BEGIN IF AppendIncrement[temp] THEN CmdAppend[temp]; END
ELSE BEGIN IF AppendSectorCount[temp] THEN CmdAppend[temp]; END;
END --readSectors-- ;
writeSectors, writeDeletedSectors =>
BEGIN --write--
IF toolData.operation = writeSectors THEN String.Copy[temp, "WS,"L]
ELSE String.Copy[temp, "WD,"L];
IF AppendTrackNumber[temp] THEN
IF AppendStartingSector[temp] THEN
IF toolData.inALoop THEN
BEGIN
IF AppendIncrement[temp] THEN
IF AppendDataWord[temp] THEN CmdAppend[temp];
END
ELSE
BEGIN
IF AppendSectorCount[temp] THEN
IF AppendDataWord[temp] THEN CmdAppend[temp];
END;
END --write-- ;
verify => CmdAppend["V,"L];
loop =>
BEGIN --loop--
IF toolData.inALoop THEN CmdAppend["E,"L]
ELSE
BEGIN
String.Copy[temp, "S,"L];
String.AppendNumber[temp, toolData.loopCount, 10];
String.AppendString[temp, ","L]; --!! Diag2Pack.mesa uses "'", but this works.
CmdAppend[temp];
END;
ToggleInALoop[];
END --loop-- ;
displayData =>
CmdAppend[
SELECT toolData.dataDisplayed FROM
status => "DST,"L,
header => "DH,"L,
sector => "DSE,"L,
summary => "DL,"L,
ENDCASE => "DST,"L];
clearLog => CmdAppend["C,"L];
log => CmdAppend["L,"L];
ENDCASE;
END --addCommand-- ;
deleteCommand => CmdDelete[];
ENDCASE => DiagnosticsOps.PutLine["Unknown command - should never happen!?!?"L];
END;
END;
KamikazeProc: UserInput.PeriodicProcType =
BEGIN FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[start]]]; END;
UglyHackToGetAroundBugInFormSW: PROCEDURE =
BEGIN
[] ← UserInput.CreatePeriodicNotify[
proc: KamikazeProc, window: Window.rootWindow, rate: 0];
END;
CmdAppend: PROCEDURE [string: LONG STRING] =
BEGIN
IF toolData.cmdCount < cmdMax THEN
BEGIN
String.AppendStringAndGrow[@toolData.strings[cmdFile], string, z];
toolData.cmdCount ← toolData.cmdCount + 1;
toolData.cmdIndexes[toolData.cmdCount] ← toolData.strings[cmdFile].length;
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[cmdFile]]];
END;
END;
CmdDelete: PROCEDURE =
BEGIN
IF toolData.cmdCount > 0 THEN
BEGIN
ch: CHARACTER ← toolData.strings[cmdFile][
toolData.cmdIndexes[toolData.cmdCount - 1]];
IF ch = 'E OR ch = 'S THEN ToggleInALoop[];
toolData.cmdCount ← toolData.cmdCount - 1;
toolData.strings[cmdFile].length ← toolData.cmdIndexes[toolData.cmdCount];
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[cmdFile]]];
END;
END;
AppendTrackNumber: PROCEDURE [cmd: LONG STRING] RETURNS [ok: BOOLEAN] =
BEGIN
IF toolData.trackNumber > 76 THEN
BEGIN
DiagnosticsOps.PutLine["Track number invalid - must be between 0 and 76."L];
ok ← FALSE;
END
ELSE
BEGIN
String.AppendNumber[cmd, toolData.trackNumber, 10];
String.AppendString[cmd, ",0,"L]; --!! what is the 0? "keyHead", 0 or 1
ok ← TRUE;
END;
END;
AppendStartingSector: PROCEDURE [cmd: LONG STRING] RETURNS [ok: BOOLEAN] =
BEGIN
IF toolData.startingSector < 1
OR toolData.startingSector > toolData.sectorsPerTrack THEN
BEGIN
DiagnosticsOps.PutLine[
"Starting sector invalid - must be between 1 and # of sectors per track."L];
ok ← FALSE;
END
ELSE
BEGIN
String.AppendNumber[cmd, toolData.startingSector, 10];
String.AppendString[cmd, ","L];
ok ← TRUE;
END;
END;
AppendIncrement: PROCEDURE [cmd: LONG STRING] RETURNS [ok: BOOLEAN] =
BEGIN
IF toolData.increment < -2000 OR toolData.increment > 2000 THEN
BEGIN
DiagnosticsOps.PutLine["Increment invalid - must be between -2000 and 2000."L];
ok ← FALSE;
END
ELSE
BEGIN
IF toolData.increment < 0 THEN String.AppendString[cmd, "-"L]
ELSE String.AppendString[cmd, "+"L];
String.AppendNumber[cmd, ABS[toolData.increment], 10];
String.AppendString[cmd, ","L];
ok ← TRUE;
END;
END;
AppendSectorCount: PROCEDURE [cmd: LONG STRING] RETURNS [ok: BOOLEAN] =
BEGIN
IF toolData.sectorCount < 1 OR toolData.sectorCount > toolData.sectorsPerTrack
THEN
BEGIN
DiagnosticsOps.PutLine[
"Sector count invalid - must be between 1 and # of sectors per track."L];
ok ← FALSE;
END
ELSE
BEGIN
String.AppendNumber[cmd, toolData.sectorCount, 10];
String.AppendString[cmd, ","L];
ok ← TRUE;
END;
END;
AppendDataWord: PROCEDURE [cmd: LONG STRING] RETURNS [ok: BOOLEAN] =
BEGIN
String.AppendNumber[cmd, toolData.dataWord, 16];
String.AppendString[cmd, ","L];
ok ← TRUE;
END;
ToggleInALoop: PROCEDURE =
BEGIN
toolData.inALoop ← NOT toolData.inALoop;
IF toolData.test = floppy AND toolData.floppyTest = cmdFile THEN
OperationNotify[
toolData.formSW, FormSW.FindItem[
toolData.formSW, ORD[FormIndex[operation]]], ORD[FormIndex[operation]],
toolData.operation];
END;
TestNotify: FormSW.EnumeratedNotifyProcType =
BEGIN
SELECT LOOPHOLE[oldValue, DiagnosticsOps.Tests] FROM
RS232C =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[thisEthernetID]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[thisProcessorID]]].flags.invisible ←
TRUE;
FormSW.FindItem[sw, ORD[FormIndex[minPacketSize]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[maxPacketSize]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[lineType]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[lineSpeed]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[pattern]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[constant]]].flags.invisible ← TRUE;
END;
ethernet =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[currOrganization]]].flags.invisible ←
TRUE;
FormSW.FindItem[sw, ORD[FormIndex[currDomain]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[thisEthernetID]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[thisProcessorID]]].flags.invisible ←
TRUE;
FormSW.FindItem[sw, ORD[FormIndex[thisProcessorID]]].flags.invisible ←
TRUE;
FormSW.FindItem[sw, ORD[FormIndex[listFS]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[listPS]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[listMS]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[testEthernetID]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[testProcessorID]]].flags.invisible ←
TRUE;
FormSW.FindItem[sw, ORD[FormIndex[realFeedBack]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[dataPattern]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[minPacketSize]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[maxPacketSize]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[waitResponse]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[delayBetween]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[displayServers]]].flags.invisible ← TRUE;
END;
floppy =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[floppyTest]]].flags.invisible ← TRUE;
END;
two90 =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[two90TestType]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[two90PlotterType]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[two90Status]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[two90Mode]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[two90command]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[plotprint]]].flags.invisible ← TRUE;
END;
none =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[start]]].flags.invisible ← FALSE;
END;
ENDCASE;
SELECT toolData.test FROM
RS232C =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[thisEthernetID]]].flags.invisible ←
FALSE;
FormSW.FindItem[sw, ORD[FormIndex[thisProcessorID]]].flags.invisible ←
FALSE;
FormSW.FindItem[sw, ORD[FormIndex[minPacketSize]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[maxPacketSize]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[lineType]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[lineSpeed]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[pattern]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[constant]]].flags.invisible ← FALSE;
END;
ethernet =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[currOrganization]]].flags.invisible ←
FALSE;
FormSW.FindItem[sw, ORD[FormIndex[currDomain]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[thisEthernetID]]].flags.invisible ←
FALSE;
FormSW.FindItem[sw, ORD[FormIndex[thisProcessorID]]].flags.invisible ←
FALSE;
FormSW.FindItem[sw, ORD[FormIndex[listFS]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[listPS]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[listMS]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[testEthernetID]]].flags.invisible ←
FALSE;
FormSW.FindItem[sw, ORD[FormIndex[testProcessorID]]].flags.invisible ←
FALSE;
FormSW.FindItem[sw, ORD[FormIndex[realFeedBack]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[dataPattern]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[minPacketSize]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[maxPacketSize]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[waitResponse]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[delayBetween]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[displayServers]]].flags.invisible ←
FALSE;
END;
floppy =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[floppyTest]]].flags.invisible ← FALSE;
END;
two90 =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[two90TestType]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[two90PlotterType]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[two90Status]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[two90Mode]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[two90command]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[plotprint]]].flags.invisible ← FALSE;
END;
none =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[start]]].flags.invisible ← TRUE;
END;
ENDCASE;
IF LOOPHOLE[oldValue, DiagnosticsOps.Tests] = floppy
AND toolData.floppyTest = cmdFile THEN
BEGIN
toolData.floppyTest ← clean;
FloppyTestNotify[
sw, FormSW.FindItem[sw, ORD[FormIndex[floppyTest]]], ORD[
FormIndex[floppyTest]], DiagnosticsOps.FloppyTest[cmdFile]];
END;
IF toolData.reDisplay THEN
BEGIN FormSW.Display[sw]; toolData.reDisplay ← FALSE; END;
END;
FloppyTestNotify: FormSW.EnumeratedNotifyProcType =
BEGIN
SELECT LOOPHOLE[oldValue, DiagnosticsOps.FloppyTest] FROM
cmdFile =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[addCommand]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[deleteCommand]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[doubleDensity]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[doubleSided]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[sectorsPerTrack]]].flags.invisible ←
TRUE;
FormSW.FindItem[sw, ORD[FormIndex[sectorLength]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[errorHandling]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[operation]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[cmdFile]]].flags.invisible ← TRUE;
--SetCurrent[sw, nullIndex];
END;
ENDCASE;
SELECT toolData.floppyTest FROM
cmdFile =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[addCommand]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[deleteCommand]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[doubleDensity]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[doubleSided]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[sectorsPerTrack]]].flags.invisible ←
FALSE;
FormSW.FindItem[sw, ORD[FormIndex[sectorLength]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[errorHandling]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[operation]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[cmdFile]]].flags.invisible ← FALSE;
END;
ENDCASE;
IF LOOPHOLE[oldValue, DiagnosticsOps.FloppyTest] = cmdFile THEN
BEGIN
oldOperation: DiagnosticsOps.Operation ← toolData.operation;
toolData.operation ← initialize;
OperationNotify[
sw, FormSW.FindItem[sw, ORD[FormIndex[operation]]], ORD[
FormIndex[operation]], oldOperation];
END;
IF toolData.reDisplay THEN
BEGIN FormSW.Display[sw]; toolData.reDisplay ← FALSE; END;
END;
OperationNotify: FormSW.EnumeratedNotifyProcType =
BEGIN
SELECT LOOPHOLE[oldValue, DiagnosticsOps.Operation] FROM
readHeader =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[trackNumber]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[increment]]].flags.invisible ← TRUE;
--SetCurrent[sw, nullIndex];
END;
readSectors =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[trackNumber]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[startingSector]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[sectorCount]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[increment]]].flags.invisible ← TRUE;
--SetCurrent[sw, nullIndex];
END;
writeSectors, writeDeletedSectors =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[trackNumber]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[startingSector]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[sectorCount]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[dataWord]]].flags.invisible ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[increment]]].flags.invisible ← TRUE;
--SetCurrent[sw, nullIndex];
END;
loop =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[loopCount]]].flags.invisible ← TRUE;
--SetCurrent[sw, nullIndex];
END;
displayData =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[dataDisplayed]]].flags.invisible ← TRUE;
END;
ENDCASE;
SELECT toolData.operation FROM
readHeader =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[trackNumber]]].flags.invisible ← FALSE;
IF toolData.inALoop THEN
FormSW.FindItem[sw, ORD[FormIndex[increment]]].flags.invisible ← FALSE;
END;
readSectors =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[trackNumber]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[startingSector]]].flags.invisible ←
FALSE;
IF toolData.inALoop THEN
FormSW.FindItem[sw, ORD[FormIndex[increment]]].flags.invisible ← FALSE
ELSE
FormSW.FindItem[sw, ORD[FormIndex[sectorCount]]].flags.invisible ← FALSE;
END;
writeSectors, writeDeletedSectors =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[trackNumber]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[startingSector]]].flags.invisible ←
FALSE;
IF toolData.inALoop THEN
FormSW.FindItem[sw, ORD[FormIndex[increment]]].flags.invisible ← FALSE
ELSE
FormSW.FindItem[sw, ORD[FormIndex[sectorCount]]].flags.invisible ← FALSE;
FormSW.FindItem[sw, ORD[FormIndex[dataWord]]].flags.invisible ← FALSE;
END;
loop =>
IF NOT toolData.inALoop THEN
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[loopCount]]].flags.invisible ← FALSE;
END;
displayData =>
BEGIN
toolData.reDisplay ← TRUE;
FormSW.FindItem[sw, ORD[FormIndex[dataDisplayed]]].flags.invisible ← FALSE;
END;
ENDCASE;
IF toolData.reDisplay THEN
BEGIN FormSW.Display[sw]; toolData.reDisplay ← FALSE; END;
END;
-- Setup and support routines.
ClientTransition: ToolWindow.TransitionProcType =
BEGIN
SELECT TRUE FROM
old = inactive =>
BEGIN
IF toolData = NIL THEN toolData ← z.NEW[DiagnosticsOps.Data ← []];
active ← TRUE;
END;
new = inactive =>
BEGIN
IF toolData # NIL THEN
BEGIN
FormSW.Destroy[toolData.formSW];
z.FREE[@toolData.strings[cmdFile]];
z.FREE[@toolData];
END;
IF calledByBye THEN
BEGIN calledByBye ← FALSE; ByeOps.ResumeBouncing[]; END;
active ← FALSE;
END;
ENDCASE
END;
DiagnosticsActivate: PUBLIC PROCEDURE =
BEGIN
calledByBye ← TRUE;
IF diagnosticwh = NIL THEN Init[];
ToolWindow.Activate[diagnosticwh];
Window.Stack[
diagnosticwh, Window.GetChild[Window.GetParent[diagnosticwh]]]; -- top me
Window.ValidateTree[];
END;
Init: PROCEDURE =
BEGIN
-- Make the tool window and its subwindows.
diagnosticwh ← Tool.Create[
makeSWsProc: MakeSWs, initialState: inactive,
clientTransition: ClientTransition, name: "Diagnostics"L,
initialBox: [[512, 0], [512, 808]], tinyName1: "Diag"L,
tinyName2: "nostics"L];
END;
MakeSWs: Tool.MakeSWsProc =
BEGIN
old: Window.Handle;
logName: STRING ← [40];
Tool.UnusedLogName[unused: logName, root: "Diagnostics.log"L];
toolData.confirmSW ← Tool.MakeFormSW[
window: window, formProc: MakeConfirm, zone: z,
h: 2 * WindowFont.FontHeight[]]; -- should be 1
toolData.formSW ← Tool.MakeFormSW[
window: window, formProc: MakeForm, zone: z,
h: 45 * WindowFont.FontHeight[]];
probing ← TRUE;
Process.Detach[FORK SetupEthernetItems[]];
toolData.fileSW ← Tool.MakeFileSW[
window: window, name: logName, allowTypeIn: FALSE];
-- jfung
-- old ← Msg.SetWindow[toolData.fileSW];
-- IF old # NIL THEN [] ← Msg.SetWindow[old] ELSE oldMsgwh ← old;
END;
MakeConfirm: FormSW.ClientItemsProcType =
BEGIN OPEN FormSW;
-- This procedure creates the confirmation FormSW.
formItems:
LONG POINTER TO ARRAY DiagnosticsOps.ConfirmIndex OF FormSW.ItemHandle ← NIL;
items ← AllocateItemDescriptor[
nItems: DiagnosticsOps.ConfirmIndex.LAST.ORD + 1, z: z];
formItems ← LOOPHOLE[BASE[items]];
formItems↑ ← [
confirm: CommandItem[
tag: "Confirm"L, place: newLine, drawBox: TRUE, invisible: TRUE,
proc: ConfirmCommand],
yes: CommandItem[
tag: "Yes"L, drawBox: TRUE, invisible: TRUE, proc: ConfirmCommand],
no: CommandItem[
tag: "No"L, drawBox: TRUE, invisible: TRUE, proc: ConfirmCommand],
continue: CommandItem[
tag: "Continue"L, drawBox: TRUE, invisible: TRUE, proc: ConfirmCommand],
loop: CommandItem[
tag: "Loop"L, drawBox: TRUE, invisible: TRUE, proc: ConfirmCommand],
display: CommandItem[
tag: "Display"L, drawBox: TRUE, invisible: TRUE, proc: ConfirmCommand],
exit: CommandItem[
tag: "Exit"L, drawBox: TRUE, invisible: TRUE, proc: ConfirmCommand]];
RETURN[items: items, freeDesc: TRUE]
END;
MakeForm: FormSW.ClientItemsProcType =
BEGIN OPEN FormSW;
-- This procedure creates the main FormSW.
formItems: LONG POINTER TO ARRAY FormIndex OF FormSW.ItemHandle ← NIL;
dataPatterns: ARRAY [0..5) OF FormSW.Enumerated ← [
["All 0s"L, CommOnlineDiagnostics.WordsInPacket[all0s]], [
"All 1s"L, CommOnlineDiagnostics.WordsInPacket[all1s]], [
"Incr Words"L, CommOnlineDiagnostics.WordsInPacket[incrWords]], [
"All Constant"L, CommOnlineDiagnostics.WordsInPacket[allConstant]], [
"Dont Care"L, CommOnlineDiagnostics.WordsInPacket[dontCare]]];
lineTypes: ARRAY [0..2) OF FormSW.Enumerated ← [
["bitSynchronous"L, DiagnosticsOps.RS232LineType[bitSynchronous]], [
"asynchronous"L, DiagnosticsOps.RS232LineType[asynchronous]]];
lineSpeeds: ARRAY [0..4) OF FormSW.Enumerated ← [[
"1200"L, RS232CEnvironment.LineSpeed[bps1200]], [
"2400"L, RS232CEnvironment.LineSpeed[bps2400]], [
"4800"L, RS232CEnvironment.LineSpeed[bps4800]], [
"9600"L, RS232CEnvironment.LineSpeed[bps9600]]];
patterns: ARRAY [0..4) OF FormSW.Enumerated ← [
["All 0s"L, CommOnlineDiagnostics.PatternType[zero]], [
"All 1s"L, CommOnlineDiagnostics.PatternType[ones]], [
"Incrementing"L, CommOnlineDiagnostics.PatternType[byteIncr]], [
"Constant"L, CommOnlineDiagnostics.PatternType[constant]]];
testtwo90: ARRAY [0..2) OF FormSW.Enumerated ← [
["Command"L, DiagnosticsOps.Two90Test[command]],
["Output"L, DiagnosticsOps.Two90Test[output]]];
plottertwo90: ARRAY [0..7) OF FormSW.Enumerated ← [
["v80"L, DiagnosticsOps.PlotterType[v80]],
["v8222"L, DiagnosticsOps.PlotterType[v8222]],
["v8224"L, DiagnosticsOps.PlotterType[v8224]],
["v8236"L, DiagnosticsOps.PlotterType[v8236]],
["v8242"L, DiagnosticsOps.PlotterType[v8242]],
["v8272"L, DiagnosticsOps.PlotterType[v8272]],
["pdq"L, DiagnosticsOps.PlotterType[pdq]]];
statustwo90: ARRAY [0..11) OF FormSW.Enumerated ← [
["null"L, GreenFace.Status[null]],
["inplot"L, GreenFace.Status[inplot]],
["inprint"L, GreenFace.Status[inprint]],
["overrun"L, GreenFace.Status[overrun]],
["unrecognized"L, GreenFace.Status[unrecognized]],
["illegalsequence"L, GreenFace.Status[illegalsequence]],
["parityerror"L, GreenFace.Status[parityerror]],
["framingerror"L, GreenFace.Status[framingerror]],
["busyinprogress"L, GreenFace.Status[busyinprogress]],
["offline"L, GreenFace.Status[offline]],
["plotterready"L, GreenFace.Status[plotterready]]];
modetwo90: ARRAY [0..2) OF FormSW.Enumerated ← [
["Plot", DiagnosticsOps.Two90Mode[plot]],
["Print", DiagnosticsOps.Two90Mode[print]]];
commandtwo90: ARRAY [0..11) OF FormSW.Enumerated ← [
["null"L, GreenFace.Command[null]],
["plot"L, GreenFace.Command[plot]],
["print"L, GreenFace.Command[print]],
["clear"L, GreenFace.Command[clear]],
["rlter"L, GreenFace.Command[rlter]],
["rffed"L, GreenFace.Command[rffed]],
["reotr"L, GreenFace.Command[reotr]],
["receivebyte"L, GreenFace.Command[receivebyte]],
["senseplot"L, GreenFace.Command[senseplot]],
["sensestatus"L, GreenFace.Command[sensestatus]],
["reset"L, GreenFace.Command[reset]]];
outputtwo90: ARRAY [0..3) OF FormSW.Enumerated ← [
["plot"L, DiagnosticsOps.Two90Pattern[plot]],
["print"L, DiagnosticsOps.Two90Pattern[print]],
["screen"L, DiagnosticsOps.Two90Pattern[screen]]];
EnumSeq: TYPE = RECORD [seq: SEQUENCE n: CARDINAL OF FormSW.Enumerated];
testSeq: LONG POINTER TO EnumSeq ← z.NEW[EnumSeq [7]];
floppyTestSeq: LONG POINTER TO EnumSeq ← z.NEW[EnumSeq [6]];
sectorLengthSeq: LONG POINTER TO EnumSeq ← z.NEW[EnumSeq [4]];
errorHandlingSeq: LONG POINTER TO EnumSeq ← z.NEW[EnumSeq [3]];
operationSeq: LONG POINTER TO EnumSeq ← z.NEW[EnumSeq [12]];
dataDisplayedSeq: LONG POINTER TO EnumSeq ← z.NEW[EnumSeq [4]];
testSeq[0] ← ["Display"L, DiagnosticsOps.Tests[display]];
testSeq[1] ← ["Keyboard"L, DiagnosticsOps.Tests[keyboard]];
testSeq[2] ← ["Echo"L, DiagnosticsOps.Tests[ethernet]];
testSeq[3] ← ["RS232C Loopback"L, DiagnosticsOps.Tests[RS232C]];
testSeq[4] ← ["Floppy Drive"L, DiagnosticsOps.Tests[floppy]];
testSeq[5] ← ["290 Interface"L, DiagnosticsOps.Tests[two90]];
testSeq[6] ← ["None"L, DiagnosticsOps.Tests[none]];
floppyTestSeq[0] ← ["Clean Heads"L, DiagnosticsOps.FloppyTest[clean]];
floppyTestSeq[1] ← ["Standard"L, DiagnosticsOps.FloppyTest[standard]];
floppyTestSeq[2] ← ["Summary"L, DiagnosticsOps.FloppyTest[summary]];
floppyTestSeq[3] ← ["Format"L, DiagnosticsOps.FloppyTest[format]];
floppyTestSeq[4] ← ["Exerciser"L, DiagnosticsOps.FloppyTest[exercise]];
floppyTestSeq[5] ← ["Command File"L, DiagnosticsOps.FloppyTest[cmdFile]];
sectorLengthSeq[0] ← ["128 bytes"L, OnlineDiagnostics.SectorLength[one28]];
sectorLengthSeq[1] ← ["256 bytes"L, OnlineDiagnostics.SectorLength[two56]];
sectorLengthSeq[2] ← ["512 bytes"L, OnlineDiagnostics.SectorLength[five12]];
sectorLengthSeq[3] ← ["1024 bytes"L, OnlineDiagnostics.SectorLength[one024]];
errorHandlingSeq[0] ← [
"No Error Checking"L, OnlineDiagnostics.ErrorHandling[noChecking]];
errorHandlingSeq[1] ← [
"Stop on Errors"L, OnlineDiagnostics.ErrorHandling[stopOnError]];
errorHandlingSeq[2] ← [
"Loop on Errors"L, OnlineDiagnostics.ErrorHandling[loopOnError]];
operationSeq[0] ← ["Initialize floppy drive"L, DiagnosticsOps.Operation[initialize]];
operationSeq[1] ← ["Recalibrate"L, DiagnosticsOps.Operation[recalibrate]];
operationSeq[2] ← ["Read Status"L, DiagnosticsOps.Operation[readStatus]];
operationSeq[3] ← ["Read Header"L, DiagnosticsOps.Operation[readHeader]];
operationSeq[4] ← ["Read Sectors"L, DiagnosticsOps.Operation[readSectors]];
operationSeq[5] ← ["Write Sectors"L, DiagnosticsOps.Operation[writeSectors]];
operationSeq[6] ← ["Write Deleted Sectors"L, DiagnosticsOps.Operation[writeDeletedSectors]];
operationSeq[7] ← ["Verify"L, DiagnosticsOps.Operation[verify]];
operationSeq[8] ← ["Start/Stop Loop"L, DiagnosticsOps.Operation[loop]];
operationSeq[9] ← ["Display Data"L, DiagnosticsOps.Operation[displayData]];
operationSeq[10] ← ["Clear Status Log"L, DiagnosticsOps.Operation[clearLog]];
operationSeq[11] ← ["Log Status"L, DiagnosticsOps.Operation[log]];
toolData.cmdCount ← 0;
toolData.cmdIndexes[toolData.cmdCount] ← 0;
toolData.inALoop ← FALSE;
dataDisplayedSeq[0] ← ["Status"L, DiagnosticsOps.DataDisplayed[status]];
dataDisplayedSeq[1] ← ["Header"L, DiagnosticsOps.DataDisplayed[header]];
dataDisplayedSeq[2] ← ["Sector"L, DiagnosticsOps.DataDisplayed[sector]];
dataDisplayedSeq[3] ← ["Summary Log"L, DiagnosticsOps.DataDisplayed[summary]];
items ← AllocateItemDescriptor[nItems: FormIndex.LAST.ORD + 1, z: z];
formItems ← LOOPHOLE[BASE[items]];
formItems↑ ← [
help: CommandItem[
tag: "Help"L, place: newLine, drawBox: TRUE, invisible: FALSE,
proc: ActionCommand],
start: CommandItem[
tag: "Start"L, drawBox: TRUE, invisible: TRUE, proc: ActionCommand],
cancel: CommandItem[
tag: "Cancel"L, drawBox: TRUE, invisible: FALSE, proc: ActionCommand],
addCommand: CommandItem[
tag: "Add Command to file"L, drawBox: TRUE, invisible: TRUE,
proc: ActionCommand],
deleteCommand: CommandItem[
tag: "Delete Previous Command"L, drawBox: TRUE, invisible: TRUE,
proc: ActionCommand],
test: EnumeratedItem[
tag: "Test"L, place: newLine, invisible: FALSE,
feedback: all, value: @toolData.test, copyChoices: TRUE,
choices: DESCRIPTOR[testSeq↑], proc: TestNotify],
floppyTest: EnumeratedItem[
tag: "Type of test"L, place: newLine, invisible: TRUE, feedback: all,
value: @toolData.floppyTest, copyChoices: TRUE,
choices: DESCRIPTOR[floppyTestSeq↑], proc: FloppyTestNotify],
currOrganization: StringItem[
tag: "Current Organization"L, place: newLine, invisible: TRUE,
readOnly: TRUE, inHeap: TRUE, string: @toolData.strings[currOrganization]],
currDomain: StringItem[
tag: "Current Domain"L, place: newLine, invisible: TRUE, readOnly: TRUE,
inHeap: TRUE, string: @toolData.strings[currDomain]],
thisEthernetID: StringItem[
tag: "Source Ethernet ID"L, place: newLine, invisible: TRUE,
inHeap: TRUE, string: @toolData.strings[thisEthernetID]],
thisProcessorID: StringItem[
tag: "Source Processor ID number"L, place: newLine, invisible: TRUE,
inHeap: TRUE, string: @toolData.strings[thisProcessorID]],
listFS: StringItem[
tag: "FS"L, place: newLine, invisible: TRUE, readOnly: TRUE, inHeap: TRUE,
string: @toolData.strings[listFS]],
listPS: StringItem[
tag: "PS"L, place: newLine, invisible: TRUE, readOnly: TRUE, inHeap: TRUE,
string: @toolData.strings[listPS]],
listMS: StringItem[
tag: "MS"L, place: newLine, invisible: TRUE, readOnly: TRUE, inHeap: TRUE,
string: @toolData.strings[listMS]],
testEthernetID: StringItem[
tag: "Destination Ethernet ID number"L, place: newLine,
invisible: TRUE, inHeap: TRUE, string: @toolData.strings[testEthernetID]],
testProcessorID: StringItem[
tag: "Destination Processor ID number"L, place: newLine,
invisible: TRUE, inHeap: TRUE, string: @toolData.strings[testProcessorID]],
realFeedBack: BooleanItem[
tag: "Display Real Time Feedback"L, place: newLine, invisible: TRUE,
drawBox: TRUE, switch: @toolData.realFeedBack],
dataPattern: EnumeratedItem[
tag: "Set Data Pattern"L, place: newLine, invisible: TRUE, feedback: all,
value: @toolData.dataPattern, copyChoices: TRUE,
choices: DESCRIPTOR[dataPatterns]],
minPacketSize: NumberItem[
tag: "Minimum Packet Size(2-512 bytes)"L, place: newLine, invisible: TRUE,
value: @toolData.minPacketSize, notNegative: TRUE, signed: FALSE],
maxPacketSize: NumberItem[
tag: "Maximum Packet Size(2-512 bytes)"L, place: newLine, invisible: TRUE,
value: @toolData.maxPacketSize, notNegative: TRUE, signed: FALSE],
waitResponse: BooleanItem[
tag: "Wait for response before sending packet"L, place: newLine,
invisible: TRUE, drawBox: TRUE, switch: @toolData.waitResponse],
delayBetween: NumberItem[
tag: "Delay between packets (milliseconds)"L, place: newLine,
invisible: TRUE, value: @toolData.delayBetween, notNegative: TRUE,
signed: FALSE],
displayServers: BooleanItem[
tag: "Display Server List"L, place: newLine, invisible: TRUE, drawBox: TRUE,
switch: @toolData.displayServers],
lineType: EnumeratedItem[
tag: "Mode"L, place: newLine, invisible: TRUE, feedback: all,
value: @toolData.lineType, copyChoices: TRUE,
choices: DESCRIPTOR[lineTypes]],
lineSpeed: EnumeratedItem[
tag: "Data Rate (bps)"L, place: newLine, invisible: TRUE, feedback: all,
value: @toolData.lineSpeed, copyChoices: TRUE,
choices: DESCRIPTOR[lineSpeeds]],
pattern: EnumeratedItem[
tag: "Set Data Pattern"L, place: newLine, invisible: TRUE, feedback: all,
value: @toolData.pattern, copyChoices: TRUE, choices: DESCRIPTOR[patterns]],
constant: NumberItem[
tag: "Pattern:"L, invisible: TRUE, value: @toolData.constant,
notNegative: TRUE, signed: FALSE],
doubleDensity: BooleanItem[
tag: "Double Density"L, place: newLine, invisible: TRUE,
switch: @toolData.doubleDensity],
doubleSided: BooleanItem[
tag: "Double Sided"L, invisible: TRUE, switch: @toolData.doubleSided],
sectorsPerTrack: NumberItem[
tag: "Sectors per Track"L, invisible: TRUE, value:
@toolData.sectorsPerTrack, notNegative: TRUE, signed: FALSE],
sectorLength: EnumeratedItem[
tag: "Sector Length"L, place: newLine, invisible: TRUE, feedback: all,
value: @toolData.sectorLength, copyChoices: TRUE,
choices: DESCRIPTOR[sectorLengthSeq↑]],
errorHandling: EnumeratedItem[
tag: "Error Handling"L, place: newLine, invisible: TRUE, feedback: all,
value: @toolData.errorHandling, copyChoices: TRUE,
choices: DESCRIPTOR[errorHandlingSeq↑]],
operation: EnumeratedItem[
tag: "Command File Operation"L, place: newLine, invisible: TRUE,
feedback: one, value: @toolData.operation, copyChoices: TRUE,
choices: DESCRIPTOR[operationSeq↑], proc: OperationNotify],
cmdFile: StringItem[
tag: "Commands"L, place: newLine, invisible: TRUE, readOnly: TRUE,
inHeap: TRUE, string: @toolData.strings[cmdFile]],
trackNumber: NumberItem[
tag: "Track number"L, place: newLine, invisible: TRUE,
value: @toolData.trackNumber, notNegative: TRUE, signed: FALSE],
startingSector: NumberItem[
tag: "Starting Sector"L, place: newLine, invisible: TRUE,
value: @toolData.startingSector, notNegative: TRUE, signed: FALSE],
sectorCount: NumberItem[
tag: "Sector Count"L, place: newLine, invisible: TRUE,
value: @toolData.sectorCount, notNegative: TRUE, signed: FALSE],
increment: NumberItem[
tag: "Increment (+ or -) by"L, place: newLine, invisible: TRUE,
value: @toolData.increment, notNegative: FALSE, signed: TRUE],
dataWord: NumberItem[
tag: "Data Word"L, place: newLine, invisible: TRUE,
value: @toolData.dataWord, radix: octal, notNegative: TRUE, signed: FALSE],
loopCount: NumberItem[
tag: "Loop Count"L, place: newLine, invisible: TRUE,
value: @toolData.loopCount, notNegative: TRUE, signed: FALSE],
dataDisplayed: EnumeratedItem[
tag: "Data to Be Displayed"L, place: newLine, invisible: TRUE,
feedback: all, value: @toolData.dataDisplayed, copyChoices: TRUE,
choices: DESCRIPTOR[dataDisplayedSeq↑]],
two90TestType: EnumeratedItem[
tag: "Type of test"L, place: newLine, invisible: TRUE,
feedback: all, value: @toolData.two90test, copyChoices: TRUE,
choices: DESCRIPTOR[testtwo90]],
two90PlotterType: EnumeratedItem[
tag: "Plotter Type"L, place: newLine, invisible: TRUE,
feedback: all, value: @toolData.two90Plotter, copyChoices: TRUE,
choices: DESCRIPTOR[plottertwo90]],
two90Status: EnumeratedItem[
tag: "Plotter Status"L, place: newLine, invisible: TRUE,
feedback: all, value: @toolData.two90Status, copyChoices: TRUE,
choices: DESCRIPTOR[statustwo90]],
two90Mode: EnumeratedItem[
tag: "Plotter Mode"L, place: newLine, invisible: TRUE,
feedback: all, value: @toolData.two90Mode, copyChoices: TRUE,
choices: DESCRIPTOR[modetwo90]],
two90command: EnumeratedItem[
tag: "Command To Send"L, place: newLine, invisible: TRUE,
feedback: all, value: @toolData.two90Command, copyChoices: TRUE,
choices: DESCRIPTOR[commandtwo90]],
plotprint: EnumeratedItem[
tag: "Print/Plot Output test"L, place: newLine, invisible: TRUE,
feedback: all, value: @toolData.two90Output, copyChoices: TRUE,
choices: DESCRIPTOR[outputtwo90]]];
z.FREE[@testSeq];
z.FREE[@floppyTestSeq];
z.FREE[@sectorLengthSeq];
z.FREE[@errorHandlingSeq];
z.FREE[@operationSeq];
z.FREE[@dataDisplayedSeq];
RETURN[items: items, freeDesc: TRUE]
END;
SetupEthernetItems: PROCEDURE =
BEGIN --SetupEthernetItems--
thisNetworkAddress: System.NetworkAddress;
-- Get the current domain and organization.
Profile.GetDefaultOrganization[GetCurrOrganization];
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[currOrganization]]];
Profile.GetDefaultDomain[GetCurrDomain];
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[currDomain]]];
-- Get the current network and host number.
thisNetworkAddress ← NetworkStream.AssignNetworkAddress[];
Format.NetworkNumber[
GetThisEthernetID, thisNetworkAddress.net, productSoftware];
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[thisEthernetID]]];
Format.HostNumber[
GetThisProcessorID, thisNetworkAddress.host, productSoftware];
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[thisProcessorID]]];
-- List the file servers, print servers, and mail servers.
IF toolData.displayServers THEN {
DiagnosticsOps.AppendServers[DESCRIPTOR[toolData.strings], z];
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[listFS]]];
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[listPS]]];
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[listMS]]]};
GetClearingHouse[];
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[testEthernetID]]];
FormSW.DisplayItem[toolData.formSW, ORD[FormIndex[testProcessorID]]];
probing ← FALSE;
END --SetupEthernetItems-- ;
GetCurrOrganization: PROCEDURE [s: Profile.String] =
BEGIN toolData.strings[currOrganization] ← String.CopyToNewString[s, z]; END;
GetCurrDomain: PROCEDURE [s: Profile.String] =
BEGIN toolData.strings[currDomain] ← String.CopyToNewString[s, z]; END;
GetThisEthernetID: Format.StringProc =
BEGIN toolData.strings[thisEthernetID] ← String.CopyToNewString[s, z]; END;
GetThisProcessorID: Format.StringProc =
BEGIN toolData.strings[thisProcessorID] ← String.CopyToNewString[s, z]; END;
GetTestEthernetID: Format.StringProc =
BEGIN toolData.strings[testEthernetID] ← String.CopyToNewString[s, z]; END;
GetTestProcessorID: Format.StringProc =
BEGIN toolData.strings[testProcessorID] ← String.CopyToNewString[s, z]; END;
GetClearingHouse: PROCEDURE =
BEGIN --GetClearingHouse--
CHAddr: System.NetworkAddress ← CHStubInternal.FindDomainAddr[
CH.zeroMaxLengthNames];
Format.NetworkNumber[GetTestEthernetID, CHAddr.net, productSoftware];
Format.HostNumber[GetTestProcessorID, CHAddr.host, productSoftware];
END --GetClearingHouse-- ;
-- Mainline code.
Init[];
END...