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 */
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;