1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-03-16 14:57:20 +00:00

Compare commits

..

5 Commits

Author SHA1 Message Date
Nick Briggs
06399b0cf8 Declares correct size for scratch version string storage 2025-07-25 14:27:22 -07:00
Nick Briggs
88dea29837 Replaces LispStringToCString macro with static inline procedure 2025-07-25 14:27:22 -07:00
Nick Briggs
feac148fb4 Adds error returns for case where new file version would exceed MAXVERSION 2025-07-25 14:27:22 -07:00
Nick Briggs
a8f968f32d Replaces ConcDirAndName and ConcNameAndVersion macros with static inline procedures.
These are used in many places so code bloat can be reduced by using procedures.
2025-07-25 14:27:22 -07:00
Nick Briggs
5060cae998 Improves parsing of Unix format file names, updates comments
* Adds a (static inline) helper, parse_file_version() to version parsing code.
  - Removes handling of "filename%" as version 0 (version 0 is not valid)
  - Adds handling of Alto/IFS version "filename!nnn"
  - Improves robustness of version parsing (no integer overflow errors)

* Replaces private FNAMETOOLONG error code with ENAMETOOLONG standard error.

* Replaces tests for "magic numbers" with standard ERRNO values
  (ENOENT, EXDEV) in error case for rename() operations.

* Reduces storage requirement for versions from 16 bytes to 10 bytes to
  match the maximum acceptable version number, "999999999".

* Updates various code comments to be correct and clearer.
2025-07-25 14:27:22 -07:00
53 changed files with 1698 additions and 1346 deletions

View File

@@ -12,9 +12,7 @@ FROM ubuntu:22.04
SHELL ["/bin/bash", "-c"]
USER root:root
# Install build tools
RUN apt-get update \
&& apt-get install -y build-essential gcc pkgconf make clang cmake \
&& apt-get install -y libx11-dev libbsd-dev libpcap-dev
RUN apt-get update && apt-get install -y make clang libx11-dev gcc
USER root
WORKDIR /root
ENTRYPOINT /bin/bash

View File

@@ -13,7 +13,7 @@ jobs:
matrix:
os: [macos-11, macos-12, ubuntu-22.04, ubuntu-20.04]
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v3
- name: Install X11 dependencies on MacOS
if: ${{ runner.os == 'macOS'}}
run: brew install --cask xquartz
@@ -28,7 +28,7 @@ jobs:
# runs-on: [self-hosted, linux, ARM]
# if: ${{ github.repository == 'Interlisp/maiko' }}
# steps:
# - uses: actions/checkout@v6
# - uses: actions/checkout@v3
# - name: Build
# working-directory: bin
# run: ./makeright x
@@ -41,7 +41,7 @@ jobs:
env:
BUILD_TYPE: Release
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v3
- name: Show CMake version
run: cmake --version
- name: Install X11 dependencies on MacOS

View File

@@ -34,7 +34,7 @@ jobs:
steps:
# Checkout maiko
- name: Checkout maiko
uses: actions/checkout@v6
uses: actions/checkout@v3
# Setup docker environment variables
- name: Setup Docker Environment Variables
@@ -49,18 +49,18 @@ jobs:
# Setup the Docker Machine Emulation environment.
- name: Set up QEMU
uses: docker/setup-qemu-action@v4
uses: docker/setup-qemu-action@master
with:
platforms: linux/amd64,linux/arm64,linux/arm/v7
# Setup the Docker Buildx funtion
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v4
uses: docker/setup-buildx-action@master
# Login to ghcr.io
- name: Login to GitHub Container Registry
uses: docker/login-action@v4
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
@@ -71,7 +71,7 @@ jobs:
#
- name: Build Docker Images for Push to GHCR
if: ${{ true }}
uses: docker/build-push-action@v7
uses: docker/build-push-action@v4
with:
builder: ${{ steps.buildx.outputs.name }}
build-args: |

View File

@@ -123,7 +123,7 @@ jobs:
steps:
# Checkout the actions for this repo owner
- name: Checkout Actions
uses: actions/checkout@v6
uses: actions/checkout@v4
with:
repository: ${{ github.repository_owner }}/.github
path: ./Actions_${{ github.sha }}
@@ -157,7 +157,7 @@ jobs:
steps:
# Checkout the actions for this repo owner
- name: Checkout Actions
uses: actions/checkout@v6
uses: actions/checkout@v4
with:
repository: ${{ github.repository_owner }}/.github
path: ./Actions_${{ github.sha }}
@@ -165,7 +165,7 @@ jobs:
# Checkout the branch
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v4
# Setup release tag
- name: Setup Release Tag
@@ -185,14 +185,14 @@ jobs:
# Setup the Docker Machine Emulation environment.
- name: Set up QEMU
uses: docker/setup-qemu-action@v4
uses: docker/setup-qemu-action@v2
with:
platforms: linux/amd64,linux/arm64,linux/arm/v7
# Setup the Docker Buildx funtion
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v4
uses: docker/setup-buildx-action@v2
# Do the Docker Build using the Dockerfile in the repository we
# checked out. Save the results in a directory under /tmp to be used
@@ -204,7 +204,7 @@ jobs:
# Dockerfile, NOT HERE IN THE WORKFLOW.
#
- name: Build Docker Image and Save It Locally
uses: docker/build-push-action@v7
uses: docker/build-push-action@v4
with:
builder: ${{ steps.buildx.outputs.name }}
build-args: |
@@ -246,7 +246,7 @@ jobs:
# Push Release to github
- name: Push the release
uses: ncipollo/release-action@v1.21.0
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifacts:
@@ -280,11 +280,11 @@ jobs:
# Checkout the branch
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v4
# Checkout the actions for this repo owner
- name: Checkout Actions
uses: actions/checkout@v6
uses: actions/checkout@v4
with:
repository: ${{ github.repository_owner }}/.github
path: ./Actions_${{ github.sha }}
@@ -376,7 +376,7 @@ jobs:
# Push Release
- name: Push the release
uses: ncipollo/release-action@v1.21.0
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifacts:
@@ -434,13 +434,13 @@ jobs:
# Checkout the branch
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v4
with:
path: cygwin\maiko
# Checkout the actions for this repo owner
- name: Checkout Actions
uses: actions/checkout@v6
uses: actions/checkout@v4
with:
repository: ${{ github.repository_owner }}/.github
path: ./Actions_${{ github.sha }}
@@ -470,7 +470,7 @@ jobs:
# Push Release to github
- name: Push the release
uses: ncipollo/release-action@v1.21.0
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifacts:
@@ -501,7 +501,7 @@ jobs:
# Checkout the actions for this repo owner
- name: Checkout Actions
uses: actions/checkout@v6
uses: actions/checkout@v4
with:
repository: ${{ github.repository_owner }}/.github
path: ./Actions_${{ github.sha }}
@@ -530,7 +530,7 @@ jobs:
# Checkout the maiko branch
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v4
# Setup release tag
- name: Setup Release Tag
@@ -547,7 +547,7 @@ jobs:
# Push Release to github
- name: Push the release
uses: ncipollo/release-action@v1.21.0
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifacts: ${{ steps.tag.outputs.release_tag }}-emscripten.tgz
@@ -573,7 +573,7 @@ jobs:
steps:
# Checkout the actions for this repo owner
- name: Checkout Actions
uses: actions/checkout@v6
uses: actions/checkout@v4
with:
repository: ${{ github.repository_owner }}/.github
path: ./Actions_${{ github.sha }}

View File

