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 >
Wrap
C/C++ Source or Header
|
1995-11-28
|
3KB
|
133 lines
/* :vi:se ts=4 sw=4:
* âEâCâôâhâEâëâCâuâëâè
*
* Copyright T.Kobayashi
* 1990.1.26
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys_doslib.h>
#define WLIB
#include "wlib.h"
#define MAXARGS 12
#define LIBRARY_ID 26
#include "id.h"
/* 1992 10/6 H.Ogasawara (COR.) */
/* 1994 11/29 H.Ogasawara (COR.) libc æ╬ë₧ */
extern int Parameter[];
/* æσêµò╧Éö */
WindowID WindowRootID;
void *WindowBackPattern;
int WindowProcessID;
extern int WindowHeapSize,
WindowProcessLevel;
extern void (*GlobalInit)(),
(*GlobalExit)();
extern void (*GlobalArgCheck)();
extern void _HeapInit();
extern int _CallServer( int, int, int* );
extern int _Entry( void );
extern int WindowMain( int, char** );
/*
proto -s wlib.c > temp
*/
static int DefaultSignalEntry( int );
extern unsigned int _PSP;
extern int _argc;
extern char **_argv;
#ifdef XC
extern char *_BEND,
*_HSTA,
*_HEND;
#endif
#ifdef LIBC
extern char *_esta,
*_HSTA,
*_HEND;
int _stacksize= 1024*4;
int _heapsize= 0;
# define _BEND _esta
#endif
/* âEâCâôâhâEâëâCâuâëâèé╠Åëè·ë╗ */
void
main()
{
if( GlobalArgCheck )
(*GlobalArgCheck)();
if( WindowHeapSize > 0 ){
/* SETBLOCK( _PSP, (int)_BEND - (int)_PSP + 0x10 );*/
if( (int)(_HSTA= (char*)MALLOC( WindowHeapSize )) < 0 ){
FPUTS( "HEAPé¬èmò█é┼é½é▄é╣é±\r\n", 2 );
EXIT2( 1 );
}
_HEND= _HSTA+ WindowHeapSize;
#ifdef XC
_HeapInit();
#endif
}else
_HEND= _HSTA;
Parameter[0]= (int)_Entry;
Parameter[1]= LIBRARY_ID;
Parameter[2]= (int)_PSP;
Parameter[3]= WindowProcessLevel;
Parameter[4]= WindowHeapSize;
Parameter[5]= (int)_HSTA;
WindowProcessID= _CallServer( 0, WindowConnectionOpenID, Parameter );
WindowRootID= (WindowID)Parameter[2];
WindowBackPattern= (Sheet*)Parameter[3];
WindowSetSignal( DefaultSignalEntry );
KEEPPR( (int)_BEND - (int)_PSP + 0x10, 0 );
}
/* âEâCâôâhâEâëâCâuâëâèé╠ÅIù╣Åêù¥ */
int
WindowConnectionClose()
{
Parameter[0]= 0;
_CallServer( WindowProcessID, WindowConnectionCloseID, Parameter );
if( GlobalExit ){
(*GlobalExit)();
GlobalExit= NULL;
}
return TRUE;
}
static int
DefaultSignalEntry( code )
int code;
{
EventInfo info;
switch( code ){
case SignalKill:
info.option= EventClose;
WindowSendEventAll( WindowProcessID, &info );
WindowConnectionClose();
return TRUE;
case SignalOpen:
if( GlobalInit )
(*GlobalInit)();
WindowMain( _argc, _argv );
return TRUE;
}
return FALSE;
}