Exemple #1
0
Fichier : FED.C Projet : MegaGod/TW
void clearworkarea( void ) {
	struct viewporttype t;
	getviewsettings( &t );
	setviewport( 1 + align, 25, 638 + align, 346, 0 );
	clearviewport( );
	setviewport( t.left, t.top, t.right, t.bottom, t.clip );
}
Exemple #2
0
/*************************************************************************
 *
 *N  draw_text_row
 *
 *::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 *
 *   Purpose:
 *P
 *     This function draws annotation for a given row in the text
 *     pseudo-primitive table.
 *E
 *::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 *
 *   Parameters:
 *A
 *     row         <input>==(row_type) row of the text table.
 *     table       <input>==(vpf_table_type) text primitive table.
 *     return     <output>==(int) 0 if the user escapes, 1 upon successful
 *                          completion.
 *E
 *::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 *
 *   History:
 *H
 *    Barry Michaels   August 1991                        DOS Turbo C
 *E
 *************************************************************************/
int draw_text_row( row_type row, vpf_table_type table )
{
   int xscr,yscr, shape_pos, text_pos;
   ossim_int32 n, nshape;
   coordinate_type *shape_line;
   char *text;
   struct viewporttype vp;

   shape_pos = table_pos("SHAPE_LINE",table);
/**** MUST CHECK FOR 'Z', 'B', AND 'Y' TYPES - SEE VPFPRIM.C ****/
   shape_line = (coordinate_type *)get_table_element(shape_pos,row,table,
						     NULL,&nshape);
   text_pos = table_pos("STRING",table);
   text = (char *)get_table_element(text_pos,row,table,NULL,&n);

   screenxy(shape_line[0].x,shape_line[0].y,&xscr,&yscr);

   getviewsettings(&vp);
   if ((gpgetfont() != DEFAULT_FONT) || (yscr > gptextheight(text))) {
      hidemousecursor();
      gptext(xscr,yscr,text);
      showmousecursor();
   }

   free(shape_line);
   free(text);

   while (kbhit()) {
      if (getch()==27) {
	 return 0;
      }
   }

   return 1;
}
Exemple #3
0
void WorkArea::draw()
{
    struct viewporttype vp;
    getviewsettings(&vp);
    setviewport(x1, y1, x2, y2, 1);
    setfillstyle(SOLID_FILL, bgCol);
    bar(x1, y1, x2, y2);
    items->drawAll();
    setviewport(vp.left, vp.top, vp.right, vp.bottom, vp.clip);
}
Exemple #4
0
void WorkArea::clear()
{
    delete items;
    struct viewporttype vp;

    getviewsettings(&vp);
    setviewport(x1, y1, x2, y2, 1);
    items = new List();
    clearviewport();
    setviewport(vp.left, vp.top, vp.right, vp.bottom, vp.clip);
}
Exemple #5
0
void DrawBorder(void)
{
  struct viewporttype vp;

  setcolor( MaxColors - 1 );		/* Set current color to white	*/

  setlinestyle( SOLID_LINE, 0, NORM_WIDTH );

  getviewsettings( &vp );
  rectangle( 0, 0, vp.right-vp.left, vp.bottom-vp.top );

}
Exemple #6
0
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;
}
Exemple #7
0
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;
}
Exemple #8
0
void main()
{
int gd=DETECT,gm,i,j,x,y,color,startcolor,height,width;
struct palettetype palette;
struct viewporttype vp;

initgraph(&gd,&gm,"d:\\tc\\bgi");

getpalette(&palette);

rectangle(0,20,639,479);
outtextxy(200,10,"Palette demonstration");
getviewsettings(&vp);
width=(vp.right-vp.left)/16;
height=(vp.bottom-vp.top-20)/16;
x=0;
y=20;
startcolor=0;
for(j=0;j<=15;j++)
	{
	color=startcolor;
	for(i=0;i<=15;i++)
		{
		setfillstyle(SOLID_FILL,color++);
		bar(x,y,x+width,y+height);
		x=x+width+1;
		}
	startcolor++;
	x=0;
	y+=height+1;
	}
getch();

while(!kbhit())
   setpalette(random(16),random(65));

setallpalette(&palette);

getch();
closegraph();
restorecrtmode();
}
Exemple #9
0
void AmbienteProvas (void)
   {
   register  char    *pch;
   CriaJanelaGrafica (ESFORCO, 0, 0, MAXX, MAXY, 0, "");
   AtivaJanelaGrafica(ESFORCO, 0);

   setcolor ( bea_color[14] );

   Moldura();

   setcolor ( bea_color[12] );

   getviewsettings(&vp);

   pch = "ESC - Desiste   F1 - Help   ENTER - Continua   DEL - Repete Ponto";
   gprintf( DELTA_X(50) - textwidth(pch)/2, DELTA_Y(99) - CharH, pch);

   setcolor ( bea_color[15] );

   } /* End of AmbienteProvas () */
Exemple #10
0
void SayGoodbye(void)
{
  struct viewporttype viewinfo; 	/* Structure to read viewport	*/
  int h, w;

  MainWindow( "== Finale ==" );

  getviewsettings( &viewinfo ); 	/* Read viewport settings	*/
  changetextstyle( TRIPLEX_FONT, HORIZ_DIR, 4 );
  settextjustify( CENTER_TEXT, CENTER_TEXT );

  h = viewinfo.bottom - viewinfo.top;
  w = viewinfo.right  - viewinfo.left;
  outtextxy( w/2, h/2, "That's all, folks!" );

  StatusLine( "Press any key to EXIT" );
  getch();

  cleardevice();			/* Clear the graphics screen	*/

}
Exemple #11
0
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 */
Exemple #12
0
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();

}
Exemple #13
0
void DadosPaciente()
   {
   char                  Resposta[2];
   char                        t[46];
   char                        *p_ch;
   int            li, co, li_1, co_1,
		  li_2, co_2, cor;


   t[0] = NULL;

   if (Primpac && !DadosPacienteOk)
      {
      novopac = TRUE;
      Primpac = FALSE;
      }
   else     novopac = NovoPaciente();

   AmbientePaciente();

   setcolor (bea_color[15]);

   getviewsettings ( &vp );

   do {
      /* ============ ENTRADA DO NOME DO PACIENTE ============== */
      do {
	 strcpy( t, Paciente.Nome );

	 LEITURA(  'c',
		   textwidth("NOME: ") + DELTA_X ( 5), DELTA_Y ( 5),
		   Paciente.Nome, 45, 0L, 0L  );

	 if (Paciente.Nome[0] == ESC)
	    {
	    if (novopac)
	       {  /* Se ja tinha pac mas queria inserir outro */
	       zeraPaciente();
	       novopac=FALSE;
	       Primpac=TRUE;
	       }
	    else
	       {
	       strcpy(Paciente.Nome, t);
	       return;
	       } /* devolve nome original */
	    }
	 } while (*Paciente.Nome == NULL);



      do {
	 /* ========= ENTRADA DO No PRONTUARIO DO PACIENTE ============== */
	 strcpy( t, Paciente.Prontuario );

	 LEITURA(  'n',
		   textwidth("No DO PRONTUARIO: ") + DELTA_X (5), DELTA_Y (10),
		   Paciente.Prontuario, 7, 0L, MAXLONG );

	 if (Paciente.Prontuario[0] == ESC)
	    {
	    if (novopac)
	       { /* Se ja tinha pac mas queria inserir outro */
	       zeraPaciente();
	       novopac=FALSE;
	       Primpac=TRUE;
	       }
	    else
	       {
	       strcpy(Paciente.Prontuario, t);
	       return;
	       } /* devolve nome original */
	    }

	 LEITURA(  'n',
		   textwidth("No DO PRONTUARIO: 1234567 ") +
		   DELTA_X ( 5), DELTA_Y (10),
		   digito, 1, 0L, 9L);

	 if (digito[0] == ESC)
	    {
	    if (novopac)
	       {      /* Se ja tinha pac mas queria inserir outro */
	       zeraPaciente();
	       novopac=FALSE;
	       Primpac=TRUE;
	       }
	    else
	       {
	       strcpy(Paciente.Prontuario, t);
	       return;
	       } /* devolve nome original */
	    }

	 strcat(Paciente.Prontuario,digito);

	 } while (*Paciente.Prontuario == NULL);

      /* ========= ENTRADA DO SEXO DO PACIENTE ============== */
      strcpy( t, Paciente.Sexo );
      co  = textwidth("SEXO: ") + DELTA_X ( 5);
      li  = DELTA_Y (15);

      do {
	 LEITURA(  'c',
		   co,
		   li,
		   Paciente.Sexo,1,0L,0L);

	 if (Paciente.Sexo[0] == ESC)
	    {
	    if (novopac)
	       { /* Se ja tinha pac mas queria inserir outro */
	       zeraPaciente();
	       novopac=FALSE;
	       Primpac=TRUE;
	       }
	    else
	       {
	       strcpy(Paciente.Sexo,t);
	       return; /* devolve nome original */
	       }
	    }

	 ApagaWord(co, li, 8);

	 } while ( (Paciente.Sexo[0] != 'M') &&
		   (Paciente.Sexo[0] != 'F')    );

      if ( Paciente.Sexo[0] != 'M' )  outtextxy(co, li, " Feminino" );
      else                            outtextxy(co, li, "Masculino");


      /* ========= ENTRADA DA DATA DE NASCIMENTO ================ */
      strcpy( t, Paciente.Dia );
      co  = textwidth("DATA DE NASCIMENTO: ") + DELTA_X ( 5);
      li  = DELTA_Y (20);
      do {
	 LEITURA(  'n',
		   co,
		   li,
		   Paciente.Dia, 2, 1L, 31L);

	 if (Paciente.Dia[0] == ESC)
	    {
	    if (novopac)
	       { /* Se ja tinha pac mas queria inserir outro */
	       zeraPaciente();
	       novopac = FALSE;
	       Primpac = TRUE;
	       }
	    else
	       {
	       strcpy(Paciente.Dia,t);
	       return;
	       } /* devolve nome original */
	    }
	 } while (Paciente.Dia == NULL);

      chama( Paciente.Dia, co, li );


      co += textwidth("00/");
      strcpy( t, Paciente.Mes );
      do {
	 LEITURA(  'n',
		   co,
		   li,
		   Paciente.Mes,2,1L,12L);

	 if (Paciente.Mes[0]==ESC)
	    {
	    if (novopac)
	       { /* Se ja tinha pac mas queria inserir outro */
	       zeraPaciente();
	       novopac=FALSE;
	       Primpac=TRUE;
	       }
	    else
	       {
	       strcpy( Paciente.Mes, t );
	       return;
	       } /* devolve nome original */
	    }
	  } while (Paciente.Mes==NULL);

      chama(Paciente.Mes, co, li);


      co += textwidth("00/");
      strcpy(t,Paciente.Ano);
      do {
	 LEITURA(  'n',
		   co,
		   li,
		   Paciente.Ano,2,1L,99L);

	 if (Paciente.Ano[0]==ESC)
	    {
	    if (novopac)
	       { /* Se ja tinha pac mas queria inserir outro */
	       zeraPaciente();
	       novopac=FALSE;
	       Primpac=TRUE;
	       }
	    else
	       {
	       strcpy(Paciente.Ano,t);
	       return;
	       } /* devolve nome original */
	    }

	 chama(Paciente.Ano, co, li);

	 CalculaIdade();

	 ApagaWord( DELTA_X (50) + textwidth("IDADE: "), li, 2  );

	 gprintf  ( DELTA_X (50) + textwidth("IDADE: "), li, "%2s", PacienteIdade);

	 } while ( (atoi(PacienteIdade) <  5) ||
		   (atoi(PacienteIdade) > 90)    );


	co  = textwidth("ADULTO ou CRIANCA ? (A/C): ") + DELTA_X ( 5);
	li  = DELTA_Y (25);
	if ( (atoi(PacienteIdade) < 17) && (atoi(PacienteIdade) > 14) )
	   {
	   do{

	     LEITURA(  'c',
		       co,
		       li,
		       Paciente.Fase,1,0L,0L);

	     } while ( (Paciente.Fase[0] != 'A') &&
		       (Paciente.Fase[0] != 'C')    );


	   ApagaWord( co, li, 7 );
	   if (pertence(Paciente.Fase[0],"Aa" ))
	     {
	     outtextxy( co, li, " Adulto");
	     }
	   else
	     {
	     outtextxy( co, li, "Crianca");
	     }
	   }
	else
	   {
	   if (atoi(PacienteIdade) <= 14)   *Paciente.Fase='C';
	   else                             *Paciente.Fase='A';

	   ApagaWord( co, li, 7 );

	   if (Paciente.Fase[0] == 'A') gprintf( co, li, " Adulto");
	   else  	                gprintf( co, li, "Crianca");
	   }

	/* ========= ENTRADA DA ALTURA  =============== */

	co_1 = co;
	li_1 = li;

	co  = textwidth("ALTURA (cm): ") + DELTA_X ( 5);
	li  = DELTA_Y (30);
	LEITURA('n', co, li, Paciente.Altura, 3, 110L, 210L);

	if (Paciente.Altura[0] == ESC)
	  {
	  if (novopac)
	     { /* Se ja tinha pac mas queria inserir outro */
	     zeraPaciente();
	     novopac=FALSE;
	     Primpac=TRUE;
	     }
	  else
	     {
	     strcpy(Paciente.Altura,t);
	     return;
	     } /* devolve nome original */
	  }

	if (atoi(Paciente.Altura) > 170)
	   {
	   *Paciente.Fase='A';
	   ApagaWord(co_1, li_1, 7);
	   gprintf(co_1, li_1, " Adulto");
	   }

	/* ========= ENTRADA DO PESO  =============== */

	co  = textwidth("PESO (Kg): ") + DELTA_X ( 5);
	li  = DELTA_Y (35);

	LEITURA('n',co, li, Paciente.Peso, 3, 16L, 150L);
	if (Paciente.Peso[0] == ESC)
	   {
	   if (novopac)
	      {      /* Se ja tinha pac mas queria inserir outro */
	      zeraPaciente();
	      novopac = FALSE;
	      Primpac = TRUE;
	      }
	   else {
		strcpy(Paciente.Peso,t);
		return;
		} /* devolve nome original */
	   }

	CalculaSupCorporea();

	co_1 = DELTA_X (50) + textwidth("SUPERFICIE CORPORAL: ");


	ApagaWord( co_1, li, 5);


	gprintf(co_1, li, "%-5.2f", SupCorp);



	/* ========= ENTRADA DE SE FUMANTE =============== */

	co  = textwidth("FUMANTE ? (S/N/E): ") + DELTA_X ( 5);
	li  = DELTA_Y (40);

	if ( test(  'c',co, li, Paciente.Fumante , 1, 0L, 0L));
	else return;


	co   = DELTA_X (50);
	li   = DELTA_Y (40);
	li_1 = DELTA_Y (43);
	li_2 = DELTA_Y (46);


	ApagaWord( co,   li, 38 );
	ApagaWord( co, li_1, 25 );
	ApagaWord( co, li_2, 25 );

	if      (pertence(Paciente.Fumante[0],"Ss"))
	   {
	   co   = DELTA_X (50) + textwidth("HA QUANTOS ANOS ? : ");
	   co_1 = DELTA_X (50) + textwidth("No CIGARROS/DIA   : ");
	   co_2 = DELTA_X (50);

	   cor  =  getcolor();
	   setcolor( bea_color[14] );
	   gprintf(co_2, li  ,"HA QUANTOS ANOS ? : ");
	   gprintf(co_2, li_1,"No CIGARROS/DIA   : ");

	   setcolor(cor);

	   gprintf(co  , li  ,"%s", Paciente.tempfumo);
	   gprintf(co_1, li_1,"%s", Paciente.cigardia);


	   LEITURA('n',co  , li  , Paciente.tempfumo, 2, 1L, 99L);
	   LEITURA('n',co_1, li_1, Paciente.cigardia, 2, 1L, 99L);
	   }
	else if (pertence(Paciente.Fumante[0],"Ee"))
	   {
	   cor  =  getcolor();
	   setcolor( bea_color[14] );
	   gprintf(co, li  , "HA QUANTO TEMPO PAROU ? : ""    ANOS ");
	   gprintf(co, li_1, "QUANTOS ANOS FUMOU ? :   ");
	   gprintf(co, li_2, "No CIGARROS/DIA :   ");

	   setcolor(cor);

	   co   = DELTA_X (50) + textwidth("HA QUANTO TEMPO PAROU ? : ");
	   co_1 = DELTA_X (50) + textwidth("QUANTOS ANOS FUMOU ? : ");
	   co_2 = DELTA_X (50) + textwidth("No CIGARROS/DIA : ");

	   gprintf(co  , li  , "%s", Paciente.deixfumoA );
	   gprintf(co_1, li_1, "%s", Paciente.tempfumo );
	   gprintf(co_2, li_2, "%s", Paciente.cigardia );

	   LEITURA('n', co  , li  , Paciente.deixfumoA, 2, 1L, 99L);
	   LEITURA('n', co_1, li_1, Paciente.tempfumo , 2, 1L, 99L);
	   LEITURA('n', co_2, li_2, Paciente.cigardia , 2, 1L, 99L);
	   }




	/* ========= ENTRADA DOS DADOS RESTANTES ========= */


	p_ch = "TOSSE OU EXPECTORACAO (S/N): ";
	co   = DELTA_X ( 5) + textwidth (p_ch);
	li   = DELTA_Y (45);
	do
	   LeituraC( co, li, TosseOuExpec, "SsNn" );
	while (*TosseOuExpec == '\0');

	p_ch = "CONVENIO: ";
	co   = DELTA_X ( 5) + textwidth (p_ch);
	li   = DELTA_Y (50);
	Leitura  ( co, li, institu, 45  );

	p_ch = "PACIENTE INTERNO OU AMBULATORIAL ? (I/A): ";
	LeituraC ( DELTA_X ( 5) + textwidth (p_ch), DELTA_Y (55), IouA, "IiAa" );

	p_ch = "JUSTIFICATIVA PARA O EXAME: ";
	co   = DELTA_X ( 5) + textwidth (p_ch);
	li   = DELTA_Y (60);
	Leitura  ( co, li, justif, 32);

	p_ch = "MEDICO REQUISITANTE: ";
	co   = DELTA_X ( 5) + textwidth (p_ch);
	li   = DELTA_Y (65);
	Leitura( co, li, medico, 38  );

	p_ch = "SERVICO REQUISITANTE: ";
	co   = DELTA_X ( 5) + textwidth (p_ch);
	li   = DELTA_Y (70);
	Leitura( co, li, servico, 38  );

	p_ch = "PACIENTE COM ALGUM DIAGNOSTICO DE DOENCA PULMONAR ? (S/N): ";
	LeituraC( DELTA_X ( 5) + textwidth (p_ch), DELTA_Y (75), temdiag, "SsNn" );


	if (pertence(temdiag[0], "Ss" ))
	   {
	   cor = getcolor();
	   setcolor(bea_color[14]);

	   p_ch = "DIAGNOSTICO: ";
	   gprintf( DELTA_X ( 5), DELTA_Y (80), p_ch );

	   setcolor(cor);

	   Leitura( DELTA_X ( 5) + textwidth (p_ch), DELTA_Y (80), diagnost, 30 );

	   }
	 else
	   {
	   ApagaWord( DELTA_X ( 5), DELTA_Y (80), 45 );
	   }

	cor = getcolor();
	setcolor(bea_color[14]);
	p_ch = "CIRURGIA PREVISTA - ESTIMATIVA DO RISCO CIRURGICO ? (S/N): ";
	gprintf( DELTA_X ( 5), DELTA_Y (85), p_ch );
	setcolor(cor);
	LeituraC( DELTA_X ( 5) + textwidth (p_ch), DELTA_Y (85), RiscoCir, "SsNn" );

	if ( (RiscoCir[0] == 'N') || (RiscoCir[0] == 'n') ) *RiscoCir = NULL;

	if ( *RiscoCir != NULL )
	   {
	   cor = getcolor();
	   setcolor (bea_color[14]);

	   p_ch = "CIRURGIA: (1 - ABDOMINAL ALTA  2 - TORACICA  3 - OUTRA): ";
	   gprintf( DELTA_X ( 5), DELTA_Y (90), p_ch );
	   setcolor (cor);
	   LeituraC( DELTA_X ( 5) + textwidth (p_ch), DELTA_Y (90), RiscoCir, "123" );
	   }
	else
	   {
	   ApagaWord( DELTA_X ( 5), DELTA_Y (90), 75 );

	   ApagaWord( DELTA_X ( 5), DELTA_Y (95), 18 );

	   }

	Resposta[0] = 'S';
	Resposta[1] = NULL;

	cor = getcolor();
	setcolor (bea_color[12]);

	p_ch = "Dados Corretos ? (S/N) ";
	co   = DELTA_X(50) - (textwidth(p_ch))/2;
	co_1 = DELTA_X(50) + (textwidth(p_ch))/2;
	li   = DELTA_Y(95);


	outtextxy( co, li, p_ch );

	setcolor (cor);

	LeituraC( co_1, li, Resposta, "SsNn");

	ApagaWord( co, li, 25 );


      } while ( pertence(*Resposta,"Nn") );



   CalculaCVteorico();

   CalculaVVMteorico();

   CalculaFLUXteorico();

   DadosPacienteOk = TRUE;

   if (novopac)      ZeraProvas();

   } /* End of DadosPaciente() */
