├── .gitignore ├── makefile ├── README.md └── cliqr.c /.gitignore: -------------------------------------------------------------------------------- 1 | qr 2 | -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | CC=clang 2 | 3 | all: 4 | $(CC) -o cliqr -lqrencode cliqr.c 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | *This project is deprecated, use qrencode as a replacement.* 2 | 3 | ``` 4 | qrencode -t UTF8 5 | ``` 6 | 7 | # CliQR 8 | Command line QR code generator 9 | -------------------------------------------------------------------------------- /cliqr.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | const int version_major = 1; 7 | const int version_minor = 1; 8 | const int version_build = 0; 9 | 10 | void printhelp(char* progname) { 11 | printf("Usage: %s [Options] [String]\n\n", progname); 12 | printf("String:\n"); 13 | printf(" Any string in UTF-8 format,\n"); 14 | printf(" if left empty there will be read from standard input.\n\n"); 15 | printf("Options:\n"); 16 | printf(" -large Print the qr code in a bigger size\n"); 17 | printf(" --help Display this help message\n"); 18 | printf(" --version Display program information\n"); 19 | } 20 | 21 | void printversion() { 22 | printf("qr version %i.%i.%i\n", version_major, version_minor, version_build); 23 | printf("Made by Philip Goto\n"); 24 | } 25 | 26 | void print_qr_large(QRcode* qr) { 27 | printf("\033[107m"); 28 | for(int col = -1; col <= qr->width; col++) 29 | printf(" "); 30 | printf("\033[0m\n"); 31 | 32 | for(int row = 0; row < qr->width; row++) { 33 | printf("\033[107m "); 34 | for(int col = 0; col < qr->width; col++) { 35 | if(*(qr->data + row*qr->width + col) & 1) 36 | printf("\033[40m "); 37 | else 38 | printf("\033[107m "); 39 | } 40 | printf("\033[107m \033[0m\n"); 41 | } 42 | 43 | printf("\033[107m"); 44 | for(int col = -1; col <= qr->width; col++) 45 | printf(" "); 46 | printf("\033[0m\n"); 47 | } 48 | 49 | void print_qr_small(QRcode* qr) { 50 | for(int row = -1; row < qr->width; row += 2) { 51 | printf("\033[107m\033[97m▀"); 52 | 53 | for(int col = 0; col < qr->width; col++) { 54 | if(row == -1 || row == qr->width) 55 | printf("\033[97m"); 56 | else if(*(qr->data + row*qr->width + col) & 1) 57 | printf("\033[30m"); 58 | else 59 | printf("\033[97m"); 60 | 61 | if(row + 1 == qr->width) 62 | printf("\033[107m"); 63 | else if(*(qr->data + (row + 1)*qr->width + col) & 1) 64 | printf("\033[40m"); 65 | else 66 | printf("\033[107m"); 67 | 68 | printf("▀"); 69 | } 70 | 71 | printf("\033[107m\033[97m▀\033[0m\n"); 72 | } 73 | 74 | printf("\033[0m\033[97m"); 75 | for(int col = -1; col <= qr->width; col++) 76 | printf("▀"); 77 | printf("\033[0m\n"); 78 | } 79 | 80 | int main(int argc, char *argv[]) { 81 | char* input = NULL; 82 | int large = 0; 83 | 84 | for(int argn = 1; argn < argc; argn++) { 85 | if(!strcmp(argv[argn], "--help")) { 86 | printhelp(argv[0]); 87 | return(0); 88 | } 89 | else if(!strcmp(argv[argn], "--version")) { 90 | printversion(); 91 | return(0); 92 | } 93 | if(!strcmp(argv[argn], "-large")) { 94 | large = 1; 95 | } 96 | else if(argn == argc - 1) { 97 | input = argv[argc - 1]; 98 | } 99 | else { 100 | fprintf(stderr, "Unknown argument \"%s\"\n\n", argv[argn]); 101 | printhelp(argv[0]); 102 | return(1); 103 | } 104 | } 105 | 106 | size_t bufsize = 256; 107 | char* buf = malloc(bufsize); 108 | 109 | if(input == NULL) { 110 | off_t i = 0; 111 | while((buf[i++] = getc(stdin)) != EOF) { 112 | if(i == bufsize) { 113 | bufsize *= 2; 114 | buf = realloc(buf, bufsize); 115 | if(!buf) { 116 | fprintf(stderr, "Input is too long\n"); 117 | return(1); 118 | } 119 | } 120 | } 121 | 122 | buf[i-1] = 0; 123 | input = buf; 124 | } 125 | 126 | if(*input == '\0') { 127 | fprintf(stderr, "No input received\n"); 128 | return(1); 129 | } 130 | QRcode* qr = QRcode_encodeString8bit(input, 0, QR_ECLEVEL_L); 131 | if(qr != NULL) 132 | if(large) 133 | print_qr_large(qr); 134 | else 135 | print_qr_small(qr); 136 | else { 137 | fprintf(stderr, "Input is too long\n"); 138 | return(1); 139 | } 140 | 141 | QRcode_free(qr); 142 | free(buf); 143 | 144 | return(0); 145 | } 146 | --------------------------------------------------------------------------------