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

newfags can't

Name: Anonymous 2012-10-07 19:34

SUPERBOLD

Name: Anonymous 2013-05-23 15:32

How do you guys like my enhanced version?

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <ctype.h>

// transform an integer (up to 16 bits) to a 3 byte utf-8 block and print it
// 1110xxxx 10xxxxxx 10xxxxxx
void printtchar(uint32_t u) {
    putchar(u >> 12 & 0x0F | 0xE0);
    putchar(u >>  6 & 0x3F | 0x80);
    putchar(u       & 0x3F | 0x80);
}

// transform an integer (up to 21 bits) to a 4 byte utf-8 block and print it
// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
void printqchar(uint32_t u) {
    putchar(u >> 18 & 0x07 | 0xF0);
    putchar(u >> 12 & 0x3F | 0x80);
    putchar(u >>  6 & 0x3F | 0x80);
    putchar(u       & 0x3F | 0x80);
}

// transform a string to a special area (1D400..1D7FF) string and print it
void transformq(const char *s, uint32_t u) {
    size_t i;
    if(s == NULL)
        return;
    for(i = 0; s[i] != '\0'; i++) {
        if(isupper(s[i]))
            printqchar(s[i] - 'A' + u);
        else if(islower(s[i]))
            printqchar(s[i] - 'a' + u + 26);
        else
            putchar(s[i]);
    }
}

// transform a string to a superbold string and print it
void superbold(const char *s) {
    size_t i;
    if(s == NULL)
        return;
    for(i = 0; s[i] != '\0'; i++) {
        if(s[i] >= '!' && s[i] <= '~')
            printtchar(s[i] - '!' + 0xFF01);
        else
            putchar(s[i]);
    }
}

int main(int argc, char *argv[]) {
    // not enough args
    if(argc < 2) {
        printf("Usage: superfont text [font]\n"
            "  font options:\n"
            "    -f for fraktur\n"
            "    -h for helvetica style\n"
            "    -H for helvetica bold style\n"
            "    -i for italic\n"
            "    -m for monospace\n"
            "    defaults to superbold\n");
        return 0;
    }
    // 2+ args -> try to get option in third arg
    else if(argc > 2) {
        if(!strcmp("-f", argv[2]))
            transformq(argv[1], 0x1D56C);
        else if(!strcmp("-h", argv[2]))
            transformq(argv[1], 0x1D5A0);
        else if(!strcmp("-H", argv[2]))
            transformq(argv[1], 0x1D5D4);
        else if(!strcmp("-i", argv[2]))
            transformq(argv[1], 0x1D4D0);
        else if(!strcmp("-m", argv[2]))
            transformq(argv[1], 0x1D670);
        else
            superbold(argv[1]);
    }
    // 2 args -> superbold
    else {
        superbold(argv[1]);
    }
    return 0;
}

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