home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 26 / CD_ASCQ_26_1295.iso / vrac / ysfl12.zip / FILES1.ZIP / magic.pas < prev    next >
Pascal/Delphi Source File  |  1995-04-02  |  2KB  |  74 lines

  1. {$A+,B-,D-,F+,G+,I-,K+,L-,N-,P-,Q-,R-,S+,T+,V-,W-,X+,Y-}
  2. unit MAGIC;
  3. {
  4.      File: MAGIC.PAS
  5.    Author: Bob Swart [100434,2072]
  6.   Purpose: explicit import unit for MAGIC.DLL
  7. }
  8. interface
  9. Const
  10.   NoneID = 0;
  11.   UserID = 1;
  12.   CompID = 2;
  13.  
  14. Type
  15.   TPlayer = NoneID..CompID;
  16.  
  17. Const
  18.   NilPlace   = 0; { move impossible }
  19.   FirstPlace = 1;
  20.   LastPlace  = 9;
  21.  
  22. Type
  23.   TPlace = FirstPlace..LastPlace;
  24.   TMove  = NilPlace..LastPlace;
  25.  
  26. Type
  27.   HGame = Word; { Handle to a game }
  28.  
  29. Const
  30.   MagicLoaded: Boolean = False; { presume nothing! }
  31.  
  32. var NewGame: function: HGame;
  33.     EndGame: procedure(Game: HGame);
  34.     MakeMove: procedure(Game: HGame; ID: TPlayer; Place: TPlace);
  35.     NextMove: function(Game: HGame; ID: TPlayer): TMove;
  36.     IsWinner: function(Game: HGame): TPlayer;
  37.     GetValue: function(Game: HGame; Place: TPlace): TPlayer;
  38.  
  39. implementation
  40. {$IFDEF WINDOWS}
  41. uses WinProcs;
  42. Const SEM_NoOpenFileErrorBox = $8000;
  43. {$ELSE}
  44. uses WinAPI;
  45. {$ENDIF}
  46.  
  47. var SaveExit: pointer;
  48.     DLLHandle: Word;
  49.  
  50.     procedure NewExit; far;
  51.     begin
  52.       ExitProc := SaveExit;
  53.       FreeLibrary(DLLHandle)
  54.     end {NewExit};
  55.  
  56. begin
  57.   {$IFDEF WINDOWS}
  58.   SetErrorMode(SEM_NoOpenFileErrorBox);
  59.   {$ENDIF}
  60.   DLLHandle := LoadLibrary('MAGIC.DLL');
  61.   if DLLHandle >= 32 then
  62.   begin
  63.     MagicLoaded := True;
  64.     SaveExit := ExitProc;
  65.     ExitProc := @NewExit;
  66.     @NewGame := GetProcAddress(DLLHandle,'NEWGAME');
  67.     @EndGame := GetProcAddress(DLLHandle,'ENDGAME');
  68.     @MakeMove := GetProcAddress(DLLHandle,'MAKEMOVE');
  69.     @NextMove := GetProcAddress(DLLHandle,'NEXTMOVE');
  70.     @IsWinner := GetProcAddress(DLLHandle,'ISWINNER');
  71.     @GetValue := GetProcAddress(DLLHandle,'GETVALUE')
  72.   end
  73. end.
  74.