VGAlib3

The source code for VGAlib3

What follows is the DEFINITION MODULE for the VGAlib3 library for FST Modula-2. Check out the general page about this subject here.

Getting started with the module

DEFINITION MODULE VgaLib3;

(*  This is FREE software, as described in the GNU General Public Licences.
    Therefore it comes WITH THE FULL SOURCES. Please feel free to improve
    this code when necessary. You OWN this code. I am not Bill Gates.
    
    I would appreciate that people let in this message when extending this
    library, as a small tribute to me (for laying the foundation).

    In case people need extra information, contact me via:
    
         snail mail: Jan Verhoeven, NL-5012 GH 272
    electronic mail: fruttenboel@gmail.com

    I remain full copyrights to these sources. If you want to send me a
    small "thanks", please send me a postcard of your hometown to the above
    shown snailmail address. Yes it is in code; the internal code of our
    national mail deliverer.

    Use this software at your own risk. Please find yourself a GNU GPL if you
    are in any doubt. I use these functions for all my own software, but there
    is NO GUARANTEE OF ANY KIND covering it.        *)

TYPE    COLOUR  = (black, blue, green, cyan, red,    pink,  brown, white,
                   GREY,  BLUE, GREEN, CYAN, RED, MAGENTA, YELLOW, WHITE);

        WinData = RECORD
            TopX, TopY, Width, Height,
            CurX, CurY, DeltaX, DeltaY,
            Indent                          : CARDINAL;
            BoxCol, TexCol, BckCol, MnuCol  : COLOUR;
        END;

CONST   ChrWid = 9;
   

Differences with the previous version

So far the declarations of public variables. I defined the colours as a SET in the TYPE section. This enables us in the rest of the program to use these colournames directly in the sources of our own programs. I made a simplification here in that it would have been better to do it as follows:

TYPE    COLOURS = (black,  blue, green, cyan, red,    pink,  brown, white,
                    GREY,  BLUE, GREEN, CYAN, RED, MAGENTA, YELLOW, WHITE);
        COLOUR = SET OF COLOURS;
   
Consider it a challenge to recompile the VGAlib package with this improvement. It is now also easier to export the colours to other programs.

The CONST 'ChrWid' defines the amount of white-space (in pixels) between characters.

What follows is the DEFINITION part of the library. Normally this is the only readable file that a programmer sees when he buys or norrows libraries. The DEF file and the M2O object file are handed over to third parties. The MOD file, containing the sourcecode, is kept secret for many reasons.

The actual definitions are

PROCEDURE SetVGA (NewMode : CARDINAL) : CARDINAL;   
(*    Set VGA mode 12h: 640 x 480 x 16.   *)

PROCEDURE SetColour (Foreground, Background : COLOUR);
(*    Set colour to work with.                  *)

PROCEDURE SetMask (Mask : CHAR);
(*    Set up mask for plotting in VGA memory.   *)

PROCEDURE Plot (VAR InWin : WinData);
(*    Plot one point in VGA memory to (X,Y).    *)

PROCEDURE UnPlot (VAR InWin : WinData);
(*    Erase one pixel in VGA memory.            *)

PROCEDURE DrawH (VAR InWin : WinData; Flag : BOOLEAN);
(*    Draw a horizontal line from (X,Y) for DeltaX pixels.   *)

PROCEDURE DrawV (VAR InWin : WinData);
(*    Draw a vertical line from (X,Y) for DeltaY pixels.     *)

PROCEDURE PlotChar (VAR InWin : WinData; Character : CHAR);
(*    Print Character starting on memory location Pos.       *)

PROCEDURE PlotText (VAR InWin : WinData; String : ARRAY OF CHAR);
(*    Print a string of text to the screen.                  *)

PROCEDURE MakeBox (InWin : WinData);
(*    Make a box on screen starting at (TopX, TopY) with sizes
      DeltaX and DeltaY.                                     *)

PROCEDURE Center (InWin : WinData; String : ARRAY OF CHAR);
(*    Center a line of text in InWin box.                    *)

PROCEDURE ClickBar (InWin : WinData; String : ARRAY OF CHAR;

VAR ClickPoints : ARRAY OF CARDINAL);
(*    Center a line of text in InWin box and mark the clickpoints 
      for the mouse.                 *)
      
PROCEDURE EraseBox (InWin : WinData);
(*    Erase inside the InWin box.                             *)

PROCEDURE FillBox (InWin : WinData);
(*    Fill inside the InWin box.                              *)

PROCEDURE WriteNumber (VAR InWin : WinData; Num, Len : CARDINAL);
(*    Print CARDINAL Num on screen, 
      right justified in Len positions.                       *)

END VgaLib3.
   

What's new in the improved VGAlib3

Well, in the new VGAlib3 library the SetText function is removed. It is made redundant because I changed the SetVGA function:

PROCEDURE  SetVGA (NewMode : CARDINAL) : CARDINAL;

(* Set VGA to NewMode and return previous mode to caller    	*)
   

Page created sometime and