home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / gamtlk11.zip / source.zip / BLACKJACK / BLACKJACK.C < prev    next >
Text File  |  1999-03-29  |  7KB  |  188 lines

  1. /************************************************************************
  2.  *
  3.  * File: BlackJack.C
  4.  *
  5.  * This is the main source file for BlackJack, part of The Compulsive
  6.  * Gambler's Toolkit for OS/2
  7.  *
  8.  ************************************************************************/
  9. #define INCL_WINWINDOWMGR
  10. #define INCL_WINMESSAGEMGR
  11. #define INCL_WINSHELLDATA
  12. #define INCL_WINDIALOGS
  13. #define INCL_WINSTDSLIDER
  14. #define INCL_WINFRAMEMGR
  15. #define INCL_DOSPROCESS
  16. #define INCL_DOSSEMAPHORES
  17.  
  18. #include    "BlackJack.H"
  19. #include    "BlackJackRC.H"
  20. #include    <string.h>
  21. #include    <stdlib.h>
  22.  
  23.     /* Functions contained in MainWindow.C */
  24.  
  25. MRESULT EXPENTRY MainWindowProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  26.  
  27.     /* Functions contained in this file */
  28.  
  29. BOOL Initialize(BJACK *BJack);
  30. BOOL SaveProfile(BJACK *BJack);
  31.  
  32.     /* Functions contained in Deal.C */
  33.  
  34. VOID APIENTRY Animate(ULONG Parameter);
  35.  
  36. int main(int argc, char *argv[])
  37. {
  38.     BJACK   BJack;
  39.     HMQ     hmq;
  40.     QMSG    qmsg;
  41.     ULONG   ulFlags=FCF_STANDARD;
  42.     char    Title[129];
  43.  
  44.     /* Initialize window system */
  45.     if(!(BJack.hab=WinInitialize(0))) return FALSE;
  46.  
  47.     /* Create message queue */
  48.     if(!(hmq=WinCreateMsgQueue(BJack.hab, 0))) return FALSE;
  49.  
  50.     Initialize(&BJack);
  51.  
  52.     strcpy(Title, BJack.Prompt[PMT_APPNAME]);
  53.     strcat(Title, " ");
  54.     strcat(Title, BJack.Prompt[PMT_VERSION]);
  55.  
  56.     BJack.hwndFrame=WinCreateStdWindow(HWND_DESKTOP, FS_SIZEBORDER, &ulFlags,
  57.         BJack.Prompt[PMT_APPNAME],Title, WS_VISIBLE,
  58.         BJack.Module, MainFrame, &BJack.hwndClient);
  59.  
  60.     WinSendMsg(BJack.hwndClient, MESS_CREATE, MPFROMP(&BJack), NULL);
  61.  
  62.     /* Process messages */
  63.     while(WinGetMsg(BJack.hab,&qmsg, 0,0,0) && BJack.hwndFrame)
  64.         WinDispatchMsg(BJack.hab, &qmsg);
  65.  
  66.     /* Save profile */
  67.     SaveProfile(&BJack);
  68.  
  69.     /* Destroy message queue */
  70.     WinDestroyMsgQueue(hmq);
  71.     
  72.     /* Terminate application */
  73.     WinTerminate(BJack.hab);
  74. }
  75.  
  76. /************************************************************************
  77.  *
  78.  * BOOL Initialize(BJACK *BJack)
  79.  *
  80.  * Initializes the blackjack game.
  81.  *
  82.  ************************************************************************/
  83. BOOL Initialize(BJACK *BJack)
  84. {
  85.     HAB     habTemp=BJack->hab;
  86.     ULONG   Size;
  87.     HINI    hiniProfile=PrfOpenProfile(habTemp, "Gambler.INI");
  88.  
  89.     memset(BJack, 0, sizeof(*BJack));
  90.  
  91.     BJack->hab=habTemp;
  92.     BJack->cbSize=sizeof(*BJack);
  93.     BJack->Module=(HMODULE)0;   /* Until we internationalize */
  94.  
  95.     /* Load prompts */
  96.     for(Size=0;Size<NUMPROMPTS;Size++)
  97.         WinLoadString(BJack->hab, BJack->Module, PMT_BASE+Size,
  98.             sizeof(BJack->Prompt[Size]), BJack->Prompt[Size]);
  99.  
  100.     /* Register window class */
  101.     WinRegisterClass(BJack->hab, BJack->Prompt[PMT_APPNAME],(PFNWP)MainWindowProc,
  102.         CS_SIZEREDRAW, sizeof(BJack));
  103.  
  104.     /* Create animation semaphore */
  105.     DosCreateEventSem(NULL, &BJack->AnimateSem, 0, 0);
  106.  
  107.     /* Create animation thread */
  108.     DosCreateThread(&BJack->AnimateThread, (PFNTHREAD)Animate, (ULONG)BJack,
  109.         CREATE_READY | STACK_SPARSE, 32768);
  110.  
  111.     /* Load rules */
  112.     BJack->Rules.Flags=DEF_RULEFLAGS;
  113.     BJack->Rules.SoftHit=DEF_SOFTHIT;
  114.     BJack->Rules.HardHit=DEF_HARDHIT;
  115.     BJack->Rules.NumDecks=DEF_NUMDECKS;
  116.     BJack->Rules.DeckPenetration=DEF_DECKPENETRATION;
  117.     BJack->Flags=DEF_FLAGS;
  118.     BJack->Wager=DEF_WAGER;
  119.  
  120.     Size=sizeof(BJack->Rules.Flags);
  121.     PrfQueryProfileData(hiniProfile, "BlackJack", "RuleFlags", &BJack->Rules.Flags, &Size);
  122.     Size=sizeof(BJack->Rules.SoftHit);
  123.     PrfQueryProfileData(hiniProfile, "BlackJack", "SoftHit", &BJack->Rules.SoftHit, &Size);
  124.     Size=sizeof(BJack->Rules.HardHit);
  125.     PrfQueryProfileData(hiniProfile, "BlackJack", "HardHit", &BJack->Rules.HardHit, &Size);
  126.     Size=sizeof(BJack->Rules.NumDecks);
  127.     PrfQueryProfileData(hiniProfile, "BlackJack", "NumDecks", &BJack->Rules.NumDecks, &Size);
  128.     Size=sizeof(BJack->Rules.DeckPenetration);
  129.     PrfQueryProfileData(hiniProfile, "BlackJack", "DeckPenetration", &BJack->Rules.DeckPenetration, &Size);
  130.     Size=sizeof(BJack->Flags);
  131.     PrfQueryProfileData(hiniProfile, "BlackJack", "Flags", &BJack->Flags, &Size);
  132.  
  133.     BJack->xLeft=0.35*65535;
  134.     BJack->yBottom=6554;
  135.     BJack->xRight=0.65*65535;
  136.     BJack->yTop=0.9*65535;
  137.  
  138.     Size=sizeof(BJack->xLeft);
  139.     PrfQueryProfileData(hiniProfile, "BlackJack", "xLeft", &BJack->xLeft, &Size);
  140.     Size=sizeof(BJack->xRight);
  141.     PrfQueryProfileData(hiniProfile, "BlackJack", "xRight", &BJack->xRight, &Size);
  142.     Size=sizeof(BJack->yBottom);
  143.     PrfQueryProfileData(hiniProfile, "BlackJack", "yBottom", &BJack->yBottom, &Size);
  144.     Size=sizeof(BJack->yTop);
  145.     PrfQueryProfileData(hiniProfile, "BlackJack", "yTop", &BJack->yTop, &Size);
  146.     Size=sizeof(BJack->SizeFlags);
  147.     PrfQueryProfileData(hiniProfile, "BlackJack", "SizeFlags", &BJack->SizeFlags, &Size);
  148.     Size=sizeof(BJack->Bank);
  149.     PrfQueryProfileData(hiniProfile, "BlackJack", "Bank", &BJack->Bank, &Size);
  150.     Size=sizeof(BJack->Wager);
  151.     PrfQueryProfileData(hiniProfile, "BlackJack", "Wager", &BJack->Wager, &Size);
  152.  
  153.     PrfCloseProfile(hiniProfile);
  154.  
  155.     return TRUE;
  156. }
  157.  
  158. /************************************************************************
  159.  *
  160.  * BOOL SaveProfile(BJACK *BJack)
  161.  *
  162.  * Saves the profile.
  163.  *
  164.  ************************************************************************/
  165. BOOL SaveProfile(BJACK *BJack)
  166. {
  167.     HINI    hiniProfile=PrfOpenProfile(BJack->hab, "Gambler.INI");
  168.  
  169.     PrfWriteProfileData(hiniProfile, "BlackJack", "RuleFlags", &BJack->Rules.Flags, sizeof(BJack->Rules.Flags));
  170.     PrfWriteProfileData(hiniProfile, "BlackJack", "SoftHit", &BJack->Rules.SoftHit, sizeof(BJack->Rules.SoftHit));
  171.     PrfWriteProfileData(hiniProfile, "BlackJack", "HardHit", &BJack->Rules.HardHit, sizeof(BJack->Rules.HardHit));
  172.     PrfWriteProfileData(hiniProfile, "BlackJack", "NumDecks", &BJack->Rules.NumDecks, sizeof(BJack->Rules.NumDecks));
  173.     PrfWriteProfileData(hiniProfile, "BlackJack", "DeckPenetration", &BJack->Rules.DeckPenetration, sizeof(BJack->Rules.DeckPenetration));
  174.     PrfWriteProfileData(hiniProfile, "BlackJack", "Flags", &BJack->Flags, sizeof(BJack->Flags));
  175.  
  176.     PrfWriteProfileData(hiniProfile, "BlackJack", "xLeft", &BJack->xLeft, sizeof(BJack->xLeft));
  177.     PrfWriteProfileData(hiniProfile, "BlackJack", "xRight", &BJack->xRight, sizeof(BJack->xRight));
  178.     PrfWriteProfileData(hiniProfile, "BlackJack", "yBottom", &BJack->yBottom, sizeof(BJack->yBottom));
  179.     PrfWriteProfileData(hiniProfile, "BlackJack", "yTop", &BJack->yTop, sizeof(BJack->yTop));
  180.     PrfWriteProfileData(hiniProfile, "BlackJack", "SizeFlags", &BJack->SizeFlags, sizeof(BJack->SizeFlags));
  181.     PrfWriteProfileData(hiniProfile, "BlackJack", "Bank", &BJack->Bank, sizeof(BJack->Bank));
  182.     PrfWriteProfileData(hiniProfile, "BlackJack", "Wager", &BJack->Wager, sizeof(BJack->Wager));
  183.  
  184.     PrfCloseProfile(hiniProfile);
  185.  
  186.     return TRUE;
  187. }
  188.