Google
 

Trailing-Edge - PDP-10 Archives - decus_20tap4_198111 - decus/20-0125/gt40.man
There are 2 other files named gt40.man in the archive. Click here to see a list.

















                         GT40 SOFTWARE PACKAGE
                             GIDUS - DISLIB



                          AUTHOR - BILL WILDER

                         COMPLETED: 15-MARCH-76


                THIS DOCUMENTATION WAS LAST UPDATED ON:

                             21-DECEMBER-76
                                                                  Page 2


                           TABLE OF CONTENTS



CHAPTER I GT40 HARDWARE AND PROGRAMMING CONCEPTS             1-1
  1.1  GENERAL HARDWARE                                      1-1
  1.2  DISPLAY PROCESSOR                                     1-2
  1.3  DISPLAY INSTRUCTIONS                                  1-3
  1.4  DPU DATA TYPES                                        1-5
  1.5  GT40 PROGRAMMING EXAMPLES                             1-7
    1.5.1  MACRO-11 EXAMPLE                                  1-9
  1.6  GT40 PROGRAMMING SUMMARY                             1-10


CHAPTER II GIDUS-DISLIB INTERACTION                          2-1


CHAPTER III USING GIDUS                                      3-1
  3.1  GT40 BOOTSTRAP PROGRAM                                3-1
  3.2  PROGRAM LOAD EXAMPLE                                  3-3
  3.3  INTERACTING WITH GIDUS                                3-6
  3.4  GIDUS COMMANDS                                       3-11
  3.5  GIDUS ERROR MESSAGES                                 3-14
    3.5.1  WARNINGS                                         3-14
    3.5.2  FATAL ERRORS                                     3-15
  3.6  RE-STARTING GIDUS                                    3-16
                                                                  Page 3


CHAPTER IV USING DISLIB                                      4-1
  4.1  INITIALIZATION ROUTINES (CATEGORY I)                  4-3
    4.1.1  SUBROUTINE START                                  4-3
  4.2  DISPLAY CREATION ROUTINES (CATEGORY II)               4-5
    4.2.1  SUBROUTINE SCALE                                  4-6
    4.2.2  SUBROUTINE INIT                                   4-8
    4.2.3  SUBROUTINE POINT                                 4-10
    4.2.4  SUBROUTINE VECTOR                                4-11
    4.2.5  SUBROUTINE MOVE                                  4-12
    4.2.6  SUBROUTINE JOIN                                  4-13
    4.2.7  SUBROUTINE DOT                                   4-14
    4.2.8  SUBROUTINE TEXT                                  4-15
    4.2.9  SUBROUTINE SETMOD                                4-17
    4.2.10 SUBROUTINE SETA                                  4-18
    4.2.11 SUBROUTINE ADFILE                                4-19
    4.2.12 INTEGER FUNCTION DSTAT                           4-21
    4.2.13 SUBROUTINE GETPOS                                4-22
  4.3  DISPLAY MANIPULATION ROUTINES (CATEGORY III)         4-23
    4.3.1  SUBROUTINE ENABLE                                4-23
    4.3.2  SUBROUTINE DISABL                                4-25
    4.3.3  SUBROUTINE DELETE                                4-26
    4.3.4  SUBROUTINE MOVFIL                                4-27
  4.4  POINTER ROUTINES (CATEGORY IV)                       4-28
    4.4.1  SUBROUTINE GETMP                                 4-28
    4.4.2  SUBROUTINE MOVEMP                                4-29
    4.4.3  SUBROUTINE GETAP                                 4-30
    4.4.4  SUBROUTINE MOVEAP                                4-30
  4.5  LIGHT PEN ROUTINES (CATEGORY V)                      4-31
    4.5.1  SUBROUTINE LPON                                  4-31
    4.5.2  SUBROUTINE LPOFF                                 4-32
    4.5.3  SUBROUTINE LPHIT                                 4-33
    4.5.4  SUBROUTINE LLPHIT                                4-34
  4.6  GT40 MANIPULATION ROUTINES (CATEGORY VI)             4-35
    4.6.1  SUBROUTINE CLEAR                                 4-35
    4.6.2  SUBROUTINE PHOTO                                 4-36
    4.6.3  SUBROUTINE RESET                                 4-37
  4.7  LOG ROUTINES (CATEGORY VII)                          4-38
    4.7.1  SUBROUTINE LOGON                                 4-38
    4.7.2  SUBROUTINE LOGOFF                                4-39
    4.7.3  SUBROUTINE ERROR                                 4-40
  4.8  OPTION ROUTINES (CATEGORY VIII)                      4-41
    4.8.1  SUBROUTINE ADDOPT                                4-41
    4.8.2  SUBROUTINE SNDOPT                                4-43
    4.8.3  SUBROUTINE GETOPT                                4-44
    4.8.4  SUBROUTINE OPTOFF                                4-46
    4.8.5  SUBROUTINE OPTON                                 4-47
    4.8.6  SUBROUTINE CLROPT                                4-48
                                                                  Page 4


  4.9  TERMINATION ROUTINES (CATEGORY IX)                   4-49
    4.9.1  SUBROUTINE FINI                                  4-49
  4.10 INTERNAL ROUTINES (CATEGORY X)                       4-50


CHAPTER V DISLIB COMMON BLOCKS                               5-1
  5.1  LOG BLOCK                                             5-2
  5.2  SCALE BLOCK                                           5-3
  5.3  MODE BLOCK                                            5-4
  5.4  STATUS-A BLOCK                                        5-5
  5.5  OPTION BLOCK                                          5-6
  5.6  MISCELLANEOUS BLOCK                                   5-7


CHAPTER VI DISLIB PROGRAMMING EXAMPLES                       6-1
  6.1  CAT-EYE DEMONSTRATION                                 6-1
  6.2  ELLIPSE DEMONSTRATION                                 6-4
  6.3  TEXT DEMONSTRATION                                    6-7
  6.4  OPTION DEMONSTRATION                                  6-9


CHAPTER VII DISLIB SUMMARY                                   7-1
  7.1  COMPILING AND RUNNING PROGRAMS                        7-1
  7.2  STOPPING YOUR PROGRAM                                 7-2
  7.3  SUMMARY                                               7-3
                                                                  Page 5


INTRODUCTION:

     THIS MANUAL IS A USER'S GUIDE TO THE INTERACTIVE  GRAPHICS  PACKAGE
(GIDUS - DISLIB) DEVELOPED AT ACADIA UNIVERSITY.  ACADIA'S MAIN COMPUTER
IS A SMALL DECSYSTEM-10 WITH A KA PROCESSOR  AND  112K  OF  MAIN  MEMORY
(I.E.   A  1040).   ONE OF THE TERMINALS CONNECTED WITH THE 10 IS A GT40
GRAPHICS TERMINAL (FOR A DESRIPTION OF THE HARDWARE AND  PROGRAMMING  OF
THE GT40, SEE THE FOLLOWING SECTION).

     GIDUS, WHICH STANDS FOR "GT40 INTERACTIVE DISPLAY  UTILITY  SYSTEM"
IS  A  MINI-OPERATING  SYSTEM  FOR  THE  GT40.  ITS PURPOSE IS TO HANDLE
COMMUNICATIONS WITH THE 10, AND PROVIDE MEMORY MANAGEMENT FACILITIES FOR
DISPLAY  FILES WHICH ARE TRANSMITTED BY THE 10.  DISLIB WHICH STANDS FOR
"DISPLAY LIBRARY" IS A COLLECTION OF FORTRAN CALLABLE SUBROUTINES,  USED
TO CREATE DISPLAY FILES AND TRANSMIT THEM TO THE GT40.

     AN IMPORTANT CONCEPT TO UNDERSTAND FROM THE BEGINNING IS - "WHAT IS
A  DISPLAY FILE?".  THE NAME IS A BIT MISLEADING SINCE A DISPLAY FILE IS
NOT A FILE IN THE USUAL  SENSE  OF  THE  WORD  (I.E.   A  COLLECTION  OF
INFORMATION ON SECONDARY STORAGE OR SOME EXTERNAL MEDIUM).  TO DISLIB, A
DISPLAY FILE IS AN INTEGER VECTOR OF SOME ARBITRARY LENGTH.  THE DISPLAY
CREATION  ROUTINES USE THESE VECTORS AS A HOLDING AREA IN WHICH TO BUILD
A DISPLAY.  ONCE THE DISPLAY IS COMPLETED, IT IS TRANSMITTED TO THE GT40
WHERE GIDUS ADDS IT TO A LINKED LIST OF PREVIOUSLY CREATED DISPLAYS.  TO
THE GT40, THIS DISPLAY FILE BECOMES A DISPLAY PROGRAM TO BE EXECUTED  BY
THE DPU (SEE FOLLOWING SECTION).











                               CHAPTER 1

                   HARDWARE AND PROGRAMMING CONCEPTS



1.1  GENERAL HARDWARE:

     THE GT40 IS A STAND ALONE MINI-COMPUTER.  IT IS A PDP-11/05 WITH 8K
WORDS  OF  MAIN MEMORY (8192, 16-BIT WORDS).  THE 11/05 IS MEMBER OF THE
PDP-11 FAMILY OF COMPUTERS AND HAS AN INSTRUCTION SET WHICH IS A  SUBSET
OF  AN  11/45 IN ADDITION TO BEING A STAND ALONE MINI-COMPUTER, THE GT40
CONTAINS THE HARDWARE NECESSARY FOR DISPLAYING GRAPHICS.

     THIS DISPLAY HARDWARE CONSISTS OF A CATHODE RAY  TUBE(CRT),  CALLED
THE  VR14,  A  DISPLAY  PROCESSING  UNIT  (THE  DPU),  AND  A LIGHT-PEN.
CERTAINLY THE MOST VISIBLE OF THESE ELEMENTS IS THE CRT, BUT IT  IS  THE
DPU  WHICH  IS  OF  MOST  INTEREST  TO  THE PROGRAMMER WISHING TO CREATE
DISPLAYS.  JUST AS A PROGRAMMER HAS  TO  WRITE  A  PROGRAM  TO  SUM  TWO
NUMBERS,  IT  IS  ALSO NECESSARY TO WRITE A PROGRAM TO DISPLAY A LINE ON
THE SCREEN OF THE GT40.  THE DIFFERENCE BETWEEN THE TWO PROGRAMS IS THAT
THE  FIRST  WOULD BE EXECUTED BY THE CPU (CENTRAL PROCESSING UNIT) WHILE
THE SECOND WOULD BE EXECUTED BY THE DPU.

     PROGRAMMING THE DPU, HOWEVER, IS ACTUALLY QUITE A SIMPLE TASK.  THE
CPU HAS MANY, MANY INSTRUCTIONS, AND SEVERAL DIFFERENT ADDRESSING MODES.
IN ADDITION, DATA TYPES ARE DETERMINED BY THE PROGRAM RUNNING (I.E.  DID
THE  CPU  JUST  FETCH  A  WORD  CONTAINING AN INTEGER, OR FLOATING POINT
NUMBER, OR DID IT JUST FETCH TWO BYTES REPRESENTING  ASCII  CHARACTERS).
THE  DPU ON THE OTHER HAND HAS VERY FEW INSTRUCTIONS (ONLY FIVE) AND HAS
ONLY SEVEN FIXED DATA TYPES.  BOTH THE CPU  AND  THE  DPU  WORK  ON  THE
STORED  PROGRAM CONCEPT.  THIS MEANS PROGRAM AND DATA ARE BOTH CONTAINED
IN CORE MEMORY (THE 8K MENTIONED EARLIER) AND IT IS THE JOB OF  WHATEVER
PROCESSOR  INVOLVED  TO  FETCH  INSTRUCTIONS  AND  INTERPRET  DATA.  ONE
SIGNIFICANT DIFFERENCE BETWEEN THE PROCESSORS  IS  THAT  THE  CPU  IS  A
READ/WRITE  PROCESSOR  (HAVING  THE  ABILITY  TO MODIFY WORDS IN MEMORY)
WHILE THE DPU IS  A  READ  ONLY  PROCESSOR.   ONCE  THE  DPU  HAS  BEGUN
EXECUTING  A  DISPLAY PROGRAM IT SIMPLY RUNS UNTIL IT ENCOUNTERS THE END
OF THE PROGRAM AND THEN STOPS.  IT HAS NO CAPABILITY  OF  MODIFYING  THE
PROGRAM  IT  IS  EXECUTING.   NOTE  THAT  THE  CPU AND THE DPU SHARE THE
AVAILABLE MEMORY.  IT  IS  NECESSARY  THAT  THE  PROGRAMS  FOR  THE  TWO
PROCESSORS  ARE KEPT SEPARATE.  IF THE CPU ATTEMPTS TO EXECUTE A DISPLAY
PROGRAM OR THE DPU ATTEMPTS  TO  EXECUTE  A  CPU  PROGRAM,  DISASTER  IS
GUARANTEED.   UNPREDICTABLE RESULTS WILL OCCUR AND THE PROGRAM WILL HAVE
TO BE RE-STARTED, OR MORE LIKELY RE-LOADED.
HARDWARE AND PROGRAMMING CONCEPTS                               Page 1-2


     THE CPU, BEING THE MORE POWERFUL AND GENERAL  PURPOSE  OF  THE  TWO
PROCESSORS,  IS  THE DOMINANT PROCESSOR OF THE GT40.  GENERALLY THE GT40
IS PROGRAMMED SO THAT THE CPU CREATES A PROGRAM FOR THE DPU, AND  STARTS
IT  RUNNING.   FURTHERMORE,  IF  THE  DPU  EVER  CAUSES  AN INTERRUPT (A
LIGHT-PEN HIT FOR EXAMPLE) IT IS THE CPU WHICH  SERVICES  THE  INTERRUPT
AND RE-STARTS THE DPU.



1.2  DISPLAY PROCESSOR:

     AS MENTIONED EARLIER THE DPU HAS FIVE INSTRUCTIONS AND  SEVEN  DATA
TYPES.   BEFORE  DISCUSSING THESE INSTRUCIONS AND DATA TYPES A FEW TERMS
WILL BE EXPLAINED:

     THE GT40 HAS 1024 VIEWABLE POINTS IN THE X DIRECTION (THE BASE LINE
OF THE SCREEN) AND 768 VIEWABLE POINTS IN THE Y DIRECTION.  THE DISTANCE
BETWEEN THESE POINTS IS REFERRED TO AS A RASTER UNIT.   THE  LOWER  LEFT
HAND  CORNER OF THE SCREEN IS RASTER POSITION (0, 0) AND THE UPPER RIGHT
HAND CORNER IS RASTER POSITION (1023, 767).

     DISPLAY DATA ARE EITHER RELATIVE OR ABSOLUTE.   AN  EXAMPLE  OF  AN
ABSOLUTE  DATUM  WOULD  BE  A  POINT  SPECIFIED  BY  A  PHYSICAL X AND Y
CO-ORDINATE.  A RELATIVE DATUM WOULD BE SPECIFIED AS  OFFSETS  FROM  THE
CURRENT  POSITION  OF  THE  DISPLAY  BEAM.   A  DISPLAY  THAT IS TOTALLY
RELATIVE ABOUT AN ABSOLUTE POINT HAS THE ADVANTAGE  THAT  CHANGING  THAT
ONE  POINT  WILL  MOVE THE ENTIRE DISPLAY.  A DISPLAY CONSISTING OF MORE
THAN ONE ABSOLUTE POINT, CANNOT BE MOVED IN THE SAME MANNER, UNLESS  ALL
ABSOLUTE POINTS ARE RELOCATED.
HARDWARE AND PROGRAMMING CONCEPTS                               Page 1-3


1.3  DISPLAY INSTRUCTIONS:

     1) SET GRAPHIC MODE:

     THIS INSTRUCTION IS THE MOST IMPORTANT.  IT INFORMS THE DPU HOW  TO
INTERPRET THE DATA FOLLOWING (I.E.  LINES, POINTS, OR CHARACTERS, ETC.).
THE SGM INSTRUCTION ALSO INFORMS THE  DPU  OF  GRAPHIC  CHARACTERISTICS.
THESE  INCLUDE SUCH THINGS AS DISPLAY INTENSITY (FROM 0 - LOWEST, TO 7 -
BRIGHTEST), BLINK (A DISPLAY,  OR  A  PORTION  OF  IT  MAY  BE  HARDWARE
BLINKED),  THE  TYPE  OF  LINE TO DRAW (SOLID, LONG-DASH, SHORT-DASH, OR
DOT-DASH), AND FINALLY WHETHER THE DISPLAY IS  LIGHT  PEN  SENSITIVE  OR
NOT.  AN SGM INSTRUCTION REMAINS IN EFFECT UNTIL ANOTHER SGM INSTRUCTION
IS EXECUTED.

     2 ) DISPLAY JUMP INSTRUCTION (DJMP)

     THE  NEXT  MOST  IMPORTANT  INSTRUCTION   IS   THE   DISPLAY   JUMP
INSTRUCTION.   THIS  INSTRUCTION  INFORMS  THE  DPU  OF WHICH ADDRESS IT
SHOULD BRANCH TO IN ORDER TO PICK UP THE NEXT INSTRUCTION.   NORMALLY  A
DISPLAY  IS  EXECUTED  SEQUENTIALLY (I.E.  ONE WORD AFTER ANOTHER).  THE
DJMP INSTRUCTION ALLOWS A USER TO CREATE A DISPLAY PROGRAM WHICH IS  NOT
STORED CONTIGUOUSLY IN MEMORY.

     3) LOAD STATUS REGISTER A (LOAD-A)

     THIS INSTRUCTION IS USED TO INFORM THE DPU  OF  ADDITIONAL  DISPLAY
CHARACTERISTICS.   TWO OF THESE PARAMETERS ARE ITALICS (I.E.  CHARACTERS
WILL BE ITALICIZED INSTEAD OF NORMAL FONT), AND  LIGHT  PEN  SENSITIVITY
(I.E.   POINTS  OF  LIGHT  PEN  INTERACTION  WILL  BE  INTENSIFIED).  IN
ADDITION THIS INSTRUCTION CAN BE SET UP TO STOP THE DPU.  NOTE THAT WHEN
THE DPU IS STOPPED THE DISPLAY ON THE SCREEN WILL BEGIN TO FADE.  UNLESS
THE DPU IS RE-STARTED (BY THE CPU) WITHIN A SHORT TIME, THE DISPLAY WILL
DISAPPEAR  ENTIRELY.   OFTEN  DJMPS ARE USED TO PUT THE DPU INTO A LOOP,
ENDLESSLY EXECUTING A DISPLAY PROGRAM OVER AND OVER.  A DISPLAY  HAS  TO
BE  CONSTANTLY  REFRESHED OR IT WILL DISAPPEAR FROM THE SCREEN.  THIS IS
DUE TO THE FACT THAT THE PHOSPHOR, AT ANY PARTICULAR POINT ON THE SCREEN
BEGINS  TO FADE IMMEDIATELY AFTER BEING INTENSIFIED BY THE DISPLAY BEAM.
IF A DISPLAY PROGRAM IS QUITE LONG, YOU WILL NOTICE THE DISPLAY FLICKER,
DUE  TO  THE LENGTH OF TIME IT TAKES FOR THE DISPLAY BEAM TO REFRESH ANY
GIVEN POINT.

     WITH THIS IN MIND, THE QUESTION IMMEDIATELY OCCURS - "WHY STOP  THE
DISPLAY?".   DISPLAY  STOPS ARE SOMETIMES NECESSARY DUE TO THE FACT THAT
THE CPU AND DPU BOTH SHARE THE SAME  MEMORY.   IT  IS  OFTEN  USEFUL  TO
MODIFY  A  DISPLAY PROGRAM (E.G.  SUPPOSING YOU WANTED TO MOVE A DISPLAY
AROUND).  A POSSIBLE CONFLICT MIGHT OCCUR IF THE CPU  WAS  TO  MODIFY  A
WORD  OF  A  DISPLAY  FILE AT THE SAME TIME THE DPU ATTEMPTED TO EXECUTE
THAT WORD AS AN INSTRUCTION, OR INTERPRET IT AS DATA.  IF THIS  CONFLICT
IS  ALLOWED  TO GO UNRESOLVED (I.E.  THE CPU ACTIVELY UPDATING A RUNNING
DISPLAY) THE DISPLAY MIGHT CRASH (INDEED THIS DOES OCCUR).  THE SOLUTION
TO  THE  PROBLEM IS TO PLACE A LOAD-A INSTRUCTION (WITH STOP BITS ON) AT
THE END OF THE DISPLAY.  THE CPU CAN DETECT WHEN THE STOP HAS  OCCURRED,
MODIFY  THE  DISPLAY PROGRAM, AND RE-START THE DISPLAY.  THIS ALL OCCURS
SO QUICKLY THAT THE DISPLAY SEEMS CONSTANTLY VISIBLE.
HARDWARE AND PROGRAMMING CONCEPTS                               Page 1-4


     THE DPU HAS TWO ADDITIONAL INSTRUCTIONS (NEITHER OF WHICH ARE  USED
BY GIDUS DISPLAYS).

     4) LOAD STATUS REGISTER B (LOAD-B)

     THIS INSTRUCTION IS USED TO SET THE INCREMENT BETWEEN  POINTS  WHEN
INTERPRETING DATA IN GRAPHPLOT MODE.  GRAPHPLOT MODE IS DISCUSSED LATER,
BUT IS NOT IMPLEMENTED IN THE GIDUS-DISLIB SYSTEM BECAUSE OF ITS LIMITED
USE.

     5) DISPLAY NO-OPERATION (DNOP)

     THIS IS A DISPLAY INSTRUCTION WHICH CAUSES NOTHING TO  HAPPEN.   IT
IS  NOT  QUITE  AS  USELESS  AS  IT  MIGHT  SEEM,  SINCE IT IS SOMETIMES
CONVENIENT TO CREATE A DISPLAY WHICH IS LONGER THAN MIGHT  INITIALLY  BE
NEEDED.  DNOPS CAN BE USED TO PAD A DISPLAY IN THIS MANNER.  NONE OF THE
DISLIB DISPLAY CREATION ROUTINES ADDS DNOPS TO A DISPLAY FILE.
HARDWARE AND PROGRAMMING CONCEPTS                               Page 1-5


1.4  DPU DATA TYPES:

     AS MENTIONED ABOVE, THE DPU  IS  CAPABLE  OF  DISTINGUISHING  SEVEN
DIFFERENT  TYPES  OF  DISPLAY  DATA.   HOW  A PARTICULAR WORD FETCHED IS
INTERPRETED BY THE DPU DEPENDS ON THE DATA MODE LAST SELECTED BY AN  SGM
INSTRUCTION.  THESE DATA TYPES ARE AS FOLLOWS:

     1) CHARACTER MODE (RELATIVE)

     THE NEXT  DATA  WORD  FETCHED  IS  ASSUMED  TO  CONTAIN  TWO  ASCII
CHARACTERS.   THESE  ARE  DRAWN ON THE SCREEN AT THE CURRENT POSITION OF
THE DISPLAY BEAM.  THE CHARACTERS ARE OF A FIXED SIZE ( 6  BY  8  RASTER
DOT  MATRIX),  BUT  ITALICS  OR  NORMAL FONT MAY BE SELECTED BY A LOAD-A
INSTRUCTION.  SINCE CHARACTERS ARE DRAWN BY THE  HARDWARE,  RATHER  THAN
SOFTWARE, THEIR SIZE AND ROTATION CANNOT BE VARIED.

     2) POINT MODE (ABSOLUTE)

     THE NEXT TWO DATA WORDS FETCHED ARE ASSUMED TO BE ABSOLUTE  (X  AND
Y)  CO-ORDINATES.  THE DISPLAY BEAM CONTINUES DRAWING GRAPHICS FROM THAT
POINT.  THE POINT MAY BE ENABLED OR DISABLED; IF ENABLED, THE  POINT  IS
VISIBLE.

     3) LONG VECTOR MODE (RELATIVE)

     THE NEXT  TWO  DATA  WORDS  FETCHED  ARE  ASSUMED  TO  BE  RELATIVE
DISPLACEMENTS  (FROM  THE CURRENT POSITION OF THE DISPLAY BEAM) IN THE X
AND Y DIRECTIONS.  THESE DISPLACEMENTS MAY BE POSITIVE OR NEGATIVE,  AND
THE  VECTOR  SO  DESCRIBED  MAY  BE  ENABLED  OR DISABLED.  IF ENABLED A
VISIBLE LINE IS ADDED TO THE SCREEN.  IF DISABLED AN INVISIBLE  LINE  IS
ADDED  TO  THE  SCREEN,  THE  EFFECT BEING TO MOVE THE DISPLAY BEAM.  AN
INVISBLE VECTOR IS SOMEWHAT ANALAGOUS TO MOVING A PLOTTER PEN, WITH  THE
PEN  RAISED.  AN INVISIBLE VECTOR IS PREFERRED TO A POINT, BECAUSE IT IS
RELATIVE.

     4) SHORT VECTOR MODE (RELATIVE)

     THIS WORKS THE SAME WAY AS LONG VECTORS, EXCEPT ONLY  ONE  WORD  IS
USED  TO  CONTAIN  THE X AND Y DEFLECTIONS.  SINCE ONLY ONE WORD IS USED
THERE IS A MAXIMUM DISPLACEMENT OF 63 RASTER UNITS IN EITHER  DIRECTION.
IF THERE ARE A GROUP OF POINTS TO BE JOINED TOGETHER (AND THEY ARE CLOSE
ENOUGH) THEY COULD BE JOINED BY EITHER LONG  OR  SHORT  VECTORS.   SHORT
VECTORS  WOULD  BE  PREFERRED  SINCE  IT  RESULTS  IN  A SMALLER DISPLAY
PROGRAM.

     5) RELATIVE POINT MODE (RELATIVE)

     RELATIVE POINT MODE IS TO POINT MODE WHAT SHORT VECTORS ARE TO LONG
VECTORS.   THERE IS ONE CRUCIAL DIFFERENCE HOWEVER, AND THAT IS THE FACT
THAT POINT MODE IS ABSOLUTE, BUT RELATIVE  POINT  MODE  IS  OBVIOUSLY  -
RELATIVE.
HARDWARE AND PROGRAMMING CONCEPTS                               Page 1-6


     6) GRAPH-X MODE (ABSOLUTE)

     THIS DATA MODE IS USED FOR PLOTTING FUNCTIONS IN X OF Y.  THE  NEXT
DATA WORD FETCHED IS AN ABSOLUTE X CO-ORDINATE.  THE Y INCREMENT BETWEEN
POINTS IS ESTABLISHED  WITH  A  LOAD-B  INSTRUCTION.   (GRAPH-X  IS  NOT
SUPPORTED BY THE GIDUS-DISLIB PACKAGE).

     7) GRAPH-Y MODE (ABSOLUTE)

     THIS IS VERY SIMILAR TO GRAPH-X MODE EXCEPT THAT THIS IS  USED  FOR
PLOTTING  FUNCTIONS  IN  Y  OF  X.  (AGAIN THIS MODE IS NOT SUPPORTED BY
GIDUS-DISLIB).  GRAPH-PLOT MODE IS OF LIMITED USE FOR TWO  REASONS.   1)
IT  CREATES AN ABSOLUTE DISPLAY, AND 2) GRAPH-PLOT PLOTS A FUNCTION WITH
POINTS INSTEAD OF VECTORS, WHICH MEANS YOUR  INCREMENT  MUST  BE  CHOSEN
QUITE SMALL BEFORE A MEANINGFUL FUNCTION APPEARS.
HARDWARE AND PROGRAMMING CONCEPTS                               Page 1-7


