IIgs "Warehouse" demo built!

This commit is contained in:
Scott Duensing 2023-01-12 19:42:22 -06:00
parent ccb46f4920
commit b26b44fdbd
15 changed files with 1610 additions and 58 deletions

3
.gitattributes vendored Normal file
View file

@ -0,0 +1,3 @@
*.dat filter=lfs diff=lfs merge=lfs -text
*.img filter=lfs diff=lfs merge=lfs -text
*.mod filter=lfs diff=lfs merge=lfs -text

17
buildTest.sh Normal file
View file

@ -0,0 +1,17 @@
#!/bin/bash
source automated.install
source towel/towel.sh
tSudoSetPassword "${AUTOMATED_SUDO}"
tArgsHandler $@
[[ -d /home/test/build ]] && tSudo rm -rf /home/test/build
tSudo mkdir -p /home/test/build
tSudo cp sampleProject/* /home/test/build
tSudo chown -R test:test /home/test/build
tSudo chmod ugo+rwx /home/test/build
tSudo chmod ugo+rw /home/test/build/*
./joeybuild.sh build /home/test/build

View file

@ -27,6 +27,7 @@
# #
G_HTTP_PORT=6502 # Port to use for HTTP server. Must be > 1024.
G_EHOME="$(getent passwd $(logname) | cut -d: -f6)" # Home for this user. G_EHOME="$(getent passwd $(logname) | cut -d: -f6)" # Home for this user.
G_SRC="${G_EHOME}/joeylib/joeylib/src" # Location of JoeyLib source. G_SRC="${G_EHOME}/joeylib/joeylib/src" # Location of JoeyLib source.
G_TEMP="${G_EHOME}/temp" # Directory to store temporary data. G_TEMP="${G_EHOME}/temp" # Directory to store temporary data.
@ -44,7 +45,7 @@ function addBuildUser() {
local SALT=$(LC_ALL=C tr -cd "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" < /dev/urandom | head -c 8) local SALT=$(LC_ALL=C tr -cd "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" < /dev/urandom | head -c 8)
local CRYPT=$(perl -e 'print crypt($ARGV[0], $ARGV[1])' ${PASS} ${SALT}) local CRYPT=$(perl -e 'print crypt($ARGV[0], $ARGV[1])' ${PASS} ${SALT})
tSudo useradd -m -G sftponly -s /sbin/false -p "${CRYPT}" "${USER}" tSudo useradd -m -G sftponly -s /usr/bin/false -p "${CRYPT}" "${USER}"
tSudo chown root:root /home/${USER} tSudo chown root:root /home/${USER}
tSudo chmod 755 /home/${USER} tSudo chmod 755 /home/${USER}
tSudo mkdir -p /home/${USER}/build tSudo mkdir -p /home/${USER}/build
@ -100,12 +101,15 @@ function doBuild() {
local AFILES=() local AFILES=()
local CFILES=() local CFILES=()
local OFILES=() local OFILES=()
local DATA=() local DFILES=()
local TEMP= local TEMP=
local TARGET= local TARGET=
local RESULT= local RESULT=
local LOG= local LOG=
local PASS= local PASS=
local PROJECT_TYPE=
set -x
pushd "${SOURCE}" pushd "${SOURCE}"
@ -119,11 +123,20 @@ function doBuild() {
mkdir -p results mkdir -p results
G_BUILD_RESULTS=${SOURCE}/results G_BUILD_RESULTS=${SOURCE}/results
# Read project information.
G_BUILD_PLATFORMS="[" G_BUILD_PLATFORMS="["
G_BUILD_PROJECT= G_BUILD_PROJECT=
PROJECT_TYPE=
# Read project information.
while IFS= read -r LINE; do while IFS= read -r LINE; do
# If we don't have a project name, grab it from the first line of the project file and set things up. # If we don't have a project type, grab it from the first line of the project file and set things up.
if [[ -z ${PROJECT_TYPE} ]]; then
PROJECT_TYPE=${LINE}
# Skip to next loop pass.
continue
fi
# If we don't have a project name, grab it from the second line of the project file and set things up.
if [[ -z ${G_BUILD_PROJECT} ]]; then if [[ -z ${G_BUILD_PROJECT} ]]; then
G_BUILD_PROJECT=${LINE} G_BUILD_PROJECT=${LINE}
# Generate a list of non-source files. # Generate a list of non-source files.
@ -132,17 +145,26 @@ function doBuild() {
if [[ "${FILE}" != "build.start" && "${FILE}" != "build.temp" && "${FILE}" != "build.tar.bz2" ]]; then if [[ "${FILE}" != "build.start" && "${FILE}" != "build.temp" && "${FILE}" != "build.tar.bz2" ]]; then
EXTENSION="${FILE##*.}" EXTENSION="${FILE##*.}"
if [[ "${EXTENSION}" != "c" && "${EXTENSION}" != "h" && "${EXTENSION}" != "asm" && "${EXTENSION}" != "macro" && "${EXTENSION}" != "inc" ]]; then if [[ "${EXTENSION}" != "c" && "${EXTENSION}" != "h" && "${EXTENSION}" != "asm" && "${EXTENSION}" != "macro" && "${EXTENSION}" != "inc" ]]; then
DATA+=(${FILE}) DFILES+=(${FILE})
fi fi
fi fi
fi fi
done done
# Generate a list of C files to compile. # Generate a list of C files to compile.
TEMP=$(ls -1 *.c 2>/dev/null | wc -l)
if [[ ${TEMP} -ne 0 ]]; then
CFILES=($(ls -1 *.c)) CFILES=($(ls -1 *.c))
fi
# Generate a list of ASM files to assemble. # Generate a list of ASM files to assemble.
TEMP=$(ls -1 *.asm 2>/dev/null | wc -l)
if [[ ${TEMP} -ne 0 ]]; then
AFILES=($(ls -1 *.asm)) AFILES=($(ls -1 *.asm))
else fi
# This is for the 2nd and later lines of the project that list which targets to build. # Skip to next loop pass.
continue
fi
# This is for the 3rd and later lines of the project that list which targets to build.
TARGET= TARGET=
for TEMP in ${LINE}; do for TEMP in ${LINE}; do
if [[ -z ${TARGET} ]]; then if [[ -z ${TARGET} ]]; then
@ -154,25 +176,33 @@ function doBuild() {
# We at least tried to build this target. # We at least tried to build this target.
G_BUILD_PLATFORMS="${G_BUILD_PLATFORMS}${TARGET}.${TEMP}.${PASS} " G_BUILD_PLATFORMS="${G_BUILD_PLATFORMS}${TARGET}.${TEMP}.${PASS} "
# Make sure we have the official JoeyLib header. # Make sure we have the official JoeyLib header.
cp -f "${G_HOME}/dist/joey.h" . cp -f "${G_EHOME}/dist/joey.h" .
# Log file. # Log file.
LOG="${G_BUILD_RESULTS}/build.${TARGET}.${TEMP}.${PASS}" LOG="${G_BUILD_RESULTS}/build.${TARGET}.${TEMP}.${PASS}"
# Compile C files and generate object list. # Compile C files and generate object list.
call RESULT ${TARGET} ${TEMP} compile CFILES ${PASS} ${LOG} if [[ "${#CFILES[@]}" != "0" ]]; then
call RESULT ${TARGET} compile ${TEMP} ${PASS} ${LOG} "${CFILES[@]}"
OFILES=(${RESULT}) OFILES=(${RESULT})
fi
# Assemble ASM files and generate object list. # Assemble ASM files and generate object list.
call RESULT ${TARGET} ${TEMP} assemble AFILES ${PASS} ${LOG} if [[ "${#AFILES[@]}" != "0" ]]; then
call RESULT ${TARGET} assemble ${TEMP} ${PASS} ${LOG} "${AFILES[@]}"
OFILES+=(${RESULT}) OFILES+=(${RESULT})
fi
# Link with JoeyLib. # Link with JoeyLib.
call RESULT ${TARGET} ${TEMP} link OFILES ${PASS} ${LOG} call RESULT ${TARGET} link ${TEMP} ${PASS} ${LOG} "${OFILES[@]}"
# Process game data files. # Process game data files.
call RESULT ${TARGET} ${TEMP} package DATA ${PASS} ${LOG} if [[ "${#DFILES[@]}" != "0" ]]; then
done call RESULT ${TARGET} package ${TEMP} ${PASS} ${LOG} "${DFILES[@]}"
fi fi
done done
fi fi
done done
done < build.start
popd
tTrim TEMP "${G_BUILD_PLATFORMS}" tTrim TEMP "${G_BUILD_PLATFORMS}"
G_BUILD_PLATFORMS="${TEMP}]" G_BUILD_PLATFORMS="${TEMP}]"
} }
@ -185,6 +215,9 @@ function doInstall() {
updateSystem updateSystem
configureSFTP configureSFTP
# Add 'false' as a valid shell.
echo "/usr/bin/false" | tSudo tee -a /etc/shells
withTargets install "Installing SDK" withTargets install "Installing SDK"
rebuildJoeyLib rebuildJoeyLib
@ -315,20 +348,20 @@ function startBuildServer() {
# Build supported project types and target details for JoeyDev. # Build supported project types and target details for JoeyDev.
echo "1.0" > http/joeydev.info echo "1.0" > http/joeydev.info
echo "------------------------------------------------------------------------------" >> http/joeydev.info echo "------------------------------------------------------------------------------" >> http/joeydev.info
echo "=build.application \"JoeyLib Application\"" >> http/joeydev.info echo "project application \"JoeyLib Application\"" >> http/joeydev.info
echo "=build.joeylib \"JoeyLib Itself\"" >> http/joeydev.info # echo "project joeylib \"JoeyLib Itself\"" >> http/joeydev.info
for TARGET in ${G_EHOME}/targets/*.target; do for TARGET in ${G_EHOME}/targets/*.target; do
NAME=$(basename -s .target ${TARGET}) NAME=$(basename -s .target ${TARGET})
call RESULT ${NAME} enabled call RESULT ${NAME} enabled
if [[ ${RESULT} -eq 1 ]]; then if [[ ${RESULT} -eq 1 ]]; then
call ARCHS ${NAME} architectures call ARCHS ${NAME} architectures
call DESCRIPTION ${NAME} friendlyName call DESCRIPTION ${NAME} friendlyName
echo "+${NAME} \"${DESCRIPTION}\" ${ARCHS}" >> http/joeydev.info echo "target ${NAME} \"${DESCRIPTION}\" ${ARCHS}" >> http/joeydev.info
fi fi
done done
# Start the PHP web server if it's not already running. # Start the PHP web server if it's not already running.
php -S 0.0.0.0:6502 -t http >> joeybuild.log 2>&1 & php -S 0.0.0.0:${G_HTTP_PORT} -t http >> joeybuild.log 2>&1 &
# Start the actual build server. # Start the actual build server.
cd /home cd /home

BIN
sampleProject/about.img (Stored with Git LFS) Normal file

Binary file not shown.

BIN
sampleProject/biff.img (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,3 @@
application
Warehouse
IIgs 65816

BIN
sampleProject/font.img (Stored with Git LFS) Normal file

Binary file not shown.

BIN
sampleProject/help.img (Stored with Git LFS) Normal file

Binary file not shown.

BIN
sampleProject/index.dat (Stored with Git LFS) Normal file

Binary file not shown.

BIN
sampleProject/kanga.img (Stored with Git LFS) Normal file

Binary file not shown.

1366
sampleProject/main.c Normal file

File diff suppressed because it is too large Load diff

BIN
sampleProject/puzzles.dat (Stored with Git LFS) Normal file

Binary file not shown.

95
sampleProject/stddclmr.h Normal file
View file

@ -0,0 +1,95 @@
#ifndef STDDCLMR_H
#define STDDCLMR_H
/*
Action figures sold separately. Add toner. All models over 18 years of age.
All rights reserved. Allow four to six weeks for delivery. An equal
opportunity employer. Any resemblance to actual persons, living or dead, is
unintentional and purely coincidental. Apply only to affected area. Approved
for veterans. As seen on TV. At participating locations only. Avoid contact
with mucous membranes. Avoid contact with skin. Avoid extreme temperatures
and store in a cool dry place. Batteries not included. Be sure each item is
properly endorsed. Beware of dog. Booths for two or more. Breaking seal
constitutes acceptance of agreement. Call toll free number before digging.
Caveat emptor. Check here if tax deductible. Close cover before striking
Colors may fade. Contains a substantial amount of non-tobacco ingredients.
Contents may settle during shipment. Contestants have been briefed on some
questions before the show. Copyright 1995 Joker's Wild. Disclaimer does
not cover hurricane, lightning, tornado, tsunami, volcanic eruption,
earthquake, flood, and other Acts of God, misuse, neglect, unauthorized
repair, damage from improper installation, broken antenna or marred cabinet,
incorrect line voltage, missing or altered serial numbers, sonic boom
vibrations, electromagnetic radiation from nuclear blasts, customer
adjustments that are not covered in the joke list, and incidents owing to
airplane crash, ship sinking, motor vehicle accidents, leaky roof, broken
glass, falling rocks, mud slides, forest fire, flying projectiles, or
dropping the item. Do not bend, fold, mutilate, or spindle. Do not place
near flammable or magnetic source. Do not puncture, incinerate, or store
above 120 degrees Fahrenheit. Do not stamp. Use other side for additional
listings. Do not use while operating a motor vehicle or heavy equipment. Do
not write below this line. Documents are provided "as is" without any
warranties expressed or implied. Don't quote me on anything. Don't quote me
on that. Driver does not carry cash. Drop in any mailbox. Edited for
television. Employees and their families are not eligible. Falling rock.
First pull up, then pull down. Flames redirected to /dev/null. For a
limited time only. For external use only. For off-road use only. For office
use only. For recreational use only. Do not disturb. Freshest if eaten
before date on carton. Hand wash only, tumble dry on low heat. If a rash,
redness, irritation, or swelling develops, discontinue use. If condition
persists, consult your physician. If defects are discovered, do not attempt
to fix them yourself, but return to an authorized service center. If
ingested, do not induce vomiting, if symptoms persist, consult a doctor.
Keep away from open flames and avoid inhaling fumes. Keep away from
sunlight, pets, and small children. Keep cool; process promptly. Limit
one-per-family please. Limited time offer, call now to ensure prompt
delivery. List at least two alternate dates. List each check separately by
bank number. List was current at time of printing. Lost ticket pays maximum
rate. May be too intense for some viewers. Must be 18 to enter. No Canadian
coins. No alcohol, dogs or horses. No anchovies unless otherwise specified.
No animals were harmed in the production of these documents. No money down.
No other warranty expressed or implied. No passes accepted for this
engagement. No postage necessary if mailed in the United States. No
preservatives added. No purchase necessary. No salt, MSG, artificial color
or flavor added. No shoes, no shirt, no service, no kidding. No solicitors.
No substitutions allowed. No transfers issued until the bus comes to a
complete stop. No user-serviceable parts inside. Not affiliated with the
American Red Cross. Not liable for damages due to use or misuse. Not
recommended for children. Not responsible for direct, indirect, incidental
or consequential damages resulting from any defect, error or failure to
perform. Not the Beatles. Objects in mirror may be closer than they appear.
One size fits all. Many suitcases look alike. Other copyright laws for
specific entries apply wherever noted. Other restrictions may apply. Package
sold by weight, not volume. Parental advisory - explicit lyrics. Penalty for
private use. Place stamp here. Please remain seated until the ride has come
to a complete stop. Possible penalties for early withdrawal. Post office will
not deliver without postage. Postage will be paid by addressee. Prerecorded
for this time zone. Price does not include taxes. Processed at location
stamped in code at top of carton. Quantities are limited while supplies last.
Read at your own risk. Record additional transactions on back of previous
stub. Replace with same type. Reproduction strictly prohibited. Restaurant
package, not for resale. Return to sender, no forwarding order on file,
unable to forward. Safety goggles may be required during use. Sanitized for
your protection. Sealed for your protection, do not use if the safety seal is
broken. See label for sequence. Shading within a garment may occur. Sign here
without admitting guilt. Simulated picture. Slightly enlarged to show detail.
Slightly higher west of the Rockies. Slippery when wet. Smoking these may be
hazardous to your health. Some assembly required. Some equipment shown is
optional. Some of the trademarks mentioned in this product appear for
identification purposes only. Subject to FCC approval. Subject to change
without notice. Substantial penalty for early withdrawal. Text may contain
material some readers may find objectionable, parental guidance is advised.
Text used in these documents is made from 100% recycled electrons and magnetic
particles. These documents do not reflect the thoughts or opinions of either
myself, my company, my friends, or my rabbit. This is not an offer to sell
securities. This offer is void where prohibited, taxed, or otherwise
restricted. This product is meant for educational purposes only. Times
approximate. Unix is a registered trademark of AT&T. Use only as directed. Use
only in a well-ventilated are. User assumes full liabilities. Void where
prohibited. We have sent the forms which seem right for you. You must be
present to win. You need not be present to win. Your canceled check is your
receipt. Your mileage may vary. I didn't do it. You can't prove anything.
This supersedes all previous notices.
*/
#endif // STDDCLMR_H

