File: README

package info (click to toggle)
euslisp 9.31%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 55,448 kB
  • sloc: ansic: 41,610; lisp: 3,339; makefile: 286; sh: 238; asm: 138; python: 53
file content (417 lines) | stat: -rw-r--r-- 15,938 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
;;;;
;;;; README for EusLisp
;;;;	a brief note for licensing, installation and sample run.
;;;	Copyright (c) 1987,   Toshihiro Matsui, Electrotechnical Laboratory
;;;
;;;		revised Sep/1988, Apr/1989, Nov/1989,
;;;		Jun/1990	FTP distribution
;;;		Sep/1990	SunOS4.1
;;;		Jan/1995	Solaris 2.3
;;;		Jun/1995	merging sources both for Solaris1.x and 2.X
;;;		Jul/1995	port on Linux/i386 and SGI/IRIX
;;;		Aug/1995	CDROM distibution by RSJ
;;;		Feb/1996	source management by cvs, generic makefile
;;;		July/1996	Release 8.16
;;;		July/1997	Release 8.18; i386*Solaris2*gcc
;;;		Feb/1998	Release 8.19; JPEG/32bit color
;;;		Oct/1999	Release 8.23  color
;;;		Mar/2000	Release 8.25  postgres, http, time
;;;

;;; COPYRIGHT AND  DISTRIBUTION

Toshihiro MATSUI and Electrotechnical Laboratories (ETL), Agency of
Industrial Science and Technologies (AIST), possess the copyright
of EusLisp. At the date of March 2000, EusLisp is free to copy or
to modify as long as the purposes of the use is not for military
or not for profit.  This software is under development, at the date of 
March, 2000. The Japanese goverment or AIST reserves the right
to claim the proprietary of the final version of EusLisp after
the development completes.  The author understands the Japanese
government allows free distribution of this software, since the
development will be helped by the reports and feedbacks from users.

Users are allowed to copy and modify the software, and are advised
to share the modifications and improvements with other users.
The copyright notices of all source files provided may not be deleted.
Detailed licensing procedure is described in doc/LICENCE, and new users
should read the file, fill necessary forms, and return a copy back to the
auther.

Toshihiro MATSUI,
Intelligent Systems Division,
Electrotechinical Laboratory,
Tsukuba, Ibaraki 3058568, JAPAN
phone: 0298-61-5977
fax:   0298-61-5301
mail-to: matsui@etl.go.jp  euslisp@etl.go.jp
http://www.etl.go.jp/~matsui/eus/euslisp.html

(in Japanese)
305-8568 븩Ĥл߱1-1-4
Żҵ縦
ǽƥ
ӹ


;;;
;;; Euslisp Installation Guide
;;;

First, make a directory for EusLisp. /usr/local/eus is recommended.
If you use a different directory, set it to the EUSDIR environment variable.
Hereafter, this working directory is referred to as EUSDIR.
This directory is to hold subdirectories for binaries (objects,
libraries, and executables) for every different architectures
as well as source files.

Make directory for your machine archtecture in EUSDIR. The directory name
should be one or any of followings:
SunOS4 -- SunOS 4.1 or Solaris 1.x
SunOS5 -- SunOS 5.3, 5.4, 5.5, or Solaris 2.x (cpu may either be sparc or i386)
Linux  -- Linux 1.2.13 or later (ELF is needed)
Alpha  -- OSF1 V3.0 
Win95  -- Windows95
IRIX   -- IRIX5/SGI 32bit version
IRIX6  -- IRIX6/SGI 64bit version
Ultrasparc should use SunOS5 since it is compatible with 32bit versions.

In the architecture dependent directory, make directoris for obj, bin and lib.
If you are going to make euslisp for Solaris 2.5,
% cd /usr/local/eus; mkdir SunOS5 SunOS5/obj SunOS5/lib SunOS5/bin
and all the intermediate and final executables are generated in SunOS5/bin.

Second, copy files via ftp from "ci.etl.go.jp" (192.50.77.18).
Login name is "anonymous" and password should be your email address.
Change directory to pub/eus and get eus-818.tar.gz. Use gunzip and tar
commands to obtain source files.

;;
;; Directory and environment set-up
;;

