Next: , Previous: Asemblerska sintaksa, Up: GPC na DJGPP-u



3.3.8 Reci mi kako da koristim DPMI, BIOS i ostale stvari povezane s DOS-om

DPMI, BIOS i ostale funkcije ne razlikuju se od ostalih sistemskih funkcija. Pogledajte u GPC priručnik kako pristupiti C biblioteci svog sustava. Ovaj mali primjer pokazuje kako koristiti DPMI, kopirajući neke strukture i prototipove iz <dpmi.h>:

     program DPMIDemo;
     
     { Samo za DJGPP }
     
     {$X+}
     
     { `Byte' je `unsigned char' u C-u,
       `ShortCard' je `unsigned short' u C-u,
       `MedCard' je `unsigned long' u C-u,
       `Word' je `unsigned' u C-u,
       itd. (svi ovi tipovi su ``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.