diff options
author | svenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-08-12 19:04:46 +0000 |
---|---|---|
committer | svenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-08-12 19:04:46 +0000 |
commit | 3aded373f64f59ebb8c97feb6ed4a5990a63e154 (patch) | |
tree | cad09178f679ef9c43482cd3664af69e33f6f3fb /packages/fcl-res | |
parent | 5eea3a8afb61156eefbea8cb4296eb9951ecbb00 (diff) | |
download | fpc-3aded373f64f59ebb8c97feb6ed4a5990a63e154.tar.gz |
fcl-res: legacy resource flags
Reintegrate fpcres-rc branch by Martok
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@46374 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-res')
-rw-r--r-- | packages/fcl-res/src/rclex.inc | 14 | ||||
-rw-r--r-- | packages/fcl-res/src/rclex.l | 14 | ||||
-rw-r--r-- | packages/fcl-res/src/rcparser.pas | 583 | ||||
-rw-r--r-- | packages/fcl-res/src/rcparser.y | 22 |
4 files changed, 472 insertions, 161 deletions
diff --git a/packages/fcl-res/src/rclex.inc b/packages/fcl-res/src/rclex.inc index 898b68a1fc..b3da770f61 100644 --- a/packages/fcl-res/src/rclex.inc +++ b/packages/fcl-res/src/rclex.inc @@ -7,10 +7,20 @@ var strbuf: string; const - KeywordDefs: array [0..0] of TIdentMapEntry = ( - (Value: _LANGUAGE; Name: 'LANGUAGE') + KeywordDefs: array [0..9] of TIdentMapEntry = ( + (Value: _LANGUAGE; Name: 'LANGUAGE'), + (Value: _CHARACTERISTICS; Name: 'CHARACTERISTICS'), + (Value: _VERSION; Name: 'VERSION'), + (Value: _MOVEABLE; Name: 'MOVEABLE'), + (Value: _FIXED; Name: 'FIXED'), + (Value: _PURE; Name: 'PURE'), + (Value: _IMPURE; Name: 'IMPURE'), + (Value: _PRELOAD; Name: 'PRELOAD'), + (Value: _LOADONCALL; Name: 'LOADONCALL'), + (Value: _DISCARDABLE; Name: 'DISCARDABLE') ); + function KeywordToInt(k: string; out kw: integer): boolean; var i: integer; diff --git a/packages/fcl-res/src/rclex.l b/packages/fcl-res/src/rclex.l index 67d14e9ee5..0c5a2211a6 100644 --- a/packages/fcl-res/src/rclex.l +++ b/packages/fcl-res/src/rclex.l @@ -4,10 +4,20 @@ var strbuf: string; const - KeywordDefs: array [0..0] of TIdentMapEntry = ( - (Value: _LANGUAGE; Name: 'LANGUAGE') + KeywordDefs: array [0..9] of TIdentMapEntry = ( + (Value: _LANGUAGE; Name: 'LANGUAGE'), + (Value: _CHARACTERISTICS; Name: 'CHARACTERISTICS'), + (Value: _VERSION; Name: 'VERSION'), + (Value: _MOVEABLE; Name: 'MOVEABLE'), + (Value: _FIXED; Name: 'FIXED'), + (Value: _PURE; Name: 'PURE'), + (Value: _IMPURE; Name: 'IMPURE'), + (Value: _PRELOAD; Name: 'PRELOAD'), + (Value: _LOADONCALL; Name: 'LOADONCALL'), + (Value: _DISCARDABLE; Name: 'DISCARDABLE') ); + function KeywordToInt(k: string; out kw: integer): boolean; var i: integer; diff --git a/packages/fcl-res/src/rcparser.pas b/packages/fcl-res/src/rcparser.pas index b26c36d40d..90401c3ae5 100644 --- a/packages/fcl-res/src/rcparser.pas +++ b/packages/fcl-res/src/rcparser.pas @@ -155,8 +155,16 @@ const _QUOTEDSTR = 262; const _BEGIN = 263; const _END = 264; const _LANGUAGE = 265; -const _VERSION = 266; -const _ID = 267; +const _CHARACTERISTICS = 266; +const _VERSION = 267; +const _MOVEABLE = 268; +const _FIXED = 269; +const _PURE = 270; +const _IMPURE = 271; +const _PRELOAD = 272; +const _LOADONCALL = 273; +const _DISCARDABLE = 274; +const _ID = 275; type YYSType = record case Integer of 1 : ( yyString : String ); @@ -214,54 +222,89 @@ begin yyval.yyTResourceDesc:= TResourceDesc.Create(yyv[yysp-0].yyString); end; 12 : begin - language:= MakeLangID(yyv[yysp-2].yyrcnumtype.v, yyv[yysp-0].yyrcnumtype.v); + yyval := yyv[yysp-1]; end; 13 : begin - yyval := yyv[yysp-0]; + aktresource.LangID:= MakeLangID(yyv[yysp-2].yyrcnumtype.v, yyv[yysp-0].yyrcnumtype.v); end; 14 : begin - yyval.yyrcnumtype.v:= StrToInt(yytext); yyval.yyrcnumtype.long:= False; + aktresource.Characteristics:= yyv[yysp-0].yyrcnumtype.v; end; 15 : begin - yyval.yyrcnumtype.v:= StrToInt(Copy(yytext,1,length(yytext)-1)); yyval.yyrcnumtype.long:= True; + aktresource.Version:= yyv[yysp-0].yyrcnumtype.v; end; 16 : begin - yyval.yyrcnumtype.v:= StrToInt('$'+Copy(yytext,3,Maxint)); yyval.yyrcnumtype.long:= False; + aktresource.MemoryFlags:= aktresource.MemoryFlags or MF_MOVEABLE; end; 17 : begin - yyval.yyrcnumtype.v:= StrToInt('$'+Copy(yytext,3,length(yytext)-3)); yyval.yyrcnumtype.long:= True; + aktresource.MemoryFlags:= aktresource.MemoryFlags and not MF_MOVEABLE; end; 18 : begin - yyval.yyString:= yytext; + aktresource.MemoryFlags:= aktresource.MemoryFlags or MF_PURE; end; 19 : begin - yyval.yyString:= yytext; + aktresource.MemoryFlags:= aktresource.MemoryFlags and not MF_PURE; end; 20 : begin - yyval.yyString:= yytext; + aktresource.MemoryFlags:= aktresource.MemoryFlags or MF_PRELOAD; end; 21 : begin - yyval.yyString:= yytext; + aktresource.MemoryFlags:= aktresource.MemoryFlags and not MF_PRELOAD; end; 22 : begin - yyval.yyTMemoryStream:= TMemoryStream.Create; + aktresource.MemoryFlags:= aktresource.MemoryFlags or MF_DISCARDABLE; end; 23 : begin - yyval := yyv[yysp-1]; end; 24 : begin - yyval.yyTMemoryStream:= yyv[yysp-1].yyTMemoryStream; + language:= MakeLangID(yyv[yysp-2].yyrcnumtype.v, yyv[yysp-0].yyrcnumtype.v); end; 25 : begin - yyval := yyv[yysp-3]; + yyval := yyv[yysp-0]; end; 26 : begin + yyval.yyrcnumtype.v:= StrToInt(yytext); yyval.yyrcnumtype.long:= False; + end; + 27 : begin + yyval.yyrcnumtype.v:= StrToInt(Copy(yytext,1,length(yytext)-1)); yyval.yyrcnumtype.long:= True; + end; + 28 : begin + yyval.yyrcnumtype.v:= StrToInt('$'+Copy(yytext,3,Maxint)); yyval.yyrcnumtype.long:= False; + end; + 29 : begin + yyval.yyrcnumtype.v:= StrToInt('$'+Copy(yytext,3,length(yytext)-3)); yyval.yyrcnumtype.long:= True; + end; + 30 : begin + yyval.yyString:= yytext; + end; + 31 : begin + yyval.yyString:= yytext; + end; + 32 : begin + yyval.yyString:= yytext; + end; + 33 : begin + yyval.yyString:= yytext; + end; + 34 : begin + yyval.yyTMemoryStream:= TMemoryStream.Create; + end; + 35 : begin + yyval := yyv[yysp-1]; + end; + 36 : begin + yyval.yyTMemoryStream:= yyv[yysp-1].yyTMemoryStream; + end; + 37 : begin + yyval := yyv[yysp-3]; + end; + 38 : begin yyval.yyTMemoryStream:= yyv[yysp-1].yyTMemoryStream; yyval.yyTMemoryStream.WriteBuffer(yyv[yysp-0].yyString[1], Length(yyv[yysp-0].yyString)); end; - 27 : begin + 39 : begin yyval.yyTMemoryStream:= yyv[yysp-1].yyTMemoryStream; if yyv[yysp-0].yyrcnumtype.long then @@ -284,10 +327,10 @@ type YYARec = record const -yynacts = 39; -yyngotos = 27; -yynstates = 36; -yynrules = 27; +yynacts = 120; +yyngotos = 40; +yynstates = 54; +yynrules = 39; yya : array [1..yynacts] of YYARec = ( { 0: } @@ -299,7 +342,7 @@ yya : array [1..yynacts] of YYARec = ( ( sym: 261; act: 12 ), ( sym: 262; act: 13 ), ( sym: 265; act: 14 ), - ( sym: 267; act: 15 ), + ( sym: 275; act: 15 ), { 2: } { 3: } { 4: } @@ -310,7 +353,7 @@ yya : array [1..yynacts] of YYARec = ( ( sym: 260; act: 11 ), ( sym: 261; act: 12 ), ( sym: 262; act: 13 ), - ( sym: 267; act: 15 ), + ( sym: 275; act: 15 ), { 7: } { 8: } { 9: } @@ -326,45 +369,144 @@ yya : array [1..yynacts] of YYARec = ( { 15: } { 16: } ( sym: 262; act: -6 ), + ( sym: 265; act: -6 ), + ( sym: 266; act: -6 ), + ( sym: 267; act: -6 ), + ( sym: 268; act: -6 ), + ( sym: 269; act: -6 ), + ( sym: 270; act: -6 ), + ( sym: 271; act: -6 ), + ( sym: 272; act: -6 ), + ( sym: 273; act: -6 ), + ( sym: 274; act: -6 ), ( sym: 263; act: -8 ), { 17: } { 18: } ( sym: 44; act: 21 ), { 19: } - ( sym: 263; act: 22 ), + ( sym: 265; act: 23 ), + ( sym: 266; act: 24 ), + ( sym: 267; act: 25 ), + ( sym: 268; act: 26 ), + ( sym: 269; act: 27 ), + ( sym: 270; act: 28 ), + ( sym: 271; act: 29 ), + ( sym: 272; act: 30 ), + ( sym: 273; act: 31 ), + ( sym: 274; act: 32 ), + ( sym: 263; act: -23 ), { 20: } - ( sym: 262; act: 24 ), + ( sym: 265; act: 23 ), + ( sym: 266; act: 24 ), + ( sym: 267; act: 25 ), + ( sym: 268; act: 26 ), + ( sym: 269; act: 27 ), + ( sym: 270; act: 28 ), + ( sym: 271; act: 29 ), + ( sym: 272; act: 30 ), + ( sym: 273; act: 31 ), + ( sym: 274; act: 32 ), + ( sym: 262; act: -23 ), { 21: } ( sym: 258; act: 9 ), ( sym: 259; act: 10 ), ( sym: 260; act: 11 ), ( sym: 261; act: 12 ), { 22: } + ( sym: 263; act: 36 ), + ( sym: 265; act: 23 ), + ( sym: 266; act: 24 ), + ( sym: 267; act: 25 ), + ( sym: 268; act: 26 ), + ( sym: 269; act: 27 ), + ( sym: 270; act: 28 ), + ( sym: 271; act: 29 ), + ( sym: 272; act: 30 ), + ( sym: 273; act: 31 ), + ( sym: 274; act: 32 ), { 23: } + ( sym: 258; act: 9 ), + ( sym: 259; act: 10 ), + ( sym: 260; act: 11 ), + ( sym: 261; act: 12 ), { 24: } + ( sym: 258; act: 9 ), + ( sym: 259; act: 10 ), + ( sym: 260; act: 11 ), + ( sym: 261; act: 12 ), { 25: } -{ 26: } ( sym: 258; act: 9 ), ( sym: 259; act: 10 ), ( sym: 260; act: 11 ), ( sym: 261; act: 12 ), - ( sym: 262; act: 31 ), +{ 26: } { 27: } - ( sym: 44; act: 32 ), - ( sym: 264; act: 33 ), { 28: } { 29: } { 30: } { 31: } { 32: } { 33: } + ( sym: 262; act: 41 ), + ( sym: 265; act: 23 ), + ( sym: 266; act: 24 ), + ( sym: 267; act: 25 ), + ( sym: 268; act: 26 ), + ( sym: 269; act: 27 ), + ( sym: 270; act: 28 ), + ( sym: 271; act: 29 ), + ( sym: 272; act: 30 ), + ( sym: 273; act: 31 ), + ( sym: 274; act: 32 ), { 34: } +{ 35: } + ( sym: 265; act: 23 ), + ( sym: 266; act: 24 ), + ( sym: 267; act: 25 ), + ( sym: 268; act: 26 ), + ( sym: 269; act: 27 ), + ( sym: 270; act: 28 ), + ( sym: 271; act: 29 ), + ( sym: 272; act: 30 ), + ( sym: 273; act: 31 ), + ( sym: 274; act: 32 ), + ( sym: 262; act: -12 ), + ( sym: 263; act: -12 ), +{ 36: } +{ 37: } + ( sym: 44; act: 44 ), +{ 38: } +{ 39: } +{ 40: } +{ 41: } +{ 42: } ( sym: 258; act: 9 ), ( sym: 259; act: 10 ), ( sym: 260; act: 11 ), ( sym: 261; act: 12 ), - ( sym: 262; act: 31 ) -{ 35: } + ( sym: 262; act: 48 ), +{ 43: } + ( sym: 44; act: 49 ), + ( sym: 264; act: 50 ), +{ 44: } + ( sym: 258; act: 9 ), + ( sym: 259; act: 10 ), + ( sym: 260; act: 11 ), + ( sym: 261; act: 12 ), +{ 45: } +{ 46: } +{ 47: } +{ 48: } +{ 49: } +{ 50: } +{ 51: } +{ 52: } + ( sym: 258; act: 9 ), + ( sym: 259; act: 10 ), + ( sym: 260; act: 11 ), + ( sym: 261; act: 12 ), + ( sym: 262; act: 48 ) +{ 53: } ); yyg : array [1..yyngotos] of YYARec = ( @@ -398,39 +540,70 @@ yyg : array [1..yyngotos] of YYARec = ( ( sym: -2; act: 18 ), { 15: } { 16: } - ( sym: -16; act: 19 ), - ( sym: -15; act: 20 ), + ( sym: -17; act: 19 ), + ( sym: -16; act: 20 ), { 17: } { 18: } { 19: } + ( sym: -15; act: 22 ), { 20: } - ( sym: -5; act: 23 ), + ( sym: -15; act: 33 ), { 21: } ( sym: -3; act: 17 ), - ( sym: -2; act: 25 ), + ( sym: -2; act: 34 ), { 22: } - ( sym: -17; act: 26 ), - ( sym: -8; act: 27 ), + ( sym: -15; act: 35 ), { 23: } + ( sym: -3; act: 17 ), + ( sym: -2; act: 37 ), { 24: } + ( sym: -3; act: 17 ), + ( sym: -2; act: 38 ), { 25: } + ( sym: -3; act: 17 ), + ( sym: -2; act: 39 ), { 26: } - ( sym: -9; act: 28 ), - ( sym: -6; act: 29 ), - ( sym: -3; act: 30 ), { 27: } { 28: } { 29: } { 30: } { 31: } { 32: } - ( sym: -18; act: 34 ), { 33: } + ( sym: -15; act: 35 ), + ( sym: -5; act: 40 ), { 34: } - ( sym: -9; act: 35 ), - ( sym: -6; act: 29 ), - ( sym: -3; act: 30 ) { 35: } + ( sym: -15; act: 35 ), +{ 36: } + ( sym: -18; act: 42 ), + ( sym: -8; act: 43 ), +{ 37: } +{ 38: } +{ 39: } +{ 40: } +{ 41: } +{ 42: } + ( sym: -9; act: 45 ), + ( sym: -6; act: 46 ), + ( sym: -3; act: 47 ), +{ 43: } +{ 44: } + ( sym: -3; act: 17 ), + ( sym: -2; act: 51 ), +{ 45: } +{ 46: } +{ 47: } +{ 48: } +{ 49: } + ( sym: -19; act: 52 ), +{ 50: } +{ 51: } +{ 52: } + ( sym: -9; act: 53 ), + ( sym: -6; act: 46 ), + ( sym: -3; act: 47 ) +{ 53: } ); yyd : array [0..yynstates-1] of Integer = ( @@ -443,33 +616,51 @@ yyd : array [0..yynstates-1] of Integer = ( { 6: } 0, { 7: } -11, { 8: } -10, -{ 9: } -14, -{ 10: } -16, -{ 11: } -15, -{ 12: } -17, -{ 13: } -19, +{ 9: } -26, +{ 10: } -28, +{ 11: } -27, +{ 12: } -29, +{ 13: } -31, { 14: } 0, -{ 15: } -18, +{ 15: } -30, { 16: } 0, -{ 17: } -13, +{ 17: } -25, { 18: } 0, { 19: } 0, { 20: } 0, { 21: } 0, -{ 22: } -22, -{ 23: } -7, -{ 24: } -20, -{ 25: } -12, -{ 26: } 0, -{ 27: } 0, -{ 28: } -23, -{ 29: } -26, -{ 30: } -27, +{ 22: } 0, +{ 23: } 0, +{ 24: } 0, +{ 25: } 0, +{ 26: } -16, +{ 27: } -17, +{ 28: } -18, +{ 29: } -19, +{ 30: } -20, { 31: } -21, -{ 32: } -24, -{ 33: } -9, -{ 34: } 0, -{ 35: } -25 +{ 32: } -22, +{ 33: } 0, +{ 34: } -24, +{ 35: } 0, +{ 36: } -34, +{ 37: } 0, +{ 38: } -14, +{ 39: } -15, +{ 40: } -7, +{ 41: } -32, +{ 42: } 0, +{ 43: } 0, +{ 44: } 0, +{ 45: } -35, +{ 46: } -38, +{ 47: } -39, +{ 48: } -33, +{ 49: } -36, +{ 50: } -9, +{ 51: } -13, +{ 52: } 0, +{ 53: } -37 ); yyal : array [0..yynstates-1] of Integer = ( @@ -490,25 +681,43 @@ yyal : array [0..yynstates-1] of Integer = ( { 14: } 15, { 15: } 19, { 16: } 19, -{ 17: } 21, -{ 18: } 21, -{ 19: } 22, -{ 20: } 23, -{ 21: } 24, -{ 22: } 28, -{ 23: } 28, -{ 24: } 28, -{ 25: } 28, -{ 26: } 28, -{ 27: } 33, -{ 28: } 35, -{ 29: } 35, -{ 30: } 35, -{ 31: } 35, -{ 32: } 35, -{ 33: } 35, -{ 34: } 35, -{ 35: } 40 +{ 17: } 31, +{ 18: } 31, +{ 19: } 32, +{ 20: } 43, +{ 21: } 54, +{ 22: } 58, +{ 23: } 69, +{ 24: } 73, +{ 25: } 77, +{ 26: } 81, +{ 27: } 81, +{ 28: } 81, +{ 29: } 81, +{ 30: } 81, +{ 31: } 81, +{ 32: } 81, +{ 33: } 81, +{ 34: } 92, +{ 35: } 92, +{ 36: } 104, +{ 37: } 104, +{ 38: } 105, +{ 39: } 105, +{ 40: } 105, +{ 41: } 105, +{ 42: } 105, +{ 43: } 110, +{ 44: } 112, +{ 45: } 116, +{ 46: } 116, +{ 47: } 116, +{ 48: } 116, +{ 49: } 116, +{ 50: } 116, +{ 51: } 116, +{ 52: } 116, +{ 53: } 121 ); yyah : array [0..yynstates-1] of Integer = ( @@ -528,26 +737,44 @@ yyah : array [0..yynstates-1] of Integer = ( { 13: } 14, { 14: } 18, { 15: } 18, -{ 16: } 20, -{ 17: } 20, -{ 18: } 21, -{ 19: } 22, -{ 20: } 23, -{ 21: } 27, -{ 22: } 27, -{ 23: } 27, -{ 24: } 27, -{ 25: } 27, -{ 26: } 32, -{ 27: } 34, -{ 28: } 34, -{ 29: } 34, -{ 30: } 34, -{ 31: } 34, -{ 32: } 34, -{ 33: } 34, -{ 34: } 39, -{ 35: } 39 +{ 16: } 30, +{ 17: } 30, +{ 18: } 31, +{ 19: } 42, +{ 20: } 53, +{ 21: } 57, +{ 22: } 68, +{ 23: } 72, +{ 24: } 76, +{ 25: } 80, +{ 26: } 80, +{ 27: } 80, +{ 28: } 80, +{ 29: } 80, +{ 30: } 80, +{ 31: } 80, +{ 32: } 80, +{ 33: } 91, +{ 34: } 91, +{ 35: } 103, +{ 36: } 103, +{ 37: } 104, +{ 38: } 104, +{ 39: } 104, +{ 40: } 104, +{ 41: } 104, +{ 42: } 109, +{ 43: } 111, +{ 44: } 115, +{ 45: } 115, +{ 46: } 115, +{ 47: } 115, +{ 48: } 115, +{ 49: } 115, +{ 50: } 115, +{ 51: } 115, +{ 52: } 120, +{ 53: } 120 ); yygl : array [0..yynstates-1] of Integer = ( @@ -571,22 +798,40 @@ yygl : array [0..yynstates-1] of Integer = ( { 17: } 16, { 18: } 16, { 19: } 16, -{ 20: } 16, -{ 21: } 17, -{ 22: } 19, +{ 20: } 17, +{ 21: } 18, +{ 22: } 20, { 23: } 21, -{ 24: } 21, -{ 25: } 21, -{ 26: } 21, -{ 27: } 24, -{ 28: } 24, -{ 29: } 24, -{ 30: } 24, -{ 31: } 24, -{ 32: } 24, -{ 33: } 25, -{ 34: } 25, -{ 35: } 28 +{ 24: } 23, +{ 25: } 25, +{ 26: } 27, +{ 27: } 27, +{ 28: } 27, +{ 29: } 27, +{ 30: } 27, +{ 31: } 27, +{ 32: } 27, +{ 33: } 27, +{ 34: } 29, +{ 35: } 29, +{ 36: } 30, +{ 37: } 32, +{ 38: } 32, +{ 39: } 32, +{ 40: } 32, +{ 41: } 32, +{ 42: } 32, +{ 43: } 35, +{ 44: } 35, +{ 45: } 37, +{ 46: } 37, +{ 47: } 37, +{ 48: } 37, +{ 49: } 37, +{ 50: } 38, +{ 51: } 38, +{ 52: } 38, +{ 53: } 41 ); yygh : array [0..yynstates-1] of Integer = ( @@ -609,23 +854,41 @@ yygh : array [0..yynstates-1] of Integer = ( { 16: } 15, { 17: } 15, { 18: } 15, -{ 19: } 15, -{ 20: } 16, -{ 21: } 18, +{ 19: } 16, +{ 20: } 17, +{ 21: } 19, { 22: } 20, -{ 23: } 20, -{ 24: } 20, -{ 25: } 20, -{ 26: } 23, -{ 27: } 23, -{ 28: } 23, -{ 29: } 23, -{ 30: } 23, -{ 31: } 23, -{ 32: } 24, -{ 33: } 24, -{ 34: } 27, -{ 35: } 27 +{ 23: } 22, +{ 24: } 24, +{ 25: } 26, +{ 26: } 26, +{ 27: } 26, +{ 28: } 26, +{ 29: } 26, +{ 30: } 26, +{ 31: } 26, +{ 32: } 26, +{ 33: } 28, +{ 34: } 28, +{ 35: } 29, +{ 36: } 31, +{ 37: } 31, +{ 38: } 31, +{ 39: } 31, +{ 40: } 31, +{ 41: } 31, +{ 42: } 34, +{ 43: } 34, +{ 44: } 36, +{ 45: } 36, +{ 46: } 36, +{ 47: } 36, +{ 48: } 36, +{ 49: } 37, +{ 50: } 37, +{ 51: } 37, +{ 52: } 40, +{ 53: } 40 ); yyr : array [1..yynrules] of YYRRec = ( @@ -634,28 +897,40 @@ yyr : array [1..yynrules] of YYRRec = ( { 3: } ( len: 1; sym: -11 ), { 4: } ( len: 1; sym: -11 ), { 5: } ( len: 1; sym: -12 ), -{ 6: } ( len: 0; sym: -15 ), -{ 7: } ( len: 4; sym: -14 ), -{ 8: } ( len: 0; sym: -16 ), -{ 9: } ( len: 6; sym: -14 ), +{ 6: } ( len: 0; sym: -16 ), +{ 7: } ( len: 5; sym: -14 ), +{ 8: } ( len: 0; sym: -17 ), +{ 9: } ( len: 7; sym: -14 ), { 10: } ( len: 1; sym: -7 ), { 11: } ( len: 1; sym: -7 ), -{ 12: } ( len: 4; sym: -13 ), -{ 13: } ( len: 1; sym: -2 ), -{ 14: } ( len: 1; sym: -3 ), -{ 15: } ( len: 1; sym: -3 ), -{ 16: } ( len: 1; sym: -3 ), -{ 17: } ( len: 1; sym: -3 ), -{ 18: } ( len: 1; sym: -4 ), -{ 19: } ( len: 1; sym: -4 ), -{ 20: } ( len: 1; sym: -5 ), -{ 21: } ( len: 1; sym: -6 ), -{ 22: } ( len: 0; sym: -17 ), -{ 23: } ( len: 2; sym: -8 ), -{ 24: } ( len: 0; sym: -18 ), -{ 25: } ( len: 4; sym: -8 ), -{ 26: } ( len: 1; sym: -9 ), -{ 27: } ( len: 1; sym: -9 ) +{ 12: } ( len: 2; sym: -15 ), +{ 13: } ( len: 4; sym: -15 ), +{ 14: } ( len: 2; sym: -15 ), +{ 15: } ( len: 2; sym: -15 ), +{ 16: } ( len: 1; sym: -15 ), +{ 17: } ( len: 1; sym: -15 ), +{ 18: } ( len: 1; sym: -15 ), +{ 19: } ( len: 1; sym: -15 ), +{ 20: } ( len: 1; sym: -15 ), +{ 21: } ( len: 1; sym: -15 ), +{ 22: } ( len: 1; sym: -15 ), +{ 23: } ( len: 0; sym: -15 ), +{ 24: } ( len: 4; sym: -13 ), +{ 25: } ( len: 1; sym: -2 ), +{ 26: } ( len: 1; sym: -3 ), +{ 27: } ( len: 1; sym: -3 ), +{ 28: } ( len: 1; sym: -3 ), +{ 29: } ( len: 1; sym: -3 ), +{ 30: } ( len: 1; sym: -4 ), +{ 31: } ( len: 1; sym: -4 ), +{ 32: } ( len: 1; sym: -5 ), +{ 33: } ( len: 1; sym: -6 ), +{ 34: } ( len: 0; sym: -18 ), +{ 35: } ( len: 2; sym: -8 ), +{ 36: } ( len: 0; sym: -19 ), +{ 37: } ( len: 4; sym: -8 ), +{ 38: } ( len: 1; sym: -9 ), +{ 39: } ( len: 1; sym: -9 ) ); diff --git a/packages/fcl-res/src/rcparser.y b/packages/fcl-res/src/rcparser.y index 2fedc1ab76..36b4f5c2a0 100644 --- a/packages/fcl-res/src/rcparser.y +++ b/packages/fcl-res/src/rcparser.y @@ -147,7 +147,8 @@ var %token _ILLEGAL %token _NUMDECIMAL _NUMHEX _NUMDECIMALL _NUMHEXL _QUOTEDSTR %token _BEGIN _END -%token _LANGUAGE _VERSION +%token _LANGUAGE _CHARACTERISTICS _VERSION _MOVEABLE _FIXED _PURE _IMPURE _PRELOAD _LOADONCALL _DISCARDABLE + %token _ID %type <rcnumtype> numpos numeral @@ -172,8 +173,8 @@ resourcedef ; res_user - : resid resid { create_resource($1, $2); } filename_string { assign_custom_stream($4); } - | resid resid { create_resource($1, $2); } _BEGIN raw_data _END { aktresource.SetCustomRawDataStream($5); } + : resid resid { create_resource($1, $2); } suboptions filename_string { assign_custom_stream($5); } + | resid resid { create_resource($1, $2); } suboptions _BEGIN raw_data _END { aktresource.SetCustomRawDataStream($6); } ; @@ -182,6 +183,21 @@ resid | ident_string { $$:= TResourceDesc.Create($1); } ; +suboptions + : suboptions suboptions + | _LANGUAGE numpos ',' numpos { aktresource.LangID:= MakeLangID($2.v, $4.v); } + | _CHARACTERISTICS numpos { aktresource.Characteristics:= $2.v; } + | _VERSION numpos { aktresource.Version:= $2.v; } + | _MOVEABLE { aktresource.MemoryFlags:= aktresource.MemoryFlags or MF_MOVEABLE; } + | _FIXED { aktresource.MemoryFlags:= aktresource.MemoryFlags and not MF_MOVEABLE; } + | _PURE { aktresource.MemoryFlags:= aktresource.MemoryFlags or MF_PURE; } + | _IMPURE { aktresource.MemoryFlags:= aktresource.MemoryFlags and not MF_PURE; } + | _PRELOAD { aktresource.MemoryFlags:= aktresource.MemoryFlags or MF_PRELOAD; } + | _LOADONCALL { aktresource.MemoryFlags:= aktresource.MemoryFlags and not MF_PRELOAD; } + | _DISCARDABLE { aktresource.MemoryFlags:= aktresource.MemoryFlags or MF_DISCARDABLE; } + | /* empty */ + ; + languagedef : _LANGUAGE numpos ',' numpos { language:= MakeLangID($2.v, $4.v); } |