-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmisc.mod.orig
183 lines (151 loc) · 4.4 KB
/
misc.mod.orig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
: $Header: /usr/site/nrniv/local/mod/RCS/misc.mod,v 1.9 2000/11/01 18:26:11 billl Exp $
COMMENT
Misc. routines:
sassign() // assign a string from system
dassign()// assign a double
nokill() // chatch SIGHUP
prtime() // gives date/time
fspitchar(c,file) // sends single char to a file
spitchar(c) // sends single char to stdout: eg c=1 => ^A
file_exist(file) // returns 1 if filename exists
hocgetc(file) // get single char from a file
Note that with a SUFFIX equal to "nothing" these functions do not
have a suffix in hoc. Thus to call sassign() in hoc use simply type
"sassign()" <- without the quotes.
file_exist(filename)
- returns 1 if filename exists
sassign() (string assign, written by Bill Lytton)
- This routine is used to set a string in Hoc to something that has
been returned by a system call. sassign("name","shell_call ...")
will produce a file called "sassign" in the cwd that will contain
a hoc call that sets string 'name' to the result of shell_call
which should be a string.
dassign() (double assign, written and used by Bill Lytton)
- This routine is used to set a variable in Hoc to something that has
been returned by a system call. sassign("name","shell_call ...")
will produce a file called "dassign" in the cwd that will contain
a hoc call that sets variable 'name' to the result of shell_call
which should be a number.
ENDCOMMENT
INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}
NEURON {
SUFFIX nothing
}
VERBATIM
#include <unistd.h> /* F_OK */
#include <errno.h> /* errno */
#include <signal.h>
#include <sys/types.h> /* MUST REMEMBER THIS */
#include <time.h>
#include <stdio.h>
ENDVERBATIM
:* FUNCTION file_exist()
FUNCTION file_exist() {
VERBATIM
/* Returns TRUE if file exists, if file not exist the need to reset
errno else will get a nrnoc error. Seems to be a problem even
if I don't include <errno.h> */
char *gargstr(), *filename;
filename = gargstr(1);
if (*filename && !access(filename, F_OK)) {
_lfile_exist = 1;
} else {
/* Errno set to 2 when file not found */
errno = 0;
_lfile_exist = 0;
}
ENDVERBATIM
}
:* PROCEDURE sassign()
PROCEDURE sassign() {
VERBATIM
FILE *pipein;
char string[BUFSIZ], **strname, *syscall;
char** hoc_pgargstr();
strname = hoc_pgargstr(1);
syscall = gargstr(2);
if( !(pipein = popen(syscall, "r"))) {
fprintf(stderr,"System call failed\n");
return;
}
if (fgets(string,BUFSIZ,pipein) == NULL) {
fprintf(stderr,"System call did not return a string\n");
pclose(pipein); return;
}
/* assign_hoc_str(strname, string, 0); */
hoc_assign_str(strname, string);
pclose(pipein);
errno = 0;
ENDVERBATIM
}
:* PROCEDURE dassign()
PROCEDURE dassign() {
VERBATIM
FILE *pipein, *outfile;
char *strname, *syscall;
double num;
strname = gargstr(1);
syscall = gargstr(2);
if ( !(outfile = fopen("dassign","w"))) {
fprintf(stderr,"Can't open output file dassign\n");
return;
}
if( !(pipein = popen(syscall, "r"))) {
fprintf(stderr,"System call failed\n");
fclose(outfile); return;
}
if (fscanf(pipein,"%lf",&num) != 1) {
fprintf(stderr,"System call did not return a number\n");
fclose(outfile); pclose(pipein); return;
}
fprintf(outfile,"%s=%g\n",strname,num);
fprintf(outfile,"system(\"rm dassign\")\n");
fclose(outfile); pclose(pipein);
errno = 0;
ENDVERBATIM
}
:* PROCEDURE nokill()
: nohup
PROCEDURE nokill() {
VERBATIM
signal(SIGHUP, SIG_IGN);
ENDVERBATIM
}
:* PROCEDURE prtime ()
PROCEDURE prtime () {
VERBATIM
char timestr[64]; time_t t;
t = time(NULL);
printf("%s\n",ctime(&t)); /* see date(1) for formats */
/* strftime(timestr, 64, "%T %b %e, %Y", tp); */
/* printf("%s\n", timestr); */
ENDVERBATIM
}
:* PROCEDURE fspitchar
PROCEDURE fspitchar(c) {
VERBATIM
{
FILE* f, *hoc_obj_file_arg();
f = hoc_obj_file_arg(2);
fprintf(f, "%c", (int)_lc);
}
ENDVERBATIM
}
:* PROCEDURE spitchar
PROCEDURE spitchar(c) {
VERBATIM
{
printf("%c", (int)_lc);
}
ENDVERBATIM
}
:* FUNCTION hocgetc
FUNCTION hocgetc() {
VERBATIM
{
FILE* f, *hoc_obj_file_arg();
f = hoc_obj_file_arg(1);
_lhocgetc = (double)getc(f);
}
ENDVERBATIM
}