⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system.inc

📁 著名的游戏开发库Allegro4.2.0 for DELPHI
💻 INC
📖 第 1 页 / 共 2 页
字号:
  set_close_button_callback: function(proc: proc_ptr): sint32; cdecl;

  check_cpu: procedure; cdecl;

const
{* CPU Capabilities flags for x86 capable chips *}
  CPU_ID       = $0001;
  CPU_FPU      = $0002;
  CPU_MMX      = $0004;
  CPU_MMXPLUS  = $0008;
  CPU_SSE      = $0010;
  CPU_SSE2     = $0020;
  CPU_3DNOW    = $0040;
  CPU_ENH3DNOW = $0080;
  CPU_CMOV     = $0100;
  CPU_AMD64    = $0200;
  CPU_IA64     = $0400;
  CPU_SSE3     = $0800;
{* CPU families - PC *}
  CPU_FAMILY_UNKNOWN  = 0;
  CPU_FAMILY_I386     = 3;
  CPU_FAMILY_I486     = 4;
  CPU_FAMILY_I586     = 5;
  CPU_FAMILY_I686     = 6;
  CPU_FAMILY_ITANIUM  = 7;
  CPU_FAMILY_EXTENDED = 15;
{* CPUID only returns 15 bits, we need extra information from the CPU *}
{*  model to identify Pentium IV, Xeon and Athlon 64 processors. *}

{* CPU families - Power PC *}
  CPU_FAMILY_POWERPC  = 18;

{* CPU models - PC *}
// 486
  CPU_MODEL_I486DX    = 0;
  CPU_MODEL_I486DX50  = 1;
  CPU_MODEL_I486SX    = 2;
  CPU_MODEL_I487SX    = 3;
  CPU_MODEL_I486SL    = 4;
  CPU_MODEL_I486SX2   = 5;
  CPU_MODEL_I486DX2   = 7;
  CPU_MODEL_I486DX4   = 8;

// Intel/586 
  CPU_MODEL_PENTIUM             = 1;
  CPU_MODEL_PENTIUMP54C         = 2;
  CPU_MODEL_PENTIUMOVERDRIVE    = 3;
  CPU_MODEL_PENTIUMOVERDRIVEDX4 = 4;
  CPU_MODEL_CYRIX               = 14;
  CPU_MODEL_UNKNOWN             = 15;

// AMD/586
  CPU_MODEL_K5                  = 0;
  CPU_MODEL_K6                  = 6;

// Intel/686 
  CPU_MODEL_PENTIUMPROA          = 0;
  CPU_MODEL_PENTIUMPRO           = 1;
  CPU_MODEL_PENTIUMIIKLAMATH     = 3;
  CPU_MODEL_PENTIUMII            = 5;
  CPU_MODEL_CELERON              = 6;
  CPU_MODEL_PENTIUMIIIKATMAI     = 7;
  CPU_MODEL_PENTIUMIIICOPPERMINE = 8;
  CPU_MODEL_PENTIUMIIIMOBILE     = 9;

// AMD/686
  CPU_MODEL_ATHLON               = 2;
  CPU_MODEL_DURON                = 3;


// Information when CPU_FAMILY is 15
  CPU_MODEL_PENTIUMIV            = 0;
  CPU_MODEL_XEON                 = 2;

  CPU_MODEL_ATHLON64             = 4;
  CPU_MODEL_OPTERON              = 5;

