source: project/wiki/eggref/5/check-errors @ 37636

Last change on this file since 37636 was 35778, checked in by Kon Lovett, 2 years ago

add subsections

File size: 18.8 KB
Line 
1[[tags: egg]]
2
3== check-errors
4
5Argument checks & errors.
6
7[[toc:]]
8
9
10== Documentation
11
12
13=== Argument Conventions
14
15{{LOC}} is a {{symbol}}, or {{#f}}. The symbolic naming of the ''location''
16detecting the problem. As in the {{error}} form.
17
18{{OBJ}} is any Scheme {{object}}.
19
20{{ARGNAM}} is a {{string}} or {{symbol}} naming the argument list
21element corresponding to the {{OBJ}}. The default is the type-name.
22
23
24=== Type Checks
25
26Performs the minimal constraint check and raises an error condition upon
27failure. The ''mimimal constraint'' proviso is important for understanding the
28behavior of the checking routines. Unless otherwise specified no additional
29constraints are verified.
30
31So the {{check-...-interval}} routines, for example, do not verify the types of
32the arguments, only the interval constraint.
33
34When the {{unsafe}} feature is defined the check procedures are no-ops.
35
36''Note'' that the full-numeric-tower is '''not''' supported.
37
38All {{check-...}} routines return the checked object; unless a type-error
39exception is raised, obviously.
40
41==== Usage
42
43<enscript language=scheme>
44(import type-checks)
45</enscript>
46
47==== Type Checks Basic
48
49===== Usage
50
51<enscript language=scheme>
52(import type-checks-basic)
53</enscript>
54
55===== check-defined-value
56
57<procedure>(check-defined-value LOC OBJ [ARGNAM]) -> *</procedure>
58
59Ensures the {{OBJ}} is non-void, i.e. not an undefined-value.
60
61===== check-bound-value
62
63<procedure>(check-bound-value LOC OBJ [ARGNAM]) -> *</procedure>
64
65Ensures the {{OBJ}} is the value of a bound variable.
66
67''Only'' for use in rather unsafe calling environments where some explicit
68checking is necessary.
69
70===== check-minimum-argument-count
71
72<procedure>(check-minimum-argument-count LOC ARGC MINARGC) -> *</procedure>
73
74Does not verify the type of {{ARGC}}, and {{MINARGC}}.
75
76===== check-argument-count
77
78<procedure>(check-argument-count LOC ARGC MAXARGC) -> *</procedure>
79
80Does not verify the type of {{ARGC}}, and {{MAXARGC}}.
81
82===== define-check-type
83
84<macro>(define-check-type TYPNAM [TYPE-PRED])</macro>
85
86Creates a procedure definition for {{check-TYPNAM}} with the signature of the
87above check procedures. The type-predicate is either {{TYPE-PRED}}, when present,
88or {{TYPNAM?}}.
89
90{{TYPNAM}} is an unquoted {{symbol}}.
91
92<enscript language=scheme>
93(define-check-type hash-table)
94;=>
95;(define (check-hash-table loc obj #!optional argnam)
96;  (unless (hash-table? obj)
97;    (error-hash-table loc obj argnam))
98;  obj )
99</enscript>
100
101===== define-check+error-type
102
103<macro>(define-check+error-type TYPNAM [TYPE-PRED [TYPMSG]])</macro>
104
105Creates a procedure definition for {{check-TYPNAM}} with the signature of the
106above check procedures. The type-predicate is either {{TYPE-PRED}}, when present, or
107{{TYPE?}}. The error message type-name is either the {{TYPMSG}}, when
108present, or {{"TYPNAM"}}".
109
110{{TYPNAM}} is an unquoted {{symbol}}.
111
112<enscript language=scheme>
113(define-check+error-type hash-table)
114;=>
115;(define-error-type loc obj 'hash-table)
116;(define (check-hash-table loc obj #!optional argnam)
117;  (unless (hash-table? obj)
118;    (error-hash-table loc obj argnam))
119;  obj )
120</enscript>
121
122==== Type Checks Numbers
123
124===== Usage
125
126<enscript language=scheme>
127(import type-checks-numbers)
128</enscript>
129
130===== check-fixnum
131===== check-positive-fixnum
132===== check-natural-fixnum
133===== check-negative-fixnum
134===== check-non-positive-fixnum
135
136<procedure>(check-fixnum LOC OBJ [ARGNAM]) --> fixnum</procedure>
137<procedure>(check-positive-fixnum LOC OBJ [ARGNAM]) --> fixnum</procedure>
138<procedure>(check-natural-fixnum LOC OBJ [ARGNAM]) --> fixnum</procedure>
139<procedure>(check-negative-fixnum LOC OBJ [ARGNAM]) --> fixnum</procedure>
140<procedure>(check-non-positive-fixnum LOC OBJ [ARGNAM]) --> fixnum</procedure>
141
142===== check-integer
143===== check-positive-integer
144===== check-natural-integer
145===== check-negative-integer
146===== check-non-positive-integer
147
148<procedure>(check-integer LOC OBJ [ARGNAM]) --> integer</procedure>
149<procedure>(check-positive-integer LOC OBJ [ARGNAM]) --> integer</procedure>
150<procedure>(check-natural-integer LOC OBJ [ARGNAM]) --> integer</procedure>
151<procedure>(check-negative-integer LOC OBJ [ARGNAM]) --> integer</procedure>
152<procedure>(check-non-positive-integer LOC OBJ [ARGNAM]) --> integer</procedure>
153
154===== check-number
155===== check-positive-number
156===== check-natural-number
157===== check-negative-number
158===== check-non-positive-number
159
160<procedure>(check-number LOC OBJ [ARGNAM]) --> number</procedure>
161<procedure>(check-positive-number LOC OBJ [ARGNAM]) --> number</procedure>
162<procedure>(check-natural-number LOC OBJ [ARGNAM]) --> number</procedure>
163<procedure>(check-negative-number LOC OBJ [ARGNAM]) --> number</procedure>
164<procedure>(check-non-positive-number LOC OBJ [ARGNAM]) --> number</procedure>
165
166===== check-flonum
167
168<procedure>(check-flonum LOC OBJ [ARGNAM]) -> flonum</procedure>
169
170===== check-open-interval
171
172<procedure>(check-open-interval LOC NUM MINNUM MAXNUM [ARGNAM]) -> *</procedure>
173
174{{NUM}} in {{]MINNUM MAXNUM[}}.
175
176Does not verify the type of {{NUM}}, {{MINNUM}}, and {{MAXNUM}}.
177
178===== check-closed-interval
179
180<procedure>(check-closed-interval LOC NUM MINNUM MAXNUM [ARGNAM]) -> *</procedure>
181
182{{NUM}} in {{[MINNUM MAXNUM]}}.
183
184Does not verify the type of {{NUM}}, {{MINNUM}}, and {{MAXNUM}}.
185
186===== check-half-open-interval
187
188<procedure>(check-half-open-interval LOC NUM MINNUM MAXNUM [ARGNAM]) -> *</procedure>
189
190{{NUM}} in {{]MINNUM MAXNUM]}}.
191
192Does not verify the type of {{NUM}}, {{MINNUM}}, and {{MAXNUM}}.
193
194===== check-half-closed-interval
195
196<procedure>(check-half-closed-interval LOC NUM MINNUM MAXNUM [ARGNAM]) -> *</procedure>
197
198{{NUM}} in {{[MINNUM MAXNUM[}}.
199
200Does not verify the type of {{NUM}}, {{MINNUM}}, and {{MAXNUM}}.
201
202===== check-range
203
204<procedure>(check-range LOC START END [ARGNAM]) -> number number</procedure>
205
206Verify {{(<= START END)}} & return {{(values START END)}}.
207
208Does not verify the type of {{START}} and {{END}}, but assumes {{(or fixnum
209flonum)}}.
210
211==== Type Checks Structured
212
213===== Usage
214
215<enscript language=scheme>
216(import type-checks-structured)
217</enscript>
218
219===== check-procedure
220
221<procedure>(check-procedure LOC OBJ [ARGNAM]) -> *</procedure>
222
223===== check-input-port
224
225<procedure>(check-input-port LOC OBJ [ARGNAM]) -> *</procedure>
226
227===== check-output-port
228
229<procedure>(check-output-port LOC OBJ [ARGNAM]) -> *</procedure>
230
231===== check-list
232
233<procedure>(check-list LOC OBJ [ARGNAM]) -> *</procedure>
234
235===== check-alist
236
237<procedure>(check-alist LOC OBJ [ARGNAM]) -> *</procedure>
238
239===== check-plist
240
241<procedure>(check-plist LOC OBJ [ARGNAM]) -> *</procedure>
242
243===== check-pair
244
245<procedure>(check-pair LOC OBJ [ARGNAM]) -> *</procedure>
246
247===== check-blob
248
249<procedure>(check-blob LOC OBJ [ARGNAM]) -> *</procedure>
250
251===== check-vector
252
253<procedure>(check-vector LOC OBJ [ARGNAM]) -> *</procedure>
254
255===== check-structure
256
257<procedure>(check-structure LOC OBJ TAG [ARGNAM]) -> *</procedure>
258<procedure>(check-record LOC OBJ TAG [ARGNAM]) -> *</procedure>
259<procedure>(check-record-type LOC OBJ TAG [ARGNAM]) -> *</procedure>
260
261{{check-record}} and {{check-record-type}} are essentially synonyms.
262
263===== check-string
264
265<procedure>(check-string LOC OBJ [ARGNAM]) -> *</procedure>
266
267==== Type Checks Atoms
268
269===== Usage
270
271<enscript language=scheme>
272(import type-checks-atoms)
273</enscript>
274
275===== check-symbol
276
277<procedure>(check-symbol LOC OBJ [ARGNAM]) -> *</procedure>
278
279===== check-keyword
280
281<procedure>(check-keyword LOC OBJ [ARGNAM]) -> *</procedure>
282
283===== check-char
284
285<procedure>(check-char LOC OBJ [ARGNAM]) -> *</procedure>
286
287===== check-boolean
288
289<procedure>(check-boolean LOC OBJ [ARGNAM]) -> *</procedure>
290
291
292=== Type Errors
293
294==== Argument Conventions
295
296{{TYPNAM}} is a {{symbol}} or {{string}}, unless otherwise indicated.
297
298{{ARGNAM}} is a {{symbol}}, {{string}}, or {{#f}}. Default is {{#f}}.
299
300==== Usage
301
302<enscript language=scheme>
303(import type-errors)
304</enscript>
305
306==== Type Errors Basic
307
308===== Usage
309
310<enscript language=scheme>
311(import type-errors-basic)
312</enscript>
313
314===== make-bad-argument-message
315
316<procedure>(make-bad-argument-message [ARGNAM]) -> string</procedure>
317
318Returns an argument type error message for the, optional, {{ARGNAM}}.
319
320Example:
321
322<enscript language=scheme>
323(make-bad-argument-message "count")
324;=> "bad `count' argument"
325(make-bad-argument-message)
326;=> "bad argument"
327</enscript>
328
329===== make-type-name-message
330
331<procedure>(make-type-name-message TYPNAM) -> string</procedure>
332
333Returns an argument type message for the {{TYPNAM}} by supplying an article.
334
335Example:
336
337<enscript language=scheme>
338(make-type-name-message integer) ;=> an integer"
339(make-type-name-message "symbol in {foo bar baz}")
340;=> "a symbol in {foo bar baz}"
341</enscript>
342
343===== make-error-type-message
344
345<procedure>(make-error-type-message TYPNAM [ARGNAM]) -> string</procedure>
346
347Returns a type error message from the {{TYPNAM}} and optional {{ARGNAM}}.
348
349Uses {{make-bad-argument-message}} and {{make-type-name-message}} to build the
350message components.
351
352Example:
353
354<enscript language=scheme>
355(make-error-type-message 'integer "count")
356;=> "bad `count' argument type - not an integer"
357</enscript>
358
359===== signal-bounds-error
360
361<procedure>(signal-bounds-error LOC MSG OBJ...)</procedure>
362
363Raises a non-continuable type error - (({exn bounds)}}.
364
365===== signal-type-error
366
367<procedure>(signal-type-error LOC MSG OBJ...)</procedure>
368
369Raises a non-continuable type error - (({exn type)}}.
370
371===== error-argument-type
372
373<procedure>(error-argument-type LOC OBJ TYPNAM [ARGNAM])</procedure>
374
375Raises a {{type-error}} where is message is constructed from the {{TYPNAM}}
376and {{ARGNAM}}.
377
378Uses {{signal-type-error}} and {{make-error-type-message}}.
379
380===== warning-argument-type
381
382<procedure>(warning-argument-type LOC OBJ TYPNAM [ARGNAM])</procedure>
383
384A warning is issued with a message similar to that of {{error-argument-type}}.
385
386===== error-defined-value
387
388<procedure>(error-defined-value LOC OBJ [ARGNAM])</procedure>
389
390===== error-bound-value
391
392<procedure>(error-bound-value LOC OBJ [ARGNAM])</procedure>
393
394===== error-minimum-argument-count
395
396<procedure>(error-minimum-argument-count LOC ARGC MINARGC)</procedure>
397
398===== error-argument-count
399
400<procedure>(error-argument-count LOC ARGC MAXARGC)</procedure>
401
402===== define-error-type
403
404<macro>(define-error-type TYPNAM [TYPMSG])</macro>
405
406{{TYPNAM}} is a {{symbol}}.
407
408{{TYPMSG}} is a {{symbol}} or {{string}}.
409
410Creates a procedure definition for {{error-TYPNAM}} with the signature of the
411above error procedures. The type-name is either {{TYPMSG}}, when present,
412or {{"TYPNAM"}}.
413
414<enscript language=scheme>
415(define-error-type hash-table)
416;=>
417;(define (error-hash-table loc obj #!optional argnam)
418;  (error-argument-type loc obj "hash-table" argnam) )
419
420(define-error-type byte-order "symbol in {big-endian little-endian}")
421;=>
422;(define (error-byte-order loc obj #!optional argnam)
423;  (error-argument-type loc obj "symbol in {big-endian little-endian}" argnam) )
424</enscript>
425
426==== Type Errors Numbers
427
428===== Usage
429
430<enscript language=scheme>
431(import type-errors-numbers)
432</enscript>
433
434===== error-fixnum
435===== error-positive-fixnum
436===== error-natural-fixnum
437===== error-negative-fixnum
438===== error-non-positive-fixnum
439
440<procedure>(error-fixnum LOC OBJ [ARGNAM])</procedure>
441<procedure>(error-positive-fixnum LOC OBJ [ARGNAM])</procedure>
442<procedure>(error-natural-fixnum LOC OBJ [ARGNAM])</procedure>
443<procedure>(error-negative-fixnum LOC OBJ [ARGNAM])</procedure>
444<procedure>(error-non-positive-fixnum LOC OBJ [ARGNAM])</procedure>
445
446===== error-integer
447===== error-positive-integer
448===== error-natural-integer
449===== error-negative-integer
450===== error-non-positive-integer
451
452<procedure>(error-integer LOC OBJ [ARGNAM])</procedure>
453<procedure>(error-positive-integer LOC OBJ [ARGNAM])</procedure>
454<procedure>(error-natural-integer LOC OBJ [ARGNAM])</procedure>
455<procedure>(error-negative-integer LOC OBJ [ARGNAM])</procedure>
456<procedure>(error-non-positive-integer LOC OBJ [ARGNAM])</procedure>
457
458===== error-number
459===== error-positive-number
460===== error-natural-number
461===== error-negative-number
462===== error-non-positive-number
463
464<procedure>(error-number LOC OBJ [ARGNAM])</procedure>
465<procedure>(error-positive-number LOC OBJ [ARGNAM])</procedure>
466<procedure>(error-natural-number LOC OBJ [ARGNAM])</procedure>
467<procedure>(error-negative-number LOC OBJ [ARGNAM])</procedure>
468<procedure>(error-non-positive-number LOC OBJ [ARGNAM])</procedure>
469
470===== error-flonum
471
472<procedure>(error-flonum LOC OBJ [ARGNAM])</procedure>
473
474===== error-open-interval
475
476<procedure>(error-open-interval LOC NUM MINNUM MAXNUM [ARGNAM])</procedure>
477
478===== error-closed-interval
479
480<procedure>(error-closed-interval LOC NUM MINNUM MAXNUM [ARGNAM])</procedure>
481
482===== error-half-open-interval
483
484<procedure>(error-half-open-interval LOC NUM MINNUM MAXNUM [ARGNAM])</procedure>
485
486===== error-half-closed-interval
487
488<procedure>(error-half-closed-interval LOC NUM MINNUM MAXNUM [ARGNAM])</procedure>
489
490===== error-range
491
492<procedure>(error-range LOC START END [ARGNAM])</procedure>
493
494===== error-interval
495
496<procedure>(error-interval LOC NUM LEFT MINNUM MAXNUM RIGHT [ARGNAM])</procedure>
497
498{{LEFT}} is a {{character}}, {{symbol}}, or {{string}} that denotes the
499symbolic opening of an interval.
500
501{{RIGHT}} is a {{character}}, {{symbol}}, or {{string}} that denotes the
502symbolic closing of an interval.
503
504==== Type Errors Structured
505
506===== Usage
507
508<enscript language=scheme>
509(import type-errors-structured)
510</enscript>
511
512===== error-procedure
513
514<procedure>(error-procedure LOC OBJ [ARGNAM])</procedure>
515
516===== error-input-port
517
518<procedure>(error-input-port LOC OBJ [ARGNAM])</procedure>
519
520===== error-output-port
521
522<procedure>(error-output-port LOC OBJ [ARGNAM])</procedure>
523
524===== error-list
525
526<procedure>(error-list LOC OBJ [ARGNAM])</procedure>
527
528===== error-alist
529
530<procedure>(error-alist LOC OBJ [ARGNAM])</procedure>
531
532===== error-plist
533
534<procedure>(error-plist LOC OBJ [ARGNAM])</procedure>
535
536===== error-pair
537
538<procedure>(error-pair LOC OBJ [ARGNAM])</procedure>
539
540===== error-blob
541
542<procedure>(error-blob LOC OBJ [ARGNAM])</procedure>
543
544===== error-vector
545
546<procedure>(error-vector LOC OBJ [ARGNAM])</procedure>
547
548===== error-structure
549
550<procedure>(error-structure LOC OBJ TAG [ARGNAM])</procedure>
551
552{{error-record}} and {{error-record-type}} are essentially synonyms.
553
554===== error-string
555
556<procedure>(error-string LOC OBJ [ARGNAM])</procedure>
557
558==== Type Errors Atoms
559
560===== Usage
561
562<enscript language=scheme>
563(import type-errors-atoms)
564</enscript>
565
566===== error-symbol
567
568<procedure>(error-symbol LOC OBJ [ARGNAM])</procedure>
569
570===== error-keyword
571
572<procedure>(error-keyword LOC OBJ [ARGNAM])</procedure>
573
574===== error-char
575
576<procedure>(error-char LOC OBJ [ARGNAM])</procedure>
577
578===== error-boolean
579
580<procedure>(error-boolean LOC OBJ [ARGNAM])</procedure>
581
582
583=== SRFI 4 Checks
584
585==== Usage
586
587<enscript language=scheme>
588(import srfi-4-checks)
589</enscript>
590
591==== check-s8vector
592==== check-u8vector
593==== check-s16vector
594==== check-u16vector
595==== check-s32vector
596==== check-u32vector
597==== check-s64vector
598==== check-u64vector
599==== check-f32vector
600==== check-f64vector
601
602<procedure>(check-s8vector LOC OBJ [ARGNAM]) -> *</procedure>
603<procedure>(check-u8vector LOC OBJ [ARGNAM]) -> *</procedure>
604<procedure>(check-s16vector LOC OBJ [ARGNAM]) -> *</procedure>
605<procedure>(check-u16vector LOC OBJ [ARGNAM]) -> *</procedure>
606<procedure>(check-s32vector LOC OBJ [ARGNAM]) -> *</procedure>
607<procedure>(check-u32vector LOC OBJ [ARGNAM]) -> *</procedure>
608<procedure>(check-s64vector LOC OBJ [ARGNAM]) -> *</procedure>
609<procedure>(check-u64vector LOC OBJ [ARGNAM]) -> *</procedure>
610<procedure>(check-f32vector LOC OBJ [ARGNAM]) -> *</procedure>
611<procedure>(check-f64vector LOC OBJ [ARGNAM]) -> *</procedure>
612
613
614=== SRFI 4 Errors
615
616==== Usage
617
618<enscript language=scheme>
619(import srfi-4-errors)
620</enscript>
621
622==== error-s8vector
623==== error-u8vector
624==== error-s16vector
625==== error-u16vector
626==== error-s32vector
627==== error-u32vector
628==== error-s64vector
629==== error-u64vector
630==== error-f32vector
631==== error-f64vector
632
633<procedure>(error-s8vector LOC OBJ [ARGNAM])</procedure>
634<procedure>(error-u8vector LOC OBJ [ARGNAM])</procedure>
635<procedure>(error-s16vector LOC OBJ [ARGNAM])</procedure>
636<procedure>(error-u16vector LOC OBJ [ARGNAM])</procedure>
637<procedure>(error-s32vector LOC OBJ [ARGNAM])</procedure>
638<procedure>(error-u32vector LOC OBJ [ARGNAM])</procedure>
639<procedure>(error-s64vector LOC OBJ [ARGNAM])</procedure>
640<procedure>(error-u64vector LOC OBJ [ARGNAM])</procedure>
641<procedure>(error-f32vector LOC OBJ [ARGNAM])</procedure>
642<procedure>(error-f64vector LOC OBJ [ARGNAM])</procedure>
643
644
645== Bugs & Limitations
646
647* The {{make-*-message}} functions are English only.
648
649* No {{bignum}}, {{cplxnum}}, or {{ratnum}} checks/errors.
650
651
652== Author
653
654[[/users/kon-lovett|Kon Lovett]]
655
656
657== Version history
658
659; 3.1.0 ; Add {{type-errors/checks-basic/numbers/atoms/structured}} modules.
660; 3.0.0 ; CHICKEN 5 release.
661; 2.2.0 ; Fix {{check-range}} return.
662; 2.1.0 ; Add {{check-range}}, {{error-range}}, {{signal-bounds-error}}.
663; 2.0.1 ; Fix interval boundary symbols.
664; 2.0.0 ; Removed copy of ''inline-type-checks.scm'' to {{(chicken-home)}}. Ticket #1327
665; 1.13.0 ; Added egg module.
666; 1.12.6 ; ''inline-type-checks.scm'' copied to Chicken Repository. Produces shared+static object files.
667; 1.12.5 ; {{define-inline-check-type}} generates name with "%" prefix.
668; 1.12.4 ; Moved optional argument name checks until after error detected.
669; 1.12.3 ; Fix for {{error-minimum-argument-coun}} and {{error-argument-count}}.
670; 1.12.2 ; Better ''no-install'' support.
671; 1.12.1 ; Deprecated {{...-cardinal-...}} in favor of {{...-natural-...}}.
672; 1.12.0 ; Removed ''error-utils'' & ''conditions''.
673; 1.11.0 ; Added ''error-utils''.
674; 1.10.0 ; The {{check-...}} routines return the checked value.
675; 1.8.0 : Added srfi-4 support.
676; 1.7.0 :
677; 1.6.0 : Added interval support.
678; 1.5.0 : Added alist and argument count support.
679; 1.4.0 :
680; 1.3.0 : Added {{warning-argument-type}}.
681; 1.2.0 : Added {{make-error-type-message}} & fixed {{define-check+error-type}}.
682; 1.1.0 : Added {{make-condition+}}, {{condition-property-accessor*}} and {{make-condition-property-accessor}}.
683; 1.0.0 : Initial release.
684
685
686== License
687
688Copyright (C) 2009-2018 Kon Lovett.  All rights reserved.
689
690Permission is hereby granted, free of charge, to any person obtaining a
691copy of this software and associated documentation files (the Software),
692to deal in the Software without restriction, including without limitation
693the rights to use, copy, modify, merge, publish, distribute, sublicense,
694and/or sell copies of the Software, and to permit persons to whom the
695Software is furnished to do so, subject to the following conditions:
696
697The above copyright notice and this permission notice shall be included
698in all copies or substantial portions of the Software.
699
700THE SOFTWARE IS PROVIDED ASIS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
701IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
702FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
703THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
704OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
705ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
706OTHER DEALINGS IN THE SOFTWARE.
Note: See TracBrowser for help on using the repository browser.