?? work.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 + -