[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### 4.3.8 Tell me how to do DPMI, BIOS and other DOS related things.

DPMI, BIOS and other functions are no different than other system functions. Refer to the GPC Manual on how to access your system's C-library. This small example shows how to use DPMI, copying some structures and function prototypes of ``<dpmi.h>'`:

    program DPMIDemo;

    { Only for DJGPP }

    {$X+}

    { `Byte' is `unsigned char' in C,
      `ShortCard' is `unsigned short' in C,
      `MedCard' is `unsigned long' in C,
      `Word' is `unsigned' in C,
      etc. (all these types are built-in). }

    type
      TDpmiVersionRet = record
        Major     : Byte;
        Minor     : Byte;
        Flags     : ShortCard;
        CPU       : Byte;
        Master_PIC: Byte;
        Slave_PIC : Byte;
      end;

    type
      TDpmiFreeMemInfo = record
        LargestAvailableFreeBlockInBytes,
        MaximumUnlockedPageAllocationInPages,
        MaximumLockedPageAllocationInPages,
        LinearAddressSpaceSizeInPages,
        TotalNumberOfUnlockedPages,
        TotalNumberOfFreePages,
        TotalNumberOfPhysicalPages,
        FreeLinearAddressSpaceInPages,
        SizeOfPagingFilePartitionInPages,
        Reserved1,
        Reserved2,
        Reserved3: MedCard;
      end;

    function DpmiGetVersion (var Version: TDpmiVersionRet): Integer;
             asmname '__dpmi_get_version';

    function DpmiGetFreeMemoryInformation
             (var MemInfo: TDpmiFreeMemInfo): Integer;
             asmname '__dpmi_get_free_memory_information';

    var
      Version: TDpmiVersionRet;
      MemInfo: TDpmiFreeMemInfo;

    begin
      if DpmiGetVersion (Version) = 0 then
        begin
          WriteLn ('CPU type:       ', Version.cpu, '86');
          WriteLn ('DPMI major:       ', Version.Major);
          WriteLn ('DPMI minor:       ', Version.Minor);
        end
      else
        WriteLn ('Error in DpmiGetVersion');
      if DpmiGetFreeMemoryInformation (MemInfo) = 0 then
        WriteLn ('Free DPMI memory: ',
                 MemInfo.TotalNumberOfFreePages, ' pages.')
      else
        WriteLn ('Error in DpmiGetMemoryInformation');
    end.

This document was generated by Frank Heckenbach on May, 10 2002 using texi2html