Macintosh Common Lisp hacks

by Michael Travers



This page presents some of my extensions, customizations, and utilities for Macintosh Common Lisp (MCL), the best programming environment around today. One of MCL's features is its support of close integration with the Mac toolbox, making MCL an ideal environment for advanced multimedia research and prototyping. Some of the utilities here provide high-level access to system facilities like QuickTime; others extend the Lisp programming environment itself.

There are some interdependencies among the files listed here, which are noted. To download everything, click here.

Please send any reports, suggestions, or changes to me at mt@media.mit.edu.

MCL Environment Extensions

Keyboard Macros
Allows you to record and play back a sequence of Fred commands, like the similar facility in EMACS. Also allows key sequences to be saved, named, and bound to keys.

Read-Eval-Inspect
integrates the Listener and Inspector with two independent features:

  1. Listener results are automatically displayed in an inspect window (can be conditional on class)
  2. top inspect form is made available in Listener as value of the % global variable.

Inspector Extensions
Extends the inspector to provide display of hash tables, pixmaps, and adds a few commands for strings and pathnames. Also provides extensive support for browsing CLOS classes and their properties such as superclasses, subclasses, and initargs.

Dependencies: mt-utils, mcl-hacks, pixmap-utils (loaded on demand)

Additional Fred commands
Adds some commands to Fred:

Dependencies: date/time string functions from mt-utils

Networking

Browser Control
Control a browser (Netscape Navigator or Microsoft Explorer) from MCL via AppleEvents. You can force a browser to open a particular URL or ask it for the URL of the current page. The package includes extra code to work with CL-HTTP and Bill St. Clair's HTML editor. This replaces the file netscape-control.lisp that has been distributed with some versions of MCL.

RSH
Execute Unix shell commands on a remote machine via the Remote Shell protocol.

Graphics

QuickTime Objects
A CLOS-based high-level interface to QuickTime that lets you display and manipulate movies and other media. I wrote the first version of this (with Marc Davis), many others have contributed since. This is version 41, an update from the widely distributed version 40 that fixes a couple of bugs.

Pixmap Utilities
Utilities for manipulating pixmaps and PICTs. Some of this code is not completely reliable, and some of the functions only work on pixmaps that are 8 bits deep and zero-based. Use with caution.

CLOS utilities

CLOS* (CLOSstar)
Provides an alternate, easier to use syntax for CLOS programming (based on Symbolics flavors). Initially developed to run Flavors code under CLOS without conversion, CLOS* is also useful for rapid prototyping since it allows class and method definitions to expressed more succinctlythan the default CLOS syntax.

CLOS dumper
Saves a structure of CLOS objects (and other lisp objects) as an executable form that recreates the structure when loaded. Warning: quite slow and somewhat simpleminded; useful mostly for rapid prototyping. For real persistance use WOOD.

Miscellany

mt-utils
collection of random useful small CL functions, by myself and others, collected over the years. Includes a set of functions for fast fixnum arithmatic, additional macros for CL generalized variables, memoizing functions, bitfield defining macros, and lots of other miscellaneous tools. Most stuff in here will work in any Common Lisp, not just MCL.

mcl-hacks
Like mt-utils, but contains functionality specific to MCL. Includes code for manipulating windows and views, resources and toolbox structures, processes, and files.

mt-pkg
defines a package for mt-utils, mcl-hacks, and some other modules.

CTRACE
a trace facility that builds a list structure rather than printing, so the results can be displayed in a hierarchical browser, searched with a pattern matcher, or otherwise manipulated. Also useful for debugging code that works at display or event level.


Michael Travers / MIT Media Lab / mt@media.mit.edu