Tested on 4.1.15 and it seems to work fine -- thanks a lot. Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> wrote: > Previously, speakup would always read the bottom part of the screen, > even when the VT is scrolled back with shift-page. This patch makes > vt.c export screen_pos so that speakup can use it to properly access > the content of the scrolled-back VT. > > This was tested with both vgacon and fbcon. > > Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> > > --- a/drivers/tty/vt/vt.c > +++ b/drivers/tty/vt/vt.c > @@ -4250,6 +4250,7 @@ unsigned short *screen_pos(struct vc_dat > { > return screenpos(vc, 2 * w_offset, viewed); > } > +EXPORT_SYMBOL_GPL(screen_pos); > > void getconsxy(struct vc_data *vc, unsigned char *p) > { > --- a/drivers/staging/speakup/main.c > +++ b/drivers/staging/speakup/main.c > @@ -264,8 +264,9 @@ static struct notifier_block vt_notifier > .notifier_call = vt_notifier_call, > }; > > -static unsigned char get_attributes(u16 *pos) > +static unsigned char get_attributes(struct vc_data *vc, u16 *pos) > { > + pos = screen_pos(vc, pos - (u16 *)vc->vc_origin, 1); > return (u_char) (scr_readw(pos) >> 8); > } > > @@ -275,7 +276,7 @@ static void speakup_date(struct vc_data > spk_y = spk_cy = vc->vc_y; > spk_pos = spk_cp = vc->vc_pos; > spk_old_attr = spk_attr; > - spk_attr = get_attributes((u_short *) spk_pos); > + spk_attr = get_attributes(vc, (u_short *)spk_pos); > } > > static void bleep(u_short val) > @@ -469,8 +470,12 @@ static u16 get_char(struct vc_data *vc, > u16 ch = ' '; > > if (vc && pos) { > - u16 w = scr_readw(pos); > - u16 c = w & 0xff; > + u16 w; > + u16 c; > + > + pos = screen_pos(vc, pos - (u16 *)vc->vc_origin, 1); > + w = scr_readw(pos); > + c = w & 0xff; > > if (w & vc->vc_hi_font_mask) > c |= 0x100; > @@ -746,7 +751,7 @@ static int get_line(struct vc_data *vc) > u_char tmp2; > > spk_old_attr = spk_attr; > - spk_attr = get_attributes((u_short *) spk_pos); > + spk_attr = get_attributes(vc, (u_short *)spk_pos); > for (i = 0; i < vc->vc_cols; i++) { > buf[i] = (u_char) get_char(vc, (u_short *) tmp, &tmp2); > tmp += 2; > @@ -811,7 +816,7 @@ static int say_from_to(struct vc_data *v > u_short saved_punc_mask = spk_punc_mask; > > spk_old_attr = spk_attr; > - spk_attr = get_attributes((u_short *) from); > + spk_attr = get_attributes(vc, (u_short *)from); > while (from < to) { > buf[i++] = (char)get_char(vc, (u_short *) from, &tmp); > from += 2; > @@ -886,7 +891,7 @@ static int get_sentence_buf(struct vc_da > sentmarks[bn][0] = &sentbuf[bn][0]; > i = 0; > spk_old_attr = spk_attr; > - spk_attr = get_attributes((u_short *) start); > + spk_attr = get_attributes(vc, (u_short *)start); > > while (start < end) { > sentbuf[bn][i] = (char)get_char(vc, (u_short *) start, &tmp); > @@ -1585,7 +1590,7 @@ static int count_highlight_color(struct > u16 *ptr; > > for (ptr = start; ptr < end; ptr++) { > - ch = get_attributes(ptr); > + ch = get_attributes(vc, ptr); > bg = (ch & 0x70) >> 4; > speakup_console[vc_num]->ht.bgcount[bg]++; > } > _______________________________________________ > Speakup mailing list > Speakup@xxxxxxxxxxxxxxxxx > http://linux-speakup.org/cgi-bin/mailman/listinfo/speakup > -- Your life is like a penny. You're going to lose it. The question is: How do you spend it? John Covici covici@xxxxxxxxxxxxxx _______________________________________________ Speakup mailing list Speakup@xxxxxxxxxxxxxxxxx http://linux-speakup.org/cgi-bin/mailman/listinfo/speakup