forked from PlaneteCasio/Casio_asm
156 lines
2.7 KiB
C
156 lines
2.7 KiB
C
#include "string.h"
|
|
|
|
char RETVAL[36];
|
|
|
|
void strcpyl(char* src, char* dest, int max) {
|
|
for(int i=0; i<max&&*src; i++) *(dest++)=*(src++);
|
|
}
|
|
int strcmpl(char* src, char* cmp, int max) {
|
|
for(int i=0; i<max&&*src; i++) {
|
|
if(*(cmp++)!=*(src++)) return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
int strsuml(char* str, int max) {
|
|
int hash=7;
|
|
for(int i=0; i<max&&str[i]; i++) {
|
|
hash*=31;
|
|
hash+=str[i];
|
|
}
|
|
return hash;
|
|
}
|
|
int strlenl(char* str, int max) {
|
|
int i=0;
|
|
while(*str&&i<max) {
|
|
str++;
|
|
i++;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
void strcpyd(char* src, char* dest) {
|
|
while(*src) *(dest++)=*(src++);
|
|
*dest='\0';
|
|
}
|
|
int strcmpd(char* src, char* cmp) {
|
|
while(*src||*cmp) {
|
|
if(*(cmp++)!=*(src++)) return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
int strsumd(char* str) {
|
|
int hash=7;
|
|
for(int i=0; str[i]; i++) {
|
|
hash*=31;
|
|
hash+=str[i];
|
|
}
|
|
return hash;
|
|
}
|
|
int strlend(char* str) {
|
|
int i=0;
|
|
while(*str) {
|
|
str++;
|
|
i++;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
void strcpyt(char* src, char* dest, char end) {
|
|
while(*src!=end) *(dest++)=*(src++);
|
|
}
|
|
int strcmpt(char* src, char* cmp, char end) {
|
|
while(*src!=end||*cmp!=end) {
|
|
if(*(cmp++)!=*(src++)) return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
int strsumt(char* str, char end) {
|
|
int hash=7;
|
|
for(int i=0; str[i]!=end; i++) {
|
|
hash*=31;
|
|
hash+=str[i];
|
|
}
|
|
return hash;
|
|
}
|
|
int strlent(char* str, char end) {
|
|
int i=0;
|
|
while(*str!=end) {
|
|
str++;
|
|
i++;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
#define hexdigit(val) ((val)>9?((val)+'a'-10):((val)+'0'))
|
|
#define decdigit(val) ((val)+'0')
|
|
char* itohex(int val, int digits) {
|
|
for(int i=0; i<digits; i++) {
|
|
int part=val>>4*i;
|
|
RETVAL[digits-i-1]=hexdigit(part&0xf);
|
|
}
|
|
RETVAL[digits]='\0';
|
|
return RETVAL;
|
|
}
|
|
char* itobin(int val, int digits) {
|
|
for(int i=0; i<digits; i++) {
|
|
int part=val>>i;
|
|
RETVAL[digits-i-1]=decdigit(part&0x1);
|
|
}
|
|
RETVAL[digits]='\0';
|
|
return RETVAL;
|
|
}
|
|
char* itodec(int val) {
|
|
int pos=31;
|
|
int neg=0;
|
|
RETVAL[32]='\0';
|
|
if(val==0) {
|
|
RETVAL[31]='0';
|
|
return RETVAL+31;
|
|
} else if(val<0) {
|
|
neg=1;
|
|
val=-val;
|
|
}
|
|
while(val) {
|
|
RETVAL[pos--]=decdigit(val%10);
|
|
val/=10;
|
|
}
|
|
if(neg) {
|
|
RETVAL[pos--]='-';
|
|
}
|
|
return RETVAL+pos+1;
|
|
}
|
|
|
|
#define digitval(digit) (((digit)>='a')?((digit)-'a'+10):((digit)>='A')?((digit)-'A'+10):(digit)-'0')
|
|
#define isDec(c) (((c)>='0'&&(c)<='9'))
|
|
#define isHex(c) (((c)>='A'&&(c)<='F')||((c)>='a'&&(c)<='f')||isDec((c)))
|
|
#define isBin(c) ((c)=='0'||(c)=='1')
|
|
int hextoi(char* str) {
|
|
int val=0;
|
|
while(isHex(*str)) {
|
|
val<<=4;
|
|
val|=digitval(*str);
|
|
str++;
|
|
}
|
|
return val;
|
|
}
|
|
int dectoi(char* str) {
|
|
int val=0;
|
|
int sgn=*str=='-'?-1:1;
|
|
if(*str=='-'||*str=='+') str++;
|
|
while(isDec(*str)) {
|
|
val*=10;
|
|
val|=digitval(*str);
|
|
str++;
|
|
}
|
|
return val*sgn;
|
|
}
|
|
int bintoi(char* str) {
|
|
int val=0;
|
|
while(isBin(*str)) {
|
|
val<<=1;
|
|
val|=digitval(*str);
|
|
str++;
|
|
}
|
|
return val;
|
|
}
|