;********************* I M P O R T A N T *************************
Next, set up environment variable and modify makefile.
1. Set the environment variable "MACHINE" to what you are making eus for.
   Choose one of sun3, sun4, vax, news, mips, i386.
   For example,   % setenv MACHINE sun4
   If you are making eus for sun3, select a proper FLOAT_OPTION.
   For example,   % setenv FLOAT_OPTION f68881
   "mips" assumes SGI/IRIX. "i386" assumes Linux on PC/AT.
   In these cases, proper makefile should be chosen.
2. Set the environment variable "EUSDIR" to the directory where
   you will run make. You might want to uncomment the line in the makefile
   where EUSDIR is set.
3. Create a symbolic link from Makefile.xxx to Makefile, where xxx is
   appropriate machine archtecture name. Note that Makefile.xxx describes
   only machine dependent part of make procedures and most of common parts
   are described in Makefile.generic1 and Makefile.generic2. The 'make' command
   is assumed to have the include capability. If not, try to use gnu make.
4. Your Xwindow's version is supposed to be higher than or equal to X11R4.
   Make sure you have "libX11.so" in /usr/lib. If not, change the XLIB
   variable in the makefile to point to the correct library. You can use
   "/usr/openwin/lib/libX11.so" instead.
5. PUBBINDIR variables in the makefile.
   PUBBINDIR is the public directory to store executables. It should be
   the directory where your PATH list references. For example, /usr/local/bin.
6. Remove or rename ~/.eusrc, if you have one, to avoid unexpected side effects
   during make.
7. In Solaris-2, use of Sparc C compiler is recommended.
   You may try to use gcc, in which case change $(CC) in the makefile to gcc.
   /usr/ucb/cc cannot compile euslisp.
8. Make sure you have sufficient amount of /var/tmp for C compilation.
   When lisp programs are compiled with optimazation turned on, 
   approximately 20MB of free disk space is needed.
   If you do not have such big space on /var/tmp, you can change TMPDIR
   environment variable to a bigger partition. For example,
   % setenv TMPDIR /tmp

% setenv EUSDIR /usr/local/eus
% cd $EUSDIR
% setenv MACHINE sun4
% setenv TMPDIR /tmp

;************************* end ***************************************

;;
;; intermediate products and variations of euslisp
;;

The ultimate goal of these make procedures is to make bin/eus and bin/eusgl
and locate them and their symbolic links in PUBBINDIR.
To ease the troubleshooting and regeneration of eus, however, 
the make procedure is split into several stages, which creates
intermediate products in $EUSDIR/$ARCH/bin directory after each make.

1. "eus0" which consists of only C-coded subprograms.
2. "eus1" is loaded with compiled lisp programs under the "l" directory.
3. "eus2" is eus1 + compiled compiler
4. "eusg" is eus2 + compiled geometric packages
5. "eus"  is eusg + xwindow, but does not connect to Xserver.
6. "eusx" is a symbolic link to "eus", and tries to connect to Xserver.
7. "elsgl" is eus + xwindow + OpenGL or Mesa interface.
8. "libeusgeo.so" is the library consisted of geometric modules.
9. "libeusx.so" is the library made of xwindow modules.
9. "libeusgl.so" is the library for interfacing with opengl or mesa.

;**************** I M P O R T A N T **************************
;;
;; bootstrapping
;;

The toplevel bootstrapping procedure is directed by "Makefile",
which invokes subsequent makes in subdirectories and feeds
compiler commands to euscomp from tool/comp*.l.

% make all

This "make all" recursively invokes five makes, namely "make eus0",
"make eus1", "make eus2", "make eusg", "make eus".
If the "make all" succeeds, eus0, eus1, eus2 and eusg may be deleted.

All these executables produced under the bin directory read and
execute lib/eusrt.l when they start running. eusrt.l is the runtime start-off
program to initialize internal modules described in Lisp.
If these internal modules are already compiled and linked with eus,
eusrt.l calls their entries for initialization. If they are
not yet compiled, their corresponding source programs located under "l",
"comp", and "geo" are read and executed. Anyways, the subprogram
names are printed before eus enters toplevel loop.