Exemple #14
0
void VentVol ( void )
   {
   int opcao1, opcao2;

   float far *apt1;
   float far *apt2;
   float   far *apt3;
   float   far *apt4;


   inicVVM1    = ApontVVM;
   inicVVM1Int = ApontVVMInt;
   menuVVM[0]  = "EXECUTAR TESTE";
   menuVVM[1]  = "   RETORNAR   ";

   AmbienteVentVolMax();

   getviewsettings(&vp);
   if (*inicVVM1 != NULL)
      {
      teste1VVM = TRUE ;
      GraficoVVMSecund();
      grafSecundVVM = TRUE;
      }
   else
      {
      ManobVVMAtiva = 1;
      NumManobVVM = 0;
      teste1VVM = grafSecundVVM = FALSE;
      }

   teste2VVM = FALSE;
   do {
      Abortou = FALSE;
      LimpaBufferTeclado();

      opcao1 = MenuVentVolMax();

      if (opcao1 == EXECUTAR)
	 {
	 DesativaJanelaGrafica(MENU_3);

	 if ((teste1VVM)&&(!grafSecundVVM))
	     {
	     GraficoVVMSecund();
	     grafSecundVVM = TRUE;
	     }
	 else if (teste2VVM)
	     {
	     MelhorProvaVVM (ManobVVMAtiva, NumManobVVM);
	     teste2VVM = FALSE;
	     teste1VVM = TRUE ;
#ifdef  MODO_VGA_640X480_HIG
	     AmbienteVentVolMax();
#endif  MODO_VGA_640X480_HIG
	     GraficoVVMSecund();
	     }

	 AtivaJanelaGrafica(GRAF1,0);
	 setcolor ( bea_color[14] );

	 clearviewport();

	 ProcuraZero();

	 if (ZeroOk)
	    {
	    inicVVM2 = inicVVM1;
	    inicVVM1 = (inicVVM1 == areaTampao) ? areaVVM : areaTampao;
	    inicVVM2Int = inicVVM1Int;
	    inicVVM1Int = (inicVVM1Int == areaTampaoInt) ? areaVVMInt : areaTampaoInt;

	    clearviewport();
	    getviewsettings(&vp);

	    DesenhaEixos( DELTA_X( 4), DELTA_X(96),
			  DELTA_Y( 4), DELTA_Y(98),
			  DELTA_X( 2), DELTA_Y(24),
			  DELTA_X(22), DELTA_Y(14) );

	    ScalaVVM();

	    DesativaJanelaGrafica(GRAF1);
	    AtivaJanelaGrafica(MENU_3, 0);
	    setcolor ( bea_color[14] );
	    menuVVM[0] = "   INICIAR    ";
	    menuVVM[1] = "   ANULAR     ";

	    do {
	       ++NumManobVVM;
	       testVVMOk = FALSE;
	       LimpaBufferTeclado();
	       opcao2 = MenuVentVolMax();
	       if (opcao2 == INICIAR)
		  {
		  DesativaJanelaGrafica(MENU_3);
		  AtivaJanelaGrafica(GRAF1, 0);
		  setcolor ( bea_color[14] );

		  /* --------------- */
		  /* Executa Manobra */
		  /* --------------- */
		  Ventilation();

		  testVVMOk = TRUE;
		  DesativaJanelaGrafica(GRAF1);
		  }
	       } while((opcao2 != ANULAR)&&(!testVVMOk));

	    if ((opcao2 == ANULAR)||(Abortou))
	       {
	       --NumManobVVM;
	       inicVVM1  = inicVVM2;
	       inicVVM2 = NULL ;
	       inicVVM1Int  = inicVVM2Int;
	       inicVVM2Int = NULL ;
	       }

	    ApontVVM = inicVVM1;
	    ApontVVMInt = inicVVM1Int;
	    AtivaJanelaGrafica(MENU_3,0);
	    setcolor ( bea_color[14] );

	    menuVVM[0] = "EXECUTAR TESTE";
	    menuVVM[1] = "   RETORNAR   ";

	    }
	 else  DesativaJanelaGrafica(GRAF1);
	 }

      } while(opcao1 != RETORNAR);

   setcolor(bea_color[14]);

   if (teste2VVM)    MelhorProvaVVM (ManobVVMAtiva, NumManobVVM);
   if (inicVVM1 == areaTampao)
      {
      for ( apt1   = areaTampao,apt2=areaVVM;
	    apt1  != areaTampao+NUMMAXPONTOSINF;
	    apt1++, apt2++  )
	     {
	     *apt2 = *apt1;
	     }

      ApontVVM = areaVVM;

      for ( apt3   = areaTampaoInt,apt4 = areaVVMInt;
	    apt3  != areaTampaoInt + NUMMAXPONTOSINF;
	    apt3++, apt4++)
	     {
	     *apt4 = *apt3;
	     }
      ApontVVMInt  = areaVVMInt;
      }
   else
      {
      ApontVVM     =    inicVVM1;
      ApontVVMInt  = inicVVM1Int;
      }

   inicVVM1    = NULL;
   inicVVM2    = NULL;
   inicVVM1Int = NULL;
   inicVVM2Int = NULL;

   } /* VentVol */
