⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 work.cpp

📁 用C++控制喷泉程序
💻 CPP
字号:
#include "alloc.h"
#include "string.h"
#include "graphics.h"
#include "dos.h"
#include "macro.h"
#include "struct.h"
#include "constdec.h"
#include "vardec.h"
#include "function.h"
#include "run.h"
#include "mouse.h"
#include "grap.h"
#include "interrup.h"
void WorkFun(void)
{
 BUTTON WorkContrButton[WorkContrButtonNum];
 BUTTON WorkGNButton[WorkGNButtonNum];
 ITEMBUTTON *WorkMusicItem;//[MusicItemNum+1];
 ITEMBUTTON *WorkLoopItem;//[LoopItemNum+1];
 ITEMBUTTON *WorkRealTimeItem;//[RealTimeItemNum+1];
 char **WorkMusicItemText;
 char **WorkLoopItemText;
 char **WorkRealTimeItemText;
 int MusicItemNum;
 int LoopItemNum;
 int RealTimeItemNum;
 if(ReadStrFile("music",MusicItemNum,WorkMusicItemText)==-1)
 {
	return;
 }
 if(ReadStrFile("loop",LoopItemNum,WorkLoopItemText)==-1)
 {
	return;
 }
 if(ReadStrFile("real",RealTimeItemNum,WorkRealTimeItemText)==-1)
 {
	return;
 }
 WorkMusicItem=(ITEMBUTTON*)malloc(MusicItemNum*sizeof(ITEMBUTTON));
 if(WorkMusicItem==NULL)
 {
	return;
 }
 WorkLoopItem=(ITEMBUTTON*)malloc(LoopItemNum*sizeof(ITEMBUTTON));
 if(WorkLoopItem==NULL)
 {
	return;
 }
 WorkRealTimeItem=(ITEMBUTTON*)malloc(RealTimeItemNum*sizeof(ITEMBUTTON));
 if(WorkRealTimeItem==NULL)
 {
	return;
 }
 MusicItemNum--;
 LoopItemNum--;
 RealTimeItemNum--;
 int i,StrLen;
 for(i=0;i<WorkContrButtonNum;i++)
 {
	WorkContrButton[i].x=319-(WorkContrButtonNum/2.0-i-0.5)*(WorkContrButtonLengh+WorkContrButtonHoriSpace);
	WorkContrButton[i].y=402;
	WorkContrButton[i].height=WorkContrButtonHeight;
	WorkContrButton[i].lengh=WorkContrButtonLengh;
	WorkContrButton[i].EnableFlag=1;
	WorkContrButton[i].PressFlag=0;
	WorkContrButton[i].DrawFlag=1;
	WorkContrButton[i].PortData=NULL;
	WorkContrButton[i].text=WorkContrButtonText[i];
 }
 for(i=0;i<WorkGNButtonNum;i++)
 {
	WorkGNButton[i].height=WorkGNButtonHeight;
	WorkGNButton[i].lengh=WorkGNButtonLengh;
	WorkGNButton[i].EnableFlag=1;
	WorkGNButton[i].PressFlag=0;
	WorkGNButton[i].DrawFlag=1;
	WorkGNButton[i].PortData=NULL;
	WorkGNButton[i].text=WorkGNButtonText[i];
 }
 for(i=0;i<2;i++)
 {
	WorkGNButton[i].x=(WorkWindow[2].left+WorkWindow[2].right)/2;
	WorkGNButton[i].y=290+(WorkGNButtonHeight+WorkGNButtonVertSpace)*i;
 }
 WorkGNButton[0].PressFlag=1;
 WorkGNButton[2].x=(WorkWindow[2].left+WorkWindow[2].right)/2;
 WorkGNButton[2].y=WorkGNButtonTopSpace+(WorkGNButtonHeight+WorkGNButtonVertSpace)*(2-2);
 for(i=3;i<WorkGNButtonNum;i++)
 {
	WorkGNButton[i].x=(WorkWindow[2].left+WorkWindow[2].right)/2;
	WorkGNButton[i].y=WorkGNButtonTopSpace+(WorkGNButtonHeight+WorkGNButtonVertSpace)*(i-2)+10;
 }
 for(i=0,StrLen=0;i<MusicItemNum+1;i++)
 {
	if(strlen(WorkMusicItemText[i])>StrLen)
	{
	 StrLen=strlen(WorkMusicItemText[i]);
	}
 }
 StrLen=StrLen*8+10;
 for(i=0;i<MusicItemNum+1;i++)
 {
	WorkMusicItem[i].x=ITEMx+StrLen/2;
	WorkMusicItem[i].y=ITEMSTARTy+25*i;
	WorkMusicItem[i].height=20;
	WorkMusicItem[i].lengh=StrLen;
	WorkMusicItem[i].EnableFlag=1;
	WorkMusicItem[i].PressFlag=0;
	WorkMusicItem[i].DrawFlag=1;
	WorkMusicItem[i].text=WorkMusicItemText[i];
 }
 WorkMusicItem[0].lengh=strlen(WorkMusicItemText[0])*8+10;
 WorkMusicItem[0].x=ITEMx+StrLen/2;
 WorkMusicItem[0].EnableFlag=0;
 WorkMusicItem[1].PressFlag=1;
 for(i=0,StrLen=0;i<LoopItemNum+1;i++)
 {
	if(strlen(WorkLoopItemText[i])>StrLen)
	{
	 StrLen=strlen(WorkLoopItemText[i]);
	}
 }
 StrLen=StrLen*8+10;
 for(i=0;i<LoopItemNum+1;i++)
 {
	WorkLoopItem[i].x=ITEMx+StrLen/2;
	WorkLoopItem[i].y=ITEMSTARTy+25*i;
	WorkLoopItem[i].height=20;
	WorkLoopItem[i].lengh=StrLen;
	WorkLoopItem[i].EnableFlag=1;
	WorkLoopItem[i].PressFlag=0;
	WorkLoopItem[i].DrawFlag=1;
	WorkLoopItem[i].text=WorkLoopItemText[i];
 }
 WorkLoopItem[0].lengh=strlen(WorkLoopItemText[0])*8+10;
 WorkLoopItem[0].x=ITEMx+StrLen/2;
 WorkLoopItem[0].EnableFlag=0;
 WorkLoopItem[1].PressFlag=1;
 for(i=0,StrLen=0;i<RealTimeItemNum+1;i++)
 {
	if(strlen(WorkRealTimeItemText[i])>StrLen)
	{
	 StrLen=strlen(WorkRealTimeItemText[i]);
	}
 }
 StrLen=StrLen*8+10;
 for(i=0;i<RealTimeItemNum+1;i++)
 {
	WorkRealTimeItem[i].x=ITEMx+StrLen/2;
	WorkRealTimeItem[i].y=ITEMSTARTy+25*i;
	WorkRealTimeItem[i].height=20;
	WorkRealTimeItem[i].lengh=StrLen;
	WorkRealTimeItem[i].EnableFlag=1;
	WorkRealTimeItem[i].PressFlag=0;
	WorkRealTimeItem[i].DrawFlag=1;
	WorkRealTimeItem[i].text=WorkRealTimeItemText[i];
 }
 WorkRealTimeItem[0].lengh=strlen(WorkRealTimeItemText[0])*8+10;
 WorkRealTimeItem[0].x=ITEMx+StrLen/2;
 WorkRealTimeItem[0].EnableFlag=0;
 WorkRealTimeItem[1].PressFlag=1;

 struct viewporttype vp;
 int height,width;
 setviewport(0,0,getmaxx(),getmaxy(),0);
 getviewsettings(&vp);
 width=vp.right-vp.left;
 height=vp.bottom-vp.top;
 setfillstyle(SOLID_FILL,BLUE);
 HideMouse();
 bar(0,0,width,height);
 rectangle(0,0,width,height);
 ShowMouse();

 setviewport(0,0,639,48,0);
 getviewsettings(&vp);
 width=vp.right-vp.left;
 height=vp.bottom-vp.top;
 setfillstyle(SOLID_FILL,CYAN );
 HideMouse();
 bar(0,0,width,height);
 rectangle(0,0,width,height);
 ShowMouse();

 setviewport( 1, 443, 638, 478, 0 );
 getviewsettings(&vp);
 width=vp.right-vp.left;
 height=vp.bottom-vp.top;
 setfillstyle(SOLID_FILL,CYAN );
 HideMouse();
 bar(0,0,width,height);
 rectangle(0,0,width,height);
 ShowMouse();
 setcolor(RED);
 HideMouse();
 rectangle( 0, 0, 637, 35);
 rectangle( 1, 1, 636, 34);
 line(60,0,60,35);
 line(61,0,61,35);
 ShowMouse();
 ChineseOut(10,10,"提 示",RED);
 setcolor(WHITE);

 setviewport(0,0,getmaxx(),getmaxy(),0);
 BmpDisplay("work.bmp",1,1,YELLOW);

 for(i=0;i<WorkWindowNum;i++)
 {
	MakeWindow(WorkWindow[i]);
 }

 ShowButton(WorkContrButton,WorkContrButtonNum);
 ShowButton(WorkGNButton,WorkGNButtonNum);

 QUEUE *Stable1OnHead=NULL;
 QUEUE *Stable1OnEnd=NULL;
 QUEUE *Stable1OffHead=NULL;
 QUEUE *Stable1OffEnd=NULL;
 ITEMBUTTON *WorkItem;
 int ItemNum;
 unsigned long Stable1Time=0;
 int Contr_i=-1;
 int GN_i=-1;
 int Item_i=-1;
 int ItemNoNum=1;
 int WorkKind=-1;
 int oldWorkKind=-1;
 int ItemShowFlag=0;
 int ClsFlag=0;
 int ReturnVal=0;
 int oldReturnVal=0;
 unsigned long oldSTOPtime=0;
 LightSwitch=0;
 RectPrint(PromptOutRect,1,RED,"就绪...");
 //DingWei(3);
 for(;Contr_i!=RETURN;)
 {
	//DingWei(1);
	ReadMouse();
	if(Contr_i==-1)
	{
	 Contr_i=ReturnButton(WorkContrButton,WorkContrButtonNum);
	}
	switch(Contr_i)
	{
	 case START:
	 {
		if(WorkKind!=-1&&WorkContrButton[HELP].PressFlag==0&&WorkContrButton[START].PressFlag==0)
		{
		 ReShowButton(WorkContrButton[Contr_i]);
		 RectPrint(PromptOutRect,1,RED,"正在工作...");
		}
	 }
	 break;
	 case MUSIC:
	 case LOOP:
	 case REALTIME:
	 {
		if(WorkContrButton[START].PressFlag==0&&WorkContrButton[HELP].PressFlag==0)
		{
		 if(WorkKind!=Contr_i)
		 {
			switch(Contr_i)
			{
			 case MUSIC:
			 {
				WorkItem=WorkMusicItem;
				ItemNum=MusicItemNum;
				for(i=0;i<ItemNum+1;i++)
				{
				 if(WorkItem[i].PressFlag==1)
				 {
					ItemNoNum=i;
					break;
				 }
				}
				ItemShowFlag=1;
				ClsFlag=1;
			 }
			 break;
			 case LOOP:
			 {
				WorkItem=WorkLoopItem;
				ItemNum=LoopItemNum;
				for(i=0;i<ItemNum+1;i++)
				{
				 if(WorkItem[i].PressFlag==1)
				 {
					ItemNoNum=i;
					break;
				 }
				}
				ItemShowFlag=1;
				ClsFlag=1;
			 }
			 break;
			 case REALTIME:
			 {
				WorkItem=WorkRealTimeItem;
				ItemNum=RealTimeItemNum;
				for(i=0;i<ItemNum+1;i++)
				{
				 if(WorkItem[i].PressFlag==1)
				 {
					ItemNoNum=i;
					break;
				 }
				}
				ItemShowFlag=1;
				ClsFlag=1;
			 }
			 break;
			}
		 }
		 if(WorkKind!=-1&&WorkKind!=Contr_i)
		 {
			ReShowButton(WorkContrButton[WorkKind]);
		 }
		 ReShowButton(WorkContrButton[Contr_i]);
		 if(WorkContrButton[Contr_i].PressFlag==1)
		 {
			WorkKind=Contr_i;
		 }
		 else
		 {
			WorkKind=-1;
		 }
		 if(WorkKind==-1)
		 {
			ClsFlag=1;
		 }
		}
	 }
	 break;
	 case STOP:
	 {
		if(WorkContrButton[START].PressFlag==1)
		{
		 if(WorkContrButton[Contr_i].PressFlag==0)
		 {
			ReShowButton(WorkContrButton[Contr_i]);
			oldSTOPtime=GetTime();
		 }
		 else
		 {
			if(GetTime()-oldSTOPtime>FREQSTOPTIME)
			{
			 ReShowButton(WorkContrButton[START]);
			 ReShowButton(WorkContrButton[Contr_i]);
			 RectPrint(PromptOutRect,1,RED,"就绪...");
			 Contr_i=-1;
			}
		 }
		}
		else
		{
		 Contr_i=-1;
		}
	 }
	 break;
	 case HELP:
	 {
		if(WorkContrButton[START].PressFlag==0)
		{
		 ReShowButton(WorkContrButton[Contr_i]);
		 MakeWindow(HelpWindow);
		 if(WorkContrButton[Contr_i].PressFlag==1)
		 {
			switch(WorkKind)
			{
			 case -1:
			 {
				ShowHelp(HelpChar1,HelpChar1LineNum);
				RectPrint(PromptOutRect,1,RED,"主控制台帮助(再次按帮助按钮返回)");
			 }
			 break;
			 case	1:
			 {
				ShowHelp(HelpChar2,HelpChar2LineNum);
				RectPrint(PromptOutRect,1,RED,"音乐编辑帮助(再次按帮助按钮返回)");
			 }
			 break;
			 case	2:
			 {
				ShowHelp(HelpChar3,HelpChar3LineNum);
				RectPrint(PromptOutRect,1,RED,"程序切换帮助(再次按帮助按钮返回)");
			 }
			 break;
			 case	3:
			 {
				ShowHelp(HelpChar4,HelpChar4LineNum);
				RectPrint(PromptOutRect,1,RED,"实时声控帮助(再次按帮助按钮返回)");
			 }
			 break;
			}
		 }
		 else
		 {
			ClsFlag=1;
			if(WorkKind!=-1)
			{
			 ItemShowFlag=1;
			}
			{
			 struct viewporttype  vp,newvp;
			 int oldcolor,swidth,sheight;
			 HideMouse();
			 getviewsettings(&vp);
			 oldcolor=getcolor();
			 setviewport(HelpWindow.left,HelpWindow.top,HelpWindow.right,HelpWindow.bottom,0);
			 getviewsettings( &newvp );
			 swidth=newvp.right-newvp.left;
			 sheight=newvp.bottom-newvp.top;
			 setfillstyle( SOLID_FILL,BLUE);
			 bar( 0, 0, swidth, sheight );
			 ShowMouse();
			 setcolor(oldcolor);
			 setviewport(vp.left,vp.top,vp.right,vp.bottom,0);
			}
			for(i=1;i<WorkWindowNum;i++)
			{
			 MakeWindow(WorkWindow[i]);
			}
			for(i=0;i<WorkGNButtonNum;i++)
			{
			 WorkGNButton[i].DrawFlag=1;
			}
			ShowButton(WorkGNButton,WorkGNButtonNum);
			RectPrint(PromptOutRect,1,RED,"就绪...");
		 }
		}
	 }
	 break;
	 case RETURN:
	 {
		if(WorkContrButton[START].PressFlag==0)
		{
		 ReShowButton(WorkContrButton[Contr_i]);
		 FreeQueueMem(Stable1OnHead);
		 Stable1OnHead=Stable1OnEnd=NULL;
		 FreeQueueMem(Stable1OffHead);
		 Stable1OffHead=Stable1OffEnd=NULL;
		 delay(100);
		 ReShowButton(WorkContrButton[Contr_i]);
		}
		else
		{
		 Contr_i=-1;
		}
	 }
	 break;
	}
	if(WorkContrButton[HELP].PressFlag==0)
	{
	 if(GN_i==-1)
	 {
		GN_i=ReturnButton(WorkGNButton,WorkGNButtonNum);
	 }
	 switch(GN_i)
	 {
		case 0://循环连续
		case 1:
		{
		 if(WorkGNButton[GN_i].PressFlag==0)
		 {
			ReShowButton(WorkGNButton[GN_i]);
			ReShowButton(WorkGNButton[(GN_i+1)%2]);
		 }
		}
		break;
		case 2://灯开关
		{
		 ReShowButton(WorkGNButton[GN_i]);
		 if(WorkGNButton[GN_i].PressFlag==1)
		 {
			LightSwitch=1;
		 }
		 else
		 {
			LightSwitch=0;
		 }
		 PortDataOut();
		}
		break;
		case 3://系统泵
		{
		 ReShowButton(WorkGNButton[GN_i]);
		 if(WorkGNButton[GN_i].PressFlag==1)
		 {
		 QueuePush(&Stable1OnHead,&Stable1OnEnd,LoopFoun1[0].p,LoopFoun1[0].num);
		 }
		 else
		 {
		 QueuePush(&Stable1OffHead,&Stable1OffEnd,LoopFoun1[0].p,LoopFoun1[0].num);
		 }
		}
		break;
	 }
	}
	GN_i=-1;
	if(WorkKind!=-1&&WorkContrButton[HELP].PressFlag==0)
	{
	 if(Item_i==-1)
	 {
		Item_i=ReturnItem(WorkItem,ItemNum+1);
	 }
	 if(Item_i>0&&Item_i<=ItemNum)
	 {
		if(Item_i!=ItemNoNum)
		{
		 ReShowItem(WorkItem[Item_i]);
		 ReShowItem(WorkItem[ItemNoNum]);
		 ItemNoNum=Item_i;
		}
	 }
	 Item_i=-1;
	}
	if(ClsFlag==1)
	{
	 struct viewporttype  vp,newvp;
	 int oldcolor,swidth,sheight;
	 HideMouse();
	 getviewsettings(&vp);
	 oldcolor=getcolor();
	 setviewport(WorkWindow[1].left+8,WorkWindow[1].top+20,WorkWindow[1].right-8,WorkWindow[1].bottom-8,0);
	 getviewsettings( &newvp );
	 swidth=newvp.right-newvp.left;
	 sheight=newvp.bottom-newvp.top;
	 setfillstyle( SOLID_FILL,CYAN);
	 bar( 0, 0, swidth, sheight );
	 ShowMouse();
	 setcolor(oldcolor);
	 setviewport(vp.left,vp.top,vp.right,vp.bottom,0);
	 ClsFlag=0;
	}
	if(ItemShowFlag==1)
	{
	 for(i=0;i<ItemNum+1;i++)
	 {
		WorkItem[i].DrawFlag=1;
	 }
	 ShowItem(WorkItem,ItemNum+1);
	 ItemShowFlag=0;
	}
	if(oldWorkKind!=WorkKind)
	{
	 oldWorkKind=WorkKind;
	}
	ReturnVal=Run(Contr_i,(WorkKind<<8)|ItemNoNum);
	if(Contr_i!=RETURN&&Contr_i!=STOP)
	{
	 Contr_i=-1;
	}
	if(ReturnVal==-1&&oldReturnVal!=ReturnVal)
	{
	 RectPrint(PromptOutRect,1,RED,"打开文件错误! 按停止键停止。");
	}
	oldReturnVal=ReturnVal;
	if(ReturnVal==0x7fff)
	{
	 if(WorkGNButton[0].PressFlag==1)
	 {
		Item_i=ItemNoNum;
		Item_i%=ItemNum;
		Item_i++;
	 }
	}
	QueueFoun(&Stable1OnHead,&Stable1OnEnd,&Stable1OffHead,&Stable1OffEnd,Stable1Time,STABLEDELAYTIME);
	FreqFoun();
	ComOut();
 }
 LightSwitch=0;
 ClearPort();
 free(WorkMusicItem);
 free(WorkLoopItem);
 free(WorkRealTimeItem);
 free(WorkMusicItemText);
 for(i=0;i<=LoopItemNum;i++)
 {
	free(WorkLoopItemText[i]);
 }
 free(WorkLoopItemText);
 for(i=0;i<=RealTimeItemNum;i++)
 {
	free(WorkRealTimeItemText[i]);
 }
 free(WorkRealTimeItemText);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -