1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-03-21 08:38:43 +00:00

Compare commits

..

28 Commits

Author SHA1 Message Date
Frank Halasz
e68fb0dd57 Trying macos-12 in buildRelease.yml since the workflow fails for macos-latest (= macos-14). 2024-11-10 23:09:12 -08:00
Frank Halasz
11978b714f Update docker/ github actions to current versions to account for deprecation of node12 - on which previous versions were based 2024-11-10 22:44:06 -08:00
Frank Halasz
d55b9e55c6 Add workflow_dispatch (in addition to push and pull_request) to build.yml triggers - for testing 2024-11-10 22:27:33 -08:00
Frank Halasz
666cceff7e Update github actions to account for deprecation of macos-12 runners and the move of ubuntu-latest runner to ubuntu-24.04. Use explicit versions instead of latest to prevent issues when latest changes unexpectedly. 2024-11-10 21:58:34 -08:00
Nick Briggs
cea720feb2 Remove tabs embedded in strings used for formatting output (#515)
Files gcfinal.c and testool.c both contain literal TAB characters embedded
in printf() format strings in an attempt to align output.
The output formatting depends on the user's simulated tab settings and
therefore may not produce the expected results.

The output formatting is rewritten to make tab characters unnecessary.
2024-10-31 13:36:31 -07:00
Nick Briggs
a3f3775c0a Add missing includes and include file if compiling with COLOR defined.
File rawcolordefs.h was completely missing.
Both llcolordefs.h and rawcolordefs.h must be included in subr.c if -DCOLOR
Make newColorizeFont8() local to rawcolor.c
2024-10-22 10:13:00 -07:00
Nick Briggs
d2d4f18ade Correct error message when debug frame extension limit exceeded 2024-10-22 09:56:06 -07:00
Nick Briggs
c3b7d1707d Switch X11 options to use shared windowTitle and cleanup icon title variable name 2024-10-18 16:21:58 -07:00
Nick Briggs
532731b716 Cleanup options variables, spelling errors, declarations
Options for requested width, height, and pixel scaling and window title can
be shared between display subsystems.

Include correct header for local sdl function definitions rather than
manually duplicating a reference for init_SDL().

Correct a typo in comments on build_lisp_map().
2024-10-18 16:07:46 -07:00
Nick Briggs
29e5b374fe Update CMakeLists.txt to suggested syntax for SDL projects. 2024-10-17 14:26:16 -07:00
Nick Briggs
0c7b1cccd4 Merge pull request #514 from Interlisp/cleanup-USHORT-bitfields
Remove USHORT and direct "unsigned short" uses in struct bitfields
2024-10-15 19:27:13 -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
86ba485c3e Replace "unsigned short" use for bit-fields with DLword
Where bit-fields are defined in a structure that represents a Lisp
DLword object the DLword type is now used as the base type instead of
"unsigned short".
2024-10-14 13:17:26 -07:00
Nick Briggs
b88ea87fa8 Remove USHORT definition and replace uses with DLword
USHORT unnecessarily duplicates the DLword type that represents a
single Lisp 16-bit word.
2024-10-14 12:57: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
85 changed files with 1748 additions and 607 deletions

View File

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

View File

@@ -1,6 +1,6 @@
name: Build name: Build
on: [push, pull_request] on: [push, pull_request, workflow_dispatch]
defaults: defaults:
run: run:
@@ -11,7 +11,7 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
os: [macos-11, macos-12, ubuntu-22.04, ubuntu-20.04] os: [macos-12, macos-13, macos-14, macos-15, ubuntu-24.04, ubuntu-22.04, ubuntu-20.04]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Install X11 dependencies on MacOS - name: Install X11 dependencies on MacOS
@@ -37,7 +37,7 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
os: [macos-11, macos-12, ubuntu-22.04, ubuntu-20.04] os: [macos-12, macos-13, macos-14, macos-15, ubuntu-24.04, ubuntu-22.04, ubuntu-20.04]
env: env:
BUILD_TYPE: Release BUILD_TYPE: Release
steps: steps:

View File

@@ -29,7 +29,7 @@ jobs:
buildBuilder: buildBuilder:
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
# Checkout maiko # Checkout maiko

View File

@@ -84,7 +84,7 @@ jobs:
# the result of a workflow_dispatch or a workflow_call # the result of a workflow_dispatch or a workflow_call
inputs: inputs:
runs-on: ubuntu-latest runs-on: ubuntu-24.04
outputs: outputs:
draft: ${{ steps.one.outputs.draft }} draft: ${{ steps.one.outputs.draft }}
force: ${{ steps.one.outputs.force }} force: ${{ steps.one.outputs.force }}
@@ -116,7 +116,7 @@ jobs:
sentry: sentry:
needs: inputs needs: inputs
runs-on: ubuntu-latest runs-on: ubuntu-24.04
outputs: outputs:
release_not_built: ${{ steps.check.outputs.release_not_built }} release_not_built: ${{ steps.check.outputs.release_not_built }}
@@ -152,7 +152,7 @@ jobs:
|| needs.inputs.outputs.force == 'true' || needs.inputs.outputs.force == 'true'
) )
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
# Checkout the actions for this repo owner # Checkout the actions for this repo owner
@@ -185,14 +185,14 @@ jobs:
# Setup the Docker Machine Emulation environment. # Setup the Docker Machine Emulation environment.
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v2 uses: docker/setup-qemu-action@v3
with: with:
platforms: linux/amd64,linux/arm64,linux/arm/v7 platforms: linux/amd64,linux/arm64,linux/arm/v7
# Setup the Docker Buildx funtion # Setup the Docker Buildx funtion
- name: Set up Docker Buildx - name: Set up Docker Buildx
id: buildx id: buildx
uses: docker/setup-buildx-action@v2 uses: docker/setup-buildx-action@v3
# Do the Docker Build using the Dockerfile in the repository we # Do the Docker Build using the Dockerfile in the repository we
# checked out. Save the results in a directory under /tmp to be used # checked out. Save the results in a directory under /tmp to be used
@@ -204,7 +204,7 @@ jobs:
# Dockerfile, NOT HERE IN THE WORKFLOW. # Dockerfile, NOT HERE IN THE WORKFLOW.
# #
- name: Build Docker Image and Save It Locally - name: Build Docker Image and Save It Locally
uses: docker/build-push-action@v4 uses: docker/build-push-action@v6
with: with:
builder: ${{ steps.buildx.outputs.name }} builder: ${{ steps.buildx.outputs.name }}
build-args: | build-args: |
@@ -266,7 +266,7 @@ jobs:
|| needs.inputs.outputs.force == 'true' || needs.inputs.outputs.force == 'true'
) )
runs-on: macos-latest runs-on: macos-12
steps: steps:
@@ -339,7 +339,6 @@ jobs:
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \ -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
-DMAIKO_DISPLAY_SDL=ON \ -DMAIKO_DISPLAY_SDL=ON \
-DMAIKO_DISPLAY_X11=ON \ -DMAIKO_DISPLAY_X11=ON \
-DMAIKO_ENABLE_NETHUB=true \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release cmake --build . --config Release
for exe in lde ldex ldesdl for exe in lde ldex ldesdl
@@ -413,7 +412,7 @@ jobs:
run: | run: |
wget https://cygwin.com/setup-x86_64.exe -OutFile setup-x86_64.exe wget https://cygwin.com/setup-x86_64.exe -OutFile setup-x86_64.exe
Unblock-File 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' 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 # Retrieve SDL2 and install in cygwin
@@ -488,7 +487,7 @@ jobs:
|| needs.inputs.outputs.force == 'true' || needs.inputs.outputs.force == 'true'
) )
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
@@ -555,7 +554,7 @@ jobs:
complete: complete:
runs-on: ubuntu-latest runs-on: ubuntu-24.04
outputs: outputs:
build_successful: ${{ steps.output.outputs.build_successful }} build_successful: ${{ steps.output.outputs.build_successful }}

1
.gitignore vendored
View File

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

View File

