#!/bin/sh # Runs deck-engine (--format json) piped straight into interpreter-cli for # "today": same OS-clock seed/transit-moment and user.properties birth # data as run-engine.sh, but reports how significant today's transits are # instead of printing the full reading. Usage: ./run-interpreter.sh # [text|html|json] [lang] # # [lang] overrides user.properties' lang= for this run only, same as # run-engine.sh - but note it only affects interpreter-cli's own output; # deck-engine is always run without --lang here, since --format json is # deliberately language-independent (see docs/input-output-format.md). # # Requires both dist/deck-engine (built by engine/'s Makefile) and # dist/interpreter-cli (built by interpreter/'s own Makefile) to already # exist next to this script. set -eu SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" ENGINE_BINARY="$SCRIPT_DIR/deck-engine" INTERPRETER_BINARY="$SCRIPT_DIR/interpreter-cli" PROPERTIES_FILE="$SCRIPT_DIR/user.properties" if [ ! -x "$ENGINE_BINARY" ]; then echo "error: $ENGINE_BINARY not found or not executable (run 'make' in engine/ first)" >&2 exit 1 fi if [ ! -x "$INTERPRETER_BINARY" ]; then echo "error: $INTERPRETER_BINARY not found or not executable (run 'make' in interpreter/ first)" >&2 exit 1 fi if [ ! -f "$PROPERTIES_FILE" ]; then echo "error: $PROPERTIES_FILE not found" >&2 exit 1 fi birth_date="" birth_time="" birth_utc_offset="" birth_lat="" birth_lon="" gender="unspecified" lang="en" while IFS='=' read -r key value || [ -n "$key" ]; do key="$(printf '%s' "$key" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" value="$(printf '%s' "$value" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" case "$key" in '' | '#'*) continue ;; esac case "$key" in birth_date) birth_date="$value" ;; birth_time) birth_time="$value" ;; birth_utc_offset) birth_utc_offset="$value" ;; birth_lat) birth_lat="$value" ;; birth_lon) birth_lon="$value" ;; gender) [ -n "$value" ] && gender="$value" ;; lang) [ -n "$value" ] && lang="$value" ;; esac done <"$PROPERTIES_FILE" check_set() { case "$2" in '' | *YOUR_*) echo "error: $PROPERTIES_FILE: '$1' is not set - edit the file and fill in your details." >&2 exit 1 ;; esac } check_set birth_date "$birth_date" check_set birth_time "$birth_time" check_set birth_utc_offset "$birth_utc_offset" check_set birth_lat "$birth_lat" check_set birth_lon "$birth_lon" # OS-provided inputs: today's date is the tarot seed (stable all day, a # new spread each day), current UTC time drives today's transits. The # tarot seed still matters for --format json now that "spread" is read # downstream too (guidance.c's Attitude/Outcome framing) - kept identical # to run-engine.sh's for consistency either way. seed="$(date +%Y-%m-%d)" transit_date="$(date -u +%Y-%m-%dT%H:%M)" format="${1:-text}" lang="${2:-$lang}" "$ENGINE_BINARY" \ --seed "$seed" \ --birth-date "$birth_date" \ --birth-time "$birth_time" \ --birth-utc-offset "$birth_utc_offset" \ --birth-lat "$birth_lat" \ --birth-lon "$birth_lon" \ --date "$transit_date" \ --format json \ --gender "$gender" \ | exec "$INTERPRETER_BINARY" --format "$format" --lang "$lang" --i18n-dir "$SCRIPT_DIR/i18n"