1.5  GT40 PROGRAMMING EXAMPLE:

     THE FOLLOWING IS AN EXAMPLE OF A DISPLAY PROGRAM FOLLOWED BY A  FEW
NOTES.   HOPEFULLY, IT WILL MAKE THE PRECEDING DISCUSSION CLEARER.  NOTE
THAT A LINE PRECEDED BY I INDICATES AN INSTRUCTION, AND A LINE  PRECEDED
BY D INDICATES A DATA WORD:


START:   I-      SGM (POINT, INTENSITY 2, NO-BLINK, SOLID LINE)
         D-      100 (DISABLED)
         D-      100
         I-      SGM (LONG VECTOR)
         D-      100 (ENABLED)
         D-      0
         D-      0 (ENABLED)
         D-      100
         I-      SGM (LONG VECTOR, DASHED LINE)
         D-      -100 (ENABLED)
         D-      0
         I-      SGM (LONG VECTOR, BLINK)
         D-      0 (ENABLED)
         D-      -100
         I-      SGM (SHORT VECTOR)
         D-      10 X, -30 Y (DISABLED)
         I-      SGM (CHARACTER, NO BLINK)
         I-      LOAD-A (ITALICS)
         D-      BO
         D-      X<BLANK>
         I-      DJMP
         I-      START

     NOTES:

     EACH LINE CORRESPONDS TO ONE WORD OF MEMORY.

     THE FIRST INSTRUCTION IS AN SGM WHICH SPECIFIES THAT DATA FOLLOWING
IS  TO  BE INTERPRETED AS ABSOLUTE POINTS, THERE SHOULD BE NO BLINK, AND
ANY LINES DRAWN SHOULD BE SOLID.

     THE NEXT TWO WORDS GIVE THE ABSOLUTE  LOCATION  WHERE  THE  DISPLAY
BEAM SHOULD START.  SINCE THE POINT IS DISABLED, NO DOT WOULD APPEAR.

     THE NEXT  INSTRUCTION  SPECIFIES  THAT  DATA  FOLLOWING  IS  TO  BE
INTERPRETED  AS  LONG VECTORS WHICH ARE RELATIVE.  THE VECTOR IS ENABLED
(I.E.  VISIBLE) AND EXTENDS  100  RASTER  UNITS  TO  THE  RIGHT,  THE  Y
POSITION  IS  UNCHANGED.   THIS WOULD POSITION THE DISPLAY BEAM AT (200,
100) - ABSOLUTE RASTER CO-ORDINATES.

     THE NEXT TWO WORDS (AGAIN LONG VECTOR), MEAN DRAW A  SOLID  VISIBLE
LINE,  STRAIGHT  UP - 100 RASTER UNITS.  THIS WOULD POSITION THE DISPLAY
BEAM AT (200, 200) - ABSOLUTE RASTER.

     THE FOLLOWING INSTRUCTION INDICATES THAT THE  DATA  TYPE  IS  STILL
LONG VECTORS, BUT LINES SHOULD NOW BE DASHED.
HARDWARE AND PROGRAMMING CONCEPTS                               Page 1-8


     THE NEXT TWO DATA WORDS CAUSE A VISIBLE DASHED VECTOR TO  BE  DRAWN
FROM  (200,  200)  TO  (100, 200) LEAVING THE DISPLAY BEAM AT THE LATTER
POSITION.

     THE FOLLOWING INSTRUCTION INDICATES THAT THE  DATA  TYPE  IS  STILL
LONG VECTOR, LINE TYPE IS DASHED, AND THAT THE VECTOR SHOULD BLINK.

     THE NEXT TWO DATA WORDS CAUSE A DASHED, BLINKING VECTOR TO BE DRAWN
FROM  (100,  200)  TO  (100,  100) LEAVING THE DISPLAY BEAM WHERE IT WAS
INITIALLY POSITIONED BY THE FIRST POINT INSTRUCTION.

     THE NEXT INSTRUCTION SPECIFIES SHORT VECTORS.

     THE FOLLOWING DATA WORD CAUSES THE DISPLAY BEAM TO MOVE TO LOCATION
(110, 70) BUT NO VECTOR IS DRAWN.

     THE NEXT  INSTRUCTION  INDICATES  THAT  DATA  FOLLOWING  IS  TO  BE
INTERPRETED AS CHARACTERS, AND THAT THEY SHOULD NOT BLINK.

     THE NEXT INSTRUCTION INDICATES THAT ITALICS FONT IS ENABLED.   NOTE
THAT  THE  LOAD-A INSTRUCTION DOES NOT CHANGE THE GRAPHIC MODE (I.E.  IT
IS STILL CHARACTER MODE).

     THE NEXT TWO DATA WORDS CONTAIN THE CHARACTERS "BOX "  WHICH  WOULD
BE DISPLAYED ON THE SCREEN, STARTING AT LOCATION (110, 70).

     FINALLY, THE LAST INSTRUCTION (WHICH IS TWO WORDS LONG) IS  A  DJMP
BACK  TO THE START OF THIS DISPLAY PROGRAM.  A DJMP IS THE ONLY TWO WORD
DISPLAY INSTRUCTION.  (THINK OF "START:" IN  THE  ABOVE  EXAMPLE,  AS  A
SYMBOLIC ADDRESS).


                                  NOTE


                    IF THE  CPU  ALTERED  THE  SECOND  OR
               THIRD  WORD  OF  THIS  PROGRAM, THE EFFECT
               WOULD BE TO MOVE THE ENTIRE DISPLAY.
HARDWARE AND PROGRAMMING CONCEPTS                               Page 1-9


1.5.1  MACRO-11 PROGRAM EXAMPLE:

     HERE IS THE PRECEDING EXAMPLE, CODED IN MACRO-11.



         .TITLE  DEMO - DEMONSTRATION PROGRAM
         .MCALL  GRAPHIC                 ; RETRIEVE MACROS
         GRAPHIC                         ; DO THE DEFINITIONS
         ;
         ; THIS DEMONSTRATION PROGRAM ILLUSTRATES DPU
         ; PROGRAMMING. THIS PROGRAM DRAWS A BOX ON THE
         ; SCREEN AT LOCATION (100, 100)
         ;
BEGIN:   MOV     #START,@#DPC            ; START PROGRAM RUNNING
         WAIT                            ; AND HANG UP THE CPU
         .RADIX  10
         ;
         ;
START:   POINT ! INT2 ! BLKOFF ! LINE0
         100
         100
         LONGV
         INTX ! 100
         0
         INTX
         100
         LONGV ! LINE1
         INTX ! MINUSX ! 100
         0
         LONGV ! BLKON
         INTX
         MINUSY ! 100
         RELATV
         ^O2536
         CHAR ! BLKOFF
         STATSA ! ITAL1
         .ASCII  /BOX /
         DJMP
         START
         ;
         ;
         .END    BEGIN
HARDWARE AND PROGRAMMING CONCEPTS                              Page 1-10


1.6  GT40 PROGRAMMING SUMMARY:

     ANYONE  SERIOUS  ABOUT  PROGRAMMING  THE  GT40   TO   ITS   FULLEST
CAPABILITIES,  OR  INTERESTED IN UNDERSTANDING AS MUCH AS POSSIBLE ABOUT
ITS OPERATION, WOULD BE ADVISED TO PROGRAM IT IN MACHINE LANGUAGE.   ONE
OF THE DECSYSTEM-10 CUSPS IS "MACDLX.SHR" WHICH IS A CROSS ASSEMBLER FOR
PDP 11'S.  ONCE YOUR PROGRAM HAS BEEN ASSEMBLED IT MAY  BE  LOADED  INTO
THE  GT40 WITH THE PROGRAM LOADER IN THE GT40 ACCOUNT.  THE GT40 ACCOUNT
ALSO CONTAINS A SYSTEM MACRO LIBRARY (SYSMAC.SML) TO AID IN CREATING DPU
INSTRUCTIONS AND DATA.

     PERSONS INTERESTED IN PROGRAMMING  HIGH-LEVEL  APPLICATIONS  (USING
GIDUS-DISLIB) WILL NOT NEED TO REMEMBER THE GT40 DETAILS JUST DISCUSSED.
THE DESCRIPTION OF THE DISLIB SUBROUTINES IS COMPLETE  ENOUGH  TO  ALLOW
HIGH-LEVEL  GRAPHICS  WITHOUT  CONCERN  FOR THE OPERATION OF THE CPU AND
DPU.











                               CHAPTER 2

                       GIDUS - DISLIB INTERACTION



     AS STATED PREVIOUSLY GIDUS IS A GT40 PROGRAM,  WHILE  DISLIB  IS  A
COLLECTION OF ROUTINES THAT WOULD BE CALLED BY A FORTRAN PROGRAM RUNNING
ON THE DECSYSTEM-10.  THE REASON FOR  THIS  TWO  PROGRAM,  TWO  COMPUTER
OPERATION  IS  AS FOLLOWS.  THE GT40 IS PRETTY MUCH DEDICATED TO BEING A
MEDIUM FOR DISPLAYING GRAPHIC DATA.  IT  IS  TRUE  THAT  THE  GT40  DOES
CONTAIN  A  GENERAL  PURPOSE  CPU WHICH COULD BE PROGRAMMED TO DO A WIDE
VARIETY OF TASKS INDEPENDENT OF THE DPU.  HOWEVER, THE MAIN PROCESSOR OF
THE GT40 IS QUITE WEAK (IT IS A MINI-COMPUTER), AND THE CPU IS DIFFICULT
TO PROGRAM (IT MUST BE PROGRAMMED IN ASSEMBLY LANGUAGE).   EVEN  IF  THE
GT40  COULD  BE  PROGRAMMED  IN  A HIGH - LEVEL LANGUAGE LIKE FORTRAN OR
ALGOL, THE LIMITED AMOUNT OF CORE IMPOSES SEVERE RESTRAINTS ON THE  TYPE
OF PROGRAM THAT COULD BE RUN.

     THE SOLUTION TO THIS PROBLEM IS  TO  PERFORM  ALL  THE  PROGRAMMING
NECESSARY  TO  CREATE  DISPLAYS  ON  THE  DECSYSTEM-10,  WHICH  HAS  THE
ADVANTAGE OF ADEQUATE AMOUNTS OF  CORE,  AND  THE  CAPABILITY  OF  BEING
PROGRAMMED  IN  A  SCIENTIFIC  LANGUAGE  SUCH  AS  FORTRAN.  THIS IS THE
APPROACH TAKEN BY THE GIDUS-DISLIB PACKAGE.

     THE 10 VIEWS THE GT40 AS A TERMINAL DEVICE, MAKING  NO  DISTINCTION
BETWEEN   IT   AND  A  TERMINAL  SUCH  AS  A  DECWRITER.   THE  GT40  IS
APPROXIMATELY EIGHT TIMES AS FAST AS THE DECWRITER, IF CONNECTED AT 2400
BAUD,  BUT  THE  10 IS COMPLETELY UNAWARE OF THE FACT THAT THE GT40 IS A
PROCESSING UNIT OF ITSELF.  THE 10 SEES THE GT40 AS A  DEVICE  THAT  CAN
TRANSMIT  OR  RECEIVE  8  BIT CHARACTERS.  IT IS THE GIDUS PROGRAM WHICH
INTERPRETS DATA BEING SENT FROM THE 10 AND DECIDES  WHAT  IS  A  DISPLAY
FILE AND WHAT IS NOT.

     THE DISLIB ROUTINES  COMMUNICATE  WITH  GIDUS  VIA  COMMANDS.   FOR
EXAMPLE,  A DISLIB ROUTINE MIGHT COMMAND GIDUS TO MOVE A CERTAIN DISPLAY
FILE TO A CERTAIN POSITION.  GIDUS WOULD EXECUTE THE COMMAND, AND  THEN,
BY  TRANSMITTING  A  STATUS  BUFFER  TO  THE 10, REPORT TO DISLIB ON THE
OPERATION OF THE COMMAND (I.E.  WAS THE COMMAND IN ERROR SOMEHOW, OR DID
THE  COMMAND  EXECUTE  PROPERLY).   AT  ALL TIMES THE 10 IS THE DOMINANT
PARTNER IN THE TWO COMPUTER ARRANGEMENT.  GIDUS  CAN  NEVER  INITIATE  A
COMMAND OF ITS OWN ACCORD AND TELL DISLIB WHAT TO DO.

     DISLIB  HAS  MANY  COMMANDS,  SEVERAL  OF  WHICH  ARE  INVOLVED  IN
TRANSMITTING DISPLAY FILES TO THE GT40.  A USER PROGRAM IMPLEMENTS THESE
COMMANDS VIA CALLS TO THE APPROPRIATE SUBROUTINES WHICH  ARE  DOCUMENTED
GIDUS - DISLIB INTERACTION                                      Page 2-2


IN CHAPTER 4.  IF GIDUS IS NOT RUNNING IN THE GT40, DISLIB WOULD BE ABLE
TO ACCOMPLISH LITTLE OF ITS  OWN.   SIMILARLY  GIDUS  REMAINS  BASICALLY
DORMANT,  UNTIL  A PROGRAM CONTAINING DISLIB ROUTINES IS INVOKED.  GIDUS
PERFORMS ONE FUNCTION,  HOWEVER,  INDEPENDENT  OF  WHATEVER  PROGRAM  IS
RUNNING  IN  THE  10,  AND  THAT IS THE FUNCTION OF TERMINAL SIMULATION.
MORE WILL BE DISCUSSED ABOUT THIS IN CHAPTER 3.











                               CHAPTER 3

                              USING GIDUS



3.1  GT40 BOOTSTRAP PROGRAM:

     GIDUS IS A STAND ALONE GT40 RESIDENT PROGRAM.  BEFORE ANY  DISPLAYS
(CREATED  BY  DISLIB)  CAN  BE  TRANSMITTED  TO  THE GT40, GIDUS MUST BE
RUNNING, IN ORDER TO ACCEPT THEM.  IT IS NECESSARY TO ACTIVATE THE  GT40
BOOTSTRAP PROGRAM IN ORDER TO LOAD GIDUS (OR ANY OTHER PROGRAM) INTO THE
GT40.  THE BOOTSTRAP IS A PROGRAM  WHICH  IS  IMPLEMENTED  IN  THE  GT40
HARDWARE.  THE PROGRAM IS RESIDENT IN READ ONLY MEMORY, AND CONSEQUENTLY
CANNOT BE MODIFIED OR DELETED.  THE BOOTSTRAP SERVES TWO PURPOSES.  ONCE
THE  BOOTSTRAP  HAS  BEEN  STARTED, THE GT40 WILL BEHAVE LIKE A TERMINAL
CONNECTED TO THE DECSYSTEM-10.  EACH CHARACTER YOU TYPE ON THE  KEYBOARD
WILL  BE  SENT  TO  THE 10, AND WHEN THE CHARACTER IS ECHOED BACK TO THE
GT40 IT  WILL  APPEAR  ON  THE  SCREEN.   WHEN  THE  SCREEN  HAS  BECOME
COMPLETELY FULL OF TEXT, DEPRESSING THE GT40 START SWITCH WILL CLEAR THE
SCREEN AND ONCE AGAIN RESUME OUTPUT AT THE UPPER LEFT HAND CORNER.  THIS
KEYBOARD  INPUT AND SCREEN OUTPUT ALLOW THE GT40 TO FUNCTION AS A NORMAL
TERMINAL.  IN OTHER WORDS, A USER MAY LOGIN, RUN ANY AVAILABLE  PROGRAM,
AND  LOG  OUT,  JUST  AS  HE MIGHT FROM ANY TERMINAL.  HOWEVER, WHEN THE
BOOTSTRAP PROGRAM IS RUNNING, IT IS NOT POSSIBLE TO DISPLAY ANY GRAPHICS
OTHER THAN THE CHARACTERS WHICH ARE OUTPUT FROM THE 10.

     THE SECOND FUNCTION OF THE BOOTSTRAP IS TO  ALLOW  PROGRAMS  TO  BE
LOADED  FROM THE 10 INTO THE GT40.  SINCE THE PROGRAM IS GOING TO RUN IN
THE GT40 IT MUST BE IN PDP 11/05  MACHINE  LANGUAGE  (I.E.   A  MACRO-11
PROGRAM  ASSEMBLED  BY  "MACDLX.SHR").   WHEN  THE  10  OUTPUTS  SPECIAL
CHARACTERS IN A SPECIAL SEQUENCE THE GT40 BOOTSTRAP GOES INTO ITS SECOND
MODE.   ALL TEXT ON THE SCREEN IS CLEARED.  CHARACTERS INCOMING FROM THE
10 ARE NOT DISPLAYED ON THE SCREEN, BUT ARE ADDED TO  MEMORY.   (THE  10
SENDS THE INFORMATION NECESSARY TO THE BOOTSTRAP, IN ORDER TO KNOW WHERE
TO LOAD THE PROGRAM).  ONCE THE PROGRAM HAS BEEN COMPLETELY LOADED,  THE
GT40  WILL  EITHER  HALT  (IN WHICH CASE THE PROGRAM JUST LOADED MUST BE
MANUALLY STARTED) OR OPTIONALLY THE PROGRAM WILL SELF-START.  (THIS  CAN
BE ACCOMPLISHED BY SPECIFYING A TRANSFER ADDRESS WITHIN THE PROGRAM).
USING GIDUS                                                     Page 3-2


     TWO PROGRAMS HAVE BEEN WRITTEN TO  ACCOMPLISH  THE  10  SIDE  OF  A
PROGRAM  LOAD  (I.E.   THESE  TWO PROGRAMS WILL PROPERLY ENCODE A PDP 11
BINARY FILE, AND  TRANSMIT  IT  TO  THE  GT40  WHERE  THE  BOOTSTRAP  IS
RUNNING).   THE TWO PROGRAMS ARE "LOADER" AND "LOADR6" BOTH OF WHICH ARE
ACCESSIBLE FROM THE GT40 ACCOUNT.  "LOADR6" IS A FAIR  BIT  SLOWER  THAN
"LOADER"  BUT ALLOWS A LARGER PROGRAM TO BE LOADED IN THE GT40.  IT WILL
NOT BE NECESSARY TO USE "LOADR6" IN ORDER TO LOAD GIDUS.  IF  ANYONE  IS
INTERESTED  IN  USING  "LOADR6"  THE  PROCEDURE  IS  IDENTICAL  TO  THAT
DESCRIBED FOR "LOADER".
USING GIDUS                                                     Page 3-3


3.2  PROGRAM LOAD EXAMPLE:

     THE FOLLOWING EXAMPLE IS A STEP BY STEP PROCEDURE  OF  A  DOWN-LINE
LOAD  FROM  THE  10 TO THE GT40.  IN THIS PARTICULAR EXAMPLE THE PROGRAM
"GIDUS.BIN" IS LOADED.  ANY OTHER PROGRAM MAY BE LOADED BY  SUBSTITUTING
THE  APPROPRIATE  FILENAME.   AT  ACADIA,  PROGRAMS  COMPRISING THE GT40
SOFTWARE PACKAGE ARE IN ACCOUNT [1600,2].  THIS WOULD  BE  DIFFERENT  AT
OTHER INSTALLATIONS.


1)       POWER UP THE GT40
         THIS IS ACCOMPLISHED BY TURNING THE POWER KEY TO ON.  THIS KEY,
HOWEVER,  MUST  NOT BE TURNED TO PANEL LOCK AS THIS WOULD PREVENT ANY OF
THE REMAINING CONSOLE SWITCHES FROM WORKING.


2)       TURN ON THE CRT
         JUST TO  THE  RIGHT  OF  THE  CRT  THERE  IS  A  SWITCH  MARKED
"POWER - OFF - BRIGHTNESS".   THIS  SHOULD  BE TURNED CLOCKWISE UNTIL IT
CLICKS ON AND THEN THE BRIGHTNESS SHOULD BE SET BETWEEN 50 - 70 PERCENT,
JUST TO THE RIGHT OF VERTICAL.


3)       DEPRESS THE SWITCH MARKED "ENABLE/HALT"
         THIS SWITCH SHOULD REMAIN IN THE DOWN POSITION, MEANING THE CPU
IS HALTED.


4)       PLACE THE OCTAL NUMBER 166000 IN THE SWITCH REGISTER
         ON THE LEFT PART OF THE  CONSOLE  THERE  ARE  SIXTEEN  SWITCHES
(NUMBERED  15  - 0).  COLLECTIVELY THESE SIXTEEN SWITCHES ARE CALLED THE
SWITCH REGISTER (SWR) AND ARE USED TO REPRESENT A  BINARY  NUMBER.   THE
LEFTMOST BIT (#15) IS THE MOST SIGNIFICANT AND THE RIGHTMOST BIT (#0) IS
THE LEAST SIGNIFICANT.  EACH OF THE 16 SWITCHES IS A TWO POSITION SWITCH
-  IF  UP  IT  MEANS  THE CORRESSPONDING BIT IS ON (SET = 1), IF DOWN IT
MEANS THE CORRESSPONDING BIT IS OFF (CLEARED  = 0).   THE  OCTAL  NUMBER
166000  IS  1 110 110 000 000 000  IN  BINARY.  WHEN THE SWITCH REGISTER
EQUALS 166000 BITS #15, 14, 13, 11,  AND  10  WOULD  BE  UP,  ALL  OTHER
SWITCHES WOULD BE DOWN.


5)       DEPRESS THE SWITCH MARKED "LOAD ADDRESS"
         THIS LOADS THE CONTENTS OF THE SWITCH REGISTER INTO A TEMPORARY
REGISTER WITHIN THE CPU WHERE THE BOOTSTRAP PROGRAM WILL SUBSEQUENTLY BE
STARTED.  PRESSING THE "LOAD ADDRESS" SWITCH WILL ALSO COPY THE SWR INTO
THE  ADDRESS/DATA  LIGHTS JUST ABOVE THESE SWITCHES, SO THAT THE ADDRESS
SELECTED MAY BE VERIFIED.  IF ONE OF THE LIGHTS IS BURNED  OUT  IT  WILL
NOT  AFFECT  THE  OPERATION  OF THE GT40.  (NOTE THAT THE "LOAD ADDRESS"
SWITCH IS ON A SPRING, AND WILL RETURN TO  THE  NEUTRAL  POSITION  AFTER
BEING DEPRESSED).


6)       RAISE THE HALT SWITCH TO ENABLE POSITION
         THIS ENABLES THE CPU
USING GIDUS                                                     Page 3-4


7)       DEPRESS THE START SWITCH
         IF ALL IS WELL THIS SHOULD START THE BOOTSTRAP PROGRAM  RUNNING
(IN  OTHER WORDS 166000 IS THE FIRST ADDRESS IN READ ONLY MEMORY, OF THE
BOOTSTRAP).  TO VERIFY THAT  THE  BOOTSTRAP  IS  RUNNING  PROPERLY,  TWO
THINGS  MAY  BE  DONE.   FIRST,  THE  ADDRESS/DATA  LIGHTS SHOULD NOW BE
FLICKERING;  SECONDLY, ANY CHARACTERS TYPED ON THE  KEYBOARD  SHOULD  BE
ECHOED  ON  THE SCREEN.  IT MAY BE NECESSARY TO TURN UP THE BRIGHTNESS A
BIT IN ORDER TO READ THEM.  ANOTHER TEST (TO DETERMINE IF THE MONITOR IS
SET  TO  ECHO  CHARACTERS) IS TO TYPE ^T (I.E.  CONTROL T).  THE MONITOR
SHOULD REPLY WITH A ONE LINE TRACE OF THE STATE OF  THE  JOB.   IF  THIS
FAILS REPEAT THE LOAD PROCEDURE FROM STEP (3).  IF YOU ARE FOLLOWING THE
PROCEDURE CORRECTLY, BUT NOT HAVING ANY SUCCESS, IT PROBABLY MEANS THERE
IS  SOMETHING WRONG WITH THE GT40 HARDWARE.  AT THE BACK OF THE KEYBOARD
THERE IS AN "ON/OFF" SWITCH WHICH SHOULD BE IN THE  "ON"  POSITION.   IF
THAT  IS  NOT  THE  PROBLEM,  THEN  CONTACT SOME MEMBER OF THE COMPUTING
CENTRE STAFF AND INFORM THEM OF THE PROBLEM.  (YOU SHOULD ALSO NOTE THAT
IF  THE DECSYSTEM-10 IS DOWN, IT OBVIOUSLY CANNOT ECHO CHARACTERS TO THE
GT40.  THIS IS NOT A PROBLEM WITH THE BOOTSTRAP).


8)       .LOGIN IF NECESSARY
         SINCE THE BOOTSTRAP IS NOW RUNNING, YOU SHOULD  LOGIN  TO  YOUR
ACCOUNT (IF YOU HAVE NOT DONE SO PREVIOUSLY).  IF YOU ARE RUNNING OUT OF
SCREEN SPACE, DEPRESS THE START SWITCH TO CLEAR THE  SCREEN  AND  RESUME
OUTPUT AT THE TOP LEFT HAND CORNER.


9)       .RUN LOADER[1600,2]
         RUN THE PROGRAM  "LOADER"  FROM  THE  GT40  ACCOUNT.   THIS  IS
ACCOMPLISHED  BY  THE MONITOR COMMAND ABOVE.  THE PROGRAM WILL COME BACK
REQUESTING WHICH FILE YOU WANT TO LOAD.  NOTE THAT YOU  SHOULD  USE  THE
MONITOR  ".RUN"  COMMAND  AND  NOT THE ".R" COMMAND WHICH IS USED TO RUN
SYSTEM PROGRAMS.


10)      *GIDUS.BIN[1600,2]$
         WHEN THE PROGRAM PROMPTS WITH THE ASTERISK TYPE IN THE NAME  OF
THE  PROGRAM YOU WANT TO LOAD.  IF YOU ARE LOADING GIDUS IT IS NECESSARY
TO SPECIFY THE GT40 ACCOUNT.   THE  FILENAME  SHOULD  BE  TERMINATED  BY
HITTING  THE  ESCAPE  KEY,  WHICH  WILL ECHO AS A DOLLAR SIGN.  CARRIAGE
RETURN WILL NOT TERMINATE THE FILENAME DIALOG.  FURTHERMORE  YOU  SHOULD
NOT  HIT  CARRIAGE  RETURN  AFTER HITTING ESCAPE OR THE LOAD WILL ALMOST
CERTAINLY FAIL.
USING GIDUS                                                     Page 3-5


     IF YOU HAVE FOLLOWED ALL OF THE STEPS  PROPERLY,  AND  ALL  OF  THE
