OSDN Git Service

Add toppers-jsp/ in nxtOSEK_v205b0.zip. They are licensed under TOPPERS license.
[nxt-jsp/etrobo-atk.git] / nxtOSEK / toppers_jsp / cfg / jsp / jsp_staticapi.cpp
1 /*
2  *  TOPPERS/JSP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Just Standard Profile Kernel
5  * 
6  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7  *                              Toyohashi Univ. of Technology, JAPAN
8  * 
9  *  ¾åµ­Ãøºî¸¢¼Ô¤Ï¡¤°Ê²¼¤Î (1)¡Á(4) ¤Î¾ò·ï¤«¡¤Free Software Foundation 
10  *  ¤Ë¤è¤Ã¤Æ¸øɽ¤µ¤ì¤Æ¤¤¤ë GNU General Public License ¤Î Version 2 ¤Ëµ­
11  *  ½Ò¤µ¤ì¤Æ¤¤¤ë¾ò·ï¤òËþ¤¿¤¹¾ì¹ç¤Ë¸Â¤ê¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¡ÊËÜ¥½¥Õ¥È¥¦¥§¥¢
12  *  ¤ò²þÊѤ·¤¿¤â¤Î¤ò´Þ¤à¡¥°Ê²¼Æ±¤¸¡Ë¤ò»ÈÍÑ¡¦Ê£À½¡¦²þÊÑ¡¦ºÆÇÛÉۡʰʲ¼¡¤
13  *  ÍøÍѤȸƤ֡ˤ¹¤ë¤³¤È¤ò̵½þ¤ÇµöÂú¤¹¤ë¡¥
14  *  (1) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¥½¡¼¥¹¥³¡¼¥É¤Î·Á¤ÇÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¤¾åµ­¤ÎÃøºî
15  *      ¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ­¤Î̵Êݾڵ¬Ä꤬¡¤¤½¤Î¤Þ¤Þ¤Î·Á¤Ç¥½¡¼
16  *      ¥¹¥³¡¼¥ÉÃæ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¤³¤È¡¥
17  *  (2) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¡¤¥é¥¤¥Ö¥é¥ê·Á¼°¤Ê¤É¡¤Â¾¤Î¥½¥Õ¥È¥¦¥§¥¢³«È¯¤Ë»È
18  *      ÍѤǤ­¤ë·Á¤ÇºÆÇÛÉÛ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¤ºÆÇÛÉÛ¤Ëȼ¤¦¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
19  *      ¼Ô¥Þ¥Ë¥å¥¢¥ë¤Ê¤É¡Ë¤Ë¡¤¾åµ­¤ÎÃøºî¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ­
20  *      ¤Î̵Êݾڵ¬Äê¤ò·ÇºÜ¤¹¤ë¤³¤È¡¥
21  *  (3) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¡¤µ¡´ï¤ËÁȤ߹þ¤à¤Ê¤É¡¤Â¾¤Î¥½¥Õ¥È¥¦¥§¥¢³«È¯¤Ë»È
22  *      ÍѤǤ­¤Ê¤¤·Á¤ÇºÆÇÛÉÛ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¤¼¡¤Î¤¤¤º¤ì¤«¤Î¾ò·ï¤òËþ¤¿¤¹¤³
23  *      ¤È¡¥
24  *    (a) ºÆÇÛÉÛ¤Ëȼ¤¦¥É¥­¥å¥á¥ó¥È¡ÊÍøÍѼԥޥ˥奢¥ë¤Ê¤É¡Ë¤Ë¡¤¾åµ­¤ÎÃø
25  *        ºî¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ­¤Î̵Êݾڵ¬Äê¤ò·ÇºÜ¤¹¤ë¤³¤È¡¥
26  *    (b) ºÆÇÛÉۤηÁÂÖ¤ò¡¤Ê̤ËÄê¤á¤ëÊýË¡¤Ë¤è¤Ã¤Æ¡¤TOPPERS¥×¥í¥¸¥§¥¯¥È¤Ë
27  *        Êó¹ð¤¹¤ë¤³¤È¡¥
28  *  (4) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ÎÍøÍѤˤè¤êľÀÜŪ¤Þ¤¿¤Ï´ÖÀÜŪ¤ËÀ¸¤¸¤ë¤¤¤«¤Ê¤ë»
29  *      ³²¤«¤é¤â¡¤¾åµ­Ãøºî¸¢¼Ô¤ª¤è¤ÓTOPPERS¥×¥í¥¸¥§¥¯¥È¤òÌÈÀÕ¤¹¤ë¤³¤È¡¥
30  * 
31  *  ËÜ¥½¥Õ¥È¥¦¥§¥¢¤Ï¡¤ÌµÊݾڤÇÄ󶡤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤¢¤ë¡¥¾åµ­Ãøºî¸¢¼Ô¤ª
32  *  ¤è¤ÓTOPPERS¥×¥í¥¸¥§¥¯¥È¤Ï¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¤Ë´Ø¤·¤Æ¡¤¤½¤ÎŬÍѲÄǽÀ­¤â
33  *  ´Þ¤á¤Æ¡¤¤¤¤«¤Ê¤ëÊݾڤâ¹Ô¤ï¤Ê¤¤¡¥¤Þ¤¿¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ÎÍøÍѤˤè¤êľ
34  *  ÀÜŪ¤Þ¤¿¤Ï´ÖÀÜŪ¤ËÀ¸¤¸¤¿¤¤¤«¤Ê¤ë»³²¤Ë´Ø¤·¤Æ¤â¡¤¤½¤ÎÀÕǤ¤òÉé¤ï¤Ê¤¤¡¥
35  * 
36  *  @(#) $Id: jsp_staticapi.cpp,v 1.16 2003/12/24 07:33:26 takayuki Exp $
37  */
38
39 // $Header: /home/CVS/configurator/jsp/jsp_staticapi.cpp,v 1.16 2003/12/24 07:33:26 takayuki Exp $
40
41 #include "jsp/jsp_defs.h"
42
43 #include "base/parser.h"
44 #include "base/mpstrstream.h"
45 #include <iostream>
46
47 using namespace std;
48
49 DECLARE_API(INCLUDE,"INCLUDE")
50 {
51     Token token;
52     Directory * node;
53     Directory * scope;
54
55     last = NULL;
56     p.getToken(token, Token::STRINGLITERAL);
57     token.chopLiteral();
58
59     if( (token[0] != '\"' || token[token.size()-1] != '\"') &&
60         (token[0] != '<' || token[token.size()-1] != '>') )
61         ExceptionMessage("An include filename must be enclosed with \"...\" or <...>","¥Õ¥¡¥¤¥ë̾¤Ï \"...\" ¤« <...> ¤Î·Á¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó").throwException();
62
63     node = container.openChild(OBJECTTREE,INCLUDEFILE,NULL);
64     last = node;
65
66         //½ÅÊ£¥Á¥§¥Ã¥¯
67     scope = node->getFirstChild();
68     while(scope != 0)
69     {
70         if(token.compare((*scope).toString()) == 0)
71         {
72             cerr << p.getStreamLocation() << ' ' << (Message("Include file % was already specified (ignored).","¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë%¤¬Ê£¿ô²ó»ØÄꤵ¤ì¤Þ¤·¤¿ (̵»ë¤·¤Þ¤¹)") << token) << endl;
73             return;
74         }
75         scope = scope->getNext();
76     }
77     
78     node->addChild(new Directory(token));
79 }
80
81 DECLARE_API(CRE_TSK,"CRE_TSK")
82 {
83     Token token;
84     string work;
85     Directory * node;
86
87     p.getToken(token);
88     node = allocate(container[OBJECTTREE], token, TASK);
89     (*node)["position"] = p.getStreamLocation();
90
91     p.getToken(",","{",NULL);
92     parseParameters(p,node,"tskatr,exinf,task,itskpri,stksz");
93     p.getToken(",","NULL","}",NULL);
94
95     (*node)["texatr"] = "TA_NULL";
96     (*node)["texrtn"] = "NULL";
97
98     if(container["/cpu"].toString().compare("nios32") == 0) 
99     {
100         (*node)["hi_limit"] = "TSK_HI_LIMIT";
101         (*node)["lo_limit"] = "TSK_LO_LIMIT";
102     }
103 }
104
105 DECLARE_API(VATT_TRW,"VATT_TRW")
106 {
107     Token token;
108     Directory * node;
109
110     if(container["/cpu"].toString().compare("nios32") != 0)
111         ExceptionMessage("VATT_TRW is not supported except for the processor 'nios32'.","VATT_TRW¤Ïnios32¥×¥í¥»¥Ã¥µ¤Ç¤Î¤ß¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤¹").throwException();
112
113     p.getToken(token);
114     node = find(container[OBJECTTREE], token, TASK);
115
116     p.getToken(",","{",NULL);
117     parseParameters(p, node, "hi_limit,lo_limit");
118     p.getToken("}");
119 }
120
121 DECLARE_API(DEF_TEX,"DEF_TEX")
122 {
123     Token token;
124     Directory * node;
125
126     p.getToken(token);
127     node = find(container[OBJECTTREE], token, TASK);
128
129     p.getToken(",","{",NULL);
130     parseParameters(p, node, "texatr,texrtn");
131     p.getToken("}");
132 }
133
134 DECLARE_API(CRE_SEM,"CRE_SEM")
135 {
136     Token token;
137     Directory * node;
138
139     p.getToken(token);
140     node = allocate(container[OBJECTTREE], token, SEMAPHORE);
141     (*node)["position"] = p.getStreamLocation();
142
143     p.getToken(",","{",NULL);
144     parseParameters(p,node,"sematr,isemcnt,maxsem");
145     p.getToken("}");
146 }
147
148 DECLARE_API(CRE_FLG,"CRE_FLG")
149 {
150     Token token;
151     Directory * node;
152
153     p.getToken(token);
154     node = allocate(container[OBJECTTREE], token, EVENTFLAG);
155     (*node)["position"] = p.getStreamLocation();
156
157     p.getToken(",","{",NULL);
158     parseParameters(p,node,"flgatr,iflgptn");
159     p.getToken("}");
160 }
161
162 DECLARE_API(CRE_DTQ,"CRE_DTQ")
163 {
164     Token token;
165     Directory * node;
166
167     p.getToken(token);
168     node = allocate(container[OBJECTTREE], token, DATAQUEUE);
169     (*node)["position"] = p.getStreamLocation();
170
171     p.getToken(",","{",NULL);
172     parseParameters(p,node,"dtqatr,dtqcnt");
173     p.getToken(",","NULL","}",NULL);
174 }
175
176 DECLARE_API(CRE_MBX,"CRE_MBX")
177 {
178     Token token;
179     Directory * node;
180
181     p.getToken(token);
182     node = allocate(container[OBJECTTREE], token, MAILBOX);
183     (*node)["position"] = p.getStreamLocation();
184
185     p.getToken(",","{",NULL);
186     parseParameters(p,node,"mbxatr,maxmpri");
187     p.getToken(",","NULL","}",NULL);
188 }
189
190 DECLARE_API(CRE_MPF,"CRE_MPF")
191 {
192     Token token;
193     Directory * node;
194
195     p.getToken(token);
196     node = allocate(container[OBJECTTREE], token, FIXEDSIZEMEMORYPOOL);
197     (*node)["position"] = p.getStreamLocation();
198
199     p.getToken(",","{",NULL);
200     parseParameters(p,node,"mpfatr,blkcnt,blksz");
201     p.getToken(",","NULL","}",NULL);
202 }
203
204 DECLARE_API(CRE_CYC,"CRE_CYC")
205 {
206     Token token;
207     Directory * node;
208
209     p.getToken(token);
210     node = allocate(container[OBJECTTREE], token, CYCLICHANDLER);
211     (*node)["position"] = p.getStreamLocation();
212
213     p.getToken(",","{",NULL);
214     parseParameters(p,node,"cycatr,exinf,cychdr,cyctim,cycphs");
215     p.getToken("}");
216 }
217
218 DECLARE_API(DEF_INH,"DEF_INH")
219 {
220     Token token;
221     Directory * node;
222
223     p.getToken(token);
224     node = allocate(container[OBJECTTREE], token, INTERRUPTHANDLER, false);
225     (*node)["position"] = p.getStreamLocation();
226
227     p.getToken(",","{",NULL);
228     parseParameters(p,node,"inhatr,inthdr");
229     p.getToken("}");
230 }
231
232 DECLARE_API(DEF_EXC,"DEF_EXC")
233 {
234     Token token;
235     Directory * node;
236
237     p.getToken(token);
238     node = allocate(container[OBJECTTREE], token, EXCEPTIONHANDLER, false);
239     (*node)["position"] = p.getStreamLocation();
240
241     p.getToken(",","{",NULL);
242     parseParameters(p,node,"excatr,exchdr");
243     p.getToken("}");
244 }
245
246 DECLARE_API(ATT_INI,"ATT_INI")
247 {
248     Token token;
249     Directory * node;
250
251     node = container.openChild(OBJECTTREE,INITIALIZER,NULL)->addChild();
252     last = node;
253
254     (*node)["position"] = p.getStreamLocation();
255
256     p.getToken("{",NULL);
257     parseParameters(p,node,"iniatr,exinf,inirtn");
258     p.getToken("}");
259 }
260
261 DECLARE_API(ATT_FIN, "VATT_TER")
262 {
263     Token token;
264     Directory * node;
265
266     node = container.openChild(OBJECTTREE,TERMINATOR,NULL)->addChild();
267     last = node;
268
269     (*node)["position"] = p.getStreamLocation();
270
271     p.getToken("{",NULL);
272     parseParameters(p,node,"teratr,exinf,terrtn");
273     p.getToken("}");
274 }
275
276