MCSKIP - WITH - NL -- The line above defines the comment syntax: -- through to newline is completely deleted. -- 99 Bottles of beer in 99 lines of ML/I by Parzival Herzog. -- ML/I is P.J. Brown's famous general purpose macro processor designed in 1967. -- See http://members.shaw.ca/parz/ML1.html -- -- Define nestable quotes {...}, replaced by the unevaluated text within: MCSKIP MT, {} -- Define non-nestable quotes "...", replaced by the unevaluated text within: MCSKIP T, "" -- Define the argument insertion and expression evaluation syntax: -- ?e. is replaced by the value of macro expression e: MCINS ?. -- -- Top level macro: Sing N CONTAINERS of CONTENTS SOMEWHERE : DO THE DEED! REPLENISH. MCDEF "Sing WITH SPACE SPACE of WITH SPACE SPACE : ! ." AS -- {MCDEF "CONTAINERS" AS "{"?A2."}" MCDEF "CONTAINER" AS "{"MCSUB(CONTAINERS,1,-1)"}" MCDEF "CONTENTS" AS "{"?A3."}" MCDEF "SOMEWHERE" AS "{"?A4."}" MCDEF "DO WITHS THE WITHS DEED" AS "{"?A5."}" MCDEF "REPLENISH" AS "{"?A6."}" MCSET T1 = ?A1. MCDEF "n" AS "("?T1.")" MCDEF "N" AS "{"n"}" ?L1.n of CONTENTS SOMEWHERE, n of CONTENTS. MCGO L2 UNLESS ?T1. GR 0 MCSET T1 = T1 - 1 MCDEF "n" AS "("?T1.")" DO THE DEED: n of CONTENTS SOMEWHERE. MCGO L1