Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tested on UCBLogo 6.0 with some minor tweaks (for performance and adding a `timems` function). The tweaks are performed during Docker image creation (see Dockerfile). Tests of step 5 are skipped because UCBLogo is too slow. Interop is available via `(logo-eval "logo code to run")`. The `examples` directory contains a Mal example of drawing a tree using turtle graphics.
- Loading branch information
Showing
25 changed files
with
2,576 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
FROM ubuntu:vivid | ||
MAINTAINER Joel Martin <github@martintribe.org> | ||
|
||
########################################################## | ||
# General requirements for testing or common across many | ||
# implementations | ||
########################################################## | ||
|
||
RUN apt-get -y update | ||
|
||
# Required for running tests | ||
RUN apt-get -y install make python | ||
|
||
# Some typical implementation and test requirements | ||
RUN apt-get -y install curl libreadline-dev libedit-dev | ||
|
||
RUN mkdir -p /mal | ||
WORKDIR /mal | ||
|
||
########################################################## | ||
# Specific implementation requirements | ||
########################################################## | ||
|
||
# Install g++ for any C/C++ based implementations | ||
RUN apt-get -y install g++ | ||
|
||
# Install UCBLogo 6.0: | ||
# * Fix the makefile to build correctly | ||
# * Tweat GC settings to improve performance (it's still very slow) | ||
# * Add the timems function implemented in C | ||
RUN apt-get -y install libx11-dev \ | ||
&& cd /tmp \ | ||
&& curl -O -J -L http://www.cs.berkeley.edu/~bh/downloads/ucblogo.tar.gz \ | ||
&& tar xf ucblogo.tar.gz \ | ||
&& cd /tmp/ucblogo-6.0 \ | ||
&& rm -rf csls/CVS \ | ||
&& ./configure \ | ||
&& sed -i -e 's/svnversion/echo 206/' -e 's/^\s*(cd docs/#\0/' makefile \ | ||
&& echo "all: everything" >> makefile \ | ||
&& sed -i -e 's/^#define *SEG_SIZE *16000 /#define SEG_SIZE 6400000 /' logo.h \ | ||
&& sed -i -e 's/^#define GCMAX 16000$/#define GCMAX 16000000/' mem.c \ | ||
&& echo "extern NODE *ltimems(NODE *);" >> globals.h \ | ||
&& echo "NODE *ltimems(NODE *args) { struct timeval tv; gettimeofday(&tv, NULL); return(make_floatnode(((FLONUM)tv.tv_sec) * 1000.0 + (tv.tv_usec / 1000))); }" >> coms.c \ | ||
&& sed -i -e 's/^\(.*lthrow.*\)$/\1 {"timems", 0, 0, 0, PREFIX_PRIORITY, ltimems},/' init.c \ | ||
&& make install \ | ||
&& cd /tmp \ | ||
&& rm -rf /tmp/ucblogo.tar.gz /tmp/ucblogo-6.0 | ||
|
||
ENV HOME /mal |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
SOURCES_BASE = readline.lg types.lg reader.lg printer.lg | ||
SOURCES_LISP = env.lg core.lg stepA_mal.lg | ||
SOURCES = $(SOURCES_BASE) $(SOURCES_LISP) | ||
|
||
.PHONY: all dist clean stats stats-lisp | ||
|
||
all: | ||
@true | ||
|
||
dist: mal.lg mal | ||
|
||
mal.lg: $(SOURCES) | ||
cat $+ | grep -v "^load " > $@ | ||
|
||
mal: mal.lg | ||
echo "#!/usr/bin/env logo" > $@ | ||
cat $< >> $@ | ||
chmod +x $@ | ||
|
||
clean: | ||
rm -f mal.lg mal | ||
|
||
stats: $(SOURCES) | ||
@wc $^ | ||
@printf "%5s %5s %5s %s\n" `grep -E "^[[:space:]]*\"|^[[:space:]]*$$" $^ | wc` "[comments/blanks]" | ||
stats-lisp: $(SOURCES_LISP) | ||
@wc $^ | ||
@printf "%5s %5s %5s %s\n" `grep -E "^[[:space:]]*\"|^[[:space:]]*$$" $^ | wc` "[comments/blanks]" |
Oops, something went wrong.