예제 #1
0
파일: autofire.cpp 프로젝트: danvac/signus
int ConfirmAF(TUnit *u, TUnit *t)
{
    char b[200];
    int cm;
    static int last_cm = 0;

    if (ConAF_always) return TRUE;
    if (ConAF_table[u->ID]) return FALSE;
    switch (u->GetType()) {
        case unBumerang : case unPerseusAlfa : case unPerseusBeta :
        case unFalanga : case unPagoda : case unFlint :
        case unHorizont :
            return TRUE; break;
    }

    sprintf(b, SigText[TXT_READYSHOOT], u->GetName(), t->GetName());
    MouseShow();
    ShowHelpers();
    ShowHelpers();
    cm = PromtBox(b, cmYes | cmNo | cmAlways);
    HideHelpers();
    HideHelpers();
    MouseHide();
    if (cm == cmAlways) ConAF_always = TRUE;
    if (cm == cmNo) ConAF_table[u->ID] = TRUE;
    last_cm = cm;
    ConAF_unit = t;
    ConAF_used = TRUE;
    return (cm != cmNo);
}
예제 #2
0
파일: mouse.cpp 프로젝트: zarevucky/signus
int MouseInit()
{
	Mouse.MouseCurs[mcurArrow] = GraphicsDF->get("curarrow");
	Mouse.MouseCurs[mcurWait] = GraphicsDF->get("curwait");
	Mouse.MouseCurs[mcurSelect] = GraphicsDF->get("cursel");
	Mouse.MouseCurs[mcurSelectBig] = GraphicsDF->get("curselb");
	Mouse.MouseCurs[mcurSelectSmall] = GraphicsDF->get("cursels");
	Mouse.MouseCurs[mcurTarget] = GraphicsDF->get("curtar");
	Mouse.MouseCurs[mcurTargetBig] = GraphicsDF->get("curtarb");
	Mouse.MouseCurs[mcurTargetSmall] = GraphicsDF->get("curtars");
	Mouse.MouseCurs[mcurSupport] = GraphicsDF->get("cursupp");
	Mouse.MouseCurs[mcurLoadIn] = GraphicsDF->get("curload");
	Mouse.MouseCurs[mcurBuild] = GraphicsDF->get("curbuild");
	
	Mouse.back_buf = memalloc(32 * 32);
//	Mouse.cachebuf = memalloc(2*32 * 2*32);
//	Mouse.back = 0;
	
	Mouse.Locks = 1;
	MouseSetCursor(mcurArrow);
	MouseSetRect(0, 0, RES_X-1, RES_Y-1);
	MouseSetRatio(iniMouseRatioX, iniMouseRatioY);
	MouseSetPos(320, 240);
	
	MouseShow();
	return Mouse.back_buf != NULL;
}
예제 #3
0
파일: mouse.cpp 프로젝트: zarevucky/signus
void MouseUnfreeze()
{
	if (mouse_painting) return;
	if (Mouse.FreezeHided) {
		if (!(--Mouse.FreezeHided)) MouseShow();
	}
	Mouse.SuperLocks--;
}
예제 #4
0
void TContainer::Draw()
{
  MouseHide ();
  TShape f(Bounds, shptype, 2, EGA_DARKGRAY, EGA_WHITE);
  f.bg = shpbg;
  f.Draw();
  TGroup::Draw();
  MouseShow ();
}
예제 #5
0
파일: briefing.cpp 프로젝트: danvac/signus
void BriefScrollUp(int Num)
{
    int OldOfs = Ofset;
  if (Ofset-Num < 0) Ofset = 0;
  else Ofset -= Num;
    if (OldOfs != Ofset) {
    MouseHide();
    BriefRedrawScr();
    MouseShow();
  }
}
예제 #6
0
void TTransBox::Hide(int fast)
{
	MouseHide();
	if (iniEnhancedGuiOn && (!fast))
		for (int i = 0; i < w; i += w/OPEN_STEP) {Draw(i); SDL_Delay(15);}
	PutBitmap32(x, y, Bkg, w, h);
	MouseShow();
	unlockmem(Buf, w * h); unlockmem(Bkg, w * h);
	memfree(Bkg);
	memfree(Buf);
}
예제 #7
0
파일: briefing.cpp 프로젝트: danvac/signus
void BriefScrollDown(int Num)
{
    int OldOfs = Ofset;
  if (Ofset+Num > BigBufLines-MinNumOfYPixels) Ofset = BigBufLines-MinNumOfYPixels;
  else Ofset += Num;
    
    if (OldOfs != Ofset) {
    MouseHide();
    BriefRedrawScr();
    MouseShow();
  }
}
예제 #8
0
파일: FRAMEC.C 프로젝트: Inzaghi2012/EZP
void DrawFrame(HWND Window,int DrawLeft,int DrawTop,
               int DrawRight,int DrawBottom)
{
  int SaveColor;
  struct viewporttype TmpViewPort;
  int Left,Top,Right,Bottom;

  MouseHidden();
  SaveColor=getcolor();
  getviewsettings(&TmpViewPort);

  WindowGetRealRect(Window,&Left,&Top,&Right,&Bottom);

  DrawLeft+=Left;
  DrawTop+=Top;
  DrawRight+=Left;
  DrawBottom+=Top;

  setviewport(DrawLeft,DrawTop,DrawRight,DrawBottom,1);

  Left-=DrawLeft;
  Top-=DrawTop;
  Right-=DrawLeft;
  Bottom-=DrawTop;

  setfillstyle(1,FRAMEBKCOLOR);
  bar(Left,Top,Right,Bottom);
  setcolor(FRAMECOLOR);

  Left+=2;
  Top+=2+CHARHEIGHT/2;
  Right-=2;
  Bottom-=2;

  if (Left<=2)
     Vline3DDown(DrawLeft,DrawTop,DrawRight,DrawBottom,Left,Top,Bottom);
  if (Right>=Right-Left-3)
     Vline3DDown(DrawLeft,DrawTop,DrawRight,DrawBottom,Right-1,Top,Bottom);
  if (Top<=2+CHARHEIGHT/2)
     Hline3DDown(DrawLeft,DrawTop,DrawRight,DrawBottom,Left+1,Right,Top);
  if (DrawBottom>=Bottom-Top-3)
     Hline3DDown(DrawLeft,DrawTop,DrawRight,DrawBottom,Left+2,Right-1,Bottom);

  ViewportDisplayString(WindowGetTitle(Window),Left+8,Top-CHARHEIGHT/2,
                        FRAMECOLOR,FRAMEBKCOLOR);
  setviewport(TmpViewPort.left,TmpViewPort.top,TmpViewPort.right,
              TmpViewPort.bottom,TmpViewPort.clip);
  setcolor(SaveColor);
  MouseShow();
  return;
}
예제 #9
0
void TTransBox::Show(int fast)
{
	Buf = (byte*) memalloc(w * h);
	Bkg = (byte*) memalloc(w * h);
	lockmem(Buf, w * h); lockmem(Bkg, w * h);
	GetBitmap32(x, y, Bkg, w, h);

	MouseHide();
	if (iniEnhancedGuiOn && (!fast))
		for (int i = w; i > 0; i -= w/OPEN_STEP) {Draw(i); SDL_Delay(15);}
	memcpy(Buf, Templ, w * h);
	Draw(0);
	MouseShow();
}
예제 #10
0
파일: SCROLLC.C 프로젝트: Inzaghi2012/EZP
static long StatusProcedure(HWND Window,HMSG Message,long Param1,long Param2)
{
  switch (Message)
  {
    case MOUSELEFTDOUBLE:
         MessageInsert(1,MENUCOMMAND,MENU_GOTOPAGE,0);
         return 0L;
    case WINDOWINIT:
    case WMPAINT:
    case REDRAWMESSAGE:
    case DRAWWINDOW:
         if (GlobalCurrentPage > 0)
         {
           struct viewporttype TmpViewPort;
           int Left,Top,Right,Bottom;
           char msg[80];
           int pn;

           pn = PageHandleToNumber(GlobalCurrentPage)+1;
           if(TotalPage<pn) TotalPage=pn;       // ByHance, 96,4.4
           sprintf(msg,"ÇáËÉÅÅ°æ: µÚ%dÒ³,¹²%dÒ³",pn,TotalPage);
           if(fEditor)
           {        //-- "±à¼­" ---
              msg[4]='±'; msg[5]='à'; msg[6]='¼'; msg[7]='­';
              sprintf(&msg[strlen(msg)],"  ÐÐ:%d",CurrentRow);
           }
           if (TextIsOverwrite())
              strcat(msg,"  ¸Äд");

           WindowDefaultProcedure(Window,Message,Param1,Param2);
           getviewsettings(&TmpViewPort);
           MouseHidden();
           WindowGetRealRect(Window,&Left,&Top,&Right,&Bottom);
           setcolor(EGA_BLACK);
           rectangle(Left,Top,Right,Bottom);
           setviewport(Left+1,Top+1,Right-1,Bottom-1,1);
           setfillstyle(1,EGA_LIGHTGRAY);
           bar(0,0,Right-Left-3,Bottom-Top-3);
           ViewportDisplayString(msg,5,1,EGA_BLACK,EGA_LIGHTGRAY);
           setviewport(TmpViewPort.left,TmpViewPort.top,TmpViewPort.right,
                   TmpViewPort.bottom,TmpViewPort.clip);
           MouseShow();
         }
         break;
    default:
         return(WindowDefaultProcedure(Window,Message,Param1,Param2));
  }
  return 0L;
}
예제 #11
0
파일: mouse.cpp 프로젝트: zarevucky/signus
void MouseSetCursor(int cnum)
{
	if (Mouse.ActCur == cnum) return;
	Mouse.SuperLocks++;
	MouseHide();
	Mouse.ActCur = cnum;
	switch (cnum) {
		case mcurSupport :
		case mcurArrow : Mouse.xrpt = 0; Mouse.yrpt = 0; break;
		case mcurWait : Mouse.xrpt = 16; Mouse.yrpt = 16; break;
		case mcurBuild :
		case mcurLoadIn :
		case mcurSelect : 
		case mcurSelectBig : 
		case mcurSelectSmall : 
		case mcurTarget :
		case mcurTargetBig :                
		case mcurTargetSmall : Mouse.xrpt = 16; Mouse.yrpt = 16; break;
	}
	MouseShow();
	Mouse.SuperLocks--;
}
예제 #12
0
/**
 *  MouseSetBitmap changes the picture used for the mouse and its hotspot.
 *
 *  @param hot_spot_x -- x position for hot spot
 *  @param hot_spot_y -- y position for hot spot
 *  @param p_bitmap -- COMPRESSED Bitmap to use
 *
 *<!-----------------------------------------------------------------------*/
