Deleted Added
full compact
teken_subr.h (197115) teken_subr.h (197117)
1/*-
2 * Copyright (c) 2008-2009 Ed Schouten <ed@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
1/*-
2 * Copyright (c) 2008-2009 Ed Schouten <ed@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/teken/teken_subr.h 197115 2009-09-12 10:34:34Z ed $
26 * $FreeBSD: head/sys/teken/teken_subr.h 197117 2009-09-12 12:44:21Z ed $
27 */
28
29static void teken_subr_cursor_up(teken_t *, unsigned int);
30static void teken_subr_erase_line(teken_t *, unsigned int);
31static void teken_subr_regular_character(teken_t *, teken_char_t);
32static void teken_subr_reset_to_initial_state(teken_t *);
33static void teken_subr_save_cursor(teken_t *);
34

--- 162 unchanged lines hidden (view full) ---

197 tr.tr_end = t->t_winsize;
198 teken_funcs_fill(t, &tr, 'E', &t->t_defattr);
199}
200
201static void
202teken_subr_backspace(teken_t *t)
203{
204
27 */
28
29static void teken_subr_cursor_up(teken_t *, unsigned int);
30static void teken_subr_erase_line(teken_t *, unsigned int);
31static void teken_subr_regular_character(teken_t *, teken_char_t);
32static void teken_subr_reset_to_initial_state(teken_t *);
33static void teken_subr_save_cursor(teken_t *);
34

--- 162 unchanged lines hidden (view full) ---

197 tr.tr_end = t->t_winsize;
198 teken_funcs_fill(t, &tr, 'E', &t->t_defattr);
199}
200
201static void
202teken_subr_backspace(teken_t *t)
203{
204
205#ifdef TEKEN_XTERM
206 if (t->t_cursor.tp_col == 0)
207 return;
208
209 t->t_cursor.tp_col--;
210 t->t_stateflags &= ~TS_WRAPPED;
211#else /* !TEKEN_XTERM */
212 if (t->t_cursor.tp_col == 0) {
213 if (t->t_cursor.tp_row == t->t_originreg.ts_begin)
214 return;
215 t->t_cursor.tp_row--;
216 t->t_cursor.tp_col = t->t_winsize.tp_col - 1;
205 if (t->t_stateflags & TS_CONS25) {
206 if (t->t_cursor.tp_col == 0) {
207 if (t->t_cursor.tp_row == t->t_originreg.ts_begin)
208 return;
209 t->t_cursor.tp_row--;
210 t->t_cursor.tp_col = t->t_winsize.tp_col - 1;
211 } else {
212 t->t_cursor.tp_col--;
213 }
217 } else {
214 } else {
215 if (t->t_cursor.tp_col == 0)
216 return;
217
218 t->t_cursor.tp_col--;
218 t->t_cursor.tp_col--;
219 t->t_stateflags &= ~TS_WRAPPED;
219 }
220 }
220#endif /* TEKEN_XTERM */
221
222 teken_funcs_cursor(t);
223}
224
225static void
226teken_subr_bell(teken_t *t)
227{
228

--- 354 unchanged lines hidden (view full) ---

583
584 t->t_stateflags &= ~TS_WRAPPED;
585 teken_funcs_cursor(t);
586}
587
588static void
589teken_subr_horizontal_tab(teken_t *t)
590{
221
222 teken_funcs_cursor(t);
223}
224
225static void
226teken_subr_bell(teken_t *t)
227{
228

--- 354 unchanged lines hidden (view full) ---

583
584 t->t_stateflags &= ~TS_WRAPPED;
585 teken_funcs_cursor(t);
586}
587
588static void
589teken_subr_horizontal_tab(teken_t *t)
590{
591#ifdef TEKEN_XTERM
592 teken_rect_t tr;
593
591
594 tr.tr_begin = t->t_cursor;
595 teken_subr_cursor_forward_tabulation(t, 1);
596 tr.tr_end.tp_row = tr.tr_begin.tp_row + 1;
597 tr.tr_end.tp_col = t->t_cursor.tp_col;
592 if (t->t_stateflags & TS_CONS25) {
593 teken_subr_cursor_forward_tabulation(t, 1);
594 } else {
595 teken_rect_t tr;
598
596
599 /* Blank region that we skipped. */
600 if (tr.tr_end.tp_col > tr.tr_begin.tp_col)
601 teken_funcs_fill(t, &tr, BLANK, &t->t_curattr);
602#else /* !TEKEN_XTERM */
597 tr.tr_begin = t->t_cursor;
598 teken_subr_cursor_forward_tabulation(t, 1);
599 tr.tr_end.tp_row = tr.tr_begin.tp_row + 1;
600 tr.tr_end.tp_col = t->t_cursor.tp_col;
603
601
604 teken_subr_cursor_forward_tabulation(t, 1);
605#endif /* TEKEN_XTERM */
602 /* Blank region that we skipped. */
603 if (tr.tr_end.tp_col > tr.tr_begin.tp_col)
604 teken_funcs_fill(t, &tr, BLANK, &t->t_curattr);
605 }
606}
607
608static void
609teken_subr_horizontal_tab_set(teken_t *t)
610{
611
612 teken_tab_set(t, t->t_cursor.tp_col);
613}

--- 91 unchanged lines hidden (view full) ---

705
706 t->t_stateflags &= ~TS_WRAPPED;
707 teken_funcs_cursor(t);
708}
709
710static void
711teken_subr_newpage(teken_t *t)
712{
606}
607
608static void
609teken_subr_horizontal_tab_set(teken_t *t)
610{
611
612 teken_tab_set(t, t->t_cursor.tp_col);
613}

--- 91 unchanged lines hidden (view full) ---

705
706 t->t_stateflags &= ~TS_WRAPPED;
707 teken_funcs_cursor(t);
708}
709
710static void
711teken_subr_newpage(teken_t *t)
712{
713#ifdef TEKEN_XTERM
714
713
715 teken_subr_newline(t);
716#else /* !TEKEN_XTERM */
717 teken_rect_t tr;
714 if (t->t_stateflags & TS_CONS25) {
715 teken_rect_t tr;
718
716
719 tr.tr_begin.tp_row = tr.tr_begin.tp_col = 0;
720 tr.tr_end = t->t_winsize;
721 teken_funcs_fill(t, &tr, BLANK, &t->t_curattr);
717 tr.tr_begin.tp_row = tr.tr_begin.tp_col = 0;
718 tr.tr_end = t->t_winsize;
719 teken_funcs_fill(t, &tr, BLANK, &t->t_curattr);
722
720
723 t->t_cursor.tp_row = t->t_cursor.tp_col = 0;
724 teken_funcs_cursor(t);
725#endif /* TEKEN_XTERM */
721 t->t_cursor.tp_row = t->t_cursor.tp_col = 0;
722 teken_funcs_cursor(t);
723 } else {
724 teken_subr_newline(t);
725 }
726}
727
728static void
729teken_subr_next_line(teken_t *t)
730{
731
732 t->t_cursor.tp_col = 0;
733 teken_subr_newline(t);

--- 40 unchanged lines hidden (view full) ---

774 ctr.tr_begin = *tp;
775 ctr.tr_end.tp_row = tp->tp_row + 1;
776 ctr.tr_end.tp_col = t->t_winsize.tp_col - width;
777 ctp.tp_row = tp->tp_row;
778 ctp.tp_col = tp->tp_col + width;
779 teken_funcs_copy(t, &ctr, &ctp);
780 }
781
726}
727
728static void
729teken_subr_next_line(teken_t *t)
730{
731
732 t->t_cursor.tp_col = 0;
733 teken_subr_newline(t);

--- 40 unchanged lines hidden (view full) ---

774 ctr.tr_begin = *tp;
775 ctr.tr_end.tp_row = tp->tp_row + 1;
776 ctr.tr_end.tp_col = t->t_winsize.tp_col - width;
777 ctp.tp_row = tp->tp_row;
778 ctp.tp_col = tp->tp_col + width;
779 teken_funcs_copy(t, &ctr, &ctp);
780 }
781
782 if (width == 2 && tp->tp_col + 1 < t->t_winsize.tp_col) {
783 teken_pos_t tp2;
784
785 /*
786 * Store a space behind double width characters before
787 * actually printing them. This prevents artifacts when
788 * the consumer doesn't render it using double width
789 * glyphs.
790 */
791 tp2.tp_row = tp->tp_row;
792 tp2.tp_col = tp->tp_col + 1;
793 teken_funcs_putchar(t, &tp2, BLANK, &t->t_curattr);
794 }
795
782 teken_funcs_putchar(t, tp, c, &t->t_curattr);
783}
784
785static void
786teken_subr_regular_character(teken_t *t, teken_char_t c)
787{
788 int width;
789
796 teken_funcs_putchar(t, tp, c, &t->t_curattr);
797}
798
799static void
800teken_subr_regular_character(teken_t *t, teken_char_t c)
801{
802 int width;
803
790 if (t->t_utf8_left == -1) {
791#ifdef TEKEN_XTERM
792 if (c <= 0x1B)
804 if (t->t_stateflags & TS_8BIT) {
805 if (!(t->t_stateflags & TS_CONS25) && c <= 0x1B)
793 return;
806 return;
794#endif /* TEKEN_XTERM */
795 width = 1;
796 } else {
797 c = teken_scs_process(t, c);
798 width = teken_wcwidth(c);
799 /* XXX: Don't process zero-width characters yet. */
800 if (width <= 0)
801 return;
802 }
803
807 width = 1;
808 } else {
809 c = teken_scs_process(t, c);
810 width = teken_wcwidth(c);
811 /* XXX: Don't process zero-width characters yet. */
812 if (width <= 0)
813 return;
814 }
815
804#ifdef TEKEN_XTERM
805 if (t->t_cursor.tp_col == t->t_winsize.tp_col - 1 &&
816 if (t->t_stateflags & TS_CONS25) {
817 teken_subr_do_putchar(t, &t->t_cursor, c, width);
818 t->t_cursor.tp_col += width;
819
820 if (t->t_cursor.tp_col >= t->t_winsize.tp_col) {
821 if (t->t_cursor.tp_row == t->t_scrollreg.ts_end - 1) {
822 /* Perform scrolling. */
823 teken_subr_do_scroll(t, 1);
824 } else {
825 /* No scrolling needed. */
826 if (t->t_cursor.tp_row <
827 t->t_winsize.tp_row - 1)
828 t->t_cursor.tp_row++;
829 }
830 t->t_cursor.tp_col = 0;
831 }
832 } else if (t->t_cursor.tp_col == t->t_winsize.tp_col - 1 &&
806 (t->t_stateflags & (TS_WRAPPED|TS_AUTOWRAP)) ==
807 (TS_WRAPPED|TS_AUTOWRAP)) {
808 teken_pos_t tp;
809
810 /* Perform line wrapping. */
811
812 if (t->t_cursor.tp_row == t->t_scrollreg.ts_end - 1) {
813 /* Perform scrolling. */

--- 27 unchanged lines hidden (view full) ---

841
842 if (t->t_cursor.tp_col >= t->t_winsize.tp_col) {
843 t->t_stateflags |= TS_WRAPPED;
844 t->t_cursor.tp_col = t->t_winsize.tp_col - 1;
845 } else {
846 t->t_stateflags &= ~TS_WRAPPED;
847 }
848 }
833 (t->t_stateflags & (TS_WRAPPED|TS_AUTOWRAP)) ==
834 (TS_WRAPPED|TS_AUTOWRAP)) {
835 teken_pos_t tp;
836
837 /* Perform line wrapping. */
838
839 if (t->t_cursor.tp_row == t->t_scrollreg.ts_end - 1) {
840 /* Perform scrolling. */

--- 27 unchanged lines hidden (view full) ---

868
869 if (t->t_cursor.tp_col >= t->t_winsize.tp_col) {
870 t->t_stateflags |= TS_WRAPPED;
871 t->t_cursor.tp_col = t->t_winsize.tp_col - 1;
872 } else {
873 t->t_stateflags &= ~TS_WRAPPED;
874 }
875 }
849#else /* !TEKEN_XTERM */
850 teken_subr_do_putchar(t, &t->t_cursor, c, width);
851 t->t_cursor.tp_col += width;
852
876
853 if (t->t_cursor.tp_col >= t->t_winsize.tp_col) {
854 if (t->t_cursor.tp_row == t->t_scrollreg.ts_end - 1) {
855 /* Perform scrolling. */
856 teken_subr_do_scroll(t, 1);
857 } else {
858 /* No scrolling needed. */
859 if (t->t_cursor.tp_row < t->t_winsize.tp_row - 1)
860 t->t_cursor.tp_row++;
861 }
862 t->t_cursor.tp_col = 0;
863 }
864#endif /* TEKEN_XTERM */
865
866 teken_funcs_cursor(t);
867}
868
869static void
870teken_subr_reset_dec_mode(teken_t *t, unsigned int cmd)
871{
872
873 switch (cmd) {

--- 58 unchanged lines hidden (view full) ---

932teken_subr_do_reset(teken_t *t)
933{
934
935 t->t_curattr = t->t_defattr;
936 t->t_cursor.tp_row = t->t_cursor.tp_col = 0;
937 t->t_scrollreg.ts_begin = 0;
938 t->t_scrollreg.ts_end = t->t_winsize.tp_row;
939 t->t_originreg = t->t_scrollreg;
877 teken_funcs_cursor(t);
878}
879
880static void
881teken_subr_reset_dec_mode(teken_t *t, unsigned int cmd)
882{
883
884 switch (cmd) {

--- 58 unchanged lines hidden (view full) ---

943teken_subr_do_reset(teken_t *t)
944{
945
946 t->t_curattr = t->t_defattr;
947 t->t_cursor.tp_row = t->t_cursor.tp_col = 0;
948 t->t_scrollreg.ts_begin = 0;
949 t->t_scrollreg.ts_end = t->t_winsize.tp_row;
950 t->t_originreg = t->t_scrollreg;
940 t->t_stateflags = TS_AUTOWRAP;
951 t->t_stateflags &= TS_8BIT|TS_CONS25;
952 t->t_stateflags |= TS_AUTOWRAP;
941
942 teken_scs_set(t, 0, teken_scs_us_ascii);
943 teken_scs_set(t, 1, teken_scs_us_ascii);
944 teken_scs_switch(t, 0);
945
946 teken_subr_save_cursor(t);
947 teken_tab_default(t);
948}

--- 271 unchanged lines hidden ---
953
954 teken_scs_set(t, 0, teken_scs_us_ascii);
955 teken_scs_set(t, 1, teken_scs_us_ascii);
956 teken_scs_switch(t, 0);
957
958 teken_subr_save_cursor(t);
959 teken_tab_default(t);
960}

--- 271 unchanged lines hidden ---