Esempio n. 1
0
_WCRTLINK unsigned _dos_findnext( struct find_t *buf ) {
/*****************************************************/

#if defined(__OS2_286__)
    if( _RWD_osmode == OS2_MODE ) {        /* protected mode */
#endif
        APIRET  rc;

        FF_BUFFER       dir_buff;
        OS_UINT         searchcount = 1;

        rc = DosFindNext( FIND_HANDLE_OF( buf ), (PVOID)&dir_buff,
                    sizeof( dir_buff ), &searchcount );
        if( rc != 0 ) {
            return( __set_errno_dos_reterr( rc ) );
        }

        copydir( buf, &dir_buff );

#if defined(__OS2_286__)
    } else {            /* real mode */
        tiny_ret_t      rc;
        void __far *    old_dta;

        old_dta = TinyFarChangeDTA( buf );  /* set our DTA */
        rc = TinyFindNext();
        TinyFarSetDTA( old_dta );           /* restore DTA */
        if( TINY_ERROR( rc ) ) {
            return( __set_errno_dos_reterr( TINY_INFO( rc ) ) );
        }
    }
#endif
    return( 0 );
}
Esempio n. 2
0
_WCRTLINK unsigned _dos_allocmem( unsigned size, mem_id *p_mem )
// Note: size is in paragraphs of 16 bytes
{
    APIRET      rc;

#if defined(__386__) || defined(__PPC__)
    /*
        Note:   _dos_allocmem() needs better documentation for 32-bit
                since mem is an offset instead a selector value.
    */
    void        *mem;

    rc = DosAllocMem( &mem, size << 4, PAG_COMMIT | PAG_READ | PAG_WRITE );
#elif defined( _M_I86 )
    SEL         mem;
    USHORT      number_segments, remaining_bytes;

    number_segments = size >> 12;       // Number of 64k segments
    remaining_bytes = (size << 4) & 0xFFFF;     // remainder, < 64k
    rc = DosAllocHuge( number_segments, remaining_bytes, &mem, 0, 0 );
#else
    #error platform not supported
#endif
    *p_mem = mem;
    if( rc ) {
        return( __set_errno_dos_reterr( rc ) );
    }
    return( 0 );
}
Esempio n. 3
0
static unsigned _dos_getfileattr_lfn( const char *path, unsigned *attrib )
/************************************************************************/
{
  #ifdef _M_I86
    return( __dos_getfileattr_lfn( path, attrib ) );
  #else
    call_struct     dpmi_rm;

    strcpy( RM_TB_PARM1_LINEAR, path );
    memset( &dpmi_rm, 0, sizeof( dpmi_rm ) );
    dpmi_rm.ds  = RM_TB_PARM1_SEGM;
    dpmi_rm.edx = RM_TB_PARM1_OFFS;
    dpmi_rm.ecx = 0;
    dpmi_rm.ebx = 0;
    dpmi_rm.eax = 0x7143;
    dpmi_rm.flags = 1;
    if( __dpmi_dos_call( &dpmi_rm ) ) {
        return( -1 );
    }
    if( dpmi_rm.flags & 1 ) {
        return( __set_errno_dos_reterr( (unsigned short)dpmi_rm.eax ) );
    }
    *attrib = dpmi_rm.ecx;
    return( 0 );
  #endif
}
Esempio n. 4
0
_WCRTLINK unsigned _dos_findfirst( const char *path, unsigned attr, struct find_t *buf )
{
    HANDLE              h;
    int                 error;
    WIN32_FIND_DATA     ffb;

    h = FindFirstFile( (LPTSTR)path, &ffb );

    if( h == (HANDLE)-1 ) {
        HANDLE_OF( buf ) = BAD_HANDLE;
        return( __set_errno_nt_reterr() );
    }
//  if( attr == _A_NORMAL ) {
//      attr = ~(_A_SUBDIR|_A_VOLID);
//  }
    if( !__NTFindNextFileWithAttr( h, attr, &ffb ) ) {
        error = GetLastError();
        HANDLE_OF( buf ) = BAD_HANDLE;
        FindClose( h );
        return( __set_errno_dos_reterr( error ) );
    }
    HANDLE_OF( buf ) = h;
    ATTR_OF( buf ) = attr;
    __GetNTDirInfo( (struct dirent *) buf, &ffb );

    return( 0 );
}
Esempio n. 5
0
_WCRTLINK unsigned _dos_open( const char *name, unsigned mode, int *handle )
{
    APIRET      rc;
    OS_UINT     rwmode, actiontaken, openmode;
    HFILE       fhandle;
    int         share;
    unsigned    iomode_flags;

    while( *name == ' ' ) ++name;
    rwmode = mode & OPENMODE_ACCESS_MASK;
    if( rwmode == OPENMODE_ACCESS_WRONLY
#if defined(__OS2_286__)
        && !_RWD_osmode
        /* Can't open WRONLY file in bound application under DOS */
#endif
        ) {
        rwmode = OPENMODE_ACCESS_RDWR;
    }
    share = mode & OPENMODE_SHARE_MASK;
    if( share == OPENMODE_DENY_COMPAT ) {
        share = OPENMODE_DENY_NONE;
    }
    openmode = share+rwmode;
    rc = DosOpen( (PSZ)name, &fhandle, &actiontaken, 0ul,
        _A_NORMAL, OPENFLAG_OPEN_IF_EXISTS, openmode, 0ul );
    if( rc ) {
        return( __set_errno_dos_reterr( rc ) );
    }
    *handle = fhandle;
    if( rwmode == O_RDWR ) iomode_flags = _READ | _WRITE;
    if( rwmode == O_RDONLY) iomode_flags = _READ;
    if( rwmode == O_WRONLY) iomode_flags = _WRITE;
    __SetIOMode( fhandle, iomode_flags );
    return( 0 );
}
Esempio n. 6
0
_WCRTLINK unsigned _dos_write( int handle, void const _WCI86FAR *buffer, unsigned count, unsigned *bytes )
{
    APIRET  rc;

    rc = DosWrite( handle, (PVOID)buffer, count, (OS_PUINT)bytes );
    if( rc ) {
        return( __set_errno_dos_reterr( rc ) );
    }
    return( 0 );
}
Esempio n. 7
0
unsigned _dos_commit( int handle )
{
    APIRET  rc;

    rc = DosBufReset( handle );
    if( rc ) {
        return( __set_errno_dos_reterr( rc ) );
    }
    return( 0 );
}
Esempio n. 8
0
unsigned _dos_close( int handle )
{
    APIRET  rc;

    __SetIOMode_nogrow( handle, 0 );
    rc = DosClose( handle );
    if( rc ) {
        return( __set_errno_dos_reterr( rc ) );
    }
    return( 0 );
}
Esempio n. 9
0
_WCRTLINK unsigned _dos_getfileattr( const char *path, unsigned *attribute )
/**************************************************************************/
{
    FILESTATUS3 fs;
    APIRET      rc;

    rc = DosQueryPathInfo( (PSZ)path, FIL_STANDARD, &fs, sizeof( fs ) );
    if( rc != 0 ) {
        return( __set_errno_dos_reterr( rc ) );
    }
    *attribute = fs.attrFile;
    return( 0 );
}
Esempio n. 10
0
_WCRTLINK unsigned _dos_findfirst( const char *path, unsigned attr,
                                  struct find_t *buf ) {
/******************************************************/

#if defined(__OS2_286__)
    if( _RWD_osmode == OS2_MODE ) {
#endif
        APIRET      rc;
        FF_BUFFER   dir_buff;
        HDIR        handle = BAD_HANDLE;
        OS_UINT     searchcount;

        searchcount = 1;        /* only one at a time */
        rc = DosFindFirst( (PSZ)path, (PHFILE)&handle, attr,
                (PVOID)&dir_buff, sizeof( dir_buff ), &searchcount, FF_LEVEL );

        if( rc != 0 && rc != ERROR_EAS_DIDNT_FIT ) {
            FIND_HANDLE_OF( buf ) = BAD_HANDLE;
            return( __set_errno_dos_reterr( rc ) );
        }
        FIND_HANDLE_OF( buf ) = handle;
        copydir( buf, &dir_buff );          /* copy in other fields */

#if defined(__OS2_286__)
    } else {                                /* real mode */
        tiny_ret_t      rc;
        void __far *    old_dta;

        old_dta = TinyFarChangeDTA( buf );  /* set our DTA */
        rc = TinyFindFirst( path, attr );
        TinyFarSetDTA( old_dta );           /* restore DTA */
        if( TINY_ERROR( rc ) ) {
            return( __set_errno_dos_reterr( TINY_INFO( rc ) ) );
        }
    }
#endif
    return( 0 );
}
Esempio n. 11
0
_WCRTLINK unsigned _dos_freemem( mem_id mem )
{
#if defined(__386__) || defined(__PPC__)
    APIRET      rc;
    rc = DosFreeMem( mem );
    if( rc ) {
        return( __set_errno_dos_reterr( rc ) );
    }
    return( 0 );
#elif defined( _M_I86 )
    // defined inside heap
    return( __FreeSeg( mem ) );
#else
    #error platform not supported
#endif
}
Esempio n. 12
0
_WCRTLINK unsigned _dos_open( const char *path, unsigned mode, int *handle )
/**************************************************************************/
{
#ifdef __WATCOM_LFN__
    tiny_ret_t  rc = 0;

    if( _RWD_uselfn && TINY_OK( rc = __dos_open_lfn( path, mode ) ) ) {
        *handle = TINY_INFO( rc );
        return( 0 );
    }
    if( IS_LFN_ERROR( rc ) ) {
        return( __set_errno_dos_reterr( TINY_INFO( rc ) ) );
    }
#endif
    return( __dos_open_sfn_err( path, mode, handle ) );
}
Esempio n. 13
0
_WCRTLINK unsigned _dos_findclose( struct find_t *fdta )
/******************************************************/
{
#if defined( __WATCOM_LFN__ )
    tiny_ret_t      rc;

    if( IS_LFN( fdta ) ) {
        if( TINY_OK( rc = _dos_find_close_lfn( LFN_HANDLE_OF( fdta ) ) ) )
            return( 0 );
        return( __set_errno_dos_reterr( TINY_INFO( rc ) ) );
    }
#endif
#ifdef __OSI__
    return( __dos_find_close_dta( fdta ) );
#else
    return( 0 );
#endif
}
Esempio n. 14
0
_WCRTLINK unsigned _dos_findnext( struct find_t *fdta )
/*****************************************************/
{
#ifdef __WATCOM_LFN__
    lfnfind_t       lfndta;
    tiny_ret_t      rc;

    if( IS_LFN( fdta ) ) {
        rc = _dos_find_next_lfn( LFN_HANDLE_OF( fdta ), &lfndta );
        if( TINY_OK( rc ) ) {
            convert_to_find_t( fdta, &lfndta );
            return( 0 );
        }
        return( __set_errno_dos_reterr( TINY_INFO( rc ) ) );
    }
#endif
    return( __dos_find_next_dta( fdta ) );
}
Esempio n. 15
0
_WCRTLINK unsigned _dos_setfileattr( const char *path, unsigned attribute )
{
    APIRET  rc;

#if defined(__WARP__)
    FILESTATUS3     fs;

    rc = DosQueryPathInfo( (PSZ)path, FIL_STANDARD, &fs, sizeof( fs ) );
    if( rc == 0 ) {
        fs.attrFile = attribute;
        rc = DosSetPathInfo( (PSZ)path, FIL_STANDARD, &fs, sizeof( fs ), 0 );
    }
#else
    rc = DosSetFileMode( (PSZ)path, attribute, 0ul );
#endif
    if( rc ) {
        return( __set_errno_dos_reterr( rc ) );
    }
    return( 0 );
}
Esempio n. 16
0
_WCRTLINK unsigned _dos_open( const char *name, unsigned mode, int *posix_handle )
{
    HANDLE      handle;
    unsigned    rwmode;
    DWORD       share_mode;
    DWORD       desired_access, os_attr;
    unsigned    iomode_flags;
    int         hid;

    // First try to get the required slot.
    // No point in creating a file only to not use it.  JBS 99/11/01
    hid = __allocPOSIXHandle( DUMMY_HANDLE );
    if( hid == -1 ) {
        return( __set_errno_dos_reterr( ERROR_NOT_ENOUGH_MEMORY ) );
    }

    rwmode = mode & OPENMODE_ACCESS_MASK;

    __GetNTAccessAttr( rwmode, &desired_access, &os_attr );
    __GetNTShareAttr( mode & (OPENMODE_SHARE_MASK|OPENMODE_ACCESS_MASK),
                      &share_mode );
    handle = CreateFile( (LPTSTR) name, desired_access, share_mode, 0,
                        OPEN_EXISTING, os_attr, NULL );
    if( handle == (HANDLE)-1 ) {
        __freePOSIXHandle( hid );
        return( __set_errno_nt_reterr() );
    }
    // Now use the slot we got.
    __setOSHandle( hid, handle );   // JBS 99/11/01

    *posix_handle = hid;
    iomode_flags = 0;
    if( rwmode == O_RDWR )
        iomode_flags = _READ | _WRITE;
    if( rwmode == O_RDONLY )
        iomode_flags = _READ;
    if( rwmode == O_WRONLY )
        iomode_flags = _WRITE;
    __SetIOMode( hid, iomode_flags );
    return( 0 );
}
Esempio n. 17
0
_WCRTLINK unsigned _dos_findclose( struct find_t *buf ) {
/******************************************************/

    APIRET      rc;

#if defined(__OS2_286__)
    if( _RWD_osmode == OS2_MODE ) {        /* protected mode */
#endif
        if( FIND_HANDLE_OF( buf ) != BAD_HANDLE ) {
            rc = DosFindClose( FIND_HANDLE_OF( buf ) );
            if( rc != 0 ) {
                return( __set_errno_dos_reterr( rc ) );
            }
        }
#if defined(__OS2_286__)
    } else {
        buf = buf;
    }
#endif
    return( 0 );
}
Esempio n. 18
0
_WCRTLINK unsigned _dos_findfirst( const char *path, unsigned attrib,
                                                           struct find_t *fdta )