RELEVANT  FILES  ARE  ACCESSIBLE,  THE  LOAD SHOULD NOW TAKE PLACE.  THE
FIRST THING YOU WILL NOTICE IS THAT THE  SCREEN  GOES  BLANK.   IT  WILL
REMAIN  THAT  WAY  UNTIL  THE  LOAD  IS  COMPLETED.  THE LOADING TIME IS
DIRECTLY PROPORTIONAL TO THE LENGTH OF THE PROGRAM TO BE LOADED, AND  TO
THE  LEVEL OF ACTIVITY WITHIN THE 10.  IN THE CASE OF GIDUS, WHEN THE 10
IS LIGHTLY LOADED, THE LOAD SHOULD TAKE ABOUT 50 - 60 SECONDS.   IF  THE
10  IS  VERY  BUSY  SWAPPING JOBS, THE LOAD COULD TAKE AS LONG AS TWO OR
THREE MINUTES.  (ON A RIDICULOUSLY LOADED SYSTEM THE 10 HAS  BEEN  KNOWN
TO  LEAVE JOBS SWAPPED OUT FOR AS LONG AS FIVE MINUTES OR MORE, HOWEVER,
GIDUS SHOULD RARELY TAKE THAT LONG TO LOAD).  AN  EXTREMELY  LARGE  GT40
PROGRAM  (7 OR 8K AS OPPOSED TO 3K FOR GIDUS) IS GOING TO TAKE THAT MUCH
LONGER AGAIN TO LOAD.  (AN EXAMPLE OF THIS IS THE PROGRAM "FOCAL.BIN").

     IF THE LOAD HAS FAILED THE SCREEN WILL REMAIN  BLANK  (REMEMBER  TO
LEAVE  A  REASONABLE  AMOUNT OF TIME FOR THE LOAD).  IF YOU SUSPECT THAT
THE LOAD HAS FAILED, THEN A VARIETY OF REASONS MIGHT EXPLAIN  WHY.   (1)
HITTING  CARRIAGE  RETURN  AFTER  ESCAPE  OR TYPING ANY OTHER CHARACTERS
DURING THE LOAD.  (2) PERHAPS ONE OF THE BYTES BEING TRANSMITTED TO  THE
GT40  WAS  CORRUPT  (HARDWARE  ERROR) AND COULD NOT BE CORRECTED (BY THE
SOFTWARE).  THE POSSIBILITY OF THIS TYPE OF ERROR IS ALWAYS PRESENT, BUT
FORTUNATELY IT IS A FAIRLY RARE OCCURRENCE AND NORMALLY THE SOFTWARE CAN
DETECT AND CORRECT IT.  IN THE MANY HUNDREDS OF LOADS PERFORMED,  DURING
SOFTWARE  DEVELOPMENT,  A LOAD HAD NEVER FAILED FOR THIS REASON, BUT THE
POSSIBILITY DOES EXIST.  (3) PERHAPS THE PROGRAM BEING  LOADED  WAS  TOO
LARGE  (>8K)  TO  FIT  IN  THE  GT40  MEMORY,  OR  (4) OFTEN THE LOAD IS
SUCCESSFUL, BUT THE USER PROGRAM IS NOT SUCCESSFUL IN CREATING A VISIBLE
DISPLAY.  THIS SHOULD NOT BE A PROBLEM WITH THE GIDUS PROGRAM.

     IN ORDER TO VERIFY WHETHER A LOAD FAILED OF ITS OWN, OR WHETHER THE
PROGRAM  LOADED  WAS BAD TO BEGIN WITH, IT IS NECESSARY TO READ THE FILE
"LOADER.LOG" WHICH WILL  BE  CREATED  IN  THE  USER'S  ACCOUNT  WHENEVER
"LOADER"  IS  RUN.   (USERS  SHOULD  NOT  HAVE INDEPENDENT FILES BY THAT
NAME).  SINCE IT IS NOT EASILY POSSIBLE TO DISPLAY TEXT  ON  THE  SCREEN
DURING  THE LOADING PROCESS, THE LOG FILE IS WRITTEN ON DISK.  THIS FILE
WOULD CONTAIN A SUMMARY OF TRANSMISSIONS MADE TO THE GT40 AS WELL AS ANY
ERROR  MESSAGES  IF  A  BAD LOAD WAS DETECTED.  THE FILE IS CREATED ANEW
EACH TIME A LOAD IS PERFORMED.   IT  WILL  BE  NECESSARY  TO  START  THE
BOOTSTRAP  PROGRAM,  IN ORDER TO GET A TYPE-OUT OF THE FILE.  (IN 99% OF
THE CASES, IF PROCEDURE IS PROPERLY FOLLOWED, GIDUS SHOULD LOAD WITH  NO
PROBLEMS).


                                  NOTE


                    IF  ONE  OF  THE  FIRST  INSTRUCTIONS
               EXECUTED BY THE LOADED PROGRAM IS A RESET,
               THEN THE LOG FILE WILL TERMINATE WITH  THE
               ERROR MESSAGE:

               "?  INVALID REPLY FROM GT40, LOADER HUNG".

               THIS MESSAGE MAY BE IGNORED.
USING GIDUS                                                     Page 3-6


3.3  INTERACTING WITH GIDUS

     AFTER GIDUS HAS BEEN SUCCESSFULLY  LOADED,  SEVERAL  DISPLAY  FILES
SHOULD  BECOME  VISIBLE.   THE  MOST  IMPORTANT  OF  THESE  IS AN 8 LINE
SCROLLED CHARACTER DISPLAY FILE, LOCATED AT THE BOTTOM  OF  THE  SCREEN.
(SCROLLING  MEANS  THAT EACH NEW LINE COMING IN WILL BE DISPLAYED AT THE
BOTTOM OF THE SCREEN,  CAUSING  ALL  PREVIOUS  LINES  TO  SHIFT  UP  ONE
POSITION,  FINALLY  DISAPPEARING FROM THE TOP OF THE DISPLAY FILE).  THE
ADVANTAGE OF SCROLLING IS THAT LINES REMAIN VISIBLE AS LONG AS POSSIBLE.
AND THAT IT IS NOT CONTINUALLY NECESSARY (AS WITH THE BOOTSTRAP) TO TAKE
SOME ACTION TO CLEAR THE DISPLAY FILE IN ORDER TO ALLOW  NEW  CHARACTERS
IN.   THIS  CHARACTER  DISPLAY FILE GIVES THE GIDUS USER A LINK WITH THE
DECSYSTEM-10  AND  ALLOWS  THE  GT40  TO  PERFORM  ALL  NORMAL  TERMINAL
FUNCTIONS.   MORE  SPECIFICALLY  THIS MEANS THAT EACH CHARACTER TYPED ON
THE KEYBOARD (WITH A FEW EXCEPTIONS) WILL BE SENT TO THE  10,  AND  THAT
EACH  CHARACTER RECEIVED BY THE GT40 FROM THE 10 (WITH A FEW EXCEPTIONS)
WILL BE DISPLAYED AS TEXT.  IN FACT, THE FIRST FEW LINES THAT ENTER THIS
DISPLAY  FILE  WILL  BE  THE  "END  OF EXECUTION" MESSAGE PRINTED BY THE
PROGRAM "LOADER".  WHEN THE DOT APPEARS AT THE LOWER LEFT CORNER OF  THE
SCREEN,  IT  MEANS  THE  USER IS NOW IN CONTACT WITH THE MONITOR AND MAY
ISSUE ANY VALID COMMAND, JUST AS HE MIGHT FROM ANY OTHER  TERMINAL.   TO
AID  IN  TYPING, A BLINKING CURSOR IS PROVIDED WHICH INDICATES WHERE THE
NEXT CHARACTER WILL BE PLACED.

     IN ADDITION TO THE CHARACTER DISPLAY FILE, THREE MORE DISPLAY FILES
ARE  INITIALLY VISIBLE (GIDUS HAS A TOTAL OF 10 DISPLAY FILES - EACH ONE
WILL BE DISCUSSED LATER).  THESE ARE THE  MAIN  POINTER,  THE  AUXILIARY
POINTER , AND A ONE LINE STATUS DISPLAY.

     INITIALLY THE ONE LINE STATUS DISPLAY WOULD LOOK AS FOLLOWS:

TI CH FR=11713 DU=12 DD=03 LA=00 MP=(0760,1320) AP=(1303,1320) LD TRACE


     EACH TERM HAS THE FOLLOWING MEANING:



     (TI) THE FIRST TWO CHARACTERS INDICATE THE  STATE  OF  GIDUS.   THE
VARIOUS ABBREVIATIONS AND MEANINGS ARE:


TI   -    TERMINAL INPUT
          ANY  CHARACTERS  TYPED  ON  THE  KEYBOARD  ARE  SENT  TO   THE
          DECSYSTEM-10 (I.E.  THE GT40 IS BEHAVING LIKE A TERMINAL).

GI   -    GIDUS INPUT
          EACH CHARACTER TYPED ON THE KEYBOARD  IS  SENT  TO  THE  GIDUS
          PROGRAM.   THIS  IS USED TO ENTER GIDUS COMMANDS WHICH WILL BE
          DISCUSSED LATER.

RC   -    RECEIVING
          THIS INDICATES THAT THE GIDUS PROGRAM IS RECEIVING  A  COMMAND
          FROM  THE DISLIB PACKAGE, OR IS RECEIVING A BLOCK OF A DISPLAY
          FILE WHICH IS BEING TRANSMITTED TO THE GT40.
USING GIDUS                                                     Page 3-7


TR   -    TRANSMITTING
          THIS MEANS THAT GIDUS IS TRANSMITTING  STATUS  INFORMATION  TO
          DISLIB.   A  STATUS TRANSMISSION IS MADE AFTER EACH COMMAND IS
          RECEIVED FROM THE 10.  IF NOTHING ELSE THE STATUS TRANSMISSION
          WOULD INFORM THE 10 THAT THE LAST COMMAND WAS RECEIVED INTACT,
          AND WAS EXECUTED PROPERLY.  NORMALLY THIS STATUS  TRANSMISSION
          TAKES  PLACE SO QUICKLY THAT "TR" MERELY APPEARS AS A BLINK IN
          THE STATUS DISPLAY.  IF IT APPEARS LONGER THAN  A  MOMENT,  IT
          PROBABLY MEANS THAT GIDUS HAS BEEN CORRUPTED.



     (CH) THE NEXT TWO CHARACTERS IN THE  STATUS  DISPLAY  INDICATE  THE
DESTINATION   OF   CHARCTERS   RECEIVED   FROM   THE  10.   THE  VARIOUS
ABBREVIATIONS AND MEANINGS ARE:


CH   -    CHARACTERS
          ANY CHARACTERS RECEIVED FROM THE 10  ARE  CONSIDERED  TERMINAL
          OUTPUT AND ARE ADDED TO THE CHARACTER DISPLAY FILE.  SCROLLING
          TAKES PLACE WHEN NECESSARY.

CO   -    COMMAND
          ANY CHARACTER RECEIVED FROM THE 10 IS BUFFERED  IN  A  COMMAND
          BUFFER.  WHEN THE ENTIRE COMMAND HAS BEEN RECEIVED, IT WILL BE
          EXECUTED.

AD   -    ADD
          ANY CHARACTER RECEIVED FROM THE 10 IS  ADDED  TO  THE  DISPLAY
          FILE,  CURRENTLY  BEING  BUILT IN THE GT40.  AT ANY TIME THERE
          WOULD BE ONLY ONE DISPLAY FILE UNDER CONSTRUCTION.



               (FR=11713)  THE  NEXT  EIGHT  CHARACTERS  IN  THE  STATUS
          DISPLAY  INDICATE  THE  AMOUNT  OF  FREE CORE REMAINING IN THE
          GT40.  THIS IS EXPRESSED AS  THE  NUMBER  OF  WORDS  REMAINING
          (FORMATTED IN OCTAL).  THE FREE CORE IS USED ENTIRELY FOR USER
          DISPLAY FILES.  IT SHOULD BE POINTED OUT AT  THIS  TIME,  THAT
          ALL  NUMBERS  DISPLAYED  DIRECTLY  BY  GIDUS, ARE FORMATTED IN
          OCTAL, AND THAT ALL  NUMBERS  INPUT  DIRECTLY  TO  GIDUS  (VIA
          COMMANDS)  SHOULD  BE  IN  OCTAL.   BASE  8  HAS ABSOLUTELY NO
          ADVANTAGE FOR THE USER, BUT WAS CHOSEN BECAUSE THE CPU HAS  NO
          MULTIPLY  OR DIVIDE INSTRUCTIONS, MAKING OCTAL FORMATTING MUCH
          EASIER THAN DECIMAL.



               (DU=12) THE NEXT FIVE CHARACTERS INDICATE THE  NUMBER  OF
          DISPLAY  FILES  IN  USE.   INITIALLY  THIS NUMBER IS 12 (OR 10
          DECIMAL) REFLECTING THE 10 GIDUS DISPLAYS.  THE GIDUS  PROGRAM
          CAN  ACCEPT A TOTAL OF 64 DISPLAY FILES, WHICH LEAVES ROOM FOR
          54 USER DISPLAY FILES.
USING GIDUS                                                     Page 3-8


               (DD=03) THE FOLLOWING FIVE CHARACTERS INDICATE THE NUMBER
          OF  DISPLAY  FILES  DISABLED.   ALL DISPLAY FILES IN GIDUS ARE
          CONNECTED IN A LINKED LIST.  IF THE DISPLAY FILE IS ENABLED IT
          IS PROCESSED BY THE DPU AND RESULTS IN A VISIBLE DISPLAY (WITH
          THREE EXCEPTIONS DISCUSSED LATER).  WHEN  A  DISPLAY  FILE  IS
          DISABLED,  IT REMAINS IN MEMORY, BUT THE LINKS TO AND FROM THE
          DISPLAY ARE BROKEN, SO THE  DPU  NEVER  GETS  TO  PROCESS  THE
          DISPLAY.   A  DISABLED  DISPLAY  FILE  IS  NOT  VISIBLE ON THE
          SCREEN.



               (LA=00) THE NEXT FIVE CHARACTERS GIVE THE DISPLAY  NUMBER
          OF  THE  LAST  USER  DISPLAY  ADDED BY THE DISLIB PACKAGE.  IF
          EQUAL TO ZERO IT MEANS NO USER DISPLAYS  ARE  PRESENT  IN  THE
          GT40.



               (MP=(0760,1320)) NEXT ARE THE X AND Y CO-ORDINATES OF THE
          MAIN  POINTER.   THESE  NUMBERS  WILL CHANGE AS THE POINTER IS
          MOVED ABOUT.



               (AP=(1303,1320))  NEXT  ARE  THE  CO-ORDINATES   OF   THE
          AUXILIARY POINTER.



               (LD) THE NEXT TWO CHARACTERS INDICATE THE  STATE  OF  THE
          LIGHT PEN.  THE VARIOUS ABBREVIATIONS AND MEANINGS ARE:


LD   -    LIGHT PEN DISABLED
          THIS MEANS THAT NO LIGHT PEN HITS WILL  BE  PROCESSED  BY  THE
          GIDUS  PROGRAM.  IF A USER WISHES TO GET A HIT, THEN THE LIGHT
          PEN MUST NOT BE IN THIS STATE.

LE   -    LIGHT PEN ENABLED
          THIS MEANS THE LIGHT PEN IS ENABLED, AND  THAT  THE  NEXT  HIT
          WILL BE PROCESSED BY THE PROGRAM.

LW   -    LIGHT PEN WAITING
          THIS MEANS THAT THE LIGHT PEN IS ENABLED, AND THAT  THE  GIDUS
          PROGRAM IS CURRENTLY WAITING FOR A HIT.  THIS WOULD COME ABOUT
          DUE TO A  REQUEST  FROM  DISLIB  FOR  LIGHT  PEN  DATA.   (SEE
          DOCUMENTATION  FOR  DISLIB ROUTINE LPHIT).  AS SOON AS THE HIT
          HAS BEEN RECEIVED AND PROCESSED, THE LIGHT PEN WILL GO TO  THE
          "LE" STATE.
USING GIDUS                                                     Page 3-9


     (TRACE) THE FINAL SIX CHARACTERS OF THE STATUS DISPLAY ARE USED  AS
A  TRACE  DISPLAY.  THE CONTENTS OF ANY VALID WORD ADDRESS MAY BE TRACED
BY THE GIDUS PROGRAM.  THIS INFORMATION IS USED PRIMARILY  IN  DEBUGGING
GIDUS AND IS EXPECTED TO BE OF LITTLE OR NO USE TO THE USER.

     EACH OF THE 10 GIDUS DISPLAY FILES WILL NOW BE DISCUSSED  IN  BRIEF
DETAIL.   PAY  PARTICULAR  ATTENTION TO THE DISPLAY FILE NUMBERS AS THEY
CAN BE USEFUL TO KNOW.  (DISPLAY NUMBERS ARE GIVEN FIRST IN OCTAL,  THEN
DECIMAL).

     [0 - 0] THIS IS THE FIRST DISPLAY FILE.  ITS PRIMARY PURPOSE IS  TO
BE THE HEAD NODE IN THE LINKED LIST OF DISPLAY FILES.  THIS DISPLAY FILE
IS ALWAYS ENABLED, BUT ADDS NOTHING VISIBLE TO THE SCREEN.  THE  DISPLAY
CANNOT BE DISABLED, NOR CAN IT BE DELETED.  AN ATTEMPT TO DO EITHER WILL
RESULT IN AN ERROR MESSAGE.

     [1 - 1] THE NEXT DISPLAY FILE IS THE CHARACTER  DISPLAY  FILE.   AS
WITH THE FIRST DISPLAY, AND ALL OTHER NON-USER DISPLAY FILES, IT MAY NOT
BE DELETED.  HOWEVER THE DISPLAY FILE MAY BE CLEARED  OR  DISABLED.   TO
CLEAR THE DISPLAY FILE, HOLD DOWN THE LOCK KEY AND HIT THE EOS KEY (THIS
IS DONE IN A SIMILAR  WAY  TO  HITTING  A  CONTROL  CHARACTER).   TYPING
LOCK/EOS  WILL  CLEAR THE SCREEN OF ALL CHARACTERS, AND RESET THE CURSOR
TO THE LOWER LEFT HAND CORNER.  (ANOTHER WAY  TO  CLEAR  THE  SCREEN  IS
THROUGH  DISLIB  -  SEE  THE DOCUMENTATION FOR ROUTINE CLEAR).  ONCE THE
DISPLAY HAS BEEN CLEARED, THE NEXT CHARACTER OUTPUT  FROM  THE  10  WILL
ONCE AGAIN ENTER THE CHARACTER DISPLAY FILE.  IN ADDITION, THE CHARACTER
DISPLAY FILE MAY BE DISABLED, WHICH REMOVES IT FROM THE SCREEN ENTIRELY.
IT WILL STILL BE UPDATED AS BEFORE, BUT NO CHANGES WILL BE VISIBLE UNTIL
IT IS RE-ENABLED.  A CLEAR IS PREFERRED TO A  DISABLE,  BECAUSE  ONCE  A
DISABLE  IS DONE, NO OUTPUT IS VISIBLE (INCLUDING SUCH MESSAGES AS "TIME
SHARING WILL CEASE IN  5  MINUTES"  ETC.).   A  DISABLE  COULD  BE  USED
HOWEVER,  IF  A  USER  WERE  TO  INSIST  ON REMOVING THE CURSOR FROM THE
SCREEN, BUT IT IS NOT A RECOMMENDED PRACTICE.

     [2 - 2] THE THIRD DISPLAY FILE IS THE STATUS DISPLAY FILE DISCUSSED
PREVIOUSLY.   THIS MAY BE ENABLED OR DISABLED AT WILL, BUT IT MAY NOT BE
DELETED.

     [3 - 3] THE FOURTH GIDUS DISPLAY  FILE  (NOTE  THAT  THE  FIRST  IS
NUMBERED ZERO) IS THE ERROR MESSAGE DISPLAY FILE.  ANY ERRORS THAT GIDUS
DETECTS WILL BE DISPLAYED HERE AS A BLINKING MESSAGE.  A DESCRIPTION  OF
THE  ERROR  MESSAGES  AND THEIR MEANINGS FOLLOWS THE DISCUSSION OF GIDUS
COMMANDS.  THE DISPLAY FILE IS ALWAYS ENABLED, ALTHOUGH THERE IS NOTHING
VISIBLE  UNLESS AN ERROR HAS OCCURRED.  DISPLAY NUMBER THREE MAY NEITHER
BE DISABLED NOR DELETED, AND AN ATTEMPT TO DO EITHER WILL RESULT  IN  AN
ERROR MESSAGE.  THE DISPLAY MAY BE CLEARED, HOWEVER, BY USE OF THE "OFF"
COMMAND TO BE DISCUSSED SHORTLY.

     [4 - 4] THE MAIN POINTER WHICH IS ENABLED FROM THE  START,  IS  THE
FIFTH  DISPLAY  FILE.   THIS  POINTER  IS  USED  INTERACTIVELY  TO  READ
CO-ORDINATES FROM THE SCREEN.  AT ANY TIME THE DISLIB  PACKAGE  CAN  SET
THE  POINTER  TO  ANY SCREEN CO-ORDINATES, AND SIMILARLY IT CAN READ THE
POSITION AT ANY TIME.  IN ADDITION THE POINTER POSITION CAN  BE  CHANGED
THROUGH  THE  USE OF GIDUS.  ON THE LEFT HAND SIDE OF THE KEYBOARD THERE
ARE FOUR ARROW KEYS, UP, DOWN, LEFT, AND RIGHT.  HITTING  THE  "UP"  KEY
USING GIDUS                                                    Page 3-10


WILL  CAUSE  THE  POINTER  TO MOVE UPWARD, HITTING THE KEY A SECOND TIME
WILL CAUSE IT TO STOP.  LIKEWISE FOR THE OTHER THREE KEYS.  HITTING  ANY
COMBINATION  OF A HORIZONTAL AND VERTICAL KEY WOULD CAUSE THE POINTER TO
MOVE  ALONG  THE  APPROPRAITE  DIAGONAL.   AS  THE  POINTER  MOVES   ITS
CO-ORDINATE  POSITION  IS  CONSTANTLY UPDATED IN THE STATUS DISPLAY.  NO
POINTER MOVEMENT WILL BE ENABLED UNLESS BIT #15 (THE  LEFTMOST  BIT)  OF
THE  SWITCH REGISTER IS ON.  THE MAIN POINTER MAY BE ENABLED OR DISABLED
BUT IT MAY NOT BE DELETED.

     [5 - 5] THE SIXTH DISPLAY FILE, THE  AUXILIARY  POINTER,  FUNCTIONS
IDENTICALLY TO THE MAIN POINTER WITH THE ONE DIFFERENCE THAT BIT #0 (THE
RIGHTMOST) MUST BE ON.  (IF BIT #15 IS ALSO ON, THE MAIN  POINTER  TAKES
PRECEDENCE,  AND  THE  AUXILIARY  POINTER WOULD NOT MOVE).  THE SPEED OF
BOTH POINTERS MAY BE VARIED BY THE SPEED COMMAND (SEE THE DESCRIPTION OF
GIDUS COMMANDS).

     [6 - 6] THE NEXT DISPLAY FILE IS THE MESSAGE DISPLAY FILE WHICH  IS
USED  TO  PROMPT  FOR  OPTION  REQUESTS.  NORMALLY THE USER WOULD NOT BE
CONCERNED WITH THIS DISPLAY FILE, AS IT IS HANDLED AUTOMATICALLY BY  THE
DISLIB  OPTION  ROUTINES.   (IN  PARTICULAR  SEE  THE  DOCUMENTATION FOR
ROUTINE GETOPT).  THIS DISPLAY FILE MAY BE ENABLED OR  DISABLED  BUT  IT
MAY NOT BE DELETED.

     [7 - 7] THE NEXT DISPLAY FILE IS THE GIDUS  COMMAND  DISPLAY  FILE.
IF  A  USER  IS  IN  TERMINAL  INPUT MODE (WHERE CHARACTERS TYPED ON THE
KEYBOARD ARE SENT TO THE MONITOR), TYPING  THE  "HOME"  KEY  WILL  PLACE
GIDUS IN GIDUS INPUT MODE.  AS SOON AS HOME HAS BEEN HIT, DISPLAY NUMBER
SEVEN WILL BECOME ENABLED.   THIS  DISPLAY  CONSISTS  OF  THE  PROMPTING
MESSAGE "GIDUS>>" FOLLOWED BY A TYPE-IN BUFFER.  EACH CHARACTER TYPED IN
ON THE KEYBOARD IS SENT TO THE GIDUS PROGRAM AND IS ECHOED ON  THE  LINE
NEXT  TO  THE  PROMPTING  MESSAGE.   WHEN  CARRIAGE  RETURN IS HIT GIDUS
ASSUMES IT HAS A COMPLETE LINE AND BEGINS PROCESSING THE COMMAND.  IF AT
ANY  TIME WHILE IN GIDUS INPUT MODE, THE HOME KEY IS HIT AGAIN, THEN THE
CURRENT COMMAND IS IGNORED,  AND  THE  PROGRAM  ONCE  AGAIN  REVERTS  TO
TERMINAL  INPUT  MODE,  LEAVING THE COMMAND DISPLAY FILE DISABLED.  THIS
DISPLAY FILE MAY BE ENABLED OR DISABLED IN THE USUAL  WAY,  ALTHOUGH  IT
MAKES  LITTLE  SENSE  TO  DO  SO,  SINCE IT IS AUTOMATICALLY ENABLED AND
DISABLED BY THE HOME KEY.  AS WITH ALL OTHER GIDUS DISPLAY  FILES,  THIS
FILE  MAY  NOT BE DELETED.  (SEE THE FOLLOWING SECTION FOR A DESCRIPTION
OF THE AVAILABLE GIDUS COMMANDS).

     [10 - 8] IN ADDITION TO THE  OPTION  PROMPT  MESSAGE  THERE  IS  AN
OPTION  POINTER  DISPLAY  FILE.   THIS POINTER IS USED TO INDICATE WHICH
OPTION WAS LAST SELECTED AND IS AUTOMATICALLY CONTROLLED BY  THE  OPTION
ROUTINES  WHICH  ARE  A PART OF THE DISLIB PACKAGE.  THIS POINTER MAY BE
ENABLED OR DISABLED IN THE USUAL WAY (NOTE THAT THE  DISPLAY  NUMBER  IS
OCTAL 10).  IN ADDITION THE POINTER MAY BE MOVED ABOUT THE SCREEN IN THE
SAME WAY AS ANY USER DISPLAY FILE - SEE THE DOCUMENTATION FOR THE DISLIB
ROUTINE MOVFIL, THIS DISPLAY MAY NOT BE DELETED.

     [77 - 63] THE LAST GIDUS DISPLAY FILE, IS  THE  TAIL  NODE  IN  THE
