-- DiagnosticsImplF.mesa  -  edited by:
-- Poskanzer	 9-May-83 19:01:15

DIRECTORY
  DiagnosticsOps USING [More, PutCR, PutLine];

DiagnosticsImplF: MONITOR IMPORTS DiagnosticsOps EXPORTS DiagnosticsOps =
  BEGIN

  HelpToo: PUBLIC PROCEDURE =
    BEGIN  --HelpToo--
    DiagnosticsOps.PutCR[];
    DiagnosticsOps.PutLine[
      "	Welcome to Online Diagnostics. The purpose of this documentation is to provide you with a description of special features unique to this operating environment.  Please be certain to read through the complete package before executing commands.  These tools will allow you to test/verify the operation of the Keyboard, Display, Floppy Disk and Ethernet. Additionally the floppy disk facilities include a head cleaning routine to be used in conjunction with a special cleaning diskette.  Further description of the individual tests can be found towards the end of this documentation."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	Commands are invoked by clicking POINT (left mouse button) with the tip of the cursor overlaying the command (as you have done with the ""HELP!"" command). The command will be video-inverted when the cursor is correctly positioned and POINT is depressed."L];
    DiagnosticsOps.PutLine[
      "	As you have obviously seen the diagnostic auxiliary menu is made accessable from the bouncing square by simutaneously holding the SHIFT and STOP keys.  To return to the bouncing square invoke CANCEL.  To abort test execution you can at anytime depress the STOP key."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutCR[];
    DiagnosticsOps.PutLine["Mouse Buttons and Keyboard"L];
    DiagnosticsOps.PutLine[
      "	The mouse allows you to direct the attention of the computer to a particular area of the display. The standard mouse has two buttons. The left button is called ""POINT"", the right button is ""ADJUST."" To press down both the left and right buttons simultaneously is to ""chord"" the mouse. If your mouse has three buttons, pressing down the middle button is the same as chording a two-button mouse."L];
    DiagnosticsOps.PutLine[
      "	Pressing and immediately releasing (clicking) a mouse button invokes various actions, which will be explained later. You have already learned that clicking POINT (the left button) over a command activates it."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutCR[];
    DiagnosticsOps.PutLine["Scrolling"L];
    DiagnosticsOps.PutLine[
      "	This operating environment communicates with you through windows and subwindows. You are reading this message in a subwindow of the Online Diagnostics window. A window/subwindow views a plane that can be arbitrarily long, so there is often more text than can be seen at any one time."L];
    DiagnosticsOps.PutLine[
      "	Think of this plane as a long roll of paper that you can see a part of by positioning the paper behind the window. Positioning the paper is called ""scrolling,"" and is done with the scroll bar, which is marked off by the gray line near the left edge of the window. When the cursor is in the correct position for scrolling, it will change into a double-headed arrow. Try it."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	When the cursor is in the scroll bar, notice that the scroll bar has a dark gray and a light gray region. These gray regions, combined, represent the entire length of the scroll behind the window; the dark gray region represents that portion currently visible through the window."L];
    DiagnosticsOps.PutLine[
      "	Mouse buttons direct the scrolling operation. The cursor changes when one of the buttons is pressed: POINT scrolls the document up (the double-headed arrow changes to point up) and ADJUST scrolls it down (the double-headed arrow changes to point down)."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	With the cursor and its double-headed arrow positioned in the scroll bar, click POINT (the left button) to scroll up, then return to your original position by clicking ADJUST (the right button) to scroll back down. Scroll this subwindow up a bit to read the rest of this message."L];
    DiagnosticsOps.PutLine[
      "	Practice scrolling your HELP subwindow. When scrolling up, notice that the line of text which is level with the double-headed arrow moves to the top of the subwindow when you click POINT. Similarly, when scrolling down, the text at the top of the subwindow is moved to where the arrow was when you clicked ADJUST."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	Notice that the position of the dark grey region changes as you scroll the window up and down. This signifies that you are viewing a different part of the file; the dark grey region always shows the portion and position of the text that you are viewing with respect to the entire text."L];
    DiagnosticsOps.PutCR[];
    DiagnosticsOps.PutLine["Moveable boundaries"L];
    DiagnosticsOps.PutLine[
      "	This features is not normally required, but can be used to adjust the size of the displayed window for viewing."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	Look at the right edge of the lines dividing this window into subwindows and note the small boxes. To move a boundary, place the point of the cursor over the small box on the boundary you wish to move, press and hold down POINT, and move the cursor up or down. Note how the boundary moves with the cursor. Move the box to the position you wish the boundary to be in and release the button."L];
    DiagnosticsOps.PutCR[];
    DiagnosticsOps.PutLine["Window Manager"L];
    DiagnosticsOps.PutLine[
      "	This feature should not be used by an inexperienced operator and is being described for information purpose only.  Before practicing read the following tutorial carefully.  Please note that the Window Manager can be accessed from any size window buy holding both mouse buttons over the window!"L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	You may wish to make your entire HELP window larger, smaller, or move it to a different location on the screen. Window size, position, and state are manipulated via Window Manager commands found in the Window Manager (""Window Mgr"") menu. The Window Manager menu is a feature of the operating system environment which is available for every window."L];
    DiagnosticsOps.PutLine[
      "	Invoke the Window Manager menu by placing the cursor in the Empty Window and chording (this means that you must simultaneously press down both mouse buttons, and keep them down). Note that the cursor changes to a left-pointing arrow."L];
     IF NOT DiagnosticsOps.More[] THEN RETURN;
   DiagnosticsOps.PutLine[
      "	Bring the Window Manager menu to the top of the stack (if it isn't already) by positioning the point of the cursor over the menu name ""Window Mgr"" (it will video-invert) and releasing the chord (this means that you must simultaneously release both mouse buttons). Chord again, and the Window Manager menu will be on top."L];
    DiagnosticsOps.PutLine[
      "	Moving window boundaries-Still chording, move the cursor (a left-pointing arrow) to point to ""Move"". The word ""Move"" will video-invert when the cursor is in the correct position. Release the chord."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	The cursor changes into the shape of a corner with an M in it. Move the cursor outside of the window and move it in a big rectangle around this window and watch it change to the shape of the closest corner. Now try moving it into the window and notice that it doesn't change shape unless you go back outside of the window again, and then only if you go out through one of the two edges not represented by the cursor. Changing the shape of the cursor is how you tell the Move! command which corner you are talking about."L];
    DiagnosticsOps.PutLine[
      "	Finally, position the cursor so that it is not on the top of the HELP window (so you won't accidently cover this message), and click POINT. The shape which the cursor has when you click POINT specifies which corner of the window is to be moved to the new location."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	""Move"" allows the window to be displaced about the display area, but doesn't change its size or shape."L];
    DiagnosticsOps.PutLine[
      "	Adjusting window boundaries-Bring up the Window Manager menu in the HELP by chording and then release the chord opposite ""Drag"". The cursor changes to an arrow pointing to a line. The line represents a border of the window. Move the cursor in and out of the window and notice how the cursor changes to point in different directions as it exits the window through different borders. The ""Drag"" command moves (drags) one border of the window either outward (making the window bigger) or inward (making the window smaller). The border is moved to wherever the cursor is when you click POINT."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    HelpThree[];
    END --HelpToo-- ;

  HelpThree: PROCEDURE =
    BEGIN  --HelpThree--
    DiagnosticsOps.PutLine[
      "	Growing and shrinking a window-Whereas ""Drag"" only allows you to adjust the position of one window border, the ""Grow"" command adjusts all borders simultaneously. Bring up the Window Manager menu in the Empty Window and select ""Grow"". The cursor now looks like a corner with an ""G"" in it. Move the ""corner"" cursor around; it changes shape just like the Move! cursor.  Position the cursor and click POINT. ""Grow"" allows you to pull a corner of the window in any direction, growing or shrinking the window along its width and height."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	Size-""Size"" turns the window from a normal size into a tiny rectangle, showing a portion of the window's name, and places it at the bottom edge of your screen. Try it. If another window is covering the bottom of the screen, then you may have to move it in order to see the tiny rectangle. When a window is tiny, invoking ""Size"" over that window puts it back to its original size and places it on top of all other windows."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	Zoom-""Zoom"" causes the window to grow to take up all available display space. Clicking ""Zoom"" again puts the window back to its normal size. Invoke ""Zoom"" twice in the Empty Window to make it large and reduce it again. Clicking ""Zoom"" over one of the tiny rectangles at the bottom of the screen causes that window to take up the entire screen. Clicking ""Zoom"" again shrinks the window to a normal-sized window (not back down to a tiny rectangle)."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	Top-""Top"" causes the window to be displayed on top of all other windows. ""Bottom"" causes the window to be placed at the bottom of the window stack. Invoking either command may cause one or more windows to be completely obscured. There will be times, when you begin using the Mesa development environment more, that you will have many windows on the screen at one time. Some may completely cover others. It is not uncommon to forget a window when it is on the bottom of a stack and thereby invisible. You can find out which windows you have by invoking ""Bottom"" in the visible windows; by making all windows tiny with ""Size""; or by making sure that at least a tiny corner of each window is visible.  The Window Manager menu can be opened for a particular window as long as the visible part of the window is the width of the cursor."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutCR[];
    DiagnosticsOps.PutLine["Accelerators"L];
    DiagnosticsOps.PutLine[
      "	You may use shortcuts to save time when rearranging windows. These shortcuts are called ""accelerators.""  Try moving the cursor to the name stripe of the Empty Window (the white-on-black ""label"" at the top of the window). As the cursor enters the herald, it changes to a bulls-eye shape and sections of the herald become video-inverted (now black-on-white instead of white-on-black). Move the cursor from the left side of the herald to the right side. You will see that the herald is divided into three sections."L];
    DiagnosticsOps.PutLine[
      "	The left and right sections of the herald offer quick ways to invoke the ""Move"", ""Grow"", ""Drag"", ""Top"", and ""Bottom"" commands of the Window Manager menu."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	To invoke the ""Top"" and ""Bottom"" commands, position the cursor in the left or right section of the Empty Window's herald (the cursor will change to a bulls-eye shape and the selected section of the herald will video-invert). If the Empty Window is already on top of all other windows on the screen, clicking POINT will invoke the ""Bottom"" command. If the window is underneath any other window, clicking POINT will invoke the ""Top"" command. Each time that you click POINT, you will invoke the opposite of whichever command you invoked last time."L];
    DiagnosticsOps.PutLine[
      "	Until now, you have only used the left and right sections of a window's herald. Now you will learn how to use the center section of a window's herald to invoke the ""Size"" and ""Zoom"" commands."L];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "	Position the cursor in the center section of the Empty Window's herald. Clicking POINT will invoke the ""Zoom"" command. Clicking ADJUST will invoke the ""Size"" command. Experiment a little with the accelerated ""Zoom"" and ""Size"" commands."L];
    DiagnosticsOps.PutCR[];
    DiagnosticsOps.PutLine["Thumbing"L];
    DiagnosticsOps.PutLine[
      "	Thumbing is analogous to opening a book by placing your thumb at the approximate position of the section you want to start reading, and pulling the book open at that point. Thumbing is very useful when you have a large file."L];
    DiagnosticsOps.PutCR[];
    IF NOT DiagnosticsOps.More[] THEN RETURN;
    DiagnosticsOps.PutLine[
      "Chording while the cursor is in the scroll bar changes the cursor to a right-pointing arrow which can be moved up or down in the scollbar. If it is moved to the top of the scroll bar, the window contents will be scrolled back to the beginning when you release the chord. Releasing the chord while the cursor is outside the scroll bar aborts the operation."L];
    END --HelpThree-- ;

  END.