' *****************************************************
' 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
' *********************