home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Kyūkyoku!! X68000 Emulator
/
X68000Book.dat
/
mac
/
OLS
/
X68000
/
Ko-Window
/
kow142s.lzh
/
wsrv
/
exec.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-11-20
|
3KB
|
147 lines
/* Modified by żè}î┤öÄöV */
/*:vi:se ts=8 sw=8:*/
#include <stdio.h>
#include <stdlib.h>
#include <sys_doslib.h>
#include <microstr.h>
#include "super.h"
#include "exec.h"
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
extern int LOADEXEC();
extern void (*PutCVtable[])();
unsigned char *FCB;
static int DefaultPut,
DefaultPrint,
DefaultConCtrl,
DefaultIOCSPut,
DefaultIOCSPrt;
void
PutCVtInit()
{
extern void PutEntry(),
PrintEntry(),
ConCtrlEntry(),
IOCSPutEntry(),
IOCSPrtEntry();
extern void xPutEntry(),
xPrintEntry(),
xConCtrlEntry(),
xIOCSPutEntry(),
xIOCSPrtEntry();
if( !DefaultPut ){
extern int BGmode;
/* InSuper();*/
if( BGmode ){
DefaultPut= INTVCS( 0xFF02, (char*)PutEntry );
DefaultIOCSPrt= INTVCS( 0x121, (char*)IOCSPrtEntry );
DefaultIOCSPut= INTVCS( 0x120, (char*)IOCSPutEntry );
DefaultPrint= INTVCS( 0xFF09, (char*)PrintEntry );
DefaultConCtrl= INTVCS( 0xFF23, (char*)ConCtrlEntry );
}else{
DefaultPut= INTVCS( 0xFF02, (char*)xPutEntry );
DefaultIOCSPrt= INTVCS( 0x121, (char*)xIOCSPrtEntry );
DefaultIOCSPut= INTVCS( 0x120, (char*)xIOCSPutEntry );
DefaultPrint= INTVCS( 0xFF09, (char*)xPrintEntry );
DefaultConCtrl= INTVCS( 0xFF23, (char*)xConCtrlEntry );
}
FCB= GETFCB( 1 );
/* OutSuper();*/
}
}
void
PutCVtQuit()
{
if( DefaultPut ){
/* InSuper();*/
INTVCS( 0xFF23, (char*)DefaultConCtrl );
INTVCS( 0x121, (char*)DefaultIOCSPrt );
INTVCS( 0x120, (char*)DefaultIOCSPut );
INTVCS( 0xFF09, (char*)DefaultPrint );
INTVCS( 0xFF02, (char*)DefaultPut );
DefaultPut= NULL;
/* OutSuper();*/
}
}
short threadflag;
int old_open_pr;
int
WindowLoadExec( exec, param, envptr, put )
unsigned char *exec, *param, *envptr;
void (*put)();
{
int n, exflag= ((int)exec) & 0x03000000;
struct COMLINE comline;
unsigned char buf[256];
extern int BGmode;
extern int ErrorEntry( void );
extern int DefaultErrorEntry ; /* 1993 Taka2 */
{
unsigned char *ptr,
*str= buf,
*dot= NULL;
for( ptr= exec ; *ptr ; ptr++ ){
*str++= (*ptr == '/' ? '\\' : *ptr);
if( *ptr == '.' )
dot= ptr;
}
if( dot && !n_fstrcmpi( ".win", dot ) )
exflag= 0x03000000;
for( *str++= ' ', ptr= param ; *str++= *ptr++ ;);
if( PATHCHK( buf, &comline, 0 ) < 0 )
return -2;
}
if( put ){
FCB= GETFCB( 1 );
PutCVtable[0]= put;
}
if( BGmode ){
extern void threadflagcall();
threadflag= FALSE;
old_open_pr= INTVCS( 0xfff8, (void*)threadflagcall );
}
if ( put == NULL ) {
INTVCS( 0x2E, (char*)DefaultErrorEntry ); /* 1993 Taka2 */
}
n= LOADEXEC( buf + exflag, &comline, envptr );
if ( put == NULL ) {
INTVCS( 0x2E, (char*)ErrorEntry ); /* 1993 Taka2 */
}
if( BGmode ){
INTVCS( 0xfff8, (void*)old_open_pr );
if( threadflag && put && n >= 0 && (n&0x1f)< 32 )
PutCVtable[ n & 0x1f ]= put;
}
return n;
}
unsigned char *
SearchPath( path, file )
unsigned char *path,
*file;
{
struct COMLINE comline;
unsigned char *ptr,
*str= path;
for( ptr= file ; *ptr ; ptr++ )
*str++= *ptr == '/' ? '\\' : *ptr;
*str= '\0';
if( PATHCHK( path, &comline, 0 ) < 0 )
return NULL;
return path;
}