Exemple #15
0
void MelhorProvaVVM(int old, int nnew)
   {
   register int     i, ncol, nlin,
		       escala, y0,
			   y1, y2;
   int             y_ini0, y_ini1;
   int                        cor;
   int               janelaAtiva;

   float    far              *apt;
   float    far           *aptaux;
   register float  flux, sum_flux;
   float                   sum[4];

   char                     *p_ch;
   char                  setaE[2],
			 setaD[2];




   setaE[0] = 27;
   setaD[0] = 26;
   setaE[1] = setaD[1] = '\0';

#ifndef MODO_VGA_640X480_HIG
   setactivepage(1);
   setvisualpage(1);
#else   MODO_VGA_640X480_HIG
   LimpaTela();
#endif  MODO_VGA_640X480_HIG

   setviewport ( 0, 0, MAXX, MAXY, 1 );
   clearviewport ();

   cor = getcolor();
   setcolor (bea_color[12]);
   CriaJanelaGrafica(   MANOB1,
			0,
			0,
			(int) ((MAXX * 49L)/100),
			(int) ((MAXY * 90L)/100),
			0, "MANOBRA %02d", old   );

   clearviewport();

   CriaJanelaGrafica(   MANOB2,
			(int) ((MAXX * 51L)/100),
			0,
			MAXX,
			(int) ((MAXY * 90L)/100),
			0,
			"MANOBRA %02d", nnew     );

   clearviewport();
   setcolor (cor);

   AtivaJanelaGrafica(MANOB1,0);
   setcolor ( bea_color[14] );

   getviewsettings (&vp);

   DesenhaEixos( DELTA_X(2), DELTA_X(96),
		 DELTA_Y(4), DELTA_Y(98),
		 DELTA_X(6), DELTA_Y(22),
		 DELTA_X(22),DELTA_Y(14) );

   sum_flux         =         0.0;
   escala           = DELTA_Y(14);
   coluna           = DELTA_X( 8);
   y0 = y_ini0      = DELTA_Y(76);
   y2 = y1 = y_ini1 = DELTA_Y(92);

   apt              =    inicVVM2;
   aptaux           = inicVVM2Int;
   sum[0] = sum[1]  =
   sum[2] = sum[3]  =         0.0;


   ScalaVVMBetter();


   for (   i = 0;
	   (*apt != FIM_1) &&
	   (apt < inicVVM2 + NUMMAXPONTOSINF);
	   apt++, i++    )
      {
      flux      = *aptaux; aptaux++;

#ifdef VVM_ALCAP_
      sum_flux += flux / SampleRatio;

      sum[0] = (.01 * sum_flux) + (.19 * sum[1]) +
	       (.30 *   sum[2]) + (.50 * sum[3]);

      sum[3] = sum[2];
      sum[2] = sum[1];
      sum[1] = sum[0];
#else  VVM_ALCAP_
      sum_flux = sum_flux;
      flux = flux;
      y_ini1 = y_ini1;
      y0 = y0;
      y1 = y1;
      y2 = y2;
#endif  VVM_ALCAP_

      ncol = (int) ( (((long) i) * DELTA_X(88))/2400 + DELTA_X( 8) );

      if ( ncol != coluna )
	 {
	 cor = getcolor();

	 /* -------------------------- */
	 /* Tracado do Volume Expirado */
	 /* -------------------------- */
	 nlin = (int) ((y_ini0 - (((long) escala ) * (*apt))/10));

	 moveto(coluna, y0);
	 lineto( coluna, nlin );
	 y0 = nlin;

#ifdef VVM_ALCAP_
	 setcolor (bea_color[ 7]);

	 /* ----------------------------- */
	 /* Tracado do Volume (Invertido) */
	 /* ----------------------------- */
	 nlin = (int) ((y_ini1 + (((long) escala ) * (sum_flux))/2));

	 moveto(coluna, y1);
	 lineto( coluna, nlin );
	 y1 = nlin;

	 setcolor (bea_color[11]);

	 /* -------------------------------------------------- */
	 /* Tracado Valor Medio filtrado do Volume (Invertido) */
	 /* -------------------------------------------------- */
	 nlin = (int) ((y_ini1 + (((long) escala ) * (sum[0]))/2));
	 moveto(coluna, y2);
	 lineto( coluna, nlin );
	 y2 = nlin;
#endif VVM_ALCAP_

	 setcolor (cor);

	 coluna = ncol;
	 }

      }

   outtextxy(DELTA_X(10) , DELTA_Y(10),
	     "Param  Teor    Calc      %");

   cor = getcolor ();

   setcolor (bea_color[15]);

   gprintf(  DELTA_X(10), DELTA_Y(11) + CharH,
	     "VVM    %6.2f  %6.2f  %4.0f",
	     VentVolMaxteorico,
	     VentVolMax2,
	     (VentVolMaxpercen2 + 0.5)  );

#ifdef VVM_ALCAP_
   gprintf  (DELTA_X(10), DELTA_Y(12) + 2 * CharH,
	     "ALCAP    --   %7.2f    - ",
	     VolAlcaponado2);
#endif VVM_ALCAP_



   /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */


   setcolor (cor);

   AtivaJanelaGrafica(MANOB2,0);
   setcolor ( bea_color[14] );

   getviewsettings (&vp);

   DesenhaEixos( DELTA_X(2), DELTA_X(96),
		 DELTA_Y(4), DELTA_Y(98),
		 DELTA_X(6), DELTA_Y(22),
		 DELTA_X(22),DELTA_Y(14) );

   sum_flux         =         0.0;
   escala           = DELTA_Y(14);
   coluna           = DELTA_X( 8);
   y0 = y_ini0      = DELTA_Y(76);
   y2 = y1 = y_ini1 = DELTA_Y(92);

   apt              =    inicVVM1;
   aptaux           = inicVVM1Int;
   sum[0] = sum[1]  =
   sum[2] = sum[3]  =         0.0;


   ScalaVVMBetter();


   for (   i = 0;
	   (*apt != FIM_1) &&
	   (apt < inicVVM1 + NUMMAXPONTOSINF);
	   apt++, i++    )
      {
      flux      = *aptaux; aptaux++;
#ifdef VVM_ALCAP_
      sum_flux += flux / SampleRatio;

      sum[0] = (.01 * sum_flux) + (.19 * sum[1]) +
	       (.30 *   sum[2]) + (.50 * sum[3]);

      sum[3] = sum[2];
      sum[2] = sum[1];
      sum[1] = sum[0];
#endif VVM_ALCAP_

      ncol = (int) ( (((long) i) * DELTA_X(88))/2400 + DELTA_X( 8) );

      if ( ncol != coluna )
	 {
	 cor = getcolor();

	 /* -------------------------- */
	 /* Tracado do Volume Expirado */
	 /* -------------------------- */
	 nlin = (int) ((y_ini0 - (((long) escala ) * (*apt))/10));

	 moveto(coluna, y0);
	 lineto( coluna, nlin );
	 y0 = nlin;

#ifdef VVM_ALCAP_
	 setcolor (bea_color[ 7]);

	 /* ----------------------------- */
	 /* Tracado do Volume (Invertido) */
	 /* ----------------------------- */
	 nlin = (int) ((y_ini1 + (((long) escala ) * (sum_flux))/2));

	 moveto(coluna, y1);
	 lineto( coluna, nlin );
	 y1 = nlin;

	 setcolor (bea_color[11]);

	 /* -------------------------------------------------- */
	 /* Tracado Valor Medio filtrado do Volume (Invertido) */
	 /* -------------------------------------------------- */
	 nlin = (int) ((y_ini1 + (((long) escala ) * (sum[0]))/2));
	 moveto(coluna, y2);
	 lineto( coluna, nlin );
	 y2 = nlin;
#endif VVM_ALCAP_

	 setcolor (cor);

	 coluna = ncol;
	 }

      }

   outtextxy(DELTA_X(10) , DELTA_Y(10),
	     "Param  Teor    Calc      %");

   cor = getcolor ();

   setcolor (bea_color[15]);

   gprintf(  DELTA_X(10) , DELTA_Y(11) + CharH,
	     "VVM    %6.2f  %6.2f  %4.0f",
	     VentVolMaxteorico,
	     VentVolMax,
	     (VentVolMaxpercent + 0.5)  );

#ifdef VVM_ALCAP_
   gprintf  (DELTA_X(10), DELTA_Y(12) + 2 * CharH,
	     "ALCAP    --   %7.2f    - ",
	     VolAlcaponado);
#endif VVM_ALCAP_

   setcolor (cor);

   DesativaJanelaGrafica(MANOB2);

   cor = getcolor();
   setcolor (bea_color[12]);

   p_ch = "ESCOLHA DA MELHOR MANOBRA (%1s %1s)";

   gprintf((MAXX - textwidth(p_ch))/2,
	   (int) ((MAXY * 95L)/100),
	   p_ch,
	   setaE,
	   setaD);

   AtivaJanelaGrafica(MANOB1,0);
   setcolor ( bea_color[14] );
   janelaAtiva = 0;
   do {
      LimpaBufferTeclado();
      sc.c = LeTeclado();
      if (sc.ch[0] == 0)
	 if (sc.ch[1]==75 || sc.ch[1]==77)
	    {
	    DesativaJanelaGrafica(janelaAtiva);
	    janelaAtiva = (janelaAtiva + 1) % 2;
	    AtivaJanelaGrafica(janelaAtiva,0);
	    setcolor ( bea_color[14] );
	    }
      } while(sc.ch[0] != ENTER);

   setcolor (cor);

   DesativaJanelaGrafica(janelaAtiva);

   if (janelaAtiva == 0)
      {
      inicVVM1 = inicVVM2;
      inicVVM1Int = inicVVM2Int;
      VentVolMax = VentVolMax2;
      VentVolMaxpercent = VentVolMaxpercen2  ;
      VolAlcaponado = VolAlcaponado2;
      }
   else    ManobVVMAtiva = nnew;

#ifndef MODO_VGA_640X480_HIG
   setactivepage(0);
   setvisualpage(0);
#endif  MODO_VGA_640X480_HIG
   }        /* MelhorProvaVVM */
Exemple #16
0
void GraficoVVMSecund (void)
   {
   register int     i, ncol, nlin,
		       escala, y0,
			   y1, y2;
   int             y_ini0, y_ini1;
   int                        cor;

   float    far              *apt;
   float    far           *aptaux;
   register float  flux, sum_flux;
   float                   sum[4];


   inicVVM2    =    inicVVM1;
   inicVVM2Int = inicVVM1Int;



   AtivaJanelaGrafica(GRAF2,0);
   setcolor ( bea_color[14] );

   clearviewport();

   getviewsettings (&vp);


   DesenhaEixos( DELTA_X( 5), DELTA_X(97),
		 DELTA_Y( 4), DELTA_Y(80),
		 DELTA_X( 4), DELTA_Y(20),
		 DELTA_X(22), DELTA_Y(11) );


   sum_flux         =         0.0;
   escala           = DELTA_Y(11);
   coluna           = DELTA_X( 9);
   y0 = y_ini0      = DELTA_Y(60);
   y2 = y1 = y_ini1 = DELTA_Y(75);

   apt              =    inicVVM2;
   aptaux           = inicVVM2Int;
   sum[0] = sum[1]  =
   sum[2] = sum[3]  =         0.0;


   ScalaVVMSecund();


   for (   i = 0;
	   (*apt != FIM_1) &&
	   (apt < inicVVM2 + NUMMAXPONTOSINF);
	   apt++, i++    )
      {

      flux = *aptaux; aptaux++;
#ifdef VVM_ALCAP_
      sum_flux += flux / SampleRatio;

      sum[0] = (.01 * sum_flux) + (.19 * sum[1]) +
	       (.30 *   sum[2]) + (.50 * sum[3]);

      sum[3] = sum[2];
      sum[2] = sum[1];
      sum[1] = sum[0];
#else  VVM_ALCAP_
      sum_flux = sum_flux;
      flux = flux;
      y_ini1 = y_ini1;
      y0 = y0;
      y1 = y1;
      y2 = y2;
#endif  VVM_ALCAP_

      ncol = (int) ( (((long) i) * DELTA_X(88))/2400 + DELTA_X( 9) );

      if ( ncol != coluna )
	 {
	 cor = getcolor();

	 /* -------------------------- */
	 /* Tracado do Volume Expirado */
	 /* -------------------------- */
	 nlin = (int) ((y_ini0 - (((long) escala ) * (*apt))/10));

	 moveto(coluna, y0);
	 lineto( coluna, nlin );
	 y0 = nlin;

#ifdef VVM_ALCAP_
	 setcolor (bea_color[ 7]);

	 /* ----------------------------- */
	 /* Tracado do Volume (Invertido) */
	 /* ----------------------------- */
	 nlin = (int) ((y_ini1 + (((long) escala ) * (sum_flux))/2));

	 moveto(coluna, y1);
	 lineto( coluna, nlin );
	 y1 = nlin;

	 setcolor (bea_color[11]);

	 /* -------------------------------------------------- */
	 /* Tracado Valor Medio filtrado do Volume (Invertido) */
	 /* -------------------------------------------------- */
	 nlin = (int) ((y_ini1 + (((long) escala ) * (sum[0]))/2));
	 moveto(coluna, y2);
	 lineto( coluna, nlin );
	 y2 = nlin;
#endif VVM_ALCAP_

	 setcolor (cor);

	 coluna = ncol;
	 }

      }

   VentVolMax2 = VentVolMax;

   VentVolMaxpercen2 = VentVolMaxpercent;

   VolAlcaponado2 = VolAlcaponado;

   outtextxy( DELTA_X ( 5),
	      DELTA_Y (85),
	      "Param  Teor    Calc      %");

   cor = getcolor ();

   setcolor (bea_color[15]);

   gprintf( DELTA_X ( 5),
	    DELTA_Y (87) + CharH,
	    "VVM    %6.2f  %6.2f  %4.0f",
	    VentVolMaxteorico,
	    VentVolMax2,
	    (VentVolMaxpercen2 + 0.5));

#ifdef VVM_ALCAP_
   gprintf  (DELTA_X( 5),
	     DELTA_Y(89) + 2 * CharH,
	     "ALCAP    --   %7.2f    - ",
	     VolAlcaponado2);
#endif VVM_ALCAP_


   setcolor (cor);

   DesativaJanelaGrafica(GRAF2);

   }  /* GraficoVVMSecund */
