Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

bbcode

Name: Anonymous 2008-11-08 20:29

/*
 * bbcoder.c -- Generate enterprise grade forum posts.
 *
 * Copyright (C) 2008  Anonymous
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to
 * the Free Software Foundation, Inc.
 * 51 Franklin Street, Fifth Floor
 * Boston, MA  02110-1301, USA
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char *bbcode[7] = {
    "spoiler", "sub", "sup", "b", "u", "o", "i"
};

typedef struct stack_t {
    int value;
    struct stack_t *next;
} stack_t;

stack_t *push(int value, stack_t *stack) {
    stack_t *buf;

    if ((buf = malloc(sizeof(stack_t))) == NULL)
        return NULL;

    buf->value = value;
    buf->next = stack;

    return buf;
}

stack_t *pop(int *out, stack_t *stack) {
    stack_t *next = NULL;

    if(stack != NULL) {
        *out = stack->value;
        next = stack->next;
        free(stack);
    }

    return next;
}

int main(int argc, char **argv) {
    stack_t *stack = NULL;
    int maxc, arg, pushorpop, c;
    int pushed = 0;

    srand(time(NULL));
    maxc = sizeof(bbcode)/sizeof(char*);

    if(argc == 1) {
        return -1;
    }

    for(arg = 1; arg < argc; arg++) {
        pushorpop = rand() % 2;
        if(pushed < 2)
            pushorpop = 0;

        if(pushorpop == 0) {
            c = rand() % maxc;
            stack = push(c, stack);
            pushed++;
            printf("[%s]", bbcode[c]);
        } else {
            stack = pop(&c, stack);
            pushed--;
            printf("[/%s]", bbcode[c]);
        }
        printf("%s ", argv[arg]);
    }
    while(pushed > 0) {
        stack = pop(&c, stack);
        pushed--;
        printf("[/%s]", bbcode[c]);
    }
    printf("\n");
    return 0;
}

Name: Anonymous 2008-11-17 1:18

Decreased the probability of generating a BBCode by half. Should make the output less horrible-looking.


{-------------------------------------------------------------------------------
 - bbcoder.hs -- Generate enterprise-grade /prog/ posts.                       -
 - Copyright (c) 2008 Anonymous                                                -
 - All rights reserved.                                                        -
 -                                                                             -
 - Redistribution and use in source and binary forms, with or without          -
 - modification, are permitted provided that the following conditions are met: -
 -     * Redistributions of source code must retain the above copyright        -
 -       notice, this list of conditions and the following disclaimer.         -
 -     * Redistributions in binary form must reproduce the above copyright     -
 -       notice, this list of conditions and the following disclaimer in the   -
 -       documentation and/or other materials provided with the distribution.  -
 -                                                                             -
 - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS -
 - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED           -
 - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE      -
 - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY        -
 - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES  -
 - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR          -
 - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER  -
 - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT          -
 - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY   -
 - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -
 - DAMAGE.                                                                     -
 ------------------------------------------------------------------------------}

module Main where
import System.Random

bbcodify = (bbcodify' [] "") . words
  where bbcodify' s str [] = return $ str ++ (concat $ map bbcodeEnd s)
        bbcodify' s str (w:ws) =
          do b <- randomIO
             c <- randomBBCode
             p <- randomIO >>= (\p -> return (if length s < 2 then True else p))
             let pop  = if null s then 0  else head s
             let rest = if null s then [] else tail s
             if b
               then if p
                     then bbcodify' (c:s) (str ++ bbcodeBeg c   ++ w ++ " ") ws
                     else bbcodify' rest  (str ++ bbcodeEnd pop ++ w ++ " ") ws
               else bbcodify' s (str ++ w ++ " ") ws
        bbcodeBeg i = "["  ++ decodeBBCode i ++ "]"
        bbcodeEnd i = "[/" ++ decodeBBCode i ++ "]"
        bbcodes = words "aa b i m o s spoiler sub sup u"
        decodeBBCode = (bbcodes !!)
        randomBBCode = randomRIO (0, length bbcodes - 1)

main = getContents >>= bbcodify >>= putStrLn

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List