rev |
line source |
yuuji@0
|
1 /* ========================================================================
|
yuuji@0
|
2 * Copyright 1988-2006 University of Washington
|
yuuji@0
|
3 *
|
yuuji@0
|
4 * Licensed under the Apache License, Version 2.0 (the "License");
|
yuuji@0
|
5 * you may not use this file except in compliance with the License.
|
yuuji@0
|
6 * You may obtain a copy of the License at
|
yuuji@0
|
7 *
|
yuuji@0
|
8 * http://www.apache.org/licenses/LICENSE-2.0
|
yuuji@0
|
9 *
|
yuuji@0
|
10 *
|
yuuji@0
|
11 * ========================================================================
|
yuuji@0
|
12 */
|
yuuji@0
|
13
|
yuuji@0
|
14 /*
|
yuuji@0
|
15 * Program: VMS environment routines
|
yuuji@0
|
16 *
|
yuuji@0
|
17 * Author: Mark Crispin
|
yuuji@0
|
18 * Networks and Distributed Computing
|
yuuji@0
|
19 * Computing & Communications
|
yuuji@0
|
20 * University of Washington
|
yuuji@0
|
21 * Administration Building, AG-44
|
yuuji@0
|
22 * Seattle, WA 98195
|
yuuji@0
|
23 * Internet: MRC@CAC.Washington.EDU
|
yuuji@0
|
24 *
|
yuuji@0
|
25 * Date: 2 August 1994
|
yuuji@0
|
26 * Last Edited: 30 August 2006
|
yuuji@0
|
27 */
|
yuuji@0
|
28
|
yuuji@0
|
29
|
yuuji@0
|
30 static char *myUserName = NIL; /* user name */
|
yuuji@0
|
31 static char *myLocalHost = NIL; /* local host name */
|
yuuji@0
|
32 static char *myHomeDir = NIL; /* home directory name */
|
yuuji@0
|
33 static char *myNewsrc = NIL; /* newsrc file name */
|
yuuji@0
|
34
|
yuuji@0
|
35 #include "pmatch.c" /* include wildcard pattern matcher */
|
yuuji@0
|
36
|
yuuji@0
|
37 /* Environment manipulate parameters
|
yuuji@0
|
38 * Accepts: function code
|
yuuji@0
|
39 * function-dependent value
|
yuuji@0
|
40 * Returns: function-dependent return value
|
yuuji@0
|
41 */
|
yuuji@0
|
42
|
yuuji@0
|
43 void *env_parameters (long function,void *value)
|
yuuji@0
|
44 {
|
yuuji@0
|
45 void *ret = NIL;
|
yuuji@0
|
46 switch ((int) function) {
|
yuuji@0
|
47 case SET_USERNAME:
|
yuuji@0
|
48 myUserName = cpystr ((char *) value);
|
yuuji@0
|
49 case GET_USERNAME:
|
yuuji@0
|
50 ret = (void *) myUserName;
|
yuuji@0
|
51 break;
|
yuuji@0
|
52 case SET_HOMEDIR:
|
yuuji@0
|
53 myHomeDir = cpystr ((char *) value);
|
yuuji@0
|
54 case GET_HOMEDIR:
|
yuuji@0
|
55 ret = (void *) myHomeDir;
|
yuuji@0
|
56 break;
|
yuuji@0
|
57 case SET_LOCALHOST:
|
yuuji@0
|
58 myLocalHost = cpystr ((char *) value);
|
yuuji@0
|
59 case GET_LOCALHOST:
|
yuuji@0
|
60 ret = (void *) myLocalHost;
|
yuuji@0
|
61 break;
|
yuuji@0
|
62 case SET_NEWSRC:
|
yuuji@0
|
63 if (myNewsrc) fs_give ((void **) &myNewsrc);
|
yuuji@0
|
64 myNewsrc = cpystr ((char *) value);
|
yuuji@0
|
65 case GET_NEWSRC:
|
yuuji@0
|
66 if (!myNewsrc) { /* set news file name if not defined */
|
yuuji@0
|
67 char tmp[MAILTMPLEN];
|
yuuji@0
|
68 sprintf (tmp,"%s:.newsrc",myhomedir ());
|
yuuji@0
|
69 myNewsrc = cpystr (tmp);
|
yuuji@0
|
70 }
|
yuuji@0
|
71 ret = (void *) myNewsrc;
|
yuuji@0
|
72 break;
|
yuuji@0
|
73 }
|
yuuji@0
|
74 return ret;
|
yuuji@0
|
75 }
|
yuuji@0
|
76
|
yuuji@0
|
77 /* Write current time
|
yuuji@0
|
78 * Accepts: destination string
|
yuuji@0
|
79 * optional format of day-of-week prefix
|
yuuji@0
|
80 * format of date and time
|
yuuji@0
|
81 */
|
yuuji@0
|
82
|
yuuji@0
|
83 static void do_date (char *date,char *prefix,char *fmt)
|
yuuji@0
|
84 {
|
yuuji@0
|
85 time_t tn = time (0);
|
yuuji@0
|
86 struct tm *t = localtime (&tn);
|
yuuji@0
|
87 int zone = LOCALTIMEZONE + (t->tm_isdst ? 60 : 0);
|
yuuji@0
|
88 if (prefix) { /* want day of week? */
|
yuuji@0
|
89 sprintf (date,prefix,days[t->tm_wday]);
|
yuuji@0
|
90 date += strlen (date); /* make next sprintf append */
|
yuuji@0
|
91 }
|
yuuji@0
|
92 /* output the date */
|
yuuji@0
|
93 sprintf (date,fmt,t->tm_mday,months[t->tm_mon],t->tm_year+1900,
|
yuuji@0
|
94 t->tm_hour,t->tm_min,t->tm_sec,zone/60,abs (zone) % 60);
|
yuuji@0
|
95 }
|
yuuji@0
|
96
|
yuuji@0
|
97
|
yuuji@0
|
98 /* Write current time in RFC 822 format
|
yuuji@0
|
99 * Accepts: destination string
|
yuuji@0
|
100 */
|
yuuji@0
|
101
|
yuuji@0
|
102 void rfc822_date (char *date)
|
yuuji@0
|
103 {
|
yuuji@0
|
104 do_date (date,"%s, ","%d %s %d %02d:%02d:%02d %+03d%02d");
|
yuuji@0
|
105 }
|
yuuji@0
|
106
|
yuuji@0
|
107
|
yuuji@0
|
108 /* Write current time in internal format
|
yuuji@0
|
109 * Accepts: destination string
|
yuuji@0
|
110 */
|
yuuji@0
|
111
|
yuuji@0
|
112 void internal_date (char *date)
|
yuuji@0
|
113 {
|
yuuji@0
|
114 do_date (date,NIL,"%02d-%s-%d %02d:%02d:%02d %+03d%02d");
|
yuuji@0
|
115 }
|
yuuji@0
|
116
|
yuuji@0
|
117 /* Return my user name
|
yuuji@0
|
118 * Returns: my user name
|
yuuji@0
|
119 */
|
yuuji@0
|
120
|
yuuji@0
|
121 char *myusername ()
|
yuuji@0
|
122 {
|
yuuji@0
|
123 struct stat sbuf;
|
yuuji@0
|
124 char tmp[MAILTMPLEN];
|
yuuji@0
|
125
|
yuuji@0
|
126 if (!myUserName) { /* get user name if don't have it yet */
|
yuuji@0
|
127 myUserName = cpystr (cuserid (NIL));
|
yuuji@0
|
128 myHomeDir = cpystr ("SYS$LOGIN");
|
yuuji@0
|
129 }
|
yuuji@0
|
130 return myUserName;
|
yuuji@0
|
131 }
|
yuuji@0
|
132
|
yuuji@0
|
133
|
yuuji@0
|
134 /* Return my home directory name
|
yuuji@0
|
135 * Returns: my home directory name
|
yuuji@0
|
136 */
|
yuuji@0
|
137
|
yuuji@0
|
138 char *myhomedir ()
|
yuuji@0
|
139 {
|
yuuji@0
|
140 if (!myHomeDir) myusername ();/* initialize if first time */
|
yuuji@0
|
141 return myHomeDir;
|
yuuji@0
|
142 }
|
yuuji@0
|
143
|
yuuji@0
|
144
|
yuuji@0
|
145 /* Determine default prototype stream to user
|
yuuji@0
|
146 * Accepts: type (NIL for create, T for append)
|
yuuji@0
|
147 * Returns: default prototype stream
|
yuuji@0
|
148 */
|
yuuji@0
|
149
|
yuuji@0
|
150 MAILSTREAM *default_proto (long type)
|
yuuji@0
|
151 {
|
yuuji@0
|
152 return NIL; /* no default prototype */
|
yuuji@0
|
153 }
|
yuuji@0
|
154
|
yuuji@0
|
155 /* Emulator for BSD syslog() routine
|
yuuji@0
|
156 * Accepts: priority
|
yuuji@0
|
157 * message
|
yuuji@0
|
158 * parameters
|
yuuji@0
|
159 */
|
yuuji@0
|
160
|
yuuji@0
|
161 void syslog (int priority,const char *message,...)
|
yuuji@0
|
162 {
|
yuuji@0
|
163 }
|
yuuji@0
|
164
|
yuuji@0
|
165
|
yuuji@0
|
166 /* Emulator for BSD openlog() routine
|
yuuji@0
|
167 * Accepts: identity
|
yuuji@0
|
168 * options
|
yuuji@0
|
169 * facility
|
yuuji@0
|
170 */
|
yuuji@0
|
171
|
yuuji@0
|
172 void openlog (const char *ident,int logopt,int facility)
|
yuuji@0
|
173 {
|
yuuji@0
|
174 }
|