[openbeos-midi] Re: about RC

  • From: Jerome Leveque <jerl1@xxxxxxxxxxxxxxxx>
  • To: openbeos-midi@xxxxxxxxxxxxx
  • Date: Sun, 14 Sep 2003 16:03:51 +0200

Hi, sorry for the long post

the log when I try to compile JAM

$ cd Projet/OpenBeOS/current/src/tools/jam/
$ jam clean
...found 1 target(s)...
...updating 1 target(s)...
Clean clean ...updated 1 target(s)...
$ jam
don't know how to make jamgram.c
...found 144 target(s)...
...updating 29 target(s)...
...can't find 1 target(s)...
...can't make 3 target(s)...
Cc bin.beosx86/builtins.o Cc bin.beosx86/command.o Cc bin.beosx86/compile.o 
Cc bin.beosx86/execunix.o Cc bin.beosx86/fileunix.o Cc 
bin.beosx86/pathunix.o ...skipped jamgram.o for lack of jamgram.c...
Cc bin.beosx86/jcache.o Cc bin.beosx86/hcache.o Cc bin.beosx86/expand.o Cc 
bin.beosx86/glob.o Cc bin.beosx86/hash.o Cc bin.beosx86/headers.o Cc 
bin.beosx86/lists.o Cc bin.beosx86/make.o Cc bin.beosx86/make1.o Cc 
bin.beosx86/newstr.o Cc bin.beosx86/option.o Cc bin.beosx86/parse.o Cc 
bin.beosx86/regexp.o Cc bin.beosx86/rules.o Cc bin.beosx86/scan.o 
/boot/home/Projet/OpenBeOS/current/src/tools/jam/scan.c:12: jamgram.h: No 
such file or directory

gcc  -c -o bin.beosx86/scan.o   -DOPT_HEADER_CACHE_EXT - 
DOPT_JAMFILE_CACHE_EXT   scan.c

...failed Cc bin.beosx86/scan.o ...
Cc bin.beosx86/search.o Cc bin.beosx86/timestamp.o Cc 
bin.beosx86/variable.o ...skipped libjam.a for lack of jamgram.o...
Cc bin.beosx86/mkjambase.o Link bin.beosx86/mkjambase Cc bin.beosx86/jam.o 
GenFile1 jambase.c Cc bin.beosx86/jambase.o ...skipped jam for lack of 
libjam.a...
...failed updating 1 target(s)...
...skipped 3 target(s)...
...updated 28 target(s)...


And When I try to compile RC

$ cd Projet/OpenBeOS/current/src/tools/rc/
$ jam clean
...found 1 target(s)...
...updating 1 target(s)...
Clean clean ...updated 1 target(s)...
$ jam
...found 132 target(s)...
...updating 13 target(s)...
C++ ../../../objects/x86.R1/tools/rc/compile.o 
/boot/home/Projet/OpenBeOS/current/src/tools/rc/compile.cpp:35: 
parser.cpp.h: No such file or directory

        gcc  -c "../../../src/tools/rc/compile.cpp"  -nostdinc -Wall -Wno- 
multichar -Wmissing-prototypes -Wno-ctor-dtor-privacy -Woverloaded-virtual - 
Wpointer-arith -Wcast-align -Wsign-compare -O2   -I../../../src/tools/rc - 
I../../../objects/x86.R1/tools/rc -I../../../headers - 
I../../../headers/posix -I../../../headers/os -I../../../headers/os/add-ons 
-I../../../headers/os/add-ons/file_system -I../../../headers/os/add- 
ons/graphics -I../../../headers/os/add-ons/input_server - 
I../../../headers/os/add-ons/screen_saver -I../../../headers/os/add- 
ons/tracker -I../../../headers/os/app -I../../../headers/os/device - 
I../../../headers/os/drivers -I../../../headers/os/game - 
I../../../headers/os/interface -I../../../headers/os/kernel - 
I../../../headers/os/media -I../../../headers/os/mail - 
I../../../headers/os/midi -I../../../headers/os/midi2 - 
I../../../headers/os/net -I../../../headers/os/storage - 
I../../../headers/os/support -I../../../headers/os/translation - 
I/boot/develop/headers/posix -I/boot/develop/headers/cpp - 
I/boot/develop/tools/gnupro/lib/gcc-lib/i586-beos/2.9-beos-991026/include  - 
o "../../../objects/x86.R1/tools/rc/compile.o"  ;

...failed C++ ../../../objects/x86.R1/tools/rc/compile.o ...
C++ ../../../objects/x86.R1/tools/rc/decompile.o LexC++ 
../../../objects/x86.R1/tools/rc/lexer.cpp /bin/sh: - 
o../../../objects/x86.R1/tools/rc/lexer.cpp: No such file or directory

         -o../../../objects/x86.R1/tools/rc/lexer.cpp  
../../../src/tools/rc/lexer.l

...failed LexC++ ../../../objects/x86.R1/tools/rc/lexer.cpp ...
...skipped <src!tools!rc>lexer.o for lack of <src!tools!rc>lexer.cpp...
Bison1 ../../../objects/x86.R1/tools/rc/parser.cpp 
../../../objects/x86.R1/tools/rc/parser.cpp.h /bin/m4: m4sugar/m4sugar.m4: 
No such file or directory
m4_changecom()
m4_init()
m4_define([b4_actions], [[  case 9:
#line 141 "../../../src/tools/rc/parser.y"
    { enum_cnt = 0; }
    break;

  case 12:
#line 151 "../../../src/tools/rc/parser.y"
    {
                        add_symbol(]b4_rhs_value([1], [1], [I])[, enum_cnt);
                        ++enum_cnt;
                }
    break;

  case 13:
#line 156 "../../../src/tools/rc/parser.y"
    {
                        int32 id = (int32) ]b4_rhs_value([3], [3], [i])[;
                        add_symbol(]b4_rhs_value([3], [1], [I])[, id);
                        enum_cnt = id + 1;
                }
    break;

  case 14:
#line 165 "../../../src/tools/rc/parser.y"
    {
                        add_user_type(]b4_rhs_value([8], [2], [id])[, 
]b4_rhs_value([8], [3], 
[t])[, ]b4_rhs_value([8], [4], [I])[, ]b4_rhs_value([8], [6], [l])[);
                }
    break;

  case 15:
#line 169 "../../../src/tools/rc/parser.y"
    {
                        add_user_type(]b4_rhs_value([7], [2], [id])[, 
B_RAW_TYPE, 
]b4_rhs_value([7], [3], [I])[, ]b4_rhs_value([7], [5], [l])[);
                }
    break;

  case 16:
#line 175 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([l])[ = concat_field_list(]b4_rhs_value([3], [1], [l]) 
[, ]b4_rhs_value([3], [3], [F])[); }
    break;

  case 17:
#line 176 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([l])[ = make_field_list(]b4_rhs_value([1], [1], [F])[); 
}
    break;

  case 18:
#line 181 "../../../src/tools/rc/parser.y"
    {
                        ]b4_lhs_value([F])[.type   = ]b4_rhs_value([2], [1], 
[T])[;
                        ]b4_lhs_value([F])[.name   = ]b4_rhs_value([2], [2], 
[I])[;
                        ]b4_lhs_value([F])[.resize = 0;
                        ]b4_lhs_value([F])[.data   = 
make_default(]b4_rhs_value([2], [1], [T])[) 
;
                }
    break;

  case 19:
#line 188 "../../../src/tools/rc/parser.y"
    {                   ]b4_lhs_value([F])[.type   = ]b4_rhs_value([4], [1], 
[T])[;
                        ]b4_lhs_value([F])[.name   = ]b4_rhs_value([4], [2], 
[I])[;
                        ]b4_lhs_value([F])[.resize = 0;
                        ]b4_lhs_value([F])[.data   = cast(]b4_rhs_value([4], 
[1], [T])[, 
]b4_rhs_value([4], [4], [d])[);
                }
    break;

  case 20:
#line 195 "../../../src/tools/rc/parser.y"
    {
                        ]b4_lhs_value([F])[.type   = ]b4_rhs_value([5], [1], 
[T])[;
                        ]b4_lhs_value([F])[.name   = ]b4_rhs_value([5], [2], 
[I])[;
                        ]b4_lhs_value([F])[.resize = (size_t) 
]b4_rhs_value([5], [4], [i])[;
                        ]b4_lhs_value([F])[.data   = 
resize_data(make_default(]b4_rhs_value([5], 
[1], [T])[), ]b4_lhs_value([F])[.resize);
                }
    break;

  case 21:
#line 202 "../../../src/tools/rc/parser.y"
    {
                        ]b4_lhs_value([F])[.type   = ]b4_rhs_value([7], [1], 
[T])[;
                        ]b4_lhs_value([F])[.name   = ]b4_rhs_value([7], [2], 
[I])[;
                        ]b4_lhs_value([F])[.resize = (size_t) 
]b4_rhs_value([7], [4], [i])[;
                        ]b4_lhs_value([F])[.data   = 
resize_data(cast(]b4_rhs_value([7], [1], 
[T])[, ]b4_rhs_value([7], [7], [d])[), ]b4_lhs_value([F])[.resize);
                }
    break;

  case 22:
#line 212 "../../../src/tools/rc/parser.y"
    {                   add_resource(]b4_rhs_value([4], [2], [id])[, 
]b4_rhs_value([4], 
[3], [d])[.type.code, ]b4_rhs_value([4], [3], [d])[);           }
    break;

  case 23:
#line 216 "../../../src/tools/rc/parser.y"
    {                   add_resource(]b4_rhs_value([5], [2], [id])[, 
]b4_rhs_value([5], 
[3], [t])[, ]b4_rhs_value([5], [4], [d])[);             }
    break;

  case 24:
#line 220 "../../../src/tools/rc/parser.y"
    {                   add_resource(]b4_rhs_value([7], [2], [id])[, 
]b4_rhs_value([7], 
[4], [t])[, ]b4_rhs_value([7], [6], [d])[);             }
    break;

  case 25:
#line 227 "../../../src/tools/rc/parser.y"
    {
                        ]b4_lhs_value([id])[.has_id = false; 
]b4_lhs_value([id])[.has_name = 
false; ]b4_lhs_value([id])[.name = NULL;
                }
    break;

  case 26:
#line 231 "../../../src/tools/rc/parser.y"
    {
                        ]b4_lhs_value([id])[.has_id = false; 
]b4_lhs_value([id])[.has_name = 
false; ]b4_lhs_value([id])[.name = NULL;
                }
    break;

  case 27:
#line 235 "../../../src/tools/rc/parser.y"
    {                   ]b4_lhs_value([id])[.has_id = true; 
]b4_lhs_value([id])[.id = 
(int32) ]b4_rhs_value([3], [2], [i])[;                  
]b4_lhs_value([id])[.has_name = 
false; ]b4_lhs_value([id])[.name = NULL;                }
    break;

  case 28:
#line 240 "../../../src/tools/rc/parser.y"
    {                   ]b4_lhs_value([id])[.has_id = true; 
]b4_lhs_value([id])[.id = 
(int32) ]b4_rhs_value([5], [2], [i])[;                  
]b4_lhs_value([id])[.has_name = 
true; ]b4_lhs_value([id])[.name = (char*) ]b4_rhs_value([5], [4], [d]) 
[.ptr;          }
    break;

  case 29:
#line 245 "../../../src/tools/rc/parser.y"
    {                   ]b4_lhs_value([id])[.has_id = true; 
]b4_lhs_value([id])[.id = 
get_symbol(]b4_rhs_value([3], [2], [I])[);

                        if (flags & RDEF_AUTO_NAMES)
                        {
                                ]b4_lhs_value([id])[.has_name = true; 
]b4_lhs_value([id])[.name = 
]b4_rhs_value([3], [2], [I])[;                  }
                        else
                        {
                                ]b4_lhs_value([id])[.has_name = false; 
]b4_lhs_value([id])[.name = 
NULL;
                                free_mem(]b4_rhs_value([3], [2], [I])[);
                        }
                }
    break;

  case 30:
#line 259 "../../../src/tools/rc/parser.y"
    {                   ]b4_lhs_value([id])[.has_id = true; 
]b4_lhs_value([id])[.id = 
get_symbol(]b4_rhs_value([5], [2], [I])[);
                        ]b4_lhs_value([id])[.has_name = true; 
]b4_lhs_value([id])[.name = 
(char*) ]b4_rhs_value([5], [4], [d])[.ptr;
                        free_mem(]b4_rhs_value([5], [2], [I])[);                
}
    break;

  case 31:
#line 265 "../../../src/tools/rc/parser.y"
    {                   ]b4_lhs_value([id])[.has_id = false;
                        ]b4_lhs_value([id])[.has_name = true; 
]b4_lhs_value([id])[.name = 
(char*) ]b4_rhs_value([3], [2], [d])[.ptr;
                }
    break;

  case 32:
#line 272 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = ]b4_rhs_value([4], [3], [d])[; }
    break;

  case 33:
#line 273 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = make_data(0, get_type("raw")); }
    break;

  case 34:
#line 274 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = make_data(0, get_type("raw")); }
    break;

  case 35:
#line 275 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = import_data((char*) ]b4_rhs_value([3], [3], 
[d])[.ptr); }
    break;

  case 36:
