1 line
6.2 KiB
Plaintext
1 line
6.2 KiB
Plaintext
Sender: SenderNameTooLong%SUMEX-AIM.STANFORD:EDU:Xerox
|
|
Date: 5 Jan 88 18:39:54 PST (Tuesday)
|
|
Subject: Interlisp to Commonlisp conversion package
|
|
From: darrelj%sm.unisys:COM
|
|
To: info-1100%sumex-aim.stanford
|
|
cc: darrelj%sm.unisys:COM
|
|
|
|
Return-Path: <@SUMEX-AIM.Stanford.EDU:sdcrdcf!sm.unisys.com!darrelj@PRC.Unisys.COM>
|
|
Redistributed: Info-1100-Redistribute^.X
|
|
Received: from SUMEX-AIM.Stanford.EDU by Xerox.COM ; 05 JAN 88 18:38:18 PST
|
|
Received: from burdvax.PRC.Unisys.COM (PRC-GW.PRC.UNISYS.COM) by SUMEX-AIM.Stanford.EDU with TCP; Tue, 5 Jan 88 17:44:10 PST
|
|
Received: by burdvax.PRC.Unisys.COM (burdvax) [5.54/1.0] id AA15346; Tue, 5 Jan 88 20:44:28 EST
|
|
Received: by rdcf.sm.unisys.com (sdcrdcf) (5.51/Domain/jpb/2.7) id AA28679; Tue, 5 Jan 88 16:35:37 PST
|
|
Message-Id: <8801060035.AA28679@rdcf.sm.unisys.com>
|
|
Received: from XAVIER by sdcrdcf with PUP; Tue, 5 Jan 88 16:35 PST
|
|
Original-Date: 5 Jan 88 16:34 PST (Tuesday)
|
|
|
|
Interlisp-D into Xerox Commonlisp, we developed a collection of tools
|
|
to automate the conversion as much as possible.
|
|
These have been placed in {parcvax.xerox.com}/lisp/exchange.
|
|
While we at Unisys have reasonable confidence in these tools, they are
|
|
being made available with no promises of accuracy, completeness or
|
|
support (though we would appreciate feedback).
|
|
|
|
The tools run in Xerox Lyric Common Lisp. The following files are parts of it:
|
|
|
|
TRANSOR -- A slightly modified version of Transor, to fix a few
|
|
Lyric-related problems and provide the ability to emit a
|
|
DEFINE-FILE-INFO expression and to use the value of TRANSOUTREADTABLE
|
|
as the output readtable. We used TRANSOR because we were familiar
|
|
with it, and it handles a lot of details needed to safely and surely
|
|
traverse the code to be translated. The biggest impediment to adding
|
|
to the transforms is that they are specified as teletype editor
|
|
commands, and only old-time Interlispers have much experience with those.
|
|
TSET -- The same version dating back to 1979. This is the part of
|
|
transor used for interactively developing and testing translation rules.
|
|
TRANSOR.LCOM -- contains the compilation of BOTH the above files.
|
|
TO-COMMONLISP.XFORMS -- translation rules for 428 functions, 98
|
|
remarks and 4 auxiliary functions. It covers are large portion of
|
|
Interlisp, including most Clisp constructs, and specifically handles
|
|
any function with the same name in both Interlisp and Commonlisp, so
|
|
that holes in a translation should result in calls to undefined
|
|
functions. In many cases, nice transformations are used for easy
|
|
cases, and ugly ones only for hard cases. This file sets
|
|
TRANSOUTREADTABLE to be a copy of the XCL readtable which is case
|
|
SENSITIVE, MYLOAD below reads it case INsensitive, so the resulting
|
|
file will ultimately lose most case distinctions on reloading into
|
|
Xerox Lisp (or other common lisps). This was a much debated point
|
|
internally, but this seemed the best of three bad possibilities (e.g.
|
|
print one of
|
|
Cased AS ORIGinal which becomes CASED AS ORIGINAL on load,
|
|
|Cased| AS |ORIGinal|, or
|
|
CASED AS ORIGINAL
|
|
|
|
INTERLISP-COMMONLISP.TEDIT -- A document describing the
|
|
transformations and formacro.
|
|
|
|
LOADTRAN -- contains a few functions which prevent many breaks on
|
|
loading the translated file. The function MYLOAD is intended to load
|
|
a translated file.
|
|
LOADTRAN.DFASL -- compiled version
|
|
|
|
FORMACRO and FORMACRO.DFASL -- Still another portable iteration macro
|
|
for commonlisp. Its main claims are almost 100% compatibility with
|
|
the semantics of the Interlisp-Clisp FOR (especially when used the the
|
|
XFORMS which fix a few incompatibilities); and user extensibility
|
|
(unfortunately not compatible with IL:I.S.OPR). Embedded keywords
|
|
(e.g. IN, COLLECT) may be in any package.
|
|
|
|
COMMON-MAKE and COMMON-MAKE.LCOM -- still another version of code to
|
|
generate a more "common" source file. It handles more filepkg command
|
|
types than most. Also, when used with COMMENTHACKS will successfully
|
|
print ALL comments in semicolon format. Call
|
|
IL:COMMON-MAKEFILE(file). It checks the MAKEFILE-ENVIRONMENT property
|
|
to select a package and base.
|
|
|
|
COMMENTHACKS and COMMENTHACKS.LCOM -- patches to the prettyprinter and
|
|
to the DEFUN editor. The prettyprinter patches will print Interlisp
|
|
(* --) comments as semicolon comments when *PRINT-SEMICOLON-COMMENTS*
|
|
is 'IL:ALL.
|
|
This file also redefines the ED method for DEFUNs so that the initials
|
|
and date of editing get updated for DEFUNs just as Interlisp has
|
|
always done for FNS.
|
|
|
|
Because of the way things developed, these tools are not as fully
|
|
integrated as they could have been. If we were doing it over, the
|
|
TRANSOR step could have more carefully coordinated the new COMS so
|
|
that COMMON-MAKE would be able to do the right thing. As it stands,
|
|
the COMS generally have to be edited to change FNS to FUNCTIONS, etc,
|
|
but you tend to need a few iterations of editing things before the
|
|
compiler is completely happy anyway.
|
|
|
|
|
|
The steps needed to do translations are roughly as follows:
|
|
(LOAD 'TRANSOR.LCOM)
|
|
(LOAD 'TO-COMMONLISP.XFORMS)
|
|
(SETQ FIXSPELLDEFAULT 'N) ;; Otherwise DWIM gets too clever
|
|
(SETQ XlatedRecords NIL) ;; This is currently set to records
|
|
specific to the system we translated.
|
|
TRANSOR files containing record declarations. The records MUST be
|
|
translated before any code containing create/fetch/replace since the
|
|
translation depends on the type of records. Also, the record
|
|
declarations should be LOADED. In a large translation effort, save a
|
|
file containing all needed declarations and the value of XlatedRecords
|
|
computed by translating them.
|
|
(TRANSOR 'file1) ... ;; results in file1.TRAN and file1.LSTRAN, see
|
|
TRANSOR documentation.
|
|
|
|
To load translated files into a fresh xerox lisp system:
|
|
>From an XCL exec:
|
|
(IL:SETPROPLIST '*COMMENT* (IL:GETPROPLIST 'IL:*))
|
|
(IL:PUTASSOC '*COMMENT* 'IL:* IL:PRETTYEQUIVLST)
|
|
(LOAD 'LOADTRAN)
|
|
(SETQ IL:*DEFUALT-MAKEFILE-ENVIRONMENT* '(:READTABLE "XCL" :PACKAGE ???))
|
|
(SETQ IL:CMLRDTBL (IL:FIND-READTABLE "XCL"))
|
|
(LOAD 'FORMACRO.DFASL) if used interlisp for's
|
|
;; may need to import USER:FOR depending on packages you've set up.
|
|
(MYLOAD 'translated-records)
|
|
(MYLOAD 'file1.tran) ...
|
|
|
|
A little work with ED and FILES? and you should be able to save a
|
|
commonlisp version of your files (well, OK, a lot of work).
|
|
|
|
Suggestions and questions to one of:
|
|
darrelj@RDCF.SM.UNISYS.COM or darrel@CAM.UNISYS.COM,
|
|
or fritzson@bigburd.prc.UNISYS.COM
|
|
|
|
|
|
----- End Forwarded Messages -----
|