MushOS  0.1
A UNIX-like OS prototype, written from scratch
Loading...
Searching...
No Matches
string.c
1#include "string.h"
2
3#include "heap.h"
4
5
6int len(string str) {
7 int string_iterator = 0;
8 while (str[string_iterator] != 0) string_iterator++;
9 return string_iterator;
10}
11
12
13
14int first_pos(string str, char ch) {
15 int string_iterator = 0;
16 while (str[string_iterator] != 0) {
17 if (str[string_iterator] == ch) return string_iterator;
18 string_iterator++;
19 }
20 return -1;
21}
22
23int last_pos(string str, char ch) {
24 int string_iterator = len(str);
25 while (string_iterator != 0) {
26 if (str[string_iterator] == ch) return string_iterator;
27 string_iterator--;
28 }
29 return -1;
30}
31
32
33
34boolean equals(string str1, string str2) {
35 int string_iterator = 0;
36 while ((str1[string_iterator] != 0) && (str2[string_iterator] != 0)) {
37 if (str1[string_iterator] == str2[string_iterator]) string_iterator++;
38 else return false;
39 }
40 if ((str1[string_iterator] == 0) && (str2[string_iterator] == 0)) return true;
41 else return false;
42}
43
44
45
46mod_string substring_beg(string str, int begin) {
47 return substring_mid(str, begin, len(str));
48}
49
50mod_string substring_mid(string str, int begin, int end) {
51 mod_string result = ralloc(end - begin + 1);
52 for (int i = begin; i < end; ++i) result[i - begin] = str[i];
53 result[end - begin] = 0;
54 return result;
55}
56
57mod_string substring_end(string str, int end) {
58 return substring_mid(str, 0, end);
59}
60
61
62
63void move_string_by(mod_string str, int step) {
64 int i = step - 1;
65 do {
66 i++;
67 str[i - step] = str[i];
68 } while (str[i] != 0);
69 str[i - step + 1] = 0;
70}
71
72mod_string concatenate(string str1, string str2) {
73 int str1_length = len(str1), str2_length = len(str2);
74 mod_string result = ralloc(str1_length + str2_length + 1);
75 for (int i = 0; i < str1_length; ++i) result[i] = str1[i];
76 for (int i = 0; i < str2_length; ++i) result[i + str1_length] = str2[i];
77 result[str1_length + str2_length] = 0;
78 return result;
79}
This is a standard MushLib heap header. See standard implementation in lib/base/heap....
void * ralloc(u_dword size)