1# ---------------------------------------------------------------------- 2# PURPOSE: Electrical outlet supplying power for Appliances. 3# 4# AUTHOR: Michael J. McLennan Phone: (610)712-2842 5# AT&T Bell Laboratories E-mail: michael.mclennan@att.com 6# 7# RCS: $Id: Outlet.tcl,v 1.1 1998/07/27 18:41:30 stanton Exp $ 8# ---------------------------------------------------------------------- 9# Copyright (c) 1993 AT&T Bell Laboratories 10# ====================================================================== 11# Permission to use, copy, modify, and distribute this software and its 12# documentation for any purpose and without fee is hereby granted, 13# provided that the above copyright notice appear in all copies and that 14# both that the copyright notice and warranty disclaimer appear in 15# supporting documentation, and that the names of AT&T Bell Laboratories 16# any of their entities not be used in advertising or publicity 17# pertaining to distribution of the software without specific, written 18# prior permission. 19# 20# AT&T disclaims all warranties with regard to this software, including 21# all implied warranties of merchantability and fitness. In no event 22# shall AT&T be liable for any special, indirect or consequential 23# damages or any damages whatsoever resulting from loss of use, data or 24# profits, whether in an action of contract, negligence or other 25# tortuous action, arising out of or in connection with the use or 26# performance of this software. 27# ====================================================================== 28 29itcl_class Outlet { 30 constructor {config} {} 31 method config {config} {} 32 33 destructor { 34 if {$usage > 0} bill 35 } 36 37 method use {power} { 38 set usage [expr $usage+$power] 39 } 40 41 method sendBill {} { 42 if {[catch "open /tmp/bill w" fout] != 0} { 43 error "cannot create bill in /tmp" 44 } else { 45 set amount [format "$%.2f" [expr $usage*$rate]] 46 puts $fout "----------------------------------------" 47 puts $fout "/////////// MEGA-POWER, INC. ///////////" 48 puts $fout "----------------------------------------" 49 puts $fout " Customer: $owner" 50 puts $fout " Outlet: $this" 51 puts $fout " Usage: $usage kilowatt-hours" 52 puts $fout " " 53 puts $fout " Amount Due: $amount" 54 puts $fout "----------------------------------------" 55 close $fout 56 exec mail $owner < /tmp/bill 57 set usage 0 58 } 59 } 60 61 proc bill {{customer *}} { 62 foreach outlet [itcl_info objects -class Outlet] { 63 set owner [$outlet info public owner -value] 64 if {[string match $customer $owner]} { 65 $outlet sendBill 66 } 67 } 68 } 69 70 proc rate {{newval ""}} { 71 if {$newval == ""} { 72 return $rate 73 } 74 set rate $newval 75 } 76 77 public owner {} 78 protected usage 0 79 80 common rate 0.05 81} 82