Ejemplo n.º 1
0
	void Render(double time)
	{
		gl.Clear().ColorBuffer().DepthBuffer();

		CamMatrixf camera = CamMatrixf::Orbiting(
			Vec3f(),
			4.5f + float(SineWave(time / 25.0)),
			FullCircles(time / 30.0),
			Degrees(SineWave(time / 19.0) * 20)
		);
		light_prog.camera_matrix.Set(camera);
		flare_prog.camera_matrix.Set(camera);
		shape_prog.camera_matrix.Set(camera);
		shape_prog.camera_position.Set(camera.Position());

		shape_prog.model_matrix.Set(
			ModelMatrixf::RotationX(FullCircles(time / 30.0))
		);

		shape_prog.Use();
		shape.Draw();
		NoProgram().Use();

		lights.Bind();

		light_prog.Use();

		for(GLuint l=0; l!=n_flares; ++l)
		{
			queries[l].Begin(Query::Target::SamplesPassed);
			gl.DrawArrays(PrimitiveType::Points, l, 1);
			queries[l].End(Query::Target::SamplesPassed);
		}

		gl.Enable(Capability::Blend);
		gl.Disable(Capability::DepthTest);
		flare_prog.Use();
		for(GLuint l=0; l!=n_flares; ++l)
		{
			GLint samples = 0;
			queries[l].WaitForResult(samples);
			if(samples != 0)
			{
				flare_prog.samples = samples;
				gl.DrawArrays(PrimitiveType::Points, l, 1);
			}
		}
		gl.Enable(Capability::DepthTest);
		gl.Disable(Capability::Blend);
	}
Ejemplo n.º 2
0
	SortProc(const Particles& particles)
	{
		gl.Bind(vao);

		gl.Bind(BufferTarget::Array, particles.indices_d);
		(prog|"Index").Setup<GLint>().Enable();

		gl.Bind(NoVertexArray());

		gl.Bind(BufferIndexedTarget::TransformFeedback, 0, particles.indices_f);

		gl.Bind(BufferIndexedTarget::Uniform, 0, particles.indices_d);
		gl.Bind(BufferIndexedTarget::Uniform, 1, particles.distances);

		gl.Use(prog);
		UniformBlock(prog,"IndexBlock").Binding(0);
		UniformBlock(prog, "DistBlock").Binding(1);
		gl.Use(NoProgram());
	}
Ejemplo n.º 3
0
	TorusExample(void)
	 : make_torus(1.0, 0.5, 18, 36)
	 , torus_instr(make_torus.Instructions())
	 , torus_indices(make_torus.Indices())
	 , transf_prog(make_transf_prog())
	 , face_prog(make_face_prog())
	 , frame_prog(make_frame_prog())
	 , projection_matrix(transf_prog, "ProjectionMatrix")
	 , camera_matrix(transf_prog, "CameraMatrix")
	 , model_matrix(transf_prog, "ModelMatrix")
	 , transf_time(transf_prog, "Time")
	{
		transf_prog.Use();
		torus.Bind();
		verts.Bind(Buffer::Target::Array);
		{
			std::vector<GLfloat> data;
			GLuint n_per_vertex = make_torus.Positions(data);
			Buffer::Data(Buffer::Target::Array, data);

			VertexArrayAttrib attr(transf_prog, "Position");
			attr.Setup<GLfloat>(n_per_vertex);
			attr.Enable();
		}

		normals.Bind(Buffer::Target::Array);
		{
			std::vector<GLfloat> data;
			GLuint n_per_vertex = make_torus.Normals(data);
			Buffer::Data(Buffer::Target::Array, data);

			VertexArrayAttrib attr(transf_prog, "Normal");
			attr.Setup<GLfloat>(n_per_vertex);
			attr.Enable();
		}

		texcoords.Bind(Buffer::Target::Array);
		{
			std::vector<GLfloat> data;
			GLuint n_per_vertex = make_torus.TexCoordinates(data);
			Buffer::Data(Buffer::Target::Array, data);

			VertexArrayAttrib attr(transf_prog, "TexCoord");
			attr.Setup<GLfloat>(n_per_vertex);
			attr.Enable();
		}

		face_pp.Bind();
		face_prog.Use();
		face_pp.UseStages(transf_prog).Vertex().Geometry();
		face_pp.UseStages(face_prog).Fragment();


		frame_pp.Bind();
		frame_prog.Use();
		frame_pp.UseStages(transf_prog).Vertex().Geometry();
		frame_pp.UseStages(frame_prog).Fragment();

		gl.Bind(NoProgramPipeline());
		gl.Use(NoProgram());

		gl.ClearColor(0.7f, 0.6f, 0.5f, 0.0f);
		gl.ClearDepth(1.0f);
		gl.Enable(Capability::DepthTest);
		gl.DepthFunc(CompareFn::Less);
		gl.FrontFace(make_torus.FaceWinding());
	}