#line 276 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = import_data((char*) ]b4_rhs_value([2], [2], 
[d])[.ptr); }
    break;

  case 37:
#line 280 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = concat_data(]b4_rhs_value([3], [1], [d])[, 
]b4_rhs_value([3], [3], [d])[); }
    break;

  case 38:
#line 281 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = ]b4_rhs_value([1], [1], [d])[; 
]b4_lhs_value([d])[.type = get_type("raw"); }
    break;

  case 39:
#line 286 "../../../src/tools/rc/parser.y"
    {
                        BMessage* msg = make_msg(]b4_rhs_value([7], [6], [l])[);
                        msg->what = (int32) ]b4_rhs_value([7], [3], [i])[;
                        ]b4_lhs_value([d])[ = flatten_msg(msg);
                }
    break;

  case 40:
#line 292 "../../../src/tools/rc/parser.y"
    {
                        BMessage* msg = new BMessage;
                        msg->what = (int32) ]b4_rhs_value([6], [3], [i])[;
                        ]b4_lhs_value([d])[ = flatten_msg(msg);
                }
    break;

  case 41:
#line 298 "../../../src/tools/rc/parser.y"
    {
                        BMessage* msg = new BMessage;
                        msg->what = (int32) ]b4_rhs_value([4], [3], [i])[;
                        ]b4_lhs_value([d])[ = flatten_msg(msg);
                }
    break;

  case 42:
#line 303 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = flatten_msg(make_msg(]b4_rhs_value([4], [3], 
[l])[)); }
    break;

  case 43:
#line 304 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = flatten_msg(new BMessage); }
    break;

  case 44:
#line 305 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = flatten_msg(new BMessage); }
    break;

  case 45:
#line 309 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([l])[ = concat_data_list(]b4_rhs_value([3], [1], [l])[, 
]b4_rhs_value([3], [3], [d])[); }
    break;

  case 46:
#line 310 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([l])[ = make_data_list(]b4_rhs_value([1], [1], [d])[); 
}
    break;

  case 47:
#line 315 "../../../src/tools/rc/parser.y"
    {
                        ]b4_lhs_value([d])[ = ]b4_rhs_value([3], [3], [d])[;
                        ]b4_lhs_value([d])[.name = (char*) ]b4_rhs_value([3], 
[1], [d])[.ptr;
                }
    break;

  case 48:
#line 320 "../../../src/tools/rc/parser.y"
    {
                        ]b4_lhs_value([d])[ = cast(]b4_rhs_value([4], [1], 
[T])[, 
]b4_rhs_value([4], [4], [d])[);
                        ]b4_lhs_value([d])[.name = (char*) ]b4_rhs_value([4], 
[2], [d])[.ptr;
                }
    break;

  case 49:
#line 325 "../../../src/tools/rc/parser.y"
    {
                        ]b4_lhs_value([d])[ = ]b4_rhs_value([4], [4], [d])[;
                        ]b4_lhs_value([d])[.type.code = ]b4_rhs_value([4], [1], 
[t])[;
                        ]b4_lhs_value([d])[.name = (char*) ]b4_rhs_value([4], 
[2], [d])[.ptr;
                }
    break;

  case 50:
#line 331 "../../../src/tools/rc/parser.y"
    {
                        ]b4_lhs_value([d])[ = cast(]b4_rhs_value([5], [2], 
[T])[, 
]b4_rhs_value([5], [5], [d])[);
                        ]b4_lhs_value([d])[.type.code = ]b4_rhs_value([5], [1], 
[t])[;
                        ]b4_lhs_value([d])[.name = (char*) ]b4_rhs_value([5], 
[3], [d])[.ptr;
                }
    break;

  case 51:
#line 340 "../../../src/tools/rc/parser.y"
    {
                        BMessage* msg = make_msg(]b4_rhs_value([5], [4], [l])[);
                        msg->AddString("class", ]b4_rhs_value([5], [2], [I])[);
                        free_mem(]b4_rhs_value([5], [2], [I])[);
                        ]b4_lhs_value([d])[ = flatten_msg(msg);
                }
    break;

  case 52:
#line 347 "../../../src/tools/rc/parser.y"
    {
                        BMessage* msg = make_msg(]b4_rhs_value([8], [7], [l])[);
                        msg->AddString("class", ]b4_rhs_value([8], [5], [I])[);
                        msg->AddString("add_on", (char*) ]b4_rhs_value([8], 
[3], [d])[.ptr);
                        free_mem(]b4_rhs_value([8], [5], [I])[);
                        free_mem(]b4_rhs_value([8], [3], [d])[.ptr);
                        ]b4_lhs_value([d])[ = flatten_msg(msg);
                }
    break;

  case 53:
#line 356 "../../../src/tools/rc/parser.y"
    {
                        BMessage* msg = make_msg(]b4_rhs_value([9], [8], [l])[);
                        msg->what = (int32) ]b4_rhs_value([9], [4], [i])[;
                        msg->AddString("class", ]b4_rhs_value([9], [6], [I])[);
                        free_mem(]b4_rhs_value([9], [6], [I])[);
                        ]b4_lhs_value([d])[ = flatten_msg(msg);
                }
    break;

  case 54:
#line 364 "../../../src/tools/rc/parser.y"
    {
                        BMessage* msg = make_msg(]b4_rhs_value([10], [9], 
[l])[);
                        msg->what = (int32) ]b4_rhs_value([10], [5], [i])[;
                        msg->AddString("class", ]b4_rhs_value([10], [7], [I])[);
                        msg->AddString("add_on", (char*) ]b4_rhs_value([10], 
[3], [d])[.ptr);
                        free_mem(]b4_rhs_value([10], [7], [I])[);
                        free_mem(]b4_rhs_value([10], [3], [d])[.ptr);
                        ]b4_lhs_value([d])[ = flatten_msg(msg);
                }
    break;

  case 55:
#line 376 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = make_type(]b4_rhs_value([4], [1], [I])[, 
]b4_rhs_value([4], [3], [l])[); }
    break;

  case 56:
#line 378 "../../../src/tools/rc/parser.y"
    {
                        list_t list; list.count = 0; list.items = NULL;
                        ]b4_lhs_value([d])[ = make_type(]b4_rhs_value([3], [1], 
[I])[, list);
                }
    break;

  case 57:
#line 383 "../../../src/tools/rc/parser.y"
    {
                        ]b4_lhs_value([d])[ = make_type(]b4_rhs_value([2], [1], 
[I])[, 
make_data_list(]b4_rhs_value([2], [2], [d])[));
                }
    break;

  case 58:
#line 387 "../../../src/tools/rc/parser.y"
    {
                        list_t list; list.count = 0; list.items = NULL;
                        ]b4_lhs_value([d])[ = make_type(]b4_rhs_value([1], [1], 
[I])[, list);
                }
    break;

  case 59:
#line 394 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([l])[ = concat_data_list(]b4_rhs_value([3], [1], [l])[, 
]b4_rhs_value([3], [3], [d])[); }
    break;

  case 60:
#line 395 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([l])[ = make_data_list(]b4_rhs_value([1], [1], [d])[); 
}
    break;

  case 61:
#line 399 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = ]b4_rhs_value([3], [3], [d])[; 
]b4_lhs_value([d])[.name = ]b4_rhs_value([3], [1], [I])[; }
    break;

  case 62:
#line 400 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = ]b4_rhs_value([1], [1], [d])[; }
    break;

  case 63:
#line 404 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(get_type("bool"), 
make_bool(]b4_rhs_value([1], [1], [b])[)); }
    break;

  case 64:
#line 405 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(get_type("int32"), 
make_int(]b4_rhs_value([1], [1], [i])[)); }
    break;

  case 65:
