summaryrefslogtreecommitdiff
path: root/firmware/test/memory/test.y
diff options
context:
space:
mode:
authorAlan Korr <alkorr@rockbox.org>2002-04-15 23:19:10 +0000
committerAlan Korr <alkorr@rockbox.org>2002-04-15 23:19:10 +0000
commit27df7b0b96686771b9fafba33d0a97b4d77f6206 (patch)
tree638189ff3754910b98f4725167fe621c4c20436a /firmware/test/memory/test.y
parentf5747cf78a4506dca544fde5324fd020a988c73b (diff)
downloadrockbox-27df7b0b96686771b9fafba33d0a97b4d77f6206.tar.gz
rockbox-27df7b0b96686771b9fafba33d0a97b4d77f6206.zip
*** empty log message ***
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@98 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/test/memory/test.y')
-rw-r--r--firmware/test/memory/test.y182
1 files changed, 182 insertions, 0 deletions
diff --git a/firmware/test/memory/test.y b/firmware/test/memory/test.y
new file mode 100644
index 0000000000..1c368a1ebb
--- /dev/null
+++ b/firmware/test/memory/test.y
@@ -0,0 +1,182 @@
1%{
2#include <memory.h>
3#include <stdlib.h>
4#include <stdio.h>
5#include <string.h>
6void allocate (int);
7void release (int);
8void spy (int);
9void dump (void);
10void prompt (void);
11%}
12
13%token NUMBER
14%token ALLOCATE
15%token RELEASE
16%token DUMP
17%token SPY
18%token CHECK
19%token INIT
20%token QUIT
21
22%left '+' '-'
23%left '*' '/'
24%nonassoc UMINUS
25
26%%
27commands
28 : command ';'
29 { }
30 | commands command ';'
31 { }
32 | error ';'
33 { yyerrok; }
34 ;
35
36command
37 : allocate
38 | release
39 | spy
40 | check
41 | INIT
42 { memory_setup (); }
43 | DUMP
44 { dump (); }
45 | QUIT
46 { return 0; }
47 ;
48
49allocate
50 : ALLOCATE expression
51 { allocate (yylval); }
52 ;
53
54release
55 : RELEASE expression
56 { release (yylval); }
57 ;
58
59spy
60 : SPY expression
61 { spy (yylval); }
62 ;
63
64check
65 : CHECK expression
66 { memory_check (yylval); }
67 ;
68
69expression
70 : expression '+' expression
71 { $$ = $1 + $3; }
72 | expression '-' expression
73 { $$ = $1 - $3; }
74 | expression '*' expression
75 { $$ = $1 * $3; }
76 | expression '/' expression
77 {
78 if($3 == 0)
79 yyerror("divide by zero");
80 else
81 $$ = $1 / $3;
82 }
83 | '-' expression %prec UMINUS
84 {
85 $$ = -$2;
86 }
87 | '(' expression ')'
88 {
89 $$ = $2;
90 }
91 | NUMBER
92 {
93 $$ = $1;
94 }
95 ;
96
97%%
98
99#include <readline/readline.h>
100#include <readline/history.h>
101
102int yyerror(char *s)
103 {
104 fprintf(stderr,"\nBad command");
105 return 1;
106 }
107
108void prompt (void)
109 {
110 printf("\n>"); fflush (stdout);
111 }
112
113void allocate (int order)
114 {
115 extern char free_page[0];
116 void *address;
117 printf("\nallocating a page of %d bytes...",512<<order);
118 if ((unsigned)order > 21)
119 printf (" bad order !");
120 else if ((address = memory_allocate_page (order)))
121 printf (" page #%d allocated !",((char *)address - free_page) >> 9);
122 else
123 printf (" cannot allocate a page !");
124 }
125
126void release (int page)
127 {
128 extern char free_page[0];
129 void *address = (void *)(free_page + (page << 9));
130 printf("\nreleasing page #%d...",page);
131 if ((unsigned)page >= (2*1024*1024/512))
132 printf (" bad page number !");
133 else if (memory_release_page (address))
134 printf (" page #%d released !",page);
135 else
136 printf (" cannot release this page !");
137 }
138
139void spy (int page)
140 {
141 extern char free_page[0];
142 void *address = (void *)(free_page + (page << 9));
143 printf("\nspying page #%d...",page);
144 if ((unsigned)page >= (2*1024*1024/512))
145 printf (" bad page number !");
146 else
147 memory_spy_page (address);
148 }
149
150void dump (void)
151 {
152 int order;
153 printf("\ndumping free pages list...");
154 for (order = 0; order < 13; ++order)
155 memory_dump (order);
156 }
157
158int main ()
159 {
160 yyparse();
161 return 0;
162 }
163
164int read_input (char *buffer,int max)
165 {
166 char *line = 0;
167 while (1)
168 {
169 line = readline ("\n>");
170 if (!line)
171 break;
172 if (*line)
173 add_history(line);
174 strncpy (buffer,line,max);
175 strcat (buffer,";");
176 free (line);
177 return strlen (buffer);
178 }
179 buffer[0] = ';';
180 return 1;
181 }
182