Ejemplo n.º 4
0
	GlassAndMetalExample(void)
	 : transf_prog()
	 , metal_prog()
	 , plane(transf_prog, shapes::Plane(Vec3f(9, 0, 0), Vec3f(0, 0,-9)))
	 , torus(transf_prog, shapes::WickerTorus())
	 , shadow_tex_side(1024)
	{
		NoProgram().Use();

		shadow_pp.Bind();
		shadow_pp.UseStages(transf_prog).Vertex();
		shadow_pp.UseStages(shadow_prog).Fragment();

		light_pp.Bind();
		light_pp.UseStages(transf_prog).Vertex();
		light_pp.UseStages(light_prog).Fragment();

		glass_pp.Bind();
		glass_pp.UseStages(transf_prog).Vertex();
		glass_pp.UseStages(glass_prog).Fragment();

		metal_pp.Bind();
		metal_pp.UseStages(transf_prog).Vertex();
		metal_pp.UseStages(metal_prog).Fragment();

		Texture::Active(0);
		metal_prog.metal_tex.Set(0);
		gl.Bound(Texture::Target::_2D, metal_texture)
			.MinFilter(TextureMinFilter::LinearMipmapLinear)
			.MagFilter(TextureMagFilter::Linear)
			.WrapS(TextureWrap::Repeat)
			.WrapT(TextureWrap::Repeat)
			.Image2D(
				images::BrushedMetalUByte(
					512, 512,
					5120,
					-3, +3,
					32, 128
				)
			).GenerateMipmap();

		Texture::Active(1);
		metal_prog.frame_shadow_tex.Set(1);
		glass_prog.frame_shadow_tex.Set(1);

		gl.Bound(Texture::Target::_2D, frame_shadow_tex)
			.MinFilter(TextureMinFilter::Linear)
			.MagFilter(TextureMagFilter::Linear)
			.WrapS(TextureWrap::ClampToEdge)
			.WrapT(TextureWrap::ClampToEdge)
			.CompareMode(TextureCompareMode::CompareRefToTexture)
			.Image2D(
				0,
				PixelDataInternalFormat::DepthComponent32,
				shadow_tex_side, shadow_tex_side,
				0,
				PixelDataFormat::DepthComponent,
				PixelDataType::Float,
				nullptr
			);

		gl.Bound(Framebuffer::Target::Draw, frame_shadow_fbo)
			.AttachTexture(
				FramebufferAttachment::Depth,
				frame_shadow_tex,
				0
			);

		Texture::Active(2);
		metal_prog.glass_shadow_tex.Set(2);

		gl.Bound(Texture::Target::_2D, glass_shadow_tex)
			.MinFilter(TextureMinFilter::Linear)
			.MagFilter(TextureMagFilter::Linear)
			.WrapS(TextureWrap::ClampToEdge)
			.WrapT(TextureWrap::ClampToEdge)
			.Image2D(
				0,
				PixelDataInternalFormat::RGBA,
				shadow_tex_side, shadow_tex_side,
				0,
				PixelDataFormat::RGBA,
				PixelDataType::UnsignedByte,
				nullptr
			);

		gl.Bound(Framebuffer::Target::Draw, glass_shadow_fbo)
			.AttachTexture(
				FramebufferAttachment::Color,
				glass_shadow_tex,
				0
			);

		gl.ClearDepth(1.0f);
		gl.Enable(Capability::DepthTest);
		gl.Enable(Capability::CullFace);

		gl.BlendFunc(BlendFn::SrcAlpha, BlendFn::OneMinusSrcAlpha);

		gl.PolygonOffset(1.0, 1.0);

	}
Ejemplo n.º 5
0
	SketchExample(void)
	 : transf_prog()
	 , sketch_prog()
	 , plane(
		transf_prog,
		shapes::Plane(
			Vec3f(0, 0, 0),
			Vec3f(9, 0, 0),
			Vec3f(0, 0,-9),
			9, 9
		)
	), torus(transf_prog, shapes::WickerTorus())
	 , sketch_tex_layers(8)
	 , shadow_tex_side(1024)
	{

		NoProgram().Use();

		shadow_pp.Bind();
		shadow_pp.UseStages(transf_prog).Vertex();
		shadow_pp.UseStages(shadow_prog).Fragment();

		sketch_pp.Bind();
		sketch_pp.UseStages(transf_prog).Vertex();
		sketch_pp.UseStages(sketch_prog).Fragment();

		line_pp.Bind();
		line_pp.UseStages(transf_prog).Vertex();
		line_pp.UseStages(line_prog).Geometry().Fragment();

		Texture::Active(0);
		sketch_prog.sketch_tex.Set(0);
		{
			auto bound_tex = gl.Bound(Texture::Target::_3D, sketch_texture);

			for(GLuint i=0; i<sketch_tex_layers; ++i)
			{
				auto image = images::BrushedMetalUByte(
					512, 512,
					64 + i*128,
					-(2+i*4), +(2+i*4),
					64, 256-i*4
				);
				if(i == 0)
				{
					bound_tex.Image3D(
						0,
						PixelDataInternalFormat::RGB,
						image.Width(),
						image.Height(),
						sketch_tex_layers,
						0,
						image.Format(),
						image.Type(),
						nullptr
					);
				}
				bound_tex.SubImage3D(
					0,
					0, 0, i,
					image.Width(),
					image.Height(),
					1,
					image.Format(),
					image.Type(),
					image.RawData()
				);
			}
			bound_tex.GenerateMipmap();
			bound_tex.MinFilter(TextureMinFilter::LinearMipmapLinear);
			bound_tex.MagFilter(TextureMagFilter::Linear);
			bound_tex.WrapS(TextureWrap::Repeat);
			bound_tex.WrapT(TextureWrap::Repeat);
			bound_tex.WrapR(TextureWrap::ClampToEdge);
		}

		Texture::Active(1);
		sketch_prog.shadow_tex.Set(1);

		gl.Bound(Texture::Target::_2D, shadow_tex)
			.MinFilter(TextureMinFilter::Linear)
			.MagFilter(TextureMagFilter::Linear)
			.WrapS(TextureWrap::ClampToEdge)
			.WrapT(TextureWrap::ClampToEdge)
			.CompareMode(TextureCompareMode::CompareRefToTexture)
			.Image2D(
				0,
				PixelDataInternalFormat::DepthComponent32,
				shadow_tex_side, shadow_tex_side,
				0,
				PixelDataFormat::DepthComponent,
				PixelDataType::Float,
				nullptr
			);

		gl.Bound(Framebuffer::Target::Draw, frame_shadow_fbo)
			.AttachTexture(
				FramebufferAttachment::Depth,
				shadow_tex,
				0
			);

		gl.ClearDepth(1.0f);
		gl.Enable(Capability::DepthTest);
		gl.Enable(Capability::CullFace);

		gl.DepthFunc(CompareFn::LEqual);
		gl.BlendFunc(BlendFn::SrcAlpha, BlendFn::OneMinusSrcAlpha);

		gl.PolygonOffset(1.0, 1.0);
		gl.LineWidth(1.5);

	}
