From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by befuddled.reisers.ca (Postfix, from userid 65534) id B47171EFAAB; Fri, 1 Jan 2016 16:11:27 -0500 (EST) Received: from mail0131.smtp25.com (mail0131.smtp25.com [75.126.84.131]) by befuddled.reisers.ca (Postfix) with ESMTPS id D5C8C1EF981 for ; Fri, 1 Jan 2016 16:11:25 -0500 (EST) Received: from ccs.covici.com (localhost [127.0.0.1]) by ccs.covici.com (8.14.9/8.14.8) with ESMTP id u01LB32u003314; Fri, 1 Jan 2016 16:11:04 -0500 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 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 X-BeenThere: speakup@linux-speakup.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "Speakup is a screen review system for Linux." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Jan 2016 21:11:27 -0000 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