extern void ProcCapture( void ) { cmd_list *cmds; const char *start; size_t len; const char *old; char *p; char *end; if( !ScanItem( false, &start, &len ) ) Error( ERR_NONE, LIT_ENG( ERR_WANT_COMMAND_LIST ) ); ReqEOC(); cmds = AllocCmdList( start, len ); end = FileName + sizeof( FileName ); p = FileName + PREFIX_LEN; p = CnvULongHex( TaskId, p, end - p ); *p++ = RemFile.ext_separator; p = CnvULongDec( FileNum++, p, end - p ); *p = NULLCHAR; old = ReScan( FileName+PREFIX_LEN ); StdOutNew(); ReScan( old ); cmds->use++; CaptureOk = true; PushInpStack( cmds, DoneCapture, false ); TypeInpStack( INP_CAPTURED ); FreeCmdList( cmds ); }
static int InvGetKey( invokes *inv ) { int count; char_ring *next; int ch; unsigned parm; unsigned save; static char inv_num[5]; for( ;; ) { if( inv->redirect != NULL ) { ch = *(inv->redirect); if( ch == NULLCHAR ) { inv->redirect = NULL; } else { inv->redirect++; return( ch ); } } save = inv->in_off; ch = InvRead( inv, &save ); if( ch != PARM_START ) return( ch ); parm = InvRead( inv, &save ); if( parm < '0' || parm > '9' ) break; ch = InvRead( inv, &save ); if( ch != PARM_END ) break; count = parm - '0'; if( count == 0 ) { CnvULongDec( inv->number, inv_num, sizeof( inv_num ) ); inv->redirect = inv_num; } else { for( next = inv->prmlst; next != NULL && count > 0 ; next = next->next ) { --count; } if( next != NULL ) { inv->redirect = next->name; } } } inv->in_off = save + 1; return( PARM_START ); }
char *LineAddr( address *addr, char *buff, size_t buff_len ) { mod_handle mod; char *end; DIPHDL( cue, line ); AddrFloat( addr ); if( DeAliasAddrMod( *addr, &mod ) == SR_NONE ) return( NULL ); if( DeAliasAddrCue( mod, *addr, line ) == SR_NONE ) return( NULL ); end = buff + buff_len; buff += DIPModName( mod, buff, buff_len - 1 ); *buff++ = '@'; buff = CnvULongDec( DIPCueLine( line ), buff, end - buff ); *buff = NULLCHAR; return( buff ); }
void RadixConf( void ) { *CnvULongDec( DefRadix, TxtBuff ) = NULLCHAR; ConfigLine( TxtBuff ); }
char *FmtStr( char *buff, const char *fmt, va_list args ) { char *ptr; unsigned len; long val; address addr; char *res; sym_handle *sym; char save_buff[UTIL_LEN + 1]; while( *fmt != NULLCHAR ) { if( *fmt != '%' ) { *buff = *fmt; ++buff; } else { ++fmt; switch( *fmt ) { case 'c': val = va_arg( args, int ); *buff++ = val; break; case 's': ptr = va_arg( args, char * ); buff = StrCopy( ptr, buff ); break; case 't': ptr = va_arg( args, char * ); len = va_arg( args, unsigned ); memcpy( buff, ptr, len ); buff += len; break; case 'l': addr = va_arg( args, address ); buff = StrAddr( &addr, buff, TXT_LEN ); // nyi - overflow? res = LineAddr( &addr, save_buff, sizeof( save_buff ) ); if( res != NULL ) { *buff++ = '('; buff = StrCopy( save_buff, buff ); *buff++ = ')'; } break; case 'A': addr = va_arg( args, address ); buff = UniqStrAddr( &addr, buff, TXT_LEN ); // nyi - overflow? break; case 'a': addr = va_arg( args, address ); buff = StrAddr( &addr, buff, TXT_LEN ); // nyi - overflow? break; case 'p': addr = va_arg( args, address ); buff = AddrToIOString( &addr, buff, TXT_LEN ); // nyi - overflow? break; case 'e': val = va_arg( args, unsigned ); buff = SysErrMsg( val, buff ); break; case 'U': buff = CnvULongDec( va_arg( args, unsigned long), buff, TXT_LEN ); break; case 'd': val = va_arg( args, int ); buff = CnvLongDec( val, buff, TXT_LEN ); break; case 'u': val = va_arg( args, unsigned ); buff = CnvULongDec( val, buff, TXT_LEN ); break; case '%': *buff++ = '%'; break; case 'o': val = va_arg( args, long ); if( val < 0 ) { *buff++ = '-'; val = -val; } else { *buff++ = '+'; } buff = AddHexSpec( buff ); buff = CnvULongHex( val, buff, TXT_LEN ); break; case 'S': sym = va_arg( args, sym_handle * ); buff += SymName( sym, NULL, SN_SOURCE, buff, TXT_LEN ); break; } } ++fmt; } *buff = NULLCHAR; return( buff ); }