Node: DJGPP specific code, Next: Stack size, Previous: Assembler syntax, Up: GPC on DJGPP

#### 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;
                  external name '__dpmi_get_version';

         function DpmiGetFreeMemoryInformation
                  (var MemInfo: TDpmiFreeMemInfo): Integer;
                  external name '__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.