tinyio.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 232 行

C
232
字号
/****************************************************************************
*
*                            Open Watcom Project
*
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Sybase Open Watcom
*    Public License version 1.0 (the 'License'). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at www.sybase.com/developer/opensource.
*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  Tiny I/O function wrappers.
*
****************************************************************************/


#include <dos.h>
#include "watcom.h"
#include "tinyio.h"
#include "dpmi.h"

/*
 * different pragma for fortran than in stddef.h to allow structures
 * to be returned in registers (namely the 4 byte ones returned by
 * TinyGetDate/TinyGetTime...)
 */
 #pragma aux fortran "^" parm routine reverse []\
   modify [ax bx cx dx es];

static unsigned short DTA=0;
extern unsigned short DPL;

void far fortran __nTinySetDTA( void far *a )
{
    long                rc;
    unsigned long       base;

    /*
     * get a DTA descriptor that will survive across the 16/32 bit
     * interface
     */
    if( DTA == 0 ) {
        rc = DPMIAllocateLDTDescriptors( 1 );
        if( rc <= 0 ) return;
        /*
         * set up a basic DTA descriptor
         */
        DTA = (unsigned short) rc;
        DPMISetSegmentLimit( DTA, sizeof(tiny_find_t) );
        DPMISetDescriptorAccessRights( DTA, DPL+ACCESS_DATA16 );
    }

    base = DPMIGetSegmentBaseAddress( FP_SEG( a ) );
    base += FP_OFF( a );
    DPMISetSegmentBaseAddress( DTA, base );
    _fTinySetDTA( MK_FP( DTA,0) );
}
tiny_ret_t far fortran __nTinyAccess( char far *pathname, unsigned pmode ){
    return( _fTinyAccess( pathname, pmode ));
}
tiny_ret_t far fortran __nTinyOpen( char far *name, open_attr mode ){
    return( _fTinyOpen( name, mode ));
}
tiny_ret_t far fortran __nTinyCreate( char far *name, create_attr attr ){
    return( _fTinyCreate( name, attr ));
}
tiny_ret_t far fortran __TinyClose( tiny_handle_t a ){
    return( _TinyClose( a ));
}
tiny_ret_t far fortran __nTinyWrite( tiny_handle_t a, void far *b, unsigned c ){
    return( _fTinyWrite( a, b, c ));
}
tiny_ret_t far fortran __nTinyRead( tiny_handle_t a, void far *b, unsigned c ){
    return( _fTinyRead( a, b, c ));
}
tiny_ret_t far fortran __TinySeek( tiny_handle_t a, unsigned long b, seek_info mode ){
    return( _TinySeek( a, b, mode ));
}
tiny_ret_t far fortran __nTinyDelete( char far *a ){
    return( _fTinyDelete( a ));
}
tiny_ret_t far fortran __nTinyRename( char far *old,char far *new){
    return( _fTinyRename( old,new));
}
tiny_ret_t far fortran __nTinyMakeDir( char far *name ){
    return( _fTinyMakeDir( name ));
}
tiny_ret_t far fortran __nTinyRemoveDir( char far *name ){
    return( _fTinyRemoveDir( name ));
}
tiny_ret_t far fortran __nTinyChangeDir( char far *name ){
    return( _fTinyChangeDir( name ));
}
tiny_ret_t far fortran __TinyDup( tiny_handle_t a ){
    return( _TinyDup( a ));
}
tiny_ret_t far fortran __TinyDup2( tiny_handle_t exist, tiny_handle_t alias ){
    return( _TinyDup2( exist, alias ));
}
tiny_ret_t far fortran __TinyAllocBlock( paras ){
    return( _TinyAllocBlock( paras ));
}
tiny_ret_t far fortran __TinyTestAllocBlock( paras ){
    return( _TinyTestAllocBlock( paras ));
}
unsigned far fortran __TinyMaxAlloc( void ){
    return( _TinyMaxAlloc());
}
tiny_ret_t far fortran __TinyFreeBlock( unsigned seg ){
    return( _TinyFreeBlock( seg ));
}
tiny_ret_t far fortran __TinySetBlock( unsigned paras, unsigned seg ){
    return( _TinySetBlock( paras, seg ));
}
unsigned far fortran __TinyMaxSet( unsigned seg ){
    return( _TinyMaxSet( seg ));
}
tiny_ret_t far fortran __nTinyGetCWDir( char far *buff, uint_8 drive ){
    return( _fTinyGetCWDir( buff, drive ));
}
tiny_ret_t far fortran __TinyGetDeviceInfo( tiny_handle_t dev ){
    return( _TinyGetDeviceInfo( dev ));
}
tiny_ret_t far fortran __TinySetDeviceInfo( tiny_handle_t dev, uint_8 info){
    return( _TinySetDeviceInfo( dev, info));
}
uint_8 far fortran __TinyGetCtrlBreak( void ){
    return( _TinyGetCtrlBreak( ));
}
void far fortran __TinySetCtrlBreak( uint_8 new_setting ){
    _TinySetCtrlBreak( new_setting );
}
void far fortran __TinyTerminateProcess( int ret_code ){
    _TinyTerminateProcess( ret_code );
}
tiny_date_t far fortran __TinyGetDate( void ){
    return( _TinyGetDate( ));
}
tiny_time_t far fortran __TinyGetTime( void ){
    return( _TinyGetTime( ));
}
uint_8 far fortran __TinyGetCurrDrive( void ){
    return( _TinyGetCurrDrive());
}
void far fortran __TinySetCurrDrive( uint_8 a ){
    _TinySetCurrDrive( a );
}
tiny_ret_t far fortran __nTinyFindFirst(char far *pattern,create_attr attr){
    return( _fTinyFindFirst(pattern,attr));
}
tiny_ret_t far fortran __TinyFindNext( void ){
    return( _TinyFindNext( ));
}
tiny_ret_t far fortran __TinyGetFileStamp( fd ){
    return( _TinyGetFileStamp( fd ));
}
#ifdef __OLD_TINYIO_
tiny_ret_t far fortran __TinySetFileStamp( tiny_handle_t fd, unsigned p_hms, unsigned p_ymd ){
    return( _TinySetFileStamp( fd, p_hms, p_ymd ));
}
#else
tiny_ret_t far fortran __TinySetFileStamp( tiny_handle_t fd, tiny_ftime_t hms, tiny_fdate_t ymd ){
    return( _TinySetFileStamp( fd, hms, ymd ));
}
#endif
tiny_ret_t far fortran __nTinyGetFileAttr( char far *file ){
    return( _fTinyGetFileAttr( file ));
}
tiny_ret_t far fortran __nTinySetFileAttr( char far *file, create_attr a ){
    return( _fTinySetFileAttr( file, a ));
}
void far fortran __TinySetIntr( uint_8 a, unsigned b){
    _TinySetIntr( a, b );
}
tiny_dos_version far fortran __TinyDOSVersion( void ){
    return( _TinyDOSVersion());
}
char far fortran __TinyGetCH( void ){
    return( _TinyGetCH());
}
char far fortran __TinyGetCHE( void ){
    return( _TinyGetCHE());
}
char far fortran __TinyGetSwitchChar( void ){
    return( _TinyGetSwitchChar());
}
void far fortran __TinySetSwitchChar( a ){
    _TinySetSwitchChar( a );
}
uint_32 far fortran __TinyFreeSpace( uint_8 a){
    return( _TinyFreeSpace( a ));
}
tiny_ret_t far fortran __nTinyGetCountry( tiny_country_info far *a ){
    return( _fTinyGetCountry( a ));
}
tiny_ret_t far fortran __TinySetCountry( uint_16 a ){
    return( _TinySetCountry( a ));
}
tiny_ret_t far fortran __nTinyFCBPrsFname( char far *str, tiny_fcb_t far *fcb, uint_8 ctrl ){
    return( _fTinyFCBPrsFname( str, fcb, ctrl ));
}
tiny_ret_t far fortran __nTinyFCBDeleteFile( tiny_fcb_t far *fcb ){
    return( _fTinyFCBDeleteFile( fcb ));
}
tiny_ret_t far fortran __TinyLock(tiny_handle_t a, unsigned long start, unsigned long length ){
    return( _TinyLock(a, start, length ));
}
tiny_ret_t far fortran __TinyUnlock( tiny_handle_t a, unsigned long start, unsigned long length ){
    return( _TinyUnlock( a, start, length ) );
}
void far fortran __TinySetVect( uint_8 a, void far *func ){
    _TinySetVect( a, func );
}
void far * far fortran __TinyGetVect( uint_8 a ) {
    return( _TinyGetVect( a) );
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?