void selectionne_item(WINDFORM_VAR *nw) { int x, y; int xw, yw, ww, hw; int wc, hc; int attr[10]; C_OBJ *obj; vqt_attributes(VDIhandle, attr); /* Coordonn‚es zone de travail : */ wind_get (nw->w_handle, WF_WORKXYWH, &xw, &yw, &ww, &hw); hc=hw/attr[9]; y=(mousey-yw)/attr[9]; if(nw->w_lin+y<=n_obj) { y +=nw->w_lin; obj=cherche_objet(curr_aff, nw->w_lin, &y); if (obj!=sel_obj) { sel_obj=obj; redraw (xw, yw, ww, hw); /* R‚affichage */ } } }
static void init_vdi(void) { int dummy, work_out[58], pix_height; screen_info.phy_handle = graf_handle(&screen_info.fnt_w, &screen_info.fnt_h, &dummy, &dummy); vq_extnd(vdi_handle, 0, work_out); max_w = work_out[0] + 1; /* Screen width (pixels) */ max_h = work_out[1] + 1; /* Screen height (pixels) */ ncolors = work_out[13]; /* Number of colours */ npatterns = work_out[14]; /* Number of patterns DjV 011 180103 */ pix_height = work_out[4]; /* DjV 007 190103 * Note: vqt_attributes below uses work_out and destroys information * in work_out[0] to work_out[9]; not a nice thing to do! */ vqt_attributes(vdi_handle, work_out); fnt_setfont(1, (int) (((long) work_out[7] * (long) pix_height * 72L + 12700L) / 25400L), &def_font); screen_info.vdi_handle = vdi_handle; }
/*----------------------------------------------------------------------- * Initialize GEM application: * open virtual workstation and get desktop extent. */ void gem_init(void) { WORD i, wsin[11], hch; appl_init(); if (!isAES4()) { form_alert(1, "[3][ |Viewer can't run on |this TOS version.][ Quit ]"); gem_exit(-1); } AES_Version = _AESglobal[0]; MultiFlag = _AESglobal[1]; /* -1 == MULTITOS, else single tasking */ if( AES_Version >= 0x0410 ) /* CJG 06/24/93 */ IconFlag = SMALLER; else IconFlag = 0; shel_grok(G_AP_TERM); wsid = aesid = graf_handle(&wchar, &hchar, &wbox, &hbox); wsin[0] = Getrez()+2; for (i = 1; i < 10; i++) wsin[i] = 1; wsin[i] = 2; v_opnvwk(wsin, &wsid, wsout); if (!wsid) { form_error(8); /* not enough memory */ gem_exit(-1); } /* Get default AES point size */ vqt_attributes(aesid, &aes_t_attr.font); vst_font(wsid, 1); hch = def_pts = 0; while (hch < aes_t_attr.hchar) vst_point(wsid, ++def_pts, &i, &hch, &i, &i); wind_grect(0, WF_WORKXYWH, &desk); }
WORD gsx_start(VOID) { WORD char_height, nc, attrib[10]; gl_xclip = 0; gl_yclip = 0; gl_width = gl_wclip = gl_ws.ws_xres + 1; gl_height = gl_hclip = gl_ws.ws_yres + 1; nc = gl_ws.ws_ncolors; gl_nplanes = 0; while (nc != 1) { nc >>= 1; gl_nplanes++; } vqt_attributes( gl_handle, &attrib[0] ); gl_ws.ws_chmaxh = attrib[7]; gl_ws.ws_pts2 = attrib[6]; char_height = gl_ws.ws_chminh; vst_height( gl_handle, char_height, &gl_wsptschar, &gl_hsptschar, &gl_wschar, &gl_hschar ); char_height = gl_ws.ws_chmaxh; vst_height( gl_handle, char_height, &gl_wptschar, &gl_hptschar, &gl_wchar, &gl_hchar ); gl_ncols = gl_width / gl_wchar; gl_nrows = gl_height / gl_hchar; gl_hbox = gl_hchar + 3; gl_wbox = (gl_hbox * gl_ws.ws_hpixel) / gl_ws.ws_wpixel; vsl_type( gl_handle, 7 ); vsl_width( gl_handle, 1 ); vsl_udsty( gl_handle, 0xffff ); rc_set(&gl_rscreen, 0, 0, gl_width, gl_height); rc_set(&gl_rfull, 0, gl_hbox, gl_width, (gl_height - gl_hbox)); rc_set(&gl_rzero, 0, 0, 0, 0); rc_set(&gl_rcenter, (gl_width-gl_wbox)/2, (gl_height-(2*gl_hbox))/2, gl_wbox, gl_hbox); rc_set(&gl_rmenu, 0, 0, gl_width, gl_hbox); ad_intin = (LONG)ADDR(&intin[0]); return (TRUE); }
void affiche(void) { int xw, yw, ww, hw, pxy[4], x, y; int wcell, hcell, attributs[10]; int dummy; C_OBJ *obj; vqt_attributes(VDIhandle, attributs); wcell=attributs[8]; hcell=attributs[9]; /* Coordonn‚es zone de travail fenˆtre : */ wind_get (buf[3], WF_WORKXYWH, &xw, &yw, &ww, &hw); vst_alignment (VDIhandle, 0, 5, &dummy, &dummy); /* Texte en haut … gauche */ x=xw-(prog.w_col-tab*generation(curr_aff))*wcell; y=yw; ecrit(curr_aff, x, &y, wcell, hcell, yw+hw); if(curr_aff->pere) /* ce bloc traite le cas o— les parents de curr_aff ne sont pas affiche */ { obj=curr_aff->pere; while (y<yw+hw && obj->suivant) { x-=tab*wcell; ecrit(obj->suivant, x, &y, wcell, hcell, yw+hw); if (obj->pere) obj=obj->pere; else y=yw+hw+1; /* cree un condition fausse pour sortir de la boucle */ } } }
/******************************************************************************* PopUp G_BUTTON *******************************************************************************/ int cdecl _drawPopUp(PARMBLK *parm) { pb.pb_tree = glb.rsc.head.trindex[FUSER]; pb.pb_obj = FUSDPOP+glb.vdi.low; pb.pb_prevstate = pb.pb_tree[pb.pb_obj].ob_state; pb.pb_currstate = parm->pb_tree[parm->pb_obj].ob_state; pb.pb_w = pb.pb_tree[pb.pb_obj].ob_width; pb.pb_h = pb.pb_tree[pb.pb_obj].ob_height; pb.pb_x = parm->pb_x+parm->pb_w-pb.pb_w; pb.pb_y = parm->pb_y+(parm->pb_h-pb.pb_h)/2; pb.pb_xc = parm->pb_xc; pb.pb_yc = parm->pb_yc; pb.pb_wc = parm->pb_wc; pb.pb_hc = parm->pb_hc; pb.pb_parm = pb.pb_tree[pb.pb_obj].ob_spec.userblk->ub_parm; vqt_attributes(glb.vdi.ha,tattr); vqf_attributes(glb.vdi.ha,fattr); flags=parm->pb_tree[parm->pb_obj].ob_flags; state=parm->pb_tree[parm->pb_obj].ob_state; vsl_color(glb.vdi.ha,BLACK); vst_effects(glb.vdi.ha,TXT_NORMAL); vst_alignment(glb.vdi.ha,ALI_LEFT,ALI_BASE,&dummy,&dummy); user=(UBLK *)(parm->pb_parm); vst_point(glb.vdi.ha,10-glb.vdi.low,&dummy,&htext,&dummy,&dummy); my1.g_x=parm->pb_x-3; my1.g_y=parm->pb_y-3; my1.g_w=parm->pb_w+6; my1.g_h=parm->pb_h+6; my2.g_x=parm->pb_xc; my2.g_y=parm->pb_yc; my2.g_w=parm->pb_wc; my2.g_h=parm->pb_hc; _rcIntersect(&my1,&my2); tab_clip[0]=my2.g_x; tab_clip[1]=my2.g_y; tab_clip[2]=tab_clip[0]+my2.g_w-1; tab_clip[3]=tab_clip[1]+my2.g_h-1; vs_clip(glb.vdi.ha,TRUE,tab_clip); pxy[0]=parm->pb_x-1; pxy[1]=parm->pb_y-1; pxy[2]=parm->pb_x+parm->pb_w; pxy[3]=pxy[1]; pxy[4]=pxy[2]; pxy[5]=parm->pb_y+parm->pb_h; pxy[6]=pxy[0]; pxy[7]=pxy[5]; pxy[8]=pxy[0]; pxy[9]=pxy[1]; v_pline(glb.vdi.ha,5,pxy); pxy[0]=parm->pb_x+parm->pb_w+1; pxy[1]=parm->pb_y; pxy[2]=pxy[0]; pxy[3]=parm->pb_y+parm->pb_h+1; pxy[4]=parm->pb_x; pxy[5]=pxy[3]; v_pline(glb.vdi.ha,3,pxy); pxy[0]=parm->pb_x+parm->pb_w+2; pxy[1]=parm->pb_y; pxy[2]=pxy[0]; pxy[3]=parm->pb_y+parm->pb_h+2; pxy[4]=parm->pb_x; pxy[5]=pxy[3]; v_pline(glb.vdi.ha,3,pxy); bar[0]=my1.g_x; bar[1]=my1.g_y; bar[2]=bar[0]+my1.g_w-1; bar[3]=bar[1]+my1.g_h-1; vswr_mode(glb.vdi.ha,MD_REPLACE); vsf_perimeter(glb.vdi.ha,FALSE); vsf_interior(glb.vdi.ha,FIS_SOLID); vsf_style(glb.vdi.ha,0); if (flags&FL3DACT) backcol=LWHITE; else backcol=WHITE; textcol=BLACK; if (backcol==LWHITE && glb.vdi.extnd[4]<4) backcol=WHITE; bar[0]=parm->pb_x; bar[1]=parm->pb_y; bar[2]=bar[0]+parm->pb_w-1; bar[3]=bar[1]+parm->pb_h-1; vsf_color(glb.vdi.ha,backcol); /**************************************************************************** Fond Blanc/Gris suivant r‚solution et 3D ****************************************************************************/ v_bar(glb.vdi.ha,bar); vst_color(glb.vdi.ha,textcol); vs_clip(glb.vdi.ha,FALSE,tab_clip); my1.g_x=parm->pb_x; my1.g_y=parm->pb_y; my1.g_w=parm->pb_w; my1.g_h=parm->pb_h; my2.g_x=parm->pb_xc; my2.g_y=parm->pb_yc; my2.g_w=parm->pb_wc; my2.g_h=parm->pb_hc; _rcIntersect(&my1,&my2); tab_clip[0]=my2.g_x; tab_clip[1]=my2.g_y; tab_clip[2]=tab_clip[0]+my2.g_w-1; tab_clip[3]=tab_clip[1]+my2.g_h-1; vs_clip(glb.vdi.ha,TRUE,tab_clip); vswr_mode(glb.vdi.ha,MD_TRANS); p=(char *)user->spec; while (*p==32) p++; vqt_extent(glb.vdi.ha,p,extent); x=parm->pb_x+pb.pb_w/2; y=parm->pb_y; y+=parm->pb_h/2; y-=(extent[7]-extent[1])/2; y+=htext; /**************************************************************************** Si bouton 3D alors on d‚cale le texte ****************************************************************************/ if (flags&FL3DIND && flags&FL3DACT && state&SELECTED) { x+=1; y+=1; } v_gtext(glb.vdi.ha,x,y,p); vs_clip(glb.vdi.ha,FALSE,tab_clip); vst_effects(glb.vdi.ha,TXT_NORMAL); vst_alignment (glb.vdi.ha,tattr[3],tattr[4],&dummy,&dummy); vsf_interior(glb.vdi.ha,fattr[2]); vsf_style(glb.vdi.ha,fattr[0]); vsf_perimeter(glb.vdi.ha,fattr[4]); _drawCicon(&pb); /**************************************************************************** Si le bouton est en relief alors il faut demander … l'AES de dessiner l'attribut SELECTED pour qu'il inverse le cadre fin gris/noir. Par contre si le bouton n'est pas en relief, il ne faut surtout pas demander … l'AES de dessiner cet attribut sinon; lorsque l'objet est s‚lectionn‚ (donc noir), l'AES le recouvre en blanc !! ****************************************************************************/ if (flags&FL3DIND && flags&FL3DACT || flags&FL3DIND) return parm->pb_currstate; else return parm->pb_currstate&~SELECTED; }
/******************************************************************************* G_BUTTON *******************************************************************************/ int cdecl _drawButton(PARMBLK *parm) { vqt_attributes(glb.vdi.ha,tattr); vqf_attributes(glb.vdi.ha,fattr); flags=parm->pb_tree[parm->pb_obj].ob_flags; state=parm->pb_tree[parm->pb_obj].ob_state; vst_effects(glb.vdi.ha,TXT_NORMAL); vst_alignment(glb.vdi.ha,ALI_LEFT,ALI_BASE,&dummy,&dummy); user=(UBLK *)(parm->pb_parm); vst_point(glb.vdi.ha,10-glb.vdi.low,&dummy,&htext,&dummy,&dummy); tour=1; if (flags & EXIT) tour+=1; if (flags & DEFAULT) tour+=1; my1.g_x=parm->pb_x-tour; my1.g_y=parm->pb_y-tour; my1.g_w=parm->pb_w+2*tour; my1.g_h=parm->pb_h+2*tour; my2.g_x=parm->pb_xc; my2.g_y=parm->pb_yc; my2.g_w=parm->pb_wc; my2.g_h=parm->pb_hc; _rcIntersect(&my1,&my2); tab_clip[0]=my2.g_x; tab_clip[1]=my2.g_y; tab_clip[2]=tab_clip[0]+my2.g_w-1; tab_clip[3]=tab_clip[1]+my2.g_h-1; vs_clip(glb.vdi.ha,TRUE,tab_clip); bar[0]=my1.g_x; bar[1]=my1.g_y; bar[2]=bar[0]+my1.g_w-1; bar[3]=bar[1]+my1.g_h-1; vswr_mode(glb.vdi.ha,MD_REPLACE); vsf_perimeter(glb.vdi.ha,FALSE); vsf_interior(glb.vdi.ha,FIS_SOLID); vsf_style(glb.vdi.ha,0); vsf_color(glb.vdi.ha,BLACK); /**************************************************************************** Cadre Noir (attributs EXIT/DEFAUT/SELECTABLE) ****************************************************************************/ v_bar(glb.vdi.ha,bar); if (flags&FL3DIND && flags&FL3DACT) { backcol=LWHITE; textcol=BLACK; } else if (flags&FL3DIND) { if (state&SELECTED) { backcol=LBLACK; textcol=WHITE; } else { backcol=LWHITE; textcol=BLACK; } } else { if (state&SELECTED) { backcol=BLACK; textcol=WHITE; } else { backcol=WHITE; textcol=BLACK; } } if (backcol==LWHITE && glb.vdi.extnd[4]<4) backcol=WHITE; if (backcol!=BLACK) { bar[0]=parm->pb_x; bar[1]=parm->pb_y; bar[2]=bar[0]+parm->pb_w-1; bar[3]=bar[1]+parm->pb_h-1; vsf_color(glb.vdi.ha,backcol); /************************************************************************* Cadre Int‚rieur Blanc/Noir/Gris suivant s‚lection *************************************************************************/ v_bar(glb.vdi.ha,bar); } vst_color(glb.vdi.ha,textcol); vs_clip(glb.vdi.ha,FALSE,tab_clip); my1.g_x=parm->pb_x; my1.g_y=parm->pb_y; my1.g_w=parm->pb_w; my1.g_h=parm->pb_h; my2.g_x=parm->pb_xc; my2.g_y=parm->pb_yc; my2.g_w=parm->pb_wc; my2.g_h=parm->pb_hc; _rcIntersect(&my1,&my2); tab_clip[0]=my2.g_x; tab_clip[1]=my2.g_y; tab_clip[2]=tab_clip[0]+my2.g_w-1; tab_clip[3]=tab_clip[1]+my2.g_h-1; vs_clip(glb.vdi.ha,TRUE,tab_clip); vswr_mode(glb.vdi.ha,MD_TRANS); tLarg=0; trait=(uchar *)strchr((char *)user->spec,'['); if (trait!=NULL) { if (trait!=(uchar *)user->spec) { *trait=0; vst_effects(glb.vdi.ha,TXT_UNDERLINED); vqt_extent(glb.vdi.ha,(char *)user->spec,extent); vst_effects(glb.vdi.ha,TXT_NORMAL); *trait='['; tLarg=extent[2]-extent[6]; } trait++; } else trait=(uchar *)user->spec; vqt_extent(glb.vdi.ha,(char *)trait,extent); tLarg+=extent[2]-extent[6]; x=parm->pb_x; x+=(parm->pb_w-tLarg)/2; y=parm->pb_y; y+=parm->pb_h/2; y-=(extent[7]-extent[1])/2; y+=htext; /**************************************************************************** Si bouton 3D alors on d‚cale le texte ****************************************************************************/ if (flags&FL3DIND && flags&FL3DACT && state&SELECTED) { x+=1; y+=1; } trait=(uchar *)strchr((char *)user->spec,'['); if (trait!=NULL) { if (trait!=(uchar *)user->spec) { *trait=0; vqt_extent(glb.vdi.ha,(char *)user->spec,extent); v_gtext(glb.vdi.ha,x,y,(char *)user->spec); *trait='['; x+=extent[2]-extent[0]; } trait++; if (*trait!=0) { car[0]=*trait; car[1]=0; vst_effects(glb.vdi.ha,TXT_UNDERLINED); v_gtext(glb.vdi.ha,x,y,(char *)car); vqt_extent(glb.vdi.ha,(char *)car,extent); vst_effects(glb.vdi.ha,TXT_NORMAL); trait++; x+=extent[2]-extent[0]; } if (*trait!=0) v_gtext(glb.vdi.ha,x,y,(char *)trait); } else v_gtext(glb.vdi.ha,x,y,(char *)user->spec); vs_clip(glb.vdi.ha,FALSE,tab_clip); vst_effects(glb.vdi.ha,TXT_NORMAL); vst_alignment (glb.vdi.ha,tattr[3],tattr[4],&dummy,&dummy); vsf_interior(glb.vdi.ha,fattr[2]); vsf_style(glb.vdi.ha,fattr[0]); vsf_perimeter(glb.vdi.ha,fattr[4]); /**************************************************************************** Si le bouton est en relief alors il faut demander … l'AES de dessiner l'attribut SELECTED pour qu'il inverse le cadre fin gris/noir. Par contre si le bouton n'est pas en relief, il ne faut surtout pas demander … l'AES de dessiner cet attribut sinon; lorsque l'objet est s‚lectionn‚ (donc noir), l'AES le recouvre en blanc !! ****************************************************************************/ if (flags&FL3DIND && flags&FL3DACT || flags&FL3DIND) return parm->pb_currstate; else return parm->pb_currstate&~SELECTED; }
/******************************************************************************* Cross & Radio G_BUTTON *******************************************************************************/ int cdecl _drawCroixCarre(PARMBLK *parm) { pb.pb_tree = glb.rsc.head.trindex[FUSER]; if (((parm->pb_tree[parm->pb_obj].ob_type)&0xFF00)==USD_CROSS) pb.pb_obj = FUSDCAR+glb.vdi.low; else if (((parm->pb_tree[parm->pb_obj].ob_type)&0xFF00)==USD_ROUND) pb.pb_obj = FUSDCIR+glb.vdi.low; else pb.pb_obj = FUSDLAR+glb.vdi.low; pb.pb_prevstate = pb.pb_tree[pb.pb_obj].ob_state; if (((parm->pb_tree[parm->pb_obj].ob_type)&0xFF00)==USD_NUM) pb.pb_currstate= pb.pb_tree[pb.pb_obj].ob_state; else pb.pb_currstate= parm->pb_tree[parm->pb_obj].ob_state; pb.pb_w = pb.pb_tree[pb.pb_obj].ob_width; pb.pb_h = pb.pb_tree[pb.pb_obj].ob_height; pb.pb_x = parm->pb_x; pb.pb_y = parm->pb_y+(parm->pb_h-pb.pb_h)/2; pb.pb_xc = parm->pb_xc; pb.pb_yc = parm->pb_yc; pb.pb_wc = parm->pb_wc; pb.pb_hc = parm->pb_hc; pb.pb_parm = pb.pb_tree[pb.pb_obj].ob_spec.userblk->ub_parm; vqt_attributes(glb.vdi.ha,tattr); vqf_attributes(glb.vdi.ha,fattr); flags=parm->pb_tree[parm->pb_obj].ob_flags; state=parm->pb_tree[parm->pb_obj].ob_state; vst_effects(glb.vdi.ha,TXT_NORMAL); vst_alignment(glb.vdi.ha,ALI_LEFT,ALI_BASE,&dummy,&dummy); user=(UBLK *)(parm->pb_parm); vst_point(glb.vdi.ha,10-glb.vdi.low,&dummy,&htext,&dummy,&dummy); my1.g_x=parm->pb_x; my1.g_y=parm->pb_y; my1.g_w=parm->pb_w; my1.g_h=parm->pb_h; my2.g_x=parm->pb_xc; my2.g_y=parm->pb_yc; my2.g_w=parm->pb_wc; my2.g_h=parm->pb_hc; _rcIntersect(&my1,&my2); tab_clip[0]=my2.g_x; tab_clip[1]=my2.g_y; tab_clip[2]=tab_clip[0]+my2.g_w-1; tab_clip[3]=tab_clip[1]+my2.g_h-1; vs_clip(glb.vdi.ha,TRUE,tab_clip); bar[0]=my1.g_x; bar[1]=my1.g_y; bar[2]=bar[0]+my1.g_w-1; bar[3]=bar[1]+my1.g_h-1; vswr_mode(glb.vdi.ha,MD_REPLACE); vsf_perimeter(glb.vdi.ha,FALSE); vsf_interior(glb.vdi.ha,FIS_SOLID); vsf_style(glb.vdi.ha,0); if (flags&FL3DACT) backcol=LWHITE; else backcol=WHITE; textcol=BLACK; if (backcol==LWHITE && glb.vdi.extnd[4]<4) backcol=WHITE; bar[0]=parm->pb_x; bar[1]=parm->pb_y; bar[2]=bar[0]+parm->pb_w-1; bar[3]=bar[1]+parm->pb_h-1; vsf_color(glb.vdi.ha,backcol); /**************************************************************************** Fond Blanc/Gris suivant r‚solution et 3D ****************************************************************************/ v_bar(glb.vdi.ha,bar); vst_color(glb.vdi.ha,textcol); vs_clip(glb.vdi.ha,FALSE,tab_clip); my1.g_x=parm->pb_x; my1.g_y=parm->pb_y; my1.g_w=parm->pb_w; my1.g_h=parm->pb_h; my2.g_x=parm->pb_xc; my2.g_y=parm->pb_yc; my2.g_w=parm->pb_wc; my2.g_h=parm->pb_hc; _rcIntersect(&my1,&my2); tab_clip[0]=my2.g_x; tab_clip[1]=my2.g_y; tab_clip[2]=tab_clip[0]+my2.g_w-1; tab_clip[3]=tab_clip[1]+my2.g_h-1; vs_clip(glb.vdi.ha,TRUE,tab_clip); vswr_mode(glb.vdi.ha,MD_TRANS); tLarg=0; trait=(uchar *)strchr((char *)user->spec,'['); if (trait!=NULL) { if (trait!=(uchar *)user->spec) { *trait=0; vst_effects(glb.vdi.ha,TXT_UNDERLINED); vqt_extent(glb.vdi.ha,(char *)user->spec,extent); vst_effects(glb.vdi.ha,TXT_NORMAL); *trait='['; tLarg=extent[2]-extent[6]; } trait++; } else trait=(uchar *)user->spec; vqt_extent(glb.vdi.ha,(char *)trait,extent); tLarg+=extent[2]-extent[6]; if (((parm->pb_tree[parm->pb_obj].ob_type)&0xFF00)==USD_NUM) { vst_alignment(glb.vdi.ha,ALI_CENTER,ALI_BASE,&dummy,&dummy); x=parm->pb_x+parm->pb_w/2; } else { vst_alignment(glb.vdi.ha,ALI_LEFT,ALI_BASE,&dummy,&dummy); x=parm->pb_x+1.5*pb.pb_w; } y=parm->pb_y; y+=parm->pb_h/2; y-=(extent[7]-extent[1])/2; y+=htext; trait=(uchar *)strchr((char *)user->spec,'['); if (trait!=NULL) { if (trait!=(uchar *)user->spec) { *trait=0; vqt_extent(glb.vdi.ha,(char *)user->spec,extent); v_gtext(glb.vdi.ha,x,y,(char *)user->spec); *trait='['; x+=extent[2]-extent[0]; } trait++; if (*trait!=0) { car[0]=*trait; car[1]=0; vst_effects(glb.vdi.ha,TXT_UNDERLINED); v_gtext(glb.vdi.ha,x,y,(char *)car); vqt_extent(glb.vdi.ha,(char *)car,extent); vst_effects(glb.vdi.ha,TXT_NORMAL); trait++; x+=extent[2]-extent[0]; } if (*trait!=0) v_gtext(glb.vdi.ha,x,y,(char *)trait); } else v_gtext(glb.vdi.ha,x,y,(char *)user->spec); vs_clip(glb.vdi.ha,FALSE,tab_clip); vst_effects(glb.vdi.ha,TXT_NORMAL); vst_alignment (glb.vdi.ha,tattr[3],tattr[4],&dummy,&dummy); vsf_interior(glb.vdi.ha,fattr[2]); vsf_style(glb.vdi.ha,fattr[0]); vsf_perimeter(glb.vdi.ha,fattr[4]); _drawCicon(&pb); if (((parm->pb_tree[parm->pb_obj].ob_type)&0xFF00)==USD_NUM) { pb.pb_tree = glb.rsc.head.trindex[FUSER]; pb.pb_obj = FUSDRAR+glb.vdi.low; pb.pb_prevstate= pb.pb_tree[pb.pb_obj].ob_state; pb.pb_currstate= pb.pb_tree[pb.pb_obj].ob_state; pb.pb_w = pb.pb_tree[pb.pb_obj].ob_width; pb.pb_h = pb.pb_tree[pb.pb_obj].ob_height; pb.pb_x = parm->pb_x+parm->pb_w-pb.pb_w; pb.pb_y = parm->pb_y+(parm->pb_h-pb.pb_h)/2; pb.pb_xc = parm->pb_xc; pb.pb_yc = parm->pb_yc; pb.pb_wc = parm->pb_wc; pb.pb_hc = parm->pb_hc; pb.pb_parm = pb.pb_tree[pb.pb_obj].ob_spec.userblk->ub_parm; _drawCicon(&pb); } /**************************************************************************** Si le bouton est en relief alors il faut demander … l'AES de dessiner l'attribut SELECTED pour qu'il inverse le cadre fin gris/noir. Par contre si le bouton n'est pas en relief, il ne faut surtout pas demander … l'AES de dessiner cet attribut sinon; lorsque l'objet est s‚lectionn‚ (donc noir), l'AES le recouvre en blanc !! ****************************************************************************/ return parm->pb_currstate&~SELECTED; }
void specific_note_draw(ALWINDOW *alw, CURRENT_STATUS *cs,int specific_note) { register int loop1,loop2; int cf; short coord[4]; register int curx,cury; int half_fret_height=frets_height/2,half_fret_length=frets_length/2; register int circle_radius; int combination_note,note_val; int frets_length_times_loop2,half_fret_height_and_frets_y_offset; short tatts[10]; /* text attributes */ NOTE *np; char albuff[10]; #define draw(X1,Y1,X2,Y2); coord[0]=X1;coord[1]=Y1;coord[2]=X2;coord[3]=Y2;v_pline(handle,2,coord); scale_offsets(alw,&frets_x_offset,&frets_y_offset); frets_y_offset=frets_y_offset+big_y_offset; half_fret_height_and_frets_y_offset=half_fret_height+frets_y_offset; if(frets_length>frets_height) circle_radius=(frets_height/2)-1-2; else circle_radius=(frets_length/2)-1-2; vqt_attributes(handle,tatts); 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++) { cf=loop2+start_fret; curx=(loop2*frets_length); cury=(loop1*frets_height); if(cs->current_fretboard[loop1][cf]->number==specific_note) { /* vsf_color(handle,WHITE); vsf_interior(handle,FIS_SOLID); vsf_style(handle,1); 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); */ /* Wipe out the old note */ coord[0]=curx+frets_x_offset+1; coord[1]=cury+frets_y_offset; coord[2]=curx+frets_x_offset+frets_length-1; coord[3]=cury+frets_height+frets_y_offset; vsf_color(handle,WHITE); vsf_interior(handle,FIS_SOLID); vsf_style(handle,1); vr_recfl(handle,coord); vsf_color(handle,BLACK); vsf_interior(handle,8); vsf_style(handle,2); /* if the current fret is 0 then it is the open notes only draw the string if it is not the open note */ if(cf!=0) { draw(curx+frets_x_offset, cury+half_fret_height+frets_y_offset, curx+frets_length+frets_x_offset, cury+half_fret_height+frets_y_offset); } /* draw the note */ 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,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: /* vsf_color(handle,WHITE); vsf_interior(handle,FIS_SOLID); vsf_style(handle,1); alcircle(handle, curx+half_fret_length+frets_x_offset, cury+half_fret_height+frets_y_offset, circle_radius); vsf_color(handle,BLACK); vsf_interior(handle,8); vsf_style(handle,2); if(cf!=0) { draw(curx+frets_x_offset, cury+half_fret_height+frets_y_offset, curx+frets_length+frets_x_offset, cury+half_fret_height+frets_y_offset); }*/ break; case NORMAL_NOTE: /* if(cf!=0) { draw(curx+frets_x_offset, cury+half_fret_height+frets_y_offset, curx+frets_length+frets_x_offset, cury+half_fret_height+frets_y_offset); } */ 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+frets_y_offset, circle_radius); vsf_color(handle,BLACK); vsf_interior(handle,8); vsf_style(handle,2); break; case FILLED_NOTE: /* if(cf!=0) { draw(curx+frets_x_offset, cury+half_fret_height+frets_y_offset, curx+frets_length+frets_x_offset, cury+half_fret_height+frets_y_offset); } */ 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+frets_y_offset, circle_radius); vsf_color(handle,BLACK); break; case RELATIVE_NOTE: /* if(cf!=0) { draw(curx+frets_x_offset, cury+half_fret_height+frets_y_offset, curx+frets_length+frets_x_offset, cury+half_fret_height+frets_y_offset); } */ 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); 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+frets_y_offset, circle_radius); vsf_color(handle,BLACK); vsf_interior(handle,8); vsf_style(handle,2); break; */ } } } } } graf_mouse(M_ON,NULL); }
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 }
/* ** Description ** Initialize global variables, open vdi workstation etc */ void init_global (WORD physical_vdi_id) { #if 0 int temp_vid; int work_in[] = {1,1,1,1,1,1,1,1,1,1,2}; #endif int work_out[57]; int dum; static int is_inited = FALSE; /* Only initialize globals if they haven't been initialized before */ if(!is_inited) { is_inited = TRUE; DEBUG3 ("Entering init_global"); #if 0 /* FIXME def MINT_TARGET */ /* Only mess with videomodes if running under MiNT */ if(globals.video == 0x00030000L) { fprintf(stderr,"VsetMode\r\n"); oldmode = globals.vmode = 3; oldmodecode = globals.vmodecode = VsetMode(-1); fprintf(stderr,"/VsetMode\r\n"); } else { oldmode = globals.vmode = Getrez(); }; #endif /* MINT_TARGET */ global_common.mouse_owner = -1; global_common.realmove = 0; global_common.realsize = 0; global_common.realslide = 0; global_common.fnt_regul_id = -1; global_common.fnt_regul_sz = -1; global_common.icon_width = 48; global_common.icon_height = 56; global_common.wind_appl = 1; global_common.graf_mbox = 1; global_common.graf_growbox = 1; global_common.graf_shrinkbox = 1; global_common.fsel_sorted = 1; global_common.fsel_extern = 0; DEBUG3 ("init_global: 2"); #if 0 /* FIXME : Remove? def MINT_TARGET */ fprintf(stderr,"appl_init()\r\n"); own_appl_init(); fprintf(stderr,"/appl_init()\r\n"); if(open_physical_ws) { printf("No other AES found. Opening own Workstation.\r\n"); work_in[0] = 5; v_opnwk(work_in,&global_common.vid,work_out); if(global_common.video == 0x00030000L) { VsetScreen(NULL, NULL, global_common.vmode, global_common.vmodecode); } else { VsetScreen((void*)-1, (void *)-1, global_common.vmode, global_common.vmodecode); } } else { printf("Other AES detected.\r\n"); global_common.vid = own_graf_handle(); v_clrwk(global_common.vid); } #endif global_common.physical_vdi_id = physical_vdi_id; DEBUG2 ("lib_global.c: init_global: calling vq_extnd"); vq_extnd (physical_vdi_id, 0, work_out); global_common.screen.x = 0; global_common.screen.y = 0; global_common.screen.width = work_out[0] + 1; global_common.screen.height = work_out[1] + 1; global_common.num_pens = work_out[13]; vq_extnd (physical_vdi_id, 1, work_out); global_common.num_planes = work_out[4]; /* setup systemfont information */ if(global_common.screen.height >= 400) { global_common.fnt_regul_id = 1; global_common.fnt_regul_sz = 13; } else { global_common.fnt_regul_id = 1; global_common.fnt_regul_sz = 9; } global_common.fnt_small_id = global_common.fnt_regul_id; global_common.fnt_small_sz = global_common.fnt_regul_sz / 2; vst_font (physical_vdi_id, global_common.fnt_regul_id); vst_point (physical_vdi_id, global_common.fnt_regul_sz, &dum, &dum, &dum, &dum); global_common.arrowrepeat = 100; DEBUG2 ("lib_global.c: init_global: calling vqt_attributes"); vqt_attributes (physical_vdi_id, work_out); global_common.blwidth = work_out[8] + 3; global_common.blheight = work_out[9] + 3; global_common.clwidth = work_out[8]; global_common.clheight = work_out[9]; global_common.bswidth = work_out[8] / 2 + 3; global_common.bsheight = work_out[9] / 2 + 3; global_common.cswidth = work_out[8] / 2; global_common.csheight = work_out[9] / 2; global_common.time = 0L; #ifndef MINT_TARGET global_common.callback_handler = oaesis_callback; #endif DEBUG2("lib_global.c: init_global: Calling Rsrc_do_rcfix"); Rsrc_do_rcfix (physical_vdi_id, (RSHDR *)resource, FALSE , TRUE ); DEBUG2("lib_global.c: init_global: Called Rsrc_do_rcfix"); Rsrc_do_gaddr((RSHDR *)resource, R_TREE, AICONS, &global_common.aiconstad, TRUE); DEBUG3("init_global: 10"); Rsrc_do_gaddr((RSHDR *)resource, R_TREE, ALERT, &global_common.alerttad, TRUE); Rsrc_do_gaddr((RSHDR *)resource, R_TREE, FISEL, &global_common.fiseltad, TRUE); Rsrc_do_gaddr((RSHDR *)resource, R_TREE, PMENU, &global_common.pmenutad, TRUE); Rsrc_do_gaddr((RSHDR *)resource, R_FRSTR, 0, (OBJECT **)&global_common.fr_string, TRUE); /* Initialize window elements and resource counters */ Rsrc_do_gaddr((RSHDR *)resource, R_TREE, WINDOW, &global_common.windowtad, TRUE); global_common.elemnumber = -1; DEBUG3("init_global: 11"); /* Init mouseforms */ Rsrc_do_rcfix (physical_vdi_id, (RSHDR *)cursors, FALSE , TRUE ); DEBUG3("init_global: 12"); Rsrc_do_gaddr((RSHDR *)cursors, R_TREE, MOUSEFORMS, &global_common.mouseformstad, TRUE); DEBUG3("init_global: 13"); Graf_init_mouseforms(); DEBUG3("init_global: 14"); #ifdef MINT_TARGET /* Initialize semaphore used by Shel_do_write */ Psemaphore(SEM_CREATE, SHEL_WRITE_LOCK, 0); Psemaphore(SEM_UNLOCK, SHEL_WRITE_LOCK, 0); #endif } }