NLM_EXTERN Nlm_CharPtr LIBCALL Nlm_StrSave (const char FAR *from) { size_t len; Nlm_CharPtr to; len = Nlm_StringLen(from); if ((to = (Nlm_CharPtr) Nlm_MemGet(len +1, FALSE)) != NULL) { Nlm_MemCpy (to, from, len +1); } return to; }
/***************************************************************************** * * FilePathFind() * *****************************************************************************/ NLM_EXTERN Nlm_CharPtr LIBCALL Nlm_FilePathFind(const Nlm_Char* fullname) { Nlm_CharPtr str; size_t len = Nlm_StringLen(fullname); if ( !len ) return 0; while (len && fullname[len] != DIRDELIMCHR) len--; str = (Nlm_Char*)Nlm_MemGet(len + 1, MGET_ERRPOST); Nlm_MemCpy(str, fullname, len); str[len] = '\0'; return str; }
Nlm_Int2 Nlm_Main( void ) { #define MAX_COL 24 Nlm_Int4 argc = Nlm_GetArgc(); Nlm_CharPtr *argv = Nlm_GetArgv(); Nlm_Char x_str[MAX_COL * 1024]; FILE *fp = NULL; int n_read; FILE *logfile = Nlm_FileOpen("stdout", "w"); ASSERT ( logfile ); if (argc < 2) { fprintf(logfile, "Usage: %s <file_name>\n", argv[0]); return 1; } fp = Nlm_FileOpen(argv[1], "rb"); if ( !fp ) { fprintf(logfile, "Cannot open file: \"%s\"\n", argv[1]); return 2; } n_read = FileRead(x_str, 1, sizeof(x_str) - 1, fp); if (n_read < 2 * MAX_COL) { fprintf(logfile, "Too few bytes read from \"%s\": %d\n", argv[1], n_read); return 3; } ASSERT ( n_read < sizeof(x_str) ); x_str[n_read] = '\0'; {{ size_t max_col = MAX_COL - 1; int inc = 1; enumRuleLine rule_method = RL_Center; Nlm_CharPtr str = text2stream( x_str ); Nlm_CharPtr text_str = str; if ( !str ) { fprintf(logfile, "No non-space symbols in \"%s\"\n", argv[1]); return 4; } while (*str != '\0') { Nlm_Char s[MAX_COL + 1]; int dash = -12345; size_t n_print; while (*str && IS_WHITESP(*str)) str++; n_print = stream2text(str, max_col, &dash); ASSERT ( (max_col > 0 && str && *str) == (n_print > 0) ); ASSERT ( n_print <= max_col ); ASSERT ( dash != -12345 ); Nlm_MemCpy(s, str, n_print); s[n_print] = '\0'; ASSERT ( dash == 0 || n_print > 1 ); if ( dash ) s[--n_print] = '-'; {{ Nlm_CharPtr ruled_str = rule_line(s, (rule_method == RL_Right || rule_method == RL_Center ) ? MAX_COL : max_col, rule_method); fprintf(logfile, "|%s|\n", ruled_str); Nlm_MemFree( ruled_str ); }} str += n_print; if (max_col == 0 || max_col == MAX_COL) inc = -inc; max_col += inc; if (max_col == 0) if (rule_method == RL_Spread) rule_method = RL_Left; else rule_method++; } Nlm_MemFree( text_str ); }} Nlm_FileClose( logfile ); Nlm_FileClose( fp ); return 0; }