-- DiagnosticsImplE.mesa  -  edited by:
-- Poskanzer	 5-May-83 18:11:25
-- Schultz	 3-Aug-83  9:35:39
-- Bruce	 4-Aug-83 15:53:50
-- Paul		 9-Jan-84 14:49:34

DIRECTORY
  Cursor USING [Set],
  DiagnosticsOps USING [HelpToo, PutCR, PutLine, Tests],
  UserInput USING [WaitForConfirmation, WaitNoButtons];

DiagnosticsImplE: MONITOR
  IMPORTS Cursor, DiagnosticsOps, UserInput EXPORTS DiagnosticsOps =
  BEGIN

  Help: PUBLIC PROCEDURE [test: DiagnosticsOps.Tests] =
    BEGIN  --Help--
    SELECT test FROM
      display =>
        BEGIN
        DiagnosticsOps.PutCR[];
        DiagnosticsOps.PutLine["Display"L];
        DiagnosticsOps.PutLine[
          "
	  The display test presents various patterns you use to check the alignment, focus, and intensity of the large-format display.  They are as follows:"L];
        DiagnosticsOps.PutLine["	1. cross-hairs"L];
        DiagnosticsOps.PutLine["	2. all ""H""'s"L];
        DiagnosticsOps.PutLine["	3. all ""@""'s (bolded)"L];
        DiagnosticsOps.PutLine["	4. all ""@""'s (normal)"L];
        DiagnosticsOps.PutLine["	5. vertical parallel lines"L];
        DiagnosticsOps.PutLine["	6. all white screen"L];
	IF NOT More[] THEN RETURN;
        DiagnosticsOps.PutLine[
          "To run the test, select Display (position the cursor over Display and press the left mouse button), then position the cursor over Start! and press the left mouse button.  To advance to the next pattern, press the space bar.  To invert the display, press the ""I"" key.  To exit the test, press the DELETE key."L];
        END;
      keyboard =>
        BEGIN
        DiagnosticsOps.PutCR[];
        DiagnosticsOps.PutLine["Keyboard"L];
        DiagnosticsOps.PutLine[
          "
	  Use this test to verify proper operation of the cursor, tone generator, keyboard and mouse buttons.  To run the test position the cursor over the word ""Keyboard"" and press the left mouse button, then position the cursor over Start! and press the left mouse button.  After an initial tone, you can press any key or either mouse button and the corresponding key or button on the display blackens.  When you release the button or key it becomes white again.  A key that does not turn black, or fails to turn white when you release it indicates a failure of that key.  A mouse button that remains continuously black indicates a failure of the mouse electronics.  To exit the test move the cursor into the black box in the upper left hand corner of the screen and press either mouse button."L];
        END;
      RS232C =>
        BEGIN
	DiagnosticsOps.PutCR[];
        DiagnosticsOps.PutLine["RS232C Loopback Test"L];
        DiagnosticsOps.PutLine[
          "
	  Use this test to verify proper operation of the RS232C equipment by sending and recieving test packet(s) of varying size.  To run the test, you must install a loopback plug or set your modem to LoopBack mode.  Assuming the Clearinghouse is accessible, the default host is your machine.  If you wish to test with another host, you must change the default ID to the one of your choice."L];
	IF NOT More[] THEN RETURN;
        DiagnosticsOps.PutLine[
          "You may enter valid ID's in decimal (for example: 2-852-126-818), octal (for example: 25200000142B), hex (for example: AA000062X), or with a text string corresponding to a valid Clearinghouse name (for example: Tundra).  If you wish to test a host on another network you must change both the Ethernet ID and processor ID.  Once you have properly established these ID's, you may position the cursor over Start! and press the left mouse button to begin execution.  To end the test, you must press and hold the STOP key."L];
	END;
      ethernet =>
        BEGIN
        DiagnosticsOps.PutCR[];
        DiagnosticsOps.PutLine["Echo Test"L];
        DiagnosticsOps.PutLine[
          "
	  Use this test to verify proper operation of the Ethernet with any potential test partners by sending and recieving test packet(s) of varying size.  When selected, this test first presents the processor ID numbers of all servers with your network ID number.  If the Clearinghouse is unavailable or if corresponding electronics are inoperable, the test omits these ID's.  To run the test, you must enter a test partner processor ID number.  Assuming the Clearinghouse is accessible, the default test partner is one of the servers listed.  If you wish to test with another partner, you must change the default ID to the one of your choice."L];
	IF NOT More[] THEN RETURN;
        DiagnosticsOps.PutLine[
          "You may enter valid ID's in decimal (for example: 2-852-126-818), octal (for example: 25200000142B), hex (for example: AA000062X), or with a text string corresponding to a valid Clearinghouse name (for example: Tundra).  If you wish to echo with a test partner on another network you must change both the Ethernet ID and processor ID.  Once you have properly established these ID's, you may position the cursor over Start! and press the left mouse button to begin execution.  To end the test, you must press and hold the STOP key."L];
	IF NOT More[] THEN RETURN;
        DiagnosticsOps.PutLine[
          "The system provides you with diagnostic feedback on the display by presenting representative symbols of each packet echoed as follows:"L];
        DiagnosticsOps.PutLine[
          "	1. ""!"" represents a successful echo packet"L];
        DiagnosticsOps.PutLine[
          "	2. ""?"" represents an unsuccessful echo packet"L];
        DiagnosticsOps.PutLine["	3. ""#"" represents a late echo packet"L];
        DiagnosticsOps.PutLine[
          "	4. ""-"" represents a CRC error, but good data"L];
        DiagnosticsOps.PutLine[
          "	5. "":"" marks the transmission of the largest packet size"L];
        DiagnosticsOps.PutLine[
          "After you press and hold the STOP key, the system reports a percentage of packets echoed successfully.  Generally, the percentage should be at least 97%."L];
        END;
      floppy =>
        BEGIN
        DiagnosticsOps.PutCR[];
        DiagnosticsOps.PutLine["Floppy Disk Drive"L];
        DiagnosticsOps.PutLine[
          "
	  To access this test, select Floppy Disk Drive in the list of tests.  The system shows a list of floppy disk drive utilities.  You can select any of the utilities (described below) by positioning the cursor on the utility name and pressing the left mouse button."L];
        DiagnosticsOps.PutLine[
          "
	  Clean Heads-Use this utility in conjunction with a floppy drive head cleaning diskette.  The operation is tutorial; messages in the ""help"" subwindow guide you through the operation. To begin, position the cursor over Start! and press the left mouse button."L];
	IF NOT More[] THEN RETURN;
        DiagnosticsOps.PutLine[
          "
	  Standard- This is a confidence test of the floppy drive subsystem. The maintenance panel and the display provide feedback to you.  This facility requires you to use the diagnostic diskette.  The operation is tutorial.  To begin, position the cursor over Start! and press the left mouse button."L];
        DiagnosticsOps.PutLine[
          "
	  Summary- Service personnel normally use this feature to report detailed status after specific operation.  To display the summary, position the cursor over Start! and press the left mouse button."L];
	IF NOT More[] THEN RETURN;
        DiagnosticsOps.PutLine[
          "
	  Format- This utility formats a single or double sided diskette for use in this operating environment.  The operation is tutorial.  To begin, position the cursor over Start! and press the left mouse button."L];
        DiagnosticsOps.PutLine[
          "
	  Exerciser- Service personnel normally use this utility to perform extensive read/write tests on a blank diskette.  The maintenance panel and the display provide feedback.  The operation is tutorial.  To begin, position the cursor over Start! and press the left mouse button."L];
 	IF NOT More[] THEN RETURN;
        DiagnosticsOps.PutLine[
          "
	  Command File- This facility lets service personnel create special diagnostic and adjustment routines. Use this tool to build a series of commands to execute later as a stand-alone program.  To build a command file, you must select command file operations (use the accelerator feature previously described) and edit the special fields as required.  The necessary steps are as follows:"L];
        DiagnosticsOps.PutLine["	1. select a command file operation"L];
        DiagnosticsOps.PutLine["	2. add command to file"L];
        DiagnosticsOps.PutLine[
          "	3. repeat steps 1 and 2 as required until the file is complete"L];
        DiagnosticsOps.PutLine[
          "	4. position cursor over START and press the left mouse button."L];
        END;
      none => DiagnosticsOps.HelpToo[];
      ENDCASE;
    END --Help-- ;
  
  More: PUBLIC PROCEDURE RETURNS [okay: BOOLEAN] =
    BEGIN
    DiagnosticsOps.PutLine["---Press the left mouse button for more---"L];
    Cursor.Set[mouseRed];
    [, okay] ← UserInput.WaitForConfirmation[];
    Cursor.Set[textPointer];
    UserInput.WaitNoButtons[];
    END;

  END.