' *****************************************************
' PROGRAM: giftalk.bac
' PURPOSE: to show dancing letters
' AUTHOR: Piratesmack (Puppy Linux forum)
' MODDED: vovchik (Puppy Linux forum) for html
' DEPENDS: gcc, bacon, bash
' PLATFORM: Puppy Linux (actually, any *nix)
' DATE: 11-12-2010
' *****************************************************
' *********************
' CONSTANTS
' *********************
SETENVIRON "LANG", "C"
CONST url$ = "http://somuchdamage.com/stuff/dancingletters/"
' *********************
' END CONSTANTS
' *********************
' *********************
' INCLUDES
' *********************
INCLUDE "hug.bac"
' *********************
' END INCLUDES
' *********************
' *********************
' SUBS & FUNCTIONS
' *********************
' ----------------
SUB SETSMALL
' ----------------
' Sets text type to small
text_type$ = "small"
END SUB
' ----------------
SUB SETLARGE
' ----------------
' Sets text type to 'large'
text_type$ = "large"
END SUB
' ----------------
SUB SETRAINBOW
' ----------------
' Sets text type to 'rainbow'
text_type$ = "rainbow"
END SUB
' ----------------
SUB GENERATE()
' ----------------
' Generates html code for dancing letters
LOCAL q$, text$, text_new$, char$, dletter$, dancing_text$, h1$, h2$, h3$, h4$
LOCAL len, i
q$ = CHR$(34)
h1$ = "<html>"
h2$ = "</html>"
h3$ = CONCAT$(".gif", q$, "/>", NL$)
h4$ = "<img src="
' Grab text from edit box 1
text$ = GRAB$(edit1)
' Chop, make uppercase, and replace "?" with "q"
text_new$ = REPLACE$(CHOP$(UCASE$(text$)), "?", "q")
text_new$ = REPLACE$(text_new$, " ", "|")
len = LEN(text_new$)
' Translate each character to dancing letter
FOR i = 1 TO len
char$ = MID$(text_new$, i, 1)
IF REGEX(char$, "[A-Z]") THEN
dletter$ = CONCAT$(h4$, q$, url$, text_type$, "/", char$, h3$)
ELIF REGEX(char$, "[0-9!$&@q]") THEN
IF EQUAL(text_type$, "rainbow") THEN
dletter$ = CONCAT$(h4$, q$, url$, text_type$, "/", char$, h3$)
ELSE
dletter$ = CONCAT$(h4$, q$, url$, "punctuation/", char$, h3$)
END IF
ELSE
dletter$ = char$
END IF
IF EQUAL(char$, "|") THEN
dletter$ = CONCAT$("<br>", NL$)
END IF
dancing_text$ = CONCAT$(dancing_text$, dletter$)
NEXT i
' Clear edit box 2
TEXT(edit2, "")
' Put dancing letter html in edit box 2
dancing_text$ = CONCAT$(h1$, NL$, dancing_text$, h2$)
TEXT(edit2, dancing_text$)
END SUB
' ----------------
SUB CLEAR()
' ----------------
' Clear edit boxes
TEXT(edit1, "")
TEXT(edit2, "")
END SUB
' *********************
' END SUBS & FUNCTIONS
' *********************
' *********************
' MAIN
' *********************
' Create main window
window = WINDOW("Dancing letter generator", 500, 400)
' Create "Enter some text" part
frame1 = FRAME(500-15, 155)
TEXT(frame1, " Enter some text: ")
ATTACH(window, frame1, 10, 10)
edit1 = EDIT(500-25, 130)
ATTACH(window, edit1, 15, 30)
' Create "Dancing letter html" part
frame2 = FRAME(500-15, 155)
TEXT(frame2, " HTML code: ")
ATTACH(window, frame2, 10, 180)
edit2 = EDIT(500-25, 130)
ATTACH(window, edit2, 15, 200)
' Create 'generate!' button
button1 = STOCK("gtk-execute", 100, 30)
ATTACH(window, button1, 280, 353)
' Create 'clear' button
button2 = STOCK("gtk-clear", 100, 30)
ATTACH(window, button2, 390, 353)
' Create radio button 'small'
radio1 = RADIO("small", 70, 30, radio1)
ATTACH(window, radio1, 5, 353)
ENABLE(radio1)
SETSMALL
' Create radio button 'large'
radio2 = RADIO("large", 70, 30, radio1)
ATTACH(window, radio2, 85, 353)
' Create radio button 'rainbow'
radio3 = RADIO("rainbow", 102, 30, radio1)
ATTACH(window, radio3, 165, 353)
' Define callbacks
CALLBACK(button1, GENERATE)
CALLBACK(button2, CLEAR)
CALLBACK(radio1, SETSMALL)
CALLBACK(radio2, SETLARGE)
CALLBACK(radio3, SETRAINBOW)
' Endless GTK loop
DISPLAY
' *********************
' END MAIN
' *********************