char *truepath(const char * const fnam) { char *h; assert(fnam); #ifdef FEATURE_LONG_FILENAMES if((h = dfntruename(getshortfilename(fnam))) != 0) #else if((h = dfntruename(fnam)) != 0) #endif return h; display_errno_fnam_error(fnam); return 0; }
void displayPrompt(const char *pr) { #ifdef FEATURE_ENVVARS_IN_PROMPT char *buf = strdup(pr); char *expanded = malloc(MAX_INTERNAL_COMMAND_SIZE + sizeof(errorlevel) * 8); if(buf && expanded) { if(!expandEnvVars(buf, expanded)) error_line_too_long(); else pr = expanded; } free(buf); #endif while (*pr) { if(*pr != '$') { outc(*pr); } else { switch (toupper(*++pr)) { case 'A': outc('&'); break; case 'B': outc('|'); break; case 'C': outc('('); break; /* case 'D': see below */ case 'E': outc(27); break; /* Decimal 27 */ case 'F': outc(')'); break; case 'G': outc('>'); break; case 'H': outc(8); break; /* Decimal 8 */ case 'L': outc('<'); break; /* case 'M': outc('<'); break; remote name of current drive */ /* case 'N': see below */ /* case 'P': see below */ case 'Q': outc('='); break; case 'S': outc(' '); break; /* case 'T': see below */ /* case 'V': see below */ case '$': outc('$'); break; case '_': outc('\n'); break; /* case '+': see below */ case 'D': { char *p; if((p = curDateLong()) != 0) { fputs(p, stdout); free(p); } break; } case 'N': { outc( ( getdisk() + 'A' ) ); break; } case 'P': { char *p; #ifndef FEATURE_LONG_FILENAMES if((p = cwd(0)) != 0) { fputs(p, stdout); free(p); } #else if((p = dfntruename(".")) != 0) { fputs(p, stdout); free(p); } else if((p = cwd(0)) != 0) { fputs(p, stdout); free(p); } #endif break; } case 'T': { char *p; if((p = curTime()) != 0) { fputs(p, stdout); free(p); } break; } case 'V': { /* #1776 fputs(shellname, stdout); */ printf("%s v%s", shellname, shellver); break; } case '+': /* Levels of PUSHD */ { #ifdef INCLUDE_CMD_PUSHD ctxt_info_t *info; int i; info = &CTXT_INFO_STRUCT(CTXT_TAG_DIRSTACK); assert(info); if((i = info->c_nummax) > 0) do { outc('+'); } while(--i); #endif } } } pr++; } #ifdef FEATURE_ENVVARS_IN_PROMPT free(expanded); #endif }