#line 406 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(get_type("float"), 
make_float(]b4_rhs_value([1], [1], [f])[)); }
    break;

  case 66:
#line 407 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([1], [1], [d])[.type, 
]b4_rhs_value([1], [1], [d])[); }
    break;

  case 67:
#line 408 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([1], [1], [d])[.type, 
]b4_rhs_value([1], [1], [d])[); }
    break;

  case 68:
#line 409 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([1], [1], [d])[.type, 
]b4_rhs_value([1], [1], [d])[); }
    break;

  case 69:
#line 410 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([1], [1], [d])[.type, 
]b4_rhs_value([1], [1], [d])[); }
    break;

  case 70:
#line 411 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([1], [1], [d])[.type, 
]b4_rhs_value([1], [1], [d])[); }
    break;

  case 71:
#line 412 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([1], [1], [d])[.type, 
]b4_rhs_value([1], [1], [d])[); }
    break;

  case 72:
#line 413 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([2], [1], [T])[, 
make_bool(]b4_rhs_value([2], [2], [b])[)); }
    break;

  case 73:
#line 414 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([2], [1], [T])[, 
make_int(]b4_rhs_value([2], [2], [i])[)); }
    break;

  case 74:
#line 415 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([2], [1], [T])[, 
make_float(]b4_rhs_value([2], [2], [f])[)); }
    break;

  case 75:
#line 416 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([2], [1], [T])[, 
]b4_rhs_value([2], [2], [d])[); }
    break;

  case 76:
#line 417 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([2], [1], [T])[, 
]b4_rhs_value([2], [2], [d])[); }
    break;

  case 77:
#line 418 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([2], [1], [T])[, 
]b4_rhs_value([2], [2], [d])[); }
    break;

  case 78:
#line 419 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([2], [1], [T])[, 
]b4_rhs_value([2], [2], [d])[); }
    break;

  case 79:
#line 420 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([2], [1], [T])[, 
]b4_rhs_value([2], [2], [d])[); }
    break;

  case 80:
#line 421 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([d])[ = cast(]b4_rhs_value([2], [1], [T])[, 
]b4_rhs_value([2], [2], [d])[); }
    break;

  case 81:
#line 425 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([T])[ = ]b4_rhs_value([3], [2], [T])[; }
    break;

  case 82:
#line 429 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([T])[ = get_type("raw"); }
    break;

  case 83:
#line 430 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([T])[ = get_type("message"); }
    break;

  case 84:
#line 431 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([T])[ = get_type("message"); 
free_mem(]b4_rhs_value([2], [2], [I])[); }
    break;

  case 85:
#line 432 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([T])[ = get_type(]b4_rhs_value([1], [1], [I])[); 
free_mem(]b4_rhs_value([1], [1], [I])[); }
    break;

  case 86:
#line 436 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([i])[ = ]b4_rhs_value([1], [1], [i])[; }
    break;

  case 87:
#line 437 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([i])[ = -(]b4_rhs_value([2], [2], [i])[); }
    break;

  case 88:
#line 441 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([f])[ = ]b4_rhs_value([1], [1], [f])[; }
    break;

  case 89:
#line 442 "../../../src/tools/rc/parser.y"
    { ]b4_lhs_value([f])[ = -(]b4_rhs_value([2], [2], [f])[); }
    break;

]])

m4_define([b4_mergers], [[]])

m4_define([b4_tokens], [[[[ENUM]], [258]],
[[[RESOURCE]], [259]],
[[[ARCHIVE]], [260]],
[[[ARRAY]], [261]],
[[[MESSAGE]], [262]],
[[[TYPE]], [263]],
[[[IMPORT]], [264]],
[[[BOOL]], [265]],
[[[INTEGER]], [266]],
[[[FLOAT]], [267]],
[[[STRING]], [268]],
[[[RAW]], [269]],
[[[IDENT]], [270]],
[[[TYPECODE]], [271]]])

m4_define([b4_symbol_destructors], [])

m4_define([b4_symbol_printers], [])

m4_define([b4_translate],
          [[     0,     2,     2,     2,     2,     2,     2,     2,     2, 
    2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      24,    25,     2,     2,    20,    26,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,    19,
       2,    21,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,    22,     2,    23,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,    17,     2,    18,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
      15,    16]])


m4_define([b4_pure],
          [[0]])


m4_define([b4_pact_ninf],
          [[-86]])


m4_define([b4_conflict_list_heads],
          [[     0,     0,     0,     0,     0,     0,     0,     0,     0, 
    0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0]])


m4_define([b4_output_parser_name],
          [[../../../objects/x86.R1/tools/rc/parser.cpp]])


m4_define([b4_toknum_max],
          [[271]])


m4_define([b4_rhs],
          [[    28,     0,    -1,    -1,    28,    29,    -1,    28,    33, 
   -1,
      28,    36,    -1,    30,    17,    18,    19,    -1,    30,    17,
      31,    18,    19,    -1,    30,    17,    31,    20,    18,    19,
      -1,     3,    -1,    31,    20,    32,    -1,    32,    -1,    15,
      -1,    15,    21,    50,    -1,     8,    37,    16,    15,    17,
      34,    18,    19,    -1,     8,    37,    15,    17,    34,    18,
      19,    -1,    34,    20,    35,    -1,    35,    -1,    49,    15,
      -1,    49,    15,    21,    47,    -1,    49,    15,    22,    11,
      23,    -1,    49,    15,    22,    11,    23,    21,    47,    -1,
       4,    37,    47,    19,    -1,     4,    37,    16,    47,    19,
      -1,     4,    37,    24,    16,    25,    47,    19,    -1,    -1,
      24,    25,    -1,    24,    50,    25,    -1,    24,    50,    20,
      13,    25,    -1,    24,    15,    25,    -1,    24,    15,    20,
      13,    25,    -1,    24,    13,    25,    -1,     6,    17,    39,
      18,    -1,     6,    17,    18,    -1,     6,    -1,     6,     9,
      13,    -1,     9,    13,    -1,    39,    20,    47,    -1,    47,
      -1,     7,    24,    50,    25,    17,    41,    18,    -1,     7,
      24,    50,    25,    17,    18,    -1,     7,    24,    50,    25,
      -1,     7,    17,    41,    18,    -1,     7,    17,    18,    -1,
       7,    -1,    41,    20,    42,    -1,    42,    -1,    13,    21,
      47,    -1,    49,    13,    21,    47,    -1,    16,    13,    21,
      47,    -1,    16,    49,    13,    21,    47,    -1,     5,    15,
      17,    41,    18,    -1,     5,    24,    13,    25,    15,    17,
      41,    18,    -1,     5,    24,    20,    50,    25,    15,    17,
      41,    18,    -1,     5,    24,    13,    20,    50,    25,    15,
      17,    41,    18,    -1,    15,    17,    45,    18,    -1,    15,
      17,    18,    -1,    15,    47,    -1,    15,    -1,    45,    20,
      46,    -1,    46,    -1,    15,    21,    47,    -1,    47,    -1,
      10,    -1,    50,    -1,    51,    -1,    13,    -1,    14,    -1,
      38,    -1,    40,    -1,    43,    -1,    44,    -1,    48,    10,
      -1,    48,    50,    -1,    48,    51,    -1,    48,    13,    -1,
      48,    14,    -1,    48,    38,    -1,    48,    40,    -1,    48,
      43,    -1,    48,    44,    -1,    24,    49,    25,    -1,     6,
      -1,     7,    -1,     5,    15,    -1,    15,    -1,    11,    -1,
      26,    11,    -1,    12,    -1,    26,    12,    -1]])


m4_define([b4_last],
          [[291]])


m4_define([b4_stos_min],
          [[0]])


m4_define([b4_error_verbose],
          [[0]])


m4_define([b4_table_min],
          [[0]])


m4_define([b4_table],
          [[    36,    68,    19,   121,    20,    21,    22,    10,    23, 
   24,
      14,    25,    26,    27,    28,    14,    59,    13,    62,    54,
     134,    89,    14,    60,    15,    31,    16,    55,    90,    78,
      18,    68,    63,    64,    65,    49,    17,    18,    52,    56,
      95,    46,    66,    96,    94,    97,    57,    53,   106,   101,
      47,   113,    20,    21,    22,    48,    23,    24,    14,    25,
      26,    27,    28,    29,    50,   122,    58,   129,   169,    51,
     123,    30,    42,    31,   115,    43,    40,    41,   174,    63,
      64,    65,   124,    49,    69,   113,    63,    64,    65,    66,
     181,    84,    42,    85,   183,   117,    66,    67,   137,    20,
      21,    22,    70,    23,    24,    14,    25,    26,    27,    28,
     113,    59,   159,   160,   144,   147,   148,   125,    60,   126,
      31,    81,   130,   154,   131,   106,    20,    21,    22,    80,
      23,    24,    14,    25,    26,    27,    28,    82,   165,    92,
      88,   167,    63,    64,    65,    60,    83,    31,   170,   135,
      95,   136,    66,    96,    86,   176,    20,    21,    22,    87,
      23,    24,    14,    25,    26,    27,   102,   107,   138,   103,
     139,   185,   143,    91,   131,    60,   108,    31,    20,    21,
      22,   109,    23,    24,    14,    25,    26,    27,    28,   161,
       2,   139,   110,     3,     4,   114,   116,    60,     5,    31,
      20,    21,    22,   127,    23,    24,    14,    25,    26,    27,
     102,   177,   180,   131,   131,   184,   186,   131,   131,    60,
     132,    31,    20,    21,    22,   119,    23,    71,    14,    25,
      72,    73,    28,   120,    63,    64,    65,   133,    63,    64,
      65,   140,    95,    31,    66,    96,   128,   168,    66,   142,
     145,   150,   146,   149,   153,   152,   162,   164,   156,   157,
     163,   171,   166,   172,   173,   175,   118,   182,   178,   179,
      12,   141,   158,    74,   151,   155,     0,     0,     0,     0,
       0,     0,     0,     0,    75,     0,     0,     0,    76,     0,
      77,    79]])


m4_define([b4_conflicting_rules_max],
          [[0]])


m4_define([b4_merger],
          [[     0,     0,     0,     0,     0,     0,     0,     0,     0, 
    0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0]])


m4_define([b4_check_max],
          [[182]])


m4_define([b4_rline_min],
          [[0]])


m4_define([b4_toknum],
          [[     0,   256,   257,   258,   259,   260,   261,   262,   263, 
  264,
     265,   266,   267,   268,   269,   270,   271,   123,   125,    59,
      44,    61,    91,    93,    40,    41,    45]])