@@ -37,16 +37,21 @@ IF(NEED_LIB_M)
SET(MAIKO_LIBRARIES m) SET(MAIKO_LIBRARIES m)
ENDIF() 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 SET(MAIKO_DEFINITIONS
"-DRELEASE=351" "-DRELEASE=${MAIKO_RELEASE}"
) )
SET(MAIKO_INIT_DEFINITIONS 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_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) IF(MAIKO_DISPLAY_X11)
FIND_PACKAGE(X11 REQUIRED) FIND_PACKAGE(X11 REQUIRED)
@@ -81,19 +86,34 @@ IF(MAIKO_DISPLAY_X11)
MESSAGE("-- Configured for X11 display") MESSAGE("-- Configured for X11 display")
ENDIF() ENDIF()
IF(MAIKO_DISPLAY_SDL) IF(MAIKO_DISPLAY_SDL STREQUAL "2")
FIND_PACKAGE(SDL2 REQUIRED) FIND_PACKAGE(SDL2 REQUIRED CONFIG REQUIRED COMPONENTS SDL2)
SET(MAIKO_DISPLAY_SDL_DEFINITIONS SET(MAIKO_DISPLAY_SDL_DEFINITIONS
"-DSDL" "-DSDL=2"
) )
SET(MAIKO_DISPLAY_SDL_LIBRARIES ${SDL2_LIBRARIES}) SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS SDL2::Headers)
SET(MAIKO_DISPLAY_SDL_LIBRARIES SDL2::SDL2)
SET(MAIKO_DISPLAY_SDL_SRCS SET(MAIKO_DISPLAY_SDL_SRCS
src/sdl.c src/sdl.c
) )
SET(MAIKO_DISPLAY_SDL_HDRS SET(MAIKO_DISPLAY_SDL_HDRS
inc/sdldefs.h inc/sdldefs.h
) )
MESSAGE("-- Configured for SDL display") MESSAGE("-- Configured for SDL2 display")
ELSEIF(MAIKO_DISPLAY_SDL STREQUAL "3")
FIND_PACKAGE(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3)
SET(MAIKO_DISPLAY_SDL_DEFINITIONS
"-DSDL=3"
)
SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS SDL3::Headers)
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() ENDIF()
# according to: https://cmake.org/pipermail/cmake/2016-October/064342.html # 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) ADD_EXECUTABLE(lde src/ldeboot.c src/unixfork.c)
TARGET_COMPILE_DEFINITIONS(lde PUBLIC ${MAIKO_DEFINITIONS}) TARGET_COMPILE_DEFINITIONS(lde PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(lde PUBLIC inc) TARGET_INCLUDE_DIRECTORIES(lde PRIVATE inc)
IF(MAIKO_DISPLAY_X11) IF(MAIKO_DISPLAY_X11)
# Tell it that the X11 launcher is available. # 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. # This is needed so that it can call XOpenDisplay.
TARGET_LINK_LIBRARIES(lde X11::X11) TARGET_LINK_LIBRARIES(lde X11::X11)
ENDIF() ENDIF()
IF(MAIKO_DISPLAY_SDL) IF(MAIKO_DISPLAY_SDL)
# Tell it that the SDL launcher is available. # 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() ENDIF()
ADD_EXECUTABLE(ldeether src/ldeether.c src/dlpi.c) ADD_EXECUTABLE(ldeether src/ldeether.c src/dlpi.c)
TARGET_COMPILE_DEFINITIONS(ldeether PUBLIC ${MAIKO_DEFINITIONS}) TARGET_COMPILE_DEFINITIONS(ldeether PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldeether PUBLIC inc) TARGET_INCLUDE_DIRECTORIES(ldeether PRIVATE inc)
IF(MAIKO_DISPLAY_X11) IF(MAIKO_DISPLAY_X11)
ADD_EXECUTABLE(ldex ADD_EXECUTABLE(ldex
@@ -455,8 +475,8 @@ IF(MAIKO_DISPLAY_X11)
${MAIKO_DISPLAY_X11_SRCS} ${MAIKO_DISPLAY_X11_SRCS}
${MAIKO_DISPLAY_X11_HDRS} ${MAIKO_DISPLAY_X11_HDRS}
) )
TARGET_COMPILE_DEFINITIONS(ldex PUBLIC ${MAIKO_DEFINITIONS} ${MAIKO_DISPLAY_X11_DEFINITIONS}) TARGET_COMPILE_DEFINITIONS(ldex PRIVATE ${MAIKO_DEFINITIONS} ${MAIKO_DISPLAY_X11_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldex PUBLIC inc) TARGET_INCLUDE_DIRECTORIES(ldex PRIVATE inc)
TARGET_LINK_LIBRARIES(ldex ${MAIKO_LIBRARIES} ${MAIKO_DISPLAY_X11_LIBRARIES}) TARGET_LINK_LIBRARIES(ldex ${MAIKO_LIBRARIES} ${MAIKO_DISPLAY_X11_LIBRARIES})
ADD_EXECUTABLE(ldeinit ADD_EXECUTABLE(ldeinit
@@ -467,8 +487,8 @@ IF(MAIKO_DISPLAY_X11)
${MAIKO_DISPLAY_X11_SRCS} ${MAIKO_DISPLAY_X11_SRCS}
${MAIKO_DISPLAY_X11_HDRS} ${MAIKO_DISPLAY_X11_HDRS}
) )
TARGET_COMPILE_DEFINITIONS(ldeinit PUBLIC ${MAIKO_INIT_DEFINITIONS} ${MAIKO_DISPLAY_X11_DEFINITIONS}) TARGET_COMPILE_DEFINITIONS(ldeinit PRIVATE ${MAIKO_INIT_DEFINITIONS} ${MAIKO_DISPLAY_X11_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldeinit PUBLIC inc) TARGET_INCLUDE_DIRECTORIES(ldeinit PRIVATE inc)
TARGET_LINK_LIBRARIES(ldeinit ${MAIKO_LIBRARIES} ${MAIKO_DISPLAY_X11_LIBRARIES}) TARGET_LINK_LIBRARIES(ldeinit ${MAIKO_LIBRARIES} ${MAIKO_DISPLAY_X11_LIBRARIES})
ENDIF() ENDIF()
@@ -481,20 +501,32 @@ IF(MAIKO_DISPLAY_SDL)
${MAIKO_DISPLAY_SDL_SRCS} ${MAIKO_DISPLAY_SDL_SRCS}
${MAIKO_DISPLAY_SDL_HDRS} ${MAIKO_DISPLAY_SDL_HDRS}
) )
TARGET_COMPILE_DEFINITIONS(ldesdl PUBLIC ${MAIKO_DEFINITIONS} ${MAIKO_DISPLAY_SDL_DEFINITIONS}) TARGET_COMPILE_DEFINITIONS(ldesdl PRIVATE ${MAIKO_DEFINITIONS} ${MAIKO_DISPLAY_SDL_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(ldesdl PUBLIC inc) TARGET_INCLUDE_DIRECTORIES(ldesdl PRIVATE inc)
TARGET_INCLUDE_DIRECTORIES(ldesdl PRIVATE ${SDL2_INCLUDE_DIRS}) 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}) TARGET_LINK_LIBRARIES(ldesdl ${MAIKO_LIBRARIES} ${MAIKO_DISPLAY_SDL_LIBRARIES})
ENDIF() ENDIF()
ADD_EXECUTABLE(mkvdate src/mkvdate.c) ADD_EXECUTABLE(mkvdate src/mkvdate.c)
TARGET_COMPILE_DEFINITIONS(mkvdate PUBLIC ${MAIKO_DEFINITIONS}) TARGET_COMPILE_DEFINITIONS(mkvdate PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(mkvdate PUBLIC inc) TARGET_INCLUDE_DIRECTORIES(mkvdate PRIVATE inc)
ADD_EXECUTABLE(setsout src/setsout.c src/byteswap.c) ADD_EXECUTABLE(setsout src/setsout.c src/byteswap.c)
TARGET_COMPILE_DEFINITIONS(setsout PUBLIC ${MAIKO_DEFINITIONS}) TARGET_COMPILE_DEFINITIONS(setsout PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(setsout PUBLIC inc) TARGET_INCLUDE_DIRECTORIES(setsout PRIVATE inc)
ADD_EXECUTABLE(tstsout src/tstsout.c src/byteswap.c) ADD_EXECUTABLE(tstsout src/tstsout.c src/byteswap.c)
TARGET_COMPILE_DEFINITIONS(tstsout PUBLIC ${MAIKO_DEFINITIONS}) TARGET_COMPILE_DEFINITIONS(tstsout PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(tstsout PUBLIC inc) 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 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 is normally -O2.
OPTFLAGS = -O2 -g3 OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351 DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lm -L/usr/local/lib -lSDL2 LDFLAGS = -lm -L/usr/local/lib -lSDL2
# #

View File

@@ -18,7 +18,7 @@ XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2. # OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3 OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351 DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -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 OPTFLAGS = -O2 -g
DEBUGFLAGS = # -DDEBUG -DOPTRACE DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) \ DFLAGS = $(DEBUGFLAGS) $(XFLAGS) \
-DRELEASE=351 # -DSTACKCHECK -DFSBCHECK -DPCTRACE -DRELEASE=$(RELEASE) # -DSTACKCHECK -DFSBCHECK -DPCTRACE
LDFLAGS = -L/opt/X11/lib -lX11 -lm LDFLAGS = -L/opt/X11/lib -lX11 -lm
LDELDFLAGS = -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 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 is normally -O2.
OPTFLAGS = -O2 -g OPTFLAGS = -O2 -g
DEBUGFLAGS = # -DDEBUG -DOPTRACE 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 = LDELDFLAGS =
OBJECTDIR = ../$(RELEASENAME)/ OBJECTDIR = ../$(RELEASENAME)/

View File

@@ -18,7 +18,7 @@ XFLAGS = -I/opt/X11/include -DXWINDOW
# OPTFLAGS is normally -O2. # OPTFLAGS is normally -O2.
OPTFLAGS = -O2 OPTFLAGS = -O2
DEBUGFLAGS = # -DDEBUG -DOPTRACE DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/opt/X11/lib -lX11 -lm LDFLAGS = -L/opt/X11/lib -lX11 -lm
LDELDFLAGS = -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 OPTFLAGS = -O2 -g
DEBUGFLAGS = # -DDEBUG -DOPTRACE DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) \ DFLAGS = $(DEBUGFLAGS) $(XFLAGS) \
-DRELEASE=351 -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lm LDFLAGS = -L/usr/X11/lib -lX11 -lm
LDELDFLAGS = -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) 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 XFILES = $(OBJECTDIR)sdl.o
SDLFLAGS = -DSDL -F /Library/Frameworks SDLFLAGS = -DSDL=2 -F /Library/Frameworks
# OPTFLAGS is normally -O2. # OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g OPTFLAGS = -O2 -g
DEBUGFLAGS = # -DDEBUG -DOPTRACE 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 = LDELDFLAGS =
OBJECTDIR = ../$(RELEASENAME)/ OBJECTDIR = ../$(RELEASENAME)/

View File

@@ -18,7 +18,7 @@ XFLAGS = -I/opt/X11/include -DXWINDOW
# OPTFLAGS is normally -O2. # OPTFLAGS is normally -O2.
OPTFLAGS = -O1 -g OPTFLAGS = -O1 -g
DEBUGFLAGS = # -DDEBUG -DOPTRACE DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/opt/X11/lib -lX11 -lm LDFLAGS = -L/opt/X11/lib -lX11 -lm
LDELDFLAGS = -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 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 is normally -O2.
OPTFLAGS = -O2 OPTFLAGS = -O2
DFLAGS = $(XFLAGS) -DRELEASE=351 -DMAIKO_ENABLE_NETHUB DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DMAIKO_ENABLE_NETHUB
MEDLEY?=../../medley MEDLEY?=../../medley
SYSOUT?=$(MEDLEY)/loadups/full.sysout SYSOUT?=$(MEDLEY)/loadups/full.sysout

View File

@@ -4,11 +4,17 @@ CC = emcc $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o 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 is normally -O2.
OPTFLAGS = -O2 OPTFLAGS = -O2
DFLAGS = $(XFLAGS) -DRELEASE=351 -DMAIKO_ENABLE_NETHUB DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DMAIKO_ENABLE_NETHUB
MEDLEY?=../../medley MEDLEY?=../../medley
SYSOUT?=$(MEDLEY)/loadups/full.sysout SYSOUT?=$(MEDLEY)/loadups/full.sysout

View File

@@ -4,11 +4,17 @@ CC = clang -m32 $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o 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 is normally -O2.
OPTFLAGS = -O2 -g OPTFLAGS = -O2 -g
DFLAGS = $(SDLFLAGS) -DRELEASE=351 DFLAGS = $(SDLFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/local/lib -lSDL2 -lm LDFLAGS = -L/usr/local/lib -lSDL2 -lm
LDELDFLAGS = LDELDFLAGS =

View File

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

View File

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

View File

@@ -17,7 +17,7 @@ XFLAGS = -I/usr/local/include -DXWINDOW
# OPTFLAGS is normally -O2. # OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g OPTFLAGS = -O2 -g
DFLAGS = $(XFLAGS) -DRELEASE=351 DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
LDELDFLAGS = -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 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 is normally -O2.
OPTFLAGS = -O2 -g3 OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351 DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lSDL2 -lnetwork LDFLAGS = -lSDL2 -lnetwork
LDELDFLAGS = -lnetwork -lbsd 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 is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g OPTFLAGS = -O0 -g
DEBUGFLAGS = DEBUGFLAGS =
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/X11/lib -lX11 -lm LDFLAGS = -L/usr/X11/lib -lX11 -lm
LDELDFLAGS = -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 is normally -O2.
OPTFLAGS = -O0 -g3 OPTFLAGS = -O0 -g3
DEBUGFLAGS = # -DDEBUG -DOPTRACE DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/opt/X11/lib -lX11 -lm LDFLAGS = -L/opt/X11/lib -lX11 -lm
LDELDFLAGS = -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 is normally -O2.
OPTFLAGS = -O0 -g OPTFLAGS = -O0 -g
DEBUGFLAGS = # -DDEBUG -DOPTRACE DEBUGFLAGS = # -DDEBUG -DOPTRACE
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/opt/X11/lib -lX11 -lm LDFLAGS = -L/opt/X11/lib -lX11 -lm
LDELDFLAGS = -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 is normally -O0 for init
OPTFLAGS = -O0 -g OPTFLAGS = -O0 -g
DFLAGS = $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
LDELDFLAGS = -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 is normally -O0 for init
OPTFLAGS = -O0 -g OPTFLAGS = -O0 -g
DFLAGS = $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
LDELDFLAGS = -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 is normally -O0 for init
OPTFLAGS = -O0 -g OPTFLAGS = -O0 -g
DFLAGS = $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
LDELDFLAGS = -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 is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g OPTFLAGS = -O0 -g
DEBUGFLAGS = DEBUGFLAGS =
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -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 is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g OPTFLAGS = -O0 -g
DEBUGFLAGS = DEBUGFLAGS =
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -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 is normally -O2.
OPTFLAGS = -O2 -g3 OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
LDFLAGS = -L/usr/X11R6/lib -lX11 -lc -lm LDFLAGS = -L/usr/X11R6/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11R6/lib -lX11 -lc -lm LDELDFLAGS = -L/usr/X11R6/lib -lX11 -lc -lm

View File

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

View File

@@ -5,11 +5,17 @@ CC = gcc -m32 $(GCC_CFLAGS)
XFILES = $(OBJECTDIR)sdl.o 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 is normally -O2.
OPTFLAGS = -O2 -g3 OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351 DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lm -lSDL2 LDFLAGS = -lm -lSDL2
LDELDFLAGS = LDELDFLAGS =

View File

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

View File

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

View File

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

View File

@@ -18,7 +18,7 @@ XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2. # OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3 OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351 DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -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 is normally -O2.
OPTFLAGS = -O2 -g3 OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=351 DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11R6/lib -lX11 -lc -lm LDFLAGS = -L/usr/X11R6/lib -lX11 -lc -lm
LDELDFLAGS = -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) \ DFLAGS = $(XFLAGS) \
$(DEBUGFLAGS) \ $(DEBUGFLAGS) \
-DOS5 \ -DOS5 \
-DRELEASE=351 -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm -lsocket -lnsl LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm -lsocket -lnsl
LDELDFLAGS = -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) \ DFLAGS = $(XFLAGS) \
$(DEBUGFLAGS) \ $(DEBUGFLAGS) \
$(MACHINEFLAGS) \ $(MACHINEFLAGS) \
-DRELEASE=351 -DRELEASE=$(RELEASE)
LDFLAGS = -lX11 -lc -lm -lsocket -lnsl LDFLAGS = -lX11 -lc -lm -lsocket -lnsl
LDELDFLAGS = -lX11 -lc -lm -lsocket -lnsl LDELDFLAGS = -lX11 -lc -lm -lsocket -lnsl

View File

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

View File

@@ -18,8 +18,7 @@
*/ */
/**********************************************************************/ /**********************************************************************/
#include "lispemul.h" /* for LispPTR, DLword */ #include "lispemul.h" /* for LispPTR, DLword */
#include "version.h" /* for USHORT */ #include "version.h" /* for BIGVM */
#include "gchtfinddefs.h"
#define ADDREF 0 /* for gclookup routine. */ #define ADDREF 0 /* for gclookup routine. */
#define DELREF 1 /* for gclookup routine. */ #define DELREF 1 /* for gclookup routine. */
@@ -132,10 +131,10 @@
#ifdef BIGVM #ifdef BIGVM
struct hashentry struct hashentry
{ /* GC hashtable entry */ { /* GC hashtable entry */
unsigned short count :15; DLword count :15;
unsigned short stackref :1; DLword stackref :1;
unsigned short segnum :15; DLword segnum :15;
unsigned short collision :1; DLword collision :1;
}; };
struct htlinkptr struct htlinkptr
@@ -163,10 +162,10 @@ struct htoverflow
#else #else
struct hashentry struct hashentry
{ /* GC hashtable entry */ { /* GC hashtable entry */
USHORT count :6; DLword count :6;
USHORT stackref :1; DLword stackref :1;
USHORT segnum :8; DLword segnum :8;
USHORT collision :1; DLword collision :1;
}; };
struct htlinkptr struct htlinkptr
@@ -201,10 +200,10 @@ struct htoverflow
#ifdef BIGVM #ifdef BIGVM
struct hashentry struct hashentry
{ /* GC hashtable entry */ { /* GC hashtable entry */
USHORT collision :1; DLword collision :1;
USHORT segnum :15; DLword segnum :15;
USHORT stackref :1; DLword stackref :1;
USHORT count :15; DLword count :15;
}; };
struct htlinkptr struct htlinkptr
@@ -232,10 +231,10 @@ struct htoverflow
#else #else
struct hashentry struct hashentry
{ /* GC hashtable entry */ { /* GC hashtable entry */
USHORT collision :1; DLword collision :1;
USHORT segnum :8; DLword segnum :8;
USHORT stackref :1; DLword stackref :1;
USHORT count :6; DLword count :6;
}; };
struct htlinkptr struct htlinkptr

View File

@@ -1,8 +1,9 @@
#ifndef GCHTFINDDEFS_H #ifndef GCHTFINDDEFS_H
#define GCHTFINDDEFS_H 1 #define GCHTFINDDEFS_H 1
#include "lispemul.h" /* for LispPTR, DLword */ #include "lispemul.h" /* for LispPTR, DLword */
#include "gcdata.h" /* for GCENTRY */
void enter_big_reference_count(LispPTR ptr); 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 htfind(LispPTR ptr, int casep);
LispPTR rec_htfind(LispPTR ptr, int casep); LispPTR rec_htfind(LispPTR ptr, int casep);
#endif #endif

View File

@@ -267,22 +267,22 @@ struct state {
/* For bit test */ /* For bit test */
typedef struct wbits { typedef struct wbits {
USHORT LSB : 1; DLword LSB : 1;
USHORT B14 : 1; DLword B14 : 1;
USHORT B13 : 1; DLword B13 : 1;
USHORT B12 : 1; DLword B12 : 1;
USHORT B11 : 1; DLword B11 : 1;
USHORT B10 : 1; DLword B10 : 1;
USHORT B9 : 1; DLword B9 : 1;
USHORT B8 : 1; DLword B8 : 1;
USHORT B7 : 1; DLword B7 : 1;
USHORT B6 : 1; DLword B6 : 1;
USHORT B5 : 1; DLword B5 : 1;
USHORT B4 : 1; DLword B4 : 1;
USHORT B3 : 1; DLword B3 : 1;
USHORT B2 : 1; DLword B2 : 1;
USHORT B1 : 1; DLword B1 : 1;
USHORT xMSB : 1; DLword xMSB : 1;
} WBITS; } WBITS;
#define PUTBASEBIT68K(base68k, offset, bitvalue) \ #define PUTBASEBIT68K(base68k, offset, bitvalue) \

View File

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

View File

@@ -20,6 +20,7 @@
#include "version.h" // for BIGVM #include "version.h" // for BIGVM
#include "adr68k.h" // for NativeAligned2FromLAddr, NativeAligned4FromLAddr, LAddrFromNative #include "adr68k.h" // for NativeAligned2FromLAddr, NativeAligned4FromLAddr, LAddrFromNative
#include "arith.h" // for N_ARITH_SWITCH, N_GETNUMBER #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 "gcdata.h" // for ADDREF, DELREF
#include "lispemul.h" // for ERROR_EXIT, LispPTR, DLword, SEGMASK, state #include "lispemul.h" // for ERROR_EXIT, LispPTR, DLword, SEGMASK, state
#include "lispmap.h" // for S_POSITIVE, S_CHARACTER, S_NEGATIVE #include "lispmap.h" // for S_POSITIVE, S_CHARACTER, S_NEGATIVE

8
inc/rawcolordefs.h Normal file
View File

@@ -0,0 +1,8 @@
#ifndef RAWCOLORDEFS_H
#define RAWCOLORDEFS_H 1
#include "lispemul.h" /* for LispPTR */
void C_slowbltchar(LispPTR *args);
LispPTR Colorize_Bitmap(LispPTR args[]);
void Draw_8BppColorLine(LispPTR *args);
void Uncolorize_Bitmap(LispPTR args[]);
#endif

View File

@@ -79,22 +79,22 @@ typedef struct fnhead {
} FNHEAD; } FNHEAD;
typedef struct frameex1 { typedef struct frameex1 {
unsigned short flags : 3; DLword flags : 3;
unsigned short fast : 1; DLword fast : 1;
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */ DLword nil2 : 1; /* not used, prev: This frame treats N-func */
unsigned short incall : 1; DLword incall : 1;
unsigned short validnametable : 1; DLword validnametable : 1;
/* 0: look for FunctionHeader /* 0: look for FunctionHeader
1: look for NameTable on this FrameEx */ 1: look for NameTable on this FrameEx */
unsigned short nopush : 1; DLword nopush : 1;
unsigned short usecount : 8; DLword usecount : 8;
DLword alink; /* alink pointer (Low addr) */ DLword alink; /* alink pointer (Low addr) */
#ifdef BIGVM #ifdef BIGVM
LispPTR fnheader; /* pointer to FunctionHeader (Hi2 addr) */ LispPTR fnheader; /* pointer to FunctionHeader (Hi2 addr) */
#else #else
DLword lofnheader; /* pointer to FunctionHeader (Low addr) */ DLword lofnheader; /* pointer to FunctionHeader (Low addr) */
unsigned short hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */ DLword hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */
unsigned short hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */ DLword hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */
#endif /* BIGVM */ #endif /* BIGVM */
DLword nextblock; /* pointer to FreeStackBlock */ DLword nextblock; /* pointer to FreeStackBlock */
DLword pc; /* Program counter */ DLword pc; /* Program counter */
@@ -102,23 +102,23 @@ typedef struct frameex1 {
LispPTR nametable; /* ptr to NameTable of this FrameEx (Hi2 addr) */ LispPTR nametable; /* ptr to NameTable of this FrameEx (Hi2 addr) */
#else #else
DLword lonametable; /* ptr to NameTable of this FrameEx (Low addr) */ DLword lonametable; /* ptr to NameTable of this FrameEx (Low addr) */
unsigned short hi1nametable : 8; /* ptr to NameTable of this FrameEx (Hi1 addr) */ DLword hi1nametable : 8; /* ptr to NameTable of this FrameEx (Hi1 addr) */
unsigned short hi2nametable : 8; /* ptr to NameTable of this FrameEx (Hi2 addr) */ DLword hi2nametable : 8; /* ptr to NameTable of this FrameEx (Hi2 addr) */
#endif /* BIGVM */ #endif /* BIGVM */
DLword blink; /* blink pointer (Low addr) */ DLword blink; /* blink pointer (Low addr) */
DLword clink; /* clink pointer (Low addr) */ DLword clink; /* clink pointer (Low addr) */
} FX; } FX;
typedef struct frameex2 { typedef struct frameex2 {
unsigned short flags : 3; DLword flags : 3;
unsigned short fast : 1; DLword fast : 1;
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */ DLword nil2 : 1; /* not used, prev: This frame treats N-func */
unsigned short incall : 1; DLword incall : 1;
unsigned short validnametable : 1; DLword validnametable : 1;
/* 0: look for FunctionHeader /* 0: look for FunctionHeader
1: look for NameTable on this FrameEx */ 1: look for NameTable on this FrameEx */
unsigned short nopush : 1; DLword nopush : 1;
unsigned short usecount : 8; DLword usecount : 8;
DLword alink; /* alink pointer (Low addr) */ DLword alink; /* alink pointer (Low addr) */
LispPTR fnheader; /* pointer to FunctionHeader */ LispPTR fnheader; /* pointer to FunctionHeader */
DLword nextblock; /* pointer to FreeStackBlock */ DLword nextblock; /* pointer to FreeStackBlock */
@@ -135,19 +135,19 @@ typedef struct fxblock {
} FXBLOCK; } FXBLOCK;
typedef struct basic_frame { typedef struct basic_frame {
unsigned short flags : 3; DLword flags : 3;
unsigned short nil : 3; DLword nil : 3;
unsigned short residual : 1; DLword residual : 1;
unsigned short padding : 1; DLword padding : 1;
unsigned short usecnt : 8; DLword usecnt : 8;
DLword ivar; /* stk offset of IVARs for this frame ?? */ DLword ivar; /* stk offset of IVARs for this frame ?? */
} Bframe; } Bframe;
typedef struct stkword { typedef struct stkword {
unsigned short flags : 3; DLword flags : 3;
unsigned short nil : 5; DLword nil : 5;
unsigned short usecount : 8; DLword usecount : 8;
} StackWord; } StackWord;
typedef struct stack_block { typedef struct stack_block {
@@ -185,33 +185,33 @@ typedef struct fnhead {
unsigned nil3 : 2; /* not used */ unsigned nil3 : 2; /* not used */
unsigned nil2 : 2; /* not used */ unsigned nil2 : 2; /* not used */
#endif /* BIGVM */ #endif /* BIGVM */
unsigned short argtype : 2; /* ?? */ DLword argtype : 2; /* ?? */
unsigned short byteswapped : 1; /* code was reswapped. */ DLword byteswapped : 1; /* code was reswapped. */
unsigned short nil4 : 1; /* not used, prev: native translated? */ DLword nil4 : 1; /* not used, prev: native translated? */
unsigned short fvaroffset : 8; DLword fvaroffset : 8;
/* DLword offset from head of NameTable */ /* DLword offset from head of NameTable */
unsigned short nlocals : 8; /* ?? */ DLword nlocals : 8; /* ?? */
DLword ntsize; /* size of NameTable */ DLword ntsize; /* size of NameTable */
/* NameTable of variable length is following with this structure. */ /* NameTable of variable length is following with this structure. */
} FNHEAD; } FNHEAD;
typedef struct frameex1 { typedef struct frameex1 {
DLword alink; /* alink pointer (Low addr) */ DLword alink; /* alink pointer (Low addr) */
unsigned short usecount : 8; DLword usecount : 8;
unsigned short nopush : 1; DLword nopush : 1;
unsigned short validnametable : 1; DLword validnametable : 1;
/* 0: look for FunctionHeader /* 0: look for FunctionHeader
1: look for NameTable on this FrameEx */ 1: look for NameTable on this FrameEx */
unsigned short incall : 1; DLword incall : 1;
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */ DLword nil2 : 1; /* not used, prev: This frame treats N-func */
unsigned short fast : 1; DLword fast : 1;
unsigned short flags : 3; /* hi word */ DLword flags : 3; /* hi word */
#ifdef BIGVM #ifdef BIGVM
LispPTR fnheader; /* pointer to FunctionHeader (Hi2 addr) */ LispPTR fnheader; /* pointer to FunctionHeader (Hi2 addr) */
#else #else
unsigned short hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */ DLword hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */
unsigned short hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */ DLword hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */
DLword lofnheader; /* pointer to FunctionHeader (Low addr) */ DLword lofnheader; /* pointer to FunctionHeader (Low addr) */
#endif /* BIGVM */ #endif /* BIGVM */
@@ -221,8 +221,8 @@ typedef struct frameex1 {
#ifdef BIGVM #ifdef BIGVM
LispPTR nametable; /* pointer to NameTable of this FX (Hi2 addr) */ LispPTR nametable; /* pointer to NameTable of this FX (Hi2 addr) */
#else #else
unsigned short hi2nametable : 8; /* pointer to NameTable of this FX (Hi2 addr) */ DLword hi2nametable : 8; /* pointer to NameTable of this FX (Hi2 addr) */
unsigned short hi1nametable : 8; /* pointer to NameTable of this FX (Hi1 addr) */ DLword hi1nametable : 8; /* pointer to NameTable of this FX (Hi1 addr) */
DLword lonametable; /* pointer to NameTable of this FX (Low addr) */ DLword lonametable; /* pointer to NameTable of this FX (Low addr) */
#endif /* BIGVM */ #endif /* BIGVM */
@@ -232,15 +232,15 @@ typedef struct frameex1 {
typedef struct frameex2 { typedef struct frameex2 {
DLword alink; /* alink pointer (Low addr) */ DLword alink; /* alink pointer (Low addr) */
unsigned short usecount : 8; DLword usecount : 8;
unsigned short nopush : 1; DLword nopush : 1;
unsigned short validnametable : 1; DLword validnametable : 1;
/* 0: look for FunctionHeader /* 0: look for FunctionHeader
1: look for NameTable on this FrameEx */ 1: look for NameTable on this FrameEx */
unsigned short incall : 1; DLword incall : 1;
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */ DLword nil2 : 1; /* not used, prev: This frame treats N-func */
unsigned short fast : 1; DLword fast : 1;
unsigned short flags : 3; DLword flags : 3;
LispPTR fnheader; /* pointer to FunctionHeader (swapped) */ LispPTR fnheader; /* pointer to FunctionHeader (swapped) */
@@ -261,18 +261,18 @@ typedef struct fxblock {
typedef struct basic_frame { typedef struct basic_frame {
DLword ivar; DLword ivar;
unsigned short usecnt : 8; DLword usecnt : 8;
unsigned short padding : 1; DLword padding : 1;
unsigned short residual : 1; DLword residual : 1;
unsigned short nil : 3; DLword nil : 3;
unsigned short flags : 3; DLword flags : 3;
} Bframe; } Bframe;
typedef struct stkword { typedef struct stkword {
USHORT usecount : 8; DLword usecount : 8;
USHORT nil : 5; DLword nil : 5;
USHORT flags : 3; DLword flags : 3;
} StackWord; } StackWord;
typedef struct stack_block { typedef struct stack_block {

View File

@@ -227,9 +227,6 @@ typedef unsigned char u_char;
typedef unsigned long u_int; typedef unsigned long u_int;
typedef unsigned short u_short; typedef unsigned short u_short;
#undef UNALIGNED_FETCH_OK #undef UNALIGNED_FETCH_OK
typedef unsigned USHORT;
#else
typedef unsigned short USHORT;
#endif /* DOS */ #endif /* DOS */
/****************************************************************/ /****************************************************************/
@@ -237,6 +234,14 @@ typedef unsigned short USHORT;
/* --Start of system-specific flags */ /* --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 */ /* End of system-specific flag settings */

View File

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

View File

@@ -38,6 +38,7 @@
#include "conspagedefs.h" // for next_conspage #include "conspagedefs.h" // for next_conspage
#include "emlglob.h" #include "emlglob.h"
#include "gcdata.h" // for GCLOOKUP, ADDREF, DELREF #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 "lispemul.h" // for ConsCell, LispPTR, DLword, NIL_PTR, state
#include "lspglob.h" // for ListpDTD #include "lspglob.h" // for ListpDTD
#include "lsptypes.h" // for Listp, dtd #include "lsptypes.h" // for Listp, dtd

View File

@@ -23,6 +23,7 @@
#include "commondefs.h" // for error #include "commondefs.h" // for error
#include "conspagedefs.h" // for N_OP_cons, cons, next_conspage #include "conspagedefs.h" // for N_OP_cons, cons, next_conspage
#include "gcdata.h" // for GCLOOKUP, ADDREF, DELREF #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 "lispemul.h" // for ConsCell, DLword, LispPTR, NIL_PTR, DLWORD...
#include "lspglob.h" #include "lspglob.h"
#include "lsptypes.h" // for dtd, Listp, TYPE_LISTP #include "lsptypes.h" // for dtd, Listp, TYPE_LISTP

View File

@@ -589,8 +589,8 @@ void bt1(FX *startFX) {
BT_morep; BT_morep;
while ((fnobj->framename != ATOM_T) && (fx->alink != 11)) { while ((fnobj->framename != ATOM_T) && (fx->alink != 11)) {
if (fnum > URMAXFXNUM - 1) { if (fnum > URMAXFXNUM - 1) {
/* Internal buf overflow,more than 100 stacks */ /* Internal buf overflow, too many stack frames */
printf("***There are more than 100 stack frames.\n"); printf("***There are more than %d stack frames.\n", URMAXFXNUM);
printf( printf(
"If you want to continue, Uraid will smash its internal table for FX pointer. Do you " "If you want to continue, Uraid will smash its internal table for FX pointer. Do you "
"accept?(Y or N)\n"); "accept?(Y or N)\n");

411
src/dsk.c
View File

@@ -13,7 +13,7 @@
#include <fcntl.h> // for O_RDWR, O_CREAT, open, O_RDONLY, O_TRUNC #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 <stdio.h> // for NULL, sprintf, size_t, rename, SEEK_SET
#include <stddef.h> // for ptrdiff_t #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 <string.h> // for strcpy, strcmp, strlen, strncpy, strchr
#include <sys/stat.h> // for stat, fstat, mkdir, S_ISREG, st_atime, chmod #include <sys/stat.h> // for stat, fstat, mkdir, S_ISREG, st_atime, chmod
#include <sys/types.h> // for ino_t, time_t, off_t #include <sys/types.h> // for ino_t, time_t, off_t
@@ -38,12 +38,13 @@
#include <pwd.h> // for getpwuid, passwd #include <pwd.h> // for getpwuid, passwd
#include <sys/param.h> // for MAXPATHLEN #include <sys/param.h> // for MAXPATHLEN
#include <sys/statvfs.h> // for statvfs #include <sys/statvfs.h> // for statvfs
#include <sys/time.h> // for timeval, utimes #include <sys/time.h> // for timeval, utimes, futimens
#else #else
#include <direct.h> #include <direct.h>
#include <dos.h> #include <dos.h>
#include <time.h> #include <time.h>
#include <io.h> #include <io.h>
#include <search.h> // for qsort(?)
#define MAXPATHLEN _MAX_PATH #define MAXPATHLEN _MAX_PATH
#define MAXNAMLEM _MAX_PATH #define MAXNAMLEM _MAX_PATH
#define alarm(x) 0 #define alarm(x) 0
@@ -57,25 +58,31 @@ typedef struct filename_entry {
unsigned version_no; unsigned version_no;
} FileName; } FileName;
typedef struct current_varray { /*
char path[MAXPATHLEN]; /* pathname of directory */ * VA, a structure representing the file names and version numbers
char file[MAXPATHLEN]; /* file name (down cased name) */ * that were present in a directory at a particular moment in time.
time_t mtime; * The {DSK} device presents a case-insensitive (to Medley) but
} CurrentVArray; * case-preserving (to the host) file system. The VA (Version Array)
*/
static FileName VersionArray[VERSIONARRAYLENGTH]; static struct {
static CurrentVArray VArrayInfo; 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 locate_file(char *dir, char *name);
static int make_directory(char *dir); 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 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 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_old(char *dir, FileName *varray, char *afile, char *vfile);
static int get_oldest(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_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_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 #ifdef DOS
static void separate_drive(char *lfname, char *drive) static void separate_drive(char *lfname, char *drive)
@@ -367,24 +374,24 @@ LispPTR COM_openfile(LispPTR *args)
if (dskp) { if (dskp) {
if (unpack_filename(file, dir, name, ver, 1) == 0) return (NIL); if (unpack_filename(file, dir, name, ver, 1) == 0) return (NIL);
if (true_name(dir) != -1) return (0); 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); ConcNameAndVersion(name, ver, file);
switch (args[1]) { switch (args[1]) {
case RECOG_OLD: 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; break;
case RECOG_OLDEST: 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; break;
case RECOG_NEW: 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; break;
case RECOG_OLD_NEW: 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; break;
default: return (NIL); default: return (NIL);
@@ -439,7 +446,7 @@ LispPTR COM_openfile(LispPTR *args)
* Actually we are creating a new file. We have to * Actually we are creating a new file. We have to
* maintain a version status. * maintain a version status.
*/ */
if (maintain_version(file, (FileName *)NULL, 1) == 0) { if (maintain_version(file, 1) == 0) {
TIMEOUT(rval = close(fd)); TIMEOUT(rval = close(fd));
*Lisp_errno = errno; *Lisp_errno = errno;
return (NIL); return (NIL);
@@ -485,7 +492,7 @@ LispPTR COM_openfile(LispPTR *args)
* the entirely newly created file, versionless file, should not * the entirely newly created file, versionless file, should not
* be linked to any file. * be linked to any file.
*/ */
if (maintain_version(file, (FileName *)NULL, 0) == 0) { if (maintain_version(file, 0) == 0) {
TIMEOUT(close(fd)); TIMEOUT(close(fd));
*Lisp_errno = errno; *Lisp_errno = errno;
return (NIL); return (NIL);
@@ -670,7 +677,7 @@ LispPTR COM_closefile(LispPTR *args)
*Lisp_errno = errno; *Lisp_errno = errno;
return (NIL); return (NIL);
} }
#ifndef DOS #ifndef DOS /* effectively NEVER, since we're in an ifdef DOS */
TIMEOUT(rval = utimes(file, time)); TIMEOUT(rval = utimes(file, time));
if (rval != 0) { if (rval != 0) {
*Lisp_errno = errno; *Lisp_errno = errno;
@@ -681,13 +688,9 @@ LispPTR COM_closefile(LispPTR *args)
int fd, fatp, dskp, rval; int fd, fatp, dskp, rval;
time_t cdate; time_t cdate;
char lfname[MAXPATHLEN + 5], host[MAXNAMLEN]; char lfname[MAXPATHLEN + 5], host[MAXNAMLEN];
char file[MAXPATHLEN], dir[MAXPATHLEN], name[MAXNAMLEN + 1]; char file[MAXPATHLEN];
char ver[VERSIONLEN];
DIR *dirp;
struct dirent *dp;
struct stat sbuf; struct stat sbuf;
struct timeval time[2]; struct timespec timesp[2];
ino_t ino;
ERRSETJMP(NIL); ERRSETJMP(NIL);
Lisp_errno = (int *)NativeAligned4FromLAddr(args[3]); 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) { timesp[0].tv_sec = (long)sbuf.st_atime;
/* timesp[0].tv_nsec = 0L;
* On {DSK}, we have to make sure dir is case sensitively existing timesp[1].tv_sec = (long)ToUnixTime(cdate);
* directory. timesp[1].tv_nsec = 0L;
*/
if (true_name(dir) != -1) return (NIL);
/* TIMEOUT(rval = futimens(fd, timesp));
* There is a very troublesome problem here. The file name Lisp if (rval != 0) {
* 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) {
*Lisp_errno = errno; *Lisp_errno = errno;
return (NIL); return (NIL);
} }
TIMEOUT(rval = utimes(file, time)); TIMEOUT(rval = close(fd));
if (rval != 0) { if (rval == -1) {
*Lisp_errno = errno; *Lisp_errno = errno;
return (NIL); return (NIL);
} }
@@ -918,10 +885,10 @@ LispPTR DSK_getfilename(LispPTR *args)
* Recognizing a file on DSK device needs the version information. * Recognizing a file on DSK device needs the version information.
* We gather version information in a version array first. * 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); 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 = true_name(aname)) == 0) return (NIL);
if (rval == -1) { if (rval == -1) {
@@ -958,10 +925,10 @@ LispPTR DSK_getfilename(LispPTR *args)
strcpy(vname, dir); strcpy(vname, dir);
dirp = 1; dirp = 1;
} else { } 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); 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 = true_name(aname)) == 0) return (NIL);
if (rval == -1) { if (rval == -1) {
@@ -1007,10 +974,10 @@ LispPTR DSK_getfilename(LispPTR *args)
* Here, dir is an existing directory. We have to perform * Here, dir is an existing directory. We have to perform
* "new" recognition with the version information. * "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); 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; dirp = 0;
} }
} }
@@ -1033,10 +1000,10 @@ LispPTR DSK_getfilename(LispPTR *args)
strcpy(vname, aname); strcpy(vname, aname);
dirp = 1; dirp = 1;
} else { } 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); 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; dirp = 0;
} }
} }
@@ -1132,7 +1099,6 @@ LispPTR DSK_deletefile(LispPTR *args)
char file[MAXPATHLEN], fbuf[MAXPATHLEN], vless[MAXPATHLEN]; char file[MAXPATHLEN], fbuf[MAXPATHLEN], vless[MAXPATHLEN];
char dir[MAXPATHLEN], ver[VERSIONLEN]; char dir[MAXPATHLEN], ver[VERSIONLEN];
int rval, fatp; int rval, fatp;
FileName *varray;
#ifdef DOS #ifdef DOS
char drive[1], rawname[MAXNAMLEN]; char drive[1], rawname[MAXNAMLEN];
int extlen; /* len of extension, for making backup filename */ int extlen; /* len of extension, for making backup filename */
@@ -1160,10 +1126,9 @@ LispPTR DSK_deletefile(LispPTR *args)
#endif #endif
if (unpack_filename(file, dir, fbuf, ver, 1) == 0) return (NIL); if (unpack_filename(file, dir, fbuf, ver, 1) == 0) return (NIL);
if (get_version_array(dir, fbuf, VersionArray, &VArrayInfo) == 0) return (NIL); if (get_version_array(dir, fbuf) == 0) return (NIL);
varray = VersionArray;
if (NoFileP(varray)) if (NoFileP(VA.files))
return (NIL); /* return (NIL); /*
* If the specified file is deleted from * If the specified file is deleted from
* outside of Lisp during the last time * outside of Lisp during the last time
@@ -1178,9 +1143,9 @@ LispPTR DSK_deletefile(LispPTR *args)
*/ */
ConcNameAndVersion(fbuf, ver, file); 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 * There is no versionless file. All we have to do is to simply
* try to unlink the specified file. * 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. * 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 (strcmp(file, vless) == 0 || strcmp(file, fbuf) == 0) {
if (*fbuf != '\0') { if (*fbuf != '\0') {
@@ -1220,12 +1185,12 @@ LispPTR DSK_deletefile(LispPTR *args)
/* /*
* Finally, we have to maintain the version status. * 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); return (ATOM_T);
} else { } else {
/* /*
* Although the versionfile is specified, it is not linked * 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 * status after deleting the versionless file, because
* we cannot say whether the versionless file is actually under * we cannot say whether the versionless file is actually under
* control of the Medley DSK file system or not. * control of the Medley DSK file system or not.
@@ -1280,7 +1245,6 @@ LispPTR DSK_renamefile(LispPTR *args)
char dir[MAXPATHLEN], ver[VERSIONLEN]; char dir[MAXPATHLEN], ver[VERSIONLEN];
int rval, fatp; int rval, fatp;
int need_maintain_flg; int need_maintain_flg;
FileName *varray;
#ifdef DOS #ifdef DOS
char drive1[1], drive2[1]; char drive1[1], drive2[1];
int extlen1, extlen2; /* len of extension */ 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. * We maintain the destination to handle the link damaged case correctly.
*/ */
ConcDirAndName(dir, fbuf, dst); 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); if (get_version_array(dir, fbuf) == 0) return (NIL);
varray = VersionArray;
/* /*
* Although the file should have been recognized with "new" mode in Lisp * 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); 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 * 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, * "real" destination file is the file to which the versionless file is linked,
* we have to unlink the versionless file. * we have to unlink the versionless file.
*/ */
if (!NoFileP(varray)) { if (!NoFileP(VA.files)) {
if (OnlyVersionlessP(varray)) { if (OnlyVersionlessP(VA.files)) {
get_versionless(varray, vless, dir); get_versionless(VA.files, vless, dir);
if (strcmp(dst, vless) != 0) { if (strcmp(dst, vless) != 0) {
ConcNameAndVersion(vless, "1", fbuf); ConcNameAndVersion(vless, "1", fbuf);
TIMEOUT(rval = rename(vless, 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 * We are sure that the versionless file is linked to one of
* the higher versioned file here. * the higher versioned file here.
*/ */
get_versionless(varray, vless, dir); get_versionless(VA.files, vless, dir);
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(dst, fbuf) == 0) { if (strcmp(dst, fbuf) == 0) {
TIMEOUT(rval = unlink(vless)); TIMEOUT(rval = unlink(vless));
if (rval == -1) { if (rval == -1) {
@@ -1382,9 +1345,9 @@ LispPTR DSK_renamefile(LispPTR *args)
} }
if (unpack_filename(src, dir, fbuf, ver, 1) == 0) return (NIL); 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); /* return (NIL); /*
* If the specified file is deleted from * If the specified file is deleted from
* outside of Lisp during the last time * outside of Lisp during the last time
@@ -1398,9 +1361,9 @@ LispPTR DSK_renamefile(LispPTR *args)
* of it. * of it.
*/ */
ConcNameAndVersion(fbuf, ver, src); 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 * There is no versionless file. All we have to do is to simply
* try to rename the specified file. * 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 * versionless file is linked will destroy the consistency of the
* version status. * 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') { if (strcmp(src, vless) == 0 && *fbuf != '\0') {
/* /*
@@ -1458,9 +1421,9 @@ LispPTR DSK_renamefile(LispPTR *args)
* is on. * 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 (need_maintain_flg) {
if (maintain_version(src, (FileName *)NULL, 0) == 0) return (NIL); if (maintain_version(src, 0) == 0) return (NIL);
} }
return (ATOM_T); return (ATOM_T);
@@ -1658,9 +1621,9 @@ LispPTR COM_getfileinfo(LispPTR *args)
*/ */
strcpy(file, dir); strcpy(file, dir);
} else { } 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); 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 (dskp) {
if (unpack_filename(file, dir, name, ver, 1) == 0) return (NIL); if (unpack_filename(file, dir, name, ver, 1) == 0) return (NIL);
if (true_name(dir) != -1) return (0); 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); 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]) { switch (args[1]) {
@@ -2803,34 +2766,26 @@ static int make_directory(char *dir)
* and highest version number respectively. * and highest version number respectively.
* *
* Description: * Description:
* Finds the highest versioned entry in varray.
* *
* Find the highest versioned entry in varray. Varray has to include at least * Preconditions:
* one versioned file, that is varray has to satisfy (!NoFileP(varray) && * Varray must include at least one versioned file, satisfying the condition:
* !OnlyVersionlessP(varray)). * (!NoFileP(varray) && !OnlyVersionlessP(varray))
* * Varray must be sorted from highest to lowest version
*/ */
#ifdef DOS #ifdef DOS
#define FindHighestVersion(varray, mentry, max_no) \ #define FindHighestVersion(varray, mentry, max_no) \
do { \ do { \
FileName *centry; \ (max_no) = varray[0].version_no; \
for (centry = varray, max_no = -1; centry->version_no != LASTVERSIONARRAY; centry++) { \ (mentry) = &varray[0]; \
if (centry->version_no > max_no) { \ } while (0)
max_no = centry->version_no; \
mentry = centry; \
} \
} \
} while (0)
#else #else
#define FindHighestVersion(varray, mentry, max_no) \ #define FindHighestVersion(varray, mentry, max_no) \
do { \ do { \
FileName *centry; \ (max_no) = varray[0].version_no; \
for (centry = (varray), (max_no) = 0; centry->version_no != LASTVERSIONARRAY; centry++) { \ (mentry) = &varray[0]; \
if (centry->version_no > (max_no)) { \ } while (0)
(max_no) = centry->version_no; \
(mentry) = centry; \
} \
} \
} while (0)
#endif /* DOS */ #endif /* DOS */
/* /*
@@ -2917,6 +2872,19 @@ static int make_directory(char *dir)
} \ } \
} while (0) } 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 */ /* 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. */ /* guarantee that the directory exists. */
/* file File name, optionally including a (unix) version */ /* file File name, optionally including a (unix) version */
/* varray Place to put the version array entries. */ /* 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 */ /* Read thru DIR and gather all files that match FILE into */
/* VARRAY. DIR's case must match existing directory's, but */ /* 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 #ifdef DOS
/* DOS version-array builder */
char lcased_file[MAXPATHLEN]; char lcased_file[MAXPATHLEN];
char old_file[MAXPATHLEN]; char old_file[MAXPATHLEN];
char name[MAXNAMLEN]; char name[MAXNAMLEN];
char ver[VERSIONLEN]; char ver[VERSIONLEN];
FileName *svarray; int varray_index = 0;
struct find_t dirp; struct find_t dirp;
struct direct *dp; struct direct *dp;
int rval, drive = 0, isslash = 0; 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); make_old_version(old_file, lcased_file);
svarray = varray;
TIMEOUT(res = _dos_findfirst(old_file, _A_NORMAL | _A_SUBDIR, &dirp)); TIMEOUT(res = _dos_findfirst(old_file, _A_NORMAL | _A_SUBDIR, &dirp));
if (res == 0) { if (res == 0) {
strcpy(name, dirp.name); strcpy(name, dirp.name);
strcpy(svarray->name, name); strcpy(VA.files[varray_index].name, name);
svarray->version_no = 0; VA.files[varray_index].version_no = 0;
svarray++; varray_index++;
} }
/*******************************/ /*******************************/
@@ -3013,34 +2978,48 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
separate_version(name, ver, 1); separate_version(name, ver, 1);
DOWNCASE(name); DOWNCASE(name);
strcpy(svarray->name, dirp.name); strcpy(VA.files[varray_index].name, dirp.name);
if (*ver == '\0') { if (*ver == '\0') {
/* Versionless file */ /* Versionless file */
svarray->version_no = 1; VA.files[varray_index].version_no = 1;
} else { } else {
/* /*
* separator_version guarantees ver is a numeric * separate_version guarantees ver is a numeric string.
* 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. * 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. * 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)) { if (!NoFileP(VA.files)) {
strcpy(name, varray->name); strcpy(name, VA.files[0].name);
separate_version(name, ver, 1); 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); return (1);
@@ -3050,7 +3029,7 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
char lcased_file[MAXNAMLEN]; char lcased_file[MAXNAMLEN];
char name[MAXNAMLEN]; char name[MAXNAMLEN];
char ver[VERSIONLEN]; char ver[VERSIONLEN];
FileName *svarray; int varray_index = 0;
DIR *dirp; DIR *dirp;
struct dirent *dp; struct dirent *dp;
int rval; int rval;
@@ -3064,29 +3043,26 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
separate_version(lcased_file, ver, 1); separate_version(lcased_file, ver, 1);
DOWNCASE(lcased_file); 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)); TIMEOUT(rval = stat(dir, &sbuf));
if (rval == -1) { if (rval == -1) {
*Lisp_errno = errno; *Lisp_errno = errno;
return(0); return(0);
} }
if (0 == strcmp(lcased_file, VA.name) &&
/* sbuf.st_mtim.tv_sec == VA.lastMTime.tv_sec &&
* Cache mechanism was not used because of a bug in Sun OS. sbuf.st_mtim.tv_nsec == VA.lastMTime.tv_nsec) {
* Sometimes just after unlinking a file on a directory, the st_mtime return (1);
* of the directory does not change. This will make Maiko believe } else {
* cached version array is still valid, although it is already invalid. VA.lastMTime = sbuf.st_mtim;
* sync(2) has no effect on such case. strcpy(VA.name, lcased_file);
*/ }
/*
* 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
errno = 0; errno = 0;
TIMEOUT0(dirp = opendir(dir)); TIMEOUT0(dirp = opendir(dir));
@@ -3095,7 +3071,13 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
return (0); 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))) errno = 0, S_TOUT(dp = readdir(dirp)))
if (dp) { if (dp) {
strcpy(name, dp->d_name); 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. * 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') { if (*ver == '\0') {
/* Versionless file */ /* Versionless file */
svarray->version_no = 0; VA.files[varray_index].version_no = 0;
} else { } else {
/* /*
* separator_version guarantees ver is a numeric * separate_version guarantees ver is a numeric string.
* 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 varray is indicated by setting LASTVERSIONARRAY into
* version_no field. * 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. * 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)) { if (!NoFileP(VA.files)) {
strcpy(name, varray->name); strcpy(name, VA.files[0].name);
separate_version(name, ver, 1); 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)); TIMEOUT(closedir(dirp));
return (1); return (1);
#endif /* DOS */ #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. * 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 dir[MAXPATHLEN], fname[MAXNAMLEN], ver[VERSIONLEN];
char old_file[MAXPATHLEN], vless[MAXPATHLEN]; char old_file[MAXPATHLEN], vless[MAXPATHLEN];
@@ -3180,17 +3170,14 @@ static int maintain_version(char *file, FileName *varray, int forcep)
int rval, max_no; int rval, max_no;
FileName *entry; FileName *entry;
if (varray == (FileName *)NULL) { if (unpack_filename(file, dir, fname, ver, 1) == 0) return (0);
if (unpack_filename(file, dir, fname, ver, 1) == 0) return (0); /*
/* * We have to make sure that dir is the existing directory.
* We have to make sure that dir is the existing directory. */
*/ if (true_name(dir) != -1) return (0);
if (true_name(dir) != -1) return (0); if (get_version_array(dir, fname) == 0) return (0);
if (get_version_array(dir, fname, VersionArray, &VArrayInfo) == 0) return (0);
varray = VersionArray;
}
if (NoFileP(varray)) { if (NoFileP(VA.files)) {
/* /*
* We don't need to care about such case that there is no such file * We don't need to care about such case that there is no such file
* or an only versionless file exists. * or an only versionless file exists.
@@ -3198,14 +3185,14 @@ static int maintain_version(char *file, FileName *varray, int forcep)
return (1); return (1);
} }
if (OnlyVersionlessP(varray)) { if (OnlyVersionlessP(VA.files)) {
if (forcep) { if (forcep) {
/* /*
* If forcep, we link the versionless file to the version * If forcep, we link the versionless file to the version
* 1 file. * 1 file.
*/ */
#ifndef DOS #ifndef DOS
get_versionless(varray, vless, dir); get_versionless(VA.files, vless, dir);
ConcNameAndVersion(vless, "1", fname); ConcNameAndVersion(vless, "1", fname);
TIMEOUT(rval = link(vless, fname)); TIMEOUT(rval = link(vless, fname));
if (rval == -1) { 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. * 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. * 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 * Thus, the thing we have to do is to link a versionless file
* to the existing highest versioned file. * to the existing highest versioned file.
*/ */
FindHighestVersion(varray, entry, max_no); FindHighestVersion(VA.files, entry, max_no);
ConcDirAndName(dir, entry->name, old_file); ConcDirAndName(dir, entry->name, old_file);
/* /*
* The versionless file should have the same case name as the old * 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); 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') { 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 * Thus, we have to link the versionless file to the file which
* is versioned one higher than the existing highest version. * 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); sprintf(ver, "%u", max_no + 1);
/* /*
* The old file should have the same case name as the versionless * 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); return (1);
} else { } 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 file is not the highest versioned file. We have to unlink
* the wrongly linked versionless file, and link the highest versioned * the wrongly linked versionless file, and link the highest versioned
* file to a versionless file. * file to a versionless file.
@@ -3290,7 +3277,7 @@ static int maintain_version(char *file, FileName *varray, int forcep)
*Lisp_errno = errno; *Lisp_errno = errno;
return (0); return (0);
} }
FindHighestVersion(varray, entry, max_no); FindHighestVersion(VA.files, entry, max_no);
ConcDirAndName(dir, entry->name, old_file); ConcDirAndName(dir, entry->name, old_file);
/* /*
* The versionless file should have the same case name as the old * The versionless file should have the same case name as the old

View File

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

View File

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

View File

@@ -35,6 +35,7 @@
#include "commondefs.h" // for error #include "commondefs.h" // for error
#include "gccodedefs.h" // for code_block_size, reclaimcodeblock #include "gccodedefs.h" // for code_block_size, reclaimcodeblock
#include "gcdata.h" // for REC_GCLOOKUP, DELREF, ADDREF #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 "lspglob.h" // for Deleted_Implicit_Hash_Slot_word, UFNTable
#include "lsptypes.h" // for LispPTR, NIL, UFN, Get_code_BYTE, POINTERMASK #include "lsptypes.h" // for LispPTR, NIL, UFN, Get_code_BYTE, POINTERMASK
#include "stack.h" // for fnhead #include "stack.h" // for fnhead

View File

@@ -49,6 +49,7 @@
#include "commondefs.h" // for error #include "commondefs.h" // for error
#include "gccodedefs.h" // for reclaimcodeblock #include "gccodedefs.h" // for reclaimcodeblock
#include "gcdata.h" // for DELREF, REC_GCLOOKUP #include "gcdata.h" // for DELREF, REC_GCLOOKUP
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "gcfinaldefs.h" // for arrayblockmerger, checkarrayblock, deleteblock #include "gcfinaldefs.h" // for arrayblockmerger, checkarrayblock, deleteblock
#include "lispemul.h" // for LispPTR, NIL, T, POINTERMASK, DLword, ATOM_T #include "lispemul.h" // for LispPTR, NIL, T, POINTERMASK, DLword, ATOM_T
#include "llstkdefs.h" // for decusecount68k #include "llstkdefs.h" // for decusecount68k
@@ -551,15 +552,15 @@ void printarrayblock(LispPTR base) {
printf(" Length: %d cells.\n\n", bbase->arlen); printf(" Length: %d cells.\n\n", bbase->arlen);
addr = ((LispPTR *)bbase) - 20; addr = ((LispPTR *)bbase) - 20;
for (; addr < (LispPTR *)bbase; addr++) printf("%p %8x\n", (void *)addr, *addr); for (; addr < (LispPTR *)bbase; addr++) printf("%16p %8x\n", (void *)addr, *addr);
printf("%p %8x <- array header\n", (void *)addr, *addr); printf("%16p %8x <- array header\n", (void *)addr, *addr);
addr++; addr++;
for (; addr < (LispPTR *)bbase + 20; addr++) printf("%p %8x\n", (void *)addr, *addr); for (; addr < (LispPTR *)bbase + 20; addr++) printf("%16p %8x\n", (void *)addr, *addr);
printf(". . .\n"); printf(". . .\n");
addr = ((LispPTR *)btrailer) - 20; addr = ((LispPTR *)btrailer) - 20;
for (; addr < (LispPTR *)btrailer; addr++) printf("%p %8x\n", (void *)addr, *addr); for (; addr < (LispPTR *)btrailer; addr++) printf("%16p %8x\n", (void *)addr, *addr);
printf("%p %8x <- array trailer\n", (void *)addr, *addr); printf("%16p %8x <- array trailer\n", (void *)addr, *addr);
addr++; addr++;
for (; addr < (LispPTR *)btrailer + 20; addr++) printf("%p %8x\n", (void *)addr, *addr); for (; addr < (LispPTR *)btrailer + 20; addr++) printf("%16p %8x\n", (void *)addr, *addr);
} }

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; struct gc_ovfl *oventry;
LispPTR tmp; LispPTR tmp;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -15,7 +15,10 @@
#include <stdio.h> // for perror, fprintf, printf, stderr, sprintf #include <stdio.h> // for perror, fprintf, printf, stderr, sprintf
#include <stdlib.h> // for exit, free, malloc #include <stdlib.h> // for exit, free, malloc
#include <string.h> // for memset #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/stat.h> // for stat, fstat
#include <sys/types.h> // for off_t #include <sys/types.h> // for off_t
#include <unistd.h> // for lseek, read, close, getpagesize #include <unistd.h> // for lseek, read, close, getpagesize

View File

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

View File

@@ -229,7 +229,11 @@ int display_max = 65536 * 16 * 2;
/* diagnostic flag for sysout dumping */ /* diagnostic flag for sysout dumping */
extern unsigned maxpages; 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 */ unsigned sysout_size = 0; /* ditto */
int flushing = FALSE; /* see dbprint.h if set, all debug/trace printing will call fflush(stdout) after each printf */ int flushing = FALSE; /* see dbprint.h if set, all debug/trace printing will call fflush(stdout) after each printf */
@@ -239,7 +243,7 @@ int flushing = FALSE; /* see dbprint.h if set, all debug/trace printing will cal
extern DspInterface currentdsp; extern DspInterface currentdsp;
#endif /* DOS || XWINDOW */ #endif /* DOS || XWINDOW */
#ifdef SDL #ifdef SDL
extern int init_SDL(char*, int, int, int); #include "sdldefs.h" /* for init_SDL */
#endif #endif
extern const time_t MDate; extern const time_t MDate;
extern int nokbdflag; extern int nokbdflag;
@@ -284,6 +288,8 @@ const char *helpstring =
-info Print general info about the system\n\ -info Print general info about the system\n\
-help Print this message\n\ -help Print this message\n\
-pixelscale <n> The amount of pixels to show for one Medley screen pixel.\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\ -sc[reen] <w>x<h>] The Medley screen geometry\n\
-t <title> The window title\n\ -t <title> The window title\n\
-title <title> The window title\n"; -title <title> The window title\n";
@@ -312,6 +318,21 @@ const char *nethubHelpstring = "";
extern int insnsCountdownForTimerAsyncEmulation; extern int insnsCountdownForTimerAsyncEmulation;
#endif #endif
#if defined(XWINDOW) || defined(SDL)
char foregroundColorName[64] = {0};
extern char foregroundColorName[64];
char backgroundColorName[64] = {0};
extern char backgroundColorName[64];
#endif
char windowTitle[255] = "Medley";
extern char windowTitle[255];
int lispDisplayRequestedWidth = 1024;
extern int lispDisplayRequestedWidth;
int lispDisplayRequestedHeight = 768;
extern int lispDisplayRequestedHeight;
int pixelScale = 1;
extern int pixelScale;
/************************************************************************/ /************************************************************************/
/* */ /* */
/* M A I N E N T R Y P O I N T */ /* M A I N E N T R Y P O I N T */
@@ -326,9 +347,6 @@ int main(int argc, char *argv[])
extern int TIMER_INTERVAL; extern int TIMER_INTERVAL;
extern fd_set LispReadFds; extern fd_set LispReadFds;
long tmpint; long tmpint;
int width = 1024, height = 768;
int pixelscale = 1;
char *windowtitle = "Medley";
#ifdef MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE #ifdef MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE
if (dld_find_executable(argv[0]) == 0) { if (dld_find_executable(argv[0]) == 0) {
@@ -338,6 +356,24 @@ int main(int argc, char *argv[])
} }
#endif /* MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE */ #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);
}
#ifdef XWINDOW #ifdef XWINDOW
read_Xoption(&argc, argv); read_Xoption(&argc, argv);
#endif /* XWINDOW */ #endif /* XWINDOW */
@@ -345,17 +381,6 @@ int main(int argc, char *argv[])
save_argc = argc; save_argc = argc;
save_argv = argv; 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; i = 1;
if (argv[i] && ((strcmp(argv[i], "-info") == 0) || (strcmp(argv[i], "-INFO") == 0))) { if (argv[i] && ((strcmp(argv[i], "-info") == 0) || (strcmp(argv[i], "-INFO") == 0))) {
@@ -368,35 +393,23 @@ int main(int argc, char *argv[])
exit(0); 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 */ 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... */ /* -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) { if (argc > ++i) {
errno = 0; errno = 0;
tmpint = strtol(argv[i], (char **)NULL, 10); tmpint = strtol(argv[i], (char **)NULL, 10);
@@ -460,7 +473,7 @@ int main(int argc, char *argv[])
#ifdef SDL #ifdef SDL
else if ((strcmp(argv[i], "-sc") == 0) || (strcmp(argv[i], "-SC") == 0)) { else if ((strcmp(argv[i], "-sc") == 0) || (strcmp(argv[i], "-SC") == 0)) {
if (argc > ++i) { if (argc > ++i) {
int read = sscanf(argv[i], "%dx%d", &width, &height); int read = sscanf(argv[i], "%dx%d", &lispDisplayRequestedWidth, &lispDisplayRequestedHeight);
if(read != 2) { if(read != 2) {
(void)fprintf(stderr, "Could not parse -sc argument %s\n", argv[i]); (void)fprintf(stderr, "Could not parse -sc argument %s\n", argv[i]);
exit(1); exit(1);
@@ -471,7 +484,7 @@ int main(int argc, char *argv[])
} }
} else if ((strcmp(argv[i], "-pixelscale") == 0) || (strcmp(argv[i], "-PIXELSCALE") == 0)) { } else if ((strcmp(argv[i], "-pixelscale") == 0) || (strcmp(argv[i], "-PIXELSCALE") == 0)) {
if (argc > ++i) { if (argc > ++i) {
int read = sscanf(argv[i], "%d", &pixelscale); int read = sscanf(argv[i], "%d", &pixelScale);
if(read != 1) { if(read != 1) {
(void)fprintf(stderr, "Could not parse -pixelscale argument %s\n", argv[i]); (void)fprintf(stderr, "Could not parse -pixelscale argument %s\n", argv[i]);
exit(1); exit(1);
@@ -483,13 +496,26 @@ int main(int argc, char *argv[])
} else if ((strcmp(argv[i], "-t") == 0) || (strcmp(argv[i], "-T") == 0) } else if ((strcmp(argv[i], "-t") == 0) || (strcmp(argv[i], "-T") == 0)
|| (strcmp(argv[i], "-title") == 0) || (strcmp(argv[i], "-TITLE") == 0)) { || (strcmp(argv[i], "-title") == 0) || (strcmp(argv[i], "-TITLE") == 0)) {
if (argc > ++i) { if (argc > ++i) {
windowtitle = argv[i]; strncpy(windowTitle, argv[i], sizeof(windowTitle) - 1);
} else { } else {
(void)fprintf(stderr, "Missing argument after -title\n"); (void)fprintf(stderr, "Missing argument after -title\n");
exit(1); 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 */ #endif /* SDL */
/* Can only do this under SUNOs, for now */ /* Can only do this under SUNOs, for now */
else if (!strcmp(argv[i], "-E")) { /**** ethernet info ****/ else if (!strcmp(argv[i], "-E")) { /**** ethernet info ****/
@@ -610,6 +636,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. */ /* Sanity checks. */
#ifdef DOS #ifdef DOS
probemouse(); /* See if the mouse is connected. */ probemouse(); /* See if the mouse is connected. */
@@ -649,13 +716,12 @@ int main(int argc, char *argv[])
make_dsp_instance(currentdsp, 0, 0, 0, 1); /* All defaults the first time */ make_dsp_instance(currentdsp, 0, 0, 0, 1); /* All defaults the first time */
#endif /* DOS || XWINDOW */ #endif /* DOS || XWINDOW */
#if defined(SDL) #if defined(SDL)
init_SDL(windowtitle, width, height, pixelscale); init_SDL(windowTitle, lispDisplayRequestedWidth, lispDisplayRequestedHeight, pixelScale);
#endif /* SDL */ #endif /* SDL */
/* Load sysout to VM space and returns real sysout_size(not 0) */ /* Load sysout to VM space and returns real sysout_size(not 0) */
sysout_size = sysout_loader(sysout_name, sysout_size); sysout_size = sysout_loader(sysout_name, sysout_size);
build_lisp_map(); /* built up map */ build_lisp_map(); /* build up map */
init_ifpage(sysout_size); /* init interface page */ init_ifpage(sysout_size); /* init interface page */
init_iopage(); init_iopage();
init_miscstats(); init_miscstats();

View File

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

View File

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

View File

@@ -419,7 +419,7 @@ loop:
/* */ /* */
/************************************************************************/ /************************************************************************/
void newColorizeFont8(PILOTBBT *pbt, u_char backcolor, u_char forecolor, LispPTR srctype, LispPTR ope) static void newColorizeFont8(PILOTBBT *pbt, u_char backcolor, u_char forecolor, LispPTR srctype, LispPTR ope)
{ {
DLword *nbase; DLword *nbase;
u_char *dbase; u_char *dbase;

View File

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

949
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 "commondefs.h" // for error
#include "conspagedefs.h" // for cons #include "conspagedefs.h" // for cons
#include "gcdata.h" // for ADDREF, GCLOOKUP #include "gcdata.h" // for ADDREF, GCLOOKUP
#include "gchtfinddefs.h" // for htfind, rec_htfind
#include "gcfinaldefs.h" // for makefreearrayblock, mergebackward #include "gcfinaldefs.h" // for makefreearrayblock, mergebackward
#include "ifpage.h" // for IFPAGE, MACHINETYPE_MAIKO #include "ifpage.h" // for IFPAGE, MACHINETYPE_MAIKO
#include "lispemul.h" // for LispPTR, NIL, GETFPTOVP, INTSTAT, ATOM_T #include "lispemul.h" // for LispPTR, NIL, GETFPTOVP, INTSTAT, ATOM_T

View File

@@ -64,6 +64,11 @@
#include "uutilsdefs.h" // for suspend_lisp, check_unix_password, unix_fu... #include "uutilsdefs.h" // for suspend_lisp, check_unix_password, unix_fu...
#include "vmemsavedefs.h" // for lisp_finish, vmem_save0 #include "vmemsavedefs.h" // for lisp_finish, vmem_save0
#ifdef COLOR
#include "rawcolordefs.h"
#include "llcolordefs.h"
#endif
extern LispPTR *PENDINGINTERRUPT68k; extern LispPTR *PENDINGINTERRUPT68k;
/***********************************************************/ /***********************************************************/

View File

@@ -683,9 +683,10 @@ int print_opcode(int pc, DLbyte *addr, struct fnhead *fnobj) {
extern unsigned int oplength[256]; extern unsigned int oplength[256];
int len = oplength[op] + 1; int len = oplength[op] + 1;
printf(" 0%o (0x%x) ", pc, pc); printf(" 0%04o (0x%04x) ", pc, pc);
for (i = 0; i < len; i++) printf("%o ", 0xFF & GETBYTE(addr + i)); for (i = 0; i < len; i++) printf("%4o", 0xFF & GETBYTE(addr + i));
printf(" %s", opcode_table[op]); for (; i < 9; i++) printf(" ");
printf("%s", opcode_table[op]);
switch (op) { switch (op) {
case 0: case 0:

View File

@@ -49,34 +49,33 @@
#define vfork fork #define vfork fork
#endif #endif
#include "lispemul.h" #include "version.h" // for BIGVM
#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 "display.h" #include "adr68k.h" // for NativeAligned4FromStackOffset, LAddr...
#include "bitblt.h" #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 #ifdef MAIKO_ENABLE_ETHERNET
#include "etherdefs.h" #include "etherdefs.h"
#endif #endif
@@ -452,6 +451,22 @@ LispPTR uraid_commands(void) {
} }
print(*((LispPTR *)GetVALCELL68k(index))); print(*((LispPTR *)GetVALCELL68k(index)));
break; 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 */ case 'd': /* DEFCELL */
if (URaid_argnum != 2) { if (URaid_argnum != 2) {
printf("GETD: d litatom\n"); printf("GETD: d litatom\n");

View File

@@ -26,6 +26,7 @@
static XColor cursor_fore_xcsd, cursor_back_xcsd, xced; static XColor cursor_fore_xcsd, cursor_back_xcsd, xced;
extern Colormap Colors; extern Colormap Colors;
extern char cursorColor[255];
extern DspInterface currentdsp; extern DspInterface currentdsp;
/* a simple linked list to remember X cursors */ /* 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) */ 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); XAllocNamedColor(dsp->display_id, Colors, "white", &cursor_back_xcsd, &xced);
XUNLOCK(dsp); /* OK to take signals again */ XUNLOCK(dsp); /* OK to take signals again */

View File

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

View File

@@ -53,6 +53,7 @@ static XrmOptionDescRec opTable[] = {
{"-fg", "*foreground", XrmoptionSepArg, (XPointer)NULL}, {"-fg", "*foreground", XrmoptionSepArg, (XPointer)NULL},
{"-background", "*background", XrmoptionSepArg, (XPointer)NULL}, {"-background", "*background", XrmoptionSepArg, (XPointer)NULL},
{"-bg", "*background", XrmoptionSepArg, (XPointer)NULL}, {"-bg", "*background", XrmoptionSepArg, (XPointer)NULL},
{"-cursorColor", "*cursorColor", XrmoptionSepArg, (XPointer)NULL},
{"-title", "*title", XrmoptionSepArg, (XPointer)NULL}, {"-title", "*title", XrmoptionSepArg, (XPointer)NULL},
{"-t", "*title", XrmoptionSepArg, (XPointer)NULL}, {"-t", "*title", XrmoptionSepArg, (XPointer)NULL},
{"-icontitle", "*icontitle", XrmoptionSepArg, (XPointer)NULL}, {"-icontitle", "*icontitle", XrmoptionSepArg, (XPointer)NULL},
@@ -80,12 +81,17 @@ extern char Display_Name[128];
char Display_Name[128]; char Display_Name[128];
extern char iconpixmapfile[1024]; extern char iconpixmapfile[1024];
char iconpixmapfile[1024]; char iconpixmapfile[1024];
extern char Window_Title[255]; extern char iconTitle[255];
char Window_Title[255]; char iconTitle[255];
extern char Icon_Title[255]; extern char cursorColor[255];
char Icon_Title[255]; char cursorColor[255] = {0};
extern char foregroundColorName[64];
extern char backgroundColorName[64];
extern char windowTitle[255];
extern char sysout_name[];
extern char sysout_name_cl[];
extern char sysout_name_xrm[];
extern unsigned sysout_size; extern unsigned sysout_size;
extern int for_makeinit, please_fork, noscroll; extern int for_makeinit, please_fork, noscroll;
/* diagnostic flag for sysout dumping */ /* 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, " [-sysout] [<sysout>] -path to the Medley image\n");
(void)fprintf(stderr, " -h[elp] -prints this text\n"); (void)fprintf(stderr, " -h[elp] -prints this text\n");
(void)fprintf(stderr, " -info -prints configuration info\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, " -d[isplay] <host>:<display>.<screen>\n");
(void)fprintf(stderr, (void)fprintf(stderr,
" -g[eometry] <geom> -size & placement for the medley window on your X " " -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]); print_Xusage(argv[0]);
} }
sysout_name[0] = '\0'; if (XrmGetResource(commandlineDB, "ldex.sysout", "Ldex.Sysout", str_type, &value) == True) {
if (*argc == 2) { /* There was probably a sysoutarg */ /* Get Sysout from command line only */
(void)strncpy(sysout_name, argv[1], PATH_MAX - 1); (void)strncpy(sysout_name_cl, value.addr, value.size);
} 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';
} }
/* In order to access other DB's we have to open the main display now */ /* In order to access other DB's we have to open the main display now */
@@ -244,23 +242,19 @@ void read_Xoption(int *argc, char *argv[])
(void)XrmMergeDatabases(commandlineDB, &rDB); (void)XrmMergeDatabases(commandlineDB, &rDB);
if (XrmGetResource(rDB, "ldex.sysout", "Ldex.Sysout", str_type, &value) == True) { if (XrmGetResource(rDB, "ldex.sysout", "Ldex.Sysout", str_type, &value) == True) {
/* Get Sysout */ /* Get Sysout from x resource manager */
(void)strncpy(sysout_name, value.addr, value.size); (void)strncpy(sysout_name_xrm, value.addr, value.size);
}
if (sysout_name[0] == '\0') {
(void)fprintf(stderr, "Couldn't find a sysout to run;\n");
print_Xusage(argv[0]);
} }
if (XrmGetResource(rDB, "ldex.title", "Ldex.Title", str_type, &value) == True) { if (XrmGetResource(rDB, "ldex.title", "Ldex.Title", str_type, &value) == True) {
(void)strncpy(Window_Title, value.addr, value.size); (void)strncpy(windowTitle, value.addr, sizeof(windowTitle) - 1);
} else { } else {
(void)strcpy(Window_Title, WINDOW_NAME); (void)strncpy(windowTitle, WINDOW_NAME, sizeof(windowTitle) - 1);
} }
if (XrmGetResource(rDB, "ldex.icontitle", "Ldex.icontitle", str_type, &value) == True) { if (XrmGetResource(rDB, "ldex.icontitle", "Ldex.icontitle", str_type, &value) == True) {
(void)strncpy(Icon_Title, value.addr, value.size); (void)strncpy(iconTitle, value.addr, value.size);
} else { } else {
(void)strcpy(Icon_Title, "Medley"); (void)strcpy(iconTitle, "Medley");
} }
if (XrmGetResource(rDB, "ldex.iconbitmap", "Ldex.Iconbitmap", str_type, &value) == True) { if (XrmGetResource(rDB, "ldex.iconbitmap", "Ldex.Iconbitmap", str_type, &value) == True) {
@@ -283,6 +277,18 @@ void read_Xoption(int *argc, char *argv[])
(void)strcpy(tmp, ""); /* Clear the string */ (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) { if (XrmGetResource(rDB, "ldex.NoFork", "Ldex.NoFork", str_type, &value) == True) {
please_fork = 0; please_fork = 0;
} }