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) ); }
unsigned ReqSet_watch() { watch *curr; set_watch_req *acc; set_watch_ret *ret; int i; int needed; _DBG1(( "AccSetWatch\n" )); acc = GetInPtr( 0 ); ret = GetOutPtr( 0 ); ret->multiplier = 5000; ret->err = 0; curr = WatchPoints + WatchCount; curr->addr.segment = acc->watch_addr.segment; curr->addr.offset = acc->watch_addr.offset; curr->linear = DPMIGetSegmentBaseAddress( curr->addr.segment ) + curr->addr.offset; curr->len = acc->size; curr->dregs = ( curr->linear & (curr->len-1) ) ? 2 : 1; curr->handle = -1; curr->handle2 = -1; curr->value = 0; ReadMemory( (addr48_ptr *)&acc->watch_addr, (byte far *)&curr->value, curr->len ); ++WatchCount; needed = 0; for( i = 0; i < WatchCount; ++i ) { needed += WatchPoints[ i ].dregs; } if( needed <= 4 ) ret->multiplier |= USING_DEBUG_REG; return( sizeof( *ret ) ); }
char *DOSEnvFind( char *src ) { #ifdef __OSI__ return( getenv( src ) ); #else char *env; char *p; env = (char *)DPMIGetSegmentBaseAddress( *(addr_seg *) ((unsigned_8 *)DPMIGetSegmentBaseAddress( _psp )+PSP_ENV_VARS_OFF)); do { p = src; do { if( *p == '\0' && *env == '=' ) return( env + 1 ); } while( *env++ == *p++ ); while( *env++ != '\0' ) ; } while( *env != '\0' ); return( NULL ); #endif }
static char *ReadInTrap( FILE *fp ) { dos_exe_header hdr; memptr relocbuff[NUM_BUFF_RELOCS]; unsigned relocnb; unsigned imagesize; unsigned hdrsize; if( DIGLoader( Read )( fp, &hdr, sizeof( hdr ) ) ) { return( TC_ERR_CANT_LOAD_TRAP ); } if( hdr.signature != DOS_SIGNATURE ) { return( TC_ERR_BAD_TRAP_FILE ); } hdrsize = hdr.hdr_size * 16; imagesize = ( hdr.file_size * 0x200 ) - (-hdr.mod_size & 0x1ff) - hdrsize; TrapMem = DPMIAllocateDOSMemoryBlock( _NBPARAS( imagesize ) + hdr.min_16 ); if( TrapMem.pm == 0 ) { return( TC_ERR_OUT_OF_DOS_MEMORY ); } DIGLoader( Seek )( fp, hdrsize, DIG_ORG ); if( DIGLoader( Read )( fp, (void *)DPMIGetSegmentBaseAddress( TrapMem.pm ), imagesize ) != imagesize ) { return( TC_ERR_CANT_LOAD_TRAP ); } DIGLoader( Seek )( fp, hdr.reloc_offset, DIG_ORG ); for( relocnb = NUM_BUFF_RELOCS; hdr.num_relocs > 0; --hdr.num_relocs, ++relocnb ) { if( relocnb >= NUM_BUFF_RELOCS ) { if( DIGLoader( Read )( fp, relocbuff, sizeof( memptr ) * NUM_BUFF_RELOCS ) ) { return( TC_ERR_CANT_LOAD_TRAP ); } relocnb = 0; } *(addr_seg __far *)EXTENDER_RM2PM( TrapMem.rm + relocbuff[relocnb].s.segment, relocbuff[relocnb].s.offset ) += TrapMem.rm; } return( NULL ); }