CONST MyVersion$ = "Haiku Generator - v.0.1a"
DEF FN bound(x) = SIZEOF(x)/SIZEOF(STRING)
DECLARE adje$[] = { "autumn", "hidden", "bitter", "misty", "silent", "empty", "dry", "dark", "summer", "icy", \
"delicate", "quiet", "white", "cool", "spring", "winter", "patient", "twilight", "dawn", "crimson", \
"wispy", "weathered", "blue", "billowing", "broken", "cold", "damp", "falling", "frosty", "green", \
"long", "late", "lingering", "bold", "little", "morning", "muddy", "old", "red", "rough", \
"still", "small", "sparkling", "throbbing", "shy", "wandering", "withered", "wild", "black", "young", \
"holy", "solitary", "fragrant", "aged", "snowy", "proud", "floral", "restless", "divine", "polished", \
"ancient", "purple", "lively", "nameless" }
DECLARE noun$[] = { "waterfall", "river", "breeze", "moon", "rain", "wind", "sea", "morning", "snow", "lake", \
"sunset", "pine", "shadow", "leaf", "dawn", "glitter", "forest", "hill", "cloud", "meadow", \
"sun", "glade", "bird", "brook", "butterfly", "bush", "dew", "dust", "field", "fire", \
"flower", "firefly", "feather", "grass", "haze", "mountain", "night", "pond", "darkness", "snowflake", \
"silence", "sound", "sky", "shape", "surf", "thunder", "violet", "water", "wildflower", "wave", \
"water", "resonance", "sun", "wood", "dream", "cherry", "tree", "fog", "frost", "voice", \
"paper", "frog", "smoke", "star" }
DECLARE verb$[] = { "shakes", "drifts", "has stopped", "struggles", "hears", "has passed", "sleeps", "creeps", "flutters", "fades", \
"is falling", "trickles", "murmurs", "warms", "hides", "jumps", "is dreaming", "sleeps", "falls", "wanders", \
"waits", "has risen", "stands", "dying", "is drawing", "singing", "rises", "paints", "capturing", "flying", \
"lies", "picked up", "gathers in", "invites", "separates", "eats", "plants", "digs into", "has fallen", "weeping", \
"facing", "mourns", "tastes", "breaking", "shaking", "walks", "builds", "reveals", "piercing", "craves", \
"departing", "opens", "falling", "confronts", "keeps", "breaking", "is floating", "settles", "reaches", "illuminates", \
"closes", "leaves", "explodes", "drawing" }
DECLARE prep$[] = { "on", "beside", "in", "beneath", "of", "above", "under", "by", "over", "against", "near" }
DECLARE myline1$, myline2$, myline3$, mypoem$
a_line1$ = "The haiku generated is in the style of Matsuo Basho"
a_line2$ = "(æ<9d>¾å°¾ è<8a>è<95><89>), a Japanese poet of the 17th century."
a_line3$ = "This program was originally written in pygmy"
a_line4$ = "FORTH by Kent Peterson and ported to Bacon by"
a_line5$ = "Peter van Eerten. Vovchik did the GUI version."
info$ = CONCAT$(a_line1$, NL$, a_line2$, NL$, NL$, a_line3$, NL$, a_line4$, NL$, a_line5$, NL$)
INCLUDE "hug.bac", INIT, WINDOW, FRAME, MARK, SHOW, TEXT, IMAGE, HSEPARATOR, MSGDIALOG, BUTTON, ATTACH, CALLBACK, DISPLAY, QUIT, HUGOPTIONS, HIDE
INIT
SUB MakeHaiku()
mystyle = RANDOM(4)
SELECT mystyle
CASE 0
myline1$ = CONCAT$(adje$[RANDOM(bound(adje$))], " ", noun$[RANDOM(bound(noun$))])
myline2$ = CONCAT$(noun$[RANDOM(bound(noun$))], " ", verb$[RANDOM(bound(verb$))], " ", prep$[RANDOM(bound(prep$))], " ", noun$[RANDOM(bound(noun$))])
myline3$ = CONCAT$(adje$[RANDOM(bound(adje$))], " ", adje$[RANDOM(bound(adje$))], " ", noun$[RANDOM(bound(noun$))])
CASE 1
myline1$ = CONCAT$(adje$[RANDOM(bound(adje$))], " ", noun$[RANDOM(bound(noun$))], " ", verb$[RANDOM(bound(verb$))])
myline2$ = CONCAT$(adje$[RANDOM(bound(adje$))], " ", adje$[RANDOM(bound(adje$))], " ", noun$[RANDOM(bound(noun$))])
myline3$ = CONCAT$(verb$[RANDOM(bound(verb$))], " ", adje$[RANDOM(bound(adje$))], " ", noun$[RANDOM(bound(noun$))])
CASE 2
myline1$ = CONCAT$(adje$[RANDOM(bound(adje$))], " ", adje$[RANDOM(bound(adje$))], " ", noun$[RANDOM(bound(noun$))])
myline2$ = CONCAT$(prep$[RANDOM(bound(prep$))], " ", adje$[RANDOM(bound(adje$))], " ", noun$[RANDOM(bound(noun$))])
myline3$ = CONCAT$(noun$[RANDOM(bound(noun$))], " ", verb$[RANDOM(bound(verb$))])
CASE 3
myline1$ = CONCAT$(noun$[RANDOM(bound(noun$))], " ", prep$[RANDOM(bound(prep$))], " ", noun$[RANDOM(bound(noun$))])
myline2$ = CONCAT$(adje$[RANDOM(bound(adje$))], " ", noun$[RANDOM(bound(noun$))], " ", prep$[RANDOM(bound(prep$))], " ", noun$[RANDOM(bound(noun$))])
myline3$ = CONCAT$(adje$[RANDOM(bound(adje$))], " ", noun$[RANDOM(bound(noun$))])
END SELECT
mypoem$ = CONCAT$(myline1$, NL$, myline2$, NL$, myline3$)
END SUB
FUNCTION ShowInfo()
SHOW(myhelp)
RETURN TRUE
END FUNCTION
FUNCTION RefreshGui()
MakeHaiku
TEXT(myhaiku, mypoem$)
RETURN TRUE
END FUNCTION
MakeHaiku
HUGOPTIONS("BASEXFTDPI 78")
mywin = WINDOW(MyVersion$, 250, 150)
myframe = FRAME(240, 140)
mytext = MARK("With apologies to æ<9d>¾å°¾ è<8a>è<95><89>", 235, 40)
myzen = IMAGE("zen.png", 40, 40)
myhaiku = MARK(mypoem$, 240, 100)
myhline = HSEPARATOR(230)
myhelp = MSGDIALOG(info$, 350, 175, 0, 2)
CALLBACK(myhelp, HIDE)
myinfo = BUTTON("Info", 60, 20)
mymore = BUTTON("More", 60, 20)
myquit = BUTTON("Quit", 60, 20)
ATTACH(mywin, myzen, 105, 27)
ATTACH(mywin, myframe, 5, 5)
ATTACH(mywin, mytext, 7, 1)
ATTACH(mywin, myhaiku, 5, 35)
ATTACH(mywin, myhline, 10,115)
ATTACH(mywin, myinfo, 10, 120)
ATTACH(mywin, mymore, 95, 120)
ATTACH(mywin, myquit, 180, 120)
CALLBACK(myinfo, ShowInfo)
CALLBACK(mymore, RefreshGui)
CALLBACK(myquit, QUIT)
DISPLAY