mirror of
https://github.com/Interlisp/maiko.git
synced 2026-03-16 06:47:22 +00:00
Compare commits
64 Commits
no-DOS
...
maiko-2201
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8ea2c76110 | ||
|
|
3e7c71c0c0 | ||
|
|
f2a3715930 | ||
|
|
f15d8eca09 | ||
|
|
008ce703e7 | ||
|
|
fa08a08648 | ||
|
|
bb0b011f90 | ||
|
|
6bccbfbcf3 | ||
|
|
e3af3b03b9 | ||
|
|
880747f2dc | ||
|
|
c7fd28a438 | ||
|
|
e1efc860c4 | ||
|
|
26fe840edf | ||
|
|
212a0fa9c6 | ||
|
|
65bbcb7d9d | ||
|
|
987cf4c7c6 | ||
|
|
c46fcce307 | ||
|
|
de5ea2110f | ||
|
|
6c241f1eaa | ||
|
|
19688bc314 | ||
|
|
c39b751f42 | ||
|
|
75c668f1cd | ||
|
|
a25368714f | ||
|
|
3cdbccd0c7 | ||
|
|
4d2bf13347 | ||
|
|
f7e40d1ed5 | ||
|
|
9bb5a4298c | ||
|
|
533c935e72 | ||
|
|
6fedd97d21 | ||
|
|
a70b18d444 | ||
|
|
c7adb3c4ba | ||
|
|
b1545e4ccc | ||
|
|
4f79f55c20 | ||
|
|
85c4ebf0ac | ||
|
|
7284e19b32 | ||
|
|
0de1b1438b | ||
|
|
740f012254 | ||
|
|
377a6f3f47 | ||
|
|
c07618f55c | ||
|
|
dbbb59b30b | ||
|
|
e957e331c4 | ||
|
|
934a86fbb5 | ||
|
|
28ea238807 | ||
|
|
81c36341ef | ||
|
|
6cad51735f | ||
|
|
c33386ef44 | ||
|
|
588e804a2f | ||
|
|
c56cbb2a91 | ||
|
|
ef31b3fe0b | ||
|
|
ea8d31f590 | ||
|
|
093fb9a3d5 | ||
|
|
b53620852a | ||
|
|
13163c6772 | ||
|
|
9e179e66f2 | ||
|
|
084d69c6e8 | ||
|
|
40e18e6da0 | ||
|
|
9ed46e6b69 | ||
|
|
934b15b63b | ||
|
|
2de44247b5 | ||
|
|
ef6a6554ac | ||
|
|
1c47bf5df0 | ||
|
|
f42671022f | ||
|
|
2122f095e8 | ||
|
|
91fe7d51f9 |
19
.github/workflows/build.yml
vendored
19
.github/workflows/build.yml
vendored
@@ -21,14 +21,17 @@ jobs:
|
||||
working-directory: bin
|
||||
run: ./makeright x
|
||||
|
||||
build-pi:
|
||||
runs-on: [self-hosted, linux, ARM]
|
||||
if: ${{ github.repository == 'Interlisp/maiko' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build
|
||||
working-directory: bin
|
||||
run: ./makeright x
|
||||
#
|
||||
# Commented out because the RPi is not online at this time (6 July 2021)
|
||||
#
|
||||
# build-pi:
|
||||
# runs-on: [self-hosted, linux, ARM]
|
||||
# if: ${{ github.repository == 'Interlisp/maiko' }}
|
||||
# steps:
|
||||
# - uses: actions/checkout@v2
|
||||
# - name: Build
|
||||
# working-directory: bin
|
||||
# run: ./makeright x
|
||||
|
||||
build-cmake:
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
414
.github/workflows/buildReleaseInclDocker.yml
vendored
Normal file
414
.github/workflows/buildReleaseInclDocker.yml
vendored
Normal file
@@ -0,0 +1,414 @@
|
||||
#*******************************************************************************
|
||||
# buidReleaseInclDocker.yml
|
||||
#
|
||||
# Workflow to build a Maiko release that is pushed to github as well as
|
||||
# Docker images incorporating the release, which are pushed to Docker Hub.
|
||||
# For linux: release assets are built/pushed for X86_64, aarch64 and arm7vl and
|
||||
# a multiplatform Docker image is pushed.
|
||||
# For macOS: release assets are built/pushed for X86_64. (No aarch64 as yet.)
|
||||
# For Windows: not supported
|
||||
#
|
||||
# Note release pushed to github also includes source code assets in tar and zip formats.
|
||||
#
|
||||
# 2022-01-16 by Frank Halasz based on earlier workflow called buildDocker.yml
|
||||
#
|
||||
# Copyright 2022 by Interlisp.org
|
||||
#
|
||||
#
|
||||
# ******************************************************************************
|
||||
|
||||
name: 'Build/Push Release & Docker Image'
|
||||
|
||||
env:
|
||||
workflow: 'buildReleaseInclDocker.yml'
|
||||
|
||||
# Run this workflow on ...
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- 'true'
|
||||
|
||||
workflow_call:
|
||||
secrets:
|
||||
DOCKER_USERNAME:
|
||||
required: true
|
||||
DOCKER_PASSWORD:
|
||||
required: true
|
||||
outputs:
|
||||
successful:
|
||||
description: "'True' if maiko build completed successully"
|
||||
value: ${{ jobs.complete.outputs.build_successful }}
|
||||
inputs:
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
required: false
|
||||
type: string
|
||||
default: 'false'
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
# 3 separate jobs here that can run in parallel
|
||||
#
|
||||
# 1. Linux: Build/push a multiplatform Linux Docker image and use results to
|
||||
# build/push Linux release assets.
|
||||
#
|
||||
# 2. MacOs_x86_64: Build maiko for MacOS on X86_64 then create and push release assets.
|
||||
#
|
||||
# 3. Sources: create/push sources assets for this release.
|
||||
#
|
||||
|
||||
jobs:
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Regularize the inputs so they can be referenced the same way whether they are
|
||||
# the result of a workflow_dispatch or a workflow_call
|
||||
|
||||
inputs:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
force: ${{ steps.force.outputs.force }}
|
||||
steps:
|
||||
- id: force
|
||||
run: >
|
||||
if [ '${{ toJSON(inputs) }}' = 'null' ];
|
||||
then echo ::set-output name=force::'${{ github.event.inputs.force }}'; echo "workflow_dispatch";
|
||||
else echo ::set-output name=force::'${{ inputs.force }}'; echo "workflow_call";
|
||||
fi
|
||||
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Use sentry-action to determine if this release has already been built
|
||||
# based on the latest commit to the repo
|
||||
|
||||
sentry:
|
||||
needs: inputs
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
release_not_built: ${{ steps.check.outputs.release_not_built }}
|
||||
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Check if build already run for this commit
|
||||
- name: Build already completed?
|
||||
id: check
|
||||
continue-on-error: true
|
||||
uses: ./../actions/check-sentry-action
|
||||
with:
|
||||
tag: "release_docker"
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Linux: build and push multi-platform docker image for Linux
|
||||
# Use docker images to create and push release assets to github
|
||||
|
||||
linux:
|
||||
|
||||
needs: [inputs, sentry]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Checkout the branch
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Setup release tag
|
||||
- name: Setup Release Tag
|
||||
id: tag
|
||||
uses: ./../actions/release-tag-action
|
||||
|
||||
# Setup docker environment variables
|
||||
- name: Setup Docker Environment Variables
|
||||
id: docker_env
|
||||
run: |
|
||||
DOCKER_OWNER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
|
||||
echo "DOCKER_OWNER=${DOCKER_OWNER}" >> ${GITHUB_ENV}
|
||||
DOCKER_IMAGE=${DOCKER_OWNER}/${{ steps.tag.outputs.repo_name }}
|
||||
DOCKER_TAGS="${DOCKER_IMAGE}:latest,${DOCKER_IMAGE}:${RELEASE_TAG#*-}"
|
||||
echo ::set-output name=build_time::$(date -u +'%Y-%m-%dT%H:%M:%SZ')
|
||||
echo ::set-output name=docker_tags::${DOCKER_TAGS}
|
||||
|
||||
# Setup the Docker Machine Emulation environment.
|
||||
- name: Set up QEMU
|
||||
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@master
|
||||
|
||||
# Login into DockerHub - required to store the created image
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
# Do the Docker Build using the Dockerfile in the repository we
|
||||
# checked out. Push the result to Docker Hub.
|
||||
#
|
||||
# NOTE: THE ACTUAL MAIKO BUILD (FOR LINUX) HAPPENS HERE - I.E., IN THE
|
||||
# DOCKER BUILD CALL. BUILD COMMANDS ARE SPECIFIED IN THE
|
||||
# Dockerfile, NOT HERE IN THE WORKFLOW.
|
||||
#
|
||||
- name: Build Docker Image for Push to Docker Hub
|
||||
if: ${{ true }}
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
builder: ${{ steps.buildx.outputs.name }}
|
||||
build-args: |
|
||||
BUILD_DATE=${{ steps.docker_env.outputs.build_time }}
|
||||
RELEASE_TAG=${{ steps.tag.outputs.release_tag }}
|
||||
context: .
|
||||
file: ./Dockerfile
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
# Push the result to DockerHub
|
||||
push: true
|
||||
tags: ${{ steps.docker_env.outputs.docker_tags }}
|
||||
|
||||
# Redo the Docker Build (hopefully mostly using the cache from the previous build).
|
||||
# But save the results in a directory under /tmp to be used for creating release tars.
|
||||
- name: Rebuild Docker Image For Saving Locally
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
builder: ${{ steps.buildx.outputs.name }}
|
||||
build-args: |
|
||||
BUILD_DATE=${{ steps.docker_env.outputs.build_time }}
|
||||
RELEASE_TAG=${{ steps.tag.outputs.release_tag }}
|
||||
context: .
|
||||
file: ./Dockerfile
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
# Put the results out to the local file system
|
||||
outputs: type=local,dest=/tmp/docker_images
|
||||
tags: ${{ steps.docker_env.outputs.docker_tags }}
|
||||
|
||||
# Use docker results to create releases for github.
|
||||
# Docker results are in /tmp/docker_images. One subdir for each platform.
|
||||
- name: Make release tars for each platform
|
||||
env:
|
||||
RELEASE_TAG: ${{ steps.tag.outputs.release_tag }}
|
||||
run: |
|
||||
mkdir -p /tmp/release_tars
|
||||
for OSARCH in "linux.x86_64:linux_amd64" "linux.aarch64:linux_arm64" "linux.armv7l:linux_arm_v7" ; \
|
||||
do \
|
||||
pushd /tmp/docker_images/${OSARCH##*:}/usr/local/interlisp >/dev/null ; \
|
||||
/usr/bin/tar -c -z \
|
||||
-f /tmp/release_tars/${RELEASE_TAG}-${OSARCH%%:*}.tgz \
|
||||
maiko/bin/osversion \
|
||||
maiko/bin/machinetype \
|
||||
maiko/bin/config.guess \
|
||||
maiko/bin/config.sub \
|
||||
maiko/${OSARCH%%:*}/lde* \
|
||||
; \
|
||||
popd >/dev/null ; \
|
||||
done
|
||||
|
||||
# Push Release to github
|
||||
- name: Push the release
|
||||
uses: ncipollo/release-action@v1.8.10
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts:
|
||||
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-linux.x86_64.tgz,
|
||||
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-linux.aarch64.tgz,
|
||||
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-linux.armv7l.tgz
|
||||
tag: ${{ steps.tag.outputs.release_tag }}
|
||||
draft: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
# MacOS: build for MacOS (X86_64) and use results to
|
||||
# create and push release assets to github
|
||||
macos_x86_64:
|
||||
|
||||
needs: [inputs, sentry]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
|
||||
runs-on: macos-10.15
|
||||
|
||||
steps:
|
||||
|
||||
# Checkout the branch
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Setup release tag
|
||||
- name: Setup Release Tag
|
||||
id: tag
|
||||
uses: ./../actions/release-tag-action
|
||||
|
||||
# Install X11 dependencies
|
||||
- name: Install X11 dependencies on MacOS
|
||||
if: ${{ runner.os == 'macOS'}}
|
||||
run: brew install --cask xquartz
|
||||
|
||||
# Build maiko
|
||||
- name: Build
|
||||
working-directory: ./bin
|
||||
run: |
|
||||
./makeright x
|
||||
./makeright init
|
||||
|
||||
# Create release tar for github.
|
||||
- name: Make release tar(s)
|
||||
env:
|
||||
RELEASE_TAG: ${{ steps.tag.outputs.release_tag }}
|
||||
run: |
|
||||
mkdir -p /tmp/release_tars
|
||||
pushd ${GITHUB_WORKSPACE}/../ >/dev/null
|
||||
tar -c -z \
|
||||
-f /tmp/release_tars/${RELEASE_TAG}-darwin.x86_64.tgz \
|
||||
maiko/bin/osversion \
|
||||
maiko/bin/machinetype \
|
||||
maiko/bin/config.guess \
|
||||
maiko/bin/config.sub \
|
||||
maiko/darwin.x86_64/lde*
|
||||
popd >/dev/null
|
||||
|
||||
# Push Release
|
||||
- name: Push the release
|
||||
uses: ncipollo/release-action@v1.8.10
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts:
|
||||
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-darwin.x86_64.tgz
|
||||
tag: ${{ steps.tag.outputs.release_tag }}
|
||||
draft: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Sources: create and push release assets containing sources to github
|
||||
sources:
|
||||
|
||||
needs: [inputs, sentry]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
# Checkout the branch
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Setup release tag
|
||||
- name: Setup Release Tag
|
||||
id: tag
|
||||
uses: ./../actions/release-tag-action
|
||||
|
||||
# Create source tars for the release
|
||||
- name: Make source tars
|
||||
env:
|
||||
RELEASE_TAG: ${{ steps.tag.outputs.release_tag }}
|
||||
run: |
|
||||
mkdir -p /tmp/release_tars
|
||||
pushd ${GITHUB_WORKSPACE}/../ >/dev/null
|
||||
mv maiko ${RELEASE_TAG}
|
||||
/usr/bin/tar -c -z -f /tmp/release_tars/${RELEASE_TAG}-source.tgz --exclude=.git ${RELEASE_TAG}
|
||||
/usr/bin/find ${RELEASE_TAG} -name .git -prune -o -print |\
|
||||
/usr/bin/zip -@ /tmp/release_tars/${RELEASE_TAG}-source.zip
|
||||
mv ${RELEASE_TAG} maiko
|
||||
popd >/dev/null
|
||||
|
||||
# Push Release
|
||||
- name: Push the release
|
||||
uses: ncipollo/release-action@v1.8.10
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts:
|
||||
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-source.tgz,
|
||||
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-source.zip
|
||||
tag: ${{ steps.tag.outputs.release_tag }}
|
||||
draft: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Use set-sentry-action to determine set the sentry that says this release has
|
||||
# been successfully built
|
||||
|
||||
complete:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
build_successful: ${{ steps.output.outputs.build_successful }}
|
||||
|
||||
needs: [inputs, sentry, linux, macos_x86_64, sources]
|
||||
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Set sentry
|
||||
- name: Is build for this commit already completed?
|
||||
id: set
|
||||
uses: ./../actions/set-sentry-action
|
||||
with:
|
||||
tag: "release_docker"
|
||||
|
||||
- name: Output
|
||||
id: output
|
||||
run: |
|
||||
echo ::set-output name=build_successful::'true'
|
||||
|
||||
######################################################################################
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -5,6 +5,9 @@
|
||||
\#*#
|
||||
.DS_Store
|
||||
# build directories
|
||||
build/**
|
||||
*.m68k-x/**
|
||||
*.m68k/**
|
||||
*.386-x/**
|
||||
*.386/**
|
||||
*.ppc-x/**
|
||||
|
||||
@@ -16,6 +16,19 @@ IF(CMAKE_C_COMPILER_ID MATCHES "SunPro")
|
||||
SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
|
||||
ENDIF()
|
||||
|
||||
find_program(
|
||||
CLANG_TIDY_EXE
|
||||
NAMES "clang-tidy" "clang-tidy13" "clang-tidy12" "clang-tidy11" "clang-tidy10"
|
||||
DOC "Path to clang-tidy executable"
|
||||
)
|
||||
|
||||
IF (CLANG_TIDY_EXE)
|
||||
# There are many many warnings for strcpy instances to deal with,
|
||||
# but suppress it for now so that other issues are more obvious
|
||||
#
|
||||
SET(CMAKE_C_CLANG_TIDY ${CLANG_TIDY_EXE} -checks=-*,cert-*,clang-analyzer-security.*,-clang-analyzer-security.insecureAPI.strcpy,-clang-analyzer-security.insecureAPI.bzero -header-filter=.*)
|
||||
ENDIF()
|
||||
|
||||
INCLUDE(CheckLibraryExists)
|
||||
CHECK_LIBRARY_EXISTS(m fmod "" NEED_LIB_M)
|
||||
IF(NEED_LIB_M)
|
||||
@@ -377,7 +390,7 @@ SET(MAIKO_HDRS
|
||||
)
|
||||
|
||||
ADD_CUSTOM_TARGET(gen-vdate
|
||||
COMMAND mkvdate > vdate.c
|
||||
COMMAND ../bin/mkvdate > vdate.c
|
||||
BYPRODUCTS vdate.c
|
||||
)
|
||||
|
||||
@@ -409,10 +422,6 @@ IF(MAIKO_DISPLAY_X11)
|
||||
TARGET_LINK_LIBRARIES(ldex ${MAIKO_LIBRARIES} ${MAIKO_DISPLAY_X11_LIBRARIES})
|
||||
ENDIF()
|
||||
|
||||
ADD_EXECUTABLE(mkvdate src/mkvdate.c)
|
||||
TARGET_COMPILE_DEFINITIONS(mkvdate PUBLIC ${MAIKO_DEFINITIONS})
|
||||
TARGET_INCLUDE_DIRECTORIES(mkvdate PUBLIC inc)
|
||||
|
||||
ADD_EXECUTABLE(setsout src/setsout.c src/byteswap.c)
|
||||
TARGET_COMPILE_DEFINITIONS(setsout PUBLIC ${MAIKO_DEFINITIONS})
|
||||
TARGET_INCLUDE_DIRECTORIES(setsout PUBLIC inc)
|
||||
|
||||
18
Dockerfile
Normal file
18
Dockerfile
Normal file
@@ -0,0 +1,18 @@
|
||||
FROM ubuntu:focal
|
||||
ARG BUILD_DATE
|
||||
LABEL name="Maiko"
|
||||
LABEL description="Virtual machine for Interlisp Medley"
|
||||
LABEL url="https://github.com/Interlisp/maiko"
|
||||
LABEL build-time=$BUILD_DATE
|
||||
|
||||
ARG TARGETPLATFORM
|
||||
|
||||
RUN apt-get update && apt-get install -y make clang libx11-dev gcc x11vnc xvfb
|
||||
|
||||
COPY --chown=nonroot:nonroot . /app/maiko
|
||||
RUN rm -rf /app/maiko/linux*
|
||||
|
||||
WORKDIR /app/maiko/bin
|
||||
RUN ./makeright x
|
||||
|
||||
RUN rm -rf /app/maiko/inc /app/maiko/include /app/maiko/src
|
||||
@@ -6,7 +6,7 @@ connecting with Lisp for access to display (via X11) and disk etc.
|
||||
|
||||
For an overview, see [Medley Interlisp Introduction](https://github.com/Interlisp/medley/wiki/Medley-Interlisp-Introduction).
|
||||
|
||||
See [the Medley repository](https://github.org/Interlisp/medley) for
|
||||
See [the Medley repository](https://github.com/Interlisp/medley) for
|
||||
* [Issues](https://github.com/Interlisp/medley/issues) (note that maiko issues are there too)
|
||||
* [Discussions](https://github.com/Interlisp/medley/discussions) (Q&A, announcements, etc)
|
||||
* [Medley's README](https://github.com/Interlisp/medley/blob/master/README.md)
|
||||
|
||||
@@ -124,9 +124,19 @@ BIGATOMS True if this emulator will support 3-byte symbols, instead of
|
||||
NEWBITBLT True if we want to use assembler BITBLT code, rather than
|
||||
have code created inline by macro calls.
|
||||
|
||||
USE_DLPI True if the ethernet API is via the SysV Data Link Provider
|
||||
Interface. Solaris uses DLPI.
|
||||
|
||||
USE_NIT True if the ethernet API is via the Network Interface Tap.
|
||||
SunOS uses NIT.
|
||||
|
||||
PKTFILTER True if the ethernet packets are to be filtered before being
|
||||
passed to the Lisp ethernet handler. Available on Sun systems
|
||||
for both the NIT and DLPI cases.
|
||||
|
||||
|
||||
bitbltsub.c:#ifdef GETBASE
|
||||
testdisplay.c:#ifdef NOTUSED
|
||||
uraid.c:#ifdef ETHERINT
|
||||
bitblt.c:#ifndef COLOR
|
||||
bitbltsub.c:#ifndef prropstyle
|
||||
lispmap.h:#ifdef MEDLEY
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
os=${LDEARCH:-`./config.guess`}
|
||||
# o/s switch block
|
||||
case "$os" in
|
||||
m68k-*) echo m68k ;;
|
||||
sparc-*) echo sparc ;;
|
||||
alpha-*) echo alpha ;;
|
||||
i*86-*-*) echo 386 ;;
|
||||
|
||||
@@ -19,7 +19,7 @@ XFLAGS = -I/opt/X11/include -DXWINDOW
|
||||
OPTFLAGS = -O2 -g
|
||||
DEBUGFLAGS = # -DDEBUG -DOPTRACE
|
||||
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) \
|
||||
-DRELEASE=351 -DSTACKCHECK -DFSBCHECK -DPCTRACE
|
||||
-DRELEASE=351 # -DSTACKCHECK -DFSBCHECK -DPCTRACE
|
||||
|
||||
LDFLAGS = -L/opt/X11/lib -lX11 -lm
|
||||
LDELDFLAGS = -L/opt/X11/lib -lX11 -lm
|
||||
|
||||
@@ -16,7 +16,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
|
||||
XFLAGS = -I/usr/local/include -DXWINDOW
|
||||
|
||||
# OPTFLAGS is normally -O2.
|
||||
OPTFLAGS = -O1 -gdwarf-2
|
||||
OPTFLAGS = -O2 -g
|
||||
DFLAGS = $(XFLAGS) -DRELEASE=351
|
||||
|
||||
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
|
||||
|
||||
27
bin/makefile-freebsd.aarch64-x
Normal file
27
bin/makefile-freebsd.aarch64-x
Normal file
@@ -0,0 +1,27 @@
|
||||
# Options for FreeBSD, ARMv7 and X-Windows
|
||||
|
||||
CC = clang -m64 $(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 = -I/usr/local/include -DXWINDOW
|
||||
|
||||
# OPTFLAGS is normally -O2.
|
||||
OPTFLAGS = -O2 -g
|
||||
DFLAGS = $(XFLAGS) -DRELEASE=351
|
||||
|
||||
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
|
||||
LDELDFLAGS = -L/usr/local/lib -lX11 -lc -lm
|
||||
|
||||
OBJECTDIR = ../$(RELEASENAME)/
|
||||
|
||||
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex
|
||||
27
bin/makefile-freebsd.x86_64-x
Normal file
27
bin/makefile-freebsd.x86_64-x
Normal file
@@ -0,0 +1,27 @@
|
||||
# Options for FreeBSD, Intel x86_64 and X-Windows
|
||||
|
||||
CC = clang -m64 $(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 = -I/usr/local/include -DXWINDOW
|
||||
|
||||
# OPTFLAGS is normally -O2.
|
||||
OPTFLAGS = -O2 -g
|
||||
DFLAGS = $(XFLAGS) -DRELEASE=351
|
||||
|
||||
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
|
||||
LDELDFLAGS = -L/usr/local/lib -lX11 -lc -lm
|
||||
|
||||
OBJECTDIR = ../$(RELEASENAME)/
|
||||
|
||||
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex
|
||||
27
bin/makefile-init-freebsd.386
Normal file
27
bin/makefile-init-freebsd.386
Normal file
@@ -0,0 +1,27 @@
|
||||
# Options for FreeBSD, Intel 386/486 and X Windows
|
||||
|
||||
CC = clang -m32 $(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 = -I/usr/local/include -DXWINDOW
|
||||
|
||||
# OPTFLAGS is normally -O0 for init
|
||||
OPTFLAGS = -O0 -g
|
||||
DFLAGS = $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
|
||||
|
||||
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
|
||||
LDELDFLAGS = -L/usr/local/lib -lX11 -lc -lm
|
||||
|
||||
OBJECTDIR = ../$(RELEASENAME)/
|
||||
|
||||
default : ../$(OSARCHNAME)/ldeinit
|
||||
27
bin/makefile-init-freebsd.aarch64
Normal file
27
bin/makefile-init-freebsd.aarch64
Normal file
@@ -0,0 +1,27 @@
|
||||
# Options for FreeBSD, ARMv7 and X-Windows
|
||||
|
||||
CC = clang -m64 $(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 = -I/usr/local/include -DXWINDOW
|
||||
|
||||
# OPTFLAGS is normally -O0 for init
|
||||
OPTFLAGS = -O0 -g
|
||||
DFLAGS = $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
|
||||
|
||||
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
|
||||
LDELDFLAGS = -L/usr/local/lib -lX11 -lc -lm
|
||||
|
||||
OBJECTDIR = ../$(RELEASENAME)/
|
||||
|
||||
default : ../$(OSARCHNAME)/ldeinit
|
||||
27
bin/makefile-init-freebsd.x86_64
Normal file
27
bin/makefile-init-freebsd.x86_64
Normal file
@@ -0,0 +1,27 @@
|
||||
# Options for FreeBSD, Intel x86_64 and X-Windows
|
||||
|
||||
CC = clang -m64 $(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 = -I/usr/local/include -DXWINDOW
|
||||
|
||||
# OPTFLAGS is normally -O0 for init
|
||||
OPTFLAGS = -O0 -g
|
||||
DFLAGS = $(XFLAGS) -DRELEASE=351 -DNOVERSION -DINIT
|
||||
|
||||
LDFLAGS = -L/usr/local/lib -lX11 -lc -lm
|
||||
LDELDFLAGS = -L/usr/local/lib -lX11 -lc -lm
|
||||
|
||||
OBJECTDIR = ../$(RELEASENAME)/
|
||||
|
||||
default : ../$(OSARCHNAME)/ldeinit
|
||||
@@ -41,7 +41,7 @@ OPTFLAGS = -g3 -O0
|
||||
|
||||
DEBUGFLAGS = # -DSTACKCHECK -DFNSTKCHECK
|
||||
|
||||
MACHINEFLAGS = -DOS5 -DUSE_DLPI -DLOCK_X_UPDATES
|
||||
MACHINEFLAGS = -DOS5 -DUSE_DLPI
|
||||
|
||||
# The LDEINIT wants to have NOVERSION set, so we don't hang up on
|
||||
# any change-over in versions.
|
||||
|
||||
@@ -36,7 +36,6 @@ DEBUGFLAGS = # -DSTACKCHECK -DFNSTKCHECK
|
||||
DFLAGS = $(XFLAGS) \
|
||||
$(DEBUGFLAGS) \
|
||||
-DOS5 \
|
||||
-DLOCK_X_UPDATES \
|
||||
-DRELEASE=351
|
||||
|
||||
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm -lsocket -lnsl
|
||||
|
||||
@@ -36,7 +36,6 @@ DEBUGFLAGS = # -DSTACKCHECK -DFNSTKCHECK
|
||||
DFLAGS = $(XFLAGS) \
|
||||
$(DEBUGFLAGS) \
|
||||
-DOS5 -DUSE_DLPI \
|
||||
-DLOCK_X_UPDATES \
|
||||
-I$(OPENWINHOME)/include \
|
||||
-DRELEASE=210
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ OPTFLAGS = -O2 -g3
|
||||
|
||||
DEBUGFLAGS = # -DSTACKCHECK -DFNSTKCHECK
|
||||
|
||||
MACHINEFLAGS = -DOS5 -DUSE_DLPI -DLOCK_X_UPDATES
|
||||
MACHINEFLAGS = -DOS5 -DUSE_DLPI
|
||||
|
||||
DFLAGS = $(XFLAGS) \
|
||||
$(DEBUGFLAGS) \
|
||||
|
||||
@@ -36,7 +36,6 @@ DEBUGFLAGS = # -DSTACKCHECK -DFNSTKCHECK
|
||||
DFLAGS = $(XFLAGS) \
|
||||
$(DEBUGFLAGS) \
|
||||
-DOS5 \
|
||||
-DLOCK_X_UPDATES \
|
||||
-DUSE_DLPI \
|
||||
-DRELEASE=351
|
||||
|
||||
|
||||
@@ -160,9 +160,6 @@ $(OSARCHDIR)$(LDENAME): $(LIBFILES) $(EXTFILES) $(OBJECTDIR)vdate.o
|
||||
$(OSARCHDIR)ldeether: $(OBJECTDIR)ldeether.o $(DLPIFILES)
|
||||
$(CC) $(OBJECTDIR)ldeether.o $(DLPIFILES) $(LDEETHERLDFLAGS) -o $(OSARCHDIR)ldeether
|
||||
|
||||
$(OSARCHDIR)mkvdate: $(OBJECTDIR)mkvdate.o $(REQUIRED-INCS)
|
||||
$(CC) $(OBJECTDIR)mkvdate.o $(LDFLAGS) -o $(OSARCHDIR)mkvdate
|
||||
|
||||
$(OSARCHDIR)tstsout: $(OBJECTDIR)tstsout.o $(BYTESWAPFILES) $(REQUIRED-INCS)
|
||||
$(CC) $(OBJECTDIR)tstsout.o $(BYTESWAPFILES) $(LDFLAGS) -lc -lm -o $(OSARCHDIR)tstsout
|
||||
|
||||
@@ -171,9 +168,9 @@ $(OSARCHDIR)setsout: $(OBJECTDIR)setsout.o $(REQUIRED-INCS)
|
||||
|
||||
#### Component files ######################################################
|
||||
|
||||
$(OBJECTDIR)vdate.o: $(LIBFILES) $(EXTFILES) $(OSARCHDIR)mkvdate
|
||||
$(OBJECTDIR)vdate.o: $(LIBFILES) $(EXTFILES) mkvdate
|
||||
$(RM) $(OBJECTDIR)vdate.c
|
||||
$(OSARCHDIR)mkvdate > $(OBJECTDIR)vdate.c
|
||||
$(BINDIR)mkvdate > $(OBJECTDIR)vdate.c
|
||||
$(CC) $(RFLAGS) $(OBJECTDIR)vdate.c -o $(OBJECTDIR)vdate.o
|
||||
|
||||
$(OBJECTDIR)tstsout.o: $(SRCDIR)tstsout.c $(REQUIRED-INCS) \
|
||||
@@ -197,9 +194,6 @@ $(OBJECTDIR)ldeboot.o: $(SRCDIR)ldeboot.c $(REQUIRED-INCS) \
|
||||
$(OBJECTDIR)ldeether.o: $(SRCDIR)ldeether.c $(REQUIRED-INCS)
|
||||
$(CC) $(RFLAGS) $(SRCDIR)ldeether.c -o $(OBJECTDIR)ldeether.o
|
||||
|
||||
$(OBJECTDIR)mkvdate.o: $(SRCDIR)mkvdate.c $(REQUIRED-INCS)
|
||||
$(CC) $(RFLAGS) $(SRCDIR)mkvdate.c -o $(OBJECTDIR)mkvdate.o
|
||||
|
||||
$(OBJECTDIR)main.o: $(SRCDIR)main.c $(REQUIRED-INCS) \
|
||||
$(INCDIR)lispemul.h $(INCDIR)dbprint.h \
|
||||
$(INCDIR)emlglob.h $(INCDIR)address.h $(INCDIR)adr68k.h $(INCDIR)stack.h \
|
||||
|
||||
5
bin/mkvdate
Executable file
5
bin/mkvdate
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
cat <<EOF
|
||||
#include <time.h>
|
||||
time_t MDate = $(date +%s);
|
||||
EOF
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/bin/sh
|
||||
os=`./config.guess`
|
||||
os=${LDEARCH:-`./config.guess`}
|
||||
case "$os" in
|
||||
m68k-*-amigaos) echo amigaos ;;
|
||||
sparc-sun-sunos*) echo sunos4 ;;
|
||||
sparc-sun-solaris1*) echo sunos4 ;;
|
||||
*-*-solaris2*) echo sunos5 ;;
|
||||
|
||||
44
bin/release-one
Executable file
44
bin/release-one
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/bin/sh
|
||||
# Make and release maiko for one os / arch
|
||||
# Hopefully to be replaced by GitHub Action
|
||||
|
||||
if [ ! -x ../../maiko/bin/machinetype ] ; then
|
||||
echo ERROR: Must be run from maiko/bin
|
||||
exit 1
|
||||
fi
|
||||
|
||||
tag=$1
|
||||
if [ -z "$tag" ] ; then
|
||||
tag=maiko-`date +%y%m%d`
|
||||
fi
|
||||
|
||||
export PATH=.:"$PATH"
|
||||
osarch=`osversion`.`machinetype`
|
||||
|
||||
|
||||
./makeright x
|
||||
./makeright init
|
||||
|
||||
cd ../..
|
||||
mkdir -p maiko/build
|
||||
echo making $tag-$osarch.tgz
|
||||
|
||||
tar cfz maiko/build/$tag-$osarch.tgz \
|
||||
maiko/bin/osversion \
|
||||
maiko/bin/machinetype \
|
||||
maiko/bin/config.guess \
|
||||
maiko/bin/config.sub \
|
||||
maiko/$osarch/lde*
|
||||
|
||||
if ! command -v gh >/dev/null ; then
|
||||
echo
|
||||
echo The GitHub Command Line Interface, gh
|
||||
echo does not seem to be installed.
|
||||
echo Please upload maiko/build/$tag-$osarch.tgz
|
||||
echo to https://github.com/Interlisp/maiko/releases $tag
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo uploading
|
||||
cd maiko
|
||||
gh release upload --clobber $tag build/$tag-$osarch.tgz
|
||||
36
bin/start-release
Executable file
36
bin/start-release
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
# This script is just a placeholder until we get GitHub
|
||||
# Actions to do releases
|
||||
|
||||
# Start Maiko release from maiko/bin
|
||||
# startrelease [tag]
|
||||
# tag defaults to maiko-YYMMDD
|
||||
|
||||
tag=$1
|
||||
if [ -z "$tag" ] ; then
|
||||
tag=maiko-`date +%y%m%d`
|
||||
fi
|
||||
|
||||
if ! command -v gh >/dev/null ; then
|
||||
echo "It seems like 'gh', the GitHub Command Line Interface is"
|
||||
echo "not installed. You can start a release using the"
|
||||
echo "web interface at"
|
||||
echo "https://github.com/Interlisp/maiko/releases/new"
|
||||
echo "Make up a tag (or use $tag)"
|
||||
echo "and run './release-one tag' (or manually upload if"
|
||||
echo "no 'gh' is installed) on every os/machine you want"
|
||||
echo "this release to work for"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Now for the only thing this script is actually doing
|
||||
|
||||
gh release create $tag -p -t $tag -n "See release notes in medley repo"
|
||||
|
||||
|
||||
echo "Now run "
|
||||
echo ./release-one $tag
|
||||
echo "in maiko/bin on every os/machine you want this release"
|
||||
echo "to work for. When done, edit the release in your"
|
||||
echo "browser and uncheck the prerelease box "
|
||||
|
||||
@@ -77,7 +77,7 @@ typedef struct
|
||||
, White_Pixel ); \
|
||||
XLOCK; \
|
||||
XFlush( display ); \
|
||||
XUNLOCK; \
|
||||
XUNLOCK( display ); \
|
||||
(child_win)->parent = parent_win; \
|
||||
if( (child_win)->after_create ) \
|
||||
((child_win)->after_create)(parent_win,child_win);\
|
||||
@@ -96,7 +96,7 @@ typedef struct
|
||||
, (window)->width \
|
||||
, (window)->height ); \
|
||||
XFlush( display ); \
|
||||
XUNLOCK; \
|
||||
XUNLOCK( display ); \
|
||||
if( (window)->after_resize ) \
|
||||
((window)->after_resize)( window ); \
|
||||
} \
|
||||
@@ -106,7 +106,7 @@ typedef struct
|
||||
XLOCK; \
|
||||
XDefineCursor( display, (window)->win, *(mycursor) ); \
|
||||
XFlush( display ); \
|
||||
XUNLOCK; \
|
||||
XUNLOCK( display ); \
|
||||
(window)->cursor = mycursor; \
|
||||
}
|
||||
|
||||
|
||||
@@ -1,36 +1,19 @@
|
||||
#ifndef BBTSUBDEFS_H
|
||||
#define BBTSUBDEFS_H 1
|
||||
|
||||
/***** Don't use PixRect code on 386i for now *****/
|
||||
/***** -or on any machine that doesn't support it (HP, e.g.) *****/
|
||||
|
||||
/********************************************************/
|
||||
/* */
|
||||
/* prropstyle is DEFINED when we want to use */
|
||||
/* pixrect versions of the operations in this */
|
||||
/* file, and UNDEFINED, when we want to use */
|
||||
/* Don Charnley's bitblt code to do them. */
|
||||
/* Don Charnley's bitblt code */
|
||||
/* */
|
||||
/********************************************************/
|
||||
#include "lispemul.h" /* for LispPTR, DLword */
|
||||
|
||||
#if defined(SUNDISPLAY) && \
|
||||
!defined(NOPIXRECT) && \
|
||||
!defined(NEWBITBLT)
|
||||
#define prropstyle 1
|
||||
#endif
|
||||
|
||||
void bitbltsub(LispPTR *argv);
|
||||
LispPTR n_new_cursorin(DLword *baseaddr, int dx, int dy, int w, int h);
|
||||
LispPTR bitblt_bitmap(LispPTR *args);
|
||||
LispPTR bitshade_bitmap(LispPTR *args);
|
||||
#ifndef prropstyle
|
||||
void bltchar(LispPTR *args);
|
||||
void newbltchar(LispPTR *args);
|
||||
#else
|
||||
LispPTR bltchar(LispPTR *args);
|
||||
LispPTR newbltchar(LispPTR *args);
|
||||
#endif
|
||||
void ccfuncall(unsigned int atom_index, int argnum, int bytenum);
|
||||
void tedit_bltchar(LispPTR *args);
|
||||
|
||||
|
||||
@@ -54,13 +54,6 @@ extern int DisplayRasterWidth;
|
||||
#define ShowCursor { (currentdsp->mouse_visible)(IOPage68K->dlmousex, \
|
||||
IOPage68K->dlmousey); }
|
||||
|
||||
#elif defined(SUNDISPLAY) && defined(OLD_CURSOR)
|
||||
extern struct winlock DisplayLockArea;
|
||||
#define HideCursor \
|
||||
ioctl( LispWindowFd, WINLOCKSCREEN, &DisplayLockArea)
|
||||
|
||||
#define ShowCursor \
|
||||
ioctl( LispWindowFd, WINUNLOCKSCREEN, &DisplayLockArea)
|
||||
#else
|
||||
extern DLword *EmCursorX68K,*EmCursorY68K;
|
||||
#define HideCursor { taking_mouse_down();}
|
||||
|
||||
@@ -3,6 +3,4 @@
|
||||
void stab(void);
|
||||
void warn(const char *s);
|
||||
int error(const char *s);
|
||||
int stackcheck(void);
|
||||
void stackoverflow(void);
|
||||
#endif
|
||||
|
||||
11
inc/devif.h
11
inc/devif.h
@@ -264,11 +264,12 @@ typedef struct
|
||||
|
||||
|
||||
#ifdef XWINDOW
|
||||
#define DefineCursor(display, window, mycursor) { \
|
||||
XLOCK;\
|
||||
XDefineCursor( display, window, *(mycursor) );\
|
||||
XUNLOCK;\
|
||||
}
|
||||
#define DefineCursor(dsp, window, mycursor) \
|
||||
do { \
|
||||
XLOCK; \
|
||||
XDefineCursor((dsp)->display_id, window, *(mycursor) ); \
|
||||
XUNLOCK(dsp); \
|
||||
} while (0)
|
||||
#endif /* XWINDOW */
|
||||
|
||||
#define OUTER_SB_WIDTH(dsp) ((dsp)->ScrollBarWidth + 2*((dsp)->InternalBorderWidth))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef KEYEVENTDEFS_H
|
||||
#define KEYEVENTDEFS_H 1
|
||||
#include <sys/types.h>
|
||||
void getsignaldata(int sig);
|
||||
void process_io_events();
|
||||
void kb_trans(u_short keycode, u_short upflg);
|
||||
void taking_mouse_down(void);
|
||||
void copy_cursor(int newx, int newy);
|
||||
|
||||
@@ -13,23 +13,24 @@
|
||||
/************************************************************************/
|
||||
|
||||
#ifdef LOCK_X_UPDATES
|
||||
#define XLOCK { XLocked++; /* printf("L"); fflush(stdout);*/}
|
||||
#define XUNLOCK \
|
||||
{ XLocked--;/* printf("U"); fflush(stdout);*/ \
|
||||
if (XNeedSignal) \
|
||||
#define XLOCK do { XLocked++; } while (0)
|
||||
#define XUNLOCK(dsp) \
|
||||
do { \
|
||||
if (XLocked == 1 && XNeedSignal) \
|
||||
{ \
|
||||
XNeedSignal = 0; \
|
||||
kill(getpid(), SIGPOLL); \
|
||||
}; \
|
||||
}
|
||||
getXsignaldata(dsp); \
|
||||
}; \
|
||||
XLocked--; \
|
||||
} while (0)
|
||||
#else
|
||||
#define XLOCK
|
||||
#define XUNLOCK
|
||||
#endif /* LOCK_X_UPDATES */
|
||||
|
||||
extern int XLocked;
|
||||
extern int XNeedSignal;
|
||||
/* this is !0 if we're locked; it should be 0 or larger always */
|
||||
#include <signal.h>
|
||||
extern volatile sig_atomic_t XLocked;
|
||||
extern volatile sig_atomic_t XNeedSignal;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
NumericStringP(vp, YES, NO); \
|
||||
NO: *vp = 0; \
|
||||
YES: \
|
||||
if ((*vp)) ver = atoi(vp); \
|
||||
if ((*vp)) ver = strtol(vp, (char **)NULL, 10); \
|
||||
else ver = -1; \
|
||||
} \
|
||||
else ver = -1; \
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
\
|
||||
register char *lv_cp; \
|
||||
register char *lv_vp; \
|
||||
register int lv_ver; \
|
||||
register unsigned lv_ver; \
|
||||
char lv_ver_buf[VERSIONLEN]; \
|
||||
\
|
||||
lv_cp = pathname; \
|
||||
@@ -48,12 +48,12 @@
|
||||
/* \
|
||||
* Convert the remaining field to digit. \
|
||||
*/ \
|
||||
lv_ver = atoi(lv_vp + 1); \
|
||||
if (lv_ver == 0) { \
|
||||
lv_ver = strtoul(lv_vp + 1, (char **)NULL, 10); \
|
||||
if (lv_ver == 0) { \
|
||||
/* versionless */ \
|
||||
*lv_vp = 0; \
|
||||
} else { \
|
||||
sprintf(lv_ver_buf, ".~%d~", lv_ver); \
|
||||
sprintf(lv_ver_buf, ".~%u~", lv_ver); \
|
||||
*lv_vp = 0; \
|
||||
strcat(pathname, lv_ver_buf); \
|
||||
} \
|
||||
@@ -61,7 +61,7 @@
|
||||
\
|
||||
NO: \
|
||||
strcpy(lv_ver_buf, lv_vp + 1); \
|
||||
strcat(lv_ver_buf, "~"); \
|
||||
strcat(lv_ver_buf, "~"); \
|
||||
*lv_vp++ = '.'; \
|
||||
*lv_vp++ = '~'; \
|
||||
*lv_vp = 0; \
|
||||
|
||||
@@ -385,9 +385,9 @@ extern DLword *Lisp_world; /* To access LispSysout area */
|
||||
*(start - 1) = ';'; \
|
||||
*start = '\0'; \
|
||||
*end = '\0'; \
|
||||
/* call ato i to eliminate leading 0s. */ \
|
||||
ver_no = atoi(start + 1); \
|
||||
sprintf(ver_buf, "%d", ver_no); \
|
||||
/* call strtoul() to eliminate leading 0s. */ \
|
||||
ver_no = strtoul(start + 1, (char **)NULL, 10); \
|
||||
sprintf(ver_buf, "%u", ver_no); \
|
||||
strcat(pathname, ver_buf); \
|
||||
goto CONT; \
|
||||
\
|
||||
@@ -494,7 +494,7 @@ extern DLword *Lisp_world; /* To access LispSysout area */
|
||||
|
||||
#define MAXVERSION 999999999
|
||||
|
||||
#define LASTVERSIONARRAY (-1)
|
||||
#define LASTVERSIONARRAY ((unsigned) -1)
|
||||
#define VERSIONARRAYLENGTH 200
|
||||
|
||||
#define NoFileP(varray) \
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include "lispemul.h" /* for LispPTR, DLword */
|
||||
#include "miscstat.h" /* for MISCSTAT */
|
||||
|
||||
extern DLword *Atomspace; /* ATOMSPACE */
|
||||
extern DLword *Stackspace; /* STACKSPACE*/
|
||||
extern DLword *Plistspace; /* PLISTSPACE */
|
||||
extern DLword *DTDspace; /* DTDSPACE */
|
||||
@@ -41,8 +40,6 @@
|
||||
extern DLword *AtomSpace; /* New atoms, initial set */
|
||||
extern DLword *Defspace; /* DEFSPACE */
|
||||
extern DLword *Valspace; /* VALSPACE */
|
||||
extern DLword *Spospspace; /* POSITIVE Smallp */
|
||||
extern DLword *Snegspace; /* NEGATIVE Smallp */
|
||||
|
||||
/* For Virtual Mem Management */
|
||||
#ifdef BIGVM
|
||||
@@ -82,7 +79,6 @@ extern DLword *UFNTable ;
|
||||
|
||||
|
||||
/* FLEX STORAGES */
|
||||
extern DLword *Arrayspace; /* Start of ARRAYSPACE */
|
||||
extern DLword *MDS_space_bottom; /* Start of MDS (pre -2) */
|
||||
extern DLword *PnCharspace ; /* Space for PN char codes (Thin only) */
|
||||
|
||||
|
||||
@@ -59,6 +59,13 @@
|
||||
# define MAIKO_OS_DETECTED 1
|
||||
#endif
|
||||
|
||||
#ifdef amigaos3
|
||||
# define MAIKO_OS_AMIGAOS3 1
|
||||
# define MAIKO_OS_NAME "AmigaOS 3"
|
||||
# define MAIKO_OS_UNIX_LIKE 1
|
||||
# define MAIKO_OS_DETECTED 1
|
||||
#endif
|
||||
|
||||
/* __SVR4: Defined by clang, gcc, and Sun Studio.
|
||||
* __SVR4__ was only defined by Sun Studio. */
|
||||
#if defined(__sun) && defined(__SVR4)
|
||||
@@ -137,6 +144,13 @@
|
||||
# define MAIKO_ARCH_DETECTED 1
|
||||
#endif
|
||||
|
||||
#ifdef __mc68000
|
||||
# define MAIKO_ARCH_M68000 1
|
||||
# define MAIKO_ARCH_NAME "Motorola68K"
|
||||
# define MAIKO_ARCH_WORD_BITS 32
|
||||
# define MAIKO_ARCH_DETECTED 1
|
||||
#endif
|
||||
|
||||
/* Modern GNU C, Clang, Sun Studio provide __BYTE_ORDER__
|
||||
* Older GNU C (ca. 4.0.1) provides __BIG_ENDIAN__/__LITTLE_ENDIAN__
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#ifndef MAINDEFS_H
|
||||
#define MAINDEFS_H 1
|
||||
int makepathname(char *src, char *dst);
|
||||
void start_lisp(void);
|
||||
void print_info_lines(void);
|
||||
#endif
|
||||
|
||||
@@ -5,6 +5,5 @@ DLword compute_hash(const char *char_base, DLword offset, DLword length);
|
||||
DLword compute_lisp_hash(const char *char_base, DLword offset, DLword length, DLword fatp);
|
||||
LispPTR compare_chars(register const char *char1, register const char *char2, register DLword length);
|
||||
LispPTR compare_lisp_chars(register const char *char1, register const char *char2, register DLword length, DLword fat1, DLword fat2);
|
||||
LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int non_numericp);
|
||||
LispPTR parse_number(const char *char_base, short int length);
|
||||
LispPTR make_atom(const char *char_base, DLword offset, DLword length);
|
||||
#endif
|
||||
|
||||
@@ -3,5 +3,4 @@
|
||||
#include "lispemul.h" /* for LispPTR, DLword */
|
||||
LispPTR N_OP_createcell(register LispPTR tos);
|
||||
DLword *createcell68k(unsigned int type);
|
||||
LispPTR Create_n_Set_Cell(unsigned int type, LispPTR value);
|
||||
#endif
|
||||
|
||||
2
inc/my.h
2
inc/my.h
@@ -71,7 +71,7 @@
|
||||
}
|
||||
|
||||
static inline LispPTR
|
||||
aref_switch(int type, LispPTR tos, LispPTR baseL, int index)
|
||||
aref_switch(unsigned type, LispPTR tos, LispPTR baseL, int index)
|
||||
{
|
||||
LispPTR result;
|
||||
DLword *wordp;
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
/* FAST case return use */
|
||||
#ifndef RESWAPPEDCODESTREAM
|
||||
#define FastRetCALL \
|
||||
{ \
|
||||
do { \
|
||||
/* Get IVar from Returnee's IVAR offset slot(BF) */ \
|
||||
IVar = Addr68k_from_LADDR(STK_OFFSET | GETWORD((DLword *)CURRENTFX -1)); \
|
||||
/* Get FuncObj from Returnee's FNHEAD slot in FX */ \
|
||||
@@ -43,10 +43,10 @@
|
||||
Addr68k_from_LADDR(FX_FNHEADER); \
|
||||
/* Get PC from Returnee's pc slot in FX */ \
|
||||
PC = (ByteCode *)FuncObj + CURRENTFX->pc ; \
|
||||
}
|
||||
} while (0)
|
||||
#else
|
||||
#define FastRetCALL \
|
||||
{ \
|
||||
do { \
|
||||
/* Get IVar from Returnee's IVAR offset slot(BF) */ \
|
||||
IVar = Addr68k_from_LADDR(STK_OFFSET | GETWORD((DLword *)CURRENTFX -1)); \
|
||||
/* Get FuncObj from Returnee's FNHEAD slot in FX */ \
|
||||
@@ -59,7 +59,7 @@
|
||||
byte_swap_code_block(FuncObj); \
|
||||
FuncObj->byteswapped = 1; \
|
||||
} \
|
||||
}
|
||||
} while (0)
|
||||
#endif /* RESWAPPEDCODESTREAM */
|
||||
|
||||
|
||||
|
||||
332
inc/subrs.h
332
inc/subrs.h
@@ -1,194 +1,150 @@
|
||||
#ifndef SUBRS_H
|
||||
#define SUBRS_H 1
|
||||
|
||||
/* $Id: subrs.h,v 1.2 1999/01/03 02:06:24 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved */
|
||||
|
||||
/* This file written from LLSUBRS on 13-Sep-2021 15:19:22 */
|
||||
/* Do not edit this file! Instead, edit the list \initsubrs */
|
||||
/* on the lisp file LLSUBRS and then call WRITECALLSUBRS to */
|
||||
/* generate a new version. */
|
||||
#define sb_BACKGROUNDSUBR 06
|
||||
#define sb_CHECKBCPLPASSWORD 07
|
||||
#define sb_DISKPARTITION 010
|
||||
#define sb_DSPBOUT 011
|
||||
#define sb_DSPRATE 012
|
||||
#define sb_GATHERSTATS 013
|
||||
#define sb_GETPACKETBUFFER 014
|
||||
#define sb_LISPFINISH 015
|
||||
#define sb_MOREVMEMFILE 016
|
||||
#define sb_RAID 017
|
||||
#define sb_READRAWPBI 020
|
||||
#define sb_WRITERAWPBI 021
|
||||
#define sb_SETSCREENCOLOR 022
|
||||
#define sb_SHOWDISPLAY 023
|
||||
#define sb_PUPLEVEL1STATE 024
|
||||
#define sb_WRITESTATS 025
|
||||
#define sb_CONTEXTSWITCH 026
|
||||
#define sb_COPYSYS0SUBR 027
|
||||
#define sb_WRITEMAP 030
|
||||
|
||||
#define sb_UFS_GETFILENAME 042
|
||||
#define sb_UFS_DELETEFILE 043
|
||||
#define sb_UFS_RENAMEFILE 044
|
||||
#define sb_COM_READPAGES 045
|
||||
#define sb_COM_WRITEPAGES 046
|
||||
#define sb_COM_TRUNCATEFILE 047
|
||||
|
||||
#define sb_UFS_DIRECTORYNAMEP 051
|
||||
#define sb_COM_GETFREEBLOCK 055
|
||||
#define sb_SETUNIXTIME 060
|
||||
#define sb_GETUNIXTIME 061
|
||||
#define sb_COPYTIMESTATS 062
|
||||
#define sb_UNIX_USERNAME 063
|
||||
#define sb_UNIX_FULLNAME 064
|
||||
#define sb_UNIX_GETENV 065
|
||||
#define sb_UNIX_GETPARM 066
|
||||
#define sb_CHECK_SUM 067
|
||||
#define sb_ETHER_SUSPEND 070
|
||||
#define sb_ETHER_RESUME 071
|
||||
#define sb_ETHER_AVAILABLE 072
|
||||
#define sb_ETHER_RESET 073
|
||||
#define sb_ETHER_GET 074
|
||||
#define sb_ETHER_SEND 075
|
||||
#define sb_ETHER_SETFILTER 076
|
||||
#define sb_ETHER_CHECK 077
|
||||
#define sb_DSPCURSOR 0100
|
||||
#define sb_SETMOUSEXY 0101
|
||||
#define sb_DSP_VIDEOCOLOR 0102
|
||||
#define sb_DSP_SCREENWIDTH 0103
|
||||
#define sb_DSP_SCREENHEIGHT 0104
|
||||
#define sb_BITBLTSUB 0105
|
||||
#define sb_BLTCHAR 0106
|
||||
#define sb_TEDIT_BLTCHAR 0107
|
||||
#define sb_BITBLT_BITMAP 0110
|
||||
#define sb_BLTSHADE_BITMAP 0111
|
||||
|
||||
#define sb_RS232C_CMD 0112
|
||||
#define sb_RS232C_READ_INIT 0113
|
||||
#define sb_RS232C_WRITE 0114
|
||||
|
||||
#define sb_KEYBOARDBEEP 0120
|
||||
#define sb_KEYBOARDMAP 0121
|
||||
#define sb_KEYBOARDSTATE 0122
|
||||
|
||||
#define sb_VMEMSAVE 0131
|
||||
#define sb_LISP_FINISH 0132
|
||||
#define sb_NEWPAGE 0133
|
||||
#define sb_DORECLAIM 0134
|
||||
#define sb_DUMMY_135Q 0135
|
||||
#define sb_NATIVE_MEMORY_REFERENCE 0136
|
||||
#define sb_OLD_COMPILE_LOAD_NATIVE 0137 /* obsolete */
|
||||
#define sb_DISABLEGC 0140
|
||||
|
||||
#define sb_COM_SETFILEINFO 0147
|
||||
#define sb_COM_OPENFILE 0150
|
||||
#define sb_COM_CLOSEFILE 0151
|
||||
#define sb_DSK_GETFILENAME 0152
|
||||
#define sb_DSK_DELETEFILE 0153
|
||||
#define sb_DSK_RENAMEFILE 0154
|
||||
#define sb_COM_NEXT_FILE 0156
|
||||
#define sb_COM_FINISH_FINFO 0157
|
||||
#define sb_COM_GEN_FILES 0160
|
||||
#define sb_DSK_DIRECTORYNAMEP 0161
|
||||
#define sb_COM_GETFILEINFO 0162
|
||||
#define sb_COM_CHANGEDIR 0164
|
||||
#define sb_UNIX_HANDLECOMM 0165
|
||||
#define sb_OCR_COMM 0166
|
||||
#define sb_RPC_CALL 0167
|
||||
#define sb_MESSAGE_READP 0170
|
||||
#define sb_MESSAGE_READ 0171
|
||||
#define sb_MONITOR_CONTROL 0200
|
||||
#define sb_GET_NATIVE_ADDR_FROM_LISP_PTR 0203
|
||||
#define sb_GET_LISP_PTR_FROM_NATIVE_ADDR 0204
|
||||
#define sb_LOAD_NATIVE_FILE 0205 /* obsolete */
|
||||
#define sb_SUSPEND_LISP 0206
|
||||
#define sb_NEW_BLTCHAR 0207
|
||||
#define sb_COLOR_INIT 0210
|
||||
#define sb_COLOR_SCREENMODE 0211
|
||||
#define sb_COLOR_MAP 0212
|
||||
#define sb_COLOR_BASE 0213
|
||||
#define sb_C_SlowBltChar 0214
|
||||
#define sb_TCP_OP 0220
|
||||
#define sb_WITH_SYMBOL 0221
|
||||
|
||||
/* For linear-programming interface */
|
||||
#define sb_LP_SETUP 0230
|
||||
#define sb_LP_RUN 0231
|
||||
|
||||
/* For Native Windows */
|
||||
#define sb_MNW_OP 0244
|
||||
#define sb_QUERY_WINDOWS 0245
|
||||
#define sb_FILL_IN 0246
|
||||
|
||||
|
||||
/* DLD codes */
|
||||
#define sb_CALL_C_FN 0247
|
||||
#define sb_DLD_LINK 0250
|
||||
#define sb_DLD_UNLINK_BY_FILE 0251
|
||||
#define sb_DLD_UNLINK_BY_SYMBOL 0252
|
||||
#define sb_DLD_GET_SYMBOL 0253
|
||||
#define sb_DLD_GET_FUNC 0254
|
||||
#define sb_DLD_FUNCTION_EXECUTABLE_P 0255
|
||||
#define sb_DLD_LIST_UNDEFINED_SYM 0256
|
||||
#define sb_MALLOC 0257
|
||||
#define sb_FREE 0260
|
||||
#define sb_PUT_C_BASEBYTE 0261
|
||||
#define sb_GET_C_BASEBYTE 0262
|
||||
#define sb_SMASHING_APPLY 0263
|
||||
|
||||
#ifdef TRUECOLOR
|
||||
#define sb_PICTURE_OP 0250
|
||||
#define sb_TRUE_COLOR_OP 0251
|
||||
#ifdef VIDEO
|
||||
#define sb_VIDEO_OP 0252
|
||||
#endif /* VIDEO */
|
||||
|
||||
#endif /* TRUECOLOR */
|
||||
|
||||
|
||||
#define sb_CHAR_OPENFILE 0310
|
||||
#define sb_CHAR_BIN 0311
|
||||
#define sb_CHAR_BOUT 0312
|
||||
#define sb_CHAR_IOCTL 0313
|
||||
#define sb_CHAR_CLOSEFILE 0314
|
||||
#define sb_CHAR_EOFP 0315
|
||||
#define sb_CHAR_READP 0316
|
||||
#define sb_CHAR_BINS 0317
|
||||
#define sb_CHAR_BOUTS 0320
|
||||
#define sb_CHAR_FILLBUFFER 0321
|
||||
|
||||
|
||||
|
||||
/* on the lisp file LLSUBRS and then call WRITECALLSUBRS to */
|
||||
/* generate a new version. */
|
||||
#define sb_BACKGROUNDSUBR 06
|
||||
#define sb_CHECKBCPLPASSWORD 07
|
||||
#define sb_DISKPARTITION 010
|
||||
#define sb_DSPBOUT 011
|
||||
#define sb_DSPRATE 012
|
||||
#define sb_GATHERSTATS 013
|
||||
#define sb_GETPACKETBUFFER 014
|
||||
#define sb_LISPFINISH 015
|
||||
#define sb_MOREVMEMFILE 016
|
||||
#define sb_RAID 017
|
||||
#define sb_READRAWPBI 020
|
||||
#define sb_WRITERAWPBI 021
|
||||
#define sb_SETSCREENCOLOR 022
|
||||
#define sb_SHOWDISPLAY 023
|
||||
#define sb_PUPLEVEL1STATE 024
|
||||
#define sb_WRITESTATS 025
|
||||
#define sb_CONTEXTSWITCH 026
|
||||
#define sb_COPYSYS0SUBR 027
|
||||
#define sb_WRITEMAP 030
|
||||
#define sb_UFS_GETFILENAME 042
|
||||
#define sb_UFS_DELETEFILE 043
|
||||
#define sb_UFS_RENAMEFILE 044
|
||||
#define sb_COM_READPAGES 045
|
||||
#define sb_COM_WRITEPAGES 046
|
||||
#define sb_COM_TRUNCATEFILE 047
|
||||
#define sb_UFS_DIRECTORYNAMEP 051
|
||||
#define sb_COM_GETFREEBLOCK 055
|
||||
#define sb_SETUNIXTIME 060
|
||||
#define sb_GETUNIXTIME 061
|
||||
#define sb_COPYTIMESTATS 062
|
||||
#define sb_UNIX_USERNAME 063
|
||||
#define sb_UNIX_FULLNAME 064
|
||||
#define sb_UNIX_GETENV 065
|
||||
#define sb_UNIX_GETPARM 066
|
||||
#define sb_CHECK_SUM 067
|
||||
#define sb_ETHER_SUSPEND 070
|
||||
#define sb_ETHER_RESUME 071
|
||||
#define sb_ETHER_AVAILABLE 072
|
||||
#define sb_ETHER_RESET 073
|
||||
#define sb_ETHER_GET 074
|
||||
#define sb_ETHER_SEND 075
|
||||
#define sb_ETHER_SETFILTER 076
|
||||
#define sb_ETHER_CHECK 077
|
||||
#define sb_DSPCURSOR 0100
|
||||
#define sb_SETMOUSEXY 0101
|
||||
#define sb_DSP_VIDEOCOLOR 0102
|
||||
#define sb_DSP_SCREENWIDTH 0103
|
||||
#define sb_DSP_SCREENHEIGHT 0104
|
||||
#define sb_BITBLTSUB 0105
|
||||
#define sb_BLTCHAR 0106
|
||||
#define sb_TEDIT_BLTCHAR 0107
|
||||
#define sb_BITBLT_BITMAP 0110
|
||||
#define sb_BLTSHADE_BITMAP 0111
|
||||
#define sb_RS232C_CMD 0112
|
||||
#define sb_RS232C_READ_INIT 0113
|
||||
#define sb_RS232C_WRITE 0114
|
||||
#define sb_KEYBOARDBEEP 0120
|
||||
#define sb_KEYBOARDMAP 0121
|
||||
#define sb_KEYBOARDSTATE 0122
|
||||
#define sb_VMEMSAVE 0131
|
||||
#define sb_LISP_FINISH 0132
|
||||
#define sb_NEWPAGE 0133
|
||||
#define sb_DORECLAIM 0134
|
||||
#define sb_DUMMY_135Q 0135
|
||||
#define sb_NATIVE_MEMORY_REFERENCE 0136
|
||||
#define sb_OLD_COMPILE_LOAD_NATIVE 0137
|
||||
#define sb_DISABLEGC 0140
|
||||
#define sb_COM_SETFILEINFO 0147
|
||||
#define sb_COM_OPENFILE 0150
|
||||
#define sb_COM_CLOSEFILE 0151
|
||||
#define sb_DSK_GETFILENAME 0152
|
||||
#define sb_DSK_DELETEFILE 0153
|
||||
#define sb_DSK_RENAMEFILE 0154
|
||||
#define sb_COM_NEXT_FILE 0156
|
||||
#define sb_COM_FINISH_FINFO 0157
|
||||
#define sb_COM_GEN_FILES 0160
|
||||
#define sb_DSK_DIRECTORYNAMEP 0161
|
||||
#define sb_COM_GETFILEINFO 0162
|
||||
#define sb_COM_CHANGEDIR 0164
|
||||
#define sb_UNIX_HANDLECOMM 0165
|
||||
#define sb_RPC_CALL 0167
|
||||
#define sb_MESSAGE_READP 0170
|
||||
#define sb_MESSAGE_READ 0171
|
||||
#define sb_MONITOR_CONTROL 0200
|
||||
#define sb_GET_NATIVE_ADDR_FROM_LISP_PTR 0203
|
||||
#define sb_GET_LISP_PTR_FROM_NATIVE_ADDR 0204
|
||||
#define sb_LOAD_NATIVE_FILE 0205
|
||||
#define sb_SUSPEND_LISP 0206
|
||||
#define sb_NEW_BLTCHAR 0207
|
||||
#define sb_COLOR_INIT 0210
|
||||
#define sb_COLOR_SCREENMODE 0211
|
||||
#define sb_COLOR_MAP 0212
|
||||
#define sb_COLOR_BASE 0213
|
||||
#define sb_C_SlowBltChar 0214
|
||||
#define sb_UNCOLORIZE_BITMAP 0215
|
||||
#define sb_COLORIZE_BITMAP 0216
|
||||
#define sb_COLOR_8BPPDRAWLINE 0217
|
||||
#define sb_TCP_OP 0220
|
||||
#define sb_WITH_SYMBOL 0221
|
||||
#define sb_CAUSE_INTERRUPT 0222
|
||||
#define sb_OPEN_SOCKET 0240
|
||||
#define sb_CLOSE_SOCKET 0241
|
||||
#define sb_READ_SOCKET 0242
|
||||
#define sb_WRITE_SOCKET 0243
|
||||
#define sb_CALL_C_FUNCTION 0247
|
||||
#define sb_DLD_LINK 0250
|
||||
#define sb_DLD_UNLINK_BY_FILE 0251
|
||||
#define sb_DLD_UNLINK_BY_SYMBOL 0252
|
||||
#define sb_DLD_GET_SYMBOL 0253
|
||||
#define sb_DLD_GET_FUNC 0254
|
||||
#define sb_DLD_FUNCTION_EXECUTABLE_P 0255
|
||||
#define sb_DLD_LIST_UNDEFINED_SYMBOLS 0256
|
||||
#define sb_C_MALLOC 0257
|
||||
#define sb_C_FREE 0260
|
||||
#define sb_C_PUTBASEBYTE 0261
|
||||
#define sb_C_GETBASEBYTE 0262
|
||||
#define sb_CHAR_OPENFILE 0310
|
||||
#define sb_CHAR_BIN 0311
|
||||
#define sb_CHAR_BOUT 0312
|
||||
#define sb_CHAR_IOCTL 0313
|
||||
#define sb_CHAR_CLOSEFILE 0314
|
||||
#define sb_CHAR_EOFP 0315
|
||||
#define sb_CHAR_READP 0316
|
||||
#define sb_CHAR_BINS 0317
|
||||
#define sb_CHAR_BOUTS 0320
|
||||
#define sb_CHAR_FILLBUFFER 0321
|
||||
#define sb_YIELD 0322
|
||||
/* MISCN opcodes */
|
||||
#define miscn_USER_SUBR 00
|
||||
#define miscn_VALUES 01
|
||||
#define miscn_SXHASH 02
|
||||
#define miscn_EQLHASHBITSFN 03
|
||||
#define miscn_STRINGHASHBITS 04
|
||||
#define miscn_STRING_EQUAL_HASHBITS 05
|
||||
#define miscn_VALUES_LIST 06
|
||||
#define miscn_LCFetchMethod 07
|
||||
#define miscn_LCFetchMethodOrHelp 010
|
||||
#define miscn_LCFindVarIndex 011
|
||||
#define miscn_LCGetIVValue 012
|
||||
#define miscn_LCPutIVValue 013
|
||||
|
||||
/* for accessing RAW RS232C port */
|
||||
#define miscn_RAW_RS232C_OPEN 050
|
||||
#define miscn_RAW_RS232C_CLOSE 051
|
||||
#define miscn_RAW_RS232C_SETPARAM 052
|
||||
#define miscn_RAW_RS232C_GETPARAM 053
|
||||
#define miscn_RAW_RS232C_READ 054
|
||||
#define miscn_RAW_RS232C_WRITE 055
|
||||
#define miscn_RAW_RS232C_SETINT 056
|
||||
|
||||
/* for CHATTER */
|
||||
#define miscn_CHATTER 040
|
||||
|
||||
/* for EJLISP */
|
||||
#define miscn_EJLISP 060
|
||||
|
||||
#define miscn_USER_SUBR 00
|
||||
#define miscn_VALUES 01
|
||||
#define miscn_SXHASH 02
|
||||
#define miscn_EQLHASHBITSFN 03
|
||||
#define miscn_STRINGHASHBITS 04
|
||||
#define miscn_STRING_EQUAL_HASHBITS 05
|
||||
#define miscn_VALUES_LIST 06
|
||||
#define miscn_LCFetchMethod 07
|
||||
#define miscn_LCFetchMethodOrHelp 010
|
||||
#define miscn_LCFindVarIndex 011
|
||||
#define miscn_LCGetIVValue 012
|
||||
#define miscn_LCPutIVValue 013
|
||||
/* Assigned USER SUBR numbers */
|
||||
#define user_subr_DUMMY 012
|
||||
#define user_subr_SAMPLE_USER_SUBR 00
|
||||
|
||||
#define user_subr_DUMMY 012
|
||||
#define user_subr_SAMPLE_USER_SUBR 00
|
||||
#endif
|
||||
|
||||
@@ -33,6 +33,7 @@ LispPTR *MakeAtom68k(char *string);
|
||||
void GETTOPVAL(char *string);
|
||||
void all_stack_dump(DLword start, DLword end, DLword silent);
|
||||
void dtd_chain(DLword type);
|
||||
void check_dtd_chain(DLword type);
|
||||
void Trace_FNCall(int numargs, int atomindex, int arg1, LispPTR *tos);
|
||||
void Trace_APPLY(int atomindex);
|
||||
#endif
|
||||
|
||||
@@ -61,8 +61,8 @@ extern int TIMEOUT_TIME;
|
||||
/************************************************************************/
|
||||
|
||||
#define INTRSAFE(exp) \
|
||||
do {} while ((int)(exp) == -1 && errno == EINTR)
|
||||
do {errno = 0; } while ((exp) == -1 && errno == EINTR)
|
||||
|
||||
#define INTRSAFE0(exp) \
|
||||
do {} while ((int)(exp) == 0 && errno == EINTR)
|
||||
do {errno = 0; } while ((exp) == NULL && errno == EINTR)
|
||||
#endif /* TIMEOUT_H */
|
||||
|
||||
50
inc/tosfns.h
50
inc/tosfns.h
@@ -223,22 +223,10 @@
|
||||
CSTKPTRL = (LispPTR *)(((DLword *)CSTKPTR) + FRAMESIZE); \
|
||||
PVARL = (DLword *)CSTKPTR; \
|
||||
{ \
|
||||
register int result; \
|
||||
result = LOCFNCELL->pv; \
|
||||
if (result >= 0) { \
|
||||
register LispPTR unboundval; \
|
||||
unboundval = (LispPTR)0xffffffff; \
|
||||
for (int pv = LOCFNCELL->pv; pv >= 0; pv--) { \
|
||||
const LispPTR unboundval = 0xffffffff; \
|
||||
HARD_PUSH(unboundval); \
|
||||
HARD_PUSH(unboundval); \
|
||||
if (result > 0) { \
|
||||
HARD_PUSH(unboundval); \
|
||||
HARD_PUSH(unboundval); \
|
||||
result -= 1; \
|
||||
for (; --result >= 0;) { \
|
||||
HARD_PUSH(unboundval); \
|
||||
HARD_PUSH(unboundval); \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
CSTKPTRL += 1; \
|
||||
@@ -291,22 +279,10 @@
|
||||
CSTKPTRL = (LispPTR *)(((DLword *)CSTKPTR) + FRAMESIZE); \
|
||||
PVARL = (DLword *)CSTKPTR; \
|
||||
{ \
|
||||
register int result; \
|
||||
result = LOCFNCELL->pv; \
|
||||
if (result >= 0) { \
|
||||
register LispPTR unboundval; \
|
||||
unboundval = (LispPTR)0xffffffff; \
|
||||
for (int pv = LOCFNCELL->pv; pv >= 0; pv--) { \
|
||||
const LispPTR unboundval = 0xffffffff; \
|
||||
HARD_PUSH(unboundval); \
|
||||
HARD_PUSH(unboundval); \
|
||||
if (result > 0) { \
|
||||
HARD_PUSH(unboundval); \
|
||||
HARD_PUSH(unboundval); \
|
||||
result -= 1; \
|
||||
for (; --result >= 0;) { \
|
||||
HARD_PUSH(unboundval); \
|
||||
HARD_PUSH(unboundval); \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
CSTKPTRL += 1; \
|
||||
@@ -537,7 +513,8 @@
|
||||
#ifndef BIGATOMS
|
||||
#define EVAL \
|
||||
do { \
|
||||
LispPTR scratch, work, lookuped; \
|
||||
LispPTR work, lookuped; \
|
||||
DLword scratch[2]; \
|
||||
switch (TOPOFSTACK & SEGMASK) { \
|
||||
case S_POSITIVE: \
|
||||
case S_NEGATIVE: \
|
||||
@@ -545,8 +522,8 @@
|
||||
case ATOM_OFFSET: \
|
||||
if ((TOPOFSTACK == NIL_PTR) || (TOPOFSTACK == ATOM_T)) \
|
||||
goto Hack_Label; \
|
||||
nnewframe(CURRENTFX, &scratch, TOPOFSTACK & 0xffff); \
|
||||
work = POINTERMASK & swapx(scratch); \
|
||||
nnewframe(CURRENTFX, scratch, TOPOFSTACK & 0xffff); \
|
||||
work = POINTERMASK & ((GETBASEWORD(scratch,1) << 16) | GETBASEWORD(scratch,0)); \
|
||||
lookuped = *((LispPTR *)(Addr68k_from_LADDR(work))); \
|
||||
if (lookuped == NOBIND_PTR) \
|
||||
goto op_ufn; \
|
||||
@@ -576,7 +553,8 @@
|
||||
#else
|
||||
#define EVAL \
|
||||
do { \
|
||||
LispPTR scratch, work, lookuped; \
|
||||
LispPTR work, lookuped; \
|
||||
DLword scratch[2]; \
|
||||
switch (TOPOFSTACK & SEGMASK) { \
|
||||
case S_POSITIVE: \
|
||||
case S_NEGATIVE: \
|
||||
@@ -584,8 +562,8 @@
|
||||
case ATOM_OFFSET: \
|
||||
if ((TOPOFSTACK == NIL_PTR) || (TOPOFSTACK == ATOM_T)) \
|
||||
goto Hack_Label; \
|
||||
nnewframe(CURRENTFX, &scratch, TOPOFSTACK & 0xffff); \
|
||||
work = POINTERMASK & swapx(scratch); \
|
||||
nnewframe(CURRENTFX, scratch, TOPOFSTACK & 0xffff); \
|
||||
work = POINTERMASK & ((GETBASEWORD(scratch,1) << 16) | GETBASEWORD(scratch,0)); \
|
||||
lookuped = *((LispPTR *)(Addr68k_from_LADDR(work))); \
|
||||
if (lookuped == NOBIND_PTR) \
|
||||
goto op_ufn; \
|
||||
@@ -608,8 +586,8 @@
|
||||
fn_apply = 0; \
|
||||
goto op_fn_common; \
|
||||
case TYPE_NEWATOM: \
|
||||
nnewframe(CURRENTFX, &scratch, TOPOFSTACK); \
|
||||
work = POINTERMASK & swapx(scratch); \
|
||||
nnewframe(CURRENTFX, scratch, TOPOFSTACK); \
|
||||
work = POINTERMASK & ((GETBASEWORD(scratch,1) << 16) | GETBASEWORD(scratch,0)); \
|
||||
lookuped = *((LispPTR *)(Addr68k_from_LADDR(work))); \
|
||||
if (lookuped == NOBIND_PTR) \
|
||||
goto op_ufn; \
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
#include <inttypes.h>
|
||||
#include "maiko/platform.h"
|
||||
|
||||
/************************************************************************/
|
||||
@@ -187,8 +188,8 @@ error Must specify RELEASE to build Medley.
|
||||
|
||||
/* Set up defaults */
|
||||
#define UNALIGNED_FETCH_OK
|
||||
#define UNSIGNED unsigned long
|
||||
#define INT long
|
||||
typedef uintptr_t UNSIGNED;
|
||||
typedef intptr_t INT;
|
||||
|
||||
|
||||
|
||||
@@ -223,7 +224,6 @@ error Must specify RELEASE to build Medley.
|
||||
#ifdef OS5
|
||||
/* Solaris, sort of SYSV-ish, but not really */
|
||||
#define MAIKO_ENABLE_ETHERNET
|
||||
#define LOCK_X_UPDATES 1
|
||||
#endif /* OS5 */
|
||||
|
||||
|
||||
@@ -238,9 +238,9 @@ typedef unsigned char u_char;
|
||||
typedef unsigned long u_int;
|
||||
typedef unsigned short u_short;
|
||||
#undef UNALIGNED_FETCH_OK
|
||||
#define USHORT unsigned
|
||||
typedef unsigned USHORT;
|
||||
#else
|
||||
#define USHORT unsigned short
|
||||
typedef unsigned short USHORT;
|
||||
#endif /* DOS */
|
||||
|
||||
/****************************************************************/
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
#include "devif.h" /* for DspInterface */
|
||||
void Init_XCursor(void);
|
||||
void Set_XCursor(int x, int y);
|
||||
void init_Xcursor(Display *display, Window window);
|
||||
void init_Xcursor(DspInterface dsp);
|
||||
void set_Xcursor(DspInterface dsp, const uint8_t *bitmap, int hotspot_x, int hotspot_y, Cursor *return_cursor, int from_lisp);
|
||||
#endif
|
||||
|
||||
21
inc/xdefs.h
21
inc/xdefs.h
@@ -32,22 +32,25 @@
|
||||
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
extern int XLocked;
|
||||
extern int XNeedSignal;
|
||||
/* this is !0 if we're locked; it should be 0 or larger always */
|
||||
#include "xwinmandefs.h"
|
||||
|
||||
#define XLOCK do { XLocked++; /* printf("L"); fflush(stdout);*/} while (0)
|
||||
#define XUNLOCK \
|
||||
do { XLocked--;/* printf("U"); fflush(stdout);*/ \
|
||||
if (XNeedSignal) \
|
||||
/* this is !0 if we're locked; it should be 0 or larger always */
|
||||
extern volatile sig_atomic_t XLocked;
|
||||
extern volatile sig_atomic_t XNeedSignal;
|
||||
|
||||
#define XLOCK do { XLocked++; } while (0)
|
||||
#define XUNLOCK(dsp) \
|
||||
do { \
|
||||
if (XLocked == 1 && XNeedSignal) \
|
||||
{ \
|
||||
XNeedSignal = 0; \
|
||||
kill(getpid(), SIGPOLL); \
|
||||
getXsignaldata(dsp); \
|
||||
}; \
|
||||
XLocked--; \
|
||||
} while (0)
|
||||
#else
|
||||
#define XLOCK
|
||||
#define XUNLOCK
|
||||
#define XUNLOCK(dsp)
|
||||
#endif /* LOCK_X_UPDATES */
|
||||
|
||||
#endif /* XDEFS_H */
|
||||
|
||||
@@ -6,5 +6,5 @@ void lisp_Xexit(DspInterface dsp);
|
||||
void Xevent_before_raid(DspInterface dsp);
|
||||
void Xevent_after_raid(DspInterface dsp);
|
||||
void Open_Display(DspInterface dsp);
|
||||
DspInterface X_init(DspInterface dsp, char *lispbitmap, int width_hint, int height_hint, int depth_hint);
|
||||
DspInterface X_init(DspInterface dsp, LispPTR lispbitmap, int width_hint, int height_hint, int depth_hint);
|
||||
#endif
|
||||
|
||||
@@ -8,5 +8,5 @@ void Set_BitGravity(XButtonEvent *event, DspInterface dsp, Window window, int gr
|
||||
void enable_Xkeyboard(DspInterface dsp);
|
||||
void disable_Xkeyboard(DspInterface dsp);
|
||||
void beep_Xkeyboard(DspInterface dsp);
|
||||
void getXsignaldata(DspInterface dsp);
|
||||
void process_Xevents(DspInterface dsp);
|
||||
#endif
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
/*** N_OP_aref1 -- op 266 (array index) ***/
|
||||
LispPTR N_OP_aref1(register LispPTR arrayarg, register LispPTR inx) {
|
||||
register LispPTR baseL;
|
||||
register int type, index;
|
||||
register int index;
|
||||
register OneDArray *arrayblk;
|
||||
|
||||
/* verify array */
|
||||
@@ -45,12 +45,9 @@ LispPTR N_OP_aref1(register LispPTR arrayarg, register LispPTR inx) {
|
||||
if (index >= arrayblk->totalsize) ERROR_EXIT(inx);
|
||||
index += arrayblk->offset;
|
||||
|
||||
/* setup typenumber */
|
||||
type = 0xFF & arrayblk->typenumber;
|
||||
|
||||
/* setup base */
|
||||
baseL = arrayblk->base;
|
||||
|
||||
/* disp on type */
|
||||
return (aref_switch(type, inx, baseL, index));
|
||||
return (aref_switch(arrayblk->typenumber, inx, baseL, index));
|
||||
} /* end N_OP_aref1() */
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
/************************************************************************/
|
||||
|
||||
LispPTR N_OP_aset1(register LispPTR data, LispPTR arrayarg, register int inx) {
|
||||
register int type;
|
||||
register OneDArray *arrayblk;
|
||||
register LispPTR base;
|
||||
register int new;
|
||||
@@ -57,14 +56,11 @@ LispPTR N_OP_aset1(register LispPTR data, LispPTR arrayarg, register int inx) {
|
||||
if (index >= arrayblk->totalsize) ERROR_EXIT(inx);
|
||||
index += arrayblk->offset;
|
||||
|
||||
/* setup typenumber */
|
||||
type = 0xFF & arrayblk->typenumber;
|
||||
|
||||
/* setup base */
|
||||
base = arrayblk->base;
|
||||
|
||||
/* disp on type */
|
||||
aset_switch(type, inx);
|
||||
aset_switch(arrayblk->typenumber, inx);
|
||||
|
||||
doufn:
|
||||
ERROR_EXIT(inx);
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
LispPTR N_OP_aref2(LispPTR arrayarg, LispPTR inx0, LispPTR inx1) {
|
||||
#define REG
|
||||
LispPTR baseL;
|
||||
int type;
|
||||
int arindex, temp;
|
||||
LispArray *arrayblk;
|
||||
int j;
|
||||
@@ -59,9 +58,6 @@ LispPTR N_OP_aref2(LispPTR arrayarg, LispPTR inx0, LispPTR inx1) {
|
||||
arindex *= j;
|
||||
arindex += temp;
|
||||
|
||||
/* setup typenumber */
|
||||
type = 0xFF & arrayblk->typenumber;
|
||||
|
||||
/* disp on type */
|
||||
return (aref_switch(type, inx1, baseL, arindex));
|
||||
return (aref_switch(arrayblk->typenumber, inx1, baseL, arindex));
|
||||
} /* end N_OP_aref2() */
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
|
||||
/*** N_OP_aset2 -- op 357 (new-value array index0 index1) ***/
|
||||
LispPTR N_OP_aset2(register LispPTR data, LispPTR arrayarg, LispPTR inx0, LispPTR inx1) {
|
||||
register int type;
|
||||
register LispArray *arrayblk;
|
||||
register LispPTR base;
|
||||
register int new;
|
||||
@@ -46,11 +45,8 @@ LispPTR N_OP_aset2(register LispPTR data, LispPTR arrayarg, LispPTR inx0, LispPT
|
||||
index *= j;
|
||||
index += temp;
|
||||
|
||||
/* setup typenumber */
|
||||
type = 0xFF & arrayblk->typenumber;
|
||||
|
||||
/* disp on type */
|
||||
aset_switch(type, inx1);
|
||||
aset_switch(arrayblk->typenumber, inx1);
|
||||
|
||||
doufn:
|
||||
ERROR_EXIT(inx1);
|
||||
|
||||
318
src/bbtsub.c
318
src/bbtsub.c
@@ -37,12 +37,6 @@
|
||||
#include "xdefs.h"
|
||||
#endif /* XWINDOW */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#ifndef NOPIXRECT
|
||||
#include <sunwindow/window_hs.h>
|
||||
#include <sunwindow/win_ioctl.h>
|
||||
#endif /* NOPIXRECT */
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#include "lispemul.h"
|
||||
#include "lspglob.h"
|
||||
@@ -87,10 +81,8 @@ extern int kbd_for_makeinit;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if !defined(SUNDISPLAY)
|
||||
#include "devif.h"
|
||||
extern DspInterface currentdsp;
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef COLOR
|
||||
extern int MonoOrColor;
|
||||
@@ -484,9 +476,7 @@ do_it_now:
|
||||
#endif
|
||||
|
||||
#ifdef XWINDOW
|
||||
XLOCK;
|
||||
if (in_display_segment(dstbase)) flush_display_region(dx, dty, w, h);
|
||||
XUNLOCK;
|
||||
#endif /* XWINDOW */
|
||||
|
||||
#ifdef DOS
|
||||
@@ -841,9 +831,7 @@ do_it_now:
|
||||
#endif
|
||||
|
||||
#ifdef XWINDOW
|
||||
XLOCK;
|
||||
if (in_display_segment(dstbase)) flush_display_region(dlx, dty, width, height);
|
||||
XUNLOCK;
|
||||
#endif /* XWINDOW */
|
||||
|
||||
#ifdef DOS
|
||||
@@ -1090,9 +1078,7 @@ do_it_now:
|
||||
#endif
|
||||
|
||||
#ifdef XWINDOW
|
||||
XLOCK;
|
||||
if (in_display_segment(dstbase)) flush_display_region(left, dty, width, height);
|
||||
XUNLOCK;
|
||||
#endif /* XWINDOW */
|
||||
|
||||
#ifdef DOS
|
||||
@@ -1144,7 +1130,6 @@ bad_arg:
|
||||
/* */
|
||||
/* */
|
||||
/************************************************************************/
|
||||
#ifndef prropstyle
|
||||
/********************************************************/
|
||||
/* Non-PIXRECT version of the code */
|
||||
/********************************************************/
|
||||
@@ -1222,9 +1207,7 @@ void bltchar(LispPTR *args)
|
||||
#endif
|
||||
|
||||
#ifdef XWINDOW
|
||||
XLOCK;
|
||||
if (in_display_segment(dstbase)) flush_display_lineregion(dx, dstbase, w, h);
|
||||
XUNLOCK;
|
||||
#endif /* XWINDOW */
|
||||
|
||||
#ifdef DOS
|
||||
@@ -1238,100 +1221,6 @@ void bltchar(LispPTR *args)
|
||||
UNLOCKSCREEN;
|
||||
}
|
||||
|
||||
#else
|
||||
/* prropstyle */
|
||||
|
||||
LispPTR bltchar(LispPTR *args)
|
||||
/* args[0] : PILOTBBT
|
||||
* args[1] : DISPLAYDATA
|
||||
* args[2] : CHAR8CODE
|
||||
* args[3] : CURX
|
||||
* args[4] : LEFT
|
||||
* args[5] : RIGHT
|
||||
*/
|
||||
{
|
||||
register PILOTBBT *pbt;
|
||||
register DISPLAYDATA *dspdata;
|
||||
int x, y, destbpl, srcebpl, srcebit, distance;
|
||||
int base;
|
||||
register int displayflg;
|
||||
unsigned int pix_op;
|
||||
DLword *dstbase;
|
||||
|
||||
pbt = (PILOTBBT *)Addr68k_from_LADDR(((BLTC *)args)->pilotbbt);
|
||||
dspdata = (DISPLAYDATA *)Addr68k_from_LADDR(((BLTC *)args)->displaydata);
|
||||
|
||||
(mpr_d(SrcePixRect))->md_image =
|
||||
(short *)Addr68k_from_LADDR(VAG2(pbt->pbtsourcehi, pbt->pbtsourcelo));
|
||||
|
||||
dstbase = (mpr_d(DestPixRect))->md_image =
|
||||
(short *)Addr68k_from_LADDR(VAG2(pbt->pbtdesthi, pbt->pbtdestlo));
|
||||
|
||||
SrcePixRect->pr_width = srcebpl = abs(pbt->pbtsourcebpl);
|
||||
DestPixRect->pr_width = destbpl = abs(pbt->pbtdestbpl);
|
||||
SrcePixRect->pr_height = DestPixRect->pr_height = pbt->pbtheight;
|
||||
|
||||
mpr_mdlinebytes(DestPixRect) = (destbpl + 7) >> 3;
|
||||
mpr_mdlinebytes(SrcePixRect) = (srcebpl + 7) >> 3;
|
||||
|
||||
base = GETWORD(Addr68k_from_LADDR(dspdata->ddoffsetscache + ((BLTC *)args)->char8code));
|
||||
srcebit = base + ((BLTC *)args)->left - ((BLTC *)args)->curx;
|
||||
|
||||
#ifdef REALCURSOR
|
||||
/* if displayflg != 0 then source or destination is DisplayBitMap
|
||||
* Now we consider about only destination
|
||||
*/
|
||||
displayflg = old_cursorin(pbt->pbtdesthi, pbt->pbtdestlo, ((BLTC *)args)->left, (((BLTC *)args)->right - ((BLTC *)args)->left),
|
||||
pbt->pbtheight, y, pbt->pbtbackward);
|
||||
#endif /* REALCURSOR */
|
||||
|
||||
/**** for DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG *****/
|
||||
/* displayflg = T; */
|
||||
/**** for DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG *****/
|
||||
|
||||
pix_op = PixOperation(pbt->pbtsourcetype, pbt->pbtoperation);
|
||||
|
||||
LOCKSCREEN;
|
||||
|
||||
#ifdef REALCURSOR
|
||||
if (displayflg) HideCursor;
|
||||
#endif /* REALCURSOR */
|
||||
|
||||
if (pr_rop(DestPixRect, ((BLTC *)args)->left, 0, (((BLTC *)args)->right - ((BLTC *)args)->left), pbt->pbtheight, pix_op,
|
||||
SrcePixRect, srcebit, 0) != 0)
|
||||
error("pilotbitblt: pr_rop failed\n");
|
||||
|
||||
#ifdef DISPLAYBUFFER
|
||||
#ifdef COLOR
|
||||
if (MonoOrColor == MONO_SCREEN)
|
||||
#endif /* COLOR */
|
||||
|
||||
if (in_display_segment(dstbase)) {
|
||||
/* DBPRINT(("bltchar pix: x %x, y %d, w %d, h %d.\n", ((BLTC *)args)->left, dstbase,
|
||||
* (((BLTC *)args)->right - ((BLTC *)args)->left),pbt->pbtheight));
|
||||
*/
|
||||
flush_display_lineregion(((BLTC *)args)->left, dstbase, (((BLTC *)args)->right - ((BLTC *)args)->left), pbt->pbtheight);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef XWINDOW
|
||||
XLOCK;
|
||||
if (in_display_segment(dstbase))
|
||||
flush_display_lineregion(((BLTC *)args)->left, dstbase, (((BLTC *)args)->right - ((BLTC *)args)->left), pbt->pbtheight);
|
||||
XUNLOCK;
|
||||
#endif /* XWINDOW */
|
||||
|
||||
#ifdef DOS
|
||||
if (in_display_segment(dstbase)) flush_display_lineregion(dx, dstbase, w, h);
|
||||
#endif /* DOS */
|
||||
|
||||
#ifdef REALCURSOR
|
||||
if (displayflg) ShowCursor;
|
||||
#endif /* REALCURSOR */
|
||||
|
||||
ScreenLocked = NIL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
@@ -1418,7 +1307,6 @@ LispPTR BLTCHAR_index; /* Atom # for \PUNTBLTCHAR punt fn */
|
||||
LispPTR TEDIT_BLTCHAR_index; /* if NIL ,TEDIT is not yet loaded */
|
||||
|
||||
|
||||
#ifndef prropstyle
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
@@ -1547,150 +1435,6 @@ void newbltchar(LispPTR *args) {
|
||||
|
||||
} /* end of newbltchar */
|
||||
|
||||
#else /* prropstyle */
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/* n e w b l t c h a r */
|
||||
/* (PIXRECT version) */
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
LispPTR newbltchar(LispPTR *args) {
|
||||
register DISPLAYDATA *displaydata68k;
|
||||
|
||||
register int right, left, curx;
|
||||
register PILOTBBT *pbt;
|
||||
register int lmargin, rmargin, xoff;
|
||||
int displayflg; /* T if cursor needs to be taken down */
|
||||
displaydata68k = (DISPLAYDATA *)Addr68k_from_LADDR(((BLTARG *)args)->displaydata);
|
||||
|
||||
if ((displaydata68k->ddcharset & 0xFFFF) != ((BLTARG *)args)->charset) {
|
||||
/* Currently, this has BUG, so I can't call it */
|
||||
/*if(changecharset_display(displaydata68k,((BLTARG *)args)->charset) ==-1)*/
|
||||
{ PUNT_TO_BLTCHAR; }
|
||||
}
|
||||
|
||||
if (displaydata68k->ddslowprintingcase) { PUNT_TO_BLTCHAR; /** \SLOWBLTCHAR--return;**/ }
|
||||
|
||||
FGetNum(displaydata68k->ddxposition, curx);
|
||||
FGetNum(displaydata68k->ddrightmargin, rmargin);
|
||||
FGetNum(displaydata68k->ddleftmargin, lmargin);
|
||||
FGetNum(displaydata68k->ddxoffset, xoff);
|
||||
|
||||
right =
|
||||
curx +
|
||||
GETWORD((DLword *)Addr68k_from_LADDR(displaydata68k->ddcharimagewidths + ((BLTARG *)args)->char8code));
|
||||
|
||||
if ((right > rmargin) && (curx > lmargin)) PUNT_TO_BLTCHAR;
|
||||
if (((BLTARG *)args)->displaystream != *TOPWDS68k) PUNT_TO_BLTCHAR;
|
||||
{
|
||||
register int newpos;
|
||||
newpos = curx +
|
||||
GETWORD((DLword *)Addr68k_from_LADDR(displaydata68k->ddwidthscache + ((BLTARG *)args)->char8code));
|
||||
|
||||
if ((0 <= newpos) && (newpos < 65536))
|
||||
(displaydata68k->ddxposition) = (LispPTR)(S_POSITIVE | newpos);
|
||||
else if (-65537 < newpos)
|
||||
(displaydata68k->ddxposition) = (LispPTR)(S_NEGATIVE | (0xffff & newpos));
|
||||
else {
|
||||
PUNT_TO_BLTCHAR;
|
||||
}
|
||||
}
|
||||
|
||||
curx += xoff;
|
||||
right += xoff;
|
||||
if (right > (int)(displaydata68k->ddclippingright)) right = displaydata68k->ddclippingright;
|
||||
|
||||
if (curx > (int)(displaydata68k->ddclippingleft))
|
||||
left = curx;
|
||||
else
|
||||
left = displaydata68k->ddclippingleft;
|
||||
|
||||
if (left < right) {
|
||||
pbt = (PILOTBBT *)Addr68k_from_LADDR(displaydata68k->ddpilotbbt);
|
||||
if (pbt->pbtheight != 0) {
|
||||
/****** OLD bltchar *****/
|
||||
register int destbpl, srcebpl, sourcebit;
|
||||
DLword *dstbase;
|
||||
int base, y;
|
||||
|
||||
(mpr_d(SrcePixRect))->md_image =
|
||||
(short *)Addr68k_from_LADDR(VAG2(pbt->pbtsourcehi, pbt->pbtsourcelo));
|
||||
|
||||
dstbase = (mpr_d(DestPixRect))->md_image =
|
||||
(short *)Addr68k_from_LADDR(VAG2(pbt->pbtdesthi, pbt->pbtdestlo));
|
||||
|
||||
SrcePixRect->pr_width = srcebpl = abs(pbt->pbtsourcebpl);
|
||||
DestPixRect->pr_width = destbpl = abs(pbt->pbtdestbpl);
|
||||
SrcePixRect->pr_height = DestPixRect->pr_height = pbt->pbtheight;
|
||||
|
||||
mpr_mdlinebytes(DestPixRect) = (destbpl + 7) >> 3;
|
||||
mpr_mdlinebytes(SrcePixRect) = (srcebpl + 7) >> 3;
|
||||
|
||||
base = GETBASE(Addr68k_from_LADDR(displaydata68k->ddoffsetscache), ((BLTARG *)args)->char8code);
|
||||
sourcebit = base + left - curx;
|
||||
|
||||
LOCKSCREEN;
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
if (displayflg = old_cursorin(pbt->pbtdesthi, pbt->pbtdestlo, left, (right - left),
|
||||
pbt->pbtheight, y, pbt->pbtbackward)) {
|
||||
HideCursor;
|
||||
if (pr_rop(DestPixRect, left, 0, (right - left), pbt->pbtheight,
|
||||
PixOperation(pbt->pbtsourcetype, pbt->pbtoperation), SrcePixRect, sourcebit,
|
||||
0) != 0)
|
||||
error("pilotbitblt: pr_rop failed\n");
|
||||
/* Save SHOWCURSOR 'til after paint to screen */
|
||||
#ifndef DISPLAYBUFFER
|
||||
ShowCursor;
|
||||
#endif
|
||||
} /* display case */
|
||||
else {
|
||||
if (pr_rop(DestPixRect, left, 0, (right - left), pbt->pbtheight,
|
||||
PixOperation(pbt->pbtsourcetype, pbt->pbtoperation), SrcePixRect, sourcebit,
|
||||
0) != 0)
|
||||
error("pilotbitblt: pr_rop failed\n");
|
||||
|
||||
} /* else */
|
||||
|
||||
#ifdef DISPLAYBUFFER
|
||||
#ifdef COLOR
|
||||
if (MonoOrColor == MONO_SCREEN)
|
||||
#endif /* COLOR */
|
||||
|
||||
if (in_display_segment(dstbase)) {
|
||||
/* DBPRINT(("newbltchar: x %d, y 0x%x, w %d, h %d.\n", left, dstbase,
|
||||
* (right - left), pbt->pbtheight)); */
|
||||
|
||||
flush_display_lineregion(left, dstbase, (right - left), pbt->pbtheight);
|
||||
if (displayflg) ShowCursor; /* because hide is done earlier */
|
||||
}
|
||||
#endif
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
if (pr_rop(DestPixRect, left, 0, (right - left), pbt->pbtheight,
|
||||
PixOperation(pbt->pbtsourcetype, pbt->pbtoperation), SrcePixRect, sourcebit,
|
||||
0) != 0)
|
||||
error("pilotbitblt: pr_rop failed\n");
|
||||
|
||||
if (in_display_segment(dstbase))
|
||||
flush_display_lineregion(left, dstbase, (right - left), pbt->pbtheight);
|
||||
#endif /* XWINDOW */
|
||||
|
||||
#ifdef DOS
|
||||
if (in_display_segment(dstbase)) flush_display_lineregion(dx, dstbase, w, h);
|
||||
if (displayflg) ShowCursor;
|
||||
#endif /* DOS */
|
||||
|
||||
ScreenLocked = NIL;
|
||||
|
||||
/****** OLD bltchar *****/
|
||||
}
|
||||
}
|
||||
} /* newbltchar */
|
||||
#endif
|
||||
|
||||
/******************************************************************/
|
||||
#ifndef BYTESWAP
|
||||
@@ -1988,7 +1732,6 @@ void ccfuncall(register unsigned int atom_index, register int argnum, register i
|
||||
/* */
|
||||
/****************************************************************/
|
||||
|
||||
#ifndef prropstyle
|
||||
/***************************/
|
||||
/* Non-PIXRECT version */
|
||||
/***************************/
|
||||
@@ -2046,67 +1789,6 @@ void tedit_bltchar(LispPTR *args)
|
||||
#undef backwardflg
|
||||
|
||||
} /* end tedit_bltchar */
|
||||
#else
|
||||
|
||||
/* pr_op style */
|
||||
/**********************/
|
||||
/* PIXRECT version */
|
||||
/**********************/
|
||||
|
||||
void tedit_bltchar(LispPTR *args)
|
||||
{
|
||||
register DISPLAYDATA *displaydata68k;
|
||||
register int left, right;
|
||||
register PILOTBBT *pbt;
|
||||
register int imagewidth, newx;
|
||||
register displayflg;
|
||||
|
||||
displaydata68k = (DISPLAYDATA *)Addr68k_from_LADDR(((TBLTARG *)args)->displaydata);
|
||||
if (displaydata68k->ddcharset != ((TBLTARG *)args)->charset) {
|
||||
/**if(changecharset_display(displaydata68k, ((TBLTARG *)args)->charset)== -1)**/
|
||||
{ PUNT_TO_TEDIT_BLTCHAR; }
|
||||
}
|
||||
imagewidth = *((DLword *)Addr68k_from_LADDR(displaydata68k->ddcharimagewidths + ((TBLTARG *)args)->char8code));
|
||||
newx = ((TBLTARG *)args)->current_x + imagewidth;
|
||||
left = IMAX(0, ((TBLTARG *)args)->current_x);
|
||||
right = IMIN(newx, ((TBLTARG *)args)->clipright);
|
||||
LOCKSCREEN;
|
||||
|
||||
if (left < right) {
|
||||
pbt = (PILOTBBT *)Addr68k_from_LADDR(displaydata68k->ddpilotbbt);
|
||||
if (pbt->pbtheight) {
|
||||
(mpr_d(SrcePixRect))->md_image =
|
||||
(short *)Addr68k_from_LADDR(VAG2(pbt->pbtsourcehi, pbt->pbtsourcelo));
|
||||
|
||||
(mpr_d(DestPixRect))->md_image =
|
||||
(short *)Addr68k_from_LADDR(VAG2(pbt->pbtdesthi, pbt->pbtdestlo));
|
||||
{
|
||||
register int srcebpl, destbpl;
|
||||
SrcePixRect->pr_width = srcebpl = abs(pbt->pbtsourcebpl);
|
||||
DestPixRect->pr_width = destbpl = abs(pbt->pbtdestbpl);
|
||||
SrcePixRect->pr_height = DestPixRect->pr_height = pbt->pbtheight;
|
||||
|
||||
mpr_mdlinebytes(DestPixRect) = (destbpl + 7) >> 3;
|
||||
mpr_mdlinebytes(SrcePixRect) = (srcebpl + 7) >> 3;
|
||||
}
|
||||
|
||||
pbt->pbtwidth = IMIN(imagewidth, (right - left));
|
||||
pbt->pbtsourcebit =
|
||||
GETBASE(Addr68k_from_LADDR(displaydata68k->ddoffsetscache), ((TBLTARG *)args)->char8code);
|
||||
|
||||
if (pr_rop(DestPixRect, left, 0, pbt->pbtwidth, pbt->pbtheight,
|
||||
PixOperation(pbt->pbtsourcetype, pbt->pbtoperation), SrcePixRect,
|
||||
pbt->pbtsourcebit, 0) != 0)
|
||||
error("pilotbitblt: pr_rop failed\n");
|
||||
|
||||
} /* if pbt->pbtheight */
|
||||
} /* if left<right */
|
||||
|
||||
UNLOCKSCREEN;
|
||||
|
||||
} /* end tedit_bltchar */
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(REALCURSOR) || defined(SUNDISPLAY)
|
||||
#ifndef COLOR
|
||||
|
||||
@@ -33,7 +33,7 @@ LispPTR *N_OP_bind(register LispPTR *stack_pointer, register LispPTR tos, int by
|
||||
register int n1; /* # slots to bind to NIL (0, 0) */
|
||||
register int n2; /* # slots to bind to value in stack */
|
||||
register LispPTR *ppvar; /* pointer to argued slot in Pvar area */
|
||||
register int i; /* temporary for control */
|
||||
register unsigned i; /* temporary for control */
|
||||
|
||||
#ifdef TRACE
|
||||
printPC();
|
||||
|
||||
25
src/bitblt.c
25
src/bitblt.c
@@ -12,16 +12,6 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#include <sunwindow/window_hs.h>
|
||||
#include <sunwindow/win_ioctl.h>
|
||||
|
||||
#include <suntool/sunview.h>
|
||||
#include <sunwindow/cms_mono.h>
|
||||
#include <suntool/canvas.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <signal.h>
|
||||
#endif
|
||||
|
||||
#ifdef XWINDOW
|
||||
#define DISPLAYBUFFER
|
||||
@@ -127,25 +117,14 @@ LispPTR N_OP_pilotbitblt(LispPTR pilot_bt_tbl,int tos)
|
||||
num_gray = ((TEXTUREBBT *)pbt)->pbtgrayheightlessone + 1;
|
||||
curr_gray_line = ((TEXTUREBBT *)pbt)->pbtgrayoffset;
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
if (displayflg) HideCursor;
|
||||
#elif DOS
|
||||
#if DOS
|
||||
if (displayflg) (currentdsp->mouse_invisible)(currentdsp, IOPage68K);
|
||||
;
|
||||
#endif /* SUNDISPLAY / DOS */
|
||||
|
||||
new_bitblt_code
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef DISPLAYBUFFER
|
||||
#ifdef COLOR
|
||||
if (MonoOrColor == MONO_SCREEN)
|
||||
#endif /* COLOR */
|
||||
|
||||
if (in_display_segment(dstbase)) flush_display_lineregion(dx, dstbase, w, h);
|
||||
#endif
|
||||
if (displayflg) ShowCursor;
|
||||
#elif DOS
|
||||
#if DOS
|
||||
flush_display_lineregion(dx, dstbase, w, h);
|
||||
if (displayflg) (currentdsp->mouse_visible)(IOPage68K->dlmousex, IOPage68K->dlmousey);
|
||||
#endif /* SUNDISPLAY / DOS */
|
||||
|
||||
36
src/common.c
36
src/common.c
@@ -141,39 +141,3 @@ uraidloop:
|
||||
|
||||
void warn(const char *s)
|
||||
{ printf("\nWARN: %s \n", s); }
|
||||
|
||||
/*****************************************************************
|
||||
stackcheck
|
||||
|
||||
common sub-routine.
|
||||
|
||||
Not Implemented.
|
||||
|
||||
1.check Stack overflow.
|
||||
(check CurrentStackPTR)
|
||||
2.if overflow, return T (not 0).
|
||||
Otherwise, return F (0).
|
||||
******************************************************************/
|
||||
int stackcheck() {
|
||||
#ifdef TRACE2
|
||||
printf("TRACE:stackcheck()\n");
|
||||
#endif
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
stackoverflow
|
||||
|
||||
common sub-routine.
|
||||
|
||||
Not Implemented.
|
||||
|
||||
1.error handling of stack overflow.
|
||||
******************************************************************/
|
||||
|
||||
void stackoverflow() {
|
||||
#ifdef TRACE2
|
||||
printf("TRACE:stackoverflow()\n");
|
||||
#endif
|
||||
printf("stackoverflow \n");
|
||||
}
|
||||
|
||||
33
src/dir.c
33
src/dir.c
@@ -329,7 +329,7 @@ void print_finfo(FINFO *fp)
|
||||
if (fp != (FINFO *)NULL) {
|
||||
do {
|
||||
printf("%s -> ", fp->lname);
|
||||
printf("%d\n", fp->version);
|
||||
printf("%u\n", fp->version);
|
||||
fp = fp->next;
|
||||
} while (fp != (FINFO *)NULL && fp != sp);
|
||||
|
||||
@@ -685,13 +685,13 @@ static int enum_dsk_prop(char *dir, char *name, char *ver, FINFO **finfo_buf)
|
||||
if (*fver == '\0')
|
||||
nextp->version = 0;
|
||||
else
|
||||
nextp->version = atoi(fver);
|
||||
nextp->version = strtoul(fver, (char **)NULL, 10);
|
||||
nextp->ino = sbuf.st_ino;
|
||||
nextp->prop->length = (unsigned)sbuf.st_size;
|
||||
nextp->prop->wdate = (unsigned)ToLispTime(sbuf.st_mtime);
|
||||
nextp->prop->rdate = (unsigned)ToLispTime(sbuf.st_atime);
|
||||
nextp->prop->protect = (unsigned)sbuf.st_mode;
|
||||
TIMEOUT(pwd = getpwuid(sbuf.st_uid));
|
||||
TIMEOUT0(pwd = getpwuid(sbuf.st_uid));
|
||||
if (pwd == (struct passwd *)NULL) {
|
||||
nextp->prop->au_len = 0;
|
||||
} else {
|
||||
@@ -948,7 +948,7 @@ static int enum_dsk(char *dir, char *name, char *ver, FINFO **finfo_buf)
|
||||
if (*fver == '\0')
|
||||
nextp->version = 0;
|
||||
else
|
||||
nextp->version = atoi(fver);
|
||||
nextp->version = strtoul(fver, (char **)NULL, 10);
|
||||
nextp->ino = sbuf.st_ino;
|
||||
n++;
|
||||
}
|
||||
@@ -1080,7 +1080,7 @@ static int enum_ufs_prop(char *dir, char *name, char *ver, FINFO **finfo_buf)
|
||||
char namebuf[MAXPATHLEN];
|
||||
|
||||
errno = 0;
|
||||
TIMEOUT(dirp = opendir(dir));
|
||||
TIMEOUT0(dirp = opendir(dir));
|
||||
if (dirp == NULL) {
|
||||
*Lisp_errno = errno;
|
||||
return (-1);
|
||||
@@ -1263,7 +1263,7 @@ static int enum_ufs(char *dir, char *name, char *ver, FINFO **finfo_buf)
|
||||
char namebuf[MAXPATHLEN];
|
||||
|
||||
errno = 0;
|
||||
TIMEOUT(dirp = opendir(dir));
|
||||
TIMEOUT0(dirp = opendir(dir));
|
||||
if (dirp == NULL) {
|
||||
*Lisp_errno = errno;
|
||||
return (-1);
|
||||
@@ -1399,7 +1399,7 @@ static int trim_finfo(FINFO **fp)
|
||||
* Versionless is not linked to any versioned
|
||||
* file.
|
||||
*/
|
||||
sprintf(ver, ";%d", mp->version + 1);
|
||||
sprintf(ver, ";%u", mp->version + 1);
|
||||
strcat(sp->lname, ver);
|
||||
sp->lname_len = strlen(sp->lname);
|
||||
pnum = ++num;
|
||||
@@ -1527,7 +1527,7 @@ static int trim_finfo_highest(FINFO **fp, int highestp)
|
||||
* Versionless is not linked to any versioned
|
||||
* file.
|
||||
*/
|
||||
sprintf(ver, ";%d", mp->version + 1);
|
||||
sprintf(ver, ";%u", mp->version + 1);
|
||||
strcat(sp->lname, ver);
|
||||
sp->lname_len = strlen(sp->lname);
|
||||
/*
|
||||
@@ -1602,7 +1602,7 @@ static int trim_finfo_highest(FINFO **fp, int highestp)
|
||||
* Name: trim_finfo_version
|
||||
*
|
||||
* Argument: FINFO **fp Linked list of the numerated FINFO structures.
|
||||
* int rver Requested version number.
|
||||
* unsigned rver Requested version number.
|
||||
*
|
||||
* Value: Returns the total number of files still remaining in **fp.
|
||||
*
|
||||
@@ -1614,7 +1614,7 @@ static int trim_finfo_highest(FINFO **fp, int highestp)
|
||||
* are got rid of.
|
||||
*/
|
||||
|
||||
static int trim_finfo_version(FINFO **fp, int rver)
|
||||
static int trim_finfo_version(FINFO **fp, unsigned rver)
|
||||
{
|
||||
register FINFO *tp, *sp, *mp, *cp, *pp, *vp;
|
||||
register int num, pnum;
|
||||
@@ -1709,7 +1709,7 @@ static int trim_finfo_version(FINFO **fp, int rver)
|
||||
* file.
|
||||
*/
|
||||
if (mp->version + 1 == rver) {
|
||||
sprintf(ver, ";%d", rver);
|
||||
sprintf(ver, ";%u", rver);
|
||||
strcat(sp->lname, ver);
|
||||
sp->lname_len = strlen(sp->lname);
|
||||
/*
|
||||
@@ -1840,7 +1840,8 @@ static FINFO **prepare_sort_buf(register FINFO *fp, register int n)
|
||||
|
||||
static int dsk_filecmp(FINFO **fp1, FINFO **fp2)
|
||||
{
|
||||
register int res, v1, v2;
|
||||
register int res;
|
||||
unsigned v1, v2;
|
||||
|
||||
if ((res = strcmp((*fp1)->no_ver_name, (*fp2)->no_ver_name)) != 0) return (res);
|
||||
|
||||
@@ -2032,7 +2033,8 @@ LispPTR COM_gen_files(register LispPTR *args)
|
||||
#ifdef DOS
|
||||
char drive[1];
|
||||
#endif
|
||||
int dskp, count, highestp, propp, fid, version;
|
||||
int dskp, count, highestp, fid;
|
||||
unsigned propp, version;
|
||||
register char *cp;
|
||||
FINFO *fp;
|
||||
int dsk_filecmp(), unix_filecmp();
|
||||
@@ -2111,7 +2113,7 @@ LispPTR COM_gen_files(register LispPTR *args)
|
||||
|
||||
if (*ver != '\0') {
|
||||
highestp = 0;
|
||||
version = atoi(ver);
|
||||
version = strtoul(ver, (char **)NULL, 10);
|
||||
if (version > 0) strcpy(ver, "*");
|
||||
} else {
|
||||
version = 0;
|
||||
@@ -2193,7 +2195,8 @@ LispPTR COM_next_file(register LispPTR *args)
|
||||
register char *base;
|
||||
register DFINFO *dfp;
|
||||
register UFSGFS *gfsp;
|
||||
int finfoid, propp;
|
||||
int finfoid;
|
||||
unsigned propp;
|
||||
|
||||
ERRSETJMP(-1);
|
||||
Lisp_errno = &Dummy_errno;
|
||||
|
||||
66
src/draw.c
66
src/draw.c
@@ -17,15 +17,10 @@
|
||||
|
||||
#include "version.h"
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#include <sys/ioctl.h>
|
||||
#include <sunwindow/window_hs.h>
|
||||
#include <sunwindow/win_ioctl.h>
|
||||
#endif
|
||||
|
||||
#include "lispemul.h"
|
||||
#include "lspglob.h"
|
||||
#include "lispmap.h"
|
||||
@@ -133,17 +128,6 @@ int N_OP_drawline(LispPTR ptr, int curbit, int xsize, int width, int ysize, int
|
||||
if (MonoOrColor == MONO_SCREEN)
|
||||
#endif /* COLOR */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#ifndef DISPLAYBUFFER
|
||||
HideCursor; /** Figure out how to be smart later **/
|
||||
#else /* DISPLAYBUFFER */
|
||||
#ifndef OLD_CURSOR
|
||||
HideCursor;
|
||||
#endif /* OLD_CURSOR */
|
||||
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
delta &= 0xFFFF;
|
||||
op &= 3;
|
||||
@@ -277,17 +261,6 @@ int N_OP_drawline(LispPTR ptr, int curbit, int xsize, int width, int ysize, int
|
||||
if (MonoOrColor == MONO_SCREEN)
|
||||
#endif /* COLOR */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#ifndef DISPLAYBUFFER
|
||||
ShowCursor; /** figure how to be smart later **/
|
||||
#else
|
||||
#ifndef OLD_CURSOR
|
||||
ShowCursor;
|
||||
#endif /* OLD_CURSOR */
|
||||
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef DISPLAYBUFFER
|
||||
#ifdef COLOR
|
||||
@@ -295,24 +268,21 @@ int N_OP_drawline(LispPTR ptr, int curbit, int xsize, int width, int ysize, int
|
||||
#endif /* COLOR */
|
||||
|
||||
{
|
||||
DLword *start_addr, *temp_s, *temp_e;
|
||||
|
||||
DLword *start_addr;
|
||||
start_addr = (DLword *)Addr68k_from_LADDR(ptr);
|
||||
|
||||
if (((int)(temp_s = (DLword *)(start_addr - DisplayRegion68k)) >= 0) &&
|
||||
(start_addr < DisplayRegion68k_end_addr) &&
|
||||
((int)(temp_e = (DLword *)(dataptr - DisplayRegion68k)) >= 0) &&
|
||||
((DLword *)dataptr < DisplayRegion68k_end_addr)) {
|
||||
if (in_display_segment(start_addr) && in_display_segment(dataptr)) {
|
||||
int start_x, start_y, end_x, end_y, w, h;
|
||||
#if defined(SUNDISPLAY) && defined(OLD_CURSOR)
|
||||
int displayflg;
|
||||
#endif
|
||||
ptrdiff_t temp_s, temp_e;
|
||||
|
||||
start_y = (int)temp_s / DisplayRasterWidth;
|
||||
start_x = ((int)temp_s % DisplayRasterWidth) * BITSPER_DLWORD;
|
||||
temp_s = start_addr - DisplayRegion68k;
|
||||
temp_e = dataptr - DisplayRegion68k;
|
||||
|
||||
end_y = (int)temp_e / DisplayRasterWidth;
|
||||
end_x = ((int)temp_e % DisplayRasterWidth) * BITSPER_DLWORD + (BITSPER_DLWORD - 1);
|
||||
start_y = temp_s / DisplayRasterWidth;
|
||||
start_x = (temp_s % DisplayRasterWidth) * BITSPER_DLWORD;
|
||||
|
||||
end_y = temp_e / DisplayRasterWidth;
|
||||
end_x = (temp_e % DisplayRasterWidth) * BITSPER_DLWORD + (BITSPER_DLWORD - 1);
|
||||
|
||||
w = abs(start_x - end_x) + 1;
|
||||
h = abs(start_y - end_y) + 1;
|
||||
@@ -320,22 +290,8 @@ int N_OP_drawline(LispPTR ptr, int curbit, int xsize, int width, int ysize, int
|
||||
if (start_x > end_x) start_x = end_x;
|
||||
if (start_y > end_y) start_y = end_y;
|
||||
|
||||
#if defined(SUNDISPLAY) && !defined(BYTESWAP)
|
||||
#ifdef OLD_CURSOR
|
||||
if ((displayflg = n_new_cursorin_CG6(start_x, start_y, w, h))) HideCursor;
|
||||
#endif /* OLD_CURSOR */
|
||||
|
||||
pr_rop(ColorDisplayPixrect, start_x, start_y, w, h, PIX_SRC, DisplayRegionPixrect, start_x,
|
||||
start_y);
|
||||
#ifdef OLD_CURSOR
|
||||
if (displayflg) ShowCursor;
|
||||
#endif /* OLD_CURSOR */
|
||||
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#if defined(XWINDOW) || defined(BYTESWAP)
|
||||
flush_display_region(start_x, start_y, w, h);
|
||||
|
||||
#endif /* XWINDOW */
|
||||
}
|
||||
}
|
||||
|
||||
104
src/dsk.c
104
src/dsk.c
@@ -53,16 +53,13 @@
|
||||
#include "commondefs.h"
|
||||
#include "ufsdefs.h"
|
||||
|
||||
#ifdef GCC386
|
||||
#include "inlnPS2.h"
|
||||
#endif /* GCC386 */
|
||||
|
||||
extern int *Lisp_errno;
|
||||
extern int Dummy_errno;
|
||||
|
||||
typedef struct filename_entry {
|
||||
char name[MAXPATHLEN]; /* With version, foo.~3~ or foo */
|
||||
int version_no;
|
||||
unsigned version_no;
|
||||
} FileName;
|
||||
|
||||
typedef struct current_varray {
|
||||
@@ -854,7 +851,8 @@ LispPTR COM_closefile(register LispPTR *args)
|
||||
LispPTR DSK_getfilename(register LispPTR *args)
|
||||
{
|
||||
register char *base;
|
||||
register int len, dirp, rval;
|
||||
size_t len, rval;
|
||||
register int dirp;
|
||||
int fatp;
|
||||
char lfname[MAXPATHLEN];
|
||||
char aname[MAXNAMLEN];
|
||||
@@ -1513,7 +1511,8 @@ LispPTR DSK_directorynamep(register LispPTR *args)
|
||||
{
|
||||
char dirname[MAXPATHLEN];
|
||||
char fullname[MAXPATHLEN];
|
||||
register int len, fatp;
|
||||
size_t len;
|
||||
register int fatp;
|
||||
register char *base;
|
||||
#ifdef DOS
|
||||
char drive[1], rawname[MAXNAMLEN];
|
||||
@@ -1700,9 +1699,10 @@ LispPTR COM_getfileinfo(register LispPTR *args)
|
||||
*bufp = sbuf.st_mode;
|
||||
return (ATOM_T);
|
||||
|
||||
case AUTHOR:
|
||||
case AUTHOR: {
|
||||
size_t rval;
|
||||
#ifndef DOS
|
||||
TIMEOUT(pwd = getpwuid(sbuf.st_uid));
|
||||
TIMEOUT0(pwd = getpwuid(sbuf.st_uid));
|
||||
if (pwd == (struct passwd *)NULL) {
|
||||
/*
|
||||
* Returns Lisp 0. Lisp code handles this case as author
|
||||
@@ -1720,8 +1720,9 @@ LispPTR COM_getfileinfo(register LispPTR *args)
|
||||
#endif /* BYTESWAP */
|
||||
#endif /* DOS */
|
||||
return (GetSmallp(rval));
|
||||
|
||||
case ALL:
|
||||
}
|
||||
case ALL: {
|
||||
size_t rval;
|
||||
/*
|
||||
* The format of the buffer which has been allocated by Lisp
|
||||
* is as follows.
|
||||
@@ -1747,7 +1748,7 @@ LispPTR COM_getfileinfo(register LispPTR *args)
|
||||
bufp = (unsigned *)(Addr68k_from_LADDR(laddr));
|
||||
*bufp = sbuf.st_mode;
|
||||
#ifndef DOS
|
||||
TIMEOUT(pwd = getpwuid(sbuf.st_uid));
|
||||
TIMEOUT0(pwd = getpwuid(sbuf.st_uid));
|
||||
if (pwd == (struct passwd *)NULL) { return (GetSmallp(0)); }
|
||||
laddr = cdr(car(cdr(cdr(cdr(cdr(args[2]))))));
|
||||
STRING_BASE(laddr, base);
|
||||
@@ -1759,7 +1760,7 @@ LispPTR COM_getfileinfo(register LispPTR *args)
|
||||
#endif /* BYTESWAP */
|
||||
#endif /* DOS */
|
||||
return (GetSmallp(rval));
|
||||
|
||||
}
|
||||
default: return (NIL);
|
||||
}
|
||||
}
|
||||
@@ -2368,7 +2369,7 @@ LispPTR COM_getfreeblock(register LispPTR *args)
|
||||
void separate_version(char *name, char *ver, int checkp)
|
||||
{
|
||||
register char *start, *end, *cp;
|
||||
register int ver_no;
|
||||
register unsigned ver_no;
|
||||
size_t len;
|
||||
char ver_buf[VERSIONLEN];
|
||||
|
||||
@@ -2400,10 +2401,10 @@ void separate_version(char *name, char *ver, int checkp)
|
||||
*(start - 1) = '\0';
|
||||
*end = '\0';
|
||||
/*
|
||||
* Use atoi to eliminate leading 0s.
|
||||
* Use strtoul() to eliminate leading 0s.
|
||||
*/
|
||||
ver_no = atoi(start + 1);
|
||||
sprintf(ver_buf, "%d", ver_no);
|
||||
ver_no = strtoul(start + 1, (char **)NULL, 10);
|
||||
sprintf(ver_buf, "%u", ver_no);
|
||||
strcpy(ver, ver_buf);
|
||||
return;
|
||||
} else {
|
||||
@@ -2505,8 +2506,8 @@ int true_name(register char *path)
|
||||
#ifdef DOS
|
||||
char drive[1];
|
||||
#endif
|
||||
register char *sp, *cp;
|
||||
register int type, c;
|
||||
register char c, *sp, *cp;
|
||||
register int type;
|
||||
|
||||
if (strcmp(path, "/") == 0) return (-1);
|
||||
|
||||
@@ -3028,7 +3029,7 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
|
||||
* separator_version guarantees ver is a numeric
|
||||
* string.
|
||||
*/
|
||||
svarray->version_no = atoi(ver);
|
||||
svarray->version_no = strtoul(ver, (char **)NULL, 10);
|
||||
}
|
||||
svarray++;
|
||||
}
|
||||
@@ -3122,7 +3123,7 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
|
||||
* separator_version guarantees ver is a numeric
|
||||
* string.
|
||||
*/
|
||||
svarray->version_no = atoi(ver);
|
||||
svarray->version_no = strtoul(ver, (char **)NULL, 10);
|
||||
}
|
||||
svarray++;
|
||||
}
|
||||
@@ -3266,7 +3267,7 @@ static int maintain_version(char *file, FileName *varray, int forcep)
|
||||
* is versioned one higher than the existing highest version.
|
||||
*/
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
sprintf(ver, "%d", max_no + 1);
|
||||
sprintf(ver, "%u", max_no + 1);
|
||||
/*
|
||||
* The old file should have the same case name as the versionless
|
||||
* file.
|
||||
@@ -3398,7 +3399,8 @@ static int get_versionless(FileName *varray, char *file, char *dir)
|
||||
|
||||
static int check_vless_link(char *vless, FileName *varray, char *to_file, int *highest_p)
|
||||
{
|
||||
register int rval, max_no, found;
|
||||
register int rval, found;
|
||||
unsigned max_no;
|
||||
ino_t vless_ino;
|
||||
struct stat sbuf;
|
||||
char dir[MAXPATHLEN], name[MAXNAMLEN], ver[VERSIONLEN];
|
||||
@@ -3501,7 +3503,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
{
|
||||
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
|
||||
char ver[VERSIONLEN], vbuf[VERSIONLEN];
|
||||
register int ver_no, max_no;
|
||||
register unsigned ver_no, max_no;
|
||||
int highest_p;
|
||||
register FileName *entry;
|
||||
|
||||
@@ -3531,7 +3533,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* varray and try to find the file with the specified
|
||||
* version.
|
||||
*/
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindSpecifiedVersion(varray, entry, ver_no);
|
||||
if (entry != NULL) {
|
||||
ConcDirAndName(dir, entry->name, afile);
|
||||
@@ -3555,7 +3557,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
strcpy(afile, vless);
|
||||
return (1);
|
||||
} else {
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
if (ver_no == 1) {
|
||||
/*
|
||||
* Version 1 is specified. The versionless file is
|
||||
@@ -3589,13 +3591,13 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* link missing versionless file.
|
||||
*/
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
sprintf(vbuf, "%d", max_no + 1);
|
||||
sprintf(vbuf, "%u", max_no + 1);
|
||||
ConcNameAndVersion(vless, vbuf, vfile);
|
||||
strcpy(afile, vless);
|
||||
return (1);
|
||||
} else {
|
||||
/* A version is specified. */
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
if (ver_no == max_no + 1) {
|
||||
/*
|
||||
@@ -3604,7 +3606,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* is dealt with as a version of the link
|
||||
* missing versionless file.
|
||||
*/
|
||||
sprintf(vbuf, "%d", ver_no);
|
||||
sprintf(vbuf, "%u", ver_no);
|
||||
ConcNameAndVersion(vless, vbuf, vfile);
|
||||
strcpy(afile, vless);
|
||||
return (1);
|
||||
@@ -3643,7 +3645,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* varray and try to find the file with the specified
|
||||
* version.
|
||||
*/
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindSpecifiedVersion(varray, entry, ver_no);
|
||||
if (entry != NULL) {
|
||||
ConcDirAndName(dir, entry->name, afile);
|
||||
@@ -3700,7 +3702,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
{
|
||||
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
|
||||
char ver[VERSIONLEN], vbuf[VERSIONLEN];
|
||||
register int ver_no, min_no;
|
||||
register unsigned ver_no, min_no;
|
||||
int highest_p;
|
||||
register FileName *entry;
|
||||
|
||||
@@ -3730,7 +3732,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* varray and try to find the file with the specified
|
||||
* version.
|
||||
*/
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindSpecifiedVersion(varray, entry, ver_no);
|
||||
if (entry != NULL) {
|
||||
ConcDirAndName(dir, entry->name, afile);
|
||||
@@ -3754,7 +3756,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
strcpy(afile, vless);
|
||||
return (1);
|
||||
} else {
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
if (ver_no == 1) {
|
||||
/*
|
||||
* Version 1 is specified. The versionless file is
|
||||
@@ -3791,7 +3793,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
return (1);
|
||||
} else {
|
||||
/* A version is specified. */
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindHighestVersion(varray, entry, min_no);
|
||||
if (ver_no == min_no + 1) {
|
||||
/*
|
||||
@@ -3800,7 +3802,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* is dealt with as a version of the link
|
||||
* missing versionless file.
|
||||
*/
|
||||
sprintf(vbuf, "%d", ver_no);
|
||||
sprintf(vbuf, "%u", ver_no);
|
||||
ConcNameAndVersion(vless, vbuf, vfile);
|
||||
strcpy(afile, vless);
|
||||
return (1);
|
||||
@@ -3839,7 +3841,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* varray and try to find the file with the specified
|
||||
* version.
|
||||
*/
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindSpecifiedVersion(varray, entry, ver_no);
|
||||
if (entry != NULL) {
|
||||
ConcDirAndName(dir, entry->name, afile);
|
||||
@@ -3897,7 +3899,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
{
|
||||
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
|
||||
char ver[VERSIONLEN], vbuf[VERSIONLEN];
|
||||
register int ver_no, max_no;
|
||||
register unsigned ver_no, max_no;
|
||||
int highest_p;
|
||||
register FileName *entry;
|
||||
|
||||
@@ -3945,7 +3947,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* the existing highest version.
|
||||
*/
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
sprintf(vbuf, "%d", max_no + 1);
|
||||
sprintf(vbuf, "%u", max_no + 1);
|
||||
/*
|
||||
* We will use the file name of the existing highest
|
||||
* versioned file as the name of the new file, so that
|
||||
@@ -3963,7 +3965,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* varray and try to find the file with the specified
|
||||
* version.
|
||||
*/
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindSpecifiedVersion(varray, entry, ver_no);
|
||||
if (entry != NULL) {
|
||||
ConcDirAndName(dir, entry->name, afile);
|
||||
@@ -4001,7 +4003,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
strcpy(afile, vfile);
|
||||
return (1);
|
||||
} else {
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
if (ver_no == 1) {
|
||||
/*
|
||||
* Version 1 is specified. The versionless file is
|
||||
@@ -4037,13 +4039,13 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* missing versionless file.
|
||||
*/
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
sprintf(vbuf, "%d", max_no + 2);
|
||||
sprintf(vbuf, "%u", max_no + 2);
|
||||
ConcNameAndVersion(vless, vbuf, vfile);
|
||||
strcpy(afile, vfile);
|
||||
return (1);
|
||||
} else {
|
||||
/* A version is specified. */
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
if (ver_no == max_no + 1) {
|
||||
/*
|
||||
@@ -4052,7 +4054,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* is dealt with as a version of the link
|
||||
* missing versionless file.
|
||||
*/
|
||||
sprintf(vbuf, "%d", ver_no);
|
||||
sprintf(vbuf, "%u", ver_no);
|
||||
ConcNameAndVersion(vless, vbuf, vfile);
|
||||
strcpy(afile, vless);
|
||||
return (1);
|
||||
@@ -4100,7 +4102,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* new file.
|
||||
*/
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
sprintf(vbuf, "%d", max_no + 1);
|
||||
sprintf(vbuf, "%u", max_no + 1);
|
||||
/*
|
||||
* We will use the name of the highest versioned file
|
||||
* as the name of the new file.
|
||||
@@ -4117,7 +4119,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* varray and try to find the file with the specified
|
||||
* version.
|
||||
*/
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindSpecifiedVersion(varray, entry, ver_no);
|
||||
if (entry != NULL) {
|
||||
ConcDirAndName(dir, entry->name, afile);
|
||||
@@ -4191,7 +4193,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
{
|
||||
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
|
||||
char ver[VERSIONLEN], vbuf[VERSIONLEN];
|
||||
register int ver_no, max_no;
|
||||
register unsigned ver_no, max_no;
|
||||
int highest_p;
|
||||
register FileName *entry;
|
||||
|
||||
@@ -4243,7 +4245,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* varray and try to find the file with the specified
|
||||
* version.
|
||||
*/
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindSpecifiedVersion(varray, entry, ver_no);
|
||||
if (entry != NULL) {
|
||||
ConcDirAndName(dir, entry->name, afile);
|
||||
@@ -4281,7 +4283,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
strcpy(afile, vless);
|
||||
return (1);
|
||||
} else {
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
if (ver_no == 1) {
|
||||
/*
|
||||
* Version 1 is specified. The versionless file is
|
||||
@@ -4316,13 +4318,13 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* link missing versionless file.
|
||||
*/
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
sprintf(vbuf, "%d", max_no + 1);
|
||||
sprintf(vbuf, "%u", max_no + 1);
|
||||
ConcNameAndVersion(vless, vbuf, vfile);
|
||||
strcpy(afile, vless);
|
||||
return (1);
|
||||
} else {
|
||||
/* A version is specified. */
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
if (ver_no == max_no + 1) {
|
||||
/*
|
||||
@@ -4331,7 +4333,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* is dealt with as a version of the link
|
||||
* missing versionless file.
|
||||
*/
|
||||
sprintf(vbuf, "%d", ver_no);
|
||||
sprintf(vbuf, "%u", ver_no);
|
||||
ConcNameAndVersion(vless, vbuf, vfile);
|
||||
strcpy(afile, vless);
|
||||
return (1);
|
||||
@@ -4387,7 +4389,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
|
||||
* varray and try to find the file with the specified
|
||||
* version.
|
||||
*/
|
||||
ver_no = atoi(ver);
|
||||
ver_no = strtoul(ver, (char **)NULL, 10);
|
||||
FindSpecifiedVersion(varray, entry, ver_no);
|
||||
if (entry != NULL) {
|
||||
ConcDirAndName(dir, entry->name, afile);
|
||||
|
||||
@@ -27,9 +27,6 @@ DspInterface currentdsp = &curdsp;
|
||||
#ifdef XWINDOW
|
||||
extern int LispDisplayRequestedWidth;
|
||||
extern int LispDisplayRequestedHeight;
|
||||
|
||||
extern DspInterface X_init(DspInterface dsp, char *lispbitmap, int width_hint, int height_hint,
|
||||
int depth_hint);
|
||||
#endif /* XWINDOW */
|
||||
|
||||
#ifdef DOS
|
||||
|
||||
@@ -12,9 +12,6 @@
|
||||
#include "version.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#ifdef SUNDISPLAY
|
||||
#include <sunwindow/window_hs.h>
|
||||
#endif
|
||||
|
||||
#include "lispemul.h"
|
||||
#include "lsptypes.h"
|
||||
@@ -68,9 +65,7 @@ void DSP_showdisplay(LispPTR *args)
|
||||
LispPTR DSP_VideoColor(LispPTR *args) /* args[0] : black flag */
|
||||
{
|
||||
int invert;
|
||||
#ifdef SUNDISPLAY
|
||||
return NIL;
|
||||
#elif defined(XWINDOW)
|
||||
#if defined(XWINDOW)
|
||||
invert = args[0] & 0xFFFF;
|
||||
lisp_Xvideocolor(invert);
|
||||
if (invert)
|
||||
@@ -99,50 +94,7 @@ void DSP_Cursor(LispPTR *args, int argnum)
|
||||
extern int ScreenLocked;
|
||||
extern DLword *EmCursorX68K, *EmCursorY68K;
|
||||
extern int LastCursorX, LastCursorY;
|
||||
#if defined(SUNDISPLAY) && !defined(OLD_CURSOR)
|
||||
static int Init = T;
|
||||
#endif
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
if (argnum == 2) {
|
||||
CurrentCursor.cur_xhot = args[0] & 0xffff;
|
||||
CurrentCursor.cur_yhot = args[1] & 0xffff;
|
||||
};
|
||||
|
||||
#ifdef OLD_CURSOR
|
||||
win_setcursor(LispWindowFd, &CurrentCursor);
|
||||
#else
|
||||
#ifndef INIT
|
||||
ScreenLocked = T;
|
||||
if (!Init) {
|
||||
taking_mouse_down();
|
||||
taking_mouse_up(*EmCursorX68K, *EmCursorY68K);
|
||||
} else {
|
||||
Init = NIL;
|
||||
cursor_hidden_bitmap(0, 0);
|
||||
taking_mouse_up(0, 0);
|
||||
*EmCursorX68K = LastCursorX = 0;
|
||||
*EmCursorY68K = LastCursorY = 0;
|
||||
}
|
||||
|
||||
ScreenLocked = NIL;
|
||||
#else
|
||||
/* Init specific lde only */
|
||||
ScreenLocked = T;
|
||||
if (!Init) {
|
||||
taking_mouse_down();
|
||||
taking_mouse_up(0, 0);
|
||||
} else {
|
||||
Init = NIL;
|
||||
cursor_hidden_bitmap(0, 0);
|
||||
taking_mouse_up(0, 0);
|
||||
}
|
||||
|
||||
ScreenLocked = NIL;
|
||||
#endif /* INIT */
|
||||
|
||||
#endif
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
/* For X-Windows, set the cursor to the given location. */
|
||||
@@ -161,32 +113,6 @@ void DSP_Cursor(LispPTR *args, int argnum)
|
||||
*/
|
||||
void DSP_SetMousePos(register LispPTR *args)
|
||||
{
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef OLD_CURSOR
|
||||
register int x, y;
|
||||
x = GetSmalldata(args[0]);
|
||||
y = GetSmalldata(args[1]); /* debug */
|
||||
win_setmouseposition(LispWindowFd, GetSmalldata(args[0]), GetSmalldata(args[1]));
|
||||
#else
|
||||
extern int ScreenLocked;
|
||||
extern DLword *EmCursorX68K, *EmCursorY68K, *EmMouseX68K, *EmMouseY68K;
|
||||
register int x, y;
|
||||
ScreenLocked = T;
|
||||
x = GetSmalldata(args[0]);
|
||||
y = GetSmalldata(args[1]);
|
||||
/* for Suntool's invisible cursor */
|
||||
win_setmouseposition(LispWindowFd, x, y);
|
||||
/* for REAL cursor image */
|
||||
taking_mouse_down();
|
||||
taking_mouse_up(x, y);
|
||||
|
||||
#ifndef INIT
|
||||
*EmMouseX68K = x;
|
||||
*EmMouseY68K = y;
|
||||
#endif
|
||||
ScreenLocked = NIL;
|
||||
#endif
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
if (Mouse_Included)
|
||||
@@ -251,25 +177,6 @@ void flip_cursor() {
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef OLD_CURSOR
|
||||
|
||||
win_setcursor(LispWindowFd, &CurrentCursor);
|
||||
#else
|
||||
ScreenLocked = T;
|
||||
taking_mouse_down();
|
||||
#ifndef INIT
|
||||
taking_mouse_up(*EmCursorX68K, *EmCursorY68K);
|
||||
#else
|
||||
if (!for_makeinit)
|
||||
taking_mouse_up(*EmCursorX68K, *EmCursorY68K);
|
||||
else
|
||||
taking_mouse_up(0, 0);
|
||||
#endif /* INIT */
|
||||
|
||||
ScreenLocked = NIL;
|
||||
#endif
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
/* JDS 011213: 15- cur y, as function does same! */
|
||||
|
||||
@@ -478,7 +478,7 @@ int *ether_debug() {
|
||||
#ifdef MAIKO_ENABLE_ETHERNET
|
||||
estat[0] = 0;
|
||||
if (ether_fd < 0) return (NIL);
|
||||
printf("fd %d bsize %d buf %X icb %X in %d out %d\n ", ether_fd, ether_bsize, (int)ether_buf,
|
||||
printf("fd %d bsize %d buf %p icb %X in %d out %d\n ", ether_fd, ether_bsize, ether_buf,
|
||||
IOPage->dlethernet[3], ether_in, ether_out);
|
||||
#endif /* MAIKO_ENABLE_ETHERNET */
|
||||
|
||||
@@ -742,7 +742,7 @@ static int check_filter(u_char *buffer)
|
||||
static void init_uid() {
|
||||
int rid;
|
||||
rid = getuid();
|
||||
seteuid(rid);
|
||||
setuid(rid);
|
||||
}
|
||||
#endif /* MAIKO_ENABLE_ETHERNET */
|
||||
|
||||
@@ -830,7 +830,7 @@ void init_ether() {
|
||||
/* JDS 991228 remove perror("Can't open network; XNS unavailable.\n"); */
|
||||
ether_fd = -1;
|
||||
}
|
||||
seteuid(getuid());
|
||||
setuid(getuid());
|
||||
}
|
||||
#elif defined(USE_NIT)
|
||||
#ifndef OS4
|
||||
@@ -952,7 +952,7 @@ void init_ether() {
|
||||
perror("Can't open network; XNS unavailable.\n");
|
||||
ether_fd = -1;
|
||||
}
|
||||
seteuid(getuid());
|
||||
setuid(getuid());
|
||||
}
|
||||
|
||||
#endif /* OS4 */
|
||||
|
||||
@@ -24,9 +24,6 @@
|
||||
#include "commondefs.h"
|
||||
#include "gchtfinddefs.h"
|
||||
|
||||
#ifdef GCC386
|
||||
#include "inlnPS2.h"
|
||||
#endif
|
||||
|
||||
#define MaskShift(x) (((x) << 16) & SEGMASK)
|
||||
|
||||
|
||||
@@ -34,9 +34,6 @@
|
||||
#include "gc2defs.h"
|
||||
#include "gcscandefs.h"
|
||||
|
||||
#ifdef GCC386
|
||||
#include "inlnPS2.h"
|
||||
#endif /* GCC386 */
|
||||
|
||||
/**********************************************************************/
|
||||
/*
|
||||
|
||||
@@ -112,7 +112,7 @@ LispPTR aref1(LispPTR array, int index) {
|
||||
if (index >= actarray->totalsize) {
|
||||
printf("Invalid index in GC's AREF1: 0x%x\n", index);
|
||||
printf(" Array size limit: 0x%x\n", actarray->totalsize);
|
||||
printf(" Array ptr: 0x%lx\n", (UNSIGNED)array);
|
||||
printf(" Array ptr: 0x%x\n", array);
|
||||
printf(" Array 68K ptr: %p\n", actarray);
|
||||
printf("base: 0x%x\n", actarray->base);
|
||||
printf("offset: 0x%x\n", actarray->offset);
|
||||
|
||||
201
src/gcmain3.c
201
src/gcmain3.c
@@ -52,9 +52,6 @@
|
||||
#include "gcrcelldefs.h"
|
||||
#include "gcscandefs.h"
|
||||
|
||||
#ifdef GCC386
|
||||
#include "inlnPS2.h"
|
||||
#endif
|
||||
|
||||
#define WORDSPERCELL 2
|
||||
#define MAXHTCNT 63
|
||||
@@ -99,203 +96,6 @@
|
||||
#define STKREFBIT 0x200
|
||||
#endif /* BIGVM */
|
||||
|
||||
#ifdef GCC386
|
||||
/* byte-swapped, 386 assembler version */
|
||||
LispPTR gcmapscan() {
|
||||
volatile DLword probe;
|
||||
volatile DLword *entry;
|
||||
volatile DLword offset;
|
||||
volatile LispPTR ptr;
|
||||
|
||||
asm volatile(
|
||||
" \n\
|
||||
movl $32768,%%edi / probe = HTSIZE. \n\
|
||||
.align 4 \n\
|
||||
nextentry: / nextentry: \n\
|
||||
decl %%edi \n\
|
||||
js returNIL \n\
|
||||
leal 0(,%%edi,2),%%esi \n\
|
||||
addl HTmain,%%esi /htlptr = (struct htlinkptr *)(HTmain+probe); \n\
|
||||
.align 4 \n\
|
||||
scanloop: \n\
|
||||
movl %%esi,%%edx \n\
|
||||
xorb $2,%%dl \n\
|
||||
movzwl (%%edx),%%eax / contents = ((struct htlinkptr *)WORDPTR(htlptr))->contents \n\
|
||||
testl %%eax,%%eax / if (contents && \n\
|
||||
je scanbot \n\
|
||||
testb $1,%%al \n\
|
||||
jne scanok \n\
|
||||
testb $254,%%ah \n\
|
||||
jne scanbot \n\
|
||||
scanok: \n\
|
||||
jmp scandone \n\
|
||||
.align 4 \n\
|
||||
scanbot: \n\
|
||||
addl $-2,%%esi / end of while loop. \n\
|
||||
decl %%edi \n\
|
||||
jns scanloop \n\
|
||||
jmp returNIL \n\
|
||||
\n\
|
||||
\n\
|
||||
scandone: \n\
|
||||
movl %%edx,%0 / entry = (DLword *) HTmain + probe. \n\
|
||||
retry: / retry: \n\
|
||||
movl %0,%%ecx \n\
|
||||
movzwl (%%ecx),%%eax \n\
|
||||
testb $1,%%al / if HENTRY->collision, \n\
|
||||
je nocollision \n\
|
||||
xorl %%esi,%%esi / prev = 0 \n\
|
||||
andl $65534,%%eax \n\
|
||||
linkloop: // linkloop: \n\
|
||||
leal 0(,%%eax,2),%%ecx \n\
|
||||
addl HTcoll,%%ecx \n\
|
||||
movw 2(%%ecx),%%ax / offset = ((struct htcoll *)link)->free_ptr; \n\
|
||||
testb $254,%%ah / if StkCountIsZero(offset) \n\
|
||||
jne stknz \n\
|
||||
sall $15,%%eax / , (probe << 1)); \n\
|
||||
andl $16711680,%%eax \n\
|
||||
leal 0(,%%edi,2),%%edx \n\
|
||||
orl %%eax,%%edx \n\
|
||||
movl %%edx,%2 / to ptr. \n\
|
||||
testl %%esi,%%esi / DelLink. if (prev != 0) \n\
|
||||
je prevZ \n\
|
||||
leal 2(%%esi),%%edx / GETWORD((DLword *)prev + 1) = GETWORD((DLword *)link + 1) \n\
|
||||
xorb $2,%%dl \n\
|
||||
leal 2(%%ecx),%%eax \n\
|
||||
xorb $2,%%al \n\
|
||||
movw (%%eax),%%ax \n\
|
||||
jmp freelink \n\
|
||||
.align 4 \n\
|
||||
prevZ: \n\
|
||||
movl %0,%%edx / else GETWORD((DLword *)entry) = GETWORD((DLword *)link + 1) \n\
|
||||
leal 2(%%ecx),%%eax \n\
|
||||
xorb $2,%%al \n\
|
||||
movw (%%eax),%%ax \n\
|
||||
orb $1,%%al \n\
|
||||
freelink: / FreeLink \n\
|
||||
movw %%ax,(%%edx) \n\
|
||||
movl %%ecx,%%eax \n\
|
||||
xorb $2,%%al \n\
|
||||
movw $0,(%%eax) \n\
|
||||
leal 2(%%ecx),%%eax \n\
|
||||
xorb $2,%%al \n\
|
||||
movl HTcoll,%%edx / GETWORD(link+1) = GETWORD(HTcoll); \n\
|
||||
xorb $2,%%dl \n\
|
||||
movw (%%edx),%%dx \n\
|
||||
movw %%dx,(%%eax) \n\
|
||||
movl HTcoll,%%edx / GETWORD(HTcoll) = (link - HTcoll); \n\
|
||||
xorb $2,%%dl \n\
|
||||
movl %%ecx,%%eax \n\
|
||||
subl HTcoll,%%eax \n\
|
||||
sarl $1,%%eax \n\
|
||||
movw %%ax,(%%edx) \n\
|
||||
movl %0,%%esi / link = (DLword *)HTcoll + GetLinkptr(GETWORD((DLword *)entry \n\
|
||||
movw (%%esi),%%ax \n\
|
||||
andl $65534,%%eax \n\
|
||||
addl %%eax,%%eax \n\
|
||||
movl %%eax,%%ecx \n\
|
||||
addl HTcoll,%%ecx \n\
|
||||
leal 2(%%ecx),%%edx / if (GETWORD((DLword *)link + 1) == 0) { \n\
|
||||
xorb $2,%%dl \n\
|
||||
cmpw $0,(%%edx) \n\
|
||||
jne sgclp1 \n\
|
||||
movl %%ecx,%%eax / GETWORD((DLword *)entry) = GETWORD((DLword *)link) \n\
|
||||
xorb $2,%%al \n\
|
||||
movw (%%eax),%%bx \n\
|
||||
movw %%bx,(%%esi) \n\
|
||||
movw $0,(%%eax) / FreeLink: GETWORD(link) = 0 \n\
|
||||
movl HTcoll,%%eax / GETWORD(link+1) = GETWORD(HTcoll) \n\
|
||||
xorb $2,%%al \n\
|
||||
movw (%%eax),%%bx \n\
|
||||
movw %%bx,(%%edx) \n\
|
||||
movl %%ecx,%%ebx \n\
|
||||
subl HTcoll,%%ebx \n\
|
||||
sarl $1,%%ebx \n\
|
||||
movw %%bx,(%%eax) \n\
|
||||
.align 4 \n\
|
||||
sgclp1: / start of gcloop 1 - do setup \n\
|
||||
movl GcDisabled_word,%%ecx \n\
|
||||
movl MDStypetbl,%%ebx \n\
|
||||
gclp1: / GcreclaimLp: \n\
|
||||
pushl %2 \n\
|
||||
call gcreccell \n\
|
||||
addl $4,%%esp \n\
|
||||
movl %%eax,%2 \n\
|
||||
testl %%eax,%%eax \n\
|
||||
je eogclp1 \n\
|
||||
shrl $9,%%eax \n\
|
||||
leal 0(%%ebx,%%eax,2),%%eax \n\
|
||||
xorb $2,%%al \n\
|
||||
cmpw $0,(%%eax) \n\
|
||||
jl gclp1 \n\
|
||||
cmpl $76,(%%ecx) \n\
|
||||
je gclp1 \n\
|
||||
pushl $0 \n\
|
||||
pushl %2 \n\
|
||||
call rec_htfind \n\
|
||||
addl $8,%%esp \n\
|
||||
jmp gclp1 \n\
|
||||
.align 4 \n\
|
||||
.align 4 \n\
|
||||
eogclp1: \n\
|
||||
movl %0,%%eax / if (HTLPTR->contents == 0) \n\
|
||||
cmpw $0,(%%eax) \n\
|
||||
je nextentry / goto nextentry; \n\
|
||||
jmp retry / else goto retry; \n\
|
||||
.align 4 \n\
|
||||
.align 4 \n\
|
||||
\n\
|
||||
stknz: \n\
|
||||
movw (%%ecx),%%ax / if ((offset = ((struct htcoll *)link)->next_free)) \n\
|
||||
testw %%ax,%%ax \n\
|
||||
je nextentry \n\
|
||||
movl %%ecx,%%esi \n\
|
||||
andl $65535,%%eax \n\
|
||||
jmp linkloop \n\
|
||||
.align 4 \n\
|
||||
.align 4 \n\
|
||||
nocollision: \n\
|
||||
testw $65024,(%%ecx) / if (StkCntIsZero(HTLPTR->contents)) { \n\
|
||||
jne nextentry \n\
|
||||
movw (%%ecx),%%dx /ptr = VAG2(HENTRY->segnum, (probe << 1)); \n\
|
||||
sall $15,%%edx \n\
|
||||
andl $16711680,%%edx \n\
|
||||
leal (,%%edi,2),%%eax \n\
|
||||
orl %%eax,%%edx \n\
|
||||
movl %%edx,%2 \n\
|
||||
movw $0,(%%ecx) / HTLPTR->contents = 0 \n\
|
||||
.align 4 \n\
|
||||
movl GcDisabled_word,%%ecx \n\
|
||||
movl MDStypetbl,%%ebx \n\
|
||||
gclp2: / GcreclaimLp \n\
|
||||
pushl %2 \n\
|
||||
call gcreccell \n\
|
||||
addl $4,%%esp \n\
|
||||
movl %%eax,%2 \n\
|
||||
testl %%eax,%%eax \n\
|
||||
je nextentry \n\
|
||||
shrl $9,%%eax \n\
|
||||
leal 0(%%ebx,%%eax,2),%%eax \n\
|
||||
xorb $2,%%al \n\
|
||||
cmpw $0,(%%eax) \n\
|
||||
jl gclp2 \n\
|
||||
cmpl $76,(%%ecx) \n\
|
||||
je gclp2 \n\
|
||||
pushl $0 \n\
|
||||
pushl %2 \n\
|
||||
call rec_htfind \n\
|
||||
addl $8,%%esp \n\
|
||||
jmp gclp2 \n\
|
||||
.align 4 \n\
|
||||
returNIL: \n\
|
||||
"
|
||||
: "=g"(entry), "=g"(offset), "=g"(ptr)
|
||||
:
|
||||
: "ax", "dx", "cx", "bx", "si", "di");
|
||||
|
||||
return NIL;
|
||||
}
|
||||
#else
|
||||
|
||||
LispPTR gcmapscan(void) {
|
||||
register GCENTRY probe;
|
||||
@@ -342,7 +142,6 @@ nextentry:
|
||||
}
|
||||
return (NIL);
|
||||
}
|
||||
#endif /* GCC386 */
|
||||
|
||||
LispPTR gcmapunscan(void) {
|
||||
register GCENTRY probe;
|
||||
|
||||
@@ -49,9 +49,6 @@
|
||||
#include "commondefs.h"
|
||||
#include "mkcelldefs.h"
|
||||
|
||||
#ifdef GCC386
|
||||
#include "inlnPS2.h"
|
||||
#endif
|
||||
|
||||
#define TCPhostlookup 0
|
||||
#define TCPservicelookup 1
|
||||
|
||||
383
src/initdsp.c
383
src/initdsp.c
@@ -18,20 +18,6 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#ifndef NOPIXRECT
|
||||
#include <sunwindow/window_hs.h>
|
||||
#include <sunwindow/cms.h>
|
||||
#include <sunwindow/win_ioctl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/mman.h>
|
||||
#include <pixrect/pixrect_hs.h>
|
||||
#include <sun/fbio.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <pixrect/pr_planegroups.h>
|
||||
#endif /* NOPIXRECT */
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef OS4
|
||||
#include <vfork.h>
|
||||
@@ -76,21 +62,6 @@ extern DspInterface currentdsp;
|
||||
#define FBTYPE_SUNFAST_COLOR 12
|
||||
#endif
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
struct screen LispScreen;
|
||||
#ifndef NOPIXRECT
|
||||
struct pixrect *CursorBitMap, *InvisibleCursorBitMap;
|
||||
struct pixrect *SrcePixRect, *DestPixRect;
|
||||
#ifdef DISPLAYBUFFER
|
||||
int black = 0, white = -1;
|
||||
struct pixrect *ColorDisplayPixrect, *DisplayRegionPixrect;
|
||||
#define COPY_PIXRECT_TO_COLOR (PIX_SRC /*| PIX_DONTCLIP */)
|
||||
#ifdef DEBUG
|
||||
int oldred[2], oldgreen[2], oldblue[2];
|
||||
#endif /* DEBUG */
|
||||
#endif /* DISPLAYBUFFER */
|
||||
#endif /* NOPIXRECT */
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
int LispWindowFd = -1;
|
||||
int FrameBufferFd = -1;
|
||||
@@ -107,10 +78,6 @@ DLword *DisplayRegion68k_end_addr;
|
||||
/* some functions use this variable when undef DISPLAYBUFFER */
|
||||
DLword *DISP_MAX_Address;
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
struct cursor CurrentCursor, InvisibleCursor;
|
||||
struct winlock DisplayLockArea;
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
extern DLword *EmCursorBitMap68K;
|
||||
extern IFPAGE *InterfacePage;
|
||||
@@ -127,13 +94,6 @@ DLword *DisplayRegion68k_end_addr;
|
||||
extern int *Xdisplay; /* DAANGER -jarl nilsson 27-apr-92 */
|
||||
#endif /* XWINDOW */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
/* For SunOS4.1 Window Security Feature. */
|
||||
int Win_security_p;
|
||||
#include <sys/wait.h>
|
||||
#define SV_ACQUIRE "/bin/sunview1/sv_acquire"
|
||||
#define SV_RELEASE "/bin/sunview1/sv_release"
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
@@ -144,30 +104,6 @@ int Win_security_p;
|
||||
/************************************************************************/
|
||||
|
||||
void init_cursor() {
|
||||
#ifdef SUNDISPLAY
|
||||
#ifndef NOPIXRECT
|
||||
CursorBitMap = mem_create(CURSORWIDTH, CURSORHEIGHT, 1);
|
||||
mpr_mdlinebytes(CursorBitMap) = CURSORWIDTH >> 3; /* 2(byte) */
|
||||
#endif /* NOPIXRECT */
|
||||
|
||||
CurrentCursor.cur_xhot = 0;
|
||||
CurrentCursor.cur_yhot = 0;
|
||||
CurrentCursor.cur_shape = CursorBitMap;
|
||||
CurrentCursor.cur_function = PIX_SRC | PIX_DST;
|
||||
|
||||
/* Invisible Cursor */
|
||||
|
||||
#ifndef NOPIXRECT
|
||||
InvisibleCursorBitMap = mem_create(0, 0, 1);
|
||||
#endif /* NOPIXRECT */
|
||||
|
||||
InvisibleCursor.cur_xhot = 0;
|
||||
InvisibleCursor.cur_yhot = 0;
|
||||
InvisibleCursor.cur_shape = InvisibleCursorBitMap;
|
||||
InvisibleCursor.cur_function = /*PIX_SRC |*/ PIX_DST;
|
||||
win_setcursor(LispWindowFd, &InvisibleCursor);
|
||||
win_setmouseposition(LispWindowFd, 0, 0);
|
||||
#endif /* SUNDISPLAY */
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
@@ -178,18 +114,6 @@ void init_cursor() {
|
||||
/* */
|
||||
/************************************************************************/
|
||||
void set_cursor() {
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef OLD_CURSOR
|
||||
(mpr_d(CursorBitMap))->md_image = (short *)(IOPage->dlcursorbitmap);
|
||||
/* BitmapBase of CurrentCursor
|
||||
* is set to IOPage->dlcursorbitmap
|
||||
*/
|
||||
if (win_setcursor(LispWindowFd, &CurrentCursor) == -1) perror("SET Cursor");
|
||||
if (win_setmouseposition(LispWindowFd, 0, 0) == -1) perror("SET Mouse POS");
|
||||
#else
|
||||
if (win_setcursor(LispWindowFd, &InvisibleCursor) == -1) perror("SET Cursor:");
|
||||
#endif
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
Init_XCursor();
|
||||
@@ -208,22 +132,6 @@ void set_cursor() {
|
||||
|
||||
#ifndef COLOR
|
||||
void clear_display() {
|
||||
#ifdef SUNDISPLAY
|
||||
#ifndef DISPLAYBUFFER
|
||||
register short *word;
|
||||
register int w, h;
|
||||
word = (short *)DisplayRegion68k;
|
||||
for (h = displayheight; (h--);) {
|
||||
for (w = DisplayRasterWidth; (w--);) { *word++ = 0; }
|
||||
}
|
||||
#else
|
||||
pr_rop(ColorDisplayPixrect, 0, 0, displaywidth, displayheight, PIX_CLR, ColorDisplayPixrect, 0,
|
||||
0);
|
||||
/* Original images are still kept in SYSOUT(DisplayRegion) */
|
||||
/* clear_CG6; */
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef DOS
|
||||
TPRINT(("Enter Clear_display\n"));
|
||||
@@ -261,82 +169,11 @@ void clear_display() {
|
||||
|
||||
void init_display2(DLword *display_addr, int display_max)
|
||||
{
|
||||
#ifdef SUNDISPLAY
|
||||
#ifndef DISPLAYBUFFER
|
||||
int mmapstat;
|
||||
#endif
|
||||
int fbgattr_result;
|
||||
struct fbtype my_screen;
|
||||
char groups[PIXPG_OVERLAY + 1];
|
||||
struct fbgattr FBattr;
|
||||
struct pixrect *ColorFb;
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
|
||||
/* For SunOS4.1 Window Security Feature. */
|
||||
|
||||
union wait status;
|
||||
|
||||
/* Window Security is available? */
|
||||
if (!access(SV_ACQUIRE, F_OK))
|
||||
Win_security_p = 1;
|
||||
else
|
||||
Win_security_p = 0;
|
||||
|
||||
if (Win_security_p) {
|
||||
switch (vfork()) {
|
||||
case -1: /* Error */ (void)fprintf(stderr, "init_display: Fork failed.\n"); exit(1);
|
||||
|
||||
case 0: /* Child */
|
||||
(void)execl(SV_ACQUIRE, "sv_acquire", "0", "256", "250", 0);
|
||||
/* should not return */
|
||||
(void)fprintf(stderr, "init_display: exec for sv_acquire failed\n");
|
||||
exit(1);
|
||||
|
||||
default: /* Parent */
|
||||
/* do nothing */
|
||||
break;
|
||||
}
|
||||
(void)wait(&status); /* child dies after changing 6 */
|
||||
|
||||
if (status.w_retcode != 0) {
|
||||
(void)fprintf(stderr, "init_display: failed to set ownership of win devices\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
if ((LispWindowFd = win_screennew(&LispScreen)) == -1) {
|
||||
perror("init_display: can't create LispWindow\n");
|
||||
exit(-1);
|
||||
} else {
|
||||
#ifdef KBINT
|
||||
/* int_io_open(LispWindowFd); JDS 4/27/94 move to initkbd, to try preventing the
|
||||
* move-mouse-never-get-kbd bug */
|
||||
#endif
|
||||
fcntl(LispWindowFd, F_SETFL, fcntl(LispWindowFd, F_GETFL, 0) | O_NONBLOCK);
|
||||
}
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
DisplayRegion68k = (DLword *)display_addr;
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
if ((FrameBufferFd = open(LispScreen.scr_fbname, 2)) == -1) {
|
||||
perror("init_display: can't open FrameBuffer\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* initialize Display parameters */
|
||||
if (ioctl(FrameBufferFd, FBIOGTYPE, &my_screen) == -1) {
|
||||
perror("init_display: can't find screen parameters\n");
|
||||
exit(-1);
|
||||
}
|
||||
displaywidth = my_screen.fb_width;
|
||||
displayheight = my_screen.fb_height;
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#if (defined(XWINDOW) || defined(DOS))
|
||||
(currentdsp->device.enter)(currentdsp);
|
||||
@@ -351,146 +188,7 @@ void init_display2(DLword *display_addr, int display_max)
|
||||
DBPRINT(("FBIOGTYPE w x h = %d x %d\n", displaywidth, displayheight));
|
||||
|
||||
DBPRINT(("FBIOGTYPE w x h = %d x %d\n", displaywidth, displayheight));
|
||||
#ifdef SUNDISPLAY
|
||||
DBPRINT((" (real) type = %d\n", my_screen.fb_type));
|
||||
DBPRINT((" (real) bpp = %d\n", my_screen.fb_depth));
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
/** now attempt to use the FBIOGATTR call for more information **/
|
||||
|
||||
fbgattr_result = ioctl(FrameBufferFd, FBIOGATTR, &FBattr);
|
||||
if (fbgattr_result >= 0) {
|
||||
DBPRINT(("FBIOGATTR realtype = %d\n", FBattr.real_type));
|
||||
DBPRINT((" (real) size = %d x %d\n", FBattr.fbtype.fb_width, FBattr.fbtype.fb_height));
|
||||
DBPRINT((" (real) type = %d\n", FBattr.fbtype.fb_type));
|
||||
DBPRINT((" (real) bpp = %d\n", FBattr.fbtype.fb_depth));
|
||||
DBPRINT((" emuls= %d %d %d %d\n", FBattr.emu_types[0], FBattr.emu_types[1],
|
||||
FBattr.emu_types[2], FBattr.emu_types[3]));
|
||||
} else { /* fill in defaults */
|
||||
FBattr.real_type = my_screen.fb_type;
|
||||
}
|
||||
DBPRINT(("init_display: FBIOGATTR_result = %d\n", fbgattr_result));
|
||||
/* probe for DISPLAY type */
|
||||
/**********************************************************************
|
||||
* FB-TYPE REAL-TYPE
|
||||
* BW2 2 x
|
||||
* CG2 3 3
|
||||
* CG3 8 6
|
||||
* CG4 2 8
|
||||
* CG6 8 12
|
||||
* CG8 6 7
|
||||
* CG9(GP1) 4 4 ;gpconfig -f -b
|
||||
* CG9(GP1) 2 13 ;gpconfig gpone0 -f -b cgtwo0
|
||||
* ;We assume This config for GXP model
|
||||
***********************************************************************/
|
||||
/* Medley supports real (or emulated) BW2, so check for that first */
|
||||
#ifndef DISPLAYBUFFER
|
||||
|
||||
if ((my_screen.fb_type == FBTYPE_SUN2BW) /* real or emulated bwtwo */
|
||||
|| (my_screen.fb_type == FBTYPE_SUN3COLOR)) /* Sun 3 color? */
|
||||
switch (FBattr.real_type) {
|
||||
case FBTYPE_SUN2BW: DisplayType = SUN2BW; break;
|
||||
|
||||
case FBTYPE_MEMCOLOR: /* memory 24-bit (CG8) */
|
||||
{
|
||||
DisplayType = SUNMEMCOLOR;
|
||||
ColorFb = pr_open("/dev/fb");
|
||||
pr_available_plane_groups(ColorFb, sizeof(groups), groups);
|
||||
if (groups[PIXPG_OVERLAY] && groups[PIXPG_OVERLAY_ENABLE]) {
|
||||
pr_set_plane_group(ColorFb, PIXPG_OVERLAY_ENABLE);
|
||||
pr_rop(ColorFb, 0, 0, ColorFb->pr_width, ColorFb->pr_height, PIX_SET, 0, 0, 0);
|
||||
pr_set_plane_group(ColorFb, PIXPG_OVERLAY);
|
||||
}
|
||||
} break;
|
||||
|
||||
case FBTYPE_SUN4COLOR: /* cg4 */
|
||||
case FBTYPE_SUNROP_COLOR: /* cg9(GXP) */
|
||||
{ /* need to clear overlay plane */
|
||||
DisplayType = SUN4COLOR;
|
||||
ColorFb = pr_open("/dev/fb");
|
||||
pr_available_plane_groups(ColorFb, sizeof(groups), groups);
|
||||
if (groups[PIXPG_OVERLAY] && groups[PIXPG_OVERLAY_ENABLE]) {
|
||||
pr_set_plane_group(ColorFb, PIXPG_OVERLAY_ENABLE);
|
||||
pr_rop(ColorFb, 0, 0, ColorFb->pr_width, ColorFb->pr_height, PIX_SET, 0, 0, 0);
|
||||
pr_set_plane_group(ColorFb, PIXPG_OVERLAY);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
printf("initdisplay: Unsupported FBreal_type %d\n", FBattr.real_type);
|
||||
DisplayType = (my_screen.fb_type) << 3;
|
||||
/* should be able to proceed, since its an emulated bwtwo */
|
||||
}
|
||||
else { /* not currently a SUN2BW, perhaps can emulate it? */
|
||||
if (fbgattr_result >= 0) { /* got gattrs, can try sattr */
|
||||
#ifdef DEBUG
|
||||
error("fb bwtwo emulation not implemented, q to proceed\n");
|
||||
#endif /* DEBUG */
|
||||
} else {
|
||||
error("Not cgfour or bwtwo, q to attempt to proceed");
|
||||
}
|
||||
printf("initdisplay: Unsupported FBreal_type %d\n", FBattr.real_type);
|
||||
DisplayType = (my_screen.fb_type) << 3;
|
||||
/* try to muddle on */
|
||||
}
|
||||
#else /* DISPLAYBUFFER is defined, then: */
|
||||
DisplayRegion68k_end_addr = DisplayRegion68k + DisplayRasterWidth * displayheight;
|
||||
if (my_screen.fb_type == FBTYPE_SUN2BW) /* real or emulated bwtwo */
|
||||
switch (FBattr.real_type) {
|
||||
case FBTYPE_SUN4COLOR: { /* need to clear overlay plane */
|
||||
DisplayType = SUN4COLOR;
|
||||
ColorFb = pr_open("/dev/fb");
|
||||
pr_available_plane_groups(ColorFb, sizeof(groups), groups);
|
||||
if (groups[PIXPG_OVERLAY] && groups[PIXPG_OVERLAY_ENABLE]) {
|
||||
pr_set_plane_group(ColorFb, PIXPG_OVERLAY_ENABLE);
|
||||
pr_rop(ColorFb, 0, 0, ColorFb->pr_width, ColorFb->pr_height, PIX_CLR, 0, 0, 0);
|
||||
pr_set_plane_group(ColorFb, PIXPG_8BIT_COLOR);
|
||||
}
|
||||
ColorDisplayPixrect = ColorFb;
|
||||
break;
|
||||
}
|
||||
|
||||
default: ColorDisplayPixrect = pr_open("/dev/fb"); break;
|
||||
}
|
||||
|
||||
else if (my_screen.fb_type == FBTYPE_SUN4COLOR) { /* cg3 or cg6 */
|
||||
switch (FBattr.real_type) {
|
||||
case FBTYPE_SUN3COLOR: /* cg3 */
|
||||
/* DisplayType = SUN3COLOR; */
|
||||
DisplayType = (FBattr.real_type) << 3;
|
||||
break;
|
||||
case FBTYPE_SUNFAST_COLOR: /* cg6 */
|
||||
/* DisplayType = SUNFASTCOLOR; */
|
||||
DisplayType = (FBattr.real_type) << 3;
|
||||
break;
|
||||
default: /* unknown display */ DisplayType = (FBattr.real_type) << 3; break;
|
||||
} /* end switch */
|
||||
ColorDisplayPixrect = pr_open("/dev/fb");
|
||||
} /* end else if() */
|
||||
|
||||
else
|
||||
ColorDisplayPixrect = pr_open("/dev/fb");
|
||||
DisplayRegionPixrect = mem_point(displaywidth, displayheight, 1, display_addr);
|
||||
|
||||
#ifdef DEBUG
|
||||
pr_getcolormap(ColorDisplayPixrect, 0, 2, oldred, oldgreen, oldblue);
|
||||
#endif /* DEBUG */
|
||||
DBPRINT(("Color map for color pixrect:\n 0: R: %d, G: %d, B: %d\n 1: R: %d, G: %d, B: %d\n",
|
||||
oldred[0], oldgreen[0], oldblue[0], oldred[1], oldgreen[1], oldblue[1]));
|
||||
DBPRINT(("Color depth = %d.\n", ColorDisplayPixrect->pr_depth));
|
||||
pr_putcolormap(ColorDisplayPixrect, 1, 1, &black, &black, &black);
|
||||
pr_putcolormap(ColorDisplayPixrect, 0, 1, &white, &white, &white);
|
||||
pr_putcolormap(ColorDisplayPixrect, 255, 1, &black, &black, &black);
|
||||
pr_putcolormap(ColorDisplayPixrect, (1 << ColorDisplayPixrect->pr_depth) - 1, 1, &black, &black,
|
||||
&black);
|
||||
#endif
|
||||
|
||||
DisplayLockArea.wl_rect.r_width = displaywidth;
|
||||
DisplayLockArea.wl_rect.r_height = displayheight;
|
||||
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
DisplayType = SUN2BW;
|
||||
@@ -504,25 +202,6 @@ void init_display2(DLword *display_addr, int display_max)
|
||||
DBPRINT((" length : 0x%x\n", DisplayByteSize));
|
||||
DBPRINT((" pg size: 0x%x\n", getpagesize()));
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#ifndef DISPLAYBUFFER
|
||||
mmapstat = (int)mmap(DisplayRegion68k, DisplayByteSize, PROT_READ | PROT_WRITE,
|
||||
#ifdef OS4
|
||||
MAP_FIXED |
|
||||
#endif
|
||||
MAP_SHARED,
|
||||
FrameBufferFd, 0);
|
||||
|
||||
DBPRINT(("after mmap: 0x%x\n", mmapstat));
|
||||
|
||||
if (mmapstat == -1) {
|
||||
perror("init_display: ERROR at mmap system call\n");
|
||||
exit(0);
|
||||
}
|
||||
#endif /* ifndef DISPLAYBUFFER */
|
||||
|
||||
DBPRINT(("after mem_point\n"));
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef DOS
|
||||
(currentdsp->cleardisplay)(currentdsp);
|
||||
@@ -532,11 +211,6 @@ void init_display2(DLword *display_addr, int display_max)
|
||||
|
||||
DBPRINT(("after clear_display()\n"));
|
||||
|
||||
#if defined(SUNDISPLAY) && !defined(NOPIXRECT)
|
||||
/* initialize pixrect used in pilotbitblt */
|
||||
SrcePixRect = mem_point(0, 0, 1, NULL);
|
||||
DestPixRect = mem_point(0, 0, 1, NULL);
|
||||
#endif
|
||||
|
||||
DBPRINT(("exiting init_display\n"));
|
||||
}
|
||||
@@ -549,45 +223,12 @@ void init_display2(DLword *display_addr, int display_max)
|
||||
/* */
|
||||
/************************************************************************/
|
||||
void display_before_exit() {
|
||||
#ifdef SUNDISPLAY
|
||||
union wait status;
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef TRUECOLOR
|
||||
truecolor_before_exit();
|
||||
#endif /* TRUECOLOR */
|
||||
|
||||
clear_display();
|
||||
#ifdef SUNDISPLAY
|
||||
/* win_remove( LispWindowFd ); */
|
||||
win_screendestroy(LispWindowFd);
|
||||
#ifdef KBINT
|
||||
int_io_close(LispWindowFd);
|
||||
#endif
|
||||
close(LispWindowFd);
|
||||
|
||||
if (Win_security_p) {
|
||||
switch (vfork()) {
|
||||
case -1: /* Error */ (void)fprintf(stderr, "display_before_exit: Fork failed.\n"); exit(1);
|
||||
|
||||
case 0: /* Child */
|
||||
(void)execl(SV_RELEASE, "sv_release", 0);
|
||||
/* should not return */
|
||||
(void)fprintf(stderr, "display_before_exit: exec for sv_release failed\n");
|
||||
exit(1);
|
||||
|
||||
default: /* Parent */
|
||||
/* do nothing */
|
||||
break;
|
||||
}
|
||||
(void)wait(&status);
|
||||
if (status.w_retcode != 0) {
|
||||
(void)fprintf(stderr, "display_before_raid: failed to set ownership of win devices\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#if defined(XWINDOW) || defined(DOS)
|
||||
(currentdsp->device.exit)(currentdsp);
|
||||
@@ -625,12 +266,6 @@ in_display_segment(baseaddr)
|
||||
/************************************************************************/
|
||||
|
||||
void flush_display_buffer() {
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef DISPLAYBUFFER
|
||||
pr_rop(ColorDisplayPixrect, 0, 0, displaywidth, displayheight, COPY_PIXRECT_TO_COLOR,
|
||||
DisplayRegionPixrect, 0, 0);
|
||||
#endif /* DISPLAYBUFFER */
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
(currentdsp->bitblt_to_screen)(currentdsp, DisplayRegion68k, currentdsp->Visible.x,
|
||||
@@ -662,13 +297,6 @@ void flush_display_buffer() {
|
||||
|
||||
void flush_display_region(int x, int y, int w, int h)
|
||||
{
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef DISPLAYBUFFER
|
||||
|
||||
pr_rop(ColorDisplayPixrect, x, y, w, h, COPY_PIXRECT_TO_COLOR, DisplayRegionPixrect, x, y);
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#if (defined(XWINDOW) || defined(DOS))
|
||||
TPRINT(("Enter flush_display_region x=%d, y=%d, w=%d, h=%d\n", x, y, w, h));
|
||||
@@ -712,13 +340,6 @@ void flush_display_lineregion(UNSIGNED x, DLword *ybase, UNSIGNED w, UNSIGNED h)
|
||||
{
|
||||
int y;
|
||||
y = ((DLword *)ybase - DisplayRegion68k) / DLWORD_PERLINE;
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef DISPLAYBUFFER
|
||||
|
||||
pr_rop(ColorDisplayPixrect, x, y, w, h, COPY_PIXRECT_TO_COLOR, DisplayRegionPixrect, x, y);
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#if (defined(XWINDOW) || defined(DOS))
|
||||
TPRINT(("Enter flush_display_lineregion x=%d, y=%d, w=%d, h=%d\n", x, y, w, h));
|
||||
@@ -751,9 +372,7 @@ void flush_display_ptrregion(DLword *ybase, UNSIGNED bitoffset, UNSIGNED w, UNSI
|
||||
y = baseoffset / DLWORD_PERLINE;
|
||||
x = bitoffset + (BITSPERWORD * (baseoffset - (DLWORD_PERLINE * y)));
|
||||
|
||||
#if (defined(SUNDISPLAY) && defined(DISPLAYBUFFER))
|
||||
pr_rop(ColorDisplayPixrect, x, y, w, h, COPY_PIXRECT_TO_COLOR, DisplayRegionPixrect, x, y);
|
||||
#elif (defined(XWINDOW) || defined(DOS))
|
||||
#if (defined(XWINDOW) || defined(DOS))
|
||||
TPRINT(("Enter flush_display_ptrregion\n x=%d, y=%d, w=%d, h=%d\n", x, y, w, h));
|
||||
(currentdsp->bitblt_to_screen)(currentdsp, DisplayRegion68k, x, y, w, h);
|
||||
TPRINT(("Exit flush_display_ptrregion\n"));
|
||||
|
||||
@@ -31,15 +31,6 @@
|
||||
#include <stk.h>
|
||||
#endif /* DOS */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#include <sundev/kbd.h>
|
||||
#include <sundev/kbio.h>
|
||||
#include <sunwindow/window_hs.h>
|
||||
#include <sunwindow/cms.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sunwindow/win_ioctl.h>
|
||||
#include <pixrect/pixrect_hs.h>
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
#include <X11/Xlib.h>
|
||||
@@ -76,9 +67,6 @@ extern MouseInterface currentmouse;
|
||||
extern KbdInterface currentkbd;
|
||||
extern DspInterface currentdsp;
|
||||
#endif /* DOS */
|
||||
#ifdef SUNDISPLAY
|
||||
extern struct screen LispScreen;
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
extern int LispWindowFd;
|
||||
int LispKbdFd = -1;
|
||||
@@ -88,9 +76,6 @@ int DebugKBD = NIL;
|
||||
FILE *KBlog;
|
||||
|
||||
extern fd_set LispReadFds;
|
||||
#ifdef SUNDISPLAY
|
||||
struct inputmask LispEventMask;
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
IOPAGE *IOPage68K;
|
||||
|
||||
@@ -214,33 +199,13 @@ u_char DOSLispKeyMap_101[0x80] = {
|
||||
|
||||
void init_keyboard(int flg) /* if 0 init else re-init */
|
||||
{
|
||||
#ifdef SUNDISPLAY
|
||||
int keytrans;
|
||||
#endif
|
||||
|
||||
set_kbd_iopointers();
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
if ((LispKbdFd = open(LispScreen.scr_kbdname, O_RDWR)) == -1) {
|
||||
fprintf(stderr, "can't open %s\n", LispScreen.scr_kbdname);
|
||||
exit(-1);
|
||||
}
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
if (flg == 0) { keyboardtype(LispKbdFd); }
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
keytrans = TR_UNTRANS_EVENT; /* keyboard does not encode key */
|
||||
if (ioctl(LispKbdFd, KIOCTRANS, &keytrans) == -1) {
|
||||
fprintf(stderr, "Error at ioctl errno =%d\n", errno);
|
||||
exit(-1);
|
||||
}
|
||||
close(LispKbdFd);
|
||||
#ifdef KBINT
|
||||
int_io_open(LispWindowFd); /* from init_dsp, try to prevent mouse-move-no-kbd bug */
|
||||
#endif /* KBINT */
|
||||
seteventmask(&LispEventMask);
|
||||
#elif XWINDOW
|
||||
#if XWINDOW
|
||||
init_Xevent(currentdsp);
|
||||
|
||||
#elif DOS
|
||||
@@ -262,22 +227,7 @@ void init_keyboard(int flg) /* if 0 init else re-init */
|
||||
/* ----------------------------------------------------------------*/
|
||||
|
||||
void device_before_exit() {
|
||||
#ifdef SUNDISPLAY
|
||||
int keytrans;
|
||||
|
||||
if ((LispKbdFd = open(LispScreen.scr_kbdname, O_RDWR)) == -1) {
|
||||
fprintf(stderr, "can't open %s\n", LispScreen.scr_kbdname);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
keytrans = TR_EVENT; /* keyboard encodes key */
|
||||
if (ioctl(LispKbdFd, KIOCTRANS, &keytrans) == -1) {
|
||||
fprintf(stderr, "Error at ioctl errno =%d\n", errno);
|
||||
exit(-1);
|
||||
}
|
||||
close(LispKbdFd);
|
||||
|
||||
#elif DOS
|
||||
#if DOS
|
||||
(currentmouse->device.exit)(currentmouse, currentdsp);
|
||||
(currentkbd->device.exit)(currentkbd);
|
||||
#endif /* SUNDISPLAY DOS*/
|
||||
@@ -315,24 +265,6 @@ void set_kbd_iopointers() {
|
||||
|
||||
/* ----------------------------------------------------------------*/
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
void seteventmask(struct inputmask *eventmask)
|
||||
{
|
||||
input_imnull(eventmask);
|
||||
eventmask->im_flags |= IM_ASCII | IM_NEGASCII | IM_NEGEVENT;
|
||||
|
||||
win_setinputcodebit(eventmask, MS_LEFT);
|
||||
win_setinputcodebit(eventmask, MS_MIDDLE);
|
||||
win_setinputcodebit(eventmask, MS_RIGHT);
|
||||
win_setinputcodebit(eventmask, LOC_MOVE);
|
||||
win_unsetinputcodebit(eventmask, LOC_STILL);
|
||||
win_unsetinputcodebit(eventmask, LOC_MOVEWHILEBUTDOWN);
|
||||
win_unsetinputcodebit(eventmask, LOC_WINENTER);
|
||||
win_unsetinputcodebit(eventmask, LOC_WINEXIT);
|
||||
|
||||
win_setinputmask(LispWindowFd, eventmask, eventmask, WIN_NULLLINK);
|
||||
}
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#define MIN_KEYTYPE 3
|
||||
#define KB_AS3000J (7 + MIN_KEYTYPE)
|
||||
@@ -411,7 +343,7 @@ static u_char *make_X_keymap() {
|
||||
XDisplayKeycodes(currentdsp->display_id, &minkey, &maxkey);
|
||||
codecount = maxkey + 1 - minkey;
|
||||
mapping = XGetKeyboardMapping(currentdsp->display_id, minkey, codecount, &symspercode);
|
||||
XUNLOCK;
|
||||
XUNLOCK(currentdsp);
|
||||
|
||||
for (; *key_sym_pairs != -1;) {
|
||||
int reusable = *key_sym_pairs++, code = *key_sym_pairs++, sym = *key_sym_pairs++, xcode;
|
||||
@@ -500,11 +432,6 @@ void keyboardtype(int fd)
|
||||
type = KB_X;
|
||||
#elif DOS
|
||||
type = KB_DOS;
|
||||
#elif SUNDISPLAY
|
||||
if (ioctl(fd, KIOCTYPE, &type) != 0) {
|
||||
error("keyboardtype:IOCTL(KIOCTYPE) fails (cont. w. type-3");
|
||||
type = KB_SUN3;
|
||||
} /* otherwise, type is set */
|
||||
#endif /* XWINDOW */
|
||||
} /* if end */
|
||||
else {
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifndef DOS
|
||||
@@ -138,8 +139,7 @@ void init_ifpage(int sysout_size) {
|
||||
|
||||
#ifdef BIGVM
|
||||
/* For BIGVM system, save the value in \LASTVMEMFILEPAGE for lisp's use */
|
||||
if ((LispPTR)LASTVMEMFILEPAGE_word != 0xFFFFFFFF)
|
||||
*LASTVMEMFILEPAGE_word = InterfacePage->dllastvmempage;
|
||||
*LASTVMEMFILEPAGE_word = InterfacePage->dllastvmempage;
|
||||
#endif /* BIGVM */
|
||||
|
||||
/* unfortunately, Lisp only looks at a 16 bit serial number */
|
||||
|
||||
@@ -22,11 +22,6 @@
|
||||
#include <sys/select.h>
|
||||
#endif /* DOS */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#include <sundev/kbd.h>
|
||||
#include <sundev/kbio.h>
|
||||
#include <sunwindow/window_hs.h>
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#include "lispemul.h"
|
||||
|
||||
@@ -55,9 +50,6 @@ extern DspInterface currentdsp;
|
||||
*
|
||||
****************************************************/
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
extern struct screen LispScreen;
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
#include <X11/Xlib.h>
|
||||
@@ -72,17 +64,13 @@ void KB_enable(LispPTR *args) /* args[0] : ON/OFF flag
|
||||
*/
|
||||
{
|
||||
if (args[0] == ATOM_T) {
|
||||
#ifdef SUNDISPLAY
|
||||
FD_SET(LispWindowFd, &LispReadFds);
|
||||
#elif XWINDOW
|
||||
#if XWINDOW
|
||||
enable_Xkeyboard(currentdsp);
|
||||
#elif DOS
|
||||
(currentkbd->device.enter)(currentkbd);
|
||||
#endif /* DOS */
|
||||
} else if (args[0] == NIL) {
|
||||
#ifdef SUNDISPLAY
|
||||
FD_CLR(LispWindowFd, &LispReadFds);
|
||||
#elif XWINDOW
|
||||
#if XWINDOW
|
||||
disable_Xkeyboard(currentdsp);
|
||||
#elif DOS
|
||||
(currentkbd->device.exit)(currentkbd);
|
||||
@@ -116,28 +104,7 @@ void KB_beep(LispPTR *args) /* args[0] : ON/OFF flag
|
||||
* args[1] : frequency
|
||||
*/
|
||||
{
|
||||
#ifdef SUNDISPLAY
|
||||
int keycommand;
|
||||
|
||||
/* belltime.tv_usec = args[1] & 0xffff;
|
||||
win_bell(LispWindowFd, belltime, 0);
|
||||
*/
|
||||
if ((LispKbdFd = open(LispScreen.scr_kbdname, O_RDWR)) == -1)
|
||||
fprintf(stderr, "can't open %s, errno=%d\n", LispScreen.scr_kbdname, errno);
|
||||
|
||||
if (args[0] == ATOM_T) {
|
||||
keycommand = KBD_CMD_BELL; /* Turn on the bell */
|
||||
if (ioctl(LispKbdFd, KIOCCMD, &keycommand) == -1)
|
||||
fprintf(stderr, "Error at ioctl errno =%d\n", errno);
|
||||
} else {
|
||||
keycommand = KBD_CMD_NOBELL; /* Turn off the bell */
|
||||
if (ioctl(LispKbdFd, KIOCCMD, &keycommand) == -1)
|
||||
fprintf(stderr, "Error at ioctl errno =%d\n", errno);
|
||||
}
|
||||
|
||||
close(LispKbdFd);
|
||||
|
||||
#elif XWINDOW
|
||||
#if XWINDOW
|
||||
if (args[0] == ATOM_T) beep_Xkeyboard(currentdsp);
|
||||
#elif DOS
|
||||
if (args[0] == ATOM_T) {
|
||||
|
||||
237
src/keyevent.c
237
src/keyevent.c
@@ -38,12 +38,6 @@
|
||||
void Mouse_hndlr(void); /* Fields mouse events from driver */
|
||||
/* (during servicing of mouse interrupt) */
|
||||
|
||||
#elif SUNDISPLAY
|
||||
#include <sunwindow/window_hs.h>
|
||||
#include <sunwindow/win_ioctl.h>
|
||||
#include <suntool/window.h>
|
||||
#include <ctype.h>
|
||||
#include <sundev/kbio.h>
|
||||
#endif /* DOS */
|
||||
|
||||
#include "lispemul.h"
|
||||
@@ -121,10 +115,11 @@ extern DLword *EmMouseX68K, *EmMouseY68K, *EmKbdAd068K, *EmRealUtilin68K, *EmUti
|
||||
extern DLword *EmKbdAd168K, *EmKbdAd268K, *EmKbdAd368K, *EmKbdAd468K, *EmKbdAd568K;
|
||||
extern u_char *SUNLispKeyMap;
|
||||
extern int LispWindowFd;
|
||||
extern int RS232C_Fd, RS232C_remain_data, XLocked;
|
||||
extern int RS232C_Fd, RS232C_remain_data;
|
||||
extern fd_set LispIOFds;
|
||||
fd_set LispReadFds;
|
||||
int XNeedSignal = 0; /* T if an X interrupt happened while XLOCK asserted */
|
||||
extern volatile sig_atomic_t XLocked;
|
||||
extern volatile sig_atomic_t XNeedSignal;
|
||||
|
||||
extern int LogFileFd;
|
||||
|
||||
@@ -138,10 +133,6 @@ extern DLword *DisplayRegion68k;
|
||||
static struct timeval SelectTimeout = {0, 0};
|
||||
#endif /* DOS */
|
||||
|
||||
#ifdef XWINDOW
|
||||
extern volatile sig_atomic_t Event_Req;
|
||||
#endif /* XWINDOW */
|
||||
|
||||
extern MISCSTATS *MiscStats;
|
||||
LispPTR *LASTUSERACTION68k;
|
||||
LispPTR *CLastUserActionCell68k;
|
||||
@@ -178,25 +169,6 @@ typedef struct {
|
||||
/* EmXXXX68K are already swapped, no need for GETWORD */
|
||||
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef OLD_CURSOR
|
||||
#define TrackCursor(cx, cy) \
|
||||
{ \
|
||||
*CLastUserActionCell68k = MiscStats->secondstmp; \
|
||||
*EmCursorX68K = cx; \
|
||||
*EmCursorY68K = cy; \
|
||||
}
|
||||
#else
|
||||
#define TrackCursor(cx, cy) \
|
||||
{ \
|
||||
*CLastUserActionCell68k = MiscStats->secondstmp; \
|
||||
taking_mouse_down(); \
|
||||
taking_mouse_up(cx, cy); \
|
||||
*EmCursorX68K = cx; \
|
||||
*EmCursorY68K = cy; \
|
||||
}
|
||||
#endif /* OLD_CURSOR */
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
/* commented out is some code that would also clobber
|
||||
Irq_Stk_Check & Irq_Stk_End to force
|
||||
@@ -211,7 +183,7 @@ LispPTR *MOUSECHORDTICKS68k;
|
||||
/**NEW GLOBAL***-> will be moved***/
|
||||
LispPTR *KEYBOARDEVENTQUEUE68k;
|
||||
LispPTR *KEYBUFFERING68k;
|
||||
int KBDEventFlg = NIL;
|
||||
int KBDEventFlg = 0;
|
||||
DLword *CTopKeyevent;
|
||||
|
||||
LispPTR DOBUFFEREDTRANSITION_index;
|
||||
@@ -237,20 +209,12 @@ DLword ColorCursor_savebitmap[CURSORWIDTH / COLORPIXELS_IN_DLWORD * CURSORHEIGHT
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/* G E T S I G N A L D A T A */
|
||||
/* */
|
||||
/* Handler for the SIGIO interrupt, which happens */
|
||||
/* 1. When a key transition happens */
|
||||
/* 2. On mouse moves */
|
||||
/* 3. When TCP input becomes available. */
|
||||
/* 4. When a NIT ethernet packet becomes available. */
|
||||
/* 5. When a console/log/stderr msg needs to be printed. */
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* p r o c e s s _ i o _ e v e n t s */
|
||||
/* */
|
||||
/* Periodically, or After a SIGIO interrupt which happens */
|
||||
/* 1. When TCP input becomes available. */
|
||||
/* 2. When a NIT ethernet packet becomes available. */
|
||||
/* 3. When a console/log/stderr msg needs to be printed. */
|
||||
/* */
|
||||
/* */
|
||||
/* Statics: LispReadFds A 32-bit vector with a 1 for each */
|
||||
@@ -280,65 +244,16 @@ DLword ColorCursor_savebitmap[CURSORWIDTH / COLORPIXELS_IN_DLWORD * CURSORHEIGHT
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
void getsignaldata(int sig)
|
||||
void process_io_events()
|
||||
{
|
||||
#ifndef DOS
|
||||
#ifdef SUNDISPLAY
|
||||
struct inputevent event;
|
||||
#endif /* SUNDISPLAY */
|
||||
fd_set rfds, efds;
|
||||
fd_set rfds;
|
||||
u_int iflags;
|
||||
int i;
|
||||
|
||||
#ifdef XWINDOW
|
||||
#if defined(sun)
|
||||
if (Event_Req) {
|
||||
if (!XLocked++)
|
||||
getXsignaldata(currentdsp);
|
||||
else
|
||||
XNeedSignal = 1;
|
||||
Event_Req = FALSE;
|
||||
XLocked--;
|
||||
}
|
||||
#endif
|
||||
#endif /* XWINDOW */
|
||||
|
||||
/* #ifndef KBINT */
|
||||
/* FD_COPY would be preferred but uses deprecated bcopy() on macOS. Why? */
|
||||
memcpy(&rfds, &LispReadFds, sizeof(rfds));
|
||||
memcpy(&efds, &LispReadFds, sizeof(efds));
|
||||
|
||||
/* label and ifs not needed if only keyboard on SIGIO */
|
||||
getmore:
|
||||
if (select(32, &rfds, NULL, &efds, &SelectTimeout) >= 0)
|
||||
{
|
||||
/* need to print out fd sets...
|
||||
DBPRINT(("SIGIO: fd mask(r/e) = 0x%x/0x%x.\n", rfds, efds));
|
||||
*/
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
if (LispWindowFd >= 0 && FD_ISSET(LispWindowFd, &rfds)) {
|
||||
/* #endif */
|
||||
while (input_readevent(LispWindowFd, &event) >= 0) {
|
||||
/*if(!kb_event( &event )) {goto getmore;};*/
|
||||
if ((KBDEventFlg += kb_event(&event)) > 0) {
|
||||
/* immediately request for IRQ check */
|
||||
Irq_Stk_End = Irq_Stk_Check = 0;
|
||||
}
|
||||
}
|
||||
/* #ifndef KBINT */
|
||||
}
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
if (FD_ISSET(ConnectionNumber(currentdsp->display_id), &rfds)) {
|
||||
if (!XLocked)
|
||||
getXsignaldata(currentdsp);
|
||||
else
|
||||
XNeedSignal = 1;
|
||||
}
|
||||
|
||||
#endif /* XWINDOW */
|
||||
if (select(32, &rfds, NULL, NULL, &SelectTimeout) > 0) {
|
||||
|
||||
#ifdef MAIKO_ENABLE_ETHERNET
|
||||
if (ether_fd >= 0 && FD_ISSET(ether_fd, &rfds)) { /* Raw ethernet (NIT) I/O happened, so handle it. */
|
||||
@@ -378,134 +293,8 @@ getmore:
|
||||
}
|
||||
/* #endif */
|
||||
#endif /* DOS */
|
||||
} /* end getsignaldata */
|
||||
} /* end process_io_events */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/* k b _ e v e n t */
|
||||
/* */
|
||||
/* Given an event from the kbd code, return 1 if a key transition */
|
||||
/* occurred, 0 if one didn't occur. */
|
||||
/* */
|
||||
/************************************************************************/
|
||||
extern int for_makeinit;
|
||||
|
||||
int kb_event(struct inputevent *event);
|
||||
{
|
||||
register u_int upflg;
|
||||
int kn;
|
||||
DLword w, r;
|
||||
KBEVENT *kbevent;
|
||||
|
||||
#ifdef INIT
|
||||
|
||||
/* generate some code to check if we are running as an INIT. Don't
|
||||
needlessly generate this code, and don't return if we aren't
|
||||
running with the -INIT flag turned on. --was 2/7/89 */
|
||||
|
||||
if (for_makeinit) { return (0); };
|
||||
|
||||
#endif
|
||||
|
||||
upflg = event_is_up(event);
|
||||
|
||||
#ifdef SHOWKEYSTROKES
|
||||
printf("Key # %d, upflg %d.\n", (unsigned short)event->ie_code, upflg);
|
||||
#endif
|
||||
|
||||
switch (((unsigned short)event->ie_code)) {
|
||||
case LOC_MOVE:
|
||||
#ifndef OLD_CURSOR
|
||||
if (!ScreenLocked)
|
||||
#endif
|
||||
{
|
||||
ScreenLocked = T;
|
||||
MouseMove(event->ie_locx, event->ie_locy);
|
||||
TrackCursor(event->ie_locx, event->ie_locy);
|
||||
ScreenLocked = NIL;
|
||||
}
|
||||
return (0);
|
||||
|
||||
case MS_LEFT: /*mouse_button( MOUSE_LEFT, upflg );*/
|
||||
PUTBASEBIT68K(EmRealUtilin68K, MOUSE_LEFT, upflg);
|
||||
break;
|
||||
|
||||
case MS_MIDDLE: /*mouse_button( MOUSE_MIDDLE, upflg );*/
|
||||
PUTBASEBIT68K(EmRealUtilin68K, MOUSE_MIDDLE, upflg);
|
||||
break;
|
||||
|
||||
case MS_RIGHT: /*mouse_button( MOUSE_RIGHT, upflg );*/
|
||||
PUTBASEBIT68K(EmRealUtilin68K, MOUSE_RIGHT, upflg);
|
||||
break;
|
||||
|
||||
default: /* keystroke */
|
||||
if ((kn = SUNLispKeyMap[((unsigned short)event->ie_code)]) < 255)
|
||||
kb_trans(kn, upflg);
|
||||
else
|
||||
printf("kb_event: unknown key number=%d\n", event->ie_code);
|
||||
|
||||
break;
|
||||
};
|
||||
{
|
||||
do_ring:
|
||||
/* Emxxx do not use GETWORD */
|
||||
if (((*EmKbdAd268K) & 2113) == 0) { /*Ctrl-shift-NEXT*/
|
||||
error("****** EMERGENCY Interrupt ******");
|
||||
(*EmKbdAd268K) = KB_ALLUP; /*reset*/
|
||||
((RING *)CTopKeyevent)->read = 0; /* reset queue */
|
||||
((RING *)CTopKeyevent)->write = MINKEYEVENT;
|
||||
/*return(0);*/
|
||||
} else if (((*EmKbdAd268K) & 2114) == 0) { /* Ctrl-Shift-DEL */
|
||||
(*EmKbdAd268K) = KB_ALLUP; /*reset*/
|
||||
URaid_req = T;
|
||||
((RING *)CTopKeyevent)->read = 0; /* reset queue */
|
||||
((RING *)CTopKeyevent)->write = MINKEYEVENT;
|
||||
|
||||
/*return(0);*/
|
||||
}
|
||||
|
||||
#ifdef OS4_TYPE4BUG
|
||||
else if (((*EmKbdAd268K) & 2120) == 0) { /* Ctrl-Shift-Return */
|
||||
error("****** EMERGENCY Interrupt ******");
|
||||
(*EmKbdAd268K) = KB_ALLUP; /*reset*/
|
||||
((RING *)CTopKeyevent)->read = 0; /* reset queue */
|
||||
((RING *)CTopKeyevent)->write = MINKEYEVENT;
|
||||
/*return(0);*/
|
||||
}
|
||||
#endif
|
||||
|
||||
r = RING_READ(CTopKeyevent);
|
||||
w = RING_WRITE(CTopKeyevent);
|
||||
|
||||
if (r == w) goto KBnext; /* event queue FULL */
|
||||
|
||||
kbevent = (KBEVENT *)(CTopKeyevent + w);
|
||||
|
||||
/* RCLK(kbevent->time); */
|
||||
|
||||
kbevent->W0 = (*EmKbdAd068K); /* Emxxxx do not use GETWORD */
|
||||
kbevent->W1 = (*EmKbdAd168K);
|
||||
kbevent->W2 = (*EmKbdAd268K);
|
||||
kbevent->W3 = (*EmKbdAd368K);
|
||||
kbevent->W4 = (*EmKbdAd468K);
|
||||
kbevent->W5 = (*EmKbdAd568K);
|
||||
kbevent->WU = (*EmRealUtilin68K);
|
||||
|
||||
if (r == 0) /* Queue was empty */
|
||||
((RING *)CTopKeyevent)->read = w;
|
||||
if (w >= MAXKEYEVENT)
|
||||
((RING *)CTopKeyevent)->write = MINKEYEVENT;
|
||||
else
|
||||
((RING *)CTopKeyevent)->write = w + KEYEVENTSIZE;
|
||||
|
||||
KBnext:
|
||||
if (*KEYBUFFERING68k == NIL) *KEYBUFFERING68k = ATOM_T;
|
||||
|
||||
} /* if *EmRealUtilin68K end */
|
||||
return (1);
|
||||
}
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
|
||||
@@ -105,7 +105,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
/* JRB - call fork_Unix here, while we're REALLY small, unless -NF is
|
||||
specified, of course... */
|
||||
for (i = 0; i < argc; i++)
|
||||
for (i = 1; i < argc; i++)
|
||||
if (!strcmp(argv[i], "-NF")) break;
|
||||
if (i == argc) /* -NF not in arguments */
|
||||
fork_Unix();
|
||||
@@ -181,7 +181,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
/* JRB - call fork_Unix here, while we're REALLY small, unless -NF is
|
||||
specified, of course... */
|
||||
for (i = 0; i < argc; i++)
|
||||
for (i = 1; i < argc; i++)
|
||||
if (!strcmp(argv[i], "-NF")) break;
|
||||
if (i == argc) /* -NF not in arguments */
|
||||
fork_Unix();
|
||||
|
||||
@@ -214,7 +214,7 @@ int main(int argc, char *argv[]) {
|
||||
ether_fd = -1;
|
||||
/* exit(); */
|
||||
}
|
||||
seteuid(getuid());
|
||||
setuid(getuid());
|
||||
}
|
||||
|
||||
/* OK, right here do other stuff like scan args */
|
||||
|
||||
@@ -30,9 +30,6 @@
|
||||
#include "byteswapdefs.h"
|
||||
#include "initdspdefs.h"
|
||||
|
||||
#ifdef GCC386
|
||||
#include "inlnPS2.h"
|
||||
#endif /* GCC386 */
|
||||
|
||||
#define IFPAGE_ADDRESS 512
|
||||
#define DEFAULT_MAX_SYSOUTSIZE 64 /* in Mbyte */
|
||||
|
||||
@@ -12,15 +12,6 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(COLOR) && !defined(NOPIXRECT)
|
||||
#include <sunwindow/window_hs.h>
|
||||
#include <sunwindow/cms.h>
|
||||
#include <sunwindow/win_ioctl.h>
|
||||
#include <pixrect/pixrect_hs.h>
|
||||
#include <sun/fbio.h>
|
||||
#include <pixrect/pr_planegroups.h>
|
||||
#include <sys/mman.h>
|
||||
#endif /* COLOR && !NOPIXRECT */
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
@@ -482,9 +482,6 @@ extern struct cursor CurrentCursor;
|
||||
void flip_cursorbar(int n)
|
||||
{
|
||||
GETWORD(EmCursorBitMap68K + n) = ~(GETWORD(EmCursorBitMap68K + n));
|
||||
#ifdef SUNDISPLAY
|
||||
win_setcursor(LispWindowFd, &CurrentCursor);
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
/* JDS 011213 When using current_hot_y, remember fn does 15-it! */
|
||||
|
||||
158
src/main.c
158
src/main.c
@@ -75,7 +75,6 @@
|
||||
DLword *Lisp_world; /* lispworld */
|
||||
|
||||
/********** 68k address for Lisp Space **********/
|
||||
DLword *Atomspace;
|
||||
DLword *Stackspace;
|
||||
DLword *Plistspace;
|
||||
DLword *DTDspace;
|
||||
@@ -85,8 +84,6 @@ DLword *Pnamespace;
|
||||
DLword *AtomSpace;
|
||||
DLword *Defspace;
|
||||
DLword *Valspace;
|
||||
DLword *Spospspace;
|
||||
DLword *Snegspace;
|
||||
|
||||
/********** For Virtual Memory Management **********/
|
||||
#ifdef BIGVM
|
||||
@@ -124,7 +121,6 @@ DLword *HTcoll;
|
||||
DLword *DisplayRegion;
|
||||
int DisplayInitialized = NIL;
|
||||
|
||||
DLword *Arrayspace;
|
||||
DLword *MDS_space_bottom;
|
||||
DLword *PnCharspace;
|
||||
struct dtd *ListpDTD;
|
||||
@@ -210,7 +206,8 @@ int UnixPipeIn;
|
||||
int UnixPipeOut;
|
||||
int UnixPID;
|
||||
int please_fork = 1;
|
||||
|
||||
/* disable X11 scroll bars if requested */
|
||||
int noscroll = 0;
|
||||
/*** STACK handle staff(Takeshi) **/
|
||||
LispPTR *STACKOVERFLOW_word;
|
||||
LispPTR *GuardStackAddr_word;
|
||||
@@ -239,10 +236,6 @@ int display_max = 65536 * 16 * 2;
|
||||
/* diagnostic flag for sysout dumping */
|
||||
extern int maxpages;
|
||||
|
||||
/** For call makepathname inside main() **/
|
||||
extern int *Lisp_errno;
|
||||
extern int Dummy_errno; /* If errno cell is not provided by Lisp, dummy_errno is used. */
|
||||
|
||||
char sysout_name[MAXPATHLEN]; /* Set by read_Xoption, in the X version. */
|
||||
int sysout_size = 0; /* ditto */
|
||||
|
||||
@@ -312,6 +305,7 @@ int main(int argc, char *argv[])
|
||||
char *envname;
|
||||
extern int TIMER_INTERVAL;
|
||||
extern fd_set LispReadFds;
|
||||
int tmpint;
|
||||
#ifdef MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE
|
||||
if (dld_find_executable(argv[0]) == 0) {
|
||||
perror("Name of executable not found.");
|
||||
@@ -338,9 +332,6 @@ int main(int argc, char *argv[])
|
||||
Barf and print the command line if tha fails
|
||||
*/
|
||||
|
||||
/* For call makepathname */
|
||||
Lisp_errno = &Dummy_errno;
|
||||
|
||||
i = 1;
|
||||
|
||||
if (argv[i] && ((strcmp(argv[i], "-info") == 0) || (strcmp(argv[i], "-INFO") == 0))) {
|
||||
@@ -360,13 +351,18 @@ int main(int argc, char *argv[])
|
||||
strncpy(sysout_name, envname, MAXPATHLEN);
|
||||
} else if ((envname = getenv("LDESOURCESYSOUT")) != NULL)
|
||||
strncpy(sysout_name, envname, MAXPATHLEN);
|
||||
else {
|
||||
#ifdef DOS
|
||||
else if (!makepathname("lisp.vm", sysout_name)
|
||||
strncpy(sysout_name, "lisp.vm", MAXPATHLEN);
|
||||
#else
|
||||
else if (!makepathname("~/lisp.virtualmem", sysout_name)
|
||||
if ((envname = getenv("HOME")) != NULL) {
|
||||
strncpy(sysout_name, envname, MAXPATHLEN);
|
||||
strncat(sysout_name, "/lisp.virtualmem", MAXPATHLEN - 17);
|
||||
}
|
||||
#endif /* DOS */
|
||||
|| access(sysout_name, R_OK)) {
|
||||
fprintf(stderr, "Couldn't find a sysout to run;\n");
|
||||
}
|
||||
if (access(sysout_name, R_OK)) {
|
||||
perror("Couldn't find a sysout to run");
|
||||
fprintf(stderr, "%s", helpstring);
|
||||
exit(1);
|
||||
}
|
||||
@@ -377,18 +373,32 @@ int main(int argc, char *argv[])
|
||||
/* -t and -m are undocumented and somewhat dangerous... */
|
||||
|
||||
if (!strcmp(argv[i], "-t")) { /**** timer interval ****/
|
||||
if (argc > ++i)
|
||||
TIMER_INTERVAL = atoi(argv[i]);
|
||||
else {
|
||||
if (argc > ++i) {
|
||||
errno = 0;
|
||||
tmpint = strtol(argv[i], (char **)NULL, 10);
|
||||
if (errno == 0 && tmpint > 0) {
|
||||
TIMER_INTERVAL = tmpint;
|
||||
} else {
|
||||
fprintf(stderr, "Bad value for -t (integer > 0)\n");
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Missing argument after -t\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
else if (!strcmp(argv[i], "-m")) { /**** sysout size ****/
|
||||
if (argc > ++i)
|
||||
sysout_size = atoi(argv[i]);
|
||||
else {
|
||||
if (argc > ++i) {
|
||||
errno = 0;
|
||||
tmpint = strtol(argv[i], (char **)NULL, 10);
|
||||
if (errno == 0 && tmpint > 0) {
|
||||
sysout_size = tmpint;
|
||||
} else {
|
||||
fprintf(stderr, "Bad value for -m (integer > 0)\n");
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Missing argument after -m\n");
|
||||
exit(1);
|
||||
}
|
||||
@@ -453,9 +463,16 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
/* diagnostic flag for big vmem write() calls */
|
||||
else if (!strcmp(argv[i], "-xpages")) {
|
||||
if (argc > ++i)
|
||||
maxpages = atoi(argv[i]);
|
||||
else {
|
||||
if (argc > ++i) {
|
||||
errno = 0;
|
||||
tmpint = strtol(argv[i], (char **)NULL, 10);
|
||||
if (errno == 0 && tmpint > 0) {
|
||||
maxpages = tmpint;
|
||||
} else {
|
||||
fprintf(stderr, "Bad value for -xpages (integer > 0)\n");
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Missing argument after -xpages\n");
|
||||
exit(1);
|
||||
}
|
||||
@@ -467,8 +484,11 @@ int main(int argc, char *argv[])
|
||||
probemouse(); /* See if the mouse is connected. */
|
||||
#else
|
||||
if (getuid() != geteuid()) {
|
||||
fprintf(stderr, "Effective user is not real user. Setting euid to uid.\n");
|
||||
seteuid(getuid());
|
||||
fprintf(stderr, "Effective user is not real user. Resetting uid\n");
|
||||
if (setuid(getuid()) == -1) {
|
||||
fprintf(stderr, "Unable to reset user id to real user id\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
#endif /* DOS */
|
||||
|
||||
@@ -517,9 +537,6 @@ int main(int argc, char *argv[])
|
||||
|
||||
/* Get OS message to ~/lisp.log and print the message to prompt window */
|
||||
if (!for_makeinit) {
|
||||
#ifdef SUNDISPLAY
|
||||
mess_init();
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
init_keyboard(0); /* can't turn on the keyboard yet or you will die
|
||||
in makeinit. Pilotbitblt will turn it on if
|
||||
@@ -595,87 +612,6 @@ void start_lisp() {
|
||||
dispatch();
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/* m a k e p a t h n a m e */
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
int makepathname(char *src, char *dst)
|
||||
{
|
||||
register int len;
|
||||
register char *base, *cp;
|
||||
register struct passwd *pwd;
|
||||
char name[MAXPATHLEN];
|
||||
|
||||
base = src;
|
||||
switch (*base) {
|
||||
case '.':
|
||||
if (getcwd(dst, MAXPATHLEN) == 0)
|
||||
{ /* set working directory */
|
||||
*Lisp_errno = errno;
|
||||
return (0);
|
||||
}
|
||||
switch (*(base + 1)) {
|
||||
case '.':
|
||||
if (*(base + 2) == '/') { /* Now, base == "../xxxx" */
|
||||
cp = (char *)strrchr(dst, '/');
|
||||
if (cp == 0) return (0);
|
||||
*cp = '\0';
|
||||
strcat(dst, base + 2);
|
||||
return (1);
|
||||
} else
|
||||
return (0);
|
||||
case '/':
|
||||
/* Now, base == "./xxx" */
|
||||
strcat(dst, base + 1);
|
||||
return (1);
|
||||
default: return (0);
|
||||
}
|
||||
case '~':
|
||||
ERRSETJMP(0);
|
||||
if (*(base + 1) == '/') {
|
||||
/* path is "~/foo" */
|
||||
#ifdef DOS
|
||||
pwd = 0;
|
||||
#else
|
||||
TIMEOUT(pwd = getpwuid(getuid()));
|
||||
#endif /* DOS */
|
||||
if (pwd == NULL) {
|
||||
*Lisp_errno = errno;
|
||||
return (0);
|
||||
}
|
||||
#ifndef DOS
|
||||
sprintf(dst, "%s%s", pwd->pw_dir, base + 1);
|
||||
#endif
|
||||
return (1);
|
||||
} else {
|
||||
/* path is "~foo/" */
|
||||
if ((cp = (char *)strchr(base + 1, '/')) == 0)
|
||||
return (0);
|
||||
else {
|
||||
len = (UNSIGNED)cp - (UNSIGNED)base - 1;
|
||||
strncpy(name, base + 1, len);
|
||||
name[len] = '\0';
|
||||
#ifndef DOS
|
||||
TIMEOUT(pwd = getpwnam(name));
|
||||
#endif /* DOS */
|
||||
if (pwd == NULL) {
|
||||
*Lisp_errno = errno;
|
||||
return (0);
|
||||
}
|
||||
#ifndef DOS
|
||||
sprintf(dst, "%s%s", pwd->pw_dir, cp);
|
||||
#endif /* DOS */
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
default: strcpy(dst, src); return (1);
|
||||
}
|
||||
}
|
||||
|
||||
void print_info_lines() {
|
||||
#if (RELEASE == 200)
|
||||
printf("Emulator for Medley release 2.0\n");
|
||||
|
||||
21
src/misc7.c
21
src/misc7.c
@@ -32,15 +32,6 @@
|
||||
#include "bbtsubdefs.h"
|
||||
#include "initdspdefs.h"
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#include <sunwindow/window_hs.h>
|
||||
#include <sunwindow/win_ioctl.h>
|
||||
|
||||
#include <suntool/sunview.h>
|
||||
#include <signal.h>
|
||||
#include <sunwindow/cms_mono.h>
|
||||
#include <suntool/canvas.h>
|
||||
#endif
|
||||
|
||||
/*************************************************/
|
||||
/* Possible operation fields for FBITMAPBIT */
|
||||
@@ -78,9 +69,6 @@ LispPTR N_OP_misc7(LispPTR arg1, LispPTR arg2, LispPTR arg3, LispPTR arg4, LispP
|
||||
DBPRINT(("MISC7 args OK.\n"));
|
||||
|
||||
displayflg = n_new_cursorin(base, x, (heightminus1 - y), 1, 1);
|
||||
#ifdef SUNDISPLAY
|
||||
if (displayflg) HideCursor;
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
/* Bitmaps use a positive integer coordinate system with the lower left
|
||||
corner pixel at coordinate (0, 0). Storage is allocated in 16-bit words
|
||||
@@ -100,15 +88,6 @@ LispPTR N_OP_misc7(LispPTR arg1, LispPTR arg2, LispPTR arg3, LispPTR arg4, LispP
|
||||
default: GETWORDBASEWORD(base, offset) = bmdata | bmmask;
|
||||
};
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef DISPLAYBUFFER
|
||||
if (in_display_segment(base)) {
|
||||
/* NB: base + offset doesn't need WORDPTR() wrapper */
|
||||
flush_display_ptrregion(base + offset, 0, 16, 1);
|
||||
}
|
||||
#endif
|
||||
if (displayflg) ShowCursor;
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef XWINDOW
|
||||
if (in_display_segment(base)) {
|
||||
|
||||
121
src/mkatom.c
121
src/mkatom.c
@@ -27,7 +27,6 @@
|
||||
compute_hash
|
||||
create_symbol
|
||||
compare_chars
|
||||
parse_number
|
||||
*/
|
||||
/**********************************************************************/
|
||||
|
||||
@@ -248,10 +247,11 @@ LispPTR compare_lisp_chars(register const char *char1, register const char *char
|
||||
/*
|
||||
Func name : make_atom
|
||||
|
||||
If the atom already existed then return
|
||||
else create new atom . Returns the Atom's index.
|
||||
Look up the atom index of an existing atom, or return 0xFFFFFFFF
|
||||
|
||||
This function does not handle FAT pname's.
|
||||
This function is a subset of \MKATOM (in LLBASIC), but only handles
|
||||
thin text atom names (no numbers, no 2-byte pnames).
|
||||
It MUST return the same atom index number as \MKATOM
|
||||
|
||||
Date : January 29, 1987
|
||||
Edited by : Takeshi Shimizu
|
||||
@@ -264,10 +264,8 @@ LispPTR compare_lisp_chars(register const char *char1, register const char *char
|
||||
*/
|
||||
/**********************************************************************/
|
||||
|
||||
LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int non_numericp)
|
||||
/* if it is NIL then these chars are treated as NUMBER */
|
||||
LispPTR make_atom(const char *char_base, DLword offset, DLword length)
|
||||
{
|
||||
extern DLword *Spospspace;
|
||||
extern DLword *AtomHT;
|
||||
extern DLword *Pnamespace;
|
||||
extern DLword *AtomSpace;
|
||||
@@ -282,41 +280,34 @@ LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int
|
||||
unsigned short first_char;
|
||||
|
||||
#ifdef TRACE2
|
||||
printf("TRACE: make_atom( %s , offset= %d, len= %d, non_numericp = %d)\n", char_base, offset,
|
||||
length, non_numericp);
|
||||
printf("TRACE: make_atom( %s , offset= %d, len= %d)\n", char_base, offset, length);
|
||||
#endif
|
||||
|
||||
first_char = (*(char_base + offset)) & 0xff;
|
||||
if (length != 0) {
|
||||
if (length == 1) /* one char. atoms */
|
||||
{
|
||||
if (first_char > 57) /* greater than '9 */
|
||||
return ((LispPTR)(ATOMoffset + (first_char - 10)));
|
||||
else if (first_char > 47) /* between '0 to '9 */
|
||||
return ((LispPTR)(S_POSITIVE + (first_char - 48)));
|
||||
/* fixed S_... mar-27-87 take */
|
||||
else /* other one char. atoms */
|
||||
return ((LispPTR)(ATOMoffset + first_char));
|
||||
} /* if(length==1.. end */
|
||||
else if ((non_numericp == NIL) && (first_char <= '9'))
|
||||
/* more than 10 arithmetic aon + - mixed atom process */
|
||||
{
|
||||
if ((hash_entry = parse_number(char_base + offset, length)) != 0)
|
||||
return ((LispPTR)hash_entry); /* if NIL that means THE ATOM is +- mixed litatom */
|
||||
/* 15 may 87 take */
|
||||
}
|
||||
|
||||
hash = compute_hash(char_base, offset, length);
|
||||
|
||||
} /* if(lengt.. end */
|
||||
else {
|
||||
switch (length) {
|
||||
case 0:
|
||||
/* the zero-length atom has hashcode 0 */
|
||||
hash = 0;
|
||||
first_char = 255;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
/* One-character atoms live in well known places, no need to hash */
|
||||
if (first_char > '9')
|
||||
return ((LispPTR)(ATOMoffset + (first_char - 10)));
|
||||
if (first_char >= '0' ) /* 0..9 */
|
||||
return ((LispPTR)(S_POSITIVE + (first_char - '0')));
|
||||
/* other one character atoms */
|
||||
return ((LispPTR)(ATOMoffset + first_char));
|
||||
|
||||
default:
|
||||
hash = compute_hash(char_base, offset, length);
|
||||
break;
|
||||
}
|
||||
|
||||
/* This point corresponds with LP in Lisp source */
|
||||
|
||||
/* following for loop never exits until it finds new hash entry or same atom */
|
||||
/* following for loop does not exit until it finds new hash entry or same atom */
|
||||
for (reprobe = Atom_reprobe(hash, first_char); (hash_entry = GETWORD(AtomHT + hash)) != 0;
|
||||
hash = ((hash + reprobe) & 0xffff)) {
|
||||
atom_index = hash_entry - 1;
|
||||
@@ -327,7 +318,7 @@ LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int
|
||||
if ((length == GETBYTE(pname_base)) &&
|
||||
(compare_chars(++pname_base, char_base + offset, length) == T)) {
|
||||
DBPRINT(("FOUND the atom. \n"));
|
||||
return (atom_index); /* find already existed atom */
|
||||
return (atom_index); /* found existing atom */
|
||||
}
|
||||
DBPRINT(("HASH doesn't hit. reprobe!\n"));
|
||||
|
||||
@@ -338,65 +329,3 @@ LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int
|
||||
return (0xffffffff);
|
||||
/** Don't create newatom now **/
|
||||
} /* make_atom end */
|
||||
|
||||
/*********************************************************************/
|
||||
/*
|
||||
Func name : parse_number
|
||||
|
||||
Desc : It can treat -65534 to 65535 integer
|
||||
Returns SMALLP PTR
|
||||
Date : 1,May 1987 Take
|
||||
15 May 87 take
|
||||
*/
|
||||
/*********************************************************************/
|
||||
|
||||
/* Assume this func. should be called with C string in "char_base" */
|
||||
LispPTR parse_number(const char *char_base, short int length) {
|
||||
register LispPTR sign_mask;
|
||||
register LispPTR val;
|
||||
register int radix;
|
||||
register int *cell68k;
|
||||
|
||||
#ifdef TRACE2
|
||||
printf("TRACE: parse_number()\n");
|
||||
#endif
|
||||
|
||||
/* Check for Radix 8(Q) postfixed ?? */
|
||||
if ((*(char_base + (length - 1))) == 'Q') {
|
||||
radix = 8;
|
||||
length--;
|
||||
} else
|
||||
radix = 10;
|
||||
|
||||
/* Check for Sign */
|
||||
sign_mask = S_POSITIVE;
|
||||
|
||||
if ((*(char_base) == '+') || (*(char_base) == '-')) {
|
||||
sign_mask = ((*char_base++) == '+') ? S_POSITIVE : S_NEGATIVE;
|
||||
length--;
|
||||
}
|
||||
|
||||
for (val = 0; length > 0; length--) {
|
||||
if ((((*char_base)) < '0') || ('9' < ((*char_base)))) return (NIL);
|
||||
val = radix * val + (*char_base++) - '0';
|
||||
}
|
||||
|
||||
if (val > 0xffffffff) error("parse_number : Overflow ...exceeded range of FIXP");
|
||||
|
||||
if ((sign_mask == S_POSITIVE) && (val > 0xffff)) {
|
||||
cell68k = (int *)createcell68k(TYPE_FIXP);
|
||||
*cell68k = val;
|
||||
return (LADDR_from_68k(cell68k));
|
||||
} else if ((sign_mask == S_NEGATIVE) && (val > 0xffff)) {
|
||||
cell68k = (int *)createcell68k(TYPE_FIXP);
|
||||
*cell68k = ~val + 1;
|
||||
return (LADDR_from_68k(cell68k));
|
||||
}
|
||||
|
||||
else if (sign_mask == S_NEGATIVE)
|
||||
return (sign_mask | (~((DLword)val) + 1));
|
||||
else {
|
||||
return (sign_mask | val);
|
||||
}
|
||||
}
|
||||
/* end parse_number */
|
||||
|
||||
45
src/mkcell.c
45
src/mkcell.c
@@ -41,6 +41,9 @@
|
||||
#include "allocmdsdefs.h"
|
||||
#include "commondefs.h"
|
||||
#include "gchtfinddefs.h"
|
||||
#ifdef DTDDEBUG
|
||||
#include "testtooldefs.h"
|
||||
#endif
|
||||
|
||||
static LispPTR oldoldfree;
|
||||
static LispPTR oldfree;
|
||||
@@ -155,45 +158,3 @@ retry:
|
||||
}
|
||||
|
||||
} /* createcell68k end */
|
||||
|
||||
/**********************************************************/
|
||||
/* Create a Cell of Specified Type & Set to given Value */
|
||||
/* Works with 32 bit typed values only. */
|
||||
/* (Initially used only by native code) */
|
||||
/**********************************************************/
|
||||
|
||||
LispPTR Create_n_Set_Cell(unsigned int type, LispPTR value) {
|
||||
register struct dtd *dtd68k;
|
||||
register DLword *ptr, *lastptr;
|
||||
register LispPTR newcell;
|
||||
|
||||
dtd68k = (struct dtd *)GetDTD(type);
|
||||
|
||||
if (dtd68k->dtd_size == 0) error("createcell : Attempt to create a cell not declared yet");
|
||||
|
||||
retry:
|
||||
if ((newcell = (dtd68k->dtd_free & POINTERMASK)) != NIL) {
|
||||
ptr = Addr68k_from_LADDR(newcell);
|
||||
|
||||
/* replace dtd_free with newcell's top DLword (it may keep next chain)*/
|
||||
|
||||
dtd68k->dtd_free = (*((LispPTR *)ptr)) & POINTERMASK;
|
||||
dtd68k->dtd_oldcnt++;
|
||||
if (dtd68k->dtd_free & 0x8000000) error("bad entry on free chain.");
|
||||
|
||||
/* clear 0 */
|
||||
for (lastptr = ptr + dtd68k->dtd_size; ptr != lastptr; ptr++) { GETWORD(ptr) = 0; }
|
||||
|
||||
/* IncAllocCnt(1); */
|
||||
GCLOOKUP(newcell, DELREF);
|
||||
(*((LispPTR *)Addr68k_from_LADDR(newcell))) = value;
|
||||
return (newcell);
|
||||
|
||||
} else {
|
||||
dtd68k->dtd_free = initmdspage(alloc_mdspage(dtd68k->dtd_typeentry), dtd68k->dtd_size, NIL);
|
||||
if (dtd68k->dtd_free & 0x8000000) error("bad entry on free chain.");
|
||||
|
||||
goto retry;
|
||||
}
|
||||
|
||||
} /* createcell68k end */
|
||||
|
||||
@@ -28,14 +28,12 @@
|
||||
#include "lsptypes.h"
|
||||
#include "opcodes.h"
|
||||
#include "cell.h"
|
||||
#include "byteswapdefs.h"
|
||||
|
||||
#include "mvsdefs.h"
|
||||
#include "car-cdrdefs.h"
|
||||
#include "conspagedefs.h"
|
||||
|
||||
#ifdef GCC386
|
||||
#include "inlnPS2.h"
|
||||
#endif /* GCC386 */
|
||||
|
||||
/* to optionally swap the fnhead field of a frame */
|
||||
#ifdef BIGVM
|
||||
|
||||
@@ -168,7 +168,8 @@ void contextsw(register DLword fxnum, register DLword bytenum, register DLword f
|
||||
CHECKFX;
|
||||
if (EndSTKP < CurrentStackPTR) error("contextsw:Illegal ESP");
|
||||
#endif
|
||||
FastRetCALL return;
|
||||
FastRetCALL;
|
||||
return;
|
||||
}
|
||||
|
||||
} /* end contextsw */
|
||||
|
||||
@@ -253,7 +253,7 @@ rs232c_read() {
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* SIGIO handler getsignaldata and the successive
|
||||
* SIGIO handler, process_io_events, and the successive
|
||||
* rs232c_read has been called before Lisp prepares
|
||||
* the next buffer. Turn on RS232C_remain_data to
|
||||
* specify to read the remaining data after.
|
||||
|
||||
@@ -99,7 +99,9 @@ int main(int argc, char **argv) {
|
||||
printf("setsysout version sysout-name\n");
|
||||
return (-1);
|
||||
}
|
||||
if ((version = atoi(argv[1])) == 0) {
|
||||
errno = 0;
|
||||
version = (int)strtol(argv[1], (char **)NULL, 10);
|
||||
if (errno || version <= 0) {
|
||||
printf("version must be an integer > 0.\n");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#include "conspagedefs.h"
|
||||
#include "gcfinaldefs.h"
|
||||
#include "gchtfinddefs.h"
|
||||
#include "mkatomdefs.h"
|
||||
#include "testtooldefs.h"
|
||||
|
||||
#define MINARRAYBLOCKSIZE 4
|
||||
#define GUARDVMEMFULL 500
|
||||
@@ -374,7 +374,7 @@ LispPTR newpage(LispPTR base) {
|
||||
} else if (InterfacePage->key == IFPVALID_KEY) {
|
||||
*VMEM_FULL_STATE_word = ATOM_T;
|
||||
} else
|
||||
*VMEM_FULL_STATE_word = make_atom("DIRTY", 0, 5, 0);
|
||||
*VMEM_FULL_STATE_word = MAKEATOM("DIRTY");
|
||||
}
|
||||
|
||||
return (base);
|
||||
|
||||
50
src/subr.c
50
src/subr.c
@@ -29,6 +29,7 @@
|
||||
/***********************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include "lispemul.h"
|
||||
#include "address.h"
|
||||
#include "adr68k.h"
|
||||
@@ -62,6 +63,9 @@
|
||||
#include "unixcommdefs.h"
|
||||
#include "uutilsdefs.h"
|
||||
#include "vmemsavedefs.h"
|
||||
#ifdef MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE
|
||||
#include "foreigndefs.h"
|
||||
#endif
|
||||
|
||||
extern LispPTR *PENDINGINTERRUPT68k;
|
||||
|
||||
@@ -336,17 +340,17 @@ void OP_subrcall(int subr_no, int argnum) {
|
||||
C_slowbltchar(args);
|
||||
break;
|
||||
|
||||
case 0215:
|
||||
case sb_UNCOLORIZE_BITMAP:
|
||||
POP_SUBR_ARGS;
|
||||
Uncolorize_Bitmap(args);
|
||||
break;
|
||||
|
||||
case 0216:
|
||||
case sb_COLORIZE_BITMAP:
|
||||
POP_SUBR_ARGS;
|
||||
Colorize_Bitmap(args);
|
||||
break;
|
||||
|
||||
case 0217:
|
||||
case sb_COLOR_8BPPDRAWLINE:
|
||||
POP_SUBR_ARGS;
|
||||
Draw_8BppColorLine(args);
|
||||
break;
|
||||
@@ -480,18 +484,28 @@ void OP_subrcall(int subr_no, int argnum) {
|
||||
|
||||
case sb_GET_NATIVE_ADDR_FROM_LISP_PTR:
|
||||
POP_SUBR_ARGS;
|
||||
/* XXX: this WILL NOT WORK if Lisp memory is allocated outside the low 4GB */
|
||||
/* not supported since native addresses can't be represented as
|
||||
a Lisp FIXP
|
||||
ARITH_SWITCH(Addr68k_from_LADDR(args[0]), TopOfStack);
|
||||
*/
|
||||
TopOfStack = NIL_PTR;
|
||||
break;
|
||||
|
||||
case sb_GET_LISP_PTR_FROM_NATIVE_ADDR:
|
||||
POP_SUBR_ARGS;
|
||||
/* not supported since native addresses can't be represented as
|
||||
a Lisp FIXP
|
||||
|
||||
{
|
||||
register UNSIGNED iarg;
|
||||
N_GETNUMBER(args[0], iarg, ret_nil);
|
||||
ARITH_SWITCH(LADDR_from_68k(iarg), TopOfStack);
|
||||
break;
|
||||
};
|
||||
|
||||
*/
|
||||
TopOfStack = NIL_PTR;
|
||||
break;
|
||||
case sb_DSK_GETFILENAME:
|
||||
POP_SUBR_ARGS;
|
||||
TopOfStack = DSK_getfilename(args);
|
||||
@@ -669,7 +683,7 @@ void OP_subrcall(int subr_no, int argnum) {
|
||||
TopOfStack = with_symbol(args[0], args[1], args[2], args[3], args[4], args[5]);
|
||||
break;
|
||||
|
||||
case 0222: /* Cause an interrupt to occur. Used by */
|
||||
case sb_CAUSE_INTERRUPT: /* Cause an interrupt to occur. Used by */
|
||||
/* Lisp INTERRUPTED to re-set an interrupt */
|
||||
/* when it's uninterruptible. */
|
||||
POP_SUBR_ARGS;
|
||||
@@ -682,7 +696,7 @@ void OP_subrcall(int subr_no, int argnum) {
|
||||
/*****************************************/
|
||||
/* foreign-function-call support subrs */
|
||||
/*****************************************/
|
||||
case sb_CALL_C_FN: {
|
||||
case sb_CALL_C_FUNCTION: {
|
||||
POP_SUBR_ARGS;
|
||||
TopOfStack = call_c_fn(args); /* args[0]=fnaddr, args[1]=fn type */
|
||||
break;
|
||||
@@ -717,27 +731,27 @@ void OP_subrcall(int subr_no, int argnum) {
|
||||
TopOfStack = Mdld_function_executable_p(args);
|
||||
break;
|
||||
}
|
||||
case sb_DLD_LIST_UNDEFINED_SYM: {
|
||||
case sb_DLD_LIST_UNDEFINED_SYMBOLS: {
|
||||
POP_SUBR_ARGS;
|
||||
TopOfStack = Mdld_list_undefined_sym();
|
||||
break;
|
||||
}
|
||||
case sb_MALLOC: {
|
||||
case sb_C_MALLOC: {
|
||||
POP_SUBR_ARGS;
|
||||
TopOfStack = c_malloc(args);
|
||||
break;
|
||||
}
|
||||
case sb_FREE: {
|
||||
case sb_C_FREE: {
|
||||
POP_SUBR_ARGS;
|
||||
TopOfStack = c_free(args);
|
||||
break;
|
||||
}
|
||||
case sb_PUT_C_BASEBYTE: {
|
||||
case sb_C_PUTBASEBYTE: {
|
||||
POP_SUBR_ARGS;
|
||||
TopOfStack = put_c_basebyte(args);
|
||||
break;
|
||||
}
|
||||
case sb_GET_C_BASEBYTE: {
|
||||
case sb_C_GETBASEBYTE: {
|
||||
POP_SUBR_ARGS;
|
||||
TopOfStack = get_c_basebyte(args);
|
||||
break;
|
||||
@@ -779,6 +793,20 @@ void OP_subrcall(int subr_no, int argnum) {
|
||||
break;
|
||||
}
|
||||
#endif /* LPSOLVE */
|
||||
case sb_YIELD: {
|
||||
struct timespec rqts = {0, 833333};
|
||||
unsigned sleepnanos;
|
||||
POP_SUBR_ARGS;
|
||||
N_GETNUMBER(args[0], sleepnanos, ret_nil);
|
||||
if (sleepnanos > 999999999) {
|
||||
TopOfStack = NIL;
|
||||
break;
|
||||
}
|
||||
rqts.tv_nsec = sleepnanos;
|
||||
nanosleep(&rqts, NULL);
|
||||
TopOfStack = ATOM_T;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
char errtext[200];
|
||||
sprintf(errtext, "OP_subrcall: Invalid alpha byte 0%o", ((*(PC + 1)) & 0xff));
|
||||
|
||||
@@ -424,7 +424,7 @@ void dump_fnobj(LispPTR index)
|
||||
/************************************************************************/
|
||||
|
||||
/* Opcode names, by opcode */
|
||||
static const char *opcode_table[256] = {
|
||||
const char *opcode_table[256] = {
|
||||
"-X-",
|
||||
"CAR",
|
||||
"CDR",
|
||||
@@ -1018,7 +1018,7 @@ FX *get_nextFX(FX *fx) {
|
||||
} /* get_nextFX end */
|
||||
|
||||
LispPTR MAKEATOM(char *string) {
|
||||
return (make_atom(string, 0, strlen(string), 0));
|
||||
return (make_atom(string, 0, strlen(string)));
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
@@ -1032,7 +1032,7 @@ LispPTR MAKEATOM(char *string) {
|
||||
|
||||
LispPTR *MakeAtom68k(char *string) {
|
||||
LispPTR index;
|
||||
index = make_atom(string, 0, strlen(string), 0);
|
||||
index = make_atom(string, 0, strlen(string));
|
||||
if (index == 0xffffffff) {
|
||||
error("MakeAtom68k: no such atom found");
|
||||
}
|
||||
@@ -1241,8 +1241,6 @@ void dtd_chain(DLword type) {
|
||||
|
||||
} /* dtd_chain end **/
|
||||
|
||||
#ifdef DTDDEBUG
|
||||
|
||||
void check_dtd_chain(DLword type)
|
||||
{
|
||||
register LispPTR next, onext;
|
||||
@@ -1270,8 +1268,6 @@ void check_dtd_chain(DLword type)
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/* T R A C E _ F N C A L L */
|
||||
|
||||
64
src/timer.c
64
src/timer.c
@@ -18,6 +18,7 @@
|
||||
|
||||
#include "version.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <setjmp.h>
|
||||
#include <signal.h>
|
||||
@@ -85,11 +86,9 @@ extern DspInterface currentdsp;
|
||||
* to get Alto time.
|
||||
*/
|
||||
|
||||
int TIMEOUT_TIME; /* For file system timeout */
|
||||
int TIMEOUT_TIME = 10; /* For file system timeout, seconds, default 10 */
|
||||
|
||||
#ifdef XWINDOW
|
||||
volatile sig_atomic_t Event_Req = FALSE;
|
||||
#endif /* XWINDOW */
|
||||
volatile sig_atomic_t IO_Signalled = FALSE;
|
||||
|
||||
static int gettime(int casep);
|
||||
|
||||
@@ -403,7 +402,7 @@ void update_timer() {
|
||||
/* TIMER_INTERVAL usec ~ 20 per second. This should live in some
|
||||
machine-configuration
|
||||
file somewhere - it can be changed as the -t parameter to lisp*/
|
||||
int TIMER_INTERVAL = 25000;
|
||||
int TIMER_INTERVAL = 10000;
|
||||
|
||||
extern int LispWindowFd;
|
||||
|
||||
@@ -423,10 +422,6 @@ static void int_timer_service(int sig)
|
||||
|
||||
Irq_Stk_Check = 0;
|
||||
Irq_Stk_End = 0;
|
||||
|
||||
#ifdef XWINDOW
|
||||
Event_Req = TRUE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
@@ -466,7 +461,7 @@ static void int_timer_init()
|
||||
|
||||
timer_action.sa_handler = int_timer_service;
|
||||
sigemptyset(&timer_action.sa_mask);
|
||||
timer_action.sa_flags = 0;
|
||||
timer_action.sa_flags = SA_RESTART;
|
||||
|
||||
if (sigaction(SIGVTALRM, &timer_action, NULL) == -1) {
|
||||
perror("sigaction: SIGVTALRM");
|
||||
@@ -496,15 +491,10 @@ void int_io_open(int fd)
|
||||
{
|
||||
#ifdef DOS
|
||||
/* would turn on DOS kbd signal handler here */
|
||||
#elif KBINT
|
||||
|
||||
#elseif defined(O_ASYNC)
|
||||
DBPRINT(("int_io_opening %d\n", fd));
|
||||
if (fcntl(fd, F_SETOWN, getpid()) == -1) {
|
||||
#ifdef DEBUG
|
||||
perror("fcntl F_SETOWN ERROR");
|
||||
#endif
|
||||
};
|
||||
if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_ASYNC) == -1) perror("fcntl F_SETFL error");
|
||||
if (fcntl(fd, F_SETOWN, getpid()) == -1) perror("fcntl F_SETOWN error");
|
||||
if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_ASYNC) == -1) perror("fcntl F_SETFL on error");
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -512,11 +502,27 @@ void int_io_close(int fd)
|
||||
{
|
||||
#ifdef DOS
|
||||
/* Turn off signaller here */
|
||||
#elif KBINT
|
||||
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_ASYNC);
|
||||
#elseif defined(O_ASYNC)
|
||||
if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_ASYNC) == -1) perror("fcntl_F_SETFL off error");
|
||||
#endif
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/* i n t _ i o _ s e r v i c e */
|
||||
/* */
|
||||
/* Handle SIGIO */
|
||||
/* */
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
static void int_io_service(int sig)
|
||||
{
|
||||
Irq_Stk_Check = 0;
|
||||
Irq_Stk_End = 0;
|
||||
IO_Signalled = TRUE;
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/* i n t _ i o _ i n i t */
|
||||
@@ -531,7 +537,7 @@ void int_io_close(int fd)
|
||||
static void int_io_init() {
|
||||
#ifndef DOS
|
||||
struct sigaction io_action;
|
||||
io_action.sa_handler = getsignaldata;
|
||||
io_action.sa_handler = int_io_service;
|
||||
sigemptyset(&io_action.sa_mask);
|
||||
io_action.sa_flags = 0;
|
||||
|
||||
@@ -541,11 +547,6 @@ static void int_io_init() {
|
||||
DBPRINT(("I/O interrupts enabled\n"));
|
||||
}
|
||||
|
||||
#if defined(XWINDOW) && defined(I_SETSIG)
|
||||
if (ioctl(ConnectionNumber(currentdsp->display_id), I_SETSIG, S_INPUT) < 0)
|
||||
perror("ioctl on X fd - SETSIG for input handling failed");
|
||||
#endif
|
||||
|
||||
#if defined(USE_DLPI)
|
||||
DBPRINT(("INIT ETHER: Doing I_SETSIG.\n"));
|
||||
if (ether_fd > 0)
|
||||
@@ -710,13 +711,12 @@ static void int_file_init() {
|
||||
}
|
||||
|
||||
/* Set Timeout period */
|
||||
if ((envtime = getenv("LDEFILETIMEOUT")) == NULL) {
|
||||
TIMEOUT_TIME = 10;
|
||||
} else {
|
||||
if ((timeout_time = atoi(envtime)) > 0)
|
||||
envtime = getenv("LDEFILETIMEOUT");
|
||||
if (envtime != NULL) {
|
||||
errno = 0;
|
||||
timeout_time = (int)strtol(envtime, (char **)NULL, 10);
|
||||
if (errno == 0 && timeout_time > 0)
|
||||
TIMEOUT_TIME = timeout_time;
|
||||
else
|
||||
TIMEOUT_TIME = 10;
|
||||
}
|
||||
DBPRINT(("File timeout interrupts enabled\n"));
|
||||
}
|
||||
|
||||
10
src/ufs.c
10
src/ufs.c
@@ -156,7 +156,8 @@ exit_host_filesystem() {
|
||||
LispPTR UFS_getfilename(LispPTR *args)
|
||||
{
|
||||
register char *base;
|
||||
register int len, rval;
|
||||
size_t len;
|
||||
register int rval;
|
||||
char lfname[MAXPATHLEN], file[MAXPATHLEN];
|
||||
|
||||
ERRSETJMP(NIL);
|
||||
@@ -369,7 +370,8 @@ LispPTR UFS_directorynamep(LispPTR *args)
|
||||
{
|
||||
char dirname[MAXPATHLEN];
|
||||
char fullname[MAXPATHLEN];
|
||||
register int len, rval;
|
||||
size_t len;
|
||||
register int rval;
|
||||
register char *base;
|
||||
struct stat sbuf;
|
||||
|
||||
@@ -564,7 +566,7 @@ int unixpathname(char *src, char *dst, int versionp, int genp)
|
||||
case '~':
|
||||
if (*(cp + 1) == '>' || *(cp + 1) == '\0') {
|
||||
/* "~>" or "~" means the user's home directory. */
|
||||
TIMEOUT(pwd = getpwuid(getuid()));
|
||||
TIMEOUT0(pwd = getpwuid(getuid()));
|
||||
if (pwd == NULL) return (0);
|
||||
|
||||
strcpy(dst, pwd->pw_dir);
|
||||
@@ -588,7 +590,7 @@ int unixpathname(char *src, char *dst, int versionp, int genp)
|
||||
*/
|
||||
for (++cp, np = name; *cp != '\0' && *cp != '>';) *np++ = *cp++;
|
||||
*np = '\0';
|
||||
TIMEOUT(pwd = getpwnam(name));
|
||||
TIMEOUT0(pwd = getpwnam(name));
|
||||
if (pwd == NULL) return (0);
|
||||
|
||||
strcpy(dst, pwd->pw_dir);
|
||||
|
||||
148
src/unixcomm.c
148
src/unixcomm.c
@@ -89,7 +89,6 @@ enum UJTYPE {
|
||||
/* These are indexed by WRITE socket# */
|
||||
struct unixjob {
|
||||
char *pathname; /* used by Lisp direct socket access subr */
|
||||
int readsock; /* Socket to READ from for this job. */
|
||||
int PID; /* process ID associated with this slot */
|
||||
int status; /* status returned by subprocess (not shell) */
|
||||
enum UJTYPE type;
|
||||
@@ -247,14 +246,35 @@ void close_unix_descriptors(void) /* Get ready to shut Maiko down */
|
||||
|
||||
int FindUnixPipes(void) {
|
||||
char *envtmp;
|
||||
int inttmp;
|
||||
struct unixjob cleareduj;
|
||||
|
||||
DBPRINT(("Entering FindUnixPipes\n"));
|
||||
UnixPipeIn = UnixPipeOut = StartTime = UnixPID = -1;
|
||||
if ((envtmp = getenv("LDEPIPEIN"))) UnixPipeIn = atoi(envtmp);
|
||||
if ((envtmp = getenv("LDEPIPEOUT"))) UnixPipeOut = atoi(envtmp);
|
||||
if ((envtmp = getenv("LDESTARTTIME"))) StartTime = atoi(envtmp);
|
||||
if ((envtmp = getenv("LDEUNIXPID"))) UnixPID = atoi(envtmp);
|
||||
if ((envtmp = getenv("LDEPIPEIN"))) {
|
||||
errno = 0;
|
||||
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
|
||||
if (errno == 0)
|
||||
UnixPipeIn = inttmp;
|
||||
}
|
||||
if ((envtmp = getenv("LDEPIPEOUT"))) {
|
||||
errno = 0;
|
||||
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
|
||||
if (errno == 0)
|
||||
UnixPipeOut = inttmp;
|
||||
}
|
||||
if ((envtmp = getenv("LDESTARTTIME"))) {
|
||||
errno = 0;
|
||||
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
|
||||
if (errno == 0)
|
||||
StartTime = inttmp;
|
||||
}
|
||||
if ((envtmp = getenv("LDEUNIXPID"))) {
|
||||
errno = 0;
|
||||
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
|
||||
if (errno == 0)
|
||||
UnixPID = inttmp;
|
||||
}
|
||||
|
||||
/* This is a good place to initialize stuff like the UJ table */
|
||||
NPROCS = sysconf(_SC_OPEN_MAX);
|
||||
@@ -263,7 +283,6 @@ int FindUnixPipes(void) {
|
||||
cleareduj.status = -1;
|
||||
cleareduj.pathname = NULL;
|
||||
cleareduj.PID = 0;
|
||||
cleareduj.readsock = 0;
|
||||
cleareduj.type = UJUNUSED;
|
||||
for (int i = 0; i < NPROCS; i++) UJ[i] = cleareduj;
|
||||
|
||||
@@ -330,7 +349,7 @@ static int FindAvailablePty(char *Slave) {
|
||||
/* => byte count (<= 512), NIL (no data), or T (EOF) */
|
||||
/* 10 Set Window Size, Arg2 = rows, Arg3 = columns */
|
||||
/* 11 Fork PTY to Shell (obsoletes command 4) */
|
||||
/* Arg1 = termtype, Arg2 = csh command string */
|
||||
/* Arg1 = termtype, Arg2 = shell command string */
|
||||
/* => Job # or NIL */
|
||||
/* 12 Create Unix Socket */
|
||||
/* Arg1 = pathname to bind socket to (string) */
|
||||
@@ -353,7 +372,7 @@ LispPTR Unix_handlecomm(LispPTR *args) {
|
||||
|
||||
/* Get command */
|
||||
N_GETNUMBER(args[0], command, bad);
|
||||
DBPRINT(("\nUnix_handlecomm: trying %d\n", command));
|
||||
DBPRINT(("\nUnix_handlecomm: command %d\n", command));
|
||||
|
||||
switch (command) {
|
||||
case 0: /* Fork pipe process */
|
||||
@@ -414,9 +433,9 @@ LispPTR Unix_handlecomm(LispPTR *args) {
|
||||
UJ[PipeFD].type = UJPROCESS;
|
||||
UJ[PipeFD].status = -1;
|
||||
UJ[PipeFD].PID = (d[1] << 8) | d[2] | (d[4] << 16) | (d[5] << 24);
|
||||
UJ[PipeFD].readsock = 0;
|
||||
close(sockFD);
|
||||
unlink(PipeName);
|
||||
DBPRINT(("New process: slot/PipeFD %d PID %d\n", PipeFD, UJ[PipeFD].PID));
|
||||
return (GetSmallp(PipeFD));
|
||||
} else {
|
||||
DBPRINT(("Fork request failed."));
|
||||
@@ -461,17 +480,11 @@ LispPTR Unix_handlecomm(LispPTR *args) {
|
||||
N_GETNUMBER(args[1], slot, bad); /* Get job # */
|
||||
|
||||
if (!valid_slot(slot)) return (NIL); /* No fd open; punt the read */
|
||||
|
||||
if (UJ[slot].readsock)
|
||||
sock = UJ[slot].readsock;
|
||||
else
|
||||
sock = slot;
|
||||
|
||||
switch (UJ[slot].type) {
|
||||
case UJPROCESS:
|
||||
case UJSHELL:
|
||||
case UJSOSTREAM:
|
||||
TIMEOUT(dest = read(sock, buf, 1));
|
||||
TIMEOUT(dest = read(slot, buf, 1));
|
||||
if (dest > 0) return (GetSmallp(buf[0]));
|
||||
/* Something's amiss; check our process status */
|
||||
wait_for_comm_processes();
|
||||
@@ -502,66 +515,46 @@ LispPTR Unix_handlecomm(LispPTR *args) {
|
||||
|
||||
N_GETNUMBER(args[1], slot, bad);
|
||||
|
||||
DBPRINT(("Killing process in slot %d.\n", slot));
|
||||
|
||||
if (valid_slot(slot)) switch (UJ[slot].type) {
|
||||
case UJSHELL:
|
||||
case UJPROCESS:
|
||||
/* First check to see it hasn't already died */
|
||||
if (UJ[slot].status == -1) {
|
||||
/* Kill the job */
|
||||
kill(UJ[slot].PID, SIGKILL);
|
||||
for (int i = 0; i < 10; i++) {
|
||||
/* Waiting for the process to exit is possibly risky.
|
||||
Sending SIGKILL is always supposed to kill
|
||||
a process, but on very rare occurrences this doesn't
|
||||
happen because of a Unix kernel bug, usually a user-
|
||||
written device driver which hasn't been fully
|
||||
debugged. So we time it out just be safe. */
|
||||
if (UJ[slot].status != -1) break;
|
||||
wait_for_comm_processes();
|
||||
usleep(10);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
else
|
||||
return (ATOM_T);
|
||||
|
||||
DBPRINT(("Terminating process in slot %d.\n", slot));
|
||||
if (!valid_slot(slot)) return (ATOM_T);
|
||||
/* in all cases we need to close() the file descriptor */
|
||||
close(slot);
|
||||
switch (UJ[slot].type) {
|
||||
case UJUNUSED:
|
||||
break;
|
||||
|
||||
case UJSHELL:
|
||||
DBPRINT(("Kill 3 closing shell desc %d.\n", slot));
|
||||
close(slot);
|
||||
break;
|
||||
|
||||
case UJPROCESS:
|
||||
DBPRINT(("Kill 3 closing process desc %d.\n", slot));
|
||||
close(slot);
|
||||
if (UJ[slot].readsock) close(UJ[slot].readsock);
|
||||
break;
|
||||
|
||||
case UJSOSTREAM:
|
||||
DBPRINT(("Kill 3 closing stream socket desc %d.\n", slot));
|
||||
close(slot);
|
||||
break;
|
||||
|
||||
case UJSOCKET:
|
||||
DBPRINT(("Kill 3 closing raw socket desc %d.\n", slot));
|
||||
close(slot);
|
||||
case UJSHELL:
|
||||
case UJPROCESS:
|
||||
/* wait for up to 0.1s for it to exit on its own after the close() */
|
||||
for (int i = 0; i < 10; i++) {
|
||||
wait_for_comm_processes();
|
||||
if (UJ[slot].status != -1) break;
|
||||
usleep(10000);
|
||||
}
|
||||
/* check again before we terminate it */
|
||||
if (UJ[slot].status != -1) break;
|
||||
kill(UJ[slot].PID, SIGKILL);
|
||||
for (int i = 0; i < 10; i++) {
|
||||
/* Waiting for the process to exit is possibly risky.
|
||||
Sending SIGKILL is always supposed to kill
|
||||
a process, but on very rare occurrences this doesn't
|
||||
happen because of a Unix kernel bug, usually a user-
|
||||
written device driver which hasn't been fully
|
||||
debugged. So we time it out just be safe. */
|
||||
wait_for_comm_processes();
|
||||
usleep(10000);
|
||||
if (UJ[slot].status != -1) break;
|
||||
}
|
||||
break;
|
||||
case UJSOCKET:
|
||||
if (UJ[slot].pathname) {
|
||||
DBPRINT(("Unlinking %s\n", UJ[slot].pathname));
|
||||
if (UJ[slot].pathname) {
|
||||
if (unlink(UJ[slot].pathname) < 0) perror("Kill 3 unlink");
|
||||
free(UJ[slot].pathname);
|
||||
UJ[slot].pathname = NULL;
|
||||
}
|
||||
break;
|
||||
if (unlink(UJ[slot].pathname) < 0) perror("Kill 3 unlink");
|
||||
free(UJ[slot].pathname);
|
||||
UJ[slot].pathname = NULL;
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
UJ[slot].type = UJUNUSED;
|
||||
UJ[slot].readsock = UJ[slot].PID = 0;
|
||||
UJ[slot].PID = 0;
|
||||
UJ[slot].pathname = NULL;
|
||||
|
||||
/* If status available, return it, otherwise T */
|
||||
@@ -653,8 +646,6 @@ LispPTR Unix_handlecomm(LispPTR *args) {
|
||||
case UJPROCESS:
|
||||
DBPRINT(("Kill 5 closing process desc %d.\n", dest));
|
||||
close(dest);
|
||||
if (UJ[dest].readsock) close(UJ[dest].readsock);
|
||||
UJ[dest].readsock = 0;
|
||||
break;
|
||||
|
||||
case UJSOCKET:
|
||||
@@ -675,7 +666,7 @@ LispPTR Unix_handlecomm(LispPTR *args) {
|
||||
}
|
||||
|
||||
UJ[dest].type = UJUNUSED;
|
||||
UJ[dest].readsock = UJ[dest].PID = 0;
|
||||
UJ[dest].PID = 0;
|
||||
return (ATOM_T);
|
||||
/* break; */
|
||||
|
||||
@@ -708,18 +699,13 @@ LispPTR Unix_handlecomm(LispPTR *args) {
|
||||
N_GETNUMBER(args[1], slot, bad); /* Get job # */
|
||||
if (!valid_slot(slot)) return (NIL); /* No fd open; punt the read */
|
||||
|
||||
if (UJ[slot].readsock)
|
||||
sock = UJ[slot].readsock;
|
||||
else
|
||||
sock = slot;
|
||||
|
||||
bufp = (Addr68k_from_LADDR(args[2])); /* User buffer */
|
||||
DBPRINT(("Read buffer slot %d, type is %d\n", slot, UJ[slot].type));
|
||||
|
||||
switch (UJ[slot].type) {
|
||||
case UJSHELL:
|
||||
case UJPROCESS:
|
||||
case UJSOSTREAM: dest = read(sock, bufp, 512);
|
||||
case UJSOSTREAM: dest = read(slot, bufp, 512);
|
||||
#ifdef BYTESWAP
|
||||
word_swap_page(bufp, 128);
|
||||
#endif /* BYTESWAP */
|
||||
|
||||
118
src/unixfork.c
118
src/unixfork.c
@@ -75,76 +75,78 @@ static inline ssize_t SAFEREAD(int f, char *b, int c)
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
/* Creates a PTY connection to a csh */
|
||||
/* Creates a PTY connection to a shell */
|
||||
|
||||
static int ForkUnixShell(int slot, char *PtySlave, char *termtype, char *shellarg)
|
||||
{
|
||||
int PID, SlaveFD;
|
||||
struct termios tio;
|
||||
char *argvec[4] = {NULL, NULL, NULL, NULL};
|
||||
char *shell = NULL;
|
||||
char *userShell = NULL;
|
||||
|
||||
PID = fork();
|
||||
|
||||
if (PID == 0) {
|
||||
char *argvec[4];
|
||||
|
||||
if (0 > setsid()) /* create us a new session for tty purposes */
|
||||
perror("setsid");
|
||||
|
||||
/* Open the slave side */
|
||||
SlaveFD = open(PtySlave, O_RDWR);
|
||||
if (SlaveFD == -1) {
|
||||
perror("Slave Open");
|
||||
perror(PtySlave);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#ifdef OS5
|
||||
ioctl(SlaveFD, I_PUSH, "ptem");
|
||||
ioctl(SlaveFD, I_PUSH, "ldterm");
|
||||
#endif /* OS5 */
|
||||
|
||||
/* Set up as basic display terminal: canonical erase,
|
||||
kill processing, echo, backspace to erase, echo ctrl
|
||||
chars as ^x, kill line by backspacing */
|
||||
tcgetattr(SlaveFD, &tio);
|
||||
tio.c_lflag |= ICANON | ECHO | ECHOE | ECHOCTL | ECHOKE;
|
||||
tcsetattr(SlaveFD, TCSANOW, &tio);
|
||||
|
||||
(void)dup2(SlaveFD, 0);
|
||||
(void)dup2(SlaveFD, 1);
|
||||
(void)dup2(SlaveFD, 2);
|
||||
(void)close(SlaveFD);
|
||||
|
||||
/* set the LDESHELL variable so the underlying .cshrc can see it and
|
||||
configure the shell appropriately, though this may not be so important any more */
|
||||
setenv("LDESHELL", "YES", 1);
|
||||
|
||||
if (termtype[0] != 0) { /* set the TERM environment var */
|
||||
setenv("TERM", termtype, 1);
|
||||
}
|
||||
/* Start up csh */
|
||||
argvec[0] = "csh";
|
||||
if (shellarg[0] != 0) { /* setup to run command */
|
||||
argvec[1] = "-c"; /* read commands from next arg */
|
||||
argvec[2] = shellarg;
|
||||
argvec[3] = (char *)0;
|
||||
} else
|
||||
argvec[1] = (char *)0;
|
||||
|
||||
execv("/bin/csh", argvec);
|
||||
|
||||
/* Should never get here */
|
||||
perror("execv");
|
||||
exit(0);
|
||||
} else { /* not the forked process. */
|
||||
if (PID != 0) {
|
||||
if (shellarg != shcom) free(shellarg);
|
||||
return (PID);
|
||||
}
|
||||
|
||||
/* Set the process group so all the kids get the bullet too
|
||||
if (setpgrp(PID, PID) != 0)
|
||||
perror("setpgrp"); */
|
||||
if (0 > setsid()) /* create us a new session for tty purposes */
|
||||
perror("setsid");
|
||||
|
||||
return (PID);
|
||||
/* Open the slave side */
|
||||
SlaveFD = open(PtySlave, O_RDWR);
|
||||
if (SlaveFD == -1) {
|
||||
perror("Slave Open");
|
||||
perror(PtySlave);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#ifdef OS5
|
||||
ioctl(SlaveFD, I_PUSH, "ptem");
|
||||
ioctl(SlaveFD, I_PUSH, "ldterm");
|
||||
#endif /* OS5 */
|
||||
|
||||
/* Set up as basic display terminal: canonical erase,
|
||||
kill processing, echo, backspace to erase, echo ctrl
|
||||
chars as ^x, kill line by backspacing */
|
||||
tcgetattr(SlaveFD, &tio);
|
||||
tio.c_lflag |= ICANON | ECHO | ECHOE | ECHOCTL | ECHOKE;
|
||||
tcsetattr(SlaveFD, TCSANOW, &tio);
|
||||
|
||||
(void)dup2(SlaveFD, 0);
|
||||
(void)dup2(SlaveFD, 1);
|
||||
(void)dup2(SlaveFD, 2);
|
||||
(void)close(SlaveFD);
|
||||
|
||||
/* set the LDESHELL variable so the underlying shell initialization can see it and
|
||||
configure the shell appropriately, though this may not be so important any more */
|
||||
setenv("LDESHELL", "YES", 1);
|
||||
|
||||
if (termtype[0] != 0) { /* set the TERM environment var */
|
||||
setenv("TERM", termtype, 1);
|
||||
}
|
||||
/* Start up shell -- use SHELL environment variable as long as it's in /etc/shells */
|
||||
shell = getenv("SHELL");
|
||||
for (userShell = getusershell(); userShell != NULL && strcmp(shell, userShell) != 0; userShell = getusershell());
|
||||
if (userShell == NULL) {
|
||||
perror("$(SHELL) not found in /etc/shells");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* argvec entries initialized to NULL */
|
||||
argvec[0] = strrchr(userShell, '/') + 1;
|
||||
if (shellarg[0] != 0) { /* setup to run command */
|
||||
argvec[1] = "-c"; /* read commands from next arg */
|
||||
argvec[2] = shellarg;
|
||||
}
|
||||
|
||||
execv(userShell, argvec);
|
||||
|
||||
/* Should never get here */
|
||||
perror("execv");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* fork_Unix is the secondary process spawned right after LISP is
|
||||
|
||||
452
src/uraid.c
452
src/uraid.c
@@ -19,6 +19,7 @@
|
||||
/************************************************************************/
|
||||
/************************************************************************/
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
@@ -35,20 +36,6 @@
|
||||
#include <sys/select.h>
|
||||
#endif /* DOS */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#include <sundev/kbd.h>
|
||||
#include <sundev/kbio.h>
|
||||
#include <errno.h>
|
||||
#ifndef NOPIXRECT
|
||||
#include <sunwindow/window_hs.h>
|
||||
#include <sunwindow/win_ioctl.h>
|
||||
#include <pixrect/pixrect_hs.h>
|
||||
#include <sunwindow/win_cursor.h>
|
||||
#include <sunwindow/cms.h>
|
||||
#include <sys/mman.h>
|
||||
extern int Win_security_p;
|
||||
#endif /* NOPIXRECT */
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef OS5
|
||||
#include <stropts.h>
|
||||
@@ -149,17 +136,10 @@ v filename Save the virtual memory on the filename(Not Bootable)
|
||||
|
||||
*/
|
||||
/************************************************************************/
|
||||
#ifndef NOPIXRECT
|
||||
extern int black, white;
|
||||
extern struct pixrect *ColorDisplayPixrect, *DisplayRegionPixrect;
|
||||
#endif /* NOPIXRECT */
|
||||
|
||||
extern int DisplayRasterWidth;
|
||||
extern unsigned int LispWindowFd, LispKbdFd;
|
||||
extern fd_set LispReadFds;
|
||||
#ifndef NOPIXRECT
|
||||
extern struct pixrect *CursorBitMap, *InvisibleCursorBitMap;
|
||||
#endif /* NOPIXRECT */
|
||||
extern struct cursor CurrentCursor, InvisibleCursor;
|
||||
extern struct screen LispScreen;
|
||||
extern int displaywidth, displayheight;
|
||||
@@ -306,7 +286,7 @@ LispPTR parse_atomstring(char *string)
|
||||
namelen = cnt - 1;
|
||||
|
||||
if ((packagelen == 0) || (strncmp(packageptr, "IL", packagelen) == 0)) { /* default IL: */
|
||||
aindex = make_atom(nameptr, 0, namelen, T);
|
||||
aindex = make_atom(nameptr, 0, namelen);
|
||||
if (aindex == 0xffffffff) {
|
||||
printf("trying IL:\n");
|
||||
aindex = get_package_atom(nameptr, namelen, "INTERLISP", 9, 0);
|
||||
@@ -370,6 +350,7 @@ unsigned int uGetTN(unsigned int address) {
|
||||
|
||||
LispPTR uraid_commands() {
|
||||
int num, address, val;
|
||||
char *endpointer;
|
||||
LispPTR index;
|
||||
DefCell *defcell68k;
|
||||
#ifndef DOS
|
||||
@@ -404,7 +385,9 @@ LispPTR uraid_commands() {
|
||||
printf("DUMP-STACK: f decimal-FXnumber\n");
|
||||
return (T);
|
||||
}
|
||||
if (sscanf(URaid_arg1, "%d", &num) <= 0) { /* com read fails */
|
||||
errno = 0;
|
||||
num = strtoul(URaid_arg1, &endpointer, 10);
|
||||
if (errno != 0 || *endpointer != '\0') { /* com read fails */
|
||||
printf("Illegal argument, not decimal number\n");
|
||||
return (T);
|
||||
}
|
||||
@@ -532,7 +515,9 @@ LispPTR uraid_commands() {
|
||||
printf("PRINT-INSTANCE: O HEX-LispAddress\n");
|
||||
return (T);
|
||||
}
|
||||
if (sscanf(URaid_arg1, "%x", &objaddr) <= 0) {
|
||||
errno = 0;
|
||||
objaddr = strtoul(URaid_arg1, &endpointer, 16);
|
||||
if (errno != 0 || *endpointer != '\0') {
|
||||
printf("Arg not HEX number\n");
|
||||
return (T);
|
||||
}
|
||||
@@ -545,7 +530,9 @@ LispPTR uraid_commands() {
|
||||
}
|
||||
|
||||
/**HEXNUMP(URaid_arg1,"Not Address");**/
|
||||
if (sscanf(URaid_arg1, "%x", &address) <= 0) {
|
||||
errno = 0;
|
||||
address = strtoul(URaid_arg1, &endpointer, 16);
|
||||
if (errno != 0 || *endpointer != '\0') {
|
||||
printf("Arg not HEX number\n");
|
||||
return (T);
|
||||
}
|
||||
@@ -630,17 +617,21 @@ LispPTR uraid_commands() {
|
||||
printf("HEX-DUMP: x Xaddress [Xnum]\n");
|
||||
return (T);
|
||||
}
|
||||
if (sscanf(URaid_arg1, "%x", &address) <= 0) { /* arg1 not HEX */
|
||||
errno = 0;
|
||||
address = strtoul(URaid_arg1, &endpointer, 16);
|
||||
if (errno != 0 || *endpointer != '\0') {
|
||||
printf("Arg(Xaddress) not Xaddress\n");
|
||||
return (T);
|
||||
}
|
||||
switch (sscanf(URaid_arg2, "%x", &num)) {
|
||||
case -1: /* Use defaultval for word-num */ num = XDUMPW; break;
|
||||
case 0: /* Illegal number */
|
||||
if (URaid_arg2[0] == '\0') {
|
||||
num = XDUMPW;
|
||||
} else {
|
||||
errno = 0;
|
||||
num = strtol(URaid_arg2, &endpointer, 16);
|
||||
if (errno != 0 || *endpointer != '\0') {
|
||||
printf("Arg(Xnum) not Xnum\n");
|
||||
return (T);
|
||||
/* break; */
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
if (num < 0) {
|
||||
printf("Dump words num should be positive\n");
|
||||
@@ -678,7 +669,9 @@ LispPTR uraid_commands() {
|
||||
} else if (*URaid_arg2 == 'T')
|
||||
val = ATOM_T;
|
||||
else {
|
||||
if (sscanf(URaid_arg2, "%d", &val) == -1) {
|
||||
errno = 0;
|
||||
val = strtol(URaid_arg2, &endpointer, 10);
|
||||
if (errno != 0 || *endpointer != '\0') {
|
||||
printf(" Bad value\n");
|
||||
return (T);
|
||||
} else {
|
||||
@@ -712,11 +705,15 @@ LispPTR uraid_commands() {
|
||||
HEXNUMP(URaid_arg2,"Not Proper Value");
|
||||
***/
|
||||
|
||||
if (sscanf(URaid_arg1, "%x", &address) <= 0) {
|
||||
errno = 0;
|
||||
address = strtol(URaid_arg1, &endpointer, 16);
|
||||
if (errno != 0 || *endpointer != '\0') {
|
||||
printf("Arg(Xaddress) not Xaddress\n");
|
||||
return (T);
|
||||
}
|
||||
if (sscanf(URaid_arg2, "%x", &val) <= 0) {
|
||||
errno = 0;
|
||||
val = strtol(URaid_arg2, &endpointer, 16);
|
||||
if (errno != 0 || *endpointer != '\0') {
|
||||
printf("Arg(Xval) not Xaddress\n");
|
||||
return (T);
|
||||
}
|
||||
@@ -798,10 +795,6 @@ LispPTR uraid_commands() {
|
||||
printf("VMEMSAVE: v filename (it's NOT bootable)\n");
|
||||
return (T);
|
||||
}
|
||||
#ifndef DISPLAYBUFFER
|
||||
copy_region(HideDisp68k, DisplayRegion68k, DisplayRasterWidth, displayheight);
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
if (vmem_save(URaid_arg1) != NIL) {
|
||||
#ifndef DISPLAYBUFFER
|
||||
clear_display();
|
||||
@@ -816,13 +809,14 @@ LispPTR uraid_commands() {
|
||||
case '(':
|
||||
if (URaid_argnum == 1)
|
||||
num = 2;
|
||||
|
||||
else if ((URaid_arg1[0] < '0') || (URaid_arg1[0] > '9')) {
|
||||
printf("Illegal argument, not number\n");
|
||||
return (T);
|
||||
} else
|
||||
sscanf(URaid_arg1, "%d", &num);
|
||||
|
||||
else {
|
||||
errno = 0;
|
||||
num = strtoul(URaid_arg1, &endpointer, 10);
|
||||
if (errno != 0 || *endpointer != '\0') {
|
||||
printf("Illegal argument, not number\n");
|
||||
return (T);
|
||||
}
|
||||
}
|
||||
PrintMaxLevel = num;
|
||||
printf("PrintLevel is set to %d.", num);
|
||||
break;
|
||||
@@ -861,17 +855,8 @@ LispPTR uraid_commands() {
|
||||
extern struct pixrect *ColorDisplayPixrect, *DisplayRegionPixrect;
|
||||
#endif
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#define SV_ACQUIRE "/bin/sunview1/sv_acquire"
|
||||
#define SV_RELEASE "/bin/sunview1/sv_release"
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
int device_before_raid() {
|
||||
#ifdef SUNDISPLAY
|
||||
int size;
|
||||
int keytrans;
|
||||
union wait status;
|
||||
#endif /* SUNDISPLAY */
|
||||
#ifdef XWINDOW
|
||||
sigset_t signals;
|
||||
#endif
|
||||
@@ -885,12 +870,6 @@ int device_before_raid() {
|
||||
sigprocmask(SIG_UNBLOCK, &signals, NULL);
|
||||
#endif
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
win_setcursor(LispWindowFd, &InvisibleCursor);
|
||||
#ifdef KBINT
|
||||
int_io_close(LispWindowFd);
|
||||
#endif
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef MAIKO_ENABLE_ETHERNET
|
||||
#ifdef ETHERINT
|
||||
@@ -903,96 +882,6 @@ int device_before_raid() {
|
||||
int_io_close(RS232C_Fd);
|
||||
#endif
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
mess_reset(); /* turn off console-msg handling */
|
||||
|
||||
#ifdef FX_AR_124
|
||||
/* For AR 124. Type4 driver bug?? by m.matsuda */
|
||||
{
|
||||
long i;
|
||||
for (i = 0; i < 900000; i++)
|
||||
;
|
||||
}
|
||||
#endif /* FX_AR_124 */
|
||||
|
||||
if ((LispKbdFd = open(LispScreen.scr_kbdname, O_RDWR)) == -1) {
|
||||
fprintf(stderr, "can't open %s\n", LispScreen.scr_kbdname);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
keytrans = TR_EVENT; /* keyboard encodes key */
|
||||
if (ioctl(LispKbdFd, KIOCTRANS, &keytrans) == -1) {
|
||||
fprintf(stderr, "Error at ioctl errno =%d\n", errno);
|
||||
return (-1);
|
||||
}
|
||||
close(LispKbdFd);
|
||||
close(LispWindowFd);
|
||||
|
||||
#ifdef TRUECOLOR
|
||||
truecolor_before_raid();
|
||||
#endif /* TRUECOLOR */
|
||||
|
||||
#ifndef DISPLAYBUFFER
|
||||
size = ((displaywidth * displayheight / 8 + (getpagesize() - 1)) & -getpagesize());
|
||||
|
||||
if ((HideDisp68k = malloc(size)) == 0) {
|
||||
printf("can't malloc hide space\n");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
copy_region(DisplayRegion68k, HideDisp68k, DisplayRasterWidth, displayheight);
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
#ifdef COLOR
|
||||
save_colormap();
|
||||
|
||||
#ifndef DISPLAYBUFFER
|
||||
if (Inited_Color) {
|
||||
#else
|
||||
if (MonoOrColor == COLOR_SCREEN) {
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
/* save color image */
|
||||
size =
|
||||
((displaywidth * displayheight + (getpagesize() - 1)) & -getpagesize()); /* 8 bit depth */
|
||||
if ((HideColorDisp68k = malloc(size)) == 0) {
|
||||
printf("can't malloc hide space\n");
|
||||
return (-1);
|
||||
}
|
||||
copy_region(ColorDisplayRegion68k, HideColorDisp68k, DisplayRasterWidth * 8, displayheight);
|
||||
} /* end if(MonoOrColor) */
|
||||
#endif /* COLOR */
|
||||
|
||||
clear_display();
|
||||
|
||||
#ifdef DISPLAYBUFFER
|
||||
pr_close(ColorDisplayPixrect);
|
||||
close(FrameBufferFd);
|
||||
#endif
|
||||
|
||||
if (Win_security_p) {
|
||||
switch (vfork()) {
|
||||
case -1: /* Error */ (void)fprintf(stderr, "display_before_exit: Fork failed.\n"); exit(1);
|
||||
|
||||
case 0: /* Child */
|
||||
(void)execl(SV_RELEASE, "sv_release", NULL);
|
||||
/* should not return */
|
||||
(void)fprintf(stderr, "display_before_exit: exec for sv_release failed\n");
|
||||
exit(1);
|
||||
|
||||
default: /* Parent */
|
||||
/* do nothing */
|
||||
break;
|
||||
}
|
||||
(void)wait(&status); /* child dies after changing 16 */
|
||||
|
||||
if (status.w_retcode != 0) {
|
||||
(void)fprintf(stderr, "device_before_raid: failed to set ownership of win devices\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#if defined(XWINDOW) || defined(DOS)
|
||||
(currentdsp->cleardisplay)(currentdsp);
|
||||
@@ -1103,12 +992,9 @@ int device_after_raid() {
|
||||
|
||||
int_init();
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
FD_SET(LispWindowFd, &LispReadFds);
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
#ifdef MAIKO_ENABLE_ETHERNET
|
||||
FD_SET(ether_fd, &LispReadFds);
|
||||
if (ether_fd > 0) FD_SET(ether_fd, &LispReadFds);
|
||||
#endif /* MAIKO_ENABLE_ETHERNET */
|
||||
|
||||
#ifdef XWINDOW
|
||||
@@ -1145,107 +1031,6 @@ int device_after_raid() {
|
||||
|
||||
static int re_init_display(int lisp_display_addr, int display_max)
|
||||
{
|
||||
#ifdef SUNDISPLAY
|
||||
int mmapstat, size;
|
||||
struct pixrect *ColorFb;
|
||||
extern struct pixrect *ColorDisplayPixrect, *DisplayRegionPixrect;
|
||||
extern int DisplayType;
|
||||
|
||||
union wait status;
|
||||
|
||||
if (Win_security_p) {
|
||||
switch (vfork()) {
|
||||
case -1: /* Error */ (void)fprintf(stderr, "re_init_display: Fork failed.\n"); exit(1);
|
||||
|
||||
case 0: /* Child */
|
||||
(void)execl(SV_ACQUIRE, "sv_acquire", "0", "256", "250", NULL);
|
||||
/* should not return */
|
||||
(void)fprintf(stderr, "re_init_display: exec for sv_acquire failed\n");
|
||||
exit(1);
|
||||
|
||||
default: /* Parent */
|
||||
/* do nothing */
|
||||
break;
|
||||
}
|
||||
(void)wait(&status); /* child dies after changing 6 */
|
||||
|
||||
if (status.w_retcode != 0) {
|
||||
(void)fprintf(stderr, "re_init_display: failed to set ownership of win devices\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
mess_init();
|
||||
if ((LispWindowFd = win_screennew(&LispScreen)) == -1) {
|
||||
fprintf(stderr, "init_display: can't create LispWindow\n");
|
||||
return (-1);
|
||||
} else {
|
||||
#ifdef KBINT
|
||||
int_io_open(LispWindowFd);
|
||||
fcntl(LispWindowFd, F_SETFL, fcntl(LispWindowFd, F_GETFL, 0) | O_NONBLOCK);
|
||||
|
||||
#ifdef FX_AR_124
|
||||
/* For AR 124. Type4 driver bug?? by m.matsuda */
|
||||
{
|
||||
long i;
|
||||
for (i = 0; i < 900000; i++)
|
||||
;
|
||||
}
|
||||
#endif /* FX_AR_124 */
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef DISPLAYBUFFER
|
||||
/* for CGFOUR dev */
|
||||
if (DisplayType == SUN4COLOR) {
|
||||
ColorFb = pr_open("/dev/fb");
|
||||
pr_set_plane_group(ColorFb, PIXPG_OVERLAY_ENABLE);
|
||||
pr_rop(ColorFb, 0, 0, ColorFb->pr_width, ColorFb->pr_height, PIX_SET, 0, 0, 0);
|
||||
pr_set_plane_group(ColorFb, PIXPG_OVERLAY);
|
||||
}
|
||||
#else /* DISPLAYBUFFER is T */
|
||||
/* ColorDisplayPixrect = pr_open("/dev/fb");
|
||||
pr_putcolormap(ColorDisplayPixrect, 1, 1, &black, &black, &black);
|
||||
pr_putcolormap(ColorDisplayPixrect, 0, 1, &white, &white, &white);
|
||||
pr_putcolormap(ColorDisplayPixrect, 255, 1, &black, &black, &black);
|
||||
pr_putcolormap(ColorDisplayPixrect,
|
||||
(1<<ColorDisplayPixrect->pr_depth)-1, 1,
|
||||
&black, &black, &black);
|
||||
***/
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
init_cursor();
|
||||
|
||||
#ifndef DISPLAYBUFFER
|
||||
size = ((displaywidth * displayheight / 8 + (getpagesize() - 1)) & -getpagesize());
|
||||
mmapstat = (int)mmap(DisplayRegion68k, size, PROT_READ | PROT_WRITE,
|
||||
#ifdef OS4
|
||||
MAP_FIXED |
|
||||
#endif /* OS4 */
|
||||
|
||||
MAP_SHARED,
|
||||
FrameBufferFd, 0);
|
||||
|
||||
if (mmapstat == -1) {
|
||||
fprintf(stderr, "re_init_display: ERROR at mmap system call\n");
|
||||
fprintf(stderr, "errno = %d\n\n", errno);
|
||||
return (0);
|
||||
}
|
||||
|
||||
copy_region(HideDisp68k, DisplayRegion68k, DisplayRasterWidth, displayheight);
|
||||
|
||||
free(HideDisp68k);
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
#ifdef DISPLAYBUFFER
|
||||
ColorDisplayPixrect = pr_open("/dev/fb");
|
||||
flush_display_buffer();
|
||||
/* refresh_CG6; */
|
||||
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -1254,163 +1039,6 @@ static int re_init_display(int lisp_display_addr, int display_max)
|
||||
|
||||
static int re_init_display(int lisp_display_addr, int display_max)
|
||||
{
|
||||
#ifdef SUNDISPLAY
|
||||
int mmapstat, size;
|
||||
struct pixrect *ColorFb;
|
||||
struct pixrect *color_source;
|
||||
extern int DisplayType;
|
||||
union wait status;
|
||||
|
||||
if (Win_security_p) {
|
||||
switch (vfork()) {
|
||||
case -1: /* Error */ (void)fprintf(stderr, "re_init_display: Fork failed.\n"); exit(1);
|
||||
|
||||
case 0: /* Child */
|
||||
(void)execl(SV_ACQUIRE, "sv_acquire", "0", "256", "250", NULL);
|
||||
/* should not return */
|
||||
(void)fprintf(stderr, "re_init_display: exec for sv_acquire failed\n");
|
||||
exit(1);
|
||||
|
||||
default: /* Parent */
|
||||
/* do nothing */
|
||||
break;
|
||||
}
|
||||
(void)wait(&status); /* child dies after changing 6 */
|
||||
|
||||
if (status.w_retcode != 0) {
|
||||
(void)fprintf(stderr, "re_init_display: failed to set ownership of win devices\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
mess_init();
|
||||
if ((LispWindowFd = win_screennew(&LispScreen)) == -1) {
|
||||
fprintf(stderr, "init_display: can't create LispWindow\n");
|
||||
return (-1);
|
||||
} else {
|
||||
#ifdef KBINT
|
||||
int_io_open(LispWindowFd);
|
||||
fcntl(LispWindowFd, F_SETFL, fcntl(LispWindowFd, F_GETFL, 0) | O_NONBLOCK);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef DISPLAYBUFFER
|
||||
if ((FrameBufferFd = open(LispScreen.scr_fbname, 2)) == -1) {
|
||||
perror("init_display: can't open FrameBuffer\n");
|
||||
exit(-1);
|
||||
}
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
restore_colormap();
|
||||
|
||||
if (MonoOrColor == MONO_SCREEN) {
|
||||
#ifndef DISPLAYBUFFER
|
||||
/* for CGFOUR dev */
|
||||
if (DisplayType == SUN4COLOR) {
|
||||
ColorFb = pr_open("/dev/fb");
|
||||
pr_set_plane_group(ColorFb, PIXPG_OVERLAY_ENABLE);
|
||||
pr_rop(ColorFb, 0, 0, ColorFb->pr_width, ColorFb->pr_height, PIX_SET, 0, 0, 0);
|
||||
pr_set_plane_group(ColorFb, PIXPG_OVERLAY);
|
||||
}
|
||||
#else /* DISPLAYBUFFER is T */
|
||||
/* ColorDisplayPixrect = pr_open("/dev/fb");
|
||||
pr_putcolormap(ColorDisplayPixrect, 1, 1, &black, &black, &black);
|
||||
pr_putcolormap(ColorDisplayPixrect, 0, 1, &white, &white, &white);
|
||||
pr_putcolormap(ColorDisplayPixrect, 255, 1, &black, &black, &black);
|
||||
pr_putcolormap(ColorDisplayPixrect,
|
||||
(1<<ColorDisplayPixrect->pr_depth)-1, 1,
|
||||
&black, &black, &black);
|
||||
***/
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
init_cursor();
|
||||
|
||||
#ifndef DISPLAYBUFFER
|
||||
size = ((displaywidth * displayheight / 8 + (getpagesize() - 1)) & -getpagesize());
|
||||
|
||||
mmapstat = (int)mmap(DisplayRegion68k, size, PROT_READ | PROT_WRITE,
|
||||
#ifdef OS4
|
||||
MAP_FIXED |
|
||||
#endif /* OS4 */
|
||||
|
||||
MAP_SHARED,
|
||||
FrameBufferFd, 0);
|
||||
if (Inited_Color)
|
||||
mmapstat = (int)mmap(ColorDisplayRegion68k, Dispcolorsize, PROT_READ | PROT_WRITE,
|
||||
#ifdef OS4
|
||||
MAP_FIXED |
|
||||
#endif /* OS4 */
|
||||
|
||||
MAP_SHARED,
|
||||
FrameBufferFd, 0x40000);
|
||||
|
||||
if (mmapstat == -1) {
|
||||
fprintf(stderr, "re_init_display: ERROR at mmap system call\n");
|
||||
fprintf(stderr, "errno = %d\n\n", errno);
|
||||
return (0);
|
||||
}
|
||||
/* restore mono image */
|
||||
copy_region(HideDisp68k, DisplayRegion68k, DisplayRasterWidth, displayheight);
|
||||
|
||||
free(HideDisp68k);
|
||||
|
||||
if (Inited_Color) { /* restore color image */
|
||||
copy_region(HideColorDisp68k, ColorDisplayRegion68k, DisplayRasterWidth * 8, displayheight);
|
||||
free(HideColorDisp68k);
|
||||
} /* end if( Inited_Color ) */
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
#ifdef DISPLAYBUFFER
|
||||
ColorDisplayPixrect = pr_open("/dev/fb");
|
||||
flush_display_buffer();
|
||||
/* refresh_CG6; */
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
} else { /* MonoOrColor is COLOR_SCREEN */
|
||||
ColorFb = pr_open("/dev/fb");
|
||||
#ifdef DISPLAYBUFFER
|
||||
ColorDisplayPixrect = ColorFb;
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
color_source = mem_point(displaywidth, displayheight, 8, ColorDisplayRegion68k);
|
||||
pr_rop(ColorFb, 0, 0, displaywidth, displayheight, PIX_SRC, color_source, 0, 0);
|
||||
#ifndef DISPLAYBUFFER
|
||||
pr_set_plane_group(ColorFb, PIXPG_OVERLAY_ENABLE);
|
||||
pr_rop(ColorFb, 0, 0, ColorFb->pr_width, ColorFb->pr_height, PIX_CLR, 0, 0, 0);
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
pr_set_plane_group(ColorFb, PIXPG_8BIT_COLOR);
|
||||
init_cursor();
|
||||
mmapstat = (int)mmap(ColorDisplayRegion68k, Dispcolorsize, PROT_READ | PROT_WRITE,
|
||||
#ifdef OS4
|
||||
MAP_FIXED |
|
||||
#endif
|
||||
MAP_SHARED,
|
||||
FrameBufferFd, 0x40000);
|
||||
if (mmapstat == -1) {
|
||||
perror("cgfour_init_color_display: ERROR at mmap system call\n");
|
||||
error(
|
||||
"cgfour_init_color_display: ERROR at mmap system call\n You may be able to continue by "
|
||||
"typing 'q'");
|
||||
/* printf("MMAP FAIL:BMBASE=0x%x\nNATIVE:= 0x%x\nLISPBASEN:= 0x%x\n",
|
||||
color_bitmapbase,ColorDisplayRegion68k,Lisp_world);
|
||||
*/
|
||||
return (NIL);
|
||||
} /* end if(mmapstat) */
|
||||
|
||||
#ifndef DISPLAYBUFFER
|
||||
/* restore mono image */
|
||||
copy_region(HideDisp68k, DisplayRegion68k, DisplayRasterWidth, displayheight);
|
||||
|
||||
free(HideDisp68k);
|
||||
#endif /* DISPLAYBUFFER */
|
||||
|
||||
/* restore coloe image */
|
||||
copy_region(HideColorDisp68k, ColorDisplayRegion68k, DisplayRasterWidth * 8, displayheight);
|
||||
|
||||
free(HideColorDisp68k);
|
||||
} /* end if(MonoOrColor) */
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ int c_string_to_lisp_string(char *C, LispPTR Lisp) {
|
||||
register size_t i;
|
||||
register char *dp;
|
||||
for (i = 0, dp = C; i < length + 1; i++) {
|
||||
int ch = *dp++;
|
||||
char ch = *dp++;
|
||||
#ifdef DOS
|
||||
if (ch == '\\') dp++; /* skip 2nd \ in \\ in C strings */
|
||||
#endif /* DOS */
|
||||
|
||||
@@ -36,9 +36,6 @@
|
||||
#define alarm(x) 1
|
||||
#endif /* DOS */
|
||||
|
||||
#if defined(SUNDISPLAY) && defined(OLD_CURSOR)
|
||||
#include <sunwindow/win_cursor.h>
|
||||
#endif
|
||||
|
||||
#include "hdw_conf.h"
|
||||
#include "lispemul.h"
|
||||
@@ -61,9 +58,6 @@
|
||||
#include "perrnodefs.h"
|
||||
#include "ufsdefs.h"
|
||||
|
||||
#ifdef GCC386
|
||||
#include "inlnPS2.h"
|
||||
#endif
|
||||
|
||||
/* Error return values from VMEMSAVE */
|
||||
#define COMPLETESYSOUT NIL
|
||||
@@ -319,9 +313,6 @@ LispPTR vmem_save(char *sysout_file_name)
|
||||
register int i;
|
||||
char tempname[MAXPATHLEN];
|
||||
register int rval;
|
||||
#ifdef SUNDISPLAY
|
||||
/* DLword *bmptr; */
|
||||
#endif
|
||||
#ifndef DOS
|
||||
extern int ScreenLocked;
|
||||
extern DLword *EmCursorX68K;
|
||||
@@ -332,17 +323,7 @@ LispPTR vmem_save(char *sysout_file_name)
|
||||
|
||||
/* remove cursor image from screen */
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef OLD_CURSOR
|
||||
win_setcursor(LispWindowFd, &InvisibleCursor);
|
||||
#else
|
||||
ScreenLocked = T;
|
||||
taking_mouse_down();
|
||||
/* bmptr = EmCursorBitMap68K;
|
||||
EmCursorBitMap68K= NullCursor;*/
|
||||
#endif /* OLD_CURSOR */
|
||||
|
||||
#elif DOS
|
||||
#if DOS
|
||||
/* For DOS, must also take the mouse cursor away (it's */
|
||||
/* written into the display-region bitmap). */
|
||||
currentdsp->device.locked++;
|
||||
@@ -515,17 +496,7 @@ LispPTR vmem_save(char *sysout_file_name)
|
||||
}
|
||||
|
||||
/* restore cursor image to screen */
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef OLD_CURSOR
|
||||
win_setcursor(LispWindowFd, &CurrentCursor);
|
||||
#else
|
||||
ScreenLocked = T;
|
||||
/*EmCursorBitMap68K = bmptr ;*/
|
||||
taking_mouse_up(*EmCursorX68K, *EmCursorY68K);
|
||||
ScreenLocked = NIL;
|
||||
#endif /* OLD_CURSOR */
|
||||
|
||||
#elif DOS
|
||||
#if DOS
|
||||
/* Must also put the mouse back. */
|
||||
(currentdsp->mouse_visible)(IOPage68K->dlmousex, IOPage68K->dlmousey);
|
||||
currentdsp->device.locked--;
|
||||
|
||||
@@ -53,7 +53,7 @@ unsigned long clipping_Xbitblt(DspInterface dsp, DLword *dummy, int x, int y, in
|
||||
XPutImage(dsp->display_id, dsp->DisplayWindow, dsp->Copy_GC, &dsp->ScreenBitmap, x, y,
|
||||
x - dsp->Visible.x, y - dsp->Visible.y, w, h);
|
||||
XFlush(dsp->display_id);
|
||||
XUNLOCK;
|
||||
XUNLOCK(dsp);
|
||||
return (1);
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ unsigned long clipping_Xbitblt(DspInterface dsp, DLword *dummy, int x, int y, in
|
||||
XPutImage(dsp->display_id, dsp->DisplayWindow, dsp->Copy_GC, &dsp->ScreenBitmap, x, y,
|
||||
x - dsp->Visible.x, y - dsp->Visible.y, w, h);
|
||||
XFlush(dsp->display_id);
|
||||
XUNLOCK;
|
||||
XUNLOCK(dsp);
|
||||
}
|
||||
return (1);
|
||||
|
||||
|
||||
37
src/xc.c
37
src/xc.c
@@ -20,6 +20,7 @@
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
#include <signal.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
@@ -98,6 +99,7 @@
|
||||
#include "ubf3defs.h"
|
||||
#include "unwinddefs.h"
|
||||
#include "vars3defs.h"
|
||||
#include "xwinmandefs.h"
|
||||
#include "z2defs.h"
|
||||
|
||||
#ifdef DOS
|
||||
@@ -107,17 +109,14 @@ extern IOPAGE *IOPage68K;
|
||||
extern KbdInterface currentkbd;
|
||||
extern DspInterface currentdsp;
|
||||
extern MouseInterface currentmouse;
|
||||
#else
|
||||
extern DspInterface currentdsp;
|
||||
#endif /* DOS */
|
||||
|
||||
typedef struct conspage ConsPage;
|
||||
typedef ByteCode *InstPtr;
|
||||
|
||||
#ifdef GCC386
|
||||
register InstPtr pccache asm("si");
|
||||
register LispPTR *cspcache asm("di");
|
||||
register LispPTR tscache asm("bx");
|
||||
#include "inlnPS2.h"
|
||||
#elif (DOS && OPDISP)
|
||||
#if (DOS && OPDISP)
|
||||
#include "inlndos.h"
|
||||
register InstPtr pccache asm("si");
|
||||
register LispPTR *cspcache asm("di");
|
||||
@@ -145,11 +144,8 @@ register LispPTR tscache asm("bx");
|
||||
#define PVARL PVar
|
||||
#define IVARL IVar
|
||||
|
||||
#ifdef XWINDOW
|
||||
extern int Event_Req; /* != 0 when it's time to check X events
|
||||
on machines that don't get them reliably
|
||||
(e.g. Suns running OpenWindows) */
|
||||
#endif /* XWINDOW */
|
||||
/* used by SIGIO signal handler to indicate I/O may be possible */
|
||||
extern volatile sig_atomic_t IO_Signalled;
|
||||
|
||||
#ifdef PCTRACE
|
||||
/* For keeping a trace table (ring buffer) of 100 last PCs */
|
||||
@@ -1116,17 +1112,22 @@ check_interrupt:
|
||||
Irq_Stk_End = (UNSIGNED)EndSTKP;
|
||||
}
|
||||
|
||||
/* Check for an IRQ request */
|
||||
/* This is a good time to process keyboard/mouse and ethernet I/O
|
||||
* X events are not managed in the async/SIGIO code while
|
||||
* raw ethernet, serial port, and socket connections are.
|
||||
* If the system is configured with SIGIO handling we have a hint
|
||||
* that allows us to cheaply skip if there's nothing to do
|
||||
*/
|
||||
process_Xevents(currentdsp);
|
||||
|
||||
if (IO_Signalled) {
|
||||
IO_Signalled = FALSE;
|
||||
process_io_events();
|
||||
}
|
||||
|
||||
if ((Irq_Stk_End <= 0) || (Irq_Stk_Check <= 0) || need_irq) {
|
||||
if (StkOffset_from_68K(CSTKPTR) > InterfacePage->stackbase) {
|
||||
/* Interrupts not Disabled */
|
||||
/* XXX: what on earth is this code trying to accomplish by calling
|
||||
getsignaldata
|
||||
*/
|
||||
#if !defined(KBINT) || defined(OS4)
|
||||
getsignaldata(0);
|
||||
#endif
|
||||
EXT;
|
||||
update_timer();
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user