home *** CD-ROM | disk | FTP | other *** search
- setdef:
- proc;
- %replace
- true by '1'b,
- false by '0'b,
- key_f by 0, /* principal key field */
- qty_f by 1, /* quantity field */
- prc_f by 2, /* price field */
- unk_f by 3; /* unknown field */
-
- %include 'attrib.dcl';
-
- dcl
- def file;
- dcl
- prc_start fixed ext,
- prc_len fixed ext,
- qty_start fixed ext,
- qty_len fixed ext,
- sales_tax dec(4,2) ext;
- dcl
- start fixed,
- finish fixed,
- last_fin fixed,
- i fixed;
-
-
- on undefinedfile(def)
- begin;
- put skip list('Missing or Empty DEF.DAT File');
- stop;
- end;
-
- open file(def) stream;
-
- on error(1)
- begin;
- put list('Invalid Data Item in DEF.DAT, line',
- lineno(def));
- stop;
- end;
-
- on endfile(def)
- go to end_def;
-
- att_cnt = 0;
- get file(def) list(sales_tax);
-
- do while (att_cnt <= max_att);
- i = att_cnt + 1;
- if i > max_att then
- i = 1;
- get file(def) list
- (att_chars(i), att_type(i), att_start(i), att_finish(i));
- att_cnt = att_cnt + 1;
- if att_cnt > max_att then
- do;
- put list('More than ',max_att,
- 'Fields in DEF.DAT');
- stop;
- end;
- end;
- end_def:
- if att_cnt = 0 then
- signal undefinedfile(def);
-
- prc_start = 0;
- qty_start = 0;
- /* validate fields, check for price and qty fields */
- last_fin = 0;
- do i = 1 to att_cnt;
- start = att_start(i);
- finish = att_finish(i);
- if start <= last_fin |
- start > finish |
- finish > max_siz then
- signal error(1);
- last_fin = finish;
- if att_type(i) = qty_f then
- do;
- qty_start = start;
- qty_len = finish - start + 1;
- end;
- if att_type(i) = prc_f then
- do;
- prc_start = start;
- prc_len = finish - start + 1;
- end;
- end;
- if prc_start = 0 | qty_start = 0 then
- do;
- put skip list('Missing Price or Quantity in DEF.DAT');
- stop;
- end;
-
- end setdef;
-