BIN
sampleProject/title.img (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -37,9 +37,10 @@ function architectures() {
function assemble() { function assemble() {
local -n AFILES=$1 local ARCH=$1
local PASS=$2 local PASS=$2
local LOG=$3 local LOG=$3
local AFILES=(${*:4})
local OFILES="" local OFILES=""
local FILE= local FILE=
local O= local O=
@ -64,12 +65,12 @@ function buildJoeyLib() {
local PASS=$2 local PASS=$2
local OUT=${GOLDEN_GATE}/out/joey local OUT=${GOLDEN_GATE}/out/joey
setCompiler
rm -rf ${G_DIST} rm -rf ${G_DIST}
mkdir -p ${G_DIST} mkdir -p ${G_DIST}
pushd ${G_DIST} pushd ${G_DIST}
setCompiler
rm -rf ${OUT} || true rm -rf ${OUT} || true
mkdir -p ${OUT} mkdir -p ${OUT}
@ -98,25 +99,26 @@ function buildJoeyLib() {
cp -f "${OUT}/joey.a" "joey.a#b10000" cp -f "${OUT}/joey.a" "joey.a#b10000"
cp -f "${M_IIGS}/Tool222#ba0000" . cp -f "${M_IIGS}/Tool222#ba0000" .
unSetCompiler
popd popd
unSetCompiler
} }
function compile() { function compile() {
local -n CFILES=$1 local ARCH=$1
local PASS=$2 local PASS=$2
local LOG=$3 local LOG=$3
local CFILES=(${*:4})
local OFILES="" local OFILES=""
local FILE= local FILE=
local O= local O=
[[ -d "${M_TARGET}" ]] && rm -rf "${M_TARGET}"
mkdir -p "${M_TARGET}"
setCompiler setCompiler
rm -rf "${M_TARGET}" || true
mkdir -p "${M_TARGET}"
# Compile C files and generate object list. # Compile C files and generate object list.
for FILE in "${CFILES[@]}"; do for FILE in "${CFILES[@]}"; do
O=${FILE%.*} O=${FILE%.*}
@ -282,10 +284,11 @@ function install() {
function link() { function link() {
local -n OFILES=$1 local ARCH=$1
local PASS=$2 local PASS=$2
local LOG=$3 local LOG=$3
local LIB="${G_HOME}/dist/IIgs-65816/${PASS}" local OFILES=(${*:4})
local LIB="${G_EHOME}/dist/IIgs-65816/${PASS}"
setCompiler setCompiler
@ -314,23 +317,29 @@ function link() {
function package() { function package() {
local -n DFILES=$1 local ARCH=$1
local PASS=$2 local PASS=$2
local LOG=$3 local LOG=$3
local DFILES=(${*:4})
local DIR=${G_BUILD_RESULTS}/IIgs-65816/${PASS} local DIR=${G_BUILD_RESULTS}/IIgs-65816/${PASS}
local DISK=${DIR}/${G_BUILD_PROJECT}.po local DISK=${DIR}/${G_BUILD_PROJECT}.po
local LIB="${G_HOME}/dist/IIgs-65816/${PASS}" local LIB="${G_EHOME}/dist/IIgs-65816/${PASS}"
local FILE= local FILE=
local O= local O=
local EXTENSION= local EXTENSION=
setCompiler
mkdir -p ${DIR} mkdir -p ${DIR}
#***TODO*** Maybe copy source code for everything to the disk in DEBUG so there are symbols to view?
# Create disk image, setting known file types # Create disk image, setting known file types
${M_CADIUS} createvolume ${DISK} ${G_BUILD_PROJECT} 32MB ${M_CADIUS} createvolume ${DISK} ${G_BUILD_PROJECT} 32MB
${M_CADIUS} createfolder ${DISK} ${G_BUILD_PROJECT}/data ${M_CADIUS} createfolder ${DISK} ${G_BUILD_PROJECT}/data
${M_CADIUS} addfile ${DISK} ${G_BUILD_PROJECT} ${M_TARGET}/${G_BUILD_PROJECT}#b3db03 ${M_CADIUS} addfile ${DISK} ${G_BUILD_PROJECT} ${M_TARGET}/${G_BUILD_PROJECT}#b3db03
${M_CADIUS} addfile ${DISK} ${G_BUILD_PROJECT}/data ${LIB}/Tool222#ba0000 ${M_CADIUS} addfile ${DISK} ${G_BUILD_PROJECT}/data ${LIB}/Tool222#ba0000
# Copy game data. # Copy game data.
for FILE in "${DFILES[@]}"; do for FILE in "${DFILES[@]}"; do
# Data conversion. # Data conversion.
@ -338,30 +347,32 @@ function package() {
case ${EXTENSION,,} in case ${EXTENSION,,} in
mod) mod)
php "${M_IIGS}/ntpconverter/ntpconverter.php" "${FILE}" php "${M_IIGS}/ntpconverter/ntpconverter.php" "${FILE}"
O=`basename -s .mod ${FILE}`.ntp#060000 O=${M_TARGET}/$(basename -s .mod ${FILE}).ntp#060000
mv -f ${FILE} ${O} mv -f ${FILE} ${O}
${M_CADIUS} addfile ${DISK} ${G_BUILD_PROJECT}/data ${O} ${M_CADIUS} addfile ${DISK} ${G_BUILD_PROJECT}/data ${O}
rm ${O} rm ${O}
;; ;;
*) *)
O=`basename ${FILE}`#060000 O=${M_TARGET}/$(basename ${FILE})#060000
cp -f ${FILE} ${O} cp -f ${FILE} ${O}
${M_CADIUS} addfile ${DISK} ${G_BUILD_PROJECT}/data ${O} ${M_CADIUS} addfile ${DISK} ${G_BUILD_PROJECT}/data ${O}
rm ${O} rm ${O}
;; ;;
esac esac
done done
unSetCompiler
} }
function setCompiler() { function setCompiler() {
export PATH=${G_ORIGINAL_PATH}:${M_IIGS} export PATH=${G_ORIGINAL_PATH}:${M_IIGS}
"${M_IIGS}/mountORCA.sh" "${M_IIGS}/mountORCA.sh" &> /dev/null
} }
function unSetCompiler() { function unSetCompiler() {
"${M_IIGS}/unmountORCA.sh" "${M_IIGS}/unmountORCA.sh" &> /dev/null
export PATH=${G_ORIGINAL_PATH} export PATH=${G_ORIGINAL_PATH}
} }