1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-03-15 14:27:19 +00:00

Compare commits

...

27 Commits

Author SHA1 Message Date
Nick Briggs
65bbcb7d9d Remove makepathname() (#410)
makepathname() is only ever called with one of two constant string
arguments, in one case (DOS) such that it only does a strncpy(...),
and the other case (non-DOS) expanding "~" to the current user's home
directory. Additional code duplicates realpath() functionality but is
never used.
2021-11-26 19:53:26 -08:00
Nick Briggs
987cf4c7c6 Correct error for missing byteswap macros in tosfns.h EVAL implementation (#407)
Commit c46fcce307 fixed a warning for
incompatible pointers to nnewframe() but did not consider that the
order of the DLwords is swapped depending on the endianness of the
system it is running on.  Add the necessary GETBASEWORD() macros to
access the items when constructing the pointer.
2021-11-06 18:36:25 -07:00
Nick Briggs
c46fcce307 Fix "warning: incompatible pointer types" in EVAL implementation (#406)
nnewframe() as called from the EVAL implementation expects to be passed
the address of an array of two DLwords.  Do that, and compose the 32-bit
result correctly rather than passing the address of a (32-bit) LispPTR
and then having to swapx() that result to get the expected value.
2021-11-04 20:18:27 -07:00
Nick Briggs
de5ea2110f Correct integer type warnings (#405)
* Correct warning: cast to smaller integer type -- X_init/lispbitmap

* Fixes to INTRSAFE, INTRSAFE0 and ensure TIMEOUT, TIMEOUT0 used appropriately

INTRSAFE and INTRSAFE0 must clear errno before executing the library or system
call because not all library calls set errno on success.
Avoid casting pointers or larger integer values down to smaller ints before
comparing to 0 or -1, and use NULL (a pointer) rather than 0.

Fix cases where the result of the library call is a pointer rather than an int
to use TIMEOUT0 instead of TIMEOUT, testing for NULL rather than -1
on timeout (errno == EINTR)

* Remove useless validity check of LASTVMEMFILEPAGE_word pointer

* Convert pointer arithmetic type in drawline from int to ptrdiff_t

* Add NOTE warning about a 32-bit vs 64-bit issue affecting currently unused GET_NATIVE_ADDR_FROM_LISP_PTR
2021-11-04 09:08:55 -07:00
Nick Briggs
6c241f1eaa Make opcode_table (names of opcodes) visible as useful debug aid. 2021-10-29 10:02:47 -07:00
Nick Briggs
19688bc314 Drop setuid privilege correctly. (#401) 2021-10-29 09:52:51 -07:00
Nick Briggs
c39b751f42 Rework make_atom() to allow removal of parse_number() (#404)
No calls to make_atom() depend on the ability to parse the atom's
pname as a number.  Additionally, the parse_number() implementation
used here was non-functional.

We remove parse_number() and adjust the parameter list of make_atom()
to remove the non_numericp flag.
2021-10-29 09:51:32 -07:00
Nick Briggs
75c668f1cd The pointers Atomspace, Spospspace, Snegspace, Arrayspace can be removed (#402)
These pointers are neither initialized nor referenced anywhere in the code.
2021-10-10 16:55:33 -07:00
Nick Briggs
a25368714f Use SHELL rather than /bin/csh when forking shells. Issue Interlisp/medley#384 (#400)
As long as $(SHELL) names an executable that appears in /etc/shells (as determined
by the getusershell() function) use that.  It used to always use /bin/csh, but some
modern distros do not ship with csh installed.  Using the user's preferred shell
seems like a better choice, while allowing the choice from /etc/shells gives some
additional flexibility.
2021-10-08 17:58:29 -07:00
Nick Briggs
3cdbccd0c7 Implement -noscroll option to ldex to disable X window scroll bars (#399)
Adds a -noscroll option, parsed as an X option, also accessible via
resource ldex*noscroll, which avoids adding the bottom and side scroll
bars and the bit-gravity control buttons to the main Lisp display window.

Unless the geometry given for the X window in which the Lisp screen is
displayed is at least as big as the Lisp screen part of the Lisp screen
(bottom, right) will not be visible.

On macOS with XQuartz, maximizing the X window will bring it to
the size of the Lisp screen (or the size of the display, whichever is smaller)
2021-09-30 10:44:37 -07:00
Nick Briggs
4d2bf13347 Add description for ethernet related flags to compile-flags 2021-09-25 15:01:21 -07:00
Nick Briggs
f7e40d1ed5 Use symbolic constants for COLOR related subrs rather than numbers
cases for subrs UNCOLORIZE-BITMAP, COLORIZE-BITMAP, COLOR-8BPPDRAWLINE (which
are not compiled into current code) can have the numbers replaced by the
symbolic constants that are now defined in subrs.h
2021-09-19 14:19:42 -07:00
Nick Briggs
9bb5a4298c Use symbolic constant for subr CAUSE-INTERRUPT switch/case rather than number (0222) 2021-09-19 14:12:47 -07:00
Nick Briggs
533c935e72 Fix various bugprone warnings (#397)
* Fix some warnings in main.c

main.c:678: narrowing conversion from 'unsigned long' to signed type 'int' is implementation-defined
main.c:493: The return value from the call to 'seteuid' is not checked.

* Fix some warnings in array operations

Instead of extracting typenumbers to an 'int', use the unsigned typenumber directly

array3.c:49: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined
array4.c:61: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined
array5.c:63: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined
array6.c:50: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined

* Resolve type mismatches for version numbers and propp flag

dir.c:1849: narrowing conversion from 'unsigned int' to signed type 'int'
dir.c:1850: narrowing conversion from 'unsigned int' to signed type 'int'
dir.c:2114: narrowing conversion from 'unsigned long' to signed type 'int'
dir.c:2207: narrowing conversion from 'unsigned int' to signed type 'int'

* Resolve type mismatches for version numbers and strlen result type

dsk.c:1072: narrowing conversion from 'unsigned long' to signed type 'int'
dsk.c:1108: narrowing conversion from 'unsigned long' to signed type 'int'
dsk.c:1549: narrowing conversion from 'unsigned long' to signed type 'int'
dsk.c:1712: narrowing conversion from 'unsigned long' to signed type 'int'
dsk.c:1751: narrowing conversion from 'unsigned long' to signed type 'int'
dsk.c:3426: narrowing conversion from 'unsigned int' to signed type 'int'

* Resolve type mismatches for strlen result type

ufs.c:213: narrowing conversion from 'unsigned long' to signed type 'int'
ufs.c:404: narrowing conversion from 'unsigned long' to signed type 'int'

* Resolve type error

uutils.c:117: 'signed char' to 'int' conversion [bugprone-signed-char-misuse,cert-str34-c]
2021-09-16 17:24:25 -07:00
Nick Briggs
6fedd97d21 add yield subr (#398)
* Add experimental SUBR to call nanosleep() for experiments in reducing CPU load

This adds a SUBR, sb_YIELD, value (octal) 0322 which takes a single number
0..999999999 which is the number of nanoseconds to pass to nanosleep().

The return value is T if the call to nanosleep() was executed or NIL
if it was not (argument out-of-range, or other error in getting the
number from the argument).

To use this experimental SUBR in a sysout you should:

   (SETQ \INITSUBRS (CONS '(YIELD #o322) \INITSUBRS))

then you can define functions that use that SUBR:

   (DEFINEQ (BACKGROUND-YIELD () (SUBRCALL YIELD 833333)))
   (COMPILE 'BACKGROUND-YIELD)
   (SETQ BACKGROUNDFNS (CONS 'BACKGROUND-YIELD BACKGROUNDFNS))

* Update to use subrs.h newly generated from LLSUBRS

The subrs.h include file is generated by WRITECALLSUBRS based on the \INITSUBRS
list.  This update provides for the new YIELD subr in the generated file,
and makes some necessary updates to the C code implementations for some subr
names which have changed.
2021-09-15 10:30:04 -07:00
Nick Briggs
a70b18d444 Avoid use of sscanf() for parsing simple integer values (#396)
There is no reason to use sscanf() rather than strtol()/strtoul()
for parsing simple integer values from a string.
Resolves a number of cert-str34-c warnings from clang-tidy.
2021-09-12 14:24:05 -07:00
Larry Masinter
c7adb3c4ba Add scripts to aid in constructing github releases of the maiko artifacts (#395)
Until these are superceded by github actions, if the github CLI tool "gh"
is installed, a github release of the maiko code can be created by running
   ./start-release
from the maiko/bin directory, and then running
   ./release-one
for each combination of OS/architecture that should be included in the
release.

The scripts assume that the maiko code is checked out in a directory
named "maiko" (and may produce unexpected results if run from somewhere else)

Co-authored-by: Nick Briggs <nicholas.h.briggs@gmail.com>
2021-09-10 13:33:54 -07:00
Nick Briggs
b1545e4ccc fix 'signed char' to 'int' conversion [cert-str34-c]
Fortunately here we don't need to convert to unsigned char then int,
we can do the only comparisons we need staying in the char domain.
2021-09-09 18:01:02 -07:00
Nick Briggs
4f79f55c20 Replace uses of atoi() with strtol() or stroul() as appropriate (#394)
As a side-effect of this change, we also resolve a a problem with
signed file version numbers, so that instead of version 2147483647
wrapping to -2147483648 we can go as far as 4294967296 before we
have issues.  Various sprintf() formats get changed from %d to %u.
The DOS version code is left behind as int versions.
2021-09-08 09:58:01 -07:00
Nick Briggs
85c4ebf0ac Merge branch 'master' of github.com:Interlisp/maiko 2021-09-03 16:47:02 -07:00
Nick Briggs
7284e19b32 Suppress clang-tidy warnings for uses of bzero()
The only uses of bzero() in the maiko sources come about because it is used in the macOS
definition of the FD_ZERO() macro in sys/select.h.  Suppress the warning by including
   -clang-analyzer-security.insecureAPI.bzero
in the clang-tidy list of checks.  This may well have been replaced by a memset()
call in more up-to-date macOS releases.
2021-09-03 16:39:29 -07:00
Nick Briggs
0de1b1438b Left shift is undefined if left argument is negative (#454) (#393) 2021-09-03 12:46:21 -07:00
Nick Briggs
740f012254 Eliminate URaid access to uninitialized pointer when saving post-crash VM image
Old code attempted to save the display region through an uninitialized pointer
which occurs nowhere else in the system.  Removed the save.
2021-09-02 15:14:32 -07:00
Nick Briggs
377a6f3f47 Rewrite keyboard and async I/O handling to improve performance and reduce dependency on async I/O signals (#392)
* Rewrite keyboard and async I/O handling to improve performance and reduce dependency on async I/O signals

Replaces the SIGIO handler, which used to process X events in the interrupt context, with
a stub routine that sets a flag to signal processing is required.
Actual event processing is moved to the main dispatch loop where Lisp periodic interrupts
are handled.

Removes the X connection file descriptor from the set of fds contributing to SIGIO events
and moves the processing of X events to where the Lisp periodic interrupt is handled in
the main dispatch loop.  This code is already guarded by a check for XPending() so can
be called regardless of whether any file descriptors are known to be ready.

Actual processing of async I/O events and X events are handled by procedures
process_io_events() and process_Xevents() respectively.  For the most part these are
a renaming of getsignaldata() and getXsignaldata().

The Lisp periodic timer (VTALRM) was set to operate with a 25000 us period (40 Hz),
but on modern hardware it is possible to run this timer with a period of 10000 us (100 Hz)

Incidentally, a bug was noted (and fixed) in the X event handling code for motion events:
Mouse motion without any keyboard activity should not add an entry to the keyboard event
ring buffer as these events do not represent a key state change.
Since the ring buffer is of limited size, when it is filled new events are ignored
until the buffered events are processed.  This resulted in the loss of a key/mouse button
transition (up or down) if the mouse was moved about "too much" between keyboard events.

A few incidental cleanups were also made:
  - KBDEventFlg initialization fixed (wrong semantic type)
  - Event_Req renamed to IO_Signalled (more appropriate name)
  - int_io_open() sets up process (self) to handle SIGIO generated by O_ASYNC operations
  - LOCK_X_EVENTS turned off since X library calls can no longer happen in an interrupt context

* Use of O_ASYNC must depend on the symbol being defined (looking at you, Cygwin)

* Add SA_RESTART flag to sigaction for SIGVTALRM periodic interrupt

* LOCK_X_UPDATE is no longer needed and should not be defined by default for Solaris in version.h
2021-09-02 12:42:51 -07:00
Nick Briggs
c07618f55c Do not attempt to use ether_fd as valid fd if it is -1. Closes medley #450 2021-09-02 10:35:10 -07:00
Nick Briggs
dbbb59b30b Add clang-tidy to CMakeLists.txt -- run it at compile time if it is found at cmake configuration time 2021-08-29 13:39:07 -07:00
Nick Briggs
e957e331c4 Lock X updates for all systems and lock around X cleanup at exit (#391)
* Lock X updates for all systems and lock around X cleanup at exit

All systems which could generate I/O interrupts on the X file descriptor need
to have locking enabled, or there is a high probability that the X library
will deadlock. This requirement may be removed in the future with restructuring
of the way that the interrupt driven I/O is handled.

Ensure that the appropriate XLOCK/XUNLOCK is done around the X window
closing code.

* Also lock X updates when building with CMake.
2021-08-26 16:29:10 -07:00
61 changed files with 824 additions and 883 deletions

View File

@@ -16,6 +16,19 @@ IF(CMAKE_C_COMPILER_ID MATCHES "SunPro")
SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
ENDIF()
find_program(
CLANG_TIDY_EXE
NAMES "clang-tidy" "clang-tidy12" "clang-tidy11" "clang-tidy10"
DOC "Path to clang-tidy executable"
)
IF (CLANG_TIDY_EXE)
# There are many many warnings for strcpy instances to deal with,
# but suppress it for now so that other issues are more obvious
#
SET(CMAKE_C_CLANG_TIDY ${CLANG_TIDY_EXE} -checks=-*,cert-*,clang-analyzer-security.*,-clang-analyzer-security.insecureAPI.strcpy,-clang-analyzer-security.insecureAPI.bzero -header-filter=.*)
ENDIF()
INCLUDE(CheckLibraryExists)
CHECK_LIBRARY_EXISTS(m fmod "" NEED_LIB_M)
IF(NEED_LIB_M)

View File

@@ -124,6 +124,17 @@ BIGATOMS True if this emulator will support 3-byte symbols, instead of
NEWBITBLT True if we want to use assembler BITBLT code, rather than
have code created inline by macro calls.
USE_DLPI True if the ethernet API is via the SysV Data Link Provider
Interface. Solaris uses DLPI.
USE_NIT True if the ethernet API is via the Network Interface Tap.
SunOS uses NIT.
PKTFILTER True if the ethernet packets are to be filtered before being
passed to the Lisp ethernet handler. Available on Sun systems
for both the NIT and DLPI cases.
bitbltsub.c:#ifdef GETBASE
testdisplay.c:#ifdef NOTUSED
uraid.c:#ifdef ETHERINT

View File

@@ -19,7 +19,7 @@ XFLAGS = -I/opt/X11/include -DXWINDOW
OPTFLAGS = -O2 -g
DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) \
-DRELEASE=351 -DSTACKCHECK -DFSBCHECK -DPCTRACE
-DRELEASE=351 # -DSTACKCHECK -DFSBCHECK -DPCTRACE
LDFLAGS = -L/opt/X11/lib -lX11 -lm
LDELDFLAGS = -L/opt/X11/lib -lX11 -lm

View File

@@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/usr/local/include -DXWINDOW -DLOCK_X_UPDATES
XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g

View File

@@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/usr/local/include -DXWINDOW -DLOCK_X_UPDATES
XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g

View File

@@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/usr/local/include -DXWINDOW -DLOCK_X_UPDATES
XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g

View File

@@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/usr/local/include -DXWINDOW -DLOCK_X_UPDATES
XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O0 for init
OPTFLAGS = -O0 -g

View File

@@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/usr/local/include -DXWINDOW -DLOCK_X_UPDATES
XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O0 for init
OPTFLAGS = -O0 -g

View File

@@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/usr/local/include -DXWINDOW -DLOCK_X_UPDATES
XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O0 for init
OPTFLAGS = -O0 -g

View File

@@ -41,7 +41,7 @@ OPTFLAGS = -g3 -O0
DEBUGFLAGS = # -DSTACKCHECK -DFNSTKCHECK
MACHINEFLAGS = -DOS5 -DUSE_DLPI -DLOCK_X_UPDATES
MACHINEFLAGS = -DOS5 -DUSE_DLPI
# The LDEINIT wants to have NOVERSION set, so we don't hang up on
# any change-over in versions.

View File

@@ -36,7 +36,6 @@ DEBUGFLAGS = # -DSTACKCHECK -DFNSTKCHECK
DFLAGS = $(XFLAGS) \
$(DEBUGFLAGS) \
-DOS5 \
-DLOCK_X_UPDATES \
-DRELEASE=351
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm -lsocket -lnsl

View File

@@ -36,7 +36,6 @@ DEBUGFLAGS = # -DSTACKCHECK -DFNSTKCHECK
DFLAGS = $(XFLAGS) \
$(DEBUGFLAGS) \
-DOS5 -DUSE_DLPI \
-DLOCK_X_UPDATES \
-I$(OPENWINHOME)/include \
-DRELEASE=210

View File

@@ -40,7 +40,7 @@ OPTFLAGS = -O2 -g3
DEBUGFLAGS = # -DSTACKCHECK -DFNSTKCHECK
MACHINEFLAGS = -DOS5 -DUSE_DLPI -DLOCK_X_UPDATES
MACHINEFLAGS = -DOS5 -DUSE_DLPI
DFLAGS = $(XFLAGS) \
$(DEBUGFLAGS) \

View File

@@ -36,7 +36,6 @@ DEBUGFLAGS = # -DSTACKCHECK -DFNSTKCHECK
DFLAGS = $(XFLAGS) \
$(DEBUGFLAGS) \
-DOS5 \
-DLOCK_X_UPDATES \
-DUSE_DLPI \
-DRELEASE=351

44
bin/release-one Executable file
View File

@@ -0,0 +1,44 @@
#!/bin/sh
# Make and release maiko for one os / arch
# Hopefully to be replaced by GitHub Action
if [ ! -x ../../maiko/bin/machinetype ] ; then
echo ERROR: Must be run from maiko/bin
exit 1
fi
tag=$1
if [ -z "$tag" ] ; then
tag=maiko-`date +%y%m%d`
fi
export PATH=.:"$PATH"
osarch=`osversion`.`machinetype`
./makeright x
./makeright init
cd ../..
mkdir -p maiko/build
echo making $tag-$osarch.tgz
tar cfz maiko/build/$tag-$osarch.tgz \
maiko/bin/osversion \
maiko/bin/machinetype \
maiko/bin/config.guess \
maiko/bin/config.sub \
maiko/$osarch/lde*
if ! command -v gh >/dev/null ; then
echo
echo The GitHub Command Line Interface, gh
echo does not seem to be installed.
echo Please upload maiko/build/$tag-$osarch.tgz
echo to https://github.com/Interlisp/maiko/releases $tag
exit 0
fi
echo uploading
cd maiko
gh release upload --clobber $tag build/$tag-$osarch.tgz

36
bin/start-release Executable file
View File

@@ -0,0 +1,36 @@
#!/bin/sh
# This script is just a placeholder until we get GitHub
# Actions to do releases
# Start Maiko release from maiko/bin
# startrelease [tag]
# tag defaults to maiko-YYMMDD
tag=$1
if [ -z "$tag" ] ; then
tag=maiko-`date +%y%m%d`
fi
if ! command -v gh >/dev/null ; then
echo "It seems like 'gh', the GitHub Command Line Interface is"
echo "not installed. You can start a release using the"
echo "web interface at"
echo "https://github.com/Interlisp/maiko/releases/new"
echo "Make up a tag (or use $tag)"
echo "and run './release-one tag' (or manually upload if"
echo "no 'gh' is installed) on every os/machine you want"
echo "this release to work for"
exit 0
fi
# Now for the only thing this script is actually doing
gh release create $tag -p -t $tag -n "See release notes in medley repo"
echo "Now run "
echo ./release-one $tag
echo "in maiko/bin on every os/machine you want this release"
echo "to work for. When done, edit the release in your"
echo "browser and uncheck the prerelease box "

View File

@@ -1,7 +1,7 @@
#ifndef KEYEVENTDEFS_H
#define KEYEVENTDEFS_H 1
#include <sys/types.h>
void getsignaldata(int sig);
void process_io_events();
void kb_trans(u_short keycode, u_short upflg);
void taking_mouse_down(void);
void copy_cursor(int newx, int newy);

View File

@@ -39,7 +39,7 @@
NumericStringP(vp, YES, NO); \
NO: *vp = 0; \
YES: \
if ((*vp)) ver = atoi(vp); \
if ((*vp)) ver = strtol(vp, (char **)NULL, 10); \
else ver = -1; \
} \
else ver = -1; \

View File

@@ -8,7 +8,7 @@
\
register char *lv_cp; \
register char *lv_vp; \
register int lv_ver; \
register unsigned lv_ver; \
char lv_ver_buf[VERSIONLEN]; \
\
lv_cp = pathname; \
@@ -48,12 +48,12 @@
/* \
* Convert the remaining field to digit. \
*/ \
lv_ver = atoi(lv_vp + 1); \
if (lv_ver == 0) { \
lv_ver = strtoul(lv_vp + 1, (char **)NULL, 10); \
if (lv_ver == 0) { \
/* versionless */ \
*lv_vp = 0; \
} else { \
sprintf(lv_ver_buf, ".~%d~", lv_ver); \
sprintf(lv_ver_buf, ".~%u~", lv_ver); \
*lv_vp = 0; \
strcat(pathname, lv_ver_buf); \
} \
@@ -61,7 +61,7 @@
\
NO: \
strcpy(lv_ver_buf, lv_vp + 1); \
strcat(lv_ver_buf, "~"); \
strcat(lv_ver_buf, "~"); \
*lv_vp++ = '.'; \
*lv_vp++ = '~'; \
*lv_vp = 0; \

View File

@@ -385,9 +385,9 @@ extern DLword *Lisp_world; /* To access LispSysout area */
*(start - 1) = ';'; \
*start = '\0'; \
*end = '\0'; \
/* call ato i to eliminate leading 0s. */ \
ver_no = atoi(start + 1); \
sprintf(ver_buf, "%d", ver_no); \
/* call strtoul() to eliminate leading 0s. */ \
ver_no = strtoul(start + 1, (char **)NULL, 10); \
sprintf(ver_buf, "%u", ver_no); \
strcat(pathname, ver_buf); \
goto CONT; \
\
@@ -494,7 +494,7 @@ extern DLword *Lisp_world; /* To access LispSysout area */
#define MAXVERSION 999999999
#define LASTVERSIONARRAY (-1)
#define LASTVERSIONARRAY ((unsigned) -1)
#define VERSIONARRAYLENGTH 200
#define NoFileP(varray) \

View File

@@ -31,7 +31,6 @@
#include "lispemul.h" /* for LispPTR, DLword */
#include "miscstat.h" /* for MISCSTAT */
extern DLword *Atomspace; /* ATOMSPACE */
extern DLword *Stackspace; /* STACKSPACE*/
extern DLword *Plistspace; /* PLISTSPACE */
extern DLword *DTDspace; /* DTDSPACE */
@@ -41,8 +40,6 @@
extern DLword *AtomSpace; /* New atoms, initial set */
extern DLword *Defspace; /* DEFSPACE */
extern DLword *Valspace; /* VALSPACE */
extern DLword *Spospspace; /* POSITIVE Smallp */
extern DLword *Snegspace; /* NEGATIVE Smallp */
/* For Virtual Mem Management */
#ifdef BIGVM
@@ -82,7 +79,6 @@ extern DLword *UFNTable ;
/* FLEX STORAGES */
extern DLword *Arrayspace; /* Start of ARRAYSPACE */
extern DLword *MDS_space_bottom; /* Start of MDS (pre -2) */
extern DLword *PnCharspace ; /* Space for PN char codes (Thin only) */

View File

@@ -1,6 +1,5 @@
#ifndef MAINDEFS_H
#define MAINDEFS_H 1
int makepathname(char *src, char *dst);
void start_lisp(void);
void print_info_lines(void);
#endif

View File

@@ -5,6 +5,5 @@ DLword compute_hash(const char *char_base, DLword offset, DLword length);
DLword compute_lisp_hash(const char *char_base, DLword offset, DLword length, DLword fatp);
LispPTR compare_chars(register const char *char1, register const char *char2, register DLword length);
LispPTR compare_lisp_chars(register const char *char1, register const char *char2, register DLword length, DLword fat1, DLword fat2);
LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int non_numericp);
LispPTR parse_number(const char *char_base, short int length);
LispPTR make_atom(const char *char_base, DLword offset, DLword length);
#endif

View File

@@ -71,7 +71,7 @@
}
static inline LispPTR
aref_switch(int type, LispPTR tos, LispPTR baseL, int index)
aref_switch(unsigned type, LispPTR tos, LispPTR baseL, int index)
{
LispPTR result;
DLword *wordp;

View File

@@ -1,194 +1,150 @@
#ifndef SUBRS_H
#define SUBRS_H 1
/* $Id: subrs.h,v 1.2 1999/01/03 02:06:24 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved */
/* This file written from LLSUBRS on 13-Sep-2021 15:19:22 */
/* Do not edit this file! Instead, edit the list \initsubrs */
/* on the lisp file LLSUBRS and then call WRITECALLSUBRS to */
/* generate a new version. */
#define sb_BACKGROUNDSUBR 06
#define sb_CHECKBCPLPASSWORD 07
#define sb_DISKPARTITION 010
#define sb_DSPBOUT 011
#define sb_DSPRATE 012
#define sb_GATHERSTATS 013
#define sb_GETPACKETBUFFER 014
#define sb_LISPFINISH 015
#define sb_MOREVMEMFILE 016
#define sb_RAID 017
#define sb_READRAWPBI 020
#define sb_WRITERAWPBI 021
#define sb_SETSCREENCOLOR 022
#define sb_SHOWDISPLAY 023
#define sb_PUPLEVEL1STATE 024
#define sb_WRITESTATS 025
#define sb_CONTEXTSWITCH 026
#define sb_COPYSYS0SUBR 027
#define sb_WRITEMAP 030
#define sb_UFS_GETFILENAME 042
#define sb_UFS_DELETEFILE 043
#define sb_UFS_RENAMEFILE 044
#define sb_COM_READPAGES 045
#define sb_COM_WRITEPAGES 046
#define sb_COM_TRUNCATEFILE 047
#define sb_UFS_DIRECTORYNAMEP 051
#define sb_COM_GETFREEBLOCK 055
#define sb_SETUNIXTIME 060
#define sb_GETUNIXTIME 061
#define sb_COPYTIMESTATS 062
#define sb_UNIX_USERNAME 063
#define sb_UNIX_FULLNAME 064
#define sb_UNIX_GETENV 065
#define sb_UNIX_GETPARM 066
#define sb_CHECK_SUM 067
#define sb_ETHER_SUSPEND 070
#define sb_ETHER_RESUME 071
#define sb_ETHER_AVAILABLE 072
#define sb_ETHER_RESET 073
#define sb_ETHER_GET 074
#define sb_ETHER_SEND 075
#define sb_ETHER_SETFILTER 076
#define sb_ETHER_CHECK 077
#define sb_DSPCURSOR 0100
#define sb_SETMOUSEXY 0101
#define sb_DSP_VIDEOCOLOR 0102
#define sb_DSP_SCREENWIDTH 0103
#define sb_DSP_SCREENHEIGHT 0104
#define sb_BITBLTSUB 0105
#define sb_BLTCHAR 0106
#define sb_TEDIT_BLTCHAR 0107
#define sb_BITBLT_BITMAP 0110
#define sb_BLTSHADE_BITMAP 0111
#define sb_RS232C_CMD 0112
#define sb_RS232C_READ_INIT 0113
#define sb_RS232C_WRITE 0114
#define sb_KEYBOARDBEEP 0120
#define sb_KEYBOARDMAP 0121
#define sb_KEYBOARDSTATE 0122
#define sb_VMEMSAVE 0131
#define sb_LISP_FINISH 0132
#define sb_NEWPAGE 0133
#define sb_DORECLAIM 0134
#define sb_DUMMY_135Q 0135
#define sb_NATIVE_MEMORY_REFERENCE 0136
#define sb_OLD_COMPILE_LOAD_NATIVE 0137 /* obsolete */
#define sb_DISABLEGC 0140
#define sb_COM_SETFILEINFO 0147
#define sb_COM_OPENFILE 0150
#define sb_COM_CLOSEFILE 0151
#define sb_DSK_GETFILENAME 0152
#define sb_DSK_DELETEFILE 0153
#define sb_DSK_RENAMEFILE 0154
#define sb_COM_NEXT_FILE 0156
#define sb_COM_FINISH_FINFO 0157
#define sb_COM_GEN_FILES 0160
#define sb_DSK_DIRECTORYNAMEP 0161
#define sb_COM_GETFILEINFO 0162
#define sb_COM_CHANGEDIR 0164
#define sb_UNIX_HANDLECOMM 0165
#define sb_OCR_COMM 0166
#define sb_RPC_CALL 0167
#define sb_MESSAGE_READP 0170
#define sb_MESSAGE_READ 0171
#define sb_MONITOR_CONTROL 0200
#define sb_GET_NATIVE_ADDR_FROM_LISP_PTR 0203
#define sb_GET_LISP_PTR_FROM_NATIVE_ADDR 0204
#define sb_LOAD_NATIVE_FILE 0205 /* obsolete */
#define sb_SUSPEND_LISP 0206
#define sb_NEW_BLTCHAR 0207
#define sb_COLOR_INIT 0210
#define sb_COLOR_SCREENMODE 0211
#define sb_COLOR_MAP 0212
#define sb_COLOR_BASE 0213
#define sb_C_SlowBltChar 0214
#define sb_TCP_OP 0220
#define sb_WITH_SYMBOL 0221
/* For linear-programming interface */
#define sb_LP_SETUP 0230
#define sb_LP_RUN 0231
/* For Native Windows */
#define sb_MNW_OP 0244
#define sb_QUERY_WINDOWS 0245
#define sb_FILL_IN 0246
/* DLD codes */
#define sb_CALL_C_FN 0247
#define sb_DLD_LINK 0250
#define sb_DLD_UNLINK_BY_FILE 0251
#define sb_DLD_UNLINK_BY_SYMBOL 0252
#define sb_DLD_GET_SYMBOL 0253
#define sb_DLD_GET_FUNC 0254
#define sb_DLD_FUNCTION_EXECUTABLE_P 0255
#define sb_DLD_LIST_UNDEFINED_SYM 0256
#define sb_MALLOC 0257
#define sb_FREE 0260
#define sb_PUT_C_BASEBYTE 0261
#define sb_GET_C_BASEBYTE 0262
#define sb_SMASHING_APPLY 0263
#ifdef TRUECOLOR
#define sb_PICTURE_OP 0250
#define sb_TRUE_COLOR_OP 0251
#ifdef VIDEO
#define sb_VIDEO_OP 0252
#endif /* VIDEO */
#endif /* TRUECOLOR */
#define sb_CHAR_OPENFILE 0310
#define sb_CHAR_BIN 0311
#define sb_CHAR_BOUT 0312
#define sb_CHAR_IOCTL 0313
#define sb_CHAR_CLOSEFILE 0314
#define sb_CHAR_EOFP 0315
#define sb_CHAR_READP 0316
#define sb_CHAR_BINS 0317
#define sb_CHAR_BOUTS 0320
#define sb_CHAR_FILLBUFFER 0321
/* on the lisp file LLSUBRS and then call WRITECALLSUBRS to */
/* generate a new version. */
#define sb_BACKGROUNDSUBR 06
#define sb_CHECKBCPLPASSWORD 07
#define sb_DISKPARTITION 010
#define sb_DSPBOUT 011
#define sb_DSPRATE 012
#define sb_GATHERSTATS 013
#define sb_GETPACKETBUFFER 014
#define sb_LISPFINISH 015
#define sb_MOREVMEMFILE 016
#define sb_RAID 017
#define sb_READRAWPBI 020
#define sb_WRITERAWPBI 021
#define sb_SETSCREENCOLOR 022
#define sb_SHOWDISPLAY 023
#define sb_PUPLEVEL1STATE 024
#define sb_WRITESTATS 025
#define sb_CONTEXTSWITCH 026
#define sb_COPYSYS0SUBR 027
#define sb_WRITEMAP 030
#define sb_UFS_GETFILENAME 042
#define sb_UFS_DELETEFILE 043
#define sb_UFS_RENAMEFILE 044
#define sb_COM_READPAGES 045
#define sb_COM_WRITEPAGES 046
#define sb_COM_TRUNCATEFILE 047
#define sb_UFS_DIRECTORYNAMEP 051
#define sb_COM_GETFREEBLOCK 055
#define sb_SETUNIXTIME 060
#define sb_GETUNIXTIME 061
#define sb_COPYTIMESTATS 062
#define sb_UNIX_USERNAME 063
#define sb_UNIX_FULLNAME 064
#define sb_UNIX_GETENV 065
#define sb_UNIX_GETPARM 066
#define sb_CHECK_SUM 067
#define sb_ETHER_SUSPEND 070
#define sb_ETHER_RESUME 071
#define sb_ETHER_AVAILABLE 072
#define sb_ETHER_RESET 073
#define sb_ETHER_GET 074
#define sb_ETHER_SEND 075
#define sb_ETHER_SETFILTER 076
#define sb_ETHER_CHECK 077
#define sb_DSPCURSOR 0100
#define sb_SETMOUSEXY 0101
#define sb_DSP_VIDEOCOLOR 0102
#define sb_DSP_SCREENWIDTH 0103
#define sb_DSP_SCREENHEIGHT 0104
#define sb_BITBLTSUB 0105
#define sb_BLTCHAR 0106
#define sb_TEDIT_BLTCHAR 0107
#define sb_BITBLT_BITMAP 0110
#define sb_BLTSHADE_BITMAP 0111
#define sb_RS232C_CMD 0112
#define sb_RS232C_READ_INIT 0113
#define sb_RS232C_WRITE 0114
#define sb_KEYBOARDBEEP 0120
#define sb_KEYBOARDMAP 0121
#define sb_KEYBOARDSTATE 0122
#define sb_VMEMSAVE 0131
#define sb_LISP_FINISH 0132
#define sb_NEWPAGE 0133
#define sb_DORECLAIM 0134
#define sb_DUMMY_135Q 0135
#define sb_NATIVE_MEMORY_REFERENCE 0136
#define sb_OLD_COMPILE_LOAD_NATIVE 0137
#define sb_DISABLEGC 0140
#define sb_COM_SETFILEINFO 0147
#define sb_COM_OPENFILE 0150
#define sb_COM_CLOSEFILE 0151
#define sb_DSK_GETFILENAME 0152
#define sb_DSK_DELETEFILE 0153
#define sb_DSK_RENAMEFILE 0154
#define sb_COM_NEXT_FILE 0156
#define sb_COM_FINISH_FINFO 0157
#define sb_COM_GEN_FILES 0160
#define sb_DSK_DIRECTORYNAMEP 0161
#define sb_COM_GETFILEINFO 0162
#define sb_COM_CHANGEDIR 0164
#define sb_UNIX_HANDLECOMM 0165
#define sb_RPC_CALL 0167
#define sb_MESSAGE_READP 0170
#define sb_MESSAGE_READ 0171
#define sb_MONITOR_CONTROL 0200
#define sb_GET_NATIVE_ADDR_FROM_LISP_PTR 0203
#define sb_GET_LISP_PTR_FROM_NATIVE_ADDR 0204
#define sb_LOAD_NATIVE_FILE 0205
#define sb_SUSPEND_LISP 0206
#define sb_NEW_BLTCHAR 0207
#define sb_COLOR_INIT 0210
#define sb_COLOR_SCREENMODE 0211
#define sb_COLOR_MAP 0212
#define sb_COLOR_BASE 0213
#define sb_C_SlowBltChar 0214
#define sb_UNCOLORIZE_BITMAP 0215
#define sb_COLORIZE_BITMAP 0216
#define sb_COLOR_8BPPDRAWLINE 0217
#define sb_TCP_OP 0220
#define sb_WITH_SYMBOL 0221
#define sb_CAUSE_INTERRUPT 0222
#define sb_OPEN_SOCKET 0240
#define sb_CLOSE_SOCKET 0241
#define sb_READ_SOCKET 0242
#define sb_WRITE_SOCKET 0243
#define sb_CALL_C_FUNCTION 0247
#define sb_DLD_LINK 0250
#define sb_DLD_UNLINK_BY_FILE 0251
#define sb_DLD_UNLINK_BY_SYMBOL 0252
#define sb_DLD_GET_SYMBOL 0253
#define sb_DLD_GET_FUNC 0254
#define sb_DLD_FUNCTION_EXECUTABLE_P 0255
#define sb_DLD_LIST_UNDEFINED_SYMBOLS 0256
#define sb_C_MALLOC 0257
#define sb_C_FREE 0260
#define sb_C_PUTBASEBYTE 0261
#define sb_C_GETBASEBYTE 0262
#define sb_CHAR_OPENFILE 0310
#define sb_CHAR_BIN 0311
#define sb_CHAR_BOUT 0312
#define sb_CHAR_IOCTL 0313
#define sb_CHAR_CLOSEFILE 0314
#define sb_CHAR_EOFP 0315
#define sb_CHAR_READP 0316
#define sb_CHAR_BINS 0317
#define sb_CHAR_BOUTS 0320
#define sb_CHAR_FILLBUFFER 0321
#define sb_YIELD 0322
/* MISCN opcodes */
#define miscn_USER_SUBR 00
#define miscn_VALUES 01
#define miscn_SXHASH 02
#define miscn_EQLHASHBITSFN 03
#define miscn_STRINGHASHBITS 04
#define miscn_STRING_EQUAL_HASHBITS 05
#define miscn_VALUES_LIST 06
#define miscn_LCFetchMethod 07
#define miscn_LCFetchMethodOrHelp 010
#define miscn_LCFindVarIndex 011
#define miscn_LCGetIVValue 012
#define miscn_LCPutIVValue 013
/* for accessing RAW RS232C port */
#define miscn_RAW_RS232C_OPEN 050
#define miscn_RAW_RS232C_CLOSE 051
#define miscn_RAW_RS232C_SETPARAM 052
#define miscn_RAW_RS232C_GETPARAM 053
#define miscn_RAW_RS232C_READ 054
#define miscn_RAW_RS232C_WRITE 055
#define miscn_RAW_RS232C_SETINT 056
/* for CHATTER */
#define miscn_CHATTER 040
/* for EJLISP */
#define miscn_EJLISP 060
#define miscn_USER_SUBR 00
#define miscn_VALUES 01
#define miscn_SXHASH 02
#define miscn_EQLHASHBITSFN 03
#define miscn_STRINGHASHBITS 04
#define miscn_STRING_EQUAL_HASHBITS 05
#define miscn_VALUES_LIST 06
#define miscn_LCFetchMethod 07
#define miscn_LCFetchMethodOrHelp 010
#define miscn_LCFindVarIndex 011
#define miscn_LCGetIVValue 012
#define miscn_LCPutIVValue 013
/* Assigned USER SUBR numbers */
#define user_subr_DUMMY 012
#define user_subr_SAMPLE_USER_SUBR 00
#define user_subr_DUMMY 012
#define user_subr_SAMPLE_USER_SUBR 00
#endif

View File

@@ -61,8 +61,8 @@ extern int TIMEOUT_TIME;
/************************************************************************/
#define INTRSAFE(exp) \
do {} while ((int)(exp) == -1 && errno == EINTR)
do {errno = 0; } while ((exp) == -1 && errno == EINTR)
#define INTRSAFE0(exp) \
do {} while ((int)(exp) == 0 && errno == EINTR)
do {errno = 0; } while ((exp) == NULL && errno == EINTR)
#endif /* TIMEOUT_H */

View File

@@ -513,7 +513,8 @@
#ifndef BIGATOMS
#define EVAL \
do { \
LispPTR scratch, work, lookuped; \
LispPTR work, lookuped; \
DLword scratch[2]; \
switch (TOPOFSTACK & SEGMASK) { \
case S_POSITIVE: \
case S_NEGATIVE: \
@@ -521,8 +522,8 @@
case ATOM_OFFSET: \
if ((TOPOFSTACK == NIL_PTR) || (TOPOFSTACK == ATOM_T)) \
goto Hack_Label; \
nnewframe(CURRENTFX, &scratch, TOPOFSTACK & 0xffff); \
work = POINTERMASK & swapx(scratch); \
nnewframe(CURRENTFX, scratch, TOPOFSTACK & 0xffff); \
work = POINTERMASK & ((GETBASEWORD(scratch,1) << 16) | GETBASEWORD(scratch,0)); \
lookuped = *((LispPTR *)(Addr68k_from_LADDR(work))); \
if (lookuped == NOBIND_PTR) \
goto op_ufn; \
@@ -552,7 +553,8 @@
#else
#define EVAL \
do { \
LispPTR scratch, work, lookuped; \
LispPTR work, lookuped; \
DLword scratch[2]; \
switch (TOPOFSTACK & SEGMASK) { \
case S_POSITIVE: \
case S_NEGATIVE: \
@@ -560,8 +562,8 @@
case ATOM_OFFSET: \
if ((TOPOFSTACK == NIL_PTR) || (TOPOFSTACK == ATOM_T)) \
goto Hack_Label; \
nnewframe(CURRENTFX, &scratch, TOPOFSTACK & 0xffff); \
work = POINTERMASK & swapx(scratch); \
nnewframe(CURRENTFX, scratch, TOPOFSTACK & 0xffff); \
work = POINTERMASK & ((GETBASEWORD(scratch,1) << 16) | GETBASEWORD(scratch,0)); \
lookuped = *((LispPTR *)(Addr68k_from_LADDR(work))); \
if (lookuped == NOBIND_PTR) \
goto op_ufn; \
@@ -584,8 +586,8 @@
fn_apply = 0; \
goto op_fn_common; \
case TYPE_NEWATOM: \
nnewframe(CURRENTFX, &scratch, TOPOFSTACK); \
work = POINTERMASK & swapx(scratch); \
nnewframe(CURRENTFX, scratch, TOPOFSTACK); \
work = POINTERMASK & ((GETBASEWORD(scratch,1) << 16) | GETBASEWORD(scratch,0)); \
lookuped = *((LispPTR *)(Addr68k_from_LADDR(work))); \
if (lookuped == NOBIND_PTR) \
goto op_ufn; \

View File

@@ -223,7 +223,6 @@ error Must specify RELEASE to build Medley.
#ifdef OS5
/* Solaris, sort of SYSV-ish, but not really */
#define MAIKO_ENABLE_ETHERNET
#define LOCK_X_UPDATES 1
#endif /* OS5 */

View File

@@ -6,5 +6,5 @@ void lisp_Xexit(DspInterface dsp);
void Xevent_before_raid(DspInterface dsp);
void Xevent_after_raid(DspInterface dsp);
void Open_Display(DspInterface dsp);
DspInterface X_init(DspInterface dsp, char *lispbitmap, int width_hint, int height_hint, int depth_hint);
DspInterface X_init(DspInterface dsp, LispPTR lispbitmap, int width_hint, int height_hint, int depth_hint);
#endif

View File

@@ -8,5 +8,5 @@ void Set_BitGravity(XButtonEvent *event, DspInterface dsp, Window window, int gr
void enable_Xkeyboard(DspInterface dsp);
void disable_Xkeyboard(DspInterface dsp);
void beep_Xkeyboard(DspInterface dsp);
void getXsignaldata(DspInterface dsp);
void process_Xevents(DspInterface dsp);
#endif

View File

@@ -33,7 +33,7 @@
/*** N_OP_aref1 -- op 266 (array index) ***/
LispPTR N_OP_aref1(register LispPTR arrayarg, register LispPTR inx) {
register LispPTR baseL;
register int type, index;
register int index;
register OneDArray *arrayblk;
/* verify array */
@@ -45,12 +45,9 @@ LispPTR N_OP_aref1(register LispPTR arrayarg, register LispPTR inx) {
if (index >= arrayblk->totalsize) ERROR_EXIT(inx);
index += arrayblk->offset;
/* setup typenumber */
type = 0xFF & arrayblk->typenumber;
/* setup base */
baseL = arrayblk->base;
/* disp on type */
return (aref_switch(type, inx, baseL, index));
return (aref_switch(arrayblk->typenumber, inx, baseL, index));
} /* end N_OP_aref1() */

View File

@@ -42,7 +42,6 @@
/************************************************************************/
LispPTR N_OP_aset1(register LispPTR data, LispPTR arrayarg, register int inx) {
register int type;
register OneDArray *arrayblk;
register LispPTR base;
register int new;
@@ -57,14 +56,11 @@ LispPTR N_OP_aset1(register LispPTR data, LispPTR arrayarg, register int inx) {
if (index >= arrayblk->totalsize) ERROR_EXIT(inx);
index += arrayblk->offset;
/* setup typenumber */
type = 0xFF & arrayblk->typenumber;
/* setup base */
base = arrayblk->base;
/* disp on type */
aset_switch(type, inx);
aset_switch(arrayblk->typenumber, inx);
doufn:
ERROR_EXIT(inx);

View File

@@ -41,7 +41,6 @@
LispPTR N_OP_aref2(LispPTR arrayarg, LispPTR inx0, LispPTR inx1) {
#define REG
LispPTR baseL;
int type;
int arindex, temp;
LispArray *arrayblk;
int j;
@@ -59,9 +58,6 @@ LispPTR N_OP_aref2(LispPTR arrayarg, LispPTR inx0, LispPTR inx1) {
arindex *= j;
arindex += temp;
/* setup typenumber */
type = 0xFF & arrayblk->typenumber;
/* disp on type */
return (aref_switch(type, inx1, baseL, arindex));
return (aref_switch(arrayblk->typenumber, inx1, baseL, arindex));
} /* end N_OP_aref2() */

View File

@@ -26,7 +26,6 @@
/*** N_OP_aset2 -- op 357 (new-value array index0 index1) ***/
LispPTR N_OP_aset2(register LispPTR data, LispPTR arrayarg, LispPTR inx0, LispPTR inx1) {
register int type;
register LispArray *arrayblk;
register LispPTR base;
register int new;
@@ -46,11 +45,8 @@ LispPTR N_OP_aset2(register LispPTR data, LispPTR arrayarg, LispPTR inx0, LispPT
index *= j;
index += temp;
/* setup typenumber */
type = 0xFF & arrayblk->typenumber;
/* disp on type */
aset_switch(type, inx1);
aset_switch(arrayblk->typenumber, inx1);
doufn:
ERROR_EXIT(inx1);

View File

@@ -33,7 +33,7 @@ LispPTR *N_OP_bind(register LispPTR *stack_pointer, register LispPTR tos, int by
register int n1; /* # slots to bind to NIL (0, 0) */
register int n2; /* # slots to bind to value in stack */
register LispPTR *ppvar; /* pointer to argued slot in Pvar area */
register int i; /* temporary for control */
register unsigned i; /* temporary for control */
#ifdef TRACE
printPC();

View File

@@ -329,7 +329,7 @@ void print_finfo(FINFO *fp)
if (fp != (FINFO *)NULL) {
do {
printf("%s -> ", fp->lname);
printf("%d\n", fp->version);
printf("%u\n", fp->version);
fp = fp->next;
} while (fp != (FINFO *)NULL && fp != sp);
@@ -685,13 +685,13 @@ static int enum_dsk_prop(char *dir, char *name, char *ver, FINFO **finfo_buf)
if (*fver == '\0')
nextp->version = 0;
else
nextp->version = atoi(fver);
nextp->version = strtoul(fver, (char **)NULL, 10);
nextp->ino = sbuf.st_ino;
nextp->prop->length = (unsigned)sbuf.st_size;
nextp->prop->wdate = (unsigned)ToLispTime(sbuf.st_mtime);
nextp->prop->rdate = (unsigned)ToLispTime(sbuf.st_atime);
nextp->prop->protect = (unsigned)sbuf.st_mode;
TIMEOUT(pwd = getpwuid(sbuf.st_uid));
TIMEOUT0(pwd = getpwuid(sbuf.st_uid));
if (pwd == (struct passwd *)NULL) {
nextp->prop->au_len = 0;
} else {
@@ -948,7 +948,7 @@ static int enum_dsk(char *dir, char *name, char *ver, FINFO **finfo_buf)
if (*fver == '\0')
nextp->version = 0;
else
nextp->version = atoi(fver);
nextp->version = strtoul(fver, (char **)NULL, 10);
nextp->ino = sbuf.st_ino;
n++;
}
@@ -1080,7 +1080,7 @@ static int enum_ufs_prop(char *dir, char *name, char *ver, FINFO **finfo_buf)
char namebuf[MAXPATHLEN];
errno = 0;
TIMEOUT(dirp = opendir(dir));
TIMEOUT0(dirp = opendir(dir));
if (dirp == NULL) {
*Lisp_errno = errno;
return (-1);
@@ -1263,7 +1263,7 @@ static int enum_ufs(char *dir, char *name, char *ver, FINFO **finfo_buf)
char namebuf[MAXPATHLEN];
errno = 0;
TIMEOUT(dirp = opendir(dir));
TIMEOUT0(dirp = opendir(dir));
if (dirp == NULL) {
*Lisp_errno = errno;
return (-1);
@@ -1399,7 +1399,7 @@ static int trim_finfo(FINFO **fp)
* Versionless is not linked to any versioned
* file.
*/
sprintf(ver, ";%d", mp->version + 1);
sprintf(ver, ";%u", mp->version + 1);
strcat(sp->lname, ver);
sp->lname_len = strlen(sp->lname);
pnum = ++num;
@@ -1527,7 +1527,7 @@ static int trim_finfo_highest(FINFO **fp, int highestp)
* Versionless is not linked to any versioned
* file.
*/
sprintf(ver, ";%d", mp->version + 1);
sprintf(ver, ";%u", mp->version + 1);
strcat(sp->lname, ver);
sp->lname_len = strlen(sp->lname);
/*
@@ -1602,7 +1602,7 @@ static int trim_finfo_highest(FINFO **fp, int highestp)
* Name: trim_finfo_version
*
* Argument: FINFO **fp Linked list of the numerated FINFO structures.
* int rver Requested version number.
* unsigned rver Requested version number.
*
* Value: Returns the total number of files still remaining in **fp.
*
@@ -1614,7 +1614,7 @@ static int trim_finfo_highest(FINFO **fp, int highestp)
* are got rid of.
*/
static int trim_finfo_version(FINFO **fp, int rver)
static int trim_finfo_version(FINFO **fp, unsigned rver)
{
register FINFO *tp, *sp, *mp, *cp, *pp, *vp;
register int num, pnum;
@@ -1709,7 +1709,7 @@ static int trim_finfo_version(FINFO **fp, int rver)
* file.
*/
if (mp->version + 1 == rver) {
sprintf(ver, ";%d", rver);
sprintf(ver, ";%u", rver);
strcat(sp->lname, ver);
sp->lname_len = strlen(sp->lname);
/*
@@ -1840,7 +1840,8 @@ static FINFO **prepare_sort_buf(register FINFO *fp, register int n)
static int dsk_filecmp(FINFO **fp1, FINFO **fp2)
{
register int res, v1, v2;
register int res;
unsigned v1, v2;
if ((res = strcmp((*fp1)->no_ver_name, (*fp2)->no_ver_name)) != 0) return (res);
@@ -2032,7 +2033,8 @@ LispPTR COM_gen_files(register LispPTR *args)
#ifdef DOS
char drive[1];
#endif
int dskp, count, highestp, propp, fid, version;
int dskp, count, highestp, fid;
unsigned propp, version;
register char *cp;
FINFO *fp;
int dsk_filecmp(), unix_filecmp();
@@ -2111,7 +2113,7 @@ LispPTR COM_gen_files(register LispPTR *args)
if (*ver != '\0') {
highestp = 0;
version = atoi(ver);
version = strtoul(ver, (char **)NULL, 10);
if (version > 0) strcpy(ver, "*");
} else {
version = 0;
@@ -2193,7 +2195,8 @@ LispPTR COM_next_file(register LispPTR *args)
register char *base;
register DFINFO *dfp;
register UFSGFS *gfsp;
int finfoid, propp;
int finfoid;
unsigned propp;
ERRSETJMP(-1);
Lisp_errno = &Dummy_errno;

View File

@@ -17,10 +17,10 @@
#include "version.h"
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include "lispemul.h"
#include "lspglob.h"
#include "lispmap.h"
@@ -268,21 +268,21 @@ int N_OP_drawline(LispPTR ptr, int curbit, int xsize, int width, int ysize, int
#endif /* COLOR */
{
DLword *start_addr, *temp_s, *temp_e;
DLword *start_addr;
start_addr = (DLword *)Addr68k_from_LADDR(ptr);
if (((int)(temp_s = (DLword *)(start_addr - DisplayRegion68k)) >= 0) &&
(start_addr < DisplayRegion68k_end_addr) &&
((int)(temp_e = (DLword *)(dataptr - DisplayRegion68k)) >= 0) &&
((DLword *)dataptr < DisplayRegion68k_end_addr)) {
if (in_display_segment(start_addr) && in_display_segment(dataptr)) {
int start_x, start_y, end_x, end_y, w, h;
ptrdiff_t temp_s, temp_e;
start_y = (int)temp_s / DisplayRasterWidth;
start_x = ((int)temp_s % DisplayRasterWidth) * BITSPER_DLWORD;
temp_s = start_addr - DisplayRegion68k;
temp_e = dataptr - DisplayRegion68k;
end_y = (int)temp_e / DisplayRasterWidth;
end_x = ((int)temp_e % DisplayRasterWidth) * BITSPER_DLWORD + (BITSPER_DLWORD - 1);
start_y = temp_s / DisplayRasterWidth;
start_x = (temp_s % DisplayRasterWidth) * BITSPER_DLWORD;
end_y = temp_e / DisplayRasterWidth;
end_x = (temp_e % DisplayRasterWidth) * BITSPER_DLWORD + (BITSPER_DLWORD - 1);
w = abs(start_x - end_x) + 1;
h = abs(start_y - end_y) + 1;
@@ -290,10 +290,8 @@ int N_OP_drawline(LispPTR ptr, int curbit, int xsize, int width, int ysize, int
if (start_x > end_x) start_x = end_x;
if (start_y > end_y) start_y = end_y;
#if defined(XWINDOW) || defined(BYTESWAP)
flush_display_region(start_x, start_y, w, h);
#endif /* XWINDOW */
}
}

101
src/dsk.c
View File

@@ -59,7 +59,7 @@ extern int Dummy_errno;
typedef struct filename_entry {
char name[MAXPATHLEN]; /* With version, foo.~3~ or foo */
int version_no;
unsigned version_no;
} FileName;
typedef struct current_varray {
@@ -851,7 +851,8 @@ LispPTR COM_closefile(register LispPTR *args)
LispPTR DSK_getfilename(register LispPTR *args)
{
register char *base;
register int len, dirp, rval;
size_t len, rval;
register int dirp;
int fatp;
char lfname[MAXPATHLEN];
char aname[MAXNAMLEN];
@@ -1510,7 +1511,8 @@ LispPTR DSK_directorynamep(register LispPTR *args)
{
char dirname[MAXPATHLEN];
char fullname[MAXPATHLEN];
register int len, fatp;
size_t len;
register int fatp;
register char *base;
#ifdef DOS
char drive[1], rawname[MAXNAMLEN];
@@ -1697,9 +1699,10 @@ LispPTR COM_getfileinfo(register LispPTR *args)
*bufp = sbuf.st_mode;
return (ATOM_T);
case AUTHOR:
case AUTHOR: {
size_t rval;
#ifndef DOS
TIMEOUT(pwd = getpwuid(sbuf.st_uid));
TIMEOUT0(pwd = getpwuid(sbuf.st_uid));
if (pwd == (struct passwd *)NULL) {
/*
* Returns Lisp 0. Lisp code handles this case as author
@@ -1717,8 +1720,9 @@ LispPTR COM_getfileinfo(register LispPTR *args)
#endif /* BYTESWAP */
#endif /* DOS */
return (GetSmallp(rval));
case ALL:
}
case ALL: {
size_t rval;
/*
* The format of the buffer which has been allocated by Lisp
* is as follows.
@@ -1744,7 +1748,7 @@ LispPTR COM_getfileinfo(register LispPTR *args)
bufp = (unsigned *)(Addr68k_from_LADDR(laddr));
*bufp = sbuf.st_mode;
#ifndef DOS
TIMEOUT(pwd = getpwuid(sbuf.st_uid));
TIMEOUT0(pwd = getpwuid(sbuf.st_uid));
if (pwd == (struct passwd *)NULL) { return (GetSmallp(0)); }
laddr = cdr(car(cdr(cdr(cdr(cdr(args[2]))))));
STRING_BASE(laddr, base);
@@ -1756,7 +1760,7 @@ LispPTR COM_getfileinfo(register LispPTR *args)
#endif /* BYTESWAP */
#endif /* DOS */
return (GetSmallp(rval));
}
default: return (NIL);
}
}
@@ -2365,7 +2369,7 @@ LispPTR COM_getfreeblock(register LispPTR *args)
void separate_version(char *name, char *ver, int checkp)
{
register char *start, *end, *cp;
register int ver_no;
register unsigned ver_no;
size_t len;
char ver_buf[VERSIONLEN];
@@ -2397,10 +2401,10 @@ void separate_version(char *name, char *ver, int checkp)
*(start - 1) = '\0';
*end = '\0';
/*
* Use atoi to eliminate leading 0s.
* Use strtoul() to eliminate leading 0s.
*/
ver_no = atoi(start + 1);
sprintf(ver_buf, "%d", ver_no);
ver_no = strtoul(start + 1, (char **)NULL, 10);
sprintf(ver_buf, "%u", ver_no);
strcpy(ver, ver_buf);
return;
} else {
@@ -2502,8 +2506,8 @@ int true_name(register char *path)
#ifdef DOS
char drive[1];
#endif
register char *sp, *cp;
register int type, c;
register char c, *sp, *cp;
register int type;
if (strcmp(path, "/") == 0) return (-1);
@@ -3025,7 +3029,7 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
* separator_version guarantees ver is a numeric
* string.
*/
svarray->version_no = atoi(ver);
svarray->version_no = strtoul(ver, (char **)NULL, 10);
}
svarray++;
}
@@ -3119,7 +3123,7 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
* separator_version guarantees ver is a numeric
* string.
*/
svarray->version_no = atoi(ver);
svarray->version_no = strtoul(ver, (char **)NULL, 10);
}
svarray++;
}
@@ -3263,7 +3267,7 @@ static int maintain_version(char *file, FileName *varray, int forcep)
* is versioned one higher than the existing highest version.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(ver, "%d", max_no + 1);
sprintf(ver, "%u", max_no + 1);
/*
* The old file should have the same case name as the versionless
* file.
@@ -3395,7 +3399,8 @@ static int get_versionless(FileName *varray, char *file, char *dir)
static int check_vless_link(char *vless, FileName *varray, char *to_file, int *highest_p)
{
register int rval, max_no, found;
register int rval, found;
unsigned max_no;
ino_t vless_ino;
struct stat sbuf;
char dir[MAXPATHLEN], name[MAXNAMLEN], ver[VERSIONLEN];
@@ -3498,7 +3503,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
{
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
char ver[VERSIONLEN], vbuf[VERSIONLEN];
register int ver_no, max_no;
register unsigned ver_no, max_no;
int highest_p;
register FileName *entry;
@@ -3528,7 +3533,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -3552,7 +3557,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
strcpy(afile, vless);
return (1);
} else {
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
if (ver_no == 1) {
/*
* Version 1 is specified. The versionless file is
@@ -3586,13 +3591,13 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
* link missing versionless file.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(vbuf, "%d", max_no + 1);
sprintf(vbuf, "%u", max_no + 1);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
} else {
/* A version is specified. */
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindHighestVersion(varray, entry, max_no);
if (ver_no == max_no + 1) {
/*
@@ -3601,7 +3606,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
* is dealt with as a version of the link
* missing versionless file.
*/
sprintf(vbuf, "%d", ver_no);
sprintf(vbuf, "%u", ver_no);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
@@ -3640,7 +3645,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -3697,7 +3702,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
{
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
char ver[VERSIONLEN], vbuf[VERSIONLEN];
register int ver_no, min_no;
register unsigned ver_no, min_no;
int highest_p;
register FileName *entry;
@@ -3727,7 +3732,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -3751,7 +3756,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
strcpy(afile, vless);
return (1);
} else {
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
if (ver_no == 1) {
/*
* Version 1 is specified. The versionless file is
@@ -3788,7 +3793,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
return (1);
} else {
/* A version is specified. */
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindHighestVersion(varray, entry, min_no);
if (ver_no == min_no + 1) {
/*
@@ -3797,7 +3802,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
* is dealt with as a version of the link
* missing versionless file.
*/
sprintf(vbuf, "%d", ver_no);
sprintf(vbuf, "%u", ver_no);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
@@ -3836,7 +3841,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -3894,7 +3899,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
{
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
char ver[VERSIONLEN], vbuf[VERSIONLEN];
register int ver_no, max_no;
register unsigned ver_no, max_no;
int highest_p;
register FileName *entry;
@@ -3942,7 +3947,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* the existing highest version.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(vbuf, "%d", max_no + 1);
sprintf(vbuf, "%u", max_no + 1);
/*
* We will use the file name of the existing highest
* versioned file as the name of the new file, so that
@@ -3960,7 +3965,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -3998,7 +4003,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
strcpy(afile, vfile);
return (1);
} else {
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
if (ver_no == 1) {
/*
* Version 1 is specified. The versionless file is
@@ -4034,13 +4039,13 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* missing versionless file.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(vbuf, "%d", max_no + 2);
sprintf(vbuf, "%u", max_no + 2);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vfile);
return (1);
} else {
/* A version is specified. */
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindHighestVersion(varray, entry, max_no);
if (ver_no == max_no + 1) {
/*
@@ -4049,7 +4054,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* is dealt with as a version of the link
* missing versionless file.
*/
sprintf(vbuf, "%d", ver_no);
sprintf(vbuf, "%u", ver_no);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
@@ -4097,7 +4102,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* new file.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(vbuf, "%d", max_no + 1);
sprintf(vbuf, "%u", max_no + 1);
/*
* We will use the name of the highest versioned file
* as the name of the new file.
@@ -4114,7 +4119,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -4188,7 +4193,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
{
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
char ver[VERSIONLEN], vbuf[VERSIONLEN];
register int ver_no, max_no;
register unsigned ver_no, max_no;
int highest_p;
register FileName *entry;
@@ -4240,7 +4245,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -4278,7 +4283,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
strcpy(afile, vless);
return (1);
} else {
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
if (ver_no == 1) {
/*
* Version 1 is specified. The versionless file is
@@ -4313,13 +4318,13 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
* link missing versionless file.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(vbuf, "%d", max_no + 1);
sprintf(vbuf, "%u", max_no + 1);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
} else {
/* A version is specified. */
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindHighestVersion(varray, entry, max_no);
if (ver_no == max_no + 1) {
/*
@@ -4328,7 +4333,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
* is dealt with as a version of the link
* missing versionless file.
*/
sprintf(vbuf, "%d", ver_no);
sprintf(vbuf, "%u", ver_no);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
@@ -4384,7 +4389,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);

View File

@@ -27,9 +27,6 @@ DspInterface currentdsp = &curdsp;
#ifdef XWINDOW
extern int LispDisplayRequestedWidth;
extern int LispDisplayRequestedHeight;
extern DspInterface X_init(DspInterface dsp, char *lispbitmap, int width_hint, int height_hint,
int depth_hint);
#endif /* XWINDOW */
#ifdef DOS

View File

@@ -742,7 +742,7 @@ static int check_filter(u_char *buffer)
static void init_uid() {
int rid;
rid = getuid();
seteuid(rid);
setuid(rid);
}
#endif /* MAIKO_ENABLE_ETHERNET */
@@ -830,7 +830,7 @@ void init_ether() {
/* JDS 991228 remove perror("Can't open network; XNS unavailable.\n"); */
ether_fd = -1;
}
seteuid(getuid());
setuid(getuid());
}
#elif defined(USE_NIT)
#ifndef OS4
@@ -952,7 +952,7 @@ void init_ether() {
perror("Can't open network; XNS unavailable.\n");
ether_fd = -1;
}
seteuid(getuid());
setuid(getuid());
}
#endif /* OS4 */

View File

@@ -139,8 +139,7 @@ void init_ifpage(int sysout_size) {
#ifdef BIGVM
/* For BIGVM system, save the value in \LASTVMEMFILEPAGE for lisp's use */
if ((LispPTR)LASTVMEMFILEPAGE_word != 0xFFFFFFFF)
*LASTVMEMFILEPAGE_word = InterfacePage->dllastvmempage;
*LASTVMEMFILEPAGE_word = InterfacePage->dllastvmempage;
#endif /* BIGVM */
/* unfortunately, Lisp only looks at a 16 bit serial number */

View File

@@ -133,10 +133,6 @@ extern DLword *DisplayRegion68k;
static struct timeval SelectTimeout = {0, 0};
#endif /* DOS */
#ifdef XWINDOW
extern volatile sig_atomic_t Event_Req;
#endif /* XWINDOW */
extern MISCSTATS *MiscStats;
LispPTR *LASTUSERACTION68k;
LispPTR *CLastUserActionCell68k;
@@ -187,7 +183,7 @@ LispPTR *MOUSECHORDTICKS68k;
/**NEW GLOBAL***-> will be moved***/
LispPTR *KEYBOARDEVENTQUEUE68k;
LispPTR *KEYBUFFERING68k;
int KBDEventFlg = NIL;
int KBDEventFlg = 0;
DLword *CTopKeyevent;
LispPTR DOBUFFEREDTRANSITION_index;
@@ -213,20 +209,12 @@ DLword ColorCursor_savebitmap[CURSORWIDTH / COLORPIXELS_IN_DLWORD * CURSORHEIGHT
/************************************************************************/
/* */
/* G E T S I G N A L D A T A */
/* */
/* Handler for the SIGIO interrupt, which happens */
/* 1. When a key transition happens */
/* 2. On mouse moves */
/* 3. When TCP input becomes available. */
/* 4. When a NIT ethernet packet becomes available. */
/* 5. When a console/log/stderr msg needs to be printed. */
/* */
/* */
/* */
/* */
/* */
/* p r o c e s s _ i o _ e v e n t s */
/* */
/* Periodically, or After a SIGIO interrupt which happens */
/* 1. When TCP input becomes available. */
/* 2. When a NIT ethernet packet becomes available. */
/* 3. When a console/log/stderr msg needs to be printed. */
/* */
/* */
/* Statics: LispReadFds A 32-bit vector with a 1 for each */
@@ -256,49 +244,16 @@ DLword ColorCursor_savebitmap[CURSORWIDTH / COLORPIXELS_IN_DLWORD * CURSORHEIGHT
/* */
/************************************************************************/
void getsignaldata(int sig)
void process_io_events()
{
#ifndef DOS
fd_set rfds, efds;
fd_set rfds;
u_int iflags;
int i;
#ifdef XWINDOW
#if defined(sun)
if (Event_Req) {
if (!XLocked++)
getXsignaldata(currentdsp);
else
XNeedSignal = 1;
Event_Req = FALSE;
XLocked--;
}
#endif
#endif /* XWINDOW */
/* #ifndef KBINT */
/* FD_COPY would be preferred but uses deprecated bcopy() on macOS. Why? */
memcpy(&rfds, &LispReadFds, sizeof(rfds));
memcpy(&efds, &LispReadFds, sizeof(efds));
/* label and ifs not needed if only keyboard on SIGIO */
getmore:
if (select(32, &rfds, NULL, &efds, &SelectTimeout) >= 0)
{
/* need to print out fd sets...
DBPRINT(("SIGIO: fd mask(r/e) = 0x%x/0x%x.\n", rfds, efds));
*/
#ifdef XWINDOW
if (FD_ISSET(ConnectionNumber(currentdsp->display_id), &rfds)) {
if (!XLocked)
getXsignaldata(currentdsp);
else
XNeedSignal = 1;
}
#endif /* XWINDOW */
if (select(32, &rfds, NULL, NULL, &SelectTimeout) > 0) {
#ifdef MAIKO_ENABLE_ETHERNET
if (ether_fd >= 0 && FD_ISSET(ether_fd, &rfds)) { /* Raw ethernet (NIT) I/O happened, so handle it. */
@@ -338,7 +293,7 @@ getmore:
}
/* #endif */
#endif /* DOS */
} /* end getsignaldata */
} /* end process_io_events */
/************************************************************************/

View File

@@ -214,7 +214,7 @@ int main(int argc, char *argv[]) {
ether_fd = -1;
/* exit(); */
}
seteuid(getuid());
setuid(getuid());
}
/* OK, right here do other stuff like scan args */

View File

@@ -75,7 +75,6 @@
DLword *Lisp_world; /* lispworld */
/********** 68k address for Lisp Space **********/
DLword *Atomspace;
DLword *Stackspace;
DLword *Plistspace;
DLword *DTDspace;
@@ -85,8 +84,6 @@ DLword *Pnamespace;
DLword *AtomSpace;
DLword *Defspace;
DLword *Valspace;
DLword *Spospspace;
DLword *Snegspace;
/********** For Virtual Memory Management **********/
#ifdef BIGVM
@@ -124,7 +121,6 @@ DLword *HTcoll;
DLword *DisplayRegion;
int DisplayInitialized = NIL;
DLword *Arrayspace;
DLword *MDS_space_bottom;
DLword *PnCharspace;
struct dtd *ListpDTD;
@@ -210,7 +206,8 @@ int UnixPipeIn;
int UnixPipeOut;
int UnixPID;
int please_fork = 1;
/* disable X11 scroll bars if requested */
int noscroll = 0;
/*** STACK handle staff(Takeshi) **/
LispPTR *STACKOVERFLOW_word;
LispPTR *GuardStackAddr_word;
@@ -239,10 +236,6 @@ int display_max = 65536 * 16 * 2;
/* diagnostic flag for sysout dumping */
extern int maxpages;
/** For call makepathname inside main() **/
extern int *Lisp_errno;
extern int Dummy_errno; /* If errno cell is not provided by Lisp, dummy_errno is used. */
char sysout_name[MAXPATHLEN]; /* Set by read_Xoption, in the X version. */
int sysout_size = 0; /* ditto */
@@ -312,6 +305,7 @@ int main(int argc, char *argv[])
char *envname;
extern int TIMER_INTERVAL;
extern fd_set LispReadFds;
int tmpint;
#ifdef MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE
if (dld_find_executable(argv[0]) == 0) {
perror("Name of executable not found.");
@@ -338,9 +332,6 @@ int main(int argc, char *argv[])
Barf and print the command line if tha fails
*/
/* For call makepathname */
Lisp_errno = &Dummy_errno;
i = 1;
if (argv[i] && ((strcmp(argv[i], "-info") == 0) || (strcmp(argv[i], "-INFO") == 0))) {
@@ -360,13 +351,18 @@ int main(int argc, char *argv[])
strncpy(sysout_name, envname, MAXPATHLEN);
} else if ((envname = getenv("LDESOURCESYSOUT")) != NULL)
strncpy(sysout_name, envname, MAXPATHLEN);
else {
#ifdef DOS
else if (!makepathname("lisp.vm", sysout_name)
strncpy(sysout_name, "lisp.vm", MAXPATHLEN);
#else
else if (!makepathname("~/lisp.virtualmem", sysout_name)
if ((envname = getenv("HOME")) != NULL) {
strncpy(sysout_name, envname, MAXPATHLEN);
strncat(sysout_name, "/lisp.virtualmem", MAXPATHLEN - 17);
}
#endif /* DOS */
|| access(sysout_name, R_OK)) {
fprintf(stderr, "Couldn't find a sysout to run;\n");
}
if (access(sysout_name, R_OK)) {
perror("Couldn't find a sysout to run");
fprintf(stderr, "%s", helpstring);
exit(1);
}
@@ -377,18 +373,32 @@ int main(int argc, char *argv[])
/* -t and -m are undocumented and somewhat dangerous... */
if (!strcmp(argv[i], "-t")) { /**** timer interval ****/
if (argc > ++i)
TIMER_INTERVAL = atoi(argv[i]);
else {
if (argc > ++i) {
errno = 0;
tmpint = strtol(argv[i], (char **)NULL, 10);
if (errno == 0 && tmpint > 0) {
TIMER_INTERVAL = tmpint;
} else {
fprintf(stderr, "Bad value for -t (integer > 0)\n");
exit(1);
}
} else {
fprintf(stderr, "Missing argument after -t\n");
exit(1);
}
}
else if (!strcmp(argv[i], "-m")) { /**** sysout size ****/
if (argc > ++i)
sysout_size = atoi(argv[i]);
else {
if (argc > ++i) {
errno = 0;
tmpint = strtol(argv[i], (char **)NULL, 10);
if (errno == 0 && tmpint > 0) {
sysout_size = tmpint;
} else {
fprintf(stderr, "Bad value for -m (integer > 0)\n");
exit(1);
}
} else {
fprintf(stderr, "Missing argument after -m\n");
exit(1);
}
@@ -453,9 +463,16 @@ int main(int argc, char *argv[])
}
/* diagnostic flag for big vmem write() calls */
else if (!strcmp(argv[i], "-xpages")) {
if (argc > ++i)
maxpages = atoi(argv[i]);
else {
if (argc > ++i) {
errno = 0;
tmpint = strtol(argv[i], (char **)NULL, 10);
if (errno == 0 && tmpint > 0) {
maxpages = tmpint;
} else {
fprintf(stderr, "Bad value for -xpages (integer > 0)\n");
exit(1);
}
} else {
fprintf(stderr, "Missing argument after -xpages\n");
exit(1);
}
@@ -467,8 +484,11 @@ int main(int argc, char *argv[])
probemouse(); /* See if the mouse is connected. */
#else
if (getuid() != geteuid()) {
fprintf(stderr, "Effective user is not real user. Setting euid to uid.\n");
seteuid(getuid());
fprintf(stderr, "Effective user is not real user. Resetting uid\n");
if (setuid(getuid()) == -1) {
fprintf(stderr, "Unable to reset user id to real user id\n");
exit(1);
}
}
#endif /* DOS */
@@ -592,87 +612,6 @@ void start_lisp() {
dispatch();
}
/************************************************************************/
/* */
/* m a k e p a t h n a m e */
/* */
/* */
/* */
/************************************************************************/
int makepathname(char *src, char *dst)
{
register int len;
register char *base, *cp;
register struct passwd *pwd;
char name[MAXPATHLEN];
base = src;
switch (*base) {
case '.':
if (getcwd(dst, MAXPATHLEN) == 0)
{ /* set working directory */
*Lisp_errno = errno;
return (0);
}
switch (*(base + 1)) {
case '.':
if (*(base + 2) == '/') { /* Now, base == "../xxxx" */
cp = (char *)strrchr(dst, '/');
if (cp == 0) return (0);
*cp = '\0';
strcat(dst, base + 2);
return (1);
} else
return (0);
case '/':
/* Now, base == "./xxx" */
strcat(dst, base + 1);
return (1);
default: return (0);
}
case '~':
ERRSETJMP(0);
if (*(base + 1) == '/') {
/* path is "~/foo" */
#ifdef DOS
pwd = 0;
#else
TIMEOUT(pwd = getpwuid(getuid()));
#endif /* DOS */
if (pwd == NULL) {
*Lisp_errno = errno;
return (0);
}
#ifndef DOS
sprintf(dst, "%s%s", pwd->pw_dir, base + 1);
#endif
return (1);
} else {
/* path is "~foo/" */
if ((cp = (char *)strchr(base + 1, '/')) == 0)
return (0);
else {
len = (UNSIGNED)cp - (UNSIGNED)base - 1;
strncpy(name, base + 1, len);
name[len] = '\0';
#ifndef DOS
TIMEOUT(pwd = getpwnam(name));
#endif /* DOS */
if (pwd == NULL) {
*Lisp_errno = errno;
return (0);
}
#ifndef DOS
sprintf(dst, "%s%s", pwd->pw_dir, cp);
#endif /* DOS */
return (1);
}
}
default: strcpy(dst, src); return (1);
}
}
void print_info_lines() {
#if (RELEASE == 200)
printf("Emulator for Medley release 2.0\n");

View File

@@ -27,7 +27,6 @@
compute_hash
create_symbol
compare_chars
parse_number
*/
/**********************************************************************/
@@ -248,10 +247,11 @@ LispPTR compare_lisp_chars(register const char *char1, register const char *char
/*
Func name : make_atom
If the atom already existed then return
else create new atom . Returns the Atom's index.
Look up the atom index of an existing atom, or return 0xFFFFFFFF
This function does not handle FAT pname's.
This function is a subset of \MKATOM (in LLBASIC), but only handles
thin text atom names (no numbers, no 2-byte pnames).
It MUST return the same atom index number as \MKATOM
Date : January 29, 1987
Edited by : Takeshi Shimizu
@@ -264,10 +264,8 @@ LispPTR compare_lisp_chars(register const char *char1, register const char *char
*/
/**********************************************************************/
LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int non_numericp)
/* if it is NIL then these chars are treated as NUMBER */
LispPTR make_atom(const char *char_base, DLword offset, DLword length)
{
extern DLword *Spospspace;
extern DLword *AtomHT;
extern DLword *Pnamespace;
extern DLword *AtomSpace;
@@ -282,41 +280,34 @@ LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int
unsigned short first_char;
#ifdef TRACE2
printf("TRACE: make_atom( %s , offset= %d, len= %d, non_numericp = %d)\n", char_base, offset,
length, non_numericp);
printf("TRACE: make_atom( %s , offset= %d, len= %d)\n", char_base, offset, length);
#endif
first_char = (*(char_base + offset)) & 0xff;
if (length != 0) {
if (length == 1) /* one char. atoms */
{
if (first_char > 57) /* greater than '9 */
return ((LispPTR)(ATOMoffset + (first_char - 10)));
else if (first_char > 47) /* between '0 to '9 */
return ((LispPTR)(S_POSITIVE + (first_char - 48)));
/* fixed S_... mar-27-87 take */
else /* other one char. atoms */
return ((LispPTR)(ATOMoffset + first_char));
} /* if(length==1.. end */
else if ((non_numericp == NIL) && (first_char <= '9'))
/* more than 10 arithmetic aon + - mixed atom process */
{
if ((hash_entry = parse_number(char_base + offset, length)) != 0)
return ((LispPTR)hash_entry); /* if NIL that means THE ATOM is +- mixed litatom */
/* 15 may 87 take */
}
hash = compute_hash(char_base, offset, length);
} /* if(lengt.. end */
else {
switch (length) {
case 0:
/* the zero-length atom has hashcode 0 */
hash = 0;
first_char = 255;
break;
case 1:
/* One-character atoms live in well known places, no need to hash */
if (first_char > '9')
return ((LispPTR)(ATOMoffset + (first_char - 10)));
if (first_char >= '0' ) /* 0..9 */
return ((LispPTR)(S_POSITIVE + (first_char - '0')));
/* other one character atoms */
return ((LispPTR)(ATOMoffset + first_char));
default:
hash = compute_hash(char_base, offset, length);
break;
}
/* This point corresponds with LP in Lisp source */
/* following for loop never exits until it finds new hash entry or same atom */
/* following for loop does not exit until it finds new hash entry or same atom */
for (reprobe = Atom_reprobe(hash, first_char); (hash_entry = GETWORD(AtomHT + hash)) != 0;
hash = ((hash + reprobe) & 0xffff)) {
atom_index = hash_entry - 1;
@@ -327,7 +318,7 @@ LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int
if ((length == GETBYTE(pname_base)) &&
(compare_chars(++pname_base, char_base + offset, length) == T)) {
DBPRINT(("FOUND the atom. \n"));
return (atom_index); /* find already existed atom */
return (atom_index); /* found existing atom */
}
DBPRINT(("HASH doesn't hit. reprobe!\n"));
@@ -338,65 +329,3 @@ LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int
return (0xffffffff);
/** Don't create newatom now **/
} /* make_atom end */
/*********************************************************************/
/*
Func name : parse_number
Desc : It can treat -65534 to 65535 integer
Returns SMALLP PTR
Date : 1,May 1987 Take
15 May 87 take
*/
/*********************************************************************/
/* Assume this func. should be called with C string in "char_base" */
LispPTR parse_number(const char *char_base, short int length) {
register LispPTR sign_mask;
register LispPTR val;
register int radix;
register int *cell68k;
#ifdef TRACE2
printf("TRACE: parse_number()\n");
#endif
/* Check for Radix 8(Q) postfixed ?? */
if ((*(char_base + (length - 1))) == 'Q') {
radix = 8;
length--;
} else
radix = 10;
/* Check for Sign */
sign_mask = S_POSITIVE;
if ((*(char_base) == '+') || (*(char_base) == '-')) {
sign_mask = ((*char_base++) == '+') ? S_POSITIVE : S_NEGATIVE;
length--;
}
for (val = 0; length > 0; length--) {
if ((((*char_base)) < '0') || ('9' < ((*char_base)))) return (NIL);
val = radix * val + (*char_base++) - '0';
}
if (val > 0xffffffff) error("parse_number : Overflow ...exceeded range of FIXP");
if ((sign_mask == S_POSITIVE) && (val > 0xffff)) {
cell68k = (int *)createcell68k(TYPE_FIXP);
*cell68k = val;
return (LADDR_from_68k(cell68k));
} else if ((sign_mask == S_NEGATIVE) && (val > 0xffff)) {
cell68k = (int *)createcell68k(TYPE_FIXP);
*cell68k = ~val + 1;
return (LADDR_from_68k(cell68k));
}
else if (sign_mask == S_NEGATIVE)
return (sign_mask | (~((DLword)val) + 1));
else {
return (sign_mask | val);
}
}
/* end parse_number */

View File

@@ -253,7 +253,7 @@ rs232c_read() {
}
} else {
/*
* SIGIO handler getsignaldata and the successive
* SIGIO handler, process_io_events, and the successive
* rs232c_read has been called before Lisp prepares
* the next buffer. Turn on RS232C_remain_data to
* specify to read the remaining data after.

View File

@@ -99,7 +99,9 @@ int main(int argc, char **argv) {
printf("setsysout version sysout-name\n");
return (-1);
}
if ((version = atoi(argv[1])) == 0) {
errno = 0;
version = (int)strtol(argv[1], (char **)NULL, 10);
if (errno || version <= 0) {
printf("version must be an integer > 0.\n");
return (-1);
}

View File

@@ -35,7 +35,7 @@
#include "conspagedefs.h"
#include "gcfinaldefs.h"
#include "gchtfinddefs.h"
#include "mkatomdefs.h"
#include "testtooldefs.h"
#define MINARRAYBLOCKSIZE 4
#define GUARDVMEMFULL 500
@@ -374,7 +374,7 @@ LispPTR newpage(LispPTR base) {
} else if (InterfacePage->key == IFPVALID_KEY) {
*VMEM_FULL_STATE_word = ATOM_T;
} else
*VMEM_FULL_STATE_word = make_atom("DIRTY", 0, 5, 0);
*VMEM_FULL_STATE_word = MAKEATOM("DIRTY");
}
return (base);

View File

@@ -29,6 +29,7 @@
/***********************************************************/
#include <stdio.h>
#include <time.h>
#include "lispemul.h"
#include "address.h"
#include "adr68k.h"
@@ -62,6 +63,9 @@
#include "unixcommdefs.h"
#include "uutilsdefs.h"
#include "vmemsavedefs.h"
#ifdef MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE
#include "foreigndefs.h"
#endif
extern LispPTR *PENDINGINTERRUPT68k;
@@ -336,17 +340,17 @@ void OP_subrcall(int subr_no, int argnum) {
C_slowbltchar(args);
break;
case 0215:
case sb_UNCOLORIZE_BITMAP:
POP_SUBR_ARGS;
Uncolorize_Bitmap(args);
break;
case 0216:
case sb_COLORIZE_BITMAP:
POP_SUBR_ARGS;
Colorize_Bitmap(args);
break;
case 0217:
case sb_COLOR_8BPPDRAWLINE:
POP_SUBR_ARGS;
Draw_8BppColorLine(args);
break;
@@ -480,6 +484,7 @@ void OP_subrcall(int subr_no, int argnum) {
case sb_GET_NATIVE_ADDR_FROM_LISP_PTR:
POP_SUBR_ARGS;
/* XXX: this WILL NOT WORK if Lisp memory is allocated outside the low 4GB */
ARITH_SWITCH(Addr68k_from_LADDR(args[0]), TopOfStack);
break;
@@ -669,7 +674,7 @@ void OP_subrcall(int subr_no, int argnum) {
TopOfStack = with_symbol(args[0], args[1], args[2], args[3], args[4], args[5]);
break;
case 0222: /* Cause an interrupt to occur. Used by */
case sb_CAUSE_INTERRUPT: /* Cause an interrupt to occur. Used by */
/* Lisp INTERRUPTED to re-set an interrupt */
/* when it's uninterruptible. */
POP_SUBR_ARGS;
@@ -682,7 +687,7 @@ void OP_subrcall(int subr_no, int argnum) {
/*****************************************/
/* foreign-function-call support subrs */
/*****************************************/
case sb_CALL_C_FN: {
case sb_CALL_C_FUNCTION: {
POP_SUBR_ARGS;
TopOfStack = call_c_fn(args); /* args[0]=fnaddr, args[1]=fn type */
break;
@@ -717,27 +722,27 @@ void OP_subrcall(int subr_no, int argnum) {
TopOfStack = Mdld_function_executable_p(args);
break;
}
case sb_DLD_LIST_UNDEFINED_SYM: {
case sb_DLD_LIST_UNDEFINED_SYMBOLS: {
POP_SUBR_ARGS;
TopOfStack = Mdld_list_undefined_sym();
break;
}
case sb_MALLOC: {
case sb_C_MALLOC: {
POP_SUBR_ARGS;
TopOfStack = c_malloc(args);
break;
}
case sb_FREE: {
case sb_C_FREE: {
POP_SUBR_ARGS;
TopOfStack = c_free(args);
break;
}
case sb_PUT_C_BASEBYTE: {
case sb_C_PUTBASEBYTE: {
POP_SUBR_ARGS;
TopOfStack = put_c_basebyte(args);
break;
}
case sb_GET_C_BASEBYTE: {
case sb_C_GETBASEBYTE: {
POP_SUBR_ARGS;
TopOfStack = get_c_basebyte(args);
break;
@@ -779,6 +784,20 @@ void OP_subrcall(int subr_no, int argnum) {
break;
}
#endif /* LPSOLVE */
case sb_YIELD: {
struct timespec rqts = {0, 833333};
unsigned sleepnanos;
POP_SUBR_ARGS;
N_GETNUMBER(args[0], sleepnanos, ret_nil);
if (sleepnanos > 999999999) {
TopOfStack = NIL;
break;
}
rqts.tv_nsec = sleepnanos;
nanosleep(&rqts, NULL);
TopOfStack = ATOM_T;
break;
}
default: {
char errtext[200];
sprintf(errtext, "OP_subrcall: Invalid alpha byte 0%o", ((*(PC + 1)) & 0xff));

View File

@@ -424,7 +424,7 @@ void dump_fnobj(LispPTR index)
/************************************************************************/
/* Opcode names, by opcode */
static const char *opcode_table[256] = {
const char *opcode_table[256] = {
"-X-",
"CAR",
"CDR",
@@ -1018,7 +1018,7 @@ FX *get_nextFX(FX *fx) {
} /* get_nextFX end */
LispPTR MAKEATOM(char *string) {
return (make_atom(string, 0, strlen(string), 0));
return (make_atom(string, 0, strlen(string)));
}
/************************************************************************/
@@ -1032,7 +1032,7 @@ LispPTR MAKEATOM(char *string) {
LispPTR *MakeAtom68k(char *string) {
LispPTR index;
index = make_atom(string, 0, strlen(string), 0);
index = make_atom(string, 0, strlen(string));
if (index == 0xffffffff) {
error("MakeAtom68k: no such atom found");
}

View File

@@ -18,6 +18,7 @@
#include "version.h"
#include <errno.h>
#include <fcntl.h>
#include <setjmp.h>
#include <signal.h>
@@ -85,11 +86,9 @@ extern DspInterface currentdsp;
* to get Alto time.
*/
int TIMEOUT_TIME; /* For file system timeout */
int TIMEOUT_TIME = 10; /* For file system timeout, seconds, default 10 */
#ifdef XWINDOW
volatile sig_atomic_t Event_Req = FALSE;
#endif /* XWINDOW */
volatile sig_atomic_t IO_Signalled = FALSE;
static int gettime(int casep);
@@ -403,7 +402,7 @@ void update_timer() {
/* TIMER_INTERVAL usec ~ 20 per second. This should live in some
machine-configuration
file somewhere - it can be changed as the -t parameter to lisp*/
int TIMER_INTERVAL = 25000;
int TIMER_INTERVAL = 10000;
extern int LispWindowFd;
@@ -423,10 +422,6 @@ static void int_timer_service(int sig)
Irq_Stk_Check = 0;
Irq_Stk_End = 0;
#ifdef XWINDOW
Event_Req = TRUE;
#endif
}
/************************************************************************/
@@ -466,7 +461,7 @@ static void int_timer_init()
timer_action.sa_handler = int_timer_service;
sigemptyset(&timer_action.sa_mask);
timer_action.sa_flags = 0;
timer_action.sa_flags = SA_RESTART;
if (sigaction(SIGVTALRM, &timer_action, NULL) == -1) {
perror("sigaction: SIGVTALRM");
@@ -496,15 +491,10 @@ void int_io_open(int fd)
{
#ifdef DOS
/* would turn on DOS kbd signal handler here */
#elif KBINT
#elseif defined(O_ASYNC)
DBPRINT(("int_io_opening %d\n", fd));
if (fcntl(fd, F_SETOWN, getpid()) == -1) {
#ifdef DEBUG
perror("fcntl F_SETOWN ERROR");
#endif
};
if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_ASYNC) == -1) perror("fcntl F_SETFL error");
if (fcntl(fd, F_SETOWN, getpid()) == -1) perror("fcntl F_SETOWN error");
if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_ASYNC) == -1) perror("fcntl F_SETFL on error");
#endif
}
@@ -512,11 +502,27 @@ void int_io_close(int fd)
{
#ifdef DOS
/* Turn off signaller here */
#elif KBINT
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_ASYNC);
#elseif defined(O_ASYNC)
if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_ASYNC) == -1) perror("fcntl_F_SETFL off error");
#endif
}
/************************************************************************/
/* */
/* i n t _ i o _ s e r v i c e */
/* */
/* Handle SIGIO */
/* */
/* */
/************************************************************************/
static void int_io_service(int sig)
{
Irq_Stk_Check = 0;
Irq_Stk_End = 0;
IO_Signalled = TRUE;
}
/************************************************************************/
/* */
/* i n t _ i o _ i n i t */
@@ -531,7 +537,7 @@ void int_io_close(int fd)
static void int_io_init() {
#ifndef DOS
struct sigaction io_action;
io_action.sa_handler = getsignaldata;
io_action.sa_handler = int_io_service;
sigemptyset(&io_action.sa_mask);
io_action.sa_flags = 0;
@@ -541,11 +547,6 @@ static void int_io_init() {
DBPRINT(("I/O interrupts enabled\n"));
}
#if defined(XWINDOW) && defined(I_SETSIG)
if (ioctl(ConnectionNumber(currentdsp->display_id), I_SETSIG, S_INPUT) < 0)
perror("ioctl on X fd - SETSIG for input handling failed");
#endif
#if defined(USE_DLPI)
DBPRINT(("INIT ETHER: Doing I_SETSIG.\n"));
if (ether_fd > 0)
@@ -710,13 +711,12 @@ static void int_file_init() {
}
/* Set Timeout period */
if ((envtime = getenv("LDEFILETIMEOUT")) == NULL) {
TIMEOUT_TIME = 10;
} else {
if ((timeout_time = atoi(envtime)) > 0)
envtime = getenv("LDEFILETIMEOUT");
if (envtime != NULL) {
errno = 0;
timeout_time = (int)strtol(envtime, (char **)NULL, 10);
if (errno == 0 && timeout_time > 0)
TIMEOUT_TIME = timeout_time;
else
TIMEOUT_TIME = 10;
}
DBPRINT(("File timeout interrupts enabled\n"));
}

View File

@@ -156,7 +156,8 @@ exit_host_filesystem() {
LispPTR UFS_getfilename(LispPTR *args)
{
register char *base;
register int len, rval;
size_t len;
register int rval;
char lfname[MAXPATHLEN], file[MAXPATHLEN];
ERRSETJMP(NIL);
@@ -369,7 +370,8 @@ LispPTR UFS_directorynamep(LispPTR *args)
{
char dirname[MAXPATHLEN];
char fullname[MAXPATHLEN];
register int len, rval;
size_t len;
register int rval;
register char *base;
struct stat sbuf;
@@ -564,7 +566,7 @@ int unixpathname(char *src, char *dst, int versionp, int genp)
case '~':
if (*(cp + 1) == '>' || *(cp + 1) == '\0') {
/* "~>" or "~" means the user's home directory. */
TIMEOUT(pwd = getpwuid(getuid()));
TIMEOUT0(pwd = getpwuid(getuid()));
if (pwd == NULL) return (0);
strcpy(dst, pwd->pw_dir);
@@ -588,7 +590,7 @@ int unixpathname(char *src, char *dst, int versionp, int genp)
*/
for (++cp, np = name; *cp != '\0' && *cp != '>';) *np++ = *cp++;
*np = '\0';
TIMEOUT(pwd = getpwnam(name));
TIMEOUT0(pwd = getpwnam(name));
if (pwd == NULL) return (0);
strcpy(dst, pwd->pw_dir);

View File

@@ -247,14 +247,35 @@ void close_unix_descriptors(void) /* Get ready to shut Maiko down */
int FindUnixPipes(void) {
char *envtmp;
int inttmp;
struct unixjob cleareduj;
DBPRINT(("Entering FindUnixPipes\n"));
UnixPipeIn = UnixPipeOut = StartTime = UnixPID = -1;
if ((envtmp = getenv("LDEPIPEIN"))) UnixPipeIn = atoi(envtmp);
if ((envtmp = getenv("LDEPIPEOUT"))) UnixPipeOut = atoi(envtmp);
if ((envtmp = getenv("LDESTARTTIME"))) StartTime = atoi(envtmp);
if ((envtmp = getenv("LDEUNIXPID"))) UnixPID = atoi(envtmp);
if ((envtmp = getenv("LDEPIPEIN"))) {
errno = 0;
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
if (errno == 0)
UnixPipeIn = inttmp;
}
if ((envtmp = getenv("LDEPIPEOUT"))) {
errno = 0;
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
if (errno == 0)
UnixPipeOut = inttmp;
}
if ((envtmp = getenv("LDESTARTTIME"))) {
errno = 0;
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
if (errno == 0)
StartTime = inttmp;
}
if ((envtmp = getenv("LDEUNIXPID"))) {
errno = 0;
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
if (errno == 0)
UnixPID = inttmp;
}
/* This is a good place to initialize stuff like the UJ table */
NPROCS = sysconf(_SC_OPEN_MAX);
@@ -330,7 +351,7 @@ static int FindAvailablePty(char *Slave) {
/* => byte count (<= 512), NIL (no data), or T (EOF) */
/* 10 Set Window Size, Arg2 = rows, Arg3 = columns */
/* 11 Fork PTY to Shell (obsoletes command 4) */
/* Arg1 = termtype, Arg2 = csh command string */
/* Arg1 = termtype, Arg2 = shell command string */
/* => Job # or NIL */
/* 12 Create Unix Socket */
/* Arg1 = pathname to bind socket to (string) */

View File

@@ -75,76 +75,78 @@ static inline ssize_t SAFEREAD(int f, char *b, int c)
/* */
/************************************************************************/
/* Creates a PTY connection to a csh */
/* Creates a PTY connection to a shell */
static int ForkUnixShell(int slot, char *PtySlave, char *termtype, char *shellarg)
{
int PID, SlaveFD;
struct termios tio;
char *argvec[4] = {NULL, NULL, NULL, NULL};
char *shell = NULL;
char *userShell = NULL;
PID = fork();
if (PID == 0) {
char *argvec[4];
if (0 > setsid()) /* create us a new session for tty purposes */
perror("setsid");
/* Open the slave side */
SlaveFD = open(PtySlave, O_RDWR);
if (SlaveFD == -1) {
perror("Slave Open");
perror(PtySlave);
exit(0);
}
#ifdef OS5
ioctl(SlaveFD, I_PUSH, "ptem");
ioctl(SlaveFD, I_PUSH, "ldterm");
#endif /* OS5 */
/* Set up as basic display terminal: canonical erase,
kill processing, echo, backspace to erase, echo ctrl
chars as ^x, kill line by backspacing */
tcgetattr(SlaveFD, &tio);
tio.c_lflag |= ICANON | ECHO | ECHOE | ECHOCTL | ECHOKE;
tcsetattr(SlaveFD, TCSANOW, &tio);
(void)dup2(SlaveFD, 0);
(void)dup2(SlaveFD, 1);
(void)dup2(SlaveFD, 2);
(void)close(SlaveFD);
/* set the LDESHELL variable so the underlying .cshrc can see it and
configure the shell appropriately, though this may not be so important any more */
setenv("LDESHELL", "YES", 1);
if (termtype[0] != 0) { /* set the TERM environment var */
setenv("TERM", termtype, 1);
}
/* Start up csh */
argvec[0] = "csh";
if (shellarg[0] != 0) { /* setup to run command */
argvec[1] = "-c"; /* read commands from next arg */
argvec[2] = shellarg;
argvec[3] = (char *)0;
} else
argvec[1] = (char *)0;
execv("/bin/csh", argvec);
/* Should never get here */
perror("execv");
exit(0);
} else { /* not the forked process. */
if (PID != 0) {
if (shellarg != shcom) free(shellarg);
return (PID);
}
/* Set the process group so all the kids get the bullet too
if (setpgrp(PID, PID) != 0)
perror("setpgrp"); */
if (0 > setsid()) /* create us a new session for tty purposes */
perror("setsid");
return (PID);
/* Open the slave side */
SlaveFD = open(PtySlave, O_RDWR);
if (SlaveFD == -1) {
perror("Slave Open");
perror(PtySlave);
exit(0);
}
#ifdef OS5
ioctl(SlaveFD, I_PUSH, "ptem");
ioctl(SlaveFD, I_PUSH, "ldterm");
#endif /* OS5 */
/* Set up as basic display terminal: canonical erase,
kill processing, echo, backspace to erase, echo ctrl
chars as ^x, kill line by backspacing */
tcgetattr(SlaveFD, &tio);
tio.c_lflag |= ICANON | ECHO | ECHOE | ECHOCTL | ECHOKE;
tcsetattr(SlaveFD, TCSANOW, &tio);
(void)dup2(SlaveFD, 0);
(void)dup2(SlaveFD, 1);
(void)dup2(SlaveFD, 2);
(void)close(SlaveFD);
/* set the LDESHELL variable so the underlying shell initialization can see it and
configure the shell appropriately, though this may not be so important any more */
setenv("LDESHELL", "YES", 1);
if (termtype[0] != 0) { /* set the TERM environment var */
setenv("TERM", termtype, 1);
}
/* Start up shell -- use SHELL environment variable as long as it's in /etc/shells */
shell = getenv("SHELL");
for (userShell = getusershell(); userShell != NULL && strcmp(shell, userShell) != 0; userShell = getusershell());
if (userShell == NULL) {
perror("$(SHELL) not found in /etc/shells");
exit(0);
}
/* argvec entries initialized to NULL */
argvec[0] = strrchr(userShell, '/') + 1;
if (shellarg[0] != 0) { /* setup to run command */
argvec[1] = "-c"; /* read commands from next arg */
argvec[2] = shellarg;
}
execv(userShell, argvec);
/* Should never get here */
perror("execv");
exit(0);
}
/* fork_Unix is the secondary process spawned right after LISP is

View File

@@ -19,6 +19,7 @@
/************************************************************************/
/************************************************************************/
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
@@ -285,7 +286,7 @@ LispPTR parse_atomstring(char *string)
namelen = cnt - 1;
if ((packagelen == 0) || (strncmp(packageptr, "IL", packagelen) == 0)) { /* default IL: */
aindex = make_atom(nameptr, 0, namelen, T);
aindex = make_atom(nameptr, 0, namelen);
if (aindex == 0xffffffff) {
printf("trying IL:\n");
aindex = get_package_atom(nameptr, namelen, "INTERLISP", 9, 0);
@@ -349,6 +350,7 @@ unsigned int uGetTN(unsigned int address) {
LispPTR uraid_commands() {
int num, address, val;
char *endpointer;
LispPTR index;
DefCell *defcell68k;
#ifndef DOS
@@ -383,7 +385,9 @@ LispPTR uraid_commands() {
printf("DUMP-STACK: f decimal-FXnumber\n");
return (T);
}
if (sscanf(URaid_arg1, "%d", &num) <= 0) { /* com read fails */
errno = 0;
num = strtoul(URaid_arg1, &endpointer, 10);
if (errno != 0 || *endpointer != '\0') { /* com read fails */
printf("Illegal argument, not decimal number\n");
return (T);
}
@@ -511,7 +515,9 @@ LispPTR uraid_commands() {
printf("PRINT-INSTANCE: O HEX-LispAddress\n");
return (T);
}
if (sscanf(URaid_arg1, "%x", &objaddr) <= 0) {
errno = 0;
objaddr = strtoul(URaid_arg1, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg not HEX number\n");
return (T);
}
@@ -524,7 +530,9 @@ LispPTR uraid_commands() {
}
/**HEXNUMP(URaid_arg1,"Not Address");**/
if (sscanf(URaid_arg1, "%x", &address) <= 0) {
errno = 0;
address = strtoul(URaid_arg1, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg not HEX number\n");
return (T);
}
@@ -609,17 +617,21 @@ LispPTR uraid_commands() {
printf("HEX-DUMP: x Xaddress [Xnum]\n");
return (T);
}
if (sscanf(URaid_arg1, "%x", &address) <= 0) { /* arg1 not HEX */
errno = 0;
address = strtoul(URaid_arg1, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg(Xaddress) not Xaddress\n");
return (T);
}
switch (sscanf(URaid_arg2, "%x", &num)) {
case -1: /* Use defaultval for word-num */ num = XDUMPW; break;
case 0: /* Illegal number */
if (URaid_arg2[0] == '\0') {
num = XDUMPW;
} else {
errno = 0;
num = strtol(URaid_arg2, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg(Xnum) not Xnum\n");
return (T);
/* break; */
default: break;
}
}
if (num < 0) {
printf("Dump words num should be positive\n");
@@ -657,7 +669,9 @@ LispPTR uraid_commands() {
} else if (*URaid_arg2 == 'T')
val = ATOM_T;
else {
if (sscanf(URaid_arg2, "%d", &val) == -1) {
errno = 0;
val = strtol(URaid_arg2, &endpointer, 10);
if (errno != 0 || *endpointer != '\0') {
printf(" Bad value\n");
return (T);
} else {
@@ -691,11 +705,15 @@ LispPTR uraid_commands() {
HEXNUMP(URaid_arg2,"Not Proper Value");
***/
if (sscanf(URaid_arg1, "%x", &address) <= 0) {
errno = 0;
address = strtol(URaid_arg1, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg(Xaddress) not Xaddress\n");
return (T);
}
if (sscanf(URaid_arg2, "%x", &val) <= 0) {
errno = 0;
val = strtol(URaid_arg2, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg(Xval) not Xaddress\n");
return (T);
}
@@ -777,10 +795,6 @@ LispPTR uraid_commands() {
printf("VMEMSAVE: v filename (it's NOT bootable)\n");
return (T);
}
#ifndef DISPLAYBUFFER
copy_region(HideDisp68k, DisplayRegion68k, DisplayRasterWidth, displayheight);
#endif /* DISPLAYBUFFER */
if (vmem_save(URaid_arg1) != NIL) {
#ifndef DISPLAYBUFFER
clear_display();
@@ -795,13 +809,14 @@ LispPTR uraid_commands() {
case '(':
if (URaid_argnum == 1)
num = 2;
else if ((URaid_arg1[0] < '0') || (URaid_arg1[0] > '9')) {
printf("Illegal argument, not number\n");
return (T);
} else
sscanf(URaid_arg1, "%d", &num);
else {
errno = 0;
num = strtoul(URaid_arg1, &endpointer, 10);
if (errno != 0 || *endpointer != '\0') {
printf("Illegal argument, not number\n");
return (T);
}
}
PrintMaxLevel = num;
printf("PrintLevel is set to %d.", num);
break;
@@ -979,7 +994,7 @@ int device_after_raid() {
#ifdef MAIKO_ENABLE_ETHERNET
FD_SET(ether_fd, &LispReadFds);
if (ether_fd > 0) FD_SET(ether_fd, &LispReadFds);
#endif /* MAIKO_ENABLE_ETHERNET */
#ifdef XWINDOW

View File

@@ -114,7 +114,7 @@ int c_string_to_lisp_string(char *C, LispPTR Lisp) {
register size_t i;
register char *dp;
for (i = 0, dp = C; i < length + 1; i++) {
int ch = *dp++;
char ch = *dp++;
#ifdef DOS
if (ch == '\\') dp++; /* skip 2nd \ in \\ in C strings */
#endif /* DOS */

View File

@@ -99,6 +99,7 @@
#include "ubf3defs.h"
#include "unwinddefs.h"
#include "vars3defs.h"
#include "xwinmandefs.h"
#include "z2defs.h"
#ifdef DOS
@@ -108,6 +109,8 @@ extern IOPAGE *IOPage68K;
extern KbdInterface currentkbd;
extern DspInterface currentdsp;
extern MouseInterface currentmouse;
#else
extern DspInterface currentdsp;
#endif /* DOS */
typedef struct conspage ConsPage;
@@ -141,11 +144,8 @@ register LispPTR tscache asm("bx");
#define PVARL PVar
#define IVARL IVar
#ifdef XWINDOW
extern volatile sig_atomic_t Event_Req; /* != 0 when it's time to check X events
on machines that don't get them reliably
(e.g. Suns running OpenWindows) */
#endif /* XWINDOW */
/* used by SIGIO signal handler to indicate I/O may be possible */
extern volatile sig_atomic_t IO_Signalled;
#ifdef PCTRACE
/* For keeping a trace table (ring buffer) of 100 last PCs */
@@ -1112,17 +1112,22 @@ check_interrupt:
Irq_Stk_End = (UNSIGNED)EndSTKP;
}
/* Check for an IRQ request */
/* This is a good time to process keyboard/mouse and ethernet I/O
* X events are not managed in the async/SIGIO code while
* raw ethernet, serial port, and socket connections are.
* If the system is configured with SIGIO handling we have a hint
* that allows us to cheaply skip if there's nothing to do
*/
process_Xevents(currentdsp);
if (IO_Signalled) {
IO_Signalled = FALSE;
process_io_events();
}
if ((Irq_Stk_End <= 0) || (Irq_Stk_Check <= 0) || need_irq) {
if (StkOffset_from_68K(CSTKPTR) > InterfacePage->stackbase) {
/* Interrupts not Disabled */
/* XXX: what on earth is this code trying to accomplish by calling
getsignaldata
*/
#if !defined(KBINT) || defined(OS4)
getsignaldata(0);
#endif
EXT;
update_timer();

View File

@@ -30,6 +30,7 @@
#include "adr68k.h"
#include "xinitdefs.h"
#include "dspifdefs.h"
#include "timerdefs.h"
#include "xbbtdefs.h"
#include "xlspwindefs.h"
#include "xwinmandefs.h"
@@ -50,6 +51,7 @@
extern DLword *Lisp_world;
extern char Display_Name[128];
extern DLword *DisplayRegion68k;
extern int noscroll;
bool Lisp_Xinitialized = false;
int xsync = False;
@@ -65,7 +67,6 @@ Colormap Colors;
volatile sig_atomic_t XLocked = 0; /* non-zero while doing X ops, to avoid signals */
volatile sig_atomic_t XNeedSignal = 0; /* T if an X interrupt happened while XLOCK asserted */
extern fd_set LispReadFds;
/************************************************************************/
/* */
@@ -86,15 +87,16 @@ void init_Xevent(DspInterface dsp)
XSelectInput(dsp->display_id, dsp->LispWindow, dsp->EnableEventMask);
XSelectInput(dsp->display_id, dsp->DisplayWindow, dsp->EnableEventMask);
XSelectInput(dsp->display_id, dsp->HorScrollBar, BarMask);
XSelectInput(dsp->display_id, dsp->VerScrollBar, BarMask);
XSelectInput(dsp->display_id, dsp->HorScrollButton, NoEventMask);
XSelectInput(dsp->display_id, dsp->VerScrollButton, NoEventMask);
XSelectInput(dsp->display_id, dsp->NEGrav, GravMask);
XSelectInput(dsp->display_id, dsp->SEGrav, GravMask);
XSelectInput(dsp->display_id, dsp->SWGrav, GravMask);
XSelectInput(dsp->display_id, dsp->NWGrav, GravMask);
if (noscroll == 0) {
XSelectInput(dsp->display_id, dsp->HorScrollBar, BarMask);
XSelectInput(dsp->display_id, dsp->VerScrollBar, BarMask);
XSelectInput(dsp->display_id, dsp->HorScrollButton, NoEventMask);
XSelectInput(dsp->display_id, dsp->VerScrollButton, NoEventMask);
XSelectInput(dsp->display_id, dsp->NEGrav, GravMask);
XSelectInput(dsp->display_id, dsp->SEGrav, GravMask);
XSelectInput(dsp->display_id, dsp->SWGrav, GravMask);
XSelectInput(dsp->display_id, dsp->NWGrav, GravMask);
}
} /*end init_Xevent */
/************************************************************************/
@@ -108,13 +110,11 @@ void lisp_Xexit(DspInterface dsp)
{
assert(Lisp_Xinitialized);
#if defined(OS5) && defined(I_SETSIG)
ioctl(ConnectionNumber(dsp->display_id), I_SETSIG, 0); /* so no interrupts happen during */
#endif
XLOCK;
XDestroySubwindows(dsp->display_id, dsp->LispWindow);
XDestroyWindow(dsp->display_id, dsp->LispWindow);
XCloseDisplay(dsp->display_id);
XUNLOCK(dsp);
Lisp_Xinitialized = false;
} /* end lisp_Xexit */
@@ -178,9 +178,6 @@ void Open_Display(DspInterface dsp)
{
assert(Lisp_Xinitialized == false);
FD_SET(ConnectionNumber(dsp->display_id), &LispReadFds);
fcntl(ConnectionNumber(dsp->display_id), F_SETOWN, getpid());
/****************************************************/
/* If debugging, set the X connection so that */
/* we run synchronized--so a debugger can */
@@ -198,7 +195,7 @@ void Open_Display(DspInterface dsp)
Create_LispWindow(dsp); /* Make the main window */
Lisp_Xinitialized = true;
init_Xevent(dsp); /* Turn on the intrpts. */
init_Xevent(dsp); /* Turn on the event reporting */
} /* end OpenDisplay */
/*********************************************************************/
@@ -225,7 +222,7 @@ void Open_Display(DspInterface dsp)
/* */
/*********************************************************************/
DspInterface X_init(DspInterface dsp, char *lispbitmap, int width_hint, int height_hint,
DspInterface X_init(DspInterface dsp, LispPTR lispbitmap, int width_hint, int height_hint,
int depth_hint)
{
Screen *Xscreen;
@@ -242,8 +239,13 @@ DspInterface X_init(DspInterface dsp, char *lispbitmap, int width_hint, int heig
Xscreen = ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id));
/* Set the scrollbar and border widths */
dsp->ScrollBarWidth = SCROLL_WIDTH;
dsp->InternalBorderWidth = DEF_BDRWIDE;
if (noscroll == 0) {
dsp->ScrollBarWidth = SCROLL_WIDTH;
dsp->InternalBorderWidth = DEF_BDRWIDE;
} else {
dsp->ScrollBarWidth = 0;
dsp->InternalBorderWidth = 0;
}
dsp->Visible.x = LispDisplayRequestedX;
dsp->Visible.y = LispDisplayRequestedY;

View File

@@ -58,6 +58,7 @@ Cursor WaitCursor, DefaultCursor, VertScrollCursor, VertThumbCursor, ScrollUpCur
extern int LispWindowRequestedX, LispWindowRequestedY;
extern unsigned LispWindowRequestedWidth, LispWindowRequestedHeight;
extern int noscroll;
/************************************************************************/
/* */
@@ -187,86 +188,87 @@ void Create_LispWindow(DspInterface dsp)
set_Xcursor(dsp, scrollup_cursor.cuimage, (int)scrollup_cursor.cuhotspotx,
(int)(15 - scrollup_cursor.cuhotspoty), &ScrollUpCursor, 0);
/********************************/
/* Make all the toolkit windows */
/********************************/
dsp->VerScrollBar = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2,
0 - dsp->InternalBorderWidth, /* y */
dsp->ScrollBarWidth, /* width */
dsp->Visible.height, dsp->InternalBorderWidth,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
DefineCursor(dsp, dsp->VerScrollBar, &VertScrollCursor);
XMapWindow(dsp->display_id, dsp->VerScrollBar);
if (noscroll == 0) {
/********************************/
/* Make all the toolkit windows */
/********************************/
dsp->VerScrollBar = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2,
0 - dsp->InternalBorderWidth, /* y */
dsp->ScrollBarWidth, /* width */
dsp->Visible.height, dsp->InternalBorderWidth,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
DefineCursor(dsp, dsp->VerScrollBar, &VertScrollCursor);
XMapWindow(dsp->display_id, dsp->VerScrollBar);
dsp->HorScrollBar = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow,
0 - dsp->InternalBorderWidth, Row2, /* y */
dsp->Visible.width, /* width */
dsp->ScrollBarWidth, dsp->InternalBorderWidth,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
DefineCursor(dsp, dsp->HorScrollBar, &HorizScrollCursor);
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollBar, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XMapWindow(dsp->display_id, dsp->HorScrollBar);
dsp->HorScrollBar = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow,
0 - dsp->InternalBorderWidth, Row2, /* y */
dsp->Visible.width, /* width */
dsp->ScrollBarWidth, dsp->InternalBorderWidth,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
DefineCursor(dsp, dsp->HorScrollBar, &HorizScrollCursor);
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollBar, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XMapWindow(dsp->display_id, dsp->HorScrollBar);
dsp->VerScrollButton = XCreateSimpleWindow(
dsp->display_id, dsp->VerScrollBar, 0 - dsp->InternalBorderWidth, /* x */
(int)((dsp->Visible.y * dsp->Visible.height) / dsp->Display.height), /* y */
dsp->ScrollBarWidth, /* width */
(int)((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1,
dsp->InternalBorderWidth, BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
XChangeWindowAttributes(dsp->display_id, dsp->VerScrollButton, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XSetWindowBackgroundPixmap(dsp->display_id, dsp->VerScrollButton, dsp->ScrollBarPixmap);
XClearWindow(dsp->display_id, dsp->VerScrollButton);
XMapWindow(dsp->display_id, dsp->VerScrollButton);
dsp->VerScrollButton = XCreateSimpleWindow(
dsp->display_id, dsp->VerScrollBar, 0 - dsp->InternalBorderWidth, /* x */
(int)((dsp->Visible.y * dsp->Visible.height) / dsp->Display.height), /* y */
dsp->ScrollBarWidth, /* width */
(int)((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1,
dsp->InternalBorderWidth, BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
XChangeWindowAttributes(dsp->display_id, dsp->VerScrollButton, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XSetWindowBackgroundPixmap(dsp->display_id, dsp->VerScrollButton, dsp->ScrollBarPixmap);
XClearWindow(dsp->display_id, dsp->VerScrollButton);
XMapWindow(dsp->display_id, dsp->VerScrollButton);
dsp->HorScrollButton = XCreateSimpleWindow(
dsp->display_id, dsp->HorScrollBar,
(int)((dsp->Visible.x * dsp->Visible.width) / dsp->Display.width),
0 - dsp->InternalBorderWidth, /* y */
(int)((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1,
dsp->ScrollBarWidth, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollButton, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XSetWindowBackgroundPixmap(dsp->display_id, dsp->HorScrollButton, dsp->ScrollBarPixmap);
XClearWindow(dsp->display_id, dsp->HorScrollButton);
XMapWindow(dsp->display_id, dsp->HorScrollButton);
dsp->HorScrollButton = XCreateSimpleWindow(
dsp->display_id, dsp->HorScrollBar,
(int)((dsp->Visible.x * dsp->Visible.width) / dsp->Display.width),
0 - dsp->InternalBorderWidth, /* y */
(int)((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1,
dsp->ScrollBarWidth, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollButton, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XSetWindowBackgroundPixmap(dsp->display_id, dsp->HorScrollButton, dsp->ScrollBarPixmap);
XClearWindow(dsp->display_id, dsp->HorScrollButton);
XMapWindow(dsp->display_id, dsp->HorScrollButton);
dsp->NWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2, Row2, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
XSetWindowBackgroundPixmap(dsp->display_id, dsp->NWGrav, dsp->GravityOnPixmap);
DefineCursor(dsp, dsp->NWGrav, &DefaultCursor);
XChangeWindowAttributes(dsp->display_id, dsp->NWGrav, CWOverrideRedirect, &Lisp_SetWinAttributes);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->NWGrav);
dsp->NWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2, Row2, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
XSetWindowBackgroundPixmap(dsp->display_id, dsp->NWGrav, dsp->GravityOnPixmap);
DefineCursor(dsp, dsp->NWGrav, &DefaultCursor);
XChangeWindowAttributes(dsp->display_id, dsp->NWGrav, CWOverrideRedirect, &Lisp_SetWinAttributes);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->NWGrav);
dsp->SEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col3, Row3, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
XSetWindowBackgroundPixmap(dsp->display_id, dsp->SEGrav, dsp->GravityOffPixmap);
DefineCursor(dsp, dsp->SEGrav, &DefaultCursor);
XChangeWindowAttributes(dsp->display_id, dsp->SEGrav, CWOverrideRedirect, &Lisp_SetWinAttributes);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->SEGrav);
dsp->SEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col3, Row3, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
XSetWindowBackgroundPixmap(dsp->display_id, dsp->SEGrav, dsp->GravityOffPixmap);
DefineCursor(dsp, dsp->SEGrav, &DefaultCursor);
XChangeWindowAttributes(dsp->display_id, dsp->SEGrav, CWOverrideRedirect, &Lisp_SetWinAttributes);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->SEGrav);
dsp->SWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2, Row3, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
XSetWindowBackgroundPixmap(dsp->display_id, dsp->SWGrav, dsp->GravityOffPixmap);
DefineCursor(dsp, dsp->SWGrav, &DefaultCursor);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->SWGrav);
dsp->NEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col3, Row2, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
XSetWindowBackgroundPixmap(dsp->display_id, dsp->NEGrav, dsp->GravityOffPixmap);
DefineCursor(dsp, dsp->NEGrav, &DefaultCursor);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->NEGrav);
dsp->SWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2, Row3, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
XSetWindowBackgroundPixmap(dsp->display_id, dsp->SWGrav, dsp->GravityOffPixmap);
DefineCursor(dsp, dsp->SWGrav, &DefaultCursor);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->SWGrav);
dsp->NEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col3, Row2, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
XSetWindowBackgroundPixmap(dsp->display_id, dsp->NEGrav, dsp->GravityOffPixmap);
DefineCursor(dsp, dsp->NEGrav, &DefaultCursor);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->NEGrav);
}
/* DefineCursor( dsp, dsp->DisplayWindow, &WaitCursor ); */
XLOCK;
@@ -340,8 +342,8 @@ void DoRing() {
KBEVENT *kbevent;
TPRINT(("TRACE: DoRing()\n"));
do_ring:
/* DEL is not generally present on a Mac X keyboard, Ctrl-shift-ESC would be 18496 */
if (((*EmKbdAd268K) & 2113) == 0) { /*Ctrl-shift-NEXT*/
error("****** EMERGENCY Interrupt ******");
*EmKbdAd268K = KB_ALLUP; /*reset*/

View File

@@ -11,6 +11,7 @@
#include "version.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -67,6 +68,7 @@ static XrmOptionDescRec opTable[] = {
{"-m", "*memory", XrmoptionSepArg, (XPointer)NULL},
{"-NF", "*NoFork", XrmoptionIsArg, (XPointer)NULL},
{"-NoFork", "*NoFork", XrmoptionIsArg, (XPointer)NULL},
{"-noscroll", "*noscroll", XrmoptionIsArg, (XPointer) NULL},
{"-INIT", "*Init", XrmoptionIsArg, (XPointer)NULL},
{"-EtherNet", "*EtherNet", XrmoptionSepArg, (XPointer)NULL},
{"-E", "*EtherNet", XrmoptionSepArg, (XPointer)NULL},
@@ -84,7 +86,7 @@ char Window_Title[255];
char Icon_Title[255];
extern char sysout_name[];
extern int sysout_size, for_makeinit, please_fork;
extern int sysout_size, for_makeinit, please_fork, noscroll;
/* diagnostic flag for sysout dumping */
/* extern int maxpages; */
@@ -172,8 +174,7 @@ void read_Xoption(int *argc, char *argv[])
}
sysout_name[0] = '\0';
if (*argc == 2) /* There was probably a sysoutarg */
{
if (*argc == 2) { /* There was probably a sysoutarg */
(void)strncpy(sysout_name, argv[1], PATH_MAX - 1);
} else if ((envname = getenv("LDESRCESYSOUT")) != NULL) {
strncpy(sysout_name, envname, PATH_MAX - 1);
@@ -183,8 +184,9 @@ void read_Xoption(int *argc, char *argv[])
envname = getenv("HOME");
(void)strcat(sysout_name, envname);
(void)strcat(sysout_name, "/lisp.virtualmem");
if (access(sysout_name, R_OK) != 0) { (void)strcat(sysout_name, ""); }
}
if (access(sysout_name, R_OK) != 0) {
sysout_name[0] = '\0';
}
/* In order to access other DB's we have to open the main display now */
@@ -277,6 +279,10 @@ void read_Xoption(int *argc, char *argv[])
please_fork = 0;
}
if (XrmGetResource(rDB, "ldex.noscroll", "Ldex.noscroll", str_type, &value) == True) {
noscroll = 1;
}
/* if (XrmGetResource(rDB,
"ldex.maxpages",
"Ldex.maxpages",
@@ -287,7 +293,10 @@ void read_Xoption(int *argc, char *argv[])
*/
if (XrmGetResource(rDB, "ldex.memory", "Ldex.memory", str_type, &value) == True) {
(void)strncpy(tmp, value.addr, (int)value.size);
sysout_size = atoi(tmp);
errno = 0;
i = (int)strtol(tmp, (char **)NULL, 10);
if (errno == 0 && i > 0)
sysout_size = i;
}
if (XrmGetResource(rDB, "ldex.Init", "Ldex.Init", str_type, &value) == True) { for_makeinit = 1; }

View File

@@ -30,7 +30,7 @@ int Mouse_Included = FALSE;
extern Cursor WaitCursor, DefaultCursor, VertScrollCursor, VertThumbCursor, ScrollUpCursor,
ScrollDownCursor, HorizScrollCursor, HorizThumbCursor, ScrollLeftCursor, ScrollRightCursor;
extern int noscroll;
extern DspInterface currentdsp;
extern DLword *EmCursorX68K, *EmCursorY68K;
@@ -109,33 +109,35 @@ static void lisp_Xconfigure(DspInterface dsp, int x, int y, int lspWinWidth, int
XLOCK;
XMoveResizeWindow(dsp->display_id, dsp->DisplayWindow, 0, 0, dsp->Visible.width,
dsp->Visible.height);
/* Scroll bars */
XMoveResizeWindow(dsp->display_id, dsp->VerScrollBar, Col2, 0 - dsp->InternalBorderWidth, /* y */
dsp->ScrollBarWidth, /* width */
dsp->Visible.height); /* height */
XMoveResizeWindow(dsp->display_id, dsp->HorScrollBar, 0 - dsp->InternalBorderWidth, Row2, /* y */
dsp->Visible.width, /* width */
dsp->ScrollBarWidth); /* height */
if (noscroll == 0) {
/* Scroll bars */
XMoveResizeWindow(dsp->display_id, dsp->VerScrollBar, Col2, 0 - dsp->InternalBorderWidth, /* y */
dsp->ScrollBarWidth, /* width */
dsp->Visible.height); /* height */
XMoveResizeWindow(dsp->display_id, dsp->HorScrollBar, 0 - dsp->InternalBorderWidth, Row2, /* y */
dsp->Visible.width, /* width */
dsp->ScrollBarWidth); /* height */
/* Scroll buttons */
XMoveResizeWindow(
dsp->display_id, dsp->HorScrollButton,
(int)((dsp->Visible.x * dsp->Visible.width) / dsp->Display.width), /* x */
0 - dsp->InternalBorderWidth, /* y */
(int)((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1, /* width */
dsp->ScrollBarWidth); /* height */
XMoveResizeWindow(
dsp->display_id, dsp->VerScrollButton, 0 - dsp->InternalBorderWidth, /* x */
(int)((dsp->Visible.y * dsp->Visible.height) / dsp->Display.height), /* y */
dsp->ScrollBarWidth, /* width */
(int)((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1); /* height */
/* Scroll buttons */
XMoveResizeWindow(
dsp->display_id, dsp->HorScrollButton,
(int)((dsp->Visible.x * dsp->Visible.width) / dsp->Display.width), /* x */
0 - dsp->InternalBorderWidth, /* y */
(int)((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1, /* width */
dsp->ScrollBarWidth); /* height */
XMoveResizeWindow(
dsp->display_id, dsp->VerScrollButton, 0 - dsp->InternalBorderWidth, /* x */
(int)((dsp->Visible.y * dsp->Visible.height) / dsp->Display.height), /* y */
dsp->ScrollBarWidth, /* width */
(int)((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1); /* height */
/* Gravity windows */
XMoveResizeWindow(dsp->display_id, dsp->NWGrav, Col2, Row2, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->NEGrav, Col3, Row2, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->SEGrav, Col3, Row3, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->SWGrav, Col2, Row3, GravSize, GravSize);
Scroll(dsp, dsp->Visible.x, dsp->Visible.y);
/* Gravity windows */
XMoveResizeWindow(dsp->display_id, dsp->NWGrav, Col2, Row2, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->NEGrav, Col3, Row2, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->SEGrav, Col3, Row3, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->SWGrav, Col2, Row3, GravSize, GravSize);
Scroll(dsp, dsp->Visible.x, dsp->Visible.y);
}
XFlush(dsp->display_id);
XUNLOCK(dsp);
} /* end lisp_Xconfigure */
@@ -171,7 +173,7 @@ void beep_Xkeyboard(DspInterface dsp)
/************************************************************************/
/* */
/* g e t X s i g n a l d a t a */
/* p r o c e s s _ X e v e n t s */
/* */
/* Take X key/mouse events and turn them into Lisp events */
/* */
@@ -179,7 +181,7 @@ void beep_Xkeyboard(DspInterface dsp)
extern int Current_Hot_X, Current_Hot_Y; /* Cursor hotspot */
void getXsignaldata(DspInterface dsp)
void process_Xevents(DspInterface dsp)
{
XEvent report;
@@ -193,8 +195,6 @@ void getXsignaldata(DspInterface dsp)
(short)((report.xmotion.x + dsp->Visible.x) & 0xFFFF) - Current_Hot_X;
*EmCursorY68K = (*((DLword *)EmMouseY68K)) =
(short)((report.xmotion.y + dsp->Visible.y) & 0xFFFF) - Current_Hot_Y;
DoRing();
if ((KBDEventFlg) > 0) Irq_Stk_End = Irq_Stk_Check = 0;
break;
case KeyPress:
kb_trans(SUNLispKeyMap[(report.xkey.keycode) - KEYCODE_OFFSET], FALSE);
@@ -342,4 +342,4 @@ void getXsignaldata(DspInterface dsp)
Set_BitGravity(&report.xbutton, dsp, dsp->NWGrav, NorthWestGravity);
XFlush(dsp->display_id);
} /* end while */
} /* end getXsignaldata() */
} /* end process_Xevents */