= List of TinyC built-in Functions
* From: [[TinyC for the SD-8516]]
**For actual built ins there is only putchar() and getchar().** These link to the BASIC IO library at INT $05. After that, a lot can be written in C.
When I say "built-in" I mean these are essentially built-in because I am providing them as a reference and I have validated that they work. They aren't actually built in to V1 //(tinyc.asm)// but you can cut and paste them in front of your main() and then use them. I'll see about including them by default in V2 //(tinyc.c)//.
=== print()
int print(char *s) {
int i = 0;
while (s[i] != 0) {
putchar(s[i]);
i = i + 1;
}
return 0;
}
=== println()
int println(char *s) {
print(s);
putchar(13);
putchar(10);
return 0;
}
=== printnum()
int printnum(int n) {
char *buf = 0xDF00;
int i = 0;
int neg = 0;
if (n < 0) {
neg = 1;
n = 0 - n;
}
if (n == 0) {
putchar('0');
return 0;
}
while (n > 0) {
*(buf + i) = n - (n / 10) * 10 + '0';
n = n / 10;
i = i + 1;
}
if (neg) {
putchar('-');
}
while (i > 0) {
i = i - 1;
putchar(buf[i]);
}
return 0;
}
=== readline()
int readline(char *buf, int max) {
int i = 0;
int c = 0;
while (i < max - 1) {
c = getchar();
if (c == 13) {
putchar(13);
putchar(10);
*(buf + i) = 0;
return i;
}
if (c == 8) {
if (i > 0) {
i = i - 1;
putchar(8);
putchar(' ');
putchar(8);
}
} else {
*(buf + i) = c;
putchar(c);
i = i + 1;
}
}
*(buf + i) = 0;
return i;
}
== Strings stuff
=== strcmp()
int strcmp(char *a, char *b) {
int i = 0;
while (a[i] != 0) {
if (a[i] != b[i]) {
return a[i] - b[i];
}
i = i + 1;
}
return a[i] - b[i];
}
=== strlen()
int strlen(char *s) {
int i = 0;
while (s[i] != 0) {
i = i + 1;
}
return i;
}
=== strcpy()
int strcpy(char *dst, char *src) {
int i = 0;
while (src[i] != 0) {
*(dst + i) = src[i];
i = i + 1;
}
*(dst + i) = 0;
return i;
}
=== strcat()
int strcat(char *dst, char *src) {
int di = strlen(dst);
int si = 0;
while (src[si] != 0) {
*(dst + di) = src[si];
di = di + 1;
si = si + 1;
}
*(dst + di) = 0;
return di;
}
=== strncmp()
int strncmp(char *a, char *b, int n) {
int i = 0;
while (i < n) {
if (a[i] != b[i]) {
return a[i] - b[i];
}
if (a[i] == 0) { return 0; }
i = i + 1;
}
return 0;
}
=== strchr()
int strchr(char *s, int c) {
int i = 0;
while (s[i] != 0) {
if (s[i] == c) { return i; }
i = i + 1;
}
return 0 - 1;
}
=== atoi()
int atoi(char *s) {
int n = 0;
int i = 0;
while (isdigit(s[i])) {
n = n * 10 + s[i] - '0';
i = i + 1;
}
return n;
}
=== itoa()
int itoa(int n, char *buf) {
int i = 0;
int neg = 0;
if (n < 0) {
neg = 1;
n = 0 - n;
}
if (n == 0) {
*(buf) = '0';
*(buf + 1) = 0;
return 1;
}
char *tmp = 0xDEF0;
while (n > 0) {
*(tmp + i) = n - (n / 10) * 10 + '0';
n = n / 10;
i = i + 1;
}
int j = 0;
if (neg) {
*(buf) = '-';
j = 1;
}
while (i > 0) {
i = i - 1;
*(buf + j) = tmp[i];
j = j + 1;
}
*(buf + j) = 0;
return j;
}
== Memory stuff
=== memset()
int memset(char *p, int val, int len) {
int i = 0;
while (i < len) {
*(p + i) = val;
i = i + 1;
}
return 0;
}
=== memcpy()
int memcpy(char *dst, char *src, int len) {
int i = 0;
while (i < len) {
*(dst + i) = src[i];
i = i + 1;
}
return 0;
}
== Char stuff
=== isdigit()
int isdigit(int c) {
if (c >= '0') {
if (c <= '9') {
return 1;
}
}
return 0;
}
=== isalpha()
int isalpha(int c) {
if (c >= 'a') {
if (c <= 'z') {
return 1;
}
}
if (c >= 'A') {
if (c <= 'Z') {
return 1;
}
}
return 0;
}
=== isspace()
int isspace(int c) {
if (c == ' ') { return 1; }
if (c == 9) { return 1; }
if (c == 10) { return 1; }
if (c == 13) { return 1; }
return 0;
}
=== isupper()
int isupper(int c) {
if (c >= 'A') {
if (c <= 'Z') {
return 1;
}
}
return 0;
}
=== islower()
int islower(int c) {
if (c >= 'a') {
if (c <= 'z') {
return 1;
}
}
return 0;
}
=== toupper()
int toupper(int c) {
if (islower(c)) {
return c - 32;
}
return c;
}
=== tolower()
int tolower(int c) {
if (isupper(c)) {
return c + 32;
}
return c;
}
== Math stuff
=== abs()
int abs(int n) {
if (n < 0) { return 0 - n; }
return n;
}
=== min()
int min(int a, int b) {
if (a < b) { return a; }
return b;
}
=== max()
int max(int a, int b) {
if (a > b) { return a; }
return b;
}