1xlockmore-5.67: the maintained version of xlock 2see docs/Revisions for more version stuff 3see docs/TODO for stuff to do :) 4Help is always appreciated too ;) . 5 6Primary site: https://www.sillycycle.com/xlock 7Alternate site: http://ibiblio.org/pub/Linux/X11/screensavers 8Web page: https://www.sillycycle.com/xlockmore.html 9Maintainer: David A. Bagley <bagleyd AT verizon.net> 10Primary key fingerprint: 1B79 C847 8F23 6DCD ADC0 D6AC CF15 9707 3779 19AE 11 12Send all bug reports to bagleyd AT verizon.net . Also just 13send me mail if you want to be on a list for latest releases. 14 15Adapted from Patrick J. Naughton's original xlock, with lots of help 16from others. 17 18Notice: a new bug is now seen when compiling with gcc -O2 on Linux (the 19current default) for pacman mode which gives the pacman an annoying 20hesitation behavior and lasts until a ghost comes close enough to trigger 21it to do something else. So it is recommended to compile all first with -O2 22and then remove pacman.o and edit the Makefile to use -O1. This is also 23seen in older versions of this package with new compilations. Seen with 24gcc 9.3.0. 25 26How to build? 27------------- 28 An ANSI C compiler is required for build. 29 motif (and editres) are used to build xmlock and are not used in xlock. 30 31 Check below to see if your machine is one mentioned that causes 32 problems, otherwise it should be easy. Just to be safe after installing 33 test it with something like: `/usr/local/bin/xlock -debug -verbose` 34 35 If you installed this before you may want to back up your XLock.ad file 36 if you made changes, since `make install` will overwrite this. 37 38 There are 3 ways to build: 39 40 configure: 41 `configure --help` to see options. 42 43 configure ; make ; make install 44 45 For Linux and others you may want something like: 46 configure --prefix=/usr/X11R6 ; make ; make install 47 that way it will install it in /usr/X11R6 not /usr/local 48 For Suns you may want: 49 configure --prefix=/usr/openwin ; make ; make install 50 51 imake: 52 Sometimes this is not setup correctly by the distributor ... i.e. not 53 my fault. You may want to do these quick edits to the iconfig.h so you 54 have more capabilities: 55 56 Do you have XPM? If so, uncomment "#define XpmLibrary". 57 Do you have OpenGL or Mesa? If so, uncomment "#define GLLibrary". 58 Do you have CDE? If so, uncomment "#define DtSaverLibrary". 59 Do you have RPLAY? If so, uncomment "#define RplayLibrary". 60 Do you have NAS? If so, uncomment "#define NasLibrary". 61 Do you have Motif? If so, uncomment "#define XmLibrary". 62 63 Examine iconfig.h for other optional capabilities. 64 65 xmkmf ; make Makefiles ; make depend ; make ; make install 66 or 67 xmkmf -a ; make ; make install 68 69 make.com: 70 See VMS below. 71 72 73Note to binary redistributors: 74----------------------------- 75 Probably should not distribute with any library requirements 76 (except possibly XPM, unless you statically link them in 77 and with USE_BOMB since it might not run right if you do not know 78 if your users will use xdm or not. For example: 79 configure --without-xpm --without-opengl --without-mesa 80 --without-dtsaver --without-rplay --without-nas --disable-bomb; make 81 You may want to distribute it with the xlock/XLock.ad file with "XLock." 82 instances replaced with "*". On Sun's, I need it to override the system 83 XLock.ad file. 84 Please let me know if there are other concerns. 85 86 87Likely Problems 88--------------- 89 Make sure you use the new XLock.ad resource file (or at least remove the 90 old one) otherwise several modes will not be set up nicely. This is 91 usually put as a file in $HOME/XLock and/or 92 $WHEREVER_X11_IS_LOADED/lib/X11/app-defaults/XLock . 93 94 "Key: " this usually means you should get your administrator to setuid 95 xlock to root or at least setgid xlock to shadow. If you do not have 96 a friendly administrator it is asking for a key (password) that it will 97 save encrypted your $HOME/.xlockrc file. 98 99 Debugging options I use frequently: 100 xlock -debug -verbose -erasemode no_fade -duration 2 -sequential 101 102 AIX (IBM RS6000) 103 AIX's "make": 104 AIX's "make" can not handle "+=" so if you use the iconfig.h, you 105 have to group all your DEFINES into one long line and use "=" 106 instead. GNU's "make" solves this problem. 107 AIX 3.1 and less: 108 it SHOULD compile automatically with -DLESS_THAN_AIX3_2 using the 109 iconfig.h, since the passwd struct is not available. 110 AIX 3.2 and greater: 111 one must have setuid xlock to root if you want to use it 112 without being root. 113 su - root 114 chown root xlock 115 chmod u+s xlock 116 chmod og+rx xlock 117 AFS users: 118 See iconfig.h, grep on "AFS". 119 Some machines have an alternate password shadowing method, if someone 120 figures it out mail me the patch. 121 AIX with DCE you will need "-ls" among the XLOCKLIBS. 122 123 Alpha-OSF/1 (Digital Equipment Corp) 124 125 Enhanced security: 126 Compile with -DOSF1_ENH_SEC see iconfig.h 127 chown auth.auth xlock 128 chmod 2755 xlock 129 Unfortunately the following is reportedly broken since xlockmore-2.10 130 and needs a patch, I heard it produces the following at runtime. 131Unaligned access pid=1767 <xlock> va=140489e24 pc=3ff807d9978 ra=3ff807d9880 132type=ldq 133Segmentation fault (core dumped) 134 135 Apollo (HP) 136 Shift-Control-Break is caught. See HP. 137 138 CDE (DT) Common Desktop Environment. 139 Go to the CDE DT CONFIG SECTION of the 140 iconfig.h and uncomment (should be autodetected if you use configure) 141XCOMM #define DtSaverLibrary 142 Here's what it does: 143 The DT screensaver is part of the dtwm window manager and what it does 144 is create a full-screen-sized window for each screen of your display. 145 This is different from other screen savers which use virtual roots. 146 147 What the DTSAVER option does is basically call a DT routine that 148 returns the id's of the windows it creates for the screensaver. Then 149 xlockmore will use these windows to display its stuff. 150 151 DT has a program where you can select your screensaver modes (or 152 screen saver programs), ala xmlock, and set your screensaver settings. 153 It also creates a small window where if you select a particular mode 154 it will run the screen saver and display it on that small window. 155 156 Here's how to set it up on your home directory. 157 cp etc/dtprofile $HOME/.dtprofile 158 This uses a ksh syntax. If your shell is csh or other change it 159 accordingly. 160 cp etc/dtscreen.dt $HOME/.dt/types 161 The actions points to /usr/remote so you may want to change this. 162 After this you need to completely logout from your CDE session and log 163 back in so it will read the .dtprofile. (If you just modify the actions 164 in dtscreen.dt you don't need to log out; you can simply restart your 165 dtwm.) 166 Here's how to set it up on your system. 167 edit /usr/dt/bin/Xsession DTSCREENSAVERLIST to contain the 168 DTSCREENSAVERLIST stuff in etc/dtprofile 169 cp etc/dtscreen.dt /usr/dt/appconfig/types/C/dtscreen.dt 170 171 The disadvantage to the above is some features of xlock are absent, 172 in particular, the logout lab feature. This version of xlock does not 173 have a a drop in replacement for the Screen Style Manager. Here is a 174 work around on Solaris in 3 patches: 175 1. Take out Screen option. 176 2. Put in /usr/local/bin/xlock as the default locker. 177 3. Turn off the default DT locking mechanism. 178*** /usr/dt/app-defaults/C/Dtstyle.orig Fri Apr 12 11:53:00 1996 179--- /usr/dt/app-defaults/C/Dtstyle Thu Jul 24 09:47:34 1997 180*************** 181*** 24,30 **** 182 !# Do not translate the following 183 !### 184 !# componentList specifies the buttons that appear in the Style Manager. 185! Dtstyle*componentList: Color Font Backdrop Keyboard Mouse Beep Screen Dtwm Startup 186 187 !# The Style Manager may be oriented vertically by commenting out this line 188 Dtstyle*mainRC.orientation: HORIZONTAL 189--- 24,31 ---- 190 !# Do not translate the following 191 !### 192 !# componentList specifies the buttons that appear in the Style Manager. 193! !#Dtstyle*componentList: Color Font Backdrop Keyboard Mouse Beep Screen Dtwm Startup 194! Dtstyle*componentList: Color Font Backdrop Keyboard Mouse Beep Dtwm Startup 195 196 !# The Style Manager may be oriented vertically by commenting out this line 197 Dtstyle*mainRC.orientation: HORIZONTAL 198*** /usr/dt/appconfig/types/C/dt.dt.orig Fri Apr 12 11:53:28 1996 199--- /usr/dt/appconfig/types/C/dt.dt Thu Jul 24 11:32:21 1997 200*************** 201*** 226,235 **** 202 ACTION LockDisplay 203 { 204 LABEL LockDisplay 205! TYPE TT_MSG 206! TT_CLASS TT_REQUEST 207! TT_SCOPE TT_SESSION 208! TT_OPERATION Display_Lock 209 DESCRIPTION The LockDisplay action locks the workstation. \ 210 You must know the user's or root password to \ 211 unlock the workstation. 212--- 226,239 ---- 213 ACTION LockDisplay 214 { 215 LABEL LockDisplay 216! # TYPE TT_MSG 217! # TT_CLASS TT_REQUEST 218! # TT_SCOPE TT_SESSION 219! # TT_OPERATION Display_Lock 220! TYPE COMMAND 221! ARG_COUNT 0 222! WINDOW_TYPE NO_STDIO 223! EXEC_STRING /usr/local/bin/xlock 224 DESCRIPTION The LockDisplay action locks the workstation. \ 225 You must know the user's or root password to \ 226 unlock the workstation. 227*** /usr/dt/config/C/sys.resources.orig Fri Apr 12 11:53:15 1996 228--- /usr/dt/config/C/sys.resources Thu Jul 24 11:33:57 1997 229*************** 230*** 82,88 **** 231 232 233 dtsession*saverTimeout: 10 234! dtsession*lockTimeout: 30 235 dtsession*cycleTimeout: 3 236 dtsession*saverList: StartDtscreenBlank 237 238--- 82,89 ---- 239 240 241 dtsession*saverTimeout: 10 242! !#dtsession*lockTimeout: 30 243! dtsession*lockTimeout: 0 244 dtsession*cycleTimeout: 3 245 dtsession*saverList: StartDtscreenBlank 246 247 248 Using xlock from the dtwm front panel 249 (from Sun Infodoc ID 13527 available from http://sunsolve.sun.com) 250-------------------------------------------------------------------- 251First the easy way (This is to overwrite the default CDE action) 252~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 253 2541. Run dtcreate 2552. Create an action called LockDisplay 2563. Set the "Command when action is opened" field to: 257 /usr/openwin/bin/xlock 2584. Set the "Window Type" field to No Output. 2595. Save the file ==> this creates a LockDisplay.dt in ~/.dt/types 2606. Reload the action. 261 262This will help you to bring up xlock when you are using lock in the 263front panel. 264 265 266 267 268Second way (another way to use action) 269~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 270 2711. Create a new action for your desktop. We'll call it Xlock. 2722. Tell the desktop about the new action and then test it. 2733. Modify the front panel so that it will call your new 274 action, Xlock, instead of the old action, LockDisplay. 275 2761. CREATING A NEW ACTION: 277 278 - cd to ~/.dt/types and create a file called Xlock.dt. 279 - Add the following action definition to this file. 280 281ACTION Xlock 282{ 283 LABEL Xlock 284 ARG_COUNT 0 285 TYPE COMMAND 286 WINDOW_TYPE NO_STDIO 287 EXEC_STRING /usr/openwin/bin/xlock 288 DESCRIPTION xlock 289} 290 291 - This action definition defines an action called "Xlock". 292 When the action is called, it will execute xlock by 293 calling /usr/openwin/bin/xlock. 294 2952. TELLING THE DESKTOP ABOUT THE NEW ACTION AND TESTING IT: 296 297 - Now that we have defined the new Xlock action, we need to 298 first tell the desktop about it and then test it. 299 - To tell the desktop about the new action bring up 300 the "Application Manager". You can do this by selecting 301 it from the front panel. 302 - From the Application Manager, select "Desktop_Tools" 303 - Now, select "Reload Actions". 304 305 - At this point, the desktop knows about the new Xlock action. 306 To test it, type "dtaction Xlock". Xlock should start up. 307 308 3093. ADDING THE NEW ACTION TO THE FRONT PANEL: 310 311 - copy the dtwm front panel configuration file, dtwm.fp, from 312 /opt/CDE/appconfig/types/C directory to your personal dt 313 directory "~/.dt/types" directory. 314 - cd to ~/.dt/types 315 - From here, edit the dtwm.fp 316 - Search for Lock. You should see something like: 317 318CONTROL Lock 319{ 320 TYPE icon 321 CONTAINER_NAME Switch 322 CONTAINER_TYPE SWITCH 323 POSITION_HINTS 1 324 ICON Fplock 325 LABEL Lock 326 PUSH_ACTION LockDisplay 327 HELP_TOPIC FPOnItemLock 328 HELP_VOLUME FPanel 329} 330 331 - When you press the lock icon on the front panel, it calls 332 the action LockDisplay. The above paragraph is the definition 333 for that front panel lock icon. 334 335 - To get the front panel lock icon to call the action we 336 just defined, Xlock, instead of the LockDisplay action, all 337 you need do is change the PUSH_ACTION line from 338 "LockDisplay" to "Xlock". 339 340CONTROL Lock 341{ 342 TYPE icon 343 CONTAINER_NAME Switch 344 CONTAINER_TYPE SWITCH 345 POSITION_HINTS 1 346 ICON Fplock 347 LABEL Lock 348 PUSH_ACTION Xlock 349 HELP_TOPIC FPOnItemLock 350 HELP_VOLUME FPanel 351} 352 353 - Note: You might change the Label field to Xlock and you 354 might remove the HELP_TOPIC and HELP_VOLUME fields, but this 355 modification is not necessary. 356 357 - Now tell the window manager to reread the configuration 358 files. You do this by selecting "Restart Workspace Manager..." 359 from your workspace menu. 360 361 - Press the lock icon on the front panel...xlock should be 362 called. If not, make sure your DTDATABASESEARCHPATH 363 environment variable contains $HOME/.dt/types. 364-------------------------------------------------------------------- 365 366 Cygwin32: 367 Build like this: 368 CFLAGS="-O2 -m486 -Wall" CXXFLAGS="-O2 -m486 -Wall"\ 369 ./configure --prefix=/usr/X11R6 --disable-allow-root --disable-bomb\ 370 --enable-unstable --enable-orig-xpm-patch --enable-xlockrc\ 371 --enable-def-play="cat > /dev/dsp < " 372 Not done: text3d (sound is better with wav files) 373 Currently fpos_t gives a bunch of errors 374 http://groups.google.com/group/nodejs/browse_thread/thread/9b1634f50a3a4864 375 I used the "most ugly solution" and it seems to work. Add 376#include "/usr/include/cygwin/config.h" 377 to the top of config.h after you run configure. 378 379 DCE authentication (tested only on HP's) 380 See iconfig.h (xmkmf) or modes/Makefile.in (configure). 381 382 Digital Unix 383 Reported that 3.2D (8bpp) password screen color map gets messed up 384 sometimes when in random mode as it switches from one mode to another. 385 386 ESIX 387 Similar to Solaris2.x. You will need a -DSVR4 to compile. 388 chmod 440 /etc/shadow 389 if you get libX11.so.xxx not found 390 link with the static versions of the X libraries 391 chmod 2755 xlock 392 393 FreeBSD 394 One may have to setuid xlock to root (are there any objections?). 395 Also see "XFree86" if applicable. 396 397 HP 398 Shift-Control-Break is caught. This uses a library Xhp11 that may 399 not exist on some systems. Comment out 400 XHPDisableReset(dsp); 401 and 402 XHPEnableReset(dsp); 403 in "xlock.c" if you do not have this library. 404 May have to setuid xlock to root. 405 The optimizer may break in xlock/ . 406 HP's "make": 407 HP's "make" can not handle "+=" so if you use the iconfig.h, you 408 have to group all your DEFINES into one long line and use "=" 409 instead. GNU's "make" solves this problem. 410 HP-UX with Secured Passwords: 411 Compile with -DHPUX_SECURE_PASSWD and setuid xlock to root. 412 HP-UX with Passwd Etc: 413 Compile with -DHP_PASSWDETC . 414 Link with -lrgy -lnck -lndbm . 415 This is insecure so make sure you know this by having you go to the 416 code to enable it. 417 Calls to XSetScreenSaver when using CDE (i.e. not called with -dtsaver) 418 are not supported. This can cause a disruption in the rpc ttdbserver 419 system resulting in the CDE lock and exit buttons to fail, 5 to 50% 420 of the time. I am told this will not be fixed by HP, only documented. 421 The only supported method of doing this stuff is via dtstyle. 422 configure --without-editres if configure gets tripped up 423 I found on my system -g -O trips up on life.c and shape.c ... so just 424 have one or the other. 425 426 IRIX (SGI) 427 OpenGL works but may be a little flaky. 428 Add this to the Makefile. 429 -DglGenTextures=glGenTexturesEXT\ 430 -DglDeleteTextures=glDeleteTexturesEXT\ 431 -DglBindTexture=glBindTextureEXT 432 xmlock will not work because there is a /usr/bin/X11/xlock too, 433 so either rename that one or do not use xmlock. 434 435 KERBEROS 436 See iconfig.h (xmkmf) or configure --help . 437 438 Linux (Intel 80386, 80486, & Pentium) 439 Red Hat and PAM ... may not work ... #define BAD_PAM in config.h after 440 you do a configure and before a make. Then make sure xlock is setuid 441 root. 442 If you are using elf _or_ shadow passwords: 443 xlock should compile with -DHAVE_SHADOW 444 this is already forced if you have elf so do not worry, it should 445 work even if you do not have shadow passwording. 446 If you are _not_ using elf and are using shadow passwords: 447 (this old version of shadowing has a _MAJOR_ known security flaw) 448 link with -lshadow -lgdbm 449 Next if using shadow passwords: 450 chown root.root xlock (or root.shadow if it exists) 451 chmod 4755 xlock 452 (chmod 2755 xlock may be better if shadow has group read for root group) 453 Also check that the following was done: 454 Your /usr/X11R6/lib/X11/config/linux.cf should have 455#define HasShadowPasswd YES 456 This would let the iconfig.h work automatically for compile/link. 457 chown root.root /etc/shadow (or root.shadow if it exists) 458 chmod 400 /etc/shadow 459 (chmod 440 /etc/shadow may be better). 460 If you want to install shadow passwords on a system that doesn't 461 already have them (be careful, it can be tricky), see 462 http://sunsite.unc.edu/linux/HOWTO/Shadow-Password-HOWTO.html 463 XShm.h needed by fzort.c... pull it in with 464 sudo apt-get install libxext-dev 465 466 Also see "XFree86" if applicable. 467 468 Linux (Alpha) 469 Change the order of XLIB and XPMLIB in the iconfig.h so the XPMLIB 470 comes first. Intel stuff above probably applies as well. 471 472 Mesa and OpenGL 473 I assume the Mesa 3-D Graphics Library for the Imakefile. See below 474 on availability. Follow its instructions and then go to Mesa 475 section of the iconfig.h and uncomment 476XCOMM #define GLLibrary 477 Mesa and sometimes OpenGL are autodetected if you use configure. 478 xlock using the Mesa Libraries (<= 2.6) setuid root has a known 479 method for users to obtain root privledges! 480 Mesa leak (<=3.4.1) you may want to fix a leak for glXUseXFont() 481*** src/X/xfonts.c.orig Fri Feb 9 09:42:36 2001 482--- src/X/xfonts.c Thu May 3 09:24:21 2001 483*************** 484*** 260,266 **** 485 bm = (GLubyte *) MALLOC((max_bm_width * max_bm_height) * sizeof 486 (GLubyte)); 487 if (!bm) { 488! XFreeFontInfo( NULL, fs, 0 ); 489 gl_error(NULL, GL_OUT_OF_MEMORY, 490 "Couldn't allocate bitmap in glXUseXFont()"); 491 return; 492--- 260,266 ---- 493 bm = (GLubyte *) MALLOC((max_bm_width * max_bm_height) * sizeof 494 (GLubyte)); 495 if (!bm) { 496! XFreeFontInfo( NULL, fs, 1 ); 497 gl_error(NULL, GL_OUT_OF_MEMORY, 498 "Couldn't allocate bitmap in glXUseXFont()"); 499 return; 500*************** 501*** 375,381 **** 502 } 503 504 FREE(bm); 505! XFreeFontInfo( NULL, fs, 0 ); 506 XFreeGC (dpy, gc); 507 508 /* Restore saved packing modes. */ 509--- 375,381 ---- 510 } 511 512 FREE(bm); 513! XFreeFontInfo( NULL, fs, 1 ); 514 XFreeGC (dpy, gc); 515 516 /* Restore saved packing modes. */ 517 518 519 PAM 520 http://www.kernel.org/pub/linux/libs/pam/ 521 Rplay 522 Audio package. See below on availability. Follow its instructions and 523 then go to iconfig.h and uncomment (should be autodetected if you use 524 configure) 525XCOMM #define RplayLibrary 526 See config directory for example. (Note: The example files are 527 concerned with getting it working ... not security). 528 529 Solaris2 and greater (Sun SPARC) 530 I found this link helpful to link with the native g++ on Solaris 10. 531 ln -s /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/libgcc.a libgcc.a 532 You could use Mesa or OpenGL. I found a developers version of OpenGL at 533 http://www.sun.com/software/graphics/OpenGL/index.html 534 Solaris2.6 may not work with rplay. configure --without-rplay 535 If you get something like: 536xlock.c:1584: `sigset_t' undeclared (first use this function) 537 try removing -I/usr/include from the Makefiles or get rid of -Xc 538 in the xlock/Makefile. If someone figures out a way around this 539 in the code let me know. 540 To get xlock working with Sun's GL libraries and includes 541 If you get "macro `glNormal3f' used with just one arg" ... you need 542 -DSUN_OGL_NO_VERTEX_MACROS 543 If using Imakefile, see iconfig.h . 544 After a make, use on a display that supports GLX `xdpyinfo | grep GLX` 545 Imake will compile with the -DHAVE_SHADOW switch. 546 With GNU's gcc, get rid of the "-ansi" during compilation, also 547 one may want to get rid of the -xF references in 548 /usr/openwin/lib/config/sun.cf and Imake.tmpl if you get a 549 cc: language F not recognized 550 Solaris2.x NIS+ or not using NIS (/etc/passwd): 551 If you use netgroup make sure there is a return at the end of file. 552 If your using g++-2.95 or later and have old X11 includes you may have 553 to change "g++" to "g++ -fpermissive" in the Makefiles. 554 Sometimes a path to stdc++ library or something is not set right by 555 configure. The symptom is that xlock runs fine as root but gives a 556 "No such file or directory" error for a library when run by a user. 557 Edit with the modes/Makefile adding to XLOCKLDFLAGS the path to the 558 directory of the library and rebuild. 559 560 SunOS4.1.x (Sun Sparc & 680x0) 561 bubble may crash the xnews server if patch 100444-76 OpenWindows V3.0 562 Server patch is installed. To test this 563 `strings /usr/openwin/bin/xnews | grep Patch` 564 It would then show Patch #3000-124 if 10044-76 is installed. 565 Put in a link from /usr/include/X11 to your ${OPENWINHOME}/include/X11 566 to use the xmkmf or use the configure file provided. 567 gcc -Wall gives a lot of silly warnings, its safe to disregard them. 568 If your using g++-2.95 or later and have old X11 includes you may have 569 to change "g++" to "g++ -fpermissive" in the Makefiles. 570 571 Ultrix (DEC) 572 I heard that the logout button just kills xlock. 573 USE_XLOCKRC feature unimplemented, but may not be hard to do. 574 xlock must be either setuid root or setgid authread to validate the 575 password on an Ultrix system. 576 577 VMS (DEC) 578 You may want to set a few things like vroot, bomb, and sound (see audio 579 below) at the top of the file. 580 All you should need to do to build the executable is: 581 $ @make 582 To run xlock a symbol needs to be defined, for example: 583 XLOCK:==$H268SYSEXE:XLOCK 584 where H268SYSEXE is a logical name pointing to the directory where 585 XLOCK.EXE resides. The '$' after == means this is a foreign command 586 and VMS makes the command line available to the program. 587 If the link bombs out I recommend trying it again like the following: 588 $ @make clean 589 $ @make 590 -allowroot only works if you have SYSPRV enabled which is a bit limiting. 591 Unless one uses the privileged install by a system manager. To do 592 this, the following command needs to be executed at system startup 593 (i.e. included in systartup_vms.com): 594 INSTALL ADD {dev}:[{dir}]XLOCK.EXE/PRIV=(SYSPRV) 595 where {dev}:[{dir}] is the full path of the executable. 596 The XLock file normally in /usr/lib/X11/app-defaults needs to be in the 597 directory DECW$SYSTEM_DEFAULTS on VMS systems and be called 598 'DECW$XLOCK.DAT'. 599 USE_XLOCKRC, USE_AUTO_LOGOUT, USE_BUTTON_LOGOUT, & USE_MULTIPLE_ROOT 600 features are not implemented. 601 To use audio: 602 Set "sound" to be 1 in the make.com file. Only available on the Alpha. 603 To get it work on a VAX some editing of the make.com is needed 604 (scan for USE_VMSPLAY) 605 The default sound files are hard coded to be in the current directory 606 see line 128 or so of the resource.c file but can be overruled from 607 the command line or the resourcefile decw$xlock.dat. 608 Sounds did not work for me on the VAX. 609 It should work OK on an AXP. (Due to a bug in the SO driver on some 610 models running VMS7.0, sounds are only available on the headset). 611 To use new event loop: 612 For VMS7.0 and higher : new event loop is used by default. 613 You do not need to install extra software. 614 For VMS6.2 or lower : 615 You need some UNIX utilities installed (XVMSUTILS). See where to get 616 it below. 617 Look at the make.com and xvmsutil stuff. 618 Latest on VMS sound 619 first it tests if the SO: device is present 620 Then if it could be compiled in (license problems) MMOV (Multimedia 621 services for OpenVMS) is used. Probably you'll need the Developer 622 license to get it compiled. 623 limitations : 624 -currently the SYSNAM privilege is needed to play sounds 625 (limitation of MMOV) 626 -some compilation warnings/informationals in the routines which 627 are taken from the users system disk. (problem in MMOV) 628 -One warning due to multiple defined symbols in the libraries 629 issued by Compaq should be ignored. 630 -Presently A developer license for MMOV is needed. Probably by 631 slightly modifying DEF_PLAY the Run-time license could also 632 be usable. 633 634 X11 635 If your using g++-2.95 or later and have old X11 includes you may have 636 to change "g++" to "g++ -fpermissive" in the Makefiles. 637 638 XFree86 639 Add the following to ~/.Xdefaults 640XLock.startCmd: xmodmap -e 'keycode 37=' -e 'keycode 109=' 641XLock.endCmd: xmodmap -e 'keycode 37=Control_L' -e 'keycode 109=Control_R' 642 which unmaps both Control keys when xlock is started, and restores the 643 mapping when it ends. Restart your session so .Xdefaults is read... 644 Works perfectly. 645 Other less perfect methods... 646 Control-Alt-Backspace will defeat locking mechanism and return your 647 console back unless you put "DontZap" in your XF86Config file. 648 (In X11R5, that would be a "dontzap" in your Xconfig file). 649 Control-Alt-F1 (among others) will defeat locking mechanism with 650 virtual terminals. This is not too good, right? If you are using 651 Linux, try vlock on tsx-11.mit.edu in /pub/linux/sources/usr.bin . 652 The current XFree86 (as far as I know) does not have a server 653 extension for catching or disabling VT switching. 654 Here is a work around, put this line in /etc/profile: 655 alias x='(startx >/dev/null &);clear;logout' 656 then use 'x' instead of 'startx' (with no other active VT's). 657 Try configuring with --enable-vtlock . This is experimental and requires 658 xlock being setuid to root so there are security concerns with it. 659 See man pages for its runtime options. 660 661 XPM 662 Full color pixmap package. See below on availability. Follow its 663 instructions and then go to iconfig.h and uncomment (should be 664 autodetected if you use configure) 665XCOMM #define XpmLibrary 666 667 X-Terminal 668 (My heart bleeds for you.) 669 To get xlock to run, run with -remote option or set XLock.remote on 670 in XLock.ad . You might have to use -allowaccess as well. 671 672 tvtwm 673 One used to get following error when running xlock (+nolock) with 674 tvtwm. 675 X Error of failed request: BadWindow (invalid Window parameter) 676 What happens is that RootWindow(dsp, screen) fails when tvtwm is 677 running. There is a kludge fix, but multiscreens will not work 678 right with tvtwm and xlock. (grep on TVTWM in xlock.c). 679 Another option, don't compile with -DUSE_VROOT . If you debug it 680 mail ME -OR- both the author of tvtwm and ME the patch. 681 StickyAbove problems: 682 Windows in a tvtwm that have "StickyAbove" set to true are still 683 visible when xlock (+inroot) is running. If this bothers you, 684 don't compile with -DUSE_VROOT . Is it possible to have xlock 685 set "StickyAbove" to true as well? 686 687 fvwm 688 -install does not install colormaps. fvwm will not allow an 689 application to install its own colormap. You could always edit the 690 source if you have it, (fvwm-1.24r)colormaps.c, where it says 691 if(ReInstall) 692 { 693 XInstallColormap(dpy,last_cmap); 694 } 695 make sure this does not happen. 696 (fvwm does this because its following the X11 docs which say that 697 window managers should not allow an application to install colormaps). 698 699 swirl (and tube) mode 700 Use with -install to see colormap change. 701 See "fvwm" if applicable. 702 "swirl" cycles its colors, except black and white. 703 This is easily seen when on a color monitor one enters: 704 ./xlock -mode swirl -inwindow -install 705 now move the mouse in the window. 706 If you find this annoying compile swirl.c with -DFORCEFIXEDCOLORS. 707 I hear it LOCKS UP on i386BsdArchitecture and tvtwm. 708 With twm (and fvwm see above) the colormap does not change. 709 710 transparent mode 711 Try this fudge: 712 xlock -mode blank -geometry 1x1 -enablesaver 713 714 SafeWord 715 Edit config.h.in ... uncomment SAFEWORD line near bottom. 716 In modes/Makefile.in make sure SAFEWORD is linked in, comment out 717 similar link that does not contain safeword libraries. 718 Put the cust*.h files in the main xlock directory. 719 Use `configure; make`. 720 Get back to me if it works or does not work. 721 722 Dynamic Linking 723 Dynamic Linking using elf on the Linux and Sun. This is kind of fragile 724 and will break other systems. GL modes using Mesa on a PseudoColor 725 display seem to run short of colors. 726 Linux: 727 Not all distributions of Linux have "dlfcn.h" which is needed. 728 Using configure --enable-modules (MODULE_PATH set in modes/Makefile(.in) 729 and xlock/Makefile(.in)) then build as normal. This is not recommended 730 since random mode seems to act very strangely. 731 Uncomment at least "#define Modules" in iconfig.h, run "xmkmf -a" 732 and run make install as normal. 733 Sun: 734 Need Gnu's make 735 Can use gcc (recommended) or cc 736 cc and CC problem with C++ modes (solitaire and text3d) 737 xlock: LoadModule: modes/solitaire.xlk: ld.so.1: xlock/xlock: fatal: 738 relocation error: file modes/solitaire.xlk: symbol __0OnwUi: 739 referenced symbol not found unrecognized mode "solitaire"). 740 configure will not work. 741 Uncomment at least "#define Modules" in iconfig.h. 742 If you have more than one C++ compiler set CXX in iconfig.h 743 (seems to default to g++ for me) 744 xmkmf -a # Ignore errors on Sun (should not get errors on Linux) 745 Edit generated Makefiles like this: 746for i in Makefile xlock/Makefile modes/Makefile modes/glx/Makefile ; do 747 # both cc (& CC) and gcc (& g++) 748 sed -e "s#/usr/ccs/bin/make#/usr/local/bin/make#g" $i > $i.tmp ; mv $i.tmp $i 749 sed -e "s# -z text -M mapfile##g" $i > $i.tmp ; mv $i.tmp $i 750 sed -e "s# -Xc -xF -xcg92##g" $i > $i.tmp ; mv $i.tmp $i 751 #following seds for gcc and g++ only 752 sed -e "s#= cc\$#= gcc#g" $i > $i.tmp ; mv $i.tmp $i 753 sed -e "s#= cc #= gcc #g" $i > $i.tmp ; mv $i.tmp $i 754 sed -e "s# -Kpic##g" $i > $i.tmp ; mv $i.tmp $i 755done 756 For g++ and Sun edit modes/Makefile and modes/glx/Makefile for 757 -isystem change (use grep on isystem to find it). 758 Also, if you have more than one C++ compiler set CXX in Makefile. 759 make install 760 761Personal Use 762------------ 763 You may want to compile with USE_XLOCKRC . xlock will then prompt 764 you the first time you use it for a password. It is then encrypted 765 and stored in your $HOME/.xlockrc file. This is also good for 766 users who have an unrecognized shadow password environment. See 767 iconfig.h file (xmkmf) or `configure --help` for an example. 768 Please note that it may be rude to use xlock in a lab environment. 769 770Lab Environment 771--------------- 772 The auto logout feature, when enabled, will log out a user after 773 30 minutes (by default). The timeout can be changed or disabled 774 with a command-line option (or x resource -- this is allowed because 775 the logout button can always be used; see below). The time 776 remaining before auto-logout is displayed on the password entry 777 screen. 778 779 The logout button, when enabled, is a button that appears on the 780 password entry screen after 5 minutes (configurable at 781 compile-time) that, when clicked, logs out the user. The rationale 782 for this thing is that in a lab environment, we wanted a way for 783 users to be able to reliably lock their display for short periods 784 of time, but still be allowed to have the display locked for longer 785 than that if the lab isn't busy. If the lab IS busy, and there is 786 a need for workstations, the logout button can be used to logout 787 someone who's been gone for more than 5 minutes. 788 789 Of course, the auto-logout and the logout button are 790 enabled/disabled by compile-time defines. All these are OFF by 791 default. One can also force use these features with a local policy 792 of exemptions (e.g. username or group). See the iconfig.h file or 793 `configure --help` for an example. Edit your /etc/xlock.staff 794 file to reflect your policy. If using xdm, you may just want to use 795 -DCLOSEDOWN_LOGOUT (or -DSESSION_LOGOUT <- old way) in conjunction 796 with -DUSE_AUTO_LOGOUT or -DUSE_BUTTON_LOGOUT. That way all 797 backgrounded processes owned by a user do not have to be killed. 798 799 Don't PANIC, the auto-logout and the logout button will not run if 800 you are root. Otherwise, it will kill all of root's processes, not 801 a good idea. As long as you do not lock the screen (using -nolock, 802 -inwindow, or -inroot) the policy of xlock users does not go into 803 effect. If configured with --use-button-logout=-1, the user can decide 804 if he/she wants the logout button enabled (not enabled if 805 XLock.buttonLogout=0). 806 807 Also there are -DUSE_MULTIPLE_ROOT and -DUSE_MULTIPLE_USER options 808 where users with the same uid can unlock the screen. -DXLOCK_GROUP 809 option for all users in the xlock group can unlock. 810 811 blank mode only 812 Change xlock/XLock.ad from 813XLock.mode: random 814!XLock.mode: blank 815 to 816!XLock.mode: random 817XLock.mode: blank 818 819 Do a configure with these options, since they would useless now... 820 configure --without-opengl --without-mesa --without-xpm 821 Edit the generated config.h, add "#define BLANK_ONLY", then to a make. 822 823xlock still does not work: :-( 824------------------------------- 825 If all that does not work you may need to adjust xlock.h, passwd.c 826 xlock.c, and resource.c since these files are highly implementation 827 dependent. If you have to make this kind of change to get it working, 828 let me know. 829 830 You can try compiling with -g and running it with -debug and your 831 favorite debugger, so xlock will run in a more friendly way (i.e. it 832 does not lock the screen). There are also may be compile time switches 833 that could be turned on with -DDEBUG depending on what is not working 834 correctly. 835 836 Here is a simple recipe: 837 Make sure the 12th line in the iconfig.h is a comment 838 (This is because the debug library for xpm is not usually installed) 839XCOMM #define XpmLibrary 840 xmkmf <or configure --without-xpm> 841 edit Makefile on the line with CC = gcc or or CC = cc change to 842 CC = gcc -g -DDEBUG 843 make depend <but not if using configure> 844 make 845 gdb xlock (xdb or dbx xlock may work too.) 846 run -debug <other xlock options you want here> 847 where 848 print <relevant variables> 849 (you may have to use "up" to take you to xlockmore code)> 850 Mail me the results. 851 852 If xlock crashes for you when in random mode... try this and mail 853 me the results. (If it runs for a long time partial result will do 854 (gut the middle part)). 855 xlock -mode random -modelist all +install -debug -verbose 856 -modelist all: all modes except blank 857 -debug: so it does not lock the screen. 858 -verbose: for maximum verbosity. 859 +install: so it does not keep changing the colormap 860 861 862Other things to try: (if you got it working :-) ) 863------------------------------------------------- 864 865 Check out etc directory for menus and other goodies. 866 867 If you like to check out what xlock looks like on multiscreens and you 868 do not have them... but do have Linux and Xnest ... try: 869 Xnest -ac -scrns 3 :1 & 870 xterm -display :1.0 871 And run xlock from the created xterm. (For some reason I have to do 872 it as root). 873 If you are using Mesa, it must be compiled without SHM extension do 874 to a bug in Xnest (even in XFree3.3 == X11R6.3) or you will get 875 "BadDrawable (invalid Pixmap or Window parameter)". 876 Also try sudo apt-get install xserver-xephyr 877 Xephyr -ac -scrns 2 -parent :1.0 -screen 444x444 -parent :1.1 -screen 512x512 :1 & 878 879 You may want to change the 1st line of XLock.ad "random" to "blank", 880 "life", or whatever your favorite is and copy it to 881 /usr/lib/X11/app-defaults or $HOME (or wherever your application 882 defaults files are) and rename to XLock . 883 884 You may want some of the modes never to come up in random. This is 885 already hard coded for the blank mode. See xlock man page on "modelist". 886 In mode.c you can hard code others by just putting the stuff that you do 887 not like in the LockProcs to the end of the static array and in 888 random.c increase NUMSPECIAL by the number of new screens that you do 889 not want displayed. 890 891 You may want to move xlock into /usr/bin/X11 (or wherever your X 892 binaries are). You may also want to move xlock.man to 893 /usr/man/man1/xlock.1 . 894 895 If you want to remove some unwanted modes just edit "mode.h" and 896 "mode.c" grep the for the unwanted modes. You might want to edit 897 the man page and your favorite make file as well. 898 899 I am very interested in cellular automata. I am always looking to 900 improve ant, life, life3d, and life1d. If anyone knows any new 901 collections (I have lifep.zip (May 94) and xlife 3.0) let me know. If 902 you would like further information let me know. There are several 903 run-time options to check out, see docs/cell_automata. 904 905 Still like xscreensaver better? (Obscenities omitted ;) ) Try 906 setting your apps-defaults file for xscreensaver like: 907*programs: xlock -nolock +grabmouse -mode random 908 909 If you want to hack a new mode check out docs/HACKERS.GUIDE. Then 910 when working, just mail it to me, grep on "Maintainer" for the 911 address. 912 913 914Other related stuff (all not maintained by me): 915-------------------------------------------------------------------- 916 NAME 917 LOCATION (last seen at) 918 DESCRIPTION 919 ============= 920 audio/VMS 921 http://axp616.gsi.de:8080/www/vms/mzsw.html 922 fortune (sudo apt-get -y install fortune-mod) 923 ftp://igor.girton.cam.ac.uk/pub/funny/cookie.tgz 924 ftp://ftp.uu.net/systems/unix/BSD/games/fortune 925 ftp://ftp.sterling.com/usenet/alt.sources/index (grep for cookie) 926 Please note that my format is slightly different. The number at the 927 top of the file should match `grep -c "^%%$" fortune.dat` 928 freetype and gltt for text3d 929 copy C:\Windows\Fonts\arial.ttf to /usr/lib/X11/xlock/fonts 930 http://freetype.sourceforge.net/ is the official site for freetype 931 (need 1.3.1) I used configure --prefix=/usr to keep it simple. 932 It fails in ftdump.c but this is in test dir, ignore and just do 933 make install 934 http://gltt.sourceforge.net/ is the official site for gltt (2.5.2) 935 configure was not working so copied mkinstalldirs, install-sh, 936 config.sub, and config.guess this distribution again used 937 configure --prefix=/usr 938 edit GLTTGlyphPolygonizerHandler.h to add GLTTGlyphPolyonizer header 939 To get this to compile with CC on Sun with 2.5 (mainly for xlock 940 maintainer's reference in case he ever has to do it again; if this is 941 built using g++ then xlock must be built using g++ if you want text3d 942 to work). 943 configure --with-ttf-includes=/usr/openwin/include/freetype --with-ttf-libraries=/usr/openwin/lib 944 change g++ reference in generated Makefile to CC 945 change .la references to .a in Makefile to produce a libgltt.a 946 remove -Wall to get rid of warnings in Makefile 947 change compiler_o_lo="no" for libtool 948 remove -fPIC to get rid of warnings in libtool 949 gltt-2.5 may cause xlock to coredump if symbol.ttf or wingding.ttf 950 if xlock tries to use them. The following patch will take care of 951 this: 952*** gltt-2.5/FTFace.C Sat Mar 13 11:51:49 1999 953--- gltt-2.5-DAB/FTFace.C Wed Aug 8 14:06:03 2001 954*************** 955*** 112,117 **** 956--- 112,119 ---- 957 958 if( i == n ) 959 { 960+ return GLTT_FALSE; 961+ #if 0 962 TT_Face_Properties properties; 963 TT_Get_Face_Properties( *face, &properties ); 964 int num_glyphs= properties.num_Glyphs; 965*************** 966*** 125,130 **** 967--- 127,133 ---- 968 969 indices[ascii_code]= glyph_index; 970 } 971+ #endif 972 } 973 else 974 { 975 976 freetype2 and FTGL for text3d2 977 copy C:\Windows\Fonts\arial.ttf to /usr/lib/X11/xlock/fonts 978 http://www.freetype.org/ need 2.x 979 http://homepages.paradise.net.nz/henryj/code/#FTGL 980 => there's a bug in FTGL that is "known" in text3d2 981 gtk 2.0 (sudo apt-get -y install libgtk2.0-dev) 982 imagemagick 983 http://www.imagemagick.org/ 984 imake (sudo apt-get install xutils-dev) xmkmf 985 ftp://hpux.csc.liv.ac.uk/hpux/X11/Core/imake-5.06/imake-5.06-ss-9.03.tar.gz 986 I had to worry about FIXUP_CPP_WHITESPACE. 987 Lesstif (defunct) (sudo apt-get -y install lesstif2-dev) 988 ftp://ftp.hungry.com/pub/hungry/lesstif/lesstif-current.tar.gz 989 Lesstif Library (just like Motif) 990 Man2HTML 991 ftp://sunsite.unc.edu/pub/Linux/system/Manual-pagers/vh-man2html-1.4.tar.gz 992 Mesa (similar to OpenGL) (sudo apt-get -y install libgl1-mesa-dev) 993 ftp://iris.ssec.wisc.edu/pub/Mesa 994 Mesa 3-D Graphics Library (like OpenGL) Mesa-3.0 or greater required. 995 Mesa-2.2 and below has some memory leaks and 2.6 and below has some 996 security concerns. 997 Mingw (sudo apt-get -y install g++-mingw-w64-i686) 998 Motif (sudo apt-get -y install libmotif-dev) 999 PAM (sudo apt-get -y install libpam0g-dev 1000 NAS (audio package, defunct) (sudo apt-get -y install nas-dev) 1001 ftp://ftp.x.org/contrib/audio/nas 1002 OpenGL (for Sun) 1003 http://www.sun.com/software/graphics/OpenGL/ 1004 rplay (audio package, defunct) (sudo apt-get -y install librplay3-dev) 1005 ftp://ftp.x.org/contrib/audio/rplay 1006 UNIX/VMS 1007 Unix-like routines XVMSUTILS can be found at 1008 http://axp616.gsi.de:8080/www/vms/mzsw.html 1009 xautolock (runs xlock after a idle time) 1010 ftp://ftp.x.org/contrib/applications 1011 ftp://sunsite.unc.edu/pub/Linux/X11/screensavers 1012 (I use openwin and I put this in my $HOME/.openwin-init) 1013 toolwait /usr/local/bin/xautolock -time 5 -locker "xlock -lockdelay 30" 1014 XPM 1015 ftp://ftp.x.org/contrib/libraries (sudo apt-get -y install libxpm-dev) 1016 color pixmaps 1017 XPM/VMS 1018 use the one above or xlock may bomb out, 1019 compile with cc/standard=vaxc/define=(need_strcasecmp,need_strdup) 1020 except when using XVMSUTILS. 1021 xscreensaver 1022 ftp://ftp.x.org/contrib/applications 1023 http://www.jwz.org/xscreensaver 1024 1025 1026Operation: (Blurb taken from Darren Senn's xlock) 1027------------------------------------------------- 1028 1029 Under X, run xlock. The screen will clear, and some pretty animated 1030 picture (exactly which depends on which module is active) will appear 1031 on the screen. If you hit a key, then the screen will clear, and 1032 (unless you've changed the application defaults file that I packaged 1033 with this) you'll get a black screen with some graphics in the top 1034 center. These graphics consist of a reduced size image of the module 1035 you were viewing, the name of the user who executed xlock, and 1036 password prompt field, and some short instructions. 1037 1038 At this point, you can either click on the graphic to return to xlock, 1039 or you can type a password. If the password is verifiable as the 1040 root password, or the password of the user listed above, then xlock 1041 will terminate. THIS IS THE ONLY WAY TO STOP XLOCK WITHOUT SHUTTING 1042 DOWN THE X SERVER. That's what makes it a lock. 1043 1044 1045Resources: (Also taken from Darren Senn's xlock) 1046------------------------------------------------ 1047 1048 There are two sets of resources for XLock. The first set are (what I 1049 call) global XLock resources, while the second set consists of 1050 module-specific resources. 1051 1052 The global resources are: 1053 XLock.mode: This sets the module. 1054 XLock.font: This is the font used on the password entry screen. 1055 XLock.background: The background color for the password entry screen. 1056 XLock.foreground: The foreground color for the password entry screen. 1057 XLock.username: The label for the field indicating the user name. 1058 XLock.password: The label for the password prompt. 1059 XLock.info: The "short instructions" to print. 1060 XLock.validate: A message to display while checking the password 1061 XLock.invalid: A message to display if the password is incorrect 1062 XLock.nice: How much XLock should nice itself. 1063 XLock.timeout: How long to wait idle at the password prompt. 1064 XLock.timeelapsed: Message to see how long lock running (yes or no) 1065 XLock.mono: Monochrome mode (yes or no) 1066 XLock.nolock: disable the lock mechanism (yes or no) 1067 XLock.remote: allow remote locking (meaningless under linux) 1068 XLock.allowroot: allow the root password to unlock (yes or no) 1069 XLock.enablesaver: allow the system screensaver to work (yes or no) 1070 XLock.allowaccess: allow other clients to connect while active 1071 XLock.echokeys: Echo "?" for each password keypress (yes or no) 1072 XLock.usefirst: Ignore the first character typed (yes or no) 1073 XLock.verbose: Verbose mode. (yes or no) 1074 XLock.inwindow: allow the xlock to run in a window (yes or no) 1075 XLock.inroot: allow the xlock to run in the root window (yes or no) 1076 XLock.grabmouse: Grab the keyboard and mouse (yes or no) 1077 1078 XLock has a number of modules which it can display. (See the man page 1079 for a complete list). It turns out that each module is characterized 1080 by a number of initializations, separated by a number of "draws". 1081 Each module has the following resources defined: 1082 1083 XLock.<module>.delay: How long to wait between draws (usec) 1084 XLock.<module>.batchcount: May mean various things (see man page). 1085 XLock.<module>.cycles: Controls the timeout of screen (see man page). 1086 XLock.<module>.size: Controls size of objects on screen (see man page). 1087 XLock.<module>.saturation: Saturation (as in HSV) of colors to use. 1088 1089 1090Acknowledgments: 1091---------------- 1092 1093 I did not write the original algorithms in any of the lock screens 1094 (except wator, bug, life1d, demon, ant, daisy, and voters), although I 1095 did convert many of the new ones to run with xlock. I tried to follow 1096 the original style of Patrick Naughton. Many of the additions 1097 were "borrowed" from xscreensaver (Jamie Zawinski <jwz AT jwz.org>). 1098 Some of the others were "borrowed" from old demos from Sun. Many more 1099 are contributions. 1100 1101 I will consider putting new ones in if (1) they are more or less public 1102 domain (i.e. BSD, sorry no GNU copyrights), (2) they are neat (I am 1103 biased towards mathematically based programs (especially the Computer 1104 Recreations of Scientific American)), and (3) I have the time. 1105 1106 Also many thanks to the people that helped me countless times with 1107 xlock mentioned in "Revisions", especially Jouk Jansen, Tom Schmidt, 1108 David Hansen, Ed Mackey, Marcelo Vianna, Ron Hitchens, Heath Kehoe, 1109 Frank Fesevur, & Eric Lassauge. 1110 1111