Exemplo n.º 1
0
static void DebugThread( void *Param )
{
    int CurrModuleHandle;
    int WaitHandle;
    int thread;
    struct TDebug *obj = (struct TDebug *)Param;

    obj->FInstalled = TRUE;

    CurrModuleHandle = RdosGetModuleHandle();
    SelfKey = RdosGetModuleFocusKey( CurrModuleHandle );    
    if ( SelfKey != RdosGetFocus() )
        SelfKey = 0;
        
    RdosWaitMilli( 250 );

    obj->FHandle = RdosSpawnDebug( obj->FProgram, obj->FParam, obj->FStartDir, 0, 0, &thread);
        
    RdosWaitMilli( 250 );

    if( obj->FHandle ) {
        WaitHandle = RdosCreateWait();
        RdosAddWaitForDebugEvent( WaitHandle, obj->FHandle, obj );
        
        while( obj->FInstalled )
            if( RdosWaitForever( WaitHandle ) )
                SignalDebugData( obj );

        RdosCloseWait( WaitHandle );
    } else
        obj->FInstalled = FALSE;
}
Exemplo n.º 2
0
void RemoteUnLink( void )
{
#ifdef SERVER

  #ifdef __RDOS__
    if( wait_handle ) {
        RdosCloseWait( wait_handle );
        wait_handle = 0;
    }
    if( listen_handle ) {
        RdosCloseTcpListen( listen_handle );
        listen_handle = 0;
    }
  #else
    soclose( control_socket );
  #endif
#else
    Terminate();
#endif

#if defined(__NT__) || defined(__WINDOWS__)
    WSACleanup();
#elif defined(__DOS__)
    sock_exit();
#endif
}
Exemplo n.º 3
0
void intern finikeyboard( void )
{
    if( KeyInstalled ) {
        if( !MouseInstalled ) {
            RdosCloseWait( WaitHandle );
            WaitHandle = 0;
        }
    }
    KeyInstalled = FALSE;
}
Exemplo n.º 4
0
void FreeDebug( struct TDebug *obj )
{
    free( obj->FProgram );
    free( obj->FParam );
    free( obj->FStartDir );

    RdosCloseWait( obj->UserWait );
    RdosFreeSignal( obj->UserSignal );
    RdosDeleteSection( obj->FSection );
}
Exemplo n.º 5
0
void UIAPI finimouse( void )
{
    if( MouseInstalled ) {
        uioffmouse();

        if( !KeyInstalled ) {
            RdosCloseWait( WaitHandle );
            WaitHandle = 0;
        }
        MouseInstalled = false;
    }
}
Exemplo n.º 6
0
void intern finimouse( void )
{
    if( MouseInstalled ) {
        uioffmouse();

        if( !KeyInstalled ) {
            RdosCloseWait( WaitHandle );
            WaitHandle = 0;
        }
        MouseInstalled = FALSE;
    }
}
Exemplo n.º 7
0
int __CBeginThread( thread_fn *start_addr, int prio, const char *thread_name,
                         unsigned stack_size, void *arglist )
/************************************************************/
{
    thread_args *td;
    int         th;
    int         wait_handle;

    if( __TlsIndex == NO_INDEX ) {
        if( !__RdosThreadInit() )
            return( -1L );
        __InitMultipleThread();
    }

    td = malloc( sizeof( *td ) );
    if( td == NULL ) {
        _RWD_errno = ENOMEM;
        return( -1L );
    }

    stack_size = __ROUND_UP_SIZE_4K( stack_size );

    wait_handle = RdosCreateWait();

    td->rtn = start_addr;
    td->argument = arglist;
    td->signal = RdosCreateSignal();
    RdosResetSignal( td->signal );
    RdosAddWaitForSignal( wait_handle, td->signal, 0 );

    __create_thread(begin_thread_helper, prio, thread_name, td, stack_size);

    RdosWaitForever( wait_handle );
    RdosFreeSignal( td->signal );
    RdosCloseWait( wait_handle );
    th = td->tid;
    free( td );

    return( th );
}
Exemplo n.º 8
0
int _dospawn( int mode, CHAR_TYPE *pgmname, CHAR_TYPE *cmdline,
                                  CHAR_TYPE *envpar, 
                                  const CHAR_TYPE * const argv[] )
{
    int tid;
    int handle;
    int wait;
    int rc = -1;
    int fh;
    int len;
    char *p;
    char *drive;
    char *dir;
    char *fname;
    char *ext;
    char *envdata;
    char *envp;
    char *ep;
    char *options;
    int ok;

    options = __CreateInheritString();

    __F_NAME(__ccmdline,__wccmdline)( pgmname, argv, cmdline, 0 );

    ok = 0;

    len = strlen( pgmname ) + 7 + _MAX_PATH2;
    p = lib_malloc( len );

    _splitpath2( pgmname, p + (len-_MAX_PATH2),
                 &drive, &dir, &fname, &ext );

    _makepath( p, drive, dir, fname, ext );
    fh = RdosOpenFile( p, 0 );
    if( fh == 0 ) {
        if( strlen( drive ) == 0 && strlen( dir ) == 0 ) {
            envdata = getenv( "PATH" );
            if( envdata ) {
                envp = envdata;
                while( envp && !ok) {
                    ep = strchr( envp, ';' );
                    if( ep ) {
                        *ep = 0;
                        ep++;
                    }
                    _makepath( p, "", envp, fname, ext );
                    fh = RdosOpenFile( pgmname, 0 );
                    if( fh ) {
                        ok = 1;
                        RdosCloseFile( fh );
                    }
                    envp = ep;
                }                
            }
        }
    } else {
        RdosCloseFile( fh );    
        ok = 1;
    }

    if( ok ) {
        handle = RdosSpawn( pgmname, cmdline, 0, envpar, options, &tid );

        if( !handle )
            ok = 0;
    }

    if( ok ) {
        if( mode == P_WAIT ) {
            wait = RdosCreateWait();
            RdosAddWaitForProcessEnd( wait, handle, 0 );
            RdosWaitForever( wait );
            rc = RdosGetProcessExitCode( handle );
            RdosCloseWait( wait );
        } 
        else
            rc = tid;
            
        RdosFreeProcessHandle( handle );                        
    }

    lib_free( options );
    lib_free( p );

    return( rc );
}