LINKED  LIST OF DISPLAY FILES.  AS WITH THE FIRST DISPLAY FILE (#0) THIS
ONE IS INVISIBLE, AND IS ALWAYS ENABLED.   ANY  ATTEMPT  TO  DISABLE  OR
DELETE  THIS  DISPLAY  WILL  RESULT  IN  AN ERROR MESSAGE.  USER DISPLAY
NUMBERS ARE 11 - 76 (OCTAL).
USING GIDUS                                                    Page 3-11


3.4  GIDUS COMMANDS

     GIDUS CONTAINS AN INTERNAL COMMAND INTERPRETER WHICH WILL RECOGNIZE
AND EXECUTE 12 COMMANDS.  IF AN UNRECOGNIZABLE COMMAND IS ENTERED (WHILE
IN GIDUS INPUT MODE), THEN NO ACTION WILL BE TAKEN.  IF A VALID  COMMAND
RESULTS  IN  AN  ERROR,  THEN  AN ERROR MESSAGE WILL APPEAR IN THE ERROR
MESSAGE DISPLAY FILE.  COMMANDS MAY BE ENTERED IN FULL OR ABBREVIATED TO
THE  FIRST  TWO LETTERS.  SOME COMMANDS TAKE ARGUMENTS IN THE FORM OF AN
OCTAL NUMBER;  THESE ARGUMENTS ARE DISCUSSED ALONG WITH THE  APPROPRIATE
COMMANDS.


DISABLE N
          N IS AN OCTAL NUMBER IN THE RANGE 0 - 77.  THIS COMMAND CAUSES
          THE  NUMBERED DISPLAY FILE TO BE DISABLED (I.E.  IT REMAINS IN
          THE GT40 BUT IS NOT VISIBLE ON  THE  SCREEN).   NO  ACTION  IS
          TAKEN  IF  THE  DISPLAY  DOES  NOT EXIST, OR IF THE DISPLAY IS
          ALREADY DISABLED.  POSSIBLE  ERRORS  INCLUDE  ILLEGAL  DISPLAY
          NUMBER,  OR  TRYING  TO DISABLE A DISPLAY FILE WHICH CANNOT BE
          DISABLED.   THREE  OF  THE  GIDUS  DISPLAY  FILES  CANNOT   BE
          DISABLED.   IN  ADDITION USER DISPLAYS MAY BE SET SO THAT THEY
          CANNOT BE DISABLED.

ENABLE N
          N IS AN OCTAL NUMBER IN THE  RANGE  0  TO  77.   THIS  COMMAND
          CAUSES  THE NUMBERED DISPLAY FILE TO BE ENABLED (I.E.  VISIBLE
          ON THE GT40 SCREEN).  NO ACTION IS TAKEN IF THE  DISPLAY  FILE
          IS  ALREADY ENABLED.  POSSIBLE ERRORS INCLUDE TRYING TO ENABLE
          A BAD DISPLAY NUMBER (OUTSIDE THE RANGE 0 - 77), OR TRYING  TO
          ENABLE A NON-EXISTENT DISPLAY.

SPEED N
          N IS AN OCTAL NUMBER IN THE RANGE 0 - 12.  THIS  COMMAND  SETS
          THE  SPEED  WITH  WHICH  THE  POINTERS WILL MOVE, 12 BEING THE
          FASTEST, 0 THE SLOWEST.  AT A SPEED OF 0 THE POINTERS  CAN  BE
          ADJUSTED   WITHIN   1  RASTER  UNIT,  WHICH  ALLOWS  FOR  FINE
          MEASURING.  NO ERRORS ARE POSSIBLE.

EXAMINE ADDRESS
          ADDRESS IS AN EVEN OCTAL NUMBER REPRESENTING SOME LOCATION  IN
          THE  GT40  MEMORY.   THE  CONTENTS  OF  THAT  LOCATION WILL BE
          FORMATTED IN OCTAL, AND  DISPLAYED  JUST  BELOW  THE  COMMAND.
          NORMALLY THIS COMMAND WOULD ONLY BE USED FOR DEBUGGING, AND IS
          EXPECTED TO BE OF LITTLE USE TO THE USER.  THE  ONLY  POSSIBLE
          ERROR  IS  ATTEMPTING TO EXAMINE A WORD IN NON-EXISTENT MEMORY
          (I.E.  AN ODD ADDRESS, OR AN ADDRESS OUTSIDE THE GT40'S MEMORY
          BOUND).
USING GIDUS                                                    Page 3-12


TRACE ADDRESS
          ADDRESS IS AN EVEN OCTAL ADDRESS, AS IN THE  EXAMINE  COMMAND.
          THIS  CAUSES  GIDUS  TO  START  TRACING  THE  CONTENTS  OF THE
          SELECTED  ADDRESS,  WITH  THE  TRACE  VISIBLE  IN  THE  STATUS
          DISPLAY.   TRACING LOCATION ZERO WILL CAUSE THE TRACE TO STOP,
          UNTIL A NEW TRACE ADDRESS IS SELECTED.  AS  WITH  THE  EXAMINE
          COMMAND,  THIS IS PRIMARILY INTENDED FOR DEBUGGING GIDUS.  THE
          ONLY POSSIBLE ERROR IS THE NON-EXISTENT MEMORY  REFERENCE,  AS
          IN THE EXAMINE COMMAND.

MODIFY N
          N IS ANY VALID OCTAL NUMBER REPRESENTING A 16 BIT BINARY WORD.
          N IS STORED IN THE LAST ADDRESS SELECTED BY A TRACE OR EXAMINE
          COMMAND, REPLACING WHATEVER WAS ORIGINALLY THERE.  AGAIN  THIS
          IS A DEBUGGING FEATURE.  USERS MAY USE THE MODIFY COMMAND WITH
          NO RESTRICTIONS, BUT THEY SHOULD EXPECT UNPREDICTABLE  PROGRAM
          BEHAVIOR.

DELETE N
          N IS AN OCTAL NUMBER IN THE RANGE 0 - 77.  THIS COMMAND CAUSES
          THE NUMBERED DISPLAY FILE TO BE DISABLED AND THEN REMOVED FROM
          MEMORY.  THE REST OF MEMORY  TAKEN  UP  BY  DISPLAY  FILES  IS
          COMPACTED,  FREEING  THE  SPACE  ORIGINALLY  TAKEN  UP  BY THE
          SELECTED DISPLAY.  IN ADDITION, THE NUMBER OF THE  DISPLAY  IS
          FREED,  ALLOWING  THAT  NUMBER  TO  BE ASSIGNED TO SOME FUTURE
          DISPLAY.  POSSIBLE ERRORS  INCLUDE  TRYING  TO  DELETE  A  BAD
          DISPLAY  NUMBER  (NOT IN THE RANGE 0 - 77), TRYING TO DELETE A
          NON-EXISTENT DISPLAY, OR TRYING TO DELETE A DISPLAY  WHICH  IS
          WRITE  PROTECTED.  NOTE THAT ALL GIDUS DISPLAY FILES ARE WRITE
          PROTECTED AND THAT USER DISPLAY FILES MAY OPTIONALLY BE  WRITE
          PROTECTED  (SEE  THE  DOCUMENTATION  FOR  THE  DISLIB ROUTINES
          ADFILE AND DSTAT).  A DELETE  TAKES  SLIGHTLY  LONGER  THAN  A
          DISABLE  DUE TO THE TIME TAKEN TO COMPACT MEMORY.  IN ADDITION
          YOU WILL NOTICE ALL DISPLAY FILES  BLINK  MOMENTARILY  WHEN  A
          DISPLAY  IS DELETED.  (THIS IS BECAUSE THE DPU MUST BE STOPPED
          WHILE THE DISPLAY FILES ARE BEING COMPACTED).

OFF (NO ARGUMENT)
          ONCE AN ERROR MESSAGE HAS BEEN DISPLAYED, IT  REMAINS  ON  THE
          SCREEN  UNTIL  A  NEW  ERROR MESSAGE REPLACES IT, OR UNTIL THE
          ERROR MESSAGE IS TURNED OFF WITH THE "OFF" COMMAND.  NO ERRORS
          ARE POSSIBLE.

LE (NO ARGUMENT)
          THIS COMMAND IS USED TO ENABLE THE LIGHT PEN.   IF  THE  LIGHT
          PEN  IS  DISABLED, NO HIT WILL BE PROCESSED.  THIS COMMAND MAY
          CHANGE THE STATUS OF THE LIGHT PEN, AND  THE  CHANGE  WILL  BE
          REFLECTED IN THE STATUS DISPLAY.

LD (NO ARGUMENT)
          THIS COMMAND IS JUST THE OPPOSITE OF THE "LE" COMMAND IN  THAT
          IT  CAUSES  THE LIGHT PEN TO BE DISABLED.  THE CHANGE, IF ANY,
          IN THE STATUS OF THE LIGHT PEN WILL BE REFLECTED IN THE STATUS
          DISPLAY.  AS WITH THE "LE" COMMAND, NO ERRORS ARE POSSIBLE.
USING GIDUS                                                    Page 3-13


RESET N
          THIS COMMAND CAUSES THE  GT40  TO  BE  RESET  TO  ITS  INITIAL
          STATUS.   THIS  MEANS  THE  MAIN  AND  AUXILIARY  POINTERS ARE
          RETURNED TO THEIR INITIAL POSITION, AND  THAT  THE  ORIGINALLY
          ENABLED  DISPLAY  FILES  WOULD  BE ENABLED, AND THE ORIGINALLY
          DISABLED DISPLAY FILES WOULD BE DISABLED.   IN  ADDITION,  ALL
          USER  DISPLAYS,  WHETHER  WRITE  PROTECTED  OR  NOT,  WILL  BE
          DELETED, AND THE LIGHT PEN WILL BE DISABLED.   NO  ERRORS  ARE
          POSSIBLE.   N IS AN OCTAL NUMBER IN THE RANGE (1 - 37) (1 - 31
          DECIMAL) WHICH SPECIFIES HOW MANY LINES OF SCROLLING TO SET UP
          IN THE CHARACTER DISPLAY FILE.  IF NO ARGUMENT IS SUPPLIED THE
          CHARACTER DISPLAY FILE IS LEFT AT ITS  CURRENT  SIZE,  BUT  IS
          CLEARED.   IF  MANY  LINES  ARE USED FOR SCROLLING, THEN THERE
          WILL CONSEQUENTLY BE LESS GT40 CORE FOR  USER  DISPLAY  FILES.
          AT  THE  DEFAULT  SETTING  OF  8  LINES THERE IS 4.9K FREE FOR
          DISPLAY FILES.  AT A SETTING OF 1 LINE  THERE  WOULD  BE  5.2K
          AVAILABLE, AND AT A SETTING OF 31 LINES THERE WOULD BE 4.3K.

HELP (NO ARGUMENT)
          THIS COMMAND GIVES A BRIEF  LISTING  OF  THE  AVAILABLE  GIDUS
          COMMANDS.


SIX OF THE GIDUS COMMANDS HAVE DISLIB COUNTERPARTS, WHICH WILL  FUNCTION
UNDER  PROGRAM  CONTROL.  THESE ARE DISABLE, ENABLE, DELETE, LE, LD, AND
RESET (SEE THE CORRESPONDING DOCUMENTATION FOR DISLIB  ROUTINES  DISABL,
ENABLE, DELETE, LPON, LPOFF, AND RESET.

     DO NOT FORGET THAT IT IS NECESSARY TO HIT THE HOME KEY IN ORDER  TO
RETURN TO TERMINAL INPUT MODE.


                                  NOTE


                    THE ARROW KEYS  (FOR  POINTERS),  AND
               THE "LOCK/EOS" KEY WILL NOT FUNCTION WHILE
               IN GIDUS INPUT MODE.



     IF WHEN TYPING A COMMAND YOU REALIZE YOU HAVE MADE A  MISTAKE,  HIT
THE  RUBOUT  KEY  TO DELETE EACH PREVIOUS CHARACTER (THEY WILL DISAPPEAR
FROM THE SCREEN AS THEY ARE RUBBED OUT).

     NORMALLY GIDUS COMMANDS NEED RARELY BE USED  SINCE  MOST  FUNCTIONS
CAN  BE PERFORMED UNDER PROGRAM CONTROL (VIA DISLIB), BUT THE ADDITIONAL
FLEXIBILITY IS  OFTEN  USEFUL;   PARTICULARLY  THE  ENABLE  AND  DISABLE
COMMANDS.
USING GIDUS                                                    Page 3-14


3.5  GIDUS ERROR MESSAGES

     THERE ARE SIX POSSIBLE ERRORS THAT GIDUS CAN DETECT AND INFORM  THE
USER  ABOUT.   THESE  ERRORS  ARE  DISPLAYED  IN THE ERROR DISPLAY FILE,
LOCATED JUST BELOW THE STATUS DISPLAY, AS A  BLINKING  MESSAGE.   ERRORS
MIGHT  OCCUR  DUE  TO BAD GIDUS COMMANDS OR POSSIBLY DUE TO BAD COMMANDS
TRANSMITTED BY DISLIB.  (IN THE SECOND CASE THE USER WOULD  BE  INFORMED
OF  THE  ERROR  TWICE.   ONCE  IN  THE  ERROR  MESSAGE DISPLAY FILE, AND
SECONDLY BY THE OFFENDING DISLIB ROUTINE WHICH REPORTS THE ERROR IN  THE
TEXT FILE).  ERROR MESSAGES WHICH ARE PRECEDED BY A PERCENT SIGN (%) ARE
CONSIDERED WARNING MESSAGES, WHILE THOSE PRECEDED BY A QUESTION MARK (?)
ARE  CONSIDERED  FATAL ERRORS.  IN THE EVENT OF A WARNING MESSAGE, GIDUS
WOULD CONTINUE WITH NO ACTION TAKEN.  SEE THE  DESCRIPTION  OF  THE  TWO
FATAL ERRORS FOR GIDUS OPERATION AFTER THE ERROR.



3.5.1  WARNINGS:

     %BAD DISPLAY NUMBER
     A REFERENCE HAS BEEN MADE TO A DISPLAY  NUMBER,  LESS  THAN  0,  OR
GREATER  THAN  77.   THIS  COULD  BE  FROM AN ENABLE, DISABLE, OR DELETE
COMMAND, OR POSSIBLY SEVERAL DISLIB ROUTINES.


%CANNOT DISABLE A NO-DISABLE DISPLAY FILE
     AN ATTEMPT HAS BEEN MADE TO DISABLE A DISPLAY FILE WHICH CANNOT  BE
DISABLED.   THIS  MAY BE ONE OF THE THREE SPECIAL GIDUS DISPLAYS, OR ANY
USER DISPLAY WHICH HAS BEEN PROTECTED IN THIS MANNER.  THIS ERROR  COULD
ONLY  OCCUR  IN  RESPONSE  TO A DISABLE COMMAND, IN GIDUS INPUT MODE, OR
RECEIVED FROM DISLIB.


%CANNOT DELETE A WRITE PROTECTED DISPLAY FILE
     AN ATTEMPT WAS MADE TO  DELETE  A  DISPLAY  FILE  WHICH  CANNOT  BE
DELETED.   THIS  MIGHT BE ANY OF THE GIDUS DISPLAYS, OR ANY USER DISPLAY
WHICH HAS BEEN PROTECTED IN THIS MANNER.  THIS ERROR COULD ONLY OCCUR IN
RESPONSE TO A DELETE COMMAND, FROM DISLIB, OR WHILE IN GIDUS INPUT MODE.


%DISPLAY DOES NOT EXIST
     AN ATTEMPT WAS MADE TO PERFORM SOME OPERATIONS ON A  DISPLAY  (SUCH
AS ENABLING IT, OR MOVING IT) WHEN THE DISPLAY DOES NOT EXIST.  IN OTHER
WORDS, THE DISPLAY NUMBER IS  VALID,  BUT  NO  DISPLAY  BY  THAT  NUMBER
EXISTS.   THIS  ERROR  COULD  OCCUR  DUE  TO  A GIDUS ENABLE COMMAND, OR
THROUGH ANY ONE OF SEVERAL COMMANDS RECEVIVED FROM DISLIB.
USING GIDUS                                                    Page 3-15


3.5.2  FATAL ERRORS:

?DISPLAY FILE NOT FOUND (DISPLAY TABLE CORRUPT)
     THIS ERROR SHOULD NOT OCCUR.  GIDUS HAS ALREADY DETERMINED THAT THE
DISPLAY  DOES  EXIST  AND IS SEARCHING FOR IT, WITHIN THE LINKED LIST OF
DISPLAY FILES (ACTUALLY THE SEARCH TAKES PLACE ON A  TABLE  REPRESENTING
THE LIST).  IF THIS ERROR OCCURS IT MEANS GIDUS HAS BECOME CORRUPTED AND
THAT THE PROGRAM  SHOULD  BE  RE-LOADED.   IF  THE  ERROR  OCCURS  UNDER
REPRODUCIBLE  CIRCUMSTANCES  IT  INDICATES  A  SERIOUS  BUG IN THE GIDUS
PROGRAM.  (THIS ERROR HAS NEVER OCCURRED DURING SOFTWARE DEVELOPMENT AND
TESTING).   IF  RELOADING  SEEMS  LIKE  A CUMBERSOME COURSE OF ACTION, A
RESET MAY BE ATTEMPTED, BUT A RE-LOAD WOULD BE SAFER COURSE OF ACTION.


?ODD ADDRESS REFERENCE?
     THIS ERROR IS MOST LIKELY  DUE  TO  AN  IMPROPER  ARGUMENT  IN  THE
EXAMINE,   OR   TRACE   COMMAND.    IF  THE  ERROR  OCCURS  UNDER  OTHER
CIRCUMSTANCES, IT INDICATES GIDUS HAS BECOME CORRUPTED.  WHEN THIS ERROR
OCCURS,  THE  CPU  HAS  BEEN  PROGRAMMED  TO HANG UP ON ONE INSTRUCTION,
RATHER THAN CONTINUING FROM THE INSTRUCTION IN ERROR.   SINCE  GIDUS  IS
ENTIRELY  INTERRUPT  DRIVEN, YOU MAY OFTEN CONTINUE AFTER THIS ERROR HAS
OCCURRED.  IF YOU SUSPECT A CORRUPT PROGRAM HOWEVER, IT WOULD BE A  WISE
IDEA TO RE-LOAD GIDUS.
USING GIDUS                                                    Page 3-16


3.6  RESTARTING GIDUS

     OCASSIONALLY IT MAY BE USEFUL TO HALT THE CPU,  AND  TURN  OFF  THE
GT40  POWER.   IT IS POSSIBLE TO RESTART GIDUS AFTER THIS HAS BEEN DONE,
THE RE-START ADDRESS BEING  1136  (OCTAL).   HERE  IS  A  STEP  BY  STEP
PROCEDURE FOR RE-STARTING THE PROGRAM:


1) POWER UP THE GT40

2) TURN ON THE CRT

3) DEPRESS THE HALT SWITCH (IF NOT ALREADY DONE)

4) SWITCH REGISTER GETS 1136 OCTAL
     THE NUMBER 1136 HAS BITS #9, 6, 4, 3, 2,  AND  1  SET,  ALL  OTHERS
EQUAL TO ZERO.

5) DEPRESS THE LOAD ADDRESS SWITCH

6) RAISE THE HALT SWITCH TO THE ENABLE POSITION

7) DEPRESS THE START SWITCH


     THIS SHOULD RE-START GIDUS IF IT IS  STILL  PRESENT  IN  THE  GT40.
NOTE  THAT  IT  TAKES  A  FEW  SECONDS FOR THE SCREEN TO BRIGHTEN BEFORE
DISPLAYS ARE VISIBLE).  IF THIS FAILS TO RE-START GIDUS,  IT  MEANS  THE
PROGRAM IS NO LONGER PRESENT IN THE GT40.











                               CHAPTER 4

                              USING DISLIB



DISLIB OVERVIEW:



     DISLIB (OR DISPLAY LIBRARY) IS A LIBRARY REL  FILE,  CONTAINING  61
SUBPROGRAMS IN 57 MODULES.  TWENTY-TWO OF THESE ROUTINES ARE INTERNAL TO
DISLIB BUT SEVERAL OF  THESE  COULD  BE  CALLED  DIRECTLY  FROM  A  USER
PROGRAM.

     A VERY SOPHISTICATED USER PROGRAM MIGHT UTILIZE 30 OR MORE  OF  THE
DISLIB  ROUTINES,  PARTICULARLY  IF  THE  PROGRAM WAS HIGHLY INTERACTIVE
(MAKING  USE  OF  THE  POINTERS,  THE  LIGHT  PEN,  AND  OPTION  LISTS).
GENERALLY  THOUGH,  A  PROGRAM  COULD ADEQUATELY GET BY WITH 20 OR FEWER
ROUTINES CALLED.

     NONE OF THE DISLIB ROUTINES ALLOWS A VARIABLE NUMBER OF PARAMETERS.
IN  OTHER WORDS, IF A ROUTINE IS EXPECTING PARAMETERS, IT IS EXPECTING A
FIXED NUMBER.   IF  A  ROUTINE  IS  CALLED  WITH  THE  WRONG  NUMBER  OF
PARAMETERS,  UNPREDICTABLE  RESULTS  WILL OCCUR, ALTHOUGH OFTEN THE USER
PROGRAM WOULD TERMINATE WITH SOME SORT OF SYSTEM ERROR  (E.G.   ?ILLEGAL
UUO).
USING DISLIB                                                    Page 4-2


     THE DISLIB PACKAGE CAN BE DIVIDED INTO DISTINCT CATEGORIES.   THESE
ARE:

     1.  INITIALIZATION

     2.  DISPLAY CREATION

     3.  DISPLAY MANIPULATION

     4.  POINTER

     5.  LIGHT PEN

     6.  GT40 MANIPULATION

     7.  LOG

     8.  OPTIONS

     9.  TERMINATION

    10.  INTERNAL


     EACH OF THESE CATEGORIES WILL NOW BE  DISCUSSED,  WITH  A  DETAILED
DESCRIPTION OF EACH ROUTINE WITHIN THE CATEGORY.


                                  NOTE


                    IN THE FOLLOWING  DISCUSSION,  UNLESS
               OTHERWISE INDICATED, ASSUME VARIABLE NAMES
               AND FUNCTIONS ARE OF THE FOLLOWING TYPE:

               IMPLICIT INTEGER (A - W, Z)
               IMPLICIT REAL (X - Y)
USING DISLIB                                                    Page 4-3


4.1  INITIALIZATION ROUTINES (CATEGORY I)

     THERE IS ONLY ONE ROUTINE IN THIS CATEGORY, SUBROUTINE START.



4.1.1  SUBROUTINE START

PROGRAM MODULE:  START.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO INITIALIZE  VARIABLES  WHICH  ARE
          INTERNAL  TO  DISLIB.   THESE  VARIABLES ARE STORED IN LABELED
          COMMON BLOCKS, AND ARE ACCESSIBLE TO ALL OF THE OTHER  FORTRAN
          MODULES.   A  CALL  TO  THIS  SUBROUTINE  SHOULD  BE THE FIRST
          EXECUTABLE STATEMENT IN A USER  PROGRAM,  AND  THE  SUBROUTINE
          SHOULD  NOT BE CALLED A SECOND TIME.  SEVERAL OF THE VARIABLES
          INITIALIZED  REPRESENT  DEFAULT  VALUES  THAT   MIGHT   AFFECT
          SUBSEQUENT DISPLAYS.  THESE ARE:

               SCALING (THE GT40 SCREEN IS SCALED TO PHYSICAL UNITS.  IN
          OTHER  WORDS,  THE  LOWER LEFT HAND CORNER IS (0., 0.) AND THE
          UPPER RIGHT HAND CORNER  IS  (1023.,  767.).   FOR  A  FURTHER
          DESCRIPTION  OF  SCALING, SEE THE DOCUMENTATION FOR SUBROUTINE
          SCALE).

               INTENSITY (DEFAULT DISPLAY INTENSITY IS  LEVEL  2.   THIS
          MAY SUBSEQUENTLY BE CHANGED VIA A CALL TO SUBROUTINE SETMOD).

               LIGHT PEN (THE DEFAULT ASSUMPTION FOR  DISPLAY  FILES  IS
          THAT  THEY  ARE  NOT  LIGHT  PEN  SENSITIVE.   IN  OTHER WORDS
          TOUCHING A DISPLAY WITH  THE  LIGHT  PEN  WILL  NOT  CAUSE  AN
          INTERRUPT  THAT COULD BE PROCESSED BY THE GIDUS PROGRAM.  THIS
          ASSUMPTION  MAY  SUBSEQUENTLY  BE  CHANGED  VIA  A   CALL   TO
          SUBROUTINE  SETMOD.  A SECOND DEFAULT IS ASSUMED FOR THE LIGHT
          PEN.  IF A DISPLAY IS LIGHT PEN SENSITIVE, AND IS HIT  BY  THE
          LIGHT  PEN, THEN THE POINT OF INTERACTION WILL BE INTENSIFIED.
          THIS ASSUMPTION MAY SUBSEQUENTLY BE  CHANGED  VIA  A  CALL  TO
          SUBROUTINE SETA).

               BLINK (THE DEFAULT VALUE FOR  BLINK  IS  OFF.   THIS  MAY
          SUBSEQUENTLY BE CHANGED VIA A CALL TO SETMOD).

               LINE TYPE (SUBROUTINE START SETS A DEFAULT LINE  TYPE  OF
          SOLID.   THIS  MAY  SUBSEQUENTLY  BE  CHANGED  VIA  A  CALL TO
          SETMOD).

               FONT (INITIALLY FONT IS ASSUMED TO BE NORMAL.   THIS  MAY
          SUBSEQUENTLY BE CHANGED VIA A CALL TO SETA).
USING DISLIB                                                    Page 4-4


               SHIFT (CHARACTERS  DISPLAYED  BY  THE  TEXT  ROUTINE  ARE
          ASSUMED TO BE SHIFTED-IN.  THIS MAY SUBSEQUENTLY BE CHANGED TO
          SHIFTED-OUT BY DISPLAYING SHIFT-OUT CHARACTERS VIA TEXT.   FOR
          A  FURTHER  DESCRIPTION  OF SPECIAL SHIFTED-OUT CHARACTERS SEE
          THE DOCUMENTATION FOR ROUTINE TEXT).

               THE OTHER INITIALIZATIONS PERFORMED BY START, OF INTEREST
          TO THE USER, CONCERN THE LOG FILE (FOR MORE INFORMATION ON THE
          LOG FILE, SEE THE DOCUMENTATION FOR  CATEGORY  VII  ROUTINES).
          START  ASSUMES  THAT LOGGING WILL INITIALLY BE DISABLED.  THIS
          MAY SUBSEQUENTLY BE CHANGED VIA A CALL  TO  SUBROUTINE  LOGON.
          THE  DEFAULT  UNIT  NUMBER FOR THE LOG FILE IS 20.  START ALSO
          INITIALIZES THE TWO ERROR COUNTS (FOR FATAL  AND  WARNING)  TO
          ZERO.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               CLROPT (CATEGORY VIII)


WARNINGS:

               ANY PROGRAM ATTEMPTING TO CREATE  DISPLAYS,  OR  INTERACT
          WITH  GIDUS  MUST  CALL  START PRIOR TO USING ANY OF THE OTHER
          DISLIB ROUTINES.  NO CHECK IS MADE TO INSURE  THAT  START  HAS
          BEEN  CALLED,  SO IT IS THE USER'S RESPONSIBILITY.  PREFERABLY
          START SHOULD BE CALLED AS THE FIRST EXECUTABLE STATEMENT IN  A
          USER'S PROGRAM.

               START SHOULD NEVER BE CALLED MORE THAN  ONCE  IN  A  USER
          PROGRAM (AGAIN NO CHECK IS MADE FOR THIS).  IF START IS CALLED
          MORE THAN ONCE IT MIGHT UPSET SOME DISLIB ROUTINES WHICH  RELY
          ON  THE COMMON BLOCKS NOT BEING DISTURBED.  IF IT IS NECESSARY
          TO  RE-INITIALIZE  DISPLAY  PARAMETERS,  LOG  PARAMETERS,   OR
          SCALING PARAMETERS, ROUTINES EXIST FOR THOSE PURPOSES.


EXAMPLE:

               CALL START
          SHOULD BE FIRST EXECUTABLE STATEMENT.
USING DISLIB                                                    Page 4-5


4.2  DISPLAY CREATION ROUTINES (CATEGORY II)

     DISPLAY FILES CREATED BY DISLIB ARE CONTAINED IN VECTORS.  THE USER
SELECTS  WHICH  VECTOR  IS  TO CONTAIN WHICH DISPLAY FILE, AND IT IS HIS
RESPONSIBILITY TO DIMENSION A VECTOR A REASONABLE SIZE.  (THE BIGGER THE
DISPLAY  FILE,  THE  LARGER  THE VECTOR WOULD HAVE TO BE - E.G.  A SMALL
DISPLAY CONSISTING OF A FEW LINES AND SOME TEXT COULD PROBABLY FIT IN  A
VECTOR  DIMENSIONED  AT  50 OR 100 WORDS.  A DISPLAY FILE WITH MANY LONG
LINES, OR POSSIBLY CURVES (WHICH REQUIRE MANY SHORT LINE SEGMENTS) MIGHT
REQUIRE  A  DISPLAY  FILE  OF  300  OR  400 WORDS.  THE LARGEST POSSIBLE
DISPLAY FILE, ONE COMPLETELY FILLING THE 5K OF FREE  CORE  IN  THE  GT40
WOULD  NEED  A  VECTOR  DIMENSIONED  AT  ABOUT 2500 WORDS).  EACH VECTOR
CONTAINING A DISPLAY FILE, IS PACKED TWO 16  BIT  WORDS  (I.E.   A  GT40
WORD)  PER ELEMENT.  THE FIRST FIVE WORDS OF EACH SUCH VECTOR CONTAIN NO
DISPLAY WORDS, BUT ARE USED TO CONTAIN INFORMATION ABOUT THE DISPLAY.

     A VECTOR REPRESENTING  A  DISPLAY  FILE  SHOULD  NEVER,  UNDER  ANY
