URL
https://opencores.org/ocsvn/thor/thor/trunk
Subversion Repositories thor
Compare Revisions
- This comparison shows the changes necessary to convert path
/thor/trunk/software
- from Rev 20 to Rev 22
- ↔ Reverse comparison
Rev 20 → Rev 22
/c64libc/source/stdlib.c
0,0 → 1,143
#include <stdlib.h> |
|
int (abs)(int i) |
{ |
return ((i < 0) ? -i : i); |
} |
|
div_t (div)(int numer, int denom) |
{ |
div_t val; |
|
val.quot = numer / denom; |
val.rem = numer - denom * val.quot; |
if (val.quot < 0 && 0 < val.rem) { |
val.quot += 1; |
val.rem -= denom; |
} |
return (val); |
} |
|
long (labs)(long i) |
{ |
return ((i < 0) ? -i : i); |
} |
|
ldiv_t (ldiv)(long numer, long denom) |
{ |
ldiv_t val; |
|
val.quot = numer / denom; |
val.rem = numer - denom * val.quot; |
if (val.quot < 0 && 0 < val.rem) { |
val.quot += 1; |
val.rem -= denom; |
} |
return (val); |
} |
|
void *(bsearch)(const void *key, const void *base, size_t nelem, size_t size, _Cmpfun *cmp) |
{ |
const char *p; |
size_t n; |
|
p = base; |
for (p = base, n = nelem; 0 < n;) { |
const size_t pivot = n >> 1; |
const char *q = p + size * pivot; |
const int val = (*cmp)(key,q); |
|
if (val < 0) |
n = pivot; |
else if (val == 0) |
return ((void *)q); |
else { |
p = q + size; |
n -= pivot + 1; |
} |
} |
return NULL; |
} |
|
void (qsort)(void *base, size_t n, size_t size, _Cmpfun *cmp) |
{ |
size_t i; |
size_t j; |
char *qi; |
char *qj; |
char *qp; |
char *q1; |
char *q2; |
char buf[256]; |
size_t m, ms; |
|
while (1 < n) { |
i = 0; |
j = n - 1; |
qi = base; |
qj = qi + size * j; |
qp = qj; |
|
while (i < j) { |
while (i < j && (*cmp)(qi,qp) <= 0) |
++i, qi += size; |
while (i < j && (*cmp)(qp,qj) <= 0) |
--j, qj -= size; |
if (i < j) { |
for (ms = size; 0 < ms; ms -= m, q1 += m, q2 -= m) { |
m = ms < sizeof(buf) ? ms : sizeof(buf); |
memcpy(buf, q1, m); |
memcpy(q1, q2, m); |
memcpy(q2, buf, m); |
} |
++i, qi += size; |
--j, qj -= size; |
} |
} |
if (qi != qp) { |
for (m = size; 0 < ms; ms -= m, q1 += m, q2 -= m) { |
m = ms < sizeof(buf) ? ms : sizeof(buf); |
memcpy(buf, q1, m); |
memcpy(q1, q2, m); |
memcpy(q2, buf, m); |
} |
} |
j = n - i; |
if (j < i) { |
if (1 < j) |
qsort(qi, j, size, cmp); |
n = i; |
} |
else { |
if (1 < i) |
qsort(base, i, size, cmp); |
base = qi; |
n = j; |
} |
} |
} |
|
|
// seed the random number generator |
void (srand)(unsigned int seed) |
{ |
_Randseed = seed; |
} |
|
// generate a random number in the range 0 to max-1 |
int (rand)(void) |
{ |
_Randseed = _Randseed * 1103515245 + 12345; |
return ((unsigned int)(_Randseed >> 16) & RAND_MAX); |
} |
|
int (atoi)(const char *s) |
{ |
return ((int)_Stoul(s, NULL, 10)); |
} |
|
long (atol)(const char *s) |
{ |
return ((long)_Stoul(s, NULL, 10)); |
} |
|
/c64libc/source/stdio.c
0,0 → 1,245
//#include "c:\AtlysCores\RTF65000\trunk\software\stdio.h" |
extern pascal int prtdbl(double,int,int,char E); |
|
typedef union tagval { |
__int64 i; |
double d; |
} uval; |
|
pascal void putch(char ch) |
{ |
asm { |
addui sp,sp,#-8 |
sw r6,[sp] |
lw r1,32[bp] |
ldi r6,#14 ; Teletype output function |
sys #10 ; Video BIOS call |
lw r6,[sp] |
addui sp,sp,#8 |
} |
} |
|
pascal void putnum(int num, int wid, char sep, char padchar) |
{ |
int n, m10; |
char sign; |
static char numwka[200]; |
|
asm { |
ldi r1,#80 |
sc r1,hs:LEDS |
} |
if (wid < 0 or wid > 200) // take care of nutty parameter |
wid = 0; |
sign = num < 0 ? '-' : '+'; |
if (num < 0) num = -num; |
n = 0; |
do { |
if ((n % 4)==3 && sep) { |
numwka[n]=sep; |
n++; |
} |
m10 = num % 10; |
numwka[n] = m10 + '0'; |
num = num / 10; |
n++; |
} until (num == 0 or n > 18); |
if (sign=='-') { |
numwka[n] = sign; |
n++; |
} |
asm { |
ldi r1,#88 |
sc r1,hs:LEDS |
} |
for (; n < wid; wid--) |
putch(padchar); |
asm { |
ldi r1,#89 |
sc r1,hs:LEDS |
} |
while (n > 0) { |
--n; |
putch(numwka[n]); |
} |
asm { |
ldi r1,#90 |
sc r1,hs:LEDS |
} |
} |
|
pascal void puthexnum(int num, int wid, int ul, char padchar) |
{ |
int n, m; |
char sign; |
char numwka[200]; |
|
if (wid < 0 or wid > 200) // take care of nutty parameter |
wid = 0; |
n = 0; |
sign = num < 0 ? '-' : '+'; |
if (num < 0) num = -num; |
do { |
m = num & 15; |
if (m < 10) |
numwka[n] = m + '0'; |
else if (ul) |
numwka[n] = m + 'A'-10; |
else |
numwka[n] = m + 'a'-10; |
num = num >> 4; |
n++; |
} |
while (num != 0 && n < 18); |
if (sign=='-') { |
numwka[n] = sign; |
n++; |
} |
while (n < wid) { |
putch(sign=='-' ? ' ' : padchar); |
wid--; |
} |
while (n > 0) { |
--n; |
putch(numwka[n]); |
} |
} |
|
pascal int putstr(char *p, int maxchars) |
{ |
char *q; |
|
for (q = p; *p && maxchars > 0; p++, maxchars--) |
putch(*p); |
return p-q; |
} |
|
pascal void putstr2(char *p) |
{ |
asm { |
addui sp,sp,#-8 |
sw r6,[sp] |
lw r1,24[bp] |
ldi r6,#$1B ; Video BIOS DisplayString16 function |
sys #10 |
lw r6,[sp] |
addui sp,sp,#8 |
} |
} |
|
int getcharNoWait() |
{ |
return KeybdGetBufferedCharNoWait(); |
} |
|
/* |
naked int getcharNoWait() |
{ |
asm { |
push lr |
bsr KeybdGetBufferedCharNoWait_ |
pop lr |
rtl |
push r6 |
ld r6,#3 ; KeybdGetCharNoWait |
sys #10 |
pop r6 |
rtl |
} |
} |
*/ |
|
int (getchar)() |
{ |
int ch; |
|
do { |
ch = getcharNoWait(); |
} |
while (ch==-1); |
return ch & 255; |
} |
|
|
int printf(char *p, ...) |
{ |
int *q; |
int fmtwidth; |
int maxwidth; |
int wd; |
uval v; |
char padchar; |
q = &p; |
|
for (; *p; p++) { |
padchar = ' '; |
if (*p=='%') { |
fmtwidth = 0; |
maxwidth = 65535; |
p++; |
j1: |
switch(*p) { |
case '%': |
putch('%'); |
break; |
case 'c': |
q++; |
putch(*q); |
break; |
case 'd': |
q++; |
putnum(*q,fmtwidth,0,padchar); |
break; |
case 'e': |
case 'E': |
q++; |
v.i = *q; |
prtdbl(v.d,fmtwidth,maxwidth,*p); |
break; |
case 'x': |
q++; |
puthexnum(*q,fmtwidth,0,padchar); |
break; |
case 'X': |
q++; |
puthexnum(*q,fmtwidth,1,padchar); |
break; |
case 's': |
q++; |
wd = putstr(*q,maxwidth); |
//while (wd < fmtwidth) { |
// putch(' '); |
// wd++; |
//} |
break; |
// width specification |
case '0': |
padchar = '0'; |
case '1','2','3','4','5','6','7','8','9': |
fmtwidth = *p - '0'; |
p++; |
while (isdigit(*p)) { |
fmtwidth *= 10; |
fmtwidth += *p - '0'; |
p++; |
} |
if (*p != '.') |
goto j1; |
case '.': |
p++; |
if (!isdigit(*p)) |
goto j1; |
maxwidth = *p - '0'; |
p++; |
while (isdigit(*p)) { |
maxwidth *= 10; |
maxwidth += *p - '0'; |
p++; |
} |
goto j1; |
} |
} |
else |
putch(*p); |
} |
} |
/c64libc/source/ctype.c
0,0 → 1,99
|
int isxdigit(char ch) |
{ |
if (ch >= 'A' and ch <= 'F') return true; |
if (ch >= 'a' and ch <= 'f') return true; |
if (ch >= '0' and ch <= '9') return true; |
return false; |
} |
|
int isdigit(char ch) |
{ |
if (ch >= '0' and ch <= '9') |
return true; |
return false; |
} |
|
int isalpha(char ch) |
{ |
if (ch >= 'a' and ch <= 'z') |
return true; |
if (ch >= 'A' and ch <= 'Z') |
return true; |
return false; |
} |
|
int isalnum(char ch) |
{ |
if (ch >= '0' and ch <= '9') |
return true; |
if (ch >= 'a' and ch <= 'z') |
return true; |
if (ch >= 'A' and ch <= 'Z') |
return true; |
return false; |
} |
|
// ToDo: add vertical tab |
int isspace(char ch) |
{ |
if (ch==' ') return true; |
if (ch=='\t') return true; |
if (ch=='\n') return true; |
if (ch=='\r') return true; |
if (ch=='\f') return true; |
return false; |
} |
|
int tolower(char ch) |
{ |
if (ch >= 'A' and ch <= 'Z') |
ch = ch - 'A' + 'a'; |
return ch; |
} |
|
int toupper(char ch) |
{ |
if (ch >= 'a' and ch <= 'a') |
ch = ch - 'a' + 'A'; |
return ch; |
} |
|
int isupper(char ch) |
{ |
return ch >= 'A' and ch <= 'Z'; |
} |
|
int islower(char ch) |
{ |
return ch >= 'a' and ch <= 'z'; |
} |
|
int ispunct(char ch) |
{ |
switch(ch) { |
case '!','"','#','%','&','\'','(',')',';','<','=','>','?', |
'[','\\',']','*','+',',','-','.','/',':','^': |
return true; |
default: return false; |
} |
} |
|
int isgraph(char ch) |
{ |
return ispunct(ch) || isalnum(ch); |
} |
|
int isprint(char ch) |
{ |
return isgraph(ch) || ch==' '; |
} |
|
int iscntrl(char ch) |
{ |
switch(ch) { |
// ToDo: add VT |
case '\t','\f','\r','\n','\b','\007': return true; |
default: return false; |
} |
} |
/c64libc/source/stdlib.h
0,0 → 1,85
#ifndef _STDLIB |
#define _STDLIB |
#ifndef _YVALS |
#include <yvals.h> |
#endif |
|
|
#define NULL _NULL |
#define EXIT_FAILURE _EXFAIL |
#define EXIT_SUCCESS 0 |
#define MB_CUR_MAX _Mbcurmax |
#define RAND_MAX 32767 |
|
#ifndef _SIZET |
#define _SIZET |
typedef _Sizet size_t; |
#endif |
#ifndef _WCHART |
#define _WCHART |
// wchar_t is a type in C64 |
//typedef _Wchart wchar_t; |
#endif |
typedef struct { |
int quot; |
int rem; |
} div_t; |
typedef struct { |
long quot; |
long rem; |
} ldiv_t; |
typedef int _Cmpfun(const void *, const void *); |
typedef struct { |
unsigned char _State; |
unsigned short _Wchar; |
} _Mbsave; |
|
|
void abort(void); |
int abs(int); |
int atexit(void (*)(void)); |
double atof(const char *); |
int atoi(const char *); |
long atol(const char *); |
void bsearch(const void *, const void *, size_t, size_t, _Cmpfun *); |
void *calloc(size_t, size_t); |
div_t div(int, int); |
void exit(int); |
void free(void *); |
char *getenv(const char *); |
long labs(long); |
ldiv_t ldiv(long, long); |
void *malloc(size_t); |
int mblen(const char *, size_t); |
size_t mbstowcs(wchar_t *, const char *, size_t); |
int mbtowc(wchar_t *, const char *, size_t); |
|
//void qsort(void *, size_t, size_t, _Cmpfun *); |
|
int rand(int); |
void *realloc(void *, size_t); |
void srand(unsigned int); |
double strtod(const char *, char **); |
long strtol(const char *, char **, int); |
unsigned long strtoul(const char *, char **, int); |
int system(const char *); |
size_t wcstombs(char *, const wchar_t *, size_t); |
int wctomb(char *, wchar_t); |
int _Mbtowc(wchar_t *, const char *, size_t, _Mbsave *); |
double _Stod(const char *, char **); |
unsigned long _Stoul(const char *, char **, int); |
int _Wctomb(char *, wchar_t, char *); |
extern char _Mbcurmax, _Wcxtomb; |
extern _Mbsave _Mbxlen, _Mbxtowc; |
extern unsigned long _Randseed; |
|
#define atof(s) _Stod(s, 0) |
#define atoi(s) (int)_Stoul(s,0,10) |
#define atol(s) (long)_Stoul(s,0,10) |
#define mblen(s,n) _Mbtowc(0,s,n,&_Mbxlen) |
#define mbtowc(pwc,s,n) _Mbtowc(pwc,s,n,&_Mbxtowc) |
#define srand(seed) (void)(_Randseed = (seed)) |
#define strtod(s,endptr) _Stod(s, endptr) |
#define strtoul(s, endptr, base) _Stoul(s,endptr,base) |
#define wctomb(s,wchar) _Wctomb(s,wchar,&_Wcxtomb) |
#endif |
/c64libc/source/string.c
0,0 → 1,178
#define null 0 |
|
byte *memcpy(byte *d, byte *s, int size) |
{ |
asm { |
lw r1,40[bp] |
lw r2,32[bp] |
lw r3,48[bp] |
tst p0,r3 |
p0.eq br .0002 |
subui r3,r3,#1 |
mtspr lc,r3 |
.0001: |
lb r4,[r1] |
sb r4,[r2] |
addui r1,r1,#1 |
addui r2,r2,#1 |
loop .0001 |
.0002: |
} |
return d; |
} |
|
short int *memcpyH(short int *d, short int *s, int size) |
{ |
asm { |
lw r1,40[bp] |
lw r2,32[bp] |
lw r3,48[bp] |
.0001: |
lh r4,[r1] |
sh r4,[r2] |
addui r1,r1,#4 |
addui r2,r2,#4 |
subui r3,r3,#1 |
tst p0,r3 |
p0.gt br .0001 |
} |
return d; |
} |
|
int *memcpyW(int *d, int *s, int size) |
{ |
asm { |
lw r1,40[bp] |
lw r2,32[bp] |
lw r3,48[bp] |
.0001: |
lw r4,[r1] |
sw r4,[r2] |
addui r1,r1,#8 |
addui r2,r2,#8 |
subui r3,r3,#1 |
tst p0,r3 |
p0.gt br .0001 |
} |
return d; |
} |
|
byte *memset(byte *p, byte val, int size) |
{ |
asm { |
lw r1,32[bp] |
lw r2,40[bp] |
lw r3,48[bp] |
.0001: |
sb r2,[r1] |
addui r1,r1,#1 |
subui r3,r3,#1 |
tst p0,r3 |
p0.gt br .0001 |
} |
return p; |
} |
|
short int *memsetH(short int *p, short int val, int size) |
{ |
asm { |
lw r1,32[bp] |
lw r2,40[bp] |
lw r3,48[bp] |
.0001: |
sh r2,[r1] |
addui r1,r1,#4 |
subui r3,r3,#1 |
tst p0,r3 |
p0.gt br .0001 |
} |
return p; |
} |
|
int *memsetW(int *p, int val, int size) |
{ |
asm { |
lw r1,32[bp] |
lw r2,40[bp] |
lw r3,48[bp] |
.0001: |
sw r2,[r1] |
addui r1,r1,#8 |
subui r3,r3,#1 |
tst p0,r3 |
p0.gt br .0001 |
} |
return p; |
} |
|
byte *memchr(byte *p, byte val, int n) |
{ |
byte *su; |
|
for (su = p; n > 0; ++su, --n) |
if (*su==val) |
return su; |
return null; |
} |
|
int strlen(char *p) |
{ |
int n; |
|
if (p==(char *)0) return 0; |
for (n = 0; p[n]; n++) |
; |
return n; |
} |
|
char *strcpy(char *d, char *s) |
{ |
int nn; |
|
for (nn = 0; s[nn]; nn++) |
d[nn] = s[nn]; |
d[nn] = '\0'; |
return d; |
} |
|
char *strncpy(char *d, char *s, int size) |
{ |
int nn; |
|
for (nn = 0; nn < size; nn++) { |
d[nn] = s[nn]; |
if (s[nn]=='\0') |
break; |
} |
for (; nn < size; nn++) |
d[nn] = '\0'; |
return d; |
} |
|
int strncmp(unsigned char *a, unsigned char *b, int len) |
{ |
unsigned char *ua; |
unsigned char *ub; |
|
ua = a; |
ub = b; |
if (ua==ub) // duh |
return 0; |
for (; len > 0; ua++, ub++, len--) |
if (*ua != *ub) |
return *ua < *ub ? -1 : 1; |
else if (*ua == '\0') |
return 0; |
return 0; |
} |
|
char *strchr(char *p, char val, int n) |
{ |
char *su; |
|
for (su = p; n > 0; ++su, --n) |
if (*su==val) |
return su; |
return null; |
} |
|
/c64libc/source/prtdbl.c
0,0 → 1,183
// ============================================================================ |
// __ |
// \\__/ o\ (C) 2015 Robert Finch, Stratford |
// \ __ / All rights reserved. |
// \/_// robfinch<remove>@finitron.ca |
// || |
// |
// prtdbl.c |
// Print a string representation of a double. |
// |
// This source file is free software: you can redistribute it and/or modify |
// it under the terms of the GNU Lesser General Public License as published |
// by the Free Software Foundation, either version 3 of the License, or |
// (at your option) any later version. |
// |
// This source file 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, see <http://www.gnu.org/licenses/>. |
// |
// ============================================================================ |
// |
extern pascal void putchar(char ch); |
extern pascal int putstr(char *p, int maxchars); |
|
// Put a string representation of a double into a char buffer. |
// Buffer must be at least 30 characters in size and at least width characters |
// in size. |
|
pascal int sprtdbl(char *buf, double dbl, int width, int precision, char E) |
{ |
int ndx; |
int exp, expcnt; |
int digit; |
int nn; |
int digits_before_decpt; |
|
ndx = 0; |
if (dbl < 0.0) { |
dbl = -dbl; |
buf[0] = '-'; |
ndx++; |
} |
if (dbl==0.0) { |
buf[ndx]='0'; |
ndx++; |
buf[ndx]='\0'; |
return; |
} |
exp = 0; |
while (dbl < 1.0) { |
dbl *= 1000000.0; |
exp -= 6; |
} |
while (dbl > 100000.0) { |
dbl /= 10.0; |
exp++; |
} |
while (dbl < 100000.0) { |
dbl *= 10.0; |
exp--; |
} |
digits_before_decpt = 1; |
expcnt = exp+7; |
if (exp+7 >= 0 && exp+7 < 8) { |
digits_before_decpt = exp+7; |
digits_before_decpt--; |
expcnt = 2; |
} |
j1:; |
expcnt -= 2; |
exp = digits_before_decpt; |
if (exp <= 0) { |
buf[ndx] = '.'; |
ndx++; |
if (exp < 0) { |
buf[ndx] = '0'; |
ndx++; |
} |
} |
for (nn = 0; nn < 16 && precision > 0; nn++) { |
digit = 0; |
while (dbl > 100000.0) { |
dbl -= 100000.0; |
digit++; |
} |
buf[ndx] = digit + '0'; |
ndx++; |
exp--; |
if (exp==0) { |
buf[ndx] = '.'; |
ndx++; |
} |
else if (exp < 0) |
precision--; |
dbl *= 10.0; |
} |
do { |
ndx--; |
} while(buf[ndx]=='0'); |
ndx++; |
if (expcnt==0) { |
buf[ndx]='\0'; |
goto prt; |
} |
buf[ndx] = E; |
ndx++; |
if (expcnt < 0) { |
buf[ndx]='-'; |
ndx++; |
expcnt = -expcnt; |
} |
else { |
buf[ndx]='+'; |
ndx++; |
} |
digit = 0; |
while (expcnt > 1000) { |
expcnt -= 1000; |
digit++; |
} |
buf[ndx] = digit + '0'; |
ndx++; |
digit = 0; |
while (expcnt > 100) { |
expcnt -= 100; |
digit++; |
} |
buf[ndx] = digit + '0'; |
ndx++; |
digit = 0; |
while (expcnt > 10) { |
expcnt -= 10; |
digit++; |
} |
buf[ndx] = digit + '0'; |
ndx++; |
digit = 0; |
while (expcnt > 0) { |
expcnt -= 1; |
digit++; |
} |
buf[ndx] = digit + '0'; |
ndx++; |
buf[ndx] = '\0'; |
prt:; |
// pad left |
if (width > 0) { |
if (ndx < width) { |
for (nn = 29; nn >= width-ndx; nn--) |
buf[nn] = buf[nn-(width-ndx)]; |
for (; nn >= 0; nn--) |
buf[nn] = ' '; |
} |
} |
// pad right |
if (width < 0) { |
width = -width; |
while (ndx < width) { |
buf[ndx]=' '; |
ndx++; |
} |
buf[ndx]='\0'; |
} |
return ndx; |
} |
|
pascal int prtdbl(double dbl, int width, int precision, char E) |
{ |
static char buf[200]; |
int nn; |
|
if (width > 199) |
width = 199; |
if (width < -199) |
width = -199; |
nn = sprtdbl(buf, dbl, width, precision, E); |
putstr(buf,width); |
return nn; |
} |
/c64libc/source/stdio.h
0,0 → 1,105
#ifndef STDIO_H |
#define STDIO_H |
|
#ifndef YVALS_H |
#include <yvals.h> |
#endif |
|
#define NULL _NULL |
#define _IOFBF 0 |
#define _IOLBF 1 |
#define _IONBF 2 |
#define BUFSIZ 512 |
#define EOF -1 |
#define FILENAME_MAX _FNAMAX |
#define FOPEN_MAX _FOPMAX |
#define L_tmpnam _TNAMX |
#define TMP_MAX 32 |
#define SEEK_SET 0 |
#define SEEK_CUR 1 |
#define SEEK_END 2 |
#define stdin _Files[0] |
#define stdout _Files[1] |
#define stderr _Files[2] |
// type definitions |
#ifndef _SIZET |
#define _SIZET |
typedef _Sizet size_t; |
#endif |
typedef struct { |
unsigned long _Off; |
} fpos_t; |
typedef struct { |
unsigned short _Mode; |
short _Handle; |
unsigned byte *_Buf, *_Bend, *_Next; |
unsigned byte *_Rend, *_Rsave, *_Wend; |
unsigned char _Back[2], _Cbuf, _Nback; |
char *_Tmpnam; |
} FILE; |
// declarations |
void clearerr(FILE *f); |
int fclose(FILE *f); |
int feof(FILE *f); |
int ferror(FILE *f); |
int fflush(FILE *f); |
int fgetc(FILE *f); |
int fgetpos(FILE *f, fpos_t *p); |
char *fgets(char *p, int n, FILE *f); |
FILE *fopen(char *p, char *q); |
int fprintf(FILE *f, char *); |
int fputc(int n, FILE *f); |
int fputs(char *p, FILE *f); |
size_t fread(void *p, size_t n, size_t m, FILE *f); |
FILE *freopen(char *p, char *q, FILE *f); |
int fscanf(FILE *f, char *); |
int fseek(FILE *f, long p, int n); |
int fsetpos(FILE *f, fpos_t *p); |
long ftell(FILE *f); |
size_t fwrite(void *v, size_t n, size_t m, FILE *f); |
int getc(FILE *f); |
int getchar(void); |
char *gets(char *p); |
void perror(char *p); |
int printf(char *p); |
int putc(int n, FILE *f); |
int putchar(int ch); |
int puts(char *p); |
int remove(char *n); |
int rename(char *n); |
void rewind(FILE *f); |
int scanf(char *); |
void setbuf(FILE *f, char *p); |
int setvbuf(FILE *, char *, int, size_t); |
int sprintf(char *p, char *q); |
int sscanf(char *p, char *q); |
FILE *tmpfile(void); |
char *tmpnam(char *p); |
int ungetc(int n, FILE *f); |
int vfprintf(FILE *f, char *p, char *q); |
int vprintf(char *p, char *q); |
long _Fgpos(FILE *f, fpos_t *p); |
int _Fspos(FILE *f, fpos_t *p, long n, int m); |
extern FILE *_Files[FOPEN_MAX]; |
|
// Macro overrides |
#define fgetpos(str, ptr) (int)_Fgpos(str,ptr) |
#define fseek(str,off,way) _Fspos(str, _NULL, off, way) |
#define fsetpos(str, ptr) _Fspos(str, ptr, 0L, 0) |
#define ftell(str) _Fgpos(str, _NULL) |
#define getc(str) ((str)->_Next < (str)->_Rend ? *(str)->_Next++ : (getc)(str)) |
//#define getchar() (_Files[0]->_Next < _Files[0]->_Rend ? *_Files[0]->_Next++ : (getchar)()) |
#define putc(c,str) ((str)->_Next < (str)->_Wend ? (*(str)->_Next++ = c) : (putc)(c,str)) |
#define putchar(c) (_Files[1]->_Next < _Files[1]->_Wend ? (*_Files[1]->_Next++ = c) : (putchar)(c)) |
|
|
pascal void putch(char ch); |
pascal void putnum(int num, int wid, char sep); |
pascal void puthexnum(int num, int wid); |
pascal int putstr(char *p, int max); |
int getchar2( ); |
|
//int getchar( ); |
int printf(char *, ...); |
|
#endif |
/c64libc/source/ctype.h
0,0 → 1,18
#ifndef CTYPE_H |
#define CTYPE_H |
|
int isspace(char ch); |
int isxdigit(char ch); |
int isdigit(char ch); |
int isalpha(char ch); |
int isupper(char ch); |
int islower(char ch); |
int ispunct(char ch); |
int isalnum(char ch); |
int isgraph(char ch); |
int isprint(char ch); |
int iscntrl(char ch); |
int tolower(char ch); |
int toupper(char ch); |
|
#endif |
/c64libc/source/Thor/outw.c
0,0 → 1,9
|
void outw(unsigned int port, int value) |
{ |
asm { |
lw r1,32[bp] |
lw r2,40[bp] |
sw r2,zs:[r1] |
} |
} |
/c64libc/source/Thor/outh.c
0,0 → 1,9
|
void outh(unsigned int port, int value) |
{ |
asm { |
lw r1,32[bp] |
lw r2,40[bp] |
sh r2,zs:[r1] |
} |
} |
/c64libc/source/Thor/getCPU.c
0,0 → 1,9
// Return the which CPU is active. |
|
naked int getCPU() |
{ |
asm { |
cpuid r1,r0,#0 |
rts |
}; |
} |
/c64libc/source/Thor/outb.c
0,0 → 1,9
|
void outb(unsigned int port, int value) |
{ |
asm { |
lw r1,32[bp] |
lw r2,40[bp] |
sb r2,zs:[r1] |
} |
} |
/c64libc/source/Thor/outc.c
0,0 → 1,9
|
void outc(unsigned int port, int value) |
{ |
asm { |
lw r1,32[bp] |
lw r2,40[bp] |
sc r2,zs:[r1] |
} |
} |