11#include <stdio.h>
2- #include "shell.h"
2+ #include <stdlib.h>
3+ #include <string.h>
34#include <unistd.h>
45#include <limits.h>
6+ #include <pwd.h>
7+ #include "shell.h"
58#include "symtab/symtab.h"
69
7- #define CYN "\x1B[36m "
8- #define WHT "\x1B[37m "
10+ #define GRN "\x1B[32m "
11+ #define BLU "\x1B[34m "
912#define RESET "\x1B[0m"
1013
14+ static void get_user_name (char * buf , size_t size )
15+ {
16+ struct passwd * pw = getpwuid (getuid ());
17+ if (pw && pw -> pw_name )
18+ {
19+ strncpy (buf , pw -> pw_name , size - 1 );
20+ buf [size - 1 ] = '\0' ;
21+ }
22+ else
23+ {
24+ buf [0 ] = '\0' ;
25+ }
26+ }
27+
28+ static char * display_path (char * cwd )
29+ {
30+ char * home = getenv ("HOME" );
31+ if (!home ) return cwd ;
32+
33+ size_t hlen = strlen (home );
34+ if (strncmp (cwd , home , hlen ) == 0 )
35+ {
36+ if (cwd [hlen ] == '\0' || cwd [hlen ] == '/' )
37+ {
38+ static char buf [PATH_MAX ];
39+ buf [0 ] = '~' ;
40+ strcpy (buf + 1 , cwd + hlen );
41+ return buf ;
42+ }
43+ }
44+ return cwd ;
45+ }
46+
1147void print_prompt1 (void )
1248{
1349 struct symtab_entry_s * entry = get_symtab_entry ("PS1" );
1450 char user [PATH_MAX ];
1551 char cwd [PATH_MAX ];
16- cuserid (user );
17- getcwd (cwd , sizeof (cwd ));
52+ char hostname [256 ];
53+
54+ get_user_name (user , sizeof (user ));
55+ gethostname (hostname , sizeof (hostname ));
56+ hostname [sizeof (hostname ) - 1 ] = '\0' ;
57+
58+ if (!getcwd (cwd , sizeof (cwd )))
59+ {
60+ cwd [0 ] = '\0' ;
61+ }
62+
63+ fprintf (stderr , GRN "%s@%s" RESET ":" BLU "%s" RESET , user , hostname , display_path (cwd ));
64+
1865 if (entry && entry -> val )
1966 {
20- fprintf (stderr ,CYN "NUSH@%s>" WHT "%s" CYN "%s" RESET ,user , cwd , entry -> val );
67+ fprintf (stderr , " " GRN "%s" RESET , entry -> val );
2168 }
2269 else
2370 {
24- fprintf (stderr , CYN "NUSH@%s>" WHT "%s" CYN "$ " RESET , user , cwd );
71+ fprintf (stderr , " " GRN "$" RESET " " );
2572 }
2673}
2774
2875void print_prompt2 (void )
2976{
3077 char user [PATH_MAX ];
3178 char cwd [PATH_MAX ];
32- cuserid (user );
33- getcwd (cwd , sizeof (cwd ));
34- fprintf (stderr ,CYN "NUSH@%s>" WHT "%s" CYN "> " RESET ,user ,cwd );
79+ char hostname [256 ];
80+
81+ get_user_name (user , sizeof (user ));
82+ gethostname (hostname , sizeof (hostname ));
83+ hostname [sizeof (hostname ) - 1 ] = '\0' ;
84+
85+ if (!getcwd (cwd , sizeof (cwd )))
86+ {
87+ cwd [0 ] = '\0' ;
88+ }
89+
90+ fprintf (stderr , GRN "%s@%s" RESET ":" BLU "%s" RESET " " GRN ">" RESET " " , user , hostname , display_path (cwd ));
3591}
0 commit comments