]> pd.if.org Git - pd_readline/blob - mg/dir.c
Added mg from an OpenBSD mirror site. Many thanks to the OpenBSD team and the mg...
[pd_readline] / mg / dir.c
1 /*      $OpenBSD: dir.c,v 1.19 2008/06/13 20:07:40 kjell Exp $  */
2
3 /* This file is in the public domain. */
4
5 /*
6  * Name:        MG 2a
7  *              Directory management functions
8  * Created:     Ron Flax (ron@vsedev.vse.com)
9  *              Modified for MG 2a by Mic Kaczmarczik 03-Aug-1987
10  */
11
12 #include "def.h"
13
14 static char      mgcwd[NFILEN];
15
16 /*
17  * Initialize anything the directory management routines need.
18  */
19 void
20 dirinit(void)
21 {
22         mgcwd[0] = '\0';
23         if (getcwd(mgcwd, sizeof(mgcwd)) == NULL) {
24                 ewprintf("Can't get current directory!");
25                 chdir("/");
26         }
27         if (!(mgcwd[0] == '/' && mgcwd [1] == '\0'))
28                 (void)strlcat(mgcwd, "/", sizeof(mgcwd));
29 }
30
31 /*
32  * Change current working directory.
33  */
34 /* ARGSUSED */
35 int
36 changedir(int f, int n)
37 {
38         char    bufc[NFILEN], *bufp;
39
40         (void)strlcpy(bufc, mgcwd, sizeof(bufc));
41         if ((bufp = eread("Change default directory: ", bufc, NFILEN,
42             EFDEF | EFNEW | EFCR | EFFILE)) == NULL)
43                 return (ABORT);
44         else if (bufp[0] == '\0')
45                 return (FALSE);
46         /* Append trailing slash */
47         if (chdir(bufc) == -1) {
48                 ewprintf("Can't change dir to %s", bufc);
49                 return (FALSE);
50         }
51         if ((bufp = getcwd(mgcwd, sizeof(mgcwd))) == NULL)
52                 panic("Can't get current directory!");
53         if (mgcwd[strlen(mgcwd) - 1] != '/')
54                 (void)strlcat(mgcwd, "/", sizeof(mgcwd));
55         ewprintf("Current directory is now %s", bufp);
56         return (TRUE);
57 }
58
59 /*
60  * Show current directory.
61  */
62 /* ARGSUSED */
63 int
64 showcwdir(int f, int n)
65 {
66         ewprintf("Current directory: %s", mgcwd);
67         return (TRUE);
68 }
69
70 int
71 getcwdir(char *buf, size_t len)
72 {
73         if (strlcpy(buf, mgcwd, len) >= len)
74                 return (FALSE);
75
76         return (TRUE);
77 }