home *** CD-ROM | disk | FTP | other *** search
/ Kyūkyoku!! X68000 Emulator / X68000Book.dat / mac / OLS / X68000 / Ko-Window / kow142s.lzh / wsrv / wlib / wlibmain.c < prev    next >
C/C++ Source or Header  |  1995-11-28  |  3KB  |  133 lines

  1. /* :vi:se ts=4 sw=4:
  2.  *        âEâCâôâhâEâëâCâuâëâè
  3.  *
  4.  *            Copyright    T.Kobayashi
  5.  *            1990.1.26
  6.  */
  7.  
  8. #include    <stdio.h>
  9. #include    <stdlib.h>
  10. #include    <string.h>
  11. #include    <sys_doslib.h>
  12.  
  13. #define    WLIB
  14. #include    "wlib.h"
  15.  
  16. #define    MAXARGS            12
  17. #define    LIBRARY_ID        26
  18.  
  19. #include    "id.h"
  20.  
  21. /* 1992 10/6  H.Ogasawara (COR.) */
  22. /* 1994 11/29 H.Ogasawara (COR.) libc æ╬ë₧ */
  23.  
  24. extern int    Parameter[];
  25.  
  26. /*    æσêµò╧Éö  */
  27. WindowID    WindowRootID;
  28. void        *WindowBackPattern;
  29. int            WindowProcessID;
  30.  
  31. extern    int        WindowHeapSize,
  32.                 WindowProcessLevel;
  33. extern void        (*GlobalInit)(),
  34.                 (*GlobalExit)();
  35. extern void        (*GlobalArgCheck)();
  36.  
  37. extern void        _HeapInit();
  38. extern int        _CallServer( int, int, int* );
  39. extern int        _Entry( void );
  40. extern int        WindowMain( int, char** );
  41.  
  42. /*
  43.     proto -s wlib.c > temp
  44. */
  45. static    int        DefaultSignalEntry( int );
  46.  
  47. extern unsigned int    _PSP;
  48. extern int            _argc;
  49. extern char            **_argv;
  50.  
  51. #ifdef XC
  52. extern char    *_BEND,
  53.             *_HSTA,
  54.             *_HEND;
  55. #endif
  56. #ifdef LIBC
  57. extern char    *_esta,
  58.             *_HSTA,
  59.             *_HEND;
  60. int            _stacksize= 1024*4;
  61. int            _heapsize= 0;
  62. # define    _BEND    _esta
  63. #endif
  64.  
  65.  
  66. /*    âEâCâôâhâEâëâCâuâëâèé╠Åëè·ë╗  */
  67. void
  68. main()
  69. {
  70.     if( GlobalArgCheck )
  71.         (*GlobalArgCheck)();
  72.     if( WindowHeapSize > 0 ){
  73. /*        SETBLOCK( _PSP, (int)_BEND - (int)_PSP + 0x10 );*/
  74.         if( (int)(_HSTA= (char*)MALLOC( WindowHeapSize )) < 0 ){
  75.             FPUTS( "HEAPé¬èmò█é┼é½é▄é╣é±\r\n", 2 );
  76.             EXIT2( 1 );
  77.         }
  78.         _HEND= _HSTA+ WindowHeapSize;
  79. #ifdef XC
  80.         _HeapInit();
  81. #endif
  82.     }else
  83.         _HEND= _HSTA;
  84.  
  85.     Parameter[0]= (int)_Entry;
  86.     Parameter[1]= LIBRARY_ID;
  87.     Parameter[2]= (int)_PSP;
  88.     Parameter[3]= WindowProcessLevel;
  89.     Parameter[4]= WindowHeapSize;
  90.     Parameter[5]= (int)_HSTA;
  91.     WindowProcessID= _CallServer( 0, WindowConnectionOpenID, Parameter );
  92.     WindowRootID= (WindowID)Parameter[2];
  93.     WindowBackPattern= (Sheet*)Parameter[3];
  94.     WindowSetSignal( DefaultSignalEntry );
  95.  
  96.     KEEPPR( (int)_BEND - (int)_PSP + 0x10, 0 );
  97. }
  98.  
  99. /*  âEâCâôâhâEâëâCâuâëâèé╠ÅIù╣Åêù¥  */
  100. int
  101. WindowConnectionClose()
  102. {
  103.     Parameter[0]= 0;
  104.     _CallServer( WindowProcessID, WindowConnectionCloseID, Parameter );
  105.  
  106.     if( GlobalExit ){
  107.         (*GlobalExit)();
  108.         GlobalExit= NULL;
  109.     }
  110.     return    TRUE;
  111. }
  112.  
  113. static int
  114. DefaultSignalEntry( code )
  115. int        code;
  116. {
  117.     EventInfo    info;
  118.     switch( code ){
  119.         case SignalKill:
  120.             info.option= EventClose;
  121.             WindowSendEventAll( WindowProcessID, &info );
  122.             WindowConnectionClose();
  123.             return    TRUE;
  124.         case SignalOpen:
  125.             if( GlobalInit )
  126.                 (*GlobalInit)();
  127.             WindowMain( _argc, _argv );
  128.             return    TRUE;
  129.     }
  130.     return    FALSE;
  131. }
  132.  
  133.