home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol079
/
sale.pli
< prev
next >
Wrap
Text File
|
1983-08-29
|
4KB
|
186 lines
sale:
proc;
/* sale mode */
%replace
true by '1'b,
false by '0'b;
%include 'attrib.dcl';
%include 'key.dcl';
dcl
prc_start fixed ext,
prc_len fixed ext,
qty_start fixed ext,
qty_len fixed ext,
sales_tax dec(4,2) ext;
dcl
list file,
sysin file,
device char(11) var,
rec char(max_siz);
dcl
open_data entry,
close_data entry,
input_key entry(char(max_siz)),
locate_key entry(char(max_siz)) returns(bit),
alter_rec entry(char(max_siz)),
att_len entry(fixed) returns(fixed);
on endfile(sysin)
go to end_sale;
call open_data();
put edit('Sales Mode','')(skip,a);
do while(true);
/* read next request */
put skip list('Output To: ');
get list(device);
open file(list) print title(device);
put file(list) page;
call transaction();
close file(list);
end;
dcl
qty fixed,
qty_sold fixed,
item_no fixed,
total_price dec(10,2);
transaction:
proc;
on endfile(sysin)
go to summary;
on error(1)
begin;
put edit('Bad Data in Record','')
(column(4),a,skip,a);
go to retry;
end;
call header();
total_price = 0.00;
item_no = 1;
retry:
do while(true);
call input_key(rec);
if locate_key(rec) then
do;
put edit('Quantity Sold')
(column(4),a(max_chr));
get list(qty_sold);
qty = get_qty();
if qty_sold > qty then
call too_few();
else
call itemize();
end;
end;
summary:
call trailer();
end transaction;
itemize:
proc;
/* process one item */
dcl
line_price dec(10,2),
item_price dec(10,2);
item_price = get_price();
line_price = dec(qty_sold,3) * item_price;
put file(list) edit('|',item_no,
'|',substr(rec,att_start(1),att_len(1)),
'|',qty_sold,
'|',item_price,
'|',line_price,'|')
(skip, a,f(2), a,a(max_chr), a,f(3),
a,p'$,$$9V.99', a,p'$$,$$9V.99', a);
/* operation sucessful, change record */
total_price = total_price + line_price;
item_no = item_no + 1;
call set_qty (qty - qty_sold);
call alter_rec(rec);
end itemize;
header:
proc;
/* write the invoice header */
call line();
put file(list) edit
('| #|','Item','|Qty| Price | Sub Tot |')
(skip,a,a(max_chr),a);
call line();
end header;
trailer:
proc;
/* write summary records */
dcl
tax dec(10,2);
call line();
put file(list) edit
('|','Sub Total','',total_price,'|') (r(fmt));
tax = total_price * sales_tax / 100 + .005;
put file(list) edit
('|','Sales Tax','',tax,'|') (r(fmt));
total_price = total_price + tax;
call line();
put file(list) edit
('|','Total','',total_price,'|') (r(fmt));
call line();
fmt: format
(skip, a,a(15),a(max_chr),p'$ZZZ,ZZ9V.99',a);
end trailer;
line:
proc;
/* write a line of '-' */
dcl
i fixed;
put file(list) skip edit
(('-' do i = 1 to max_chr + 28)) (a);
end line;
get_price:
proc returns(dec(10,2));
/* get price field for current record */
dcl
i fixed,
v char(max_chr) var;
v = substr(rec,prc_start,prc_len);
/* remove trailing blanks */
i = verify(v,'0123456789.');
if i > 0 then
v = substr(v,1,i-1);
return (v);
end get_price;
get_qty:
proc returns(fixed);
/* get quantity for current record */
return (substr(rec,qty_start,qty_len));
end get_qty;
set_qty:
proc(c);
/* set the quantity field for current record */
dcl
c fixed,
v char(9) var;
v = c;
substr(rec,qty_start,qty_len) =
substr(v,verify(v,' '));
end set_qty;
too_few:
proc;
put edit('Only',qty,'In Inventory','')
(column(4),a,f(6),x(1),a,skip);
end too_few;
end_sale:
call close_data();
close file(list);
end sale;