CIRCUMSTANCES  BE  MODIFIED BY A USER PROGRAM.  IN OTHER WORDS IT IS NOT
NECESSARY  TO  ZERO  THE  VECTOR,  OR  OTHERWISE  INITIALIZE  IT.    ALL
MODIFICATIONS  TO  THE  VECTOR  WILL  BE  MADE BY THE APPROPRIATE DISLIB
ROUTINES.  READ OPERATIONS ON THE VECTOR (E.G.  K = VEC(J)) MAY BE  DONE
AT  ANY  TIME,  BUT THE INFORMATION SO OBTAINED IS UNLIKELY TO BE OF ANY
USE TO A USER PROGRAM.

     THE VECTOR MUST BE OF TYPE INTEGER.  MANY OF THE  DISPLAY  CREATION
ROUTINES  HAVE  N,  AND FILE AS THEIR FIRST TWO PARAMETERS.  FILE IS THE
VECTOR  DESCRIBED  ABOVE,  WHICH  CONTAINS  THE   DISPLAY   FILE   UNDER
CONSTRUCTION.   WHEN THE DISPLAY HAS BEEN COMPLETELY CREATED, IT IS FILE
THAT GETS TRANSMITTED TO THE GT40.  N IS A POINTER TO THE DISPLAY  FILE.
THIS  IS  AN  INTEGER  VARIABLE (A SCALAR) WHICH MUST BE SUPPLIED BY THE
USER.  N ALWAYS POINTS TO THE NEXT AVAILABLE BYTE WITHIN FILE  THAT  CAN
BE  USED BY A DISPLAY CREATION ROUTINE.  AS WITH FILE, N SHOULD NEVER BE
INITIALIZED OR MODIFIED BY THE USER PROGRAM (ALL MODIFICATIONS ARE  DONE
BY  THE  APPROPRIATE  DISLIB ROUTINES).  N DIVIDED BY 4 (SINCE THERE ARE
FOUR EIGHT BIT BYTES IN A 36 BIT WORD) WILL GIVE THE NUMBER OF  ELEMENTS
USED IN FILE.  THIS INFORMATION CAN BE PRINTED OUT JUST BEFORE A DISPLAY
IS SENT TO THE GT40 (VIA SUBROUTINE ADFILE) IN ORDER TO GET AN  IDEA  OF
THE   APPROPRIATE  DIMENSION  OF  FILE.   (IN  OTHER  WORDS,  YOU  MIGHT
ORIGINALLY DIMENSION FILE AT 700 WORDS AND LATER  LEARN  THAT  ONLY  200
WERE NEEDED).


                                  NOTE


                    WARNING  -  IF  N  OR  FILE  IS  EVER
               MODIFIED     BY    THE    USER    PROGRAM,
               UNPREDICTABLE RESULTS WILL  OCCUR.   IF  A
               DISPLAY  FILE IS CORRUPTED IN THIS MANNER,
               AND THEN TRANSMITTED TO THE GT40, IT MIGHT
               POSSIBLY CAUSE GIDUS TO CRASH.
USING DISLIB                                                    Page 4-6


4.2.1  SUBROUTINE SCALE(XMIN, YMIN, XMAX, YMAX)

PROGRAM MODULE:  SCALE.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO SET THE SCALING  FACTOR  FOR  THE
          GT40.  UNLIKE STANDARD CALCOMP SOFTWARE, WHERE ALL PLOTTING IS
          DONE IN PHYSICAL UNITS (INCHES), DISLIB  CREATES  GRAPHICS  IN
          TERMS  OF  USER  UNITS  (SCALED TO PHYSICAL UNITS INTERNALLY).
          THE  USER  NEVER  NEED  WORRY  ABOUT  THE  PHYSICAL   (RASTER)
          DIMENSIONS OF THE CRT.

               THE FIRST TWO PARAMETERS  SPECIFY  THE  CO-ORDINATES  THE
          USER WOULD LIKE TO ASSIGN TO THE LOWER LEFT HAND CORNER OF THE
          SCREEN (RASTER POSITION (0,  0)).   THE  LAST  TWO  PARAMETERS
          SPECIFY  THE CO-ORDINATES THE USER WOULD LIKE TO ASSIGN TO THE
          UPPER RIGHT HAND CORNER OF THE SCREEN (RASTER POSITION  (1023,
          767)).   ONCE  THESE  TWO POINTS HAVE BEEN DEFINED IN TERMS OF
          USER UNITS, THEN ANY POSITION ON THE SCREEN IS DEFINED.

               INITIALLY START SETS THE SCALE IN THE FOLLOWING MANNER  -
          CALL   SCALE(0., 0., 1023., 767.).    THIS   TYPE  OF  SCALING
          EQUIVALENCES USER  UNITS  AND  PHYSICAL  UNITS.   THE  SCALING
          FACTOR  MAY  BE CHANGED AT ANY TIME, BUT KEEP IN MIND THAT THE
          SCALE APPLIES TO ALL USER DISPLAY FILES  (I.E.   EACH  DISPLAY
          DOES  NOT  HAVE  ITS  OWN SCALING FACTOR).  ANY DISLIB ROUTINE
          THAT RETURNS AN (X, Y) POSITION, RETURNS THE  CO-ORDINATES  IN
          TERMS OF THE CURRENT SCALE.

               IF IT IS NECESSARY TO HAVE THE Y AXIS SCALED THE SAME  AS
          THE  X  AXIS  (I.E.  1 USER UNIT REPRESENTS THE SAME NUMBER OF
          RASTER UNITS ALONG EACH AXIS) THEN REMEMBER THAT ON  THE  CRT,
          WIDTH    TO   LENGTH   IS   RATIO   3:4.    TO   VERIFY   THIS
          (YMAX - YMIN) / (XMAX - XMIN) SHOULD EQUAL  .75.   IT  IS  NOT
          NECESSARY  TO  CONFORM  TO THIS CRITERION, UNLESS YOU WANT THE
          SCALING THE SAME IN BOTH DIRECTIONS.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               NONE
USING DISLIB                                                    Page 4-7


EXAMPLES:

               CALL SCALE(-2.5, -.625, 12.5, 10.625)
          THIS WOULD CENTRE A 10 UNIT SQUARE ON THE SCREEN OF THE  GT40.
          THE ORIGIN (0., 0.) WOULD BE THE LOWER LEFT HAND CORNER OF THE
          SQUARE.  USER POSITION (5., 5.) WOULD BE  THE  CENTRE  OF  THE
          CRT.

               CALL SCALE(-7.33, -5.5, 7.33, 5.5)
          AGAIN THIS WOULD CENTRE A 10 UNIT SQUARE ON THE SCREEN OF  THE
          GT40.   THIS  TIME  THE ORIGIN (0., 0.) WOULD BE THE CENTRE OF
          THE SCREEN, AND THE CENTRE OF THE SQUARE.
USING DISLIB                                                    Page 4-8


4.2.2  SUBROUTINE INIT(N, FILE, MAXDIM, X, Y)

PROGRAM MODULE:  INIT.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO INITIALIZE A DISPLAY  FILE.   ALL
          DISPLAY  FILES  MUST  BE  INIT'ED  PRIOR  TO  USING ANY OF THE
          DISPLAY CREATION ROUTINES WHICH ADD WORDS TO THE DISPLAY  FILE
          (I.E.   MOVE,  VECTOR,  JOIN,  POINT, DOT, OR TEXT).  N IS THE
          DISPLAY POINTER AS DESCRIBED  IN  SECTION  4.2.   FILE  IS  AN
          INTEGER  VECTOR  AS  DESCRIBED  IN  SECTION  4.2.  MAXDIM IS A
          VARIABLE OR CONSTANT WHICH IS  THE  ACTUAL  DIMENSION  OF  THE
          VECTOR.   ALL ROUTINES THAT ADD INFORMATION TO THE VECTOR WILL
          CHECK THAT MAXDIM IS NOT EXCEEDED.   THIS  SUBSCRIPT  CHECKING
          CAN BE DISABLED BY PASSING ZERO AS THE THIRD PARAMETER TO INIT
          (ALTHOUGH THERE IS ABSOLUTELY NO ADVANTAGE IN DOING THIS).   X
          AND  Y  IS  THE POSITION ON THE SCREEN IN USER UNITS WHERE YOU
          WANT THE DISPLAY TO START (REMEMBER TO  CALL  SCALE  PRIOR  TO
          CALLING INIT).

               ONCE A DISPLAY HAS BEEN  TRANSMITTED  TO  THE  GT40  (VIA
          ADFILE) THE VECTOR THAT CONTAINED THE DISPLAY FILE CAN BE USED
          FOR SOME OTHER PURPOSE.  HOWEVER,  IF  YOU  WANT  TO  USE  THE
          VECTOR  TO  BUILD  ANOTHER DISPLAY FILE, THEN YOU MUST RE-INIT
          IT.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               SETGM  (CATEGORY X)
               ADWORD (CATEGORY X)
               SETSTA (CATEGORY X)
               IPHYSX (CATEGORY X)
               IPHYSY (CATEGORY X)


WARNINGS:


               IF A USER ATTEMPTS TO EXTEND A DISPLAY FILE THAT HAS  NOT
          BEEN  INIT'ED, THE PROGRAM WILL STOP WITH AN ERROR MESSAGE.  N
          IS  EXAMINED  TO  DETERMINE  WHETHER  THE  DISPLAY  HAS   BEEN
          INITIALIZED;  NEVER MODIFY N OR FILE.
USING DISLIB                                                    Page 4-9


EXAMPLES:

               CALL INIT(N1, FILE1, 100, 0., 0.)
          THIS INITIALIZES A SMALL DISPLAY FILE (100 WORDS) BY THE  NAME
          OF  FILE1.   N1  IS  THE  POINTER  FOR  THE DISPLAY FILE.  THE
          DISPLAY WILL START AT USER POSITION (0., 0.)

               CALL INIT(IPT, IDISP, 1000, USERX(0), USERY(0))
          THIS INITIALIZES A FAIRLY LARGE DISPLAY  FILE  WITH  THE  NAME
          IDISP,  IPT  IS  THE  DISPLAY FILE POINTER.  THIS DISPLAY WILL
          START AT THE LOWER LEFT HAND  CORNER  OF  THE  SCREEN  (RASTER
          POSITION  (0, 0)).  (SEE CATEGORY X ROUTINES FOR A DESCRIPTION
          OF USERX AND USERY).
USING DISLIB                                                   Page 4-10


4.2.3  SUBROUTINE POINT(N, FILE, X, Y)

PROGRAM MODULE:  POINT.F4


DESCRIPTION:

               THIS ROUTINE ADDS AN ABSOLUTE DISABLED (I.E.   INVISIBLE)
          POINT  TO  THE  SPECIFIED  DISPLAY FILE.  THE POINT IS AT USER
          POSITION (X, Y).  THIS IS ONE METHOD  OF  MOVING  THE  DISPLAY
          BEAM TO A NEW POSITION, WITHOUT DISPLAYING ANY GRAPHICS.  (THE
          PREFERRED METHOD  WOULD  BE  VIA  SUBROUTINE  MOVE,  DISCUSSED
          SHORTLY).   THIS ROUTINE ADDS ABSOLUTE DATA TO A DISPLAY FILE.
          THE DISPLAY MAY STILL BE MOVED BUT ONLY THAT PORTION PRIOR  TO
          THE  ABSOLUTE POINT, WILL CHANGE POSITION.  POINT IS SOMETIMES
          USEFUL TO HAVE IN A DISPLAY FILE.  PARAMETERS N AND  FILE  ARE
          AS DISCUSSED IN SECTION 4.2.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               SETSTA (CATEGORY X)
               ADWORD (CATEGORY X)
               SETGM  (CATEGORY X)
               IPHYSX (CATEGORY X)
               IPHYSY (CATEGORY X)


EXAMPLES:


               CALL POINT(N, FILE, 10., 5.)
          ADDS AN ABSOLUTE POINT AT USER POSITION (10., 5.)  TO  DISPLAY
          FILE.

               CALL POINT(N, FILE, USERX(10), USERY(10))
          ADDS AN ABSOLUTE POINT AT RASTER POSITION (10, 10) TO  DISPLAY
          FILE.
USING DISLIB                                                   Page 4-11


4.2.4  SUBROUTINE VECTOR(N, FILE, X, Y)

PROGRAM MODULE:  VECTOR.F4


DESCRIPTION:

               THIS SUBROUTINE DRAWS A LINE FROM THE CURRENT POSITION OF
          THE  DISPLAY  BEAM  TO  THE USER POSITION (X, Y).  THE LINE IS
          VISIBLE.  THE CHARACTERISTICS OF  THE  LINE  (INTENSITY,  LINE
          TYPE,  BLINK,  AND  LIGHT PEN SENSITIVITY) MAY BE ALTERED BY A
          CALL TO SETMOD (WHICH SHOULD BE DONE PRIOR TO  CALLING  VECTOR
          IN  ORDER  TO HAVE ANY EFFECT).  WHENEVER POSSIBLE, THE VECTOR
          ADDED TO THE DISPLAY FILE WILL BE  A  SHORT  VECTOR.   IF  THE
          DISTANCE  BETWEEN THE DISPLAY BEAM AND THE DESIRED POSITION IS
          TOO GREAT, THEN A LONG VECTOR WILL BE  ADDED  TO  THE  DISPLAY
          FILE.  N AND FILE ARE AS DESCRIBED IN SECTION 4.2.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               ADLINE (CATEGORY X)


EXAMPLES:

               CALL VECTOR(N, FILE, 10., 10.)
               CALL SETMOD(2, .FALSE., .TRUE., 0)
               CALL VECTOR(N, FILE, 0., 10.)
          THIS EXAMPLE WOULD DRAW A VECTOR FROM THE CURRENT POSITION  OF
          THE  DISPLAY  BEAM TO USER (10., 10.).  THEN A BLINKING VECTOR
          WOULD BE ADDED TO POSITION (0., 10.).
USING DISLIB                                                   Page 4-12


     4.2.5  SUBROUTINE MOVE(N, FILE, X, Y)

PROGRAM MODULE:  MOVE.F4


DESCRIPTION:

               THIS ROUTINE IS IDENTICAL TO SUBROUTINE VECTOR  WITH  THE
          EXCEPTION  THAT  THE VECTOR ADDED TO THE DISPLAY FILE, WHETHER
          LONG OR SHORT, IS DISABLED (I.E.   INVISIBLE).   THIS  IS  THE
          PREFERRED  WAY TO MOVE THE DISPLAY BEAM (AS OPPOSED TO POINT),
          BECAUSE THE DATA ADDED TO THE DISPLAY FILE IS RELATIVE.   NOTE
          THAT ALL OF THE PARAMETERS THAT COULD BE MODIFIED BY SETMOD OR
          SETA  ARE  MEANINGLESS  FOR  A  MOVE,  SINCE  THE  VECTOR   IS
          INVISIBLE.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               ADLINE (CATEGORY X)


EXAMPLE:

               CALL MOVE(N, FILE, 10., 15.)
          THIS MOVES THE DISPLAY BEAM TO THE USER POSITION (10., 15.).
USING DISLIB                                                   Page 4-13


     4.2.6  SUBROUTINE JOIN(N, FILE, XST, YST, XEND, YEND)

PROGRAM MODULE:  JOIN.F4


DESCRIPTION:

               THIS  ROUTINE  JOINS  THE  USER  POINTS  (XST, YST)   AND
          (XEND, YEND)   WITH   A   VECTOR.   THIS  ROUTINE  IS  EXACTLY
          EQUIVALENT TO:

               CALL MOVE(N, FILE, XST, YST)
               CALL VECTOR(N, FILE, XEND, YEND)


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               MOVE   (CATEGORY II)
               VECTOR (CATEGORY II)


EXAMPLE:

               CALL JOIN(N, FILE, 0., 10., 10., 10.)
               CALL JOIN(N, FILE, 0., 0., 10., 0.)
          THIS EXAMPLE DRAWS TWO VECTORS, BOTH PARALLEL TO THE X AXIS.
USING DISLIB                                                   Page 4-14


4.2.7  SUBROUTINE DOT(N, FILE, X, Y)

PROGRAM MODULE:  DOT.F4


DESCRIPTION:

               THIS ROUTINE ADDS A VISIBLE DOT  (I.E.   ONE  RASTER  DOT
          ILLUMINATED)   AT  USER  POSITION  (X,  Y).   DOT  INSERTS  AN
          INVISIBLE VECTOR  TO  USER  POSITION  (X,  Y)  FOLLOWED  BY  A
          RELATIVE ENABLED POINT.  NOTE THAT RELATIVE POINTS, UNLIKE THE
          SUBROUTINE POINT, DOES NOT  RESULT  IN  ABSOLUTE  DATA.   THIS
          ROUTINE  ADDS  APPROXIMATELY  SIX WORDS TO A DISPLAY FILE EACH
          TIME IT IS CALLED, SO IT SHOULD BE USED SPARINGLY.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               IPHYSX (CATEGORY X)
               IPHYSY (CATEGORY X)
               USERX  (CATEGORY X)
               USERY  (CATEGORY X)
               MOVE   (CATEGORY II)
               SETGM  (CATEGORY X)
               ADWORD (CATEGORY X)


EXAMPLE:

               CALL DOT(N, FILE, X, 47.35)
          THIS EXAMPLE  ADDS  A  DOT  TO  A  DISPLAY  FILE  AT  POSITION
          (X, 47.35).  POSITION IS EXPRESSED IN USER UNITS (AS ALWAYS).
USING DISLIB                                                   Page 4-15


4.2.8  SUBROUTINE TEXT(N, FILE, STRING, COUNT)

PROGRAM MODULE:  TEXT.F4


DESCRIPTION:

               THIS ROUTINE IS  USED  TO  INSERT  TEXT  AT  THE  CURRENT
          POSITION  OF  THE DISPLAY BEAM.  THE PARAMETERS N AND FILE ARE
          AS DISCUSSED IN SECTION 4.2.  THE THIRD PARAMETER IS A VECTOR,
          CONTAINING  CHARACTERS  PACKED IN A5 FORMAT (5 SEVEN BIT ASCII
          CHARACTERS, LEFT JUSTIFIED  IN  A  36  BIT  WORD).   HOLLERITH
          CONSTANTS  (QUOTED STRINGS) ARE IN THIS FORMAT AND MAY BE USED
          FREELY.  COUNT IS THE NUMBER OF CHARACTERS IN THE STRING.

               TEXT SUPPORTS THE ENTIRE GT40 CHARACTER SET, SO THERE ARE
          A  FEW  SPECIAL  CONSIDERATIONS.   THE HARDWARE OF THE GT40 IS
          CAPABLE OF DISPLAYING ALL  128  ASCII  CODES.   THIS  INCLUDES
          UPPER  AND  LOWER  CASE, MANY SPECIAL SYMBOLS, AND SHIFTED-OUT
          SPECIAL SYMBOLS.  CHARACTERS MAY BE DISPLAYED IN  ONE  OF  TWO
          MODES, SHIFT-IN (OR NORMAL MODE) AND SHIFT-OUT (SPECIAL MODE).
          WHEN  SHIFTED-IN,  ALL  PRINTING  CHARACTERS   ARE   DISPLAYED
          NORMALLY  (PRINTING  CHARACTERS  HAVE OCTAL CODES GREATER THAN
          37).  NON-PRINTING CHARACTERS (OCTAL CODES LESS THAN 40)  HAVE
          NO  EFFECT  ON  THE  DISPLAY, WITH THE EXCEPTION OF BACKSPACE,
          LINE FEED, CARRIAGE RETURN,  AND  SHIFT-OUT  (OCTAL  CODE  16)
          WHICH  CAUSES  CHARACTERS  TO  BE INTERPRETED IN SPECIAL MODE.
          WHEN SHIFTED-OUT, ALL OCTAL CODES GREATER THAN 37 ARE  ILLEGAL
          AND  CAUSE  THE DPU TO STOP AFTER INTERRUPTING THE CPU.  OCTAL
          CODES LESS THAN 40 (WHICH ARE  NON-PRINTING  IN  NORMAL  MODE)
          BECOME SPECIAL SYMBOLS (INCLUDING SOME CHARACTERS OF THE GREEK
          ALPHABET).  WHEN IN SHIFTED-OUT MODE, THE  CHARACTER  SHIFT-IN
          (OCTAL CODE 17) CAUSES THE HARDWARE TO RETURN TO NORMAL MODE.

               WITH THIS IN MIND, TEXT PERFORMS IN THE FOLLOWING MANNER.
          INITIALLY  START  SETS  THE  DEFAULT  OF SHIFTED-IN MODE.  ALL
          NON-PRINTING CHARACTERS (INCLUDING CARRIAGE RETURN, LINE FEED,
          AND  BACKSPACE) ARE REPLACED BY QUESTION MARKS (?'S).  THE ONE
          EXCEPTION TO THIS  SUBSTITUTION  IS  THE  SHIFT-OUT  CHARACTER
          WHICH  IS  INSERTED  INTO THE DISPLAY FILE, AND CAUSES TEXT TO
          ENTER SHIFT-OUT MODE.  IN THIS MODE, ALL CHARACTERS PASSED  TO
          TEXT  ARE  CHECKED.   IF  ONE  OF  THEM  IS SHIFT-IN THEN TEXT
          RETURNS TO NORMAL PROCESSING.  IF  THE  CHARACTERS  ARE  LEGAL
          SHIFTED-OUT  CHARACTERS  THEN  THEY  ARE  ADDED TO THE DISPLAY
          FILE.  IF  THEY  ARE  ILLEGAL  SHIFT-OUT  CHARACTERS,  THEN  A
          SHIFT-IN IS INSERTED INTO THE DISPLAY FILE, AND IS FOLLOWED BY
          THE OFFENDING CHARACTER.
USING DISLIB                                                   Page 4-16


               ALTHOUGH TEXT HAS THE CAPABILITY  OF  HANDLING  THE  FULL
          ASCII CHARACTER SET, THE F40 COMPILER IS NOT QUITE SO FLEXIBLE
          (E.G.  YOU CANNOT HAVE LOWER CASE CHARACTERS  IN  A  HOLLERITH
          STRING  ETC.).  HOWEVER THE VECTOR OF CHARACTERS CAN ALWAYS BE
          SET UP NUMERICALLY.  AN EXAMPLE OF THIS WOULD  BE  ADDING  THE
          OCTAL  CONSTANT  201004020100  TO  AN  ELEMENT  OF A VECTOR TO
          CONVERT FROM UPPER TO LOWER CASE.  THE FONT OF ALL  CHARACTERS
          CAN BE ALTERED BY A CALL TO SUBROUTINE SETA.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               SETSTA (CATEGORY X)
               ADWORD (CATEGORY X)
               SETGM  (CATEGORY X)
               GFIELD (CATEGORY X)
               ADBYTE (CATEGORY X)


EXAMPLE:

               CALL MOVE(N, FILE, 200., 200.)
               CALL SETA(.FALSE., .FALSE.)
               VEC(1) = 'ABCDE'
               CALL TEXT(N, FILE, VEC, 5)
               CALL MOVE(N, FILE, 200., 180.)
               VEC(1) = VEC(1) + "201004020100
               CALL SETA(.TRUE., .FALSE.)
               CALL TEXT(N, FILE, VEC, 2)
          THIS DISPLAYS ABCDE AT USER POSITION (200.,  200.)  AND  LOWER
          CASE AB (IN ITALICS) AT USER POSITION (200., 180.)
USING DISLIB                                                   Page 4-17


4.2.9  SUBROUTINE SETMOD(INT, LP, BLINK, LINE)

PROGRAM MODULE:  SETMOD.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO ALTER THE CHARACTERISTICS OF  ALL
          DISPLAY  DATA  THAT FOLLOW UNTIL SETMOD IS CALLED AGAIN.  THIS
          ROUTINE MAY BE CALLED AT ANY TIME.  THE FIRST PARAMETER IS  AN
          INTEGER  VARIABLE OR CONSTANT, WHICH SETS THE INTENSITY OF THE
          DISPLAY (0 IS THE  LOWEST  -  QUITE  DIM,  7  IS  THE  HIGHEST
          INTENSITY  -  VERY BRIGHT).  THE SECOND PARAMETER IS A LOGICAL
          VARIABLE OR CONSTANT.  IF .TRUE.  THEN DISPLAY DATA  FOLLOWING
          IS  LIGHT PEN SENSITIVE (WILL CAUSE AN INTERRUPT IF HIT BY THE
          LIGHT PEN).  IF .FALSE.  THEN THE DISPLAY  DATA  FOLLOWING  IS
          NOT  LIGHT  PEN  SENSITIVE.   THE  THIRD  PARAMETER  IS ALSO A
          LOGICAL VARIABLE OR CONSTANT.  IF .TRUE.  THEN  THE  FOLLOWING
          DISPLAY  DATA  WILL  BLINK.   IF  .FALSE.   THEN THE FOLLOWING
          DISPLAY DATA WILL  NOT  BLINK.   THE  FINAL  PARAMETER  IS  AN
          INTEGER VARIABLE OR CONSTANT WHICH SHOULD BE IN THE RANGE (0 -
          3).  THIS PARAMETER SELECTS THE LINE TYPE (0 IS SOLID LINE,  1
          IS  LONG  DASHES, 2 IS SHORT DASHES, AND 3 IS DOT-DASH).  THIS
          PARAMETER ONLY AFFECTS VECTORS.  ONLY THE LOW ORDER THREE BITS
          OF  INTENSITY  ARE  USED, AND SIMILARLY ONLY THE LOW ORDER TWO
          BITS OF LINE ARE USED.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               NONE


WARNING:

               IT IS NOT A GOOD IDEA TO DRAW DISPLAYS WITH A  VERY  HIGH
          INTENSITY  (SAY  GREATER  THAN 4 OR 5) SINCE THIS CAN BURN OUT
          THE PHOSPHOR ON THE SCREEN, PARTICULARLY IF THE DISPLAY  STAYS
          IN THE SAME PLACE FOR A LONG TIME.


EXAMPLE:

               CALL SETMOD(5, .FALSE., .TRUE., 100)
          DISPLAY INTENSITY 5, NOT LIGHT PEN SENSITIVE, BLINK IS ON, AND
          LINE TYPE 0 (SOLID) [LOW ORDER TWO BITS = 00].
USING DISLIB                                                   Page 4-18


     4.2.10  SUBROUTINE SETA(ITAL, LP)

PROGRAM MODULE:  SETA.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO ALTER THE CHARACTERISTICS OF  ALL
          DISPLAY  DATA  THAT  FOLLOW  UNTIL SETA IS CALLED AGAIN.  THIS
          ROUTINE MAY BE  CALLED  AT  ANY  TIME.   BOTH  PARAMETERS  ARE
          LOGICAL  VARIABLES OR CONSTANTS).  THE FIRST PARAMETER IS USED
          TO SET CHARACTER FONT, IF .TRUE.  CHARACTERS WILL BE DISPLAYED
          AS ITALICS, IF .FALSE.  CHARACTERS WILL BE DISPLAYED IN NORMAL
          FONT.  IF THE SECOND PARAMETER IS .TRUE.   IT  INDICATES  THAT
          POINTS OF LIGHT PEN INTERACTION WILL BE INTENSIFIED (OF COURSE
          THAT  IS  ONLY  RELEVANT  TO  DISPLAYS  THAT  ARE  LIGHT   PEN
          SENSITIVE).   IF  THE SECOND PARAMETER IS .FALSE.  THEN POINTS
          OF LIGHT PEN INTERACTION WILL NOT BE INTENSIFIED.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               NONE