@@ -1,5 +1,6 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.15)
PROJECT(maiko C)
SET(CMAKE_EXPORT_COMPILE_COMMANDS ON)
SET(CMAKE_C_STANDARD 99)
@@ -36,12 +37,6 @@ IF(NEED_LIB_M)
SET(MAIKO_LIBRARIES m)
ENDIF()
IF (CMAKE_SYSTEM_NAME STREQUAL "Linux")
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBBSD-OVERLAY REQUIRED IMPORTED_TARGET "libbsd-overlay")
SET(MAIKO_LIBRARIES ${MAIKO_LIBRARIES} PkgConfig::LIBBSD-OVERLAY)
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)
@@ -369,6 +364,7 @@ SET(MAIKO_HDRS
inc/lispemul.h
inc/lispmap.h
inc/lispver1.h
inc/lispver2.h
inc/llcolordefs.h
inc/lldsp.h
inc/llstkdefs.h
@@ -453,7 +449,6 @@ ADD_CUSTOM_COMMAND(OUTPUT vdate.c
ADD_EXECUTABLE(lde src/ldeboot.c src/unixfork.c)
TARGET_COMPILE_DEFINITIONS(lde PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(lde PRIVATE inc)
TARGET_LINK_LIBRARIES(lde ${MAIKO_LIBRARIES})
IF(MAIKO_DISPLAY_X11)
# Tell it that the X11 launcher is available.
TARGET_COMPILE_DEFINITIONS(lde PRIVATE ${MAIKO_DISPLAY_X11_DEFINITIONS})
@@ -534,21 +529,3 @@ TARGET_INCLUDE_DIRECTORIES(setsout PRIVATE inc)
ADD_EXECUTABLE(tstsout src/tstsout.c src/byteswap.c)
TARGET_COMPILE_DEFINITIONS(tstsout PRIVATE ${MAIKO_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(tstsout PRIVATE inc)
# Installation Targets
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/../" CACHE PATH "Installation prefix" FORCE)
ENDIF()
execute_process(
COMMAND sh -c "echo $(../bin/osversion).$(../bin/machinetype)"
OUTPUT_VARIABLE release_dir
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
OUTPUT_STRIP_TRAILING_WHITESPACE
)
INSTALL(TARGETS lde DESTINATION ${release_dir})
IF(MAIKO_DISPLAY_X11)
INSTALL(TARGETS ldex ldeinit DESTINATION ${release_dir})
ENDIF()
IF(MAIKO_DISPLAY_SDL)
INSTALL(TARGETS ldesdl DESTINATION ${release_dir})
ENDIF()

View File

@@ -37,7 +37,6 @@ $ ./makeright x
* The build will (attempt to) detect the OS-type and cpu-type. It will build binaries `lde` and `ldex` in `../`_`ostype.cputype`_ (with .o files in `../`_`ostype.cputype-x`_. For example, Linux on a 64-bit x86 will use `linux.x86_64`, while macOS 11 on a (new M1) Mac will use `darwin.aarch64`.
* If you prefer `gcc` over `clang`, you will need to edit the makefile fragment for your configuration (`makefile-ostype.cputype-x`) and comment out the line (with a #) that defines `CC` as `clang` and uncomment the line (delete the #) for the line that defines `CC` as `gcc`.
* If you want to do your own loadups to construct sysout files (see [the Medley repository](https://github.com/Interlisp/medley) for details), you also need the `ldeinit` binary, which you can build using `./makeright init`.
### Building with CMake
We provide a `CMakeLists.txt` which provides mostly matching build capabilities to the `make` setup.

View File

@@ -1,33 +0,0 @@
# Common Options for All Linuxes
include linux-compiler.mk
ifeq ($(USE_LIBBSD),T)
include linux-libbsd.mk
else
BSD_CFLAGS :=
BSD_LDFLAGS :=
endif
ifeq ($(USE_DISPLAY),x)
include linux-x.mk
DEFAULT_TARGET := ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex
endif
ifeq ($(USE_DISPLAY),sdl)
include linux-sdl.mk
DEFAULT_TARGET := ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl
endif
ifeq ($(USE_DISPLAY),init)
include linux-x.mk
DEFAULT_TARGET := ../$(OSARCHNAME)/ldeinit
endif
OPTFLAGS ?= -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) $(BSD_CFLAGS) $(ADDITIONAL_DFLAGS)
LDFLAGS = $(XLDFLAGS) -lc -lm $(BSD_LDFLAGS)
LDELDFLAGS = $(XLDFLAGS) -lc -lm $(BSD_LDFLAGS)
OBJECTDIR = ../$(RELEASENAME)/
default: $(DEFAULT_TARGET)

View File

@@ -1,40 +0,0 @@
# Select whether to use clang or gcc
# Priority
# 1. If -DUSE_GCC or -DUSE_CLANG on command line (but not both) use the requested compiler.
# 2. If one compiler is installed but not the other, use the installed compiler.
# 3. Use clang
EXISTS_GCC := $(shell command -v gcc)
EXISTS_CLANG := $(shell command -v clang)
ifeq ($(or $(EXISTS_GCC),$(EXISTS_CLANG)),)
$(error "Cannot find compiler: neither gcc nor clang. Exiting.")
endif
ifneq ($(and $(USE_CLANG),$(USE_GCC)),)
$(error "Cannot use both USE_CLANG=T and USE_GCC=T. Exiting.")
endif
COMPILER :=
ifdef USE_CLANG
ifeq ($(EXISTS_CLANG),)
$(error "USE_CLANG=T given, but cannot find the clang compiler. Exiting")
endif
COMPILER := clang
endif
ifdef USE_GCC
ifeq ($(EXISTS_GCC),)
$(error "USE_GCC=T given, but cannot find the gcc compiler. Exiting")
endif
COMPILER := gcc
endif
ifeq ($(COMPILER),)
ifneq ($(EXISTS_CLANG),)
COMPILER := clang
else
COMPILER := gcc
endif
endif
ifeq ($(COMPILER),gcc)
CC := gcc $(GCC_CFLAGS)
else
CC := clang $(CLANG_CFLAGS)
endif

View File

@@ -1,24 +0,0 @@
# Check that pkg-config is available and that the libbsd-dev package is installed
# If one of these is missing, error out
# FGH 2026-03-08
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),cleanup)
CHK_PKG_CONFIG := $(shell command -v pkg-config)
ifeq ($(CHK_PKG_CONFIG),)
# pkg-config not found, print an error
$(error "pkg-config not found. Please install it to build this project.")
endif
CHK_LIBBSD_DEV := $(shell pkg-config --exists libbsd-overlay && echo true)
ifneq ($(CHK_LIBBSD_DEV),true)
$(error "libbsd-dev (or libbsd-devel) package not found. Please install it to build this project.")
endif
endif
endif
BSD_CFLAGS = $(shell pkg-config --cflags libbsd-overlay)
BSD_LDFLAGS = $(shell pkg-config --libs libbsd-overlay)

View File

@@ -1,14 +0,0 @@
# Common Options for Linux using SDL instead of X Windows
XFILES = $(OBJECTDIR)sdl.o
#
# 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
XLDFLAGS ?= -lSDL2

View File

@@ -1,17 +0,0 @@
# Common Options for Linux with X Windows
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XLDFLAGS = -L/usr/X11/lib -lX11

View File

@@ -1,9 +1,26 @@
# Options for Linux, Intel x86_64 and X-Window
GCC_CFLAGS := -m64 $(GCC_CFLAGS) -I/usr/local/include
CLANG_CFLAGS := -m64 $(CLANG_CFLAGS) -I/usr/local/include
USE_DISPLAY=sdl
USE_LIBBSD=F
XLDFLAGS := -L/usr/local/lib -lSDL2
CC = gcc -m64 $(GCC_CFLAGS) -I/usr/local/include
#CC = clang -m64 $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)sdl.o
#
# For SDL version 2
# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS
#
XFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lm -L/usr/local/lib -lSDL2
#
LDELDFLAGS =
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl

View File

@@ -1,9 +1,28 @@
# Options for Cygwin, Intel x86_64 and X-Window
# Options for Linux, Intel x86_64 and X-Window
GCC_CFLAGS := -m64 $(GCC_CFLAGS)
CLANG_CFLAGS := -m64 $(CLANG_CFLAGS)
USE_DISPLAY=x
USE_LIBBSD=F
#CC = gcc -m64 $(GCC_CFLAGS)
CC = clang -m64 $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex

View File

@@ -18,7 +18,7 @@ SRCFILES = conspage.c gcoflow.c shift.c dbgtool.c gcr.c gcrcell.c llstk.
OFILES = conspage.obj gcoflow.obj shift.obj dbgtool.obj gcr.obj gcrcell.obj llstk.obj gcscan.obj loopsops.obj storage.obj allocmds.obj dir.obj gvar2.obj lowlev1.obj subr.obj arithops.obj lowlev2.obj subr0374.obj doscomm.obj hardrtn.obj lsthandl.obj sxhash.obj draw.obj main.obj testtool.obj array.obj dsk.obj inet.obj misc7.obj timer.obj array2.obj dspif.obj initdsp.obj miscn.obj typeof.obj array3.obj initkbd.obj ubf1.obj array4.obj dspsubrs.obj initsout.obj mkatom.obj ubf2.obj array5.obj eqf.obj intcall.obj mkcell.obj ubf3.obj array6.obj ether.obj ufn.obj atom.obj findkey.obj kbdsubrs.obj mouseif.obj ufs.obj bbtsub.obj foreign.obj keyevent.obj unixcomm.obj bin.obj fp.obj binds.obj fvar.obj mvs.obj unwind.obj bitblt.obj gc.obj uraid.obj blt.obj gc2.obj kprint.obj osmsg.obj usrsubr.obj byteswap.obj gcarray.obj perrno.obj uutils.obj carcdr.obj asmbbt.obj gccode.obj vars3.obj gcfinal.obj ldsout.obj return.obj vmemsave.obj chardev.obj gchtfind.obj lineblt8.obj rpc.obj xc.obj common.obj gcmain3.obj lisp2c.obj rplcons.obj z2.obj vdate.obj $(COLORFILES) $(ARCHFILES) $(LPFILES)
HFILES = address.h adr68k.h arithopsdefs.h arith.h cell.h dbprint.h display.h dspif.h ifpage.h iopage.h lispemul.h lispmap.h lsptypes.h miscstat.h lspglob.h array.h bb.h bbtmacro.h debug.h devconf.h dspdata.h fast_dsp.h gcdata.h initatms.h inlinec.h keyboard.h lispver1.h lldsp.h locfile.h medleyfp.h mouseif.h my.h opcodes.h osmsgprint.h pilotbbt.h print.h retmacro.h stack.h stream.h subrs.h timeout.h tos1defs.h tosfns.h tosret.h xdefs.h xbitmaps.h xkeymap.h
HFILES = address.h adr68k.h arithopsdefs.h arith.h cell.h dbprint.h display.h dspif.h ifpage.h iopage.h lispemul.h lispmap.h lsptypes.h miscstat.h lspglob.h array.h bb.h bbtmacro.h debug.h devconf.h dspdata.h fast_dsp.h gcdata.h initatms.h inlinec.h keyboard.h lispver1.h lispver2.h lldsp.h locfile.h medleyfp.h mouseif.h my.h opcodes.h osmsgprint.h pilotbbt.h print.h retmacro.h stack.h stream.h subrs.h timeout.h tos1defs.h tosfns.h tosret.h xdefs.h xbitmaps.h xkeymap.h

View File

@@ -1,9 +1,29 @@
# Options for Linux, aarch64 processor, X windows, for INIT processing
CC = gcc $(GCC_CFLAGS)
#CC = clang $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g
DEBUGFLAGS =
ADDITIONAL_DFLAGS = $(DEBUGFLAGS) -DNOVERSION -DINIT
USE_LIBBSD=T
USE_DISPLAY=init
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
include linux-common.mk
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/ldeinit

View File

@@ -1,9 +1,29 @@
# Options for Linux, x86 processor, X windows, for INIT processing
CC = gcc $(GCC_CFLAGS)
#CC = clang $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g
DEBUGFLAGS =
ADDITIONAL_DFLAGS = $(DEBUGFLAGS) -DNOVERSION -DINIT
USE_LIBBSD=T
USE_DISPLAY=init
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT
include linux-common.mk
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/ldeinit

View File

@@ -1,9 +1,29 @@
# Options for Windows System for Linux v1, aarch64 processor, X windows, for INIT processing
CC = gcc $(GCC_CFLAGS)
#CC = clang $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g
DEBUGFLAGS =
ADDITIONAL_DFLAGS = $(DEBUGFLAGS) -DNOVERSION -DINIT -D__wsl1__
USE_LIBBSD=T
USE_DISPLAY=init
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT -D__wsl1__
include linux-common.mk
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/ldeinit

View File

@@ -1,9 +1,29 @@
# Options for Windows System for Linux v1, Intel x86_64 processor, X windows, for INIT processing
CC = gcc $(GCC_CFLAGS)
#CC = clang $(CLANG_CFLAGS)
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g
DEBUGFLAGS =
ADDITIONAL_DFLAGS = $(DEBUGFLAGS) -DNOVERSION -DINIT -D__wsl1__
USE_LIBBSD=T
USE_DISPLAY=init
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT -D__wsl1__
include linux-common.mk
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/ldeinit

View File

@@ -1,8 +1,25 @@
# Options for Linux, Intel 386/486 and SDL
GCC_CFLAGS := -m64 $(GCC_CFLAGS)
CLANG_CFLAGS := -m64 $(CLANG_CFLAGS)
USE_DISPLAY=sdl
USE_LIBBSD=T
CC = gcc -m32 $(GCC_CFLAGS)
# CC = clang $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)sdl.o
#
# For SDL version 2
# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS
#
XFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lm -lSDL2
LDELDFLAGS =
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl

View File

@@ -1,8 +1,27 @@
# Options for Linux, Intel 386/486 and X-Window
GCC_CFLAGS := -m32 $(GCC_CFLAGS)
CLANG_CFLAGS := -m32 $(CLANG_CFLAGS)
USE_DISPLAY=x
USE_LIBBSD=T
CC = gcc -m32 $(GCC_CFLAGS)
# CC = clang -m32 $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex

View File

@@ -1,6 +1,25 @@
# Options for Linux, ARM64 and SDL
USE_DISPLAY=sdl
USE_LIBBSD=T
CC = gcc $(GCC_CFLAGS)
#CC = clang $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)sdl.o
#
# For SDL version 2
# -DSDL=2 in SDLFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in SDLFLAGS and -lSDL3 in LDFLAGS
#
SDLFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(SDLFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lSDL2 -lm
LDELDFLAGS =
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl

View File

@@ -1,6 +1,27 @@
# Options for Linux, aarch64 and X-Window
USE_DISPLAY=x
USE_LIBBSD=T
CC = gcc $(GCC_CFLAGS)
#CC = clang $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex

View File

@@ -1,6 +1,25 @@
# Options for Linux, ARMv7 and SDL
USE_DISPLAY=sdl
USE_LIBBSD=T
CC = gcc $(GCC_CFLAGS)
#CC = clang $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)sdl.o
#
# For SDL version 2
# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS
#
XFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lm -lSDL2
LDELDFLAGS =
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl

View File

@@ -1,6 +1,27 @@
# Options for Linux, ARMv7 and X-Window
USE_DISPLAY=x
USE_LIBBSD=T
CC = gcc $(GCC_CFLAGS)
#CC = clang $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex

View File

@@ -1,8 +1,25 @@
# Options for Linux, Intel x86_64 and SDL
GCC_CFLAGS := -m64 $(GCC_CFLAGS)
CLANG_CFLAGS := -m64 $(CLANG_CFLAGS)
USE_DISPLAY=sdl
USE_LIBBSD=T
CC = gcc -m64 $(GCC_CFLAGS)
# CC = clang -m64 $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)sdl.o
#
# For SDL version 2
# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS
#
XFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -lm -lSDL2
LDELDFLAGS =
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl

View File

@@ -1,9 +1,28 @@
# Options for Linux, Intel x86_64 and X-Window
GCC_CFLAGS := -m64 $(GCC_CFLAGS)
CLANG_CFLAGS := -m64 $(CLANG_CFLAGS)
USE_DISPLAY=x
USE_LIBBSD=T
CC = gcc -m64 $(GCC_CFLAGS)
# CC = clang -m64 $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE)
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex

View File

@@ -340,7 +340,7 @@ $(OBJECTDIR)car-cdr.o: $(SRCDIR)car-cdr.c $(REQUIRED-INCS) \
$(OBJECTDIR)chardev.o: $(SRCDIR)chardev.c $(REQUIRED-INCS) \
$(INCDIR)lispemul.h $(INCDIR)lispmap.h \
$(INCDIR)adr68k.h $(INCDIR)lsptypes.h $(INCDIR)arith.h $(INCDIR)timeout.h \
$(INCDIR)locfile.h $(INCDIR)dbprint.h \
$(INCDIR)locfile.h $(INCDIR)lispver2.h $(INCDIR)dbprint.h \
$(INCDIR)chardevdefs.h $(INCDIR)byteswapdefs.h $(INCDIR)commondefs.h \
$(INCDIR)perrnodefs.h
$(CC) $(RFLAGS) $(SRCDIR)chardev.c -o $(OBJECTDIR)chardev.o
@@ -505,7 +505,7 @@ $(OBJECTDIR)dsk.o: $(SRCDIR)dsk.c $(REQUIRED-INCS) \
$(INCDIR)lispemul.h $(INCDIR)lispmap.h \
$(INCDIR)adr68k.h $(INCDIR)lsptypes.h $(INCDIR)lspglob.h $(INCDIR)ifpage.h \
$(INCDIR)iopage.h $(INCDIR)miscstat.h $(INCDIR)arith.h $(INCDIR)stream.h \
$(INCDIR)timeout.h $(INCDIR)locfile.h \
$(INCDIR)timeout.h $(INCDIR)locfile.h $(INCDIR)lispver2.h \
$(INCDIR)dbprint.h $(INCDIR)dskdefs.h $(INCDIR)byteswapdefs.h \
$(INCDIR)car-cdrdefs.h $(INCDIR)cell.h $(INCDIR)commondefs.h \
$(INCDIR)ufsdefs.h
@@ -515,7 +515,7 @@ $(OBJECTDIR)ufs.o: $(SRCDIR)ufs.c $(REQUIRED-INCS) \
$(INCDIR)lispemul.h $(INCDIR)lispmap.h \
$(INCDIR)adr68k.h $(INCDIR)lsptypes.h $(INCDIR)lspglob.h $(INCDIR)ifpage.h \
$(INCDIR)iopage.h $(INCDIR)miscstat.h $(INCDIR)arith.h $(INCDIR)stream.h \
$(INCDIR)timeout.h $(INCDIR)locfile.h $(INCDIR)dbprint.h \
$(INCDIR)timeout.h $(INCDIR)locfile.h $(INCDIR)lispver2.h $(INCDIR)dbprint.h \
$(INCDIR)ufsdefs.h $(INCDIR)commondefs.h $(INCDIR)dskdefs.h
$(CC) $(RFLAGS) $(SRCDIR)ufs.c -o $(OBJECTDIR)ufs.o
@@ -523,7 +523,7 @@ $(OBJECTDIR)dir.o: $(SRCDIR)dir.c $(REQUIRED-INCS) \
$(INCDIR)lispemul.h $(INCDIR)lispmap.h \
$(INCDIR)adr68k.h $(INCDIR)lsptypes.h $(INCDIR)arith.h $(INCDIR)lspglob.h \
$(INCDIR)ifpage.h $(INCDIR)iopage.h $(INCDIR)miscstat.h $(INCDIR)timeout.h \
$(INCDIR)locfile.h $(INCDIR)dirdefs.h \
$(INCDIR)locfile.h $(INCDIR)lispver2.h $(INCDIR)dirdefs.h \
$(INCDIR)commondefs.h $(INCDIR)dskdefs.h $(INCDIR)ufsdefs.h
$(CC) $(RFLAGS) $(SRCDIR)dir.c -o $(OBJECTDIR)dir.o
@@ -640,7 +640,7 @@ $(OBJECTDIR)inet.o: $(SRCDIR)inet.c $(REQUIRED-INCS) \
$(INCDIR)lispemul.h $(INCDIR)lispmap.h \
$(INCDIR)lsptypes.h $(INCDIR)arith.h $(INCDIR)emlglob.h $(INCDIR)lspglob.h \
$(INCDIR)ifpage.h $(INCDIR)iopage.h $(INCDIR)miscstat.h $(INCDIR)adr68k.h \
$(INCDIR)dbprint.h $(INCDIR)locfile.h \
$(INCDIR)dbprint.h $(INCDIR)locfile.h $(INCDIR)lispver2.h \
$(INCDIR)inetdefs.h $(INCDIR)byteswapdefs.h $(INCDIR)commondefs.h \
$(INCDIR)mkcelldefs.h
$(CC) $(RFLAGS) $(SRCDIR)inet.c -o $(OBJECTDIR)inet.o
@@ -674,7 +674,7 @@ $(OBJECTDIR)initsout.o: $(SRCDIR)initsout.c $(REQUIRED-INCS) \
$(OBJECTDIR)kbdsubrs.o: $(SRCDIR)kbdsubrs.c $(REQUIRED-INCS) \
$(INCDIR)lispemul.h $(INCDIR)kbdsubrsdefs.h \
$(INCDIR)commondefs.h $(INCDIR)xwinmandefs.h \
$(INCDIR)commondefs.h $(INCDIR)lisp2cdefs.h $(INCDIR)xwinmandefs.h \
$(INCDIR)devif.h
$(CC) $(RFLAGS) $(SRCDIR)kbdsubrs.c -o $(OBJECTDIR)kbdsubrs.o
@@ -758,7 +758,7 @@ $(OBJECTDIR)osmsg.o: $(SRCDIR)osmsg.c $(REQUIRED-INCS) \
$(INCDIR)lispemul.h $(INCDIR)lispmap.h \
$(INCDIR)adr68k.h $(INCDIR)lsptypes.h $(INCDIR)arith.h $(INCDIR)stream.h \
$(INCDIR)lspglob.h $(INCDIR)ifpage.h $(INCDIR)iopage.h $(INCDIR)miscstat.h \
$(INCDIR)timeout.h $(INCDIR)locfile.h $(INCDIR)osmsgprint.h \
$(INCDIR)timeout.h $(INCDIR)locfile.h $(INCDIR)lispver2.h $(INCDIR)osmsgprint.h \
$(INCDIR)dbprint.h $(INCDIR)commondefs.h $(INCDIR)osmsgdefs.h
$(CC) $(RFLAGS) $(SRCDIR)osmsg.c -o $(OBJECTDIR)osmsg.o
@@ -865,7 +865,7 @@ $(OBJECTDIR)unixcomm.o: $(SRCDIR)unixcomm.c $(REQUIRED-INCS) \
$(INCDIR)lspglob.h $(INCDIR)ifpage.h $(INCDIR)iopage.h $(INCDIR)miscstat.h \
$(INCDIR)cell.h $(INCDIR)stack.h $(INCDIR)arith.h $(INCDIR)dbprint.h \
$(INCDIR)timeout.h $(INCDIR)unixcommdefs.h $(INCDIR)byteswapdefs.h \
$(INCDIR)commondefs.h $(INCDIR)locfile.h
$(INCDIR)commondefs.h $(INCDIR)locfile.h $(INCDIR)lispver2.h
$(CC) $(RFLAGS) $(SRCDIR)unixcomm.c -o $(OBJECTDIR)unixcomm.o
$(OBJECTDIR)unixfork.o: $(SRCDIR)unixfork.c $(REQUIRED-INCS) \
@@ -888,7 +888,7 @@ $(OBJECTDIR)rpc.o: $(SRCDIR)rpc.c $(REQUIRED-INCS) \
$(INCDIR)lispemul.h $(INCDIR)lispmap.h \
$(INCDIR)lsptypes.h $(INCDIR)lspglob.h $(INCDIR)ifpage.h $(INCDIR)iopage.h \
$(INCDIR)miscstat.h $(INCDIR)emlglob.h $(INCDIR)adr68k.h $(INCDIR)arith.h \
$(INCDIR)locfile.h $(INCDIR)rpcdefs.h \
$(INCDIR)locfile.h $(INCDIR)lispver2.h $(INCDIR)rpcdefs.h \
$(INCDIR)commondefs.h
$(CC) $(RFLAGS) $(SRCDIR)rpc.c -o $(OBJECTDIR)rpc.o
@@ -909,7 +909,7 @@ $(OBJECTDIR)vmemsave.o: $(SRCDIR)vmemsave.c $(REQUIRED-INCS) \
$(INCDIR)lispemul.h \
$(INCDIR)lispmap.h $(INCDIR)lspglob.h $(INCDIR)ifpage.h $(INCDIR)iopage.h \
$(INCDIR)miscstat.h $(INCDIR)timeout.h $(INCDIR)adr68k.h \
$(INCDIR)lsptypes.h $(INCDIR)locfile.h $(INCDIR)dbprint.h \
$(INCDIR)lsptypes.h $(INCDIR)locfile.h $(INCDIR)lispver2.h $(INCDIR)dbprint.h \
$(INCDIR)devif.h $(INCDIR)vmemsavedefs.h $(INCDIR)byteswapdefs.h $(INCDIR)commondefs.h \
$(INCDIR)dskdefs.h $(INCDIR)initkbddefs.h $(INCDIR)perrnodefs.h \
$(INCDIR)ufsdefs.h

View File

@@ -1,7 +1,25 @@
# Options for Windows System for Linux v1, ARM64 and SDL
USE_DISPLAY=sdl
USE_LIBBSD=T
ADDITIONAL_DFLAGS := -D__wsl1__
CC = gcc $(GCC_CFLAGS)
#CC = clang $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)sdl.o
#
# For SDL version 2
# -DSDL=2 in SDLFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in SDLFLAGS and -lSDL3 in LDFLAGS
#
SDLFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(SDLFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__
LDFLAGS = -lSDL2 -lm
LDELDFLAGS =
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl

View File

@@ -1,7 +1,27 @@
# Options for Windows System for Linux v1, aarch64 and X-Window
USE_DISPLAY=x
USE_LIBBSD=T
ADDITIONAL_DFLAGS := -D__wsl1__
CC = gcc $(GCC_CFLAGS)
#CC = clang $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex

View File

@@ -1,9 +1,25 @@
# Options for Windows System for Linux v1, Intel x86_64 and SDL
GCC_CFLAGS := -m64 $(GCC_CFLAGS)
CLANG_CFLAGS := -m64 $(CLANG_CFLAGS)
USE_DISPLAY=sdl
USE_LIBBSD=T
ADDITIONAL_DFLAGS := -D__wsl1__
CC = gcc -m64 $(GCC_CFLAGS)
# CC = clang -m64 $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)sdl.o
#
# For SDL version 2
# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS
# For SDL version 3
# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS
#
XFLAGS = -DSDL=2
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__
LDFLAGS = -lm -lSDL2
LDELDFLAGS =
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl

View File

@@ -1,9 +1,28 @@
# Options for Windows System for Linux v1, Intel x86_64 and X-Window
GCC_CFLAGS := -m64 $(GCC_CFLAGS)
CLANG_CFLAGS := -m64 $(CLANG_CFLAGS)
USE_DISPLAY=x
USE_LIBBSD=T
ADDITIONAL_DFLAGS := -D__wsl1__
CC = gcc -m64 $(GCC_CFLAGS)
# CC = clang -m64 $(CLANG_CFLAGS)
include linux-common.mk
XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xbbt.o \
$(OBJECTDIR)dspif.o \
$(OBJECTDIR)xinit.o \
$(OBJECTDIR)xscroll.o \
$(OBJECTDIR)xcursor.o \
$(OBJECTDIR)xlspwin.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
OBJECTDIR = ../$(RELEASENAME)/
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex

View File

@@ -58,7 +58,7 @@ typedef struct dfinfo {
} DFINFO;
#ifdef DOS
int make_old_version(char *old, size_t oldsize, char *file);
int make_old_version(char *old, char *file);
#endif
#ifdef FSDEBUG
void print_finfo(FINFO *fp);

View File

@@ -19,9 +19,7 @@ LispPTR COM_writepage(LispPTR *args);
LispPTR COM_truncatefile(LispPTR *args);
LispPTR COM_changedir(LispPTR *args);
LispPTR COM_getfreeblock(LispPTR *args);
void conc_dir_and_name(char *dir, char *name, char *fname, size_t fname_size);
void conc_name_and_version(char *name, char *ver, char *rname, size_t rname_size);
void separate_version(char *name, size_t namesize, char *ver, size_t versize, int checkp);
void separate_version(char *name, char *ver, int checkp);
int unpack_filename(char *file, char *dir, char *name, char *ver, int checkp);
int true_name(char *path, size_t pathsize);
int true_name(char *path);
#endif

74
inc/lispver2.h Normal file
View File

@@ -0,0 +1,74 @@
#ifndef LISPVER2_H
#define LISPVER2_H 1
/* $Id: lispver2.h,v 1.2 1999/01/03 02:06:09 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved */
/* non-DOS version of LispVersionToUnixVersion */
#define LispVersionToUnixVersion(pathname) do { \
\
char *lv_cp; \
char *lv_vp; \
unsigned lv_ver; \
char lv_ver_buf[VERSIONLEN + 3]; \
\
lv_cp = pathname; \
lv_vp = NULL; \
while (*lv_cp) { \
switch (*lv_cp) { \
\
case ';': \
lv_vp = lv_cp; \
lv_cp++; \
break; \
\
case '\'': \
if (*(lv_cp + 1) != 0) lv_cp += 2; \
else lv_cp++; \
break; \
\
default: \
lv_cp++; \
break; \
} \
} \
\
if (lv_vp != NULL) { \
/* \
* A semicolon which is not quoted has been found. \
*/ \
if (*(lv_vp + 1) == 0) { \
/* \
* The empty version field. \
* This is regarded as a versionless file. \
*/ \
*lv_vp = 0; \
} else { \
NumericStringP((lv_vp + 1), YES, NO); \
YES: \
/* \
* Convert the remaining field to digit. \
*/ \
lv_ver = strtoul(lv_vp + 1, (char **)NULL, 10); \
if (lv_ver == 0) { \
/* versionless */ \
*lv_vp = 0; \
} else { \
sprintf(lv_ver_buf, ".~%u~", lv_ver); \
*lv_vp = 0; \
strcat(pathname, lv_ver_buf); \
} \
goto CONT; \
\
NO: \
strcpy(lv_ver_buf, lv_vp + 1); \
strcat(lv_ver_buf, "~"); \
*lv_vp++ = '.'; \
*lv_vp++ = '~'; \
*lv_vp = 0; \
strcat(pathname, lv_ver_buf); \
CONT: \
lv_vp--; /* Just for label */ \
} \
} \
} while (0)
#endif /* LISPVER2_H */

View File

@@ -8,8 +8,11 @@
/* Manufactured in the United States of America. */
/* */
/************************************************************************/
#include <ctype.h> /* for isdigit */
#include <errno.h>
#include <limits.h> /* for NAME_MAX */
#include <string.h> /* for strlen */
#include <sys/param.h> /* for MAXPATHLEN */
#include <dirent.h> /* for MAXNAMLEN */
#include "lispemul.h" /* for DLword */
#include "commondefs.h" /* for error */
@@ -35,8 +38,6 @@
#define PROTECTION (S_POSITIVE | 6)
#define EOL (S_POSITIVE | 7)
#define ALL (S_POSITIVE | 8)
#define INODE_LO (S_POSITIVE | 9)
#define INODE_HI (S_POSITIVE | 10)
#define ToLispTime(x) ((int)(x) + 29969152)
/* For getfileinfo. For WDATE&RDATE */
@@ -47,17 +48,18 @@
/* For getfileinfo. For WDATE&RDATE */
/* 29969152 == (timer.c)LISP_UNIX_TIME_DIFF */
/*
* Copy memory between native memory locations accounting for potential
* byte-swapping necessary when then destination is within Lisp memory space
* though the provided destination pointer is a native address within the
* Lisp space.
*/
#define MemCpyToLispFromNative(lispbuf, cbuf, len) \
do { \
char *lf_sptr = (cbuf); \
char *lf_dptr = (lispbuf); \
for (size_t lf_i = 0; lf_i < (len); lf_i++) *BYTEPTR(lf_dptr++) = *lf_sptr++; \
#define StrNCpyFromCToLisp(lispbuf, cbuf ,len) do { \
char *lf_sptr = (cbuf); \
char *lf_dptr = (lispbuf); \
for(size_t lf_i=0;lf_i<(len);lf_i++)\
GETBYTE(lf_dptr++) = *lf_sptr++; \
} while (0)
#define StrNCpyFromLispToC(cbuf , lispbuf, len) do { \
char *lf_sptr = (lispbuf); \
char *lf_dptr = (cbuf); \
for(size_t lf_i=0;lf_i<(len);lf_i++)\
*lf_dptr++ = GETBYTE(lf_sptr++); \
} while (0)
#define FGetNum(ptr, place) do { \
@@ -65,7 +67,6 @@
else if(((ptr) & SEGMASK)== S_NEGATIVE) {(place) = (int)((ptr)| 0xffff0000);}\
else {return(NIL);}} while (0)
#ifndef min
#define min(a, b) (((a) <= (b))?(a):(b))
#endif /* min */
@@ -85,51 +86,64 @@
/* */
/************************************************************************/
#ifndef BYTESWAP
static void LispStringToCString(LispPTR Lisp, char *C, size_t MaxLen) {
OneDArray *lf_arrayp;
char *lf_base, *lf_dp;
short *lf_sbase;
size_t lf_length;
lf_arrayp = (OneDArray *)NativeAligned4FromLAddr(Lisp);
lf_length = min(MaxLen - 1, lf_arrayp->fillpointer);
lf_dp = (C);
switch (lf_arrayp->typenumber) {
case THIN_CHAR_TYPENUMBER:
lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset));
strncpy(lf_dp, lf_base, lf_length);
lf_dp[lf_length] = '\0';
break;
static inline void LispStringToCString(LispPTR Lisp, char *C, size_t MaxLen)
{
OneDArray *lf_arrayp;
char *lf_base, *lf_dp;
short *lf_sbase;
size_t lf_length;
lf_arrayp = (OneDArray *)NativeAligned4FromLAddr(Lisp);
lf_length = min(MaxLen, lf_arrayp->fillpointer);
switch(lf_arrayp->typenumber)
{
case THIN_CHAR_TYPENUMBER:
lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base)))
+ ((int)(lf_arrayp->offset));
strncpy(C, lf_base, lf_length);
(C)[lf_length] = '\0';
break;
case FAT_CHAR_TYPENUMBER:
lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset));
for (size_t lf_i = 0; lf_i < (lf_length); lf_i++) *lf_dp++ = (char)(*lf_sbase++);
*lf_dp = '\0';
break;
default: error("LispStringToCString: Not a character array.\n");
}
case FAT_CHAR_TYPENUMBER:
lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base)))
+ ((int)(lf_arrayp->offset));
lf_dp = C;
for(size_t lf_i=0;lf_i<(lf_length);lf_i++)
*lf_dp++ = (char)(*lf_sbase++);
*lf_dp = '\0';
break;
default:
error("LispStringToCString: Not a character array.\n");
}
}
#else /* BYTESWAP == T CHANGED-BY-TAKE */
static void LispStringToCString(LispPTR Lisp, char *C, size_t MaxLen) {
OneDArray *lf_arrayp;
char *lf_base, *lf_dp;
short *lf_sbase;
size_t lf_length;
lf_arrayp = (OneDArray *)(NativeAligned4FromLAddr(Lisp));
lf_length = min(MaxLen - 1, lf_arrayp->fillpointer);
lf_dp = (C);
switch (lf_arrayp->typenumber) {
case THIN_CHAR_TYPENUMBER:
lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset));
for (size_t lf_i = 0; lf_i < lf_length; lf_i++) *lf_dp++ = GETBYTE(lf_base++);
break;
static inline void LispStringToCString(LispPTR Lisp, char *C, size_t MaxLen)
{
OneDArray *lf_arrayp;
char *lf_base, *lf_dp;
short *lf_sbase;
size_t lf_length;
lf_arrayp = (OneDArray *)(NativeAligned4FromLAddr(Lisp));
lf_length = min(MaxLen, lf_arrayp->fillpointer);
switch(lf_arrayp->typenumber)
{
case THIN_CHAR_TYPENUMBER:
lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base)))
+ ((int)(lf_arrayp->offset));
StrNCpyFromLispToC(C , lf_base , lf_length );
(C)[lf_length] = '\0';
break;
case FAT_CHAR_TYPENUMBER:
lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset));
for (size_t lf_ii = 0; lf_ii < lf_length; lf_ii++) *lf_dp++ = (char)(GETWORD(lf_sbase++));
break;
default: error("LispStringToCString: Not a character array.\n");
}
*lf_dp = '\0';
case FAT_CHAR_TYPENUMBER:
lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base)))
+ ((int)(lf_arrayp->offset));
lf_dp = C;
for(size_t lf_ii=0;lf_ii<(lf_length);lf_ii++,lf_sbase++)
*lf_dp++ = (char)(GETWORD(lf_sbase));
*lf_dp = '\0';
break;
default:
error("LispStringToCString: Not a character array.\n");
}
}
#endif /* BYTESWAP */
@@ -282,13 +296,13 @@ do { \
goto truetag; /* NOLINT(bugprone-macro-parentheses) */ \
} while (0)
/*
/*
* Name: LispVersionToUnixVersion
*
* Argument: char *pathname
* Xerox Lisp syntax pathname.
*
* Value: On success returns 1, otherwise 0.
* Value: If succeed, returns 1, otherwise 0.
*
* Side Effect: The version part of pathname is destructively modified.
*
@@ -301,7 +315,7 @@ do { \
* code.
* This macro should be called at the top of the routines which accept the
* file name from lisp before converting it into UNIX file name, because
* locating the version part, the information about quoted characters are needed.
* locating the version part, the informations about quoted characters are needed.
* They might be lost in the course of the conversion.
*
*/
@@ -312,10 +326,137 @@ do { \
/* * * * * it gave "Too many characters in a character constant" errors! */
#include "lispver1.h"
#else /* DOS */
/* NON-DOS version is inline in ufs.c */
/* NON-DOS version of the macro LispVersionToUnixVersion */
#include "lispver2.h"
#endif /* DOS */
#define VERSIONLEN 24
/*
* Name: UnixVersionToLispVersion
*
* Argument: char *pathname UNIX syntax pathname.
* int vlessp If 0, versionless file is converted to version 1.
* Otherwise, remains as versionless.
*
* Side Effect: The version part of pathname is destructively modified.
*
* Description:
*
* Destructively modify the version part of pathname which is following the
* UNIX file naming convention to Xerox Lisp one.
* This macro should be called, in the routines which convert the UNIX pathname
* to Lisp one, just before it returns the result to Lisp, because converting
* version field will append a semicolon and it might make the routine be
* confused.
* The file which has not a valid version field, that is ".~##~" form, is
* dealt with as version 1.
*/
#define UnixVersionToLispVersion(pathname, vlessp) \
do { \
char *n_end; \
char *v_start; \
int v_len; \
\
if (!parse_file_version(pathname, 1, &n_end, &v_start, &v_len)) { \
if (!vlessp) strcat(pathname, ";1"); \
} else { \
*n_end++ = ';'; \
while (v_len-- > 0) *n_end++ = *v_start++; \
*n_end = '\0'; \
} \
} while (0)
/*
* Name: ConcDirAndName
*
* Argument: char *dir The name of the directory.
* char *name The name of a file.
* char *fname The place where the full file name should be
* stored.
* Value: N/A
*
* Side Effect: fname is replaced with the full file name.
*
* Description:
*
* Concatenate the directory name and root file name. Checks if dir contains
* the trail directory delimiter or not.
*
*/
static inline void ConcDirAndName(char *dir, char *name, char *fname)
{
char *lf_cp1, *lf_cp2;
lf_cp1 = dir;
lf_cp2 = dir;
while (*lf_cp2 != '\0') {
switch (*lf_cp2) {
case '/':
lf_cp1 = lf_cp2;
lf_cp2++;
break;
default:
lf_cp2++;
break;
}
}
if (lf_cp1 == (lf_cp2 - 1)) {
if (lf_cp1 == (dir)) {
/* dir is a root directory. */
strcpy(fname, "/");
strcat(fname, name);
} else {
/* The trail directory is included. */
strcpy(fname, dir);
strcat(fname, name);
}
} else {
/* The trail directory is not included */
strcpy(fname, dir);
strcat(fname, "/");
strcat(fname, name);
}
}
/*
* Name: ConcNameAndVersion
*
* Argument: char *name The root file name.
* char *ver The file version.
* char *rname The place where the concatenated file name will be
* stored.
* Value: N/A
*
* Side Effect: rname is replaced with the concatenated file name.
*
* Description:
*
* Concatenate the root file name and its version in UNIX format.
*
* XXX: this code is unsafe and could result in memory smashes if the
* sizes of the arguments are not correctly specified
*
*/
static inline void ConcNameAndVersion(char *name, char *ver, char *rname)
{
if (*ver != '\0') {
strcpy(rname, name);
strcat(rname, ".~");
strcat(rname, ver);
strcat(rname, "~");
} else {
strcpy(rname, name);
}
}
#define VERSIONLEN 10
#define MAXVERSION 999999999
#define LASTVERSIONARRAY ((unsigned) -1)
@@ -362,7 +503,7 @@ do { \
*(lf_cp-1) = '\0'; \
} \
} while (0)
#define ChangeToVersionless(pathname) do { \
char *lf_cp; \
if( (lf_cp=strrchr(pathname, ';')) != 0) \
@@ -396,9 +537,9 @@ do { \
TIMEOUT(lf_rval=rename(x, y)); \
if(lf_rval == -1){ \
switch(errno){ \
case 2: \
case ENOENT: \
return(1); \
case 18: \
case EXDEV: \
*Lisp_errno = errno; \
return(0); \
default: \
@@ -421,20 +562,78 @@ do { \
/*
* For file name length check
*/
#define FNAMETOOLONG 200
#define FileNameTooLong(val) do { \
*Lisp_errno = FNAMETOOLONG; \
#define FileNameTooLong(val) do { \
*Lisp_errno = ENAMETOOLONG; \
return((val)); \
} while (0)
static inline int parse_file_version(char *name, int digitsonly, char **n_end,
char **v_start, int *v_length)
{
char *sp, *ep;
size_t name_len;
name_len = strlen(name);
ep = &name[name_len - 1];
/* handle special case of Alto/IFS names with !nnn version.
To be considered for this case the name MUST end with ![0-9]+, however
version 0 is not valid.
*/
sp = strrchr(name, '!');
if (sp != NULL) {
sp++; /* "!nnn" => "nnn" or "!" => "" */
if (*sp != '\0' && sp[strspn(sp, "0123456789")] == '\0') {
/* it was all digits after the '!', so go with it */
*n_end = sp - 1; /* name ends at '!' */
while (*sp == '0' && sp < ep) sp++; /* skip leading zeroes */
if (*sp == '0') return (0); /* version 0 is not valid */
*v_start = sp; /* version start after '!' */
*v_length = (ep - sp) + 1;
return ((*v_length >= VERSIONLEN) ? 0 : 1); /* fail on version too long */
}
}
/* if the name is too short to have a name and a version number
".~#~" or doesn't end with "~" then there is no version number
*/
if (name_len < 4 || *ep != '~')
return (0);
/* The name ends with a "~" so scan back in the filename looking for
another "~" terminating early if we need only digits and find
something else
*/
sp = ep - 1;
while (sp > name && *sp != '~') {
if (digitsonly && !isdigit(*sp)) return (0);
--sp;
}
/* test for no initial "~" or no "." before "~", or
* version number length not at least 1
*/
if (sp == name || *(sp - 1) != '.' || (ep - sp) - 1 < 1)
return (0);
/* After this point we have a version number in the form .~#~ with sp
pointing at the starting "~", ep pointing at the last "~",
and there must be at least one digit. Scan past any leading
zeros in the version, taking care not to remove the last digit.
*/
*n_end = sp - 1; /* save location of "." */
sp++; /* skip over the "." */
while (*sp == '0' && sp < (ep - 1)) {
sp++;
}
if (*sp == '0') return (0); /* version 0 is not valid */
*v_start = sp; /* save location of first significant digit in version */
*v_length = (ep - sp); /* save length of version */
return ((*v_length >= VERSIONLEN) ? 0 : 1); /* fail on version too long */
}
/********************************************************/
/* file-system-specific defns */

View File

@@ -37,13 +37,10 @@ extern unsigned int TIMEOUT_TIME;
alarm(0); \
} while (0)
/* After any use of S_TOUT one should call alarm(0) to cancel
* the last pending alarm.
*/
#define S_TOUT(exp) \
alarm(TIMEOUT_TIME), \
(exp)
alarm(TIMEOUT_TIME), \
(exp), \
alarm(0)
#define ERRSETJMP(rval) \
do { \

View File

@@ -5,14 +5,15 @@ LispPTR UFS_getfilename(LispPTR *args);
LispPTR UFS_deletefile(LispPTR *args);
LispPTR UFS_renamefile(LispPTR *args);
LispPTR UFS_directorynamep(LispPTR *args);
void UnixVersionToLispVersion(char *pathname, size_t pathsize, int vlessp);
void LispVersionToUnixVersion(char *pathname, size_t pathsize);
#ifdef DOS
int unixpathname(char *src, char *dst, int dstlen, int versionp, int genp, char *drive, int *extlenptr, char *rawname);
int unixpathname(char *src, char *dst, int versionp, int genp, char *drive, int *extlenptr, char *rawname);
#else
int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp);
int unixpathname(char *src, char *dst, int versionp, int genp);
#endif
int lisppathname(char *fullname, char *lispname, size_t lispnamesize, int dirp, int versionp);
int lisppathname(char *fullname, char *lispname, int dirp, int versionp);
int quote_fname(char *file);
int quote_fname_ufs(char *file);
int quote_dname(char *dir);
#ifdef DOS
init_host_filesystem(void);
exit_host_filesystem(void);

View File

@@ -1,6 +1,7 @@
#ifndef VMEMSAVEDEFS_H
#define VMEMSAVEDEFS_H 1
#include "lispemul.h" /* for LispPTR */
#include "lispemul.h" /* for LispPTR, DLword */
int lispstringP(LispPTR Lisp);
LispPTR vmem_save(char *sysout_file_name);
LispPTR vmem_save0(LispPTR *args);
void lisp_finish(int exit_status);

654
src/dir.c

File diff suppressed because it is too large Load Diff

733
src/dsk.c

File diff suppressed because it is too large Load Diff

View File

@@ -468,7 +468,7 @@ LispPTR ether_get(LispPTR args[])
log_debug(("ether_get() - begin\n"));
target = (u_char *)NativeAligned2FromLAddr(args[1]);
maxByteCount = BYTESPER_DLWORD * LispIntToCInt(args[0]); /* words to bytes */
maxByteCount = 2 * LispIntToCInt(args[0]); /* words to bytes */
log_debug((" target = %p maxBytecount: %d bytes\n", (void *)target, maxByteCount));
ether_buf = target;
@@ -501,7 +501,7 @@ LispPTR ether_send(LispPTR args[])
log_debug(("ether_send() - begin\n"));
u_char *source = (u_char *)NativeAligned2FromLAddr(args[1]);
int byteCount = BYTESPER_DLWORD * LispIntToCInt(args[0]); /* words to bytes */
int byteCount = 2 * LispIntToCInt(args[0]); /* words to bytes */
log_debug((" source = %p , bytecount: %d bytes\n", (void *)source, byteCount));

View File

@@ -366,7 +366,7 @@ LispPTR ether_get(LispPTR args[])
LispPTR MaxByteCount;
sigset_t signals;
MaxByteCount = BYTERSPER_DLWORD * (0xFFFF & args[0]); /* words to bytes */
MaxByteCount = 2 * (0xFFFF & args[0]); /* words to bytes */
DBPRINT(("Ether Get. "));
@@ -408,7 +408,7 @@ LispPTR ether_send(LispPTR args[])
LispPTR MaxByteCount;
u_char *BufferAddr; /* buffer address pointer(in native address) */
MaxByteCount = BYTESPER_DLWORD * (0xFFFF & args[0]); /* words to bytes */
MaxByteCount = 2 * (0xFFFF & args[0]); /* words to bytes */
BufferAddr = (u_char *)NativeAligned2FromLAddr(args[1]);
if (ether_fd > 0) {

View File

@@ -28,6 +28,7 @@
#include "kbdsubrsdefs.h"
#include "commondefs.h"
#ifdef XWINDOW
#include "lisp2cdefs.h"
#include "xwinmandefs.h"
#endif

View File

@@ -98,12 +98,10 @@ void prindatum(LispPTR x) {
break;
case TYPE_ONED_ARRAY:
case TYPE_GENERAL_ARRAY:
/* this should probably use array.h's arrayheader */
newstring = (NEWSTRINGP *)NativeAligned4FromLAddr(x);
if (newstring->stringp) {
print_NEWstring(x);
}
/* it would be useful to print non-string arrays, too */
break;
default: dtd_base = (struct dtd *)GetDTD(typen); printf("{");
#ifdef BIGVM
@@ -175,20 +173,14 @@ void print_string(LispPTR x) {
void print_NEWstring(LispPTR x) {
NEWSTRINGP *string_point;
DLword st_length;
DLword st_offset;
DLbyte *string_base;
int i;
string_point = (NEWSTRINGP *)NativeAligned4FromLAddr(x);
st_length = string_point->fillpointer;
st_offset = string_point->offset;
if (string_point->indirectp) {
/* base points to another array header not the raw storage */
string_point = (NEWSTRINGP *)NativeAligned4FromLAddr(string_point->base);
}
string_base = (DLbyte *)NativeAligned2FromLAddr(string_point->base);
string_base += st_offset;
string_base += string_point->offset;
printf("%c", DOUBLEQUOTE); /* print %" */

View File

@@ -200,7 +200,7 @@ int main(int argc, char *argv[]) {
goto I_Give_Up;
}
bcopy(if_data.ifc_req[0].ifr_addr.sa_data, ether_host, 6);
strlcpy(Ename, if_data.ifc_req[0].ifr_name, sizeof(Ename));
strcpy(Ename, if_data.ifc_req[0].ifr_name);
fcntl(ether_fd, F_SETFL, fcntl(ether_fd, F_GETFL, 0) | O_ASYNC | O_NONBLOCK);

View File

@@ -216,8 +216,8 @@ unsigned sysout_loader(const char *sysout_file_name, unsigned sys_size) {
}
if ((stat_buf.st_size & (BYTESPER_PAGE - 1)) != 0)
printf("CAUTION::not an integral number of pages. sysout & 0x%x = 0x%x\n",
BYTESPER_PAGE - 1, (int)(stat_buf.st_size & (BYTESPER_PAGE - 1)));
printf("CAUTION::not an integral number of pages. sysout & 0x1ff = 0x%x\n",
(int)(stat_buf.st_size & (BYTESPER_PAGE - 1)));
if (ifpage.nactivepages != (sysout_size / 2)) {
printf("sysout_loader:IFPAGE says sysout size is %d\n", ifpage.nactivepages);

View File

@@ -38,8 +38,6 @@ int LispStringSimpleLength(LispPTR lispstring) {
return (arrayp->fillpointer);
}
/* XXX: this string conversion is NOT useable on byte-swapped (little-endian) machines
*/
void LispStringToCStr(LispPTR lispstring, char *cstring) {
OneDArray *arrayp;
char *base;

View File

@@ -233,13 +233,15 @@ LispPTR mess_read(LispPTR *args)
struct stat sbuf;
int size, save_size;
char *base;
LispPTR *naddress;
int i;
static char temp_buf[MESSAGE_BUFFER_SIZE];
SETJMP(NIL);
/* Get buff address from LISP */
STRING_BASE(args[0], base);
naddress = (LispPTR *)(NativeAligned4FromLAddr(args[0]));
base = (char *)(NativeAligned2FromLAddr(((OneDArray *)naddress)->base));
close(log_id);
TIMEOUT(log_id = open(logfile, O_RDONLY));
@@ -281,7 +283,7 @@ LispPTR mess_read(LispPTR *args)
if (temp_buf[i] == '\n') temp_buf[i] = '\000';
}
/* COPY actual Lisp Buffer(for BYTESWAP magic) */
MemCpyToLispFromNative(base, temp_buf, size);
StrNCpyFromCToLisp(base, temp_buf, size);
return (GetSmallp(size));
#else

395
src/ufs.c
View File

@@ -9,7 +9,6 @@
#include "version.h"
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <setjmp.h>
@@ -177,9 +176,9 @@ LispPTR UFS_getfilename(LispPTR *args)
* unixpathname specifies it.
*/
#ifdef DOS
if (unixpathname(lfname, file, sizeof(file), 0, 0, 0, 0, 0) == 0) return (NIL);
if (unixpathname(lfname, file, 0, 0, 0, 0, 0) == 0) return (NIL);
#else
if (unixpathname(lfname, file, sizeof(file), 0, 0) == 0) return (NIL);
if (unixpathname(lfname, file, 0, 0) == 0) return (NIL);
#endif /* DOS */
switch (args[1]) {
@@ -201,7 +200,7 @@ LispPTR UFS_getfilename(LispPTR *args)
case RECOG_NON:
/*
* "New" file means the "not existing" file. UNIX device always
* recognizes a not existing file as is, the subsequent OPENFILE will
* recognizes a not existing file as if, the subsequent OPENFILE will
* find the truth.
* "Non" recognition is used to recognize a sysout file.
*/
@@ -211,15 +210,15 @@ LispPTR UFS_getfilename(LispPTR *args)
* Now, we convert a file name back to Lisp format. The version field have not
* to be converted. The fourth argument for lisppathname specifies it.
*/
if (lisppathname(file, lfname, sizeof(lfname), 0, 0) == 0) return (NIL);
if (lisppathname(file, lfname, 0, 0) == 0) return (NIL);
STRING_BASE(args[2], base);
len = strlen(lfname);
#ifndef BYTESWAP
strncpy(base, lfname, len);
strncpy(base, lfname, len + 1);
#else
MemCpyToLispFromNative(base, lfname, len);
StrNCpyFromCToLisp(base, lfname, len + 1);
#endif /* BYTESWAP */
return (GetSmallp(len));
@@ -260,9 +259,9 @@ LispPTR UFS_deletefile(LispPTR *args)
LispStringToCString(args[0], fbuf, MAXPATHLEN);
#ifdef DOS
if (unixpathname(fbuf, file, sizeof(file), 0, 0, 0, 0, 0) == 0) return (NIL);
if (unixpathname(fbuf, file, 0, 0, 0, 0, 0) == 0) return (NIL);
#else
if (unixpathname(fbuf, file, sizeof(file), 0, 0) == 0) return (NIL);
if (unixpathname(fbuf, file, 0, 0) == 0) return (NIL);
#endif /* DOS */
/* check if we're operating on directory or file */
TIMEOUT(rval = stat(file, &sbuf));
@@ -328,15 +327,15 @@ LispPTR UFS_renamefile(LispPTR *args)
LispStringToCString(args[0], fbuf, MAXPATHLEN);
#ifdef DOS
if (unixpathname(fbuf, src, sizeof(src), 0, 0, 0, 0, 0) == 0) return (NIL);
if (unixpathname(fbuf, src, 0, 0, 0, 0, 0) == 0) return (NIL);
#else
if (unixpathname(fbuf, src, sizeof(src), 0, 0) == 0) return (NIL);
if (unixpathname(fbuf, src, 0, 0) == 0) return (NIL);
#endif /* DOS */
LispStringToCString(args[1], fbuf, MAXPATHLEN);
#ifdef DOS
if (unixpathname(fbuf, dst, sizeof(dst), 0, 0, 0, 0, 0) == 0) return (NIL);
if (unixpathname(fbuf, dst, 0, 0, 0, 0, 0) == 0) return (NIL);
#else
if (unixpathname(fbuf, dst, sizeof(dst), 0, 0) == 0) return (NIL);
if (unixpathname(fbuf, dst, 0, 0) == 0) return (NIL);
#endif /* DOS */
TIMEOUT(rval = rename(src, dst));
@@ -401,9 +400,9 @@ LispPTR UFS_directorynamep(LispPTR *args)
/* Convert Xerox Lisp file naming convention to Unix one. */
#ifdef DOS
if (unixpathname(dirname, fullname, sizeof(fullname), 0, 0, 0, 0, 0) == 0) return (NIL);
if (unixpathname(dirname, fullname, 0, 0, 0, 0, 0) == 0) return (NIL);
#else
if (unixpathname(dirname, fullname, sizeof(fullname), 0, 0) == 0) return (NIL);
if (unixpathname(dirname, fullname, 0, 0) == 0) return (NIL);
#endif /* DOS */
TIMEOUT(rval = stat(fullname, &sbuf));
@@ -415,109 +414,20 @@ LispPTR UFS_directorynamep(LispPTR *args)
if (!S_ISDIR(sbuf.st_mode)) return (NIL);
/* Convert Unix file naming convention to Xerox Lisp one. */
if (lisppathname(fullname, dirname, sizeof(dirname), 1, 0) == 0) return (NIL);
if (lisppathname(fullname, dirname, 1, 0) == 0) return (NIL);
len = strlen(dirname);
STRING_BASE(args[1], base);
#ifndef BYTESWAP
strncpy(base, dirname, len);
strncpy(base, dirname, len + 1);
#else
MemCpyToLispFromNative(base, dirname, len);
StrNCpyFromCToLisp(base, dirname, len + 1);
#endif /* BYTESWAP */
return (GetSmallp(len));
}
/*
* Name: UnixVersionToLispVersion
*
* Argument: char *pathname
* size_t pathsize
* int vlessp
*
* Description:
*
* Converts the Unix version in pathname to a Lisp syntax version.
* If there is no recognizable version present, and vlessp is not
* true then a Lisp version 1 (";1") will be added to the name.
*
* Initially only the "standard" .~nnn~ form of a version is recognized.
* It may be possible in the future to recognize IFS "!nnn"
*/
void UnixVersionToLispVersion(char *pathname, size_t pathsize, int vlessp) {
char *ep = &pathname[strlen(pathname) - 1];
char *uvp;
#ifdef IFSVERSION
if (isdigit(*ep)) goto maybeifsversion; /* possibly foo!## */
#endif
if (*ep-- != '~') goto noversion; /* definitely not .~###~ */
if (!isdigit(*ep)) goto noversion; /* requires at least one digit */
while (isdigit(*ep)) ep--; /* consume all digits */
if (*ep-- != '~') goto noversion; /* definitely not .~###~ */
if (*ep != '.') goto noversion;
/* must end .~###~ and ep points at the dot */
*ep++ = ';'; /* smash . to ; and point to ~ where version will go*/
for (uvp = ep + 1; *uvp == '0' && *(uvp + 1) != '~'; uvp++); /* skip leading zeroes */
while (*uvp != '~') *ep++ = *uvp++; /* shift version back */
*ep = '\0'; /* terminate the string */
return;
noversion:
if (!vlessp) strlcat(pathname, ";1", pathsize);
return;
#ifdef IFSVERSION
maybeifsversion:
while (isdigit(*ep)) ep--; /* consume all digits */
if (*ep != '!') goto noversion;
*ep = ';';
return;
#endif
}
/*
* Name: LispVersionToUnixVersion
*
* Arguments: char *pathname Xerox Lisp style pathname
* size_t pathsize Length of pathname buffer
*
* Helper procedure used by unixpathname to convert from a Lisp style path
* with ";version" style version number to the ".~version~" format used in
* the underlying host file system.
* If a syntactically correct version (all numeric, starting at the rightmost
* unescaped (') semicolon) is found it will be replaced by the host version,
* otherwise the procedure will return the pathname unchanged.
*
*/
void LispVersionToUnixVersion(char *pathname, size_t pathsize) {
char version[VERSIONLEN] = {0};
char *vp = NULL;
char *ep = &pathname[strlen(pathname) - 1]; /* from the end */
while (ep >= pathname) { /* until the beginning */
if (*ep == ';' && /* found a semicolon */
(ep == pathname || *(ep - 1) != '\'')) {/* at the beginning or not quoted */
vp = ep; /* version starts at unquoted semicolon */
break; /* stop when found version */
}
ep--; /* previous character */
}
if (vp == NULL) return; /* there was no version field */
*vp++ = '\0'; /* end name at the semicolon */
if (*vp == '\0') return; /* empty version field */
while (*vp == '0') vp++; /* skip leading zeros */
if (*vp == '\0') return; /* all zero version is no version */
version[0] = '.'; /* leading version marker */
version[1] = '~'; /* leading version marker */
strlcat(version, vp, VERSIONLEN); /* the trimmed version from the source */
strlcat(version, "~", VERSIONLEN); /* trailing version marker */
strlcat(pathname, version, pathsize); /* concatenate version to pathname */
return;
}
/*
* Name: unixpathname
*
@@ -527,7 +437,6 @@ void LispVersionToUnixVersion(char *pathname, size_t pathsize) {
* if the pathname is passed as a directory, the
* tail delimiter may be included.
* char *dst The buffer to which the converted pathname is stored.
* int dstlen The size of the dst buffer
* int versionp
* If 1, version field in src is converted to UNIX
* version form. {DSK} device invokes unixpathname
@@ -554,9 +463,9 @@ void LispVersionToUnixVersion(char *pathname, size_t pathsize) {
*
*/
#ifdef DOS
int unixpathname(char *src, char *dst, int dstlen, int versionp, int genp, char *drive, int *extlenptr, char *rawname)
int unixpathname(char *src, char *dst, int versionp, int genp, char *drive, int *extlenptr, char *rawname)
#else
int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
int unixpathname(char *src, char *dst, int versionp, int genp)
#endif /* DOS */
{
char *cp, *dp, *np;
@@ -586,12 +495,12 @@ int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
* file system code.
*/
if (strcmp(src, "<") == 0) {
strlcpy(dst, DIRSEPSTR, dstlen);
strcpy(dst, DIRSEPSTR);
return (1);
}
/* Copy src to protect it from destructive modification. */
strlcpy(lfname, src, sizeof(lfname));
strcpy(lfname, src);
/*
* If versionp is specified, we have to deal with the version field first,
@@ -601,7 +510,7 @@ int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
#ifdef DOS
if (versionp) LispVersionToUnixVersion(lfname, version); else version = -1;
#else
if (versionp) LispVersionToUnixVersion(lfname, sizeof(lfname));
if (versionp) LispVersionToUnixVersion(lfname);
#endif /* DOS */
cp = lfname;
@@ -673,7 +582,7 @@ int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
TIMEOUT0(pwd = getpwuid(getuid()));
if (pwd == NULL) return (0);
strlcpy(dst, pwd->pw_dir, dstlen);
strcpy(dst, pwd->pw_dir);
while (*dp != '\0') dp++;
if (*(dp - 1) != DIRSEP) {
/*
@@ -697,7 +606,7 @@ int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
TIMEOUT0(pwd = getpwnam(name));
if (pwd == NULL) return (0);
strlcpy(dst, pwd->pw_dir, dstlen);
strcpy(dst, pwd->pw_dir);
while (*dp != '\0') dp++;
if (*(dp - 1) != DIRSEP) {
/*
@@ -860,8 +769,6 @@ int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
#ifdef DOS
if (NameValid) *dp++ = *(cp + 1);
CountNameChars;
#else
*dp++ = *(cp + 1);
#endif /* DOS */
cp += 2;
break;
@@ -900,10 +807,10 @@ int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
* for the convenience of the pattern matching routines, we don't
* care about the last period character.
*/
strlcpy(fbuf1, lfname, sizeof(fbuf1));
strlcpy(fbuf2, dst, sizeof(fbuf2));
separate_version(fbuf1, sizeof(fbuf1), ver1, sizeof(ver1), 1);
separate_version(fbuf2, sizeof(fbuf2), ver2, sizeof(ver2), 1);
strcpy(fbuf1, lfname);
strcpy(fbuf2, dst);
separate_version(fbuf1, ver1, 1);
separate_version(fbuf2, ver2, 1);
for (cp = fbuf1; *cp; cp++) {}
for (dp = fbuf2; *dp; dp++) {}
if (*(cp - 1) == '.') {
@@ -918,11 +825,11 @@ int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
}
#ifdef DOS
if (version >= 0)
snprintf(ver2, sizeof(ver2), "%d", version);
sprintf(ver2, "%d", version);
else
*ver2 = '\0';
#endif /* DOS */
conc_name_and_version(fbuf2, ver2, dst, dstlen);
ConcNameAndVersion(fbuf2, ver2, dst);
}
return (1);
}
@@ -938,7 +845,6 @@ int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
* The lispname is used to determine which
* character should be quoted in the result
* Xerox Lisp pathname representation.
* size_t lispnamesize size of storage available for lispname
* int dirp If 1, fullname is a directory. If 0,
* fullname is a file.
* int versionp If 1, version field is also converted
@@ -965,14 +871,14 @@ int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
*
*/
int lisppathname(char *fullname, char *lispname, size_t lispnamesize, int dirp, int versionp)
int lisppathname(char *fullname, char *lispname, int dirp, int versionp)
{
char *cp, *dp, *lnamep, *cnamep;
char namebuf[MAXPATHLEN], fbuf[MAXPATHLEN], ver[VERSIONLEN];
int i, mask, extensionp;
if (strcmp(fullname, DIRSEPSTR) == 0) {
strlcpy(lispname, "<", lispnamesize);
strcpy(lispname, "<");
return (1);
}
@@ -1034,7 +940,7 @@ int lisppathname(char *fullname, char *lispname, size_t lispnamesize, int dirp,
* ' ''
* . '. only if it is used as a part of the extension
* field.
* others as is
* others as if
*/
cp = fullname + 1;
@@ -1076,7 +982,7 @@ int lisppathname(char *fullname, char *lispname, size_t lispnamesize, int dirp,
if (dirp) {
if (*(dp - 1) != '>' || *(dp - 2) == '\'') *dp++ = '>';
*dp = '\0';
strlcpy(lispname, namebuf, lispnamesize);
strcpy(lispname, namebuf);
return (1);
}
@@ -1140,7 +1046,7 @@ int lisppathname(char *fullname, char *lispname, size_t lispnamesize, int dirp,
* or not. If extension field is not included, we have to add a period
* to specify empty extension field.
*/
strlcpy(fbuf, namebuf, sizeof(fbuf));
strcpy(fbuf, namebuf);
dp = cp = fbuf;
while (*cp) {
switch (*cp) {
@@ -1160,7 +1066,7 @@ int lisppathname(char *fullname, char *lispname, size_t lispnamesize, int dirp,
}
}
cp = dp + 1;
if (versionp) separate_version(fbuf, sizeof(fbuf), ver, sizeof(ver), 1);
if (versionp) separate_version(fbuf, ver, 1);
extensionp = 0;
while (*cp && !extensionp) {
switch (*cp) {
@@ -1181,16 +1087,237 @@ int lisppathname(char *fullname, char *lispname, size_t lispnamesize, int dirp,
*cp = '\0';
}
if (versionp && *ver != '\0') {
conc_name_and_version(fbuf, ver, namebuf, sizeof(namebuf));
ConcNameAndVersion(fbuf, ver, namebuf);
} else {
strlcpy(namebuf, fbuf, sizeof(namebuf));
strcpy(namebuf, fbuf);
}
/*
* Now, it's time to convert the version field.
*/
if (!dirp && versionp) UnixVersionToLispVersion(namebuf, sizeof(namebuf), 0);
if (!dirp && versionp) UnixVersionToLispVersion(namebuf, 0);
strlcpy(lispname, namebuf, lispnamesize);
strcpy(lispname, namebuf);
return (1);
}
/*
* Name: quote_fname
*
* Argument: char *file The root file name in UNIX format. "Root"
* file name contains the name, extension and
* version fields. A valid version field is in a
* form as ".~##~".
*
* Value: If succeed, returns 1, otherwise 0.
*
* Side Effect: If succeed, file is replaced with the file name in Xerox Lisp format
* in which special characters are quoted.
*
* Description:
*
* Converts a UNIX root file name to Xerox Lisp one. This routine only quotes special
* characters in Xerox file naming convention, does not care about the "true" name
* which might be specified directly by the user as like lisppathname. Thus, this
* routine can be invoked when you don't know how to escape the period character. This
* is the case when you convert a file name in the course of the directory enumeration.
*
* This routine is used when file is a "FILE" name and being converted to {DSK} name.
*
* The special characters which is quoted include "<", ">", ";", and "'" itself. Notice
* again that "." is not quoted, because we don't know it is a extension separator in
* Lisp sense or not.
*/
int quote_fname(char *file)
{
char *cp, *dp;
int extensionp;
char fbuf[MAXNAMLEN + 1], namebuf[MAXNAMLEN + 1], ver[VERSIONLEN];
cp = file;
dp = fbuf;
while (*cp) {
switch (*cp) {
case '>':
case ';':
case '\'':
*dp++ = '\'';
*dp++ = *cp++;
break;
default: *dp++ = *cp++; break;
}
}
*dp = '\0';
/*
* extensionp indicates whether extension field is included in a file
* name or not. If extension field is not included, we have to add a
* period to specify empty extension field.
*/
separate_version(fbuf, ver, 1);
cp = fbuf;
extensionp = 0;
while (*cp && !extensionp) {
switch (*cp) {
case '.':
if (*(cp + 1)) extensionp = 1;
cp++;
break;
case '\'':
if (*(cp + 1) != '\0')
cp += 2;
else
cp++;
break;
default: cp++; break;
}
}
if (!extensionp) {
if (*(cp - 1) == '.') {
*(cp - 1) = '\'';
*cp++ = '.';
}
*cp++ = '.';
*cp = '\0';
}
if (*ver != '\0') {
ConcNameAndVersion(fbuf, ver, namebuf);
} else {
strcpy(namebuf, fbuf);
}
UnixVersionToLispVersion(namebuf, 1);
strcpy(file, namebuf);
return (1);
}
/*
* Name: quote_fname_ufs
*
* Argument: char *file The root file name in UNIX format. "Root"
* file name contains the name, extension and
* version fields. A valid version field is in a
* form as ".~##~".
*
* Value: If succeed, returns 1, otherwise 0.
*
* Side Effect: If succeed, file is replaced with the file name in Xerox Lisp format
* in which special characters are quoted.
*
* Description:
*
* Similar to quote_fname, but this routine is only used when file is a "FILE" name
* and being converted to {UNIX} name.
*/
int quote_fname_ufs(char *file)
{
char *cp, *dp;
int extensionp;
char fbuf[MAXNAMLEN + 1];
cp = file;
dp = fbuf;
while (*cp) {
switch (*cp) {
case '>':
case ';':
case '\'':
*dp++ = '\'';
*dp++ = *cp++;
break;
default: *dp++ = *cp++; break;
}
}
*dp = '\0';
/*
* extensionp indicates whether extension field is included in a file
* name or not. If extension field is not included, we have to add a
* period to specify empty extension field.
*/
cp = fbuf;
extensionp = 0;
while (*cp && !extensionp) {
switch (*cp) {
case '.':
if (*(cp + 1)) extensionp = 1;
cp++;
break;
case '\'':
if (*(cp + 1) != '\0')
cp += 2;
else
cp++;
break;
default: cp++; break;
}
}
if (!extensionp) {
if (*(cp - 1) == '.') {
*(cp - 1) = '\'';
*cp++ = '.';
}
*cp++ = '.';
*cp = '\0';
}
strcpy(file, fbuf);
return (1);
}
/*
* Name: quote_dname
*
* Argument: char *dir The directory name in UNIX format. Does not
* include its parent name.
*
* Value: If succeed, returns 1, otherwise 0.
*
* Side Effect: If succeed, dir is replaced with the directory name in Xerox Lisp
* format in which special characters are quoted.
*
* Description:
*
* Similar to quote_fname, but this routine is only used when dir is a "DIRECTORY"
* name. Both {DSK} and {UNIX} uses this routine.
*/
int quote_dname(char *dir)
{
char *cp, *dp;
char fbuf[MAXNAMLEN + 1];
cp = dir;
dp = fbuf;
while (*cp) {
switch (*cp) {
case '>':
case ';':
case '\'':
*dp++ = '\'';
*dp++ = *cp++;
break;
default: *dp++ = *cp++; break;
}
}
*dp = '\0';
if (*(dp - 1) == '.') {
/* Trail period should be quoted. */
*(dp - 1) = '\'';
*dp++ = '.';
}
strcpy(dir, fbuf);
return (1);
}

View File

@@ -303,7 +303,7 @@ int FindUnixPipes(void) {
/* */
/************************************************************************/
static int FindAvailablePty(char *Slave, size_t SlaveLen) {
static int FindAvailablePty(char *Slave) {
int res;
res = posix_openpt(O_RDWR);
@@ -313,7 +313,7 @@ static int FindAvailablePty(char *Slave, size_t SlaveLen) {
}
grantpt(res);
unlockpt(res);
strlcpy(Slave, ptsname(res), SlaveLen);
strcpy(Slave, ptsname(res));
DBPRINT(("slave pty name is %s.\n", Slave));
if (res != -1) {
@@ -392,7 +392,7 @@ LispPTR Unix_handlecomm(LispPTR *args) {
PipeName = build_socket_pathname(sockFD);
memset(&sock, 0, sizeof(sock));
sock.sun_family = AF_UNIX;
strlcpy(sock.sun_path, PipeName, sizeof(sock.sun_path));
strcpy(sock.sun_path, PipeName);
if (bind(sockFD, (struct sockaddr *)&sock, sizeof(struct sockaddr_un)) < 0) {
close(sockFD);
perror("binding sockets");
@@ -570,7 +570,7 @@ LispPTR Unix_handlecomm(LispPTR *args) {
int Master;
unsigned short len;
Master = FindAvailablePty(SlavePTY, sizeof(SlavePTY));
Master = FindAvailablePty(SlavePTY);
DBPRINT(("Fork Shell; Master PTY = %d. Slave=%c%c.\n", Master, SlavePTY[0], SlavePTY[1]));
if (Master < 0) {
printf("Open of lisp side of PTY failed.\n");
@@ -771,7 +771,6 @@ LispPTR Unix_handlecomm(LispPTR *args) {
{
int sockFD;
struct sockaddr_un sock;
size_t pathsize;
/* First open the socket */
sockFD = socket(AF_UNIX, SOCK_STREAM, 0);
@@ -783,13 +782,12 @@ LispPTR Unix_handlecomm(LispPTR *args) {
socket into it */
/* need to type-check the string here */
LispStringToCString(args[1], shcom, 2048);
pathsize = strlen(shcom) + 1;
UJ[sockFD].pathname = malloc(pathsize);
strlcpy(UJ[sockFD].pathname, shcom, pathsize);
UJ[sockFD].pathname = malloc(strlen(shcom) + 1);
strcpy(UJ[sockFD].pathname, shcom);
/* Then bind it to the pathname, and get it listening properly */
sock.sun_family = AF_UNIX;
strlcpy(sock.sun_path, shcom, sizeof(sock.sun_path));
strcpy(sock.sun_path, shcom);
if (bind(sockFD, (struct sockaddr *)&sock, sizeof(struct sockaddr_un)) < 0) {
close(sockFD);
free(UJ[sockFD].pathname);

View File

@@ -358,7 +358,7 @@ int fork_Unix(void) {
(void)snprintf(PipeName, sizeof(PipeName), "/tmp/LPU%ld-%d", StartTime, slot);
memset(&addr, 0, sizeof(struct sockaddr_un));
addr.sun_family = AF_UNIX;
strlcpy(addr.sun_path, PipeName, sizeof(addr.sun_path));
strcpy(addr.sun_path, PipeName);
status =
connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_un));
if (status < 0) {

View File

@@ -92,7 +92,7 @@ extern int please_fork;
/* */
/************************************************************************/
static int lispstringP(LispPTR Lisp)
int lispstringP(LispPTR Lisp)
{
switch (((OneDArray *)(NativeAligned4FromLAddr(Lisp)))->typenumber) {
case THIN_CHAR_TYPENUMBER:
@@ -156,36 +156,36 @@ LispPTR vmem_save0(LispPTR *args)
LispStringToCString(args[0], pathname, MAXPATHLEN);
separate_host(pathname, host);
#ifdef DOS
if (!unixpathname(pathname, sysout, sizeof(sysout), 0, 0, drive, 0, 0)) return (BADFILENAME);
if (!unixpathname(pathname, sysout, 0, 0, drive, 0, 0)) return (BADFILENAME);
#else
if (!unixpathname(pathname, sysout, sizeof(sysout), 0, 0)) return (BADFILENAME);
if (!unixpathname(pathname, sysout, 0, 0)) return (BADFILENAME);
#endif /* DOS */
return (vmem_save(sysout));
} else {
if ((def = getenv("LDEDESTSYSOUT")) == 0) {
#ifdef DOS
if (getcwd(pwd, MAXNAMLEN) == NULL) return (FILETIMEOUT);
strlcpy(sysout, pwd, sizeof(sysout));
strlcat(sysout, "/lisp.vm", sizeof(sysout));
strcpy(sysout, pwd);
strcat(sysout, "/lisp.vm");
#else
pwd = getpwuid(getuid()); /* NEED TIMEOUT */
if (pwd == (struct passwd *)NULL) return (FILETIMEOUT);
strlcpy(sysout, pwd->pw_dir, sizeof(sysout));
strlcat(sysout, "/lisp.virtualmem", sizeof(sysout));
strcpy(sysout, pwd->pw_dir);
strcat(sysout, "/lisp.virtualmem");
#endif /* DOS */
} else {
if (*def == '~' && (*(def + 1) == '/' || *(def + 1) == '\0')) {
#ifdef DOS
if (getcwd(pwd, MAXNAMLEN) == NULL) return (FILETIMEOUT);
strlcpy(sysout, pwd, sizeof(sysout));
strcpy(sysout, pwd);
#else
pwd = getpwuid(getuid()); /* NEED TIMEOUT */
if (pwd == (struct passwd *)NULL) return (FILETIMEOUT);
strlcpy(sysout, pwd->pw_dir, sizeof(sysout));
strcpy(sysout, pwd->pw_dir);
#endif /* DOS */
strlcat(sysout, def + 1, sizeof(sysout));
strcat(sysout, def + 1);
} else {
strlcpy(sysout, def, sizeof(sysout));
strcpy(sysout, def);
}
}
return (vmem_save(sysout));
@@ -349,9 +349,9 @@ LispPTR vmem_save(char *sysout_file_name)
SETJMP(FILETIMEOUT);
#ifdef DOS
/* Bloddy 8 char filenames in dos ... /jarl */
make_old_version(tempname, sizeof(tempname), sysout_file_name);
make_old_version(tempname, sysout_file_name);
#else /* DOS */
snprintf(tempname, sizeof(tempname), "%s-temp", sysout_file_name);
sprintf(tempname, "%s-temp", sysout_file_name);
#endif /* DOS */
/* Confirm protection of specified file by open/close */

View File

@@ -17,7 +17,7 @@
#include <limits.h> // for PATH_MAX
#include <stdio.h> // for fprintf, NULL, stderr, sscanf
#include <stdlib.h> // for getenv, exit, strtol
#include <string.h> // for strncpy, strlcat, strlcpy, strcmp
#include <string.h> // for strncpy, strcat, strcpy, strcmp
#include <sys/types.h> // for u_char
#include <unistd.h> // for access, R_OK
#include "xdefs.h" // for WINDOW_NAME
@@ -211,13 +211,13 @@ void read_Xoption(int *argc, char *argv[])
print_Xusage(argv[0]);
} else {
envname = getenv("DISPLAY");
(void)strlcpy(Display_Name, envname, sizeof(Display_Name));
(void)strcpy(Display_Name, envname);
}
if ((xdisplay = XOpenDisplay(Display_Name)) != NULL) {
/* read the other databases */
/* Start with app-defaults/medley */
(void)strlcpy(tmp, "/usr/lib/X11/app-defaults/", sizeof(tmp));
(void)strlcat(tmp, "medley", sizeof(tmp));
(void)strcpy(tmp, "/usr/lib/X11/app-defaults/");
(void)strcat(tmp, "medley");
applicationDB = XrmGetFileDatabase(tmp);
if (applicationDB != NULL) { (void)XrmMergeDatabases(applicationDB, &rDB); }
/* Then try the displays defaults */
@@ -232,8 +232,8 @@ void read_Xoption(int *argc, char *argv[])
}
envname = getenv("HOME");
(void)strlcpy(tmp, envname, sizeof(tmp));
(void)strlcat(tmp, "/.Xdefaults", sizeof(tmp));
(void)strcat(tmp, envname);
(void)strcat(tmp, "/.Xdefaults");
if (access(tmp, R_OK) != 0) {
serverDB = XrmGetFileDatabase(tmp);
if (serverDB != NULL) { (void)XrmMergeDatabases(serverDB, &rDB); }
@@ -255,7 +255,7 @@ void read_Xoption(int *argc, char *argv[])
if (XrmGetResource(rDB, "ldex.icontitle", "Ldex.icontitle", str_type, &value) == True) {
(void)strncpy(iconTitle, value.addr, value.size);
} else {
(void)strlcpy(iconTitle, "Medley", sizeof(iconTitle));
(void)strcpy(iconTitle, "Medley");
}
if (XrmGetResource(rDB, "ldex.iconbitmap", "Ldex.Iconbitmap", str_type, &value) == True) {
@@ -276,6 +276,8 @@ void read_Xoption(int *argc, char *argv[])
&LispDisplayRequestedWidth, &LispDisplayRequestedHeight);
}
(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);
}