| 12
 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.
 |