📄 string.c
字号:
/* string.c * * (C) Copyright Dec 20 1998, Edmond J. Breen. * ALL RIGHTS RESERVED. * This code may be copied for personal, non-profit use only. * *//* This file is broken into 2 parts * the first part defines the interface routines * and the 2nd part adds the interface routine * to EiC's look up tables. */#include <stdio.h>#include <string.h>#include <stdlib.h>#include <stdarg.h>#include "eic.h"#include "stdliblocal.h"#include "xalloc.h"/* STRING.H STUFF ------------------------------*/ val_t eic_memcpy(void){ val_t v; ptr_t p2; size_t s; getptrarg(0,v.p); getptrarg(1,p2); s = arg(2,getargs(),size_t); checkEp(v.p,s); checkEp(p2,s); memcpy(v.p.p,p2.p,s); return v;}val_t eic_memmove(void){ val_t v; ptr_t p2; size_t s; getptrarg(0,v.p); getptrarg(1,p2); s = arg(2,getargs(),size_t); checkEp(v.p,s); checkEp(p2,s); #ifdef _SUNOS bcopy(p2.p,v.p.p,s);#else memmove(v.p.p,p2.p,s);#endif return v;}val_t eic_strcpy(void) /* unsafe */{ val_t v; getptrarg(0,v.p); checkEp(v.p,strlen(arg(1,getargs(), ptr_t).p) + 1); strcpy(v.p.p, arg(1,getargs(), ptr_t).p); return v;}val_t eic_strdup(void) /* unsafe */{ val_t v; char *p = arg(0,getargs(),ptr_t).p; int len = strlen(p); v.p.sp = v.p.p = xmalloc(len +1); if(v.p.p) { strcpy(v.p.p,p); v.p.ep = setEp(v.p, len); } else v.p.ep = NULL; return v;}val_t eic_strncpy(void){ val_t v; ptr_t p2; size_t s; getptrarg(0,v.p); getptrarg(1,p2); s = arg(2,getargs(),size_t); checkEp(v.p,s); strncpy(v.p.p,p2.p,s); return v;}val_t eic_strcat(void) /* unsafe */{ val_t v; ptr_t p2; getptrarg(0,v.p); getptrarg(1,p2); checkEp( v.p, strlen(v.p.p) + strlen(p2.p) + 1 ); strcat(v.p.p,p2.p); return v;}val_t eic_strncat(void) /* unsafe */{ val_t v; ptr_t p2; size_t s, s1; getptrarg(0,v.p); getptrarg(1,p2); s = arg(2,getargs(),size_t); s1 = strlen(p2.p); checkEp(v.p,strlen(v.p.p) + (s < s1 ? s : s1) + 1 ); strncat(v.p.p,p2.p,s); return v;}val_t eic_memcmp(void){ val_t v; v.ival = memcmp(arg(0,getargs(),ptr_t).p, arg(1,getargs(),ptr_t).p, arg(2,getargs(),size_t)); return v;}val_t eic_strcmp(void){ val_t v; v.ival = strcmp(arg(0,getargs(),ptr_t).p, arg(1,getargs(),ptr_t).p); return v;}val_t eic_strcoll(void){ val_t v; v.ival = strcoll(arg(0,getargs(),ptr_t).p, arg(1,getargs(),ptr_t).p); return v;}val_t eic_strncmp(void){ val_t v; v.ival = strncmp(arg(0,getargs(),ptr_t).p, arg(1,getargs(),ptr_t).p, arg(2,getargs(),size_t)); return v;}val_t eic_strxfrm(void){ val_t v; v.szval = strxfrm(arg(0,getargs(),ptr_t).p, arg(1,getargs(),ptr_t).p, arg(2,getargs(),size_t)); return v;}val_t eic_memchr(void){ val_t v; v.p = arg(0,getargs(),ptr_t); v.p.p = memchr(v.p.p, arg(1,getargs(),int), arg(2,getargs(),size_t)); return v;}val_t eic_strchr(void){ val_t v; v.p = arg(0,getargs(),ptr_t); v.p.p = strchr(v.p.p, arg(1,getargs(),int)); return v;}val_t eic_strcspn(void){ val_t v; v.szval = strcspn(arg(0,getargs(),ptr_t).p, arg(1,getargs(),ptr_t).p); return v;}val_t eic_strpbrk(void){ val_t v; getptrarg(0,v.p); v.p.p = strpbrk(v.p.p, arg(1,getargs(),ptr_t).p); return v;}val_t eic_strrchr(void){ val_t v; getptrarg(0,v.p); v.p.p = strrchr(v.p.p, arg(1,getargs(),int)); return v;}val_t eic_strspn(void){ val_t v; v.szval = strspn(arg(0,getargs(),ptr_t).p, arg(1,getargs(),ptr_t).p); return v;}val_t eic_strstr(void){ val_t v; getptrarg(0,v.p); v.p.p = strstr(v.p.p, arg(1,getargs(),ptr_t).p); return v;}val_t eic_strtok(void){ static val_t h; val_t v; getptrarg(0,v.p); if(v.p.p == NULL) { v.p.sp = h.p.sp; v.p.ep = h.p.ep; }else h.p = v.p; v.p.p = strtok(v.p.p, arg(1,getargs(),ptr_t).p); return v;}val_t eic_memset(void){ val_t v; size_t s; getptrarg(0,v.p); s = arg(2,getargs(),size_t); checkEp(v.p,s); memset(v.p.p, arg(1,getargs(),int), s); return v;}val_t eic_strerror(void){ val_t v; v.p.p = strerror(arg(0,getargs(),int)); v.p.sp = v.p.p; setEp( v.p, strlen(v.p.p) + 1 ); return v;}val_t eic_strlen(void){ val_t v; v.szval = strlen(arg(0,getargs(),ptr_t).p); return v;}val_t eic_strrev(void){ val_t v; getptrarg(0,v.p); v.p.p = strrev(v.p.p); return v;}val_t eic_fftoa(void){ val_t v; arg_list ap = getargs(); getptrarg(1,v.p); fftoa(arg(0,ap,float), /* value */ v.p.p, /* string */ arg(2,ap,int), /* precision */ arg(3,ap,char), /* 'f','e' or 'E' */ arg(4,ap,int)); /* truncation, i.e. 0 or 1 */ return v;}/********************************************************************/void module_string(void){ /* string .h */ EiC_add_builtinfunc("memcpy",eic_memcpy); EiC_add_builtinfunc("memmove",eic_memmove); EiC_add_builtinfunc("strcpy",eic_strcpy); EiC_add_builtinfunc("strdup",eic_strdup); EiC_add_builtinfunc("strncpy",eic_strncpy); EiC_add_builtinfunc("strcat",eic_strcat); EiC_add_builtinfunc("strncat",eic_strncat); EiC_add_builtinfunc("memcmp",eic_memcmp); EiC_add_builtinfunc("strcmp",eic_strcmp); EiC_add_builtinfunc("strcoll",eic_strcoll); EiC_add_builtinfunc("strncmp",eic_strncmp); EiC_add_builtinfunc("strxfrm",eic_strxfrm); EiC_add_builtinfunc("memchr",eic_memchr); EiC_add_builtinfunc("strchr",eic_strchr); EiC_add_builtinfunc("strcspn",eic_strcspn); EiC_add_builtinfunc("strpbrk",eic_strpbrk); EiC_add_builtinfunc("strrchr",eic_strrchr); EiC_add_builtinfunc("strspn",eic_strspn); EiC_add_builtinfunc("strstr",eic_strstr); EiC_add_builtinfunc("strtok",eic_strtok); EiC_add_builtinfunc("memset",eic_memset); EiC_add_builtinfunc("strerror",eic_strerror); EiC_add_builtinfunc("strlen",eic_strlen); EiC_add_builtinfunc("strrev", eic_strrev); EiC_add_builtinfunc("fftoa", eic_fftoa);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -