|
187 | 187 | :EndIf |
188 | 188 | ∇ |
189 | 189 |
|
190 | | - ∇ (rc config)←ReadConfigFile file;valid;names;m;p;json;one;t |
| 190 | + ∇ (rc config)←ReadConfigFile file;valid;names;p;json;one;t;mask;i;sf;badNames;member;val |
191 | 191 | ⍝ Read a configuration file and return a namespace |
192 | 192 | ⍝ rc←0 on success, 1 on failure in which case config is an error message :-( |
193 | 193 |
|
|
217 | 217 | :EndIf |
218 | 218 | one←1=≢names←valid~names,⊂'SourceFlags' |
219 | 219 | ⍎(×≢names)/'config.(',(⍕names),')←',(one/'⊃'),'⎕NS¨(⍴names)⍴⊂''''' |
220 | | - :If 0=⎕NC'config.SourceFlags' ⋄ config.SourceFlags←⍬ ⋄ :EndIf |
| 220 | + :If 0=⎕NC'config.SourceFlags' |
| 221 | + config.SourceFlags←⍬ |
| 222 | + :ElseIf 1≠≢⍴config.SourceFlags |
| 223 | + (rc config)←1('SourceFlags in "',file,'" must be a vector') |
| 224 | + :ElseIf 0=≢config.SourceFlags |
| 225 | + :ElseIf ≠/mask←9≠{40 ⎕ATX'⍵'}¨config.SourceFlags |
| 226 | + →0⊣(rc config)←1('SourceFlags[',(⍕⍸mask),'] in "',file,'" must be objects'↓⍨1=+/mask) |
| 227 | + :Else |
| 228 | + :For i sf :InEach (⍳≢config.SourceFlags)config.SourceFlags |
| 229 | + :If 0=40 sf.⎕ATX'Name' |
| 230 | + →0⊣(rc config)←1('SourceFlags[',(⍕i),'] in "',file,'" has no Name member') |
| 231 | + :ElseIf 2≠40 sf.⎕ATX'Name' |
| 232 | + :OrIf 1≠≡sf.Name |
| 233 | + :OrIf ¯1=⎕NC⍕sf.Name |
| 234 | + →0⊣(rc config)←1('SourceFlags[',(⍕i),'] in "',file,'" has invalid Name member') |
| 235 | + :ElseIf ×≢badNames←'Name' 'Stop' 'Trace'~⍨sf.⎕NL-⍳9 |
| 236 | + →0⊣(rc config)←1('SourceFlags[',(⍕i),'] in "',file,'" has invalid member',(1=≢badNames)↓'s:',∊' ',¨badNames) |
| 237 | + :Else |
| 238 | + :For member :In 'Stop' 'Trace'∩sf.⎕NL ¯2 |
| 239 | + val←sf⍎member |
| 240 | + :If 1≠≡val |
| 241 | + :OrIf ⍬≢0/val |
| 242 | + :OrIf val≢⌊val |
| 243 | + →0⊣(rc config)←1('SourceFlags[',(⍕i),'].',member,' in "',file,'" is not a vector of line numbers') |
| 244 | + :EndIf |
| 245 | + :EndFor |
| 246 | + :EndIf |
| 247 | + :EndFor |
| 248 | + :EndIf |
221 | 249 | rc←0 |
222 | 250 | ∇ |
223 | 251 |
|
|
0 commit comments