Mercurial > repo
annotate fueue.c @ 1987:d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
author | HackBot |
---|---|
date | Sat, 02 Feb 2013 22:32:53 +0000 |
parents | |
children | 511c13628966 |
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 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
281 char s[1000] = "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
|
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 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
296 strncpy(s, argv[1], 1000); |
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: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
300 strncpy(s, argv[2], 1000); |
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; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
370 case ' ': // whitespace |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
371 (*k)++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
372 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
373 case '[': |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
374 (*k)++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
375 pushblock(strtoqueue(s, k), &q); |
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 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
378 default: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
379 printf("FUEUE: UNKNOWN %c OP\n", s[*k]); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
380 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
381 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
382 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
383 if (intmode) |
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 pushnum(n, &q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
386 } |
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 if (s[*k] == '\0') |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
389 *k = -1; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
390 return q; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
391 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
392 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
393 void print_queue(const Queue *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 struct Token *ptmp = q->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
396 while (ptmp != NULL) |
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 if (ptmp->what == NUM) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
399 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
400 printf(" %d", ptmp->val.num); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
401 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
402 else if (ptmp->what == FUN) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
403 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
404 printf("%c", ptmp->val.fun); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
405 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
406 else if (ptmp->what == BLOCK) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
407 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
408 printf("["); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
409 print_queue(&(ptmp->val.block)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
410 printf("]"); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
411 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
412 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
413 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
414 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
|
415 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
416 ptmp = ptmp->next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
417 } |
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 |
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 int is_empty(const Queue *q) // bool |
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 if (q->top == NULL) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
426 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
427 if (q->bottom == NULL && q->size == 0) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
428 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
429 return TRUE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
430 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
431 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
432 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
433 error_empty("is_empty"); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
434 } |
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 return FALSE; |
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 void initQueue(Queue *q) |
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 q->size = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
442 q->top = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
443 q->bottom = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
444 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
445 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
446 void push(struct Token *x, Queue *q) |
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 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
449 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
450 q->top = x; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
451 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
452 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
453 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
454 q->bottom->next = x; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
455 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
456 q->bottom = x; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
457 q->size++; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
458 x->next = NULL; // just in case |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
459 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
460 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
461 Queue copyQueue(const Queue *q) |
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 Queue c; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
464 struct Token* ptmp = q->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
465 initQueue(&c); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
466 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
467 while (ptmp != NULL) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
468 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
469 push(copyToken(ptmp), &c); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
470 ptmp = ptmp->next; |
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 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
473 return c; |
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 void initToken(struct Token *x) |
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 x->what = NUM; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
479 x->val.num = 0; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
480 x->val.fun = '\0'; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
481 initQueue(&(x->val.block)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
482 x->next = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
483 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
484 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
485 struct Token* copyToken(const struct Token *x) |
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 struct Token *c = malloc(sizeof(struct Token)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
488 c->what = x->what; |
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 switch (x->what) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
491 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
492 case NUM: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
493 case FUN: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
494 c->val = x->val; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
495 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
496 case BLOCK: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
497 c->val.block = copyQueue(&(x->val.block)); |
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 default: |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
500 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
|
501 break; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
502 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
503 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
504 c->next = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
505 return c; |
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 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
508 void pushnum(int num, Queue* q) |
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 struct Token *t = malloc(sizeof(struct Token)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
511 initToken(t); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
512 t->what = NUM; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
513 t->val.num = num; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
514 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
515 push(t, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
516 } |
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 void pushfun(char f, Queue* 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 struct Token *t = malloc(sizeof(struct Token)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
521 initToken(t); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
522 t->what = FUN; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
523 t->val.fun = f; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
524 push(t, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
525 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
526 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
527 void pushblock(Queue newq, Queue* 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 struct Token *t = malloc(sizeof(struct Token)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
530 initToken(t); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
531 t->what = BLOCK; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
532 t->val.block = newq; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
533 push(t, q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
534 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
535 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
536 void deletetop(Queue* q) // suppose q not empty |
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 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
539 error_empty("deletetop"); |
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 struct Token *todelete = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
542 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
543 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
|
544 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
545 deleteQueue(&(q->top->val.block)); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
546 } |
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 if (q->top->next == NULL) |
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 free(q->top); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
551 q->top = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
552 q->bottom = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
553 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
554 else |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
555 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
556 todelete = q->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
557 q->top = q->top->next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
558 free(todelete); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
559 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
560 q->size--; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
561 } |
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 void deleteQueue(Queue *q) |
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 while (!is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
566 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
567 deletetop(q); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
568 } |
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 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
571 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
|
572 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
573 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
574 error_empty("sendback"); |
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 q->bottom->next = q->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
577 q->top = q->top->next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
578 q->bottom = q->bottom->next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
579 q->bottom->next = NULL; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
580 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
581 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
582 struct Token* pop(Queue* q) // suppose q not empty |
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 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
585 error_empty("sendback"); |
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 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
|
588 q->top = q->top->next; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
589 q->size--; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
590 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
591 return t; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
592 } |
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 void append(Queue *q, const Queue *r) |
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 if (is_empty(q)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
597 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
598 q->top = r->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
599 q->bottom = r->bottom; |
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 else if (!is_empty(r)) |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
602 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
603 q->bottom->next = r->top; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
604 q->bottom = r->bottom; |
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->size += r->size; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
607 } |
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 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
|
610 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
611 int itsok = TRUE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
612 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
|
613 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
614 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
|
615 itsok = FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
616 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
|
617 itsok = FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
618 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
|
619 { |
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 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
622 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
|
623 { |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
624 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
|
625 itsok = FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
626 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
|
627 itsok = FALSE; |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
628 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
629 } |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
630 else |
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 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
|
633 itsok = FALSE; |
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 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
636 // printf("matchwhat: %s\n", (itsok?"TRUE":"FALSE")); |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
637 return itsok; |
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 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
640 void error_empty(const char s[]) |
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 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
|
643 exit(EXIT_FAILURE); |
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 |
d92f741c7f8f
<oerjan> fetch http://zzo38computer.org/esoteric/Arc_Koen/fueue.c
HackBot
parents:
diff
changeset
|
646 |
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 |