zavgren@hpsrad.enet.dec.com (John Zavgren) (08/21/90)
I am about to write a discrete-event simulation of a communications network. The object-oriented paradigm looks like it should save a lot of programming time, but I have never programmed in an object-oriented language, let alone C++. Can anyone furnish me with a few well-written well-commented C++ programs that I can use to get started with this project? I am especially interested in queueing network simulations. RSVP John Zavgren
ecsv38@castle.ed.ac.uk (S Manoharan) (08/21/90)
In article <2533@ryn.esg.dec.com> zavgren@hpsrad.enet.dec.com (John Zavgren) writes: >I am about to write a discrete-event simulation of a communications >network. The object-oriented paradigm looks like it should save a lot >of programming time, but I have never programmed in an object-oriented >language, let alone C++. Can anyone furnish me with a few well-written >well-commented C++ programs that I can use to get started with this project? I have this library of C++ classes for constructing event-based (event-driven) simulations. If you need it, give me a loud shout. But, could someone tell me how event-based simulations compare with process-based simulations with respect to: 1. Ease of development 2. Code updatability and maintainability 3. Code size 4. ..... Are event-based simulations stuffs of stone-age? Manoharan.
korsberg@abaa.uucp (Ed Korsberg) (08/22/90)
In article <5845@castle.ed.ac.uk> ecsv38@castle.ed.ac.uk (S Manoharan) writes: >But, could someone tell me how event-based simulations compare >with process-based simulations with respect to: > 1. Ease of development > 2. Code updatability and maintainability > 3. Code size > 4. ..... > >Are event-based simulations stuffs of stone-age? > I think process based simulations are more appropriate for modeling multi-tasking computer systems. It would also seem to be more "object oriented" than event based simulations in that an object can be modeled independently of another object. Event based simulations still have their place but I believe that process based simulations have replaced it for most models. -------------------------------------------------------------------------------- -- Ed Korsberg E-mail: korsberg@aa.ab.com Allen Bradley phone: 313-998-2470 555 Briarwood Circle Ann Arbor, Mich 48104
korsberg@abaa.uucp (Ed Korsberg) (08/22/90)
In article <2533@ryn.esg.dec.com> zavgren@hpsrad.enet.dec.com (John Zavgren) writes: >I am about to write a discrete-event simulation of a communications >network. The object-oriented paradigm looks like it should save a lot >of programming time, but I have never programmed in an object-oriented >language, let alone C++. Can anyone furnish me with a few well-written >well-commented C++ programs that I can use to get started with this project? >I am especially interested in queueing network simulations. > I am interested in this too! Have you taken a look at the CSIM program available through MCC? It's only $150 and runs on a variety of machines. Also have you though about using Smalltalk for you simulation? I think that C++ is an attempt to mimic some of the concepts promoted in Smalltalk. Smalltalk already has simulation classes for doing discrete event simulation, although I do not know if it can do higher level process simulation. Please let me know which route you take for your project, I need to do something similar soon. ------------------------------------------------------------------------------ -- Ed Korsberg E-mail: korsberg@aa.ab.com Allen Bradley Inc. phone: 313-998-2470 555 Briarwood Circle Ann Arbor, Mich 48104
mip@IDA.LiU.SE (Mikael Patel) (08/23/90)
Discrete event simulation should be done in SIMULA, the grandfather of object-oriented programming languages. What you need is classes and COROUTINES to make life easy for you! C++ has only classes. Try looking at DEMOS. Its a nice simulation package written in Simula-67 that is very easy to use and generates all the statistics you need without you having to implement random functions, histograms, etc. There is a text book; G.M. Birtwistle, Discrete Event Modelling on Simula, Macmillan, 1979, ISBN 0-333-23881-8. Simula compilers for most modern machines (workstations, pc, macintosh, etc) are available. Mikael R.K. Patel Researcher and Lecturer Computer Aided Design Laboratory (CADLAB) Department of Computer and Information Science Linkoping University, S-581 83 LINKOPING, SWEDEN Phone: +46 13281821 Telex: 8155076 LIUIDA S Telefax: +46 13142231 Internet: mip@ida.liu.se UUCP: {uunet,mcsun,...}!liuida!mip Bitnet: MIP@SELIUIDA SUNET: LIUIDA::MIP
pawel@cs.UAlberta.CA (Pawel Gburzynski) (08/23/90)
From article <2533@ryn.esg.dec.com>, by zavgren@hpsrad.enet.dec.com (John Zavgren): > I am about to write a discrete-event simulation of a communications > network. The object-oriented paradigm looks like it should save a lot > of programming time, but I have never programmed in an object-oriented > language, let alone C++. Can anyone furnish me with a few well-written > well-commented C++ programs that I can use to get started with this project? > I am especially interested in queueing network simulations. > > RSVP > John Zavgren I am currently developing a package for modelling communication networks in g++. The package is called SMURPH and descends from LANSF -- an earlier version of the package written in plain C. For all practical purposes SMURPH is ready, but still undocumented. I anticipate to have a distributable version by the end of September. It is my intention to distribute SMURPH for FREE. There may be some subtle problems, though, as SMURPH will be used in my book on protocol design and Prentice Hall may have some objections. Anyway, I believe that individual cases can be handled without problems. In some sense SMURPH is both event-driven and process-driven. The user sees only the process driven part. If anybody is interested, I can provide some related papers (including examples of networks and protocols programmed in SMURPH). Moreover, LANSF (the SMURPH's predecessor) is available without restrictions and, of course, it is absolutely free. You can copy it using anonymous ftp from menaik.cs.ualberta.ca (pub/lansf.2.11.tar.Z). It comes with a (somewhat lengthy) manual that must be processed by LaTeX. Pawel Gburzynski Department of Computing Science University of Alberta 615 GSB Edmonton, Alberta, Canada T6G 2H1
jwa@lanl.gov (Wayne Anderson) (08/23/90)
Process oriented simulation seems to me to provide a somewhat more natural way of writing simulations. However, there also seems to be an efficiency trade off (as compared to discrete-event simulation). Herb Schwetman, the author of CSIM, also has a "C++" version but I'm not sure if he is distributing it as yet. Another simulator coming down the pike is XSIM being developed by Bob Jump at Rice. XSIM is based on, and written in, C++. It actually is a family of simulators: ESIM, a discrete-event simulator; PSIM, a process oriented simulator; and ASIM a parallel computer simulator. Bob gave me a rough draft of his user manual and I've been quite impressed. It looks to me like they've done a very thorough job. Wayne
bs@alice.UUCP (Bjarne Stroustrup) (08/23/90)
> From: korsberg@abaa.uucp (Ed Korsberg @ Allen Bradley) > In article <2533@ryn.esg.dec.com> zavgren@hpsrad.enet.dec.com (John Zavgren) writes: > >I am about to write a discrete-event simulation of a communications > >network. The object-oriented paradigm looks like it should save a lot > >of programming time, but I have never programmed in an object-oriented > >language, let alone C++. Can anyone furnish me with a few well-written > >well-commented C++ programs that I can use to get started with this project? > >I am especially interested in queueing network simulations. > > I am interested in this too! Have you taken a look at the CSIM program > available through MCC? It's only $150 and runs on a variety of machines. > Also have you though about using Smalltalk for you simulation? > I think that C++ is an attempt to mimic some of the concepts promoted in Smalltalk. C++ wasn't `an attempt to mimic some of the concepts promoted in Smalltalk.' It is the result of blending the Simula class concept into C in such a way that C's low-level efficiency and general abilities and a system's programming language wasn't impared. The first use of C++ was for Simula-like simulations (what is called process level simulation) with thousands of processes. The task library that comes with the AT&T distribution supports such work in a way rather similar to what is provided in Simula.
kjetil@ifi.uio.no (Holm-Kjetil Holmsen) (08/23/90)
In article <5606@abaa.UUCP>, korsberg@abaa.uucp (Ed Korsberg) writes: > > Also have you though about using Smalltalk for you simulation? > I think that C++ is an attempt to mimic some of the concepts promoted in > Smalltalk. > Not quite right! C++ _originally_ was an attempt to mimic the _simulation_ part of SIMULA-67. > Smalltalk already has simulation classes for doing discrete event > simulation, although I do not know if it can do higher level process > simulation. > The funny part of this is that the Smalltalk simulation classes are (at least was) based on the SIMULA-67 simulation concept. Actually, the idea of Smalltalk was born when Allan Key learned about SIMULA doing his Ph.D. thesis. The chapter on simulation in the "Smalltalk books" is more or less a copy of the chapter on "class simulation" in the book "SIMULA BEGIN" by O-J Dahl et. al. The "carwash" example is a _direct_ copy. Simula originated in the beginning of the '60s, as an Algol based language for descrete event simulation. This language was refined, and emerged as a superset of Algol-60 in 1967: a block-structured laguage with the class concept (with inheritance and virtuals) Holm-Kjetil Holmsen, C.Sc student email: kjetil@ifi.uio.no Dept. of Informatics University of Oslo NORWAY
korsberg@abaa.uucp (Ed Korsberg) (08/23/90)
In article <60862@lanl.gov> jwa@lanl.gov (Wayne Anderson) writes: >Another simulator coming down the pike is XSIM being developed by Bob Jump >at Rice. XSIM is based on, and written in, C++. It actually is a family >of simulators: ESIM, a discrete-event simulator; PSIM, a process oriented >simulator; and ASIM a parallel computer simulator. Bob gave me a rough >draft of his user manual and I've been quite impressed. It looks to me like >they've done a very thorough job. I think this news group and/or the comp.simulation group would be very interested in this new package. Would Bob Jump be willing to post it to the net or e-mail it to interested parties (like myself)? -- Ed Korsberg E-mail: korsberg@aa.ab.com Allen Bradley Inc. phone: 313-998-2470 555 Briarwood Circle Ann Arbor, Mich 48104
gordon@mead.UUCP (Gordon Edwards) (08/23/90)
To the person who originally started this thread. In article <1990Aug22.171319.12499@ida.liu.se>, mip@IDA.LiU.SE (Mikael Patel) writes: |> |> Discrete event simulation should be done in SIMULA, the grandfather of |> object-oriented programming languages. What you need is classes and |> COROUTINES to make life easy for you! C++ has only classes. Try looking |> at DEMOS. Its a nice simulation package written in Simula-67 that is very |> easy to use and generates all the statistics you need without you |> having to implement random functions, histograms, etc. There is a text |> book; G.M. Birtwistle, Discrete Event Modelling on Simula, Macmillan, |> 1979, ISBN 0-333-23881-8. Simula compilers for most modern machines |> (workstations, pc, macintosh, etc) are available. |> First, remember that there is three (at least) different flavors of the discrete-event simulation. You do not need coroutines if you are using the event-scheduling or activity-scanning paradigms. AT&T provides a task library that will allow you to perform the necessary tasking operations for the process-interaction paradigm. I have used C++ for event-scheduling simulations, and have found it to be quite flexible. Process-interaction simulations are currently very popular, however, they allow the introduction of artifactual deadlock. Depending on your level of experience with discrete-event simulations, you might want to stick to the event-scheduling paradigm (concentrates on the events). -- Gordon Edwards Mead Data Central, Dayton OH
vaughan@mcc.com (Paul Vaughan) (08/23/90)
Discrete event simulation should be done in SIMULA, the grandfather of object-oriented programming languages. What you need is classes and COROUTINES to make life easy for you! C++ has only classes. Try looking at DEMOS. Its a nice simulation package written in Simula-67 that is very easy to use and generates all the statistics you need without you having to implement random functions, histograms, etc. There is a text book; G.M. Birtwistle, Discrete Event Modelling on Simula, Macmillan, 1979, ISBN 0-333-23881-8. Simula compilers for most modern machines (workstations, pc, macintosh, etc) are available. Not to knock SIMULA, but you can get all these things and more in C++. For instance, ATT distributes its tasking library (coroutines) and there should be a tasking package in libg++ soon. Libg++ has a choice of random stream generators and about every distribution you could need. It also has classes for recording statistics, histograms, etc. You can get plotters (notably Dag Bruck's plotter in the InterViews contrib library) and all sorts of useful classes in the public domain or in libraries. I'm not sure what SIMULA does in the way of dynamic type checking, but you can use the NIHL stuff to accomplish that in C++. So, there certainly is a choice these days. Paul Vaughan, MCC CAD Program | ARPA: vaughan@mcc.com | Phone: [512] 338-3639 Box 200195, Austin, TX 78720 | UUCP: ...!cs.utexas.edu!milano!cadillac!vaughan
rjfrey@kepler.com (Robert J Frey) (08/23/90)
In article <60862@lanl.gov> jwa@lanl.gov (Wayne Anderson) writes: >Process oriented simulation seems to me to provide a somewhat more natural >way of writing simulations. However, there also seems to be an efficiency >trade off (as compared to discrete-event simulation). > I'm aware that many people feel that way, of course, but for me whether I use a discrete-event or process-oriented approach depends very much on the problem at hand. For simulations of any size or complexity I find it most convenient to move back and forth between representations, which is why I prefer languages such as SIMSCRIPT or SLAM. I also believe very strongly that any serious simulation facility has to pro- vide for both approaches. A big problem with process-oriented approaches is extensibility; often I am forced into an event-oriented representation because the process-oriented one can't quite handle what I want. Because I often choose an event-oriented representation, I want it available, but I want it to be my choice. This is something OO techniques can go a long way towards solving. -- Dr. Robert J Frey, Kepler Financial Management, Ltd. rjfrey@kepler.com *or* frey@chaos.sunysb.edu voice: (516) 689-6300 * fax: (516) 751-8678
davidm@uunet.UU.NET (David S. Masterson) (08/24/90)
In article <60862@lanl.gov> jwa@lanl.gov (Wayne Anderson) writes:
Process oriented simulation seems to me to provide a somewhat more natural
way of writing simulations. However, there also seems to be an efficiency
trade off (as compared to discrete-event simulation).
Could someone please explain (briefly) what process oriented simulation is and
contrast it to event oriented simulation? Something tells me I'll probably
get it as soon as someone starts explaining it, but, right now, its meaning
escapes me.
Thanks
--
====================================================================
David Masterson Consilium, Inc.
uunet!cimshop!davidm Mtn. View, CA 94043
====================================================================
"If someone thinks they know what I said, then I didn't say it!"
grunwald@foobar.colorado.edu (Dirk Grunwald) (08/24/90)
The ``awesime-2.0'' library implements threads and a one subclass implements a SimulationMultiplexor for threads that provides a typical process-oriented simulation environment. The awesime threads will eventually be integrated into libg++ (doub, stop me if I lie). It current works on i386, m68k, ns32k, MIPS, SPARC and m88k. True parallelism is only current available on the Encore Multimax; it should be simple to hack for the solbourne (sparc) or sequenet (i386), but i haven't done it yet. I'm planning on finding a student to hack a discrete event simulation environment using this threads package, allowing people to implement distributed simulation environments as well as simpler global time systems. IMHO, DES packages are more efficient than process oriented systems (POS), but can be more of a pain to set up if they don't match your model very well. They're more eff. because you don't need to switch thread context all the time. You can implement it to maintain context using e..g, one or two words in an object. Thus, you could get decent performance out of e.g., a SPARC, which is very hard for POS because of all the register window overhead. For a ``proper'' DES, you'd only have one thread per physical CPU, and use those to execute the DES objects. Dirk Grunwald -- Univ. of Colorado at Boulder (grunwald@foobar.colorado.edu) (grunwald@boulder.colorado.edu)
gordon@mead.UUCP (Gordon Edwards) (08/24/90)
In article <CIMSHOP!DAVIDM.90Aug23104145@uunet.UU.NET>, cimshop!davidm@uunet.UU.NET (David S. Masterson) writes: |> In article <60862@lanl.gov> jwa@lanl.gov (Wayne Anderson) writes: |> |> Process oriented simulation seems to me to provide a somewhat more natural |> way of writing simulations. However, there also seems to be an efficiency |> trade off (as compared to discrete-event simulation). |> |> Could someone please explain (briefly) what process oriented simulation is and |> contrast it to event oriented simulation? Something tells me I'll probably |> get it as soon as someone starts explaining it, but, right now, its meaning |> escapes me. |> The process oriented, or process-interaction, simulation is a discrete-event simulation. There are four gross categories of simulations: Continuous-Event/Continuous-Time Continuous-Event/Discrete-Time Discrete-Event/Continous-Time Discrete-Event/Discrete-Time The term discrete-event simulations normaly refers to the discrete-event/ continuous-time category. This category can be further calssified into: Event-Scheduling Simulations Activity-Scanning Simulations Process-Interaction Simulations The event-scheduling simulations concentrate on the events that occur, activity- scanning simulations concentrate on the set of states required for an event to occur (often implemented using a big state table), and process-interaction simulations concentrate on the entities/objects as they are acted upon by events. Each type has its advantages and disadvantages. Process-interaction simulations have a great deal of popularity (I tend to agree with Wayne on their virtues), however, if you are not experienced developing simulations or you don't have a good understanding of concurrent processing they can be dangerous. Process-interaction simulations can introduce "artifactual deadlock". This is a type of deadlock that occurs due to the implementation of the simulation. For example, in a harbor simulation tankers wait outside the harbor for a tug to take them to the (1) berth, they then unload and wait for the tug to take them back to sea. Now from a process viewpoint (highly simplified): [1] Tanker_1 comes into port. [2] Tanker_1 acquires tug. [3] Tanker_1 acquires berth. [4] Tanker_1 releases tug and begins to unload. [5] Tanker_2 arrives and acquires the tug. [6] Tanker_2 tries to acquire the berth and is locked. [7] Tanker_1 finishes unloading and tries to acquire the tug (to free the berth) and is locked. Now there are a number of things you can do to solve this problem (use a petri net for ideas) but the point is that this is not a real-life problem but a problem imposed by the model. Since process-interaction simulations are literaly multi-tasking, the deadlock is very real. -- Gordon Edwards Mead Data Central, Dayton OH
sam@cs.ed.ac.uk (S. Manoharan) (08/24/90)
In article <5845@castle.ed.ac.uk> ecsv38@castle.ed.ac.uk (S Manoharan) I wrote: > >But, could someone tell me how event-based simulations compare >with process-based simulations with respect to: > 1. Ease of development > 2. Code updatability and maintainability > 3. Code size > 4. ..... > I just found a reference which suggests the better-ness of process-based simulations over others: @article{Birt85, author = "Graham Birtwistle and Greg Lomow and Brian Unger and Paul Lucker", year = "May 1985", journal = "Trans. of the society for computer simulation", number = "1", pages = "27-56", title = "Process Style Packages for Discrete Event Modelling: Experience from the transaction, activity and event approaches", volume = "2" } In case someone's interested. Manoharan. Ps - Those who wanted the class library, please hold on for a few days. I will mail it soon. -- S. Manoharan Janet: sam@uk.ac.ed.lfcs Dept of Computer Science Uucp : ..!mcsun!ukc!edcastle!lfcs!sam University of Edinburgh Arpa : sam%lfcs.ed.ac.uk@nsfnet-relay.ac.uk Edinburgh EH9 3JZ UK. Voice: 667 8323(home) 667 1081x2708(office)
vaughan@mcc.com (Paul Vaughan) (08/25/90)
Could someone please explain (briefly) what process oriented simulation is and contrast it to event oriented simulation? Something tells me I'll probably get it as soon as someone starts explaining it, but, right now, its meaning escapes me. Briefly, process base simulation allows simulation time to pass during the execution of a user-written function expressing simulation behavior. Functions such as wait(time), waitforevent(Event), etc., are provided in a library. That's why you need process switching capability to keep the context of several execution environments that are all at least conceptually concurrently executing. In a purely event based system all behavior functions are executed in zero simulation time. Events may be posted to cause things to happen at future times. All process based systems are essentially constructed out of event scheduling systems (it's all discrete event simulation, after all). Most process based libraries support the use of explicit events in addition to wait constructs. Paul Vaughan, MCC CAD Program | ARPA: vaughan@mcc.com | Phone: [512] 338-3639 Box 200195, Austin, TX 78720 | UUCP: ...!cs.utexas.edu!milano!cadillac!vaughan
hansen@pegasus.ATT.COM (Tony L. Hansen) (08/26/90)
< From: bs@alice.UUCP (Bjarne Stroustrup) < The first use of C++ was for Simula-like simulations (what is called < process level simulation) with thousands of processes. The task library < that comes with the AT&T distribution supports such work in a way rather < similar to what is provided in Simula. Another implementation of a task library, called class process, is available as a part of The C++ Answer Book. The code is written completely in C++ and is portable to most machines. (Some restrictions do apply.) The code itself is available from netlib@research.att.com. (Send a message with the contents "send index from c++/answerbook" to that address for further information.) Tony Hansen att!pegasus!hansen, attmail!tony hansen@pegasus.att.com
feustel@well.sf.ca.us (David Alan Feustel) (08/27/90)
What is the relationship between C++ and Concurrent C? If Concurrent C is a superset of C++ is there any company making the product available for pcs? -- Phone: (work) 219-482-9631; MCI mail: DFEUSTEL E-mail: feustel@well.sf.ca.us {ucbvax,apple,hplabs,pacbell}!well!feustel USMAIL: Dave Feustel, 1930 Curdes Ave, Fort Wayne, IN 46805-2710
rjfrey@kepler.com (Robert J Frey) (08/27/90)
In article <CIMSHOP!DAVIDM.90Aug23104145@uunet.UU.NET> cimshop!davidm@uunet.UU.NET (David S. Masterson) writes: >Could someone please explain (briefly) what process oriented simulation is and >contrast it to event oriented simulation? > In discrete event simulation the the system is represented by a collection of states and a set of events which describe state changes. In process oriented simulations the simulation is defined by a collection of processes: that is the sequence of events that an entity experiences as it goes through the sys- tem. In languages which support both paradigms the process-oriented part of the model is "interpeted" or "compiled" internally as event-oriented. Rather than go into more detail here, I recommend you check an introductory text on simulation. E.g., Averill Law has a pretty good text available. Sorry, I don't have the title with me. George Fishman's Principles of Discrete Event Simulation is also good. -- Dr. Robert J Frey, Kepler Financial Management, Ltd. rjfrey@kepler.com *or* frey@chaos.sunysb.edu voice: (516) 689-6300 * fax: (516) 751-8678
jxf@procyon.cis.ksu.edu (Jerry Frain) (08/28/90)
In article <20036@well.sf.ca.us> feustel@well.sf.ca.us (David Alan Feustel) writes: >What is the relationship between C++ and Concurrent C? If Concurrent C >is a superset of C++ is there any company making the product available >for pcs? Wow, ever since this thread started up, I've been wondering if anyone was ever going to mention Concurrent C. The answer to your question is "no," Concurrent C is not a superset of C++. However, it bears a striking resemblence to C++ in that the process delcaration, creation, and invocations of transactions are similiar to methods and data of classes. However, there is a Concurrent C++ under development at Bell Labs (see the paper "Concurrent C++: Concurrent Programming With Class(es)" written by N.H. Gehani and W.D. Roome for more info). I am very excited at the prospects of the merging of these two languages, which have much in common, and yet much to share with each other. As far as discrete event simulation goes, it is my personal opinion (after using both C++ and Concurrent C) that Concurrent C is better suited for the job. -- Jerry Frain -- Perpetual Student Kansas State University Department of Computing & Info Sciences Internet : jxf@ksuvax1.cis.ksu.edu Manhattan, Kansas UUCP : ...!{rutgers,textbell}!ksuvax1!jxf
muyanja@hpdmd48.boi.hp.com (bill muyanja) (09/09/90)
[Dr. Robert Frey writes] |Rather than go into more detail here, I recommend you check an introductory |text on simulation. E.g., Averill Law has a pretty good text available. Sorry, I don't have the title with me. George Fishman's Principles of Discrete Event |Simulation is also good. The book is: Law, Averill M. and Kelton, W. David: _Simulation Modeling and Analysis_ McGraw-Hill, 1982. The second edition may be out by now - I had the misfortune of being one of the poor graduate students who beta-tested it in 1987! Professor Law's book is an excellent treatment of discrete-event simulation, especially the stastistical aspects and output analysis. S. Manoharan has posted a discrete-event simulation platform, SILO, in comp.sources.unix. It is written in C++, and it is based on the concepts in M.H. MacDougall's "Simulating Computer Systems" (MIT Press, 1987). MacDougall's book itself is based on a lot of the concepts in Law and Kelton and includes a simulation system, "smpl", written in C, source code and all. It also contain fairly sophisticated examples of a multiprocessing computer simulation and an Ethernet LAN simulation, which is what the original poster may have been looking for. Greetings, Bill -----
muyanja@hpdmd48.boi.hp.com (bill muyanja) (09/09/90)
[Bill Muyanja writes] |S. Manoharan has posted a discrete-event simulation platform, SILO, in |comp.sources.unix. It is written in C++, and it is based on the concepts |in M.H. MacDougall's "Simulating Computer Systems" (MIT Press, 1987). SILO is actually in archive.comp.sources.misc. Greetings, Bill -----