123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "utils.h"
- int randint(int N) { return rand() / (RAND_MAX / N + 1); }
- int randrange(int M, int N) {
- return M + rand() / (RAND_MAX / (N - M + 1) + 1);
- }
- int random_activate(int w) {
- int r = randint(100);
- if (r <= (w * 10)) {
- return 1;
- };
- return 0;
- }
- char *repr(const char *data) {
- static char buffer[40960];
- char *cp;
- strcpy(buffer, data);
- cp = buffer;
- while (*cp != 0) {
- char c = *cp;
- if (c == ' ') {
- cp++;
- continue;
- };
-
- if (strchr("\f\n\r\t\v\?", c) != NULL) {
- memmove(cp + 1, cp, strlen(cp) + 1);
- *cp = '\\';
- cp++;
- switch (c) {
- case '\f':
- *cp = 'f';
- cp++;
- break;
- case '\n':
- *cp = 'n';
- cp++;
- break;
- case '\r':
- *cp = 'r';
- cp++;
- break;
- case '\t':
- *cp = 't';
- cp++;
- break;
- case '\v':
- *cp = 'v';
- cp++;
- break;
- default:
- *cp = '?';
- cp++;
- break;
- }
- continue;
- }
- if (c == '\\') {
- memmove(cp + 1, cp, strlen(cp) + 1);
- *cp = '\\';
- cp += 2;
- continue;
- }
- if (c == '"') {
- memmove(cp + 1, cp, strlen(cp) + 1);
- *cp = '\\';
- cp += 2;
- continue;
- }
- if (strchr("[()]{}:;,.<>?!@#$%^&*", c) != NULL) {
- cp++;
- continue;
- }
- if (strchr("0123456789", c) != NULL) {
- cp++;
- continue;
- }
- if (strchr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", c) !=
- NULL) {
- cp++;
- continue;
- }
-
- memmove(cp + 3, cp, strlen(cp) + 1);
- char buffer[10];
- int slen;
- slen = snprintf(buffer, sizeof(buffer), "\\x%02x", (int)c & 0xff);
-
- strncpy(cp, buffer, 4);
- cp += 4;
- continue;
- }
- return buffer;
- }
- const char *strnstr(const char *source, int len, const char *needle) {
- int pos;
- for (pos = 0; pos < len; pos++) {
- if (source[pos] == needle[0]) {
- if (strncmp(source + pos, needle, strlen(needle)) == 0) {
- return source + pos;
- }
- }
- }
- return NULL;
- }
- int rstrnstr(const char *buffer, int len, const char *find) {
- int flen = strlen(find);
- if (len < flen) {
-
- return -1;
- }
- int pos = len - flen;
- while (pos > 0) {
- if (buffer[pos] == find[0]) {
-
- if (strncmp(buffer + pos, find, flen) == 0) {
- return pos;
- }
- }
- pos--;
- }
- return -1;
- }
- int string_insert(char *buffer, int max_length, int pos, const char *insert) {
-
- if (pos >= max_length)
- return 0;
- if (buffer == NULL)
- return 0;
- if (insert == NULL)
- return 0;
- if (strlen(insert) == 0)
- return 0;
- if (pos > strlen(buffer))
- return 0;
- if (strlen(buffer) + strlen(insert) >= max_length) {
-
- return 0;
- }
- memmove(buffer + pos + strlen(insert), buffer + pos,
- strlen(buffer + pos) + 1);
-
- strncpy(buffer + pos, insert, strlen(insert));
-
- return 1;
- }
- void pcopy(char *pstring, char *str) {
- int len = (int)*pstring;
- strncpy(str, pstring + 1, len);
- str[len] = 0;
- }
|