m4_define([b4_defgoto_max],
          [[112]])


m4_define([b4_version],
          [[1.75]])


m4_define([b4_translate_min],
          [[0]])


m4_define([b4_stype],
          [[{
        bool b;
        uint64 i;
        double f;
        char* I;
        type_code t;
        id_t id;
        data_t d;
        list_t l;
        field_t F;
        type_t T;
}]])


m4_define([b4_pgoto_min],
          [[-86]])


m4_define([b4_rhs_max],
          [[51]])


m4_define([b4_skeleton],
          [[yacc.c]])


m4_define([b4_pgoto],
          [[   -86,   -86,   -86,   -86,   -86,   181,   -86,   157,   133, 
  -86,
     265,   236,   -86,   247,   -85,   143,   251,   253,   -86,   139,
     -11,   -86,   -29,    -8,   254]])


m4_define([b4_pact_max],
          [[252]])


m4_define([b4_initdepth],
          [[200]])


m4_define([b4_conflict_list_heads_min],
          [[0]])


m4_define([b4_tname],
          [["$end", "error", "$undefined", "ENUM", "RESOURCE", "ARCHIVE", 
"ARRAY", "MESSAGE", "TYPE", "IMPORT", "BOOL", "INTEGER", "FLOAT", "STRING", 
"RAW", "IDENT", "TYPECODE", "'{'", "'}'", "';'", "','", "'='", "'['", 
"']'", "'('", "')'", "'-'", "$accept", "script", "enum", "enumstart", 
"symbols", "symboldef", "typedef", "typedeffields", "typedeffield", 
"resource", "id", "array", "arrayfields", "message", "msgfields", 
"msgfield", "archive", "type", "typefields", "typefield", "data", 
"typecast", "datatype", "integer", "float", 0]])


m4_define([b4_defact],
          [[     2,     0,     1,     9,    25,    25,     3,     0,     4, 
    5,
       0,     0,     0,     0,    86,     0,     0,    26,     0,     0,
       0,    34,    44,     0,    63,    88,    66,    67,    58,     0,
       0,     0,    68,    69,    70,    71,     0,     0,    64,    65,
       0,     0,    12,     0,     0,    11,    31,     0,    29,    87,
       0,    27,     0,     0,     0,     0,     0,     0,    36,     0,
       0,    57,     0,     0,    82,    83,    85,     0,     0,    89,
      22,    72,    75,    76,    77,    78,    79,    80,    73,    74,
       0,     0,     0,     6,     0,     0,     0,     0,     0,     0,
       0,    35,    33,     0,    38,     0,     0,    43,     0,    46,
       0,     0,    58,    56,     0,    60,    62,    23,    84,     0,
      81,     0,    17,     0,     0,    13,     7,     0,    10,    30,
      28,     0,     0,     0,     0,    32,     0,     0,     0,     0,
      42,     0,     0,    41,     0,    55,     0,     0,     0,     0,
      18,     0,     8,    51,     0,     0,     0,    37,    47,     0,
       0,    45,     0,     0,    61,    59,    24,    15,    16,     0,
       0,     0,     0,     0,     0,    49,     0,    48,    40,     0,
      19,     0,    14,     0,     0,     0,    50,    39,    20,     0,
      52,     0,     0,     0,    53,    21,    54]])


m4_define([b4_tokens_number],
          [[27]])


m4_define([b4_filename],
          [[../../../src/tools/rc/parser.y]])


m4_define([b4_stos_max],
          [[51]])


m4_define([b4_output_infix],
          [[]])


m4_define([b4_merger_min],
          [[0]])


m4_define([b4_table_max],
          [[186]])