Exemple #17
0
void Ventilation (void)
   {
   register int       flagvvm = 0;
   register int        ncol, nlin,
		       escala, y0,
			   y1, y2;
   int             y_ini0, y_ini1;
   int                        cor;

   float    far              *apt;
   float    far           *aptaux;
   register float  flux, sum_flux;
   float                   sum[4];
#ifdef    BYPASS_VVM
   int                   step = 0;
   int                 offset = 0;
#endif    BYPASS_VVM

   LeData ();

   getviewsettings (&vp);

   VentVolMax = sum_flux    = 0.0;
   NumeroSinal      =           0;
   escala           = DELTA_Y(14);
   coluna           = DELTA_X( 6);
   y0 = y_ini0      = DELTA_Y(74);
   y2 = y1 = y_ini1 = DELTA_Y(90);

   apt              =    inicVVM1;
   aptaux           = inicVVM1Int;
   Atendeu          =       FALSE;
   sum[0] = sum[1]  =
   sum[2] = sum[3]  =         0.0;
   LinBaseVVM1 = LinBaseVVM2 =0.0;

#ifndef    BYPASS_HADWARE
#ifndef    BYPASS_VVM
   IniAquisition();
   EnableInt();
#endif     BYPASS_VVM
#endif     BYPASS_HADWARE

   do {
#ifndef    BYPASS_VVM
      DisableInt();
#endif     BYPASS_VVM
      Help = kbhit() && (ESC == getch());
#ifndef    BYPASS_VVM
      EnableInt();
#endif     BYPASS_VVM
      if (Help)	 Abortou = TRUE;
      else
	 {
#ifndef    BYPASS_VVM
	 while(!Atendeu);
	 Sinal -= (int)Zero;
#else      BYPASS_VVM
	 Sinal  = 14;
#endif     BYPASS_VVM
	 Atendeu = FALSE;
	 }
      } while( (abs(Sinal) < 10) && (!Abortou) );

   if (!Abortou)
      {
#ifdef  GRAVACAO_DE_DADOS
      fprintf ( PDados, "\n\n\t %%%%%%%%%%% VENTVOL: %%%%%%%%%%%");
#endif  GRAVACAO_DE_DADOS
      do {
#ifndef    BYPASS_VVM
	 DisableInt();
#endif     BYPASS_VVM
	 Help = kbhit() && (ESC == getch());
#ifndef    BYPASS_VVM
	 EnableInt();
#endif     BYPASS_VVM
	 if (Help)  Abortou = TRUE;
	 else
	     {
#ifndef    BYPASS_VVM
	     while(!Atendeu);

	     *aptaux = flux = (Sinal > Zero)  ?
				 VDxFluxo ( Sinal , GanhoExp ):
				 VDxFluxo ( Sinal , GanhoIns );

#else      BYPASS_VVM
	     /* ----------------------------- */
	     /* Simulacao de um Alcaponamento */
	     /* ----------------------------- */
	     if (!(NumeroSinal % 15))
		{
		offset = -1;
		}
	     else
		{
		offset =  0;
		}

	     if ( NumeroSinal > 1200 )
		{
		offset = -2;
		}
	     if ( NumeroSinal > 1300 )
		{
		offset =  0;
		}

	     *aptaux = flux = 10 * cos ( (M_PI * step++) /60) + offset;
#endif     BYPASS_VVM

#ifdef     GRAVACAO_DE_DADOS
	     fprintf ( PDados, "\n\t%04X", Sinal);
#endif     GRAVACAO_DE_DADOS


	     if (*aptaux > 0.0)
	       {
	       VentVolMax += flux / SampleRatio;
	       flagvvm = 1;
	       }

#ifdef VVM_ALCAP_
	     sum_flux += flux / SampleRatio;

	     sum[0] = (.01 * sum_flux) + (.19 * sum[1]) +
		      (.30 *   sum[2]) + (.50 * sum[3]);

	     sum[3] = sum[2];
	     sum[2] = sum[1];
	     sum[1] = sum[0];

	     /* --------------------------- */
	     /* Calculo das Linhas de Base  */
	     /* para obtencao do valor do   */
	     /* volume Alcaponado.          */
	     /*                             */
	     /* Convecionou-se:             */
	     /* LBASE1 -> Volume Medio Entre*/
	     /*           2 e 3 segundos.   */
	     /*                             */
	     /* LBASE2 -> Volume Medio Entre*/
	     /*           10 e 11 segundos. */
	     /*                             */
	     /* Volume Acapondado Extrapola-*/
	     /* do a um minuto sera a dife- */
	     /* das das linhas de Base vezes*/
	     /* 7.5 (que e'60/8)            */
	     /* --------------------------- */

	     if      ( (NumeroSinal >=  200) && (NumeroSinal <  400) )
		/* ------- */
		/* LBASE_1 */
		/* ------- */
		{
		LinBaseVVM1 += sum[0];

		}
	     else if ( (NumeroSinal >= 2000) && (NumeroSinal < 2200) )
		/* ------- */
		/* LBASE_2 */
		/* ------- */
		{
		LinBaseVVM2 += sum[0];
		}
#else  VVM_ALCAP_
	     sum_flux = sum_flux;
	     y_ini1 = y_ini1;
	     y0 = y0;
	     y1 = y1;
	     y2 = y2;
#endif  VVM_ALCAP_

	     if (flagvvm)
	     {
	     *apt = VentVolMax;

	     /* --------------------------- */
	     /* Um ponto chega a cada 5ms   */
	     /* Totalizando 2400 ptos em 12s*/
	     /* Os 12s medem DELTA_X(88),   */
	     /* logo a coluna atual depende */
	     /* de NumSinal segundo a formu-*/
	     /* la abaixo:                  */
	     /* --------------------------- */
	     ncol = (int) ( (((long) NumeroSinal) * DELTA_X(88))/2400  +
			    DELTA_X( 6) );

	     if ( ncol != coluna )
		{
		cor = getcolor();

		/* -------------------------- */
		/* Tracado do Volume Expirado */
		/* -------------------------- */
		nlin = (int) ((y_ini0 - (((long) escala ) * VentVolMax)/10));

		moveto(coluna, y0);
		lineto( coluna, nlin );
		y0 = nlin;

#ifdef VVM_ALCAP_
		setcolor (bea_color[ 7]);

		/* ----------------------------- */
		/* Tracado do Volume (Invertido) */
		/* ----------------------------- */
		nlin = (int) ((y_ini1 + (((long) escala ) * (sum_flux))/2));

		moveto(coluna, y1);
		lineto( coluna, nlin );
		y1 = nlin;

		setcolor (bea_color[11]);

		/* -------------------------------------------------- */
		/* Tracado Valor Medio Filtrado do Volume (Invertido) */
		/* -------------------------------------------------- */
		nlin = (int) ((y_ini1 + (((long) escala ) * (sum[0]))/2));
		moveto(coluna, y2);
		lineto( coluna, nlin );
		y2 = nlin;
#endif VVM_ALCAP_

		setcolor (cor);

		coluna = ncol;
		}

	     ++NumeroSinal;
	     }

	     ++apt;
	     ++aptaux;

	     Atendeu = FALSE;
	     }
	 } while ( (NumeroSinal != NUMMAXPONTOSINF-1) &&
		   (coluna != DELTA_X(88) + DELTA_X( 6)) &&
		   (!Abortou) );



#ifndef    BYPASS_VVM
      DisableInt();
#endif     BYPASS_VVM

      for (; apt<inicVVM1+NUMMAXPONTOSINF; apt++)
	  {
	  *apt = FIM_1;
	  }

      *aptaux = END;
      *(aptaux+1) = TempAmb;
      *(aptaux+2) = UmidRel;
      *(aptaux+3) = PresBar;

      if (!Abortou)
	 {
	 if (FlagIntegridade) ReCalcula();

	 CalculaParamVVM();
	 CalculaVVMpercent();

	 outtextxy(DELTA_X(25) , DELTA_Y( 5),
		   "Param Teorico Calculado  %");
	 cor = getcolor();
	 setcolor(bea_color[15]);
	 gprintf  (DELTA_X(25) , DELTA_Y( 6) + CharH,
		   "VVM   %6.2f  %6.2f   %4.0f",
		   VentVolMaxteorico,
		   VentVolMax,
		   (VentVolMaxpercent+0.5));

#ifdef VVM_ALCAP_
	 gprintf  (DELTA_X(25) , DELTA_Y( 7) + 2 * CharH,
		   "ALCAP    --  %7.2f     - ",
		   VolAlcaponado);
#endif VVM_ALCAP_


	 setcolor(cor);

	 if (teste1VVM)
	    {
	    teste2VVM = TRUE;
	    teste1VVM = FALSE;
	    }
	 else
	    teste1VVM = TRUE;
	 }
      }
#ifndef    BYPASS_VVM
   else  DisableInt();
#endif     BYPASS_VVM
   }        /* Ventilation */
