home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Shareware - Software Farm 2
/
wosw_2.zip
/
wosw_2
/
QBAS
/
QBNWS102.ZIP
/
GRAPHSPK.ZIP
/
GETSIZE.BAS
< prev
next >
Wrap
BASIC Source File
|
1989-12-28
|
4KB
|
88 lines
'=========================== GETSIZE.BAS ==================================
' Quick Basic 4.5
' Copyright 1989 - Frederick Volking
' All Rights released to public domain by original author on 12/01/89
'
' =====================================================================
'
' This SUB calculates the Array size needed for a graphics GET
' image function. Works with SCREEN modes 1,2,7,8,9,10,11,12,13
'
' WARNING: Only tested on SCREEN modes 1,2,7,8,9...
'
' Provides two seperate functions as based on incomming value of
' "DoingText" variable:
'
' 1) If "DoingText" is TRUE (non-zero): then routine assumes
' values passed in LRow,LCol,RRow,RCol as text oriented
' row and column coordinates. Thus it converts the text
' coordinates to appropriate pixel coordinates and
' calculates pixel area necessary to GET an image to fill
' the described rows and columns area. IMPORTANT! before
' return, LRow,LCol,RRow,RCol are CONVERTED from text
' oriented coordinates to pixel oriented coordinates
' describing the exact boundries needed to be used by the
' GET statement.
'
' 2) If DoingText is FALSE (0): then the routine assumes the
' values passed in LRow,LCol,RRow,RCol as describing a
' pixel oriented area.
'
' ----------- Notes on Improvements Suggested -----------------
'
' Note #0: Commercial routines exist to perform all below
' suggested improvements. But for copyright reasons, I'm
' not at liberty to include them herein ....
'
' Note #1: ScreenMode - Rather than being passed to the routine,
' it would be more functional if routine made own determination.
'
' Note #2: Planes in EGA#9 could be set to Planes = 2 if a
' method could be devised to determine if the currently
' installed EGA card HAS MORE OR LESS THAN 64K of onboard memory
' ie; IF > 64k THEN Planes = 4 ELSE Planes = 2
'
' Note #3 - LINES - Only needed in EGA and VGA modes(25,30,43,60)
' Rather than being passed, would be more functional if routine
' made determination itself and took appropriate action
'
' ==================================================================
' Author: Frederick Volking
' Contact: (415)952-3450 [home] (415)378-4640 [work]
' USPO Mail: 425 Larch Avenue - South San Francisco, CA 94080
' EchoMail: ANY Basic conference (I try to read them all)
' Library At: QBCentral BBS - Vancouver Washington (206)892-7500
' ==================================================================
DEFINT A-Z
SUB GetSize(IntNeed,LRow,LCol,RRow,RCol,DoingText,ScreenMode,Lines)STATIC
SELECT CASE ScreenMode ' See Note #1
CASE 1: Bits = 2: Planes = 1 'CGA
CASE 2: Bits = 1: Planes = 1 'CGA
CASE 7: Bits = 1: Planes = 4 'EGA
CASE 8: Bits = 1: Planes = 4 'EGA
CASE 9: Bits = 1: Planes = 4 'EGA ' See Note #2
CASE 10: Bits = 1: Planes = 2 'VGA
CASE 11: Bits = 1: Planes = 1 'VGA
CASE 12: Bits = 1: Planes = 4 'VGA
CASE 13: Bits = 8: Planes = 1 'VGA
END SELECT
IF DoingText THEN
SELECT CASE ScreenMode ' See Note #3
CASE 9,10
IF Lines=43 THEN CharPixTall= 8 ELSE CharPixTall=14
CASE 11,12
IF Lines=30 THEN CharPixTall=16 ELSE CharPixTall= 8
CASE ELSE: CharPixTall=8
END SELECT
LRow = (LRow - 1) * CharPixTall
LCol = (LCol - 1) * 8
RRow = (RRow * CharPixTall) - 1
RCol = (RCol * 8) - 1
END IF
IntNeed = 4+INT(((RCol-LCol+1)*(Bits)+7)/8)*Planes*((RRow-LRow)+1)
IntNeed = INT(CSNG(IntNeed+1)/2)
END SUB