Mercurial > repo
annotate fueue.c @ 2012:c4f83ae4e77e
<olsner> addquote <fungot> but when she saw him fnord and fnord. and then there\'s the fnord, as well as fnord reading sauce with fish, or fnord, that alice quite fnord for it hadn\'t spoken before.
author | HackBot |
---|---|
date | Tue, 05 Feb 2013 23:27:58 +0000 |
parents | 8fae55e99268 |
children |
rev | line source |
---|---|
1987
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
1 #include <stdio.h> |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
2 #include <stdlib.h> |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
3 #include <string.h> |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
4 #define TRUE 1 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
5 #define FALSE 0 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
6 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
7 /* |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
8 * Fueue Interpreter in language C |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
9 * the esoteric programming language Fueue was designed in 2012 by Taneb. |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
10 * |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
11 * The following program was written by Stephan Kunne on august 29 2012. |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
12 * It is public domain; you are free to use it, copy it, distribute it, |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
13 * or do whatever you'd like with it. |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
14 * Credit and feedback are always appreciated ; you can email me at |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
15 * firstname dot name at gmail dot com with all your questions or remarks. |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
16 * |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
17 * Examples: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
18 * |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
19 * ./fueuec '72 101 108 108 111 44 32 119 111 114 108 100 33 10 H' |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
20 * Hello, world! |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
21 * |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
22 * ./fueuec --print '):[):]' |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
23 * ):[):] |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
24 * :[):]) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
25 * )[):][):] |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
26 * [):]): |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
27 * ):[):] |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
28 * (...and so on) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
29 */ |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
30 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
31 enum Typet |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
32 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
33 NUM, FUN, BLOCK |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
34 }; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
35 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
36 typedef struct Queue Queue; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
37 struct Queue |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
38 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
39 int size; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
40 struct Token *top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
41 struct Token *bottom; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
42 }; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
43 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
44 union value |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
45 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
46 int num; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
47 char fun; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
48 Queue block; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
49 }; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
50 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
51 struct Token |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
52 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
53 enum Typet what; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
54 union value val; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
55 struct Token *next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
56 }; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
57 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
58 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
59 int is_empty(const Queue *q); // bool |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
60 void initQueue(Queue *q); // make it an empty queue |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
61 void push(struct Token *x, Queue *q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
62 struct Token* copyToken(const struct Token *x); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
63 Queue copyQueue(const Queue *q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
64 void initToken(struct Token *x); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
65 void pushnum(int num, Queue* q); // create NUM token and pushes it |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
66 void pushfun(char f, Queue* q); // create FUN token and pushes it |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
67 void pushblock(Queue newq, Queue* q); // create BLOCK token and pushes it |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
68 void deletetop(Queue* q); // suppose q not empty |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
69 void deleteQueue(Queue *q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
70 void sendback(Queue* q); // suppose q not empty, pop then push |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
71 struct Token* pop(Queue* q); // suppose q not empty |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
72 void append(Queue *q, const Queue *r); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
73 int matchwhat(const Queue* q, const char s[]); // bool peek at first 2 "nn" "n" "." ".." "n." "b." "b" |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
74 void processFueue(Queue* q, int printmode); // the recursive function that does everything |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
75 Queue strtoqueue(const char s[], int *k); // transforms a string program into a queue program |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
76 void print_queue(const Queue *q); // prints a queue program |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
77 void error_empty(const char s[]); // raised by functions that "suppose q not empty" when q is empty |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
78 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
79 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
80 void processFueue(Queue* q, int printmode) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
81 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
82 int time = 0; // catching input |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
83 int i = 0; // to be used for input |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
84 int a = 0, b = 0; // to be used for some FUN |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
85 struct Token* p = NULL; // even more FUN |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
86 Queue newq; // having FUN with BLOCKs (specifically '(') |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
87 initQueue(&newq); // this is done at every iteration where newq is used, though |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
88 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
89 while (TRUE) // stops thanks to a return; when 'H' is met |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
90 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
91 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
92 if (printmode) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
93 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
94 print_queue(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
95 printf("\n"); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
96 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
97 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
98 if (time == q->size) // if time == q->size then input char and push ascii/unicode value |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
99 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
100 fflush(stdout); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
101 i = getchar(); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
102 pushnum(i, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
103 time = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
104 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
105 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
106 if (q->top->what == NUM) // q not empty because of the time != q->size requirement |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
107 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
108 // print char with ascii/unicode value q->top->val.num |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
109 printf("%c", (char) q->top->val.num); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
110 fflush(stdout); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
111 deletetop(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
112 time = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
113 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
114 else if (q->top->what == FUN) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
115 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
116 char op = q->top->val.fun; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
117 deletetop(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
118 switch (op) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
119 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
120 case '+': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
121 case '*': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
122 case '/': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
123 if (matchwhat(q, "nn")) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
124 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
125 a = q->top->val.num; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
126 deletetop(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
127 b = q->top->val.num; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
128 deletetop(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
129 if (op == '+') |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
130 { pushnum(a+b, q); } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
131 else if (op == '*') |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
132 { pushnum(a*b, q); } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
133 else // op == '/' |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
134 { pushnum(a/b, q); } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
135 time = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
136 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
137 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
138 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
139 pushfun(op, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
140 time++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
141 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
142 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
143 case '-': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
144 case '%': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
145 if (matchwhat(q, "n")) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
146 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
147 a = q->top->val.num; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
148 deletetop(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
149 pushnum( ((op == '-')?(-a):(!a)) , q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
150 time = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
151 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
152 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
153 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
154 pushfun(op, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
155 time++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
156 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
157 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
158 case ':': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
159 if (!is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
160 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
161 push(copyToken(q->top), q); // push copy |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
162 sendback(q); // push original |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
163 time = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
164 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
165 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
166 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
167 pushfun(op, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
168 time++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
169 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
170 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
171 case '~': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
172 if (matchwhat(q, "..")) // if q has at least two items |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
173 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
174 p = pop(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
175 sendback(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
176 push(p, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
177 time = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
178 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
179 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
180 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
181 pushfun(op, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
182 time++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
183 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
184 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
185 case '!': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
186 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
187 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
188 pushfun(op, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
189 time++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
190 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
191 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
192 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
193 deletetop(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
194 time = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
195 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
196 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
197 case '$': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
198 if (matchwhat(q, "n.")) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
199 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
200 a = q->top->val.num; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
201 deletetop(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
202 for (; a > 0; a--) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
203 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
204 push(copyToken(q->top), q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
205 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
206 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
207 deletetop(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
208 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
209 time = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
210 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
211 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
212 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
213 pushfun(op, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
214 time++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
215 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
216 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
217 case '(': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
218 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
219 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
220 pushfun(op, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
221 time++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
222 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
223 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
224 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
225 initQueue(&newq); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
226 push(pop(q), &newq); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
227 pushblock(newq, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
228 time = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
229 // newq is the queue inside the block |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
230 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
231 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
232 case '<': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
233 if (matchwhat(q, "b.")) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
234 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
235 sendback(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
236 push(pop(q), &(q->bottom->val.block)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
237 time = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
238 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
239 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
240 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
241 pushfun(op, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
242 time++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
243 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
244 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
245 case ')': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
246 if (matchwhat(q, "b")) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
247 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
248 append(q, &(q->top->val.block)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
249 initQueue(&(q->top->val.block)); // mandatory since |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
250 deletetop(q); // deletetop does destroy the block it contains |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
251 time = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
252 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
253 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
254 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
255 pushfun(op, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
256 time++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
257 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
258 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
259 case 'H': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
260 // don't forget to delete the remaining of the queue here, will you? |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
261 return; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
262 default: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
263 // raise an error |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
264 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
265 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
266 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
267 else // if q->top->what == BLOCK |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
268 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
269 sendback(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
270 time++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
271 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
272 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
273 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
274 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
275 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
276 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
277 int main(int argc, char *argv[]) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
278 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
279 Queue q; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
280 initQueue(&q); // q is empty now |
1992
8fae55e99268
<oerjan> sed -i s/1000/10000/ fueue.c #Whistles innocently
HackBot
parents:
1991
diff
changeset
|
281 char s[10000] = "72 101 108 108 111 44 32 119 111 114 108 100 33 10 H"; |
1987
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
282 int printmode = FALSE; // a debug mode that will print the fueue program at each step |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
283 int k = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
284 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
285 switch (argc) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
286 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
287 case 1: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
288 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
289 case 2: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
290 if (strcmp(argv[1], "--print") == 0) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
291 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
292 printmode = TRUE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
293 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
294 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
295 { |
1992
8fae55e99268
<oerjan> sed -i s/1000/10000/ fueue.c #Whistles innocently
HackBot
parents:
1991
diff
changeset
|
296 strncpy(s, argv[1], 10000); |
1987
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
297 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
298 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
299 case 3: |
1992
8fae55e99268
<oerjan> sed -i s/1000/10000/ fueue.c #Whistles innocently
HackBot
parents:
1991
diff
changeset
|
300 strncpy(s, argv[2], 10000); |
1987
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
301 printmode = (strcmp(argv[1], "--print") == 0); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
302 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
303 default: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
304 fprintf(stderr, "Error: %s received too many arguments. The Hello world program\n", argv[0]); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
305 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
306 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
307 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
308 q = strtoqueue(s, &k); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
309 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
310 processFueue(&q, printmode); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
311 return 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
312 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
313 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
314 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
315 Queue strtoqueue(const char s[], int *k) // takes a fueue program as a string, and gives a queue |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
316 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
317 // *k is loop counter |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
318 Queue q; // the queue to be returned |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
319 initQueue(&q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
320 int n = 0; // decimals (usually n * 10 + 0-9) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
321 int intmode = FALSE; // bool "we're reading a number right now" |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
322 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
323 if (*k == -1) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
324 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
325 printf("FUEUE: UNMATCHED OPENING SQUARE BRACKET PROBABLY FORGOT A CLOSING SQUARE BRACKET\n"); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
326 return q; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
327 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
328 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
329 while (s[*k] != '\0' && s[*k] != ']') |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
330 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
331 if (intmode && (s[*k] > '9' || s[*k] < '0')) // if intmode ends |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
332 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
333 pushnum(n, &q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
334 n = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
335 intmode = FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
336 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
337 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
338 switch (s[*k]) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
339 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
340 case '+': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
341 case '-': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
342 case '*': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
343 case '/': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
344 case '%': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
345 case ':': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
346 case '~': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
347 case '!': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
348 case '$': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
349 case '(': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
350 case '<': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
351 case ')': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
352 case 'H': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
353 pushfun(s[*k], &q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
354 (*k)++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
355 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
356 case '0': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
357 case '1': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
358 case '2': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
359 case '3': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
360 case '4': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
361 case '5': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
362 case '6': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
363 case '7': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
364 case '8': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
365 case '9': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
366 n = n * 10 + (int) (s[*k] - '0'); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
367 intmode = TRUE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
368 (*k)++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
369 break; |
1991 | 370 case '\n': |
371 case '\t': | |
1987
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
372 case ' ': // whitespace |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
373 (*k)++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
374 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
375 case '[': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
376 (*k)++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
377 pushblock(strtoqueue(s, k), &q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
378 (*k)++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
379 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
380 default: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
381 printf("FUEUE: UNKNOWN %c OP\n", s[*k]); |
1991 | 382 (*k)++; |
1987
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
383 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
384 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
385 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
386 if (intmode) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
387 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
388 pushnum(n, &q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
389 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
390 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
391 if (s[*k] == '\0') |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
392 *k = -1; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
393 return q; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
394 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
395 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
396 void print_queue(const Queue *q) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
397 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
398 struct Token *ptmp = q->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
399 while (ptmp != NULL) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
400 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
401 if (ptmp->what == NUM) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
402 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
403 printf(" %d", ptmp->val.num); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
404 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
405 else if (ptmp->what == FUN) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
406 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
407 printf("%c", ptmp->val.fun); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
408 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
409 else if (ptmp->what == BLOCK) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
410 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
411 printf("["); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
412 print_queue(&(ptmp->val.block)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
413 printf("]"); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
414 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
415 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
416 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
417 printf("That's impossible...Neither num nor fun nor block...\n"); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
418 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
419 ptmp = ptmp->next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
420 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
421 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
422 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
423 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
424 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
425 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
426 int is_empty(const Queue *q) // bool |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
427 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
428 if (q->top == NULL) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
429 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
430 if (q->bottom == NULL && q->size == 0) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
431 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
432 return TRUE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
433 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
434 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
435 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
436 error_empty("is_empty"); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
437 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
438 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
439 return FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
440 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
441 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
442 void initQueue(Queue *q) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
443 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
444 q->size = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
445 q->top = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
446 q->bottom = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
447 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
448 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
449 void push(struct Token *x, Queue *q) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
450 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
451 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
452 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
453 q->top = x; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
454 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
455 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
456 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
457 q->bottom->next = x; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
458 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
459 q->bottom = x; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
460 q->size++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
461 x->next = NULL; // just in case |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
462 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
463 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
464 Queue copyQueue(const Queue *q) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
465 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
466 Queue c; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
467 struct Token* ptmp = q->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
468 initQueue(&c); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
469 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
470 while (ptmp != NULL) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
471 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
472 push(copyToken(ptmp), &c); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
473 ptmp = ptmp->next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
474 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
475 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
476 return c; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
477 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
478 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
479 void initToken(struct Token *x) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
480 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
481 x->what = NUM; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
482 x->val.num = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
483 x->val.fun = '\0'; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
484 initQueue(&(x->val.block)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
485 x->next = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
486 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
487 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
488 struct Token* copyToken(const struct Token *x) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
489 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
490 struct Token *c = malloc(sizeof(struct Token)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
491 c->what = x->what; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
492 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
493 switch (x->what) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
494 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
495 case NUM: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
496 case FUN: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
497 c->val = x->val; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
498 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
499 case BLOCK: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
500 c->val.block = copyQueue(&(x->val.block)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
501 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
502 default: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
503 fprintf(stderr, "Error: found a %d in my soup\n", x->what); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
504 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
505 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
506 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
507 c->next = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
508 return c; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
509 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
510 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
511 void pushnum(int num, Queue* q) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
512 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
513 struct Token *t = malloc(sizeof(struct Token)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
514 initToken(t); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
515 t->what = NUM; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
516 t->val.num = num; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
517 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
518 push(t, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
519 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
520 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
521 void pushfun(char f, Queue* q) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
522 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
523 struct Token *t = malloc(sizeof(struct Token)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
524 initToken(t); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
525 t->what = FUN; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
526 t->val.fun = f; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
527 push(t, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
528 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
529 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
530 void pushblock(Queue newq, Queue* q) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
531 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
532 struct Token *t = malloc(sizeof(struct Token)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
533 initToken(t); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
534 t->what = BLOCK; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
535 t->val.block = newq; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
536 push(t, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
537 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
538 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
539 void deletetop(Queue* q) // suppose q not empty |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
540 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
541 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
542 error_empty("deletetop"); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
543 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
544 struct Token *todelete = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
545 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
546 if (q->top->what == BLOCK) // has to free the Queue inside |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
547 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
548 deleteQueue(&(q->top->val.block)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
549 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
550 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
551 if (q->top->next == NULL) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
552 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
553 free(q->top); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
554 q->top = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
555 q->bottom = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
556 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
557 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
558 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
559 todelete = q->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
560 q->top = q->top->next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
561 free(todelete); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
562 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
563 q->size--; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
564 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
565 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
566 void deleteQueue(Queue *q) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
567 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
568 while (!is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
569 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
570 deletetop(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
571 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
572 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
573 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
574 void sendback(Queue* q) // suppose q not empty, pop then push |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
575 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
576 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
577 error_empty("sendback"); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
578 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
579 q->bottom->next = q->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
580 q->top = q->top->next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
581 q->bottom = q->bottom->next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
582 q->bottom->next = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
583 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
584 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
585 struct Token* pop(Queue* q) // suppose q not empty |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
586 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
587 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
588 error_empty("sendback"); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
589 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
590 struct Token* t = q->top; // note that t->next is equal to q->top->next now |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
591 q->top = q->top->next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
592 q->size--; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
593 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
594 return t; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
595 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
596 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
597 void append(Queue *q, const Queue *r) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
598 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
599 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
600 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
601 q->top = r->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
602 q->bottom = r->bottom; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
603 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
604 else if (!is_empty(r)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
605 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
606 q->bottom->next = r->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
607 q->bottom = r->bottom; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
608 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
609 q->size += r->size; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
610 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
611 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
612 int matchwhat(const Queue* q, const char s[]) // bool "nn" "n" "." ".." "n." "b." "b" |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
613 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
614 int itsok = TRUE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
615 if ((s[0] != '\0') && !(is_empty(q))) // if neither s nor q is empty |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
616 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
617 if (s[0] == 'n' && q->top->what != NUM) // if top should be num |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
618 itsok = FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
619 if (s[0] == 'b' && q->top->what != BLOCK) // if top should be block |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
620 itsok = FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
621 if (s[1] != '\0' && q->top->next == NULL) // if should have second element |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
622 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
623 itsok = FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
624 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
625 else // so it indeed has a second element, or it doesn't need to have one |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
626 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
627 if (s[1] == 'n' && q->top->next->what != NUM) // second should be num |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
628 itsok = FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
629 if (s[1] == 'b' && q->top->next->what != BLOCK) // second should be block |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
630 itsok = FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
631 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
632 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
633 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
634 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
635 if (s[0] != '\0') // if s is not empty but q is |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
636 itsok = FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
637 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
638 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
639 // printf("matchwhat: %s\n", (itsok?"TRUE":"FALSE")); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
640 return itsok; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
641 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
642 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
643 void error_empty(const char s[]) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
644 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
645 fprintf(stderr, "Error: queue was empty in %s\n", s); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
646 exit(EXIT_FAILURE); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
647 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
648 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
649 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
650 |