home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume3 / p < prev    next >
Internet Message Format  |  1989-02-03  |  7KB

  1. Path: xanth!mcnc!gatech!mandrill!hal!ncoast!allbery
  2. From: d4a-las@psi.sm.luth.se (Anders S Lindb{ck)
  3. Newsgroups: comp.sources.misc
  4. Subject: v03i061: A prompt generator program
  5. Message-ID: <8806231042.AA03421@psi.sm.luth.se>
  6. Date: 28 Jun 88 22:42:19 GMT
  7. Sender: allbery@ncoast.UUCP
  8. Reply-To: d4a-las@psi.sm.luth.se (Anders S Lindb{ck)
  9. Lines: 273
  10. Approved: allbery@ncoast.UUCP
  11.  
  12. comp.sources.misc: Volume 3, Issue 61
  13. Submitted-By: "Anders S Lindb{ck" <d4a-las@psi.sm.luth.se>
  14. Archive-Name: p
  15.  
  16. Here are somthing to send out to the rest of the net.
  17.  
  18. This is a promptgenerator program that may be of value for those with 
  19. access to a number of different host and often go forth and back between them.
  20.  
  21. The termcap code should not be to difficult to ifdef out if one wants to.
  22.  
  23. Please dont send mail to me after mid-august because then I will lose 
  24. this account and I don't know if I ever get a new one with access to usenet.
  25.  
  26. Anders S Lindb{ck, Pors|g}rden 10, S-951 65 Lulea, Sweden  
  27. UUCP:    {Outher space}!uunet!mcvax!enea!sm.luth.se!d4a-las
  28. Internet: d4a-las@psi.sm.luth.se               
  29. When I get time I'm gonna write this witty disclaimer and put it right here.
  30.  
  31. --------cut-slice-tear-or-whatever----right----at----this---line-----------
  32. : This is a shar archive.  Extract with sh, not csh.
  33. : The rest of this file will extract:
  34. : p.man makefile p.c
  35. #! /bin/sh
  36. echo extracting - p.man
  37. sed 's/^X//' > p.man << '/*EOF'
  38. X.TH P LuTH 
  39. X.UC 4
  40. X.SH NAME
  41. Xp \- the prompt generator 
  42. X.SH SYNOPSIS
  43. X.B p [\-lpiuqHnh]
  44. X
  45. X.SH DESCRIPTION
  46. X
  47. XThis program are supposed to be called as an alias
  48. X alias cd 'cd !* ;set prompt=`p`'
  49. X alias popd 'popd !* ; set prompt=`p`'
  50. X alias pushd 'pushd !* ; set prompt=`p`'
  51. X and generates a prompt:
  52. X  '<hostname>:<path>[!]>'
  53. X <hostname> is your local hosts name 
  54. X <path> is in three differ modes depending where you are
  55. X the absolute pwd if you are high up in the three
  56. X ~<user>/... if you are at another users homedirectory
  57. X ~/... if you are in your own homedirectory
  58. X the [!] will (t)csh transform to the history number.
  59. X.SH OPTIONS
  60. XThe program recognize the following options:
  61. X
  62. X.B \-l
  63. XGive whole path from root.
  64. X
  65. X.B \-p
  66. XPath in prompt, default.
  67. X
  68. X.B \-i
  69. XDo inverse printing of prompt.
  70. X
  71. X.B \-u
  72. XDo underscore printing of prompt.
  73. X
  74. X.B \-q
  75. XRevoke all defaults and present flags.
  76. X
  77. X
  78. X.B \-H
  79. XHostname in the prompt, default.
  80. X
  81. X.B \-n
  82. XNormal font mode in the prompt, default.
  83. X
  84. X.B \-h
  85. XHistory in the prompt, default.
  86. X
  87. X.SH BUGS
  88. XDoesn\'t give right path to user d-sekt on tau.sm.luth.se.
  89. XAnd probably at numerous other in the world.
  90. XIn the absence of a fast generic way to recognize all users homedirectory,
  91. Xone just have to fix the code by oneself.
  92. XHas to many flags.
  93. X.SH AUTHOR
  94. XAnders S Lindb{ck.
  95. X
  96. XDon't send flames or flowers to d4a-las@psi.sm.luth.se since
  97. XI\'m losing this account in august \'88.
  98. X
  99. X
  100. X
  101. /*EOF
  102. echo extracting - makefile
  103. sed 's/^X//' > makefile << '/*EOF'
  104. Xp: p.c
  105. X    cc -O p.c -o p -ltermcap -s
  106. Xlint:
  107. X    lint p.c
  108. /*EOF
  109. echo extracting - p.c
  110. sed 's/^X//' > p.c << '/*EOF'
  111. X/*
  112. X * Generate a nice promt with optional setting
  113. X *                               
  114. X * Made by Anders S Lindb{ck 1987-09-23
  115. X * Public Domain. Hack in it as much as you like.
  116. X * Last edit 1988-06-22  Made it more readable and some minor changes.
  117. X * Version 1.1
  118. X * Compile using:
  119. X * cc -O p.c -o p -ltermcap -s
  120. X *
  121. X * Intended to use with tcsh or csh.
  122. X * Put in the following in your .login, .alias or .aliases or whatever
  123. X * alias cd 'cd \!* ;set prompt="`p`"'
  124. X * alias pop 'popd \!* ; set prompt="`p`"'
  125. X * alias push 'pushd \!* ; set prompt="`p`"'
  126. X *
  127. X */
  128. X
  129. X#include <stdio.h>
  130. X#include <strings.h>
  131. X
  132. X#define NORMAL       0000
  133. X
  134. X/* Different prompt type_modes */
  135. X#define HOSTNAME     0001
  136. X#define PATH         0002
  137. X#define LONGPATH     0004
  138. X#define HISTORY      0010
  139. X
  140. X/* Different font modes */
  141. X#define INVERSE      0020
  142. X#define UNDERLINE    0040
  143. X
  144. X/* Different path printouts */
  145. X#define HOME         0100
  146. X
  147. Xextern char *getwd();
  148. Xextern gethostname();
  149. Xextern char *tgetstr();
  150. Xextern char *getenv();
  151. X
  152. Xchar tcapbuf[1024];
  153. Xchar *FontS, *FontE;
  154. Xchar *p;
  155. Xchar tcbuf[1024];
  156. Xchar homedir[64];
  157. Xchar host[64];
  158. Xchar dirs[64];
  159. Xchar *cp;
  160. Xchar *p1, *p2, *p3;
  161. X
  162. Xqputc(c)
  163. Xint c;
  164. X{
  165. X    (void)putchar(c);
  166. X}
  167. X
  168. Xmain(argc, argv)
  169. Xint argc;
  170. Xchar *argv[];
  171. X{
  172. X    short int k, l;
  173. X    short int font_mode = NORMAL;
  174. X    short int type_mode = PATH | HISTORY | HOSTNAME;
  175. X    short int home = NORMAL;
  176. X    /* Ok check what strange options they want */
  177. X    for (k = 1; k < argc; k++)
  178. X    if (argv[k][0] == '-')
  179. X        for (l = 1; argv[k][l]; l++)
  180. X        switch (argv[k][l])
  181. X        {
  182. X        case 'i':
  183. X            font_mode |= INVERSE;
  184. X            break;
  185. X        case 'u':
  186. X            font_mode |= UNDERLINE;
  187. X            break;
  188. X        case 'n':
  189. X            font_mode = NORMAL;
  190. X            break;
  191. X        case 'l':
  192. X            type_mode |= (PATH | LONGPATH);
  193. X            break;
  194. X        case 'h':
  195. X            type_mode |= HISTORY;
  196. X            break;
  197. X        case 'H':
  198. X            type_mode |= HOSTNAME;
  199. X            break;
  200. X        case 'p':
  201. X            type_mode |= PATH;
  202. X            break;
  203. X        case 'q':
  204. X            type_mode = NORMAL;
  205. X            break;
  206. X        default:
  207. X            (void) printf("Usage %s [ -iunlhHpq ]", argv[0]);
  208. X        }
  209. X
  210. X/* Get termcap entry to underline or inverse  */
  211. X    if (font_mode)
  212. X    {
  213. X    tgetent(tcbuf, getenv("TERM"));
  214. X    p = tcapbuf;
  215. X    if (font_mode & INVERSE)
  216. X    {
  217. X        if ((FontS = tgetstr("so", &p)) == NULL)
  218. X        FontS = "\0";
  219. X        if ((FontE = tgetstr("se", &p)) == NULL)
  220. X        FontE = "\0";
  221. X    } else if (font_mode & UNDERLINE)
  222. X    {
  223. X        if ((FontS = tgetstr("us", &p)) == NULL)
  224. X        FontS = "\0";
  225. X        if ((FontE = tgetstr("ue", &p)) == NULL)
  226. X        FontE = "\0";
  227. X    }
  228. X    }
  229. X    /* Time for the path */
  230. X    if (type_mode & PATH)
  231. X    {
  232. X    (void) strcat(homedir, getenv("HOME"));
  233. X    (void) getwd(dirs);
  234. X    cp = dirs;
  235. X    if (!(type_mode & LONGPATH))
  236. X        if (strncmp(dirs, homedir, strlen(homedir)) == 0)
  237. X        {
  238. X        cp = dirs + strlen(homedir);
  239. X        home = HOME;
  240. X        } else
  241. X        {
  242. X        /*
  243. X         * A kludge to se if it are a real user and not /usr/local/lib
  244. X         * Here it are so that almost everybody has an adress of type
  245. X         * /u1/d4a/d4a-las  or somthing similar so one must check that
  246. X         * it are more than 3 levels deep.
  247. X         */
  248. X        if ((strncmp(dirs, "/u1", 3) == 0) ||
  249. X            (strncmp(dirs, "/u2", 3) == 0) ||
  250. X            (strncmp(dirs, "/u0", 3) == 0) ||
  251. X            (strncmp(dirs, "/usr/staff", 10) == 0))
  252. X            if ((p3 = index(cp, '/')) != (char *) NULL)
  253. X            if ((p2 = index(++p3, '/')) != (char *) NULL)
  254. X                if ((p1 = index(++p2, '/')) != (char *) NULL)
  255. X                {
  256. X                home = HOME;
  257. X                cp = p1 + 1;
  258. X                }
  259. X        }
  260. X    }
  261. X    /* Well we need some hostnames */
  262. X    if (type_mode & HOSTNAME)
  263. X    (void) gethostname(host, (sizeof host) - 2);
  264. X
  265. X    /* Now we are ready, to write out the whole thing */
  266. X    if (font_mode)
  267. X    tputs(FontS, 1, qputc);
  268. X    if (type_mode & HOSTNAME)
  269. X    (void) printf("%s:", host);
  270. X    if (type_mode & PATH)
  271. X    {
  272. X    if (home)
  273. X        (void) putchar('~');
  274. X    (void) printf("%s", cp);
  275. X    }
  276. X    if (type_mode & HISTORY)
  277. X    (void) printf("[!]");
  278. X    (void) putchar('>');        /* Change if you like  */
  279. X    if (font_mode)
  280. X    tputs(FontE, 1, qputc);
  281. X    return 0;
  282. X}
  283. /*EOF
  284. exit 0
  285.