Exemple #18
0
int MenuVentVolMax ( void )
   {
   int  Cont = 0,
	Lin[2],
	alt;

   Lin[0] = 35;
   Lin[1] = 60;

   AtivaJanelaGrafica(MENU_3,0);
   setcolor ( bea_color[14] );
   getviewsettings(&vp);

   alt = CharH;
   setviewport( vp.left , vp.top + DELTA_Y(Lin[Cont]) - 1,
		vp.right, vp.top + DELTA_Y(Lin[Cont]) + 1 + alt, 1);
   clearviewport();
   setfillstyle(1, bea_color[14]);
   floodfill(1,1,1);
   setcolor(bea_color[ 0]);
   outtextxy(  DELTA_X(50) - textwidth(menuVVM[Cont])/2, 2, menuVVM[Cont]);



   setviewport( vp.left , vp.top + DELTA_Y(Lin[1]) - 1,
		vp.right, vp.top + DELTA_Y(Lin[1]) + 1 + alt, 1);
   clearviewport();
   setfillstyle(1, bea_color[0]);
   floodfill(1,1,1);
   setcolor(bea_color[14]);
   outtextxy(  DELTA_X(50) - textwidth(menuVVM[1])/2, 2, menuVVM[1]);



   do {
      LimpaBufferTeclado();
      sc.c = LeTeclado();
      if (sc.ch[0] == 0)
	 if (sc.ch[1]==72 || sc.ch[1]==80)
	    {
	    setviewport( vp.left , vp.top + DELTA_Y(Lin[Cont]) - 1,
			 vp.right, vp.top + DELTA_Y(Lin[Cont]) + 1 + alt, 1);

	    clearviewport();

	    setcolor(bea_color[14]);

	    outtextxy(  DELTA_X(50) - textwidth(menuVVM[Cont])/2, 2, menuVVM[Cont]);

	    Cont = (Cont + 1) % 2;

	    setviewport( vp.left , vp.top + DELTA_Y(Lin[Cont]) - 1,
			 vp.right, vp.top + DELTA_Y(Lin[Cont]) + 1 + alt, 1);

	    clearviewport();
	    setfillstyle(1, bea_color[14]);
	    floodfill(1,1,1);
	    setcolor(bea_color[0]);
	    outtextxy(  DELTA_X(50) - textwidth(menuVVM[Cont])/2, 2, menuVVM[Cont]);
	    }
      } while(sc.ch[0] != ENTER);

   setviewport(vp.left,vp.top,vp.right,vp.bottom,1);

   return(Cont);
   }  /* MenuVentVolMax */
Exemple #19
0
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);
}
Exemple #20
0
/*************************************************************************
 *
 *N  displayerror
 *
 *::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 *
 *   Purpose:
 *P
 *     This function displays an error message when a disk error is detected.
 *     It displays the given lines of text in a popup panel and waits for
 *     the user to click on either retry or cancel.  It returns 1 for retry
 *     and 0 for cancel.  Must be in graphics mode to call this function.
 *
 *     text strings may contain embedded newlines, in which case text to the
 *     right of the newline will be displayed on (what else?) a new line.
 *E
 *::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 *
 *   Parameters:
 *A
 *    text[]  <input> == (char *) array of text strings to be displayed.
 *    nlines  <input> == (int) number of lines of text (this count ignores
 *                             newline characters embedded in the text
 *                             strings
 *    return <output> == (VPF_BOOLEAN) 1 => retry,
 *                                 0 => cancel.
 *E
 *::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 *
 *   History:
 *H
 *    Barry Michaels    July 1990    Prototype 3    DOS Turbo C
 *E
 *************************************************************************/
VPF_BOOLEAN displayerror( char *text[],
		      int  nlines )
{
   register int i;
   int          maxw,
		height,
		x,
		y,
		pad,
		choice,
		n_real_lines;
   panel_type   panel;
   int          retry_button  = 'r',
		cancel_button = 'c',
		msg_ar_sz     = 10;
   char       * walker,
	     ** msgs;
   struct viewporttype view;

   getviewsettings( &view );
   setviewport(0,0,getmaxx(),getmaxy(),1);


   settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
   msgs = (char **) vpfmalloc(msg_ar_sz * sizeof(char *));
   maxw = height = 0;

   for (n_real_lines = i = 0; i < nlines; i++) {
     walker = text[i];
     while (1) {
	size_t substr_len = strcspn(walker, "\n");
	char   plug;

	maxw                 = max(maxw, textwidth(walker));
	height               = height + textheight(walker) + 5;
	plug                 = walker[substr_len];
	walker[substr_len]   = '\0';
	msgs[n_real_lines++] = strdup(walker);

	if (n_real_lines == msg_ar_sz)
	  msgs = (char **) realloc(msgs, (msg_ar_sz += 5) * sizeof(char *));
	if (plug == 0)
	  break;

	walker[substr_len] = plug;
	walker            += substr_len + 1;
     }
   }

   if (maxw < (textwidth("Retry") + textwidth("Cancel") + 20))
      maxw = textwidth("Retry") + textwidth("Cancel") + 20;

   pad    = (maxw*10)/100;
   maxw   = maxw + (2*pad);
   height = height + 2*(textheight("Retry") + 5) + 1;
   maxw   = min(getmaxx(), maxw);
   height = min(getmaxy()-10, height);

   create_panel( &panel, maxw, height, menucolor, menubordercolor );

   for (y = i = 0; i < n_real_lines; i++) {
     create_label(msgs[i], pad, y, SMALL_FONT, 4, menutextcolor, &panel );
     y += textheight(msgs[i]) + 3;
   }

   y = height-15;

   create_button( retry_button,
		  "Retry",
		  3,
		  y,
		  SMALL_FONT,
		  4,
		  menutextcolor,
		  menucolor,
		  menubordercolor,
		  RELIEVED,
		  &panel );
   create_button( cancel_button,
		  "Cancel",
		  maxw - (textwidth("Cancel") + 13),
		  y,
		  SMALL_FONT,
		  4,
		  menutextcolor,
		  menucolor,
		  menubordercolor,
		  RELIEVED,
		  &panel );

   get_display_position( &x, &y, panel.window );

   display_panel( &panel, x,y );
   showmousecursor();
   arrow_cursor();
   choice = process_panel( &panel, 0 );
   hidemousecursor();

   destroy_panel( &panel );
   close_panel( &panel );

   setviewport(view.left,view.top,view.right,view.bottom,view.clip);

   for (i = 0; i < n_real_lines; i++)
     free(msgs[i]);
   free(msgs);

   return (choice == retry_button) ? 1 : 0;
}
Exemple #21
0
void WorkArea::load(FILE *f)
{
    delete items;
    struct viewporttype vp;

    getviewsettings(&vp);
    setviewport(x1, y1, x2, y2, 1);
    items = new List();
    clearviewport();

    int fig, i, a[200];
    char *stream = (char*) malloc(1000*sizeof(char));
    char *n, *temp;

    while (fgets(stream, 1000, f))
    {
        i = -1;
        temp = stream;
        while ((n = strtok(temp, " ")) != NULL)
        {
            if (i == -1)
            {
                i = 0;
                fig = atoi(n);
            }
            else
                a[i++] = atoi(n);
            temp = NULL;
        }
        switch (fig)
        {
        case LINE_ID:
            items->add(new Node(new Line(a)));
            break;
        case POLYLINE_ID:
            items->add(new Node(new Polyline(a)));
            break;
        case CIRCLE_ID:
            items->add(new Node(new Circle(a)));
            break;
        case ELLIPSE_ID:
            items->add(new Node(new Ellipse(a)));
            break;
        case RECTANGLE_ID:
            items->add(new Node(new Rectangle(a)));
            break;
        case FILLED_CIRCLE_ID:
            items->add(new Node(new FilledCircle(a)));
            break;
        case FILLED_ELLIPSE_ID:
            items->add(new Node(new FilledEllipse(a)));
            break;
        case FILLED_RECTANGLE_ID:
            items->add(new Node(new FilledRectangle(a)));
            break;
        }
    }

    free(stream);
    mouse_off();
    items->drawAll();
    mouse_on();
    setviewport(vp.left, vp.top, vp.right, vp.bottom, vp.clip);
}
Exemple #22
0
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);
}
Exemple #23
0
Fichier : FED.C Projet : MegaGod/TW
void edit( int ch ) {
	struct viewporttype tmp;
	char key, *buff;

	take_char( ( char ) ch );
	backup_char( );
	getviewsettings( &tmp );
	setviewport( 400, 30, getmaxx( ), getmaxy( ), 1 );
	buff = ( char* ) malloc( imagesize( 0 + align, 0, X*( 2 + WIDTH_X ) + align, Y*( 2 + WIDTH_Y ) ) );
	getimage( 0 + align, 0, X*( 2 + WIDTH_X ) + align, Y*( 2 + WIDTH_Y ), buff );
	draw_char( );
	start_clock( EDIT_FONT );

	while ( ( key = get_pos( &pos_x, &pos_y, X - 1, Y - 1, 1, 1 ) ) != 3 ) {
		switch ( tolower( key ) ) {
		case 1:
			xor_dot( pos_x, pos_y );
			continue;

		case '8':
			pan_up( );
			draw_char( );
			break;

		case '2':
			pan_down( );
			draw_char( );
			break;

		case '4':
			pan_left( );
			draw_char( );
			break;

		case '6':
			pan_right( );
			draw_char( );
			break;

		case 'r':
			insert_row( pos_y );
			draw_char( );
			break;

		case 'c':
			insert_col( pos_x );
			draw_char( );
			break;

		case 'e':
			del_row( pos_y );
			draw_char( );
			break;

		case 'd':
			del_col( pos_x );
			draw_char( );
			break;

		case 'i':
			invert( );
			draw_char( );
			break;

		case 'm':
			mirror( );
			draw_char( );
			break;

		case '.':
			++draw_mode;
			switch ( draw_mode ) {
			case 0:
				break;
			case 1:
				put_dot( pos_x, pos_y );
				edit_font[pos_x][pos_y] = ~0;
				break;
			case 2:
				square( pos_x, pos_y );
				edit_font[pos_x][pos_y] = 0;
				break;
			case 3:
				draw_mode = 0;
			}
			continue;

		case 'u':
			undo( );
			draw_char( );
			goto exit;

		case '?':
			help( );
			break;

		default:
			if ( draw_mode == 1 ) {
				put_dot( pos_x, pos_y );
				edit_font[pos_x][pos_y] = ~0;
			}
			if ( draw_mode == 2 ) {
				square( pos_x, pos_y );
				edit_font[pos_x][pos_y] = 0;
			}

		}
	}
	update_char( ( char ) ch );
exit:
	putimage( 0 + align, 0, buff, COPY_PUT );
	free( buff );
	stop_clock( );
	dispblank( 50, 16, strlen( "Move mode" ), 0 );
	setviewport( tmp.left, tmp.top, tmp.right, tmp.bottom, tmp.clip );
	print_table( which_page( ch ) );
}
Exemple #24
0
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();
                }
