137da2899SCharles.Forsythimplement Libc0; 237da2899SCharles.Forsyth 337da2899SCharles.Forsythinclude "libc0.m"; 437da2899SCharles.Forsyth 537da2899SCharles.Forsythislx(c: int): int 637da2899SCharles.Forsyth{ 737da2899SCharles.Forsyth return c >= 'a' && c <= 'f'; 837da2899SCharles.Forsyth} 937da2899SCharles.Forsyth 1037da2899SCharles.Forsythisux(c: int): int 1137da2899SCharles.Forsyth{ 1237da2899SCharles.Forsyth return c >= 'A' && c <= 'F'; 1337da2899SCharles.Forsyth} 1437da2899SCharles.Forsyth 1537da2899SCharles.Forsythisalnum(c: int): int 1637da2899SCharles.Forsyth{ 1737da2899SCharles.Forsyth return isalpha(c) || isdigit(c); 1837da2899SCharles.Forsyth} 1937da2899SCharles.Forsyth 2037da2899SCharles.Forsythisalpha(c: int): int 2137da2899SCharles.Forsyth{ 2237da2899SCharles.Forsyth return islower(c) || isupper(c); 2337da2899SCharles.Forsyth} 2437da2899SCharles.Forsyth 2537da2899SCharles.Forsythisascii(c: int): int 2637da2899SCharles.Forsyth{ 2737da2899SCharles.Forsyth return (c&~16r7f) == 0; 2837da2899SCharles.Forsyth} 2937da2899SCharles.Forsyth 3037da2899SCharles.Forsythiscntrl(c: int): int 3137da2899SCharles.Forsyth{ 3237da2899SCharles.Forsyth return c == 16r7f || (c&~16r1f) == 0; 3337da2899SCharles.Forsyth} 3437da2899SCharles.Forsyth 3537da2899SCharles.Forsythisdigit(c: int): int 3637da2899SCharles.Forsyth{ 3737da2899SCharles.Forsyth return c >= '0' && c <= '9'; 3837da2899SCharles.Forsyth} 3937da2899SCharles.Forsyth 4037da2899SCharles.Forsythisgraph(c: int): int 4137da2899SCharles.Forsyth{ 4237da2899SCharles.Forsyth return c >= '!' && c <= '~'; 4337da2899SCharles.Forsyth} 4437da2899SCharles.Forsyth 4537da2899SCharles.Forsythislower(c: int): int 4637da2899SCharles.Forsyth{ 4737da2899SCharles.Forsyth return c >= 'a' && c <= 'z'; 4837da2899SCharles.Forsyth} 4937da2899SCharles.Forsyth 5037da2899SCharles.Forsythisprint(c: int): int 5137da2899SCharles.Forsyth{ 5237da2899SCharles.Forsyth return c >= ' ' && c <= '~'; 5337da2899SCharles.Forsyth} 5437da2899SCharles.Forsyth 5537da2899SCharles.Forsythispunct(c: int): int 5637da2899SCharles.Forsyth{ 5737da2899SCharles.Forsyth return isascii(c) && !iscntrl(c) && !isspace(c) && !isalnum(c); 5837da2899SCharles.Forsyth} 5937da2899SCharles.Forsyth 6037da2899SCharles.Forsythisspace(c: int): int 6137da2899SCharles.Forsyth{ 6237da2899SCharles.Forsyth return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f' || c == '\v'; 6337da2899SCharles.Forsyth} 6437da2899SCharles.Forsyth 6537da2899SCharles.Forsythisupper(c: int): int 6637da2899SCharles.Forsyth{ 6737da2899SCharles.Forsyth return c >= 'A' && c <= 'Z'; 6837da2899SCharles.Forsyth} 6937da2899SCharles.Forsyth 7037da2899SCharles.Forsythisxdigit(c: int): int 7137da2899SCharles.Forsyth{ 7237da2899SCharles.Forsyth return isdigit(c) || islx(c) || isux(c); 7337da2899SCharles.Forsyth} 7437da2899SCharles.Forsyth 7537da2899SCharles.Forsythtolower(c: int): int 7637da2899SCharles.Forsyth{ 7737da2899SCharles.Forsyth if(isupper(c)) 7837da2899SCharles.Forsyth return c+'a'-'A'; 7937da2899SCharles.Forsyth return c; 8037da2899SCharles.Forsyth} 8137da2899SCharles.Forsyth 8237da2899SCharles.Forsythtoupper(c: int): int 8337da2899SCharles.Forsyth{ 8437da2899SCharles.Forsyth if(islower(c)) 8537da2899SCharles.Forsyth return c+'A'-'a'; 8637da2899SCharles.Forsyth return c; 8737da2899SCharles.Forsyth} 8837da2899SCharles.Forsyth 8937da2899SCharles.Forsythtoascii(c: int): int 9037da2899SCharles.Forsyth{ 9137da2899SCharles.Forsyth return c&16r7f; 9237da2899SCharles.Forsyth} 9337da2899SCharles.Forsyth 9437da2899SCharles.Forsythstrlen(s: array of byte): int 9537da2899SCharles.Forsyth{ 9637da2899SCharles.Forsyth l := len s; 9737da2899SCharles.Forsyth for(i := 0; i < l; i++) 9837da2899SCharles.Forsyth if(s[i] == byte 0) 9937da2899SCharles.Forsyth break; 10037da2899SCharles.Forsyth return i; 10137da2899SCharles.Forsyth} 10237da2899SCharles.Forsyth 10337da2899SCharles.Forsythstrcpy(s1: array of byte, s2: array of byte): array of byte 10437da2899SCharles.Forsyth{ 10537da2899SCharles.Forsyth l := strlen(s2)+1; 10637da2899SCharles.Forsyth if(l == len s2) 10737da2899SCharles.Forsyth s1[0: ] = s2; 10837da2899SCharles.Forsyth else 10937da2899SCharles.Forsyth s1[0: ] = s2[0: l]; 11037da2899SCharles.Forsyth return s1; 11137da2899SCharles.Forsyth} 11237da2899SCharles.Forsyth 11337da2899SCharles.Forsythstrncpy(s1: array of byte, s2: array of byte, n: int): array of byte 11437da2899SCharles.Forsyth{ 11537da2899SCharles.Forsyth l := strlen(s2); 11637da2899SCharles.Forsyth if(l >= n) 11737da2899SCharles.Forsyth s1[0: ] = s2[0: n]; 11837da2899SCharles.Forsyth else{ 11937da2899SCharles.Forsyth s1[0: ] = s2; 12037da2899SCharles.Forsyth for(i := l; i < n; i++) 12137da2899SCharles.Forsyth s1[i] = byte '\0'; 12237da2899SCharles.Forsyth } 12337da2899SCharles.Forsyth return s1; 12437da2899SCharles.Forsyth} 12537da2899SCharles.Forsyth 12637da2899SCharles.Forsythstrcat(s1: array of byte, s2: array of byte): array of byte 12737da2899SCharles.Forsyth{ 12837da2899SCharles.Forsyth l := strlen(s2)+1; 12937da2899SCharles.Forsyth m := strlen(s1); 13037da2899SCharles.Forsyth if(l == len s2) 13137da2899SCharles.Forsyth s1[m: ] = s2; 13237da2899SCharles.Forsyth else 13337da2899SCharles.Forsyth s1[m: ] = s2[0: l]; 13437da2899SCharles.Forsyth return s1; 13537da2899SCharles.Forsyth} 13637da2899SCharles.Forsyth 13737da2899SCharles.Forsythstrncat(s1: array of byte, s2: array of byte, n: int): array of byte 13837da2899SCharles.Forsyth{ 13937da2899SCharles.Forsyth l := strlen(s2); 14037da2899SCharles.Forsyth if(l >= n){ 14137da2899SCharles.Forsyth m := strlen(s1); 14237da2899SCharles.Forsyth s1[m: ] = s2[0: n]; 14337da2899SCharles.Forsyth s1[m+n] = byte '\0'; 14437da2899SCharles.Forsyth } 14537da2899SCharles.Forsyth else 14637da2899SCharles.Forsyth strcat(s1, s2); 14737da2899SCharles.Forsyth return s1; 14837da2899SCharles.Forsyth} 14937da2899SCharles.Forsyth 15037da2899SCharles.Forsythstrdup(s: array of byte): array of byte 15137da2899SCharles.Forsyth{ 15237da2899SCharles.Forsyth l := strlen(s)+1; 15337da2899SCharles.Forsyth t := array[l] of byte; 15437da2899SCharles.Forsyth if(l == len s) 15537da2899SCharles.Forsyth t[0: ] = s; 15637da2899SCharles.Forsyth else 15737da2899SCharles.Forsyth t[0: ] = s[0: l]; 15837da2899SCharles.Forsyth return t; 15937da2899SCharles.Forsyth} 16037da2899SCharles.Forsyth 16137da2899SCharles.Forsythstrcmp(s1: array of byte, s2: array of byte): int 16237da2899SCharles.Forsyth{ 16337da2899SCharles.Forsyth l1 := strlen(s1); 16437da2899SCharles.Forsyth l2 := strlen(s2); 16537da2899SCharles.Forsyth for(i := 0; i < l1 && i < l2; i++) 16637da2899SCharles.Forsyth if(s1[i] != s2[i]) 16737da2899SCharles.Forsyth return int s1[i]-int s2[i]; 16837da2899SCharles.Forsyth return l1-l2; 16937da2899SCharles.Forsyth} 17037da2899SCharles.Forsyth 17137da2899SCharles.Forsythstrncmp(s1: array of byte, s2: array of byte, n: int): int 17237da2899SCharles.Forsyth{ 173*2249108aSCharles.Forsyth i1 := i2 := 0; 174*2249108aSCharles.Forsyth while(n > 0){ 175*2249108aSCharles.Forsyth c1 := int s1[i1++]; 176*2249108aSCharles.Forsyth c2 := int s2[i2++]; 177*2249108aSCharles.Forsyth n--; 178*2249108aSCharles.Forsyth if(c1 != c2){ 179*2249108aSCharles.Forsyth if(c1 > c2) 180*2249108aSCharles.Forsyth return 1; 181*2249108aSCharles.Forsyth return -1; 182*2249108aSCharles.Forsyth } 183*2249108aSCharles.Forsyth if(c1 == 0) 184*2249108aSCharles.Forsyth break; 185*2249108aSCharles.Forsyth } 186*2249108aSCharles.Forsyth return 0; 18737da2899SCharles.Forsyth} 18837da2899SCharles.Forsyth 18937da2899SCharles.Forsythstrchr(s: array of byte, n: int): array of byte 19037da2899SCharles.Forsyth{ 19137da2899SCharles.Forsyth l := strlen(s); 19237da2899SCharles.Forsyth for(i := 0; i < l; i++) 19337da2899SCharles.Forsyth if(s[i] == byte n) 19437da2899SCharles.Forsyth return s[i: ]; 19537da2899SCharles.Forsyth return nil; 19637da2899SCharles.Forsyth} 19737da2899SCharles.Forsyth 19837da2899SCharles.Forsythstrrchr(s: array of byte, n: int): array of byte 19937da2899SCharles.Forsyth{ 20037da2899SCharles.Forsyth l := strlen(s); 20137da2899SCharles.Forsyth for(i := l-1; i >= 0; i--) 20237da2899SCharles.Forsyth if(s[i] == byte n) 20337da2899SCharles.Forsyth return s[i: ]; 20437da2899SCharles.Forsyth return nil; 20537da2899SCharles.Forsyth} 20637da2899SCharles.Forsyth 20737da2899SCharles.Forsythls2aab(argl: list of string): array of array of byte 20837da2899SCharles.Forsyth{ 20937da2899SCharles.Forsyth l := len argl; 21037da2899SCharles.Forsyth ls := argl; 21137da2899SCharles.Forsyth a := array[l+1] of array of byte; 21237da2899SCharles.Forsyth for(i := 0; i < l; i++){ 21337da2899SCharles.Forsyth a[i] = array of byte (hd ls + "\0"); 21437da2899SCharles.Forsyth ls = tl ls; 21537da2899SCharles.Forsyth } 21637da2899SCharles.Forsyth a[l] = nil; 21737da2899SCharles.Forsyth return a; 21837da2899SCharles.Forsyth} 21937da2899SCharles.Forsyth 22037da2899SCharles.Forsyths2ab(s: string): array of byte 22137da2899SCharles.Forsyth{ 22237da2899SCharles.Forsyth return array of byte (s + "\0"); 22337da2899SCharles.Forsyth} 22437da2899SCharles.Forsyth 22537da2899SCharles.Forsythab2s(a: array of byte): string 22637da2899SCharles.Forsyth{ 22737da2899SCharles.Forsyth return string a[0: strlen(a)]; 22837da2899SCharles.Forsyth} 22937da2899SCharles.Forsyth 23037da2899SCharles.Forsythabs(n: int): int 23137da2899SCharles.Forsyth{ 23237da2899SCharles.Forsyth if(n < 0) 23337da2899SCharles.Forsyth return -n; 23437da2899SCharles.Forsyth return n; 23537da2899SCharles.Forsyth} 23637da2899SCharles.Forsyth 23737da2899SCharles.Forsythmin(m: int, n: int): int 23837da2899SCharles.Forsyth{ 23937da2899SCharles.Forsyth if(m < n) 24037da2899SCharles.Forsyth return m; 24137da2899SCharles.Forsyth return n; 24237da2899SCharles.Forsyth} 24337da2899SCharles.Forsyth 24437da2899SCharles.Forsythmax(m: int, n: int): int 24537da2899SCharles.Forsyth{ 24637da2899SCharles.Forsyth if(m > n) 24737da2899SCharles.Forsyth return m; 24837da2899SCharles.Forsyth return n; 24937da2899SCharles.Forsyth} 250