home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / AGUL / GRAPH_IN.ADB < prev    next >
Encoding:
Text File  |  1990-10-25  |  18.4 KB  |  444 lines

  1. --        ╔═════════════════════════════════════════════════════════════╗
  2. --        ║█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█║
  3. --        ║█                                                           █║
  4. --        ║█                 Meridian Software Systems                 █║
  5. --        ║█                                                           █║
  6. --        ║█                    Copyright (C)  1990                    █║
  7. --        ║█                                                           █║
  8. --        ║█                    ALL RIGHTS RESERVED                    █║
  9. --        ║█                                                           █║
  10. --        ║█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█║
  11. --        ╚═════════════════════════════════════════════════════════════╝
  12.  
  13. ------------------------------------------------------------------------------
  14. --
  15. --  Unit Name :  graph_Init - package body
  16. --
  17. --  Purpose of unit:  This package initializes and closes the Ada Graphics
  18. --                    Utility Library.  It must be called before any other
  19. --                    graphics procedure or function, but may only be called
  20. --                    once within an application program.  The Initiate_Graph
  21. --                    procedure selects the video page 1 as the active screen
  22. --                    and erases it.  All windows and worlds are initialized
  23. --                    to the graphic screen coordinates.  This procedure will
  24. --                    also turn the graphics mode off and return the system 
  25. --                    to the text mode which was active before Initiate_Graph
  26. --                    was called.
  27. --
  28. ------------------------------------------------------------------------------
  29.  
  30.  
  31. with COMMON_GRAPHIC_TYPES, COMMON_DISPLAY_TYPES;
  32. with DISK, DIRECTORY, INTERRUPT, TTY;
  33. with PROGRAM_CONTROL, BIT_OPS;
  34. use  PROGRAM_CONTROL, BIT_OPS;
  35.  
  36. package body GRAPH_INIT  is
  37.  
  38.   VIDEO_DESIRED  : COMMON_GRAPHIC_TYPES.VIDEO_SYSTEM;
  39.   VIDEO_NUMBER   : integer;
  40.   VIDEO_MEMORY   : integer;
  41.   SYSTEM_COLOR   : boolean := false;
  42.   BAD_CARD       : boolean := false;
  43.   REG_FILE       : INTERRUPT.REGISTERS;
  44.   HIGH_REG_CLEAR : constant integer := 16#00FF#;    -- format of variable 0000_0000_1111_1111
  45.  
  46.   --╔════════════════════════════════════════════════════════════════════════╗
  47.  
  48.   procedure CLEAR_SCREEN is
  49.     -- Load function 06h into the AH register and clear the video screen.
  50.   begin
  51.     if COMMON_GRAPHIC_TYPES.GRAPH_SCREEN <= 6 then
  52.       REG_FILE.BX := 16#0007#;
  53.     else
  54.       REG_FILE.BX := 16#0000#;
  55.     end if;
  56.  
  57.     REG_FILE.AX := 16#0600#;
  58.     REG_FILE.DX := 16#184F#;
  59.  
  60.     -- Call interrupt 10h
  61.     INTERRUPT.VECTOR (ON             => 16#10# ,
  62.               REGISTER_BLOCK => REG_FILE );
  63.   end CLEAR_SCREEN;
  64.  
  65.   --╚════════════════════════════════════════════════════════════════════════╝
  66.  
  67.   --╔════════════════════════════════════════════════════════════════════════╗
  68.  
  69.   procedure CLOSE_GRAPH is
  70.     -- This procedure will set the computer system back to video mode prior
  71.     -- to initializing the graphic system.
  72.   begin
  73.     -- Load old video mode into the AX register
  74.     REG_FILE.AX := COMMON_GRAPHIC_TYPES.VIDEO_SYSTEM'pos(COMMON_GRAPHIC_TYPES.TEXT_SCREEN);
  75.     COMMON_GRAPHIC_TYPES.GRAPH_SCREEN := REG_FILE.AX;
  76.  
  77.     -- Call interrupt 10h
  78.     INTERRUPT.VECTOR (ON             => 16#10#,
  79.               REGISTER_BLOCK => REG_FILE );
  80.   end CLOSE_GRAPH;
  81.  
  82.   --╚════════════════════════════════════════════════════════════════════════╝
  83.  
  84.   --╔════════════════════════════════════════════════════════════════════════╗
  85.  
  86.   procedure DETECT_GRAPHIC_CARD is
  87.     TEMP_NUMBER : integer;
  88.   begin
  89.     -- Load 0Fh into the AH register to determine video mode prior to
  90.     -- intialization.
  91.     REG_FILE.AX := 16#0F00#;
  92.  
  93.     -- Call interrupt 10h
  94.     INTERRUPT.VECTOR (ON             => 16#10#,
  95.               REGISTER_BLOCK => REG_FILE );
  96.  
  97.     -- Clear AH and assign temp_number to AL (video mode number).
  98.     TEMP_NUMBER :=  REG_FILE.AX and HIGH_REG_CLEAR;
  99.  
  100.     -- Assign text_screen to old video mode name.
  101.     COMMON_GRAPHIC_TYPES.TEXT_SCREEN  := COMMON_GRAPHIC_TYPES.VIDEO_SYSTEM'val(TEMP_NUMBER);
  102.     COMMON_GRAPHIC_TYPES.GRAPH_SCREEN := TEMP_NUMBER;
  103.   end DETECT_GRAPHIC_CARD;
  104.  
  105.   --╚════════════════════════════════════════════════════════════════════════╝
  106.  
  107.   --╔════════════════════════════════════════════════════════════════════════╗
  108.  
  109.   procedure SET_GRAPHIC_CARD is
  110.   begin
  111.     if VIDEO_NUMBER >= 13 then
  112.  
  113.       -- Load 1200h into the AX register to determine the video memory for
  114.       -- the video board installed.  Register BX, 10h, requests function
  115.       -- 12h to return the video configuration information.  The return of 
  116.       -- reg BH indicates whether color or monochrome is the default video
  117.       -- mode and BL indicates the amount of memory either on the video board
  118.       -- or allocated to the video board.
  119.       REG_FILE.AX := 16#1200#;
  120.       REG_FILE.BX := 16#0010#;
  121.  
  122.       -- Call interrupt 10h
  123.       INTERRUPT.VECTOR(ON             => 16#10#,
  124.                REGISTER_BLOCK => REG_FILE );
  125.  
  126.       case REG_FILE.BX is
  127.     when   0 =>  SYSTEM_COLOR := true;   VIDEO_MEMORY :=  64;
  128.     when   1 =>  SYSTEM_COLOR := true;   VIDEO_MEMORY := 128;
  129.     when   2 =>  SYSTEM_COLOR := true;   VIDEO_MEMORY := 192;
  130.     when   3 =>  SYSTEM_COLOR := true;   VIDEO_MEMORY := 256;
  131.     when 256 =>  SYSTEM_COLOR := false;  VIDEO_MEMORY :=  64;
  132.     when 257 =>  SYSTEM_COLOR := false;  VIDEO_MEMORY := 128;
  133.     when 258 =>  SYSTEM_COLOR := false;  VIDEO_MEMORY := 192;
  134.     when 259 =>  SYSTEM_COLOR := false;  VIDEO_MEMORY := 256;
  135.  
  136.         when others => null;
  137.       end case;
  138.     end if;  
  139.  
  140.     if (VIDEO_MEMORY = 64) and (VIDEO_NUMBER = 16) then
  141.       VIDEO_NUMBER := 14;
  142.     end if;
  143.  
  144.     -- Load function 00h into the AH register and the video mode number into
  145.     -- the AL register to set either AGUL default or the application 
  146.     -- programmer's desired video mode.
  147.  
  148.     COMMON_GRAPHIC_TYPES.GRAPH_SCREEN := VIDEO_NUMBER;
  149.     REG_FILE.AX                       := VIDEO_NUMBER;
  150.  
  151.     -- Call interrupt 10h
  152.     INTERRUPT.VECTOR (ON             => 16#10# ,
  153.               REGISTER_BLOCK => REG_FILE );
  154.  
  155.     CLEAR_SCREEN;
  156.   end SET_GRAPHIC_CARD;
  157.  
  158.   --╚════════════════════════════════════════════════════════════════════════╝
  159.  
  160.   --╔════════════════════════════════════════════════════════════════════════╗
  161.  
  162.   procedure SET_GLOBAL_VARIABLES is
  163.     BREAK_ON              : PROGRAM_CONTROL.STATE_TYPE;
  164.     PAGE1_START_MEMORY,
  165.     PAGE1_END_MEMORY,
  166.     PAGE2_START_MEMORY,
  167.     PAGE2_END_MEMORY      : COMMON_GRAPHIC_TYPES.AGUL_MEMORY_LOCATION;
  168.   begin
  169.  
  170.     case VIDEO_NUMBER is
  171.  
  172.       when 4 | 5 => 
  173.         --  Color Graphic Adapter Board
  174.         --  4 = 320 x 200 4-color graphics
  175.         --  5 = 320 x 200 4-grey graphics
  176.  
  177.         COMMON_GRAPHIC_TYPES.ASPECT_RATIO  := 1.20;
  178.         COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := false;
  179.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_X := 319;
  180.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_Y := 199;
  181.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_START := 16#B800_0000# - 16#1_0000_0000#;
  182.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_END   := 16#3FFF_0000#;
  183.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_START := 16#B800_0000# - 16#1_0000_0000#;
  184.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_END   := 16#3FFF_0000#;
  185.  
  186.       when 6 => 
  187.         --  Color Graphic Adapter Board
  188.         --  6 = 640 x 200 2-color graphics
  189.  
  190.         COMMON_GRAPHIC_TYPES.ASPECT_RATIO  := 2.4;
  191.         COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := false;
  192.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_X := 639;
  193.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_Y := 199;
  194.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_START := 16#B800_0000# - 16#1_0000_0000#;
  195.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_END   := 16#3FFF_0000#;
  196.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_START := 16#B800_0000# - 16#1_0000_0000#;
  197.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_END   := 16#3FFF_0000#;
  198.  
  199.       when 13 => 
  200.         --  Enhanced Graphics Adapter & Video Graphics Array Board
  201.         --  13 = 320 x 200 16-color graphics
  202.  
  203.         COMMON_GRAPHIC_TYPES.ASPECT_RATIO  := 1.2;
  204.         COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := true;
  205.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_X := 319;
  206.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_Y := 199;
  207.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_START := 16#A000_0000# - 16#1_0000_0000#;
  208.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_END   := 16#7FFF_0000#;
  209.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_START := 16#A800_0000# - 16#1_0000_0000#;
  210.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_END   := 16#FFFF_0000# - 16#1_0000_0000#;
  211.  
  212.       when 14 => 
  213.         --  Enhanced Graphics Adapter & Video Graphics Array Board
  214.         --  14 = 640 x 200 16-color graphics
  215.  
  216.         if VIDEO_MEMORY = 64 then
  217.           COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := false;
  218.       PAGE1_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  219.       PAGE1_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  220.       PAGE2_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  221.       PAGE2_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  222.         else
  223.           COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := true;
  224.       PAGE1_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  225.       PAGE1_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  226.       PAGE2_START_MEMORY := 16#B000_0000# - 16#1_0000_0000#;
  227.       PAGE2_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  228.         end if;
  229.         COMMON_GRAPHIC_TYPES.ASPECT_RATIO  := 2.40;
  230.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_X := 639;
  231.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_Y := 199;
  232.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_START := PAGE1_START_MEMORY;
  233.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_END   := PAGE1_END_MEMORY;
  234.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_START := PAGE2_START_MEMORY;
  235.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_END   := PAGE2_END_MEMORY;
  236.  
  237.       when 15 => 
  238.         --  Enhanced Graphics Adapter & Video Graphics Array Board
  239.         --  15 = 640 x 350 monochrome graphics
  240.  
  241.         if VIDEO_MEMORY = 64 then
  242.           COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := false;
  243.       PAGE1_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  244.       PAGE1_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  245.       PAGE2_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  246.       PAGE2_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  247.         else
  248.           COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := true;
  249.       PAGE1_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  250.       PAGE1_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  251.       PAGE2_START_MEMORY := 16#B000_0000# - 16#1_0000_0000#;
  252.       PAGE2_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  253.         end if;
  254.         COMMON_GRAPHIC_TYPES.ASPECT_RATIO  := 1.26;
  255.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_X := 639;
  256.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_Y := 349;
  257.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_START := PAGE1_START_MEMORY;
  258.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_END   := PAGE1_END_MEMORY;
  259.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_START := PAGE2_START_MEMORY;
  260.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_END   := PAGE2_END_MEMORY;
  261.  
  262.       when 16 =>
  263.         --  Enhanced Graphics Adapter & Video Graphics Array Board
  264.         --  16 = 640 x 350 16-color graphics (128kb)
  265.         --  16 = 640 x 350 4-color graphics (64kb EGA)
  266.  
  267.         if VIDEO_MEMORY = 64 then
  268.           COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := false;
  269.       PAGE1_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  270.       PAGE1_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  271.       PAGE2_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  272.       PAGE2_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  273.         else
  274.           COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := true;
  275.       PAGE1_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  276.       PAGE1_END_MEMORY   := 16#7FFF_0000#;
  277.       PAGE2_START_MEMORY := 16#A800_0000# - 16#1_0000_0000#;
  278.       PAGE2_END_MEMORY   := 16#7FFF_0000#;
  279.         end if;
  280.         COMMON_GRAPHIC_TYPES.ASPECT_RATIO  := 1.37;
  281.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_X := 639;
  282.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_Y := 349;
  283.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_START := PAGE1_START_MEMORY;
  284.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_END   := PAGE1_END_MEMORY;
  285.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_START := PAGE2_START_MEMORY;
  286.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_END   := PAGE2_END_MEMORY;
  287.  
  288.       when 17 =>
  289.         --  MultiColor and Video Graphics Array (MCGA and VGA)
  290.         --  17 = 640 x 480 2-color graphics
  291.  
  292.         if VIDEO_MEMORY = 64 then
  293.           COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := false;
  294.       PAGE1_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  295.       PAGE1_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  296.       PAGE2_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  297.       PAGE2_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  298.         else
  299.           COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := true;
  300.       PAGE1_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  301.       PAGE1_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  302.       PAGE2_START_MEMORY := 16#B000_0000# - 16#1_0000_0000#;
  303.       PAGE2_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  304.         end if;
  305.         COMMON_GRAPHIC_TYPES.ASPECT_RATIO  := 1.00;
  306.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_X := 639;
  307.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_Y := 479;
  308.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_START := PAGE1_START_MEMORY;
  309.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_END   := PAGE1_END_MEMORY;
  310.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_START := PAGE2_START_MEMORY;
  311.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_END   := PAGE2_END_MEMORY;
  312.  
  313.       when 18 => 
  314.         --  Video Graphics Array  -  640 x 480 16-color graphics
  315.  
  316.         if VIDEO_MEMORY = 64 then
  317.           COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := false;
  318.       PAGE1_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  319.       PAGE1_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  320.       PAGE2_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  321.       PAGE2_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  322.         else
  323.           COMMON_GRAPHIC_TYPES.SCREEN_FLAG   := true;
  324.       PAGE1_START_MEMORY := 16#A000_0000# - 16#1_0000_0000#;
  325.       PAGE1_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  326.       PAGE2_START_MEMORY := 16#B000_0000# - 16#1_0000_0000#;
  327.       PAGE2_END_MEMORY   := 16#FFFF_0000# - 16#1_0000_0000#;
  328.         end if;
  329.         COMMON_GRAPHIC_TYPES.ASPECT_RATIO  := 1.00;
  330.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_X := 639;
  331.         COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_Y := 479;
  332.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_START := PAGE1_START_MEMORY;
  333.     COMMON_GRAPHIC_TYPES.PAGE1_MEMORY_END   := PAGE1_END_MEMORY;
  334.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_START := PAGE2_START_MEMORY;
  335.     COMMON_GRAPHIC_TYPES.PAGE2_MEMORY_END   := PAGE2_END_MEMORY;
  336.  
  337.       when others => null;
  338.     end case;
  339.  
  340.     COMMON_GRAPHIC_TYPES.ACTIVE_PAGE            := 0;
  341.     COMMON_GRAPHIC_TYPES.CURRENT_VIDEO_PAGE     := 0;
  342.     COMMON_GRAPHIC_TYPES.CHARACTER_PIXEL_WIDTH  := 8;
  343.     COMMON_GRAPHIC_TYPES.CHARACTER_PIXEL_HEIGHT := 14;
  344.  
  345.     COMMON_GRAPHIC_TYPES.CURRENT_DISK_DRIVE := DISK.GET_DEFAULT;
  346.     DIRECTORY.CURRENT_NAME (
  347.      FOR_DRIVE => COMMON_GRAPHIC_TYPES.CURRENT_DISK_DRIVE,
  348.      NAME      => COMMON_GRAPHIC_TYPES.CURRENT_DISK_DIRECTORY,
  349.      LAST      => COMMON_GRAPHIC_TYPES.CURRENT_DISK_DIRECTORY_LAST_CHAR,
  350.      ERROR     => COMMON_GRAPHIC_TYPES.ERROR_CODE );
  351.  
  352.     BREAK_ON := ON;
  353.     PROGRAM_CONTROL.SET_BREAK_STATUS (TO_STATE => BREAK_ON);
  354.  
  355.     COMMON_GRAPHIC_TYPES.CURRENT_WORLD_LOWER_RIGHT_X := COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_X;
  356.     COMMON_GRAPHIC_TYPES.CURRENT_WORLD_LOWER_RIGHT_Y := COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_Y;
  357.     COMMON_GRAPHIC_TYPES.CURRENT_WORLD_INDEX_NO := 0;
  358.     COMMON_GRAPHIC_TYPES.SCREEN_WORLD_RATIO_X   := 1.0;
  359.     COMMON_GRAPHIC_TYPES.SCREEN_WORLD_RATIO_Y   := 1.0;
  360.  
  361.     COMMON_GRAPHIC_TYPES.CURRENT_WINDOW_UPPER_LEFT_X  := COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_UPPER_LEFT_X;
  362.     COMMON_GRAPHIC_TYPES.CURRENT_WINDOW_UPPER_LEFT_Y  := COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_UPPER_LEFT_Y;
  363.     COMMON_GRAPHIC_TYPES.CURRENT_WINDOW_LOWER_RIGHT_X := COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_X;
  364.     COMMON_GRAPHIC_TYPES.CURRENT_WINDOW_LOWER_RIGHT_Y := COMMON_GRAPHIC_TYPES.SCREEN_DIMENSION_LOWER_RIGHT_Y;
  365.     COMMON_GRAPHIC_TYPES.CURRENT_WINDOW_INDEX_NO := 0;
  366.     COMMON_GRAPHIC_TYPES.CLIP_ENABLE := true;
  367.     COMMON_GRAPHIC_TYPES.WINDOW_FORE_COLOR := COMMON_DISPLAY_TYPES.WHITE;
  368.     COMMON_GRAPHIC_TYPES.WINDOW_BACK_COLOR := COMMON_DISPLAY_TYPES.BLACK;
  369.  
  370.     COMMON_GRAPHIC_TYPES.FORE_COLOR := COMMON_DISPLAY_TYPES.WHITE;
  371.     COMMON_GRAPHIC_TYPES.BACK_COLOR := COMMON_DISPLAY_TYPES.BLACK;
  372.  
  373.   end SET_GLOBAL_VARIABLES;
  374.  
  375.   --╚════════════════════════════════════════════════════════════════════════╝
  376.  
  377.   --╔════════════════════════════════════════════════════════════════════════╗
  378.  
  379.   procedure INITIATE_GRAPH (DESIRED_VIDEO : COMMON_GRAPHIC_TYPES.VIDEO_SYSTEM) is
  380.   begin
  381.     VIDEO_NUMBER := COMMON_GRAPHIC_TYPES.VIDEO_SYSTEM'pos(DESIRED_VIDEO);
  382.     DETECT_GRAPHIC_CARD;
  383.  
  384.     if not (((VIDEO_NUMBER >= 0) and (VIDEO_NUMBER <= 3)) or
  385.        ((VIDEO_NUMBER >= 7) and (VIDEO_NUMBER <= 12))) then
  386.       VIDEO_DESIRED := DESIRED_VIDEO;
  387.  
  388.       if BAD_CARD then
  389.     TTY.Put( ROW           => 12,
  390.          COLUMN        =>  5,
  391.          ITEM          => "Error",
  392.          UNDERLINE     => false,
  393.          REVERSE_VIDEO => false,
  394.          BLINK         => true,
  395.          INTENSITY     => false );
  396.  
  397.     TTY.Put( ROW           => 12,
  398.          COLUMN        => 11,
  399.          ITEM          => "- you either selected the wrong video graphics card",
  400.          UNDERLINE     => false,
  401.          REVERSE_VIDEO => false,
  402.          BLINK         => false,
  403.          INTENSITY     => false );
  404.  
  405.         TTY.Put( ROW           => 13,
  406.          COLUMN        => 13,
  407.          ITEM          => "or a graphics card is not installed in the system",
  408.          UNDERLINE     => false,
  409.          REVERSE_VIDEO => false,
  410.          BLINK         => false,
  411.          INTENSITY     => false );
  412.  
  413.         delay 3.0;
  414.         CLOSE_GRAPH;
  415.       else
  416.         SET_GRAPHIC_CARD;
  417.         SET_GLOBAL_VARIABLES;
  418.       end if;
  419.     else
  420.       TTY.Put( ROW           => 12,
  421.            COLUMN        =>  5,
  422.            ITEM          => "Error",
  423.            UNDERLINE     => false,
  424.            REVERSE_VIDEO => false,
  425.            BLINK         => true,
  426.            INTENSITY     => false );
  427.  
  428.       TTY.Put( ROW           => 12,
  429.            COLUMN        => 11,
  430.            ITEM          => "- you selected TEXT MODE instead of GRAPHICS MODE.",
  431.            UNDERLINE     => false,
  432.            REVERSE_VIDEO => false,
  433.            BLINK         => false,
  434.            INTENSITY     => false );
  435.  
  436.       delay(3.0);
  437.     end if;
  438.  
  439.   end INITIATE_GRAPH;
  440.  
  441.   --╚════════════════════════════════════════════════════════════════════════╝
  442.  
  443. end GRAPH_INIT;
  444.