137da2899SCharles.Forsythimplement Libc; 237da2899SCharles.Forsyth 337da2899SCharles.Forsythinclude "libc.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.Forsythstrchr(s: string, n: int): int 9537da2899SCharles.Forsyth{ 9637da2899SCharles.Forsyth l := len s; 9737da2899SCharles.Forsyth for(i := 0; i < l; i++) 9837da2899SCharles.Forsyth if(s[i] == n) 9937da2899SCharles.Forsyth return i; 10037da2899SCharles.Forsyth return -1; 10137da2899SCharles.Forsyth} 10237da2899SCharles.Forsyth 10337da2899SCharles.Forsythstrrchr(s: string, n: int): int 10437da2899SCharles.Forsyth{ 10537da2899SCharles.Forsyth l := len s; 10637da2899SCharles.Forsyth for(i := l-1; i >= 0; i--) 10737da2899SCharles.Forsyth if(s[i] == n) 10837da2899SCharles.Forsyth return i; 10937da2899SCharles.Forsyth return -1; 11037da2899SCharles.Forsyth} 11137da2899SCharles.Forsyth 11237da2899SCharles.Forsythstrncmp(s1: string, s2: string, n: int): int 11337da2899SCharles.Forsyth{ 11437da2899SCharles.Forsyth l1 := len s1; 11537da2899SCharles.Forsyth l2 := len s2; 116*2249108aSCharles.Forsyth m := n; 117*2249108aSCharles.Forsyth if(m > l1) 118*2249108aSCharles.Forsyth m = l1; 119*2249108aSCharles.Forsyth if(m > l2) 120*2249108aSCharles.Forsyth m = l2; 121*2249108aSCharles.Forsyth for(i := 0; i < m; i++) 12237da2899SCharles.Forsyth if(s1[i] != s2[i]) 123*2249108aSCharles.Forsyth return s1[i]-s2[i]; 124*2249108aSCharles.Forsyth if(i == n) 125*2249108aSCharles.Forsyth return 0; 12637da2899SCharles.Forsyth return l1-l2; 12737da2899SCharles.Forsyth} 12837da2899SCharles.Forsyth 12937da2899SCharles.Forsythabs(n: int): int 13037da2899SCharles.Forsyth{ 13137da2899SCharles.Forsyth if(n < 0) 13237da2899SCharles.Forsyth return -n; 13337da2899SCharles.Forsyth return n; 13437da2899SCharles.Forsyth} 13537da2899SCharles.Forsyth 13637da2899SCharles.Forsythmin(m: int, n: int): int 13737da2899SCharles.Forsyth{ 13837da2899SCharles.Forsyth if(m < n) 13937da2899SCharles.Forsyth return m; 14037da2899SCharles.Forsyth return n; 14137da2899SCharles.Forsyth} 14237da2899SCharles.Forsyth 14337da2899SCharles.Forsythmax(m: int, n: int): int 14437da2899SCharles.Forsyth{ 14537da2899SCharles.Forsyth if(m > n) 14637da2899SCharles.Forsyth return m; 14737da2899SCharles.Forsyth return n; 14837da2899SCharles.Forsyth} 149