    Public Function format_story(ByVal stringin As String) As String

        ' As I find my stories on more and more story sites,
        ' I'm sick of story sites' auto-formatting software
        ' mucking up my stories!  So I've written an
        ' auto-formatting routine in VB and am giving it
        ' away for free.  Bear in mind that this is
        ' VB for Visual Studio .NET rather than VB 6.

        ' What it does:  Pass it a string in plain ASCII text
        ' and it returns a string with HTML codes for
        ' paragraph spacing, bold, and italics.  Also, HTML
        ' tags (any text enclosed by <>) are stripped out.

        ' What it doesn't do:  It doesn' support fancy
        ' text-based formatting commands such as {green} or
        ' {bold}.

        ' How it works:  It scans the input string, character by
        ' character...
        ' -  When it finds a newline character, it inserts TWO
        '    HTML line break codes for double spacing followed
        '    by a string of four non-breaking spaces, tnen skips
        '    the subsequent input text until it comes to the
        '    next alphanumeric character (i.e. it skips following
        '    newline characters and spaces).  This way, all
        '    stories wil be double-spaced and indented between
        '    paragraphs regardless whether the author single- or
        '    double-spaces his paragraphs or indents them.
        ' -  When it finds a "<" character, it skips over the
        '    subsequent text until it comes to a ">" character;
        '    thus preventing authors from embedding HTML in their
        '    stories.
        ' -  When it finds a "_" character, it inserts an HTML
        '    tag to turn italics on if italics is off, or to
        '    turn italics off if italics is on.
        ' -  When it finds a "*" character, it inserts an HTML
        '    tag to turn bold on if bold is off, or to
        '    turn bold off if bold is on.

        ' This code is copyright (c) 2003 Hungry Guy, but I give
        ' permission for operators of free story sites to use
        ' it as-is, or with your own improvements, in order to
        ' improve the quality of your auto-formatting functions.

        ' If you want minor tweaks or changes, feel free to ask
        ' and I'll see what I can do in my spare time.  But if
        ' you want major revisions to the code, you'll need
        ' to hire me as a full-time software engineer.

        Dim str1 As String
        Dim ix1 As Integer
        Dim str2 As String
        Dim str3_br As String
        Dim len3 As Integer
        Dim chr1 As Char
        Dim ital As Boolean
        Dim bold As Boolean

        ital = False
        bold = False
        ix1 = 1
        str1 = stringin + "    "
        str2 = " "
        str3_br = "<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;"
        len3 = str3_br.Length - 2

        While (ix1 < str1.Length)
            chr1 = Mid(str1, ix1, 1)
            If (chr1 < " ") Then
                str2 = Mid(str1, 1, ix1 - 1) + str3_br
                While (Mid(str1, ix1, 1) <= " ") And (ix1 < str1.Length)
                    ix1 = ix1 + 1
                End While
                str1 = str2 + Mid(str1, ix1, str1.Length)
                ix1 = ix1 + len3
            ElseIf (chr1 = "<") Then
                str2 = Mid(str1, 1, ix1 - 1)
                ix1 = ix1 + 1
                While (Mid(str1, ix1, 1) <> ">") And (ix1 < str1.Length)
                    ix1 = ix1 + 1
                End While
                ix1 = ix1 + 1
                str1 = str2 + Mid(str1, ix1, str1.Length)
            ElseIf (chr1 = "_") Then
                If (ital) Then
                    str2 = Mid(str1, 1, ix1 - 1) + "</I>"
                    ital = False
                Else
                    str2 = Mid(str1, 1, ix1 - 1) + "<I>"
                    ital = True
                End If
                ix1 = ix1 + 1
                str1 = str2 + Mid(str1, ix1, str1.Length)
            ElseIf (chr1 = "*") Then
                If (bold) Then
                    str2 = Mid(str1, 1, ix1 - 1) + "</B>"
                    bold = False
                Else
                    str2 = Mid(str1, 1, ix1 - 1) + "<B>"
                    bold = True
                End If
                ix1 = ix1 + 1
                str1 = str2 + Mid(str1, ix1, str1.Length)
            End If
            ix1 = ix1 + 1
        End While
        If (ital) Then
            str1 = str1 + "</I>"
            ital = False
        End If
        If (bold) Then
            str1 = str1 + "</B>"
            bold = False
        End If
        str1 = "<BR>&nbsp;&nbsp;&nbsp;&nbsp;" + str1
        Return (str1)
    End Function