Exemple #25
0
void AmbientePaciente (void)
   {
   register  int  delta_x, delta_y;
   char           *p_ch, id;


   delta_x = (int) ((MAXX * 15L) / 1000);
   delta_y = (int) ((MAXY * 17L) / 1000);


   p_ch = "ENTRADA DE DADOS DO PACIENTE";
   CriaJanelaGrafica ( DADOSPAC,
		       delta_x,
		       delta_y,
		       MAXX - delta_x,
		       MAXY - delta_y,
		       0,
		       p_ch );

   setcolor(bea_color[10]);

   setviewport ( delta_x, delta_y, MAXX - delta_x, MAXY - delta_y, 1 );

   Moldura ();

   AtivaJanelaGrafica(DADOSPAC, 0);
   setcolor (bea_color[14]);

   getviewsettings ( &vp );

   gprintf( DELTA_X ( 5), DELTA_Y ( 5), "NOME: %s", Paciente.Nome);

   id = Paciente.Prontuario[7];
   Paciente.Prontuario[7] = '\0';
   gprintf( DELTA_X ( 5), DELTA_Y (10),
	   "No DO PRONTUARIO: %7s %c",
	   Paciente.Prontuario, id);

   Paciente.Prontuario[7] = id;


   gprintf( DELTA_X ( 5), DELTA_Y (15), "SEXO: " );

   if (*Paciente.Sexo != NULL)
      {
      outtextxy( DELTA_X ( 5) + textwidth("SEXO: "), DELTA_Y (15),
		 Paciente.Sexo[0] == 'M' ? "Masculino" : " Feminino");
      }


   gprintf( DELTA_X ( 5), DELTA_Y (20),
	   "DATA DE NASCIMENTO: %2s/%2s/%2s",Paciente.Dia,Paciente.Mes,Paciente.Ano);

   if (*PacienteIdade!=NULL)
      {
      gprintf( DELTA_X (50), DELTA_Y (20),
		"IDADE: %2s Anos", PacienteIdade);
      }
   else
      {
      gprintf( DELTA_X (50), DELTA_Y (20),
		"IDADE:    Anos" );
      }

   gprintf( DELTA_X ( 5), DELTA_Y (25),
	    "ADULTO ou CRIANCA ? (A/C): " );

   if (*Paciente.Fase != NULL)
      {
      outtextxy( DELTA_X ( 5) + textwidth ("ADULTO ou CRIANCA ? (A/C): "),
		 DELTA_Y (25),
		 Paciente.Fase[0]=='A' ? " Adulto" : "Crianca");
      }

   gprintf( DELTA_X ( 5), DELTA_Y (30),
	    "ALTURA (cm): %s", Paciente.Altura);

   gprintf( DELTA_X ( 5), DELTA_Y (35),
	    "PESO (Kg): %s", Paciente.Peso);

   if (SupCorp > 0.0)
     {
     gprintf( DELTA_X (50),
	      DELTA_Y (35),
	      "SUPERFICIE CORPORAL: %-5.2f", SupCorp);
     }
   else
     {
     gprintf( DELTA_X (50),
	      DELTA_Y (35),
	      "SUPERFICIE CORPORAL:       " );
     }


   gprintf( DELTA_X ( 5), DELTA_Y (40),
	    "FUMANTE ? (S/N/E): %s", Paciente.Fumante);

   if      (pertence(Paciente.Fumante[0],"Ss"))
      {
      gprintf( DELTA_X (50), DELTA_Y (40),
	       "HA QUANTOS ANOS ? : %s", Paciente.tempfumo);

      gprintf( DELTA_X (50), DELTA_Y (43),
	       "No CIGARROS/DIA   : %s",Paciente.cigardia);
      }
   else if (pertence(Paciente.Fumante[0],"Ee"))
      {
      gprintf( DELTA_X (50), DELTA_Y (40),
	       "HA QUANTO TEMPO PAROU ? : "" %2s ANOS  %2s MESES",Paciente.deixfumoA,Paciente.deixfumoM);

      gprintf( DELTA_X (50), DELTA_Y (43),
	       "QUANTOS ANOS FUMOU ? : %2s", Paciente.tempfumo);

      gprintf( DELTA_X (50), DELTA_Y (46),
	       "No CIGARROS/DIA : %2s", Paciente.cigardia);
      }

   p_ch = "TOSSE OU EXPECTORACAO (S/N): %s";
   gprintf( DELTA_X ( 5), DELTA_Y (45),
	    p_ch, TosseOuExpec );

   gprintf( DELTA_X ( 5), DELTA_Y (50),
	    "CONVENIO: %s", institu);

   gprintf( DELTA_X ( 5), DELTA_Y (55),
	    "PACIENTE INTERNO OU AMBULATORIAL ? (I/A): %s", IouA);

   gprintf( DELTA_X ( 5), DELTA_Y (60),
	    "JUSTIFICATIVA PARA O EXAME: %s", justif);

   gprintf( DELTA_X ( 5), DELTA_Y (65),
	    "MEDICO REQUISITANTE: %s", medico);

   gprintf( DELTA_X ( 5), DELTA_Y (70),
	    "SERVICO REQUISITANTE: %s", servico);

   gprintf( DELTA_X ( 5), DELTA_Y (75),
	    "PACIENTE COM ALGUM DIAGNOSTICO DE DOENCA PULMONAR ? (S/N): %s", temdiag);



   if (pertence ( temdiag[0], "Ss" ))
      {
      gprintf( DELTA_X ( 5), DELTA_Y (80),
	       "DIAGNOSTICO: %s", diagnost);
      }

   if ( (*RiscoCir == '1') ||
	(*RiscoCir == '2') ||
	(*RiscoCir == '3') )
      {
      p_ch = "S";
      }
   else
      {
      p_ch = "";
      }


   gprintf( DELTA_X ( 5), DELTA_Y (85),
	    "CIRURGIA PREVISTA - ESTIMATIVA DO RISCO CIRURGICO ? (S/N): %s", p_ch);


   if (*RiscoCir != NULL)
      {
      gprintf( DELTA_X ( 5),
	       DELTA_Y (90),
	       "CIRURGIA: (1 - ABDOMINAL ALTA  2 - TORACICA  3 - OUTRA): %s",
	       RiscoCir );
      }

   }  /* AmbientePaciente */
Exemple #26
0
void AmbienteVentVolMax (void)
{
   char   id;


   LimpaTela();

   setcolor ( bea_color[12] );

   CriaJanelaGrafica( MENU_3,
		      PER_X(62), PER_Y( 3),
		      PER_X(99), PER_Y(28),
		      0, "VENTILACAO VOLUNTARIA MAXIMA");

   CriaJanelaGrafica( DADOS,
		      PER_X( 1), PER_Y( 3),
		      PER_X(61), PER_Y(28),
		      0,"DADOS DO PACIENTE");

   CriaJanelaGrafica( GRAF1,
		      PER_X( 1), PER_Y(30),
		      PER_X(61), PER_Y(99),
		      0,"MANOBRA");

   CriaJanelaGrafica( GRAF2,
		      PER_X(62), PER_Y(30),
		      PER_X(99), PER_Y(99),
		      0,"MANOBRA ANTERIOR");

   AtivaJanelaGrafica(DADOS,0);
   setcolor ( bea_color[14] );

   getviewsettings(&vp);

   gprintf( DELTA_X( 2), DELTA_Y(15),
	    "NOME: %s",Paciente.Nome);

   id = Paciente.Prontuario[7];
   Paciente.Prontuario[7] = '\0';
   gprintf( DELTA_X( 2), DELTA_Y(35),
	    "No DO PRONTUARIO: %s %c",Paciente.Prontuario, id);
   Paciente.Prontuario[7] = id;

   gprintf( DELTA_X(70), DELTA_Y(35),
	    "SEXO: %s",Paciente.Sexo);

   gprintf( DELTA_X( 2), DELTA_Y(55),
	    "IDADE: %s",PacienteIdade);

   gprintf( DELTA_X(30), DELTA_Y(55),
	    "ALTURA(cm): %s",Paciente.Altura);

   gprintf( DELTA_X(70), DELTA_Y(55),
	    "PESO(Kg): %s",Paciente.Peso);

   gprintf( DELTA_X( 2), DELTA_Y(75),
	    "SUP.CORPOREA(m2): %3.2f",SupCorp);

   AtivaJanelaGrafica(MENU_3, 0);
   setcolor ( bea_color[14] );

   getviewsettings(&vp);

   outtextxy(  DELTA_X(50) - textwidth(menuVVM[0])/2, DELTA_Y(35),
	       menuVVM[0]);
   outtextxy(  DELTA_X(50) - textwidth(menuVVM[1])/2, DELTA_Y(60),
	       menuVVM[1]);

}  /* AmbienteVentVolMax */
Exemple #27
0
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();
}
Exemple #28
0
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);
}
Exemple #29
0
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);
}
Exemple #30
0
/*************************************************************************
 *
 *N  draw_selected_features
 *
 *::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 *
 *   Purpose:
 *P
 *    This function draws the selected features from a specified feature
 *    class based upon a query (either an expression or the pre-compiled
 *    results of an expression).
 *E
 *::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 *
 *   Parameters:
 *A
 *     view     <inout>==(view_type *) view structure.
 *     themenum <input>==(int) theme number.
 *     library  <input>==(library_type *) VPF library structure.
 *     mapenv   <input>==(map_environment_type *) map environment structure.
 *     return  <output>==(int) completion status:
 *                                1 if completed successfully,
 *                                0 if an error occurred.
 *E
 *::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 *
 *   History:
 *H
 *    Barry Michaels   August 1991                        DOS Turbo C
 *E
 *************************************************************************/
