annotate src/ploki/text.c @ 12274:3c04e9ef7a3a draft

<kspalaiologos> `` cp -rf /hackenv/tmp/asmbf-1.2.7/bin/* /hackenv/lib/kps/
author HackEso <hackeso@esolangs.org>
date Tue, 31 Dec 2019 17:47:30 +0000
parents ac0403686959
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4223
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
1 #include "text.h"
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
2 #include "xmalloc.h"
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
3
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
4 #include <stddef.h>
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
5
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
6 enum {MAGIC = 42};
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
7
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
8 void text_on(struct text *p) {
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
9 p->start = xmalloc(p->size = MAGIC, sizeof *p->start);
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
10 p->start[p->length = 0] = NULL;
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
11 }
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
12
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
13 void text_off(struct text *p) {
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
14 while (p->length) {
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
15 --p->length;
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
16 op_end(p->start[p->length]);
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
17 xfree(p->start[p->length]);
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
18 }
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
19 xfree(p->start);
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
20 }
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
21
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
22 void text_1(struct text *p) {
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
23 while (p->length >= p->size - 1) {
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
24 p->start = xrealloc(p->start, p->size *= 2);
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
25 }
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
26 }
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
27
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
28 struct op *text_push(struct text *p, const struct op *src) {
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
29 text_1(p);
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
30 p->start[p->length] = xmalloc(1, sizeof *p->start[p->length]);
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
31 *p->start[p->length++] = *src;
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
32 p->start[p->length] = NULL;
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
33 return p->start[p->length - 1];
ac0403686959 <oerjan> rm -rf src/ploki; mv ploki src
HackBot
parents:
diff changeset
34 }