s390/con3270: move tty3270_convert_line()
authorSven Schnelle <svens@linux.ibm.com>
Sat, 26 Nov 2022 22:24:43 +0000 (23:24 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Mon, 9 Jan 2023 13:34:00 +0000 (14:34 +0100)
To make the upcoming patches easier to read, move tty3270_convert_line()
before changing code. No functional change.

Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Tested-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
drivers/s390/char/con3270.c

index 0a4fce0..3c4e9f8 100644 (file)
@@ -362,6 +362,168 @@ static void tty3270_write_callback(struct raw3270_request *rq, void *data)
        xchg(&tp->write, rq);
 }
 
+static int tty3270_required_length(struct tty3270 *tp, int line_nr)
+{
+       unsigned char f_color, b_color, highlight;
+       struct tty3270_line *line;
+       struct tty3270_cell *cell;
+       int i, flen = 3;                /* Prefix (TO_SBA). */
+
+       line = tp->screen + line_nr;
+       flen += line->len;
+       highlight = TAX_RESET;
+       f_color = TAC_RESET;
+       b_color = TAC_RESET;
+
+       for (i = 0, cell = line->cells; i < line->len; i++, cell++) {
+               if (cell->attributes.highlight != highlight) {
+                       flen += 3;      /* TO_SA to switch highlight. */
+                       highlight = cell->attributes.highlight;
+               }
+               if (cell->attributes.f_color != f_color) {
+                       flen += 3;      /* TO_SA to switch color. */
+                       f_color = cell->attributes.f_color;
+               }
+               if (cell->attributes.b_color != b_color) {
+                       flen += 3;      /* TO_SA to switch color. */
+                       b_color = cell->attributes.b_color;
+               }
+               if (cell->attributes.alternate_charset)
+                       flen += 1;      /* TO_GE to switch to graphics extensions */
+       }
+       if (highlight != TAX_RESET)
+               flen += 3;      /* TO_SA to reset hightlight. */
+       if (f_color != TAC_RESET)
+               flen += 3;      /* TO_SA to reset color. */
+       if (b_color != TAC_RESET)
+               flen += 3;      /* TO_SA to reset color. */
+       if (line->len < tp->view.cols)
+               flen += 4;      /* Postfix (TO_RA). */
+
+       return flen;
+}
+
+static char *tty3270_add_reset_attributes(struct tty3270 *tp, struct tty3270_line *line,
+                                         char *cp, struct tty3270_attribute *attr)
+{
+       if (attr->highlight != TAX_RESET) {
+               *cp++ = TO_SA;
+               *cp++ = TAT_EXTHI;
+               *cp++ = TAX_RESET;
+       }
+       if (attr->f_color != TAC_RESET) {
+               *cp++ = TO_SA;
+               *cp++ = TAT_FGCOLOR;
+               *cp++ = TAC_RESET;
+       }
+       if (attr->b_color != TAC_RESET) {
+               *cp++ = TO_SA;
+               *cp++ = TAT_BGCOLOR;
+               *cp++ = TAC_RESET;
+       }
+       if (line->len < tp->view.cols) {
+               *cp++ = TO_RA;
+               *cp++ = 0;
+               *cp++ = 0;
+               *cp++ = 0;
+       }
+       return cp;
+}
+
+static char *tty3270_add_attributes(struct tty3270_line *line, struct tty3270_attribute *attr,
+                                   char *cp)
+{
+       struct tty3270_cell *cell;
+       int i;
+
+       *cp++ = TO_SBA;
+       *cp++ = 0;
+       *cp++ = 0;
+
+       for (i = 0, cell = line->cells; i < line->len; i++, cell++) {
+               if (cell->attributes.highlight != attr->highlight) {
+                       *cp++ = TO_SA;
+                       *cp++ = TAT_EXTHI;
+                       *cp++ = cell->attributes.highlight;
+                       attr->highlight = cell->attributes.highlight;
+               }
+               if (cell->attributes.f_color != attr->f_color) {
+                       *cp++ = TO_SA;
+                       *cp++ = TAT_FGCOLOR;
+                       *cp++ = cell->attributes.f_color;
+                       attr->f_color = cell->attributes.f_color;
+               }
+               if (cell->attributes.b_color != attr->b_color) {
+                       *cp++ = TO_SA;
+                       *cp++ = TAT_BGCOLOR;
+                       *cp++ = cell->attributes.b_color;
+                       attr->b_color = cell->attributes.b_color;
+               }
+               if (cell->attributes.alternate_charset)
+                       *cp++ = TO_GE;
+               *cp++ = cell->character;
+       }
+       return cp;
+}
+
+static void tty3270_reset_attributes(struct tty3270_attribute *attr)
+{
+       attr->highlight = TAX_RESET;
+       attr->f_color = TAC_RESET;
+       attr->b_color = TAC_RESET;
+}
+
+static struct string *tty3270_resize_line(struct tty3270 *tp, struct string *s, int newlen)
+{
+       struct string *n = tty3270_alloc_string(tp, newlen);
+
+       list_add(&n->list, &s->list);
+       list_del_init(&s->list);
+       if (!list_empty(&s->update))
+               list_del_init(&s->update);
+       free_string(&tp->freemem, s);
+       return n;
+}
+
+/*
+ * Convert a tty3270_line to a 3270 data fragment usable for output.
+ */
+static void tty3270_convert_line(struct tty3270 *tp, int line_nr)
+{
+       struct tty3270_line *line = tp->screen + line_nr;
+       struct tty3270_attribute attr;
+       struct string *s;
+       int flen, i;
+       char *cp;
+
+       /* Determine how long the fragment will be. */
+       flen = tty3270_required_length(tp, line_nr);
+       /* Find the line in the list. */
+       i = tty3270_tty_rows(tp) - line_nr;
+       list_for_each_entry_reverse(s, &tp->lines, list)
+               if (--i <= 0)
+                       break;
+       /*
+        * Check if the line needs to get reallocated.
+        */
+       if (s->len != flen)
+               s = tty3270_resize_line(tp, s, flen);
+
+       /* Write 3270 data fragment. */
+       tty3270_reset_attributes(&attr);
+       cp = tty3270_add_attributes(line, &attr, s->string);
+       cp = tty3270_add_reset_attributes(tp, line, cp, &attr);
+       if (tp->nr_up + line_nr < tty3270_tty_rows(tp)) {
+               /* Line is currently visible on screen. */
+               tty3270_update_string(tp, s, line_nr);
+               /* Add line to update list. */
+               if (list_empty(&s->update)) {
+                       list_add_tail(&s->update, &tp->update);
+                       tp->update_flags |= TTY_UPDATE_LIST;
+               }
+       }
+}
+
 /*
  * Update 3270 display.
  */