T_void MouseSetBitmap(
          T_word16 hot_spot_x,
          T_word16 hot_spot_y,
          T_bitmap *p_bitmap)
{
    DebugRoutine("MouseSetBitmap") ;
//    DebugCheck(p_bitmap != NULL) ;

    G_hotSpotX = hot_spot_x ;
    G_hotSpotY = hot_spot_y ;

//    if (G_mouseShowLevel > 0)
//        MouseErase() ;

    MouseHide();
    G_bitmap = p_bitmap ;
    MouseShow() ;
//    if (G_mouseShowLevel > 0)
//        MouseDraw() ;

    DebugEnd() ;
}
예제 #13
0
파일: SCROLLC.C 프로젝트: Inzaghi2012/EZP
void TellFileName()             // ByHance, 95,12.18
{
 #define X      32
 #define Y      8
 #define MAXLEN 26

   char name[128];
   int  SaveColor=getcolor();
   struct viewporttype ViewInformation;

   if(!DebugFileName[0])
      strcpy(name,"ÎļþδÃüÃû");
   else
   {  int len;
      strcpy(name,DebugFileName);
      if( (len=strlen(name))>MAXLEN)        // only display 32 chars
        memmove(name,&name[len-MAXLEN],MAXLEN+1);
      strupr(name);
   }

   getviewsettings(&ViewInformation);
   MouseHidden();
   setviewport(0,0,getmaxx(),getmaxy(),1);

   setcolor(EGA_BLUE);
   bar(X,Y,X+MAXLEN*ASC16WIDTH,Y+ASC16HIGHT);
   DisplayString(name,X,Y,EGA_WHITE,EGA_BLUE);

   setcolor(SaveColor);
   setviewport(ViewInformation.left,ViewInformation.top,
               ViewInformation.right,ViewInformation.bottom,
               ViewInformation.clip);
   MouseShow();

 #undef Y
 #undef X
 #undef MAXLEN
} /* TellFileName */
예제 #14
0
파일: PRINTPRO.C 프로젝트: Inzaghi2012/EZP
static void DrawLine(int x0,int y0,int x1,int y1,int color)
{
  int SaveColor;
  struct viewporttype SaveViewPort;

  MouseHidden();
  getviewsettings(&SaveViewPort);
  SaveColor=getcolor();

  setviewport(ScreenX,ScreenY,ScreenX+mXw-1,ScreenY+mYw-1,1);

  if (color<0) { setwritemode(XOR_PUT); color=-color; }
    else setwritemode(COPY_PUT);

  setcolor(color);
  line(x0,y0,x1,y1);

  setwritemode(COPY_PUT);
  setcolor(SaveColor);
  setviewport(SaveViewPort.left,SaveViewPort.top,SaveViewPort.right,
              SaveViewPort.bottom,SaveViewPort.clip);
  MouseShow();

}
예제 #15
0
파일: LISTBOXC.C 프로젝트: Inzaghi2012/EZP
static void DisplayVirtualRect(int x1,int y1,int x2,int y2)
{
 #ifdef __TURBOC__
   struct linesettingstype SaveLineStyle;
   getlinesettings(&SaveLineStyle);
   setlinestyle(4,0x5555,1);
 #else
   int old_style;
   old_style=getlinestyle();
   setlinestyle(0x5555);
 #endif

 MouseHidden();
 rectangle(x1,y1,x2,y2);

 #ifdef __TURBOC__
   setlinestyle(SaveLineStyle.linestyle,SaveLineStyle.upattern,
                SaveLineStyle.thickness);
 #else
   setlinestyle(old_style);
 #endif

 MouseShow();
}
예제 #16
0
파일: briefing.cpp 프로젝트: danvac/signus
void DrawOnScreen(int DrawBackground)
{
    int i;
    int WordLineCnt;
    int LocalWordCnt = 0;
    int LocalPicCnt = 0;
    int PixColCnt = 0;
    int ArtCnt = -1; // Citac odstavcu
    
    double PixLineCnt;
    
    if (DrawBackground != 0) {
    void *ptr;
    char buf[20];
    sprintf(buf, "%ibriefbk", iniResolution - 0x0100);
    ptr = GraphicsDF->get(buf);
    MouseHide();
    DrawPicture(ptr);
    MouseShow();
    memfree(ptr);
  }
  
  for (i = 0; i <= NumOfLines; i++) {
    WordLineCnt = -1;
    PixLineCnt = 0;
    
    do {
      WordLineCnt++;
        LocalWordCnt++;
        
      if (WordsTypes[LocalWordCnt] == 1) {
            if (LocalWordCnt != 1) i++;
            ArtCnt++;
        PixLineCnt = GetStrWidth("  ", NormalFont);
        if (LocalWordCnt != 1) PixColCnt += ArticleSpace*2;
        WordLineCnt = 0;
        }
      if (Links[LocalWordCnt] == 0) 
        PutStr (BigDrawBuffer, LinePixels, PixLineCnt, PixColCnt,
                Words[LocalWordCnt], NormalFont, clrWhite, clrBlack);
      else {
        PutStr (BigDrawBuffer, LinePixels, PixLineCnt, PixColCnt,
                Words[LocalWordCnt], NormalFont, clrRed, clrBlack);    
        LastLink++;
        LinksXY[LastLink].x1 = PixLineCnt;
        LinksXY[LastLink].x2 = PixLineCnt+GetStrWidth(Words[LocalWordCnt],NormalFont);
        LinksXY[LastLink].y1 = PixColCnt;
        LinksXY[LastLink].y2 = PixColCnt + 16;
        Links2[LastLink] = Links[LocalWordCnt];
      }
      
      if (WordsTypes[LocalWordCnt] == 4) {
        // Obrazky (jee...)
        LocalPicCnt++;
        
        void *ptr;
        ptr = GraphicsDF->get(PicFiles[LocalPicCnt]);
        PixColCnt += 32;
        CopyBmpNZ(BigDrawBuffer, LinePixels, (LinePixels-PicSize[LocalPicCnt].x)/2, 
                  PixColCnt, ptr, PicSize[LocalPicCnt].x, PicSize[LocalPicCnt].y);
        PixColCnt += (PicSize[LocalPicCnt].y-16);
        
        memfree(ptr);
      }
            
        PixLineCnt += (double)GetStrWidth(Words[LocalWordCnt], NormalFont);
        PixLineCnt += LineSpace[i];
        
        if (WordsTypes[LocalWordCnt] == 3) goto LastWord;
                
    } while (WordsTypes[LocalWordCnt] != 2);
    PixColCnt += 16;
    
  }

  LastWord:
  
  BriefRedrawScr();
  
}
예제 #17
0
파일: DIALOGC.C 프로젝트: Inzaghi2012/EZP
static void PlayMusic(unsigned short MusicTable[],int TableLen)
{
  int i;
  int  SaveColor;
  struct viewporttype ViewInformation;
  int flash=0;
  unsigned long *p=(unsigned long *)0x46c;
  unsigned long now,end,start;

  SetIntSign();

  if(MusicTable==Music2)
  {
      flash=1;
      SaveColor=getcolor();
      getviewsettings(&ViewInformation);
      MouseHidden();
      setviewport(0,0,getmaxx(),getmaxy(),1);
      setcolor(EGA_BLUE);
  }

  start=*p;
  for( i=0; i<TableLen; i++ ) {
       sound(MusicTable[i]);

       //----- delay --------
       now=*p;
       end=now+((float)MusicTable[i+TableLen]*18.2/1000+0.5);
       while(now<end)
       {
          //p=(unsigned long *)0x46c;
          now=*p;
          if(now-start>=6)
          {
             start=now;
            #define X      32      /* see also, scrollc.c{TellFileName) */
            #define Y      8
            #define MAXLEN 28
             if(flash==1)
             {
                flash=2;
                bar(X,Y,X+MAXLEN*ASC16WIDTH,Y+ASC16HIGHT);
             } else
             if(flash==2)
             {
                flash=1;
                DisplayString(DebugFileName,X,Y,EGA_WHITE,EGA_BLUE);
             }
            #undef Y
            #undef X
            #undef MAXLEN
          }
          now=*p;
       }

       nosound();
  }

  if(flash)
  {
     setcolor(SaveColor);
     setviewport(ViewInformation.left,ViewInformation.top,
               ViewInformation.right,ViewInformation.bottom,
               ViewInformation.clip);
     MouseShow();
  }
  ClearIntSign();
}
예제 #18
0
파일: DIALOGC.C 프로젝트: Inzaghi2012/EZP
static long MessageBoxProcedure(HWND Window,HMSG Message,long Param1,long Param2)
{
  int ch;
  int Length,DisplayLeft,DisplayTop,i,DisplayLength,VLength;
  unsigned char MidString[MAXMESSAGEDISPLAYLENGTH/(CHARWIDTH/2)+1];
  unsigned char *p;
  struct viewporttype TmpViewPort;
  int Left,Top,Right,Bottom,CharPoint1,CharPoint2;

  static char BkDoor_st=0;

  switch (Message)
  {
    case DRAWWINDOW:
         DialogDefaultProcedure(Window,Message,Param1,Param2);

         MouseHidden();
         getviewsettings(&TmpViewPort);

         WindowGetRealRect(Window,&Left,&Top,&Right,&Bottom);
         setviewport(Left,Top,Right,Bottom,1);

         CharPoint1=0;
         Length=strlen(MessageMessage);
         VLength=0;
         DisplayTop=50;
         while (CharPoint1<Length)
         {
           for (CharPoint2=CharPoint1;CharPoint2<Length;CharPoint2++)
               if (MessageMessage[CharPoint2]=='\n')
                  break;
           VLength=(CharPoint2-CharPoint1)*CHARWIDTH/2;
           for (i=0;i<VLength;i+=DisplayLength*(CHARWIDTH/2))
           {
             DisplayLength=MAXMESSAGEDISPLAYLENGTH/(CHARWIDTH/2);
             if ((i+(CharPoint1+DisplayLength)*(CHARWIDTH/2)<VLength)
                 &&IsInChineseChar(MessageMessage,
                   i/(CHARWIDTH/2)+CharPoint1+DisplayLength))
                DisplayLength--;
             if (DisplayLength>CharPoint2-CharPoint1-i/(CHARWIDTH/2))
                DisplayLength=CharPoint2-CharPoint1-i/(CHARWIDTH/2);
             strncpy(MidString,&MessageMessage[i/(CHARWIDTH/2)+CharPoint1],
                     DisplayLength);
             MidString[DisplayLength]=0;
    // DisplayLeft=WindowGetWidth(Window)/2-strlen(MidString)/2*(CHARWIDTH/2);
           DisplayLeft=(WindowGetWidth(Window)-MAXMESSAGEDISPLAYLENGTH)/2+8;
             ViewportDisplayString(MidString,DisplayLeft,DisplayTop,
                                   MESSAGECOLOR,MESSAGEBKCOLOR);
             DisplayTop+=CHARHEIGHT+4;
           }
           CharPoint1=CharPoint2+1;
         }
         setviewport(TmpViewPort.left,TmpViewPort.top,TmpViewPort.right,
                     TmpViewPort.bottom,TmpViewPort.clip);
         MouseShow();

         BkDoor_st=0;
         break;
    case MESSAGEBOXNODO:
         MessageInsert(Window,DIALOGBOXEND,Message,0l);
         break;

    case WINDOWINIT:            // ByHance, 95,12.19  for back door init
         BkDoor_st=0;
         return(DialogDefaultProcedure(Window,Message,Param1,Param2));

    case KEYDOWN:
         ch=toupper(Param1);

         switch (ch)
         {
           HWND MidWindow;

           default :
                BkDoor_st=0; break;
           case 'N':
                if (BkDoor_st==8)
                {
                    BkDoor_st++;
                    return(TRUE);
                }
                BkDoor_st=0;
                goto lbl_proc_button;
           case 'Y':
                if (BkDoor_st==15)              // ...(Music)JERRY
                {
                   static unsigned char REDTEK_Company[]={
                      'À'-4,'í'-5,
                      'µ'-6,'Â'-7,
                      'É'-8,'Ì'-9,
                      'Ó'-10,'Ã'-11,
                      '¼'-12,'¼'-13,
                      'Ê'-14,'õ'-15,
                      'Ó'-16,'Ð'-17,
                      'Ï'-18,'Þ'-19,
                      '¹'-20,'«'-21,
                      'Ë'-22,'¾'-23,
                      '°'-24,'æ'-25,
                      'È'-26,'¨'-27,
                      'Ë'-28,'ù'-29,
                      'Ó'-30,'Ð'-31
                   };
                   strcpy(MidString,DebugFileName);
                   for(i=0;i<28;i++) DebugFileName[i]=REDTEK_Company[i]+i+4;
                   TellFileName();
                   PlayMusic(Music2,JerryMUSICLen);
                   strcpy(DebugFileName,MidString);
                   TellFileName();
                   return(TRUE);
                }
           lbl_proc_button:
                MidWindow=WindowGetChild(Window);        //
                while (MidWindow)
                {
                  if( strlen(WindowGetTitle(MidWindow))==5
                  && DataofWindows[MidWindow].Title[3]==ch)
                  {
                     ch=WindowGetUserData(MidWindow);
                     MessageInsert(Window,ch,(long)ch,0l);
                     return(TRUE);
                  }
                  MidWindow=WindowGetNext(MidWindow);
                }
                break;
        /*---------- For back door (Press 'REDTEK95')----------*/
           case 'R':
                if(BkDoor_st==13||BkDoor_st==14)
                     BkDoor_st++;
                else
                     BkDoor_st=1;
                return(TRUE);
           case 'E':
                if (BkDoor_st==1||BkDoor_st==4||BkDoor_st==12)
                     BkDoor_st++;
                else
                if(BkDoor_st==10)       // 'REDTEKHANCE'
                {
                   PlayMusic(Music1,HanceMUSICLen);
                   BkDoor_st++;
                }
                else BkDoor_st=0;
                return(TRUE);
           case 'D':
                if (BkDoor_st==2) BkDoor_st++; else BkDoor_st=0;
                return(TRUE);
           case 'T':
                if (BkDoor_st==3) BkDoor_st++; else BkDoor_st=0;
                return(TRUE);
           case 'K':
                if (BkDoor_st==5) BkDoor_st++; else BkDoor_st=0;
                return(TRUE);
           case 'H':
           case '9':
                if (BkDoor_st==6) BkDoor_st++; else BkDoor_st=0;
                return(TRUE);
           case 'A':
                if (BkDoor_st==7) BkDoor_st++; else BkDoor_st=0;
                return(TRUE);
           case 'C':
                if (BkDoor_st==9) BkDoor_st++; else BkDoor_st=0;
                return(TRUE);
           case 'J':
                if (BkDoor_st==11) BkDoor_st++; else BkDoor_st=0;
                return(TRUE);

           case '5':
                if (BkDoor_st==7)       // that is it!
                {
                   MouseHidden();
                   getviewsettings(&TmpViewPort);
                   WindowGetRealRect(Window,&Left,&Top,&Right,&Bottom);
                   setviewport(Left,Top,Right,Bottom,1);

                   setcolor(MESSAGEBKCOLOR);

                   Bottom-=30+SYSBUTTONWIDTH*3/2;  // left for button height
                   VLength=Bottom-Top;
                   if(VLength<3*(ASC16HIGHT+4)+50)
                   {            // "±±¾©ÀíµÂÉÌÓü¼ÊõÓÐÏÞ¹«Ë¾°æȨËùÓÐ"
                     p=&MidString[0];
                     *p++='±±'>>8;  *p++='±±'&0xff;
                     *p++='¾©'>>8; *p++='¾©'&0xff;
                     *p++='Àí'>>8; *p++='Àí'&0xff;
                     *p++='µÂ'>>8; *p++='µÂ'&0xff;
                     *p++='ÉÌ'>>8; *p++='ÉÌ'&0xff;
                     *p++='ÓÃ'>>8; *p++='ÓÃ'&0xff;
                     *p++='¼¼'>>8; *p++='¼¼'&0xff;
                     *p++='Êõ'>>8; *p++='Êõ'&0xff;
                     *p=0;
                     strcat(MidString,"ÓÐÏÞ¹«Ë¾°æȨËùÓÐ");
                   }
                   else
                   {
                     p=&MidString[0];
                     *p++='±±'>>8; *p++='±±'&0xff;
                     *p++='¾©'>>8; *p++='¾©'&0xff;
                     *p++='Àí'>>8; *p++='Àí'&0xff;
                     *p++='µÂ'>>8; *p++='µÂ'&0xff;
                     *p++='ÉÌ'>>8; *p++='ÉÌ'&0xff;
                     *p++='ÓÃ'>>8; *p++='ÓÃ'&0xff;
                     *p++='¼¼'>>8; *p++='¼¼'&0xff;
                     *p++='Êõ'>>8; *p++='Êõ'&0xff;
                     *p++='ÓÐ'>>8; *p++='ÓÐ'&0xff;
                     *p++='ÏÞ'>>8; *p++='ÏÞ'&0xff;
                     *p++='¹«'>>8; *p++='¹«'&0xff;
                     *p++='˾'>>8; *p++='˾'&0xff;
                     *p=0;
                     DisplayLeft=WindowGetWidth(Window)/2
                           -strlen(MidString)/2*(CHARWIDTH/2);
                     DisplayTop=VLength-3*(ASC16HIGHT+4);
                     // clear this area
                     bar(4,DisplayTop-8,WindowGetWidth(Window)-4,
                            DisplayTop+3*(ASC16HIGHT+4)+4);
                     ViewportDisplayString(MidString,DisplayLeft,DisplayTop,
                                   MESSAGECOLOR,MESSAGEBKCOLOR);

                     MidString[0]='(';
                     MidString[1]='R';
                     MidString[2]='E';
                     MidString[3]='D';
                     MidString[4]='T';
                     MidString[5]='E';
                     MidString[6]='K';
                     MidString[7]=')';
                     p=&MidString[8];
                     *p++='°æ'>>8; *p++='°æ'&0xff;
                     *p++='Ȩ'>>8; *p++='Ȩ'&0xff;
                     *p++='Ëù'>>8; *p++='Ëù'&0xff;
                     *p++='ÓÐ'>>8; *p++='ÓÐ'&0xff;
                     *p=0;
                     DisplayLeft=WindowGetWidth(Window)/2
                           -strlen(MidString)/2*(CHARWIDTH/2);
                     DisplayTop=VLength-2*(ASC16HIGHT+4);
                     ViewportDisplayString(MidString,DisplayLeft,DisplayTop,
                                   MESSAGECOLOR,MESSAGEBKCOLOR);

                     {  unsigned char author[]="ÖÆ×÷:º«Õ×Ç¿¡¢ÖÜÞÈ¡¢ÑîÏþËÉ";
                        strcpy(MidString,author);
                     }
                   }
                   DisplayTop=VLength-(ASC16HIGHT+4);
                   DisplayLeft=WindowGetWidth(Window)/2
                           -strlen(MidString)/2*(CHARWIDTH/2);
                     // clear this area
                   bar(4,DisplayTop-4,
                       WindowGetWidth(Window)-4,DisplayTop+ASC16HIGHT+4);
                   ViewportDisplayString(MidString,DisplayLeft,DisplayTop,
                                   MESSAGECOLOR,MESSAGEBKCOLOR);

                   setviewport(TmpViewPort.left,TmpViewPort.top,TmpViewPort.right,
                               TmpViewPort.bottom,TmpViewPort.clip);
                   MouseShow();
                }
예제 #19
0
파일: PRINTPRO.C 프로젝트: Inzaghi2012/EZP
void InitSubPage(HWND Window,int pt_w,int pt_h,int pg_w,int pg_h)
{
   HWND Mid;
   int xw,yw,i,j;
   char p[40];
   int SaveColor;
   struct viewporttype SaveViewPort;


   WaitMessageEmpty();

   MouseHidden();
   getviewsettings(&SaveViewPort);
   SaveColor=getcolor();

   Mid=WindowGetFather(Window);
   ScreenDispWidth=WindowGetWidth(Window)-10;
   ScreenDispHeight=WindowGetHeight(Window)-10;
   WinX=ScreenX=WindowGetLeft(Window)+WindowGetLeft(Mid);
   WinY=ScreenY=WindowGetTop(Window)+WindowGetTop(Mid);

   setviewport(WinX,WinY,WinX+ScreenDispWidth+9,WinY+ScreenDispHeight+9,1);
   setwritemode(COPY_PUT);
   setcolor(EGA_WHITE);
   bar(0,0,ScreenDispWidth+9,ScreenDispHeight+9);

   SCRscaleX=SubP->TotalX/ScreenDispWidth*1.05;
   SCRscaleY=SubP->TotalY/ScreenDispHeight*1.05;

   if (SCRscaleX>SCRscaleY)
        SCRscaleY=SCRscaleX;
   else
        SCRscaleX=SCRscaleY;

   xw=mXw=pg_w/SCRscaleX;
   yw=mYw=pg_h/SCRscaleY;

   ScreenX=ScreenX+5+(ScreenDispWidth-mXw)/2;
   ScreenY=ScreenY+5+(ScreenDispHeight-mYw)/2;

   //setcolor(EGA_DARKGRAY);       //gray
   setcolor(12);
   setviewport(0,0,getmaxx(),getmaxy(),1);
   rectangle(ScreenX,ScreenY,ScreenX+xw,ScreenY+yw);

   setviewport(WinX,WinY,WinX+ScreenDispWidth+9,WinY+ScreenDispHeight+9,1);

   for (i=0;i<PG.Blocks;i++)
   {
      int x0,x1,y0,y1;
      mXw=ScreenX-WinX;
      mYw=ScreenY-WinY;
      x0=-PG.PageBlock[i].Xoffset*1000/25.4/SCRscaleX+mXw;
      y0=-PG.PageBlock[i].Yoffset*1000/25.4/SCRscaleY+mYw;
      x1=x0+pt_w/SCRscaleX;
      y1=y0+pt_h/SCRscaleY;
      if (PG.PageBlock[i].Reveser&1)
        setcolor(14);
      else
        setcolor(11);
      rectangle(x0,y0,x1,y1);
   }

   setwritemode(COPY_PUT);
   setcolor(SaveColor);
   setviewport(SaveViewPort.left,SaveViewPort.top,SaveViewPort.right,
              SaveViewPort.bottom,SaveViewPort.clip);
   MouseShow();

}
예제 #20
0
파일: DIALOGC.C 프로젝트: Inzaghi2012/EZP
long DialogDefaultProcedure(HWND Window,HMSG Message,long Param1,long Param2)
{
  switch (Message)
  {
    case KEYDOWN:
         switch (MAKELO(Param1))
         {
           case TAB:
                WindowTableOrderNext(Window);
                break;
           case SHIFT_TAB:
                WindowTableOrderPrev(Window);
                break;
           case ESC:
                Param1=DIALOGBOXCANCEL;
                //MessageInsert(Window,DIALOGBOXCANCEL,Param1,Param2);
                //break;
                goto proc_msg;
           case ENTER:
                Param1=DIALOGBOXOK;
                //MessageInsert(Window,DIALOGBOXOK,Param1,Param2);
            proc_msg:
                MessageInsert(Window,(HMSG)Param1,Param1,Param2);
                break;
         }
         break;
    case REDRAWMESSAGE:
         Param2=MAKELONG( WindowGetWidth(Window),WindowGetHeight(Window) );
         WindowDefaultProcedure(Window,Message,0L,Param2);
         break;
    case WINDOWCLOSE:
         Param1=DIALOGBOXCANCEL;
    case DIALOGBOXEND:
         MessageGo(Window,WINDOWQUIT,Message,0l);
         GlobalNotDisplay=1;
         WindowDefaultProcedure(Window,WINDOWCLOSE,Param1,Param2);
         GlobalNotDisplay=0;
 //------ ByHance, 96,1.8 ---
         if(DialogImageN)
         {
           int Left,Top,Right,Bottom;
           struct viewporttype TmpViewPort;

           MouseHidden();
           getviewsettings(&TmpViewPort);
           WindowGetRealRect(1,&Left,&Top,&Right,&Bottom);
           setviewport(Left,Top,Right,Bottom,1);

           putimage( WindowGetLeft(Window)-1,WindowGetTop(Window)-1,
                     DialogImage[--DialogImageN], COPY_PUT );
           free(DialogImage[DialogImageN]);

           setviewport(TmpViewPort.left,TmpViewPort.top,TmpViewPort.right,
                       TmpViewPort.bottom,TmpViewPort.clip);
           MouseShow();
         }
         return(Param1);
    case DIALOGBOXOK:
         if (WindowDefaultProcedure(Window,Message,Param1,Param2)==FALSE)
            break;
    case DIALOGBOXCANCEL:
         MessageInsert(Window,DIALOGBOXEND,Message,0l);
         break;
    case MOUSEMOVE:
         DialogMouseMove(Window,Message,Param1,Param2); // ByHance, 95,12.6
         break;
    default:
         return(WindowDefaultProcedure(Window,Message,Param1,Param2));
  }
  return(TRUE);
}
예제 #21
0
파일: PRINTPRO.C 프로젝트: Inzaghi2012/EZP
static void DrawUserPage(float x,float y,float sx,float sy,int r,int color)
{
  #define PN 10
  char xy[][2]={{0,6},{0,3},{0,1},{1,0},{2,0},{3,1},{3,2},{2,3},{0,3},{3,6}};
  char xy2[10][2];
  int SaveColor,i;
  struct viewporttype SaveViewPort;
  int mx,my,xw,yw;
  float xs,ys;

  MouseHidden();
  getviewsettings(&SaveViewPort);
  SaveColor=getcolor();

  setviewport(ScreenX,ScreenY,ScreenX+mXw-1,ScreenY+mYw-1,1);

  if (!color)
  {
    setwritemode(COPY_PUT);
    setcolor(EGA_WHITE);
    bar(0,0,mXw-1,mYw-1);
    setwritemode(XOR_PUT);
    setcolor(abs(LEADCOLOR));
    for (i=0;i<ColLeadNum;i++)
     {
        mx=(int)(ColLead[i]/SCRscaleX);
        line(mx,0,mx,mYw);
     }

    for (i=0;i<RowLeadNum;i++)
     {
        my=(int)(RowLead[i]/SCRscaleY);
        line(0,my,mXw,my);
     }
  }
  else
  {

  r=r%4+(GlobalReverse&1)*4;
  for (i=0;i<PN;i++)
  {
    switch(r)
    {
        case 0:
                xy2[i][0]=xy[i][0];
                xy2[i][1]=xy[i][1];
                break;
        case 1:
                xy2[i][0]=6-xy[i][1];
                xy2[i][1]=xy[i][0];
                break;
        case 2:
                xy2[i][0]=3-xy[i][0];
                xy2[i][1]=6-xy[i][1];
                break;
        case 3:
                xy2[i][0]=xy[i][1];
                xy2[i][1]=3-xy[i][0];
                break;
        case 4:
                xy2[i][0]=3-xy[i][0];
                xy2[i][1]=xy[i][1];
                break;
        case 5:
                xy2[i][0]=xy[i][1];
                xy2[i][1]=xy[i][0];
                break;
        case 6:
                xy2[i][0]=xy[i][0];
                xy2[i][1]=6-xy[i][1];
                break;
        case 7:
                xy2[i][0]=6-xy[i][1];
                xy2[i][1]=3-xy[i][0];
                break;
    }
  }
    if (color<0) { setwritemode(XOR_PUT); color=-color; }
    else setwritemode(COPY_PUT);

    setcolor(color);

    mx=x/SCRscaleX;
    my=y/SCRscaleY;
    xw=PageW*sx/SCRscaleX;
    yw=PageH*sy/SCRscaleY;

    if (r&1)
    {
    myrectangle(mx,my,mx+yw,my+xw);
    mx=mx+yw/4;
    my=my+xw/4;
    ys=(float)xw/6;
    xs=(float)yw/12;
    }
      else
    {
    myrectangle(mx,my,mx+xw,my+yw);
    mx=mx+xw/4;
    my=my+yw/4;
    xs=(float)xw/6;
    ys=(float)yw/12;
    }

    for (i=0;i<PN-1;i++)
    {
       line(mx+xs*xy2[i][0],my+ys*xy2[i][1],mx+xs*xy2[(i+1)%PN][0],my+ys*xy2[(i+1)%PN][1]);
       if (i<PN-2)
       line(mx+xs*xy2[i+1][0],my+ys*xy2[i+1][1],mx+xs*xy2[(i+1)%PN][0],my+ys*xy2[(i+1)%PN][1]);
    }
    line(mx+xs*xy2[8][0],my+ys*xy2[8][1],mx+xs*xy2[8][0],my+ys*xy2[8][1]);

  }

  setwritemode(COPY_PUT);
  setcolor(SaveColor);
  setviewport(SaveViewPort.left,SaveViewPort.top,SaveViewPort.right,
              SaveViewPort.bottom,SaveViewPort.clip);
  MouseShow();

}
예제 #22
0
파일: PAGEC.C 프로젝트: Inzaghi2012/EZP
void PageDraw(HPAGE PageHandle,HWND Window,int DrawLeft,
              int DrawTop,int DrawRight,int DrawBottom)
{
  int SaveColor;
  struct viewporttype TmpViewPort;
  #ifdef __TURBOC__
    struct linesettingstype SaveLineStyle;
  #else
    unsigned short old_style;
  #endif

  ORDINATETYPE BoxDrawLeft,BoxDrawTop,BoxDrawRight,BoxDrawBottom;
  ORDINATETYPE BoxXY[2*MAXPOLYGONNUMBER];
  HBOX HBox;
  Pages *MidPage;
  int Left,Top,Right,Bottom;
  int PageLeft,PageTop,PageRight,PageBottom;

  WindowGetRect(Window,&Left,&Top,&Right,&Bottom);
  if (!RectangleIsInRectangle(DrawLeft,DrawTop,DrawRight,DrawBottom,
          Left,Top,Right,Bottom))
     return;

  if (DrawRight>=Right-Left)
     DrawRight=Right-Left-1;
  if (DrawBottom>=Bottom-Top)
     DrawBottom=Bottom-Top-1;
  if (DrawLeft<0)
     DrawLeft=0;
  if (DrawTop<0)
     DrawTop=0;
  BoxDrawLeft=WindowXToUserX(DrawLeft);
  BoxDrawTop=WindowYToUserY(DrawTop);
  BoxDrawRight=WindowXToUserX(DrawRight);
  BoxDrawBottom=WindowYToUserY(DrawBottom);

  MidPage=HandleLock(ItemGetHandle(PageHandle));
  if (MidPage==NULL)
     return;
  PageLeft=UserXToWindowX(0);
  PageTop=UserYToWindowY(0);
  PageRight=UserXToWindowX(PageGetPageWidth(MidPage));
  PageBottom=UserYToWindowY(PageGetPageHeight(MidPage));

  if(GlobalTextBlockStart<GlobalTextBlockEnd) // must clear now block
    DisplayBlock(GlobalBoxHeadHandle,GlobalTextBlockStart,GlobalTextBlockEnd);

  SaveColor=getcolor();
  MouseHidden();
  TextCursorOff();
  getviewsettings(&TmpViewPort);

  setviewport(Left,Top,Right,Bottom,1);

  /*---- clear page -----*/
  setfillstyle(1,EGA_WHITE);
  bar(DrawLeft,DrawTop,DrawRight,DrawBottom);
  /*--- draw page border ---*/
  setcolor(PAGEBORDERCOLOR);
  rectangle(PageLeft,PageTop,PageRight,PageBottom);

  if(!IsInGlobalBrowser())
       DrawPageFootHead(PageHandle,TRUE,TRUE);

  if(!fEditor)
  {
      #ifdef __TURBOC__
        getlinesettings(&SaveLineStyle);
        setlinestyle(4,0x5555,1);
      #else
        old_style=getlinestyle();
        setlinestyle(0xffff);
      #endif

      /*--- draw page shadow ---*/
      setcolor(EGA_DARKGRAY);
      line(((PageLeft>0)?PageLeft:0)+3,PageBottom+1,PageRight+3,PageBottom+1);
      line(((PageLeft>0)?PageLeft:0)+3,PageBottom+2,PageRight+3,PageBottom+2);
      line(((PageLeft>0)?PageLeft:0)+3,PageBottom+3,PageRight+3,PageBottom+3);
      line(PageRight+1,((PageTop>0)?PageTop:0)+3,PageRight+1,PageBottom+3);
      line(PageRight+2,((PageTop>0)?PageTop:0)+3,PageRight+2,PageBottom+3);
      line(PageRight+3,((PageTop>0)?PageTop:0)+3,PageRight+3,PageBottom+3);

      /*--- draw box align line ---*/
      setcolor(EGA_LIGHTBLUE);
     /*------------  use 0x5555 --
      #ifdef __TURBOC__
        setlinestyle(4,0x5f5f,1);
      #else
        setlinestyle(0x5f5f);
      #endif
     ----------------*/
      setlinestyle(0x8888);
      PageLeft=UserXToWindowX(PageGetMarginLeft(MidPage))-1;
      PageTop=UserYToWindowY(PageGetMarginTop(MidPage))-1;
      PageRight=UserXToWindowX(PageGetPageWidth(MidPage)-
                               PageGetMarginRight(MidPage))+1;
      PageBottom=UserYToWindowY(PageGetPageHeight(MidPage)-
                                PageGetMarginBottom(MidPage))+1;
      line(UserXToWindowX(0),PageTop,
           UserXToWindowX(PageGetPageWidth(MidPage)),PageTop);
      line(UserXToWindowX(0),PageBottom,
           UserXToWindowX(PageGetPageWidth(MidPage)),PageBottom);
      line(PageLeft,UserYToWindowY(0),PageLeft,
           UserYToWindowY(PageGetPageHeight(MidPage)));
      line(PageRight,UserYToWindowY(0),PageRight,
           UserYToWindowY(PageGetPageHeight(MidPage)));

      #ifdef __TURBOC__
        setlinestyle(SaveLineStyle.linestyle,SaveLineStyle.upattern,
                     SaveLineStyle.thickness);
      #else
        setlinestyle(old_style);
      #endif
  }

  HandleUnlock(ItemGetHandle(PageHandle));

  setcolor(EGA_BLACK);

  HBox=PageGetBoxHead(PageHandle);
  while (HBox)
  {
    ORDINATETYPE BoxLeft,BoxTop,BoxRight,BoxBottom;
    TextBoxs *MidBox;
    int BoxDots;

    MidBox=HandleLock(ItemGetHandle(HBox));
    if (MidBox==NULL)
       break;
    BoxGetPolygonDrawBorder((Boxs *)MidBox,&BoxDots,BoxXY);
    PolygonGetMinRectangle(BoxDots,BoxXY,&BoxLeft,&BoxTop,&BoxRight,&BoxBottom);
    if (RectangleIsInRectangle(BoxDrawLeft,BoxDrawTop,BoxDrawRight,BoxDrawBottom,
         BoxLeft,BoxTop,BoxRight,BoxBottom)||TextBoxGetBoxType(MidBox)==TEXTBOX)
    {
       HBOX LinkBox;

       BoxDraw(HBox,
               (HBox==GlobalBoxHeadHandle)?DRAWBORDERWITHRECATNGLE:
               DRAWVIRTUALBORDOR);

       if (TextBoxGetBoxType(MidBox)==TEXTBOX &&
           (GlobalBoxTool==IDX_UNLINK||GlobalBoxTool==IDX_LINK) &&
           (LinkBox=TextBoxGetPrevLinkBox(MidBox))!=0 )
       {
          ORDINATETYPE Left2,Top2,Right2,Bottom2;

          BoxGetRect(HBox,&BoxLeft,&BoxTop,&BoxRight,&BoxBottom);
          BoxXY[0]=BoxLeft;     BoxXY[1]=BoxTop;
          BoxPolygonRotate(1,BoxXY,(PictureBoxs *)MidBox);
          BoxPolygonToWindowXY(1,BoxXY);
          BoxLeft=BoxXY[0];     BoxTop=BoxXY[1];

          if(ItemGetFather(LinkBox)==PageHandle)
          {
              BoxGetRect(LinkBox,&Left2,&Top2,&Right2,&Bottom2);
              BoxXY[0]=Right2;  BoxXY[1]=Bottom2;
              BoxPolygonRotate(1,BoxXY,HandleLock(ItemGetHandle(LinkBox)));
              HandleUnlock(ItemGetHandle(LinkBox));
              BoxPolygonToWindowXY(1,BoxXY);
          }
          else
          {
              BoxXY[0]=getmaxx();  BoxXY[1]=0;    // screen (Right,Top)
          }

          line(BoxLeft,BoxTop,BoxXY[0],BoxXY[1]);
       }
    }
    HandleUnlock(ItemGetHandle(HBox));
    HBox=ItemGetNext(HBox);
  }

  if (GlobalGroupGetSign())
     GroupDrawAllBorder(DRAWXORBORDER);
  setviewport(TmpViewPort.left,TmpViewPort.top,TmpViewPort.right,
              TmpViewPort.bottom,TmpViewPort.clip);
  setcolor(SaveColor);
  MouseShow();
  return;
}
예제 #23
0
파일: mainmenu.cpp 프로젝트: danvac/signus
void ShowCredits()
{
    char *buf;
    char line[200];
    void *ptr, *ptr2;
    char *c;
    int i, curln, lastchar;
    int oldvol = MusicVolume;
    
    TEvent e;

    SetVolume(EffectsVolume, SpeechVolume, 64);
    MouseHide();
    ClearScr();
    PlayMusic("solution.s3m");


    do {GetEvent(&e);} while (e.What != evNothing);
    e.What = evNothing;
 
    ptr = memalloc(RES_X * RES_Y);
    memset(ptr, 0, 800*600);
    ptr2 = GraphicsDF->get("mmnulogo");
    memcpy(ptr, ptr2, 800 * 140);
    memfree(ptr2);

    buf = (char*) TextsDF->get("credits");
    ptr2 = memalloc(RES_X * RES_Y);
    memcpy(ptr2, ptr, RES_X * RES_Y);
    DrawPicture(ptr);

    for (curln = 520; TRUE; curln -= 1) {
        i = 0; line[0] = 0; lastchar = 0;
        for (c = buf; *c != 0; c++) {
            if (*c == '\n') {
                line[lastchar] = 0;
                if (strcmp(line, "END") == 0) break;
                i++;
                if (strlen(line) == 0) continue;
                if ((curln + 20 * i > 60) && (curln + 20 * i < 540)) 
                    PutStr(ptr, 800, 400 - GetStrWidth(line+1, NormalFont)/2,
                           curln + 20 * i, line+1, NormalFont, 
                           (line[0] == '*') ? 9/*red*/ : 2/*white*/, 0);
                line[0] = 0; lastchar = 0;
            }
            else line[lastchar++] = *c;                
        }
        PutBitmap(0, 220, ((char*)ptr) + 220 * 800, 800, 300);
        memcpy(ptr, ptr2, 800*600);
        SDL_Delay(20);

        GetEvent(&e);
        if ((e.What == evKeyDown) || (e.What == evMouseDown)) break;
    }

    memfree(ptr);
    memfree(ptr2);
    memfree(buf);
    MouseShow();
    ClearScr();
    SetVolume(EffectsVolume, SpeechVolume, oldvol);
}
예제 #24
0
파일: DIALOGC.C 프로젝트: Inzaghi2012/EZP
static int CreatDialogBox(Dialogs *DialogItems,
                   HWND *DefaultActiveWindow)
{
  HWND MidWindow;
  char *pImage;
  int i,j,TotalItem,CurrentDefaultClass=0;
  Function *fun=(DialogItems[0]).ItemProcedure;

  if(DialogImageN>=MAXIMAGENUM)
       return -1;

  i=imagesize( DialogItems[0].ItemLeft-1,DialogItems[0].ItemTop-1,
               DialogItems[0].ItemRight,DialogItems[0].ItemBottom );
  pImage=(char *)malloc(i);
  //if(pImage==NULL)
  if(pImage<0x1000)
  {
      ReportMemoryError("creatdialog");
      return -1;
  }

  {
    int Left,Top,Right,Bottom;
    struct viewporttype TmpViewPort;

    MouseHidden();
    getviewsettings(&TmpViewPort);
    WindowGetRealRect(1,&Left,&Top,&Right,&Bottom);
    setviewport(Left,Top,Right,Bottom,1);
    getimage( DialogItems[0].ItemLeft-1,DialogItems[0].ItemTop-1,
            DialogItems[0].ItemRight,DialogItems[0].ItemBottom, pImage);
    setviewport(TmpViewPort.left,TmpViewPort.top,TmpViewPort.right,
                TmpViewPort.bottom,TmpViewPort.clip);
    MouseShow();
  }


  if (fun==NULL) fun=(Function *)DialogDefaultProcedure;
  MidWindow=CreatWindow((DialogItems[0]).ItemLeft,(DialogItems[0]).ItemTop,
                        (DialogItems[0]).ItemRight,
                        (DialogItems[0]).ItemBottom,0,
                        fun,
                        2|16|WindowSetIsFocusAlways,
                        (DialogItems[0]).ItemTitle,NULL);

  if(MidWindow<0)               // ByHnace
  {
     free(pImage);
     return(MidWindow);
  }

  DialogImage[DialogImageN++]=pImage;

  if ((DialogItems[0]).ItemType!=GLOBALITEM)
     return(MidWindow);
  else
     TotalItem=(DialogItems[0]).ItemTotal;

  for (i=1,j=0;j<TotalItem;j++)
      i+=CreatSubDialogBox(&DialogItems[i],MidWindow,DefaultActiveWindow,
                           &CurrentDefaultClass);
  return(MidWindow);
}
예제 #25
0
파일: PRINTPRO.C 프로젝트: Inzaghi2012/EZP
static void InitPrintCut(void)
{
   HWND Window,Mid;
   int xw,yw,i,j;
   char p[40];
   int SaveColor;
   struct viewporttype SaveViewPort;


   BEGINOK;
   //WaitMessageEmpty();

   MouseHidden();
   getviewsettings(&SaveViewPort);
   SaveColor=getcolor();

   SetPrinter(-CurrentPrinter);
   Window=PrintCutWin[wDISPWIN];
   Mid=WindowGetFather(Window);
   ScreenDispWidth=WindowGetWidth(Window)-10;
   ScreenDispHeight=WindowGetHeight(Window)-10;
   WinX=ScreenX=WindowGetLeft(Window)+WindowGetLeft(Mid);
   WinY=ScreenY=WindowGetTop(Window)+WindowGetTop(Mid);

   setviewport(WinX,WinY,WinX+ScreenDispWidth+9,WinY+ScreenDispHeight+9,1);
   setwritemode(COPY_PUT);
   setcolor(EGA_WHITE);
   //setcolor(11);
   bar(0,0,ScreenDispWidth+9,ScreenDispHeight+9);

   PaperW=(float)(printer->xpixel)*25.4/PrinterDPI;
   PaperH=(float)(printer->ypixel)*25.4/PrinterDPI;

   SCRscaleX=PaperW/ScreenDispWidth;
   SCRscaleY=PaperH/ScreenDispHeight;
   if (SCRscaleX>SCRscaleY)
        SCRscaleY=SCRscaleX;
   else
        SCRscaleX=SCRscaleY;

   xw=mXw=PaperW/SCRscaleX;
   yw=mYw=PaperH/SCRscaleY;

   ScreenX=ScreenX+5+(ScreenDispWidth-mXw)/2;
   ScreenY=ScreenY+5+(ScreenDispHeight-mYw)/2;

   //setwritemode(COPY_PUT);
   setcolor(EGA_DARKGRAY);       //gray
   setviewport(0,0,getmaxx(),getmaxy(),1);
   rectangle(ScreenX-1,ScreenY-1,ScreenX+xw,ScreenY+yw);
   //setviewport(ScreenX-1,ScreenY-1,ScreenX+xw,ScreenY+yw,1);
   //rectangle(ScreenX-1,ScreenY-1,ScreenX+xw,ScreenY+yw);
   //setviewport(ScreenX,ScreenY,ScreenX+mXw-1,ScreenY+mYw-1,1);

   GetUserFrame(0,&xw,&yw);
   PageWI=xw;
   PageHI=yw;
   PageW=xw*25.4/1000;
   PageH=yw*25.4/1000;

   sprintf(p,"%4d",(int)(PaperW+.5));
   GetXY(3,&i,&j);
   DispXY(i-10,j,p,COLORP);

   sprintf(p,"%4d",(int)(PaperH+.5));
   GetXY(4,&i,&j);
   DispXY(i-10,j,p,COLORP);

   setwritemode(COPY_PUT);
   setcolor(SaveColor);
   setviewport(SaveViewPort.left,SaveViewPort.top,SaveViewPort.right,
              SaveViewPort.bottom,SaveViewPort.clip);
   MouseShow();

}
예제 #26
0
파일: LISTBOXC.C 프로젝트: Inzaghi2012/EZP
long ListBoxDefaultProcedure(HWND Window,HMSG Message,long Param1,long Param2)
{
  struct viewporttype TmpViewPort;
  int  i,Length,key;
  HWND MidWindow;
  int  DisplayItem;
  int DisplayWidth;
  char MidString[100];
  int Left,Top,Right,Bottom;
  int SaveColor;

  switch (Message)
  {
    case WINDOWQUIT:
         ListHandleFree();
         break;
    case KEYSTRING:
         break;
    case KEYDOWN:
         switch (MAKELO(Param1))
         {
           case HOME:
                Param2=ListGetCurrent(WindowList(Window));
                goto lbl_upward;
           case PGUP:
                Param2=ListGetHeight(WindowList(Window));
                goto lbl_upward;
           case UP:
                Param2=1;
           lbl_upward:
                Length=Param2;
                if (ListGetCurrent(WindowList(Window))-Length<0)
                   Length=ListGetCurrent(WindowList(Window));
                if (!Length)
                {
                   //Alarm();
                   break;
                }
                Length=-Length;
                goto lbl_process_up_down;
           case END:
                Param2=ListGetTotal(WindowList(Window))-1
                          -ListGetCurrent(WindowList(Window));
                goto lbl_downward;
           case PGDN:
                Param2=ListGetHeight(WindowList(Window));
                goto lbl_downward;
           case DOWN:
                Param2=1;
            lbl_downward:
                Length=Param2;
                if (ListGetCurrent(WindowList(Window))+Length>=
                    ListGetTotal(WindowList(Window))-1)
                   Length=ListGetTotal(WindowList(Window))-1
                          -ListGetCurrent(WindowList(Window));
                if (!Length)
                {
                   // Alarm();
                   break;
                }

             lbl_process_up_down:
                ListIncCurrent(WindowList(Window),Length);
                MessageInsert(Window,ITEMSELECT,
                              ListGetCurrent(WindowList(Window)),Window);

              #ifdef USE_SCROLL
                MidWindow=GetVVScroll(Window);
                if (MidWindow)
                {
                   i=WindowGetHeight(Window)-3*SYSSCROLLWIDTH-2;
                   i*=ListGetCurrent(WindowList(Window));
                   // i/=ListGetTotal(WindowList(Window));
                   i/=ListGetTotal(WindowList(Window))-1;
                   i=i-WindowGetTop(MidWindow)+SYSSCROLLWIDTH;
                //*------
                   if(WindowGetBottom(MidWindow)+i>
                   WindowGetHeight(WindowGetFather(MidWindow))-2-SYSSCROLLWIDTH)
                        i=WindowGetHeight(WindowGetFather(MidWindow))-2
                            -SYSSCROLLWIDTH-WindowGetBottom(MidWindow);
                //--------------------------*/

                   MessageInsert(MidWindow,WINDOWMOVE,0l,i);
                }
              #endif

                if (!ListVScroll(Window))
                {
                   DisplayItem=ListGetCurrent(WindowList(Window))
                               -ListGetTop(WindowList(Window));
                   // MessageInsert(Window,WMPAINT,MAKELONG(0,
                   MessageInsert(Window,REDRAWMESSAGE,MAKELONG(0,
                                 (DisplayItem-Length)*CHARHEIGHT),
                                 MAKELONG(0,(DisplayItem-Length+1))*CHARHEIGHT);
                   // MessageInsert(Window,WMPAINT,MAKELONG(0,DisplayItem*CHARHEIGHT),
                   MessageInsert(Window,REDRAWMESSAGE,MAKELONG(0,DisplayItem*CHARHEIGHT),
                                 MAKELONG(0,(DisplayItem+1)*CHARHEIGHT));
                }
                break;
           case TAB:
                WindowTableOrderNext(Window);
                break;
           case SHIFT_TAB:
                WindowTableOrderPrev(Window);
                break;
           case ENTER:
           #ifdef USE_SCROLL
                if (!WindowIsChildless(Window))
                   MessageGo(WindowGetChild(Window),WINDOWCLOSE,0l,0l);
           #endif
                MessageInsert(Window,LISTBOXCONFIRM,0L,0L);
                break;
           case ESC:
           #ifdef USE_SCROLL            // Added ByHance, 96,4.2
                if (!WindowIsChildless(Window))
                   MessageGo(WindowGetChild(Window),WINDOWCLOSE,0l,0l);
           #endif
                MessageInsert(WindowGetFather(Window),Message,Param1,Param2);
                break;
           default:
                key=MAKELO(Param1);
                key=toupper(key);
                if(key>='A' && key<='Z')
                {                       // quick select FirstLetterItem
                  for(i=0;i<ListGetTotal(WindowList(Window));i++)
                  {
                    int ch;
                    char *str;
                    str=ListGetItem( WindowList(Window),i ),
                    ch=toupper(str[0]);
                    if(ch>=key) break;
                  }
                  if( i>=ListGetTotal(WindowList(Window)) )
                      i=ListGetTotal(WindowList(Window))-1;  //the last

                  Param2=i-ListGetCurrent(WindowList(Window));
                  goto lbl_downward;
                }
                break;
         }
         break;
    case MOUSELEFTDOWN:
         //key=ListGetCurrent(WindowList(Window));

         if (MAKELO(Param1)/CHARHEIGHT!=ListGetCurrent(WindowList(Window))
                                        -ListGetTop(WindowList(Window))
             &&MAKELO(Param1)/CHARHEIGHT<ListGetTotal(WindowList(Window))
             /*-ListGetHeight(WindowList(Window))*/)
         {
            if (ListGetCurrent(WindowList(Window)) >= ListGetTop(WindowList(Window))
            && ListGetCurrent(WindowList(Window)) <
                  ListGetTop(WindowList(Window))+ListGetHeight(WindowList(Window)))
               MessageGo(Window,WMPAINT,
                      MAKELONG(0,(ListGetCurrent(WindowList(Window))-
                          ListGetTop(WindowList(Window)))*CHARHEIGHT),
                      MAKELONG(0,(ListGetCurrent(WindowList(Window))+1-
                          ListGetTop(WindowList(Window)))*CHARHEIGHT));
            ListSetCurrent(WindowList(Window),MAKELO(Param1)/CHARHEIGHT
                           +ListGetTop(WindowList(Window)));

            if (WindowGetProcedure(WindowGetFather(Window))==(Function *)ComboDefaultProcedure)
               MessageInsert(WindowGetFather(Window),COMBOPULL,Param1,Param2);
            else
            {
               #ifdef USE_SCROLL
                 MidWindow=GetVVScroll(Window);
                 if (MidWindow)
                 {
                   i=WindowGetHeight(Window)-3*SYSSCROLLWIDTH-2;
                   i*=ListGetCurrent(WindowList(Window));
                   // i/=ListGetTotal(WindowList(Window));
                   i/=ListGetTotal(WindowList(Window))-1;
                   i=i-WindowGetTop(MidWindow)+SYSSCROLLWIDTH;
                //*------
                   if(WindowGetBottom(MidWindow)+i>
                   WindowGetHeight(WindowGetFather(MidWindow))-2-SYSSCROLLWIDTH)
                        i=WindowGetHeight(WindowGetFather(MidWindow))-2
                            -SYSSCROLLWIDTH-WindowGetBottom(MidWindow);
                //------*/

                   MessageGo(MidWindow,WINDOWMOVE,0l,i);
                 }
               #endif

               MessageGo(Window,WMPAINT,
                             MAKELONG(0,(ListGetCurrent(WindowList(Window))-
                                 ListGetTop(WindowList(Window)))*CHARHEIGHT),
                             MAKELONG(0,(ListGetCurrent(WindowList(Window))+1-
                                 ListGetTop(WindowList(Window)))*CHARHEIGHT));
            }
         }

         //if( key != ListGetCurrent(WindowList(Window)) )   // ByHance, 97,5.11
           MessageInsert(Window,ITEMSELECT,ListGetCurrent(WindowList(Window)),Window);
         break;
    case VVSCROLLMOVE:
         /*
         //i=Param1*ListGetTotal(WindowList(Window))
         i=Param1*(ListGetTotal(WindowList(Window))-1)
           /(WindowGetHeight(Window)-3*SYSSCROLLWIDTH-2) ;
         if(i<ListGetTop(WindowList(Window)) ||
          i>=ListGetTop(WindowList(Window))+ListGetHeight(WindowList(Window)) )
         {
            i=( ListGetTotal(WindowList(Window)) - 1 ) * Param1;
            i=0.5+(float)i/(WindowGetHeight(Window)-3*SYSSCROLLWIDTH-2);
            Length=ListGetTotal(WindowList(Window))
                  -ListGetHeight(WindowList(Window));
            if(i>Length) i=Length;

            ListSetTop(WindowList(Window),i);
            MessageInsert(Window,WMPAINT,0l,
                          ListGetHeight(WindowList(Window))*CHARHEIGHT);
         }
         */  // modi by zjh for smooth move 96.12.6
         {
            i=( ListGetTotal(WindowList(Window)) - 1 ) * Param1;
            i=0.5+(float)i/(WindowGetHeight(Window)-3*SYSSCROLLWIDTH-2);
            Length=ListGetTotal(WindowList(Window))-1;
            if(i>Length) i=Length;
            Length=(WindowGetHeight(Window)+0)/16;
            i=i-Length/2;
            if (i<0) i=0;
            if (i+Length>ListGetTotal(WindowList(Window))-1)
              i=ListGetTotal(WindowList(Window)) - 1-Length+1;
            if (i<0) i=0;

            if (i!=ListGetTop(WindowList(Window)))
            {
             ListSetTop(WindowList(Window),i);
             MessageInsert(Window,WMPAINT,0l,
                          ListGetHeight(WindowList(Window))*CHARHEIGHT);
            }
         }
         break;
    case MOUSELEFTDOUBLE:
         //MessageInsert(Window,LISTBOXCONFIRM,0L,0L);
         MessageInsert(Window,KEYDOWN,MAKELONG(0,ENTER),1l);
         break;
    case GETFOCUS:             // ByHance, 95,11.23
    case LOSTFOCUS:
         WindowDefaultProcedure(Window,Message,Param1,Param2);
         MidWindow=WindowGetFather(Window);
         if(MidWindow)     // has combo list
            if( WindowGetHeight(MidWindow)<=SYSBUTTONWIDTH+1) // not pull down
                 break;

         if(!ListGetTotal(WindowList(Window)))  // if no item, break
               break;

         MouseHidden();
         getviewsettings(&TmpViewPort);
         SaveColor=getcolor();

         WindowGetRealRect(Window,&Left,&Top,&Right,&Bottom);
         setviewport(Left+1,Top+1,Right-1,Bottom-1,1);

         DisplayWidth=ListGetItemLength(WindowList(Window))*CHARWIDTH/2;
         if (DisplayWidth<WindowGetWidth(Window))
            DisplayWidth=WindowGetWidth(Window);
         if (!WindowIsChildless(Window))
            DisplayWidth-=SYSSCROLLWIDTH+1+CHARWIDTH/2;   //by jerry
            //  DisplayWidth-=SYSSCROLLWIDTH+4;

         i=ListGetCurrent(WindowList(Window))-ListGetTop(WindowList(Window));
         i*=CHARHEIGHT;
         if(Message==GETFOCUS) {
            DisplayVirtualRect(3,i+1,2+DisplayWidth-1,i+CHARHEIGHT-1);
            //if(ListGetTotal(WindowList(Window))==1)
            if(fGetFocusByKey)      // ByHance, 97,5.11
              MessageInsert(Window,ITEMSELECT,ListGetCurrent(WindowList(Window)),Window);
         } else {               // LOSTFOCUS
             DisplayWidth/=CHARWIDTH/2;
             strncpy(MidString,
                 ListGetItem( WindowList(Window),ListGetCurrent(WindowList(Window)) ),
                 DisplayWidth);
             Length=strlen(MidString);
             if (Length<DisplayWidth)
                memset(MidString+Length,' ',DisplayWidth-Length);
             MidString[DisplayWidth]=0;
             ViewportDisplayString(MidString,2,i,LISTBKCOLOR,LISTCOLOR);
         }
         setviewport(TmpViewPort.left,TmpViewPort.top,TmpViewPort.right,
                TmpViewPort.bottom,TmpViewPort.clip);
         setcolor(SaveColor);
         MouseShow();
         break;
    case DRAWWINDOW:
         WindowDefaultProcedure(Window,Message,Param1,Param2);
    case WMPAINT:
         getviewsettings(&TmpViewPort);
         SaveColor=getcolor();
         MouseHidden();
         WindowGetRealRect(Window,&Left,&Top,&Right,&Bottom);
         setviewport(Left+1,Top+1,Right-1,Bottom-1,1);
         setfillstyle(1,EGA_WHITE);

         if (!WindowIsChildless(Window))
              Right-=SYSSCROLLWIDTH+10;      // ByHance, 96,3.24

         bar(0,0,Right-Left,Bottom-Top);      // clear area

         Param1 = 0;
         Param2 = Bottom-Top;

         DisplayWidth=ListGetItemLength(WindowList(Window))*CHARWIDTH/2;
         if (DisplayWidth<WindowGetWidth(Window))
            DisplayWidth=WindowGetWidth(Window);

         if (!WindowIsChildless(Window))
            DisplayWidth-=SYSSCROLLWIDTH+1+CHARWIDTH/2;           // by jerry
            //DisplayWidth-=SYSSCROLLWIDTH+4;

         DisplayWidth/=CHARWIDTH/2;

         for (i=MAKELO(Param1);i<MAKELO(Param2);i+=CHARHEIGHT)
         {
             if (i/CHARHEIGHT+ListGetTop(WindowList(Window))
                 >=ListGetTotal(WindowList(Window)))
                break;
             strncpy(MidString,ListGetItem(WindowList(Window),i/CHARHEIGHT
                     +ListGetTop(WindowList(Window))),DisplayWidth);
             Length=strlen(MidString);
             if (Length<DisplayWidth)
                memset(MidString+Length,' ',DisplayWidth-Length);
             MidString[DisplayWidth]=0;

             if (i/CHARHEIGHT==ListGetCurrent(WindowList(Window))
                               -ListGetTop(WindowList(Window)))
             {
                ViewportDisplayString(MidString,2,i,LISTBKCOLOR,LISTCOLOR);
                if (Window==ActiveWindow)               // ByHance
                     DisplayVirtualRect(3,i+1,
                            2+DisplayWidth*ASC16WIDTH-1,i+CHARHEIGHT-1);
             }
             else
                ViewportDisplayString(MidString,2,i,LISTCOLOR,LISTBKCOLOR);
         }

         setviewport(TmpViewPort.left,TmpViewPort.top,TmpViewPort.right,
                TmpViewPort.bottom,TmpViewPort.clip);
         setcolor(SaveColor);
         MouseShow();
         break;
    case LISTAPPENDITEM:
         ListInsertItem(Window,ListGetTotal(WindowList(Window)),(char *)LONG2FP(Param1));
         break;
    case LISTINSERTITEM:
         ListInsertItem(Window,Param2,(char *)LONG2FP(Param1));
         break;
    case LISTINSERTITEMSORTED:
         {
            char *p1,*p2;

            p2 = (char *)LONG2FP(Param1);
            for (i=0;i<ListGetTotal(WindowList(Window));i++) {
                p1 = ListGetItem(WindowList(Window),i);
                if (strcmp(p2,p1)>0) continue;
                ListInsertItem(Window,i,p2);
                break;
            }
            if (i==ListGetTotal(WindowList(Window))) ListInsertItem(Window,i,p2);
         }
         break;
    case LISTDELETEITEM:
         if (Param1<ListGetTotal(WindowList(Window)))
            ListDeleteItem(Window,Param1);
         break;
    case LISTDELETELASTITEM:
         if (ListGetTotal(WindowList(Window))>0)
            ListDeleteItem(Window,ListGetTotal(WindowList(Window))-1);
         MessageInsert(Window,WMPAINT,0l,
              ListGetHeight(WindowList(Window))*CHARHEIGHT);

         break;
    case LISTDELETEALL:
         ListSetTotal(WindowList(Window),0);
         ListSetTop(WindowList(Window),0);
         ListSetCurrent(WindowList(Window),0);

    #ifdef USE_SCROLL
         if (!WindowIsChildless(Window))
            MessageGo(WindowGetChild(Window),WINDOWCLOSE,0l,0l);
    #endif
         break;

    case LISTSETITEMLENGTH:
         if (Param1>0)
            ListSetItemLength(WindowList(Window),Param1);
         break;
    case LISTSETITEMHEIGHT:
         if (Param1>0)
            ListSetHeight(WindowList(Window),(WindowGetHeight(Window)+Param1-2)/Param1);
         break;
    case LISTSETTOTALITEM:
         ListSetTotal(WindowList(Window),Param1);
         if (!Param1)
            ListHandleFree();
         break;
    case ITEMSELECT:
         MessageInsert(WindowGetFather(Window),ITEMSELECT,
            ListGetCurrent(WindowList(Window)),Window);
         break;
    case MOUSEMOVE:
         //MouseShow();
         DialogMouseMove(Window,Message,Param1,Param2); // ByHance, 95,12.6
         break;
    default:
         return(WindowDefaultProcedure(Window,Message,Param1,Param2));
  }
  return(TRUE);
}
예제 #27
0
파일: OPENFILC.C 프로젝트: Inzaghi2012/EZP
static unsigned long DirectoryList(HWND Window,HMSG Message,long Param1,long Param2)
{
  int hlist;

  switch (Message)
  {
    case WINDOWINIT:
         {
           //int   i,j;
           char  *dirs=NowOpenFile->dirs;
           char  *drive=NowOpenFile->drive;
           #ifdef _TURBOC_
              struct ffblk opffblk;
           #else
              struct find_t opffblk;
           #endif

           char  fn[128];
           int   r;

           MessageGo(Window,LISTSETITEMHEIGHT,16,0);
           MessageGo(Window,LISTSETITEMLENGTH,13,0);

           /*------ ByHance, 96,3.25 ----
           hlist = WindowList(Window);
           ListSetTotal(hlist,0);
           ListSetCurrent(hlist,0);
           ListSetTop(hlist,0);
           --------------------*/
           MessageGo(Window,LISTDELETEALL,0L,0L);

//           _harderr(handler);
           if( ! drive[0] )
            {
 //             *drive     = (char)getdisk()+'A';
             *drive     = (char)getdisk()+'A'-1;
             *(drive+1) = ':';
             *(drive+2) = 0;
            }

           if( !dirs[0] ) {
              #ifdef __TURBOC__
                 getcurdir((int)(*drive-'A'+1), dirs);
              #else
                 unsigned total,old;
                 _dos_getdrive(&old);
                 if(old!=*drive-'A'+1)
                    _dos_setdrive( *drive-'A'+1 , &total );
                 getcwd(dirs, 64);
                 memmove(dirs,dirs+3,61);       // cancel "C:\"
                 if(!dirs[0])
                     strcpy(dirs,"\\");
                 if(old!=*drive-'A'+1)
                    _dos_setdrive( old, &total );
              #endif
           }

           memset(&opffblk, 0, sizeof(opffblk));
           strcpy(fn,drive);

           //if( strcmp(dirs,"\\") && strcmp(dirs,"/") )
           //{
           //    strcat(fn,dirs);
           //    strcat(fn,"\\");
           //}
           if(dirs[0])
           {
                  char ch;
                  int len;

                  ch=dirs[0];
                  if(ch!='\\' && ch!='/')
                       strcat(fn,"\\");

                  strcat(fn,dirs);
                  len=strlen(fn);
                  ch=fn[len-1];
                  if(ch!='\\' && ch!='/')
                       strcat(fn,"\\");
           }

           strcat(fn,"*.*");

           r = findfirst(fn, &opffblk, FA_DIREC);
           while (!r)
           {
            if((opffblk.ff_attrib & FA_DIREC) && strcmp(opffblk.ff_name,"."))
              MessageGo(Window, LISTINSERTITEMSORTED, FP2LONG(opffblk.ff_name), 0L);
            r = findnext(&opffblk);
           }

           //MessageGo(Window,WMPAINT,0,ListGetHeight(hlist)*CHARHEIGHT);
           //   ByHance, 95,12.11
           MessageInsert(Window,REDRAWMESSAGE,0L,
               MAKELONG(WindowGetWidth(Window),WindowGetHeight(Window)) );

           {    /*--- display directory's name ----*/
              #define max_n  (304/ASC16WIDTH)
                 int x,y,w,h;
                 unsigned total,old;
                 int len;
                 int SaveColor;
                 struct viewporttype TmpViewPort;
                 char disk[20],dirs[64],file[14],ext[5];

                 strupr(fn);
                 _splitpath(fn,disk,dirs,file,ext);

                 _dos_getdrive(&old);
                 if(old!=disk[0]-'A'+1)
                    _dos_setdrive( disk[0]-'A'+1 , &total );
                 len=strlen(dirs);
                 if(len>1)
                 {
                   char ch=dirs[len-1];
                   if(ch=='\\' || ch=='/') dirs[len-1]=0;
                 }

                 chdir(dirs);
                 getcwd(dirs, 64);
                 _dos_setdrive( old, &total );

                 MouseHidden();
                 SaveColor=getcolor();
                 getviewsettings(&TmpViewPort);
                 setviewport(0,0,getmaxx(),getmaxy(),1);

                 WindowGetRealRect(Window,&x,&y,&w,&h);
                 y-=26;

                 len=strlen(dirs);
                 if(len>max_n)
                 {
                    int i;
                    i=len-1;
                    while(dirs[i]!='\\' && dirs[i]!='/' && i>max_n-12) i--;
                    strcpy(dirs,"...");
                    strcat(dirs,&dirs[i]);
                 }

                 // WaitMessageEmpty();
                 setfillstyle(1,EGA_LIGHTGRAY);
                 bar(x,y,x+304,y+25);            /*--- clear old area --*/
                 DisplayString(dirs,x,y,EGA_BLACK,EGA_LIGHTGRAY);

                 setviewport(TmpViewPort.left,TmpViewPort.top,TmpViewPort.right,
                             TmpViewPort.bottom,TmpViewPort.clip);
                 setcolor(SaveColor);
                 MouseShow();
              #undef max_n
            }
         }
         break;

    case LISTBOXCONFIRM:{
         char dir[20];
         char path[40];

         hlist = WindowList(Window);
         strcpy(dir,ListGetItem(hlist,ListGetCurrent(hlist)));
         strcpy(path,NowOpenFile->drive);
         strcat(path,dir);
         chdir(path);
         #ifdef __TURBOC__
            getcurdir(path[0]-'A'+1,NowOpenFile->dirs);
         #else
         {
            unsigned total,old;
            _dos_getdrive(&old);
            if(old!=path[0]-'A'+1)
               _dos_setdrive( path[0]-'A'+1 , &total );
            getcwd(NowOpenFile->dirs, 64);
            memmove(NowOpenFile->dirs,NowOpenFile->dirs+3,61); // cancel "C:\"
            if(old!=path[0]-'A'+1)
               _dos_setdrive( old, &total );
         }
         #endif

         MessageGo(Window,WINDOWINIT,0,0);
         MessageGo(Window,WMPAINT,0,ListGetHeight(hlist)*CHARHEIGHT);
         ListSetTop(hlist,0);
         ListSetCurrent(hlist,0);
         MessageGo(WindowGetFather(Window),DIRCHANGE,0L,0L);
         }
         break;
    default:
         return(ListBoxDefaultProcedure(Window,Message,Param1,Param2));
  }
  return(TRUE);
}