From 98ddef53dd1dcdf08a8d7a3eec4a86dece6350fa Mon Sep 17 00:00:00 2001 From: Oliver Lehmann Date: Thu, 29 Mar 1990 16:08:04 +0000 Subject: [PATCH] add LCC - a better C-Compiler for WEGA --- WEGA/contrib/lcc/lib/libc/u8k/gen/strtok.s | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 WEGA/contrib/lcc/lib/libc/u8k/gen/strtok.s diff --git a/WEGA/contrib/lcc/lib/libc/u8k/gen/strtok.s b/WEGA/contrib/lcc/lib/libc/u8k/gen/strtok.s new file mode 100644 index 0000000..8bcf9ee --- /dev/null +++ b/WEGA/contrib/lcc/lib/libc/u8k/gen/strtok.s @@ -0,0 +1,91 @@ +/* + * uses strpbrk and strspn to break string into tokens on + * sequentially subsequent calls. returns NULL when no + * non-separator characters remain. + * `subsequent' calls are calls with first argument NULL. + * + * #define NULL (char*)0 + * + * extern int strspn(); + * extern char *strpbrk(); + * + * char * + * strtok(string, sepset) + * char *string; + * register char *sepset; + * { + * register char *p, *r; + * static char *savept; + * + * //first or subsequent call + * p = string; + * if (p == NULL) + * p = savept; + * if(p == NULL) // return if no tokens remaining + * return(NULL); + * + * p += strspn(p, sepset); // skip leading separators + * + * if(*p == '\0') // return if no tokens remaining + * return(NULL); + * + * if((r = strpbrk(q, sepset)) != NULL) // move past token + * { + * *r = '\0'; + * r++; + * } + * savept = r; + * return(p); + * } + */ + .seg + fp := r13 + FP := rr12 + sp := r15 + SP := rr14 + .psec data + .data + .even +savept: + .=.+4 + .psec + .code +_strtok:: + { + dec sp,#12 + ldm @SP,r8,#6 + ld fp,sp + inc fp,#8 + ldm r8,|_stkseg+8|(fp),#4 // rr8 <-> p=string , rr10 <-> sepset + testl rr8 + jr nz,~L1 + ldl rr8,savept +~L1: + testl rr8 + jr z,~zerofinis + pushl @SP,rr10 + pushl @SP,rr8 + call _strspn + add r9,r2 // p += strspn(p,sepset) + testb @rr8 + jr nz,~L2 +~zerofinis: + subl rr2,rr2 + jr ~finis +~L2: + ldl @SP,rr8 + call ~strpbrk // rr2 <-> r=strpbrk(p,sepset) + testl rr2 + jr z,~L3 + clrb @rr2 + inc r3,#1 // r++ +~L3: + ldl savept,rr2 + ldl rr2,rr8 +~finis: + ld sp,fp + dec fp,#8 + ldm r8,@FP,#6 + inc sp,#4 + ret + }