EXAMPLE:

               CALL SETA(.TRUE., .FALSE.)
          CHARACTERS WILL BE IN ITALICS AND LIGHT PEN HITS WILL  NOT  BE
          BRIGHTENED.
USING DISLIB                                                   Page 4-19


     4.2.11  SUBROUTINE ADFILE(N, FILE, STATUS, ID)

PROGRAM MODULE:  ADFILE.F4


DESCRIPTION:

               ONCE  A  DISPLAY  FILE  HAS  BEEN  CREATED,  IT  MUST  BE
          TRANSMITTED  TO  THE  GT40  BEFORE  IT  IS  OF  ANY USE.  THIS
          TRANSMISSION IS DONE BY ADFILE.  PARAMETERS N AND FILE ARE  AS
          DISCUSSED  IN  SECTION  4.2.  THE THIRD PARAMETER IS A DISPLAY
          STATUS WORD.  THIS STATUS WORD  HAS  BEARING  ON  WHETHER  THE
          DISPLAY   BEING  TRANSMITTED  WILL  BE  WRITE-PROTECTED  (I.E.
          CANNOT BE DELETED),  WHETHER  IT  WILL  BE  PROTECTED  AGAINST
          DISABLING,  OR  WHETHER  THE  DISPLAY  IS MOVEABLE OR NOT.  IN
          ADDITION THIS STATUS WORD CAN BE SET TO INDICATE  WHETHER  THE
          DISPLAY,  OR ANY PART OF IT IS LIGHT PEN SENSITIVE.  CURRENTLY
          GIDUS MAKES NO USE OF THIS LIGHT PEN STATUS, BUT IT MIGHT IN A
          FUTURE  VERSION.  THIS STATUS WORD CAN BE CREATED BY A CALL TO
          THE  FUNCTION  DSTAT  (SEE  FOLLOWING  ROUTINE).   THE   FINAL
          PARAMETER IN ADFILE MUST BE AN INTEGER VARIABLE.  IF ADFILE IS
          SUCCESSFUL IN TRANSMITTING THE DISPLAY FILE, THEN  GIDUS  WILL
          SELECT  THE  FIRST  AVAILABLE  DISPLAY  NUMBER,  WHICH WILL BE
          RETURNED AS ID.  THIS VARIABLE MAY THEN BE USED IN  SUBSEQUENT
          CALLS TO THE DISPLAY MANIPULATION ROUTINES (CATEGORY III).

               NOTE THAT THE DISPLAY, ONCE TRANSMITTED TO THE  GT40,  IS
          INITIALLY  DISABLED.   TO MAKE THE DISPLAY VISIBLE IT WOULD BE
          NECESSARY TO CALL ENABLE (CATEGORY III) AFTER THE ADFILE.


POSSIBLE ERRORS:

               ALL ERRORS ARE FATAL, AND RETURN ID = 0.  AN  INTELLIGENT
          USER  PROGRAM  WOULD  CHECK ID AFTER DOING AN ADFILE TO INSURE
          THAT THE DISPLAY WAS TRANSMITTED TO THE GT40 PROPERLY.

               ?NOT ENOUGH CORE FOR ADDITION
          THE DISPLAY FILE IS TOO BIG TO FIT IN THE REMAINING FREE  CORE
          IN  THE  GT40.   IF  IT IS NECESSARY TO TRANSMIT THIS DISPLAY,
          THEN SOME PREVIOUS DISPLAYS WOULD HAVE TO  BE  DELETED,  OR  A
          RESET COULD BE DONE.

               ?NO FREE DISPLAY SLOT FOR ADDITION
          THIS MEANS THAT ALL 54 USER DISPLAY FILES ARE IN USE  SO  THIS
          ONE  CANNOT  BE  ADDED.   IT  WOULD  BE  NECESSARY TO DELETE A
          PREVIOUS DISPLAY FILE IN ORDER FOR THIS ONE TO FIT.

               ?INVALID REPLY TO REQUEST TO ADD
          THIS IS A SYSTEM ERROR.  DISLIB HAS SENT A  COMMAND  TO  GIDUS
          REQUESTING  TO  ADD  A  DISPLAY  FILE.   GIDUS  REPLIES WITH A
          MEANINGLESS STATUS TRANSMISSION.
USING DISLIB                                                   Page 4-20


               ?ADD BLOCK FAILS
          AGAIN THIS IS A SYSTEM ERROR.  EACH DISPLAY FILE  IS  SENT  IN
          INDIVIDUAL  BLOCKS  OF  ABOUT  120  BYTES  EACH.  THIS MESSAGE
          INDICATES THAT A BLOCK HAS FAILED, SO THE ENTIRE ADFILE FAILS.
          THIS  ERROR  SHOULD BE PRECEDED BY ANOTHER ERROR MESSAGE (FROM
          ROUTINE SNDBLK - CATEGORY X) GIVING THE REASON WHY  THE  BLOCK
          FAILED.

               ?INVALID RESPONSE TO LAST BLOCK
          THE  LAST  BLOCK  THAT  ADFILE  SENDS  CONTAINS   THE   STATUS
          INFORMATION NEEDED BY GIDUS (I.E.  FROM THE STATUS PARAMETER).
          IF THIS BLOCK CANNOT BE PROPERLY TRANSMITTED THEN  THIS  ERROR
          (A SYSTEM ERROR) WILL OCCUR.


ROUTINES CALLED:

               SEND   (CATEGORY X)
               GET    (CATEGORY X)
               SNDBLK (CATEGORY X)


WARNING:

               AT NO TIME WHEN GIDUS AND DISLIB ARE  COMMUNICATING  WITH
          EACH  OTHER  (AND THIS IS ESPECIALLY EVIDENT DURING AN ADFILE)
          SHOULD THE USER  TYPE  ANYTHING  ON  THE  KEYBOARD.   KEYBOARD
          INTERRUPTS  ARE  ALMOST  GUARANTEED  TO  UPSET  TRANSMISSIONS,
          CAUSING CHECKSUM ERRORS OR  WORSE.   IF  IT  IS  NECESSARY  TO
          CTRL/C  OUT OF YOUR PROGRAM, THEN THIS CAN BE DONE, BUT DO NOT
          USE THE KEYBOARD FOR OTHER PURPOSES, UNLESS  GIDUS  IS  IN  TI
          STATE (TERMINAL INPUT).


EXAMPLES:

               CALL ADFILE(J, KD, 0, IK)
          THIS TRANSMITS A DISPLAY FILE KD WITH POINTER J.   THE  STATUS
          WORD  IS  EQUAL  TO  ZERO  INDICATING  NO SPECIAL STATUS.  THE
          DISPLAY NUMBER IS RETURNED IN IK, WHICH WOULD BE USED AS A TAG
          FOR SUBSEQUENT DISPLAY OPERATIONS.

               CALL ADFILE(IPOINT, IDFILE, DSTAT(0, 0, 0, -1), IDNUM(I))
          THIS TRANSMITS THE VECTOR IDFILE, POINTED TO BY  IPOINT.   THE
          STATUS  CALL SETS UP A STATUS WORD INDICATING THAT THE DISPLAY
          CAN BE MOVED.  THE I'TH ELEMENT OF VECTOR IDNUM  WILL  BE  THE
          DISPLAY TAG USED IN THE DISPLAY MANIPULATION ROUTINES.
USING DISLIB                                                   Page 4-21


4.2.12  INTEGER FUNCTION DSTAT(WPROT, NODIS, LPS, REL)

PROGRAM MODULE:  DSTAT.F4


DESCRIPTION:

               THIS FUNCTION IS USED TO RETURN AN  INTEGER  STATUS  WORD
          WHICH  CAN BE USED AS THE THIRD PARAMETER IN A CALL TO ADFILE.
          DSTAT TAKES FOUR PARAMETERS, ALL OF THEM LOGICAL.  IF WPROT IS
          .TRUE.   THEN  THE  DISPLAY  CANNOT  BE  DELETED.  IF NODIS IS
          .TRUE.  THEN THE DISPLAY CANNOT BE DISABLED.  IF LPS IS .TRUE.
          THEN  THE  DISPLAY ALLOWS LIGHT PEN HITS (CURRENTLY GIDUS PAYS
          NO ATTENTION TO THIS PARAMETER).  IF REL IS .TRUE.   THEN  THE
          DISPLAY  IS  CONSIDERED RELOCATABLE AND CAN BE MOVED ABOUT THE
          SCREEN  (VIA  MOVFIL).   REMEMBER  THAT  THIS  IS  AN  INTEGER
          FUNCTION AND SHOULD BE DECLARED INTEGER IN ANY PROGRAM CALLING
          IT.


                                       NOTE


                   IT IS NOT NECESSARY TO SPECIFY .TRUE.  OR .FALSE.
              EXPLICITLY,   WHEN  CALLING  A  ROUTINE  THAT  EXPECTS
              LOGICAL PARAMETERS.  INTEGERS MAY  BE  PASSED  INSTEAD
              WHERE  -1  IS  CONSIDERED  .TRUE.  AND 0 IS CONSIDERED
              .FALSE.




POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               NONE


EXAMPLE:

               J = DSTAT(.TRUE., 0, 0, -1)
          THIS RETURNS A STATUS WORD  WHICH  INDICATES  THE  DISPLAY  IS
          WRITE PROTECTED, IT MAY BE DISABLED, AND IT MAY BE MOVED ABOUT
          THE SCREEN.
USING DISLIB                                                   Page 4-22


4.2.13  SUBROUTINE GETPOS(N, FILE, X, Y)

PROGRAM MODULE:  GETPOS.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO RETURN THE CURRENT USER  POSITION
          OF  THE  DISPLAY BEAM WITHIN THE SPECIFIED DISPLAY FILE.  THIS
          ROUTINE IS ONLY SIGNIFICANT WHILE THE DISPLAY  FILE  IS  UNDER
          CONSTRUCTION.  IT IS NEVER NECESSARY TO CALL GETPOS, BUT IT IS
          SOMETIMES CONVENIENT TO KNOW WHERE YOU  ARE,  PARTICULARLY  IF
          YOU ARE BUILDING SEVERAL DISPLAY FILES AT THE SAME TIME,


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               USERX  (CATEGORY X)
               USERY  (CATEGORY X)


EXAMPLE:

               CALL GETPOS(N, FILE, XST, YST)
               CALL VECTOR(N, FILE, XST + 10., YST)
          EXTEND A VECTOR FROM THE CURRENT POSITION  TO  A  POSITION  10
          USER UNITS TO THE RIGHT.
USING DISLIB                                                   Page 4-23


     4.3  DISPLAY MANIPULATION ROUTINES (CATEGORY III)

     THIS CATEGORY OF ROUTINES IS USED TO MANIPULATE DISPLAY FILES  THAT
ARE RESIDENT IN THE GT40.  A USER DISPLAY FILE MAY BE ENABLED, DISABLED,
DELETED, OR MOVED ABOUT  THE  SCREEN.   REMEMBER  THAT  IN  THE  DISPLAY
CREATION  ROUTINES  THE  FIRST  TWO PARAMETERS (N AND FILE) WERE USED TO
IDENTIFY  A  PARTICULAR  DISPLAY  FILE.   IN  THE  DISPLAY  MANIPULATION
ROUTINES  A  DISPLAY  FILE  IS  IDENTIFIED BY THE DISPLAY TAG OR DISPLAY
NUMBER (I.E.  THE FOURTH PARAMETER RETURNED  BY  ADFILE).   ALL  OF  THE
ROUTINES IN THIS CATEGORY INTERACT WITH GIDUS (AS OPPOSED TO MOST OF THE
DISPLAY CREATION ROUTINES WHICH ARE NOT AWARE  OF  THE  GT40,  WITH  THE
EXCEPTION OF ADFILE).





4.3.1  SUBROUTINE ENABLE(ID)

PROGRAM MODULE:  ENABLE.F4


DESCRIPTION:

               THIS ROUTINE FUNCTIONS IN A SIMILAR MANNER TO  THE  GIDUS
          ENABLE  COMMAND.   THE ONE PARAMETER IS AN INTEGER VARIABLE OR
          CONSTANT IN THE RANGE 0 - 63 (OR 0 - 77 OCTAL).  IF A  DISPLAY
          OF  THAT  NUMBER  EXISTS,  THEN  IT WILL BECOME VISIBLE ON THE
          SCREEN.  REMEMBER THAT IT IS NECESSARY TO DO AN ENABLE AFTER A
          DISPLAY  FILE  HAS  BEEN TRANSMITTED TO GIDUS BY ADFILE, SINCE
          THE DEFAULT IS FOR THE DISPLAY TO BE DISABLED.


POSSIBLE ERRORS:

               %TRYING TO ENABLE A BAD DISPLAY  
          THE PARAMETER PASSED TO ENABLE WAS NOT AN INTEGER IN THE RANGE
          0 - 63.   THE NUMBER YOU ATTEMPTED TO ENABLE IS PRINTED TO THE
          RIGHT OF THE ERROR MESSAGE.

               %TRYING TO ENABLE A NON-EXISTENT DISPLAY
          THE PARAMETER PASSED WAS WITHIN THE LEGAL RANGE  (0 - 63)  BUT
          NO DISPLAY BY THAT NUMBER EXISTS.  THE NUMBER YOU ATTEMPTED TO
          ENABLE IS PRINTED TO THE RIGHT OF THE ERROR MESSAGE.
USING DISLIB                                                   Page 4-24


               ?INVALID RESPONSE TO ENABLE
          THE STATUS TRANSMISSION GIDUS SENT AFTER RECEIVING THE  ENABLE
          COMMAND  WAS  INVALID.   THIS  IS A SYSTEM ERROR THAT COULD BE
          CAUSED BY A CORRUPT GIDUS, OR  BY  A  BAD  TRANSMISSION.   THE
          NUMBER PRINTED TO THE RIGHT OF THE ERROR MESSAGE IS THE STATUS
          WORD RECEIVED FROM GIDUS.   THIS  ERROR  MESSAGE  RETURNS  THE
          PARAMETER   ID   AS   ZERO,   WHICH  HAS  ITS  ADVANTAGES  AND
          DISADVANTAGES.  THIS WOULD ALLOW A  USER  PROGRAM  TO  MONITOR
          WHETHER  THE  ENABLE  WERE SUCCESSFUL OR NOT.  BECAUSE OF THIS
          PARAMETER MODIFICATION, CONSTANTS SHOULD NOT BE PASSED TO THIS
          ROUTINE  UNLESS  THE  USER  IS  CONFIDENT THAT THE THIRD ERROR
          WOULD NOT OCCUR, OR IS WILLING TO SUFFER THE  CONSEQUENCES  IF
          IT DOES.


ROUTINES CALLED:

               SEND   (CATEGORY X)
               GET    (CATEGORY X)
               ERROR  (CATEGORY VII)


EXAMPLE:

               CALL ENABLE(IDISP3)
               CALL ENABLE(IDNUM(J))
               MP = 4
               CALL ENABLE(MP)
          ENABLE DISPLAY NUMBERS IDISP3, IDNUM(J), AND ENABLE  THE  MAIN
          POINTER.
USING DISLIB                                                   Page 4-25


4.3.2  SUBROUTINE DISABL(ID)

PROGRAM MODULE:  DISABL.F4


DESCRIPTION:

               THIS ROUTINE  FUNCTIONS  IN  A  MANNER  VERY  SIMILAR  TO
          ENABLE,  EXCEPT THAT THE SPECIFIED DISPLAY FILE (IF IT EXISTS)
          IS DISABLED, WHICH MEANS IT IS STILL RESIDENT IN THE GT40  BUT
          NO LONGER VISIBLE.


POSSIBLE ERRORS:

               %TRYING TO DISABLE A BAD DISPLAY NUMBER
          (SIMILAR TO ENABLE)

               %TRYING TO DISABLE A NON-EXISTENT DISPLAY NUMBER
          (SIMILAR TO ENABLE)

               ?INVALID RESPONSE TO DISABLE
          (SIMILAR TO ENABLE, RETURNS ID = 0)

               %CANNOT DISABLE THIS DISPLAY
          THE DISPLAY NUMBER SPECIFIED IS  A  NO-DISABLE  DISPLAY  FILE.
          THIS  MIGHT  BE  ONE  OF THE THREE GIDUS DISPLAYS PROTECTED IN
          THIS MANNER, OR POSSIBLY A USER DISPLAY, PROTECTED BY ADFILE.


ROUTINES CALLED:

               SEND   (CATEGORY X)
               GET    (CATEGORY X)
               ERROR  (CATEGORY VII)


EXAMPLE:

               CALL DISABL(ID)
               IST = 2
               CALL DISABL(IST)
          DISABLE DISPLAY NUMBER ID, AND THE GIDUS STATUS DISPLAY.
USING DISLIB                                                   Page 4-26


     4.3.3  SUBROUTINE DELETE(ID)

PROGRAM MODULE:  DELETE.F4


DESCRIPTION:

               THIS ROUTINE DISABLES THE SPECIFIED DISPLAY FILE AND THEN
          REMOVES IT FROM THE MEMORY OF THE GT40, FREEING THAT SPACE AND
          DISPLAY  NUMBER  FOR  SOME  FUTURE  DISPLAY.    THIS   ROUTINE
          FUNCTIONS  IN  A  MANNER  VERY  SIMILAR  TO  THE  GIDUS DELETE
          COMMAND.  WHEN A DISPLAY FILE IS BEING DELETED YOU WILL NOTICE
          ALL  DISPLAY FILES WILL BLINK OFF FOR A VERY SHORT TIME.  THIS
          IS BECAUSE IT IS NECESSARY TO STOP THE  DPU  WHILE  MEMORY  IS
          BEING  COMPACTED.   IF A USER PROGRAM SIMPLY DESIRES TO MAKE A
          DISPLAY FILE INVISIBLE, THEN A DISABL IS PREFERRED TO A DELETE
          BECAUSE IT IS FASTER.

               THE DELETE ROUTINE IS A NICE WAY OF KEEPING CONTINUITY ON
          THE  SCREEN OF THE GT40.  FOR EXAMPLE YOU MIGHT WANT TO MODIFY
          A DISPLAY, RE-TRANSMIT IT TO GIDUS, ENABLE IT, AND THEN DELETE
          THE  OLD  COPY.   THIS  GIVES  A  SMOOTH  FLOWING  INTERACTIVE
          PROGRAM.


POSSIBLE ERRORS:

               %TRYING TO DELETE A BAD DISPLAY NUMBER
          (SIMILAR TO ENABLE)

               %TRYING TO DELETE A NON-EXISTENT DISPLAY
          (SIMILAR TO ENABLE)

               ?INVALID REPLY TO DELETE
          (SIMILAR TO ENABLE, RETURNS ID = 0)

               %TRYING TO DELETE A WRITE-PROTECTED DISPLAY
          THE DISPLAY NUMBER SPECIFIED  IS  A  WRITE  PROTECTED  DISPLAY
          FILE.  THIS MIGHT BE ANY OF THE GIDUS DISPLAYS, OR POSSIBLY, A
          USER DISPLAY PROTECTED BY ADFILE.


ROUTINES CALLED

               SEND   (CATEGORY X)
               GET    (CATEGORY X)
               ERROR  (CATEGORY VII)


EXAMPLE:

               CALL DELETE(ID3)
          DELETE THE DISPLAY FILE WITH DISPLAY NUMBER ID3.
USING DISLIB                                                   Page 4-27


     4.3.4  SUBROUTINE MOVFIL(ID, X, Y)

PROGRAM MODULE:  MOVFIL.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO MOVE THE SPECIFIED  DISPLAY  FILE
          TO  USER  POSITION  (X,  Y).   BEFORE  A DISPLAY CAN BE MOVED,
          ADFILE MUST HAVE TRANSMITTED A STATUS WORD  THAT  ALLOWED  THE
          FILE  TO  BE MOVED ABOUT THE SCREEN (SEE THE DOCUMENTATION FOR
          ROUTINE DSTAT).  THREE OF THE GIDUS DISPLAY FILES MAY BE MOVED
          (THE   MAIN   AND   AUXILIARY   POINTERS  -  SEE  CATEGORY  IV
          DOCUMENTATION), AND THE OPTION POINTER (SEE DOCUMENTATION  FOR
          ROUTINE  GETOPT  -  CATEGORY  VIII).   NOTE  THAT IF MOVFIL IS
          CALLED FOR A USER DISPLAY  FILE  CONTAINING  ABSOLUTE  POINTS,
          ONLY  THAT  PORTION  OF  THE  DISPLAY  FILE PRIOR TO THE FIRST
          ABSOLUTE POINT WILL CHANGE POSITION.


POSSIBLE ERRORS:

               %TRYING TO MOVE A BAD DISPLAY NUMBER
          (SIMILAR TO ENABLE)

               %TRYING TO MOVE A NON-EXISTENT DISPLAY
          (SIMILAR TO ENABLE)

               ?INVALID REPLY TO A MOVE COMMAND
          (SIMILAR TO ENABLE, RETURNS ID = 0)

               %TRYING TO MOVE A NON-RELOCATABLE DISPLAY
          THE DISPLAY FILE SPECIFIED MAY NOT BE MOVED.   THIS  COULD  BE
          MOST  OF  THE  GIDUS  DISPLAYS, OR A USER DISPLAY THAT DID NOT
          CONTAIN THE PROPER STATUS WORD.


ROUTINES CALLED:

               IPHYSX (CATEGORY X)
               IPHYSY (CATEGORY X)
               SEND   (CATEGORY X)
               GET    (CATEGORY X)
               ERROR  (CATEGORY VII)


EXAMPLE:

               CALL MOVFIL(8, 10., 10.)
               CALL MOVFIL(ID8, X, Y + 5.)
          THIS MOVES THE OPTION POINTER DISPLAY FILE  TO  USER  POSITION
          (10., 10.), AND THE USER DISPLAY ID8 TO POSITION (X, Y + 5.)
USING DISLIB                                                   Page 4-28


     4.4  POINTER ROUTINES (CATEGORY IV)

     THIS CATEGORY OF ROUTINES IS USED TO CONTROL THE TWO POINTERS (MAIN
AND AUXILIARY).  TWO FUNCTIONS ARE PROVIDED - 1) THE ABILITY TO MOVE THE
POINTERS ANYWHERE ON THE SCREEN, AND 2) THE ABILITY TO READ THE  CURRENT
POSITION  OF THE POINTERS.  THE SECOND FUNCTION IS PARTICULARY USEFUL IN
INTERACTIVE PROGRAMMING SINCE THE POSITION OF THE POINTERS CAN BE SET BY
GIDUS VIA THE ARROW KEYS).





4.4.1  SUBROUTINE GETMP(X, Y)

PROGRAM MODULE:  GETMP.F4


DESCRIPTION:

               THIS  SUBROUTINE  IS   USED   TO   RETURN   THE   CURRENT
          CO-ORDINATES  OF  THE  MAIN  POINTER,  IN USER UNITS.  IT WILL
          RETURN THE POSITION OF THE POINTER, REGARDLESS OF  WHETHER  IT
          IS ENABLED OR DISABLED.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               GETPTR (CATEGORY X)


EXAMPLE:

               CALL GETMP(XMP, YMP) RETURNS THE X POSITION AS  XMP,  AND
          THE Y POSITION AS YMP.
USING DISLIB                                                   Page 4-29


4.4.2  SUBROUTINE MOVEMP(X, Y)

PROGRAM MODULE:  MOVEMP.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO MOVE THE  MAIN  POINTER,  WHETHER
          ENABLED OR DISABLED, TO USER POSITION (X, Y).  THIS ROUTINE IS
          EXACTLY EQUIVALENT TO:

               CALL MOVFIL(4, X, Y)


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               MOVFIL (CATEGORY III)


EXAMPLE:

               CALL MOVEMP(X, Y + 5.)
          THIS  EXAMPLE  MOVES  THE  MAIN  POINTER  TO   USER   POSITION
          (X, Y + 5.).
USING DISLIB                                                   Page 4-30


     4.4.3  SUBROUTINE GETAP(X, Y)

PROGRAM MODULE:  GETAP.F4


DESCRIPTION:

               IDENTICAL   TO   SUBROUTINE   GETMP   EXCEPT   THAT   THE
          CO-ORDINATES RETURNED ARE THOSE OF THE AUXILIARY POINTER.







4.4.4  SUBROUTINE MOVEAP(X, Y)

PROGRAM MODULE:  MOVEAP.F4


DESCRIPTION:

               IDENTICAL TO  SUBROUTINE  MOVEMP,  EXCEPT  THE  AUXILIARY
          POINTER IS MOVED INSTEAD OF THE MAIN POINTER.
USING DISLIB                                                   Page 4-31


     4.5  LIGHT PEN ROUTINES (CATEGORY V)

     THIS CATEGORY OF ROUTINES IS USED TO CONTROL THE OPERATION  OF  THE
LIGHT  PEN.   WHEN A LIGHT PEN SENSITIVE DISPLAY IS HIT BY THE LIGHT PEN
GIDUS CAN DETERMINE THE NUMBER OF THE DISPLAY THAT WAS HIT,  AND  THE  X
AND Y CO-ORDINATES OF THE HIT.  THIS INFORMATION CAN THEN BE TRANSMITTED
TO DISLIB, WHERE IT BECOMES A USEFUL AID IN INTERACTIVE PROGRAMMING.





4.5.1  SUBROUTINE LPON

PROGRAM MODULE:  LPON.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO ENABLE THE LIGHT PEN, AND IS VERY
          SIMILAR  TO  THE  GIDUS  COMMAND  LE.  IF THE LIGHT PEN IS NOT
          ENABLED, THEN NO HITS ARE RECOGNIZED BY GIDUS.  WHEN THE LIGHT
          PEN  IS ENABLED, THE CHARACTERS "LE" ARE VISIBLE IN THE STATUS
          DISPLAY.


POSSIBLE ERRORS:

               ?INVALID REPLY TO LPON
          (I.E.  A BAD STATUS TRANSMISSION FROM GIDUS)


ROUTINES CALLED:

               SEND   (CATEGORY X)
               GET    (CATEGORY X)
               ERROR  (CATEGORY VII)


EXAMPLE:

               CALL LPON
          THIS EXAMPLE ENABLES THE LIGHT PEN.
USING DISLIB                                                   Page 4-32


4.5.2  SUBROUTINE LPOFF

PROGRAM MODULE LPOFF.F4


DESCRIPTION:

               THIS ROUTINE IS JUST THE OPPOSITE  OF  LPON  IN  THAT  IT
          DISABLES  THE  LIGHT  PEN.   IT  IS  VERY SIMILAR TO THE GIDUS
          COMMAND LD.  WHEN THE LIGHT PEN  IS  DISABLED  THE  CHARACTERS
          "LD" WILL APPEAR IN THE STATUS DISPLAY.


POSSIBLE ERRORS:

               ?INVALID REPLY TO LPOFF
          (I.E.  A BAD STATUS TRANSMISSION FROM GIDUS)


ROUTINES CALLED:

               SEND   (CATEGORY X)
               GET    (CATEGORY X)
               ERROR  (CATEGORY VII)


EXAMPLE:

               CALL LPOFF
          THIS DISABLES THE LIGHT PEN.
USING DISLIB                                                   Page 4-33


     4.5.3  SUBROUTINE LPHIT(ID, X, Y)

PROGRAM MODULE:  LPHIT.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO RETURN  THE  DISPLAY  NUMBER  AND
          USER POSITION (X, Y) OF THE NEXT LIGHT PEN HIT.  THIS WILL PUT
          GIDUS INTO A  WAIT  STATE  WHICH  WILL  BE  REFLECTED  BY  THE
          CHARACTERS "LW" IN THE STATUS DISPLAY.


POSSIBLE ERRORS:

               %LIGHT PEN NOT ENABLED
          THIS ROUTINE WAS CALLED WHEN THE LIGHT PEN WAS DISABLED SO  NO
          INFORMATION COULD BE RETURNED.  ALL PARAMETERS ARE RETURNED AS
          ZERO.  TO CORRECT THIS ERROR IT WOULD BE NECESSARY TO  PRECEDE
          THE  CALL  TO  LPHIT WITH A CALL TO LPON OR TO ISSUE THE GIDUS
          COMMAND "LE" PRIOR TO CALLING LPHIT.   REMEMBER  THAT  WHEN  A
          RESET IS DONE, THE LIGHT PEN IS DISABLED.

               ?INVALID REPLY TO LPHIT
          (I.E.  A BAD  STATUS  TRANSMISSION  FROM  GIDUS,  RETURNS  ALL
          PARAMETERS AS 0)


ROUTINES CALLED:

               SEND   (CATEGORY X)
               GET    (CATEGORY X)
               USERX  (CATEGORY X)
               USERY  (CATEGORY X)
               ERROR  (CATEGORY VII)


WARNING:

               THIS ROUTINE WILL WAIT FOREVER IF IT IS CALLED AND  THERE
          ARE  NO  LIGHT PEN SENSITIVE DISPLAYS ON THE SCREEN.  IN OTHER
          WORDS GIDUS IS WAITING FOR A HIT BUT IT IS NOT POSSIBLE TO GET
          ONE.


EXAMPLE:

               CALL LPHIT(IDISP, X, Y)
               CALL MOVFIL(IDISP, X, Y)
          THIS MOVES THE ORIGIN OF A DISPLAY FILE TO THE POSITION OF THE
          LIGHT PEN HIT ON THE DISPLAY FILE.
USING DISLIB                                                   Page 4-34


     4.5.4  SUBROUTINE LLPHIT(ID, X, Y)

PROGRAM MODULE:  LLPHIT.F4


DESCRIPTION:

               THIS ROUTINE IS ALMOST IDENTICAL TO LPHIT, EXCEPT INSTEAD
          OF  WAITING  FOR  A HIT IT RETURNS INFORMATION ON THE PREVIOUS
          LIGHT PEN HIT.  IF THERE WAS NO PREVIOUS LIGHT PEN  HIT,  THEN
          ALL PARAMETERS ARE RETURNED AS ZERO.
USING DISLIB                                                   Page 4-35


     4.6  GT40 MANIPULATION ROUTINES (CATEGORY VI)

     THIS CATEGORY OF ROUTINES IS USED TO MANIPULATE  DISPLAY  FILES  IN
THE GT40.





4.6.1  SUBROUTINE CLEAR

PROGRAM MODULE:  CLEAR.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO CLEAR THE CHARACTER DISPLAY  FILE
          (THE  8  LINE  SCROLLED  WORKING  AREA  AT  THE  BOTTOM OF THE
          SCREEN).  THE SAME EFFECT  MAY  BE  ACHIEVED  BY  HITTING  THE
          "LOCK/EOS"  KEY ON THE KEYBOARD.  AS MENTIONED BEFORE, A CLEAR
          IS PREFERRED TO A DISABL(1), BECAUSE A  CLEAR  ALLOWS  RESUMED
          OUTPUT  TO  BECOME  VISIBLE.  IT WOULD OFTEN BE USEFUL TO DO A
          CLEAR IN ORDER TO SEE USER DISPLAYS THAT  MIGHT  OTHERWISE  BE
          PARTIALLY OBSCURED BY TEXT.


POSSIBLE ERRORS:

               ?INVALID REPLY TO CLEAR
          (I.E.  A BAD STATUS TRANSMISSION FROM GIDUS)


ROUTINES CALLED:

               SEND   (CATEGORY X)
               GET    (CATEGORY X)
               ERROR  (CATEGORY VII)


EXAMPLE:

               CALL CLEAR
          THIS EXAMPLE CLEARS THE CHARACTER DISPLAY FILE.
USING DISLIB                                                   Page 4-36


4.6.2  SUBROUTINE PHOTO(WAIT)

PROGRAM MODULE:  PHOTO.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO DISABLE ALL GIDUS  DISPLAY  FILES
          (EXCEPT  THE CHARACTER DISPLAY FILE WHICH IS CLEAR'ED) LEAVING
          ONLY USER DISPLAY FILES VISIBLE.  THIS ROUTINE WOULD BE USEFUL
          TO CALL IF YOU WANTED TO TAKE A PHOTOGRAPH OF DISPLAYS CREATED
          BY YOUR PROGRAM.  PHOTO HAS ONE PARAMETER WHICH  SHOULD  BE  A
          LOGICAL  VARIABLE  OR CONSTANT.  IF WAIT IS .TRUE.  THEN PHOTO
          WILL  PAUSE  THE  USER  PROGRAM  AT  MONITOR  LEVEL  (THIS  IS
          INDICATED BY THE APPEARANCE OF A PERIOD AT THE LOWER LEFT HAND
          CORNER OF THE SCREEN).  PAUSING A PROGRAM IN THIS MANNER WOULD
          GIVE  YOU  AS  MUCH  TIME  AS YOU WANTED TO TAKE PICTURES.  TO
          CONTINUE YOU SHOULD ISSUE THE MONITOR COMMAND ".CONTINUE".  IF
          WAIT   IS  .FALSE.   THEN  THE  USER  PROGRAM  WOULD  CONTINUE
          OPERATION IMMEDIATELY AFTER DISABLING THE GIDUS DISPLAY FILES.
          IN  ADDITION,  IF  WAIT  IS  .FALSE., THEN ANY OPTIONS PRESENT
          WOULD REMAIN ON THE SCREEN, WHEREAS IF  WAIT  IS  .TRUE.   THE
          OPTIONS WOULD BE TURNED OFF (DISABLED) FOR THE DURATION OF THE
          PAUSE.


POSSIBLE ERRORS:

               %PHOTO FAILS (BAD DISABLE)
          (I.E.  A BAD TRANSMISSION FROM GIDUS, DURING A DISABL)


ROUTINES CALLED:

               MONRET (CATEGORY X)
               DISABL (CATEGORY III)


EXAMPLE:

               CALL PHOTO(.TRUE.)
          DISABLES ALL GIDUS  DISPLAYS,  CLEARS  THE  CHARACTER  DISPLAY
          FILE,  DISABLES  OPTIONS  (IF  PRESENT), AND PAUSES AT MONITOR
          LEVEL.
USING DISLIB                                                   Page 4-37


4.6.3  SUBROUTINE RESET(LINES)

PROGRAM MODULE:  RESET.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO RESET THE  GT40  TO  ITS  INITIAL
          STATUS  AND  IS  FUNCTIONALLY  EQUIVALENT  TO  A  GIDUS  RESET
          COMMAND.  ALL USER DISPLAY FILES, WHETHER WRITE  PROTECTED  OR
          NOT  ARE DELETED.  BOTH POINTERS ARE RETURNED TO THEIR INITIAL
          POSITION.  THE LIGHT  PEN  IS  DISABLED.   FINALLY  ALL  GIDUS
          DISPLAYS  THAT  WERE ORIGINALLY DISABLED ARE DISABLED, AND ALL
          THAT WERE ORIGINALLY ENABLED, ARE ENABLED.  MOST USER PROGRAMS
          WOULD PROBABLY WANT TO CALL RESET SHORTLY AFTER CALLING START.
          HOWEVER, IF A USER PROGRAM DOES NOT CALL RESET, THEN  IT  WILL
          INHERIT  ANY USER DISPLAY FILES CREATED BY A PREVIOUS PROGRAM.
          NONE OF THE DISLIB PARAMETERS ARE AFFECTED BY  A  RESET.   THE
          INTEGER  PARAMETER  LINES  SPECIFIES  HOW  MANY  LINES OF TEXT
          SHOULD BE RESERVED FOR SCROLLING.  THIS PARAMETER SHOULD BE IN
          THE  RANGE  1  TO  31.  IF MORE THAN 27 LINES OF SCROLLING ARE
          SPECIFIED THEN THE STATUS DISPLAY AND  THE  TWO  POINTERS  ARE
          AUTOMATICALLY  DISABLED.   A  SCROLLING  AREA  OF 1 LINE, ONLY
          REQUIRES 40 WORDS OF GT40 MEMORY, WHEREAS A COMPLETE SCROLLING
          AREA  (31 LINES) WOULD REQUIRE MORE THAN 1K OF STORAGE.  USERS
          SHOULD SELECT A SCROLLING AREA BASED ON THE OTHER  CORE  NEEDS
          OF  THEIR PROGRAMS.  UNLIKE THE GIDUS RESET COMMAND, THE RESET
          SUBROUTINE REQUIRES THE PARAMETER TO BE PRESENT.


POSSIBLE ERRORS:

               ?INVALID REPLY TO RESET
          (I.E.  A BAD STATUS TRANSMISSION FROM GIDUS)


ROUTINES CALLED:

               SEND   (CATEGORY X)
               GET    (CATEGORY X)
               ERROR  (CATEGORY VII)


EXAMPLE:

               CALL RESET(8)
          THIS RESETS THE GT40 TO ITS INITIAL STATUS.
USING DISLIB                                                   Page 4-38


     4.7  LOG ROUTINES (CATEGORY VII)

     INITIALLY THIS CATEGORY OF ROUTINES WAS PRIMARILY USED IN DEBUGGING
DISLIB.   HOWEVER  THEY  HAVE  BEEN LEFT IN THE LIBRARY SINCE THEY MIGHT
FACILITATE USER DEBUGGING.  THE ROUTINE ERROR, IN PARTICULAR,  MIGHT  BE
OF SOME USE TO USER PROGRAMS THAT DO SOME FORM OF ERROR CHECKING.

     WHEN RUNNING A USER PROGRAM WHICH INVOKES DISLIB, IT IS POSSIBLE TO
ENABLE  A  LOG  FILE WHICH IS USED TO RECORD A RUNNING SUMMARY OF DISLIB
TRANSMISSIONS TO GIDUS, AND GIDUS TRANSMISSIONS  TO  DISLIB.   ALSO  ANY
ERROR  THAT  OCCURS  DURING THE OPERATION OF DISLIB WOULD BE RECORDED IN
THIS FILE, IN ADDITION TO BEING DISPLAYED IN THE CHARACTER DISPLAY FILE.
IF  THE PROGRAM FAILS TO OPERATE PROPERLY THIS FILE CAN BE DUMPED ON THE
PRINTER TO ANALYSE WHAT WENT WRONG.





4.7.1  SUBROUTINE LOGON

PROGRAM MODULE:  LOGON.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO ENABLE LOGGING.  THE  FIRST  TIME
          LOGON IS CALLED, THE LOG FILE IS CREATED.  SUBSEQUENT CALLS TO
          LOGON, RE-OPEN THE LOG FILE IN APPEND MODE.  EACH  TIME  LOGON
          IS CALLED, A TIME STAMP IS WRITTEN IN THE LOG.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               SFIELD (CATEGORY X)


EXAMPLE:

               CALL LOGON
          THIS ENABLES LOGGING ON FILE "DSK:DISLIB.LOG" (UNIT=20).
USING DISLIB                                                   Page 4-39


     4.7.2  SUBROUTINE LOGOFF

PROGRAM MODULE:  LOGOFF.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO DISABLE LOGGING, AND TO CLOSE THE
          LOG   FILE.    BY  USING  LOGON,  AND  LOGOFF  SELECTIVELY,  A
          PARTICULAR PORTION OF A PROGRAM MAY BE TRACED.  EACH TIME  THE
          LOG FILE IS DISABLED, A TIME STAMP IS WRITTEN IN THE LOG.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               SFIELD (CATEGORY X)


EXAMPLE:

               CALL LOGOFF
          DISABLE LOGGING, AND CLOSE THE LOG FILE.
USING DISLIB                                                   Page 4-40


     4.7.3  SUBROUTINE ERROR(STRING, ISTAT)

PROGRAM MODULE:  ERROR.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO PRINT AN  ERROR  MESSAGE  ON  THE
          GT40,  AND LOG THE ERROR MESSAGE INTO THE LOG FILE (IF LOGGING
          IS ENABLED).  THE FIRST PARAMETER IS A VECTOR CONTAINING ASCII
          CHARACTERS  IN  A5  FORMAT.   AS  WITH ROUTINE TEXT, HOLLERITH
          CONSTANTS COULD BE PASSED AS THIS  PARAMETER  AND  MOST  OFTEN
          WOULD  BE.   THIS  STRING  SHOULD  CONTAIN  NO  MORE  THAN  60
          CHARACTERS.  ISTAT IS A STATUS WORD  TO  ACCOMPANY  THE  ERROR
          MESSAGE.  IF ISTAT (AN INTEGER) IS NON-ZERO IT WILL BE PRINTED
          TO THE RIGHT OF THE ERROR MESSAGE, IN BOTH DECIMAL AND  OCTAL.
          ALL DISLIB ERRORS ARE REPORTED BY THIS ROUTINE.

               IF THE FIRST CHARACTER OF THE ERROR STRING IS  A  PERCENT
          SIGN  (%)  THEN  THE  ERROR  IS  CONSIDERED A WARNING, AND THE
          WARNING COUNT IS INCREMENTED.  IF THE FIRST CHARACTER  OF  THE
          ERROR  STRING  IS  A  QUESTION  MARK  (?)  THEN  THE  ERROR IS
          CONSIDERED FATAL (THE PROGRAM IS NOT STOPPED)  AND  THE  FATAL
          COUNT  IS INCREMENTED.  IN ADDITION, IF THE FIRST CHARACTER IS
          A QUESTION MARK, THEN THE GT40 BELL  WILL  SOUND  (ACTUALLY  A
          BEEP) AS THE ERROR MESSAGE IS PRINTED.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               SFIELD (CATEGORY X)
               GFIELD (CATEGORY X)
               SNDCHR (CATEGORY X)


EXAMPLES:

               CALL ERROR('A MESSAGE WITH NO STATUS', 0)
               CALL ERROR('%A WARNING WITH NO STATUS', 0)
               CALL ERROR('?FATAL ERROR = ', 8)
USING DISLIB                                                   Page 4-41


     4.8  OPTION ROUTINES (CATEGORY VIII)

     THE NEXT CATEGORY OF ROUTINES ARE USED IN CREATING AND MANIPULATING
AN  OPTION LIST.  AN OPTION LIST (OR MENU AS IT IS SOMETIMES CALLED) CAN
BE A VERY USEFUL AID IN INTERACTIVE PROGRAMMING.  THE OPTION  LISTS,  AS
IMPLEMENTED  IN  DISLIB,  CONSISTS  OF  10 LIGHT PEN SENSITIVE MESSAGES,
WHERE EACH MESSAGE CAN BE A MAXIMUM OF 15 CHARACTERS LONG.  EACH  OPTION
IS  ASSIGNED,  BY  THE  PROGRAMMER, A UNIQUE NUMBER IN THE RANGE 1 - 10.
THE PROGRAM CAN REQUEST AN OPTION AT WHICH TIME ONE OF  THE  10  OPTIONS
SHOULD  BE  TOUCHED  WITH THE LIGHT PEN.  THE PROGRAM CAN THEN DETERMINE
WHICH OPTION HAS BEEN SELECTED AND BRANCH ACCORDINGLY.  FOR  EXAMPLE,  A
PROGRAM MIGHT HAVE THE MESSAGE 'EXIT' AS OPTION 10.  IF THE NUMBER 10 IS
RETURNED WHEN THE PROGRAM REQUESTS AN OPTION  THEN  THE  PROGRAM  SHOULD
STOP.

     OPTIONS ARE ARRANGED VERTICALLY ON  THE  RIGHT  HAND  PART  OF  THE
SCREEN  (NEAR THE LIGHT PEN).  OPTION NUMBER 1 IS AT THE TOP, AND OPTION
10 AT THE BOTTOM.  IF AN OPTION SLOT HAS NOT  BEEN  ASSIGNED  A  MESSAGE
THEN  IT  WILL  CONSIST  OF ALL BLANK CHARACTERS WHICH CANNOT GENERATE A
LIGHT PEN HIT.





4.8.1  SUBROUTINE ADDOPT(OPTNO, OPTSTR, OPCT)

PROGRAM MODULE:  ADDOPT.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO CHANGE AN OPTION (INITIALLY START
          BLANKS  OUT  EACH OF THEM).  THE FIRST PARAMETER IS AN INTEGER
          VARIABLE OR CONSTANT, WHICH SHOULD BE IN THE RANGE (1  -  10).
          THIS  IS  THE  NUMBER  OF  THE OPTION YOU WISH TO CHANGE.  THE
          SECOND PARAMETER IS THE OPTION MESSAGE ITSELF.  THIS SHOULD BE
          A VECTOR, CONTAINING ASCII CHARACTERS PACKED IN A5 FORMAT.  AS
          IN ERROR AND TEXT, HOLLERITH CONSTANTS CAN BE PASSED  AS  THIS
          PARAMETER.   THE  THIRD  PARAMETER  IS  AN INTEGER CONSTANT OR
          VARIABLE IN  THE  RANGE  1  -  15.   THIS  IS  THE  NUMBER  OF
          CHARACTERS IN THE OPTION MESSAGE.  IF ANY OF THE CHARACTERS IN
          THE OPTION MESSAGE ARE NON-PRINTING (OCTAL CODES LESS THAN 40)
          THEN   THEY   WILL   BE  REPLACED  WITH  QUESTION  MARKS  (SEE
          DOCUMENTATION ON ROUTINE TEXT - CATEGORY II).  NOTE THAT  THIS
          ROUTINE SIMPLY MODIFIES THE ARRAY OF MESSAGES THAT IS INTERNAL
          TO DISLIB.  BEFORE ANY OF THE CHANGES ARE VISIBLE, THE OPTIONS
          WOULD HAVE TO BE TRANSMITTED TO THE GT40, VIA SNDOPT.


POSSIBLE ERRORS:

               %INVALID OPTION NUMBER
          THE FIRST PARAMETER WAS NOT AN INTEGER IN THE RANGE  1  -  10.
          THE OFFENDING VALUE IS PRINTED NEXT TO THE ERROR MESSAGE.
USING DISLIB                                                   Page 4-42


ROUTINES CALLED:

               ERROR  (CATEGORY VII)
               GFIELD (CATEGORY X)
               SFIELD (CATEGORY X)


EXAMPLE:

               CALL ADDOPT(1, 'RESET', 5)
               CALL ADDOPT(5, 14, 3)
               CALL ADDOPT(10, 'EXIT', 4)
          THIS EXAMPLE SETS UP OPTIONS 1  AND  10  PROPERLY.   OPTION  5
          WOULD APPEAR ON THE GT40 AS THREE QUESTION MARKS.
USING DISLIB                                                   Page 4-43


     4.8.2  SUBROUTINE SNDOPT(OPID)

PROGRAM MODULE SNDOPT.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO  TAKE  THE  OPTIONS,  CREATED  BY
          ADDOPT, AND TRANSMIT THEM TO THE GT40, VIA ADFILE.  THE OPTION
          LIST IS IMMEDIATELY ENABLED.  THE OPTION LIST WILL REPLACE ANY
          PREVIOUS OPTION LIST THAT WAS RESIDENT IN THE GT40.  NOTE THAT
          THIS ROUTINE REQUIRES TWO DISPLAY SLOTS (FROM THE 54 THAT WERE
          ORIGINALLY AVAILABLE FOR USER DISPLAYS).  ONE SLOT IS USED FOR
          THE OLD OPTION LIST (IF ANY) AND ANOTHER SLOT IS USED FOR  THE
          NEW  OPTION  LIST.  TOGETHER THESE DISPLAY FILES WOULD REQUIRE
          ABOUT 300 WORDS OF GT40 MEMORY.   THE  REASON  FOR  USING  TWO
          DISPLAY  FILES  IS  TO  ALLOW CONTINUITY (I.E.  THE OLD OPTION
          LIST IS NOT DELETED, UNTIL THE NEW  ONE  IS  RESIDENT  IN  THE
          GT40).   THE INTEGER PARAMETER OPID RETURNS THE DISPLAY NUMBER
          OF THE NEWLY CREATED OPTION LIST.  THIS  ALLOWS  THE  USER  TO
          DELETE THE OPTION LIST WHEN IT IS NO LONGER NEEDED.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               DISABL (CATEGORY III)
               MOVFIL (CATEGORY III)
               INIT   (CATEGORY II)
               SETMOD (CATEGORY II)
               SETA   (CATEGORY II)
               POINT  (CATEGORY II)
               TEXT   (CATEGORY II)
               ADFILE (CATEGORY II)
               ENABLE (CATEGORY III)


EXAMPLE:

               CALL SNDOPT(ID)
          THIS TRANSMITS THE CURRENT OPTION LIST TO  THE  GT40,  DELETES
          THE OLD OPTION LIST (IF ANY), AND ENABLES THE NEW, WHICH WOULD
          BE DISPLAY NUMBER ID.
USING DISLIB                                                   Page 4-44


     4.8.3  SUBROUTINE GETOPT(IOP)

PROGRAM MODULE:  GETOPT.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO RETURN THE OPTION NUMBER  OF  THE
          NEXT  OPTION HIT BY THE LIGHT PEN.  THIS NUMBER IS RETURNED IN
          THE INTEGER PARAMETER IOP.  THIS ROUTINE  CALLS  LPHIT  SO  IT
          WILL  WAIT  FOREVER IF THERE ARE NO OPTION LISTS ENABLED.  THE
          FIRST THING THIS ROUTINE DOES IS TO ENABLE THE LIGHT  PEN  (IT
          WILL  BE  LEFT  ENABLED, WHEN THE ROUTINE EXITS).  NEXT GETOPT
          ENABLES DISPLAY NUMBER 6 WHICH IS THE  OPTION  SELECT  MESSAGE
          (SEE  DESCRIPTION  OF  GIDUS  DISPLAY FILES).  THIS MESSAGE IS
          USED TO PROMPT FOR AN OPTION HIT.  NEXT THE ROUTINE WAITS  FOR
          A  HIT  ON THE OPTION LISTS (THIS CAN BE SEEN FROM THE "LW" IN
          THE STATUS  DISPLAY).   WHEN  THE  HIT  INFORMATION  HAS  BEEN
          RECEIVED,  THE  ROUTINE  WILL  DISABLE THE SELECT MESSAGE, AND
          THEN POSITION THE OPTION  POINTER  (DISPLAY  NUMBER  8  OR  10
          OCTAL) NEXT TO THE SELECTED OPTION.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               LPON   (CATEGORY V)
               ENABLE (CATEGORY III)
               LPHIT  (CATEGORY V)
               DISABL (CATEGORY III)
               IPHYSX (CATEGORY X)
               IPHYSY (CATEGORY X)
               USERX  (CATEGORY X)
               USERY  (CATEGORY X)
USING DISLIB                                                   Page 4-45


WARNING:

               IT MAY BE NECESSARY TO  TURN  UP  THE  INTENSITY  OF  THE
          DISPLAYS  IN  ORDER TO GET A LIGHT PEN HIT.  DO NOT LEAVE THIS
          INTENSITY UP TOO LONG  AS  IT  MIGHT  POSSIBLY  BURN  OUT  THE
          SCREEN.


EXAMPLE:

               CALL GETOPT(K)
          K IS IN THE RANGE 1 - 10 (THE LAST OPTION SELECTED).
USING DISLIB                                                   Page 4-46


     4.8.4  SUBROUTINE OPTOFF

PROGRAM MODULE:  OPTOFF.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO DISABLE ALL OPTION DISPLAY  FILES
          (SELECT  MESSAGE,  OPTION  LIST,  AND  OPTION  POINTER).  THIS
          ROUTINE IS PROVIDED AS A CONVENIENCE ONLY.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               DISABL (CATEGORY III)


EXAMPLE:

               CALL OPTOFF
          DISABLES ALL OPTION DISPLAY FILES.
USING DISLIB                                                   Page 4-47


     4.8.5  SUBROUTINE OPTON

PROGRAM MODULE:  OPTON.F4


DESCRIPTION:

               THIS ROUTINE IS JUST THE OPPOSITE OF OPTOFF, AND IT WOULD
          NORMALLY  BE  CALLED  AFTER  OPTOFF.  IT IS USED TO ENABLE THE
          OPTION POINTER AND OPTION LIST.  THE OPTION SELECT MESSAGE  IS
          LEFT DISABLED UNTIL THE NEXT CALL TO GETOPT.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               ENABLE (CATEGORY III)


EXAMPLE:

               CALL OPTON
          RE-ENABLE THE OPTION DISPLAY FILES.
USING DISLIB                                                   Page 4-48


     4.8.6  SUBROUTINE CLROPT(OPTNO)

PROGRAM MODULE:  CLROPT.F4


DESCRIPTION:

               THIS ROUTINE IS USED TO CLEAR (BLANK OUT)  THE  SPECIFIED
          OPTION.   OPTNO  IS  AN  INTEGER  VARIABLE  OR  CONSTANT WHICH
          INDICATES WHICH OPTION IS TO BE CLEARED.  IF OPTNO IS  NOT  IN
          THE  RANGE 1 - 10 THEN ALL OPTIONS ARE CLEARED.  THESE CHANGES
          WILL NOT BE VISIBLE UNTIL AFTER SNDOPT HAS BEEN CALLED.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               NONE


EXAMPLES:

               CALL CLROPT(0)
          THIS CLEARS ALL OPTIONS.

               CALL CLROPT(7)
          THIS CLEARS OPTION NUMBER 7.
USING DISLIB                                                   Page 4-49


4.9  TERMINATION ROUTINES (CATEGORY IX)

     THERE IS ONE ROUTINE IN THIS CATEGORY, SUBROUTINE FINI.





4.9.1  SUBROUTINE FINI

PROGRAM MODULE:  FINI.F4


DESCRIPTION:

               EVERY PROGRAM USING DISLIB ROUTINES SHOULD  EXIT  TO  THE
          MONITOR  WITH  A  CALL  TO FINI.  JUST AS START IS THE LOGICAL
          BEGINNING OF A PROGRAM, SO SHOULD FINI BE THE LOGICAL END OF A
          PROGRAM.  THE FUNCTION OF FINI IS TO MAKE SURE THE LOG FILE IS
          CLOSED PROPERLY, AND TO PRINT  AN  ERROR  SUMMARY  GIVING  THE
          NUMBER OF FATAL AND WARNING MESSAGES.  IF THERE WERE NO ERRORS
          THEN THERE WOULD BE NO SUMMARY.


POSSIBLE ERRORS:

               NONE


ROUTINES CALLED:

               CLRTTY (CATEGORY X)
               SNDCHR (CATEGORY X)
               LOGOFF (CATEGORY VII)


EXAMPLE:

               CALL FINI
          THIS STOPS THE PROGRAM.
USING DISLIB                                                   Page 4-50


     4.10  INTERNAL ROUTINES (CATEGORY X)

     ROUTINES IN THIS CATEGORY ARE USED INTERNALLY BY DISLIB.  IN  OTHER
WORDS,  MOST  OF  THE  USER  ROUTINES  (CATEGORIES I - IX) MAKE CALLS TO
ROUTINES IN THIS CATEGORY.  THESE  INTERNAL  ROUTINES  WILL  BE  BRIEFLY
DISCUSSED.   NORMALLY  A  USER  PROGRAM  WOULD  NOT  WANT  TO CALL THESE
ROUTINES, AND CERTAIN OF THEM SHOULD NEVER BE CALLED BY THE USER.  THOSE
MARKED WITH AN ASTERISK MIGHT BE OF SOME USE.




     SUBROUTINE SEND(CMD, DISNUM, X, Y)
SENDS A COMMAND TO THE GT40.


     SUBROUTINE GET(STATUS, X, Y, DISNUM)
RECEIVES A STATUS TRANSMISSION FROM THE GT40.


     (*) SUBROUTINE BYTES(WORD, BYTEL, BYTEH)
SPLITS WORD INTO TWO EIGHT BIT BYTES.


     SUBROUTINE WAITCH(CHAR)
RECEIVES ONE SIXBIT CHARACTER FROM THE GT40.


     (*) SUBROUTINE GETPTR(DISNUM, X, Y)
RETURNS POSITION OF POINTER - DISNUM.


     (*) INTEGER FUNCTION IPHYSX(X)
THIS ROUTINE RETURNS THE RASTER POSITION OF USER X AND IS  QUITE  USEFUL
IF  A  PROGRAM WISHES TO RELATE A USER POSITION TO A PARTICULAR PLACE ON
THE SCREEN.


     (*) INTEGER FUNCTION IPHYSY(Y)
THIS ROUTINE IS SIMILAR TO IPHYSX AND RETURNS  THE  RASTER  POSITION  OF
USER Y.


     (*) REAL FUNCTION USERX(IX)
THIS IS JUST THE OPPOSITE OF THE FUNCTION IPHYSX.  GIVEN  A  PHYSICAL  X
POSITION  (IN  RASTER  UNITS) THIS ROUTINE RETURNS THE X POSITION IN THE
CURRENT USER UNITS.


     (*) REAL FUNCTION USERY(IY)
THIS ROUTINE IS SIMILAR  TO  USERX  AND  RETURNS  THE  USER  Y  POSITION
CORRESPONDING TO A GIVEN Y RASTER POSITION.
USING DISLIB                                                   Page 4-51


     INTEGER FUNCTION SETGM(MODE, INT, LP, BLINK, LINE)
RETURNS AN SGM WORD.


     INTEGER FUNCTION SETSTA(ITAL, LP)
RETURNS A STATUS-A WORD.


     (*) SUBROUTINE ADLINE(N, FILE, X, Y, VISIBL)
INSERTS A (VISIBLE/INVISIBLE) VECTOR TO USER (X, Y).


     SUBROUTINE ADWORD(N, FILE, WORD)
ADDS A WORD TO THE DISPLAY FILE.


     SUBROUTINE ADBYTE(N, FILE, BYTE)
ADDS A BYTE TO THE DISPLAY FILE.


     SUBROUTINE SNDBLK(N, FILE, BLOCK)
SENDS A BLOCK OF A DISPLAY FILE TO THE GT40.


     (*) SUBROUTINE SFIELD(WORD, POS, LEN, BYTE)
THIS IS A GENERAL PURPOSE BYTE INSERTION ROUTINE AND COULD  BE  USED  IN
ANY  FORTRAN  PROGRAM.   THIS  ROUTINE BEHAVES IN THE SAME MANNER AS THE
ALGOL SFIELD PROCEDURE WHICH IS DOCUMENTED  IN  THE  DECSYSTEM-10  ALGOL
MANUAL.  THE ONLY EXCEPTION IS THAT ONLY ONE WORD ARGUMENTS ARE ALLOWED.
"WORD" IS THE WORD TO BE STORED INTO.  "POS" IS THE BIT  POSITION  (0  =
MOST  SIGNIFICANT  BIT OF WORD).  "LEN" IS THE SIZE OF THE BYTE IN BITS.
AND "BYTE" IS THE RIGHT JUSTIFIED VALUE TO BE STORED.


     (*) INTEGER FUNCTION GFIELD(WORD, POS, LEN)
THIS IS A GENERAL BYTE RETRIEVAL ROUTINE SIMILAR TO  SFIELD.   THE  BYTE
DESCRIBED BY THE ARGUMENTS IS RETURNED RIGHT JUSTIFIED.


     SUBROUTINE SETTTY
SETS TERMINAL CHARACTERISTICS FOR I/O.


     SUBROUTINE CLRTTY
RESETS TERMINAL CHARACTERISTICS


     (*) SUBROUTINE SNDCHR(CHAR)
SENDS AN IMAGE BYTE TO THE GT40.
USING DISLIB                                                   Page 4-52


     (*) INTEGER FUNCTION GETCHR(0)
RETURNS AN ASCII CHARACTER FROM THE GT40.
RETURNS -1 IF NO CHARACTER PRESENT.


     (*) SUBROUTINE MONRET
SUBROUTINE TO PAUSE AT MONITOR LEVEL.











                               CHAPTER 5

                          DISLIB COMMON BLOCKS



     THERE ARE SIX LABELED COMMON BLOCKS,  INTERNAL  TO  DISLIB.   THESE
COMMON  BLOCKS  ARE  MAINTAINED  AS A MEANS OF COMMUNICATION BETWEEN THE
USER ROUTINES (CATEGORIES I - IX) AND THE  INTERNAL  ROUTINES  (CATEGORY
X).   IT IS NEVER NECESSARY FOR THE USER PROGRAM TO DIRECTLY MEDDLE WITH
THE COMMON BLOCKS.  ALL MODIFICATIONS TO THE  VARIABLES  IN  COMMON  ARE
DONE  BY THE APPROPRIATE DISLIB ROUTINES.  HOWEVER, A VERY SOPHISTICATED
USER PROGRAM MIGHT WANT TO REFERENCE SOME OF THE VARIABLES, AND  IF  THE
USER  IS  SURE  HE KNOWS WHAT HE IS DOING, IT IS POSSIBLE TO MODIFY SOME
VARIABLES AS A SHORT-CUT TO AVOID CALLING DISLIB ROUTINES.  FOR  EXAMPLE
INSTEAD OF CALLING SETMOD WITH FOUR PARAMETERS, IT IS POSSIBLE TO MODIFY
JUST THE DESIRED PARAMETER IN THE COMMON BLOCK /MODBLK/.


     ALL VARIABLES IN THE COMMON BLOCKS ARE  INITIALIZED  BY  SUBROUTINE
START.   USER PROGRAMS SHOULD NOT ATTEMPT TO MAINTAIN INDEPENDENT COMMON
BLOCKS WITH THE SAME NAME.  EACH  OF  THE  COMMON  BLOCKS  WILL  NOW  BE
DISCUSSED IN DETAIL.
DISLIB COMMON BLOCKS                                            Page 5-2


5.1  LOG BLOCK (VARIABLES USED TO CONTROL THE LOG FILE)



          IMPLICIT INTEGER (A - Z)
          LOGICAL LOG
          COMMON /LOGBLK/ LOG, GTLOG, FATAL, WARN


LOG       -    IF .TRUE. THEN LOGGING WILL BE PERFORMED
          -    IF .FALSE. THEN NO LOGGING
          -    UPDATED BY LOGON AND LOGOFF
          -    START INITIALIZES AS .FALSE.

GTLOG     -    UNIT NUMBER FOR LOG FILE ("DSK:DISLIB.LOG")
          -    START INTIALIZES TO 20

FATAL     -    COUNT OF FATAL ERRORS (UPDATED BY ERROR)
          -    START INITIALIZES TO 0

WARN      -    COUNT OF WARNING ERRORS (UPDATED BY ERROR)
          -    START INITIALIZES TO 0
DISLIB COMMON BLOCKS                                            Page 5-3


5.2  SCALE BLOCK (VARIABLES USED IN SCALING)



          IMPLICIT INTEGER (A - W, Z)
          COMMON /SCLBLK/ XMIN, YMIN, XMAX, YMAX, BEAMX, BEAMY


XMIN      -    USER MINIMUM X (UPDATED BY SCALE)
          -    START INITIALIZES TO 0

YMIN      -    USER MINIMUM Y (UPDATED BY ROUTINE SCALE)
          -    START INITIALIZES TO 0

XMAX      -    USER MAXIMUM X (UPDATED BY ROUTINE SCALE)
          -    START INITIALIZES TO 1023.

YMAX      -    USER MAXIMUM Y (UPDATED BY ROUTINE SCALE)
          -    START INITIALIZES TO 767.

BEAMX     -    CURRENT RASTER X POSITION (UPDATED BY CATEGORY II)
          -    START INITIALIZES TO 0

BEAMY     -    CURRENT Y POSITION (UPDATED BY CATEGORY II)
          -    START INITIALIZES TO 0
DISLIB COMMON BLOCKS                                            Page 5-4


5.3  MODE BLOCK (VARIABLES USED IN SGM INSTRUCTION)



          IMPLICIT INTEGER (A - Z)
          LOGICAL LP, BLINK
          COMMON /MODBLK/ MODE, INT, LP, BLINK, LINE, OLDSGM


MODE      -    GRAPHIC DATA MODE (UPDATED BY CATEGORY II)
          -    START INITIALIZES TO 0

INT       -    GRAPHIC INTENSITY (UPDATED BY SETMOD)
          -    START INITIALIZES TO 2

LP        -    IF .TRUE. THEN L.P. SENSITIVE (UPDATED BY SETMOD)
          -    START INITIALIZES TO .FALSE.

BLINK     -    IF .TRUE. THEN BLINK (UPDATED BY SETMOD)
          -    START INITIALIZES TO .FALSE.

LINE      -    LINE TYPE (UPDATED BY SETMOD)
          -    START INITIALIZES TO 0 (SOLID LINE)

OLDSGM    -    CURRENT SGM INSTRUCTION (UPDATED BY SETGM)
          -    START INITIALIZES TO 0
DISLIB COMMON BLOCKS                                            Page 5-5


5.4  STATUS-A BLOCK (VARIABLES USED IN LOAD-A INSTRUCTIONS)



          INTEGER OLDSTA
          LOGICAL ITALA, LPA
          COMMON /STABLK/ ITALA, LPA, OLDSTA


ITALA     -    IF .TRUE. THEN ITALICS (UPDATED BY SETA)
          -    START INITIALIZES TO .FALSE.

LPA       -    IF .TRUE. THEN INTENSIFY HITS (UPDATED BY SETA)
          -    START INITIALIZES TO .TRUE.

OLDSTA    -    CURRENT LOAD-A INSTRUCTION (UPDATED BY SETSTA)
          -    START INITIALIZES TO 0
DISLIB COMMON BLOCKS                                            Page 5-6


5.5  OPTION BLOCK (VARIABLES USED IN CONTROLLING OPTIONS)



          IMPLICIT INTEGER (A - Z)
          COMMON /OPTBLK/ OPTION(10, 3), OPMSG, OPPTR, OPLIST


OPTION    -    ARRAY OF OPTIONS (UPDATED BY CATEGORY VIII)
          -    START INITIALIZES TO BLANKS

OPMSG     -    DISPLAY NUMBER OF PROMPT MESSAGE
          -    START INITIALIZES TO 8

OPPTR     -    DISPLAY NUMBER OF OPTION POINTER
          -    START INITIALIZES TO 6

OPLIST    -    DISPLAY NUMBER OF OPTION LIST (UPDATED BY SNDOPT)
          -    START INITIALIZES TO 0
DISLIB COMMON BLOCKS                                            Page 5-7


5.6  MISCELLANEOUS BLOCK

          INTEGER CHECK
          LOGICAL SHIFT
          COMMON /MSCBLK/ SHIFT, CHECK


SHIFT     -    IF .TRUE. THEN TEXT IS SHIFTED-OUT
          -    START INITIALIZES TO .FALSE.

CHECK     -    NUMBER OF CHECKSUM ERRORS FROM 10 TO GT40
          -    UPDATED BY GET
          -    START INITIALIZES TO 0











                               CHAPTER 6

                      DISLIB PROGRAMMING EXAMPLES



6.1  CATEYE DEMONSTRATION

          IMPLICIT INTEGER (A - Z)
C**********************************************************
C
C  THIS PROGRAM IS A DEMONSTRATION OF THE GT40
C  DISLIB PACKAGE. ORIGINAL CAT'S EYE DESIGN
C  COURTESY - ALEX NICHOLS.
C
C**********************************************************
          INTEGER FILE(1000)
          REAL USERX, USERY

C  FIRST STEP IS ALWAYS "CALL START"
          CALL START

C  ENABLE DISLIB LOG (NORMALLY USED FOR DEBUGGING)
          CALL LOGON

C  RESET GT40 TO INITIAL STATE
          CALL RESET(8)

C  INIT THE FILE, AND ENABLE SUBSCRIPT CHECKING
          CALL INIT(N, FILE, 1000, USERX(0), USERY(0))

C  SCALE IT SO THAT A 12 BY 6 UNIT RECTANGLE IS CENTRED
          CALL SCALE(-.144, -1.608, 12.144, 7.608)
DISLIB PROGRAMMING EXAMPLES                                     Page 6-2


C  CALL SUBROUTINE TO MESH SPECIFIED TRIANGLES
          CALL MESH(N, FILE, 1.5, 3., 6., 3., 6., 4.5, 20)
          CALL MESH(N, FILE, 6., 4.5, 6., 3., 10.5, 3., 20)
          CALL MESH(N, FILE, 1.5, 3., 6., 3., 6., 1.5, 20)
          CALL MESH(N, FILE, 6., 1.5, 6., 3., 10.5, 3., 20)
          CALL MESH(N, FILE, 6., 6., 4.5, 3., 6., 0., 20)
          CALL MESH(N, FILE, 6., 6., 7.5, 3., 6., 0., 20)
          CALL MESH(N, FILE, 6., 6., 0., 3., 6., 0., 30)
          CALL MESH(N, FILE, 6., 6., 12., 3., 6., 0., 30)
          CALL MESH(N, FILE, 4.5, 3., 6., 6., 0., 3., 20)
          CALL MESH(N, FILE, 4.5, 3., 6., 0., 0., 3., 20)
          CALL MESH(N, FILE, 7.5, 3., 6., 6., 12., 3., 20)
          CALL MESH(N, FILE, 7.5, 3., 6., 0., 12., 3., 20)

C  TURN ON ITALICS
          CALL SETA(.TRUE., .TRUE.)
          CALL MOVE(N, FILE, 5.2, -.5)

C  CHARACTERS ARE DISPLAYED AT INTENSITY 5
          CALL SETMOD(5, .FALSE., .FALSE., 0)
          CALL TEXT(N, FILE, 'CAT''S EYE', 9)

C  TURN OFF ITALICS
          CALL SETA(.FALSE., .TRUE.)
          CALL MOVE(N, FILE, 3., -.85)
          CALL TEXT(N, FILE, '  (ORIGINAL DESIGN - ALEX NICHOLS)', 34)

C  TRANSMIT TO GT40, DISNUM IS DISPLAY NUMBER
          CALL ADFILE(N, FILE, 0, DISNUM)

C  ENABLE (I.E. TURN ON THE DISPLAY)
          CALL ENABLE(DISNUM)

C  DISABLE THE SYSTEM DISPLAYS
          CALL PHOTO(.TRUE.)

C  CLOSE LOG FILE, AND STOP PROGRAM
          CALL FINI
          END
DISLIB PROGRAMMING EXAMPLES                                     Page 6-3


          SUBROUTINE MESH(N, FILE, XST, YST, XC, YC, XEND, YEND, NLINES)
C**********************************************************
C
C  THIS SUBROUTINE DOES THE ACTUAL MESHING
C  OF THE SPECIFIED RAY
C
C**********************************************************
          INTEGER FILE(N), NLINES
          REAL LINES

C  CALL MOVE TO (XST, YST) THEN VECTOR TO (XC, YC) & (XEND, YEND)
          CALL JOIN(N, FILE, XST, YST, XC, YC)
          CALL VECTOR(N, FILE, XEND, YEND)
          LINES = NLINES

C  LOOP FOR EACH LINE SEGMENT
          DO 100 IFRAC = 1, NLINES
          X1 = XST + (IFRAC - 1) / LINES * (XC - XST)
          Y1 = YST + (IFRAC - 1) / LINES * (YC - YST)
          X2 = XC + IFRAC / LINES * (XEND - XC)
          Y2 = YC + IFRAC / LINES * (YEND - YC)
          CALL JOIN(N, FILE, X1, Y1, X2, Y2)
100       CONTINUE
          RETURN
          END
DISLIB PROGRAMMING EXAMPLES                                     Page 6-4


6.2  ELLIPSE DEMONSTRATION

C************************************************************
C
C  THIS DEMONSTRATION PROGRAM DRAWS A SERIES OF ELLIPSES
C  ON THE SCREEN OF THE GT40. SUBSEQUENT ELLIPSES
C  ARE SHRUNK AND ROTATED
C
C************************************************************
          CALL START
          A = 5.
          B = 1.5
          CALL SCALE(-6., -4., 6., 4.)
100       CALL ELLIPS(A, B, R)
          A = A - .1
          B = B - 1.5/50.
          R = R - .1
          IF(A .GT. 0) GO TO 100
          CALL PHOTO(.TRUE.)
          CALL FINI
          END
DISLIB PROGRAMMING EXAMPLES                                     Page 6-5


          SUBROUTINE ELLIPS(A, B, R)
C************************************************************
C
C  THIS ROUTINE DRAWS AN ELLIPSE WITH MAJOR AXIS A
C  AND MINOR AXIS B THROUGH A ROTATION OF R RADIANS
C
C************************************************************
          INTEGER FILE(500)
          THETA = 0.
          X = A * COS(THETA)
          Y = B * SIN(THETA)
          CALL ROTATE(X, Y, R)
          CALL INIT(N, FILE, 500, X, Y)
          PI = 3.1415927
          AINC = PI / 40.
100       THETA = THETA + AINC
          X = A * COS(THETA)
          Y = B * SIN(THETA)
          CALL ROTATE(X, Y, R)
          CALL VECTOR(N, FILE, X, Y)
          IF(THETA .LE. 2 * PI) GO TO 100
          CALL ADFILE(N, FILE, 0, I)
          CALL ENABLE(I)
          RETURN
          END
DISLIB PROGRAMMING EXAMPLES                                     Page 6-6


          SUBROUTINE ROTATE(X, Y, R)
C************************************************************
C
C  THIS ROUTINE ROTATES A POINT (X, Y) THROUGH AN
C  ANGLE OF R RADIANS
C
C************************************************************
          XN = X * COS(R) + Y * SIN(R)
          Y = -X * SIN(R) + Y * COS(R)
          X = XN
          RETURN
          END
DISLIB PROGRAMMING EXAMPLES                                     Page 6-7


6.3  TEXT DEMONSTRATION PROGRAM

C************************************************************
C
C  THIS DEMONSTRATION PROGRAM IS USED TO DISPLAY THE
C  ENTIRE GT40 CHARACTER SET, VIA SUBROUTINE TEXT.
C  NOTE THAT THE SPECIAL CHARACTERS HAVE TO BE SET
C  UP NUMERICALLY
C
C************************************************************
          IMPLICIT INTEGER (A - W, Z)
          INTEGER FILE(250), SHIFT(10)

          CALL START
          CALL RESET(8)
          XST = 180.
          YST = 630.
          CALL INIT(N, FILE, 250, XST, YST)
          CALL TEXT(N, FILE, '   SPECIAL - ',13)
          CALL TEXT(N, FILE, ' ^!"#$%&''()*+,-./',17)
          CALL TEXT(N, FILE, '0123456789:;<=>?@',17)
          CALL SETA(.TRUE., .TRUE.)
          CALL MOVE(N, FILE, XST, YST - 30.)
          CALL TEXT(N, FILE, '   ITALICS - ',13)
          CALL TEXT(N, FILE, ' ^!"#$%&''()*+,-./',17)
          CALL TEXT(N, FILE, '0123456789:;<=>?@',17)
          CALL SETA(.FALSE., .TRUE.)
          CALL MOVE(N, FILE, XST, YST - 60.)
          CALL TEXT(N, FILE, 'UPPER CASE - ',13)
          SHIFT(1)='ABCDE'
          SHIFT(2)='FGHIJ'
          SHIFT(3)='KLMNO'
          SHIFT(4)='PQRST'
          SHIFT(5)='UVWXY'
          SHIFT(6)='Z'
          CALL TEXT(N, FILE, SHIFT, 26)
          CALL SETA(.TRUE., .TRUE.)
          CALL MOVE(N, FILE, XST, YST - 90.)
          CALL TEXT(N, FILE, '   ITALICS - ',13)
          CALL TEXT(N, FILE, SHIFT, 26)
          DO 100 I = 1,6
          SHIFT(I) = SHIFT(I) + "201004020100
100       CONTINUE
          CALL SETA(.FALSE., .TRUE.)
          CALL MOVE(N, FILE, XST, YST - 120.)
          CALL TEXT(N, FILE, 'LOWER CASE - ',13)
          CALL TEXT(N, FILE, SHIFT, 26)
          CALL SETA(.TRUE., .TRUE.)
          CALL MOVE(N, FILE, XST, YST - 150.)
          CALL TEXT(N, FILE, '   ITALICS - ',13)
          CALL TEXT(N, FILE, SHIFT, 26)
DISLIB PROGRAMMING EXAMPLES                                     Page 6-8


          SHIFT(1) = "70000101006
          SHIFT(2) = "20120603420
          SHIFT(3) = "44241306032
          SHIFT(4) = "70402111046
          SHIFT(5) = "120522613460
          SHIFT(6) = "144643316072
          SHIFT(7) = "170761720100
          CALL SETA(.FALSE., .TRUE.)
          CALL MOVE(N, FILE, XST, YST - 180.)
          CALL TEXT(N, FILE, ' SHIFT OUT - ',13)
          CALL TEXT(N, FILE, SHIFT, 33)
          CALL SETA(.TRUE., .TRUE.)
          CALL MOVE(N, FILE, XST, YST - 210.)
          CALL TEXT(N, FILE, '   ITALICS - ',13)
          CALL TEXT(N, FILE, SHIFT, 33)
          CALL SETA(.FALSE., .TRUE.)
          CALL ADFILE(N, FILE, 0, TXT)
          CALL ENABLE(TXT)
          CALL PHOTO(.FALSE.)
          TYPE 1
1         FORMAT(T30,'GT40 CHARACTER SET',3(/))
          CALL FINI
          END
DISLIB PROGRAMMING EXAMPLES                                     Page 6-9


6.4  OPTION DEMONSTRATION PROGRAM

C************************************************************
C
C  THIS PROGRAM IS A DEMONSTRATION PROGRAM ILLUSTRATING THE
C  USE OF OPTIONS. THREE OPTIONS WILL BE SET UP
C         1) WHEN "BEEP" IS SELECTED, RING THE GT40 BELL
C         2) WHEN "RE-START" IS SELECTED, RE-START THE PROGRAM
C         3) WHEN "EXIT" IS SELECTED, STOP THE PROGRAM
C
C************************************************************
          IMPLICIT INTEGER (A - Z)

          CALL START
100       CALL RESET
          CALL CLROPT(0)
          CALL ADDOPT(1, 'BEEP', 4)
          CALL ADDOPT(5, 'RE-START', 8)
          CALL ADDOPT(10, 'EXIT', 4)
          CALL SNDOPT(OPID)

200       CALL GETOPT(IOP)
          IF(IOP .EQ. 1) CALL SNDCHR("7)
          IF(IOP .EQ. 5) GO TO 100
          IF(IOP .EQ. 10) CALL FINI
          GO TO 200
          END











                               CHAPTER 7

                             DISLIB SUMMARY



7.1  COMPILING AND RUNNING PROGRAMS

     IN ORDER TO RUN A PROGRAM CONTAINING CALLS TO THE  DISLIB  ROUTINES
IT  IS  NECESSARY  TO  LINK  YOUR  PROGRAM  WITH THE LIBRARY IN THE GT40
ACCOUNT.  HERE ARE TWO EXAMPLES:


          .EXECUTE PROG.F4,SUB1.F4,SUB2.F4,DISLIB.REL[1600,2]/LIB


                                   OR


          .LOAD PROG.F4,SUB1.F4,SUB2.F4,DISLIB.REL[1600,2]/LIB
          .SAVE




     THE FIRST EXAMPLE EXECUTES A USER PROGRAM THAT  CONTAINS  TWO  USER
SUBROUTINES.   THE SECOND EXAMPLE IS SIMILAR EXCEPT INSTEAD OF EXECUTING
THE PROGRAM, IT IS SAVED AS A CORE IMAGE (.SAV FILE) FOR LATER EXECUTION
WITH  A  .RUN  COMMAND.   NOTICE  THAT THE DISLIB ROUTINES ARE LOADED IN
LIBRARY SEARCH MODE (/LIB  SWITCH).   THIS  LOADS  ONLY  THOSE  ROUTINES
NEEDED,  RATHER  THAN THE ENTIRE LIBRARY.  THIS SWITCH SHOULD BE USED IN
ORDER TO KEEP YOUR PROGRAM SMALL.
DISLIB SUMMARY                                                  Page 7-2


7.2  STOPPING YOUR PROGRAM

     IT IS OFTEN NECESSARY TO STOP PROGRAMS THAT ARE RUNNING BY  HITTING
CTRL/C.   MOST  OF  THE  TIME  THIS CAN BE DONE WITHOUT RUNNING INTO ANY
DIFFICULTY, BUT UNDER CERTAIN CIRCUMSTANCES DISLIB DOES NOT LIKE  TO  BE
INTERRUPTED.   THIS  IS  BECAUSE IT IS NECESSARY TO SET VARIOUS TERMINAL
CHARACTERISTICS TO ALLOW COMMUNICATION BETWEEN GIDUS  AND  DISLIB.   FOR
EXAMPLE  LOWER CASE IS ENABLED, BUT THE ECHO IS DISABLED.  IF YOU CTRL/C
OUT OF YOUR PROGRAM WITH THESE TERMINAL  CHARACTERISTICS  ALTERED,  THEN
YOU  WILL  HAVE DIFFICULTY USING THE KEYBOARD.  IF THIS SHOULD HAPPEN TO
YOU, RESTORE THE CHARACTERISTICS BY RUNNING THE SYSTEM  PROGRAM  INITIA.
THIS CAN BE ACCOMPLISHED WITH THE FOLLOWING MONITOR COMMAND:

          .INITIA



     NOTE THAT THIS COMMAND WILL NOT ECHO AS YOU TYPE IT IN, BUT YOU CAN
SEE  THE  RESULT  OF  YOUR  TYPING  BY  USING  THE  CTRL/R  KEY.  IF THE
CHARACTERS ECHO PROPERLY AS YOU TYPE THEM ON THE KEYBOARD THEN THERE  IS
NO NEED TO USE THIS COMMAND.
DISLIB SUMMARY                                                  Page 7-3


7.3  SUMMARY

     THE SOFTWARE PACKAGE (GIDUS AND DISLIB) IS QUITE  A  NEW  PIECE  OF
SOFTWARE,  SO  IT IS QUITE PROBABLE THAT THERE ARE SOME OUTSTANDING BUGS
NOT YET DISCOVERED.  IN ORDER TO  KEEP  UP  WITH  MODIFICATIONS  TO  THE
PACKAGE,  PARTICULARLY  AS  THEY  MIGHT  AFFECT  SUBROUTINE CALLS, USERS
SHOULD PERIODICALLY READ THE REVISION HISTORY  FILE  ("DSK:GT40.MOD"  IN
THE GT40 ACCOUNT).  PLEASE REPORT ANY BUGS, OR SUGGESTIONS TO:


          BILL WILDER - 126 U.  HALL (EXT.  437)