home *** CD-ROM | disk | FTP | other *** search
/ Mac Power 1996 June / MACPOWER-1996-06.ISO.7z / MACPOWER-1996-06.ISO / MacPowerオリジナル / キョービのプログラマー / リバースクライアント東山1 / 東山通り.proj / reverseClient.MAIN < prev    next >
Text File  |  1996-04-01  |  8KB  |  254 lines

  1. '--------------------------------------------------
  2. '----------------- ReverseClient.MAIN -------------
  3. '------------- Reverse Client Program -------------
  4. '--------------------------------------------------
  5. ' Original C version by Takuji Matsubara
  6. ' FutureBASIC II Porting by Takayuki Nakano 
  7. '--------------------------------------------------
  8.  
  9. WINDOW OFF
  10. COMPILE 0,_MacsBugLabels
  11. RESOURCES "reverseClient.rsrc" ,"APPLrEVc"'the resource file, & file type creator
  12.  
  13. GLOBALS "reverseClient.GLBL"
  14. END GLOBALS
  15.  
  16. '------------- include files -------------
  17. INCLUDE "reverseClient.INCL"
  18.  
  19. GOTO "main"
  20. '============= Implementation =============
  21. '------------- toolbox routine from <EPPC.h> -------------
  22. 'extern pascal OSErr PostHighLevelEvent(const EventRecord *theEvent, unsigned long receiverID, unsigned long msgRefcon, Ptr msgBuff, unsigned long msgLen, unsigned long postingOptions)
  23. ' THREEWORDINLINE(0x3F3C, 0x0034, 0xA88F);
  24. LOCAL MODE
  25. LOCAL FN PostHighLevelEvent(theEvent&, receiverID&, msgRefcon&, msgBuff&, msgLen&, postingOptions&)
  26.  `      SUBQ.L          #2,sp                   ;clear space for result
  27.  `      MOVE.L          ^theEvent&,-(sp)        ;pointer to theEvent
  28.  `      MOVE.L          ^receiverID&,-(sp)      ;unsigned long receiverID
  29.  `      MOVE.L          ^msgRefcon&,-(sp)       ;unsigned long msgRefcon
  30.  `      MOVE.L          ^msgBuff&,-(sp)         ;ptr msgBuff
  31.  `      MOVE.L          ^msgLen&,-(sp)          ;unsigned long msgLen
  32.  `      MOVE.L          ^postingOptions&,-(sp)  ;unsigned long postingOptions
  33.  `      DC.W            $3F3C,$0034,$A88F       ;trap number
  34.  `      MOVE.W          (sp)+,^osErr%           ;D0 = osErr
  35. END FN = osErr%                           'long value returnd in D0
  36.  
  37. 'extern pascal OSErr AcceptHighLevelEvent(TargetID *sender, unsigned long *msgRefcon, Ptr msgBuff, unsigned long *msgLen)
  38. ' THREEWORDINLINE(0x3F3C, 0x0033, 0xA88F);
  39. LOCAL MODE
  40. LOCAL FN AcceptHighLevelEvent(sender&, msgRefcon&, msgBuff&, msgLen&)
  41.  `      SUBQ.L          #2,sp                   ;clear space for result
  42.  `      MOVE.L          ^sender&,-(sp)          ;pointer to sender
  43.  `      MOVE.L          ^msgRefcon&,-(sp)       ;pointer to msgRefcon
  44.  `      MOVE.L          ^msgBuff&,-(sp)         ;ptr msgBuff
  45.  `      MOVE.L          ^msgLen&,-(sp)          ;pointer to msgLen
  46.  `      DC.W            $3F3C,$0033,$A88F       ;trap number
  47.  `      MOVE.W          (sp)+,^osErr%           ;D0 = osErr
  48. END FN = osErr%  
  49.  
  50. '------------- process apple events -------------
  51. "AEOpenApplication"
  52. ENTERPROC (procAEvtPtr&, procAEvtReplyPtr&, procAEvtRefCon&)
  53.  gErr% = _noErr
  54. EXITPROC = gErr%
  55.  
  56. "AEOpenDocument"
  57. ENTERPROC (procAEvtPtr&, procAEvtReplyPtr&, procAEvtRefCon&)
  58.  gErr% = _errAEEventNotHandled
  59. EXITPROC = gErr%
  60.  
  61. "AEPrintDocument"
  62. ENTERPROC (procAEvtPtr&, procAEvtReplyPtr&, procAEvtRefCon&)
  63.  gErr% = _errAEEventNotHandled
  64. EXITPROC = gErr%
  65.  
  66. "AEQuitApplication"
  67. ENTERPROC (procAEvtPtr&, procAEvtReplyPtr&, procAEvtRefCon&)
  68.  gProgramEnds% = _true : gErr% = _noErr
  69. EXITPROC = gErr%
  70.  
  71. '------------- draw window contents -------------
  72. LOCAL FN setupCurMsg(id%,index%)
  73.  WINDOW #1
  74.  EDIT$(1) = STR#(id%,index%)
  75. END FN
  76.  
  77. '------------- communicate with client program -------------
  78. LOCAL
  79. DIM prec.PlaceRec
  80. DIM myEvent.evtRecsize
  81. LOCAL FN sendMessage(mStone&, pCell&)
  82.  err% = 0
  83.  prec.myStoneP&      = mStone&
  84.  prec.placeCell.h%   = pCell&.h%
  85.  prec.placeCell.v%   = pCell&.v%
  86.  myEvent.evtWhat%    = _kHighLevelEvent
  87.  myEvent.evtMsg&     = _ReverseMessage
  88.  myEvent.evtWhere.h% = 0
  89.  myEvent.evtWhere.v% = 0
  90.  FOR i = 0 TO 1
  91.   err% = FN PostHighLevelEvent(@myEvent, @gLastReceivedServerID, 0, @prec, _PlaceRec, _receiverIDisTargetID)
  92.   IF err% <> _sessClosedErr THEN i = 1    'break loop
  93.  NEXT
  94. END FN = err%
  95.  
  96. LOCAL
  97. DIM place.4
  98. DIM curboard.ReverseRec
  99. DIM msgRefcon&, sizeofRecvData&
  100. LOCAL FN receiveData(anEvent&)
  101.  place.h% = 0 : place.v% = 0
  102.  sizeofRecvData& = _ReverseRec            '_ReverseRec is record size
  103.  err% = FN AcceptHighLevelEvent(@gLastReceivedServerID, @msgRefcon&, @curboard, @sizeofRecvData&)
  104.  LONG IF err% = 0
  105.   SELECT curboard.RevMessage&
  106.    CASE _AreYouReverse
  107.     FN setupCurMsg(128,_STRWaitingStartGame)
  108.     FN sendMessage(_YesIam, @place)
  109.    CASE _YourTurn
  110.     FN think(@curboard, @place)
  111.     FN sendMessage(curboard.myStoneR&,@place)
  112.     FN setupCurMsg(128,_STRGameStarted)
  113.    CASE _YouWin
  114.     FN setupCurMsg(128,_STRWin)
  115.    CASE _YouLose
  116.     FN setupCurMsg(128,_STRLose)
  117.    CASE _Drawn
  118.     FN setupCurMsg(128,_STRDrawn)
  119.   END SELECT
  120.  END IF
  121. END FN
  122.  
  123. '------------- management events -------------
  124. LOCAL FN DoEvent
  125.  macEvnt%   = {EVENT}
  126.  AEMessage& = [EVENT+_evtMessage]
  127.  LONG IF macEvnt% = _kHighLevelEvent
  128.   LONG IF AEMessage& = _ReverseMessage
  129.    FN receiveData(EVENT)
  130.   END IF
  131.  END IF
  132. END FN
  133.  
  134. LOCAL FN doDialog
  135.  evnt = DIALOG(0)                         'get event
  136.  id   = DIALOG(evnt)                      'get more info about event
  137.  SELECT evnt                              'what event occurred?
  138.   CASE _wndClose
  139.    gProgramEnds% = _true
  140.  END SELECT
  141. END FN
  142.  
  143. '------------- management menus -------------
  144. LOCAL FN doMenu
  145.  menuID=MENU(_menuID)
  146.  itemID=MENU(_itemID)
  147.  SELECT menuID
  148.   CASE _mApple
  149.    SELECT itemID
  150.     CASE _iAbout
  151.      item% = FN ALERT (_AboutALRT, 0)     'About ALRT dialog box
  152.    END SELECT
  153.   CASE _mFile
  154.    gProgramEnds% = _true
  155.   CASE _mEdit
  156.    '
  157.  END SELECT
  158.  MENU                                     'unhilight menubar
  159. END FN
  160.  
  161. '============= initialize =============
  162. LOCAL FN AEErrorHandler (osErr%)
  163.  LONG IF osErr% = _zTrue
  164.   tmp$ = "You need System 7.x/Apple Event Manager to install Apple Events."
  165.  XELSE
  166.   tmp$ = "Error with Apple Event handlers. Error ID =" + STR$(osErr)
  167.  END IF
  168.  CALL PARAMTEXT(tmp$, "", "", "")
  169.  item% = FN CAUTIONALERT (_ErrorALRT, 0)
  170. END FN
  171.  
  172. LOCAL FN InstallAppleEvents
  173.  LONG IF SYSTEM(_sysVers) > 699 AND FN GESTALT (_gestaltAppleEventsAttr)'AEevts are only available in System 7.x
  174.   & EVENT -8, 3                           'use WaitNextEvent insted of GetNextEvent in HANDLEEVENTS
  175.   gOpenApplAEPtr& = LINE "AEOpenApplication"
  176.   osErr% = FN AEINSTALLEVENTHANDLER (_kCoreEventClass, _kAEOpenApplication, gOpenApplAEPtr&, _false, _false)
  177.   LONG IF osErr% = _noErr
  178.    gQuitApplAEPtr& = LINE "AEQuitApplication"
  179.    osErr% = FN AEINSTALLEVENTHANDLER (_kCoreEventClass, _kAEQuitApplication, gQuitApplAEPtr&, _false, _false)
  180.    LONG IF osErr% = _noErr
  181.     gOpenDocAEPtr&  = LINE "AEOpenDocument"
  182.     osErr% = FN AEINSTALLEVENTHANDLER (_kCoreEventClass, _kAEOpenDocuments, gOpenDocAEPtr& , _false, _false)
  183.     LONG IF osErr% = _noErr
  184.      gPrintDocAEPtr& = LINE "AEPrintDocument"
  185.      osErr% = FN AEINSTALLEVENTHANDLER (_kCoreEventClass, _kAEPrintDocuments, gPrintDocAEPtr&, _false, _false)
  186.     END IF
  187.    END IF
  188.   END IF
  189.  XELSE
  190.   FN AEErrorHandler (_zTrue) : END
  191.  END IF
  192.  IF osErr% FN AEErrorHandler (osErr%) : END
  193. END FN
  194.  
  195. LOCAL
  196. DIM rect.8
  197. LOCAL FN initialize
  198.  gProgramEnds% = _false
  199.  '---------- set rectangle of window
  200.  h& = FN GETRESOURCE(_WindowRectResType, _WindowRectResID)
  201.  LONG IF h&                               
  202.   rect;8 = [h&]
  203.  XELSE
  204.   CALL SETRECT(rect, 10, 50, 410, 130)
  205.  END IF
  206.  TEXT _applFont,12
  207.  title$ = STR#(128,_STRWndtitle)
  208.  WINDOW #1, title$, @rect, _doc
  209.  tmp$ = STR#(128,_STRWaitingConnection)
  210.  EDIT FIELD #1, tmp$, (0,0)-(rect.right% - rectr.left%, rect.bottom% - rect.top%), _statNoFramed, _centerJust
  211. END FN
  212.  
  213. '------------- terminate -------------
  214. LOCAL
  215. DIM rect.8
  216. LOCAL FN saveWindowLocation
  217.  h& = FN GETRESOURCE(_WindowRectResType, _WindowRectResID)
  218.      LONG IF h& = _nil
  219.   h& = FN NEWHANDLE _clear (8)
  220.   LONG IF h&
  221.    CALL SETRECT(rect, 10, 50, 410, 130)
  222.    BLOCKMOVE @rect, [h&], 8
  223.    CALL ADDRESOURCE(h&, _WindowRectResType, _WindowRectResID, "")
  224.    LONG IF FN RESERROR
  225.     err% = FN DISPOSHANDLE(h&)
  226.     h& = _nil
  227.    END IF
  228.   END IF
  229.  END IF
  230.  LONG IF h& <> _nil
  231.   GET WINDOW #1, wndPtr&
  232.   rgnHndl& = wndPtr&.contRgn&
  233.   BLOCKMOVE [rgnHndl&]+_rgnBBox, [h&], 8
  234.   CALL CHANGEDRESOURCE(h&)
  235.   CALL WRITERESOURCE(h&)
  236.  END IF
  237. END FN
  238.  
  239. '============= main =============
  240. "main"
  241.  
  242. IF FN InstallAppleEvents THEN END
  243. FN initialize
  244. ON EVENT  FN DoEvent                      'set up routines to handle high level event
  245. ON DIALOG FN doDialog                     'set up routines to handle events
  246. ON MENU   FN doMenu
  247. '------------- event loop -------------
  248. DO
  249.  HANDLEEVENTS
  250. UNTIL gProgramEnds%
  251. FN saveWindowLocation
  252. END
  253.  
  254.