home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / crossplatform / emulators / MacOS / mac64-04.hqx / MAC64-04.SEA / C64 / SOURCE / Main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-03  |  4.4 KB  |  199 lines  |  [TEXT/KAHL]

  1. /*
  2.     cOMMODORE 64 eMULATOR V0.4      eARLE f. pHILHOWER iii 
  3.     cOPYRIGHT (c) 1993-4            (ST916W9R@DUNX1.OCS.DREXEL.EDU)
  4.  
  5.     tHIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
  6.     IT UNDER THE TERMS OF THE gnu gENERAL pUBLIC lICENSE AS PUBLISHED BY
  7.     THE fREE sOFTWARE fOUNDATION; EITHER VERSION 2 OF THE lICENSE, OR
  8.     (AT YOUR OPTION) ANY LATER VERSION.
  9.  
  10.     tHIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
  11.     BUT without any warranty; WITHOUT EVEN THE IMPLIED WARRANTY OF
  12.     merchantability OR fitness for a particular purpose.  sEE THE
  13.     gnu gENERAL pUBLIC lICENSE FOR MORE DETAILS.
  14.  
  15.     yOU SHOULD HAVE RECEIVED A COPY OF THE gnu gENERAL pUBLIC lICENSE
  16.     ALONG WITH THIS PROGRAM; IF NOT, WRITE TO THE fREE sOFTWARE
  17.     fOUNDATION, iNC., 675 mASS aVE, cAMBRIDGE, ma 02139, usa.
  18. */
  19.  
  20. #INCLUDE <aPPLEeVENTS.H>
  21. #INCLUDE "pROCESSOR.H"
  22. #INCLUDE "eRROR.H"
  23. #INCLUDE "rESOURCES.H"
  24. #INCLUDE "pREFERENCES.H"
  25.  
  26. rECT DRAGrECT;
  27. eVENTrECORD EVENT;
  28. cURSOR COMMIEcURSOR, DISKcURSOR;
  29. INT PROGRAMmODE;
  30. VOID iNITIALIZE(), cLEANuPcOMMODORE();
  31.  
  32. MAIN()
  33. {$7b}
  34. iNITIALIZE();
  35. pROCESSORlOOP();
  36. eVENTlOOP();
  37. cLEANuPcOMMODORE();
  38. {$7d}
  39.  
  40. VOID iNITIALIZE()
  41. {$7b}
  42. INT ERR;
  43. dIALOGpTR DIALOG;
  44.  
  45. /* dO STANDARD mACINTOSH INITIALIZATIONS */
  46. iNITgRAF(&QD.THEpORT);
  47. iNITfONTS();
  48. iNITwINDOWS();
  49. iNITmENUS();
  50. teiNIT();
  51. iNITdIALOGS(NIL);
  52. iNITcURSOR();
  53.  
  54. /* sET UP THE MENUS, DRAG AREA */
  55. DRAGrECT=QD.SCREENbITS.BOUNDS;
  56. iNSETrECT(&DRAGrECT, 2, 2);
  57.  
  58. /* dISPLAY THE SPLASH SCREEN, EVEN IF FOR JUST A SECOND... */
  59. DIALOG=gETnEWdIALOG(KsPLASHdIALOG, NIL, (wINDOWpTR)-1l);
  60. sHOWwINDOW(DIALOG);
  61. dRAWdIALOG(DIALOG);
  62.  
  63. /* dO EMULATOR INITIALIZATIONS */
  64. IF (ERR=cURSORiNITIALIZE()) eXITeRROR(ERR);
  65. IF (ERR=mEMORYiNITIALIZE()) eXITeRROR(ERR);
  66. IF (ERR=mENUiNITIALIZE()) eXITeRROR(ERR);
  67. IF (ERR=viciNITIALIZE()) eXITeRROR(ERR);
  68. IF (ERR=dIRiNITIALIZE()) eXITeRROR(ERR);
  69. IF (ERR=aPPLEeVENTiNITIALIZE()) eXITeRROR(ERR);
  70. IF (ERR=iNSTRUCTIONiNITIALIZE()) eXITeRROR(ERR);
  71. IF (ERR=rEGISTERiNITIALIZE()) eXITeRROR(ERR);
  72. IF (ERR=tRAPiNITIALIZE()) eXITeRROR(ERR);
  73. IF (ERR=sERIALiNITIALIZE()) eXITeRROR(ERR);
  74. IF (ERR=pRINTERiNITIALIZE()) eXITeRROR(ERR);
  75. IF (ERR=fLOPPYiNITIALIZE()) eXITeRROR(ERR);
  76. IF (ERR=hARDiNITIALIZE()) eXITeRROR(ERR);
  77. IF (ERR=pREFiNITIALIZE()) eXITeRROR(ERR);
  78.  
  79. /* dONE WITH SPLASH SCREEN, SO FREE ITS MEMORY */
  80. hIDEwINDOW(DIALOG);
  81. dISPOSdIALOG(DIALOG);
  82. {$7d}
  83.  
  84. INT cURSORiNITIALIZE()
  85. {$7b}
  86. cURShANDLE CURSORhANDLE;
  87.  
  88. CURSORhANDLE=gETcURSOR(KcOMMIEcURSOR);
  89. IF (CURSORhANDLE==NIL) RETURN KmISSINGrESOURCE;
  90. COMMIEcURSOR=**CURSORhANDLE;
  91. dISPOShANDLE((hANDLE)CURSORhANDLE);
  92.  
  93. CURSORhANDLE=gETcURSOR(KdISKcURSOR);
  94. IF (CURSORhANDLE==NIL) RETURN KmISSINGrESOURCE;
  95. DISKcURSOR=**CURSORhANDLE;
  96. dISPOShANDLE((hANDLE)CURSORhANDLE);
  97.  
  98. RETURN KnOeRROR;
  99. {$7d}
  100.  
  101. eVENTlOOP()
  102. {$7b}
  103. INT DONE=0;
  104. CHAR THEcHAR;
  105. wINDOWpTR THEwIND;
  106.  
  107. WHILE (!DONE)
  108. {$7b}
  109. wAITnEXTeVENT(EVERYeVENT, &EVENT, 60l, NIL);
  110. SWITCH(EVENT.WHAT)
  111. {$7b}
  112. CASE NULLeVENT:
  113. BREAK;
  114.  
  115. CASE MOUSEdOWN:
  116. /* cALL OUR OWN MOUSEdOWN HANDLER */
  117. hANDLEmOUSEdOWN();
  118. BREAK;
  119.  
  120. CASE AUTOkEY:
  121. CASE KEYdOWN:
  122. /* wE'RE ONLY CONCERNED WITH oPTION-x CHARACTERS */
  123. THEcHAR = EVENT.MESSAGE&CHARcODEmASK;
  124. IF (EVENT.MODIFIERS&CMDkEY) dOmENUcHOICE(mENUkEY(THEcHAR));
  125. BREAK;
  126.  
  127. CASE UPDATEeVT:
  128. THEwIND=(wINDOWpTR)EVENT.MESSAGE;
  129. bEGINuPDATE(THEwIND);
  130. SWITCH (gETwrEFcON(THEwIND))
  131. {$7b}
  132. CASE KvicwINDOW:
  133. rEDRAWvic();
  134. BREAK;
  135. CASE KdIRwINDOW:
  136. rEDRAWdIR();
  137. BREAK;
  138. {$7d}
  139. eNDuPDATE(THEwIND);
  140. BREAK;
  141.  
  142. CASE KhIGHlEVELeVENT :
  143. /* aPPLE eVENTS HAVE THEIR OWN DISPATCHER IN THE os */
  144. aepROCESSaPPLEeVENT(&EVENT);
  145. BREAK;
  146.  
  147. CASE APP4eVT:
  148. IF (EVENT.MESSAGE&1) sETcURSOR(&(QD.ARROW));
  149. BREAK;
  150. {$7d}
  151. {$7d}
  152. {$7d}
  153.  
  154. hANDLEmOUSEdOWN()
  155. {$7b}
  156. wINDOWpTR THEwIND;
  157. SHORT THEpART;
  158.  
  159. THEpART=fINDwINDOW(EVENT.WHERE, &THEwIND);
  160. SWITCH(THEpART)
  161. {$7b}
  162. CASE INsYSwINDOW:
  163. sYSTEMcLICK(&EVENT, THEwIND);
  164. BREAK;
  165.  
  166. CASE INdRAG:
  167. IF (gETwrEFcON(THEwIND)==KvicwINDOW) dRAGvicwINDOW(&EVENT);
  168. ELSE dRAGwINDOW(THEwIND, EVENT.WHERE, &DRAGrECT);
  169. BREAK;
  170.  
  171. CASE INgOaWAY:
  172. IF (tRACKgOaWAY(THEwIND, EVENT.WHERE)) hIDEwINDOW(THEwIND);
  173. BREAK;
  174.  
  175. CASE INmENUbAR:
  176. dOmENUcHOICE(mENUsELECT(EVENT.WHERE));
  177. BREAK;
  178.  
  179. CASE INcONTENT:
  180. sELECTwINDOW(THEwIND);
  181. SWITCH (gETwrEFcON(THEwIND))
  182. {$7b}
  183. CASE KvicwINDOW:
  184. pROCESSORlOOP();
  185. BREAK;
  186. CASE KdIRwINDOW:
  187. fLOPPYcLICK(EVENT);
  188. BREAK;
  189. {$7d}
  190. BREAK;
  191. {$7d}
  192. {$7d}
  193.  
  194. VOID cLEANuPcOMMODORE()
  195. {$7b}
  196. aTTACHfLOPPYiMAGE(NIL);
  197. {$7d}
  198.  
  199.