diff --git a/.github/workflows/Dockerfile_medley b/.github/workflows/Dockerfile_medley index 6a26d93a..9f2af48a 100644 --- a/.github/workflows/Dockerfile_medley +++ b/.github/workflows/Dockerfile_medley @@ -7,7 +7,7 @@ # # ****************************************************************************** -FROM ubuntu:22.10 +FROM ubuntu:22.04 ARG TARGETPLATFORM # Handle ARGs, ENV variables, and LABELs @@ -31,6 +31,12 @@ ENV LANG=C.UTF-8 # Copy over the release deb files ADD ./*.deb /tmp +# Get tzdata setup ahead of time +RUN apt-get update; \ + ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime; \ + DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata; \ + dpkg-reconfigure --frontend noninteractive tzdata + # Install Medley/Maiko and add tightvnc server and xclip to the image RUN apt-get update \ && apt-get install -y apt-utils \ diff --git a/.github/workflows/buildDocker.yml b/.github/workflows/buildDocker.yml index c9171daa..13fea618 100644 --- a/.github/workflows/buildDocker.yml +++ b/.github/workflows/buildDocker.yml @@ -20,7 +20,7 @@ name: 'Build/Push Docker Image' # Run this workflow on ... on: workflow_dispatch: - inputs: + inputs: draft: description: "Mark this as a draft release" type: choice @@ -33,7 +33,7 @@ on: options: - 'false' - 'true' - + workflow_call: outputs: successful: @@ -59,7 +59,7 @@ on: defaults: run: shell: bash - + jobs: @@ -86,7 +86,7 @@ jobs: echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT; echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT; fi - + ###################################################################################### @@ -100,7 +100,7 @@ jobs: outputs: release_not_built: ${{ steps.check.outputs.release_not_built }} - steps: + steps: # Checkout the actions for this repo owner - name: Checkout Actions uses: actions/checkout@v3 @@ -110,7 +110,7 @@ jobs: - run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }} # Check if build already run for this commit - - name: Build already completed? + - name: Build already completed? id: check continue-on-error: true uses: ./../actions/check-sentry-action @@ -131,12 +131,12 @@ jobs: if: | needs.sentry.outputs.release_not_built == 'true' || needs.inputs.outputs.force == 'true' - + steps: # Checkout latest commit - name: Checkout Medley uses: actions/checkout@v3 - + # Find latest release (draft or normal) # and download its assets - name: Download linux debs from latest (draft) release @@ -176,10 +176,10 @@ jobs: docker_namespace="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" docker_image="${docker_namespace}/${repo_name}" if [ "${{ needs.inputs.outputs.draft }}" = "false" ]; - then + then docker_tags="${docker_image}:latest,${docker_image}:${MEDLEY_RELEASE#*-}_${MAIKO_RELEASE#*-}" platforms="linux/amd64,linux/arm64" - else + else docker_tags="${docker_image}:draft" platforms="linux/amd64" fi @@ -242,7 +242,7 @@ jobs: needs: [inputs, sentry, build_and-push] - steps: + steps: # Checkout the actions for this repo owner - name: Checkout Actions uses: actions/checkout@v3 @@ -257,10 +257,10 @@ jobs: uses: ./../actions/set-sentry-action with: tag: "docker" - + - name: Output id: output run: | echo "build_successful='true'" >> ${GITHUB_OUTPUT} - + ###################################################################################### diff --git a/.github/workflows/buildLoadup.yml b/.github/workflows/buildLoadup.yml index b5d5e4cd..635d0a8a 100644 --- a/.github/workflows/buildLoadup.yml +++ b/.github/workflows/buildLoadup.yml @@ -60,7 +60,7 @@ defaults: jobs: -###################################################################################### +# JOB: inputs ####################################################################### # Regularize the inputs so they can be referenced the same way whether they are # the result of a workflow_dispatch or a workflow_call @@ -85,8 +85,7 @@ jobs: fi - -###################################################################################### +# JOB: sentry ####################################################################### # Use sentry-action to determine if this release has already been built # based on the latest commit to the repo @@ -114,11 +113,11 @@ jobs: with: tag: "loadup" -###################################################################################### +# JOB: loadup ####################################################################### # - # Do the loadup + # Do the loadup and push to release on github # loadup: @@ -129,7 +128,8 @@ jobs: combined_release_tag: ${{ steps.job_outputs.outputs.COMBINED_RELEASE_TAG }} medley_release_tag: ${{ steps.job_outputs.outputs.MEDLEY_RELEASE_TAG }} medley_short_release_tag: ${{ steps.job_outputs.outputs.MEDLEY_SHORT_RELEASE_TAG }} - debs_filename_base: ${{ steps.debs.outputs.DEBS_FILENAME_BASE }} + artifacts_filename_template: ${{ steps.job_outputs.outputs.ARTIFACTS_FILENAME_TEMPLATE }} + release_url: ${{ steps.push.outputs.html_url }} needs: [inputs, sentry] if: | @@ -156,22 +156,35 @@ jobs: # Get Maiko release information, retrieves the name of the latest # release. Used to download the correct Maiko release - - name: Get Maiko Release Information + # Find latest release (draft or normal) + - name: Get maiko release information id: maiko - uses: abatilo/release-info-action@v1.3.2 - with: - owner: ${{ github.repository_owner }} - repo: maiko + run: | + tag="" + if [ "${{ needs.inputs.outputs.draft }}" = "true" ]; + then + gh release list --repo ${{ github.repository_owner }}/maiko | grep Draft >/tmp/releases-$$ + if [ $? -eq 0 ]; + then + tag=$(head -n 1 /tmp/releases-$$ | awk '{ print $3 }') + fi + fi + if [ -z "${tag}" ]; + then + tag=$(gh release list --repo ${{ github.repository_owner }}/maiko | grep Latest | head -n 1 | awk '{ print $3 }') + fi + echo "maiko_tag=${tag}" >> ${GITHUB_OUTPUT} + env: + GITHUB_TOKEN: ${{ secrets.MAIKO_TOKEN }} # Setup environment variables & establish job outputs - name: Setup Environment Variables run: | 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 "TARBALL_DIR=/tmp/tarballs" >>${GITHUB_ENV} echo "MEDLEY_RELEASE_TAG=${RELEASE_TAG}" >>${GITHUB_ENV} - echo "MAIKO_RELEASE_TAG=${{ steps.maiko.outputs.latest_tag }}" >>${GITHUB_ENV} + echo "MAIKO_RELEASE_TAG=${{ steps.maiko.outputs.maiko_tag }}" >>${GITHUB_ENV} + echo "ARTIFACTS_FILENAME_TEMPLATE=medley-full-@@PLATFORM@@-@@ARCH@@-@@MEDLEY.RELEASE@@_@@MAIKO.RELEASE@@" >>${GITHUB_ENV} - name: More Environment Variables run: | echo "MEDLEY_SHORT_RELEASE_TAG=${MEDLEY_RELEASE_TAG#medley-}" >>${GITHUB_ENV} @@ -182,27 +195,25 @@ jobs: - name: Establish job outputs id: job_outputs run: | - echo "COMBINED_RELEASE_TAG=${COMBINED_RELEASE_TAG}" >> $GITHUB_OUTPUT; - echo "MEDLEY_RELEASE_TAG=${MEDLEY_RELEASE_TAG}" >> $GITHUB_OUTPUT; - echo "MEDLEY_SHORT_RELEASE_TAG=${MEDLEY_SHORT_RELEASE_TAG}" >> $GITHUB_OUTPUT; + echo "COMBINED_RELEASE_TAG=${COMBINED_RELEASE_TAG}" >> ${GITHUB_OUTPUT} + echo "MEDLEY_RELEASE_TAG=${MEDLEY_RELEASE_TAG}" >> ${GITHUB_OUTPUT} + echo "MEDLEY_SHORT_RELEASE_TAG=${MEDLEY_SHORT_RELEASE_TAG}" >> ${GITHUB_OUTPUT} + echo "ARTIFACTS_FILENAME_TEMPLATE=${ARTIFACTS_FILENAME_TEMPLATE}" >> ${GITHUB_OUTPUT} # Setup some needed dirs in workspace - name: Create work dirs run: mkdir -p ${TARBALL_DIR} - # Download Maiko Release Assets + # Download Maiko Release Assets and untar it - name: Download Release Assets - uses: robinraju/release-downloader@v1.6 - with: - repository: ${{ github.repository_owner }}/maiko - token: ${{ secrets.GITHUB_TOKEN }} - latest: true - out-file-path: ${{ env.TARBALL_DIR }} - fileName: "${{ env.MAIKO_RELEASE_TAG }}-linux.*.tgz" - - - name: Untar Maiko Release for use in loadup run: | - tar -xzf "${TARBALL_DIR}/${{ env.MAIKO_RELEASE_TAG }}-linux.x86_64.tgz" + gh release download ${MAIKO_RELEASE_TAG} \ + -D ${TARBALL_DIR} \ + --repo ${{ github.repository_owner }}/maiko \ + -p '*.tgz' + tar -xzf "${TARBALL_DIR}/${MAIKO_RELEASE_TAG}-linux.x86_64.tgz" + env: + GITHUB_TOKEN: ${{ secrets.MAIKO_TOKEN }} # Checkout Notecards and tar it in the tarballsdir - name: Checkout Notecards @@ -210,11 +221,11 @@ jobs: 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 + mv ./notecards ../notecards + cd ../notecards + git archive --format=tgz --output="${TARBALL_DIR}/notecards.tgz" --prefix=notecards/ main # Install vnc - name: Install vnc @@ -224,57 +235,13 @@ jobs: run: | Xvnc -geometry 1280x720 :0 & export DISPLAY=":0" - PATH="$PWD/maiko:$PATH" scripts/loadup-all.sh -apps + scripts/loadup-db.sh - - name: Build loadups release tar + - name: Build release tars run: | - cd .. - mkdir -p medley/${TARBALL_DIR} - 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/loadups/*.dribble \ - medley/loadups/fuller.database \ - medley/loadups/exports.all - - - name: Build runtime release tar - run: | - cd .. - mkdir -p medley/${TARBALL_DIR} - 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 \ - medley/fonts/altofonts \ - medley/fonts/adobe \ - medley/fonts/postscriptfonts \ - medley/fonts/ipfonts \ - medley/library \ - medley/lispusers \ - medley/sources \ - medley/internal - - - # Build the deb files as well as the tgz files - - name: Build .deb files for 3 architectures - id: debs - run: | - cd installers/deb - debs_filename_base=$(./build_deb.sh) - echo "DEBS_FILENAME_BASE=${debs_filename_base}" >> $GITHUB_ENV; - echo "DEBS_FILENAME_BASE=${debs_filename_base}" >> $GITHUB_OUTPUT; + scripts/release-make-tars.sh "${MEDLEY_RELEASE_TAG}" + mv releases/"${MEDLEY_SHORT_RELEASE_TAG}"/*.tgz "${TARBALL_DIR}" # Push the release up to github releases - name: Delete existing release with same tag (if any) @@ -284,21 +251,166 @@ jobs: continue-on-error: true - name: Push the release - id: push_release + id: push uses: ncipollo/release-action@v1 with: allowUpdates: true artifacts: + # ${{ env.TARBALL_DIR }}/notecards.tgz, ${{ 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 + ${{ env.TARBALL_DIR }}/${{ env.MEDLEY_RELEASE_TAG }}-runtime.tgz tag: ${{ env.MEDLEY_RELEASE_TAG }} draft: ${{ needs.inputs.outputs.draft }} prerelease: false generateReleaseNotes: true token: ${{ secrets.GITHUB_TOKEN }} + # Save the tarball directory for subsequent jobs + - name: Save tarballs + uses: actions/upload-artifact@v3 + with: + name: tarballs + path: ${{ env.TARBALL_DIR }} + if-no-files-found: error + + +# JOB: linux_installer ############################################################## + + # + # Create the linux installers (.deb and .tgz) and push to release on github + # + linux_installer: + + runs-on: ubuntu-latest + + needs: [inputs, sentry, loadup] + if: | + needs.sentry.outputs.release_not_built == 'true' + || needs.inputs.outputs.force == 'true' + + steps: + + # Checkout latest commit + - name: Checkout Medley + uses: actions/checkout@v3 + + # Environment variables + - name: Environment variables + run: | + echo "DEBS_DIR=installers/deb/debs" >>${GITHUB_ENV} + echo "TARS_DIR=installers/deb/tars" >>${GITHUB_ENV} + echo "TARBALL_DIR=installers/deb/tmp/tarballs" >>${GITHUB_ENV} + echo "MEDLEY_RELEASE_TAG=${{ needs.loadup.outputs.medley_release_tag }}" \ + >>${GITHUB_ENV} + echo "ARTIFACTS_FILENAME_TEMPLATE=${{ needs.loadup.outputs.artifacts_filename_template }}" >>${GITHUB_ENV} + + # Create taball dir + - run: mkdir -p ${TARBALL_DIR} + + # Get the tarballs + - name: Get tarballs + uses: actions/download-artifact@v3 + with: + name: tarballs + path: ${{ env.TARBALL_DIR }} + + # Build the deb files as well as the tgz files + - name: Build .deb files for 3 architectures + id: debs + run: | + cd installers/deb + ./build_deb.sh + + # Push the debs and tgz up to github releases + - name: Push the release + id: push_release + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + artifacts: + ${{ env.DEBS_DIR }}/*.deb, + ${{ env.TARS_DIR }}/*.tgz + tag: ${{ env.MEDLEY_RELEASE_TAG }} + token: ${{ secrets.GITHUB_TOKEN }} + omitBodyDuringUpdate: true + omitDraftDuringUpdate: true + omitNameDuringUpdate: true + omitPrereleaseDuringUpdate: true + + + +# JOB: macos_installer ############################################################## + + # + # Create the macos installers (.dmg and .zip) and push to release on github + # + macos_installer: + + runs-on: macos-12 + + needs: [inputs, sentry, loadup] + if: | + needs.sentry.outputs.release_not_built == 'true' + || needs.inputs.outputs.force == 'true' +# if: false + + defaults: + run: + shell: bash + + steps: + + # Checkout latest commit + - name: Checkout Medley + uses: actions/checkout@v3 + + # Environment variables + - name: Environment variables + run: | + MACOS_DIR=installers/macos + echo "MACOS_DIR=${MACOS_DIR}" >>${GITHUB_ENV} + echo "ARTIFACTS_DIR=${MACOS_DIR}/artifacts" >>${GITHUB_ENV} + echo "TARBALL_DIR=${MACOS_DIR}/tmp/tarballs" >>${GITHUB_ENV} + echo "MEDLEY_RELEASE_TAG=${{ needs.loadup.outputs.medley_release_tag }}" \ + >>${GITHUB_ENV} + echo "ARTIFACTS_FILENAME_TEMPLATE=${{ needs.loadup.outputs.artifacts_filename_template }}" >>${GITHUB_ENV} + + # Create tarball dir + - run: mkdir -p ${TARBALL_DIR} + + # Get the tarballs + - name: Get tarballs + uses: actions/download-artifact@v3 + with: + name: tarballs + path: ${{ env.TARBALL_DIR }} + + # Build the .dmg and .zip files + - name: Build .dmg & .zip files + id: dmg-zip + run: | + cd ${MACOS_DIR} + ./build_artifacts.sh + + # Push the .dmg and .zip up to github releases + - name: Push the release + id: push_release + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + artifacts: + # 2023-07-20 not yet building dmg -- ${{ env.ARTIFACTS_DIR }}/*.dmg, + ${{ env.ARTIFACTS_DIR }}/*.zip + tag: ${{ env.MEDLEY_RELEASE_TAG }} + token: ${{ secrets.GITHUB_TOKEN }} + omitBodyDuringUpdate: true + omitDraftDuringUpdate: true + omitNameDuringUpdate: true + omitPrereleaseDuringUpdate: true + + + +# JOB: windows_installer ############################################################# # # Create the Windows installer, push it up to the release on github and @@ -313,7 +425,11 @@ jobs: needs.sentry.outputs.release_not_built == 'true' || needs.inputs.outputs.force == 'true' + outputs: + windows_installer_filename: ${{ steps.jobout.outputs.INSTALLER_FILENAME }} + steps: + # Checkout latest commit - name: Checkout Medley uses: actions/checkout@v3 @@ -328,14 +444,14 @@ jobs: echo "MEDLEY_RELEASE_TAG=$mrt" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append $msrt="${{ needs.loadup.outputs.medley_short_release_tag }}" echo "MEDLEY_SHORT_RELEASE_TAG=$msrt" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - $debs="${{ needs.loadup.outputs.debs_filename_base }}" - echo "DEBS_FILENAME_BASE=$debs" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + $aft="${{ needs.loadup.outputs.artifacts_filename_template }}" + echo "ARTIFACTS_FILENAME_TEMPLATE=$aft" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append # Download vnc viewer - name: Download vncviewer shell: powershell run: | - $url = "https://sourceforge.net/projects/tigervnc/files/stable/1.12.0/vncviewer64-1.12.0.exe" + $url = "https://online.interlisp.org/downloads/vncviewer64-1.12.0.exe" $output = "installers\win\vncviewer64-1.12.0.exe" (New-Object System.Net.WebClient).DownloadFile($url, $output) @@ -344,8 +460,7 @@ jobs: shell: powershell run: | iscc installers\win\medley.iss - $filename="medley-install_${env:COMBINED_RELEASE_TAG}_x64.exe" - echo "INSTALLER_FILENAME=$filename" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + # Upload windows installer to release - name: Upload windows installer to release @@ -353,7 +468,7 @@ jobs: uses: ncipollo/release-action@v1 with: allowUpdates: true - artifacts: installers/win/${{ env.INSTALLER_FILENAME }} + artifacts: installers/win/medley-*.exe tag: ${{ env.MEDLEY_RELEASE_TAG }} token: ${{ secrets.GITHUB_TOKEN }} omitBodyDuringUpdate: true @@ -361,18 +476,63 @@ jobs: omitNameDuringUpdate: true omitPrereleaseDuringUpdate: true - # Install the OpenSSH Client - - name: Install the OpenSSH Client - shell: powershell + +# JOB: downloads_page ################################################################ + + # + # Update the downloads page on OIO + # + + downloads_page: + + runs-on: ubuntu-latest + + needs: [inputs, sentry, loadup, linux_installer, macos_installer, windows_installer] + if: | + needs.sentry.outputs.release_not_built == 'true' + || needs.inputs.outputs.force == 'true' + + steps: + + # Environment variables + - name: Environment Varibales (from other jobs) run: | - Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 + crt="${{ needs.loadup.outputs.combined_release_tag }}" + echo "COMBINED_RELEASE_TAG=${crt}" >>${GITHUB_ENV} + mrt="${{ needs.loadup.outputs.medley_release_tag }}" + echo "MEDLEY_RELEASE_TAG=${mrt}" >>${GITHUB_ENV} + msrt="${{ needs.loadup.outputs.medley_short_release_tag }}" + echo "MEDLEY_SHORT_RELEASE_TAG=${msrt}" >>${GITHUB_ENV} + + # Checkout latest commit + - name: Checkout Medley + uses: actions/checkout@v3 + + + # Upload a dummy file to release + # Needed since download url of the release changes on every update + # So this will be the final update before creating downloads page + # and we can use its url for the page + - run: echo "placeholder" >placeholder.txt + - name: Upload windows installer to release + id: pushph + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + artifacts: placeholder.txt + tag: ${{ env.MEDLEY_RELEASE_TAG }} + token: ${{ secrets.GITHUB_TOKEN }} + omitBodyDuringUpdate: true + omitDraftDuringUpdate: true + omitNameDuringUpdate: true + omitPrereleaseDuringUpdate: true # Update the downloads page and the man page on OIO - name: Update the downloads page and the man page to the OIO static page host shell: bash run: | # Figure out filenames - download_url="${{ steps.push.outputs.html_url }}" + download_url="${{ steps.pushph.outputs.html_url }}" download_url="${download_url/\/tag\//\/download\/}" local_template="installers/downloads_page/medley_downloads.html" local_filename="medley_downloads.html" @@ -390,9 +550,8 @@ jobs: # Fill in downloads page template sed \ -e "s/@@@MEDLEY.SHORT.RELEASE.TAG@@@/${MEDLEY_SHORT_RELEASE_TAG}/g" \ + -e "s/@@@COMBINED.RELEASE.TAG@@@/${COMBINED_RELEASE_TAG}/g" \ -e "s~@@@DOWNLOAD_URL@@@~${download_url}~g" \ - -e "s/@@@DEBS.FILENAME.BASE@@@/${DEBS_FILENAME_BASE}/g" \ - -e "s/@@@WINDOWS.INSTALLER.FILENAME@@@/${INSTALLER_FILENAME}/g" \ < "${local_template}" > "${local_filename}" # Create sftp instruction file echo "-rm ${remote_filepath}.oldold" > batch @@ -409,7 +568,7 @@ jobs: -###################################################################################### +# JOB: complete ##################################################################### # Use set-sentry-action to determine set the sentry that says this release has # been successfully built @@ -421,9 +580,16 @@ jobs: outputs: build_successful: ${{ steps.output.outputs.build_successful }} - needs: [inputs, sentry, loadup, windows_installer] + needs: [inputs, sentry, loadup, downloads_page] steps: + # Delete the tarballs artifact + - name: Delete tarballs artifact + uses: geekyeggo/delete-artifact@v2 + with: + name: tarballs + failOnError: false + # Checkout the actions for this repo owner - name: Checkout Actions uses: actions/checkout@v3 @@ -445,21 +611,4 @@ jobs: echo "build_successful='true'" >> $GITHUB_OUTPUT ###################################################################################### - - - -# - name: Download the Windows installer created in windows job -# uses: actions/download-artifact@v3 -# with: -# name: windows_installer -# path: installers/win - -# - name: Rename the Windows installer w/ version tag -# run: | -# maiko_release_tag="${{ steps.maiko.outputs.latest_tag }}" -# combined_release_tag="${MEDLEY_RELEASE_TAG#medley-}_${maiko_release_tag#maiko-}" -# windows_installer_filename="medley_install_${combined_release_tag}_x64.exe" -# cd installers/win -# mv medley_install_vXXXVERSIONXXX_x64.exe "${windows_installer_filename}" -# echo "WINDOWS_INSTALLER_FILENAME=${windows_installer_filename}" >>${GITHUB_ENV} - +###################################################################################### diff --git a/.github/workflows/buildReleaseInclDocker.yml b/.github/workflows/buildReleaseInclDocker.yml index cfc9aa42..5049109c 100644 --- a/.github/workflows/buildReleaseInclDocker.yml +++ b/.github/workflows/buildReleaseInclDocker.yml @@ -84,6 +84,7 @@ jobs: echo "force=false" >> $GITHUB_OUTPUT; fi + ###################################################################################### diff --git a/.gitignore b/.gitignore index aeae2bea..223b84a6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,10 @@ tmp/* +# releases directory +releases/* + + # all loadup files loadups/exports.all diff --git a/installers/deb/build_deb.sh b/installers/deb/build_deb.sh index 5beb7314..78d45bc9 100755 --- a/installers/deb/build_deb.sh +++ b/installers/deb/build_deb.sh @@ -11,15 +11,6 @@ ############################################################################### # set -x -# mess with file desscriptors so we get only one line on stdout -# so we can communicate only what we want back to any githib runner -# stash fd 1 in fd 3 -exec 3>&1 -# make fd 1 (stdout) be the same as stdout -# so none of the std output from this file will be captured by -# $() but it will still be written out to the tty (via stderr) -exec 1>&2 - tarball_dir=tmp/tarballs # Make sure we are in the right directory @@ -32,6 +23,13 @@ then exit 1 fi +# template for artifacts file names should be passed down in the ENV variable: ARTIFACTS_FILENAME_TEMPLATE +if [ -z "${ARTIFACTS_FILENAME_TEMPLATE}" ]; +then + ARTIFACTS_FILENAME_TEMPLATE="medley-full-@@PLATFORM@@-@@ARCH@@-@@MEDLEY.RELEASE@@_@@MAIKO.RELEASE@@" +fi + + # If running as a github action or -t arg, then skip downloading the tarballs if ! [[ -n "${GITHUB_WORKSPACE}" || "$1" = "-t" ]]; @@ -69,7 +67,6 @@ fi 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/") -debs_filename_base="medley-full-${medley_release}_${maiko_release}" popd >/dev/null 2>/dev/null @@ -136,7 +133,7 @@ do # # Create tar file for this arch # - filename="${debs_filename_base}-${wslp}-${arch}" + filename="$(echo ${ARTIFACTS_FILENAME_TEMPLATE} | sed -e "s#@@PLATFORM@@#${wslp}#" -e "s#@@ARCH@@#${arch}#" -e "s#@@MEDLEY.RELEASE@@#${medley_release}#" -e "s#@@MAIKO.RELEASE@@#${maiko_release}#" )" mkdir -p tars echo "Creating tar file tars/${filename}.tgz" tar -C ${il_dir} -czf tars/${filename}.tgz . @@ -151,8 +148,5 @@ do done done -# send just one line back to github $() construct -# do this by restoring fd 1 to what it was orginally -exec 1>&3 -echo "${debs_filename_base}" - +################################################################################################################ +################################################################################################################ diff --git a/installers/downloads_page/medley_downloads.html b/installers/downloads_page/medley_downloads.html index e41529a9..4e81d85d 100644 --- a/installers/downloads_page/medley_downloads.html +++ b/installers/downloads_page/medley_downloads.html @@ -10,36 +10,46 @@
  • Local Installations (for any Linux distro)

  • -
  • WINDOWS 10/11 (Medley runs in a Docker container)

    +
  • macOS 11 (Big Sur) and later - for both Intel and Apple Silicon

    -

    Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for Windows x64 machines

  • + +
  • WINDOWS 10/11 (Medley running within Cygwin)

    + +

    Not available

  • diff --git a/installers/downloads_page/medley_downloads.md b/installers/downloads_page/medley_downloads.md index 7d251244..cd87f574 100644 --- a/installers/downloads_page/medley_downloads.md +++ b/installers/downloads_page/medley_downloads.md @@ -6,38 +6,47 @@ * #### Standard Linux - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-x86\_64.deb) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-x86\_64-@@@COMBINED.RELEASE.TAG@@@.deb) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-aarch64.deb) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-aarch64-@@@COMBINED.RELEASE.TAG@@@.deb) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-armv7l.deb) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-armv7l-@@@COMBINED.RELEASE.TAG@@@.deb) * #### Windows System for Linux - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\.64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-x86\_64.deb) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\.64 machines](@@@DOWNLOAD_URL@@@/medley-full-wsl-x86\_64-@@@COMBINED.RELEASE.TAG@@@.deb) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-aarch64.deb) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/medley-full-wsl-aarch64-@@@COMBINED.RELEASE.TAG@@@.deb) * ### Local Installations (for any Linux distro) * #### Standard Linux - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-x86\_64.tgz) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-x86\_64-@@@COMBINED.RELEASE.TAG@@@.tgz) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-aarch64.tgz) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-aarch64-@@@COMBINED.RELEASE.TAG@@@.tgz) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-armv7l.tgz) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-armv7l-@@@COMBINED.RELEASE.TAG@@@.tgz) * #### Windows System for Linux - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-x86\_64.tgz) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/medley-full-wsl-x86\_64-@@@COMBINED.RELEASE.TAG@@@.tgz) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-aarch64.tgz) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/medley-full-wsl-aarch64-@@@COMBINED.RELEASE.TAG@@@.tgz) - * ## WINDOWS 10/11 (Medley runs in a Docker container) - - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for Windows x64 machines](@@@DOWNLOAD_URL@@@/@@@WINDOWS.INSTALLER.FILENAME@@@) + * ## macOS 11 (Big Sur) and later - for both Intel and Apple Silicon + * ### DMG Installer + + Not available + + * ### ZIP Installer + + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@](@@@DOWNLOAD_URL@@@/medley-full-macos-universal-@@@COMBINED.RELEASE.TAG@@@.zip) + + * ## WINDOWS 10/11 (Medley running within Cygwin) + + Not available diff --git a/installers/macos/.gitignore b/installers/macos/.gitignore new file mode 100644 index 00000000..14816e60 --- /dev/null +++ b/installers/macos/.gitignore @@ -0,0 +1,7 @@ +tmp +devtmp +pkg/*.pkg +artifacts + + + diff --git a/installers/macos/app/Info.plist b/installers/macos/app/Info.plist new file mode 100644 index 00000000..72d0498d --- /dev/null +++ b/installers/macos/app/Info.plist @@ -0,0 +1,33 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + medley/medley + CFBundleGetInfoString + Medley Interlisp, Copyright 2023 Interlisp.org + CFBundleIconFile + Medley.icns + CFBundleIdentifier + org.interlisp.Medley + CFBundleDocumentTypes + + + CFBundleInfoDictionaryVersion + 3.51 + CFBundlePackageType + APPL + CFBundleShortVersionString + --VERSION_TAG-- + CFBundleSignature + Medley + CFBundleVersion + --VERSION_TAG-- + NSHumanReadableCopyright + Copyright 2023 Interlisp.org + LSMinimumSystemVersion + 11.0 + + diff --git a/installers/macos/app/PkgInfo b/installers/macos/app/PkgInfo new file mode 100644 index 00000000..5c0b3d6d --- /dev/null +++ b/installers/macos/app/PkgInfo @@ -0,0 +1 @@ +APPLMedley diff --git a/installers/macos/build_app.sh b/installers/macos/build_app.sh new file mode 100755 index 00000000..7c66cf96 --- /dev/null +++ b/installers/macos/build_app.sh @@ -0,0 +1,170 @@ +#!/bin/bash +############################################################################### +# +# build_app.sh: build app bundle for installing Medley Interlisp on MacOS +# +# 2023-02-23 Frank Halasz +# +# Copyright 2023 by Interlisp.org +# +############################################################################### + +APPNAME=Medley + +# 2023-07-19 Temorary selector to allow us to create .zip asset before app/dmg work is finished +INCLUDE_APP="no" # "yes" or "no" + +# Make sure we are in the right directory +if [ ! -f ./app/Info.plist ]; +then +echo "Can't find ./app/Info.plist file." +echo "Incorrect cwd?" +echo "Should be in medley/installers/macos" +echo "Exiting" +exit 1 +fi + +# template for artifacts file names should be passed down in the ENV variable: ARTIFACTS_FILENAME_TEMPLATE +if [ -z "${ARTIFACTS_FILENAME_TEMPLATE}" ]; +then + ARTIFACTS_FILENAME_TEMPLATE="medley-full-@@PLATFORM@@-@@ARCH@@-@@MEDLEY.RELEASE@@_@@MAIKO.RELEASE@@" +fi + +# +# Setup directories +# +CWD=$(pwd) +RESULTS_DIR=${CWD}/artifacts +APPBUNDLE=${RESULTS_DIR}/${APPNAME}.app +APPBUNDLECONTENTS=${APPBUNDLE}/Contents +APPBUNDLEEXE=${APPBUNDLECONTENTS}/MacOS +APPBUNDLERESOURCES=${APPBUNDLECONTENTS}/Resources +APPBUNDLEICON=${APPBUNDLECONTENTS}/Resources +tmp_dir=${CWD}/tmp +tarball_dir=${tmp_dir}/tarballs + +# 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_dir} + mkdir -p ${tmp_dir} + # then download the maiko and medley tarballs + mkdir -p ${tarball_dir} + echo "Fetching maiko and medley release tarballs" + TAG=$(gh release list --repo interlisp/maiko | head -n 1 | awk "{print \$1 }") + gh release download ${TAG} \ + --repo interlisp/maiko \ + --dir ${tarball_dir} \ + --pattern "*darwin*.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 "*-loadups.tgz" \ + --pattern "*-runtime.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-*-darwin.x86_64.tgz | sed "s/maiko-\(.*\)-darwin.x86_64.tgz/\1/") +popd >/dev/null 2>/dev/null + +if [ "${INCLUDE_APP}" = "yes" ]; then + # + # Create bundle dirs + # + rm -rf ${RESULTS_DIR} + mkdir -p ${RESULTS_DIR} + rm -rf ${APPBUNDLE} + mkdir -p ${APPBUNDLE} + mkdir ${APPBUNDLE}/Contents + mkdir ${APPBUNDLE}/Contents/MacOS + mkdir ${APPBUNDLE}/Contents/Resources + # + # Create icons and put in bundle + # + iconset_dir=${tmp_dir}/${APPNAME}.iconset + rm -rf ${iconset_dir} + mkdir -p ${iconset_dir} + image_dir=${CWD}/images + sips -z 16 16 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_16x16.png >/dev/null 2>&1 + sips -z 32 32 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_16x16@2x.png >/dev/null 2>&1 + sips -z 32 32 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_32x32.png >/dev/null 2>&1 + sips -z 64 64 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_32x32@2x.png >/dev/null 2>&1 + sips -z 128 128 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_128x128.png >/dev/null 2>&1 + sips -z 256 256 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_128x128@2x.png >/dev/null 2>&1 + sips -z 256 256 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_256x256.png >/dev/null 2>&1 + sips -z 512 512 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_256x256@2x.png >/dev/null 2>&1 + sips -z 512 512 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_512x512.png >/dev/null 2>&1 + cp ${image_dir}/App_icon1024.png ${iconset_dir}/icon_512x512@2x.png + iconutil -c icns -o ${tmp_dir}/${APPNAME}.icns ${iconset_dir} + cp ${tmp_dir}/${APPNAME}.icns ${APPBUNDLEICON}/ + rm -r ${iconset_dir} + rm ${tmp_dir}/${APPNAME}.icns + # + # Update and copy in "control" files + # + sed -e "s/--VERSION_TAG--/${medley_release}.${maiko_release}.0/g" \ + < app/Info.plist \ + > ${APPBUNDLECONTENTS}/Info.plist + cp app/PkgInfo ${APPBUNDLECONTENTS}/ +fi #INCLUDE_APP + +# +# Untar the maiko and medley releases into the bundle +# +il_dir=${APPBUNDLE}/Contents/MacOS +mkdir -p ${il_dir} +tar -x -z -C ${il_dir} \ + -f "${tarball_dir}/maiko-${maiko_release}-darwin.universal.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" +# +# Handle run_medley needing separate directories for each arch +# +pushd ${il_dir}/maiko >/dev/null 2>&1 +ln -s darwin.universal darwin.aarch64 +ln -s darwin.universal darwin.x86_64 +popd >/dev/null 2>&1 +# +# Add file icon to medley.command +# +if [ -z "$(which fileicon)" ]; +then + brew install fileicon +fi +fileicon set ${il_dir}/medley/scripts/medley/medley.command ${image_dir}/Command_icon128.png +# +# Also create the zip file of il_dir for distribution +# +pushd ${il_dir} >/dev/null 2>&1 +filename="$(echo ${ARTIFACTS_FILENAME_TEMPLATE} | sed -e "s#@@PLATFORM@@#macos#" -e "s#@@ARCH@@#universal#" -e "s#@@MEDLEY.RELEASE@@#${medley_release}#" -e "s#@@MAIKO.RELEASE@@#${maiko_release}#" )" +zip -r -6 -y -q ${RESULTS_DIR}/${filename}.zip . +popd >/dev/null 2>&1 + +###################################################################################################### +###################################################################################################### diff --git a/installers/macos/build_artifacts.sh b/installers/macos/build_artifacts.sh new file mode 100755 index 00000000..700642e6 --- /dev/null +++ b/installers/macos/build_artifacts.sh @@ -0,0 +1,66 @@ +#!/bin/bash +############################################################################### +# +# build_artifacts.sh: build the artifacts for installing Medley Interlisp on +# MacOS. Basically just calls build_app.sh and build_dmg.sh. +# based on Medley.app built by build_app.sh +# +# 2023-03-03 Frank Halasz +# +# Copyright 2023 by Interlisp.org +# +############################################################################### + +# +# Figure out 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}") + +# +# cd to the dir we are executing from and call +# build_app.sh and the build_dmg.sh +# +cd ${SCRIPTDIR} +t="" +c="" +if [[ "$1" = "-t" || "$2" = "-t" ]]; then t="-t"; fi +if [[ "$1" = "-c" || "$2" = "-c" ]]; then c="-c"; fi +./build_app.sh "${t}" 2>&1 +# 2023-07-20 Not building dmg as yet, just using this to build zip file +# while we finish work around dmg +# ./build_dmg.sh "${c}" + + + +############################################################################### diff --git a/installers/macos/build_dmg.sh b/installers/macos/build_dmg.sh new file mode 100755 index 00000000..531aca0e --- /dev/null +++ b/installers/macos/build_dmg.sh @@ -0,0 +1,185 @@ +#!/bin/bash +############################################################################### +# +# build_dmg.sh: build dmg for installing Medley Interlisp on MacOS +# based on Medley.app built by build_app.sh +# +# 2023-03-03 Frank Halasz +# +# Copyright 2023 by Interlisp.org +# +# Based on code found at: +# http://stackoverflow.com/questions/96882/how-do-i-create-a-nice-looking-dmg-for-mac-os-x-using-command-line-tools +# +############################################################################### + +#set -o verbose #echo onset +o verbose #echo off + +# template for artifacts file names should be passed down in the ENV variable: ARTIFACTS_FILENAME_TEMPLATE +if [ -z "${ARTIFACTS_FILENAME_TEMPLATE}" ]; +then + ARTIFACTS_FILENAME_TEMPLATE="medley-full-@@PLATFORM@@-@@ARCH@@-@@MEDLEY.RELEASE@@_@@MAIKO.RELEASE@@" +fi + +# +# Set Parameters +# +APP_NAME="Medley.app" +VOL_NAME="Medley_Install" +BG_NAME=Install_Message.png +WIN_WIDTH=700 +WIN_HEIGHT=850 + +# +# Set pathnames +# +CWD=$(pwd) +TMP_DIR=${CWD}/tmp +RESULTS_DIR=${CWD}/artifacts +APP_PATH=${RESULTS_DIR}/${APP_NAME} +DMG_PATH=${RESULTS_DIR}/${VOL_NAME} +SRC_DIR=${TMP_DIR}/dmg_src +IMAGES_DIR=${CWD}/images +SCRIPTS_DIR=${CWD}/scripts + +# +# Make sure we are in the right directory +# +if [ ! -e ${APP_PATH} ]; +then + echo "Can't find the app: ${APP_NAME}." + echo "Incorrect cwd? Should be in medley/installers/macos." + echo "Or build_app.sh not yet run?" + echo "Exiting" + exit 1 +fi + +# +# Copy over files from build app etc to dmg proto-directory +# +if [ ! "$1" = "-c" ] +then + # + # Cleanup anything leftover from last run + # + rm -rf ${SRC_DIR} + mkdir -p ${SRC_DIR} + + # + # Assemble source directory for DMG + # + #ditto ${APP_PATH} ${SRC_DIR}/${APP_NAME} + mv ${APP_PATH} ${SRC_DIR}/${APP_NAME} + SetFile -a B ${SRC_DIR}/${APP_NAME} + ditto ${SCRIPTS_DIR}/medley_add2path ${SRC_DIR}/medley_add2path + ditto ${IMAGES_DIR}/${BG_NAME} ${SRC_DIR}/.background/${BG_NAME} +fi + +# +# Create initial dmg image +# +if [ -e "/Volumes/${VOL_NAME}" ]; +then + hdiutil detach /Volumes/${VOL_NAME} +fi +rm -f ${DMG_PATH}.temp.dmg +hdiutil create -srcfolder ${SRC_DIR} -volname ${VOL_NAME} -fs HFS+ \ + -fsargs "-c c=64,a=16,e=16" -format UDRW ${DMG_PATH}.temp.dmg +device=$(\ + hdiutil attach -readwrite -noverify -noautoopen "${DMG_PATH}".temp.dmg \ + | egrep '^/dev/' | sed 1q | awk '{print $1}' \ + ) + +# +# cd to the new dmg +# +pushd /Volumes/${VOL_NAME} >/dev/null 2>&1 + +# +# Add symbolic link for medley script and icon for addpath +# +ln -s Medley.app/Contents/MacOS/medley/scripts/medley/medley.command medley +if [ -z "$(which fileicon)" ]; +then + brew install fileicon +fi +fileicon set medley_add2path ${IMAGES_DIR}/A2P_icon128.png + +# +# Dress up the appearance using Applescript +# +ROW1=375 +ROW2=650 +COL1=139 +COL2=350 +COL3=561 +osascript </dev/null 2>&1 + +# +# Detach the tmp dmg and convert it to final (compressed, ro) dmg +# +hdiutil detach ${device} +sync +rm -f ${DMG_PATH}.dmg +hdiutil convert "${DMG_PATH}".temp.dmg -format UDZO -imagekey zlib-level=6 -o ${DMG_PATH}.dmg +rm -rf "${DMG_PATH}".temp.dmg + +# +# Extract version info from app Info.plist & rename dmg using version +# +sed_script='{/CFBundleVersion/!d;N;s/^.*\(.*\)<\/string>/\1/;s/.0$//;s/\./_/;p;}' +version=$(sed -ne "${sed_script}" ${SRC_DIR}/${APP_NAME}/Contents/Info.plist) +DMG_NAME="$(echo ${ARTIFACTS_FILENAME_TEMPLATE} | sed -e 's#@@PLATFORM@@#macos#' -e 's#@@ARCH@@#$universal#' -e 's#@@MEDLEY.RELEASE@@_@@MAIKO.RELEASE@@#${version}#' )" +mv ${DMG_PATH}.dmg ${RESULTS_DIR}/${DMG_NAME}.dmg + +# +# Done +# +echo "DMG build completed." + +############################################################################### +############################################################################### + diff --git a/installers/macos/images/A2P_icon.svg b/installers/macos/images/A2P_icon.svg new file mode 100644 index 00000000..002a759a --- /dev/null +++ b/installers/macos/images/A2P_icon.svg @@ -0,0 +1,209 @@ + + + + Medley + + + + + + + + + + + + add2path + + + + + + + + + + + + + + diff --git a/installers/macos/images/A2P_icon128.png b/installers/macos/images/A2P_icon128.png new file mode 100644 index 00000000..a82b12ae Binary files /dev/null and b/installers/macos/images/A2P_icon128.png differ diff --git a/installers/macos/images/A2P_icon256.png b/installers/macos/images/A2P_icon256.png new file mode 100644 index 00000000..0ff942f9 Binary files /dev/null and b/installers/macos/images/A2P_icon256.png differ diff --git a/installers/macos/images/App_icon.svg b/installers/macos/images/App_icon.svg new file mode 100644 index 00000000..04f667c7 --- /dev/null +++ b/installers/macos/images/App_icon.svg @@ -0,0 +1,209 @@ + + + + Medley + + + + + + + + + + + + app + + + + + + + + + + + + + + diff --git a/installers/macos/images/App_icon1024.png b/installers/macos/images/App_icon1024.png new file mode 100644 index 00000000..fd3e4dd5 Binary files /dev/null and b/installers/macos/images/App_icon1024.png differ diff --git a/installers/macos/images/App_icon512.png b/installers/macos/images/App_icon512.png new file mode 100644 index 00000000..e8beafa1 Binary files /dev/null and b/installers/macos/images/App_icon512.png differ diff --git a/installers/macos/images/Command_icon.svg b/installers/macos/images/Command_icon.svg new file mode 100644 index 00000000..47359e6c --- /dev/null +++ b/installers/macos/images/Command_icon.svg @@ -0,0 +1,209 @@ + + + + Medley + + + + + + + + + + + + command + + + + + + + + + + + + + + diff --git a/installers/macos/images/Command_icon128.png b/installers/macos/images/Command_icon128.png new file mode 100644 index 00000000..e04486ca Binary files /dev/null and b/installers/macos/images/Command_icon128.png differ diff --git a/installers/macos/images/Command_icon256.png b/installers/macos/images/Command_icon256.png new file mode 100644 index 00000000..727ef694 Binary files /dev/null and b/installers/macos/images/Command_icon256.png differ diff --git a/installers/macos/images/Install_Message.png b/installers/macos/images/Install_Message.png new file mode 100644 index 00000000..c770ca96 Binary files /dev/null and b/installers/macos/images/Install_Message.png differ diff --git a/installers/macos/images/Install_Message.svg b/installers/macos/images/Install_Message.svg new file mode 100644 index 00000000..8c228660 --- /dev/null +++ b/installers/macos/images/Install_Message.svg @@ -0,0 +1,1556 @@ + + + + + + +Install Install Medley Interlisp1. Drag (copy) the three items below into Applications or any folder of your choosing.3. If you want to excute medley without specifying a path,run medley_add2path from a Terminal - one-time.medley command from a Terminal.2. Double-click on the Medley.app to run OR run the + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +andandoror diff --git a/installers/macos/images/Install_icon.svg b/installers/macos/images/Install_icon.svg new file mode 100644 index 00000000..a6f48158 --- /dev/null +++ b/installers/macos/images/Install_icon.svg @@ -0,0 +1,209 @@ + + + + Medley + + + + + + + + + + + + install + + + + + + + + + + + + + + diff --git a/installers/macos/images/Install_icon128.png b/installers/macos/images/Install_icon128.png new file mode 100644 index 00000000..059d1562 Binary files /dev/null and b/installers/macos/images/Install_icon128.png differ diff --git a/installers/macos/images/Install_icon256.png b/installers/macos/images/Install_icon256.png new file mode 100644 index 00000000..059d1562 Binary files /dev/null and b/installers/macos/images/Install_icon256.png differ diff --git a/installers/macos/images/MedleyIcon.png b/installers/macos/images/MedleyIcon.png new file mode 100644 index 00000000..44611728 Binary files /dev/null and b/installers/macos/images/MedleyIcon.png differ diff --git a/installers/macos/images/MedleyIcon.svg b/installers/macos/images/MedleyIcon.svg new file mode 100644 index 00000000..01fabd13 --- /dev/null +++ b/installers/macos/images/MedleyIcon.svg @@ -0,0 +1,199 @@ + + + + Medley + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/installers/macos/images/MedleyIcon128.png b/installers/macos/images/MedleyIcon128.png new file mode 100644 index 00000000..b69cf172 Binary files /dev/null and b/installers/macos/images/MedleyIcon128.png differ diff --git a/installers/macos/images/MedleyIcon256.png b/installers/macos/images/MedleyIcon256.png new file mode 100644 index 00000000..fbf07bbd Binary files /dev/null and b/installers/macos/images/MedleyIcon256.png differ diff --git a/installers/macos/pkg/Distribution.xml b/installers/macos/pkg/Distribution.xml new file mode 100644 index 00000000..17d9a284 --- /dev/null +++ b/installers/macos/pkg/Distribution.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + Medley-base.pkg + + diff --git a/installers/macos/scripts/medley_add2path b/installers/macos/scripts/medley_add2path new file mode 100755 index 00000000..3005330f --- /dev/null +++ b/installers/macos/scripts/medley_add2path @@ -0,0 +1,43 @@ +#!/bin/bash + +# 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}") + +touch ~/.profile +cat >> ~/.profile <larry>il>medley>internal>MEDLEY-UTILS.;12| 10354 +(FILECREATED " 3-Aug-2023 18:40:12" |{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;6| 10695 - :EDIT-BY "lmm" + :EDIT-BY "frank" - :CHANGES-TO (FNS GATHER-INFO) + :CHANGES-TO (FNS MAKE-FULLER-DB MAKE-EXPORTS-ALL MAKE-WHEREIS-HASH) - :PREVIOUS-DATE "22-May-2023 22:57:21" |{DSK}larry>il>medley>internal>MEDLEY-UTILS.;11|) + :PREVIOUS-DATE " 1-Aug-2023 22:43:13" +|{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;5|) (PRETTYCOMPRINT MEDLEY-UTILSCOMS) @@ -102,18 +103,19 @@ (HELP)))) (MAKE-FULLER-DB - (LAMBDA NIL (* \; "Edited 16-Jul-2022 22:07 by larry") + (LAMBDA (DRIBBLEFILE DBFILE SYSOUTFILE) (* \; "Edited 3-Aug-2023 18:12 by frank") + (* \; "Edited 16-Jul-2022 22:07 by larry") (* \; "Edited 20-Jun-2022 17:23 by larry") (FILESLOAD (SOURCE) FILESETS) - (DRIBBLE (MEDLEYDIR "tmp" "fuller.dribble" T T)) + (DRIBBLE (OR DRIBBLEFILE "fuller.dribble")) (DOFILESLOAD (SUBSET (APPEND OKSOURCES OKLIBRARY OKLISPUSERS OKINTERNAL) 'FINDFILE)) (GATHER-INFO 'ALL) (MASTERSCOPE '(WHO CALLS XYZZY)) - (DUMPDATABASE NIL (MKATOM (MEDLEYDIR "tmp" "fuller.database" T T))) + (DUMPDATABASE NIL (MKATOM (OR DBFILE "fuller.database"))) (DRIBBLE) - (MAKESYS (MEDLEYDIR "tmp" "fuller.sysout" T T) + (MAKESYS (OR SYSOUTFILE "fuller.sysout") "Welcome to Fuller sysout"))) (MEDLEY-FIX-LINKS @@ -146,7 +148,8 @@ (DEFINEQ (MAKE-EXPORTS-ALL - (LAMBDA NIL (* \; "Edited 9-Mar-2021 16:11 by larry") + (LAMBDA (OUTFILE) (* \; "Edited 3-Aug-2023 18:34 by frank") + (* \; "Edited 9-Mar-2021 16:11 by larry") (* "Edited May 3, 2018 by Ron Kaplan--relative to MEDLEYDIR/lispcore/. Don't know why it does the CORE/RENAME") (*  "Edited Aug 17 94 by Sybalsky -- point it to /king/export/lispcore as the truth directory.") @@ -156,24 +159,25 @@  "Edited September 29, 1986 by van Melle") (CNDIR (MEDLEYDIR "sources")) (LOAD 'FILESETS) - (GATHEREXPORTS EXPORTFILES (MEDLEYDIR "tmp" "exports.all" T)))) + (GATHEREXPORTS EXPORTFILES (OR OUTFILE "exports.all")))) (MAKE-WHEREIS-HASH - (LAMBDA NIL (* \; "Edited 12-Mar-2022 12:46 by rmk") + (LAMBDA (DRIBBLEFILE TMPFILE WHEREISFILE) (* \; "Edited 3-Aug-2023 18:37 by frank") + (* \; "Edited 12-Mar-2022 12:46 by rmk") (* \; "Edited 24-Mar-2021 13:26 by larry") (LET ((FILING.ENUMERATION.DEPTH 2) HASHFILE) - (DRIBBLE (MEDLEYDIR "tmp" "whereis.dribble" T)) - (SETQ HASHFILE (XCL::WHERE-IS-NOTICE (MEDLEYDIR "tmp" "whereis.hash-tmp" T) + (DRIBBLE (OR DRIBBLEFILE "whereis.dribble")) + (SETQ HASHFILE (XCL::WHERE-IS-NOTICE (OR TMPFILE "whereis.hash-tmp") :FILES (|for| X |in| MEDLEY-FIX-DIRS |collect| (CONCAT (MEDLEYDIR X) "*.;")) :HASH-FILE-SIZE 60000 :NEW T)) - (RENAMEFILE HASHFILE (MEDLEYDIR "tmp" "whereis.hash" T)) + (RENAMEFILE HASHFILE (OR WHEREISFILE "whereis.hash")) (DRIBBLE)))) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (624 7499 (GATHER-INFO 634 . 6162) (MAKE-FULLER-DB 6164 . 6854) (MEDLEY-FIX-LINKS 6856 - . 7253) (MEDLEY-FIX-DATES 7255 . 7497)) (8538 10331 (MAKE-EXPORTS-ALL 8548 . 9507) (MAKE-WHEREIS-HASH - 9509 . 10329))))) + (FILEMAP (NIL (679 7642 (GATHER-INFO 689 . 6217) (MAKE-FULLER-DB 6219 . 6997) (MEDLEY-FIX-LINKS 6999 + . 7396) (MEDLEY-FIX-DATES 7398 . 7640)) (8681 10672 (MAKE-EXPORTS-ALL 8691 . 9752) (MAKE-WHEREIS-HASH + 9754 . 10670))))) STOP diff --git a/internal/MEDLEY-UTILS.LCOM b/internal/MEDLEY-UTILS.LCOM index f4ccfed1..b492e029 100644 Binary files a/internal/MEDLEY-UTILS.LCOM and b/internal/MEDLEY-UTILS.LCOM differ diff --git a/sources/LOADUP-APPS b/internal/loadups/LOADUP-APPS similarity index 100% rename from sources/LOADUP-APPS rename to internal/loadups/LOADUP-APPS diff --git a/sources/LOADUP-APPS.LCOM b/internal/loadups/LOADUP-APPS.LCOM similarity index 100% rename from sources/LOADUP-APPS.LCOM rename to internal/loadups/LOADUP-APPS.LCOM diff --git a/sources/LOADUP-FULL b/internal/loadups/LOADUP-FULL similarity index 89% rename from sources/LOADUP-FULL rename to internal/loadups/LOADUP-FULL index 104dbbee..55171e07 100644 --- a/sources/LOADUP-FULL +++ b/internal/loadups/LOADUP-FULL @@ -1,10 +1,10 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "18-Jan-2023 16:23:36" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;2 4636 +(FILECREATED "31-Jul-2023 18:28:53" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;4 4521 :CHANGES-TO (FNS LOADUP-FULL) - :PREVIOUS-DATE "12-Aug-2022 12:30:09" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;1 + :PREVIOUS-DATE "18-Jan-2023 16:23:36" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;3 ) @@ -39,7 +39,7 @@ (PRINTOUT T "FULL fonts loaded" T]) (LOADUP-FULL - [LAMBDA NIL (* ; "Edited 18-Jan-2023 16:22 by FGH") + [LAMBDA (DRIBBLEFILE) (* ; "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") @@ -55,9 +55,7 @@ (PROGN (SETQ MEDLEYDIR) (CNDIR (MEDLEYDIR))) (MEDLEY-INIT-VARS) - (SETQ MAKESYSFILENAME (MEDLEYDIR "tmp" "full.sysout" T)) - (SETQ MAKESYSNAME :MEDLEY) - (DRIBBLE (MEDLEYDIR "tmp" "full.dribble" T)) + (DRIBBLE DRIBBLEFILE) (* ;; "BKSYSBUF stops page holding ") @@ -88,5 +86,5 @@ (FIXMETA) (DECLARE%: DONTCOPY - (FILEMAP (NIL (467 4598 (LOADFULLFONTS 477 . 1918) (LOADUP-FULL 1920 . 4348) (FIXMETA 4350 . 4596))))) + (FILEMAP (NIL (467 4483 (LOADFULLFONTS 477 . 1918) (LOADUP-FULL 1920 . 4233) (FIXMETA 4235 . 4481))))) STOP diff --git a/sources/LOADUP-FULL.LCOM b/internal/loadups/LOADUP-FULL.LCOM similarity index 65% rename from sources/LOADUP-FULL.LCOM rename to internal/loadups/LOADUP-FULL.LCOM index 2db7026c..51898200 100644 Binary files a/sources/LOADUP-FULL.LCOM and b/internal/loadups/LOADUP-FULL.LCOM differ diff --git a/sources/LOADUP-LISP b/internal/loadups/LOADUP-LISP similarity index 92% rename from sources/LOADUP-LISP rename to internal/loadups/LOADUP-LISP index a2f54a70..140f17a9 100644 --- a/sources/LOADUP-LISP +++ b/internal/loadups/LOADUP-LISP @@ -1,12 +1,11 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "27-Feb-2023 17:15:53" |{DSK}larry>il>medley>sources>LOADUP-LISP.;2| 5263 - - :EDIT-BY "lmm" +(FILECREATED "31-Jul-2023 18:22:53" |{DSK}frank>il>medley>gmedley>sources>LOADUP-LISP.;2| 5235 :CHANGES-TO (FNS LOADUP-LISP) - :PREVIOUS-DATE "12-Aug-2022 12:29:57" |{DSK}larry>il>medley>sources>LOADUP-LISP.;1|) + :PREVIOUS-DATE "27-Feb-2023 17:15:53" +|{DSK}frank>il>medley>gmedley>sources>LOADUP-LISP.;1|) (PRETTYCOMPRINT LOADUP-LISPCOMS) @@ -19,13 +18,13 @@ (DEFINEQ (LOADUP-LISP - (LAMBDA NIL (* \; "Edited 26-Feb-2023 12:17 by lmm") + (LAMBDA (DRIBBLEFILE) (* \; "Edited 26-Feb-2023 12:17 by lmm") (* \; "Edited 13-Jul-2022 14:09 by rmk") (* \; "Edited 4-Mar-2022 19:13 by larry") (* \; "Edited 29-Apr-2021 22:30 by rmk:") (SETQQ COMPILE.EXT LCOM) (MEDLEY-INIT-VARS) (* \; "should be set earlier") - (DRIBBLE (MEDLEYDIR "tmp" "lisp.dribble" T)) + (DRIBBLE DRIBBLEFILE) (FOR X IN BOOTLOADEDFILES DO (CL:UNLESS (MEMB X SYSFILES) (PRINTOUT T X " bootloaded" T) (SETQ SYSFILES (CONS X SYSFILES)))) @@ -124,5 +123,5 @@ (GLOBALVARS MAKESYSFILENAME MEDLEY-INIT-VARS MEDLEYDIR SYSTEMINITVARS USERRECLST) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (654 5057 (LOADUP-LISP 664 . 5055))))) + (FILEMAP (NIL (649 5029 (LOADUP-LISP 659 . 5027))))) STOP diff --git a/internal/loadups/LOADUP-LISP.LCOM b/internal/loadups/LOADUP-LISP.LCOM new file mode 100644 index 00000000..46a716e5 Binary files /dev/null and b/internal/loadups/LOADUP-LISP.LCOM differ diff --git a/sources/MAKEINIT b/internal/loadups/MAKEINIT similarity index 95% rename from sources/MAKEINIT rename to internal/loadups/MAKEINIT index 3f939a04..cae408c3 100644 --- a/sources/MAKEINIT +++ b/internal/loadups/MAKEINIT @@ -1,18 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "11-Jul-2022 20:00:23"  -{DSK}kaplan>local>medley3.5>working-medley>sources>MAKEINIT.;3 54607 +(FILECREATED " 7-Aug-2023 13:31:49" {DSK}frank>il>medley>gmedley>internal>loadups>MAKEINIT.;4 54490 - :CHANGES-TO (FNS I.FIXUPNUM I.FIXUPSYM) + :CHANGES-TO (FNS MAKEINITGREET) - :PREVIOUS-DATE "19-Jul-2021 23:50:29" -{DSK}kaplan>local>medley3.5>working-medley>sources>MAKEINIT.;2) + :PREVIOUS-DATE " 3-Aug-2023 17:37:51" +{DSK}frank>il>medley>gmedley>internal>loadups>MAKEINIT.;1) -(* ; " -Copyright (c) 1982-1988, 1990-1992, 1998, 2021 by Venue & Xerox Corporation. -") - (PRETTYCOMPRINT MAKEINITCOMS) (RPAQQ MAKEINITCOMS @@ -83,7 +78,8 @@ Copyright (c) 1982-1988, 1990-1992, 1998, 2021 by Venue & Xerox Corporation. (DEFINEQ (MAKEINITGREET - [LAMBDA NIL (* ; "Edited 11-Mar-2021 22:14 by larry") + [LAMBDA (SYSOUTFILE DLINITFILE) (* ; "Edited 3-Aug-2023 17:37 by frank") + (* ; "Edited 11-Mar-2021 22:14 by larry") (* ; "Edited 5-Dec-2017 15:26 by rmk:") (* ;; "") @@ -93,12 +89,13 @@ Copyright (c) 1982-1988, 1990-1992, 1998, 2021 by Venue & Xerox Corporation. (* ;; "") (* Versions are Lisp Microcode Bcpl) (MEDLEY-INIT-VARS) - (DORENAME 'I) - (DORENAME 'R) - (DLFIXINIT (MAKEINIT '(39424 5682 11008) - (MEDLEYDIR "tmp" "init.sysout" T) - NIL DIRECTORIES DISPLAYFONTDIRECTORIES) - (MEDLEYDIR "tmp" "init.dlinit" T]) + (RESETLST + (RESETSAVE OK.TO.MODIFY.FNS T) + (DORENAME 'I) + (DORENAME 'R) + (DLFIXINIT (MAKEINIT '(39424 5682 11008) + SYSOUTFILE NIL DIRECTORIES DISPLAYFONTDIRECTORIES) + DLINITFILE))]) ) (FILESLOAD (SOURCE) @@ -1053,28 +1050,26 @@ DONTCOPY (GLOBALVARS DLPRIMARYMAP DLSECONDARYMAP DLLOCKBITS DLLASTDOMINOPAGE DLIFPAGE DLNEXTPM DLPAGEMAPFP FPTOVP NEWFPFROMOLD VMEMFILE VMEMFILEX) ) -(PUTPROPS MAKEINIT COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1990 1991 - 1992 1998 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3971 4718 (MAKEINITGREET 3981 . 4716)) (4901 11286 (LOADMAKEINIT 4911 . 6114) ( -LOADMKIFILES 6116 . 6431) (RELOAD 6433 . 6916) (MAKEINIT 6918 . 10578) (MKI.START 10580 . 11284)) ( -11364 17082 (MKI.PASSFILE 11374 . 14984) (SCRATCHARRAY 14986 . 15635) (DOFORM 15637 . 16314) ( -CONSTFORMP 16316 . 16550) (NOTICECOMS 16552 . 16860) (EVALFORMAKEINIT 16862 . 17080)) (17083 19203 ( -I.ADDTOVAR 17093 . 17187) (I.DECLARE%: 17189 . 17465) (I.DEFINE-FILE-INFO 17467 . 17657) ( -I.FILECREATED 17659 . 18033) (I.PUTPROPS 18035 . 18148) (I.RPAQ 18150 . 18371) (I.RPAQQ 18373 . 18569) - (I.RPAQ? 18571 . 18786) (I.SETTOPVAL 18788 . 19020) (I.NOUNDO 19022 . 19201)) (19839 26055 ( -I.ATOMNUMBER 19849 . 20340) (I.\ATOMCELL 20342 . 22095) (I.FIXUPNUM 22097 . 23022) (I.FIXUPPTR 23024 - . 23505) (I.FIXUPSYM 23507 . 24563) (I.WORDSPERNAMEENTRY 24565 . 25320) (I.SETSTKNTOFFSET 25322 . -26053)) (26087 27595 (MKI.ATOM 26097 . 26293) (MKI.IEEE 26295 . 27593)) (27692 28457 (MKI.DSET 27702 - . 27985) (MKI.ADDTO 27987 . 28172) (MKI.PUTPROP 28174 . 28455)) (28631 29183 (DUMPVP 28641 . 28738) ( -BOUTZEROS 28740 . 28819) (BIN16 28821 . 29002) (BOUT16 29004 . 29181)) (30074 52808 (DLFIXINIT 30084 - . 31059) (DLSORTSYSOUTPAGES 31061 . 36187) (DLNEXTFP 36189 . 36526) (DLLOCKEDPAGEP 36528 . 36742) ( -DLSETLOCKBIT 36744 . 37006) (DLCOPYPAGEMAP 37008 . 40059) (DLCOPYVMPAGE 40061 . 40451) ( -DLADDPAGEMAPENTRIES 40453 . 41268) (ASSIGNFILEPAGE 41270 . 42503) (ASSIGNFILEPAGERANGE 42505 . 42912) -(DLDUMPSYSOUT 42914 . 44666) (DLDUMPFPTOVP 44668 . 45707) (DLDUMPPAGEMAPS 45709 . 46409) ( -DLDUMPVMEMPAGES 46411 . 47067) (DLSETBOOTPTR 47069 . 47299) (DLDUMPARRAY 47301 . 47688) ( -DLMARKASDUMPED 47690 . 48143) (DLDUMPVMEMPAGE 48145 . 48833) (INSTALLDOMINO 48835 . 49482) ( -INSTALLDOMINO.DIRECT 49484 . 50636) (INSTALLNEWDOMINO 50638 . 52806)) (52830 54187 (DLPRINTFPTOVP -52840 . 53129) (PRINTPRIMARYMAP 53131 . 53845) (DLREADPAGEOFWORDS 53847 . 54014) (SETDIF 54016 . 54185 + (FILEMAP (NIL (3862 4722 (MAKEINITGREET 3872 . 4720)) (4905 11290 (LOADMAKEINIT 4915 . 6118) ( +LOADMKIFILES 6120 . 6435) (RELOAD 6437 . 6920) (MAKEINIT 6922 . 10582) (MKI.START 10584 . 11288)) ( +11368 17086 (MKI.PASSFILE 11378 . 14988) (SCRATCHARRAY 14990 . 15639) (DOFORM 15641 . 16318) ( +CONSTFORMP 16320 . 16554) (NOTICECOMS 16556 . 16864) (EVALFORMAKEINIT 16866 . 17084)) (17087 19207 ( +I.ADDTOVAR 17097 . 17191) (I.DECLARE%: 17193 . 17469) (I.DEFINE-FILE-INFO 17471 . 17661) ( +I.FILECREATED 17663 . 18037) (I.PUTPROPS 18039 . 18152) (I.RPAQ 18154 . 18375) (I.RPAQQ 18377 . 18573) + (I.RPAQ? 18575 . 18790) (I.SETTOPVAL 18792 . 19024) (I.NOUNDO 19026 . 19205)) (19843 26059 ( +I.ATOMNUMBER 19853 . 20344) (I.\ATOMCELL 20346 . 22099) (I.FIXUPNUM 22101 . 23026) (I.FIXUPPTR 23028 + . 23509) (I.FIXUPSYM 23511 . 24567) (I.WORDSPERNAMEENTRY 24569 . 25324) (I.SETSTKNTOFFSET 25326 . +26057)) (26091 27599 (MKI.ATOM 26101 . 26297) (MKI.IEEE 26299 . 27597)) (27696 28461 (MKI.DSET 27706 + . 27989) (MKI.ADDTO 27991 . 28176) (MKI.PUTPROP 28178 . 28459)) (28635 29187 (DUMPVP 28645 . 28742) ( +BOUTZEROS 28744 . 28823) (BIN16 28825 . 29006) (BOUT16 29008 . 29185)) (30078 52812 (DLFIXINIT 30088 + . 31063) (DLSORTSYSOUTPAGES 31065 . 36191) (DLNEXTFP 36193 . 36530) (DLLOCKEDPAGEP 36532 . 36746) ( +DLSETLOCKBIT 36748 . 37010) (DLCOPYPAGEMAP 37012 . 40063) (DLCOPYVMPAGE 40065 . 40455) ( +DLADDPAGEMAPENTRIES 40457 . 41272) (ASSIGNFILEPAGE 41274 . 42507) (ASSIGNFILEPAGERANGE 42509 . 42916) +(DLDUMPSYSOUT 42918 . 44670) (DLDUMPFPTOVP 44672 . 45711) (DLDUMPPAGEMAPS 45713 . 46413) ( +DLDUMPVMEMPAGES 46415 . 47071) (DLSETBOOTPTR 47073 . 47303) (DLDUMPARRAY 47305 . 47692) ( +DLMARKASDUMPED 47694 . 48147) (DLDUMPVMEMPAGE 48149 . 48837) (INSTALLDOMINO 48839 . 49486) ( +INSTALLDOMINO.DIRECT 49488 . 50640) (INSTALLNEWDOMINO 50642 . 52810)) (52834 54191 (DLPRINTFPTOVP +52844 . 53133) (PRINTPRIMARYMAP 53135 . 53849) (DLREADPAGEOFWORDS 53851 . 54018) (SETDIF 54020 . 54189 ))))) STOP diff --git a/internal/loadups/MAKEINIT.LCOM b/internal/loadups/MAKEINIT.LCOM new file mode 100644 index 00000000..004bbd16 Binary files /dev/null and b/internal/loadups/MAKEINIT.LCOM differ diff --git a/loadups/README.md b/internal/loadups/README.md similarity index 100% rename from loadups/README.md rename to internal/loadups/README.md diff --git a/loadups/starter.sysout b/internal/loadups/starter.sysout similarity index 100% rename from loadups/starter.sysout rename to internal/loadups/starter.sysout diff --git a/loadups/full.venuesysout b/internal/venuesysouts/full.venuesysout similarity index 100% rename from loadups/full.venuesysout rename to internal/venuesysouts/full.venuesysout diff --git a/loadups/lisp.venuesysout b/internal/venuesysouts/lisp.venuesysout similarity index 100% rename from loadups/lisp.venuesysout rename to internal/venuesysouts/lisp.venuesysout diff --git a/library/SPY b/library/SPY index 16b6cda5..095dd298 100644 --- a/library/SPY +++ b/library/SPY @@ -1,18 +1,15 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 4-Jan-2022 14:09:48" {DSK}kaplan>Local>medley3.5>my-medley>library>SPY.;2 63314 +(FILECREATED "28-Jul-2023 20:13:45" {DSK}larry>il>medley>library>SPY.;4 64149 + + :EDIT-BY "lmm" :CHANGES-TO (VARS SPYCOMS) - (FNS SPY.MAKE.TREE) + (FNS \SPY.INTERRUPT SPY.BUFFER.ENTRY SPY.ADD.ENTRY) - :PREVIOUS-DATE "29-Apr-94 14:13:52" {DSK}kaplan>Local>medley3.5>my-medley>library>SPY.;1 -) + :PREVIOUS-DATE " 4-Jan-2022 14:09:48" {DSK}larry>il>medley>library>SPY.;1) -(* ; " -Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corporation. -") - (PRETTYCOMPRINT SPYCOMS) (RPAQQ SPYCOMS @@ -33,12 +30,13 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor SPY.UPDATE.TITLE SPY.DELETE SPY.DRAWBOX SPY.BUFFER.ENTRY SPY.BUTTON SPY.END.ENTRY SPY.START SPY.INIT \SPY.INTERRUPT SPY.DUMP.BUFFER SPY.START.ENTRY SPY.ADD.ENTRY SPY.ORIGINAL SPY.OVERFLOW SPY.MERGE.CALLEES SPY.PRINT) - (COMS (INITVARS (SPY.BUTTON)) + (COMS (INITVARS (\BACKGROUND) + (SPY.BUTTON)) (VARS SPY.OPEN SPY.CLOSED)) - (VARIABLES SPY.POINTERS) (GLOBALVARS SPY.OVERFLOWED \PERIODIC.INTERRUPT SPY.TREE SPY.BUFFER.SIZE SPY.NEXT SPY.BUFFER.THRESHOLD SPY.BUFFER SPY.FREQUENCY SPY.SHOW.THRESHOLD SPY.MAXLINES SPY.FONT ) + (SPECVARS \BACKGROUND) (MACROS WITH-SPY WITH.SPY) (DECLARE%: DONTCOPY (RECORDS SPYRECORD SPYDATA)) (INITRECORDS SPYRECORD) @@ -836,8 +834,11 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor ) (SPY.BUFFER.ENTRY -(LAMBDA (N) (* ; "Edited 9-Sep-87 18:27 by Masinter") (COND (SPY.POINTERS (AND (ILEQ (SETQ N (LLSH N 1)) SPY.BUFFER.SIZE) (\GETBASEPTR SPY.BUFFER N))) ((ILEQ N SPY.BUFFER.SIZE) (\VAG2 0 (\GETBASE SPY.BUFFER N))))) -) + [LAMBDA (N) (* ; "Edited 28-Jul-2023 08:16 by lmm") + (* ; "Edited 9-Sep-87 18:27 by Masinter") + (AND (ILEQ (SETQ N (LLSH N 1)) + SPY.BUFFER.SIZE) + (\GETBASEPTR SPY.BUFFER N]) (SPY.BUTTON (LAMBDA (POS) (* gbn " 2-Jun-85 13:12") (PROG ((REG (if POS then (CREATEREGION (fetch XCOORD of POS) (fetch YCOORD of POS) (WIDTHIFWINDOW (BITMAPWIDTH SPY.CLOSED)) (HEIGHTIFWINDOW (BITMAPHEIGHT SPY.CLOSED))) else (GETBOXREGION (WIDTHIFWINDOW (BITMAPWIDTH SPY.CLOSED)) (HEIGHTIFWINDOW (BITMAPHEIGHT SPY.CLOSED)) NIL NIL NIL "Specify region for window %"Spy Control%"")))) (BITBLT SPY.CLOSED NIL NIL (SETQ SPY.BUTTON (CREATEW REG NIL NIL T))) (WINDOWPROP SPY.BUTTON (QUOTE BUTTONEVENTFN) (FUNCTION (LAMBDA (W) (AND (LASTMOUSESTATE UP) (SPY.TOGGLE))))))) @@ -855,8 +856,34 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor ) (\SPY.INTERRUPT -(LAMBDA NIL (* ; "Edited 9-Sep-87 18:32 by Masinter") (SETQ \PERIODIC.INTERRUPT) (* ; "turn off sampling while gathering sample") (PROG ((FRAME (fetch (FX CLINK) (\MYALINK)))) (COND ((IGEQ (if SPY.POINTERS then (LLSH SPY.NEXT 1) else SPY.NEXT) SPY.BUFFER.THRESHOLD) (COND (\INTERRUPTABLE (SPY.DUMP.BUFFER)) (T (* ; "this sample might overflow; just don't do it") (RETURN))))) (SPY.START.ENTRY) SAMPLELOOP (SPY.ADD.ENTRY (fetch (FX FRAMENAME) FRAME)) (COND ((NOT (fetch (FX INVALIDP) (SETQ FRAME (fetch (FX CLINK) FRAME)))) (GO SAMPLELOOP)) (T (SPY.END.ENTRY)))) (SETQ \PERIODIC.INTERRUPT (QUOTE \SPY.INTERRUPT))) -) + [LAMBDA NIL (* ; "Edited 28-Jul-2023 08:59 by lmm") + (* ; "Edited 9-Sep-87 18:32 by Masinter") + (DECLARE (SPECVARS \BACKGROUND)) + [PROG [(FRAME (fetch (FX CLINK) + (\MYALINK] + (IF \BACKGROUND + THEN (RETURN)) + (SETQ \PERIODIC.INTERRUPT) (* ; + "turn off sampling while gathering sample") + [COND + ((IGEQ (LLSH SPY.NEXT 1) + SPY.BUFFER.THRESHOLD) + (COND + (\INTERRUPTABLE (SPY.DUMP.BUFFER)) + (T (* ; + "this sample might overflow; just don't do it") + (RETURN] + (SPY.START.ENTRY) + SAMPLELOOP + (SPY.ADD.ENTRY (fetch (FX FRAMENAME) + FRAME)) + (COND + ([NOT (fetch (FX INVALIDP) + (SETQ FRAME (fetch (FX CLINK) + FRAME] + (GO SAMPLELOOP)) + (T (SPY.END.ENTRY] + (SETQ \PERIODIC.INTERRUPT '\SPY.INTERRUPT]) (SPY.DUMP.BUFFER [LAMBDA NIL (* ; "Edited 28-Apr-94 14:00 by sybalsky") @@ -885,8 +912,15 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor ) (SPY.ADD.ENTRY -(LAMBDA (NAME) (* ; "Edited 9-Sep-87 18:29 by Masinter") (COND (SPY.POINTERS (\PUTBASEPTR SPY.BUFFER (LLSH SPY.NEXT 1) NAME) (COND ((IGEQ (LLSH (add SPY.NEXT 1) 1) SPY.BUFFER.SIZE) (SPY.OVERFLOW)))) (T (OR (LITATOM NAME) (SETQ NAME (QUOTE *FORM*))) (\PUTBASE SPY.BUFFER SPY.NEXT (\LOLOC NAME)) (COND ((IGEQ (add SPY.NEXT 1) SPY.BUFFER.SIZE) (SPY.OVERFLOW)))))) -) + [LAMBDA (NAME) (* ; "Edited 28-Jul-2023 08:17 by lmm") + (* ; "Edited 9-Sep-87 18:29 by Masinter") + (\PUTBASEPTR SPY.BUFFER (LLSH SPY.NEXT 1) + NAME) + (COND + ((IGEQ (LLSH (add SPY.NEXT 1) + 1) + SPY.BUFFER.SIZE) + (SPY.OVERFLOW]) (SPY.ORIGINAL [LAMBDA (TREES) (* ; "Edited 28-Apr-94 14:00 by sybalsky") @@ -951,6 +985,8 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor else (fetch (SPYRECORD NAME) of X]) ) +(RPAQ? \BACKGROUND ) + (RPAQ? SPY.BUTTON ) (RPAQQ SPY.OPEN #*(56 59)@@@@@@@@@@@@@@@@GLOLLC@@@@@@@@@@LFLFLC@@@@@@@@@@LFLFFF@@@@@@@@@@O@LFFF@@GLOL@@@@GLLFCL@@LFLF@@@@ANOLAH@@LFLF@@@@LFL@AH@@LFLF@@@@LFL@AH@@LFLF@@@@LFL@AH@@LFLF@@@@GLL@AH@@GLLF@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IEGOOJ@@@@J@@HJ@@BOONHH@@BA@@@@HKOOOFNJHA@D@@HHBGOKNOEB@@@B@@@EDOMMBIGNJH@I@@@HBONJMEEKE@HA@@ECONMJB@KOOJCE@@@KOOJJHEAONHDJ@@KONJD@@@@AONIE@@GOMJH@@@BMOJEB@@FOB@@D@B@@AOEM@@GODDHA@@@AENMG@@KLH@@D@@@@BONM@@GM@HB@@@@BEFKG@@JJDBH@@@@@@INM@@ODA@DDD@@@BEOG@@@KJOMKB@@@AEEK@@JJEBNLIB@@DEOG@@DKNOKONHDDABFI@@BBKFOOMD@AAEFM@@IEIABEEOD@@@JJ@@EFLJKKGEB@EFEB@@J@@BOOHNHD@AEE@@EEEDONKEJ@EEBJ@@H@IOOOOOIEB@HD@@MDDOOOOMDHIEBJ@@BAOKOOOGONNJ@A@@HBKGOOOOOJKHBE@@DHLKMGMGOONJ@I@@@EMBOOJOOOKHBD@@BKDEOOJAOONJ@B@@BKIBOOHEOOOH@D@@HNDAONJBOJDDAA@@BO@DMGDEGOEB@A@@A@DBFJ@BL@@@@D@@@E@ICMAEOJDH@A@@B@@D@ADI@@@@BD@@HDA@JDBEFHH@@A@@@@@H@IDID@@B@D@@AA@A@@@B@A@@AA@@@@@D@@B@J@@A@A@@@@@H@@@D@@@@@J@@@A@@@D@AB@@@BA@@@@@@@@E@@@@@@D@@HH@@@B@@@@@@@B@@ @@ -958,13 +994,15 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor (RPAQQ SPY.CLOSED #*(56 59)@@@@@@@@@@@@@@@@GLOLLC@@@@CHND@@LFLFLC@@@@FAHA@@LFLFFF@@@@FAH@@@O@LFFF@@GLOKNA@@GLLFCL@@LFFAH@@@ANOLAH@@LFFAHA@@LFL@AH@@LFFAH@@@LFL@AH@@LFFAHJ@@LFL@AH@@LFFAH@@@GLL@AH@@GLFAHB@@@@@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@@@@@IEGOOJ@@@@J@@HJ@@BOONHH@@BA@@@@HKOOOFNJHA@D@@HHBGOKNOEB@@@B@@@EDOMMBIGNJH@I@@@HBONJMEEKE@HA@@ECONMJB@KOOBCE@@@KOOJJHEAOOHDJ@@KONJD@@@@AONIE@@GOMJH@@@BMOJEB@@FOB@@D@B@@AOEM@@GODDHA@@@AENMG@@KLH@@D@@@@BONM@@GM@HB@@@@BEFKG@@JJDBH@@@@@@INM@@ODA@DDD@@@BEOG@@@KJOMKB@@@AEEK@@JJEBNLIB@@DEOG@@DKNOKONHDDABFI@@BBKFOOOD@AAEFM@@IEIABEGND@@@JJ@@EFLLDGGGB@EFEB@@J@@@@@IOHD@AEE@@EEAAEA@FI@EEBJ@@H@HDL@EAME@@HD@@MDEB@NHDJHDABJ@@BAB@@ABICF@J@A@@HB@KDDI@BLI@BE@@DID@A@@JHKDJ@I@@@D@DDDE@EBKEBD@@BAD@@@@A@OED@B@@BHAAAAA@CGNH@D@@H@D@@@@@MOE@AA@@BK@DDDDDGOJJ@A@@B@DA@B@CODFBBD@@EE@HBIAENK@@@A@@BLHBDDDON@@@BD@@KGDHJJIGJHB@@A@@BOBBECGOLB@B@D@@AAMLMKGOH@@@AA@@@GGONNON@H@A@A@@@IKKKKOLJ@@@@J@@@DFOKOO@D@@@BA@@@AEGMMD@A@@@@D@@HHBJMBLA@@@@@B@@ ) - -(DEFGLOBALVAR SPY.POINTERS T) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SPY.OVERFLOWED \PERIODIC.INTERRUPT SPY.TREE SPY.BUFFER.SIZE SPY.NEXT SPY.BUFFER.THRESHOLD SPY.BUFFER SPY.FREQUENCY SPY.SHOW.THRESHOLD SPY.MAXLINES SPY.FONT) ) +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(SPECVARS \BACKGROUND) +) (DECLARE%: EVAL@COMPILE (PUTPROPS WITH-SPY MACRO [(FORM) @@ -1014,19 +1052,18 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor ) (MOVD? 'NILL 'MODERNWINDOW) -(PUTPROPS SPY COPYRIGHT ("Venue & Xerox Corporation" 1984 1985 1987 1988 1990 1991 1993 1994)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4753 7360 (SPYOBJ 4763 . 5052) (SPYOBJ.BUTTON 5054 . 5164) (SPYOBJ.SAVE 5166 . 5285) ( -SPYOBJ.COPY 5287 . 5349) (SPYOBJ.GET 5351 . 5480) (SPYOBJ.IMAGEBOX 5482 . 6006) (SPYOBJ.DISPLAY 6008 - . 6307) (SPYOBJ.LABEL 6309 . 6445) (SPYOBJ.HEIGHT 6447 . 6660) (SPYOBJ.COPYIN 6662 . 6705) ( -SPY.COPYBUTTON 6707 . 6799) (SPY.MERGEINFO 6801 . 7358)) (18202 59509 (SPY.FIND.TREE 18212 . 18621) ( -SPY.TOGGLE 18623 . 18813) (SPY.TREE 18815 . 19927) (SPY.LEGEND 19929 . 20279) (SPY.GRAPH.EDITOR 20281 - . 29846) (SPY.END 29848 . 30090) (SPY.MAKEGRAPHNODES 30092 . 32192) (SPY.MAX 32194 . 33077) ( -SPY.MERGE 33079 . 34510) (SPY.MERGE1 34512 . 40995) (SPY.MERGETREE 40997 . 43927) (SPY.NEXT.TREE 43929 - . 44603) (SPY.SUM 44605 . 45294) (SPY.TITLE 45296 . 45513) (SPY.MAKE.TREE 45515 . 47540) ( -SPY.UPDATE.TITLE 47542 . 50118) (SPY.DELETE 50120 . 50655) (SPY.DRAWBOX 50657 . 51182) ( -SPY.BUFFER.ENTRY 51184 . 51422) (SPY.BUTTON 51424 . 51993) (SPY.END.ENTRY 51995 . 52075) (SPY.START -52077 . 52361) (SPY.INIT 52363 . 52598) (\SPY.INTERRUPT 52600 . 53236) (SPY.DUMP.BUFFER 53238 . 54698) - (SPY.START.ENTRY 54700 . 54828) (SPY.ADD.ENTRY 54830 . 55212) (SPY.ORIGINAL 55214 . 56041) ( -SPY.OVERFLOW 56043 . 56144) (SPY.MERGE.CALLEES 56146 . 59182) (SPY.PRINT 59184 . 59507))))) + (FILEMAP (NIL (4707 7314 (SPYOBJ 4717 . 5006) (SPYOBJ.BUTTON 5008 . 5118) (SPYOBJ.SAVE 5120 . 5239) ( +SPYOBJ.COPY 5241 . 5303) (SPYOBJ.GET 5305 . 5434) (SPYOBJ.IMAGEBOX 5436 . 5960) (SPYOBJ.DISPLAY 5962 + . 6261) (SPYOBJ.LABEL 6263 . 6399) (SPYOBJ.HEIGHT 6401 . 6614) (SPYOBJ.COPYIN 6616 . 6659) ( +SPY.COPYBUTTON 6661 . 6753) (SPY.MERGEINFO 6755 . 7312)) (18156 60387 (SPY.FIND.TREE 18166 . 18575) ( +SPY.TOGGLE 18577 . 18767) (SPY.TREE 18769 . 19881) (SPY.LEGEND 19883 . 20233) (SPY.GRAPH.EDITOR 20235 + . 29800) (SPY.END 29802 . 30044) (SPY.MAKEGRAPHNODES 30046 . 32146) (SPY.MAX 32148 . 33031) ( +SPY.MERGE 33033 . 34464) (SPY.MERGE1 34466 . 40949) (SPY.MERGETREE 40951 . 43881) (SPY.NEXT.TREE 43883 + . 44557) (SPY.SUM 44559 . 45248) (SPY.TITLE 45250 . 45467) (SPY.MAKE.TREE 45469 . 47494) ( +SPY.UPDATE.TITLE 47496 . 50072) (SPY.DELETE 50074 . 50609) (SPY.DRAWBOX 50611 . 51136) ( +SPY.BUFFER.ENTRY 51138 . 51481) (SPY.BUTTON 51483 . 52052) (SPY.END.ENTRY 52054 . 52134) (SPY.START +52136 . 52420) (SPY.INIT 52422 . 52657) (\SPY.INTERRUPT 52659 . 54064) (SPY.DUMP.BUFFER 54066 . 55526) + (SPY.START.ENTRY 55528 . 55656) (SPY.ADD.ENTRY 55658 . 56090) (SPY.ORIGINAL 56092 . 56919) ( +SPY.OVERFLOW 56921 . 57022) (SPY.MERGE.CALLEES 57024 . 60060) (SPY.PRINT 60062 . 60385))))) STOP diff --git a/library/SPY.LCOM b/library/SPY.LCOM index 7bea1f1f..cff2cb33 100644 Binary files a/library/SPY.LCOM and b/library/SPY.LCOM differ diff --git a/lispusers/BACKGROUND-YIELD b/lispusers/BACKGROUND-YIELD index c028b822..00d4ded4 100644 --- a/lispusers/BACKGROUND-YIELD +++ b/lispusers/BACKGROUND-YIELD @@ -1,21 +1,23 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "14-Nov-2021 22:05:58" {DSK}larry>medley>lispusers>BACKGROUND-YIELD.;2 1597 +(FILECREATED "28-Jul-2023 09:49:24" {DSK}larry>il>medley>lispusers>BACKGROUND-YIELD.;2 1770 - changes to%: (VARS BACKGROUND-YIELD) + :EDIT-BY "lmm" - previous date%: "20-Sep-2021 11:37:28" {DSK}larry>medley>lispusers>BACKGROUND-YIELD.;1) + :CHANGES-TO (FNS BACKGROUND-YIELD) + + :PREVIOUS-DATE "14-Nov-2021 22:05:58" {DSK}larry>il>medley>lispusers>BACKGROUND-YIELD.;1 +) (PRETTYCOMPRINT BACKGROUND-YIELDCOMS) (RPAQQ BACKGROUND-YIELDCOMS ( - (* ;; - " Add a call to BACKGROUNDFNS to yield when not otherwise busy") + (* ;; " Add a call to BACKGROUNDFNS to yield when not otherwise busy") - (FNS BACKGROUND-YIELD INIT-YIELD) - (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INIT-YIELD T))) - (VARS BACKGROUND-YIELD))) + (FNS BACKGROUND-YIELD INIT-YIELD) + (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INIT-YIELD T))) + (VARS BACKGROUND-YIELD))) @@ -24,10 +26,13 @@ (DEFINEQ (BACKGROUND-YIELD - [LAMBDA NIL (* ; "Edited 20-Sep-2021 11:37 by larry") - (IF (FIXP BACKGROUND-YIELD) - THEN (SUBRCALL YIELD BACKGROUND-YIELD) - (SUBRCALL CAUSE-INTERRUPT]) + [LAMBDA NIL (* ; "Edited 28-Jul-2023 09:11 by lmm") + (* ; "Edited 20-Sep-2021 11:37 by larry") + (LET ((\BACKGROUND T)) + (DECLARE (SPECVARS \BACKGROUND)) + (IF (FIXP BACKGROUND-YIELD) + THEN (SUBRCALL YIELD BACKGROUND-YIELD) + (SUBRCALL CAUSE-INTERRUPT]) (INIT-YIELD [LAMBDA (ONP) (* ; "Edited 19-Sep-2021 13:32 by larry") @@ -46,5 +51,5 @@ (RPAQQ BACKGROUND-YIELD 833333) (DECLARE%: DONTCOPY - (FILEMAP (NIL (833 1482 (BACKGROUND-YIELD 843 . 1098) (INIT-YIELD 1100 . 1480))))) + (FILEMAP (NIL (806 1655 (BACKGROUND-YIELD 816 . 1271) (INIT-YIELD 1273 . 1653))))) STOP diff --git a/lispusers/BACKGROUND-YIELD.LCOM b/lispusers/BACKGROUND-YIELD.LCOM index d73bd823..3e46012b 100644 Binary files a/lispusers/BACKGROUND-YIELD.LCOM and b/lispusers/BACKGROUND-YIELD.LCOM differ diff --git a/medley b/medley index 86410a1c..4abd64e4 120000 --- a/medley +++ b/medley @@ -1 +1 @@ -scripts/medley/medley.sh \ No newline at end of file +scripts/medley/medley.command \ No newline at end of file diff --git a/run-medley b/run-medley index 88d3c997..05f5c395 100755 --- a/run-medley +++ b/run-medley @@ -202,4 +202,3 @@ echo "greet: $LDEINIT" export INMEDLEY=1 "$prog" $display $noscroll $geometry $screensize $mem -title "$title" $pass "$LDESRCESYSOUT" - diff --git a/scripts/README.md b/scripts/README.md index d4dd7da1..f62e02bb 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -7,18 +7,38 @@ Loading from an old 'starter' sysout * loadup-mid-from-init.sh -- phase 2 (creates init.sysout) * loadup-lisp-from-mid.sh -- phase 3 (creates lisp.sysout) * loadup-full-from-lisp.sh -- phase 4 (creates full.sysout) -* loadup-aux.sh -- phase 5,(creates exports.all whereis.hash +* loadup-apps-from-full.sh -- phase 5 (creates app.sysout, with notecards, rooms and clos; optional) +* loadup-aux.sh -- phase 6 (creates exports.all whereis.hash) +* loadup-db-from-full.sh -- phase 7 (makes unreleased 'fuller.sysout' and fuller.database) -* loadup-full.sh -- Phase 1-4 only +All of these scripts read from and write to a directory specified by the env variable LOADUP_WORKDIR. +LOADUP_WORKDIR defaults to /tmp/loadups-$$ (where $$ is the PID of the script). Note that all /tmp files +are cleared after 10 days or upon system reboot. You can replicate the old work directory scheme +where files were never deleted automatically by simply setting LOADUP_WORKDIR to "./tmp" -* loadup-db.sh -- phase 6 (makes unreleased 'fuller.sysout' and fuller.database -* copy-all.sh -- copy loadups from tmp/ to loadups/ and library/ +* loadup-all.sh [-apps] -- Phases 1-4 & 6 (plus Phase 5 with -apps flag) +* loadup-db.sh -- phase 7 only based on full.syout in loadup directory +These two scripts call the 7 scripts above as specified and then (if successful) copy (ln) the results +to the loadups directory using a versioned copy. The files are hardlinked into loadups from the workdir +if workdir and loadups are on the same filesystem, otherwise they are copied. + +* loadup-full.sh -- Phases 1-4 only, no copy into loadups at the end. + +## releases + +* release-medley.sh -- will create Medley release tars and upload as a release on github. + Arguments: -d to make a draft release. \ to use as a tag for this + release on github (defaults to meldey-\-\). + Both are optional. + +* release-make-tars.sh -- will create the Medley release tars and store them in the releases directory. ## possibly handy scripts * lsee -- show lisp file with font-control-characters rendered as linux color changes -* cpv file1 file2 -- copies file1 to file2 (or directory name) adding versions +* cpv file1 file2 -- hardlinks (or copies) file1 to file2 (or directory name) adding versions + choice of hardlink or copy depends on whether the files are on the same filesystem. * restore-versions.sh -- pulls out old versions from git history and links in with medley versioning conventions ## Not useful anymore diff --git a/scripts/copy-all.sh b/scripts/copy-all.sh index 6dfd8eb9..f04a5e7f 100755 --- a/scripts/copy-all.sh +++ b/scripts/copy-all.sh @@ -1,30 +1,31 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -# was -# cp -p tmp/full.sysout tmp/lisp.sysout tmp/*.dribble tmp/whereis.hash loadups/ -# cp -p tmp/exports.all tmp/RDSYS tmp/RDSYS.LCOM library/ -# just copy the files that are released +. scripts/loadup-setup.sh -./scripts/cpv tmp/init.dribble loadups -./scripts/cpv tmp/lisp.dribble loadups -./scripts/cpv tmp/full.dribble loadups -./scripts/cpv tmp/fuller.dribble loadups -./scripts/cpv tmp/whereis.dribble loadups +echo ">>>>> START ${script_name}" -./scripts/cpv tmp/fuller.database loadups - -./scripts/cpv tmp/full.sysout loadups -./scripts/cpv tmp/lisp.sysout loadups -./scripts/cpv tmp/whereis.hash loadups -./scripts/cpv tmp/exports.all loadups +./scripts/cpv "${LOADUP_WORKDIR}"/full.sysout "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/lisp.sysout "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" if [ "${1}" = "-apps" ]; then - ./scripts/cpv tmp/apps.sysout loadups + ./scripts/cpv "${LOADUP_WORKDIR}"/apps.sysout "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" fi +./scripts/cpv "${LOADUP_WORKDIR}"/whereis.hash "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/exports.all "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" + +./scripts/cpv "${LOADUP_WORKDIR}"/init.dribble "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/lisp.dribble "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/full.dribble "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/whereis.dribble "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" + +./scripts/cpv "${LOADUP_WORKDIR}"/RDSYS library | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/RDSYS.LCOM library | sed -e "s#${MEDLEYDIR}/##g" + +echo "<<<<< END ${script_name}" +echo "" +exit 0 diff --git a/scripts/copy-db.sh b/scripts/copy-db.sh new file mode 100755 index 00000000..77a76b92 --- /dev/null +++ b/scripts/copy-db.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +if [ ! -x run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +. scripts/loadup-setup.sh + +echo ">>>>> START ${script_name}" + +./scripts/cpv "${LOADUP_WORKDIR}"/fuller.database "${LOADUP_OUTDIR}" +./scripts/cpv "${LOADUP_WORKDIR}"/fuller.dribble "${LOADUP_OUTDIR}" + +echo "<<<<< END ${script_name}" +echo "" +exit 0 diff --git a/scripts/cpv b/scripts/cpv index 29fc5604..4d84e663 100755 --- a/scripts/cpv +++ b/scripts/cpv @@ -2,14 +2,19 @@ # cpv file dest # could extend with -r or copying multiple files -# could change from cp to ln + +ln_or_cp () { + f=$(df $(dirname $1) | tail -1 | awk '{ print $1 }') + d=$(df $(dirname $2) | tail -1 | awk '{ print $1 }') + if [ "$f" != "$d" ]; then cmd="cp -p"; else cmd="ln"; fi + echo $cmd +} file="$1" dest="$2" - if [ ! -f "$file" ]; then - echo no such file "$file" + echo "Error: no such file "$file". Exiting." exit 1 fi @@ -18,9 +23,16 @@ if [ -d "$dest" ]; then dest=$dest/`basename $file` fi +# if (the new) $dest is a directory, then just bail +if [ -d "$dest" ]; then + echo "Error: destination file ($dest) is a directory. Exiting." + exit 1 +fi + # if no such file $dest then just copy if [ ! -f "$dest" ]; then - ln $file $dest #WAS cp -p $file $dest + $(ln_or_cp $file $dest) $file $dest + echo "Added $(basename $dest) to $(dirname $dest)" exit 0 fi @@ -41,7 +53,7 @@ if [ $max -eq 0 ]; then # no current versions new=2 else if cmp -q $dest $dest.~$max~ >/dev/null 2>&1 - then # they're different + then # they're different max=`expr $max + 1` # make newer version mv $dest $dest.~$max~ new=`expr $max + 1` @@ -51,11 +63,10 @@ else fi fi -# make new version +# make new version and link it -ln $file $dest.~$new~ # cp -p $file $dest.~$new~ -ln $dest.~$new~ $dest # and link it - - - - +$(ln_or_cp $file $dest.~new~) $file $dest.~$new~ +echo "Added $(basename $dest.~$new~) to $(dirname $dest.~$new~)" +rm -f $dest +ln $dest.~$new~ $dest +echo "Linked $(basename $dest) to $(basename $dest.~$new~) in $(dirname $dest)" diff --git a/scripts/loadup-all.sh b/scripts/loadup-all.sh index c74f3280..5cc8f005 100755 --- a/scripts/loadup-all.sh +++ b/scripts/loadup-all.sh @@ -1,12 +1,12 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi +. scripts/loadup-setup.sh + if [ "$1" = "-apps" ]; then apps="./scripts/loadup-apps-from-full.sh" else @@ -21,7 +21,13 @@ fi ./scripts/loadup-aux.sh && \ ./scripts/copy-all.sh $1 -echo "**** DONE ****" +if [ $? -eq 0 ]; +then + echo "+++++ loadup-all.sh: SUCCESS +++++" +else + echo "----- loadup-all.sh: FAILURE -----" +fi + diff --git a/scripts/loadup-apps-from-full.sh b/scripts/loadup-apps-from-full.sh index e3a48101..86a59d47 100755 --- a/scripts/loadup-apps-from-full.sh +++ b/scripts/loadup-apps-from-full.sh @@ -1,32 +1,14 @@ -#!/bin/bash +#!/bin/sh -#set -x +if [ ! -x run-medley ] ; then + echo must run from MEDLEYDIR ; + exit 1 ; +fi -# function to discover what directory this script is being executed from -where_am_i() { +. scripts/loadup-setup.sh - # call this with ${BASH_SOURCE[0]:-$0} as its (only) parameter +loadup_start - 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 @@ -41,33 +23,35 @@ if [ ! -e ${NOTECARDSDIR} ]; then fi fi -if [ -z "${SYSOUTDIR}" ]; then - export SYSOUTDIR=${MEDLEYDIR}/tmp -fi +cat >"${cmfile}" <<"EOF" +" -if [ -z "${FULLSYSOUTPATH}" ]; then - FULLSYSOUTPATH=${SYSOUTDIR}/full.sysout - if [ ! -e ${FULLSYSOUTPATH} ]; then - FULLSYSOUTPATH=${MEDLEYDIR}/loadups/full.sysout - fi -fi +(PROGN + (IL:MEDLEY-INIT-VARS 'IL:GREET) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE NOTECARDSDIR))(QUOTE |/system/NOTECARDS.LCOM|)) 'IL:SYSLOAD) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE ROOMSDIR))(QUOTE /ROOMS)) 'IL:SYSLOAD) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE CLOSDIR))(QUOTE /DEFSYS.DFASL)) 'IL:SYSLOAD) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |lispusers/BUTTONS.LCOM|)) 'IL:SYSLOAD) + (IL:LOAD + (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_SOURCEDIR)) (QUOTE /LOADUP-APPS.LCOM)) + 'IL:SYSLOAD + ) + (IL:HARDRESET) +) +SHH +(PROGN + (IL:ENDLOADUP) + (CLOS::LOAD-CLOS) + (IL:|Apps.LOADUP|) + (IL:MAKESYS + (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /apps.sysout))) + :APPS) +) +(IL:LOGOUT T) -cd ${MEDLEYDIR} +" +EOF -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 +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}/full.sysout" +loadup_finish "apps.sysout" "apps.*" diff --git a/scripts/loadup-aux.sh b/scripts/loadup-aux.sh index 211accbe..598f6955 100755 --- a/scripts/loadup-aux.sh +++ b/scripts/loadup-aux.sh @@ -1,28 +1,31 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -f run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -mkdir -p tmp -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" +loadup_start -echo '" (IL:MEDLEY-INIT-VARS)(IL:LOAD(QUOTE MEDLEY-UTILS))(IL:MAKE-EXPORTS-ALL)(IL:MAKE-WHEREIS-HASH)(IL:LOGOUT T)"' > tmp/loadup-aux.cm -./run-medley $scr -loadup "$MEDLEYDIR"/tmp/loadup-aux.cm tmp/full.sysout +cat >"${cmfile}" <<"EOF" +" +(PROG + ((WORKDIR (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_WORKDIR)) (QUOTE /)))) + (IL:MEDLEY-INIT-VARS) + (IL:LOAD(QUOTE MEDLEY-UTILS)) + (IL:MAKE-EXPORTS-ALL (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE exports.all)))) + (IL:MAKE-WHEREIS-HASH + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE whereis.dribble))) + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE whereis.hash-tmp))) + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE whereis.hash))) + ) + (IL:LOGOUT T) +) +" +EOF -if [ tmp/whereis.hash -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/whereis.hash tmp/exports.all - echo -------------- +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}"/full.sysout -else - echo XXXXX FAILURE XXXXX - ls -l tmp/whereis.hash tmp/exports.all - exit 1 -fi +loadup_finish "whereis.hash" "whereis.hash" "exports.all" diff --git a/scripts/loadup-db-from-full.sh b/scripts/loadup-db-from-full.sh new file mode 100755 index 00000000..6517fb3e --- /dev/null +++ b/scripts/loadup-db-from-full.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +if [ ! -x run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +. scripts/loadup-setup.sh + +loadup_start + +SYSOUT="${MEDLEYDIR}/loadups/full.sysout" +if [ ! -f "${SYSOUT}" ]; +then + echo "Error: cannot find ${SYSOUT}. Exiting." + exit 1 +fi + +cat >"${cmfile}" <<"EOF" +" + +(PROG + ((WORKDIR (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_WORKDIR)) (QUOTE /)))) + (IL:MEDLEY-INIT-VARS) + (IL:FILESLOAD MEDLEY-UTILS) + (SETQ IL:DIRECTORIES (CONS (IL:UNIX-GETENV (QUOTE LOADUP_SOURCEDIR)) IL:DIRECTORIES)) + (IL:MAKE-FULLER-DB + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.dribble))) + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.database))) + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.sysout))) + ) + (IL:LOGOUT T) +) + +" +EOF + +./run-medley ${scr} -loadup "${cmfile}" "${SYSOUT}" + +loadup_finish "fuller.database" "fuller*" + diff --git a/scripts/loadup-db.sh b/scripts/loadup-db.sh index 4b47839d..d0f89f7a 100755 --- a/scripts/loadup-db.sh +++ b/scripts/loadup-db.sh @@ -1,26 +1,22 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - -if [ ! -f run-medley ] ; then +if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -touch tmp/db.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" - -echo '" (IL:MEDLEY-INIT-VARS)(IL:FILESLOAD MEDLEY-UTILS)(IL:MAKE-FULLER-DB)(IL:LOGOUT T)"' > tmp/db.cm -./run-medley $scr -loadup "$MEDLEYDIR"/tmp/db.cm -n -if [ tmp/fuller.database -nt tmp/db.timestamp ]; then - - echo ---- made ---- - ls -l tmp/fuller* - echo -------------- +./scripts/loadup-db-from-full.sh && ./scripts/copy-db.sh +if [ $? -eq 0 ]; +then + echo "+++++ loadup-db.sh: SUCCESS +++++" else - echo XXXXX FAILURE XXXXX - ls -l tmp/fuller* - exit 1 + echo "----- loadup-db.sh: FAILURE -----" fi + + + + + diff --git a/scripts/loadup-full-from-lisp.sh b/scripts/loadup-full-from-lisp.sh index 14277016..638e839b 100755 --- a/scripts/loadup-full-from-lisp.sh +++ b/scripts/loadup-full-from-lisp.sh @@ -1,25 +1,33 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo must run from MEDLEYDIR ; exit 1 ; fi -scr="-sc 1024x768 -g 1042x790" -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-FULL.CM" "$MEDLEYDIR/tmp/lisp.sysout" +loadup_start -if [ tmp/full.sysout -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/full.* - echo -------------- +cat >"${cmfile}" <<"EOF" +" + +(PROGN + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_SOURCEDIR))(QUOTE /LOADUP-FULL.LCOM))) + (IL:LOADUP-FULL (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.dribble)))) + (IL:HARDRESET) +) +SHH +(PROGN + (IL:ENDLOADUP) + (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.sysout))) :FULL)) + (IL:LOGOUT T) +) + +" +EOF + +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}/lisp.sysout" + +loadup_finish "full.sysout" "full.*" -else - echo XXXXX FAILURE XXXXX - ls -l tmp/full.* - exit 1 -fi diff --git a/scripts/loadup-full.sh b/scripts/loadup-full.sh index a3a06fe1..a49fdd5a 100755 --- a/scripts/loadup-full.sh +++ b/scripts/loadup-full.sh @@ -1,15 +1,14 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo must run from MEDLEYDIR ; exit 1 ; fi +. ./scripts/loadup-setup.sh - ./scripts/loadup-init.sh && \ - ./scripts/loadup-mid-from-init.sh && \ - ./scripts/loadup-lisp-from-mid.sh && \ - ./scripts/loadup-full-from-lisp.sh +./scripts/loadup-init.sh && \ +./scripts/loadup-mid-from-init.sh && \ +./scripts/loadup-lisp-from-mid.sh && \ +./scripts/loadup-full-from-lisp.sh diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index 9d97dc13..5db49820 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -1,26 +1,45 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -f run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -scr="-sc 1024x768 -g 1042x790" +. scripts/loadup-setup.sh -mkdir -p tmp -touch tmp/loadup.timestamp +loadup_start -./run-medley $scr -loadup "$MEDLEYDIR"/sources/LOADUP-INIT.LISP loadups/starter.sysout +cat >"${cmfile}" <<"EOF" +(* "make init files; this file is loaded as a 'greet' file by scripts/loadup-init.sh") -if [ tmp/init.dlinit -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/init.* tmp/RDSYS* tmp/I-NEW* - echo -------------- +(SETQ MEDLEYDIR NIL) +(LOAD (CONCAT (UNIX-GETENV "MEDLEYDIR") "/sources/MEDLEYDIR.LCOM")) +(MEDLEY-INIT-VARS) +(CNDIR (UNIX-GETENV "LOADUP_WORKDIR")) +(DRIBBLE "init.dribble") -else - echo XXXXX FAILURE XXXXX - exit 1 -fi +(UNADVISE) +(ADVISE 'PAGEFULLFN '(RETURN)) +(ADVISE '(ERROR IN \DO-DEFINE-FILE-INFO) '(RETURN)) +(MOVD? 'NILL 'SETTEMPLATE) +(DEFINEQ (RRE (LAMBDA (X Y) Y))) +(MOVD? 'RRE 'READ-READER-ENVIRONMENT) + +(LOAD (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_SOURCEDIR") "/" "MAKEINIT.LCOM")) +(PROG + ((WORKDIR (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") "/")) + (LOADUP-SOURCE-DIR (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_SOURCEDIR") "/")) + ) + (SETQ DIRECTORIES (CONS LOADUP-SOURCE-DIR DIRECTORIES)) + (RESETLST (RESETSAVE OK.TO.MODIFY.FNS T) + (MAKEINITGREET (CONCAT WORKDIR "init.sysout") (CONCAT WORKDIR "init.dlinit")) + ) +) +(DRIBBLE) +(LOGOUT T) +STOP +EOF + +./run-medley $scr -loadup "${cmfile}" "${LOADUP_SOURCEDIR}"/starter.sysout + +loadup_finish "init.dlinit" "init.*" "RDSYS*" "I-NEW*" diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh index 1c84b3e4..6888da26 100755 --- a/scripts/loadup-lisp-from-mid.sh +++ b/scripts/loadup-lisp-from-mid.sh @@ -1,25 +1,34 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -f run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" +loadup_start +cat >"${cmfile}" <<"EOF" +" -./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-LISP.CM" tmp/init-mid.sysout +(PROGN + (LOAD (CONCAT (QUOTE {DSK}) (UNIX-GETENV (QUOTE MEDLEYDIR)) (QUOTE /sources/MEDLEYDIR.LCOM))) + (MEDLEY-INIT-VARS) + (LOAD (CONCAT (QUOTE {DSK}) (UNIX-GETENV (QUOTE LOADUP_SOURCEDIR)) (QUOTE /LOADUP-LISP.LCOM))) + (LOADUP-LISP (CONCAT (QUOTE {DSK}) (UNIX-GETENV (QUOTE LOADUP_WORKDIR)) (QUOTE /lisp.dribble))) + (HARDRESET) +) +SHH +(PROGN + (IL:ENDLOADUP) + (IL:MAKESYS (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR)) (IL:L-CASE (QUOTE /lisp.sysout))) :LISP) + (IL:LOGOUT T) +) -if [ tmp/lisp.sysout -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/lisp.* - echo -------------- -else - echo XXXXX FAILURE XXXXX - exit 1 -fi +" +EOF + +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}/init-mid.sysout" + +loadup_finish "lisp.sysout" "lisp.*" diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index 8208bcda..7efc13e4 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -1,26 +1,26 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -mkdir -p "$MEDLEYDIR/tmp" -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" +loadup_start -./run-medley -prog "ldeinit" -NF -loadup $MEDLEYDIR/sources/XREM.CM $scr -vmem tmp/init-mid.sysout tmp/init.dlinit +cat >"${cmfile}" <<"EOF" +" +(MOVD? (QUOTE NILL) (QUOTE PROMPTPRINT)) +(MOVD? (QUOTE NILL) (QUOTE CURSORP)) +(MOVD? (QUOTE NILL) (QUOTE CHANGEBACKGROUNDBORDER)) +(LOGOUT) +" +EOF +./run-medley -prog "ldeinit" \ + -NF \ + -loadup "${cmfile}" ${scr} -vmem "${LOADUP_WORKDIR}/init-mid.sysout" \ + "${LOADUP_WORKDIR}/init.dlinit" -echo -if [ tmp/loadup.timestamp -nt tmp/init-mid.sysout ]; then - echo XXXXX FAILURE XXXXX - exit 1 -else - echo ---- made ---- - ls -l tmp/init-mid.sysout - echo -------------- -fi +loadup_finish "init-mid.sysout" "init-mid.sysout" diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh new file mode 100644 index 00000000..7f197685 --- /dev/null +++ b/scripts/loadup-setup.sh @@ -0,0 +1,106 @@ + +export MEDLEYDIR=`pwd` + +if [ -z "${LOADUP_WORKDIR}" ]; +then + export LOADUP_WORKDIR=/tmp/loadups-$$ +fi + +if [ -z "${LOADUP_SOURCEDIR}" ]; +then + export LOADUP_SOURCEDIR="${MEDLEYDIR}"/internal/loadups +fi + +if [ -z "${LOADUP_OUTDIR}" ]; +then + export LOADUP_OUTDIR="${MEDLEYDIR}"/loadups +fi + +if [ ! -d "${LOADUP_OUTDIR}" ]; +then + if [ ! -e "${LOADUP_OUTDIR}" ]; + then + mkdir -p "${LOADUP_OUTDIR}" + else + "Error: ${LOADUP_OUTDIR} exists but is not a directory. Exiting." + fi +fi + +if [ ! -d "${LOADUP_WORKDIR}" ]; +then + if [ ! -e "${LOADUP_WORKDIR}" ]; + then + mkdir -p "${LOADUP_WORKDIR}" + else + "Error: ${LOADUP_WORKDIR} exists but is not a directory. Exiting." + fi +fi + + +scr="-sc 1024x768 -g 1042x790" + +touch "${LOADUP_WORKDIR}"/loadup.timestamp + +script_name=$(basename "$0" ".sh") +cmfile="${LOADUP_WORKDIR}/${script_name}.cm" + + +###################################################################### + +loadup_start () { + echo ">>>>> START ${script_name}" + if [ -d "${MEDLEYDIR}/tmp" ]; + then + TMP_PRE_EXISTS="true" + if [ -d "${MEDLEYDIR}/tmp/logindir" ]; + then + LOGINDIR_PRE_EXISTS="true" + else + LOGINDIR_PRE_EXISTS="false" + fi + else + LOGINDIR_PRE_EXISTS="false" + TMP_PRE_EXISTS="false" + fi +} + +loadup_finish () { + local exit_code + rm -f "${cmfile}" + if [ "${LOADUP_WORKDIR}"/loadup.timestamp -nt "${LOADUP_WORKDIR}/${1}" ]; + then + echo "----- FAILURE -----" + exit_code=1 + else + echo "+++++ SUCCESS +++++" + exit_code=0 + fi + echo "..... files created ....." + shift; + for f in ${*}; + do + for ff in $(ls -1 "${LOADUP_WORKDIR}"/$f); + do + if [ "${ff}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; + then + ls -l ${ff} 2>/dev/null | grep -v "^.*~[0-9]\+~$" + fi + done + done + if [ "${TMP_PRE_EXISTS}" = "false" ]; + then + rm -rf "${MEDLEYDIR}/tmp" + else + if [ "${LOGINDIR_PRE_EXISTS}" = "false" ]; + then + rm -rf "${MEDLEYDIR}/tmp/logindir" + fi + fi + echo "<<<<< END ${script_name}" + echo "" + exit ${exit_code} +} + +###################################################################### + + diff --git a/scripts/medley/medley.command b/scripts/medley/medley.command new file mode 100755 index 00000000..6029d9b4 --- /dev/null +++ b/scripts/medley/medley.command @@ -0,0 +1,151 @@ +#!/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 Docker or if not under WSL +# or under Darwin? +# +docker=false +wsl=false +darwin=false + +if [ "$(uname)" = "Darwin" ]; +then + darwin=true +elif [ -n "${MEDLEY_DOCKER_BUILD_DATE}" ]; +then + docker='true' +else + wsl_ver=0 + # WSL2 + grep --ignore-case --quiet wsl /proc/sys/kernel/osrelease + if [ $? -eq 0 ]; + then + wsl='true' + wsl_ver=2 + else + # WSL1 + grep --ignore-case --quiet microsoft /proc/sys/kernel/osrelease + if [ $? -eq 0 ]; + then + if [ $(uname -m) = x86_64 ]; + then + wsl='true' + wsl_ver=1 + else + echo "ERROR: Running Medley on WSL1 requires an x86_64-based PC." + echo "This is not an x86_64-based PC." + echo "Exiting" + exit 23 + fi + else + wsl='false' + fi + fi +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 \" argument to give this new instance a different id." + echo "Exiting" + exit 3 +fi + +# Set 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 [[ ( ${darwin} = true ) || (( ${wsl} = false || ${use_vnc} = false ) && ${docker} = 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 or docker + source ${SCRIPTDIR}/medley_vnc.sh +fi + + + diff --git a/scripts/medley/medley.sh b/scripts/medley/medley.sh deleted file mode 100755 index e8f54761..00000000 --- a/scripts/medley/medley.sh +++ /dev/null @@ -1,142 +0,0 @@ -#!/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 Docker or if not under WSL? -if [ -n "${MEDLEY_DOCKER_BUILD_DATE}" ]; -then - docker='true' - wsl='false' -else - docker='false' - wsl_ver=0 - # WSL2 - grep --ignore-case --quiet wsl /proc/sys/kernel/osrelease - if [ $? -eq 0 ]; - then - wsl='true' - wsl_ver=2 - else - # WSL1 - grep --ignore-case --quiet microsoft /proc/sys/kernel/osrelease - if [ $? -eq 0 ]; - then - if [ $(uname -m) = x86_64 ]; - then - wsl='true' - wsl_ver=1 - else - echo "ERROR: Running Medley on WSL1 requires an x86_64-based PC." - echo "This is not an x86_64-based PC." - echo "Exiting" - exit 23 - fi - else - wsl='false' - fi - fi -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 \" argument to give this new instance a different id." - echo "Exiting" - exit 3 -fi - -# Set 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 ) && ${docker} = 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 or docker - source ${SCRIPTDIR}/medley_vnc.sh -fi - - diff --git a/scripts/medley/medley.sh b/scripts/medley/medley.sh new file mode 120000 index 00000000..a64e11ba --- /dev/null +++ b/scripts/medley/medley.sh @@ -0,0 +1 @@ +medley.command \ No newline at end of file diff --git a/scripts/medley/medley_args.sh b/scripts/medley/medley_args.sh index 7275d0db..6687ad7a 100755 --- a/scripts/medley/medley_args.sh +++ b/scripts/medley/medley_args.sh @@ -140,7 +140,12 @@ do shift ;; -z | --man) - /usr/bin/man -l "${MEDLEYDIR}/docs/man-page/medley.1.gz" + if [ ${darwin} = true ]; + then + /usr/bin/man "${MEDLEYDIR}/docs/man-page/medley.1.gz" + else + /usr/bin/man -l "${MEDLEYDIR}/docs/man-page/medley.1.gz" + fi exit 0 ;; --windows) @@ -155,16 +160,20 @@ do usage "${err_msg[@]}" ;; *) - if [[ $# -eq 1 || "$2" = "--" ]]; + # if matched the empty string, just ignore + if [ -n "$1" ]; 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[@]}" + if [[ $# -eq 1 || "$2" = "--" ]]; + then + sysout_flag=true + sysout_arg="$1" + else + err_msg=( + "ERROR: sysout argument must be last argument" + "or last argument before the \"--\" flag" + ) + usage "${err_msg[@]}" + fi fi ;; esac diff --git a/scripts/release-make-tars.sh b/scripts/release-make-tars.sh new file mode 100755 index 00000000..64fc055c --- /dev/null +++ b/scripts/release-make-tars.sh @@ -0,0 +1,90 @@ +#!/bin/sh + +######### Functions ######## +check_exists () { + f="$1" + if [ -e "${f}" ] + then + echo "${f}" + else + echo "Warning: $f does not exist. $(basename ${f}) will not be included in release tars" 1>&2 + echo " " + fi +} +######## End Functions ####### + + +if [ ! -x run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi +export MEDLEYDIR=`pwd` + +if [ -z "$1" ] ; then + tag=medley-$(date +%y%m%d)-$(date +%s) +else + tag="$1" +fi +short_tag="${tag#medley-}" + +dirname=$(basename "${MEDLEYDIR}") +if [ "${dirname}" = "medley" ] +then + name_xform=" " +else + uname | grep -q -i Linux + if [ $? -eq 0 ] + then + name_xform="--xform s/^${dirname}/medley/" + else + name_xform="-s /^${dirname}/medley/" + fi +fi + +cd .. +release_dir="${dirname}"/releases/"${short_tag}" +mkdir -p "${release_dir}" + +echo making releases/${short_tag}/$tag-loadups.tgz + + +tar -c -z -f "${release_dir}"/$tag-loadups.tgz \ + ${name_xform} \ + "${dirname}"/loadups/lisp.sysout \ + "${dirname}"/loadups/full.sysout \ + $(check_exists "${dirname}/loadups/apps.sysout") \ + "${dirname}"/loadups/*.dribble \ + "${dirname}"/loadups/whereis.hash \ + "${dirname}"/loadups/exports.all \ + $(check_exists "${dirname}/loadups/fuller.database") ; + +echo making releases/${short_tag}/$tag-runtime.tgz + +tar -c -z -f "${release_dir}"/$tag-runtime.tgz \ + --exclude "*~" \ + --exclude "*#*" \ + --exclude exports.all \ + --exclude "venuesysouts" \ + ${name_xform} \ + "${dirname}"/clos \ + "${dirname}"/docs/dinfo \ + "${dirname}"/docs/man-page/medley.1.gz \ + "${dirname}"/doctools \ + "${dirname}"/greetfiles \ + "${dirname}"/rooms \ + "${dirname}"/medley \ + "${dirname}"/run-medley \ + "${dirname}"/scripts \ + "${dirname}"/fonts/displayfonts \ + "${dirname}"/fonts/altofonts \ + "${dirname}"/fonts/adobe \ + "${dirname}"/fonts/postscriptfonts \ + "${dirname}"/fonts/ipfonts \ + "${dirname}"/library \ + "${dirname}"/lispusers \ + "${dirname}"/sources \ + "${dirname}"/internal \ + "${dirname}"/unicode ; + + +echo "Done with release tars" diff --git a/scripts/release-medley.sh b/scripts/release-medley.sh index a4fcf0df..68f5f77f 100755 --- a/scripts/release-medley.sh +++ b/scripts/release-medley.sh @@ -6,48 +6,39 @@ if [ ! -x run-medley ] ; then exit 1 fi -tag=$1 - -if [ -z "$tag" ] ; then - tag=medley-`date +%y%m%d` +if [ -z "$(which gh)" ]; then + echo "Error: this script requires gh (github cli) to be installed. Exiting." + exit 1 fi -cd .. +gh auth status 2>&1 | grep -i -q "Logged in to github.com" +if [ $? -ne 0 ]; then + echo 'Error: this script requires you to be logged into github. Use "gh auth login" to do so. Exiting.' + exit 1 +fi -echo making $tag-loadups.tgz +if [ "$1" = "-d" ]; then + draft="-d" + shift +else + draft="" +fi -tar cfz medley/tmp/$tag-loadups.tgz \ - medley/loadups/lisp.sysout \ - medley/loadups/full.sysout \ - medley/loadups/fuller.database \ - medley/loadups/*.dribble \ - medley/loadups/whereis.hash \ - medley/loadups//exports.all - -echo making $tag-runtime.tgz +if [ -z "$1" ] ; then + tag=medley-$(date +%y%m%d)-$(date +%s) +else + tag="$1" +fi +short_tag="${tag#medley-}" -tar cfz medley/tmp/$tag-runtime.tgz \ - --exclude "*~" --exclude "*#*" \ - medley/docs/dinfo \ - medley/doctools \ - medley/greetfiles \ - medley/rooms \ - medley/run-medley \ - medley/scripts \ - medley/fonts/displayfonts medley/fonts/altofonts \ - medley/fonts/adobe \ - medley/fonts/postscriptfonts \ - medley/library \ - medley/lispusers \ - medley/sources \ - medley/internal - -cd medley +scripts/release-make-tars.sh "${tag}" echo making release -sed s/'$tag'/$tag/g < release-notes.md > tmp/release-notes.md -gh release create $tag -F tmp/release-notes.md -p -t $tag +sed s/'$tag'/$tag/g < release-notes.md > releases/${short_tag}/release-notes.md +gh release create $tag -F releases/${short_tag}/release-notes.md -p -t $tag ${draft} echo uploading -gh release upload $tag tmp/$tag-loadups.tgz tmp/$tag-runtime.tgz --clobber +gh release upload $tag releases/${short_tag}/$tag-loadups.tgz releases/${short_tag}/$tag-runtime.tgz --clobber + +echo "Done with release ${tag}" diff --git a/sources/LLREAD b/sources/LLREAD index 606e9bd1..7733498f 100644 --- a/sources/LLREAD +++ b/sources/LLREAD @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "17-Jun-2023 13:12:06" {WMEDLEY}LLREAD.;104 90176 +(FILECREATED "30-Jul-2023 17:42:27" {WMEDLEY}LLREAD.;105 90277 :EDIT-BY rmk - :CHANGES-TO (VARS LLREADCOMS CHARACTERNAMES) + :CHANGES-TO (FNS \SUBREAD) - :PREVIOUS-DATE "19-Jul-2022 23:36:54" {WMEDLEY}LLREAD.;102) + :PREVIOUS-DATE "17-Jun-2023 13:12:06" {WMEDLEY}LLREAD.;104) (* ; " @@ -629,6 +629,7 @@ Copyright (c) 1981-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation. (\SUBREAD [LAMBDA (STRM SA READTYPE PNSTR CASEBASE EOF-SUPPRESS EOF-VALUE CHAR PRESERVE-WHITESPACE) + (* ; "Edited 30-Jul-2023 17:42 by rmk") (* ; "Edited 19-Jul-2022 23:36 by rmk") (* ; "Edited 6-Aug-2021 21:40 by rmk:") @@ -674,7 +675,7 @@ Copyright (c) 1981-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation. then (* ;  "caller specified eof-error-p of NIL. Happens only on top-level calls") (RETURN EOF-VALUE)) (* ; "By Skipping Separator Characters,Happens CHARSET-Mode Exchanging. (Solution of AR#114 in FX, edited by tt [Jan-22-'90])") - (repeatwhile (EQ [SETQ SNX (\SYNCODE SA (SETQ CH (\INCCODE STRM] + (repeatwhile (EQ [SETQ SNX (\SYNCODE SA (SETQ CH (\INCCODE.EOLC STRM] SEPRCHAR.RC)) (COND ((EQ CH CHAR) (* ; @@ -782,7 +783,7 @@ Copyright (c) 1981-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation. (if (AND EOF-POSSIBILITY (SETQ AT-EOF (\EOFP STRM))) then (* ; "EOF terminates atoms at top level") (GO FINISHATOM) - elseif (EQ [SETQ SNX (\SYNCODE SA (SETQ CH (\INCCODE STRM] + elseif (EQ [SETQ SNX (\SYNCODE SA (SETQ CH (\INCCODE.EOLC STRM] OTHER.RC) then (* ;  "normal case tested first--another vanilla constituent char, so keep accumulating atom chars") @@ -1663,17 +1664,17 @@ Copyright (c) 1981-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation. (PUTPROPS LLREAD COPYRIGHT ("Venue & Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1990 1991 1993 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3460 11904 (LASTC 3470 . 3776) (PEEKC 3778 . 4166) (PEEKCCODE 4168 . 4579) (RATOM 4581 - . 5662) (READ 5664 . 6224) (READC 6226 . 6867) (READCCODE 6869 . 7628) (READP 7630 . 8182) ( -SETREADMACROFLG 8184 . 8483) (SKIPSEPRCODES 8485 . 9565) (SKIPSEPRS 9567 . 9953) (SKREAD 9955 . 11902) -) (11950 20559 (CL:READ 11960 . 12509) (CL:READ-PRESERVING-WHITESPACE 12511 . 13233) ( -CL:READ-DELIMITED-LIST 13235 . 14150) (CL:PARSE-INTEGER 14152 . 20557)) (20652 33129 (RSTRING 20662 . -21394) (READ-EXTENDED-TOKEN 21396 . 25268) (\RSTRING2 25270 . 33127)) (33165 63779 (\TOP-LEVEL-READ -33175 . 35158) (\SUBREAD 35160 . 60195) (\SUBREADCONCAT 60197 . 60820) (\ORIG-READ.SYMBOL 60822 . -61890) (\ORIG-INVALID.SYMBOL 61892 . 62791) (\APPLYREADMACRO 62793 . 63209) (INREADMACROP 63211 . -63777)) (63938 64113 (READQUOTE 63948 . 64111)) (64138 76042 (READVBAR 64148 . 65479) (READHASHMACRO -65481 . 71291) (DEFMACRO-LAMBDA-LIST-KEYWORD-P 71293 . 71513) (DIGITBASEP 71515 . 72249) ( -READNUMBERINBASE 72251 . 74137) (ESTIMATE-DIMENSIONALITY 74139 . 74464) (SKIP.HASH.COMMENT 74466 . -75434) (CMLREAD.FEATURE.PARSER 75436 . 76040)) (76086 82430 (CHARACTER.READ 76096 . 77350) ( -CHARCODE.DECODE 77352 . 82428)) (82431 85601 (HEXNUM? 82441 . 84784) (OCTALNUM? 84786 . 85599))))) + (FILEMAP (NIL (3442 11886 (LASTC 3452 . 3758) (PEEKC 3760 . 4148) (PEEKCCODE 4150 . 4561) (RATOM 4563 + . 5644) (READ 5646 . 6206) (READC 6208 . 6849) (READCCODE 6851 . 7610) (READP 7612 . 8164) ( +SETREADMACROFLG 8166 . 8465) (SKIPSEPRCODES 8467 . 9547) (SKIPSEPRS 9549 . 9935) (SKREAD 9937 . 11884) +) (11932 20541 (CL:READ 11942 . 12491) (CL:READ-PRESERVING-WHITESPACE 12493 . 13215) ( +CL:READ-DELIMITED-LIST 13217 . 14132) (CL:PARSE-INTEGER 14134 . 20539)) (20634 33111 (RSTRING 20644 . +21376) (READ-EXTENDED-TOKEN 21378 . 25250) (\RSTRING2 25252 . 33109)) (33147 63880 (\TOP-LEVEL-READ +33157 . 35140) (\SUBREAD 35142 . 60296) (\SUBREADCONCAT 60298 . 60921) (\ORIG-READ.SYMBOL 60923 . +61991) (\ORIG-INVALID.SYMBOL 61993 . 62892) (\APPLYREADMACRO 62894 . 63310) (INREADMACROP 63312 . +63878)) (64039 64214 (READQUOTE 64049 . 64212)) (64239 76143 (READVBAR 64249 . 65580) (READHASHMACRO +65582 . 71392) (DEFMACRO-LAMBDA-LIST-KEYWORD-P 71394 . 71614) (DIGITBASEP 71616 . 72350) ( +READNUMBERINBASE 72352 . 74238) (ESTIMATE-DIMENSIONALITY 74240 . 74565) (SKIP.HASH.COMMENT 74567 . +75535) (CMLREAD.FEATURE.PARSER 75537 . 76141)) (76187 82531 (CHARACTER.READ 76197 . 77451) ( +CHARCODE.DECODE 77453 . 82529)) (82532 85702 (HEXNUM? 82542 . 84885) (OCTALNUM? 84887 . 85700))))) STOP diff --git a/sources/LLREAD.LCOM b/sources/LLREAD.LCOM index 7783332c..d2947fa3 100644 Binary files a/sources/LLREAD.LCOM and b/sources/LLREAD.LCOM differ diff --git a/sources/LOADUP-APPS.CM b/sources/LOADUP-APPS.CM deleted file mode 100644 index d41a71c3..00000000 --- a/sources/LOADUP-APPS.CM +++ /dev/null @@ -1 +0,0 @@ -" (PROGN (IL:MEDLEY-INIT-VARS 'IL:GREET) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE NOTECARDSDIR))(QUOTE |/system/NOTECARDS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE ROOMSDIR))(QUOTE /ROOMS)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE CLOSDIR))(QUOTE /DEFSYS.DFASL)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |lispusers/BUTTONS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |/sources/LOADUP-APPS.LCOM|)) 'IL:SYSLOAD ) (IL:HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) (CLOS::LOAD-CLOS) (IL:|Apps.LOADUP|) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE SYSOUTDIR))(IL:L-CASE (QUOTE /apps.sysout))) :APPS) ) (IL:LOGOUT T) " \ No newline at end of file diff --git a/sources/LOADUP-FULL.CM b/sources/LOADUP-FULL.CM deleted file mode 100644 index 5f13dad3..00000000 --- a/sources/LOADUP-FULL.CM +++ /dev/null @@ -1 +0,0 @@ -" (PROGN(IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM)))(IL:LOADUP-FULL)(IL:HARDRESET)) SHH(PROGN(IL:ENDLOADUP)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(IL:L-CASE (QUOTE /tmp/full.sysout))) :FULL)) (IL:LOGOUT T) " \ No newline at end of file diff --git a/sources/LOADUP-INIT.LISP b/sources/LOADUP-INIT.LISP deleted file mode 100644 index 31cb03b3..00000000 --- a/sources/LOADUP-INIT.LISP +++ /dev/null @@ -1,19 +0,0 @@ -(* "make init files; this file is loaded as a 'greet' file by scripts/loadup-init.sh") - -(LOAD (CONCAT (UNIX-GETENV "MEDLEYDIR") "/sources/MEDLEYDIR.LCOM")) -(CNDIR (MEDLEYDIR "tmp")) -(DRIBBLE "init.dribble") - -(UNADVISE) -(ADVISE 'PAGEFULLFN '(RETURN)) -(ADVISE '(ERROR IN \DO-DEFINE-FILE-INFO) '(RETURN)) -(MOVD? 'NILL 'SETTEMPLATE) -(DEFINEQ (RRE (LAMBDA (X Y) Y))) -(MOVD? 'RRE 'READ-READER-ENVIRONMENT) - -(LOAD (MEDLEYDIR "sources" "MAKEINIT.LCOM")) -(MAKEINITGREET) -(DRIBBLE) -(LOGOUT T) -STOP - diff --git a/sources/LOADUP-LISP.CM b/sources/LOADUP-LISP.CM deleted file mode 100644 index 641c5f83..00000000 --- a/sources/LOADUP-LISP.CM +++ /dev/null @@ -1 +0,0 @@ -" (PROGN(LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM)))(LOADUP-LISP)(HARDRESET)) SHH(PROGN(IL:ENDLOADUP)':MEDLEY)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(IL:L-CASE (QUOTE /tmp/lisp.sysout))))) (IL:LOGOUT T) " \ No newline at end of file diff --git a/sources/LOADUP-LISP.LCOM b/sources/LOADUP-LISP.LCOM deleted file mode 100644 index 8e01adf6..00000000 Binary files a/sources/LOADUP-LISP.LCOM and /dev/null differ diff --git a/sources/MAKEINIT.LCOM b/sources/MAKEINIT.LCOM deleted file mode 100644 index 9342cf53..00000000 Binary files a/sources/MAKEINIT.LCOM and /dev/null differ diff --git a/sources/PROC b/sources/PROC index af933e05..e4be1032 100644 --- a/sources/PROC +++ b/sources/PROC @@ -1,18 +1,14 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "17-Jun-99 21:58:52" {DSK}medley3.5>sources>PROC.;2 173526 - changes to%: (RECORDS MONITORLOCK) +(FILECREATED "29-Jul-2023 11:47:41" {DSK}larry>il>medley>sources>PROC.;7 176222 - previous date%: "31-Jan-98 18:03:02" {DSK}medley3.5>sources>PROC.;1) + :EDIT-BY "lmm" + :CHANGES-TO (VARS PROCCOMS) + (FNS \BACKGROUND.PROCESS) + + :PREVIOUS-DATE "28-Jul-2023 21:06:03" {DSK}larry>il>medley>sources>PROC.;6) -(* ; " -Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1991, 1992, 1993, 1998, 1999 by Venue & Xerox Corporation. All rights reserved. -The following program was created in 1982 but has not been published -within the meaning of the copyright law, is furnished under license, -and may not be used, copied and/or disclosed except in accordance -with the terms of said license. -") (PRETTYCOMPRINT PROCCOMS) @@ -22,7 +18,7 @@ with the terms of said license. (CONSTANTS \PSTAT.WAITING \PSTAT.RUNNING \PSTAT.DELETED)) (INITRECORDS PROCESS PROCESSQUEUE) (SYSRECORDS PROCESS PROCESSQUEUE)) - [COMS (* ; "User entries") + [COMS (* ; "User entries") (FNS PROCESSWORLD ADD.PROCESS DEL.PROCESS PROCESS.RETURN FIND.PROCESS MAP.PROCESSES PROCESSP RELPROCESSP RESTART.PROCESS WAKE.PROCESS SUSPEND.PROCESS PROCESS.RESULT PROCESS-STATUS PROCESS.FINISHEDP) @@ -37,27 +33,27 @@ with the terms of said license. (GLOBALVARS TTY.PROCESS.DEFAULT \TTY.PROCESS.EVENT \PROCESS.NAME.TABLE) (FNS PROCESSPROP PROCESS.NAME PROCESS.WINDOW) (PROP ARGNAMES PROCESSPROP ADD.PROCESS) - (COMS (* ; "Temporary") + (COMS (* ; "Temporary") (P (MOVD? 'PROCESS.RETURN 'KILL.ME NIL T] (COMS (FNS DISMISS BLOCK WAITFORINPUT \WAITFORSYSBUFP) - (* ; "Used to be a GLOBALRESOURCES") + (* ; "Used to be a GLOBALRESOURCES") (DECLARE%: DONTCOPY (RESOURCES \DISMISSTIMER)) (INITRESOURCES \DISMISSTIMER)) (COMS (FNS EVAL.AS.PROCESS EVAL.IN.TTY.PROCESS) - (* ;; "The PROCESS.WAIT macro is an augmentation to BLOCK, waiting for a condition to come true, or a timeout, or a wakeup") + (* ;; "The PROCESS.WAIT macro is an augmentation to BLOCK, waiting for a condition to come true, or a timeout, or a wakeup") (MACROS PROCESS.WAIT) (FNS PROCESS.READ PROCESS.EVALV PROCESS.EVAL \PROCESS.EVAL1 PROCESS.APPLY \PROCESS.APPLY1) - (* ; - "Standard values for WAKEREASON -- PSTAT.TIMEDOUT is the only public one") + (* ; + "Standard values for WAKEREASON -- PSTAT.TIMEDOUT is the only public one") (VARS (PSTAT.WAKEUP "default WakeUp") (PSTAT.TIMEDOUT "{time interval expired}") (PSTAT.QUIT "Quit") (\PSTAT.NORESULT "{no result yet}")) (GLOBALVARS PSTAT.WAKEUP PSTAT.TIMEDOUT PSTAT.QUIT \PSTAT.NORESULT)) - (COMS (* ; "Event stuff") + (COMS (* ; "Event stuff") (DECLARE%: DONTCOPY (RECORDS EVENT)) (INITRECORDS EVENT) (SYSRECORDS EVENT) @@ -66,7 +62,7 @@ with the terms of said license. (MACROS AWAIT.CONDITION) (INITVARS (\PROCESS.AFTEREXIT.EVENT)) (GLOBALVARS \PROCESS.AFTEREXIT.EVENT)) - (COMS (* ; "Monitor stuff") + (COMS (* ; "Monitor stuff") (DECLARE%: DONTCOPY (RECORDS MONITORLOCK) (MACROS .RELEASE.LOCK.)) (INITRECORDS MONITORLOCK) @@ -74,7 +70,11 @@ with the terms of said license. (FNS OBTAIN.MONITORLOCK CREATE.MONITORLOCK RELEASE.MONITORLOCK SI::MONITOR-UNWIND MONITOR.AWAIT.EVENT \MONITORLOCK.DEFPRINT) (MACROS WITH.MONITOR WITH.FAST.MONITOR)) - (COMS (FNS \MAKE.PROCESS0 \MAKE.PROCESS1 \PROCESS.MOVEFRAME \RELEASE.PROCESS \UNWIND.PROCESS + (COMS (EXPORT (SPECVARS \BACKGROUND) + (GLOBALVARS \IGNORE.BACKGROUND)) + (INITVARS (\BACKGROUND NIL) + (\IGNORE.BACKGROUND T)) + (FNS \MAKE.PROCESS0 \MAKE.PROCESS1 \PROCESS.MOVEFRAME \RELEASE.PROCESS \UNWIND.PROCESS \MAYBEBLOCK \BACKGROUND.PROCESS \MOUSE.PROCESS \TIMER.PROCESS \PROCESS.RELEASE.LOCKS \SET.PROCESS.NAME \PROCESS.DEFPRINT) (FNS \START.PROCESSES \PROCESS.GO.TO.SLEEP \PROC.RESUME \RUN.PROCESS \SUSPEND.PROCESS @@ -82,9 +82,9 @@ with the terms of said license. (DECLARE%: DONTCOPY (MACROS \RESCHEDULE))) (COMS (FNS \PROCESS.INIT \PROCESS.EVENTFN \PROCESS.BEFORE.LOGOUT \PROCESS.AFTER.EXIT \PROCESS.RESET.TIMERS \PROC.AFTER.WINDOWWORLD \TURN.ON.PROCESSES) - (* ; "Redefinitions") + (* ; "Redefinitions") (FNS \PROC.CODEFORTFRAME \PROC.REPEATEDLYEVALQT)) - (COMS (* ; "switching stacks") + (COMS (* ; "switching stacks") (FNS BREAK.PROCESS \SELECTPROCESS \PROCESS.MAKEFRAME \PROCESS.MAKEFRAME0)) (INITVARS (%#MYHANDLE#) (%#SCHEDULER#) @@ -117,7 +117,7 @@ with the terms of said license. PROC.DEFAULT.PRIORITY \PROC.RUN.NEXT.FLG \SYSTEMTIMERVARS) (MACROS ALIVEPROCP DEADPROCP \COERCE.TO.PROCESS) (LOCALVARS . T))) - (COMS (* ; "Debugging") + (COMS (* ; "Debugging") (FNS \CHECK.PQUEUE) (FNS PPROC PPROCWINDOW PPROCREPAINTFN PPROCRESHAPEFN PPROCEXTENT PPROC1 PROCESS.STATUS.WINDOW \PSW.SELECTED \PSWOP.SELECTED PROCESS.BACKTRACE @@ -139,8 +139,8 @@ with the terms of said license. (P (DEFPRINT 'PROCESS (FUNCTION \PROCESS.DEFPRINT)) (DEFPRINT 'EVENT (FUNCTION \EVENT.DEFPRINT)) (DEFPRINT 'MONITORLOCK (FUNCTION \MONITORLOCK.DEFPRINT)) - (* ; - "\process.init must come last, since it does a HARDRESET") + (* ; + "\process.init must come last, since it does a HARDRESET") (\PROCESS.INIT))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) @@ -149,80 +149,80 @@ with the terms of said license. (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE -(DATATYPE PROCESS ((PROCFX0 WORD) (* ; - "= \STACKHI to make this look like a STACKP") - (PROCFX WORD) (* ; - "Stack pointer to this context when it is asleep") - (PROCSTATUS BYTE) (* ; "Running or waiting") - (PROCNAME POINTER) (* ; - "Name for convenience in type-in reference") - (PROCPRIORITY BYTE) (* ; - "Priority level, 0-4. Not currently used.") - (PROCQUEUE POINTER) (* ; - "Queue of processes at the same priority") - (NIL BYTE) - (NEXTPROCHANDLE POINTER) (* ; "Pointer to next one") - (PROCTIMERSET FLAG) (* ; - "True if PROCWAKEUPTIMER has an interesting value") - (PROCBEINGDELETED FLAG) (* ; - "True if proc was deleted, but hasn't been removed from \PROCESSES yet") - (PROCDELETED FLAG) - (PROCSYSTEMP FLAG) - (PROCNEVERSTARTED FLAG) - (NIL FLAG) - (NIL FLAG) - (NIL FLAG) - (PROCWAKEUPTIMER POINTER) (* ; - "a largep recording the time this proc last went to sleep") - (PROCTIMERLINK POINTER) (* ; "For linking proc in timer queue") - (PROCTIMERBOX POINTER) (* ; - "Scratch box to use for PROCWAKEUPTIMER when user does not give one explicitly") - (WAKEREASON POINTER) (* ; - "Reason process is being run. From WAKE.PROCESS or timer or event wakeup; T from simple BLOCK") - (PROCEVENTORLOCK POINTER) (* ; - "EVENT or MONITOR lock that this proc is waiting for") - (PROCFORM POINTER) (* ; "Form to EVAL to start it going") - (RESTARTABLE POINTER) (* ; - "T = autorestart on error, HARDRESET = restart only on hard reset, NIL = never restart") - (PROCWINDOW POINTER) (* ; - "Window this process lives in, if any") - (PROCFINISHED POINTER) (* ; - "True if proc finished. Value is indication of how: NORMAL, DELETED, ERROR") - (PROCRESULT POINTER) (* ; - "Value it returned if it finished normally") - (PROCFINISHEVENT POINTER) (* ; - "Optional EVENT to be notified when proc finishes") - (PROCMAILBOX POINTER) (* ; "Message queue") - (PROCDRIBBLEOUTPUT POINTER) (* ; - "Binding for *DRIBBLE-OUTPUT* in this process") - (PROCINFOHOOK POINTER) (* ; - "Optional user fn that displays info about process") - (PROCTYPEAHEAD POINTER) (* ; - "Buffer of typeahead destined for this proc") - (PROCREMOTEINFO POINTER) (* ; "For Enterprise") - (PROCUSERDATA POINTER) (* ; "For PROCESSPROP") - (PROCEVENTLINK POINTER) (* ; "Used to maintain EVENT queues") - (PROCAFTEREXIT POINTER) (* ; - "What to do with this process when coming back from a LOGOUT, etc") - (PROCBEFOREEXIT POINTER) (* ; "If DON'T, can't logout") - (PROCOWNEDLOCKS POINTER) (* ; - "Pointer to first lock I currently own") - (PROCEVAPPLYRESULT POINTER) (* ; - "For PROCESS.EVAL and PROCESS.APPLY when WAITFORRESULT is true") - (PROCTTYENTRYFN POINTER) (* ; - "Is applied to a process when it becomes the tty process") - (PROCTTYEXITFN POINTER) (* ; - "Is applied to a process when it ceases to be the tty process") - (PROCHARDRESETINFO POINTER) (* ; - "HARDRESET stores info about unwind-protect cleanups here") - (PROCRESTARTFORM POINTER) (* ; - "use this instead of PROCFORM when restarting") - (PROCOLDTTYPROC POINTER) (* ; - "Process that had the tty when we got it") - (NIL POINTER) (* ; "For expansion") - ) - PROCTIMERBOX _ (CREATECELL \FIXP) - PROCFX0 _ \STACKHI) +(DATATYPE PROCESS ((PROCFX0 WORD) (* ; + "= \STACKHI to make this look like a STACKP") + (PROCFX WORD) (* ; + "Stack pointer to this context when it is asleep") + (PROCSTATUS BYTE) (* ; "Running or waiting") + (PROCNAME POINTER) (* ; + "Name for convenience in type-in reference") + (PROCPRIORITY BYTE) (* ; + "Priority level, 0-4. Not currently used.") + (PROCQUEUE POINTER) (* ; + "Queue of processes at the same priority") + (NIL BYTE) + (NEXTPROCHANDLE POINTER) (* ; "Pointer to next one") + (PROCTIMERSET FLAG) (* ; + "True if PROCWAKEUPTIMER has an interesting value") + (PROCBEINGDELETED FLAG) (* ; + "True if proc was deleted, but hasn't been removed from \PROCESSES yet") + (PROCDELETED FLAG) + (PROCSYSTEMP FLAG) + (PROCNEVERSTARTED FLAG) + (NIL FLAG) + (NIL FLAG) + (NIL FLAG) + (PROCWAKEUPTIMER POINTER) (* ; + "a largep recording the time this proc last went to sleep") + (PROCTIMERLINK POINTER) (* ; "For linking proc in timer queue") + (PROCTIMERBOX POINTER) (* ; + "Scratch box to use for PROCWAKEUPTIMER when user does not give one explicitly") + (WAKEREASON POINTER) (* ; + "Reason process is being run. From WAKE.PROCESS or timer or event wakeup; T from simple BLOCK") + (PROCEVENTORLOCK POINTER) (* ; + "EVENT or MONITOR lock that this proc is waiting for") + (PROCFORM POINTER) (* ; "Form to EVAL to start it going") + (RESTARTABLE POINTER) (* ; + "T = autorestart on error, HARDRESET = restart only on hard reset, NIL = never restart") + (PROCWINDOW POINTER) (* ; + "Window this process lives in, if any") + (PROCFINISHED POINTER) (* ; + "True if proc finished. Value is indication of how: NORMAL, DELETED, ERROR") + (PROCRESULT POINTER) (* ; + "Value it returned if it finished normally") + (PROCFINISHEVENT POINTER) (* ; + "Optional EVENT to be notified when proc finishes") + (PROCMAILBOX POINTER) (* ; "Message queue") + (PROCDRIBBLEOUTPUT POINTER) (* ; + "Binding for *DRIBBLE-OUTPUT* in this process") + (PROCINFOHOOK POINTER) (* ; + "Optional user fn that displays info about process") + (PROCTYPEAHEAD POINTER) (* ; + "Buffer of typeahead destined for this proc") + (PROCREMOTEINFO POINTER) (* ; "For Enterprise") + (PROCUSERDATA POINTER) (* ; "For PROCESSPROP") + (PROCEVENTLINK POINTER) (* ; "Used to maintain EVENT queues") + (PROCAFTEREXIT POINTER) (* ; + "What to do with this process when coming back from a LOGOUT, etc") + (PROCBEFOREEXIT POINTER) (* ; "If DON'T, can't logout") + (PROCOWNEDLOCKS POINTER) (* ; + "Pointer to first lock I currently own") + (PROCEVAPPLYRESULT POINTER) (* ; + "For PROCESS.EVAL and PROCESS.APPLY when WAITFORRESULT is true") + (PROCTTYENTRYFN POINTER) (* ; + "Is applied to a process when it becomes the tty process") + (PROCTTYEXITFN POINTER) (* ; + "Is applied to a process when it ceases to be the tty process") + (PROCHARDRESETINFO POINTER) (* ; + "HARDRESET stores info about unwind-protect cleanups here") + (PROCRESTARTFORM POINTER) (* ; + "use this instead of PROCFORM when restarting") + (PROCOLDTTYPROC POINTER) (* ; + "Process that had the tty when we got it") + (NIL POINTER) (* ; "For expansion") + ) + PROCTIMERBOX _ (CREATECELL \FIXP) + PROCFX0 _ \STACKHI) ) (/DECLAREDATATYPE 'PROCESS @@ -281,15 +281,15 @@ with the terms of said license. (DECLARE%: EVAL@COMPILE -(DATATYPE PROCESSQUEUE ((PQPRIORITY BYTE) (* ; - "Priority for the processes in thie queue.") - (PQHIGHER POINTER) (* ; "Next higher-prioirty queue") - (PQLOWER POINTER) (* ; "Next lower") - (PQNEXT POINTER) (* ; - "The process currently running or runnable at this priority") - (PQLAST POINTER) (* ; - "The proc previous to it. PQNEXT might be redundant") - )) +(DATATYPE PROCESSQUEUE ((PQPRIORITY BYTE) (* ; + "Priority for the processes in thie queue.") + (PQHIGHER POINTER) (* ; "Next higher-prioirty queue") + (PQLOWER POINTER) (* ; "Next lower") + (PQNEXT POINTER) (* ; + "The process currently running or runnable at this priority") + (PQLAST POINTER) (* ; + "The proc previous to it. PQNEXT might be redundant") + )) ) (/DECLAREDATATYPE 'PROCESSQUEUE '(BYTE POINTER POINTER POINTER POINTER) @@ -374,55 +374,55 @@ with the terms of said license. (ADDTOVAR SYSTEMRECLST (DATATYPE PROCESS ((PROCFX0 WORD) - (PROCFX WORD) - (PROCSTATUS BYTE) - (PROCNAME POINTER) - (PROCPRIORITY BYTE) - (PROCQUEUE POINTER) - (NIL BYTE) - (NEXTPROCHANDLE POINTER) - (PROCTIMERSET FLAG) - (PROCBEINGDELETED FLAG) - (PROCDELETED FLAG) - (PROCSYSTEMP FLAG) - (PROCNEVERSTARTED FLAG) - (NIL FLAG) - (NIL FLAG) - (NIL FLAG) - (PROCWAKEUPTIMER POINTER) - (PROCTIMERLINK POINTER) - (PROCTIMERBOX POINTER) - (WAKEREASON POINTER) - (PROCEVENTORLOCK POINTER) - (PROCFORM POINTER) - (RESTARTABLE POINTER) - (PROCWINDOW POINTER) - (PROCFINISHED POINTER) - (PROCRESULT POINTER) - (PROCFINISHEVENT POINTER) - (PROCMAILBOX POINTER) - (PROCDRIBBLEOUTPUT POINTER) - (PROCINFOHOOK POINTER) - (PROCTYPEAHEAD POINTER) - (PROCREMOTEINFO POINTER) - (PROCUSERDATA POINTER) - (PROCEVENTLINK POINTER) - (PROCAFTEREXIT POINTER) - (PROCBEFOREEXIT POINTER) - (PROCOWNEDLOCKS POINTER) - (PROCEVAPPLYRESULT POINTER) - (PROCTTYENTRYFN POINTER) - (PROCTTYEXITFN POINTER) - (PROCHARDRESETINFO POINTER) - (PROCRESTARTFORM POINTER) - (PROCOLDTTYPROC POINTER) - (NIL POINTER))) + (PROCFX WORD) + (PROCSTATUS BYTE) + (PROCNAME POINTER) + (PROCPRIORITY BYTE) + (PROCQUEUE POINTER) + (NIL BYTE) + (NEXTPROCHANDLE POINTER) + (PROCTIMERSET FLAG) + (PROCBEINGDELETED FLAG) + (PROCDELETED FLAG) + (PROCSYSTEMP FLAG) + (PROCNEVERSTARTED FLAG) + (NIL FLAG) + (NIL FLAG) + (NIL FLAG) + (PROCWAKEUPTIMER POINTER) + (PROCTIMERLINK POINTER) + (PROCTIMERBOX POINTER) + (WAKEREASON POINTER) + (PROCEVENTORLOCK POINTER) + (PROCFORM POINTER) + (RESTARTABLE POINTER) + (PROCWINDOW POINTER) + (PROCFINISHED POINTER) + (PROCRESULT POINTER) + (PROCFINISHEVENT POINTER) + (PROCMAILBOX POINTER) + (PROCDRIBBLEOUTPUT POINTER) + (PROCINFOHOOK POINTER) + (PROCTYPEAHEAD POINTER) + (PROCREMOTEINFO POINTER) + (PROCUSERDATA POINTER) + (PROCEVENTLINK POINTER) + (PROCAFTEREXIT POINTER) + (PROCBEFOREEXIT POINTER) + (PROCOWNEDLOCKS POINTER) + (PROCEVAPPLYRESULT POINTER) + (PROCTTYENTRYFN POINTER) + (PROCTTYEXITFN POINTER) + (PROCHARDRESETINFO POINTER) + (PROCRESTARTFORM POINTER) + (PROCOLDTTYPROC POINTER) + (NIL POINTER))) (DATATYPE PROCESSQUEUE ((PQPRIORITY BYTE) - (PQHIGHER POINTER) - (PQLOWER POINTER) - (PQNEXT POINTER) - (PQLAST POINTER))) + (PQHIGHER POINTER) + (PQLOWER POINTER) + (PQNEXT POINTER) + (PQLAST POINTER))) ) @@ -1064,7 +1064,7 @@ with the terms of said license. (RPAQ? \TTY.PROCESS ) (RPAQ? \PROCESS.NAME.TABLE (HASHARRAY 30 NIL (FUNCTION STRING-EQUAL-HASHBITS) - (FUNCTION STRING-EQUAL))) + (FUNCTION STRING-EQUAL))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS TTY.PROCESS.DEFAULT \TTY.PROCESS.EVENT \PROCESS.NAME.TABLE) @@ -1302,14 +1302,12 @@ with the terms of said license. (DECLARE%: EVAL@COMPILE -(PUTPROPS PROCESS.WAIT MACRO - [(WAITCOND TIMEOUT) - (bind ($$TIMEOUT _ (AND TIMEOUT (SETUPTIMER TIMEOUT))) until (AND $$TIMEOUT ( - TIMEREXPIRED? - $$TIMEOUT)) - do (if (SETQ $$VAL WAITCOND) - then (RETURN $$VAL) - else (BLOCK]) +(PUTPROPS PROCESS.WAIT MACRO [(WAITCOND TIMEOUT) + (bind ($$TIMEOUT _ (AND TIMEOUT (SETUPTIMER TIMEOUT))) + until (AND $$TIMEOUT (TIMEREXPIRED? $$TIMEOUT)) + do (if (SETQ $$VAL WAITCOND) + then (RETURN $$VAL) + else (BLOCK]) ) (DEFINEQ @@ -1452,20 +1450,19 @@ with the terms of said license. (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE -(DATATYPE EVENT ((EVENTWAKEUPPENDING FLAG) (* ; - "True if this event was signaled with nobody waiting on it") - (NIL BITS 3) - (EVENTQUEUETAIL POINTER) (* ; - "Pointer to last process waiting on this event") - (EVENTNAME POINTER) (* ; - "Optional name of EVENT for status window, debugging, etc") - ) - (ACCESSFNS EVENT ((EVLOCKQUEUETAIL (ffetch EVENTQUEUETAIL of DATUM) - (freplace EVENTQUEUETAIL of DATUM with - NEWVALUE))) - (* ; - "Used by both EVENT and MONITORLOCK data") - )) +(DATATYPE EVENT ((EVENTWAKEUPPENDING FLAG) (* ; + "True if this event was signaled with nobody waiting on it") + (NIL BITS 3) + (EVENTQUEUETAIL POINTER) (* ; + "Pointer to last process waiting on this event") + (EVENTNAME POINTER) (* ; + "Optional name of EVENT for status window, debugging, etc") + ) + (ACCESSFNS EVENT ((EVLOCKQUEUETAIL (ffetch EVENTQUEUETAIL of DATUM) + (freplace EVENTQUEUETAIL of DATUM with NEWVALUE))) + (* ; + "Used by both EVENT and MONITORLOCK data") + )) ) (/DECLAREDATATYPE 'EVENT '(FLAG (BITS 3) @@ -1487,9 +1484,9 @@ with the terms of said license. (ADDTOVAR SYSTEMRECLST (DATATYPE EVENT ((EVENTWAKEUPPENDING FLAG) - (NIL BITS 3) - (EVENTQUEUETAIL POINTER) - (EVENTNAME POINTER))) + (NIL BITS 3) + (EVENTQUEUETAIL POINTER) + (EVENTNAME POINTER))) ) (DEFINEQ @@ -1593,17 +1590,17 @@ with the terms of said license. ) (DECLARE%: EVAL@COMPILE -(PUTPROPS AWAIT.CONDITION MACRO - [(CONDITION EVNT TIMEOUT TIMERP) - (PROG [($$TIMER TIMEOUT) - ($$EV (\DTEST EVNT 'EVENT] - (DECLARE (LOCALVARS $$TIMER $$EV)) - LP (RETURN (OR CONDITION (COND - ((NEQ (\PROCESS.GO.TO.SLEEP $$EV $$TIMER TIMERP) - $$EV) - NIL) - (T (AND $$TIMER (SETQ $$TIMER T)) - (GO LP]) +(PUTPROPS AWAIT.CONDITION MACRO [(CONDITION EVNT TIMEOUT TIMERP) + (PROG [($$TIMER TIMEOUT) + ($$EV (\DTEST EVNT 'EVENT] + (DECLARE (LOCALVARS $$TIMER $$EV)) + LP (RETURN (OR CONDITION (COND + ((NEQ (\PROCESS.GO.TO.SLEEP $$EV + $$TIMER TIMERP) + $$EV) + NIL) + (T (AND $$TIMER (SETQ $$TIMER T)) + (GO LP]) ) (RPAQ? \PROCESS.AFTEREXIT.EVENT ) @@ -1620,17 +1617,16 @@ with the terms of said license. (DECLARE%: EVAL@COMPILE (DATATYPE MONITORLOCK ((NIL FLAG) - (MLOCKPERPROCESS FLAG) (* ; - "Monitor's use by anybody in process lets everyone in that proc use it, the normal case") - (NIL BITS 2) - (MLOCKQUEUETAIL POINTER) (* ; - "Last process waiting for monitor to become available") - (MLOCKOWNER POINTER) (* ; "Process owning it") - (MLOCKNAME POINTER) (* ; - "optional name, for debugging, etc") - (MLOCKLINK POINTER) (* ; - "Link to next lock owned by my owner") - )) + (MLOCKPERPROCESS FLAG) (* ; + "Monitor's use by anybody in process lets everyone in that proc use it, the normal case") + (NIL BITS 2) + (MLOCKQUEUETAIL POINTER) (* ; + "Last process waiting for monitor to become available") + (MLOCKOWNER POINTER) (* ; "Process owning it") + (MLOCKNAME POINTER) (* ; "optional name, for debugging, etc") + (MLOCKLINK POINTER) (* ; + "Link to next lock owned by my owner") + )) ) (/DECLAREDATATYPE 'MONITORLOCK '(FLAG FLAG (BITS 2) @@ -1646,46 +1642,48 @@ with the terms of said license. (DECLARE%: EVAL@COMPILE -(PUTPROPS .RELEASE.LOCK. MACRO - [(LOCK EVENIFNOTMINE) - (UNINTERRUPTABLY - [PROG ((OWNER (ffetch MLOCKOWNER of LOCK)) - TAIL PREV NEXTPROC) - (COND - ((OR (NULL OWNER) - (AND (NEQ OWNER (THIS.PROCESS)) - (NOT EVENIFNOTMINE))) - (RETURN))) - (freplace MLOCKOWNER of LOCK with NIL) - (* ; - "Now remove LOCK from my list of owned locks") - [COND - ((EQ (SETQ PREV (fetch PROCOWNEDLOCKS of OWNER)) - LOCK) - (replace PROCOWNEDLOCKS of OWNER with (ffetch MLOCKLINK - of LOCK))) - (T (do (COND - ((NULL PREV) - (RETURN (\MP.ERROR \MP.PROCERROR - "Lock not found among owner's owned locks" LOCK))) - [(EQ (fetch MLOCKLINK of PREV) - LOCK) - (RETURN (replace MLOCKLINK of PREV - with (ffetch MLOCKLINK of LOCK] - (T (SETQ PREV (fetch MLOCKLINK of PREV] - (freplace MLOCKLINK of LOCK with NIL) - (COND - ((SETQ TAIL (ffetch MLOCKQUEUETAIL of LOCK)) - (SETQ NEXTPROC (fetch PROCEVENTLINK of TAIL)) - [COND - ((EQ NEXTPROC TAIL) (* ; "Only one process in queue") - (freplace MLOCKQUEUETAIL of LOCK with NIL)) - (T (replace PROCEVENTLINK of TAIL with (fetch PROCEVENTLINK - of NEXTPROC] - (replace PROCEVENTLINK of NEXTPROC with (replace PROCEVENTORLOCK - of NEXTPROC with - NIL)) - (\RUN.PROCESS NEXTPROC LOCK])]) +(PUTPROPS .RELEASE.LOCK. MACRO [(LOCK EVENIFNOTMINE) + (UNINTERRUPTABLY + [PROG ((OWNER (ffetch MLOCKOWNER of LOCK)) + TAIL PREV NEXTPROC) + (COND + ((OR (NULL OWNER) + (AND (NEQ OWNER (THIS.PROCESS)) + (NOT EVENIFNOTMINE))) + (RETURN))) + (freplace MLOCKOWNER of LOCK with NIL) + (* ; + "Now remove LOCK from my list of owned locks") + [COND + ((EQ (SETQ PREV (fetch PROCOWNEDLOCKS of OWNER)) + LOCK) + (replace PROCOWNEDLOCKS of OWNER + with (ffetch MLOCKLINK of LOCK))) + (T (do (COND + ((NULL PREV) + (RETURN (\MP.ERROR \MP.PROCERROR + "Lock not found among owner's owned locks" + LOCK))) + [(EQ (fetch MLOCKLINK of PREV) + LOCK) + (RETURN (replace MLOCKLINK of PREV + with (ffetch MLOCKLINK + of LOCK] + (T (SETQ PREV (fetch MLOCKLINK of PREV] + (freplace MLOCKLINK of LOCK with NIL) + (COND + ((SETQ TAIL (ffetch MLOCKQUEUETAIL of LOCK)) + (SETQ NEXTPROC (fetch PROCEVENTLINK of TAIL)) + [COND + ((EQ NEXTPROC TAIL) + (* ; "Only one process in queue") + (freplace MLOCKQUEUETAIL of LOCK with NIL)) + (T (replace PROCEVENTLINK of TAIL + with (fetch PROCEVENTLINK of NEXTPROC] + (replace PROCEVENTLINK of NEXTPROC + with (replace PROCEVENTORLOCK of NEXTPROC + with NIL)) + (\RUN.PROCESS NEXTPROC LOCK])]) ) ) @@ -1702,12 +1700,12 @@ with the terms of said license. (ADDTOVAR SYSTEMRECLST (DATATYPE MONITORLOCK ((NIL FLAG) - (MLOCKPERPROCESS FLAG) - (NIL BITS 2) - (MLOCKQUEUETAIL POINTER) - (MLOCKOWNER POINTER) - (MLOCKNAME POINTER) - (MLOCKLINK POINTER))) + (MLOCKPERPROCESS FLAG) + (NIL BITS 2) + (MLOCKQUEUETAIL POINTER) + (MLOCKOWNER POINTER) + (MLOCKNAME POINTER) + (MLOCKLINK POINTER))) ) (DEFINEQ @@ -1804,23 +1802,36 @@ with the terms of said license. ) (DECLARE%: EVAL@COMPILE -(PUTPROPS WITH.MONITOR MACRO - [(LOCK . FORMS) - (LET (SI::*LOCKED-MONITOR* SI::*RESETFORMS*) - (DECLARE (CL:SPECIAL SI::*LOCKED-MONITOR* SI::*RESETFORMS*)) - (CL:UNWIND-PROTECT - (PROGN (OBTAIN.MONITORLOCK LOCK NIL 'WITH.MONITOR) . FORMS) - (SI::MONITOR-UNWIND))]) +(PUTPROPS WITH.MONITOR MACRO [(LOCK . FORMS) + (LET (SI::*LOCKED-MONITOR* SI::*RESETFORMS*) + (DECLARE (CL:SPECIAL SI::*LOCKED-MONITOR* SI::*RESETFORMS*)) + (CL:UNWIND-PROTECT + (PROGN (OBTAIN.MONITORLOCK LOCK NIL 'WITH.MONITOR) . FORMS) + (SI::MONITOR-UNWIND))]) -(PUTPROPS WITH.FAST.MONITOR MACRO - [(LOCK . FORMS) - (UNINTERRUPTABLY - ([LAMBDA (UNLOCK) - (PROG1 (PROGN . FORMS) - (AND (NEQ UNLOCK T) - (RELEASE.MONITORLOCK UNLOCK)))] - (OBTAIN.MONITORLOCK LOCK)))]) +(PUTPROPS WITH.FAST.MONITOR MACRO [(LOCK . FORMS) + (UNINTERRUPTABLY + ([LAMBDA (UNLOCK) + (PROG1 (PROGN . FORMS) + (AND (NEQ UNLOCK T) + (RELEASE.MONITORLOCK UNLOCK)))] + (OBTAIN.MONITORLOCK LOCK)))]) ) +(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(SPECVARS \BACKGROUND) +) +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(GLOBALVARS \IGNORE.BACKGROUND) +) + +(* "END EXPORTED DEFINITIONS") + + +(RPAQ? \BACKGROUND NIL) + +(RPAQ? \IGNORE.BACKGROUND T) (DEFINEQ (\MAKE.PROCESS0 @@ -2096,9 +2107,13 @@ with the terms of said license. (\INTERRUPTABLE (BLOCK]) (\BACKGROUND.PROCESS - [LAMBDA NIL (* bvm%: "24-JUL-83 15:35") - (PROG NIL - LP (for FN in BACKGROUNDFNS do (SPREADAPPLY* FN)) + [LAMBDA NIL (* ; "Edited 28-Jul-2023 21:01 by lmm") + (* bvm%: "24-JUL-83 15:35") + (PROG ((\BACKGROUND \IGNORE.BACKGROUND)) + (DECLARE (SPECVARS \BACKGROUND) + (GLOBALVARS \IGNORE.BACKGROUND)) + LP (SETQ \BACKGROUND \IGNORE.BACKGROUND) + (for FN in BACKGROUNDFNS do (SPREADAPPLY* FN)) (BLOCK) (GO LP]) @@ -2460,51 +2475,53 @@ with the terms of said license. (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE -(PUTPROPS \RESCHEDULE MACRO - [LAMBDA (OLDPROC) +(PUTPROPS \RESCHEDULE MACRO [LAMBDA (OLDPROC) - (* ;; "Causes process switch, saving current context in OLDPROC's handle, or nowhere if OLDPROC is NIL. Must be called uninterruptably!") + (* ;; "Causes process switch, saving current context in OLDPROC's handle, or nowhere if OLDPROC is NIL. Must be called uninterruptably!") - (PROG (PQUEUE PROC) - TOP + (PROG (PQUEUE PROC) + TOP - (* ;; "Maybe check for events here?") + (* ;; "Maybe check for events here?") - (SETQ PQUEUE \HIGHEST.PRIORITY.QUEUE) - LP (COND - ((SETQ PROC (fetch PQNEXT of PQUEUE)) - [COND - ((NEQ PROC OLDPROC) (* ; - "Yes, there is a process switch required here. Below is roughly the body of RESUME") - (LET ((TOFX (fetch PROCFX of PROC)) - FROMFX) - (COND - ((fetch (FX INVALIDP) of TOFX) - (\MP.ERROR \MP.STACKRELEASED "Process's stack has been released!" PROC))) - (SETQ \RUNNING.PROCESS PROC) - (replace PROCFX of PROC with 0) - (\PROC.RESUME TOFX (COND - (OLDPROC (SETQ FROMFX (fetch PROCFX of OLDPROC) - ) - (COND - ((NOT (fetch (FX INVALIDP) of FROMFX) - ) - (* ; - "Release stack pointer of OLDPROC if it hasn't been yet. should never happen") - (\DECUSECOUNT FROMFX))) - (replace PROCFX of OLDPROC with - (\MYALINK)) - NIL) - (T (* ; - "no OLDPROC to resume later, so jettison caller") - (\MYALINK] - (RETURN (fetch WAKEREASON of PROC))) - ((SETQ PQUEUE (fetch PQLOWER of PQUEUE)) - (GO LP)) - (T (* ; - "nobody runnable, wait for events") - (\MP.ERROR \MP.PROCERROR "No runnable process!!" OLDPROC) - (GO TOP]) + (SETQ PQUEUE \HIGHEST.PRIORITY.QUEUE) + LP (COND + ((SETQ PROC (fetch PQNEXT of PQUEUE)) + [COND + ((NEQ PROC OLDPROC) + (* ; + "Yes, there is a process switch required here. Below is roughly the body of RESUME") + (LET ((TOFX (fetch PROCFX of PROC)) + FROMFX) + (COND + ((fetch (FX INVALIDP) of TOFX) + (\MP.ERROR \MP.STACKRELEASED + "Process's stack has been released!" PROC + ))) + (SETQ \RUNNING.PROCESS PROC) + (replace PROCFX of PROC with 0) + (\PROC.RESUME + TOFX + (COND + (OLDPROC (SETQ FROMFX (fetch PROCFX of OLDPROC)) + (COND + ((NOT (fetch (FX INVALIDP) + of FROMFX)) + (* ; + "Release stack pointer of OLDPROC if it hasn't been yet. should never happen") + (\DECUSECOUNT FROMFX))) + (replace PROCFX of OLDPROC with (\MYALINK + )) + NIL) + (T (* ; + "no OLDPROC to resume later, so jettison caller") + (\MYALINK] + (RETURN (fetch WAKEREASON of PROC))) + ((SETQ PQUEUE (fetch PQLOWER of PQUEUE)) + (GO LP)) + (T (* ; "nobody runnable, wait for events") + (\MP.ERROR \MP.PROCERROR "No runnable process!!" OLDPROC) + (GO TOP]) ) ) (DEFINEQ @@ -2848,22 +2865,19 @@ with the terms of said license. (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE -(PUTPROPS THIS.PROCESS MACRO - (NIL \RUNNING.PROCESS)) +(PUTPROPS THIS.PROCESS MACRO (NIL \RUNNING.PROCESS)) -(PUTPROPS TTY.PROCESS MACRO - [X (COND - ((CAR X) - 'IGNOREMACRO) - (T '\TTY.PROCESS]) +(PUTPROPS TTY.PROCESS MACRO [X (COND + ((CAR X) + 'IGNOREMACRO) + (T '\TTY.PROCESS]) -(PUTPROPS TTY.PROCESSP MACRO - [X (COND - ((CAR X) - 'IGNOREMACRO) - (T '(OR (NULL (THIS.PROCESS)) - (EQ (THIS.PROCESS) - (TTY.PROCESS]) +(PUTPROPS TTY.PROCESSP MACRO [X (COND + ((CAR X) + 'IGNOREMACRO) + (T '(OR (NULL (THIS.PROCESS)) + (EQ (THIS.PROCESS) + (TTY.PROCESS]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY @@ -2887,21 +2901,18 @@ with the terms of said license. (DECLARE%: EVAL@COMPILE -(PUTPROPS ALIVEPROCP MACRO - ((p) - (NOT (DEADPROCP p)))) +(PUTPROPS ALIVEPROCP MACRO ((p) + (NOT (DEADPROCP p)))) -(PUTPROPS DEADPROCP MACRO - ((p) - (fetch PROCDELETED of p))) +(PUTPROPS DEADPROCP MACRO ((p) + (fetch PROCDELETED of p))) -(PUTPROPS \COERCE.TO.PROCESS MACRO - [OPENLAMBDA (P ERRORFLG) - (COND - ((AND (type? PROCESS P) - (NOT (fetch PROCDELETED of P))) - P) - (T (FIND.PROCESS P ERRORFLG]) +(PUTPROPS \COERCE.TO.PROCESS MACRO [OPENLAMBDA (P ERRORFLG) + (COND + ((AND (type? PROCESS P) + (NOT (fetch PROCDELETED of P))) + P) + (T (FIND.PROCESS P ERRORFLG]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY @@ -3319,7 +3330,7 @@ with the terms of said license. (RPAQ? PROCBACKTRACEHEIGHT 320) (ADDTOVAR BackgroundMenuCommands ("PSW" '(PROCESS.STATUS.WINDOW) - "Puts up a Process Status Window")) + "Puts up a Process Status Window")) (SETQQ BackgroundMenu) (DECLARE%: EVAL@COMPILE DONTCOPY @@ -3350,8 +3361,8 @@ with the terms of said license. (DEFPRINT 'MONITORLOCK (FUNCTION \MONITORLOCK.DEFPRINT)) - (* ; - "\process.init must come last, since it does a HARDRESET") + (* ; + "\process.init must come last, since it does a HARDRESET") (\PROCESS.INIT) ) @@ -3363,42 +3374,40 @@ with the terms of said license. (ADDTOVAR LAMA PROCESSPROP ADD.PROCESS) ) -(PUTPROPS PROC COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1987 1988 1990 1991 -1992 1993 1998 1999)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (22392 42659 (PROCESSWORLD 22402 . 31747) (ADD.PROCESS 31749 . 35906) (DEL.PROCESS 35908 - . 36855) (PROCESS.RETURN 36857 . 37004) (FIND.PROCESS 37006 . 37640) (MAP.PROCESSES 37642 . 37968) ( -PROCESSP 37970 . 38138) (RELPROCESSP 38140 . 38322) (RESTART.PROCESS 38324 . 38893) (WAKE.PROCESS -38895 . 39625) (SUSPEND.PROCESS 39627 . 40014) (PROCESS.RESULT 40016 . 40994) (PROCESS-STATUS 40996 . -42391) (PROCESS.FINISHEDP 42393 . 42657)) (42660 55867 (THIS.PROCESS 42670 . 42803) (TTY.PROCESS 42805 - . 49632) (TTY.PROCESSP 49634 . 49850) (PROCESS.TTY 49852 . 50202) (GIVE.TTY.PROCESS 50204 . 51014) ( -ALLOW.BUTTON.EVENTS 51016 . 51260) (SPAWN.MOUSE 51262 . 53475) (\WAIT.FOR.TTY 53477 . 53667) ( -WAIT.FOR.TTY 53669 . 55865)) (55868 58486 (RESET 55878 . 56710) (ERROR! 56712 . 58484)) (58851 64199 ( -PROCESSPROP 58861 . 63313) (PROCESS.NAME 63315 . 63620) (PROCESS.WINDOW 63622 . 64197)) (64401 69436 ( -DISMISS 64411 . 65226) (BLOCK 65228 . 67452) (WAITFORINPUT 67454 . 68683) (\WAITFORSYSBUFP 68685 . -69434)) (69637 70134 (EVAL.AS.PROCESS 69647 . 69870) (EVAL.IN.TTY.PROCESS 69872 . 70132)) (70768 76552 - (PROCESS.READ 70778 . 71616) (PROCESS.EVALV 71618 . 72196) (PROCESS.EVAL 72198 . 73175) ( -\PROCESS.EVAL1 73177 . 74280) (PROCESS.APPLY 74282 . 75266) (\PROCESS.APPLY1 75268 . 76550)) (78718 -84023 (CREATE.EVENT 78728 . 78890) (NOTIFY.EVENT 78892 . 80400) (AWAIT.EVENT 80402 . 81024) ( -\UNQUEUE.EVENT 81026 . 82501) (\ENQUEUE.EVENT/LOCK 82503 . 83796) (\EVENT.DEFPRINT 83798 . 84021)) ( -89263 94254 (OBTAIN.MONITORLOCK 89273 . 92137) (CREATE.MONITORLOCK 92139 . 92358) (RELEASE.MONITORLOCK - 92360 . 92694) (SI::MONITOR-UNWIND 92696 . 93282) (MONITOR.AWAIT.EVENT 93284 . 94018) ( -\MONITORLOCK.DEFPRINT 94020 . 94252)) (94863 117339 (\MAKE.PROCESS0 94873 . 102072) (\MAKE.PROCESS1 -102074 . 103638) (\PROCESS.MOVEFRAME 103640 . 108189) (\RELEASE.PROCESS 108191 . 111241) ( -\UNWIND.PROCESS 111243 . 111569) (\MAYBEBLOCK 111571 . 111726) (\BACKGROUND.PROCESS 111728 . 111969) ( -\MOUSE.PROCESS 111971 . 114520) (\TIMER.PROCESS 114522 . 115078) (\PROCESS.RELEASE.LOCKS 115080 . -115494) (\SET.PROCESS.NAME 115496 . 117032) (\PROCESS.DEFPRINT 117034 . 117337)) (117340 131695 ( -\START.PROCESSES 117350 . 117523) (\PROCESS.GO.TO.SLEEP 117525 . 121279) (\PROC.RESUME 121281 . 121655 -) (\RUN.PROCESS 121657 . 124993) (\SUSPEND.PROCESS 124995 . 128056) (\UNQUEUE.TIMER 128058 . 128757) ( -\ENQUEUE.TIMER 128759 . 130666) (\GET.PRIORITY.QUEUE 130668 . 131693)) (134377 141599 (\PROCESS.INIT -134387 . 135013) (\PROCESS.EVENTFN 135015 . 136751) (\PROCESS.BEFORE.LOGOUT 136753 . 138272) ( -\PROCESS.AFTER.EXIT 138274 . 138582) (\PROCESS.RESET.TIMERS 138584 . 140113) (\PROC.AFTER.WINDOWWORLD -140115 . 140800) (\TURN.ON.PROCESSES 140802 . 141597)) (141630 142859 (\PROC.CODEFORTFRAME 141640 . -142461) (\PROC.REPEATEDLYEVALQT 142463 . 142857)) (142893 149625 (BREAK.PROCESS 142903 . 143219) ( -\SELECTPROCESS 143221 . 145661) (\PROCESS.MAKEFRAME 145663 . 147714) (\PROCESS.MAKEFRAME0 147716 . -149623)) (151838 153761 (\CHECK.PQUEUE 151848 . 153759)) (153762 172091 (PPROC 153772 . 155053) ( -PPROCWINDOW 155055 . 155546) (PPROCREPAINTFN 155548 . 156262) (PPROCRESHAPEFN 156264 . 156527) ( -PPROCEXTENT 156529 . 157013) (PPROC1 157015 . 159033) (PROCESS.STATUS.WINDOW 159035 . 163117) ( -\PSW.SELECTED 163119 . 163413) (\PSWOP.SELECTED 163415 . 167315) (PROCESS.BACKTRACE 167317 . 170508) ( -\INVALIDATE.PROCESS.WINDOW 170510 . 171244) (\UPDATE.PROCESS.WINDOW 171246 . 172089))))) + (FILEMAP (NIL (22096 42363 (PROCESSWORLD 22106 . 31451) (ADD.PROCESS 31453 . 35610) (DEL.PROCESS 35612 + . 36559) (PROCESS.RETURN 36561 . 36708) (FIND.PROCESS 36710 . 37344) (MAP.PROCESSES 37346 . 37672) ( +PROCESSP 37674 . 37842) (RELPROCESSP 37844 . 38026) (RESTART.PROCESS 38028 . 38597) (WAKE.PROCESS +38599 . 39329) (SUSPEND.PROCESS 39331 . 39718) (PROCESS.RESULT 39720 . 40698) (PROCESS-STATUS 40700 . +42095) (PROCESS.FINISHEDP 42097 . 42361)) (42364 55571 (THIS.PROCESS 42374 . 42507) (TTY.PROCESS 42509 + . 49336) (TTY.PROCESSP 49338 . 49554) (PROCESS.TTY 49556 . 49906) (GIVE.TTY.PROCESS 49908 . 50718) ( +ALLOW.BUTTON.EVENTS 50720 . 50964) (SPAWN.MOUSE 50966 . 53179) (\WAIT.FOR.TTY 53181 . 53371) ( +WAIT.FOR.TTY 53373 . 55569)) (55572 58190 (RESET 55582 . 56414) (ERROR! 56416 . 58188)) (58551 63899 ( +PROCESSPROP 58561 . 63013) (PROCESS.NAME 63015 . 63320) (PROCESS.WINDOW 63322 . 63897)) (64101 69136 ( +DISMISS 64111 . 64926) (BLOCK 64928 . 67152) (WAITFORINPUT 67154 . 68383) (\WAITFORSYSBUFP 68385 . +69134)) (69337 69834 (EVAL.AS.PROCESS 69347 . 69570) (EVAL.IN.TTY.PROCESS 69572 . 69832)) (70423 76207 + (PROCESS.READ 70433 . 71271) (PROCESS.EVALV 71273 . 71851) (PROCESS.EVAL 71853 . 72830) ( +\PROCESS.EVAL1 72832 . 73935) (PROCESS.APPLY 73937 . 74921) (\PROCESS.APPLY1 74923 . 76205)) (78266 +83571 (CREATE.EVENT 78276 . 78438) (NOTIFY.EVENT 78440 . 79948) (AWAIT.EVENT 79950 . 80572) ( +\UNQUEUE.EVENT 80574 . 82049) (\ENQUEUE.EVENT/LOCK 82051 . 83344) (\EVENT.DEFPRINT 83346 . 83569)) ( +90015 95006 (OBTAIN.MONITORLOCK 90025 . 92889) (CREATE.MONITORLOCK 92891 . 93110) (RELEASE.MONITORLOCK + 93112 . 93446) (SI::MONITOR-UNWIND 93448 . 94034) (MONITOR.AWAIT.EVENT 94036 . 94770) ( +\MONITORLOCK.DEFPRINT 94772 . 95004)) (96210 118970 (\MAKE.PROCESS0 96220 . 103419) (\MAKE.PROCESS1 +103421 . 104985) (\PROCESS.MOVEFRAME 104987 . 109536) (\RELEASE.PROCESS 109538 . 112588) ( +\UNWIND.PROCESS 112590 . 112916) (\MAYBEBLOCK 112918 . 113073) (\BACKGROUND.PROCESS 113075 . 113600) ( +\MOUSE.PROCESS 113602 . 116151) (\TIMER.PROCESS 116153 . 116709) (\PROCESS.RELEASE.LOCKS 116711 . +117125) (\SET.PROCESS.NAME 117127 . 118663) (\PROCESS.DEFPRINT 118665 . 118968)) (118971 133326 ( +\START.PROCESSES 118981 . 119154) (\PROCESS.GO.TO.SLEEP 119156 . 122910) (\PROC.RESUME 122912 . 123286 +) (\RUN.PROCESS 123288 . 126624) (\SUSPEND.PROCESS 126626 . 129687) (\UNQUEUE.TIMER 129689 . 130388) ( +\ENQUEUE.TIMER 130390 . 132297) (\GET.PRIORITY.QUEUE 132299 . 133324)) (136771 143993 (\PROCESS.INIT +136781 . 137407) (\PROCESS.EVENTFN 137409 . 139145) (\PROCESS.BEFORE.LOGOUT 139147 . 140666) ( +\PROCESS.AFTER.EXIT 140668 . 140976) (\PROCESS.RESET.TIMERS 140978 . 142507) (\PROC.AFTER.WINDOWWORLD +142509 . 143194) (\TURN.ON.PROCESSES 143196 . 143991)) (144024 145253 (\PROC.CODEFORTFRAME 144034 . +144855) (\PROC.REPEATEDLYEVALQT 144857 . 145251)) (145287 152019 (BREAK.PROCESS 145297 . 145613) ( +\SELECTPROCESS 145615 . 148055) (\PROCESS.MAKEFRAME 148057 . 150108) (\PROCESS.MAKEFRAME0 150110 . +152017)) (154660 156583 (\CHECK.PQUEUE 154670 . 156581)) (156584 174913 (PPROC 156594 . 157875) ( +PPROCWINDOW 157877 . 158368) (PPROCREPAINTFN 158370 . 159084) (PPROCRESHAPEFN 159086 . 159349) ( +PPROCEXTENT 159351 . 159835) (PPROC1 159837 . 161855) (PROCESS.STATUS.WINDOW 161857 . 165939) ( +\PSW.SELECTED 165941 . 166235) (\PSWOP.SELECTED 166237 . 170137) (PROCESS.BACKTRACE 170139 . 173330) ( +\INVALIDATE.PROCESS.WINDOW 173332 . 174066) (\UPDATE.PROCESS.WINDOW 174068 . 174911))))) STOP diff --git a/sources/PROC.LCOM b/sources/PROC.LCOM index b2b5ab2a..7cf2dc73 100644 Binary files a/sources/PROC.LCOM and b/sources/PROC.LCOM differ diff --git a/sources/XREM.CM b/sources/XREM.CM deleted file mode 100644 index 1cd92bd7..00000000 --- a/sources/XREM.CM +++ /dev/null @@ -1,6 +0,0 @@ -" -(MOVD? (QUOTE NILL) (QUOTE PROMPTPRINT)) -(MOVD? (QUOTE NILL) (QUOTE CURSORP)) -(MOVD? (QUOTE NILL) (QUOTE CHANGEBACKGROUNDBORDER)) -(LOGOUT) -"