Ejemplo n.º 1
0
int FastZoom(FZOOM_DATA *data)
{
  FZOOM_DATA fzdata ;
  MFDB       std_src, std_dst ;
  MFDB       *pstd_src, *pstd_dst ;
  int        use_std_vdi = NeedStdVDI(data->src->fd_nplanes) ;

  if ( use_std_vdi )
  {
    if ( data->std_src )
    {
      std_src.fd_addr = NULL ;
      pstd_src        = data->std_src ;
    }
    else
    {
      memcpy( &std_src, data->src, sizeof(MFDB) ) ;
      std_src.fd_addr  = img_alloc( std_src.fd_w, std_src.fd_h, std_src.fd_nplanes ) ;
      if ( std_src.fd_addr == NULL ) return( -3 ) ;
      std_src.fd_stand = 1 ;
      pstd_src         = &std_src ;
    }
    if ( data->std_dst )
    {
      std_dst.fd_addr = NULL ;
      pstd_dst        = data->std_dst ;
    }
    else
    {
      memcpy( &std_dst, data->dst, sizeof(MFDB) ) ;
      std_dst.fd_addr  = img_alloc( std_dst.fd_w, std_dst.fd_h, std_dst.fd_nplanes ) ;
      if ( std_dst.fd_addr == NULL )
      {
        if ( std_src.fd_addr ) free( std_src.fd_addr ) ;
        return( -3 ) ;
      }
      std_dst.fd_stand = 1 ;
      pstd_dst         = &std_dst ;
    }
    vr_trnfm( handle, data->src, pstd_src ) ;
    StdVDI2ClassicAtari( pstd_src, data->src ) ;
    memcpy( &fzdata, data, sizeof(FZOOM_DATA) ) ;
    fzdata.std_src = pstd_src ;
    fzdata.std_dst = pstd_dst ;
  }
  else memcpy( &fzdata, data, sizeof(FZOOM_DATA) ) ;

  fast_zoom( &fzdata ) ;

  if ( use_std_vdi )
  {
    ClassicAtari2StdVDI( fzdata.dst, pstd_dst ) ;
    vr_trnfm( handle, pstd_dst, fzdata.dst ) ;
    vr_trnfm( handle, pstd_src, data->src ) ;
    if ( std_dst.fd_addr ) free( std_dst.fd_addr ) ;
    if ( std_src.fd_addr ) free( std_src.fd_addr ) ;
  }

  return( 0 ) ;
}
Ejemplo n.º 2
0
int convert(MFDB *image, long size)
{
    int plane, mplanes;
    char *line_addr, *buf_addr, *new_addr, *new1_addr, *image_addr, *screen_addr;
    MFDB  dev_form, tmp;
    long	new_size;

    /* convert size from words to bytes */
    size <<= 1;

    /* memory for the device raster */
    new_size=size*(long)planes;
    if((new_addr=(char *) calloc(1,new_size)) == NULL)
        return(FALSE);

    /* initialize MFDBs */
    tmp=*image;
    tmp.fd_nplanes=planes;
    tmp.fd_addr=new_addr;
    tmp.fd_stand=1;             /* standard format */
    dev_form=tmp;
    screen_addr=new_addr;
    dev_form.fd_stand=0;          /* device format */
    image_addr=(char *)image->fd_addr;

    /* initialize some variables and zero temp. line buffer */
    mplanes=min(image->fd_nplanes, planes);
    /* convert image */
    line_addr=image_addr;
    buf_addr=screen_addr;
    if(mplanes>1) {
        /* cut/pad color planes into temp buf */
        for(plane=0; plane<mplanes; plane ++) {
            memcpy(buf_addr, line_addr, size);
            line_addr += size;
            buf_addr += size;
        }
    } else {
        /* fill temp line bitplanes with a b&w line */
        for(plane=0; plane < planes; plane ++) {
            memcpy(buf_addr, line_addr, size);
            buf_addr += size;
        }
    }
    free(image->fd_addr);
    /* convert image line in temp into current device raster format */
    if((new1_addr=(char *) calloc(1,new_size)) == NULL)
        return(FALSE);
    dev_form.fd_addr=new1_addr;
    vr_trnfm(x_handle, &tmp, &dev_form);
    free(new_addr);

    /* change image description */
    image->fd_stand=0;          /* device format */
    image->fd_addr=new1_addr;
    image->fd_nplanes=planes;
    return(TRUE);
}
Ejemplo n.º 3
0
VOID gsx_trans(LONG saddr, WORD swb, LONG daddr, WORD dwb, WORD h)
{
	gsx_fix(&gl_src, saddr, swb, h);
	gl_src.fd_stand = TRUE;
	gl_src.fd_nplanes = 1;

	gsx_fix(&gl_dst, daddr, dwb, h);
	vr_trnfm(gl_handle, &gl_src, &gl_dst);
}
Ejemplo n.º 4
0
/* ***Normale Grafik laden und ins aktuelle Format wandeln*** */
int loadpic(char *pname, MFDB *destfdb)
{
 MFDB loadfdb;
 char alerttxt[64];

 if( LoadImg(pname, &loadfdb) )
  {
   strcpy(alerttxt, "[3][Could not load|<");
   strcat(alerttxt, pname);
   strcat(alerttxt, ">][Cancel]");
   form_alert(1, alerttxt);
   return(-1);
  }
 destfdb->fd_w=loadfdb.fd_w;	destfdb->fd_h=loadfdb.fd_h;
 destfdb->fd_wdwidth=loadfdb.fd_wdwidth;
 destfdb->fd_stand=0;
 destfdb->fd_nplanes=bipp;
 destfdb->fd_addr=(void *)Malloc((long)destfdb->fd_w*destfdb->fd_h*bipp/8);
 if(destfdb->fd_addr<=0L)  return((int)destfdb->fd_addr);
 vr_trnfm(vhndl, &loadfdb, destfdb);	/* Ins aktuelle Format wandeln */
 Mfree(loadfdb.fd_addr);

 return(0);
}
Ejemplo n.º 5
0
short main(int argc, char *argv[])
{
	MFDB dest;
	short my_AppId, x, y, w, h;
	short work_in[11] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2};
	short work_out[57], msg[16], w_id1;
	short open_windows = 1, dummy;
	short wx, wy, ww, wh, clip[4], pnt[4];
	char win1_name[20];
	unsigned short logo_trnfrm[LOGO_DATASIZE];
	GRECT dirty, walk;
	short e = 0, evx, evy, a, kc_shstate, kc_key, click_count;

	my_AppId = appl_init();
	my_handle = graf_handle(&x, &y, &w, &h);		/* Open a virtual workstation */
	v_opnvwk(work_in, &my_handle, work_out);

	logo_bm.fd_w = LOGO_W;
	logo_bm.fd_h = LOGO_H;
	logo_bm.fd_wdwidth = 12;
	logo_bm.fd_nplanes = 4;
	logo_bm.fd_stand = 1;
	dest = logo_bm;
	dest.fd_stand = 0;

	logo_bm.fd_addr = (void *)x_logo;
	dest.fd_addr = (void *)logo_trnfrm;
	vr_trnfm(my_handle, &logo_bm, &dest);
	logo_bm.fd_addr = (void *)logo_trnfrm;

	w_id1 = wind_create(NAME|CLOSE|MOVER, 0, 0, LOGO_W + 40, LOGO_H + 40);

	if (argc > 1)
		sprintf(win1_name,"%s", argv[1]);
	else
		sprintf(win1_name,"Welcome to...", argv[1]);
		
	wind_set(w_id1, WF_NAME, ADDR(win1_name));

	x = (work_out[0] - (LOGO_W + 40)) / 2;
	y = (work_out[1] - (LOGO_H + 40)) / 2;
	wind_open(w_id1, x, y, LOGO_W + 40, LOGO_H + 40);

	while((open_windows) && (!(e & MU_TIMER))) {
		e = evnt_multi(MU_MESAG|MU_TIMER, 258, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
			msg, 15000, 0, &evx, &evy, &a, &kc_shstate, &kc_key, &click_count);

		if (e & MU_MESAG) {
			dummy = msg[0];
			switch(dummy) {
			case WM_CLOSED:	/* Did someone close one of our windows? */
				wind_close(msg[3]);
				open_windows--;
				break;
			case WM_MOVED:
				wind_set(msg[3], WF_CURRXYWH, msg[4], msg[5], msg[6], msg[7]);
				break;
			case WM_REDRAW:
				dirty.g_x = msg[4];
				dirty.g_y = msg[5];
				dirty.g_w = msg[6];
				dirty.g_h = msg[7];
				wind_update(BEG_UPDATE);
				wind_get(msg[3], WF_WORKXYWH, &wx, &wy, &ww, &wh);
				walk.g_x = wx;
				walk.g_y = wy;
				walk.g_w = ww;
				walk.g_h = wh;
				pnt[0] = wx;
				pnt[1] = wy;
				pnt[2] = wx + ww;
				pnt[3] = wy + wh;
				wind_get(msg[3], WF_FIRSTXYWH, &x, &y, &w, &h);
				rc_intersect(&walk, &dirty);
				graf_mouse(M_OFF, NULL);
				while(h) {
					walk.g_x = x;
					walk.g_y = y;
					walk.g_w = w;
					walk.g_h = h;
					if (rc_intersect(&dirty, &walk)) {
						clip[0] = walk.g_x;
						clip[1] = walk.g_y;
						clip[2] = walk.g_x + walk.g_w;
						clip[3] = walk.g_y + walk.g_h;
						vs_clip(my_handle, 1, clip);
						vsf_color(my_handle, LWHITE);
						v_bar(my_handle, pnt);
						display_bitmap(wx, wy);
					}
					wind_get(msg[3], WF_NEXTXYWH, &x, &y, &w, &h);
				}
				vs_clip(my_handle, 0, clip);
				graf_mouse(M_ON, NULL);
				wind_update(END_UPDATE);
				break;
			case WM_TOPPED:
				wind_set(msg[3], WF_TOP, 0, 0, 0, 0);
				break;
			case WM_BOTTOMED:
				wind_set(msg[3], WF_BOTTOM, 0, 0, 0, 0);
				break;
			}
		}
	}
	
	v_clsvwk(my_handle);
	
	appl_exit();
	
	return 0;
}