Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2011-02-20 02:51:18 +0300
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2011-02-20 02:51:18 +0300
commit70aa63306ad3ec1402275ed623b745d06d14db18 (patch)
tree08cea0cd3818061afc4f3a3b7b922ac668ca80ae /source/blender
parent3789c398ff2b2fd7f0eadba45686b0e235186f4a (diff)
parent43d362fcc8592cede760a56cf863a0c3eb80ff5f (diff)
Merged changes in the trunk up to revision 34996.
Conflicts resolved: C:\bf-blender\soc-2008-mxcurioni\doc\python_api\sphinx_doc_gen.py C:\bf-blender\soc-2008-mxcurioni\source\blender\makesrna\RNA_types.h C:\bf-blender\soc-2008-mxcurioni\source\blender\render\SConscript
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenfont/BLF_api.h2
-rw-r--r--source/blender/blenfont/intern/blf.c10
-rw-r--r--source/blender/blenfont/intern/blf_dir.c1
-rw-r--r--source/blender/blenfont/intern/blf_font.c13
-rw-r--r--source/blender/blenfont/intern/blf_glyph.c7
-rw-r--r--source/blender/blenfont/intern/blf_internal_types.h3
-rw-r--r--source/blender/blenfont/intern/blf_lang.c4
-rw-r--r--source/blender/blenkernel/BKE_DerivedMesh.h14
-rw-r--r--source/blender/blenkernel/BKE_action.h15
-rw-r--r--source/blender/blenkernel/BKE_anim.h9
-rw-r--r--source/blender/blenkernel/BKE_animsys.h7
-rw-r--r--source/blender/blenkernel/BKE_armature.h11
-rw-r--r--source/blender/blenkernel/BKE_array_mallocn.h7
-rw-r--r--source/blender/blenkernel/BKE_blender.h13
-rw-r--r--source/blender/blenkernel/BKE_bmesh.h13
-rw-r--r--source/blender/blenkernel/BKE_bmeshCustomData.h12
-rw-r--r--source/blender/blenkernel/BKE_bmfont.h12
-rw-r--r--source/blender/blenkernel/BKE_bmfont_types.h11
-rw-r--r--source/blender/blenkernel/BKE_boids.h10
-rw-r--r--source/blender/blenkernel/BKE_booleanops_mesh.h6
-rw-r--r--source/blender/blenkernel/BKE_brush.h9
-rw-r--r--source/blender/blenkernel/BKE_bullet.h6
-rw-r--r--source/blender/blenkernel/BKE_bvhutils.h7
-rw-r--r--source/blender/blenkernel/BKE_cdderivedmesh.h8
-rw-r--r--source/blender/blenkernel/BKE_cloth.h9
-rw-r--r--source/blender/blenkernel/BKE_collision.h9
-rw-r--r--source/blender/blenkernel/BKE_colortools.h6
-rw-r--r--source/blender/blenkernel/BKE_constraint.h7
-rw-r--r--source/blender/blenkernel/BKE_context.h6
-rw-r--r--source/blender/blenkernel/BKE_curve.h9
-rw-r--r--source/blender/blenkernel/BKE_customdata.h6
-rw-r--r--source/blender/blenkernel/BKE_customdata_file.h4
-rw-r--r--source/blender/blenkernel/BKE_deform.h14
-rw-r--r--source/blender/blenkernel/BKE_depsgraph.h6
-rw-r--r--source/blender/blenkernel/BKE_displist.h5
-rw-r--r--source/blender/blenkernel/BKE_effect.h9
-rw-r--r--source/blender/blenkernel/BKE_endian.h10
-rw-r--r--source/blender/blenkernel/BKE_exotic.h8
-rw-r--r--source/blender/blenkernel/BKE_fcurve.h8
-rw-r--r--source/blender/blenkernel/BKE_fluidsim.h5
-rw-r--r--source/blender/blenkernel/BKE_font.h8
-rw-r--r--source/blender/blenkernel/BKE_global.h17
-rw-r--r--source/blender/blenkernel/BKE_gpencil.h7
-rw-r--r--source/blender/blenkernel/BKE_group.h10
-rw-r--r--source/blender/blenkernel/BKE_icons.h6
-rw-r--r--source/blender/blenkernel/BKE_idcode.h6
-rw-r--r--source/blender/blenkernel/BKE_idprop.h7
-rw-r--r--source/blender/blenkernel/BKE_image.h10
-rw-r--r--source/blender/blenkernel/BKE_ipo.h11
-rw-r--r--source/blender/blenkernel/BKE_key.h9
-rw-r--r--source/blender/blenkernel/BKE_lattice.h9
-rw-r--r--source/blender/blenkernel/BKE_library.h11
-rw-r--r--source/blender/blenkernel/BKE_main.h24
-rw-r--r--source/blender/blenkernel/BKE_material.h7
-rw-r--r--source/blender/blenkernel/BKE_mball.h9
-rw-r--r--source/blender/blenkernel/BKE_mesh.h6
-rw-r--r--source/blender/blenkernel/BKE_modifier.h7
-rw-r--r--source/blender/blenkernel/BKE_multires.h4
-rw-r--r--source/blender/blenkernel/BKE_nla.h7
-rw-r--r--source/blender/blenkernel/BKE_node.h6
-rw-r--r--source/blender/blenkernel/BKE_object.h7
-rw-r--r--source/blender/blenkernel/BKE_packedFile.h9
-rw-r--r--source/blender/blenkernel/BKE_paint.h4
-rw-r--r--source/blender/blenkernel/BKE_particle.h8
-rw-r--r--source/blender/blenkernel/BKE_plugin_types.h12
-rw-r--r--source/blender/blenkernel/BKE_pointcache.h4
-rw-r--r--source/blender/blenkernel/BKE_property.h8
-rw-r--r--source/blender/blenkernel/BKE_report.h6
-rw-r--r--source/blender/blenkernel/BKE_sca.h6
-rw-r--r--source/blender/blenkernel/BKE_scene.h10
-rw-r--r--source/blender/blenkernel/BKE_screen.h10
-rw-r--r--source/blender/blenkernel/BKE_script.h11
-rw-r--r--source/blender/blenkernel/BKE_sequencer.h7
-rw-r--r--source/blender/blenkernel/BKE_shrinkwrap.h8
-rw-r--r--source/blender/blenkernel/BKE_sketch.h7
-rw-r--r--source/blender/blenkernel/BKE_smoke.h9
-rw-r--r--source/blender/blenkernel/BKE_softbody.h8
-rw-r--r--source/blender/blenkernel/BKE_sound.h12
-rw-r--r--source/blender/blenkernel/BKE_subsurf.h4
-rw-r--r--source/blender/blenkernel/BKE_suggestions.h6
-rw-r--r--source/blender/blenkernel/BKE_text.h10
-rw-r--r--source/blender/blenkernel/BKE_texture.h10
-rw-r--r--source/blender/blenkernel/BKE_unit.h6
-rw-r--r--source/blender/blenkernel/BKE_utildefines.h8
-rw-r--r--source/blender/blenkernel/BKE_world.h10
-rw-r--r--source/blender/blenkernel/BKE_writeavi.h6
-rw-r--r--source/blender/blenkernel/BKE_writeffmpeg.h6
-rw-r--r--source/blender/blenkernel/BKE_writeframeserver.h6
-rw-r--r--source/blender/blenkernel/CMakeLists.txt1
-rw-r--r--source/blender/blenkernel/SConscript1
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.c6
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c266
-rw-r--r--source/blender/blenkernel/intern/anim.c75
-rw-r--r--source/blender/blenkernel/intern/armature.c4
-rw-r--r--source/blender/blenkernel/intern/brush.c2
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c20
-rw-r--r--source/blender/blenkernel/intern/collision.c4
-rw-r--r--source/blender/blenkernel/intern/constraint.c3
-rw-r--r--source/blender/blenkernel/intern/customdata.c2
-rw-r--r--source/blender/blenkernel/intern/image.c14
-rw-r--r--source/blender/blenkernel/intern/object.c18
-rw-r--r--source/blender/blenkernel/intern/particle.c28
-rw-r--r--source/blender/blenkernel/intern/particle_system.c6
-rw-r--r--source/blender/blenkernel/intern/pointcache.c2
-rw-r--r--source/blender/blenkernel/intern/sequencer.c22
-rw-r--r--source/blender/blenkernel/intern/shrinkwrap.c32
-rw-r--r--source/blender/blenkernel/intern/smoke.c2
-rw-r--r--source/blender/blenkernel/intern/sound.c2
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c2
-rw-r--r--source/blender/blenkernel/intern/writeavi.c2
-rw-r--r--source/blender/blenkernel/intern/writeframeserver.c3
-rw-r--r--source/blender/blenlib/BLI_args.h15
-rw-r--r--source/blender/blenlib/BLI_blenlib.h18
-rw-r--r--source/blender/blenlib/BLI_boxpack2d.h13
-rw-r--r--source/blender/blenlib/BLI_bpath.h9
-rw-r--r--source/blender/blenlib/BLI_cpu.h5
-rw-r--r--source/blender/blenlib/BLI_dlrbTree.h7
-rw-r--r--source/blender/blenlib/BLI_dynstr.h20
-rw-r--r--source/blender/blenlib/BLI_edgehash.h10
-rw-r--r--source/blender/blenlib/BLI_editVert.h15
-rw-r--r--source/blender/blenlib/BLI_fileops.h12
-rw-r--r--source/blender/blenlib/BLI_fnmatch.h5
-rw-r--r--source/blender/blenlib/BLI_ghash.h9
-rw-r--r--source/blender/blenlib/BLI_graph.h4
-rw-r--r--source/blender/blenlib/BLI_gsqueue.h9
-rw-r--r--source/blender/blenlib/BLI_heap.h9
-rw-r--r--source/blender/blenlib/BLI_jitter.h12
-rw-r--r--source/blender/blenlib/BLI_kdopbvh.h9
-rw-r--r--source/blender/blenlib/BLI_kdtree.h11
-rw-r--r--source/blender/blenlib/BLI_linklist.h10
-rw-r--r--source/blender/blenlib/BLI_listbase.h6
-rw-r--r--source/blender/blenlib/BLI_math.h43
-rw-r--r--source/blender/blenlib/BLI_math_base.h17
-rw-r--r--source/blender/blenlib/BLI_math_color.h6
-rw-r--r--source/blender/blenlib/BLI_math_geom.h6
-rw-r--r--source/blender/blenlib/BLI_math_inline.h6
-rw-r--r--source/blender/blenlib/BLI_math_matrix.h6
-rw-r--r--source/blender/blenlib/BLI_math_rotation.h6
-rw-r--r--source/blender/blenlib/BLI_math_vector.h6
-rw-r--r--source/blender/blenlib/BLI_memarena.h10
-rw-r--r--source/blender/blenlib/BLI_mempool.h24
-rw-r--r--source/blender/blenlib/BLI_noise.h5
-rw-r--r--source/blender/blenlib/BLI_path_util.h10
-rw-r--r--source/blender/blenlib/BLI_pbvh.h9
-rw-r--r--source/blender/blenlib/BLI_rand.h18
-rw-r--r--source/blender/blenlib/BLI_rect.h4
-rw-r--r--source/blender/blenlib/BLI_scanfill.h15
-rw-r--r--source/blender/blenlib/BLI_storage.h4
-rw-r--r--source/blender/blenlib/BLI_storage_types.h11
-rw-r--r--source/blender/blenlib/BLI_string.h4
-rw-r--r--source/blender/blenlib/BLI_threads.h4
-rw-r--r--source/blender/blenlib/BLI_utildefines.h4
-rw-r--r--source/blender/blenlib/BLI_uvproject.h6
-rw-r--r--source/blender/blenlib/BLI_vfontdata.h13
-rw-r--r--source/blender/blenlib/BLI_voxel.h9
-rw-r--r--source/blender/blenlib/BLI_winstuff.h9
-rw-r--r--source/blender/blenlib/intern/BLI_args.c6
-rw-r--r--source/blender/blenlib/intern/BLI_kdopbvh.c3
-rw-r--r--source/blender/blenlib/intern/BLI_mempool.c1
-rw-r--r--source/blender/blenlib/intern/bpath.c2
-rw-r--r--source/blender/blenlib/intern/jitter.c1
-rw-r--r--source/blender/blenlib/intern/math_rotation.c2
-rw-r--r--source/blender/blenlib/intern/noise.c4
-rw-r--r--source/blender/blenlib/intern/path_util.c4
-rw-r--r--source/blender/blenlib/intern/pbvh.c14
-rw-r--r--source/blender/blenlib/intern/rct.c5
-rw-r--r--source/blender/blenlib/intern/scanfill.c3
-rw-r--r--source/blender/blenlib/intern/time.c3
-rw-r--r--source/blender/blenlib/intern/uvproject.c1
-rw-r--r--source/blender/blenloader/BLO_readfile.h6
-rw-r--r--source/blender/blenloader/BLO_soundfile.h4
-rw-r--r--source/blender/blenloader/BLO_sys_types.h5
-rw-r--r--source/blender/blenloader/BLO_undofile.h4
-rw-r--r--source/blender/blenloader/BLO_writefile.h6
-rw-r--r--source/blender/blenloader/intern/readfile.c2
-rw-r--r--source/blender/collada/collada_internal.cpp2
-rw-r--r--source/blender/collada/collada_internal.h6
-rw-r--r--source/blender/editors/animation/anim_markers.c3
-rw-r--r--source/blender/editors/animation/fmodifier_ui.c3
-rw-r--r--source/blender/editors/animation/keyframes_general.c3
-rw-r--r--source/blender/editors/animation/keyframing.c8
-rw-r--r--source/blender/editors/animation/keyingsets.c2
-rw-r--r--source/blender/editors/armature/BIF_retarget.h4
-rw-r--r--source/blender/editors/armature/armature_intern.h7
-rw-r--r--source/blender/editors/armature/armature_ops.c6
-rw-r--r--source/blender/editors/armature/editarmature.c9
-rw-r--r--source/blender/editors/armature/editarmature_retarget.c26
-rw-r--r--source/blender/editors/armature/editarmature_sketch.c113
-rw-r--r--source/blender/editors/armature/meshlaplacian.c9
-rw-r--r--source/blender/editors/armature/poselib.c331
-rw-r--r--source/blender/editors/armature/poseobject.c20
-rw-r--r--source/blender/editors/armature/reeb.c125
-rw-r--r--source/blender/editors/armature/reeb.h2
-rw-r--r--source/blender/editors/curve/curve_ops.c2
-rw-r--r--source/blender/editors/curve/editcurve.c111
-rw-r--r--source/blender/editors/curve/editfont.c3
-rw-r--r--source/blender/editors/gpencil/gpencil_buttons.c4
-rw-r--r--source/blender/editors/gpencil/gpencil_edit.c1
-rw-r--r--source/blender/editors/gpencil/gpencil_ops.c2
-rw-r--r--source/blender/editors/include/ED_curve.h3
-rw-r--r--source/blender/editors/include/ED_gpencil.h2
-rw-r--r--source/blender/editors/include/ED_markers.h2
-rw-r--r--source/blender/editors/include/ED_mesh.h5
-rw-r--r--source/blender/editors/include/ED_uvedit.h2
-rw-r--r--source/blender/editors/include/UI_interface.h2
-rw-r--r--source/blender/editors/interface/interface.c114
-rw-r--r--source/blender/editors/interface/interface_draw.c2
-rw-r--r--source/blender/editors/interface/interface_handlers.c3
-rw-r--r--source/blender/editors/interface/interface_icons.c2
-rw-r--r--source/blender/editors/interface/interface_intern.h2
-rw-r--r--source/blender/editors/interface/interface_layout.c13
-rw-r--r--source/blender/editors/interface/interface_panel.c2
-rw-r--r--source/blender/editors/interface/interface_templates.c9
-rw-r--r--source/blender/editors/interface/view2d_ops.c2
-rw-r--r--source/blender/editors/mesh/editface.c2
-rw-r--r--source/blender/editors/mesh/editmesh_add.c14
-rw-r--r--source/blender/editors/mesh/editmesh_lib.c6
-rw-r--r--source/blender/editors/mesh/editmesh_loop.c10
-rw-r--r--source/blender/editors/mesh/editmesh_mods.c20
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c10
-rw-r--r--source/blender/editors/mesh/mesh_ops.c3
-rw-r--r--source/blender/editors/mesh/meshtools.c2
-rw-r--r--source/blender/editors/metaball/mball_edit.c5
-rw-r--r--source/blender/editors/metaball/mball_ops.c2
-rw-r--r--source/blender/editors/object/object_add.c9
-rw-r--r--source/blender/editors/object/object_bake.c4
-rw-r--r--source/blender/editors/object/object_constraint.c6
-rw-r--r--source/blender/editors/object/object_edit.c25
-rw-r--r--source/blender/editors/object/object_lattice.c8
-rw-r--r--source/blender/editors/object/object_relations.c16
-rw-r--r--source/blender/editors/object/object_select.c1
-rw-r--r--source/blender/editors/object/object_transform.c2
-rw-r--r--source/blender/editors/object/object_vgroup.c6
-rw-r--r--source/blender/editors/physics/particle_edit.c3
-rw-r--r--source/blender/editors/physics/physics_fluid.c6
-rw-r--r--source/blender/editors/physics/physics_pointcache.c4
-rw-r--r--source/blender/editors/render/render_internal.c3
-rw-r--r--source/blender/editors/render/render_opengl.c6
-rw-r--r--source/blender/editors/render/render_ops.c2
-rw-r--r--source/blender/editors/render/render_shading.c5
-rw-r--r--source/blender/editors/screen/screen_context.c28
-rw-r--r--source/blender/editors/screen/screen_intern.h6
-rw-r--r--source/blender/editors/screen/screen_ops.c10
-rw-r--r--source/blender/editors/sculpt_paint/paint_image.c6
-rw-r--r--source/blender/editors/sculpt_paint/paint_ops.c13
-rw-r--r--source/blender/editors/sculpt_paint/paint_stroke.c2
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.c4
-rw-r--r--source/blender/editors/sculpt_paint/sculpt.c35
-rw-r--r--source/blender/editors/sound/sound_ops.c5
-rw-r--r--source/blender/editors/space_action/action_draw.c1
-rw-r--r--source/blender/editors/space_action/action_edit.c10
-rw-r--r--source/blender/editors/space_action/action_intern.h6
-rw-r--r--source/blender/editors/space_action/action_ops.c13
-rw-r--r--source/blender/editors/space_action/action_select.c198
-rw-r--r--source/blender/editors/space_action/space_action.c1
-rw-r--r--source/blender/editors/space_api/spacetypes.c2
-rw-r--r--source/blender/editors/space_buttons/buttons_context.c45
-rw-r--r--source/blender/editors/space_buttons/buttons_intern.h2
-rw-r--r--source/blender/editors/space_buttons/space_buttons.c5
-rw-r--r--source/blender/editors/space_console/console_ops.c2
-rw-r--r--source/blender/editors/space_console/space_console.c8
-rw-r--r--source/blender/editors/space_file/file_draw.c2
-rw-r--r--source/blender/editors/space_file/file_ops.c18
-rw-r--r--source/blender/editors/space_file/filelist.c6
-rw-r--r--source/blender/editors/space_file/filelist.h2
-rw-r--r--source/blender/editors/space_file/space_file.c6
-rw-r--r--source/blender/editors/space_graph/graph_edit.c8
-rw-r--r--source/blender/editors/space_graph/graph_intern.h6
-rw-r--r--source/blender/editors/space_graph/graph_ops.c17
-rw-r--r--source/blender/editors/space_graph/graph_select.c258
-rw-r--r--source/blender/editors/space_graph/space_graph.c1
-rw-r--r--source/blender/editors/space_image/image_draw.c14
-rw-r--r--source/blender/editors/space_image/image_intern.h5
-rw-r--r--source/blender/editors/space_image/image_ops.c8
-rw-r--r--source/blender/editors/space_image/image_render.c6
-rw-r--r--source/blender/editors/space_image/space_image.c10
-rw-r--r--source/blender/editors/space_info/info_stats.c3
-rw-r--r--source/blender/editors/space_info/space_info.c8
-rw-r--r--source/blender/editors/space_logic/logic_ops.c20
-rw-r--r--source/blender/editors/space_logic/logic_window.c12
-rw-r--r--source/blender/editors/space_logic/space_logic.c5
-rw-r--r--source/blender/editors/space_nla/nla_edit.c4
-rw-r--r--source/blender/editors/space_nla/nla_intern.h1
-rw-r--r--source/blender/editors/space_nla/nla_ops.c14
-rw-r--r--source/blender/editors/space_nla/nla_select.c244
-rw-r--r--source/blender/editors/space_nla/space_nla.c1
-rw-r--r--source/blender/editors/space_node/drawnode.c4
-rw-r--r--source/blender/editors/space_node/node_draw.c7
-rw-r--r--source/blender/editors/space_node/node_edit.c6
-rw-r--r--source/blender/editors/space_node/node_intern.h2
-rw-r--r--source/blender/editors/space_node/node_ops.c1
-rw-r--r--source/blender/editors/space_node/node_state.c6
-rw-r--r--source/blender/editors/space_node/space_node.c6
-rw-r--r--source/blender/editors/space_outliner/outliner.c16
-rw-r--r--source/blender/editors/space_outliner/space_outliner.c1
-rw-r--r--source/blender/editors/space_script/space_script.c1
-rw-r--r--source/blender/editors/space_sequencer/sequencer_draw.c4
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c40
-rw-r--r--source/blender/editors/space_sequencer/sequencer_select.c10
-rw-r--r--source/blender/editors/space_sequencer/space_sequencer.c4
-rw-r--r--source/blender/editors/space_sound/space_sound.c5
-rw-r--r--source/blender/editors/space_text/space_text.c18
-rw-r--r--source/blender/editors/space_text/text_draw.c13
-rw-r--r--source/blender/editors/space_text/text_header.c2
-rw-r--r--source/blender/editors/space_text/text_intern.h5
-rw-r--r--source/blender/editors/space_text/text_ops.c155
-rw-r--r--source/blender/editors/space_text/text_python.c4
-rw-r--r--source/blender/editors/space_time/space_time.c1
-rw-r--r--source/blender/editors/space_time/time_ops.c8
-rw-r--r--source/blender/editors/space_userpref/space_userpref.c5
-rw-r--r--source/blender/editors/space_view3d/drawmesh.c2
-rw-r--r--source/blender/editors/space_view3d/drawobject.c6
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c12
-rw-r--r--source/blender/editors/space_view3d/view3d_buttons.c12
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c1
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c5
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c13
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h2
-rw-r--r--source/blender/editors/transform/transform.c14
-rw-r--r--source/blender/editors/transform/transform_constraints.c2
-rw-r--r--source/blender/editors/transform/transform_conversions.c8
-rw-r--r--source/blender/editors/transform/transform_generics.c2
-rw-r--r--source/blender/editors/transform/transform_input.c20
-rw-r--r--source/blender/editors/transform/transform_manipulator.c2
-rw-r--r--source/blender/editors/transform/transform_ops.c38
-rw-r--r--source/blender/editors/transform/transform_snap.c33
-rw-r--r--source/blender/editors/util/crazyspace.c13
-rw-r--r--source/blender/editors/util/editmode_undo.c5
-rw-r--r--source/blender/editors/util/undo.c2
-rw-r--r--source/blender/editors/uvedit/uvedit_draw.c1
-rw-r--r--source/blender/editors/uvedit/uvedit_ops.c44
-rw-r--r--source/blender/editors/uvedit/uvedit_unwrap_ops.c2
-rw-r--r--source/blender/gpu/GPU_buffers.h4
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c83
-rw-r--r--source/blender/gpu/intern/gpu_codegen.c9
-rw-r--r--source/blender/gpu/intern/gpu_material.c20
-rw-r--r--source/blender/gpu/intern/gpu_shader_material.glsl11
-rw-r--r--source/blender/gpu/intern/gpu_shader_material.glsl.c1697
-rw-r--r--source/blender/gpu/intern/gpu_shader_vertex.glsl2
-rw-r--r--source/blender/gpu/intern/gpu_shader_vertex.glsl.c15
-rw-r--r--source/blender/imbuf/IMB_imbuf.h64
-rw-r--r--source/blender/imbuf/IMB_imbuf_types.h3
-rw-r--r--source/blender/imbuf/intern/tiff.c8
-rw-r--r--source/blender/makesdna/DNA_ID.h11
-rw-r--r--source/blender/makesdna/DNA_action_types.h4
-rw-r--r--source/blender/makesdna/DNA_actuator_types.h15
-rw-r--r--source/blender/makesdna/DNA_anim_types.h6
-rw-r--r--source/blender/makesdna/DNA_armature_types.h6
-rw-r--r--source/blender/makesdna/DNA_boid_types.h8
-rw-r--r--source/blender/makesdna/DNA_brush_types.h7
-rw-r--r--source/blender/makesdna/DNA_camera_types.h8
-rw-r--r--source/blender/makesdna/DNA_cloth_types.h6
-rw-r--r--source/blender/makesdna/DNA_color_types.h7
-rw-r--r--source/blender/makesdna/DNA_constraint_types.h6
-rw-r--r--source/blender/makesdna/DNA_controller_types.h8
-rw-r--r--source/blender/makesdna/DNA_curve_types.h10
-rw-r--r--source/blender/makesdna/DNA_customdata_types.h10
-rw-r--r--source/blender/makesdna/DNA_documentation.h26
-rw-r--r--source/blender/makesdna/DNA_effect_types.h8
-rw-r--r--source/blender/makesdna/DNA_fileglobal_types.h8
-rw-r--r--source/blender/makesdna/DNA_genfile.h6
-rw-r--r--source/blender/makesdna/DNA_gpencil_types.h6
-rw-r--r--source/blender/makesdna/DNA_group_types.h6
-rw-r--r--source/blender/makesdna/DNA_image_types.h8
-rw-r--r--source/blender/makesdna/DNA_ipo_types.h20
-rw-r--r--source/blender/makesdna/DNA_key_types.h8
-rw-r--r--source/blender/makesdna/DNA_lamp_types.h8
-rw-r--r--source/blender/makesdna/DNA_lattice_types.h6
-rw-r--r--source/blender/makesdna/DNA_listBase.h12
-rw-r--r--source/blender/makesdna/DNA_material_types.h8
-rw-r--r--source/blender/makesdna/DNA_mesh_types.h6
-rw-r--r--source/blender/makesdna/DNA_meshdata_types.h6
-rw-r--r--source/blender/makesdna/DNA_meta_types.h8
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h12
-rw-r--r--source/blender/makesdna/DNA_nla_types.h6
-rw-r--r--source/blender/makesdna/DNA_node_types.h6
-rw-r--r--source/blender/makesdna/DNA_object_fluidsim.h6
-rw-r--r--source/blender/makesdna/DNA_object_force.h6
-rw-r--r--source/blender/makesdna/DNA_object_types.h11
-rw-r--r--source/blender/makesdna/DNA_outliner_types.h6
-rw-r--r--source/blender/makesdna/DNA_packedFile_types.h11
-rw-r--r--source/blender/makesdna/DNA_particle_types.h8
-rw-r--r--source/blender/makesdna/DNA_property_types.h11
-rw-r--r--source/blender/makesdna/DNA_scene_types.h9
-rw-r--r--source/blender/makesdna/DNA_screen_types.h6
-rw-r--r--source/blender/makesdna/DNA_sdna_types.h8
-rw-r--r--source/blender/makesdna/DNA_sensor_types.h10
-rw-r--r--source/blender/makesdna/DNA_sequence_types.h9
-rw-r--r--source/blender/makesdna/DNA_smoke_types.h6
-rw-r--r--source/blender/makesdna/DNA_sound_types.h9
-rw-r--r--source/blender/makesdna/DNA_space_types.h13
-rw-r--r--source/blender/makesdna/DNA_text_types.h9
-rw-r--r--source/blender/makesdna/DNA_texture_types.h10
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h10
-rw-r--r--source/blender/makesdna/DNA_vec_types.h14
-rw-r--r--source/blender/makesdna/DNA_vfont_types.h10
-rw-r--r--source/blender/makesdna/DNA_view2d_types.h8
-rw-r--r--source/blender/makesdna/DNA_view3d_types.h8
-rw-r--r--source/blender/makesdna/DNA_windowmanager_types.h6
-rw-r--r--source/blender/makesdna/DNA_world_types.h8
-rw-r--r--source/blender/makesdna/intern/makesdna.c22
-rw-r--r--source/blender/makesrna/RNA_access.h63
-rw-r--r--source/blender/makesrna/RNA_define.h6
-rw-r--r--source/blender/makesrna/RNA_documentation.h5
-rw-r--r--source/blender/makesrna/RNA_enum_types.h6
-rw-r--r--source/blender/makesrna/RNA_types.h52
-rw-r--r--source/blender/makesrna/intern/makesrna.c4
-rw-r--r--source/blender/makesrna/intern/rna_ID.c30
-rw-r--r--source/blender/makesrna/intern/rna_access.c22
-rw-r--r--source/blender/makesrna/intern/rna_action.c49
-rw-r--r--source/blender/makesrna/intern/rna_actuator.c2
-rw-r--r--source/blender/makesrna/intern/rna_brush.c2
-rw-r--r--source/blender/makesrna/intern/rna_internal.h36
-rw-r--r--source/blender/makesrna/intern/rna_main_api.c100
-rw-r--r--source/blender/makesrna/intern/rna_material.c2
-rw-r--r--source/blender/makesrna/intern/rna_modifier.c36
-rw-r--r--source/blender/makesrna/intern/rna_object.c1
-rw-r--r--source/blender/makesrna/intern/rna_object_api.c2
-rw-r--r--source/blender/makesrna/intern/rna_object_force.c4
-rw-r--r--source/blender/makesrna/intern/rna_rna.c19
-rw-r--r--source/blender/makesrna/intern/rna_scene.c1
-rw-r--r--source/blender/makesrna/intern/rna_space.c11
-rw-r--r--source/blender/makesrna/intern/rna_ui.c6
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c4
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c1
-rw-r--r--source/blender/makesrna/intern/rna_wm.c9
-rw-r--r--source/blender/makesrna/intern/rna_wm_api.c30
-rw-r--r--source/blender/modifiers/SConscript2
-rw-r--r--source/blender/modifiers/intern/MOD_particlesystem.c15
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_image.c2
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_math.c15
-rw-r--r--source/blender/nodes/intern/TEX_nodes/TEX_math.c16
-rw-r--r--source/blender/nodes/intern/TEX_util.c2
-rw-r--r--source/blender/python/BPY_extern.h2
-rw-r--r--source/blender/python/generic/CMakeLists.txt24
-rw-r--r--source/blender/python/generic/IDProp.c2
-rw-r--r--source/blender/python/generic/IDProp.h5
-rw-r--r--source/blender/python/generic/bgl.c3
-rw-r--r--source/blender/python/generic/bgl.h2
-rw-r--r--source/blender/python/generic/mathutils.c10
-rw-r--r--source/blender/python/generic/mathutils.h12
-rw-r--r--source/blender/python/generic/mathutils_Color.c (renamed from source/blender/python/generic/mathutils_color.c)4
-rw-r--r--source/blender/python/generic/mathutils_Color.h (renamed from source/blender/python/generic/mathutils_color.h)2
-rw-r--r--source/blender/python/generic/mathutils_Euler.c (renamed from source/blender/python/generic/mathutils_euler.c)7
-rw-r--r--source/blender/python/generic/mathutils_Euler.h (renamed from source/blender/python/generic/mathutils_euler.h)2
-rw-r--r--source/blender/python/generic/mathutils_Matrix.c (renamed from source/blender/python/generic/mathutils_matrix.c)2
-rw-r--r--source/blender/python/generic/mathutils_Matrix.h (renamed from source/blender/python/generic/mathutils_matrix.h)2
-rw-r--r--source/blender/python/generic/mathutils_Quaternion.c (renamed from source/blender/python/generic/mathutils_quat.c)4
-rw-r--r--source/blender/python/generic/mathutils_Quaternion.h (renamed from source/blender/python/generic/mathutils_quat.h)2
-rw-r--r--source/blender/python/generic/mathutils_Vector.c (renamed from source/blender/python/generic/mathutils_vector.c)2
-rw-r--r--source/blender/python/generic/mathutils_Vector.h (renamed from source/blender/python/generic/mathutils_vector.h)2
-rw-r--r--source/blender/python/generic/mathutils_geometry.c2
-rw-r--r--source/blender/python/generic/mathutils_geometry.h1
-rw-r--r--source/blender/python/generic/noise_py_api.c (renamed from source/blender/python/generic/noise.c)2
-rw-r--r--source/blender/python/generic/noise_py_api.h29
-rw-r--r--source/blender/python/generic/py_capi_utils.c5
-rw-r--r--source/blender/python/intern/CMakeLists.txt1
-rw-r--r--source/blender/python/intern/bpy.c4
-rw-r--r--source/blender/python/intern/bpy_app.c3
-rw-r--r--source/blender/python/intern/bpy_app.h12
-rw-r--r--source/blender/python/intern/bpy_driver.c2
-rw-r--r--source/blender/python/intern/bpy_driver.h36
-rw-r--r--source/blender/python/intern/bpy_interface.c17
-rw-r--r--source/blender/python/intern/bpy_operator.c23
-rw-r--r--source/blender/python/intern/bpy_operator.h7
-rw-r--r--source/blender/python/intern/bpy_operator_wrap.c2
-rw-r--r--source/blender/python/intern/bpy_operator_wrap.h7
-rw-r--r--source/blender/python/intern/bpy_props.c94
-rw-r--r--source/blender/python/intern/bpy_props.h2
-rw-r--r--source/blender/python/intern/bpy_rna.c243
-rw-r--r--source/blender/python/intern/bpy_rna.h2
-rw-r--r--source/blender/python/intern/bpy_rna_array.c1
-rw-r--r--source/blender/python/intern/bpy_rna_callback.c1
-rw-r--r--source/blender/python/intern/bpy_util.c4
-rw-r--r--source/blender/python/intern/bpy_util.h2
-rw-r--r--source/blender/readblenfile/BLO_readblenfile.h6
-rw-r--r--source/blender/render/CMakeLists.txt1
-rw-r--r--source/blender/render/SConscript3
-rw-r--r--source/blender/render/extern/include/RE_shader_ext.h2
-rw-r--r--source/blender/render/intern/source/convertblender.c112
-rw-r--r--source/blender/render/intern/source/imagetexture.c3
-rw-r--r--source/blender/render/intern/source/pipeline.c1
-rw-r--r--source/blender/render/intern/source/pointdensity.c3
-rw-r--r--source/blender/render/intern/source/render_texture.c18
-rw-r--r--source/blender/render/intern/source/rendercore.c12
-rw-r--r--source/blender/render/intern/source/renderdatabase.c3
-rw-r--r--source/blender/render/intern/source/shadeinput.c82
-rw-r--r--source/blender/windowmanager/WM_api.h18
-rw-r--r--source/blender/windowmanager/intern/wm_cursors.c2
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c8
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c43
-rw-r--r--source/blender/windowmanager/intern/wm_files.c7
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c4
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c2
-rw-r--r--source/blender/windowmanager/wm_event_types.h6
-rw-r--r--source/blender/windowmanager/wm_files.h4
496 files changed, 5302 insertions, 3197 deletions
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h
index b696c64023d..d26c5166ddc 100644
--- a/source/blender/blenfont/BLF_api.h
+++ b/source/blender/blenfont/BLF_api.h
@@ -177,6 +177,8 @@ void BLF_lang_set(const char *);
/* Set the current encoding name. */
void BLF_lang_encoding_name(const char *str);
+void BLF_lang_encoding(const char *str);
+
/* Add a path to the font dir paths. */
void BLF_dir_add(const char *path);
diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c
index 462ecebc10a..a989b1a1e9a 100644
--- a/source/blender/blenfont/intern/blf.c
+++ b/source/blender/blenfont/intern/blf.c
@@ -56,15 +56,15 @@
#define BLF_MAX_FONT 16
/* Font array. */
-FontBLF *global_font[BLF_MAX_FONT];
+static FontBLF *global_font[BLF_MAX_FONT];
/* Number of font. */
-int global_font_num= 0;
+static int global_font_num= 0;
/* Default size and dpi, for BLF_draw_default. */
-int global_font_default= -1;
-int global_font_points= 11;
-int global_font_dpi= 72;
+static int global_font_default= -1;
+static int global_font_points= 11;
+static int global_font_dpi= 72;
// XXX, should these be made into global_font_'s too?
int blf_mono_font= -1;
diff --git a/source/blender/blenfont/intern/blf_dir.c b/source/blender/blenfont/intern/blf_dir.c
index 6bee7b38537..d3b662bdb65 100644
--- a/source/blender/blenfont/intern/blf_dir.c
+++ b/source/blender/blenfont/intern/blf_dir.c
@@ -44,6 +44,7 @@
#include "BIF_gl.h"
+#include "BLF_api.h"
#include "blf_internal_types.h"
static ListBase global_font_dir= { NULL, NULL };
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index ce68df5c8b6..1b739c31f08 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -52,17 +52,17 @@
#include "blf_internal.h"
-/* freetype2 handle. */
-FT_Library global_ft_lib;
+/* freetype2 handle ONLY for this file!. */
+static FT_Library ft_lib;
int blf_font_init(void)
{
- return(FT_Init_FreeType(&global_ft_lib));
+ return(FT_Init_FreeType(&ft_lib));
}
void blf_font_exit(void)
{
- FT_Done_FreeType(global_ft_lib);
+ FT_Done_FreeType(ft_lib);
}
void blf_font_size(FontBLF *font, int size, int dpi)
@@ -547,6 +547,7 @@ static void blf_font_fill(FontBLF *font)
font->b_col[1]= 0;
font->b_col[2]= 0;
font->b_col[3]= 0;
+ font->ft_lib= ft_lib;
memset(font->glyph_ascii_table, 0, sizeof(font->glyph_ascii_table));
}
@@ -558,7 +559,7 @@ FontBLF *blf_font_new(const char *name, const char *filename)
char *mfile;
font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new");
- err= FT_New_Face(global_ft_lib, filename, 0, &font->face);
+ err= FT_New_Face(ft_lib, filename, 0, &font->face);
if (err) {
MEM_freeN(font);
return(NULL);
@@ -600,7 +601,7 @@ FontBLF *blf_font_new_from_mem(const char *name, unsigned char *mem, int mem_siz
FT_Error err;
font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new_from_mem");
- err= FT_New_Memory_Face(global_ft_lib, mem, mem_size, 0, &font->face);
+ err= FT_New_Memory_Face(ft_lib, mem, mem_size, 0, &font->face);
if (err) {
MEM_freeN(font);
return(NULL);
diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c
index 8d13975b83a..c29017c35f3 100644
--- a/source/blender/blenfont/intern/blf_glyph.c
+++ b/source/blender/blenfont/intern/blf_glyph.c
@@ -51,7 +51,6 @@
#include "blf_internal_types.h"
#include "blf_internal.h"
-FT_Library global_ft_lib;
GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi)
{
@@ -235,9 +234,9 @@ GlyphBLF *blf_glyph_add(FontBLF *font, unsigned int index, unsigned int c)
/* Convert result from 1 bit per pixel to 8 bit per pixel */
/* Accum errors for later, fine if not interested beyond "ok vs any error" */
FT_Bitmap_New(&tempbitmap);
- err += FT_Bitmap_Convert(global_ft_lib, &slot->bitmap, &tempbitmap, 1); /* Does Blender use Pitch 1 always? It works so far */
- err += FT_Bitmap_Copy(global_ft_lib, &tempbitmap, &slot->bitmap);
- err += FT_Bitmap_Done(global_ft_lib, &tempbitmap);
+ err += FT_Bitmap_Convert(font->ft_lib, &slot->bitmap, &tempbitmap, 1); /* Does Blender use Pitch 1 always? It works so far */
+ err += FT_Bitmap_Copy(font->ft_lib, &tempbitmap, &slot->bitmap);
+ err += FT_Bitmap_Done(font->ft_lib, &tempbitmap);
} else {
err = FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL);
}
diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h
index d7c023fc415..dd6bf3cfa7c 100644
--- a/source/blender/blenfont/intern/blf_internal_types.h
+++ b/source/blender/blenfont/intern/blf_internal_types.h
@@ -183,6 +183,9 @@ typedef struct FontBLF {
/* fast ascii lookip */
GlyphBLF *glyph_ascii_table[256];
+ /* freetype2 lib handle. */
+ FT_Library ft_lib;
+
/* freetype2 face. */
FT_Face face;
diff --git a/source/blender/blenfont/intern/blf_lang.c b/source/blender/blenfont/intern/blf_lang.c
index 610e8750bc1..a9322944ce5 100644
--- a/source/blender/blenfont/intern/blf_lang.c
+++ b/source/blender/blenfont/intern/blf_lang.c
@@ -99,7 +99,7 @@ void BLF_lang_set(const char *str)
BLI_strncpy(global_language, str, sizeof(global_language));
}
-static void BLF_lang_encoding(const char *str)
+void BLF_lang_encoding(const char *str)
{
BLI_strncpy(global_encoding_name, str, sizeof(global_encoding_name));
/* bind_textdomain_codeset(DOMAIN_NAME, encoding_name); */
@@ -112,7 +112,7 @@ void BLF_lang_init(void)
return;
}
-static void BLF_lang_encoding(const char *str)
+void BLF_lang_encoding(const char *str)
{
(void)str;
return;
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 79e9b11d4db..857c88a6004 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,15 +30,17 @@
#ifndef BKE_DERIVEDMESH_H
#define BKE_DERIVEDMESH_H
-/* TODO (Probably)
+/** \file BKE_DerivedMesh.h
+ * \ingroup bke
*
- * o Make drawMapped* functions take a predicate function that
+ * \todo
+ * - Make drawMapped* functions take a predicate function that
* determines whether to draw the edge (this predicate can
* also set color, etc). This will be slightly more general
* and allow some of the functions to be collapsed.
- * o Once accessor functions are added then single element draw
+ * - Once accessor functions are added then single element draw
* functions can be implemented using primitive accessors.
- * o Add function to dispatch to renderer instead of using
+ * - Add function to dispatch to renderer instead of using
* conversion to DLM.
*/
@@ -533,7 +535,7 @@ typedef struct DMVertexAttribs {
} mcol[MAX_MCOL];
struct {
- float (*array)[3];
+ float (*array)[4];
int emOffset, glIndex;
} tang;
diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h
index 1c75387ba5d..59da97d8b09 100644
--- a/source/blender/blenkernel/BKE_action.h
+++ b/source/blender/blenkernel/BKE_action.h
@@ -1,9 +1,4 @@
-/* BKE_action.h May 2001
- *
- * Blender kernel action and pose functionality
- *
- * Reevan McKay
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +28,14 @@
#ifndef BKE_ACTION_H
#define BKE_ACTION_H
+/** \file BKE_action.h
+ * \ingroup bke
+ * \brief Blender kernel action and pose functionality.
+ * \author Reevan McKay
+ * \author Ton Roosendaal (full recode 2005)
+ * \author Joshua Leung (full recode 2009)
+ * \since may 2001
+ */
#include "DNA_listBase.h"
diff --git a/source/blender/blenkernel/BKE_anim.h b/source/blender/blenkernel/BKE_anim.h
index e82eb0ed0c9..25165eeaee7 100644
--- a/source/blender/blenkernel/BKE_anim.h
+++ b/source/blender/blenkernel/BKE_anim.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_anim.h (mar-2001 nzc);
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,11 @@
#ifndef BKE_ANIM_H
#define BKE_ANIM_H
+/** \file BKE_anim.h
+ * \ingroup bke
+ * \author nzc
+ * \since March 2001
+ */
struct Path;
struct Object;
struct PartEff;
diff --git a/source/blender/blenkernel/BKE_animsys.h b/source/blender/blenkernel/BKE_animsys.h
index 500210d2fcd..a469d05ee26 100644
--- a/source/blender/blenkernel/BKE_animsys.h
+++ b/source/blender/blenkernel/BKE_animsys.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,11 @@
#ifndef BKE_ANIM_SYS_H
#define BKE_ANIM_SYS_H
+/** \file BKE_animsys.h
+ * \ingroup bke
+ * \author Joshua Leung
+ */
+
struct ID;
struct ListBase;
struct Main;
diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h
index ed2a06b0f33..efa87532859 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_armature.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef BKE_ARMATURE_H
#define BKE_ARMATURE_H
+/** \file BKE_armature.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
+
struct Bone;
struct Main;
struct bArmature;
@@ -108,6 +112,7 @@ void armature_mat_pose_to_delta(float delta_mat[][4], float pose_mat[][4], float
void pchan_mat3_to_rot(struct bPoseChannel *pchan, float mat[][3], short use_compat);
void pchan_apply_mat4(struct bPoseChannel *pchan, float mat[][4], short use_comat);
void pchan_to_mat4(struct bPoseChannel *pchan, float chan_mat[4][4]);
+void pchan_calc_mat(struct bPoseChannel *pchan);
/* Rotation Mode Conversions - Used for PoseChannels + Objects... */
void BKE_rotMode_change_values(float quat[4], float eul[3], float axis[3], float *angle, short oldMode, short newMode);
diff --git a/source/blender/blenkernel/BKE_array_mallocn.h b/source/blender/blenkernel/BKE_array_mallocn.h
index 8fe32da437c..42c4c2ebdd0 100644
--- a/source/blender/blenkernel/BKE_array_mallocn.h
+++ b/source/blender/blenkernel/BKE_array_mallocn.h
@@ -30,7 +30,12 @@
#ifndef BKE_ARRAY_MALLOCN_H
#define BKE_ARRAY_MALLOCN_H
-/*little array macro library. example of usage:
+/** \file BKE_array_mallocn.h
+ * \ingroup bke
+ * \brief little array macro library.
+ */
+
+/* example of usage:
int *arr = NULL;
V_DECLARE(arr);
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 65e7f848ea0..aa04e20beb6 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -1,8 +1,4 @@
-/**
- * blenlib/BKE_blender.h (mar-2001 nzc)
- *
- * Blender util stuff?
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +29,13 @@
#ifndef BKE_BLENDER_H
#define BKE_BLENDER_H
+/** \file BKE_blender.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ * \brief Blender util stuff
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_bmesh.h b/source/blender/blenkernel/BKE_bmesh.h
index 44ca3842fd9..5c28fa88503 100644
--- a/source/blender/blenkernel/BKE_bmesh.h
+++ b/source/blender/blenkernel/BKE_bmesh.h
@@ -1,8 +1,4 @@
-/**
- * BKE_bmesh.h jan 2007
- *
- * BMesh modeler structure and functions.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -37,6 +33,13 @@
#ifndef BKE_BMESH_H
#define BKE_BMESH_H
+/** \file BKE_bmesh.h
+ * \ingroup bke
+ * \since January 2007
+ * \brief BMesh modeler structure and functions.
+ *
+ */
+
#include "DNA_listBase.h"
#include "BLI_utildefines.h"
#include "BLI_ghash.h"
diff --git a/source/blender/blenkernel/BKE_bmeshCustomData.h b/source/blender/blenkernel/BKE_bmeshCustomData.h
index d2b72019b68..aabfcfaa0f6 100644
--- a/source/blender/blenkernel/BKE_bmeshCustomData.h
+++ b/source/blender/blenkernel/BKE_bmeshCustomData.h
@@ -1,8 +1,4 @@
-/**
- * BKE_bmesh.h jan 2007
- *
- * BMesh modeler structure and functions.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -38,6 +34,12 @@
#ifndef BKE_BMESHCUSTOMDATA_H
#define BKE_BMESHCUSTOMDATA_H
+/** \file BKE_bmeshCustomData.h
+ * \ingroup bke
+ * \since January 2007
+ * \brief BMesh modeler structure and functions - custom data.
+ */
+
struct BLI_mempool;
/*Custom Data Types and defines
diff --git a/source/blender/blenkernel/BKE_bmfont.h b/source/blender/blenkernel/BKE_bmfont.h
index 6a47dcbd6c4..ef7323fc4c3 100644
--- a/source/blender/blenkernel/BKE_bmfont.h
+++ b/source/blender/blenkernel/BKE_bmfont.h
@@ -1,8 +1,4 @@
-/**
- * blenlib/BKE_bmfont.h (mar-2001 nzc)
- *
- *
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +29,12 @@
#ifndef BKE_BMFONT_H
#define BKE_BMFONT_H
+/** \file BKE_bmfont.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_bmfont_types.h b/source/blender/blenkernel/BKE_bmfont_types.h
index 77a618c1be4..658302e9f1d 100644
--- a/source/blender/blenkernel/BKE_bmfont_types.h
+++ b/source/blender/blenkernel/BKE_bmfont_types.h
@@ -1,8 +1,4 @@
-/**
- * blenlib/BKE_bmfont_types.h (mar-2001 nzc)
- *
- *
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +29,11 @@
#ifndef BKE_BMFONT_TYPES_H
#define BKE_BMFONT_TYPES_H
+/** \file BKE_bmfont_types.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
#define is_power_of_two(N) ((N ^ (N - 1)) == (2 * N - 1))
/*
Moved to IMB_imbuf_types.h where it will live close to the ImBuf type.
diff --git a/source/blender/blenkernel/BKE_boids.h b/source/blender/blenkernel/BKE_boids.h
index ffd803f21a5..36ca0cde87d 100644
--- a/source/blender/blenkernel/BKE_boids.h
+++ b/source/blender/blenkernel/BKE_boids.h
@@ -1,6 +1,4 @@
-/* BKE_particle.h
- *
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,6 +30,12 @@
#ifndef BKE_BOIDS_H
#define BKE_BOIDS_H
+/** \file BKE_boids.h
+ * \ingroup bke
+ * \since 2009
+ * \author Janne Karhu
+ */
+
#include "DNA_boid_types.h"
typedef struct BoidBrainData {
diff --git a/source/blender/blenkernel/BKE_booleanops_mesh.h b/source/blender/blenkernel/BKE_booleanops_mesh.h
index 7c2d619659a..aecd3385662 100644
--- a/source/blender/blenkernel/BKE_booleanops_mesh.h
+++ b/source/blender/blenkernel/BKE_booleanops_mesh.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,6 +29,10 @@
#ifndef BKE_PyBooleanOps_h
#define BKE_PyBooleanOps_h
+/** \file BKE_booleanops_mesh.h
+ * \ingroup bke
+ */
+
#include "CSG_BooleanOps.h"
/**
diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h
index deb10ef6d35..a9d379e6c69 100644
--- a/source/blender/blenkernel/BKE_brush.h
+++ b/source/blender/blenkernel/BKE_brush.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +31,10 @@
#ifndef BKE_BRUSH_H
#define BKE_BRUSH_H
+/** \file BKE_brush.h
+ * \ingroup bke
+ */
+
struct ID;
struct Brush;
struct ImBuf;
@@ -109,5 +113,8 @@ void brush_set_unprojected_radius(struct Brush *brush, float value);
float brush_alpha(struct Brush *brush);
void brush_set_alpha(struct Brush *brush, float value);
+/* debugging only */
+void brush_debug_print_state(struct Brush *br);
+
#endif
diff --git a/source/blender/blenkernel/BKE_bullet.h b/source/blender/blenkernel/BKE_bullet.h
index b695bdc91ae..76358c4485b 100644
--- a/source/blender/blenkernel/BKE_bullet.h
+++ b/source/blender/blenkernel/BKE_bullet.h
@@ -1,4 +1,4 @@
-/**
+/*
*
* $Id$
*
@@ -30,6 +30,10 @@
#ifndef BKE_BULLET_H
#define BKE_BULLET_H
+/** \file BKE_bullet.h
+ * \ingroup bke
+ */
+
struct BulletSoftBody;
diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h
index 975e64929c2..29487713ad4 100644
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -1,5 +1,4 @@
-/**
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +29,10 @@
#ifndef BKE_BVHUTILS_H
#define BKE_BVHUTILS_H
+/** \file BKE_bvhutils.h
+ * \ingroup bke
+ */
+
#include "BLI_kdopbvh.h"
#include "BLI_linklist.h"
diff --git a/source/blender/blenkernel/BKE_cdderivedmesh.h b/source/blender/blenkernel/BKE_cdderivedmesh.h
index bff9f16b489..1edec2b69d9 100644
--- a/source/blender/blenkernel/BKE_cdderivedmesh.h
+++ b/source/blender/blenkernel/BKE_cdderivedmesh.h
@@ -27,9 +27,11 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/* CDDerivedMesh interface.
- * CDDerivedMesh (CD = Custom Data) is a DerivedMesh backend which stores
- * mesh elements (vertices, edges and faces) as layers of custom element data.
+/** \file BKE_cdderivedmesh.h
+ * \ingroup bke
+ * \section aboutcdderivedmesh CDDerivedMesh interface
+ * CDDerivedMesh (CD = Custom Data) is a DerivedMesh backend which stores
+ * mesh elements (vertices, edges and faces) as layers of custom element data.
*/
#ifndef BKE_CDDERIVEDMESH_H
diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h
index 83af573bd42..1ee51cd2122 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -1,6 +1,4 @@
-/**
- * BKE_cloth.h
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,11 @@
#ifndef BKE_CLOTH_H
#define BKE_CLOTH_H
+/** \file BKE_cloth.h
+ * \ingroup bke
+ * \author Daniel Genrich
+ */
+
#include <float.h>
struct Object;
diff --git a/source/blender/blenkernel/BKE_collision.h b/source/blender/blenkernel/BKE_collision.h
index 03d4800076c..b54d4275719 100644
--- a/source/blender/blenkernel/BKE_collision.h
+++ b/source/blender/blenkernel/BKE_collision.h
@@ -1,6 +1,4 @@
-/**
- * BKE_cloth.h
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,11 @@
#ifndef BKE_COLLISIONS_H
#define BKE_COLLISIONS_H
+/** \file BKE_collision.h
+ * \ingroup bke
+ * \author Daniel Genrich
+ */
+
#include <math.h>
#include <float.h>
#include <stdlib.h>
diff --git a/source/blender/blenkernel/BKE_colortools.h b/source/blender/blenkernel/BKE_colortools.h
index e0ebedb320b..b3709853a8c 100644
--- a/source/blender/blenkernel/BKE_colortools.h
+++ b/source/blender/blenkernel/BKE_colortools.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,6 +29,10 @@
#ifndef BKE_COLORTOOLS_H
#define BKE_COLORTOOLS_H
+/** \file BKE_colortools.h
+ * \ingroup bke
+ */
+
struct CurveMapping;
struct CurveMap;
struct Scopes;
diff --git a/source/blender/blenkernel/BKE_constraint.h b/source/blender/blenkernel/BKE_constraint.h
index d6e0075df1e..7c0e7050a9f 100644
--- a/source/blender/blenkernel/BKE_constraint.h
+++ b/source/blender/blenkernel/BKE_constraint.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +30,11 @@
#ifndef BKE_CONSTRAINT_H
#define BKE_CONSTRAINT_H
+/** \file BKE_constraint.h
+ * \ingroup bke
+ * \author Joshua Leung (major recode 2007)
+ */
+
struct ID;
struct bConstraint;
struct bConstraintTarget;
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index 3acc08a76b6..7254536b555 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef BKE_CONTEXT_H
#define BKE_CONTEXT_H
+/** \file BKE_context.h
+ * \ingroup bke
+ */
+
#include "DNA_listBase.h"
#include "RNA_types.h"
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index 8c652a11794..f0c58e0a511 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_curve.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,11 @@
#ifndef BKE_CURVE_H
#define BKE_CURVE_H
+/** \file BKE_curve.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
struct Curve;
struct ListBase;
struct Object;
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h
index e9118323682..c30100ea55a 100644
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@ -27,7 +27,11 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/* CustomData interface, see also DNA_customdata_types.h. */
+/** \file BKE_customdata.h
+ * \ingroup bke
+ * \author Ben Batt
+ * \brief CustomData interface, see also DNA_customdata_types.h.
+ */
#ifndef BKE_CUSTOMDATA_H
#define BKE_CUSTOMDATA_H
diff --git a/source/blender/blenkernel/BKE_customdata_file.h b/source/blender/blenkernel/BKE_customdata_file.h
index 9bcef7636c6..f97565f23a1 100644
--- a/source/blender/blenkernel/BKE_customdata_file.h
+++ b/source/blender/blenkernel/BKE_customdata_file.h
@@ -23,6 +23,10 @@
#ifndef BKE_CUSTOMDATA_FILE_H
#define BKE_CUSTOMDATA_FILE_H
+/** \file BKE_customdata_file.h
+ * \ingroup bke
+ */
+
#define CDF_TYPE_IMAGE 0
#define CDF_TYPE_MESH 1
diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h
index eaabc57c781..a9ac201beda 100644
--- a/source/blender/blenkernel/BKE_deform.h
+++ b/source/blender/blenkernel/BKE_deform.h
@@ -1,9 +1,4 @@
-/* BKE_deform.h June 2001
- *
- * support for deformation groups and hooks
- *
- * Reevan McKay et al
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -35,6 +30,13 @@
#ifndef BKE_DEFORM_H
#define BKE_DEFORM_H
+/** \file BKE_deform.h
+ * \ingroup bke
+ * \since June 2001
+ * \author Reevan McKay et al
+ * \brief support for deformation groups and hooks.
+ */
+
struct Object;
struct ListBase;
struct bDeformGroup;
diff --git a/source/blender/blenkernel/BKE_depsgraph.h b/source/blender/blenkernel/BKE_depsgraph.h
index 91954131b71..f78a957cbab 100644
--- a/source/blender/blenkernel/BKE_depsgraph.h
+++ b/source/blender/blenkernel/BKE_depsgraph.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef DEPSGRAPH_API
#define DEPSGRAPH_API
+/** \file BKE_depsgraph.h
+ * \ingroup bke
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_displist.h b/source/blender/blenkernel/BKE_displist.h
index 01d3de1b94f..766981a6fea 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -1,4 +1,3 @@
-/* display list (or rather multi purpose list) stuff */
/*
$Id$
*
@@ -32,6 +31,10 @@
#ifndef BKE_DISPLIST_H
#define BKE_DISPLIST_H
+/** \file BKE_displist.h
+ * \ingroup bke
+ * \brief display list (or rather multi purpose list) stuff.
+ */
#include "DNA_customdata_types.h"
#include "BKE_customdata.h"
diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h
index 99f55200eac..97ac711651b 100644
--- a/source/blender/blenkernel/BKE_effect.h
+++ b/source/blender/blenkernel/BKE_effect.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_effect.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,11 @@
#ifndef BKE_EFFECT_H
#define BKE_EFFECT_H
+/** \file BKE_effect.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
#include "DNA_modifier_types.h"
struct Object;
diff --git a/source/blender/blenkernel/BKE_endian.h b/source/blender/blenkernel/BKE_endian.h
index d61b81fb6ce..5647645e990 100644
--- a/source/blender/blenkernel/BKE_endian.h
+++ b/source/blender/blenkernel/BKE_endian.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -26,11 +26,17 @@
*
* ***** END GPL LICENSE BLOCK *****
* Are we little or big endian? From Harbison&Steele.
- * BKE_ENDIANNESS(a) returns 1 if big endian and returns 0 if little endian
*/
#ifndef BKE_ENDIAN_H
#define BKE_ENDIAN_H
+/** \file BKE_endian.h
+ * \ingroup bke
+ */
+
+/**
+ * BKE_ENDIANNESS(a) returns 1 if big endian and returns 0 if little endian
+ */
#define BKE_ENDIANNESS(a) { \
union { \
intptr_t l; \
diff --git a/source/blender/blenkernel/BKE_exotic.h b/source/blender/blenkernel/BKE_exotic.h
index ad59cd9c0a8..870dd7cb4d5 100644
--- a/source/blender/blenkernel/BKE_exotic.h
+++ b/source/blender/blenkernel/BKE_exotic.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,12 +25,16 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
- * dxf/vrml/stl external file io function prototypes
*/
#ifndef BKE_EXOTIC_H
#define BKE_EXOTIC_H
+/** \file BKE_exotic.h
+ * \ingroup bke
+ * \brief dxf/vrml/stl external file io function prototypes.
+ * \attention is this used still? Candidate for removal?
+ */
struct Mesh;
struct Scene;
diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h
index 5fbb7f37d15..f81acf4b11e 100644
--- a/source/blender/blenkernel/BKE_fcurve.h
+++ b/source/blender/blenkernel/BKE_fcurve.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,12 @@
#ifndef BKE_FCURVE_H
#define BKE_FCURVE_H
+/** \file BKE_fcurve.h
+ * \ingroup bke
+ * \author Joshua Leung
+ * \since 2009
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_fluidsim.h b/source/blender/blenkernel/BKE_fluidsim.h
index e730f4ec34c..f6070cd81f0 100644
--- a/source/blender/blenkernel/BKE_fluidsim.h
+++ b/source/blender/blenkernel/BKE_fluidsim.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +30,9 @@
#ifndef BKE_FLUIDSIM_H
#define BKE_FLUIDSIM_H
+/** \file BKE_fluidsim.h
+ * \ingroup bke
+ */
struct Object;
struct Scene;
diff --git a/source/blender/blenkernel/BKE_font.h b/source/blender/blenkernel/BKE_font.h
index c47a0b21855..7f4e7c208f6 100644
--- a/source/blender/blenkernel/BKE_font.h
+++ b/source/blender/blenkernel/BKE_font.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_vfont.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef BKE_VFONT_H
#define BKE_VFONT_H
+/** \file BKE_font.h
+ * \ingroup bke
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h
index d222fe8d296..d83e0e5bc4c 100644
--- a/source/blender/blenkernel/BKE_global.h
+++ b/source/blender/blenkernel/BKE_global.h
@@ -1,10 +1,4 @@
-/**
- * blenlib/BKE_global.h (mar-2001 nzc)
- *
- * Global settings, handles, pointers. This is the root for finding
- * any data in Blender. This block is not serialized, but built anew
- * for every fresh Blender run.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -35,6 +29,15 @@
#ifndef BKE_GLOBAL_H
#define BKE_GLOBAL_H
+/** \file BKE_global.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ * \section aboutglobal Global settings
+ * Global settings, handles, pointers. This is the root for finding
+ * any data in Blender. This block is not serialized, but built anew
+ * for every fresh Blender run.
+ */
#include "DNA_listBase.h"
#ifdef __cplusplus
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 898538c6820..4898bb28c8d 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,11 @@
#ifndef BKE_GPENCIL_H
#define BKE_GPENCIL_H
+/** \file BKE_gpencil.h
+ * \ingroup bke
+ * \author Joshua Leung
+ */
+
struct ListBase;
struct bGPdata;
struct bGPDlayer;
diff --git a/source/blender/blenkernel/BKE_group.h b/source/blender/blenkernel/BKE_group.h
index 767e3c97fef..e497f43e46d 100644
--- a/source/blender/blenkernel/BKE_group.h
+++ b/source/blender/blenkernel/BKE_group.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_group.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef BKE_GROUP_H
#define BKE_GROUP_H
+/** \file BKE_group.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
+
struct Base;
struct Group;
struct GroupObject;
diff --git a/source/blender/blenkernel/BKE_icons.h b/source/blender/blenkernel/BKE_icons.h
index 42cbd22d9f1..5404402718d 100644
--- a/source/blender/blenkernel/BKE_icons.h
+++ b/source/blender/blenkernel/BKE_icons.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +31,10 @@
#ifndef BKE_ICONS_H
#define BKE_ICONS_H
+/** \file BKE_icons.h
+ * \ingroup bke
+ */
+
/*
Resizable Icons for Blender
*/
diff --git a/source/blender/blenkernel/BKE_idcode.h b/source/blender/blenkernel/BKE_idcode.h
index b624e34e1cb..1b2b3d2ee95 100644
--- a/source/blender/blenkernel/BKE_idcode.h
+++ b/source/blender/blenkernel/BKE_idcode.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +30,10 @@
#ifndef BKE_ID_INFO_H
#define BKE_ID_INFO_H
+/** \file BKE_idcode.h
+ * \ingroup bke
+ */
+
/**
* Convert an idcode into a name.
*
diff --git a/source/blender/blenkernel/BKE_idprop.h b/source/blender/blenkernel/BKE_idprop.h
index 0ca5690e635..e71ad5c8a24 100644
--- a/source/blender/blenkernel/BKE_idprop.h
+++ b/source/blender/blenkernel/BKE_idprop.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,11 @@
#ifndef _BKE_IDPROP_H
#define _BKE_IDPROP_H
+/** \file BKE_idprop.h
+ * \ingroup bke
+ * \author Joseph Eagar
+ */
+
#include "DNA_ID.h"
struct IDProperty;
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index 283badc6faa..8f0ce8c1660 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_image.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef BKE_IMAGE_H
#define BKE_IMAGE_H
+/** \file BKE_image.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_ipo.h b/source/blender/blenkernel/BKE_ipo.h
index e700f263011..ea98c226e67 100644
--- a/source/blender/blenkernel/BKE_ipo.h
+++ b/source/blender/blenkernel/BKE_ipo.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_ipo.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,13 @@
#ifndef BKE_IPO_H
#define BKE_IPO_H
+/** \file BKE_ipo.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ * \author Joshua Leung
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_key.h b/source/blender/blenkernel/BKE_key.h
index d72dce3bf7c..c29320ef13c 100644
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_key.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,11 @@
#ifndef BKE_KEY_H
#define BKE_KEY_H
+/** \file BKE_key.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
struct Key;
struct KeyBlock;
struct ID;
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index 4f405e71662..2936338e760 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,12 +25,17 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
- * june-2001 ton
*/
#ifndef BKE_LATTICE_H
#define BKE_LATTICE_H
+/** \file BKE_lattice.h
+ * \ingroup bke
+ * \author Ton Roosendaal
+ * \since June 2001
+ */
+
struct Lattice;
struct Object;
struct Scene;
diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index f956749dc9d..871a78bbab3 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -1,8 +1,4 @@
-/**
- * blenlib/BKE_library.h (mar-2001 nzc)
- *
- * Library
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +29,11 @@
#ifndef BKE_LIBRARY_TYPES_H
#define BKE_LIBRARY_TYPES_H
+/** \file BKE_library.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index fcd61539b23..c60152f4a37 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -1,13 +1,4 @@
-/**
- * blenlib/BKE_main.h (mar-2001 nzc)
- *
- * Main is the root of the 'database' of a Blender context. All data
- * is stuffed into lists, and all these lists are knotted to here. A
- * Blender file is not much more but a binary dump of these
- * lists. This list of lists is not serialized itself.
- *
- * Oops... this should be a _types.h file.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -38,6 +29,19 @@
#ifndef BKE_MAIN_H
#define BKE_MAIN_H
+/** \file BKE_main.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ * \section aboutmain Main struct
+ * Main is the root of the 'database' of a Blender context. All data
+ * is stuffed into lists, and all these lists are knotted to here. A
+ * Blender file is not much more but a binary dump of these
+ * lists. This list of lists is not serialized itself.
+ *
+ * Oops... this should be a _types.h file.
+ *
+ */
#include "DNA_listBase.h"
#ifdef __cplusplus
diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index 16c99cd850f..523a67eff67 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,12 +25,15 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
- * General operations, lookup, etc. for materials.
*/
#ifndef BKE_MATERIAL_H
#define BKE_MATERIAL_H
+/** \file BKE_material.h
+ * \ingroup bke
+ * \brief General operations, lookup, etc. for materials.
+ */
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_mball.h b/source/blender/blenkernel/BKE_mball.h
index 6f36c26dd3f..c4119e99780 100644
--- a/source/blender/blenkernel/BKE_mball.h
+++ b/source/blender/blenkernel/BKE_mball.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_mball.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,11 @@
#ifndef BKE_MBALL_H
#define BKE_MBALL_H
+/** \file BKE_mball.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
struct MetaBall;
struct Object;
struct Scene;
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 02d52e10fa5..0f5780ed5b0 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -1,4 +1,4 @@
-/**
+/*
* blenlib/BKE_mesh.h (mar-2001 nzc)
*
* $Id$
@@ -31,6 +31,10 @@
#ifndef BKE_MESH_H
#define BKE_MESH_H
+/** \file BKE_mesh.h
+ * \ingroup bke
+ */
+
/***/
struct BoundBox;
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index 5bef7527c87..af625ae9d9c 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -1,5 +1,4 @@
-/**
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +29,10 @@
#ifndef BKE_MODIFIER_H
#define BKE_MODIFIER_H
+/** \file BKE_modifier.h
+ * \ingroup bke
+ */
+
#include "DNA_modifier_types.h" /* needed for all enum typdefs */
#include "BKE_customdata.h"
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index de895ebce51..ea34ff4aa07 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -30,6 +30,10 @@
#ifndef BKE_MULTIRES_H
#define BKE_MULTIRES_H
+/** \file BKE_multires.h
+ * \ingroup bke
+ */
+
struct DerivedMesh;
struct Mesh;
struct MFace;
diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h
index 30bce613dbe..0206756a1ad 100644
--- a/source/blender/blenkernel/BKE_nla.h
+++ b/source/blender/blenkernel/BKE_nla.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +30,11 @@
#ifndef BKE_NLA_H
#define BKE_NLA_H
+/** \file BKE_nla.h
+ * \ingroup bke
+ * \author Joshua Leung (full recode)
+ */
+
struct AnimData;
struct NlaStrip;
struct NlaTrack;
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 57d18f58e2d..0896dfbabb1 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +33,10 @@
#ifndef BKE_NODE_H
#define BKE_NODE_H
+/** \file BKE_node.h
+ * \ingroup bke
+ */
+
/* not very important, but the stack solver likes to know a maximum */
#define MAX_SOCKET 64
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 100b5111717..3d32ba5a30a 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,12 +25,15 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
- * General operations, lookup, etc. for blender objects.
*/
#ifndef BKE_OBJECT_H
#define BKE_OBJECT_H
+/** \file BKE_object.h
+ * \ingroup bke
+ * \brief General operations, lookup, etc. for blender objects.
+ */
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_packedFile.h b/source/blender/blenkernel/BKE_packedFile.h
index c3ab392fd85..541c581e762 100644
--- a/source/blender/blenkernel/BKE_packedFile.h
+++ b/source/blender/blenkernel/BKE_packedFile.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_packedFile.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,11 @@
#ifndef BKE_PACKEDFILE_H
#define BKE_PACKEDFILE_H
+/** \file BKE_packedFile.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
#define RET_OK 0
#define RET_ERROR 1
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index 2203277b301..238c812906d 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -28,6 +28,10 @@
#ifndef BKE_PAINT_H
#define BKE_PAINT_H
+/** \file BKE_paint.h
+ * \ingroup bke
+ */
+
#include "DNA_vec_types.h"
struct Brush;
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index bb325420bbe..507adcc5f2d 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -1,6 +1,4 @@
-/* BKE_particle.h
- *
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,6 +30,10 @@
#ifndef BKE_PARTICLE_H
#define BKE_PARTICLE_H
+/** \file BKE_particle.h
+ * \ingroup bke
+ */
+
#include "DNA_particle_types.h"
#include "DNA_object_types.h"
diff --git a/source/blender/blenkernel/BKE_plugin_types.h b/source/blender/blenkernel/BKE_plugin_types.h
index 0bb1400858d..a7842b526ce 100644
--- a/source/blender/blenkernel/BKE_plugin_types.h
+++ b/source/blender/blenkernel/BKE_plugin_types.h
@@ -1,9 +1,4 @@
-/**
- * blenlib/BKE_plugin_types.h (mar-2001 nzc)
- *
- * Renderrecipe and scene decription. The fact that there is a
- * hierarchy here is a bit strange, and not desirable.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -34,6 +29,11 @@
#ifndef BKE_PLUGIN_TYPES_H
#define BKE_PLUGIN_TYPES_H
+/** \file BKE_plugin_types.h
+ * \ingroup bke
+ * \author nzc
+ */
+
struct ImBuf;
typedef int (*TexDoitold)(int stype, void *cast, float *texvec, float *dxt, float *dyt);
diff --git a/source/blender/blenkernel/BKE_pointcache.h b/source/blender/blenkernel/BKE_pointcache.h
index e4623a31807..346368a5958 100644
--- a/source/blender/blenkernel/BKE_pointcache.h
+++ b/source/blender/blenkernel/BKE_pointcache.h
@@ -29,6 +29,10 @@
#ifndef BKE_POINTCACHE_H
#define BKE_POINTCACHE_H
+/** \file BKE_pointcache.h
+ * \ingroup bke
+ */
+
#include "DNA_ID.h"
#include "DNA_object_force.h"
#include "DNA_boid_types.h"
diff --git a/source/blender/blenkernel/BKE_property.h b/source/blender/blenkernel/BKE_property.h
index 5fab97b35e5..10014a4611d 100644
--- a/source/blender/blenkernel/BKE_property.h
+++ b/source/blender/blenkernel/BKE_property.h
@@ -1,6 +1,4 @@
-/**
- * blenkernel/BKE_property.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef BKE_PROPERTY_H
#define BKE_PROPERTY_H
+/** \file BKE_property.h
+ * \ingroup bke
+ */
+
struct bProperty;
struct ListBase;
struct Object;
diff --git a/source/blender/blenkernel/BKE_report.h b/source/blender/blenkernel/BKE_report.h
index b84808a7ddd..397c96422a5 100644
--- a/source/blender/blenkernel/BKE_report.h
+++ b/source/blender/blenkernel/BKE_report.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef BKE_REPORT_H
#define BKE_REPORT_H
+/** \file BKE_report.h
+ * \ingroup bke
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_sca.h b/source/blender/blenkernel/BKE_sca.h
index a9238dadb27..0db0b71c102 100644
--- a/source/blender/blenkernel/BKE_sca.h
+++ b/source/blender/blenkernel/BKE_sca.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,6 +29,10 @@
#ifndef BKE_SCA_H
#define BKE_SCA_H
+/** \file BKE_sca.h
+ * \ingroup bke
+ */
+
struct Text;
struct bSensor;
struct Object;
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 2337b95dcbc..ac85f91bf46 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_scene.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef BKE_SCENE_H
#define BKE_SCENE_H
+/** \file BKE_scene.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index 125486625bb..0a7d9780a6b 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_screen.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef BKE_SCREEN_H
#define BKE_SCREEN_H
+/** \file BKE_screen.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
+
struct ARegion;
struct bContext;
struct bContextDataResult;
diff --git a/source/blender/blenkernel/BKE_script.h b/source/blender/blenkernel/BKE_script.h
index 4ea1ee6db85..304e46fe2c5 100644
--- a/source/blender/blenkernel/BKE_script.h
+++ b/source/blender/blenkernel/BKE_script.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_script.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,13 @@
#ifndef BKE_SCRIPT_H
#define BKE_SCRIPT_H
+/** \file BKE_script.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ * \author Willian P. Germano
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index eb19fce94e5..cc1d8537cbd 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +31,10 @@
#ifndef BKE_SEQUENCER_H
#define BKE_SEQUENCER_H
+/** \file BKE_sequencer.h
+ * \ingroup bke
+ */
+
struct bContext;
struct Editing;
struct ImBuf;
@@ -254,6 +258,7 @@ int seq_single_check(struct Sequence *seq);
void seq_single_fix(struct Sequence *seq);
int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test);
void seq_translate(struct Scene *scene, struct Sequence *seq, int delta);
+struct Sequence *seq_foreground_frame_get(struct Scene *scene, int frame);
struct ListBase *seq_seqbase(struct ListBase *seqbase, struct Sequence *seq);
void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs);
void seq_dupe_animdata(struct Scene *scene, char *name_from, char *name_to);
diff --git a/source/blender/blenkernel/BKE_shrinkwrap.h b/source/blender/blenkernel/BKE_shrinkwrap.h
index 6b8e7860db8..937a46d68dd 100644
--- a/source/blender/blenkernel/BKE_shrinkwrap.h
+++ b/source/blender/blenkernel/BKE_shrinkwrap.h
@@ -1,6 +1,4 @@
-/**
- * BKE_shrinkwrap.h
- *
+/*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
@@ -29,6 +27,10 @@
#ifndef BKE_SHRINKWRAP_H
#define BKE_SHRINKWRAP_H
+/** \file BKE_shrinkwrap.h
+ * \ingroup bke
+ */
+
/* mesh util */
//TODO: move this somewhere else
diff --git a/source/blender/blenkernel/BKE_sketch.h b/source/blender/blenkernel/BKE_sketch.h
index a59464bb7ba..f42d733d583 100644
--- a/source/blender/blenkernel/BKE_sketch.h
+++ b/source/blender/blenkernel/BKE_sketch.h
@@ -1,5 +1,4 @@
-/**
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,6 +24,10 @@
#ifndef BKE_SKETCH_H
#define BKE_SKETCH_H
+/** \file BKE_sketch.h
+ * \ingroup bke
+ */
+
typedef enum SK_PType
{
PT_CONTINUOUS,
diff --git a/source/blender/blenkernel/BKE_smoke.h b/source/blender/blenkernel/BKE_smoke.h
index 396db60714a..16e5336bcc1 100644
--- a/source/blender/blenkernel/BKE_smoke.h
+++ b/source/blender/blenkernel/BKE_smoke.h
@@ -1,6 +1,4 @@
-/**
- * BKE_smoke.h
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,6 +30,11 @@
#ifndef BKE_SMOKE_H_
#define BKE_SMOKE_H_
+/** \file BKE_smoke.h
+ * \ingroup bke
+ * \author Daniel Genrich
+ */
+
typedef float (*bresenham_callback) (float *result, float *input, int res[3], int *pixel, float *tRay, float correct);
void smokeModifier_do(struct SmokeModifierData *smd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm);
diff --git a/source/blender/blenkernel/BKE_softbody.h b/source/blender/blenkernel/BKE_softbody.h
index 738fe7dde82..6aea9344070 100644
--- a/source/blender/blenkernel/BKE_softbody.h
+++ b/source/blender/blenkernel/BKE_softbody.h
@@ -1,6 +1,4 @@
-/**
- * BKE_softbody.h
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef BKE_SOFTBODY_H
#define BKE_SOFTBODY_H
+/** \file BKE_softbody.h
+ * \ingroup bke
+ */
+
struct Object;
struct Scene;
struct SoftBody;
diff --git a/source/blender/blenkernel/BKE_sound.h b/source/blender/blenkernel/BKE_sound.h
index cf77049b599..acd4718a65a 100644
--- a/source/blender/blenkernel/BKE_sound.h
+++ b/source/blender/blenkernel/BKE_sound.h
@@ -1,6 +1,4 @@
-/**
- * sound.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef BKE_SOUND_H
#define BKE_SOUND_H
+/** \file BKE_sound.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
+
struct PackedFile;
struct bSound;
struct bContext;
@@ -45,7 +49,7 @@ void sound_init(struct Main *main);
void sound_exit(void);
void sound_force_device(int device);
-int sound_define_from_str(char *str);
+int sound_define_from_str(const char *str);
struct bSound* sound_new_file(struct Main *main, const char *filename);
diff --git a/source/blender/blenkernel/BKE_subsurf.h b/source/blender/blenkernel/BKE_subsurf.h
index ef3ad3ad2e9..b82db853d37 100644
--- a/source/blender/blenkernel/BKE_subsurf.h
+++ b/source/blender/blenkernel/BKE_subsurf.h
@@ -28,6 +28,10 @@
#ifndef BKE_SUBSURF_H
#define BKE_SUBSURF_H
+/** \file BKE_subsurf.h
+ * \ingroup bke
+ */
+
struct DMGridAdjacency;
struct DMGridData;
struct DerivedMesh;
diff --git a/source/blender/blenkernel/BKE_suggestions.h b/source/blender/blenkernel/BKE_suggestions.h
index 9eb8897e0e0..e215cabd70f 100644
--- a/source/blender/blenkernel/BKE_suggestions.h
+++ b/source/blender/blenkernel/BKE_suggestions.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,6 +29,10 @@
#ifndef BKE_SUGGESTIONS_H
#define BKE_SUGGESTIONS_H
+/** \file BKE_suggestions.h
+ * \ingroup bke
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h
index 5f55f8b351e..a6b98b8ea88 100644
--- a/source/blender/blenkernel/BKE_text.h
+++ b/source/blender/blenkernel/BKE_text.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_text.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef BKE_TEXT_H
#define BKE_TEXT_H
+/** \file BKE_text.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index da9f13e07bc..e6a21ec3966 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_texture.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef BKE_TEXTURE_H
#define BKE_TEXTURE_H
+/** \file BKE_texture.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_unit.h b/source/blender/blenkernel/BKE_unit.h
index 5708766432f..0a3e56c8cba 100644
--- a/source/blender/blenkernel/BKE_unit.h
+++ b/source/blender/blenkernel/BKE_unit.h
@@ -1,4 +1,4 @@
-/**
+/*
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -24,6 +24,10 @@
#ifndef BKE_UNIT_H
#define BKE_UNIT_H
+/** \file BKE_unit.h
+ * \ingroup bke
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_utildefines.h b/source/blender/blenkernel/BKE_utildefines.h
index fca6a8cbef8..14e622c972e 100644
--- a/source/blender/blenkernel/BKE_utildefines.h
+++ b/source/blender/blenkernel/BKE_utildefines.h
@@ -27,8 +27,12 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/* This file shold contain blender format spesific macros
- * generic defines should go in BLI_utildefines.h */
+/** \file BKE_utildefines.h
+ * \ingroup bke
+ * \brief blender format spesific macros
+ * \note generic defines should go in BLI_utildefines.h
+ */
+
#ifndef BKE_UTILDEFINES_H
#define BKE_UTILDEFINES_H
diff --git a/source/blender/blenkernel/BKE_world.h b/source/blender/blenkernel/BKE_world.h
index 8c6da40fcea..30780b87085 100644
--- a/source/blender/blenkernel/BKE_world.h
+++ b/source/blender/blenkernel/BKE_world.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BKE_world.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef BKE_WORLD_H
#define BKE_WORLD_H
+/** \file BKE_world.h
+ * \ingroup bke
+ * \since March 2001
+ * \author nzc
+ */
+
struct World;
void free_world(struct World *sc);
diff --git a/source/blender/blenkernel/BKE_writeavi.h b/source/blender/blenkernel/BKE_writeavi.h
index c7f26d9b76c..19cc1ae2dbf 100644
--- a/source/blender/blenkernel/BKE_writeavi.h
+++ b/source/blender/blenkernel/BKE_writeavi.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +30,10 @@
#ifndef BKE_WRITEAVI_H
#define BKE_WRITEAVI_H
+/** \file BKE_writeavi.h
+ * \ingroup bke
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/BKE_writeffmpeg.h b/source/blender/blenkernel/BKE_writeffmpeg.h
index 311676b37b5..2b10f1b246c 100644
--- a/source/blender/blenkernel/BKE_writeffmpeg.h
+++ b/source/blender/blenkernel/BKE_writeffmpeg.h
@@ -1,4 +1,4 @@
-/**
+/*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
@@ -28,6 +28,10 @@
#ifndef BKE_WRITEFFMPEG_H
#define BKE_WRITEFFMPEG_H
+/** \file BKE_writeffmpeg.h
+ * \ingroup bke
+ */
+
#ifdef WITH_FFMPEG
#ifdef __cplusplus
diff --git a/source/blender/blenkernel/BKE_writeframeserver.h b/source/blender/blenkernel/BKE_writeframeserver.h
index 036e0dbd774..2117a23b938 100644
--- a/source/blender/blenkernel/BKE_writeframeserver.h
+++ b/source/blender/blenkernel/BKE_writeframeserver.h
@@ -1,4 +1,4 @@
-/**
+/*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
@@ -28,6 +28,10 @@
#ifndef BKE_WRITEFRAMESERVER_H
#define BKE_WRITEFRAMESERVER_H
+/** \file BKE_writeframeserver.h
+ * \ingroup bke
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index c7a474c5949..af02352dfbc 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -49,6 +49,7 @@ set(INC
../../../intern/memutil
../../../intern/opennl/extern
../../../intern/smoke/extern
+ ../../../intern/mikktspace
../../../source/blender/windowmanager # XXX - BAD LEVEL CALL WM_api.h
${ZLIB_INCLUDE_DIRS}
)
diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript
index c5c7575da38..d865912f5e0 100644
--- a/source/blender/blenkernel/SConscript
+++ b/source/blender/blenkernel/SConscript
@@ -12,6 +12,7 @@ incs += ' #/extern/bullet2/src'
incs += ' #/intern/opennl/extern #/intern/bsp/extern'
incs += ' ../gpu #/extern/glew/include'
incs += ' #/intern/smoke/extern'
+incs += ' #/intern/mikktspace'
incs += ' #/intern/audaspace/intern'
incs += ' ' + env['BF_OPENGL_INC']
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c
index 8c265a1f8c9..3564c93681a 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf.c
@@ -243,13 +243,13 @@ enum {
Vert_eEffected= (1<<0),
Vert_eChanged= (1<<1),
Vert_eSeam= (1<<2),
-} VertFlags;
+} /*VertFlags*/;
enum {
Edge_eEffected= (1<<0),
-} CCGEdgeFlags;
+} /*CCGEdgeFlags*/;
enum {
Face_eEffected= (1<<0),
-} FaceFlags;
+} /*FaceFlags*/;
struct _CCGVert {
CCGVert *next; /* EHData.next */
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index eedc2636991..79e23b77306 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -948,7 +948,7 @@ static void emDM_drawMappedFacesGLSL(DerivedMesh *dm,
} \
if(attribs.tottang) { \
float *tang = attribs.tang.array[i*4 + vert]; \
- glVertexAttrib3fvARB(attribs.tang.glIndex, tang); \
+ glVertexAttrib4fvARB(attribs.tang.glIndex, tang); \
} \
}
@@ -2481,6 +2481,111 @@ float *mesh_get_mapped_verts_nors(Scene *scene, Object *ob)
/* ******************* GLSL ******************** */
+typedef struct
+{
+ float * precomputedFaceNormals;
+ MTFace * mtface; // texture coordinates
+ MFace * mface; // indices
+ MVert * mvert; // vertices & normals
+ float (*orco)[3];
+ float (*tangent)[4]; // destination
+ int numFaces;
+
+} SGLSLMeshToTangent;
+
+// interface
+#include "mikktspace.h"
+
+static int GetNumFaces(const SMikkTSpaceContext * pContext)
+{
+ SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ return pMesh->numFaces;
+}
+
+static int GetNumVertsOfFace(const SMikkTSpaceContext * pContext, const int face_num)
+{
+ SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ return pMesh->mface[face_num].v4!=0 ? 4 : 3;
+}
+
+static void GetPosition(const SMikkTSpaceContext * pContext, float fPos[], const int face_num, const int vert_index)
+{
+ //assert(vert_index>=0 && vert_index<4);
+ SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ unsigned int indices[] = { pMesh->mface[face_num].v1, pMesh->mface[face_num].v2,
+ pMesh->mface[face_num].v3, pMesh->mface[face_num].v4 };
+ VECCOPY(fPos, pMesh->mvert[indices[vert_index]].co);
+}
+
+static void GetTextureCoordinate(const SMikkTSpaceContext * pContext, float fUV[], const int face_num, const int vert_index)
+{
+ //assert(vert_index>=0 && vert_index<4);
+ SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+
+ if(pMesh->mtface!=NULL)
+ {
+ float * uv = pMesh->mtface[face_num].uv[vert_index];
+ fUV[0]=uv[0]; fUV[1]=uv[1];
+ }
+ else
+ {
+ unsigned int indices[] = { pMesh->mface[face_num].v1, pMesh->mface[face_num].v2,
+ pMesh->mface[face_num].v3, pMesh->mface[face_num].v4 };
+
+ map_to_sphere( &fUV[0], &fUV[1],pMesh->orco[indices[vert_index]][0], pMesh->orco[indices[vert_index]][1], pMesh->orco[indices[vert_index]][2]);
+ }
+}
+
+static void GetNormal(const SMikkTSpaceContext * pContext, float fNorm[], const int face_num, const int vert_index)
+{
+ //assert(vert_index>=0 && vert_index<4);
+ SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ unsigned int indices[] = { pMesh->mface[face_num].v1, pMesh->mface[face_num].v2,
+ pMesh->mface[face_num].v3, pMesh->mface[face_num].v4 };
+
+ const int smoothnormal = (pMesh->mface[face_num].flag & ME_SMOOTH);
+ if(!smoothnormal) // flat
+ {
+ if(pMesh->precomputedFaceNormals)
+ {
+ VECCOPY(fNorm, &pMesh->precomputedFaceNormals[3*face_num]);
+ }
+ else
+ {
+ float nor[3];
+ float * p0, * p1, * p2;
+ const int iGetNrVerts = pMesh->mface[face_num].v4!=0 ? 4 : 3;
+ p0 = pMesh->mvert[indices[0]].co; p1 = pMesh->mvert[indices[1]].co; p2 = pMesh->mvert[indices[2]].co;
+ if(iGetNrVerts==4)
+ {
+ float * p3 = pMesh->mvert[indices[3]].co;
+ normal_quad_v3( nor, p0, p1, p2, p3);
+ }
+ else {
+ normal_tri_v3(nor, p0, p1, p2);
+ }
+ VECCOPY(fNorm, nor);
+ }
+ }
+ else
+ {
+ int i=0;
+ short * no = pMesh->mvert[indices[vert_index]].no;
+ for(i=0; i<3; i++)
+ fNorm[i]=no[i]/32767.0f;
+ normalize_v3(fNorm);
+ }
+}
+static void SetTSpace(const SMikkTSpaceContext * pContext, const float fvTangent[], const float fSign, const int face_num, const int iVert)
+{
+ //assert(vert_index>=0 && vert_index<4);
+ SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ float * pRes = pMesh->tangent[4*face_num+iVert];
+ VECCOPY(pRes, fvTangent);
+ pRes[3]=fSign;
+}
+
+
void DM_add_tangent_layer(DerivedMesh *dm)
{
/* mesh vars */
@@ -2489,14 +2594,17 @@ void DM_add_tangent_layer(DerivedMesh *dm)
MVert *mvert, *v1, *v2, *v3, *v4;
MemArena *arena= NULL;
VertexTangent **vtangents= NULL;
- float (*orco)[3]= NULL, (*tangent)[3];
+ float (*orco)[3]= NULL, (*tangent)[4];
float *uv1, *uv2, *uv3, *uv4, *vtang;
float fno[3], tang[3], uv[4][2];
- int i, j, len, mf_vi[4], totvert, totface;
+ int i, j, len, mf_vi[4], totvert, totface, iCalcNewMethod;
+ float *nors;
if(CustomData_get_layer_index(&dm->faceData, CD_TANGENT) != -1)
return;
+ nors = dm->getFaceDataArray(dm, CD_NORMAL);
+
/* check we have all the needed layers */
totvert= dm->getNumVerts(dm);
totface= dm->getNumFaces(dm);
@@ -2519,72 +2627,108 @@ void DM_add_tangent_layer(DerivedMesh *dm)
arena= BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "tangent layer arena");
BLI_memarena_use_calloc(arena);
vtangents= MEM_callocN(sizeof(VertexTangent*)*totvert, "VertexTangent");
-
- /* sum tangents at connected vertices */
- for(i=0, tf=mtface, mf=mface; i < totface; mf++, tf++, i++) {
- v1= &mvert[mf->v1];
- v2= &mvert[mf->v2];
- v3= &mvert[mf->v3];
-
- if (mf->v4) {
- v4= &mvert[mf->v4];
- normal_quad_v3( fno,v4->co, v3->co, v2->co, v1->co);
- }
- else {
- v4= NULL;
- normal_tri_v3( fno,v3->co, v2->co, v1->co);
- }
-
- if(mtface) {
- uv1= tf->uv[0];
- uv2= tf->uv[1];
- uv3= tf->uv[2];
- uv4= tf->uv[3];
- }
- else {
- uv1= uv[0]; uv2= uv[1]; uv3= uv[2]; uv4= uv[3];
- map_to_sphere( &uv[0][0], &uv[0][1],orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]);
- map_to_sphere( &uv[1][0], &uv[1][1],orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]);
- map_to_sphere( &uv[2][0], &uv[2][1],orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]);
- if(v4)
- map_to_sphere( &uv[3][0], &uv[3][1],orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2]);
- }
+
+ // new computation method
+ iCalcNewMethod = 1;
+ if(iCalcNewMethod!=0)
+ {
+ SGLSLMeshToTangent mesh2tangent;
+ SMikkTSpaceContext sContext;
+ SMikkTSpaceInterface sInterface;
+ memset(&mesh2tangent, 0, sizeof(SGLSLMeshToTangent));
+ memset(&sContext, 0, sizeof(SMikkTSpaceContext));
+ memset(&sInterface, 0, sizeof(SMikkTSpaceInterface));
+
+ mesh2tangent.precomputedFaceNormals = nors;
+ mesh2tangent.mtface = mtface;
+ mesh2tangent.mface = mface;
+ mesh2tangent.mvert = mvert;
+ mesh2tangent.orco = orco;
+ mesh2tangent.tangent = tangent;
+ mesh2tangent.numFaces = totface;
+
+ sContext.m_pUserData = &mesh2tangent;
+ sContext.m_pInterface = &sInterface;
+ sInterface.m_getNumFaces = GetNumFaces;
+ sInterface.m_getNumVerticesOfFace = GetNumVertsOfFace;
+ sInterface.m_getPosition = GetPosition;
+ sInterface.m_getTexCoord = GetTextureCoordinate;
+ sInterface.m_getNormal = GetNormal;
+ sInterface.m_setTSpaceBasic = SetTSpace;
+
+ // 0 if failed
+ iCalcNewMethod = genTangSpaceDefault(&sContext);
+ }
+
+ if(!iCalcNewMethod)
+ {
+ /* sum tangents at connected vertices */
+ for(i=0, tf=mtface, mf=mface; i < totface; mf++, tf++, i++) {
+ v1= &mvert[mf->v1];
+ v2= &mvert[mf->v2];
+ v3= &mvert[mf->v3];
+
+ if (mf->v4) {
+ v4= &mvert[mf->v4];
+ normal_quad_v3( fno,v4->co, v3->co, v2->co, v1->co);
+ }
+ else {
+ v4= NULL;
+ normal_tri_v3( fno,v3->co, v2->co, v1->co);
+ }
- tangent_from_uv(uv1, uv2, uv3, v1->co, v2->co, v3->co, fno, tang);
- sum_or_add_vertex_tangent(arena, &vtangents[mf->v1], tang, uv1);
- sum_or_add_vertex_tangent(arena, &vtangents[mf->v2], tang, uv2);
- sum_or_add_vertex_tangent(arena, &vtangents[mf->v3], tang, uv3);
+ if(mtface) {
+ uv1= tf->uv[0];
+ uv2= tf->uv[1];
+ uv3= tf->uv[2];
+ uv4= tf->uv[3];
+ }
+ else {
+ uv1= uv[0]; uv2= uv[1]; uv3= uv[2]; uv4= uv[3];
+ map_to_sphere( &uv[0][0], &uv[0][1],orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]);
+ map_to_sphere( &uv[1][0], &uv[1][1],orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]);
+ map_to_sphere( &uv[2][0], &uv[2][1],orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]);
+ if(v4)
+ map_to_sphere( &uv[3][0], &uv[3][1],orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2]);
+ }
- if(mf->v4) {
- v4= &mvert[mf->v4];
-
- tangent_from_uv(uv1, uv3, uv4, v1->co, v3->co, v4->co, fno, tang);
+ tangent_from_uv(uv1, uv2, uv3, v1->co, v2->co, v3->co, fno, tang);
sum_or_add_vertex_tangent(arena, &vtangents[mf->v1], tang, uv1);
+ sum_or_add_vertex_tangent(arena, &vtangents[mf->v2], tang, uv2);
sum_or_add_vertex_tangent(arena, &vtangents[mf->v3], tang, uv3);
- sum_or_add_vertex_tangent(arena, &vtangents[mf->v4], tang, uv4);
+
+ if(mf->v4) {
+ v4= &mvert[mf->v4];
+
+ tangent_from_uv(uv1, uv3, uv4, v1->co, v3->co, v4->co, fno, tang);
+ sum_or_add_vertex_tangent(arena, &vtangents[mf->v1], tang, uv1);
+ sum_or_add_vertex_tangent(arena, &vtangents[mf->v3], tang, uv3);
+ sum_or_add_vertex_tangent(arena, &vtangents[mf->v4], tang, uv4);
+ }
}
- }
- /* write tangent to layer */
- for(i=0, tf=mtface, mf=mface; i < totface; mf++, tf++, i++, tangent+=4) {
- len= (mf->v4)? 4 : 3;
-
- if(mtface == NULL) {
- map_to_sphere( &uv[0][0], &uv[0][1],orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]);
- map_to_sphere( &uv[1][0], &uv[1][1],orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]);
- map_to_sphere( &uv[2][0], &uv[2][1],orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]);
- if(len==4)
- map_to_sphere( &uv[3][0], &uv[3][1],orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2]);
- }
+ /* write tangent to layer */
+ for(i=0, tf=mtface, mf=mface; i < totface; mf++, tf++, i++, tangent+=4) {
+ len= (mf->v4)? 4 : 3;
+
+ if(mtface == NULL) {
+ map_to_sphere( &uv[0][0], &uv[0][1],orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]);
+ map_to_sphere( &uv[1][0], &uv[1][1],orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]);
+ map_to_sphere( &uv[2][0], &uv[2][1],orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]);
+ if(len==4)
+ map_to_sphere( &uv[3][0], &uv[3][1],orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2]);
+ }
- mf_vi[0]= mf->v1;
- mf_vi[1]= mf->v2;
- mf_vi[2]= mf->v3;
- mf_vi[3]= mf->v4;
+ mf_vi[0]= mf->v1;
+ mf_vi[1]= mf->v2;
+ mf_vi[2]= mf->v3;
+ mf_vi[3]= mf->v4;
- for(j=0; j<len; j++) {
- vtang= find_vertex_tangent(vtangents[mf_vi[j]], mtface ? tf->uv[j] : uv[j]);
- normalize_v3_v3(tangent[j], vtang);
+ for(j=0; j<len; j++) {
+ vtang= find_vertex_tangent(vtangents[mf_vi[j]], mtface ? tf->uv[j] : uv[j]);
+ normalize_v3_v3(tangent[j], vtang);
+ ((float *) tangent[j])[3]=1.0f;
+ }
}
}
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index 8fdfca33efb..08d506f94b8 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -49,6 +49,7 @@
#include "DNA_scene_types.h"
#include "DNA_vfont_types.h"
+#include "BKE_animsys.h"
#include "BKE_curve.h"
#include "BKE_DerivedMesh.h"
#include "BKE_depsgraph.h"
@@ -742,41 +743,69 @@ static void group_duplilist(ListBase *lb, Scene *scene, Object *ob, int level, i
static void frames_duplilist(ListBase *lb, Scene *scene, Object *ob, int level, int animated)
{
extern int enable_cu_speed; /* object.c */
- Object copyob;
- DupliObject *dob;
- int cfrao, ok;
+ Object copyob = {{NULL}};
+ int cfrao = scene->r.cfra;
- /* simple preventing of too deep nested groups */
- if(level>MAX_DUPLI_RECUR) return;
+ /* simple prevention of too deep nested groups */
+ if (level > MAX_DUPLI_RECUR) return;
- cfrao= scene->r.cfra;
- if(ob->parent==NULL && ob->constraints.first==NULL) return;
-
- if(ob->transflag & OB_DUPLINOSPEED) enable_cu_speed= 0;
- copyob= *ob; /* store transform info */
-
- for(scene->r.cfra= ob->dupsta; scene->r.cfra<=ob->dupend; scene->r.cfra++) {
-
- ok= 1;
- if(ob->dupoff) {
+ /* if we don't have any data/settings which will lead to object movement,
+ * don't waste time trying, as it will all look the same...
+ */
+ if (ob->parent==NULL && ob->constraints.first==NULL && ob->adt==NULL)
+ return;
+
+ /* make a copy of the object's original data (before any dupli-data overwrites it)
+ * as we'll need this to keep track of unkeyed data
+ * - this doesn't take into account other data that can be reached from the object,
+ * for example it's shapekeys or bones, hence the need for an update flush at the end
+ */
+ copyob = *ob;
+
+ /* duplicate over the required range */
+ if (ob->transflag & OB_DUPLINOSPEED) enable_cu_speed= 0;
+
+ for (scene->r.cfra= ob->dupsta; scene->r.cfra<=ob->dupend; scene->r.cfra++) {
+ short ok= 1;
+
+ /* - dupoff = how often a frames within the range shouldn't be made into duplis
+ * - dupon = the length of each "skipping" block in frames
+ */
+ if (ob->dupoff) {
ok= scene->r.cfra - ob->dupsta;
ok= ok % (ob->dupon+ob->dupoff);
- if(ok < ob->dupon) ok= 1;
- else ok= 0;
+ ok= (ok < ob->dupon);
}
- if(ok) {
-#if 0 // XXX old animation system
- do_ob_ipo(scene, ob);
-#endif // XXX old animation system
+
+ if (ok) {
+ DupliObject *dob;
+
+ /* WARNING: doing animation updates in this way is not terribly accurate, as the dependencies
+ * and/or other objects which may affect this object's transforms are not updated either.
+ * However, this has always been the way that this worked (i.e. pre 2.5), so I guess that it'll be fine!
+ */
+ BKE_animsys_evaluate_animdata(&ob->id, ob->adt, (float)scene->r.cfra, ADT_RECALC_ANIM); /* ob-eval will do drivers, so we don't need to do them */
where_is_object_time(scene, ob, (float)scene->r.cfra);
+
dob= new_dupli_object(lb, ob, ob->obmat, ob->lay, scene->r.cfra, OB_DUPLIFRAMES, animated);
copy_m4_m4(dob->omat, copyob.obmat);
}
}
- *ob= copyob; /* restore transform info */
- scene->r.cfra= cfrao;
enable_cu_speed= 1;
+
+ /* reset frame to original frame, then re-evaluate animation as above
+ * as 2.5 animation data may have far-reaching consequences
+ */
+ scene->r.cfra= cfrao;
+
+ BKE_animsys_evaluate_animdata(&ob->id, ob->adt, (float)scene->r.cfra, ADT_RECALC_ANIM); /* ob-eval will do drivers, so we don't need to do them */
+ where_is_object_time(scene, ob, (float)scene->r.cfra);
+
+ /* but, to make sure unkeyed object transforms are still sane,
+ * let's copy object's original data back over
+ */
+ *ob = copyob;
}
typedef struct vertexDupliData {
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index cc01438fd5d..3174954423f 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -2100,7 +2100,7 @@ void pchan_to_mat4(bPoseChannel *pchan, float chan_mat[4][4])
/* loc/rot/size to mat4 */
/* used in constraint.c too */
-void chan_calc_mat(bPoseChannel *pchan)
+void pchan_calc_mat(bPoseChannel *pchan)
{
/* this is just a wrapper around the copy of this function which calculates the matrix
* and stores the result in any given channel
@@ -2256,7 +2256,7 @@ void where_is_pose_bone(Scene *scene, Object *ob, bPoseChannel *pchan, float cti
parchan= pchan->parent;
/* this gives a chan_mat with actions (ipos) results */
- if(do_extra) chan_calc_mat(pchan);
+ if(do_extra) pchan_calc_mat(pchan);
else unit_m4(pchan->chan_mat);
/* construct the posemat based on PoseChannels, that we do before applying constraints */
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 4ad3b8bb3cf..473be5a3ee0 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -227,7 +227,7 @@ void make_local_brush(Brush *brush)
}
}
-static void brush_debug_print_state(Brush *br)
+void brush_debug_print_state(Brush *br)
{
/* create a fake brush and set it to the defaults */
Brush def= {{NULL}};
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index abf2257877b..9a04c75db07 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -1066,7 +1066,7 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, vo
} \
if(attribs.tottang) { \
float *tang = attribs.tang.array[a*4 + vert]; \
- glVertexAttrib3fvARB(attribs.tang.glIndex, tang); \
+ glVertexAttrib4fvARB(attribs.tang.glIndex, tang); \
} \
if(smoothnormal) \
glNormal3sv(mvert[index].no); \
@@ -1158,7 +1158,7 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, vo
}
if(attribs.tottang) {
datatypes[numdata].index = attribs.tang.glIndex;
- datatypes[numdata].size = 3;
+ datatypes[numdata].size = 4;
datatypes[numdata].type = GL_FLOAT;
numdata++;
}
@@ -1248,12 +1248,12 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, vo
}
if(attribs.tottang) {
float *tang = attribs.tang.array[a*4 + 0];
- VECCOPY((float *)&varray[elementsize*curface*3+offset], tang);
+ QUATCOPY((float *)&varray[elementsize*curface*3+offset], tang);
tang = attribs.tang.array[a*4 + 1];
- VECCOPY((float *)&varray[elementsize*curface*3+offset+elementsize], tang);
+ QUATCOPY((float *)&varray[elementsize*curface*3+offset+elementsize], tang);
tang = attribs.tang.array[a*4 + 2];
- VECCOPY((float *)&varray[elementsize*curface*3+offset+elementsize*2], tang);
- offset += sizeof(float)*3;
+ QUATCOPY((float *)&varray[elementsize*curface*3+offset+elementsize*2], tang);
+ offset += sizeof(float)*4;
}
}
curface++;
@@ -1288,12 +1288,12 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, vo
}
if(attribs.tottang) {
float *tang = attribs.tang.array[a*4 + 2];
- VECCOPY((float *)&varray[elementsize*curface*3+offset], tang);
+ QUATCOPY((float *)&varray[elementsize*curface*3+offset], tang);
tang = attribs.tang.array[a*4 + 3];
- VECCOPY((float *)&varray[elementsize*curface*3+offset+elementsize], tang);
+ QUATCOPY((float *)&varray[elementsize*curface*3+offset+elementsize], tang);
tang = attribs.tang.array[a*4 + 0];
- VECCOPY((float *)&varray[elementsize*curface*3+offset+elementsize*2], tang);
- offset += sizeof(float)*3;
+ QUATCOPY((float *)&varray[elementsize*curface*3+offset+elementsize*2], tang);
+ offset += sizeof(float)*4;
}
}
curface++;
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index 02b3de83ee1..3c0453c82a5 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -482,7 +482,7 @@ DO_INLINE void collision_interpolateOnTriangle ( float to[3], float v1[3], float
}
-int cloth_collision_response_static ( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair, CollPair *collision_end )
+static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair, CollPair *collision_end )
{
int result = 0;
Cloth *cloth1;
@@ -598,7 +598,7 @@ int cloth_collision_response_static ( ClothModifierData *clmd, CollisionModifier
}
//Determines collisions on overlap, collisions are written to collpair[i] and collision+number_collision_found is returned
-CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTreeOverlap *overlap, CollPair *collpair )
+static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTreeOverlap *overlap, CollPair *collpair )
{
ClothModifierData *clmd = ( ClothModifierData * ) md1;
CollisionModifierData *collmd = ( CollisionModifierData * ) md2;
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index b3f83019ff1..e7efc09ec6e 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -2149,7 +2149,6 @@ static void actcon_flush_tars (bConstraint *con, ListBase *list, short nocopy)
static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
{
- extern void chan_calc_mat(bPoseChannel *chan);
bActionConstraint *data = con->data;
if (VALID_CONS_TARGET(ct)) {
@@ -2217,7 +2216,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
what_does_obaction(cob->scene, cob->ob, &workob, pose, data->act, pchan->name, t);
/* convert animation to matrices for use here */
- chan_calc_mat(tchan);
+ pchan_calc_mat(tchan);
copy_m4_m4(ct->matrix, tchan->chan_mat);
/* Clean up */
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 7788f9f28a2..87fe545644a 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -829,7 +829,7 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
{sizeof(MTexPoly), "MTexPoly", 1, "Face Texture", NULL, NULL, NULL, NULL, NULL},
{sizeof(MLoopUV), "MLoopUV", 1, "UV coord", NULL, NULL, layerInterp_mloopuv, NULL, NULL},
{sizeof(MLoopCol), "MLoopCol", 1, "Col", NULL, NULL, layerInterp_mloopcol, NULL, layerDefault_mloopcol},
- {sizeof(float)*3*4, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
+ {sizeof(float)*4*4, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
{sizeof(MDisps), "MDisps", 1, NULL, layerCopy_mdisps,
layerFree_mdisps, layerInterp_mdisps, layerSwap_mdisps, NULL, layerRead_mdisps, layerWrite_mdisps,
layerFilesize_mdisps, layerValidate_mdisps},
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 64327b2005d..8a15f63243c 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -72,10 +72,9 @@
#include "BKE_packedFile.h"
#include "BKE_scene.h"
#include "BKE_node.h"
+#include "BKE_sequencer.h" /* seq_foreground_frame_get() */
#include "BKE_utildefines.h"
-//XXX #include "BIF_editseq.h"
-
#include "BLF_api.h"
#include "PIL_time.h"
@@ -527,6 +526,10 @@ void free_old_images(void)
if (U.textimeout == 0 || ctime % U.texcollectrate || ctime == lasttime)
return;
+ /* of course not! */
+ if (G.rendering)
+ return;
+
lasttime = ctime;
ima= G.main->image.first;
@@ -968,7 +971,7 @@ static void stampdata(Scene *scene, StampData *stamp_data, int do_prefix)
}
if (scene->r.stamp & R_STAMP_SEQSTRIP) {
- Sequence *seq= NULL; //XXX = get_foreground_frame_seq(scene->r.cfra);
+ Sequence *seq= seq_foreground_frame_get(scene, scene->r.cfra);
if (seq) strcpy(text, seq->name+2);
else strcpy(text, "<none>");
@@ -2183,10 +2186,7 @@ ImBuf *BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r)
BLI_unlock_thread(LOCK_IMAGE);
}
- /* we assuming that if it is not rendering, it's also not multithreaded
- * (a somewhat weak assumption) */
- if(G.rendering==0)
- tag_image_time(ima);
+ tag_image_time(ima);
return ibuf;
}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 684f1531114..a65681ae6e4 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1636,7 +1636,7 @@ void object_make_proxy(Object *ob, Object *target, Object *gob)
/* there is also a timing calculation in drawobject() */
-int no_speed_curve= 0;
+static int no_speed_curve= 0;
void disable_speed_curve(int val)
{
@@ -1698,10 +1698,10 @@ void object_rot_to_mat3(Object *ob, float mat[][3])
else {
/* quats are normalised before use to eliminate scaling issues */
float tquat[4];
-
+
normalize_qt_qt(tquat, ob->quat);
quat_to_mat3(rmat, tquat);
-
+
normalize_qt_qt(tquat, ob->dquat);
quat_to_mat3(dmat, tquat);
}
@@ -1745,7 +1745,7 @@ void object_apply_mat4(Object *ob, float mat[][4], const short use_compat, const
invert_m4_m4(imat, diff_mat);
mul_m4_m4m4(rmat, mat, imat); /* get the parent relative matrix */
object_apply_mat4(ob, rmat, use_compat, FALSE);
-
+
/* same as below, use rmat rather then mat */
mat4_to_loc_rot_size(ob->loc, rot, ob->size, rmat);
object_mat3_to_rot(ob, rot, use_compat);
@@ -1785,6 +1785,7 @@ void object_to_mat4(Object *ob, float mat[][4])
add_v3_v3v3(mat[3], ob->loc, ob->dloc);
}
+/* extern */
int enable_cu_speed= 1;
static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4])
@@ -1818,12 +1819,17 @@ static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4])
* we divide the curvetime calculated in the previous step by the length of the path, to get a time
* factor, which then gets clamped to lie within 0.0 - 1.0 range
*/
- ctime= cu->ctime / cu->pathlen;
+ if (IS_EQ(cu->pathlen, 0.0f) == 0)
+ ctime= cu->ctime / cu->pathlen;
+ else
+ ctime= cu->ctime;
+
CLAMP(ctime, 0.0, 1.0);
}
else {
ctime= scene->r.cfra - give_timeoffset(ob);
- ctime /= cu->pathlen;
+ if (IS_EQ(cu->pathlen, 0.0f) == 0)
+ ctime /= cu->pathlen;
CLAMP(ctime, 0.0, 1.0);
}
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index d1d5c13c3dd..4609e64c271 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -1831,9 +1831,11 @@ static void psys_particle_on_shape(int UNUSED(distr), int UNUSED(index), float *
void psys_particle_on_emitter(ParticleSystemModifierData *psmd, int from, int index, int index_dmcache, float *fuv, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor){
if(psmd){
if(psmd->psys->part->distr==PART_DISTR_GRID && psmd->psys->part->from != PART_FROM_VERT){
- if(vec){
- VECCOPY(vec,fuv);
- }
+ if(vec)
+ copy_v3_v3(vec,fuv);
+
+ if(orco)
+ copy_v3_v3(orco, fuv);
return;
}
/* we cant use the num_dmcache */
@@ -3566,13 +3568,23 @@ ParticleSettings *psys_new_settings(const char *name, Main *main)
ParticleSettings *psys_copy_settings(ParticleSettings *part)
{
ParticleSettings *partn;
-
+ int a;
+
partn= copy_libblock(part);
- if(partn->pd) partn->pd= MEM_dupallocN(part->pd);
- if(partn->pd2) partn->pd2= MEM_dupallocN(part->pd2);
- partn->effector_weights = MEM_dupallocN(part->effector_weights);
+ partn->pd= MEM_dupallocN(part->pd);
+ partn->pd2= MEM_dupallocN(part->pd2);
+ partn->effector_weights= MEM_dupallocN(part->effector_weights);
+ partn->fluid= MEM_dupallocN(part->fluid);
partn->boids = boid_copy_settings(part->boids);
+
+ for(a=0; a<MAX_MTEX; a++) {
+ if(part->mtex[a]) {
+ partn->mtex[a]= MEM_mallocN(sizeof(MTex), "psys_copy_tex");
+ memcpy(partn->mtex[a], part->mtex[a], sizeof(MTex));
+ id_us_plus((ID *)partn->mtex[a]->tex);
+ }
+ }
return partn;
}
@@ -3771,7 +3783,7 @@ void psys_get_texture(ParticleSimulationData *sim, ParticleData *pa, ParticleTex
short blend=mtex->blendtype;
short texco = mtex->texco;
- if(ELEM(texco, TEXCO_UV, TEXCO_ORCO) && (ELEM(part->from, PART_FROM_FACE, PART_FROM_VOLUME) == 0 || part->distr == PART_DISTR_GRID))
+ if(texco == TEXCO_UV && (ELEM(part->from, PART_FROM_FACE, PART_FROM_VOLUME) == 0 || part->distr == PART_DISTR_GRID))
texco = TEXCO_GLOB;
switch(texco) {
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 65bd4f110b4..c1a6558aea3 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -2217,7 +2217,7 @@ static void psys_update_effectors(ParticleSimulationData *sim)
***********************************************************************************************************/
#define PSYS_FLUID_SPRINGS_INITIAL_SIZE 256
-ParticleSpring *add_fluid_spring(ParticleSystem *psys, ParticleSpring *spring)
+static ParticleSpring *add_fluid_spring(ParticleSystem *psys, ParticleSpring *spring)
{
/* Are more refs required? */
if(psys->alloc_fluidsprings == 0 || psys->fluid_springs == NULL) {
@@ -2236,7 +2236,7 @@ ParticleSpring *add_fluid_spring(ParticleSystem *psys, ParticleSpring *spring)
return psys->fluid_springs + psys->tot_fluidsprings - 1;
}
-void delete_fluid_spring(ParticleSystem *psys, int j)
+static void delete_fluid_spring(ParticleSystem *psys, int j)
{
if (j != psys->tot_fluidsprings - 1)
psys->fluid_springs[j] = psys->fluid_springs[psys->tot_fluidsprings - 1];
@@ -2249,7 +2249,7 @@ void delete_fluid_spring(ParticleSystem *psys, int j)
}
}
-EdgeHash *build_fluid_springhash(ParticleSystem *psys)
+static EdgeHash *build_fluid_springhash(ParticleSystem *psys)
{
EdgeHash *springhash = NULL;
ParticleSpring *spring;
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index c2ec463c708..b7ece436ee2 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -280,6 +280,8 @@ static void ptcache_particle_read(int index, void *psys_v, void **data, float cf
/* set frames cached before birth to birth time */
if(cfra < pa->time)
pa->state.time = pa->time;
+ else if(cfra > pa->dietime)
+ pa->state.time = pa->dietime;
if(data[BPHYS_DATA_SIZE])
PTCACHE_DATA_TO(data, BPHYS_DATA_SIZE, 0, &pa->size);
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 9537931faec..2785878fb08 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -2965,6 +2965,28 @@ void seq_translate(Scene *evil_scene, Sequence *seq, int delta)
calc_sequence_disp(evil_scene, seq);
}
+Sequence *seq_foreground_frame_get(Scene *scene, int frame)
+{
+ Editing *ed= seq_give_editing(scene, FALSE);
+ Sequence *seq, *best_seq=NULL;
+ int best_machine = -1;
+
+ if(!ed) return NULL;
+
+ for (seq=ed->seqbasep->first; seq; seq= seq->next) {
+ if(seq->flag & SEQ_MUTE || seq->startdisp > frame || seq->enddisp <= frame)
+ continue;
+ /* only use elements you can see - not */
+ if (ELEM5(seq->type, SEQ_IMAGE, SEQ_META, SEQ_SCENE, SEQ_MOVIE, SEQ_COLOR)) {
+ if (seq->machine > best_machine) {
+ best_seq = seq;
+ best_machine = seq->machine;
+ }
+ }
+ }
+ return best_seq;
+}
+
/* return 0 if there werent enough space */
int shuffle_seq(ListBase * seqbasep, Sequence *test, Scene *evil_scene)
{
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index 29c29fb5158..a75bc2164c3 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -255,22 +255,26 @@ int normal_projection_project_vertex(char options, const float *vert, const floa
BLI_bvhtree_ray_cast(tree, co, no, 0.0f, &hit_tmp, callback, userdata);
- if(hit_tmp.index != -1)
- {
- float dot = INPR( dir, hit_tmp.no);
-
- if(((options & MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE) && dot <= 0.0f)
- || ((options & MOD_SHRINKWRAP_CULL_TARGET_BACKFACE) && dot >= 0.0f))
- return FALSE; //Ignore hit
-
+ if(hit_tmp.index != -1) {
+ /* invert the normal first so face culling works on rotated objects */
+ if(transf) {
+ space_transform_invert_normal(transf, hit_tmp.no);
+ }
- //Inverting space transform (TODO make coeherent with the initial dist readjust)
- if(transf)
- {
- space_transform_invert( transf, hit_tmp.co );
- space_transform_invert_normal( transf, hit_tmp.no );
+ if (options & (MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE|MOD_SHRINKWRAP_CULL_TARGET_BACKFACE)) {
+ /* apply backface */
+ const float dot= dot_v3v3(dir, hit_tmp.no);
+ if( ((options & MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE) && dot <= 0.0f) ||
+ ((options & MOD_SHRINKWRAP_CULL_TARGET_BACKFACE) && dot >= 0.0f)
+ ) {
+ return FALSE; /* Ignore hit */
+ }
+ }
- hit_tmp.dist = len_v3v3( (float*)vert, hit_tmp.co );
+ if(transf) {
+ /* Inverting space transform (TODO make coeherent with the initial dist readjust) */
+ space_transform_invert(transf, hit_tmp.co);
+ hit_tmp.dist = len_v3v3((float *)vert, hit_tmp.co);
}
memcpy(hit, &hit_tmp, sizeof(hit_tmp) );
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 8039d729842..1d80e989da4 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -135,7 +135,7 @@ static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs)
#define TRI_UVOFFSET (1./4.)
-int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, DerivedMesh *dm)
+static int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, DerivedMesh *dm)
{
if((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain && !smd->domain->fluid)
{
diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c
index be6c4d22f9c..9c157f57d49 100644
--- a/source/blender/blenkernel/intern/sound.c
+++ b/source/blender/blenkernel/intern/sound.c
@@ -55,7 +55,7 @@ static void sound_sync_callback(void* data, int mode, float time)
}
#endif
-int sound_define_from_str(char *str)
+int sound_define_from_str(const char *str)
{
if (BLI_strcaseeq(str, "NULL"))
return AUD_NULL_DEVICE;
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index a2d3016099d..0889f490e79 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -1392,7 +1392,7 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, v
} \
if(attribs.tottang) { \
float *tang = attribs.tang.array[a*4 + vert]; \
- glVertexAttrib3fvARB(attribs.tang.glIndex, tang); \
+ glVertexAttrib4fvARB(attribs.tang.glIndex, tang); \
} \
}
diff --git a/source/blender/blenkernel/intern/writeavi.c b/source/blender/blenkernel/intern/writeavi.c
index 014a15de1ef..e946ce06aa2 100644
--- a/source/blender/blenkernel/intern/writeavi.c
+++ b/source/blender/blenkernel/intern/writeavi.c
@@ -214,7 +214,7 @@ static int append_avi(RenderData *UNUSED(rd), int frame, int *pixels, int rectx,
return 1;
}
-void end_avi(void)
+static void end_avi(void)
{
if (avi == NULL) return;
diff --git a/source/blender/blenkernel/intern/writeframeserver.c b/source/blender/blenkernel/intern/writeframeserver.c
index eb1c66604f8..3cb3d7e038b 100644
--- a/source/blender/blenkernel/intern/writeframeserver.c
+++ b/source/blender/blenkernel/intern/writeframeserver.c
@@ -49,11 +49,10 @@
#include "BLI_utildefines.h"
-
+#include "BKE_writeframeserver.h"
#include "BKE_global.h"
#include "BKE_report.h"
-
#include "DNA_scene_types.h"
static int sock;
diff --git a/source/blender/blenlib/BLI_args.h b/source/blender/blenlib/BLI_args.h
index 2927314e225..4cdb35dd675 100644
--- a/source/blender/blenlib/BLI_args.h
+++ b/source/blender/blenlib/BLI_args.h
@@ -1,6 +1,4 @@
-/**
- * A general argument parsing module
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,13 +30,18 @@
#ifndef BLI_ARGS_H
#define BLI_ARGS_H
+/** \file BLI_args.h
+ * \ingroup bli
+ * \brief A general argument parsing module.
+ */
+
struct bArgs;
typedef struct bArgs bArgs;
/* returns the number of extra arguments consumed by the function. 0 is normal value, -1 stops parsing arguments, other negative indicates skip */
-typedef int (*BA_ArgCallback)(int argc, char **argv, void *data);
+typedef int (*BA_ArgCallback)(int argc, const char **argv, void *data);
-struct bArgs *BLI_argsInit(int argc, char **argv);
+struct bArgs *BLI_argsInit(int argc, const char **argv);
void BLI_argsFree(struct bArgs *ba);
/* pass starts at 1, -1 means valid all the time
@@ -54,6 +57,6 @@ void BLI_argsPrintArgDoc(struct bArgs *ba, const char *arg);
void BLI_argsPrintOtherDoc(struct bArgs *ba);
void BLI_argsPrint(struct bArgs *ba);
-char **BLI_argsArgv(struct bArgs *ba);
+const char **BLI_argsArgv(struct bArgs *ba);
#endif
diff --git a/source/blender/blenlib/BLI_blenlib.h b/source/blender/blenlib/BLI_blenlib.h
index 8423c07e7c9..59d5b5cdef8 100644
--- a/source/blender/blenlib/BLI_blenlib.h
+++ b/source/blender/blenlib/BLI_blenlib.h
@@ -25,10 +25,14 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file BLI_blenlib.h
+ * \ingroup bli
*
- * @mainpage BLI - Blender LIbrary external interface
+ * \section aboutbli Blender LIbrary external interface
*
- * @section about About the BLI module
+ * \subsection about About the BLI module
*
* This is the external interface of the Blender Library. If you find
* a call to a BLI function that is not prototyped here, please add a
@@ -39,7 +43,7 @@
* allocation/deallocation. There is also a patch to make MS Windows
* behave more or less Posix-compliant.
*
- * @section issues Known issues with BLI
+ * \subsection issues Known issues with BLI
*
* - blenlib is written in C.
* - The posix-compliancy may move to a separate lib that deals with
@@ -51,13 +55,11 @@
* - vectorops.c is close to superfluous. It may disappear in the
* near future.
*
- * @section dependencies Dependencies
+ * \subsection dependencies Dependencies
*
- * - The blenlib uses type defines from makesdna/, and functions from
+ * - The blenlib uses type defines from \ref DNA, and functions from
* standard libraries.
- *
- * $Id$
-*/
+ */
#ifndef BLI_BLENLIB_H
#define BLI_BLENLIB_H
diff --git a/source/blender/blenlib/BLI_boxpack2d.h b/source/blender/blenlib/BLI_boxpack2d.h
index 008af55e1d0..886965f66b3 100644
--- a/source/blender/blenlib/BLI_boxpack2d.h
+++ b/source/blender/blenlib/BLI_boxpack2d.h
@@ -1,6 +1,4 @@
-/**
- *
- *
+/*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
@@ -27,6 +25,13 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#ifndef _BLI_BOXPACK2D_H_
+#define _BLI_BOXPACK2D_H_
+
+/** \file BLI_boxpack2d.h
+ * \ingroup bli
+ */
+
/* Box Packer */
typedef struct boxPack {
@@ -43,3 +48,5 @@ typedef struct boxPack {
void boxPack2D(boxPack *boxarray, const int len, float *tot_width, float *tot_height);
+#endif
+
diff --git a/source/blender/blenlib/BLI_bpath.h b/source/blender/blenlib/BLI_bpath.h
index 8c351d6020d..2200ec70789 100644
--- a/source/blender/blenlib/BLI_bpath.h
+++ b/source/blender/blenlib/BLI_bpath.h
@@ -1,4 +1,4 @@
-/**
+/*
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -26,8 +26,11 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/* Based on ghash, difference is ghash is not a fixed size,
- * so for BPath we dont need to malloc */
+/** \file BLI_bpath.h
+ * \ingroup bli
+ * \attention Based on ghash, difference is ghash is not a fixed size,
+ * so for BPath we dont need to malloc
+ */
#ifndef BLI_BPATH_H
#define BLI_BPATH_H
diff --git a/source/blender/blenlib/BLI_cpu.h b/source/blender/blenlib/BLI_cpu.h
index d809f1cc594..addcf1273b3 100644
--- a/source/blender/blenlib/BLI_cpu.h
+++ b/source/blender/blenlib/BLI_cpu.h
@@ -1,5 +1,4 @@
/*
- *
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -24,6 +23,10 @@
#ifndef BLI_CPU_H
#define BLI_CPU_H
+/** \file BLI_cpu.h
+ * \ingroup bli
+ */
+
int BLI_cpu_support_sse2(void);
#endif
diff --git a/source/blender/blenlib/BLI_dlrbTree.h b/source/blender/blenlib/BLI_dlrbTree.h
index 4b3768c3547..24c819ada55 100644
--- a/source/blender/blenlib/BLI_dlrbTree.h
+++ b/source/blender/blenlib/BLI_dlrbTree.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,11 @@
#ifndef BLI_DLRB_TREE_H
#define BLI_DLRB_TREE_H
+/** \file BLI_dlrbTree.h
+ * \ingroup bli
+ * \author Joshua Leung
+ */
+
/* Double-Linked Red-Black Tree Implementation:
*
* This is simply a Red-Black Tree implementation whose nodes can later
diff --git a/source/blender/blenlib/BLI_dynstr.h b/source/blender/blenlib/BLI_dynstr.h
index 34e77007d95..ed7a76daa92 100644
--- a/source/blender/blenlib/BLI_dynstr.h
+++ b/source/blender/blenlib/BLI_dynstr.h
@@ -1,12 +1,4 @@
-/**
- * @file BLI_dynstr.h
- *
- * A dynamically sized string ADT.
- * This ADT is designed purely for dynamic string creation
- * through appending, not for general usage, the intent is
- * to build up dynamic strings using a DynStr object, then
- * convert it to a c-string and work with that.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -38,6 +30,16 @@
#ifndef BLI_DYNSTR_H
#define BLI_DYNSTR_H
+/** \file BLI_dynstr.h
+ * \ingroup bli
+ * \brief A dynamically sized string ADT.
+ * \section aboutdynstr Dynamic String
+ * This ADT is designed purely for dynamic string creation
+ * through appending, not for general usage, the intent is
+ * to build up dynamic strings using a DynStr object, then
+ * convert it to a c-string and work with that.
+ */
+
#include <stdarg.h>
struct DynStr;
diff --git a/source/blender/blenlib/BLI_edgehash.h b/source/blender/blenlib/BLI_edgehash.h
index e74910ddb09..fba13035f02 100644
--- a/source/blender/blenlib/BLI_edgehash.h
+++ b/source/blender/blenlib/BLI_edgehash.h
@@ -1,6 +1,4 @@
-/**
- * A general unordered 2-int pair hash table ADT
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,6 +30,12 @@
#ifndef BLI_EDGEHASH_H
#define BLI_EDGEHASH_H
+/** \file BLI_storage.h
+ * \ingroup bli
+ * \author Daniel Dunbar
+ * \brief A general unordered 2-int pair hash table ADT.
+ */
+
struct EdgeHash;
struct EdgeHashIterator;
typedef struct EdgeHash EdgeHash;
diff --git a/source/blender/blenlib/BLI_editVert.h b/source/blender/blenlib/BLI_editVert.h
index 051778772e0..b422b79b165 100644
--- a/source/blender/blenlib/BLI_editVert.h
+++ b/source/blender/blenlib/BLI_editVert.h
@@ -1,9 +1,4 @@
-/**
- * blenlib/BLI_editVert.h mar 2001 Nzc
- *
- * Some editing types needed in the lib (unfortunately) for
- * scanfill.c
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -35,6 +30,14 @@
#ifndef BLI_EDITVERT_H
#define BLI_EDITVERT_H
+/** \file BLI_editVert.h
+ * \ingroup bli
+ * \since March 2001
+ * \author nzc
+ * \brief Some editing types needed in the lib (unfortunately) for
+ * scanfill.c
+ */
+
#include "DNA_customdata_types.h"
#include "DNA_mesh_types.h"
diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h
index 95d890f133f..59c01348c07 100644
--- a/source/blender/blenlib/BLI_fileops.h
+++ b/source/blender/blenlib/BLI_fileops.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BLI_listBase.h mar 2001 Nzc
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -27,8 +25,12 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
- *
- * More low-level fileops from Daniel Dunbar. Two functions were also
+ */
+
+/** \file BLI_fileops.h
+ * \ingroup bli
+ * \author Daniel Dunbar
+ * \brief More low-level fileops from Daniel Dunbar. Two functions were also
* defined in storage.c. These are the old fop_ prefixes. There is
* definitely some redundancy here!
* */
diff --git a/source/blender/blenlib/BLI_fnmatch.h b/source/blender/blenlib/BLI_fnmatch.h
index 1dffb285451..94ae741250f 100644
--- a/source/blender/blenlib/BLI_fnmatch.h
+++ b/source/blender/blenlib/BLI_fnmatch.h
@@ -18,9 +18,12 @@ along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
#ifndef _FNMATCH_H
-
#define _FNMATCH_H 1
+/** \file BLI_fnmatch.h
+ * \ingroup bli
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenlib/BLI_ghash.h b/source/blender/blenlib/BLI_ghash.h
index a9fc5662657..dcc71fa1258 100644
--- a/source/blender/blenlib/BLI_ghash.h
+++ b/source/blender/blenlib/BLI_ghash.h
@@ -1,6 +1,4 @@
-/**
- * A general (pointer -> pointer) hash table ADT
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,6 +30,11 @@
#ifndef BLI_GHASH_H
#define BLI_GHASH_H
+/** \file BLI_ghash.h
+ * \ingroup bli
+ * \brief A general (pointer -> pointer) hash table ADT
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenlib/BLI_graph.h b/source/blender/blenlib/BLI_graph.h
index 1dd439468f7..f625c7bb2d4 100644
--- a/source/blender/blenlib/BLI_graph.h
+++ b/source/blender/blenlib/BLI_graph.h
@@ -1,6 +1,10 @@
#ifndef BLI_GRAPH_H_
#define BLI_GRAPH_H_
+/** \file BLI_graph.h
+ * \ingroup bli
+ */
+
#include "DNA_listBase.h"
struct BGraph;
diff --git a/source/blender/blenlib/BLI_gsqueue.h b/source/blender/blenlib/BLI_gsqueue.h
index afc4cb38b10..572c54b7b7e 100644
--- a/source/blender/blenlib/BLI_gsqueue.h
+++ b/source/blender/blenlib/BLI_gsqueue.h
@@ -1,7 +1,4 @@
/*
- * A generic structure queue (a queue for fixed length
- * (generally small) structures.
- *
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +30,12 @@
#ifndef BLI_GSQUEUE_H
#define BLI_GSQUEUE_H
+/** \file BLI_gsqueue.h
+ * \ingroup bli
+ * \brief A generic structure queue (a queue for fixed length
+ * (generally small) structures.
+ */
+
typedef struct _GSQueue GSQueue;
/**
diff --git a/source/blender/blenlib/BLI_heap.h b/source/blender/blenlib/BLI_heap.h
index a6663726f8b..3038d026df9 100644
--- a/source/blender/blenlib/BLI_heap.h
+++ b/source/blender/blenlib/BLI_heap.h
@@ -1,6 +1,4 @@
-/**
- * A heap / priority queue ADT
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,6 +30,11 @@
#ifndef BLI_HEAP_H
#define BLI_HEAP_H
+/** \file BLI_heap.h
+ * \ingroup bli
+ * \brief A heap / priority queue ADT
+ */
+
struct Heap;
struct HeapNode;
typedef struct Heap Heap;
diff --git a/source/blender/blenlib/BLI_jitter.h b/source/blender/blenlib/BLI_jitter.h
index f626feb2ec8..e0fea9306ff 100644
--- a/source/blender/blenlib/BLI_jitter.h
+++ b/source/blender/blenlib/BLI_jitter.h
@@ -1,6 +1,4 @@
/*
- * jitter.h
- *
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,9 +30,13 @@
#ifndef BLI_JITTER_H
#define BLI_JITTER_H
-extern void BLI_initjit(float *jitarr, int num);
-extern void BLI_jitterate1(float *jit1, float *jit2, int num, float rad1);
-extern void BLI_jitterate2(float *jit1, float *jit2, int num, float rad2);
+/** \file BLI_jitter.h
+ * \ingroup bli
+ */
+
+void BLI_initjit(float *jitarr, int num);
+void BLI_jitterate1(float *jit1, float *jit2, int num, float rad1);
+void BLI_jitterate2(float *jit1, float *jit2, int num, float rad2);
#endif
diff --git a/source/blender/blenlib/BLI_kdopbvh.h b/source/blender/blenlib/BLI_kdopbvh.h
index aa55ececc06..d0943408dc5 100644
--- a/source/blender/blenlib/BLI_kdopbvh.h
+++ b/source/blender/blenlib/BLI_kdopbvh.h
@@ -1,5 +1,4 @@
-/**
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,6 +31,12 @@
#ifndef BLI_KDOPBVH_H
#define BLI_KDOPBVH_H
+/** \file BLI_kdopbvh.h
+ * \ingroup bli
+ * \author Daniel Genrich
+ * \author Andre Pinto
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenlib/BLI_kdtree.h b/source/blender/blenlib/BLI_kdtree.h
index 95f9e6939d0..c607dae386f 100644
--- a/source/blender/blenlib/BLI_kdtree.h
+++ b/source/blender/blenlib/BLI_kdtree.h
@@ -1,6 +1,4 @@
-/**
- * A kd-tree for nearest neighbour search.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +31,13 @@
#ifndef BLI_KDTREE_H
#define BLI_KDTREE_H
+/** \file BLI_kdtree.h
+ * \ingroup bli
+ * \brief A kd-tree for nearest neighbour search.
+ * \author Janne Karhu
+ * \author Brecht van Lommel
+ */
+
struct KDTree;
typedef struct KDTree KDTree;
diff --git a/source/blender/blenlib/BLI_linklist.h b/source/blender/blenlib/BLI_linklist.h
index b10d48e3ee6..95850c44ea1 100644
--- a/source/blender/blenlib/BLI_linklist.h
+++ b/source/blender/blenlib/BLI_linklist.h
@@ -1,7 +1,4 @@
/*
- * Routines for working with singly linked lists
- * of 'links' - pointers to other data.
- *
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +30,13 @@
#ifndef BLI_LINKLIST_H
#define BLI_LINKLIST_H
+/** \file BLI_linklist.h
+ * \ingroup bli
+ * \brief Routines for working with singly linked lists
+ * of 'links' - pointers to other data.
+ *
+ */
+
struct MemArena;
typedef void (*LinkNodeFreeFP)(void *link);
diff --git a/source/blender/blenlib/BLI_listbase.h b/source/blender/blenlib/BLI_listbase.h
index a41b49de242..73af9a3738c 100644
--- a/source/blender/blenlib/BLI_listbase.h
+++ b/source/blender/blenlib/BLI_listbase.h
@@ -25,13 +25,15 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
- *
- * $Id$
*/
#ifndef BLI_LISTBASE_H
#define BLI_LISTBASE_H
+/** \file BLI_listbase.h
+ * \ingroup bli
+ */
+
#include "DNA_listBase.h"
//struct ListBase;
//struct LinkData;
diff --git a/source/blender/blenlib/BLI_math.h b/source/blender/blenlib/BLI_math.h
index 29a17f362d4..890a5ee4018 100644
--- a/source/blender/blenlib/BLI_math.h
+++ b/source/blender/blenlib/BLI_math.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,29 +28,30 @@
#ifndef BLI_MATH_H
#define BLI_MATH_H
-/* Abbreviations:
+/** \file BLI_math.h
+ * \ingroup bli
+ * \section mathabbrev Abbreviations
*
- * fl = float
- * db = double
- * v2 = vec2 = vector 2
- * v3 = vec3 = vector 3
- * v4 = vec4 = vector 4
- * qt = quat = quaternion
- * dq = dquat = dual quaternion
- * m2 = mat2 = matrix 2x2
- * m3 = mat3 = matrix 3x3
- * m4 = mat4 = matrix 4x4
- * eul = euler rotation
- * eulO = euler with order
+ * - fl = float
+ * - db = double
+ * - v2 = vec2 = vector 2
+ * - v3 = vec3 = vector 3
+ * - v4 = vec4 = vector 4
+ * - qt = quat = quaternion
+ * - dq = dquat = dual quaternion
+ * - m2 = mat2 = matrix 2x2
+ * - m3 = mat3 = matrix 3x3
+ * - m4 = mat4 = matrix 4x4
+ * - eul = euler rotation
+ * - eulO = euler with order
*
- * Variable Names:
- *
- * f = single value
- * a, b, c = vectors
- * r = result vector
- * A, B, C = matrices
- * R = result matrix
+ * \section mathvarnames Variable Names
*
+ * - f = single value
+ * - a, b, c = vectors
+ * - r = result vector
+ * - A, B, C = matrices
+ * - R = result matrix
*/
#include "BLI_math_base.h"
diff --git a/source/blender/blenlib/BLI_math_base.h b/source/blender/blenlib/BLI_math_base.h
index 9ab9621be01..6ff57b08724 100644
--- a/source/blender/blenlib/BLI_math_base.h
+++ b/source/blender/blenlib/BLI_math_base.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,9 +28,9 @@
#ifndef BLI_MATH_BASE_H
#define BLI_MATH_BASE_H
-#ifdef __cplusplus
-extern "C" {
-#endif
+/** \file BLI_math_base.h
+ * \ingroup bli
+ */
#ifdef WIN32
#define _USE_MATH_DEFINES
@@ -167,11 +167,12 @@ MINLINE float power_of_2(float f);
MINLINE float shell_angle_to_dist(float angle);
-double double_round(double x, int ndigits);
-
-#ifdef __cplusplus
-}
+#if (defined(WIN32) || defined(WIN64)) && !defined(FREE_WINDOWS)
+extern double copysign(double x, double y);
+extern double round(double x);
#endif
+double double_round(double x, int ndigits);
+
#endif /* BLI_MATH_BASE_H */
diff --git a/source/blender/blenlib/BLI_math_color.h b/source/blender/blenlib/BLI_math_color.h
index bf466c0f809..fe09706cb3d 100644
--- a/source/blender/blenlib/BLI_math_color.h
+++ b/source/blender/blenlib/BLI_math_color.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef BLI_MATH_COLOR_H
#define BLI_MATH_COLOR_H
+/** \file BLI_math_color.h
+ * \ingroup bli
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenlib/BLI_math_geom.h b/source/blender/blenlib/BLI_math_geom.h
index 8f939e5dc61..8d2f9ffa38b 100644
--- a/source/blender/blenlib/BLI_math_geom.h
+++ b/source/blender/blenlib/BLI_math_geom.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef BLI_MATH_GEOM_H
#define BLI_MATH_GEOM_H
+/** \file BLI_math_geom.h
+ * \ingroup bli
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenlib/BLI_math_inline.h b/source/blender/blenlib/BLI_math_inline.h
index d07777c90a8..0f8493e25a6 100644
--- a/source/blender/blenlib/BLI_math_inline.h
+++ b/source/blender/blenlib/BLI_math_inline.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef BLI_MATH_INLINE_H
#define BLI_MATH_INLINE_H
+/** \file BLI_math_inline.h
+ * \ingroup bli
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h
index 475bbe8b4b7..939c4348461 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef BLI_MATH_MATRIX_H
#define BLI_MATH_MATRIX_H
+/** \file BLI_math_matrix.h
+ * \ingroup bli
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenlib/BLI_math_rotation.h b/source/blender/blenlib/BLI_math_rotation.h
index 7d0b8dfeaf3..d1f5fa89c3d 100644
--- a/source/blender/blenlib/BLI_math_rotation.h
+++ b/source/blender/blenlib/BLI_math_rotation.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef BLI_MATH_ROTATION_H
#define BLI_MATH_ROTATION_H
+/** \file BLI_math_rotation.h
+ * \ingroup bli
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h
index dcb9311baa0..5f26bff0ad9 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef BLI_MATH_VECTOR_H
#define BLI_MATH_VECTOR_H
+/** \file BLI_math_vector.h
+ * \ingroup bli
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenlib/BLI_memarena.h b/source/blender/blenlib/BLI_memarena.h
index a17c88b70df..f6e919d8d65 100644
--- a/source/blender/blenlib/BLI_memarena.h
+++ b/source/blender/blenlib/BLI_memarena.h
@@ -1,6 +1,4 @@
/*
- * Memory arena ADT
- *
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -27,11 +25,15 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
- *
+ */
+
+/** \file BLI_memarena.h
+ * \ingroup bli
+ * \brief Memory arena ADT.
+ * \section aboutmemarena Memory Arena
* Memory arena's are commonly used when the program
* needs to quickly allocate lots of little bits of
* data, which are all freed at the same moment.
- *
*/
#ifndef BLI_MEMARENA_H
diff --git a/source/blender/blenlib/BLI_mempool.h b/source/blender/blenlib/BLI_mempool.h
index 7c2dc36d533..4ea48929efb 100644
--- a/source/blender/blenlib/BLI_mempool.h
+++ b/source/blender/blenlib/BLI_mempool.h
@@ -1,7 +1,5 @@
-/**
- * Simple fast memory allocator
- *
- *
+/*
+ * $Id$
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
@@ -31,14 +29,18 @@
#ifndef BLI_MEMPOOL_H
#define BLI_MEMPOOL_H
-struct BLI_mempool;
-typedef struct BLI_mempool BLI_mempool;
+/** \file BLI_storage.h
+ * \ingroup bli
+ * \author Geoffrey Bantle
+ * \brief Simple fast memory allocator.
+ */
-BLI_mempool *BLI_mempool_create(int esize, int tote, int pchunk, int use_sysmalloc);
-void *BLI_mempool_alloc(BLI_mempool *pool);
-void *BLI_mempool_calloc(BLI_mempool *pool);
-void BLI_mempool_free(BLI_mempool *pool, void *addr);
-void BLI_mempool_destroy(BLI_mempool *pool);
+struct BLI_mempool;
+struct BLI_mempool *BLI_mempool_create(int esize, int tote, int pchunk, int use_sysmalloc);
+void *BLI_mempool_alloc(struct BLI_mempool *pool);
+void *BLI_mempool_calloc(struct BLI_mempool *pool);
+void BLI_mempool_free(struct BLI_mempool *pool, void *addr);
+void BLI_mempool_destroy(struct BLI_mempool *pool);
#endif
diff --git a/source/blender/blenlib/BLI_noise.h b/source/blender/blenlib/BLI_noise.h
index 11587262645..bd88529b3dc 100644
--- a/source/blender/blenlib/BLI_noise.h
+++ b/source/blender/blenlib/BLI_noise.h
@@ -31,6 +31,10 @@
#ifndef BLI_NOISE_H
#define BLI_NOISE_H
+/** \file BLI_noise.h
+ * \ingroup bli
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -57,7 +61,6 @@ void voronoi(float x, float y, float z, float* da, float* pa, float me, int dtyp
float cellNoise(float x, float y, float z);
void cellNoiseV(float x, float y, float z, float *ca);
-
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h
index fd710c59e2f..b3d657b7323 100644
--- a/source/blender/blenlib/BLI_path_util.h
+++ b/source/blender/blenlib/BLI_path_util.h
@@ -1,8 +1,4 @@
-/**
- * blenlib/BLI_storage_types.h
- *
- * Some types for dealing with directories
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +29,10 @@
#ifndef BLI_PATH_UTIL_H
#define BLI_PATH_UTIL_H
+/** \file BLI_path_util.h
+ * \ingroup bli
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenlib/BLI_pbvh.h b/source/blender/blenlib/BLI_pbvh.h
index f89068c885e..4191559771d 100644
--- a/source/blender/blenlib/BLI_pbvh.h
+++ b/source/blender/blenlib/BLI_pbvh.h
@@ -1,6 +1,4 @@
-/**
- * A BVH for high poly meshes.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,6 +23,11 @@
#ifndef BLI_PBVH_H
#define BLI_PBVH_H
+/** \file BLI_pbvh.h
+ * \ingroup bli
+ * \brief A BVH for high poly meshes.
+ */
+
struct MFace;
struct MVert;
struct DMGridAdjacency;
diff --git a/source/blender/blenlib/BLI_rand.h b/source/blender/blenlib/BLI_rand.h
index eab9f92d7e8..eb6e71acded 100644
--- a/source/blender/blenlib/BLI_rand.h
+++ b/source/blender/blenlib/BLI_rand.h
@@ -1,7 +1,4 @@
-/**
- * @file BLI_rand.h
- *
- * Random number functions.
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,10 +30,15 @@
#ifndef BLI_RAND_H
#define BLI_RAND_H
- /* RNG is just an abstract random number generator
- * type that avoids using globals, otherwise identical
- * to BLI_rand functions below.
- */
+/** \file BLI_rand.h
+ * \ingroup bli
+ * \brief Random number functions.
+ */
+
+/** RNG is just an abstract random number generator
+ * type that avoids using globals, otherwise identical
+ * to BLI_rand functions below.
+ */
struct RNG;
typedef struct RNG RNG;
diff --git a/source/blender/blenlib/BLI_rect.h b/source/blender/blenlib/BLI_rect.h
index 13b12fc4e1e..021ab636d5b 100644
--- a/source/blender/blenlib/BLI_rect.h
+++ b/source/blender/blenlib/BLI_rect.h
@@ -31,6 +31,10 @@
#ifndef BLI_RECT_H
#define BLI_RECT_H
+/** \file BLI_rect.h
+ * \ingroup bli
+ */
+
struct rctf;
struct rcti;
diff --git a/source/blender/blenlib/BLI_scanfill.h b/source/blender/blenlib/BLI_scanfill.h
index bae5375f757..e2f102c20eb 100644
--- a/source/blender/blenlib/BLI_scanfill.h
+++ b/source/blender/blenlib/BLI_scanfill.h
@@ -1,8 +1,4 @@
-/**
- * blenlib/BLI_scanfill.h mar 2001 Nzc
- *
- * Filling meshes.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -34,6 +30,13 @@
#ifndef BLI_SCANFILL_H
#define BLI_SCANFILL_H
+/** \file BLI_storage.h
+ * \ingroup bli
+ * \since March 2001
+ * \author nzc
+ * \brief Filling meshes.
+ */
+
/**
* @attention Defined in scanfill.c
*/
@@ -61,7 +64,7 @@ void BLI_end_edgefill(void);
* @param f The function to use as callback
* @attention used in creator.c
*/
-void BLI_setErrorCallBack(void (*f)(char*));
+void BLI_setErrorCallBack(void (*f)(const char*));
/**
* Set a function to be able to interrupt the execution of processing
diff --git a/source/blender/blenlib/BLI_storage.h b/source/blender/blenlib/BLI_storage.h
index 702112f5fec..017f9877baf 100644
--- a/source/blender/blenlib/BLI_storage.h
+++ b/source/blender/blenlib/BLI_storage.h
@@ -29,6 +29,10 @@
#ifndef BLI_STORAGE_H
#define BLI_STORAGE_H
+/** \file BLI_storage.h
+ * \ingroup bli
+ */
+
#ifdef WIN32
/* for size_t, only needed on win32 for some reason */
#include <stddef.h>
diff --git a/source/blender/blenlib/BLI_storage_types.h b/source/blender/blenlib/BLI_storage_types.h
index c041b33c6a4..0b8746b4c50 100644
--- a/source/blender/blenlib/BLI_storage_types.h
+++ b/source/blender/blenlib/BLI_storage_types.h
@@ -1,8 +1,4 @@
-/**
- * blenlib/BLI_storage_types.h
- *
- * Some types for dealing with directories
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +29,11 @@
#ifndef BLI_STORAGE_TYPES_H
#define BLI_STORAGE_TYPES_H
+/** \file BLI_storage_types.h
+ * \ingroup bli
+ * \brief Some types for dealing with directories.
+ */
+
#include <sys/stat.h>
#if defined(WIN32) && !defined(FREE_WINDOWS)
diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h
index 1427a6c651a..36835e0c9ca 100644
--- a/source/blender/blenlib/BLI_string.h
+++ b/source/blender/blenlib/BLI_string.h
@@ -32,6 +32,10 @@
#ifndef BLI_STRING_H
#define BLI_STRING_H
+/** \file BLI_string.h
+ * \ingroup bli
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenlib/BLI_threads.h b/source/blender/blenlib/BLI_threads.h
index ad968deb0c5..5bf5423d312 100644
--- a/source/blender/blenlib/BLI_threads.h
+++ b/source/blender/blenlib/BLI_threads.h
@@ -31,6 +31,10 @@
#ifndef BLI_THREADS_H
#define BLI_THREADS_H
+/** \file BLI_threads.h
+ * \ingroup bli
+ */
+
#include <pthread.h>
/* for tables, button in UI, etc */
diff --git a/source/blender/blenlib/BLI_utildefines.h b/source/blender/blenlib/BLI_utildefines.h
index 140b424bf8f..b2129a6ab76 100644
--- a/source/blender/blenlib/BLI_utildefines.h
+++ b/source/blender/blenlib/BLI_utildefines.h
@@ -30,6 +30,10 @@
#ifndef BLI_UTILDEFINES_H
#define BLI_UTILDEFINES_H
+/** \file BLI_utildefines.h
+ * \ingroup bli
+ */
+
#ifndef FALSE
#define FALSE 0
#endif
diff --git a/source/blender/blenlib/BLI_uvproject.h b/source/blender/blenlib/BLI_uvproject.h
index cf8bb7cd4b8..54e2090aa50 100644
--- a/source/blender/blenlib/BLI_uvproject.h
+++ b/source/blender/blenlib/BLI_uvproject.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -22,6 +22,10 @@
#ifndef BKE_UVPROJECT_H
#define BKE_UVPROJECT_H
+/** \file BLI_uvproject.h
+ * \ingroup bli
+ */
+
struct UvCameraInfo;
struct Object;
diff --git a/source/blender/blenlib/BLI_vfontdata.h b/source/blender/blenlib/BLI_vfontdata.h
index 77abb15b953..7a03c1c37fa 100644
--- a/source/blender/blenlib/BLI_vfontdata.h
+++ b/source/blender/blenlib/BLI_vfontdata.h
@@ -1,9 +1,4 @@
-/**
- * @file BLI_vfontdata.h
- *
- * A structure to represent vector fonts,
- * and to load them from PostScript fonts.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -35,6 +30,12 @@
#ifndef BLI_VFONTDATA_H
#define BLI_VFONTDATA_H
+/** \file BLI_vfontdata.h
+ * \ingroup bli
+ * \brief A structure to represent vector fonts,
+ * and to load them from PostScript fonts.
+ */
+
#include "DNA_listBase.h"
struct PackedFile;
diff --git a/source/blender/blenlib/BLI_voxel.h b/source/blender/blenlib/BLI_voxel.h
index 63a6c09b0b4..41f8bfab729 100644
--- a/source/blender/blenlib/BLI_voxel.h
+++ b/source/blender/blenlib/BLI_voxel.h
@@ -1,5 +1,4 @@
-/**
- *
+/*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
@@ -29,7 +28,11 @@
#ifndef BLI_VOXEL_H
#define BLI_VOXEL_H
-/* find the index number of a voxel, given x/y/z integer coords and resolution vector */
+/** \file BLI_voxel.h
+ * \ingroup bli
+ */
+
+/** find the index number of a voxel, given x/y/z integer coords and resolution vector */
#define V_I(x, y, z, res) ( (z)*(res)[1]*(res)[0] + (y)*(res)[0] + (x) )
/* all input coordinates must be in bounding box 0.0 - 1.0 */
diff --git a/source/blender/blenlib/BLI_winstuff.h b/source/blender/blenlib/BLI_winstuff.h
index 2b0f548f5dd..0248a6a6b4d 100644
--- a/source/blender/blenlib/BLI_winstuff.h
+++ b/source/blender/blenlib/BLI_winstuff.h
@@ -1,6 +1,4 @@
-/**
- * Compatibility-like things for windows.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,6 +30,11 @@
#ifndef __WINSTUFF_H__
#define __WINSTUFF_H__
+/** \file BLI_winstuff.h
+ * \ingroup bli
+ * \brief Compatibility-like things for windows.
+ */
+
#ifdef _WIN32
#ifndef FREE_WINDOWS
diff --git a/source/blender/blenlib/intern/BLI_args.c b/source/blender/blenlib/intern/BLI_args.c
index 4a62e9d26fd..5237c66435b 100644
--- a/source/blender/blenlib/intern/BLI_args.c
+++ b/source/blender/blenlib/intern/BLI_args.c
@@ -67,7 +67,7 @@ struct bArgs {
ListBase docs;
GHash *items;
int argc;
- char **argv;
+ const char **argv;
int *passes;
};
@@ -113,7 +113,7 @@ static bArgument *lookUp(struct bArgs *ba, const char *arg, int pass, int case_s
return BLI_ghash_lookup(ba->items, &key);
}
-bArgs *BLI_argsInit(int argc, char **argv)
+bArgs *BLI_argsInit(int argc, const char **argv)
{
bArgs *ba = MEM_callocN(sizeof(bArgs), "bArgs");
ba->passes = MEM_callocN(sizeof(int) * argc, "bArgs passes");
@@ -146,7 +146,7 @@ void BLI_argsPrint(struct bArgs *ba)
}
}
-char **BLI_argsArgv(struct bArgs *ba)
+const char **BLI_argsArgv(struct bArgs *ba)
{
return ba->argv;
}
diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c
index d85950ce22d..bdd81a8ad03 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -161,6 +161,7 @@ static float KDOP_AXES[13][3] =
heap[parent] = element; \
}
+#if 0
static int ADJUST_MEMORY(void *local_memblock, void **memblock, int new_size, int *max_size, int size_per_item)
{
int new_max_size = *max_size * 2;
@@ -186,7 +187,7 @@ static int ADJUST_MEMORY(void *local_memblock, void **memblock, int new_size, in
else
return FALSE;
}
-
+#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Introsort
diff --git a/source/blender/blenlib/intern/BLI_mempool.c b/source/blender/blenlib/intern/BLI_mempool.c
index 823841ef152..235cedb6fed 100644
--- a/source/blender/blenlib/intern/BLI_mempool.c
+++ b/source/blender/blenlib/intern/BLI_mempool.c
@@ -32,6 +32,7 @@
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
+#include "BLI_mempool.h"
#include <string.h>
typedef struct BLI_freenode{
diff --git a/source/blender/blenlib/intern/bpath.c b/source/blender/blenlib/intern/bpath.c
index 8d316f6df78..473a6172047 100644
--- a/source/blender/blenlib/intern/bpath.c
+++ b/source/blender/blenlib/intern/bpath.c
@@ -156,9 +156,11 @@ void BLI_bpathIterator_init(struct BPathIterator **bpi_pt, Main *bmain, const ch
BLI_bpathIterator_step(bpi);
}
+#if 0
static void BLI_bpathIterator_alloc(struct BPathIterator **bpi) {
*bpi= MEM_mallocN(sizeof(BPathIterator), "BLI_bpathIterator_alloc");
}
+#endif
void BLI_bpathIterator_free( struct BPathIterator *bpi ) {
if (bpi->seqdata.seqar)
diff --git a/source/blender/blenlib/intern/jitter.c b/source/blender/blenlib/intern/jitter.c
index dfc554394d6..2454c4b1444 100644
--- a/source/blender/blenlib/intern/jitter.c
+++ b/source/blender/blenlib/intern/jitter.c
@@ -34,6 +34,7 @@
#include "MEM_guardedalloc.h"
#include "BLI_rand.h"
+#include "BLI_jitter.h"
void BLI_jitterate1(float *jit1, float *jit2, int num, float rad1)
diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c
index 291e7babdbb..0a92218b967 100644
--- a/source/blender/blenlib/intern/math_rotation.c
+++ b/source/blender/blenlib/intern/math_rotation.c
@@ -1258,7 +1258,7 @@ void eulO_to_mat4(float M[4][4], const float e[3], const short order)
/* Convert 3x3 matrix to Euler angles (in radians). */
-void mat3_to_eulO(float eul[3], short order,float M[3][3])
+void mat3_to_eulO(float eul[3], const short order,float M[3][3])
{
float eul1[3], eul2[3];
diff --git a/source/blender/blenlib/intern/noise.c b/source/blender/blenlib/intern/noise.c
index 96dad590fee..9af1532ce4b 100644
--- a/source/blender/blenlib/intern/noise.c
+++ b/source/blender/blenlib/intern/noise.c
@@ -36,6 +36,8 @@
#include <math.h>
+#include "BLI_noise.h"
+
/* local */
static float noise3_perlin(float vec[3]);
//static float turbulence_perlin(float *point, float lofreq, float hifreq);
@@ -388,7 +390,7 @@ static char p[512+2]= {
0xA2,0xA0};
-float g[512+2][3]= {
+static float g[512+2][3]= {
{0.33783, 0.715698, -0.611206},
{-0.944031, -0.326599, -0.045624},
{-0.101074, -0.416443, -0.903503},
diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c
index 1a930e7ff7e..ec137d21033 100644
--- a/source/blender/blenlib/intern/path_util.c
+++ b/source/blender/blenlib/intern/path_util.c
@@ -1382,7 +1382,7 @@ int BLI_testextensie_glob(const char *str, const char *ext_fnmatch)
int BLI_replace_extension(char *path, int maxlen, const char *ext)
{
- int a;
+ unsigned int a;
for(a=strlen(path)-1; a>=0; a--)
if(path[a] == '.' || path[a] == '/' || path[a] == '\\')
@@ -1738,7 +1738,7 @@ void BLI_where_am_i(char *fullname, const int maxlen, const char *name)
}
}
-void BLI_where_is_temp(char *fullname, int maxlen, int usertemp)
+void BLI_where_is_temp(char *fullname, const int maxlen, int usertemp)
{
fullname[0] = '\0';
diff --git a/source/blender/blenlib/intern/pbvh.c b/source/blender/blenlib/intern/pbvh.c
index 9be42f9f5fc..3c7300f2588 100644
--- a/source/blender/blenlib/intern/pbvh.c
+++ b/source/blender/blenlib/intern/pbvh.c
@@ -44,22 +44,22 @@
/* Bitmap */
typedef char* BLI_bitmap;
-BLI_bitmap BLI_bitmap_new(int tot)
+static BLI_bitmap BLI_bitmap_new(int tot)
{
return MEM_callocN((tot >> 3) + 1, "BLI bitmap");
}
-int BLI_bitmap_get(BLI_bitmap b, int index)
+static int BLI_bitmap_get(BLI_bitmap b, int index)
{
return b[index >> 3] & (1 << (index & 7));
}
-void BLI_bitmap_set(BLI_bitmap b, int index)
+static void BLI_bitmap_set(BLI_bitmap b, int index)
{
b[index >> 3] |= (1 << (index & 7));
}
-void BLI_bitmap_clear(BLI_bitmap b, int index)
+static void BLI_bitmap_clear(BLI_bitmap b, int index)
{
b[index >> 3] &= ~(1 << (index & 7));
}
@@ -264,7 +264,7 @@ static int partition_indices(int *prim_indices, int lo, int hi, int axis,
}
}
-void check_partitioning(int *prim_indices, int lo, int hi, int axis,
+static void check_partitioning(int *prim_indices, int lo, int hi, int axis,
float mid, BBC *prim_bbc, int index_of_2nd_partition)
{
int i;
@@ -405,7 +405,7 @@ static void build_grids_leaf_node(PBVH *bvh, PBVHNode *node)
offset and start indicate a range in the array of primitive indices
*/
-void build_sub(PBVH *bvh, int node_index, BB *cb, BBC *prim_bbc,
+static void build_sub(PBVH *bvh, int node_index, BB *cb, BBC *prim_bbc,
int offset, int count)
{
int i, axis, end;
@@ -841,7 +841,7 @@ float BLI_pbvh_node_get_tmin(PBVHNode* node)
return node->tmin;
}
-void BLI_pbvh_search_callback_occluded(PBVH *bvh,
+static void BLI_pbvh_search_callback_occluded(PBVH *bvh,
BLI_pbvh_SearchCallback scb, void *search_data,
BLI_pbvh_HitOccludedCallback hcb, void *hit_data)
{
diff --git a/source/blender/blenlib/intern/rct.c b/source/blender/blenlib/intern/rct.c
index aa424c1c2bb..923abf22794 100644
--- a/source/blender/blenlib/intern/rct.c
+++ b/source/blender/blenlib/intern/rct.c
@@ -34,11 +34,12 @@
* ***** END GPL LICENSE BLOCK *****
*
*/
-
-#include "DNA_vec_types.h"
#include <stdio.h>
#include <math.h>
+#include "DNA_vec_types.h"
+#include "BLI_rect.h"
+
int BLI_rcti_is_empty(rcti * rect)
{
return ((rect->xmax<=rect->xmin) ||
diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c
index 1978e7ed7d6..2fa3023be51 100644
--- a/source/blender/blenlib/intern/scanfill.c
+++ b/source/blender/blenlib/intern/scanfill.c
@@ -30,10 +30,11 @@
#include "MEM_guardedalloc.h"
-
+#include "BLI_callbacks.h"
#include "BLI_editVert.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
+#include "BLI_scanfill.h"
/* callbacks for errors and interrupts and some goo */
static void (*BLI_localErrorCallBack)(const char*) = NULL;
diff --git a/source/blender/blenlib/intern/time.c b/source/blender/blenlib/intern/time.c
index 0992e08b28f..c0554217f68 100644
--- a/source/blender/blenlib/intern/time.c
+++ b/source/blender/blenlib/intern/time.c
@@ -27,8 +27,9 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
#include "PIL_time.h"
+
+#ifdef WIN32
#include <windows.h>
double PIL_check_seconds_timer(void)
diff --git a/source/blender/blenlib/intern/uvproject.c b/source/blender/blenlib/intern/uvproject.c
index b08f05b4fc8..5b1cd1dc097 100644
--- a/source/blender/blenlib/intern/uvproject.c
+++ b/source/blender/blenlib/intern/uvproject.c
@@ -28,6 +28,7 @@
#include "DNA_object_types.h"
#include "BLI_math.h"
+#include "BLI_uvproject.h"
typedef struct UvCameraInfo {
float camangle;
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index 94983791289..024bff98c0f 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -25,11 +25,15 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
- * external readfile function prototypes
*/
#ifndef BLO_READFILE_H
#define BLO_READFILE_H
+/** \file BLO_readfile.h
+ * \ingroup readwrite
+ * \brief external readfile function prototypes.
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/blenloader/BLO_soundfile.h b/source/blender/blenloader/BLO_soundfile.h
index aa37a053e18..60b05535cad 100644
--- a/source/blender/blenloader/BLO_soundfile.h
+++ b/source/blender/blenloader/BLO_soundfile.h
@@ -29,6 +29,10 @@
#ifndef BLO_SOUNDFILE_H
#define BLO_SOUNDFILE_H
+/** \file BLO_soundfile.h
+ * \ingroup readwrite
+ */
+
#include "DNA_sound_types.h"
#include "DNA_packedFile_types.h"
diff --git a/source/blender/blenloader/BLO_sys_types.h b/source/blender/blenloader/BLO_sys_types.h
index e29beb48efb..956ed513852 100644
--- a/source/blender/blenloader/BLO_sys_types.h
+++ b/source/blender/blenloader/BLO_sys_types.h
@@ -25,6 +25,11 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file BLO_sys_types.h
+ * \ingroup readwrite
+ *
* A platform-independent definition of [u]intXX_t
* Plus the accompanying header include for htonl/ntohl
*
diff --git a/source/blender/blenloader/BLO_undofile.h b/source/blender/blenloader/BLO_undofile.h
index 9ec03c4e4d4..c7f0f7f0d1f 100644
--- a/source/blender/blenloader/BLO_undofile.h
+++ b/source/blender/blenloader/BLO_undofile.h
@@ -31,6 +31,10 @@
#ifndef BLO_UNDOFILE_H
#define BLO_UNDOFILE_H
+/** \file BLO_undofile.h
+ * \ingroup readwrite
+ */
+
typedef struct {
void *next, *prev;
diff --git a/source/blender/blenloader/BLO_writefile.h b/source/blender/blenloader/BLO_writefile.h
index 127607232e1..7fdc136980e 100644
--- a/source/blender/blenloader/BLO_writefile.h
+++ b/source/blender/blenloader/BLO_writefile.h
@@ -25,12 +25,16 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
- * external writefile function prototypes
*/
#ifndef BLO_WRITEFILE_H
#define BLO_WRITEFILE_H
+/** \file BLO_writefile.h
+ * \ingroup readwrite
+ * \brief external writefile function prototypes.
+ */
+
struct MemFile;
struct Main;
struct ReportList;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 3ba7d56d8f7..542bfcdcc74 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -8754,7 +8754,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
ima->flag |= IMA_STD_FIELD;
}
tex->iuser.frames= tex->frames;
- tex->iuser.fie_ima= tex->fie_ima;
+ tex->iuser.fie_ima= (char)tex->fie_ima;
tex->iuser.offset= tex->offset;
tex->iuser.sfra= tex->sfra;
tex->iuser.cycl= (tex->imaflag & TEX_ANIMCYCLIC_)!=0;
diff --git a/source/blender/collada/collada_internal.cpp b/source/blender/collada/collada_internal.cpp
index 80c8a470888..e8d91fcbb94 100644
--- a/source/blender/collada/collada_internal.cpp
+++ b/source/blender/collada/collada_internal.cpp
@@ -23,6 +23,8 @@
*/
/* COLLADABU_ASSERT, may be able to remove later */
+#include "COLLADABUPlatform.h"
+
#include "collada_internal.h"
UnitConverter::UnitConverter() : unit(), up_axis(COLLADAFW::FileInfo::Z_UP) {}
diff --git a/source/blender/collada/collada_internal.h b/source/blender/collada/collada_internal.h
index 72b03a3d090..336f66edffd 100644
--- a/source/blender/collada/collada_internal.h
+++ b/source/blender/collada/collada_internal.h
@@ -21,8 +21,8 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
-#ifndef BLENDER_COLLADA_H
-#define BLENDER_COLLADA_H
+#ifndef COLLADA_INTERNAL_H
+#define COLLADA_INTERNAL_H
#include <string>
#include <vector>
@@ -89,4 +89,4 @@ extern std::string get_joint_id(Bone *bone, Object *ob_arm);
extern std::string get_camera_id(Object *ob);
-#endif
+#endif /* COLLADA_INTERNAL_H */
diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c
index 5708c584964..4b5d11962b2 100644
--- a/source/blender/editors/animation/anim_markers.c
+++ b/source/blender/editors/animation/anim_markers.c
@@ -269,7 +269,7 @@ TimeMarker *ED_markers_get_first_selected(ListBase *markers)
/* Print debugging prints of list of markers
* BSI's: do NOT make static or put in if-defs as "unused code". That's too much trouble when we need to use for quick debuggging!
*/
-static void debug_markers_print_list(ListBase *markers)
+void debug_markers_print_list(ListBase *markers)
{
TimeMarker *marker;
@@ -341,7 +341,6 @@ static void draw_marker(View2D *v2d, TimeMarker *marker, int cfra, int flag)
UI_icon_draw(xpos*xscale-5.0f, 16.0f, icon_id);
- glBlendFunc(GL_ONE, GL_ZERO);
glDisable(GL_BLEND);
/* and the marker name too, shifted slightly to the top-right */
diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c
index b47fea58633..04e81a7d0bf 100644
--- a/source/blender/editors/animation/fmodifier_ui.c
+++ b/source/blender/editors/animation/fmodifier_ui.c
@@ -53,10 +53,11 @@
#include "RNA_access.h"
-
#include "UI_interface.h"
#include "UI_resources.h"
+#include "ED_anim_api.h"
+
/* ********************************************** */
/* UI STUFF */
diff --git a/source/blender/editors/animation/keyframes_general.c b/source/blender/editors/animation/keyframes_general.c
index 92fce2a77e5..5ceb1293a58 100644
--- a/source/blender/editors/animation/keyframes_general.c
+++ b/source/blender/editors/animation/keyframes_general.c
@@ -48,6 +48,7 @@
#include "BKE_global.h"
#include "RNA_access.h"
+#include "RNA_enum_types.h"
#include "ED_anim_api.h"
#include "ED_keyframing.h"
@@ -452,7 +453,7 @@ void sample_fcurve (FCurve *fcu)
*/
/* globals for copy/paste data (like for other copy/paste buffers) */
-ListBase animcopybuf = {NULL, NULL};
+static ListBase animcopybuf = {NULL, NULL};
static float animcopy_firstframe= 999999999.0f;
static float animcopy_lastframe= -999999999.0f;
static float animcopy_cfra= 0.0;
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index 67be382e600..d53ec9f13e5 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -354,7 +354,7 @@ enum {
KEYNEEDED_JUSTADD,
KEYNEEDED_DELPREV,
KEYNEEDED_DELNEXT
-} eKeyNeededStatus;
+} /*eKeyNeededStatus*/;
/* This helper function determines whether a new keyframe is needed */
/* Cases where keyframes should not be added:
@@ -1037,7 +1037,7 @@ short delete_keyframe (ReportList *reports, ID *id, bAction *act, const char gro
enum {
COMMONKEY_MODE_INSERT = 0,
COMMONKEY_MODE_DELETE,
-} eCommonModifyKey_Modes;
+} /*eCommonModifyKey_Modes*/;
/* Polling callback for use with ANIM_*_keyframe() operators
* This is based on the standard ED_operator_areaactive callback,
@@ -1578,7 +1578,7 @@ short fcurve_frame_has_keyframe (FCurve *fcu, float frame, short filter)
/* Checks whether an Action has a keyframe for a given frame
* Since we're only concerned whether a keyframe exists, we can simply loop until a match is found...
*/
-short action_frame_has_keyframe (bAction *act, float frame, short filter)
+static short action_frame_has_keyframe (bAction *act, float frame, short filter)
{
FCurve *fcu;
@@ -1606,7 +1606,7 @@ short action_frame_has_keyframe (bAction *act, float frame, short filter)
}
/* Checks whether an Object has a keyframe for a given frame */
-short object_frame_has_keyframe (Object *ob, float frame, short filter)
+static short object_frame_has_keyframe (Object *ob, float frame, short filter)
{
/* error checking */
if (ob == NULL)
diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c
index 40c2f3c3797..930563678dd 100644
--- a/source/blender/editors/animation/keyingsets.c
+++ b/source/blender/editors/animation/keyingsets.c
@@ -509,7 +509,7 @@ void ANIM_OT_keying_set_active_set (wmOperatorType *ot)
/* REGISTERED KEYING SETS */
/* Keying Set Type Info declarations */
-ListBase keyingset_type_infos = {NULL, NULL};
+static ListBase keyingset_type_infos = {NULL, NULL};
/* Built-In Keying Sets (referencing type infos)*/
ListBase builtin_keyingsets = {NULL, NULL};
diff --git a/source/blender/editors/armature/BIF_retarget.h b/source/blender/editors/armature/BIF_retarget.h
index acdf07b6466..b1b7c38bddc 100644
--- a/source/blender/editors/armature/BIF_retarget.h
+++ b/source/blender/editors/armature/BIF_retarget.h
@@ -157,4 +157,8 @@ int RIG_nbJoints(RigGraph *rg);
const char *RIG_nameBone(RigGraph *rg, int arc_index, int bone_index);
void RIG_freeRigGraph(BGraph *rg);
+/* UNUSED */
+void BIF_retargetArmature(bContext *C);
+void BIF_adjustRetarget(bContext *C);
+
#endif /* BIF_RETARGET_H */
diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h
index fd54d10fd88..d898eddd885 100644
--- a/source/blender/editors/armature/armature_intern.h
+++ b/source/blender/editors/armature/armature_intern.h
@@ -171,10 +171,17 @@ LinkData *poseAnim_mapping_getNextFCurve(ListBase *fcuLinks, LinkData *prev, cha
/* PoseLib */
/* poselib.c */
+void POSELIB_OT_new(struct wmOperatorType *ot);
+void POSELIB_OT_unlink(struct wmOperatorType *ot);
+
+void POSELIB_OT_action_sanitise(struct wmOperatorType *ot);
+
void POSELIB_OT_pose_add(struct wmOperatorType *ot);
void POSELIB_OT_pose_remove(struct wmOperatorType *ot);
void POSELIB_OT_pose_rename(struct wmOperatorType *ot);
+
void POSELIB_OT_browse_interactive(struct wmOperatorType *ot);
+void POSELIB_OT_apply_pose(struct wmOperatorType *ot);
/* ******************************************************* */
/* Pose Sliding Tools */
diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c
index e28c7e9a6f1..1abb1c05489 100644
--- a/source/blender/editors/armature/armature_ops.c
+++ b/source/blender/editors/armature/armature_ops.c
@@ -142,11 +142,17 @@ void ED_operatortypes_armature(void)
/* POSELIB */
WM_operatortype_append(POSELIB_OT_browse_interactive);
+ WM_operatortype_append(POSELIB_OT_apply_pose);
WM_operatortype_append(POSELIB_OT_pose_add);
WM_operatortype_append(POSELIB_OT_pose_remove);
WM_operatortype_append(POSELIB_OT_pose_rename);
+ WM_operatortype_append(POSELIB_OT_new);
+ WM_operatortype_append(POSELIB_OT_unlink);
+
+ WM_operatortype_append(POSELIB_OT_action_sanitise);
+
/* POSE SLIDING */
WM_operatortype_append(POSE_OT_push);
WM_operatortype_append(POSE_OT_relax);
diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c
index 94c1edd90d5..2bd840e2c1d 100644
--- a/source/blender/editors/armature/editarmature.c
+++ b/source/blender/editors/armature/editarmature.c
@@ -3392,9 +3392,10 @@ void ARMATURE_OT_reveal(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-}
-void hide_selected_armature_bones(Scene *scene)
+}
+#if 0 // remove this?
+static void hide_selected_armature_bones(Scene *scene)
{
Object *obedit= scene->obedit; // XXX get from context
bArmature *arm= obedit->data;
@@ -3412,8 +3413,6 @@ void hide_selected_armature_bones(Scene *scene)
ED_armature_sync_selection(arm->edbo);
}
-
-#if 0 // remove this?
static void hide_unselected_armature_bones(Scene *scene)
{
Object *obedit= scene->obedit; // XXX get from context
@@ -3433,9 +3432,7 @@ static void hide_unselected_armature_bones(Scene *scene)
ED_armature_validate_active(arm);
ED_armature_sync_selection(arm->edbo);
}
-#endif
-#if 0 // remove this?
void show_all_armature_bones(Scene *scene)
{
Object *obedit= scene->obedit; // XXX get from context
diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c
index ee0ed8252c3..a0e465525b2 100644
--- a/source/blender/editors/armature/editarmature_retarget.c
+++ b/source/blender/editors/armature/editarmature_retarget.c
@@ -98,7 +98,7 @@ typedef enum
ARC_USED = 2
} ArcUsageFlags;
-RigGraph *GLOBAL_RIGG = NULL;
+static RigGraph *GLOBAL_RIGG = NULL;
/*******************************************************************************************************/
@@ -157,7 +157,7 @@ static void getEditBoneRollUpAxis(EditBone *bone, float roll, float up_axis[3])
VECCOPY(up_axis, mat[2]);
}
-float rollBoneByQuatAligned(EditBone *bone, float old_up_axis[3], float qrot[4], float qroll[4], float aligned_axis[3])
+static float rollBoneByQuatAligned(EditBone *bone, float old_up_axis[3], float qrot[4], float qroll[4], float aligned_axis[3])
{
float nor[3], new_up_axis[3], x_axis[3], z_axis[3];
@@ -1414,7 +1414,7 @@ static void RIG_findHead(RigGraph *rg)
/*******************************************************************************************************/
-void RIG_printNode(RigNode *node, const char name[])
+static void RIG_printNode(RigNode *node, const char name[])
{
printf("%s %p %i <%0.3f, %0.3f, %0.3f>\n", name, (void *)node, node->degree, node->p[0], node->p[1], node->p[2]);
@@ -1429,7 +1429,7 @@ void RIG_printNode(RigNode *node, const char name[])
}
}
-void RIG_printArcBones(RigArc *arc)
+static void RIG_printArcBones(RigArc *arc)
{
RigEdge *edge;
@@ -1443,7 +1443,7 @@ void RIG_printArcBones(RigArc *arc)
printf("\n");
}
-void RIG_printCtrl(RigControl *ctrl, char *indent)
+static void RIG_printCtrl(RigControl *ctrl, char *indent)
{
char text[128];
@@ -1456,7 +1456,7 @@ void RIG_printCtrl(RigControl *ctrl, char *indent)
printf("%sFlag: %i\n", indent, ctrl->flag);
}
-void RIG_printLinkedCtrl(RigGraph *rg, EditBone *bone, int tabs)
+static void RIG_printLinkedCtrl(RigGraph *rg, EditBone *bone, int tabs)
{
RigControl *ctrl;
char indent[64];
@@ -1480,7 +1480,7 @@ void RIG_printLinkedCtrl(RigGraph *rg, EditBone *bone, int tabs)
}
}
-void RIG_printArc(RigGraph *rg, RigArc *arc)
+static void RIG_printArc(RigGraph *rg, RigArc *arc)
{
RigEdge *edge;
@@ -1502,7 +1502,7 @@ void RIG_printArc(RigGraph *rg, RigArc *arc)
RIG_printNode((RigNode*)arc->tail, "tail");
}
-void RIG_printGraph(RigGraph *rg)
+static void RIG_printGraph(RigGraph *rg)
{
RigArc *arc;
@@ -1577,7 +1577,7 @@ RigGraph *RIG_graphFromArmature(const bContext *C, Object *ob, bArmature *arm)
return rg;
}
-RigGraph *armatureSelectedToGraph(bContext *C, Object *ob, bArmature *arm)
+static RigGraph *armatureSelectedToGraph(bContext *C, Object *ob, bArmature *arm)
{
Object *obedit = CTX_data_edit_object(C);
Scene *scene = CTX_data_scene(C);
@@ -1656,7 +1656,8 @@ static EditBone *add_editbonetolist(char *name, ListBase *list)
}
#endif
-void generateMissingArcsFromNode(RigGraph *rigg, ReebNode *node, int multi_level_limit)
+#if 0 /* UNUSED */
+static void generateMissingArcsFromNode(RigGraph *rigg, ReebNode *node, int multi_level_limit)
{
while (node->multi_level > multi_level_limit && node->link_up)
{
@@ -1689,7 +1690,7 @@ void generateMissingArcsFromNode(RigGraph *rigg, ReebNode *node, int multi_level
}
}
-void generateMissingArcs(RigGraph *rigg)
+static void generateMissingArcs(RigGraph *rigg)
{
ReebGraph *reebg;
int multi_level_limit = 5;
@@ -1708,6 +1709,7 @@ void generateMissingArcs(RigGraph *rigg)
}
}
}
+#endif
/************************************ RETARGETTING *****************************************************/
@@ -2790,7 +2792,7 @@ int RIG_nbJoints(RigGraph *rg)
return total;
}
-void BIF_freeRetarget(void)
+static void BIF_freeRetarget(void)
{
if (GLOBAL_RIGG)
{
diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c
index 7a5c14b1dab..c0b77b5feef 100644
--- a/source/blender/editors/armature/editarmature_sketch.c
+++ b/source/blender/editors/armature/editarmature_sketch.c
@@ -76,9 +76,12 @@ typedef struct SK_GestureAction {
GestureApplyFct apply;
} SK_GestureAction;
-SK_Point boneSnap;
-int LAST_SNAP_POINT_VALID = 0;
-float LAST_SNAP_POINT[3];
+#if 0 /* UNUSED 2.5 */
+static SK_Point boneSnap;
+#endif
+
+static int LAST_SNAP_POINT_VALID = 0;
+static float LAST_SNAP_POINT[3];
typedef struct SK_StrokeIterator {
@@ -129,7 +132,7 @@ int sk_hasOverdraw(SK_Sketch *sketch, SK_Stroke *stk);
/******************** GESTURE ACTIONS ******************************/
-SK_GestureAction GESTURE_ACTIONS[] =
+static SK_GestureAction GESTURE_ACTIONS[] =
{
{"Cut", sk_detectCutGesture, sk_applyCutGesture},
{"Trim", sk_detectTrimGesture, sk_applyTrimGesture},
@@ -143,10 +146,10 @@ SK_GestureAction GESTURE_ACTIONS[] =
/******************** TEMPLATES UTILS *************************/
-char *TEMPLATES_MENU = NULL;
-int TEMPLATES_CURRENT = 0;
-GHash *TEMPLATES_HASH = NULL;
-RigGraph *TEMPLATE_RIGG = NULL;
+static char *TEMPLATES_MENU = NULL;
+static int TEMPLATES_CURRENT = 0;
+static GHash *TEMPLATES_HASH = NULL;
+static RigGraph *TEMPLATE_RIGG = NULL;
void BIF_makeListTemplates(const bContext *C)
{
@@ -240,7 +243,7 @@ int BIF_currentTemplate(const bContext *C)
return TEMPLATES_CURRENT;
}
-RigGraph* sk_makeTemplateGraph(const bContext *C, Object *ob)
+static RigGraph* sk_makeTemplateGraph(const bContext *C, Object *ob)
{
Object *obedit = CTX_data_edit_object(C);
if (ob == obedit)
@@ -348,7 +351,7 @@ void BIF_setTemplate(bContext *C, int index)
/*********************** CONVERSION ***************************/
-void sk_autoname(bContext *C, ReebArc *arc)
+static void sk_autoname(bContext *C, ReebArc *arc)
{
ToolSettings *ts = CTX_data_tool_settings(C);
if (ts->skgen_retarget_options & SK_RETARGET_AUTONAME)
@@ -396,7 +399,7 @@ void sk_autoname(bContext *C, ReebArc *arc)
}
}
-ReebNode *sk_pointToNode(SK_Point *pt, float imat[][4], float tmat[][3])
+static ReebNode *sk_pointToNode(SK_Point *pt, float imat[][4], float tmat[][3])
{
ReebNode *node;
@@ -410,7 +413,7 @@ ReebNode *sk_pointToNode(SK_Point *pt, float imat[][4], float tmat[][3])
return node;
}
-ReebArc *sk_strokeToArc(SK_Stroke *stk, float imat[][4], float tmat[][3])
+static ReebArc *sk_strokeToArc(SK_Stroke *stk, float imat[][4], float tmat[][3])
{
ReebArc *arc;
int i;
@@ -434,7 +437,7 @@ ReebArc *sk_strokeToArc(SK_Stroke *stk, float imat[][4], float tmat[][3])
return arc;
}
-void sk_retargetStroke(bContext *C, SK_Stroke *stk)
+static void sk_retargetStroke(bContext *C, SK_Stroke *stk)
{
ToolSettings *ts = CTX_data_tool_settings(C);
Object *obedit = CTX_data_edit_object(C);
@@ -465,7 +468,7 @@ void sk_retargetStroke(bContext *C, SK_Stroke *stk)
/**************************************************************/
-void sk_cancelStroke(SK_Sketch *sketch)
+static void sk_cancelStroke(SK_Sketch *sketch)
{
if (sketch->active_stroke != NULL)
{
@@ -475,18 +478,18 @@ void sk_cancelStroke(SK_Sketch *sketch)
}
-float sk_clampPointSize(SK_Point *pt, float size)
+static float sk_clampPointSize(SK_Point *pt, float size)
{
return MAX2(size * pt->size, size / 2);
}
-void sk_drawPoint(GLUquadric *quad, SK_Point *pt, float size)
+static void sk_drawPoint(GLUquadric *quad, SK_Point *pt, float size)
{
glTranslatef(pt->p[0], pt->p[1], pt->p[2]);
gluSphere(quad, sk_clampPointSize(pt, size), 8, 8);
}
-void sk_drawEdge(GLUquadric *quad, SK_Point *pt0, SK_Point *pt1, float size)
+static void sk_drawEdge(GLUquadric *quad, SK_Point *pt0, SK_Point *pt1, float size)
{
float vec1[3], vec2[3] = {0, 0, 1}, axis[3];
float angle, length;
@@ -507,7 +510,7 @@ void sk_drawEdge(GLUquadric *quad, SK_Point *pt0, SK_Point *pt1, float size)
gluCylinder(quad, sk_clampPointSize(pt1, size), sk_clampPointSize(pt0, size), length, 8, 8);
}
-void sk_drawNormal(GLUquadric *quad, SK_Point *pt, float size, float height)
+static void sk_drawNormal(GLUquadric *quad, SK_Point *pt, float size, float height)
{
float vec2[3] = {0, 0, 1}, axis[3];
float angle;
@@ -531,7 +534,7 @@ void sk_drawNormal(GLUquadric *quad, SK_Point *pt, float size, float height)
glPopMatrix();
}
-void sk_drawStroke(SK_Stroke *stk, int id, float color[3], int start, int end)
+static void sk_drawStroke(SK_Stroke *stk, int id, float color[3], int start, int end)
{
float rgb[3];
int i;
@@ -607,7 +610,7 @@ void sk_drawStroke(SK_Stroke *stk, int id, float color[3], int start, int end)
gluDeleteQuadric(quad);
}
-void drawSubdividedStrokeBy(ToolSettings *toolsettings, BArcIterator *iter, NextSubdivisionFunc next_subdividion)
+static void drawSubdividedStrokeBy(ToolSettings *toolsettings, BArcIterator *iter, NextSubdivisionFunc next_subdividion)
{
SK_Stroke *stk = ((SK_StrokeIterator*)iter)->stroke;
float head[3], tail[3];
@@ -643,7 +646,7 @@ void drawSubdividedStrokeBy(ToolSettings *toolsettings, BArcIterator *iter, Next
gluDeleteQuadric(quad);
}
-void sk_drawStrokeSubdivision(ToolSettings *toolsettings, SK_Stroke *stk)
+static void sk_drawStrokeSubdivision(ToolSettings *toolsettings, SK_Stroke *stk)
{
int head_index = -1;
int i;
@@ -694,7 +697,7 @@ void sk_drawStrokeSubdivision(ToolSettings *toolsettings, SK_Stroke *stk)
}
}
-SK_Point *sk_snapPointStroke(bContext *C, SK_Stroke *stk, short mval[2], int *dist, int *index, int all_pts)
+static SK_Point *sk_snapPointStroke(bContext *C, SK_Stroke *stk, short mval[2], int *dist, int *index, int all_pts)
{
ARegion *ar = CTX_wm_region(C);
SK_Point *pt = NULL;
@@ -727,7 +730,8 @@ SK_Point *sk_snapPointStroke(bContext *C, SK_Stroke *stk, short mval[2], int *di
return pt;
}
-SK_Point *sk_snapPointArmature(bContext *C, Object *ob, ListBase *ebones, short mval[2], int *dist)
+#if 0 /* UNUSED 2.5 */
+static SK_Point *sk_snapPointArmature(bContext *C, Object *ob, ListBase *ebones, short mval[2], int *dist)
{
ARegion *ar = CTX_wm_region(C);
SK_Point *pt = NULL;
@@ -774,6 +778,7 @@ SK_Point *sk_snapPointArmature(bContext *C, Object *ob, ListBase *ebones, short
return pt;
}
+#endif
void sk_resetOverdraw(SK_Sketch *sketch)
{
@@ -791,7 +796,7 @@ int sk_hasOverdraw(SK_Sketch *sketch, SK_Stroke *stk)
(sketch->over.start != -1 || sketch->over.end != -1);
}
-void sk_updateOverdraw(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
+static void sk_updateOverdraw(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
{
if (sketch->over.target == NULL)
{
@@ -868,7 +873,7 @@ void sk_updateOverdraw(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawDa
}
/* return 1 on reverse needed */
-int sk_adjustIndexes(SK_Sketch *sketch, int *start, int *end)
+static int sk_adjustIndexes(SK_Sketch *sketch, int *start, int *end)
{
int retval = 0;
@@ -896,7 +901,7 @@ int sk_adjustIndexes(SK_Sketch *sketch, int *start, int *end)
return retval;
}
-void sk_endOverdraw(SK_Sketch *sketch)
+static void sk_endOverdraw(SK_Sketch *sketch)
{
SK_Stroke *stk = sketch->active_stroke;
@@ -925,7 +930,7 @@ void sk_endOverdraw(SK_Sketch *sketch)
}
-void sk_startStroke(SK_Sketch *sketch)
+static void sk_startStroke(SK_Sketch *sketch)
{
SK_Stroke *stk = sk_createStroke();
@@ -935,7 +940,7 @@ void sk_startStroke(SK_Sketch *sketch)
sk_resetOverdraw(sketch);
}
-void sk_endStroke(bContext *C, SK_Sketch *sketch)
+static void sk_endStroke(bContext *C, SK_Sketch *sketch)
{
ToolSettings *ts = CTX_data_tool_settings(C);
sk_shrinkStrokeBuffer(sketch->active_stroke);
@@ -948,7 +953,7 @@ void sk_endStroke(bContext *C, SK_Sketch *sketch)
sketch->active_stroke = NULL;
}
-void sk_updateDrawData(SK_DrawData *dd)
+static void sk_updateDrawData(SK_DrawData *dd)
{
dd->type = PT_CONTINUOUS;
@@ -956,7 +961,7 @@ void sk_updateDrawData(SK_DrawData *dd)
dd->previous_mval[1] = dd->mval[1];
}
-float sk_distanceDepth(bContext *C, float p1[3], float p2[3])
+static float sk_distanceDepth(bContext *C, float p1[3], float p2[3])
{
ARegion *ar = CTX_wm_region(C);
RegionView3D *rv3d = ar->regiondata;
@@ -977,7 +982,7 @@ float sk_distanceDepth(bContext *C, float p1[3], float p2[3])
return distance;
}
-void sk_interpolateDepth(bContext *C, SK_Stroke *stk, int start, int end, float length, float distance)
+static void sk_interpolateDepth(bContext *C, SK_Stroke *stk, int start, int end, float length, float distance)
{
ARegion *ar = CTX_wm_region(C);
ScrArea *sa = CTX_wm_area(C);
@@ -1004,7 +1009,7 @@ void sk_interpolateDepth(bContext *C, SK_Stroke *stk, int start, int end, float
}
}
-void sk_projectDrawPoint(bContext *C, float vec[3], SK_Stroke *stk, SK_DrawData *dd)
+static void sk_projectDrawPoint(bContext *C, float vec[3], SK_Stroke *stk, SK_DrawData *dd)
{
ARegion *ar = CTX_wm_region(C);
/* copied from grease pencil, need fixing */
@@ -1026,7 +1031,7 @@ void sk_projectDrawPoint(bContext *C, float vec[3], SK_Stroke *stk, SK_DrawData
sub_v3_v3v3(vec, fp, dvec);
}
-int sk_getStrokeDrawPoint(bContext *C, SK_Point *pt, SK_Sketch *UNUSED(sketch), SK_Stroke *stk, SK_DrawData *dd)
+static int sk_getStrokeDrawPoint(bContext *C, SK_Point *pt, SK_Sketch *UNUSED(sketch), SK_Stroke *stk, SK_DrawData *dd)
{
pt->type = dd->type;
pt->mode = PT_PROJECT;
@@ -1035,7 +1040,7 @@ int sk_getStrokeDrawPoint(bContext *C, SK_Point *pt, SK_Sketch *UNUSED(sketch),
return 1;
}
-int sk_addStrokeDrawPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
+static int sk_addStrokeDrawPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
{
ARegion *ar = CTX_wm_region(C);
RegionView3D *rv3d = ar->regiondata;
@@ -1050,7 +1055,7 @@ int sk_addStrokeDrawPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_Dra
return 1;
}
-int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
+static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
{
ToolSettings *ts = CTX_data_tool_settings(C);
int point_added = 0;
@@ -1206,7 +1211,7 @@ int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Strok
return point_added;
}
-int sk_addStrokeSnapPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
+static int sk_addStrokeSnapPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
{
int point_added;
ARegion *ar = CTX_wm_region(C);
@@ -1257,7 +1262,7 @@ int sk_addStrokeSnapPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_Dra
return point_added;
}
-void sk_addStrokePoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd, short snap)
+static void sk_addStrokePoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd, short snap)
{
ToolSettings *ts = CTX_data_tool_settings(C);
int point_added = 0;
@@ -1278,7 +1283,7 @@ void sk_addStrokePoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawDa
}
}
-void sk_getStrokePoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd, short snap)
+static void sk_getStrokePoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd, short snap)
{
int point_added = 0;
@@ -1466,7 +1471,7 @@ static int iteratorStopped(void *arg)
}
}
-void sk_convertStroke(bContext *C, SK_Stroke *stk)
+static void sk_convertStroke(bContext *C, SK_Stroke *stk)
{
Object *obedit = CTX_data_edit_object(C);
ToolSettings *ts = CTX_data_tool_settings(C);
@@ -1558,7 +1563,7 @@ void sk_convertStroke(bContext *C, SK_Stroke *stk)
}
}
-void sk_convert(bContext *C, SK_Sketch *sketch)
+static void sk_convert(bContext *C, SK_Sketch *sketch)
{
ToolSettings *ts = CTX_data_tool_settings(C);
SK_Stroke *stk;
@@ -1584,7 +1589,7 @@ void sk_convert(bContext *C, SK_Sketch *sketch)
/* returns the number of self intersections */
-int sk_getSelfIntersections(bContext *C, ListBase *list, SK_Stroke *gesture)
+static int sk_getSelfIntersections(bContext *C, ListBase *list, SK_Stroke *gesture)
{
ARegion *ar = CTX_wm_region(C);
int added = 0;
@@ -1633,7 +1638,7 @@ int sk_getSelfIntersections(bContext *C, ListBase *list, SK_Stroke *gesture)
return added;
}
-int cmpIntersections(void *i1, void *i2)
+static int cmpIntersections(void *i1, void *i2)
{
SK_Intersection *isect1 = i1, *isect2 = i2;
@@ -1665,7 +1670,7 @@ int cmpIntersections(void *i1, void *i2)
/* returns the maximum number of intersections per stroke */
-int sk_getIntersections(bContext *C, ListBase *list, SK_Sketch *sketch, SK_Stroke *gesture)
+static int sk_getIntersections(bContext *C, ListBase *list, SK_Sketch *sketch, SK_Stroke *gesture)
{
ARegion *ar = CTX_wm_region(C);
ScrArea *sa = CTX_wm_area(C);
@@ -1735,7 +1740,7 @@ int sk_getIntersections(bContext *C, ListBase *list, SK_Sketch *sketch, SK_Strok
return added;
}
-int sk_getSegments(SK_Stroke *segments, SK_Stroke *gesture)
+static int sk_getSegments(SK_Stroke *segments, SK_Stroke *gesture)
{
SK_StrokeIterator sk_iter;
BArcIterator *iter = (BArcIterator*)&sk_iter;
@@ -2124,7 +2129,7 @@ static void sk_freeGesture(SK_Gesture *gest)
BLI_freelistN(&gest->self_intersections);
}
-void sk_applyGesture(bContext *C, SK_Sketch *sketch)
+static void sk_applyGesture(bContext *C, SK_Sketch *sketch)
{
SK_Gesture gest;
SK_GestureAction *act;
@@ -2147,7 +2152,7 @@ void sk_applyGesture(bContext *C, SK_Sketch *sketch)
/********************************************/
-int sk_selectStroke(bContext *C, SK_Sketch *sketch, short mval[2], int extend)
+static int sk_selectStroke(bContext *C, SK_Sketch *sketch, short mval[2], int extend)
{
ViewContext vc;
rcti rect;
@@ -2198,7 +2203,8 @@ int sk_selectStroke(bContext *C, SK_Sketch *sketch, short mval[2], int extend)
return 0;
}
-void sk_queueRedrawSketch(SK_Sketch *sketch)
+#if 0 /* UNUSED 2.5 */
+static void sk_queueRedrawSketch(SK_Sketch *sketch)
{
if (sketch->active_stroke != NULL)
{
@@ -2211,8 +2217,9 @@ void sk_queueRedrawSketch(SK_Sketch *sketch)
}
}
}
+#endif
-void sk_drawSketch(Scene *scene, View3D *UNUSED(v3d), SK_Sketch *sketch, int with_names)
+static void sk_drawSketch(Scene *scene, View3D *UNUSED(v3d), SK_Sketch *sketch, int with_names)
{
ToolSettings *ts= scene->toolsettings;
SK_Stroke *stk;
@@ -2340,7 +2347,7 @@ void sk_drawSketch(Scene *scene, View3D *UNUSED(v3d), SK_Sketch *sketch, int wit
}
}
-int sk_finish_stroke(bContext *C, SK_Sketch *sketch)
+static int sk_finish_stroke(bContext *C, SK_Sketch *sketch)
{
ToolSettings *ts = CTX_data_tool_settings(C);
@@ -2375,7 +2382,7 @@ int sk_finish_stroke(bContext *C, SK_Sketch *sketch)
return 0;
}
-void sk_start_draw_stroke(SK_Sketch *sketch)
+static void sk_start_draw_stroke(SK_Sketch *sketch)
{
if (sketch->active_stroke == NULL)
{
@@ -2386,12 +2393,12 @@ void sk_start_draw_stroke(SK_Sketch *sketch)
}
}
-void sk_start_draw_gesture(SK_Sketch *sketch)
+static void sk_start_draw_gesture(SK_Sketch *sketch)
{
sketch->gesture = sk_createStroke();
}
-int sk_draw_stroke(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd, short snap)
+static int sk_draw_stroke(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd, short snap)
{
if (sk_stroke_filtermval(dd))
{
@@ -2769,7 +2776,7 @@ int ED_operator_sketch_mode_active_stroke(bContext *C)
}
}
-int ED_operator_sketch_mode_gesture(bContext *C)
+static int ED_operator_sketch_mode_gesture(bContext *C)
{
ToolSettings *ts = CTX_data_tool_settings(C);
SK_Sketch *sketch = contextSketch(C, 0);
diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c
index c0600ceed1c..4d78c9e2f7b 100644
--- a/source/blender/editors/armature/meshlaplacian.c
+++ b/source/blender/editors/armature/meshlaplacian.c
@@ -57,6 +57,7 @@
#include "BLO_sys_types.h" // for intptr_t support
#include "ED_mesh.h"
+#include "ED_armature.h"
#include "meshlaplacian.h"
@@ -237,7 +238,7 @@ static void laplacian_triangle_weights(LaplacianSystem *sys, int f, int i1, int
}
}
-LaplacianSystem *laplacian_system_construct_begin(int totvert, int totface, int lsq)
+static LaplacianSystem *laplacian_system_construct_begin(int totvert, int totface, int lsq)
{
LaplacianSystem *sys;
@@ -279,7 +280,7 @@ void laplacian_add_triangle(LaplacianSystem *sys, int v1, int v2, int v3)
sys->totface++;
}
-void laplacian_system_construct_end(LaplacianSystem *sys)
+static void laplacian_system_construct_end(LaplacianSystem *sys)
{
int (*face)[3];
int a, totvert=sys->totvert, totface=sys->totface;
@@ -330,7 +331,7 @@ void laplacian_system_construct_end(LaplacianSystem *sys)
sys->edgehash= NULL;
}
-void laplacian_system_delete(LaplacianSystem *sys)
+static void laplacian_system_delete(LaplacianSystem *sys)
{
if(sys->verts) MEM_freeN(sys->verts);
if(sys->varea) MEM_freeN(sys->varea);
@@ -565,7 +566,7 @@ static void heat_set_H(LaplacianSystem *sys, int vertex)
sys->heat.H[vertex]= h;
}
-void heat_calc_vnormals(LaplacianSystem *sys)
+static void heat_calc_vnormals(LaplacianSystem *sys)
{
float fnor[3];
int a, v1, v2, v3, (*face)[3];
diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c
index 9c7911715b4..9577c45de50 100644
--- a/source/blender/editors/armature/poselib.c
+++ b/source/blender/editors/armature/poselib.c
@@ -49,6 +49,8 @@
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_depsgraph.h"
+#include "BKE_idprop.h"
+#include "BKE_library.h"
#include "BKE_context.h"
#include "BKE_report.h"
@@ -95,41 +97,11 @@ static void action_set_activemarker(void *UNUSED(a), void *UNUSED(b), void *UNUS
*/
/* ************************************************************* */
-/* gets list of poses in poselib as a string usable for pupmenu() */
-char *poselib_build_poses_menu (bAction *act, char title[])
-{
- DynStr *pupds= BLI_dynstr_new();
- TimeMarker *marker;
- char *str;
- char buf[64];
- int i;
-
- /* add title first */
- sprintf(buf, "%s%%t|", title);
- BLI_dynstr_append(pupds, buf);
-
- /* loop through markers, adding them */
- for (marker=act->markers.first, i=1; marker; marker=marker->next, i++) {
- BLI_dynstr_append(pupds, marker->name);
-
- sprintf(buf, "%%x%d", i);
- BLI_dynstr_append(pupds, buf);
-
- if (marker->next)
- BLI_dynstr_append(pupds, "|");
- }
-
- /* convert to normal MEM_malloc'd string */
- str= BLI_dynstr_get_cstring(pupds);
- BLI_dynstr_free(pupds);
-
- return str;
-}
/* gets the first available frame in poselib to store a pose on
* - frames start from 1, and a pose should occur on every frame... 0 is error!
*/
-int poselib_get_free_index (bAction *act)
+static int poselib_get_free_index (bAction *act)
{
TimeMarker *marker;
int low=0, high=0;
@@ -160,7 +132,7 @@ int poselib_get_free_index (bAction *act)
}
/* returns the active pose for a poselib */
-TimeMarker *poselib_get_active_pose (bAction *act)
+static TimeMarker *poselib_get_active_pose (bAction *act)
{
if ((act) && (act->active_marker))
return BLI_findlink(&act->markers, act->active_marker-1);
@@ -168,10 +140,28 @@ TimeMarker *poselib_get_active_pose (bAction *act)
return NULL;
}
-/* ************************************************************* */
+/* Get object that Pose Lib should be found on */
+static Object *get_poselib_object (bContext *C)
+{
+ ScrArea *sa = CTX_wm_area(C);
+
+ if (sa->spacetype == SPACE_BUTS)
+ return CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
+ else
+ return ED_object_pose_armature(CTX_data_active_object(C));
+}
+
+/* Poll callback for operators that require existing PoseLib data (with poses) to work */
+static int has_poselib_pose_data_poll (bContext *C)
+{
+ Object *ob = get_poselib_object(C);
+ return (ob && ob->poselib);
+}
+
+/* ----------------------------------- */
/* Initialise a new poselib (whether it is needed or not) */
-bAction *poselib_init_new (Object *ob)
+static bAction *poselib_init_new (Object *ob)
{
/* sanity checks - only for armatures */
if (ELEM(NULL, ob, ob->pose))
@@ -179,14 +169,14 @@ bAction *poselib_init_new (Object *ob)
/* init object's poselib action (unlink old one if there) */
if (ob->poselib)
- ob->poselib->id.us--;
+ id_us_min(&ob->poselib->id);
ob->poselib= add_empty_action("PoseLib");
return ob->poselib;
}
/* Initialise a new poselib (checks if that needs to happen) */
-bAction *poselib_validate (Object *ob)
+static bAction *poselib_validate (Object *ob)
{
if (ELEM(NULL, ob, ob->pose))
return NULL;
@@ -196,29 +186,102 @@ bAction *poselib_validate (Object *ob)
return ob->poselib;
}
+/* ************************************************************* */
+/* Pose Lib UI Operators */
+
+static int poselib_new_exec (bContext *C, wmOperator *UNUSED(op))
+{
+ Object *ob = get_poselib_object(C);
+
+ /* sanity checks */
+ if (ob == NULL)
+ return OPERATOR_CANCELLED;
+
+ /* new method here deals with the rest... */
+ poselib_init_new(ob);
+
+ /* notifier here might evolve? */
+ WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void POSELIB_OT_new (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "New Pose Library";
+ ot->idname = "POSELIB_OT_new";
+ ot->description = "Add New Pose Library to active Object";
+
+ /* callbacks */
+ ot->exec = poselib_new_exec;
+ ot->poll= ED_operator_posemode;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+/* ------------------------------------------------ */
+
+static int poselib_unlink_exec (bContext *C, wmOperator *UNUSED(op))
+{
+ Object *ob = get_poselib_object(C);
+
+ /* sanity checks */
+ if (ELEM(NULL, ob, ob->poselib))
+ return OPERATOR_CANCELLED;
+
+ /* there should be a poselib (we just checked above!), so just lower its user count and remove */
+ id_us_min(&ob->poselib->id);
+ ob->poselib = NULL;
+
+ /* notifier here might evolve? */
+ WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void POSELIB_OT_unlink (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Unlink Pose Library";
+ ot->idname = "POSELIB_OT_unlink";
+ ot->description = "Remove Pose Library from active Object";
+
+ /* callbacks */
+ ot->exec = poselib_unlink_exec;
+ ot->poll= has_poselib_pose_data_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+/* ************************************************************* */
+/* Pose Editing Operators */
/* This tool automagically generates/validates poselib data so that it corresponds to the data
* in the action. This is for use in making existing actions usable as poselibs.
*/
-// TODO: operatorfy me!
-void poselib_validate_act (bAction *act)
+static int poselib_sanitise_exec (bContext *C, wmOperator *op)
{
- DLRBT_Tree keys = {NULL, NULL};
+ Object *ob = get_poselib_object(C);
+ bAction *act = (ob)? ob->poselib : NULL;
+ DLRBT_Tree keys;
ActKeyColumn *ak;
TimeMarker *marker, *markern;
- /* validate action and poselib */
+ /* validate action */
if (act == NULL) {
- //error("No Action to validate");
- return;
+ BKE_report(op->reports, RPT_WARNING, "No Action to validate");
+ return OPERATOR_CANCELLED;
}
/* determine which frames have keys */
BLI_dlrbTree_init(&keys);
- action_to_keylist(NULL, act, &keys, NULL);
+ action_to_keylist(NULL, act, &keys, NULL);
BLI_dlrbTree_linkedlist_sync(&keys);
- /* for each key, make sure there is a correspnding pose */
+ /* for each key, make sure there is a corresponding pose */
for (ak= keys.first; ak; ak= ak->next) {
/* check if any pose matches this */
// TODO: don't go looking through the list like this every time...
@@ -231,13 +294,10 @@ void poselib_validate_act (bAction *act)
/* add new if none found */
if (marker == NULL) {
- char name[64];
-
/* add pose to poselib */
marker= MEM_callocN(sizeof(TimeMarker), "ActionMarker");
- strcpy(name, "Pose");
- BLI_strncpy(marker->name, name, sizeof(marker->name));
+ BLI_strncpy(marker->name, "Pose", sizeof(marker->name));
marker->frame= (int)ak->cfra;
marker->flag= -1;
@@ -257,21 +317,31 @@ void poselib_validate_act (bAction *act)
}
/* free temp memory */
- BLI_freelistN((ListBase *)&keys);
+ BLI_dlrbTree_free(&keys);
- //BIF_undo_push("PoseLib Validate Action");
+ return OPERATOR_FINISHED;
}
-/* ************************************************************* */
-
-/* Pointers to the builtin KeyingSets that we want to use */
-static KeyingSet *poselib_ks_locrotscale = NULL; /* the only keyingset we'll need */
+void POSELIB_OT_action_sanitise (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Sanitise Pose Library Action";
+ ot->idname = "POSELIB_OT_action_sanitise";
+ ot->description = "Make action suitable for use as a Pose Library";
+
+ /* callbacks */
+ ot->exec = poselib_sanitise_exec;
+ ot->poll = has_poselib_pose_data_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
-/* ----- */
+/* ------------------------------------------ */
static void poselib_add_menu_invoke__replacemenu (bContext *C, uiLayout *layout, void *UNUSED(arg))
{
- Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
+ Object *ob= get_poselib_object(C);
bAction *act= ob->poselib;
TimeMarker *marker;
@@ -294,14 +364,13 @@ static void poselib_add_menu_invoke__replacemenu (bContext *C, uiLayout *layout,
static int poselib_add_menu_invoke (bContext *C, wmOperator *op, wmEvent *UNUSED(evt))
{
Scene *scene= CTX_data_scene(C);
- Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
- bArmature *arm= (ob) ? ob->data : NULL;
+ Object *ob= get_poselib_object(C);
bPose *pose= (ob) ? ob->pose : NULL;
uiPopupMenu *pup;
uiLayout *layout;
/* sanity check */
- if (ELEM3(NULL, ob, arm, pose))
+ if (ELEM(NULL, ob, pose))
return OPERATOR_CANCELLED;
/* start building */
@@ -330,16 +399,16 @@ static int poselib_add_menu_invoke (bContext *C, wmOperator *op, wmEvent *UNUSED
static int poselib_add_exec (bContext *C, wmOperator *op)
{
- Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
+ Object *ob= get_poselib_object(C);
bAction *act = poselib_validate(ob);
- bArmature *arm= (ob) ? ob->data : NULL;
bPose *pose= (ob) ? ob->pose : NULL;
TimeMarker *marker;
+ KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Whole Character"); /* this includes custom props :)*/
int frame= RNA_int_get(op->ptr, "frame");
char name[64];
/* sanity check (invoke should have checked this anyway) */
- if (ELEM3(NULL, ob, arm, pose))
+ if (ELEM(NULL, ob, pose))
return OPERATOR_CANCELLED;
/* get name to give to pose */
@@ -367,12 +436,10 @@ static int poselib_add_exec (bContext *C, wmOperator *op)
/* validate name */
BLI_uniquename(&act->markers, marker, "Pose", '.', offsetof(TimeMarker, name), sizeof(marker->name));
- /* KeyingSet to use depends on rotation mode (but that's handled by the templates code) */
- if (poselib_ks_locrotscale == NULL)
- poselib_ks_locrotscale= ANIM_builtin_keyingset_get_named(NULL, "LocRotScale");
-
- /* make the keyingset use context info to determine where to add keyframes */
- ANIM_apply_keyingset(C, NULL, act, poselib_ks_locrotscale, MODIFYKEY_MODE_INSERT, (float)frame);
+ /* use Keying Set to determine what to store for the pose */
+ // FIXME: in the past, the Keying Set respected selections (LocRotScale), but the current one doesn't (Whole Character)
+ // so perhaps we need either a new Keying Set, or just to add overrides here...
+ ANIM_apply_keyingset(C, NULL, act, ks, MODIFYKEY_MODE_INSERT, (float)frame);
/* store new 'active' pose number */
act->active_marker= BLI_countlist(&act->markers);
@@ -403,19 +470,23 @@ void POSELIB_OT_pose_add (wmOperatorType *ot)
/* ----- */
+/* can be called with C == NULL */
static EnumPropertyItem *poselib_stored_pose_itemf(bContext *C, PointerRNA *UNUSED(ptr), int *free)
{
- Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
- bAction *act= (ob) ? ob->poselib : NULL;
+ Object *ob;
+ bAction *act;
TimeMarker *marker;
EnumPropertyItem *item= NULL, item_tmp= {0};
int totitem= 0;
int i= 0;
- if (C==NULL) {
+ if (C == NULL) {
return DummyRNA_DEFAULT_items;
}
+ ob= get_poselib_object(C);
+ act= (ob) ? ob->poselib : NULL;
+
/* check that the action exists */
if (act) {
/* add each marker to the list */
@@ -435,7 +506,7 @@ static EnumPropertyItem *poselib_stored_pose_itemf(bContext *C, PointerRNA *UNUS
static int poselib_remove_exec (bContext *C, wmOperator *op)
{
- Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
+ Object *ob= get_poselib_object(C);
bAction *act= (ob) ? ob->poselib : NULL;
TimeMarker *marker;
FCurve *fcu;
@@ -449,7 +520,7 @@ static int poselib_remove_exec (bContext *C, wmOperator *op)
/* get index (and pointer) of pose to remove */
marker= BLI_findlink(&act->markers, RNA_int_get(op->ptr, "pose"));
if (marker == NULL) {
- BKE_report(op->reports, RPT_ERROR, "Invalid index for Pose");
+ BKE_reportf(op->reports, RPT_ERROR, "Invalid Pose specified %d", RNA_int_get(op->ptr, "pose"));
return OPERATOR_CANCELLED;
}
@@ -491,20 +562,20 @@ void POSELIB_OT_pose_remove (wmOperatorType *ot)
/* api callbacks */
ot->invoke= WM_menu_invoke;
ot->exec= poselib_remove_exec;
- ot->poll= ED_operator_posemode;
+ ot->poll= has_poselib_pose_data_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
prop= RNA_def_enum(ot->srna, "pose", DummyRNA_DEFAULT_items, 0, "Pose", "The pose to remove");
- RNA_def_enum_funcs(prop, poselib_stored_pose_itemf);
+ RNA_def_enum_funcs(prop, poselib_stored_pose_itemf);
ot->prop= prop;
}
static int poselib_rename_invoke (bContext *C, wmOperator *op, wmEvent *evt)
{
- Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
+ Object *ob= get_poselib_object(C);
bAction *act= (ob) ? ob->poselib : NULL;
TimeMarker *marker;
@@ -571,23 +642,25 @@ void POSELIB_OT_pose_rename (wmOperatorType *ot)
/* identifiers */
ot->name= "PoseLib Rename Pose";
ot->idname= "POSELIB_OT_pose_rename";
- ot->description= "Rename nth pose from the active Pose Library";
+ ot->description= "Rename specified pose from the active Pose Library";
/* api callbacks */
ot->invoke= poselib_rename_invoke;
ot->exec= poselib_rename_exec;
- ot->poll= ED_operator_posemode;
+ ot->poll= has_poselib_pose_data_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
+ /* NOTE: name not pose is the operator's "main" property, so that it will get activated in the popup for easy renaming */
+ ot->prop= RNA_def_string(ot->srna, "name", "RenamedPose", 64, "New Pose Name", "New name for pose");
prop= RNA_def_enum(ot->srna, "pose", prop_poses_dummy_types, 0, "Pose", "The pose to rename");
RNA_def_enum_funcs(prop, poselib_stored_pose_itemf);
- RNA_def_string(ot->srna, "name", "RenamedPose", 64, "New Pose Name", "New name for pose");
}
/* ************************************************************* */
+/* Pose-Lib Browsing/Previewing Operator */
/* Simple struct for storing settings/data for use during PoseLib preview */
typedef struct tPoseLib_PreviewData {
@@ -646,8 +719,10 @@ enum {
typedef struct tPoseLib_Backup {
struct tPoseLib_Backup *next, *prev;
- bPoseChannel *pchan;
- bPoseChannel olddata;
+ bPoseChannel *pchan; /* pose channel backups are for */
+
+ bPoseChannel olddata; /* copy of pose channel's old data (at start) */
+ IDProperty *oldprops; /* copy (needs freeing) of pose channel's properties (at start) */
} tPoseLib_Backup;
/* Makes a copy of the current pose for restoration purposes - doesn't do constraints currently */
@@ -671,6 +746,9 @@ static void poselib_backup_posecopy (tPoseLib_PreviewData *pld)
plb->pchan= pchan;
memcpy(&plb->olddata, plb->pchan, sizeof(bPoseChannel));
+ if (pchan->prop)
+ plb->oldprops= IDP_CopyProperty(pchan->prop);
+
BLI_addtail(&pld->backups, plb);
/* mark as being affected */
@@ -681,13 +759,39 @@ static void poselib_backup_posecopy (tPoseLib_PreviewData *pld)
}
}
-/* Restores original pose - doesn't do constraints currently */
+/* Restores original pose */
static void poselib_backup_restore (tPoseLib_PreviewData *pld)
{
tPoseLib_Backup *plb;
for (plb= pld->backups.first; plb; plb= plb->next) {
+ /* copy most of data straight back */
memcpy(plb->pchan, &plb->olddata, sizeof(bPoseChannel));
+
+ /* just overwrite values of properties from the stored copies (there should be some) */
+ if (plb->oldprops)
+ IDP_SyncGroupValues(plb->pchan->prop, plb->oldprops);
+
+ // TODO: constraints settings aren't restored yet, even though these could change (though not that likely)
+ }
+}
+
+/* Free list of backups, including any side data it may use */
+static void poselib_backup_free_data (tPoseLib_PreviewData *pld)
+{
+ tPoseLib_Backup *plb, *plbn;
+
+ for (plb= pld->backups.first; plb; plb= plbn) {
+ plbn= plb->next;
+
+ /* free custom data */
+ if (plb->oldprops) {
+ IDP_FreeProperty(plb->oldprops);
+ MEM_freeN(plb->oldprops);
+ }
+
+ /* free backup element now */
+ BLI_freelinkN(&pld->backups, plb);
}
}
@@ -762,6 +866,10 @@ static void poselib_keytag_pose (bContext *C, Scene *scene, tPoseLib_PreviewData
bAction *act= pld->act;
bActionGroup *agrp;
+ KeyingSet *ks = ANIM_get_keyingset_for_autokeying(scene, "Whole Character");
+ ListBase dsources = {NULL, NULL};
+ short autokey = autokeyframe_cfra_can_key(scene, &pld->ob->id);
+
/* start tagging/keying */
for (agrp= act->groups.first; agrp; agrp= agrp->next) {
/* only for selected action channels */
@@ -769,20 +877,9 @@ static void poselib_keytag_pose (bContext *C, Scene *scene, tPoseLib_PreviewData
pchan= get_pose_channel(pose, agrp->name);
if (pchan) {
- if (autokeyframe_cfra_can_key(scene, &pld->ob->id)) {
- ListBase dsources = {NULL, NULL};
-
- /* get KeyingSet to use */
- KeyingSet *ks = ANIM_get_keyingset_for_autokeying(scene, "LocRotScale");
-
- /* now insert the keyframe(s) using the Keying Set
- * 1) add datasource override for the PoseChannel
- * 2) insert keyframes
- * 3) free the extra info
- */
+ if (autokey) {
+ /* add datasource override for the PoseChannel, to be used later */
ANIM_relative_keyingset_add_source(&dsources, &pld->ob->id, &RNA_PoseBone, pchan);
- ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA);
- BLI_freelistN(&dsources);
/* clear any unkeyed tags */
if (pchan->bone)
@@ -797,6 +894,13 @@ static void poselib_keytag_pose (bContext *C, Scene *scene, tPoseLib_PreviewData
}
}
+ /* perform actual auto-keying now */
+ if (autokey) {
+ /* insert keyframes for all relevant bones in one go */
+ ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA);
+ BLI_freelistN(&dsources);
+ }
+
/* send notifiers for this */
WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
}
@@ -1235,7 +1339,7 @@ static int poselib_preview_handle_event (bContext *UNUSED(C), wmOperator *op, wm
static void poselib_preview_init_data (bContext *C, wmOperator *op)
{
tPoseLib_PreviewData *pld;
- Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
+ Object *ob= get_poselib_object(C);
int pose_index = RNA_int_get(op->ptr, "pose_index");
/* set up preview state info */
@@ -1351,15 +1455,12 @@ static void poselib_preview_cleanup (bContext *C, wmOperator *op)
if (IS_AUTOKEY_MODE(scene, NORMAL)) {
//remake_action_ipos(ob->action);
}
- else {
- /* need to trick depgraph, action is not allowed to execute on pose */
+ else
where_is_pose(scene, ob);
- ob->recalc= 0;
- }
}
- /* free memory used for backups */
- BLI_freelistN(&pld->backups);
+ /* free memory used for backups and searching */
+ poselib_backup_free_data(pld);
BLI_freelistN(&pld->searchp);
/* free temp data for operator */
@@ -1371,11 +1472,12 @@ static void poselib_preview_cleanup (bContext *C, wmOperator *op)
static int poselib_preview_exit (bContext *C, wmOperator *op)
{
tPoseLib_PreviewData *pld= op->customdata;
+ int exit_state = pld->state;
/* finish up */
poselib_preview_cleanup(C, op);
- if (ELEM(pld->state, PL_PREVIEW_CANCEL, PL_PREVIEW_ERROR))
+ if (ELEM(exit_state, PL_PREVIEW_CANCEL, PL_PREVIEW_ERROR))
return OPERATOR_CANCELLED;
else
return OPERATOR_FINISHED;
@@ -1469,12 +1571,12 @@ void POSELIB_OT_browse_interactive (wmOperatorType *ot)
ot->idname= "POSELIB_OT_browse_interactive";
ot->description= "Interactively browse poses in 3D-View";
- /* api callbacks */
+ /* callbacks */
ot->invoke= poselib_preview_invoke;
ot->modal= poselib_preview_modal;
ot->cancel= poselib_preview_cancel;
ot->exec= poselib_preview_exec;
- ot->poll= ED_operator_posemode;
+ ot->poll= has_poselib_pose_data_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;
@@ -1487,3 +1589,22 @@ void POSELIB_OT_browse_interactive (wmOperatorType *ot)
/* not used yet */
/* RNA_def_float_factor(ot->srna, "blend_factor", 1.0f, 0.0f, 1.0f, "Blend Factor", "Amount that the pose is applied on top of the existing poses", 0.0f, 1.0f); */
}
+
+void POSELIB_OT_apply_pose (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Apply Pose Library Pose";
+ ot->idname = "POSELIB_OT_apply_pose";
+ ot->description = "Apply specified Pose Library pose to the rig";
+
+ /* callbacks */
+ ot->exec= poselib_preview_exec;
+ ot->poll= has_poselib_pose_data_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ // TODO: make the pose_index into a proper enum instead of a cryptic int...
+ ot->prop= RNA_def_int(ot->srna, "pose_index", -1, -2, INT_MAX, "Pose", "Index of the pose to apply (-2 for no change to pose, -1 for poselib active pose)", 0, INT_MAX);
+}
diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c
index 6115f322d08..c122460e5bb 100644
--- a/source/blender/editors/armature/poseobject.c
+++ b/source/blender/editors/armature/poseobject.c
@@ -71,13 +71,6 @@
#include "armature_intern.h"
-/* ************* XXX *************** */
-static int pupmenu(const char *UNUSED(dummy)) {return 0;}
-static void error(const char *UNUSED(dummy)) {}
-static void BIF_undo_push(const char *UNUSED(dummy)) {}
-/* ************* XXX *************** */
-
-
static int object_pose_context(Object *ob)
{
if( (ob) &&
@@ -110,7 +103,7 @@ Object *ED_object_pose_armature(Object *ob)
/* This function is used to indicate that a bone is selected and needs keyframes inserted */
-void set_pose_keys (Object *ob)
+static void set_pose_keys (Object *ob)
{
bArmature *arm= ob->data;
bPoseChannel *chan;
@@ -167,6 +160,7 @@ void ED_armature_exit_posemode(bContext *C, Base *base)
/* if a selected or active bone is protected, throw error (oonly if warn==1) and return 1 */
/* only_selected==1 : the active bone is allowed to be protected */
+#if 0 /* UNUSED 2.5 */
static short pose_has_protected_selected(Object *ob, short warn)
{
/* check protection */
@@ -189,6 +183,7 @@ static short pose_has_protected_selected(Object *ob, short warn)
}
return 0;
}
+#endif
/* only for real IK, not for auto-IK */
static int pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan, int level)
@@ -295,7 +290,7 @@ void POSE_OT_paths_calculate (wmOperatorType *ot)
/* --------- */
/* for the object with pose/action: clear path curves for selected bones only */
-void ED_pose_clear_paths(Object *ob)
+static void ED_pose_clear_paths(Object *ob)
{
bPoseChannel *pchan;
short skipped = 0;
@@ -662,8 +657,8 @@ void POSE_OT_select_grouped (wmOperatorType *ot)
}
/* ********************************************** */
-
-void pose_copy_menu(Scene *scene)
+#if 0 /* UNUSED 2.5 */
+static void pose_copy_menu(Scene *scene)
{
Object *obedit= scene->obedit; // XXX context
Object *ob= OBACT;
@@ -860,6 +855,7 @@ void pose_copy_menu(Scene *scene)
BIF_undo_push("Copy Pose Attributes");
}
+#endif
/* ******************** copy/paste pose ********************** */
@@ -1567,7 +1563,7 @@ void POSE_OT_autoside_names (wmOperatorType *ot)
/* ********************************************** */
/* context active object, or weightpainted object with armature in posemode */
-void pose_activate_flipped_bone(Scene *scene)
+static void pose_activate_flipped_bone(Scene *scene)
{
Object *ob= OBACT;
diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c
index 38e23a3d456..0e0be99a88a 100644
--- a/source/blender/editors/armature/reeb.c
+++ b/source/blender/editors/armature/reeb.c
@@ -59,9 +59,10 @@
#include "reeb.h"
-
-ReebGraph *GLOBAL_RG = NULL;
-ReebGraph *FILTERED_RG = NULL;
+#if 0 /* UNUSED 2.5 */
+static ReebGraph *GLOBAL_RG = NULL;
+static ReebGraph *FILTERED_RG = NULL;
+#endif
/*
* Skeleton generation algorithm based on:
@@ -113,7 +114,7 @@ void flipArcBuckets(ReebArc *arc);
/***************************************** UTILS **********************************************/
-VertexData *allocVertexData(EditMesh *em)
+static VertexData *allocVertexData(EditMesh *em)
{
VertexData *data;
EditVert *eve;
@@ -133,27 +134,27 @@ VertexData *allocVertexData(EditMesh *em)
return data;
}
-int indexData(EditVert *eve)
+static int indexData(EditVert *eve)
{
return ((VertexData*)eve->tmp.p)->i;
}
-float weightData(EditVert *eve)
+static float weightData(EditVert *eve)
{
return ((VertexData*)eve->tmp.p)->w;
}
-void weightSetData(EditVert *eve, float w)
+static void weightSetData(EditVert *eve, float w)
{
((VertexData*)eve->tmp.p)->w = w;
}
-ReebNode* nodeData(EditVert *eve)
+static ReebNode* nodeData(EditVert *eve)
{
return ((VertexData*)eve->tmp.p)->n;
}
-void nodeSetData(EditVert *eve, ReebNode *n)
+static void nodeSetData(EditVert *eve, ReebNode *n)
{
((VertexData*)eve->tmp.p)->n = n;
}
@@ -230,7 +231,7 @@ void BIF_flagMultiArcs(ReebGraph *rg, int flag)
}
}
-ReebNode * addNode(ReebGraph *rg, EditVert *eve)
+static ReebNode * addNode(ReebGraph *rg, EditVert *eve)
{
float weight;
ReebNode *node = NULL;
@@ -255,7 +256,7 @@ ReebNode * addNode(ReebGraph *rg, EditVert *eve)
return node;
}
-ReebNode * copyNode(ReebGraph *rg, ReebNode *node)
+static ReebNode * copyNode(ReebGraph *rg, ReebNode *node)
{
ReebNode *cp_node = NULL;
@@ -276,7 +277,7 @@ ReebNode * copyNode(ReebGraph *rg, ReebNode *node)
return cp_node;
}
-void relinkNodes(ReebGraph *low_rg, ReebGraph *high_rg)
+static void relinkNodes(ReebGraph *low_rg, ReebGraph *high_rg)
{
ReebNode *low_node, *high_node;
@@ -319,7 +320,7 @@ ReebNode *BIF_lowestLevelNode(ReebNode *node)
return node;
}
-ReebArc * copyArc(ReebGraph *rg, ReebArc *arc)
+static ReebArc * copyArc(ReebGraph *rg, ReebArc *arc)
{
ReebArc *cp_arc;
ReebNode *node;
@@ -365,7 +366,7 @@ ReebArc * copyArc(ReebGraph *rg, ReebArc *arc)
return cp_arc;
}
-ReebGraph * copyReebGraph(ReebGraph *rg, int level)
+static ReebGraph * copyReebGraph(ReebGraph *rg, int level)
{
ReebNode *node;
ReebArc *arc;
@@ -406,7 +407,7 @@ ReebGraph *BIF_graphForMultiNode(ReebGraph *rg, ReebNode *node)
return multi_rg;
}
-ReebEdge * copyEdge(ReebEdge *edge)
+static ReebEdge * copyEdge(ReebEdge *edge)
{
ReebEdge *newEdge = NULL;
@@ -419,7 +420,7 @@ ReebEdge * copyEdge(ReebEdge *edge)
return newEdge;
}
-void printArc(ReebArc *arc)
+static void printArc(ReebArc *arc)
{
ReebEdge *edge;
ReebNode *head = (ReebNode*)arc->head;
@@ -432,7 +433,7 @@ void printArc(ReebArc *arc)
}
}
-void flipArc(ReebArc *arc)
+static void flipArc(ReebArc *arc)
{
ReebNode *tmp;
tmp = arc->head;
@@ -443,7 +444,7 @@ void flipArc(ReebArc *arc)
}
#ifdef DEBUG_REEB_NODE
-void NodeDegreeDecrement(ReebGraph *UNUSED(rg), ReebNode *node)
+static void NodeDegreeDecrement(ReebGraph *UNUSED(rg), ReebNode *node)
{
node->degree--;
@@ -453,7 +454,7 @@ void NodeDegreeDecrement(ReebGraph *UNUSED(rg), ReebNode *node)
// }
}
-void NodeDegreeIncrement(ReebGraph *UNUSED(rg), ReebNode *node)
+static void NodeDegreeIncrement(ReebGraph *UNUSED(rg), ReebNode *node)
{
// if (node->degree == 0)
// {
@@ -524,7 +525,7 @@ void verifyNodeDegree(ReebGraph *rg)
#endif
}
-void verifyBucketsArc(ReebGraph *UNUSED(rg), ReebArc *arc)
+static void verifyBucketsArc(ReebGraph *UNUSED(rg), ReebArc *arc)
{
ReebNode *head = (ReebNode*)arc->head;
ReebNode *tail = (ReebNode*)arc->tail;
@@ -591,7 +592,7 @@ void verifyArcs(ReebGraph *rg)
}
}
-void verifyMultiResolutionLinks(ReebGraph *rg, int level)
+static void verifyMultiResolutionLinks(ReebGraph *rg, int level)
{
#ifdef DEBUG_REEB
ReebGraph *lower_rg = rg->link_up;
@@ -619,21 +620,23 @@ void verifyMultiResolutionLinks(ReebGraph *rg, int level)
}
/***************************************** BUCKET UTILS **********************************************/
-void addVertToBucket(EmbedBucket *b, float co[3])
+static void addVertToBucket(EmbedBucket *b, float co[3])
{
b->nv++;
interp_v3_v3v3(b->p, b->p, co, 1.0f / b->nv);
}
-void removeVertFromBucket(EmbedBucket *b, float co[3])
+#if 0 /* UNUSED 2.5 */
+static void removeVertFromBucket(EmbedBucket *b, float co[3])
{
mul_v3_fl(b->p, (float)b->nv);
sub_v3_v3(b->p, co);
b->nv--;
mul_v3_fl(b->p, 1.0f / (float)b->nv);
}
+#endif
-void mergeBuckets(EmbedBucket *bDst, EmbedBucket *bSrc)
+static void mergeBuckets(EmbedBucket *bDst, EmbedBucket *bSrc)
{
if (bDst->nv > 0 && bSrc->nv > 0)
{
@@ -647,7 +650,7 @@ void mergeBuckets(EmbedBucket *bDst, EmbedBucket *bSrc)
}
}
-void mergeArcBuckets(ReebArc *aDst, ReebArc *aSrc, float start, float end)
+static void mergeArcBuckets(ReebArc *aDst, ReebArc *aSrc, float start, float end)
{
if (aDst->bcount > 0 && aSrc->bcount > 0)
{
@@ -691,12 +694,12 @@ void flipArcBuckets(ReebArc *arc)
}
}
-int countArcBuckets(ReebArc *arc)
+static int countArcBuckets(ReebArc *arc)
{
return (int)(floor(arc->tail->weight) - ceil(arc->head->weight)) + 1;
}
-void allocArcBuckets(ReebArc *arc)
+static void allocArcBuckets(ReebArc *arc)
{
int i;
float start = ceil(arc->head->weight);
@@ -718,7 +721,7 @@ void allocArcBuckets(ReebArc *arc)
}
-void resizeArcBuckets(ReebArc *arc)
+static void resizeArcBuckets(ReebArc *arc)
{
EmbedBucket *oldBuckets = arc->buckets;
int oldBCount = arc->bcount;
@@ -760,7 +763,7 @@ void resizeArcBuckets(ReebArc *arc)
}
}
-void reweightBuckets(ReebArc *arc)
+static void reweightBuckets(ReebArc *arc)
{
int i;
float start = ceil((arc->head)->weight);
@@ -789,7 +792,7 @@ static void interpolateBuckets(ReebArc *arc, float *start_p, float *end_p, int s
}
}
-void fillArcEmptyBuckets(ReebArc *arc)
+static void fillArcEmptyBuckets(ReebArc *arc)
{
float *start_p, *end_p;
int start_index = 0, end_index = 0;
@@ -904,7 +907,7 @@ static void ExtendArcBuckets(ReebArc *arc)
}
/* CALL THIS ONLY AFTER FILTERING, SINCE IT MESSES UP WEIGHT DISTRIBUTION */
-void extendGraphBuckets(ReebGraph *rg)
+static void extendGraphBuckets(ReebGraph *rg)
{
ReebArc *arc;
@@ -916,7 +919,7 @@ void extendGraphBuckets(ReebGraph *rg)
/**************************************** LENGTH CALCULATIONS ****************************************/
-void calculateArcLength(ReebArc *arc)
+static void calculateArcLength(ReebArc *arc)
{
ReebArcIterator arc_iter;
BArcIterator *iter = (BArcIterator*)&arc_iter;
@@ -941,7 +944,7 @@ void calculateArcLength(ReebArc *arc)
arc->length += len_v3v3(arc->tail->p, vec1);
}
-void calculateGraphLength(ReebGraph *rg)
+static void calculateGraphLength(ReebGraph *rg)
{
ReebArc *arc;
@@ -1196,7 +1199,7 @@ void postprocessGraph(ReebGraph *rg, char mode)
/********************************************SORTING****************************************************/
-int compareNodesWeight(void *vnode1, void *vnode2)
+static int compareNodesWeight(void *vnode1, void *vnode2)
{
ReebNode *node1 = (ReebNode*)vnode1;
ReebNode *node2 = (ReebNode*)vnode2;
@@ -1220,7 +1223,7 @@ void sortNodes(ReebGraph *rg)
BLI_sortlist(&rg->nodes, compareNodesWeight);
}
-int compareArcsWeight(void *varc1, void *varc2)
+static int compareArcsWeight(void *varc1, void *varc2)
{
ReebArc *arc1 = (ReebArc*)varc1;
ReebArc *arc2 = (ReebArc*)varc2;
@@ -1247,7 +1250,7 @@ void sortArcs(ReebGraph *rg)
}
/******************************************* JOINING ***************************************************/
-void reweightArc(ReebGraph *rg, ReebArc *arc, ReebNode *start_node, float start_weight)
+static void reweightArc(ReebGraph *rg, ReebArc *arc, ReebNode *start_node, float start_weight)
{
ReebNode *node;
float old_weight;
@@ -1292,7 +1295,7 @@ void reweightArc(ReebGraph *rg, ReebArc *arc, ReebNode *start_node, float start_
}
}
-void reweightSubgraph(ReebGraph *rg, ReebNode *start_node, float start_weight)
+static void reweightSubgraph(ReebGraph *rg, ReebNode *start_node, float start_weight)
{
int i;
@@ -1307,7 +1310,7 @@ void reweightSubgraph(ReebGraph *rg, ReebNode *start_node, float start_weight)
start_node->weight = start_weight;
}
-int joinSubgraphsEnds(ReebGraph *rg, float threshold, int nb_subgraphs)
+static int joinSubgraphsEnds(ReebGraph *rg, float threshold, int nb_subgraphs)
{
int joined = 0;
int subgraph;
@@ -1389,7 +1392,7 @@ int joinSubgraphsEnds(ReebGraph *rg, float threshold, int nb_subgraphs)
}
/* Reweight graph from smallest node, fix fliped arcs */
-void fixSubgraphsOrientation(ReebGraph *rg, int nb_subgraphs)
+static void fixSubgraphsOrientation(ReebGraph *rg, int nb_subgraphs)
{
int subgraph;
@@ -1416,7 +1419,7 @@ void fixSubgraphsOrientation(ReebGraph *rg, int nb_subgraphs)
}
}
-int joinSubgraphs(ReebGraph *rg, float threshold)
+static int joinSubgraphs(ReebGraph *rg, float threshold)
{
int nb_subgraphs;
int joined = 0;
@@ -1457,7 +1460,7 @@ int joinSubgraphs(ReebGraph *rg, float threshold)
/****************************************** FILTERING **************************************************/
-float lengthArc(ReebArc *arc)
+static float lengthArc(ReebArc *arc)
{
#if 0
ReebNode *head = (ReebNode*)arc->head;
@@ -1469,7 +1472,7 @@ float lengthArc(ReebArc *arc)
#endif
}
-int compareArcs(void *varc1, void *varc2)
+static int compareArcs(void *varc1, void *varc2)
{
ReebArc *arc1 = (ReebArc*)varc1;
ReebArc *arc2 = (ReebArc*)varc2;
@@ -1490,7 +1493,7 @@ int compareArcs(void *varc1, void *varc2)
}
}
-void filterArc(ReebGraph *rg, ReebNode *newNode, ReebNode *removedNode, ReebArc * srcArc, int merging)
+static void filterArc(ReebGraph *rg, ReebNode *newNode, ReebNode *removedNode, ReebArc * srcArc, int merging)
{
ReebArc *arc = NULL, *nextArc = NULL;
@@ -1602,7 +1605,7 @@ void filterNullReebGraph(ReebGraph *rg)
}
}
-int filterInternalExternalReebGraph(ReebGraph *rg, float threshold_internal, float threshold_external)
+static int filterInternalExternalReebGraph(ReebGraph *rg, float threshold_internal, float threshold_external)
{
ReebArc *arc = NULL, *nextArc = NULL;
int value = 0;
@@ -1693,7 +1696,7 @@ int filterInternalExternalReebGraph(ReebGraph *rg, float threshold_internal, flo
return value;
}
-int filterCyclesReebGraph(ReebGraph *rg, float UNUSED(distance_threshold))
+static int filterCyclesReebGraph(ReebGraph *rg, float UNUSED(distance_threshold))
{
ReebArc *arc1, *arc2;
ReebArc *next2;
@@ -1900,7 +1903,7 @@ int filterSmartReebGraph(ReebGraph *UNUSED(rg), float UNUSED(threshold))
return value;
}
-void filterGraph(ReebGraph *rg, short options, float threshold_internal, float threshold_external)
+static void filterGraph(ReebGraph *rg, short options, float threshold_internal, float threshold_external)
{
int done = 1;
@@ -1939,7 +1942,7 @@ void filterGraph(ReebGraph *rg, short options, float threshold_internal, float t
removeNormalNodes(rg);
}
-void finalizeGraph(ReebGraph *rg, char passes, char method)
+static void finalizeGraph(ReebGraph *rg, char passes, char method)
{
int i;
@@ -1959,7 +1962,7 @@ void finalizeGraph(ReebGraph *rg, char passes, char method)
/************************************** WEIGHT SPREADING ***********************************************/
-int compareVerts( const void* a, const void* b )
+static int compareVerts( const void* a, const void* b )
{
EditVert *va = *(EditVert**)a;
EditVert *vb = *(EditVert**)b;
@@ -1977,7 +1980,7 @@ int compareVerts( const void* a, const void* b )
return value;
}
-void spreadWeight(EditMesh *em)
+static void spreadWeight(EditMesh *em)
{
EditVert **verts, *eve;
float lastWeight = 0.0f;
@@ -2019,7 +2022,7 @@ void spreadWeight(EditMesh *em)
/******************************************** EXPORT ***************************************************/
-void exportNode(FILE *f, const char *text, ReebNode *node)
+static void exportNode(FILE *f, const char *text, ReebNode *node)
{
fprintf(f, "%s i:%i w:%f d:%i %f %f %f\n", text, node->index, node->weight, node->degree, node->p[0], node->p[1], node->p[2]);
}
@@ -2065,7 +2068,7 @@ void REEB_exportGraph(ReebGraph *rg, int count)
/***************************************** MAIN ALGORITHM **********************************************/
/* edges alone will create zero degree nodes, use this function to remove them */
-void removeZeroNodes(ReebGraph *rg)
+static void removeZeroNodes(ReebGraph *rg)
{
ReebNode *node, *next_node;
@@ -2151,12 +2154,12 @@ void removeNormalNodes(ReebGraph *rg)
}
-int edgeEquals(ReebEdge *e1, ReebEdge *e2)
+static int edgeEquals(ReebEdge *e1, ReebEdge *e2)
{
return (e1->v1 == e2->v1 && e1->v2 == e2->v2);
}
-ReebArc *nextArcMappedToEdge(ReebArc *arc, ReebEdge *e)
+static ReebArc *nextArcMappedToEdge(ReebArc *arc, ReebEdge *e)
{
ReebEdge *nextEdge = NULL;
ReebEdge *edge = NULL;
@@ -2385,7 +2388,7 @@ int mergeArcs(ReebGraph *rg, ReebArc *a0, ReebArc *a1)
return result;
}
-void glueByMergeSort(ReebGraph *rg, ReebArc *a0, ReebArc *a1, ReebEdge *e0, ReebEdge *e1)
+static void glueByMergeSort(ReebGraph *rg, ReebArc *a0, ReebArc *a1, ReebEdge *e0, ReebEdge *e1)
{
int total = 0;
while (total == 0 && a0 != a1 && a0 != NULL && a1 != NULL)
@@ -2406,7 +2409,7 @@ void glueByMergeSort(ReebGraph *rg, ReebArc *a0, ReebArc *a1, ReebEdge *e0, Reeb
}
}
-void mergePaths(ReebGraph *rg, ReebEdge *e0, ReebEdge *e1, ReebEdge *e2)
+static void mergePaths(ReebGraph *rg, ReebEdge *e0, ReebEdge *e1, ReebEdge *e2)
{
ReebArc *a0, *a1, *a2;
a0 = e0->arc;
@@ -2417,7 +2420,7 @@ void mergePaths(ReebGraph *rg, ReebEdge *e0, ReebEdge *e1, ReebEdge *e2)
glueByMergeSort(rg, a0, a2, e0, e2);
}
-ReebEdge * createArc(ReebGraph *rg, ReebNode *node1, ReebNode *node2)
+static ReebEdge * createArc(ReebGraph *rg, ReebNode *node1, ReebNode *node2)
{
ReebEdge *edge;
@@ -2499,7 +2502,7 @@ ReebEdge * createArc(ReebGraph *rg, ReebNode *node1, ReebNode *node2)
return edge;
}
-void addTriangleToGraph(ReebGraph *rg, ReebNode * n1, ReebNode * n2, ReebNode * n3, EditFace *efa)
+static void addTriangleToGraph(ReebGraph *rg, ReebNode * n1, ReebNode * n2, ReebNode * n3, EditFace *efa)
{
ReebEdge *re1, *re2, *re3;
ReebEdge *e1, *e2, *e3;
@@ -2692,7 +2695,7 @@ static float cotan_weight(float *v1, float *v2, float *v3)
return dot_v3v3(a, b)/clen;
}
-void addTriangle(EditVert *v1, EditVert *v2, EditVert *v3, int e1, int e2, int e3)
+static void addTriangle(EditVert *v1, EditVert *v2, EditVert *v3, int e1, int e2, int e3)
{
/* Angle opposite e1 */
float t1= cotan_weight(v1->co, v2->co, v3->co) / e2;
@@ -2888,7 +2891,7 @@ EditEdge * NextEdgeForVert(EdgeIndex *indexed_edges, int index)
return indexed_edges->edges[offset];
}
-void shortestPathsFromVert(EditMesh *em, EditVert *starting_vert, EdgeIndex *indexed_edges)
+static void shortestPathsFromVert(EditMesh *em, EditVert *starting_vert, EdgeIndex *indexed_edges)
{
Heap *edge_heap;
EditVert *current_eve = NULL;
@@ -2952,13 +2955,13 @@ void shortestPathsFromVert(EditMesh *em, EditVert *starting_vert, EdgeIndex *ind
BLI_heap_free(edge_heap, NULL);
}
-void freeEdgeIndex(EdgeIndex *indexed_edges)
+static void freeEdgeIndex(EdgeIndex *indexed_edges)
{
MEM_freeN(indexed_edges->offset);
MEM_freeN(indexed_edges->edges);
}
-void buildIndexedEdges(EditMesh *em, EdgeIndex *indexed_edges)
+static void buildIndexedEdges(EditMesh *em, EdgeIndex *indexed_edges)
{
EditVert *eve;
EditEdge *eed;
diff --git a/source/blender/editors/armature/reeb.h b/source/blender/editors/armature/reeb.h
index 39f83407d74..cee42313db6 100644
--- a/source/blender/editors/armature/reeb.h
+++ b/source/blender/editors/armature/reeb.h
@@ -172,6 +172,8 @@ void sortArcs(ReebGraph *rg);
/*------------ Sanity check ------------*/
void verifyBuckets(ReebGraph *rg);
void verifyFaces(ReebGraph *rg);
+void verifyArcs(ReebGraph *rg);
+void verifyNodeDegree(ReebGraph *rg);
/*********************** PUBLIC *********************************/
diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c
index 0ee852a6059..bb4b81f3078 100644
--- a/source/blender/editors/curve/curve_ops.c
+++ b/source/blender/editors/curve/curve_ops.c
@@ -41,11 +41,11 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "ED_curve.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "ED_transform.h"
-
#include "curve_intern.h"
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index 0f6b88554e1..857a461e26e 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -75,6 +75,8 @@
#include "ED_view3d.h"
#include "ED_curve.h"
+#include "curve_intern.h"
+
#include "UI_interface.h"
#include "RNA_access.h"
@@ -86,6 +88,7 @@ typedef struct {
void *lastsel;
GHash *undoIndex;
ListBase fcurves, drivers;
+ int actnu;
} UndoCurve;
/* Definitions needed for shape keys */
@@ -102,7 +105,7 @@ static void select_adjacent_cp(ListBase *editnurb, short next, short cont, short
/* still need to eradicate a few :( */
#define callocstructN(x,y,name) (x*)MEM_callocN((y)* sizeof(x),name)
-float nurbcircle[8][2]= {
+static float nurbcircle[8][2]= {
{0.0, -1.0}, {-1.0, -1.0}, {-1.0, 0.0}, {-1.0, 1.0},
{0.0, 1.0}, { 1.0, 1.0}, { 1.0, 0.0}, { 1.0, -1.0}
};
@@ -117,7 +120,7 @@ ListBase *curve_get_editcurve(Object *ob)
}
/* this replaces the active flag used in uv/face mode */
-void set_actNurb(Object *obedit, Nurb *nu)
+static void set_actNurb(Object *obedit, Nurb *nu)
{
Curve *cu= obedit->data;
@@ -129,7 +132,7 @@ void set_actNurb(Object *obedit, Nurb *nu)
}
}
-Nurb *get_actNurb(Object *obedit)
+static Nurb *get_actNurb(Object *obedit)
{
Curve *cu= obedit->data;
ListBase *nurbs= ED_curve_editnurbs(cu);
@@ -229,7 +232,7 @@ int isNurbsel(Nurb *nu)
return 0;
}
-int isNurbsel_count(Curve *cu, Nurb *nu)
+static int isNurbsel_count(Curve *cu, Nurb *nu)
{
BezTriple *bezt;
BPoint *bp;
@@ -3998,6 +4001,9 @@ static int make_segment_exec(bContext *C, wmOperator *op)
/* find both nurbs and points, nu1 will be put behind nu2 */
for(nu= nubase->first; nu; nu= nu->next) {
+ if(nu->pntsu == 1)
+ nu->flagu&= ~CU_NURB_CYCLIC;
+
if((nu->flagu & CU_NURB_CYCLIC)==0) { /* not cyclic */
if(nu->type == CU_BEZIER) {
if(nu1==0) {
@@ -4107,17 +4113,21 @@ static int make_segment_exec(bContext *C, wmOperator *op)
}
freeNurb(nu2); nu2= NULL;
}
+
+ set_actNurb(obedit, nu1); /* for selected */
+ ok= 1;
}
-
- set_actNurb(obedit, NULL); /* for selected */
- ok= 1;
- } else if(nu1 && !nu2 && nu1->type == CU_BEZIER) {
- if(!(nu1->flagu & CU_NURB_CYCLIC)) {
- if(BEZSELECTED_HIDDENHANDLES(cu, nu1->bezt) &&
+ } else if(nu1 && !nu2) {
+ if(!(nu1->flagu & CU_NURB_CYCLIC) && nu1->pntsu>1) {
+ if (nu1->type == CU_BEZIER && BEZSELECTED_HIDDENHANDLES(cu, nu1->bezt) &&
BEZSELECTED_HIDDENHANDLES(cu, nu1->bezt+(nu1->pntsu-1))) {
nu1->flagu|= CU_NURB_CYCLIC;
calchandlesNurb(nu1);
ok= 1;
+ } else if (nu1->type == CU_NURBS && nu1->bp->f1&SELECT && (nu1->bp+(nu1->pntsu-1))->f1&SELECT) {
+ nu1->flagu|= CU_NURB_CYCLIC;
+ nurbs_knot_calc_u(nu1);
+ ok= 1;
}
}
}
@@ -4404,29 +4414,26 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
if ((nu == NULL) || (nu->type==CU_BEZIER && bezt==NULL) || (nu->type!=CU_BEZIER && bp==NULL)) {
if(mode!='e') {
- if(cu->actnu >= 0) nu= BLI_findlink(&editnurb->nurbs, cu->actnu);
- else {
- /* no selected sement -- create new one which is BEZIER tpye
- type couldn't be determined from Curve bt could be changed
- in the future, so shouldn't make much headache */
-
- nu= MEM_callocN(sizeof(Nurb), "addvert_Nurb nu");
- nu->type= CU_BEZIER;
- nu->resolu= cu->resolu;
- nu->flag |= CU_SMOOTH;
-
- BLI_addtail(&editnurb->nurbs, nu);
- }
+ if(cu->actnu >= 0)
+ nu= BLI_findlink(&editnurb->nurbs, cu->actnu);
- if(nu->type==CU_BEZIER) {
+ if(!nu || nu->type==CU_BEZIER) {
newbezt= (BezTriple*)MEM_callocN(sizeof(BezTriple), "addvert_Nurb");
newbezt->radius= 1;
newbezt->alfa= 0;
BEZ_SEL(newbezt);
newbezt->h2= newbezt->h1= HD_AUTO;
- newnu= (Nurb*)MEM_mallocN(sizeof(Nurb), "addvert_Nurb newnu");
- memcpy(newnu, nu, sizeof(Nurb));
+ newnu= (Nurb*)MEM_callocN(sizeof(Nurb), "addvert_Nurb newnu");
+ if(!nu) {
+ /* no selected sement -- create new one which is BEZIER tpye
+ type couldn't be determined from Curve bt could be changed
+ in the future, so shouldn't make much headache */
+ newnu->type= CU_BEZIER;
+ newnu->resolu= cu->resolu;
+ newnu->flag |= CU_SMOOTH;
+ } else memcpy(newnu, nu, sizeof(Nurb));
+
BLI_addtail(&editnurb->nurbs, newnu);
set_actNurb(obedit, newnu);
newnu->bezt= newbezt;
@@ -4441,6 +4448,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
add_v3_v3v3(newbezt->vec[2], newbezt->vec[1],temp);
ok= 1;
+ nu= newnu;
} else if(nu->pntsv == 1) {
newbp= (BPoint*)MEM_callocN(sizeof(BPoint), "addvert_Nurb5");
newbp->radius= 1;
@@ -4465,6 +4473,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
nurbs_knot_calc_u(newnu);
ok= 1;
+ nu= newnu;
}
}
@@ -4551,20 +4560,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
}
else if(!ok && nu->pntsv==1) {
/* which b-point? */
- if(bp== nu->bp) { /* first */
- bp->f1= 0;
- newbp =
- (BPoint*)MEM_callocN((nu->pntsu+1) * sizeof(BPoint), "addvert_Nurb3");
- ED_curve_bpcpy(editnurb, newbp+1, bp, nu->pntsu);
- *newbp= *bp;
- newbp->f1|= SELECT;
- cu->lastsel= newbp;
- MEM_freeN(nu->bp);
- nu->bp= newbp;
- bp= newbp + 1;
- ok= 1;
- }
- else if(bp== (nu->bp+nu->pntsu-1)) { /* last */
+ if(bp== (nu->bp+nu->pntsu-1)) { /* last */
bp->f1= 0;
newbp =
(BPoint*)MEM_callocN((nu->pntsu+1) * sizeof(BPoint), "addvert_Nurb4");
@@ -4578,6 +4574,19 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
bp= newbp - 1;
ok= 1;
}
+ else if(bp== nu->bp) { /* first */
+ bp->f1= 0;
+ newbp =
+ (BPoint*)MEM_callocN((nu->pntsu+1) * sizeof(BPoint), "addvert_Nurb3");
+ ED_curve_bpcpy(editnurb, newbp+1, bp, nu->pntsu);
+ *newbp= *bp;
+ newbp->f1|= SELECT;
+ cu->lastsel= newbp;
+ MEM_freeN(nu->bp);
+ nu->bp= newbp;
+ bp= newbp + 1;
+ ok= 1;
+ }
else if(mode!='e') {
bp->f1= 0;
newbp= (BPoint*)MEM_callocN(sizeof(BPoint), "addvert_Nurb5");
@@ -4831,18 +4840,20 @@ static int toggle_cyclic_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(eve
uiLayout *layout;
Nurb *nu;
- for(nu= editnurb->first; nu; nu= nu->next) {
- if(nu->pntsu>1 || nu->pntsv>1) {
- if(nu->type==CU_NURBS) {
- pup= uiPupMenuBegin(C, "Direction", ICON_NULL);
- layout= uiPupMenuLayout(pup);
- uiItemsEnumO(layout, op->type->idname, "direction");
- uiPupMenuEnd(C, pup);
- return OPERATOR_CANCELLED;
+ if(obedit->type == OB_SURF) {
+ for(nu= editnurb->first; nu; nu= nu->next) {
+ if(nu->pntsu>1 || nu->pntsv>1) {
+ if(nu->type==CU_NURBS) {
+ pup= uiPupMenuBegin(C, "Direction", ICON_NULL);
+ layout= uiPupMenuLayout(pup);
+ uiItemsEnumO(layout, op->type->idname, "direction");
+ uiPupMenuEnd(C, pup);
+ return OPERATOR_CANCELLED;
+ }
}
}
}
-
+
return toggle_cyclic_exec(C, op);
}
@@ -6961,6 +6972,7 @@ static void undoCurve_to_editCurve(void *ucu, void *obe)
}
cu->lastsel= lastsel;
+ cu->actnu= undoCurve->actnu;
ED_curve_updateAnimPaths(obedit);
}
@@ -7006,6 +7018,7 @@ static void *editCurve_to_undoCurve(void *obe)
}
undoCurve->lastsel= lastsel;
+ undoCurve->actnu= cu->actnu;
return undoCurve;
}
diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c
index 44fec631441..4b2b0043f65 100644
--- a/source/blender/editors/curve/editfont.c
+++ b/source/blender/editors/curve/editfont.c
@@ -62,6 +62,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "ED_curve.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "ED_util.h"
@@ -206,7 +207,7 @@ static char findaccent(char char1, unsigned int code)
}
-void update_string(Curve *cu)
+static void update_string(Curve *cu)
{
EditFont *ef= cu->editfont;
int len;
diff --git a/source/blender/editors/gpencil/gpencil_buttons.c b/source/blender/editors/gpencil/gpencil_buttons.c
index 7590b2558f0..6af5e4cd92b 100644
--- a/source/blender/editors/gpencil/gpencil_buttons.c
+++ b/source/blender/editors/gpencil/gpencil_buttons.c
@@ -66,7 +66,7 @@
/* These are just 'dummy wrappers' around gpencil api calls */
/* make layer active one after being clicked on */
-void gp_ui_activelayer_cb (bContext *C, void *gpd, void *gpl)
+static void gp_ui_activelayer_cb (bContext *C, void *gpd, void *gpl)
{
gpencil_layer_setactive(gpd, gpl);
@@ -74,7 +74,7 @@ void gp_ui_activelayer_cb (bContext *C, void *gpd, void *gpl)
}
/* delete 'active' layer */
-void gp_ui_dellayer_cb (bContext *C, void *gpd, void *gpl)
+static void gp_ui_dellayer_cb (bContext *C, void *gpd, void *gpl)
{
/* make sure the layer we want to remove is the active one */
gpencil_layer_setactive(gpd, gpl);
diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index b7f13ebe0b7..498108e8d0e 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -64,6 +64,7 @@
#include "UI_view2d.h"
+#include "ED_gpencil.h"
#include "ED_view3d.h"
#include "gpencil_intern.h"
diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c
index b6b2675e6c8..a84bf5774f6 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -38,6 +38,8 @@
#include "RNA_access.h"
+#include "ED_gpencil.h"
+
#include "gpencil_intern.h"
/* ****************************************** */
diff --git a/source/blender/editors/include/ED_curve.h b/source/blender/editors/include/ED_curve.h
index ec3c5e69830..3d8c5dd7cae 100644
--- a/source/blender/editors/include/ED_curve.h
+++ b/source/blender/editors/include/ED_curve.h
@@ -85,5 +85,8 @@ void ED_curve_bpcpy(struct EditNurb *editnurb, struct BPoint *dst, struct BPoint
int ED_curve_updateAnimPaths(struct Object *obedit);
+/* debug only */
+void printknots(struct Object *obedit);
+
#endif /* ED_CURVE_H */
diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h
index 92c090beb8a..08a015a5271 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -82,7 +82,7 @@ void draw_gpencil_view3d_ext(struct Scene *scene, struct View3D *v3d, struct ARe
void gpencil_panel_standard(const struct bContext *C, struct Panel *pa);
/* ----------- Grease-Pencil AnimEdit API ------------------ */
-
+short gplayer_frames_looper(struct bGPDlayer *gpl, struct Scene *scene, short (*gpf_cb)(struct bGPDframe *, struct Scene *));
void gplayer_make_cfra_list(struct bGPDlayer *gpl, ListBase *elems, short onlysel);
void deselect_gpencil_layers(void *data, short select_mode);
diff --git a/source/blender/editors/include/ED_markers.h b/source/blender/editors/include/ED_markers.h
index 22c171128bd..1f71c377ec0 100644
--- a/source/blender/editors/include/ED_markers.h
+++ b/source/blender/editors/include/ED_markers.h
@@ -64,6 +64,8 @@ void ED_operatortypes_marker(void);
/* called in screen_ops.c:ED_keymap_screen() */
void ED_marker_keymap(struct wmKeyConfig *keyconf);
+/* debugging only */
+void debug_markers_print_list(struct ListBase *markers);
#endif /* ED_MARKERS_H */
diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h
index 057e5d3bf88..3d735495fec 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -188,6 +188,11 @@ void paintface_deselect_all_visible(struct Object *ob, int action, short flush_f
void paintface_select_linked(struct bContext *C, struct Object *ob, short mval[2], int mode);
int paintface_minmax(struct Object *ob, float *min, float *max);
+/* TODO, 2.5x */
+void paintface_unhide(struct Scene *scene);
+void paintface_hide(struct Scene *scene);
+void paintface_select_swap(struct Scene *scene);
+
/* object_vgroup.c */
#define WEIGHT_REPLACE 1
diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h
index 353f89323e6..a2a0cefc55b 100644
--- a/source/blender/editors/include/ED_uvedit.h
+++ b/source/blender/editors/include/ED_uvedit.h
@@ -67,5 +67,7 @@ void ED_uvedit_live_unwrap_begin(struct Scene *scene, struct Object *obedit);
void ED_uvedit_live_unwrap_re_solve(void);
void ED_uvedit_live_unwrap_end(short cancel);
+void draw_uvedit_main(struct SpaceImage *sima, struct ARegion *ar, struct Scene *scene, struct Object *obedit);
+
#endif /* ED_UVEDIT_H */
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 76c9e765188..3e607b37067 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -548,6 +548,8 @@ void uiButSetCompleteFunc(uiBut *but, uiButCompleteFunc func, void *arg);
void uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const struct bContext *C, void *, void *, void *, struct rcti *rect), void *arg1, void *arg2);
+void uiButSetFocusOnEnter (struct wmWindow *win, uiBut *but);
+
/* Autocomplete
*
* Tab complete helper functions, for use in uiButCompleteFunc callbacks.
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index cb7c8c34f1c..5843412940a 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -497,14 +497,15 @@ static int ui_but_equals_old(uiBut *but, uiBut *oldbut)
if(oldbut->func_arg1 != oldbut && but->func_arg1 != oldbut->func_arg1) return 0;
if(oldbut->func_arg2 != oldbut && but->func_arg2 != oldbut->func_arg2) return 0;
if(!but->funcN && ((but->poin != oldbut->poin && (uiBut*)oldbut->poin != oldbut) || but->pointype != oldbut->pointype)) return 0;
+ if(but->optype != oldbut->optype) return 0;
return 1;
}
-static int ui_but_update_from_old_block(const bContext *C, uiBlock *block, uiBut *but)
+static int ui_but_update_from_old_block(const bContext *C, uiBlock *block, uiBut **butpp)
{
uiBlock *oldblock;
- uiBut *oldbut;
+ uiBut *oldbut, *but= *butpp;
int found= 0;
oldblock= block->oldblock;
@@ -515,35 +516,51 @@ static int ui_but_update_from_old_block(const bContext *C, uiBlock *block, uiBut
if(ui_but_equals_old(oldbut, but)) {
if(oldbut->active) {
#if 0
- but->flag= oldbut->flag;
+// but->flag= oldbut->flag;
#else
/* exception! redalert flag can't be update from old button.
* perhaps it should only copy spesific flags rather then all. */
- but->flag= (oldbut->flag & ~UI_BUT_REDALERT) | (but->flag & UI_BUT_REDALERT);
+// but->flag= (oldbut->flag & ~UI_BUT_REDALERT) | (but->flag & UI_BUT_REDALERT);
#endif
- but->active= oldbut->active;
- but->pos= oldbut->pos;
- but->ofs= oldbut->ofs;
- but->editstr= oldbut->editstr;
- but->editval= oldbut->editval;
- but->editvec= oldbut->editvec;
- but->editcoba= oldbut->editcoba;
- but->editcumap= oldbut->editcumap;
- but->selsta= oldbut->selsta;
- but->selend= oldbut->selend;
- but->softmin= oldbut->softmin;
- but->softmax= oldbut->softmax;
- but->linkto[0]= oldbut->linkto[0];
- but->linkto[1]= oldbut->linkto[1];
+// but->active= oldbut->active;
+// but->pos= oldbut->pos;
+// but->ofs= oldbut->ofs;
+// but->editstr= oldbut->editstr;
+// but->editval= oldbut->editval;
+// but->editvec= oldbut->editvec;
+// but->editcoba= oldbut->editcoba;
+// but->editcumap= oldbut->editcumap;
+// but->selsta= oldbut->selsta;
+// but->selend= oldbut->selend;
+// but->softmin= oldbut->softmin;
+// but->softmax= oldbut->softmax;
+// but->linkto[0]= oldbut->linkto[0];
+// but->linkto[1]= oldbut->linkto[1];
found= 1;
-
- oldbut->active= NULL;
+// oldbut->active= NULL;
+
+ /* move button over from oldblock to new block */
+ BLI_remlink(&oldblock->buttons, oldbut);
+ BLI_insertlink(&block->buttons, but, oldbut);
+ oldbut->block= block;
+ *butpp= oldbut;
+
+ /* still stuff needs to be copied */
+ oldbut->x1= but->x1; oldbut->y1= but->y1;
+ oldbut->x2= but->x2; oldbut->y2= but->y2;
+ oldbut->context= but->context; /* set by Layout */
+
+ BLI_remlink(&block->buttons, but);
+ ui_free_but(C, but);
+
+ /* note: if layout hasn't been applied yet, it uses old button pointers... */
+ }
+ else {
+ /* ensures one button can get activated, and in case the buttons
+ * draw are the same this gives O(1) lookup for each button */
+ BLI_remlink(&oldblock->buttons, oldbut);
+ ui_free_but(C, oldbut);
}
-
- /* ensures one button can get activated, and in case the buttons
- * draw are the same this gives O(1) lookup for each button */
- BLI_remlink(&oldblock->buttons, oldbut);
- ui_free_but(C, oldbut);
break;
}
@@ -695,7 +712,7 @@ void uiEndBlock(const bContext *C, uiBlock *block)
* blocking, while still alowing buttons to be remade each redraw as it
* is expected by blender code */
for(but=block->buttons.first; but; but=but->next) {
- if(ui_but_update_from_old_block(C, block, but))
+ if(ui_but_update_from_old_block(C, block, &but))
ui_check_but(but);
/* temp? Proper check for greying out */
@@ -912,7 +929,7 @@ static void ui_is_but_sel(uiBut *but)
}
/* XXX 2.50 no links supported yet */
-
+#if 0
static int uibut_contains_pt(uiBut *UNUSED(but), short *UNUSED(mval))
{
return 0;
@@ -943,7 +960,7 @@ static uiBut *ui_get_valid_link_button(uiBlock *block, uiBut *but, short *mval)
return NULL;
}
-
+#endif
static uiBut *ui_find_inlink(uiBlock *block, void *poin)
{
@@ -1562,7 +1579,7 @@ static void ui_get_but_string_unit(uiBut *but, char *str, int len_max, double va
if(scene->unit.scale_length<0.0001) scene->unit.scale_length= 1.0; // XXX do_versions
/* Sanity checks */
- if(precision>4) precision= 4;
+ if(precision>7) precision= 7;
else if(precision==0) precision= 2;
bUnit_AsString(str, len_max, ui_get_but_scale_unit(but, value), precision, scene->unit.system, unit_type>>16, do_split, pad);
@@ -1650,6 +1667,10 @@ void ui_get_but_string(uiBut *but, char *str, int maxlen)
if(but->a2==1) BLI_snprintf(str, maxlen, "%.1f", value);
else if(but->a2==2) BLI_snprintf(str, maxlen, "%.2f", value);
else if(but->a2==3) BLI_snprintf(str, maxlen, "%.3f", value);
+ else if(but->a2==4) BLI_snprintf(str, maxlen, "%.4f", value);
+ else if(but->a2==5) BLI_snprintf(str, maxlen, "%.5f", value);
+ else if(but->a2==6) BLI_snprintf(str, maxlen, "%.6f", value);
+ else if(but->a2==7) BLI_snprintf(str, maxlen, "%.7f", value);
else BLI_snprintf(str, maxlen, "%.4f", value);
}
else
@@ -1757,11 +1778,13 @@ int ui_set_but_string(bContext *C, uiBut *but, const char *str)
return 0;
}
-void ui_set_but_default(bContext *C, uiBut *but)
+void ui_set_but_default(bContext *C, uiBut *but, short all)
{
/* if there is a valid property that is editable... */
if (but->rnapoin.data && but->rnaprop && RNA_property_editable(&but->rnapoin, but->rnaprop)) {
- if(RNA_property_reset(&but->rnapoin, but->rnaprop, -1)) {
+ int index = (all)? -1 : but->rnaindex;
+
+ if(RNA_property_reset(&but->rnapoin, but->rnaprop, index)) {
/* perform updates required for this property */
RNA_property_update(C, &but->rnapoin, but->rnaprop);
}
@@ -2113,6 +2136,10 @@ void ui_check_but(uiBut *but)
if(but->a2==1) sprintf(but->drawstr, "%s%.1f", but->str, value);
else if(but->a2==2) sprintf(but->drawstr, "%s%.2f", but->str, value);
else if(but->a2==3) sprintf(but->drawstr, "%s%.3f", but->str, value);
+ else if(but->a2==4) sprintf(but->drawstr, "%s%.4f", but->str, value);
+ else if(but->a2==5) sprintf(but->drawstr, "%s%.5f", but->str, value);
+ else if(but->a2==6) sprintf(but->drawstr, "%s%.6f", but->str, value);
+ else if(but->a2==7) sprintf(but->drawstr, "%s%.7f", but->str, value);
else sprintf(but->drawstr, "%s%.4f", but->str, value);
}
else {
@@ -2139,6 +2166,10 @@ void ui_check_but(uiBut *but)
if(but->a2==1) sprintf(but->drawstr, "%s%.1f", but->str, value);
else if(but->a2==2) sprintf(but->drawstr, "%s%.2f", but->str, value);
else if(but->a2==3) sprintf(but->drawstr, "%s%.3f", but->str, value);
+ else if(but->a2==4) sprintf(but->drawstr, "%s%.4f", but->str, value);
+ else if(but->a2==5) sprintf(but->drawstr, "%s%.5f", but->str, value);
+ else if(but->a2==6) sprintf(but->drawstr, "%s%.6f", but->str, value);
+ else if(but->a2==7) sprintf(but->drawstr, "%s%.7f", but->str, value);
else sprintf(but->drawstr, "%s%.4f", but->str, value);
}
else {
@@ -2550,8 +2581,11 @@ static uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, const char *s
else
BLI_dynstr_appendf(dynstr, "|%s %%x%d", item[i].name, item[i].value);
- if(value == item[i].value)
+ if(value == item[i].value) {
icon= item[i].icon;
+ if(!tip)
+ tip= item[i].description;
+ }
}
str= BLI_dynstr_get_cstring(dynstr);
BLI_dynstr_free(dynstr);
@@ -3492,6 +3526,22 @@ void uiButSetSearchFunc(uiBut *but, uiButSearchFunc sfunc, void *arg, uiButHandl
}
}
+/* push a new event onto event queue to activate the given button
+ * (usually a text-field) upon entering a popup
+ */
+void uiButSetFocusOnEnter(wmWindow *win, uiBut *but)
+{
+ wmEvent event;
+
+ event= *(win->eventstate);
+ event.type= EVT_BUT_OPEN;
+ event.val= KM_PRESS;
+ event.customdata= but;
+ event.customdatafree= FALSE;
+
+ wm_event_add(win, &event);
+}
+
/* Program Init/Exit */
void UI_init(void)
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index f16d633de6f..86795e27bb4 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -381,6 +381,7 @@ void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad)
}
/* plain fake antialiased unfilled round rectangle */
+#if 0 /* UNUSED 2.5 */
static void uiRoundRectFakeAA(float minx, float miny, float maxx, float maxy, float rad, float asp)
{
float color[4], alpha;
@@ -408,6 +409,7 @@ static void uiRoundRectFakeAA(float minx, float miny, float maxx, float maxy, fl
color[3] = alpha;
glColor4fv(color);
}
+#endif
/* (old, used in outliner) plain antialiased filled box */
void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad)
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 92b4e622d7e..67e4548b0b7 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -4357,8 +4357,9 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event)
/* reset to default */
/* XXX hardcoded keymap check.... */
else if(ELEM(event->type, ZEROKEY, PAD0) && event->val == KM_PRESS) {
+ /* ctrl-0 = for arrays, only the active one gets done (vs whole array for just 0) */
if (!(ELEM3(but->type, HSVCIRCLE, HSVCUBE, HISTOGRAM)))
- ui_set_but_default(C, but);
+ ui_set_but_default(C, but, !event->ctrl);
}
/* handle menu */
else if(event->type == RIGHTMOUSE && event->val == KM_PRESS) {
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index 5ea74cbf40a..63841963c6d 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -972,7 +972,7 @@ static void icon_draw_size(float x, float y, int icon_id, float aspect, float al
if(di->type == ICON_TYPE_VECTOR) {
/* vector icons use the uiBlock transformation, they are not drawn
with untransformed coordinates like the other icons */
- di->data.vector.func(x, y, ICON_DEFAULT_HEIGHT, ICON_DEFAULT_HEIGHT, 1.0f);
+ di->data.vector.func((int)x, (int)y, ICON_DEFAULT_HEIGHT, ICON_DEFAULT_HEIGHT, 1.0f);
}
else if(di->type == ICON_TYPE_TEXTURE) {
icon_draw_texture(x, y, w, h, di->data.texture.x, di->data.texture.y,
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 154a263cd7b..52214bf3fa7 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -364,7 +364,7 @@ extern void ui_convert_to_unit_alt_name(uiBut *but, char *str, int maxlen);
extern int ui_set_but_string(struct bContext *C, uiBut *but, const char *str);
extern int ui_get_but_string_max_length(uiBut *but);
-extern void ui_set_but_default(struct bContext *C, uiBut *but);
+extern void ui_set_but_default(struct bContext *C, uiBut *but, short all);
extern void ui_set_but_soft_range(uiBut *but, double value);
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 330c81fbcb2..4398e7a2287 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -2733,11 +2733,20 @@ void uiLayoutOperatorButs(const bContext *C, uiLayout *layout, wmOperator *op,in
}
}
- /* no undo for buttons for operator redo panels */
+ /* set various special settings for buttons */
{
uiBut *but;
- for(but= uiLayoutGetBlock(layout)->buttons.first; but; but= but->next)
+ for(but= uiLayoutGetBlock(layout)->buttons.first; but; but= but->next) {
+ /* no undo for buttons for operator redo panels */
uiButClearFlag(but, UI_BUT_UNDO);
+
+ /* if button is operator's default property, and a text-field, enable focus for it
+ * - this is used for allowing operators with popups to rename stuff with fewer clicks
+ */
+ if ((but->rnaprop == op->type->prop) && (but->type == TEX)) {
+ uiButSetFocusOnEnter(CTX_wm_window(C), but);
+ }
+ }
}
}
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index 93b5305fd12..89d648e64be 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -309,6 +309,7 @@ static void ui_offset_panel_block(uiBlock *block)
/**************************** drawing *******************************/
/* extern used by previewrender */
+#if 0 /*UNUSED 2.5*/
static void uiPanelPush(uiBlock *block)
{
glPushMatrix();
@@ -321,6 +322,7 @@ static void uiPanelPop(uiBlock *UNUSED(block))
{
glPopMatrix();
}
+#endif
/* triangle 'icon' for panel header */
/* NOTE - this seems to be only used for hiding nodes now */
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index b27f041ef30..e0a3a7b15af 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -144,7 +144,6 @@ static uiBlock *id_search_menu(bContext *C, ARegion *ar, void *arg_litem)
static char search[256];
static TemplateID template;
PointerRNA idptr;
- wmEvent event;
wmWindow *win= CTX_wm_window(C);
uiBlock *block;
uiBut *but;
@@ -185,12 +184,8 @@ static uiBlock *id_search_menu(bContext *C, ARegion *ar, void *arg_litem)
uiBlockSetDirection(block, UI_DOWN);
uiEndBlock(C, block);
- event= *(win->eventstate); /* XXX huh huh? make api call */
- event.type= EVT_BUT_OPEN;
- event.val= KM_PRESS;
- event.customdata= but;
- event.customdatafree= FALSE;
- wm_event_add(win, &event);
+ /* give search-field focus */
+ uiButSetFocusOnEnter(win, but);
return block;
}
diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c
index 92e0d0011f4..5906283050f 100644
--- a/source/blender/editors/interface/view2d_ops.c
+++ b/source/blender/editors/interface/view2d_ops.c
@@ -1209,7 +1209,7 @@ enum {
SCROLLHANDLE_MAX,
SCROLLHANDLE_MIN_OUTSIDE,
SCROLLHANDLE_MAX_OUTSIDE
-} eV2DScrollerHandle_Zone;
+} /*eV2DScrollerHandle_Zone*/;
/* ------------------------ */
diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c
index 2a391f7bbaf..fa202bde54f 100644
--- a/source/blender/editors/mesh/editface.c
+++ b/source/blender/editors/mesh/editface.c
@@ -93,7 +93,7 @@ void paintface_flush_flags(Object *ob)
}
/* returns 0 if not found, otherwise 1 */
-int facesel_face_pick(struct bContext *C, Mesh *me, short *mval, unsigned int *index, short rect)
+static int facesel_face_pick(struct bContext *C, Mesh *me, short *mval, unsigned int *index, short rect)
{
ViewContext vc;
view3d_set_viewcontext(C, &vc);
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index d9db1e99bfa..f24c5d0d5db 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -288,7 +288,7 @@ void MESH_OT_dupli_extrude_cursor(wmOperatorType *ot)
/* ********************** */
/* selected faces get hidden edges */
-int make_fgon(EditMesh *em, wmOperator *op, int make)
+static int make_fgon(EditMesh *em, wmOperator *op, int make)
{
EditFace *efa;
EditEdge *eed;
@@ -667,7 +667,7 @@ static void fix_new_face(EditMesh *em, EditFace *eface)
}
/* only adds quads or trias when there's edges already */
-void addfaces_from_edgenet(EditMesh *em)
+static void addfaces_from_edgenet(EditMesh *em)
{
EditVert *eve1, *eve2, *eve3, *eve4;
@@ -868,10 +868,10 @@ void MESH_OT_edge_face_add(wmOperatorType *ot)
// this hack is only used so that scons+mingw + split-sources hack works
// ------------------------------- start copied code
/* these are not the monkeys you are looking for */
-int monkeyo= 4;
-int monkeynv= 271;
-int monkeynf= 250;
-signed char monkeyv[271][3]= {
+static int monkeyo= 4;
+static int monkeynv= 271;
+static int monkeynf= 250;
+static signed char monkeyv[271][3]= {
{-71,21,98},{-63,12,88},{-57,7,74},{-82,-3,79},{-82,4,92},
{-82,17,100},{-92,21,102},{-101,12,95},{-107,7,83},
{-117,31,84},{-109,31,95},{-96,31,102},{-92,42,102},
@@ -942,7 +942,7 @@ signed char monkeyv[271][3]= {
{-26,-16,-42},{-17,49,-49},
};
-signed char monkeyf[250][4]= {
+static signed char monkeyf[250][4]= {
{27,4,5,26}, {25,4,5,24}, {3,6,5,4}, {1,6,5,2}, {5,6,7,4},
{3,6,7,2}, {5,8,7,6}, {3,8,7,4}, {7,8,9,6},
{5,8,9,4}, {7,10,9,8}, {5,10,9,6}, {9,10,11,8},
diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c
index 9ec50fdd6b3..aba8fabc621 100644
--- a/source/blender/editors/mesh/editmesh_lib.c
+++ b/source/blender/editors/mesh/editmesh_lib.c
@@ -2551,7 +2551,7 @@ static int tag_face_edges_test(EditFace *efa)
return (efa->e1->tmp.l || efa->e2->tmp.l || efa->e3->tmp.l) ? 1:0;
}
-void em_deselect_nth_face(EditMesh *em, int nth, EditFace *efa_act)
+static void em_deselect_nth_face(EditMesh *em, int nth, EditFace *efa_act)
{
EditFace *efa;
EditEdge *eed;
@@ -2623,7 +2623,7 @@ static int tag_edge_verts_test(EditEdge *eed)
return (eed->v1->tmp.l || eed->v2->tmp.l) ? 1:0;
}
-void em_deselect_nth_edge(EditMesh *em, int nth, EditEdge *eed_act)
+static void em_deselect_nth_edge(EditMesh *em, int nth, EditEdge *eed_act)
{
EditEdge *eed;
EditVert *eve;
@@ -2699,7 +2699,7 @@ void em_deselect_nth_edge(EditMesh *em, int nth, EditEdge *eed_act)
EM_nfaces_selected(em);
}
-void em_deselect_nth_vert(EditMesh *em, int nth, EditVert *eve_act)
+static void em_deselect_nth_vert(EditMesh *em, int nth, EditVert *eve_act)
{
EditVert *eve;
EditEdge *eed;
diff --git a/source/blender/editors/mesh/editmesh_loop.c b/source/blender/editors/mesh/editmesh_loop.c
index 451c341817b..ede7cf0b7c8 100644
--- a/source/blender/editors/mesh/editmesh_loop.c
+++ b/source/blender/editors/mesh/editmesh_loop.c
@@ -71,14 +71,10 @@ editmesh_loop: tools with own drawing subloops, select, knife, subdiv
#include "mesh_intern.h"
/* **** XXX ******** */
-static void BIF_undo_push(const char *UNUSED(arg)) {}
-static void BIF_undo(void) {}
static void error(const char *UNUSED(arg)) {}
-static int qtest(void) {return 0;}
/* **** XXX ******** */
-
-/* New LoopCut */
+#if 0 /* UNUSED 2.5 */
static void edgering_sel(EditMesh *em, EditEdge *startedge, int select, int previewlines)
{
EditEdge *eed;
@@ -192,7 +188,7 @@ static void edgering_sel(EditMesh *em, EditEdge *startedge, int select, int prev
}
}
-void CutEdgeloop(Object *obedit, wmOperator *op, EditMesh *em, int numcuts)
+static void CutEdgeloop(Object *obedit, wmOperator *op, EditMesh *em, int numcuts)
{
ViewContext vc; // XXX
EditEdge *nearest=NULL, *eed;
@@ -380,7 +376,7 @@ void CutEdgeloop(Object *obedit, wmOperator *op, EditMesh *em, int numcuts)
// DAG_id_tag_update(obedit->data, 0);
return;
}
-
+#endif
/* *************** LOOP SELECT ************* */
#if 0
diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c
index 64bd9695ac9..6e27a81e3f0 100644
--- a/source/blender/editors/mesh/editmesh_mods.c
+++ b/source/blender/editors/mesh/editmesh_mods.c
@@ -1353,7 +1353,7 @@ int mesh_layers_menu(CustomData *data, int type) {
return ret;
}
-void EM_mesh_copy_edge(EditMesh *em, short type)
+static void EM_mesh_copy_edge(EditMesh *em, short type)
{
EditSelection *ese;
short change=0;
@@ -1432,7 +1432,7 @@ void EM_mesh_copy_edge(EditMesh *em, short type)
}
}
-void EM_mesh_copy_face(EditMesh *em, wmOperator *op, short type)
+static void EM_mesh_copy_face(EditMesh *em, wmOperator *op, short type)
{
short change=0;
@@ -1692,7 +1692,7 @@ void EM_mesh_copy_face_layer(EditMesh *em, wmOperator *op, short type)
/* ctrl+c in mesh editmode */
-void mesh_copy_menu(EditMesh *em, wmOperator *op)
+static void mesh_copy_menu(EditMesh *em, wmOperator *op)
{
EditSelection *ese;
int ret;
@@ -1731,7 +1731,6 @@ void mesh_copy_menu(EditMesh *em, wmOperator *op)
}
}
-
/* **************** LOOP SELECTS *************** */
/* selects quads in loop direction of indicated edge */
@@ -2840,7 +2839,7 @@ void MESH_OT_reveal(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-int select_by_number_vertices_exec(bContext *C, wmOperator *op)
+static int select_by_number_vertices_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
@@ -2902,7 +2901,7 @@ void MESH_OT_select_by_number_vertices(wmOperatorType *ot)
}
-int select_mirror_exec(bContext *C, wmOperator *op)
+static int select_mirror_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
@@ -3223,7 +3222,7 @@ void MESH_OT_faces_select_linked_flat(wmOperatorType *ot)
RNA_def_float(ot->srna, "sharpness", 135.0f, 0.0f, FLT_MAX, "sharpness", "", 0.0f, 180.0f);
}
-void select_non_manifold(EditMesh *em, wmOperator *op )
+static void select_non_manifold(EditMesh *em, wmOperator *op )
{
EditVert *eve;
EditEdge *eed;
@@ -3520,7 +3519,7 @@ void MESH_OT_select_more(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-void EM_select_less(EditMesh *em)
+static void EM_select_less(EditMesh *em)
{
EditEdge *eed;
EditFace *efa;
@@ -4067,7 +4066,6 @@ void MESH_OT_normals_make_consistent(wmOperatorType *ot)
/* ********** ALIGN WITH VIEW **************** */
-
static void editmesh_calc_selvert_center(EditMesh *em, float cent_r[3])
{
EditVert *eve;
@@ -4101,7 +4099,7 @@ static int mface_is_selected(MFace *mf)
* which would use same as vertices method), then added
* to interface! Hoera! - zr
*/
-void faceselect_align_view_to_selected(View3D *v3d, RegionView3D *rv3d, Mesh *me, wmOperator *op, int axis)
+static void faceselect_align_view_to_selected(View3D *v3d, RegionView3D *rv3d, Mesh *me, wmOperator *op, int axis)
{
float norm[3];
int i, totselected = 0;
@@ -4158,7 +4156,7 @@ static void face_getnormal_obspace(Object *obedit, EditFace *efa, float *fno)
}
-void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, wmOperator *op, View3D *v3d, RegionView3D *rv3d, int axis)
+static void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, wmOperator *op, View3D *v3d, RegionView3D *rv3d, int axis)
{
int nselverts= EM_nvertices_selected(em);
float norm[3]={0.0, 0.0, 0.0}; /* used for storing the mesh normal */
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 090a9aa358f..24c4e887ecc 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -525,7 +525,7 @@ static void xsortvert_flag__doSetX(void *userData, EditVert *UNUSED(eve), int x,
}
/* all verts with (flag & 'flag') are sorted */
-void xsortvert_flag(bContext *C, int flag)
+static void xsortvert_flag(bContext *C, int flag)
{
ViewContext vc;
EditVert *eve;
@@ -564,7 +564,7 @@ void xsortvert_flag(bContext *C, int flag)
}
/* called from buttons */
-void hashvert_flag(EditMesh *em, int flag)
+static void hashvert_flag(EditMesh *em, int flag)
{
/* switch vertex order using hash table */
EditVert *eve;
@@ -700,7 +700,7 @@ static int mesh_extrude_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-EnumPropertyItem extrude_items[] = {
+static EnumPropertyItem extrude_items[] = {
{1, "REGION", 0, "Region", ""},
{2, "FACES", 0, "Individual Faces", ""},
{3, "EDGES", 0, "Only Edges", ""},
@@ -3459,7 +3459,7 @@ void join_triangles(EditMesh *em)
#define FACE_MARKCLEAR(f) (f->f1 = 1)
/* quick hack, basically a copy of beautify_fill */
-void edge_flip(EditMesh *em)
+static void edge_flip(EditMesh *em)
{
EditVert *v1, *v2, *v3, *v4;
EditEdge *eed, *nexted;
@@ -3834,7 +3834,7 @@ void MESH_OT_edge_rotate(wmOperatorType *ot)
/* XXX old bevel not ported yet */
-void bevel_menu(EditMesh *em)
+static void bevel_menu(EditMesh *em)
{
BME_Mesh *bm;
BME_TransData_Head *td;
diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c
index e0a91048a2c..f144ae60518 100644
--- a/source/blender/editors/mesh/mesh_ops.c
+++ b/source/blender/editors/mesh/mesh_ops.c
@@ -45,6 +45,7 @@
#include "WM_types.h"
#include "ED_object.h"
+#include "ED_mesh.h"
#include "ED_screen.h"
#include "ED_view3d.h"
@@ -145,7 +146,7 @@ void ED_operatortypes_mesh(void)
WM_operatortype_append(MESH_OT_select_nth);
}
-int ED_operator_editmesh_face_select(bContext *C)
+static int ED_operator_editmesh_face_select(bContext *C)
{
Object *obedit= CTX_data_edit_object(C);
if(obedit && obedit->type==OB_MESH) {
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index c4fe5f8fbc1..7c45e371a6e 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -1055,7 +1055,7 @@ long mesh_mirrtopo_table(Object *ob, char mode)
return 0;
}
-int mesh_get_x_mirror_vert_spacial(Object *ob, int index)
+static int mesh_get_x_mirror_vert_spacial(Object *ob, int index)
{
Mesh *me= ob->data;
MVert *mvert;
diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c
index b73f73820c7..c3cacfc4c39 100644
--- a/source/blender/editors/metaball/mball_edit.c
+++ b/source/blender/editors/metaball/mball_edit.c
@@ -48,6 +48,7 @@
#include "BKE_context.h"
#include "BKE_mball.h"
+#include "ED_mball.h"
#include "ED_screen.h"
#include "ED_view3d.h"
#include "ED_transform.h"
@@ -56,6 +57,8 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "mball_intern.h"
+
/* This function is used to free all MetaElems from MetaBall */
void free_editMball(Object *obedit)
{
@@ -605,7 +608,7 @@ static void free_undoMball(void *lbv)
MEM_freeN(lb);
}
-ListBase *metaball_get_editelems(Object *ob)
+static ListBase *metaball_get_editelems(Object *ob)
{
if(ob && ob->type==OB_MBALL) {
struct MetaBall *mb= (struct MetaBall*)ob->data;
diff --git a/source/blender/editors/metaball/mball_ops.c b/source/blender/editors/metaball/mball_ops.c
index 14402d7dae6..6ea094d95af 100644
--- a/source/blender/editors/metaball/mball_ops.c
+++ b/source/blender/editors/metaball/mball_ops.c
@@ -31,7 +31,7 @@
#include "RNA_access.h"
-
+#include "ED_mball.h"
#include "ED_screen.h"
#include "mball_intern.h"
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 08a31923cda..5b747326679 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -971,8 +971,13 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base)
basen->lay= base->lay;
BLI_addhead(&scene->base, basen); /* addhead: othwise eternal loop */
basen->object= ob;
- ob->ipo= NULL; /* make sure apply works */
- ob->parent= ob->track= NULL;
+
+ /* make sure apply works */
+ BKE_free_animdata(&ob->id);
+ ob->adt = NULL;
+
+ ob->parent= NULL;
+ ob->constraints.first= ob->constraints.last= NULL;
ob->disp.first= ob->disp.last= NULL;
ob->transflag &= ~OB_DUPLI;
ob->lay= base->lay;
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c
index 0b3e116d266..a5edc7d2598 100644
--- a/source/blender/editors/object/object_bake.c
+++ b/source/blender/editors/object/object_bake.c
@@ -67,6 +67,8 @@
#include "ED_object.h"
+#include "object_intern.h"
+
/* ****************** render BAKING ********************** */
/* threaded break test */
@@ -117,7 +119,7 @@ typedef struct BakeRender {
} BakeRender;
/* use by exec and invoke */
-int test_bake_internal(bContext *C, ReportList *reports)
+static int test_bake_internal(bContext *C, ReportList *reports)
{
Scene *scene= CTX_data_scene(C);
diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c
index f3346bf200c..2358df37806 100644
--- a/source/blender/editors/object/object_constraint.c
+++ b/source/blender/editors/object/object_constraint.c
@@ -140,7 +140,7 @@ bConstraint *get_active_constraint (Object *ob)
/* ------------- PyConstraints ------------------ */
/* this callback sets the text-file to be used for selected menu item */
-void validate_pyconstraint_cb (void *arg1, void *arg2)
+static void validate_pyconstraint_cb (void *arg1, void *arg2)
{
bPythonConstraint *data = arg1;
Text *text= NULL;
@@ -157,7 +157,7 @@ void validate_pyconstraint_cb (void *arg1, void *arg2)
#ifdef WITH_PYTHON
/* this returns a string for the list of usable pyconstraint script names */
-char *buildmenu_pyconstraints (Text *con_text, int *pyconindex)
+static char *buildmenu_pyconstraints (Text *con_text, int *pyconindex)
{
DynStr *pupds= BLI_dynstr_new();
Text *text;
@@ -199,7 +199,7 @@ char *buildmenu_pyconstraints (Text *con_text, int *pyconindex)
#endif /* WITH_PYTHON */
/* this callback gets called when the 'refresh' button of a pyconstraint gets pressed */
-void update_pyconstraint_cb (void *arg1, void *arg2)
+static void update_pyconstraint_cb (void *arg1, void *arg2)
{
#ifndef WITH_PYTHON
(void)arg1; /* unused */
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index bb83827b2cb..cb0b251c101 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -592,15 +592,6 @@ void OBJECT_OT_posemode_toggle(wmOperatorType *ot)
/* *********************** */
-void check_editmode(int type)
-{
- Object *obedit= NULL; // XXX
-
- if (obedit==NULL || obedit->type==type) return;
-
-// XXX ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR|EM_DO_UNDO); /* freedata, and undo */
-}
-
#if 0
// XXX should be in view3d?
@@ -725,7 +716,7 @@ static void spot_interactive(Object *ob, int mode)
}
#endif
-void special_editmenu(Scene *scene, View3D *v3d)
+static void special_editmenu(Scene *scene, View3D *v3d)
{
// XXX static short numcuts= 2;
Object *ob= OBACT;
@@ -1200,7 +1191,7 @@ static void copy_texture_space(Object *to, Object *ob)
}
-void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
+static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
{
Object *ob;
Base *base;
@@ -1448,7 +1439,7 @@ void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
DAG_ids_flush_update(bmain, 0);
}
-void copy_attr_menu(Main *bmain, Scene *scene, View3D *v3d)
+static void copy_attr_menu(Main *bmain, Scene *scene, View3D *v3d)
{
Object *ob;
short event;
@@ -1719,7 +1710,7 @@ void OBJECT_OT_shade_smooth(wmOperatorType *ot)
/* ********************** */
-void image_aspect(Scene *scene, View3D *v3d)
+static void image_aspect(Scene *scene, View3D *v3d)
{
/* all selected objects with an image map: scale in image aspect */
Base *base;
@@ -1778,7 +1769,7 @@ void image_aspect(Scene *scene, View3D *v3d)
}
-int vergbaseco(const void *a1, const void *a2)
+static int vergbaseco(const void *a1, const void *a2)
{
Base **x1, **x2;
@@ -1794,7 +1785,7 @@ int vergbaseco(const void *a1, const void *a2)
}
-void auto_timeoffs(Scene *scene, View3D *v3d)
+static void auto_timeoffs(Scene *scene, View3D *v3d)
{
Base *base, **basesort, **bs;
float start, delta;
@@ -1835,7 +1826,7 @@ void auto_timeoffs(Scene *scene, View3D *v3d)
}
-void ofs_timeoffs(Scene *scene, View3D *v3d)
+static void ofs_timeoffs(Scene *scene, View3D *v3d)
{
float offset=0.0f;
@@ -1854,7 +1845,7 @@ void ofs_timeoffs(Scene *scene, View3D *v3d)
}
-void rand_timeoffs(Scene *scene, View3D *v3d)
+static void rand_timeoffs(Scene *scene, View3D *v3d)
{
Base *base;
float rand_ofs=0.0f;
diff --git a/source/blender/editors/object/object_lattice.c b/source/blender/editors/object/object_lattice.c
index 3647d32c28d..375ea82c0b7 100644
--- a/source/blender/editors/object/object_lattice.c
+++ b/source/blender/editors/object/object_lattice.c
@@ -49,6 +49,8 @@
#include "BKE_lattice.h"
#include "BKE_mesh.h"
+#include "ED_lattice.h"
+#include "ED_object.h"
#include "ED_screen.h"
#include "ED_view3d.h"
#include "ED_util.h"
@@ -181,7 +183,7 @@ void ED_setflagsLatt(Object *obedit, int flag)
}
}
-int select_all_exec(bContext *C, wmOperator *op)
+static int select_all_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
Lattice *lt= obedit->data;
@@ -248,7 +250,7 @@ void LATTICE_OT_select_all(wmOperatorType *ot)
WM_operator_properties_select_all(ot);
}
-int make_regular_poll(bContext *C)
+static int make_regular_poll(bContext *C)
{
Object *ob;
@@ -258,7 +260,7 @@ int make_regular_poll(bContext *C)
return (ob && ob->type==OB_LATTICE);
}
-int make_regular_exec(bContext *C, wmOperator *UNUSED(op))
+static int make_regular_exec(bContext *C, wmOperator *UNUSED(op))
{
Object *ob= CTX_data_edit_object(C);
Lattice *lt;
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index 0f8e5cec21b..ad79cbb262b 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -1156,9 +1156,9 @@ void OBJECT_OT_move_to_layer(wmOperatorType *ot)
/************************** Link to Scene Operator *****************************/
-void link_to_scene(Main *UNUSED(bmain), unsigned short UNUSED(nr))
-{
#if 0
+static void link_to_scene(Main *UNUSED(bmain), unsigned short UNUSED(nr))
+{
Scene *sce= (Scene*) BLI_findlink(&bmain->scene, G.curscreen->scenenr-1);
Base *base, *nbase;
@@ -1174,8 +1174,8 @@ void link_to_scene(Main *UNUSED(bmain), unsigned short UNUSED(nr))
id_us_plus((ID *)base->object);
}
}
-#endif
}
+#endif
static int make_links_scene_exec(bContext *C, wmOperator *op)
{
@@ -1366,7 +1366,7 @@ static void single_object_users__forwardModifierLinks(void *UNUSED(userData), Ob
ID_NEW(*obpoin);
}
-void single_object_users(Scene *scene, View3D *v3d, int flag)
+static void single_object_users(Scene *scene, View3D *v3d, int flag)
{
Base *base;
Object *ob, *obn;
@@ -1415,7 +1415,7 @@ void single_object_users(Scene *scene, View3D *v3d, int flag)
set_sca_new_poins();
}
-void new_id_matar(Material **matar, int totcol)
+static void new_id_matar(Material **matar, int totcol)
{
ID *id;
int a;
@@ -1437,7 +1437,7 @@ void new_id_matar(Material **matar, int totcol)
}
}
-void single_obdata_users(Main *bmain, Scene *scene, int flag)
+static void single_obdata_users(Main *bmain, Scene *scene, int flag)
{
Object *ob;
Lamp *la;
@@ -1571,7 +1571,7 @@ static void single_mat_users(Scene *scene, int flag, int do_textures)
}
}
-void do_single_tex_user(Tex **from)
+static void do_single_tex_user(Tex **from)
{
Tex *tex, *texn;
@@ -1592,7 +1592,7 @@ void do_single_tex_user(Tex **from)
}
}
-void single_tex_users_expand(Main *bmain)
+static void single_tex_users_expand(Main *bmain)
{
/* only when 'parent' blocks are LIB_NEW */
Material *ma;
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index 3cb20ebbac0..5853a230719 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -58,6 +58,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "ED_object.h"
#include "ED_screen.h"
#include "UI_interface.h"
diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c
index 355f1c153cf..cf5a5acf6ed 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -650,7 +650,7 @@ void OBJECT_OT_rotation_apply(wmOperatorType *ot)
/************************ Texture Space Transform ****************************/
-void texspace_edit(Scene *scene, View3D *v3d)
+static void texspace_edit(Scene *scene, View3D *v3d)
{
Base *base;
int nr=0;
diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c
index c673ea0fd2d..ab52d527561 100644
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@ -150,7 +150,7 @@ void ED_vgroup_data_create(ID *id)
}
}
-int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_tot)
+static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_tot)
{
if(id) {
switch(GS(id->name)) {
@@ -304,7 +304,7 @@ int ED_vgroup_copy_array(Object *ob, Object *ob_from)
/* for mesh in object mode
lattice can be in editmode */
-void ED_vgroup_nr_vert_remove(Object *ob, int def_nr, int vertnum)
+static void ED_vgroup_nr_vert_remove(Object *ob, int def_nr, int vertnum)
{
/* This routine removes the vertex from the deform
* group with number def_nr.
@@ -372,7 +372,7 @@ void ED_vgroup_nr_vert_remove(Object *ob, int def_nr, int vertnum)
/* for Mesh in Object mode */
/* allows editmode for Lattice */
-void ED_vgroup_nr_vert_add(Object *ob, int def_nr, int vertnum, float weight, int assignmode)
+static void ED_vgroup_nr_vert_add(Object *ob, int def_nr, int vertnum, float weight, int assignmode)
{
/* add the vert to the deform group with the
* specified number
diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c
index 5cf6864cdc8..9ea8dde058f 100644
--- a/source/blender/editors/physics/particle_edit.c
+++ b/source/blender/editors/physics/particle_edit.c
@@ -65,6 +65,7 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "ED_physics.h"
#include "ED_mesh.h"
#include "ED_particle.h"
#include "ED_view3d.h"
@@ -939,7 +940,7 @@ static void pe_deflect_emitter(Scene *scene, Object *ob, PTCacheEdit *edit)
}
}
/* force set distances between neighbouring keys */
-void PE_apply_lengths(Scene *scene, PTCacheEdit *edit)
+static void PE_apply_lengths(Scene *scene, PTCacheEdit *edit)
{
ParticleEditSettings *pset=PE_settings(scene);
diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c
index 608c0f70c3e..916866d7a70 100644
--- a/source/blender/editors/physics/physics_fluid.c
+++ b/source/blender/editors/physics/physics_fluid.c
@@ -78,8 +78,8 @@
#include "LBM_fluidsim.h"
-
#include "ED_screen.h"
+#include "ED_fluidsim.h"
#include "WM_types.h"
@@ -1065,12 +1065,12 @@ FluidsimSettings* fluidsimSettingsCopy(FluidsimSettings *UNUSED(fss))
}
/* only compile dummy functions */
-int fluidsimBake(bContext *UNUSED(C), ReportList *UNUSED(reports), Object *UNUSED(ob))
+static int fluidsimBake(bContext *UNUSED(C), ReportList *UNUSED(reports), Object *UNUSED(ob))
{
return 0;
}
-void fluidsimFreeBake(Object *UNUSED(ob))
+static void fluidsimFreeBake(Object *UNUSED(ob))
{
}
diff --git a/source/blender/editors/physics/physics_pointcache.c b/source/blender/editors/physics/physics_pointcache.c
index 9aa879dad67..4c8c69bce01 100644
--- a/source/blender/editors/physics/physics_pointcache.c
+++ b/source/blender/editors/physics/physics_pointcache.c
@@ -75,13 +75,13 @@ static int ptcache_poll(bContext *C)
return (ptr.data && ptr.id.data);
}
-void bake_console_progress(void *UNUSED(arg), int nr)
+static void bake_console_progress(void *UNUSED(arg), int nr)
{
printf("\rbake: %3i%%", nr);
fflush(stdout);
}
-void bake_console_progress_end(void *UNUSED(arg))
+static void bake_console_progress_end(void *UNUSED(arg))
{
printf("\rbake: done!\n");
}
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index 341f56667fa..17d05bed24a 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -197,6 +197,9 @@ void screen_set_image_output(bContext *C, int mx, int my)
SpaceImage *sima;
int area_was_image=0;
+ if(scene->r.displaymode==R_OUTPUT_NONE)
+ return;
+
if(scene->r.displaymode==R_OUTPUT_WINDOW) {
rcti rect;
int sizex, sizey;
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index c2b2a0ad457..1f182723bc8 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -353,8 +353,8 @@ static int screen_opengl_render_anim_initialize(bContext *C, wmOperator *op)
}
oglrender->cfrao= scene->r.cfra;
- oglrender->nfra= SFRA;
- scene->r.cfra= SFRA;
+ oglrender->nfra= PSFRA;
+ scene->r.cfra= PSFRA;
return 1;
}
@@ -437,7 +437,7 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op)
scene->r.cfra++;
/* stop at the end or on error */
- if(scene->r.cfra > EFRA || !ok) {
+ if(scene->r.cfra > PEFRA || !ok) {
screen_opengl_render_end(C, op->customdata);
return 0;
}
diff --git a/source/blender/editors/render/render_ops.c b/source/blender/editors/render/render_ops.c
index 8172144c8ac..62f573c031f 100644
--- a/source/blender/editors/render/render_ops.c
+++ b/source/blender/editors/render/render_ops.c
@@ -30,6 +30,8 @@
#include "WM_api.h"
+#include "ED_render.h"
+
#include "render_intern.h" // own include
#if (defined(WITH_QUICKTIME) && !defined(USE_QTKIT))
diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c
index 852f006aa9a..95523cba85e 100644
--- a/source/blender/editors/render/render_shading.c
+++ b/source/blender/editors/render/render_shading.c
@@ -75,6 +75,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "ED_render.h"
#include "ED_curve.h"
#include "ED_mesh.h"
@@ -1558,7 +1559,7 @@ void ED_render_clear_mtex_copybuf(void)
mtexcopied= 0;
}
-void copy_mtex_copybuf(ID *id)
+static void copy_mtex_copybuf(ID *id)
{
MTex **mtex= NULL;
@@ -1588,7 +1589,7 @@ void copy_mtex_copybuf(ID *id)
}
}
-void paste_mtex_copybuf(ID *id)
+static void paste_mtex_copybuf(ID *id)
{
MTex **mtex= NULL;
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 7374b579cab..931cc06d6cd 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -47,6 +47,20 @@
#include "ED_object.h"
#include "ED_armature.h"
+#include "screen_intern.h"
+
+const char *screen_context_dir[] = {
+ "scene", "visible_objects", "visible_bases", "selectable_objects", "selectable_bases",
+ "selected_objects", "selected_bases",
+ "selected_editable_objects", "selected_editable_bases",
+ "visible_bones", "editable_bones", "selected_bones", "selected_editable_bones",
+ "visible_pose_bones", "selected_pose_bones", "active_bone", "active_pose_bone",
+ "active_base", "active_object", "object", "edit_object",
+ "sculpt_object", "vertex_paint_object", "weight_paint_object",
+ "texture_paint_object", "particle_edit_object",
+ "sequences", "selected_sequences", "selected_editable_sequences", /* sequencer */
+ NULL};
+
int ed_screen_context(const bContext *C, const char *member, bContextDataResult *result)
{
bScreen *sc= CTX_wm_screen(C);
@@ -65,19 +79,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
#endif
if(CTX_data_dir(member)) {
- static const char *dir[] = {
- "scene", "visible_objects", "visible_bases", "selectable_objects", "selectable_bases",
- "selected_objects", "selected_bases",
- "selected_editable_objects", "selected_editable_bases",
- "visible_bones", "editable_bones", "selected_bones", "selected_editable_bones",
- "visible_pose_bones", "selected_pose_bones", "active_bone", "active_pose_bone",
- "active_base", "active_object", "object", "edit_object",
- "sculpt_object", "vertex_paint_object", "weight_paint_object",
- "texture_paint_object", "particle_edit_object",
- "sequences", "selected_sequences", "selected_editable_sequences", /* sequencer */
- NULL};
-
- CTX_data_dir_set(result, dir);
+ CTX_data_dir_set(result, screen_context_dir);
return 1;
}
else if(CTX_data_equals(member, "scene")) {
diff --git a/source/blender/editors/screen/screen_intern.h b/source/blender/editors/screen/screen_intern.h
index ee448e70779..5f0d264ea4b 100644
--- a/source/blender/editors/screen/screen_intern.h
+++ b/source/blender/editors/screen/screen_intern.h
@@ -51,10 +51,12 @@ void removenotused_scredges(bScreen *sc);
int scredge_is_horizontal(ScrEdge *se);
ScrEdge *screen_find_active_scredge(bScreen *sc, int mx, int my);
-AZone *is_in_area_actionzone(ScrArea *sa, int x, int y);
+struct AZone *is_in_area_actionzone(ScrArea *sa, int x, int y);
/* screen_context.c */
-void ed_screen_context(const bContext *C, const char *member, bContextDataResult *result);
+int ed_screen_context(const bContext *C, const char *member, bContextDataResult *result);
+
+extern const char *screen_context_dir[]; /* doc access */
/* screendump.c */
void SCREEN_OT_screenshot(struct wmOperatorType *ot);
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 9267f4d4e80..33c1fce4872 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -2470,7 +2470,7 @@ static int header_toolbox_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *U
return OPERATOR_CANCELLED;
}
-void SCREEN_OT_header_toolbox(wmOperatorType *ot)
+static void SCREEN_OT_header_toolbox(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Header Toolbox";
@@ -2917,7 +2917,7 @@ static int screen_new_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void SCREEN_OT_new(wmOperatorType *ot)
+static void SCREEN_OT_new(wmOperatorType *ot)
{
/* identifiers */
ot->name= "New Screen";
@@ -2942,7 +2942,7 @@ static int screen_delete_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void SCREEN_OT_delete(wmOperatorType *ot)
+static void SCREEN_OT_delete(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Delete Screen"; //was scene
@@ -2977,7 +2977,7 @@ static int scene_new_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void SCENE_OT_new(wmOperatorType *ot)
+static void SCENE_OT_new(wmOperatorType *ot)
{
static EnumPropertyItem type_items[]= {
{SCE_COPY_EMPTY, "EMPTY", 0, "Empty", "Add empty scene"},
@@ -3013,7 +3013,7 @@ static int scene_delete_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void SCENE_OT_delete(wmOperatorType *ot)
+static void SCENE_OT_delete(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Delete Scene";
diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c
index 6a8d5043c43..7f247b9e815 100644
--- a/source/blender/editors/sculpt_paint/paint_image.c
+++ b/source/blender/editors/sculpt_paint/paint_image.c
@@ -1238,7 +1238,7 @@ static void project_face_pixel(const MTFace *tf_other, ImBuf *ibuf_other, const
}
/* run this outside project_paint_uvpixel_init since pixels with mask 0 dont need init */
-float project_paint_uvpixel_mask(
+static float project_paint_uvpixel_mask(
const ProjPaintState *ps,
const int face_index,
const int side,
@@ -2141,7 +2141,7 @@ if __name__ == '__main__':
/* checks if pt is inside a convex 2D polyline, the polyline must be ordered rotating clockwise
* otherwise it would have to test for mixed (line_point_side_v2 > 0.0f) cases */
-int IsectPoly2Df(const float pt[2], float uv[][2], const int tot)
+static int IsectPoly2Df(const float pt[2], float uv[][2], const int tot)
{
int i;
if (line_point_side_v2(uv[tot-1], uv[0], pt) < 0.0f)
@@ -2202,7 +2202,7 @@ static void project_paint_face_init(const ProjPaintState *ps, const int thread_i
float tf_uv_pxoffset[4][2]; /* bucket bounds in UV space so we can init pixels only for this face, */
float xhalfpx, yhalfpx;
- const float ibuf_xf = ibuf->x, ibuf_yf = ibuf->y;
+ const float ibuf_xf = (float)ibuf->x, ibuf_yf = (float)ibuf->y;
int has_x_isect = 0, has_isect = 0; /* for early loop exit */
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c
index 1ba0891751e..35111afb430 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -28,6 +28,7 @@
#include "BKE_context.h"
#include "BKE_paint.h"
+#include "ED_sculpt.h"
#include "ED_screen.h"
#include "UI_resources.h"
@@ -60,7 +61,7 @@ static int brush_add_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void BRUSH_OT_add(wmOperatorType *ot)
+static void BRUSH_OT_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Brush";
@@ -115,7 +116,7 @@ static int brush_scale_size_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void BRUSH_OT_scale_size(wmOperatorType *ot)
+static void BRUSH_OT_scale_size(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Scale Sculpt/Paint Brush Size";
@@ -142,7 +143,7 @@ static int vertex_color_set_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void PAINT_OT_vertex_color_set(wmOperatorType *ot)
+static void PAINT_OT_vertex_color_set(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set Vertex Colors";
@@ -171,7 +172,7 @@ static int brush_reset_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void BRUSH_OT_reset(wmOperatorType *ot)
+static void BRUSH_OT_reset(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Reset Brush";
@@ -337,8 +338,8 @@ void ED_keymap_paint(wmKeyConfig *keyconf)
ed_keymap_paint_brush_size(keymap, "tool_settings.sculpt.brush.size");
/* */
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", AKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush.use_anchor");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_menu_enum", AKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush.stroke_method");
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", SKEY, KM_PRESS, KM_SHIFT, 0);
RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush.use_smooth_stroke");
diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c
index 92b5c541ea2..3a67775cb98 100644
--- a/source/blender/editors/sculpt_paint/paint_stroke.c
+++ b/source/blender/editors/sculpt_paint/paint_stroke.c
@@ -362,7 +362,7 @@ static int project_brush_radius(RegionView3D* rv3d, float radius, float location
return len_v2v2(p1, p2);
}
-int sculpt_get_brush_geometry(bContext* C, int x, int y, int* pixel_radius,
+static int sculpt_get_brush_geometry(bContext* C, int x, int y, int* pixel_radius,
float location[3])
{
struct PaintStroke *stroke;
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index 832d657428c..575b0012c6c 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -157,7 +157,7 @@ static int *get_indexarray(Mesh *me)
/* in contradiction to cpack drawing colors, the MCOL colors (vpaint colors) are per byte!
so not endian sensitive. Mcol = ABGR!!! so be cautious with cpack calls */
-unsigned int rgba_to_mcol(float r, float g, float b, float a)
+static unsigned int rgba_to_mcol(float r, float g, float b, float a)
{
int ir, ig, ib, ia;
unsigned int col;
@@ -853,7 +853,7 @@ static void wpaint_blend(VPaint *wp, MDeformWeight *dw, MDeformWeight *uw, float
/* else */
/* sets wp->weight to the closest weight value to vertex */
/* note: we cant sample frontbuf, weight colors are interpolated too unpredictable */
-void sample_wpaint(Scene *scene, ARegion *ar, View3D *UNUSED(v3d), int mode)
+static void sample_wpaint(Scene *scene, ARegion *ar, View3D *UNUSED(v3d), int mode)
{
ViewContext vc;
ToolSettings *ts= scene->toolsettings;
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 69e42d87148..fa8d61d73de 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -140,7 +140,7 @@ struct MultiresModifierData *sculpt_multires_active(Scene *scene, Object *ob)
}
/* Check if there are any active modifiers in stack (used for flushing updates at enter/exit sculpt mode) */
-int sculpt_has_active_modifiers(Scene *scene, Object *ob)
+static int sculpt_has_active_modifiers(Scene *scene, Object *ob)
{
ModifierData *md;
@@ -252,7 +252,7 @@ typedef struct StrokeCache {
/*** BVH Tree ***/
/* Get a screen-space rectangle of the modified area */
-int sculpt_get_redraw_rect(ARegion *ar, RegionView3D *rv3d,
+static int sculpt_get_redraw_rect(ARegion *ar, RegionView3D *rv3d,
Object *ob, rcti *rect)
{
PBVH *pbvh= ob->sculpt->pbvh;
@@ -504,7 +504,7 @@ static void flip_coord(float out[3], float in[3], const char symm)
out[2]= in[2];
}
-float calc_overlap(StrokeCache *cache, const char symm, const char axis, const float angle)
+static float calc_overlap(StrokeCache *cache, const char symm, const char axis, const float angle)
{
float mirror[3];
float distsq;
@@ -2446,11 +2446,34 @@ static void sculpt_update_keyblock(SculptSession *ss)
}
/* flush displacement from deformed PBVH to original layer */
-static void sculpt_flush_stroke_deform(SculptSession *ss)
+static void sculpt_flush_stroke_deform(Sculpt *sd, SculptSession *ss)
{
if(!ss->kb) {
Object *ob= ss->ob;
Mesh *me= (Mesh*)ob->data;
+ Brush *brush= paint_brush(&sd->paint);
+
+ if(ELEM(brush->sculpt_tool, SCULPT_TOOL_SMOOTH, SCULPT_TOOL_LAYER)) {
+ /* this brushes aren't using proxies, so sculpt_combine_proxies() wouldn't
+ propagate needed deformation to original base */
+
+ int n, totnode;
+ PBVHNode** nodes;
+ PBVHVertexIter vd;
+
+ BLI_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &totnode);
+
+ #pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
+ for (n= 0; n < totnode; n++) {
+
+ BLI_pbvh_vertex_iter_begin(ss->pbvh, nodes[n], vd, PBVH_ITER_UNIQUE) {
+ sculpt_flush_pbvhvert_deform(ss, &vd);
+ }
+ BLI_pbvh_vertex_iter_end;
+ }
+
+ MEM_freeN(nodes);
+ }
/* Modifiers could depend on mesh normals, so we should update them/
Note, then if sculpting happens on locked key, normals should be re-calculated
@@ -2568,7 +2591,7 @@ static void do_symmetrical_brush_actions(Sculpt *sd, SculptSession *ss)
sculpt_fix_noise_tear(sd, ss);
if (ss->modifiers_active)
- sculpt_flush_stroke_deform(ss);
+ sculpt_flush_stroke_deform(sd, ss);
cache->first_time= 0;
}
@@ -3163,7 +3186,7 @@ typedef struct {
int original;
} SculptRaycastData;
-void sculpt_raycast_cb(PBVHNode *node, void *data_v, float* tmin)
+static void sculpt_raycast_cb(PBVHNode *node, void *data_v, float* tmin)
{
if (BLI_pbvh_node_get_tmin(node) < *tmin) {
SculptRaycastData *srd = data_v;
diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c
index 30edc659fcb..df554efd979 100644
--- a/source/blender/editors/sound/sound_ops.c
+++ b/source/blender/editors/sound/sound_ops.c
@@ -61,6 +61,7 @@
#include "AUD_C-API.h"
+#include "ED_sound.h"
#include "ED_util.h"
#include "sound_intern.h"
@@ -189,7 +190,7 @@ static int pack_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void SOUND_OT_pack(wmOperatorType *ot)
+static void SOUND_OT_pack(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Pack Sound";
@@ -253,7 +254,7 @@ static int sound_unpack_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(even
return OPERATOR_FINISHED;
}
-void SOUND_OT_unpack(wmOperatorType *ot)
+static void SOUND_OT_unpack(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Unpack Sound";
diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c
index 4dc77e13192..7bd326bac68 100644
--- a/source/blender/editors/space_action/action_draw.c
+++ b/source/blender/editors/space_action/action_draw.c
@@ -58,6 +58,7 @@
#include "ED_anim_api.h"
#include "ED_keyframes_draw.h"
+#include "action_intern.h"
/* ************************************************************************* */
/* Channel List */
diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c
index 4719c10e941..852927898b9 100644
--- a/source/blender/editors/space_action/action_edit.c
+++ b/source/blender/editors/space_action/action_edit.c
@@ -426,7 +426,7 @@ void ACTION_OT_paste (wmOperatorType *ot)
/* ******************** Insert Keyframes Operator ************************* */
/* defines for insert keyframes tool */
-EnumPropertyItem prop_actkeys_insertkey_types[] = {
+static EnumPropertyItem prop_actkeys_insertkey_types[] = {
{1, "ALL", 0, "All Channels", ""},
{2, "SEL", 0, "Only Selected Channels", ""},
{3, "GROUP", 0, "In Active Group", ""}, // xxx not in all cases
@@ -808,7 +808,7 @@ void ACTION_OT_sample (wmOperatorType *ot)
/* ******************** Set Extrapolation-Type Operator *********************** */
/* defines for set extrapolation-type for selected keyframes tool */
-EnumPropertyItem prop_actkeys_expo_types[] = {
+static EnumPropertyItem prop_actkeys_expo_types[] = {
{FCURVE_EXTRAPOLATE_CONSTANT, "CONSTANT", 0, "Constant Extrapolation", ""},
{FCURVE_EXTRAPOLATE_LINEAR, "LINEAR", 0, "Linear Extrapolation", ""},
{0, NULL, 0, NULL, NULL}
@@ -955,7 +955,7 @@ void ACTION_OT_interpolation_type (wmOperatorType *ot)
/* ******************** Set Handle-Type Operator *********************** */
-EnumPropertyItem actkeys_handle_type_items[] = {
+static EnumPropertyItem actkeys_handle_type_items[] = {
{HD_FREE, "FREE", 0, "Free", ""},
{HD_VECT, "VECTOR", 0, "Vector", ""},
{HD_ALIGN, "ALIGNED", 0, "Aligned", ""},
@@ -1188,7 +1188,7 @@ void ACTION_OT_frame_jump (wmOperatorType *ot)
/* ******************** Snap Keyframes Operator *********************** */
/* defines for snap keyframes tool */
-EnumPropertyItem prop_actkeys_snap_types[] = {
+static EnumPropertyItem prop_actkeys_snap_types[] = {
{ACTKEYS_SNAP_CFRA, "CFRA", 0, "Current frame", ""},
{ACTKEYS_SNAP_NEAREST_FRAME, "NEAREST_FRAME", 0, "Nearest Frame", ""}, // XXX as single entry?
{ACTKEYS_SNAP_NEAREST_SECOND, "NEAREST_SECOND", 0, "Nearest Second", ""}, // XXX as single entry?
@@ -1288,7 +1288,7 @@ void ACTION_OT_snap (wmOperatorType *ot)
/* ******************** Mirror Keyframes Operator *********************** */
/* defines for mirror keyframes tool */
-EnumPropertyItem prop_actkeys_mirror_types[] = {
+static EnumPropertyItem prop_actkeys_mirror_types[] = {
{ACTKEYS_MIRROR_CFRA, "CFRA", 0, "By Times over Current frame", ""},
{ACTKEYS_MIRROR_XAXIS, "XAXIS", 0, "By Values over Value=0", ""},
{ACTKEYS_MIRROR_MARKER, "MARKER", 0, "By Times over First Selected Marker", ""},
diff --git a/source/blender/editors/space_action/action_intern.h b/source/blender/editors/space_action/action_intern.h
index cc363b76479..b483a3edbdc 100644
--- a/source/blender/editors/space_action/action_intern.h
+++ b/source/blender/editors/space_action/action_intern.h
@@ -59,14 +59,14 @@ void ACTION_OT_select_column(struct wmOperatorType *ot);
void ACTION_OT_select_linked(struct wmOperatorType *ot);
void ACTION_OT_select_more(struct wmOperatorType *ot);
void ACTION_OT_select_less(struct wmOperatorType *ot);
+void ACTION_OT_select_leftright(struct wmOperatorType *ot);
void ACTION_OT_clickselect(struct wmOperatorType *ot);
/* defines for left-right select tool */
enum {
- ACTKEYS_LRSEL_TEST = -1,
- ACTKEYS_LRSEL_NONE,
+ ACTKEYS_LRSEL_TEST = 0,
ACTKEYS_LRSEL_LEFT,
- ACTKEYS_LRSEL_RIGHT,
+ ACTKEYS_LRSEL_RIGHT
} eActKeys_LeftRightSelect_Mode;
/* defines for column-select mode */
diff --git a/source/blender/editors/space_action/action_ops.c b/source/blender/editors/space_action/action_ops.c
index ea36ce98ecb..3b448becf8b 100644
--- a/source/blender/editors/space_action/action_ops.c
+++ b/source/blender/editors/space_action/action_ops.c
@@ -58,6 +58,7 @@ void action_operatortypes(void)
WM_operatortype_append(ACTION_OT_select_linked);
WM_operatortype_append(ACTION_OT_select_more);
WM_operatortype_append(ACTION_OT_select_less);
+ WM_operatortype_append(ACTION_OT_select_leftright);
/* editing */
WM_operatortype_append(ACTION_OT_snap);
@@ -96,8 +97,16 @@ static void action_keymap_keyframes (wmKeyConfig *keyconf, wmKeyMap *keymap)
kmi= WM_keymap_add_item(keymap, "ACTION_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT|KM_SHIFT, 0);
RNA_boolean_set(kmi->ptr, "extend", 1);
RNA_boolean_set(kmi->ptr, "column", 1);
- kmi= WM_keymap_add_item(keymap, "ACTION_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
- RNA_enum_set(kmi->ptr, "left_right", ACTKEYS_LRSEL_TEST);
+
+ /* select left/right */
+ WM_keymap_add_item(keymap, "ACTION_OT_select_leftright", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
+ kmi= WM_keymap_add_item(keymap, "ACTION_OT_select_leftright", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
+
+ kmi= WM_keymap_add_item(keymap, "ACTION_OT_select_leftright", LEFTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set(kmi->ptr, "mode", ACTKEYS_LRSEL_LEFT);
+ kmi= WM_keymap_add_item(keymap, "ACTION_OT_select_leftright", RIGHTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set(kmi->ptr, "mode", ACTKEYS_LRSEL_RIGHT);
/* deselect all */
WM_keymap_add_item(keymap, "ACTION_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c
index 365c17d45c0..639ed372c67 100644
--- a/source/blender/editors/space_action/action_select.c
+++ b/source/blender/editors/space_action/action_select.c
@@ -186,7 +186,7 @@ enum {
ACTKEYS_BORDERSEL_ALLKEYS = 0,
ACTKEYS_BORDERSEL_FRAMERANGE,
ACTKEYS_BORDERSEL_CHANNELS,
-} eActKeys_BorderSelect_Mode;
+} /*eActKeys_BorderSelect_Mode*/;
static void borderselect_action (bAnimContext *ac, rcti rect, short mode, short selectmode)
@@ -705,53 +705,20 @@ void ACTION_OT_select_less (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/;
}
-/* ******************** Mouse-Click Select Operator *********************** */
-/* This operator works in one of three ways:
- * - 1) keyframe under mouse - no special modifiers
- * - 2) all keyframes on the same side of current frame indicator as mouse - ALT modifier
- * - 3) column select all keyframes in frame under mouse - CTRL modifier
- *
- * In addition to these basic options, the SHIFT modifier can be used to toggle the
- * selection mode between replacing the selection (without) and inverting the selection (with).
- */
+/* ******************** Select Left/Right Operator ************************* */
+/* Select keyframes left/right of the current frame indicator */
/* defines for left-right select tool */
static EnumPropertyItem prop_actkeys_leftright_select_types[] = {
{ACTKEYS_LRSEL_TEST, "CHECK", 0, "Check if Select Left or Right", ""},
- {ACTKEYS_LRSEL_NONE, "OFF", 0, "Don't select", ""},
{ACTKEYS_LRSEL_LEFT, "LEFT", 0, "Before current frame", ""},
{ACTKEYS_LRSEL_RIGHT, "RIGHT", 0, "After current frame", ""},
{0, NULL, 0, NULL, NULL}
};
-/* sensitivity factor for frame-selections */
-#define FRAME_CLICK_THRESH 0.1f
+/* --------------------------------- */
-/* ------------------- */
-
-/* option 1) select keyframe directly under mouse */
-static void actkeys_mselect_single (bAnimContext *ac, bAnimListElem *ale, short select_mode, float selx)
-{
- bDopeSheet *ads= (ac->datatype == ANIMCONT_DOPESHEET) ? ac->data : NULL;
- int ds_filter = ((ads) ? (ads->filterflag) : (0));
-
- KeyframeEditData ked= {{0}};
- KeyframeEditFunc select_cb, ok_cb;
-
- /* get functions for selecting keyframes */
- select_cb= ANIM_editkeyframes_select(select_mode);
- ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAME);
- ked.f1= selx;
-
- /* select the nominated keyframe on the given frame */
- if (ale->type == ANIMTYPE_GPLAYER)
- select_gpencil_frame(ale->data, selx, select_mode);
- else
- ANIM_animchannel_keyframes_loop(&ked, ale, ok_cb, select_cb, NULL, ds_filter);
-}
-
-/* Option 2) Selects all the keyframes on either side of the current frame (depends on which side the mouse is on) */
-static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short select_mode)
+static void actkeys_select_leftright (bAnimContext *ac, short leftright, short select_mode)
{
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
@@ -773,13 +740,13 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short
/* set callbacks and editing data */
ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE);
select_cb= ANIM_editkeyframes_select(select_mode);
-
+
if (leftright == ACTKEYS_LRSEL_LEFT) {
ked.f1 = MINAFRAMEF;
- ked.f2 = (float)(CFRA + FRAME_CLICK_THRESH);
+ ked.f2 = (float)(CFRA + 0.1f);
}
else {
- ked.f1 = (float)(CFRA - FRAME_CLICK_THRESH);
+ ked.f1 = (float)(CFRA - 0.1f);
ked.f2 = MAXFRAMEF;
}
@@ -790,7 +757,7 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short
filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS);
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
- /* select keys on the side where most data occurs */
+ /* select keys */
for (ale= anim_data.first; ale; ale= ale->next) {
AnimData *adt= ANIM_nla_mapping_get(ac, ale);
@@ -806,7 +773,7 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short
}
/* Sync marker support */
- if ((select_mode==SELECT_ADD) && ELEM(leftright, ACTKEYS_LRSEL_LEFT, ACTKEYS_LRSEL_RIGHT)) {
+ if (select_mode==SELECT_ADD) {
SpaceAction *saction= ac->sa->spacedata.first;
if ((saction) && (saction->flag & SACTION_MARKERS_MOVE)) {
@@ -830,6 +797,130 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short
BLI_freelistN(&anim_data);
}
+/* ----------------- */
+
+static int actkeys_select_leftright_exec (bContext *C, wmOperator *op)
+{
+ bAnimContext ac;
+ short leftright = RNA_enum_get(op->ptr, "mode");
+ short selectmode;
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* select mode is either replace (deselect all, then add) or add/extend */
+ if (RNA_boolean_get(op->ptr, "extend"))
+ selectmode= SELECT_INVERT;
+ else
+ selectmode= SELECT_REPLACE;
+
+ /* if "test" mode is set, we don't have any info to set this with */
+ if (leftright == ACTKEYS_LRSEL_TEST)
+ return OPERATOR_CANCELLED;
+
+ /* do the selecting now */
+ actkeys_select_leftright(&ac, leftright, selectmode);
+
+ /* set notifier that keyframe selection (and channels too) have changed */
+ WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME|ND_ANIMCHAN|NA_SELECTED, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+static int actkeys_select_leftright_invoke (bContext *C, wmOperator *op, wmEvent *event)
+{
+ bAnimContext ac;
+ short leftright = RNA_enum_get(op->ptr, "mode");
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* handle mode-based testing */
+ if (leftright == ACTKEYS_LRSEL_TEST) {
+ Scene *scene= ac.scene;
+ ARegion *ar= ac.ar;
+ View2D *v2d= &ar->v2d;
+
+ int mval[2];
+ float x;
+
+ /* get mouse coordinates (in region coordinates) */
+ mval[0]= (event->x - ar->winrct.xmin);
+ mval[1]= (event->y - ar->winrct.ymin);
+
+ /* determine which side of the current frame mouse is on */
+ UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, NULL);
+ if (x < CFRA)
+ RNA_int_set(op->ptr, "mode", ACTKEYS_LRSEL_LEFT);
+ else
+ RNA_int_set(op->ptr, "mode", ACTKEYS_LRSEL_RIGHT);
+ }
+
+ /* perform selection */
+ return actkeys_select_leftright_exec(C, op);
+}
+
+void ACTION_OT_select_leftright (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Select Left/Right";
+ ot->idname= "ACTION_OT_select_leftright";
+ ot->description= "Select keyframes to the left or the right of the current frame";
+
+ /* api callbacks */
+ ot->invoke= actkeys_select_leftright_invoke;
+ ot->exec= actkeys_select_leftright_exec;
+ ot->poll= ED_operator_action_active;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* id-props */
+ ot->prop= RNA_def_enum(ot->srna, "mode", prop_actkeys_leftright_select_types, ACTKEYS_LRSEL_TEST, "Mode", "");
+ RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", "");
+}
+
+/* ******************** Mouse-Click Select Operator *********************** */
+/* This operator works in one of three ways:
+ * - 1) keyframe under mouse - no special modifiers
+ * - 2) all keyframes on the same side of current frame indicator as mouse - ALT modifier
+ * - 3) column select all keyframes in frame under mouse - CTRL modifier
+ *
+ * In addition to these basic options, the SHIFT modifier can be used to toggle the
+ * selection mode between replacing the selection (without) and inverting the selection (with).
+ */
+
+/* sensitivity factor for frame-selections */
+#define FRAME_CLICK_THRESH 0.1f
+
+/* ------------------- */
+
+/* option 1) select keyframe directly under mouse */
+static void actkeys_mselect_single (bAnimContext *ac, bAnimListElem *ale, short select_mode, float selx)
+{
+ bDopeSheet *ads= (ac->datatype == ANIMCONT_DOPESHEET) ? ac->data : NULL;
+ int ds_filter = ((ads) ? (ads->filterflag) : (0));
+
+ KeyframeEditData ked= {{0}};
+ KeyframeEditFunc select_cb, ok_cb;
+
+ /* get functions for selecting keyframes */
+ select_cb= ANIM_editkeyframes_select(select_mode);
+ ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAME);
+ ked.f1= selx;
+
+ /* select the nominated keyframe on the given frame */
+ if (ale->type == ANIMTYPE_GPLAYER)
+ select_gpencil_frame(ale->data, selx, select_mode);
+ else
+ ANIM_animchannel_keyframes_loop(&ked, ale, ok_cb, select_cb, NULL, ds_filter);
+}
+
+/* Option 2) Selects all the keyframes on either side of the current frame (depends on which side the mouse is on) */
+/* (see actkeys_select_leftright) */
+
/* Option 3) Selects all visible keyframes in the same frame as the mouse click */
static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float selx)
{
@@ -1089,23 +1180,8 @@ static int actkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even
/* column selection */
column= RNA_boolean_get(op->ptr, "column");
- /* figure out action to take */
- if (RNA_enum_get(op->ptr, "left_right")) {
- /* select all keys on same side of current frame as mouse */
- float x;
-
- UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, NULL);
- if (x < CFRA)
- RNA_int_set(op->ptr, "left_right", ACTKEYS_LRSEL_LEFT);
- else
- RNA_int_set(op->ptr, "left_right", ACTKEYS_LRSEL_RIGHT);
-
- actkeys_mselect_leftright(&ac, RNA_enum_get(op->ptr, "left_right"), selectmode);
- }
- else {
- /* select keyframe(s) based upon mouse position*/
- mouse_action_keys(&ac, mval, selectmode, column);
- }
+ /* select keyframe(s) based upon mouse position*/
+ mouse_action_keys(&ac, mval, selectmode, column);
/* set notifier that keyframe selection (and channels too) have changed */
WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME|ND_ANIMCHAN|NA_SELECTED, NULL);
@@ -1129,8 +1205,6 @@ void ACTION_OT_clickselect (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* id-props */
- // XXX should we make this into separate operators?
- RNA_def_enum(ot->srna, "left_right", prop_actkeys_leftright_select_types, 0, "Left Right", ""); // CTRLKEY
RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", ""); // SHIFTKEY
RNA_def_boolean(ot->srna, "column", 0, "Column Select", ""); // ALTKEY
}
diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c
index 792f212f638..3f3611d75f5 100644
--- a/source/blender/editors/space_action/space_action.c
+++ b/source/blender/editors/space_action/space_action.c
@@ -52,6 +52,7 @@
#include "UI_resources.h"
#include "UI_view2d.h"
+#include "ED_space_api.h"
#include "ED_anim_api.h"
#include "ED_markers.h"
diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c
index 0aac167fed2..a00b5a50229 100644
--- a/source/blender/editors/space_api/spacetypes.c
+++ b/source/blender/editors/space_api/spacetypes.c
@@ -266,7 +266,7 @@ static void xxx_keymap(wmKeyConfig *UNUSED(keyconf))
}
/* only called once, from screen/spacetypes.c */
-void ED_spacetype_xxx(void)
+static void ED_spacetype_xxx(void)
{
static SpaceType st;
diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c
index ee8b67a146a..dda5887aef0 100644
--- a/source/blender/editors/space_buttons/buttons_context.c
+++ b/source/blender/editors/space_buttons/buttons_context.c
@@ -307,7 +307,12 @@ static int buttons_context_path_particle(ButsContextPath *path)
{
Object *ob;
ParticleSystem *psys;
+ PointerRNA *ptr= &path->ptr[path->len-1];
+ /* if we already have (pinned) particle settings, we're done */
+ if(RNA_struct_is_a(ptr->type, &RNA_ParticleSettings)) {
+ return 1;
+ }
/* if we have an object, get the active particle system */
if(buttons_context_path_object(path)) {
ob= path->ptr[path->len-1].data;
@@ -395,15 +400,25 @@ static int buttons_context_path_texture(ButsContextPath *path)
}
/* try particles */
if((path->tex_ctx == SB_TEXC_PARTICLES) && buttons_context_path_particle(path)) {
- psys= path->ptr[path->len-1].data;
-
- if(psys && psys->part && GS(psys->part->id.name)==ID_PA) {
- tex= give_current_particle_texture(psys->part);
+ if(path->ptr[path->len-1].type == &RNA_ParticleSettings) {
+ ParticleSettings *part = path->ptr[path->len-1].data;
+ tex= give_current_particle_texture(part);
RNA_id_pointer_create(&tex->id, &path->ptr[path->len]);
path->len++;
return 1;
}
+ else {
+ psys= path->ptr[path->len-1].data;
+
+ if(psys && psys->part && GS(psys->part->id.name)==ID_PA) {
+ tex= give_current_particle_texture(psys->part);
+
+ RNA_id_pointer_create(&tex->id, &path->ptr[path->len]);
+ path->len++;
+ return 1;
+ }
+ }
}
/* try material */
if(buttons_context_path_material(path)) {
@@ -617,6 +632,12 @@ void buttons_context_compute(const bContext *C, SpaceButs *sbuts)
/************************* Context Callback ************************/
+const char *buttons_context_dir[] = {
+ "world", "object", "mesh", "armature", "lattice", "curve",
+ "meta_ball", "lamp", "camera", "material", "material_slot",
+ "texture", "texture_slot", "bone", "edit_bone", "pose_bone", "particle_system", "particle_system_editable",
+ "cloth", "soft_body", "fluid", "smoke", "collision", "brush", NULL};
+
int buttons_context(const bContext *C, const char *member, bContextDataResult *result)
{
SpaceButs *sbuts= CTX_wm_space_buts(C);
@@ -627,13 +648,7 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r
/* here we handle context, getting data from precomputed path */
if(CTX_data_dir(member)) {
- static const char *dir[] = {
- "world", "object", "mesh", "armature", "lattice", "curve",
- "meta_ball", "lamp", "camera", "material", "material_slot",
- "texture", "texture_slot", "bone", "edit_bone", "pose_bone", "particle_system", "particle_system_editable",
- "cloth", "soft_body", "fluid", "smoke", "collision", "brush", NULL};
-
- CTX_data_dir_set(result, dir);
+ CTX_data_dir_set(result, buttons_context_dir);
return 1;
}
else if(CTX_data_equals(member, "world")) {
@@ -930,6 +945,14 @@ ID *buttons_context_id_path(const bContext *C)
for(a=path->len-1; a>=0; a--) {
ptr= &path->ptr[a];
+ /* pin particle settings instead of system, since only settings are an idblock*/
+ if(sbuts->mainb == BCONTEXT_PARTICLE && sbuts->flag & SB_PIN_CONTEXT) {
+ if(ptr->type == &RNA_ParticleSystem && ptr->data) {
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
+ return &psys->part->id;
+ }
+ }
+
if(ptr->id.data) {
return ptr->id.data;
break;
diff --git a/source/blender/editors/space_buttons/buttons_intern.h b/source/blender/editors/space_buttons/buttons_intern.h
index 9478168f35a..407454d4347 100644
--- a/source/blender/editors/space_buttons/buttons_intern.h
+++ b/source/blender/editors/space_buttons/buttons_intern.h
@@ -65,6 +65,8 @@ void buttons_context_draw(const struct bContext *C, struct uiLayout *layout);
void buttons_context_register(struct ARegionType *art);
struct ID *buttons_context_id_path(const struct bContext *C);
+extern const char *buttons_context_dir[]; /* doc access */
+
/* buttons_ops.c */
void BUTTONS_OT_file_browse(struct wmOperatorType *ot);
void BUTTONS_OT_toolbox(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c
index 61485987cc9..afb8acb087b 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -39,6 +39,7 @@
#include "BKE_context.h"
#include "BKE_screen.h"
+#include "ED_space_api.h"
#include "ED_screen.h"
#include "BIF_gl.h"
@@ -177,13 +178,13 @@ static void buttons_main_area_draw(const bContext *C, ARegion *ar)
sbuts->mainbo= sbuts->mainb;
}
-void buttons_operatortypes(void)
+static void buttons_operatortypes(void)
{
WM_operatortype_append(BUTTONS_OT_toolbox);
WM_operatortype_append(BUTTONS_OT_file_browse);
}
-void buttons_keymap(struct wmKeyConfig *keyconf)
+static void buttons_keymap(struct wmKeyConfig *keyconf)
{
wmKeyMap *keymap= WM_keymap_find(keyconf, "Property Editor", SPACE_BUTS, 0);
diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c
index 05c3561d25e..3a7c306ac50 100644
--- a/source/blender/editors/space_console/console_ops.c
+++ b/source/blender/editors/space_console/console_ops.c
@@ -75,7 +75,7 @@ void console_scrollback_free(SpaceConsole *sc, ConsoleLine *cl)
MEM_freeN(cl);
}
-void console_scrollback_limit(SpaceConsole *sc)
+static void console_scrollback_limit(SpaceConsole *sc)
{
int tot;
diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c
index c44d13aa058..126db64e2a8 100644
--- a/source/blender/editors/space_console/space_console.c
+++ b/source/blender/editors/space_console/space_console.c
@@ -21,8 +21,7 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
-
- #include <string.h>
+#include <string.h>
#include <stdio.h>
#ifdef WIN32
@@ -39,6 +38,7 @@
#include "BKE_screen.h"
#include "BKE_idcode.h"
+#include "ED_space_api.h"
#include "ED_screen.h"
#include "BIF_gl.h"
@@ -225,7 +225,7 @@ static void console_main_area_draw(const bContext *C, ARegion *ar)
UI_view2d_scrollers_free(scrollers);
}
-void console_operatortypes(void)
+static void console_operatortypes(void)
{
/* console_ops.c */
WM_operatortype_append(CONSOLE_OT_move);
@@ -243,7 +243,7 @@ void console_operatortypes(void)
WM_operatortype_append(CONSOLE_OT_select_set);
}
-void console_keymap(struct wmKeyConfig *keyconf)
+static void console_keymap(struct wmKeyConfig *keyconf)
{
wmKeyMap *keymap= WM_keymap_find(keyconf, "Console", SPACE_CONSOLE, 0);
wmKeyMapItem *kmi;
diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c
index 54a462ad84a..79c1cce4656 100644
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@ -79,7 +79,7 @@
enum {
B_FS_DIRNAME,
B_FS_FILENAME
-} eFile_ButEvents;
+} /*eFile_ButEvents*/;
static void do_file_buttons(bContext *C, void *UNUSED(arg), int event)
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index fea50f1f2aa..67b74010e53 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -516,7 +516,7 @@ int file_cancel_exec(bContext *C, wmOperator *UNUSED(unused))
return OPERATOR_FINISHED;
}
-int file_operator_poll(bContext *C)
+static int file_operator_poll(bContext *C)
{
int poll = ED_operator_file_active(C);
SpaceFile *sfile= CTX_wm_space_file(C);
@@ -735,7 +735,7 @@ void FILE_OT_parent(struct wmOperatorType *ot)
}
-int file_refresh_exec(bContext *C, wmOperator *UNUSED(unused))
+static int file_refresh_exec(bContext *C, wmOperator *UNUSED(unused))
{
SpaceFile *sfile= CTX_wm_space_file(C);
@@ -1028,7 +1028,7 @@ static void file_expand_directory(bContext *C)
}
}
-int file_directory_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
+static int file_directory_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
{
SpaceFile *sfile= CTX_wm_space_file(C);
@@ -1116,7 +1116,7 @@ void FILE_OT_refresh(struct wmOperatorType *ot)
ot->poll= ED_operator_file_active; /* <- important, handler is on window level */
}
-int file_hidedot_exec(bContext *C, wmOperator *UNUSED(unused))
+static int file_hidedot_exec(bContext *C, wmOperator *UNUSED(unused))
{
SpaceFile *sfile= CTX_wm_space_file(C);
@@ -1169,7 +1169,7 @@ struct ARegion *file_buttons_region(struct ScrArea *sa)
return arnew;
}
-int file_bookmark_toggle_exec(bContext *C, wmOperator *UNUSED(unused))
+static int file_bookmark_toggle_exec(bContext *C, wmOperator *UNUSED(unused))
{
ScrArea *sa= CTX_wm_area(C);
ARegion *ar= file_buttons_region(sa);
@@ -1193,7 +1193,7 @@ void FILE_OT_bookmark_toggle(struct wmOperatorType *ot)
}
-int file_filenum_exec(bContext *C, wmOperator *op)
+static int file_filenum_exec(bContext *C, wmOperator *op)
{
SpaceFile *sfile= CTX_wm_space_file(C);
ScrArea *sa= CTX_wm_area(C);
@@ -1225,7 +1225,7 @@ void FILE_OT_filenum(struct wmOperatorType *ot)
RNA_def_int(ot->srna, "increment", 1, 0, 100, "Increment", "", 0,100);
}
-int file_rename_exec(bContext *C, wmOperator *UNUSED(op))
+static int file_rename_exec(bContext *C, wmOperator *UNUSED(op))
{
ScrArea *sa= CTX_wm_area(C);
SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
@@ -1246,7 +1246,7 @@ int file_rename_exec(bContext *C, wmOperator *UNUSED(op))
}
-int file_rename_poll(bContext *C)
+static int file_rename_poll(bContext *C)
{
int poll = ED_operator_file_active(C);
SpaceFile *sfile= CTX_wm_space_file(C);
@@ -1277,7 +1277,7 @@ void FILE_OT_rename(struct wmOperatorType *ot)
}
-int file_delete_poll(bContext *C)
+static int file_delete_poll(bContext *C)
{
int poll = ED_operator_file_active(C);
SpaceFile *sfile= CTX_wm_space_file(C);
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index b92b95e2efd..ef011ca4b40 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -27,7 +27,6 @@
* ***** END GPL LICENSE BLOCK *****
*/
-
/* global includes */
#include <stdlib.h>
@@ -62,6 +61,7 @@
#include "DNA_space_types.h"
+#include "ED_fileselect.h"
#include "ED_datafiles.h"
#include "IMB_imbuf.h"
@@ -593,7 +593,7 @@ short filelist_changed(struct FileList* filelist)
return filelist->changed;
}
-struct ImBuf * filelist_loadimage(struct FileList* filelist, int index)
+static struct ImBuf * filelist_loadimage(struct FileList* filelist, int index)
{
ImBuf *imb = NULL;
int fidx = 0;
@@ -807,7 +807,7 @@ int ED_file_extension_icon(char *relname)
return ICON_FILE_BLANK;
}
-void filelist_setfiletypes(struct FileList* filelist)
+static void filelist_setfiletypes(struct FileList* filelist)
{
struct direntry *file;
int num;
diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h
index 6ea91746b85..73bd78fadbc 100644
--- a/source/blender/editors/space_file/filelist.h
+++ b/source/blender/editors/space_file/filelist.h
@@ -70,7 +70,7 @@ void filelist_readdir(struct FileList* filelist);
int filelist_empty(struct FileList* filelist);
void filelist_parent(struct FileList* filelist);
-
+struct BlendHandle *filelist_lib(struct FileList* filelist);
int filelist_islibrary (struct FileList* filelist, char* dir, char* group);
void filelist_from_main(struct FileList* filelist);
void filelist_from_library(struct FileList* filelist);
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index b8ffc73caf0..47140bd6e74 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -47,6 +47,7 @@
#include "BKE_context.h"
#include "BKE_screen.h"
+#include "ED_space_api.h"
#include "ED_screen.h"
#include "ED_fileselect.h"
@@ -60,7 +61,6 @@
#include "UI_view2d.h"
-
#include "file_intern.h" // own include
#include "fsmenu.h"
#include "filelist.h"
@@ -363,7 +363,7 @@ static void file_main_area_draw(const bContext *C, ARegion *ar)
}
-void file_operatortypes(void)
+static void file_operatortypes(void)
{
WM_operatortype_append(FILE_OT_select);
WM_operatortype_append(FILE_OT_select_all_toggle);
@@ -389,7 +389,7 @@ void file_operatortypes(void)
}
/* NOTE: do not add .blend file reading on this level */
-void file_keymap(struct wmKeyConfig *keyconf)
+static void file_keymap(struct wmKeyConfig *keyconf)
{
wmKeyMapItem *kmi;
/* keys for all areas */
diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c
index e21dd46140e..697ea86e43a 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -400,7 +400,7 @@ void GRAPH_OT_ghost_curves_clear (wmOperatorType *ot)
/* ******************** Insert Keyframes Operator ************************* */
/* defines for insert keyframes tool */
-EnumPropertyItem prop_graphkeys_insertkey_types[] = {
+static EnumPropertyItem prop_graphkeys_insertkey_types[] = {
{1, "ALL", 0, "All Channels", ""},
{2, "SEL", 0, "Only Selected Channels", ""},
{0, NULL, 0, NULL, NULL}
@@ -1224,7 +1224,7 @@ void GRAPH_OT_sample (wmOperatorType *ot)
/* ******************** Set Extrapolation-Type Operator *********************** */
/* defines for set extrapolation-type for selected keyframes tool */
-EnumPropertyItem prop_graphkeys_expo_types[] = {
+static EnumPropertyItem prop_graphkeys_expo_types[] = {
{FCURVE_EXTRAPOLATE_CONSTANT, "CONSTANT", 0, "Constant Extrapolation", ""},
{FCURVE_EXTRAPOLATE_LINEAR, "LINEAR", 0, "Linear Extrapolation", ""},
{0, NULL, 0, NULL, NULL}
@@ -1637,7 +1637,7 @@ void GRAPH_OT_frame_jump (wmOperatorType *ot)
/* ******************** Snap Keyframes Operator *********************** */
/* defines for snap keyframes tool */
-EnumPropertyItem prop_graphkeys_snap_types[] = {
+static EnumPropertyItem prop_graphkeys_snap_types[] = {
{GRAPHKEYS_SNAP_CFRA, "CFRA", 0, "Current Frame", ""},
{GRAPHKEYS_SNAP_VALUE, "VALUE", 0, "Cursor Value", ""},
{GRAPHKEYS_SNAP_NEAREST_FRAME, "NEAREST_FRAME", 0, "Nearest Frame", ""}, // XXX as single entry?
@@ -1745,7 +1745,7 @@ void GRAPH_OT_snap (wmOperatorType *ot)
/* ******************** Mirror Keyframes Operator *********************** */
/* defines for mirror keyframes tool */
-EnumPropertyItem prop_graphkeys_mirror_types[] = {
+static EnumPropertyItem prop_graphkeys_mirror_types[] = {
{GRAPHKEYS_MIRROR_CFRA, "CFRA", 0, "By Times over Current Frame", ""},
{GRAPHKEYS_MIRROR_VALUE, "VALUE", 0, "By Values over Cursor Value", ""},
{GRAPHKEYS_MIRROR_YAXIS, "YAXIS", 0, "By Times over Time=0", ""},
diff --git a/source/blender/editors/space_graph/graph_intern.h b/source/blender/editors/space_graph/graph_intern.h
index 560dabbb634..d27935ee75a 100644
--- a/source/blender/editors/space_graph/graph_intern.h
+++ b/source/blender/editors/space_graph/graph_intern.h
@@ -66,14 +66,14 @@ void GRAPH_OT_select_column(struct wmOperatorType *ot);
void GRAPH_OT_select_linked(struct wmOperatorType *ot);
void GRAPH_OT_select_more(struct wmOperatorType *ot);
void GRAPH_OT_select_less(struct wmOperatorType *ot);
+void GRAPH_OT_select_leftright(struct wmOperatorType *ot);
void GRAPH_OT_clickselect(struct wmOperatorType *ot);
/* defines for left-right select tool */
enum {
- GRAPHKEYS_LRSEL_TEST = -1,
- GRAPHKEYS_LRSEL_NONE,
+ GRAPHKEYS_LRSEL_TEST = 0,
GRAPHKEYS_LRSEL_LEFT,
- GRAPHKEYS_LRSEL_RIGHT,
+ GRAPHKEYS_LRSEL_RIGHT
} eGraphKeys_LeftRightSelect_Mode;
/* defines for column-select mode */
diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c
index efec8dc4259..57e9f49f69d 100644
--- a/source/blender/editors/space_graph/graph_ops.c
+++ b/source/blender/editors/space_graph/graph_ops.c
@@ -159,7 +159,7 @@ static int graphview_cursor_modal(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_RUNNING_MODAL;
}
-void GRAPH_OT_cursor_set(wmOperatorType *ot)
+static void GRAPH_OT_cursor_set(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set Cursor";
@@ -199,7 +199,7 @@ static int view_toggle_handles_exec (bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void GRAPH_OT_view_togglehandles (wmOperatorType *ot)
+static void GRAPH_OT_view_togglehandles (wmOperatorType *ot)
{
/* identification */
ot->name= "Show/Hide All Handles";
@@ -235,6 +235,7 @@ void graphedit_operatortypes(void)
WM_operatortype_append(GRAPH_OT_select_linked);
WM_operatortype_append(GRAPH_OT_select_more);
WM_operatortype_append(GRAPH_OT_select_less);
+ WM_operatortype_append(GRAPH_OT_select_leftright);
/* editing */
WM_operatortype_append(GRAPH_OT_snap);
@@ -287,14 +288,22 @@ static void graphedit_keymap_keyframes (wmKeyConfig *keyconf, wmKeyMap *keymap)
kmi= WM_keymap_add_item(keymap, "GRAPH_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT|KM_SHIFT, 0);
RNA_boolean_set(kmi->ptr, "extend", 1);
RNA_boolean_set(kmi->ptr, "column", 1);
- kmi= WM_keymap_add_item(keymap, "GRAPH_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
- RNA_enum_set(kmi->ptr, "left_right", GRAPHKEYS_LRSEL_TEST);
kmi= WM_keymap_add_item(keymap, "GRAPH_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT, 0);
RNA_boolean_set(kmi->ptr, "curves", 1);
kmi= WM_keymap_add_item(keymap, "GRAPH_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT|KM_SHIFT, 0);
RNA_boolean_set(kmi->ptr, "curves", 1);
RNA_boolean_set(kmi->ptr, "extend", 1);
+ /* select left/right */
+ WM_keymap_add_item(keymap, "GRAPH_OT_select_leftright", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
+ kmi= WM_keymap_add_item(keymap, "GRAPH_OT_select_leftright", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
+
+ kmi= WM_keymap_add_item(keymap, "GRAPH_OT_select_leftright", LEFTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set(kmi->ptr, "mode", GRAPHKEYS_LRSEL_LEFT);
+ kmi= WM_keymap_add_item(keymap, "GRAPH_OT_select_leftright", RIGHTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set(kmi->ptr, "mode", GRAPHKEYS_LRSEL_RIGHT);
+
/* deselect all */
WM_keymap_add_item(keymap, "GRAPH_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "GRAPH_OT_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1);
diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c
index 58a5f4b113e..3fb86be4ed1 100644
--- a/source/blender/editors/space_graph/graph_select.c
+++ b/source/blender/editors/space_graph/graph_select.c
@@ -704,26 +704,166 @@ void GRAPH_OT_select_less (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/;
}
-/* ******************** Mouse-Click Select Operator *********************** */
-/* This operator works in one of three ways:
- * - 1) keyframe under mouse - no special modifiers
- * - 2) all keyframes on the same side of current frame indicator as mouse - ALT modifier
- * - 3) column select all keyframes in frame under mouse - CTRL modifier
- *
- * In addition to these basic options, the SHIFT modifier can be used to toggle the
- * selection mode between replacing the selection (without) and inverting the selection (with).
- */
+/* ******************** Select Left/Right Operator ************************* */
+/* Select keyframes left/right of the current frame indicator */
/* defines for left-right select tool */
static EnumPropertyItem prop_graphkeys_leftright_select_types[] = {
{GRAPHKEYS_LRSEL_TEST, "CHECK", 0, "Check if Select Left or Right", ""},
- {GRAPHKEYS_LRSEL_NONE, "OFF", 0, "Don't select", ""},
{GRAPHKEYS_LRSEL_LEFT, "LEFT", 0, "Before current frame", ""},
{GRAPHKEYS_LRSEL_RIGHT, "RIGHT", 0, "After current frame", ""},
{0, NULL, 0, NULL, NULL}
};
-/* ------------------- */
+/* --------------------------------- */
+
+static void graphkeys_select_leftright (bAnimContext *ac, short leftright, short select_mode)
+{
+ ListBase anim_data = {NULL, NULL};
+ bAnimListElem *ale;
+ int filter;
+
+ KeyframeEditFunc ok_cb, select_cb;
+ KeyframeEditData ked= {{0}};
+ Scene *scene= ac->scene;
+
+ /* if select mode is replace, deselect all keyframes (and channels) first */
+ if (select_mode==SELECT_REPLACE) {
+ select_mode= SELECT_ADD;
+
+ /* deselect all other channels and keyframes */
+ ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
+ deselect_graph_keys(ac, 0, SELECT_SUBTRACT);
+ }
+
+ /* set callbacks and editing data */
+ ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE);
+ select_cb= ANIM_editkeyframes_select(select_mode);
+
+ if (leftright == GRAPHKEYS_LRSEL_LEFT) {
+ ked.f1 = MINAFRAMEF;
+ ked.f2 = (float)(CFRA + 0.1f);
+ }
+ else {
+ ked.f1 = (float)(CFRA - 0.1f);
+ ked.f2 = MAXFRAMEF;
+ }
+
+ /* filter data */
+ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS);
+ ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
+
+ /* select keys */
+ for (ale= anim_data.first; ale; ale= ale->next) {
+ AnimData *adt= ANIM_nla_mapping_get(ac, ale);
+
+ if (adt) {
+ ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1);
+ ANIM_fcurve_keyframes_loop(&ked, ale->key_data, ok_cb, select_cb, NULL);
+ ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1);
+ }
+ else
+ ANIM_fcurve_keyframes_loop(&ked, ale->key_data, ok_cb, select_cb, NULL);
+ }
+
+ /* Cleanup */
+ BLI_freelistN(&anim_data);
+}
+
+/* ----------------- */
+
+static int graphkeys_select_leftright_exec (bContext *C, wmOperator *op)
+{
+ bAnimContext ac;
+ short leftright = RNA_enum_get(op->ptr, "mode");
+ short selectmode;
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* select mode is either replace (deselect all, then add) or add/extend */
+ if (RNA_boolean_get(op->ptr, "extend"))
+ selectmode= SELECT_INVERT;
+ else
+ selectmode= SELECT_REPLACE;
+
+ /* if "test" mode is set, we don't have any info to set this with */
+ if (leftright == GRAPHKEYS_LRSEL_TEST)
+ return OPERATOR_CANCELLED;
+
+ /* do the selecting now */
+ graphkeys_select_leftright(&ac, leftright, selectmode);
+
+ /* set notifier that keyframe selection (and channels too) have changed */
+ WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME|ND_ANIMCHAN|NA_SELECTED, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+static int graphkeys_select_leftright_invoke (bContext *C, wmOperator *op, wmEvent *event)
+{
+ bAnimContext ac;
+ short leftright = RNA_enum_get(op->ptr, "mode");
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* handle mode-based testing */
+ if (leftright == GRAPHKEYS_LRSEL_TEST) {
+ Scene *scene= ac.scene;
+ ARegion *ar= ac.ar;
+ View2D *v2d= &ar->v2d;
+
+ short mval[2];
+ float x;
+
+ /* get mouse coordinates (in region coordinates) */
+ mval[0]= (event->x - ar->winrct.xmin);
+ mval[1]= (event->y - ar->winrct.ymin);
+
+ /* determine which side of the current frame mouse is on */
+ UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, NULL);
+ if (x < CFRA)
+ RNA_int_set(op->ptr, "mode", GRAPHKEYS_LRSEL_LEFT);
+ else
+ RNA_int_set(op->ptr, "mode", GRAPHKEYS_LRSEL_RIGHT);
+ }
+
+ /* perform selection */
+ return graphkeys_select_leftright_exec(C, op);
+}
+
+void GRAPH_OT_select_leftright (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Select Left/Right";
+ ot->idname= "GRAPH_OT_select_leftright";
+ ot->description= "Select keyframes to the left or the right of the current frame";
+
+ /* api callbacks */
+ ot->invoke= graphkeys_select_leftright_invoke;
+ ot->exec= graphkeys_select_leftright_exec;
+ ot->poll= graphop_visible_keyframes_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* id-props */
+ ot->prop= RNA_def_enum(ot->srna, "mode", prop_graphkeys_leftright_select_types, GRAPHKEYS_LRSEL_TEST, "Mode", "");
+ RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", "");
+}
+
+/* ******************** Mouse-Click Select Operator *********************** */
+/* This operator works in one of three ways:
+ * - 1) keyframe under mouse - no special modifiers
+ * - 2) all keyframes on the same side of current frame indicator as mouse - ALT modifier
+ * - 3) column select all keyframes in frame under mouse - CTRL modifier
+ *
+ * In addition to these basic options, the SHIFT modifier can be used to toggle the
+ * selection mode between replacing the selection (without) and inverting the selection (with).
+ */
/* temp info for caching handle vertices close */
typedef struct tNearestVertInfo {
@@ -1042,23 +1182,23 @@ static void mouse_graph_keys (bAnimContext *ac, int mval[], short select_mode, s
/* only change selection of channel when the visibility of keyframes doesn't depend on this */
if ((sipo->flag & SIPO_SELCUVERTSONLY) == 0) {
/* select or deselect curve? */
-
- /* when a single point is selected then dont toggle channel selection */
- if(bezt) {
- if((bezt->f2|bezt->f1|bezt->f3) & SELECT) {
+ if (bezt) {
+ /* take selection status from item that got hit, to prevent flip/flop on channel
+ * selection status when shift-selecting (i.e. "SELECT_INVERT") points
+ */
+ if (BEZSELECTED(bezt))
nvi->fcu->flag |= FCURVE_SELECTED;
- }
- else {
+ else
nvi->fcu->flag &= ~FCURVE_SELECTED;
- }
}
else {
+ /* didn't hit any channel, so just apply that selection mode to the curve's selection status */
if (select_mode == SELECT_INVERT)
nvi->fcu->flag ^= FCURVE_SELECTED;
else if (select_mode == SELECT_ADD)
nvi->fcu->flag |= FCURVE_SELECTED;
}
-
+
/* set active F-Curve (NOTE: sync the filter flags with findnearest_fcurve_vert) */
if (nvi->fcu->flag & FCURVE_SELECTED) {
int filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS);
@@ -1071,67 +1211,7 @@ static void mouse_graph_keys (bAnimContext *ac, int mval[], short select_mode, s
}
/* Option 2) Selects all the keyframes on either side of the current frame (depends on which side the mouse is on) */
-static void graphkeys_mselect_leftright (bAnimContext *ac, short leftright, short select_mode)
-{
- ListBase anim_data = {NULL, NULL};
- bAnimListElem *ale;
- int filter;
-
- SpaceIpo *sipo= (SpaceIpo *)ac->sa->spacedata.first;
- KeyframeEditFunc ok_cb, select_cb;
- KeyframeEditData ked;
- Scene *scene= ac->scene;
-
- /* if select mode is replace, deselect all keyframes (and channels) first */
- if (select_mode==SELECT_REPLACE) {
- /* reset selection mode to add to selection */
- select_mode= SELECT_ADD;
-
- /* deselect all other keyframes */
- deselect_graph_keys(ac, 0, SELECT_SUBTRACT);
-
- /* deselect other channels too, but only only do this if
- * selection of channel when the visibility of keyframes
- * doesn't depend on this
- */
- if ((sipo->flag & SIPO_SELCUVERTSONLY) == 0)
- ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
- }
-
- /* set callbacks and editing data */
- ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE);
- select_cb= ANIM_editkeyframes_select(select_mode);
-
- memset(&ked, 0, sizeof(KeyframeEditFunc));
- if (leftright == GRAPHKEYS_LRSEL_LEFT) {
- ked.f1 = MINAFRAMEF;
- ked.f2 = (float)(CFRA + 0.1f);
- }
- else {
- ked.f1 = (float)(CFRA - 0.1f);
- ked.f2 = MAXFRAMEF;
- }
-
- /* filter data */
- filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS);
- ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
-
- /* select keys on the side where most data occurs */
- for (ale= anim_data.first; ale; ale= ale->next) {
- AnimData *adt= ANIM_nla_mapping_get(ac, ale);
-
- if (adt) {
- ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1);
- ANIM_fcurve_keyframes_loop(&ked, ale->key_data, ok_cb, select_cb, NULL);
- ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1);
- }
- else
- ANIM_fcurve_keyframes_loop(&ked, ale->key_data, ok_cb, select_cb, NULL);
- }
-
- /* Cleanup */
- BLI_freelistN(&anim_data);
-}
+/* (see graphkeys_select_leftright) */
/* Option 3) Selects all visible keyframes in the same frame as the mouse click */
static void graphkeys_mselect_column (bAnimContext *ac, int mval[2], short select_mode)
@@ -1240,24 +1320,12 @@ static int graphkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *ev
selectmode= SELECT_REPLACE;
/* figure out action to take */
- if (RNA_enum_get(op->ptr, "left_right")) {
- /* select all keys on same side of current frame as mouse */
- float x;
-
- UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, NULL);
- if (x < CFRA)
- RNA_int_set(op->ptr, "left_right", GRAPHKEYS_LRSEL_LEFT);
- else
- RNA_int_set(op->ptr, "left_right", GRAPHKEYS_LRSEL_RIGHT);
-
- graphkeys_mselect_leftright(&ac, RNA_enum_get(op->ptr, "left_right"), selectmode);
- }
- else if (RNA_boolean_get(op->ptr, "column")) {
+ if (RNA_boolean_get(op->ptr, "column")) {
/* select all keyframes in the same frame as the one that was under the mouse */
graphkeys_mselect_column(&ac, mval, selectmode);
}
else if (RNA_boolean_get(op->ptr, "curves")) {
- /* select all keyframes in F-Curve under mouse */
+ /* select all keyframes in the same F-Curve as the one under the mouse */
mouse_graph_keys(&ac, mval, selectmode, 1);
}
else {
@@ -1284,8 +1352,6 @@ void GRAPH_OT_clickselect (wmOperatorType *ot)
ot->poll= graphop_visible_keyframes_poll;
/* id-props */
- // XXX should we make this into separate operators?
- RNA_def_enum(ot->srna, "left_right", prop_graphkeys_leftright_select_types, 0, "Left Right", ""); // CTRLKEY
RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", ""); // SHIFTKEY
RNA_def_boolean(ot->srna, "column", 0, "Column Select", "Select all keyframes that occur on the same frame as the one under the mouse"); // ALTKEY
RNA_def_boolean(ot->srna, "curves", 0, "Only Curves", "Select all the keyframes in the curve"); // CTRLKEY + ALTKEY
diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c
index 37d58e5591b..7a8bc9a65d6 100644
--- a/source/blender/editors/space_graph/space_graph.c
+++ b/source/blender/editors/space_graph/space_graph.c
@@ -45,6 +45,7 @@
#include "BKE_fcurve.h"
#include "BKE_screen.h"
+#include "ED_space_api.h"
#include "ED_screen.h"
#include "ED_anim_api.h"
#include "ED_markers.h"
diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c
index 0dcfa9e3bcc..9593c896c22 100644
--- a/source/blender/editors/space_image/image_draw.c
+++ b/source/blender/editors/space_image/image_draw.c
@@ -132,23 +132,23 @@ void draw_image_info(ARegion *ar, int channels, int x, int y, char *cp, float *f
char str[256];
int ofs= 0;
- ofs += BLI_snprintf(str, sizeof(str)-ofs, "X: %4d Y: %4d ", x, y);
+ ofs += BLI_snprintf(str + ofs, sizeof(str)-ofs, "X: %4d Y: %4d ", x, y);
if(cp)
- ofs+= BLI_snprintf(str, sizeof(str)-ofs, "| R: %3d G: %3d B: %3d A: %3d ", cp[0], cp[1], cp[2], cp[3]);
+ ofs+= BLI_snprintf(str + ofs, sizeof(str)-ofs, "| R: %3d G: %3d B: %3d A: %3d ", cp[0], cp[1], cp[2], cp[3]);
if(fp) {
if(channels==4)
- ofs+= BLI_snprintf(str, sizeof(str)-ofs, "| R: %.3f G: %.3f B: %.3f A: %.3f ", fp[0], fp[1], fp[2], fp[3]);
+ ofs+= BLI_snprintf(str + ofs, sizeof(str)-ofs, "| R: %.3f G: %.3f B: %.3f A: %.3f ", fp[0], fp[1], fp[2], fp[3]);
else if(channels==1)
- ofs+= BLI_snprintf(str, sizeof(str)-ofs, "| Val: %.3f ", fp[0]);
+ ofs+= BLI_snprintf(str + ofs, sizeof(str)-ofs, "| Val: %.3f ", fp[0]);
else if(channels==3)
- ofs+= BLI_snprintf(str, sizeof(str)-ofs, "| R: %.3f G: %.3f B: %.3f ", fp[0], fp[1], fp[2]);
+ ofs+= BLI_snprintf(str + ofs, sizeof(str)-ofs, "| R: %.3f G: %.3f B: %.3f ", fp[0], fp[1], fp[2]);
}
if(zp)
- ofs+= BLI_snprintf(str, sizeof(str)-ofs, "| Z: %.4f ", 0.5+0.5*(((float)*zp)/(float)0x7fffffff));
+ ofs+= BLI_snprintf(str + ofs, sizeof(str)-ofs, "| Z: %.4f ", 0.5+0.5*(((float)*zp)/(float)0x7fffffff));
if(zpf)
- ofs+= BLI_snprintf(str, sizeof(str)-ofs, "| Z: %.3f ", *zpf);
+ ofs+= BLI_snprintf(str + ofs, sizeof(str)-ofs, "| Z: %.3f ", *zpf);
(void)ofs;
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
diff --git a/source/blender/editors/space_image/image_intern.h b/source/blender/editors/space_image/image_intern.h
index c038f58375c..327749125a5 100644
--- a/source/blender/editors/space_image/image_intern.h
+++ b/source/blender/editors/space_image/image_intern.h
@@ -46,6 +46,8 @@ struct bNodeTree;
struct ARegion *image_has_buttons_region(struct ScrArea *sa);
struct ARegion *image_has_scope_region(struct ScrArea *sa);
+extern const char *image_context_dir[]; /* doc access */
+
/* image_header.c */
void image_header_buttons(const struct bContext *C, struct ARegion *ar);
@@ -85,9 +87,6 @@ void IMAGE_OT_curves_point_set(struct wmOperatorType *ot);
void IMAGE_OT_record_composite(struct wmOperatorType *ot);
-/* uvedit_draw.c */
-void draw_uvedit_main(struct SpaceImage *sima, struct ARegion *ar, struct Scene *scene, struct Object *obedit);
-
/* image_panels.c */
struct ImageUser *ntree_get_active_iuser(struct bNodeTree *ntree);
void image_buttons_register(struct ARegionType *art);
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index a0fda09c92b..fdf5cea880b 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -1529,9 +1529,9 @@ typedef struct ImageSampleInfo {
static void sample_draw(const bContext *UNUSED(C), ARegion *ar, void *arg_info)
{
ImageSampleInfo *info= arg_info;
-
- draw_image_info(ar, info->channels, info->x, info->y, info->colp,
- info->colfp, info->zp, info->zfp);
+ if(info->draw) {
+ draw_image_info(ar, info->channels, info->x, info->y, info->colp, info->colfp, info->zp, info->zfp);
+ }
}
static void sample_apply(bContext *C, wmOperator *op, wmEvent *event)
@@ -1858,7 +1858,7 @@ typedef struct RecordCompositeData {
int sfra, efra;
} RecordCompositeData;
-int record_composite_apply(bContext *C, wmOperator *op)
+static int record_composite_apply(bContext *C, wmOperator *op)
{
SpaceImage *sima= CTX_wm_space_image(C);
RecordCompositeData *rcd= op->customdata;
diff --git a/source/blender/editors/space_image/image_render.c b/source/blender/editors/space_image/image_render.c
index d80801f8868..f09a1353935 100644
--- a/source/blender/editors/space_image/image_render.c
+++ b/source/blender/editors/space_image/image_render.c
@@ -52,7 +52,7 @@ static ScrArea *image_area= NULL;
/* can get as well the full picture, as the parts while rendering */
/* XXX will be obsolete, here for reference now */
-void imagewindow_progress(SpaceImage *sima, RenderResult *rr, volatile rcti *renrect)
+static void imagewindow_progress(SpaceImage *sima, RenderResult *rr, volatile rcti *renrect)
{
float x1, y1, *rectf= NULL;
unsigned int *rect32= NULL;
@@ -124,7 +124,7 @@ void imagewindow_progress(SpaceImage *sima, RenderResult *rr, volatile rcti *ren
/* coming from BIF_toggle_render_display() */
-void imagewindow_toggle_render(bContext *C)
+static void imagewindow_toggle_render(bContext *C)
{
bScreen *sc= CTX_wm_screen(C);
ScrArea *sa;
@@ -163,7 +163,7 @@ static void imagewindow_renderinfo_cb(void *UNUSED(handle), RenderStats *UNUSED(
}
}
-void ED_space_image_render_callbacks(bContext *C, Render *re)
+static void ED_space_image_render_callbacks(bContext *C, Render *re)
{
// RE_display_init_cb(re, C, imagewindow_init_display_cb);
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index af4e496f68a..1d7cb357e5f 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -49,6 +49,7 @@
#include "IMB_imbuf_types.h"
+#include "ED_image.h"
#include "ED_mesh.h"
#include "ED_space_api.h"
#include "ED_screen.h"
@@ -458,7 +459,7 @@ static SpaceLink *image_duplicate(SpaceLink *sl)
return (SpaceLink *)simagen;
}
-void image_operatortypes(void)
+static void image_operatortypes(void)
{
WM_operatortype_append(IMAGE_OT_view_all);
WM_operatortype_append(IMAGE_OT_view_pan);
@@ -491,7 +492,7 @@ void image_operatortypes(void)
WM_operatortype_append(IMAGE_OT_scopes);
}
-void image_keymap(struct wmKeyConfig *keyconf)
+static void image_keymap(struct wmKeyConfig *keyconf)
{
wmKeyMap *keymap= WM_keymap_find(keyconf, "Image Generic", SPACE_IMAGE, 0);
wmKeyMapItem *kmi;
@@ -664,13 +665,14 @@ static void image_listener(ScrArea *sa, wmNotifier *wmn)
}
}
+const char *image_context_dir[] = {"edit_image", NULL};
+
static int image_context(const bContext *C, const char *member, bContextDataResult *result)
{
SpaceImage *sima= CTX_wm_space_image(C);
if(CTX_data_dir(member)) {
- static const char *dir[] = {"edit_image", NULL};
- CTX_data_dir_set(result, dir);
+ CTX_data_dir_set(result, image_context_dir);
}
else if(CTX_data_equals(member, "edit_image")) {
CTX_data_id_pointer_set(result, (ID*)ED_space_image(sima));
diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c
index aa5a00e1642..b5abc077eef 100644
--- a/source/blender/editors/space_info/info_stats.c
+++ b/source/blender/editors/space_info/info_stats.c
@@ -43,6 +43,7 @@
#include "BKE_mesh.h"
#include "BKE_particle.h"
+#include "ED_info.h"
#include "ED_armature.h"
#include "ED_mesh.h"
#include "ED_curve.h" /* for ED_curve_editnurbs */
@@ -418,7 +419,7 @@ void ED_info_stats_clear(Scene *scene)
}
}
-char *ED_info_stats_string(Scene *scene)
+const char *ED_info_stats_string(Scene *scene)
{
if(!scene->stats)
stats_update(scene);
diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c
index 80040f55a08..b7360f75de9 100644
--- a/source/blender/editors/space_info/space_info.c
+++ b/source/blender/editors/space_info/space_info.c
@@ -40,6 +40,7 @@
#include "BKE_global.h"
#include "BKE_screen.h"
+#include "ED_space_api.h"
#include "ED_screen.h"
#include "BIF_gl.h"
@@ -51,7 +52,6 @@
#include "UI_interface.h"
#include "UI_view2d.h"
-
#include "info_intern.h" // own include
/* ******************** default callbacks for info space ***************** */
@@ -169,7 +169,7 @@ static void info_main_area_draw(const bContext *C, ARegion *ar)
UI_view2d_scrollers_free(scrollers);
}
-void info_operatortypes(void)
+static void info_operatortypes(void)
{
WM_operatortype_append(FILE_OT_pack_all);
WM_operatortype_append(FILE_OT_unpack_all);
@@ -189,7 +189,7 @@ void info_operatortypes(void)
WM_operatortype_append(INFO_OT_report_copy);
}
-void info_keymap(struct wmKeyConfig *keyconf)
+static void info_keymap(struct wmKeyConfig *keyconf)
{
wmKeyMap *keymap= WM_keymap_find(keyconf, "Window", 0, 0);
@@ -277,7 +277,7 @@ static void recent_files_menu_draw(const bContext *UNUSED(C), Menu *menu)
}
}
-void recent_files_menu_register(void)
+static void recent_files_menu_register(void)
{
MenuType *mt;
diff --git a/source/blender/editors/space_logic/logic_ops.c b/source/blender/editors/space_logic/logic_ops.c
index cda2aea23fa..4bcb7c1d2f3 100644
--- a/source/blender/editors/space_logic/logic_ops.c
+++ b/source/blender/editors/space_logic/logic_ops.c
@@ -39,6 +39,7 @@
#include "BKE_main.h"
#include "BKE_sca.h"
+#include "ED_logic.h"
#include "ED_object.h"
#include "ED_screen.h"
@@ -52,7 +53,6 @@
#include "logic_intern.h"
/* ************* Generic Operator Helpers ************* */
-
static int edit_sensor_poll(bContext *C)
{
PointerRNA ptr= CTX_data_pointer_get_type(C, "sensor", &RNA_Sensor);
@@ -247,7 +247,7 @@ static int sensor_remove_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
-void LOGIC_OT_sensor_remove(wmOperatorType *ot)
+static void LOGIC_OT_sensor_remove(wmOperatorType *ot)
{
ot->name= "Remove Sensor";
ot->description= "Remove a sensor from the active object";
@@ -299,7 +299,7 @@ static int sensor_add_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void LOGIC_OT_sensor_add(wmOperatorType *ot)
+static void LOGIC_OT_sensor_add(wmOperatorType *ot)
{
PropertyRNA *prop;
@@ -350,7 +350,7 @@ static int controller_remove_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
-void LOGIC_OT_controller_remove(wmOperatorType *ot)
+static void LOGIC_OT_controller_remove(wmOperatorType *ot)
{
ot->name= "Remove Controller";
ot->description= "Remove a controller from the active object";
@@ -416,7 +416,7 @@ static int controller_add_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void LOGIC_OT_controller_add(wmOperatorType *ot)
+static void LOGIC_OT_controller_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Controller";
@@ -464,7 +464,7 @@ static int actuator_remove_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(e
return OPERATOR_CANCELLED;
}
-void LOGIC_OT_actuator_remove(wmOperatorType *ot)
+static void LOGIC_OT_actuator_remove(wmOperatorType *ot)
{
ot->name= "Remove Actuator";
ot->description= "Remove a actuator from the active object";
@@ -516,7 +516,7 @@ static int actuator_add_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void LOGIC_OT_actuator_add(wmOperatorType *ot)
+static void LOGIC_OT_actuator_add(wmOperatorType *ot)
{
PropertyRNA *prop;
@@ -572,7 +572,7 @@ static int sensor_move_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event
return OPERATOR_CANCELLED;
}
-void LOGIC_OT_sensor_move(wmOperatorType *ot)
+static void LOGIC_OT_sensor_move(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Move Sensor";
@@ -617,7 +617,7 @@ static int controller_move_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(e
return OPERATOR_CANCELLED;
}
-void LOGIC_OT_controller_move(wmOperatorType *ot)
+static void LOGIC_OT_controller_move(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Move Controller";
@@ -662,7 +662,7 @@ static int actuator_move_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(eve
return OPERATOR_CANCELLED;
}
-void LOGIC_OT_actuator_move(wmOperatorType *ot)
+static void LOGIC_OT_actuator_move(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Move Actuator";
diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c
index ae533e80610..40206a314e8 100644
--- a/source/blender/editors/space_logic/logic_window.c
+++ b/source/blender/editors/space_logic/logic_window.c
@@ -356,7 +356,7 @@ static void old_sca_move_actuator(bContext *C, void *datav, void *move_up)
}
}
-void do_logic_buts(bContext *C, void *UNUSED(arg), int event)
+static void do_logic_buts(bContext *C, void *UNUSED(arg), int event)
{
Main *bmain= CTX_data_main(C);
bSensor *sens;
@@ -1786,13 +1786,13 @@ static void change_ipo_actuator(bContext *UNUSED(C), void *arg1_but, void *arg2_
but->retval = B_REDR;
}
-void update_object_actuator_PID(bContext *UNUSED(C), void *act, void *UNUSED(arg))
+static void update_object_actuator_PID(bContext *UNUSED(C), void *act, void *UNUSED(arg))
{
bObjectActuator *oa = act;
oa->forcerot[0] = 60.0f*oa->forcerot[1];
}
-char *get_state_name(Object *ob, short bit)
+static char *get_state_name(Object *ob, short bit)
{
bController *cont;
unsigned int mask;
@@ -3480,7 +3480,7 @@ static void draw_sensor_touch(uiLayout *layout, PointerRNA *ptr)
uiItemR(layout, ptr, "material", 0, NULL, ICON_NULL);
}
-void draw_brick_sensor(uiLayout *layout, PointerRNA *ptr, bContext *C)
+static void draw_brick_sensor(uiLayout *layout, PointerRNA *ptr, bContext *C)
{
uiLayout *box;
@@ -3600,7 +3600,7 @@ static void draw_controller_state(uiLayout *UNUSED(layout), PointerRNA *UNUSED(p
}
-void draw_brick_controller(uiLayout *layout, PointerRNA *ptr)
+static void draw_brick_controller(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *box;
@@ -4355,7 +4355,7 @@ static void draw_actuator_visibility(uiLayout *layout, PointerRNA *ptr)
uiItemR(row, ptr, "apply_to_children", 0, NULL, ICON_NULL);
}
-void draw_brick_actuator(uiLayout *layout, PointerRNA *ptr, bContext *C)
+static void draw_brick_actuator(uiLayout *layout, PointerRNA *ptr, bContext *C)
{
uiLayout *box;
diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c
index a945af502a0..516130aa09b 100644
--- a/source/blender/editors/space_logic/space_logic.c
+++ b/source/blender/editors/space_logic/space_logic.c
@@ -39,6 +39,7 @@
#include "BKE_context.h"
#include "BKE_screen.h"
+#include "ED_space_api.h"
#include "ED_screen.h"
#include "BIF_gl.h"
@@ -169,13 +170,13 @@ static SpaceLink *logic_duplicate(SpaceLink *sl)
return (SpaceLink *)slogicn;
}
-void logic_operatortypes(void)
+static void logic_operatortypes(void)
{
WM_operatortype_append(LOGIC_OT_properties);
WM_operatortype_append(LOGIC_OT_links_cut);
}
-void logic_keymap(struct wmKeyConfig *keyconf)
+static void logic_keymap(struct wmKeyConfig *keyconf)
{
wmKeyMap *keymap= WM_keymap_find(keyconf, "Logic Editor", SPACE_LOGIC, 0);
diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c
index b70a6339fed..d43b86b436d 100644
--- a/source/blender/editors/space_nla/nla_edit.c
+++ b/source/blender/editors/space_nla/nla_edit.c
@@ -929,7 +929,7 @@ static int nlaedit_bake_exec (bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void NLA_OT_bake (wmOperatorType *ot)
+static void NLA_OT_bake (wmOperatorType *ot)
{
/* identifiers */
ot->name= "Bake Strips";
@@ -1555,7 +1555,7 @@ void NLA_OT_clear_scale (wmOperatorType *ot)
/* Moves the start-point of the selected strips to the specified places */
/* defines for snap keyframes tool */
-EnumPropertyItem prop_nlaedit_snap_types[] = {
+static EnumPropertyItem prop_nlaedit_snap_types[] = {
{NLAEDIT_SNAP_CFRA, "CFRA", 0, "Current frame", ""},
{NLAEDIT_SNAP_NEAREST_FRAME, "NEAREST_FRAME", 0, "Nearest Frame", ""}, // XXX as single entry?
{NLAEDIT_SNAP_NEAREST_SECOND, "NEAREST_SECOND", 0, "Nearest Second", ""}, // XXX as single entry?
diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h
index b2ff0e107b3..98ebc5af227 100644
--- a/source/blender/editors/space_nla/nla_intern.h
+++ b/source/blender/editors/space_nla/nla_intern.h
@@ -67,6 +67,7 @@ enum {
void NLA_OT_select_all_toggle(wmOperatorType *ot);
void NLA_OT_select_border(wmOperatorType *ot);
+void NLA_OT_select_leftright(wmOperatorType *ot);
void NLA_OT_click_select(wmOperatorType *ot);
/* **************************************** */
diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c
index 6a32f02c8ad..49c1733c37a 100644
--- a/source/blender/editors/space_nla/nla_ops.c
+++ b/source/blender/editors/space_nla/nla_ops.c
@@ -122,6 +122,7 @@ void nla_operatortypes(void)
WM_operatortype_append(NLA_OT_click_select);
WM_operatortype_append(NLA_OT_select_border);
WM_operatortype_append(NLA_OT_select_all_toggle);
+ WM_operatortype_append(NLA_OT_select_leftright);
/* edit */
WM_operatortype_append(NLA_OT_tweakmode_enter);
@@ -185,8 +186,17 @@ static void nla_keymap_main (wmKeyConfig *keyconf, wmKeyMap *keymap)
WM_keymap_add_item(keymap, "NLA_OT_click_select", SELECTMOUSE, KM_PRESS, 0, 0);
kmi= WM_keymap_add_item(keymap, "NLA_OT_click_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
RNA_boolean_set(kmi->ptr, "extend", 1);
- kmi= WM_keymap_add_item(keymap, "NLA_OT_click_select", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
- RNA_enum_set(kmi->ptr, "left_right", NLAEDIT_LRSEL_TEST);
+
+ /* select left/right */
+ WM_keymap_add_item(keymap, "NLA_OT_select_leftright", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
+ kmi= WM_keymap_add_item(keymap, "NLA_OT_select_leftright", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
+
+ kmi= WM_keymap_add_item(keymap, "NLA_OT_select_leftright", LEFTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set(kmi->ptr, "mode", NLAEDIT_LRSEL_LEFT);
+ kmi= WM_keymap_add_item(keymap, "NLA_OT_select_leftright", RIGHTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set(kmi->ptr, "mode", NLAEDIT_LRSEL_RIGHT);
+
/* deselect all */
WM_keymap_add_item(keymap, "NLA_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c
index 032f4984b83..40cc6fb0784 100644
--- a/source/blender/editors/space_nla/nla_select.c
+++ b/source/blender/editors/space_nla/nla_select.c
@@ -90,7 +90,7 @@ enum {
DESELECT_STRIPS_NOTEST = 0,
DESELECT_STRIPS_TEST,
DESELECT_STRIPS_CLEARACTIVE,
-} eDeselectNlaStrips;
+} /*eDeselectNlaStrips*/;
/* Deselects strips in the NLA Editor
* - This is called by the deselect all operator, as well as other ones!
@@ -199,18 +199,18 @@ void NLA_OT_select_all_toggle (wmOperatorType *ot)
/* ******************** Border Select Operator **************************** */
/* This operator currently works in one of three ways:
- * -> BKEY - 1) all strips within region are selected (ACTKEYS_BORDERSEL_ALLSTRIPS)
+ * -> BKEY - 1) all strips within region are selected (NLAEDIT_BORDERSEL_ALLSTRIPS)
* -> ALT-BKEY - depending on which axis of the region was larger...
- * -> 2) x-axis, so select all frames within frame range (ACTKEYS_BORDERSEL_FRAMERANGE)
- * -> 3) y-axis, so select all frames within channels that region included (ACTKEYS_BORDERSEL_CHANNELS)
+ * -> 2) x-axis, so select all frames within frame range (NLAEDIT_BORDERSEL_FRAMERANGE)
+ * -> 3) y-axis, so select all frames within channels that region included (NLAEDIT_BORDERSEL_CHANNELS)
*/
/* defines for borderselect mode */
-enum {
+static enum {
NLA_BORDERSEL_ALLSTRIPS = 0,
NLA_BORDERSEL_FRAMERANGE,
NLA_BORDERSEL_CHANNELS,
-} eActKeys_BorderSelect_Mode;
+} eNLAEDIT_BorderSelect_Mode;
static void borderselect_nla_strips (bAnimContext *ac, rcti rect, short mode, short selectmode)
@@ -340,28 +340,164 @@ void NLA_OT_select_border(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "axis_range", 0, "Axis Range", "");
}
-/* ******************** Mouse-Click Select Operator *********************** */
-/* This operator works in one of 2 ways:
- * 1) Select the strip directly under the mouse
- * 2) Select all the strips to one side of the mouse
- */
+/* ******************** Select Left/Right Operator ************************* */
+/* Select keyframes left/right of the current frame indicator */
/* defines for left-right select tool */
static EnumPropertyItem prop_nlaedit_leftright_select_types[] = {
{NLAEDIT_LRSEL_TEST, "CHECK", 0, "Check if Select Left or Right", ""},
- {NLAEDIT_LRSEL_NONE, "OFF", 0, "Don't select", ""},
{NLAEDIT_LRSEL_LEFT, "LEFT", 0, "Before current frame", ""},
{NLAEDIT_LRSEL_RIGHT, "RIGHT", 0, "After current frame", ""},
{0, NULL, 0, NULL, NULL}
};
-/* sensitivity factor for frame-selections */
-#define FRAME_CLICK_THRESH 0.1f
+/* ------------------- */
+static void nlaedit_select_leftright (bContext *C, bAnimContext *ac, short leftright, short select_mode)
+{
+ ListBase anim_data = {NULL, NULL};
+ bAnimListElem *ale;
+ int filter;
+
+ Scene *scene= ac->scene;
+ float xmin, xmax;
+
+ /* if currently in tweakmode, exit tweakmode first */
+ if (scene->flag & SCE_NLA_EDIT_ON)
+ WM_operator_name_call(C, "NLA_OT_tweakmode_exit", WM_OP_EXEC_DEFAULT, NULL);
+
+ /* if select mode is replace, deselect all keyframes (and channels) first */
+ if (select_mode==SELECT_REPLACE) {
+ select_mode= SELECT_ADD;
+
+ /* deselect all other channels and keyframes */
+ ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
+ deselect_nla_strips(ac, 0, SELECT_SUBTRACT);
+ }
+
+ /* get range, and get the right flag-setting mode */
+ if (leftright == NLAEDIT_LRSEL_LEFT) {
+ xmin = MINAFRAMEF;
+ xmax = (float)(CFRA + 0.1f);
+ }
+ else {
+ xmin = (float)(CFRA - 0.1f);
+ xmax = MAXFRAMEF;
+ }
+
+ select_mode= selmodes_to_flagmodes(select_mode);
+
+
+ /* filter data */
+ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS);
+ ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
+
+ /* select strips on the side where most data occurs */
+ for (ale= anim_data.first; ale; ale= ale->next) {
+ NlaTrack *nlt= (NlaTrack *)ale->data;
+ NlaStrip *strip;
+
+ /* check each strip to see if it is appropriate */
+ for (strip= nlt->strips.first; strip; strip= strip->next) {
+ if (BKE_nlastrip_within_bounds(strip, xmin, xmax)) {
+ ACHANNEL_SET_FLAG(strip, select_mode, NLASTRIP_FLAG_SELECT);
+ }
+ }
+ }
+
+ /* Cleanup */
+ BLI_freelistN(&anim_data);
+}
/* ------------------- */
-/* option 1) select strip directly under mouse */
+static int nlaedit_select_leftright_exec (bContext *C, wmOperator *op)
+{
+ bAnimContext ac;
+ short leftright = RNA_enum_get(op->ptr, "mode");
+ short selectmode;
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* select mode is either replace (deselect all, then add) or add/extend */
+ if (RNA_boolean_get(op->ptr, "extend"))
+ selectmode= SELECT_INVERT;
+ else
+ selectmode= SELECT_REPLACE;
+
+ /* if "test" mode is set, we don't have any info to set this with */
+ if (leftright == NLAEDIT_LRSEL_TEST)
+ return OPERATOR_CANCELLED;
+
+ /* do the selecting now */
+ nlaedit_select_leftright(C, &ac, leftright, selectmode);
+
+ /* set notifier that keyframe selection (and channels too) have changed */
+ WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME|ND_ANIMCHAN|NA_SELECTED, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+static int nlaedit_select_leftright_invoke (bContext *C, wmOperator *op, wmEvent *event)
+{
+ bAnimContext ac;
+ short leftright = RNA_enum_get(op->ptr, "mode");
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* handle mode-based testing */
+ if (leftright == NLAEDIT_LRSEL_TEST) {
+ Scene *scene= ac.scene;
+ ARegion *ar= ac.ar;
+ View2D *v2d= &ar->v2d;
+
+ int mval[2];
+ float x;
+
+ /* get mouse coordinates (in region coordinates) */
+ mval[0]= (event->x - ar->winrct.xmin);
+ mval[1]= (event->y - ar->winrct.ymin);
+
+ /* determine which side of the current frame mouse is on */
+ UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, NULL);
+ if (x < CFRA)
+ RNA_int_set(op->ptr, "mode", NLAEDIT_LRSEL_LEFT);
+ else
+ RNA_int_set(op->ptr, "mode", NLAEDIT_LRSEL_RIGHT);
+ }
+
+ /* perform selection */
+ return nlaedit_select_leftright_exec(C, op);
+}
+
+void NLA_OT_select_leftright (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Select Left/Right";
+ ot->idname= "NLA_OT_select_leftright";
+ ot->description= "Select strips to the left or the right of the current frame ";
+
+ /* api callbacks */
+ ot->invoke= nlaedit_select_leftright_invoke;
+ ot->exec= nlaedit_select_leftright_exec;
+ ot->poll= ED_operator_nla_active;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* id-props */
+ ot->prop= RNA_def_enum(ot->srna, "mode", prop_nlaedit_leftright_select_types, NLAEDIT_LRSEL_TEST, "Mode", "");
+ RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", "");
+}
+
+
+/* ******************** Mouse-Click Select Operator *********************** */
+
+/* select strip directly under mouse */
static void mouse_nla_strips (bContext *C, bAnimContext *ac, int mval[2], short select_mode)
{
ListBase anim_data = {NULL, NULL};
@@ -463,63 +599,6 @@ static void mouse_nla_strips (bContext *C, bAnimContext *ac, int mval[2], short
}
}
-/* Option 2) Selects all the strips on either side of the current frame (depends on which side the mouse is on) */
-static void nlaedit_mselect_leftright (bContext *C, bAnimContext *ac, short leftright, short select_mode)
-{
- ListBase anim_data = {NULL, NULL};
- bAnimListElem *ale;
- int filter;
-
- Scene *scene= ac->scene;
- float xmin, xmax;
-
- /* if currently in tweakmode, exit tweakmode first */
- if (scene->flag & SCE_NLA_EDIT_ON)
- WM_operator_name_call(C, "NLA_OT_tweakmode_exit", WM_OP_EXEC_DEFAULT, NULL);
-
- /* if select mode is replace, deselect all keyframes (and channels) first */
- if (select_mode==SELECT_REPLACE) {
- select_mode= SELECT_ADD;
-
- /* deselect all other channels and keyframes */
- ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
- deselect_nla_strips(ac, 0, SELECT_SUBTRACT);
- }
-
- /* get range, and get the right flag-setting mode */
- if (leftright == NLAEDIT_LRSEL_LEFT) {
- xmin = MINAFRAMEF;
- xmax = (float)(CFRA + FRAME_CLICK_THRESH);
- }
- else {
- xmin = (float)(CFRA - FRAME_CLICK_THRESH);
- xmax = MAXFRAMEF;
- }
-
- select_mode= selmodes_to_flagmodes(select_mode);
-
-
- /* filter data */
- filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS);
- ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
-
- /* select strips on the side where most data occurs */
- for (ale= anim_data.first; ale; ale= ale->next) {
- NlaTrack *nlt= (NlaTrack *)ale->data;
- NlaStrip *strip;
-
- /* check each strip to see if it is appropriate */
- for (strip= nlt->strips.first; strip; strip= strip->next) {
- if (BKE_nlastrip_within_bounds(strip, xmin, xmax)) {
- ACHANNEL_SET_FLAG(strip, select_mode, NLASTRIP_FLAG_SELECT);
- }
- }
- }
-
- /* Cleanup */
- BLI_freelistN(&anim_data);
-}
-
/* ------------------- */
/* handle clicking */
@@ -550,24 +629,9 @@ static int nlaedit_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even
selectmode= SELECT_INVERT;
else
selectmode= SELECT_REPLACE;
-
- /* figure out action to take */
- if (RNA_enum_get(op->ptr, "left_right")) {
- /* select all keys on same side of current frame as mouse */
- float x;
-
- UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, NULL);
- if (x < CFRA)
- RNA_int_set(op->ptr, "left_right", NLAEDIT_LRSEL_LEFT);
- else
- RNA_int_set(op->ptr, "left_right", NLAEDIT_LRSEL_RIGHT);
- nlaedit_mselect_leftright(C, &ac, RNA_enum_get(op->ptr, "left_right"), selectmode);
- }
- else {
- /* select strips based upon mouse position */
- mouse_nla_strips(C, &ac, mval, selectmode);
- }
+ /* select strips based upon mouse position */
+ mouse_nla_strips(C, &ac, mval, selectmode);
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION|ND_NLA|NA_SELECTED, NULL);
@@ -591,8 +655,6 @@ void NLA_OT_click_select (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* id-props */
- // XXX should we make this into separate operators?
- RNA_def_enum(ot->srna, "left_right", prop_nlaedit_leftright_select_types, 0, "Left Right", ""); // CTRLKEY
RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", ""); // SHIFTKEY
}
diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c
index db9255a867b..06b1b93b590 100644
--- a/source/blender/editors/space_nla/space_nla.c
+++ b/source/blender/editors/space_nla/space_nla.c
@@ -44,6 +44,7 @@
#include "BKE_main.h"
#include "BKE_screen.h"
+#include "ED_space_api.h"
#include "ED_anim_api.h"
#include "ED_markers.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index e1577309afa..203e6a618a5 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -150,10 +150,12 @@ static void node_buts_curvevec(uiLayout *layout, bContext *UNUSED(C), PointerRNA
}
static float *_sample_col= NULL; // bad bad, 2.5 will do better?
-void node_curvemap_sample(float *col)
+#if 0
+static void node_curvemap_sample(float *col)
{
_sample_col= col;
}
+#endif
static void node_buts_curvecol(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
{
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index b8a205d6eb1..7b9a33c521f 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -53,6 +53,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "ED_node.h"
#include "ED_gpencil.h"
#include "UI_interface.h"
@@ -664,8 +665,8 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
uiSetRoundBox(3);
uiRoundBox(rct->xmin, rct->ymax-NODE_DY, rct->xmax, rct->ymax, BASIS_RAD);
- /* show/hide icons, note this sequence is copied in editnode.c */
- iconofs= rct->xmax;
+ /* show/hide icons, note this sequence is copied in do_header_node() node_state.c */
+ iconofs= rct->xmax - 7.0f;
if(node->typeinfo->flag & NODE_PREVIEW) {
int icon_id;
@@ -674,7 +675,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
icon_id= ICON_MATERIAL;
else
icon_id= ICON_MATERIAL_DATA;
- iconofs-=22.0f;
+ iconofs-=15.0f;
uiDefIconBut(node->block, LABEL, B_REDR, icon_id, iconofs, rct->ymax-NODE_DY,
UI_UNIT_X, UI_UNIT_Y, NULL, 0.0, 0.0, 1.0, 0.5, "");
}
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index 624630b9846..385dfbcd9a8 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -210,7 +210,7 @@ static int composite_node_active(bContext *C)
}
/* also checks for edited groups */
-bNode *editnode_get_active(bNodeTree *ntree)
+static bNode *editnode_get_active(bNodeTree *ntree)
{
bNode *node;
@@ -1352,7 +1352,7 @@ void NODE_OT_link_viewer(wmOperatorType *ot)
/* return 0, nothing done */
-/*static*/ int node_mouse_groupheader(SpaceNode *snode)
+static int node_mouse_groupheader(SpaceNode *snode)
{
bNode *gnode;
float mx=0, my=0;
@@ -1481,7 +1481,7 @@ typedef struct bNodeListItem {
struct bNode *node;
} bNodeListItem;
-int sort_nodes_locx(void *a, void *b)
+static int sort_nodes_locx(void *a, void *b)
{
bNodeListItem *nli1 = (bNodeListItem *)a;
bNodeListItem *nli2 = (bNodeListItem *)b;
diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h
index 831e157deef..eb7e1209801 100644
--- a/source/blender/editors/space_node/node_intern.h
+++ b/source/blender/editors/space_node/node_intern.h
@@ -121,6 +121,8 @@ void NODE_OT_backimage_sample(wmOperatorType *ot);
void NODE_OT_add_file(struct wmOperatorType *ot);
+extern const char *node_context_dir[];
+
// XXXXXX
// XXX from BSE_node.h
diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c
index db5c493dcd9..9c2b6f0274d 100644
--- a/source/blender/editors/space_node/node_ops.c
+++ b/source/blender/editors/space_node/node_ops.c
@@ -31,6 +31,7 @@
#include "BKE_context.h"
+#include "ED_node.h"
#include "ED_screen.h"
#include "ED_transform.h"
diff --git a/source/blender/editors/space_node/node_state.c b/source/blender/editors/space_node/node_state.c
index 4f2f204fbe6..332080f023c 100644
--- a/source/blender/editors/space_node/node_state.c
+++ b/source/blender/editors/space_node/node_state.c
@@ -117,21 +117,21 @@ static int do_header_node(SpaceNode *snode, bNode *node, float mx, float my)
node->flag ^= NODE_PREVIEW;
return 1;
}
- totr.xmin-=18.0f;
+ totr.xmin-=15.0f;
}
if(node->type == NODE_GROUP) {
if(BLI_in_rctf(&totr, mx, my)) {
snode_make_group_editable(snode, node);
return 1;
}
- totr.xmin-=18.0f;
+ totr.xmin-=15.0f;
}
if(node->typeinfo->flag & NODE_OPTIONS) {
if(BLI_in_rctf(&totr, mx, my)) {
node->flag ^= NODE_OPTIONS;
return 1;
}
- totr.xmin-=18.0f;
+ totr.xmin-=15.0f;
}
/* hide unused sockets */
if(BLI_in_rctf(&totr, mx, my)) {
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 1ac745b8c0e..db4d02a776c 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -45,6 +45,7 @@
#include "BKE_screen.h"
#include "BKE_node.h"
+#include "ED_space_api.h"
#include "ED_render.h"
#include "ED_screen.h"
@@ -410,13 +411,14 @@ static void node_region_listener(ARegion *ar, wmNotifier *wmn)
}
}
+const char *node_context_dir[] = {"selected_nodes", NULL};
+
static int node_context(const bContext *C, const char *member, bContextDataResult *result)
{
SpaceNode *snode= CTX_wm_space_node(C);
if(CTX_data_dir(member)) {
- static const char *dir[] = {"selected_nodes", NULL};
- CTX_data_dir_set(result, dir);
+ CTX_data_dir_set(result, node_context_dir);
return 1;
}
else if(CTX_data_equals(member, "selected_nodes")) {
diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c
index 53aea610d42..b0b89716222 100644
--- a/source/blender/editors/space_outliner/outliner.c
+++ b/source/blender/editors/space_outliner/outliner.c
@@ -1189,7 +1189,7 @@ static void outliner_make_hierarchy(SpaceOops *soops, ListBase *lb)
}
/* Helped function to put duplicate sequence in the same tree. */
-int need_add_seq_dup(Sequence *seq)
+static int need_add_seq_dup(Sequence *seq)
{
Sequence *p;
@@ -1226,7 +1226,7 @@ int need_add_seq_dup(Sequence *seq)
return(1);
}
-void add_seq_dup(SpaceOops *soops, Sequence *seq, TreeElement *te, short index)
+static void add_seq_dup(SpaceOops *soops, Sequence *seq, TreeElement *te, short index)
{
TreeElement *ch;
Sequence *p;
@@ -1611,7 +1611,7 @@ static int common_restrict_check(bContext *C, Object *ob)
return 1;
}
-void object_toggle_visibility_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
+static void object_toggle_visibility_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
{
Base *base= (Base *)te->directdata;
Object *ob = (Object *)tselem->id;
@@ -1694,7 +1694,7 @@ void OUTLINER_OT_selectability_toggle(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-void object_toggle_renderability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
+static void object_toggle_renderability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
{
Base *base= (Base *)te->directdata;
@@ -1900,7 +1900,7 @@ static void outliner_open_reveal(SpaceOops *soops, ListBase *lb, TreeElement *te
#endif
// XXX just use View2D ops for this?
-void outliner_page_up_down(Scene *UNUSED(scene), ARegion *ar, SpaceOops *soops, int up)
+static void outliner_page_up_down(Scene *UNUSED(scene), ARegion *ar, SpaceOops *soops, int up)
{
int dy= ar->v2d.mask.ymax-ar->v2d.mask.ymin;
@@ -3416,7 +3416,7 @@ static void outliner_do_data_operation(SpaceOops *soops, int type, int event, Li
}
}
-void outliner_del(bContext *C, Scene *scene, ARegion *UNUSED(ar), SpaceOops *soops)
+static void outliner_del(bContext *C, Scene *scene, ARegion *UNUSED(ar), SpaceOops *soops)
{
if(soops->outlinevis==SO_SEQUENCE)
@@ -3965,7 +3965,7 @@ static void tree_element_to_path(SpaceOops *soops, TreeElement *te, TreeStoreEle
enum {
DRIVERS_EDITMODE_ADD = 0,
DRIVERS_EDITMODE_REMOVE,
-} eDrivers_EditModes;
+} /*eDrivers_EditModes*/;
/* Utilities ---------------------------------- */
@@ -4119,7 +4119,7 @@ void OUTLINER_OT_drivers_delete_selected(wmOperatorType *ot)
enum {
KEYINGSET_EDITMODE_ADD = 0,
KEYINGSET_EDITMODE_REMOVE,
-} eKeyingSet_EditModes;
+} /*eKeyingSet_EditModes*/;
/* Utilities ---------------------------------- */
diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c
index 0b941e910f8..66404287693 100644
--- a/source/blender/editors/space_outliner/space_outliner.c
+++ b/source/blender/editors/space_outliner/space_outliner.c
@@ -39,6 +39,7 @@
#include "BKE_context.h"
#include "BKE_screen.h"
+#include "ED_space_api.h"
#include "ED_screen.h"
#include "WM_api.h"
diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c
index d0631f5651a..502b01c366a 100644
--- a/source/blender/editors/space_script/space_script.c
+++ b/source/blender/editors/space_script/space_script.c
@@ -39,6 +39,7 @@
#include "BKE_context.h"
#include "BKE_screen.h"
+#include "ED_space_api.h"
#include "ED_screen.h"
#include "BIF_gl.h"
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index 635e261b26e..8b3240e91c8 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -70,8 +70,6 @@
/* Note, Dont use WHILE_SEQ while drawing! - it messes up transform, - Campbell */
-
-int no_rightbox=0, no_leftbox= 0;
static void draw_shadedstrip(Sequence *seq, unsigned char col[3], float x1, float y1, float x2, float y2);
static void get_seq_color3ubv(Scene *curscene, Sequence *seq, unsigned char col[3])
@@ -673,7 +671,7 @@ static void draw_seq_strip(Scene *scene, ARegion *ar, Sequence *seq, int outline
static Sequence *special_seq_update= 0;
-void set_special_seq_update(int val)
+static void set_special_seq_update(int val)
{
// int x;
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 505b38147f7..39a81e7481e 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -106,7 +106,7 @@ EnumPropertyItem prop_side_types[] = {
{0, NULL, 0, NULL, NULL}
};
-EnumPropertyItem prop_side_lr_types[] = {
+static EnumPropertyItem prop_side_lr_types[] = {
{SEQ_SIDE_LEFT, "LEFT", 0, "Left", ""},
{SEQ_SIDE_RIGHT, "RIGHT", 0, "Right", ""},
{0, NULL, 0, NULL, NULL}
@@ -121,28 +121,6 @@ typedef struct TransSeq {
int len;
} TransSeq;
-Sequence *get_foreground_frame_seq(Scene *scene, int frame)
-{
- Editing *ed= seq_give_editing(scene, FALSE);
- Sequence *seq, *best_seq=NULL;
- int best_machine = -1;
-
- if(!ed) return NULL;
-
- for (seq=ed->seqbasep->first; seq; seq= seq->next) {
- if(seq->flag & SEQ_MUTE || seq->startdisp > frame || seq->enddisp <= frame)
- continue;
- /* only use elements you can see - not */
- if (ELEM5(seq->type, SEQ_IMAGE, SEQ_META, SEQ_SCENE, SEQ_MOVIE, SEQ_COLOR)) {
- if (seq->machine > best_machine) {
- best_seq = seq;
- best_machine = seq->machine;
- }
- }
- }
- return best_seq;
-}
-
void seq_rectf(Sequence *seq, rctf *rectf)
{
if(seq->startstill) rectf->xmin= seq->start;
@@ -205,7 +183,7 @@ void boundbox_seq(Scene *scene, rctf *rect)
}
-int mouse_frame_side(View2D *v2d, short mouse_x, int frame )
+static int mouse_frame_side(View2D *v2d, short mouse_x, int frame )
{
short mval[2];
float mouseloc[2];
@@ -252,7 +230,7 @@ Sequence *find_neighboring_sequence(Scene *scene, Sequence *test, int lr, int se
return NULL;
}
-Sequence *find_next_prev_sequence(Scene *scene, Sequence *test, int lr, int sel)
+static Sequence *find_next_prev_sequence(Scene *scene, Sequence *test, int lr, int sel)
{
/* sel - 0==unselected, 1==selected, -1==done care*/
Sequence *seq,*best_seq = NULL;
@@ -506,7 +484,7 @@ static void reload_image_strip(Scene *scene, char *UNUSED(name))
}
-void change_sequence(Scene *scene)
+static void change_sequence(Scene *scene)
{
Editing *ed= seq_give_editing(scene, FALSE);
Sequence *last_seq= seq_active_get(scene);
@@ -952,7 +930,7 @@ static int cut_seq_list(Scene *scene, ListBase *old, ListBase *new, int cutframe
return did_something;
}
-int insert_gap(Scene *scene, int gap, int cfra)
+static int insert_gap(Scene *scene, int gap, int cfra)
{
Sequence *seq;
Editing *ed= seq_give_editing(scene, FALSE);
@@ -974,7 +952,7 @@ int insert_gap(Scene *scene, int gap, int cfra)
return done;
}
-void touch_seq_files(Scene *scene)
+static void touch_seq_files(Scene *scene)
{
Sequence *seq;
Editing *ed= seq_give_editing(scene, FALSE);
@@ -1029,7 +1007,7 @@ static void set_filter_seq(Scene *scene)
}
*/
-void seq_remap_paths(Scene *scene)
+static void seq_remap_paths(Scene *scene)
{
Sequence *seq, *last_seq = seq_active_get(scene);
Editing *ed= seq_give_editing(scene, FALSE);
@@ -1070,7 +1048,7 @@ void seq_remap_paths(Scene *scene)
}
-void no_gaps(Scene *scene)
+static void no_gaps(Scene *scene)
{
Editing *ed= seq_give_editing(scene, FALSE);
int cfra, first= 0, done;
@@ -1466,7 +1444,7 @@ static int sequencer_reassign_inputs_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-int sequencer_effect_poll(bContext *C)
+static int sequencer_effect_poll(bContext *C)
{
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, FALSE);
diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c
index a20d2d7680e..3b4312cda2b 100644
--- a/source/blender/editors/space_sequencer/sequencer_select.c
+++ b/source/blender/editors/space_sequencer/sequencer_select.c
@@ -60,7 +60,7 @@
#include "sequencer_intern.h"
static void *find_nearest_marker(int UNUSED(d1), int UNUSED(d2)) {return NULL;}
-void select_surrounding_handles(Scene *scene, Sequence *test) /* XXX BRING BACK */
+static void select_surrounding_handles(Scene *scene, Sequence *test) /* XXX BRING BACK */
{
Sequence *neighbor;
@@ -154,7 +154,7 @@ void select_surround_from_last(Scene *scene)
#endif
-void select_single_seq(Scene *scene, Sequence *seq, int deselect_all) /* BRING BACK */
+static void select_single_seq(Scene *scene, Sequence *seq, int deselect_all) /* BRING BACK */
{
Editing *ed= seq_give_editing(scene, FALSE);
@@ -176,8 +176,8 @@ void select_single_seq(Scene *scene, Sequence *seq, int deselect_all) /* BRING B
// remove this function, replace with invert operator
//void swap_select_seq(Scene *scene)
-
-void select_neighbor_from_last(Scene *scene, int lr)
+#if 0
+static void select_neighbor_from_last(Scene *scene, int lr)
{
Sequence *seq= seq_active_get(scene);
Sequence *neighbor;
@@ -206,7 +206,7 @@ void select_neighbor_from_last(Scene *scene, int lr)
if (change) {
}
}
-
+#endif
/* (de)select operator */
static int sequencer_deselect_exec(bContext *C, wmOperator *UNUSED(op))
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index ed280d765f0..5323c3d064e 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -43,6 +43,8 @@
#include "BKE_sequencer.h"
#include "BKE_global.h"
+#include "ED_space_api.h"
+#include "ED_sequencer.h"
#include "ED_screen.h"
#include "ED_view3d.h" /* only for sequencer view3d drawing callback */
@@ -83,7 +85,7 @@ ARegion *sequencer_has_buttons_region(ScrArea *sa)
return arnew;
}
-ARegion *sequencer_find_region(ScrArea *sa, short type)
+static ARegion *sequencer_find_region(ScrArea *sa, short type)
{
ARegion *ar=NULL;
diff --git a/source/blender/editors/space_sound/space_sound.c b/source/blender/editors/space_sound/space_sound.c
index 200f15f6109..4ae452850a7 100644
--- a/source/blender/editors/space_sound/space_sound.c
+++ b/source/blender/editors/space_sound/space_sound.c
@@ -41,6 +41,7 @@
#include "BKE_context.h"
#include "BKE_screen.h"
+#include "ED_space_api.h"
#include "ED_screen.h"
#include "BIF_gl.h"
@@ -165,12 +166,12 @@ static void sound_main_area_draw(const bContext *C, ARegion *ar)
/* scrollers? */
}
-void sound_operatortypes(void)
+static void sound_operatortypes(void)
{
}
-void sound_keymap(struct wmKeyConfig *UNUSED(keyconf))
+static void sound_keymap(struct wmKeyConfig *UNUSED(keyconf))
{
}
diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c
index 75001b9514c..8ed49b5945d 100644
--- a/source/blender/editors/space_text/space_text.c
+++ b/source/blender/editors/space_text/space_text.c
@@ -42,6 +42,7 @@
#include "BKE_context.h"
#include "BKE_screen.h"
+#include "ED_space_api.h"
#include "ED_screen.h"
#include "BIF_gl.h"
@@ -70,6 +71,7 @@ static SpaceLink *text_new(const bContext *UNUSED(C))
stext->lheight= 12;
stext->tabnumber= 4;
+ stext->margin_column= 80;
/* header */
ar= MEM_callocN(sizeof(ARegion), "header for text");
@@ -185,6 +187,7 @@ static void text_operatortypes(void)
WM_operatortype_append(TEXT_OT_select_line);
WM_operatortype_append(TEXT_OT_select_all);
+ WM_operatortype_append(TEXT_OT_select_word);
WM_operatortype_append(TEXT_OT_jump);
WM_operatortype_append(TEXT_OT_move);
@@ -192,6 +195,7 @@ static void text_operatortypes(void)
WM_operatortype_append(TEXT_OT_delete);
WM_operatortype_append(TEXT_OT_overwrite_toggle);
+ WM_operatortype_append(TEXT_OT_selection_set);
WM_operatortype_append(TEXT_OT_cursor_set);
WM_operatortype_append(TEXT_OT_scroll);
WM_operatortype_append(TEXT_OT_scroll_bar);
@@ -277,6 +281,10 @@ static void text_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "TEXT_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "TEXT_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "TEXT_OT_cut", DELKEY, KM_PRESS, KM_SHIFT, 0);
+ WM_keymap_add_item(keymap, "TEXT_OT_copy", INSERTKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "TEXT_OT_paste", INSERTKEY, KM_PRESS, KM_SHIFT, 0);
+
if(U.uiflag & USER_MMB_PASTE) // XXX not dynamic
RNA_boolean_set(WM_keymap_add_item(keymap, "TEXT_OT_paste", MIDDLEMOUSE, KM_PRESS, 0, 0)->ptr, "selection", 1);
@@ -287,9 +295,11 @@ static void text_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "TEXT_OT_replace", HKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "TEXT_OT_to_3d_object", MKEY, KM_PRESS, KM_ALT, 0);
+ RNA_boolean_set(WM_keymap_add_item(keymap, "TEXT_OT_to_3d_object", MKEY, KM_PRESS, KM_CTRL, 0)->ptr, "split_lines", 1);
WM_keymap_add_item(keymap, "TEXT_OT_select_all", AKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "TEXT_OT_select_line", AKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "TEXT_OT_select_word", LEFTMOUSE, KM_DBL_CLICK, 0, 0);
WM_keymap_add_item(keymap, "TEXT_OT_indent", TABKEY, KM_PRESS, 0, 0);
@@ -336,8 +346,9 @@ static void text_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "TEXT_OT_scroll", MIDDLEMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "TEXT_OT_scroll", MOUSEPAN, 0, 0, 0);
WM_keymap_add_item(keymap, "TEXT_OT_scroll_bar", LEFTMOUSE, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "TEXT_OT_selection_set", EVT_TWEAK_L, KM_ANY, 0, 0);
WM_keymap_add_item(keymap, "TEXT_OT_cursor_set", LEFTMOUSE, KM_PRESS, 0, 0);
- RNA_boolean_set(WM_keymap_add_item(keymap, "TEXT_OT_cursor_set", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "select", 1);
+ RNA_boolean_set(WM_keymap_add_item(keymap, "TEXT_OT_selection_set", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "select", 1);
RNA_int_set(WM_keymap_add_item(keymap, "TEXT_OT_scroll", WHEELUPMOUSE, KM_PRESS, 0, 0)->ptr, "lines", -1);
RNA_int_set(WM_keymap_add_item(keymap, "TEXT_OT_scroll", WHEELDOWNMOUSE, KM_PRESS, 0, 0)->ptr, "lines", 1);
@@ -350,13 +361,14 @@ static void text_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "TEXT_OT_insert", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); // last!
}
+const char *text_context_dir[] = {"edit_text", NULL};
+
static int text_context(const bContext *C, const char *member, bContextDataResult *result)
{
SpaceText *st= CTX_wm_space_text(C);
if(CTX_data_dir(member)) {
- static const char *dir[] = {"edit_text", NULL};
- CTX_data_dir_set(result, dir);
+ CTX_data_dir_set(result, text_context_dir);
return 1;
}
else if(CTX_data_equals(member, "edit_text")) {
diff --git a/source/blender/editors/space_text/text_draw.c b/source/blender/editors/space_text/text_draw.c
index 6f9ad138bac..b3e6920aa29 100644
--- a/source/blender/editors/space_text/text_draw.c
+++ b/source/blender/editors/space_text/text_draw.c
@@ -250,7 +250,7 @@ static int find_bool(char *string)
/* Ensures the format string for the given line is long enough, reallocating
as needed. Allocation is done here, alone, to ensure consistency. */
-int text_check_format_len(TextLine *line, unsigned int len)
+static int text_check_format_len(TextLine *line, unsigned int len)
{
if(line->format) {
if(strlen(line->format) < len) {
@@ -954,7 +954,7 @@ void text_free_caches(SpaceText *st)
/************************ word-wrap utilities *****************************/
/* cache should be updated in caller */
-int text_get_visible_lines_no(SpaceText *st, int lineno)
+static int text_get_visible_lines_no(SpaceText *st, int lineno)
{
DrawCache *drawcache= (DrawCache *)st->drawcache;
@@ -1779,6 +1779,15 @@ void draw_text_main(SpaceText *st, ARegion *ar)
wrap_skip= 0;
}
+ if(st->flags&ST_SHOW_MARGIN) {
+ UI_ThemeColor(TH_HILITE);
+
+ glBegin(GL_LINES);
+ glVertex2i(x+st->cwidth*st->margin_column, 0);
+ glVertex2i(x+st->cwidth*st->margin_column, ar->winy - 2);
+ glEnd();
+ }
+
/* draw other stuff */
draw_brackets(st, ar);
draw_markers(st, ar);
diff --git a/source/blender/editors/space_text/text_header.c b/source/blender/editors/space_text/text_header.c
index 1287f68dc04..3b04b056f4e 100644
--- a/source/blender/editors/space_text/text_header.c
+++ b/source/blender/editors/space_text/text_header.c
@@ -70,7 +70,7 @@
/************************** properties ******************************/
-ARegion *text_has_properties_region(ScrArea *sa)
+static ARegion *text_has_properties_region(ScrArea *sa)
{
ARegion *ar, *arnew;
diff --git a/source/blender/editors/space_text/text_intern.h b/source/blender/editors/space_text/text_intern.h
index 5f6b2e05ba7..f18a3245f9b 100644
--- a/source/blender/editors/space_text/text_intern.h
+++ b/source/blender/editors/space_text/text_intern.h
@@ -133,6 +133,7 @@ void TEXT_OT_previous_marker(struct wmOperatorType *ot);
void TEXT_OT_select_line(struct wmOperatorType *ot);
void TEXT_OT_select_all(struct wmOperatorType *ot);
+void TEXT_OT_select_word(struct wmOperatorType *ot);
void TEXT_OT_jump(struct wmOperatorType *ot);
void TEXT_OT_move(struct wmOperatorType *ot);
@@ -142,6 +143,7 @@ void TEXT_OT_overwrite_toggle(struct wmOperatorType *ot);
void TEXT_OT_scroll(struct wmOperatorType *ot);
void TEXT_OT_scroll_bar(struct wmOperatorType *ot);
+void TEXT_OT_selection_set(struct wmOperatorType *ot);
void TEXT_OT_cursor_set(struct wmOperatorType *ot);
void TEXT_OT_line_number(struct wmOperatorType *ot);
@@ -157,5 +159,8 @@ void TEXT_OT_to_3d_object(struct wmOperatorType *ot);
void TEXT_OT_resolve_conflict(struct wmOperatorType *ot);
+/* space_text.c */
+extern const char *text_context_dir[]; /* doc access */
+
#endif /* ED_TEXT_INTERN_H */
diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c
index bfec734dad6..d8cbe93012d 100644
--- a/source/blender/editors/space_text/text_ops.c
+++ b/source/blender/editors/space_text/text_ops.c
@@ -52,6 +52,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "ED_text.h"
#include "ED_curve.h"
#include "ED_screen.h"
#include "UI_interface.h"
@@ -1228,11 +1229,38 @@ void TEXT_OT_select_line(wmOperatorType *ot)
ot->idname= "TEXT_OT_select_line";
ot->description= "Select text by line";
- /* api clinebacks */
+ /* api callbacks */
ot->exec= select_line_exec;
ot->poll= text_edit_poll;
}
+/******************* select word operator *********************/
+
+static int select_word_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Text *text= CTX_data_edit_text(C);
+
+ txt_jump_left(text, 0);
+ txt_jump_right(text, 1);
+
+ text_update_cursor_moved(C);
+ WM_event_add_notifier(C, NC_TEXT|NA_EDITED, text);
+
+ return OPERATOR_FINISHED;
+}
+
+void TEXT_OT_select_word(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Select Word";
+ ot->idname= "TEXT_OT_select_word";
+ ot->description= "Select word under cursor";
+
+ /* api callbacks */
+ ot->exec= select_word_exec;
+ ot->poll= text_edit_poll;
+}
+
/******************* previous marker operator *********************/
static int previous_marker_exec(bContext *C, wmOperator *UNUSED(op))
@@ -2012,7 +2040,7 @@ enum {
SCROLLHANDLE_BAR,
SCROLLHANDLE_MIN_OUTSIDE,
SCROLLHANDLE_MAX_OUTSIDE
-} TextScrollerHandle_Zone;
+};
typedef struct TextScroll {
short old[2];
@@ -2285,13 +2313,13 @@ void TEXT_OT_scroll_bar(wmOperatorType *ot)
RNA_def_int(ot->srna, "lines", 1, INT_MIN, INT_MAX, "Lines", "Number of lines to scroll.", -100, 100);
}
-/******************* set cursor operator **********************/
+/******************* set selection operator **********************/
-typedef struct SetCursor {
+typedef struct SetSelection {
int selecting;
int selc, sell;
short old[2];
-} SetCursor;
+} SetSelection;
static void set_cursor_to_pos(SpaceText *st, ARegion *ar, int x, int y, int sel)
{
@@ -2457,10 +2485,10 @@ static void set_cursor_apply(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceText *st= CTX_wm_space_text(C);
ARegion *ar= CTX_wm_region(C);
- SetCursor *scu= op->customdata;
+ SetSelection *ssel= op->customdata;
if(event->mval[1]<0 || event->mval[1]>ar->winy) {
- int d= (scu->old[1]-event->mval[1])*st->pix_per_line;
+ int d= (ssel->old[1]-event->mval[1])*st->pix_per_line;
if(d) screen_skip(st, ar, d);
set_cursor_to_pos(st, ar, event->mval[0], event->mval[1]<0?0:ar->winy, 1);
@@ -2484,8 +2512,8 @@ static void set_cursor_apply(bContext *C, wmOperator *op, wmEvent *event)
text_update_cursor_moved(C);
WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
- scu->old[0]= event->mval[0];
- scu->old[1]= event->mval[1];
+ ssel->old[0]= event->mval[0];
+ ssel->old[1]= event->mval[1];
}
}
@@ -2493,7 +2521,7 @@ static void set_cursor_exit(bContext *C, wmOperator *op)
{
SpaceText *st= CTX_wm_space_text(C);
Text *text= st->text;
- SetCursor *scu= op->customdata;
+ SetSelection *ssel= op->customdata;
int linep2, charp2;
char *buffer;
@@ -2506,44 +2534,29 @@ static void set_cursor_exit(bContext *C, wmOperator *op)
linep2= txt_get_span(st->text->lines.first, st->text->sell);
charp2= st->text->selc;
- if(scu->sell!=linep2 || scu->selc!=charp2)
- txt_undo_add_toop(st->text, UNDO_STO, scu->sell, scu->selc, linep2, charp2);
+ if(ssel->sell!=linep2 || ssel->selc!=charp2)
+ txt_undo_add_toop(st->text, UNDO_STO, ssel->sell, ssel->selc, linep2, charp2);
text_update_cursor_moved(C);
WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
- MEM_freeN(scu);
+ MEM_freeN(ssel);
}
-static int set_cursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
+static int set_selection_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceText *st= CTX_wm_space_text(C);
- ARegion *ar= CTX_wm_region(C);
- SetCursor *scu;
-
- op->customdata= MEM_callocN(sizeof(SetCursor), "SetCursor");
- scu= op->customdata;
- scu->selecting= RNA_boolean_get(op->ptr, "select");
+ SetSelection *ssel;
- scu->old[0]= event->mval[0];
- scu->old[1]= event->mval[1];
+ op->customdata= MEM_callocN(sizeof(SetSelection), "SetCursor");
+ ssel= op->customdata;
+ ssel->selecting= RNA_boolean_get(op->ptr, "select");
- if(!scu->selecting) {
- int curl= txt_get_span(st->text->lines.first, st->text->curl);
- int curc= st->text->curc;
- int linep2, charp2;
-
- set_cursor_to_pos(st, ar, event->mval[0], event->mval[1], 0);
-
- linep2= txt_get_span(st->text->lines.first, st->text->curl);
- charp2= st->text->selc;
-
- if(curl!=linep2 || curc!=charp2)
- txt_undo_add_toop(st->text, UNDO_CTO, curl, curc, linep2, charp2);
- }
+ ssel->old[0]= event->mval[0];
+ ssel->old[1]= event->mval[1];
- scu->sell= txt_get_span(st->text->lines.first, st->text->sell);
- scu->selc= st->text->selc;
+ ssel->sell= txt_get_span(st->text->lines.first, st->text->sell);
+ ssel->selc= st->text->selc;
WM_event_add_modal_handler(C, op);
@@ -2552,7 +2565,7 @@ static int set_cursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_RUNNING_MODAL;
}
-static int set_cursor_modal(bContext *C, wmOperator *op, wmEvent *event)
+static int set_selection_modal(bContext *C, wmOperator *op, wmEvent *event)
{
switch(event->type) {
case LEFTMOUSE:
@@ -2568,27 +2581,81 @@ static int set_cursor_modal(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_RUNNING_MODAL;
}
-static int set_cursor_cancel(bContext *C, wmOperator *op)
+static int set_selection_cancel(bContext *C, wmOperator *op)
{
set_cursor_exit(C, op);
return OPERATOR_FINISHED;
}
+void TEXT_OT_selection_set(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Set Selection";
+ ot->idname= "TEXT_OT_selection_set";
+ ot->description= "Set cursor selection";
+
+ /* api callbacks */
+ ot->invoke= set_selection_invoke;
+ ot->modal= set_selection_modal;
+ ot->cancel= set_selection_cancel;
+ ot->poll= text_region_edit_poll;
+
+ /* properties */
+ RNA_def_boolean(ot->srna, "select", 0, "Select", "Set selection end rather than cursor.");
+}
+
+/******************* set cursor operator **********************/
+
+static int set_cursor_exec(bContext *C, wmOperator *op)
+{
+ SpaceText *st= CTX_wm_space_text(C);
+ Text *text= st->text;
+ ARegion *ar= CTX_wm_region(C);
+ int x= RNA_int_get(op->ptr, "x");
+ int y= RNA_int_get(op->ptr, "y");
+ int oldl, oldc;
+
+ oldl= txt_get_span(text->lines.first, text->curl);
+ oldc= text->curc;
+
+ set_cursor_to_pos(st, ar, x, y, 0);
+
+ txt_undo_add_toop(text, UNDO_CTO, oldl, oldc, txt_get_span(text->lines.first, text->curl), text->curc);
+
+ text_update_cursor_moved(C);
+ WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
+
+ return OPERATOR_PASS_THROUGH;
+}
+
+static int set_cursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ SpaceText *st= CTX_wm_space_text(C);
+
+ if(event->mval[0]>=st->txtbar.xmin)
+ return OPERATOR_PASS_THROUGH;
+
+ RNA_int_set(op->ptr, "x", event->mval[0]);
+ RNA_int_set(op->ptr, "y", event->mval[1]);
+
+ return set_cursor_exec(C, op);
+}
+
void TEXT_OT_cursor_set(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set Cursor";
ot->idname= "TEXT_OT_cursor_set";
- ot->description= "Set cursor selection";
-
+ ot->description= "Set cursor position";
+
/* api callbacks */
ot->invoke= set_cursor_invoke;
- ot->modal= set_cursor_modal;
- ot->cancel= set_cursor_cancel;
+ ot->exec= set_cursor_exec;
ot->poll= text_region_edit_poll;
/* properties */
- RNA_def_boolean(ot->srna, "select", 0, "Select", "Set selection end rather than cursor.");
+ RNA_def_boolean(ot->srna, "x", 0, "X", "X-coordinate to set cursor to.");
+ RNA_def_boolean(ot->srna, "y", 0, "Y", "X-coordinate to set cursor to.");
}
/******************* line number operator **********************/
diff --git a/source/blender/editors/space_text/text_python.c b/source/blender/editors/space_text/text_python.c
index e6f201e4147..a0d3264aa0d 100644
--- a/source/blender/editors/space_text/text_python.c
+++ b/source/blender/editors/space_text/text_python.c
@@ -187,7 +187,7 @@ static void confirm_suggestion(Text *text, int skipleft)
// XXX
static int doc_scroll= 0;
-short do_texttools(SpaceText *st, char ascii, unsigned short evnt, short val)
+static short do_texttools(SpaceText *st, char ascii, unsigned short evnt, short val)
{
ARegion *ar= NULL; // XXX
int qual= 0; // XXX
@@ -370,7 +370,7 @@ short do_texttools(SpaceText *st, char ascii, unsigned short evnt, short val)
; // XXX redraw_alltext();
#endif
-short do_textmarkers(SpaceText *st, char ascii, unsigned short evnt, short val)
+static short do_textmarkers(SpaceText *st, char ascii, unsigned short evnt, short val)
{
Text *text;
TextMarker *marker, *mrk, *nxt;
diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c
index f05cb860d6f..f879b2b996d 100644
--- a/source/blender/editors/space_time/space_time.c
+++ b/source/blender/editors/space_time/space_time.c
@@ -56,6 +56,7 @@
#include "UI_resources.h"
#include "UI_view2d.h"
+#include "ED_space_api.h"
#include "ED_markers.h"
#include "time_intern.h"
diff --git a/source/blender/editors/space_time/time_ops.c b/source/blender/editors/space_time/time_ops.c
index 5bc59f06a19..167eabcdd08 100644
--- a/source/blender/editors/space_time/time_ops.c
+++ b/source/blender/editors/space_time/time_ops.c
@@ -41,6 +41,8 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "time_intern.h"
+
/* ****************** Start/End Frame Operators *******************************/
static int time_set_sfra_exec (bContext *C, wmOperator *UNUSED(op))
@@ -67,7 +69,7 @@ static int time_set_sfra_exec (bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void TIME_OT_start_frame_set (wmOperatorType *ot)
+static void TIME_OT_start_frame_set (wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set Start Frame";
@@ -107,7 +109,7 @@ static int time_set_efra_exec (bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void TIME_OT_end_frame_set (wmOperatorType *ot)
+static void TIME_OT_end_frame_set (wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set End Frame";
@@ -149,7 +151,7 @@ static int time_view_all_exec (bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void TIME_OT_view_all (wmOperatorType *ot)
+static void TIME_OT_view_all (wmOperatorType *ot)
{
/* identifiers */
ot->name= "View All";
diff --git a/source/blender/editors/space_userpref/space_userpref.c b/source/blender/editors/space_userpref/space_userpref.c
index 6f155fc3b99..486713ab890 100644
--- a/source/blender/editors/space_userpref/space_userpref.c
+++ b/source/blender/editors/space_userpref/space_userpref.c
@@ -39,6 +39,7 @@
#include "BKE_screen.h"
#include "ED_screen.h"
+#include "ED_space_api.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -107,11 +108,11 @@ static void userpref_main_area_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, 1, NULL, -1);
}
-void userpref_operatortypes(void)
+static void userpref_operatortypes(void)
{
}
-void userpref_keymap(struct wmKeyConfig *UNUSED(keyconf))
+static void userpref_keymap(struct wmKeyConfig *UNUSED(keyconf))
{
}
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index 5c2adc10d85..59d9d1bb0b4 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -562,7 +562,7 @@ static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmoot
return 1;
}
-void draw_mesh_text(Scene *scene, Object *ob, int glsl)
+static void draw_mesh_text(Scene *scene, Object *ob, int glsl)
{
Mesh *me = ob->data;
DerivedMesh *ddm;
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index c90c301b6d1..df431f06ef6 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -5306,7 +5306,8 @@ static void draw_box(float vec[8][3])
}
/* uses boundbox, function used by Ketsji */
-void get_local_bounds(Object *ob, float *center, float *size)
+#if 0
+static void get_local_bounds(Object *ob, float *center, float *size)
{
BoundBox *bb= object_get_boundbox(ob);
@@ -5324,8 +5325,7 @@ void get_local_bounds(Object *ob, float *center, float *size)
center[2]= (bb->vec[0][2] + bb->vec[1][2])/2.0;
}
}
-
-
+#endif
static void draw_bb_quadric(BoundBox *bb, short type)
{
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index f7ccebda6ae..ef2fa693cb1 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -951,6 +951,11 @@ static void space_view3d_listener(struct ScrArea *sa, struct wmNotifier *wmn)
#endif
}
+const char *view3d_context_dir[] = {
+ "selected_objects", "selected_bases", "selected_editable_objects",
+ "selected_editable_bases", "visible_objects", "visible_bases", "selectable_objects", "selectable_bases",
+ "active_base", "active_object", NULL};
+
static int view3d_context(const bContext *C, const char *member, bContextDataResult *result)
{
View3D *v3d= CTX_wm_view3d(C);
@@ -959,12 +964,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes
unsigned int lay = v3d ? v3d->lay:scene->lay; /* fallback to the scene layer, allows duplicate and other oject operators to run outside the 3d view */
if(CTX_data_dir(member)) {
- static const char *dir[] = {
- "selected_objects", "selected_bases", "selected_editable_objects",
- "selected_editable_bases", "visible_objects", "visible_bases", "selectable_objects", "selectable_bases",
- "active_base", "active_object", NULL};
-
- CTX_data_dir_set(result, dir);
+ CTX_data_dir_set(result, view3d_context_dir);
}
else if(CTX_data_equals(member, "selected_objects") || CTX_data_equals(member, "selected_bases")) {
int selected_objects= CTX_data_equals(member, "selected_objects");
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c
index cefe0254ae4..e880e4c3610 100644
--- a/source/blender/editors/space_view3d/view3d_buttons.c
+++ b/source/blender/editors/space_view3d/view3d_buttons.c
@@ -925,6 +925,7 @@ static void v3d_posearmature_buts(uiLayout *layout, Object *ob)
}
/* assumes armature editmode */
+#if 0
static void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev)
{
EditBone *eBone= bonev;
@@ -939,6 +940,7 @@ static void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev)
ED_armature_bone_rename(CTX_data_edit_object(C)->data, oldname, newname); // editarmature.c
WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, CTX_data_edit_object(C)); // XXX fix
}
+#endif
static void v3d_editarmature_buts(uiLayout *layout, Object *ob)
{
@@ -1199,16 +1201,6 @@ static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, ob);
}
-static void removeTransformOrientation_func(bContext *C, void *target, void *UNUSED(arg))
-{
- BIF_removeTransformOrientation(C, (TransformOrientation *) target);
-}
-
-static void selectTransformOrientation_func(bContext *C, void *target, void *UNUSED(arg))
-{
- BIF_selectTransformOrientation(C, (TransformOrientation *) target);
-}
-
static void view3d_panel_object(const bContext *C, Panel *pa)
{
uiBlock *block;
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 58adb9aad43..006605b08f9 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -917,6 +917,7 @@ void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, Vi
}
}
+/* sets the view to 1:1 camera/render-pixel */
static void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar)
{
RegionView3D *rv3d= ar->regiondata;
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 76bd590bd3c..7842707d7e8 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -1879,7 +1879,7 @@ static void axis_set_view(bContext *C, float q1, float q2, float q3, float q4, s
float twmat[3][3];
/* same as transform manipulator when normal is set */
- ED_getTransformOrientationMatrix(C, twmat, TRUE);
+ ED_getTransformOrientationMatrix(C, twmat, FALSE);
mat3_to_quat( obact_quat,twmat);
invert_qt(obact_quat);
@@ -2776,7 +2776,7 @@ int view_autodist_depth_segment(struct ARegion *ar, short mval_sta[2], short mva
// speed and os, i changed the scaling values, but
// those are still not ok
-
+#if 0
static float ndof_axis_scale[6] = {
+0.01, // Tx
+0.01, // Tz
@@ -2799,7 +2799,6 @@ static void filterNDOFvalues(float *sbval)
sbval[i]=0.0;
}
-#if 0
// statics for controlling rv3d->dist corrections.
// viewmoveNDOF zeros and adjusts rv3d->ofs.
// viewmove restores based on dz_flag state.
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 2ee4f7a9e55..2656127d73c 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -139,10 +139,11 @@ static void handle_view3d_lock(bContext *C)
static int view3d_layers_exec(bContext *C, wmOperator *op)
{
- Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
ScrArea *sa= CTX_wm_area(C);
View3D *v3d= sa->spacedata.first;
+ Base *base;
+ int oldlay= v3d->lay;
int nr= RNA_int_get(op->ptr, "nr");
int toggle= RNA_boolean_get(op->ptr, "toggle");
@@ -200,8 +201,14 @@ static int view3d_layers_exec(bContext *C, wmOperator *op)
if(v3d->scenelock) handle_view3d_lock(C);
- /* new layers might need unflushed events events */
- DAG_scene_update_flags(bmain, scene, v3d->lay, FALSE); /* tags all that moves and flushes */
+ /* XXX new layers might need updates, there is no provision yet to detect if that's needed */
+ oldlay= ~oldlay & v3d->lay;
+ for (base= scene->base.first; base; base= base->next) {
+ if(base->lay & oldlay)
+ base->object->recalc= OB_RECALC_OB|OB_RECALC_DATA;
+ if(base->lay & oldlay)
+ printf("recalc %s\n", base->object->id.name+2);
+ }
ED_area_tag_redraw(sa);
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 0f1fe2fba07..b7efa7fced7 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -187,6 +187,8 @@ void VIEW3D_OT_snap_cursor_to_active(struct wmOperatorType *ot);
ARegion *view3d_has_buttons_region(ScrArea *sa);
ARegion *view3d_has_tools_region(ScrArea *sa);
+extern const char *view3d_context_dir[]; /* doc access */
+
/* draw_volume.c */
void draw_volume(struct ARegion *ar, struct GPUTexture *tex, float *min, float *max, int res[3], float dx, struct GPUTexture *tex_shadow);
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index e95361c0d91..0d5b79260e8 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -1379,12 +1379,14 @@ static void drawTransformView(const struct bContext *C, struct ARegion *UNUSED(a
drawSnapping(C, t);
}
+#if 0
static void drawTransformPixel(const struct bContext *UNUSED(C), struct ARegion *UNUSED(ar), void *UNUSED(arg))
{
// TransInfo *t = arg;
//
// drawHelpline(C, t->mval[0], t->mval[1], t);
}
+#endif
void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
{
@@ -2202,7 +2204,7 @@ static void constraintSizeLim(TransInfo *t, TransData *td)
/* ************************** WARP *************************** */
-void postInputWarp(TransInfo *t, float values[3])
+static void postInputWarp(TransInfo *t, float values[3])
{
mul_v3_fl(values, (float)(M_PI * 2));
@@ -2371,7 +2373,7 @@ int Warp(TransInfo *t, short UNUSED(mval[2]))
/* ************************** SHEAR *************************** */
-void postInputShear(TransInfo *UNUSED(t), float values[3])
+static void postInputShear(TransInfo *UNUSED(t), float values[3])
{
mul_v3_fl(values, 0.05f);
}
@@ -2857,7 +2859,7 @@ int ToSphere(TransInfo *t, short UNUSED(mval[2]))
/* ************************** ROTATION *************************** */
-void postInputRotation(TransInfo *t, float values[3])
+static void postInputRotation(TransInfo *t, float values[3])
{
if ((t->con.mode & CON_APPLY) && t->con.applyRot) {
t->con.applyRot(t, NULL, t->axis, values);
@@ -5890,9 +5892,9 @@ void BIF_TransformSetUndo(char *UNUSED(str))
}
-void NDofTransform(void)
-{
#if 0 // TRANSFORM_FIX_ME
+static void NDofTransform(void)
+{
float fval[7];
float maxval = 50.0f; // also serves as threshold
int axis = -1;
@@ -5937,5 +5939,5 @@ void NDofTransform(void)
initTransform(mode, CTX_NDOF);
Transform();
}
-#endif
}
+#endif
diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c
index d5700db8c57..23899398921 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -69,7 +69,7 @@
static void drawObjectConstraint(TransInfo *t);
/* ************************** CONSTRAINTS ************************* */
-void constraintAutoValues(TransInfo *t, float vec[3])
+static void constraintAutoValues(TransInfo *t, float vec[3])
{
int mode = t->con.mode;
if (mode & CON_APPLY)
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index bbadce5369d..dbed27e95a1 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -1359,7 +1359,7 @@ static void calc_distanceCurveVerts(TransData *head, TransData *tail) {
}
/* Utility function for getting the handle data from bezier's */
-TransDataCurveHandleFlags *initTransDataCurveHandles(TransData *td, struct BezTriple *bezt) {
+static TransDataCurveHandleFlags *initTransDataCurveHandles(TransData *td, struct BezTriple *bezt) {
TransDataCurveHandleFlags *hdata;
td->flag |= TD_BEZTRIPLE;
hdata = td->hdata = MEM_mallocN(sizeof(TransDataCurveHandleFlags), "CuHandle Data");
@@ -1941,7 +1941,8 @@ static void VertsToTransData(TransInfo *t, TransData *td, EditMesh *em, EditVert
}
}
-void createTransBMeshVerts(TransInfo *t, BME_Mesh *bm, BME_TransData_Head *td) {
+#if 0
+static void createTransBMeshVerts(TransInfo *t, BME_Mesh *bm, BME_TransData_Head *td) {
BME_Vert *v;
BME_TransData *vtd;
TransData *tob;
@@ -1965,6 +1966,7 @@ void createTransBMeshVerts(TransInfo *t, BME_Mesh *bm, BME_TransData_Head *td) {
* (i.e. we can't depend on td->len to determine the number of actual elements) */
t->total = i;
}
+#endif
static void createTransEditVerts(bContext *C, TransInfo *t)
{
@@ -5106,7 +5108,7 @@ static void NodeToTransData(TransData *td, TransData2D *td2d, bNode *node)
unit_m3(td->smtx);
}
-void createTransNodeData(bContext *C, TransInfo *t)
+static void createTransNodeData(bContext *C, TransInfo *t)
{
TransData *td;
TransData2D *td2d;
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 85a7526b7b4..8f7c1001fe8 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -1318,7 +1318,7 @@ void calculateCenterCursor2D(TransInfo *t)
calculateCenter2D(t);
}
-void calculateCenterCursorGraph2D(TransInfo *t)
+static void calculateCenterCursorGraph2D(TransInfo *t)
{
SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first;
Scene *scene= t->scene;
diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c
index a06e5ab21e6..6a9f89362f1 100644
--- a/source/blender/editors/transform/transform_input.c
+++ b/source/blender/editors/transform/transform_input.c
@@ -38,7 +38,7 @@
/* ************************** INPUT FROM MOUSE *************************** */
-void InputVector(TransInfo *t, MouseInput *mi, short mval[2], float output[3])
+static void InputVector(TransInfo *t, MouseInput *mi, short mval[2], float output[3])
{
float vec[3], dvec[3];
if(mi->precision)
@@ -56,7 +56,7 @@ void InputVector(TransInfo *t, MouseInput *mi, short mval[2], float output[3])
}
-void InputSpring(TransInfo *UNUSED(t), MouseInput *mi, short mval[2], float output[3])
+static void InputSpring(TransInfo *UNUSED(t), MouseInput *mi, short mval[2], float output[3])
{
float ratio, precise_ratio, dx, dy;
if(mi->precision)
@@ -82,7 +82,7 @@ void InputSpring(TransInfo *UNUSED(t), MouseInput *mi, short mval[2], float outp
output[0] = ratio;
}
-void InputSpringFlip(TransInfo *t, MouseInput *mi, short mval[2], float output[3])
+static void InputSpringFlip(TransInfo *t, MouseInput *mi, short mval[2], float output[3])
{
InputSpring(t, mi, mval, output);
@@ -94,7 +94,7 @@ void InputSpringFlip(TransInfo *t, MouseInput *mi, short mval[2], float output[3
}
}
-void InputTrackBall(TransInfo *UNUSED(t), MouseInput *mi, short mval[2], float output[3])
+static void InputTrackBall(TransInfo *UNUSED(t), MouseInput *mi, short mval[2], float output[3])
{
if(mi->precision)
@@ -112,7 +112,7 @@ void InputTrackBall(TransInfo *UNUSED(t), MouseInput *mi, short mval[2], float o
output[1] *= mi->factor;
}
-void InputHorizontalRatio(TransInfo *t, MouseInput *mi, short mval[2], float output[3]) {
+static void InputHorizontalRatio(TransInfo *t, MouseInput *mi, short mval[2], float output[3]) {
float x, pad;
pad = t->ar->winx / 10;
@@ -129,7 +129,7 @@ void InputHorizontalRatio(TransInfo *t, MouseInput *mi, short mval[2], float out
output[0] = (x - pad) / (t->ar->winx - 2 * pad);
}
-void InputHorizontalAbsolute(TransInfo *t, MouseInput *mi, short mval[2], float output[3]) {
+static void InputHorizontalAbsolute(TransInfo *t, MouseInput *mi, short mval[2], float output[3]) {
float vec[3];
InputVector(t, mi, mval, vec);
@@ -138,7 +138,7 @@ void InputHorizontalAbsolute(TransInfo *t, MouseInput *mi, short mval[2], float
output[0] = dot_v3v3(t->viewinv[0], vec) * 2.0f;
}
-void InputVerticalRatio(TransInfo *t, MouseInput *mi, short mval[2], float output[3]) {
+static void InputVerticalRatio(TransInfo *t, MouseInput *mi, short mval[2], float output[3]) {
float y, pad;
pad = t->ar->winy / 10;
@@ -154,7 +154,7 @@ void InputVerticalRatio(TransInfo *t, MouseInput *mi, short mval[2], float outpu
output[0] = (y - pad) / (t->ar->winy - 2 * pad);
}
-void InputVerticalAbsolute(TransInfo *t, MouseInput *mi, short mval[2], float output[3]) {
+static void InputVerticalAbsolute(TransInfo *t, MouseInput *mi, short mval[2], float output[3]) {
float vec[3];
InputVector(t, mi, mval, vec);
@@ -179,7 +179,7 @@ void setCustomPoints(TransInfo *UNUSED(t), MouseInput *mi, short start[2], short
data[3] = end[1];
}
-void InputCustomRatio(TransInfo *UNUSED(t), MouseInput *mi, short mval[2], float output[3])
+static void InputCustomRatio(TransInfo *UNUSED(t), MouseInput *mi, short mval[2], float output[3])
{
float length;
float distance;
@@ -212,7 +212,7 @@ void InputCustomRatio(TransInfo *UNUSED(t), MouseInput *mi, short mval[2], float
}
}
-void InputAngle(TransInfo *UNUSED(t), MouseInput *mi, short mval[2], float output[3])
+static void InputAngle(TransInfo *UNUSED(t), MouseInput *mi, short mval[2], float output[3])
{
double dx2 = mval[0] - mi->center[0];
double dy2 = mval[1] - mi->center[1];
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index d69ba22585b..49080b86e87 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -546,7 +546,7 @@ int calc_manipulator_stats(const bContext *C)
}
/* don't draw axis perpendicular to the view */
-void test_manipulator_axis(const bContext *C)
+static void test_manipulator_axis(const bContext *C)
{
RegionView3D *rv3d= CTX_wm_region_view3d(C);
float angle;
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index 82cec1eec42..5c42a59ac69 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -54,20 +54,20 @@ typedef struct TransformModeItem
static float VecOne[3] = {1, 1, 1};
-char OP_TRANSLATION[] = "TRANSFORM_OT_translate";
-char OP_ROTATION[] = "TRANSFORM_OT_rotate";
-char OP_TOSPHERE[] = "TRANSFORM_OT_tosphere";
-char OP_RESIZE[] = "TRANSFORM_OT_resize";
-char OP_SHEAR[] = "TRANSFORM_OT_shear";
-char OP_WARP[] = "TRANSFORM_OT_warp";
-char OP_SHRINK_FATTEN[] = "TRANSFORM_OT_shrink_fatten";
-char OP_PUSH_PULL[] = "TRANSFORM_OT_push_pull";
-char OP_TILT[] = "TRANSFORM_OT_tilt";
-char OP_TRACKBALL[] = "TRANSFORM_OT_trackball";
-char OP_MIRROR[] = "TRANSFORM_OT_mirror";
-char OP_EDGE_SLIDE[] = "TRANSFORM_OT_edge_slide";
-char OP_EDGE_CREASE[] = "TRANSFORM_OT_edge_crease";
-char OP_SEQ_SLIDE[] = "TRANSFORM_OT_seq_slide";
+static char OP_TRANSLATION[] = "TRANSFORM_OT_translate";
+static char OP_ROTATION[] = "TRANSFORM_OT_rotate";
+static char OP_TOSPHERE[] = "TRANSFORM_OT_tosphere";
+static char OP_RESIZE[] = "TRANSFORM_OT_resize";
+static char OP_SHEAR[] = "TRANSFORM_OT_shear";
+static char OP_WARP[] = "TRANSFORM_OT_warp";
+static char OP_SHRINK_FATTEN[] = "TRANSFORM_OT_shrink_fatten";
+static char OP_PUSH_PULL[] = "TRANSFORM_OT_push_pull";
+static char OP_TILT[] = "TRANSFORM_OT_tilt";
+static char OP_TRACKBALL[] = "TRANSFORM_OT_trackball";
+static char OP_MIRROR[] = "TRANSFORM_OT_mirror";
+static char OP_EDGE_SLIDE[] = "TRANSFORM_OT_edge_slide";
+static char OP_EDGE_CREASE[] = "TRANSFORM_OT_edge_crease";
+static char OP_SEQ_SLIDE[] = "TRANSFORM_OT_seq_slide";
void TRANSFORM_OT_translate(struct wmOperatorType *ot);
void TRANSFORM_OT_rotate(struct wmOperatorType *ot);
@@ -84,7 +84,7 @@ void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot);
void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot);
void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot);
-TransformModeItem transform_modes[] =
+static TransformModeItem transform_modes[] =
{
{OP_TRANSLATION, TFM_TRANSLATION, TRANSFORM_OT_translate},
{OP_ROTATION, TFM_ROTATION, TRANSFORM_OT_rotate},
@@ -114,7 +114,7 @@ static int snap_type_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void TRANSFORM_OT_snap_type(wmOperatorType *ot)
+static void TRANSFORM_OT_snap_type(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Snap Type";
@@ -159,7 +159,7 @@ static int select_orientation_invoke(bContext *C, wmOperator *UNUSED(op), wmEven
return OPERATOR_CANCELLED;
}
-void TRANSFORM_OT_select_orientation(struct wmOperatorType *ot)
+static void TRANSFORM_OT_select_orientation(struct wmOperatorType *ot)
{
PropertyRNA *prop;
@@ -214,7 +214,7 @@ static int delete_orientation_poll(bContext *C)
return selected_index >= 0;
}
-void TRANSFORM_OT_delete_orientation(struct wmOperatorType *ot)
+static void TRANSFORM_OT_delete_orientation(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Delete Orientation";
@@ -249,7 +249,7 @@ static int create_orientation_invoke(bContext *C, wmOperator *op, wmEvent *UNUSE
return create_orientation_exec(C, op);
}
-void TRANSFORM_OT_create_orientation(struct wmOperatorType *ot)
+static void TRANSFORM_OT_create_orientation(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Create Orientation";
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 93403ea5817..ab1cbab9a23 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -83,6 +83,8 @@
//#include "blendef.h" /* for selection modes */
+#define USE_BVH_FACE_PROJECT
+
/********************* PROTOTYPES ***********************/
void setSnappingCallback(TransInfo *t);
@@ -356,7 +358,7 @@ int validSnappingNormal(TransInfo *t)
return 0;
}
-void initSnappingMode(TransInfo *t)
+static void initSnappingMode(TransInfo *t)
{
ToolSettings *ts = t->settings;
Object *obedit = t->obedit;
@@ -1020,8 +1022,8 @@ void TargetSnapClosest(TransInfo *t)
}
}
/*================================================================*/
-
-int snapFace(ARegion *ar, float v1co[3], float v2co[3], float v3co[3], float *v4co, float mval[2], float ray_start[3], float ray_start_local[3], float ray_normal_local[3], float obmat[][4], float timat[][3], float *loc, float *no, int *dist, float *depth)
+#ifndef USE_BVH_FACE_SNAP
+static int snapFace(ARegion *ar, float v1co[3], float v2co[3], float v3co[3], float *v4co, float mval[2], float ray_start[3], float ray_start_local[3], float ray_normal_local[3], float obmat[][4], float timat[][3], float *loc, float *no, int *dist, float *depth)
{
float lambda;
int result;
@@ -1071,8 +1073,9 @@ int snapFace(ARegion *ar, float v1co[3], float v2co[3], float v3co[3], float *v4
return retval;
}
+#endif
-int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], short v2no[3], float mval[2], float ray_start[3], float ray_start_local[3], float ray_normal_local[3], float obmat[][4], float timat[][3], float *loc, float *no, int *dist, float *depth)
+static int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], short v2no[3], float mval[2], float ray_start[3], float ray_start_local[3], float ray_normal_local[3], float obmat[][4], float timat[][3], float *loc, float *no, int *dist, float *depth)
{
float intersect[3] = {0, 0, 0}, ray_end[3], dvec[3];
int result;
@@ -1157,7 +1160,7 @@ int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], short v2n
return retval;
}
-int snapVertex(ARegion *ar, float vco[3], short vno[3], float mval[2], float ray_start[3], float ray_start_local[3], float ray_normal_local[3], float obmat[][4], float timat[][3], float *loc, float *no, int *dist, float *depth)
+static int snapVertex(ARegion *ar, float vco[3], short vno[3], float mval[2], float ray_start[3], float ray_start_local[3], float ray_normal_local[3], float obmat[][4], float timat[][3], float *loc, float *no, int *dist, float *depth)
{
int retval = 0;
float dvec[3];
@@ -1201,7 +1204,7 @@ int snapVertex(ARegion *ar, float vco[3], short vno[3], float mval[2], float ray
return retval;
}
-int snapArmature(short snap_mode, ARegion *ar, Object *ob, bArmature *arm, float obmat[][4], float ray_start[3], float ray_normal[3], float mval[2], float *loc, float *UNUSED(no), int *dist, float *depth)
+static int snapArmature(short snap_mode, ARegion *ar, Object *ob, bArmature *arm, float obmat[][4], float ray_start[3], float ray_normal[3], float mval[2], float *loc, float *UNUSED(no), int *dist, float *depth)
{
float imat[4][4];
float ray_start_local[3], ray_normal_local[3];
@@ -1266,7 +1269,7 @@ int snapArmature(short snap_mode, ARegion *ar, Object *ob, bArmature *arm, float
return retval;
}
-int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh *dm, EditMesh *em, float obmat[][4], float ray_start[3], float ray_normal[3], float mval[2], float *loc, float *no, int *dist, float *depth)
+static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh *dm, EditMesh *em, float obmat[][4], float ray_start[3], float ray_normal[3], float mval[2], float *loc, float *no, int *dist, float *depth)
{
int retval = 0;
int totvert = dm->getNumVerts(dm);
@@ -1304,7 +1307,7 @@ int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh *dm, E
{
case SCE_SNAP_MODE_FACE:
{
-#if 1 // Added for durian
+#ifdef USE_BVH_FACE_SNAP // Added for durian
BVHTreeRayHit hit;
BVHTreeFromMesh treeData;
@@ -1534,7 +1537,7 @@ int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh *dm, E
return retval;
}
-int snapObject(Scene *scene, ARegion *ar, Object *ob, int editobject, float obmat[][4], float ray_start[3], float ray_normal[3], float mval[2], float *loc, float *no, int *dist, float *depth)
+static int snapObject(Scene *scene, ARegion *ar, Object *ob, int editobject, float obmat[][4], float ray_start[3], float ray_normal[3], float mval[2], float *loc, float *no, int *dist, float *depth)
{
ToolSettings *ts= scene->toolsettings;
int retval = 0;
@@ -1567,7 +1570,7 @@ int snapObject(Scene *scene, ARegion *ar, Object *ob, int editobject, float obma
return retval;
}
-int snapObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, float mval[2], int *dist, float *loc, float *no, SnapMode mode) {
+static int snapObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, float mval[2], int *dist, float *loc, float *no, SnapMode mode) {
Base *base;
float depth = FLT_MAX;
int retval = 0;
@@ -1636,7 +1639,7 @@ int snapObjectsContext(bContext *C, float mval[2], int *dist, float *loc, float
/******************** PEELING *********************************/
-int cmpPeel(void *arg1, void *arg2)
+static int cmpPeel(void *arg1, void *arg2)
{
DepthPeel *p1 = arg1;
DepthPeel *p2 = arg2;
@@ -1654,7 +1657,7 @@ int cmpPeel(void *arg1, void *arg2)
return val;
}
-void removeDoublesPeel(ListBase *depth_peels)
+static void removeDoublesPeel(ListBase *depth_peels)
{
DepthPeel *peel;
@@ -1676,7 +1679,7 @@ void removeDoublesPeel(ListBase *depth_peels)
}
}
-void addDepthPeel(ListBase *depth_peels, float depth, float p[3], float no[3], Object *ob)
+static void addDepthPeel(ListBase *depth_peels, float depth, float p[3], float no[3], Object *ob)
{
DepthPeel *peel = MEM_callocN(sizeof(DepthPeel), "DepthPeel");
@@ -1690,7 +1693,7 @@ void addDepthPeel(ListBase *depth_peels, float depth, float p[3], float no[3], O
peel->flag = 0;
}
-int peelDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], float ray_start[3], float ray_normal[3], float UNUSED(mval[2]), ListBase *depth_peels)
+static int peelDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], float ray_start[3], float ray_normal[3], float UNUSED(mval[2]), ListBase *depth_peels)
{
int retval = 0;
int totvert = dm->getNumVerts(dm);
@@ -1798,7 +1801,7 @@ int peelDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], float ray_sta
return retval;
}
-int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, ListBase *depth_peels, float mval[2])
+static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, ListBase *depth_peels, float mval[2])
{
Base *base;
int retval = 0;
diff --git a/source/blender/editors/util/crazyspace.c b/source/blender/editors/util/crazyspace.c
index 8b03f1826e4..20b7c255922 100644
--- a/source/blender/editors/util/crazyspace.c
+++ b/source/blender/editors/util/crazyspace.c
@@ -43,6 +43,8 @@
#include "BLI_math.h"
#include "BLI_editVert.h"
+#include "ED_util.h"
+
#define TAN_MAKE_VEC(a, b, c) a[0]= b[0] + 0.2f*(b[0]-c[0]); a[1]= b[1] + 0.2f*(b[1]-c[1]); a[2]= b[2] + 0.2f*(b[2]-c[2])
static void set_crazy_vertex_quat(float *quat, float *v1, float *v2, float *v3, float *def1, float *def2, float *def3)
{
@@ -363,7 +365,7 @@ void crazyspace_build_sculpt(Scene *scene, Object *ob, float (**deformmats)[3][3
float (*deformedVerts)[3]= *deformcos;
float (*origVerts)[3]= MEM_dupallocN(deformedVerts);
float *quats= NULL;
- int i;
+ int i, deformed= 0;
ModifierData *md= modifiers_getVirtualModifierList(ob);
Mesh *me= (Mesh*)ob->data;
@@ -372,8 +374,15 @@ void crazyspace_build_sculpt(Scene *scene, Object *ob, float (**deformmats)[3][3
if(!modifier_isEnabled(scene, md, eModifierMode_Realtime)) continue;
- if(mti->type==eModifierTypeType_OnlyDeform)
+ if(mti->type==eModifierTypeType_OnlyDeform) {
+ /* skip leading modifiers which have been alredy
+ handled in sculpt_get_first_deform_matrices */
+ if(mti->deformMatrices && !deformed)
+ continue;
+
mti->deformVerts(md, ob, NULL, deformedVerts, me->totvert, 0, 0);
+ deformed= 1;
+ }
}
quats= MEM_mallocN(me->totvert*sizeof(float)*4, "crazy quats");
diff --git a/source/blender/editors/util/editmode_undo.c b/source/blender/editors/util/editmode_undo.c
index 85f343e3311..767a2adacb2 100644
--- a/source/blender/editors/util/editmode_undo.c
+++ b/source/blender/editors/util/editmode_undo.c
@@ -46,11 +46,14 @@
#include "BKE_depsgraph.h"
#include "BKE_global.h"
+#include "ED_util.h"
#include "ED_mesh.h"
#include "UI_interface.h"
#include "UI_resources.h"
+#include "util_intern.h"
+
/* ***************** generic editmode undo system ********************* */
/*
@@ -75,7 +78,7 @@ void undo_editmode_menu(void) // history menu
/* ********************************************************************* */
/* ****** XXX ***** */
-void error(const char *UNUSED(arg)) {}
+static void error(const char *UNUSED(arg)) {}
/* ****** XXX ***** */
diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c
index 0158719b2fb..a992e33e7d6 100644
--- a/source/blender/editors/util/undo.c
+++ b/source/blender/editors/util/undo.c
@@ -257,6 +257,7 @@ static int ed_redo_exec(bContext *C, wmOperator *UNUSED(op))
return ed_undo_step(C, -1, NULL);
}
+#if 0 /* UNUSED */
void ED_undo_menu(bContext *C)
{
Object *obedit= CTX_data_edit_object(C);
@@ -281,6 +282,7 @@ void ED_undo_menu(bContext *C)
}
}
}
+#endif
/* ********************** */
diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c
index 98c71407631..1cee7a16b98 100644
--- a/source/blender/editors/uvedit/uvedit_draw.c
+++ b/source/blender/editors/uvedit/uvedit_draw.c
@@ -46,6 +46,7 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "ED_util.h"
#include "ED_image.h"
#include "ED_mesh.h"
#include "ED_uvedit.h"
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index 0d3e9b94f98..a00a3c59626 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -403,7 +403,7 @@ int ED_uvedit_minmax(Scene *scene, Image *ima, Object *obedit, float *min, float
return sel;
}
-int uvedit_center(Scene *scene, Image *ima, Object *obedit, float *cent, int mode)
+static int uvedit_center(Scene *scene, Image *ima, Object *obedit, float *cent, int mode)
{
EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
@@ -1032,7 +1032,7 @@ static int align_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void UV_OT_align(wmOperatorType *ot)
+static void UV_OT_align(wmOperatorType *ot)
{
static EnumPropertyItem axis_items[] = {
{'a', "ALIGN_AUTO", 0, "Align Auto", "Automatically choose the axis on which there is most alignment already"},
@@ -1063,7 +1063,7 @@ static int weld_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void UV_OT_weld(wmOperatorType *ot)
+static void UV_OT_weld(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Weld";
@@ -1247,7 +1247,7 @@ static int stitch_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void UV_OT_stitch(wmOperatorType *ot)
+static void UV_OT_stitch(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Stitch";
@@ -1304,7 +1304,7 @@ static int select_inverse_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void UV_OT_select_inverse(wmOperatorType *ot)
+static void UV_OT_select_inverse(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Select Inverse";
@@ -1400,7 +1400,7 @@ static int select_all_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void UV_OT_select_all(wmOperatorType *ot)
+static void UV_OT_select_all(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Select or Deselect All";
@@ -1735,7 +1735,7 @@ static int select_invoke(bContext *C, wmOperator *op, wmEvent *event)
return select_exec(C, op);
}
-void UV_OT_select(wmOperatorType *ot)
+static void UV_OT_select(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Select";
@@ -1784,7 +1784,7 @@ static int select_loop_invoke(bContext *C, wmOperator *op, wmEvent *event)
return select_loop_exec(C, op);
}
-void UV_OT_select_loop(wmOperatorType *ot)
+static void UV_OT_select_loop(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Loop Select";
@@ -1865,7 +1865,7 @@ static int select_linked_exec(bContext *C, wmOperator *op)
return select_linked_internal(C, op, NULL, 0);
}
-void UV_OT_select_linked(wmOperatorType *ot)
+static void UV_OT_select_linked(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Select Linked";
@@ -1892,7 +1892,7 @@ static int select_linked_pick_exec(bContext *C, wmOperator *op)
return select_linked_internal(C, op, NULL, 1);
}
-void UV_OT_select_linked_pick(wmOperatorType *ot)
+static void UV_OT_select_linked_pick(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Select Linked Pick";
@@ -1949,7 +1949,7 @@ static int unlink_selection_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void UV_OT_unlink_selection(wmOperatorType *ot)
+static void UV_OT_unlink_selection(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Unlink Selection";
@@ -2230,7 +2230,7 @@ static int border_select_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
-void UV_OT_select_border(wmOperatorType *ot)
+static void UV_OT_select_border(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Border Select";
@@ -2271,7 +2271,7 @@ static void select_uv_inside_ellipse(Scene *scene, int select, EditFace *efa, MT
}
}
-int circle_select_exec(bContext *C, wmOperator *op)
+static int circle_select_exec(bContext *C, wmOperator *op)
{
SpaceImage *sima= CTX_wm_space_image(C);
Scene *scene= CTX_data_scene(C);
@@ -2319,7 +2319,7 @@ int circle_select_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void UV_OT_circle_select(wmOperatorType *ot)
+static void UV_OT_circle_select(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Circle Select";
@@ -2389,7 +2389,7 @@ static int snap_cursor_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void UV_OT_snap_cursor(wmOperatorType *ot)
+static void UV_OT_snap_cursor(wmOperatorType *ot)
{
static EnumPropertyItem target_items[] = {
{0, "PIXELS", 0, "Pixels", ""},
@@ -2629,7 +2629,7 @@ static int snap_selection_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void UV_OT_snap_selection(wmOperatorType *ot)
+static void UV_OT_snap_selection(wmOperatorType *ot)
{
static EnumPropertyItem target_items[] = {
{0, "PIXELS", 0, "Pixels", ""},
@@ -2690,7 +2690,7 @@ static int pin_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void UV_OT_pin(wmOperatorType *ot)
+static void UV_OT_pin(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Pin";
@@ -2736,7 +2736,7 @@ static int select_pinned_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void UV_OT_select_pinned(wmOperatorType *ot)
+static void UV_OT_select_pinned(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Selected Pinned";
@@ -2875,7 +2875,7 @@ static int hide_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void UV_OT_hide(wmOperatorType *ot)
+static void UV_OT_hide(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Hide Selected";
@@ -3009,7 +3009,7 @@ static int reveal_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void UV_OT_reveal(wmOperatorType *ot)
+static void UV_OT_reveal(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Reveal Hidden";
@@ -3055,7 +3055,7 @@ static int set_2d_cursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
return set_2d_cursor_exec(C, op);
}
-void UV_OT_cursor_set(wmOperatorType *ot)
+static void UV_OT_cursor_set(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set 2D Cursor";
@@ -3123,7 +3123,7 @@ static int set_tile_invoke(bContext *C, wmOperator *op, wmEvent *event)
return set_tile_exec(C, op);
}
-void UV_OT_tile_set(wmOperatorType *ot)
+static void UV_OT_tile_set(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set Tile";
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index 09069be6d5f..3b6581b7893 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -129,7 +129,7 @@ static int ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit)
/****************** Parametrizer Conversion ***************/
-ParamHandle *construct_param_handle(Scene *scene, EditMesh *em, short implicit, short fill, short sel, short correct_aspect)
+static ParamHandle *construct_param_handle(Scene *scene, EditMesh *em, short implicit, short fill, short sel, short correct_aspect)
{
ParamHandle *handle;
EditFace *efa;
diff --git a/source/blender/gpu/GPU_buffers.h b/source/blender/gpu/GPU_buffers.h
index 342cc6b72a3..4c6e24cde62 100644
--- a/source/blender/gpu/GPU_buffers.h
+++ b/source/blender/gpu/GPU_buffers.h
@@ -69,6 +69,8 @@ typedef struct GPUBuffer
unsigned int id; /* used with vertex buffer objects */
} GPUBuffer;
+/* stores deleted buffers so that new buffers wouldn't have to
+be recreated that often. */
typedef struct GPUBufferPool
{
int size; /* number of allocated buffers stored */
@@ -114,6 +116,7 @@ typedef struct GPUDrawObject
} GPUDrawObject;
+/* used for GLSL materials */
typedef struct GPUAttrib
{
int index;
@@ -173,6 +176,7 @@ void GPU_buffer_draw_elements( GPUBuffer *elements, unsigned int mode, int start
/* called after drawing */
void GPU_buffer_unbind(void);
+/* used to check whether to use the old (without buffers) code */
int GPU_buffer_legacy( struct DerivedMesh *dm );
#endif
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 53e3ad09a6f..eae727798a0 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -59,6 +59,9 @@
#define MAX_GPU_ATTRIB_DATA 32
+/* material number is an 16-bit short and the range of short is from -16383 to 16383 (assume material number is non-negative) */
+#define MAX_MATERIALS 16384
+
/* -1 - undefined, 0 - vertex arrays, 1 - VBOs */
static int useVBOs = -1;
static GPUBufferPool *globalPool = 0;
@@ -270,8 +273,8 @@ GPUDrawObject *GPU_drawobject_new( DerivedMesh *dm )
{
GPUDrawObject *object;
MFace *mface;
- int numverts[32768]; /* material number is an 16-bit short so there's at most 32768 materials */
- int redir[32768]; /* material number is an 16-bit short so there's at most 32768 materials */
+ int numverts[MAX_MATERIALS];
+ int redir[MAX_MATERIALS];
int *index;
int i;
int curmat, curverts, numfaces;
@@ -288,19 +291,19 @@ GPUDrawObject *GPU_drawobject_new( DerivedMesh *dm )
object->indices[i].next = 0;
}
/*object->legacy = 1;*/
- memset(numverts,0,sizeof(int)*32768);
+ memset(numverts,0,sizeof(int)*MAX_MATERIALS);
mface = dm->getFaceArray(dm);
numfaces= dm->getNumFaces(dm);
for( i=0; i < numfaces; i++ ) {
if( mface[i].v4 )
- numverts[mface[i].mat_nr+16383] += 6; /* split every quad into two triangles */
+ numverts[mface[i].mat_nr] += 6; /* split every quad into two triangles */
else
- numverts[mface[i].mat_nr+16383] += 3;
+ numverts[mface[i].mat_nr] += 3;
}
- for( i = 0; i < 32768; i++ ) {
+ for( i = 0; i < MAX_MATERIALS; i++ ) {
if( numverts[i] > 0 ) {
object->nmaterials++;
object->nelements += numverts[i];
@@ -310,9 +313,9 @@ GPUDrawObject *GPU_drawobject_new( DerivedMesh *dm )
index = MEM_mallocN(sizeof(int)*object->nmaterials,"GPU_drawobject_new_index");
curmat = curverts = 0;
- for( i = 0; i < 32768; i++ ) {
+ for( i = 0; i < MAX_MATERIALS; i++ ) {
if( numverts[i] > 0 ) {
- object->materials[curmat].mat_nr = i-16383;
+ object->materials[curmat].mat_nr = i;
object->materials[curmat].start = curverts;
index[curmat] = curverts/3;
object->materials[curmat].end = curverts+numverts[i];
@@ -322,7 +325,7 @@ GPUDrawObject *GPU_drawobject_new( DerivedMesh *dm )
}
object->faceRemap = MEM_mallocN(sizeof(int)*object->nelements/3,"GPU_drawobject_new_faceRemap");
for( i = 0; i < object->nmaterials; i++ ) {
- redir[object->materials[i].mat_nr+16383] = i; /* material number -> material index */
+ redir[object->materials[i].mat_nr] = i; /* material number -> material index */
}
object->indexMem = MEM_callocN(sizeof(IndexLink)*object->nelements,"GPU_drawobject_new_indexMem");
@@ -340,7 +343,7 @@ GPUDrawObject *GPU_drawobject_new( DerivedMesh *dm )
}
for( i=0; i < numfaces; i++ ) {
- int curInd = index[redir[mface[i].mat_nr+16383]];
+ int curInd = index[redir[mface[i].mat_nr]];
object->faceRemap[curInd] = i;
ADDLINK( mface[i].v1, curInd*3 );
ADDLINK( mface[i].v2, curInd*3+1 );
@@ -351,10 +354,10 @@ GPUDrawObject *GPU_drawobject_new( DerivedMesh *dm )
ADDLINK( mface[i].v4, curInd*3+4 );
ADDLINK( mface[i].v1, curInd*3+5 );
- index[redir[mface[i].mat_nr+16383]]+=2;
+ index[redir[mface[i].mat_nr]]+=2;
}
else {
- index[redir[mface[i].mat_nr+16383]]++;
+ index[redir[mface[i].mat_nr]]++;
}
}
@@ -773,11 +776,11 @@ void GPU_free_buffers(void *buffers_v)
}
}
-static GPUBuffer *GPU_buffer_setup( DerivedMesh *dm, GPUDrawObject *object, int size, GLenum target, void *user, void (*copy_f)(DerivedMesh *, float *, int *, int *, void *) )
+static GPUBuffer *GPU_buffer_setup( DerivedMesh *dm, GPUDrawObject *object, int vector_size, int size, GLenum target, void *user, void (*copy_f)(DerivedMesh *, float *, int *, int *, void *) )
{
GPUBuffer *buffer;
float *varray;
- int redir[32768];
+ int redir[MAX_MATERIALS];
int *index;
int i;
int success;
@@ -798,8 +801,8 @@ static GPUBuffer *GPU_buffer_setup( DerivedMesh *dm, GPUDrawObject *object, int
index = MEM_mallocN(sizeof(int)*object->nmaterials,"GPU_buffer_setup");
for( i = 0; i < object->nmaterials; i++ ) {
- index[i] = object->materials[i].start*3;
- redir[object->materials[i].mat_nr+16383] = i;
+ index[i] = object->materials[i].start*vector_size;
+ redir[object->materials[i].mat_nr] = i;
}
if( useVBOs ) {
@@ -870,11 +873,11 @@ static void GPU_buffer_copy_vertex(DerivedMesh *dm, float *varray, int *index, i
numfaces= dm->getNumFaces(dm);
for( i=0; i < numfaces; i++ ) {
- start = index[redir[mface[i].mat_nr+16383]];
+ start = index[redir[mface[i].mat_nr]];
if( mface[i].v4 )
- index[redir[mface[i].mat_nr+16383]] += 18;
+ index[redir[mface[i].mat_nr]] += 18;
else
- index[redir[mface[i].mat_nr+16383]] += 9;
+ index[redir[mface[i].mat_nr]] += 9;
/* v1 v2 v3 */
VECCOPY(&varray[start],mvert[mface[i].v1].co);
@@ -901,7 +904,7 @@ static GPUBuffer *GPU_buffer_vertex( DerivedMesh *dm )
{
DEBUG_VBO("GPU_buffer_vertex\n");
- return GPU_buffer_setup( dm, dm->drawObject, sizeof(float)*3*(dm->drawObject->nelements+dm->drawObject->nlooseverts), GL_ARRAY_BUFFER_ARB, 0, GPU_buffer_copy_vertex);
+ return GPU_buffer_setup( dm, dm->drawObject, 3, sizeof(float)*3*(dm->drawObject->nelements+dm->drawObject->nlooseverts), GL_ARRAY_BUFFER_ARB, 0, GPU_buffer_copy_vertex);
}
static void GPU_buffer_copy_normal(DerivedMesh *dm, float *varray, int *index, int *redir, void *UNUSED(user))
@@ -920,11 +923,11 @@ static void GPU_buffer_copy_normal(DerivedMesh *dm, float *varray, int *index, i
for( i=0; i < numfaces; i++ ) {
const int smoothnormal = (mface[i].flag & ME_SMOOTH);
- start = index[redir[mface[i].mat_nr+16383]];
+ start = index[redir[mface[i].mat_nr]];
if( mface[i].v4 )
- index[redir[mface[i].mat_nr+16383]] += 18;
+ index[redir[mface[i].mat_nr]] += 18;
else
- index[redir[mface[i].mat_nr+16383]] += 9;
+ index[redir[mface[i].mat_nr]] += 9;
/* v1 v2 v3 */
if(smoothnormal) {
@@ -967,7 +970,7 @@ static GPUBuffer *GPU_buffer_normal( DerivedMesh *dm )
{
DEBUG_VBO("GPU_buffer_normal\n");
- return GPU_buffer_setup( dm, dm->drawObject, sizeof(float)*3*dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, 0, GPU_buffer_copy_normal);
+ return GPU_buffer_setup( dm, dm->drawObject, 3, sizeof(float)*3*dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, 0, GPU_buffer_copy_normal);
}
static void GPU_buffer_copy_uv(DerivedMesh *dm, float *varray, int *index, int *redir, void *UNUSED(user))
@@ -990,11 +993,11 @@ static void GPU_buffer_copy_uv(DerivedMesh *dm, float *varray, int *index, int *
numfaces= dm->getNumFaces(dm);
for( i=0; i < numfaces; i++ ) {
- start = index[redir[mface[i].mat_nr+16383]];
+ start = index[redir[mface[i].mat_nr]];
if( mface[i].v4 )
- index[redir[mface[i].mat_nr+16383]] += 12;
+ index[redir[mface[i].mat_nr]] += 12;
else
- index[redir[mface[i].mat_nr+16383]] += 6;
+ index[redir[mface[i].mat_nr]] += 6;
/* v1 v2 v3 */
VECCOPY2D(&varray[start],mtface[i].uv[0]);
@@ -1013,8 +1016,8 @@ static void GPU_buffer_copy_uv(DerivedMesh *dm, float *varray, int *index, int *
static GPUBuffer *GPU_buffer_uv( DerivedMesh *dm )
{
DEBUG_VBO("GPU_buffer_uv\n");
- if( DM_get_face_data_layer(dm, CD_MTFACE) != 0 ) /* was sizeof(float)*2 but caused buffer overrun */
- return GPU_buffer_setup( dm, dm->drawObject, sizeof(float)*3*dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, 0, GPU_buffer_copy_uv);
+ if( DM_get_face_data_layer(dm, CD_MTFACE) != 0 )
+ return GPU_buffer_setup( dm, dm->drawObject, 2, sizeof(float)*2*dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, 0, GPU_buffer_copy_uv);
else
return 0;
}
@@ -1030,11 +1033,11 @@ static void GPU_buffer_copy_color3( DerivedMesh *dm, float *varray_, int *index,
numfaces= dm->getNumFaces(dm);
for( i=0; i < numfaces; i++ ) {
- int start = index[redir[mface[i].mat_nr+16383]];
+ int start = index[redir[mface[i].mat_nr]];
if( mface[i].v4 )
- index[redir[mface[i].mat_nr+16383]] += 18;
+ index[redir[mface[i].mat_nr]] += 18;
else
- index[redir[mface[i].mat_nr+16383]] += 9;
+ index[redir[mface[i].mat_nr]] += 9;
/* v1 v2 v3 */
VECCOPY(&varray[start],&mcol[i*12]);
@@ -1060,11 +1063,11 @@ static void GPU_buffer_copy_color4( DerivedMesh *dm, float *varray_, int *index,
numfaces= dm->getNumFaces(dm);
for( i=0; i < numfaces; i++ ) {
- int start = index[redir[mface[i].mat_nr+16383]];
+ int start = index[redir[mface[i].mat_nr]];
if( mface[i].v4 )
- index[redir[mface[i].mat_nr+16383]] += 18;
+ index[redir[mface[i].mat_nr]] += 18;
else
- index[redir[mface[i].mat_nr+16383]] += 9;
+ index[redir[mface[i].mat_nr]] += 9;
/* v1 v2 v3 */
VECCOPY(&varray[start],&mcol[i*16]);
@@ -1106,7 +1109,7 @@ static GPUBuffer *GPU_buffer_color( DerivedMesh *dm )
colors[i*3+2] = mcol[i].r;
}
- result = GPU_buffer_setup( dm, dm->drawObject, sizeof(char)*3*dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, colors, GPU_buffer_copy_color3 );
+ result = GPU_buffer_setup( dm, dm->drawObject, 3, sizeof(char)*3*dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, colors, GPU_buffer_copy_color3 );
MEM_freeN(colors);
return result;
@@ -1135,7 +1138,7 @@ static GPUBuffer *GPU_buffer_edge( DerivedMesh *dm )
{
DEBUG_VBO("GPU_buffer_edge\n");
- return GPU_buffer_setup( dm, dm->drawObject, sizeof(int)*2*dm->drawObject->nedges, GL_ELEMENT_ARRAY_BUFFER_ARB, 0, GPU_buffer_copy_edge);
+ return GPU_buffer_setup( dm, dm->drawObject, 2, sizeof(int)*2*dm->drawObject->nedges, GL_ELEMENT_ARRAY_BUFFER_ARB, 0, GPU_buffer_copy_edge);
}
static void GPU_buffer_copy_uvedge(DerivedMesh *dm, float *varray, int *UNUSED(index), int *UNUSED(redir), void *UNUSED(user))
@@ -1184,7 +1187,7 @@ static GPUBuffer *GPU_buffer_uvedge( DerivedMesh *dm )
* ...each edge has its own, non-shared coords.
* so each tri corner needs minimum of 4 floats, quads used less so here we can over allocate and assume all tris.
* */
- return GPU_buffer_setup( dm, dm->drawObject, 4 * sizeof(float) * dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, 0, GPU_buffer_copy_uvedge);
+ return GPU_buffer_setup( dm, dm->drawObject, 4, 4 * sizeof(float) * dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, 0, GPU_buffer_copy_uvedge);
}
@@ -1553,14 +1556,14 @@ void GPU_color3_upload( DerivedMesh *dm, unsigned char *data )
if( dm->drawObject == 0 )
dm->drawObject = GPU_drawobject_new(dm);
GPU_buffer_free(dm->drawObject->colors,globalPool);
- dm->drawObject->colors = GPU_buffer_setup( dm, dm->drawObject, sizeof(char)*3*dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, data, GPU_buffer_copy_color3 );
+ dm->drawObject->colors = GPU_buffer_setup( dm, dm->drawObject, 3, sizeof(char)*3*dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, data, GPU_buffer_copy_color3 );
}
void GPU_color4_upload( DerivedMesh *dm, unsigned char *data )
{
if( dm->drawObject == 0 )
dm->drawObject = GPU_drawobject_new(dm);
GPU_buffer_free(dm->drawObject->colors,globalPool);
- dm->drawObject->colors = GPU_buffer_setup( dm, dm->drawObject, sizeof(char)*3*dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, data, GPU_buffer_copy_color4 );
+ dm->drawObject->colors = GPU_buffer_setup( dm, dm->drawObject, 3, sizeof(char)*3*dm->drawObject->nelements, GL_ARRAY_BUFFER_ARB, data, GPU_buffer_copy_color4 );
}
void GPU_color_switch( int mode )
diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c
index 8fc96b34933..98b09d0e192 100644
--- a/source/blender/gpu/intern/gpu_codegen.c
+++ b/source/blender/gpu/intern/gpu_codegen.c
@@ -741,11 +741,12 @@ static char *code_generate_vertex(ListBase *nodes)
for (input=node->inputs.first; input; input=input->next)
if (input->source == GPU_SOURCE_ATTRIB && input->attribfirst) {
if(input->attribtype == CD_TANGENT) /* silly exception */
- BLI_dynstr_printf(ds, "\tvar%d = gl_NormalMatrix * ", input->attribid);
+ {
+ BLI_dynstr_printf(ds, "\tvar%d.xyz = normalize((gl_ModelViewMatrix * vec4(att%d.xyz, 0)).xyz);\n", input->attribid, input->attribid);
+ BLI_dynstr_printf(ds, "\tvar%d.w = att%d.w;\n", input->attribid, input->attribid);
+ }
else
- BLI_dynstr_printf(ds, "\tvar%d = ", input->attribid);
-
- BLI_dynstr_printf(ds, "att%d;\n", input->attribid);
+ BLI_dynstr_printf(ds, "\tvar%d = att%d;\n", input->attribid, input->attribid);
}
BLI_dynstr_append(ds, "}\n\n");
diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c
index cb28d0dbe47..c283e2fd907 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -886,7 +886,7 @@ static void do_material_tex(GPUShadeInput *shi)
MTex *mtex;
Tex *tex;
GPUNodeLink *texco, *tin, *trgb, *tnor, *tcol, *stencil, *tnorfac;
- GPUNodeLink *texco_norm, *texco_orco, *texco_object, *texco_tangent;
+ GPUNodeLink *texco_norm, *texco_orco, *texco_object;
GPUNodeLink *texco_global, *texco_uv = NULL;
GPUNodeLink *newnor, *orn;
char *lastuvname = NULL;
@@ -894,6 +894,7 @@ static void do_material_tex(GPUShadeInput *shi)
int tex_nr, rgbnor, talpha;
int init_done = 0, iBumpSpacePrev;
GPUNodeLink *vNorg, *vNacc, *fPrevMagnitude;
+ int iFirstTimeNMap=1;
GPU_link(mat, "set_value", GPU_uniform(&one), &stencil);
@@ -902,7 +903,7 @@ static void do_material_tex(GPUShadeInput *shi)
GPU_link(mat, "texco_object", GPU_builtin(GPU_INVERSE_VIEW_MATRIX),
GPU_builtin(GPU_INVERSE_OBJECT_MATRIX),
GPU_builtin(GPU_VIEW_POSITION), &texco_object);
- GPU_link(mat, "texco_tangent", GPU_attribute(CD_TANGENT, ""), &texco_tangent);
+ //GPU_link(mat, "texco_tangent", GPU_attribute(CD_TANGENT, ""), &texco_tangent);
GPU_link(mat, "texco_global", GPU_builtin(GPU_INVERSE_VIEW_MATRIX),
GPU_builtin(GPU_VIEW_POSITION), &texco_global);
@@ -1037,7 +1038,20 @@ static void do_material_tex(GPUShadeInput *shi)
GPU_link(mat, "mtex_negate_texnormal", tnor, &tnor);
if(mtex->normapspace == MTEX_NSPACE_TANGENT)
- GPU_link(mat, "mtex_nspace_tangent", GPU_attribute(CD_TANGENT, ""), shi->vn, tnor, &newnor);
+ {
+ if(iFirstTimeNMap!=0)
+ {
+ // use unnormalized normal (this is how we bake it - closer to gamedev)
+ GPUNodeLink *vNegNorm;
+ GPU_link(mat, "vec_math_negate", GPU_builtin(GPU_VIEW_NORMAL), &vNegNorm);
+ GPU_link(mat, "mtex_nspace_tangent", GPU_attribute(CD_TANGENT, ""), vNegNorm, tnor, &newnor);
+ iFirstTimeNMap = 0;
+ }
+ else // otherwise use accumulated perturbations
+ {
+ GPU_link(mat, "mtex_nspace_tangent", GPU_attribute(CD_TANGENT, ""), shi->vn, tnor, &newnor);
+ }
+ }
else
newnor = tnor;
diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl b/source/blender/gpu/intern/gpu_shader_material.glsl
index 6dec6a5e982..47f47746cfa 100644
--- a/source/blender/gpu/intern/gpu_shader_material.glsl
+++ b/source/blender/gpu/intern/gpu_shader_material.glsl
@@ -746,9 +746,9 @@ void texco_norm(vec3 normal, out vec3 outnormal)
outnormal = normalize(normal);
}
-void texco_tangent(vec3 tangent, out vec3 outtangent)
+void texco_tangent(vec4 tangent, out vec3 outtangent)
{
- outtangent = normalize(tangent);
+ outtangent = normalize(tangent.xyz);
}
void texco_global(mat4 viewinvmat, vec3 co, out vec3 global)
@@ -1250,12 +1250,11 @@ void mtex_negate_texnormal(vec3 normal, out vec3 outnormal)
outnormal = vec3(-normal.x, -normal.y, normal.z);
}
-void mtex_nspace_tangent(vec3 tangent, vec3 normal, vec3 texnormal, out vec3 outnormal)
+void mtex_nspace_tangent(vec4 tangent, vec3 normal, vec3 texnormal, out vec3 outnormal)
{
- tangent = normalize(tangent);
- vec3 B = cross(normal, tangent);
+ vec3 B = tangent.w * cross(normal, tangent.xyz);
- outnormal = texnormal.x*tangent + texnormal.y*B + texnormal.z*normal;
+ outnormal = texnormal.x*tangent.xyz + texnormal.y*B + texnormal.z*normal;
outnormal = normalize(outnormal);
}
diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl.c b/source/blender/gpu/intern/gpu_shader_material.glsl.c
index 742e57fbbff..cd325cbdb9d 100644
--- a/source/blender/gpu/intern/gpu_shader_material.glsl.c
+++ b/source/blender/gpu/intern/gpu_shader_material.glsl.c
@@ -1,872 +1,871 @@
/* DataToC output of file <gpu_shader_material_glsl> */
-int datatoc_gpu_shader_material_glsl_size= 38724;
+int datatoc_gpu_shader_material_glsl_size= 38717;
char datatoc_gpu_shader_material_glsl[]= {
- 10,102,108,111,
- 97,116, 32,101,120,112, 95, 98,108,101,110,100,101,114, 40,102,108,111, 97,116, 32,102, 41, 10,123, 10, 9,114,101,116,117,114,
-110, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, 52, 54, 44, 32,102, 41, 59, 10,125, 10, 10,118,111,105,100,
- 32,114,103, 98, 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,
-117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 99,109, 97,120, 44, 32, 99,109,105,110, 44, 32,104, 44, 32,115,
- 44, 32,118, 44, 32, 99,100,101,108,116, 97, 59, 10, 9,118,101, 99, 51, 32, 99, 59, 10, 10, 9, 99,109, 97,120, 32, 61, 32,109,
- 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59,
- 10, 9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, 48, 93, 44, 32,109,105,110, 40,114,103, 98, 91, 49, 93, 44,
- 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,100,101,108,116, 97, 32, 61, 32, 99,109, 97,120, 45, 99,109,105,110, 59, 10,
- 10, 9,118, 32, 61, 32, 99,109, 97,120, 59, 10, 9,105,102, 32, 40, 99,109, 97,120, 33, 61, 48, 46, 48, 41, 10, 9, 9,115, 32,
- 61, 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59, 10, 9,101,108,115,101, 32,123, 10, 9, 9,115, 32, 61, 32, 48, 46, 48,
- 59, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 10, 9,105,102, 32, 40,115, 32, 61, 61, 32, 48, 46, 48, 41, 32,
-123, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9, 99, 32, 61, 32, 40,118,
-101, 99, 51, 40, 99,109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99,109, 97,120, 41, 32, 45, 32,114,103, 98, 46,120,121,122, 41,
- 47, 99,100,101,108,116, 97, 59, 10, 10, 9, 9,105,102, 32, 40,114,103, 98, 46,120, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61,
- 32, 99, 91, 50, 93, 32, 45, 32, 99, 91, 49, 93, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,114,103, 98, 46,121, 61, 61,
- 99,109, 97,120, 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, 91, 48, 93, 32, 45, 32, 32, 99, 91, 50, 93, 59, 10, 9, 9,
-101,108,115,101, 32,104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, 49, 93, 32, 45, 32, 99, 91, 48, 93, 59, 10, 10, 9, 9,104,
- 32, 47, 61, 32, 54, 46, 48, 59, 10, 10, 9, 9,105,102, 32, 40,104, 60, 48, 46, 48, 41, 10, 9, 9, 9,104, 32, 43, 61, 32, 49,
- 46, 48, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,104, 44, 32,115, 44, 32,118, 44, 32,
-114,103, 98, 46,119, 41, 59, 10,125, 10, 10,118,111,105,100, 32,104,115,118, 95,116,111, 95,114,103, 98, 40,118,101, 99, 52, 32,
-104,115,118, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,105,
- 44, 32,102, 44, 32,112, 44, 32,113, 44, 32,116, 44, 32,104, 44, 32,115, 44, 32,118, 59, 10, 9,118,101, 99, 51, 32,114,103, 98,
- 59, 10, 10, 9,104, 32, 61, 32,104,115,118, 91, 48, 93, 59, 10, 9,115, 32, 61, 32,104,115,118, 91, 49, 93, 59, 10, 9,118, 32,
- 61, 32,104,115,118, 91, 50, 93, 59, 10, 10, 9,105,102, 40,115, 61, 61, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 32, 61,
- 32,118,101, 99, 51, 40,118, 44, 32,118, 44, 32,118, 41, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,105,102, 40,
-104, 61, 61, 49, 46, 48, 41, 10, 9, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9, 10, 9, 9,104, 32, 42, 61, 32, 54, 46,
- 48, 59, 10, 9, 9,105, 32, 61, 32,102,108,111,111,114, 40,104, 41, 59, 10, 9, 9,102, 32, 61, 32,104, 32, 45, 32,105, 59, 10,
- 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,102, 44, 32,102, 44, 32,102, 41, 59, 10, 9, 9,112, 32, 61, 32,118, 42, 40,
- 49, 46, 48, 45,115, 41, 59, 10, 9, 9,113, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42,102, 41, 41, 59, 10, 9, 9,116,
- 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42, 40, 49, 46, 48, 45,102, 41, 41, 41, 59, 10, 9, 9, 10, 9, 9,105,102, 32,
- 40,105, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,116, 44, 32,112, 41, 59, 10,
- 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,
-113, 44, 32,118, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 50, 46, 48, 41, 32,114,
-103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105,
- 32, 61, 61, 32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,113, 44, 32,118, 41, 59, 10, 9, 9,
-101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,116, 44,
- 32,112, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,112, 44, 32,
-113, 41, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 44, 32,104,115,118, 46,
-119, 41, 59, 10,125, 10, 10,102,108,111, 97,116, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40,102,
-108,111, 97,116, 32, 99, 41, 10,123, 10, 9,105,102, 40, 99, 32, 60, 32, 48, 46, 48, 52, 48, 52, 53, 41, 10, 9, 9,114,101,116,
-117,114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, 48, 58, 32, 99, 32, 42, 32, 40, 49, 46, 48, 47, 49, 50, 46,
- 57, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,114,101,116,117,114,110, 32,112,111,119, 40, 40, 99, 32, 43, 32, 48, 46, 48,
- 53, 53, 41, 42, 40, 49, 46, 48, 47, 49, 46, 48, 53, 53, 41, 44, 32, 50, 46, 52, 41, 59, 10,125, 10, 10,102,108,111, 97,116, 32,
-108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40,102,108,111, 97,116, 32, 99, 41, 10,123, 10, 9,105,102,
- 40, 99, 32, 60, 32, 48, 46, 48, 48, 51, 49, 51, 48, 56, 41, 10, 9, 9,114,101,116,117,114,110, 32, 40, 99, 32, 60, 32, 48, 46,
- 48, 41, 63, 32, 48, 46, 48, 58, 32, 99, 32, 42, 32, 49, 50, 46, 57, 50, 59, 10, 9,101,108,115,101, 10, 9, 9,114,101,116,117,
-114,110, 32, 49, 46, 48, 53, 53, 32, 42, 32,112,111,119, 40, 99, 44, 32, 49, 46, 48, 47, 50, 46, 52, 41, 32, 45, 32, 48, 46, 48,
- 53, 53, 59, 10,125, 10, 10,118,111,105,100, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40,118,101,
- 99, 52, 32, 99,111,108, 95,102,114,111,109, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 95,116,111, 41, 10,123, 10,
- 9, 99,111,108, 95,116,111, 46,114, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,
-108, 95,102,114,111,109, 46,114, 41, 59, 10, 9, 99,111,108, 95,116,111, 46,103, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,
-105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,103, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 98, 32,
- 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46, 98, 41, 59,
- 10, 9, 99,111,108, 95,116,111, 46, 97, 32, 61, 32, 99,111,108, 95,102,114,111,109, 46, 97, 59, 10,125, 10, 10,118,111,105,100,
- 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 95,102,114,111,109,
- 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 95,116,111, 41, 10,123, 10, 9, 99,111,108, 95,116,111, 46,114, 32, 61,
- 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,114, 41, 59, 10,
- 9, 99,111,108, 95,116,111, 46,103, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,
-108, 95,102,114,111,109, 46,103, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 98, 32, 61, 32,108,105,110,101, 97,114,114,103, 98,
- 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46, 98, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 97, 32,
- 61, 32, 99,111,108, 95,102,114,111,109, 46, 97, 59, 10,125, 10, 10, 35,100,101,102,105,110,101, 32, 77, 95, 80, 73, 32, 51, 46,
- 49, 52, 49, 53, 57, 50, 54, 53, 51, 53, 56, 57, 55, 57, 51, 50, 51, 56, 52, 54, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47,
- 10, 10,118,111,105,100, 32,118, 99,111,108, 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 52, 32, 97,116,116,118, 99,
-111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 41, 10,123, 10, 9,118, 99,111,108, 32, 61, 32,118,101, 99,
- 52, 40, 97,116,116,118, 99,111,108, 46,120, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,121, 47, 50, 53, 53,
- 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,122, 47, 50, 53, 53, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,
-105,100, 32,117,118, 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,
-118,101, 99, 51, 32,117,118, 41, 10,123, 10, 9,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32,
- 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,
-103,101,111,109, 40,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,109, 97,116, 52, 32,118,105,101,
-119,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 97,116,116,111,114, 99,111, 44, 32,118,101, 99, 50, 32, 97,116,116,117,
-118, 44, 32,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108,
- 44, 32,111,117,116, 32,118,101, 99, 51, 32,108,111, 99, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 44,
- 32,111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111,117,116,
- 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 44, 32,111,117,116,
- 32,102,108,111, 97,116, 32,102,114,111,110,116, 98, 97, 99,107, 41, 10,123, 10, 9,108,111, 99, 97,108, 32, 61, 32, 99,111, 59,
- 10, 9,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108,111, 99, 97,108, 41, 59, 10, 9,103,108,111, 98,
- 97,108, 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40,108,111, 99, 97,108, 44, 32, 49, 46, 48,
- 41, 41, 46,120,121,122, 59, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, 10, 9,117,118, 95, 97,116,116,
-114,105, 98,117,116,101, 40, 97,116,116,117,118, 44, 32,117,118, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 45,110,111,
-114,109, 97,108,105,122,101, 40,110,111,114, 41, 59, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101,114, 32,
-110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,118, 99,111,108, 95, 97,116,116,114,105,
- 98,117,116,101, 40, 97,116,116,118, 99,111,108, 44, 32,118, 99,111,108, 41, 59, 10, 9,102,114,111,110,116, 98, 97, 99,107, 32,
- 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, 44,
- 32,109, 97,116, 52, 32,109, 97,116, 44, 32,118,101, 99, 51, 32,109,105,110,118,101, 99, 44, 32,118,101, 99, 51, 32,109, 97,120,
-118,101, 99, 44, 32,102,108,111, 97,116, 32,100,111,109,105,110, 44, 32,102,108,111, 97,116, 32,100,111,109, 97,120, 44, 32,111,
-117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 40,109, 97,116,
- 32, 42, 32,118,101, 99, 52, 40,118,101, 99, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,105,102, 40,100,111,109,105,
-110, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109, 97,120, 40,111,117,116,118,101, 99, 44,
- 32,109,105,110,118,101, 99, 41, 59, 10, 9,105,102, 40,100,111,109, 97,120, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,
-116,118,101, 99, 32, 61, 32,109,105,110, 40,111,117,116,118,101, 99, 44, 32,109, 97,120,118,101, 99, 41, 59, 10,125, 10, 10,118,
-111,105,100, 32, 99, 97,109,101,114, 97, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,
-118,105,101,119, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,101,112,116,104, 44, 32,111,117,116, 32,102,108,
-111, 97,116, 32,111,117,116,100,105,115,116, 41, 10,123, 10, 9,111,117,116,100,101,112,116,104, 32, 61, 32, 97, 98,115, 40, 99,
-111, 46,122, 41, 59, 10, 9,111,117,116,100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40, 99,111, 41, 59, 10, 9,111,117,
-116,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,
- 97,116,104, 95, 97,100,100, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,
+ 10,102,108,111, 97,116, 32,101,120,112, 95, 98,108,101,110,100,101,114, 40,102,108,111, 97,116, 32,102, 41, 10,123,
+ 10, 9,114,101,116,117,114,110, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, 52, 54, 44, 32,102, 41, 59, 10,
+125, 10, 10,118,111,105,100, 32,114,103, 98, 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116,
+ 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 99,109, 97,120, 44, 32, 99,109,105,
+110, 44, 32,104, 44, 32,115, 44, 32,118, 44, 32, 99,100,101,108,116, 97, 59, 10, 9,118,101, 99, 51, 32, 99, 59, 10, 10, 9, 99,
+109, 97,120, 32, 61, 32,109, 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, 98, 91, 49, 93, 44, 32,114,103,
+ 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, 48, 93, 44, 32,109,105,110, 40,
+114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,100,101,108,116, 97, 32, 61, 32, 99,109, 97,120,
+ 45, 99,109,105,110, 59, 10, 10, 9,118, 32, 61, 32, 99,109, 97,120, 59, 10, 9,105,102, 32, 40, 99,109, 97,120, 33, 61, 48, 46,
+ 48, 41, 10, 9, 9,115, 32, 61, 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59, 10, 9,101,108,115,101, 32,123, 10, 9, 9,
+115, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 10, 9,105,102, 32, 40,115, 32, 61,
+ 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9,
+ 9, 99, 32, 61, 32, 40,118,101, 99, 51, 40, 99,109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99,109, 97,120, 41, 32, 45, 32,114,
+103, 98, 46,120,121,122, 41, 47, 99,100,101,108,116, 97, 59, 10, 10, 9, 9,105,102, 32, 40,114,103, 98, 46,120, 61, 61, 99,109,
+ 97,120, 41, 32,104, 32, 61, 32, 99, 91, 50, 93, 32, 45, 32, 99, 91, 49, 93, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,
+114,103, 98, 46,121, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, 91, 48, 93, 32, 45, 32, 32, 99,
+ 91, 50, 93, 59, 10, 9, 9,101,108,115,101, 32,104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, 49, 93, 32, 45, 32, 99, 91, 48,
+ 93, 59, 10, 10, 9, 9,104, 32, 47, 61, 32, 54, 46, 48, 59, 10, 10, 9, 9,105,102, 32, 40,104, 60, 48, 46, 48, 41, 10, 9, 9,
+ 9,104, 32, 43, 61, 32, 49, 46, 48, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,104, 44,
+ 32,115, 44, 32,118, 44, 32,114,103, 98, 46,119, 41, 59, 10,125, 10, 10,118,111,105,100, 32,104,115,118, 95,116,111, 95,114,103,
+ 98, 40,118,101, 99, 52, 32,104,115,118, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,
+102,108,111, 97,116, 32,105, 44, 32,102, 44, 32,112, 44, 32,113, 44, 32,116, 44, 32,104, 44, 32,115, 44, 32,118, 59, 10, 9,118,
+101, 99, 51, 32,114,103, 98, 59, 10, 10, 9,104, 32, 61, 32,104,115,118, 91, 48, 93, 59, 10, 9,115, 32, 61, 32,104,115,118, 91,
+ 49, 93, 59, 10, 9,118, 32, 61, 32,104,115,118, 91, 50, 93, 59, 10, 10, 9,105,102, 40,115, 61, 61, 48, 46, 48, 41, 32,123, 10,
+ 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,118, 44, 32,118, 41, 59, 10, 9,125, 10, 9,101,108,115,101, 32,
+123, 10, 9, 9,105,102, 40,104, 61, 61, 49, 46, 48, 41, 10, 9, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9, 10, 9, 9,
+104, 32, 42, 61, 32, 54, 46, 48, 59, 10, 9, 9,105, 32, 61, 32,102,108,111,111,114, 40,104, 41, 59, 10, 9, 9,102, 32, 61, 32,
+104, 32, 45, 32,105, 59, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,102, 44, 32,102, 44, 32,102, 41, 59, 10, 9, 9,
+112, 32, 61, 32,118, 42, 40, 49, 46, 48, 45,115, 41, 59, 10, 9, 9,113, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42,102,
+ 41, 41, 59, 10, 9, 9,116, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42, 40, 49, 46, 48, 45,102, 41, 41, 41, 59, 10, 9,
+ 9, 10, 9, 9,105,102, 32, 40,105, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,
+116, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, 46, 48, 41, 32,114,103, 98, 32,
+ 61, 32,118,101, 99, 51, 40,113, 44, 32,118, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61,
+ 32, 50, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116, 41, 59, 10, 9, 9,101,108,115,
+101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,113, 44,
+ 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52, 46, 48, 41, 32,114,103, 98, 32, 61, 32,
+118,101, 99, 51, 40,116, 44, 32,112, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,114,103, 98, 32, 61, 32,118,101, 99, 51,
+ 40,118, 44, 32,112, 44, 32,113, 41, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114,103,
+ 98, 44, 32,104,115,118, 46,119, 41, 59, 10,125, 10, 10,102,108,111, 97,116, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101,
+ 97,114,114,103, 98, 40,102,108,111, 97,116, 32, 99, 41, 10,123, 10, 9,105,102, 40, 99, 32, 60, 32, 48, 46, 48, 52, 48, 52, 53,
+ 41, 10, 9, 9,114,101,116,117,114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, 48, 58, 32, 99, 32, 42, 32, 40,
+ 49, 46, 48, 47, 49, 50, 46, 57, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,114,101,116,117,114,110, 32,112,111,119, 40, 40,
+ 99, 32, 43, 32, 48, 46, 48, 53, 53, 41, 42, 40, 49, 46, 48, 47, 49, 46, 48, 53, 53, 41, 44, 32, 50, 46, 52, 41, 59, 10,125, 10,
+ 10,102,108,111, 97,116, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40,102,108,111, 97,116, 32, 99,
+ 41, 10,123, 10, 9,105,102, 40, 99, 32, 60, 32, 48, 46, 48, 48, 51, 49, 51, 48, 56, 41, 10, 9, 9,114,101,116,117,114,110, 32,
+ 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, 48, 58, 32, 99, 32, 42, 32, 49, 50, 46, 57, 50, 59, 10, 9,101,108,115,101,
+ 10, 9, 9,114,101,116,117,114,110, 32, 49, 46, 48, 53, 53, 32, 42, 32,112,111,119, 40, 99, 44, 32, 49, 46, 48, 47, 50, 46, 52,
+ 41, 32, 45, 32, 48, 46, 48, 53, 53, 59, 10,125, 10, 10,118,111,105,100, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,
+114,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 95,102,114,111,109, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,
+ 95,116,111, 41, 10,123, 10, 9, 99,111,108, 95,116,111, 46,114, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,
+114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,114, 41, 59, 10, 9, 99,111,108, 95,116,111, 46,103, 32, 61, 32,115,114,
+103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,103, 41, 59, 10, 9, 99,111,
+108, 95,116,111, 46, 98, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,
+114,111,109, 46, 98, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 97, 32, 61, 32, 99,111,108, 95,102,114,111,109, 46, 97, 59, 10,
+125, 10, 10,118,111,105,100, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40,118,101, 99, 52, 32, 99,
+111,108, 95,102,114,111,109, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 95,116,111, 41, 10,123, 10, 9, 99,111,108,
+ 95,116,111, 46,114, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,
+111,109, 46,114, 41, 59, 10, 9, 99,111,108, 95,116,111, 46,103, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,
+115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,103, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 98, 32, 61, 32,108,105,
+110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46, 98, 41, 59, 10, 9, 99,111,
+108, 95,116,111, 46, 97, 32, 61, 32, 99,111,108, 95,102,114,111,109, 46, 97, 59, 10,125, 10, 10, 35,100,101,102,105,110,101, 32,
+ 77, 95, 80, 73, 32, 51, 46, 49, 52, 49, 53, 57, 50, 54, 53, 51, 53, 56, 57, 55, 57, 51, 50, 51, 56, 52, 54, 10, 10, 47, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,118, 99,111,108, 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99,
+ 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 41, 10,123, 10, 9,118, 99,111,
+108, 32, 61, 32,118,101, 99, 52, 40, 97,116,116,118, 99,111,108, 46,120, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,
+108, 46,121, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,122, 47, 50, 53, 53, 46, 48, 44, 32, 49, 46, 48, 41,
+ 59, 10,125, 10, 10,118,111,105,100, 32,117,118, 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 50, 32, 97,116,116,117,
+118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 41, 10,123, 10, 9,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,
+117,118, 42, 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 10,125,
+ 10, 10,118,111,105,100, 32,103,101,111,109, 40,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,109,
+ 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 97,116,116,111,114, 99,111, 44, 32,118,101,
+ 99, 50, 32, 97,116,116,117,118, 44, 32,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51,
+ 32,103,108,111, 98, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,108,111, 99, 97,108, 44, 32,111,117,116, 32,118,101, 99,
+ 51, 32,118,105,101,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,
+117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,
+111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102,114,111,110,116, 98, 97, 99,107, 41, 10,123, 10, 9,108,111, 99, 97,
+108, 32, 61, 32, 99,111, 59, 10, 9,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108,111, 99, 97,108, 41,
+ 59, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40,108,111, 99,
+ 97,108, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, 10,
+ 9,117,118, 95, 97,116,116,114,105, 98,117,116,101, 40, 97,116,116,117,118, 44, 32,117,118, 41, 59, 10, 9,110,111,114,109, 97,
+108, 32, 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,110,111,114, 41, 59, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,
+114,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,118, 99,111,
+108, 95, 97,116,116,114,105, 98,117,116,101, 40, 97,116,116,118, 99,111,108, 44, 32,118, 99,111,108, 41, 59, 10, 9,102,114,111,
+110,116, 98, 97, 99,107, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,112,112,105,110,103, 40,118,101,
+ 99, 51, 32,118,101, 99, 44, 32,109, 97,116, 52, 32,109, 97,116, 44, 32,118,101, 99, 51, 32,109,105,110,118,101, 99, 44, 32,118,
+101, 99, 51, 32,109, 97,120,118,101, 99, 44, 32,102,108,111, 97,116, 32,100,111,109,105,110, 44, 32,102,108,111, 97,116, 32,100,
+111,109, 97,120, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99,
+ 32, 61, 32, 40,109, 97,116, 32, 42, 32,118,101, 99, 52, 40,118,101, 99, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,
+105,102, 40,100,111,109,105,110, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109, 97,120, 40,
+111,117,116,118,101, 99, 44, 32,109,105,110,118,101, 99, 41, 59, 10, 9,105,102, 40,100,111,109, 97,120, 32, 61, 61, 32, 49, 46,
+ 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109,105,110, 40,111,117,116,118,101, 99, 44, 32,109, 97,120,118,101, 99,
+ 41, 59, 10,125, 10, 10,118,111,105,100, 32, 99, 97,109,101,114, 97, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,
+101, 99, 51, 32,111,117,116,118,105,101,119, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,101,112,116,104, 44,
+ 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,105,115,116, 41, 10,123, 10, 9,111,117,116,100,101,112,116,104, 32,
+ 61, 32, 97, 98,115, 40, 99,111, 46,122, 41, 59, 10, 9,111,117,116,100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40, 99,
+111, 41, 59, 10, 9,111,117,116,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 59, 10,125, 10,
+ 10,118,111,105,100, 32,109, 97,116,104, 95, 97,100,100, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116,
+ 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,
+ 97,108, 32, 61, 32,118, 97,108, 49, 32, 43, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,
+117, 98,116,114, 97, 99,116, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,
111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,
-108, 49, 32, 43, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,117, 98,116,114, 97, 99,116,
+108, 49, 32, 45, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,117,108,116,105,112,108,121,
40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111,
- 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 45, 32,118, 97,
-108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,117,108,116,105,112,108,121, 40,102,108,111, 97,116, 32,
-118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,
- 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 42, 32,118, 97,108, 50, 59, 10,125, 10, 10,
-118,111,105,100, 32,109, 97,116,104, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111,
- 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102,
- 32, 40,118, 97,108, 50, 32, 61, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10, 9,
-101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 47, 32,118, 97,108, 50, 59, 10,125, 10, 10,
-118,111,105,100, 32,109, 97,116,104, 95,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,
-111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,115,105,110, 40,118, 97,108, 41,
- 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 99,111,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44,
- 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 99,
-111,115, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,116, 97,110,103,101,110,116, 40,102,108,
-111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,
-116,118, 97,108, 32, 61, 32,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,115,
-105,110, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,
-123, 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48,
- 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97,115,105,110, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,
-111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, 99,111,115, 40,
-102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,
-105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 10, 9,
- 9,111,117,116,118, 97,108, 32, 61, 32, 97, 99,111,115, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,
-118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,116, 97,110, 40,102,108,111,
+ 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 42, 32,118, 97,
+108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,118, 97,
+108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108,
+ 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 50, 32, 61, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61,
+ 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 47, 32,118, 97,
+108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44,
+ 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,115,
+105,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 99,111,115,105,110,101, 40,102,108,111,
97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,
-118, 97,108, 32, 61, 32, 97,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,112,111,
-119, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,
-111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 49, 32, 62, 61, 32, 48, 46, 48, 41, 10,
- 9, 9,111,117,116,118, 97,108, 32, 61, 32,112,111,119, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10, 9,101,108,115,
-101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,
-111,103, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,
-108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32, 48, 46, 48, 32, 32, 38,
- 38, 32,118, 97,108, 50, 32, 62, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 61, 32,108,111,103, 50, 40,118, 97,108,
- 49, 41, 32, 47, 32,108,111,103, 50, 40,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 61,
- 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109, 97,120, 40,102,108,111, 97,116, 32,118, 97,108,
- 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41,
- 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97,120, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10,
- 10,118,111,105,100, 32,109, 97,116,104, 95,109,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116,
- 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,
- 97,108, 32, 61, 32,109,105,110, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,
-116,104, 95,114,111,117,110,100, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,
-116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 61, 32,102,108,111,111,114, 40,118, 97,108, 32, 43, 32, 48, 46, 53,
- 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,101,115,115, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,
-118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,
- 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 60, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32,
- 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,
-118,111,105,100, 32,109, 97,116,104, 95,103,114,101, 97,116,101,114, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,118, 97,108,
- 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41,
- 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 49,
- 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,
-100, 32,115,113,117,101,101,122,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,102,108,111, 97,116, 32,119,105,100,116,104,
- 44, 32,102,108,111, 97,116, 32, 99,101,110,116,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108,
- 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 47, 40, 49, 46, 48, 32, 43, 32,112,111,119, 40, 50, 46, 55,
- 49, 56, 50, 56, 49, 56, 51, 44, 32, 45, 40, 40,118, 97,108, 45, 99,101,110,116,101,114, 41, 42,119,105,100,116,104, 41, 41, 41,
- 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,100,100, 40,118,101, 99, 51, 32,118, 49, 44, 32,
-118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,
-111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, 59,
- 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98,115,
- 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, 46,
- 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,115,117, 98, 40,118,101, 99, 51, 32,118, 49, 44,
+118, 97,108, 32, 61, 32, 99,111,115, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,116, 97,110,
+103,101,110,116, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108,
+ 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,
+109, 97,116,104, 95, 97,115,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,
+117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32,
+ 62, 61, 32, 45, 49, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97,115,105,110, 40,118, 97,108, 41, 59, 10, 9,
+101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,
+104, 95, 97, 99,111,115, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,
+ 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32,
+ 45, 49, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97, 99,111,115, 40,118, 97,108, 41, 59, 10, 9,101,108,115,
+101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,
+116, 97,110, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41,
+ 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 97,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,
+109, 97,116,104, 95,112,111,119, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44,
+ 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 49, 32, 62,
+ 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,112,111,119, 40,118, 97,108, 49, 44, 32,118, 97,108, 50,
+ 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100,
+ 32,109, 97,116,104, 95,108,111,103, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50,
+ 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62,
+ 32, 48, 46, 48, 32, 32, 38, 38, 32,118, 97,108, 50, 32, 62, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 61, 32,108,
+111,103, 50, 40,118, 97,108, 49, 41, 32, 47, 32,108,111,103, 50, 40,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,
+111,117,116,118, 97,108, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109, 97,120, 40,102,108,
+111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,
+111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97,120, 40,118, 97,108, 49, 44, 32,118, 97,
+108, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 49,
+ 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,
+123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109,105,110, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,
+118,111,105,100, 32,109, 97,116,104, 95,114,111,117,110,100, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,
+108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 61, 32,102,108,111,111,114, 40,118, 97,
+108, 32, 43, 32, 48, 46, 53, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,101,115,115, 95,116,104, 97,110,
+ 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111,
+ 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 60, 32,118, 97,108, 50, 41, 10, 9, 9,
+111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48,
+ 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,103,114,101, 97,116,101,114, 95,116,104, 97,110, 40,102,108,
+111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,
+111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,
+118, 97,108, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59,
+ 10,125, 10, 10,118,111,105,100, 32,115,113,117,101,101,122,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,102,108,111, 97,
+116, 32,119,105,100,116,104, 44, 32,102,108,111, 97,116, 32, 99,101,110,116,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116,
+ 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 47, 40, 49, 46, 48, 32, 43, 32,
+112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 51, 44, 32, 45, 40, 40,118, 97,108, 45, 99,101,110,116,101,114, 41, 42,119,
+105,100,116,104, 41, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,100,100, 40,118,101,
+ 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44,
+ 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,
+ 49, 32, 43, 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93,
+ 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91,
+ 50, 93, 41, 41, 47, 51, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,115,117, 98, 40,118,
+101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99,
+ 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,
+118, 49, 32, 45, 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48,
+ 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99,
+ 91, 50, 93, 41, 41, 47, 51, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,118,101,114,
+ 97,103,101, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,
+117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,
+101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,
+117,116,118,101, 99, 41, 59, 10, 9,111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,118,
+101, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,100,111,116, 40,118,101, 99, 51, 32,118,
+ 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116,
+ 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40,
+ 48, 44, 32, 48, 44, 32, 48, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,100,111,116, 40,118, 49, 44, 32,118, 50, 41, 59,
+ 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 99,114,111,115,115, 40,118,101, 99, 51, 32,118, 49, 44,
32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,
-108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 45, 32,118, 50,
- 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98,
-115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51,
- 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,118,101,114, 97,103,101, 40,118,101, 99,
- 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,
-111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49,
- 32, 43, 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59,
- 10, 9,111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10,
- 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,100,111,116, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51,
- 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,
-111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 44, 32, 48, 44, 32, 48,
- 41, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,100,111,116, 40,118, 49, 44, 32,118, 50, 41, 59, 10,125, 10, 10,118,111,105,
-100, 32,118,101, 99, 95,109, 97,116,104, 95, 99,114,111,115,115, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118,
- 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,
-116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 99,114,111,115,115, 40,118, 49, 44, 32,118, 50, 41, 59,
- 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, 10,118,111,
-105,100, 32,118,101, 99, 95,109, 97,116,104, 95,110,111,114,109, 97,108,105,122,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,
-116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41,
- 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,118, 41, 59, 10, 9,111,117,116,118,101, 99, 32,
- 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104,
- 95,110,101,103, 97,116,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, 41, 10,123,
- 10, 9,111,117,116,118, 32, 61, 32, 45,118, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,114,109, 97,108, 40,118,101, 99, 51,
- 32,100,105,114, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114, 44,
- 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,111,116, 41, 10,123, 10, 9,111,117,116,110,111,114, 32, 61, 32,100,
-105,114, 59, 10, 9,111,117,116,100,111,116, 32, 61, 32, 45,100,111,116, 40,100,105,114, 44, 32,110,111,114, 41, 59, 10,125, 10,
- 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,118,101, 99, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 51,
- 32,118,101, 99, 44, 32,115, 97,109,112,108,101,114, 49, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118,101,
- 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 46,120, 32, 61, 32,116,101,120,116,117,114,101,
- 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, 46,120, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,
-120, 59, 10, 9,111,117,116,118,101, 99, 46,121, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,
-112, 44, 32, 40,118,101, 99, 46,121, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,121, 59, 10, 9,111,117,116,118,101, 99,
- 46,122, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, 46,122, 32,
- 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,122, 59, 10, 10, 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41,
- 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32, 40,111,117,116,118,101, 99, 42,102, 97, 99, 41, 32, 43, 32, 40,118,101, 99, 42,
- 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 10, 10,125, 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,114,103, 98, 40,
-102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,115, 97,109,112,108,101,114, 49, 68, 32, 99,
-117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116,
- 99,111,108, 46,114, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,120,116,
-117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,114, 41, 46, 97, 41, 46,114, 59, 10, 9,111,117,
-116, 99,111,108, 46,103, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,120,
-116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,103, 41, 46, 97, 41, 46,103, 59, 10, 9,111,
-117,116, 99,111,108, 46, 98, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,
-120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46, 98, 41, 46, 97, 41, 46, 98, 59, 10, 10,
- 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32, 40,111,117,116,
- 99,111,108, 42,102, 97, 99, 41, 32, 43, 32, 40, 99,111,108, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 10, 10, 9,111,117,
-116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,
-101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123,
- 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 40,
-118,101, 99, 51, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,
-116, 99,111,108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 97, 40,118,101, 99,
- 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,
-108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101, 95,122,101,114,111, 40,
-111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46,
- 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101, 95,111,110,101, 40,111,117,116, 32,102,108,111,
- 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,
-111,105,100, 32,115,101,116, 95,114,103, 98, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, 97,108,
- 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100,
- 32,115,101,116, 95,114,103, 98, 97, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 52, 32,111,117,116,118, 97,108, 41, 10,
-123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 52, 40, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,
-105,120, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,
-101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97,
- 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,
-108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,
-108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 97,100,100, 40,102,108,
+108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 99,114,111,115,115, 40,118,
+ 49, 44, 32,118, 50, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41,
+ 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,110,111,114,109, 97,108,105,122,101, 40,118,101, 99,
+ 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,
+111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,118, 41, 59, 10, 9,
+111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,
+101, 99, 95,109, 97,116,104, 95,110,101,103, 97,116,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,
+111,117,116,118, 41, 10,123, 10, 9,111,117,116,118, 32, 61, 32, 45,118, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,114,109,
+ 97,108, 40,118,101, 99, 51, 32,100,105,114, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,
+111,117,116,110,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,111,116, 41, 10,123, 10, 9,111,117,116,
+110,111,114, 32, 61, 32,100,105,114, 59, 10, 9,111,117,116,100,111,116, 32, 61, 32, 45,100,111,116, 40,100,105,114, 44, 32,110,
+111,114, 41, 59, 10,125, 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,118,101, 99, 40,102,108,111, 97,116, 32,102, 97,
+ 99, 44, 32,118,101, 99, 51, 32,118,101, 99, 44, 32,115, 97,109,112,108,101,114, 49, 68, 32, 99,117,114,118,101,109, 97,112, 44,
+ 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 46,120, 32, 61, 32,
+116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, 46,120, 32, 43, 32, 49, 46, 48,
+ 41, 42, 48, 46, 53, 41, 46,120, 59, 10, 9,111,117,116,118,101, 99, 46,121, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40,
+ 99,117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, 46,121, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,121, 59, 10,
+ 9,111,117,116,118,101, 99, 46,122, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,
+ 40,118,101, 99, 46,122, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,122, 59, 10, 10, 9,105,102, 32, 40,102, 97, 99, 32,
+ 33, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32, 40,111,117,116,118,101, 99, 42,102, 97, 99, 41, 32,
+ 43, 32, 40,118,101, 99, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 10, 10,125, 10, 10,118,111,105,100, 32, 99,117,114,118,
+101,115, 95,114,103, 98, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,115, 97,109,112,
+108,101,114, 49, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41,
+ 10,123, 10, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,
+112, 44, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,114, 41, 46, 97, 41,
+ 46,114, 59, 10, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109,
+ 97,112, 44, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,103, 41, 46, 97,
+ 41, 46,103, 59, 10, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,
+109, 97,112, 44, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46, 98, 41, 46,
+ 97, 41, 46, 98, 59, 10, 10, 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108,
+ 32, 61, 32, 40,111,117,116, 99,111,108, 42,102, 97, 99, 41, 32, 43, 32, 40, 99,111,108, 42, 40, 49, 46, 48, 45,102, 97, 99, 41,
+ 41, 59, 10, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,115,
+101,116, 95,118, 97,108,117,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,
+116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,
+101,116, 95,114,103, 98, 40,118,101, 99, 51, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108,
+ 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,
+103, 98, 97, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123,
+ 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,
+101, 95,122,101,114,111, 40,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,
+ 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101, 95,111,110,101, 40,
+111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46,
+ 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 51,
+ 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 10,
+125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 97, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 52, 32,111,
+117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 52, 40, 48, 46, 48, 41, 59, 10,125, 10,
+ 10,118,111,105,100, 32,109,105,120, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32,
+ 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108,
+ 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59,
+ 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59,
+ 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120,
+ 95, 97,100,100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32,
+ 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32,
+ 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,
+109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,
+116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,109,117,108,
+116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108,
+ 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,
+109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120,
+ 40, 99,111,108, 49, 44, 32, 99,111,108, 49, 32, 42, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,
+108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115, 99,114,101,101,110,
+ 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50,
+ 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,
+112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32,
+ 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 32,
+ 45, 32, 40,118,101, 99, 52, 40,102, 97, 99,109, 41, 32, 43, 32,102, 97, 99, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45,
+ 32, 99,111,108, 50, 41, 41, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 49, 41, 59, 10, 9,111,117,116,
+ 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,111,118,101,114,
+108, 97,121, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,
+111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,
+108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109,
+ 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10,
+ 9,105,102, 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 42,
+ 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,101,108,115,101, 10, 9,
+ 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97,
+ 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,114, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,
+114, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,
+108, 46,103, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9,101,
+108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50,
+ 46, 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,103, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,
+116, 99,111,108, 46,103, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,
+111,117,116, 99,111,108, 46, 98, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,
+ 98, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,
+109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46, 98, 41, 41, 42, 40, 49, 46, 48,
+ 32, 45, 32,111,117,116, 99,111,108, 46, 98, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115,117, 98, 40,102,108,
111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,
117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102,
97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108,
- 49, 44, 32, 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32,
- 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,109,117,108,116, 40,102,108,111, 97,116,
- 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,
-118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44,
- 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32,
- 99,111,108, 49, 32, 42, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,
-111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115, 99,114,101,101,110, 40,102,108,111, 97,116, 32,
+ 49, 44, 32, 99,111,108, 49, 32, 45, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32,
+ 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,105,118, 40,102,108,111, 97,116, 32,
102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,
101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32,
48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102,
- 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 40,118,101, 99, 52,
- 40,102, 97, 99,109, 41, 32, 43, 32,102, 97, 99, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 50, 41, 41,
- 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 49, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61,
- 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,111,118,101,114,108, 97,121, 40,102,108,111,
- 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,
-116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97,
- 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32,
- 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40,111,117,116,
- 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 42, 61, 32,102, 97, 99,109, 32,
- 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108,
- 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32,
- 45, 32, 99,111,108, 50, 46,114, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 59, 10, 10, 9,105,
-102, 40,111,117,116, 99,111,108, 46,103, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 42, 61, 32,
-102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9,101,108,115,101, 10, 9, 9,111,
-117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42,
- 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,103, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,103, 41,
- 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,
- 98, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9,101,108,115,
-101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48,
- 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46, 98, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,
-111,108, 46, 98, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115,117, 98, 40,102,108,111, 97,116, 32,102, 97, 99,
- 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52,
- 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48,
- 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 49,
- 32, 45, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46,
- 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,105,118, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101,
- 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,
- 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46,
- 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,
-117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,114, 32, 33, 61, 32, 48, 46, 48,
- 41, 32,111,117,116, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,114, 32, 43, 32,102, 97, 99,
- 42,111,117,116, 99,111,108, 46,114, 47, 99,111,108, 50, 46,114, 59, 10, 9,105,102, 40, 99,111,108, 50, 46,103, 32, 33, 61, 32,
- 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,103, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,103, 32, 43, 32,
-102, 97, 99, 42,111,117,116, 99,111,108, 46,103, 47, 99,111,108, 50, 46,103, 59, 10, 9,105,102, 40, 99,111,108, 50, 46, 98, 32,
- 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46, 98, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46, 98,
- 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46, 98, 47, 99,111,108, 50, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,
-109,105,120, 95,100,105,102,102, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,
-101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97,
- 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,
-108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 97, 98,115, 40, 99,111,108, 49, 32, 45, 32, 99,111,108, 50, 41, 44, 32,
-102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,
-100, 32,109,105,120, 95,100, 97,114,107, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44,
- 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,
-102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116,
- 99,111,108, 46,114,103, 98, 32, 61, 32,109,105,110, 40, 99,111,108, 49, 46,114,103, 98, 44, 32, 99,111,108, 50, 46,114,103, 98,
- 42,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,
-105,100, 32,109,105,120, 95,108,105,103,104,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108,
+ 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,114,
+ 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,
+114, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,114, 47, 99,111,108, 50, 46,114, 59, 10, 9,105,102, 40, 99,111,108,
+ 50, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,103, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,
+111,108, 46,103, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,103, 47, 99,111,108, 50, 46,103, 59, 10, 9,105,102, 40,
+ 99,111,108, 50, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46, 98, 32, 61, 32,102, 97, 99,109, 42,111,
+117,116, 99,111,108, 46, 98, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46, 98, 47, 99,111,108, 50, 46, 98, 59, 10,125,
+ 10, 10,118,111,105,100, 32,109,105,120, 95,100,105,102,102, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32,
+ 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108,
+ 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59,
+ 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 97, 98,115, 40, 99,111,108, 49, 32, 45, 32,
+ 99,111,108, 50, 41, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59,
+ 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100, 97,114,107, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99,
+ 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,
+111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48,
+ 41, 59, 10, 9,111,117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109,105,110, 40, 99,111,108, 49, 46,114,103, 98, 44, 32, 99,
+111,108, 50, 46,114,103, 98, 42,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97,
+ 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,108,105,103,104,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,
+101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,
+116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49,
+ 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109, 97,120, 40, 99,111,108, 49, 46,114,103, 98, 44,
+ 32, 99,111,108, 50, 46,114,103, 98, 42,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49,
+ 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,111,100,103,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44,
+ 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,
+111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44,
+ 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40,111,117,116, 99,
+111,108, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48,
+ 32, 45, 32,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10,
+ 9, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,
+112, 32, 61, 32,111,117,116, 99,111,108, 46,114, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,
+111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61,
+ 32,116,109,112, 59, 10, 9,125, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10,
+ 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10,
+ 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49,
+ 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32,111,117,116, 99,111,108, 46,103, 47,116,109,
+112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,
+108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 10, 9,125, 10, 9,105,102, 40,111,117,
+116, 99,111,108, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49,
+ 46, 48, 32, 45, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48,
+ 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,
+116,109,112, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,
+116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46, 98,
+ 32, 61, 32,116,109,112, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 98,117,114,110, 40,102,108,111, 97,
+116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116,
+ 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99,
+ 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,116,109,112, 44, 32,102, 97, 99,109, 32, 61, 32,
+ 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,116,109,
+112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,105,102, 40,116,109,112, 32, 60,
+ 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,
+102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41,
+ 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, 10,
+ 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61,
+ 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,109,112, 59, 10, 10, 9,
+116,109,112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9,105,102, 40,116,109,112,
+ 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101,
+ 32,105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,
+103, 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48,
+ 59, 10, 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103,
+ 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 10,
+ 10, 9,116,109,112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9,105,102, 40,116,
+109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,
+115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,
+108, 46, 98, 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48,
+ 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108,
+ 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,109,112,
+ 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,104,117,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99,
+ 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,
+111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48,
+ 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,
+116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,
+109,112, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,105,
+102, 40,104,115,118, 50, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,
+111,117,116, 99,111,108, 44, 32,104,115,118, 41, 59, 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 10,
+ 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,116,109,112, 41, 59, 32, 10, 10, 9, 9,111,117,116, 99,
+111,108, 32, 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, 32,116,109,112, 44, 32,102, 97, 99, 41, 59, 10, 9, 9,111,117,
+116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,
+115, 97,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,
+111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,
+108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109,
+ 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10,
+ 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116,
+ 99,111,108, 44, 32,104,115,118, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10,
+ 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9, 9,104,115,118,
+ 46,121, 32, 61, 32,102, 97, 99,109, 42,104,115,118, 46,121, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,121, 59, 10, 9, 9,
+104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10, 9,125, 10,125, 10, 10,118,
+111,105,100, 32,109,105,120, 95,118, 97,108, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49,
+ 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10,
+ 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,
+111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118,
+ 44, 32,104,115,118, 50, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 49, 44, 32,104,115,118, 41, 59, 10,
+ 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,104,115,118, 46,122,
+ 32, 61, 32,102, 97, 99,109, 42,104,115,118, 46,122, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,122, 59, 10, 9,104,115,118,
+ 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,
+120, 95, 99,111,108,111,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101,
+ 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99,
+ 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,
+102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108,
+ 49, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109,112, 59, 10, 9,114,103, 98, 95,116,
+111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 50, 46,121, 32, 33,
+ 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,108, 44, 32,104,115,
+118, 41, 59, 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 10, 9, 9,104,115,118, 46,121, 32, 61, 32,
+104,115,118, 50, 46,121, 59, 10, 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,116,109,112, 41, 59, 32,
+ 10, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, 32,116,109,112, 44, 32,102, 97,
+ 99, 41, 59, 10, 9, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125, 10,125, 10, 10,118,
+111,105,100, 32,109,105,120, 95,115,111,102,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108,
49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123,
- 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,
-117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109, 97,120, 40, 99,111,108, 49, 46,114,103, 98, 44, 32, 99,111,108, 50, 46,114,
-103, 98, 42,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,
-118,111,105,100, 32,109,105,120, 95,100,111,100,103,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,
-111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41,
- 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,
- 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,114, 32, 33, 61,
- 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 42,
- 99,111,108, 50, 46,114, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,
-111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32,111,117,116,
- 99,111,108, 46,114, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,
- 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,109,112, 59, 10, 9,
-125, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116,
- 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9, 9,105,102, 40,116,109,
-112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,
-108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32,111,117,116, 99,111,108, 46,103, 47,116,109,112, 41, 32, 62, 32, 49, 46,
- 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,
-111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 10, 9,125, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32,
- 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97,
- 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9, 9,111,117,
-116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32,111,
-117,116, 99,111,108, 46, 98, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46, 98, 32,
- 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,109,112, 59,
- 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 98,117,114,110, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,
-118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,
-117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32,
- 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,116,109,112, 44, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102,
- 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,116,109,112, 32, 61, 32,102, 97, 99,
-109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10,
- 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32,
- 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 47,116,109,112, 41, 41, 32,
- 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,
-102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 10, 9,
-101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,109,112, 59, 10, 10, 9,116,109,112, 32, 61, 32,102,
- 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48,
- 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40, 40,116,109,
-112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,103, 41, 47,116,109,112, 41,
- 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101,
- 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59,
- 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 10, 10, 9,116,109,112, 32, 61,
- 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48,
- 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40, 40,
-116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, 98, 41, 47,116,109,
-112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,
-115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46,
- 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,109,112, 59, 10,125, 10, 10,118,111,
-105,100, 32,109,105,120, 95,104,117,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44,
- 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,
-102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111,
- 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,
- 99,111,108, 49, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109,112, 59, 10, 9,114,103,
- 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 50, 46,
-121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,108, 44,
- 32,104,115,118, 41, 59, 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 10, 9, 9,104,115,118, 95,116,
-111, 95,114,103, 98, 40,104,115,118, 44, 32,116,109,112, 41, 59, 32, 10, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,
-120, 40,111,117,116, 99,111,108, 44, 32,116,109,112, 44, 32,102, 97, 99, 41, 59, 10, 9, 9,111,117,116, 99,111,108, 46, 97, 32,
- 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115, 97,116, 40,102,108,111,
- 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,
-116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97,
- 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32,
- 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,118,101, 99, 52, 32,104,
-115,118, 44, 32,104,115,118, 50, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,108, 44, 32,104,115,
-118, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,
-111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9, 9,104,115,118, 46,121, 32, 61, 32,102, 97,
- 99,109, 42,104,115,118, 46,121, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,121, 59, 10, 9, 9,104,115,118, 95,116,111, 95,
-114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120,
- 95,118, 97,108, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32,
- 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32,
- 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,
-109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 59,
- 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 49, 44, 32,104,115,118, 41, 59, 10, 9,114,103, 98, 95,116,111,
- 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,104,115,118, 46,122, 32, 61, 32,102, 97, 99,109,
- 42,104,115,118, 46,122, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,122, 59, 10, 9,104,115,118, 95,116,111, 95,114,103, 98,
- 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 99,111,108,111,114,
- 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50,
- 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,
-112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32,
- 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,118,101,
- 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109,112, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,
-111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 50, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,
-123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,108, 44, 32,104,115,118, 41, 59, 10, 9, 9,104,
-115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 10, 9, 9,104,115,118, 46,121, 32, 61, 32,104,115,118, 50, 46,121, 59,
- 10, 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,116,109,112, 41, 59, 32, 10, 10, 9, 9,111,117,116,
- 99,111,108, 32, 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, 32,116,109,112, 44, 32,102, 97, 99, 41, 59, 10, 9, 9,111,
-117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120,
- 95,115,111,102,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52,
- 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61,
- 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97,
- 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,118,101, 99, 52, 32,111,110,101, 61, 32,118,101, 99, 52,
- 40, 49, 46, 48, 41, 59, 10, 9,118,101, 99, 52, 32,115, 99,114, 61, 32,111,110,101, 32, 45, 32, 40,111,110,101, 32, 45, 32, 99,
-111,108, 50, 41, 42, 40,111,110,101, 32, 45, 32, 99,111,108, 49, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,102, 97, 99,
-109, 42, 99,111,108, 49, 32, 43, 32,102, 97, 99, 42, 40, 40,111,110,101, 32, 45, 32, 99,111,108, 49, 41, 42, 99,111,108, 50, 42,
- 99,111,108, 49, 32, 43, 32, 99,111,108, 49, 42,115, 99,114, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,108,105,
-110,101, 97,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32,
- 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32,
- 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61,
- 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,114, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,
-111,108, 46,114, 61, 32, 99,111,108, 49, 46,114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,114, 32,
- 45, 32, 48, 46, 53, 41, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114, 61, 32, 99,111,108, 49, 46,
-114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,114, 41, 32, 45, 32, 49, 46, 48, 41, 59, 10, 10, 9,
-105,102, 40, 99,111,108, 50, 46,103, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 61, 32, 99,111,108,
- 49, 46,103, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, 32, 45, 32, 48, 46, 53, 41, 41, 59, 10,
- 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 61, 32, 99,111,108, 49, 46,103, 32, 43, 32,102, 97, 99, 42, 40,
- 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, 41, 32, 45, 32, 49, 46, 48, 41, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46, 98,
- 32, 62, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 61, 32, 99,111,108, 49, 46, 98, 32, 43, 32,102, 97, 99,
- 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46, 98, 32, 45, 32, 48, 46, 53, 41, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,
-117,116, 99,111,108, 46, 98, 61, 32, 99,111,108, 49, 46, 98, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50,
- 46, 98, 41, 32, 45, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118, 97,108,116,111,114,103, 98, 40,102,108,111,
- 97,116, 32,102, 97, 99, 44, 32,115, 97,109,112,108,101,114, 49, 68, 32, 99,111,108,111,114,109, 97,112, 44, 32,111,117,116, 32,
-118,101, 99, 52, 32,111,117,116, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, 97,108,112,104, 97, 41,
- 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,111,108,111,114,109, 97,112, 44,
- 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 97,108,112,104, 97, 32, 61, 32,111,117,116, 99,111,108, 46, 97, 59, 10,125, 10, 10,
-118,111,105,100, 32,114,103, 98,116,111, 98,119, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111,
- 97,116, 32,111,117,116,118, 97,108, 41, 32, 32, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 99,111,108,111,114, 46,114,
- 42, 48, 46, 51, 53, 32, 43, 32, 99,111,108,111,114, 46,103, 42, 48, 46, 52, 53, 32, 43, 32, 99,111,108,111,114, 46, 98, 42, 48,
- 46, 50, 59, 32, 47, 42, 32,107,101,101,112, 32,116,104,101,115,101, 32,102, 97, 99,116,111,114,115, 32,105,110, 32,115,121,110,
- 99, 32,119,105,116,104, 32,116,101,120,116,117,114,101, 46,104, 58, 82, 71, 66, 84, 79, 66, 87, 32, 42, 47, 10,125, 10, 10,118,
-111,105,100, 32,105,110,118,101,114,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,
-111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 46,120,121,122, 32, 61,
- 32,109,105,120, 40, 99,111,108, 46,120,121,122, 44, 32,118,101, 99, 51, 40, 49, 46, 48, 44, 32, 49, 46, 48, 44, 32, 49, 46, 48,
- 41, 32, 45, 32, 99,111,108, 46,120,121,122, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46,119, 32, 61, 32, 99,
-111,108, 46,119, 59, 10,125, 10, 10,118,111,105,100, 32,104,117,101, 95,115, 97,116, 40,102,108,111, 97,116, 32,104,117,101, 44,
- 32,102,108,111, 97,116, 32,115, 97,116, 44, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,102,108,111, 97,116, 32,102,
- 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123,
- 10, 9,118,101, 99, 52, 32,104,115,118, 59, 10, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 44, 32,104,115,
-118, 41, 59, 10, 10, 9,104,115,118, 91, 48, 93, 32, 43, 61, 32, 40,104,117,101, 32, 45, 32, 48, 46, 53, 41, 59, 10, 9,105,102,
- 40,104,115,118, 91, 48, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 48, 93, 45, 61, 49, 46, 48, 59, 32,101,108,115,101, 32,105,
-102, 40,104,115,118, 91, 48, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 48, 93, 43, 61, 32, 49, 46, 48, 59, 10, 9,104,115,118,
- 91, 49, 93, 32, 42, 61, 32,115, 97,116, 59, 10, 9,105,102, 40,104,115,118, 91, 49, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91,
- 49, 93, 61, 32, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 49, 93, 60, 48, 46, 48, 41, 32,104,115,118,
- 91, 49, 93, 61, 32, 48, 46, 48, 59, 10, 9,104,115,118, 91, 50, 93, 32, 42, 61, 32,118, 97,108,117,101, 59, 10, 9,105,102, 40,
-104,115,118, 91, 50, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 50, 93, 61, 32, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102,
- 40,104,115,118, 91, 50, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 50, 93, 61, 32, 48, 46, 48, 59, 10, 10, 9,104,115,118, 95,
-116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,
-109,105,120, 40, 99,111,108, 44, 32,111,117,116, 99,111,108, 44, 32,102, 97, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,
-101,112, 97,114, 97,116,101, 95,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,
-114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, 98, 41, 10,123, 10, 9,
-114, 32, 61, 32, 99,111,108, 46,114, 59, 10, 9,103, 32, 61, 32, 99,111,108, 46,103, 59, 10, 9, 98, 32, 61, 32, 99,111,108, 46,
- 98, 59, 10,125, 10, 10,118,111,105,100, 32, 99,111,109, 98,105,110,101, 95,114,103, 98, 40,102,108,111, 97,116, 32,114, 44, 32,
-102,108,111, 97,116, 32,103, 44, 32,102,108,111, 97,116, 32, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 41, 10,
-123, 10, 9, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114, 44, 32,103, 44, 32, 98, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,
-118,111,105,100, 32,111,117,116,112,117,116, 95,110,111,100,101, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,102,108,111, 97,116,
- 32, 97,108,112,104, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,111,117,116,114,
-103, 98, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 46,114,103, 98, 44, 32, 97,108,112,104, 97, 41, 59, 10,125, 10, 10, 47, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 84, 69, 88, 84, 85, 82, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 47, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,102,108,105,112, 95, 98,108,101,110,100, 40,118,101,
- 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,
-101, 99, 32, 61, 32,118,101, 99, 46,121,120,122, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95, 98,108,
-101,110,100, 95,108,105,110, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,
- 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 49, 46, 48, 43,118,101, 99, 46,120, 41, 47, 50, 46, 48, 59,
- 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95, 98,108,101,110,100, 95,113,117, 97,100, 40,118,101, 99, 51,
- 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,
-108, 32, 61, 32,109, 97,120, 40, 40, 49, 46, 48, 43,118,101, 99, 46,120, 41, 47, 50, 46, 48, 44, 32, 48, 46, 48, 41, 59, 10, 9,
-111,117,116,118, 97,108, 32, 42, 61, 32,111,117,116,118, 97,108, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,
-101, 95,119,111,111,100, 95,115,105,110, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,
- 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,
-111,114,109, 97,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 97, 32, 61, 32,115,113,114,116, 40,118,101, 99, 46,120, 42,118,
-101, 99, 46,120, 32, 43, 32,118,101, 99, 46,121, 42,118,101, 99, 46,121, 32, 43, 32,118,101, 99, 46,122, 42,118,101, 99, 46,122,
- 41, 42, 50, 48, 46, 48, 59, 10, 9,102,108,111, 97,116, 32,119,105, 32, 61, 32, 48, 46, 53, 32, 43, 32, 48, 46, 53, 42,115,105,
-110, 40, 97, 41, 59, 10, 10, 9,118, 97,108,117,101, 32, 61, 32,119,105, 59, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99,
- 52, 40,119,105, 44, 32,119,105, 44, 32,119,105, 44, 32, 49, 46, 48, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32,118,101,
- 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,
-114,101, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97,
- 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,
-114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,116,
-101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 40,118,101, 99, 46,120,121, 32, 43, 32,118,101, 99, 50, 40, 49, 46, 48,
- 44, 32, 49, 46, 48, 41, 41, 42, 48, 46, 53, 41, 59, 10, 9,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 59, 10, 10, 9,110,111,
-114,109, 97,108, 46,120, 32, 61, 32, 50, 46, 48, 42, 40, 99,111,108,111,114, 46,114, 32, 45, 32, 48, 46, 53, 41, 59, 10, 9,110,
-111,114,109, 97,108, 46,121, 32, 61, 32, 50, 46, 48, 42, 40, 48, 46, 53, 32, 45, 32, 99,111,108,111,114, 46,103, 41, 59, 10, 9,
-110,111,114,109, 97,108, 46,122, 32, 61, 32, 50, 46, 48, 42, 40, 99,111,108,111,114, 46, 98, 32, 45, 32, 48, 46, 53, 41, 59, 10,
-125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 77, 84, 69, 88, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,111,114, 99,111, 40,118,101, 99, 51, 32,
- 97,116,116,111,114, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, 41, 10,123, 10, 9,111,114, 99,111, 32,
- 61, 32, 97,116,116,111,114, 99,111, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,117,118, 40,118,101, 99, 50,
- 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 41, 10,123, 10, 9, 47, 42, 32,100,105,115, 97, 98,
-108,101,100, 32,102,111,114, 32,110,111,119, 44, 32,119,111,114,107,115, 32,116,111,103,101,116,104,101,114, 32,119,105,116,104,
- 32,108,101, 97,118,105,110,103, 32,111,117,116, 32,109,116,101,120, 95, 50,100, 95,109, 97,112,112,105,110,103, 10, 9, 32, 32,
- 32,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44,
- 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 32, 42, 47, 10, 9,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118,
- 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,110,111,114,109, 40,118,101, 99, 51, 32,
-110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47,
- 42, 32, 99,111,114,114,101,115,112,111,110,100,115, 32,116,111, 32,115,104,105, 45, 62,111,114,110, 44, 32,119,104,105, 99,104,
- 32,105,115, 32,110,101,103, 97,116,101,100, 32,115,111, 32, 99, 97,110, 99,101,108,115, 10, 9, 32, 32, 32,111,117,116, 32, 98,
-108,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,110,101,103, 97,116,105,111,110, 32, 42, 47, 10, 9,111,117,116,110,111,
-114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,110,111,114,109, 97,108, 41, 59, 10,125, 10, 10,118,111,105,
-100, 32,116,101,120, 99,111, 95,116, 97,110,103,101,110,116, 40,118,101, 99, 51, 32,116, 97,110,103,101,110,116, 44, 32,111,117,
-116, 32,118,101, 99, 51, 32,111,117,116,116, 97,110,103,101,110,116, 41, 10,123, 10, 9,111,117,116,116, 97,110,103,101,110,116,
- 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,116, 97,110,103,101,110,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,
-101,120, 99,111, 95,103,108,111, 98, 97,108, 40,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,118,101, 99,
- 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108, 41, 10,123, 10, 9,103,108,111, 98, 97,108,
- 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, 46,120,121,
-122, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,111, 98,106,101, 99,116, 40,109, 97,116, 52, 32,118,105,101,
-119,105,110,118,109, 97,116, 44, 32,109, 97,116, 52, 32,111, 98,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44,
- 32,111,117,116, 32,118,101, 99, 51, 32,111, 98,106,101, 99,116, 41, 10,123, 10, 9,111, 98,106,101, 99,116, 32, 61, 32, 40,111,
- 98,105,110,118,109, 97,116, 42, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48,
- 41, 41, 41, 46,120,121,122, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,114,101,102,108, 40,118,101, 99, 51,
- 32,118,110, 44, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,114,101,102, 41, 10,123, 10,
- 9,114,101,102, 32, 61, 32,118,105,101,119, 32, 45, 32, 50, 46, 48, 42,100,111,116, 40,118,110, 44, 32,118,105,101,119, 41, 42,
-118,110, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,110,111,114,109, 40,118,101, 99, 51, 32,110,111,114,109,
- 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, 42, 32, 98,108,
-101,110,100,101,114, 32,114,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42,
- 47, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,110,111,114,109, 97,108,
- 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, 98,108,101,110,100, 40,118,101, 99, 51, 32,111,
-117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,
-102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,
-108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109,
- 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,
-111,108, 32, 43, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,
-103, 98, 95,109,117,108, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44,
- 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99,
- 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42,
- 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, 10, 9,105,110, 99,111,
-108, 32, 61, 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99,111,108, 59,
- 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115, 99,114,101,101,110, 40,118,101, 99, 51, 32,111,117,
-116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,
-108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,
-111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32,
- 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,118,101, 99, 51, 40, 49, 46, 48, 41, 32,
- 45, 32, 40,118,101, 99, 51, 40,102, 97, 99,109, 41, 32, 43, 32,102, 97, 99,116, 42, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32,
- 45, 32,116,101,120, 99,111,108, 41, 41, 42, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,111,117,116, 99,111,108, 41, 59,
- 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,111,118,101,114,108, 97,121, 40,118,101, 99, 51, 32,111,
-117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,
-102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,
-108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109,
- 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53,
- 41, 10, 9, 9,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 42, 40,102, 97, 99,109, 32, 43, 32, 50,
- 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108,
- 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48,
- 32, 45, 32,116,101,120, 99,111,108, 46,114, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 59, 10,
- 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99,111,108, 46,103, 32, 61,
- 32,111,117,116, 99,111,108, 46,103, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,
-108, 46,103, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102,
- 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46,103, 41, 41,
- 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,103, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98,
- 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 42, 40,102, 97,
- 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 41, 59, 10, 9,101,108,115,101, 10, 9,
- 9,105,110, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,
-116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46, 98, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,
-108, 46, 98, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115,117, 98, 40,118,101, 99, 51, 32,
-111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44,
- 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,
-105,110, 99,111,108, 32, 61, 32, 45,102, 97, 99,116, 42,102, 97, 99,103, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,
-111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, 97,100,100, 40,118,101, 99, 51, 32,111,117,
+ 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,
+108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,118,101, 99, 52, 32,111,110,
+101, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 10, 9,118,101, 99, 52, 32,115, 99,114, 61, 32,111,110,101, 32, 45, 32, 40,
+111,110,101, 32, 45, 32, 99,111,108, 50, 41, 42, 40,111,110,101, 32, 45, 32, 99,111,108, 49, 41, 59, 10, 9,111,117,116, 99,111,
+108, 32, 61, 32,102, 97, 99,109, 42, 99,111,108, 49, 32, 43, 32,102, 97, 99, 42, 40, 40,111,110,101, 32, 45, 32, 99,111,108, 49,
+ 41, 42, 99,111,108, 50, 42, 99,111,108, 49, 32, 43, 32, 99,111,108, 49, 42,115, 99,114, 41, 59, 10,125, 10, 10,118,111,105,100,
+ 32,109,105,120, 95,108,105,110,101, 97,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49,
+ 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10,
+ 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 10, 9,111,
+117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,114, 32, 62, 32, 48, 46, 53, 41,
+ 10, 9, 9,111,117,116, 99,111,108, 46,114, 61, 32, 99,111,108, 49, 46,114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40,
+ 99,111,108, 50, 46,114, 32, 45, 32, 48, 46, 53, 41, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114,
+ 61, 32, 99,111,108, 49, 46,114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,114, 41, 32, 45, 32, 49,
+ 46, 48, 41, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,103, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108,
+ 46,103, 61, 32, 99,111,108, 49, 46,103, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, 32, 45, 32,
+ 48, 46, 53, 41, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 61, 32, 99,111,108, 49, 46,103, 32,
+ 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, 41, 32, 45, 32, 49, 46, 48, 41, 59, 10, 10, 9,105,102,
+ 40, 99,111,108, 50, 46, 98, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 61, 32, 99,111,108, 49, 46,
+ 98, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46, 98, 32, 45, 32, 48, 46, 53, 41, 41, 59, 10, 9,101,
+108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 61, 32, 99,111,108, 49, 46, 98, 32, 43, 32,102, 97, 99, 42, 40, 50, 46,
+ 48, 42, 40, 99,111,108, 50, 46, 98, 41, 32, 45, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118, 97,108,116,111,
+114,103, 98, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,115, 97,109,112,108,101,114, 49, 68, 32, 99,111,108,111,114,109, 97,
+112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,
+116, 97,108,112,104, 97, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,111,
+108,111,114,109, 97,112, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 97,108,112,104, 97, 32, 61, 32,111,117,116, 99,111,108,
+ 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98,116,111, 98,119, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,
+111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 32, 32, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,
+ 99,111,108,111,114, 46,114, 42, 48, 46, 51, 53, 32, 43, 32, 99,111,108,111,114, 46,103, 42, 48, 46, 52, 53, 32, 43, 32, 99,111,
+108,111,114, 46, 98, 42, 48, 46, 50, 59, 32, 47, 42, 32,107,101,101,112, 32,116,104,101,115,101, 32,102, 97, 99,116,111,114,115,
+ 32,105,110, 32,115,121,110, 99, 32,119,105,116,104, 32,116,101,120,116,117,114,101, 46,104, 58, 82, 71, 66, 84, 79, 66, 87, 32,
+ 42, 47, 10,125, 10, 10,118,111,105,100, 32,105,110,118,101,114,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99,
+ 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,
+108, 46,120,121,122, 32, 61, 32,109,105,120, 40, 99,111,108, 46,120,121,122, 44, 32,118,101, 99, 51, 40, 49, 46, 48, 44, 32, 49,
+ 46, 48, 44, 32, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 46,120,121,122, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,
+108, 46,119, 32, 61, 32, 99,111,108, 46,119, 59, 10,125, 10, 10,118,111,105,100, 32,104,117,101, 95,115, 97,116, 40,102,108,111,
+ 97,116, 32,104,117,101, 44, 32,102,108,111, 97,116, 32,115, 97,116, 44, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,
+102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,
+116, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32,104,115,118, 59, 10, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,
+ 99,111,108, 44, 32,104,115,118, 41, 59, 10, 10, 9,104,115,118, 91, 48, 93, 32, 43, 61, 32, 40,104,117,101, 32, 45, 32, 48, 46,
+ 53, 41, 59, 10, 9,105,102, 40,104,115,118, 91, 48, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 48, 93, 45, 61, 49, 46, 48, 59,
+ 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 48, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 48, 93, 43, 61, 32, 49, 46,
+ 48, 59, 10, 9,104,115,118, 91, 49, 93, 32, 42, 61, 32,115, 97,116, 59, 10, 9,105,102, 40,104,115,118, 91, 49, 93, 62, 49, 46,
+ 48, 41, 32,104,115,118, 91, 49, 93, 61, 32, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 49, 93, 60, 48,
+ 46, 48, 41, 32,104,115,118, 91, 49, 93, 61, 32, 48, 46, 48, 59, 10, 9,104,115,118, 91, 50, 93, 32, 42, 61, 32,118, 97,108,117,
+101, 59, 10, 9,105,102, 40,104,115,118, 91, 50, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 50, 93, 61, 32, 49, 46, 48, 59, 32,
+101,108,115,101, 32,105,102, 40,104,115,118, 91, 50, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 50, 93, 61, 32, 48, 46, 48, 59,
+ 10, 10, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10, 10, 9,111,117,
+116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 44, 32,111,117,116, 99,111,108, 44, 32,102, 97, 99, 41, 59, 10,125, 10,
+ 10,118,111,105,100, 32,115,101,112, 97,114, 97,116,101, 95,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116,
+ 32,102,108,111, 97,116, 32,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,103, 44, 32,111,117,116, 32,102,108,111, 97,116,
+ 32, 98, 41, 10,123, 10, 9,114, 32, 61, 32, 99,111,108, 46,114, 59, 10, 9,103, 32, 61, 32, 99,111,108, 46,103, 59, 10, 9, 98,
+ 32, 61, 32, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32, 99,111,109, 98,105,110,101, 95,114,103, 98, 40,102,108,
+111, 97,116, 32,114, 44, 32,102,108,111, 97,116, 32,103, 44, 32,102,108,111, 97,116, 32, 98, 44, 32,111,117,116, 32,118,101, 99,
+ 52, 32, 99,111,108, 41, 10,123, 10, 9, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114, 44, 32,103, 44, 32, 98, 44, 32, 49, 46,
+ 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,111,117,116,112,117,116, 95,110,111,100,101, 40,118,101, 99, 52, 32,114,103, 98,
+ 44, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 10,
+123, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 46,114,103, 98, 44, 32, 97,108,112,104, 97, 41,
+ 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 84, 69, 88, 84, 85, 82, 69, 83, 32, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,102,108,105,112, 95, 98,
+108,101,110,100, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,
+123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 46,121,120,122, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,
+116,117,114,101, 95, 98,108,101,110,100, 95,108,105,110, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111,
+ 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 49, 46, 48, 43,118,101, 99, 46,
+120, 41, 47, 50, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95, 98,108,101,110,100, 95,113,117,
+ 97,100, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123,
+ 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97,120, 40, 40, 49, 46, 48, 43,118,101, 99, 46,120, 41, 47, 50, 46, 48, 44, 32,
+ 48, 46, 48, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 42, 61, 32,111,117,116,118, 97,108, 59, 10,125, 10, 10,118,111,105,100,
+ 32,116,101,120,116,117,114,101, 95,119,111,111,100, 95,115,105,110, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,
+102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116,
+ 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 97, 32, 61, 32,115,113,114,116, 40,
+118,101, 99, 46,120, 42,118,101, 99, 46,120, 32, 43, 32,118,101, 99, 46,121, 42,118,101, 99, 46,121, 32, 43, 32,118,101, 99, 46,
+122, 42,118,101, 99, 46,122, 41, 42, 50, 48, 46, 48, 59, 10, 9,102,108,111, 97,116, 32,119,105, 32, 61, 32, 48, 46, 53, 32, 43,
+ 32, 48, 46, 53, 42,115,105,110, 40, 97, 41, 59, 10, 10, 9,118, 97,108,117,101, 32, 61, 32,119,105, 59, 10, 9, 99,111,108,111,
+114, 32, 61, 32,118,101, 99, 52, 40,119,105, 44, 32,119,105, 44, 32,119,105, 44, 32, 49, 46, 48, 41, 59, 10, 9,110,111,114,109,
+ 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,
+100, 32,116,101,120,116,117,114,101, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,115, 97,109,112,108,101,
+114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101,
+ 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 10,123, 10, 9, 99,111,
+108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 40,118,101, 99, 46,120,121, 32, 43, 32,118,
+101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 41, 42, 48, 46, 53, 41, 59, 10, 9,118, 97,108,117,101, 32, 61, 32, 49, 46,
+ 48, 59, 10, 10, 9,110,111,114,109, 97,108, 46,120, 32, 61, 32, 50, 46, 48, 42, 40, 99,111,108,111,114, 46,114, 32, 45, 32, 48,
+ 46, 53, 41, 59, 10, 9,110,111,114,109, 97,108, 46,121, 32, 61, 32, 50, 46, 48, 42, 40, 48, 46, 53, 32, 45, 32, 99,111,108,111,
+114, 46,103, 41, 59, 10, 9,110,111,114,109, 97,108, 46,122, 32, 61, 32, 50, 46, 48, 42, 40, 99,111,108,111,114, 46, 98, 32, 45,
+ 32, 48, 46, 53, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 77, 84, 69, 88, 32, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,111,114, 99,
+111, 40,118,101, 99, 51, 32, 97,116,116,111,114, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, 41, 10,123,
+ 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,
+117,118, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 41, 10,123, 10, 9, 47,
+ 42, 32,100,105,115, 97, 98,108,101,100, 32,102,111,114, 32,110,111,119, 44, 32,119,111,114,107,115, 32,116,111,103,101,116,104,
+101,114, 32,119,105,116,104, 32,108,101, 97,118,105,110,103, 32,111,117,116, 32,109,116,101,120, 95, 50,100, 95,109, 97,112,112,
+105,110,103, 10, 9, 32, 32, 32,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45, 32,118,101,
+ 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 32, 42, 47, 10, 9,117,118, 32, 61, 32,118,101, 99,
+ 51, 40, 97,116,116,117,118, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,110,111,114,
+109, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,
+108, 41, 10,123, 10, 9, 47, 42, 32, 99,111,114,114,101,115,112,111,110,100,115, 32,116,111, 32,115,104,105, 45, 62,111,114,110,
+ 44, 32,119,104,105, 99,104, 32,105,115, 32,110,101,103, 97,116,101,100, 32,115,111, 32, 99, 97,110, 99,101,108,115, 10, 9, 32,
+ 32, 32,111,117,116, 32, 98,108,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,110,101,103, 97,116,105,111,110, 32, 42, 47,
+ 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,110,111,114,109, 97,108, 41, 59,
+ 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,116, 97,110,103,101,110,116, 40,118,101, 99, 52, 32,116, 97,110,103,
+101,110,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116, 97,110,103,101,110,116, 41, 10,123, 10, 9,111,117,116,
+116, 97,110,103,101,110,116, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,116, 97,110,103,101,110,116, 46,120,121,122, 41,
+ 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,103,108,111, 98, 97,108, 40,109, 97,116, 52, 32,118,105,101,119,
+105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108,
+ 41, 10,123, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 99,
+111, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,111, 98,106,101,
+ 99,116, 40,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,109, 97,116, 52, 32,111, 98,105,110,118,109, 97,
+116, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111, 98,106,101, 99,116, 41, 10,123, 10, 9,
+111, 98,106,101, 99,116, 32, 61, 32, 40,111, 98,105,110,118,109, 97,116, 42, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,
+101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, 41, 46,120,121,122, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,
+111, 95,114,101,102,108, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,111,117,116, 32,118,
+101, 99, 51, 32,114,101,102, 41, 10,123, 10, 9,114,101,102, 32, 61, 32,118,105,101,119, 32, 45, 32, 50, 46, 48, 42,100,111,116,
+ 40,118,110, 44, 32,118,105,101,119, 41, 42,118,110, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,110,111,114,
+109, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,
+108, 41, 10,123, 10, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,105,
+115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32, 45,110,111,114,109, 97,
+108,105,122,101, 40,110,111,114,109, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, 98,
+108,101,110,100, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,
+108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,
+105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,
+102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,110, 99,111,108, 32,
+ 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,
+118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,109,117,108, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,
+101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97,
+ 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,
+109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102,
+ 97, 99,103, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42,116,101,120, 99,
+111,108, 41, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115, 99,114,
+101,101,110, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,
+111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,
+110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102,
+ 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, 10, 9,105,110, 99,111,108, 32, 61,
+ 32,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32, 40,118,101, 99, 51, 40,102, 97, 99,109, 41, 32, 43, 32,102, 97, 99,116, 42,
+ 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,116,101,120, 99,111,108, 41, 41, 42, 40,118,101, 99, 51, 40, 49, 46, 48, 41,
+ 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,111,118,101,
+114,108, 97,121, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,
+108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,
+105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,
+102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, 10, 9,105,102, 40,111,117,116,
+ 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,
+114, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 41, 59, 10, 9,101,
+108,115,101, 10, 9, 9,105,110, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46,
+ 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46,114, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,
+111,117,116, 99,111,108, 46,114, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 60, 32, 48, 46, 53, 41, 10,
+ 9, 9,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48,
+ 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 46,103,
+ 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45,
+ 32,116,101,120, 99,111,108, 46,103, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,103, 41, 59, 10, 10, 9,
+105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99,111,108, 46, 98, 32, 61, 32,111,
+117,116, 99,111,108, 46, 98, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,
+ 98, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,
+109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46, 98, 41, 41, 42, 40,
+ 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, 98, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103,
+ 98, 95,115,117, 98, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,
+102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51,
+ 32,105,110, 99,111,108, 41, 10,123, 10, 9,105,110, 99,111,108, 32, 61, 32, 45,102, 97, 99,116, 42,102, 97, 99,103, 42,116,101,
+120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,
+ 97,100,100, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,
+111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,
+110, 99,111,108, 41, 10,123, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,102, 97, 99,103, 42,116,101,120, 99,111,
+108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,100,105,118,
+ 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116,
+ 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,
+108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103,
+ 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,102, 40,116,101,120, 99,111,108, 46,
+114, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,
+114, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46,114, 47,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40,
+116,101,120, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46,103, 32, 61, 32,102, 97, 99,109, 42,
+111,117,116, 99,111,108, 46,103, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46,103, 47,116,101,120, 99,111,108, 46,
+103, 59, 10, 9,105,102, 40,116,101,120, 99,111,108, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46, 98, 32,
+ 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46, 98, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46, 98, 47,
+116,101,120, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,100,105,102,102, 40,
+118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,
+102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108,
+ 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59,
+ 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,
+109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42, 97, 98,115, 40,116,101,120, 99,111,108, 32, 45, 32,111,117,116,
+ 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,100, 97,114,107, 40,118,101, 99, 51,
+ 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116,
+ 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10,
+ 9,102,108,111, 97,116, 32,102, 97, 99,109, 44, 32, 99,111,108, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103,
+ 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116,
+ 42,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46,114, 41, 32,105,
+110, 99,111,108, 46,114, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116,
+ 99,111,108, 46,114, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102,
+ 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46,103, 41, 32,105,110, 99,111,108, 46,103, 32, 61, 32, 99,111,108, 59, 32,
+101,108,115,101, 32,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 59, 10, 9, 99,111,108, 32, 61, 32,
+102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46,
+ 98, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46, 98, 32, 61,
+ 32,111,117,116, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,108,105,103,104,
+116, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,
+116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,
+111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 44, 32, 99,111,108, 59, 10, 10, 9,102, 97, 99,116, 32, 42,
+ 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9, 99,111,108, 32,
+ 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,
+108, 46,114, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,114,
+ 32, 61, 32,111,117,116, 99,111,108, 46,114, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,
+103, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46,103, 41, 32,105,110, 99,111,108, 46,103, 32, 61,
+ 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 59, 10, 9,
+ 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,
+117,116, 99,111,108, 46, 98, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,
+111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103,
+ 98, 95,104,117,101, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,
+102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51,
+ 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95,104,117,101, 40,102,
+ 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99,
+ 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98,
+ 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115, 97,116,
+ 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116,
+ 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,
+108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95,115, 97,116, 40,102, 97, 99,116, 42,102,
+ 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120,
+ 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,
+108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,118, 97,108, 40,118,101, 99, 51,
+ 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116,
+ 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10,
+ 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95,118, 97,108, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,
+118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32,
+ 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98,
+ 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, 99,111,108,111,114, 40,118,101, 99, 51, 32,111,117,
116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,
-108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,105,110,
- 99,111,108, 32, 61, 32,102, 97, 99,116, 42,102, 97, 99,103, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59,
- 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,100,105,118, 40,118,101, 99, 51, 32,111,117,116, 99,111,
-108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,
-116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116,
- 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49,
- 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,102, 40,116,101,120, 99,111,108, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,
-110, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,114, 32, 43, 32,102, 97, 99,116, 42,111,117,
-116, 99,111,108, 46,114, 47,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40,116,101,120, 99,111,108, 46,103, 32, 33, 61,
- 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46,103, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,103, 32, 43, 32,
-102, 97, 99,116, 42,111,117,116, 99,111,108, 46,103, 47,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40,116,101,120, 99,
-111,108, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,
-111,108, 46, 98, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46, 98, 47,116,101,120, 99,111,108, 46, 98, 59, 10,125,
- 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,100,105,102,102, 40,118,101, 99, 51, 32,111,117,116, 99,111,108,
- 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116,
- 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,
-102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46,
- 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,
-102, 97, 99,116, 42, 97, 98,115, 40,116,101,120, 99,111,108, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,
-105,100, 32,109,116,101,120, 95,114,103, 98, 95,100, 97,114,107, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101,
- 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,
-103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109,
- 44, 32, 99,111,108, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49,
- 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 59, 10,
- 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46,114, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32, 99,111,
-108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 59, 10, 9, 99,111,108,
- 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,
-111,108, 46,103, 41, 32,105,110, 99,111,108, 46,103, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,
-103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108,
- 46, 98, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46, 98, 41, 32,105,110, 99,111,108, 46, 98, 32,
- 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 59, 10,
-125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,108,105,103,104,116, 40,118,101, 99, 51, 32,111,117,116, 99,
-111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111,
- 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,
-116, 32,102, 97, 99,109, 44, 32, 99,111,108, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97,
- 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,
-111,108, 46,114, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46,114, 41, 32,105,110, 99,111,108, 46,
-114, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114,
- 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40, 99,111,108, 32,
- 62, 32,111,117,116, 99,111,108, 46,103, 41, 32,105,110, 99,111,108, 46,103, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,
-105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,
-116,101,120, 99,111,108, 46, 98, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46, 98, 41, 32,105,110,
- 99,111,108, 46, 98, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,
-111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,104,117,101, 40,118,101, 99, 51, 32,
-111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44,
- 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,
-118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95,104,117,101, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,
+108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101,
+ 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95, 99,111,108,111,114, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,
101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49,
46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59,
- 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115, 97,116, 40,118,101, 99, 51, 32,111,117,116, 99,111,
-108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,
-116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32,
- 99,111,108, 59, 10, 10, 9,109,105,120, 95,115, 97,116, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,
-117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,
- 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,
-111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,118, 97,108, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101,
- 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,
-103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10,
- 10, 9,109,105,120, 95,118, 97,108, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108,
- 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59,
- 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,
-116,101,120, 95,114,103, 98, 95, 99,111,108,111,114, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,
-116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,
-111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,
-105,120, 95, 99,111,108,111,114, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44,
- 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10,
- 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,
-101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,105,110,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,
-102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99,109, 41, 10,123, 10, 9,102,
- 97, 99,116, 32, 42, 61, 32, 97, 98,115, 40,102, 97, 99,103, 41, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97,
- 99,116, 59, 10, 10, 9,105,102, 40,102, 97, 99,103, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,
-109,112, 32, 61, 32,102, 97, 99,116, 59, 10, 9, 9,102, 97, 99,116, 32, 61, 32,102, 97, 99,109, 59, 10, 9, 9,102, 97, 99,109,
- 32, 61, 32,116,109,112, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 98,108,
-101,110,100, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,
-102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,
-116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,
-108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,110,
- 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 59,
- 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,109,117,108, 40,102,108,111, 97,116, 32,111,117,
-116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,
-102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,
-102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,
-116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102,
- 97, 99,103, 59, 10, 9,105,110, 99,111,108, 32, 61, 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42,116,101,120, 99,111,
-108, 41, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115, 99,
-114,101,101,110, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44,
- 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111,
- 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118,
- 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102,
- 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99,103, 59, 10, 9,105,110, 99,111,108, 32, 61, 32, 49, 46, 48, 32, 45,
- 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 41, 41, 42, 40, 49,
- 46, 48, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101,
- 95,115,117, 98, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44,
- 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111,
- 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118,
- 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102,
- 97, 99,116, 32, 61, 32, 45,102, 97, 99,116, 59, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,
-108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 97,
-100,100, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,
+ 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,105,110,111,117,116, 32,102,
+108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116,
+ 32,102, 97, 99,109, 41, 10,123, 10, 9,102, 97, 99,116, 32, 42, 61, 32, 97, 98,115, 40,102, 97, 99,103, 41, 59, 10, 9,102, 97,
+ 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,102, 40,102, 97, 99,103, 32, 60, 32, 48, 46, 48, 41, 32,
+123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32,102, 97, 99,116, 59, 10, 9, 9,102, 97, 99,116, 32, 61, 32,102,
+ 97, 99,109, 59, 10, 9, 9,102, 97, 99,109, 32, 61, 32,116,109,112, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,116,
+101,120, 95,118, 97,108,117,101, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111,
+ 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,
+103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,
+109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,
+102, 97, 99,109, 41, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,102,
+ 97, 99,109, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,109,
+117,108, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,
108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116,
32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,
117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,
-116, 32, 61, 32,102, 97, 99,116, 59, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43,
- 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100,105,118, 40,
-102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,
-116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,
- 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,
-118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,102, 40,116,101,120,
- 99,111,108, 32, 33, 61, 32, 48, 46, 48, 41, 10, 9, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,
-108, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 47,116,101,120, 99,111,108, 59, 10, 9,101,108,115,101, 10, 9, 9,
-105,110, 99,111,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,
-100,105,102,102, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44,
- 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111,
- 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118,
- 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,
-110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42, 97, 98,115, 40,116,101,
-120, 99,111,108, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,
-117,101, 95,100, 97,114,107, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,
-111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,
-102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,
-120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10,
- 10, 9,102,108,111, 97,116, 32, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 59, 10, 9,105,102, 40, 99,
-111,108, 32, 60, 32,111,117,116, 99,111,108, 41, 32,105,110, 99,111,108, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,
-110, 99,111,108, 32, 61, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,
-101, 95,108,105,103,104,116, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,
-111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,
-102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,
-120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10,
- 10, 9,102,108,111, 97,116, 32, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 59, 10, 9,105,102, 40, 99,
-111,108, 32, 62, 32,111,117,116, 99,111,108, 41, 32,105,110, 99,111,108, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,
-110, 99,111,108, 32, 61, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,
-101, 95, 99,108, 97,109,112, 95,112,111,115,105,116,105,118,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,
-102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 10,123, 10, 9,111,117,116,102, 97, 99, 32, 61, 32,109, 97,120, 40,102, 97,
- 99, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 99,108, 97,109,
-112, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 10,123,
- 10, 9,111,117,116,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59,
- 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,104, 97,114, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,104,
- 97,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,104, 97,114, 41, 10,123, 10, 9,111,117,116,104, 97,114, 32,
- 61, 32,104, 97,114, 47, 49, 50, 56, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,104, 97,114, 95,109,117,
-108,116,105,112,108,121, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,104, 97,114, 44, 32,111,117,116, 32,102,108,111, 97,
-116, 32,111,117,116,104, 97,114, 41, 10,123, 10, 9,104, 97,114, 32, 42, 61, 32, 49, 50, 56, 46, 48, 59, 10, 10, 9,105,102, 40,
-104, 97,114, 32, 60, 32, 49, 46, 48, 41, 32,111,117,116,104, 97,114, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,105,
-102, 40,104, 97,114, 32, 62, 32, 53, 49, 49, 46, 48, 41, 32,111,117,116,104, 97,114, 32, 61, 32, 53, 49, 49, 46, 48, 59, 10, 9,
-101,108,115,101, 32,111,117,116,104, 97,114, 32, 61, 32,104, 97,114, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,
- 97,108,112,104, 97, 95,102,114,111,109, 95, 99,111,108, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,102,108,111,
- 97,116, 32, 97,108,112,104, 97, 41, 10,123, 10, 9, 97,108,112,104, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,
-111,105,100, 32,109,116,101,120, 95, 97,108,112,104, 97, 95,116,111, 95, 99,111,108, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,
-102,108,111, 97,116, 32, 97,108,112,104, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10,
- 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 97,108,112,104, 97, 41, 59, 10,
-125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98,116,111,105,110,116, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,
-111,117,116, 32,102,108,111, 97,116, 32,105,110,116,101,110,115,105,116,121, 41, 10,123, 10, 9,105,110,116,101,110,115,105,116,
-121, 32, 61, 32,100,111,116, 40,118,101, 99, 51, 40, 48, 46, 51, 53, 44, 32, 48, 46, 52, 53, 44, 32, 48, 46, 50, 41, 44, 32,114,
-103, 98, 46,114,103, 98, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,105,110,118,101,
-114,116, 40,102,108,111, 97,116, 32,105,110,118, 97,108,117,101, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,
- 97,108,117,101, 41, 10,123, 10, 9,111,117,116,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 32, 45, 32,105,110,118, 97,108,117,
-101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,105,110,118,101,114,116, 40,118,101, 99, 52, 32,
-105,110,114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,111,117,116,114,103,
- 98, 32, 61, 32,118,101, 99, 52, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,105,110,114,103, 98, 46,114,103, 98, 44, 32,
-105,110,114,103, 98, 46, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115,116,101,
-110, 99,105,108, 40,102,108,111, 97,116, 32,115,116,101,110, 99,105,108, 44, 32,102,108,111, 97,116, 32,105,110,116,101,110,115,
-105,116,121, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115,116,101,110, 99,105,108, 44, 32,111,117,116, 32,102,
-108,111, 97,116, 32,111,117,116,105,110,116,101,110,115,105,116,121, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,116,
- 32, 61, 32,105,110,116,101,110,115,105,116,121, 59, 10, 9,111,117,116,105,110,116,101,110,115,105,116,121, 32, 61, 32,105,110,
-116,101,110,115,105,116,121, 42,115,116,101,110, 99,105,108, 59, 10, 9,111,117,116,115,116,101,110, 99,105,108, 32, 61, 32,115,
-116,101,110, 99,105,108, 42,102, 97, 99,116, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115,116,
-101,110, 99,105,108, 40,102,108,111, 97,116, 32,115,116,101,110, 99,105,108, 44, 32,118,101, 99, 52, 32,114,103, 98, 44, 32,111,
-117,116, 32,102,108,111, 97,116, 32,111,117,116,115,116,101,110, 99,105,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,
-116,114,103, 98, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,116, 32, 61, 32,114,103, 98, 46, 97, 59, 10, 9,111,117,
-116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 46,114,103, 98, 44, 32,114,103, 98, 46, 97, 42,115,116,101,110, 99,
-105,108, 41, 59, 10, 9,111,117,116,115,116,101,110, 99,105,108, 32, 61, 32,115,116,101,110, 99,105,108, 42,102, 97, 99,116, 59,
- 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,109, 97,112,112,105,110,103, 95,111,102,115, 40,118,101, 99, 51, 32,116,
-101,120, 99,111, 44, 32,118,101, 99, 51, 32,111,102,115, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116,101,120, 99,
-111, 41, 10,123, 10, 9,111,117,116,116,101,120, 99,111, 32, 61, 32,116,101,120, 99,111, 32, 43, 32,111,102,115, 59, 10,125, 10,
- 10,118,111,105,100, 32,109,116,101,120, 95,109, 97,112,112,105,110,103, 95,115,105,122,101, 40,118,101, 99, 51, 32,116,101,120,
- 99,111, 44, 32,118,101, 99, 51, 32,115,105,122,101, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116,101,120, 99,111,
- 41, 10,123, 10, 9,111,117,116,116,101,120, 99,111, 32, 61, 32,115,105,122,101, 42,116,101,120, 99,111, 59, 10,125, 10, 10,118,
-111,105,100, 32,109,116,101,120, 95, 50,100, 95,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,
-116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40,
-118,101, 99, 46,120,121, 42, 48, 46, 53, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 32, 48, 46, 53, 41, 44, 32,118,101, 99,
- 46,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32,116,101,120,
- 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,
-117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,116,
-101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,118, 97,108,117,101, 32,
- 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,
-116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,
-111,114,109, 97,108, 41, 10,123, 10, 32, 32, 32, 32,118,101, 99, 52, 32, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,
-101, 50, 68, 40,105,109, 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 50, 46,
- 48, 42, 40,118,101, 99, 51, 40, 99,111,108,111,114, 46,114, 44, 32, 45, 99,111,108,111,114, 46,103, 44, 32, 99,111,108,111,114,
- 46, 98, 41, 32, 45, 32,118,101, 99, 51, 40, 48, 46, 53, 44, 32, 45, 48, 46, 53, 44, 32, 48, 46, 53, 41, 41, 59, 10,125, 10, 10,
-118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,110,111,114,109, 97,108,115, 95,105,110,105,116, 40, 32,118,101, 99,
- 51, 32,118, 78, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78,111,114,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,
- 78, 97, 99, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 32, 41,
- 10,123, 10, 9,118, 78,111,114,103, 32, 61, 32,118, 78, 59, 10, 9,118, 78, 97, 99, 99, 32, 61, 32,118, 78, 59, 10, 9,102, 80,
-114,101,118, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10, 47, 42, 42, 32,104,101,108,112,101,
-114, 32,109,101,116,104,111,100, 32,116,111, 32,101,120,116,114, 97, 99,116, 32,116,104,101, 32,117,112,112,101,114, 32,108,101,
-102,116, 32, 51,120, 51, 32,109, 97,116,114,105,120, 32,102,114,111,109, 32, 97, 32, 52,120, 52, 32,109, 97,116,114,105,120, 32,
- 42, 47, 10,109, 97,116, 51, 32,116,111, 95,109, 97,116, 51, 40,109, 97,116, 52, 32,109, 52, 41, 10,123, 10, 9,109, 97,116, 51,
- 32,109, 51, 59, 10, 9,109, 51, 91, 48, 93, 32, 61, 32,109, 52, 91, 48, 93, 46,120,121,122, 59, 10, 9,109, 51, 91, 49, 93, 32,
- 61, 32,109, 52, 91, 49, 93, 46,120,121,122, 59, 10, 9,109, 51, 91, 50, 93, 32, 61, 32,109, 52, 91, 50, 93, 46,120,121,122, 59,
- 10, 9,114,101,116,117,114,110, 32,109, 51, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,105,
-110,105,116, 95,111, 98,106,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95,112,111,115, 44, 32,118,101, 99,
- 51, 32,115,117,114,102, 95,110,111,114,109, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,109, 97,116, 52, 32,109, 86,105,101,119,
- 44, 32,109, 97,116, 52, 32,109, 86,105,101,119, 73,110,118, 44, 32,109, 97,116, 52, 32,109, 79, 98,106, 44, 32,109, 97,116, 52,
- 32,109, 79, 98,106, 73,110,118, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77,
- 97,103,110,105,116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9,
- 9, 9, 9, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,
-116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32,
- 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116,
- 32,102,108,111, 97,116, 32,102, 68,101,116, 32, 41, 32, 10,123, 10, 9,109, 97,116, 51, 32,111, 98,106, 50,118,105,101,119, 32,
- 61, 32,116,111, 95,109, 97,116, 51, 40,109, 86,105,101,119, 32, 42, 32,109, 79, 98,106, 41, 59, 10, 9,109, 97,116, 51, 32,118,
-105,101,119, 50,111, 98,106, 32, 61, 32,116,111, 95,109, 97,116, 51, 40,109, 79, 98,106, 73,110,118, 32, 42, 32,109, 86,105,101,
-119, 73,110,118, 41, 59, 10, 9, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 83, 32, 61, 32,118,105,101,119, 50,111, 98,
-106, 32, 42, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 83,105,103,
-109, 97, 84, 32, 61, 32,118,105,101,119, 50,111, 98,106, 32, 42, 32,100, 70,100,121, 40, 32,115,117,114,102, 95,112,111,115, 32,
- 41, 59, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32,115,117,114,102, 95,110,111,
-114,109, 32, 42, 32,111, 98,106, 50,118,105,101,119, 32, 41, 59, 10, 10, 9,118, 82, 49, 32, 61, 32, 99,114,111,115,115, 40, 32,
-118, 83,105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 78, 44,
- 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 59, 10, 9,102, 68,101,116, 32, 61, 32,100,111,116, 32, 40, 32,118, 83,105,103,109,
- 97, 83, 44, 32,118, 82, 49, 32, 41, 59, 10, 9, 10, 9, 47, 42, 32,112,114,101,116,114, 97,110,115,102,111,114,109, 32,118, 78,
- 97, 99, 99, 32, 40,105,110, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, 41, 32,117,115,105,110,103, 32,116,
-104,101, 32,105,110,118,101,114,115,101, 32,116,114, 97,110,115,112,111,115,101,100, 32, 42, 47, 10, 9,118, 82, 49, 32, 61, 32,
-118, 82, 49, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 10, 9,118, 82, 50, 32, 61, 32,118, 82, 50, 32, 42, 32,118,105,101,
-119, 50,111, 98,106, 59, 10, 9,118, 78, 32, 61, 32,118, 78, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 10, 9, 10, 9,102,
-108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, 68,101,116, 41, 32, 42, 32,108,101,
-110,103,116,104, 40,118, 78, 41, 59, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32,
- 42, 32, 40,102, 77, 97,103,110,105,116,117,100,101, 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,
-110, 41, 59, 10, 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,
-116,117,100,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,105,110,105,116, 95,116,101,120,
-116,117,114,101,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32,115,
-117,114,102, 95,110,111,114,109, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118,
- 77, 97,103,110,105,116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9,
- 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,
-111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32, 10, 9, 9, 9, 9, 9, 9,
- 9, 9, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,
-111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116, 32, 41, 32, 10,123, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97,
- 83, 32, 61, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 83,105,103,
-109, 97, 84, 32, 61, 32,100, 70,100,121, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 78,
- 32, 61, 32,115,117,114,102, 95,110,111,114,109, 59, 32, 47, 42, 32,110,111,114,109, 97,108,105,122,101,100, 32,105,110,116,101,
-114,112,111,108, 97,116,101,100, 32,118,101,114,116,101,120, 32,110,111,114,109, 97,108, 32, 42, 47, 10, 9, 10, 9,118, 82, 49,
- 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,109, 97, 84, 44, 32,118, 78,
- 32, 41, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32, 99,114,111,115,115, 40, 32,118,
- 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 41, 59, 10, 9,102, 68,101,116, 32, 61, 32,115,105,103,110, 40, 32,100,111,
-116, 40,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 41, 32, 41, 59, 10, 9, 10, 9,102,108,111, 97,116, 32,102, 77, 97,103,
-110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, 68,101,116, 41, 59, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61,
- 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117,100,101, 32, 47, 32,102, 80,114,101,118, 77,
- 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,
-116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,
-112, 95,105,110,105,116, 95,118,105,101,119,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95,112,111,115, 44,
- 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,102,108,111, 97,
-116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,
-105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,
-110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32,
- 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118,101, 99,
- 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116, 32, 41, 32, 10,123, 10, 9,118,101, 99, 51,
- 32,118, 83,105,103,109, 97, 83, 32, 61, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9,118,101,
- 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,100, 70,100,121, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9,
-118,101, 99, 51, 32,118, 78, 32, 61, 32,115,117,114,102, 95,110,111,114,109, 59, 32, 47, 42, 32,110,111,114,109, 97,108,105,122,
-101,100, 32,105,110,116,101,114,112,111,108, 97,116,101,100, 32,118,101,114,116,101,120, 32,110,111,114,109, 97,108, 32, 42, 47,
- 10, 9, 10, 9,118, 82, 49, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 59, 10,
- 9,118, 82, 50, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 59, 10, 9,102,
- 68,101,116, 32, 61, 32,100,111,116, 32, 40, 32,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 32, 41, 59, 10, 9, 10, 9,102,
-108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, 68,101,116, 41, 59, 10, 9,118, 78,
- 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117,100,101,
- 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, 9,102, 80,114,101,118, 77, 97,103,
-110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 10,125, 10, 10,118,111,105,100,
- 32,109,116,101,120, 95, 98,117,109,112, 95,116, 97,112, 51, 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,
-112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 10, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,111,
-117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, 10,123, 10, 9,118,101, 99, 50, 32, 83, 84,108,108, 32, 61, 32,116,
-101,120, 99,111, 46,120,121, 59, 10, 9,118,101, 99, 50, 32, 83, 84,108,114, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43,
- 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,117,108, 32, 61, 32,116,
-101,120, 99,111, 46,120,121, 32, 43, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, 41, 32, 59, 10, 9, 10, 9,102,108,
-111, 97,116, 32, 72,108,108, 44, 72,108,114, 44, 72,117,108, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,
-114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,108, 41, 44, 32, 72,108,108, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119,
- 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,114, 41, 44, 32, 72,108,114, 32, 41, 59, 10, 9,
-114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,117,108, 41, 44, 32, 72,
-117,108, 32, 41, 59, 10, 9, 10, 9,100, 66,115, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, 40, 72,108,114, 32, 45, 32, 72,
-108,108, 41, 59, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, 40, 72,117,108, 32, 45, 32, 72,108,108, 41,
- 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,116, 97,112, 53, 40, 32,118,101, 99, 51, 32,116,
-101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,104, 83, 99, 97,108,
-101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32,102,108,111,
- 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, 10,123, 10, 9,118,101, 99, 50,
- 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,
-101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, 41, 59, 10, 10, 9,118,101, 99, 50, 32, 83, 84,
- 99, 32, 61, 32,116,101,120, 99,111, 46,120,121, 59, 10, 9,118,101, 99, 50, 32, 83, 84,108, 32, 61, 32,116,101,120, 99,111, 46,
-120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,114, 32, 61, 32,116,
-101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,
-100, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 10, 9,118,101,
- 99, 50, 32, 83, 84,117, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32,
- 59, 10, 9, 10, 9,102,108,111, 97,116, 32, 72, 99, 44, 72,108, 44, 72,114, 44, 72,100, 44, 72,117, 59, 10, 9,114,103, 98,116,
-111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84, 99, 41, 44, 32, 72, 99, 32, 41, 59, 10,
- 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108, 41, 44, 32, 72,
-108, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,
-114, 41, 44, 32, 72,114, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109,
- 97, 44, 32, 83, 84,100, 41, 44, 32, 72,100, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101,
- 50, 68, 40,105,109, 97, 44, 32, 83, 84,117, 41, 44, 32, 72,117, 32, 41, 59, 10, 9, 10, 9,100, 66,115, 32, 61, 32,104, 83, 99,
- 97,108,101, 32, 42, 32, 40, 72,114, 32, 45, 32, 72,108, 41, 59, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42,
- 32, 40, 72,117, 32, 45, 32, 72,100, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,
-112,108,121, 40, 32,102,108,111, 97,116, 32,102, 68,101,116, 44, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,102,108,111, 97,
-116, 32,100, 66,116, 44, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,118,101, 99, 51, 32,
-118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,
-111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 41, 32, 10,
-123, 10, 9,118,101, 99, 51, 32,118, 83,117,114,102, 71,114, 97,100, 32, 61, 32,115,105,103,110, 40,102, 68,101,116, 41, 32, 42,
- 32, 40, 32,100, 66,115, 32, 42, 32,118, 82, 49, 32, 43, 32,100, 66,116, 32, 42, 32,118, 82, 50, 32, 41, 59, 10, 9, 10, 9,118,
- 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 45, 32,118, 83,117,114,102, 71,114, 97,100, 59,
- 10, 9,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32,118, 78,
- 97, 99, 99, 95,111,117,116, 32, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,
-108,121, 95,116,101,120,115,112, 97, 99,101, 40, 32,102,108,111, 97,116, 32,102, 68,101,116, 44, 32,102,108,111, 97,116, 32,100,
- 66,115, 44, 32,102,108,111, 97,116, 32,100, 66,116, 44, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,118,101, 99, 51, 32,118, 82,
- 50, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,102,108,111,
- 97,116, 32,105,109, 97, 95,120, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,121, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99,
- 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,
-117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 41, 32, 10,123,
- 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,
-118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, 41, 59, 10, 10, 9,118,
-101, 99, 51, 32,118, 83,117,114,102, 71,114, 97,100, 32, 61, 32,115,105,103,110, 40,102, 68,101,116, 41, 32, 42, 32, 40, 32, 10,
- 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,100, 66,115, 32, 47, 32,108,101,110,103,116,104, 40, 32,118,101, 99, 50, 40,
-105,109, 97, 95,120, 42, 84,101,120, 68,120, 46,120, 44, 32,105,109, 97, 95,121, 42, 84,101,120, 68,120, 46,121, 41, 32, 41, 32,
- 42, 32,118, 82, 49, 32, 43, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,100, 66,116, 32, 47, 32,108,101,110,103,
-116,104, 40, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 42, 84,101,120, 68,121, 46,120, 44, 32,105,109, 97, 95,121, 42, 84,101,
-120, 68,121, 46,121, 41, 32, 41, 32, 42, 32,118, 82, 50, 32, 41, 59, 10, 9, 9, 9, 9, 10, 9,118, 78, 97, 99, 99, 95,111,117,
-116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 45, 32,118, 83,117,114,102, 71,114, 97,100, 59, 10, 9,112,101,114,116,117,
-114, 98,101,100, 95,110,111,114,109, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32,118, 78, 97, 99, 99, 95,111,117,116,
- 32, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,110,101,103, 97,116,101, 95,116,101,120,110,111,114,109, 97,
-108, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,
-108, 41, 10,123, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,118,101, 99, 51, 40, 45,110,111,114,109, 97,108, 46,120,
- 44, 32, 45,110,111,114,109, 97,108, 46,121, 44, 32,110,111,114,109, 97,108, 46,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32,
-109,116,101,120, 95,110,115,112, 97, 99,101, 95,116, 97,110,103,101,110,116, 40,118,101, 99, 51, 32,116, 97,110,103,101,110,116,
- 44, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,118,101, 99, 51, 32,116,101,120,110,111,114,109, 97,108, 44, 32,111,
-117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9,116, 97,110,103,101,110,116, 32, 61, 32,
-110,111,114,109, 97,108,105,122,101, 40,116, 97,110,103,101,110,116, 41, 59, 10, 9,118,101, 99, 51, 32, 66, 32, 61, 32, 99,114,
-111,115,115, 40,110,111,114,109, 97,108, 44, 32,116, 97,110,103,101,110,116, 41, 59, 10, 10, 9,111,117,116,110,111,114,109, 97,
-108, 32, 61, 32,116,101,120,110,111,114,109, 97,108, 46,120, 42,116, 97,110,103,101,110,116, 32, 43, 32,116,101,120,110,111,114,
+109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99,103, 59, 10, 9,105,110, 99,111,108, 32, 61, 32, 40,102, 97, 99,109, 32, 43,
+ 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,
+101,120, 95,118, 97,108,117,101, 95,115, 99,114,101,101,110, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,
+111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97,
+ 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97,
+ 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44,
+ 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99,103, 59, 10, 9,105,110,
+ 99,111,108, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,
+116,101,120, 99,111,108, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100,
+ 32,109,116,101,120, 95,118, 97,108,117,101, 95,115,117, 98, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,
+111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97,
+ 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97,
+ 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44,
+ 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,116, 32, 61, 32, 45,102, 97, 99,116, 59, 10, 9,105,110, 99,111,108, 32, 61,
+ 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,
+116,101,120, 95,118, 97,108,117,101, 95, 97,100,100, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,
+116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103,
+ 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109,
+ 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102,
+ 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,116, 32, 61, 32,102, 97, 99,116, 59, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97,
+ 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120,
+ 95,118, 97,108,117,101, 95,100,105,118, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,
+101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,
+117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,
+109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109,
+ 41, 59, 10, 10, 9,105,102, 40,116,101,120, 99,111,108, 32, 33, 61, 32, 48, 46, 48, 41, 10, 9, 9,105,110, 99,111,108, 32, 61,
+ 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 47,116,101,120, 99,111,
+108, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,
+109,116,101,120, 95,118, 97,108,117,101, 95,100,105,102,102, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,
+111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97,
+ 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97,
+ 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44,
+ 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,
+102, 97, 99,116, 42, 97, 98,115, 40,116,101,120, 99,111,108, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,
+105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100, 97,114,107, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44,
+ 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116,
+ 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116,
+ 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97,
+ 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102,108,111, 97,116, 32, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,
+120, 99,111,108, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 41, 32,105,110, 99,111,108, 32, 61, 32,
+ 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 32, 61, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,
+100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,108,105,103,104,116, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44,
+ 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116,
+ 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116,
+ 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97,
+ 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102,108,111, 97,116, 32, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,
+120, 99,111,108, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 41, 32,105,110, 99,111,108, 32, 61, 32,
+ 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 32, 61, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,
+100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 99,108, 97,109,112, 95,112,111,115,105,116,105,118,101, 40,102,108,111, 97,
+116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 10,123, 10, 9,111,117,116,102,
+ 97, 99, 32, 61, 32,109, 97,120, 40,102, 97, 99, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120,
+ 95,118, 97,108,117,101, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,
+116, 32,111,117,116,102, 97, 99, 41, 10,123, 10, 9,111,117,116,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44,
+ 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,104, 97,114, 95,100,105,118,
+105,100,101, 40,102,108,111, 97,116, 32,104, 97,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,104, 97,114, 41,
+ 10,123, 10, 9,111,117,116,104, 97,114, 32, 61, 32,104, 97,114, 47, 49, 50, 56, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,
+109,116,101,120, 95,104, 97,114, 95,109,117,108,116,105,112,108,121, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,104, 97,
+114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,104, 97,114, 41, 10,123, 10, 9,104, 97,114, 32, 42, 61, 32, 49,
+ 50, 56, 46, 48, 59, 10, 10, 9,105,102, 40,104, 97,114, 32, 60, 32, 49, 46, 48, 41, 32,111,117,116,104, 97,114, 32, 61, 32, 49,
+ 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40,104, 97,114, 32, 62, 32, 53, 49, 49, 46, 48, 41, 32,111,117,116,104, 97,114,
+ 32, 61, 32, 53, 49, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,111,117,116,104, 97,114, 32, 61, 32,104, 97,114, 59, 10,125, 10,
+ 10,118,111,105,100, 32,109,116,101,120, 95, 97,108,112,104, 97, 95,102,114,111,109, 95, 99,111,108, 40,118,101, 99, 52, 32, 99,
+111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 41, 10,123, 10, 9, 97,108,112,104, 97, 32, 61, 32,
+ 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 97,108,112,104, 97, 95,116,111, 95, 99,111,108,
+ 40,118,101, 99, 52, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 44, 32,111,117,116, 32,118,101, 99, 52,
+ 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103,
+ 98, 44, 32, 97,108,112,104, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98,116,111,105,110,116,
+ 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,116,101,110,115,105,116,121, 41, 10,
+123, 10, 9,105,110,116,101,110,115,105,116,121, 32, 61, 32,100,111,116, 40,118,101, 99, 51, 40, 48, 46, 51, 53, 44, 32, 48, 46,
+ 52, 53, 44, 32, 48, 46, 50, 41, 44, 32,114,103, 98, 46,114,103, 98, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120,
+ 95,118, 97,108,117,101, 95,105,110,118,101,114,116, 40,102,108,111, 97,116, 32,105,110,118, 97,108,117,101, 44, 32,111,117,116,
+ 32,102,108,111, 97,116, 32,111,117,116,118, 97,108,117,101, 41, 10,123, 10, 9,111,117,116,118, 97,108,117,101, 32, 61, 32, 49,
+ 46, 48, 32, 45, 32,105,110,118, 97,108,117,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,105,
+110,118,101,114,116, 40,118,101, 99, 52, 32,105,110,114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103,
+ 98, 41, 10,123, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,
+105,110,114,103, 98, 46,114,103, 98, 44, 32,105,110,114,103, 98, 46, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,
+120, 95,118, 97,108,117,101, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, 32,115,116,101,110, 99,105,108, 44, 32,102,
+108,111, 97,116, 32,105,110,116,101,110,115,105,116,121, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115,116,101,
+110, 99,105,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105,110,116,101,110,115,105,116,121, 41, 10,123, 10,
+ 9,102,108,111, 97,116, 32,102, 97, 99,116, 32, 61, 32,105,110,116,101,110,115,105,116,121, 59, 10, 9,111,117,116,105,110,116,
+101,110,115,105,116,121, 32, 61, 32,105,110,116,101,110,115,105,116,121, 42,115,116,101,110, 99,105,108, 59, 10, 9,111,117,116,
+115,116,101,110, 99,105,108, 32, 61, 32,115,116,101,110, 99,105,108, 42,102, 97, 99,116, 59, 10,125, 10, 10,118,111,105,100, 32,
+109,116,101,120, 95,114,103, 98, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, 32,115,116,101,110, 99,105,108, 44, 32,
+118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115,116,101,110, 99,105,108, 44, 32,
+111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,116, 32, 61,
+ 32,114,103, 98, 46, 97, 59, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 46,114,103, 98, 44, 32,
+114,103, 98, 46, 97, 42,115,116,101,110, 99,105,108, 41, 59, 10, 9,111,117,116,115,116,101,110, 99,105,108, 32, 61, 32,115,116,
+101,110, 99,105,108, 42,102, 97, 99,116, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,109, 97,112,112,105,110,103,
+ 95,111,102,115, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,118,101, 99, 51, 32,111,102,115, 44, 32,111,117,116, 32,118,
+101, 99, 51, 32,111,117,116,116,101,120, 99,111, 41, 10,123, 10, 9,111,117,116,116,101,120, 99,111, 32, 61, 32,116,101,120, 99,
+111, 32, 43, 32,111,102,115, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,109, 97,112,112,105,110,103, 95,115,105,
+122,101, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,118,101, 99, 51, 32,115,105,122,101, 44, 32,111,117,116, 32,118,101,
+ 99, 51, 32,111,117,116,116,101,120, 99,111, 41, 10,123, 10, 9,111,117,116,116,101,120, 99,111, 32, 61, 32,115,105,122,101, 42,
+116,101,120, 99,111, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 50,100, 95,109, 97,112,112,105,110,103, 40,118,
+101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,
+118,101, 99, 32, 61, 32,118,101, 99, 51, 40,118,101, 99, 46,120,121, 42, 48, 46, 53, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53,
+ 44, 32, 48, 46, 53, 41, 44, 32,118,101, 99, 46,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,105,109, 97,
+103,101, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,
+116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 41, 10,123,
+ 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32,116,101,120, 99,111, 46,120,
+121, 41, 59, 10, 9,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,110,
+111,114,109, 97,108, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44,
+ 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 10,123, 10, 32, 32, 32, 32,118,101, 99, 52, 32, 99,111,108,
+111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,
+110,111,114,109, 97,108, 32, 61, 32, 50, 46, 48, 42, 40,118,101, 99, 51, 40, 99,111,108,111,114, 46,114, 44, 32, 45, 99,111,108,
+111,114, 46,103, 44, 32, 99,111,108,111,114, 46, 98, 41, 32, 45, 32,118,101, 99, 51, 40, 48, 46, 53, 44, 32, 45, 48, 46, 53, 44,
+ 32, 48, 46, 53, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,110,111,114,109, 97,108,
+115, 95,105,110,105,116, 40, 32,118,101, 99, 51, 32,118, 78, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78,111,114,103, 44,
+ 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118,
+ 77, 97,103,110,105,116,117,100,101, 32, 41, 10,123, 10, 9,118, 78,111,114,103, 32, 61, 32,118, 78, 59, 10, 9,118, 78, 97, 99,
+ 99, 32, 61, 32,118, 78, 59, 10, 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 49, 46, 48, 59, 10,125,
+ 10, 10, 47, 42, 42, 32,104,101,108,112,101,114, 32,109,101,116,104,111,100, 32,116,111, 32,101,120,116,114, 97, 99,116, 32,116,
+104,101, 32,117,112,112,101,114, 32,108,101,102,116, 32, 51,120, 51, 32,109, 97,116,114,105,120, 32,102,114,111,109, 32, 97, 32,
+ 52,120, 52, 32,109, 97,116,114,105,120, 32, 42, 47, 10,109, 97,116, 51, 32,116,111, 95,109, 97,116, 51, 40,109, 97,116, 52, 32,
+109, 52, 41, 10,123, 10, 9,109, 97,116, 51, 32,109, 51, 59, 10, 9,109, 51, 91, 48, 93, 32, 61, 32,109, 52, 91, 48, 93, 46,120,
+121,122, 59, 10, 9,109, 51, 91, 49, 93, 32, 61, 32,109, 52, 91, 49, 93, 46,120,121,122, 59, 10, 9,109, 51, 91, 50, 93, 32, 61,
+ 32,109, 52, 91, 50, 93, 46,120,121,122, 59, 10, 9,114,101,116,117,114,110, 32,109, 51, 59, 10,125, 10, 10,118,111,105,100, 32,
+109,116,101,120, 95, 98,117,109,112, 95,105,110,105,116, 95,111, 98,106,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,
+114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32,
+ 32,109, 97,116, 52, 32,109, 86,105,101,119, 44, 32,109, 97,116, 52, 32,109, 86,105,101,119, 73,110,118, 44, 32,109, 97,116, 52,
+ 32,109, 79, 98,106, 44, 32,109, 97,116, 52, 32,109, 79, 98,106, 73,110,118, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,102,
+108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97,
+ 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77,
+ 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116,
+ 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118,101,
+ 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116, 32, 41, 32, 10,123, 10, 9,109, 97,116,
+ 51, 32,111, 98,106, 50,118,105,101,119, 32, 61, 32,116,111, 95,109, 97,116, 51, 40,109, 86,105,101,119, 32, 42, 32,109, 79, 98,
+106, 41, 59, 10, 9,109, 97,116, 51, 32,118,105,101,119, 50,111, 98,106, 32, 61, 32,116,111, 95,109, 97,116, 51, 40,109, 79, 98,
+106, 73,110,118, 32, 42, 32,109, 86,105,101,119, 73,110,118, 41, 59, 10, 9, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97,
+ 83, 32, 61, 32,118,105,101,119, 50,111, 98,106, 32, 42, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59,
+ 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,118,105,101,119, 50,111, 98,106, 32, 42, 32,100, 70,100,121,
+ 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,110,111,114,109, 97,108,105,
+122,101, 40, 32,115,117,114,102, 95,110,111,114,109, 32, 42, 32,111, 98,106, 50,118,105,101,119, 32, 41, 59, 10, 10, 9,118, 82,
+ 49, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 59, 10, 9,118, 82, 50, 32, 61,
+ 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 59, 10, 9,102, 68,101,116, 32, 61, 32,
+100,111,116, 32, 40, 32,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 32, 41, 59, 10, 9, 10, 9, 47, 42, 32,112,114,101,116,
+114, 97,110,115,102,111,114,109, 32,118, 78, 97, 99, 99, 32, 40,105,110, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,
+108,121, 41, 32,117,115,105,110,103, 32,116,104,101, 32,105,110,118,101,114,115,101, 32,116,114, 97,110,115,112,111,115,101,100,
+ 32, 42, 47, 10, 9,118, 82, 49, 32, 61, 32,118, 82, 49, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 10, 9,118, 82, 50, 32,
+ 61, 32,118, 82, 50, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 10, 9,118, 78, 32, 61, 32,118, 78, 32, 42, 32,118,105,101,
+119, 50,111, 98,106, 59, 10, 9, 10, 9,102,108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115,
+ 40,102, 68,101,116, 41, 32, 42, 32,108,101,110,103,116,104, 40,118, 78, 41, 59, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32,
+ 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117,100,101, 32, 47, 32,102, 80,114,101,118,
+ 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,
+117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,
+109,112, 95,105,110,105,116, 95,116,101,120,116,117,114,101,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95,
+112,111,115, 44, 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,
+102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78,
+ 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,
+118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,
+117,116, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116,
+ 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116, 32, 41, 32, 10,123, 10, 9,
+118,101, 99, 51, 32,118, 83,105,103,109, 97, 83, 32, 61, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59,
+ 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,100, 70,100,121, 40, 32,115,117,114,102, 95,112,111,115, 32,
+ 41, 59, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,115,117,114,102, 95,110,111,114,109, 59, 32, 47, 42, 32,110,111,114,109,
+ 97,108,105,122,101,100, 32,105,110,116,101,114,112,111,108, 97,116,101,100, 32,118,101,114,116,101,120, 32,110,111,114,109, 97,
+108, 32, 42, 47, 10, 9, 10, 9,118, 82, 49, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32, 99,114,111,115,115, 40, 32,
+118, 83,105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32,110,111,114,109, 97,108,105,122,
+101, 40, 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 41, 59, 10, 9,102, 68,101,116,
+ 32, 61, 32,115,105,103,110, 40, 32,100,111,116, 40,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 41, 32, 41, 59, 10, 9, 10,
+ 9,102,108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, 68,101,116, 41, 59, 10, 9,
+118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117,
+100,101, 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, 9,102, 80,114,101,118, 77,
+ 97,103,110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 10,125, 10, 10,118,111,
+105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,105,110,105,116, 95,118,105,101,119,115,112, 97, 99,101, 40, 32,118,101, 99,
+ 51, 32,115,117,114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, 44, 32, 10, 9, 9, 9,
+ 9, 9, 9, 9, 32, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 44, 32,
+118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,102,108,111,
+ 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,
+118, 78, 97, 99, 99, 95,111,117,116, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118,
+ 82, 49, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116,
+ 32, 41, 32, 10,123, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 83, 32, 61, 32,100, 70,100,120, 40, 32,115,117,114,102,
+ 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,100, 70,100,121, 40, 32,115,117,
+114,102, 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,115,117,114,102, 95,110,111,114,109, 59, 32,
+ 47, 42, 32,110,111,114,109, 97,108,105,122,101,100, 32,105,110,116,101,114,112,111,108, 97,116,101,100, 32,118,101,114,116,101,
+120, 32,110,111,114,109, 97,108, 32, 42, 47, 10, 9, 10, 9,118, 82, 49, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,
+109, 97, 84, 44, 32,118, 78, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,
+103,109, 97, 83, 32, 41, 32, 59, 10, 9,102, 68,101,116, 32, 61, 32,100,111,116, 32, 40, 32,118, 83,105,103,109, 97, 83, 44, 32,
+118, 82, 49, 32, 41, 59, 10, 9, 10, 9,102,108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115,
+ 40,102, 68,101,116, 41, 59, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32,
+ 40,102, 77, 97,103,110,105,116,117,100,101, 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41,
+ 59, 10, 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,
+100,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,116, 97,112, 51, 40, 32,118,101, 99, 51,
+ 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,104, 83, 99,
+ 97,108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32,102,
+108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, 10,123, 10, 9,118,101,
+ 99, 50, 32, 83, 84,108,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 59, 10, 9,118,101, 99, 50, 32, 83, 84,108,114, 32, 61,
+ 32,116,101,120, 99,111, 46,120,121, 32, 43, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 32, 59, 10, 9,118,101,
+ 99, 50, 32, 83, 84,117,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,
+120,121, 41, 32, 59, 10, 9, 10, 9,102,108,111, 97,116, 32, 72,108,108, 44, 72,108,114, 44, 72,117,108, 59, 10, 9,114,103, 98,
+116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,108, 41, 44, 32, 72,108,108, 32,
+ 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,114,
+ 41, 44, 32, 72,108,114, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109,
+ 97, 44, 32, 83, 84,117,108, 41, 44, 32, 72,117,108, 32, 41, 59, 10, 9, 10, 9,100, 66,115, 32, 61, 32,104, 83, 99, 97,108,101,
+ 32, 42, 32, 40, 72,108,114, 32, 45, 32, 72,108,108, 41, 59, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32,
+ 40, 72,117,108, 32, 45, 32, 72,108,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,116,
+ 97,112, 53, 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,
+102,108,111, 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116,
+ 32, 41, 32, 10,123, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,
+121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, 41,
+ 59, 10, 10, 9,118,101, 99, 50, 32, 83, 84, 99, 32, 61, 32,116,101,120, 99,111, 46,120,121, 59, 10, 9,118,101, 99, 50, 32, 83,
+ 84,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,
+101, 99, 50, 32, 83, 84,114, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120,
+ 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,100, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32,
+ 84,101,120, 68,121, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,117, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48,
+ 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 10, 9, 10, 9,102,108,111, 97,116, 32, 72, 99, 44, 72,108, 44, 72,114, 44, 72,
+100, 44, 72,117, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83,
+ 84, 99, 41, 44, 32, 72, 99, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,
+109, 97, 44, 32, 83, 84,108, 41, 44, 32, 72,108, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,
+101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,114, 41, 44, 32, 72,114, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,
+101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,100, 41, 44, 32, 72,100, 32, 41, 59, 10, 9,114,103, 98,116,111,
+ 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,117, 41, 44, 32, 72,117, 32, 41, 59, 10, 9,
+ 10, 9,100, 66,115, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, 40, 72,114, 32, 45, 32, 72,108, 41, 59, 10, 9,100, 66,116,
+ 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, 40, 72,117, 32, 45, 32, 72,100, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,
+116,101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, 40, 32,102,108,111, 97,116, 32,102, 68,101,116, 44, 32,102,108,111, 97,
+116, 32,100, 66,115, 44, 32,102,108,111, 97,116, 32,100, 66,116, 44, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,118,101, 99, 51,
+ 32,118, 82, 50, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,
+118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112,101,114,116,117,114, 98,
+101,100, 95,110,111,114,109, 32, 41, 32, 10,123, 10, 9,118,101, 99, 51, 32,118, 83,117,114,102, 71,114, 97,100, 32, 61, 32,115,
+105,103,110, 40,102, 68,101,116, 41, 32, 42, 32, 40, 32,100, 66,115, 32, 42, 32,118, 82, 49, 32, 43, 32,100, 66,116, 32, 42, 32,
+118, 82, 50, 32, 41, 59, 10, 9, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 45,
+ 32,118, 83,117,114,102, 71,114, 97,100, 59, 10, 9,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 61, 32,110,111,
+114,109, 97,108,105,122,101, 40, 32,118, 78, 97, 99, 99, 95,111,117,116, 32, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,
+101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, 95,116,101,120,115,112, 97, 99,101, 40, 32,102,108,111, 97,116, 32,102, 68,
+101,116, 44, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,102,108,111, 97,116, 32,100, 66,116, 44, 32,118,101, 99, 51, 32,118,
+ 82, 49, 44, 32,118,101, 99, 51, 32,118, 82, 50, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,118,101, 99, 51,
+ 32,116,101,120, 99,111, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,120, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,121,
+ 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,118,
+101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112,101,114,116,117,114, 98,101,
+100, 95,110,111,114,109, 32, 41, 32, 10,123, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,
+101,120, 99,111, 46,120,121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120,
+ 99,111, 46,120,121, 41, 59, 10, 10, 9,118,101, 99, 51, 32,118, 83,117,114,102, 71,114, 97,100, 32, 61, 32,115,105,103,110, 40,
+102, 68,101,116, 41, 32, 42, 32, 40, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,100, 66,115, 32, 47, 32,108,101,
+110,103,116,104, 40, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 42, 84,101,120, 68,120, 46,120, 44, 32,105,109, 97, 95,121, 42,
+ 84,101,120, 68,120, 46,121, 41, 32, 41, 32, 42, 32,118, 82, 49, 32, 43, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32,100, 66,116, 32, 47, 32,108,101,110,103,116,104, 40, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 42, 84,101,120, 68,121, 46,
+120, 44, 32,105,109, 97, 95,121, 42, 84,101,120, 68,121, 46,121, 41, 32, 41, 32, 42, 32,118, 82, 50, 32, 41, 59, 10, 9, 9, 9,
+ 9, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 45, 32,118, 83,117,114,102, 71,
+114, 97,100, 59, 10, 9,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 61, 32,110,111,114,109, 97,108,105,122,101,
+ 40, 32,118, 78, 97, 99, 99, 95,111,117,116, 32, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,110,101,103, 97,
+116,101, 95,116,101,120,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101,
+ 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,118,101, 99,
+ 51, 40, 45,110,111,114,109, 97,108, 46,120, 44, 32, 45,110,111,114,109, 97,108, 46,121, 44, 32,110,111,114,109, 97,108, 46,122,
+ 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,110,115,112, 97, 99,101, 95,116, 97,110,103,101,110,116, 40,118,
+101, 99, 52, 32,116, 97,110,103,101,110,116, 44, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,118,101, 99, 51, 32,116,
+101,120,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10,
+ 9,118,101, 99, 51, 32, 66, 32, 61, 32,116, 97,110,103,101,110,116, 46,119, 32, 42, 32, 99,114,111,115,115, 40,110,111,114,109,
+ 97,108, 44, 32,116, 97,110,103,101,110,116, 46,120,121,122, 41, 59, 10, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,
+116,101,120,110,111,114,109, 97,108, 46,120, 42,116, 97,110,103,101,110,116, 46,120,121,122, 32, 43, 32,116,101,120,110,111,114,
109, 97,108, 46,121, 42, 66, 32, 43, 32,116,101,120,110,111,114,109, 97,108, 46,122, 42,110,111,114,109, 97,108, 59, 10, 9,111,
117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,110,111,114,109, 97,108, 41, 59,
10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,108,101,110,100, 95,110,111,114,109, 97,108, 40,102,108,111, 97,116,
diff --git a/source/blender/gpu/intern/gpu_shader_vertex.glsl b/source/blender/gpu/intern/gpu_shader_vertex.glsl
index ba9ef7dead6..a86431bdd7a 100644
--- a/source/blender/gpu/intern/gpu_shader_vertex.glsl
+++ b/source/blender/gpu/intern/gpu_shader_vertex.glsl
@@ -7,6 +7,6 @@ void main()
vec4 co = gl_ModelViewMatrix * gl_Vertex;
varposition = co.xyz;
- varnormal = gl_NormalMatrix * gl_Normal;
+ varnormal = normalize(gl_NormalMatrix * gl_Normal);
gl_Position = gl_ProjectionMatrix * co;
diff --git a/source/blender/gpu/intern/gpu_shader_vertex.glsl.c b/source/blender/gpu/intern/gpu_shader_vertex.glsl.c
index edf93d838d5..5d9bd7c60d9 100644
--- a/source/blender/gpu/intern/gpu_shader_vertex.glsl.c
+++ b/source/blender/gpu/intern/gpu_shader_vertex.glsl.c
@@ -1,13 +1,14 @@
/* DataToC output of file <gpu_shader_vertex_glsl> */
-int datatoc_gpu_shader_vertex_glsl_size= 217;
+int datatoc_gpu_shader_vertex_glsl_size= 228;
char datatoc_gpu_shader_vertex_glsl[]= {
- 10,118, 97,114,121,105,110,103, 32,118,101, 99, 51, 32,118, 97,114,112,111,115,105,116,105,111,110,
- 59, 10,118, 97,114,121,105,110,103, 32,118,101, 99, 51, 32,118, 97,114,110,111,114,109, 97,108, 59, 10, 10,118,111,105,100, 32,
-109, 97,105,110, 40, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111, 32, 61, 32,103,108, 95, 77,111,100,101,108, 86,105,101,119,
- 77, 97,116,114,105,120, 32, 42, 32,103,108, 95, 86,101,114,116,101,120, 59, 10, 10, 9,118, 97,114,112,111,115,105,116,105,111,
-110, 32, 61, 32, 99,111, 46,120,121,122, 59, 10, 9,118, 97,114,110,111,114,109, 97,108, 32, 61, 32,103,108, 95, 78,111,114,109,
- 97,108, 77, 97,116,114,105,120, 32, 42, 32,103,108, 95, 78,111,114,109, 97,108, 59, 10, 9,103,108, 95, 80,111,115,105,116,105,
+ 10,118, 97,114,
+121,105,110,103, 32,118,101, 99, 51, 32,118, 97,114,112,111,115,105,116,105,111,110, 59, 10,118, 97,114,121,105,110,103, 32,118,
+101, 99, 51, 32,118, 97,114,110,111,114,109, 97,108, 59, 10, 10,118,111,105,100, 32,109, 97,105,110, 40, 41, 10,123, 10, 9,118,
+101, 99, 52, 32, 99,111, 32, 61, 32,103,108, 95, 77,111,100,101,108, 86,105,101,119, 77, 97,116,114,105,120, 32, 42, 32,103,108,
+ 95, 86,101,114,116,101,120, 59, 10, 10, 9,118, 97,114,112,111,115,105,116,105,111,110, 32, 61, 32, 99,111, 46,120,121,122, 59,
+ 10, 9,118, 97,114,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,103,108, 95, 78,111,114,109, 97,
+108, 77, 97,116,114,105,120, 32, 42, 32,103,108, 95, 78,111,114,109, 97,108, 41, 59, 10, 9,103,108, 95, 80,111,115,105,116,105,
111,110, 32, 61, 32,103,108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, 97,116,114,105,120, 32, 42, 32, 99,111, 59, 10, 10,
0};
diff --git a/source/blender/imbuf/IMB_imbuf.h b/source/blender/imbuf/IMB_imbuf.h
index 2accad35859..625e684ea67 100644
--- a/source/blender/imbuf/IMB_imbuf.h
+++ b/source/blender/imbuf/IMB_imbuf.h
@@ -1,13 +1,39 @@
+/*
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
/**
* @file IMB_imbuf.h
* @brief IMage Buffer module.
*
* This module offers import/export of several graphical file formats.
- * \ref IMB
* @ingroup imbuf
- * @ingroup undoc
*
- * @page IMB - Imbuf module external interface
+ * @page IMB Imbuf module external interface
*
*
* @section about About the IMB module
@@ -30,42 +56,14 @@
* @section dependencies Dependencies
*
* IMB needs:
- * - SDNA module
+ * - \ref DNA module
* The listbase types are used for handling the memory
* management.
- * - blenlib module
+ * - \ref blenlib module
* blenlib handles guarded memory management in blender-style.
* BLI_winstuff.h makes a few windows specific behaviours
* posix-compliant.
*/
-/*
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
#ifndef IMB_IMBUF_H
#define IMB_IMBUF_H
diff --git a/source/blender/imbuf/IMB_imbuf_types.h b/source/blender/imbuf/IMB_imbuf_types.h
index 5629ead80db..81512adf065 100644
--- a/source/blender/imbuf/IMB_imbuf_types.h
+++ b/source/blender/imbuf/IMB_imbuf_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* IMB_imbuf_types.h (mar-2001 nzc)
*
* Types needed for using the image buffer.
@@ -54,7 +54,6 @@ struct ImMetaData;
#define IB_FILENAME_SIZE 1023
/**
- * \brief The basic imbuf type
* \ingroup imbuf
* This is the abstraction of an image. ImBuf is the basic type used for all
* imbuf operations.
diff --git a/source/blender/imbuf/intern/tiff.c b/source/blender/imbuf/intern/tiff.c
index 5c3451fd6f4..35c1c372e71 100644
--- a/source/blender/imbuf/intern/tiff.c
+++ b/source/blender/imbuf/intern/tiff.c
@@ -435,9 +435,11 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
if(success) {
ibuf->profile = (bitspersample==32)?IB_PROFILE_LINEAR_RGB:IB_PROFILE_SRGB;
-
- if(ENDIAN_ORDER == B_ENDIAN)
- IMB_convert_rgba_to_abgr(tmpibuf);
+
+// Code seems to be not needed for 16 bits tif, on PPC G5 OSX (ton)
+ if(bitspersample < 16)
+ if(ENDIAN_ORDER == B_ENDIAN)
+ IMB_convert_rgba_to_abgr(tmpibuf);
if(premul) {
IMB_premultiply_alpha(tmpibuf);
ibuf->flags |= IB_premul;
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index d79b63e9c38..97ae2a579fc 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -1,8 +1,4 @@
-/**
- * blenlib/DNA_ID.h (mar-2001 nzc)
- *
- * ID and Library types, which are fundamental for sdna,
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +29,11 @@
#ifndef DNA_ID_H
#define DNA_ID_H
+/** \file DNA_ID.h
+ * \ingroup DNA
+ * \brief ID and Library types, which are fundamental for sdna.
+ */
+
#include "DNA_listBase.h"
#ifdef __cplusplus
diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h
index 5261ad65776..cf601c1a45d 100644
--- a/source/blender/makesdna/DNA_action_types.h
+++ b/source/blender/makesdna/DNA_action_types.h
@@ -27,6 +27,10 @@
* ***** END GPL LICENSE BLOCK *****
*/
+/** \file DNA_action_types.h
+ * \ingroup DNA
+ */
+
#ifndef DNA_ACTION_TYPES_H
#define DNA_ACTION_TYPES_H
diff --git a/source/blender/makesdna/DNA_actuator_types.h b/source/blender/makesdna/DNA_actuator_types.h
index 20fdb5eee41..4f7be73e7fa 100644
--- a/source/blender/makesdna/DNA_actuator_types.h
+++ b/source/blender/makesdna/DNA_actuator_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_actuator_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +26,11 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+
+/** \file DNA_actuator_types.h
+ * \ingroup DNA
+ */
+
#ifndef DNA_ACTUATOR_TYPES_H
#define DNA_ACTUATOR_TYPES_H
@@ -227,19 +230,19 @@ typedef struct bActuator {
struct bActuator *next, *prev, *mynew;
short type;
/**
- * Tells what type of actuator data <data> holds.
+ * Tells what type of actuator data \ref data holds.
*/
short flag;
short otype, go;
char name[32];
/**
- * Data must point to an object actuator type struct.
+ * \var Data must point to an object actuator type struct.
*/
void *data;
/**
- * For ipo's and props: to find out which object the actuator
+ * \var For ipo's and props: to find out which object the actuator
* belongs to */
struct Object *ob;
diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h
index e09d7635f75..31e02ff1877 100644
--- a/source/blender/makesdna/DNA_anim_types.h
+++ b/source/blender/makesdna/DNA_anim_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef DNA_ANIM_TYPES_H
#define DNA_ANIM_TYPES_H
+/** \file DNA_anim_types.h
+ * \ingroup DNA
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/makesdna/DNA_armature_types.h b/source/blender/makesdna/DNA_armature_types.h
index 68375615614..3547101612f 100644
--- a/source/blender/makesdna/DNA_armature_types.h
+++ b/source/blender/makesdna/DNA_armature_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef DNA_ARMATURE_TYPES_H
#define DNA_ARMATURE_TYPES_H
+/** \file DNA_armature_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
#include "DNA_ID.h"
diff --git a/source/blender/makesdna/DNA_boid_types.h b/source/blender/makesdna/DNA_boid_types.h
index 83f8f4d0199..8ce6b0cc2bb 100644
--- a/source/blender/makesdna/DNA_boid_types.h
+++ b/source/blender/makesdna/DNA_boid_types.h
@@ -1,6 +1,4 @@
-/* DNA_particle_types.h
- *
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,6 +30,10 @@
#ifndef DNA_BOID_TYPES_H
#define DNA_BOID_TYPES_H
+/** \file DNA_boid_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
typedef enum BoidRuleType {
diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h
index 6ddad214af4..3693f43b69e 100644
--- a/source/blender/makesdna/DNA_brush_types.h
+++ b/source/blender/makesdna/DNA_brush_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +30,11 @@
#ifndef DNA_BRUSH_TYPES_H
#define DNA_BRUSH_TYPES_H
+/** \file DNA_brush_types.h
+ * \ingroup DNA
+ */
+
+
#include "DNA_ID.h"
#include "DNA_texture_types.h" /* for MTex */
diff --git a/source/blender/makesdna/DNA_camera_types.h b/source/blender/makesdna/DNA_camera_types.h
index 11c8533783e..4ebd7318ea8 100644
--- a/source/blender/makesdna/DNA_camera_types.h
+++ b/source/blender/makesdna/DNA_camera_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_camera_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_CAMERA_TYPES_H
#define DNA_CAMERA_TYPES_H
+/** \file DNA_camera_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_ID.h"
#ifdef __cplusplus
diff --git a/source/blender/makesdna/DNA_cloth_types.h b/source/blender/makesdna/DNA_cloth_types.h
index 9b9f0ede526..1f78366287f 100644
--- a/source/blender/makesdna/DNA_cloth_types.h
+++ b/source/blender/makesdna/DNA_cloth_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,6 +29,10 @@
#ifndef DNA_CLOTH_TYPES_H
#define DNA_CLOTH_TYPES_H
+/** \file DNA_cloth_types.h
+ * \ingroup DNA
+ */
+
/**
* This struct contains all the global data required to run a simulation.
* At the time of this writing, this structure contains data appropriate
diff --git a/source/blender/makesdna/DNA_color_types.h b/source/blender/makesdna/DNA_color_types.h
index 83cd7979ce7..3b5a1865832 100644
--- a/source/blender/makesdna/DNA_color_types.h
+++ b/source/blender/makesdna/DNA_color_types.h
@@ -1,5 +1,4 @@
-/**
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +29,10 @@
#ifndef DNA_COLOR_TYPES_H
#define DNA_COLOR_TYPES_H
+/** \file DNA_color_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_vec_types.h"
/* general defines for kernel functions */
diff --git a/source/blender/makesdna/DNA_constraint_types.h b/source/blender/makesdna/DNA_constraint_types.h
index 275ffd93ae5..1d752fce4ef 100644
--- a/source/blender/makesdna/DNA_constraint_types.h
+++ b/source/blender/makesdna/DNA_constraint_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +31,10 @@
#ifndef DNA_CONSTRAINT_TYPES_H
#define DNA_CONSTRAINT_TYPES_H
+/** \file DNA_constraint_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_ID.h"
#include "DNA_listBase.h"
diff --git a/source/blender/makesdna/DNA_controller_types.h b/source/blender/makesdna/DNA_controller_types.h
index fcd5587b14b..e48386e5c4e 100644
--- a/source/blender/makesdna/DNA_controller_types.h
+++ b/source/blender/makesdna/DNA_controller_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_controller_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_CONTROLLER_TYPES_H
#define DNA_CONTROLLER_TYPES_H
+/** \file DNA_controller_types.h
+ * \ingroup DNA
+ */
+
struct bActuator;
struct Text;
struct bSensor;
diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h
index d66246a4136..b51612037fc 100644
--- a/source/blender/makesdna/DNA_curve_types.h
+++ b/source/blender/makesdna/DNA_curve_types.h
@@ -1,8 +1,4 @@
-/**
- * blenlib/DNA_curve_types.h (mar-2001 nzc)
- *
- * Curve stuff.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +29,10 @@
#ifndef DNA_CURVE_TYPES_H
#define DNA_CURVE_TYPES_H
+/** \file DNA_curve_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
#include "DNA_vec_types.h"
#include "DNA_ID.h"
diff --git a/source/blender/makesdna/DNA_customdata_types.h b/source/blender/makesdna/DNA_customdata_types.h
index 6c0b4db221d..cdfcf465c6c 100644
--- a/source/blender/makesdna/DNA_customdata_types.h
+++ b/source/blender/makesdna/DNA_customdata_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -27,6 +27,10 @@
* ***** END GPL LICENSE BLOCK *****
*/
+/** \file DNA_customdata_types.h
+ * \ingroup DNA
+ */
+
#ifndef DNA_CUSTOMDATA_TYPES_H
#define DNA_CUSTOMDATA_TYPES_H
@@ -34,7 +38,7 @@
extern "C" {
#endif
-/* descriptor and storage for a custom data layer */
+/** descriptor and storage for a custom data layer */
typedef struct CustomDataLayer {
int type; /* type of data in layer */
int offset; /* in editmode, offset of layer in block */
@@ -52,7 +56,7 @@ typedef struct CustomDataExternal {
char filename[240]; /* FILE_MAX */
} CustomDataExternal;
-/* structure which stores custom element data associated with mesh elements
+/** structure which stores custom element data associated with mesh elements
* (vertices, edges or faces). The custom data is organised into a series of
* layers, each with a data type (e.g. MTFace, MDeformVert, etc.). */
typedef struct CustomData {
diff --git a/source/blender/makesdna/DNA_documentation.h b/source/blender/makesdna/DNA_documentation.h
index a911b92c313..2e5eb3778c4 100644
--- a/source/blender/makesdna/DNA_documentation.h
+++ b/source/blender/makesdna/DNA_documentation.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,29 +25,32 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
+ */
+
+/**
+ * \page makesdna makesdna
+ * \ingroup DNA
*
- * @mainpage DNA- Makesdna modules
- *
- * @section about About the DNA module
+ * \section aboutdna About the DNA module
*
* The DNA module holds all type definitions that are serialized in a
* blender file. There is an executable that scans all files, looking
- * for struct-s to serialize (hence sdna: Struct DNA). From this
+ * for struct-s to serialize (hence sdna: Struct \ref DNA). From this
* information, it builds a file with numbers that encode the format,
* the names of variables, and the plce to look for them.
*
- * @section issues Known issues with DNA
+ * \section dnaissues Known issues with DNA
*
* - Function pointers:
*
* Because of historical reasons, some function pointers were
* untyped. The parser/dna generator has been modified to explicitly
* handle these special cases. Most pointers have been given proper
- * proto's by now. DNA_space_types.h::Spacefile::returnfuncmay still
+ * proto's by now. DNA_space_types.h::Spacefile::returnfunc may still
* be badly defined. The reason for this is that it is called with
* different types of arguments. It takes a char* at this moment...
*
- * - Path to the header files
+ * - %Path to the header files
*
* Also because of historical reasons, there is a path prefix to the
* headers that need to be scanned. This is the BASE_HEADER
@@ -55,15 +58,14 @@
* have to change this (Not very flexible, but it is hardly ever
* changed. Sorry.).
*
- * @section dependencies Dependencies
+ * \section dnadependencies Dependencies
*
* DNA has no external dependencies (except for a few system
* includes).
- *
- **/
+ * \section dnanote NOTE
-/* PLEASE READ INSTRUCTIONS ABOUT ADDING VARIABLES IN 'DNA' STRUCTS IN
+ PLEASE READ INSTRUCTIONS ABOUT ADDING VARIABLES IN 'DNA' STRUCTS IN
intern/dna_genfile.c
(ton)
diff --git a/source/blender/makesdna/DNA_effect_types.h b/source/blender/makesdna/DNA_effect_types.h
index ee0b791a274..f87698a3d64 100644
--- a/source/blender/makesdna/DNA_effect_types.h
+++ b/source/blender/makesdna/DNA_effect_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_effect_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_EFFECT_TYPES_H
#define DNA_EFFECT_TYPES_H
+/** \file DNA_effect_types.h
+ * \ingroup DNA
+ */
+
/* don't forget, new effects also in writefile.c for dna!!! */
#define PAF_MAXMULT 4
diff --git a/source/blender/makesdna/DNA_fileglobal_types.h b/source/blender/makesdna/DNA_fileglobal_types.h
index 0c3a9429de6..9aa3e1eb3c1 100644
--- a/source/blender/makesdna/DNA_fileglobal_types.h
+++ b/source/blender/makesdna/DNA_fileglobal_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_fileglobal_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_FILEGLOBAL_TYPES_H
#define DNA_FILEGLOBAL_TYPES_H
+/** \file DNA_fileglobal_types.h
+ * \ingroup DNA
+ */
+
struct bScreen;
struct Scene;
diff --git a/source/blender/makesdna/DNA_genfile.h b/source/blender/makesdna/DNA_genfile.h
index 8e00a89af09..e8ed6580206 100644
--- a/source/blender/makesdna/DNA_genfile.h
+++ b/source/blender/makesdna/DNA_genfile.h
@@ -25,12 +25,16 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
- * blenloader genfile private function prototypes
*/
#ifndef GENFILE_H
#define GENFILE_H
+/** \file DNA_genfile.h
+ * \ingroup DNA
+ * \brief blenloader genfile private function prototypes
+ */
+
struct SDNA;
extern unsigned char DNAstr[]; /* DNA.c */
diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h
index 25378173929..ffccc08048e 100644
--- a/source/blender/makesdna/DNA_gpencil_types.h
+++ b/source/blender/makesdna/DNA_gpencil_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -27,6 +27,10 @@
#ifndef DNA_GPENCIL_TYPES_H
#define DNA_GPENCIL_TYPES_H
+/** \file DNA_gpencil_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
#include "DNA_ID.h"
diff --git a/source/blender/makesdna/DNA_group_types.h b/source/blender/makesdna/DNA_group_types.h
index 7416f6ea397..106b85a5372 100644
--- a/source/blender/makesdna/DNA_group_types.h
+++ b/source/blender/makesdna/DNA_group_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* blenlib/DNA_group_types.h (mar-2001 nzc)
*
* $Id$
@@ -31,6 +31,10 @@
#ifndef DNA_GROUP_TYPES_H
#define DNA_GROUP_TYPES_H
+/** \file DNA_group_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
#include "DNA_ID.h"
diff --git a/source/blender/makesdna/DNA_image_types.h b/source/blender/makesdna/DNA_image_types.h
index 3df3c8b41c6..99ed2319415 100644
--- a/source/blender/makesdna/DNA_image_types.h
+++ b/source/blender/makesdna/DNA_image_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_image_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_IMAGE_TYPES_H
#define DNA_IMAGE_TYPES_H
+/** \file DNA_image_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_ID.h"
struct PackedFile;
diff --git a/source/blender/makesdna/DNA_ipo_types.h b/source/blender/makesdna/DNA_ipo_types.h
index d0554a7aaa5..5dba9154a3a 100644
--- a/source/blender/makesdna/DNA_ipo_types.h
+++ b/source/blender/makesdna/DNA_ipo_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_ipo_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,15 +27,13 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/* ==============================================
- * ATTENTION:
- *
- * The contents of this file are now officially depreceated. They were used for the 'old' animation system,
- * which has (as of 2.50) been replaced with a completely new system by Joshua Leung (aligorith). All defines,
- * etc. are only still maintained to provide backwards compatability for old files...
- *
- * =============================================
- */
+/** \file DNA_ipo_types.h
+ * \ingroup DNA
+ * \deprecated
+ * The contents of this file are now officially depreceated. They were used for the 'old' animation system,
+ * which has (as of 2.50) been replaced with a completely new system by Joshua Leung (aligorith). All defines,
+ * etc. are only still maintained to provide backwards compatability for old files.
+ */
#ifndef DNA_IPO_TYPES_H
#define DNA_IPO_TYPES_H
diff --git a/source/blender/makesdna/DNA_key_types.h b/source/blender/makesdna/DNA_key_types.h
index 3cdb5c7ebd9..2d5960aa309 100644
--- a/source/blender/makesdna/DNA_key_types.h
+++ b/source/blender/makesdna/DNA_key_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_key_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_KEY_TYPES_H
#define DNA_KEY_TYPES_H
+/** \file DNA_key_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
#include "DNA_ID.h"
diff --git a/source/blender/makesdna/DNA_lamp_types.h b/source/blender/makesdna/DNA_lamp_types.h
index 1028d733c65..9377b5d8a09 100644
--- a/source/blender/makesdna/DNA_lamp_types.h
+++ b/source/blender/makesdna/DNA_lamp_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_lamp_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_LAMP_TYPES_H
#define DNA_LAMP_TYPES_H
+/** \file DNA_lamp_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_ID.h"
#ifndef MAX_MTEX
diff --git a/source/blender/makesdna/DNA_lattice_types.h b/source/blender/makesdna/DNA_lattice_types.h
index bf2ada51155..662ef9e8a45 100644
--- a/source/blender/makesdna/DNA_lattice_types.h
+++ b/source/blender/makesdna/DNA_lattice_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,6 +29,10 @@
#ifndef DNA_LATTICE_TYPES_H
#define DNA_LATTICE_TYPES_H
+/** \file DNA_lattice_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_ID.h"
struct AnimData;
diff --git a/source/blender/makesdna/DNA_listBase.h b/source/blender/makesdna/DNA_listBase.h
index afeb79037f5..f52325c0e7b 100644
--- a/source/blender/makesdna/DNA_listBase.h
+++ b/source/blender/makesdna/DNA_listBase.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/BLI_listBase.h mar 2001 Nzc
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,14 +26,18 @@
*
* ***** END GPL LICENSE BLOCK *****
*
- * These structs are the foundation for all linked lists in the
- * library system.
*
*/
#ifndef DNA_LISTBASE_H
#define DNA_LISTBASE_H
+/** \file DNA_listBase.h
+ * \ingroup DNA
+ * \brief These structs are the foundation for all linked lists in the
+ * library system.
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h
index 0a49aed505e..9d97b6af8f3 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_material_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_MATERIAL_TYPES_H
#define DNA_MATERIAL_TYPES_H
+/** \file DNA_material_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_ID.h"
#include "DNA_listBase.h"
diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h
index 853c123e5d7..bd2a6a996b5 100644
--- a/source/blender/makesdna/DNA_mesh_types.h
+++ b/source/blender/makesdna/DNA_mesh_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,6 +29,10 @@
#ifndef DNA_MESH_TYPES_H
#define DNA_MESH_TYPES_H
+/** \file DNA_mesh_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
#include "DNA_ID.h"
#include "DNA_customdata_types.h"
diff --git a/source/blender/makesdna/DNA_meshdata_types.h b/source/blender/makesdna/DNA_meshdata_types.h
index 9761eda5de7..e3510b3a25a 100644
--- a/source/blender/makesdna/DNA_meshdata_types.h
+++ b/source/blender/makesdna/DNA_meshdata_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,6 +29,10 @@
#ifndef DNA_MESHDATA_TYPES_H
#define DNA_MESHDATA_TYPES_H
+/** \file DNA_meshdata_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_customdata_types.h"
#include "DNA_listBase.h"
diff --git a/source/blender/makesdna/DNA_meta_types.h b/source/blender/makesdna/DNA_meta_types.h
index dc0ac7fd80c..53f563341b3 100644
--- a/source/blender/makesdna/DNA_meta_types.h
+++ b/source/blender/makesdna/DNA_meta_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_meta_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_META_TYPES_H
#define DNA_META_TYPES_H
+/** \file DNA_meta_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
#include "DNA_ID.h"
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index b5bcd20a759..687a05f7afb 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1,5 +1,4 @@
-/**
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -21,11 +20,16 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "DNA_listBase.h"
-
#ifndef DNA_MODIFIER_TYPES_H
#define DNA_MODIFIER_TYPES_H
+/** \file DNA_modifier_types.h
+ * \ingroup DNA
+ */
+
+#include "DNA_listBase.h"
+
+
#define MODSTACK_DEBUG 1
/* WARNING ALERT! TYPEDEF VALUES ARE WRITTEN IN FILES! SO DO NOT CHANGE! */
diff --git a/source/blender/makesdna/DNA_nla_types.h b/source/blender/makesdna/DNA_nla_types.h
index 519d8ca8163..c64dda2afd0 100644
--- a/source/blender/makesdna/DNA_nla_types.h
+++ b/source/blender/makesdna/DNA_nla_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +30,10 @@
#ifndef DNA_NLA_TYPES_H
#define DNA_NLA_TYPES_H
+/** \file DNA_nla_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
struct bAction;
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 5fbbf4338c4..a9f688e29b9 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +30,10 @@
#ifndef DNA_NODE_TYPES_H
#define DNA_NODE_TYPES_H
+/** \file DNA_node_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_ID.h"
#include "DNA_vec_types.h"
#include "DNA_listBase.h"
diff --git a/source/blender/makesdna/DNA_object_fluidsim.h b/source/blender/makesdna/DNA_object_fluidsim.h
index 700021eaceb..e8360b99d69 100644
--- a/source/blender/makesdna/DNA_object_fluidsim.h
+++ b/source/blender/makesdna/DNA_object_fluidsim.h
@@ -1,4 +1,4 @@
-/**
+/*
*
* $Id$
*
@@ -30,6 +30,10 @@
#ifndef DNA_OBJECT_FLUIDSIM_H
#define DNA_OBJECT_FLUIDSIM_H
+/** \file DNA_object_fluidsim.h
+ * \ingroup DNA
+ */
+
#include "DNA_ID.h"
#ifdef __cplusplus
diff --git a/source/blender/makesdna/DNA_object_force.h b/source/blender/makesdna/DNA_object_force.h
index 7656ae6372b..51076dd59a1 100644
--- a/source/blender/makesdna/DNA_object_force.h
+++ b/source/blender/makesdna/DNA_object_force.h
@@ -1,4 +1,4 @@
-/**
+/*
*
* $Id$
*
@@ -30,6 +30,10 @@
#ifndef DNA_OBJECT_FORCE_H
#define DNA_OBJECT_FORCE_H
+/** \file DNA_object_force.h
+ * \ingroup DNA
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index 5ccb3e62f7d..8c0e065e27f 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -1,8 +1,4 @@
-/**
- * blenlib/DNA_object_types.h (mar-2001 nzc)
- *
- * Object is a sort of wrapper for general info.
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +29,11 @@
#ifndef DNA_OBJECT_TYPES_H
#define DNA_OBJECT_TYPES_H
+/** \file DNA_object_types.h
+ * \ingroup DNA
+ * \brief Object is a sort of wrapper for general info.
+ */
+
#include "DNA_listBase.h"
#include "DNA_ID.h"
#include "DNA_action_types.h" /* bAnimVizSettings */
diff --git a/source/blender/makesdna/DNA_outliner_types.h b/source/blender/makesdna/DNA_outliner_types.h
index d30351b6c34..c44f10efde8 100644
--- a/source/blender/makesdna/DNA_outliner_types.h
+++ b/source/blender/makesdna/DNA_outliner_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,6 +29,10 @@
#ifndef DNA_OUTLINER_TYPES_H
#define DNA_OUTLINER_TYPES_H
+/** \file DNA_outliner_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
struct ID;
diff --git a/source/blender/makesdna/DNA_packedFile_types.h b/source/blender/makesdna/DNA_packedFile_types.h
index 73f55ca186c..de7218ec704 100644
--- a/source/blender/makesdna/DNA_packedFile_types.h
+++ b/source/blender/makesdna/DNA_packedFile_types.h
@@ -1,7 +1,4 @@
-/* DNA_packedFile_types.h
- *
- * 12-oct-2000 nzc
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -33,6 +30,12 @@
#ifndef DNA_PACKEDFILE_TYPES_H
#define DNA_PACKEDFILE_TYPES_H
+/** \file DNA_packedFile_types.h
+ * \ingroup DNA
+ * \author nzc
+ * \since 12-oct-2000 nzc
+ */
+
typedef struct PackedFile {
int size;
int seek;
diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h
index d4590315c45..ae97b023e58 100644
--- a/source/blender/makesdna/DNA_particle_types.h
+++ b/source/blender/makesdna/DNA_particle_types.h
@@ -1,6 +1,4 @@
-/* DNA_particle_types.h
- *
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,6 +30,10 @@
#ifndef DNA_PARTICLE_TYPES_H
#define DNA_PARTICLE_TYPES_H
+/** \file DNA_particle_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_ID.h"
#include "DNA_boid_types.h"
diff --git a/source/blender/makesdna/DNA_property_types.h b/source/blender/makesdna/DNA_property_types.h
index e0da4e89f0f..025f79a6dbf 100644
--- a/source/blender/makesdna/DNA_property_types.h
+++ b/source/blender/makesdna/DNA_property_types.h
@@ -1,8 +1,5 @@
/**
- * blenlib/DNA_property_types.h (mar-2001 nzc)
*
- * Renderrecipe and scene decription. The fact that there is a
- * hierarchy here is a bit strange, and not desirable.
*
* $Id$
*
@@ -34,6 +31,14 @@
#ifndef DNA_PROPERTY_TYPES_H
#define DNA_PROPERTY_TYPES_H
+/** \file DNA_property_types.h
+ * \ingroup DNA
+ * \since mar-2001
+ * \author nzc
+ * \attention Renderrecipe and scene decription. The fact that there is a
+ * hierarchy here is a bit strange, and not desirable.
+ */
+
/* ********************* PROPERTY ************************ */
typedef struct bProperty {
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 3ea0cfc9c21..4c8071e6a38 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,6 +29,10 @@
#ifndef DNA_SCENE_TYPES_H
#define DNA_SCENE_TYPES_H
+/** \file DNA_scene_types.h
+ * \ingroup DNA
+ */
+
// XXX, temp feature
#define DURIAN_CAMERA_SWITCH
@@ -885,7 +889,8 @@ typedef struct Scene {
#define R_OUTPUT_SCREEN 0
#define R_OUTPUT_AREA 1
#define R_OUTPUT_WINDOW 2
-/*#define R_OUTPUT_FORKED 3*/
+#define R_OUTPUT_NONE 3
+/*#define R_OUTPUT_FORKED 4*/
/* filtertype */
#define R_FILTER_BOX 0
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 52d8b2e8dd9..381046daedc 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -27,6 +27,10 @@
#ifndef DNA_SCREEN_TYPES_H
#define DNA_SCREEN_TYPES_H
+/** \file DNA_screen_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
#include "DNA_view2d_types.h"
#include "DNA_vec_types.h"
diff --git a/source/blender/makesdna/DNA_sdna_types.h b/source/blender/makesdna/DNA_sdna_types.h
index 8e291035be7..e5f924b5fa6 100644
--- a/source/blender/makesdna/DNA_sdna_types.h
+++ b/source/blender/makesdna/DNA_sdna_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_sdna.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +28,10 @@
*/
#ifndef DNA_SDNA_H
#define DNA_SDNA_H
+/**
+ * \file DNA_sdna_types.h
+ * \ingroup DNA
+ */
#
#
diff --git a/source/blender/makesdna/DNA_sensor_types.h b/source/blender/makesdna/DNA_sensor_types.h
index d2f6eb11952..fb7a3e70c7c 100644
--- a/source/blender/makesdna/DNA_sensor_types.h
+++ b/source/blender/makesdna/DNA_sensor_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_sensor_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +28,12 @@
*/
#ifndef DNA_SENSOR_TYPES_H
#define DNA_SENSOR_TYPES_H
+/** \file DNA_sensor_types.h
+ * \ingroup DNA
+ * \since mar-2001
+ * \author nzc
+ *
+ */
struct Object;
struct Material;
diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h
index 4fcf7bd6250..22f0c23ea9b 100644
--- a/source/blender/makesdna/DNA_sequence_types.h
+++ b/source/blender/makesdna/DNA_sequence_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_sequence_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +28,11 @@
*/
#ifndef DNA_SEQUENCE_TYPES_H
#define DNA_SEQUENCE_TYPES_H
+/** \file DNA_sequence_types.h
+ * \ingroup DNA
+ * \since mar-2001
+ * \author nzc
+ */
#include "DNA_listBase.h"
#include "DNA_vec_types.h"
diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h
index 0482c19e189..168481d3b29 100644
--- a/source/blender/makesdna/DNA_smoke_types.h
+++ b/source/blender/makesdna/DNA_smoke_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -29,6 +29,10 @@
#ifndef DNA_SMOKE_TYPES_H
#define DNA_SMOKE_TYPES_H
+/** \file DNA_smoke_types.h
+ * \ingroup DNA
+ */
+
/* flags */
#define MOD_SMOKE_HIGHRES (1<<1) /* enable high resolution */
#define MOD_SMOKE_DISSOLVE (1<<2) /* let smoke dissolve */
diff --git a/source/blender/makesdna/DNA_sound_types.h b/source/blender/makesdna/DNA_sound_types.h
index c10d306565b..3e5f82a8052 100644
--- a/source/blender/makesdna/DNA_sound_types.h
+++ b/source/blender/makesdna/DNA_sound_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_sound_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +28,11 @@
*/
#ifndef DNA_SOUND_TYPES_H
#define DNA_SOUND_TYPES_H
+/** \file DNA_sound_types.h
+ * \ingroup DNA
+ * \since mar-2001
+ * \author nzc
+ */
#include "DNA_listBase.h"
#include "DNA_ID.h"
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 6cb7a186ca0..a23aed505ae 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_space_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +28,11 @@
*/
#ifndef DNA_SPACE_TYPES_H
#define DNA_SPACE_TYPES_H
+/** \file DNA_space_types.h
+ * \ingroup DNA
+ * \since mar-2001
+ * \author nzc
+ */
#include "DNA_listBase.h"
#include "DNA_color_types.h" /* for Histogram */
@@ -324,6 +327,9 @@ typedef struct SpaceText {
char findstr[256]; /* ST_MAX_FIND_STR */
char replacestr[256]; /* ST_MAX_FIND_STR */
+ short margin_column; /* column number to show right margin at */
+ char pad[6];
+
void *drawcache; /* cache for faster drawing */
} SpaceText;
@@ -814,6 +820,7 @@ enum {
// execution (see BPY_main.c)
#define ST_FIND_WRAP 0x0020
#define ST_FIND_ALL 0x0040
+#define ST_SHOW_MARGIN 0x0080
/* stext->findstr/replacestr */
diff --git a/source/blender/makesdna/DNA_text_types.h b/source/blender/makesdna/DNA_text_types.h
index 82de3fc1833..f805ced5dac 100644
--- a/source/blender/makesdna/DNA_text_types.h
+++ b/source/blender/makesdna/DNA_text_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_text_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,6 +28,11 @@
*/
#ifndef DNA_TEXT_TYPES_H
#define DNA_TEXT_TYPES_H
+/** \file DNA_text_types.h
+ * \ingroup DNA
+ * \since mar-2001
+ * \author nzc
+ */
#include "DNA_listBase.h"
#include "DNA_ID.h"
diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h
index c345eb34133..572a2282d45 100644
--- a/source/blender/makesdna/DNA_texture_types.h
+++ b/source/blender/makesdna/DNA_texture_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_texture_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef DNA_TEXTURE_TYPES_H
#define DNA_TEXTURE_TYPES_H
+/** \file DNA_texture_types.h
+ * \ingroup DNA
+ * \since mar-2001
+ * \author nzc
+ */
+
#include "DNA_ID.h"
#include "DNA_image_types.h" /* ImageUser */
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index d8ab447b93a..c512b73c773 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -1,6 +1,4 @@
-/**
- * blenkernel/DNA_userdef_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef DNA_USERDEF_TYPES_H
#define DNA_USERDEF_TYPES_H
+/** \file DNA_userdef_types.h
+ * \ingroup DNA
+ * \since mar-2001
+ * \author nzc
+ *
+ */
#include "DNA_listBase.h"
#include "DNA_texture_types.h" /* ColorBand */
diff --git a/source/blender/makesdna/DNA_vec_types.h b/source/blender/makesdna/DNA_vec_types.h
index b5e3dff7db9..2d7804c3d1d 100644
--- a/source/blender/makesdna/DNA_vec_types.h
+++ b/source/blender/makesdna/DNA_vec_types.h
@@ -1,6 +1,4 @@
-/**
- * vec_types.h dec 2000 Nzc
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -32,12 +30,20 @@
#ifndef DNA_VEC_TYPES_H
#define DNA_VEC_TYPES_H
+/** \file DNA_vec_types.h
+ * \ingroup DNA
+ * \since dec-2000
+ * \author nzc
+ */
/* types */
+
+/** vector of two shorts. */
typedef struct vec2s {
short x, y;
} vec2s;
+/** vector of two floats. */
typedef struct vec2f {
float x, y;
} vec2f;
@@ -77,11 +83,13 @@ typedef struct vec4d {
} vec4d;
*/
+/** integer rectangle. */
typedef struct rcti {
int xmin, xmax;
int ymin, ymax;
} rcti;
+/** float rectangle. */
typedef struct rctf {
float xmin, xmax;
float ymin, ymax;
diff --git a/source/blender/makesdna/DNA_vfont_types.h b/source/blender/makesdna/DNA_vfont_types.h
index e342ef1cd79..ec576055b55 100644
--- a/source/blender/makesdna/DNA_vfont_types.h
+++ b/source/blender/makesdna/DNA_vfont_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_vfont_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,12 @@
#ifndef DNA_VFONT_TYPES_H
#define DNA_VFONT_TYPES_H
+/** \file DNA_vfont_types.h
+ * \ingroup DNA
+ * \since mar-2001
+ * \author nzc
+ */
+
#include "DNA_ID.h"
struct PackedFile;
diff --git a/source/blender/makesdna/DNA_view2d_types.h b/source/blender/makesdna/DNA_view2d_types.h
index 75ad1e644d1..ac1d3409153 100644
--- a/source/blender/makesdna/DNA_view2d_types.h
+++ b/source/blender/makesdna/DNA_view2d_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_view2d_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_VIEW2D_TYPES_H
#define DNA_VIEW2D_TYPES_H
+/** \file DNA_view2d_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_vec_types.h"
/* ---------------------------------- */
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index d429f55eb6c..3ffef475e1b 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_view3d_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_VIEW3D_TYPES_H
#define DNA_VIEW3D_TYPES_H
+/** \file DNA_view3d_types.h
+ * \ingroup DNA
+ */
+
struct ViewDepths;
struct Object;
struct Image;
diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h
index f47ea06645b..958c9cffc84 100644
--- a/source/blender/makesdna/DNA_windowmanager_types.h
+++ b/source/blender/makesdna/DNA_windowmanager_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,10 @@
#ifndef DNA_WINDOWMANAGER_TYPES_H
#define DNA_WINDOWMANAGER_TYPES_H
+/** \file DNA_windowmanager_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_listBase.h"
#include "DNA_vec_types.h"
diff --git a/source/blender/makesdna/DNA_world_types.h b/source/blender/makesdna/DNA_world_types.h
index 68b3c32db97..71d907f1c12 100644
--- a/source/blender/makesdna/DNA_world_types.h
+++ b/source/blender/makesdna/DNA_world_types.h
@@ -1,6 +1,4 @@
-/**
- * blenlib/DNA_world_types.h (mar-2001 nzc)
- *
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +29,10 @@
#ifndef DNA_WORLD_TYPES_H
#define DNA_WORLD_TYPES_H
+/** \file DNA_world_types.h
+ * \ingroup DNA
+ */
+
#include "DNA_ID.h"
struct AnimData;
diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c
index 54deefb1f2d..2b5f0e870b7 100644
--- a/source/blender/makesdna/intern/makesdna.c
+++ b/source/blender/makesdna/intern/makesdna.c
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,9 +25,13 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file makesdna.c
+ * \brief Struct muncher for making SDNA.
+ * \ingroup DNA
*
- * Struct muncher for making SDNA
- *
+ * \section aboutmakesdnac About makesdna tool
* Originally by Ton, some mods by Frank, and some cleaning and
* extension by Nzc.
*
@@ -42,7 +46,7 @@
* and the offsets for reaching a particular one.
*
* There is a facility to get verbose output from sdna. Search for
- * debugSDNA. This int can be set to 0 (no output) to some int. Higher
+ * \ref debugSDNA. This int can be set to 0 (no output) to some int. Higher
* numbers give more output.
* */
@@ -147,7 +151,8 @@ short **structs, *structdata; /* at sp= structs[a] is the first address of a str
sp[0] is type number
sp[1] is amount of elements
sp[2] sp[3] is typenr, namenr (etc) */
-/*
+/**
+ * Variable to control debug output of makesdna.
* debugSDNA:
* - 0 = no output, except errors
* - 1 = detail actions
@@ -162,12 +167,15 @@ int additional_slen_offset;
/* ************************************************************************** */
/**
- * Add type <str> to struct indexed by <len>, if it was not yet found.
+ * Add type \c str to struct indexed by \c len, if it was not yet found.
+ * \param str char
+ * \param len int
*/
int add_type(const char *str, int len);
/**
- * Add variable <str> to
+ * Add variable \c str to
+ * \param str
*/
int add_name(char *str);
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 1df6ce21328..8c9b6a6f2b1 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,6 +25,10 @@
#ifndef RNA_ACCESS_H
#define RNA_ACCESS_H
+/** \file RNA_access.h
+ * \ingroup RNA
+ */
+
#include <stdarg.h>
#include "DNA_listBase.h"
@@ -43,7 +47,6 @@ struct Scene;
/* Types */
extern BlenderRNA BLENDER_RNA;
-
extern StructRNA RNA_Action;
extern StructRNA RNA_ActionConstraint;
extern StructRNA RNA_ActionGroup;
@@ -66,8 +69,9 @@ extern StructRNA RNA_ArrayModifier;
extern StructRNA RNA_BackgroundImage;
extern StructRNA RNA_BevelModifier;
extern StructRNA RNA_BezierSplinePoint;
-extern StructRNA RNA_BlenderRNA;
+extern StructRNA RNA_BlendData;
extern StructRNA RNA_BlendTexture;
+extern StructRNA RNA_BlenderRNA;
extern StructRNA RNA_BoidRule;
extern StructRNA RNA_BoidRuleAverageSpeed;
extern StructRNA RNA_BoidRuleAvoid;
@@ -175,8 +179,8 @@ extern StructRNA RNA_CopyScaleConstraint;
extern StructRNA RNA_CopyTransformsConstraint;
extern StructRNA RNA_Curve;
extern StructRNA RNA_CurveMap;
-extern StructRNA RNA_CurveMapping;
extern StructRNA RNA_CurveMapPoint;
+extern StructRNA RNA_CurveMapping;
extern StructRNA RNA_CurveModifier;
extern StructRNA RNA_CurvePoint;
extern StructRNA RNA_DampedTrackConstraint;
@@ -191,8 +195,8 @@ extern StructRNA RNA_DriverVariable;
extern StructRNA RNA_DupliObject;
extern StructRNA RNA_EdgeSplitModifier;
extern StructRNA RNA_EditBone;
-extern StructRNA RNA_EffectorWeights;
extern StructRNA RNA_EffectSequence;
+extern StructRNA RNA_EffectorWeights;
extern StructRNA RNA_EnumProperty;
extern StructRNA RNA_EnumPropertyItem;
extern StructRNA RNA_EnvironmentMap;
@@ -202,13 +206,6 @@ extern StructRNA RNA_ExplodeModifier;
extern StructRNA RNA_ExpressionController;
extern StructRNA RNA_FCurve;
extern StructRNA RNA_FCurveSample;
-extern StructRNA RNA_FieldSettings;
-extern StructRNA RNA_FileSelectParams;
-extern StructRNA RNA_FloatProperty;
-extern StructRNA RNA_FloorConstraint;
-extern StructRNA RNA_FluidFluidSettings;
-extern StructRNA RNA_FluidSettings;
-extern StructRNA RNA_FluidSimulationModifier;
extern StructRNA RNA_FModifier;
extern StructRNA RNA_FModifierCycles;
extern StructRNA RNA_FModifierEnvelope;
@@ -219,12 +216,23 @@ extern StructRNA RNA_FModifierLimits;
extern StructRNA RNA_FModifierNoise;
extern StructRNA RNA_FModifierPython;
extern StructRNA RNA_FModifierStepped;
+extern StructRNA RNA_FieldSettings;
+extern StructRNA RNA_FileSelectParams;
+extern StructRNA RNA_FloatProperty;
+extern StructRNA RNA_FloorConstraint;
+extern StructRNA RNA_FluidFluidSettings;
+extern StructRNA RNA_FluidSettings;
+extern StructRNA RNA_FluidSimulationModifier;
extern StructRNA RNA_FollowPathConstraint;
extern StructRNA RNA_FreestyleLineStyle;
extern StructRNA RNA_FreestyleLineSet;
extern StructRNA RNA_FreestyleModuleSettings;
extern StructRNA RNA_FreestyleSettings;
extern StructRNA RNA_Function;
+extern StructRNA RNA_GPencilFrame;
+extern StructRNA RNA_GPencilLayer;
+extern StructRNA RNA_GPencilStroke;
+extern StructRNA RNA_GPencilStrokePoint;
extern StructRNA RNA_GameBooleanProperty;
extern StructRNA RNA_GameFloatProperty;
extern StructRNA RNA_GameIntProperty;
@@ -234,10 +242,6 @@ extern StructRNA RNA_GameSoftBodySettings;
extern StructRNA RNA_GameStringProperty;
extern StructRNA RNA_GameTimerProperty;
extern StructRNA RNA_GlowSequence;
-extern StructRNA RNA_GPencilFrame;
-extern StructRNA RNA_GPencilLayer;
-extern StructRNA RNA_GPencilStroke;
-extern StructRNA RNA_GPencilStrokePoint;
extern StructRNA RNA_GreasePencil;
extern StructRNA RNA_Group;
extern StructRNA RNA_Header;
@@ -245,8 +249,6 @@ extern StructRNA RNA_HemiLamp;
extern StructRNA RNA_Histogram;
extern StructRNA RNA_HookModifier;
extern StructRNA RNA_ID;
-extern StructRNA RNA_IDProperty;
-extern StructRNA RNA_IDPropertyGroup;
extern StructRNA RNA_IKParam;
extern StructRNA RNA_Image;
extern StructRNA RNA_ImagePaint;
@@ -258,14 +260,14 @@ extern StructRNA RNA_IntProperty;
extern StructRNA RNA_Itasc;
extern StructRNA RNA_JoystickSensor;
extern StructRNA RNA_Key;
-extern StructRNA RNA_KeyboardSensor;
extern StructRNA RNA_KeyConfig;
+extern StructRNA RNA_KeyMap;
+extern StructRNA RNA_KeyMapItem;
+extern StructRNA RNA_KeyboardSensor;
extern StructRNA RNA_Keyframe;
extern StructRNA RNA_KeyingSet;
-extern StructRNA RNA_KeyingSetPath;
extern StructRNA RNA_KeyingSetInfo;
-extern StructRNA RNA_KeyMap;
-extern StructRNA RNA_KeyMapItem;
+extern StructRNA RNA_KeyingSetPath;
extern StructRNA RNA_KinematicConstraint;
extern StructRNA RNA_Lamp;
extern StructRNA RNA_LampSkySettings;
@@ -294,7 +296,6 @@ extern StructRNA RNA_LineStyleThicknessModifier_DistanceFromObject;
extern StructRNA RNA_LockedTrackConstraint;
extern StructRNA RNA_Macro;
extern StructRNA RNA_MagicTexture;
-extern StructRNA RNA_BlendData;
extern StructRNA RNA_MarbleTexture;
extern StructRNA RNA_MaskModifier;
extern StructRNA RNA_Material;
@@ -372,7 +373,6 @@ extern StructRNA RNA_ParticleInstanceModifier;
extern StructRNA RNA_ParticleKey;
extern StructRNA RNA_ParticleSettings;
extern StructRNA RNA_ParticleSettingsTextureSlot;
-extern StructRNA RNA_SPHFluidSettings;
extern StructRNA RNA_ParticleSystem;
extern StructRNA RNA_ParticleSystemModifier;
extern StructRNA RNA_ParticleTarget;
@@ -382,14 +382,17 @@ extern StructRNA RNA_PluginTexture;
extern StructRNA RNA_PointCache;
extern StructRNA RNA_PointDensity;
extern StructRNA RNA_PointDensityTexture;
-extern StructRNA RNA_PointerProperty;
extern StructRNA RNA_PointLamp;
+extern StructRNA RNA_PointerProperty;
extern StructRNA RNA_Pose;
extern StructRNA RNA_PoseBone;
extern StructRNA RNA_Property;
+extern StructRNA RNA_PropertyGroup;
+extern StructRNA RNA_PropertyGroupItem;
extern StructRNA RNA_PropertySensor;
extern StructRNA RNA_PythonConstraint;
extern StructRNA RNA_PythonController;
+extern StructRNA RNA_RGBANodeSocket;
extern StructRNA RNA_RadarSensor;
extern StructRNA RNA_RandomSensor;
extern StructRNA RNA_RaySensor;
@@ -399,8 +402,8 @@ extern StructRNA RNA_RenderLayer;
extern StructRNA RNA_RenderPass;
extern StructRNA RNA_RenderResult;
extern StructRNA RNA_RenderSettings;
-extern StructRNA RNA_RGBANodeSocket;
extern StructRNA RNA_RigidBodyJointConstraint;
+extern StructRNA RNA_SPHFluidSettings;
extern StructRNA RNA_Scene;
extern StructRNA RNA_SceneGameData;
extern StructRNA RNA_SceneRenderLayer;
@@ -459,7 +462,6 @@ extern StructRNA RNA_SolidifyModifier;
extern StructRNA RNA_Sound;
extern StructRNA RNA_SoundSequence;
extern StructRNA RNA_Space;
-extern StructRNA RNA_SpaceView3D;
extern StructRNA RNA_SpaceConsole;
extern StructRNA RNA_SpaceDopeSheetEditor;
extern StructRNA RNA_SpaceFileBrowser;
@@ -474,8 +476,9 @@ extern StructRNA RNA_SpaceProperties;
extern StructRNA RNA_SpaceSequenceEditor;
extern StructRNA RNA_SpaceTextEditor;
extern StructRNA RNA_SpaceTimeline;
-extern StructRNA RNA_SpaceUserPreferences;
extern StructRNA RNA_SpaceUVEditor;
+extern StructRNA RNA_SpaceUserPreferences;
+extern StructRNA RNA_SpaceView3D;
extern StructRNA RNA_SpeedControlSequence;
extern StructRNA RNA_Spline;
extern StructRNA RNA_SplineIKConstraint;
@@ -553,6 +556,8 @@ extern StructRNA RNA_TransformConstraint;
extern StructRNA RNA_TransformSequence;
extern StructRNA RNA_UILayout;
extern StructRNA RNA_UIListItem;
+extern StructRNA RNA_UVProjectModifier;
+extern StructRNA RNA_UVProjector;
extern StructRNA RNA_UnitSettings;
extern StructRNA RNA_UnknownType;
extern StructRNA RNA_UserPreferences;
@@ -561,8 +566,6 @@ extern StructRNA RNA_UserPreferencesFilePaths;
extern StructRNA RNA_UserPreferencesSystem;
extern StructRNA RNA_UserPreferencesView;
extern StructRNA RNA_UserSolidLight;
-extern StructRNA RNA_UVProjectModifier;
-extern StructRNA RNA_UVProjector;
extern StructRNA RNA_ValueNodeSocket;
extern StructRNA RNA_VectorFont;
extern StructRNA RNA_VectorNodeSocket;
diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h
index f4693ae941e..f131f7c9ebe 100644
--- a/source/blender/makesrna/RNA_define.h
+++ b/source/blender/makesrna/RNA_define.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,7 +25,9 @@
#ifndef RNA_DEFINE_H
#define RNA_DEFINE_H
-/* Functions used during preprocess and runtime, for defining the RNA. */
+/** \file RNA_define.h
+ * \ingroup RNA
+ * Functions used during preprocess and runtime, for defining the RNA. */
#include <float.h>
#include <limits.h>
diff --git a/source/blender/makesrna/RNA_documentation.h b/source/blender/makesrna/RNA_documentation.h
new file mode 100644
index 00000000000..de8e2336bf2
--- /dev/null
+++ b/source/blender/makesrna/RNA_documentation.h
@@ -0,0 +1,5 @@
+/** \page makesrna makesrna
+ * \ingroup RNA
+ * \section aboutmakesrna About RNA
+ * The \ref RNA module defines and provides the access API to the data, thus encapsulating \ref DNA
+ */
diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h
index bc20ef710eb..d252d008d2f 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,6 +25,10 @@
#ifndef RNA_ENUM_TYPES_H
#define RNA_ENUM_TYPES_H
+/** \file RNA_enum_types.h
+ * \ingroup RNA
+ */
+
#include "RNA_types.h"
/* Types */
diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h
index 45f6e321d69..6f7e524d7ca 100644
--- a/source/blender/makesrna/RNA_types.h
+++ b/source/blender/makesrna/RNA_types.h
@@ -350,32 +350,32 @@ typedef struct ExtensionRNA {
/* fake struct definitions, needed otherwise collections end up owning the C
* structs like 'Object' when defined first */
-#define MainActions Main
-#define MainArmatures Main
-#define MainBrushes Main
-#define MainCameras Main
-#define MainCurves Main
-#define MainFonts Main
-#define MainGreasePencils Main
-#define MainGroups Main
-#define MainImages Main
-#define MainLamps Main
-#define MainLattices Main
-#define MainLibraries Main
-#define MainLineStyles Main
-#define MainMaterials Main
-#define MainMeshes Main
-#define MainMetaBalls Main
-#define MainNodeTrees Main
-#define MainObjects Main
-#define MainParticles Main
-#define MainScenes Main
-#define MainScreens Main
-#define MainSounds Main
-#define MainTexts Main
-#define MainTextures Main
-#define MainWindowManagers Main
-#define MainWorlds Main
+#define BlendDataActions Main
+#define BlendDataArmatures Main
+#define BlendDataBrushes Main
+#define BlendDataCameras Main
+#define BlendDataCurves Main
+#define BlendDataFonts Main
+#define BlendDataGreasePencils Main
+#define BlendDataGroups Main
+#define BlendDataImages Main
+#define BlendDataLamps Main
+#define BlendDataLattices Main
+#define BlendDataLibraries Main
+#define BlendDataLineStyles Main
+#define BlendDataMaterials Main
+#define BlendDataMeshes Main
+#define BlendDataMetaBalls Main
+#define BlendDataNodeTrees Main
+#define BlendDataObjects Main
+#define BlendDataParticles Main
+#define BlendDataScenes Main
+#define BlendDataScreens Main
+#define BlendDataSounds Main
+#define BlendDataTexts Main
+#define BlendDataTextures Main
+#define BlendDataWindowManagers Main
+#define BlendDataWorlds Main
#ifdef __cplusplus
}
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c
index 36ae67d4091..fad49ef8602 100644
--- a/source/blender/makesrna/intern/makesrna.c
+++ b/source/blender/makesrna/intern/makesrna.c
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -2357,7 +2357,7 @@ typedef struct RNAProcessItem {
void (*define)(BlenderRNA *brna);
} RNAProcessItem;
-RNAProcessItem PROCESS_ITEMS[]= {
+static RNAProcessItem PROCESS_ITEMS[]= {
{"rna_rna.c", NULL, RNA_def_rna},
{"rna_ID.c", NULL, RNA_def_ID},
{"rna_texture.c", NULL, RNA_def_texture},
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index f914d14d451..c8797a172fa 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -203,22 +203,22 @@ void rna_ID_fake_user_set(PointerRNA *ptr, int value)
}
}
-IDProperty *rna_IDPropertyGroup_idprops(PointerRNA *ptr, int create)
+IDProperty *rna_PropertyGroup_idprops(PointerRNA *ptr, int create)
{
return ptr->data;
}
-void rna_IDPropertyGroup_unregister(const bContext *C, StructRNA *type)
+void rna_PropertyGroup_unregister(const bContext *C, StructRNA *type)
{
RNA_struct_free(&BLENDER_RNA, type);
}
-StructRNA *rna_IDPropertyGroup_register(bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+StructRNA *rna_PropertyGroup_register(bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
{
PointerRNA dummyptr;
/* create dummy pointer */
- RNA_pointer_create(NULL, &RNA_IDPropertyGroup, NULL, &dummyptr);
+ RNA_pointer_create(NULL, &RNA_PropertyGroup, NULL, &dummyptr);
/* validate the python class */
if(validate(&dummyptr, data, NULL) != 0)
@@ -233,10 +233,10 @@ StructRNA *rna_IDPropertyGroup_register(bContext *C, ReportList *reports, void *
return NULL;
}
- return RNA_def_struct(&BLENDER_RNA, identifier, "IDPropertyGroup"); // XXX
+ return RNA_def_struct(&BLENDER_RNA, identifier, "PropertyGroup"); // XXX
}
-StructRNA* rna_IDPropertyGroup_refine(PointerRNA *ptr)
+StructRNA* rna_PropertyGroup_refine(PointerRNA *ptr)
{
return ptr->type;
}
@@ -317,7 +317,8 @@ static void rna_def_ID_properties(BlenderRNA *brna)
/* this is struct is used for holding the virtual
* PropertyRNA's for ID properties */
- srna= RNA_def_struct(brna, "IDProperty", NULL);
+ srna= RNA_def_struct(brna, "PropertyGroupItem", NULL);
+ RNA_def_struct_sdna(srna, "IDProperty");
RNA_def_struct_ui_text(srna, "ID Property", "Property that stores arbitrary, user defined properties");
/* IDP_STRING */
@@ -352,14 +353,14 @@ static void rna_def_ID_properties(BlenderRNA *brna)
prop= RNA_def_property(srna, "group", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_struct_type(prop, "IDPropertyGroup");
+ RNA_def_property_struct_type(prop, "PropertyGroup");
prop= RNA_def_property(srna, "collection", PROP_COLLECTION, PROP_NONE);
RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
- RNA_def_property_struct_type(prop, "IDPropertyGroup");
+ RNA_def_property_struct_type(prop, "PropertyGroup");
prop= RNA_def_property(srna, "idp_array", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_struct_type(prop, "IDPropertyGroup");
+ RNA_def_property_struct_type(prop, "PropertyGroup");
RNA_def_property_collection_funcs(prop, "rna_IDPArray_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", "rna_IDPArray_length", 0, 0);
RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
@@ -377,11 +378,12 @@ static void rna_def_ID_properties(BlenderRNA *brna)
/* ID property groups > level 0, since level 0 group is merged
* with native RNA properties. the builtin_properties will take
* care of the properties here */
- srna= RNA_def_struct(brna, "IDPropertyGroup", NULL);
+ srna= RNA_def_struct(brna, "PropertyGroup", NULL);
+ RNA_def_struct_sdna(srna, "IDPropertyGroup");
RNA_def_struct_ui_text(srna, "ID Property Group", "Group of ID properties");
- RNA_def_struct_idprops_func(srna, "rna_IDPropertyGroup_idprops");
- RNA_def_struct_register_funcs(srna, "rna_IDPropertyGroup_register", "rna_IDPropertyGroup_unregister");
- RNA_def_struct_refine_func(srna, "rna_IDPropertyGroup_refine");
+ RNA_def_struct_idprops_func(srna, "rna_PropertyGroup_idprops");
+ RNA_def_struct_register_funcs(srna, "rna_PropertyGroup_register", "rna_PropertyGroup_unregister");
+ RNA_def_struct_refine_func(srna, "rna_PropertyGroup_refine");
/* important so python types can have their name used in list views
* however this isnt prefect because it overrides how python would set the name
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 8e24f9724d6..f7f0cb191af 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -360,20 +360,20 @@ static int rna_idproperty_verify_valid(PointerRNA *ptr, PropertyRNA *prop, IDPro
}
static PropertyRNA *typemap[IDP_NUMTYPES] =
- {(PropertyRNA*)&rna_IDProperty_string,
- (PropertyRNA*)&rna_IDProperty_int,
- (PropertyRNA*)&rna_IDProperty_float,
+ {(PropertyRNA*)&rna_PropertyGroupItem_string,
+ (PropertyRNA*)&rna_PropertyGroupItem_int,
+ (PropertyRNA*)&rna_PropertyGroupItem_float,
NULL, NULL, NULL,
- (PropertyRNA*)&rna_IDProperty_group, NULL,
- (PropertyRNA*)&rna_IDProperty_double,
- (PropertyRNA*)&rna_IDProperty_idp_array};
+ (PropertyRNA*)&rna_PropertyGroupItem_group, NULL,
+ (PropertyRNA*)&rna_PropertyGroupItem_double,
+ (PropertyRNA*)&rna_PropertyGroupItem_idp_array};
static PropertyRNA *arraytypemap[IDP_NUMTYPES] =
- {NULL, (PropertyRNA*)&rna_IDProperty_int_array,
- (PropertyRNA*)&rna_IDProperty_float_array,
+ {NULL, (PropertyRNA*)&rna_PropertyGroupItem_int_array,
+ (PropertyRNA*)&rna_PropertyGroupItem_float_array,
NULL, NULL, NULL,
- (PropertyRNA*)&rna_IDProperty_collection, NULL,
- (PropertyRNA*)&rna_IDProperty_double_array};
+ (PropertyRNA*)&rna_PropertyGroupItem_collection, NULL,
+ (PropertyRNA*)&rna_PropertyGroupItem_double_array};
IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
{
@@ -3469,7 +3469,7 @@ char *RNA_path_from_ID_to_struct(PointerRNA *ptr)
else
return NULL; // can't do anything about this case yet...
}
- else if (RNA_struct_is_a(ptr->type, &RNA_IDPropertyGroup)) {
+ else if (RNA_struct_is_a(ptr->type, &RNA_PropertyGroup)) {
/* special case, easier to deal with here then in ptr->type->path() */
return rna_path_from_ID_to_idpgroup(ptr);
}
diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c
index 7441fba2c53..4a2ea760d87 100644
--- a/source/blender/makesrna/intern/rna_action.c
+++ b/source/blender/makesrna/intern/rna_action.c
@@ -141,7 +141,7 @@ static TimeMarker *rna_Action_pose_markers_new(bAction *act, ReportList *reports
static void rna_Action_pose_markers_remove(bAction *act, ReportList *reports, TimeMarker *marker)
{
if (!BLI_remlink_safe(&act->markers, marker)) {
- BKE_reportf(reports, RPT_ERROR, "TimelineMarker '%s' not found in action '%s'", marker->name, act->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "TimelineMarker '%s' not found in Action '%s'", marker->name, act->id.name+2);
return;
}
@@ -149,6 +149,41 @@ static void rna_Action_pose_markers_remove(bAction *act, ReportList *reports, Ti
MEM_freeN(marker);
}
+static PointerRNA rna_Action_active_pose_marker_get(PointerRNA *ptr)
+{
+ bAction *act= (bAction*)ptr->data;
+ return rna_pointer_inherit_refine(ptr, &RNA_TimelineMarker, BLI_findlink(&act->markers, act->active_marker-1));
+}
+
+static void rna_Action_active_pose_marker_set(PointerRNA *ptr, PointerRNA value)
+{
+ bAction *act= (bAction*)ptr->data;
+ act->active_marker= BLI_findindex(&act->markers, value.data) + 1;
+}
+
+static int rna_Action_active_pose_marker_index_get(PointerRNA *ptr)
+{
+ bAction *act= (bAction*)ptr->data;
+ return MAX2(act->active_marker-1, 0);
+}
+
+static void rna_Action_active_pose_marker_index_set(PointerRNA *ptr, int value)
+{
+ bAction *act= (bAction*)ptr->data;
+ act->active_marker= value+1;
+}
+
+static void rna_Action_active_pose_marker_index_range(PointerRNA *ptr, int *min, int *max)
+{
+ bAction *act= (bAction*)ptr->data;
+
+ *min= 0;
+ *max= BLI_countlist(&act->markers)-1;
+ *max= MAX2(0, *max);
+}
+
+
+
static void rna_Action_frame_range_get(PointerRNA *ptr,float *values)
{
calc_action_range(ptr->id.data, values, values+1, 1);
@@ -428,6 +463,7 @@ static void rna_def_action_fcurves(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_action_pose_markers(BlenderRNA *brna, PropertyRNA *cprop)
{
StructRNA *srna;
+ PropertyRNA *prop;
FunctionRNA *func;
PropertyRNA *parm;
@@ -451,6 +487,17 @@ static void rna_def_action_pose_markers(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm= RNA_def_pointer(func, "marker", "TimelineMarker", "", "Timeline marker to remove.");
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "TimelineMarker");
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_pointer_funcs(prop, "rna_Action_active_pose_marker_get", "rna_Action_active_pose_marker_set", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Active Pose Marker", "Active pose marker for this Action");
+
+ prop= RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "active_marker");
+ RNA_def_property_int_funcs(prop, "rna_Action_active_pose_marker_index_get", "rna_Action_active_pose_marker_index_set", "rna_Action_active_pose_marker_index_range");
+ RNA_def_property_ui_text(prop, "Active Pose Marker Index", "Index of active pose marker");
}
static void rna_def_action(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c
index 0fe8483dfac..80a5a5fbe4f 100644
--- a/source/blender/makesrna/intern/rna_actuator.c
+++ b/source/blender/makesrna/intern/rna_actuator.c
@@ -549,6 +549,7 @@ static void rna_def_action_actuator(BlenderRNA *brna)
static EnumPropertyItem prop_type_items[] ={
{ACT_ACTION_PLAY, "PLAY", 0, "Play", ""},
+ {ACT_ACTION_PINGPONG, "PINGPONG", 0, "Ping Pong", ""},
{ACT_ACTION_FLIPPER, "FLIPPER", 0, "Flipper", ""},
{ACT_ACTION_LOOP_STOP, "LOOPSTOP", 0, "Loop Stop", ""},
{ACT_ACTION_LOOP_END, "LOOPEND", 0, "Loop End", ""},
@@ -1778,6 +1779,7 @@ static void rna_def_shape_action_actuator(BlenderRNA *brna)
static EnumPropertyItem prop_type_items[] ={
{ACT_ACTION_PLAY, "PLAY", 0, "Play", ""},
+ {ACT_ACTION_PINGPONG, "PINGPONG", 0, "Ping Pong", ""},
{ACT_ACTION_FLIPPER, "FLIPPER", 0, "Flipper", ""},
{ACT_ACTION_LOOP_STOP, "LOOPSTOP", 0, "Loop Stop", ""},
{ACT_ACTION_LOOP_END, "LOOPEND", 0, "Loop End", ""},
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index 60c28d8bae1..ce61a031ec7 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -764,7 +764,7 @@ static void rna_def_operator_stroke_element(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
- srna= RNA_def_struct(brna, "OperatorStrokeElement", "IDPropertyGroup");
+ srna= RNA_def_struct(brna, "OperatorStrokeElement", "PropertyGroup");
RNA_def_struct_ui_text(srna, "Operator Stroke Element", "");
prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_XYZ);
diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h
index 71d66dffcbe..a94c17d40e1 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -192,10 +192,10 @@ void rna_ID_name_set(struct PointerRNA *ptr, const char *value);
struct StructRNA *rna_ID_refine(struct PointerRNA *ptr);
struct IDProperty *rna_ID_idprops(struct PointerRNA *ptr, int create);
void rna_ID_fake_user_set(struct PointerRNA *ptr, int value);
-struct IDProperty *rna_IDPropertyGroup_idprops(struct PointerRNA *ptr, int create);
-void rna_IDPropertyGroup_unregister(const struct bContext *C, struct StructRNA *type);
-struct StructRNA *rna_IDPropertyGroup_register(struct bContext *C, struct ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);
-struct StructRNA* rna_IDPropertyGroup_refine(struct PointerRNA *ptr);
+struct IDProperty *rna_PropertyGroup_idprops(struct PointerRNA *ptr, int create);
+void rna_PropertyGroup_unregister(const struct bContext *C, struct StructRNA *type);
+struct StructRNA *rna_PropertyGroup_register(struct bContext *C, struct ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);
+struct StructRNA* rna_PropertyGroup_refine(struct PointerRNA *ptr);
void rna_object_vgroup_name_index_get(struct PointerRNA *ptr, char *value, int index);
int rna_object_vgroup_name_index_length(struct PointerRNA *ptr, int index);
@@ -281,19 +281,19 @@ void RNA_def_main_linestyles(BlenderRNA *brna, PropertyRNA *cprop);
/* ID Properties */
-extern StringPropertyRNA rna_IDProperty_string;
-extern IntPropertyRNA rna_IDProperty_int;
-extern IntPropertyRNA rna_IDProperty_int_array;
-extern FloatPropertyRNA rna_IDProperty_float;
-extern FloatPropertyRNA rna_IDProperty_float_array;
-extern PointerPropertyRNA rna_IDProperty_group;
-extern CollectionPropertyRNA rna_IDProperty_collection;
-extern CollectionPropertyRNA rna_IDProperty_idp_array;
-extern FloatPropertyRNA rna_IDProperty_double;
-extern FloatPropertyRNA rna_IDProperty_double_array;
-
-extern StructRNA RNA_IDProperty;
-extern StructRNA RNA_IDPropertyGroup;
+extern StringPropertyRNA rna_PropertyGroupItem_string;
+extern IntPropertyRNA rna_PropertyGroupItem_int;
+extern IntPropertyRNA rna_PropertyGroupItem_int_array;
+extern FloatPropertyRNA rna_PropertyGroupItem_float;
+extern FloatPropertyRNA rna_PropertyGroupItem_float_array;
+extern PointerPropertyRNA rna_PropertyGroupItem_group;
+extern CollectionPropertyRNA rna_PropertyGroupItem_collection;
+extern CollectionPropertyRNA rna_PropertyGroupItem_idp_array;
+extern FloatPropertyRNA rna_PropertyGroupItem_double;
+extern FloatPropertyRNA rna_PropertyGroupItem_double_array;
+
+extern StructRNA RNA_PropertyGroupItem;
+extern StructRNA RNA_PropertyGroup;
struct IDProperty *rna_idproperty_check(struct PropertyRNA **prop, struct PointerRNA *ptr);
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index 04e24615ab2..fb282fc0f6d 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -548,8 +548,8 @@ void RNA_def_main_cameras(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainCameras");
- srna= RNA_def_struct(brna, "MainCameras", NULL);
+ RNA_def_property_srna(cprop, "BlendDataCameras");
+ srna= RNA_def_struct(brna, "BlendDataCameras", NULL);
RNA_def_struct_ui_text(srna, "Main Cameras", "Collection of cameras");
func= RNA_def_function(srna, "new", "rna_Main_cameras_new");
@@ -577,8 +577,8 @@ void RNA_def_main_scenes(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainScenes");
- srna= RNA_def_struct(brna, "MainScenes", NULL);
+ RNA_def_property_srna(cprop, "BlendDataScenes");
+ srna= RNA_def_struct(brna, "BlendDataScenes", NULL);
RNA_def_struct_ui_text(srna, "Main Scenes", "Collection of scenes");
func= RNA_def_function(srna, "new", "rna_Main_scenes_new");
@@ -602,8 +602,8 @@ void RNA_def_main_objects(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainObjects");
- srna= RNA_def_struct(brna, "MainObjects", NULL);
+ RNA_def_property_srna(cprop, "BlendDataObjects");
+ srna= RNA_def_struct(brna, "BlendDataObjects", NULL);
RNA_def_struct_ui_text(srna, "Main Objects", "Collection of objects");
func= RNA_def_function(srna, "new", "rna_Main_objects_new");
@@ -635,8 +635,8 @@ void RNA_def_main_materials(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainMaterials");
- srna= RNA_def_struct(brna, "MainMaterials", NULL);
+ RNA_def_property_srna(cprop, "BlendDataMaterials");
+ srna= RNA_def_struct(brna, "BlendDataMaterials", NULL);
RNA_def_struct_ui_text(srna, "Main Material", "Collection of materials");
func= RNA_def_function(srna, "new", "rna_Main_materials_new");
@@ -669,8 +669,8 @@ void RNA_def_main_node_groups(BlenderRNA *brna, PropertyRNA *cprop)
{2, "TEXTURE", 0, "Texture", ""},
{0, NULL, 0, NULL, NULL}};
- RNA_def_property_srna(cprop, "MainNodeTrees");
- srna= RNA_def_struct(brna, "MainNodeTrees", NULL);
+ RNA_def_property_srna(cprop, "BlendDataNodeTrees");
+ srna= RNA_def_struct(brna, "BlendDataNodeTrees", NULL);
RNA_def_struct_ui_text(srna, "Main Node Trees", "Collection of node trees");
func= RNA_def_function(srna, "new", "rna_Main_nodetree_new");
@@ -699,8 +699,8 @@ void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainMeshes");
- srna= RNA_def_struct(brna, "MainMeshes", NULL);
+ RNA_def_property_srna(cprop, "BlendDataMeshes");
+ srna= RNA_def_struct(brna, "BlendDataMeshes", NULL);
RNA_def_struct_ui_text(srna, "Main Meshes", "Collection of meshes");
func= RNA_def_function(srna, "new", "rna_Main_meshes_new");
@@ -727,8 +727,8 @@ void RNA_def_main_lamps(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainLamps");
- srna= RNA_def_struct(brna, "MainLamps", NULL);
+ RNA_def_property_srna(cprop, "BlendDataLamps");
+ srna= RNA_def_struct(brna, "BlendDataLamps", NULL);
RNA_def_struct_ui_text(srna, "Main Lamps", "Collection of lamps");
func= RNA_def_function(srna, "new", "rna_Main_lamps_new");
@@ -758,8 +758,8 @@ void RNA_def_main_libraries(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainLibraries");
- srna= RNA_def_struct(brna, "MainLibraries", NULL);
+ RNA_def_property_srna(cprop, "BlendDataLibraries");
+ srna= RNA_def_struct(brna, "BlendDataLibraries", NULL);
RNA_def_struct_ui_text(srna, "Main Libraries", "Collection of libraries");
func= RNA_def_function(srna, "tag", "rna_Main_libraries_tag");
@@ -773,8 +773,8 @@ void RNA_def_main_screens(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainScreens");
- srna= RNA_def_struct(brna, "MainScreens", NULL);
+ RNA_def_property_srna(cprop, "BlendDataScreens");
+ srna= RNA_def_struct(brna, "BlendDataScreens", NULL);
RNA_def_struct_ui_text(srna, "Main Screens", "Collection of screens");
func= RNA_def_function(srna, "tag", "rna_Main_screens_tag");
@@ -788,8 +788,8 @@ void RNA_def_main_window_managers(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainWindowManagers");
- srna= RNA_def_struct(brna, "MainWindowManagers", NULL);
+ RNA_def_property_srna(cprop, "BlendDataWindowManagers");
+ srna= RNA_def_struct(brna, "BlendDataWindowManagers", NULL);
RNA_def_struct_ui_text(srna, "Main Window Managers", "Collection of window managers");
func= RNA_def_function(srna, "tag", "rna_Main_window_managers_tag");
@@ -802,8 +802,8 @@ void RNA_def_main_images(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainImages");
- srna= RNA_def_struct(brna, "MainImages", NULL);
+ RNA_def_property_srna(cprop, "BlendDataImages");
+ srna= RNA_def_struct(brna, "BlendDataImages", NULL);
RNA_def_struct_ui_text(srna, "Main Images", "Collection of images");
func= RNA_def_function(srna, "new", "rna_Main_images_new");
@@ -846,8 +846,8 @@ void RNA_def_main_lattices(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainLattices");
- srna= RNA_def_struct(brna, "MainLattices", NULL);
+ RNA_def_property_srna(cprop, "BlendDataLattices");
+ srna= RNA_def_struct(brna, "BlendDataLattices", NULL);
RNA_def_struct_ui_text(srna, "Main Lattices", "Collection of lattices");
func= RNA_def_function(srna, "new", "rna_Main_lattices_new");
@@ -874,8 +874,8 @@ void RNA_def_main_curves(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainCurves");
- srna= RNA_def_struct(brna, "MainCurves", NULL);
+ RNA_def_property_srna(cprop, "BlendDataCurves");
+ srna= RNA_def_struct(brna, "BlendDataCurves", NULL);
RNA_def_struct_ui_text(srna, "Main Curves", "Collection of curves");
func= RNA_def_function(srna, "new", "rna_Main_curves_new");
@@ -904,8 +904,8 @@ void RNA_def_main_metaballs(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainMetaBalls");
- srna= RNA_def_struct(brna, "MainMetaBalls", NULL);
+ RNA_def_property_srna(cprop, "BlendDataMetaBalls");
+ srna= RNA_def_struct(brna, "BlendDataMetaBalls", NULL);
RNA_def_struct_ui_text(srna, "Main MetaBall", "Collection of metaballs");
func= RNA_def_function(srna, "new", "rna_Main_metaballs_new");
@@ -932,8 +932,8 @@ void RNA_def_main_fonts(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainFonts");
- srna= RNA_def_struct(brna, "MainFonts", NULL);
+ RNA_def_property_srna(cprop, "BlendDataFonts");
+ srna= RNA_def_struct(brna, "BlendDataFonts", NULL);
RNA_def_struct_ui_text(srna, "Main Fonts", "Collection of fonts");
func= RNA_def_function(srna, "load", "rna_Main_fonts_load");
@@ -961,8 +961,8 @@ void RNA_def_main_textures(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainTextures");
- srna= RNA_def_struct(brna, "MainTextures", NULL);
+ RNA_def_property_srna(cprop, "BlendDataTextures");
+ srna= RNA_def_struct(brna, "BlendDataTextures", NULL);
RNA_def_struct_ui_text(srna, "Main Textures", "Collection of groups");
func= RNA_def_function(srna, "new", "rna_Main_textures_new");
@@ -991,8 +991,8 @@ void RNA_def_main_brushes(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainBrushes");
- srna= RNA_def_struct(brna, "MainBrushes", NULL);
+ RNA_def_property_srna(cprop, "BlendDataBrushes");
+ srna= RNA_def_struct(brna, "BlendDataBrushes", NULL);
RNA_def_struct_ui_text(srna, "Main Brushes", "Collection of brushes");
func= RNA_def_function(srna, "new", "rna_Main_brushes_new");
@@ -1020,8 +1020,8 @@ void RNA_def_main_worlds(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainWorlds");
- srna= RNA_def_struct(brna, "MainWorlds", NULL);
+ RNA_def_property_srna(cprop, "BlendDataWorlds");
+ srna= RNA_def_struct(brna, "BlendDataWorlds", NULL);
RNA_def_struct_ui_text(srna, "Main Worlds", "Collection of worlds");
func= RNA_def_function(srna, "new", "rna_Main_worlds_new");
@@ -1049,8 +1049,8 @@ void RNA_def_main_groups(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainGroups");
- srna= RNA_def_struct(brna, "MainGroups", NULL);
+ RNA_def_property_srna(cprop, "BlendDataGroups");
+ srna= RNA_def_struct(brna, "BlendDataGroups", NULL);
RNA_def_struct_ui_text(srna, "Main Groups", "Collection of groups");
func= RNA_def_function(srna, "new", "rna_Main_groups_new");
@@ -1077,8 +1077,8 @@ void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainTexts");
- srna= RNA_def_struct(brna, "MainTexts", NULL);
+ RNA_def_property_srna(cprop, "BlendDataTexts");
+ srna= RNA_def_struct(brna, "BlendDataTexts", NULL);
RNA_def_struct_ui_text(srna, "Main Texts", "Collection of texts");
func= RNA_def_function(srna, "new", "rna_Main_texts_new");
@@ -1116,8 +1116,8 @@ void RNA_def_main_sounds(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainSounds");
- srna= RNA_def_struct(brna, "MainSounds", NULL);
+ RNA_def_property_srna(cprop, "BlendDataSounds");
+ srna= RNA_def_struct(brna, "BlendDataSounds", NULL);
RNA_def_struct_ui_text(srna, "Main Sounds", "Collection of sounds");
/* TODO, 'load' */
@@ -1133,8 +1133,8 @@ void RNA_def_main_armatures(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainArmatures");
- srna= RNA_def_struct(brna, "MainArmatures", NULL);
+ RNA_def_property_srna(cprop, "BlendDataArmatures");
+ srna= RNA_def_struct(brna, "BlendDataArmatures", NULL);
RNA_def_struct_ui_text(srna, "Main Armatures", "Collection of armatures");
func= RNA_def_function(srna, "new", "rna_Main_armatures_new");
@@ -1161,8 +1161,8 @@ void RNA_def_main_actions(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainActions");
- srna= RNA_def_struct(brna, "MainActions", NULL);
+ RNA_def_property_srna(cprop, "BlendDataActions");
+ srna= RNA_def_struct(brna, "BlendDataActions", NULL);
RNA_def_struct_ui_text(srna, "Main Actions", "Collection of actions");
func= RNA_def_function(srna, "new", "rna_Main_actions_new");
@@ -1189,8 +1189,8 @@ void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainParticles");
- srna= RNA_def_struct(brna, "MainParticles", NULL);
+ RNA_def_property_srna(cprop, "BlendDataParticles");
+ srna= RNA_def_struct(brna, "BlendDataParticles", NULL);
RNA_def_struct_ui_text(srna, "Main Particle Settings", "Collection of particle settings");
func= RNA_def_function(srna, "new", "rna_Main_particles_new");
@@ -1218,8 +1218,8 @@ void RNA_def_main_gpencil(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
- RNA_def_property_srna(cprop, "MainGreasePencils");
- srna= RNA_def_struct(brna, "MainGreasePencils", NULL);
+ RNA_def_property_srna(cprop, "BlendDataGreasePencils");
+ srna= RNA_def_struct(brna, "BlendDataGreasePencils", NULL);
RNA_def_struct_ui_text(srna, "Main Grease Pencils", "Collection of grease pencils");
func= RNA_def_function(srna, "tag", "rna_Main_gpencil_tag");
diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c
index 3d9eaa0b141..0c7a300d942 100644
--- a/source/blender/makesrna/intern/rna_material.c
+++ b/source/blender/makesrna/intern/rna_material.c
@@ -1875,7 +1875,7 @@ static void rna_def_texture_slots(BlenderRNA *brna, PropertyRNA *cprop, const ch
func= RNA_def_function(srna, "clear", "rna_mtex_texture_slots_clear");
RNA_def_function_flag(func, FUNC_USE_SELF_ID|FUNC_NO_SELF|FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
- parm= RNA_def_int(func, "index", 0, 0, INT_MAX, "Index", "Slot index to clar.", 0, INT_MAX);
+ parm= RNA_def_int(func, "index", 0, 0, INT_MAX, "Index", "Slot index to clear.", 0, INT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED);
}
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 01e6d57f2c6..faadc80afb2 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -477,6 +477,19 @@ static void rna_ShrinkwrapModifier_target_set(PointerRNA *ptr, PointerRNA value)
modifier_object_set(ptr->id.data, &((ShrinkwrapModifierData*)ptr->data)->target, OB_MESH, value);
}
+static int rna_ShrinkwrapModifier_face_cull_get(PointerRNA *ptr)
+{
+ ShrinkwrapModifierData *swm= (ShrinkwrapModifierData*)ptr->data;
+ return swm->shrinkOpts & (MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE|MOD_SHRINKWRAP_CULL_TARGET_BACKFACE);
+}
+
+static void rna_ShrinkwrapModifier_face_cull_set(struct PointerRNA *ptr, int value)
+{
+ ShrinkwrapModifierData *swm= (ShrinkwrapModifierData*)ptr->data;
+
+ swm->shrinkOpts= (swm->shrinkOpts & ~(MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE|MOD_SHRINKWRAP_CULL_TARGET_BACKFACE)) | value;
+}
+
static void rna_MeshDeformModifier_object_set(PointerRNA *ptr, PointerRNA value)
{
modifier_object_set(ptr->id.data, &((MeshDeformModifierData*)ptr->data)->object, OB_MESH, value);
@@ -1875,6 +1888,12 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
{MOD_SHRINKWRAP_PROJECT, "PROJECT", 0, "Project", ""},
{MOD_SHRINKWRAP_NEAREST_VERTEX, "NEAREST_VERTEX", 0, "Nearest Vertex", ""},
{0, NULL, 0, NULL, NULL}};
+
+ static EnumPropertyItem shrink_face_cull_items[] = {
+ {0, "OFF", 0, "Off", ""},
+ {MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE, "FRONT", 0, "Front", ""},
+ {MOD_SHRINKWRAP_CULL_TARGET_BACKFACE, "BACK", 0, "Back", ""},
+ {0, NULL, 0, NULL, NULL}};
srna= RNA_def_struct(brna, "ShrinkwrapModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Shrinkwrap Modifier", "Shrink wrapping modifier to shrink wrap and object to a target");
@@ -1887,6 +1906,13 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Mode", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
+ prop= RNA_def_property(srna, "cull_face", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "shrinkOpts");
+ RNA_def_property_enum_items(prop, shrink_face_cull_items);
+ RNA_def_property_enum_funcs(prop, "rna_ShrinkwrapModifier_face_cull_get", "rna_ShrinkwrapModifier_face_cull_set", NULL);
+ RNA_def_property_ui_text(prop, "Face Cull", "Stop vertices from projecting to a the face on the target when facing towards/away");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Target", "Mesh target to shrink to");
RNA_def_property_pointer_funcs(prop, NULL, "rna_ShrinkwrapModifier_target_set", NULL, "rna_Mesh_object_poll");
@@ -1945,16 +1971,6 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Positive", "Allow vertices to move in the positive direction of axis");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "use_cull_front_faces", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE);
- RNA_def_property_ui_text(prop, "Cull Front Faces", "Stop vertices from projecting to a front face on the target");
- RNA_def_property_update(prop, 0, "rna_Modifier_update");
-
- prop= RNA_def_property(srna, "use_cull_back_faces", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_CULL_TARGET_BACKFACE);
- RNA_def_property_ui_text(prop, "Cull Back Faces", "Stop vertices from projecting to a back face on the target");
- RNA_def_property_update(prop, 0, "rna_Modifier_update");
-
prop= RNA_def_property(srna, "use_keep_above_surface", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE);
RNA_def_property_ui_text(prop, "Keep Above Surface", "");
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index ccaa6eb111a..85cc3a2eea9 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -2254,6 +2254,7 @@ static void rna_def_object(BlenderRNA *brna)
/* pose */
prop= RNA_def_property(srna, "pose_library", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "poselib");
+ RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Action");
RNA_def_property_ui_text(prop, "Pose Library", "Action used as a pose library for armatures");
diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c
index ac4b86b4036..9f1ef7396c0 100644
--- a/source/blender/makesrna/intern/rna_object_api.c
+++ b/source/blender/makesrna/intern/rna_object_api.c
@@ -331,7 +331,7 @@ static PointerRNA rna_Object_shape_key_add(Object *ob, bContext *C, ReportList *
int rna_Object_is_visible(Object *ob, Scene *sce)
{
- return !(ob->restrictflag & OB_RESTRICT_VIEW) && ob->lay & sce->lay;
+ return !(ob->restrictflag & OB_RESTRICT_VIEW) && (ob->lay & sce->lay);
}
/*
diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c
index fb8617bc626..e0809510751 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -1169,7 +1169,7 @@ static void rna_def_field(BlenderRNA *brna)
prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "f_size");
RNA_def_property_range(prop, 0.0f, 10.0f);
- RNA_def_property_ui_text(prop, "Size", "Size of the noise");
+ RNA_def_property_ui_text(prop, "Size", "Size of the turbulence");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
prop= RNA_def_property(srna, "rest_length", PROP_FLOAT, PROP_NONE);
@@ -1223,7 +1223,7 @@ static void rna_def_field(BlenderRNA *brna)
prop= RNA_def_property(srna, "noise", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "f_noise");
RNA_def_property_range(prop, 0.0f, 10.0f);
- RNA_def_property_ui_text(prop, "Noise", "Noise of the force");
+ RNA_def_property_ui_text(prop, "Noise", "Amount of noise for the force strength");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
prop= RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c
index d0a4647efc3..84d2dce7669 100644
--- a/source/blender/makesrna/intern/rna_rna.c
+++ b/source/blender/makesrna/intern/rna_rna.c
@@ -488,6 +488,12 @@ static int rna_Property_is_hidden_get(PointerRNA *ptr)
return prop->flag & PROP_HIDDEN ? 1:0;
}
+static int rna_Property_is_enum_flag_get(PointerRNA *ptr)
+{
+ PropertyRNA *prop= (PropertyRNA*)ptr->data;
+ return prop->flag & PROP_ENUM_FLAG ? 1:0;
+}
+
static int rna_Property_array_length_get(PointerRNA *ptr)
{
PropertyRNA *prop= (PropertyRNA*)ptr->data;
@@ -1044,6 +1050,11 @@ static void rna_def_property(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Property_runtime_get", NULL);
RNA_def_property_ui_text(prop, "Read Only", "Property is editable through RNA");
+
+ prop= RNA_def_property(srna, "is_enum_flag", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Property_is_enum_flag_get", NULL);
+ RNA_def_property_ui_text(prop, "Enum Flag", "True when multiple enums ");
}
static void rna_def_function(BlenderRNA *brna)
@@ -1209,6 +1220,14 @@ static void rna_def_enum_property(BlenderRNA *brna, StructRNA *srna)
RNA_def_property_enum_funcs(prop, "rna_EnumProperty_default_get", NULL, "rna_EnumProperty_default_itemf");
RNA_def_property_ui_text(prop, "Default", "Default value for this enum");
+ /* same 'default' but uses 'PROP_ENUM_FLAG' */
+ prop= RNA_def_property(srna, "default_flag", PROP_ENUM, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_flag(prop, PROP_ENUM_FLAG);
+ RNA_def_property_enum_items(prop, default_dummy_items);
+ RNA_def_property_enum_funcs(prop, "rna_EnumProperty_default_get", NULL, "rna_EnumProperty_default_itemf");
+ RNA_def_property_ui_text(prop, "Default", "Default value for this enum");
+
prop= RNA_def_property(srna, "items", PROP_COLLECTION, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "EnumPropertyItem");
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 3bd0b32aa86..1b1a5400a8e 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2277,6 +2277,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
{R_OUTPUT_SCREEN, "SCREEN", 0, "Full Screen", "Images are rendered in full Screen"},
{R_OUTPUT_AREA, "AREA", 0, "Image Editor", "Images are rendered in Image Editor"},
{R_OUTPUT_WINDOW, "WINDOW", 0, "New Window", "Images are rendered in new Window"},
+ {R_OUTPUT_NONE, "NONE", 0, "No Output", "Images are rendered without drawing"},
{0, NULL, 0, NULL, NULL}};
/* Bake */
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index e122f99776d..70c0b70e326 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -1698,6 +1698,17 @@ static void rna_def_space_text(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Font Size", "Font size to use for displaying the text");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ prop= RNA_def_property(srna, "show_margin", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", ST_SHOW_MARGIN);
+ RNA_def_property_ui_text(prop, "Show Margin", "Show right margin");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+
+ prop= RNA_def_property(srna, "margin_column", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "margin_column");
+ RNA_def_property_range(prop, 0, 1024);
+ RNA_def_property_ui_text(prop, "Margin Column", "Column number to show right margin at");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+
/* functionality options */
prop= RNA_def_property(srna, "use_overwrite", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "overwrite", 1);
diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c
index 35186b91901..fc9bbbfb76c 100644
--- a/source/blender/makesrna/intern/rna_ui.c
+++ b/source/blender/makesrna/intern/rna_ui.c
@@ -620,20 +620,20 @@ static void rna_def_panel(BlenderRNA *brna)
RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER|FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
parm= RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
/* draw */
func= RNA_def_function(srna, "draw", NULL);
RNA_def_function_ui_description(func, "Draw UI elements into the panel UI layout.");
RNA_def_function_flag(func, FUNC_REGISTER);
parm= RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
func= RNA_def_function(srna, "draw_header", NULL);
RNA_def_function_ui_description(func, "Draw UI elements into the panel's header UI layout.");
RNA_def_function_flag(func, FUNC_REGISTER);
parm= RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "UILayout");
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index 022f818d7d7..7c3d0cc9a01 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -202,14 +202,14 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_function_return(func, parm);
RNA_def_function_ui_description(func, "Item. Places a button into the layout to call an Operator.");
-/* func= RNA_def_function(srna, "operator_enum", "uiItemEnumO_string");
+/* func= RNA_def_function(srna, "operator_enum_single", "uiItemEnumO_string");
api_ui_item_op_common(func);
parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator.");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm= RNA_def_string(func, "value", "", 0, "", "Enum property value.");
RNA_def_property_flag(parm, PROP_REQUIRED); */
- func= RNA_def_function(srna, "operator_enums", "uiItemsEnumO");
+ func= RNA_def_function(srna, "operator_enum", "uiItemsEnumO");
parm= RNA_def_string(func, "operator", "", 0, "", "Identifier of the operator.");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator.");
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index b2b38bc38be..7959d139833 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -1708,6 +1708,7 @@ static void rna_def_userdef_themes(BlenderRNA *brna)
static EnumPropertyItem active_theme_area[] = {
{0, "USER_INTERFACE", ICON_UI, "User Interface", ""},
+ {18, "COLOR_SETS", ICON_COLOR, "Bone Color Sets", ""},
{1, "VIEW_3D", ICON_VIEW3D, "3D View", ""},
{2, "TIMELINE", ICON_TIME, "Timeline", ""},
{3, "GRAPH_EDITOR", ICON_IPO, "Graph Editor", ""},
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index c432123d6ba..fd328a1545b 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -241,6 +241,11 @@ EnumPropertyItem event_type_items[] = {
{PAGEDOWNKEY, "PAGE_DOWN", 0, "Page Down", ""},
{ENDKEY, "END", 0, "End", ""},
{0, "", 0, NULL, NULL},
+ {MEDIAPLAY, "MEDIA_PLAY", 0, "Media Play/Pause", ""},
+ {MEDIASTOP, "MEDIA_STOP", 0, "Media Stop", ""},
+ {MEDIAFIRST, "MEDIA_FIRST", 0, "Media First", ""},
+ {MEDIALAST, "MEDIA_LAST", 0, "Media Last", ""},
+ {0, "", 0, NULL, NULL},
{WINDEACTIVATE, "WINDOW_DEACTIVATE", 0, "Window Deactivate", ""},
{TIMER, "TIMER", 0, "Timer", ""},
{TIMER0, "TIMER0", 0, "Timer 0", ""},
@@ -1268,7 +1273,7 @@ static void rna_def_operator_utils(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
- srna= RNA_def_struct(brna, "OperatorMousePath", "IDPropertyGroup");
+ srna= RNA_def_struct(brna, "OperatorMousePath", "PropertyGroup");
RNA_def_struct_ui_text(srna, "Operator Mouse Path", "Mouse path values for operators that record such paths");
prop= RNA_def_property(srna, "loc", PROP_FLOAT, PROP_XYZ);
@@ -1286,7 +1291,7 @@ static void rna_def_operator_filelist_element(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
- srna= RNA_def_struct(brna, "OperatorFileListElement", "IDPropertyGroup");
+ srna= RNA_def_struct(brna, "OperatorFileListElement", "PropertyGroup");
RNA_def_struct_ui_text(srna, "Operator File List Element", "");
diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c
index b934bdfc979..87ef0d61410 100644
--- a/source/blender/makesrna/intern/rna_wm_api.c
+++ b/source/blender/makesrna/intern/rna_wm_api.c
@@ -158,13 +158,15 @@ void RNA_api_operator(StructRNA *srna)
RNA_def_function_ui_description(func, "Test if the operator can be called or not.");
RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
- RNA_def_pointer(func, "context", "Context", "", "");
+ parm= RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
/* exec */
func= RNA_def_function(srna, "execute", NULL);
RNA_def_function_ui_description(func, "Execute the operator.");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
- RNA_def_pointer(func, "context", "Context", "", "");
+ parm= RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
parm= RNA_def_enum_flag(func, "result", operator_return_items, OPERATOR_CANCELLED, "result", ""); // better name?
RNA_def_function_return(func, parm);
@@ -173,7 +175,8 @@ void RNA_api_operator(StructRNA *srna)
func= RNA_def_function(srna, "check", NULL);
RNA_def_function_ui_description(func, "Check the operator settings.");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
- RNA_def_pointer(func, "context", "Context", "", "");
+ parm= RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
parm= RNA_def_boolean(func, "result", 0, "result", ""); // better name?
RNA_def_function_return(func, parm);
@@ -182,8 +185,10 @@ void RNA_api_operator(StructRNA *srna)
func= RNA_def_function(srna, "invoke", NULL);
RNA_def_function_ui_description(func, "Invoke the operator.");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
- RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_pointer(func, "event", "Event", "", "");
+ parm= RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ parm= RNA_def_pointer(func, "event", "Event", "", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
parm= RNA_def_enum_flag(func, "result", operator_return_items, OPERATOR_CANCELLED, "result", ""); // better name?
RNA_def_function_return(func, parm);
@@ -191,8 +196,10 @@ void RNA_api_operator(StructRNA *srna)
func= RNA_def_function(srna, "modal", NULL); /* same as invoke */
RNA_def_function_ui_description(func, "Modal operator function.");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
- RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_pointer(func, "event", "Event", "", "");
+ parm= RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ parm= RNA_def_pointer(func, "event", "Event", "", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
parm= RNA_def_enum_flag(func, "result", operator_return_items, OPERATOR_CANCELLED, "result", ""); // better name?
RNA_def_function_return(func, parm);
@@ -201,7 +208,8 @@ void RNA_api_operator(StructRNA *srna)
func= RNA_def_function(srna, "draw", NULL);
RNA_def_function_ui_description(func, "Draw function for the operator.");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
- RNA_def_pointer(func, "context", "Context", "", "");
+ parm= RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_api_macro(StructRNA *srna)
@@ -224,13 +232,15 @@ void RNA_api_macro(StructRNA *srna)
RNA_def_function_ui_description(func, "Test if the operator can be called or not.");
RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
- RNA_def_pointer(func, "context", "Context", "", "");
+ parm= RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
/* draw */
func= RNA_def_function(srna, "draw", NULL);
RNA_def_function_ui_description(func, "Draw function for the operator.");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
- RNA_def_pointer(func, "context", "Context", "", "");
+ parm= RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_api_keyconfig(StructRNA *srna)
diff --git a/source/blender/modifiers/SConscript b/source/blender/modifiers/SConscript
index 874aefbaa22..8ea4f893bb9 100644
--- a/source/blender/modifiers/SConscript
+++ b/source/blender/modifiers/SConscript
@@ -21,4 +21,4 @@ if env['BF_NO_ELBEEM']:
env.BlenderLib ( libname = 'bf_modifiers', sources = sources,
includes = Split(incs), defines=defs,
- libtype=['core','player'], priority = [180, 40] )
+ libtype=['core','player'], priority = [80, 40] )
diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c
index c7638afbbcc..2f3bc0c53f4 100644
--- a/source/blender/modifiers/intern/MOD_particlesystem.c
+++ b/source/blender/modifiers/intern/MOD_particlesystem.c
@@ -80,25 +80,20 @@ static void copyData(ModifierData *md, ModifierData *target)
tpsmd->psys = psmd->psys;
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
ParticleSystemModifierData *psmd= (ParticleSystemModifierData*) md;
CustomDataMask dataMask = 0;
- Material *ma;
MTex *mtex;
int i;
if(!psmd->psys->part)
return 0;
- ma= give_current_material(ob, psmd->psys->part->omat);
- if(ma) {
- for(i=0; i<MAX_MTEX; i++) {
- mtex=ma->mtex[i];
- if(mtex && (ma->septex & (1<<i))==0)
- if(mtex->pmapto && (mtex->texco & TEXCO_UV))
- dataMask |= CD_MASK_MTFACE;
- }
+ for(i=0; i<MAX_MTEX; i++) {
+ mtex = psmd->psys->part->mtex[i];
+ if(mtex && mtex->mapto && (mtex->texco & TEXCO_UV))
+ dataMask |= CD_MASK_MTFACE;
}
if(psmd->psys->part->tanfac!=0.0)
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_image.c b/source/blender/nodes/intern/CMP_nodes/CMP_image.c
index d5176bf6816..5c39e6ea159 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_image.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_image.c
@@ -339,7 +339,7 @@ static CompBuf *compbuf_from_pass(RenderData *rd, RenderLayer *rl, int rectx, in
return NULL;
};
-void node_composit_rlayers_out(RenderData *rd, RenderLayer *rl, bNodeStack **out, int rectx, int recty)
+static void node_composit_rlayers_out(RenderData *rd, RenderLayer *rl, bNodeStack **out, int rectx, int recty)
{
if(out[RRES_OUT_Z]->hasoutput)
out[RRES_OUT_Z]->data= compbuf_from_pass(rd, rl, rectx, recty, SCE_PASS_Z);
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_math.c b/source/blender/nodes/intern/CMP_nodes/CMP_math.c
index 7a8dadafb86..f5ca9bb9959 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_math.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_math.c
@@ -94,11 +94,18 @@ static void do_math(bNode *node, float *out, float *in, float *in2)
break;
case 10: /* Power */
{
- /* Don't want any imaginary numbers... */
- if( in[0] >= 0 )
+ /* Only raise negative numbers by full integers */
+ if( in[0] >= 0 ) {
out[0]= pow(in[0], in2[0]);
- else
- out[0]= 0.0;
+ } else {
+ float y_mod_1 = fmod(in2[0], 1);
+ /* if input value is not nearly an integer, fall back to zero, nicer than straight rounding */
+ if (y_mod_1 > 0.999 || y_mod_1 < 0.001) {
+ out[0]= pow(in[0], floor(in2[0] + 0.5));
+ } else {
+ out[0] = 0.0;
+ }
+ }
}
break;
case 11: /* Logarithm */
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_math.c b/source/blender/nodes/intern/TEX_nodes/TEX_math.c
index 7e1c54b6e47..c5adfa97fd4 100644
--- a/source/blender/nodes/intern/TEX_nodes/TEX_math.c
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_math.c
@@ -106,11 +106,17 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
break;
case 10: /* Power */
{
- /* Don't want any imaginary numbers... */
- if( in0 >= 0 )
- *out= pow(in0, in1);
- else
- *out= 0.0;
+ /* Only raise negative numbers by full integers */
+ if( in0 >= 0 ) {
+ out[0]= pow(in0, in1);
+ } else {
+ float y_mod_1 = fmod(in1, 1);
+ if (y_mod_1 > 0.999 || y_mod_1 < 0.001) {
+ *out = pow(in0, floor(in1 + 0.5));
+ } else {
+ *out = 0.0;
+ }
+ }
}
break;
case 11: /* Logarithm */
diff --git a/source/blender/nodes/intern/TEX_util.c b/source/blender/nodes/intern/TEX_util.c
index d288b13a66c..60f4cf5aef4 100644
--- a/source/blender/nodes/intern/TEX_util.c
+++ b/source/blender/nodes/intern/TEX_util.c
@@ -57,7 +57,7 @@ void tex_call_delegate(TexDelegate *dg, float *out, TexParams *params, short thr
}
}
-void tex_input(float *out, int sz, bNodeStack *in, TexParams *params, short thread)
+static void tex_input(float *out, int sz, bNodeStack *in, TexParams *params, short thread)
{
TexDelegate *dg = in->data;
if(dg) {
diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h
index 5ee4664fd57..e559f0bf57b 100644
--- a/source/blender/python/BPY_extern.h
+++ b/source/blender/python/BPY_extern.h
@@ -60,7 +60,7 @@ void BPY_pyconstraint_update(struct Object *owner, struct bConstraint *con);
int BPY_is_pyconstraint(struct Text *text);
// void BPY_free_pyconstraint_links(struct Text *text);
//
-void BPY_python_start( int argc, char **argv );
+void BPY_python_start(int argc, const char **argv);
void BPY_python_end( void );
// void init_syspath( int first_time );
// void syspath_append( char *dir );
diff --git a/source/blender/python/generic/CMakeLists.txt b/source/blender/python/generic/CMakeLists.txt
index 58d69db4a0e..b3dec148e9d 100644
--- a/source/blender/python/generic/CMakeLists.txt
+++ b/source/blender/python/generic/CMakeLists.txt
@@ -34,13 +34,13 @@ set(SRC
blf_py_api.c
bpy_internal_import.c
mathutils.c
- mathutils_color.c
- mathutils_euler.c
+ mathutils_Color.c
+ mathutils_Euler.c
+ mathutils_Matrix.c
+ mathutils_Quaternion.c
+ mathutils_Vector.c
mathutils_geometry.c
- mathutils_matrix.c
- mathutils_quat.c
- mathutils_vector.c
- noise.c
+ noise_py_api.c
py_capi_utils.c
IDProp.h
@@ -48,13 +48,15 @@ set(SRC
blf_py_api.h
bpy_internal_import.h
mathutils.h
- mathutils_color.h
- mathutils_euler.h
+ mathutils_Color.h
+ mathutils_Euler.h
+ mathutils_Matrix.h
+ mathutils_Quaternion.h
+ mathutils_Vector.h
mathutils_geometry.h
- mathutils_matrix.h
- mathutils_quat.h
- mathutils_vector.h
+ noise_py_api.h
py_capi_utils.h
)
+
blender_add_lib(bf_python_ext "${SRC}" "${INC}")
diff --git a/source/blender/python/generic/IDProp.c b/source/blender/python/generic/IDProp.c
index ad0c96afa17..8004af95050 100644
--- a/source/blender/python/generic/IDProp.c
+++ b/source/blender/python/generic/IDProp.c
@@ -23,6 +23,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
+
#include "IDProp.h"
#include "MEM_guardedalloc.h"
diff --git a/source/blender/python/generic/IDProp.h b/source/blender/python/generic/IDProp.h
index cd5bff4788e..b0a3b894f08 100644
--- a/source/blender/python/generic/IDProp.h
+++ b/source/blender/python/generic/IDProp.h
@@ -22,7 +22,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include <Python.h>
+#ifndef IDPROP_H
+#define IDPROP_H
struct ID;
struct IDProperty;
@@ -62,3 +63,5 @@ void IDProp_Init_Types(void);
#define IDPROP_ITER_KEYS 0
#define IDPROP_ITER_ITEMS 1
+
+#endif /* IDPROP_H */
diff --git a/source/blender/python/generic/bgl.c b/source/blender/python/generic/bgl.c
index 2b15a6f4826..63d310ae4e0 100644
--- a/source/blender/python/generic/bgl.c
+++ b/source/blender/python/generic/bgl.c
@@ -31,6 +31,8 @@
* The BGL submodule "wraps" OpenGL functions and constants,
* allowing script writers to make OpenGL calls in their Python scripts. */
+#include <Python.h>
+
#include "bgl.h" /*This must come first */
#include <GL/glew.h>
#include "MEM_guardedalloc.h"
@@ -38,7 +40,6 @@
#include "BLI_utildefines.h"
-
static char Method_Buffer_doc[] =
"(type, dimensions, [template]) - Create a new Buffer object\n\n\
(type) - The format to store data in\n\
diff --git a/source/blender/python/generic/bgl.h b/source/blender/python/generic/bgl.h
index 049b3f101a0..48462bc108e 100644
--- a/source/blender/python/generic/bgl.h
+++ b/source/blender/python/generic/bgl.h
@@ -36,8 +36,6 @@
#ifndef BGL_H
#define BGL_H
-#include <Python.h>
-
PyObject *BPyInit_bgl(void);
/*@ Create a buffer object */
diff --git a/source/blender/python/generic/mathutils.c b/source/blender/python/generic/mathutils.c
index f56ac6c61bf..1f802edcdea 100644
--- a/source/blender/python/generic/mathutils.c
+++ b/source/blender/python/generic/mathutils.c
@@ -87,6 +87,8 @@
* - geometry.BarycentricTransform -> barycentric_transform
*/
+#include <Python.h>
+
#include "mathutils.h"
#include "BLI_math.h"
@@ -271,7 +273,7 @@ int _BaseMathObject_ReadCallback(BaseMathObject *self)
return 1;
if(!PyErr_Occurred())
- PyErr_Format(PyExc_SystemError, "%s user has become invalid", Py_TYPE(self)->tp_name);
+ PyErr_Format(PyExc_RuntimeError, "%s user has become invalid", Py_TYPE(self)->tp_name);
return 0;
}
@@ -282,7 +284,7 @@ int _BaseMathObject_WriteCallback(BaseMathObject *self)
return 1;
if(!PyErr_Occurred())
- PyErr_Format(PyExc_SystemError, "%s user has become invalid", Py_TYPE(self)->tp_name);
+ PyErr_Format(PyExc_RuntimeError, "%s user has become invalid", Py_TYPE(self)->tp_name);
return 0;
}
@@ -293,7 +295,7 @@ int _BaseMathObject_ReadIndexCallback(BaseMathObject *self, int index)
return 1;
if(!PyErr_Occurred())
- PyErr_Format(PyExc_SystemError, "%s user has become invalid", Py_TYPE(self)->tp_name);
+ PyErr_Format(PyExc_RuntimeError, "%s user has become invalid", Py_TYPE(self)->tp_name);
return 0;
}
@@ -304,7 +306,7 @@ int _BaseMathObject_WriteIndexCallback(BaseMathObject *self, int index)
return 1;
if(!PyErr_Occurred())
- PyErr_Format(PyExc_SystemError, "%s user has become invalid", Py_TYPE(self)->tp_name);
+ PyErr_Format(PyExc_RuntimeError, "%s user has become invalid", Py_TYPE(self)->tp_name);
return 0;
}
diff --git a/source/blender/python/generic/mathutils.h b/source/blender/python/generic/mathutils.h
index 07342f8144b..8442b66a1db 100644
--- a/source/blender/python/generic/mathutils.h
+++ b/source/blender/python/generic/mathutils.h
@@ -31,8 +31,6 @@
#ifndef MATHUTILS_H
#define MATHUTILS_H
-#include <Python.h>
-
/* Can cast different mathutils types to this, use for generic funcs */
extern char BaseMathObject_Wrapped_doc[];
@@ -50,11 +48,11 @@ typedef struct {
BASE_MATH_MEMBERS(data)
} BaseMathObject;
-#include "mathutils_vector.h"
-#include "mathutils_matrix.h"
-#include "mathutils_quat.h"
-#include "mathutils_euler.h"
-#include "mathutils_color.h"
+#include "mathutils_Vector.h"
+#include "mathutils_Matrix.h"
+#include "mathutils_Quaternion.h"
+#include "mathutils_Euler.h"
+#include "mathutils_Color.h"
#include "mathutils_geometry.h"
PyObject *BaseMathObject_getOwner( BaseMathObject * self, void * );
diff --git a/source/blender/python/generic/mathutils_color.c b/source/blender/python/generic/mathutils_Color.c
index f7e62242703..1c870ead438 100644
--- a/source/blender/python/generic/mathutils_color.c
+++ b/source/blender/python/generic/mathutils_Color.c
@@ -22,13 +22,13 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
+
#include "mathutils.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
-
-
#define COLOR_SIZE 3
//----------------------------------mathutils.Color() -------------------
diff --git a/source/blender/python/generic/mathutils_color.h b/source/blender/python/generic/mathutils_Color.h
index f3f185b2991..619cccbe085 100644
--- a/source/blender/python/generic/mathutils_color.h
+++ b/source/blender/python/generic/mathutils_Color.h
@@ -31,8 +31,6 @@
#ifndef MATHUTILS_COLOR_H
#define MATHUTILS_COLOR_H
-#include <Python.h>
-
extern PyTypeObject color_Type;
#define ColorObject_Check(_v) PyObject_TypeCheck((_v), &color_Type)
diff --git a/source/blender/python/generic/mathutils_euler.c b/source/blender/python/generic/mathutils_Euler.c
index b6040274065..dd48df63e25 100644
--- a/source/blender/python/generic/mathutils_euler.c
+++ b/source/blender/python/generic/mathutils_Euler.c
@@ -26,13 +26,13 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
+
#include "mathutils.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
-
-
#ifndef int32_t
#include "BLO_sys_types.h"
#endif
@@ -243,9 +243,6 @@ static char Euler_make_compatible_doc[] =
"\n"
" Make this euler compatible with another, so interpolating between them works as intended.\n"
"\n"
-" :arg other: make compatible with this rotation.\n"
-" :type other: :class:`Euler`\n"
-"\n"
" .. note:: the rotation order is not taken into account for this function.\n"
;
static PyObject *Euler_make_compatible(EulerObject * self, PyObject *value)
diff --git a/source/blender/python/generic/mathutils_euler.h b/source/blender/python/generic/mathutils_Euler.h
index fc4e4ddb667..1bb26ec21d2 100644
--- a/source/blender/python/generic/mathutils_euler.h
+++ b/source/blender/python/generic/mathutils_Euler.h
@@ -31,8 +31,6 @@
#ifndef MATHUTILS_EULER_H
#define MATHUTILS_EULER_H
-#include <Python.h>
-
extern PyTypeObject euler_Type;
#define EulerObject_Check(_v) PyObject_TypeCheck((_v), &euler_Type)
diff --git a/source/blender/python/generic/mathutils_matrix.c b/source/blender/python/generic/mathutils_Matrix.c
index 1da8141eef1..87979af61b7 100644
--- a/source/blender/python/generic/mathutils_matrix.c
+++ b/source/blender/python/generic/mathutils_Matrix.c
@@ -25,6 +25,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
+
#include "mathutils.h"
#include "BLI_math.h"
diff --git a/source/blender/python/generic/mathutils_matrix.h b/source/blender/python/generic/mathutils_Matrix.h
index 7b980222048..505a7253f1a 100644
--- a/source/blender/python/generic/mathutils_matrix.h
+++ b/source/blender/python/generic/mathutils_Matrix.h
@@ -30,8 +30,6 @@
#ifndef MATHUTILS_MATRIX_H
#define MATHUTILS_MATRIX_H
-#include <Python.h>
-
extern PyTypeObject matrix_Type;
#define MatrixObject_Check(_v) PyObject_TypeCheck((_v), &matrix_Type)
#define MATRIX_MAX_DIM 4
diff --git a/source/blender/python/generic/mathutils_quat.c b/source/blender/python/generic/mathutils_Quaternion.c
index e577d808091..08b813ade16 100644
--- a/source/blender/python/generic/mathutils_quat.c
+++ b/source/blender/python/generic/mathutils_Quaternion.c
@@ -26,6 +26,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
+
#include "mathutils.h"
#include "BLI_math.h"
@@ -995,7 +997,7 @@ static struct PyMethodDef Quaternion_methods[] = {
{"dot", (PyCFunction) Quaternion_dot, METH_O, Quaternion_dot_doc},
{"difference", (PyCFunction) Quaternion_difference, METH_O, Quaternion_difference_doc},
{"slerp", (PyCFunction) Quaternion_slerp, METH_VARARGS, Quaternion_slerp_doc},
- {"rotate", (PyCFunction) Quaternion_rotate, METH_VARARGS, Quaternion_rotate_doc},
+ {"rotate", (PyCFunction) Quaternion_rotate, METH_O, Quaternion_rotate_doc},
{"__copy__", (PyCFunction) Quaternion_copy, METH_NOARGS, Quaternion_copy_doc},
{"copy", (PyCFunction) Quaternion_copy, METH_NOARGS, Quaternion_copy_doc},
diff --git a/source/blender/python/generic/mathutils_quat.h b/source/blender/python/generic/mathutils_Quaternion.h
index cfa82f20d42..6052dfa1a41 100644
--- a/source/blender/python/generic/mathutils_quat.h
+++ b/source/blender/python/generic/mathutils_Quaternion.h
@@ -31,8 +31,6 @@
#ifndef MATHUTILS_QUAT_H
#define MATHUTILS_QUAT_H
-#include <Python.h>
-
extern PyTypeObject quaternion_Type;
#define QuaternionObject_Check(_v) PyObject_TypeCheck((_v), &quaternion_Type)
diff --git a/source/blender/python/generic/mathutils_vector.c b/source/blender/python/generic/mathutils_Vector.c
index 0da5fe983ad..0efd805697f 100644
--- a/source/blender/python/generic/mathutils_vector.c
+++ b/source/blender/python/generic/mathutils_Vector.c
@@ -25,6 +25,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
+
#include "mathutils.h"
#include "BLI_blenlib.h"
diff --git a/source/blender/python/generic/mathutils_vector.h b/source/blender/python/generic/mathutils_Vector.h
index 2dbe9d9d3fe..4013a392ff9 100644
--- a/source/blender/python/generic/mathutils_vector.h
+++ b/source/blender/python/generic/mathutils_Vector.h
@@ -31,8 +31,6 @@
#ifndef MATHUTILS_VECTOR_H
#define MATHUTILS_VECTOR_H
-#include <Python.h>
-
extern PyTypeObject vector_Type;
#define VectorObject_Check(_v) PyObject_TypeCheck((_v), &vector_Type)
diff --git a/source/blender/python/generic/mathutils_geometry.c b/source/blender/python/generic/mathutils_geometry.c
index d1e9a2452f3..62867eb46c1 100644
--- a/source/blender/python/generic/mathutils_geometry.c
+++ b/source/blender/python/generic/mathutils_geometry.c
@@ -27,6 +27,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
+
#include "mathutils_geometry.h"
/* Used for PolyFill */
diff --git a/source/blender/python/generic/mathutils_geometry.h b/source/blender/python/generic/mathutils_geometry.h
index 27c24848efe..1af25c7a751 100644
--- a/source/blender/python/generic/mathutils_geometry.h
+++ b/source/blender/python/generic/mathutils_geometry.h
@@ -31,7 +31,6 @@
#ifndef MATHUTILS_GEOMETRY_H
#define MATHUTILS_GEOMETRY_H
-#include <Python.h>
#include "mathutils.h"
PyMODINIT_FUNC BPyInit_mathutils_geometry(void);
diff --git a/source/blender/python/generic/noise.c b/source/blender/python/generic/noise_py_api.c
index 36147493dc5..73818971564 100644
--- a/source/blender/python/generic/noise.c
+++ b/source/blender/python/generic/noise_py_api.c
@@ -35,6 +35,7 @@
/************************/
#include <Python.h>
+
#include "structseq.h"
#include "BLI_blenlib.h"
@@ -42,6 +43,7 @@
#include "DNA_texture_types.h"
+#include "noise_py_api.h"
/*-----------------------------------------*/
/* 'mersenne twister' random number generator */
diff --git a/source/blender/python/generic/noise_py_api.h b/source/blender/python/generic/noise_py_api.h
new file mode 100644
index 00000000000..eaaddabeb9e
--- /dev/null
+++ b/source/blender/python/generic/noise_py_api.h
@@ -0,0 +1,29 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Campbell Barton
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef NOISE_PY_API_H
+#define NOISE_PY_API_H
+
+PyObject *BPyInit_noise(void);
+
+#endif // NOISE_PY_API_H
diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c
index 9f7a9f2cabe..e8618883874 100644
--- a/source/blender/python/generic/py_capi_utils.c
+++ b/source/blender/python/generic/py_capi_utils.c
@@ -21,6 +21,7 @@
*/
#include <Python.h>
+
#include "py_capi_utils.h"
/* for debugging */
@@ -77,7 +78,7 @@ void PyC_FileAndNum(const char **filename, int *lineno)
if (filename) {
co_filename= PyC_Object_GetAttrStringArgs(frame, 2, "f_code", "co_filename");
if (co_filename==NULL) {
- PyErr_SetString(PyExc_SystemError, "Could not access sys._getframe().f_code.co_filename");
+ PyErr_SetString(PyExc_RuntimeError, "Could not access sys._getframe().f_code.co_filename");
Py_DECREF(frame);
return;
}
@@ -108,7 +109,7 @@ void PyC_FileAndNum(const char **filename, int *lineno)
if (lineno) {
f_lineno= PyObject_GetAttrString(frame, "f_lineno");
if (f_lineno==NULL) {
- PyErr_SetString(PyExc_SystemError, "Could not access sys._getframe().f_lineno");
+ PyErr_SetString(PyExc_RuntimeError, "Could not access sys._getframe().f_lineno");
Py_DECREF(frame);
return;
}
diff --git a/source/blender/python/intern/CMakeLists.txt b/source/blender/python/intern/CMakeLists.txt
index c77736df992..970c5ee3012 100644
--- a/source/blender/python/intern/CMakeLists.txt
+++ b/source/blender/python/intern/CMakeLists.txt
@@ -53,6 +53,7 @@ set(SRC
bpy.h
bpy_app.h
+ bpy_driver.h
bpy_operator.h
bpy_operator_wrap.h
bpy_props.h
diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c
index c315e1e2427..450c4ec6962 100644
--- a/source/blender/python/intern/bpy.c
+++ b/source/blender/python/intern/bpy.c
@@ -27,6 +27,8 @@
#define WITH_PYTHON /* for AUD_PyInit.h, possibly others */
+#include <Python.h>
+
#include "bpy.h"
#include "bpy_util.h"
#include "bpy_rna.h"
@@ -208,7 +210,7 @@ void BPy_init_modules( void )
BPY_rna_init();
PyModule_AddObject( mod, "types", BPY_rna_types() ); /* needs to be first so bpy_types can run */
- PyModule_AddObject(mod, "StructMetaIDProp", (PyObject *)&pyrna_struct_meta_idprop_Type); /* metaclass for idprop types, bpy_types.py needs access */
+ PyModule_AddObject(mod, "StructMetaPropGroup", (PyObject *)&pyrna_struct_meta_idprop_Type); /* metaclass for idprop types, bpy_types.py needs access */
bpy_import_test("bpy_types");
PyModule_AddObject( mod, "data", BPY_rna_module() ); /* imports bpy_types by running this */
diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c
index 422563776f4..bc7e981df98 100644
--- a/source/blender/python/intern/bpy_app.c
+++ b/source/blender/python/intern/bpy_app.c
@@ -22,7 +22,10 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
+
#include "bpy_app.h"
+#include "bpy_driver.h"
#include "BLI_path_util.h"
#include "BLI_utildefines.h"
diff --git a/source/blender/python/intern/bpy_app.h b/source/blender/python/intern/bpy_app.h
index 02cadc66f48..cb71880ee7e 100644
--- a/source/blender/python/intern/bpy_app.h
+++ b/source/blender/python/intern/bpy_app.h
@@ -21,15 +21,9 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
-#ifndef BPY_APP_H__
-#define BPY_APP_H__
-
-#include <Python.h>
+#ifndef BPY_APP_H
+#define BPY_APP_H
PyObject *BPY_app_struct( void );
-/* bpy_driver.c */
-int bpy_pydriver_create_dict(void);
-extern PyObject *bpy_pydriver_Dict;
-
-#endif
+#endif // BPY_APP_H
diff --git a/source/blender/python/intern/bpy_driver.c b/source/blender/python/intern/bpy_driver.c
index 161b56d39aa..2b49f78929a 100644
--- a/source/blender/python/intern/bpy_driver.c
+++ b/source/blender/python/intern/bpy_driver.c
@@ -34,6 +34,8 @@
#include "BKE_fcurve.h"
#include "BKE_global.h"
+#include "bpy_driver.h"
+
/* for pydrivers (drivers using one-line Python expressions to express relationships between targets) */
PyObject *bpy_pydriver_Dict = NULL;
diff --git a/source/blender/python/intern/bpy_driver.h b/source/blender/python/intern/bpy_driver.h
new file mode 100644
index 00000000000..27a077248fa
--- /dev/null
+++ b/source/blender/python/intern/bpy_driver.h
@@ -0,0 +1,36 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Campbell Barton
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef BPY_DRIVER_H
+#define BPY_DRIVER_H
+
+struct ChannelDriver;
+
+int bpy_pydriver_create_dict(void);
+extern PyObject *bpy_pydriver_Dict;
+
+/* externals */
+float BPY_driver_exec(struct ChannelDriver *driver);
+void BPY_driver_reset(void);
+
+#endif // BPY_DRIVER_H
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index cf47e40c2ed..4ae1b41bb89 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -56,6 +56,12 @@
#include "../generic/bpy_internal_import.h" // our own imports
#include "../generic/py_capi_utils.h"
+/* inittab initialization functions */
+#include "../generic/noise_py_api.h"
+#include "../generic/mathutils.h"
+#include "../generic/bgl.h"
+#include "../generic/blf_py_api.h"
+
/* for internal use, when starting and ending python scripts */
/* incase a python script triggers another python call, stop bpy_context_clear from invalidating */
@@ -197,12 +203,7 @@ void BPY_context_set(bContext *C)
BPy_SetContext(C);
}
-/* init-tab */
-extern PyObject *BPyInit_noise(void);
-extern PyObject *BPyInit_mathutils(void);
-// extern PyObject *BPyInit_mathutils_geometry(void); // BPyInit_mathutils calls, py doesnt work with thos :S
-extern PyObject *BPyInit_bgl(void);
-extern PyObject *BPyInit_blf(void);
+/* defined in AUD_C-API.cpp */
extern PyObject *AUD_initPython(void);
static struct _inittab bpy_internal_modules[]= {
@@ -216,7 +217,7 @@ static struct _inittab bpy_internal_modules[]= {
};
/* call BPY_context_set first */
-void BPY_python_start( int argc, char **argv )
+void BPY_python_start(int argc, const char **argv)
{
PyThreadState *py_tstate = NULL;
@@ -399,7 +400,7 @@ static int python_script_exec(bContext *C, const char *fn, struct Text *text, st
#endif
}
else {
- PyErr_Format(PyExc_SystemError, "Python file \"%s\" could not be opened: %s", fn, strerror(errno));
+ PyErr_Format(PyExc_IOError, "Python file \"%s\" could not be opened: %s", fn, strerror(errno));
py_result= NULL;
}
}
diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c
index 70aa46c1302..cb527f562eb 100644
--- a/source/blender/python/intern/bpy_operator.c
+++ b/source/blender/python/intern/bpy_operator.c
@@ -24,9 +24,11 @@
*/
/* Note, this module is not to be used directly by the user.
- * its accessed from blender with bpy.__ops__
+ * Internally its exposed as '_bpy.ops', which provides functions for 'bpy.ops', a python package.
* */
+#include <Python.h>
+
#include "bpy_operator.h"
#include "bpy_operator_wrap.h"
#include "bpy_rna.h" /* for setting arg props only - pyrna_py_to_prop() */
@@ -41,6 +43,7 @@
#include "MEM_guardedalloc.h"
#include "BKE_report.h"
+#include "BKE_context.h"
static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args)
{
@@ -57,7 +60,7 @@ static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args)
bContext *C= (bContext *)BPy_GetContext();
if(C==NULL) {
- PyErr_SetString(PyExc_SystemError, "Context is None, cant poll any operators");
+ PyErr_SetString(PyExc_RuntimeError, "Context is None, cant poll any operators");
return NULL;
}
@@ -67,7 +70,7 @@ static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args)
ot= WM_operatortype_find(opname, TRUE);
if (ot == NULL) {
- PyErr_Format(PyExc_SystemError, "Polling operator \"bpy.ops.%s\" error, could not be found", opname);
+ PyErr_Format(PyExc_AttributeError, "Polling operator \"bpy.ops.%s\" error, could not be found", opname);
return NULL;
}
@@ -124,7 +127,7 @@ static PyObject *pyop_call(PyObject *UNUSED(self), PyObject *args)
bContext *C = (bContext *)BPy_GetContext();
if(C==NULL) {
- PyErr_SetString(PyExc_SystemError, "Context is None, cant poll any operators");
+ PyErr_SetString(PyExc_RuntimeError, "Context is None, cant poll any operators");
return NULL;
}
@@ -134,12 +137,12 @@ static PyObject *pyop_call(PyObject *UNUSED(self), PyObject *args)
ot= WM_operatortype_find(opname, TRUE);
if (ot == NULL) {
- PyErr_Format(PyExc_SystemError, "Calling operator \"bpy.ops.%s\" error, could not be found", opname);
+ PyErr_Format(PyExc_AttributeError, "Calling operator \"bpy.ops.%s\" error, could not be found", opname);
return NULL;
}
if(!pyrna_write_check()) {
- PyErr_Format(PyExc_SystemError, "Calling operator \"bpy.ops.%s\" error, can't modify blend data in this state (drawing/rendering)", opname);
+ PyErr_Format(PyExc_RuntimeError, "Calling operator \"bpy.ops.%s\" error, can't modify blend data in this state (drawing/rendering)", opname);
return NULL;
}
@@ -167,7 +170,7 @@ static PyObject *pyop_call(PyObject *UNUSED(self), PyObject *args)
if(WM_operator_poll_context((bContext*)C, ot, context) == FALSE) {
const char *msg= CTX_wm_operator_poll_msg_get(C);
- PyErr_Format(PyExc_SystemError, "Operator bpy.ops.%.200s.poll() %.200s", opname, msg ? msg : "failed, context is incorrect");
+ PyErr_Format(PyExc_RuntimeError, "Operator bpy.ops.%.200s.poll() %.200s", opname, msg ? msg : "failed, context is incorrect");
CTX_wm_operator_poll_msg_set(C, NULL); /* better set to NULL else it could be used again */
error_val= -1;
}
@@ -255,10 +258,10 @@ static PyObject *pyop_as_string(PyObject *UNUSED(self), PyObject *args)
char *buf = NULL;
PyObject *pybuf;
- bContext *C = (bContext *)BPy_GetContext();
+ bContext *C= (bContext *)BPy_GetContext();
if(C==NULL) {
- PyErr_SetString(PyExc_SystemError, "Context is None, cant get the string representation of this object.");
+ PyErr_SetString(PyExc_RuntimeError, "Context is None, cant get the string representation of this object.");
return NULL;
}
@@ -268,7 +271,7 @@ static PyObject *pyop_as_string(PyObject *UNUSED(self), PyObject *args)
ot= WM_operatortype_find(opname, TRUE);
if (ot == NULL) {
- PyErr_Format(PyExc_SystemError, "_bpy.ops.as_string: operator \"%.200s\"could not be found", opname);
+ PyErr_Format(PyExc_AttributeError, "_bpy.ops.as_string: operator \"%.200s\"could not be found", opname);
return NULL;
}
diff --git a/source/blender/python/intern/bpy_operator.h b/source/blender/python/intern/bpy_operator.h
index 1a73b3eee55..f45f91dbe1f 100644
--- a/source/blender/python/intern/bpy_operator.h
+++ b/source/blender/python/intern/bpy_operator.h
@@ -25,13 +25,6 @@
#ifndef BPY_OPERATOR_H
#define BPY_OPERATOR_H
-#include <Python.h>
-
-#include "RNA_access.h"
-#include "RNA_types.h"
-#include "DNA_windowmanager_types.h"
-#include "BKE_context.h"
-
extern PyTypeObject pyop_base_Type;
#define BPy_OperatorBase_Check(v) (PyObject_TypeCheck(v, &pyop_base_Type))
diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c
index 12c67f9e03f..51ab889e321 100644
--- a/source/blender/python/intern/bpy_operator_wrap.c
+++ b/source/blender/python/intern/bpy_operator_wrap.c
@@ -23,6 +23,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
+
#include "bpy_operator_wrap.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/python/intern/bpy_operator_wrap.h b/source/blender/python/intern/bpy_operator_wrap.h
index b61fd1323f1..919e82059b7 100644
--- a/source/blender/python/intern/bpy_operator_wrap.h
+++ b/source/blender/python/intern/bpy_operator_wrap.h
@@ -25,8 +25,13 @@
#ifndef BPY_OPERATOR_WRAP_H
#define BPY_OPERATOR_WRAP_H
-#include <Python.h>
+struct wmOperatorType;
/* these are used for operator methods, used by bpy_operator.c */
PyObject *PYOP_wrap_macro_define(PyObject *self, PyObject *args);
+
+/* exposed to rna/wm api */
+void operator_wrapper(struct wmOperatorType *ot, void *userdata);
+void macro_wrapper(struct wmOperatorType *ot, void *userdata);
+
#endif
diff --git a/source/blender/python/intern/bpy_props.c b/source/blender/python/intern/bpy_props.c
index 7ed5db6e6dc..2bdaa5267e1 100644
--- a/source/blender/python/intern/bpy_props.c
+++ b/source/blender/python/intern/bpy_props.c
@@ -22,14 +22,14 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
+
#include "bpy_props.h"
#include "bpy_rna.h"
#include "bpy_util.h"
#include "BLI_utildefines.h"
-
-
#include "RNA_define.h" /* for defining our own rna */
#include "RNA_enum_types.h"
@@ -162,6 +162,16 @@ static PyObject *bpy_prop_deferred_return(PyObject *func, PyObject *kw)
} \
+#define BPY_PROPDEF_NAME_DOC \
+" :arg name: Name used in the user interface.\n" \
+" :type name: string\n" \
+
+
+#define BPY_PROPDEF_DESC_DOC \
+" :arg description: Text used for the tooltip and api documentation.\n" \
+" :type description: string\n" \
+
+
#if 0
static int bpy_struct_id_used(StructRNA *srna, char *identifier)
{
@@ -179,11 +189,13 @@ static char BPy_BoolProperty_doc[] =
"\n"
" Returns a new boolean property definition.\n"
"\n"
+BPY_PROPDEF_NAME_DOC
+BPY_PROPDEF_DESC_DOC
" :arg options: Enumerator in ['HIDDEN', 'ANIMATABLE'].\n"
" :type options: set\n"
" :arg subtype: Enumerator in ['UNSIGNED', 'PERCENTAGE', 'FACTOR', 'ANGLE', 'TIME', 'DISTANCE', 'NONE'].\n"
-" :type subtype: string";
-
+" :type subtype: string\n"
+;
static PyObject *BPy_BoolProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
@@ -225,10 +237,17 @@ static char BPy_BoolVectorProperty_doc[] =
"\n"
" Returns a new vector boolean property definition.\n"
"\n"
+BPY_PROPDEF_NAME_DOC
+BPY_PROPDEF_DESC_DOC
+" :arg default: sequence of booleans the length of *size*.\n"
+" :type default: sequence\n"
" :arg options: Enumerator in ['HIDDEN', 'ANIMATABLE'].\n"
" :type options: set\n"
" :arg subtype: Enumerator in ['COLOR', 'TRANSLATION', 'DIRECTION', 'VELOCITY', 'ACCELERATION', 'MATRIX', 'EULER', 'QUATERNION', 'AXISANGLE', 'XYZ', 'COLOR_GAMMA', 'LAYER', 'NONE'].\n"
-" :type subtype: string";
+" :type subtype: string\n"
+" :arg size: Vector dimensions in [1, and " STRINGIFY(PYRNA_STACK_ARRAY) "].\n"
+" :type size: int\n"
+;
static PyObject *BPy_BoolVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
@@ -282,10 +301,13 @@ static char BPy_IntProperty_doc[] =
"\n"
" Returns a new int property definition.\n"
"\n"
+BPY_PROPDEF_NAME_DOC
+BPY_PROPDEF_DESC_DOC
" :arg options: Enumerator in ['HIDDEN', 'ANIMATABLE'].\n"
" :type options: set\n"
" :arg subtype: Enumerator in ['UNSIGNED', 'PERCENTAGE', 'FACTOR', 'ANGLE', 'TIME', 'DISTANCE', 'NONE'].\n"
-" :type subtype: string";
+" :type subtype: string\n"
+;
static PyObject *BPy_IntProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
@@ -328,10 +350,17 @@ static char BPy_IntVectorProperty_doc[] =
"\n"
" Returns a new vector int property definition.\n"
"\n"
+BPY_PROPDEF_NAME_DOC
+BPY_PROPDEF_DESC_DOC
+" :arg default: sequence of ints the length of *size*.\n"
+" :type default: sequence\n"
" :arg options: Enumerator in ['HIDDEN', 'ANIMATABLE'].\n"
" :type options: set\n"
" :arg subtype: Enumerator in ['COLOR', 'TRANSLATION', 'DIRECTION', 'VELOCITY', 'ACCELERATION', 'MATRIX', 'EULER', 'QUATERNION', 'AXISANGLE', 'XYZ', 'COLOR_GAMMA', 'LAYER', 'NONE'].\n"
-" :type subtype: string";
+" :type subtype: string\n"
+" :arg size: Vector dimensions in [1, and " STRINGIFY(PYRNA_STACK_ARRAY) "].\n"
+" :type size: int\n"
+;
static PyObject *BPy_IntVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
@@ -386,12 +415,15 @@ static char BPy_FloatProperty_doc[] =
"\n"
" Returns a new float property definition.\n"
"\n"
+BPY_PROPDEF_NAME_DOC
+BPY_PROPDEF_DESC_DOC
" :arg options: Enumerator in ['HIDDEN', 'ANIMATABLE'].\n"
" :type options: set\n"
" :arg subtype: Enumerator in ['UNSIGNED', 'PERCENTAGE', 'FACTOR', 'ANGLE', 'TIME', 'DISTANCE', 'NONE'].\n"
" :type subtype: string\n"
" :arg unit: Enumerator in ['NONE', 'LENGTH', 'AREA', 'VOLUME', 'ROTATION', 'TIME', 'VELOCITY', 'ACCELERATION'].\n"
-" :type unit: string\n";
+" :type unit: string\n"
+;
static PyObject *BPy_FloatProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
@@ -442,10 +474,17 @@ static char BPy_FloatVectorProperty_doc[] =
"\n"
" Returns a new vector float property definition.\n"
"\n"
+BPY_PROPDEF_NAME_DOC
+BPY_PROPDEF_DESC_DOC
+" :arg default: sequence of floats the length of *size*.\n"
+" :type default: sequence\n"
" :arg options: Enumerator in ['HIDDEN', 'ANIMATABLE'].\n"
" :type options: set\n"
" :arg subtype: Enumerator in ['COLOR', 'TRANSLATION', 'DIRECTION', 'VELOCITY', 'ACCELERATION', 'MATRIX', 'EULER', 'QUATERNION', 'AXISANGLE', 'XYZ', 'COLOR_GAMMA', 'LAYER', 'NONE'].\n"
-" :type subtype: string";
+" :type subtype: string\n"
+" :arg size: Vector dimensions in [1, and " STRINGIFY(PYRNA_STACK_ARRAY) "].\n"
+" :type size: int\n"
+;
static PyObject *BPy_FloatVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
@@ -499,10 +538,13 @@ static char BPy_StringProperty_doc[] =
"\n"
" Returns a new string property definition.\n"
"\n"
+BPY_PROPDEF_NAME_DOC
+BPY_PROPDEF_DESC_DOC
" :arg options: Enumerator in ['HIDDEN', 'ANIMATABLE'].\n"
" :type options: set\n"
" :arg subtype: Enumerator in ['FILE_PATH', 'DIR_PATH', 'FILENAME', 'NONE'].\n"
-" :type subtype: string";
+" :type subtype: string\n"
+;
static PyObject *BPy_StringProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
@@ -635,12 +677,15 @@ static char BPy_EnumProperty_doc[] =
"\n"
" Returns a new enumerator property definition.\n"
"\n"
+BPY_PROPDEF_NAME_DOC
+BPY_PROPDEF_DESC_DOC
" :arg default: The default value for this enum, A string when *ENUM_FLAG* is disabled otherwise a set which may only contain string identifiers used in *items*.\n"
" :type default: string or set\n"
" :arg options: Enumerator in ['HIDDEN', 'ANIMATABLE', 'ENUM_FLAG'].\n"
" :type options: set\n"
" :arg items: sequence of enum items formatted: [(identifier, name, description), ...] where the identifier is used for python access and other values are used for the interface.\n"
-" :type items: sequence of string triplets";
+" :type items: sequence of string triplets\n"
+;
static PyObject *BPy_EnumProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
@@ -697,17 +742,17 @@ static StructRNA *pointer_type_from_py(PyObject *value, const char *error_prefix
if(PyErr_Occurred()) {
PyObject *msg= PyC_ExceptionBuffer();
char *msg_char= _PyUnicode_AsString(msg);
- PyErr_Format(PyExc_TypeError, "%.200s expected an RNA type derived from IDPropertyGroup, failed with: %s", error_prefix, msg_char);
+ PyErr_Format(PyExc_TypeError, "%.200s expected an RNA type derived from PropertyGroup, failed with: %s", error_prefix, msg_char);
Py_DECREF(msg);
}
else {
- PyErr_Format(PyExc_TypeError, "%.200s expected an RNA type derived from IDPropertyGroup, failed with type '%s'", error_prefix, Py_TYPE(value)->tp_name);
+ PyErr_Format(PyExc_TypeError, "%.200s expected an RNA type derived from PropertyGroup, failed with type '%s'", error_prefix, Py_TYPE(value)->tp_name);
}
return NULL;
}
- if(!RNA_struct_is_a(srna, &RNA_IDPropertyGroup)) {
- PyErr_Format(PyExc_SystemError, "%.200s expected an RNA type derived from IDPropertyGroup", error_prefix);
+ if(!RNA_struct_is_a(srna, &RNA_PropertyGroup)) {
+ PyErr_Format(PyExc_TypeError, "%.200s expected an RNA type derived from PropertyGroup", error_prefix);
return NULL;
}
@@ -715,14 +760,17 @@ static StructRNA *pointer_type_from_py(PyObject *value, const char *error_prefix
}
static char BPy_PointerProperty_doc[] =
-".. function:: PointerProperty(items, type=\"\", description=\"\", default=\"\", options={'ANIMATABLE'})\n"
+".. function:: PointerProperty(type=\"\", description=\"\", options={'ANIMATABLE'})\n"
"\n"
" Returns a new pointer property definition.\n"
"\n"
+" :arg type: A subclass of :class:`bpy.types.PropertyGroup`.\n"
+" :type type: class\n"
+BPY_PROPDEF_NAME_DOC
+BPY_PROPDEF_DESC_DOC
" :arg options: Enumerator in ['HIDDEN', 'ANIMATABLE'].\n"
" :type options: set\n"
-" :arg type: Dynamic type from :mod:`bpy.types`.\n"
-" :type type: class";
+;
static PyObject *BPy_PointerProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
@@ -763,10 +811,13 @@ static char BPy_CollectionProperty_doc[] =
"\n"
" Returns a new collection property definition.\n"
"\n"
+" :arg type: A subclass of :class:`bpy.types.PropertyGroup`.\n"
+" :type type: class\n"
+BPY_PROPDEF_NAME_DOC
+BPY_PROPDEF_DESC_DOC
" :arg options: Enumerator in ['HIDDEN', 'ANIMATABLE'].\n"
" :type options: set\n"
-" :arg type: Dynamic type from :mod:`bpy.types`.\n"
-" :type type: class";
+;
static PyObject *BPy_CollectionProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
@@ -808,7 +859,8 @@ static char BPy_RemoveProperty_doc[] =
" Removes a dynamically defined property.\n"
"\n"
" :arg attr: Property name.\n"
-" :type attr: string";
+" :type attr: string\n"
+;
static PyObject *BPy_RemoveProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
diff --git a/source/blender/python/intern/bpy_props.h b/source/blender/python/intern/bpy_props.h
index fc295ccdf5d..136dd2b5b2f 100644
--- a/source/blender/python/intern/bpy_props.h
+++ b/source/blender/python/intern/bpy_props.h
@@ -25,8 +25,6 @@
#ifndef BPY_PROPS_H
#define BPY_PROPS_H
-#include <Python.h>
-
PyObject *BPY_rna_props( void );
#define PYRNA_STACK_ARRAY 32
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index b5460edbd3a..fa01eefa867 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -21,6 +21,9 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+
+#include <Python.h>
+
#include <float.h> /* FLT_MIN/MAX */
#include "bpy_rna.h"
@@ -76,7 +79,7 @@ static int rna_id_write_error(PointerRNA *ptr, PyObject *key)
/* make a nice string error */
BLI_assert(idtype != NULL);
- PyErr_Format(PyExc_RuntimeError, "Writing to ID classes in this context is not allowed: %.200s, %.200s datablock, error setting %.200s.%.200s", id->name+2, idtype, RNA_struct_identifier(ptr->type), pyname);
+ PyErr_Format(PyExc_AttributeError, "Writing to ID classes in this context is not allowed: %.200s, %.200s datablock, error setting %.200s.%.200s", id->name+2, idtype, RNA_struct_identifier(ptr->type), pyname);
return TRUE;
}
@@ -564,7 +567,7 @@ static PyObject *pyrna_prop_str( BPy_PropertyRNA *self )
int type= RNA_property_type(self->prop);
if(RNA_enum_id_from_value(property_type_items, type, &type_id)==0) {
- PyErr_SetString(PyExc_SystemError, "could not use property type, internal error"); /* should never happen */
+ PyErr_SetString(PyExc_RuntimeError, "could not use property type, internal error"); /* should never happen */
return NULL;
}
else {
@@ -595,6 +598,12 @@ static PyObject *pyrna_prop_str( BPy_PropertyRNA *self )
return ret;
}
}
+ if(RNA_property_type(self->prop) == PROP_COLLECTION) {
+ PointerRNA r_ptr;
+ if(RNA_property_collection_type_get(&self->ptr, self->prop, &r_ptr)) {
+ return PyUnicode_FromFormat( "<bpy_%.200s, %.200s>", type_fmt, RNA_struct_identifier(r_ptr.type));
+ }
+ }
return PyUnicode_FromFormat( "<bpy_%.200s, %.200s.%.200s>", type_fmt, RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop));
}
@@ -690,6 +699,10 @@ static int pyrna_string_to_enum(PyObject *item, PointerRNA *ptr, PropertyRNA *pr
MEM_freeN((void *)enum_str);
return 0;
} else {
+ /* hack so that dynamic enums used for operator properties will be able to be built (i.e. context will be supplied to itemf)
+ * and thus running defining operator buttons for such operators in UI will work */
+ RNA_def_property_clear_flag(prop, PROP_ENUM_NO_CONTEXT);
+
if (!RNA_property_enum_value(BPy_GetContext(), ptr, prop, param, val)) {
const char *enum_str= pyrna_enum_as_string(ptr, prop);
PyErr_Format(PyExc_TypeError, "%.200s enum \"%.200s\" not found in (%.200s)", error_prefix, param, enum_str);
@@ -717,7 +730,7 @@ int pyrna_set_to_enum_bitfield(EnumPropertyItem *items, PyObject *value, int *r_
const char *param= _PyUnicode_AsString(key);
if(param==NULL) {
- PyErr_Format(PyExc_TypeError, "%.200s expected a string. found a %.200s", error_prefix, Py_TYPE(key)->tp_name);
+ PyErr_Format(PyExc_TypeError, "%.200s expected a string, not %.200s", error_prefix, Py_TYPE(key)->tp_name);
return -1;
}
if(pyrna_enum_value_from_id(items, param, &ret, error_prefix) < 0)
@@ -802,14 +815,14 @@ static PyObject *pyrna_enum_to_py(PointerRNA *ptr, PropertyRNA *prop, int val)
if (RNA_property_enum_identifier(BPy_GetContext(), ptr, prop, val, &identifier)) {
ret = PyUnicode_FromString(identifier);
} else {
- EnumPropertyItem *item;
+ EnumPropertyItem *enum_item;
int free= FALSE;
/* don't throw error here, can't trust blender 100% to give the
* right values, python code should not generate error for that */
- RNA_property_enum_items(BPy_GetContext(), ptr, prop, &item, NULL, &free);
- if(item && item->identifier) {
- ret= PyUnicode_FromString(item->identifier);
+ RNA_property_enum_items(BPy_GetContext(), ptr, prop, &enum_item, NULL, &free);
+ if(enum_item && enum_item->identifier) {
+ ret= PyUnicode_FromString(enum_item->identifier);
}
else {
const char *ptr_name= RNA_struct_name_get_alloc(ptr, NULL, FALSE);
@@ -830,7 +843,7 @@ static PyObject *pyrna_enum_to_py(PointerRNA *ptr, PropertyRNA *prop, int val)
}
if(free)
- MEM_freeN(item);
+ MEM_freeN(enum_item);
/*PyErr_Format(PyExc_AttributeError, "RNA Error: Current value \"%d\" matches no enum", val);
ret = NULL;*/
@@ -900,7 +913,7 @@ PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop)
ret = pyrna_prop_CreatePyObject(ptr, prop);
break;
default:
- PyErr_Format(PyExc_TypeError, "bpy_struct internal error: unknown type \"%d\" (pyrna_prop_to_py)", type);
+ PyErr_Format(PyExc_TypeError, "bpy_struct internal error: unknown type '%d' (pyrna_prop_to_py)", type);
ret = NULL;
break;
}
@@ -1012,7 +1025,7 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
} else /* continue... */
#endif // USE_MATHUTILS
if (!PySequence_Check(value)) {
- PyErr_Format(PyExc_TypeError, "%.200s RNA array assignment to %.200s.%.200s expected a sequence instead of %.200s instance", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), Py_TYPE(value)->tp_name);
+ PyErr_Format(PyExc_TypeError, "%.200s RNA array assignment to %.200s.%.200s expected a sequence, not %.200s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), Py_TYPE(value)->tp_name);
return -1;
}
/* done getting the length */
@@ -1040,7 +1053,7 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
param = PyLong_AsLong( value );
if(param < 0) {
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected True/False or 0/1", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop));
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected True/False or 0/1, not %.200s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), Py_TYPE(value)->tp_name);
return -1;
} else {
if(data) *((int*)data)= param;
@@ -1053,11 +1066,11 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
int overflow;
long param= PyLong_AsLongAndOverflow(value, &overflow);
if(overflow || (param > INT_MAX) || (param < INT_MIN)) {
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s value not in 'int' range (" STRINGIFY(INT_MIN) ", " STRINGIFY(INT_MAX) ")", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop));
+ PyErr_Format(PyExc_ValueError, "%.200s %.200s.%.200s value not in 'int' range (" STRINGIFY(INT_MIN) ", " STRINGIFY(INT_MAX) ")", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop));
return -1;
}
else if (param==-1 && PyErr_Occurred()) {
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected an int type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop));
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected an int type, not %.200s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), Py_TYPE(value)->tp_name);
return -1;
} else {
int param_i= (int)param;
@@ -1071,7 +1084,7 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
{
float param = PyFloat_AsDouble(value);
if (PyErr_Occurred()) {
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a float type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop));
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a float type, not %.200s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), Py_TYPE(value)->tp_name);
return -1;
} else {
RNA_property_float_clamp(ptr, prop, (float *)&param);
@@ -1098,7 +1111,7 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
#endif // USE_STRING_COERCE
if (param==NULL) {
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a string type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop));
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a string type, not %.200s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), Py_TYPE(value)->tp_name);
return -1;
}
else {
@@ -1131,7 +1144,7 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
}
else {
const char *enum_str= pyrna_enum_as_string(ptr, prop);
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a string enum or a set of strings in (%.2000s)", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), enum_str);
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a string enum or a set of strings in (%.2000s), not %.200s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), enum_str, Py_TYPE(value)->tp_name);
MEM_freeN((void *)enum_str);
return -1;
}
@@ -1145,7 +1158,7 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
{
PyObject *value_new= NULL;
- StructRNA *ptype= RNA_property_pointer_type(ptr, prop);
+ StructRNA *ptr_type= RNA_property_pointer_type(ptr, prop);
int flag = RNA_property_flag(prop);
/* this is really nasty!, so we can fake the operator having direct properties eg:
@@ -1159,7 +1172,7 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
* this is so bad that its almost a good reason to do away with fake 'self.properties -> self' class mixing
* if this causes problems in the future it should be removed.
*/
- if( (ptype == &RNA_AnyType) &&
+ if( (ptr_type == &RNA_AnyType) &&
(BPy_StructRNA_Check(value)) &&
(RNA_struct_is_a(((BPy_StructRNA *)value)->ptr.type, &RNA_Operator))
) {
@@ -1169,7 +1182,7 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
/* if property is an OperatorProperties pointer and value is a map, forward back to pyrna_pydict_to_props */
- if (RNA_struct_is_a(ptype, &RNA_OperatorProperties) && PyDict_Check(value)) {
+ if (RNA_struct_is_a(ptr_type, &RNA_OperatorProperties) && PyDict_Check(value)) {
PointerRNA opptr = RNA_property_pointer_get(ptr, prop);
return pyrna_pydict_to_props(&opptr, value, 0, error_prefix);
}
@@ -1183,16 +1196,16 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
value_new= value;
}
else {
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s collection has no type, cant be used as a %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(ptype));
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s collection has no type, cant be used as a %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(ptr_type));
return -1;
}
}
if(!BPy_StructRNA_Check(value) && value != Py_None) {
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(ptype));
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a %.200s type, not %.200s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(ptr_type), Py_TYPE(value)->tp_name);
Py_XDECREF(value_new); return -1;
} else if((flag & PROP_NEVER_NULL) && value == Py_None) {
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s does not support a 'None' assignment %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(ptype));
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s does not support a 'None' assignment %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(ptr_type));
Py_XDECREF(value_new); return -1;
} else if(value != Py_None && ((flag & PROP_ID_SELF_CHECK) && ptr->id.data == ((BPy_StructRNA*)value)->ptr.id.data)) {
PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s ID type does not support assignment to its self", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop));
@@ -1211,7 +1224,7 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
else if(value == Py_None) {
*((void**)data)= NULL;
}
- else if(RNA_struct_is_a(param->ptr.type, ptype)) {
+ else if(RNA_struct_is_a(param->ptr.type, ptr_type)) {
*((void**)data)= param->ptr.data;
}
else {
@@ -1224,21 +1237,21 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
PointerRNA valueptr= {{NULL}};
RNA_property_pointer_set(ptr, prop, valueptr);
}
- else if(RNA_struct_is_a(param->ptr.type, ptype)) {
+ else if(RNA_struct_is_a(param->ptr.type, ptr_type)) {
RNA_property_pointer_set(ptr, prop, param->ptr);
}
else {
PointerRNA tmp;
- RNA_pointer_create(NULL, ptype, NULL, &tmp);
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(tmp.type));
+ RNA_pointer_create(NULL, ptr_type, NULL, &tmp);
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a %.200s type. not %.200s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(tmp.type), RNA_struct_identifier(param->ptr.type));
Py_XDECREF(value_new); return -1;
}
}
if(raise_error) {
PointerRNA tmp;
- RNA_pointer_create(NULL, ptype, NULL, &tmp);
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(tmp.type));
+ RNA_pointer_create(NULL, ptr_type, NULL, &tmp);
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a %.200s type, not %.200s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(tmp.type), RNA_struct_identifier(param->ptr.type));
Py_XDECREF(value_new); return -1;
}
}
@@ -1259,7 +1272,7 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
/* convert a sequence of dict's into a collection */
if(!PySequence_Check(value)) {
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a sequence for an RNA collection, found a '%.200s' instead", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), Py_TYPE(value)->tp_name);
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a sequence for an RNA collection, not %.200s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), Py_TYPE(value)->tp_name);
return -1;
}
@@ -1274,7 +1287,7 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
}
if(PyDict_Check(item)==0) {
- PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a each sequence member to be a dict for an RNA collection, found a '%.200s' instead", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), Py_TYPE(item)->tp_name);
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a each sequence member to be a dict for an RNA collection, not %.200s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), Py_TYPE(item)->tp_name);
Py_XDECREF(item);
return -1;
}
@@ -1642,7 +1655,7 @@ static PyObject *pyrna_prop_collection_subscript(BPy_PropertyRNA *self, PyObject
}
}
else {
- PyErr_Format(PyExc_TypeError, "bpy_prop_collection[key]: invalid key, must be a string or an int instead of %.200s instance", Py_TYPE(key)->tp_name);
+ PyErr_Format(PyExc_TypeError, "bpy_prop_collection[key]: invalid key, must be a string or an int, not %.200s", Py_TYPE(key)->tp_name);
return NULL;
}
}
@@ -2855,6 +2868,7 @@ static int pyrna_is_deferred_prop(PyObject *value)
return PyTuple_CheckExact(value) && PyTuple_GET_SIZE(value)==2 && PyCallable_Check(PyTuple_GET_ITEM(value, 0)) && PyDict_CheckExact(PyTuple_GET_ITEM(value, 1));
}
+#if 0
static PyObject *pyrna_struct_meta_idprop_getattro(PyObject *cls, PyObject *attr)
{
PyObject *ret= PyType_Type.tp_getattro(cls, attr);
@@ -2883,6 +2897,7 @@ static PyObject *pyrna_struct_meta_idprop_getattro(PyObject *cls, PyObject *attr
return ret;
}
+#endif
static int pyrna_struct_meta_idprop_setattro(PyObject *cls, PyObject *attr, PyObject *value)
{
@@ -3523,11 +3538,11 @@ static PyObject *foreach_getset(BPy_PropertyRNA *self, PyObject *args, int set)
if(PyErr_Occurred()) {
/* Maybe we could make our own error */
PyErr_Print();
- PyErr_SetString(PyExc_SystemError, "could not access the py sequence");
+ PyErr_SetString(PyExc_TypeError, "could not access the py sequence");
return NULL;
}
if (!ok) {
- PyErr_SetString(PyExc_SystemError, "internal error setting the array");
+ PyErr_SetString(PyExc_RuntimeError, "internal error setting the array");
return NULL;
}
@@ -3607,11 +3622,6 @@ static PyObject *pyrna_prop_collection_iter(BPy_PropertyRNA *self)
return iter;
}
-static PyObject *pyrna_struct_is_registered(PyObject *cls)
-{
- return PyBool_FromLong(PyDict_GetItemString((((PyTypeObject *)cls)->tp_dict), "bl_rna") != NULL);
-}
-
static struct PyMethodDef pyrna_struct_methods[] = {
/* only for PointerRNA's with ID'props */
@@ -3637,9 +3647,6 @@ static struct PyMethodDef pyrna_struct_methods[] = {
/* experemental */
{"callback_add", (PyCFunction)pyrna_callback_add, METH_VARARGS, NULL},
{"callback_remove", (PyCFunction)pyrna_callback_remove, METH_VARARGS, NULL},
-
- /* class method */
- {"is_registered", (PyCFunction) pyrna_struct_is_registered, METH_NOARGS | METH_CLASS, NULL},
{NULL, NULL, 0, NULL}
};
@@ -3674,23 +3681,42 @@ static struct PyMethodDef pyrna_prop_collection_idprop_methods[] = {
/* only needed for subtyping, so a new class gets a valid BPy_StructRNA
* todo - also accept useful args */
-static PyObject * pyrna_struct_new(PyTypeObject *type, PyObject *args, PyObject *UNUSED(kwds)) {
-
- BPy_StructRNA *base;
+static PyObject * pyrna_struct_new(PyTypeObject *type, PyObject *args, PyObject *UNUSED(kwds))
+{
+ if(PyTuple_GET_SIZE(args) == 1) {
+ BPy_StructRNA *base= (BPy_StructRNA *)PyTuple_GET_ITEM(args, 0);
+ if (type == Py_TYPE(base)) {
+ Py_INCREF(base);
+ return (PyObject *)base;
+ }
+ else if (PyType_IsSubtype(type, &pyrna_struct_Type)) {
+ /* this almost never runs, only when using user defined subclasses of built-in object.
+ * this isnt common since its NOT related to registerable subclasses. eg:
+
+ >>> class MyObSubclass(bpy.types.Object):
+ ... def test_func(self):
+ ... print(100)
+ ...
+ >>> myob = MyObSubclass(bpy.context.object)
+ >>> myob.test_func()
+ 100
+ *
+ * Keep this since it could be useful.
+ */
+ BPy_StructRNA *ret;
+ if((ret= (BPy_StructRNA *)type->tp_alloc(type, 0))) {
+ ret->ptr = base->ptr;
+ }
+ /* pass on exception & NULL if tp_alloc fails */
+ return (PyObject *)ret;
+ }
- if (!PyArg_ParseTuple(args, "O!:bpy_struct.__new__", &pyrna_struct_Type, &base))
+ /* error, invalid type given */
+ PyErr_Format(PyExc_TypeError, "bpy_struct.__new__(type): type '%.200s' is not a subtype of bpy_struct", type->tp_name);
return NULL;
-
- if (type == Py_TYPE(base)) {
- Py_INCREF(base);
- return (PyObject *)base;
- } else if (PyType_IsSubtype(type, &pyrna_struct_Type)) {
- BPy_StructRNA *ret = (BPy_StructRNA *) type->tp_alloc(type, 0);
- ret->ptr = base->ptr;
- return (PyObject *)ret;
}
else {
- PyErr_Format(PyExc_TypeError, "bpy_struct.__new__(type): type '%.200s' is not a subtype of bpy_struct", type->tp_name);
+ PyErr_Format(PyExc_TypeError, "bpy_struct.__new__(type): expected a single argument");
return NULL;
}
}
@@ -3829,21 +3855,21 @@ static PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *dat
case PROP_POINTER:
{
PointerRNA newptr;
- StructRNA *type= RNA_property_pointer_type(ptr, prop);
+ StructRNA *ptype= RNA_property_pointer_type(ptr, prop);
if(flag & PROP_RNAPTR) {
/* in this case we get the full ptr */
newptr= *(PointerRNA*)data;
}
else {
- if(RNA_struct_is_ID(type)) {
+ if(RNA_struct_is_ID(ptype)) {
RNA_id_pointer_create(*(void**)data, &newptr);
} else {
/* note: this is taken from the function's ID pointer
* and will break if a function returns a pointer from
* another ID block, watch this! - it should at least be
* easy to debug since they are all ID's */
- RNA_pointer_create(ptr->id.data, type, *(void**)data, &newptr);
+ RNA_pointer_create(ptr->id.data, ptype, *(void**)data, &newptr);
}
}
@@ -4143,7 +4169,7 @@ PyTypeObject pyrna_struct_meta_idprop_Type = {
NULL, /* hashfunc tp_hash; */
NULL, /* ternaryfunc tp_call; */
NULL, /* reprfunc tp_str; */
- (getattrofunc) pyrna_struct_meta_idprop_getattro, /* getattrofunc tp_getattro; */
+ NULL /*(getattrofunc) pyrna_struct_meta_idprop_getattro*/, /* getattrofunc tp_getattro; */
(setattrofunc) pyrna_struct_meta_idprop_setattro, /* setattrofunc tp_setattro; */
/* Functions to access object as input/output buffer */
@@ -4151,6 +4177,50 @@ PyTypeObject pyrna_struct_meta_idprop_Type = {
/*** Flags to define presence of optional/expanded features ***/
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
+
+ NULL, /* char *tp_doc; Documentation string */
+ /*** Assigned meaning in release 2.0 ***/
+ /* call function for all accessible objects */
+ NULL, /* traverseproc tp_traverse; */
+
+ /* delete references to contained objects */
+ NULL, /* inquiry tp_clear; */
+
+ /*** Assigned meaning in release 2.1 ***/
+ /*** rich comparisons ***/
+ NULL, /* richcmpfunc tp_richcompare; */
+
+ /*** weak reference enabler ***/
+ 0, /* long tp_weaklistoffset; */
+
+ /*** Added in release 2.2 ***/
+ /* Iterators */
+ NULL, /* getiterfunc tp_iter; */
+ NULL, /* iternextfunc tp_iternext; */
+
+ /*** Attribute descriptor and subclassing stuff ***/
+ NULL, /* struct PyMethodDef *tp_methods; */
+ NULL, /* struct PyMemberDef *tp_members; */
+ NULL, /* struct PyGetSetDef *tp_getset; */
+ NULL, /* struct _typeobject *tp_base; */
+ NULL, /* PyObject *tp_dict; */
+ NULL, /* descrgetfunc tp_descr_get; */
+ NULL, /* descrsetfunc tp_descr_set; */
+ 0, /* long tp_dictoffset; */
+ NULL, /* initproc tp_init; */
+ NULL, /* allocfunc tp_alloc; */
+ NULL, /* newfunc tp_new; */
+ /* Low-level free-memory routine */
+ NULL, /* freefunc tp_free; */
+ /* For PyObject_IS_GC */
+ NULL, /* inquiry tp_is_gc; */
+ NULL, /* PyObject *tp_bases; */
+ /* method resolution order */
+ NULL, /* PyObject *tp_mro; */
+ NULL, /* PyObject *tp_cache; */
+ NULL, /* PyObject *tp_subclasses; */
+ NULL, /* PyObject *tp_weaklist; */
+ NULL
};
@@ -4897,7 +4967,7 @@ static PyObject *pyrna_basetype_getattro( BPy_BaseTypeRNA *self, PyObject *pynam
else if (RNA_property_collection_lookup_string(&self->ptr, self->prop, name, &newptr)) {
ret= pyrna_struct_Subtype(&newptr);
if (ret==NULL) {
- PyErr_Format(PyExc_SystemError, "bpy.types.%.200s subtype could not be generated, this is a bug!", _PyUnicode_AsString(pyname));
+ PyErr_Format(PyExc_RuntimeError, "bpy.types.%.200s subtype could not be generated, this is a bug!", _PyUnicode_AsString(pyname));
}
}
else {
@@ -4986,18 +5056,18 @@ StructRNA *pyrna_struct_as_srna(PyObject *self, int parent, const char *error_pr
}
if(py_srna==NULL) {
- PyErr_Format(PyExc_SystemError, "%.200s, missing bl_rna attribute from '%.200s' instance (may not be registered)", error_prefix, Py_TYPE(self)->tp_name);
+ PyErr_Format(PyExc_RuntimeError, "%.200s, missing bl_rna attribute from '%.200s' instance (may not be registered)", error_prefix, Py_TYPE(self)->tp_name);
return NULL;
}
if(!BPy_StructRNA_Check(py_srna)) {
- PyErr_Format(PyExc_SystemError, "%.200s, bl_rna attribute wrong type '%.200s' on '%.200s'' instance", error_prefix, Py_TYPE(py_srna)->tp_name, Py_TYPE(self)->tp_name);
+ PyErr_Format(PyExc_TypeError, "%.200s, bl_rna attribute wrong type '%.200s' on '%.200s'' instance", error_prefix, Py_TYPE(py_srna)->tp_name, Py_TYPE(self)->tp_name);
Py_DECREF(py_srna);
return NULL;
}
if(py_srna->ptr.type != &RNA_Struct) {
- PyErr_Format(PyExc_SystemError, "%.200s, bl_rna attribute not a RNA_Struct, on '%.200s'' instance", error_prefix, Py_TYPE(self)->tp_name);
+ PyErr_Format(PyExc_TypeError, "%.200s, bl_rna attribute not a RNA_Struct, on '%.200s'' instance", error_prefix, Py_TYPE(self)->tp_name);
Py_DECREF(py_srna);
return NULL;
}
@@ -5263,7 +5333,7 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun
func_arg_count++;
if (arg_count != func_arg_count) {
- PyErr_Format(PyExc_AttributeError, "expected %.200s, %.200s class \"%.200s\" function to have %d args, found %d", class_type, py_class_name, RNA_function_identifier(func), func_arg_count, arg_count);
+ PyErr_Format(PyExc_ValueError, "expected %.200s, %.200s class \"%.200s\" function to have %d args, found %d", class_type, py_class_name, RNA_function_identifier(func), func_arg_count, arg_count);
return -1;
}
}
@@ -5290,7 +5360,7 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun
if(strcmp(identifier, rna_attr) == 0) { \
item= PyObject_GetAttrString(py_class, py_attr); \
if(item && item != Py_None) { \
- if(pyrna_py_to_prop(dummyptr, prop, NULL, item, "validating class error:") != 0) { \
+ if(pyrna_py_to_prop(dummyptr, prop, NULL, item, "validating class:") != 0) { \
Py_DECREF(item); \
return -1; \
} \
@@ -5314,7 +5384,7 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun
else {
Py_DECREF(item); /* no need to keep a ref, the class owns it */
- if(pyrna_py_to_prop(dummyptr, prop, NULL, item, "validating class error:") != 0)
+ if(pyrna_py_to_prop(dummyptr, prop, NULL, item, "validating class:") != 0)
return -1;
}
}
@@ -5326,7 +5396,8 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun
static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func, ParameterList *parms)
{
PyObject *args;
- PyObject *ret= NULL, *py_srna= NULL, *py_class, *py_class_instance= NULL, *parmitem;
+ PyObject *ret= NULL, *py_srna= NULL, *py_class_instance= NULL, *parmitem;
+ PyTypeObject *py_class;
void **py_class_instance_store= NULL;
PropertyRNA *parm;
ParameterIterator iter;
@@ -5391,11 +5462,39 @@ static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func, Param
py_class_instance = NULL;
}
else {
+#if 1
+ /* Skip the code below and call init directly on the allocated 'py_srna'
+ * otherwise __init__() always needs to take a second self argument, see pyrna_struct_new().
+ * Although this is annoying to have to impliment a part of pythons typeobject.c:type_call().
+ */
+ if(py_class->tp_init) {
+ /* true in most cases even when the class its self doesnt define an __init__ function. */
+ args = PyTuple_New(0);
+ if (py_class->tp_init(py_srna, args, NULL) < 0) {
+ Py_DECREF(py_srna);
+ py_srna= NULL;
+ /* err set below */
+ }
+ Py_DECREF(args);
+ }
+
+ py_class_instance= py_srna;
+
+#else
+ /* 'almost' all the time calling the class isnt needed.
+ * We could just do...
+ py_class_instance = py_srna;
+ Py_INCREF(py_class_instance);
+ * This would work fine but means __init__ functions wouldnt run.
+ * none of blenders default scripts use __init__ but its nice to call it
+ * for general correctness. just to note why this is here when it could be safely removed.
+ */
args = PyTuple_New(1);
PyTuple_SET_ITEM(args, 0, py_srna);
py_class_instance= PyObject_Call(py_class, args, NULL);
Py_DECREF(args);
-
+
+#endif
if(py_class_instance == NULL) {
err= -1; /* so the error is not overridden below */
}
@@ -5406,8 +5505,8 @@ static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func, Param
}
}
- if (is_static || py_class_instance) { /* Initializing the class worked, now run its invoke function */
- PyObject *item= PyObject_GetAttrString(py_class, RNA_function_identifier(func));
+ if (err != -1 && (is_static || py_class_instance)) { /* Initializing the class worked, now run its invoke function */
+ PyObject *item= PyObject_GetAttrString((PyObject *)py_class, RNA_function_identifier(func));
// flag= RNA_function_flag(func);
if(item) {
@@ -5483,7 +5582,7 @@ static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func, Param
}
else {
if(ret_len==0 && ret != Py_None) {
- PyErr_Format(PyExc_RuntimeError, "expected class %.200s, function %.200s to return None, got a %.200s type instead", RNA_struct_identifier(ptr->type), RNA_function_identifier(func), Py_TYPE(ret)->tp_name);
+ PyErr_Format(PyExc_RuntimeError, "expected class %.200s, function %.200s to return None, not %.200s", RNA_struct_identifier(ptr->type), RNA_function_identifier(func), Py_TYPE(ret)->tp_name);
err= -1;
}
else if(ret_len==1) {
@@ -5492,7 +5591,7 @@ static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func, Param
else if (ret_len > 1) {
if(PyTuple_Check(ret)==0) {
- PyErr_Format(PyExc_RuntimeError, "expected class %.200s, function %.200s to return a tuple of size %d, got a %.200s type instead", RNA_struct_identifier(ptr->type), RNA_function_identifier(func), ret_len, Py_TYPE(ret)->tp_name);
+ PyErr_Format(PyExc_RuntimeError, "expected class %.200s, function %.200s to return a tuple of size %d, not %.200s", RNA_struct_identifier(ptr->type), RNA_function_identifier(func), ret_len, Py_TYPE(ret)->tp_name);
err= -1;
}
else if (PyTuple_GET_SIZE(ret) != ret_len) {
@@ -5796,7 +5895,7 @@ static PyObject *pyrna_unregister_class(PyObject *UNUSED(self), PyObject *py_cla
RNA_PROP_END;
if(prop_identifier) {
- PyErr_Format(PyExc_SystemError, "unregister_class(...): Cant unregister %s because %s.%s pointer property is using this", RNA_struct_identifier(srna), RNA_struct_identifier(srna_iter), prop_identifier);
+ PyErr_Format(PyExc_RuntimeError, "unregister_class(...): can't unregister %s because %s.%s pointer property is using this", RNA_struct_identifier(srna), RNA_struct_identifier(srna_iter), prop_identifier);
return NULL;
}
}
diff --git a/source/blender/python/intern/bpy_rna.h b/source/blender/python/intern/bpy_rna.h
index bbcc85581b2..c599ab5c95e 100644
--- a/source/blender/python/intern/bpy_rna.h
+++ b/source/blender/python/intern/bpy_rna.h
@@ -24,8 +24,6 @@
#ifndef BPY_RNA_H
#define BPY_RNA_H
-#include <Python.h>
-
#include "RNA_access.h"
#include "RNA_types.h"
#include "BKE_idprop.h"
diff --git a/source/blender/python/intern/bpy_rna_array.c b/source/blender/python/intern/bpy_rna_array.c
index 32efa387196..b4eef666279 100644
--- a/source/blender/python/intern/bpy_rna_array.c
+++ b/source/blender/python/intern/bpy_rna_array.c
@@ -21,6 +21,7 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
#include "bpy_rna.h"
#include "BKE_global.h"
diff --git a/source/blender/python/intern/bpy_rna_callback.c b/source/blender/python/intern/bpy_rna_callback.c
index 28b540ba418..0ff67430520 100644
--- a/source/blender/python/intern/bpy_rna_callback.c
+++ b/source/blender/python/intern/bpy_rna_callback.c
@@ -22,6 +22,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
#include "bpy_rna.h"
#include "bpy_rna_callback.h"
diff --git a/source/blender/python/intern/bpy_util.c b/source/blender/python/intern/bpy_util.c
index 8ea5e646482..63a397769c3 100644
--- a/source/blender/python/intern/bpy_util.c
+++ b/source/blender/python/intern/bpy_util.c
@@ -22,6 +22,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <Python.h>
+
#include "bpy_util.h"
#include "BLI_dynstr.h"
#include "MEM_guardedalloc.h"
@@ -149,7 +151,7 @@ short BPy_reports_to_error(ReportList *reports, const short clear)
}
if(report_str) {
- PyErr_SetString(PyExc_SystemError, report_str);
+ PyErr_SetString(PyExc_RuntimeError, report_str);
MEM_freeN(report_str);
}
diff --git a/source/blender/python/intern/bpy_util.h b/source/blender/python/intern/bpy_util.h
index e89c8212e1b..e1473a563a6 100644
--- a/source/blender/python/intern/bpy_util.h
+++ b/source/blender/python/intern/bpy_util.h
@@ -22,8 +22,6 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include <Python.h>
-
#ifndef BPY_UTIL_H
#define BPY_UTIL_H
diff --git a/source/blender/readblenfile/BLO_readblenfile.h b/source/blender/readblenfile/BLO_readblenfile.h
index 14143db4bc5..a928148f208 100644
--- a/source/blender/readblenfile/BLO_readblenfile.h
+++ b/source/blender/readblenfile/BLO_readblenfile.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -31,6 +31,10 @@
#ifndef BLO_READBLENFILE_H
#define BLO_READBLENFILE_H
+/** \file BLO_readblenfile.h
+ * \ingroup readblenfile
+ */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt
index 2680c9f183f..19cb69f3e9e 100644
--- a/source/blender/render/CMakeLists.txt
+++ b/source/blender/render/CMakeLists.txt
@@ -38,6 +38,7 @@ set(INC
../imbuf
../../kernel/gen_messaging
../../../intern/smoke/extern
+ ../../../intern/mikktspace
../../../intern/guardedalloc
../freestyle
)
diff --git a/source/blender/render/SConscript b/source/blender/render/SConscript
index 6d44c86fa86..d751c90ba27 100644
--- a/source/blender/render/SConscript
+++ b/source/blender/render/SConscript
@@ -6,7 +6,8 @@ raysources = env.Glob('intern/raytrace/*.cpp')
incs = 'intern/include #/intern/guardedalloc ../blenlib ../makesdna ../makesrna'
incs += ' extern/include ../blenkernel ../radiosity/extern/include ../imbuf'
-incs += ' ../include ../blenloader ../freestyle ../../../intern/smoke/extern'
+incs += ' ../include ../blenloader ../../../intern/smoke/extern ../../../intern/mikktspace'
+incs += ' ../freestyle'
cflags_raytrace = env['CCFLAGS']
cxxflags_raytrace = env['CXXFLAGS']
diff --git a/source/blender/render/extern/include/RE_shader_ext.h b/source/blender/render/extern/include/RE_shader_ext.h
index 2b451810e37..7825d2e4647 100644
--- a/source/blender/render/extern/include/RE_shader_ext.h
+++ b/source/blender/render/extern/include/RE_shader_ext.h
@@ -136,7 +136,7 @@ typedef struct ShadeInput
/* texture coordinates */
float lo[3], gl[3], ref[3], orn[3], winco[3], sticky[3], vcol[4];
float refcol[4], displace[3];
- float strandco, tang[3], nmaptang[3], stress, winspeed[4];
+ float strandco, tang[3], nmapnorm[3], nmaptang[4], stress, winspeed[4];
float duplilo[3], dupliuv[3];
ShadeInputUV uv[8]; /* 8 = MAX_MTFACE */
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 72bec0cb596..b4e6d4a04c2 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -494,11 +494,82 @@ static void calc_tangent_vector(ObjectRen *obr, VertexTangent **vtangents, MemAr
}
+typedef struct
+{
+ ObjectRen *obr;
+
+} SRenderMeshToTangent;
+
+// interface
+#include "mikktspace.h"
+
+static int GetNumFaces(const SMikkTSpaceContext * pContext)
+{
+ SRenderMeshToTangent * pMesh = (SRenderMeshToTangent *) pContext->m_pUserData;
+ return pMesh->obr->totvlak;
+}
+
+static int GetNumVertsOfFace(const SMikkTSpaceContext * pContext, const int face_num)
+{
+ SRenderMeshToTangent * pMesh = (SRenderMeshToTangent *) pContext->m_pUserData;
+ VlakRen *vlr= RE_findOrAddVlak(pMesh->obr, face_num);
+ return vlr->v4!=NULL ? 4 : 3;
+}
+
+static void GetPosition(const SMikkTSpaceContext * pContext, float fPos[], const int face_num, const int vert_index)
+{
+ //assert(vert_index>=0 && vert_index<4);
+ SRenderMeshToTangent * pMesh = (SRenderMeshToTangent *) pContext->m_pUserData;
+ VlakRen *vlr= RE_findOrAddVlak(pMesh->obr, face_num);
+ VertRen * pVerts[] = {vlr->v1, vlr->v2, vlr->v3, vlr->v4};
+ VECCOPY(fPos, pVerts[vert_index]->co);
+}
+
+static void GetTextureCoordinate(const SMikkTSpaceContext * pContext, float fUV[], const int face_num, const int vert_index)
+{
+ //assert(vert_index>=0 && vert_index<4);
+ SRenderMeshToTangent * pMesh = (SRenderMeshToTangent *) pContext->m_pUserData;
+ VlakRen *vlr= RE_findOrAddVlak(pMesh->obr, face_num);
+ MTFace *tface= RE_vlakren_get_tface(pMesh->obr, vlr, pMesh->obr->actmtface, NULL, 0);
+
+ if(tface!=NULL)
+ {
+ float * pTexCo = tface->uv[vert_index];
+ fUV[0]=pTexCo[0]; fUV[1]=pTexCo[1];
+ }
+ else
+ {
+ VertRen * pVerts[] = {vlr->v1, vlr->v2, vlr->v3, vlr->v4};
+ map_to_sphere(&fUV[0], &fUV[1], pVerts[vert_index]->orco[0], pVerts[vert_index]->orco[1], pVerts[vert_index]->orco[2]);
+ }
+}
+
+static void GetNormal(const SMikkTSpaceContext * pContext, float fNorm[], const int face_num, const int vert_index)
+{
+ //assert(vert_index>=0 && vert_index<4);
+ SRenderMeshToTangent * pMesh = (SRenderMeshToTangent *) pContext->m_pUserData;
+ VlakRen *vlr= RE_findOrAddVlak(pMesh->obr, face_num);
+ VertRen * pVerts[] = {vlr->v1, vlr->v2, vlr->v3, vlr->v4};
+ VECCOPY(fNorm, pVerts[vert_index]->n);
+}
+static void SetTSpace(const SMikkTSpaceContext * pContext, const float fvTangent[], const float fSign, const int face_num, const int iVert)
+{
+ //assert(vert_index>=0 && vert_index<4);
+ SRenderMeshToTangent * pMesh = (SRenderMeshToTangent *) pContext->m_pUserData;
+ VlakRen *vlr= RE_findOrAddVlak(pMesh->obr, face_num);
+ float * ftang= RE_vlakren_get_nmap_tangent(pMesh->obr, vlr, 1);
+ if(ftang!=NULL)
+ {
+ VECCOPY(&ftang[iVert*4+0], fvTangent);
+ ftang[iVert*4+3]=fSign;
+ }
+}
+
static void calc_vertexnormals(Render *re, ObjectRen *obr, int do_tangent, int do_nmap_tangent)
{
MemArena *arena= NULL;
VertexTangent **vtangents= NULL;
- int a;
+ int a, iCalcNewMethod;
if(do_nmap_tangent) {
arena= BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "nmap tangent arena");
@@ -594,22 +665,24 @@ static void calc_vertexnormals(Render *re, ObjectRen *obr, int do_tangent, int d
MTFace *tface= RE_vlakren_get_tface(obr, vlr, obr->actmtface, NULL, 0);
if(tface) {
+ int k=0;
float *vtang, *ftang= RE_vlakren_get_nmap_tangent(obr, vlr, 1);
vtang= find_vertex_tangent(vtangents[v1->index], tface->uv[0]);
VECCOPY(ftang, vtang);
normalize_v3(ftang);
vtang= find_vertex_tangent(vtangents[v2->index], tface->uv[1]);
- VECCOPY(ftang+3, vtang);
- normalize_v3(ftang+3);
+ VECCOPY(ftang+4, vtang);
+ normalize_v3(ftang+4);
vtang= find_vertex_tangent(vtangents[v3->index], tface->uv[2]);
- VECCOPY(ftang+6, vtang);
- normalize_v3(ftang+6);
+ VECCOPY(ftang+8, vtang);
+ normalize_v3(ftang+8);
if(v4) {
vtang= find_vertex_tangent(vtangents[v4->index], tface->uv[3]);
- VECCOPY(ftang+9, vtang);
- normalize_v3(ftang+9);
+ VECCOPY(ftang+12, vtang);
+ normalize_v3(ftang+12);
}
+ for(k=0; k<4; k++) ftang[4*k+3]=1;
}
}
}
@@ -631,6 +704,31 @@ static void calc_vertexnormals(Render *re, ObjectRen *obr, int do_tangent, int d
}
}
+ iCalcNewMethod = 1;
+ if(iCalcNewMethod!=0 && do_nmap_tangent!=0)
+ {
+ SRenderMeshToTangent mesh2tangent;
+ SMikkTSpaceContext sContext;
+ SMikkTSpaceInterface sInterface;
+ memset(&mesh2tangent, 0, sizeof(SRenderMeshToTangent));
+ memset(&sContext, 0, sizeof(SMikkTSpaceContext));
+ memset(&sInterface, 0, sizeof(SMikkTSpaceInterface));
+
+ mesh2tangent.obr = obr;
+
+ sContext.m_pUserData = &mesh2tangent;
+ sContext.m_pInterface = &sInterface;
+ sInterface.m_getNumFaces = GetNumFaces;
+ sInterface.m_getNumVerticesOfFace = GetNumVertsOfFace;
+ sInterface.m_getPosition = GetPosition;
+ sInterface.m_getTexCoord = GetTextureCoordinate;
+ sInterface.m_getNormal = GetNormal;
+ sInterface.m_setTSpaceBasic = SetTSpace;
+
+ // 0 if failed
+ iCalcNewMethod = genTangSpaceDefault(&sContext);
+ }
+
if(arena)
BLI_memarena_free(arena);
diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c
index 3a8270a757e..ca4c6935a4c 100644
--- a/source/blender/render/intern/source/imagetexture.c
+++ b/source/blender/render/intern/source/imagetexture.c
@@ -53,13 +53,14 @@
#include "BLI_threads.h"
#include "BLI_utildefines.h"
-
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_image.h"
#include "BKE_texture.h"
#include "BKE_library.h"
+#include "RE_render_ext.h"
+
#include "renderpipeline.h"
#include "render_types.h"
#include "texture.h"
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 363b7ab4765..b9b2606a315 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -171,6 +171,7 @@ static void stats_background(void *UNUSED(arg), RenderStats *rs)
else
fprintf(stdout, "Sce: %s Ve:%d Fa:%d La:%d", rs->scenename, rs->totvert, rs->totface, rs->totlamp);
}
+ fputc('\n', stdout);
fflush(stdout);
}
diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c
index 15279fea01d..1325fd89ec6 100644
--- a/source/blender/render/intern/source/pointdensity.c
+++ b/source/blender/render/intern/source/pointdensity.c
@@ -50,6 +50,7 @@
#include "render_types.h"
#include "renderdatabase.h"
#include "texture.h"
+#include "pointdensity.h"
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* defined in pipeline.c, is hardcopy of active dynamic allocated Render */
@@ -325,7 +326,7 @@ typedef struct PointDensityRangeData
int offset;
} PointDensityRangeData;
-void accum_density(void *userdata, int index, float squared_dist)
+static void accum_density(void *userdata, int index, float squared_dist)
{
PointDensityRangeData *pdr = (PointDensityRangeData *)userdata;
const float dist = (pdr->squared_radius - squared_dist) / pdr->squared_radius * 0.5f;
diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c
index 62e684e79e2..0da1070679e 100644
--- a/source/blender/render/intern/source/render_texture.c
+++ b/source/blender/render/intern/source/render_texture.c
@@ -2114,6 +2114,7 @@ void do_material_tex(ShadeInput *shi)
float texvec[3], dxt[3], dyt[3], tempvec[3], norvec[3], warpvec[3]={0.0f, 0.0f, 0.0f}, Tnor=1.0;
int tex_nr, rgbnor= 0, warpdone=0;
int use_compat_bump, use_ntap_bump;
+ int iFirstTimeNMap=1;
compatible_bump_init(&compat_bump);
ntap_bump_init(&ntap_bump);
@@ -2427,14 +2428,17 @@ void do_material_tex(ShadeInput *shi)
if(mtex->normapspace == MTEX_NSPACE_TANGENT) {
/* qdn: tangent space */
float B[3], tv[3];
- cross_v3_v3v3(B, shi->vn, shi->nmaptang); /* bitangent */
+ const float * no = iFirstTimeNMap!=0 ? shi->nmapnorm : shi->vn;
+ iFirstTimeNMap=0;
+ cross_v3_v3v3(B, no, shi->nmaptang); /* bitangent */
+ mul_v3_fl(B, shi->nmaptang[3]);
/* transform norvec from tangent space to object surface in camera space */
- tv[0] = texres.nor[0]*shi->nmaptang[0] + texres.nor[1]*B[0] + texres.nor[2]*shi->vn[0];
- tv[1] = texres.nor[0]*shi->nmaptang[1] + texres.nor[1]*B[1] + texres.nor[2]*shi->vn[1];
- tv[2] = texres.nor[0]*shi->nmaptang[2] + texres.nor[1]*B[2] + texres.nor[2]*shi->vn[2];
- shi->vn[0]= facm*shi->vn[0] + fact*tv[0];
- shi->vn[1]= facm*shi->vn[1] + fact*tv[1];
- shi->vn[2]= facm*shi->vn[2] + fact*tv[2];
+ tv[0] = texres.nor[0]*shi->nmaptang[0] + texres.nor[1]*B[0] + texres.nor[2]*no[0];
+ tv[1] = texres.nor[0]*shi->nmaptang[1] + texres.nor[1]*B[1] + texres.nor[2]*no[1];
+ tv[2] = texres.nor[0]*shi->nmaptang[2] + texres.nor[1]*B[2] + texres.nor[2]*no[2];
+ shi->vn[0]= facm*no[0] + fact*tv[0];
+ shi->vn[1]= facm*no[1] + fact*tv[1];
+ shi->vn[2]= facm*no[2] + fact*tv[2];
}
else {
float nor[3];
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index fac2e39c89a..5d2002e1213 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -2160,12 +2160,14 @@ static void bake_shade(void *handle, Object *ob, ShadeInput *shi, int quad, int
if(tvn && ttang) {
VECCOPY(mat[0], ttang);
cross_v3_v3v3(mat[1], tvn, ttang);
+ mul_v3_fl(mat[1], ttang[3]);
VECCOPY(mat[2], tvn);
}
else {
VECCOPY(mat[0], shi->nmaptang);
- cross_v3_v3v3(mat[1], shi->vn, shi->nmaptang);
- VECCOPY(mat[2], shi->vn);
+ cross_v3_v3v3(mat[1], shi->nmapnorm, shi->nmaptang);
+ mul_v3_fl(mat[1], shi->nmaptang[3]);
+ VECCOPY(mat[2], shi->nmapnorm);
}
invert_m3_m3(imat, mat);
@@ -2347,7 +2349,7 @@ static void do_bake_shade(void *handle, int x, int y, float u, float v)
VlakRen *vlr= bs->vlr;
ObjectInstanceRen *obi= bs->obi;
Object *ob= obi->obr->ob;
- float l, *v1, *v2, *v3, tvn[3], ttang[3];
+ float l, *v1, *v2, *v3, tvn[3], ttang[4];
int quad;
ShadeSample *ssamp= &bs->ssamp;
ShadeInput *shi= ssamp->shi;
@@ -2386,8 +2388,8 @@ static void do_bake_shade(void *handle, int x, int y, float u, float v)
if(bs->type==RE_BAKE_NORMALS && R.r.bake_normal_space==R_BAKE_SPACE_TANGENT) {
shade_input_set_shade_texco(shi);
- VECCOPY(tvn, shi->vn);
- VECCOPY(ttang, shi->nmaptang);
+ VECCOPY(tvn, shi->nmapnorm);
+ QUATCOPY(ttang, shi->nmaptang);
}
/* if we are doing selected to active baking, find point on other face */
diff --git a/source/blender/render/intern/source/renderdatabase.c b/source/blender/render/intern/source/renderdatabase.c
index c1a3b989c1f..f5e5c679b9d 100644
--- a/source/blender/render/intern/source/renderdatabase.c
+++ b/source/blender/render/intern/source/renderdatabase.c
@@ -109,7 +109,7 @@
#define RE_RADFACE_ELEMS 1
#define RE_SIMPLIFY_ELEMS 2
#define RE_FACE_ELEMS 1
-#define RE_NMAP_TANGENT_ELEMS 12
+#define RE_NMAP_TANGENT_ELEMS 16
float *RE_vertren_get_sticky(ObjectRen *obr, VertRen *ver, int verify)
{
@@ -1000,6 +1000,7 @@ HaloRen *RE_inithalo(Render *re, ObjectRen *obr, Material *ma, float *vec, f
if(ma->mtex[0]) {
if( (ma->mode & MA_HALOTEX) ) har->tex= 1;
+ else if(har->mat->septex & (1<<0)); /* only 1 level textures */
else {
mtex= ma->mtex[0];
diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c
index 98a90427aac..3ed2a347e56 100644
--- a/source/blender/render/intern/source/shadeinput.c
+++ b/source/blender/render/intern/source/shadeinput.c
@@ -286,9 +286,9 @@ void shade_input_set_triangle_i(ShadeInput *shi, ObjectInstanceRen *obi, VlakRen
VECCOPY(shi->n3, shi->v3->n);
if(obi->flag & R_TRANSFORMED) {
- mul_m3_v3(obi->nmat, shi->n1);
- mul_m3_v3(obi->nmat, shi->n2);
- mul_m3_v3(obi->nmat, shi->n3);
+ mul_m3_v3(obi->nmat, shi->n1); normalize_v3(shi->n1);
+ mul_m3_v3(obi->nmat, shi->n2); normalize_v3(shi->n2);
+ mul_m3_v3(obi->nmat, shi->n3); normalize_v3(shi->n3);
}
}
}
@@ -819,11 +819,17 @@ void shade_input_set_normals(ShadeInput *shi)
shi->vn[0]= l*n3[0]-u*n1[0]-v*n2[0];
shi->vn[1]= l*n3[1]-u*n1[1]-v*n2[1];
shi->vn[2]= l*n3[2]-u*n1[2]-v*n2[2];
+
+ // use unnormalized normal (closer to games)
+ VECCOPY(shi->nmapnorm, shi->vn);
normalize_v3(shi->vn);
}
else
+ {
VECCOPY(shi->vn, shi->facenor);
+ VECCOPY(shi->nmapnorm, shi->vn);
+ }
/* used in nodes */
VECCOPY(shi->vno, shi->vn);
@@ -834,6 +840,36 @@ void shade_input_set_normals(ShadeInput *shi)
shade_input_flip_normals(shi);
}
+/* XXX shi->flippednor messes up otherwise */
+static void shade_input_set_vertex_normals(ShadeInput *shi)
+{
+ float u= shi->u, v= shi->v;
+ float l= 1.0f+u+v;
+
+ /* calculate vertexnormals */
+ if(shi->vlr->flag & R_SMOOTH) {
+ float *n1= shi->n1, *n2= shi->n2, *n3= shi->n3;
+
+ shi->vn[0]= l*n3[0]-u*n1[0]-v*n2[0];
+ shi->vn[1]= l*n3[1]-u*n1[1]-v*n2[1];
+ shi->vn[2]= l*n3[2]-u*n1[2]-v*n2[2];
+
+ // use unnormalized normal (closer to games)
+ VECCOPY(shi->nmapnorm, shi->vn);
+
+ normalize_v3(shi->vn);
+ }
+ else
+ {
+ VECCOPY(shi->vn, shi->facenor);
+ VECCOPY(shi->nmapnorm, shi->vn);
+ }
+
+ /* used in nodes */
+ VECCOPY(shi->vno, shi->vn);
+}
+
+
/* use by raytrace, sss, bake to flip into the right direction */
void shade_input_flip_normals(ShadeInput *shi)
{
@@ -849,6 +885,10 @@ void shade_input_flip_normals(ShadeInput *shi)
shi->vno[1]= -shi->vno[1];
shi->vno[2]= -shi->vno[2];
+ shi->nmapnorm[0] = -shi->nmapnorm[0];
+ shi->nmapnorm[1] = -shi->nmapnorm[1];
+ shi->nmapnorm[2] = -shi->nmapnorm[2];
+
shi->flippednor= !shi->flippednor;
}
@@ -924,21 +964,32 @@ void shade_input_set_shade_texco(ShadeInput *shi)
if(tangent) {
int j1= shi->i1, j2= shi->i2, j3= shi->i3;
+ float c0[3], c1[3], c2[3];
vlr_set_uv_indices(shi->vlr, &j1, &j2, &j3);
- s1= &tangent[j1*3];
- s2= &tangent[j2*3];
- s3= &tangent[j3*3];
-
- shi->nmaptang[0]= (tl*s3[0] - tu*s1[0] - tv*s2[0]);
- shi->nmaptang[1]= (tl*s3[1] - tu*s1[1] - tv*s2[1]);
- shi->nmaptang[2]= (tl*s3[2] - tu*s1[2] - tv*s2[2]);
+ VECCOPY(c0, &tangent[j1*4]);
+ VECCOPY(c1, &tangent[j2*4]);
+ VECCOPY(c2, &tangent[j3*4]);
+ // keeping tangents normalized at vertex level
+ // corresponds better to how it's done in game engines
if(obi->flag & R_TRANSFORMED)
- mul_m3_v3(obi->nmat, shi->nmaptang);
-
- normalize_v3(shi->nmaptang);
+ {
+ mul_mat3_m4_v3(obi->mat, c0); normalize_v3(c0);
+ mul_mat3_m4_v3(obi->mat, c1); normalize_v3(c1);
+ mul_mat3_m4_v3(obi->mat, c2); normalize_v3(c2);
+ }
+
+ // we don't normalize the interpolated TBN tangent
+ // corresponds better to how it's done in game engines
+ shi->nmaptang[0]= (tl*c2[0] - tu*c0[0] - tv*c1[0]);
+ shi->nmaptang[1]= (tl*c2[1] - tu*c0[1] - tv*c1[1]);
+ shi->nmaptang[2]= (tl*c2[2] - tu*c0[2] - tv*c1[2]);
+
+ // the sign is the same for all 3 vertices of any
+ // non degenerate triangle.
+ shi->nmaptang[3]= tangent[j1*4+3];
}
}
}
@@ -1361,7 +1412,10 @@ void shade_samples_fill_with_ps(ShadeSample *ssamp, PixStr *ps, int x, int y)
shi->samplenr= R.shadowsamplenr[shi->thread]++; /* this counter is not being reset per pixel */
shade_input_set_viewco(shi, x, y, xs, ys, (float)ps->z);
shade_input_set_uv(shi);
- shade_input_set_normals(shi);
+ if(shi_cp==0)
+ shade_input_set_normals(shi);
+ else /* XXX shi->flippednor messes up otherwise */
+ shade_input_set_vertex_normals(shi);
shi_cp= 1;
shi++;
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index c9d74cbb39d..c21c714f125 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,17 @@
#ifndef WM_API_H
#define WM_API_H
+/** \file WM_api.h
+ * \ingroup wm
+ *
+ * \page wmpage windowmanager
+ * \section wmabout About windowmanager
+ * \ref wm handles events received from \ref GHOST and manages
+ * the screens, areas and input for Blender
+ * \section wmnote NOTE
+ * \todo document
+ */
+
/* dna-savable wmStructs here */
#include "DNA_windowmanager_types.h"
@@ -59,7 +70,7 @@ void WM_setprefsize (int stax, int stay, int sizx, int sizy);
void WM_setinitialstate_fullscreen(void);
void WM_setinitialstate_normal(void);
-void WM_init (struct bContext *C, int argc, char **argv);
+void WM_init (struct bContext *C, int argc, const char **argv);
void WM_exit (struct bContext *C);
void WM_main (struct bContext *C);
@@ -351,6 +362,9 @@ void WM_progress_clear(struct wmWindow *win);
void WM_toggle_console(struct bContext *C, short show);
#endif
+/* debugging only, convenience function to write on crash */
+int write_crash_blend(void);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/windowmanager/intern/wm_cursors.c b/source/blender/windowmanager/intern/wm_cursors.c
index f0a416e1c6e..d9d9de3f9e9 100644
--- a/source/blender/windowmanager/intern/wm_cursors.c
+++ b/source/blender/windowmanager/intern/wm_cursors.c
@@ -70,7 +70,7 @@ static GHOST_TStandardCursor convert_cursor(int curs)
}
}
-void window_set_custom_cursor(wmWindow *win, unsigned char mask[16][2],
+static void window_set_custom_cursor(wmWindow *win, unsigned char mask[16][2],
unsigned char bitmap[16][2], int hotx, int hoty)
{
GHOST_SetCustomCursorShape(win->ghostwin, bitmap, mask, hotx, hoty);
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 6bdb45c3220..64779a162eb 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -560,7 +560,7 @@ static void wm_method_draw_triple(bContext *C, wmWindow *win)
bScreen *screen= win->screen;
ScrArea *sa;
ARegion *ar;
- int copytex= 0;
+ int copytex= 0, paintcursor= 1;
if(win->drawdata) {
glClearColor(0, 0, 0, 0);
@@ -616,6 +616,8 @@ static void wm_method_draw_triple(bContext *C, wmWindow *win)
CTX_wm_menu_set(C, ar);
ED_region_do_draw(C, ar);
CTX_wm_menu_set(C, NULL);
+ /* when a menu is being drawn, don't do the paint cursors */
+ paintcursor= 0;
}
}
@@ -623,7 +625,7 @@ static void wm_method_draw_triple(bContext *C, wmWindow *win)
if(win->gesture.first)
wm_gesture_draw(win);
- if(wm->paintcursors.first) {
+ if(paintcursor && wm->paintcursors.first) {
for(sa= screen->areabase.first; sa; sa= sa->next) {
for(ar=sa->regionbase.first; ar; ar= ar->next) {
if(ar->swinid == screen->subwinactive) {
@@ -809,7 +811,7 @@ void wm_draw_region_clear(wmWindow *win, ARegion *ar)
win->screen->do_draw= 1;
}
-void wm_draw_region_modified(wmWindow *win, ARegion *ar)
+static void wm_draw_region_modified(wmWindow *win, ARegion *ar)
{
int drawmethod= wm_automatic_draw_method(win);
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 3de7b569af4..39a6e5b27b5 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2099,21 +2099,29 @@ void WM_event_add_mousemove(bContext *C)
/* for modal callbacks, check configuration for how to interpret exit with tweaks */
int WM_modal_tweak_exit(wmEvent *evt, int tweak_event)
{
- /* user preset or keymap? dunno... */
- // XXX WTH is this?
- int tweak_modal= (U.flag & USER_RELEASECONFIRM)==0;
-
- switch(tweak_event) {
- case EVT_TWEAK_L:
- case EVT_TWEAK_M:
- case EVT_TWEAK_R:
- if(evt->val==tweak_modal)
- return 1;
- default:
- /* this case is when modal callcback didnt get started with a tweak */
- if(evt->val)
- return 1;
+ /* if the release-confirm userpref setting is enabled,
+ * tweak events can be cancelled when mouse is released
+ */
+ if (U.flag & USER_RELEASECONFIRM) {
+ /* option on, so can exit with km-release */
+ if (evt->val == KM_RELEASE) {
+ switch (tweak_event) {
+ case EVT_TWEAK_L:
+ case EVT_TWEAK_M:
+ case EVT_TWEAK_R:
+ return 1;
+ }
+ }
}
+ else {
+ /* this is fine as long as not doing km-release, otherwise
+ * some items (i.e. markers) being tweaked may end up getting
+ * dropped all over
+ */
+ if (evt->val != KM_RELEASE)
+ return 1;
+ }
+
return 0;
}
@@ -2188,7 +2196,12 @@ static int convert_key(GHOST_TKey key)
case GHOST_kKeyNumpadSlash: return PADSLASHKEY;
case GHOST_kKeyGrLess: return GRLESSKEY;
-
+
+ case GHOST_kKeyMediaPlay: return MEDIAPLAY;
+ case GHOST_kKeyMediaStop: return MEDIASTOP;
+ case GHOST_kKeyMediaFirst: return MEDIAFIRST;
+ case GHOST_kKeyMediaLast: return MEDIALAST;
+
default:
return UNKNOWNKEY; /* GHOST_kKeyUnknown */
}
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 31873160944..b54e70a7640 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -105,6 +105,7 @@
#include "WM_api.h"
#include "WM_types.h"
#include "wm.h"
+#include "wm_files.h"
#include "wm_window.h"
#include "wm_event_system.h"
@@ -446,7 +447,7 @@ int WM_read_homefile_exec(bContext *C, wmOperator *op)
return WM_read_homefile(C, op->reports, from_memory) ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
}
-void read_history(void)
+void WM_read_history(void)
{
char name[FILE_MAX];
LinkNode *l, *lines;
@@ -500,9 +501,7 @@ static void write_history(void)
if (fp) {
/* add current file to the beginning of list */
recent = (RecentFile*)MEM_mallocN(sizeof(RecentFile),"RecentFile");
- recent->filepath = (char*)MEM_mallocN(sizeof(char)*(strlen(G.main->name)+1), "name of file");
- recent->filepath[0] = '\0';
- BLI_strncpy(recent->filepath, G.main->name, sizeof(recent->filepath));
+ recent->filepath = BLI_strdup(G.main->name);
BLI_addhead(&(G.recent_files), recent);
/* write current file to recent-files.txt */
fprintf(fp, "%s\n", recent->filepath);
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index 0d1dfd5fbba..bce61dae013 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -112,7 +112,7 @@ static void wm_free_reports(bContext *C)
/* only called once, for startup */
-void WM_init(bContext *C, int argc, char **argv)
+void WM_init(bContext *C, int argc, const char **argv)
{
if (!G.background) {
@@ -175,7 +175,7 @@ void WM_init(bContext *C, int argc, char **argv)
G.ndofdevice = -1; /* XXX bad initializer, needs set otherwise buttons show! */
- read_history();
+ WM_read_history();
/* allow a path of "", this is what happens when making a new file */
/*
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 534aab94ada..d61e42c2353 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -722,7 +722,7 @@ static uiBlock *wm_enum_search_menu(bContext *C, ARegion *ar, void *arg_op)
/* fake button, it holds space for search items */
uiDefBut(block, LABEL, 0, "", 10, 10 - uiSearchBoxhHeight(), 180, uiSearchBoxhHeight(), NULL, 0, 0, 0, 0, NULL);
- uiPopupBoundsBlock(block, 6.0f, 0, -20); /* move it downwards, mouse over button */
+ uiPopupBoundsBlock(block, 6, 0, -20); /* move it downwards, mouse over button */
uiEndBlock(C, block);
event= *(win->eventstate); /* XXX huh huh? make api call */
diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h
index 5d7eb625f78..c3573f86c6d 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -207,6 +207,12 @@
#define OSKEY 172
#define GRLESSKEY 173
+// XXX: are these codes ok?
+#define MEDIAPLAY 174
+#define MEDIASTOP 175
+#define MEDIAFIRST 176
+#define MEDIALAST 177
+
/* for event checks */
/* only used for KM_TEXTINPUT, so assume that we want all user-inputtable ascii codes included */
#define ISTEXTINPUT(event) (event >=' ' && event <=255)
diff --git a/source/blender/windowmanager/wm_files.h b/source/blender/windowmanager/wm_files.h
index 15a38251795..6a07218bebd 100644
--- a/source/blender/windowmanager/wm_files.h
+++ b/source/blender/windowmanager/wm_files.h
@@ -28,9 +28,7 @@
#ifndef WM_FILES_H
#define WM_FILES_H
-extern void read_history(void);
-extern void delete_autosave(void);
-
+void WM_read_history(void);
#endif /* WM_FILES_H */