int draw_selected_features( view_type *view,
			    int themenum,
			    library_type *library,
			    map_environment_type *mapenv )
{
   int status, fcnum, finished, cov, tilecover, TILEPATH_, prim;
   int outline, color1, color2, color3, color4;
   vpf_table_type rngtable,edgtable,fbrtable, tile_table;
   row_type row;
   char *ptable[] = {"","edg","fac","txt","end","cnd"};
   register rspf_int32 i, j, p, pclass, tile;
   int display_order[] = {FACE,EDGE,ENTITY_NODE,CONNECTED_NODE,TEXT};
   register rspf_int32 starttile, endtile, startprim, endprim;
   rspf_int32 count;
   char path[255], covpath[255], tiledir[255], *buf, str[255];
   char *drive, rngpath[255],edgpath[255],edxpath[255],fbrpath[255];
   boolean rng_rdisk,edg_rdisk,fbr_rdisk;
   set_type primitives, feature_rows;
   fcrel_type fcrel;
   window_type info;
   struct viewporttype vp;

   getviewsettings(&vp);

   fcnum = view->theme[themenum].fcnum;

   sprintf(path,"%stileref\\tileref.aft",library->path);
   if (access(path,0) != 0) {
      tilecover = FALSE;
   } else {
      tile_table = vpf_open_table(path,disk,"rb",NULL);
      TILEPATH_ = table_pos("TILE_NAME",tile_table);
      tilecover = TRUE;
   }

   feature_rows = get_selected_features( view, themenum, *library );

   for (p=0;p<5;p++) {
      pclass = display_order[p];

      if ((pclass != library->fc[fcnum].primclass) &&
	  (library->fc[fcnum].primclass != COMPLEX_FEATURE)) continue;

      if ((library->fc[fcnum].primclass == COMPLEX_FEATURE) &&
	  (!library->fc[fcnum].cprim[pclass])) continue;

      /* Set up the feature class table relate chain.        */
      /* The feature table is fcrel.table[0].                */
      /* The primitive table is the last table in the chain: */
      /*    fcrel.table[ fcrel.nchain-1 ].                   */

      j = 0;
      for (i=0;i<strlen(library->fc[fcnum].table);i++)
	 if (library->fc[fcnum].table[i] == '\\') j = i+1;
      strcpy( str, &(library->fc[fcnum].table[j]));
      fcrel = select_feature_class_relate(fcnum, library, str,
					  ptable[pclass]);
      prim = fcrel.nchain-1;

      /*** 'Tile' number 1 is the universe polygon for
	   the tileref cover ***/
      starttile = set_min(library->tile_set);
      if (starttile < 2) starttile = 2;
      endtile = set_max(library->tile_set);
      if (endtile < 2) endtile = 2;

      for (tile = starttile; tile <= endtile; tile++ ) {

	 if (!set_member(tile,library->tile_set)) continue;

	 if (tilecover) {
	    row = get_row(tile,tile_table);
	    buf = (char *)get_table_element(TILEPATH_,row,tile_table,
					     NULL,&count);
	    free_row(row,tile_table);
	    strcpy(tiledir,buf);
	    rightjust(tiledir);
	    strcat(tiledir,"\\");
	    free(buf);
	 } else {
	    strcpy(tiledir,"");
	 }

	 cov = library->fc[fcnum].coverage;
	 strcpy( covpath, library->cover[cov].path );

	 finished = TRUE;

	 sprintf(path,"%s%s%s",covpath,tiledir,ptable[pclass]);

	 if (access(path,0) != 0) continue;
	 fcrel.table[prim] = vpf_open_table(path,disk,"rb",NULL);

	 info = info_window("Searching...");

	 primitives = get_selected_tile_primitives( library,
						    fcnum, fcrel,
						    feature_rows,
						    mapenv,
						    tile, tiledir,
						    &status );
	 delete_window(&info);
	 setviewport(vp.left,vp.top,vp.right,vp.bottom,vp.clip);

	 /* Reset plate-carree parameters (changed in  */
	 /* get_selected_tile_primitives() )           */
	 if (mapenv->projection == PLATE_CARREE)
	    set_plate_carree_parameters( central_meridian(
					 mapenv->mapextent.x1,
					 mapenv->mapextent.x2),
					 0.0, 1.0 );

	 if (primitives.size < 1) {
	    vpf_close_table(&fcrel.table[prim]);
	    continue;
	 }

	 if (!status) {
	    set_nuke(&primitives);
	    vpf_close_table(&fcrel.table[prim]);
	    break;
	 }

	 if (pclass == FACE) {
	    /* Must also open RNG, EDG, and FBR for drawing faces. */
	    /* If a RAM disk is specified, copy these to it and open */
	    /* them there. */
	    rng_rdisk = FALSE;
	    edg_rdisk = FALSE;
	    fbr_rdisk = FALSE;
	    drive = getenv("TMP");
	    buf = (char *)vpfmalloc(255);

	    sprintf(path,"%s%srng",covpath,tiledir);
	    strcpy(rngpath,path);
	    if (drive && filesize(path) < available_space(drive)) {
	       sprintf(rngpath,"%s\\RNG",drive);
	       sprintf(buf,"COPY %s %s > NUL",path,rngpath);
	       system(buf);
	       rng_rdisk = TRUE;
	    }
	    rngtable = vpf_open_table(rngpath,disk,"rb",NULL);

	    sprintf(path,"%s%sedg",covpath,tiledir);
	    strcpy(edgpath,path);
            sprintf(edxpath,"%s%sedx",covpath,tiledir);
	    if (drive &&
	       (filesize(path)+filesize(edxpath))<available_space(drive)) {
	       sprintf(edgpath,"%s\\EDG",drive);
	       sprintf(buf,"COPY %s %s > NUL",path,edgpath);
	       system(buf);
	       sprintf(edxpath,"%s\\EDX",drive);
	       sprintf(buf,"COPY %s%sedx %s > NUL",covpath,tiledir,edxpath);
	       system(buf);
	       edg_rdisk = TRUE;
	    }
	    edgtable = vpf_open_table(edgpath,disk,"rb",NULL);

	    sprintf(path,"%s%sfbr",covpath,tiledir);
	    strcpy(fbrpath,path);
	    if (drive && filesize(path) < available_space(drive)) {
	       sprintf(fbrpath,"%s\\FBR",drive);
	       sprintf(buf,"COPY %s %s > NUL",path,fbrpath);
	       system(buf);
	       fbr_rdisk = TRUE;
	    }
	    fbrtable = vpf_open_table(fbrpath,disk,"rb",NULL);

	    free(buf);
	 }

	 finished = 1;

	 startprim = set_min(primitives);
	 endprim = set_max(primitives);

	 /* It turns out to be MUCH faster off of a CD-ROM to */
	 /* read each row and discard unwanted ones than to   */
	 /* forward seek past them.  It's about the same off  */
	 /* of a hard disk.				      */

	 fseek(fcrel.table[prim].fp,
	       index_pos(startprim,fcrel.table[prim]),
	       SEEK_SET);

	 for (i=startprim;i<=endprim;i++) {

	    row = read_next_row(fcrel.table[prim]);

	    if (set_member( i, primitives )) {
	       /* Draw the primitive */
	       switch (pclass) {
		  case EDGE:
		     finished = draw_edge_row(row,fcrel.table[prim]);
		     break;
		  case ENTITY_NODE:
		  case CONNECTED_NODE:
		     finished = draw_point_row(row,fcrel.table[prim]);
		     break;
		  case FACE:
		     gpgetlinecolor( &outline );
		     gpgetpattern( &color1, &color2, &color3, &color4 );
		     hidemousecursor();
		     draw_face_row( row,fcrel.table[prim],
				    rngtable, edgtable, fbrtable,
				    outline,
				    color1, color2, color3, color4 );
		     showmousecursor();
		     finished = 1;
		     if (kbhit()) {
			if (getch()==27) finished = 0;
		     }
		     break;
		  case TEXT:
		     finished = draw_text_row(row,fcrel.table[prim]);
		     break;
	       }
	    }

	    free_row(row,fcrel.table[prim]);

	    if (!finished) {
	       status = 0;
	       break;
	    }
	 }

	 if (pclass == FACE) {
	    vpf_close_table(&rngtable);
	    if (rng_rdisk) remove(rngpath);
	    vpf_close_table(&edgtable);
	    if (edg_rdisk) {
	       remove(edgpath);
	       remove(edxpath);
	    }
	    vpf_close_table(&fbrtable);
	    if (fbr_rdisk) remove(fbrpath);
	 }

	 vpf_close_table(&fcrel.table[prim]);

	 set_nuke(&primitives);

	 if (!finished) {
	    status = 0;
	    break;
	 }

      }

      if (!finished) {
	 status = 0;
	 deselect_feature_class_relate( &fcrel );
	 break;
      }

      status = 1;

      if (kbhit()) {
	 if (getch()==27) {
	    status = 0;
	    deselect_feature_class_relate( &fcrel );
	    break;
	 }
      }

      deselect_feature_class_relate(&fcrel);
   }

   if (tilecover) {
      vpf_close_table(&tile_table);
   }

   set_nuke(&feature_rows);

   return status;
}