m4_define([b4_epilogue],
          [[#line 445 "../../../src/tools/rc/parser.y"

//-------------------------------------------------------------------------- 
----

void yyerror(char* msg)
{
        // This function is called by the parser when it encounters
        // an error, after which it aborts parsing and returns from     // 
yyparse(). 
We never call yyerror() directly.

        rdef_err = RDEF_COMPILE_ERR;
        rdef_err_line = yylineno;
        strcpy(rdef_err_file, lexfile);
        strcpy(rdef_err_msg, msg);
}

//-------------------------------------------------------------------------- 
----

void add_symbol(char* name, int32 id)
{
        if (symbol_table.find(name) != symbol_table.end())
        {
                abort_compile(RDEF_COMPILE_ERR, "duplicate symbol %s", name);
        }

        symbol_table.insert(make_pair(name, id));
}

//-------------------------------------------------------------------------- 
----

int32 get_symbol(char* name)
{
        sym_iter_t i = symbol_table.find(name);

        if (i == symbol_table.end())
        {
                abort_compile(RDEF_COMPILE_ERR, "unknown symbol %s", name);
        }

        return i->second;
}

//-------------------------------------------------------------------------- 
----

static void add_builtin_type(type_code code, char* name)
{
        type_t type;
        type.code     = code;
        type.name     = name;
        type.count    = 0;
        type.fields   = NULL;
        type.def_id   = 1;
        type.def_name = NULL;

        type_table.insert(make_pair(name, type));
}

//-------------------------------------------------------------------------- 
----

void add_user_type(id_t id, type_code code, char* name, list_t list)
{
        if (type_table.find(name) != type_table.end())
        {
                abort_compile(RDEF_COMPILE_ERR, "duplicate type %s", name);
        }

        type_t type;
        type.code     = code;
        type.name     = name;
        type.count    = list.count;
        type.fields   = (field_t*) list.items;
        type.def_id   = 1;
        type.def_name = NULL;

        if (id.has_id)
        {
                type.def_id = id.id;
        }

        if (id.has_name)
        {       
                type.def_name = id.name;
        }

        type_table.insert(make_pair(name, type));
}

//-------------------------------------------------------------------------- 
----

static bool is_builtin_type(type_t type)
{
        return (type.count == 0);
}

//-------------------------------------------------------------------------- 
----

static bool same_type(type_t type1, type_t type2)
{
        return (type1.name == type2.name);  // no need for strcmp
}

//-------------------------------------------------------------------------- 
----

type_t get_type(char* name)
{
        type_iter_t i = type_table.find(name);

        if (i == type_table.end())
        {
                abort_compile(RDEF_COMPILE_ERR, "unknown type %s", name);
        }

        return i->second;
}

//-------------------------------------------------------------------------- 
----

data_t make_data(size_t size, type_t type)
{
        data_t out;
        out.type = type;
        out.name = NULL;
        out.size = size;
        out.ptr  = alloc_mem(size);
        return out;
}

//-------------------------------------------------------------------------- 
----

data_t make_bool(bool b)
{
        data_t out = make_data(sizeof(bool), get_type("bool"));
        *((bool*) out.ptr) = b;
        return out;
}

//-------------------------------------------------------------------------- 
----

data_t make_int(uint64 i)
{
        data_t out = make_data(sizeof(uint64), get_type("uint64"));
        *((uint64*) out.ptr) = i;
        return out;
}

//-------------------------------------------------------------------------- 
----

data_t make_float(double f)
{
        data_t out = make_data(sizeof(double), get_type("double"));
        *((double*) out.ptr) = f;
        return out;
}

//-------------------------------------------------------------------------- 
----

data_t import_data(char* filename)
{
        data_t out;
        out.type = get_type("raw");
        out.name = NULL;

        char tmpname[B_PATH_NAME_LENGTH];
        if (open_file_from_include_dir(filename, tmpname))
        {
                BFile file(tmpname, B_READ_ONLY);
                if (file.InitCheck() == B_OK)
                {
                        off_t size;
                        if (file.GetSize(&size) == B_OK)
                        {
                                out.size = (size_t) size;
                                out.ptr  = alloc_mem(size);

                                if (file.Read(out.ptr, out.size) == (ssize_t) 
out.size)
                                {
                                        free_mem(filename);
                                        return out;
                                }
                        }
                }
        }

        abort_compile(RDEF_COMPILE_ERR, "cannot import %s", filename);
        return out;
}

//-------------------------------------------------------------------------- 
----

data_t resize_data(data_t data, size_t new_size)
{
        if (new_size == 0)
        {
                abort_compile(RDEF_COMPILE_ERR, "invalid size %lu", new_size);
        }
        else if (data.size != new_size)
        {
                void* new_ptr = alloc_mem(new_size);

                memset(new_ptr, 0, new_size);
                memcpy(new_ptr, data.ptr, min(data.size, new_size));

                if (data.type.code == B_STRING_TYPE)
                {
                        ((char*) new_ptr)[new_size - 1] = '\0';
                }

                free_mem(data.ptr);
                data.ptr  = new_ptr;
                data.size = new_size;
        }

        return data;
}

//-------------------------------------------------------------------------- 
----

BMessage* make_msg(list_t list)
{
        BMessage* msg = new BMessage;

        for (int32 t = 0; t < list.count; ++t)
        {
                data_t data = ((data_t*) list.items)[t];
                msg->AddData(data.name, data.type.code, data.ptr, data.size, 
false);
                free_mem(data.name);
                free_mem(data.ptr);
        }

        free_mem(list.items);
        return msg;
}

//-------------------------------------------------------------------------- 
----

data_t flatten_msg(BMessage* msg)
{
        data_t out = make_data(msg->FlattenedSize(), get_type("message"));
        msg->Flatten((char*) out.ptr, out.size);
        delete msg;
        return out;
}

//-------------------------------------------------------------------------- 
----

data_t make_default(type_t type)
{       data_t out;

        if (is_builtin_type(type))
        {
                switch (type.code)
                {
                        case B_BOOL_TYPE:
                                out = make_data(sizeof(bool), type);
                                *((bool*) out.ptr) = false;
                                break;

                        case B_INT8_TYPE:
                        case B_UINT8_TYPE:
                                out = make_data(sizeof(uint8), type);
                                *((uint8*) out.ptr) = 0;
                                break;

                        case B_INT16_TYPE:
                        case B_UINT16_TYPE:
                                out = make_data(sizeof(uint16), type);
                                *((uint16*) out.ptr) = 0;
                                break;

                        case B_INT32_TYPE:
                        case B_UINT32_TYPE:
                        case B_SIZE_T_TYPE:
                        case B_SSIZE_T_TYPE:
                        case B_TIME_TYPE:
                                out = make_data(sizeof(uint32), type);
                                *((uint32*) out.ptr) = 0;
                                break;

                        case B_INT64_TYPE:
                        case B_UINT64_TYPE:
                        case B_OFF_T_TYPE:
                                out = make_data(sizeof(uint64), type);
                                *((uint64*) out.ptr) = 0;
                                break;

                        case B_FLOAT_TYPE:
                                out = make_data(sizeof(float), type);
                                *((float*) out.ptr) = 0.0f;
                                break;

                        case B_DOUBLE_TYPE:
                                out = make_data(sizeof(double), type);
                                *((double*) out.ptr) = 0.0;
                                break;

                        case B_STRING_TYPE:
                                out = make_data(sizeof(char), type);
                                *((char*) out.ptr) = '\0';
                                break;
                
                        case B_RAW_TYPE:
                                out = make_data(0, type);
                                break;

                        case B_MESSAGE_TYPE:
                                out = flatten_msg(new BMessage);
                                break;
                }
        }
        else
        {
                // For user-defined types, we copy the default values of the 
fields
                // into a new data_t object. There is no need to call 
resize_data()
                // here, because the default values were already resized to 
their
                // proper length when we added them to the type.

                size_t size = 0;
                for (int32 t = 0; t < type.count; ++t)
                {
                        size += type.fields[t].data.size;
                }

                out = make_data(size, type);

                uint8* ptr = (uint8*) out.ptr;
                for (int32 t = 0; t < type.count; ++t)
                {
                        data_t field_data = type.fields[t].data;
                        memcpy(ptr, field_data.ptr, field_data.size);
                        ptr += field_data.size;
                }
        }

        return out;
}

//-------------------------------------------------------------------------- 
----

static data_t* fill_slots(type_t type, list_t list)
{
        data_t* slots = (data_t*) alloc_mem(type.count * sizeof(data_t));
        memset(slots, 0, type.count * sizeof(data_t));

        for (int32 t = 0; t < list.count; ++t)
        {
                data_t data = ((data_t*) list.items)[t];

                if (data.name == NULL)
                {
                        bool found = false;
                        for (int32 k = 0; k < type.count; ++k)
                        {
                                if (slots[k].ptr == NULL)
                                {
                                        slots[k] = cast(type.fields[k].type, 
data);
                                        found = true;
                                        break;
                                }
                        }

                        if (!found)
                        {
                                abort_compile(RDEF_COMPILE_ERR, "too many 
fields");
                        }
                }
                else  // named field
                {
                        bool found = false;
                        for (int32 k = 0; k < type.count; ++k)
                        {
                                if (strcmp(type.fields[k].name, data.name) == 0)
                                {
                                        if (slots[k].ptr != NULL)
                                        {
                                                free_mem(slots[k].ptr);
                                        }

                                        slots[k] = cast(type.fields[k].type, 
data);
                                        free_mem(data.name);
                                        found = true;
                                        break;
                                }
                        }

                        if (!found)
                        {
                                abort_compile(RDEF_COMPILE_ERR, "unknown field 
%s", data.name);
                        }
                }
        }

        return slots;
}

//-------------------------------------------------------------------------- 
----

static data_t convert_slots(type_t type, data_t* slots)
{
        size_t size = 0;
        for (int32 k = 0; k < type.count; ++k)
        {
                if (slots[k].ptr == NULL)  // default value
                {
                        size += type.fields[k].data.size;
                }
                else if (type.fields[k].resize != 0)
                {
                        size += type.fields[k].resize;
                }
                else
                {
                        size += slots[k].size;
                }
        }

        data_t out = make_data(size, type);
        uint8* ptr = (uint8*) out.ptr;

        for (int32 k = 0; k < type.count; ++k)
        {
                if (slots[k].ptr == NULL)  // default value
                {
                        memcpy(ptr, type.fields[k].data.ptr, 
type.fields[k].data.size);
                        ptr += type.fields[k].data.size;
                }
                else if (type.fields[k].resize != 0)
                {
                        data_t temp = resize_data(slots[k], 
type.fields[k].resize);
                        memcpy(ptr, temp.ptr, temp.size);
                        ptr += temp.size;
                        free_mem(temp.ptr);
                }
                else
                {
                        memcpy(ptr, slots[k].ptr, slots[k].size);
                        ptr += slots[k].size;
                        free_mem(slots[k].ptr);
                }
        }

        free_mem(slots);
        return out;
}

//-------------------------------------------------------------------------- 
----

data_t make_type(char* name, list_t list)
{
        // Some explanation is in order. The "list" contains zero or more data_t
        // items. Each of these items corresponds to a data field that the user
        // specified, but not necessarily to a field from the type definition.
        // So here we have to figure out which data item goes where. It is 
fairly
        // obvious where names items should go, but for items without a name we
        // simply use the first available slot. For any fields that the user did
        // not fill in we use the default value from the type definition. This
        // algorithm allows for variable size fields, such as strings and 
arrays.

        type_t type = get_type(name);

        data_t* slots = fill_slots(type, list);
        data_t out = convert_slots(type, slots);

        free_mem(name);
        free_mem(list.items);
        return out;
}

//-------------------------------------------------------------------------- 
----

list_t make_field_list(field_t field)
{
        list_t out;
        out.count = 1;
        out.items = alloc_mem(sizeof(field_t));
        *((field_t*) out.items) = field;
        return out;
}

//-------------------------------------------------------------------------- 
----

list_t concat_field_list(list_t list, field_t field)
{
        list_t out;
        out.count = list.count + 1;
        out.items = alloc_mem(out.count * sizeof(field_t));

        memcpy(out.items, list.items, list.count * sizeof(field_t));
        memcpy((field_t*) out.items + list.count, &field, sizeof(field_t));

        free_mem(list.items);
        return out;
}

//-------------------------------------------------------------------------- 
----

list_t make_data_list(data_t data)
{
        list_t out;
        out.count = 1;
        out.items = alloc_mem(sizeof(data_t));
        *((data_t*) out.items) = data;
        return out;
}

//-------------------------------------------------------------------------- 
----

list_t concat_data_list(list_t list, data_t data)
{
        list_t out;
        out.count = list.count + 1;
        out.items = (data_t*) alloc_mem(out.count * sizeof(data_t));

        memcpy(out.items, list.items, list.count * sizeof(data_t));
        memcpy((data_t*) out.items + list.count, &data, sizeof(data_t));

        free_mem(list.items);
        return out;
}

//-------------------------------------------------------------------------- 
----

data_t concat_data(data_t data1, data_t data2)
{
        data_t out = make_data(data1.size + data2.size, get_type("raw"));

        memcpy(out.ptr, data1.ptr, data1.size);
        memcpy((uint8*) out.ptr + data1.size, data2.ptr, data2.size);

        free_mem(data1.ptr);
        free_mem(data2.ptr);
        return out;
}

//-------------------------------------------------------------------------- 
----

static data_t cast_to_uint8(type_t new_type, data_t data)
{
        data_t out = make_data(sizeof(uint8), new_type);

        switch (data.type.code)
        {
                case B_INT8_TYPE:
                case B_UINT8_TYPE:
                        *((uint8*) out.ptr) = (uint8) *((uint8*) data.ptr); 
break;

                case B_INT16_TYPE:
                case B_UINT16_TYPE:
                        *((uint8*) out.ptr) = (uint8) *((uint16*) data.ptr); 
break;

                case B_INT32_TYPE:
                case B_UINT32_TYPE:
                case B_SIZE_T_TYPE:
                case B_SSIZE_T_TYPE:
                case B_TIME_TYPE:
                        *((uint8*) out.ptr) = (uint8) *((uint32*) data.ptr); 
break;

                case B_INT64_TYPE:
                case B_UINT64_TYPE:
                case B_OFF_T_TYPE:
                        *((uint8*) out.ptr) = (uint8) *((uint64*) data.ptr); 
break;

                default:
                        abort_compile(RDEF_COMPILE_ERR, "cannot cast to this 
type");
        }

        free_mem(data.ptr);
        return out;
}

//-------------------------------------------------------------------------- 
----

static data_t cast_to_uint16(type_t new_type, data_t data)
{
        data_t out = make_data(sizeof(uint16), new_type);

        switch (data.type.code)
        {
                case B_INT8_TYPE:
                case B_UINT8_TYPE:
                        *((uint16*) out.ptr) = (uint16) *((uint8*) data.ptr); 
break;

                case B_INT16_TYPE:
                case B_UINT16_TYPE:
                        *((uint16*) out.ptr) = (uint16) *((uint16*) data.ptr); 
break;

                case B_INT32_TYPE:
                case B_UINT32_TYPE:
                case B_SIZE_T_TYPE:
                case B_SSIZE_T_TYPE:
                case B_TIME_TYPE:
                        *((uint16*) out.ptr) = (uint16) *((uint32*) data.ptr); 
break;

                case B_INT64_TYPE:
                case B_UINT64_TYPE:
                case B_OFF_T_TYPE:
                        *((uint16*) out.ptr) = (uint16) *((uint64*) data.ptr); 
break;

                default:
                        abort_compile(RDEF_COMPILE_ERR, "cannot cast to this 
type");
        }

        free_mem(data.ptr);
        return out;
}

//-------------------------------------------------------------------------- 
----

static data_t cast_to_uint32(type_t new_type, data_t data)
{
        data_t out = make_data(sizeof(uint32), new_type);

        switch (data.type.code)
        {
                case B_INT8_TYPE:
                case B_UINT8_TYPE:
                        *((uint32*) out.ptr) = (uint32) *((uint8*) data.ptr); 
break;

                case B_INT16_TYPE:
                case B_UINT16_TYPE:
                        *((uint32*) out.ptr) = (uint32) *((uint16*) data.ptr); 
break;

                case B_INT32_TYPE:
                case B_UINT32_TYPE:
                case B_SIZE_T_TYPE:
                case B_SSIZE_T_TYPE:
                case B_TIME_TYPE:
                        *((uint32*) out.ptr) = (uint32) *((uint32*) data.ptr); 
break;

                case B_INT64_TYPE:
                case B_UINT64_TYPE:
                case B_OFF_T_TYPE:
                        *((uint32*) out.ptr) = (uint32) *((uint64*) data.ptr); 
break;

                default:
                        abort_compile(RDEF_COMPILE_ERR, "cannot cast to this 
type");
        }

        free_mem(data.ptr);
        return out;
}

//-------------------------------------------------------------------------- 
----

static data_t cast_to_uint64(type_t new_type, data_t data)
{
        data_t out = make_data(sizeof(uint64), new_type);

        switch (data.type.code)
        {
                case B_INT8_TYPE:
                case B_UINT8_TYPE:
                        *((uint64*) out.ptr) = (uint64) *((uint8*) data.ptr); 
break;

                case B_INT16_TYPE:
                case B_UINT16_TYPE:
                        *((uint64*) out.ptr) = (uint64) *((uint16*) data.ptr); 
break;

                case B_INT32_TYPE:
                case B_UINT32_TYPE:
                case B_SIZE_T_TYPE:
                case B_SSIZE_T_TYPE:
                case B_TIME_TYPE:
                        *((uint64*) out.ptr) = (uint64) *((uint32*) data.ptr); 
break;

                case B_INT64_TYPE:
                case B_UINT64_TYPE:
                case B_OFF_T_TYPE:
                        *((uint64*) out.ptr) = (uint64) *((uint64*) data.ptr); 
break;

                default:
                        abort_compile(RDEF_COMPILE_ERR, "cannot cast to this 
type");
        }

        free_mem(data.ptr);
        return out;
}

//-------------------------------------------------------------------------- 
----

static data_t cast_to_float(type_t new_type, data_t data)
{
        data_t out = make_data(sizeof(float), new_type);

        switch (data.type.code)
        {
                case B_INT8_TYPE:
                case B_UINT8_TYPE:
                        *((float*) out.ptr) = (float) *((uint8*) data.ptr); 
break;

                case B_INT16_TYPE:
                case B_UINT16_TYPE:
                        *((float*) out.ptr) = (float) *((uint16*) data.ptr); 
break;

                case B_INT32_TYPE:
                case B_UINT32_TYPE:
                case B_SIZE_T_TYPE:
                case B_SSIZE_T_TYPE:
                case B_TIME_TYPE:
                        *((float*) out.ptr) = (float) *((uint32*) data.ptr); 
break;

                case B_INT64_TYPE:
                case B_UINT64_TYPE:
                case B_OFF_T_TYPE:
                        *((float*) out.ptr) = (float) *((uint64*) data.ptr); 
break;

                case B_DOUBLE_TYPE:
                        *((float*) out.ptr) = (float) *((double*) data.ptr); 
break;

                default:
                        abort_compile(RDEF_COMPILE_ERR, "cannot cast to this 
type");
        }

        free_mem(data.ptr);
        return out;
}

//-------------------------------------------------------------------------- 
----

static data_t cast_to_double(type_t new_type, data_t data)
{
        data_t out = make_data(sizeof(double), new_type);

        switch (data.type.code)
        {
                case B_INT8_TYPE:
                case B_UINT8_TYPE:
                        *((double*) out.ptr) = (double) *((uint8*) data.ptr); 
break;

                case B_INT16_TYPE:
                case B_UINT16_TYPE:
                        *((double*) out.ptr) = (double) *((uint16*) data.ptr); 
break;

                case B_INT32_TYPE:
                case B_UINT32_TYPE:
                case B_SIZE_T_TYPE:
                case B_SSIZE_T_TYPE:
                case B_TIME_TYPE:
                        *((double*) out.ptr) = (double) *((uint32*) data.ptr); 
break;

                case B_INT64_TYPE:
                case B_UINT64_TYPE:
                case B_OFF_T_TYPE:
                        *((double*) out.ptr) = (double) *((uint64*) data.ptr); 
break;

                case B_FLOAT_TYPE:
                        *((double*) out.ptr) = (double) *((float*) data.ptr); 
break;

                default:
                        abort_compile(RDEF_COMPILE_ERR, "cannot cast to this 
type");
        }

        free_mem(data.ptr);
        return out;
}

//-------------------------------------------------------------------------- 
----

data_t cast(type_t new_type, data_t data)
{
        if (same_type(new_type, data.type))  // you can't cast bool, string,
        {                                    // message, or user-defined type
                return data;                     // to another type, only to 
same
        }

        if (is_builtin_type(new_type))
        {
                switch (new_type.code)
                {
                        case B_INT8_TYPE:
                        case B_UINT8_TYPE:
                                return cast_to_uint8(new_type, data);

                        case B_INT16_TYPE:
                        case B_UINT16_TYPE:
                                return cast_to_uint16(new_type, data);

                        case B_INT32_TYPE:
                        case B_UINT32_TYPE:
                        case B_SIZE_T_TYPE:
                        case B_SSIZE_T_TYPE:
                        case B_TIME_TYPE:
                                return cast_to_uint32(new_type, data);

                        case B_INT64_TYPE:
                        case B_UINT64_TYPE:
                        case B_OFF_T_TYPE:
                                return cast_to_uint64(new_type, data);

                        case B_FLOAT_TYPE:
                                return cast_to_float(new_type, data);

                        case B_DOUBLE_TYPE:
                                return cast_to_double(new_type, data);

                        case B_RAW_TYPE:
                                data.type = new_type;  // you can always cast
                                return data;           // anything to raw
                }
        }

        abort_compile(RDEF_COMPILE_ERR, "cannot cast to this type");
        return data;
}

//-------------------------------------------------------------------------- 
----

void add_resource(id_t id, type_code code, data_t data)
{
        if (!id.has_id)
        {
                id.id = data.type.def_id;
        }

        if (!id.has_name)
        {       
                id.name = data.type.def_name;
        }

        if (!(flags & RDEF_MERGE_RESOURCES) && rsrc.HasResource(code, id.id))
        {
                abort_compile(RDEF_COMPILE_ERR, "duplicate resource");
        }

        status_t err = rsrc.AddResource(code, id.id, data.ptr, data.size, 
id.name) 
;

        if (err != B_OK)
        {
                rdef_err = RDEF_WRITE_ERR;
                rdef_err_line = 0;
                strcpy(rdef_err_file, rsrc_file);
                sprintf(rdef_err_msg, "cannot add resource (%s)", 
strerror(err));
                abort_compile();
        }

        if (id.has_name)
        {
                free_mem(id.name);
        }

        free_mem(data.ptr);
}

//-------------------------------------------------------------------------- 
----

static void add_point_type()
{
        field_t* fields  = (field_t*) alloc_mem(2 * sizeof(field_t));
        fields[0].type   = get_type("float");
        fields[0].name   = "x";
        fields[0].resize = 0;
        fields[0].data   = make_default(fields[0].type);
        fields[1].type   = get_type("float");
        fields[1].name   = "y";
        fields[1].resize = 0;
        fields[1].data   = make_default(fields[1].type);

        type_t type;
        type.code     = B_POINT_TYPE;
        type.name     = "point";
        type.fields   = fields;
        type.count    = 2;
        type.def_id   = 1;
        type.def_name = NULL;

        type_table.insert(make_pair(type.name, type));
}

//-------------------------------------------------------------------------- 
----

static void add_rect_type()
{
        field_t* fields  = (field_t*) alloc_mem(4 * sizeof(field_t));
        fields[0].type   = get_type("float");
        fields[0].name   = "left";
        fields[0].resize = 0;
        fields[0].data   = make_default(fields[0].type);
        fields[1].type   = get_type("float");
        fields[1].name   = "top";
        fields[1].resize = 0;
        fields[1].data   = make_default(fields[1].type);
        fields[2].type   = get_type("float");
        fields[2].name   = "right";
        fields[2].resize = 0;
        fields[2].data   = make_default(fields[2].type);
        fields[3].type   = get_type("float");
        fields[3].name   = "bottom";
        fields[3].resize = 0;
        fields[3].data   = make_default(fields[3].type);

        type_t type;
        type.code     = B_RECT_TYPE;
        type.name     = "rect";
        type.fields   = fields;
        type.count    = 4;
        type.def_id   = 1;
        type.def_name = NULL;

        type_table.insert(make_pair(type.name, type));
}

//-------------------------------------------------------------------------- 
----

static void add_rgb_color_type()
{
        field_t* fields  = (field_t*) alloc_mem(4 * sizeof(field_t));
        fields[0].type   = get_type("uint8");
        fields[0].name   = "red";
        fields[0].resize = 0;
        fields[0].data   = make_default(fields[0].type);
        fields[1].type   = get_type("uint8");
        fields[1].name   = "green";
        fields[1].resize = 0;
        fields[1].data   = make_default(fields[1].type);
        fields[2].type   = get_type("uint8");
        fields[2].name   = "blue";
        fields[2].resize = 0;
        fields[2].data   = make_default(fields[2].type);
        fields[3].type   = get_type("uint8");
        fields[3].name   = "alpha";
        fields[3].resize = 0;
        fields[3].data   = make_default(fields[3].type);

        *((uint8*) fields[3].data.ptr) = 255;

        type_t type;
        type.code     = B_RGB_COLOR_TYPE;
        type.name     = "rgb_color";
        type.fields   = fields;
        type.count    = 4;
        type.def_id   = 1;
        type.def_name = NULL;

        type_table.insert(make_pair(type.name, type));
}

//-------------------------------------------------------------------------- 
----

static void add_app_signature_type()
{
        field_t* fields  = (field_t*) alloc_mem(1 * sizeof(field_t));
        fields[0].type   = get_type("string");
        fields[0].name   = "signature";
        fields[0].resize = 0;
        fields[0].data   = make_default(fields[0].type);

        type_t type;
        type.code     = 'MIMS';
        type.name     = "app_signature";
        type.fields   = fields;
        type.count    = 1;
        type.def_id   = 1;
        type.def_name = "BEOS:APP_SIG";

        type_table.insert(make_pair(type.name, type));
}

//-------------------------------------------------------------------------- 
----

static void add_app_flags()
{
        field_t* fields  = (field_t*) alloc_mem(1 * sizeof(field_t));
        fields[0].type   = get_type("uint32");
        fields[0].name   = "flags";
        fields[0].resize = 0;
        fields[0].data   = make_default(fields[0].type);

        type_t type;
        type.code     = 'APPF';
        type.name     = "app_flags";
        type.fields   = fields;
        type.count    = 1;
        type.def_id   = 1;
        type.def_name = "BEOS:APP_FLAGS";

        type_table.insert(make_pair(type.name, type));
}

//-------------------------------------------------------------------------- 
----

static void add_app_version()
{
        field_t* fields  = (field_t*) alloc_mem(7 * sizeof(field_t));
        fields[0].type   = get_type("uint32");
        fields[0].name   = "major";
        fields[0].resize = 0;
        fields[0].data   = make_default(fields[0].type);
        fields[1].type   = get_type("uint32");
        fields[1].name   = "middle";
        fields[1].resize = 0;
        fields[1].data   = make_default(fields[1].type);
        fields[2].type   = get_type("uint32");
        fields[2].name   = "minor";
        fields[2].resize = 0;
        fields[2].data   = make_default(fields[2].type);
        fields[3].type   = get_type("uint32");
        fields[3].name   = "variety";
        fields[3].resize = 0;
        fields[3].data   = make_default(fields[3].type);
        fields[4].type   = get_type("uint32");
        fields[4].name   = "internal";
        fields[4].resize = 0;
        fields[4].data   = make_default(fields[4].type);
        fields[5].type   = get_type("string");
        fields[5].name   = "short_info";
        fields[5].resize = 64;
        fields[5].data   = make_data(fields[5].resize, fields[5].type);
        fields[6].type   = get_type("string");
        fields[6].name   = "long_info";
        fields[6].resize = 256;
        fields[6].data   = make_data(fields[6].resize, fields[6].type);

        memset(fields[5].data.ptr, '\0', fields[5].data.size);
        memset(fields[6].data.ptr, '\0', fields[6].data.size);

        type_t type;
        type.code     = 'APPV';
        type.name     = "app_version";
        type.fields   = fields;
        type.count    = 7;
        type.def_id   = 1;
        type.def_name = "BEOS:APP_VERSION";

        type_table.insert(make_pair(type.name, type));
}

//-------------------------------------------------------------------------- 
----

static void add_large_icon()
{
        field_t* fields  = (field_t*) alloc_mem(1 * sizeof(field_t));
        fields[0].type   = get_type("raw");
        fields[0].name   = "icon";
        fields[0].resize = 1024;
        fields[0].data   = make_data(fields[0].resize, fields[0].type);

        type_t type;
        type.code     = 'ICON';
        type.name     = "large_icon";
        type.fields   = fields;
        type.count    = 1;
        type.def_id   = 101;
        type.def_name = "BEOS:L:STD_ICON";

        type_table.insert(make_pair(type.name, type));
}

//-------------------------------------------------------------------------- 
----

static void add_mini_icon()
{
        field_t* fields  = (field_t*) alloc_mem(1 * sizeof(field_t));
        fields[0].type   = get_type("raw");
        fields[0].name   = "icon";
        fields[0].resize = 256;
        fields[0].data   = make_data(fields[0].resize, fields[0].type);

        type_t type;
        type.code     = 'MICN';
        type.name     = "mini_icon";
        type.fields   = fields;
        type.count    = 1;
        type.def_id   = 101;
        type.def_name = "BEOS:M:STD_ICON";

        type_table.insert(make_pair(type.name, type));
}

//-------------------------------------------------------------------------- 
----

static void add_file_types()
{
        field_t* fields  = (field_t*) alloc_mem(1 * sizeof(field_t));
        fields[0].type   = get_type("message");
        fields[0].name   = "types";
        fields[0].resize = 0;
        fields[0].data   = make_default(fields[0].type);

        type_t type;
        type.code     = 'MSGG';
        type.name     = "file_types";
        type.fields   = fields;
        type.count    = 1;
        type.def_id   = 1;
        type.def_name = "BEOS:FILE_TYPES";

        type_table.insert(make_pair(type.name, type));
}

//-------------------------------------------------------------------------- 
----

void init_parser()
{
        add_builtin_type(B_BOOL_TYPE,    "bool");
        add_builtin_type(B_INT8_TYPE,    "int8");
        add_builtin_type(B_UINT8_TYPE,   "uint8");
        add_builtin_type(B_INT16_TYPE,   "int16");
        add_builtin_type(B_UINT16_TYPE,  "uint16");
        add_builtin_type(B_INT32_TYPE,   "int32");
        add_builtin_type(B_UINT32_TYPE,  "uint32");
        add_builtin_type(B_SIZE_T_TYPE,  "size_t");
        add_builtin_type(B_SSIZE_T_TYPE, "ssize_t");
        add_builtin_type(B_TIME_TYPE,    "time_t");
        add_builtin_type(B_INT64_TYPE,   "int64");
        add_builtin_type(B_UINT64_TYPE,  "uint64");
        add_builtin_type(B_OFF_T_TYPE,   "off_t");
        add_builtin_type(B_FLOAT_TYPE,   "float");
        add_builtin_type(B_DOUBLE_TYPE,  "double");
        add_builtin_type(B_STRING_TYPE,  "string");
        add_builtin_type(B_RAW_TYPE,     "raw");
        add_builtin_type(B_RAW_TYPE,     "buffer");
        add_builtin_type(B_MESSAGE_TYPE, "message");

        add_point_type();
        add_rect_type();
        add_rgb_color_type();
        add_app_signature_type();
        add_app_flags();
        add_app_version();
        add_large_icon();
        add_mini_icon();
        add_file_types();
}

//-------------------------------------------------------------------------- 
----

void clean_up_parser()
{
        // The symbol table entries have several malloc'ed objects associated
        // with them (such as their name). They were allocated with alloc_mem(),
        // so we don't need to free them here; compile.cpp already does that
        // when it cleans up. However, we do need to remove the entries from
        // the tables, otherwise they will still be around the next time we are
        // asked to compile something. In DEBUG mode, however, we do free these
        // items, so they don't show up in the mem leak statistics.

#ifdef DEBUG
        for (sym_iter_t i = symbol_table.begin(); i != symbol_table.end(); ++i)
        {
                free_mem(i->first);
        }

        for (type_iter_t i = type_table.begin(); i != type_table.end(); ++i)
        {
                free_mem(i->first);
                type_t type = i->second;
                for (int32 t = 0; t < type.count; ++t)
                {
                        free_mem(type.fields[t].name);
                        free_mem(type.fields[t].data.ptr);
                }
                free_mem(type.fields);
                free_mem(type.name);
                free_mem(type.def_name);
        }
#endif

        symbol_table.clear();
        type_table.clear();
}

//-------------------------------------------------------------------------- 
----
]])


m4_define([b4_post_prologue],
          [[]])


m4_define([b4_table_ninf],
          [[-1]])


m4_define([b4_prhs],
          [[     0,     0,     3,     4,     7,    10,    13,    18,    24, 
   31,
      33,    37,    39,    41,    45,    54,    62,    66,    68,    71,
      76,    82,    90,    95,   101,   109,   110,   113,   117,   123,
     127,   133,   137,   142,   146,   148,   152,   155,   159,   161,
     169,   176,   181,   186,   190,   192,   196,   198,   202,   207,
     212,   218,   224,   233,   243,   254,   259,   263,   266,   268,
     272,   274,   278,   280,   282,   284,   286,   288,   290,   292,
     294,   296,   298,   301,   304,   307,   310,   313,   316,   319,
     322,   325,   329,   331,   333,   336,   338,   340,   343,   345]])


m4_define([b4_check],
          [[    11,    30,    10,    88,     5,     6,     7,    24,     9, 
   10,
      11,    12,    13,    14,    15,    11,    17,    17,    29,     9,
      21,    13,    11,    24,    13,    26,    15,    17,    20,    37,
      26,    60,     5,     6,     7,    11,    25,    26,    15,    17,
      13,    25,    15,    16,    55,    18,    24,    24,    59,    57,
      20,    80,     5,     6,     7,    25,     9,    10,    11,    12,
      13,    14,    15,    16,    20,    20,    13,    96,   153,    25,
      25,    24,    15,    26,    82,    18,    15,    16,   163,     5,
       6,     7,    90,    11,    12,   114,     5,     6,     7,    15,
     175,    18,    15,    20,   179,    18,    15,    16,   109,     5,
       6,     7,    19,     9,    10,    11,    12,    13,    14,    15,
     139,    17,    21,    22,   122,   126,   127,    18,    24,    20,
      26,    15,    18,   134,    20,   136,     5,     6,     7,    17,
       9,    10,    11,    12,    13,    14,    15,    21,   149,    18,
      17,   152,     5,     6,     7,    24,    19,    26,   159,    18,
      13,    20,    15,    16,    13,   166,     5,     6,     7,    13,
       9,    10,    11,    12,    13,    14,    15,    19,    18,    18,
      20,   182,    18,    13,    20,    24,    15,    26,     5,     6,
       7,    25,     9,    10,    11,    12,    13,    14,    15,    18,
       0,    20,    25,     3,     4,    17,    19,    24,     8,    26,
       5,     6,     7,    21,     9,    10,    11,    12,    13,    14,
      15,    18,    18,    20,    20,    18,    18,    20,    20,    24,
      13,    26,     5,     6,     7,    25,     9,    10,    11,    12,
      13,    14,    15,    25,     5,     6,     7,    25,     5,     6,
       7,    15,    13,    26,    15,    16,    13,    18,    15,    19,
      15,    13,    25,    21,    17,    21,    25,    15,    19,    19,
      17,    11,    21,    19,    15,    17,    85,    21,    23,    17,
       5,   114,   139,    37,   131,   136,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,    37,    -1,
      37,    37]])


m4_define([b4_nterms_number],
          [[25]])


m4_define([b4_rline_max],
          [[442]])


m4_define([b4_dprec],
          [[     0,     0,     0,     0,     0,     0,     0,     0,     0, 
    0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0]])


m4_define([b4_rline],
          [[     0,   128,   128,   129,   130,   131,   135,   136,   137, 
  141,
     145,   146,   150,   155,   164,   168,   175,   176,   180,   187,
     194,   201,   211,   215,   219,   226,   230,   234,   239,   244,
     258,   264,   272,   273,   274,   275,   276,   280,   281,   285,
     291,   297,   303,   304,   305,   309,   310,   314,   319,   324,
     330,   339,   346,   355,   363,   376,   377,   382,   386,   394,
     395,   399,   400,   404,   405,   406,   407,   408,   409,   410,
     411,   412,   413,   414,   415,   416,   417,   418,   419,   420,
     421,   425,   429,   430,   431,   432,   436,   437,   441,   442]])


m4_define([b4_prhs_min],
          [[0]])


m4_define([b4_debug],
          [[0]])


m4_define([b4_name],
          [[Parser]])


m4_define([b4_translate_max],
          [[26]])


m4_define([b4_r1_min],
          [[0]])


m4_define([b4_user_token_number_max],
          [[271]])


m4_define([b4_prefix],
          [[yy]])


m4_define([b4_pgoto_max],
          [[265]])


m4_define([b4_rules_number],
          [[89]])


m4_define([b4_output_prefix],
          [[../../../objects/x86.R1/tools/rc/parser]])


m4_define([b4_output_header_name],
          [[../../../objects/x86.R1/tools/rc/parser.hpp]])


m4_define([b4_ltype],
          [[yyltype]])


m4_define([b4_linef],
          [[#line %d %s
]])


m4_define([b4_r2_min],
          [[0]])


m4_define([b4_pact],
          [[   -86,   190,   -86,   -86,   -17,   -17,   -86,     0,   -86, 
  -86,
      11,    47,    61,    57,   -86,    16,    30,   -86,    24,    44,
      23,    10,    22,    53,   -86,   -86,   -86,   -86,    94,   173,
      81,    72,   -86,   -86,   -86,   -86,    83,   217,   -86,   -86,
     112,   106,   116,   127,    73,   -86,   -86,   141,   -86,   -86,
     146,   -86,   123,     8,   160,   121,    27,     4,   -86,   151,
      74,   -86,   148,   161,   -86,   -86,   -86,   156,   167,   -86,
     -86,   -86,   -86,   -86,   -86,   -86,   -86,   -86,   -86,   -86,
      74,   178,     4,   -86,   177,    77,   200,   208,   137,    45,
       4,   -86,   -86,    99,   -86,   182,   233,   -86,   104,   -86,
     207,   212,    -1,   -86,   131,   -86,   -86,   -86,   -86,   173,
     -86,   150,   -86,   226,    74,   -86,   -86,   230,   -86,   -86,
     -86,   154,     4,   235,   227,   -86,   173,   173,   232,   238,
     -86,   137,   234,   237,   173,   -86,   195,   239,   240,    74,
      91,   171,   -86,   -86,   231,   243,   242,   -86,   -86,   173,
     241,   -86,   173,   229,   -86,   -86,   -86,   -86,   -86,   173,
/bin/m4: /boot/home/temp/share/bison/yacc.c: No such file or directory
     250,   244,   249,   137,   248,   -86,   173,   -86,   -86,   193,
     -86,   245,   -86,   252,   194,   137,   -86,   -86,   246,   137,
     -86,   197,   173,   198,   -86,   -86,   -86]])


m4_define([b4_dprec_min],
          [[0]])


m4_define([b4_defact_min],
          [[0]])


m4_define([b4_defines_flag],
          [[0]])


m4_define([b4_conflict_list_heads_max],
          [[0]])


m4_define([b4_merger_max],
          [[0]])


m4_define([b4_undef_token_number],
          [[2]])


m4_define([b4_stype_line],
          [[95]])


m4_define([b4_prhs_max],
          [[345]])


m4_define([b4_r1_max],
          [[51]])


m4_define([b4_toknum_min],
          [[0]])


m4_define([b4_conflicting_rules_min],
          [[0]])


m4_define([b4_r1],
          [[     0,    27,    28,    28,    28,    28,    29,    29,    29, 
   30,
      31,    31,    32,    32,    33,    33,    34,    34,    35,    35,
      35,    35,    36,    36,    36,    37,    37,    37,    37,    37,
      37,    37,    38,    38,    38,    38,    38,    39,    39,    40,
      40,    40,    40,    40,    40,    41,    41,    42,    42,    42,
      42,    43,    43,    43,    43,    44,    44,    44,    44,    45,
      45,    46,    46,    47,    47,    47,    47,    47,    47,    47,
      47,    47,    47,    47,    47,    47,    47,    47,    47,    47,
      47,    48,    49,    49,    49,    49,    50,    50,    51,    51]])


m4_define([b4_r2],
          [[     0,     2,     0,     2,     2,     2,     4,     5,     6, 
    1,
       3,     1,     1,     3,     8,     7,     3,     1,     2,     4,
       5,     7,     4,     5,     7,     0,     2,     3,     5,     3,
       5,     3,     4,     3,     1,     3,     2,     3,     1,     7,
       6,     4,     4,     3,     1,     3,     1,     3,     4,     4,
       5,     5,     8,     9,    10,     4,     3,     2,     1,     3,
       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
       1,     1,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     3,     1,     1,     2,     1,     1,     2,     1,     2]])


m4_define([b4_pre_prologue],
          [[#line 23 "../../../src/tools/rc/parser.y"

//-------------------------------------------------------------------------- 
----

#include <Message.h>

#include <map>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#include "rdef.h"
#include "compile.h"
#include "private.h"

#define YYERROR_VERBOSE

static void yyerror(char*);

struct ident_compare_t  // allows the maps to compare identifier names
{
        bool operator () (char* s1, char* s2) const
        {
                return strcmp(s1, s2) < 0;
        }
};

typedef std::map<char*, int32, ident_compare_t> sym_tab_t;
typedef sym_tab_t::iterator sym_iter_t;

static sym_tab_t symbol_table;  // symbol table for enums
static int32 enum_cnt;          // counter for enum symbols without id

static void add_symbol(char*, int32);
static int32 get_symbol(char*);

typedef std::map<char*, type_t, ident_compare_t> type_tab_t;
typedef type_tab_t::iterator type_iter_t;

static type_tab_t type_table;  // symbol table for data types

static void add_user_type(id_t, type_code, char*, list_t);

static data_t make_data(size_t, type_t);
static data_t make_bool(bool);
static data_t make_int(uint64);
static data_t make_float(double);

static data_t import_data(char*);
static data_t resize_data(data_t, size_t);

static BMessage* make_msg(list_t);
static data_t flatten_msg(BMessage*);

static data_t make_default(type_t);
static data_t make_type(char*, list_t);

static list_t make_field_list(field_t);
static list_t concat_field_list(list_t, field_t);
static list_t make_data_list(data_t);
static list_t concat_data_list(list_t, data_t);
static data_t concat_data(data_t, data_t);

static data_t cast(type_t, data_t);

static void add_resource(id_t, type_code, data_t);

//-------------------------------------------------------------------------- 
----
]])


m4_define([b4_check_min],
          [[-1]])


m4_define([b4_states_number],
          [[187]])


m4_define([b4_r2_max],
          [[10]])


m4_define([b4_dprec_max],
          [[0]])


m4_define([b4_defgoto],
          [[    -1,     1,     6,     7,    44,    45,     8,   111,   112, 
    9,
      11,    32,    93,    33,    98,    99,    34,    35,   104,   105,
      61,    37,   100,    38,    39]])


m4_define([b4_defact_max],
          [[89]])


m4_define([b4_stos],
          [[     0,    28,     0,     3,     4,     8,    29,    30,    33, 
   36,
      24,    37,    37,    17,    11,    13,    15,    25,    26,    50,
       5,     6,     7,     9,    10,    12,    13,    14,    15,    16,
      24,    26,    38,    40,    43,    44,    47,    48,    50,    51,
      15,    16,    15,    18,    31,    32,    25,    20,    25,    11,
      20,    25,    15,    24,     9,    17,    17,    24,    13,    17,
      24,    47,    47,     5,     6,     7,    15,    16,    49,    12,
      19,    10,    13,    14,    38,    40,    43,    44,    50,    51,
      17,    15,    21,    19,    18,    20,    13,    13,    17,    13,
      20,    13,    18,    39,    47,    13,    16,    18,    41,    42,
      49,    50,    15,    18,    45,    46,    47,    19,    15,    25,
      25,    34,    35,    49,    17,    50,    19,    18,    32,    25,
      25,    41,    20,    25,    50,    18,    20,    21,    13,    49,
      18,    20,    13,    25,    21,    18,    20,    47,    18,    20,
      15,    34,    19,    18,    50,    15,    25,    47,    47,    21,
      13,    42,    21,    17,    47,    46,    19,    19,    35,    21,
      22,    18,    25,    17,    15,    47,    21,    47,    18,    41,
      47,    11,    19,    15,    41,    17,    47,    18,    23,    17,
      18,    41,    21,    41,    18,    47,    18]])


m4_define([b4_final_state_number],
          [[2]])


m4_define([b4_defgoto_min],
          [[-1]])


m4_define([b4_maxdepth],
          [[10000]])


m4_define([b4_locations_flag],
          [[0]])


m4_define([b4_rhs_min],
          [[-1]])


m4_define([b4_pact_min],
          [[-86]])


m4_define([b4_conflicting_rules],
          [[     0]])


m4_wrap([m4_divert_pop(0)])
m4_divert_push(0)C++ ../../../objects/x86.R1/tools/rc/parser.o gcc: 
../../../objects/x86.R1/tools/rc/parser.cpp: No such file or directory
gcc: No input files

        gcc  -c "../../../objects/x86.R1/tools/rc/parser.cpp"  -nostdinc -Wall 
- 
Wno-multichar -Wmissing-prototypes -Wno-ctor-dtor-privacy -Woverloaded- 
virtual -Wpointer-arith -Wcast-align -Wsign-compare -O2   - 
I../../../src/tools/rc -I../../../objects/x86.R1/tools/rc - 
I../../../headers -I../../../headers/posix -I../../../headers/os - 
I../../../headers/os/add-ons -I../../../headers/os/add-ons/file_system - 
I../../../headers/os/add-ons/graphics -I../../../headers/os/add- 
ons/input_server -I../../../headers/os/add-ons/screen_saver - 
I../../../headers/os/add-ons/tracker -I../../../headers/os/app - 
I../../../headers/os/device -I../../../headers/os/drivers - 
I../../../headers/os/game -I../../../headers/os/interface - 
I../../../headers/os/kernel -I../../../headers/os/media - 
I../../../headers/os/mail -I../../../headers/os/midi - 
I../../../headers/os/midi2 -I../../../headers/os/net - 
I../../../headers/os/storage -I../../../headers/os/support - 
I../../../headers/os/translation -I/boot/develop/headers/posix - 
I/boot/develop/headers/cpp -I/boot/develop/tools/gnupro/lib/gcc-lib/i586- 
beos/2.9-beos-991026/include  -o 
"../../../objects/x86.R1/tools/rc/parser.o"  ;

...failed C++ ../../../objects/x86.R1/tools/rc/parser.o ...
C++ ../../../objects/x86.R1/tools/rc/rdef.o ...skipped librdef.so for lack 
of <src!tools!rc>compile.o...
...skipped <boot!home!config!lib>librdef.so for lack of librdef.so...
C++ ../../../objects/x86.R1/tools/rc/rc.o MkDir1 
../../../distro/x86.R1/beos/bin ...skipped rc for lack of 
<boot!home!config!lib>librdef.so...
...failed updating 3 target(s)...
...skipped 4 target(s)...
...updated 6 target(s)...
$




Other related posts: