home *** CD-ROM | disk | FTP | other *** search
- Determining
- &
- Controlling
- Hardware
-
-
-
- "Never let a domestic quarrel ruin a day's writing. If you can't start
- the next day fresh, get rid of your wife."
-
- Mario Puzo
-
-
- This chapter describes the objects included in the totSYS unit. There
- are four objects in all, designed to provide information about the
- hardware and operating system on which an application is running. Dis-
- playOBJ is an object relating to the monitor/display card; EquipOBJ
- returns information about the peripheral devices installed on the
- computer; MemOBJ provides information about base, extended and expanded
- memory; OSOBJ provides information about the operating system and the
- DOS configurable international settings.
-
- A full example illustrating the use of each object can be found at the
- end of the chapter.
-
-
- Using DisplayOBJ
- The public methods (i.e. the methods you should be calling) in Display-
- OBJ are designed to provide you with information about the computer
- display. Since other units in the Toolkit also need to know this
- information, a global instance, called Monitor, is automatically ini-
- tialized when the totSYS unit is used. Monitor is, in fact, a pointer
- to an object on the heap, and has to be referenced with the pointer
- symbol, e.g. Monitor^. There should be no reason to initialize another
- DisplayOBJ, just access the Monitor^ methods. The following methods are
- available:
-
-
- SnowProne: boolean
- This function method returns true if the display is a "snowy" CGA.
- Since the screen writing routines in totFAST take care of snow, you
- should not normally need to call this method.
-
-
- GetMode:byte
- Returns the current display mode, e.g. mode 3 is 80 column color mode.
- Refer to the Turbo Pascal Programmer's Guide or a DOS Technical Refer-
- ence for more information about display modes.
-
-
- ColorOn:boolean
-
- 4-2 User's Guide
- --------------------------------------------------------------------------------
-
- This function returns true if the system is capable of color display.
- This function is normally called to determine whether to use monochrome
- or color display attributes when overriding the Toolkit's defaults.
- This function will always return false if ForceBW is set to true (dis-
- cussed next). It also returns false if the user is using a color sys-
- tem, but has set the device to BW80 mode.
-
-
- SetBW(On:boolean)
- Call this procedure and pass a true value if you want to force the
- system to use monochrome values. This is useful for laptop systems
- where the system responds as a color device, but the user only sees
- gray (or orange!) scales. Because LookTOT was initialized before your
- program code was executed, you should also call LookTOT^.SetDefaults,
- and LookTOT will then be assigned the default monochrome settings.
-
-
- DisplayType: tVideo
- The totSYS unit defines an enumerated type tVideo which has the follow-
- ing members: UnKnown, Mono, CGA, MCGAmono, MCGAcol, EGAmono, EGAcol,
- VGAmono and VGAcol. The function display type checks the installed
- hardware and returns the appropriate member.
-
-
- BaseOfScreen: pointer;
- This function returns a pointer to the base address of video memory.
- This is $B800:0000 for color systems and $B000:0000 for monochrome.
- Unless you are using non-Toolkit routines to directly access video
- memory, you should not need to call this method.
-
-
- Width: byte
- This function returns the width of the display in characters, which is
- commonly a value of 80.
-
-
- Depth: byte
- This function returns the depth of the display in lines. In normal
- display mode the function will return 25, but in condensed mode an EGA
- system will return 43, and a VGA system will return 50.
-
-
- The following two methods are used to switch an EGA or VGA display
- system between condensed and normal modes.
-
-
- SetCondensed: byte;
-
-
-
-
- Hardware 4-3
- --------------------------------------------------------------------------------
-
- This function tries to set the display to condensed mode, and returns
- the number of text lines the system can display in condensed mode. Note
- that only EGA and VGA systems can be set into condensed mode.
-
-
-
- 4-4 User's Guide
- --------------------------------------------------------------------------------
-
-
- Set25;
-
- This procedure forces the display into 25 line mode.
-
-
-
-
- Using EquipOBJ
- The EquipOBJ object is designed to provide information about the
- installed hardware devices. Most of the EquipOBJ methods reflect the
- data which the user defined with the SETUP operating system command.
- This may not correspond with the actual physical configuration, but is
- the only configuration which DOS will allow software to access. Equi-
- pOBJ includes the following methods:
-
-
- ComputerID:byte;
- This function returns a byte indicating the basic system type. The
- computer ID was implemented by IBM to provide an easy way for differen-
- tiating between the various IBM personal computers. The following list
- shows the hexadecimal values of the IBM range:
-
- $FF - IBM PC
- $FE,$FB - IBM XT or portable
- $FD - the infamous PC Junior
- $FC - IBM AT, XT-286, PS/2 50 and 60
- $FA - PS/2 25 and 30
- $F9 - IBM PC Convertible
- $F8 - PS/2 80
-
- Some non-IBM systems do not follow this convention, and an unlisted
- number may be returned by this method.
-
-
- ParallelPorts: byte;
- This function returns the number of installed parallel ports (LPTx).
-
-
- SerialPorts: byte;
- This function returns the number of installed serial ports (COMx).
-
-
- FloppyDrives: byte;
- This function returns the number of physical diskette drives.
-
-
- ROMDate: string;
-
-
-
- Hardware 4-5
- --------------------------------------------------------------------------------
-
- Returns an eight character string representing the ROM date in the
- format MM/DD/YY.
-
-
- GameAdapter: boolean;
- Returns true if a game adapter is installed.
-
-
- Serialprinter: boolean;
- Returns true if a serial printer is configured.
-
-
- MathChip: boolean;
- Returns true if a math co-processor is detected. If you compile Toolkit
- programs with the compiler directive FLOAT enabled, but FLOATEM dis-
- abled, the program will only run on systems equipped with a math co-
- processor. Use this function during program initialization to ensure
- the host PC is adequately equipped.
-
-
-
- Using MemOBJ
- The MemOBJ methods provide data related to base, extended and expanded
- memory on the host PC. The following function methods are provided:
-
-
- BaseMemory: integer;
- Returns the total amount of base memory installed, i.e. memory up to
- 640k. The value is returned in kilobytes ("k"). Remember that the Turbo
- Pascal functions MemAvail and MaxAvail provide data on free memory,
- i.e. memory not being used by device drivers and programs.
-
-
- EMMInstalled: boolean;
- Returns true if an expanded memory manager is installed.
-
-
- EMMversionMajor: byte;
- Returns the expanded memory manager major version number, i.e. the
- whole portion of the version number. If an EMM is not installed, a 0 is
- returned.
-
-
- EMMversionMinor: byte;
- Returns the expanded memory manager minor version number, i.e. the dec-
- imal portion of the version number. If an EMM is not installed, or if
- the minor version number is zero, a 0 is returned.
-
-
- 4-6 User's Guide
- --------------------------------------------------------------------------------
-
- EMMversion: string;
-
- Returns a three character string representing the complete EMM version
- number, e.g. "4.0".
-
- MaxExpMem: word;
-
- Returns the total amount of installed expanded memory in kilobytes.
-
- ExpMemAvail: word;
-
- Returns the amount of unused (or available) expanded memory in kilo-
- bytes.
-
- ExtMemAvail: word;
-
- Returns the amount of unused extended memory in kilobytes.
-
-
- Using OSOBJ
-
- The OSOBJ object is designed to provide information about the operating
- system. This unit is particularly useful when programs need to be
- developed for the international (read: non-American!) market place,
- because the DOS configuration can be ascertained, including the date
- format, currency symbol, country code, etc.
- If you develop a program to be distributed internationally, you need to
- adhere to the host countries' formatting conventions, especially date
- and number formats. Refer to chapter 11: Controlling User Input for a
- full discussion of this topic.
-
- The following function methods are available:
-
- OSVersionMajor: byte;
-
- Returns the major DOS version number, e.g. 2, 3 or 4.
-
- OSVersionMinor: byte;
-
- Returns the minor DOS version number, e.g. 1.
-
- OSVersion: string;
-
- Returns the full DOS version number as a string, e.g. "3.1"
-
- Country: word;
-
-
- Hardware 4-7
- --------------------------------------------------------------------------------
-
- Returns a word which represents the country code. In general, the coun-
- try codes are the same as the 3-digit international phone access code.
- Some of the more common codes are:
-
- 001 United States
- 002 Canada (French)
- 003 Latin America
- 031 Netherlands
- 032 Belgium
- 033 France
- 034 Spain
- 039 Italy
- 041 Switzerland
- 044 United Kingdom
- 045 Denmark
- 046 Sweden
- 047 Norway
- 049 Germany
- 061 Australia
- 351 Portugal
- 358 Finland
-
- Currency: string;
-
- Returns a string identifying the country's currency abbreviation. On
- systems using DOS prior to version 3.0, only a signal character can be
- accessed. However, systems using DOS 3.0 and later may return more than
- one character, e.g. FFR, DKR.
-
- DateFmt: tDate;
-
- The totSYS unit includes the declaration of the tDATE enumerated type
- which has three members: USA, EUROPE and JAPAN. This function returns
- the member which represents the operating system default date format.
- Note that the three formats are MM-DD-YY, DD-MM-YY and YY-MM-DD,
- respectively.
-
- ThousandsSep: char;
-
- Returns the character used to punctuate the thousands mark in numbers.
- The USA uses a comma, whereas many other countries use a period or a
- space.
-
- DecimalSep: char;
-
- Returns the character used to punctuate the decimal place. This is
- usually a period or a comma.
-
-
-
- 4-8 User's Guide
- --------------------------------------------------------------------------------
-
- DateSep: char;
-
- Returns the character used to separate the month, day and year elements
- of a date, e.g. "/", "-". Note: this information is not accessible on
- systems using DOS prior to version 3.0. If the machine does not have
- DOS 3.0 or later, a '/' is returned.
-
- TimeSep: char;
-
- Returns the character used to separate the hours, minutes and seconds
- when displaying the time, e.g. ":". Note: this information is not
- accessible on systems using DOS prior to version 3.0. If the machine
- does not have DOS 3.0 or later, a ':' is returned.
-
- TimeFmt: byte;
-
- Returns a byte to indicate the preferred time display. A 0 indicates a
- 12 hour format, and a 1 indicates a 24 hour format. Note: this informa-
- tion is not accessible on systems using DOS prior to version 3.0. If
- the machine does not have DOS 3.0 or later, a 0 is returned.
-
- CurrencyFmt: byte;
-
- Returns a byte indicating the currency format. One of the following
- five values will be returned:
- 0 String leads currency, no space
- 1 String follows currency, no space
- 2 String leads currency, one space
- 3 String follows currency, one space
- 4 String replaces decimal separator
-
- Note: this information is not accessible on systems using DOS prior to
- version 3.0. If the machine does not have DOS 3.0 or later, a 0 is
- returned.
-
- CurrencyDecPlaces: byte;
-
- Returns the number of decimal places normally used with the country's
- currency. Note: this information is not accessible on systems using DOS
- prior to version 3.0. If the machine does not have DOS 3.0 or later, a
- 2 is returned.
-
-
-
- Hardware 4-9
- --------------------------------------------------------------------------------
-
- Example
-
- Listed below is the demo program, DEMSY1, which illustrates the use of
- each of the four totSYS objects. Figure 4.1 reflects the resultant
- output on a VGA computer.
- Program DemoSystemOne;
- {DEMSY1}
-
- USES DOS,CRT, TOTSYS;
- var
- Equip: EquipObj;
- Mem: MemObj;
- OS: OSObj;
- Lines: byte;
- begin
- ClrScr;
- Lines := Monitor^.SetCondensed;
- if Monitor^.ColorOn then
- writeln('This system is color')
- else
- writeln('This system is monochrome');
- with Equip do
- begin
- Init;
- Writeln('Machine ID: ',ComputerID);
- Writeln('Parallel Ports: ',ParallelPorts);
- Writeln('Serial Ports: ',SerialPorts);
- Writeln('Floppy Drives: ',Floppydrives);
- Writeln('ROM date: ',RomDate);
- Writeln('Game Adapter: ',GameAdapter);
- Writeln('Serial printer: ',Serialprinter);
- Writeln('Math Coprocessor: ',MathChip);
- Writeln;
- end;
-
- with Mem do
- begin
- Init;
- Writeln('Base memory: ',Basememory,'k');
- Writeln('Avail Extended memory: ',ExtMemAvail,'k');
- if EMMInstalled then
- begin
- Writeln('Total Expanded memory: ',MaxExpMem,'k');
- Writeln('Avail Expanded memory: ',ExpMemAvail,'k');
- Writeln('Expanded memory manager version: '+
- EMMversion);
- end
- else
-
-
-
- 4-10 User's Guide
- --------------------------------------------------------------------------------
-
- Writeln('Expanded memory not installed: ');
- writeln;
- end;
-
- with OS do
- begin
- Init;
- Writeln('Operating System Version: '+OSversion);
- Writeln('Country Code: ',Country);
- write('Currency String: ',Currency,' ');
- case CurrencyFmt of
- 0: writeln('(String leads currency, no space)');
- 1: writeln('(String follows currency, no space)');
- 2: writeln('(String leads currency, one space)');
- 3: writeln('(String follows currency, one space)');
- 4: writeln('(String replaces decimal separator)');
- end; {case}
- writeln('Currency Decimal Places: ',CurrencyDecPlaces);
- write('Thousands Separator: ','''',ThousandsSep,'''');
- writeln(' Decimal Separator: ','''',DecimalSep,'''');
- case DateFmt of
- USA: writeln('Date Format: MM DD YY');
- Europe: writeln('Date Format: DD MM YY');
- Japan: writeln('Date Format: YY MM DD');
- end; {case}
- write('Date separator: ','''',DateSep,'''');
- writeln(' Time separator: ','''',TimeSep,'''');
- if TimeFmt = 0 then
- writeln('Time is displayed on a 12 hour clock')
- else
- writeln('Time is displayed on a 24 hour clock');
- end;
- write(' press any key ...');
- Repeat until keypressed;
- if Lines > 25 then
- Monitor^.Set25;
- end.
- Notice that the INIT method is not called for the Monitor^ instance.
- This is because Monitor^ is a global instance, and the Toolkit automat-
- ically initializes all global instances.
-
-
- Figure 4.1 [SCREEN]
- The System Demo
- Program