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

Compare commits

..

16 Commits

Author SHA1 Message Date
Nick Briggs
535811935c Update keyname map to account for changed key names in SDL3 2024-10-15 15:03:20 -07:00
Nick Briggs
fae5c4956e Cleanup in the "version array" handling in the {DSK} device (#513)
* Remove useless VersionArray parameter in maintain_version()

The 2nd argument, FileName *varray, is only ever NULL, so
remove it and simplify the code.

* Remove useless and unused VersionArray cache mechanism

* Simplify setting of file times on file close

The futimes(fd, ...) function allows changing the times of a file with
reference to an open file descriptor which allows us to avoid trying to
find a pathname by which utimes(path, ...) would operate on the inode
corresponding to the fd we have just closed.

* Remove unnecessary temporary variable for VersionArray

* In get_version_array() do not mix array and pointer access to VersionArray

* Improve {DSK} device handling of files with many versions

Somewhat dynamically allocate the version array storage, in chunks of
VERSIONARRAYCHUNKLENGTH (currently 200) allowing for up to
VERSIONARRAYMAXLENGTH (currently 2000) entries before reporting an
error. These numbers could be adjusted, or the limit could be removed.

Sorts the version array in descending order of version number to
improve the performance of check_vless_link() which stats every file
in the version array until it finds one linked to the versionless name
(which should be the highest version).  Sorting, and tracking the
number of active entries, also allows for future optimization of other
operations that currently walk through the version array.

* futimens() appears more widely available than futimes() - so use it

* Rework caching of version array for files

While enumerating the entries in a directory is relatively fast,
on some systems (macOS) stat() of a file is slow.
While there is not general agreement on the name in the stat structure
of the timespec field for the modification time, POSIX specifies it
as "st_mtim", and it is possible to #define st_mtim to be the
system-specific name in "version.h" (macOS: st_mtimespec).

* FindHighestVersion can make use of sorted order of filename/version cache

Since the list of filename and versions is maintained in descending order
by version number (see get_version_array) the highest version is trivially
located at index 0 of the filename array.
2024-10-14 14:15:02 -07:00
Nick Briggs
91e0cea9d5 Fix #1826 - emulator crash when too many versions of a file in a directory (#512)
* Fix #1826 - emulator crash  when too many versions of a file in a directory

This is a preliminary fix to avoid a system crash (bus error/seg fault) when
operating on a file with too many versions present in the directory.

Initial fix is to report an error (EIO, SIMPLE-DEVICE-ERROR) when doing
an operation that would result in an out-of-bounds access in the emulator.

* Add comment noting that the DOS get_version_array code comes first.
2024-09-16 17:47:48 -07:00
Nick Briggs
4ad14fa832 Allow choice of foreground and background colors for Medley X11/SDL display (#511)
* Allow choice of foreground and background colors for Medley X11 display

lde/ldex Accepts -fg/-foreground <color> and -bg/-background <color>,
or the corresponding X resources ldex*foreground and ldex*background
to specify the colors that will represent the monochrome Medley display
pixels.

* Extend screen foreground/background color selection to SDL display subsystem (ldesdl)
2024-09-09 12:56:18 -07:00
Nick Briggs
aa4df518a1 Release 201 corrections (#510)
* Fix compilation for maiko version 201

Version 201 does not have BIGVM, so SWA_FNHEAD requires swapx
which is defined in byteswapdefs.h

* Fix compilation for maiko version 201

Version 201 did not have NEWCDRCODING, so the implementation of
N_OP_rplcons requires definitions from gcdata.h and address.h

* Set up makeright etc. to allow for easier compilation of alternate versions

The makeright script and the makefile-* slices it depends are modified
to allow easily specifying the RELEASE version number of the Maiko emulator
to be built.  The default version remains 351, but can be changed with e.g.

RELEASE=201 ./makeright x

The object directories and executables are NOT named with the version.

* Remove unnecessary include of gcdata.h from bbtsub.c

* Users of gcdata.h should include gchtfinddefs.h explicitly if they use gcdata.h macros

* Correct modify_big_reference_count entry parameter type to reflect dependence on GCENTRY size differences between releases

* Add MAIKO_RELEASE to CMake options for building
2024-09-01 16:26:30 -07:00
Nick Briggs
5c9b5ef4ec Ignore mouse motion events when the window does not have keyboard focus (#509) 2024-08-21 20:59:37 -07:00
Nick Briggs
3ef7d2d68e Fixing mismatched type declaration avoids cast from DLword* to short* 2024-05-29 16:52:29 -07:00
Nick Briggs
68c74e4e79 Add support for setting cursor color to ldex (X11 display) (#508)
The cursor (foreground) color can be set with the
    -cursorColor x11-color-spec
option to ldex or any front-end that passes the options through to ldex.
For example:
     lde ... -cursorColor red
     lde ... -cursorColor '#A020F0'
     ./run-medley -cursorColor RED -g 1200x700 -sc 1200x700 -noscroll

Alternatively, the color may be specified with the ldex*cursorColor resource
(in ~/.Xresources, or other such X11 resource databases that are loaded by
the X11 server)

The command line option will override the X11 resource option.
2024-05-23 09:52:22 -07:00
Nick Briggs
c765ca5cc8 Update SDL dependent code and makefile segments to prepare for SDL3 (#497)
* Update SDL dependent code and makefile segments to prepare for SDL3

Many APIs have changed between SDL2 and SDL3.  This update adds
preprocessor conditionals to adapt the Maiko SDL code to allow selection of
the SDL major version (2 or 3) from the -DSDL=n define.

The SDL3 implementation is currently available as a preview release, 3.1.0, at
   https://github.com/libsdl-org/SDL/releases/tag/prerelease-3.1.0

* Add updates for makefile-haiku.x86_64-sdl to prepare for SDL3

* Allow makeright to accept sdl3 as display type to ease SDL3 experiments

* Update CMakeLists.txt for SDL3 library

 * Replaces configuration option -DMAIKO_DISPLAY_SDL=ON/OFF with
   -DMAIKO_DISPLAY_SDL=OFF/2/3
 * Replaces PUBLIC definitions with PRIVATE definitions on targets since
   we are not exporting definitions outside this local compilation
 * Update messages to indicate which version of SDL is being configured
 * Add fixup for SDL3.xcframework on macOS to compensate for missing
   RPATH specification (CMake issue 25998)
2024-05-21 12:07:13 -07:00
Nick Briggs
3ac46abc5c Implement the "B hexaddr" command to print array block (#506)
The array block printer was already documented, but not implemented.
Clean up with IncludeWhatYouUse, to document why particular includes
are present.
2024-05-20 15:12:38 -07:00
Nick Briggs
613ffd8aca Update .gitignore to ignore 386-sdl build directory (#507) 2024-05-20 15:10:38 -07:00
Nick Briggs
db5d5a31e7 Add -rpath /Library/Frameworks to accommodate newer macOS releases (#505)
On or before macOS Ventura's release, defaulting the @rpath to
include /Library/Frameworks stopped.  Since we expect the SDL2
framework to be installed there we must add a -rpath option.
This should be backwards compatible with older macOS releases.
(verified on Catalina but nothing older)
2024-05-19 23:39:00 -07:00
Nick Briggs
4becc6ad93 Not all systems define MAP_FAILED for the return value from failing mmap() (#502) 2024-05-13 15:37:53 -07:00
Frank Halasz
40a1a8dcd2 Rationalize the processing of command line args for the sysout. Fixes Issue#1703 (#503)
* Rationalize the processing of command line args for the sysout.  Remove most of the redundancy between what is done for sysout arg processing in xrdopt.c versus main.c.  Move all of the decision making about what sysout_name to use until all args have been processed (both in xrdpopt and main).  This is done in main, where the prioritization and checking is done in one place rather than spread in several places in xrdopt and main.     //  Order of priority:
628   //    1. Value of -sysout command line arg
629   //    2. Value of the first command line arg
630   //    3. Value of LDESRCESYSOUT env variable
631   //    4. Value of LDESOURCESYSOUT env variable
632   //    5. Value as determined by X resource manager, if any
633   //    6. Value of /home/frank/lisp.virtualmem (or lisp.vm for DOS)

* In main.c moved check for sysout as first arg to before the call to read_Xoption.  This will ensure that we always check the 'true' first argument even when read_Xoption modifies argv.
2024-05-13 15:36:33 -07:00
Frank Halasz
fd16058ca7 Merge pull request #504 from Interlisp/fgh_fix-cygwin-github-build
Fix Cygwin github builds:  Issue#1705
2024-05-10 14:31:50 -07:00
Frank Halasz
1426386830 In buildRelease.yml, change site for cygwin download to https:/mirrors.kernel.org since old gatech site is now deprecated. 2024-05-10 14:19:12 -07:00
76 changed files with 1707 additions and 462 deletions

View File

@@ -18,7 +18,7 @@ COPY . ${INSTALL_LOCATION}
# Build maiko
RUN cd ${INSTALL_LOCATION}/bin \
&& ./makeright x cleanup \
&& ./makeright x nethub
&& ./makeright x
RUN cd ${INSTALL_LOCATION}/bin \
&& if [ "$(./machinetype)" = "x86_64" ]; then \
./makeright init; \

View File

@@ -339,7 +339,6 @@ jobs:
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
-DMAIKO_DISPLAY_SDL=ON \
-DMAIKO_DISPLAY_X11=ON \
-DMAIKO_ENABLE_NETHUB=true \
-DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release
for exe in lde ldex ldesdl
@@ -413,7 +412,7 @@ jobs:
run: |
wget https://cygwin.com/setup-x86_64.exe -OutFile setup-x86_64.exe
Unblock-File setup-x86_64.exe
Start-Process setup-x86_64.exe -Wait -ArgumentList @("--root", ".\cygwin", "--quiet-mode", "--no-admin", "--wait", "--no-shortcuts", "--no-write-registry", "--verbose", "--site", "http://www.gtlib.gatech.edu/pub/cygwin/", "--packages", "nano,binutils,make,cmake,gcc,clang")
Start-Process setup-x86_64.exe -Wait -ArgumentList @("--root", ".\cygwin", "--quiet-mode", "--no-admin", "--wait", "--no-shortcuts", "--no-write-registry", "--verbose", "--site", "https://mirrors.kernel.org/sourceware/cygwin/", "--packages", "nano,binutils,make,cmake,gcc,clang")
cygwin\bin\bash -login -c 'sed -i -e "s/^none/#none/" /etc/fstab; echo "none / cygdrive binary,posix=0,user 0 0" >>/etc/fstab'
# Retrieve SDL2 and install in cygwin

1
.gitignore vendored
View File

@@ -10,6 +10,7 @@ cmake-build-*/**
.idea/
*.m68k-x/**
*.m68k/**
*.386-sdl/**
*.386-x/**
*.386/**
*.ppc-x/**

View File

@@ -37,16 +37,21 @@ IF(NEED_LIB_M)
SET(MAIKO_LIBRARIES m)
ENDIF()
SET (MAIKO_RELEASE 351 CACHE STRING "Release version to build. Release: 115, 200, 201, 210, 300, 350, 351")
SET_PROPERTY(CACHE MAIKO_RELEASE PROPERTY STRINGS 115 200 201 210 300 350 351)
MESSAGE("-- Configured for release ${MAIKO_RELEASE}")
SET(MAIKO_DEFINITIONS
"-DRELEASE=351"
"-DRELEASE=${MAIKO_RELEASE}"
)
SET(MAIKO_INIT_DEFINITIONS
"-DRELEASE=351" "-DINIT" "-DNOVERSION"
"-DRELEASE=${MAIKO_RELEASE}" "-DINIT" "-DNOVERSION"
)
OPTION(MAIKO_DISPLAY_X11 "Use X11 for display." ON)
OPTION(MAIKO_DISPLAY_SDL "Use SDL for display." OFF)
SET(MAIKO_DISPLAY_SDL OFF CACHE STRING "Use SDL for display. Version: OFF, 2, 3")
SET_PROPERTY(CACHE MAIKO_DISPLAY_SDL PROPERTY STRINGS OFF 2 3)
IF(MAIKO_DISPLAY_X11)
FIND_PACKAGE(X11 REQUIRED)
@@ -81,19 +86,34 @@ IF(MAIKO_DISPLAY_X11)
MESSAGE("-- Configured for X11 display")
ENDIF()
IF(MAIKO_DISPLAY_SDL)
IF(MAIKO_DISPLAY_SDL STREQUAL "2")
FIND_PACKAGE(SDL2 REQUIRED)
SET(MAIKO_DISPLAY_SDL_DEFINITIONS
"-DSDL"
"-DSDL=2"
)
SET(MAIKO_DISPLAY_SDL_LIBRARIES ${SDL2_LIBRARIES})
SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS "${SDL2_INCLUDE_DIRS}")
SET(MAIKO_DISPLAY_SDL_LIBRARIES SDL2::SDL2)
SET(MAIKO_DISPLAY_SDL_SRCS
src/sdl.c
)
SET(MAIKO_DISPLAY_SDL_HDRS
inc/sdldefs.h
)
MESSAGE("-- Configured for SDL display")
MESSAGE("-- Configured for SDL2 display")
ELSEIF(MAIKO_DISPLAY_SDL STREQUAL "3")
FIND_PACKAGE(SDL3 REQUIRED)
SET(MAIKO_DISPLAY_SDL_DEFINITIONS
"-DSDL=3"
)
SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS "${SDL3_INCLUDE_DIRS}")
SET(MAIKO_DISPLAY_SDL_LIBRARIES SDL3::SDL3)
SET(MAIKO_DISPLAY_SDL_SRCS
src/sdl.c
)
SET(MAIKO_DISPLAY_SDL_HDRS
inc/sdldefs.h
)
MESSAGE("-- Configured for SDL3 display")
ENDIF()
# according to: https://cmake.org/pipermail/cmake/2016-October/064342.html
@@ -428,23 +448,23 @@ ADD_CUSTOM_TARGET(gen-vdate
)
ADD_EXECUTABLE(lde src/ldeboot.c src/unixfork.c)
TARGET_COMPILE_DEFINITIONS(lde PUBLIC ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(lde PUBLIC inc)
TARGET_COMPILE_DEFINITIONS(lde PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(lde PRIVATE inc)
IF(MAIKO_DISPLAY_X11)
# Tell it that the X11 launcher is available.
TARGET_COMPILE_DEFINITIONS(lde PUBLIC ${MAIKO_DISPLAY_X11_DEFINITIONS})
TARGET_COMPILE_DEFINITIONS(lde PRIVATE ${MAIKO_DISPLAY_X11_DEFINITIONS})
# This is needed so that it can call XOpenDisplay.
TARGET_LINK_LIBRARIES(lde X11::X11)
ENDIF()
IF(MAIKO_DISPLAY_SDL)
# Tell it that the SDL launcher is available.
TARGET_COMPILE_DEFINITIONS(lde PUBLIC ${MAIKO_DISPLAY_SDL_DEFINITIONS})
TARGET_COMPILE_DEFINITIONS(lde PRIVATE ${MAIKO_DISPLAY_SDL_DEFINITIONS})
ENDIF()
ADD_EXECUTABLE(ldeether src/ldeether.c src/dlpi.c)
TARGET_COMPILE_DEFINITIONS(ldeether PUBLIC ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldeether PUBLIC inc)
TARGET_COMPILE_DEFINITIONS(ldeether PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldeether PRIVATE inc)
IF(MAIKO_DISPLAY_X11)
ADD_EXECUTABLE(ldex
@@ -455,8 +475,8 @@ IF(MAIKO_DISPLAY_X11)
${MAIKO_DISPLAY_X11_SRCS}
${MAIKO_DISPLAY_X11_HDRS}
)
TARGET_COMPILE_DEFINITIONS(ldex PUBLIC ${MAIKO_DEFINITIONS} ${MAIKO_DISPLAY_X11_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldex PUBLIC inc)
TARGET_COMPILE_DEFINITIONS(ldex PRIVATE ${MAIKO_DEFINITIONS} ${MAIKO_DISPLAY_X11_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldex PRIVATE inc)
TARGET_LINK_LIBRARIES(ldex ${MAIKO_LIBRARIES} ${MAIKO_DISPLAY_X11_LIBRARIES})
ADD_EXECUTABLE(ldeinit
@@ -467,8 +487,8 @@ IF(MAIKO_DISPLAY_X11)
${MAIKO_DISPLAY_X11_SRCS}
${MAIKO_DISPLAY_X11_HDRS}
)
TARGET_COMPILE_DEFINITIONS(ldeinit PUBLIC ${MAIKO_INIT_DEFINITIONS} ${MAIKO_DISPLAY_X11_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldeinit PUBLIC inc)
TARGET_COMPILE_DEFINITIONS(ldeinit PRIVATE ${MAIKO_INIT_DEFINITIONS} ${MAIKO_DISPLAY_X11_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldeinit PRIVATE inc)
TARGET_LINK_LIBRARIES(ldeinit ${MAIKO_LIBRARIES} ${MAIKO_DISPLAY_X11_LIBRARIES})
ENDIF()
@@ -481,20 +501,32 @@ IF(MAIKO_DISPLAY_SDL)
${MAIKO_DISPLAY_SDL_SRCS}
${MAIKO_DISPLAY_SDL_HDRS}
)
TARGET_COMPILE_DEFINITIONS(ldesdl PUBLIC ${MAIKO_DEFINITIONS} ${MAIKO_DISPLAY_SDL_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldesdl PUBLIC inc)
TARGET_INCLUDE_DIRECTORIES(ldesdl PRIVATE ${SDL2_INCLUDE_DIRS})
TARGET_COMPILE_DEFINITIONS(ldesdl PRIVATE ${MAIKO_DEFINITIONS} ${MAIKO_DISPLAY_SDL_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldesdl PRIVATE inc)
TARGET_INCLUDE_DIRECTORIES(ldesdl PRIVATE ${MAIKO_DISPLAY_SDL_INCLUDE_DIRS})
IF(APPLE)
IF(MAIKO_DISPLAY_SDL STREQUAL "3")
#
# Until CMake properly supports .xcframeworks, https://gitlab.kitware.com/cmake/cmake/-/issues/25998
# we need to manually set the RPATH to produce a working executable
#
MESSAGE("-- Applying fixup for macOS RPATH for SDL3.xcframework")
SET_PROPERTY(TARGET ldesdl APPEND PROPERTY BUILD_RPATH "/Library/Frameworks/SDL3.xcframework/macos-arm64_x86_64")
#
ENDIF()
ENDIF()
TARGET_LINK_LIBRARIES(ldesdl ${MAIKO_LIBRARIES} ${MAIKO_DISPLAY_SDL_LIBRARIES})
ENDIF()
ADD_EXECUTABLE(mkvdate src/mkvdate.c)
TARGET_COMPILE_DEFINITIONS(mkvdate PUBLIC ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(mkvdate PUBLIC inc)
TARGET_COMPILE_DEFINITIONS(mkvdate PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(mkvdate PRIVATE inc)
ADD_EXECUTABLE(setsout src/setsout.c src/byteswap.c)
TARGET_COMPILE_DEFINITIONS(setsout PUBLIC ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(setsout PUBLIC inc)
TARGET_COMPILE_DEFINITIONS(setsout PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(setsout PRIVATE inc)
ADD_EXECUTABLE(tstsout src/tstsout.c src/byteswap.c)
TARGET_COMPILE_DEFINITIONS(tstsout PUBLIC ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(tstsout PUBLIC inc)
TARGET_COMPILE_DEFINITIONS(tstsout PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(tstsout PRIVATE inc)

View File

@@ -5,11 +5,17 @@ CC = gcc -m64 $(GCC_CFLAGS) -I/usr/local/include
XFILES = $(OBJECTDIR)sdl.o
XFLAGS = -DSDL
#
# For SDL version 2
# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS
#
XFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lm -L/usr/local/lib -lSDL2
#

View File

@@ -18,7 +18,7 @@ XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm

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=$(RELEASE) # -DSTACKCHECK -DFSBCHECK -DPCTRACE
LDFLAGS = -L/opt/X11/lib -lX11 -lm
LDELDFLAGS = -L/opt/X11/lib -lX11 -lm

View File

@@ -4,14 +4,21 @@ CC = clang -target aarch64-apple-darwin $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o
SDLFLAGS = -DSDL -F /Library/Frameworks
#
# For SDL version 2
# -DSDL=2 in SDLFLAGS and -framework SDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in SDLFLAGS and -framework SDL3 in LDFLAGS
#
SDLFLAGS = -DSDL=2 -F /Library/Frameworks
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g
DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(SDLFLAGS) -DRELEASE=351
DFLAGS = $(DEBUGFLAGS) $(SDLFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -F /Library/Frameworks -framework SDL2
LDFLAGS = -rpath /Library/Frameworks -F /Library/Frameworks -framework SDL2
LDELDFLAGS =
OBJECTDIR = ../$(RELEASENAME)/

View File

@@ -18,7 +18,7 @@ XFLAGS = -I/opt/X11/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2
DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/opt/X11/lib -lX11 -lm
LDELDFLAGS = -L/opt/X11/lib -lX11 -lm

View File

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

View File

@@ -2,16 +2,22 @@
CC = clang -m64 -target x86_64-apple-darwin $(CLANG_CFLAGS)
#
# For SDL version 2
# -DSDL=2 in SDLFLAGS and -framework SDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in SDLFLAGS and -framework SDL3 in LDFLAGS
#
XFILES = $(OBJECTDIR)sdl.o
SDLFLAGS = -DSDL -F /Library/Frameworks
SDLFLAGS = -DSDL=2 -F /Library/Frameworks
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g
DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(SDLFLAGS) -DRELEASE=351
DFLAGS = $(DEBUGFLAGS) $(SDLFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -F /Library/Frameworks -framework SDL2
LDFLAGS = -rpath /Library/Frameworks -F /Library/Frameworks -framework SDL2
LDELDFLAGS =
OBJECTDIR = ../$(RELEASENAME)/

View File

@@ -18,7 +18,7 @@ XFLAGS = -I/opt/X11/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O1 -g
DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/opt/X11/lib -lX11 -lm
LDELDFLAGS = -L/opt/X11/lib -lX11 -lm

View File

@@ -4,11 +4,17 @@ CC = emcc $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o
XFLAGS = -DSDL -sUSE_SDL=2
#
# For SDL version 2
# -DSDL=2 and -sUSE_SDL=2 in XFLAGS and -sUSE_SDL=2 in LDFLAGS
# For SDL version 3
# -DSDL=3 and -sUSE_SDL=3 in XFLAGS and -sUSE_SDL=3 in LDFLAGS
#
XFLAGS = -DSDL=2 -sUSE_SDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2
DFLAGS = $(XFLAGS) -DRELEASE=351 -DMAIKO_ENABLE_NETHUB
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DMAIKO_ENABLE_NETHUB
MEDLEY?=../../medley
SYSOUT?=$(MEDLEY)/loadups/full.sysout

View File

@@ -4,11 +4,17 @@ CC = emcc $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o
XFLAGS = -DSDL -sUSE_SDL=2
#
# For SDL version 2
# -DSDL=2 and -sUSE_SDL=2 in XFLAGS and -sUSE_SDL=2 in LDFLAGS
# For SDL version 3
# -DSDL=3 and -sUSE_SDL=3 in XFLAGS and -sUSE_SDL=3 in LDFLAGS
#
XFLAGS = -DSDL=2 -sUSE_SDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2
DFLAGS = $(XFLAGS) -DRELEASE=351 -DMAIKO_ENABLE_NETHUB
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DMAIKO_ENABLE_NETHUB
MEDLEY?=../../medley
SYSOUT?=$(MEDLEY)/loadups/full.sysout

View File

@@ -4,11 +4,17 @@ CC = clang -m32 $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o
SDLFLAGS = -DSDL -I/usr/local/include
#
# For SDL version 2
# -DSDL=2 in SDLFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in SDLFLAGS and -lSDL3 in LDFLAGS
#
SDLFLAGS = -DSDL=2 -I/usr/local/include
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g
DFLAGS = $(SDLFLAGS) -DRELEASE=351
DFLAGS = $(SDLFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/local/lib -lSDL2 -lm
LDELDFLAGS =

View File

@@ -17,7 +17,7 @@ XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/local/lib -lX11 -lc -lm

View File

@@ -4,11 +4,17 @@ CC = clang -m64 $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o
SDLFLAGS = -DSDL -I/usr/local/include
#
# For SDL version 2
# -DSDL=2 in SDLFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in SDLFLAGS and -lSDL3 in LDFLAGS
#
SDLFLAGS = -DSDL=2 -I/usr/local/include
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g
DFLAGS = $(SDLFLAGS) -DRELEASE=351
DFLAGS = $(SDLFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/local/lib -lSDL2 -lm
LDELDFLAGS =

View File

@@ -17,7 +17,7 @@ XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/local/lib -lX11 -lc -lm

View File

@@ -4,11 +4,17 @@ CC = clang -m64 $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o
SDLFLAGS = -DSDL -I/usr/local/include
#
# For SDL version 2
# -DSDL=2 in SDLFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in SDLFLAGS and -lSDL3 in LDFLAGS
#
SDLFLAGS = -DSDL=2 -I/usr/local/include
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g
DFLAGS = $(SDLFLAGS) -DRELEASE=351
DFLAGS = $(SDLFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/local/lib -lSDL2 -lm
LDELDFLAGS =

View File

@@ -17,7 +17,7 @@ XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/local/lib -lX11 -lc -lm

View File

@@ -5,11 +5,17 @@ CC = gcc -m64 $(GCC_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o
XFLAGS = -DSDL
#
# For SDL version 2
# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS
#
XFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lSDL2 -lnetwork
LDELDFLAGS = -lnetwork -lbsd

View File

@@ -18,7 +18,7 @@ XFLAGS = -I/opt/X11/include -DXWINDOW
# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g
DEBUGFLAGS =
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/X11/lib -lX11 -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lm

View File

@@ -18,7 +18,7 @@ XFLAGS = -I/opt/X11/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O0 -g3
DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/opt/X11/lib -lX11 -lm
LDELDFLAGS = -L/opt/X11/lib -lX11 -lm

View File

@@ -18,7 +18,7 @@ XFLAGS = -I/opt/X11/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O0 -g
DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/opt/X11/lib -lX11 -lm
LDELDFLAGS = -L/opt/X11/lib -lX11 -lm

View File

@@ -17,7 +17,7 @@ XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O0 for init
OPTFLAGS = -O0 -g
DFLAGS = $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/local/lib -lX11 -lc -lm

View File

@@ -17,7 +17,7 @@ XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O0 for init
OPTFLAGS = -O0 -g
DFLAGS = $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/local/lib -lX11 -lc -lm

View File

@@ -17,7 +17,7 @@ XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O0 for init
OPTFLAGS = -O0 -g
DFLAGS = $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/local/lib -lX11 -lc -lm

View File

@@ -19,7 +19,7 @@ XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g
DEBUGFLAGS =
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm

View File

@@ -19,7 +19,7 @@ XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g
DEBUGFLAGS =
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm

View File

@@ -17,7 +17,7 @@ XFLAGS = -I/usr/X11R6/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/X11R6/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11R6/lib -lX11 -lc -lm

View File

@@ -50,7 +50,7 @@ DFLAGS = -DINIT \
$(XFLAGS) \
$(DEBUGFLAGS) \
$(MACHINEFLAGS) \
-DNOVERSION -DRELEASE=351
-DNOVERSION -DRELEASE=$(RELEASE)
LDFLAGS = -lX11 -lc -lm -lsocket -lnsl

View File

@@ -5,11 +5,17 @@ CC = gcc -m32 $(GCC_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o
XFLAGS = -DSDL
#
# For SDL version 2
# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS
#
XFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lm -lSDL2
LDELDFLAGS =

View File

@@ -17,7 +17,7 @@ XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm

View File

@@ -5,11 +5,17 @@ CC = gcc $(GCC_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o
SDLFLAGS = -DSDL
#
# For SDL version 2
# -DSDL=2 in SDLFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in SDLFLAGS and -lSDL3 in LDFLAGS
#
SDLFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(SDLFLAGS) -DRELEASE=351
DFLAGS = $(SDLFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lSDL2 -lm
LDELDFLAGS =

View File

@@ -17,7 +17,7 @@ XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm

View File

@@ -5,11 +5,17 @@ CC = gcc $(GCC_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o
XFLAGS = -DSDL
#
# For SDL version 2
# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS
#
XFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lm -lSDL2
LDELDFLAGS =

View File

@@ -17,7 +17,7 @@ XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm

View File

@@ -5,11 +5,17 @@ CC = gcc -m64 $(GCC_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o
XFLAGS = -DSDL
#
# For SDL version 2
# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS
#
XFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lm -lSDL2
LDELDFLAGS =

View File

@@ -18,7 +18,7 @@ XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm

View File

@@ -17,7 +17,7 @@ XFLAGS = -I/usr/X11R6/include -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11R6/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11R6/lib -lX11 -lc -lm

View File

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

View File

@@ -45,7 +45,7 @@ MACHINEFLAGS = -DOS5 -DUSE_DLPI
DFLAGS = $(XFLAGS) \
$(DEBUGFLAGS) \
$(MACHINEFLAGS) \
-DRELEASE=351
-DRELEASE=$(RELEASE)
LDFLAGS = -lX11 -lc -lm -lsocket -lnsl
LDELDFLAGS = -lX11 -lc -lm -lsocket -lnsl

View File

@@ -37,7 +37,7 @@ DFLAGS = $(XFLAGS) \
$(DEBUGFLAGS) \
-DOS5 \
-DUSE_DLPI \
-DRELEASE=351
-DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm -lsocket -lnsl
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm -lsocket -lnsl

View File

@@ -20,7 +20,7 @@
# Nov 20 2001 JDS: Convert to use BASH, not CSH, for open-source...
#
# usage: makeright [display-option] [other-option]
#
#
# example: makeright single ; make lde for mmaped displayFB
# makeright multi ; make lde for cg3,cg6
# makeright x ; make lde for X-windows
@@ -33,44 +33,31 @@
#
# makeright init requires directory "maiko/init.${architecture}
#
# Note: X11R4 environment link shared libraries.
# lde need X library. If lde links shared libraries,
# Note: X11R4 environment link shared libraries.
# lde need X library. If lde links shared libraries,
# X shared libraries are needed at run time.
#
# Hide X shared libraries from link libraries search path.
LD_LIBRARY_PATH=/usr/local/lib
LD_LIBRARY_PATH=/usr/local/lib
export PATH=".:$PATH"
noshift="false"
if test "$1" = ""
then
display="single"
noshift="true"
elif test "$1" = "nethub"
then
display="single"
noshift="true"
else
display="$1"
noshift="false"
fi
if test "$noshift" = "false"
if test $# -gt 0
then
shift
fi
nethub="false"
if test "$1" = "nethub"
then
nethub="true"
shift
fi
: ${RELEASE=351}
architecture=`machinetype`
osversion=`osversion`
echo "making so far for ${osversion} on ${architecture}."
echo "making release ${RELEASE} for ${osversion} on ${architecture}."
case "$display" in
init) display=single
releasename=init-${osversion}.${architecture}
@@ -85,7 +72,7 @@ case "$display" in
x) releasename=${osversion}.${architecture}-${display}
ldename=ldex
;;
sdl) releasename=${osversion}.${architecture}-${display}
sdl*) releasename=${osversion}.${architecture}-${display}
ldename=ldesdl
;;
wasm) osversion=emscripten
@@ -120,17 +107,12 @@ if [ ! -d ../${releasename} ]; then
mkdir ../${releasename}
fi
echo start making lde for ${releasename}.
echo start making lde for ${releasename}
# then finally do the make, including the right stuff
# With makefile-tail merged, this should only take ONE make command....
cp -p makefile-${releasename} /tmp/makefile-${releasename}-$$
if test "$nethub" = "true"
then
sed -e "/^DFLAGS = /s/$/ -DMAIKO_ENABLE_NETHUB/" -i /tmp/makefile-${releasename}-$$
fi
make RELEASENAME=${releasename} LDENAME=${ldename} \
make RELEASENAME=${releasename} RELEASE=${RELEASE} LDENAME=${ldename} \
OSARCHNAME=${osversion}.${architecture} \
-f makefile-header -f /tmp/makefile-${releasename}-$$ \
-f makefile-header -f makefile-${releasename} \
-f makefile-tail $*

View File

@@ -19,7 +19,6 @@
/**********************************************************************/
#include "lispemul.h" /* for LispPTR, DLword */
#include "version.h" /* for USHORT */
#include "gchtfinddefs.h"
#define ADDREF 0 /* for gclookup routine. */
#define DELREF 1 /* for gclookup routine. */

View File

@@ -1,8 +1,9 @@
#ifndef GCHTFINDDEFS_H
#define GCHTFINDDEFS_H 1
#include "lispemul.h" /* for LispPTR, DLword */
#include "gcdata.h" /* for GCENTRY */
void enter_big_reference_count(LispPTR ptr);
void modify_big_reference_count(LispPTR *entry, DLword casep, LispPTR ptr);
void modify_big_reference_count(GCENTRY *entry, DLword casep, LispPTR ptr);
LispPTR htfind(LispPTR ptr, int casep);
LispPTR rec_htfind(LispPTR ptr, int casep);
#endif

View File

@@ -499,7 +499,8 @@ do { \
#define MAXVERSION 999999999
#define LASTVERSIONARRAY ((unsigned) -1)
#define VERSIONARRAYLENGTH 200
#define VERSIONARRAYCHUNKLENGTH 200
#define VERSIONARRAYMAXLENGTH 2000
#define NoFileP(varray) \
(((varray)->version_no == LASTVERSIONARRAY)? 1 : 0)

View File

@@ -20,6 +20,7 @@
#include "version.h" // for BIGVM
#include "adr68k.h" // for NativeAligned2FromLAddr, NativeAligned4FromLAddr, LAddrFromNative
#include "arith.h" // for N_ARITH_SWITCH, N_GETNUMBER
#include "gchtfinddefs.h"// for htfind, rec_htfind, from gcdata.h macros
#include "gcdata.h" // for ADDREF, DELREF
#include "lispemul.h" // for ERROR_EXIT, LispPTR, DLword, SEGMASK, state
#include "lispmap.h" // for S_POSITIVE, S_CHARACTER, S_NEGATIVE

View File

@@ -237,6 +237,14 @@ typedef unsigned short USHORT;
/* --Start of system-specific flags */
/* */
/****************************************************************/
#ifdef MAIKO_OS_MACOS
/* macOS does not follow the POSIX standard for the names of the stat
fields that allow access to the nanosecond resolution times
*/
#define st_atim st_atimespec
#define st_mtim st_mtimespec
#define st_ctim st_ctimespec
#endif
/****************************************************************/
/* End of system-specific flag settings */

View File

@@ -49,7 +49,6 @@
#include "stack.h"
#include "return.h"
#include "cell.h"
#include "gcdata.h"
#include "bbtsubdefs.h"
#include "car-cdrdefs.h"

View File

@@ -38,6 +38,7 @@
#include "conspagedefs.h" // for next_conspage
#include "emlglob.h"
#include "gcdata.h" // for GCLOOKUP, ADDREF, DELREF
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "lispemul.h" // for ConsCell, LispPTR, DLword, NIL_PTR, state
#include "lspglob.h" // for ListpDTD
#include "lsptypes.h" // for Listp, dtd

View File

@@ -23,6 +23,7 @@
#include "commondefs.h" // for error
#include "conspagedefs.h" // for N_OP_cons, cons, next_conspage
#include "gcdata.h" // for GCLOOKUP, ADDREF, DELREF
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "lispemul.h" // for ConsCell, DLword, LispPTR, NIL_PTR, DLWORD...
#include "lspglob.h"
#include "lsptypes.h" // for dtd, Listp, TYPE_LISTP

411
src/dsk.c
View File

@@ -13,7 +13,7 @@
#include <fcntl.h> // for O_RDWR, O_CREAT, open, O_RDONLY, O_TRUNC
#include <stdio.h> // for NULL, sprintf, size_t, rename, SEEK_SET
#include <stddef.h> // for ptrdiff_t
#include <stdlib.h> // for strtoul
#include <stdlib.h> // for strtoul, qsort
#include <string.h> // for strcpy, strcmp, strlen, strncpy, strchr
#include <sys/stat.h> // for stat, fstat, mkdir, S_ISREG, st_atime, chmod
#include <sys/types.h> // for ino_t, time_t, off_t
@@ -38,12 +38,13 @@
#include <pwd.h> // for getpwuid, passwd
#include <sys/param.h> // for MAXPATHLEN
#include <sys/statvfs.h> // for statvfs
#include <sys/time.h> // for timeval, utimes
#include <sys/time.h> // for timeval, utimes, futimens
#else
#include <direct.h>
#include <dos.h>
#include <time.h>
#include <io.h>
#include <search.h> // for qsort(?)
#define MAXPATHLEN _MAX_PATH
#define MAXNAMLEM _MAX_PATH
#define alarm(x) 0
@@ -57,25 +58,31 @@ typedef struct filename_entry {
unsigned version_no;
} FileName;
typedef struct current_varray {
char path[MAXPATHLEN]; /* pathname of directory */
char file[MAXPATHLEN]; /* file name (down cased name) */
time_t mtime;
} CurrentVArray;
static FileName VersionArray[VERSIONARRAYLENGTH];
static CurrentVArray VArrayInfo;
/*
* VA, a structure representing the file names and version numbers
* that were present in a directory at a particular moment in time.
* The {DSK} device presents a case-insensitive (to Medley) but
* case-preserving (to the host) file system. The VA (Version Array)
*/
static struct {
char name[MAXPATHLEN]; /* lowercase unversioned file name */
struct timespec lastMTime; /* modification time of the directory */
int allocated; /* number of entries in the files array */
int lastUsed; /* index of the last entry in use in files array */
FileName *files; /* array of files */
} VA = {0};
static int locate_file(char *dir, char *name);
static int make_directory(char *dir);
static int maintain_version(char *file, FileName *varray, int forcep);
static int maintain_version(char *file, int forcep);
static int compare_file_versions(const void *a, const void *b);
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);
static int get_old(char *dir, FileName *varray, char *afile, char *vfile);
static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile);
static int get_new(char *dir, FileName *varray, char *afile, char *vfile);
static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile);
static int get_version_array(char *dir, char *file, FileName *varray, CurrentVArray *cache);
static int get_version_array(char *dir, char *file);
#ifdef DOS
static void separate_drive(char *lfname, char *drive)
@@ -367,24 +374,24 @@ LispPTR COM_openfile(LispPTR *args)
if (dskp) {
if (unpack_filename(file, dir, name, ver, 1) == 0) return (NIL);
if (true_name(dir) != -1) return (0);
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
if (get_version_array(dir, name) == 0) return (NIL);
ConcNameAndVersion(name, ver, file);
switch (args[1]) {
case RECOG_OLD:
if (get_old(dir, VersionArray, file, name) == 0) return (NIL);
if (get_old(dir, VA.files, file, name) == 0) return (NIL);
break;
case RECOG_OLDEST:
if (get_oldest(dir, VersionArray, file, name) == 0) return (NIL);
if (get_oldest(dir, VA.files, file, name) == 0) return (NIL);
break;
case RECOG_NEW:
if (get_new(dir, VersionArray, file, name) == 0) return (NIL);
if (get_new(dir, VA.files, file, name) == 0) return (NIL);
break;
case RECOG_OLD_NEW:
if (get_old_new(dir, VersionArray, file, name) == 0) return (NIL);
if (get_old_new(dir, VA.files, file, name) == 0) return (NIL);
break;
default: return (NIL);
@@ -439,7 +446,7 @@ LispPTR COM_openfile(LispPTR *args)
* Actually we are creating a new file. We have to
* maintain a version status.
*/
if (maintain_version(file, (FileName *)NULL, 1) == 0) {
if (maintain_version(file, 1) == 0) {
TIMEOUT(rval = close(fd));
*Lisp_errno = errno;
return (NIL);
@@ -485,7 +492,7 @@ LispPTR COM_openfile(LispPTR *args)
* the entirely newly created file, versionless file, should not
* be linked to any file.
*/
if (maintain_version(file, (FileName *)NULL, 0) == 0) {
if (maintain_version(file, 0) == 0) {
TIMEOUT(close(fd));
*Lisp_errno = errno;
return (NIL);
@@ -670,7 +677,7 @@ LispPTR COM_closefile(LispPTR *args)
*Lisp_errno = errno;
return (NIL);
}
#ifndef DOS
#ifndef DOS /* effectively NEVER, since we're in an ifdef DOS */
TIMEOUT(rval = utimes(file, time));
if (rval != 0) {
*Lisp_errno = errno;
@@ -681,13 +688,9 @@ LispPTR COM_closefile(LispPTR *args)
int fd, fatp, dskp, rval;
time_t cdate;
char lfname[MAXPATHLEN + 5], host[MAXNAMLEN];
char file[MAXPATHLEN], dir[MAXPATHLEN], name[MAXNAMLEN + 1];
char ver[VERSIONLEN];
DIR *dirp;
struct dirent *dp;
char file[MAXPATHLEN];
struct stat sbuf;
struct timeval time[2];
ino_t ino;
struct timespec timesp[2];
ERRSETJMP(NIL);
Lisp_errno = (int *)NativeAligned4FromLAddr(args[3]);
@@ -752,60 +755,24 @@ LispPTR COM_closefile(LispPTR *args)
}
}
if (!unpack_filename(file, dir, name, ver, 1)) return (NIL);
/* introduction of futimens() allows us to set the times on an open
* file descriptor so a lot of directory manipulation to find the
* appropriate name associated with the inode is no longer required
*/
if (dskp) {
/*
* On {DSK}, we have to make sure dir is case sensitively existing
* directory.
*/
if (true_name(dir) != -1) return (NIL);
timesp[0].tv_sec = (long)sbuf.st_atime;
timesp[0].tv_nsec = 0L;
timesp[1].tv_sec = (long)ToUnixTime(cdate);
timesp[1].tv_nsec = 0L;
/*
* There is a very troublesome problem here. The file name Lisp
* recognizes is not always the same as the name which COM_openfile
* used to open the file. Sometimes COM_openfile uses the versionless
* file name to open a file, although Lisp always recognizes with
* *versioned* file name.
* Thus, we compare i-node number of the requested file with ones of all
* of files on the directory. This is time spending implementation.
* More clean up work is needed.
*/
TIMEOUT(rval = fstat(fd, &sbuf));
if (rval != 0) {
*Lisp_errno = errno;
return (NIL);
}
ino = sbuf.st_ino;
errno = 0;
TIMEOUT0(dirp = opendir(dir));
if (dirp == (DIR *)NULL) {
*Lisp_errno = errno;
return (NIL);
}
for (S_TOUT(dp = readdir(dirp)); dp != (struct dirent *)NULL || errno == EINTR;
errno = 0, S_TOUT(dp = readdir(dirp)))
if (dp) {
if (ino == (ino_t)dp->d_ino) sprintf(file, "%s/%s", dir, dp->d_name);
}
TIMEOUT(closedir(dirp));
}
time[0].tv_sec = (long)sbuf.st_atime;
time[0].tv_usec = 0L;
time[1].tv_sec = (long)ToUnixTime(cdate);
time[1].tv_usec = 0L;
TIMEOUT(rval = close(fd));
if (rval == -1) {
TIMEOUT(rval = futimens(fd, timesp));
if (rval != 0) {
*Lisp_errno = errno;
return (NIL);
}
TIMEOUT(rval = utimes(file, time));
if (rval != 0) {
TIMEOUT(rval = close(fd));
if (rval == -1) {
*Lisp_errno = errno;
return (NIL);
}
@@ -918,10 +885,10 @@ LispPTR DSK_getfilename(LispPTR *args)
* Recognizing a file on DSK device needs the version information.
* We gather version information in a version array first.
*/
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
if (get_version_array(dir, name) == 0) return (NIL);
ConcNameAndVersion(name, ver, aname);
if (get_old(dir, VersionArray, aname, vname) == 0) return (NIL);
if (get_old(dir, VA.files, aname, vname) == 0) return (NIL);
if ((rval = true_name(aname)) == 0) return (NIL);
if (rval == -1) {
@@ -958,10 +925,10 @@ LispPTR DSK_getfilename(LispPTR *args)
strcpy(vname, dir);
dirp = 1;
} else {
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
if (get_version_array(dir, name) == 0) return (NIL);
ConcNameAndVersion(name, ver, aname);
if (get_oldest(dir, VersionArray, aname, vname) == 0) return (NIL);
if (get_oldest(dir, VA.files, aname, vname) == 0) return (NIL);
if ((rval = true_name(aname)) == 0) return (NIL);
if (rval == -1) {
@@ -1007,10 +974,10 @@ LispPTR DSK_getfilename(LispPTR *args)
* Here, dir is an existing directory. We have to perform
* "new" recognition with the version information.
*/
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
if (get_version_array(dir, name) == 0) return (NIL);
ConcNameAndVersion(name, ver, aname);
if (get_new(dir, VersionArray, aname, vname) == 0) return (NIL);
if (get_new(dir, VA.files, aname, vname) == 0) return (NIL);
dirp = 0;
}
}
@@ -1033,10 +1000,10 @@ LispPTR DSK_getfilename(LispPTR *args)
strcpy(vname, aname);
dirp = 1;
} else {
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
if (get_version_array(dir, name) == 0) return (NIL);
ConcNameAndVersion(name, ver, aname);
if (get_old_new(dir, VersionArray, aname, vname) == 0) return (NIL);
if (get_old_new(dir, VA.files, aname, vname) == 0) return (NIL);
dirp = 0;
}
}
@@ -1132,7 +1099,6 @@ LispPTR DSK_deletefile(LispPTR *args)
char file[MAXPATHLEN], fbuf[MAXPATHLEN], vless[MAXPATHLEN];
char dir[MAXPATHLEN], ver[VERSIONLEN];
int rval, fatp;
FileName *varray;
#ifdef DOS
char drive[1], rawname[MAXNAMLEN];
int extlen; /* len of extension, for making backup filename */
@@ -1160,10 +1126,9 @@ LispPTR DSK_deletefile(LispPTR *args)
#endif
if (unpack_filename(file, dir, fbuf, ver, 1) == 0) return (NIL);
if (get_version_array(dir, fbuf, VersionArray, &VArrayInfo) == 0) return (NIL);
varray = VersionArray;
if (get_version_array(dir, fbuf) == 0) return (NIL);
if (NoFileP(varray))
if (NoFileP(VA.files))
return (NIL); /*
* If the specified file is deleted from
* outside of Lisp during the last time
@@ -1178,9 +1143,9 @@ LispPTR DSK_deletefile(LispPTR *args)
*/
ConcNameAndVersion(fbuf, ver, file);
if (get_oldest(dir, varray, file, fbuf) == 0) return (NIL);
if (get_oldest(dir, VA.files, file, fbuf) == 0) return (NIL);
if (get_versionless(varray, vless, dir) == 0) {
if (get_versionless(VA.files, vless, dir) == 0) {
/*
* There is no versionless file. All we have to do is to simply
* try to unlink the specified file.
@@ -1199,7 +1164,7 @@ LispPTR DSK_deletefile(LispPTR *args)
* file is linked will destroy the consistency of the version status.
*/
if (check_vless_link(vless, varray, fbuf, &rval) == 0) return (NIL);
if (check_vless_link(vless, VA.files, fbuf, &rval) == 0) return (NIL);
if (strcmp(file, vless) == 0 || strcmp(file, fbuf) == 0) {
if (*fbuf != '\0') {
@@ -1220,12 +1185,12 @@ LispPTR DSK_deletefile(LispPTR *args)
/*
* Finally, we have to maintain the version status.
*/
if (maintain_version(vless, (FileName *)NULL, 0) == 0) return (NIL);
if (maintain_version(vless, 0) == 0) return (NIL);
return (ATOM_T);
} else {
/*
* Although the versionfile is specified, it is not linked
* to any file in varray. We should not maintain the version
* to any file in VA.files. We should not maintain the version
* status after deleting the versionless file, because
* we cannot say whether the versionless file is actually under
* control of the Medley DSK file system or not.
@@ -1280,7 +1245,6 @@ LispPTR DSK_renamefile(LispPTR *args)
char dir[MAXPATHLEN], ver[VERSIONLEN];
int rval, fatp;
int need_maintain_flg;
FileName *varray;
#ifdef DOS
char drive1[1], drive2[1];
int extlen1, extlen2; /* len of extension */
@@ -1331,10 +1295,9 @@ LispPTR DSK_renamefile(LispPTR *args)
* We maintain the destination to handle the link damaged case correctly.
*/
ConcDirAndName(dir, fbuf, dst);
if (maintain_version(dst, (FileName *)NULL, 0) == 0) return (NIL);
if (maintain_version(dst, 0) == 0) return (NIL);
if (get_version_array(dir, fbuf, VersionArray, &VArrayInfo) == 0) return (NIL);
varray = VersionArray;
if (get_version_array(dir, fbuf) == 0) return (NIL);
/*
* Although the file should have been recognized with "new" mode in Lisp
@@ -1343,7 +1306,7 @@ LispPTR DSK_renamefile(LispPTR *args)
*/
ConcNameAndVersion(fbuf, ver, dst);
if (get_new(dir, varray, dst, fbuf) == 0) return (NIL);
if (get_new(dir, VA.files, dst, fbuf) == 0) return (NIL);
/*
* At this point, there are three cases for the destination. If there is
@@ -1353,9 +1316,9 @@ LispPTR DSK_renamefile(LispPTR *args)
* "real" destination file is the file to which the versionless file is linked,
* we have to unlink the versionless file.
*/
if (!NoFileP(varray)) {
if (OnlyVersionlessP(varray)) {
get_versionless(varray, vless, dir);
if (!NoFileP(VA.files)) {
if (OnlyVersionlessP(VA.files)) {
get_versionless(VA.files, vless, dir);
if (strcmp(dst, vless) != 0) {
ConcNameAndVersion(vless, "1", fbuf);
TIMEOUT(rval = rename(vless, fbuf));
@@ -1369,8 +1332,8 @@ LispPTR DSK_renamefile(LispPTR *args)
* We are sure that the versionless file is linked to one of
* the higher versioned file here.
*/
get_versionless(varray, vless, dir);
if (check_vless_link(vless, varray, fbuf, &rval) == 0) { return (NIL); }
get_versionless(VA.files, vless, dir);
if (check_vless_link(vless, VA.files, fbuf, &rval) == 0) { return (NIL); }
if (strcmp(dst, fbuf) == 0) {
TIMEOUT(rval = unlink(vless));
if (rval == -1) {
@@ -1382,9 +1345,9 @@ LispPTR DSK_renamefile(LispPTR *args)
}
if (unpack_filename(src, dir, fbuf, ver, 1) == 0) return (NIL);
if (get_version_array(dir, fbuf, varray, &VArrayInfo) == 0) return (NIL);
if (get_version_array(dir, fbuf) == 0) return (NIL);
if (NoFileP(varray))
if (NoFileP(VA.files))
return (NIL); /*
* If the specified file is deleted from
* outside of Lisp during the last time
@@ -1398,9 +1361,9 @@ LispPTR DSK_renamefile(LispPTR *args)
* of it.
*/
ConcNameAndVersion(fbuf, ver, src);
if (get_old(dir, varray, src, fbuf) == 0) return (NIL);
if (get_old(dir, VA.files, src, fbuf) == 0) return (NIL);
if (get_versionless(varray, vless, dir) == 0) {
if (get_versionless(VA.files, vless, dir) == 0) {
/*
* There is no versionless file. All we have to do is to simply
* try to rename the specified file.
@@ -1413,7 +1376,7 @@ LispPTR DSK_renamefile(LispPTR *args)
* versionless file is linked will destroy the consistency of the
* version status.
*/
if (check_vless_link(vless, varray, fbuf, &rval) == 0) return (NIL);
if (check_vless_link(vless, VA.files, fbuf, &rval) == 0) return (NIL);
if (strcmp(src, vless) == 0 && *fbuf != '\0') {
/*
@@ -1458,9 +1421,9 @@ LispPTR DSK_renamefile(LispPTR *args)
* is on.
*/
if (maintain_version(dst, (FileName *)NULL, 0) == 0) return (NIL);
if (maintain_version(dst, 0) == 0) return (NIL);
if (need_maintain_flg) {
if (maintain_version(src, (FileName *)NULL, 0) == 0) return (NIL);
if (maintain_version(src, 0) == 0) return (NIL);
}
return (ATOM_T);
@@ -1658,9 +1621,9 @@ LispPTR COM_getfileinfo(LispPTR *args)
*/
strcpy(file, dir);
} else {
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
if (get_version_array(dir, name) == 0) return (NIL);
ConcNameAndVersion(name, ver, file);
if (get_old(dir, VersionArray, file, name) == 0) return (NIL);
if (get_old(dir, VA.files, file, name) == 0) return (NIL);
}
}
@@ -1847,9 +1810,9 @@ LispPTR COM_setfileinfo(LispPTR *args)
if (dskp) {
if (unpack_filename(file, dir, name, ver, 1) == 0) return (NIL);
if (true_name(dir) != -1) return (0);
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
if (get_version_array(dir, name) == 0) return (NIL);
ConcNameAndVersion(name, ver, file);
if (get_old(dir, VersionArray, file, name) == 0) return (NIL);
if (get_old(dir, VA.files, file, name) == 0) return (NIL);
}
switch (args[1]) {
@@ -2803,34 +2766,26 @@ static int make_directory(char *dir)
* and highest version number respectively.
*
* Description:
* Finds the highest versioned entry in varray.
*
* Find the highest versioned entry in varray. Varray has to include at least
* one versioned file, that is varray has to satisfy (!NoFileP(varray) &&
* !OnlyVersionlessP(varray)).
*
* Preconditions:
* Varray must include at least one versioned file, satisfying the condition:
* (!NoFileP(varray) && !OnlyVersionlessP(varray))
* Varray must be sorted from highest to lowest version
*/
#ifdef DOS
#define FindHighestVersion(varray, mentry, max_no) \
do { \
FileName *centry; \
for (centry = varray, max_no = -1; centry->version_no != LASTVERSIONARRAY; centry++) { \
if (centry->version_no > max_no) { \
max_no = centry->version_no; \
mentry = centry; \
} \
} \
} while (0)
do { \
(max_no) = varray[0].version_no; \
(mentry) = &varray[0]; \
} while (0)
#else
#define FindHighestVersion(varray, mentry, max_no) \
do { \
FileName *centry; \
for (centry = (varray), (max_no) = 0; centry->version_no != LASTVERSIONARRAY; centry++) { \
if (centry->version_no > (max_no)) { \
(max_no) = centry->version_no; \
(mentry) = centry; \
} \
} \
} while (0)
do { \
(max_no) = varray[0].version_no; \
(mentry) = &varray[0]; \
} while (0)
#endif /* DOS */
/*
@@ -2917,6 +2872,19 @@ static int make_directory(char *dir)
} \
} while (0)
/*
* comparison function for qsort to sort file versions in descending order
*/
static int compare_file_versions(const void *a, const void *b)
{
unsigned a_ver = ((FileName *)a)->version_no;
unsigned b_ver = ((FileName *)b)->version_no;
if (a_ver > b_ver) return (-1);
if (a_ver < b_ver) return (1);
return (0);
}
/************************************************************************/
/* */
/* g e t _ v e r s i o n _ a r r a y */
@@ -2928,7 +2896,6 @@ static int make_directory(char *dir)
/* guarantee that the directory exists. */
/* file File name, optionally including a (unix) version */
/* varray Place to put the version array entries. */
/* cache Place to hold info about the new version array */
/* */
/* Read thru DIR and gather all files that match FILE into */
/* VARRAY. DIR's case must match existing directory's, but */
@@ -2938,15 +2905,15 @@ static int make_directory(char *dir)
/* */
/************************************************************************/
static int get_version_array(char *dir, char *file, FileName *varray, CurrentVArray *cache)
static int get_version_array(char *dir, char *file)
{
#ifdef DOS
/* DOS version-array builder */
char lcased_file[MAXPATHLEN];
char old_file[MAXPATHLEN];
char name[MAXNAMLEN];
char ver[VERSIONLEN];
FileName *svarray;
int varray_index = 0;
struct find_t dirp;
struct direct *dp;
int rval, drive = 0, isslash = 0;
@@ -2987,14 +2954,12 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
make_old_version(old_file, lcased_file);
svarray = varray;
TIMEOUT(res = _dos_findfirst(old_file, _A_NORMAL | _A_SUBDIR, &dirp));
if (res == 0) {
strcpy(name, dirp.name);
strcpy(svarray->name, name);
svarray->version_no = 0;
svarray++;
strcpy(VA.files[varray_index].name, name);
VA.files[varray_index].version_no = 0;
varray_index++;
}
/*******************************/
@@ -3013,34 +2978,48 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
separate_version(name, ver, 1);
DOWNCASE(name);
strcpy(svarray->name, dirp.name);
strcpy(VA.files[varray_index].name, dirp.name);
if (*ver == '\0') {
/* Versionless file */
svarray->version_no = 1;
VA.files[varray_index].version_no = 1;
} else {
/*
* separator_version guarantees ver is a numeric
* string.
* separate_version guarantees ver is a numeric string.
*/
svarray->version_no = strtoul(ver, (char **)NULL, 10);
VA.files[varray_index].version_no = strtoul(ver, (char **)NULL, 10);
}
varray_index++;
if (varray_index >= VERSIONARRAYMAXLENGTH) {
*Lisp_errno = EIO;
return (0);
} else if (varray_index >= VA.allocated) {
VA.allocated += VERSIONARRAYCHUNKLENGTH;
VA.files = realloc(VA.files,
sizeof(*VA.files) * VA.allocated);
}
svarray++;
}
/*
* The last entry of varray is indicated by setting LASTVERSIONARRAY into
* The last entry of VA.files is indicated by setting LASTVERSIONARRAY into
* version_no field.
*/
svarray->version_no = LASTVERSIONARRAY;
VA.files[varray_index].version_no = LASTVERSIONARRAY;
VA.lastUsed = varray_index;
/*
* If more than one files have been stored in varray, we store the name
* If any files have been stored in VA.files, we store the name
* without version in the last marker entry.
*
* NOTE: sorting "varray_index" entries will leave the LASTVERSIONARRAY item
* untouched by the sort, which is intentional.
*/
if (!NoFileP(varray)) {
strcpy(name, varray->name);
if (!NoFileP(VA.files)) {
strcpy(name, VA.files[0].name);
separate_version(name, ver, 1);
strcpy(svarray->name, name);
strcpy(VA.files[varray_index].name, name);
if (varray_index > 1) {
qsort(VA.files, varray_index, sizeof(*VA.files), compare_file_versions);
}
}
return (1);
@@ -3050,7 +3029,7 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
char lcased_file[MAXNAMLEN];
char name[MAXNAMLEN];
char ver[VERSIONLEN];
FileName *svarray;
int varray_index = 0;
DIR *dirp;
struct dirent *dp;
int rval;
@@ -3064,29 +3043,26 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
separate_version(lcased_file, ver, 1);
DOWNCASE(lcased_file);
/* Cache for VA.files reinstated using nanosecond timestamps which many
* systems provide for directory modification times.
* POSIX defines the struct stat field containing the nanosecond resolution
* modification time as "st_mtim". See "version.h" for accomodations
* for systems that call it something else (e.g., macOS st_mtimespec).
*/
TIMEOUT(rval = stat(dir, &sbuf));
if (rval == -1) {
*Lisp_errno = errno;
return(0);
}
/*
* Cache mechanism was not used because of a bug in Sun OS.
* Sometimes just after unlinking a file on a directory, the st_mtime
* of the directory does not change. This will make Maiko believe
* cached version array is still valid, although it is already invalid.
* sync(2) has no effect on such case.
*/
/*
* If the cached version array is still valid, we can return immediately.
*/
#if 0
/* there is a (different?) problem (#1661) with the caching - disable until it's solved */
if ((sbuf.st_mtime == cache->mtime) && strcmp(dir, cache->path) == 0
&& strcmp(lcased_file, cache->file) == 0) return(1);
#endif
if (0 == strcmp(lcased_file, VA.name) &&
sbuf.st_mtim.tv_sec == VA.lastMTime.tv_sec &&
sbuf.st_mtim.tv_nsec == VA.lastMTime.tv_nsec) {
return (1);
} else {
VA.lastMTime = sbuf.st_mtim;
strcpy(VA.name, lcased_file);
}
errno = 0;
TIMEOUT0(dirp = opendir(dir));
@@ -3095,7 +3071,13 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
return (0);
}
for (S_TOUT(dp = readdir(dirp)), svarray = varray; dp != NULL || errno == EINTR;
/* There is no initialization call for the local file system, so we
* must ensure there is initial storage allocated for the version array */
if (VA.files == NULL) {
VA.files = calloc(VERSIONARRAYCHUNKLENGTH, sizeof(*VA.files));
VA.allocated = VERSIONARRAYCHUNKLENGTH;
}
for (S_TOUT(dp = readdir(dirp)); dp != NULL || errno == EINTR;
errno = 0, S_TOUT(dp = readdir(dirp)))
if (dp) {
strcpy(name, dp->d_name);
@@ -3105,42 +3087,50 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
/*
* This file can be regarded as a same file in Lisp sense.
*/
strcpy(svarray->name, dp->d_name);
strcpy(VA.files[varray_index].name, dp->d_name);
if (*ver == '\0') {
/* Versionless file */
svarray->version_no = 0;
VA.files[varray_index].version_no = 0;
} else {
/*
* separator_version guarantees ver is a numeric
* string.
* separate_version guarantees ver is a numeric string.
*/
svarray->version_no = strtoul(ver, (char **)NULL, 10);
VA.files[varray_index].version_no = strtoul(ver, (char **)NULL, 10);
}
varray_index++;
if (varray_index >= VERSIONARRAYMAXLENGTH) {
*Lisp_errno = EIO;
return (0);
} else if (varray_index >= VA.allocated) {
VA.allocated += VERSIONARRAYCHUNKLENGTH;
VA.files = realloc(VA.files,
sizeof(*VA.files) * VA.allocated);
}
svarray++;
}
}
/*
* The last entry of varray is indicated by setting LASTVERSIONARRAY into
* version_no field.
*/
svarray->version_no = LASTVERSIONARRAY;
VA.files[varray_index].version_no = LASTVERSIONARRAY;
VA.lastUsed = varray_index;
/*
* If more than one files have been stored in varray, we store the name
* If any files have been stored in VA.files, we store the name
* without version in the last marker entry.
*
* NOTE: sorting "varray_index" entries will leave the LASTVERSIONARRAY item
* untouched by the sort, which is intentional.
*/
if (!NoFileP(varray)) {
strcpy(name, varray->name);
if (!NoFileP(VA.files)) {
strcpy(name, VA.files[0].name);
separate_version(name, ver, 1);
strcpy(svarray->name, name);
strcpy(VA.files[varray_index].name, name);
if (varray_index > 1) {
qsort(VA.files, varray_index, sizeof(*VA.files), compare_file_versions);
}
}
/*
* Update cache information.
*/
strcpy(cache->path, dir);
strcpy(cache->file, lcased_file);
cache->mtime = sbuf.st_mtime;
TIMEOUT(closedir(dirp));
return (1);
#endif /* DOS */
@@ -3172,7 +3162,7 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
* to maintain the directory on which a file is being created.
*/
static int maintain_version(char *file, FileName *varray, int forcep)
static int maintain_version(char *file, int forcep)
{
char dir[MAXPATHLEN], fname[MAXNAMLEN], ver[VERSIONLEN];
char old_file[MAXPATHLEN], vless[MAXPATHLEN];
@@ -3180,17 +3170,14 @@ static int maintain_version(char *file, FileName *varray, int forcep)
int rval, max_no;
FileName *entry;
if (varray == (FileName *)NULL) {
if (unpack_filename(file, dir, fname, ver, 1) == 0) return (0);
/*
* We have to make sure that dir is the existing directory.
*/
if (true_name(dir) != -1) return (0);
if (get_version_array(dir, fname, VersionArray, &VArrayInfo) == 0) return (0);
varray = VersionArray;
}
if (unpack_filename(file, dir, fname, ver, 1) == 0) return (0);
/*
* We have to make sure that dir is the existing directory.
*/
if (true_name(dir) != -1) return (0);
if (get_version_array(dir, fname) == 0) return (0);
if (NoFileP(varray)) {
if (NoFileP(VA.files)) {
/*
* We don't need to care about such case that there is no such file
* or an only versionless file exists.
@@ -3198,14 +3185,14 @@ static int maintain_version(char *file, FileName *varray, int forcep)
return (1);
}
if (OnlyVersionlessP(varray)) {
if (OnlyVersionlessP(VA.files)) {
if (forcep) {
/*
* If forcep, we link the versionless file to the version
* 1 file.
*/
#ifndef DOS
get_versionless(varray, vless, dir);
get_versionless(VA.files, vless, dir);
ConcNameAndVersion(vless, "1", fname);
TIMEOUT(rval = link(vless, fname));
if (rval == -1) {
@@ -3222,13 +3209,13 @@ static int maintain_version(char *file, FileName *varray, int forcep)
* exists. Thus, FindHighestVersion works fine from now on.
*/
if (get_versionless(varray, vless, dir) == 0) {
if (get_versionless(VA.files, vless, dir) == 0) {
/*
* There is not a versionless file, but at least one versioned file.
* Thus, the thing we have to do is to link a versionless file
* to the existing highest versioned file.
*/
FindHighestVersion(varray, entry, max_no);
FindHighestVersion(VA.files, entry, max_no);
ConcDirAndName(dir, entry->name, old_file);
/*
* The versionless file should have the same case name as the old
@@ -3247,15 +3234,15 @@ static int maintain_version(char *file, FileName *varray, int forcep)
return (1);
}
if (check_vless_link(vless, varray, old_file, &highest_p) == 0) return (0);
if (check_vless_link(vless, VA.files, old_file, &highest_p) == 0) return (0);
if (*old_file == '\0') {
/*
* The versionless file is not linked to any file in varray.
* The versionless file is not linked to any file in VA.files.
* Thus, we have to link the versionless file to the file which
* is versioned one higher than the existing highest version.
*/
FindHighestVersion(varray, entry, max_no);
FindHighestVersion(VA.files, entry, max_no);
sprintf(ver, "%u", max_no + 1);
/*
* The old file should have the same case name as the versionless
@@ -3280,7 +3267,7 @@ static int maintain_version(char *file, FileName *varray, int forcep)
return (1);
} else {
/*
* Although the versionless file is linked to a file in varray,
* Although the versionless file is linked to a file in VA.files,
* the file is not the highest versioned file. We have to unlink
* the wrongly linked versionless file, and link the highest versioned
* file to a versionless file.
@@ -3290,7 +3277,7 @@ static int maintain_version(char *file, FileName *varray, int forcep)
*Lisp_errno = errno;
return (0);
}
FindHighestVersion(varray, entry, max_no);
FindHighestVersion(VA.files, entry, max_no);
ConcDirAndName(dir, entry->name, old_file);
/*
* The versionless file should have the same case name as the old

View File

@@ -15,6 +15,7 @@
#include "emlglob.h"
#include "fvardefs.h" // for N_OP_fvar_, N_OP_fvarn, N_OP_stkscan, nati...
#include "gcdata.h" // for GCLOOKUP, ADDREF, DELREF
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "lispmap.h" // for ATOMS_HI, STK_HI
#include "lspglob.h" // for Stackspace
#include "lsptypes.h" // for DLword, LispPTR, GETBASEWORD, state, FRAME...

View File

@@ -12,6 +12,7 @@
#include <stdio.h> // for printf
#include "emlglob.h"
#include "gcdata.h" // for GCLOOKUPV
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "gcdefs.h" // for OP_gcref
#include "lspglob.h"
#include "lsptypes.h" // for state, ByteCode, PC, TopOfStack, Get_code_...

View File

@@ -35,6 +35,7 @@
#include "commondefs.h" // for error
#include "gccodedefs.h" // for code_block_size, reclaimcodeblock
#include "gcdata.h" // for REC_GCLOOKUP, DELREF, ADDREF
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "lspglob.h" // for Deleted_Implicit_Hash_Slot_word, UFNTable
#include "lsptypes.h" // for LispPTR, NIL, UFN, Get_code_BYTE, POINTERMASK
#include "stack.h" // for fnhead

View File

@@ -49,6 +49,7 @@
#include "commondefs.h" // for error
#include "gccodedefs.h" // for reclaimcodeblock
#include "gcdata.h" // for DELREF, REC_GCLOOKUP
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "gcfinaldefs.h" // for arrayblockmerger, checkarrayblock, deleteblock
#include "lispemul.h" // for LispPTR, NIL, T, POINTERMASK, DLword, ATOM_T
#include "llstkdefs.h" // for decusecount68k

View File

@@ -253,7 +253,7 @@ void enter_big_reference_count(LispPTR ptr) {
/* */
/************************************************************************/
void modify_big_reference_count(LispPTR *entry, DLword casep, LispPTR ptr) {
void modify_big_reference_count(GCENTRY *entry, DLword casep, LispPTR ptr) {
struct gc_ovfl *oventry;
LispPTR tmp;

View File

@@ -39,6 +39,7 @@
#include "commondefs.h" // for error
#include "emlglob.h"
#include "gcdata.h" // for GCENTRY, REC_GCLOOKUP, STKREF, hashentry
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "gcmain3defs.h" // for gcmapscan, gcmapunscan, gcscanstack
#include "gcrcelldefs.h" // for gcreccell
#include "gcscandefs.h" // for gcscan1, gcscan2

View File

@@ -31,6 +31,7 @@
#include "arith.h" // for GetSmalldata
#include "gcdata.h" // for htoverflow, REC_GCLOOKUP
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "gcoflowdefs.h" // for gc_handleoverflow, gcmaptable
#include "gcrdefs.h" // for doreclaim
#include "lispemul.h" // for NIL, DLword, LispPTR

View File

@@ -71,6 +71,7 @@
#include "commondefs.h" // for error
#include "gccodedefs.h" // for reclaimcodeblock
#include "gcdata.h" // for DELREF, REC_GCLOOKUPV, ADDREF, REC_GCLOOKUP
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "gcfinaldefs.h" // for reclaimarrayblock, reclaimstackp, releasing...
#include "gcrcelldefs.h" // for freelistcell, gcreccell
#include "lispemul.h" // for LispPTR, ConsCell, NIL, POINTERMASK, DLword

View File

@@ -15,6 +15,7 @@
#include "dbprint.h" // for DEBUGGER
#include "emlglob.h"
#include "gcdata.h" // for FRPLPTR
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "gvar2defs.h" // for N_OP_gvar_, N_OP_rplptr
#include "lispemul.h" // for LispPTR, DLword, NEWATOM_VALUE_OFFSET, NEWAT...
#include "lspglob.h" // for AtomSpace

View File

@@ -137,7 +137,7 @@ void clear_display(void) {
#else /* COLOR */
void clear_display(void) {
short *word;
DLword *word;
int w, h;
if (MonoOrColor == MONO_SCREEN) {
#ifndef DISPLAYBUFFER
@@ -150,7 +150,7 @@ void clear_display(void) {
0);
#endif /* DISPLAYBUFFER */
} else { /* MonoOrColo is COLOR_SCREEN */
word = (short *)ColorDisplayRegion68k;
word = ColorDisplayRegion68k;
for (h = displayheight; (h--);) {
for (w = DisplayRasterWidth * 8; (w--);) { *word++ = 0; }
} /* end for(h) */

View File

@@ -34,6 +34,7 @@
#include "etherdefs.h" // for init_ifpage_ether
#include "gcarraydefs.h" // for get_package_atom
#include "gcdata.h" // for ADDREF, GCLOOKUP
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "ifpage.h" // for IFPAGE, MACHINETYPE_MAIKO
#include "initsoutdefs.h" // for build_lisp_map, fixp_value, init_for_bitblt
#include "iopage.h" // for IOPAGE

View File

@@ -15,7 +15,10 @@
#include <stdio.h> // for perror, fprintf, printf, stderr, sprintf
#include <stdlib.h> // for exit, free, malloc
#include <string.h> // for memset
#include <sys/mman.h> // for mmap
#include <sys/mman.h> // for mmap, MAP_FAILED
#ifndef MAP_FAILED
#define MAP_FAILED ((void *)-1)
#endif
#include <sys/stat.h> // for stat, fstat
#include <sys/types.h> // for off_t
#include <unistd.h> // for lseek, read, close, getpagesize

View File

@@ -25,6 +25,7 @@
#include "commondefs.h" // for error
#include "gcarraydefs.h" // for get_package_atom
#include "gcdata.h" // for FRPLPTR
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "lispemul.h" // for LispPTR, state, CurrentStackPTR, NIL_PTR, NIL
#include "lispmap.h" // for S_POSITIVE
#include "loopsopsdefs.h" // for lcfuncall, LCFetchMethod, LCFetchMethodOrHelp

View File

@@ -229,7 +229,11 @@ int display_max = 65536 * 16 * 2;
/* diagnostic flag for sysout dumping */
extern unsigned maxpages;
char sysout_name[MAXPATHLEN]; /* Set by read_Xoption, in the X version. */
char sysout_name_cl[MAXPATHLEN] = "\0"; /* sysout name as per -sysout command line arg ; Set by read_Xoption, in the X version. */
char sysout_name_xrm[MAXPATHLEN] = "\0"; /* sysout name as per X resource manager, if any */
char sysout_name_first_arg[MAXPATHLEN] = "\0"; /* sysout name as per 1st command line arg, if any */
char sysout_name[MAXPATHLEN] = "\0"; /* "final" sysout name chosen from above */
unsigned sysout_size = 0; /* ditto */
int flushing = FALSE; /* see dbprint.h if set, all debug/trace printing will call fflush(stdout) after each printf */
@@ -284,6 +288,8 @@ const char *helpstring =
-info Print general info about the system\n\
-help Print this message\n\
-pixelscale <n> The amount of pixels to show for one Medley screen pixel.\n\
-fg/-foreground <color> Screen foreground color, default Black. X color name or #RRBBGG hex\n\
-bg/-background <color> Screen background color, default White. X color name or #RRBBGG hex\n\
-sc[reen] <w>x<h>] The Medley screen geometry\n\
-t <title> The window title\n\
-title <title> The window title\n";
@@ -312,6 +318,12 @@ const char *nethubHelpstring = "";
extern int insnsCountdownForTimerAsyncEmulation;
#endif
#if defined(XWINDOW) || defined(SDL)
char foregroundColorName[64] = {0};
extern char foregroundColorName[64];
char backgroundColorName[64] = {0};
extern char backgroundColorName[64];
#endif
/************************************************************************/
/* */
/* M A I N E N T R Y P O I N T */
@@ -338,6 +350,25 @@ int main(int argc, char *argv[])
}
#endif /* MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE */
#ifdef PROFILE
moncontrol(0); /* initially stop sampling */
#endif /* PROFILE */
//
//
// Process Command Line Arguments
//
//
// First check if the first argument is a sysout name
// and save it away if it is in case the X windows
// arg processing changes argc/argv
if (argc > 1 && argv[1][0] != '-') {
strncpy(sysout_name_first_arg, argv[1], MAXPATHLEN);
i++;
}
#ifdef XWINDOW
read_Xoption(&argc, argv);
#endif /* XWINDOW */
@@ -345,17 +376,6 @@ int main(int argc, char *argv[])
save_argc = argc;
save_argv = argv;
#ifdef PROFILE
moncontrol(0); /* initially stop sampling */
#endif /* PROFILE */
/* Sysout is found as follows:
If the first argument doesn't begin with '-', assume it's the sysout
Look at the environment variable LDESRCESYSOUT if that fails
Look for ~/lisp.virtualmem if that fails
Barf and print the command line if tha fails
*/
i = 1;
if (argv[i] && ((strcmp(argv[i], "-info") == 0) || (strcmp(argv[i], "-INFO") == 0))) {
@@ -368,35 +388,23 @@ int main(int argc, char *argv[])
exit(0);
}
if (argc > 1 && argv[1][0] != '-') {
strncpy(sysout_name, argv[1], MAXPATHLEN);
i++;
} else if ((envname = getenv("LDESRCESYSOUT")) != NULL) {
strncpy(sysout_name, envname, MAXPATHLEN);
} else if ((envname = getenv("LDESOURCESYSOUT")) != NULL)
strncpy(sysout_name, envname, MAXPATHLEN);
else {
#ifdef DOS
strncpy(sysout_name, "lisp.vm", MAXPATHLEN);
#else
if ((envname = getenv("HOME")) != NULL) {
strncpy(sysout_name, envname, MAXPATHLEN);
strncat(sysout_name, "/lisp.virtualmem", MAXPATHLEN - 17);
}
#endif /* DOS */
}
if (access(sysout_name, R_OK)) {
perror("Couldn't find a sysout to run");
(void)fprintf(stderr, "%s%s", helpstring, nethubHelpstring);
exit(1);
}
/* OK, sysout name is now in sysout_name, and i is moved past a supplied name */
for (; i < argc; i += 1) { /* step by 1 in case of typo */
// NOTE: in the case of X Windows, some of the args being checked for in this loop
// have already been processed (and removed from argv) by the call to read_Xoption()
// above. (See readXoption() in xrdopt.c)
/* Check for -sysout arg */
if (!strcmp(argv[i], "-sysout")) {
if (argc > ++i) {
strncpy(sysout_name_cl, argv[i], MAXPATHLEN);
}
}
/* -t and -m are undocumented and somewhat dangerous... */
if (!strcmp(argv[i], "-t")) { /**** timer interval ****/
else if (!strcmp(argv[i], "-t")) { /**** timer interval ****/
if (argc > ++i) {
errno = 0;
tmpint = strtol(argv[i], (char **)NULL, 10);
@@ -488,8 +496,21 @@ int main(int argc, char *argv[])
(void)fprintf(stderr, "Missing argument after -title\n");
exit(1);
}
} else if (strcmp(argv[i], "-fg") == 0 || strcmp(argv[i], "-foreground") == 0) {
if (argc > ++i) {
strncpy(foregroundColorName, argv[i], sizeof(foregroundColorName) - 1);
} else {
(void)fprintf(stderr, "Missing argument after -fg/-foreground\n");
exit(1);
}
} else if (strcmp(argv[i], "-bg") == 0 || strcmp(argv[i], "-background") == 0) {
if (argc > ++i) {
strncpy(backgroundColorName, argv[i], sizeof(backgroundColorName) - 1);
} else {
(void)fprintf(stderr, "Missing argument after -bg/-background\n");
exit(1);
}
}
#endif /* SDL */
/* Can only do this under SUNOs, for now */
else if (!strcmp(argv[i], "-E")) { /**** ethernet info ****/
@@ -610,6 +631,47 @@ int main(int argc, char *argv[])
}
}
//
// OK, now we can process the sysout_name
// Order of priority:
// 1. Value of -sysout command line arg
// 2. Value of the first command line arg
// 3. Value of LDESRCESYSOUT env variable
// 4. Value of LDESOURCESYSOUT env variable
// 5. Value as determined by X resource manager, if any
// 6. Value of $HOME/lisp.virtualmem (or lisp.vm for DOS)
//
if (sysout_name_cl[0] != '\0') { strncpy(sysout_name, sysout_name_cl, MAXPATHLEN); }
else if (sysout_name_first_arg[0] != '\0') { strncpy(sysout_name, sysout_name_first_arg, MAXPATHLEN); }
else if ((envname = getenv("LDESRCESYSOUT")) != NULL) { strncpy(sysout_name, envname, MAXPATHLEN); }
else if ((envname = getenv("LDESOURCESYSOUT")) != NULL) { strncpy(sysout_name, envname, MAXPATHLEN); }
else if (sysout_name_xrm[0] != '\0') { strncpy(sysout_name, sysout_name_xrm, MAXPATHLEN); }
else {
#ifdef DOS
strncpy(sysout_name, "lisp.vm", MAXPATHLEN);
#else
if ((envname = getenv("HOME")) != NULL) {
strncpy(sysout_name, envname, MAXPATHLEN);
strncat(sysout_name, "/lisp.virtualmem", MAXPATHLEN - 17);
}
#endif /* DOS */
}
if ((sysout_name[0] == '\0') || (access(sysout_name, R_OK))) {
perror("Couldn't find a sysout to run");
fprintf(stderr, "Looking for: %s\n", sysout_name);
(void)fprintf(stderr, "%s%s", helpstring, nethubHelpstring);
exit(1);
}
/* OK, sysout name is now in sysout_name */
//
//
// End of command line arg processing
//
//
/* Sanity checks. */
#ifdef DOS
probemouse(); /* See if the mouse is connected. */

View File

@@ -32,6 +32,7 @@
#include "commondefs.h" // for error
#include "emlglob.h"
#include "gcdata.h" // for DELREF, GCLOOKUP
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "lispemul.h" // for LispPTR, DLword, NIL, POINTERMASK, state
#include "lispmap.h" // for S_POSITIVE
#include "lspglob.h"

View File

@@ -35,6 +35,7 @@
#ifdef BIGVM
#define SWA_FNHEAD
#else
#include "byteswapdefs.h" // for swapx
#define SWA_FNHEAD swapx
#endif /* BIGVM */

View File

@@ -29,6 +29,11 @@
#include "lspglob.h"
#include "lsptypes.h" // for Listp
#include "rplconsdefs.h" // for N_OP_rplcons
#ifndef NEWCDRCODING
#include "gcdata.h"
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "address.h"
#endif
/***************************************************/

1060
src/sdl.c

File diff suppressed because it is too large Load Diff

View File

@@ -23,6 +23,7 @@
#include "commondefs.h" // for error
#include "conspagedefs.h" // for cons
#include "gcdata.h" // for ADDREF, GCLOOKUP
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "gcfinaldefs.h" // for makefreearrayblock, mergebackward
#include "ifpage.h" // for IFPAGE, MACHINETYPE_MAIKO
#include "lispemul.h" // for LispPTR, NIL, GETFPTOVP, INTSTAT, ATOM_T

View File

@@ -49,34 +49,33 @@
#define vfork fork
#endif
#include "lispemul.h"
#include "lispmap.h"
#include "adr68k.h"
#include "lsptypes.h"
#include "lspglob.h"
#include "emlglob.h"
#include "cell.h"
#include "ifpage.h"
#include "debug.h"
#include "devconf.h"
#include "stack.h"
#include "version.h" // for BIGVM
#include "display.h"
#include "bitblt.h"
#include "adr68k.h" // for NativeAligned4FromStackOffset, LAddr...
#include "cell.h" // for DefCell, GetDEFCELL68k, GetVALCELL68k
#include "dbgtooldefs.h" // for bt1, bt, sf
#include "devif.h" // for DspInterfaceRec, DevRec, DspInterface
#include "display.h" // for DISPLAYBUFFER
#include "gcarraydefs.h" // for get_package_atom
#include "gcfinaldefs.h" // for printarrayblock
#include "ifpage.h" // for IFPAGE
#include "initdspdefs.h" // for clear_display, flush_display_buffer
#include "initkbddefs.h" // for init_keyboard
#include "kprintdefs.h" // for print
#include "lispemul.h" // for T, DLword, LispPTR, POINTERMASK, NIL
#include "lispmap.h" // for DISPLAY_HI, ATOM_HI, DEFS_HI, DISPLA...
#include "llstkdefs.h" // for stack_check
#include "lspglob.h" // for InterfacePage, Plistspace
#include "lsptypes.h" // for GETWORD, GetDTD, GetTypeNumber, dtd
#include "mkatomdefs.h" // for make_atom
#include "returndefs.h" // for contextsw
#include "stack.h" // for FX, ResetFXP
#include "testtooldefs.h" // for all_stack_dump, doko, printPC, print...
#include "timerdefs.h" // for int_block, int_init, int_unblock
#include "uraiddefs.h" // for copy_region, device_after_raid, devi...
#include "uraidextdefs.h" // for URMAXCOMM, URMAXFXNUM, URSCAN_ALINK
#include "vmemsavedefs.h" // for vmem_save
#include "uraiddefs.h"
#include "uraidextdefs.h"
#include "dbgtooldefs.h"
#include "gcarraydefs.h"
#include "initdspdefs.h"
#include "initkbddefs.h"
#include "kprintdefs.h"
#include "llstkdefs.h"
#include "mkatomdefs.h"
#include "returndefs.h"
#include "testtooldefs.h"
#include "timerdefs.h"
#include "vmemsavedefs.h"
#ifdef MAIKO_ENABLE_ETHERNET
#include "etherdefs.h"
#endif
@@ -452,6 +451,22 @@ LispPTR uraid_commands(void) {
}
print(*((LispPTR *)GetVALCELL68k(index)));
break;
case 'B': { /* print array block */
LispPTR objaddr;
if (URaid_argnum == 1) {
printf("PRINT-ARRAY-BLOCK: B HEX-LispAddress\n");
return (T);
}
errno = 0;
objaddr = (LispPTR)strtoul(URaid_arg1, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg not HEX number\n");
return (T);
}
printarrayblock(objaddr);
}
break;
case 'd': /* DEFCELL */
if (URaid_argnum != 2) {
printf("GETD: d litatom\n");

View File

@@ -26,6 +26,7 @@
static XColor cursor_fore_xcsd, cursor_back_xcsd, xced;
extern Colormap Colors;
extern char cursorColor[255];
extern DspInterface currentdsp;
/* a simple linked list to remember X cursors */
@@ -143,7 +144,7 @@ void init_Xcursor(DspInterface dsp)
XLOCK; /* Take no X signals during this activity (ISC 386) */
XAllocNamedColor(dsp->display_id, Colors, "black", &cursor_fore_xcsd, &xced);
XAllocNamedColor(dsp->display_id, Colors, cursorColor, &cursor_fore_xcsd, &xced);
XAllocNamedColor(dsp->display_id, Colors, "white", &cursor_back_xcsd, &xced);
XUNLOCK(dsp); /* OK to take signals again */

View File

@@ -17,6 +17,7 @@
#include <X11/Xlib.h> // for XCreateSimpleWindow, XMapWindow, XChangeWin...
#include <X11/Xutil.h> // for XSizeHints, XStringListToTextProperty, XWMH...
#include <stdio.h> // for NULL
#include <stdlib.h> // for exit
#include "commondefs.h" // for error
#include "dbprint.h" // for TPRINT
#include "devif.h" // for (anonymous), MRegion, OUTER_SB_WIDTH, Defin...
@@ -50,6 +51,7 @@ extern int LispWindowRequestedX, LispWindowRequestedY;
extern unsigned LispWindowRequestedWidth, LispWindowRequestedHeight;
extern int noscroll;
extern Colormap Colors;
/*
* globals defined in this module
*/
@@ -66,9 +68,16 @@ Cursor WaitCursor, DefaultCursor, VertScrollCursor, VertThumbCursor, ScrollUpCur
/* */
/* */
/************************************************************************/
static unsigned long foregroundPixel;
static unsigned long backgroundPixel;
void Create_LispWindow(DspInterface dsp)
{
extern char foregroundColorName[];
extern char backgroundColorName[];
XColor foregroundColor_xcsd;
XColor backgroundColor_xcsd;
Status status;
XSizeHints szhint = {0};
XWMHints Lisp_WMhints = {0};
XClassHint xclasshint = {0};
@@ -92,13 +101,33 @@ void Create_LispWindow(DspInterface dsp)
Row3 = dsp->Visible.height + (OUTER_SB_WIDTH(dsp) / 2);
screen = ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id));
/* set up default display as black on white */
foregroundPixel = BlackPixelOfScreen(screen);
backgroundPixel = WhitePixelOfScreen(screen);
/* parse and record non-default color specs for foreground and background */
if (foregroundColorName[0]) {
status = XAllocNamedColor(dsp->display_id, Colors, foregroundColorName, &foregroundColor_xcsd, &foregroundColor_xcsd);
if (status == 0) {
fprintf(stderr, "Color allocation failed for foreground color: %s\n", foregroundColorName);
exit(1);
}
foregroundPixel = foregroundColor_xcsd.pixel;
}
if (backgroundColorName[0]) {
status = XAllocNamedColor(dsp->display_id, Colors, backgroundColorName, &backgroundColor_xcsd, &backgroundColor_xcsd);
if (status == 0) {
fprintf(stderr, "Color allocation failed for background color: %s\n", backgroundColorName);
exit(1);
}
backgroundPixel = backgroundColor_xcsd.pixel;
}
dsp->LispWindow = XCreateSimpleWindow(
dsp->display_id, RootWindowOfScreen(screen), LispWindowRequestedX, /* Default upper left */
LispWindowRequestedY, /* Default upper left */
dsp->Visible.width + OUTER_SB_WIDTH(dsp), /* Default width */
dsp->Visible.height + OUTER_SB_WIDTH(dsp), /* Default height */
0, /* Default border */
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
foregroundPixel, backgroundPixel);
Lisp_SetWinAttributes.bit_gravity = dsp->BitGravity;
Lisp_SetWinAttributes.override_redirect = False;
@@ -114,10 +143,8 @@ void Create_LispWindow(DspInterface dsp)
/* Have to make the GC before we make the icon. */
gcv.function = GXcopy;
gcv.foreground =
BlackPixelOfScreen(ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id)));
gcv.background =
WhitePixelOfScreen(ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id)));
gcv.foreground = foregroundPixel;
gcv.background = backgroundPixel;
dsp->Copy_GC =
XCreateGC(dsp->display_id, dsp->LispWindow, GCForeground | GCBackground | GCFunction, &gcv);
@@ -146,7 +173,7 @@ void Create_LispWindow(DspInterface dsp)
dsp->DisplayWindow = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, 0, 0,
dsp->Visible.width, dsp->Visible.height, 0,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
foregroundPixel, backgroundPixel);
XChangeWindowAttributes(dsp->display_id, dsp->DisplayWindow,
CWBitGravity | CWOverrideRedirect | CWBackingStore,
&Lisp_SetWinAttributes);
@@ -159,14 +186,14 @@ void Create_LispWindow(DspInterface dsp)
dsp->ScrollBarPixmap = XCreatePixmapFromBitmapData(
dsp->display_id, dsp->LispWindow, (char *)check_bits, check_width, check_height,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen), (unsigned)DefaultDepthOfScreen(screen));
foregroundPixel, backgroundPixel, (unsigned)DefaultDepthOfScreen(screen));
dsp->GravityOnPixmap = XCreatePixmapFromBitmapData(
dsp->display_id, dsp->LispWindow, (char *)check_bits, 16, 16, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen), (unsigned)DefaultDepthOfScreen(screen));
dsp->display_id, dsp->LispWindow, (char *)check_bits, 16, 16, foregroundPixel,
backgroundPixel, (unsigned)DefaultDepthOfScreen(screen));
dsp->GravityOffPixmap = XCreatePixmapFromBitmapData(
dsp->display_id, dsp->LispWindow, (char *)plain_bits, 16, 16, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen), (unsigned)DefaultDepthOfScreen(screen));
dsp->display_id, dsp->LispWindow, (char *)plain_bits, 16, 16, foregroundPixel,
backgroundPixel, (unsigned)DefaultDepthOfScreen(screen));
set_Xcursor(dsp, default_cursor.cuimage, (int)default_cursor.cuhotspotx,
(int)(15 - default_cursor.cuhotspoty), &DefaultCursor, 0);
@@ -197,7 +224,7 @@ void Create_LispWindow(DspInterface dsp)
0 - (int)dsp->InternalBorderWidth, /* y */
dsp->ScrollBarWidth, /* width */
dsp->Visible.height, dsp->InternalBorderWidth,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
foregroundPixel, backgroundPixel);
DefineCursor(dsp, dsp->VerScrollBar, &VertScrollCursor);
XMapWindow(dsp->display_id, dsp->VerScrollBar);
@@ -205,7 +232,7 @@ void Create_LispWindow(DspInterface dsp)
0 - (int)dsp->InternalBorderWidth, (int)Row2, /* y */
dsp->Visible.width, /* width */
dsp->ScrollBarWidth, dsp->InternalBorderWidth,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
foregroundPixel, backgroundPixel);
DefineCursor(dsp, dsp->HorScrollBar, &HorizScrollCursor);
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollBar, CWOverrideRedirect,
&Lisp_SetWinAttributes);
@@ -216,7 +243,7 @@ void Create_LispWindow(DspInterface dsp)
(dsp->Visible.y * (int)dsp->Visible.height) / (int)dsp->Display.height, /* y */
dsp->ScrollBarWidth, /* width */
((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1,
dsp->InternalBorderWidth, BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
dsp->InternalBorderWidth, foregroundPixel, backgroundPixel);
XChangeWindowAttributes(dsp->display_id, dsp->VerScrollButton, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XSetWindowBackgroundPixmap(dsp->display_id, dsp->VerScrollButton, dsp->ScrollBarPixmap);
@@ -228,8 +255,8 @@ void Create_LispWindow(DspInterface dsp)
(dsp->Visible.x * (int)dsp->Visible.width) / (int)dsp->Display.width,
0 - (int)dsp->InternalBorderWidth, /* y */
((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1,
dsp->ScrollBarWidth, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
dsp->ScrollBarWidth, dsp->InternalBorderWidth, foregroundPixel,
backgroundPixel);
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollButton, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XSetWindowBackgroundPixmap(dsp->display_id, dsp->HorScrollButton, dsp->ScrollBarPixmap);
@@ -237,8 +264,8 @@ void Create_LispWindow(DspInterface dsp)
XMapWindow(dsp->display_id, dsp->HorScrollButton);
dsp->NWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, (int)Col2, (int)Row2, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
GravSize, dsp->InternalBorderWidth, foregroundPixel,
backgroundPixel);
XSetWindowBackgroundPixmap(dsp->display_id, dsp->NWGrav, dsp->GravityOnPixmap);
DefineCursor(dsp, dsp->NWGrav, &DefaultCursor);
XChangeWindowAttributes(dsp->display_id, dsp->NWGrav, CWOverrideRedirect, &Lisp_SetWinAttributes);
@@ -246,8 +273,8 @@ void Create_LispWindow(DspInterface dsp)
XMapWindow(dsp->display_id, dsp->NWGrav);
dsp->SEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, (int)Col3, (int)Row3, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
GravSize, dsp->InternalBorderWidth, foregroundPixel,
backgroundPixel);
XSetWindowBackgroundPixmap(dsp->display_id, dsp->SEGrav, dsp->GravityOffPixmap);
DefineCursor(dsp, dsp->SEGrav, &DefaultCursor);
XChangeWindowAttributes(dsp->display_id, dsp->SEGrav, CWOverrideRedirect, &Lisp_SetWinAttributes);
@@ -255,16 +282,16 @@ void Create_LispWindow(DspInterface dsp)
XMapWindow(dsp->display_id, dsp->SEGrav);
dsp->SWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, (int)Col2, (int)Row3, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
GravSize, dsp->InternalBorderWidth, foregroundPixel,
backgroundPixel);
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, (int)Col3, (int)Row2, GravSize,
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
WhitePixelOfScreen(screen));
GravSize, dsp->InternalBorderWidth, foregroundPixel,
backgroundPixel);
XSetWindowBackgroundPixmap(dsp->display_id, dsp->NEGrav, dsp->GravityOffPixmap);
DefineCursor(dsp, dsp->NEGrav, &DefaultCursor);
XClearWindow(dsp->display_id, dsp->NWGrav);
@@ -280,14 +307,12 @@ void Create_LispWindow(DspInterface dsp)
void lisp_Xvideocolor(int flag)
{
Screen *screen;
XEvent event = {0};
XGCValues gcv = {0};
unsigned long newForeground;
XLOCK;
screen = ScreenOfDisplay(currentdsp->display_id, DefaultScreen(currentdsp->display_id));
newForeground = flag ? WhitePixelOfScreen(screen) : BlackPixelOfScreen(screen);
newForeground = flag ? backgroundPixel : foregroundPixel;
/* window -- are we making a change? */
XGetGCValues(currentdsp->display_id, currentdsp->Copy_GC, GCForeground | GCBackground, &gcv);

View File

@@ -53,6 +53,7 @@ static XrmOptionDescRec opTable[] = {
{"-fg", "*foreground", XrmoptionSepArg, (XPointer)NULL},
{"-background", "*background", XrmoptionSepArg, (XPointer)NULL},
{"-bg", "*background", XrmoptionSepArg, (XPointer)NULL},
{"-cursorColor", "*cursorColor", XrmoptionSepArg, (XPointer)NULL},
{"-title", "*title", XrmoptionSepArg, (XPointer)NULL},
{"-t", "*title", XrmoptionSepArg, (XPointer)NULL},
{"-icontitle", "*icontitle", XrmoptionSepArg, (XPointer)NULL},
@@ -84,8 +85,13 @@ extern char Window_Title[255];
char Window_Title[255];
extern char Icon_Title[255];
char Icon_Title[255];
extern char cursorColor[255];
char cursorColor[255] = {0};
extern char foregroundColorName[64];
extern char backgroundColorName[64];
extern char sysout_name[];
extern char sysout_name_cl[];
extern char sysout_name_xrm[];
extern unsigned sysout_size;
extern int for_makeinit, please_fork, noscroll;
/* diagnostic flag for sysout dumping */
@@ -114,6 +120,9 @@ void print_Xusage(const char *prog)
(void)fprintf(stderr, " [-sysout] [<sysout>] -path to the Medley image\n");
(void)fprintf(stderr, " -h[elp] -prints this text\n");
(void)fprintf(stderr, " -info -prints configuration info\n");
(void)fprintf(stderr, " -cursorColor X11-color-spec -sets foreground cursor color\n");
(void)fprintf(stderr, " -fg|-foreground X11-color-spec -sets foreground display color\n");
(void)fprintf(stderr, " -bg|-background X11-color-spec -sets background display color\n");
(void)fprintf(stderr, " -d[isplay] <host>:<display>.<screen>\n");
(void)fprintf(stderr,
" -g[eometry] <geom> -size & placement for the medley window on your X "
@@ -181,20 +190,9 @@ void read_Xoption(int *argc, char *argv[])
print_Xusage(argv[0]);
}
sysout_name[0] = '\0';
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);
} else if ((envname = getenv("LDESOURCESYSOUT")) != NULL)
strncpy(sysout_name, envname, PATH_MAX - 1);
else {
envname = getenv("HOME");
(void)strcat(sysout_name, envname);
(void)strcat(sysout_name, "/lisp.virtualmem");
}
if (access(sysout_name, R_OK) != 0) {
sysout_name[0] = '\0';
if (XrmGetResource(commandlineDB, "ldex.sysout", "Ldex.Sysout", str_type, &value) == True) {
/* Get Sysout from command line only */
(void)strncpy(sysout_name_cl, value.addr, value.size);
}
/* In order to access other DB's we have to open the main display now */
@@ -244,12 +242,8 @@ void read_Xoption(int *argc, char *argv[])
(void)XrmMergeDatabases(commandlineDB, &rDB);
if (XrmGetResource(rDB, "ldex.sysout", "Ldex.Sysout", str_type, &value) == True) {
/* Get Sysout */
(void)strncpy(sysout_name, value.addr, value.size);
}
if (sysout_name[0] == '\0') {
(void)fprintf(stderr, "Couldn't find a sysout to run;\n");
print_Xusage(argv[0]);
/* Get Sysout from x resource manager */
(void)strncpy(sysout_name_xrm, value.addr, value.size);
}
if (XrmGetResource(rDB, "ldex.title", "Ldex.Title", str_type, &value) == True) {
@@ -283,6 +277,18 @@ void read_Xoption(int *argc, char *argv[])
(void)strcpy(tmp, ""); /* Clear the string */
if (XrmGetResource(rDB, "ldex.cursorColor", "Ldex.cursorColor", str_type, &value) == True) {
(void)strncpy(cursorColor, value.addr, sizeof(cursorColor) - 1);
}
if (XrmGetResource(rDB, "ldex.foreground", "Ldex.foreground", str_type, &value) == True) {
(void)strncpy(foregroundColorName, value.addr, sizeof(foregroundColorName) - 1);
}
if (XrmGetResource(rDB, "ldex.background", "Ldex.background", str_type, &value) == True) {
(void)strncpy(backgroundColorName, value.addr, sizeof(backgroundColorName) - 1);
}
if (XrmGetResource(rDB, "ldex.NoFork", "Ldex.NoFork", str_type, &value) == True) {
please_fork = 0;
}