{* Information for Power PC processors */
/* these defines are taken from <mach-o/machine.h> *}
  CPU_MODEL_POWERPC_601	      = 1;
  CPU_MODEL_POWERPC_602	      = 2;
  CPU_MODEL_POWERPC_603	      = 3;
  CPU_MODEL_POWERPC_603e	  = 4;
  CPU_MODEL_POWERPC_603ev	  = 5;
  CPU_MODEL_POWERPC_604	      = 6;
  CPU_MODEL_POWERPC_604e	  = 7;
  CPU_MODEL_POWERPC_620	      = 8;
  CPU_MODEL_POWERPC_750	      = 9;
  CPU_MODEL_POWERPC_7400	  = 10;
  CPU_MODEL_POWERPC_7450	  = 11;

var
  cpu_vendor: PChar;
  cpu_family: p_sint32;
  cpu_model: p_sint32;
  cpu_capabilities: p_sint32;

type
  P_SYSTEM_DRIVER = ^SYSTEM_DRIVER;
  SYSTEM_DRIVER = record
    id                        : sint32;
    name                      : PChar;
    desc                      : PChar;
    ascii_name                : PChar;
    init                      : function: sint32; cdecl;
    exit                      : procedure; cdecl;
    get_executable_name       : procedure(output: PChar; size: sint32); cdecl;
    find_resource             : function(dest: PChar; const resource: PChar; size: sint32): sint32; cdecl;
    set_window_title          : procedure(const name: PChar); cdecl;
    set_close_button_callback : function(proc: proc_ptr): sint32; cdecl;
    messages                  : procedure(const msg: PChar); cdecl;
    assert                    : procedure(const msg: PChar); cdecl;
    save_console_state        : procedure; cdecl;
    restore_console_state     : procedure; cdecl;
    create_bitmap             : function(color_depth, width, height: sint32): p_BITMAP; cdecl;
    created_bitmap            : procedure(bmp: p_BITMAP); cdecl;
    create_sub_bitmap         : function(parent: p_BITMAP; x, y, width, height: sint32): p_BITMAP; cdecl;
    created_sub_bitmap        : procedure(bmp, parent: p_BITMAP); cdecl;
    destroy_bitmap            : function(bitmap: p_BITMAP): sint32; cdecl;
    read_hardware_palette     : procedure; cdecl;
    set_palette_range         : procedure(const p: P_PALETTE; from, tos, retracesync: sint32); cdecl;
    get_vtable                : function(color_depth: sint32): p_GFX_VTABLE; cdecl;
    set_display_switch_mode   : function(mode: sint32): sint32; cdecl;
    display_switch_lock       : procedure(lock, foreground: sint32); cdecl;
    desktop_color_depth       : function: sint32; cdecl;
    get_desktop_resolution    : function(var width, height: sint32): sint32; cdecl;
    get_gfx_safe_mode         : procedure(driver: p_sint32; mode: p_GFX_MODE); cdecl;
    yield_timeslice           : procedure; cdecl;
    create_mutex              : function: Pointer; cdecl;
    destroy_mutex             : procedure(handle: Pointer); cdecl;
    lock_mutex                : procedure(handle: Pointer); cdecl;
    unlock_mutex              : procedure(handle: Pointer); cdecl;
    gfx_drivers               : function: P_DRIVER_INFO; cdecl;
    digi_drivers              : function: P_DRIVER_INFO; cdecl;
    midi_drivers              : function: P_DRIVER_INFO; cdecl;
    keyboard_drivers          : function: P_DRIVER_INFO; cdecl;
    mouse_drivers             : function: P_DRIVER_INFO; cdecl;
    joystick_drivers          : function: P_DRIVER_INFO; cdecl;
    timer_drivers             : function: P_DRIVER_INFO; cdecl;
  end;

var
  the_system_none: P_SYSTEM_DRIVER; // system_none the_system_none
  the_system_driver: ^P_SYSTEM_DRIVER; // system_driver the_system_driver
  _system_driver_list: P_DRIVER_INFO;

procedure set_window_title(const name: PChar);
function desktop_color_depth: sint32;
function get_desktop_resolution(var width, height: sint32): sint32;
{$ENDIF ALLEGRO_INTERFACE}

{$IFDEF ALLEGRO_IMPLEMENTATION}
function MAKE_VERSION(a, b, c: sint32): sint32;
begin
  Result := (a shl 16) + (b shl 8) + c;
end;

function install_allegro(system_id: sint32; errno_ptr: p_sint32s; atexit: atexit_ptr): sint32;
begin
   if MAKE_VERSION(ALLEGRO_VERSION, ALLEGRO_SUB_VERSION, ALLEGRO_WIP_VERSION) <>
     _get_allegro_version() then
   begin
      ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text('Library version mismatch'));
      Result := not 0;
      Exit;
   end;
   Result := _install_allegro(system_id, errno_ptr, nil);
end;

function allegro_init: sint32;
begin
  Result := install_allegro(SYSTEM_AUTODETECT, @errno, nil);
end;

procedure set_window_title(const name: PChar);
begin
  assert(the_system_driver <> nil);

  if @the_system_driver^^.set_window_title <> nil then
    the_system_driver^^.set_window_title(name);
end;

function desktop_color_depth: sint32;
begin
  assert(the_system_driver <> nil);

  if @the_system_driver^^.desktop_color_depth <> nil then
    Result := the_system_driver^^.desktop_color_depth
  else
    Result := 0;
end;

function get_desktop_resolution(var width, height: sint32): sint32;
begin
  assert(the_system_driver <> nil);

  if @the_system_driver^^.get_desktop_resolution <> nil then
    Result := the_system_driver^^.get_desktop_resolution(width, height)
  else
    Result := -1;
end;
{$ENDIF ALLEGRO_IMPLEMENTATION}

{$IFDEF ALLEGRO_LOADVARIABLE}
  allegro_id                 := LoadDLL('allegro_id');
  allegro_error              := LoadDLL('allegro_error');
  os_type                    := LoadDLL('os_type');
  os_version                 := LoadDLL('os_version');
  os_revision                := LoadDLL('os_revision');
  os_multitasking            := LoadDLL('os_multitasking');
  _get_allegro_version       := LoadDLL('_get_allegro_version');
  _install_allegro           := LoadDLL('_install_allegro');
  allegro_exit               := LoadDLL('allegro_exit');
  allegro_message            := LoadDLL('allegro_message');
  get_executable_name        := LoadDLL('get_executable_name');
  set_close_button_callback  := LoadDLL('set_close_button_callback');
  check_cpu                  := LoadDLL('check_cpu');
  cpu_vendor                 := LoadDLL('cpu_vendor');
  cpu_family                 := LoadDLL('cpu_family');
  cpu_model                  := LoadDLL('cpu_model');
  cpu_capabilities           := LoadDLL('cpu_capabilities');
  the_system_none            := LoadDLL('system_none');
  the_system_driver          := LoadDLL('system_driver');
  _system_driver_list        := LoadDLL('_system_driver_list');
{$ENDIF ALLEGRO_LOADVARIABLE}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -