Mercurial > repos > rhope
annotate file.rhope @ 120:cd25171e1bb2
Use List for Subsets instead of a Dictionary for performance reasons. Fix issue with List literals. Compiled compiler is now self-hosting.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 21 Oct 2010 23:55:15 -0400 |
parents | 25a205094f9b |
children | ac5c2d78663f |
rev | line source |
---|---|
79 | 1 |
80 | 2 //This implementation will change quite a bit once the transaction system is working |
3 //and I've finalized how File I/O will fit into that. This is just a very basic | |
4 //implementation to allow the compiler to be self-hosting. | |
5 | |
6 Foreign C:libc | |
7 { | |
81
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
8 open[name(Array,Raw Pointer),flags(Int32,Naked),mode(UInt32,Naked):filedes(Int32,Naked)] |
80 | 9 close[filedes(Int32,Naked):status(Int32,Naked)] |
10 fsync[filedes(Int32,Naked):status(Int32,Naked)] | |
81
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
11 fstat[filedes(Int32,Naked),buf(Stat,Raw Pointer,Mutable):err(Int32,Naked),buf] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
12 lseek[filedes(Int32,Naked),offset(Int64,Naked),whence(Int32,Naked):out(Int64,Naked)] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
13 ftruncate[filedes(Int32,Naked),length(Int64,Naked):status(Int32,Naked)] |
80 | 14 } |
79 | 15 |
16 Blueprint Stat | |
17 { | |
80 | 18 Device(UInt64,Naked) |
19 Inode(UInt64,Naked) | |
20 Link Count(UInt64,Naked) | |
21 Mode(UInt32,Naked) | |
22 Owner ID(UInt32,Naked) | |
23 Group ID(UInt32,Naked) | |
24 Pad0(Int32,Naked) | |
25 RDevice(UInt64,Naked) | |
26 Size(Int64,Naked) | |
27 Block Size(Int64,Naked) | |
28 Block Count(Int64,Naked) | |
29 Access Time(Int64,Naked) | |
30 Access Time Nano(UInt64,Naked) | |
31 Mod Time(Int64,Naked) | |
32 Mod Time Nano(UInt64,Naked) | |
33 Status Time(Int64,Naked) | |
34 Status Time Nano(UInt64,Naked) | |
35 Unused1(Int64,Naked) | |
36 Unused2(Int64,Naked) | |
37 Unused3(Int64,Naked) | |
38 } | |
39 | |
40 Stat[fd:out] | |
41 { | |
42 err,out <- fstat[fd, Build[Stat()]] | |
79 | 43 } |
44 | |
45 Blueprint File | |
46 { | |
47 Name | |
48 } | |
49 | |
50 Blueprint File Read | |
51 { | |
52 Name | |
53 Descriptor(Int32,Naked) | |
54 Info | |
55 } | |
56 | |
57 Blueprint File Write | |
58 { | |
59 Name | |
60 Descriptor(Int32,Naked) | |
61 Info | |
62 } | |
63 | |
64 Blueprint File ReadWrite | |
65 { | |
66 Name | |
67 Read Offset(Int64,Naked) | |
68 Descriptor(Int32,Naked) | |
69 Info | |
70 } | |
71 | |
72 File[name:out] | |
73 { | |
74 out <- [Build[File()]]Name <<[name] | |
75 } | |
76 | |
77 | |
78 Open@File[file,mode:out,error] | |
79 { | |
80 If[[mode]=["r"]] | |
81
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
81 { |
82
2e2e55fc12f9
Fix bug with conditionally assigning a literal or input to a named pipe
Mike Pavone <pavone@retrodev.com>
parents:
81
diff
changeset
|
82 imode <- 0i32 |
2e2e55fc12f9
Fix bug with conditionally assigning a literal or input to a named pipe
Mike Pavone <pavone@retrodev.com>
parents:
81
diff
changeset
|
83 type <- File Read() |
79 | 84 out <- Val[ofile] |
85 }{ | |
86 If[[mode]=["w"]] | |
87 { | |
82
2e2e55fc12f9
Fix bug with conditionally assigning a literal or input to a named pipe
Mike Pavone <pavone@retrodev.com>
parents:
81
diff
changeset
|
88 imode <- 65i32 |
2e2e55fc12f9
Fix bug with conditionally assigning a literal or input to a named pipe
Mike Pavone <pavone@retrodev.com>
parents:
81
diff
changeset
|
89 type <- File Write() |
79 | 90 out <- Val[ofile] |
81
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
91 If[[fd]!=[-1i32]] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
92 { lseek[fd, 0i64, 2i32] } |
79 | 93 }{ |
94 ,error <- If[[mode]=["rw"]] | |
95 { | |
82
2e2e55fc12f9
Fix bug with conditionally assigning a literal or input to a named pipe
Mike Pavone <pavone@retrodev.com>
parents:
81
diff
changeset
|
96 imode <- 66i32 |
2e2e55fc12f9
Fix bug with conditionally assigning a literal or input to a named pipe
Mike Pavone <pavone@retrodev.com>
parents:
81
diff
changeset
|
97 type <- File ReadWrite() |
79 | 98 out <- [ofile]Read Offset <<[0i64] |
99 } | |
100 } | |
101 } | |
100
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
82
diff
changeset
|
102 fd <- open[[[[[file]Name >>]Flatten]Buffer >>]Append[0u8], imode, 438u32] |
79 | 103 error <- If[[fd]=[-1i32]] {} |
104 { | |
80 | 105 ofile <- [[[Build[type] |
79 | 106 ]Name <<[ [file]Name >> ] |
107 ]Descriptor <<[fd] | |
108 ]Info <<[Stat[fd]] | |
109 } | |
110 } | |
111 | |
112 Read@File[file,bytes:data,outfile,error] | |
113 { | |
114 ,error <- [file]Open["r"] | |
115 { | |
116 data,outfile,error <- [~]Read[bytes] | |
117 } | |
118 } | |
80 | 119 /* |
79 | 120 Append@File[file,data:out,error] |
121 { | |
122 ,error <- [file]Open["w"] | |
123 { | |
124 out,error <- [~]Append[data] | |
125 } | |
80 | 126 }*/ |
79 | 127 |
128 String@File[file:out,error] | |
129 { | |
81
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
130 f,error <- [file]Open["r"] |
79 | 131 { |
132 out,error <- String[~] | |
81
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
133 { Close[f] } |
79 | 134 } |
135 } | |
136 | |
81
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
137 Truncate@File[file:out,error] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
138 { |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
139 f,error <- [file]Open["w"] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
140 { |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
141 out,error <- Truncate[f] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
142 } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
143 } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
144 |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
145 Write@File[file,data:out,error] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
146 { |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
147 f,error <- [file]Open["w"] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
148 { |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
149 out,error <- [f]Write[data] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
150 } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
151 } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
152 |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
153 |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
154 String@File Read[file:out,error] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
155 { |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
156 ,error <- [file]Read[[file]Length] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
157 { out <- String[~] } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
158 } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
159 |
79 | 160 Read@File Read[file,inbytes(Int32):data,outfile,error] |
161 { | |
80 | 162 readbytes, mdata <- read[[file]Descriptor >>, [Array[]]Set[inbytes, 0u8], Int64[inbytes]] |
163 error <- If[[readbytes]<[0i64]] {} | |
164 { | |
165 outfile <- file | |
166 data <- [mdata]Length <<[ Trunc Int32[readbytes] ] | |
167 } | |
168 /* | |
169 //Skip buffering for now. Buffering approach may need to change later anyway | |
79 | 170 buflen <- [[file]Buffer >>]Length |
171 If[buflen] | |
172 { | |
173 If[[inbytes]=[buflen]] | |
174 { | |
175 data <- [file]Buffer >> | |
176 outfile <- [file]Buffer <<[Array[]] | |
177 }{ | |
178 If[[inbytes]<[buflen]] | |
179 { | |
180 | |
181 }{ | |
182 | |
183 } | |
184 } | |
185 }{ | |
186 readbytes, mdata <- read[[file]Descriptor >>, [Array[]]Set[inbytes, 0u8], Int64[inbytes]] | |
187 error <- If[[readbytes]<[0i64]] {} | |
188 { | |
189 outfile <- file | |
190 data <- [mdata]Length <<[ Trunc Int32[readbytes] ] | |
191 } | |
80 | 192 } */ |
193 } | |
194 | |
195 Length@File Read[file:out] | |
196 { | |
197 out <- Trunc Int32[[[file]Info >>]Size >>] | |
79 | 198 } |
199 | |
80 | 200 Close@File Read[file:out] |
201 { | |
202 close[[file]Descriptor >>] | |
203 out <- File[[file]Name >>] | |
204 } | |
205 | |
81
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
206 Length@File Write[file:out] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
207 { |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
208 out <- Trunc Int32[[[file]Info >>]Size >>] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
209 } |
80 | 210 |
81
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
211 Truncate@File Write[file:out,err] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
212 { |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
213 err <- If[ftruncate[[file]Descriptor >>, 0i64]] {} |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
214 { |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
215 err <- If[lseek[[file]Descriptor >>, 0i64, 0i32]] {} |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
216 { out <- [file]Info <<[ [[file]Info >>]Size <<[0i64] ] } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
217 } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
218 } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
219 |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
220 Write@File Write[file,data(Array):out,err] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
221 { |
114
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
222 err <- If[[write[[file]Descriptor >>, data, Int64[[data]Length >>]]]<[0i32]] {} |
81
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
223 { |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
224 out <- file |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
225 } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
226 } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
227 |
114
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
228 Write to File@String[str,file:out,err] |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
229 { |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
230 out,err <- [file]Write[[str]Buffer >>] |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
231 } |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
232 |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
233 Write to File@String Slice[str,file:out,err] |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
234 { |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
235 out,err <- [[str]Flatten]Write to File[file] |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
236 } |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
237 |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
238 Write to File@String Cat[str,file:out,err] |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
239 { |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
240 ,err <- [[str]Left >>]Write to File[file] |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
241 { out,err <- [[str]Right >>]Write to File[~] } |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
242 } |
25a205094f9b
More performance optimizations
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
243 |
81
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
244 Close@File Write[file:out] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
245 { |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
246 fsync[[file]Descriptor >>] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
247 { close[[file]Descriptor >>] } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
248 out <- File[[file]Name >>] |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
249 } |
dbe95bfec970
Very basic file access is now working; however, there's a bug involving assigning a literal to a named pipe inside a conditional block that needs fixing
Mike Pavone <pavone@retrodev.com>
parents:
80
diff
changeset
|
250 |