/** * * @return A newly-allocated string with the name to use or NULL upon error. */ static char *GetStreamName (const char * const output_dir_s, const char *output_filename_s, char *stream_name_s, const char * const suffix_s) { bool allocated_stream_name_flag = false; char *filename_s = NULL; if (!stream_name_s) { /* if stream_name_s is NULL use the output_filename instead and add the relevant suffix. */ if (output_filename_s) { stream_name_s = ConcatenateStrings (output_filename_s, suffix_s); } else { stream_name_s = ConcatenateStrings ("output", suffix_s); } if (stream_name_s) { allocated_stream_name_flag = TRUE; } } if (stream_name_s) { /* if we've got an output direrctory, put the files there */ if (output_dir_s) { filename_s = MakeFilename (output_dir_s, stream_name_s); if (allocated_stream_name_flag) { FreeCopiedString (stream_name_s); } } else { /* if the stream_name_s was newly allocated, simply use it. */ if (allocated_stream_name_flag) { filename_s = stream_name_s; allocated_stream_name_flag = false; } else { filename_s = CopyToNewString (stream_name_s, 0, TRUE); } } } return filename_s; }
bool ExternalBlastTool :: SetUpOutputFile () { bool success_flag = false; char *local_filename_s = 0; char uuid_s [UUID_STRING_BUFFER_SIZE]; ConvertUUIDToString (bt_job_p -> bsj_job.sj_id, uuid_s); local_filename_s = ConcatenateStrings (uuid_s, BS_OUTPUT_SUFFIX_S); if (local_filename_s) { ebt_results_filename_s = MakeFilename (ebt_working_directory_s, local_filename_s); if (ebt_results_filename_s) { if (AddBlastArgsPair ("out", ebt_results_filename_s)) { success_flag = true; } else { PrintErrors (STM_LEVEL_SEVERE, __FILE__, __LINE__, "Failed to set output filename to \"%s\"", ebt_results_filename_s); } } else { PrintErrors (STM_LEVEL_SEVERE, __FILE__, __LINE__, "Failed to create filename for %s, %s", ebt_working_directory_s, local_filename_s); } FreeCopiedString (local_filename_s); } else { PrintErrors (STM_LEVEL_SEVERE, __FILE__, __LINE__, "Failed to create local filename for %s, %s", uuid_s, BS_OUTPUT_SUFFIX_S); } return success_flag; }
static char *GetLocalJobFilename (const char *uuid_s, const BlastServiceData *blast_data_p) { char *output_filename_s = NULL; char *output_filename_stem_s = MakeFilename (blast_data_p -> bsd_working_dir_s, uuid_s); if (output_filename_stem_s) { output_filename_s = ConcatenateStrings (output_filename_stem_s, s_remote_suffix_s); if (!output_filename_s) { PrintErrors (STM_LEVEL_WARNING, __FILE__, __LINE__, "Failed to create filename from \"%s\" and \"%s\"", output_filename_stem_s, s_remote_suffix_s); } FreeCopiedString (output_filename_stem_s); } /* if (output_filename_stem_s) */ else { PrintErrors (STM_LEVEL_WARNING, __FILE__, __LINE__, "Failed to create filename stem from \"%s\" and \"%s\"", output_filename_stem_s, uuid_s); } return output_filename_s; }
int main(int argc, char** argv) { #ifndef RX_PREFIX #warning "No RX_PREFIX defined. Relying on RX_PREFIX @ runtime" char* RX_PREFIX = getenv("RX_PREFIX"); if(RX_PREFIX == NULL) { printf("Error: RX_PREFIX not defined, neither on compile nor on run time. Please export RX_PREFIX as the directory of the compiler executable!\n"); exit(EXIT_FAILURE); } #endif /** Check if STDLIB_R3X is given **/ char* StandardLibraryLocation = getenv("STDLIB_R3X"); if(StandardLibraryLocation!=NULL) { AddIncludeDir(StandardLibraryLocation); } ParseArguments(argc, argv); if(CompileDynamic == true) { DynamicSuffix = " -d"; } char* asmfile = ConcatenateStrings(OutputFile, ".asm"); char* ASMOutputFile = ConcatenateStrings(RX_PREFIX, ConcatenateStrings("/", asmfile)); char* TBCOutputFile = ConcatenateStrings(RX_PREFIX, "/_temp.bas"); char* GCCOptions = ConcatenateStrings("gcc -E -P -o ", ConcatenateStrings(TBCOutputFile, ConcatenateStrings(" - < ", InputFile))); char* CgenOptions = ConcatenateStrings(RX_PREFIX, ConcatenateStrings("/cgen", ConcatenateStrings(" -exe ", ConcatenateStrings("./", OutputFile)))); for(unsigned int i = 0; i < NumberOfIncludeDirs; i++) { if(IncludeDirs[i]!=NULL) { GCCOptions = ConcatenateStrings(GCCOptions, ConcatenateStrings(" -I", IncludeDirs[i])); } } char* TBCOptions = ConcatenateStrings(RX_PREFIX, ConcatenateStrings("/tbc > ", ConcatenateStrings(ASMOutputFile, ConcatenateStrings(" ", ConcatenateStrings(TBCOutputFile, DynamicSuffix))))); char* FASMOptions = ConcatenateStrings(RX_PREFIX, ConcatenateStrings("/fasm ", ConcatenateStrings(ASMOutputFile, ConcatenateStrings(" ./", OutputFile)))); /*printf("ASMOutputFile: %s\nTBCOutputFile: %s\nGCCOptions: %s\nTBCOptions: %s\nFASMOptions: %s\n", ASMOutputFile, TBCOutputFile, GCCOptions, TBCOptions, FASMOptions);*/ system(GCCOptions); system(TBCOptions); if(AsmFlag == false) { system(FASMOptions); system(CgenOptions); } else { FILE* fd = fopen(ASMOutputFile, "r+b"); fseek(fd, 0L, SEEK_END); unsigned int sz = ftell(fd); fseek(fd, 0L, SEEK_SET); char* space = calloc(sz+1, 1); fread(space, 1, sz, fd); space[sz] = 0; FILE* fp = fopen(OutputFile, "w+b"); fprintf(fp, "%s", space); fclose(fp); fclose(fd); } /**! Remove temp files **/ remove(ASMOutputFile); remove(TBCOutputFile); return 0; }