diff --git a/Makefile b/Makefile index 33187583..44021268 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ SRC = syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \ macsym lmcons dmcg hack hibou agb gt40 rug maeda ms kle aap common \ fonts zork 11logo kmp info aplogo bkph bbn pdp11 chsncp sca music1 \ moon teach ken lmio1 llogo a2deh chsgtv clib sys3 lmio turnip \ - mits_s rab stan_k bs cstacy kp dcp2 -pics- victor imlac rjl mb + mits_s rab stan_k bs cstacy kp dcp2 -pics- victor imlac rjl mb bh DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \ chprog sail draw wl pc tj6 share _glpr_ _xgpr_ inquir mudman system \ xfont maxout ucode moon acount alan channa fonts games graphs humor \ diff --git a/src/bh/choices.logo b/src/bh/choices.logo new file mode 100644 index 00000000..6f9a70c9 --- /dev/null +++ b/src/bh/choices.logo @@ -0,0 +1,27 @@ +;;; CHOICES WRITTEN BY BRIAN HARVEY, +;;; ADAPTED FOR PDP-10 ITS LLOGO BY ALEXEY SLYUSAR. +;;; TO RUN, TYPE FROM LLOGO PROMPT: +;;; ?RF CHOICES LOGO DSK BH +;;; ?CHOICES [[SMALL MEDIUM LARGE][VANILLA [ULTRA CHOCOLATE] LYCHEE +;;; [RUM RAISIN] GINGER][CONE CUP]] [] +;;; THIS IS SHORT BUT COMPLETE PROGRAM. +;;; TO QUOTE THE AUTHOR: +;;; "THE PROGRAM DOESN’T HAVE ANYTHING ABOUT THE SIZE OF THE MENU BUILT IN. +;;; YOU CAN USE ANY NUMBER OF CATEGORIES, AND ANY NUMBER OF POSSIBILITIES +;;; IN EACH CATEGORY.” +;;; ORIGINAL CODE MAY BE REACHED AT: +;;; https://people.eecs.berkeley.edu/~bh/logo-sample.html + +;; CHOICES PROGRAM + +TO CHOICES :MENU :SOFAR +10 IF EMPTYP :MENU PRINT :SOFAR STOP +20 FOREACH FIRST :MENU [(CHOICES BF :MENU SE :SOFAR ?)] +END + +;; DEPENDENCIES +;; IN FACT, ONLY FOREACH ROUTINE IS NEEDED. +;; SO IT IS NOT NECESSARY TO LOAD ALL LIB +;; DEFINITIONS. + +RF LIB LOGO DSK BH diff --git a/src/bh/lib.logo b/src/bh/lib.logo new file mode 100644 index 00000000..8190237c --- /dev/null +++ b/src/bh/lib.logo @@ -0,0 +1,75 @@ +;;; LIBRARY OF LOGO FUNCTIONS FOR LLOGO. +;;; IT IS MOSTLY HIGHER ORDER FUNCTION DEFINITIONS, +;;; WRITTEN BY BRIAN HARVEY AND +;;; PORTED TO ITS LLOGO BY ALEXEY SLYUSAR + +TO ? +10 OP :TEMPLATE.VAR +END + +TO ?REST +10 OP BF :TEMPLATE.LIST +END + +TO PREPARE.TEMPLATE :TEMPLATE +10 IF LISTP :TEMPLATE OP :TEMPLATE +20 OP SE :TEMPLATE '? +END + +TO PREPARE.TEMPLATE.2 :TEMPLATE +10 IF LISTP :TEMPLATE OP :TEMPLATE +20 OP SE :TEMPLATE [?1 ?2] +END + +TO ?1 +10 OP :TEMPLATE.VAR1 +END + +TO ?2 +10 OP :TEMPLATE.VAR2 +END + +TO FILTER :FILTER.TEMPLATE :TEMPLATE.LIST +10 OP FILTER1 PREPARE.TEMPLATE :FILTER.TEMPLATE :TEMPLATE.LIST 1 +END + +TO FILTER1 :FILTER.TEMPLATE :TEMPLATE.LIST :TEMPLATE.NUMBER +10 IF EMPTYP :TEMPLATE.LIST OP [] +20 LOCAL 'TEMPLATE.VAR +30 MAKE 'TEMPLATE.VAR FIRST :TEMPLATE.LIST +40 IF (RUN :FILTER.TEMPLATE) OP FPUT :TEMPLATE.VAR FILTER1 :FILTER.TEMPLATE BF :TEMPLATE.LIST 1 + :TEMPLATE.NUMBER +50 OP FILTER1 :FILTER.TEMPLATE BF :TEMPLATE.LIST 1 + :TEMPLATE.NUMBER +END + +TO REDUCE :REDUCE.TEMPLATE :TEMPLATE.LIST +10 OP REDUCE1 PREPARE.TEMPLATE.2 :REDUCE.TEMPLATE :TEMPLATE.LIST +END + +TO REDUCE1 :REDUCE.TEMPLATE :TEMPLATE.LIST +10 IF EMPTYP BUTFIRST :TEMPLATE.LIST OP FIRST :TEMPLATE.LIST +20 LOCAL 'TEMPLATE.VAR1 +30 LOCAL 'TEMPLATE.VAR2 +40 MAKE 'TEMPLATE.VAR1 FIRST :TEMPLATE.LIST +50 MAKE 'TEMPLATE.VAR2 REDUCE1 :REDUCE.TEMPLATE BF :TEMPLATE.LIST +60 OP RUN :REDUCE.TEMPLATE +END + +TO FIND :FIND.TEMPLATE :TEMPLATE.LIST +10 IF EMPTYP :TEMPLATE.LIST OP [] +20 OP FIND1 FIRST :TEMPLATE.LIST +END + +TO FIND1 :TEMPLATE.VAR +10 IF RUN :FIND.TEMPLATE OP FIRST :TEMPLATE.LIST +20 OP FIND :FIND.TEMPLATE BF :TEMPLATE.LIST +END + +TO FOREACH :TEMPLATE.LIST :FOREACH.TEMPLATE +10 IF EMPTYP :TEMPLATE.LIST STOP +20 FOREACH1 FIRST :TEMPLATE.LIST +END + +TO FOREACH1 :TEMPLATE.VAR +10 RUN :FOREACH.TEMPLATE +20 FOREACH BF :TEMPLATE.LIST :FOREACH.TEMPLATE +END