/******************************************************************************/
{
#ifdef __WATCOM_LFN__
    lfnfind_t       lfndta;
    tiny_ret_t      rc = 0;

    LFN_SIGN_OF( fdta )   = 0;
    LFN_HANDLE_OF( fdta ) = 0;
    if( _RWD_uselfn && TINY_OK( rc = _dos_find_first_lfn( path, attrib, &lfndta ) ) ) {
        convert_to_find_t( fdta, &lfndta );
        LFN_SIGN_OF( fdta )   = _LFN_SIGN;
        LFN_HANDLE_OF( fdta ) = TINY_INFO( rc );
        return( 0 );
    }
    if( IS_LFN_ERROR( rc ) ) {
        return( __set_errno_dos_reterr( TINY_INFO( rc ) ) );
    }
#endif
    return( __dos_find_first_dta( path, attrib, fdta ) );
}
Esempio n. 19
0
_WCRTLINK unsigned _dos_creat( const char *name, unsigned attribute, int *handle )
{
    APIRET  rc;
    OS_UINT actiontaken;
    HFILE   fhandle;

    while( *name == ' ' ) ++name;
    rc = DosOpen( (PSZ)name,
                     &fhandle,
                     &actiontaken,
                     0ul,
                     attribute,
                     OPENFLAG_REPLACE_IF_EXISTS |
                     OPENFLAG_CREATE_IF_NOT_EXISTS,
                     OPENMODE_ACCESS_RDWR | OPENMODE_DENY_NONE,
                     0ul );
    if( rc ) {
        return( __set_errno_dos_reterr( rc ) );
    }
    *handle = fhandle;
    __SetIOMode( fhandle, _READ | _WRITE );
    return( 0 );
}
Esempio n. 20
0
static unsigned _mkdir_lfn( const char *path )
/********************************************/
{
#ifdef _M_I86
    return( __mkdir_lfn( path ) );
#else
    call_struct     dpmi_rm;

    strcpy( RM_TB_PARM1_LINEAR, path );
    memset( &dpmi_rm, 0, sizeof( dpmi_rm ) );
    dpmi_rm.ds  = RM_TB_PARM1_SEGM;
    dpmi_rm.edx = RM_TB_PARM1_OFFS;
    dpmi_rm.eax = 0x7139;
    dpmi_rm.flags = 1;
    if( __dpmi_dos_call( &dpmi_rm ) ) {
        return( -1 );
    }
    if( dpmi_rm.flags & 1 ) {
        return( __set_errno_dos_reterr( (unsigned short)dpmi_rm.eax ) );
    }
    return( 0 );
#endif
}
Esempio n. 21
0
static unsigned _unlink_lfn( const char *filename )
/*************************************************/
{
#ifdef _M_I86
    return( __unlink_lfn( filename ) );
#else
    call_struct     dpmi_rm;

    strcpy( RM_TB_PARM1_LINEAR, filename );
    memset( &dpmi_rm, 0, sizeof( dpmi_rm ) );
    dpmi_rm.ds  = RM_TB_PARM1_SEGM;
    dpmi_rm.edx = RM_TB_PARM1_OFFS;
    dpmi_rm.esi = 0;
    dpmi_rm.eax = 0x7141;
    dpmi_rm.flags = 1;
    if( __dpmi_dos_call( &dpmi_rm ) ) {
        return( -1 );
    }
    if( dpmi_rm.flags & 1 ) {
        return( __set_errno_dos_reterr( (unsigned short)dpmi_rm.eax ) );
    }
    return( 0 );
#endif
}