RigsofRods
Soft-body Physics Simulation
RigDef_File.cpp
Go to the documentation of this file.
1 /*
2  This source file is part of Rigs of Rods
3  Copyright 2005-2012 Pierre-Michel Ricordel
4  Copyright 2007-2012 Thomas Fischer
5  Copyright 2013-2021 Petr Ohlidal
6 
7  For more information, see http://www.rigsofrods.org/
8 
9  Rigs of Rods is free software: you can redistribute it and/or modify
10  it under the terms of the GNU General Public RoR::WheelSide version 3, as
11  published by the Free Software Foundation.
12 
13  Rigs of Rods is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public RoR::WheelSide for more details.
17 
18  You should have received a copy of the GNU General Public RoR::WheelSide
19  along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
20 */
21 
25 
26 #include "RigDef_File.h"
27 
28 #include "Actor.h"
29 #include "CacheSystem.h"
30 #include "SimConstants.h"
31 
32 namespace RigDef
33 {
34 
35 const char* ROOT_MODULE_NAME = "_Root_"; // Static
36 
37 /* -------------------------------------------------------------------------- */
38 /* Sections */
39 /* */
40 /* This is the place to set defaults. */
41 /* -------------------------------------------------------------------------- */
42 
44  offset(Ogre::Vector3::ZERO),
45  width(0),
46  height(0),
47  max_inclination_angle(0),
48  texcoord_x1(0),
49  texcoord_x2(0),
50  texcoord_y1(0),
51  texcoord_y2(0),
52  lift_coefficient(1.f) // This is default
53 {}
54 
56  regulation_force(0),
57  min_speed(0),
58  pulse_per_sec(0),
59  attr_is_on(true),
60  attr_no_dashboard(false),
61  attr_no_toggle(false)
62 {}
63 
65 tinertiaFactor(1),
66 nturbos(1),
67 param1(9999), //used for default values
68 param2(9999),
69 param3(9999),
70 param4(9999),
71 param5(9999),
72 param6(9999),
73 param7(9999),
74 param8(9999),
75 param9(9999),
76 param10(9999),
77 param11(9999)
78 {}
79 
81  autocalc(false),
82  approximate_width(0),
83  area_coefficient(1.f), // Default
84  airfoil_name("NACA0009.afl")
85 {}
86 
88  flag_self_lock (false),
89  flag_auto_lock (false),
90  flag_no_disable(false),
91  flag_no_rope (false),
92  flag_visible (false),
93  option_hook_range(HOOK_RANGE_DEFAULT),
94  option_speed_coef(1.0f),
95  option_max_force(HOOK_FORCE_DEFAULT),
96  option_hookgroup(-1),
97  option_lockgroup(NODE_LOCKGROUP_DEFAULT),
98  option_timer(HOOK_LOCK_TIMER_DEFAULT),
99  option_min_range_meters(0.f)
100 {}
101 
103  load_weight(-1.f),
104  friction(1),
105  volume(1),
106  surface(1),
107  options(0)
108 {}
109 
111  spring_in(0),
112  damp_in(0),
113  progress_factor_spring_in(0),
114  progress_factor_damp_in(0),
115  spring_out(0),
116  damp_out(0),
117  progress_factor_spring_out(0),
118  progress_factor_damp_out(0),
119  short_bound(0),
120  long_bound(0),
121  precompression(0),
122  options(0),
123  detacher_group(0)
124 {}
125 
127  spring_in(0),
128  damp_in(0),
129  damp_in_slow(0),
130  split_vel_in(0),
131  damp_in_fast(0),
132  spring_out(0),
133  damp_out(0),
134  damp_out_slow(0),
135  split_vel_out(0),
136  damp_out_fast(0),
137  short_bound(0),
138  long_bound(0),
139  precompression(0),
140  options(0),
141  detacher_group(0)
142 {}
143 
145  regulation_force(0),
146  wheel_slip(0),
147  fade_speed(0),
148  pulse_per_sec(0),
149  attr_is_on(false),
150  attr_no_dashboard(false),
151  attr_no_toggle(false)
152 {}
153 
155  offset(Ogre::Vector3::ZERO),
156  rotation(Ogre::Vector3::ZERO),
157  field_of_view(0),
158  texture_width(0),
159  texture_height(0),
160  min_clip_distance(0),
161  max_clip_distance(0),
162  camera_role(0),
163  camera_mode(0)
164 {}
165 
166 void Animation::AddMotorSource(unsigned int source, unsigned int motor)
167 {
168  Animation::MotorSource motor_source;
169  motor_source.source = source;
170  motor_source.motor = motor;
171  this->motor_sources.push_back(motor_source);
172 }
173 
175 {
176  // PLEASE maintain alphabetical order!
177 
178  switch (keyword)
179  {
180  case Keyword::ADD_ANIMATION: return "add_animation";
181  case Keyword::AIRBRAKES: return "airbrakes";
182  case Keyword::ANIMATORS: return "animators";
183  case Keyword::ANTILOCKBRAKES: return "antilockbrakes";
184  case Keyword::AUTHOR: return "author";
185  case Keyword::AXLES: return "axles";
186  case Keyword::BEAMS: return "beams";
187  case Keyword::BRAKES: return "brakes";
188  case Keyword::CAB: return "cab";
189  case Keyword::CAMERAS: return "cameras";
190  case Keyword::CAMERARAIL: return "camerarail";
191  case Keyword::CINECAM: return "cinecam";
192  case Keyword::COLLISIONBOXES: return "collisionboxes";
193  case Keyword::COMMANDS: return "commands";
194  case Keyword::COMMANDS2: return "commands2";
195  case Keyword::COMMENT: return "comment";
196  case Keyword::CONTACTERS: return "contacters";
197  case Keyword::CRUISECONTROL: return "cruisecontrol";
198  case Keyword::DESCRIPTION: return "description";
199  case Keyword::DETACHER_GROUP: return "detacher_group";
200  case Keyword::DISABLEDEFAULTSOUNDS: return "disabledefaultsounds";
201  case Keyword::ENABLE_ADVANCED_DEFORMATION: return "enable_advanced_deformation";
202  case Keyword::END: return "end";
203  case Keyword::END_COMMENT: return "end_comment";
204  case Keyword::END_DESCRIPTION: return "end_description";
205  case Keyword::END_SECTION: return "end_section";
206  case Keyword::ENGINE: return "engine";
207  case Keyword::ENGOPTION: return "engoption";
208  case Keyword::ENGTURBO: return "engturbo";
209  case Keyword::EXHAUSTS: return "exhausts";
210  case Keyword::EXTCAMERA: return "extcamera";
211  case Keyword::FILEINFO: return "fileinfo";
212  case Keyword::FILEFORMATVERSION: return "fileformatversion";
213  case Keyword::FIXES: return "fixes";
214  case Keyword::FLARES: return "flares";
215  case Keyword::FLARES2: return "flares2";
216  case Keyword::FLEXBODIES: return "flexbodies";
217  case Keyword::FLEXBODY_CAMERA_MODE: return "flexbody_camera_mode";
218  case Keyword::FLEXBODYWHEELS: return "flexbodywheels";
219  case Keyword::FORSET: return "forset";
220  case Keyword::FORWARDCOMMANDS: return "forwardcommands";
221  case Keyword::FUSEDRAG: return "fusedrag";
222  case Keyword::GLOBALS: return "globals";
223  case Keyword::GUID: return "guid";
224  case Keyword::GUISETTINGS: return "guisettings";
225  case Keyword::HELP: return "help";
226  case Keyword::HIDEINCHOOSER: return "hideinchooser";
227  case Keyword::HOOKGROUP: return "hookgroup";
228  case Keyword::HOOKS: return "hooks";
229  case Keyword::HYDROS: return "hydros";
230  case Keyword::IMPORTCOMMANDS: return "importcommands";
231  case Keyword::INTERAXLES: return "interaxles";
232  case Keyword::LOCKGROUPS: return "lockgroups";
233  case Keyword::LOCKGROUP_DEFAULT_NOLOCK: return "lockgroup_default_nolock";
234  case Keyword::MANAGEDMATERIALS: return "managedmaterials";
235  case Keyword::MATERIALFLAREBINDINGS: return "materialflarebindings";
236  case Keyword::MESHWHEELS: return "meshwheels";
237  case Keyword::MESHWHEELS2: return "meshwheels2";
238  case Keyword::MINIMASS: return "minimass";
239  case Keyword::NODES: return "nodes";
240  case Keyword::NODES2: return "nodes2";
241  case Keyword::PARTICLES: return "particles";
242  case Keyword::PISTONPROPS: return "pistonprops";
243  case Keyword::PROP_CAMERA_MODE: return "prop_camera_mode";
244  case Keyword::PROPS: return "props";
245  case Keyword::RAILGROUPS: return "railgroups";
246  case Keyword::RESCUER: return "rescuer";
247  case Keyword::RIGIDIFIERS: return "rigidifiers";
248  case Keyword::ROLLON: return "rollon";
249  case Keyword::ROPABLES: return "ropables";
250  case Keyword::ROPES: return "ropes";
251  case Keyword::ROTATORS: return "rotators";
252  case Keyword::ROTATORS2: return "rotators2";
253  case Keyword::SCREWPROPS: return "screwprops";
254  case Keyword::SECTION: return "section";
255  case Keyword::SECTIONCONFIG: return "sectionconfig";
256  case Keyword::SET_BEAM_DEFAULTS: return "set_beam_defaults";
257  case Keyword::SET_BEAM_DEFAULTS_SCALE: return "set_beam_defaults_scale";
258  case Keyword::SET_COLLISION_RANGE: return "set_collision_range";
259  case Keyword::SET_DEFAULT_MINIMASS: return "set_default_minimass";
260  case Keyword::SET_INERTIA_DEFAULTS: return "set_inertia_defaults";
261  case Keyword::SET_MANAGEDMATERIALS_OPTIONS: return "set_managedmaterials_options";
262  case Keyword::SET_NODE_DEFAULTS: return "set_node_defaults";
263  case Keyword::SET_SHADOWS: return "set_shadows";
264  case Keyword::SET_SKELETON_SETTINGS: return "set_skeleton_settings";
265  case Keyword::SHOCKS: return "shocks";
266  case Keyword::SHOCKS2: return "shocks2";
267  case Keyword::SHOCKS3: return "shocks3";
268  case Keyword::SLIDENODE_CONNECT_INSTANTLY: return "slidenode_connect_instantly";
269  case Keyword::SLIDENODES: return "slidenodes";
270  case Keyword::SLOPE_BRAKE: return "SlopeBrake";
271  case Keyword::SOUNDSOURCES: return "soundsources";
272  case Keyword::SOUNDSOURCES2: return "soundsources2";
273  case Keyword::SPEEDLIMITER: return "speedlimiter";
274  case Keyword::SUBMESH: return "submesh";
275  case Keyword::SUBMESH_GROUNDMODEL: return "submesh_groundmodel";
276  case Keyword::TEXCOORDS: return "texcoords";
277  case Keyword::TIES: return "ties";
278  case Keyword::TORQUECURVE: return "torquecurve";
279  case Keyword::TRACTIONCONTROL: return "tractioncontrol";
280  case Keyword::TRANSFERCASE: return "transfercase";
281  case Keyword::TRIGGERS: return "triggers";
282  case Keyword::TURBOJETS: return "turbojets";
283  case Keyword::TURBOPROPS: return "turboprops";
284  case Keyword::TURBOPROPS2: return "turboprops2";
285  case Keyword::VIDEOCAMERA: return "videocamera";
286  case Keyword::WHEELDETACHERS: return "wheeldetachers";
287  case Keyword::WHEELS: return "wheels";
288  case Keyword::WHEELS2: return "wheels2";
289  case Keyword::WINGS: return "wings";
290 
291  default: return "";
292  }
293 }
294 
295 Document::Module::Module(Ogre::String const & name):
296  name(name)
297 {}
298 
300  hide_in_chooser(false),
302  rollon(false),
303  forward_commands(false),
304  import_commands(false),
306  rescuer(false),
307  disable_default_sounds(false),
309 {
310  root_module = std::make_shared<Document::Module>(ROOT_MODULE_NAME); // Required to exist.
311 }
312 
313 } /* namespace RigDef */
RigDef::Keyword::SUBMESH
@ SUBMESH
RigDef::Keyword::FILEFORMATVERSION
@ FILEFORMATVERSION
RigDef::Keyword::CAMERARAIL
@ CAMERARAIL
RigDef::Keyword::AUTHOR
@ AUTHOR
RigDef::Keyword::SOUNDSOURCES
@ SOUNDSOURCES
RigDef::Shock3::Shock3
Shock3()
Definition: RigDef_File.cpp:126
RigDef::Keyword::ANTILOCKBRAKES
@ ANTILOCKBRAKES
RigDef::Animation::MotorSource
Definition: RigDef_File.h:478
RigDef::Keyword::ENGINE
@ ENGINE
RigDef::Fusedrag::Fusedrag
Fusedrag()
Definition: RigDef_File.cpp:80
RigDef::Keyword::FORSET
@ FORSET
RigDef::Keyword::SHOCKS
@ SHOCKS
RigDef::Keyword::ROTATORS
@ ROTATORS
RigDef::Keyword::WINGS
@ WINGS
RigDef::Keyword::COMMANDS2
@ COMMANDS2
RigDef::Keyword::HIDEINCHOOSER
@ HIDEINCHOOSER
RigDef::Animation::MotorSource::motor
unsigned int motor
Definition: RigDef_File.h:487
RigDef::Keyword::MINIMASS
@ MINIMASS
RigDef::Keyword::ANIMATORS
@ ANIMATORS
RigDef::Keyword::TRACTIONCONTROL
@ TRACTIONCONTROL
RigDef::Keyword::ROPES
@ ROPES
RigDef::Keyword::GUISETTINGS
@ GUISETTINGS
RigDef::Document::rescuer
bool rescuer
Definition: RigDef_File.h:1568
RigDef::Keyword::WHEELDETACHERS
@ WHEELDETACHERS
RigDef::Keyword::CAB
@ CAB
RigDef::Keyword::TURBOPROPS
@ TURBOPROPS
RigDef::Keyword::LOCKGROUP_DEFAULT_NOLOCK
@ LOCKGROUP_DEFAULT_NOLOCK
RigDef::Keyword::END
@ END
RigDef::Animation::AddMotorSource
void AddMotorSource(BitMask_t source, unsigned int motor)
Definition: RigDef_File.cpp:166
RigDef::Document::forward_commands
bool forward_commands
Definition: RigDef_File.h:1565
RigDef::Keyword::NODES2
@ NODES2
SimConstants.h
RigDef::KeywordToString
const char * KeywordToString(Keyword keyword)
Definition: RigDef_File.cpp:174
RigDef::Keyword::TEXCOORDS
@ TEXCOORDS
RigDef::Keyword::ENGOPTION
@ ENGOPTION
RigDef::Keyword::TURBOPROPS2
@ TURBOPROPS2
RigDef::Keyword::TIES
@ TIES
RigDef::Keyword::RESCUER
@ RESCUER
RigDef::Keyword::IMPORTCOMMANDS
@ IMPORTCOMMANDS
RigDef::Document::rollon
bool rollon
Definition: RigDef_File.h:1564
RigDef::Keyword::MESHWHEELS
@ MESHWHEELS
RigDef::Keyword::HELP
@ HELP
RigDef::Keyword::RIGIDIFIERS
@ RIGIDIFIERS
RigDef::AntiLockBrakes::AntiLockBrakes
AntiLockBrakes()
Definition: RigDef_File.cpp:55
RigDef::Keyword::FILEINFO
@ FILEINFO
RigDef::Keyword::SET_NODE_DEFAULTS
@ SET_NODE_DEFAULTS
RigDef::Keyword::SET_MANAGEDMATERIALS_OPTIONS
@ SET_MANAGEDMATERIALS_OPTIONS
RigDef::Keyword::AIRBRAKES
@ AIRBRAKES
RigDef::TractionControl::TractionControl
TractionControl()
Definition: RigDef_File.cpp:144
RigDef::Keyword::SET_COLLISION_RANGE
@ SET_COLLISION_RANGE
RigDef::Keyword::EXTCAMERA
@ EXTCAMERA
RigDef::Keyword::SLIDENODE_CONNECT_INSTANTLY
@ SLIDENODE_CONNECT_INSTANTLY
Actor.h
RigDef::Keyword::WHEELS
@ WHEELS
RigDef::Document::disable_default_sounds
bool disable_default_sounds
Definition: RigDef_File.h:1569
RigDef::Keyword::FLARES2
@ FLARES2
RigDef::Keyword::SHOCKS2
@ SHOCKS2
RigDef::Keyword::CONTACTERS
@ CONTACTERS
RigDef::Document::import_commands
bool import_commands
Definition: RigDef_File.h:1566
RigDef::Keyword::TRANSFERCASE
@ TRANSFERCASE
RigDef::Keyword::BEAMS
@ BEAMS
RigDef::Keyword::TRIGGERS
@ TRIGGERS
RigDef::Keyword::MANAGEDMATERIALS
@ MANAGEDMATERIALS
RigDef::Keyword::END_COMMENT
@ END_COMMENT
HOOK_FORCE_DEFAULT
static const float HOOK_FORCE_DEFAULT
Definition: SimConstants.h:74
RigDef::Keyword::FUSEDRAG
@ FUSEDRAG
RigDef::Keyword::COLLISIONBOXES
@ COLLISIONBOXES
CacheSystem.h
A database of user-installed content alias 'mods' (vehicles, terrains...)
keyword
static int keyword
Definition: Bench_TruckParser_IdentifyKeyword.cpp:1448
RigDef::Keyword::HYDROS
@ HYDROS
RigDef
Definition: RigDef_File.cpp:32
RigDef::Keyword
Keyword
Definition: RigDef_File.h:65
RigDef::VideoCamera::VideoCamera
VideoCamera()
Definition: RigDef_File.cpp:154
RigDef::Keyword::DETACHER_GROUP
@ DETACHER_GROUP
RigDef::Document::enable_advanced_deformation
bool enable_advanced_deformation
Definition: RigDef_File.h:1562
RigDef::Keyword::SOUNDSOURCES2
@ SOUNDSOURCES2
RigDef::Document::Module::Module
Module(Ogre::String const &name)
Definition: RigDef_File.cpp:295
RigDef::Keyword::FLEXBODIES
@ FLEXBODIES
RigDef::Engturbo::Engturbo
Engturbo()
Definition: RigDef_File.cpp:64
RigDef::Airbrake::Airbrake
Airbrake()
Definition: RigDef_File.cpp:43
RigDef::Keyword::SHOCKS3
@ SHOCKS3
HOOK_RANGE_DEFAULT
static const float HOOK_RANGE_DEFAULT
Definition: SimConstants.h:75
RigDef::Keyword::FORWARDCOMMANDS
@ FORWARDCOMMANDS
RigDef::Keyword::CRUISECONTROL
@ CRUISECONTROL
RigDef::Keyword::END_DESCRIPTION
@ END_DESCRIPTION
RigDef::Keyword::SUBMESH_GROUNDMODEL
@ SUBMESH_GROUNDMODEL
RigDef::Keyword::PROP_CAMERA_MODE
@ PROP_CAMERA_MODE
RigDef::Document::hide_in_chooser
bool hide_in_chooser
Definition: RigDef_File.h:1561
NODE_LOCKGROUP_DEFAULT
static const int NODE_LOCKGROUP_DEFAULT
Definition: SimConstants.h:78
RigDef::Keyword::ENABLE_ADVANCED_DEFORMATION
@ ENABLE_ADVANCED_DEFORMATION
RigDef::Keyword::PISTONPROPS
@ PISTONPROPS
RigDef::Keyword::SET_BEAM_DEFAULTS_SCALE
@ SET_BEAM_DEFAULTS_SCALE
RigDef::Keyword::FLARES
@ FLARES
RigDef::Keyword::SLIDENODES
@ SLIDENODES
RigDef::Keyword::SET_SHADOWS
@ SET_SHADOWS
RigDef::Keyword::FLEXBODY_CAMERA_MODE
@ FLEXBODY_CAMERA_MODE
RigDef::Keyword::SET_BEAM_DEFAULTS
@ SET_BEAM_DEFAULTS
RigDef::Keyword::BRAKES
@ BRAKES
RigDef::Keyword::TORQUECURVE
@ TORQUECURVE
RigDef::Keyword::SET_DEFAULT_MINIMASS
@ SET_DEFAULT_MINIMASS
RigDef::Keyword::LOCKGROUPS
@ LOCKGROUPS
RigDef::Keyword::COMMANDS
@ COMMANDS
RigDef::Keyword::EXHAUSTS
@ EXHAUSTS
HOOK_LOCK_TIMER_DEFAULT
static const float HOOK_LOCK_TIMER_DEFAULT
Definition: SimConstants.h:77
RigDef::Keyword::PARTICLES
@ PARTICLES
RigDef::Keyword::HOOKGROUP
@ HOOKGROUP
RigDef::NodeDefaults::NodeDefaults
NodeDefaults()
Definition: RigDef_File.cpp:102
RigDef::Keyword::HOOKS
@ HOOKS
RigDef::Keyword::WHEELS2
@ WHEELS2
RigDef::Keyword::FLEXBODYWHEELS
@ FLEXBODYWHEELS
RigDef::Document::Document
Document()
Definition: RigDef_File.cpp:299
RigDef::Keyword::FIXES
@ FIXES
RigDef::Keyword::DISABLEDEFAULTSOUNDS
@ DISABLEDEFAULTSOUNDS
RigDef::Keyword::MATERIALFLAREBINDINGS
@ MATERIALFLAREBINDINGS
RigDef::Keyword::ADD_ANIMATION
@ ADD_ANIMATION
RigDef::Keyword::ROPABLES
@ ROPABLES
RigDef::Keyword::SECTION
@ SECTION
RigDef::Document::lockgroup_default_nolock
bool lockgroup_default_nolock
Definition: RigDef_File.h:1567
RigDef::Animation::source
BitMask64_t source
Definition: RigDef_File.h:541
RigDef::Document::slide_nodes_connect_instantly
bool slide_nodes_connect_instantly
Definition: RigDef_File.h:1563
RigDef::Animation::motor_sources
std::list< MotorSource > motor_sources
Definition: RigDef_File.h:542
RigDef::Keyword::RAILGROUPS
@ RAILGROUPS
Ogre
Definition: ExtinguishableFireAffector.cpp:35
RigDef::Document::root_module
std::shared_ptr< Module > root_module
Required to exist. shared_ptr is used for unified handling with other modules.
Definition: RigDef_File.h:1576
RigDef::Keyword::DESCRIPTION
@ DESCRIPTION
RigDef::Keyword::INTERAXLES
@ INTERAXLES
RigDef::Keyword::ROLLON
@ ROLLON
RigDef::Keyword::SET_INERTIA_DEFAULTS
@ SET_INERTIA_DEFAULTS
RigDef::Keyword::VIDEOCAMERA
@ VIDEOCAMERA
RigDef::Keyword::AXLES
@ AXLES
RigDef::Keyword::MESHWHEELS2
@ MESHWHEELS2
RigDef::Keyword::SECTIONCONFIG
@ SECTIONCONFIG
RigDef::Keyword::CAMERAS
@ CAMERAS
RigDef::Hook::Hook
Hook()
Definition: RigDef_File.cpp:87
RigDef::ROOT_MODULE_NAME
const char * ROOT_MODULE_NAME
Definition: RigDef_File.cpp:35
RigDef::Keyword::SET_SKELETON_SETTINGS
@ SET_SKELETON_SETTINGS
RigDef::Keyword::ROTATORS2
@ ROTATORS2
RigDef::Keyword::CINECAM
@ CINECAM
RigDef::Keyword::TURBOJETS
@ TURBOJETS
RigDef_File.h
Data structures representing 'truck' file format, see https://docs.rigsofrods.org/vehicle-creation/fi...
RigDef::Keyword::GUID
@ GUID
RigDef::Keyword::ENGTURBO
@ ENGTURBO
RigDef::Keyword::SLOPE_BRAKE
@ SLOPE_BRAKE
RigDef::Shock2::Shock2
Shock2()
Definition: RigDef_File.cpp:110
RigDef::Animation::MotorSource::source
BitMask_t source
Definition: RigDef_File.h:486
RigDef::Keyword::END_SECTION
@ END_SECTION
RigDef::Keyword::PROPS
@ PROPS
RigDef::Keyword::SCREWPROPS
@ SCREWPROPS
RigDef::Keyword::SPEEDLIMITER
@ SPEEDLIMITER
RigDef::Keyword::COMMENT
@ COMMENT
RigDef::Keyword::NODES
@ NODES
RigDef::Keyword::GLOBALS
@ GLOBALS