@@ -1109,18 +1271,6 @@ static char tty3270_graphics_translate(struct tty3270 *tp, char ch)
        }
 }
 
-static struct string *tty3270_resize_line(struct tty3270 *tp, struct string *s, int newlen)
-{
-       struct string *n = tty3270_alloc_string(tp, newlen);
-
-       list_add(&n->list, &s->list);
-       list_del_init(&s->list);
-       if (!list_empty(&s->update))
-               list_del_init(&s->update);
-       free_string(&tp->freemem, s);
-       return n;
-}
-
 /*
  * Insert character into the screen at the current position with the
  * current color and highlight. This function does NOT do cursor movement.
@@ -1148,156 +1298,6 @@ static void tty3270_put_character(struct tty3270 *tp, char ch)
        cell->attributes = tp->attributes;
 }
 
-static int tty3270_required_length(struct tty3270 *tp, int line_nr)
-{
-       unsigned char f_color, b_color, highlight;
-       struct tty3270_line *line;
-       struct tty3270_cell *cell;
-       int i, flen = 3;                /* Prefix (TO_SBA). */
-
-       line = tp->screen + line_nr;
-       flen += line->len;
-       highlight = TAX_RESET;
-       f_color = TAC_RESET;
-       b_color = TAC_RESET;
-
-       for (i = 0, cell = line->cells; i < line->len; i++, cell++) {
-               if (cell->attributes.highlight != highlight) {
-                       flen += 3;      /* TO_SA to switch highlight. */
-                       highlight = cell->attributes.highlight;
-               }
-               if (cell->attributes.f_color != f_color) {
-                       flen += 3;      /* TO_SA to switch color. */
-                       f_color = cell->attributes.f_color;
-               }
-               if (cell->attributes.b_color != b_color) {
-                       flen += 3;      /* TO_SA to switch color. */
-                       b_color = cell->attributes.b_color;
-               }
-               if (cell->attributes.alternate_charset)
-                       flen += 1;      /* TO_GE to switch to graphics extensions */
-       }
-       if (highlight != TAX_RESET)
-               flen += 3;      /* TO_SA to reset hightlight. */
-       if (f_color != TAC_RESET)
-               flen += 3;      /* TO_SA to reset color. */
-       if (b_color != TAC_RESET)
-               flen += 3;      /* TO_SA to reset color. */
-       if (line->len < tp->view.cols)
-               flen += 4;      /* Postfix (TO_RA). */
-
-       return flen;
-}
-
-static char *tty3270_add_reset_attributes(struct tty3270 *tp, struct tty3270_line *line,
-                                         char *cp, struct tty3270_attribute *attr)
-{
-       if (attr->highlight != TAX_RESET) {
-               *cp++ = TO_SA;
-               *cp++ = TAT_EXTHI;
-               *cp++ = TAX_RESET;
-       }
-       if (attr->f_color != TAC_RESET) {
-               *cp++ = TO_SA;
-               *cp++ = TAT_FGCOLOR;
-               *cp++ = TAC_RESET;
-       }
-       if (attr->b_color != TAC_RESET) {
-               *cp++ = TO_SA;
-               *cp++ = TAT_BGCOLOR;
-               *cp++ = TAC_RESET;
-       }
-       if (line->len < tp->view.cols) {
-               *cp++ = TO_RA;
-               *cp++ = 0;
-               *cp++ = 0;
-               *cp++ = 0;
-       }
-       return cp;
-}
-
-static char *tty3270_add_attributes(struct tty3270_line *line, struct tty3270_attribute *attr,
-                                   char *cp)
-{
-       struct tty3270_cell *cell;
-       int i;
-
-       *cp++ = TO_SBA;
-       *cp++ = 0;
-       *cp++ = 0;
-
-       for (i = 0, cell = line->cells; i < line->len; i++, cell++) {
-               if (cell->attributes.highlight != attr->highlight) {
-                       *cp++ = TO_SA;
-                       *cp++ = TAT_EXTHI;
-                       *cp++ = cell->attributes.highlight;
-                       attr->highlight = cell->attributes.highlight;
-               }
-               if (cell->attributes.f_color != attr->f_color) {
-                       *cp++ = TO_SA;
-                       *cp++ = TAT_FGCOLOR;
-                       *cp++ = cell->attributes.f_color;
-                       attr->f_color = cell->attributes.f_color;
-               }
-               if (cell->attributes.b_color != attr->b_color) {
-                       *cp++ = TO_SA;
-                       *cp++ = TAT_BGCOLOR;
-                       *cp++ = cell->attributes.b_color;
-                       attr->b_color = cell->attributes.b_color;
-               }
-               if (cell->attributes.alternate_charset)
-                       *cp++ = TO_GE;
-               *cp++ = cell->character;
-       }
-       return cp;
-}
-
-static void tty3270_reset_attributes(struct tty3270_attribute *attr)
-{
-       attr->highlight = TAX_RESET;
-       attr->f_color = TAC_RESET;
-       attr->b_color = TAC_RESET;
-}
-
-/*
- * Convert a tty3270_line to a 3270 data fragment usable for output.
- */
-static void tty3270_convert_line(struct tty3270 *tp, int line_nr)
-{
-       struct tty3270_line *line = tp->screen + line_nr;
-       struct tty3270_attribute attr;
-       struct string *s;
-       int flen, i;
-       char *cp;
-
-       /* Determine how long the fragment will be. */
-       flen = tty3270_required_length(tp, line_nr);
-       /* Find the line in the list. */
-       i = tty3270_tty_rows(tp) - line_nr;
-       list_for_each_entry_reverse(s, &tp->lines, list)
-               if (--i <= 0)
-                       break;
-       /*
-        * Check if the line needs to get reallocated.
-        */
-       if (s->len != flen)
-               s = tty3270_resize_line(tp, s, flen);
-
-       /* Write 3270 data fragment. */
-       tty3270_reset_attributes(&attr);
-       cp = tty3270_add_attributes(line, &attr, s->string);
-       cp = tty3270_add_reset_attributes(tp, line, cp, &attr);
-       if (tp->nr_up + line_nr < tty3270_tty_rows(tp)) {
-               /* Line is currently visible on screen. */
-               tty3270_update_string(tp, s, line_nr);
-               /* Add line to update list. */
-               if (list_empty(&s->update)) {
-                       list_add_tail(&s->update, &tp->update);
-                       tp->update_flags |= TTY_UPDATE_LIST;
-               }
-       }
-}
-
 /*
  * Do carriage return.
  */