Compare commits
222 Commits
medley-230
...
medley-240
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e4c4bb9f8d | ||
|
|
43374862e5 | ||
|
|
6cbacf754b | ||
|
|
ef6d2d5b03 | ||
|
|
121a166047 | ||
|
|
1a550ce499 | ||
|
|
9232a0db90 | ||
|
|
0a37520014 | ||
|
|
6155bcb430 | ||
|
|
8ca35635e5 | ||
|
|
2f7972e78d | ||
|
|
2a88ad712e | ||
|
|
51cb65cf37 | ||
|
|
220c995cda | ||
|
|
fcd0206611 | ||
|
|
d0edc69cd7 | ||
|
|
5ad5083c6d | ||
|
|
8e07e25b9a | ||
|
|
c66583e7b0 | ||
|
|
a86c5ad145 | ||
|
|
dd60b85658 | ||
|
|
b038a6b16e | ||
|
|
5e5fea9ceb | ||
|
|
44e42940a9 | ||
|
|
35b7195ed5 | ||
|
|
10d83c5f5d | ||
|
|
a80788201f | ||
|
|
3c237c1937 | ||
|
|
174bbe8e14 | ||
|
|
d48bd9f77a | ||
|
|
76a6e26faa | ||
|
|
f8521c612e | ||
|
|
de7a1e1deb | ||
|
|
49cb172e3d | ||
|
|
cedc8d1e11 | ||
|
|
496fa408c2 | ||
|
|
60e390789c | ||
|
|
4dec18527e | ||
|
|
3ca4495c76 | ||
|
|
6eeccb40cb | ||
|
|
2647d98f8f | ||
|
|
b52015e71d | ||
|
|
39ee2ecb5d | ||
|
|
a90b7ed73d | ||
|
|
54b2607070 | ||
|
|
971e8936b6 | ||
|
|
e276460836 | ||
|
|
ab818ff335 | ||
|
|
47d77542be | ||
|
|
934d0fb7a4 | ||
|
|
6420bdcf27 | ||
|
|
1d6e43e1ea | ||
|
|
8837c61f85 | ||
|
|
18aae01362 | ||
|
|
a84242561a | ||
|
|
70885c5a19 | ||
|
|
57de705f39 | ||
|
|
7c3fa261c7 | ||
|
|
7fe4d2dcca | ||
|
|
30a4697d75 | ||
|
|
60a766574d | ||
|
|
25a18f6bc0 | ||
|
|
6558a49adb | ||
|
|
4b30aa1640 | ||
|
|
3727653e23 | ||
|
|
b1294ea5e9 | ||
|
|
2a9076bede | ||
|
|
72456ce4ec | ||
|
|
c8c4768315 | ||
|
|
735108ecb7 | ||
|
|
f735fca83e | ||
|
|
560def37bc | ||
|
|
41f32b7db5 | ||
|
|
ab831a46ba | ||
|
|
f1cf759098 | ||
|
|
017bf88a3a | ||
|
|
b2f750e549 | ||
|
|
8cf17ce950 | ||
|
|
008aff1d25 | ||
|
|
214cfb8674 | ||
|
|
2e7b88d0cc | ||
|
|
14fbff63cf | ||
|
|
bec32f475a | ||
|
|
6e845d747f | ||
|
|
459aeef74a | ||
|
|
19ceac6515 | ||
|
|
914604a6eb | ||
|
|
05f3ad19eb | ||
|
|
c62c183ae4 | ||
|
|
328d3f53cd | ||
|
|
5b90251210 | ||
|
|
713f2388c7 | ||
|
|
f49729cbd3 | ||
|
|
bdf03e08a1 | ||
|
|
b19cfd5bbb | ||
|
|
e2d8c9e5ad | ||
|
|
2ea1321d81 | ||
|
|
9054814ef7 | ||
|
|
84dead86af | ||
|
|
5e83d63567 | ||
|
|
bcfeda62e1 | ||
|
|
45513f563b | ||
|
|
db084c6281 | ||
|
|
6c53acaca8 | ||
|
|
fbb5a8f6f5 | ||
|
|
cb8eab788a | ||
|
|
50dc0a9269 | ||
|
|
9273cffce2 | ||
|
|
df8c5a52f1 | ||
|
|
a219ea03e5 | ||
|
|
2072deb6ae | ||
|
|
f6c91ee11c | ||
|
|
adc27d9684 | ||
|
|
d92aa6395a | ||
|
|
f1833861cc | ||
|
|
270fee89e3 | ||
|
|
cba04e168c | ||
|
|
1e847ec274 | ||
|
|
f765676ec4 | ||
|
|
17c72a1f2f | ||
|
|
995c6de04e | ||
|
|
877c6fbf17 | ||
|
|
97b19f1b96 | ||
|
|
948b0e09d1 | ||
|
|
de4e5f5ca4 | ||
|
|
af912247b3 | ||
|
|
ebb5c739ea | ||
|
|
1bed018db8 | ||
|
|
8a8e6fa4dc | ||
|
|
bf2e34841b | ||
|
|
9ed6448591 | ||
|
|
445de6745d | ||
|
|
68ed78a9f9 | ||
|
|
1ae08139c9 | ||
|
|
bb4e230df4 | ||
|
|
02665ca91b | ||
|
|
b819e18c64 | ||
|
|
781709e4e1 | ||
|
|
b772b8383c | ||
|
|
701a642fb4 | ||
|
|
7f99792afe | ||
|
|
6a147af97f | ||
|
|
41b5870164 | ||
|
|
3ed4d52f53 | ||
|
|
3aa01c7a38 | ||
|
|
3cefaf338c | ||
|
|
204605268e | ||
|
|
62422cd4ce | ||
|
|
ed6a6e4e04 | ||
|
|
dbf6808bcb | ||
|
|
126a8cfb37 | ||
|
|
1ff71ea15d | ||
|
|
dfce541a18 | ||
|
|
84391b367b | ||
|
|
346c11b0ad | ||
|
|
ae2633591e | ||
|
|
b0ec2476d5 | ||
|
|
1c077d1b3d | ||
|
|
ca3280f894 | ||
|
|
5b3cf9b7d5 | ||
|
|
e4c3a16ce4 | ||
|
|
41f4489e9f | ||
|
|
51ef95d30f | ||
|
|
0c9744455c | ||
|
|
41608a1b27 | ||
|
|
9d26047d8c | ||
|
|
48c9a82a1c | ||
|
|
f9838ac631 | ||
|
|
f514dd04c2 | ||
|
|
656bb53ef6 | ||
|
|
c105799096 | ||
|
|
d2102bfe9b | ||
|
|
b59e37b703 | ||
|
|
71a2d7aac7 | ||
|
|
94269303d0 | ||
|
|
91305cc2c9 | ||
|
|
9b4c4a3bf7 | ||
|
|
51d554c67e | ||
|
|
b513bb44a3 | ||
|
|
652a9dc320 | ||
|
|
a678515a35 | ||
|
|
ca39ccf27b | ||
|
|
11ac5b7ec7 | ||
|
|
e1cd9260b4 | ||
|
|
9e433314d8 | ||
|
|
b0aa518a41 | ||
|
|
9e0bfabc52 | ||
|
|
feff0cefc0 | ||
|
|
a258a5e9f0 | ||
|
|
9529c35631 | ||
|
|
a111907bf4 | ||
|
|
c797d919f1 | ||
|
|
03e59d15c8 | ||
|
|
ebff4f7268 | ||
|
|
08880d550e | ||
|
|
e4b6f69e8e | ||
|
|
52499052e8 | ||
|
|
b5f71670cb | ||
|
|
d21dfe1061 | ||
|
|
efae6d2911 | ||
|
|
2aae0e7bb6 | ||
|
|
02a6d7ad1b | ||
|
|
4826035054 | ||
|
|
6c6856efb9 | ||
|
|
871bbb735f | ||
|
|
08852f7b55 | ||
|
|
4362618ea0 | ||
|
|
1659c452b5 | ||
|
|
f5a8888aff | ||
|
|
c281728c65 | ||
|
|
4fed40bb85 | ||
|
|
3cca8c4940 | ||
|
|
c4554894b3 | ||
|
|
58196b4011 | ||
|
|
f6a9b88b34 | ||
|
|
bad19ab45f | ||
|
|
d6a4b3bf88 | ||
|
|
d43846b4f4 | ||
|
|
28c673f296 | ||
|
|
fb1d14dfeb | ||
|
|
6d86932d35 | ||
|
|
9ada6de6b9 |
17
.github/ISSUE_TEMPLATE/documentation.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
name: Documentation problem
|
||||
about: Problems with this web site?
|
||||
title: ''
|
||||
labels: ''
|
||||
|
||||
---
|
||||
|
||||
**Errors happen. Please tell us the URL**
|
||||
|
||||
|
||||
**What does it say?**
|
||||
|
||||
|
||||
**What should it say?**
|
||||
|
||||
**Screen shot**
|
||||
32
.github/ISSUE_TEMPLATE/what_people_are_saying.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
name: "New entry for **What People Are Saying**"
|
||||
description: "Suggest a new entry for the **What People are Saying** page"
|
||||
title: "What People are Saying suggestion"
|
||||
body:
|
||||
- type: dropdown
|
||||
id: contentType
|
||||
attributes:
|
||||
label: "What type of entry?"
|
||||
options:
|
||||
- Blog
|
||||
- Tweet
|
||||
- Email
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: entryLink
|
||||
attributes:
|
||||
label: Link to entry
|
||||
description: "What is the link to the item we should add to the **What People are Saying** page?"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: additionalInformation
|
||||
attributes:
|
||||
label: Additional information
|
||||
description: "Use this space to supply any addiitonal information on the suggested item."
|
||||
validations:
|
||||
required: false
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: "## Thank you for your suggestion!"
|
||||
12
.github/workflows/Dockerfile_medley
vendored
@@ -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 \
|
||||
@@ -51,8 +57,8 @@ RUN apt-get update \
|
||||
echo "x86_64"; \
|
||||
fi \
|
||||
) \
|
||||
&& deb="medley-full-${MEDLEY_RELEASE#medley-}" \
|
||||
&& deb=${deb}_${MAIKO_RELEASE#maiko-}-linux-${p}.deb \
|
||||
&& deb="medley-full-linux-${p}-${MEDLEY_RELEASE#medley-}" \
|
||||
&& deb=${deb}_${MAIKO_RELEASE#maiko-}.deb \
|
||||
&& apt-get install -y /tmp/${deb} \
|
||||
&& chown --recursive root:root /usr/local/interlisp \
|
||||
&& (if [ -n "$(which unminimize)" ]; then (yes | unminimize); fi)
|
||||
|
||||
78
.github/workflows/buildDocker.yml
vendored
@@ -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,35 +59,10 @@ on:
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Regularize the inputs so they can be referenced the same way whether they are
|
||||
# the result of a workflow_dispatch or a workflow_call
|
||||
|
||||
inputs:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
draft: ${{ steps.one.outputs.draft }}
|
||||
force: ${{ steps.one.outputs.force }}
|
||||
steps:
|
||||
- id: one
|
||||
run: >
|
||||
if [ '${{ toJSON(inputs) }}' = 'null' ];
|
||||
then
|
||||
echo "workflow_dispatch";
|
||||
echo "draft=${{ github.event.inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ github.event.inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
else
|
||||
echo "workflow_call";
|
||||
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
fi
|
||||
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
@@ -95,22 +70,21 @@ jobs:
|
||||
# based on the latest commit to the repo
|
||||
|
||||
sentry:
|
||||
needs: inputs
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
release_not_built: ${{ steps.check.outputs.release_not_built }}
|
||||
|
||||
steps:
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Check if build already run for this commit
|
||||
- name: Build already completed?
|
||||
- name: Build already completed?
|
||||
id: check
|
||||
continue-on-error: true
|
||||
uses: ./../actions/check-sentry-action
|
||||
@@ -127,22 +101,22 @@ jobs:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: [inputs, sentry]
|
||||
needs: [sentry]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
|
||||
|| inputs.force == 'true'
|
||||
|
||||
steps:
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v3
|
||||
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Find latest release (draft or normal)
|
||||
# and download its assets
|
||||
- name: Download linux debs from latest (draft) release
|
||||
run: |
|
||||
tag=""
|
||||
if [ "${{ needs.inputs.outputs.draft }}" = "true" ];
|
||||
if [ "${{ inputs.draft }}" = "true" ];
|
||||
then
|
||||
tag=$(gh release list | grep Draft | head -n 1 | awk '{ print $3 }')
|
||||
fi
|
||||
@@ -160,7 +134,7 @@ jobs:
|
||||
- name: Get info about Miako and Medley releases
|
||||
id: release_info
|
||||
run: |
|
||||
regex="^[^0-9]*\([^_]*\)_\([^-]*-[^-]*\)-\([^-]*\)-\([^.]*\).*\$"
|
||||
regex="^medley-full-[^-]*-[^-]*-\([^_]*\)_\(.*\).deb\$"
|
||||
ls -1 release_debs | head -n 1 > debname.tmp
|
||||
medley_release="medley-$(sed -e "s/${regex}/\1/" debname.tmp)"
|
||||
maiko_release="maiko-$(sed -e "s/${regex}/\2/" debname.tmp)"
|
||||
@@ -168,6 +142,8 @@ jobs:
|
||||
echo "MEDLEY_RELEASE=${medley_release}" >> ${GITHUB_ENV}
|
||||
echo "MAIKO_RELEASE=${maiko_release}" >> ${GITHUB_ENV}
|
||||
|
||||
# regex="^[^0-9]*\([^_]*\)_\([^-]*-[^-]*\)-\([^-]*\)-\([^.]*\).*\$"
|
||||
|
||||
# Set repo env variables
|
||||
- name: Set repo/docker env variables
|
||||
id: repo_env
|
||||
@@ -175,11 +151,11 @@ jobs:
|
||||
repo_name="${GITHUB_REPOSITORY#*/}"
|
||||
docker_namespace="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')"
|
||||
docker_image="${docker_namespace}/${repo_name}"
|
||||
if [ "${{ needs.inputs.outputs.draft }}" = "false" ];
|
||||
then
|
||||
if [ "${{ inputs.draft }}" = "false" ];
|
||||
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
|
||||
@@ -193,18 +169,18 @@ jobs:
|
||||
|
||||
# Setup the Docker Machine Emulation environment.
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@master
|
||||
uses: docker/setup-qemu-action@v3
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
|
||||
# Setup the Docker Buildx funtion
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@master
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
# Login into DockerHub - required to store the created image
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
@@ -213,7 +189,7 @@ jobs:
|
||||
# checked out and the release tars just downloaded.
|
||||
# Push the result to Docker Hub
|
||||
- name: Build Docker Image for Push to Docker Hub
|
||||
uses: docker/build-push-action@v3
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
builder: ${{ steps.buildx.outputs.name }}
|
||||
build-args: |
|
||||
@@ -240,12 +216,12 @@ jobs:
|
||||
outputs:
|
||||
build_successful: ${{ steps.output.outputs.build_successful }}
|
||||
|
||||
needs: [inputs, sentry, build_and-push]
|
||||
needs: [sentry, build_and-push]
|
||||
|
||||
steps:
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
@@ -257,10 +233,10 @@ jobs:
|
||||
uses: ./../actions/set-sentry-action
|
||||
with:
|
||||
tag: "docker"
|
||||
|
||||
|
||||
- name: Output
|
||||
id: output
|
||||
run: |
|
||||
echo "build_successful='true'" >> ${GITHUB_OUTPUT}
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
529
.github/workflows/buildLoadup.yml
vendored
@@ -56,69 +56,42 @@ on:
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Regularize the inputs so they can be referenced the same way whether they are
|
||||
# the result of a workflow_dispatch or a workflow_call
|
||||
|
||||
inputs:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
draft: ${{ steps.one.outputs.draft }}
|
||||
force: ${{ steps.one.outputs.force }}
|
||||
steps:
|
||||
- id: one
|
||||
run: >
|
||||
if [ '${{ toJSON(inputs) }}' = 'null' ];
|
||||
then
|
||||
echo "workflow_dispatch";
|
||||
echo "draft=${{ github.event.inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ github.event.inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
else
|
||||
echo "workflow_call";
|
||||
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
fi
|
||||
|
||||
|
||||
|
||||
######################################################################################
|
||||
# JOB: sentry #######################################################################
|
||||
|
||||
# Use sentry-action to determine if this release has already been built
|
||||
# based on the latest commit to the repo
|
||||
|
||||
sentry:
|
||||
needs: inputs
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
release_not_built: ${{ steps.check.outputs.release_not_built }}
|
||||
|
||||
steps:
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Check if build already run for this commit
|
||||
- name: Build already completed?
|
||||
- name: Build already completed?
|
||||
id: check
|
||||
continue-on-error: true
|
||||
uses: ./../actions/check-sentry-action
|
||||
with:
|
||||
tag: "loadup"
|
||||
|
||||
######################################################################################
|
||||
|
||||
# JOB: loadup #######################################################################
|
||||
|
||||
#
|
||||
# Do the loadup
|
||||
# Do the loadup and push to release on github
|
||||
#
|
||||
|
||||
loadup:
|
||||
@@ -130,16 +103,19 @@ jobs:
|
||||
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 }}
|
||||
maiko_release_tag: ${{ steps.job_outputs.outputs.MAIKO_RELEASE_TAG }}
|
||||
artifacts_filename_template: ${{ steps.job_outputs.outputs.ARTIFACTS_FILENAME_TEMPLATE }}
|
||||
release_url: ${{ steps.push.outputs.html_url }}
|
||||
|
||||
needs: [inputs, sentry]
|
||||
needs: [sentry]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
|
||||
|| inputs.force == 'true'
|
||||
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
@@ -147,31 +123,43 @@ jobs:
|
||||
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Setup release tag
|
||||
- name: Setup Release Tag
|
||||
id: tag
|
||||
uses: ./../actions/release-tag-action
|
||||
|
||||
# Get Maiko release information, retrieves the name of the latest
|
||||
# Get Maiko release information, retrieves the name of the latest (draft)
|
||||
# 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 [ "${{ inputs.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,39 +170,38 @@ 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 "MAIKO_RELEASE_TAG=${MAIKO_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
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
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,96 +211,214 @@ jobs:
|
||||
run: |
|
||||
Xvnc -geometry 1280x720 :0 &
|
||||
export DISPLAY=":0"
|
||||
PATH="$PWD/maiko:$PATH"
|
||||
scripts/loadup-all.sh -apps
|
||||
|
||||
- name: Build loadups release tar
|
||||
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/library/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/library \
|
||||
medley/lispusers \
|
||||
medley/sources \
|
||||
medley/internal
|
||||
scripts/loadup-db.sh
|
||||
|
||||
- name: Build release tars
|
||||
run: |
|
||||
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)
|
||||
uses: cb80/delrel@latest
|
||||
with:
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Push the 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
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
draft: ${{ inputs.draft }}
|
||||
prerelease: false
|
||||
generateReleaseNotes: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Save the tarball directory for subsequent jobs
|
||||
- name: Save tarballs
|
||||
uses: actions/upload-artifact@v4
|
||||
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: [sentry, loadup]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| inputs.force == 'true'
|
||||
|
||||
steps:
|
||||
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# 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@v4
|
||||
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
|
||||
debs_filename_base=$(./build_deb.sh)
|
||||
echo "DEBS_FILENAME_BASE=${debs_filename_base}" >> $GITHUB_ENV;
|
||||
echo "DEBS_FILENAME_BASE=${debs_filename_base}" >> $GITHUB_OUTPUT;
|
||||
|
||||
# Push the release up to github releases
|
||||
- name: Delete existing release with same tag (if any)
|
||||
uses: cb80/delrel@latest
|
||||
with:
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
continue-on-error: true
|
||||
./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:
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts:
|
||||
${{ env.TARBALL_DIR }}/${{ env.MEDLEY_RELEASE_TAG }}-loadups.tgz,
|
||||
${{ env.TARBALL_DIR }}/${{ env.MEDLEY_RELEASE_TAG }}-runtime.tgz,
|
||||
${{ env.DEBS_DIR }}/*.deb,
|
||||
${{ env.TARS_DIR }}/*.tgz
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
draft: ${{ needs.inputs.outputs.draft }}
|
||||
prerelease: false
|
||||
generateReleaseNotes: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
omitBodyDuringUpdate: true
|
||||
omitDraftDuringUpdate: true
|
||||
omitNameDuringUpdate: true
|
||||
omitPrereleaseDuringUpdate: true
|
||||
|
||||
- name: Rename medley tar for the x86_64 platform
|
||||
run: |
|
||||
cd ${{ env.TARS_DIR }}
|
||||
mv medley-full-linux-x86_64-*.tgz medley.tgz
|
||||
|
||||
- name: Save medley tar for use in cygwin installers
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: medley-tar
|
||||
path: |
|
||||
${{ env.TARS_DIR }}/medley.tgz
|
||||
|
||||
|
||||
# JOB: macos_installer ##############################################################
|
||||
|
||||
#
|
||||
# Create the macos installers (.dmg and .zip) and push to release on github
|
||||
#
|
||||
macos_installer:
|
||||
|
||||
runs-on: macos-12
|
||||
|
||||
needs: [sentry, loadup]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| inputs.force == 'true'
|
||||
# if: false
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
steps:
|
||||
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# 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@v4
|
||||
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: cygwin_installer #############################################################
|
||||
|
||||
#
|
||||
# Create the Windows installer, push it up to the release on github and
|
||||
# update the downloads page on OIO
|
||||
#
|
||||
windows_installer:
|
||||
cygwin_installer:
|
||||
|
||||
runs-on: windows-latest
|
||||
runs-on: windows-2022
|
||||
|
||||
needs: [inputs, sentry, loadup]
|
||||
needs: [sentry, loadup, linux_installer]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
|| inputs.force == 'true'
|
||||
|
||||
outputs:
|
||||
cygwin_installer: ${{ steps.compile_iss.outputs.CYGWIN_INSTALLER }}
|
||||
|
||||
steps:
|
||||
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Store the values output from loadup job as environment variables
|
||||
- name: Environment Variables
|
||||
@@ -325,32 +430,67 @@ 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
|
||||
$aft="${{ needs.loadup.outputs.artifacts_filename_template }}"
|
||||
echo "ARTIFACTS_FILENAME_TEMPLATE=$aft" | 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
|
||||
|
||||
# Retrieve medley tars from artifact store
|
||||
- name: Retrieve medley tar
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: medley-tar
|
||||
path: installers/cygwin/
|
||||
|
||||
# Download maiko cygwin build
|
||||
- name: Retrieve maiko cygwin build
|
||||
shell: powershell
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.MAIKO_TOKEN }}
|
||||
run: |
|
||||
gh release download ${{ needs.loadup.outputs.maiko_release_tag }} --repo interlisp/maiko --pattern ${{ needs.loadup.outputs.maiko_release_tag }}-cygwin.x86_64.tgz --output installers\cygwin\maiko-cygwin.x86_64.tgz
|
||||
|
||||
# Download cygwin installer to be included by medley.iss
|
||||
- name: Download cygwin installer
|
||||
id: cygwin
|
||||
shell: powershell
|
||||
run: |
|
||||
wget https://cygwin.com/setup-x86_64.exe -OutFile installers\cygwin\setup-x86_64.exe
|
||||
|
||||
# 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"
|
||||
$output = "installers\win\vncviewer64-1.12.0.exe"
|
||||
(New-Object System.Net.WebClient).DownloadFile($url, $output)
|
||||
|
||||
#- name: Download vncviewer
|
||||
# shell: powershell
|
||||
# run: |
|
||||
# $url = "https://sourceforge.net/projects/tigervnc/files/stable/1.12.0/vncviewer64-1.12.0.exe"
|
||||
# $output = "installers\win\vncviewer64-1.12.0.exe"
|
||||
# (New-Object System.Net.WebClient).DownloadFile($url, $output)
|
||||
|
||||
# Run iscc.exe to compile the installer
|
||||
- name: Compile medley.iss
|
||||
#- name: Compile medley.iss
|
||||
# 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
|
||||
|
||||
# Run iscc.exe to compile the installer
|
||||
- name: Compile cygwin_medley.iss
|
||||
id: compile_iss
|
||||
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
|
||||
$Env:CYGWIN_INSTALLER_BASE="medley-full-cygwin-x86_64-${env:COMBINED_RELEASE_TAG}"
|
||||
$CYGWIN_INSTALLER="${Env:CYGWIN_INSTALLER_BASE}.exe"
|
||||
echo "CYGWIN_INSTALLER=$CYGWIN_INSTALLER" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||
echo "CYGWIN_INSTALLER=$CYGWIN_INSTALLER" | Out-File -FilePath $Env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
iscc installers\cygwin\medley.iss
|
||||
|
||||
# Upload windows installer to release
|
||||
- name: Upload windows installer to release
|
||||
id: push
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: installers/win/${{ env.INSTALLER_FILENAME }}
|
||||
artifacts: installers/cygwin/${{ env.CYGWIN_INSTALLER }}
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
omitBodyDuringUpdate: true
|
||||
@@ -358,38 +498,85 @@ 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: [sentry, loadup, linux_installer, macos_installer, cygwin_installer]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| inputs.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}
|
||||
cyginst="${{ needs.cygwin_installer.outputs.cygwin_installer }}"
|
||||
echo "CYGWIN_INSTALLER=${cyginst}" >>${GITHUB_ENV}
|
||||
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v4
|
||||
|
||||
|
||||
# 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 placeholder.txt 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"
|
||||
local_manpath="docs/man-page/man_medley.html"
|
||||
if [ "${{ needs.inputs.outputs.draft }}" = "true" ];
|
||||
if [ "${{ inputs.draft }}" = "true" ];
|
||||
then
|
||||
remote_filename="draft_downloads"
|
||||
remote_manname="man_draft.html"
|
||||
else
|
||||
remote_filename="${local_filename%.html}"
|
||||
remote_manname="man_medley.html"
|
||||
fi
|
||||
fi
|
||||
remote_filepath="/srv/oio/static/${remote_filename}"
|
||||
remote_manpath="/srv/oio/static/${remote_manname}"
|
||||
# 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" \
|
||||
-e "s~@@@CYGWIN.INSTALLER@@@~${CYGWIN_INSTALLER}~g" \
|
||||
< "${local_template}" > "${local_filename}"
|
||||
# Create sftp instruction file
|
||||
echo "-rm ${remote_filepath}.oldold" > batch
|
||||
@@ -403,10 +590,16 @@ jobs:
|
||||
sftp -o StrictHostKeyChecking=no -b batch ubuntu@online.interlisp.org
|
||||
env:
|
||||
SSH_KEY: ${{ secrets.OIO_SSH_KEY }}
|
||||
|
||||
|
||||
# Remove placeholder.txt
|
||||
- name: Remove placeholder.txt
|
||||
run: |
|
||||
gh release delete-asset ${{ env.MEDLEY_RELEASE_TAG }} placeholder.txt --yes
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
|
||||
######################################################################################
|
||||
# JOB: complete #####################################################################
|
||||
|
||||
# Use set-sentry-action to determine set the sentry that says this release has
|
||||
# been successfully built
|
||||
@@ -418,12 +611,19 @@ jobs:
|
||||
outputs:
|
||||
build_successful: ${{ steps.output.outputs.build_successful }}
|
||||
|
||||
needs: [inputs, sentry, loadup, windows_installer]
|
||||
needs: [sentry, loadup, downloads_page]
|
||||
|
||||
steps:
|
||||
# Delete the tarballs artifact
|
||||
- name: Delete tarballs artifact
|
||||
uses: geekyeggo/delete-artifact@v5
|
||||
with:
|
||||
name: tarballs
|
||||
failOnError: false
|
||||
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
@@ -440,23 +640,6 @@ jobs:
|
||||
id: output
|
||||
run: |
|
||||
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}
|
||||
|
||||
|
||||
10
.github/workflows/buildReleaseInclDocker.yml
vendored
@@ -75,7 +75,7 @@ jobs:
|
||||
steps:
|
||||
- id: one
|
||||
run: >
|
||||
if [ '${{ toJSON(inputs) }}' != 'null' ];
|
||||
if [ '${{ toJSON(inputs) }}' != '{}' ];
|
||||
then
|
||||
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
@@ -84,6 +84,7 @@ jobs:
|
||||
echo "force=false" >> $GITHUB_OUTPUT;
|
||||
fi
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
|
||||
@@ -94,8 +95,7 @@ jobs:
|
||||
with:
|
||||
draft: ${{ needs.inputs.outputs.draft }}
|
||||
force: ${{ needs.inputs.outputs.force }}
|
||||
secrets:
|
||||
OIO_SSH_KEY: ${{ secrets.OIO_SSH_KEY }}
|
||||
secrets: inherit
|
||||
|
||||
|
||||
######################################################################################
|
||||
@@ -107,9 +107,7 @@ jobs:
|
||||
with:
|
||||
draft: ${{ needs.inputs.outputs.draft }}
|
||||
force: ${{ needs.inputs.outputs.force }}
|
||||
secrets:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
secrets: inherit
|
||||
|
||||
######################################################################################
|
||||
|
||||
|
||||
7
.gitignore
vendored
@@ -2,15 +2,20 @@
|
||||
|
||||
tmp/*
|
||||
|
||||
# releases directory
|
||||
releases/*
|
||||
|
||||
|
||||
# all loadup files
|
||||
|
||||
library/exports.all
|
||||
loadups/exports.all
|
||||
library/RDSYS*
|
||||
loadups/lisp.sysout
|
||||
loadups/full.sysout
|
||||
loadups/*.dribble
|
||||
loadups/whereis.hash
|
||||
loadups/apps.sysout
|
||||
loadups/fuller.database
|
||||
|
||||
# manual cross-reference files
|
||||
|
||||
|
||||
142
BUILDING.md
@@ -1,34 +1,126 @@
|
||||
# How to build a medley release
|
||||
# How to Build Medley and make a Release
|
||||
|
||||
Originally done only with shell scripts:
|
||||
```
|
||||
./scripts/loadup-all.sh
|
||||
```
|
||||
to make the loadups
|
||||
```
|
||||
./scripts/loadup-and-release.sh
|
||||
```
|
||||
to go on to make the tgz files and release them
|
||||
The files in the Medley repository are used for making "loadups" lisp.sysout, full.sysout, apps.sysout. In order to build the Medley images, you need to have a build of "Maiko" (in flavors 'ldeinit' and 'lde' and either (`ldex` or `ldesdl`). Head over to the `Interlisp/maiko` repository to find out about making those.
|
||||
|
||||
# Using github actions
|
||||
# Using GitHub actions
|
||||
|
||||
In the github medley repository (Interlisp/medley) go to the Actions tab.
|
||||
Note that GitHub actions are used to automate the build process and insure that the system is built using known files, and that the releases are coordinated across platforms. We try to minimize dependencies on GitHub.
|
||||
|
||||
It will list the available github actions, select: **Build Medley Release**.
|
||||
That said, you can manually trigger the automatic making of Medley loadups.
|
||||
|
||||
In the GitHub medley repository (Interlisp/medley) go to the Actions tab.
|
||||
|
||||
It will list the available GitHub actions.
|
||||
Select: **Build/Push Release & Docker**.
|
||||
|
||||
In the middle of the screen there is a box labeled "Workflow Runs".
|
||||
|
||||
In the middle of the screen there's a box labeled workflow runs.
|
||||
There should be a row in it that states 'This workflow has a workflow_dispatch event trigger' with a drop down menu (it really looks more like a button) on the right side labeled 'Run workflow'. Select that and you'll get a form allowing you to select the branch (I've only used Master) and enter the release name. Enter a name or leave it empty and press the green 'Run workflow' button. The workflow should queue up and run.
|
||||
|
||||
# How to create a Docker image for the latest Medley release
|
||||
|
||||
In the github medley repository (Interlisp/medley) go to the Actions tab.
|
||||
|
||||
It will list the available github actions, select: **Build Medley Docker image**.
|
||||
|
||||
A table is presented which lists the previous runs of the workflow. If the workflow has never been run, it will be empty. A the top of the list is a row labeled, 'This workflow has a workflow_dispatch event trigger.' with a drop down menu labeled 'Run workflow'. Select it.
|
||||
|
||||
A box will be presented asking, 'Use workflow from' with a drop down menu of all available branches. The default branch is **master**. Leave it selected and push the green 'Run workflow' button.
|
||||
|
||||
The workflow will be queued to run and start running.
|
||||
Build/Push Release & Docker first builds Maiko and Medley, pushes a Medley release to the Interlisp/medley repo Releases, then makes a Docker image.
|
||||
|
||||
The files in .github/workflows/ contain the details.
|
||||
<!--
|
||||
The workflow pulls the latest Maiko image from Docker Hub and the Release Assets from the latest Medley release, generally defined as medley-YYMMDD. The Medley Docker image adds in Tight VNC Server and retrieves the two tarballs associated with a release, one containing the sysouts and the other the other needed files source, fonts, etc. The contents are uncompressed and loaded into the Medley directory structure.
|
||||
-->
|
||||
|
||||
# Building Medley for yourself
|
||||
|
||||
The actual building itself is done with various shell scripts, found in the `scripts` directory in the medley repository. Most of the scripts have a minimal sanity check that they are being run from the medley repository.
|
||||
|
||||
Historically, building the medley image (called a "sysout") was called "doing a loadup". Back in the day, a loadup took the better part of a day, and no one would do the whole thing -- there was no automation.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
In these instructions, there is an assumption that the loadup scripts can find other repositories. All of the loadup scripts have to find `lde` and `ldex` or `ldisdl` and also `ldeinit`.
|
||||
|
||||
Loadups use the run-medley script, which looks for Maiko (actually the lde & ldeinit executables) as follows:
|
||||
|
||||
1. lde (ldeinit) on PATH
|
||||
2. In the `<osversion>.<machinetype>` subdirectory of the directory specified by the $MAIKODIR environment variable
|
||||
3. In the `<osversion>.<machinetype>` subdirectory of the directory specified by $MEDLEYDIR/../maiko/
|
||||
4. In the `<osversion>.<machinetype>` subdirectory of the directory specified by $MEDLEYDIR/maiko/
|
||||
|
||||
where $MEDLEYDIR is the directory from which you called the loadup script.
|
||||
|
||||
## Make everything
|
||||
|
||||
The shell command:
|
||||
```
|
||||
time ./scripts/loadup-all.sh -apps && time ./scripts/loadup-db.sh
|
||||
```
|
||||
does everything; on a fast machine it takes 4-6 minutes, most of which is spent in the `loadup-db.sh` step. Without the `loadup-db.sh` step, it runs in 22 seconds on a fast system.
|
||||
|
||||
## How loadup-all.sh works
|
||||
|
||||
You don't need to know this unless you want to change some of the low-level files involved.
|
||||
|
||||
The script "loadup-all.sh" itself involes scripts used for different steps in the loadup -- basically loadup-all calls the scripts in this order:
|
||||
|
||||
* `loadup-init.sh`
|
||||
* `loadup-mid-from-init.sh`
|
||||
* `loadup-lisp-from-mid.sh`
|
||||
* `loadup-full-from-lisp.sh`
|
||||
* `loadup-aux.sh`
|
||||
* `loadup-apps-from-full.sh`
|
||||
* `loadup-db.sh`
|
||||
* `copy-all.sh`
|
||||
|
||||
Most of these scripts should only be run from the 'medley' repository top level directory.
|
||||
|
||||
```
|
||||
your-working-area
|
||||
maiko
|
||||
medley
|
||||
notecards
|
||||
```
|
||||
|
||||
These are explained in reverse order:
|
||||
|
||||
### `copy-all.sh`: copy files from build directory to loadups
|
||||
|
||||
Most of the scripts build things in a temporary directory and, if the entire process succeeds, copies the results to the `loadups` directory. The environment variable `LOADUP-OUTDIR`, if set, is used, otherwise a sub-directory of /tmp.
|
||||
|
||||
`copy-db.sh` and `copy-full.sh` are provided if you've only done partial loadups.
|
||||
|
||||
`cpv` is a script that copies a file from one place to another while maintaining Medley version numbering.
|
||||
|
||||
### `loadup.db`: build `fuller.database`
|
||||
|
||||
This step was added to make a Masterscope database of "everything". The result is a file `fuller.database`. This was an artifact of an attempt to build some diagnostic tools to help understand what was going on in Medley. There is a 4 step process in the `GATHER-INFO` function in the file `MEDLEY-UTILS` in the `internal` subdirectory of the medley repository that ends with creating a masterscope database after loading all of the source files for every file that is part of the loadup, plus a few additional LispUsers files listed in variables that are part of `MEDLEY-UTILS`.
|
||||
|
||||
There are some problems that `GATHER-INFO` results hint at, but haven't been explored systematically.
|
||||
|
||||
Masterscope has some gaps and bugs so `fuller.database` isn't as useful as it could be. For example, Masterscope 'show paths' was written assuming you had only anlayzed the parts you were working on, and so the results of `SHOW PATHS` are too big to be useful.
|
||||
|
||||
## `loadup-aux.sh`: rebuild two files used for Medley development
|
||||
|
||||
`exports.all` is a collection of external declarations from a set of files in the medley/sources directory that are marked as being exported within those sources. Low level system declarations that aren't needed by most users. The files that need exports.all are generally loaded by loading `SYSEDIT`, which sets up a couple of preferences and then loads `exports.all`.
|
||||
|
||||
`whereis.hash` is an index file mapping function, variable, record declarations and other components to the file name containing that definition. It is the result of scanning the directories in the medley repository, including lispusers and library and internal etc. (but not obsolete?).
|
||||
|
||||
### `loadup-apps-from-full.sh:`build `apps.sysout`
|
||||
|
||||
`apps.sysout` includes some other components that are part of online.interlisp.org experience. In particular, you need `notecards`, which is in a separate repository (currently).
|
||||
|
||||
### `loadup-full-from-lisp.sh`: Build a `full.sysout` and
|
||||
|
||||
`full.sysout` Includes what we hope is a useful subset of Interlisp library and lispusers components as well as our modernization components.
|
||||
|
||||
|
||||
### Build a `lisp.sysout` in 4 scripts:
|
||||
|
||||
### `loadup-lisp-from-mid.sh` build `lisp.sysout`
|
||||
|
||||
`lisp.sysout` is what most 1990s customers started with. This step starts with `init-mid.sysout` and runs `sources/LOADUP-LISP`.
|
||||
|
||||
### `loadup-mid-from-init.sh` build `mid.sysout`
|
||||
|
||||
This step uses a Maiko that has been compiled with the `init` option. It reads the `init.dlinit` and initializes the package system and runs the EXPRESSIONS from the files that were "loaded" by MAKEINIT, and writes out `init-mid.sysout`.
|
||||
|
||||
### `loadup-init.sh`: build `mid.sysout`
|
||||
|
||||
This step (called `MAKEINIT`) runs a Lisp program (using a `starter` sysout) that reads in Lisp sources for the bootstrap loader, walks through the code renaming the low-level memory management functions to work on a file instead of in memory. These renamed functions are written to a file (called I-NEW), and I-NEW is then compiled and loaded in and run to 'virtually' load the core set of files in an initial memory image (called INIT.SYSOUT). It then does another (theoretically unnecessary) pass of reading in INIT.SYSOUT using a different renaming of variables used originally for remote debugging (called TELERAID) and moving some pages around to make room for Dandelion IO Processor boot code.
|
||||
|
||||
While this step requires an Interlisp implementation, it isn't necessarily a Medley implementation. If you want to change the instruction set or modify any data structures that are reflected in both the Lisp code and Maiko, you can run this part in an older Interlisp. Theoretically.
|
||||
|
||||
|
||||
71
README.md
@@ -1,45 +1,43 @@
|
||||
# Medley
|
||||
|
||||
This repository is for the Lisp environment of [Medley Interlisp](https://Interlisp.org).
|
||||
This repository is for the Lisp environment of [Medley](https://interlisp.org).
|
||||
|
||||
See the [Documentation links](https://github.com/Interlisp/medley/wiki/Documentation) for an overview and pointers to documentation.
|
||||
In particular [Running](https://github.com/Interlisp/medley/wiki/Running) explains other methods of getting Medley Interlisp.
|
||||
[Install and Run](https://interlisp.org/software/install-and-run) covers ways to install and start up Medley on Linux systems, MacOS, and Windows (with or without WSL).
|
||||
|
||||
[Interlisp/maiko](https://github.com/Interlisp/maiko), is the repo for the implementation (in C) of the Medley virtual machine.
|
||||
[Using Medley](https://interlisp.org/software/using-medley/) has an overview and pointers to documentation.
|
||||
|
||||
## Using releases
|
||||
[Interlisp/maiko](https://github.com/Interlisp/maiko), is the repo for the implementation (in C) of the Medley virtual machine.
|
||||
|
||||
There currently are separate releases of medley and maiko; get the latest version of each.
|
||||
## Releases
|
||||
|
||||
### Getting releases
|
||||
While there are installers for popular platforms, this section may be useful in some circumstances.
|
||||
|
||||
Get the Maiko release [here](https://github.com/Interlisp/maiko/releases). You'll need the .tgz file corresponding to your operating system and processor (for Windows with WSL or Intel Linux, use `linux.x86_64`; for Macs use `darwin.x86_64` for Intel and `darwin.aarch64` for M1.)
|
||||
### Getting releases
|
||||
|
||||
Or, build your own maiko (the binaries `lde` `ldex` and `ldeinit`) We can build for other OS arch pairs depending on what is available for GitHub actions.
|
||||
Get the Maiko release [here](https://github.com/Interlisp/maiko/releases). You'll need the .tgz file corresponding to your operating system and processor. For Windows with WSL or Intel Linux, use `linux.x86_64`; for Macs use `darwin.x86_64` for Intel and `darwin.aarch64` for Mac silicon. Windows without WSL uses `cygwin` instead.
|
||||
|
||||
The medley release comes in two parts, found [here](https://github.com/Interlisp/medley/releases)
|
||||
1. The "loadups" (download `medley-`YYMMDD`-loadups.tgz`)
|
||||
2. The "runtime" (download `medley-`YYMMDD`-runtime.tgz`)
|
||||
Or, build your own maiko (the binaries `lde`, `ldex` OR `ldesdl`, and `ldeinit`).
|
||||
You can also build for other architectures
|
||||
|
||||
You don't need the "runtime" if you've cloned this (medley) repo, but you'll still need the "loadups" release.
|
||||
The medley release image and sources come in two parts, found [here](https://github.com/Interlisp/medley/releases)
|
||||
1. The "loadups" (download `medley-`_YYMMDD-XXXXX_`-loadups.tgz`)
|
||||
2. The "runtime" (download `medley-`_YYMMDD-XXXXX_`-runtime.tgz`)
|
||||
|
||||
If you happen to have the 'gh' GitHub command line installed you can download both using
|
||||
```
|
||||
gh release download -R Interlisp/medley -p "*"
|
||||
```
|
||||
but otherwise just click on the link(s) below to the parts you need.
|
||||
where _YYMMDD_ is the date and _XXXXX_ is the GitHub commit ID.
|
||||
|
||||
The "runtime" isn't needed if you've cloned the (medley) repo--you have all the files. The "runtime" has extra fonts, unicode tables, and source code that aren't part of the loadups but may be called on.
|
||||
|
||||
### Unpacking releases
|
||||
|
||||
From a shell/terminal window:
|
||||
|
||||
1. Choose where you want to install medley and maiko.
|
||||
Unpack the medley loadups file
|
||||
1. Choose a directory _parent_ where you want to install medley and maiko.
|
||||
2. Unpack the medley loadups file
|
||||
|
||||
* `cd ` ~parent~
|
||||
* `tar xvzf medley-`YYMMDD`-loadups.tgz`
|
||||
* `cd ` _parent_
|
||||
* `tar xvzf medley-`_YYMMDD-XXXXX_`-loadups.tgz`
|
||||
|
||||
2. Unpack the medley runtime OR clone the Medley repo
|
||||
3. Unpack the medley runtime OR clone the Medley repo
|
||||
(the "medley runtime" is just a subset of the whole repo)
|
||||
|
||||
* `tar xvzf medley-`YYMMDD`-runtime.tgz`
|
||||
@@ -49,25 +47,27 @@ Unpack the medley loadups file
|
||||
git clone https://github.com/Interlisp/medley
|
||||
```
|
||||
|
||||
3. Unpack the maiko file for your operating system and CPU type, e.g.,
|
||||
4. Unpack the maiko file for your operating system and CPU type, e.g.,
|
||||
|
||||
```
|
||||
tar xvzf maiko-210823.linux.x86_64.tgz
|
||||
```
|
||||
|
||||
3. This should leave you with two directories, `medley` and `maiko`.
|
||||
5. This should leave you with two directories, `medley` and `maiko`.
|
||||
|
||||
### Setting up X
|
||||
|
||||
Medley Interlisp currently needs an X-Server to manage its display. Most Linux desktops have one. Windows 11 with WSL includes an X-Server. For Windows 10 with WSL2, there are a number of open-source X servers; for example vcxsrv.
|
||||
In many configurations, Medley uses an X-Server to manage its display. Most Linux desktops have one. Windows 11 with WSL includes an X-Server. For Windows 10 with WSL2, there are a number of open-source X servers; for example vcxsrv.
|
||||
|
||||
Mac users should get [XQuartz from XQuartz.org](https://xquartz.org/releases).
|
||||
|
||||
Medley manages the display entirely, doesn't use X fonts and manages it's own window system.
|
||||
|
||||
If you have a high-resolution display, note that much of the graphics was designed for a low-resolution display, so an X-server that does "pixel doublilng" is best. (E.g., Raspberry Pi does pixel doubling on 4K displays.) It also presumes you have a 3-button mouse; the scroll-wheel on some mice act as one with some difficulty.) XQuartz Preferences/Input has "Emulate three button mouse" option.
|
||||
If you have a high-resolution display, note that much of the graphics was designed for a low-resolution display, so an X-server that does "pixel doubling" is best. (E.g., Raspberry Pi does pixel doubling on 4K displays.)
|
||||
|
||||
### Running Medley Interlisp
|
||||
Medley presumes you have a 3-button mouse; the scroll-wheel on some mice acts as one, with some difficulty. Go into XQuartz Preferences/Input and check "Emulate three button mouse" option.
|
||||
|
||||
### Running Medley Interlisp (obsolete)
|
||||
|
||||
The `run-medley` script in this repo sets up some convenient defaults. Running Medley can be done by typing:
|
||||
```
|
||||
@@ -112,7 +112,8 @@ you can continue right where you left off.
|
||||
File Names and Extensions: Most Interlisp source file names are
|
||||
UPPERCASE and Interlisp didn't use file extensions for its source
|
||||
files. A .TEDIT or .TXT file is probably documentation
|
||||
for the package of same name, at least in the library, lispusers.
|
||||
for the package of the same name, at least in the library and lispusers
|
||||
directories.
|
||||
|
||||
The current repo has both Lisp sources and compiled .LCOM and .DFASL
|
||||
files.
|
||||
@@ -121,9 +122,8 @@ Each directory should have a README.md, but briefly
|
||||
|
||||
* BUILDING.md -- instructions on how to make your own loadups
|
||||
* clos -- early implementation of Common Lisp Object System
|
||||
* CLTL2 -- files submitted to bring Medley up to the conformance to "Common Lisp, the Language" 2nd edition. Not enough to conform to the ANSII standard lisp.
|
||||
* Dockerfile -- used when building Docker containers with Medley
|
||||
* docs -- Documentation files (in TEdit format PDFs or online help; look [here](https://github.com/Interlisp/medley/Documentation)
|
||||
* CLTL2 -- files submitted to bring Medley up to the conformance to "Common Lisp, the Language" 2nd edition. Not enough to conform to the ANSI standard lisp.
|
||||
* docs -- Documentation files (in TEdit format, PDFs, or online help; look [here](https://github.com/Interlisp/medley/Documentation))
|
||||
* fonts -- raster fonts (or font widths) in various resolutions for display, postscript, interpress, press formats
|
||||
* greetfiles -- various configuration setups
|
||||
* internal -- These _were_ internal to Venue
|
||||
@@ -133,11 +133,6 @@ Each directory should have a README.md, but briefly
|
||||
* obsolete -- files we should remove from the repo
|
||||
* rooms -- implementation of ROOMS window/desktop manager
|
||||
* run-medley -- script to enhance the options of running medley
|
||||
* scripts -- some scripts for fixing up things
|
||||
* scripts -- some scripts for fixing up things, building and running medley
|
||||
* sources -- sources for Interlisp and Common Lisp implementations
|
||||
* unicode -- data files for support of XCCS to and from Unicode mappings
|
||||
|
||||
plus
|
||||
Dockerfile, and scripts for building and running medley
|
||||
tmp directory for use during build processes
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
See [Documentation links](https://github.com/Interlisp/medley/wiki/Documentation)
|
||||
a complete list of available documentation. Much of the documentation still
|
||||
See [Using Medley](https://interlisp.org/software/using-medley)
|
||||
for a list of available documentation. Much of the documentation still
|
||||
needs review and updating.
|
||||
|
||||
This directory has source (.TEDIT) for some documents that are found elsewhere.
|
||||
|
||||
BIN
docs/ReleaseNote/APPENDIXA-THEEXEC.TEDIT
Normal file
BIN
docs/ReleaseNote/APPENDIXB-SEDIT.TEDIT
Normal file
BIN
docs/ReleaseNote/APPENDIXC-ICONW.TEDIT
Normal file
BIN
docs/ReleaseNote/APPENDIXD-FREEMENU.TEDIT
Normal file
148
docs/ReleaseNote/APPENDIXE-ERRSYS.TEDIT
Normal file
BIN
docs/ReleaseNote/ENVOSCOVERSHEET.TEDIT
Normal file
138
docs/ReleaseNote/Indexfinal.tedit
Normal file
BIN
docs/ReleaseNote/LOT.tedit
Normal file
BIN
docs/ReleaseNote/PREFACE.TEDIT
Normal file
BIN
docs/ReleaseNote/PRINTINGSPEC.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC1-INTRODUCTION.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC2-NOTES-AND-CAUTIONS.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC3-IRMFEATURES-I.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC3-IRMFEATURES-II.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC3-IRMFEATURES-III.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC4-IRMERRATA.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC5-LIBRARY-MODULES.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC6-USERS-GUIDES.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC7-CLIMPLMNTN.TEDIT
Normal file
BIN
docs/ReleaseNote/TABS2L.SKETCH
Normal file
2
docs/ReleaseNote/TABSINFOP.SKETCH
Normal file
BIN
docs/ReleaseNote/TABSLAYOUTL.SKETCH
Normal file
BIN
docs/ReleaseNote/TABSPEC.TEDIT
Normal file
BIN
docs/ReleaseNote/TOC.TEDIT
Normal file
BIN
docs/ReleaseNote/Tab-Replacements.tedit
Normal file
BIN
docs/ReleaseNote/Titlepage.tedit
Normal file
BIN
docs/ReleaseNote/bindercover.sketch
Normal file
146
docs/ReleaseNote/indexbase.tedit
Normal file
@@ -1,21 +1,20 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
(FILECREATED "12-Feb-92 12:28:48" {DSK}<users>sybalsky>PUBS>IMINDEX.;2 37264
|
||||
|
||||
changes to%: (FNS IM.CHAP.DISPLAYFN)
|
||||
(FILECREATED " 6-Mar-2024 21:19:25" {WMEDLEY}<doctools>IMINDEX.;2 36416
|
||||
|
||||
previous date%: " 8-Dec-91 15:46:22" {DSK}<users>sybalsky>PUBS>IMINDEX.;1)
|
||||
:EDIT-BY rmk
|
||||
|
||||
:CHANGES-TO (VARS IMINDEXCOMS)
|
||||
|
||||
:PREVIOUS-DATE "12-Feb-92 12:28:48" {WMEDLEY}<doctools>IMINDEX.;1)
|
||||
|
||||
(* ; "
|
||||
Copyright (c) 1986, 1987, 1988, 1991, 1992 by Xerox Corporation. All rights reserved.
|
||||
")
|
||||
|
||||
(PRETTYCOMPRINT IMINDEXCOMS)
|
||||
|
||||
(RPAQQ IMINDEXCOMS
|
||||
(
|
||||
(* ;;
|
||||
"this file contains the functions used for creating and manipulating index image objects")
|
||||
"this file contains the functions used for creating and manipulating index image objects")
|
||||
|
||||
(FNS IM.INDEX.CLOSEF IM.INDEX.COPYFN IM.INDEX.CREATEOBJ IM.INDEX.DISPLAY.STRING
|
||||
IM.INDEX.DISPLAYFN IM.INDEX.EDIT IM.INDEX.LIST.FROM.STRING IM.INDEX.SIZEFN
|
||||
@@ -32,12 +31,7 @@ Copyright (c) 1986, 1987, 1988, 1991, 1992 by Xerox Corporation. All rights res
|
||||
(COMS (* ; "An image object to set the chapter number, on the TEXTOBJ's proplist, on the INDEXING-CHAPTER property.")
|
||||
(FNS IM.CHAP.COPYFN IM.CHAP.CREATEOBJ IM.CHAP.DISPLAYFN IM.CHAP.SIZEFN IM.CHAP.PUTFN
|
||||
IM.CHAP.GETFN IM.CHAP.BUTTONEVENTFN))
|
||||
(P (ADVISE 'TEDIT.FORMAT.HARDCOPY 'AROUND '(RESETLST
|
||||
(RESETSAVE NIL (LIST (FUNCTION IM.INDEX.CLOSEF
|
||||
)
|
||||
STREAM))
|
||||
*))
|
||||
(IM.INDEX.INIT))))
|
||||
(P (IM.INDEX.INIT))))
|
||||
|
||||
|
||||
|
||||
@@ -494,9 +488,9 @@ Copyright (c) 1986, 1987, 1988, 1991, 1992 by Xerox Corporation. All rights res
|
||||
(DECLARE%: EVAL@COMPILE
|
||||
|
||||
(RECORD IM.INDEX.DATA (NAME TYPE SAV INFO SUBSEC PAGE# . PROPLIST)
|
||||
SUBSEC _ IM.INDEX.DEFAULT.SUBSEC (TYPE? (AND (LISTP DATUM)
|
||||
(IGEQ (LENGTH DATUM)
|
||||
6))))
|
||||
SUBSEC _ IM.INDEX.DEFAULT.SUBSEC (TYPE? (AND (LISTP DATUM)
|
||||
(IGEQ (LENGTH DATUM)
|
||||
6))))
|
||||
)
|
||||
|
||||
(RPAQQ IM.INDEX.OBJ.FREEMENU.SPECS
|
||||
@@ -638,21 +632,15 @@ Copyright (c) 1986, 1987, 1988, 1991, 1992 by Xerox Corporation. All rights res
|
||||
T])
|
||||
)
|
||||
|
||||
(ADVISE 'TEDIT.FORMAT.HARDCOPY 'AROUND '(RESETLST
|
||||
(RESETSAVE NIL (LIST (FUNCTION IM.INDEX.CLOSEF)
|
||||
STREAM))
|
||||
*))
|
||||
|
||||
(IM.INDEX.INIT)
|
||||
(PUTPROPS IMINDEX COPYRIGHT ("Xerox Corporation" 1986 1987 1988 1991 1992))
|
||||
(DECLARE%: DONTCOPY
|
||||
(FILEMAP (NIL (2160 15212 (IM.INDEX.CLOSEF 2170 . 2785) (IM.INDEX.COPYFN 2787 . 2972) (
|
||||
IM.INDEX.CREATEOBJ 2974 . 4320) (IM.INDEX.DISPLAY.STRING 4322 . 4743) (IM.INDEX.DISPLAYFN 4745 . 8588)
|
||||
(IM.INDEX.EDIT 8590 . 12058) (IM.INDEX.LIST.FROM.STRING 12060 . 13094) (IM.INDEX.SIZEFN 13096 . 13856
|
||||
) (IM.INDEX.STRING.FROM.LIST 13858 . 14103) (IM.INDEX.PUTFN 14105 . 14294) (IM.INDEX.GETFN 14296 .
|
||||
14451) (IM.INDEX.BUTTONEVENTFN 14453 . 15210)) (15213 17283 (IM.INDEX.INIT 15223 . 17281)) (17284
|
||||
29200 (IM.INDEX.MENU 17294 . 18982) (IM.INDEX.MENU.WHENSELECTEDFN 18984 . 25739) (
|
||||
IM.INDEX.OBJ.FREEMENU.SELECTEDFN 25741 . 29198)) (31736 36879 (IM.CHAP.COPYFN 31746 . 31926) (
|
||||
IM.CHAP.CREATEOBJ 31928 . 33354) (IM.CHAP.DISPLAYFN 33356 . 35316) (IM.CHAP.SIZEFN 35318 . 36320) (
|
||||
IM.CHAP.PUTFN 36322 . 36506) (IM.CHAP.GETFN 36508 . 36669) (IM.CHAP.BUTTONEVENTFN 36671 . 36877)))))
|
||||
(FILEMAP (NIL (1673 14725 (IM.INDEX.CLOSEF 1683 . 2298) (IM.INDEX.COPYFN 2300 . 2485) (
|
||||
IM.INDEX.CREATEOBJ 2487 . 3833) (IM.INDEX.DISPLAY.STRING 3835 . 4256) (IM.INDEX.DISPLAYFN 4258 . 8101)
|
||||
(IM.INDEX.EDIT 8103 . 11571) (IM.INDEX.LIST.FROM.STRING 11573 . 12607) (IM.INDEX.SIZEFN 12609 . 13369
|
||||
) (IM.INDEX.STRING.FROM.LIST 13371 . 13616) (IM.INDEX.PUTFN 13618 . 13807) (IM.INDEX.GETFN 13809 .
|
||||
13964) (IM.INDEX.BUTTONEVENTFN 13966 . 14723)) (14726 16796 (IM.INDEX.INIT 14736 . 16794)) (16797
|
||||
28713 (IM.INDEX.MENU 16807 . 18495) (IM.INDEX.MENU.WHENSELECTEDFN 18497 . 25252) (
|
||||
IM.INDEX.OBJ.FREEMENU.SELECTEDFN 25254 . 28711)) (31229 36372 (IM.CHAP.COPYFN 31239 . 31419) (
|
||||
IM.CHAP.CREATEOBJ 31421 . 32847) (IM.CHAP.DISPLAYFN 32849 . 34809) (IM.CHAP.SIZEFN 34811 . 35813) (
|
||||
IM.CHAP.PUTFN 35815 . 35999) (IM.CHAP.GETFN 36001 . 36162) (IM.CHAP.BUTTONEVENTFN 36164 . 36370)))))
|
||||
STOP
|
||||
|
||||
268
doctools/IMTEDIT
@@ -1,17 +1,13 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
|
||||
(FILECREATED "20-Jul-2022 15:10:53"
|
||||
{DSK}<Users>kaplan>Local>medley3.5>working-medley>doctools>IMTEDIT.;2 117347
|
||||
(FILECREATED " 6-Mar-2024 21:18:02" {WMEDLEY}<doctools>IMTEDIT.;4 116622
|
||||
|
||||
:CHANGES-TO (FNS MAKE.IM.DOCUMENT)
|
||||
:EDIT-BY rmk
|
||||
|
||||
:PREVIOUS-DATE " 8-Dec-91 15:41:54"
|
||||
{DSK}<Users>kaplan>Local>medley3.5>working-medley>doctools>IMTEDIT.;1)
|
||||
:CHANGES-TO (FNS TRANSLATE.DUMPOUT MAKE.IM.DOCUMENT)
|
||||
|
||||
:PREVIOUS-DATE "20-Jul-2022 15:10:53" {WMEDLEY}<doctools>IMTEDIT.;2)
|
||||
|
||||
(* ; "
|
||||
Copyright (c) 1983-1986, 1991 by Xerox Corporation.
|
||||
")
|
||||
|
||||
(PRETTYCOMPRINT IMTEDITCOMS)
|
||||
|
||||
@@ -493,27 +489,26 @@ Copyright (c) 1983-1986, 1991 by Xerox Corporation.
|
||||
(DUMPOUT FONT LISP DUMP.CHARS SAV])
|
||||
|
||||
(MAKE.IM.DOCUMENT
|
||||
[LAMBDA (FORM OUTFILE.FLG PAGE.LAYOUT OUTPUT.MESSAGE DEFAULT.PARALOOKS PTRFILENAME)
|
||||
(* ; "Edited 20-Jul-2022 15:10 by rmk")
|
||||
[LAMBDA (FORM OUTFILE.FLG PAGE.LAYOUT OUTPUT.MESSAGE DEFAULT.PARALOOKS PTRFILENAME)
|
||||
|
||||
(* ;; "Edited 6-Mar-2024 21:17 by rmk: Fixed backquote commas. Also put IM.INDEX.CLOSEF calls in TEXTPROPs so advice in IMINDEX can be eliminated.")
|
||||
|
||||
(* ;; "Edited 20-Jul-2022 15:10 by rmk")
|
||||
(* mjs " 4-Aug-86 10:52")
|
||||
|
||||
(* * this function creates an IM output file, in XPS-compatible format.
|
||||
If sets up all of the special variables needed by DUMP, evaluates FORM, and sets
|
||||
all of the para and font looks)
|
||||
(* ;;; "this function creates an IM output file, in XPS-compatible format. If sets up all of the special variables needed by DUMP, evaluates FORM, and sets all of the para and font looks")
|
||||
|
||||
(* * If OUTFILE.FLG is NIL, the output file is just sent to the default printer.
|
||||
If OUTFILE.FLG is T, the outfile textstream is simply returned.
|
||||
If OUTFILE.FLG = anything else, it is taken as a file name to put the press file
|
||||
which is created <but not printed>.)
|
||||
(* ;;; "If OUTFILE.FLG is NIL, the output file is just sent to the default printer. If OUTFILE.FLG is T, the outfile textstream is simply returned. If OUTFILE.FLG = anything else, it is taken as a file name to put the press file which is created <but not printed>.")
|
||||
|
||||
(* * if PAGE.LAYOUT is non-NIL, it should be the compound page layout to be used.)
|
||||
(* ;;; "if PAGE.LAYOUT is non-NIL, it should be the compound page layout to be used.")
|
||||
|
||||
(* * if OUTPUT.MESSAGE is non-NIL, it is printed on the hardcopy output)
|
||||
(* ;;; "if OUTPUT.MESSAGE is non-NIL, it is printed on the hardcopy output")
|
||||
|
||||
(* * PTRFILENAME is the name to be used if an index pointer file is generated
|
||||
during hardcopy <by printing index objects>)
|
||||
(* ;;; "PTRFILENAME is the name to be used if an index pointer file is generated during hardcopy <by printing index objects>")
|
||||
|
||||
(PROG ((IM.OUTFILE (OPENTEXTSTREAM NIL NIL NIL NIL (LIST 'IM.INDEX.PTRFILENAME PTRFILENAME)))
|
||||
(PROG ([IM.OUTFILE (OPENTEXTSTREAM NIL NIL NIL NIL `(IM.INDEX.PTRFILENAME ,PTRFILENAME
|
||||
AFTERHARDCOPYFN (FUNCTION
|
||||
IM.INDEX.INIT]
|
||||
(FONT.STACK (CONS))
|
||||
(IM.TEDIT.LAST.PARA.BEGIN 1)
|
||||
(IM.TEDIT.LAST.FONT.BEGIN 1)
|
||||
@@ -532,7 +527,7 @@ Copyright (c) 1983-1986, 1991 by Xerox Corporation.
|
||||
(DUMP.HEADERS.FOOTERS " " " ")
|
||||
(DUMPOUT CR CR START.PARA PARALOOKS
|
||||
`(TYPE PAGEHEADING SUBTYPE DRAFTMESSAGE QUAD LEFT 1STLEFTMARGIN 0 LEFTMARGIN 0
|
||||
RIGHTMARGIN %, IM.TEXT.RIGHTMARGIN)
|
||||
RIGHTMARGIN ,IM.TEXT.RIGHTMARGIN)
|
||||
DUMP.CHARS
|
||||
(COND
|
||||
(IM.DRAFT.FLG (CONCAT "***DRAFT*** " (DATE)
|
||||
@@ -543,73 +538,65 @@ Copyright (c) 1983-1986, 1991 by Xerox Corporation.
|
||||
(COND
|
||||
(IM.EVEN.FLG
|
||||
|
||||
(* if you must quarantee that you have an even number of pages for two-sided
|
||||
copying, dump out a blank page no matter what --
|
||||
it can always be discarded)
|
||||
(* ;; "if you must quarantee that you have an even number of pages for two-sided copying, dump out a blank page no matter what -- it can always be discarded")
|
||||
|
||||
(DUMPOUT CR CR START.PARA PARALOOKS
|
||||
`(NEWPAGEBEFORE T QUAD LEFT 1STLEFTMARGIN 0 LEFTMARGIN 0 RIGHTMARGIN %,
|
||||
IM.TEXT.RIGHTMARGIN SPECIALX %, IM.BLANKPAGE.SPECIALX SPECIALY %,
|
||||
IM.BLANKPAGE.SPECIALY)
|
||||
`(NEWPAGEBEFORE T QUAD LEFT 1STLEFTMARGIN 0 LEFTMARGIN 0 RIGHTMARGIN
|
||||
,IM.TEXT.RIGHTMARGIN SPECIALX ,IM.BLANKPAGE.SPECIALX SPECIALY
|
||||
,IM.BLANKPAGE.SPECIALY)
|
||||
DUMP.CHARS "[This page intentionally left blank]" CR CR)))
|
||||
|
||||
(* after converting document, make sure that last para is formatted correctly by
|
||||
changing font, ending current para, and starting new para)
|
||||
(* ;; "after converting document, make sure that last para is formatted correctly by changing font, ending current para, and starting new para")
|
||||
|
||||
(DUMPOUT CR CR FONT NIL)
|
||||
(DUMP '(START.PARA))
|
||||
|
||||
(* * set page format)
|
||||
(* ;;; "set page format")
|
||||
|
||||
[TEDIT.PAGEFORMAT IM.OUTFILE
|
||||
(COND
|
||||
(PAGE.LAYOUT)
|
||||
(T (TEDIT.COMPOUND.PAGEFORMAT [TEDIT.SINGLE.PAGEFORMAT NIL NIL NIL NIL NIL
|
||||
IM.PAGE.LEFTMARGIN IM.PAGE.RIGHTMARGIN
|
||||
IM.PAGE.FIRST.TOPMARGIN IM.PAGE.BOTTOMMARGIN
|
||||
1 NIL NIL
|
||||
`((RECTOFOOT %, IM.PAGE.LEFTMARGIN %,
|
||||
IM.FOOTER.Y)
|
||||
(RECTOFOOTRULE %, IM.PAGE.LEFTMARGIN %,
|
||||
IM.FOOTER.RULE.Y)
|
||||
(DRAFTMESSAGE %, IM.DRAFT.MESSAGE.X %,
|
||||
IM.DRAFT.MESSAGE.BOTTOM.Y]
|
||||
(T (TEDIT.COMPOUND.PAGEFORMAT [TEDIT.SINGLE.PAGEFORMAT
|
||||
NIL NIL NIL NIL NIL IM.PAGE.LEFTMARGIN
|
||||
IM.PAGE.RIGHTMARGIN IM.PAGE.FIRST.TOPMARGIN
|
||||
IM.PAGE.BOTTOMMARGIN 1 NIL NIL
|
||||
`((RECTOFOOT ,IM.PAGE.LEFTMARGIN ,IM.FOOTER.Y)
|
||||
(RECTOFOOTRULE ,IM.PAGE.LEFTMARGIN
|
||||
,IM.FOOTER.RULE.Y)
|
||||
(DRAFTMESSAGE ,IM.DRAFT.MESSAGE.X
|
||||
,IM.DRAFT.MESSAGE.BOTTOM.Y]
|
||||
[TEDIT.SINGLE.PAGEFORMAT NIL NIL NIL NIL NIL IM.PAGE.LEFTMARGIN
|
||||
IM.PAGE.RIGHTMARGIN IM.PAGE.TOPMARGIN IM.PAGE.BOTTOMMARGIN 1 NIL
|
||||
NIL `((DRAFTMESSAGE %, IM.DRAFT.MESSAGE.X %,
|
||||
IM.DRAFT.MESSAGE.TOP.Y)
|
||||
(VERSOHEAD %, IM.PAGE.LEFTMARGIN %, IM.HEADER.Y)
|
||||
(VERSOHEADRULE %, IM.PAGE.LEFTMARGIN %, IM.HEADER.RULE.Y)
|
||||
(VERSOFOOT %, IM.PAGE.LEFTMARGIN %, IM.FOOTER.Y)
|
||||
(VERSOFOOTRULE %, IM.PAGE.LEFTMARGIN %, IM.FOOTER.RULE.Y)
|
||||
(DRAFTMESSAGE %, IM.DRAFT.MESSAGE.X %,
|
||||
IM.DRAFT.MESSAGE.BOTTOM.Y]
|
||||
NIL `((DRAFTMESSAGE ,IM.DRAFT.MESSAGE.X ,IM.DRAFT.MESSAGE.TOP.Y)
|
||||
(VERSOHEAD ,IM.PAGE.LEFTMARGIN ,IM.HEADER.Y)
|
||||
(VERSOHEADRULE ,IM.PAGE.LEFTMARGIN ,IM.HEADER.RULE.Y)
|
||||
(VERSOFOOT ,IM.PAGE.LEFTMARGIN ,IM.FOOTER.Y)
|
||||
(VERSOFOOTRULE ,IM.PAGE.LEFTMARGIN ,IM.FOOTER.RULE.Y)
|
||||
(DRAFTMESSAGE ,IM.DRAFT.MESSAGE.X
|
||||
,IM.DRAFT.MESSAGE.BOTTOM.Y]
|
||||
(TEDIT.SINGLE.PAGEFORMAT NIL NIL NIL NIL NIL IM.PAGE.LEFTMARGIN
|
||||
IM.PAGE.RIGHTMARGIN IM.PAGE.TOPMARGIN IM.PAGE.BOTTOMMARGIN 1 NIL
|
||||
NIL `((DRAFTMESSAGE %, IM.DRAFT.MESSAGE.X %,
|
||||
IM.DRAFT.MESSAGE.TOP.Y)
|
||||
(RECTOHEAD %, IM.PAGE.LEFTMARGIN %, IM.HEADER.Y)
|
||||
(RECTOHEADRULE %, IM.PAGE.LEFTMARGIN %, IM.HEADER.RULE.Y)
|
||||
(RECTOFOOT %, IM.PAGE.LEFTMARGIN %, IM.FOOTER.Y)
|
||||
(RECTOFOOTRULE %, IM.PAGE.LEFTMARGIN %, IM.FOOTER.RULE.Y)
|
||||
(DRAFTMESSAGE %, IM.DRAFT.MESSAGE.X %,
|
||||
IM.DRAFT.MESSAGE.BOTTOM.Y]
|
||||
NIL `((DRAFTMESSAGE ,IM.DRAFT.MESSAGE.X ,IM.DRAFT.MESSAGE.TOP.Y)
|
||||
(RECTOHEAD ,IM.PAGE.LEFTMARGIN ,IM.HEADER.Y)
|
||||
(RECTOHEADRULE ,IM.PAGE.LEFTMARGIN ,IM.HEADER.RULE.Y)
|
||||
(RECTOFOOT ,IM.PAGE.LEFTMARGIN ,IM.FOOTER.Y)
|
||||
(RECTOFOOTRULE ,IM.PAGE.LEFTMARGIN ,IM.FOOTER.RULE.Y)
|
||||
(DRAFTMESSAGE ,IM.DRAFT.MESSAGE.X
|
||||
,IM.DRAFT.MESSAGE.BOTTOM.Y]
|
||||
|
||||
(* * dump default char and para looks for whole document --
|
||||
and looks that should be different should be specified in the fns)
|
||||
(* ;;; "dump default char and para looks for whole document -- and looks that should be different should be specified in the fns")
|
||||
|
||||
(TEDIT.LOOKS IM.OUTFILE IM.TEXT.FONT 1 (GETFILEINFO IM.OUTFILE 'LENGTH))
|
||||
(TEDIT.PARALOOKS IM.OUTFILE
|
||||
[COND
|
||||
(DEFAULT.PARALOOKS)
|
||||
(T `(QUAD JUSTIFIED 1STLEFTMARGIN %, IM.TEXT.LEFTMARGIN LEFTMARGIN %,
|
||||
IM.TEXT.LEFTMARGIN RIGHTMARGIN %, IM.TEXT.RIGHTMARGIN LINELEADING 0
|
||||
PARALEADING 5 POSTPARALEADING 0]
|
||||
(TEDIT.PARALOOKS IM.OUTFILE [COND
|
||||
(DEFAULT.PARALOOKS)
|
||||
(T `(QUAD JUSTIFIED 1STLEFTMARGIN ,IM.TEXT.LEFTMARGIN
|
||||
LEFTMARGIN ,IM.TEXT.LEFTMARGIN RIGHTMARGIN
|
||||
,IM.TEXT.RIGHTMARGIN LINELEADING 0 PARALEADING 5
|
||||
POSTPARALEADING 0]
|
||||
1
|
||||
(GETFILEINFO IM.OUTFILE 'LENGTH))
|
||||
|
||||
(* must reverse list because the order of some char and paragraph looks is
|
||||
significant << earlier looks are overridden by later ones >>)
|
||||
(* ;; "must reverse list because the order of some char and paragraph looks is significant << earlier looks are overridden by later ones >>")
|
||||
|
||||
(SETQ IM.CHARLOOKS (DREVERSE IM.CHARLOOKS))
|
||||
(SETQ IM.PARALOOKS (DREVERSE IM.PARALOOKS))
|
||||
@@ -2309,83 +2296,75 @@ page edge.)
|
||||
(DEFINEQ
|
||||
|
||||
(TRANSLATE.DUMPOUT
|
||||
[LAMBDA (DUMPOUT.ARGS) (* mjs "18-Sep-85 16:17")
|
||||
[LAMBDA (DUMPOUT.ARGS) (* mjs "18-Sep-85 16:17")
|
||||
|
||||
(* * this function translates the DUMPOUT macro form into a PROGN form that
|
||||
calls a series of functions, such as DUMP.)
|
||||
(* * this function translates the DUMPOUT macro form into a PROGN form that calls
|
||||
a series of functions, such as DUMP.)
|
||||
|
||||
(* * the indentation code has been commented out ---
|
||||
will try indenting everything to same, unless specified otherwise with
|
||||
PARALOOKS)
|
||||
will try indenting everything to same, unless specified otherwise with PARALOOKS)
|
||||
|
||||
(PROG ((DUMPOUT.FORMS NIL)
|
||||
(DUMPOUT.UNDO NIL)
|
||||
COMM COMM.ARG)
|
||||
[while DUMPOUT.ARGS do (SELECTQ (SETQ COMM (pop DUMPOUT.ARGS))
|
||||
(NIL)
|
||||
((CR TAB START.PARA DUMP.FOOTNOTES START.SUPER START.SUB
|
||||
END.SUPER END.SUB)
|
||||
(* just pass these atoms as commands
|
||||
to DUMP)
|
||||
(push DUMPOUT.FORMS (LIST 'DUMP.FORMAT
|
||||
(KWOTE COMM))))
|
||||
((FLUSH.ARG TRIVIAL.ARG DUMP.ARG)
|
||||
(push DUMPOUT.FORMS (LIST COMM)))
|
||||
(INDENT
|
||||
(NIL)
|
||||
((CR TAB START.PARA DUMP.FOOTNOTES START.SUPER START.SUB
|
||||
END.SUPER END.SUB) (* just pass these atoms as commands
|
||||
to DUMP)
|
||||
(push DUMPOUT.FORMS (LIST 'DUMP.FORMAT (KWOTE COMM))))
|
||||
((FLUSH.ARG TRIVIAL.ARG DUMP.ARG)
|
||||
(push DUMPOUT.FORMS (LIST COMM)))
|
||||
(INDENT
|
||||
|
||||
(* * SELECTQ (SETQ COMM.ARG (pop DUMPOUT.ARGS))
|
||||
(INIT (push DUMPOUT.FORMS (QUOTE (PUT.MY.PROP
|
||||
(QUOTE INDENT) INITIAL.INDENT))) (push DUMPOUT.FORMS
|
||||
(QUOTE (PUT.MY.PROP (QUOTE WIDTH) INITIAL.WIDTH)))
|
||||
(push DUMPOUT.FORMS (QUOTE (DUMP.FORMAT
|
||||
(QUOTE INDENT) INITIAL.INDENT)))) (NONE
|
||||
(push DUMPOUT.FORMS (QUOTE (PUT.MY.PROP
|
||||
(QUOTE INDENT) (QUOTE NONE)))) (push DUMPOUT.FORMS
|
||||
(QUOTE (PUT.MY.PROP (QUOTE WIDTH) (ANC.WIDTH))))
|
||||
(push DUMPOUT.FORMS (QUOTE (DUMP.FORMAT
|
||||
(QUOTE INDENT) (QUOTE NONE))))) (push DUMPOUT.FORMS
|
||||
(LIST (QUOTE (LAMBDA (I) (PUT.MY.PROP (QUOTE INDENT)
|
||||
(IPLUS (ANC.INDENT) I)) (PUT.MY.PROP (QUOTE WIDTH)
|
||||
(IDIFFERENCE (ANC.WIDTH) I)) (DUMP.FORMAT
|
||||
(QUOTE INDENT) (IPLUS (ANC.INDENT) I)))) COMM.ARG)))
|
||||
(INIT (push DUMPOUT.FORMS (QUOTE (PUT.MY.PROP
|
||||
(QUOTE INDENT) INITIAL.INDENT))) (push DUMPOUT.FORMS
|
||||
(QUOTE (PUT.MY.PROP (QUOTE WIDTH) INITIAL.WIDTH)))
|
||||
(push DUMPOUT.FORMS (QUOTE (DUMP.FORMAT (QUOTE INDENT) INITIAL.INDENT))))
|
||||
(NONE (push DUMPOUT.FORMS (QUOTE (PUT.MY.PROP
|
||||
(QUOTE INDENT) (QUOTE NONE)))) (push DUMPOUT.FORMS
|
||||
(QUOTE (PUT.MY.PROP (QUOTE WIDTH) (ANC.WIDTH))))
|
||||
(push DUMPOUT.FORMS (QUOTE (DUMP.FORMAT (QUOTE INDENT)
|
||||
(QUOTE NONE))))) (push DUMPOUT.FORMS (LIST
|
||||
(QUOTE (LAMBDA (I) (PUT.MY.PROP (QUOTE INDENT)
|
||||
(IPLUS (ANC.INDENT) I)) (PUT.MY.PROP (QUOTE WIDTH)
|
||||
(IDIFFERENCE (ANC.WIDTH) I)) (DUMP.FORMAT
|
||||
(QUOTE INDENT) (IPLUS (ANC.INDENT) I)))) COMM.ARG)))
|
||||
|
||||
(* * push DUMPOUT.UNDO (QUOTE INDENT))
|
||||
|
||||
(SETQ COMM.ARG (pop DUMPOUT.ARGS)))
|
||||
(WIDTH (push DUMPOUT.FORMS
|
||||
(LIST 'PUT.MY.PROP (KWOTE 'WIDTH)
|
||||
(pop DUMPOUT.ARGS))))
|
||||
(FONT (SETQ COMM.ARG (pop DUMPOUT.ARGS))
|
||||
[push DUMPOUT.FORMS
|
||||
(LIST 'DUMP.FORMAT (KWOTE 'FONT)
|
||||
(COND
|
||||
((LISTGET IM.TEDIT.FONT.DEFS
|
||||
COMM.ARG)
|
||||
(KWOTE COMM.ARG))
|
||||
(T COMM.ARG]
|
||||
(push DUMPOUT.UNDO 'FONT))
|
||||
(PARALOOKS (push DUMPOUT.FORMS
|
||||
(LIST 'DUMP.FORMAT (KWOTE 'PARALOOKS)
|
||||
(pop DUMPOUT.ARGS))))
|
||||
(DUMP.CHARS (push DUMPOUT.FORMS
|
||||
(LIST (FUNCTION IM.DUMP.CHARS)
|
||||
(SETQ COMM.ARG (pop DUMPOUT.ARGS)))
|
||||
(WIDTH (push DUMPOUT.FORMS (LIST 'PUT.MY.PROP
|
||||
(KWOTE 'WIDTH)
|
||||
(pop DUMPOUT.ARGS))))
|
||||
(push DUMPOUT.FORMS (LIST 'DUMP.FORMAT
|
||||
(KWOTE 'TEXT)
|
||||
(LIST 'MAKE.SAVE COMM]
|
||||
[for X in DUMPOUT.UNDO do (push DUMPOUT.FORMS (LIST 'DUMP.FORMAT
|
||||
(KWOTE 'UNDO)
|
||||
(KWOTE X]
|
||||
(FONT (SETQ COMM.ARG (pop DUMPOUT.ARGS))
|
||||
[push DUMPOUT.FORMS (LIST 'DUMP.FORMAT (KWOTE 'FONT)
|
||||
(COND
|
||||
((LISTGET IM.TEDIT.FONT.DEFS
|
||||
COMM.ARG)
|
||||
(KWOTE COMM.ARG))
|
||||
(T COMM.ARG]
|
||||
(push DUMPOUT.UNDO 'FONT))
|
||||
(PARALOOKS (push DUMPOUT.FORMS (LIST 'DUMP.FORMAT
|
||||
(KWOTE 'PARALOOKS)
|
||||
(pop DUMPOUT.ARGS))))
|
||||
(DUMP.CHARS (push DUMPOUT.FORMS (LIST (FUNCTION IM.DUMP.CHARS)
|
||||
(pop DUMPOUT.ARGS))))
|
||||
(push DUMPOUT.FORMS (LIST 'DUMP.FORMAT (KWOTE 'TEXT)
|
||||
(LIST 'MAKE.SAVE COMM]
|
||||
[for X in DUMPOUT.UNDO do (push DUMPOUT.FORMS (LIST 'DUMP.FORMAT (KWOTE 'UNDO)
|
||||
(KWOTE X]
|
||||
|
||||
(* * push DUMPOUT.FORMS (QUOTE (PUT.MY.PROP
|
||||
(QUOTE INDENT) DUMPOUT.SAVE.INDENT)))
|
||||
(QUOTE INDENT) DUMPOUT.SAVE.INDENT)))
|
||||
|
||||
(* * push DUMPOUT.FORMS (QUOTE (PUT.MY.PROP
|
||||
(QUOTE WIDTH) DUMPOUT.SAVE.WIDTH)))
|
||||
(QUOTE WIDTH) DUMPOUT.SAVE.WIDTH)))
|
||||
|
||||
(* * RETURN (APPEND (QUOTE (PROG ((DUMPOUT.SAVE.INDENT
|
||||
(GET.MY.PROP (QUOTE INDENT))) (DUMPOUT.SAVE.WIDTH
|
||||
(GET.MY.PROP (QUOTE WIDTH)))))) (DREVERSE DUMPOUT.FORMS)))
|
||||
(GET.MY.PROP (QUOTE INDENT))) (DUMPOUT.SAVE.WIDTH
|
||||
(GET.MY.PROP (QUOTE WIDTH)))))) (DREVERSE DUMPOUT.FORMS)))
|
||||
|
||||
(RETURN (CONS 'PROGN (DREVERSE DUMPOUT.FORMS])
|
||||
|
||||
@@ -2408,25 +2387,24 @@ page edge.)
|
||||
|
||||
(PUTPROPS SAVE.DUMPOUT MACRO (X (TRANSLATE.SAVE.DUMPOUT X)))
|
||||
)
|
||||
(PUTPROPS IMTEDIT COPYRIGHT ("Xerox Corporation" 1983 1984 1985 1986 1991))
|
||||
(DECLARE%: DONTCOPY
|
||||
(FILEMAP (NIL (10773 38278 (IM.TEDIT 10783 . 12464) (DUMP 12466 . 14761) (DUMP.HEADERS.FOOTERS 14763
|
||||
. 17129) (DUMP.HRULE 17131 . 18282) (CHANGE.FONT 18284 . 19478) (IM.BOUT.IMAGEOBJ 19480 . 19803) (
|
||||
IM.TEDIT.DUMP.COMMANDS 19805 . 23358) (IM.TEDIT.DUMP.FOOTNOTES 23360 . 23801) (IM.TEDIT.DUMP.PARA
|
||||
23803 . 24577) (INDEXX.PARSE.TYPE 24579 . 25874) (FORMAT.DEF 25876 . 28007) (FORMAT.LISPWORD 28009 .
|
||||
28160) (MAKE.IM.DOCUMENT 28162 . 37133) (PRINT.NOTE 37135 . 37349) (SEND.INFO 37351 . 38276)) (38387
|
||||
42405 (IM.VRULE.DISPLAYFN 38397 . 38721) (CREATE.VRULE.OBJECT 38723 . 40503) (PRINT.VRULES.ON.PAGE
|
||||
40505 . 42403)) (42563 47318 (IM.FOLIO.DISPLAYFN 42573 . 43251) (IM.FOLIO.SIZEFN 43253 . 44102) (
|
||||
CREATE.FOLIO.OBJECT 44104 . 45650) (GET.FOLIO.STRING 45652 . 47316)) (47450 93690 (ARG#TOPROG 47460 .
|
||||
47599) (BIGLISPCODE#TOPROG 47601 . 48837) (BRACKET#TOPROG 48839 . 49003) (CHAPTER#TOPROG 49005 . 51686
|
||||
) (COMMENT#TOPROG 51688 . 52240) (DEF#TOPROG 52242 . 55577) (FIGURE#TOPROG 55579 . 56923) (FN#TOPROG
|
||||
56925 . 57322) (FNDEF#TOPROG 57324 . 61216) (FOOT#TOPROG 61218 . 61759) (INCLUDE#TOPROG 61761 . 62076)
|
||||
(INDEX#TOPROG 62078 . 63168) (INDEXX#TOPROG 63170 . 65251) (IT#TOPROG 65253 . 65394) (LBRACKET#TOPROG
|
||||
65396 . 65550) (LISP#TOPROG 65552 . 65693) (LISPCODE#TOPROG 65695 . 66814) (LISPWORD#TOPROG 66816 .
|
||||
67556) (LIST#TOPROG 67558 . 71980) (MACDEF#TOPROG 71982 . 73160) (NOTE#TOPROG 73162 . 73842) (
|
||||
PRINT.SPECIAL.CHARS#TOPROG 73844 . 74821) (PROPDEF#TOPROG 74823 . 75100) (RBRACKET#TOPROG 75102 .
|
||||
75256) (REF#TOPROG 75258 . 83097) (RM#TOPROG 83099 . 83237) (SUB#TOPROG 83239 . 83387) (SUBSEC#TOPROG
|
||||
83389 . 87892) (SUPER#TOPROG 87894 . 88048) (TABLE#TOPROG 88050 . 92002) (TAG#TOPROG 92004 . 92271) (
|
||||
TERM#TOPROG 92273 . 92586) (VAR#TOPROG 92588 . 92991) (VARDEF#TOPROG 92993 . 93688)) (111336 116764 (
|
||||
TRANSLATE.DUMPOUT 111346 . 116363) (TRANSLATE.SAVE.DUMPOUT 116365 . 116762)))))
|
||||
(FILEMAP (NIL (10668 38115 (IM.TEDIT 10678 . 12359) (DUMP 12361 . 14656) (DUMP.HEADERS.FOOTERS 14658
|
||||
. 17024) (DUMP.HRULE 17026 . 18177) (CHANGE.FONT 18179 . 19373) (IM.BOUT.IMAGEOBJ 19375 . 19698) (
|
||||
IM.TEDIT.DUMP.COMMANDS 19700 . 23253) (IM.TEDIT.DUMP.FOOTNOTES 23255 . 23696) (IM.TEDIT.DUMP.PARA
|
||||
23698 . 24472) (INDEXX.PARSE.TYPE 24474 . 25769) (FORMAT.DEF 25771 . 27902) (FORMAT.LISPWORD 27904 .
|
||||
28055) (MAKE.IM.DOCUMENT 28057 . 36970) (PRINT.NOTE 36972 . 37186) (SEND.INFO 37188 . 38113)) (38224
|
||||
42242 (IM.VRULE.DISPLAYFN 38234 . 38558) (CREATE.VRULE.OBJECT 38560 . 40340) (PRINT.VRULES.ON.PAGE
|
||||
40342 . 42240)) (42400 47155 (IM.FOLIO.DISPLAYFN 42410 . 43088) (IM.FOLIO.SIZEFN 43090 . 43939) (
|
||||
CREATE.FOLIO.OBJECT 43941 . 45487) (GET.FOLIO.STRING 45489 . 47153)) (47287 93527 (ARG#TOPROG 47297 .
|
||||
47436) (BIGLISPCODE#TOPROG 47438 . 48674) (BRACKET#TOPROG 48676 . 48840) (CHAPTER#TOPROG 48842 . 51523
|
||||
) (COMMENT#TOPROG 51525 . 52077) (DEF#TOPROG 52079 . 55414) (FIGURE#TOPROG 55416 . 56760) (FN#TOPROG
|
||||
56762 . 57159) (FNDEF#TOPROG 57161 . 61053) (FOOT#TOPROG 61055 . 61596) (INCLUDE#TOPROG 61598 . 61913)
|
||||
(INDEX#TOPROG 61915 . 63005) (INDEXX#TOPROG 63007 . 65088) (IT#TOPROG 65090 . 65231) (LBRACKET#TOPROG
|
||||
65233 . 65387) (LISP#TOPROG 65389 . 65530) (LISPCODE#TOPROG 65532 . 66651) (LISPWORD#TOPROG 66653 .
|
||||
67393) (LIST#TOPROG 67395 . 71817) (MACDEF#TOPROG 71819 . 72997) (NOTE#TOPROG 72999 . 73679) (
|
||||
PRINT.SPECIAL.CHARS#TOPROG 73681 . 74658) (PROPDEF#TOPROG 74660 . 74937) (RBRACKET#TOPROG 74939 .
|
||||
75093) (REF#TOPROG 75095 . 82934) (RM#TOPROG 82936 . 83074) (SUB#TOPROG 83076 . 83224) (SUBSEC#TOPROG
|
||||
83226 . 87729) (SUPER#TOPROG 87731 . 87885) (TABLE#TOPROG 87887 . 91839) (TAG#TOPROG 91841 . 92108) (
|
||||
TERM#TOPROG 92110 . 92423) (VAR#TOPROG 92425 . 92828) (VARDEF#TOPROG 92830 . 93525)) (111173 116115 (
|
||||
TRANSLATE.DUMPOUT 111183 . 115714) (TRANSLATE.SAVE.DUMPOUT 115716 . 116113)))))
|
||||
STOP
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
|
||||
(FILECREATED "19-Jan-2023 12:44:20" {DSK}<home>frank>il>medley>gmedley>greetfiles>APPS-INIT.;9 21022
|
||||
(FILECREATED "25-Feb-2024 13:56:23" {DSK}<home>frank>il>medley>gmedley>greetfiles>APPS-INIT.;17 23321
|
||||
|
||||
:CHANGES-TO (VARS APPS-INITCOMS)
|
||||
(FNS Apps.DoInit)
|
||||
(FNS Apps.DoInit Apps.AroundExitFn)
|
||||
|
||||
:PREVIOUS-DATE "19-Jan-2023 11:57:40" {DSK}<home>frank>il>medley>gmedley>greetfiles>APPS-INIT.;8
|
||||
)
|
||||
:PREVIOUS-DATE "25-Feb-2024 13:14:02"
|
||||
{DSK}<home>frank>il>medley>gmedley>greetfiles>APPS-INIT.;16)
|
||||
|
||||
|
||||
(PRETTYCOMPRINT APPS-INITCOMS)
|
||||
@@ -17,8 +17,9 @@
|
||||
(GLOBALVARS Apps.NotecardsActivated Apps.RoomsActivated)
|
||||
(INITVARS (Apps.NotecardsActivated NIL)
|
||||
(Apps.RoomsActivated NIL))
|
||||
(FNS Apps.InitNotecards Apps.DoInit Apps.CreateButtons Apps.CreateLabel Apps.ActivateCLOS
|
||||
Apps.ActivateRooms Apps.ShowDoc XCL-USER::EXEC_INTERLISP)
|
||||
(FNS Apps.InitNotecards Apps.SetUpNOTECARDSDIRECTORIES Apps.DoInit Apps.CreateButtons
|
||||
Apps.CreateLabel Apps.ActivateCLOS Apps.ActivateRooms Apps.ShowDoc
|
||||
XCL-USER::EXEC_INTERLISP Apps.AroundExitFn)
|
||||
(DECLARE%: DONTEVAL@LOAD DOCOPY (P (Apps.DoInit)))
|
||||
(DECLARE%: FIRST DONTEVAL@LOAD DOCOPY (P (BKSYSBUF " "])
|
||||
|
||||
@@ -91,6 +92,33 @@
|
||||
(if (NOT DoNotRefreshButtons)
|
||||
then (Apps.CreateButtons])
|
||||
|
||||
(Apps.SetUpNOTECARDSDIRECTORIES
|
||||
[LAMBDA NIL
|
||||
|
||||
(* ;; "Find the location of the Notecards directory and call NC.SetUpNOTECARDSDIRECTORIES.")
|
||||
|
||||
(* ;; " This is needed to make sure that lazy loading of Notecard types works.")
|
||||
|
||||
(LET* [(LOC1 (CONCAT MEDLEYDIR "notecards>"))
|
||||
(LOC2 (CONCAT MEDLEYDIR "..>notecards>"))
|
||||
(LOC3 (CONCAT MEDLEYDIR "..>..>notecards>"))
|
||||
(NCDIR (for LOC in (LIST LOC1 LOC2 LOC3) thereis (OR (INFILEP (CONCAT LOC
|
||||
"system>NOTECARDS"))
|
||||
(INFILEP (CONCAT LOC
|
||||
"system>NOTECARDS.LCOM"
|
||||
]
|
||||
(if NCDIR
|
||||
then [SETQ NCDIR (OR (INFILEP (CONCAT NCDIR "system>NOTECARDS"))
|
||||
(INFILEP (CONCAT NCDIR "system>NOTECARDS.LCOM"]
|
||||
(SETQ NCDIR (SUBSTRING NCDIR 1 (IDIFFERENCE (STRPOS "system>NOTECARDS" NCDIR)
|
||||
1)))
|
||||
(NC.SetUpNOTECARDSDIRECTORIES NCDIR)
|
||||
T
|
||||
else (PRIN1 "Warning: Notecards directory could not be found." T)
|
||||
(PRIN1 "Hence, NOTECARDSDIRECTORIES is probably not set correctly" T)
|
||||
(PRIN1 "and Notecards will not work properly." T)
|
||||
NIL])
|
||||
|
||||
(Apps.DoInit
|
||||
[LAMBDA NIL
|
||||
|
||||
@@ -170,7 +198,20 @@
|
||||
|
||||
(* ;; " create the Documentation and ROOMS, Notecards Activation Buttons, if needed")
|
||||
|
||||
(Apps.CreateButtons T])
|
||||
(Apps.CreateButtons T)
|
||||
|
||||
(* ;; " Make sure Notecards doesn't try to load its HASH file in NC.PostGreet")
|
||||
|
||||
(SETTOPVAL '\NC.SourceAccessFlg NIL)
|
||||
|
||||
(* ;; "Setup NOTECARDSDIRECTORIES.")
|
||||
|
||||
(Apps.SetUpNOTECARDSDIRECTORIES)
|
||||
|
||||
(* ;; "Add AROUNDEXITFN to ensure NOTECARDSDIRECTORIES get reset after LOGOUT, etc.")
|
||||
|
||||
(SETQ AROUNDEXITFNS (LSUBST '(MEDLEY-INIT-VARS Apps.AroundExitFn)
|
||||
'MEDLEY-INIT-VARS AROUNDEXITFNS])
|
||||
|
||||
(Apps.CreateButtons
|
||||
[LAMBDA (DoDocsToo) (* ; "Edited 13-Dec-2022 12:51 by frank")
|
||||
@@ -363,6 +404,11 @@
|
||||
YCOORD _ (IDIFFERENCE SCREENHEIGHT 460]
|
||||
(XCL:SET-DEFAULT-EXEC-TYPE 'INTERLISP)
|
||||
(XCL:SET-EXEC-TYPE 'INTERLISP])
|
||||
|
||||
(Apps.AroundExitFn
|
||||
[LAMBDA (EVENT)
|
||||
(if (MEMB EVENT '(AFTERLOGOUT AFTERSYSOUT AFTERSAVEVM))
|
||||
then (Apps.SetUpNOTECARDSDIRECTORIES])
|
||||
)
|
||||
(DECLARE%: DONTEVAL@LOAD DOCOPY
|
||||
|
||||
@@ -373,8 +419,8 @@
|
||||
(BKSYSBUF " ")
|
||||
)
|
||||
(DECLARE%: DONTCOPY
|
||||
(FILEMAP (NIL (1146 20888 (Apps.InitNotecards 1156 . 5018) (Apps.DoInit 5020 . 8119) (
|
||||
Apps.CreateButtons 8121 . 16945) (Apps.CreateLabel 16947 . 17757) (Apps.ActivateCLOS 17759 . 19108) (
|
||||
Apps.ActivateRooms 19110 . 19961) (Apps.ShowDoc 19963 . 20112) (XCL-USER::EXEC_INTERLISP 20114 . 20886
|
||||
)))))
|
||||
(FILEMAP (NIL (1229 23187 (Apps.InitNotecards 1239 . 5101) (Apps.SetUpNOTECARDSDIRECTORIES 5103 . 6658
|
||||
) (Apps.DoInit 6660 . 10257) (Apps.CreateButtons 10259 . 19083) (Apps.CreateLabel 19085 . 19895) (
|
||||
Apps.ActivateCLOS 19897 . 21246) (Apps.ActivateRooms 21248 . 22099) (Apps.ShowDoc 22101 . 22250) (
|
||||
XCL-USER::EXEC_INTERLISP 22252 . 23024) (Apps.AroundExitFn 23026 . 23185)))))
|
||||
STOP
|
||||
|
||||
6
installers/cygwin/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
medley*.exe
|
||||
medley*.tgz
|
||||
maiko*.tgz
|
||||
setup-x86_64.exe
|
||||
medley.bat
|
||||
|
||||
BIN
installers/cygwin/Medley.ico
Normal file
|
After Width: | Height: | Size: 155 KiB |
165
installers/cygwin/editpath/EditPath.iss
Normal file
@@ -0,0 +1,165 @@
|
||||
; Copyright (C) 2021-2023 by Bill Stewart (bstewart at iname.com)
|
||||
;
|
||||
; This program is free software; you can redistribute it and/or modify it under
|
||||
; the terms of the GNU Lesser General Public License as published by the Free
|
||||
; Software Foundation; either version 3 of the License, or (at your option) any
|
||||
; later version.
|
||||
;
|
||||
; This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
; FOR A PARTICULAR PURPOSE. See the GNU General Lesser Public License for more
|
||||
; details.
|
||||
;
|
||||
; You should have received a copy of the GNU Lesser General Public License
|
||||
; along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
|
||||
; Sample Inno Setup (https://www.jrsoftware.org/isinfo.php) script
|
||||
; demonstrating use of PathMgr.dll.
|
||||
;
|
||||
; This script uses PathMgr.dll in the following ways:
|
||||
; * Copies PathMgr.dll to the target machine (required for uninstall)
|
||||
; * Defines a task in [Tasks] that should modify the Path
|
||||
; * Imports the AddDirToPath() DLL function at setup time
|
||||
; * Imports the RemoveDirFromPath() DLL function at uninstall time
|
||||
; * Stores task state as custom setting using RegisterPreviousData()
|
||||
; * Retrieves task state custom setting during setup and uninstall initialize
|
||||
; * At post install, adds app dir to Path if task selected
|
||||
; * At uninstall, removes dir from Path if custom setting present
|
||||
; * Unloads and deletes DLL and removes app dir at uninstall deinitialize
|
||||
|
||||
#if Ver < EncodeVer(6,0,0,0)
|
||||
#error This script requires Inno Setup 6 or later
|
||||
#endif
|
||||
|
||||
[Setup]
|
||||
AppId={{A17D2D05-C729-4F2A-9CC7-E04906C5A842}
|
||||
AppName=EditPath
|
||||
AppVersion=4.0.4.0
|
||||
UsePreviousAppDir=false
|
||||
DefaultDirName={autopf}\EditPath
|
||||
Uninstallable=true
|
||||
OutputDir=.
|
||||
OutputBaseFilename=EditPath_Setup
|
||||
ArchitecturesInstallIn64BitMode=x64
|
||||
PrivilegesRequired=none
|
||||
PrivilegesRequiredOverridesAllowed=dialog
|
||||
|
||||
[Files]
|
||||
; Install PathMgr.dll for use with both setup and uninstall; use
|
||||
; uninsneveruninstall flag because DeinitializeSetup() will delete after
|
||||
; unloading the DLL; install the 32-bit version of PathMgr.dll because both
|
||||
; setup and uninstall executables are 32-bit
|
||||
Source: "i386\PathMgr.dll"; DestDir: "{app}"; Flags: uninsneveruninstall
|
||||
|
||||
; Other files to install on target system
|
||||
Source: "i386\EditPath.exe"; DestDir: "{app}"; Check: not Is64BitInstallMode()
|
||||
Source: "x86_64\EditPath.exe"; DestDir: "{app}"; Check: Is64BitInstallMode()
|
||||
Source: "EditPath.md"; DestDir: "{app}"
|
||||
|
||||
[Tasks]
|
||||
Name: modifypath; Description: "&Add to Path"
|
||||
|
||||
[Code]
|
||||
const
|
||||
MODIFY_PATH_TASK_NAME = 'modifypath'; // Specify name of task
|
||||
|
||||
var
|
||||
PathIsModified: Boolean; // Cache task selection from previous installs
|
||||
ApplicationUninstalled: Boolean; // Has application been uninstalled?
|
||||
|
||||
// Import AddDirToPath() at setup time ('files:' prefix)
|
||||
function DLLAddDirToPath(DirName: string; PathType, AddType: DWORD): DWORD;
|
||||
external 'AddDirToPath@files:PathMgr.dll stdcall setuponly';
|
||||
|
||||
// Import RemoveDirFromPath() at uninstall time ('{app}\' prefix)
|
||||
function DLLRemoveDirFromPath(DirName: string; PathType: DWORD): DWORD;
|
||||
external 'RemoveDirFromPath@{app}\PathMgr.dll stdcall uninstallonly';
|
||||
|
||||
// Wrapper for AddDirToPath() DLL function
|
||||
function AddDirToPath(const DirName: string): DWORD;
|
||||
var
|
||||
PathType, AddType: DWORD;
|
||||
begin
|
||||
// PathType = 0 - use system Path
|
||||
// PathType = 1 - use user Path
|
||||
// AddType = 0 - add to end of Path
|
||||
// AddType = 1 - add to beginning of Path
|
||||
if IsAdminInstallMode() then
|
||||
PathType := 0
|
||||
else
|
||||
PathType := 1;
|
||||
AddType := 0;
|
||||
result := DLLAddDirToPath(DirName, PathType, AddType);
|
||||
end;
|
||||
|
||||
// Wrapper for RemoveDirFromPath() DLL function
|
||||
function RemoveDirFromPath(const DirName: string): DWORD;
|
||||
var
|
||||
PathType: DWORD;
|
||||
begin
|
||||
// PathType = 0 - use system Path
|
||||
// PathType = 1 - use user Path
|
||||
if IsAdminInstallMode() then
|
||||
PathType := 0
|
||||
else
|
||||
PathType := 1;
|
||||
result := DLLRemoveDirFromPath(DirName, PathType);
|
||||
end;
|
||||
|
||||
procedure RegisterPreviousData(PreviousDataKey: Integer);
|
||||
begin
|
||||
// Store previous or current task selection as custom user setting
|
||||
if PathIsModified or WizardIsTaskSelected(MODIFY_PATH_TASK_NAME) then
|
||||
SetPreviousData(PreviousDataKey, MODIFY_PATH_TASK_NAME, 'true');
|
||||
end;
|
||||
|
||||
function InitializeSetup(): Boolean;
|
||||
begin
|
||||
result := true;
|
||||
// Was task selected during a previous install?
|
||||
PathIsModified := GetPreviousData(MODIFY_PATH_TASK_NAME, '') = 'true';
|
||||
end;
|
||||
|
||||
function InitializeUninstall(): Boolean;
|
||||
begin
|
||||
result := true;
|
||||
// Was task selected during a previous install?
|
||||
PathIsModified := GetPreviousData(MODIFY_PATH_TASK_NAME, '') = 'true';
|
||||
ApplicationUninstalled := false;
|
||||
end;
|
||||
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
if CurStep = ssPostInstall then
|
||||
begin
|
||||
// Add app directory to Path at post-install step if task selected
|
||||
if PathIsModified or WizardIsTaskSelected(MODIFY_PATH_TASK_NAME) then
|
||||
AddDirToPath(ExpandConstant('{app}'));
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
|
||||
begin
|
||||
if CurUninstallStep = usUninstall then
|
||||
begin
|
||||
// Remove app directory from path during uninstall if task was selected;
|
||||
// use variable because we can't use WizardIsTaskSelected() at uninstall
|
||||
if PathIsModified then
|
||||
RemoveDirFromPath(ExpandConstant('{app}'));
|
||||
end
|
||||
else if CurUninstallStep = usPostUninstall then
|
||||
begin
|
||||
ApplicationUninstalled := true;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure DeinitializeUninstall();
|
||||
begin
|
||||
if ApplicationUninstalled then
|
||||
begin
|
||||
// Unload and delete PathMgr.dll and remove app dir when uninstalling
|
||||
UnloadDLL(ExpandConstant('{app}\PathMgr.dll'));
|
||||
DeleteFile(ExpandConstant('{app}\PathMgr.dll'));
|
||||
RemoveDir(ExpandConstant('{app}'));
|
||||
end;
|
||||
end;
|
||||
118
installers/cygwin/editpath/EditPath.md
Normal file
@@ -0,0 +1,118 @@
|
||||
# EditPath
|
||||
|
||||
EditPath is a Windows console (text-based, command-line) program for managing the system Path and user Path.
|
||||
|
||||
# Author
|
||||
|
||||
Bill Stewart - bstewart at iname dot com
|
||||
|
||||
# License
|
||||
|
||||
EditPath.exe is covered by the GNU Lesser Public License (LPGL). See the file `LICENSE` for details.
|
||||
|
||||
# Download
|
||||
|
||||
https://github.com/Bill-Stewart/PathMgr/releases/
|
||||
|
||||
# Background
|
||||
|
||||
The system Path is found in the following location in the Windows registry:
|
||||
|
||||
Root: `HKEY_LOCAL_MACHINE`
|
||||
Subkey: `SYSTEM\CurrentControlSet\Control\Session Manager\Environment`
|
||||
Value name: `Path`
|
||||
|
||||
The current user Path is found in the following location in the registry:
|
||||
|
||||
Root: `HKEY_CURRENT_USER`
|
||||
Subkey: `Environment`
|
||||
Value name: `Path`
|
||||
|
||||
In both cases, the `Path` value is (or should be) the registry type `REG_EXPAND_SZ`, which means that it is a string that can contain values surrounded by `%` characters that Windows will automatically expand to environment variable values. (For example, `%SystemRoot%` will be expanded to `C:\Windows` on most systems.)
|
||||
|
||||
The `Path` value contains a `;`-delimited list of directory names that the system should search for executables, library files, scripts, etc. Windows appends the content of the current user Path to the system Path and expands the environment variable references. The resulting string is set as the `Path` environment variable for processes.
|
||||
|
||||
EditPath provides a command-line interface for managing the `Path` value in the system location (in `HKEY_LOCAL_MACHINE`) and the current user location (in `HKEY_CURRENT_USER`).
|
||||
|
||||
# Usage
|
||||
|
||||
The following describes the command-line usage for the program. Parameters are case-sensitive.
|
||||
|
||||
**EditPath** [_options_] _type_ _action_
|
||||
|
||||
You must specify only one of the following _type_ parameters:
|
||||
|
||||
| _type_ | Abbreviation | Description
|
||||
| ------- | ------------ | -----------
|
||||
| **--system** | **-s** | Specifies the system Path
|
||||
| **--user** | **-u** | Specifies the user Path
|
||||
|
||||
You must specify only one of the following _action_ parameters:
|
||||
|
||||
| _action_ | Abbreviation | Description
|
||||
| -------- | ------------ | -----------
|
||||
| **--list** | **-l** | Lists directories in Path
|
||||
| **--test "**_dirname_**"** | **-t "**_dirname_**"** | Tests if directory exists in Path
|
||||
| **--add "**_dirname_**"** | **-a "**_dirname_**"** | Adds directory to Path
|
||||
| **--remove "**_dirname_**"** | **-r "**_dirname_**"** | Removes directory from Path
|
||||
|
||||
The following parameters are optional:
|
||||
|
||||
| _options_ | Abbreviation | Description
|
||||
| --------- | ------------ | -----------
|
||||
| **--quiet** | **-q** | Suppresses result messages
|
||||
| **--expand** | **-x** | Expands environment variables (**--list** only)
|
||||
| **--beginning** | **-b** | Adds to beginning of Path (**--add** only)
|
||||
|
||||
# Exit Codes
|
||||
|
||||
The following table lists typical exit codes when not using **--test** (**-t**).
|
||||
|
||||
| Exit Code | Description
|
||||
| --------- | -----------
|
||||
| 0 | No errors
|
||||
| 2 | The Path value is not present in the registry
|
||||
| 3 | The specified directory does not exist in the Path
|
||||
| 5 | Access is denied
|
||||
| 87 | Incorrect parameter(s)
|
||||
| 183 | The specified directory already exists in the Path
|
||||
|
||||
The following table lists typical exit codes when using **--test** (**-t**).
|
||||
|
||||
| Exit Code | Description
|
||||
| --------- | -----------
|
||||
| 1 | The specified directory exists in the unexpanded Path
|
||||
| 2 | The specified directory exists in the expanded Path
|
||||
| 3 | The specified directory does not exist in the Path
|
||||
|
||||
# Remarks
|
||||
|
||||
* Anything on the command line after **--test**, **--add**, or **--remove** is considered to be the argument for the parameter. To avoid ambiguity, specify the _action_ parameter last on the command line.
|
||||
|
||||
* Uexpanded vs. expanded refers to whether the environment variable references (i.e., names between `%` characters) are expanded after retrieving the Path value from the registry. For example, `%SystemRoot%` is unexpanded but `C:\Windows` is expanded.
|
||||
|
||||
* The **--add** (**-a**) parameter checks whether the specified directory exists in both the unexpanded and expanded copies of the Path before adding the directory. For example, if the environment variable `TESTAPP` is set to `C:\TestApp` and `%TESTAPP%` is in the Path, specifying `--add C:\TestApp` will return exit code 183 (i.e., the directory already exists in the Path) because `%TESTAPP%` expands to `C:\TestApp`.
|
||||
|
||||
* The **--remove** (**-r**) parameter does not expand environment variable references. For example, if the environment variable `TESTAPP` is set to `C:\TestApp` and `%TESTAPP%` is in the Path, specifying `--remove "C:\TestApp"` will return exit code 3 (i.e., the directory does not exist in the Path) because **--remove** does not expand `%TESTAPP%` to `C:\TestApp`. For the command to succeed, you would have to specify `--remove "%TESTAPP%"` instead.
|
||||
|
||||
* The program will exit with error code 87 if a parameter (or an argument to a parameter) is missing or not valid, if mutually exclusive parameters are specified, etc.
|
||||
|
||||
* The program will exit with error code 5 if the current user does not have permission to update the Path value in the registry (for example, if you try to update the system Path using a standard user account or an unelevated administrator account).
|
||||
|
||||
# Examples
|
||||
|
||||
1. `EditPath --expand --system --list`
|
||||
|
||||
This command outputs the directories in the system Path, with environment variables expanded. You can also write this command as `EditPath -x -s -l`.
|
||||
|
||||
2. `EditPath --user --add "%LOCALAPPDATA%\Programs\MyApp"`
|
||||
|
||||
Adds the specified directory name to the user Path.
|
||||
|
||||
3. `EditPath -s -r "C:\Program Files\MyApp\bin"`
|
||||
|
||||
Removes the specified directory from the system Path.
|
||||
|
||||
4. `EditPath -s --test "C:\Program Files (x86)\MyApp\bin"`
|
||||
|
||||
Returns an exit code of 3 if the specified directory is not in the system Path, 1 if the specified directory is in the unexpanded copy of the system Path, or 2 if the specified directory is in the expanded copy of the system Path.
|
||||
3
installers/cygwin/editpath/README.TXT
Normal file
@@ -0,0 +1,3 @@
|
||||
Editpath installed here is extracted from Release 1.04 from https://github.com/Bill-Stewart/PathMgr.
|
||||
|
||||
|
||||
BIN
installers/cygwin/editpath/i386/EditPath.exe
Normal file
BIN
installers/cygwin/editpath/x86_64/EditPath.exe
Normal file
128
installers/cygwin/makeflix.iss
Normal file
@@ -0,0 +1,128 @@
|
||||
; -- makeflix.iss --
|
||||
; fgh 2016-08-19
|
||||
|
||||
#define x86_or_x64 "x86"
|
||||
#define version "1.0.1"
|
||||
|
||||
#if x86_or_x64 == "x86"
|
||||
#define exe_dir "Win32"
|
||||
#else
|
||||
#define exe_dir "x64"
|
||||
#endif
|
||||
|
||||
[Setup]
|
||||
ArchitecturesAllowed={#x86_or_x64}
|
||||
AppName=Makeflix
|
||||
AppVersion={#version}
|
||||
AppPublisher=Lellan, Inc.
|
||||
AppPublisherURL=http://www.lellan.com/
|
||||
AppCopyright=Copyright (C) 2012-2017 Lellan, Inc.
|
||||
DefaultDirName={pf}\Lellan\Makeflix
|
||||
DefaultGroupName=Lellan
|
||||
UninstallDisplayIcon={app}\makeflix.exe
|
||||
Compression=lzma2
|
||||
SolidCompression=yes
|
||||
; "ArchitecturesInstallIn64BitMode=x64" requests that the install be
|
||||
; done in "64-bit mode" on x64, meaning it should use the native
|
||||
; 64-bit Program Files directory and the 64-bit view of the registry.
|
||||
ArchitecturesInstallIn64BitMode=x64
|
||||
; Source Dir is lellan/toolchain/makeflix/windows
|
||||
SourceDir="..\"
|
||||
OutputDir="deploy"
|
||||
OutputBaseFilename="makeflix_v{#version}_{#x86_or_x64}"
|
||||
SetupIconFile="..\images\Lellan_Logo_20130221.ico"
|
||||
LicenseFile="..\deploy\EULA.rtf"
|
||||
DisableWelcomePage=no
|
||||
|
||||
[Files]
|
||||
Source: "makeflix\{#exe_dir}\Release\makeflix.exe"; DestDir: "{app}"; DestName: "makeflix.exe"; Flags: ignoreversion
|
||||
Source: "deploy\DLLs\{#x86_or_x64}\Qt5Core.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "deploy\DLLs\{#x86_or_x64}\Qt5Gui.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "deploy\DLLs\{#x86_or_x64}\Qt5Widgets.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "deploy\DLLs\{#x86_or_x64}\Qt5Network.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "deploy\DLLs\{#x86_or_x64}\platforms\qwindows.dll"; DestDir: "{app}\platforms"; Flags: ignoreversion
|
||||
Source: "deploy\gstreamer\{#x86_or_x64}\*"; DestDir: "{app}\gstreamer"; Flags: recursesubdirs ignoreversion
|
||||
Source: "deploy\vc_redist\vc_redist.{#x86_or_x64}.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
|
||||
Source: "deploy\bonjour\Bonjour.{#x86_or_x64}.msi"; DestDir: "{tmp}" ; Flags: deleteafterinstall
|
||||
|
||||
Source: "..\deploy\Makeflix_Open_Source_Libraries.pdf"; DestDir: "{app}"
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\Makeflix"; Filename: "{app}\makeflix.exe"
|
||||
Name: "{group}\Uninstall Makeflix"; Filename: "{uninstallexe}"
|
||||
|
||||
|
||||
[Run]
|
||||
#define VCmsg "Installing Microsoft Visual C++ Redistributable ..."
|
||||
Filename: "{tmp}\vc_redist{#x86_or_x64}.exe"; StatusMsg: "{#VCmsg}"; Check: not VCinstalled
|
||||
#define BonjourMsg "Installing Apple Bonjour support ..."
|
||||
Filename: "msiexec"; Parameters: "/i {tmp}\Bonjour.{#x86_or_x64}.msi"; StatusMsg: "{#BonjourMsg}"; Check: not BonjourInstalled
|
||||
|
||||
[Registry]
|
||||
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\makeflix.exe"; ValueType: string; ValueName: "(Default)"; ValueData: "{app}\makeflix.exe"; Flags: uninsdeletekey
|
||||
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\makeflix.exe"; ValueType: string; ValueName: "Path"; ValueData: "{app}\gstreamer\bin"; Flags: uninsdeletekey
|
||||
|
||||
[Code]
|
||||
function VCinstalled: Boolean;
|
||||
// By Michael Weiner <mailto:spam@cogit.net>
|
||||
// Function for Inno Setup Compiler
|
||||
// 13 November 2015
|
||||
// Modified by Frank G Halasz to handle WOW case
|
||||
// 23 August 2016
|
||||
// Returns True if Microsoft Visual C++ Redistributable is installed, otherwise False.
|
||||
// The programmer may set the year of redistributable to find; see below.
|
||||
var
|
||||
names: TArrayOfString;
|
||||
i: Integer;
|
||||
dName, key, year, platfm: String;
|
||||
begin
|
||||
// Year of redistributable to find; leave null to find installation for any year.
|
||||
year := '2015';
|
||||
Result := False;
|
||||
if Is64BitInstallMode then
|
||||
begin
|
||||
platfm := 'x64';
|
||||
key := 'Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall';
|
||||
end
|
||||
else if not IsWin64 then
|
||||
begin
|
||||
platfm := 'x86';
|
||||
key := 'Software\Microsoft\Windows\CurrentVersion\Uninstall';
|
||||
end
|
||||
else
|
||||
begin
|
||||
platfm := 'x86';
|
||||
key := 'Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall';
|
||||
end;
|
||||
// Get an array of all of the uninstall subkey names.
|
||||
if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, key, names) then
|
||||
// Uninstall subkey names were found.
|
||||
begin
|
||||
i := 0
|
||||
while ((i < GetArrayLength(names)) and (Result = False)) do
|
||||
// The loop will end as soon as one instance of a Visual C++ redistributable is found.
|
||||
begin
|
||||
// For each uninstall subkey, look for a DisplayName value.
|
||||
// If not found, then the subkey name will be used instead.
|
||||
if not RegQueryStringValue(HKEY_LOCAL_MACHINE, key + '\' + names[i], 'DisplayName', dName) then
|
||||
dName := names[i];
|
||||
// See if the value contains both of the strings below.
|
||||
Result := (Pos(Trim('Visual C++ ' + year),dName) * Pos('Redistributable',dName) * Pos(platfm, dName) <> 0)
|
||||
i := i + 1;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function BonjourInstalled: Boolean;
|
||||
// Returns True if Apple Bonjour is installed, otherwise False.
|
||||
// Ignores date/version of Bonjour.
|
||||
begin
|
||||
Result := False;
|
||||
// If this key exists, then
|
||||
// bonjour services must already be installed
|
||||
if RegKeyExists(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\Bonjour Service') then
|
||||
// Uninstall subkey names were found.
|
||||
begin
|
||||
Result := True;
|
||||
end;
|
||||
end;
|
||||
85
installers/cygwin/medley.iss
Normal file
@@ -0,0 +1,85 @@
|
||||
;###############################################################################
|
||||
;#
|
||||
;# medley.iss - Inno Setup compiler script for creating a Windows
|
||||
;# installer for cygwin and Medley on cygwin
|
||||
;#
|
||||
;# 2023-06-03 Frank Halasz
|
||||
;#
|
||||
;# Copyright 2023 Interlisp.org
|
||||
;#
|
||||
;###############################################################################
|
||||
|
||||
#define x86_or_x64 "x64"
|
||||
#if GetEnv('COMBINED_RELEASE_TAG') != ""
|
||||
#define VERSION=GetEnv('COMBINED_RELEASE_TAG')
|
||||
#else
|
||||
#define VERSION="local"
|
||||
#endif
|
||||
|
||||
#if GetEnv('CYGWIN_INSTALLER_BASE') != ""
|
||||
#define OUTFILE=GetEnv('CYGWIN_INSTALLER_BASE')
|
||||
#else
|
||||
#define OUTFILE="medley-full-cygwin-x86_64-local"
|
||||
#endif
|
||||
|
||||
[Setup]
|
||||
PrivilegesRequired=lowest
|
||||
ArchitecturesAllowed={#x86_or_x64}
|
||||
AppName=Medley
|
||||
AppVersion={#version}
|
||||
AppPublisher=Interlisp.org
|
||||
AppPublisherURL=https://interlisp.org/
|
||||
AppCopyright=Copyright (C) 2023 Interlisp.org
|
||||
DefaultDirName={%USERPROFILE}\il
|
||||
DefaultGroupName=Medley
|
||||
Compression=lzma2
|
||||
SolidCompression=yes
|
||||
; "ArchitecturesInstallIn64BitMode=x64" requests that the install be
|
||||
; done in "64-bit mode" on x64, meaning it should use the native
|
||||
; 64-bit Program Files directory and the 64-bit view of the registry.
|
||||
ArchitecturesInstallIn64BitMode=x64
|
||||
OutputDir="."
|
||||
OutputBaseFilename={#OUTFILE}
|
||||
SetupIconFile="Medley.ico"
|
||||
DisableWelcomePage=no
|
||||
MissingRunOnceIdsWarning=no
|
||||
DisableProgramGroupPage=yes
|
||||
WizardImageFile=medley_logo.bmp
|
||||
WizardSmallImageFile=medley_logo_small.bmp
|
||||
WizardImageStretch=no
|
||||
UninstallDisplayIcon="{app}\Medley.ico"
|
||||
UninstallFilesDir={app}\uninstall
|
||||
UsePreviousAppDir=no
|
||||
|
||||
[Dirs]
|
||||
Name: "{app}\install"; Permissions: everyone-full
|
||||
Name: "{app}\uninstall"; Permissions: everyone-full
|
||||
Name: "{app}\cygwin"; Permissions: everyone-full
|
||||
|
||||
[Files]
|
||||
Source: "setup-x86_64.exe"; DestDir: "{app}\cygwin"; DestName: "setup-x86_64.exe"; Flags: ignoreversion
|
||||
Source: "maiko-cygwin.x86_64.tgz"; DestDir: "{app}\install"; DestName: "maiko-cygwin.x86_64.tgz"; Flags: ignoreversion
|
||||
Source: "medley.tgz"; DestDir: "{app}\install"; DestName: "medley.tgz"; Flags: ignoreversion
|
||||
Source: "..\win\editpath\x86_64\EditPath.exe"; DestDir: "{app}\uninstall"; DestName: "EditPath.exe"; Flags: ignoreversion
|
||||
Source: "Medley.ico"; DestDir: "{app}"; DestName: "Medley.ico"; Flags: ignoreversion
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\Medley\Uninstall_Medley"; Filename: "{uninstallexe}"
|
||||
; Name: "{group}\Medley\Medley"; Filename: "powershell"; Parameters: "-NoExit -File {app}\medley.ps1 --help"; IconFilename: "{app}\Medley.ico"
|
||||
|
||||
[Run]
|
||||
Filename: "{app}\cygwin\setup-x86_64.exe"; Parameters: "--quiet-mode --no-admin --wait --no-shortcuts --no-write-registry --verbose --root {app} --site http://www.gtlib.gatech.edu/pub/cygwin/ --only-site --local-package-dir {app}\cygwin --packages nano,xdg-utils"; StatusMsg: "Installing Cygwin ..."
|
||||
Filename: "{app}\bin\bash"; Parameters: "-login -c 'sed -i -e s/^none/#none/ /etc/fstab && echo none / cygdrive binary,posix=0,user 0 0 >>/etc/fstab'"; Flags: runhidden
|
||||
Filename: "tar"; Parameters: "-x -z -C {app} -f {app}\install\medley.tgz"; Flags: runhidden; StatusMsg: "Installing Medley ..."
|
||||
Filename: "powershell"; Parameters: "remove-item -force -recurse {app}\maiko"; Flags: runhidden; StatusMsg: "Installing Maiko ..."
|
||||
Filename: "tar"; Parameters: "-x -z -C {app} -f {app}\install\maiko-cygwin.x86_64.tgz"; Flags: runhidden; StatusMsg: "Installing Maiko ..."
|
||||
; Recreate medley symbolic links (lost in tars)
|
||||
Filename: "{app}\bin\bash"; Parameters: "-login -c 'cd /medley/scripts/medley && ln -s medley.command medley.sh && cd ../.. && ln -s /medley/scripts/medley/medley.sh medley'"; Flags: runhidden
|
||||
; Create medley.bat
|
||||
Filename: "powershell"; Parameters: "write-output \""{app}\bin\bash -login -c '/medley/scripts/medley/medley.sh %*'\"" | out-file medley.bat -Encoding ascii"; WorkingDir: "{app}"; Flags: runhidden; StatusMsg: "Creating medley.bat ..."
|
||||
Filename: "{app}\uninstall\EditPath.exe"; Parameters: "--user --add {app}"; Flags: runhidden; StatusMsg: "Adding to PATH ..."
|
||||
Filename: "powershell"; Parameters: "remove-item -recurse -force {app}\install"; Flags: runhidden; StatusMsg: "Cleaning up ..."
|
||||
|
||||
[UninstallRun]
|
||||
Filename: "{app}\uninstall\EditPath.exe"; Parameters: "--user --remove {app}"; Flags: runhidden
|
||||
|
||||
BIN
installers/cygwin/medley_logo.bmp
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
installers/cygwin/medley_logo.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
installers/cygwin/medley_logo_small.bmp
Normal file
|
After Width: | Height: | Size: 13 KiB |
@@ -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}"
|
||||
|
||||
################################################################################################################
|
||||
################################################################################################################
|
||||
|
||||
@@ -10,36 +10,46 @@
|
||||
<ul>
|
||||
<li><h4>Standard Linux</h4>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-x86_64.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86_64 machines</a></p>
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/medley-full-linux-x86_64-@@@COMBINED.RELEASE.TAG@@@.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86_64 machines</a></p>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-aarch64.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p>
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/medley-full-linux-aarch64-@@@COMBINED.RELEASE.TAG@@@.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-armv7l.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines</a></p></li>
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/medley-full-linux-armv7l-@@@COMBINED.RELEASE.TAG@@@.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines</a></p></li>
|
||||
<li><h4>Windows System for Linux</h4>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-x86_64.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86.64 machines</a></p>
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/medley-full-wsl-x86_64-@@@COMBINED.RELEASE.TAG@@@.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86.64 machines</a></p>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-aarch64.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p></li>
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/medley-full-wsl-aarch64-@@@COMBINED.RELEASE.TAG@@@.deb">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p></li>
|
||||
</ul></li>
|
||||
<li><h3>Local Installations (for any Linux distro)</h3>
|
||||
|
||||
<ul>
|
||||
<li><h4>Standard Linux</h4>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-x86_64.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86_64 machines</a></p>
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/medley-full-linux-x86_64-@@@COMBINED.RELEASE.TAG@@@.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86_64 machines</a></p>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-aarch64.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p>
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/medley-full-linux-aarch64-@@@COMBINED.RELEASE.TAG@@@.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-armv7l.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines</a></p></li>
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/medley-full-linux-armv7l-@@@COMBINED.RELEASE.TAG@@@.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines</a></p></li>
|
||||
<li><h4>Windows System for Linux</h4>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-x86_64.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86_64 machines</a></p>
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/medley-full-wsl-x86_64-@@@COMBINED.RELEASE.TAG@@@.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86_64 machines</a></p>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-aarch64.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p></li>
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/medley-full-wsl-aarch64-@@@COMBINED.RELEASE.TAG@@@.tgz">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines</a></p></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
<li><h2>WINDOWS 10/11 (Medley runs in a Docker container)</h2>
|
||||
<li><h2>WINDOWS 10/11 (Single install based on cygwin - Docker install deprecated)</h2>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@WINDOWS.INSTALLER.FILENAME@@@">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for Windows x64 machines</a></p></li>
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/@@@CYGWIN.INSTALLER@@@">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for Windows x64 machines</a></p></li>
|
||||
<li><h2>macOS 11 (Big Sur) and later - for both Intel and Apple Silicon</h2>
|
||||
|
||||
<ul>
|
||||
<li><h3>DMG Installer</h3>
|
||||
|
||||
<p>Not available</p></li>
|
||||
<li><h3>ZIP Installer</h3>
|
||||
|
||||
<p><a href="@@@DOWNLOAD_URL@@@/medley-full-macos-universal-@@@COMBINED.RELEASE.TAG@@@.zip">Release @@@MEDLEY.SHORT.RELEASE.TAG@@@</a></p></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
||||
@@ -6,40 +6,44 @@
|
||||
|
||||
* #### 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@@@)
|
||||
* ## WINDOWS 10/11 (Single install based on cygwin - Docker install deprecated)
|
||||
|
||||
[Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for Windows x64 machines](@@@DOWNLOAD_URL@@@/@@@CYGWIN.INSTALLER@@@)
|
||||
|
||||
* ## 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)
|
||||
|
||||
7
installers/macos/.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
tmp
|
||||
devtmp
|
||||
pkg/*.pkg
|
||||
artifacts
|
||||
|
||||
|
||||
|
||||
33
installers/macos/app/Info.plist
Normal file
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>medley/medley</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>Medley Interlisp, Copyright 2023 Interlisp.org</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>Medley.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.interlisp.Medley</string>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
</array>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>3.51</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>--VERSION_TAG--</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>Medley</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>--VERSION_TAG--</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright 2023 Interlisp.org</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>11.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
1
installers/macos/app/PkgInfo
Normal file
@@ -0,0 +1 @@
|
||||
APPLMedley
|
||||
170
installers/macos/build_app.sh
Executable file
@@ -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
|
||||
|
||||
######################################################################################################
|
||||
######################################################################################################
|
||||
66
installers/macos/build_artifacts.sh
Executable file
@@ -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}"
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
185
installers/macos/build_dmg.sh
Executable file
@@ -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 <<EOT
|
||||
tell application "Finder"
|
||||
tell disk "${VOL_NAME}"
|
||||
open
|
||||
set current view of container window to icon view
|
||||
set toolbar visible of container window to false
|
||||
set statusbar visible of container window to false
|
||||
set old_bounds to bounds of container window
|
||||
set l to item 1 of old_bounds
|
||||
set t to item 2 of old_bounds
|
||||
set r to l + ${WIN_WIDTH}
|
||||
set b to t + ${WIN_HEIGHT}
|
||||
set the bounds of container window to {l, t, r, b}
|
||||
set theViewOptions to the icon view options of container window
|
||||
set arrangement of theViewOptions to snap to grid
|
||||
set icon size of theViewOptions to 128
|
||||
set background picture of theViewOptions to file ".background:${BG_NAME}"
|
||||
set appHome to path to applications folder from system domain
|
||||
make new alias file at container window to appHome with properties {name:"Applications"}
|
||||
set appHome to path to applications folder from user domain
|
||||
make new alias file at container window to appHome with properties {name:"My Applications"}
|
||||
set appHome to path to home folder from user domain
|
||||
make new alias file at container window to appHome with properties {name:"My Home Folder"}
|
||||
delay 1
|
||||
set position of item "${APP_NAME}" of container window to {${COL1}, ${ROW1}}
|
||||
set position of item "medley" of container window to {${COL2}, ${ROW1}}
|
||||
set position of item "medley_add2path" of container window to {${COL3}, ${ROW1}}
|
||||
set position of item "Applications" of container window to {${COL1}, ${ROW2}}
|
||||
set position of item "My Applications" of container window to {${COL2}, ${ROW2}}
|
||||
set position of item "My Home Folder" of container window to {${COL3}, ${ROW2}}
|
||||
close
|
||||
end tell
|
||||
end tell
|
||||
EOT
|
||||
|
||||
#
|
||||
# Add icon to dmg
|
||||
#
|
||||
fileicon set /Volumes/${VOL_NAME} ${IMAGES_DIR}/Install_icon128.png
|
||||
|
||||
#
|
||||
# return to original dir
|
||||
#
|
||||
popd >/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>\(.*\)<\/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."
|
||||
|
||||
###############################################################################
|
||||
###############################################################################
|
||||
|
||||
209
installers/macos/images/A2P_icon.svg
Normal file
@@ -0,0 +1,209 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
preserveAspectRatio="xMidYMid meet"
|
||||
width="2000"
|
||||
height="2000"
|
||||
viewBox="0 0 2000 2000"
|
||||
version="1.1"
|
||||
id="svg2704"
|
||||
sodipodi:docname="A2P_icon.svg"
|
||||
inkscape:version="1.2 (dc2aeda, 2022-05-15)"
|
||||
inkscape:export-filename="A2P_icon128.png"
|
||||
inkscape:export-xdpi="6.1440001"
|
||||
inkscape:export-ydpi="6.1440001"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<g
|
||||
id="g1126"
|
||||
transform="translate(-23.756927,163.29152)">
|
||||
<text
|
||||
x="597.27948"
|
||||
y="997.78094"
|
||||
font-family="'Times New Roman', Times, serif"
|
||||
font-weight="bold"
|
||||
font-size="420px"
|
||||
id="text2702"
|
||||
style="font-weight:bold;font-size:420px;font-family:'Times New Roman', Times, serif"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:420px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan25093">Medley</tspan></text>
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="1066.795"
|
||||
y="218.396"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2674"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="865.021"
|
||||
y="89.851997"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2676"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="629.06"
|
||||
y="50.366001"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2678"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="396.42899"
|
||||
y="106.215"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2680"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="204.11301"
|
||||
y="248.522"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2682"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="82.689003"
|
||||
y="454.659"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2684"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="51.462002"
|
||||
y="691.854"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2686"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="115.396"
|
||||
y="922.39398"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2688"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="264.327"
|
||||
y="1109.627"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2690"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="474.577"
|
||||
y="1223.783"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2692"
|
||||
transform="translate(147.4565)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:italic;font-size:766.666px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:7.8"
|
||||
x="1003.8107"
|
||||
y="1163.4888"
|
||||
id="text288"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan286"
|
||||
x="1003.8107"
|
||||
y="1163.4888" /></text>
|
||||
<text
|
||||
x="946.01031"
|
||||
y="1500.8351"
|
||||
font-family="'Times New Roman', Times, serif"
|
||||
font-weight="bold"
|
||||
font-size="420px"
|
||||
id="text292"
|
||||
style="font-weight:bold;font-size:420px;font-family:'Times New Roman', Times, serif"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:233.333px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan290">add2path</tspan></text>
|
||||
</g>
|
||||
<defs
|
||||
id="defs2708">
|
||||
<rect
|
||||
x="1144.3981"
|
||||
y="797.67157"
|
||||
width="915.91937"
|
||||
height="555.16339"
|
||||
id="rect44588" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview2706"
|
||||
pagecolor="#f5e6c4"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.49895222"
|
||||
inkscape:cx="864.81227"
|
||||
inkscape:cy="918.92566"
|
||||
inkscape:window-width="1752"
|
||||
inkscape:window-height="1205"
|
||||
inkscape:window-x="1508"
|
||||
inkscape:window-y="107"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg2704"
|
||||
fit-margin-top="100"
|
||||
fit-margin-left="100"
|
||||
fit-margin-right="100"
|
||||
fit-margin-bottom="100"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<symbol
|
||||
id="window-icon"
|
||||
viewBox="0 0 372 300"
|
||||
transform="translate(-98.918502,49.633999)">
|
||||
<rect
|
||||
x="10"
|
||||
y="10"
|
||||
width="352"
|
||||
height="280"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:20"
|
||||
id="rect2665" />
|
||||
<line
|
||||
x1="10"
|
||||
y1="30"
|
||||
x2="362"
|
||||
y2="30"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:20"
|
||||
id="line2667" />
|
||||
</symbol>
|
||||
<circle
|
||||
cx="551.08148"
|
||||
cy="699.63397"
|
||||
r="20"
|
||||
style="display:none;fill:#ffffff;stroke:#ff0000;stroke-width:5"
|
||||
id="circle2696" />
|
||||
<circle
|
||||
cx="551.08148"
|
||||
cy="699.63397"
|
||||
r="600"
|
||||
style="display:none;fill:none;stroke:#0000ff;stroke-width:5"
|
||||
id="circle2698" />
|
||||
<rect
|
||||
x="-98.918503"
|
||||
y="49.633999"
|
||||
width="2922"
|
||||
height="1600"
|
||||
style="display:none;fill:none;stroke:#00ff00;stroke-width:10"
|
||||
id="rect2700" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
id="text44586"
|
||||
style="font-size:40px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';white-space:pre;shape-inside:url(#rect44588);display:inline"
|
||||
transform="translate(-98.918502,49.633999)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
BIN
installers/macos/images/A2P_icon128.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
installers/macos/images/A2P_icon256.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
209
installers/macos/images/App_icon.svg
Normal file
@@ -0,0 +1,209 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
preserveAspectRatio="xMidYMid meet"
|
||||
width="2000"
|
||||
height="2000"
|
||||
viewBox="0 0 2000 2000"
|
||||
version="1.1"
|
||||
id="svg2704"
|
||||
sodipodi:docname="App_icon.svg"
|
||||
inkscape:version="1.2 (dc2aeda, 2022-05-15)"
|
||||
inkscape:export-filename="App_icon512.png"
|
||||
inkscape:export-xdpi="24.576"
|
||||
inkscape:export-ydpi="24.576"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<g
|
||||
id="g1126"
|
||||
transform="translate(-23.756927,163.29152)">
|
||||
<text
|
||||
x="597.27948"
|
||||
y="997.78094"
|
||||
font-family="'Times New Roman', Times, serif"
|
||||
font-weight="bold"
|
||||
font-size="420px"
|
||||
id="text2702"
|
||||
style="font-weight:bold;font-size:420px;font-family:'Times New Roman', Times, serif"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:420px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan25093">Medley</tspan></text>
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="1066.795"
|
||||
y="218.396"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2674"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="865.021"
|
||||
y="89.851997"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2676"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="629.06"
|
||||
y="50.366001"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2678"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="396.42899"
|
||||
y="106.215"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2680"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="204.11301"
|
||||
y="248.522"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2682"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="82.689003"
|
||||
y="454.659"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2684"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="51.462002"
|
||||
y="691.854"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2686"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="115.396"
|
||||
y="922.39398"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2688"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="264.327"
|
||||
y="1109.627"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2690"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="474.577"
|
||||
y="1223.783"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2692"
|
||||
transform="translate(147.4565)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:italic;font-size:766.666px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:7.8"
|
||||
x="1003.8107"
|
||||
y="1163.4888"
|
||||
id="text288"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan286"
|
||||
x="1003.8107"
|
||||
y="1163.4888" /></text>
|
||||
<text
|
||||
x="1263.5646"
|
||||
y="1466.0958"
|
||||
font-family="'Times New Roman', Times, serif"
|
||||
font-weight="bold"
|
||||
font-size="420px"
|
||||
id="text292"
|
||||
style="font-weight:bold;font-size:420px;font-family:'Times New Roman', Times, serif"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:233.333px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan290">app</tspan></text>
|
||||
</g>
|
||||
<defs
|
||||
id="defs2708">
|
||||
<rect
|
||||
x="1144.3981"
|
||||
y="797.67157"
|
||||
width="915.91937"
|
||||
height="555.16339"
|
||||
id="rect44588" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview2706"
|
||||
pagecolor="#f5eddc"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.49895222"
|
||||
inkscape:cx="760.59387"
|
||||
inkscape:cy="1017.1315"
|
||||
inkscape:window-width="2286"
|
||||
inkscape:window-height="1205"
|
||||
inkscape:window-x="45"
|
||||
inkscape:window-y="53"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g1126"
|
||||
fit-margin-top="100"
|
||||
fit-margin-left="100"
|
||||
fit-margin-right="100"
|
||||
fit-margin-bottom="100"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<symbol
|
||||
id="window-icon"
|
||||
viewBox="0 0 372 300"
|
||||
transform="translate(-98.918502,49.633999)">
|
||||
<rect
|
||||
x="10"
|
||||
y="10"
|
||||
width="352"
|
||||
height="280"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:20"
|
||||
id="rect2665" />
|
||||
<line
|
||||
x1="10"
|
||||
y1="30"
|
||||
x2="362"
|
||||
y2="30"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:20"
|
||||
id="line2667" />
|
||||
</symbol>
|
||||
<circle
|
||||
cx="551.08148"
|
||||
cy="699.63397"
|
||||
r="20"
|
||||
style="display:none;fill:#ffffff;stroke:#ff0000;stroke-width:5"
|
||||
id="circle2696" />
|
||||
<circle
|
||||
cx="551.08148"
|
||||
cy="699.63397"
|
||||
r="600"
|
||||
style="display:none;fill:none;stroke:#0000ff;stroke-width:5"
|
||||
id="circle2698" />
|
||||
<rect
|
||||
x="-98.918503"
|
||||
y="49.633999"
|
||||
width="2922"
|
||||
height="1600"
|
||||
style="display:none;fill:none;stroke:#00ff00;stroke-width:10"
|
||||
id="rect2700" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
id="text44586"
|
||||
style="font-size:40px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';white-space:pre;shape-inside:url(#rect44588);display:inline"
|
||||
transform="translate(-98.918502,49.633999)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
BIN
installers/macos/images/App_icon1024.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
installers/macos/images/App_icon512.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
209
installers/macos/images/Command_icon.svg
Normal file
@@ -0,0 +1,209 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
preserveAspectRatio="xMidYMid meet"
|
||||
width="2000"
|
||||
height="2000"
|
||||
viewBox="0 0 2000 2000"
|
||||
version="1.1"
|
||||
id="svg2704"
|
||||
sodipodi:docname="Command_icon.svg"
|
||||
inkscape:version="1.2 (dc2aeda, 2022-05-15)"
|
||||
inkscape:export-filename="Command_icon256.png"
|
||||
inkscape:export-xdpi="12.288"
|
||||
inkscape:export-ydpi="12.288"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<g
|
||||
id="g1126"
|
||||
transform="translate(-23.756927,163.29152)">
|
||||
<text
|
||||
x="597.27948"
|
||||
y="997.78094"
|
||||
font-family="'Times New Roman', Times, serif"
|
||||
font-weight="bold"
|
||||
font-size="420px"
|
||||
id="text2702"
|
||||
style="font-weight:bold;font-size:420px;font-family:'Times New Roman', Times, serif"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:420px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan25093">Medley</tspan></text>
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="1066.795"
|
||||
y="218.396"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2674"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="865.021"
|
||||
y="89.851997"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2676"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="629.06"
|
||||
y="50.366001"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2678"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="396.42899"
|
||||
y="106.215"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2680"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="204.11301"
|
||||
y="248.522"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2682"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="82.689003"
|
||||
y="454.659"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2684"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="51.462002"
|
||||
y="691.854"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2686"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="115.396"
|
||||
y="922.39398"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2688"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="264.327"
|
||||
y="1109.627"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2690"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="474.577"
|
||||
y="1223.783"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2692"
|
||||
transform="translate(147.4565)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:italic;font-size:766.666px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:7.8"
|
||||
x="1003.8107"
|
||||
y="1163.4888"
|
||||
id="text288"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan286"
|
||||
x="1003.8107"
|
||||
y="1163.4888" /></text>
|
||||
<text
|
||||
x="936.01031"
|
||||
y="1500.8351"
|
||||
font-family="'Times New Roman', Times, serif"
|
||||
font-weight="bold"
|
||||
font-size="420px"
|
||||
id="text292"
|
||||
style="font-weight:bold;font-size:420px;font-family:'Times New Roman', Times, serif"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:233.333px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan290">command</tspan></text>
|
||||
</g>
|
||||
<defs
|
||||
id="defs2708">
|
||||
<rect
|
||||
x="1144.3981"
|
||||
y="797.67157"
|
||||
width="915.91937"
|
||||
height="555.16339"
|
||||
id="rect44588" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview2706"
|
||||
pagecolor="#f5ebd3"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.49895222"
|
||||
inkscape:cx="1195.5053"
|
||||
inkscape:cy="916.92146"
|
||||
inkscape:window-width="1752"
|
||||
inkscape:window-height="1205"
|
||||
inkscape:window-x="1099"
|
||||
inkscape:window-y="119"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g1126"
|
||||
fit-margin-top="100"
|
||||
fit-margin-left="100"
|
||||
fit-margin-right="100"
|
||||
fit-margin-bottom="100"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<symbol
|
||||
id="window-icon"
|
||||
viewBox="0 0 372 300"
|
||||
transform="translate(-98.918502,49.633999)">
|
||||
<rect
|
||||
x="10"
|
||||
y="10"
|
||||
width="352"
|
||||
height="280"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:20"
|
||||
id="rect2665" />
|
||||
<line
|
||||
x1="10"
|
||||
y1="30"
|
||||
x2="362"
|
||||
y2="30"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:20"
|
||||
id="line2667" />
|
||||
</symbol>
|
||||
<circle
|
||||
cx="551.08148"
|
||||
cy="699.63397"
|
||||
r="20"
|
||||
style="display:none;fill:#ffffff;stroke:#ff0000;stroke-width:5"
|
||||
id="circle2696" />
|
||||
<circle
|
||||
cx="551.08148"
|
||||
cy="699.63397"
|
||||
r="600"
|
||||
style="display:none;fill:none;stroke:#0000ff;stroke-width:5"
|
||||
id="circle2698" />
|
||||
<rect
|
||||
x="-98.918503"
|
||||
y="49.633999"
|
||||
width="2922"
|
||||
height="1600"
|
||||
style="display:none;fill:none;stroke:#00ff00;stroke-width:10"
|
||||
id="rect2700" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
id="text44586"
|
||||
style="font-size:40px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';white-space:pre;shape-inside:url(#rect44588);display:inline"
|
||||
transform="translate(-98.918502,49.633999)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
BIN
installers/macos/images/Command_icon128.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
installers/macos/images/Command_icon256.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
installers/macos/images/Install_Message.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
1556
installers/macos/images/Install_Message.svg
Normal file
|
After Width: | Height: | Size: 144 KiB |
209
installers/macos/images/Install_icon.svg
Normal file
@@ -0,0 +1,209 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
preserveAspectRatio="xMidYMid meet"
|
||||
width="2000"
|
||||
height="2000"
|
||||
viewBox="0 0 2000 2000"
|
||||
version="1.1"
|
||||
id="svg2704"
|
||||
sodipodi:docname="Install_icon.svg"
|
||||
inkscape:version="1.2 (dc2aeda, 2022-05-15)"
|
||||
inkscape:export-filename="Install_icon256.png"
|
||||
inkscape:export-xdpi="6.1440001"
|
||||
inkscape:export-ydpi="6.1440001"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<g
|
||||
id="g1126"
|
||||
transform="translate(-23.756927,163.29152)">
|
||||
<text
|
||||
x="597.27948"
|
||||
y="997.78094"
|
||||
font-family="'Times New Roman', Times, serif"
|
||||
font-weight="bold"
|
||||
font-size="420px"
|
||||
id="text2702"
|
||||
style="font-weight:bold;font-size:420px;font-family:'Times New Roman', Times, serif"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:420px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan25093">Medley</tspan></text>
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="1066.795"
|
||||
y="218.396"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2674"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="865.021"
|
||||
y="89.851997"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2676"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="629.06"
|
||||
y="50.366001"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2678"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="396.42899"
|
||||
y="106.215"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2680"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="204.11301"
|
||||
y="248.522"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2682"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="82.689003"
|
||||
y="454.659"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2684"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="51.462002"
|
||||
y="691.854"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2686"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="115.396"
|
||||
y="922.39398"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2688"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="264.327"
|
||||
y="1109.627"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2690"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="474.577"
|
||||
y="1223.783"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2692"
|
||||
transform="translate(147.4565)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:italic;font-size:766.666px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:7.8"
|
||||
x="1003.8107"
|
||||
y="1163.4888"
|
||||
id="text288"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan286"
|
||||
x="1003.8107"
|
||||
y="1163.4888" /></text>
|
||||
<text
|
||||
x="970.08179"
|
||||
y="1540.9191"
|
||||
font-family="'Times New Roman', Times, serif"
|
||||
font-weight="bold"
|
||||
font-size="420px"
|
||||
id="text292"
|
||||
style="font-weight:bold;font-size:366.667px;font-family:'Times New Roman', Times, serif"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:366.667px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan290">install</tspan></text>
|
||||
</g>
|
||||
<defs
|
||||
id="defs2708">
|
||||
<rect
|
||||
x="1144.3981"
|
||||
y="797.67157"
|
||||
width="915.91937"
|
||||
height="555.16339"
|
||||
id="rect44588" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview2706"
|
||||
pagecolor="#f5ebd3"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.49895222"
|
||||
inkscape:cx="1199.5137"
|
||||
inkscape:cy="920.92986"
|
||||
inkscape:window-width="1752"
|
||||
inkscape:window-height="1205"
|
||||
inkscape:window-x="1099"
|
||||
inkscape:window-y="63"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g1126"
|
||||
fit-margin-top="100"
|
||||
fit-margin-left="100"
|
||||
fit-margin-right="100"
|
||||
fit-margin-bottom="100"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<symbol
|
||||
id="window-icon"
|
||||
viewBox="0 0 372 300"
|
||||
transform="translate(-98.918502,49.633999)">
|
||||
<rect
|
||||
x="10"
|
||||
y="10"
|
||||
width="352"
|
||||
height="280"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:20"
|
||||
id="rect2665" />
|
||||
<line
|
||||
x1="10"
|
||||
y1="30"
|
||||
x2="362"
|
||||
y2="30"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:20"
|
||||
id="line2667" />
|
||||
</symbol>
|
||||
<circle
|
||||
cx="551.08148"
|
||||
cy="699.63397"
|
||||
r="20"
|
||||
style="display:none;fill:#ffffff;stroke:#ff0000;stroke-width:5"
|
||||
id="circle2696" />
|
||||
<circle
|
||||
cx="551.08148"
|
||||
cy="699.63397"
|
||||
r="600"
|
||||
style="display:none;fill:none;stroke:#0000ff;stroke-width:5"
|
||||
id="circle2698" />
|
||||
<rect
|
||||
x="-98.918503"
|
||||
y="49.633999"
|
||||
width="2922"
|
||||
height="1600"
|
||||
style="display:none;fill:none;stroke:#00ff00;stroke-width:10"
|
||||
id="rect2700" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
id="text44586"
|
||||
style="font-size:40px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';white-space:pre;shape-inside:url(#rect44588);display:inline"
|
||||
transform="translate(-98.918502,49.633999)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
BIN
installers/macos/images/Install_icon128.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
installers/macos/images/Install_icon256.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
installers/macos/images/MedleyIcon.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
199
installers/macos/images/MedleyIcon.svg
Normal file
@@ -0,0 +1,199 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
preserveAspectRatio="xMidYMid meet"
|
||||
width="2000"
|
||||
height="2000"
|
||||
viewBox="0 0 2000 2000"
|
||||
version="1.1"
|
||||
id="svg2704"
|
||||
sodipodi:docname="MedleyIcon.svg"
|
||||
inkscape:version="1.2 (dc2aeda, 2022-05-15)"
|
||||
inkscape:export-filename="C:\Users\Frank\Dev\il\logos\MedleyIcon256.png"
|
||||
inkscape:export-xdpi="12.287999"
|
||||
inkscape:export-ydpi="12.287999"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<g
|
||||
id="g1126"
|
||||
transform="translate(-23.756927,163.29152)">
|
||||
<text
|
||||
x="597.27948"
|
||||
y="997.78094"
|
||||
font-family="'Times New Roman', Times, serif"
|
||||
font-weight="bold"
|
||||
font-size="420px"
|
||||
id="text2702"
|
||||
style="font-weight:bold;font-size:420px;font-family:'Times New Roman', Times, serif"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:420px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan25093">Medley</tspan></text>
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="1066.795"
|
||||
y="218.396"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2674"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="865.021"
|
||||
y="89.851997"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2676"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="629.06"
|
||||
y="50.366001"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2678"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="396.42899"
|
||||
y="106.215"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2680"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="204.11301"
|
||||
y="248.522"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2682"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="82.689003"
|
||||
y="454.659"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2684"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="51.462002"
|
||||
y="691.854"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2686"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="115.396"
|
||||
y="922.39398"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2688"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="264.327"
|
||||
y="1109.627"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2690"
|
||||
transform="translate(147.4565)" />
|
||||
<use
|
||||
xlink:href="#window-icon"
|
||||
x="474.577"
|
||||
y="1223.783"
|
||||
width="372"
|
||||
height="300"
|
||||
id="use2692"
|
||||
transform="translate(147.4565)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:italic;font-size:766.666px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:7.8"
|
||||
x="1003.8107"
|
||||
y="1163.4888"
|
||||
id="text288"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan286"
|
||||
x="1003.8107"
|
||||
y="1163.4888" /></text>
|
||||
</g>
|
||||
<defs
|
||||
id="defs2708">
|
||||
<rect
|
||||
x="1144.3981"
|
||||
y="797.67157"
|
||||
width="915.91937"
|
||||
height="555.16339"
|
||||
id="rect44588" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview2706"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.49895222"
|
||||
inkscape:cx="1302.7299"
|
||||
inkscape:cy="918.92566"
|
||||
inkscape:window-width="1752"
|
||||
inkscape:window-height="1205"
|
||||
inkscape:window-x="172"
|
||||
inkscape:window-y="96"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g1126"
|
||||
fit-margin-top="100"
|
||||
fit-margin-left="100"
|
||||
fit-margin-right="100"
|
||||
fit-margin-bottom="100"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<symbol
|
||||
id="window-icon"
|
||||
viewBox="0 0 372 300"
|
||||
transform="translate(-98.918502,49.633999)">
|
||||
<rect
|
||||
x="10"
|
||||
y="10"
|
||||
width="352"
|
||||
height="280"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:20"
|
||||
id="rect2665" />
|
||||
<line
|
||||
x1="10"
|
||||
y1="30"
|
||||
x2="362"
|
||||
y2="30"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:20"
|
||||
id="line2667" />
|
||||
</symbol>
|
||||
<circle
|
||||
cx="551.08148"
|
||||
cy="699.63397"
|
||||
r="20"
|
||||
style="display:none;fill:#ffffff;stroke:#ff0000;stroke-width:5"
|
||||
id="circle2696" />
|
||||
<circle
|
||||
cx="551.08148"
|
||||
cy="699.63397"
|
||||
r="600"
|
||||
style="display:none;fill:none;stroke:#0000ff;stroke-width:5"
|
||||
id="circle2698" />
|
||||
<rect
|
||||
x="-98.918503"
|
||||
y="49.633999"
|
||||
width="2922"
|
||||
height="1600"
|
||||
style="display:none;fill:none;stroke:#00ff00;stroke-width:10"
|
||||
id="rect2700" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
id="text44586"
|
||||
style="font-size:40px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';white-space:pre;shape-inside:url(#rect44588)"
|
||||
transform="translate(-98.918502,49.633999)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
BIN
installers/macos/images/MedleyIcon128.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
installers/macos/images/MedleyIcon256.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
29
installers/macos/pkg/Distribution.xml
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<installer-gui-script minSpecVersion="1">
|
||||
<pkg-ref id="org.interlisp.Medley"/>
|
||||
<options customize="always" require-scripts="false" hostArchitectures="x86_64,arm64" />
|
||||
<domains enable_anywhere="false" enable_currentUserHome="true" enable_localSystem="false" />
|
||||
<choices-outline>
|
||||
<line choice="default">
|
||||
<line choice="org.interlisp.Medley" />
|
||||
</line>
|
||||
<line choice="Location" />
|
||||
</choices-outline>
|
||||
<choice id="default" visible="false" />
|
||||
<choice id="org.interlisp.Medley"
|
||||
description="D Install for all Users?"
|
||||
title="T Install for all users?"
|
||||
customLocation="tests"
|
||||
>
|
||||
<pkg-ref id="org.interlisp.Medley"/>
|
||||
</choice>
|
||||
<choice id="Location"
|
||||
description="D Install for all Users?"
|
||||
title="T Install for all users?"
|
||||
customLocation="tests"
|
||||
>
|
||||
<pkg-ref id="org.interlisp.Medley"/>
|
||||
</choice>
|
||||
<pkg-ref id="org.interlisp.Medley" version="01.01.01" onConclusion="none">Medley-base.pkg</pkg-ref>
|
||||
</installer-gui-script>
|
||||
|
||||
43
installers/macos/scripts/medley_add2path
Executable file
@@ -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 <<EOF
|
||||
PATH=\${PATH}:${SCRIPTDIR}
|
||||
EOF
|
||||
rm ${SCRIPTDIR}/medley_add2path.command
|
||||
|
||||
|
||||
@@ -1,165 +1,165 @@
|
||||
; Copyright (C) 2021-2023 by Bill Stewart (bstewart at iname.com)
|
||||
;
|
||||
; This program is free software; you can redistribute it and/or modify it under
|
||||
; the terms of the GNU Lesser General Public License as published by the Free
|
||||
; Software Foundation; either version 3 of the License, or (at your option) any
|
||||
; later version.
|
||||
;
|
||||
; This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
; FOR A PARTICULAR PURPOSE. See the GNU General Lesser Public License for more
|
||||
; details.
|
||||
;
|
||||
; You should have received a copy of the GNU Lesser General Public License
|
||||
; along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
|
||||
; Sample Inno Setup (https://www.jrsoftware.org/isinfo.php) script
|
||||
; demonstrating use of PathMgr.dll.
|
||||
;
|
||||
; This script uses PathMgr.dll in the following ways:
|
||||
; * Copies PathMgr.dll to the target machine (required for uninstall)
|
||||
; * Defines a task in [Tasks] that should modify the Path
|
||||
; * Imports the AddDirToPath() DLL function at setup time
|
||||
; * Imports the RemoveDirFromPath() DLL function at uninstall time
|
||||
; * Stores task state as custom setting using RegisterPreviousData()
|
||||
; * Retrieves task state custom setting during setup and uninstall initialize
|
||||
; * At post install, adds app dir to Path if task selected
|
||||
; * At uninstall, removes dir from Path if custom setting present
|
||||
; * Unloads and deletes DLL and removes app dir at uninstall deinitialize
|
||||
|
||||
#if Ver < EncodeVer(6,0,0,0)
|
||||
#error This script requires Inno Setup 6 or later
|
||||
#endif
|
||||
|
||||
[Setup]
|
||||
AppId={{A17D2D05-C729-4F2A-9CC7-E04906C5A842}
|
||||
AppName=EditPath
|
||||
AppVersion=4.0.4.0
|
||||
UsePreviousAppDir=false
|
||||
DefaultDirName={autopf}\EditPath
|
||||
Uninstallable=true
|
||||
OutputDir=.
|
||||
OutputBaseFilename=EditPath_Setup
|
||||
ArchitecturesInstallIn64BitMode=x64
|
||||
PrivilegesRequired=none
|
||||
PrivilegesRequiredOverridesAllowed=dialog
|
||||
|
||||
[Files]
|
||||
; Install PathMgr.dll for use with both setup and uninstall; use
|
||||
; uninsneveruninstall flag because DeinitializeSetup() will delete after
|
||||
; unloading the DLL; install the 32-bit version of PathMgr.dll because both
|
||||
; setup and uninstall executables are 32-bit
|
||||
Source: "i386\PathMgr.dll"; DestDir: "{app}"; Flags: uninsneveruninstall
|
||||
|
||||
; Other files to install on target system
|
||||
Source: "i386\EditPath.exe"; DestDir: "{app}"; Check: not Is64BitInstallMode()
|
||||
Source: "x86_64\EditPath.exe"; DestDir: "{app}"; Check: Is64BitInstallMode()
|
||||
Source: "EditPath.md"; DestDir: "{app}"
|
||||
|
||||
[Tasks]
|
||||
Name: modifypath; Description: "&Add to Path"
|
||||
|
||||
[Code]
|
||||
const
|
||||
MODIFY_PATH_TASK_NAME = 'modifypath'; // Specify name of task
|
||||
|
||||
var
|
||||
PathIsModified: Boolean; // Cache task selection from previous installs
|
||||
ApplicationUninstalled: Boolean; // Has application been uninstalled?
|
||||
|
||||
// Import AddDirToPath() at setup time ('files:' prefix)
|
||||
function DLLAddDirToPath(DirName: string; PathType, AddType: DWORD): DWORD;
|
||||
external 'AddDirToPath@files:PathMgr.dll stdcall setuponly';
|
||||
|
||||
// Import RemoveDirFromPath() at uninstall time ('{app}\' prefix)
|
||||
function DLLRemoveDirFromPath(DirName: string; PathType: DWORD): DWORD;
|
||||
external 'RemoveDirFromPath@{app}\PathMgr.dll stdcall uninstallonly';
|
||||
|
||||
// Wrapper for AddDirToPath() DLL function
|
||||
function AddDirToPath(const DirName: string): DWORD;
|
||||
var
|
||||
PathType, AddType: DWORD;
|
||||
begin
|
||||
// PathType = 0 - use system Path
|
||||
// PathType = 1 - use user Path
|
||||
// AddType = 0 - add to end of Path
|
||||
// AddType = 1 - add to beginning of Path
|
||||
if IsAdminInstallMode() then
|
||||
PathType := 0
|
||||
else
|
||||
PathType := 1;
|
||||
AddType := 0;
|
||||
result := DLLAddDirToPath(DirName, PathType, AddType);
|
||||
end;
|
||||
|
||||
// Wrapper for RemoveDirFromPath() DLL function
|
||||
function RemoveDirFromPath(const DirName: string): DWORD;
|
||||
var
|
||||
PathType: DWORD;
|
||||
begin
|
||||
// PathType = 0 - use system Path
|
||||
// PathType = 1 - use user Path
|
||||
if IsAdminInstallMode() then
|
||||
PathType := 0
|
||||
else
|
||||
PathType := 1;
|
||||
result := DLLRemoveDirFromPath(DirName, PathType);
|
||||
end;
|
||||
|
||||
procedure RegisterPreviousData(PreviousDataKey: Integer);
|
||||
begin
|
||||
// Store previous or current task selection as custom user setting
|
||||
if PathIsModified or WizardIsTaskSelected(MODIFY_PATH_TASK_NAME) then
|
||||
SetPreviousData(PreviousDataKey, MODIFY_PATH_TASK_NAME, 'true');
|
||||
end;
|
||||
|
||||
function InitializeSetup(): Boolean;
|
||||
begin
|
||||
result := true;
|
||||
// Was task selected during a previous install?
|
||||
PathIsModified := GetPreviousData(MODIFY_PATH_TASK_NAME, '') = 'true';
|
||||
end;
|
||||
|
||||
function InitializeUninstall(): Boolean;
|
||||
begin
|
||||
result := true;
|
||||
// Was task selected during a previous install?
|
||||
PathIsModified := GetPreviousData(MODIFY_PATH_TASK_NAME, '') = 'true';
|
||||
ApplicationUninstalled := false;
|
||||
end;
|
||||
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
if CurStep = ssPostInstall then
|
||||
begin
|
||||
// Add app directory to Path at post-install step if task selected
|
||||
if PathIsModified or WizardIsTaskSelected(MODIFY_PATH_TASK_NAME) then
|
||||
AddDirToPath(ExpandConstant('{app}'));
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
|
||||
begin
|
||||
if CurUninstallStep = usUninstall then
|
||||
begin
|
||||
// Remove app directory from path during uninstall if task was selected;
|
||||
// use variable because we can't use WizardIsTaskSelected() at uninstall
|
||||
if PathIsModified then
|
||||
RemoveDirFromPath(ExpandConstant('{app}'));
|
||||
end
|
||||
else if CurUninstallStep = usPostUninstall then
|
||||
begin
|
||||
ApplicationUninstalled := true;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure DeinitializeUninstall();
|
||||
begin
|
||||
if ApplicationUninstalled then
|
||||
begin
|
||||
// Unload and delete PathMgr.dll and remove app dir when uninstalling
|
||||
UnloadDLL(ExpandConstant('{app}\PathMgr.dll'));
|
||||
DeleteFile(ExpandConstant('{app}\PathMgr.dll'));
|
||||
RemoveDir(ExpandConstant('{app}'));
|
||||
end;
|
||||
end;
|
||||
; Copyright (C) 2021-2023 by Bill Stewart (bstewart at iname.com)
|
||||
;
|
||||
; This program is free software; you can redistribute it and/or modify it under
|
||||
; the terms of the GNU Lesser General Public License as published by the Free
|
||||
; Software Foundation; either version 3 of the License, or (at your option) any
|
||||
; later version.
|
||||
;
|
||||
; This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
; FOR A PARTICULAR PURPOSE. See the GNU General Lesser Public License for more
|
||||
; details.
|
||||
;
|
||||
; You should have received a copy of the GNU Lesser General Public License
|
||||
; along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
|
||||
; Sample Inno Setup (https://www.jrsoftware.org/isinfo.php) script
|
||||
; demonstrating use of PathMgr.dll.
|
||||
;
|
||||
; This script uses PathMgr.dll in the following ways:
|
||||
; * Copies PathMgr.dll to the target machine (required for uninstall)
|
||||
; * Defines a task in [Tasks] that should modify the Path
|
||||
; * Imports the AddDirToPath() DLL function at setup time
|
||||
; * Imports the RemoveDirFromPath() DLL function at uninstall time
|
||||
; * Stores task state as custom setting using RegisterPreviousData()
|
||||
; * Retrieves task state custom setting during setup and uninstall initialize
|
||||
; * At post install, adds app dir to Path if task selected
|
||||
; * At uninstall, removes dir from Path if custom setting present
|
||||
; * Unloads and deletes DLL and removes app dir at uninstall deinitialize
|
||||
|
||||
#if Ver < EncodeVer(6,0,0,0)
|
||||
#error This script requires Inno Setup 6 or later
|
||||
#endif
|
||||
|
||||
[Setup]
|
||||
AppId={{A17D2D05-C729-4F2A-9CC7-E04906C5A842}
|
||||
AppName=EditPath
|
||||
AppVersion=4.0.4.0
|
||||
UsePreviousAppDir=false
|
||||
DefaultDirName={autopf}\EditPath
|
||||
Uninstallable=true
|
||||
OutputDir=.
|
||||
OutputBaseFilename=EditPath_Setup
|
||||
ArchitecturesInstallIn64BitMode=x64
|
||||
PrivilegesRequired=none
|
||||
PrivilegesRequiredOverridesAllowed=dialog
|
||||
|
||||
[Files]
|
||||
; Install PathMgr.dll for use with both setup and uninstall; use
|
||||
; uninsneveruninstall flag because DeinitializeSetup() will delete after
|
||||
; unloading the DLL; install the 32-bit version of PathMgr.dll because both
|
||||
; setup and uninstall executables are 32-bit
|
||||
Source: "i386\PathMgr.dll"; DestDir: "{app}"; Flags: uninsneveruninstall
|
||||
|
||||
; Other files to install on target system
|
||||
Source: "i386\EditPath.exe"; DestDir: "{app}"; Check: not Is64BitInstallMode()
|
||||
Source: "x86_64\EditPath.exe"; DestDir: "{app}"; Check: Is64BitInstallMode()
|
||||
Source: "EditPath.md"; DestDir: "{app}"
|
||||
|
||||
[Tasks]
|
||||
Name: modifypath; Description: "&Add to Path"
|
||||
|
||||
[Code]
|
||||
const
|
||||
MODIFY_PATH_TASK_NAME = 'modifypath'; // Specify name of task
|
||||
|
||||
var
|
||||
PathIsModified: Boolean; // Cache task selection from previous installs
|
||||
ApplicationUninstalled: Boolean; // Has application been uninstalled?
|
||||
|
||||
// Import AddDirToPath() at setup time ('files:' prefix)
|
||||
function DLLAddDirToPath(DirName: string; PathType, AddType: DWORD): DWORD;
|
||||
external 'AddDirToPath@files:PathMgr.dll stdcall setuponly';
|
||||
|
||||
// Import RemoveDirFromPath() at uninstall time ('{app}\' prefix)
|
||||
function DLLRemoveDirFromPath(DirName: string; PathType: DWORD): DWORD;
|
||||
external 'RemoveDirFromPath@{app}\PathMgr.dll stdcall uninstallonly';
|
||||
|
||||
// Wrapper for AddDirToPath() DLL function
|
||||
function AddDirToPath(const DirName: string): DWORD;
|
||||
var
|
||||
PathType, AddType: DWORD;
|
||||
begin
|
||||
// PathType = 0 - use system Path
|
||||
// PathType = 1 - use user Path
|
||||
// AddType = 0 - add to end of Path
|
||||
// AddType = 1 - add to beginning of Path
|
||||
if IsAdminInstallMode() then
|
||||
PathType := 0
|
||||
else
|
||||
PathType := 1;
|
||||
AddType := 0;
|
||||
result := DLLAddDirToPath(DirName, PathType, AddType);
|
||||
end;
|
||||
|
||||
// Wrapper for RemoveDirFromPath() DLL function
|
||||
function RemoveDirFromPath(const DirName: string): DWORD;
|
||||
var
|
||||
PathType: DWORD;
|
||||
begin
|
||||
// PathType = 0 - use system Path
|
||||
// PathType = 1 - use user Path
|
||||
if IsAdminInstallMode() then
|
||||
PathType := 0
|
||||
else
|
||||
PathType := 1;
|
||||
result := DLLRemoveDirFromPath(DirName, PathType);
|
||||
end;
|
||||
|
||||
procedure RegisterPreviousData(PreviousDataKey: Integer);
|
||||
begin
|
||||
// Store previous or current task selection as custom user setting
|
||||
if PathIsModified or WizardIsTaskSelected(MODIFY_PATH_TASK_NAME) then
|
||||
SetPreviousData(PreviousDataKey, MODIFY_PATH_TASK_NAME, 'true');
|
||||
end;
|
||||
|
||||
function InitializeSetup(): Boolean;
|
||||
begin
|
||||
result := true;
|
||||
// Was task selected during a previous install?
|
||||
PathIsModified := GetPreviousData(MODIFY_PATH_TASK_NAME, '') = 'true';
|
||||
end;
|
||||
|
||||
function InitializeUninstall(): Boolean;
|
||||
begin
|
||||
result := true;
|
||||
// Was task selected during a previous install?
|
||||
PathIsModified := GetPreviousData(MODIFY_PATH_TASK_NAME, '') = 'true';
|
||||
ApplicationUninstalled := false;
|
||||
end;
|
||||
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
if CurStep = ssPostInstall then
|
||||
begin
|
||||
// Add app directory to Path at post-install step if task selected
|
||||
if PathIsModified or WizardIsTaskSelected(MODIFY_PATH_TASK_NAME) then
|
||||
AddDirToPath(ExpandConstant('{app}'));
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
|
||||
begin
|
||||
if CurUninstallStep = usUninstall then
|
||||
begin
|
||||
// Remove app directory from path during uninstall if task was selected;
|
||||
// use variable because we can't use WizardIsTaskSelected() at uninstall
|
||||
if PathIsModified then
|
||||
RemoveDirFromPath(ExpandConstant('{app}'));
|
||||
end
|
||||
else if CurUninstallStep = usPostUninstall then
|
||||
begin
|
||||
ApplicationUninstalled := true;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure DeinitializeUninstall();
|
||||
begin
|
||||
if ApplicationUninstalled then
|
||||
begin
|
||||
// Unload and delete PathMgr.dll and remove app dir when uninstalling
|
||||
UnloadDLL(ExpandConstant('{app}\PathMgr.dll'));
|
||||
DeleteFile(ExpandConstant('{app}\PathMgr.dll'));
|
||||
RemoveDir(ExpandConstant('{app}'));
|
||||
end;
|
||||
end;
|
||||
|
||||
@@ -1,118 +1,118 @@
|
||||
# EditPath
|
||||
|
||||
EditPath is a Windows console (text-based, command-line) program for managing the system Path and user Path.
|
||||
|
||||
# Author
|
||||
|
||||
Bill Stewart - bstewart at iname dot com
|
||||
|
||||
# License
|
||||
|
||||
EditPath.exe is covered by the GNU Lesser Public License (LPGL). See the file `LICENSE` for details.
|
||||
|
||||
# Download
|
||||
|
||||
https://github.com/Bill-Stewart/PathMgr/releases/
|
||||
|
||||
# Background
|
||||
|
||||
The system Path is found in the following location in the Windows registry:
|
||||
|
||||
Root: `HKEY_LOCAL_MACHINE`
|
||||
Subkey: `SYSTEM\CurrentControlSet\Control\Session Manager\Environment`
|
||||
Value name: `Path`
|
||||
|
||||
The current user Path is found in the following location in the registry:
|
||||
|
||||
Root: `HKEY_CURRENT_USER`
|
||||
Subkey: `Environment`
|
||||
Value name: `Path`
|
||||
|
||||
In both cases, the `Path` value is (or should be) the registry type `REG_EXPAND_SZ`, which means that it is a string that can contain values surrounded by `%` characters that Windows will automatically expand to environment variable values. (For example, `%SystemRoot%` will be expanded to `C:\Windows` on most systems.)
|
||||
|
||||
The `Path` value contains a `;`-delimited list of directory names that the system should search for executables, library files, scripts, etc. Windows appends the content of the current user Path to the system Path and expands the environment variable references. The resulting string is set as the `Path` environment variable for processes.
|
||||
|
||||
EditPath provides a command-line interface for managing the `Path` value in the system location (in `HKEY_LOCAL_MACHINE`) and the current user location (in `HKEY_CURRENT_USER`).
|
||||
|
||||
# Usage
|
||||
|
||||
The following describes the command-line usage for the program. Parameters are case-sensitive.
|
||||
|
||||
**EditPath** [_options_] _type_ _action_
|
||||
|
||||
You must specify only one of the following _type_ parameters:
|
||||
|
||||
| _type_ | Abbreviation | Description
|
||||
| ------- | ------------ | -----------
|
||||
| **--system** | **-s** | Specifies the system Path
|
||||
| **--user** | **-u** | Specifies the user Path
|
||||
|
||||
You must specify only one of the following _action_ parameters:
|
||||
|
||||
| _action_ | Abbreviation | Description
|
||||
| -------- | ------------ | -----------
|
||||
| **--list** | **-l** | Lists directories in Path
|
||||
| **--test "**_dirname_**"** | **-t "**_dirname_**"** | Tests if directory exists in Path
|
||||
| **--add "**_dirname_**"** | **-a "**_dirname_**"** | Adds directory to Path
|
||||
| **--remove "**_dirname_**"** | **-r "**_dirname_**"** | Removes directory from Path
|
||||
|
||||
The following parameters are optional:
|
||||
|
||||
| _options_ | Abbreviation | Description
|
||||
| --------- | ------------ | -----------
|
||||
| **--quiet** | **-q** | Suppresses result messages
|
||||
| **--expand** | **-x** | Expands environment variables (**--list** only)
|
||||
| **--beginning** | **-b** | Adds to beginning of Path (**--add** only)
|
||||
|
||||
# Exit Codes
|
||||
|
||||
The following table lists typical exit codes when not using **--test** (**-t**).
|
||||
|
||||
| Exit Code | Description
|
||||
| --------- | -----------
|
||||
| 0 | No errors
|
||||
| 2 | The Path value is not present in the registry
|
||||
| 3 | The specified directory does not exist in the Path
|
||||
| 5 | Access is denied
|
||||
| 87 | Incorrect parameter(s)
|
||||
| 183 | The specified directory already exists in the Path
|
||||
|
||||
The following table lists typical exit codes when using **--test** (**-t**).
|
||||
|
||||
| Exit Code | Description
|
||||
| --------- | -----------
|
||||
| 1 | The specified directory exists in the unexpanded Path
|
||||
| 2 | The specified directory exists in the expanded Path
|
||||
| 3 | The specified directory does not exist in the Path
|
||||
|
||||
# Remarks
|
||||
|
||||
* Anything on the command line after **--test**, **--add**, or **--remove** is considered to be the argument for the parameter. To avoid ambiguity, specify the _action_ parameter last on the command line.
|
||||
|
||||
* Uexpanded vs. expanded refers to whether the environment variable references (i.e., names between `%` characters) are expanded after retrieving the Path value from the registry. For example, `%SystemRoot%` is unexpanded but `C:\Windows` is expanded.
|
||||
|
||||
* The **--add** (**-a**) parameter checks whether the specified directory exists in both the unexpanded and expanded copies of the Path before adding the directory. For example, if the environment variable `TESTAPP` is set to `C:\TestApp` and `%TESTAPP%` is in the Path, specifying `--add C:\TestApp` will return exit code 183 (i.e., the directory already exists in the Path) because `%TESTAPP%` expands to `C:\TestApp`.
|
||||
|
||||
* The **--remove** (**-r**) parameter does not expand environment variable references. For example, if the environment variable `TESTAPP` is set to `C:\TestApp` and `%TESTAPP%` is in the Path, specifying `--remove "C:\TestApp"` will return exit code 3 (i.e., the directory does not exist in the Path) because **--remove** does not expand `%TESTAPP%` to `C:\TestApp`. For the command to succeed, you would have to specify `--remove "%TESTAPP%"` instead.
|
||||
|
||||
* The program will exit with error code 87 if a parameter (or an argument to a parameter) is missing or not valid, if mutually exclusive parameters are specified, etc.
|
||||
|
||||
* The program will exit with error code 5 if the current user does not have permission to update the Path value in the registry (for example, if you try to update the system Path using a standard user account or an unelevated administrator account).
|
||||
|
||||
# Examples
|
||||
|
||||
1. `EditPath --expand --system --list`
|
||||
|
||||
This command outputs the directories in the system Path, with environment variables expanded. You can also write this command as `EditPath -x -s -l`.
|
||||
|
||||
2. `EditPath --user --add "%LOCALAPPDATA%\Programs\MyApp"`
|
||||
|
||||
Adds the specified directory name to the user Path.
|
||||
|
||||
3. `EditPath -s -r "C:\Program Files\MyApp\bin"`
|
||||
|
||||
Removes the specified directory from the system Path.
|
||||
|
||||
4. `EditPath -s --test "C:\Program Files (x86)\MyApp\bin"`
|
||||
|
||||
Returns an exit code of 3 if the specified directory is not in the system Path, 1 if the specified directory is in the unexpanded copy of the system Path, or 2 if the specified directory is in the expanded copy of the system Path.
|
||||
# EditPath
|
||||
|
||||
EditPath is a Windows console (text-based, command-line) program for managing the system Path and user Path.
|
||||
|
||||
# Author
|
||||
|
||||
Bill Stewart - bstewart at iname dot com
|
||||
|
||||
# License
|
||||
|
||||
EditPath.exe is covered by the GNU Lesser Public License (LPGL). See the file `LICENSE` for details.
|
||||
|
||||
# Download
|
||||
|
||||
https://github.com/Bill-Stewart/PathMgr/releases/
|
||||
|
||||
# Background
|
||||
|
||||
The system Path is found in the following location in the Windows registry:
|
||||
|
||||
Root: `HKEY_LOCAL_MACHINE`
|
||||
Subkey: `SYSTEM\CurrentControlSet\Control\Session Manager\Environment`
|
||||
Value name: `Path`
|
||||
|
||||
The current user Path is found in the following location in the registry:
|
||||
|
||||
Root: `HKEY_CURRENT_USER`
|
||||
Subkey: `Environment`
|
||||
Value name: `Path`
|
||||
|
||||
In both cases, the `Path` value is (or should be) the registry type `REG_EXPAND_SZ`, which means that it is a string that can contain values surrounded by `%` characters that Windows will automatically expand to environment variable values. (For example, `%SystemRoot%` will be expanded to `C:\Windows` on most systems.)
|
||||
|
||||
The `Path` value contains a `;`-delimited list of directory names that the system should search for executables, library files, scripts, etc. Windows appends the content of the current user Path to the system Path and expands the environment variable references. The resulting string is set as the `Path` environment variable for processes.
|
||||
|
||||
EditPath provides a command-line interface for managing the `Path` value in the system location (in `HKEY_LOCAL_MACHINE`) and the current user location (in `HKEY_CURRENT_USER`).
|
||||
|
||||
# Usage
|
||||
|
||||
The following describes the command-line usage for the program. Parameters are case-sensitive.
|
||||
|
||||
**EditPath** [_options_] _type_ _action_
|
||||
|
||||
You must specify only one of the following _type_ parameters:
|
||||
|
||||
| _type_ | Abbreviation | Description
|
||||
| ------- | ------------ | -----------
|
||||
| **--system** | **-s** | Specifies the system Path
|
||||
| **--user** | **-u** | Specifies the user Path
|
||||
|
||||
You must specify only one of the following _action_ parameters:
|
||||
|
||||
| _action_ | Abbreviation | Description
|
||||
| -------- | ------------ | -----------
|
||||
| **--list** | **-l** | Lists directories in Path
|
||||
| **--test "**_dirname_**"** | **-t "**_dirname_**"** | Tests if directory exists in Path
|
||||
| **--add "**_dirname_**"** | **-a "**_dirname_**"** | Adds directory to Path
|
||||
| **--remove "**_dirname_**"** | **-r "**_dirname_**"** | Removes directory from Path
|
||||
|
||||
The following parameters are optional:
|
||||
|
||||
| _options_ | Abbreviation | Description
|
||||
| --------- | ------------ | -----------
|
||||
| **--quiet** | **-q** | Suppresses result messages
|
||||
| **--expand** | **-x** | Expands environment variables (**--list** only)
|
||||
| **--beginning** | **-b** | Adds to beginning of Path (**--add** only)
|
||||
|
||||
# Exit Codes
|
||||
|
||||
The following table lists typical exit codes when not using **--test** (**-t**).
|
||||
|
||||
| Exit Code | Description
|
||||
| --------- | -----------
|
||||
| 0 | No errors
|
||||
| 2 | The Path value is not present in the registry
|
||||
| 3 | The specified directory does not exist in the Path
|
||||
| 5 | Access is denied
|
||||
| 87 | Incorrect parameter(s)
|
||||
| 183 | The specified directory already exists in the Path
|
||||
|
||||
The following table lists typical exit codes when using **--test** (**-t**).
|
||||
|
||||
| Exit Code | Description
|
||||
| --------- | -----------
|
||||
| 1 | The specified directory exists in the unexpanded Path
|
||||
| 2 | The specified directory exists in the expanded Path
|
||||
| 3 | The specified directory does not exist in the Path
|
||||
|
||||
# Remarks
|
||||
|
||||
* Anything on the command line after **--test**, **--add**, or **--remove** is considered to be the argument for the parameter. To avoid ambiguity, specify the _action_ parameter last on the command line.
|
||||
|
||||
* Uexpanded vs. expanded refers to whether the environment variable references (i.e., names between `%` characters) are expanded after retrieving the Path value from the registry. For example, `%SystemRoot%` is unexpanded but `C:\Windows` is expanded.
|
||||
|
||||
* The **--add** (**-a**) parameter checks whether the specified directory exists in both the unexpanded and expanded copies of the Path before adding the directory. For example, if the environment variable `TESTAPP` is set to `C:\TestApp` and `%TESTAPP%` is in the Path, specifying `--add C:\TestApp` will return exit code 183 (i.e., the directory already exists in the Path) because `%TESTAPP%` expands to `C:\TestApp`.
|
||||
|
||||
* The **--remove** (**-r**) parameter does not expand environment variable references. For example, if the environment variable `TESTAPP` is set to `C:\TestApp` and `%TESTAPP%` is in the Path, specifying `--remove "C:\TestApp"` will return exit code 3 (i.e., the directory does not exist in the Path) because **--remove** does not expand `%TESTAPP%` to `C:\TestApp`. For the command to succeed, you would have to specify `--remove "%TESTAPP%"` instead.
|
||||
|
||||
* The program will exit with error code 87 if a parameter (or an argument to a parameter) is missing or not valid, if mutually exclusive parameters are specified, etc.
|
||||
|
||||
* The program will exit with error code 5 if the current user does not have permission to update the Path value in the registry (for example, if you try to update the system Path using a standard user account or an unelevated administrator account).
|
||||
|
||||
# Examples
|
||||
|
||||
1. `EditPath --expand --system --list`
|
||||
|
||||
This command outputs the directories in the system Path, with environment variables expanded. You can also write this command as `EditPath -x -s -l`.
|
||||
|
||||
2. `EditPath --user --add "%LOCALAPPDATA%\Programs\MyApp"`
|
||||
|
||||
Adds the specified directory name to the user Path.
|
||||
|
||||
3. `EditPath -s -r "C:\Program Files\MyApp\bin"`
|
||||
|
||||
Removes the specified directory from the system Path.
|
||||
|
||||
4. `EditPath -s --test "C:\Program Files (x86)\MyApp\bin"`
|
||||
|
||||
Returns an exit code of 3 if the specified directory is not in the system Path, 1 if the specified directory is in the unexpanded copy of the system Path, or 2 if the specified directory is in the expanded copy of the system Path.
|
||||
|
||||
@@ -34,7 +34,7 @@ SolidCompression=yes
|
||||
; 64-bit Program Files directory and the 64-bit view of the registry.
|
||||
ArchitecturesInstallIn64BitMode=x64
|
||||
OutputDir="."
|
||||
OutputBaseFilename="medley-install_{#version}_{#x86_or_x64}"
|
||||
OutputBaseFilename="medley-full-{#version}-windows-{#x86_or_x64}"
|
||||
SetupIconFile="Medley.ico"
|
||||
DisableWelcomePage=no
|
||||
MissingRunOnceIdsWarning=no
|
||||
|
||||
@@ -1,19 +1,22 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
|
||||
|
||||
(FILECREATED "23-May-2023 07:10:58" |{DSK}<home>larry>il>medley>internal>MEDLEY-UTILS.;12| 10354
|
||||
(FILECREATED "16-Nov-2023 21:59:19" |{DSK}<home>larry>il>medley>internal>MEDLEY-UTILS.;2| 18962
|
||||
|
||||
:EDIT-BY "lmm"
|
||||
|
||||
:CHANGES-TO (FNS GATHER-INFO)
|
||||
:CHANGES-TO (VARS OKLIBRARY OKLISPUSERS)
|
||||
|
||||
:PREVIOUS-DATE "22-May-2023 22:57:21" |{DSK}<home>larry>il>medley>internal>MEDLEY-UTILS.;11|)
|
||||
:PREVIOUS-DATE " 4-Nov-2023 15:23:16" |{DSK}<home>larry>il>medley>internal>MEDLEY-UTILS.;1|)
|
||||
|
||||
|
||||
(PRETTYCOMPRINT MEDLEY-UTILSCOMS)
|
||||
|
||||
(RPAQQ MEDLEY-UTILSCOMS ((FNS GATHER-INFO MAKE-FULLER-DB MEDLEY-FIX-LINKS MEDLEY-FIX-DATES)
|
||||
(VARS MEDLEY-FIX-DIRS OKSOURCES OKLIBRARY OKLISPUSERS OKINTERNAL)
|
||||
(FNS MAKE-EXPORTS-ALL MAKE-WHEREIS-HASH)))
|
||||
(FNS MAKE-EXPORTS-ALL MAKE-WHEREIS-HASH)
|
||||
(FNS BADFILE HCFILES PRETTYFILES)
|
||||
(INITVARS (HCFILES)
|
||||
(BADFILES))))
|
||||
(DEFINEQ
|
||||
|
||||
(GATHER-INFO
|
||||
@@ -102,18 +105,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
|
||||
@@ -135,18 +139,22 @@
|
||||
(POSTSCRIPTSTREAM CHATTERMINAL DMCHAT CHAT PRESS READNUMBER EDITBITMAP IMAGEOBJ TEDIT HRULE
|
||||
TABLEBROWSER FILEBROWSER GRAPHER SPY WHERE-IS COPYFILES MSANALYZE MSPARSE MSCOMMON
|
||||
MASTERSCOPE UNIXCOMM UNIXPRINT UNICODE HASH CLIPBOARD UNIXCHAT VT100KP VTCHAT SKETCH
|
||||
SKETCHBMELT SCALEBITMAP SKETCHOBJ SKETCHEDIT SKETCHELEMENTS SKETCHOPS MATMULT SAMEDIR))
|
||||
SKETCHBMELT SCALEBITMAP SKETCHOBJ SKETCHEDIT SKETCHELEMENTS SKETCHOPS MATMULT SAMEDIR
|
||||
REMOTEVMEM ETHERRECORDS UNIXUTILS CHATDECLS BROWSER))
|
||||
|
||||
(RPAQQ OKLISPUSERS (THINFILES ISO8859IO DINFO HELPSYS MODERNIZE WHEELSCROLL PRETTYFILEINDEX WHO-LINE
|
||||
BACKGROUND-YIELD OBJECTWINDOW REGIONMANAGER COMPARETEXT EXAMINEDEFS
|
||||
COMPARESOURCES COMPAREDIRECTORIES PSEUDOHOSTS DATEFORMAT-EDITOR DOC-OBJECTS
|
||||
EQUATIONS BICLOCK FILEWATCH LIFE IDLEHAX GITFNS TMAX IMTOOLS))
|
||||
(RPAQQ OKLISPUSERS
|
||||
(THINFILES ISO8859IO DINFO HELPSYS MODERNIZE WHEELSCROLL PRETTYFILEINDEX WHO-LINE
|
||||
BACKGROUND-YIELD OBJECTWINDOW REGIONMANAGER COMPARETEXT EXAMINEDEFS COMPARESOURCES
|
||||
COMPAREDIRECTORIES PSEUDOHOSTS DATEFORMAT-EDITOR DOC-OBJECTS EQUATIONS BICLOCK
|
||||
FILEWATCH LIFE IDLEHAX GITFNS TMAX IMTOOLS EQUATIONFORMS UNBOXEDOPS TILED-SEDIT
|
||||
IDLEDEMO WDWHACKS BUTTONS PICK PAGEHOLD UNIXYCD))
|
||||
|
||||
(RPAQQ OKINTERNAL (MEDLEY-UTILS))
|
||||
(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 +164,184 @@
|
||||
"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))))
|
||||
)
|
||||
(DEFINEQ
|
||||
|
||||
(BADFILE
|
||||
(LAMBDA NIL (* \; "Edited 20-Oct-2022 15:40 by lmm")
|
||||
(* \; "Edited 22-Jun-2022 09:40 by larry")
|
||||
(|pushnew| BADFILES *FILE*)
|
||||
(LET ((STR (OPENSTREAM "BADFILES.TXT" 'APPEND)))
|
||||
(SETFILEPTR STR -1)
|
||||
(PRINT *FILE* STR)
|
||||
(CLOSEF STR))
|
||||
(RETFROM (OR (STKPOS 'PRETTYFILES)
|
||||
'HCFILES))))
|
||||
|
||||
(HCFILES
|
||||
(LAMBDA (*FILE* DEST REDOFLG TOPDIRLEN)
|
||||
(DECLARE (SPECVARS *FILE*)
|
||||
(GLOBALVARS BADFILE)) (* \; "Edited 4-Nov-2023 11:14 by lmm")
|
||||
(* \; "Edited 20-Oct-2022 16:11 by lmm")
|
||||
(* \; "Edited 9-Aug-2022 20:44 by lmm")
|
||||
(|if| (NULL *FILE*)
|
||||
|then| (SETQ *FILE* MEDLEYDIR))
|
||||
(COND
|
||||
((LISTP *FILE*)
|
||||
(FOR X IN *FILE* DO (HCFILES X DEST REDOFLG TOPDIRLEN)))
|
||||
((DIRECTORYNAMEP *FILE*)
|
||||
|
||||
(* |;;| "canonicalize")
|
||||
|
||||
(SETQ *FILE* (DIRECTORYNAME *FILE*))
|
||||
(OR TOPDIRLEN (SETQ TOPDIRLEN (CL:LENGTH (FILENAMEFIELD.STRING *FILE* 'DIRECTORY))))
|
||||
(CL:UNLESS DEST
|
||||
(|ShellCommand| (CONCAT "mkdir -p " (UNIX-GETENV "MEDLEYDIR")
|
||||
"/tmp/psfiles/"))
|
||||
(SETQ DEST (MEDLEYDIR "tmp/psfiles" NIL T T)))
|
||||
|
||||
(* |;;| "first deal with files in this directory")
|
||||
|
||||
(|for| EXT |in| '("TED*" "SKETCH")
|
||||
|do| (|for| X |in| (DIRECTORY (CONCAT *FILE* "*." EXT ";*"))
|
||||
|do| (HCFILES X DEST REDOFLG TOPDIRLEN)))
|
||||
|
||||
(* |;;| " then deal with subdirs ")
|
||||
|
||||
(|for| X |in| (DIRECTORY (CONCAT *FILE* "*"))
|
||||
|when| (|for| SKIP |in| '(">." ">dinfo>") |always| (NOT (STRPOS SKIP (L-CASE X))))
|
||||
|when| (DIRECTORYNAMEP X) |do| (HCFILES X DEST REDOFLG TOPDIRLEN)))
|
||||
((SETQ *FILE* (INFILEP *FILE*))
|
||||
(LET* ((TF (UNPACKFILENAME.STRING *FILE*))
|
||||
(NAME (LISTGET TF 'NAME))
|
||||
(DIR (LISTGET TF 'DIRECTORY))
|
||||
(PSFILE (PACKFILENAME.STRING
|
||||
'EXTENSION
|
||||
(|if| (EQ REDOFLG 'IP)
|
||||
|then| "IP"
|
||||
|else| "PS")
|
||||
'NAME
|
||||
(|if| (EQ DEST T)
|
||||
|then| (* \; "with the tedit file")
|
||||
NAME
|
||||
|else| (CONCAT (PACK (SUBST '- '> (UNPACK (SUBSTRING DIR (IPLUS 2 TOPDIRLEN
|
||||
)
|
||||
-1))))
|
||||
"-" NAME))
|
||||
'HOST
|
||||
(LISTGET TF 'HOST)
|
||||
'DIRECTORY
|
||||
(|if| (EQ DEST T)
|
||||
|then| DIR
|
||||
|else| DEST)))
|
||||
(TEXTSTREAM))
|
||||
(|if| (AND (NOT REDOFLG)
|
||||
(INFILEP PSFILE))
|
||||
|then| (* \; " do nothing")
|
||||
(PRINTOUT T PSFILE " already there" T)
|
||||
|elseif| (EQ REDOFLG 'TEST)
|
||||
|then| (PRINTOUT T *FILE* "-> " PSFILE T)
|
||||
(CLOSEF (OPENTEXTSTREAM *FILE*))
|
||||
|elseif| (MEMBER *FILE* BADFILES)
|
||||
|then| (PRINTOUT T "Skipping " *FILE* " on BADFILES")
|
||||
|else| (PRINTOUT T "Converting " *FILE* " to " PSFILE "...")
|
||||
(TEDIT.FORMAT.HARDCOPY (SETQ TEXTSTREAM (OPENTEXTSTREAM *FILE*))
|
||||
PSFILE T NIL NIL NIL (|if| (EQ REDOFLG 'IP)
|
||||
|then| 'INTERPRESS
|
||||
|else| 'POSTSCRIPT))
|
||||
(|printout| T " DONE" T)
|
||||
(CLOSEF? TEXTSTREAM))))
|
||||
(T (PRINTOUT T "no such file " T)))))
|
||||
|
||||
(PRETTYFILES
|
||||
(LAMBDA (*FILE* DEST REDOFLG TOPDIRLEN)
|
||||
(DECLARE (SPECVARS *FILE*)
|
||||
(GLOBALVARS BADFILES)) (* \; "Edited 20-Oct-2022 16:12 by lmm")
|
||||
(* \; "Edited 9-Aug-2022 20:44 by lmm")
|
||||
(|if| (NULL *FILE*)
|
||||
|then| (SETQ *FILE* MEDLEYDIR))
|
||||
(COND
|
||||
((DIRECTORYNAMEP *FILE*)
|
||||
|
||||
(* |;;| "canonicalize")
|
||||
|
||||
(SETQ *FILE* (DIRECTORYNAME *FILE*))
|
||||
(OR TOPDIRLEN (SETQ TOPDIRLEN (CL:LENGTH (FILENAMEFIELD.STRING *FILE* 'DIRECTORY))))
|
||||
(CL:UNLESS DEST
|
||||
(|ShellCommand| (CONCAT "mkdir -p " (UNIX-GETENV "MEDLEYDIR")
|
||||
"/tmp/psfiles/"))
|
||||
(SETQ DEST (MEDLEYDIR "tmp/psfiles" NIL T T)))
|
||||
|
||||
(* |;;| "first deal with files in this directory; ignore files with extensions for now\"*.LISP\" \"*.ILISP\"")
|
||||
|
||||
(|for| PAT |in| '("*.;") |do| (|for| X |in| (DIRECTORY (CONCAT *FILE* PAT))
|
||||
WHEN (NOT (DIRECTORYNAMEP X)) WHEN (INFILEP X)
|
||||
WHEN (CAR (OR (NLSETQ (LISPSOURCEFILEP X))
|
||||
(PROGN (PRINTOUT T "LISPSOURCEFILEP error" X)
|
||||
NIL)))
|
||||
|do| (PRETTYFILES X DEST REDOFLG TOPDIRLEN)))
|
||||
|
||||
(* |;;| " then deal with subdirs ")
|
||||
|
||||
(|for| X |in| (DIRECTORY (CONCAT *FILE* "*"))
|
||||
|when| (|for| SKIP IN '("clos" "cltl2" "rooms>" ".>")
|
||||
|always| (NOT (STRPOS SKIP (L-CASE X)))) |when| (DIRECTORYNAMEP X)
|
||||
|do| (PRETTYFILES X DEST REDOFLG TOPDIRLEN)))
|
||||
((AND (SETQ *FILE* (INFILEP *FILE*))
|
||||
(LISPSOURCEFILEP *FILE*))
|
||||
(LET* ((TF (UNPACKFILENAME.STRING *FILE*))
|
||||
(NAME (LISTGET TF 'NAME))
|
||||
(DIR (LISTGET TF 'DIRECTORY))
|
||||
(PSFILE (PACKFILENAME.STRING
|
||||
'EXTENSION "ps" 'NAME
|
||||
(|if| (EQ DEST T)
|
||||
|then| (* \; "with the source file")
|
||||
(CONCAT NAME ".pfi")
|
||||
|else| (CONCAT (PACK (SUBST '- '> (UNPACK (SUBSTRING DIR (IPLUS 2 TOPDIRLEN
|
||||
)
|
||||
-1))))
|
||||
"-" NAME))
|
||||
'HOST
|
||||
(LISTGET TF 'HOST)
|
||||
'DIRECTORY
|
||||
(|if| (EQ DEST T)
|
||||
|then| DIR
|
||||
|else| DEST))))
|
||||
(|if| (AND (NOT REDOFLG)
|
||||
(INFILEP PSFILE))
|
||||
|then| (* \; " do nothing")
|
||||
(PRINTOUT T PSFILE " already there" T)
|
||||
|elseif| (MEMBER *FILE* BADFILES)
|
||||
|then| (PRINTOUT T "Skipping " *FILE* " on BADFILES")
|
||||
|else| (PRINTOUT T "Converting " *FILE* " to " PSFILE "...")
|
||||
(CL:WITH-OPEN-STREAM (STR (OPENPOSTSCRIPTSTREAM PSFILE))
|
||||
(PRETTYFILEINDEX *FILE* NIL STR))
|
||||
(|printout| T " DONE" T))))
|
||||
(T (PRINTOUT T "no such file " T)))))
|
||||
)
|
||||
|
||||
(RPAQ? HCFILES )
|
||||
|
||||
(RPAQ? BADFILES )
|
||||
(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 (781 7744 (GATHER-INFO 791 . 6319) (MAKE-FULLER-DB 6321 . 7099) (MEDLEY-FIX-LINKS 7101
|
||||
. 7498) (MEDLEY-FIX-DATES 7500 . 7742)) (8923 10914 (MAKE-EXPORTS-ALL 8933 . 9994) (MAKE-WHEREIS-HASH
|
||||
9996 . 10912)) (10915 18894 (BADFILE 10925 . 11393) (HCFILES 11395 . 15280) (PRETTYFILES 15282 .
|
||||
18892)))))
|
||||
STOP
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
|
||||
(FILECREATED "18-Jan-2023 16:23:36" {DSK}<home>frank>il>medley>gmedley>sources>LOADUP-FULL.;2 4636
|
||||
(FILECREATED "31-Jul-2023 18:28:53" {DSK}<home>frank>il>medley>gmedley>sources>LOADUP-FULL.;4 4521
|
||||
|
||||
:CHANGES-TO (FNS LOADUP-FULL)
|
||||
|
||||
:PREVIOUS-DATE "12-Aug-2022 12:30:09" {DSK}<home>frank>il>medley>gmedley>sources>LOADUP-FULL.;1
|
||||
:PREVIOUS-DATE "18-Jan-2023 16:23:36" {DSK}<home>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
|
||||
@@ -1,10 +1,13 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
|
||||
|
||||
(FILECREATED "12-Aug-2022 12:29:57" |{DSK}<home>larry>medley>sources>LOADUP-LISP.;2| 5250
|
||||
(FILECREATED "14-Mar-2024 12:16:33" |{DSK}<home>larry>il>medley>internal>loadups>LOADUP-LISP.;2| 5426
|
||||
|
||||
:CHANGES-TO (VARS LOADUP-LISPCOMS)
|
||||
:EDIT-BY "lmm"
|
||||
|
||||
:PREVIOUS-DATE "13-Jul-2022 14:10:00" |{DSK}<home>larry>medley>sources>LOADUP-LISP.;1|)
|
||||
:CHANGES-TO (FNS LOADUP-LISP)
|
||||
|
||||
:PREVIOUS-DATE "31-Jul-2023 18:22:53"
|
||||
|{DSK}<home>larry>il>medley>internal>loadups>LOADUP-LISP.;1|)
|
||||
|
||||
|
||||
(PRETTYCOMPRINT LOADUP-LISPCOMS)
|
||||
@@ -17,14 +20,14 @@
|
||||
(DEFINEQ
|
||||
|
||||
(LOADUP-LISP
|
||||
(LAMBDA NIL (* \; "Edited 13-Jul-2022 14:09 by rmk")
|
||||
(LAMBDA (DRIBBLEFILE) (* \; "Edited 14-Mar-2024 12:16 by lmm")
|
||||
(* \; "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 2-Mar-2022 16:31 by larry")
|
||||
(* \; "Edited 28-Feb-2022 15:02 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))))
|
||||
@@ -99,10 +102,18 @@
|
||||
(LOADUP '(CMLSMARTARGS))
|
||||
(LOADUP '(IMPLICIT-KEY-HASH CLOSURE-CACHE))
|
||||
|
||||
(* |;;| " not sure what this depends on, so putting it here")
|
||||
|
||||
(LOADUP '(BIGBITMAPS))
|
||||
|
||||
(* |;;| "Already enabled, but this time fixes tables that weren't defined in the init")
|
||||
|
||||
(PACKAGE-ENABLE)
|
||||
|
||||
(* |;;| " Added late")
|
||||
|
||||
(LOADUP '(XCL-LOOP))
|
||||
|
||||
(* |;;| " networking code -- should make it optional but too many cross dependencies")
|
||||
|
||||
(LOADUP '(PUP 10MBDRIVER LEAF LLETHER DPUPFTP LOCALFILE DSKDISPLAY COURIER LLNS TRSERVER SPP
|
||||
@@ -119,5 +130,5 @@
|
||||
(GLOBALVARS MAKESYSFILENAME MEDLEY-INIT-VARS MEDLEYDIR SYSTEMINITVARS USERRECLST)
|
||||
)
|
||||
(DECLARE\: DONTCOPY
|
||||
(FILEMAP (NIL (631 5044 (LOADUP-LISP 641 . 5042)))))
|
||||
(FILEMAP (NIL (673 5220 (LOADUP-LISP 683 . 5218)))))
|
||||
STOP
|
||||
BIN
internal/loadups/LOADUP-LISP.LCOM
Normal file
@@ -1,18 +1,13 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
|
||||
(FILECREATED "11-Jul-2022 20:00:23"
|
||||
{DSK}<users>kaplan>local>medley3.5>working-medley>sources>MAKEINIT.;3 54607
|
||||
(FILECREATED " 7-Aug-2023 13:31:49" {DSK}<home>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}<users>kaplan>local>medley3.5>working-medley>sources>MAKEINIT.;2)
|
||||
:PREVIOUS-DATE " 3-Aug-2023 17:37:51"
|
||||
{DSK}<home>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
|
||||