1.1--- a/build.rs Sun Apr 30 22:01:32 2023 -0400
1.2+++ b/build.rs Sun Apr 30 22:24:18 2023 -0400
1.3@@ -5,10 +5,10 @@
1.4 let crate_dir: PathBuf = env::var("CARGO_MANIFEST_DIR")
1.5 .expect("CARGO_MANIFEST_DIR env var is not defined")
1.6 .into();
1.7- let mpk_py = "build.py";
1.8+ // let mpk_py = "build.py";
1.9 let config = cbindgen::Config::from_file("cbindgen.toml")
1.10 .expect("Unable to find cbindgen.toml configuration file");
1.11- let build_dir = crate_dir.join("build/");
1.12+ let build_dir = crate_dir.join("ffi/");
1.13 if !build_dir.exists() {
1.14 create_dir(&build_dir).unwrap();
1.15 }
2.1--- a/cfg/Cargo.toml Sun Apr 30 22:01:32 2023 -0400
2.2+++ b/cfg/Cargo.toml Sun Apr 30 22:24:18 2023 -0400
2.3@@ -3,4 +3,5 @@
2.4 version = "0.1.0"
2.5 edition = "2021"
2.6 [dependencies]
2.7-serde_dhall = "0.12.1"
2.8\ No newline at end of file
2.9+obj = {version = "0.1.0",path = "../obj"}
2.10+serde_dhall = "0.12.1"
3.1--- a/cfg/src/lib.rs Sun Apr 30 22:01:32 2023 -0400
3.2+++ b/cfg/src/lib.rs Sun Apr 30 22:24:18 2023 -0400
3.3@@ -1,14 +1,4 @@
3.4-pub fn add(left: usize, right: usize) -> usize {
3.5- left + right
3.6-}
3.7+//! cfg/src/lib.rs --- Configuration types
3.8
3.9 #[cfg(test)]
3.10-mod tests {
3.11- use super::*;
3.12-
3.13- #[test]
3.14- fn it_works() {
3.15- let result = add(2, 2);
3.16- assert_eq!(result, 4);
3.17- }
3.18-}
3.19+mod tests;
4.1--- /dev/null Thu Jan 01 00:00:00 1970 +0000
4.2+++ b/cfg/src/tests.rs Sun Apr 30 22:24:18 2023 -0400
4.3@@ -0,0 +1,6 @@
4.4+//! cfg/src/tests --- unit tests
4.5+use crate::*;
4.6+#[test]
4.7+fn test_hello() {
4.8+ println!("looks good chief");
4.9+}
5.1--- a/makefile Sun Apr 30 22:01:32 2023 -0400
5.2+++ b/makefile Sun Apr 30 22:24:18 2023 -0400
5.3@@ -3,8 +3,8 @@
5.4 .PHONY:build
5.5 $(O):;mkdir -p $@
5.6 clean:;rm -rf out *.fasl;cargo clean
5.7-build:;ros/build.ros
5.8-docs:;ros/docs.ros
5.9-test:;ros/test.ros
5.10-pack:;ros/pack.ros
5.11+build:;scripts/build.ros
5.12+docs:;scripts/docs.ros
5.13+test:;scripts/test.ros
5.14+pack:;scripts/pack.ros
5.15 ci:clean build docs test pack;
6.1--- a/obj/Cargo.toml Sun Apr 30 22:01:32 2023 -0400
6.2+++ b/obj/Cargo.toml Sun Apr 30 22:24:18 2023 -0400
6.3@@ -2,7 +2,15 @@
6.4 name = "obj"
6.5 version = "0.1.0"
6.6 edition = "2021"
6.7-
6.8-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
6.9-
6.10 [dependencies]
6.11+ron = "0.7.0"
6.12+bincode = "1.3.3"
6.13+serde_json = "1.0.68"
6.14+serde = { version = "1.0.130", features = ["derive"] }
6.15+chrono = { version = "0.4.19", features = ["serde"] }
6.16+mime = "0.3.16"
6.17+regex = "1.5.4"
6.18+rusty_ulid = "0.11.0"
6.19+uuid = { version = "0.8", features = ["serde"] }
6.20+[target.'cfg(target_arch = "wasm32")'.dependencies]
6.21+uuid = { version = "0.8", features = ["wasm-bindgen"] }
7.1--- /dev/null Thu Jan 01 00:00:00 1970 +0000
7.2+++ b/obj/src/err.rs Sun Apr 30 22:24:18 2023 -0400
7.3@@ -0,0 +1,81 @@
7.4+//! obj errors
7.5+use std::{fmt, io};
7.6+
7.7+/// obj Result wrapper
7.8+pub type Result<T> = std::result::Result<T, Error>;
7.9+
7.10+/// obj Error type
7.11+#[derive(Debug)]
7.12+pub enum Error {
7.13+ Message(String),
7.14+ Ron(ron::error::Error),
7.15+ Json(serde_json::error::Error),
7.16+ Io(io::Error),
7.17+ Bincode(bincode::Error),
7.18+ Utf8(std::string::FromUtf8Error),
7.19+ Parse(std::string::ParseError),
7.20+}
7.21+
7.22+impl serde::ser::Error for Error {
7.23+ fn custom<T: fmt::Display>(msg: T) -> Self {
7.24+ Error::Message(msg.to_string())
7.25+ }
7.26+}
7.27+
7.28+impl serde::de::Error for Error {
7.29+ fn custom<T: fmt::Display>(msg: T) -> Self {
7.30+ Error::Message(msg.to_string())
7.31+ }
7.32+}
7.33+
7.34+impl fmt::Display for Error {
7.35+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
7.36+ match self {
7.37+ Error::Message(msg) => f.write_str(msg),
7.38+ Error::Io(ref err) => write!(f, "obj IO error: {}", err),
7.39+ Error::Ron(ref err) => write!(f, "obj Ron error: {}", err),
7.40+ Error::Json(ref err) => write!(f, "obj Json error: {}", err),
7.41+ Error::Bincode(ref err) => write!(f, "obj Bincode error: {}", err),
7.42+ Error::Utf8(ref err) => write!(f, "obj Utf8 error: {}", err),
7.43+ Error::Parse(ref err) => write!(f, "obj Parse error: {}", err),
7.44+ }
7.45+ }
7.46+}
7.47+
7.48+impl From<io::Error> for Error {
7.49+ fn from(e: io::Error) -> Self {
7.50+ Error::Io(e)
7.51+ }
7.52+}
7.53+
7.54+impl From<std::string::ParseError> for Error {
7.55+ fn from(e: std::string::ParseError) -> Self {
7.56+ Error::Parse(e)
7.57+ }
7.58+}
7.59+
7.60+impl From<std::string::FromUtf8Error> for Error {
7.61+ fn from(err: std::string::FromUtf8Error) -> Self {
7.62+ Error::Utf8(err)
7.63+ }
7.64+}
7.65+
7.66+impl From<ron::Error> for Error {
7.67+ fn from(e: ron::Error) -> Self {
7.68+ Error::Ron(e)
7.69+ }
7.70+}
7.71+
7.72+impl From<serde_json::Error> for Error {
7.73+ fn from(e: serde_json::Error) -> Self {
7.74+ Error::Json(e)
7.75+ }
7.76+}
7.77+
7.78+impl From<bincode::Error> for Error {
7.79+ fn from(e: bincode::Error) -> Self {
7.80+ Error::Bincode(e)
7.81+ }
7.82+}
7.83+
7.84+impl std::error::Error for Error {}
8.1--- a/obj/src/lib.rs Sun Apr 30 22:01:32 2023 -0400
8.2+++ b/obj/src/lib.rs Sun Apr 30 22:24:18 2023 -0400
8.3@@ -1,14 +1,125 @@
8.4-pub fn add(left: usize, right: usize) -> usize {
8.5- left + right
8.6+//! obj/src/lib.rs --- Objective type library
8.7+mod err;
8.8+pub use err::{Error,Result};
8.9+
8.10+pub use ron;
8.11+
8.12+use ron::extensions::Extensions;
8.13+use serde::{de::DeserializeOwned, Deserialize, Serialize};
8.14+use std::io;
8.15+
8.16+/// common trait for all config modules. This trait provides functions
8.17+/// for de/serializing to/from RON, updating fields, and formatting.
8.18+pub trait Configure: Objective {
8.19+ fn update(&self) -> Result<()> {
8.20+ Ok(())
8.21+ }
8.22 }
8.23
8.24-#[cfg(test)]
8.25-mod tests {
8.26- use super::*;
8.27+/// Objective trait
8.28+/// Define Object behaviors, implemented by Objects
8.29+pub trait Objective {
8.30+ fn encode(&self) -> Result<Vec<u8>>
8.31+ where
8.32+ Self: Serialize,
8.33+ {
8.34+ Ok(bincode::serialize(self)?)
8.35+ }
8.36+
8.37+ fn encode_into<W>(&self, writer: W) -> Result<()>
8.38+ where
8.39+ W: io::Write,
8.40+ Self: Serialize,
8.41+ {
8.42+ Ok(bincode::serialize_into(writer, self)?)
8.43+ }
8.44+
8.45+ fn decode<'a>(&self, bytes: &'a [u8]) -> Result<Self>
8.46+ where
8.47+ Self: Deserialize<'a>,
8.48+ {
8.49+ Ok(bincode::deserialize(bytes)?)
8.50+ }
8.51+
8.52+ fn decode_from<R>(&self, rdr: R) -> Result<Self>
8.53+ where
8.54+ R: io::Read,
8.55+ Self: DeserializeOwned,
8.56+ {
8.57+ Ok(bincode::deserialize_from(rdr)?)
8.58+ }
8.59+
8.60+ fn to_ron_writer<W>(&self, writer: W) -> Result<()>
8.61+ where
8.62+ W: io::Write,
8.63+ Self: Serialize,
8.64+ {
8.65+ Ok(ron::ser::to_writer_pretty(
8.66+ writer,
8.67+ &self,
8.68+ ron::ser::PrettyConfig::new()
8.69+ .indentor(" ".to_owned())
8.70+ .extensions(Extensions::all()),
8.71+ )?)
8.72+ }
8.73
8.74- #[test]
8.75- fn it_works() {
8.76- let result = add(2, 2);
8.77- assert_eq!(result, 4);
8.78- }
8.79+ fn to_ron_string(&self) -> Result<String>
8.80+ where
8.81+ Self: Serialize,
8.82+ {
8.83+ Ok(ron::ser::to_string_pretty(
8.84+ &self,
8.85+ ron::ser::PrettyConfig::new().indentor(" ".to_owned()),
8.86+ )?)
8.87+ }
8.88+
8.89+ fn from_ron_reader<R>(&self, mut rdr: R) -> Result<Self>
8.90+ where
8.91+ R: io::Read,
8.92+ Self: DeserializeOwned,
8.93+ {
8.94+ let mut bytes = Vec::new();
8.95+ rdr.read_to_end(&mut bytes)?;
8.96+ Ok(ron::de::from_bytes(&bytes)?)
8.97+ }
8.98+
8.99+ fn from_ron_str<'a>(s: &'a str) -> Result<Self>
8.100+ where
8.101+ Self: Deserialize<'a>,
8.102+ {
8.103+ Ok(ron::de::from_bytes(s.as_bytes())?)
8.104+ }
8.105+
8.106+ fn to_json_writer<W>(&self, writer: W) -> Result<()>
8.107+ where
8.108+ W: io::Write,
8.109+ Self: Serialize,
8.110+ {
8.111+ // let formatter = serde_json::ser::PrettyFormatter::with_indent(b" ");
8.112+ Ok(serde_json::ser::to_writer_pretty(writer, &self)?)
8.113+ }
8.114+
8.115+ fn to_json_string(&self) -> Result<String>
8.116+ where
8.117+ Self: Serialize,
8.118+ {
8.119+ Ok(serde_json::ser::to_string_pretty(&self)?)
8.120+ }
8.121+
8.122+ fn from_json_reader<R>(&self, mut rdr: R) -> Result<Self>
8.123+ where
8.124+ R: io::Read,
8.125+ Self: DeserializeOwned,
8.126+ {
8.127+ let mut bytes = Vec::new();
8.128+ rdr.read_to_end(&mut bytes)?;
8.129+ Ok(serde_json::de::from_slice(&bytes)?)
8.130+ }
8.131+
8.132+ fn from_json_str<'a>(s: &'a str) -> Result<Self>
8.133+ where
8.134+ Self: Deserialize<'a>,
8.135+ {
8.136+ Ok(serde_json::de::from_slice(s.as_bytes())?)
8.137+ }
8.138 }
9.1--- a/ros/build.ros Sun Apr 30 22:01:32 2023 -0400
9.2+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
9.3@@ -1,20 +0,0 @@
9.4-#!/bin/sh
9.5-#|-*- mode:lisp -*-|#
9.6-#|
9.7-exec ros -Q -- $0 "$@"
9.8-|#
9.9-(progn ;;init forms
9.10- (ros:ensure-asdf)
9.11- #+quicklisp(ql:quickload '() :silent t)
9.12- )
9.13-
9.14-(defpackage :ros.script.build.3891893519
9.15- (:use :cl))
9.16-(in-package :ros.script.build.3891893519)
9.17-
9.18-(defun main (&rest argv)
9.19- (declare (ignorable argv))
9.20- (asdf:load-asd "cl-demo.asd")
9.21- (asdf:load-system "cl-demo")
9.22- (asdf:make :cl-demo))
9.23-;;; vim: set ft=lisp lisp:
10.1--- a/ros/clean.ros Sun Apr 30 22:01:32 2023 -0400
10.2+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
10.3@@ -1,20 +0,0 @@
10.4-#!/bin/sh
10.5-#|-*- mode:lisp -*-|#
10.6-#|
10.7-exec ros -Q -- $0 "$@" ;
10.8-|#
10.9-
10.10-;; clean:;rm -rf out *.fasl;pushd rust;cargo clean;popd
10.11-
10.12-(progn ;;init forms
10.13- (ros:ensure-asdf)
10.14- #+quicklisp(ql:quickload '() :silent t)
10.15- )
10.16-
10.17-(defpackage :ros.script.clean.3891893753
10.18- (:use :cl))
10.19-(in-package :ros.script.clean.3891893753)
10.20-
10.21-(defun main (&rest argv)
10.22- (declare (ignorable argv)))
10.23-;;; vim: set ft=lisp lisp:
11.1--- a/ros/compile.ros Sun Apr 30 22:01:32 2023 -0400
11.2+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
11.3@@ -1,15 +0,0 @@
11.4-#!/bin/sh
11.5-#|-*- mode:lisp -*-|#
11.6-#|
11.7-exec ros -Q -- $0 "$@"
11.8-|#
11.9-(progn ;;init forms
11.10- (in-package :cl-user)
11.11- (ros:ensure-asdf)
11.12- (asdf:load-asd #P"~/dev/cl-demo/cl-demo.asd")
11.13- (asdf:load-asd #P"~/quicklisp/local-projects/cl-rocksdb/cl-rocksdb.asd")
11.14- #+quicklisp(ql:quickload '(cl-demo) :silent t))
11.15-
11.16-;; TODO 2023-02-25: opts (system, config, user input)
11.17-(defun main (&rest argv)
11.18- (declare (ignorable argv)))
12.1--- a/ros/db.ros Sun Apr 30 22:01:32 2023 -0400
12.2+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
12.3@@ -1,12 +0,0 @@
12.4-#!/bin/sh
12.5-#|-*- mode:lisp -*-|#
12.6-#|
12.7-exec ros -Q -- $0 "$@"
12.8-|#
12.9-(progn ;;init forms
12.10- (ros:ensure-asdf)
12.11- #+quicklisp(ql:quickload '() :silent t))
12.12-
12.13-(defun main (&rest argv)
12.14- (declare (ignorable argv))
12.15- (format t "hello world"))
13.1--- a/ros/demo.ros Sun Apr 30 22:01:32 2023 -0400
13.2+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
13.3@@ -1,12 +0,0 @@
13.4-#!/bin/sh
13.5-#|-*- mode:lisp -*-|#
13.6-#|
13.7-exec ros -Q -- $0 "$@"
13.8-|#
13.9-(progn ;;init forms
13.10- (ros:ensure-asdf)
13.11- #+quicklisp(ql:quickload '() :silent t))
13.12-
13.13-(defun main (&rest argv)
13.14- (declare (ignorable argv))
13.15- (format t "hello world"))
13.16\ No newline at end of file
14.1--- a/ros/docs.ros Sun Apr 30 22:01:32 2023 -0400
14.2+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
14.3@@ -1,12 +0,0 @@
14.4-#!/bin/sh
14.5-#|-*- mode:lisp -*-|#
14.6-#|
14.7-exec ros -Q -- $0 "$@"
14.8-|#
14.9-(progn ;;init forms
14.10- (ros:ensure-asdf)
14.11- #+quicklisp(ql:quickload '() :silent t))
14.12-
14.13-(defun main (&rest argv)
14.14- (declare (ignorable argv))
14.15- (format t "hello world"))
15.1--- a/ros/pack.ros Sun Apr 30 22:01:32 2023 -0400
15.2+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
15.3@@ -1,17 +0,0 @@
15.4-#!/bin/sh
15.5-#|-*- mode:lisp -*-|#
15.6-#|
15.7-exec ros -Q -- $0 "$@"
15.8-|#
15.9-(progn ;;init forms
15.10- (ros:ensure-asdf)
15.11- #+quicklisp(ql:quickload '() :silent t)
15.12- )
15.13-
15.14-(defpackage :ros.script.pack.3891893796
15.15- (:use :cl))
15.16-(in-package :ros.script.pack.3891893796)
15.17-
15.18-(defun main (&rest argv)
15.19- (declare (ignorable argv)))
15.20-;;; vim: set ft=lisp lisp:
16.1--- a/ros/test.ros Sun Apr 30 22:01:32 2023 -0400
16.2+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
16.3@@ -1,12 +0,0 @@
16.4-#!/bin/sh
16.5-#|-*- mode:lisp -*-|#
16.6-#|
16.7-exec ros -Q -- $0 "$@"
16.8-|#
16.9-(progn ;;init forms
16.10- (ros:ensure-asdf)
16.11- #+quicklisp(ql:quickload '() :silent t))
16.12-
16.13-(defun main (&rest argv)
16.14- (declare (ignorable argv))
16.15- (format t "hello world"))
17.1--- /dev/null Thu Jan 01 00:00:00 1970 +0000
17.2+++ b/scripts/build.ros Sun Apr 30 22:24:18 2023 -0400
17.3@@ -0,0 +1,20 @@
17.4+#!/bin/sh
17.5+#|-*- mode:lisp -*-|#
17.6+#|
17.7+exec ros -Q -- $0 "$@"
17.8+|#
17.9+(progn ;;init forms
17.10+ (ros:ensure-asdf)
17.11+ #+quicklisp(ql:quickload '() :silent t)
17.12+ )
17.13+
17.14+(defpackage :ros.script.build.3891893519
17.15+ (:use :cl))
17.16+(in-package :ros.script.build.3891893519)
17.17+
17.18+(defun main (&rest argv)
17.19+ (declare (ignorable argv))
17.20+ (asdf:load-asd "cl-demo.asd")
17.21+ (asdf:load-system "cl-demo")
17.22+ (asdf:make :cl-demo))
17.23+;;; vim: set ft=lisp lisp:
18.1--- /dev/null Thu Jan 01 00:00:00 1970 +0000
18.2+++ b/scripts/clean.ros Sun Apr 30 22:24:18 2023 -0400
18.3@@ -0,0 +1,20 @@
18.4+#!/bin/sh
18.5+#|-*- mode:lisp -*-|#
18.6+#|
18.7+exec ros -Q -- $0 "$@" ;
18.8+|#
18.9+
18.10+;; clean:;rm -rf out *.fasl;pushd rust;cargo clean;popd
18.11+
18.12+(progn ;;init forms
18.13+ (ros:ensure-asdf)
18.14+ #+quicklisp(ql:quickload '() :silent t)
18.15+ )
18.16+
18.17+(defpackage :ros.script.clean.3891893753
18.18+ (:use :cl))
18.19+(in-package :ros.script.clean.3891893753)
18.20+
18.21+(defun main (&rest argv)
18.22+ (declare (ignorable argv)))
18.23+;;; vim: set ft=lisp lisp:
19.1--- /dev/null Thu Jan 01 00:00:00 1970 +0000
19.2+++ b/scripts/compile.ros Sun Apr 30 22:24:18 2023 -0400
19.3@@ -0,0 +1,15 @@
19.4+#!/bin/sh
19.5+#|-*- mode:lisp -*-|#
19.6+#|
19.7+exec ros -Q -- $0 "$@"
19.8+|#
19.9+(progn ;;init forms
19.10+ (in-package :cl-user)
19.11+ (ros:ensure-asdf)
19.12+ (asdf:load-asd #P"~/dev/cl-demo/cl-demo.asd")
19.13+ (asdf:load-asd #P"~/quicklisp/local-projects/cl-rocksdb/cl-rocksdb.asd")
19.14+ #+quicklisp(ql:quickload '(cl-demo) :silent t))
19.15+
19.16+;; TODO 2023-02-25: opts (system, config, user input)
19.17+(defun main (&rest argv)
19.18+ (declare (ignorable argv)))
20.1--- /dev/null Thu Jan 01 00:00:00 1970 +0000
20.2+++ b/scripts/db.ros Sun Apr 30 22:24:18 2023 -0400
20.3@@ -0,0 +1,12 @@
20.4+#!/bin/sh
20.5+#|-*- mode:lisp -*-|#
20.6+#|
20.7+exec ros -Q -- $0 "$@"
20.8+|#
20.9+(progn ;;init forms
20.10+ (ros:ensure-asdf)
20.11+ #+quicklisp(ql:quickload '() :silent t))
20.12+
20.13+(defun main (&rest argv)
20.14+ (declare (ignorable argv))
20.15+ (format t "hello world"))
21.1--- /dev/null Thu Jan 01 00:00:00 1970 +0000
21.2+++ b/scripts/demo.ros Sun Apr 30 22:24:18 2023 -0400
21.3@@ -0,0 +1,12 @@
21.4+#!/bin/sh
21.5+#|-*- mode:lisp -*-|#
21.6+#|
21.7+exec ros -Q -- $0 "$@"
21.8+|#
21.9+(progn ;;init forms
21.10+ (ros:ensure-asdf)
21.11+ #+quicklisp(ql:quickload '() :silent t))
21.12+
21.13+(defun main (&rest argv)
21.14+ (declare (ignorable argv))
21.15+ (format t "hello world"))
21.16\ No newline at end of file
22.1--- /dev/null Thu Jan 01 00:00:00 1970 +0000
22.2+++ b/scripts/docs.ros Sun Apr 30 22:24:18 2023 -0400
22.3@@ -0,0 +1,12 @@
22.4+#!/bin/sh
22.5+#|-*- mode:lisp -*-|#
22.6+#|
22.7+exec ros -Q -- $0 "$@"
22.8+|#
22.9+(progn ;;init forms
22.10+ (ros:ensure-asdf)
22.11+ #+quicklisp(ql:quickload '() :silent t))
22.12+
22.13+(defun main (&rest argv)
22.14+ (declare (ignorable argv))
22.15+ (format t "hello world"))
23.1--- /dev/null Thu Jan 01 00:00:00 1970 +0000
23.2+++ b/scripts/pack.ros Sun Apr 30 22:24:18 2023 -0400
23.3@@ -0,0 +1,17 @@
23.4+#!/bin/sh
23.5+#|-*- mode:lisp -*-|#
23.6+#|
23.7+exec ros -Q -- $0 "$@"
23.8+|#
23.9+(progn ;;init forms
23.10+ (ros:ensure-asdf)
23.11+ #+quicklisp(ql:quickload '() :silent t)
23.12+ )
23.13+
23.14+(defpackage :ros.script.pack.3891893796
23.15+ (:use :cl))
23.16+(in-package :ros.script.pack.3891893796)
23.17+
23.18+(defun main (&rest argv)
23.19+ (declare (ignorable argv)))
23.20+;;; vim: set ft=lisp lisp:
24.1--- /dev/null Thu Jan 01 00:00:00 1970 +0000
24.2+++ b/scripts/test.ros Sun Apr 30 22:24:18 2023 -0400
24.3@@ -0,0 +1,12 @@
24.4+#!/bin/sh
24.5+#|-*- mode:lisp -*-|#
24.6+#|
24.7+exec ros -Q -- $0 "$@"
24.8+|#
24.9+(progn ;;init forms
24.10+ (ros:ensure-asdf)
24.11+ #+quicklisp(ql:quickload '() :silent t))
24.12+
24.13+(defun main (&rest argv)
24.14+ (declare (ignorable argv))
24.15+ (format t "hello world"))