Installers for Linux: workflow changes and more to support standard Linux installations (#1058)
* Adding LANG environment variable to docker image; adding MAIKO_ and MEDLEY_INSTALLDIR environment variables; Changing /usr/local/bin/run-medley to a symbolic link instead of a shell script * Added draft input to all workflows, so that can create draft releases as well as regular releases * Update buildDocker.yml to handle deprecation of set-output and to update versions of actions to handle node 12 to node 16 transition. * Added scripts and updated github workflows to support creation of deb installers for Linux and WSL * Fix minor bug in buildLoadup.yml * First pass implementation of deb installer * Fixing wget of vncviewer in build_deb.sh * Fix typo in buildLoadup.yml in call to build_deb.sh * Multiple small fixes to medley.sh from debugging. Change postinst script and how its created in build_deb. Add postrm script in build_deb. * Reworking vnc portion of Medley.sh - including removing dependency on startx and xinit * Misc fixes to medley_vnc.sh script; fix creation of postinst and postrm in build_deb.sh * Cleaning up window geometry amd screen size in medley.sh * Created apps.sysout loadup with rooms, notecards, clos on top of full.sysout; added plumbing for -apps flag to run-medley to run this syout; created a new init file for this sysout that calls MEDLEYDIR-INIT; all of this is based on online.sysout * Create UNIXUTILS file in library with ShellWhich function - linux which command equivalent. Also move ShellCommand from UNIXPRINT to UNIXUTILS. * Adding UNIXUTILS to LOADUP-FULL so it gets included in full.sysout * Change of names from open(er) to browse(r). Refine the browse(r) functions a bit * Minor bug fixes * Update Apps.ShowDoc to new ShellBrowsefunction * Adding apps support into the .github builds; adding xdg-utils as dependecy in debs * fixing bug as to where notecards is checked out in BuildLoadup. Needs to be before loadups so app.sysout can be built * Added defaulting to Interlisp exec tomedley.sh and APPS-INIT. Works only in apps.sysout. Added wlsu package to wsl debs since wlsview is not always installed by defailt. Fixed Notefiles directories issues in Apps.Init. Made medley.sh compute medleydir based on where the script is located. Can now work for /usr/lcal/interlisp as well as local directories. * Added -id - feature to medley.sh so id can be directory mae. Removed extraneous set -x commands in medley.sh from debugging. In build_deb.sh changed compression to xz for deb files since debian does not support the zstd compression that ubuntu uses. * For wsl deb files, make sure wslu package is not 4.0 - which is bad. Change how we choose an open port and open display in medley_vnc.sh. Add notecards download to build_deb.sh. Fix type in medley.sh * Add (FILES UNIXUTILS) to UNIXPRINTCOMS so that ShellCommand is loaded in case only UNIXPRINT is loaded. For backward compatibility. * Moved medley.sh and associates to script/medley dir; fixed up args to medley.sh; added usage and --help to medley.sh * Add comprehensive tar files to releases to match deb files for local installs; add --id -- arg to medley.sh * Remove remaining reference to usr/local/interlisp to ensure local install works * Fix bug in buildLoadup - couldn't file install tars * Add medley symbolic linkto loadups, so it comes thru to local install tars * Fix up error messaging in medley.sh scripts * Created man page for medley and added it throughout build up, installers, etc. * Add support for a downloads page on OIO, including creating said page while building a release * Fix full_release_tag in downloads section of buildLoadup.yml * Misc fixups on downloads page * Adding online man page stored on oio static server. * Fix minor bug in man installation in deb file
This commit is contained in:
61
.github/workflows/buildDocker.yml
vendored
61
.github/workflows/buildDocker.yml
vendored
@@ -21,6 +21,12 @@ name: 'Build/Push Docker Image'
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- 'true'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
type: choice
|
||||
@@ -34,6 +40,11 @@ on:
|
||||
description: "'True' if medley docker build completed successully"
|
||||
value: ${{ jobs.complete.outputs.build_successful }}
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
required: false
|
||||
type: string
|
||||
default: 'false'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
required: false
|
||||
@@ -60,13 +71,20 @@ jobs:
|
||||
inputs:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
force: ${{ steps.force.outputs.force }}
|
||||
draft: ${{ steps.one.outputs.draft }}
|
||||
force: ${{ steps.one.outputs.force }}
|
||||
steps:
|
||||
- id: force
|
||||
- id: one
|
||||
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";
|
||||
then
|
||||
echo "workflow_dispatch";
|
||||
echo "draft=${{ github.event.inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ github.event.inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
else
|
||||
echo "workflow_call";
|
||||
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
fi
|
||||
|
||||
|
||||
@@ -85,7 +103,7 @@ jobs:
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
@@ -117,7 +135,7 @@ jobs:
|
||||
steps:
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Set repo env variables
|
||||
- name: Set repo/docker env variables
|
||||
@@ -125,22 +143,22 @@ jobs:
|
||||
run: |
|
||||
REPO_NAME=${GITHUB_REPOSITORY#*/}
|
||||
echo "REPO_NAME=${REPO_NAME}" >> ${GITHUB_ENV}
|
||||
echo ::set-output name=repo_name::${REPO_NAME}
|
||||
echo "repo_name=${REPO_NAME}" >> ${GITHUB_OUTPUT}
|
||||
DOCKER_NAMESPACE=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
|
||||
echo "DOCKER_NAMESPACE=${DOCKER_NAMESPACE}" >> ${GITHUB_ENV}
|
||||
echo ::set-output name=docker_namespace::${DOCKER_NAMESPACE}
|
||||
echo "docker_namespace=${DOCKER_NAMESPACE}" >> ${GITHUB_OUTPUT}
|
||||
|
||||
# Get tag of latest Medley release.
|
||||
- name: Get Medley Release Information
|
||||
id: release_info
|
||||
uses: abatilo/release-info-action@v1.3.0
|
||||
uses: abatilo/release-info-action@v1.3.2
|
||||
with:
|
||||
owner: ${{ github.repository_owner }}
|
||||
repo: medley
|
||||
|
||||
# Get asset tars from latest Medley release
|
||||
- name: Download Release Assets
|
||||
uses: robinraju/release-downloader@v1.2
|
||||
uses: robinraju/release-downloader@v1.7
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/medley
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -155,7 +173,7 @@ jobs:
|
||||
docker pull ${DOCKER_NAMESPACE}/maiko:latest
|
||||
MAIKO_RELEASE=$(docker run --entrypoint /bin/bash ${DOCKER_NAMESPACE}/maiko:latest -c "echo \${MAIKO_RELEASE}")
|
||||
echo "MAIKO_RELEASE=${MAIKO_RELEASE}" >> ${GITHUB_ENV}
|
||||
echo ::set-output name=maiko_release::${MAIKO_RELEASE}
|
||||
echo "maiko_release=${MAIKO_RELEASE}" >> ${GITHUB_OUTPUT}
|
||||
|
||||
# Setup environment variables
|
||||
- name: Setup Environment Variables
|
||||
@@ -163,11 +181,14 @@ jobs:
|
||||
run: |
|
||||
RELEASE_TAG=${{ steps.release_info.outputs.latest_tag }}
|
||||
DOCKER_IMAGE=${DOCKER_NAMESPACE}/${REPO_NAME}
|
||||
DOCKER_TAGS="${DOCKER_IMAGE}:latest,${DOCKER_IMAGE}:${RELEASE_TAG#*-}_${MAIKO_RELEASE#*-}"
|
||||
echo ::set-output name=docker_tags::${DOCKER_TAGS}
|
||||
echo ::set-output name=docker_image::${DOCKER_IMAGE}
|
||||
echo ::set-output name=build_time::$(date -u +'%Y-%m-%dT%H:%M:%SZ')
|
||||
echo ::set-output name=release_tag::${RELEASE_TAG}
|
||||
if [ "${{ needs.inputs.outputs.draft }}" = "false" ];
|
||||
then DOCKER_TAGS="${DOCKER_IMAGE}:latest,${DOCKER_IMAGE}:${RELEASE_TAG#*-}_${MAIKO_RELEASE#*-}"
|
||||
else DOCKER_TAGS="${DOCKER_IMAGE}:draft"
|
||||
fi
|
||||
echo "docker_tags=${DOCKER_TAGS}" >> ${GITHUB_OUTPUT}
|
||||
echo "docker_image=${DOCKER_IMAGE}" >> ${GITHUB_OUTPUT}
|
||||
echo "build_time=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> ${GITHUB_OUTPUT}
|
||||
echo "release_tag=${RELEASE_TAG}" >> ${GITHUB_OUTPUT}
|
||||
echo "release_tag=${RELEASE_TAG}" >> ${GITHUB_ENV}
|
||||
|
||||
# Setup the Docker Machine Emulation environment.
|
||||
@@ -183,7 +204,7 @@ jobs:
|
||||
|
||||
# Login into DockerHub - required to store the created image
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
@@ -192,7 +213,7 @@ jobs:
|
||||
# checked out and the release tars just downloaded.
|
||||
# Push the result to Docker Hub
|
||||
- name: Build Docker Image for Push to Docker Hub
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
builder: ${{ steps.buildx.outputs.name }}
|
||||
build-args: |
|
||||
@@ -225,7 +246,7 @@ jobs:
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
@@ -241,6 +262,6 @@ jobs:
|
||||
- name: Output
|
||||
id: output
|
||||
run: |
|
||||
echo ::set-output name=build_successful::'true'
|
||||
echo "build_successful='true'" >> ${GITHUB_OUTPUT}
|
||||
|
||||
######################################################################################
|
||||
|
||||
127
.github/workflows/buildLoadup.yml
vendored
127
.github/workflows/buildLoadup.yml
vendored
@@ -10,7 +10,7 @@
|
||||
#
|
||||
# 2022-01-17 Frank Halasz based on an earlier version of buildLoadup for Medley.
|
||||
#
|
||||
# Copyright 2022 by Interlisp.org
|
||||
# Copyright 2022-2023 by Interlisp.org
|
||||
#
|
||||
# ******************************************************************************
|
||||
|
||||
@@ -20,6 +20,12 @@ name: Build/Push Medley Release
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- 'true'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
type: choice
|
||||
@@ -33,6 +39,11 @@ on:
|
||||
description: "'True' if medley build completed successully"
|
||||
value: ${{ jobs.complete.outputs.build_successful }}
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
required: false
|
||||
type: string
|
||||
default: 'false'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
required: false
|
||||
@@ -54,13 +65,20 @@ jobs:
|
||||
inputs:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
force: ${{ steps.force.outputs.force }}
|
||||
draft: ${{ steps.one.outputs.draft }}
|
||||
force: ${{ steps.one.outputs.force }}
|
||||
steps:
|
||||
- id: force
|
||||
- id: one
|
||||
run: >
|
||||
if [ '${{ toJSON(inputs) }}' = 'null' ];
|
||||
then echo "force=${{ github.event.inputs.force }}" >> $GITHUB_OUTPUT; echo "workflow_dispatch";
|
||||
else echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT; echo "workflow_call";
|
||||
then
|
||||
echo "workflow_dispatch";
|
||||
echo "draft=${{ github.event.inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ github.event.inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
else
|
||||
echo "workflow_call";
|
||||
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
fi
|
||||
|
||||
|
||||
@@ -129,12 +147,20 @@ jobs:
|
||||
- name: Setup Environment Variables
|
||||
id: setup_env
|
||||
run: |
|
||||
echo "build_time=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT
|
||||
echo "build_time=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> ${GITHUB_OUTPUT}
|
||||
echo "TARBALL_DIR=installers/deb/tmp/tarballs" >>${GITHUB_ENV}
|
||||
echo "DEBS_DIR=installers/deb/debs" >>${GITHUB_ENV}
|
||||
echo "TARS_DIR=installers/deb/tars" >>${GITHUB_ENV}
|
||||
echo "MEDLEY_RELEASE_TAG=${RELEASE_TAG}" >>${GITHUB_ENV}
|
||||
|
||||
# Setup some needed dirs in workspace
|
||||
- name: Create work dirs
|
||||
run: mkdir -p ${TARBALL_DIR}
|
||||
|
||||
# Get Maiko release information, retrieves the name of the latest
|
||||
# release. Used to download the correct Maiko release
|
||||
- name: Get Maiko Release Information
|
||||
id: latest_version
|
||||
id: maiko
|
||||
uses: abatilo/release-info-action@v1.3.2
|
||||
with:
|
||||
owner: ${{ github.repository_owner }}
|
||||
@@ -147,42 +173,59 @@ jobs:
|
||||
repository: ${{ github.repository_owner }}/maiko
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
latest: true
|
||||
fileName: "${{ steps.latest_version.outputs.latest_tag }}-linux.x86_64.tgz"
|
||||
out-file-path: ${{ env.TARBALL_DIR }}
|
||||
fileName: "${{ steps.maiko.outputs.latest_tag }}-linux.*.tgz"
|
||||
|
||||
- name: Untar Maiko Release
|
||||
- name: Untar Maiko Release for use in loadup
|
||||
run: |
|
||||
tar -xvzf "${{ steps.latest_version.outputs.latest_tag }}-linux.x86_64.tgz"
|
||||
tar -xzf "${TARBALL_DIR}/${{ steps.maiko.outputs.latest_tag }}-linux.x86_64.tgz"
|
||||
|
||||
# Checkout Notecards and tar it in the tarballsdir
|
||||
- name: Checkout Notecards
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/notecards
|
||||
path: ./notecards
|
||||
- run: mv ./notecards ../notecards
|
||||
- name: Tar notecards into tarball dir
|
||||
run: |
|
||||
cd ..
|
||||
tar cfz medley/${TARBALL_DIR}/notecards.tgz notecards
|
||||
|
||||
#
|
||||
- name: Install vnc
|
||||
run: sudo apt-get update && sudo apt-get install -y tightvncserver
|
||||
|
||||
- name: Build Loadout
|
||||
- name: Build Loadup sysouts and databases
|
||||
run: |
|
||||
Xvnc -geometry 1280x720 :0 &
|
||||
export DISPLAY=":0"
|
||||
PATH="$PWD/maiko:$PATH"
|
||||
scripts/loadup-all.sh
|
||||
scripts/loadup-all.sh -apps
|
||||
|
||||
- name: Build loadups release tar
|
||||
run: |
|
||||
cd ..
|
||||
tar cfz medley/tmp/${RELEASE_TAG}-loadups.tgz \
|
||||
tar cfz medley/${TARBALL_DIR}/${MEDLEY_RELEASE_TAG}-loadups.tgz \
|
||||
medley/loadups/lisp.sysout \
|
||||
medley/loadups/full.sysout \
|
||||
medley/loadups/apps.sysout \
|
||||
medley/loadups/whereis.hash \
|
||||
medley/library/exports.all
|
||||
|
||||
- name: Build runtime release tar
|
||||
run: |
|
||||
cd ..
|
||||
tar cfz medley/tmp/${RELEASE_TAG}-runtime.tgz \
|
||||
tar cfz medley/${TARBALL_DIR}/${MEDLEY_RELEASE_TAG}-runtime.tgz \
|
||||
--exclude "*~" --exclude "*#*" \
|
||||
--exclude exports.all \
|
||||
medley/clos \
|
||||
medley/docs/dinfo \
|
||||
medley/docs/man-page/medley.1.gz \
|
||||
medley/doctools \
|
||||
medley/greetfiles \
|
||||
medley/rooms \
|
||||
medley/medley \
|
||||
medley/run-medley \
|
||||
medley/scripts \
|
||||
medley/fonts/displayfonts \
|
||||
@@ -194,25 +237,71 @@ jobs:
|
||||
medley/sources \
|
||||
medley/internal
|
||||
|
||||
|
||||
- name: Build .deb files for 3 architectures
|
||||
run: |
|
||||
cd installers/deb
|
||||
./build_deb.sh
|
||||
|
||||
- name: Delete existing release with same tag (if any)
|
||||
uses: cb80/delrel@latest
|
||||
with:
|
||||
tag: ${{ env.RELEASE_TAG }}
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Push the release
|
||||
id: push_release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts:
|
||||
tmp/${{ env.RELEASE_TAG }}-loadups.tgz,
|
||||
tmp/${{ env.RELEASE_TAG }}-runtime.tgz
|
||||
tag: ${{ env.RELEASE_TAG }}
|
||||
draft: false
|
||||
${{ env.TARBALL_DIR }}/${{ env.MEDLEY_RELEASE_TAG }}-loadups.tgz,
|
||||
${{ env.TARBALL_DIR }}/${{ env.MEDLEY_RELEASE_TAG }}-runtime.tgz,
|
||||
${{ env.DEBS_DIR }}/*.deb,
|
||||
${{ env.TARS_DIR }}/*.tgz
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
draft: ${{ needs.inputs.outputs.draft }}
|
||||
prerelease: false
|
||||
generateReleaseNotes: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Update the downloads page and the man page to the OIO satic page host
|
||||
run: |
|
||||
maiko_release_tag="${{ steps.maiko.outputs.latest_tag }}"
|
||||
medley_short_release_tag="${MEDLEY_RELEASE_TAG#medley-}"
|
||||
full_release_filename="${MEDLEY_RELEASE_TAG/medley/medley-full}_${maiko_release_tag#maiko-}"
|
||||
# Need info about where github stores assets because draft releases are not tagged
|
||||
release_url="${{ steps.push_release.outputs.html_url }}"
|
||||
github_subdir="$( echo "${release_url}" | sed -e "s#^.*/\([^/]\+\)\$#\1#g" )"
|
||||
#
|
||||
local_template="installers/downloads_page/medley_downloads.html"
|
||||
local_filename="medley_downloads.html"
|
||||
if [ "${{ needs.inputs.outputs.draft }}" = "true" ];
|
||||
then
|
||||
remote_filename="draft_downloads"
|
||||
else
|
||||
remote_filename="${local_filename%.html}"
|
||||
fi
|
||||
remote_filepath="/srv/oio/static/${remote_filename}"
|
||||
sed \
|
||||
-e "s/@@@FULL.RELEASE.FILENAME@@@/${full_release_filename}/g" \
|
||||
-e "s/@@@GITHUB.SUBDIR@@@/${github_subdir}/g" \
|
||||
-e "s/@@@MEDLEY.SHORT.RELEASE.TAG@@@/${medley_short_release_tag}/g" \
|
||||
< "${local_template}" > "${local_filename}"
|
||||
local_manpath="docs/man-page/man_medley.html"
|
||||
remote_manpath="/srv/oio/static/man_medley.html"
|
||||
echo "-rm ${remote_filepath}.oldold" > batch
|
||||
echo "-rename ${remote_filepath}.old ${remote_filepath}.oldold" >> batch
|
||||
echo "-rename ${remote_filepath}.html ${remote_filepath}.old" >> batch
|
||||
echo "-put ${local_filename} ${remote_filepath}.html" >> batch
|
||||
echo "-put ${local_manpath} ${remote_manpath}" >> batch
|
||||
eval $(ssh-agent)
|
||||
ssh-add - <<< "${SSH_KEY}"
|
||||
sftp -o StrictHostKeyChecking=no -b batch ubuntu@online.interlisp.org
|
||||
env:
|
||||
SSH_KEY: ${{ secrets.OIO_SSH_KEY }}
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Use set-sentry-action to determine set the sentry that says this release has
|
||||
|
||||
86
.github/workflows/buildReleaseInclDocker.yml
vendored
86
.github/workflows/buildReleaseInclDocker.yml
vendored
@@ -19,18 +19,96 @@ name: "Build/Push Release & Docker"
|
||||
# Run this workflow on ...
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- 'true'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- 'true'
|
||||
|
||||
workflow_call:
|
||||
outputs:
|
||||
successful:
|
||||
description: "'True' if medley build completed successully"
|
||||
value: ${{ jobs.complete.outputs.build_successful }}
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
required: false
|
||||
type: string
|
||||
default: 'false'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
required: false
|
||||
type: string
|
||||
default: 'false'
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
|
||||
# Jobs that compose this workflow
|
||||
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:
|
||||
draft: ${{ steps.one.outputs.draft }}
|
||||
force: ${{ steps.one.outputs.force }}
|
||||
steps:
|
||||
- id: one
|
||||
run: >
|
||||
if [ '${{ toJSON(inputs) }}' = 'null' ];
|
||||
then
|
||||
echo "workflow_dispatch";
|
||||
echo "draft=${{ github.event.inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ github.event.inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
else
|
||||
echo "workflow_call";
|
||||
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
fi
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
|
||||
# Build Loadup
|
||||
do_release:
|
||||
needs: inputs
|
||||
uses: ./.github/workflows/buildLoadup.yml
|
||||
with:
|
||||
draft: ${{ needs.inputs.outputs.draft }}
|
||||
force: ${{ needs.inputs.outputs.force }}
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Build Docker Image
|
||||
do_docker:
|
||||
needs: do_release
|
||||
needs: [inputs, do_release]
|
||||
uses: ./.github/workflows/buildDocker.yml
|
||||
with:
|
||||
draft: ${{ needs.inputs.outputs.draft }}
|
||||
force: ${{ needs.inputs.outputs.force }}
|
||||
secrets:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
|
||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -10,6 +10,7 @@ loadups/lisp.sysout
|
||||
loadups/full.sysout
|
||||
loadups/*.dribble
|
||||
loadups/whereis.hash
|
||||
loadups/apps.sysout
|
||||
|
||||
# manual cross-reference files
|
||||
|
||||
@@ -37,3 +38,8 @@ core
|
||||
# Mac OS detritus
|
||||
.DS_Store
|
||||
*.PS
|
||||
|
||||
# nano detritus
|
||||
*.swp
|
||||
*.save
|
||||
|
||||
|
||||
27
Dockerfile
27
Dockerfile
@@ -3,7 +3,7 @@
|
||||
# Dockerfile to build Medley image from latest Maiko image
|
||||
# plus latest release tars from github
|
||||
#
|
||||
# Copyright 2022 by Interlisp.org
|
||||
# Copyright 2022-2023 by Interlisp.org
|
||||
#
|
||||
# ******************************************************************************
|
||||
|
||||
@@ -29,26 +29,27 @@ LABEL maiko_release=$MAIKO_RELEASE
|
||||
ENV MEDLEY_BUILD_DATE=$BUILD_DATE
|
||||
ENV MEDLEY_RELEASE=$RELEASE_TAG
|
||||
|
||||
ARG INSTALL_LOCATION=/usr/local/interlisp
|
||||
ENV INSTALL_LOCATION=${INSTALL_LOCATION}
|
||||
ARG IL_INSTALLDIR=/usr/local/interlisp
|
||||
ENV IL_INSTALLDIR=${IL_INSTALLDIR}
|
||||
ENV MAIKO_INSTALLDIR=${IL_INSTALLDIR}/maiko
|
||||
ENV MEDLEY_INSTALLDIR=${IL_INSTALLDIR}/medley
|
||||
|
||||
ARG DOCKER_NAMESPACE=interlisp
|
||||
ENV DOCKER_NAMESPACE=${DOCKER_NAMESPACE}
|
||||
|
||||
# Copy over the release tars
|
||||
RUN mkdir -p ${INSTALL_LOCATION}
|
||||
ADD ./*.tgz ${INSTALL_LOCATION}
|
||||
ENV LANG=C.UTF-8
|
||||
|
||||
# Create a run_medley script in /usr/local/bin
|
||||
RUN mkdir -p /usr/local/bin && \
|
||||
echo "#!/bin/bash" > /usr/local/bin/run-medley && \
|
||||
echo "cd ${INSTALL_LOCATION}/medley" >> /usr/local/bin/run-medley && \
|
||||
echo './run-medley "$@"' >> /usr/local/bin/run-medley && \
|
||||
chmod ugo+x /usr/local/bin/run-medley
|
||||
# Copy over the release tars
|
||||
RUN mkdir -p ${IL_INSTALLDIR}
|
||||
ADD ./*.tgz ${IL_INSTALLDIR}
|
||||
|
||||
# Link run_medley script into /usr/local/bin
|
||||
RUN mkdir -p /usr/local/bin && \
|
||||
ln -s ${MEDLEY_INSTALLDIR}/run-medley /usr/local/bin/run-medley
|
||||
|
||||
# "Finalize" image
|
||||
EXPOSE 5900
|
||||
RUN adduser --disabled-password --gecos "" medley
|
||||
USER medley
|
||||
WORKDIR /home/medley
|
||||
ENTRYPOINT USER=medley Xvnc -geometry 1280x720 :0 & DISPLAY=:0 ${INSTALL_LOCATION}/medley/run-medley -full -g 1280x720 -sc 1280x720
|
||||
ENTRYPOINT USER=medley Xvnc -geometry 1280x720 :0 & DISPLAY=:0 ${MEDELY_INSTALLDIR}/run-medley -full -g 1280x720 -sc 1280x720
|
||||
|
||||
2
docs/man-page/man2html.sh
Executable file
2
docs/man-page/man2html.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
pandoc --from man --to html < medley.1 > man_medley.html
|
||||
92
docs/man-page/man_medley.html
Normal file
92
docs/man-page/man_medley.html
Normal file
@@ -0,0 +1,92 @@
|
||||
<h1>NAME</h1>
|
||||
<p><strong>medley</strong> — starts up Medley Interlisp</p>
|
||||
<h1>SYNOPSIS</h1>
|
||||
<p><strong>medley</strong> [ flags ... ] [ <em>SYSOUT_FILE</em> ] [ -- <em>PASS_ON_ARGS</em> ]</p>
|
||||
<h1>DESCRIPTION</h1>
|
||||
<p>Starts Medley Interlisp in a window.</p>
|
||||
<h1>OPTIONS</h1>
|
||||
<p><strong>MEDLEYDIR</strong> is an environment variable set by Medley and used by many of the options described below. MEDLEYDIR is the top level directory of the Medley installation that contains the specific medley script that is invoked after all symbolic links are resolved. In the standard global installation this will be /usr/local/interlisp/medley. But Medley can be installed in multiple places on any given machine and hence MEDLEYDIR is computed on each invocation of medley.</p>
|
||||
<h2>Flags</h2>
|
||||
|
||||
<dl>
|
||||
<dt><strong>-h, --help</strong></dt>
|
||||
<dd><p>Prints out a brief summary of the flags and arguments to medley.</p>
|
||||
</dd>
|
||||
<dt><strong>-z, --man</strong></dt>
|
||||
<dd><p>Show the man page for medley</p>
|
||||
</dd>
|
||||
<dt><strong>-f, --full</strong></dt>
|
||||
<dd><p>Start Medley from the standard “full” sysout. full.sysout includes a complete Interlisp and CommonLisp environment with a standard set of development tools. It does not include any of the applications built using Medley. (See <em>SYSOUT_FILE</em> below for more information on starting sysouts.)</p>
|
||||
</dd>
|
||||
<dt><strong>-l, --lisp</strong></dt>
|
||||
<dd><p>Start Medley from the standard “lisp” sysout. lisp.sysout only includes the basic Interlisp and CommonLisp environment. (See <em>SYSOUT_FILE</em> below for more information on starting sysouts.)</p>
|
||||
</dd>
|
||||
<dt><strong>-a, --apps</strong></dt>
|
||||
<dd><p>Start Medley from the standard “apps” sysout. apps.sysout includes everything in full.sysout plus Medley applications including Notecards, Rooms and CLOS. It also includes pre-installed links to key Medley documentation. (See <em>SYSOUT_FILE</em> below for more information on starting sysouts.)</p>
|
||||
</dd>
|
||||
<dt><strong>-e, --interlisp (relevent only when --apps is specified)</strong></dt>
|
||||
<dd><p>Make the initial Exec window within Medley be an Interlisp Exec. Default is to start in an XCL Exec.</p>
|
||||
</dd>
|
||||
<dt><strong>-n, --noscroll</strong></dt>
|
||||
<dd><p>Ordinarily Medley displays scroll bars to enable the user to pan the Medley virtual display within the Medley window. This is true even when the entire virtual display fits within the window. Specifying --noscroll turns off the scroll bars. Note: If --noscroll is specified and the virtual screen is larger than the window, there will be no way to pan to the non-visible parts of the virtual display.</p>
|
||||
</dd>
|
||||
<dt><strong>-g <em>WxH</em>, --geometry <em>WxH</em></strong></dt>
|
||||
<dd><p>Sets the size of the X Window (or VNC window) that Medley runs in to be Width x Height. (Full X Windows geomtery specification with +X+Y is not currently supported). If --geometry is not specified but --screensize is, then the window size will be determined based on the --screensize values and the --noscroll flag. If neither --geometry nor --screensize is provided, then the window size is set to 1440x900 if --noscroll is set and 1462x922 if --noscroll is not set.</p>
|
||||
</dd>
|
||||
<dt><strong>-s <em>WxH</em>, --screensize <em>WxH</em></strong></dt>
|
||||
<dd><p>Sets the size of the virtual display as seen from Medley’s point of view. The Medley window is an unscaled viewport onto this virtual display. If --screensize is not specified but --geometry is, then the virtual display size will be set so that the entire virtual display fits into the given window geometry. If neither --screensize nor --geometry is provided, then the screen size is set to 1440x900.</p>
|
||||
</dd>
|
||||
<dt><strong>-t <em>STRING</em>, --title <em>STRING</em></strong></dt>
|
||||
<dd><p>Use STRING as title of Medley window. Not relevent when the --vnc flag is set.</p>
|
||||
</dd>
|
||||
<dt><strong>-d <em>:N</em>, --display <em>:N</em></strong></dt>
|
||||
<dd><p>Use X display :N. Defaults to the value of $DISPLAY. Not relevant when the --vnc flag is set.</p>
|
||||
</dd>
|
||||
<dt><strong>-v, --vnc (Applicable only to Windows System for Linux installations)</strong></dt>
|
||||
<dd><p>Use a VNC window running on the Windows side instead of an X window. The VNC window will folllow the Windows desktop scaling setting allowing for much more usable Medley on high resolution displays. On WSL, X windows do not scale well.</p>
|
||||
</dd>
|
||||
<dt><strong>-i [<em>ID_STRING</em> | - | --], --id [<em>ID_STRING</em> | - | --]</strong></dt>
|
||||
<dd><p>Use ID_STRING as the id for this run of Medley, iunless ID_STRING is “-” or “--”. If ID_STRING is “-”, then use the basename of $MEDLEYDIR as the id. If ID_STRING is “--”, then use the basename of the parent directory of $MEDLEYDIR as the id. Only one instance of Medley with a given id can run at a time. The id is used to distinguish the virtual memory stores so that multiple instances of Medley can run simultaneously. Default id is “default”.</p>
|
||||
</dd>
|
||||
<dt><strong>-m <em>N</em>, --mem <em>N</em></strong></dt>
|
||||
<dd><p>Set Medley to run in N MB of virtual memory. Defaults to 256MB.</p>
|
||||
</dd>
|
||||
<dt><strong>-p <em>FILE</em>, --vmem <em>FILE</em></strong></dt>
|
||||
<dd><p>Use FILE as the Medley virtual memory (vmem) store. FILE must be writeable by the current user. Care must be taken not to use the same vmem FILE for two instances of Medley running simultaneously. The --id flag will not protect against vmem collisions when the --vmem flag is used. Default is to store the vmem in LOGINDIR/vmem/lisp_XXX.virtualmem, where XXX is the id of this Medley run (see --id flag above). See --logindir below for setting of LOGINDIR.</p>
|
||||
</dd>
|
||||
<dt><strong>-r [<em>FILE</em> | -], --greet [<em>FILE</em> | -]</strong></dt>
|
||||
<dd><p>Use FILE as the Medley greetfile, unless FILE is “-” in which case Medley will start up without using a greetfile. The default Medley greetfile is $MEDLEYDIR/greetfiles/MEDLEYDIR-INIT, except when the --apps flag is used in which case it is $MEDLEYDIR/greetfiles/APPS-INIT.</p>
|
||||
</dd>
|
||||
<dt><strong>-x [<em>DIR</em> | -], --logindir [<em>DIR</em> | -]</strong></dt>
|
||||
<dd><p>use DIR as LOGINDIR in Medley, unless DIR is “-”, in which case use $MEDLEYDIR/logindir. DIR (or $MEDLEYDIR/logindir) must be writeable by the current user. LOGINDIR defaults to $HOME/il. LOGINDIR is used by Medley as the working directory on start-up and where it loads any “personal” initialization file from.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h2>Other Options</h2>
|
||||
|
||||
<dl>
|
||||
<dt><strong><em>SYSOUT_FILE</em></strong></dt>
|
||||
<dd><p>The pathname of the file to use as a sysout for Medley to start from. If SYSOUT_FILE is not provided and none of the flags (--apps, --full, --lisp) is used, then Medley will start from the saved virtual memory file from the previous session with the same ID_STRING as this run. If no such virtual memory file exists, then Medley will start from the standard full.sysout (equivalent to specifying the --full flag).</p>
|
||||
</dd>
|
||||
<dt><strong><em>PASS_ON_ARGS</em></strong></dt>
|
||||
<dd><p>All arguments after the “--” flag, are passed unaltered to lde via run-medley.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h1>FILES</h1>
|
||||
<dl>
|
||||
<dt><strong>$HOME/il</strong></dt>
|
||||
<dd><p>Default Medley LOGINDIR</p>
|
||||
</dd>
|
||||
<dt><strong>$HOME/il/vmem/lisp.virtualmem</strong></dt>
|
||||
<dd><p>Default virtual memory file</p>
|
||||
</dd>
|
||||
<dt><strong>$HOME/il/INIT(.LCOM)</strong></dt>
|
||||
<dd><p>Default personal init file</p>
|
||||
</dd>
|
||||
<dt><strong>$MEDLEYDIR/greetfiles/MEDLEYDIR-INIT(.LCOM)</strong></dt>
|
||||
<dd><p>Default Medley greetfile</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h1>BUGS</h1>
|
||||
<p>See GitHub Issues: <https://github.com/Interlisp/medley/issues></p>
|
||||
<h1>COPYRIGHT</h1>
|
||||
<p>Copyright(c) 2023 by Interlisp.org</p>
|
||||
3
docs/man-page/md2man.sh
Executable file
3
docs/man-page/md2man.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
pandoc medley.1.md -s -t man -o medley.1
|
||||
gzip --stdout medley.1 >medley.1.gz
|
||||
186
docs/man-page/medley.1
Normal file
186
docs/man-page/medley.1
Normal file
@@ -0,0 +1,186 @@
|
||||
.\" Automatically generated by Pandoc 2.5
|
||||
.\"
|
||||
.ad l
|
||||
.TH "MEDLEY" "1" "" "" "Start Medley Interlisp"
|
||||
.nh \" Turn off hyphenation by default.
|
||||
.SH NAME
|
||||
.PP
|
||||
\f[B]medley\f[R] \[em] starts up Medley Interlisp
|
||||
.SH SYNOPSIS
|
||||
.PP
|
||||
\f[B]medley\f[R] [ flags \&... ] [ \f[I]SYSOUT_FILE\f[R] ] [ \-\-
|
||||
\f[I]PASS_ON_ARGS\f[R] ]
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Starts Medley Interlisp in a window.
|
||||
.SH OPTIONS
|
||||
.PP
|
||||
\f[B]MEDLEYDIR\f[R] is an environment variable set by Medley and used by
|
||||
many of the options described below.
|
||||
MEDLEYDIR is the top level directory of the Medley installation that
|
||||
contains the specific medley script that is invoked after all symbolic
|
||||
links are resolved.
|
||||
In the standard global installation this will be
|
||||
/usr/local/interlisp/medley.
|
||||
But Medley can be installed in multiple places on any given machine and
|
||||
hence MEDLEYDIR is computed on each invocation of medley.
|
||||
.SS Flags
|
||||
.PP
|
||||
\
|
||||
.TP
|
||||
.B \-h, \-\-help
|
||||
Prints out a brief summary of the flags and arguments to medley.
|
||||
.TP
|
||||
.B \-z, \-\-man
|
||||
Show the man page for medley
|
||||
.TP
|
||||
.B \-f, \-\-full
|
||||
Start Medley from the standard \[lq]full\[rq] sysout.
|
||||
full.sysout includes a complete Interlisp and CommonLisp environment
|
||||
with a standard set of development tools.
|
||||
It does not include any of the applications built using Medley.
|
||||
(See \f[I]SYSOUT_FILE\f[R] below for more information on starting
|
||||
sysouts.)
|
||||
.TP
|
||||
.B \-l, \-\-lisp
|
||||
Start Medley from the standard \[lq]lisp\[rq] sysout.
|
||||
lisp.sysout only includes the basic Interlisp and CommonLisp
|
||||
environment.
|
||||
(See \f[I]SYSOUT_FILE\f[R] below for more information on starting
|
||||
sysouts.)
|
||||
.TP
|
||||
.B \-a, \-\-apps
|
||||
Start Medley from the standard \[lq]apps\[rq] sysout.
|
||||
apps.sysout includes everything in full.sysout plus Medley applications
|
||||
including Notecards, Rooms and CLOS.
|
||||
It also includes pre\-installed links to key Medley documentation.
|
||||
(See \f[I]SYSOUT_FILE\f[R] below for more information on starting
|
||||
sysouts.)
|
||||
.TP
|
||||
.B \-e, \-\-interlisp (relevent only when \-\-apps is specified)
|
||||
Make the initial Exec window within Medley be an Interlisp Exec.
|
||||
Default is to start in an XCL Exec.
|
||||
.TP
|
||||
.B \-n, \-\-noscroll
|
||||
Ordinarily Medley displays scroll bars to enable the user to pan the
|
||||
Medley virtual display within the Medley window.
|
||||
This is true even when the entire virtual display fits within the
|
||||
window.
|
||||
Specifying \-\-noscroll turns off the scroll bars.
|
||||
Note: If \-\-noscroll is specified and the virtual screen is larger than
|
||||
the window, there will be no way to pan to the non\-visible parts of the
|
||||
virtual display.
|
||||
.TP
|
||||
.B \-g \f[I]WxH\f[R], \-\-geometry \f[I]WxH\f[R]
|
||||
Sets the size of the X Window (or VNC window) that Medley runs in to be
|
||||
Width x Height.
|
||||
(Full X Windows geomtery specification with +X+Y is not currently
|
||||
supported).
|
||||
If \-\-geometry is not specified but \-\-screensize is, then the window
|
||||
size will be determined based on the \-\-screensize values and the
|
||||
\-\-noscroll flag.
|
||||
If neither \-\-geometry nor \-\-screensize is provided, then the window
|
||||
size is set to 1440x900 if \-\-noscroll is set and 1462x922 if
|
||||
\-\-noscroll is not set.
|
||||
.TP
|
||||
.B \-s \f[I]WxH\f[R], \-\-screensize \f[I]WxH\f[R]
|
||||
Sets the size of the virtual display as seen from Medley\[cq]s point of
|
||||
view.
|
||||
The Medley window is an unscaled viewport onto this virtual display.
|
||||
If \-\-screensize is not specified but \-\-geometry is, then the virtual
|
||||
display size will be set so that the entire virtual display fits into
|
||||
the given window geometry.
|
||||
If neither \-\-screensize nor \-\-geometry is provided, then the screen
|
||||
size is set to 1440x900.
|
||||
.TP
|
||||
.B \-t \f[I]STRING\f[R], \-\-title \f[I]STRING\f[R]
|
||||
Use STRING as title of Medley window.
|
||||
Not relevent when the \-\-vnc flag is set.
|
||||
.TP
|
||||
.B \-d \f[I]:N\f[R], \-\-display \f[I]:N\f[R]
|
||||
Use X display :N.
|
||||
Defaults to the value of $DISPLAY.
|
||||
Not relevant when the \-\-vnc flag is set.
|
||||
.TP
|
||||
.B \-v, \-\-vnc (Applicable only to Windows System for Linux installations)
|
||||
Use a VNC window running on the Windows side instead of an X window.
|
||||
The VNC window will folllow the Windows desktop scaling setting allowing
|
||||
for much more usable Medley on high resolution displays.
|
||||
On WSL, X windows do not scale well.
|
||||
.TP
|
||||
.B \-i [\f[I]ID_STRING\f[R] | \- | \-\-], \-\-id [\f[I]ID_STRING\f[R] | \- | \-\-]
|
||||
Use ID_STRING as the id for this run of Medley, iunless ID_STRING is
|
||||
\[lq]\-\[rq] or \[lq]\-\-\[rq].
|
||||
If ID_STRING is \[lq]\-\[rq], then use the basename of $MEDLEYDIR as the
|
||||
id.
|
||||
If ID_STRING is \[lq]\-\-\[rq], then use the basename of the parent
|
||||
directory of $MEDLEYDIR as the id.
|
||||
Only one instance of Medley with a given id can run at a time.
|
||||
The id is used to distinguish the virtual memory stores so that multiple
|
||||
instances of Medley can run simultaneously.
|
||||
Default id is \[lq]default\[rq].
|
||||
.TP
|
||||
.B \-m \f[I]N\f[R], \-\-mem \f[I]N\f[R]
|
||||
Set Medley to run in N MB of virtual memory.
|
||||
Defaults to 256MB.
|
||||
.TP
|
||||
.B \-p \f[I]FILE\f[R], \-\-vmem \f[I]FILE\f[R]
|
||||
Use FILE as the Medley virtual memory (vmem) store.
|
||||
FILE must be writeable by the current user.
|
||||
Care must be taken not to use the same vmem FILE for two instances of
|
||||
Medley running simultaneously.
|
||||
The \-\-id flag will not protect against vmem collisions when the
|
||||
\-\-vmem flag is used.
|
||||
Default is to store the vmem in LOGINDIR/vmem/lisp_XXX.virtualmem, where
|
||||
XXX is the id of this Medley run (see \-\-id flag above).
|
||||
See \-\-logindir below for setting of LOGINDIR.
|
||||
.TP
|
||||
.B \-r [\f[I]FILE\f[R] | \-], \-\-greet [\f[I]FILE\f[R] | \-]
|
||||
Use FILE as the Medley greetfile, unless FILE is \[lq]\-\[rq] in which
|
||||
case Medley will start up without using a greetfile.
|
||||
The default Medley greetfile is $MEDLEYDIR/greetfiles/MEDLEYDIR\-INIT,
|
||||
except when the \-\-apps flag is used in which case it is
|
||||
$MEDLEYDIR/greetfiles/APPS\-INIT.
|
||||
.TP
|
||||
.B \-x [\f[I]DIR\f[R] | \-], \-\-logindir [\f[I]DIR\f[R] | \-]
|
||||
use DIR as LOGINDIR in Medley, unless DIR is \[lq]\-\[rq], in which case
|
||||
use $MEDLEYDIR/logindir.
|
||||
DIR (or $MEDLEYDIR/logindir) must be writeable by the current user.
|
||||
LOGINDIR defaults to $HOME/il.
|
||||
LOGINDIR is used by Medley as the working directory on start\-up and
|
||||
where it loads any \[lq]personal\[rq] initialization file from.
|
||||
.SS Other Options
|
||||
.PP
|
||||
\
|
||||
.TP
|
||||
.B \f[I]SYSOUT_FILE\f[R]
|
||||
The pathname of the file to use as a sysout for Medley to start from.
|
||||
If SYSOUT_FILE is not provided and none of the flags (\-\-apps,
|
||||
\-\-full, \-\-lisp) is used, then Medley will start from the saved
|
||||
virtual memory file from the previous session with the same ID_STRING as
|
||||
this run.
|
||||
If no such virtual memory file exists, then Medley will start from the
|
||||
standard full.sysout (equivalent to specifying the \-\-full flag).
|
||||
.TP
|
||||
.B \f[I]PASS_ON_ARGS\f[R]
|
||||
All arguments after the \[lq]\-\-\[rq] flag, are passed unaltered to lde
|
||||
via run\-medley.
|
||||
.SH FILES
|
||||
.TP
|
||||
.B $HOME/il
|
||||
Default Medley LOGINDIR
|
||||
.TP
|
||||
.B $HOME/il/vmem/lisp.virtualmem
|
||||
Default virtual memory file
|
||||
.TP
|
||||
.B $HOME/il/INIT(.LCOM)
|
||||
Default personal init file
|
||||
.TP
|
||||
.B $MEDLEYDIR/greetfiles/MEDLEYDIR\-INIT(.LCOM)
|
||||
Default Medley greetfile
|
||||
.SH BUGS
|
||||
.PP
|
||||
See GitHub Issues: <https://github.com/Interlisp/medley/issues>
|
||||
.SH COPYRIGHT
|
||||
.PP
|
||||
Copyright(c) 2023 by Interlisp.org
|
||||
BIN
docs/man-page/medley.1.gz
Normal file
BIN
docs/man-page/medley.1.gz
Normal file
Binary file not shown.
164
docs/man-page/medley.1.md
Normal file
164
docs/man-page/medley.1.md
Normal file
@@ -0,0 +1,164 @@
|
||||
% MEDLEY(1) | Start Medley Interlisp
|
||||
|
||||
---
|
||||
adjusting: l
|
||||
hyphenate: false
|
||||
---
|
||||
|
||||
NAME
|
||||
====
|
||||
|
||||
**medley** — starts up Medley Interlisp
|
||||
|
||||
SYNOPSIS
|
||||
========
|
||||
|
||||
| **medley** \[ flags ... ] \[ *SYSOUT_FILE* ] \[ \-\- *PASS_ON_ARGS* ]
|
||||
|
||||
DESCRIPTION
|
||||
===========
|
||||
|
||||
Starts Medley Interlisp in a window.
|
||||
|
||||
OPTIONS
|
||||
=======
|
||||
|
||||
**MEDLEYDIR** is an environment variable set by Medley and used by many of the options described below.
|
||||
MEDLEYDIR is the top level directory of the Medley installation that contains the specific medley script that
|
||||
is invoked after all symbolic links are resolved. In the standard global installation this will
|
||||
be /usr/local/interlisp/medley. But Medley can be installed in multiple places on any given machine and
|
||||
hence MEDLEYDIR is computed on each invocation of medley.
|
||||
|
||||
|
||||
Flags
|
||||
-----
|
||||
|
||||
|
||||
|
||||
-h, \-\-help
|
||||
: Prints out a brief summary of the flags and arguments to medley.
|
||||
|
||||
-z, \-\-man
|
||||
: Show the man page for medley
|
||||
|
||||
-f, \-\-full
|
||||
: Start Medley from the standard "full" sysout. full.sysout includes a complete Interlisp and CommonLisp environment
|
||||
with a standard set of development tools. It does not include any of the applications built using Medley.
|
||||
(See *SYSOUT_FILE* below for more information on starting sysouts.)
|
||||
|
||||
-l, \-\-lisp
|
||||
: Start Medley from the standard "lisp" sysout. lisp.sysout only includes the basic Interlisp and
|
||||
CommonLisp environment.
|
||||
(See *SYSOUT_FILE* below for more information on starting sysouts.)
|
||||
|
||||
-a, \-\-apps
|
||||
: Start Medley from the standard "apps" sysout. apps.sysout includes everything in full.sysout plus Medley
|
||||
applications including Notecards, Rooms and CLOS. It also includes pre-installed links to key Medley
|
||||
documentation.
|
||||
(See *SYSOUT_FILE* below for more information on starting sysouts.)
|
||||
|
||||
-e, \-\-interlisp (relevent only when \-\-apps is specified)
|
||||
: Make the initial Exec window within Medley be an Interlisp Exec. Default is to start in an XCL Exec.
|
||||
|
||||
-n, \-\-noscroll
|
||||
: Ordinarily Medley displays scroll bars to enable the user to pan the Medley virtual display within the
|
||||
Medley window. This is true even when the entire virtual display fits within the window. Specifying
|
||||
\-\-noscroll turns off the scroll bars. Note: If \-\-noscroll is specified and the virtual screen is larger
|
||||
than the window, there will be no way to pan to the non-visible parts of the virtual display.
|
||||
|
||||
-g *WxH*, \-\-geometry *WxH*
|
||||
: Sets the size of the X Window (or VNC window) that Medley runs in to be Width x Height. (Full X Windows
|
||||
geomtery specification with +X+Y is not currently supported). If \-\-geometry is not specified but \-\-screensize is,
|
||||
then the window size will be determined based on the \-\-screensize values and the \-\-noscroll flag. If neither
|
||||
\-\-geometry nor \-\-screensize is provided, then the window size is set to 1440x900 if \-\-noscroll is set and 1462x922
|
||||
if \-\-noscroll is not set.
|
||||
|
||||
-s *WxH*, \-\-screensize *WxH*
|
||||
: Sets the size of the virtual display as seen from Medley's point of view.
|
||||
The Medley window is an unscaled viewport onto this virtual display. If \-\-screensize is not specified but
|
||||
\-\-geometry is, then the virtual display size will be set so that the entire virtual display fits into the given
|
||||
window geometry. If neither \-\-screensize nor \-\-geometry is provided, then the screen size is set to 1440x900.
|
||||
|
||||
-t *STRING*, \-\-title *STRING*
|
||||
: Use STRING as title of Medley window. Not relevent when the \-\-vnc flag is set.
|
||||
|
||||
-d *:N*, \-\-display *:N*
|
||||
: Use X display :N. Defaults to the value of $DISPLAY. Not relevant when
|
||||
the \-\-vnc flag is set.
|
||||
|
||||
-v, \-\-vnc (Applicable only to Windows System for Linux installations)
|
||||
: Use a VNC window running on the Windows side instead of an X window.
|
||||
The VNC window will folllow the Windows desktop scaling setting allowing
|
||||
for much more usable Medley on high resolution displays. On WSL, X windows
|
||||
do not scale well.
|
||||
|
||||
-i [*ID_STRING* | - | \-\-], \-\-id [*ID_STRING* | - | \-\-]
|
||||
: Use ID_STRING as the id for this run of Medley, iunless ID_STRING is "-" or "\-\-".
|
||||
If ID_STRING is "-", then use the basename of $MEDLEYDIR as the id.
|
||||
If ID_STRING is "\-\-", then use the basename of the parent directory of $MEDLEYDIR as the id.
|
||||
Only one instance of Medley with a given id can run at a time.
|
||||
The id is used to distinguish the virtual memory stores so that multiple
|
||||
instances of Medley can run simultaneously. Default id is "default".
|
||||
|
||||
-m *N*, \-\-mem *N*
|
||||
: Set Medley to run in N MB of virtual memory. Defaults to 256MB.
|
||||
|
||||
-p *FILE*, \-\-vmem *FILE*
|
||||
: Use FILE as the Medley virtual memory (vmem) store. FILE must be writeable by the current user.
|
||||
Care must be taken not to use the same vmem FILE for two instances of Medley running simultaneously.
|
||||
The \-\-id flag will not protect against vmem collisions when the \-\-vmem flag is used.
|
||||
Default is to store the vmem in LOGINDIR/vmem/lisp_XXX.virtualmem, where XXX is the id of this
|
||||
Medley run (see \-\-id flag above). See \-\-logindir below for setting of LOGINDIR.
|
||||
|
||||
-r \[*FILE* | -], \-\-greet \[*FILE* | -]
|
||||
: Use FILE as the Medley greetfile, unless FILE is "-" in which case
|
||||
Medley will start up without using a greetfile. The default Medley greetfile
|
||||
is $MEDLEYDIR/greetfiles/MEDLEYDIR-INIT, except when the \-\-apps flag is used
|
||||
in which case it is $MEDLEYDIR/greetfiles/APPS-INIT.
|
||||
|
||||
-x \[*DIR* | -], \-\-logindir \[*DIR* | -]
|
||||
: use DIR as LOGINDIR in Medley, unless DIR is "-", in which case use
|
||||
\$MEDLEYDIR/logindir. DIR (or \$MEDLEYDIR/logindir) must be writeable by the current user.
|
||||
LOGINDIR defaults to \$HOME/il. LOGINDIR is used by Medley as the working directory on start-up
|
||||
and where it loads any "personal" initialization file from.
|
||||
|
||||
Other Options
|
||||
-------------
|
||||
|
||||
|
||||
*SYSOUT_FILE*
|
||||
: The pathname of the file to use as a sysout for Medley to start from. If SYSOUT_FILE is not
|
||||
provided and none of the flags (\-\-apps, \-\-full, \-\-lisp) is used, then Medley will start from
|
||||
the saved virtual memory file from the previous session with the same ID_STRING as this run.
|
||||
If no such virtual memory file exists, then Medley will start from the standard full.sysout
|
||||
(equivalent to specifying the \-\-full flag).
|
||||
|
||||
*PASS_ON_ARGS*
|
||||
: All arguments after the "\-\-" flag, are passed unaltered to lde via run-medley.
|
||||
|
||||
|
||||
FILES
|
||||
=====
|
||||
|
||||
\$HOME/il
|
||||
: Default Medley LOGINDIR
|
||||
|
||||
\$HOME/il/vmem/lisp.virtualmem
|
||||
: Default virtual memory file
|
||||
|
||||
\$HOME/il/INIT(.LCOM)
|
||||
: Default personal init file
|
||||
|
||||
\$MEDLEYDIR/greetfiles/MEDLEYDIR-INIT(.LCOM)
|
||||
: Default Medley greetfile
|
||||
|
||||
|
||||
BUGS
|
||||
====
|
||||
|
||||
See GitHub Issues: <https://github.com/Interlisp/medley/issues>
|
||||
|
||||
COPYRIGHT
|
||||
=========
|
||||
|
||||
Copyright(c) 2023 by Interlisp.org
|
||||
4
docs/man-page/publish.sh
Executable file
4
docs/man-page/publish.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
./md2man.sh
|
||||
./man2html.sh
|
||||
|
||||
2
docs/man-page/showmd.sh
Executable file
2
docs/man-page/showmd.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
pandoc medley.1.md -s -t man | /usr/bin/man -l -
|
||||
380
greetfiles/APPS-INIT
Normal file
380
greetfiles/APPS-INIT
Normal file
@@ -0,0 +1,380 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
|
||||
(FILECREATED "19-Jan-2023 12:44:20" {DSK}<home>frank>il>medley>gmedley>greetfiles>APPS-INIT.;9 21022
|
||||
|
||||
:CHANGES-TO (VARS APPS-INITCOMS)
|
||||
(FNS Apps.DoInit)
|
||||
|
||||
:PREVIOUS-DATE "19-Jan-2023 11:57:40" {DSK}<home>frank>il>medley>gmedley>greetfiles>APPS-INIT.;8
|
||||
)
|
||||
|
||||
|
||||
(PRETTYCOMPRINT APPS-INITCOMS)
|
||||
|
||||
(RPAQQ APPS-INITCOMS
|
||||
[(FILES (SYSLOAD)
|
||||
MEDLEYDIR-INIT)
|
||||
(GLOBALVARS Apps.NotecardsActivated Apps.RoomsActivated)
|
||||
(INITVARS (Apps.NotecardsActivated NIL)
|
||||
(Apps.RoomsActivated NIL))
|
||||
(FNS Apps.InitNotecards Apps.DoInit Apps.CreateButtons Apps.CreateLabel Apps.ActivateCLOS
|
||||
Apps.ActivateRooms Apps.ShowDoc XCL-USER::EXEC_INTERLISP)
|
||||
(DECLARE%: DONTEVAL@LOAD DOCOPY (P (Apps.DoInit)))
|
||||
(DECLARE%: FIRST DONTEVAL@LOAD DOCOPY (P (BKSYSBUF " "])
|
||||
|
||||
(FILESLOAD (SYSLOAD)
|
||||
MEDLEYDIR-INIT)
|
||||
(DECLARE%: DOEVAL@COMPILE DONTCOPY
|
||||
|
||||
(GLOBALVARS Apps.NotecardsActivated Apps.RoomsActivated)
|
||||
)
|
||||
|
||||
(RPAQ? Apps.NotecardsActivated NIL)
|
||||
|
||||
(RPAQ? Apps.RoomsActivated NIL)
|
||||
(DEFINEQ
|
||||
|
||||
(Apps.InitNotecards
|
||||
[LAMBDA (DoNotRefreshButtons)
|
||||
(DECLARE (GLOBALVARS BackgroundMenuCommands BackgroundMenu))
|
||||
(* ; "Edited 19-Jan-2023 11:57 by FGH")
|
||||
(* ; "Edited 7-Dec-2022 11:14 by FGH")
|
||||
(* ; "Edited 12-Nov-2022 14:41 by FGH")
|
||||
(* ; "Edited 11-Sep-2022 01:09 by fgh")
|
||||
(* ; "Edited 7-Feb-2022 20:22 by tp7")
|
||||
(LET* [[SRCDIR (OR (UNIX-GETENV 'NOTEFILESSRC)
|
||||
(AND (UNIX-GETENV 'NC_INSTALLDIR)
|
||||
(CONCAT (UNIX-GETENV 'NC_INSTALLDIR)
|
||||
"/notefiles"))
|
||||
(LET ((SUBDIR "notecards/notefiles"))
|
||||
(for DIR in (LIST (CONCAT (MEDLEYDIR)
|
||||
SUBDIR)
|
||||
(CONCAT (MEDLEYDIR)
|
||||
"../" SUBDIR)
|
||||
(CONCAT (MEDLEYDIR)
|
||||
"../../" SUBDIR)) thereis (DIRECTORYNAME DIR]
|
||||
(DESTDIR (OR (UNIX-GETENV 'NOTEFILESDIR)
|
||||
(AND (UNIX-GETENV 'MEDLEY_USERDIR)
|
||||
(CONCAT (UNIX-GETENV 'MEDLEY_USERDIR)
|
||||
"/notefiles"))
|
||||
(CONCAT LOGINDIR "notefiles"]
|
||||
[if (AND (NOT (DIRECTORYNAME DESTDIR))
|
||||
(DIRECTORYNAME SRCDIR))
|
||||
then (for NF in (DIRECTORY (CONCAT SRCDIR "/*"))
|
||||
do (COPYFILE NF (PACKFILENAME 'HOST "DSK" 'DIRECTORY DESTDIR 'NAME
|
||||
(FILENAMEFIELD NF 'NAME)
|
||||
'EXTENSION
|
||||
(FILENAMEFIELD NF 'EXTENSION)
|
||||
'VERSION
|
||||
(FILENAMEFIELD NF 'VERSION]
|
||||
(LET* ((PW-REGION (WINDOWPROP PROMPTWINDOW 'REGION))
|
||||
(LEFT (IPLUS (fetch (REGION RIGHT) of PW-REGION)
|
||||
20))
|
||||
(BOTTOM (fetch (REGION BOTTOM) of PW-REGION)))
|
||||
(NC.BringUpNoteCardsIcon (create POSITION
|
||||
XCOORD _ LEFT
|
||||
YCOORD _ BOTTOM)))
|
||||
(NC.FileBrowserMenu NC.NoteCardsIconWindow (PACKFILENAME 'HOST "DSK" 'DIRECTORY DESTDIR
|
||||
'NAME "*" 'EXTENSION "notefile")
|
||||
(CREATEREGION 50 (IDIFFERENCE SCREENHEIGHT 700)
|
||||
550 220))
|
||||
(if (NULL (SASSOC 'NoteCards BackgroundMenuCommands))
|
||||
then (PROGN [SETQ BackgroundMenuCommands (APPEND BackgroundMenuCommands
|
||||
(LIST '(NoteCards (
|
||||
NC.BringUpNoteCardsIcon
|
||||
)
|
||||
|
||||
"Bring up the NoteCards control icon."
|
||||
]
|
||||
(SETQ BackgroundMenu NIL)))
|
||||
(SETQ Apps.NotecardsActivated T)
|
||||
(if (NOT DoNotRefreshButtons)
|
||||
then (Apps.CreateButtons])
|
||||
|
||||
(Apps.DoInit
|
||||
[LAMBDA NIL
|
||||
|
||||
(* ;; "Edited 19-Jan-2023 12:43 by FGH")
|
||||
|
||||
(* ;; "Edited 17-Jan-2023 23:23 by FGH")
|
||||
|
||||
(* ;; "Edited 7-Dec-2022 11:14 by FGH")
|
||||
|
||||
(* ;; "Edited 12-Nov-2022 13:57 by FGH")
|
||||
|
||||
(* ;; "Edited 12-Oct-2022 20:23 by fgh")
|
||||
|
||||
(* ;; "Edited 6-Sep-2022 17:22 by fgh")
|
||||
|
||||
(* ;; "Edited 4-Sep-2022 16:44 by larry")
|
||||
|
||||
(* ;; "Edited 18-Mar-2022 18:53 by fgh")
|
||||
|
||||
(* ;; "Edited 17-Dec-2021 22:05 by fgh")
|
||||
|
||||
(PROGN
|
||||
(* ;; " Adjust windows so that the exec window and the prompt window don't overlap")
|
||||
|
||||
[MAPC (OPENWINDOWS)
|
||||
(FUNCTION (LAMBDA (W)
|
||||
(COND
|
||||
((EQ (WINDOWPROP W 'BUTTONEVENTFN)
|
||||
'WHEN-WHO-LINE-SELECTED-FN)
|
||||
(MOVEW W (CAR (WINDOWPROP W 'REGION))
|
||||
(IDIFFERENCE SCREENHEIGHT 18)))
|
||||
((STREQUAL (WINDOWPROP W 'TITLE)
|
||||
"Prompt Window")
|
||||
(PROGN (MOVEW W (create POSITION
|
||||
XCOORD _ 50
|
||||
YCOORD _ (IDIFFERENCE SCREENHEIGHT 120)))
|
||||
(CLEARW W)))
|
||||
((STREQUAL (WINDOWPROP W 'TITLE)
|
||||
"Exec (XCL)")
|
||||
(PROGN (WINDOWPROP W 'TITLE "Exec (INTERLISP)")
|
||||
(MOVEW W (create POSITION
|
||||
XCOORD _ 50
|
||||
YCOORD _ (IDIFFERENCE SCREENHEIGHT 460]
|
||||
|
||||
(* ;; " Set up INITIALSLST based on information passed in from the Linux environment")
|
||||
|
||||
[SETQ INITIALSLST (LIST (LIST USERNAME (UNIX-GETENV 'MEDLEY_FIRSTNAME)
|
||||
(UNIX-GETENV 'MEDLEY_INITIALS]
|
||||
(LOAD '{DSK}/usr/local/interlisp/medley/lispusers/HELPSYS.LCOM T)
|
||||
|
||||
(* ;; "change to interlisp exec if required")
|
||||
|
||||
(COND
|
||||
((OR (STRING-EQUAL (UNIX-GETENV 'MEDLEY_EXEC)
|
||||
"inter")
|
||||
(STRING-EQUAL (UNIX-GETENV 'NCO)
|
||||
"true"))
|
||||
(BKSYSBUF "(EXEC_INTERLISP)")))
|
||||
|
||||
(* ;; "Always Activate CLOS")
|
||||
|
||||
(Apps.ActivateCLOS)
|
||||
|
||||
(* ;; " activate Notecards if requested")
|
||||
|
||||
(COND
|
||||
((STRING-EQUAL (UNIX-GETENV 'RUN_NOTECARDS)
|
||||
"true")
|
||||
(Apps.InitNotecards T)))
|
||||
|
||||
(* ;; " activate Rooms if requested")
|
||||
|
||||
(COND
|
||||
((STRING-EQUAL (UNIX-GETENV 'RUN_ROOMS)
|
||||
"true")
|
||||
(Apps.ActivateRooms T)))
|
||||
|
||||
(* ;; " create the Documentation and ROOMS, Notecards Activation Buttons, if needed")
|
||||
|
||||
(Apps.CreateButtons T])
|
||||
|
||||
(Apps.CreateButtons
|
||||
[LAMBDA (DoDocsToo) (* ; "Edited 13-Dec-2022 12:51 by frank")
|
||||
(* ; "Edited 7-Dec-2022 11:28 by FGH")
|
||||
(* ; "Edited 5-Dec-2022 17:31 by FGH")
|
||||
(* ; "Edited 12-Nov-2022 14:52 by FGH")
|
||||
|
||||
(* ;; " Create buttons for Documentation and to activate Rooms, Notecards ")
|
||||
|
||||
(* ;; "Note: due to bug in DELETE-BUTTON need to create Doc buttons last. This will make sure that the NoteCards/Rooms buttons get properl deleted when they are activated. But the Doc buttons will not necessariy get deleted properly (but then there is never a need for them to be deleted).")
|
||||
|
||||
(LET* ((FEATURES (LIST (LIST Apps.NotecardsActivated '(Apps.InitNotecards)
|
||||
"NOTECARDS")
|
||||
(LIST Apps.RoomsActivated '(Apps.ActivateRooms)
|
||||
"ROOMS")))
|
||||
(FEATURES-LABELS (for FEATURE in FEATURES collect (CADDR FEATURE)))
|
||||
(DOCS (LIST (LIST "https://interlisp.org/docs/medley/orientation/" "BASICS")
|
||||
(LIST "https://interlisp.org/documentation/Medley-Primer.pdf" "PRIMER")
|
||||
(LIST "https://interlisp.org/documentation/IRM.pdf" "MANUAL")
|
||||
(LIST "https://interlisp.org/documentation/notecards_user_guide_v1.2.pdf"
|
||||
"NOTECARDS")
|
||||
(LIST "https://interlisp.org/documentation/ROOMSTECHDESC.pdf" "ROOMS")))
|
||||
(DOCS-LABELS (for DOC in DOCS collect (CADR DOC)))
|
||||
(RIGHTMARGINISH 140)
|
||||
(SECTION1YPOS 225)
|
||||
(YPOSDELTA 55)
|
||||
(SECTION2YPOS (IPLUS SECTION1YPOS (ITIMES (IPLUS (LENGTH DOCS)
|
||||
1)
|
||||
YPOSDELTA)))
|
||||
(BUTTONY-FEATURES SECTION2YPOS)
|
||||
(BUTTONY-DOCS SECTION1YPOS)
|
||||
(FEATURES-REQUIREDP (OR (NOT Apps.RoomsActivated)
|
||||
(NOT Apps.NotecardsActivated)))
|
||||
(IWS NIL)
|
||||
(BUTTONS NIL))
|
||||
|
||||
(* ;; "First remove/re-create feature buttons")
|
||||
|
||||
(for W in (OPENWINDOWS) when (MEMBER (WINDOWPROP W 'ICONLABEL)
|
||||
(LIST "ACTIVATE" "FEATURES")) do (CLOSEW W))
|
||||
(for B in *ALL-BUTTONS* when (AND (EQ (WINDOWPROP B 'Apps.BUTTON)
|
||||
'FEATURE)
|
||||
(MEMBER (BUTTON-LABEL B)
|
||||
FEATURES-LABELS)) do (DELETE-BUTTON B))
|
||||
[if FEATURES-REQUIREDP
|
||||
then [SETQ IWS (LIST (Apps.CreateLabel "ACTIVATE" (IDIFFERENCE SCREENWIDTH
|
||||
(IDIFFERENCE RIGHTMARGINISH 50
|
||||
))
|
||||
(IDIFFERENCE SCREENHEIGHT (IDIFFERENCE SECTION2YPOS 20)))
|
||||
(Apps.CreateLabel "FEATURES" (IDIFFERENCE SCREENWIDTH
|
||||
(IDIFFERENCE RIGHTMARGINISH 50
|
||||
))
|
||||
(IDIFFERENCE SCREENHEIGHT SECTION2YPOS]
|
||||
(SETQ BUTTONS (for FEATURE in FEATURES
|
||||
collect (OR (CAR FEATURE)
|
||||
(LET (B)
|
||||
(SETQ BUTTONY-FEATURES (IPLUS BUTTONY-FEATURES
|
||||
YPOSDELTA))
|
||||
[SETQ B (CREATE-BUTTON (CADR FEATURE)
|
||||
(CADDR FEATURE)
|
||||
(create POSITION
|
||||
XCOORD _ (IDIFFERENCE
|
||||
SCREENWIDTH
|
||||
RIGHTMARGINISH)
|
||||
YCOORD _ (IDIFFERENCE
|
||||
SCREENHEIGHT
|
||||
BUTTONY-FEATURES
|
||||
]
|
||||
(WINDOWPROP B 'Apps.BUTTON 'FEATURE)
|
||||
B]
|
||||
|
||||
(* ;; "Then if needed, remove/recreate documentation buttons")
|
||||
|
||||
(if DoDocsToo
|
||||
then (for W in (OPENWINDOWS) when (MEMBER (WINDOWPROP W 'ICONLABEL)
|
||||
(LIST "DOCUMENTATION"))
|
||||
do (CLOSEW W))
|
||||
(for B in *ALL-BUTTONS* when (AND (EQ (WINDOWPROP B 'Apps.BUTTON)
|
||||
'DOC)
|
||||
(MEMBER (BUTTON-LABEL B)
|
||||
DOCS-LABELS)) do (DELETE-BUTTON B))
|
||||
(SETQ IWS (CONS (Apps.CreateLabel "DOCUMENTATION" (IDIFFERENCE SCREENWIDTH
|
||||
(IDIFFERENCE
|
||||
RIGHTMARGINISH 50)
|
||||
)
|
||||
(IDIFFERENCE SCREENHEIGHT SECTION1YPOS))
|
||||
IWS))
|
||||
(SETQ BUTTONS (APPEND (for DOC in DOCS
|
||||
collect (LET (B)
|
||||
(SETQ BUTTONY-DOCS (IPLUS BUTTONY-DOCS
|
||||
YPOSDELTA))
|
||||
[SETQ B (CREATE-BUTTON (LIST 'Apps.ShowDoc
|
||||
(CAR DOC))
|
||||
(CADR DOC)
|
||||
(create POSITION
|
||||
XCOORD _
|
||||
(IDIFFERENCE
|
||||
SCREENWIDTH
|
||||
RIGHTMARGINISH)
|
||||
YCOORD _
|
||||
(IDIFFERENCE
|
||||
SCREENHEIGHT
|
||||
BUTTONY-DOCS]
|
||||
(WINDOWPROP B 'Apps.BUTTON 'DOC)
|
||||
B))
|
||||
BUTTONS)))
|
||||
[for B in BUTTONS do (COND
|
||||
((WINDOWP B)
|
||||
(WINDOWPROP B 'RIGHTBUTTONFN 'NILL)
|
||||
(WINDOWPROP B 'BUTTONEVENTFN (FUNCTION (LAMBDA (BUTTON)
|
||||
(if (LASTMOUSESTATE
|
||||
(ONLY LEFT))
|
||||
then (EXECUTE-BUTTON
|
||||
BUTTON]
|
||||
[for IW in IWS do (COND
|
||||
((WINDOWP IW)
|
||||
(WINDOWPROP IW 'RIGHTBUTTONFN 'NILL]
|
||||
(for B in BUTTONS when (WINDOWP B) collect B])
|
||||
|
||||
(Apps.CreateLabel
|
||||
[LAMBDA (Text CenterX BottomY) (* ; "Edited 5-Dec-2022 16:49 by FGH")
|
||||
(LET* ((DS (DSPCREATE))
|
||||
(FONT (DSPFONT '(HELVETICA 18 BOLD)
|
||||
DS))
|
||||
(SR (STRINGREGION Text DS))
|
||||
(BMW (fetch (REGION WIDTH) of SR))
|
||||
(BMH (IPLUS (fetch (REGION HEIGHT) of SR)
|
||||
(fetch (REGION BOTTOM) of SR)))
|
||||
(BM (BITMAPCREATE BMW BMH))
|
||||
(POS (create POSITION
|
||||
XCOORD _ (IDIFFERENCE CenterX (IQUOTIENT BMW 2))
|
||||
YCOORD _ BottomY))
|
||||
IW)
|
||||
(DSPDESTINATION BM DS)
|
||||
(PRIN1 Text DS)
|
||||
(SETQ IW (ICONW BM BM POS))
|
||||
(WINDOWPROP IW 'ICONLABEL Text)
|
||||
IW])
|
||||
|
||||
(Apps.ActivateCLOS
|
||||
[LAMBDA NIL
|
||||
(DECLARE (GLOBALVARS BackgroundMenuCommands BackgroundMenu))
|
||||
(* ; "Edited 12-Nov-2022 14:41 by FGH")
|
||||
(if (NULL (SASSOC "CLOS Browse Class" BackgroundMenuCommands))
|
||||
then (PROGN [SETQ BackgroundMenuCommands
|
||||
(APPEND BackgroundMenuCommands
|
||||
(LIST '("CLOS Browse Class" (CLOS-BROWSER::BROWSE-CLASS)
|
||||
"Bring up a class browser."
|
||||
(SUBITEMS (|all in a package| (CLOS-BROWSER::BROWSE-CLASS
|
||||
(
|
||||
CLOS-BROWSER::CLASSES-IN-PACKAGE
|
||||
(
|
||||
CLOS-BROWSER::IN-SELECT-PACKAGE
|
||||
)))
|
||||
|
||||
"Select a package and browse all the classes defined in that package."
|
||||
]
|
||||
(SETQ BackgroundMenu NIL])
|
||||
|
||||
(Apps.ActivateRooms
|
||||
[LAMBDA (DoNotRefreshButtons)
|
||||
(DECLARE (GLOBALVARS BackgroundMenuCommands ROOMS:*SUITE-DIRECTORIES*))
|
||||
(* ; "Edited 7-Dec-2022 11:13 by FGH")
|
||||
(* ; "Edited 12-Nov-2022 14:56 by FGH")
|
||||
(if (NULL (SASSOC "Rooms" BackgroundMenuCommands))
|
||||
then (ROOMS:RESET))
|
||||
(SETQ ROOMS:*SUITE-DIRECTORIES* (CONS (CONCAT (UNIX-GETENV 'MEDLE_USERDIR)
|
||||
"/suites")
|
||||
ROOMS:*SUITE-DIRECTORIES*))
|
||||
(SETQ Apps.RoomsActivated T)
|
||||
(PROMPTPRINT "
|
||||
ROOMS functionality is now available via the Background Menu")
|
||||
(if (NOT DoNotRefreshButtons)
|
||||
then (Apps.CreateButtons])
|
||||
|
||||
(Apps.ShowDoc
|
||||
[LAMBDA (URL) (* ; "Edited 18-Jan-2023 20:26 by FGH")
|
||||
(ShellBrowse URL])
|
||||
|
||||
(XCL-USER::EXEC_INTERLISP
|
||||
[LAMBDA NIL (* ; "Edited 18-Mar-2022 18:53 by fgh")
|
||||
(PROGN [MAPC (OPENWINDOWS)
|
||||
(FUNCTION (LAMBDA (W)
|
||||
(COND
|
||||
((STREQUAL (WINDOWPROP W 'TITLE)
|
||||
"Exec (XCL)")
|
||||
(PROGN (WINDOWPROP W 'TITLE "Exec (INTERLISP)")
|
||||
(MOVEW W (create POSITION
|
||||
XCOORD _ 50
|
||||
YCOORD _ (IDIFFERENCE SCREENHEIGHT 460]
|
||||
(XCL:SET-DEFAULT-EXEC-TYPE 'INTERLISP)
|
||||
(XCL:SET-EXEC-TYPE 'INTERLISP])
|
||||
)
|
||||
(DECLARE%: DONTEVAL@LOAD DOCOPY
|
||||
|
||||
(Apps.DoInit)
|
||||
)
|
||||
(DECLARE%: FIRST DONTEVAL@LOAD DOCOPY
|
||||
|
||||
(BKSYSBUF " ")
|
||||
)
|
||||
(DECLARE%: DONTCOPY
|
||||
(FILEMAP (NIL (1146 20888 (Apps.InitNotecards 1156 . 5018) (Apps.DoInit 5020 . 8119) (
|
||||
Apps.CreateButtons 8121 . 16945) (Apps.CreateLabel 16947 . 17757) (Apps.ActivateCLOS 17759 . 19108) (
|
||||
Apps.ActivateRooms 19110 . 19961) (Apps.ShowDoc 19963 . 20112) (XCL-USER::EXEC_INTERLISP 20114 . 20886
|
||||
)))))
|
||||
STOP
|
||||
BIN
greetfiles/APPS-INIT.LCOM
Normal file
BIN
greetfiles/APPS-INIT.LCOM
Normal file
Binary file not shown.
7
installers/deb/.gitignore
vendored
Normal file
7
installers/deb/.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/tmp
|
||||
*.deb
|
||||
*.swp
|
||||
*.save
|
||||
/tars
|
||||
/debs
|
||||
|
||||
1
installers/deb/build
Symbolic link
1
installers/deb/build
Symbolic link
@@ -0,0 +1 @@
|
||||
build_deb.sh
|
||||
139
installers/deb/build_deb.sh
Executable file
139
installers/deb/build_deb.sh
Executable file
@@ -0,0 +1,139 @@
|
||||
#!/bin/bash
|
||||
###############################################################################
|
||||
#
|
||||
# build_deb.sh: build .deb files for installing Medley Interlisp on Linux
|
||||
# and WSL
|
||||
#
|
||||
# 2023-01-10 Frank Halasz
|
||||
#
|
||||
# Copyright 2023 by Interlisp.org
|
||||
#
|
||||
###############################################################################
|
||||
# set -x
|
||||
|
||||
tarball_dir=tmp/tarballs
|
||||
|
||||
# Make sure we are in the right directory
|
||||
if [ ! -f ./control-linux ];
|
||||
then
|
||||
echo "Can't find ./control file."
|
||||
echo "Incorrect cwd?"
|
||||
echo "Should be in medley/installers/deb"
|
||||
echo "Exiting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# If running as a github action or -t arg, then skip downloading the tarballs
|
||||
if ! [[ -n "${GITHUB_WORKSPACE}" || "$1" = "-t" ]];
|
||||
then
|
||||
# First, make sure gh is available and we are logged in to github
|
||||
if [ -z "$(which gh)" ];
|
||||
then
|
||||
echo "Can't find gh"
|
||||
echo "Exiting."
|
||||
exit 2
|
||||
fi
|
||||
gh auth status 2>&1 | grep --quiet --no-messages "Logged in to github.com"
|
||||
if [ $? -ne 0 ];
|
||||
then
|
||||
echo "Not logged into github."
|
||||
echo "Exiting."
|
||||
exit 3
|
||||
fi
|
||||
# then clear out the ./tmp directory
|
||||
rm -rf ./tmp
|
||||
mkdir ./tmp
|
||||
# then download the maiko and medley tarballs
|
||||
mkdir -p ${tarball_dir}
|
||||
echo "Fetching maiko and medley release tarballs"
|
||||
gh release download --repo interlisp/maiko --dir ${tarball_dir} --pattern "*.tgz"
|
||||
TAG=$(gh release list --repo interlisp/medley | head -n 1 | awk "{print \$1 }")
|
||||
gh release download ${TAG} --repo interlisp/medley --dir ${tarball_dir} --pattern "*.tgz"
|
||||
gh repo clone interlisp/notecards notecards -- --depth 1
|
||||
(cd notecards; git archive --format=tgz --output=../notecards.tgz --prefix=notecards/ main)
|
||||
mv notecards.tgz ${tarball_dir}
|
||||
rm -rf notecards
|
||||
fi
|
||||
|
||||
# Figure out release tags from tarball names
|
||||
pushd ${tarball_dir} >/dev/null 2>/dev/null
|
||||
medley_release=$(echo medley-*-loadups.tgz | sed "s/medley-\(.*\)-loadups.tgz/\1/")
|
||||
maiko_release=$(echo maiko-*-linux.x86_64.tgz | sed "s/maiko-\(.*\)-linux.x86_64.tgz/\1/")
|
||||
popd >/dev/null 2>/dev/null
|
||||
|
||||
|
||||
# For linux and wsl create packages for each arch
|
||||
for wslp in linux wsl
|
||||
do
|
||||
# For each arch create a deb file
|
||||
for arch_base in x86_64^amd64 armv7l^armhf aarch64^arm64
|
||||
do
|
||||
if [[ ${wslp} = wsl && ${arch_base} = armv7l^armhf ]];
|
||||
then
|
||||
continue
|
||||
fi
|
||||
arch=${arch_base%^*}
|
||||
debian_arch=${arch_base#*^}
|
||||
pkg_dir=tmp/pkg/${wslp}-${arch}
|
||||
#
|
||||
# Set up the pkg directories for this arch using the release tarballs
|
||||
#
|
||||
# Copy in the right control file, modifying as needed
|
||||
rm -rf ${pkg_dir}
|
||||
mkdir -p ${pkg_dir}
|
||||
mkdir -p ${pkg_dir}/DEBIAN
|
||||
sed \
|
||||
-e "s/--ARCH--/${debian_arch}/" \
|
||||
-e "s/--RELEASE--/${medley_release}_${maiko_release}/" \
|
||||
<control-${wslp} >${pkg_dir}/DEBIAN/control
|
||||
#
|
||||
il_dir=${pkg_dir}/usr/local/interlisp
|
||||
MEDLEYDIR=${il_dir#${pkg_dir}}/medley
|
||||
# Maiko and Medley files to il_dir (/usr/local/interlisp)
|
||||
mkdir -p ${il_dir}
|
||||
tar -x -z -C ${il_dir} \
|
||||
-f "${tarball_dir}/maiko-${maiko_release}-linux.${arch}.tgz"
|
||||
tar -x -z -C ${il_dir} \
|
||||
-f "${tarball_dir}/medley-${medley_release}-runtime.tgz"
|
||||
tar -x -z -C ${il_dir} \
|
||||
-f "${tarball_dir}/medley-${medley_release}-loadups.tgz"
|
||||
tar -x -z -C ${il_dir} \
|
||||
-f "${tarball_dir}/notecards.tgz"
|
||||
# Copy the medley man page into place
|
||||
man_dir="${pkg_dir}/usr/local/man/man1"
|
||||
mkdir -p "${man_dir}"
|
||||
cp -p "${il_dir}/medley/docs/man-page/medley.1.gz" "${man_dir}"
|
||||
# Configure postinst and postrm scripts and put in place in DEBIAN dir
|
||||
sed -e "s>--MEDLEYDIR-->${MEDLEYDIR}>g" <postinst >${pkg_dir}/DEBIAN/postinst
|
||||
chmod +x ${pkg_dir}/DEBIAN/postinst
|
||||
sed -e "s>--MEDLEYDIR-->${MEDLEYDIR}>g" <postrm >${pkg_dir}/DEBIAN/postrm
|
||||
chmod +x ${pkg_dir}/DEBIAN/postrm
|
||||
# For wsl scripts, include the vncviewer.exe
|
||||
if [[ ${wslp} = wsl && ${arch} = x86_64 ]];
|
||||
then
|
||||
pushd ./tmp >/dev/null
|
||||
rm -rf vncviewer64-1.12.0.exe
|
||||
wget -q https://sourceforge.net/projects/tigervnc/files/stable/1.12.0/vncviewer64-1.12.0.exe
|
||||
popd >/dev/null
|
||||
mkdir -p ${il_dir}/wsl
|
||||
cp -p tmp/vncviewer64-1.12.0.exe ${il_dir}/wsl/vncviewer64-1.12.0.exe
|
||||
fi
|
||||
#
|
||||
# Create tar file for this arch
|
||||
#
|
||||
filename="medley-full-${medley_release}_${maiko_release}-${wslp}-${arch}"
|
||||
mkdir -p tars
|
||||
echo "Creating tar file tars/${filename}.tgz"
|
||||
tar -C ${il_dir} -czf tars/${filename}.tgz .
|
||||
#
|
||||
# Create the deb file for this arch
|
||||
#
|
||||
mkdir -p debs
|
||||
deb_filepath="debs/${filename}.deb"
|
||||
rm -rf "${deb_filepath}"
|
||||
dpkg-deb --build -Zxz "${pkg_dir}" "${deb_filepath}"
|
||||
#
|
||||
done
|
||||
done
|
||||
|
||||
9
installers/deb/control-linux
Normal file
9
installers/deb/control-linux
Normal file
@@ -0,0 +1,9 @@
|
||||
Package: medley-interlisp
|
||||
Version: 1.0.0
|
||||
Release: --RELEASE--
|
||||
Maintainer: info@interlisp.org
|
||||
Description: Medley Interlisp for Linux
|
||||
Homepage: https://github.com/interlisp/medley
|
||||
Architecture: --ARCH--
|
||||
Depends: xdg-utils
|
||||
|
||||
9
installers/deb/control-wsl
Normal file
9
installers/deb/control-wsl
Normal file
@@ -0,0 +1,9 @@
|
||||
Package: medley-interlisp
|
||||
Version: 1.0.0
|
||||
Release: --RELEASE--
|
||||
Maintainer: info@interlisp.org
|
||||
Description: Medley Interlisp for Linux
|
||||
Homepage: https://github.com/interlisp/medley
|
||||
Architecture: --ARCH--
|
||||
Depends: wslu ( >= 4.1 ) | wslu ( << 4.0 ), tigervnc-standalone-server, tigervnc-xorg-extension
|
||||
|
||||
10
installers/deb/debian_wsl.txt
Normal file
10
installers/deb/debian_wsl.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
#
|
||||
sudo sed -i s/bullseye/bookworm/ /etc/apt/sources.list
|
||||
sudo apt update
|
||||
sudo apt full-upgrade -y
|
||||
#
|
||||
sudo apt install wget gnupg2 apt-transport-https
|
||||
wget -O - https://pkg.wslutiliti.es/public.key | sudo tee -a /etc/apt/trusted.gpg.d/wslu.asc
|
||||
echo "deb https://pkg.wslutiliti.es/debian bullseye main" | sudo tee -a /etc/apt/sources.list
|
||||
sudo apt update
|
||||
8
installers/deb/postinst
Normal file
8
installers/deb/postinst
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
# put linkto medley.sh into /usr/local/bin
|
||||
if [[ $1 = configure && ! -e /usr/local/bin/medley ]];
|
||||
then
|
||||
ln -s --MEDLEYDIR--/scripts/medley/medley.sh /usr/local/bin/medley
|
||||
fi
|
||||
# update the man database
|
||||
mandb
|
||||
9
installers/deb/postrm
Normal file
9
installers/deb/postrm
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
if [[ $1 = remove || $1 = purge ]];
|
||||
then
|
||||
if [ "$(realpath /usr/local/bin/medley)" = "--MEDLEYDIR--/scripts/medley.sh" ];
|
||||
then
|
||||
rm -f /usr/local/bin/medley
|
||||
fi
|
||||
fi
|
||||
|
||||
3
installers/downloads_page/md2html.sh
Executable file
3
installers/downloads_page/md2html.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
markdown medley_downloads.md > medley_downloads.html
|
||||
|
||||
38
installers/downloads_page/medley_downloads.html
Normal file
38
installers/downloads_page/medley_downloads.html
Normal file
@@ -0,0 +1,38 @@
|
||||
<ul>
|
||||
<li><h1>MEDLEY DOWNLOADS</h1>
|
||||
|
||||
<ul>
|
||||
<li><h2>Standard Installations (for Debian-based distros)</h2>
|
||||
|
||||
<ul>
|
||||
<li><h3>Standard Linux</h3>
|
||||
|
||||
<p><a href="https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-x86_64.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86_64 machines</a></p>
|
||||
|
||||
<p><a href="https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-aarch64.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p>
|
||||
|
||||
<p><a href="https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-armv7l.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines</a></p></li>
|
||||
<li><h3>Windows System for Linux</h3>
|
||||
|
||||
<p><a href="https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-wsl-x86_64.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86.64 machines</a></p>
|
||||
|
||||
<p><a href="https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-wsl-aarch64.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p></li>
|
||||
</ul></li>
|
||||
<li><h2>Local Installations (for any Linux distro)</h2>
|
||||
|
||||
<ul>
|
||||
<li><h3>Standard Linux</h3>
|
||||
|
||||
<p><a href="https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-x86_64.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86_64 machines</a></p>
|
||||
|
||||
<p><a href="https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-aarch64.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p>
|
||||
|
||||
<p><a href="https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-armv7l.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines</a></p></li>
|
||||
<li><h3>Windows System for Linux</h3>
|
||||
|
||||
<p><a href="https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-wsl-x86_64.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86_64 machines</a></p>
|
||||
|
||||
<p><a href="https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-wsl-aarch64.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
41
installers/downloads_page/medley_downloads.md
Normal file
41
installers/downloads_page/medley_downloads.md
Normal file
@@ -0,0 +1,41 @@
|
||||
* # MEDLEY DOWNLOADS
|
||||
|
||||
* ## Standard Installations (for Debian-based distros)
|
||||
|
||||
* ### Standard Linux
|
||||
|
||||
[Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-x86\_64.deb)
|
||||
|
||||
[Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-aarch64.deb)
|
||||
|
||||
[Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines](https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-armv7l.deb)
|
||||
|
||||
* ### Windows System for Linux
|
||||
|
||||
[Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\.64 machines](https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-wsl-x86\_64.deb)
|
||||
|
||||
[Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-wsl-aarch64.deb)
|
||||
|
||||
* ## Local Installations (for any Linux distro)
|
||||
|
||||
* ### Standard Linux
|
||||
|
||||
[Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-x86\_64.tgz)
|
||||
|
||||
[Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-aarch64.tgz)
|
||||
|
||||
[Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines](https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-linux-armv7l.tgz)
|
||||
|
||||
* ### Windows System for Linux
|
||||
|
||||
[Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-wsl-x86\_64.tgz)
|
||||
|
||||
[Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](https://github.com/Interlisp/medley/releases/download/@@@GITHUB.SUBDIR@@@/@@@FULL.RELEASE.FILENAME@@@-wsl-aarch64.tgz)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
(FILECREATED " 4-May-2018 17:18:00"
|
||||
{DSK}<Users>kaplan>Local>medley3.5>lispcore>library>UNIXPRINT.;8 14600
|
||||
|
||||
changes to%: (FNS UnixPrintCommand)
|
||||
(FILECREATED "20-Jan-2023 22:44:05" {DSK}<home>frank>il>medley>gmedley>library>UNIXPRINT.;4 13651
|
||||
|
||||
previous date%: "16-Apr-2018 17:25:15"
|
||||
{DSK}<Users>kaplan>Local>medley3.5>lispcore>library>UNIXPRINT.;7)
|
||||
:CHANGES-TO (VARS UNIXPRINTCOMS)
|
||||
|
||||
:PREVIOUS-DATE "18-Jan-2023 13:28:36" {DSK}<home>frank>il>medley>gmedley>library>UNIXPRINT.;3
|
||||
)
|
||||
|
||||
|
||||
(* ; "
|
||||
Copyright (c) 1990, 1991, 1992, 1993, 1995, 1997, 1999, 2001, 2018 by Venue. All rights reserved.
|
||||
Copyright (c) 1990-1993, 1995, 1997, 1999, 2001, 2018, 2023 by Venue.
|
||||
")
|
||||
|
||||
(PRETTYCOMPRINT UNIXPRINTCOMS)
|
||||
|
||||
(RPAQQ UNIXPRINTCOMS
|
||||
[(FNS InstallUnixPrinter UnixPrint UnixShellQuote UnixTempFile UnixPrintCommand)
|
||||
(FUNCTIONS ShellCommand)
|
||||
[(FILES UNIXUTILS)
|
||||
(FNS InstallUnixPrinter UnixPrint UnixShellQuote UnixTempFile UnixPrintCommand)
|
||||
(INITVARS (UnixPrinterName NIL)
|
||||
(UNIXPRINTSWITCHES " -r -s "))
|
||||
(P
|
||||
(* ;;
|
||||
"(InstallUnixPrinter) commented out because POSTSCRIPT indirects according to platform")
|
||||
(* ;;
|
||||
"(InstallUnixPrinter) commented out because POSTSCRIPT indirects according to platform")
|
||||
|
||||
(PRIN1 "Please feel free to edit UnixPrintCommand." PROMPTWINDOW))
|
||||
(PROP FILETYPE UNIXPRINT)
|
||||
@@ -31,27 +31,29 @@ Copyright (c) 1990, 1991, 1992, 1993, 1995, 1997, 1999, 2001, 2018 by Venue. Al
|
||||
(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA)
|
||||
(NLAML)
|
||||
(LAMA])
|
||||
|
||||
(FILESLOAD UNIXUTILS)
|
||||
(DEFINEQ
|
||||
|
||||
(InstallUnixPrinter
|
||||
[LAMBDA (PrinterTypes) (* ; "Edited 8-Feb-97 11:33 by rmk:")
|
||||
[LAMBDA (PrinterTypes) (* ; "Edited 8-Feb-97 11:33 by rmk:")
|
||||
|
||||
(* ;; "Set up any printers in PrinterTypes (or just Postscript by default) so that they'll be printed using the unix LPR command.")
|
||||
(* ;; "Set up any printers in PrinterTypes (or just Postscript by default) so that they'll be printed using the unix LPR command.")
|
||||
|
||||
(DECLARE (GLOBALVARS PRINTERTYPES))
|
||||
(for type inside (OR PrinterTypes '(POSTSCRIPT))
|
||||
do (for x in PRINTERTYPES when (EQMEMB type (CAR x))
|
||||
do (LET ((PRINTERTYPE type))
|
||||
(PUTASSOC 'SEND (LIST 'UnixPrint)
|
||||
(CDR x])
|
||||
do (LET ((PRINTERTYPE type))
|
||||
(PUTASSOC 'SEND (LIST 'UnixPrint)
|
||||
(CDR x])
|
||||
|
||||
(UnixPrint
|
||||
[LAMBDA (HOST FILE PRINTOPTIONS) (* ; "Edited 7-Dec-2001 14:55 by rmk:")
|
||||
(* ; "Edited 20-May-92 14:13 by nilsson")
|
||||
[LAMBDA (HOST FILE PRINTOPTIONS) (* ; "Edited 7-Dec-2001 14:55 by rmk:")
|
||||
(* ; "Edited 20-May-92 14:13 by nilsson")
|
||||
|
||||
(* ;; "Given a print FILE, use the Unix %"lpr%" command to spool it to a printer.")
|
||||
(* ;; "Given a print FILE, use the Unix %"lpr%" command to spool it to a printer.")
|
||||
|
||||
(* ;; "The printer is named by HOST or UnixPrinterName, a Global variable.")
|
||||
(* ;; "The printer is named by HOST or UnixPrinterName, a Global variable.")
|
||||
|
||||
[LET*
|
||||
((PRINTER (OR HOST UnixPrinterName))
|
||||
@@ -60,9 +62,9 @@ Copyright (c) 1990, 1991, 1992, 1993, 1995, 1997, 1999, 2001, 2018 by Venue. Al
|
||||
(NSIDES (LISTGET PRINTOPTIONS '%#SIDES))
|
||||
(TYPE (PRINTERTYPE PRINTER)))
|
||||
|
||||
(* ;; "Removed redundant check (we already know it's a PS printer), JDS 2/19/92:")
|
||||
(* ;; "Removed redundant check (we already know it's a PS printer), JDS 2/19/92:")
|
||||
|
||||
(* ;; "(COND ((NULL TYPE) (ERROR (CONCAT %"Printertype unknown for %" PRINTER))) ((NOT (EQL (U-CASE TYPE) 'POSTSCRIPT)) (ERROR (CONCAT %"Printertype for %" PRINTER %" is not Postscript%"))))")
|
||||
(* ;; "(COND ((NULL TYPE) (ERROR (CONCAT %"Printertype unknown for %" PRINTER))) ((NOT (EQL (U-CASE TYPE) 'POSTSCRIPT)) (ERROR (CONCAT %"Printertype for %" PRINTER %" is not Postscript%"))))")
|
||||
|
||||
[COND
|
||||
((OR (NULL NAME)
|
||||
@@ -76,109 +78,103 @@ Copyright (c) 1990, 1991, 1992, 1993, 1995, 1997, 1999, 2001, 2018 by Venue. Al
|
||||
0)
|
||||
(SETQ NAME "Medley Output"]
|
||||
|
||||
(* ;; "Don't break if you have trouble with preexisting files, e.g. because of protection.")
|
||||
(* ;; "Don't break if you have trouble with preexisting files, e.g. because of protection.")
|
||||
|
||||
(FOR F IN [CAR (NLSETQ (FILDIR (PACKFILENAME 'HOST 'DSK 'EXTENSION '* 'BODY
|
||||
(UnixTempFile 'medleyprint. T]
|
||||
(FOR F IN [CAR (NLSETQ (FILDIR (PACKFILENAME 'HOST 'DSK 'EXTENSION '* 'BODY (UnixTempFile
|
||||
'medleyprint. T]
|
||||
WHEN (CAR (NLSETQ (IGREATERP (DIFFERENCE (IDATE)
|
||||
(GETFILEINFO F 'ICREATIONDATE))
|
||||
120))) DO (NLSETQ (DELFILE F)))
|
||||
(GETFILEINFO F 'ICREATIONDATE))
|
||||
120))) DO (NLSETQ (DELFILE F)))
|
||||
|
||||
(* ;; "The temp file's name will be of the form medleyprint.<idate>, so all such files can be found for deletion on a subsequent call after a certain amount of time (2 minutes) has gone by. If we delete immediately, it may happen before lpr has done its thing. ")
|
||||
(* ;; "The temp file's name will be of the form medleyprint.<idate>, so all such files can be found for deletion on a subsequent call after a certain amount of time (2 minutes) has gone by. If we delete immediately, it may happen before lpr has done its thing. ")
|
||||
|
||||
(CL:MULTIPLE-VALUE-BIND
|
||||
(tmpstream tmpname)
|
||||
(UnixTempFile 'medleyprint.)
|
||||
(COND
|
||||
(tmpstream
|
||||
(CL:MULTIPLE-VALUE-BIND (tmpstream tmpname)
|
||||
(UnixTempFile 'medleyprint.)
|
||||
(COND
|
||||
(tmpstream
|
||||
|
||||
(* ;; "First, copy the lisp file to /tmp so lpr can find it.")
|
||||
(* ;; "First, copy the lisp file to /tmp so lpr can find it.")
|
||||
|
||||
[CL:WITH-OPEN-STREAM
|
||||
(out tmpstream)
|
||||
(CL:WITH-OPEN-STREAM
|
||||
(in (OPENSTREAM FILE 'INPUT))
|
||||
(printout PROMPTWINDOW .TAB0 0 "Spooling output to Unix printer"
|
||||
(COND
|
||||
(PRINTER (CONCAT " '" PRINTER "'"))
|
||||
(T ""))
|
||||
"...")
|
||||
(IF NSIDES
|
||||
THEN
|
||||
|
||||
(* ;; "Have to put magic simplex/duplex stuff in the tmp file itself, after the first line, cause there is no other way to control some duplex printers.")
|
||||
[CL:WITH-OPEN-STREAM
|
||||
(out tmpstream)
|
||||
(CL:WITH-OPEN-STREAM
|
||||
(in (OPENSTREAM FILE 'INPUT))
|
||||
(printout PROMPTWINDOW .TAB0 0 "Spooling output to Unix printer"
|
||||
(COND
|
||||
(PRINTER (CONCAT " '" PRINTER "'"))
|
||||
(T ""))
|
||||
"...")
|
||||
(IF NSIDES
|
||||
THEN
|
||||
(* ;; "Have to put magic simplex/duplex stuff in the tmp file itself, after the first line, cause there is no other way to control some duplex printers.")
|
||||
|
||||
(BIND C SAWCR
|
||||
DO (SETQ C (BIN in))
|
||||
(IF (MEMB C (CHARCODE (CR LF)))
|
||||
THEN (BOUT out C)
|
||||
(SETQ SAWCR T)
|
||||
ELSEIF SAWCR
|
||||
THEN
|
||||
(IF (MEMB C (CHARCODE (CR LF)))
|
||||
THEN (BOUT out C)
|
||||
(SETQ SAWCR T)
|
||||
ELSEIF SAWCR
|
||||
THEN
|
||||
(* ;; "First char of 2nd line: nonCR/LF after CR/LF")
|
||||
|
||||
(* ;;
|
||||
"First char of 2nd line: nonCR/LF after CR/LF")
|
||||
(* ;; "Put out simplex header, then print character in C")
|
||||
|
||||
(* ;;
|
||||
"Put out simplex header, then print character in C")
|
||||
(PRINTOUT out "%%BeginSetup" T)
|
||||
(PRINTOUT out "[{" T "%%%%BeginFeature: *Duplex Simplex" T
|
||||
"<< /Duplex " (CL:IF (EQ NSIDES 1)
|
||||
"false"
|
||||
"true")
|
||||
" /Tumble false >> setpagedevice" T
|
||||
"%%%%EndFeature" T "} stopped cleartomark" T)
|
||||
(PRINTOUT out "%%EndSetup" T)
|
||||
(BOUT out C)
|
||||
(COPYCHARS in out (GETFILEPTR in)
|
||||
-1)
|
||||
(RETURN)
|
||||
ELSE (BOUT out C)))
|
||||
ELSE (COPYCHARS in out 0 -1]
|
||||
|
||||
(PRINTOUT out "%%BeginSetup" T)
|
||||
(PRINTOUT out "[{" T
|
||||
"%%%%BeginFeature: *Duplex Simplex" T
|
||||
"<< /Duplex " (CL:IF (EQ NSIDES 1)
|
||||
"false"
|
||||
"true")
|
||||
" /Tumble false >> setpagedevice" T
|
||||
"%%%%EndFeature" T "} stopped cleartomark" T)
|
||||
(PRINTOUT out "%%EndSetup" T)
|
||||
(BOUT out C)
|
||||
(COPYCHARS in out (GETFILEPTR in)
|
||||
-1)
|
||||
(RETURN)
|
||||
ELSE (BOUT out C)))
|
||||
ELSE (COPYCHARS in out 0 -1]
|
||||
(* ;; "Now make Unix print the /tmp file.")
|
||||
|
||||
(* ;; "Now make Unix print the /tmp file.")
|
||||
|
||||
(ShellCommand (UnixPrintCommand PRINTER COPIES NAME tmpname)
|
||||
PROMPTWINDOW)
|
||||
(printout PROMPTWINDOW "done" T))
|
||||
(T (ERROR "Couldn't create unix temp file"]
|
||||
(ShellCommand (UnixPrintCommand PRINTER COPIES NAME tmpname)
|
||||
PROMPTWINDOW)
|
||||
(printout PROMPTWINDOW "done" T))
|
||||
(T (ERROR "Couldn't create unix temp file"))))]
|
||||
T])
|
||||
|
||||
(UnixShellQuote
|
||||
[LAMBDA (STRING)
|
||||
(DECLARE (LOCALVARS . T)) (* ; "Edited 19-Apr-89 21:14 by TAL")
|
||||
(DECLARE (LOCALVARS . T)) (* ; "Edited 19-Apr-89 21:14 by TAL")
|
||||
(LET* ((X (CHCON STRING))
|
||||
(CT X)
|
||||
C FLG)
|
||||
[while (LISTP CT) do (SETQ C (CAR CT))
|
||||
(COND
|
||||
([OR (<= (CHARCODE a)
|
||||
C
|
||||
(CHARCODE z))
|
||||
(<= (CHARCODE A)
|
||||
C
|
||||
(CHARCODE Z))
|
||||
(<= (CHARCODE 0)
|
||||
C
|
||||
(CHARCODE 9))
|
||||
(FMEMB C (CHARCODE (- /]
|
||||
(SETQ CT (CDR CT)))
|
||||
(T (SETQ FLG T)
|
||||
(RPLNODE CT (CHARCODE \)
|
||||
(CONS (COND
|
||||
((FMEMB C (CHARCODE (CR LF)))
|
||||
(CHARCODE SPACE))
|
||||
(T C))
|
||||
(SETQ CT (CDR CT]
|
||||
(COND
|
||||
([OR (<= (CHARCODE a)
|
||||
C
|
||||
(CHARCODE z))
|
||||
(<= (CHARCODE A)
|
||||
C
|
||||
(CHARCODE Z))
|
||||
(<= (CHARCODE 0)
|
||||
C
|
||||
(CHARCODE 9))
|
||||
(FMEMB C (CHARCODE (- /]
|
||||
(SETQ CT (CDR CT)))
|
||||
(T (SETQ FLG T)
|
||||
(RPLNODE CT (CHARCODE \)
|
||||
(CONS (COND
|
||||
((FMEMB C (CHARCODE (CR LF)))
|
||||
(CHARCODE SPACE))
|
||||
(T C))
|
||||
(SETQ CT (CDR CT]
|
||||
(COND
|
||||
(FLG (CONCATCODES X))
|
||||
(T STRING])
|
||||
|
||||
(UnixTempFile
|
||||
[LAMBDA (Prefix DontOpen) (* ; "Edited 28-Apr-93 13:49 by rmk:")
|
||||
(* ; "Edited 12-Jan-89 19:07 by TAL")
|
||||
[LAMBDA (Prefix DontOpen) (* ; "Edited 28-Apr-93 13:49 by rmk:")
|
||||
(* ; "Edited 12-Jan-89 19:07 by TAL")
|
||||
(LET* ([host (AND (BOUNDP 'FISTempDir)
|
||||
(UNPACKFILENAME.STRING FISTempDir 'HOST]
|
||||
(dir (OR [COND
|
||||
@@ -191,39 +187,35 @@ Copyright (c) 1990, 1991, 1992, 1993, 1995, 1997, 1999, 2001, 2018 by Venue. Al
|
||||
file unix)
|
||||
(COND
|
||||
([for i from 1 to 100
|
||||
thereis (NOT (INFILEP (SETQ file (CONCAT "{UNIX}"
|
||||
(SETQ unix
|
||||
(CONCAT "/" dir "/" str i]
|
||||
thereis (NOT (INFILEP (SETQ file (CONCAT "{UNIX}" (SETQ unix
|
||||
(CONCAT "/" dir "/" str i]
|
||||
(CL:VALUES [COND
|
||||
(DontOpen file)
|
||||
(T
|
||||
(* ;;
|
||||
"Type TEXT seems to be important for Apple LaserWriters at PARC")
|
||||
(* ;; "Type TEXT seems to be important for Apple LaserWriters at PARC")
|
||||
|
||||
(OPENSTREAM file 'OUTPUT NIL '((TYPE TEXT]
|
||||
unix])
|
||||
|
||||
(UnixPrintCommand
|
||||
[LAMBDA (PRINTER COPIES NAME TMPNAME) (* ; "Edited 4-May-2018 17:17 by rmk:")
|
||||
(* ;
|
||||
"Edited 20-May-92 14:26 by nilsson")
|
||||
[LAMBDA (PRINTER COPIES NAME TMPNAME) (* ; "Edited 4-May-2018 17:17 by rmk:")
|
||||
(* ; "Edited 20-May-92 14:26 by nilsson")
|
||||
|
||||
(* ;; "This function is called when the user wants to UNIXPRINT a file. It has to return a string that when sent to a shell prints the file tmpname. In the cub version this should look something like %"/usr/ucb/lpr tmpname%". The arguments to this function are:")
|
||||
(* ;; "This function is called when the user wants to UNIXPRINT a file. It has to return a string that when sent to a shell prints the file tmpname. In the cub version this should look something like %"/usr/ucb/lpr tmpname%". The arguments to this function are:")
|
||||
|
||||
(* ;; " PRINTER - the name of the printer. Usually something like lw or plw.")
|
||||
(* ;; " PRINTER - the name of the printer. Usually something like lw or plw.")
|
||||
|
||||
(* ;; "COPIES - how many copies of this job to be printed.")
|
||||
(* ;; "COPIES - how many copies of this job to be printed.")
|
||||
|
||||
(* ;; "NAME - the name of this job. This gets printed on the banner of your job.")
|
||||
(* ;; "NAME - the name of this job. This gets printed on the banner of your job.")
|
||||
|
||||
(* ;;
|
||||
"TMPNAME - The name of the temporary file that contains the postscript code for this job. ")
|
||||
(* ;; "TMPNAME - The name of the temporary file that contains the postscript code for this job. ")
|
||||
|
||||
(* ;; "Note the clever function UnixShellQuote. It converts any lisp name to a string that is quoted according to /bin/sh syntax")
|
||||
(* ;; "Note the clever function UnixShellQuote. It converts any lisp name to a string that is quoted according to /bin/sh syntax")
|
||||
|
||||
(* ;; "UNIXPRINTSWITCHES makes it easy for other sites to change just the lpr switches.")
|
||||
(* ;; "UNIXPRINTSWITCHES makes it easy for other sites to change just the lpr switches.")
|
||||
|
||||
(* ;; "Use raw lpr, let system decide where it is located.")
|
||||
(* ;; "Use raw lpr, let system decide where it is located.")
|
||||
|
||||
(CONCAT "lpr " (COND
|
||||
((AND PRINTER (NEQ 0 (NCHARS PRINTER)))
|
||||
@@ -242,21 +234,12 @@ Copyright (c) 1990, 1991, 1992, 1993, 1995, 1997, 1999, 2001, 2018 by Venue. Al
|
||||
" " TMPNAME])
|
||||
)
|
||||
|
||||
(CL:DEFUN ShellCommand (Cmd &OPTIONAL (Output T))
|
||||
(CL:WITH-OPEN-STREAM (s (CREATE-PROCESS-STREAM Cmd))
|
||||
(CL:TAGBODY [SETFILEINFO s 'ENDOFSTREAMOP #'(CL:LAMBDA (s)
|
||||
(GO OUT]
|
||||
(CL:LOOP (PRINTCCODE (READCCODE s)
|
||||
Output))
|
||||
OUT))
|
||||
NIL)
|
||||
|
||||
(RPAQ? UnixPrinterName NIL)
|
||||
|
||||
(RPAQ? UNIXPRINTSWITCHES " -r -s ")
|
||||
|
||||
|
||||
(* ;; "(InstallUnixPrinter) commented out because POSTSCRIPT indirects according to platform")
|
||||
(* ;; "(InstallUnixPrinter) commented out because POSTSCRIPT indirects according to platform")
|
||||
|
||||
|
||||
(PRIN1 "Please feel free to edit UnixPrintCommand." PROMPTWINDOW)
|
||||
@@ -266,26 +249,24 @@ Copyright (c) 1990, 1991, 1992, 1993, 1995, 1997, 1999, 2001, 2018 by Venue. Al
|
||||
(DEFINEQ
|
||||
|
||||
(UnixPrintCommand
|
||||
[LAMBDA (PRINTER COPIES NAME TMPNAME) (* ; "Edited 4-May-2018 17:17 by rmk:")
|
||||
(* ;
|
||||
"Edited 20-May-92 14:26 by nilsson")
|
||||
[LAMBDA (PRINTER COPIES NAME TMPNAME) (* ; "Edited 4-May-2018 17:17 by rmk:")
|
||||
(* ; "Edited 20-May-92 14:26 by nilsson")
|
||||
|
||||
(* ;; "This function is called when the user wants to UNIXPRINT a file. It has to return a string that when sent to a shell prints the file tmpname. In the cub version this should look something like %"/usr/ucb/lpr tmpname%". The arguments to this function are:")
|
||||
(* ;; "This function is called when the user wants to UNIXPRINT a file. It has to return a string that when sent to a shell prints the file tmpname. In the cub version this should look something like %"/usr/ucb/lpr tmpname%". The arguments to this function are:")
|
||||
|
||||
(* ;; " PRINTER - the name of the printer. Usually something like lw or plw.")
|
||||
(* ;; " PRINTER - the name of the printer. Usually something like lw or plw.")
|
||||
|
||||
(* ;; "COPIES - how many copies of this job to be printed.")
|
||||
(* ;; "COPIES - how many copies of this job to be printed.")
|
||||
|
||||
(* ;; "NAME - the name of this job. This gets printed on the banner of your job.")
|
||||
(* ;; "NAME - the name of this job. This gets printed on the banner of your job.")
|
||||
|
||||
(* ;;
|
||||
"TMPNAME - The name of the temporary file that contains the postscript code for this job. ")
|
||||
(* ;; "TMPNAME - The name of the temporary file that contains the postscript code for this job. ")
|
||||
|
||||
(* ;; "Note the clever function UnixShellQuote. It converts any lisp name to a string that is quoted according to /bin/sh syntax")
|
||||
(* ;; "Note the clever function UnixShellQuote. It converts any lisp name to a string that is quoted according to /bin/sh syntax")
|
||||
|
||||
(* ;; "UNIXPRINTSWITCHES makes it easy for other sites to change just the lpr switches.")
|
||||
(* ;; "UNIXPRINTSWITCHES makes it easy for other sites to change just the lpr switches.")
|
||||
|
||||
(* ;; "Use raw lpr, let system decide where it is located.")
|
||||
(* ;; "Use raw lpr, let system decide where it is located.")
|
||||
|
||||
(CONCAT "lpr " (COND
|
||||
((AND PRINTER (NEQ 0 (NCHARS PRINTER)))
|
||||
@@ -322,9 +303,9 @@ Copyright (c) 1990, 1991, 1992, 1993, 1995, 1997, 1999, 2001, 2018 by Venue. Al
|
||||
|
||||
(ADDTOVAR LAMA )
|
||||
)
|
||||
(PUTPROPS UNIXPRINT COPYRIGHT ("Venue" 1990 1991 1992 1993 1995 1997 1999 2001 2018))
|
||||
(PUTPROPS UNIXPRINT COPYRIGHT ("Venue" 1990 1991 1992 1993 1995 1997 1999 2001 2018 2023))
|
||||
(DECLARE%: DONTCOPY
|
||||
(FILEMAP (NIL (1423 11730 (InstallUnixPrinter 1433 . 2041) (UnixPrint 2043 . 7114) (UnixShellQuote
|
||||
7116 . 8670) (UnixTempFile 8672 . 9980) (UnixPrintCommand 9982 . 11728)) (11732 12105 (ShellCommand
|
||||
11732 . 12105)) (12439 14197 (UnixPrintCommand 12449 . 14195)))))
|
||||
(FILEMAP (NIL (1389 11216 (InstallUnixPrinter 1399 . 1991) (UnixPrint 1993 . 6875) (UnixShellQuote
|
||||
6877 . 8306) (UnixTempFile 8308 . 9531) (UnixPrintCommand 9533 . 11214)) (11550 13243 (
|
||||
UnixPrintCommand 11560 . 13241)))))
|
||||
STOP
|
||||
|
||||
Binary file not shown.
113
library/UNIXUTILS
Normal file
113
library/UNIXUTILS
Normal file
@@ -0,0 +1,113 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
|
||||
(FILECREATED "18-Jan-2023 20:36:10" {DSK}<home>frank>il>medley>gmedley>library>UNIXUTILS.;7 5091
|
||||
|
||||
:CHANGES-TO (FNS ShellBrowser ShellBrowse ShellOpen)
|
||||
(VARS UNIXUTILSCOMS)
|
||||
(FUNCTIONS ShellWhich)
|
||||
|
||||
:PREVIOUS-DATE "18-Jan-2023 13:22:28" {DSK}<home>frank>il>medley>gmedley>greetfiles>UNIXUTILS.;1
|
||||
)
|
||||
|
||||
|
||||
(PRETTYCOMPRINT UNIXUTILSCOMS)
|
||||
|
||||
(RPAQQ UNIXUTILSCOMS ((GLOBALVARS ShellBrowser)
|
||||
(INITVARS (ShellBrowser))
|
||||
(FUNCTIONS ShellCommand ShellWhich)
|
||||
(FNS ShellBrowser ShellBrowse)))
|
||||
(DECLARE%: DOEVAL@COMPILE DONTCOPY
|
||||
|
||||
(GLOBALVARS ShellBrowser)
|
||||
)
|
||||
|
||||
(RPAQ? ShellBrowser )
|
||||
|
||||
(CL:DEFUN ShellCommand (Cmd &OPTIONAL (Output T))
|
||||
(CL:WITH-OPEN-STREAM (s (CREATE-PROCESS-STREAM Cmd))
|
||||
(CL:TAGBODY [SETFILEINFO s 'ENDOFSTREAMOP #'(CL:LAMBDA (s)
|
||||
(GO OUT]
|
||||
(CL:LOOP (PRINTCCODE (READCCODE s)
|
||||
Output))
|
||||
OUT))
|
||||
NIL)
|
||||
|
||||
(CL:DEFUN ShellWhich (Cmd) (* ; "Edited 18-Jan-2023 13:19 by FGH")
|
||||
[CL:WITH-OPEN-STREAM (S (OPENSTREAM '{NODIRCORE} 'BOTH))
|
||||
(ShellCommand (CONCAT "which " Cmd)
|
||||
S)
|
||||
(COND
|
||||
((EQ (GETEOFPTR S)
|
||||
0)
|
||||
NIL)
|
||||
(T (SETFILEPTR S 0)
|
||||
(MKSTRING (READ S])
|
||||
(DEFINEQ
|
||||
|
||||
(ShellBrowser
|
||||
[LAMBDA NIL (* ; "Edited 18-Jan-2023 20:30 by FGH")
|
||||
(OR ShellBrowser (SETQ ShellBrowser (LET (CMDPATH)
|
||||
(if (STRPOS "darwin" (OR (UNIX-GETENV "OSTYPE")
|
||||
(UNIX-GETENV "PATH")))
|
||||
then
|
||||
(* ;; " MacOS")
|
||||
|
||||
"open"
|
||||
elseif (SETQ CMDPATH (ShellWhich "wslview"))
|
||||
then
|
||||
(* ;; "windows with WSL")
|
||||
|
||||
CMDPATH
|
||||
elseif (SETQ CMDPATH (ShellWhich "xdg-open"))
|
||||
then
|
||||
(* ;; "Linux systems with xdg-utils installed ")
|
||||
|
||||
CMDPATH
|
||||
elseif (SETQ CMDPATH (ShellWhich "git"))
|
||||
then
|
||||
(* ;; " Systems with git installed")
|
||||
|
||||
(CONCAT CMDPATH " web--browse")
|
||||
(* ; "")
|
||||
elseif (SETQ CMDPATH (ShellWhich "lynx"))
|
||||
then
|
||||
(* ;; " Systems with lynx installed")
|
||||
|
||||
(LET (CMDPATH2)
|
||||
(if (SETQ CMDPATH2 (ShellWhich "xterm"))
|
||||
then (CONCAT CMDPATH2 " -e " CMDPATH)
|
||||
else (LIST CMDPATH)))
|
||||
else
|
||||
(* ;;
|
||||
" Out of ideas - just return a dummy function")
|
||||
|
||||
"true"])
|
||||
|
||||
(ShellBrowse
|
||||
[LAMBDA (URL) (* ; "Edited 18-Jan-2023 20:32 by FGH")
|
||||
|
||||
(* ;; " Open the web page specified by URL using an external browser via shell call")
|
||||
|
||||
(* ;;
|
||||
" URL must start with http:// or https:// (case ireelevant) or this function will just return NIL.")
|
||||
|
||||
(* ;; " Returns T otherwise.")
|
||||
|
||||
(SETQ URL (MKSTRING URL))
|
||||
(if (OR (EQ (STRPOS "http://" (L-CASE URL))
|
||||
1)
|
||||
(EQ (STRPOS "https://" (L-CASE URL))
|
||||
1))
|
||||
then (LET ((BROWSER (ShellBrowser)))
|
||||
(if (LISTP BROWSER)
|
||||
then (CHAT 'SHELL NIL (CONCAT (CAR BROWSER)
|
||||
" '" URL "'"))
|
||||
else (ShellCommand (CONCAT BROWSER " '" URL "'"
|
||||
" >>/tmp/ShellBrowser-warnings-$$.txt")))
|
||||
T)
|
||||
else NIL])
|
||||
)
|
||||
(DECLARE%: DONTCOPY
|
||||
(FILEMAP (NIL (764 1137 (ShellCommand 764 . 1137)) (1139 1538 (ShellWhich 1139 . 1538)) (1539 5068 (
|
||||
ShellBrowser 1549 . 4072) (ShellBrowse 4074 . 5066)))))
|
||||
STOP
|
||||
BIN
library/UNIXUTILS.DFASL
Normal file
BIN
library/UNIXUTILS.DFASL
Normal file
Binary file not shown.
@@ -16,4 +16,7 @@ fi
|
||||
./scripts/cpv tmp/lisp.sysout loadups
|
||||
./scripts/cpv tmp/whereis.hash loadups
|
||||
./scripts/cpv tmp/exports.all library
|
||||
if [ "${1}" = "-apps" ]; then
|
||||
./scripts/cpv tmp/apps.sysout loadups
|
||||
fi
|
||||
|
||||
|
||||
@@ -7,12 +7,19 @@ if [ ! -x run-medley ] ; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$1" = "-apps" ]; then
|
||||
apps="./scripts/loadup-apps-from-full.sh"
|
||||
else
|
||||
apps="true"
|
||||
fi
|
||||
|
||||
./scripts/loadup-init.sh && \
|
||||
./scripts/loadup-mid-from-init.sh && \
|
||||
./scripts/loadup-lisp-from-mid.sh && \
|
||||
./scripts/loadup-full-from-lisp.sh && \
|
||||
${apps} && \
|
||||
./scripts/loadup-aux.sh && \
|
||||
./scripts/copy-all.sh
|
||||
./scripts/copy-all.sh $1
|
||||
|
||||
echo "**** DONE ****"
|
||||
|
||||
|
||||
73
scripts/loadup-apps-from-full.sh
Executable file
73
scripts/loadup-apps-from-full.sh
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/bin/bash
|
||||
|
||||
#set -x
|
||||
|
||||
# function to discover what directory this script is being executed from
|
||||
where_am_i() {
|
||||
|
||||
# call this with ${BASH_SOURCE[0]:-$0} as its (only) parameter
|
||||
|
||||
local SCRIPT_PATH="$1";
|
||||
|
||||
pushd . > '/dev/null';
|
||||
|
||||
while [ -h "$SCRIPT_PATH" ];
|
||||
do
|
||||
cd "$( dirname -- "$SCRIPT_PATH"; )";
|
||||
SCRIPT_PATH="$( readlink -f -- "$SCRIPT_PATH"; )";
|
||||
done
|
||||
|
||||
cd "$( dirname -- "$SCRIPT_PATH"; )" > '/dev/null';
|
||||
SCRIPT_PATH="$( pwd; )";
|
||||
|
||||
popd > '/dev/null';
|
||||
|
||||
echo "${SCRIPT_PATH}"
|
||||
}
|
||||
|
||||
SCRIPTDIR=$(where_am_i "${BASH_SOURCE[0]:-$0}")
|
||||
export MEDLEYDIR=$(cd ${SCRIPTDIR} && cd .. && pwd)
|
||||
export ROOMSDIR=${MEDLEYDIR}/rooms
|
||||
export CLOSDIR=${MEDLEYDIR}/clos
|
||||
|
||||
export NOTECARDSDIR=${MEDLEYDIR}/notecards
|
||||
if [ ! -e ${NOTECARDSDIR} ]; then
|
||||
NOTECARDSDIR=$(cd ${MEDLEYDIR}/../ && pwd)/notecards
|
||||
if [ ! -e ${NOTECARDSDIR} ]; then
|
||||
NOTECARDSDIR=$(cd ${MEDLEYDIR}/../../ && pwd)/notecards
|
||||
if [ ! -e ${NOTECARDSDIR} ]; then
|
||||
NOTECARDSDIR=""
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "${SYSOUTDIR}" ]; then
|
||||
export SYSOUTDIR=${MEDLEYDIR}/tmp
|
||||
fi
|
||||
|
||||
if [ -z "${FULLSYSOUTPATH}" ]; then
|
||||
FULLSYSOUTPATH=${SYSOUTDIR}/full.sysout
|
||||
if [ ! -e ${FULLSYSOUTPATH} ]; then
|
||||
FULLSYSOUTPATH=${MEDLEYDIR}/loadups/full.sysout
|
||||
fi
|
||||
fi
|
||||
|
||||
cd ${MEDLEYDIR}
|
||||
|
||||
scr="-sc 1024x768 -g 1042x790"
|
||||
|
||||
mkdir -p ${SYSOUTDIR}
|
||||
touch ${SYSOUTDIR}/loadup.timestamp
|
||||
|
||||
./run-medley $scr -loadup "${MEDLEYDIR}/sources/LOADUP-APPS.CM" "${FULLSYSOUTPATH}"
|
||||
|
||||
if [ ${SYSOUTDIR}/apps.sysout -nt ${SYSOUTDIR}/loadup.timestamp ]; then
|
||||
echo ---- made ----
|
||||
ls -l ${SYSOUTDIR}/apps.*
|
||||
echo --------------
|
||||
else
|
||||
echo XXXXX FAILURE XXXXX
|
||||
ls -l ${SYSOUTDIR}/apps.*
|
||||
exit 1
|
||||
fi
|
||||
|
||||
116
scripts/medley/medley.sh
Executable file
116
scripts/medley/medley.sh
Executable file
@@ -0,0 +1,116 @@
|
||||
#!/bin/bash
|
||||
###############################################################################
|
||||
#
|
||||
# medley.sh - script for running Medley Interlisp on Linux/WSL.
|
||||
# On Linux and WSL when using X Windows it just sets
|
||||
# up directories and environment variables and then calls
|
||||
# run-medley. On WSL, there is an option to run without
|
||||
# or around X Windows by using the XVnc and a VNC viewer
|
||||
# on the Windows side. This script will start this VNC viewer
|
||||
# on the Windows side.
|
||||
#
|
||||
# 2023-01-12 Frank Halasz
|
||||
#
|
||||
# Copyright 2023 Interlisp.org
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
#set -x
|
||||
|
||||
# functions to discover what directory this script is being executed from
|
||||
get_abs_filename() {
|
||||
# $1 : relative filename
|
||||
echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")"
|
||||
}
|
||||
get_script_dir() {
|
||||
|
||||
# call this with ${BASH_SOURCE[0]:-$0} as its (only) parameter
|
||||
|
||||
# set -x
|
||||
|
||||
local SCRIPT_PATH="$( get_abs_filename "$1" )";
|
||||
|
||||
pushd . > '/dev/null';
|
||||
|
||||
while [ -h "$SCRIPT_PATH" ];
|
||||
do
|
||||
cd "$( dirname -- "$SCRIPT_PATH"; )";
|
||||
SCRIPT_PATH="$( readlink -f -- "$SCRIPT_PATH"; )";
|
||||
done
|
||||
|
||||
cd "$( dirname -- "$SCRIPT_PATH"; )" > '/dev/null';
|
||||
SCRIPT_PATH="$( pwd; )";
|
||||
|
||||
popd > '/dev/null';
|
||||
|
||||
# set +x
|
||||
|
||||
echo "${SCRIPT_PATH}"
|
||||
}
|
||||
|
||||
SCRIPTDIR=$(get_script_dir "${BASH_SOURCE[0]:-$0}")
|
||||
# Define some generally useful functions
|
||||
source ${SCRIPTDIR}/medley_utils.sh
|
||||
|
||||
export MEDLEYDIR=$(cd ${SCRIPTDIR}; cd ../..; pwd)
|
||||
IL_DIR=$(cd ${MEDLEYDIR}; cd ..; pwd)
|
||||
export LOGINDIR=${HOME}/il
|
||||
|
||||
# Are we running under WSL?
|
||||
grep --ignore-case --quiet wsl /proc/sys/kernel/osrelease
|
||||
if [ $? -eq 0 ];
|
||||
then
|
||||
wsl='true'
|
||||
else
|
||||
wsl='false'
|
||||
fi
|
||||
|
||||
# process args
|
||||
source ${SCRIPTDIR}/medley_args.sh
|
||||
|
||||
# Make sure that there is not another instance currently running with this same id
|
||||
ps ax | grep ldex | grep --quiet "\-id ${run_id}"
|
||||
if [ $? -eq 0 ];
|
||||
then
|
||||
echo "Another instance of Medley Interlisp is already running with the id \"${run_id}\"."
|
||||
echo "Only a single instance with a given id can be run at the same time."
|
||||
echo "Please retry using the \"--id <name>\" argument to give this new instance a different id."
|
||||
echo "Exiting"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# Set the LDEDESTSYSOUT env variable based on id
|
||||
if [ -z ${LDEDESTSYSOUT} ];
|
||||
then
|
||||
if [ "${run_id}" = "default" ];
|
||||
then
|
||||
export LDEDESTSYSOUT=${LOGINDIR}/vmem/lisp.virtualmem
|
||||
else
|
||||
export LDEDESTSYSOUT=${LOGINDIR}/vmem/lisp_${run_id}.virtualmem
|
||||
fi
|
||||
fi
|
||||
|
||||
# Create LOGINDIR if necessary
|
||||
if [ ! -e ${LOGINDIR} ];
|
||||
then
|
||||
mkdir -p ${LOGINDIR}
|
||||
elif [ ! -d ${LOGINDIR} ];
|
||||
then
|
||||
echo "ERROR: Medley requires a directory named ${LOGINDIR}."
|
||||
echo "But ${LOGINDIR} exists appears not be a directory."
|
||||
echo "Exiting"
|
||||
exit 2
|
||||
fi
|
||||
mkdir -p ${LOGINDIR}/vmem
|
||||
|
||||
# Call run-medley with or without vnc
|
||||
if [[ ${wsl} = false || ${use_vnc} = false ]];
|
||||
then
|
||||
# If not using vnc, just call run-medley
|
||||
${MEDLEYDIR}/run-medley -id "${run_id}" ${geometry} ${screensize} "${run_args[@]}"
|
||||
else
|
||||
# do the vnc thing on wsl
|
||||
source ${SCRIPTDIR}/medley_vnc.sh
|
||||
fi
|
||||
|
||||
|
||||
204
scripts/medley/medley_args.sh
Normal file
204
scripts/medley/medley_args.sh
Normal file
@@ -0,0 +1,204 @@
|
||||
###############################################################################
|
||||
#
|
||||
# medley_args.sh - script for processing the args to medley.sh script.
|
||||
#
|
||||
# !!!! This script is meant to be SOURCEd from the scripts/medley.sh script.
|
||||
# !!!! It should not be run as a standlone script.
|
||||
#
|
||||
# 2023-01-12 Frank Halasz
|
||||
#
|
||||
# Copyright 2023 Interlisp.org
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
# load usage function
|
||||
source ${SCRIPTDIR}/medley_usage.sh
|
||||
|
||||
# Process args
|
||||
run_args=()
|
||||
run_id="default"
|
||||
use_vnc='false'
|
||||
geometry=""
|
||||
screensize=""
|
||||
noscroll='false'
|
||||
pass_args=false
|
||||
lisp_flag=false
|
||||
full_flag=false
|
||||
apps_flag=false
|
||||
sysout_flag=false
|
||||
sysout_arg=""
|
||||
err_msg=""
|
||||
greet_specified='false'
|
||||
|
||||
while [ "$#" -ne 0 ];
|
||||
do
|
||||
if [ ${pass_args} = false ];
|
||||
then
|
||||
case "$1" in
|
||||
-i | --id)
|
||||
if [ "$2" = "-" ];
|
||||
then
|
||||
run_id=$( basename ${MEDLEYDIR} )
|
||||
elif [ "$2" = "--" ];
|
||||
then
|
||||
run_id=$(cd ${MEDLEYDIR}; cd ..; basename $(pwd))
|
||||
else
|
||||
check_for_dash_or_end "$1" "$2"
|
||||
run_id=$(echo "$2" | sed s/[^A-Za-z0-9]//g)
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
-v | --vnc)
|
||||
if [[ ${wsl} = true && $(uname -m) = x86_64 ]];
|
||||
then
|
||||
use_vnc=true
|
||||
else
|
||||
echo "Warning: The -v or --vnc flag was set."
|
||||
echo "But the vnc option is only available when running on "
|
||||
echo "Windows System for Linux (wsl) on x86_64 machines."
|
||||
echo "Ignoring the -v or --vnc flag."
|
||||
use_vnc=false
|
||||
fi
|
||||
;;
|
||||
-g | --geometry)
|
||||
check_for_dash_or_end "$1" "$2"
|
||||
geometry="$2"
|
||||
shift
|
||||
;;
|
||||
-s | --screensize)
|
||||
check_for_dash_or_end "$1" "$2"
|
||||
screensize="$2"
|
||||
shift
|
||||
;;
|
||||
-n | --noscroll)
|
||||
noscroll=true
|
||||
run_args+=("-noscroll")
|
||||
;;
|
||||
-e | --interlisp)
|
||||
export MEDLEY_EXEC="inter"
|
||||
;;
|
||||
-a | --apps)
|
||||
sysout_arg="apps"
|
||||
apps_flag=true
|
||||
;;
|
||||
-f | --full)
|
||||
sysout_arg="-full"
|
||||
full_flag=true
|
||||
;;
|
||||
-l | --lisp)
|
||||
sysout_arg="-lisp"
|
||||
lisp_flag=true
|
||||
;;
|
||||
-m | --mem)
|
||||
check_for_dash_or_end "$1" "$2"
|
||||
run_args+=(-m $2)
|
||||
shift
|
||||
;;
|
||||
-t | --title)
|
||||
check_for_dash_or_end "$1" "$2"
|
||||
run_args+=(-title $2)
|
||||
shift
|
||||
;;
|
||||
-d | --display)
|
||||
check_for_dash_or_end "$1" "$2"
|
||||
run_args+=(-d $2)
|
||||
shift
|
||||
;;
|
||||
-r | --greet)
|
||||
if [[ "$2" = "-" || "$2" = "--" ]];
|
||||
then
|
||||
run_args+=("--nogreet")
|
||||
else
|
||||
check_for_dash_or_end "$1" "$2"
|
||||
check_file_readable "$1" "$2"
|
||||
run_args+=("-greet" "$2")
|
||||
fi
|
||||
greet_specified='true'
|
||||
shift
|
||||
;;
|
||||
-p | --vmem)
|
||||
check_for_dash_or_end "$1" "$2"
|
||||
check_file_writeable_or_creatable "$1" "$2"
|
||||
export LDEDESTSYSOUT="$2"
|
||||
shift
|
||||
;;
|
||||
-x | --logindir)
|
||||
if [[ "$2" = "-" || "$2" = "--" ]];
|
||||
then
|
||||
check_dir_writeable_or_creatable "$1" "${MEDLEYDIR}/logindir"
|
||||
LOGINDIR="${MEDLEYDIR}/logindir"
|
||||
else
|
||||
check_for_dash_or_end "$1" "$2"
|
||||
check_dir_writeable_or_creatable "$1" "$2"
|
||||
LOGINDIR="$2"
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
-h | --help)
|
||||
usage
|
||||
;;
|
||||
-z | --man)
|
||||
/usr/bin/man -l "${MEDLEYDIR}/docs/man-page/medley.1.gz"
|
||||
exit 0
|
||||
;;
|
||||
--)
|
||||
pass_args=true
|
||||
;;
|
||||
-*)
|
||||
err_msg=("ERROR: Unknown flag: $1" )
|
||||
usage "${err_msg[@]}"
|
||||
;;
|
||||
*)
|
||||
if [[ $# -eq 1 || "$2" = "--" ]];
|
||||
then
|
||||
sysout_flag=true
|
||||
sysout_arg="$2"
|
||||
else
|
||||
err_msg=(
|
||||
"ERROR: sysout argument must be last argument"
|
||||
"or last argument before the \"--\" flag"
|
||||
)
|
||||
usage "${err_msg[@]}"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
else
|
||||
run_args+=("$1")
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
# Figure out screensize and geometry based on arguments
|
||||
source ${SCRIPTDIR}/medley_geometry.sh
|
||||
|
||||
# Figure out the sysout situation
|
||||
ctr=0
|
||||
for x in ${lisp_flag} ${full_flag} ${apps_flag} ${sysout_flag};
|
||||
do
|
||||
if [ "${x}" = "true" ];
|
||||
then
|
||||
(( ctr++ ))
|
||||
fi
|
||||
done
|
||||
if [ ${ctr} -gt 1 ];
|
||||
then
|
||||
err_msg=(
|
||||
"Error: only one sysout can be specified. Two or more sysouts were specified"
|
||||
"via the -l (--lisp), -f (--full), -a (--apps) flags and/or a sysout filename"
|
||||
)
|
||||
usage "${err_msg[@]}"
|
||||
fi
|
||||
if [ "${sysout_arg}" = "apps" ];
|
||||
then
|
||||
export LDESRCESYSOUT="$MEDLEYDIR/loadups/apps.sysout"
|
||||
if [ "${greet_specified}" = "false" ];
|
||||
then
|
||||
export LDEINIT="$MEDLEYDIR/greetfiles/APPS-INIT.LCOM"
|
||||
fi
|
||||
else
|
||||
# pass on to run-medley
|
||||
export LDESRCESYSOUT=""
|
||||
run_args+=("${sysout_arg}")
|
||||
fi
|
||||
|
||||
|
||||
79
scripts/medley/medley_geometry.sh
Executable file
79
scripts/medley/medley_geometry.sh
Executable file
@@ -0,0 +1,79 @@
|
||||
###############################################################################
|
||||
#
|
||||
# medley_geometry.sh - script for computing the geometry and screensize
|
||||
# parameters for a medley session
|
||||
#
|
||||
# !!!! This script is meant to be SOURCEd from the scripts/medley.sh script.
|
||||
# !!!! It should not be run as a standlone script.
|
||||
#
|
||||
# 2023-01-17 Frank Halasz
|
||||
#
|
||||
# Copyright 2023 Interlisp.org
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
if [ ${noscroll} = false ];
|
||||
then
|
||||
scroll=22
|
||||
else
|
||||
scroll=0
|
||||
fi
|
||||
if [[ -n ${geometry} && -n ${screensize} ]];
|
||||
then
|
||||
gw=$(expr "${geometry}" : "\([0-9]*\)x[0-9]*$")
|
||||
gh=$(expr "${geometry}" : "[0-9]*x\([0-9]*\)$")
|
||||
if [[ -z "${gw}" || -z "${gh}" ]];
|
||||
then
|
||||
echo "Error: Improperly formed -geometry or -dimension argument: ${geometry}"
|
||||
echo "Exiting"
|
||||
exit 7
|
||||
fi
|
||||
geometry="-g ${geometry}"
|
||||
#
|
||||
sw=$(expr "${screensize}" : "\([0-9]*\)x[0-9]*$")
|
||||
sh=$(expr "${screensize}" : "[0-9]*x\([0-9]*\)$")
|
||||
if [[ -z "${sw}" || -z "${sh}" ]];
|
||||
then
|
||||
echo "Error: Improperly formed -screensize argument: ${screensize}"
|
||||
echo "Exiting"
|
||||
exit 7
|
||||
fi
|
||||
screensize="-sc ${screensize}"
|
||||
elif [[ -n ${geometry} ]];
|
||||
then
|
||||
gw=$(expr "${geometry}" : "\([0-9]*\)x[0-9]*$")
|
||||
gh=$(expr "${geometry}" : "[0-9]*x\([0-9]*\)$")
|
||||
if [ -n "${gw}" -a -n "${gh}" ] ; then
|
||||
sw=$(( ((31+${gw})/32*32) - ${scroll} ))
|
||||
sh=$(( ${gh} - ${scroll} ))
|
||||
geometry="-g ${gw}x${gh}"
|
||||
screensize="-sc ${sw}x${sh}"
|
||||
else
|
||||
echo "Error: Improperly formed -geometry or -dimension argument: ${geometry}"
|
||||
echo "Exiting"
|
||||
exit 7
|
||||
fi
|
||||
elif [[ -n ${screensize} ]];
|
||||
then
|
||||
sw=$(expr "${screensize}" : "\([0-9]*\)x[0-9]*$")
|
||||
sh=$(expr "${screensize}" : "[0-9]*x\([0-9]*\)$")
|
||||
if [ -n "${sw}" -a -n "${sh}" ] ; then
|
||||
sw=$(( (31+$sw)/32*32 ))
|
||||
gw=$(( ${scroll}+${sw} ))
|
||||
gh=$(( ${scroll}+${sh} ))
|
||||
geometry="-g ${gw}x${gh}"
|
||||
screensize="-sc ${sw}x${sh}"
|
||||
else
|
||||
echo "Error: Improperly formed -screensize argument: ${screensize}"
|
||||
echo "Exiting"
|
||||
exit 7
|
||||
fi
|
||||
else
|
||||
screensize="-sc 1440x900"
|
||||
if [ ${noscroll} = false ];
|
||||
then
|
||||
geometry="-g 1462x922"
|
||||
else
|
||||
geometry="-g 1440x900"
|
||||
fi
|
||||
fi
|
||||
93
scripts/medley/medley_usage.sh
Normal file
93
scripts/medley/medley_usage.sh
Normal file
@@ -0,0 +1,93 @@
|
||||
###############################################################################
|
||||
#
|
||||
# medley_useage.sh - script defining the "usage" for medley.sh script.
|
||||
#
|
||||
# !!!! This script is meant to be SOURCEd from the scripts/medley.sh script.
|
||||
# !!!! It should not be run as a standlone script.
|
||||
#
|
||||
# 2023-01-21 Frank Halasz
|
||||
#
|
||||
# Copyright 2023 Interlisp.org
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
PAGER=$( if [ -n $(which more) ]; then echo "more"; else echo "cat"; fi)
|
||||
|
||||
usage() {
|
||||
local err_msg
|
||||
local msg_path=/tmp/msg-$$
|
||||
local lines=("$@")
|
||||
if [ $# -ne 0 ];
|
||||
then
|
||||
echo > ${msg_path}
|
||||
echo "$(output_error_msg "${lines[@]}")" >> ${msg_path}
|
||||
echo >> ${msg_path}
|
||||
echo >> ${msg_path}
|
||||
else
|
||||
touch ${msg_path}
|
||||
fi
|
||||
cat ${msg_path} - <<EOF | ${PAGER}
|
||||
Usage: medley [flags] [sysout] [--] [pass_args ...]
|
||||
|
||||
Note: MEDLEYDIR is the directory at the top of the code tree where this script is executed from
|
||||
after all symbolic links have been resolved. For standard installations this will be
|
||||
/usr/local/interlisp/medley. For "local" installations this will be the "medley" sub-directory
|
||||
under the directory into which the Medley distribution was installed.
|
||||
|
||||
flags:
|
||||
-h | --help : print this usage information
|
||||
|
||||
-z | --man : show the man page for medley
|
||||
|
||||
-f | --full : start Medley from the "full" sysout
|
||||
|
||||
-l | --lisp : start Medley from the "lisp" sysout
|
||||
|
||||
-a | --apps : start Medley from the "apps" sysout
|
||||
|
||||
-e | --interlisp : (for apps.sysout only) Start in the Interlisp exec
|
||||
|
||||
-n | --noscroll : do not use scroll bars in Medley window
|
||||
|
||||
-g WxH | --geometry WxH : set the window geometry to Width x Height.
|
||||
|
||||
-s WxH | --screensize WxH : set the Medley screen size to be Width x Height
|
||||
|
||||
-t STRING | --title STRING : use STRING as title of window
|
||||
|
||||
-d :N | --display :N : use X display :N
|
||||
|
||||
-v | --vnc : (WSL only) Use a VNC window instead of an X window
|
||||
|
||||
-i STRING | --id STRING : use STRING as the id for this run of Medley (default: default)
|
||||
|
||||
-i - | --id - : for id use the basename of MEDLEYDIR
|
||||
|
||||
-i -- | --id -- : for id use the basename of the parent directory of MEDLEYDIR
|
||||
|
||||
-m N | --mem N : set Medley memory size to N
|
||||
|
||||
-p FILE | --vmem FILE : use FILE as the Medley virtual memory store
|
||||
|
||||
-r FILE | --greet FILE : use FILE as the Medley greetfile
|
||||
|
||||
-r - | --greet - : do not use a greetfile
|
||||
|
||||
-x DIR | --logindir DIR : use DIR as LOGINDIR in Medley
|
||||
|
||||
-x - | --logindir - : use MEDLEYDIR/logindir as LOGINDIR in Medley
|
||||
|
||||
sysout:
|
||||
The name of the file to use as a sysout for Medley to start from. If sysout is not
|
||||
provided and none of the flags [-a, -f & -l] is used, then Medley will start from
|
||||
the saved virtual memory file for the id for this run.
|
||||
|
||||
pass_args:
|
||||
All arguments after the "--" flag, are passed unaltered to lde via run-medley.
|
||||
|
||||
EOF
|
||||
|
||||
exit 1
|
||||
|
||||
}
|
||||
|
||||
133
scripts/medley/medley_utils.sh
Normal file
133
scripts/medley/medley_utils.sh
Normal file
@@ -0,0 +1,133 @@
|
||||
###############################################################################
|
||||
#
|
||||
# medley_utils.sh - script containing various useful functions for medley.sh script.
|
||||
#
|
||||
# !!!! This script is meant to be SOURCEd from the scripts/medley.sh script.
|
||||
# !!!! It should not be run as a standlone script.
|
||||
#
|
||||
# 2023-01-23 Frank Halasz
|
||||
#
|
||||
# Copyright 2023 Interlisp.org
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
is_tput=$(which tput)
|
||||
output_error_msg() {
|
||||
local lines=("$@")
|
||||
for line in "${lines[@]}"
|
||||
do
|
||||
if [ -n "${is_tput}" ];
|
||||
then
|
||||
echo "$(${is_tput} setab 1)$(${is_tput} setaf 7)${line}$(${is_tput} sgr0)"
|
||||
else
|
||||
echo "${line}"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
check_for_dash_or_end() {
|
||||
local err_msg;
|
||||
if [[ -z "$2" || "$2" = "--" ]];
|
||||
then
|
||||
err_msg=(
|
||||
"Error: the flag \"$1\" requires a value."
|
||||
"Value is missing."
|
||||
)
|
||||
usage "${err_msg[@]}"
|
||||
elif [ "${2:0:1}" = "-" ];
|
||||
then
|
||||
err_msg=(
|
||||
"Error: either the value for flag \"${1}\" is missing OR"
|
||||
"the value begins with a \"-\", which is not allowed."
|
||||
)
|
||||
usage "${err_msg[@]}"
|
||||
fi
|
||||
}
|
||||
|
||||
check_file_writeable_or_creatable() {
|
||||
local msg_core="\"$2\" given as the value of the \"$1\" flag"
|
||||
local err_msg;
|
||||
if [[ -e "$%2" ]];
|
||||
then
|
||||
if [[ ! -f "$2" ]];
|
||||
then
|
||||
err_msg=(
|
||||
"Error: File ${msg_core} is not a regular file."
|
||||
"It is either a directory or a device file of some sort."
|
||||
"Exiting"
|
||||
)
|
||||
output_error_msg "${err_msg[@]}"
|
||||
exit 1
|
||||
elif [[ ! -w "$2" ]];
|
||||
then
|
||||
err_msg=(
|
||||
"Error: File ${msg_core} exists but is not writeable"
|
||||
"Exiting"
|
||||
)
|
||||
output_error_msg "${err_msg[@]}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if [[ ! -w "$(dirname -- $2)" ]];
|
||||
then
|
||||
err_msg=(
|
||||
"Error: File ${msg_core} cannot be created because"
|
||||
"its directory either doen't exist or is not writeable."
|
||||
"Exiting"
|
||||
)
|
||||
output_error_msg "${err_msg[@]}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
check_file_readable() {
|
||||
local msg_core="\"$2\" given as the value of the \"$1\" flag"
|
||||
if [[ ! -r "$2" ]];
|
||||
then
|
||||
err_msg=(
|
||||
"Error: File ${msg_core}"
|
||||
"either doesn't exist or is not readable."
|
||||
"Exiting"
|
||||
)
|
||||
output_error_msg "${err_msg[@]}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_dir_writeable_or_creatable() {
|
||||
local msg_core="\"$2\" given as the value of the \"$1\" flag"
|
||||
if [[ -e "$%2" ]];
|
||||
then
|
||||
if [[ ! -d "$2" ]];
|
||||
then
|
||||
err_msg=(
|
||||
"Error: Pathname ${msg_core} exists but is not a directory."
|
||||
"Exiting"
|
||||
)
|
||||
output_error_msg "${err_msg[@]}"
|
||||
exit 1
|
||||
elif [[ ! -w "$2" ]];
|
||||
then
|
||||
err_msg=(
|
||||
"Error: Directory ${msg_core} exists but is not writeable."
|
||||
"Exiting"
|
||||
)
|
||||
output_error_msg "${err_msg[@]}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if [[ ! -w "$(dirname -- $2)" ]];
|
||||
then
|
||||
err_msg=(
|
||||
"Error: Directory ${msg_core} cannot be created because"
|
||||
"its parent directory either doesn't exist or is not writeable."
|
||||
"Exiting"
|
||||
)
|
||||
output_error_msg "${err_msg[@]}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
154
scripts/medley/medley_vnc.sh
Executable file
154
scripts/medley/medley_vnc.sh
Executable file
@@ -0,0 +1,154 @@
|
||||
###############################################################################
|
||||
#
|
||||
# medley_vnc.sh - script for running Medley Interlisp on WSL using Xvnc
|
||||
# on the Linux side and a vncviewer on the Windows side.
|
||||
# This script run under Linux will start the right apps
|
||||
# on both the Linux and Windows sides.
|
||||
#
|
||||
# !!!! This script is meant to be SOURCEd from the scripts/medley.sh script.
|
||||
# !!!! It should not be run as a standlone script.
|
||||
#
|
||||
# 2023-01-12 Frank Halasz
|
||||
#
|
||||
# Copyright 2023 Interlisp.org
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
ip_addr() {
|
||||
ip -4 -br address show dev eth0 | awk '{print $3}' | sed 's-/.*$--'
|
||||
}
|
||||
|
||||
find_open_display() {
|
||||
local ctr=1
|
||||
local result=-1
|
||||
while [ ${ctr} -lt 64 ];
|
||||
do
|
||||
ss -a | grep -q "tmp/.X11-unix/X${ctr}[^0-9]"
|
||||
if [ $? -ne 0 ];
|
||||
then
|
||||
result=${ctr}
|
||||
break
|
||||
else
|
||||
(( ctr++ ))
|
||||
fi
|
||||
done
|
||||
echo ${result}
|
||||
}
|
||||
|
||||
find_open_port() {
|
||||
local ctr=5900
|
||||
local result=-1
|
||||
while [ ${ctr} -lt 6000 ];
|
||||
do
|
||||
ss -a | grep -q "LISTEN.*:${ctr}[^0-9]"
|
||||
if [ $? -ne 0 ];
|
||||
then
|
||||
result=${ctr}
|
||||
break
|
||||
else
|
||||
(( ctr++ ))
|
||||
fi
|
||||
done
|
||||
echo ${result}
|
||||
}
|
||||
|
||||
#
|
||||
# Make sure prequisites for vnc support are in place
|
||||
#
|
||||
win_userprofile="$(cmd.exe /c "<nul set /p=%UserProfile%" 2>/dev/null)"
|
||||
vnc_dir="$(wslpath ${win_userprofile})/AppData/Local/Interlisp"
|
||||
vnc_exe="vncviewer64-1.12.0.exe"
|
||||
if [[ $(which Xvnc) = "" || $(Xvnc -version |& grep -iq tigervnc; echo $?) -eq 1 ]];
|
||||
then
|
||||
echo "Error: The -v or --vnc flag was set."
|
||||
echo "But it appears that that TigerVNC \(Xvnc\) has not been installed."
|
||||
echo "Please install TigerVNC using \"sudo apt install tigervnc-standalone-server tigervnc-xorg-extension\""
|
||||
echo "Exiting."
|
||||
exit 4
|
||||
elif [ ! -e "${vnc_dir}/${vnc_exe}" ];
|
||||
then
|
||||
if [ -e "${IL_DIR}/wsl/${vnc_exe}" ];
|
||||
then
|
||||
# make sure TigerVNC viewer is in a Windows (not Linux) directory. If its in a Linux directory
|
||||
# there will be a long delay when it starts up
|
||||
mkdir -p ${vnc_dir}
|
||||
cp -p "${IL_DIR}/wsl/${vnc_exe}" "${vnc_dir}/${vnc_exe}"
|
||||
else
|
||||
echo "TigerVnc viewer is required by the -vnc option but is not installed."
|
||||
echo -n "Ok to download from SourceForge? [y, Y, n or N, default n] "
|
||||
read resp
|
||||
if [ -z ${resp} ]; then resp=n; else resp=${resp:0:1}; fi
|
||||
if [[ ${resp} = 'n' || ${resp} = 'N' ]];
|
||||
then
|
||||
echo "Ok. You can download the Tiger VNC viewer \(v1.12.0\) .exe yourself and "
|
||||
echo "place it in ${vnc_dir}/${vnc_exe}. Then retry."
|
||||
echo "Exiting."
|
||||
exit 5
|
||||
else
|
||||
pushd "${vnc_dir}" >/dev/null
|
||||
wget https://sourceforge.net/projects/tigervnc/files/stable/1.12.0/vncviewer64-1.12.0.exe
|
||||
popd >/dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
#
|
||||
# Find an unused display, start Xvnc, run-medley, then start the vnc viewer on the windows side
|
||||
#
|
||||
#set -x
|
||||
LOG=${LOGINDIR}/logs/medley_${run_id}.log
|
||||
mkdir -p $(dirname -- ${LOG})
|
||||
echo "START" >${LOG}
|
||||
OPEN_DISPLAY=`find_open_display`
|
||||
if [ ${OPEN_DISPLAY} -eq -1 ];
|
||||
then
|
||||
echo "Error: cannot find an unused DISPLAY between 1 and 63"
|
||||
echo "Exiting"
|
||||
exit 33
|
||||
else
|
||||
echo "Using DISPLAY=${OPEN_DISPLAY}"
|
||||
fi
|
||||
VNC_PORT=`find_open_port`
|
||||
if [ ${VNC_PORT} -eq -1 ];
|
||||
then
|
||||
echo "Error: cannot find an unused port between 5900 and 5999"
|
||||
echo "Exiting"
|
||||
exit 33
|
||||
else
|
||||
echo "Using VNC_PORT=${VNC_PORT}"
|
||||
fi
|
||||
export DISPLAY=":${OPEN_DISPLAY}"
|
||||
# start vnc
|
||||
mkdir -p ${LOGINDIR}/logs
|
||||
/usr/bin/Xvnc ":${OPEN_DISPLAY}" \
|
||||
-rfbport ${VNC_PORT} \
|
||||
-geometry "${geometry#-g }" \
|
||||
-SecurityTypes None \
|
||||
-NeverShared \
|
||||
-DisconnectClients=0 \
|
||||
>> ${LOG} 2>&1 &
|
||||
xvnc_pid=""
|
||||
while [ -z ${xvnc_pid} ];
|
||||
do
|
||||
sleep .25
|
||||
xvnc_pid=$(ps h -C Xvnc -o pid,command | grep "Xvnc :${OPEN_DISPLAY}" | awk '{print $1}')
|
||||
done
|
||||
echo "XVNC_PID is ${xvnc_pid}"
|
||||
# run Medley
|
||||
( ${MEDLEYDIR}/run-medley -id "${run_id}" ${geometry} ${screensize} "${run_args[@]}" 2>>${LOG} \
|
||||
; \
|
||||
kill -9 ${xvnc_pid} ${xvnc_pid} >>${LOG} 2>&1
|
||||
) &
|
||||
# Give medley time to startup
|
||||
sleep 2
|
||||
# Start vnc viewer on Windows side
|
||||
pushd ${vnc_dir} >/dev/null
|
||||
( ./${vnc_exe} -geometry "+50+50" \
|
||||
-ReconnectOnError=off \
|
||||
−AlertOnFatalError=off \
|
||||
$(ip_addr):${VNC_PORT} \
|
||||
>>${LOG} 2>&1 \
|
||||
; \
|
||||
kill -9 ${xvnc_pid} >>${LOG} 2>&1 \
|
||||
) &
|
||||
popd >/dev/null
|
||||
56
sources/LOADUP-APPS
Normal file
56
sources/LOADUP-APPS
Normal file
@@ -0,0 +1,56 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
|
||||
(FILECREATED "17-Jan-2023 20:34:02" {DSK}<home>frank>il>medley>gmedley>sources>LOADUP-APPS.;3 2095
|
||||
|
||||
:CHANGES-TO (FNS Apps.RemoveBackgroundMenuItem)
|
||||
|
||||
:PREVIOUS-DATE "17-Jan-2023 20:29:39" {DSK}<home>frank>il>medley>gmedley>sources>LOADUP-APPS.;2
|
||||
)
|
||||
|
||||
|
||||
(PRETTYCOMPRINT LOADUP-APPSCOMS)
|
||||
|
||||
(RPAQQ LOADUP-APPSCOMS ((GLOBALVARS *ALL-BUTTONS* BackgroundMenuCommands BackgroundMenu)
|
||||
(FNS Apps.LOADUP Apps.RemoveBackgroundMenuItem)))
|
||||
(DECLARE%: DOEVAL@COMPILE DONTCOPY
|
||||
|
||||
(GLOBALVARS *ALL-BUTTONS* BackgroundMenuCommands BackgroundMenu)
|
||||
)
|
||||
(DEFINEQ
|
||||
|
||||
(Apps.LOADUP
|
||||
[LAMBDA NIL (* ; "Edited 12-Nov-2022 14:03 by FGH")
|
||||
(PROGN
|
||||
(* ;; " Delete button(s) that are created when lispusers/BUTTONS is loaded")
|
||||
|
||||
(for B in *ALL-BUTTONS* do (DELETE-BUTTON B))
|
||||
|
||||
(* ;; " Remove the BUTTONS BackgroundMenu item")
|
||||
|
||||
(Apps.RemoveBackgroundMenuItem "Button Control")
|
||||
|
||||
(* ;; " Remove the NoteCards Background Menu Item")
|
||||
|
||||
(Apps.RemoveBackgroundMenuItem 'NoteCards)
|
||||
|
||||
(* ;; " Remove the CLOS Background Menu Item")
|
||||
|
||||
(Apps.RemoveBackgroundMenuItem 'BrowseClass)
|
||||
(RPLACA [CAR (LIST '(A B C]
|
||||
NIL])
|
||||
|
||||
(Apps.RemoveBackgroundMenuItem
|
||||
[LAMBDA (ItemStringOrAtom)
|
||||
(DECLARE (GLOBALVARS Apps.SBG)) (* ; "Edited 17-Jan-2023 20:33 by FGH")
|
||||
(* ; "Edited 12-Nov-2022 14:07 by FGH")
|
||||
(LET (SAVEX)
|
||||
(SETQ BackgroundMenuCommands (REMOVE (SETQ SAVEX (SASSOC ItemStringOrAtom
|
||||
BackgroundMenuCommands))
|
||||
BackgroundMenuCommands))
|
||||
(SETQ BackgroundMenu NIL)
|
||||
(SETQ Apps.SBG (APPEND (LIST SAVEX)
|
||||
Apps.SBG])
|
||||
)
|
||||
(DECLARE%: DONTCOPY
|
||||
(FILEMAP (NIL (647 2072 (Apps.LOADUP 657 . 1400) (Apps.RemoveBackgroundMenuItem 1402 . 2070)))))
|
||||
STOP
|
||||
1
sources/LOADUP-APPS.CM
Normal file
1
sources/LOADUP-APPS.CM
Normal file
@@ -0,0 +1 @@
|
||||
"
|
||||
BIN
sources/LOADUP-APPS.LCOM
Normal file
BIN
sources/LOADUP-APPS.LCOM
Normal file
Binary file not shown.
@@ -1,11 +1,11 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
|
||||
(FILECREATED "12-Aug-2022 12:30:09" {DSK}<home>larry>medley>sources>LOADUP-FULL.;2 4535
|
||||
(FILECREATED "18-Jan-2023 16:23:36" {DSK}<home>frank>il>medley>gmedley>sources>LOADUP-FULL.;2 4636
|
||||
|
||||
:CHANGES-TO (FNS LOADUP-FULL)
|
||||
(VARS LOADUP-FULLCOMS)
|
||||
|
||||
:PREVIOUS-DATE "14-Jul-2022 12:33:11" {DSK}<home>larry>medley>sources>LOADUP-FULL.;1)
|
||||
:PREVIOUS-DATE "12-Aug-2022 12:30:09" {DSK}<home>frank>il>medley>gmedley>sources>LOADUP-FULL.;1
|
||||
)
|
||||
|
||||
|
||||
(PRETTYCOMPRINT LOADUP-FULLCOMS)
|
||||
@@ -39,7 +39,8 @@
|
||||
(PRINTOUT T "FULL fonts loaded" T])
|
||||
|
||||
(LOADUP-FULL
|
||||
[LAMBDA NIL (* ; "Edited 12-Aug-2022 11:17 by lmm")
|
||||
[LAMBDA NIL (* ; "Edited 18-Jan-2023 16:22 by FGH")
|
||||
(* ; "Edited 12-Aug-2022 11:17 by lmm")
|
||||
(* ; "Edited 14-Jul-2022 12:32 by rmk")
|
||||
(* ; "Edited 12-Jul-2022 21:57 by rmk")
|
||||
(* ; "Edited 7-Mar-2022 21:06 by larry")
|
||||
@@ -72,7 +73,7 @@
|
||||
(LOADUP '(CHAT PRESS INTERPRESS TEDIT HRULE TEDIT-CHAT READNUMBER EDITBITMAP FILEBROWSER
|
||||
THINFILES GRAPHER SPY WHERE-IS COPYFILES MSANALYZE MSPARSE MASTERSCOPE UNIXPRINT
|
||||
ISO8859IO HELPSYS DINFO CLIPBOARD MODERNIZE WHEELSCROLL PRETTYFILEINDEX WHO-LINE
|
||||
UNIXCOMM UNIXCHAT UNIXYCD))
|
||||
UNIXCOMM UNIXCHAT UNIXYCD UNIXUTILS))
|
||||
(COND
|
||||
((WINDOWP *WHO-LINE*)
|
||||
(CLOSEW *WHO-LINE*)))
|
||||
@@ -87,5 +88,5 @@
|
||||
|
||||
(FIXMETA)
|
||||
(DECLARE%: DONTCOPY
|
||||
(FILEMAP (NIL (485 4497 (LOADFULLFONTS 495 . 1936) (LOADUP-FULL 1938 . 4247) (FIXMETA 4249 . 4495)))))
|
||||
(FILEMAP (NIL (467 4598 (LOADFULLFONTS 477 . 1918) (LOADUP-FULL 1920 . 4348) (FIXMETA 4350 . 4596)))))
|
||||
STOP
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user