Following descriptions detail each make.
;****************************************************************

;;
;; make eus0
;;

eus0 is the kernel of euslisp written only in C.

After this make, eus0 is located in the bin directory.
Problems which might occur in this make would stem from the incompatibility
between C compilers or UNIX system calls or libraries. To solve these
problems, hacking of some C source files, especially, c/eus.h, c/eus.c,
c/eusstream.c, clib/unixcall.c and c/loadsave.sol.c would be required.
Note that unlike previous versions (before 7.30), euslisp on Solaris
does not use "ld -A" or "save". It uses Solaris's dynamic linking library,
i.e., dlopen and dlsym.

;;
;; make eus1
;;

This 'make' executes eus0 to compile files under "l" and "comp".
l/constants.l is translated into l/constants.l.c
by the tool/gccls (generate c-compilable lisp source) utility.
The resulted objects (l/*.o files) are linked with the eus kernel,
and eus1 is placed in bin. bin/euscomp is symbolically linked to
bin/eus1. This link is needed because following makes
normally invoke euslisp compiler by the name of "euscomp". Euscomp is
an alias of eus, i.e., if eus is invoked by the name of euscomp,
it compiles the files specified in the command line.

;;
;; make eus2
;;

eus1 is invoked by the name of euscomp and files in the comp directory
are compiled. Resulted objects are linked to produce bin/eus2.
eus2 has nearly compatible features of CommonLisp.
euscomp is chaged to point to eus2. eus2 can compile lisp programs
much faster than eus0 and eus1, since everything needed for the
compilation has already been compiled and loaded.

% make eusg

eus2 compiles the files in "geo". eusg is capable of defining solid
models and display them on Tektronics displays.

;;
;; make eus, eusx and install
;;

% make eus
% make eusx

Files in "xwindow" are compiled. xwindow/xforeign.c is needed to
refer to library functions in libX11.so. The resulted objects
are linked to form a shared library "libeusx.so".
You may put this library either in EUSDIR/lib, in /usr/lib,
or in /usr/local/lib.

Congratulations! Complete eus is produced in bin.
To copy them to the public bin directory
(typically, /usr/local/bin), issue "make install".

eusx is a symbolic link to eus and they are identical.
When eus is invoked by the name of "eusx", it knows "x" is included in
the command name and eus tries to connect to Xserver designated by the
DISPLAY environment variable when it begins execution.

If you see a message like "connected to Xserver DISPLAY=xxxxxx",
you are ready to use xwindow from euslisp. The simplest way to
open a window is the folliwing three lines:
eusx$ (setq win (instance x:xwindow :create))
eusx$ (send win :line 20 30 100 200)
eusx$ (xflush)
To open a more complicated window, you may try:
eusx$ (instance x:filepanel :create)
These expressions just create passive windows; they do not respond
to mouse-button events, until you evaluate (x:window-main-loop).

A more convenient way to handle window event is to enable asynchronous
event handling by setting the USE_TOP_SELECTOR environment variable:
% setenv USE_TOP_SELECTOR T
When eusx starts running, it chooses blocking read or non-blocking read
using the 'poll' system call depending on the USE_TOP_SELECTOR.
All the eusx users are advised to put the above setenv in the .cshrc.

If you do not use the Xwindow facilities and want eus to star up faster,
invoke euslisp by "eus".

This final executable should be approximately 1.3MB in file-size and
occupies 1.7MB in process memory.

You may proceed to make eusxv. Make of eusxv compiles files in
vision directory and its subdirectories, and link them in libeusimg.so,
which should be placed in the lib directory.

% make eusgl

opengl/src is the directory for modules to interface with opengl or mesa.
The directory name for include files must be specified by GLINCLUDE in
the Makefile. Since eusgl refers to opengl/mesa libraries such as libGL.so,
libGLU.so, libtk.so, these libraries should be located in $(ADLIBDIR)
or the library directory should be specified by $(GLLIB), e.g.
-L/usr/local/Mesa/lib.

% make install

Hereafter, any modification added to the source files under c, l, clib, llib
directory would be reflected to bin/eus by a simple make command. 

;;
;; how to run eus
;;

Every euslisp user should have his/her EUSDIR environment variable
set to the correct EUSDIR, or /usr/local/eus is defaulted.
This directory is needed even at runtime, because lib/eusrt.l is
read when euslisp starts up and c/eus.h is referenced when lisp
programs are compiled. You may put shared programs in llib or demo
directory in EUSDIR, since euslisp's "load" assumes EUSDIR is the
directory to look up when the file could not be located in the 
current working directory.

If you use eusx, the DISPLAY environment variable should also be set.

;;
;; .eusrc start up file
;;
Each time eus runs, it tries to load "$HOME/.eusrc" before entering
a toplevel loop. Programming .eusrc is the easiest way to customize eus.
You may change prompt, *load-path*, or toplevel loop, and
you can load necessary files needed every time. EUSRC is a simple example
of such a start-up file.


;;;
;;;Sample run 
;;;

% cd demo
% pwd
 /usr/local/eus/demo
% eusx
eusview$ load "view.l"
eusview$ load "robot/eta3/eta3build.l"
eusview$ draw eta3		;wire frame image is generated
eusview$ send *viewer* :viewing :look #f(300 100 100) #f(33 0 30)
eusview$ send *viewer* :viewing :zoom 2
eusview$ cls			;clear the window
eusview$ hid eta3		;hidden line eliminated image

;; Try with other .Brep files under robot directory.
;; Another fraktur demonstration program.

eusview$ pwd
/usr/local/eus/demo
eusview$ load "notify.l"
eusview$ load "sierp.l"
eusview$ sierpinski
eusview$ load "gosper.l"
eusview$ gosper-curves

;; To use tektronics terminal, run eus and load "demo/tek.l" 
;; instead of "demo/view.l".
;; The difference is the instantiation of the viewsurface object.

;; To use Eusx, check if the environment
;; variable DISPLAY is properly set to your Xserver address.

% eusx

eusx$ pwd
 ~/eus
eusx$ load "demo/view"
eusx$ setq a (make-cube 50 40 30)
eusx$ draw a
eusx$ setq b (make-cylinder 10 50)
eusx$ setq c (body+ a b)
eusx$ dotimes (i 30) (send c :rotate 0.1 :x) (cls) (hid c)

English documents are available in doc/latex.
Try printing manual/manual.ps on a postscript printer.

;;;
;;; MEMORY IMAGE
;;;
Running EusLisp process's memory image is made of the following sections:
1. C coded kernel
2. Basic (common) lisp functions
3. Compiler
4. Geographical package
5. X window functions
6. System libraries (libc, libm, etc)
7. loaded compiled-functions
8. stack and heap

Each section usually have its own static data section.
In eus0, sections 2-5 are lisp code, and loaded in the section 8,
where as eus has sections 2-3 linked with the section 1 and puts
them in one section. On Linux/ix86, eus0's section-1 is about
250KB, and eus's section-1-3 is about 1.1MB.  Sections 4-5 are
compiled and linked as libraries named libeusgeo.so and libeusx.so.
On Linux/ix86 configured for 1GB user process space, the memory map
looks as follows:

0x00000000	+-----------------------+
		| 128MB vacancy 	|
0x00800000	+-----------------------+
		| C coded Eus kernel 	|
		| + compiled lisp    	|	1.1MB
		|    common funcs    	|
0x008125	+-----------------------+
		| raweus static data 	|	30KB
		+-----------------------+
		| Heap and stack     	|	usually 2-30MB
		| where you play     	|
		+- - - - - - - - - - - -+
		|		     	|	can grow upto 1GB
		|			|
0x40000000	+-----------------------+ 	End of heap
		| libeusx.so		|	0.5MB
		+-----------------------+
		| libeusgeo.so		|	0.5MB
		+-----------------------+
		| libc, libm, libX11	|	1.4MB
0x40268000	+-----------------------+
		| compiled lisp funcs   |	about 80-100KB/1000 lines  	
        	|			|
		+-----------------------+

Thus, a minimum running EusLisp process takes up approximately
5MB of memory, more than a half of whch is sharable with other eus processes.
From this point you add memory by loading lisp-coded compiled functions
and by consing, instantiating, making, etc.  Note that the latter
memory is your private space and not shared.