Ejemplo n.º 6
0
void    Keyboard_Key(void)
{
  if (enGlobal == GLB_PROGRAM)
  {
    switch (wProgram)
    {
      case bSET_SPEED:          key_SetSpeeds();        break;

      case bSET_CURRTIME:       key_SetCurrTime();      break;
      case bSET_CURRDATE:       key_SetCurrDate();      break;

      case bSET_GROUPS:         key_SetGroups();        break;

      case bSET_TRANS_ENG:
      case bSET_TRANS_CNT:
      case bSET_PULSE_HOU:
      case bSET_PULSE_MNT:
      case bSET_LOSSE:
      case bSET_LEVEL:
      case bSET_COUNT:          key_SetFactors();       break;

      case bSET_DAY_ZONE:       key_SetDayZone();       break;
      case bSET_PUBLIC_TARIFFS: key_SetPublicTariffs(); break;
      case bSET_TARIFFS_MODE:   key_SetTariffsMode();   break;

      case bSET_PROGRAM10:
      case bSET_PROGRAM17:
      case bSET_PROGRAM20:
      case bSET_PROGRAM27:      key_SetOldYearZone();   break;

      case bSET_RELAXS_FLAG:    key_SetRelaxsFlag();    break;
      case bSET_RELAXS_TARIFF:  key_SetRelaxsTariff();  break;
      case bSET_RELAXS:         key_SetRelaxs();        break;

      case bSET_PASSWORD:       key_SetPassword();      break;
      case bSET_LOGICAL:        key_SetLogical();       break;
      case bSET_PRIVATE:        key_SetPrivate();       break;

      case bSET_START_MINUTES30:
      case bSET_START:          key_Start();            break;
      case bSET_DEBUG:          key_Debug();            break;

      case bSET_VERSION:        key_GetVersion();       break;

      case bSET_RESETCUSTOM:
      case bSET_RESETFULL:      key_SetReset();         break;

      case bSET_RESET_WDT:      key_ResetWatchdog();         break;

      case bSEARCH_BY_NUMBER:   key_SearchByNumber();   break;
      case bSEARCH_BY_SPEED:    key_SearchBySpeed();    break;

      case bSET_AUTOMATIC1:     key_Automatic1();       break;
      case bSET_AUTOMATIC2:     key_Automatic2();       break;

      case bSET_MAJOR_DELAYS:
      case bSET_MINOR_DELAYS:   key_SetDelays();        break;

      case bSET_CORRECT2_FLAG:  key_SetCorrect2Flag();  break;
      case bSET_CORRECT3_FLAG:  key_SetCorrect3Flag();  break;
      case bSET_CORRECT3_VALUE: key_SetCorrect3Value(); break;
      case bSET_CORRECT3_INFO:  key_SetCorrect3Info();  break;

      case bSET_DIGITALS:       key_SetDigitals();      break;
      case bSET_ENBL_HOURS:     key_SetEnblHours();     break;
      case bSET_CONTROL_HOURS:  key_SetCtrlHours();     break;
      case bSET_ENBL_CANALS:    key_SetEnblCanals();    break;

      case bSET_PARAMS_FLAG:    key_SetParamsFlag();    break;
      case bSET_MNT_PARAMS:     key_SetMntParams();     break;
      case bSET_PARAMS:         key_SetParams();        break;
      case bSET_PARAMS_DIV:     key_SetParamsDiv();     break;
      case bGET_PARAMS_CURR:
      case bGET_PARAMS_BUFF:
      case bGET_PARAMS_FULL:    key_GetParamsAll();     break;
      case wSET_FIX_PARAMS_BUGS:key_SetFixParamsBugs(); break;
      case wSET_USE_PARAMS_DIV: key_SetUseParamsDiv();  break;

      case bSET_LIMITS:         key_SetLimits();        break;
      case bSET_LIMITS2:        key_SetLimits2();       break;
      case bSET_LIMITS30:       key_SetLimits30();      break;
      case bSET_LIMITS31:       key_SetLimits31();      break;
      case bSET_LIMITS32:       key_SetLimits32();      break;
      case bSET_LIMITS33:       key_SetLimits33();      break;

      case bSET_GPS_CONFIG:     key_SetGpsConfig();     break;
      case bSET_GPS_GMT:        key_SetGpsGmt();        break;
      case bGET_GPS_DATA:       key_GetGpsData();       break;
      case bGET_GPS_CORRECT:    key_GetGpsCorrect();    break;
      case bSET_GPS_SCHEDULE:   key_SetGpsSchedule();   break;
      case bSET_GPS_SEASON:     key_SetGpsSeason();     break;

      case bSET_FLOW_PORT_TO:   key_FlowPortTo();       break;
      case bSET_MAX_FLOW_DELAY: key_SetMaxFlowDelay();  break;
      case bSET_FLOW_PORT_FROM: key_FlowPortFrom();     break;

      case bSET_ENBL_CURRENT:   key_SetEnblCurrent();   break;
      case bSET_ENBL_CURRENT2:  key_SetEnblCurrent2();  break;
      case bSET_ENBL_PROFILE:   key_SetEnblProfile();   break;
      case bSET_TIMEOUT_PROFILE:key_SetTimeoutProfile();break;
      case bSET_TIMEOUT_CURRENT:key_SetTimeoutCurrent();break;
      case bSET_CONTROL_TIME:   key_SetControlTime();   break;
      case bSET_MANAGE_TIME:    key_SetManageTime();    break;

      case bSET_MACHINES_ESC:   key_SetMachinesEsc();   break;
      case bSET_BLOCK_ESC:      key_SetBlockEsc();      break;

      case bSET_EXTENDED_ESC_S: key_SetExtendedEscS();  break;
      case bSET_EXTENDED_ESC_V: key_SetExtendedEscV();  break;
      case bSET_EXTENDED_ESC_U: key_SetExtendedEscU();  break;

      case bSET_ADDRESSES:      key_SetAddresses();     break;
      case bSET_ENBL_KEYS:      key_SetEnblKeys();      break;
      case bSET_KEYS:           key_SetKeys();          break;
      case wSET_KEYS_LEVEL_B:   key_SetKeysLevelB();    break;

      case bGET_MODEMS_QUALITY: key_GetModemsQuality(); break;
      case bSET_PHONES:         key_SetPhones();        break;
      case bSET_MAX_CONNECT:    key_SetMaxConnect();    break;
      case bSET_CUSTOM_MODEM:   key_SetCustomModem();   break;

      case bSET_SHOW_MESSAGES:  key_SetShowMessages();  break;

      case bSET_SEPARATE_CAN:   key_SetSeparateCan();   break;
      case bSET_ENBL_WDT:       key_SetEnblWDT();       break;

      case bSET_RECALC_TIME:    key_SetRecalcTime();    break;
      case bSET_RECALC_ALWAYS:  key_SetRecalcAlways();  break;

      case bGET_CNTCURR_110:
      case bGET_READTIMEDATE1:
      case bGET_READTIMEDATE2:  key_GetSingleCan();     break;

      case bSET_DECRET:         key_SetDecret();        break;
      case bSET_WINTER:
      case bSET_SUMMER:         key_SetSeason();        break;

      case bTEST_DIRECT:        key_TestDirect();       break;

      case bTEST_RESPONSE:      key_TestResponse();     break;
      case bTEST_FLOW:          key_TestFlow();         break;
      case bTEST_PORTS_IO:      key_TestPortsIO();      break;
      case bTEST_UNI:           key_TestUni();          break;
      case wSET_MONITOR_OPEN:   key_MonitorOpen();      break;
      case wTEST_MONITOR:       key_TestMonitor();      break;

      case bTEST_IMPULSES:      key_TestImpulses();     break;
      case bTEST_KEYS:          key_TestKeys();         break;
      case bTEST_RTC:           key_TestRTC();          break;
      case bTEST_POWER_OFF:     key_TestPowerOff();     break;


      case wSET_OUTPUT_DELAY:   key_SetOutputDelay();   break;
      case wSET_HIDE_MESSAGES:  key_SetHideMessages();  break;

      case wSET_GAPS_FLAG:      key_SetGapsFlag();      break;
      case wSET_GAPS:           key_SetGaps();          break;

      case wSET_CONTROL_Q:      key_SetControlQ();      break;
      case wSET_SHORT_PROFILE_C:key_SetShortProfileC(); break;
      case wSET_DSBL_REFILL:    key_SetDsblRefill();    break;
      case wSET_DSBL_ANSWER:    key_SetDsblAnswer();    break;
      case wSET_MAX_REPEATS:    key_SetMaxRepeats();    break;
      case wSET_MAX_SHUTDOWN:   key_SetMaxShutdown();   break;

      case wSET_DSBL_ESC:       key_SetDsblEsc();       break;

      case wSET_RECORDS_DSBL:   key_SetRecordsDsbl();   break;

      case wSET_PLC_U_FLAG:     key_SetPlcUFlag();      break;
      case wSET_PLC_U_SIZE:     key_SetPlcUSize();      break;
      case wSET_PLC_U_SHUTDOWN: key_SetPlcUShutdown();  break;

      case wSET_INPUT_MODE_RESET: key_SetInputModeReset(); break;
      case bSET_SLAVE_MODEM: key_SetSlaveModem(); break;

#ifdef ENABLE_BULK
      case wSET_BULK_ENBL: key_SetBulkEnable(); break;
      case wSET_BULK_SIZE: key_SetBulkSize(); break;
      case wSET_BULK_MAX_DELAY: key_SetBulkMaxDelay(); break;
#endif

      case wSET_STRICT_UNI:         key_SetStrictUni();        break;
      case wSET_ENBL_PASS_UNI:      key_SetEnblPassUni();      break;
      case wSET_MAX_DELAY_UNI:      key_SetMaxDelayUni();      break;
      case wSET_REPEAT_FLOW_UNI:    key_SetRepeatFlowUni();    break;

      case wSET_MNT_ESC_S:      key_SetMntEscS();       break;
      case wSET_CORRECT_LIMIT:  key_SetCorrectLimit();  break;

      case wSET_EXT0_FLAG:      key_SetExt0Flag();      break;
      case wSET_EXT0_COUNTER:   key_SetExt0Counter();   break;

      case bSET_EXT3_RESET:     key_SetExt3Reset();     break;
      case bSET_EXT3_FLAG:      key_SetExt3Flag();      break;
      case bSET_EXT3_EVENTS_A:  key_SetExt3A();         break;
      case bSET_EXT3_EVENTS_B:  key_SetExt3B();         break;

      case bSET_EXT4_FLAG:      key_SetExt4Flag();      break;
      case bSET_EXT4_MONTHS:    key_SetExt4Months();    break;
      case bSET_EXT4_ENBL_CAN:  key_SetExt4EnblCan();   break;

      case wSET_EXT4T_FLAG:         key_SetExt4TFlag();        break;
      case wSET_EXT4T_MONTHS:       key_SetExt4TMonths();      break;
      case wSET_EXT4T_RESET_FULL:   key_SetExt4TResetFull();   break;
      case wSET_EXT4T_RESET_CUSTOM: key_SetExt4TResetCustom(); break;

      case bSET_EXT5_FLAG:      key_SetExt5Flag();      break;

      case wSET_EXT6_FLAG:      key_SetExt6Flag();      break;

      case wGET_HEALTH:         key_GetHealth();        break;

      default:                  NoProgram();            break;
    }
  }

  else if (enGlobal == GLB_WORK)
  {
    switch (wProgram)
    {
      case bGET_SPEED:          key_SetSpeeds();        break;

      case bGET_CURRTIME:       key_SetCurrTime();      break;
      case bGET_CURRDATE:       key_SetCurrDate();      break;

      case bGET_CORRECT_TIME:   key_CorrectTime();      break;
      case bGET_CORRECTCURR:    key_GetCorrectCurr();   break;
      case bGET_CORRECTPREV:    key_GetCorrectPrev();   break;

      case bGET_GROUPS:         key_GetGroups();        break;

      case bGET_PUBLIC_TARIFFS: key_SetPublicTariffs(); break;
      case bGET_TARIFFS_MODE:   key_SetTariffsMode();   break;

      case bGET_PROGRAM5:       key_GetOldProgram5();   break;
      case bGET_PROGRAM84:
      case bGET_PROGRAM85:      key_GetOldProgram84();  break;

      case bSET_RELAXS_FLAG:    key_SetRelaxsFlag();    break;
      case bSET_RELAXS_TARIFF:  key_SetRelaxsTariff();  break;
      case bSET_RELAXS:         key_GetRelaxs();        break;

      case bGET_TRANS_ENG:
      case bGET_TRANS_CNT:
      case bGET_PULSE_HOU:
      case bGET_PULSE_MNT:
      case bGET_LOSSE:
      case bSET_LEVEL:          key_GetFactors();       break;

      case bGET_PROGRAM18:      key_GetProgram18();     break;
      case bGET_PROGRAM19:      key_GetProgram19();     break;

      case bSET_PASSWORD:       key_GetPassword();      break;
      case bSET_LOGICAL:        key_SetLogical();       break;
      case bSET_PRIVATE:        key_SetPrivate();       break;

      case bSET_VERSION:
      case bGET_VERSION:        key_GetVersion();       break;

      case bSET_MAJOR_DELAYS:
      case bSET_MINOR_DELAYS:   key_SetDelays();        break;

      case bSET_CORRECT2_FLAG:  key_SetCorrect2Flag();  break;
      case bSET_CORRECT3_FLAG:  key_SetCorrect3Flag();  break;
      case bSET_CORRECT3_VALUE: key_SetCorrect3Value(); break;
      case bSET_CORRECT3_INFO:  key_SetCorrect3Info();  break;

      case bSET_DIGITALS:       key_SetDigitals();      break;
      case bSET_ENBL_HOURS:     key_SetEnblHours();     break;
      case bSET_CONTROL_HOURS:  key_SetCtrlHours();     break;
      case bSET_ENBL_CANALS:    key_SetEnblCanals();    break;

      case bSET_PARAMS_FLAG:    key_SetParamsFlag();    break;
      case bSET_MNT_PARAMS:     key_SetMntParams();     break;
      case bSET_PARAMS:         key_SetParams();        break;
      case bSET_PARAMS_DIV:     key_SetParamsDiv();     break;
      case bGET_PARAMS_CURR:
      case bGET_PARAMS_BUFF:
      case bGET_PARAMS_FULL:    key_GetParamsAll();     break;
      case wSET_FIX_PARAMS_BUGS:key_SetFixParamsBugs(); break;
      case wSET_USE_PARAMS_DIV: key_SetUseParamsDiv();  break;

      case bSET_LIMITS:         key_SetLimits();        break;
      case bSET_LIMITS2:        key_SetLimits2();       break;
      case bSET_LIMITS30:       key_SetLimits30();      break;
      case bSET_LIMITS31:       key_SetLimits31();      break;
      case bSET_LIMITS32:       key_SetLimits32();      break;
      case bSET_LIMITS33:       key_SetLimits33();      break;

      case bSET_GPS_CONFIG:     key_SetGpsConfig();     break;
      case bSET_GPS_GMT:        key_SetGpsGmt();        break;
      case bGET_GPS_DATA:       key_GetGpsData();       break;
      case bGET_GPS_CORRECT:    key_GetGpsCorrect();    break;
      case bSET_GPS_SCHEDULE:   key_SetGpsSchedule();   break;
      case bSET_GPS_SEASON:     key_SetGpsSeason();     break;

      case bSET_FLOW_PORT_TO:   key_FlowPortTo();       break;
      case bSET_MAX_FLOW_DELAY: key_SetMaxFlowDelay();  break;
      case bSET_FLOW_PORT_FROM: key_FlowPortFrom();     break;

      case bSET_ENBL_CURRENT:   key_SetEnblCurrent();   break;
      case bSET_ENBL_CURRENT2:  key_SetEnblCurrent2();  break;
      case bSET_ENBL_PROFILE:   key_SetEnblProfile();   break;
      case bSET_TIMEOUT_PROFILE:key_SetTimeoutProfile();break;
      case bSET_TIMEOUT_CURRENT:key_SetTimeoutCurrent();break;
      case bSET_CONTROL_TIME:   key_SetControlTime();   break;
      case bSET_MANAGE_TIME:    key_SetManageTime();    break;

      case bSET_MACHINES_ESC:   key_SetMachinesEsc();   break;
      case bSET_BLOCK_ESC:      key_SetBlockEsc();      break;

      case bSET_EXTENDED_ESC_S: key_SetExtendedEscS();  break;
      case bSET_EXTENDED_ESC_V: key_SetExtendedEscV();  break;
      case bSET_EXTENDED_ESC_U: key_SetExtendedEscU();  break;

      case bSET_ADDRESSES:      key_SetAddresses();     break;
      case bSET_ENBL_KEYS:      key_SetEnblKeys();      break;
      case bSET_KEYS:           key_SetKeys();          break;
      case wSET_KEYS_LEVEL_B:   key_SetKeysLevelB();    break;

      case bGET_MODEMS_QUALITY: key_GetModemsQuality(); break;
      case bSET_PHONES:         key_SetPhones();        break;
      case bSET_MAX_CONNECT:    key_SetMaxConnect();    break;
      case bSET_CUSTOM_MODEM:   key_SetCustomModem();   break;

      case bSET_SHOW_MESSAGES:  key_SetShowMessages();  break;

      case bSET_SEPARATE_CAN:   key_SetSeparateCan();   break;
      case bSET_ENBL_WDT:       key_SetEnblWDT();       break;

      case bSET_RECALC_TIME:    key_SetRecalcTime();    break;
      case bSET_RECALC_ALWAYS:  key_SetRecalcAlways();  break;

      case bGET_CNTCURR_10:
      case bGET_CNTCURR_110:
      case bGET_READTIMEDATE1:
      case bGET_READTIMEDATE2:
      case bGET_IMPCANCURRMNT:  key_GetSingleCan();     break;

      case bGET_POWGRPPREVHOU:
      case bGET_POWGRPCURRHOU:

      case bGET_POWGRPDAYPREV_ABCD:
      case bGET_POWGRPDAYPREV_C:
      case bGET_POWGRPDAYPREV_D:

      case bGET_POWGRPDAYCURR_ABCD:
      case bGET_POWGRPDAYCURR_C:
      case bGET_POWGRPDAYCURR_D:

      case bGET_POWGRPMONPREV_ABCD:
      case bGET_POWGRPMONPREV_C:
      case bGET_POWGRPMONPREV_D:

      case bGET_POWGRPMONCURR_ABCD:
      case bGET_POWGRPMONCURR_C:
      case bGET_POWGRPMONCURR_D:

      case bGET_ENGGRPDAYPREV_ABCD:
      case bGET_ENGGRPDAYPREV_CD:
      case bGET_ENGGRPDAYPREV_B:
      case bGET_ENGGRPDAYPREV_A:

      case bGET_ENGGRPDAYCURR_ABCD:
      case bGET_ENGGRPDAYCURR_CD:
      case bGET_ENGGRPDAYCURR_B:
      case bGET_ENGGRPDAYCURR_A:

      case bGET_ENGGRPMONPREV_ABCD:
      case bGET_ENGGRPMONPREV_CD:
      case bGET_ENGGRPMONPREV_B:
      case bGET_ENGGRPMONPREV_A:

      case bGET_ENGGRPMONCURR_ABCD:
      case bGET_ENGGRPMONCURR_CD:
      case bGET_ENGGRPMONCURR_B:
      case bGET_ENGGRPMONCURR_A:

      case bGET_POWGRPCURRMNT:  key_GetSingleGrp();     break;

      case bGET_POWCANPREVHOU:
      case bGET_POWCANCURRHOU:

      case bGET_ENGCANDAYPREV_ABCD:
      case bGET_ENGCANDAYPREV_CD:
      case bGET_ENGCANDAYPREV_B:
      case bGET_ENGCANDAYPREV_A:

      case bGET_ENGCANDAYCURR_ABCD:
      case bGET_ENGCANDAYCURR_CD:
      case bGET_ENGCANDAYCURR_B:
      case bGET_ENGCANDAYCURR_A:

      case bGET_ENGCANMONPREV_ABCD:
      case bGET_ENGCANMONPREV_CD:
      case bGET_ENGCANMONPREV_B:
      case bGET_ENGCANMONPREV_A:

      case bGET_ENGCANMONCURR_ABCD:
      case bGET_ENGCANMONCURR_CD:
      case bGET_ENGCANMONCURR_B:
      case bGET_ENGCANMONCURR_A:

      case bGET_POWCANCURRMNT:  key_GetSingle2();       break;

      case bGET_ENGGRPYEAR_ABCD:
      case bGET_ENGGRPYEAR_CD:
      case bGET_ENGGRPYEAR_B:
      case bGET_ENGGRPYEAR_A:   key_GetEngYear(); break;

      case bGET_CNTCANYEAR1:
      case bGET_CNTCANYEAR10:
      case bGET_CNTCANYEAR2:
      case bGET_CNTCANYEAR20:
      case wGET_CNTCANYEAR3:    key_GetCntYear(); break;

      case bRUN_PROFILE:        key_RunProfile();       break;

      case bGET_PROGRAM73:      key_GetOldProgram73();  break;
      case bGET_PROGRAM74:      key_GetOldProgram74();  break;

      case bSET_DECRET:         key_SetDecret();        break;
      case bSET_WINTER:
      case bSET_SUMMER:         key_SetSeason();        break;

      case bTEST_DIRECT:        key_TestDirect();       break;

      case bTEST_RESPONSE:      key_TestResponse();     break;
      case bTEST_FLOW:          key_TestFlow();         break;
      case bTEST_PORTS_IO:      key_TestPortsIO();      break;
      case bTEST_UNI:           key_TestUni();          break;
      case wSET_MONITOR_OPEN:   key_MonitorOpen();      break;
      case wTEST_MONITOR:       key_TestMonitor();      break;

      case bTEST_IMPULSES:      key_TestImpulses();     break;
      case bTEST_KEYS:          key_TestKeys();         break;
      case bTEST_RTC:           key_TestRTC();          break;
      case bTEST_POWER_OFF:     key_TestPowerOff();     break;


      case wSET_OUTPUT_DELAY:   key_SetOutputDelay();   break;
      case wSET_HIDE_MESSAGES:  key_SetHideMessages();  break;

      case wSET_GAPS_FLAG:      key_SetGapsFlag();      break;
      case wSET_GAPS:           key_GetGaps();          break;

      case wSET_CONTROL_Q:      key_SetControlQ();      break;
      case wSET_SHORT_PROFILE_C:key_SetShortProfileC(); break;
      case wSET_DSBL_REFILL:    key_SetDsblRefill();    break;
      case wSET_DSBL_ANSWER:    key_SetDsblAnswer();    break;
      case wSET_MAX_REPEATS:    key_SetMaxRepeats();    break;
      case wSET_MAX_SHUTDOWN:   key_SetMaxShutdown();   break;

      case wSET_DSBL_ESC:       key_SetDsblEsc();       break;

      case wSET_RECORDS_DSBL:   key_SetRecordsDsbl();   break;

      case wSET_PLC_U_FLAG:     key_SetPlcUFlag();      break;
      case wSET_PLC_U_SIZE:     key_SetPlcUSize();      break;
      case wSET_PLC_U_SHUTDOWN: key_SetPlcUShutdown();  break;

      case wSET_INPUT_MODE_RESET: key_SetInputModeReset(); break;
      case bSET_SLAVE_MODEM: key_SetSlaveModem(); break;

#ifdef ENABLE_BULK
      case wSET_BULK_ENBL: key_SetBulkEnable(); break;
      case wSET_BULK_SIZE: key_SetBulkSize(); break;
      case wSET_BULK_MAX_DELAY: key_SetBulkMaxDelay(); break;
#endif

      case wSET_STRICT_UNI:         key_SetStrictUni();        break;
      case wSET_ENBL_PASS_UNI:      key_SetEnblPassUni();      break;
      case wSET_MAX_DELAY_UNI:      key_SetMaxDelayUni();      break;
      case wSET_REPEAT_FLOW_UNI:    key_SetRepeatFlowUni();    break;

      case wSET_MNT_ESC_S:      key_SetMntEscS();       break;
      case wSET_CORRECT_LIMIT:  key_SetCorrectLimit();  break;

      case wSET_EXT0_FLAG:      key_SetExt0Flag();      break;
      case wSET_EXT0_COUNTER:   key_SetExt0Counter();   break;

      case bSET_EXT3_RESET:     key_SetExt3Reset();     break;
      case bSET_EXT3_FLAG:      key_SetExt3Flag();      break;
      case bSET_EXT3_EVENTS_A:  key_SetExt3A();         break;
      case bSET_EXT3_EVENTS_B:  key_SetExt3B();         break;

      case bSET_EXT4_FLAG:      key_SetExt4Flag();      break;
      case bSET_EXT4_MONTHS:    key_SetExt4Months();    break;
      case bSET_EXT4_ENBL_CAN:  key_SetExt4EnblCan();   break;

      case wSET_EXT4T_FLAG:     key_SetExt4TFlag();     break;
      case wSET_EXT4T_MONTHS:   key_SetExt4TMonths();   break;

      case bSET_EXT5_FLAG:      key_SetExt5Flag();      break;

      case wSET_EXT6_FLAG:      key_SetExt6Flag();      break;

      case wGET_HEALTH:         key_GetHealth();        break;

      default:                  NoProgram();            break;
    }
  }

  else if (enGlobal == GLB_REPROGRAM)
  {
    switch (wProgram)
    {
      case bSET_SPEED:          key_SetSpeeds();        break;

      case bSET_CURRTIME:       key_SetCurrTime();      break;
      case bSET_CURRDATE:       key_SetCurrDate();      break;

      case bSET_GROUPS:         key_SetGroups();        break;

      case bSET_DAY_ZONE:       key_SetDayZone();       break;
      case bSET_PUBLIC_TARIFFS: key_SetPublicTariffs(); break;
      case bSET_TARIFFS_MODE:   key_SetTariffsMode();   break;

      case bSET_PROGRAM10:
      case bSET_PROGRAM17:
      case bSET_PROGRAM20:
      case bSET_PROGRAM27:      key_SetOldYearZone();   break;

      case bSET_RELAXS_FLAG:    key_SetRelaxsFlag();    break;
      case bSET_RELAXS_TARIFF:  key_SetRelaxsTariff();  break;
      case bSET_RELAXS:         key_SetRelaxs();        break;

      case bSET_PASSWORD:       key_SetPassword();      break;
      case bSET_LOGICAL:        key_SetLogical();       break;
      case bSET_PRIVATE:        key_SetPrivate();       break;

      case bSET_START:          key_Restart();          break;

      case bSET_VERSION:        key_GetVersion();       break;

      case bSET_RESETCUSTOM:
      case bSET_RESETFULL:      key_SetReset();         break;

      case bSET_RESET_WDT:      key_ResetWatchdog();         break;

      case bSEARCH_BY_NUMBER:   key_SearchByNumber();   break;
      case bSEARCH_BY_SPEED:    key_SearchBySpeed();    break;

      case bSET_AUTOMATIC1:     key_Automatic1();       break;
      case bSET_AUTOMATIC2:     key_Automatic2();       break;

      case bSET_MAJOR_DELAYS:
      case bSET_MINOR_DELAYS:   key_SetDelays();        break;

      case bSET_CORRECT2_FLAG:  key_SetCorrect2Flag();  break;
      case bSET_CORRECT3_FLAG:  key_SetCorrect3Flag();  break;
      case bSET_CORRECT3_VALUE: key_SetCorrect3Value(); break;
      case bSET_CORRECT3_INFO:  key_SetCorrect3Info();  break;

      case bSET_DIGITALS:       key_SetDigitals();      break;
      case bSET_ENBL_HOURS:     key_SetEnblHours();     break;
      case bSET_CONTROL_HOURS:  key_SetCtrlHours();     break;
      case bSET_ENBL_CANALS:    key_SetEnblCanals();    break;

      case bSET_PARAMS_FLAG:    key_SetParamsFlag();    break;
      case bSET_MNT_PARAMS:     key_SetMntParams();     break;
      case bSET_PARAMS:         key_SetParams();        break;
      case bSET_PARAMS_DIV:     key_SetParamsDiv();     break;
      case bGET_PARAMS_CURR:
      case bGET_PARAMS_BUFF:
      case bGET_PARAMS_FULL:    key_GetParamsAll();     break;
      case wSET_FIX_PARAMS_BUGS:key_SetFixParamsBugs(); break;
      case wSET_USE_PARAMS_DIV: key_SetUseParamsDiv();  break;

      case bSET_LIMITS:         key_SetLimits();        break;
      case bSET_LIMITS2:        key_SetLimits2();       break;
      case bSET_LIMITS30:       key_SetLimits30();      break;
      case bSET_LIMITS31:       key_SetLimits31();      break;
      case bSET_LIMITS32:       key_SetLimits32();      break;
      case bSET_LIMITS33:       key_SetLimits33();      break;

      case bSET_GPS_CONFIG:     key_SetGpsConfig();     break;
      case bSET_GPS_GMT:        key_SetGpsGmt();        break;
      case bGET_GPS_DATA:       key_GetGpsData();       break;
      case bGET_GPS_CORRECT:    key_GetGpsCorrect();    break;
      case bSET_GPS_SCHEDULE:   key_SetGpsSchedule();   break;
      case bSET_GPS_SEASON:     key_SetGpsSeason();     break;

      case bSET_FLOW_PORT_TO:   key_FlowPortTo();       break;
      case bSET_MAX_FLOW_DELAY: key_SetMaxFlowDelay();  break;
      case bSET_FLOW_PORT_FROM: key_FlowPortFrom();     break;

      case bSET_ENBL_CURRENT:   key_SetEnblCurrent();   break;
      case bSET_ENBL_CURRENT2:  key_SetEnblCurrent2();  break;
      case bSET_ENBL_PROFILE:   key_SetEnblProfile();   break;
      case bSET_TIMEOUT_PROFILE:key_SetTimeoutProfile();break;
      case bSET_TIMEOUT_CURRENT:key_SetTimeoutCurrent();break;
      case bSET_CONTROL_TIME:   key_SetControlTime();   break;
      case bSET_MANAGE_TIME:    key_SetManageTime();    break;

      case bSET_MACHINES_ESC:   key_SetMachinesEsc();   break;
      case bSET_BLOCK_ESC:      key_SetBlockEsc();      break;

      case bSET_EXTENDED_ESC_S: key_SetExtendedEscS();  break;
      case bSET_EXTENDED_ESC_V: key_SetExtendedEscV();  break;
      case bSET_EXTENDED_ESC_U: key_SetExtendedEscU();  break;

      case bSET_ADDRESSES:      key_SetAddresses();     break;
      case bSET_ENBL_KEYS:      key_SetEnblKeys();      break;
      case bSET_KEYS:           key_SetKeys();          break;
      case wSET_KEYS_LEVEL_B:   key_SetKeysLevelB();    break;

      case bGET_MODEMS_QUALITY: key_GetModemsQuality(); break;
      case bSET_PHONES:         key_SetPhones();        break;
      case bSET_MAX_CONNECT:    key_SetMaxConnect();    break;
      case bSET_CUSTOM_MODEM:   key_SetCustomModem();   break;

      case bSET_SHOW_MESSAGES:  key_SetShowMessages();  break;

      case bSET_SEPARATE_CAN:   key_SetSeparateCan();   break;
      case bSET_ENBL_WDT:       key_SetEnblWDT();       break;

      case bSET_RECALC_TIME:    key_SetRecalcTime();    break;
      case bSET_RECALC_ALWAYS:  key_SetRecalcAlways();  break;

      case bSET_RECALC_FULL:
      case bSET_RECALC_MAXPOW:
      case bSET_RECALC_ENG:     key_SetRecalc();        break;


      case bGET_CNTCURR_110:
      case bGET_READTIMEDATE1:
      case bGET_READTIMEDATE2:  key_GetSingleCan();     break;

      case bSET_DECRET:         key_SetDecret();        break;
      case bSET_WINTER:
      case bSET_SUMMER:         key_SetSeason();        break;

      case bTEST_DIRECT:        key_TestDirect();       break;

      case bTEST_RESPONSE:      key_TestResponse();     break;
      case bTEST_FLOW:          key_TestFlow();         break;
      case bTEST_PORTS_IO:      key_TestPortsIO();      break;
      case bTEST_UNI:           key_TestUni();          break;
      case wSET_MONITOR_OPEN:   key_MonitorOpen();      break;
      case wTEST_MONITOR:       key_TestMonitor();      break;

      case bTEST_IMPULSES:      key_TestImpulses();     break;
      case bTEST_KEYS:          key_TestKeys();         break;
      case bTEST_RTC:           key_TestRTC();          break;
      case bTEST_POWER_OFF:     key_TestPowerOff();     break;


      case wSET_OUTPUT_DELAY:   key_SetOutputDelay();   break;
      case wSET_HIDE_MESSAGES:  key_SetHideMessages();  break;

      case wSET_GAPS_FLAG:      key_SetGapsFlag();      break;
      case wSET_GAPS:           key_SetGaps();          break;

      case wSET_CONTROL_Q:      key_SetControlQ();      break;
      case wSET_SHORT_PROFILE_C:key_SetShortProfileC(); break;
      case wSET_DSBL_REFILL:    key_SetDsblRefill();    break;
      case wSET_DSBL_ANSWER:    key_SetDsblAnswer();    break;
      case wSET_MAX_REPEATS:    key_SetMaxRepeats();    break;
      case wSET_MAX_SHUTDOWN:   key_SetMaxShutdown();   break;

      case wSET_DSBL_ESC:       key_SetDsblEsc();       break;

      case wSET_RECORDS_DSBL:   key_SetRecordsDsbl();   break;

      case wSET_PLC_U_FLAG:     key_SetPlcUFlag();      break;
      case wSET_PLC_U_SIZE:     key_SetPlcUSize();      break;
      case wSET_PLC_U_SHUTDOWN: key_SetPlcUShutdown();  break;

      case wSET_INPUT_MODE_RESET: key_SetInputModeReset(); break;
      case bSET_SLAVE_MODEM: key_SetSlaveModem(); break;

#ifdef ENABLE_BULK
      case wSET_BULK_ENBL: key_SetBulkEnable(); break;
      case wSET_BULK_SIZE: key_SetBulkSize(); break;
      case wSET_BULK_MAX_DELAY: key_SetBulkMaxDelay(); break;
#endif

      case wSET_STRICT_UNI:         key_SetStrictUni();        break;
      case wSET_ENBL_PASS_UNI:      key_SetEnblPassUni();      break;
      case wSET_MAX_DELAY_UNI:      key_SetMaxDelayUni();      break;
      case wSET_REPEAT_FLOW_UNI:    key_SetRepeatFlowUni();    break;

      case wSET_MNT_ESC_S:      key_SetMntEscS();       break;
      case wSET_CORRECT_LIMIT:  key_SetCorrectLimit();  break;

      case wSET_EXT0_FLAG:      key_SetExt0Flag();      break;
      case wSET_EXT0_COUNTER:   key_SetExt0Counter();   break;

      case bSET_EXT3_RESET:     key_SetExt3Reset();     break;
      case bSET_EXT3_FLAG:      key_SetExt3Flag();      break;
      case bSET_EXT3_EVENTS_A:  key_SetExt3A();         break;
      case bSET_EXT3_EVENTS_B:  key_SetExt3B();         break;

      case bSET_EXT4_FLAG:      key_SetExt4Flag();      break;
      case bSET_EXT4_MONTHS:    key_SetExt4Months();    break;
      case bSET_EXT4_ENBL_CAN:  key_SetExt4EnblCan();   break;

      case wSET_EXT4T_FLAG:         key_SetExt4TFlag();        break;
      case wSET_EXT4T_MONTHS:       key_SetExt4TMonths();      break;
      case wSET_EXT4T_RESET_FULL:   key_SetExt4TResetFull();   break;
      case wSET_EXT4T_RESET_CUSTOM: key_SetExt4TResetCustom(); break;

      case bSET_EXT5_FLAG:      key_SetExt5Flag();      break;

      case wSET_EXT6_FLAG:      key_SetExt6Flag();      break;

      case bSET_CLEAR_CANALS:   key_ClearCanals();      break;
      case wSET_SET_PROFILES1:  key_SetProfiles1();     break;
      case wSET_SET_PROFILES2:  key_SetProfiles2();     break;

      case wGET_HEALTH:         key_GetHealth();        break;

      default:                  NoProgram();            break;
    }
  }
}