Slashdot Mirror


Source Code for CTSS released

Mainframes ROCK! writes "The source code for the Compatible Time-Sharing System, CTSS, has been released, and the here is the source code. CTSS was one of the first time-sharing operating systems and a direct ancestor of Linux. Developed at MIT in the 1960's on a specially modified IBM 7094 system.; it was developed at Project MAC at MIT. CTSS was first published, as well as operated in a time-sharing environment, in 1961; in addition, it was the system with the first computerized text formatting utility, and one of the very first to have inter-user electronic mail."

46 of 177 comments (clear)

  1. The Slashdot super-code-bowl 2k4 by SeanTobin · · Score: 4, Funny
    Welcome to the first Slashdot Super Code Bowl!

    Hello potential prize winner! Consider using your time to create an entry in this year's Slashdot Super Code Bowl. Prizes will be awarded to anyone who proves their worth by submitting code that fits any of these categories:
    • Rewriting CTSS in under 1k lines of Perl.
    • Porting Perl to CTSS.
    • Successfully submitting a patch to the original author(s) and having it included in an updated release.
    • Creating a 'Proof of Concept' virus, trojan, or worm designed to infect CTSS AND be able to spread to other CTSS machines.
    • Locating SCO IP within CTSS.
    • Adding necessary functions and support to CTSS to allow it to successfully emulate itself.
    • Running CTSS on any appliance that does not normally include a real operating system (Toasters, non-gui remote controls, Gateway PC's)


    Other categories may be added, and bonus prizes for most original, most useless, and most useful code will also be awarded.

    --
    Karma: SELECT `karma` FROM `users` WHERE `userid`=138474;
    1. Re:The Slashdot super-code-bowl 2k4 by GulagMoosh · · Score: 5, Funny

      Can I submit my entry on punch cards?

    2. Re:The Slashdot super-code-bowl 2k4 by 5m477m4n · · Score: 3, Funny

      Mmm-yeah I'm going to need you to go ahead and put the new cover sheet on your TPS reports on CTSS ASAP. Mmm-kay. Oh yeah, I'm going to need to come in on Sunday too.

      --

      ---
      Those who can, do
      Those who can't, teach
      Those who don't know how, supervise
    3. Re:The Slashdot super-code-bowl 2k4 by archeopterix · · Score: 2, Funny
      I'd be willing to wager a majority of /. readers have never worked with cards or papertape.
      What do you think I wipe my ass with, huh?
  2. It's free, but there's a catch by Anonymous Coward · · Score: 3, Funny

    You have to go to their half day seminar.

  3. A BitTorrent of the source file... by tcopeland · · Score: 5, Informative

    ...is on RubyForge right here.

    It's 400K lines of assembly code... what could be sweeter?

    1. Re:A BitTorrent of the source file... by tcopeland · · Score: 2, Interesting
      It's worth mirroring the torrent just for the comments in the code:
      [tom@hal ctss]$ grep "WHAT CAN" *
      util: 01737 0074 00 4 00014 BADCF TSX PRNTER,4 WHAT CAN I SAY--
      [tom@hal ctss]$
      Nice.
  4. Re:direct ancestor? by Three+Headed+Man · · Score: 2, Insightful

    Correct me if I'm wrong, but wasn't Linux written by Linus Torvalds back in the early 90's?

    --
    I'm probably at the karma cap. Mod up a funny troll instead, it lightens the mood :)
  5. RMS by MikeMacK · · Score: 2, Interesting

    If I remember correctly, it was CTSS (or a derivative there of) that RMS hacked on at MIT, so it's cool to see it still out there to be hacked on.

    1. Re:RMS by SWroclawski · · Score: 4, Informative

      It was the Incompatible Time Sharing System.

      More information here: http://www.its.os.org/

  6. Revolution OS by bhsx · · Score: 2, Informative

    According to RMS in Revolution OS, this was also the machine that he worked with at MIT. I believe it was the fact the he had access to all the code on the system that lead him down his path, believing that you need source code availability to fix/tweak/hack to your needs.

    --
    put the what in the where?
    1. Re:Revolution OS by 0racle · · Score: 2, Insightful

      As others have already said, I believe that RMS mentioned the Incompatible Time Sharing system that he worked on. Since this was also started when RMS was only 8, I doubt he had much to do with this one.

      --
      "I use a Mac because I'm just better than you are."
    2. Re:Revolution OS by pilgrim23 · · Score: 2, Informative

      Does anyone recall CALL-OS the similar time share system for the IBM OS/360? At the University of New Mexico back in the 70s some local hackers built a add-on to it called ATS for Aardvark Time Share which allowed many many things including total (and stealth) control of the zero protect key of the mainframe.

      --
      - Minutus cantorum, minutus balorum, minutus carborata descendum pantorum.
  7. SCO? by Carnildo · · Score: 2, Funny

    CTSS was one of the first time-sharing operating systems and a direct ancestor of Linux.

    Does this mean SCO has the code it needs to prove that Linux contains Unix code?

    --
    "They redundantly repeated themselves over and over again incessantly without end ad infinitum" -- ibid.
  8. REMINISCENCES ON THE HISTORY OF TIME SHARING by Anonymous Coward · · Score: 5, Informative

    REMINISCENCES ON THE HISTORY OF TIME SHARING
    John McCarthy, Stanford University

    1983 Winter or Spring

    I remember thinking about time-sharing about the time of my first contact with computers and being surprised that this wasn't the goal of IBM and all the other manufacturers and users of computers. This might have been around 1955.

    By time-sharing, I meant an operating system that permits each user of a computer to behave as though he were in sole control of a computer, not necessarily identical with the machine on which the operating system is running. Christopher Strachey may well have been correct in saying in his letter to Donald Knuth that the term was already in use for time-sharing among programs written to run together. This idea had already been used in the SAGE system. I don't know how this kind of time-sharing was implemented in SAGE. Did each program have to be sure to return to an input polling program or were there interrupts? Who invented interrupts anyway? I thought of them, but I don't believe I mentioned the idea to anyone before I heard of them from other sources.

    My first attempts to do something about time-sharing was in the Fall of 1957 when I came to the M.I.T. Computation Center on a Sloan Foundation fellowship from Dartmouth College. It was immediately clear to me that the time-sharing the IBM 704 would require some kind of interrupt system. I was very shy of proposing hardware modifications, especially as I didn't understand electronics well enough to read the logic diagrams. Therefore, I proposed the minimal hardware modification I could think of. This involved installing a relay so that the 704 could be put into trapping mode by an external signal. It was also proposed to connect the sense switches on the ccnsole in parallel with relays that could be operated by a Flexowriter (a kind of teletype based on an IBM typewriter).

    When the machine went into trapping mode, an interrupt to a fixed location would occur the next time the machine attempted to execute a jump instruction (then called a transfer). The interrupt would occur when the Flexowriter had set up a character in a relay buffer. The interrupt program would then read the character from the sense switches into a buffer, test whether the buffer was full, and if not return to the interrupted program. If the buffer was full, the program would store the current program on the drum and read in a program to deal with the buffer.

    It was agreed (I think I talked to Dean Arden only.) to install the equipment, and I believe that permission was obtained from IBM to modify the computer. The connector to be installed in the computer was obtained.

    However, at this time we heard about the "real time package" for the IBM 704. This RPQ (request for price quotation was IBM jargon for a modification to the computer whose price wasn't guaranteed), which rented for $2,500 per month had been developed at the request of Boeing for the purpose of allowing the 704 to accept information from a wind tunnel. Some element of ordinary time-sharing would have been involved, but we did not seek contact with Boeing. Anyway it was agreed that the real time package, which involved the possibility of interrupting after any instruction, would be much better than merely putting the machine in trapping mode. Therefore we undertook to beg IBM for the real time package. IBM's initial reaction was favorable, but nevertheless it took a long time to get the real time package - perhaps a year, perhaps two.

    It was then agreed that someone, perhaps Arnold Siegel, would design the hardware to connect one Flexowriter to the computer, and later an installation with three would be designed. Siegel designed and build the equipment, the operating system was suitably modified (I don't remember by whom), and demonstration of on-line LISP was held for a meeting of the M.I.T. Industrial Affiliates. This demonstration, which I planned and carried out, had the audience in a fourth floor lecture room and me in the computer room an

    1. Re:REMINISCENCES ON THE HISTORY OF TIME SHARING by nero4wolfe · · Score: 2, Interesting
      I may have some information on SAGE... if I remember acronyms correctly, that was the first system developed for NORAD (North American Air Defence Command) by SDC (System Development Corporation). I was an SDC employee in the late 70's to early 80's and I still have the book published by SDC in the early 80's with the company history.

      I do remember there were displays in the SDC buildings about them building the first non-research time sharing system; the first commercial entity to run classes to teach programming, etc. If I heard correctly, those buildings in Santa Monica are long gone now, and I doubt that Burroughs/Unisys (the ultimate purchaser of SDC) would have kept those displays.

      There also was an early timesharing (in the sense of multiple displays; etc.) system called "Ursa Minor" developed at UCLA for their IBM/360 system. That was well entrenched for teaching purposes at UCLA in the early 70's; I think it was developed in the late 60's.

  9. Say Whaaat? Direct Ancestor? by kbahey · · Score: 4, Insightful

    a direct ancestor of Linux

    Direct ancestor? Not by a long shot. Unless you consider that any multi user, multi tasking, time sharing operating system as a direct ancestor.

  10. INDIRECT ancestor of UNIX by Anonymous Coward · · Score: 3, Informative

    ken thompson and dennis ritchie both used ctss, and cite it as an inspiration for unix. and we all know unix is linux's father's former roommate. what does that make linux? ...absolutely nothing.

  11. Re:direct ancestor? by motyl · · Score: 3, Interesting

    That only means that many people now call any UNIX system "Linux". In the popular culture, there is no UNIX. They just call it all "Linux".

    Lets see when people will call any Operating System "Linux"? Any guesses?

  12. If there was only a simh of IBM 709x by dyfet · · Score: 2, Interesting

    But alas there isn't. Actually, projects, like simh (or the hercules 360 emulator) do offer a chance to give new life to historic operating systems.

    1. Re:If there was only a simh of IBM 709x by YankeeInExile · · Score: 3, Informative

      There is a thread on this very topic over on alt.folklore.computers right now, and the concensus is: While the 7094 CPU is emulated, there is a lot of IO that is required for CTSS to run that is not ready for prime time - some of which is probably pretty easy to knock out, but some of which (the channel controller) is Big Black Voodoo, in terms of asynchronous operation with the main CPU.

      --
      How does the Slashdot Effect happen given that no slashdotters ever RTFA?
  13. Re:direct ancestor? by Zardus · · Score: 2, Insightful

    Ugh.. No, he didn't start from Minix. He wrote Linux from scratch, using Minix as a sort of model. Its like if you go into an elevator and take a ride, and then make your own elevator without looking through the elevator motors and the like.

    --
    You can mod your friends, you can mod your nose, but you can't mod your friend's nose.
  14. CTSS-ITS by World_Leader · · Score: 5, Informative

    CTSS (Compatible Time Sharing System) lent its name to MIT's ITS (Incompatible Time Sharing System) for the PDP-10.

    I'm pretty sure it was ITS that RMS developed Emacs (Editor Macros, or Eight Megs and Constantly Swapping) on but he'd know for sure.

    Also, from SAIL (Stanford Artificial Intelligence Laboratory) we got WAITS which was the West-coast Alternative to ITS.

    MULTICS also grew out of these roots, and Unix of course is a play on "Multics".

    1. Re:CTSS-ITS by World_Leader · · Score: 4, Informative

      Lets not forget also that ITS is an indirect ancestor of Windows NT...CTSS->ITS->TOPS-20->VMS->NT

      VMS is a direct descendant of RSX-11. In fact, VMS had an RSX-11 emulation which could run RSX-11 programs (and the VAX CPU had a PDP-11 emulation mode) and on early VMS versions you needed this as native VMS utilities were lacking or incomplete (MCR PIP ...)

      RSX-11 goes back to the early 1970's and was developed by the same Dave Cutler who is credited with being one of the architects of VMS and he later goes to Microsoft and works on NT so that much of your derivation is right.

      It's difficult to make simple, linear charts of operating systems; where's TOPS-10 in all this? It's not really a predecessor of TOPS-20. And then there's TENEX which was another PDP-10 OS, basically a rogue development effort at BBN when they tired of waiting for DEC to get TOPS-10 right. TOPS-20 was also known as TWENEX but that was mostly for humor's sake rather than any direct historical connection except inasmuch as back then all these OS's had historical connections.

      And just to throw in some gratuitous though related history, DEC's RT-11 most derives from RSX-11 (and DEC's DOS-11 not to be confused with Microsoft's DOS.)

      RT-11 is cloned by the writers of CPM for 8-bit systems, which in turn is cloned by DOS (yes, the one that launched Microsoft.)

    2. Re:CTSS-ITS by leighklotz · · Score: 3, Informative

      I suspect that "Eight Megs" refers to the later Unix EMACS versions, because the AI PDP-10 didn't have that much memory. The 256K x 36-bit word Ampex core memory racks were pretty big and I think AI had 758KWords, or 3.375 mega-octets, if you wanted to count it that way, which it didn't.

      E-MACS was a TECO macro package that RMS picked up. There was also T-MACS and R-MACS. When I used E-MACS, it was on v134, I think, and RMS for a couple of years been the only maintainer of it, but a small number of people were still using ^R mode in TECO or one of the other macro packages. When RMS stopped maintaining ITS and Twenex EMACS to start the GNU project, I maintained it for a while, but it was eventually clear that it wasn't the way of the future. By that time, Lisp Machines and the Vax had happened.

      By the way, last time I was at the computer museum in Mountain View, CA, I saw a Lisp Machine whose serial number (CADR 8) I recognized. I figured it was time to leave.

    3. Re:CTSS-ITS by Slashamatic · · Score: 4, Interesting
      Not quite right. VMS was a descendent of RSX-11M/M+, which in turn had very little to do with RSX-11D/IAS which bosted some really ugly code. DOS-11 was also known as DOS/BATCH had some bits from RSX-11D/IAS but was really its own very primitive thing. At the time, DOS/BATCH was seen if anything to have some relation to the IBM 1130/1800 operating system which the PDP was taking over from.

      TOPS-20 was somewhat of a rewrite if TOPS-10.

      RT-11 doesn't really relate to RSX. The source code was quite different. However there were some similiarities with one of the command line interpreters (DCL) and some utilities like PIP. It should be noted that PIP (Peripheral Interchange Program) had been knocking around for a long time and then something like it ended up in CP/M.

      I wouldn't really call CP/M a clone of RT, many of the system services and concepts behind them were very different. RT-11 was designed as a lab operating system and had a foregroun/background mechanism built-in, which was less of a hack than CPM's TSRs. The PDP-11 had a very advanced instruction architecture at the time and many concepts did not translate to the 8088.

  15. So.. how long before the Gameboy Advance port? by slashdot_punk · · Score: 2, Funny

    *ahem*

    --


    I reset my case.
  16. Re:another joke by PetiePooo · · Score: 2, Funny

    Imagine a Beowulf cluster of CTSS installations running in 7094 emulators on a... oh, what's the point!

  17. Re:GREAT! by BabyDave · · Score: 2, Funny

    I consider myself an expert in FAP.

  18. What would you bet... by museumpeace · · Score: 5, Funny

    that this 40 year old code has fewer buffer overrun vulnerabilities than XP, even with SuperPatch2?

    --
    SLASHDOT: news for people who can't concentrate on work or have no life at all and got tired of yelling back at the TV.
  19. Not direct by Anonymous Coward · · Score: 3, Insightful

    CTSS was one of the first time-sharing operating systems and a direct ancestor of Linux.

    What is the basis for this statement? Linux neither contains CTSS code, nor was modelled upon it, and neither were any of its ancestors. It's an indirect ancestor maybe.

  20. History of CTSS by Sounder40 · · Score: 4, Interesting
    I have a copy of the paper Melinda Varian did on the history of IBM's operating system called VM/370, VM/SP, VM/ESA and now zVM. I'd call it VM, but that's become a rather generic term. It includes a section on the history of CTSS, and it's very, very interesting. In fact, I would say that this was one of the most influential papers I ever read. Well worth the read.

    I hope Melinda doesn't hunt me down and kill me for causing a /. storm on her web site, but the paper is available at http://pucc.princeton.edu/~melinda/.

    Enjoy.

    --
    A clever person solves a problem, A wise person avoids it. -Einstein
  21. read what Dennis Ritchie says... by museumpeace · · Score: 5, Informative

    Indeed, calling CTSS a DIRECT ancestor is a bit of a stretch. Dennis Ritchie is about as authoritative as you are going to get on the history of Unix and Unix is the direct ancestor of Linux. Read his article on the history of Unix. There you will find his quote in section 1.3 on just where CTSS comes into the genisis of Unix....it is a distant ancestor. The Wikipedia article on history of OS'es is strangely lame on this topic.

    --
    SLASHDOT: news for people who can't concentrate on work or have no life at all and got tired of yelling back at the TV.
    1. Re:read what Dennis Ritchie says... by zedman · · Score: 2, Insightful

      Somehow "ancestry" seems the wrong word to describe something that inspired or led to the creation of something else.

      "Ancestry" implies genetic similarity, i.e., copying of DNA or source code, which I think is *not* the case to any significant degree for any version of UNIX and Linux. There may be fragments of UNIX code from the public domain, but nothing more.

      Perhaps "predecessor" would be a better word.

  22. "Hackers" by Huxley_Dunsany · · Score: 2, Interesting
    There is a wonderful description of the birth of the CTSS (among other things) in Steven Levy's book "Hackers: Heroes of the Computer Revolution". I've read this book at least a dozen times (mostly in my formative years), and its efforts at conveying the meaning of the "Hacker Ethic" make it required reading for anyone more than slightly interested in how the computer industry came to be.

    Just thought I'd mention.

    Huxley

  23. Re:direct ancestor? by Nicholas+Evans · · Score: 2

    Wrong. Linux 0.1 was torvalds-only code. And as far as I know, there has never been any minix code in linux, ever.

  24. Heritage by stox · · Score: 4, Informative

    The first mainframe versions of Unix(R) were run on top of a modified version of CTSS. Also CTSS is considered the father of Multics which in turn begat Unix.

    --
    "To those who are overly cautious, everything is impossible. "
    1. Re:Heritage by laird · · Score: 5, Interesting

      Having worked with people who used Multics (I'm not quite that old, myself) I'd have to disagree. UNIX isn't a "better" OS than MULTICS -- in fact, it was intentionally designed to be a "worse" OS (in being far less sophisticated, and providing far less functionality), but had the pragmatic advantage of running on more widely available, less expensive hardware.

      The shame is that the tradeoffs that made UNIX a success in the 70's are probably not valid any more, and modern operating systems and programming models are still (IMO) largely trapped by design decisions made by UNIX. For example, the artificial separation between how you access RAM and disk costs developers untold amounts of wasted effort. And the idea that you don't have to turn a computer off while adding or removing CPU's, RAM, disks, controllers, etc., is still quite uncommon. And the way all linking was dynamic is way better than the mess we have to deal with now. And it had a very nice multi-processor architecture, where all CPU's had access to all RAM, and through that to all secondary storage, etc.

      Of course, some of these ideas have reemerged in high-end computing (the multicians, see http://www.multicians.org) are still all hard at work making things better. :-) But it's hard to correct for fundamental mistakes (e.g. having to flatten data out into files to make it persistent) without forcing all software to be rewritten. As far as I know, the closest OS to this clean model was NewtonOS...

  25. email by c++ · · Score: 2, Funny

    one of the very first to have inter-user electronic mail

    because intra-user electronic mail wasn't as useful as people had hoped.

  26. Just wait a year or two .... by pjrc · · Score: 3, Funny

    ... and next thing you know, a company will change management, rename itself, claim they own this ancient technology, try to pretend like source code was never released, and then launch a major lawuit claiming that modern systems infringe upon a variety of vauge intellectual property rights from ancient code.

  27. inter-user email by masouds · · Score: 5, Funny

    "...and one of the very first to have inter-user electronic mail."

    Apparently, in the previous versions, users were only able to email themselves.

    --
    This .sig was intentionaly left blank.
  28. Krell amp by Pivot · · Score: 2, Funny

    I have a krell amp that has a mc68hc711 microcontroller in it. Can it be ported to this device? I'd love to be able to set up some unix policies that would prevent my buddy from turning the volume up too much.

  29. Re:GREAT! by PacoTaco · · Score: 2, Informative
    I guess we've more or less lost programming of that kind, even things like mobile and thin-client devices these days run higher-end language platforms like Java.

    Languages like Java and C# are chosen for speed of development, which is especially important in the fast-changing market of mobile devices. You don't want to be dinking around with registers while your competitors are releasing completed products.

  30. Hmmm by jd · · Score: 3, Interesting
    I know there are patches out there that'll turn Linux into VMS (the FreeVMS project). Linux also supports translations of system calls via the binary compatibility code. Hmmm. It might very well be possible to produce a layer that'll make Linux run CTSS code.


    Fom there, Linux supports user-level kernels, so it would be possible to boot CTSS inside of Linux running as CTSS. Thus completing one of the challanges.


    I'm scared.

    --
    It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
  31. CTSS history by monsterhead78 · · Score: 4, Informative

    In the mid-1960s, the 7094 was one of the biggest, fastest computers available, able to add floating numbers at a speed of about 0.35 MIPS. A standard 7094 had 32K 36-bit words of memory. Its data channels could access memory and run simple channel programs to do I/O once started by the CPU, and the channels could cause a CPU interrupt when the I/O finished. They cost about $3.5 million. Paul Pierce's collection includes a real 709 and 7094.

    MIT got an IBM 7090, replacing the 709, in the spring of 1962, when I was a freshman, and had upgraded the 7090 to a 7094 by 1963. The 7090 and 7094 were operated in batch mode, controlled by the Fortran Monitor System (FMS). Batch jobs on cards were transferred to tape on an auxiliary 1401, and the monitor took one job at a time off the input tape, ran it, and captured the output on another tape for printing and punching by the 1401. Each user job was loaded into core by the BSS loader along with a small monitor routine that terminated jobs that ran over their time estimates. Library routines for arithmetic and I/O were also loaded and linked with the user's program. Thus, each user's job had complete control of the whole 7094, all 32K words of memory, all the data channels, everything.

    IBM had been very generous to MIT in the fifties and sixties, donating its biggest scientific computers. When a new top of the line 36-bit scientific machine came out, MIT expected to get one. In the early sixties, the deal was that MIT got one 8-hour shift, all the other New England colleges and universities got a shift, and the third shift was available to IBM for its own use. One use IBM made of it was yacht handicapping: the president of IBM raced big yachts on Long Island Sound, and these boats were assigned handicap points by a complicated formula. There was a special job deck kept at the MIT Computation Center, and if a request came in to run it, operators were to stop whatever was running on the machine and do the yacht handicapping job immediately.
    Early Time-Sharing

    MIT professors, such as Herb Teager and Marvin Minsky, wanted more access to the machine, like they had had on Whirlwind in the fifties, and quicker return of their results from their FMS jobs. John McCarthy wrote an influential memo titled "A Time Sharing Operator Program for Our Projected IBM 709" dated January 1, 1959, that proposed interactive time-shared debugging. These desires led to time-sharing experiments, such as Teager's "time-stealing system" and "sequence break mode," which allowed an important professor's job to interrupt a running job, roll its core image out to tape, make a quick run, and restore the interrupted job. McCarthy's Reminiscences on the History of Time Sharing describes his and Teager's role in the beginnings of time-sharing. Teager and McCarthy presented a paper titled "Time-Shared Program Testing" at the ACM meeting in August 1959.
    FMS and Batch Processing

    MIT and the University of Michigan were both 7094 owners, and the computation center people were colleagues who traded code back and forth. When I was a freshman in 1961, we used FORTRAN in the elementary course (FORTRAN II was brand new then), but by the time I was a sophomore, MIT had installed Michigan's MAD language, written by Graham, Arden, and Galler, and was using that in most places that a compiler language was needed, especially computer courses. MAD was descended from ALGOL 58: it had block structure and a fast compiler, and if your compilation failed, the compiler used to print out a line printer portrait of Alfred E. Neumann. (MIT took that out to save paper.) Mike Alexander says, "MAD was first developed about 1959 or 1960 on a 704, a machine which makes the 7094 look very powerful indeed." MAD ran under UMES, the University of Michigan Executive System, derived from a 1959 GM Research Center executive for the IBM 701 that was one of the first operating systems.

    Part of the Michigan/MAD code was a replacement for the standard FORTRAN output formatter routine, (IOH). (Programs written

    1. Re:CTSS history by thvv · · Score: 3, Informative

      This article was written by me, Tom Van Vleck.
      "monsterhead78" has just copied the text from
      http://www.multicians.org/thvv/7094.html.
      T he original page has some pictures and useful
      links.