*/MS-DOS Logowriter 2.0pageTO IGNORE :STUFF END TO DEQUEUE :QUEUE OP DEQUEUE1 FIRST THING :QUEUE END TO DEQUEUE1 :RESULT MAKE :QUEUE BUTFIRST THING :QUEUE OUTPUT :RESULT END TO QUEUE :QUEUE :ITEM MAKE :QUEUE LPUT :ITEM THING :QUEUE END TO POP :STACK OP POP1 FIRST THING :STACK END TO POP1 :RESULT MAKE :STACK BUTFIRST THING :STACK OUTPUT :RESULT END TO PUSH :STACK :ITEM MAKE :STACK FPUT :ITEM THING :STACK END TO GENSYM  IF NOT NAME? "GENSYM.NUMBER [MAKE "GENSYM.NUMBER 0] MAKE "GENSYM.NUMBER :GENSYM.NUMBER + 1 OUTPUT WORD "G :GENSYM.NUMBER END TO PICK :LIST OUTPUT ITEM (1 + RANDOM COUNT :LIST) :LIST END TO REVERSE1 :IN :OUT IF EMPTY? :IN [OUTPUT :OUT] OUTPUT REVERSE1 BF :IN FPUT FIRST :IN :OUT END TO REVERSE :LIST OUTPUT REVERSE1 :LIST [] END TO CASCADE.22 :TEMPLATE.VAR1 :TEMPLATE.VAR2 IF RUN :CASCADE.LIMIT [OP :TEMPLATE.VAR1] OP CASCADE.22 (RUN :CASCADE.TEMPLATE1) (RUN :CASCADE.TEMPLATE2) END TO CASCADE.21 :CASCADE.NUM :TEMPLATE.VAR1 :TEMPLATE.VAR2 IF EQUAL? :CASCADE.NUM 0 [OP :TEMPLATE.VAR1] OP CASCADE.21 (:CASCADE.NUM - 1) (RUN :CASCADE.TEMPLATE1) (RUN :CASCADE.TEMPLATE2) END TO ?1  OUTPUT :TEMPLATE.VAR1 END TO ?OUT  OUTPUT ?1 END TO ?2  OUTPUT :TEMPLATE.VAR2 END TO ?IN  OUTPUT FIRST ?2 END TO CASCADE.2 :CASCADE.LIMIT :CASCADE.TEMPLATE1 :TEMPLATE.VAR1 :CASCADE.TEMPLATE2 :TEMPLATE.VAR2 IF NUMBER? :CASCADE.LIMIT [OP CASCADE.21 :CASCADE.LIMIT :TEMPLATE.VAR1 :TEMPLATE.VAR2] OP CASCADE.22 :TEMPLATE.VAR1 :TEMPLATE.VAR2 END TO TRANSFER :TRANSFER.LIMIT :TRANSFER.TEMPLATE :TRANSFER.INIT OUTPUT CASCADE.2 (IFELSE EMPTY? :TRANSFER.LIMIT [[EMPTY? ?2]] [SE [OR EMPTY? ?2] :TRANSFER.LIMIT]) :TRANSFER.TEMPLATE [] [BUTFIRST ?2] :TRANSFER.INIT END TO #  OP 1 + :CASCADE.LIMIT - :CASCADE.NUM END TO CASCADE2 :TEMPLATE.VAR IF RUN :CASCADE.LIMIT [OP :TEMPLATE.VAR] OP CASCADE2 (RUN :CASCADE.TEMPLATE) END TO CASCADE1 :CASCADE.NUM :TEMPLATE.VAR IF EQUAL? :CASCADE.NUM 0 [OP :TEMPLATE.VAR] OP CASCADE1 (:CASCADE.NUM - 1) (RUN :CASCADE.TEMPLATE) END TO CASCADE :CASCADE.LIMIT :CASCADE.TEMPLATE :TEMPLATE.VAR IF NUMBER? :CASCADE.LIMIT [OP CASCADE1 :CASCADE.LIMIT :TEMPLATE.VAR] OP CASCADE2 :TEMPLATE.VAR END TO QUOTED :THING IF LIST? :THING [OP :THING] OP WORD "" :THING END TO REDUCE :FUNCTION :LIST IF EMPTY? BF :LIST [OP FIRST :LIST] OP RUN (LIST :FUNCTION ( QUOTED FIRST :LIST) ( QUOTED REDUCE :FUNCTION BF :LIST ) ) END TO REMOVE :THING :LIST OUTPUT FILTER [NOT EQUAL? ? :THING] :LIST END TO REMDUP :LIST OUTPUT FILTER [NOT MEMBER? ? ?REST] :LIST END TO FILTER :FILTER.TEMPLATE :TEMPLATE.LIST IF EMPTY? :TEMPLATE.LIST [OP :TEMPLATE.LIST] OP FILTER01 FIRST :TEMPLATE.LIST END TO FILTER01 :TEMPLATE.VAR IF RUN :FILTER.TEMPLATE [OP COMBINE (FIRST :TEMPLATE.LIST) (FILTER :FILTER.TEMPLATE BF :TEMPLATE.LIST)] OP FILTER :FILTER.TEMPLATE BF :TEMPLATE.LIST END TO FIND :FIND.TEMPLATE :TEMPLATE.LIST IF EMPTY? :TEMPLATE.LIST [OP []] OP FIND01 FIRST :TEMPLATE.LIST END TO FIND01 :TEMPLATE.VAR IF RUN :FIND.TEMPLATE [OP FIRST :TEMPLATE.LIST] OP FIND :FIND.TEMPLATE BF :TEMPLATE.LIST END TO CM2 :CM.THISLIST IF EMPTY? :CM.THISLIST [OP []] MAKE :CM.LEVEL FIRST :CM.THISLIST OP SE (CM1 BF :CM.LISTS :CM.LEVEL + 1) (CM2 BF :CM.THISLIST) END TO CM1 :CM.LISTS :CM.LEVEL IF EMPTY? :CM.LISTS [OP (LIST RUN :CM.TEMPLATE)] OP CM2 FIRST :CM.LISTS END TO CROSSMAP :CM.TEMPLATE :CM.LISTS OP CM1 :CM.LISTS 1 END TO MAP.SE :MAP.SE.TEMPLATE :MAP.SE.LIST IF EMPTY? :MAP.SE.LIST [OUTPUT []] OP MAP.SE01 FIRST :MAP.SE.LIST END TO MAP.SE01 :TEMPLATE.VAR OUTPUT SENTENCE (RUN :MAP.SE.TEMPLATE) (MAP.SE :MAP.SE.TEMPLATE BF :MAP.SE.LIST) END TO COMBINE :THIS :THOSE IF WORD? :THOSE [OUTPUT WORD :THIS :THOSE] OUTPUT FPUT :THIS :THOSE END TO MAP :MAP.TEMPLATE :TEMPLATE.LIST IF EMPTY? :TEMPLATE.LIST [OUTPUT :TEMPLATE.LIST] OP MAP01 FIRST :TEMPLATE.LIST END TO MAP01 :TEMPLATE.VAR OUTPUT COMBINE (RUN :MAP.TEMPLATE) (MAP :MAP.TEMPLATE BF :TEMPLATE.LIST) END TO ?REST  OUTPUT BF :TEMPLATE.LIST END TO ?  OUTPUT :TEMPLATE.VAR END TO FOREACH :TEMPLATE.LIST :FOREACH.TEMPLATE IF EMPTY? :TEMPLATE.LIST [STOP] FOREACH01 FIRST :TEMPLATE.LIST END TO FOREACH01 :TEMPLATE.VAR RUN :FOREACH.TEMPLATE FOREACH BF :TEMPLATE.LIST :FOREACH.TEMPLATE END TO FORSTEP :FOR.VALUES :FOR.INITIAL :FOR.FINAL IF EQUAL? COUNT :FOR.VALUES 4 [OP EVAL LAST :FOR.VALUES] OP IFELSE :FOR.INITIAL > :FOR.FINAL [-1] [1] END TO FORLOOP :FOR.VAR :FOR.INITIAL :FOR.FINAL :FOR.STEP :FOR.INSTR MAKE :FOR.VAR :FOR.INITIAL IF (IFELSE :FOR.STEP < 0 [:FOR.INITIAL < :FOR.FINAL] [:FOR.INITIAL > :FOR.FINAL]) [STOP] RUN :FOR.INSTR FORLOOP :FOR.VAR (:FOR.INITIAL + :FOR.STEP) :FOR.FINAL :FOR.STEP :FOR.INSTR END TO EVAL :FOR.EXPRESSION IF LIST? :FOR.EXPRESSION [OP RUN :FOR.EXPRESSION] OP RUN FPUT :FOR.EXPRESSION [] END TO FOR1 :FOR.VALUES :FOR.VAR :FOR.INITIAL :FOR.FINAL :FOR.INSTR FORLOOP :FOR.VAR :FOR.INITIAL :FOR.FINAL ( FORSTEP :FOR.VALUES :FOR.INITIAL :FOR.FINAL ) :FOR.INSTR END TO FOR :FOR.VALUES :FOR.INSTR FOR1 :FOR.VALUES (FIRST :FOR.VALUES) ( EVAL FIRST BF :FOR.VALUES ) ( EVAL FIRST BF BF :FOR.VALUES ) :FOR.INSTR END TO DO.UNTIL :UNTIL.INSTR :UNTIL.PRED RUN :UNTIL.INSTR IF RUN :UNTIL.PRED [STOP] DO.UNTIL :UNTIL.INSTR :UNTIL.PRED END TO DO.WHILE :WHILE.INSTR :WHILE.PRED RUN :WHILE.INSTR IF NOT RUN :WHILE.PRED [STOP] DO.WHILE :WHILE.INSTR :WHILE.PRED END TO UNTIL :UNTIL.COND :UNTIL.INSTR IF RUN :UNTIL.COND [STOP] RUN :UNTIL.INSTR UNTIL :UNTIL.COND :UNTIL.INSTR END TO WHILE :WHILE.COND :WHILE.INSTR IF NOT RUN :WHILE.COND [STOP] RUN :WHILE.INSTR WHILE :WHILE.COND :WHILE.INSTR END Y_Y55ww_CGA (((((((((((((((((((