Пример #1
0
/* ------------------------------------------------------------------ */
static void choose_font(void)
{
OBJECT *loading;
int cx, cy, cw, ch;
bool is_prn;

   is_prn = (form_alert( 1, "[0][select device][screen|printer]" )==2);
   dprintf(( "\033Hselected %s workstation\n", is_prn? "printer": "screen" ));

   if( init_wkstn( is_prn ) ) {

      graf_mouse(BUSY_BEE, 0);
      dprintf(( "ready to load fonts ... " )); dgetchar();
      rsrc_gaddr( R_TREE, LDGFONTS, &loading );
      form_center( loading, &cx, &cy, &cw, &ch);
      form_dial(FMD_START, 0, 0, 0, 0, cx, cy, cw, ch);
      objc_draw( loading, ROOT, MAX_DEPTH, cx, cy, cw, ch);
      (void)vst_load_fonts(handle, 0);
      form_dial( FMD_FINISH, 0, 0, 0, 0, cx, cy, cw, ch );
      dprintf(( "\033Hdone\nnow getting font names ..." )); dgetchar();
      if( get_fontnames( *(tGemFont **)(&_contrl[10]) ) ) {
	 dprintf(( "done\n" )); dgetchar();
	 graf_mouse(ARROW, 0);
	 while( select_font( is_prn ) ) {
	    if( iSelected == NO_INDEX ) {
	       form_alert( 1, "[1][You must choose|a font to dump][Try Again]" );
	    }
	    else if( gem_file_name[0] == '\0' ) {
	       form_alert( 1, "[1][You must choose a|"
			 "gem font file name][Try Again]" );
	    }
	    else {
	       dump_font();
	       gem_file_name[0] = '\0'; /* reset entries for next round */
	       iSelected = NO_INDEX;
	    } /* if */
	 } /* while */
      } /* if */

      vst_unload_fonts(handle, 0);

      free(name_table);

      dprintf(( "\033Hclosing %s workstation ...", is_prn? "printer": "screen" ));
      if( is_prn ) v_clswk(handle);
      else v_clsvwk(handle);
   }
   else form_alert(1, "[3][Can't open workstation][OK]");

} /* choose_font() */
Пример #2
0
void scan_drivers(void)
{
  GEM_WINDOW *wprog ;
  char driver_name[128] ;
  char devstring[128] ;
  int  libr, driv, xplane, attrib ;
  int  devnum, devexist, prt_handle, new_driver ;

  mouse_busy() ;

  wprog = DisplayStdProg( msg[MSG_LOOKSPDDRV], "", "", CLOSER ) ;

  for (devnum = 21 ; devnum < 31 ; devnum++) /* on va tester tous les No Gdos pour l'impression */
  {
    prt_handle = open_work(devnum) ; /* Ouverture de la station imprimante */
    if ( prt_handle )                /* driver dispo pour ce num‚ro        */
    {                                /* s'enquiŠre du nom de l'imprimante  */
       vqt_devinfo( prt_handle, devnum, &devexist, devstring ) ;
/*
       if ( devexist )
       { Test enleve depuis VISION 4.0 car sous NVDI 5, devexist vaut 0 pour gestion du multitache
*/
       id[nb_drivers] = devnum ;
       strcpy(driver_name, (char *)&_VDIParBlk.ptsout[1]) ;
       new_driver = vq_driver_info( prt_handle, &libr, &driv, &xplane,
                                    &attrib, devstring ) ;
       if ( new_driver )
       {
         if ( strlen( devstring ) >= 19) devstring[19] = 0 ;
           strcpy(&printer_names[nb_drivers][0], devstring) ;
       }
       else
         strcpy( &printer_names[nb_drivers][0], driver_name ) ;
       StdProgWText( wprog, 1, &printer_names[nb_drivers][0] ) ;
       nb_drivers++ ;
/*       }*/
       v_clswk(prt_handle) ; /* ferme la station de l'imprimante */
    }
    wprog->ProgPc( wprog, 10*(devnum-20), NULL ) ;
  }
  printer_init = 1 ;
  mouse_restore() ;
  GWDestroyWindow( wprog ) ;
}
Пример #3
0
/*******************************************************
* load fonts for device
* get font chain and dump fonts (width table only) in current directory
*/
static void dump_gem_fonts( int16 dev_nr )
{
const tGemFont *pgf;	/* pointer to the font chain */
int16 handle;
char *err_msg;
register tGemFont *phdr;	/* pointer to font we are making */
char *const gempath = ((void**)pInfo)[-1];
FILE *fp;
int xdial,ydial,wdial,hdial;         /* co-ords for dialog box */
int  x,y,w,h;

   handle = init_wkstn( dev_nr );	/* open the workstation */
   if( handle == 0 ) {
      sprintf( err_string, "[3][can't connect to %s][skip]", dev_nr>10? "printer": "screen" );
      form_alert(1, err_string );
      return;
   } /* if */
   if( vst_load_fonts( handle, 0 ) == 0 ) {
      sprintf( err_string, "[3][can't find fonts for %s][skip]", dev_nr>10? "printer": "screen" );
      goto error0;
   } /* if */
   pgf = *(tGemFont **)(&_contrl[10]);	/* get pointer to font chain */
   save[dev_nr].pw->first_font = gem_font_count;

   /******************
   * loop thru font chain, 
   * writing a new font file for each font found in the chain
   * count the fonts so we can assign them to the workstations
   * this can take quite a while, so report progress as we go
   */

   form_center (&rs_object,&xdial,&ydial,&wdial,&hdial);
   x=y=w=h=0;
   form_dial (FMD_START,x,y,w,h,xdial,ydial,wdial,hdial);      /* reserve room */

   for( ; pgf!=NULL; pgf=pgf->next_font ) {
   const uint16 nr_entries = pgf->last_ade - pgf->first_ade + 1;
   const uint32 size_wid = (nr_entries+1) * sizeof(int16);	/* sizeof(*(tGemFont*)->off_table) */
   register int16 *char_tbl;
   register uint16 i;
      
      /* printf( "line %d, %.32s, %d points\n", (int)__LINE__, pgf->name, pgf->size ); */
      sprintf( usr_msg, "storing gem fonts: %d", gem_font_count );
      objc_draw( &rs_object, 0, 2, xdial, ydial, wdial, hdial ); /* draw the dialog box */
      phdr = (tGemFont*)malloc( sizeof(tGemFont) + size_wid );
      if( phdr == NULL ) {
	 err_msg = "[3][Not enough memory|to dump font][OK]";
	 goto error1;
      } /* if */
      
      *phdr = *pgf;	   /* copy header data */
      phdr->off_table = (int16*)sizeof(tGemFont);
      memcpy( phdr+1, pgf->off_table, size_wid );
      phdr->dat_table = 0L;
      
      /** convert font to intel format before dumping **/
      for( i = nr_entries+1, char_tbl = (int16*)(phdr+1); i > 0; i--, char_tbl++ ) {
	   Swapw(*char_tbl);
      } /* for */

      /* swap header words and longs */
      phdr->flags &= ~MOT_FLAG;
      Swapw(phdr->font_id);		Swapw(phdr->size);
      Swapw(phdr->first_ade);		Swapw(phdr->last_ade);
      Swapw(phdr->top); 		Swapw(phdr->ascent);
      Swapw(phdr->half);		Swapw(phdr->descent);
      Swapw(phdr->bottom);
      Swapw(phdr->max_char_width);	Swapw(phdr->max_cell_width);
      Swapw(phdr->left_offset); 	Swapw(phdr->right_offset);
      Swapw(phdr->thicken);		Swapw(phdr->ul_size);
      Swapw(phdr->lighten);		Swapw(phdr->skew);
      Swapw(phdr->flags);		Swapl(phdr->h_table);
      Swapl(phdr->off_table);		Swapl(phdr->dat_table); 
      Swapw(phdr->form_width);		Swapw(phdr->form_height);

      /* printf( "line %dn", (int)__LINE__); getchar(); */
      FONT_FILE_NAME( gempath+pInfo->len_gem_path, gem_font_count );
      fp = fopen( gempath, "wb" );
      if( fp == NULL ) {
	 err_msg = "[3][can't open gem font file|%s][OK]";
	 goto error2;
      } /* if */

      /** write the font header **/
      if( fwrite( phdr, sizeof( *phdr), 1, fp ) != 1 ) {
	 goto error3;
      } /* if */
      
      /** write the character offset table **/
      if( fwrite( phdr+1, size_wid, 1, fp ) != 1 ) {
	 goto error3;
      } /* if */
   
      fclose( fp );
      free( phdr );
      gem_font_count++;
   } /* for */
   save[dev_nr].pw->nr_gemfonts = gem_font_count - save[dev_nr].pw->first_font;
   (void)vst_unload_fonts( handle, 0 );
   if( dev_nr>10 ) v_clswk(handle);
   else v_clsvwk(handle);

   form_dial( FMD_FINISH, x, y, w, h, xdial, ydial, wdial, hdial );  /* release its room */
   return;

error3:
   fclose(fp);
   err_msg = "[3][can't write to gem font file|%s][OK]";
error2:
   sprintf( err_string, err_msg, strerror(errno) );
   free( phdr );
error1:
   form_dial( FMD_FINISH, x, y, w, h, xdial, ydial, wdial, hdial );  /* release its room */
error0:
   (void)vst_unload_fonts( handle, 0 );
   if( dev_nr>10 ) v_clswk(handle);
   else v_clsvwk(handle);
   form_alert(1, err_string );
} /* dump_gem_fonts() */
Пример #4
0
int print_image(MFDB *raster, INFO_IMAGE *in_info)
{
  GEM_WINDOW *wprog = NULL ;
  DLGDATA    dlg_data ;
  DLGPRINTER_USER_DATA dlg_user_data ;
  GEM_WINDOW *dlg ;
  MFDB       src ;
  float      sizex, sizey ;
  float      ptpx, ptpy ;
  int        pintin[256], pintout[256] ;
  int        xyarray[4] ;
  int        print_handle ;
  int        i, xoffset, yoffset ;
  int        bouton ;
  int        dither_mono, print_color ;
  char       *filename = dlg_user_data.filename ;
  char       *c ;
  char       buffer[200] ;
  char       nom[30] ;

  if ( !Gdos ) return(PNOGDOS) ;
  if ( !printer_init ) scan_drivers() ;
  if ( nb_drivers <= 0 ) return( PNODRIVER ) ;

  memset( &dlg_user_data, 0, sizeof(DLGPRINTER_USER_DATA) ) ;
  if ( raster ) memcpy( &dlg_user_data.raster, raster, sizeof(MFDB) ) ;
  if ( in_info ) memcpy( &dlg_user_data.info, in_info, sizeof(INFO_IMAGE) ) ;

  while ( dlg_user_data.raster.fd_w == 0 )
  {
    strcpy( buffer, filename ) ;
    c = strrchr( buffer, '\\' ) ;
    if ( c ) *c = 0 ;
    strcat( buffer, "\\*.*" ) ;
    if ( file_name( buffer, "", buffer ) == 1 )
    {
      INFO_IMAGE inf ;

      strcpy( dlg_user_data.filename, buffer ) ;
      if ( img_format(dlg_user_data.filename, &inf) == 0 )
      {
        memcpy(&dlg_user_data.info, &inf, sizeof(INFO_IMAGE)) ;
        memset(&dlg_user_data.raster, 0, sizeof(MFDB)) ;
        dlg_user_data.raster.fd_w       = inf.largeur ;
        dlg_user_data.raster.fd_h       = inf.hauteur ;
        dlg_user_data.raster.fd_nplanes = inf.nplans ;
        dlg_user_data.raster.fd_wdwidth = dlg_user_data.raster.fd_w/16 ;
        if (dlg_user_data.raster.fd_w % 16) dlg_user_data.raster.fd_wdwidth++ ;
      }
    }
    else return(PCANCEL) ;
  }

  memset( &dlg_data, 0, sizeof(DLGDATA) ) ;
  dlg_data.RsrcId         = FORM_PRINT ;
  dlg_data.UserData       = &dlg_user_data ;
  dlg_data.ExtensionSize  = 0 ; /* Sera alloue par OnInitPrinterDialog */
  dlg_data.OnInitDialog   = OnInitPrinterDialog ;
  dlg_data.OnObjectNotify = OnObjectNotifyPrinterDialog ;
  dlg_data.OnCloseDialog  = OnClosePrinterDialog ;

  dlg    = GWCreateDialog( &dlg_data ) ;
  bouton = GWDoModal( dlg, PRINT_XPC ) ;
  if ( bouton == IDCANCEL ) return( PCANCEL ) ;

  printer_index = dlg_user_data.printer_index ;
  type_index    = dlg_user_data.type_index ;

  if ( dlg_user_data.filename[0] )
  {
    INFO_IMAGE inf ;
    int        analyse = img_analyse ;

    img_analyse = 0 ;
    if ( img_format( dlg_user_data.filename, &inf ) == 0 )
    {
      memcpy(&dlg_user_data.info, &inf, sizeof(INFO_IMAGE)) ;
      src.fd_nplanes = -1 ; /* Conserver le nombre de plans */
      Force16BitsLoad = 0 ;
      wprog = DisplayStdProg( msg[MSG_LOADINGIMG], "", dlg_user_data.filename, 0 ) ;
      if ( load_picture( dlg_user_data.filename, &src, &inf, wprog ) != 0 )
      {
        GWDestroyWindow( wprog ) ;
        img_analyse = analyse ;
        return(PCANCEL) ;
      }
      StdProgWText( wprog, 1, "" ) ;
    }
    else
    {
      img_analyse = analyse ;
      return( PCANCEL ) ;
    }

    img_analyse = analyse ;
    GWDestroyWindow( wprog ) ;
    wprog = NULL ;
  }
  else
    memcpy( &src, &dlg_user_data.raster, sizeof(MFDB) ) ;

  pintin[0] = id[dlg_user_data.printer_index] ;
  if ((pintin[0] < 21) || (pintin[0] > 30)) return( PNOHANDLE ) ;
  for (i = 1; i < 10; i++) pintin[i] = 1 ;
  pintin[10] = 2 ;
  v_opnwk( pintin, &print_handle, pintout ) ;
  if ( print_handle <= 0 ) return(PNOHANDLE) ;

  ptpx = (float)pintout[3] ; /* Largeur d'un point imprimante en microns */
  ptpy = (float)pintout[4] ; /* Hauteur d'un point imprimante en microns */
  wprog = DisplayStdProg( "", "", "", CLOSER ) ;

  dither_mono = (dlg_user_data.type_index == 1) && (src.fd_nplanes > 1) ;
  print_color = (dlg_user_data.type_index == 0) ;
  if ( dither_mono ) /* Mode noir et blanc */
  {
    MFDB virtuel ;
    int  pc_x, pc_y ;

    StdProgWText( wprog, 0, msg[MSG_DITHER] ) ;
    virtuel.fd_nplanes = 1 ;
    if ( dlg_user_data.rotate90 )
      pc_x = (int) (dlg_user_data.xpc*(float)dlg_user_data.info.lpix/ptpy) ;
    else
      pc_x = (int) (dlg_user_data.xpc*(float)dlg_user_data.info.lpix/ptpx) ;
    if ( dlg_user_data.rotate90 )
      pc_y = (int) (dlg_user_data.ypc*(float)dlg_user_data.info.hpix/ptpx) ;
    else
      pc_y = (int) (dlg_user_data.ypc*(float)dlg_user_data.info.hpix/ptpy) ;
    mouse_busy() ;
    if ( dither_ratio(&src, &dlg_user_data.info, &virtuel, pc_x, pc_y, wprog ) == -1 )
    {
      if ( dlg_user_data.filename[0] )
      {
        free( src.fd_addr ) ;
        if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;
      }
      mouse_restore() ;
      GWDestroyWindow( wprog ) ;
      v_clswk( print_handle ) ;
      return( PROTERR ) ;
    }
    wprog->ProgPc( wprog, 0, NULL ) ;
    mouse_restore() ;
    if ( dlg_user_data.filename[0] ) free( src.fd_addr ) ;
    memcpy( &src, &virtuel, sizeof(MFDB) ) ;
  }

  if ( dlg_user_data.rotate90 )
  {
    MFDB virtuel ;
 
    StdProgWText( wprog, 0, msg[MSG_ROTATING] ) ;
    mouse_busy() ;
    if ( raster_r90( &src, &virtuel, wprog ) != 0 )
    {
      if ( dither_mono || dlg_user_data.filename[0] ) free( src.fd_addr ) ;
      if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;
      mouse_restore() ;
      GWDestroyWindow( wprog ) ;
      v_clswk( print_handle ) ;
      return( PROTERR ) ;
    }
    mouse_restore() ;
    if ( dither_mono || dlg_user_data.filename[0] ) free(src.fd_addr ) ;
    memcpy( &src, &virtuel, sizeof(MFDB) ) ;
  }

  sizex = (float)src.fd_w*(float)dlg_user_data.info.lpix*dlg_user_data.xpc/100.0 ;
  sizey = (float)src.fd_h*(float)dlg_user_data.info.hpix*dlg_user_data.ypc/100.0 ;
  sizex /= 10000.0 ;
  sizey /= 10000.0 ;
  if ( !print_color )
  {
    StdProgWText( wprog, 0, msg[MSG_DOGDOSIMG] ) ;
    strcpy(nom, "VSCRAP.IMG") ;
    if ( img_sauve( nom, &src, &dlg_user_data.info, wprog ) )
    {
      if ( dither_mono || dlg_user_data.filename[0] || dlg_user_data.rotate90 ) free( src.fd_addr ) ;
      if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;
      GWDestroyWindow( wprog ) ;
      v_clswk( print_handle ) ;
      return( PWRITERR ) ;
    }
  }
  else
  {
    INFO_IMAGE new_info ;
    MFDB       new_img ;

    memcpy( &new_info, &dlg_user_data.info, sizeof(INFO_IMAGE) ) ;
    memcpy( &new_img, &src, sizeof(MFDB) ) ;
    if ( new_img.fd_nplanes <= 8 )
    {
      new_info.nb_cpal   = 0 ;
      new_info.palette   = NULL ;
      new_info.nplans    = 16 ;
      new_img.fd_addr    = NULL ;
      new_img.fd_nplanes = 16 ;
      StdProgWText( wprog, 0, msg[MSG_DOGDOSIMG] ) ;
      if ( index2truecolor( &src, &dlg_user_data.info, &new_img, wprog ) != 0 )
      {
        if ( dither_mono || dlg_user_data.filename[0] || dlg_user_data.rotate90 ) free( src.fd_addr ) ;
        if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;
        v_clswk( print_handle ) ;
        GWDestroyWindow( wprog ) ;
        return( PWRITERR ) ;
      }
    }
    strcpy( nom, "VSCRAP.TGA" ) ;
    if ( targa_sauve( nom, &new_img, &new_info, wprog ) )
    {
      if ( dither_mono || dlg_user_data.filename[0] || dlg_user_data.rotate90 ) free( src.fd_addr ) ;
      if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;
      v_clswk( print_handle ) ;
      GWDestroyWindow( wprog ) ;
      return( PWRITERR ) ;
    }
    if ( src.fd_nplanes <= 8 ) free( new_img.fd_addr ) ;
  }

  if ( dither_mono || dlg_user_data.filename[0] || dlg_user_data.rotate90 ) free( src.fd_addr ) ;
  if ( dlg_user_data.filename[0] && dlg_user_data.info.palette ) free( dlg_user_data.info.palette ) ;

  StdProgWText( wprog, 0, msg[MSG_PRINTING] ) ;
  vst_unload_fonts( handle, 0 ) ;
  xoffset = (int) (10000.0*dlg_user_data.posx/ptpx) ;
  yoffset = (int) (10000.0*dlg_user_data.posy/ptpy) ;
  xyarray[0] = xoffset ;
  xyarray[1] = yoffset ;
  xyarray[2] = xoffset+(int) (10000.0*sizex/ptpx) ;
  xyarray[3] = yoffset+(int) (10000.0*sizey/ptpy) ;

  mouse_busy() ;
  vs_page_info(print_handle, APPL,	MENU_NAME) ;
  vs_page_info(print_handle, DOC,	nom) ;
  vs_page_info(print_handle, CREAT,	"") ;
  vs_page_info(print_handle, REM,	"Thanks to Thierry Rodolfo !" ) ;

  if (dither_mono)
    v_bit_image(print_handle, nom, 0, INTEGER, INTEGER, 0, 0, xyarray) ;
  else
    v_bit_image(print_handle, nom, 0, FRACTIONAL, FRACTIONAL, 0, 0, xyarray) ;
  v_updwk(print_handle) ;
  v_clrwk(print_handle) ;
  v_clswk(print_handle) ;
  vst_load_fonts(handle, 0) ;
  mouse_restore() ;
  unlink(nom) ;
  GWDestroyWindow( wprog ) ;

  return( 0 ) ;
}
Пример #5
0
void small_scale_draw(ALWINDOW *alw, CURRENT_STATUS *cs)
	{
	register int loop1,loop2;
	int cf;
	short coord[4];
	register int curx,cury;

	int inc_res;
	int half_fret_height=frets_height/2,half_fret_length=frets_length/2;

	register int circle_radius;
	int h,saveh;
	int tadd;
	short ch,cw,clh,clw,maxcw;
	char albuff[10];
	char info_buffer[120];
	int combination_note,note_val;
	int frets_x_offset_and_frets_length;
	int half_fret_height_and_frets_y_offset;
	int frets_height_and_frets_y_offset;
	int frets_length_times_loop2;
	int frets_height_times_7;
	short tatts[10]; /* text attributes */
	NOTE *np;
	
#ifdef PRINTER_TEST
/* gdos test stuff*/
	short work_in[11],work_out[57],thandle,lop;

#endif

#define draw(X1,Y1,X2,Y2);	coord[0]=X1;coord[1]=Y1;coord[2]=X2;coord[3]=Y2;v_pline(handle,2,coord);

#ifdef PRINTER_TEST
if(vq_gdos()==0)
	fatal_error("GDOS NOT LOADED!");

#endif


#ifndef PRINTER_TEST
if(scale_name_flag && !key_name_flag)
	{
	sprintf(info_buffer," %s",cs->current_scale->name);
	wind_info(scale_window.handle,info_buffer);
	}
else
	{
	if(!scale_name_flag && key_name_flag)
		{
		sprintf(info_buffer," %s",cs->key->note_name);
		wind_info(scale_window.handle,info_buffer);
		}
	else
		{
		if(scale_name_flag && key_name_flag)
			{
			sprintf(info_buffer," %s in %s",cs->current_scale->name,cs->key->note_name);
			wind_info(scale_window.handle,info_buffer);
			}
		else
			{
			sprintf(info_buffer,"                                                                                       ");
			wind_info(scale_window.handle,info_buffer);
			}
		}
	}
#endif


	scale_offsets(alw,&frets_x_offset,&frets_y_offset);
	frets_y_offset=frets_y_offset+big_y_offset;
	frets_height_and_frets_y_offset=frets_height+frets_y_offset;
	frets_x_offset_and_frets_length=frets_length+frets_x_offset;
	half_fret_height_and_frets_y_offset=half_fret_height+frets_y_offset;


#ifndef PRINTER_TEST
h=0;cw=0;ch=0;maxcw=0;
while(cw<((frets_length/2)-2) && h<99)
	{
		
		if(cw>maxcw)
			saveh=h;
		h++;
		vst_height(handle,h,&cw,&ch,&clw,&clh);
	}

set_hor();


if(h>=99)
	vst_height(handle,saveh,&cw,&ch,&clw,&clh);
#endif

#ifdef PRINTER_TEST
clh=0;
#endif

	vqt_attributes(handle,tatts);

	frets_height_times_7=7*frets_height;

	total_y_dist=clh+(frets_height_times_7);


	set_ver(total_y_dist);


	if(frets_length>frets_height)
		circle_radius=(frets_height/2)-1-2;
	else
		circle_radius=(frets_length/2)-1-2;

	curx=0;

#ifdef PRINTER_TEST
work_in[0]=21; /*printer ?*/
for(lop=1;lop<10;lop++)
	work_in[lop]=1;
	work_in[10]=2;

for(lop=21;lop<31;lop++)
{
	work_in[0]=lop;
	v_opnwk(work_in,&handle,work_out);
	if(handle)
{
		error("GOT A PRINTER HANDLE");
		lop=32;
	}
	else
		error("NOT GOT A PRINTER HANDLE");
}


#endif

	wclip(alw);
	graf_mouse(M_OFF,NULL);
	for(loop2=0;loop2<global_frets && loop2+start_fret<global_frets;loop2++)
		{
		frets_length_times_loop2=frets_length*loop2;

		for(loop1=0;loop1<6;loop1++)
			{
			if(curx<desk_x+frets_height)
			{
				cf=loop2+start_fret;

				curx=/*alw->wx+*/(frets_length_times_loop2);
				cury=/*alw->wy+*/(loop1*frets_height);
				if(cf!=0)
					{

						draw(curx+frets_x_offset,cury+half_fret_height_and_frets_y_offset,
							 curx+frets_x_offset_and_frets_length,cury+half_fret_height_and_frets_y_offset);

					}


				switch(loop1)
				{
				case 0:				
					draw(curx+frets_x_offset_and_frets_length,cury+frets_y_offset+half_fret_height,
					 curx+frets_x_offset_and_frets_length,cury+frets_height_and_frets_y_offset);						
					break;

			 	case 5:					
					draw(curx+frets_x_offset_and_frets_length,cury+frets_y_offset,
					 curx+frets_x_offset_and_frets_length,cury+half_fret_height_and_frets_y_offset);						
					break;

				default:			
					draw(curx+frets_x_offset_and_frets_length,cury+frets_y_offset,
					 curx+frets_x_offset_and_frets_length,cury+frets_height_and_frets_y_offset);						
				}

#ifndef PRINTER_TEST
	if(numbers_flag==1)
	{

	if(cf==first_fret || (((inc_res=cf%fret_inc)==0) && cf>first_fret))
		{
		if((tadd=clh-frets_height)>0)
			{
			sprintf(albuff,"%d",cf);
			if(strlen(albuff)==1)
			v_gtext(handle,frets_x_offset+(frets_length_times_loop2)+half_fret_length-(tatts[6]/2),frets_y_offset+(frets_height_times_7)+tadd,albuff);
			else
			v_gtext(handle,frets_x_offset+(frets_length_times_loop2)+half_fret_length-tatts[6],frets_y_offset+(frets_height_times_7)+tadd,albuff);
			}
		else
			{
			sprintf(albuff,"%d",cf);
			if(strlen(albuff)==1)
			v_gtext(handle,frets_x_offset+(frets_length_times_loop2)+half_fret_length-(tatts[6]/2),frets_y_offset+(frets_height_times_7),albuff);
			else
			v_gtext(handle,frets_x_offset+(frets_length_times_loop2)+half_fret_length-tatts[6],
								frets_y_offset+(frets_height_times_7),albuff);
			}
		}
	}
#endif

		if(text_notes==1)
		{

			combination_note=0;
			if(cs->display_fretboard[loop1][cf]>RELATIVE_NOTE)
				{
					combination_note=1;
					note_val=cs->display_fretboard[loop1][cf]-RELATIVE_NOTE;
				}
			else
				{
					note_val=cs->display_fretboard[loop1][cf];
				}

			switch(note_val)
			{
						case NO_NOTE: break;
						case NORMAL_NOTE:
							if(combination_note)
								vst_effects(handle,0|UNDERLINED);
							else
								vst_effects(handle,0);
							break;
						case FILLED_NOTE:
							if(combination_note)
								vst_effects(handle,OUTLINE|UNDERLINED);
							else
								vst_effects(handle,OUTLINE);
							break;
						case RELATIVE_NOTE:
							vst_effects(handle,SHADED|UNDERLINED); 
							break;
			}

			/* draw as text */
			if(cs->display_fretboard[loop1][cf]!=NO_NOTE)
			{
				np=cs->current_fretboard[loop1][cf];
				sprintf(albuff,"%s",np->note_name);
				if(strlen(albuff)==1)
					v_gtext(handle,frets_x_offset+frets_length_times_loop2+half_fret_length-(tatts[6]/2),
										cury+half_fret_height_and_frets_y_offset+(tatts[7]/2)/*cury+frets_y_offset+frets_height*/,albuff);
				else
					v_gtext(handle,/*curx+frets_x_offset*/frets_x_offset+(frets_length_times_loop2)+half_fret_length-tatts[6],
										cury+half_fret_height_and_frets_y_offset+(tatts[7]/2)/*cury+frets_y_offset+frets_height*/,albuff);
			}
		
			vst_effects(handle,0);

		}
		else
		{
			combination_note=0;
			if(cs->display_fretboard[loop1][cf]>RELATIVE_NOTE)
				{
					combination_note=1;
					note_val=cs->display_fretboard[loop1][cf]-RELATIVE_NOTE;
				}
			else
				{
					note_val=cs->display_fretboard[loop1][cf];
				}

			if(combination_note)
				{
					vsf_color(handle,BLACK);
					vsf_interior(handle,FIS_HOLLOW);
					vsf_style(handle,0);

					alcircle(handle, 
								curx+half_fret_length+frets_x_offset,
								cury+half_fret_height+frets_y_offset, 
								circle_radius+2);
 		
					vsf_color(handle,BLACK);					
					vsf_interior(handle,8);
					vsf_style(handle,2);
				}

				switch(note_val)		
					{
						case NO_NOTE: break;
						case NORMAL_NOTE:
							vsf_color(handle,BLACK); 
							vsf_interior(handle,2);
							vsf_style(handle,2);

							alcircle(handle,
							curx+half_fret_length+frets_x_offset,
							cury+half_fret_height_and_frets_y_offset,
							circle_radius); 

							vsf_color(handle,BLACK);
							vsf_interior(handle,8);
							vsf_style(handle,2);
							break;
						case FILLED_NOTE:
							vsf_color(handle,BLACK);
							vsf_interior(handle,FIS_SOLID);
							vsf_style(handle,2);

							alcircle(handle, 
							curx+half_fret_length+frets_x_offset,
							cury+half_fret_height_and_frets_y_offset, 
							circle_radius);
 		
							vsf_color(handle,BLACK);					
							break;
						case RELATIVE_NOTE: 
							vsf_color(handle,BLACK);
							vsf_interior(handle,FIS_HOLLOW);
							vsf_style(handle,2);
							alcircle(handle, 
							curx+half_fret_length+frets_x_offset,
							cury+half_fret_height_and_frets_y_offset, 
							circle_radius);
 		
							vsf_color(handle,BLACK);					
							vsf_interior(handle,8);
							vsf_style(handle,2);
							break;
/*						case COMMON_NOTE: 
							vsf_color(handle,BLACK);
							vsf_interior(handle,4);
							vsf_style(handle,2);
							alcircle(handle, 
							curx+half_fret_length+frets_x_offset,
							cury+half_fret_height_and_frets_y_offset, 
							circle_radius);
 		
							vsf_color(handle,BLACK);					
							vsf_interior(handle,8);
							vsf_style(handle,2);
							break;*/
					}
			}

			}
			}

	
		}
	

graf_mouse(M_ON,NULL);
#ifdef PRINTER_TEST
v_clswk(handle);
#endif
	}