static char *fileName( // get name of SRCFILE SRCFILE src ) // - source file { char *fname; if( CompFlags.error_use_full ) { fname = SrcFileFullName( src ); } else { fname = SrcFileName( src ); } return( fname ); }
void CmdLnCtxInfo( // PRINT CONTEXT INFO void ) { CTX_CL* entry; // - current entry VBUF buf; // - buffer VbufInit( &buf ); for( entry = VstkTop( &cmdLnContexts ) ; entry != NULL ; entry = VstkNext( &cmdLnContexts, entry ) ) { VbufRewind( &buf ); switch( entry->base.ctx_type ) { case CTX_CLTYPE_ENV : VbufConcChr( &buf, '@' ); VbufConcStr( &buf, entry->env.var ); break; case CTX_CLTYPE_FC : VbufConcStr( &buf, "batch file of commands, line " ); VbufConcDecimal( &buf, CompInfo.fc_file_line ); break; case CTX_CLTYPE_PGM : VbufConcStr( &buf, "command line" ); break; case CTX_CLTYPE_FILE : VbufConcStr( &buf, SrcFileFullName( entry->file.source ) ); break; DbgDefault( "bad command-line context" ); } if( entry->base.sw_ptr != NULL ) { size_t size; char const * not_used; char const* old = CmdScanAddr(); CmdScanInit( entry->base.sw_ptr ); CmdScanChar(); size = CmdScanOption( ¬_used ) + 1; CmdScanInit( old ); VbufConcStr( &buf, ", switch: " ); for( old = entry->base.sw_ptr; size > 0; ++old, --size ) { VbufConcChr( &buf, *old ); } } InfMsgPtr( INF_SWITCH, VbufString( &buf ) ); } VbufFree( &buf ); }
void DumpCgFront( // DUMP GENERATED CODE const char *prefix, // - name added to print line DISK_ADDR disk_blk, // - disk block DISK_OFFSET offset, // - disk offset void *instruction ) // - intermediate code { CGINTER *ins; // - instruction char *opcode; // - opcode unsigned uvalue; // - value with opcode VBUF vbuf; ins = instruction; opcode = DbgIcOpcode( ins->opcode ); if( ins->opcode == IC_EOF ) { uvalue = 0; } else { uvalue = ins->value.uvalue; } switch( optypes[ ins->opcode ] ) { case DBG_OPCODE_SYM : printf( F_NAME " " F_BUF_FMT " " F_INSTR " " F_HEX_4 " " F_NAME F_EOL , prefix , disk_blk, offset , opcode , uvalue , DbgSymNameFull( ins->value.pvalue, &vbuf ) ); VbufFree( &vbuf ); break; case DBG_OPCODE_TYP : { VBUF fmt_prefix, fmt_suffix; FormatType( ins->value.pvalue, &fmt_prefix, &fmt_suffix ); printf( F_NAME " " F_BUF_FMT " " F_INSTR " " F_HEX_4 " %s<id>%s" F_EOL , prefix , disk_blk, offset , opcode , uvalue , VbufString( &fmt_prefix ) , VbufString( &fmt_suffix ) ); VbufFree( &fmt_prefix ); VbufFree( &fmt_suffix ); } break; case DBG_OPCODE_NUL : printf( F_NAME " " F_BUF_FMT " " F_INSTR F_EOL , prefix , disk_blk, offset , opcode ); break; case DBG_OPCODE_SRC : { printf( F_EOL F_NAME " " F_BUF_FMT " " F_INSTR " " F_NAME F_EOL , prefix , disk_blk, offset , opcode , SrcFileFullName( ins->value.pvalue ) ); } break; case DBG_OPCODE_SCP : printf( F_NAME " " F_BUF_FMT " " F_INSTR " " "scope: " F_HEX F_EOL , prefix , disk_blk, offset , opcode , uvalue ); break; case DBG_OPCODE_STR : case DBG_OPCODE_CON : case DBG_OPCODE_BIN : switch( ins->opcode ) { case IC_OPR_BINARY : case IC_OPR_UNARY : printf( F_NAME " " F_BUF_FMT " " F_INSTR " " F_NAME F_EOL , prefix , disk_blk, offset , opcode , DbgOperator( ins->value.uvalue ) ); break; case IC_DBG_LINE : printf( F_NAME " " F_BUF_FMT " " F_INSTR " " F_DECIMAL F_EOL F_EOL , prefix , disk_blk, offset , opcode , uvalue ); break; default : printf( F_NAME " " F_BUF_FMT " " F_INSTR " " F_HEX F_EOL , prefix , disk_blk, offset , opcode , uvalue ); break; } break; default : CFatal( "**** UNDEFINED OPCODE TYPE *****" ); break; } }