static int playlist_callback_voice(int selected_item, void *data) { struct playlist_viewer *local_viewer = (struct playlist_viewer *)data; int track_num = get_track_num(local_viewer, selected_item); struct playlist_entry *track = playlist_buffer_get_track(&(local_viewer->buffer), track_num); bool enqueue = false; if (global_settings.talk_file_clip || global_settings.talk_file == 2) { if (global_settings.playlist_viewer_indices) { talk_number(track->display_index, false); enqueue = true; } talk_file_or_spell(NULL, track->name, NULL, enqueue); } else if (global_settings.talk_file == 1) /* as numbers */ { talk_id(VOICE_FILE, false); talk_number(track->display_index, true); } return 0; }
static enum themable_icons playlist_callback_icons(int selected_item, void *data) { struct playlist_viewer *local_viewer = (struct playlist_viewer *)data; int track_num = get_track_num(local_viewer, selected_item); struct playlist_entry *track = playlist_buffer_get_track(&(local_viewer->buffer), track_num); if (track->index == local_viewer->current_playing_track) { /* Current playing track */ return Icon_Audio; } else if (track->index == local_viewer->moving_playlist_index) { /* Track we are moving */ return Icon_Moving; } else if (track->queued) { /* Queued track */ return Icon_Queued; } else return Icon_NOICON; }
static const char* playlist_callback_name(int selected_item, void *data, char *buffer, size_t buffer_len) { struct playlist_viewer *local_viewer = (struct playlist_viewer *)data; int track_num = get_track_num(local_viewer, selected_item); struct playlist_entry *track = playlist_buffer_get_track(&(local_viewer->buffer), track_num); format_line(track, buffer, buffer_len); return(buffer); }
static void drawroute (enum e_draw_net_type draw_net_type) { /* Draws the nets in the positions fixed by the router. If draw_net_type is * * ALL_NETS, draw all the nets. If it is HIGHLIGHTED, draw only the nets * * that are not coloured black (useful for drawing over the rr_graph). */ /* Next free track in each channel segment if routing is GLOBAL */ static int **chanx_track = NULL; /* [1..nx][0..ny] */ static int **chany_track = NULL; /* [0..nx][1..ny] */ int inet, i, j, inode, prev_node, prev_track, itrack; short switch_type; struct s_trace *tptr; t_rr_type rr_type, prev_type; if (draw_route_type == GLOBAL) { /* Allocate some temporary storage if it's not already available. */ if (chanx_track == NULL) chanx_track = (int **) alloc_matrix (1, nx, 0, ny, sizeof(int)); if (chany_track == NULL) chany_track = (int **) alloc_matrix (0, nx, 1, ny, sizeof(int)); for (i=1;i<=nx;i++) for (j=0;j<=ny;j++) chanx_track[i][j] = -1; for (i=0;i<=nx;i++) for (j=1;j<=ny;j++) chany_track[i][j] = -1; } setlinestyle (SOLID); /* Now draw each net, one by one. */ for (inet=0;inet<num_nets;inet++) { if (is_global[inet]) /* Don't draw global nets. */ continue; if (trace_head[inet] == NULL) /* No routing. Skip. (Allows me to draw */ continue; /* partially complete routes). */ if (draw_net_type == HIGHLIGHTED && net_color[inet] == BLACK) continue; setcolor (net_color[inet]); tptr = trace_head[inet]; /* SOURCE to start */ inode = tptr->index; rr_type = rr_node[inode].type; while (1) { prev_node = inode; prev_type = rr_type; switch_type = tptr->iswitch; tptr = tptr->next; inode = tptr->index; rr_type = rr_node[inode].type; switch (rr_type) { case OPIN: draw_rr_pin (inode, net_color[inet]); break; case IPIN: draw_rr_pin (inode, net_color[inet]); prev_track = get_track_num (prev_node, chanx_track, chany_track); draw_pin_to_chan_edge (inode, prev_node, prev_track, FALSE); break; case CHANX: if (draw_route_type == GLOBAL) chanx_track[rr_node[inode].xlow][rr_node[inode].ylow]++; itrack = get_track_num (inode, chanx_track, chany_track); draw_rr_chanx (inode, itrack); switch (prev_type) { case CHANX: prev_track = get_track_num (prev_node, chanx_track, chany_track); draw_chanx_to_chanx_edge (prev_node, prev_track, inode, itrack, switch_type); break; case CHANY: prev_track = get_track_num (prev_node, chanx_track, chany_track); draw_chanx_to_chany_edge (inode, itrack, prev_node, prev_track, FROM_Y_TO_X, switch_type); break; case OPIN: draw_pin_to_chan_edge (prev_node, inode, itrack, FALSE); break; default: printf ("Error in drawroute: Unexpected connection from an \n" "rr_node of type %d to one of type %d.\n", prev_type, rr_type); exit (1); } break; case CHANY: if (draw_route_type == GLOBAL) chany_track[rr_node[inode].xlow][rr_node[inode].ylow]++; itrack = get_track_num (inode, chanx_track, chany_track); draw_rr_chany (inode, itrack); switch (prev_type) { case CHANX: prev_track = get_track_num (prev_node, chanx_track, chany_track); draw_chanx_to_chany_edge (prev_node, prev_track, inode, itrack, FROM_X_TO_Y, switch_type); break; case CHANY: prev_track = get_track_num (prev_node, chanx_track, chany_track); draw_chany_to_chany_edge (prev_node, prev_track, inode, itrack, switch_type); break; case OPIN: draw_pin_to_chan_edge (prev_node, inode, itrack, FALSE); break; default: printf ("Error in drawroute: Unexpected connection from an \n" "rr_node of type %d to one of type %d.\n", prev_type, rr_type); exit (1); } break; default: break; } if (rr_type == SINK) { /* Skip the next segment */ tptr = tptr->next; if (tptr == NULL) break; inode = tptr->index; rr_type = rr_node[inode].type; } } /* End loop over traceback. */ } /* End for (each net) */ }