'===========================================================================
' Subject: GET BIOS VIDEO INFORMATION         Date: 09-01-98 (15:11)       
'  Author: Dave Navarro, Jr.                  Code: PB                     
'  Origin: dave@powerbasic.com              Packet: INTERRPT.ABC
'===========================================================================
' Return BIOS video information for the current display mode
' by Dave Navarro, Jr. (dave@powerbasic.com)
' Requires PowerBASIC 3.2 or later

TYPE VideoInfoStruc
  TmpAddr     AS DWORD
  VMode       AS BYTE
  Cols        AS WORD
  Regen       AS WORD
  Start       AS WORD
  Cur0        AS WORD
  Cur1        AS WORD
  Cur2        AS WORD
  Cur3        AS WORD
  Cur4        AS WORD
  Cur5        AS WORD
  Cur6        AS WORD
  Cur7        AS WORD
  CurType     AS WORD
  Page        AS BYTE
  CrtcPort    AS WORD
  Reg3x8      AS BYTE
  Reg3x9      AS BYTE
  Rows        AS BYTE
  BytsChar    AS WORD
  Active      AS BYTE
  DccAlt      AS BYTE
  Colors      AS WORD
  Pages       AS BYTE
  Scanlines   AS BYTE
  PrimChrBlk  AS BYTE
  SecdChrBlk  AS BYTE
  Flags       AS BYTE
  Reserved1   AS STRING * 3
  VidMem      AS BYTE
  SavePtrFlag AS BYTE
  Reserved2   AS STRING * 13
END TYPE

DIM VideoInfo AS VideoInfoStruc
DIM x         AS DWORD
DIM z         AS BYTE PTR

  x = VARPTR32(VideoInfo)

  ! push DS
  ! les  DI, x
  ! mov  AH, &H1B
  ! mov  BX, 0
  ! int  &H10
  ! pop  DS

PRINT "Video Mode  :"; VideoInfo.Vmode
PRINT "Columns     :"; VideoInfo.Cols
PRINT "Rows        :"; VideoInfo.Rows
PRINT "Active Page :"; VideoInfo.Page
PRINT "Pages       :"; VideoInfo.Pages
PRINT "Bytes/Char  :"; VideoInfo.BytsChar
PRINT "Colors      :"; VideoInfo.Colors
PRINT "Display Type:"; VideoInfo.Active
PRINT "Scanlines   :"; VideoInfo.Scanlines
PRINT "Reg3x8      :"; VideoInfo.Reg3x8
PRINT "Reg3x9      :"; VideoInfo.Reg3x9
PRINT "Flags       : "; BIN$(VideoInfo.Flags)
PRINT "Flags 2     : "; BIN$(VideoInfo.SavePtrFlag)

z = VideoInfo.TmpAddr
z = z + 7
PRINT "Scan Avail  : "; BIN$(@z)
