From cs.nyu.edu via anonymous ftp, directory /pub/setl2. SETL2 ===== This directory contains all the distribution files for the SETL2 programming system. It's implemented on a number of machines and all of the binaries can be found in the various files here. As usual, this entire system is provided free of charge, but WITHOUT ANY WARRANTY. Use it at your own risk. There are separate distribution files for each supported system, but this README file covers all of them. Look through what follows for the system in which you are interested, and ignore the rest. You should find the following systems supported: MS-DOS (versions 3.1 and higher) Extended MS-DOS (80286 and higher processors with extended memory) Apple Macintosh (with the MPW environment) Sun 3 (SunOS 4) Sun 4 (SunOS 4) IBM RS/6000 (AIX 3.1) DEC RISC product line (Ultrix 4.0) DEC Vaxen (Mt. Xinu Unix) DEC Vaxen (VMS) [and OS/2.] Please report any bugs or problems to: Kirk Snyder Courant Institute of Mathematical Sciences New York University 251 Mercer Street New York, NY 10012 e-mail: snyder@cs.nyu.edu PLEASE SEND ME AN EMAIL MESSAGE IF YOU FTP THE SETL2 SYSTEM. This is not intended to restrict access in any way, just to let me know who is using it. I keep a mailing list of users to send out occasional notices, and if you don't let me know you're using SETL2 then I can't put you on the list. I expect this archive to move around Aug-Sept, 1992. I will send out a notice to anyone who sends me email. I will finish my Ph.D. this year and get a job elsewhere. The SETL2 system will move with me. If anyone hears of an academic job available for someone interested in programming language design and implementation I'd appreciate it if you'd let me know. Thanks -- Kirk MS-DOS ====== MS-DOS is a somewhat uncomfortable environment for SETL2, due to the severe memory limitation. You will find two distinct sets of distribution files here. One for systems with 8086 processors or no more than 640K of memory, the other for systems with an 80286 or higher model processor and some EXTENDED (not expanded) memory. If your computer has an 8086 (or 8088) processor, then you should get the files dos-1.zoo, dos-2.zoo, dos-3.zoo, and dos-4.zoo, along with zoo.exe and zoo.doc, if you don't already have them. Install all of these files on your disk, then execute zoo x// dos-1 zoo x// dos-2 zoo x// dos-3 zoo x// dos-4 This will create a setl2 directory with several subdirectories. The first thing you'll want to do is print the documentation (it's distributed in Postscript form), then follow the installation instructions. The big weakness of the DOS implementation is the 640K barrier. SETL2 programs can easily consume much more memory than that. There is another set of files called dos286-1.zoo, dos286-2.zoo, dos286-3.zoo, and dos286-4.zoo which may or may not help. This implementation uses a piece of software called a DOS extender to run programs in 286 protected mode, which allows access to as much as 16M of extended memory. DOS extenders don't really fit comfortably in DOS, perhaps in part because IBM and Microsoft would much rather you buy OS/2. But in the cases in which they do work they are fairly nice. The version supplied here is written by Lattice and distributed with their 80286 development system. There are competing products, but the wonderful thing about Lattice's is that I can distribute it with SETL2 without paying Lattice a royalty. To my knowledge this is the only DOS extender which is royalty-free. Anyway, here's how you install it. Under the bin directory, you should find the programs "tune.exe" and "ex286.exe". Tune will examine your system and customize the ex286 program for your system. Make the bin directory current and execute tune. Tune will ask you to press some keys, AND MAY HANG YOUR SYSTEM. This hanging is normal. Just reboot and try again. Tune keeps track of what it was doing in files, so will continue from where it left off. After you do all this, move all the files in the bin directory to some directory in your path. Before using SETL2 execute ex286 to install the DOS extender. When you're finished execute "ex286 rem" to remove it. You may want to create batch files which do this for you. Other than this complication the instructions in the documentation should work as usual. If you'd like to find out if all this is working, try the test286 program included on the bin directory. Basically, it keeps consuming memory until an abort. If it aborts at the same place with and without the extender installed, then something didn't work. A caveat: DOS extenders are somewhat risky and fragile things. If your system is unusual it might not work, due to conflicts with TSR's, device drivers, etc. DON'T BOTHER ME WITH REPORTS ABOUT THIS. It seems to me that Lattice has done a great job on the DOS extender, but I'm not about to support it for them, particularly since I don't charge for this. If you desperately need the DOS extender to work and are having severe trouble, then buy the Lattice C 286 Development System, and complain directly to Lattice. They have top notch support, and the system is very nice, so you probably won't be wasting your money. If you work for a school then call them and ask about their educational discounts before calling the mail order companies. They really are nice people to deal with, in spite of the flames they've been getting on the net about their dongle. Macintosh ========= The Macintosh implementation is distributed as a `binhex'ed stuffit archive. To decompress you'll need stuffit, which is available on many archives. The Macintosh implementation requires the Macintosh Programmer's Workbench, which you will have to get from the Apple Program Developers Association, which is owned by Apple. Unfortunately, you'll have to join APDA first. I'm sorry about this, but I'm unwilling to abandon the command line, and Apple doesn't provide one without buying MPW. In the stuffit file you'll find MPW tool versions of the compiler and interpreter, and a number of scripts which make MPW a fairly comfortable environment for SETL2. We are currently working on extensions to allow access to the Mac Toolbox (still in MPW, though). If you'd like to be informed when that is available, send me email. Unix ==== Unix is clearly the most comfortable environment for SETL2. We get a command line and all the memory we can afford, without standing on our head. The system is distributed as a compressed tar file, and I think it should be obvious from the names on the archive which you should get. One hopefully nice addition in the Unix environment is a SETL2 mode for Gnu Emacs, which is included in each file. I'm still working on this, but I think what I've got so far will be useful so I'm including it now. It assumes that you are familiar enough with Emacs LISP to change keyboard maps. I'm not about to try to come up with an assignment of keystrokes which won't conflict with other packages and will be available on all systems. The keymap provided is the one I use, but that's certain to be terrible for anyone else (I don't hesitate to change standard keymaps, so the keystrokes I use in the SETL2 mode conflict spectacularly with standard keymaps). Anyway, here are the functions available. All you have to do is bind them to keystrokes you like. setl2::compile-buffer => Compile the current buffer, saving first if necessary. The cursor will be placed at the first error if there is one. setl2::next-error => Move the cursor to the next error, displaying the message in the minibuffer. setl2::previous-error => Move the cursor to the previous error, displaying the message in the minibuffer. setl2::install-template => Begin entering one of the following structures: program package class procedure lambda for while until loop if case After you initiate this, start typing the structure you want. The macro will try to complete the keyword as far as it can. When it has a complete keyword it will enter the structure. For example, to enter "program" you would actually type "prg". setl2::next-component => The structures above all have some variable stuff. The previous function writes the skeleton, this one jumps to places where you need to fill in things. setl2::pull-comment => Find the next comment, then look for all successive lines with comments in the same column, like this: -- this is a two -- line comment. Yank out the text of the comment, and install it in a scratch buffer, in word processing mode. The width of the buffer depends on the column in which the comment was found. setl2::replace-comment => Only works in a comment buffer described in the previous function. removes some extra blanks around the comment and replaces the orginal. setl2::new-comment => Enter a -- at the cursor postion, back up and call pull-comment. setl2::wrap-in-comment => Prefix all lines between point and mark with --. setl2::expose-comment => On all lines between point and mark beginning with --, remove the --. setl2::inline-comment => Jump to column 40 on the current line, and enter "-- ". I use this for describing variables in a var. VMS === The VMS implementation is about the same as Unix, and also includes the SETL2 mode for Emacs. The only complication here is in the distribution format. I'm not really a VMS expert, but I talked to one and was told that there isn't really a standard format for distributing VMS files. I used zoo, since that's my favorite. You can get it on many archives, but not this one. You'll have to use defines to allow this to be called normally. Something like this: stll :== $ disk$cs:[?????]stll.exe stlc :== $ disk$cs:[?????]stlc.exe stlx :== $ disk$cs:[?????]stlx.exe You'll have to change the file names to whatever you normally use, of course.