From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752447AbcAAVvV (ORCPT ); Fri, 1 Jan 2016 16:51:21 -0500 Received: from mail0131.smtp25.com ([75.126.84.131]:41445 "EHLO mail0131.smtp25.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752386AbcAAVvS (ORCPT ); Fri, 1 Jan 2016 16:51:18 -0500 X-Greylist: delayed 2382 seconds by postgrey-1.27 at vger.kernel.org; Fri, 01 Jan 2016 16:51:18 EST From: covici@ccs.covici.com To: Samuel Thibault , William Hubbs , Chris Brannon , Kirk Reiser , Greg Kroah-Hartman , Jiri Slaby , speakup@linux-speakup.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org Mail-Followup-To: Samuel Thibault , William Hubbs , Chris Brannon , Kirk Reiser , Greg Kroah-Hartman , Jiri Slaby , speakup@linux-speakup.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] Staging: speakup: read scrolled-back VT In-reply-to: <20160101172039.GC2860@var.home> References: <20160101172039.GC2860@var.home> Comments: In-reply-to Samuel Thibault message dated "Fri, 01 Jan 2016 18:20:39 +0100." X-Mailer: MH-E 8.5; nmh 1.6; GNU Emacs 23.4.1 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <3312.1451682663.1@ccs.covici.com> Date: Fri, 01 Jan 2016 16:11:03 -0500 Message-ID: <3313.1451682663@ccs.covici.com> X-SpamH-OriginatingIP: 70.109.53.110 X-SpamH-Filter: d-out-001.smtp25.com-u01LB6Os002183 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Tested on 4.1.15 and it seems to work fine -- thanks a lot. Samuel Thibault 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 > > --- 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@linux-speakup.org > 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@ccs.covici.com