Mercurial > repos > tabletprog
comparison cbackend.js @ 288:a4c2b31acba7
Add utf8 method to integer types for converting a number into a utf8 string made up of the corresponding character code
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 22 Jul 2014 21:31:41 -0700 |
parents | ddf38b66b2e2 |
children | befaefdfcd8a |
comparison
equal
deleted
inserted
replaced
287:b01d7c1b4edd | 288:a4c2b31acba7 |
---|---|
758 'sprintf(str->data, "%' + (bits == 64 ? 'l' : '') + (unsigned ? 'u' : 'd') + '", self->num);', | 758 'sprintf(str->data, "%' + (bits == 64 ? 'l' : '') + (unsigned ? 'u' : 'd') + '", self->num);', |
759 'str->len = str->bytes = strlen(str->data);', | 759 'str->len = str->bytes = strlen(str->data);', |
760 'return &(str->header);' | 760 'return &(str->header);' |
761 ] | 761 ] |
762 }); | 762 }); |
763 intObj.addMessage('utf8', { | |
764 vars: {str: 'string *', norm: 'uint32_t'}, | |
765 lines: [ | |
766 'str = (string *)make_object(&string_meta, NULL, 0);', | |
767 'str->len = 1;', | |
768 'norm = self->num;', | |
769 'if (norm < 0x80) {', | |
770 ' str->bytes = 1;', | |
771 ' str->data = GC_MALLOC(2);', | |
772 ' str->data[0] = norm;', | |
773 '} else if(norm < 0x800) {', | |
774 ' str->bytes = 2;', | |
775 ' str->data = GC_MALLOC(3);', | |
776 ' str->data[0] = 0xC0 | norm >> 6;', | |
777 ' str->data[1] = 0x80 | (norm & 0x3F);', | |
778 '} else if(norm < 0x10000) {', | |
779 ' str->bytes = 3;', | |
780 ' str->data = GC_MALLOC(4);', | |
781 ' str->data[0] = 0xE0 | norm >> 12;', | |
782 ' str->data[1] = 0x80 | ((norm >> 6) & 0x3F);', | |
783 ' str->data[2] = 0x80 | (norm & 0x3F);', | |
784 '} else if(norm < 0x10FFFF) {', | |
785 ' str->bytes = 4;', | |
786 ' str->data = GC_MALLOC(5);', | |
787 ' str->data[0] = 0xF0 | norm >> 18;', | |
788 ' str->data[1] = 0x80 | ((norm >> 12) & 0x3F);', | |
789 ' str->data[2] = 0x80 | ((norm >> 6) & 0x3F);', | |
790 ' str->data[3] = 0x80 | (norm & 0x3F);', | |
791 '} else {', | |
792 ' str->len = str->bytes = 0;', | |
793 ' str->data = GC_MALLOC(1);', | |
794 '}', | |
795 'str->data[str->bytes] = 0;', | |
796 'return &(str->header);' | |
797 ] | |
798 }); | |
763 //7FFFFFFFFFFFFFFF | 799 //7FFFFFFFFFFFFFFF |
764 //01234567890123456789 | 800 //01234567890123456789 |
765 intObj.addMessage('hex', { | 801 intObj.addMessage('hex', { |
766 vars: {str: 'string *'}, | 802 vars: {str: 'string *'}, |
767 lines: [ | 803 lines: [ |