Annotation of cci/usr/src/usr.bin/bsc/cmd/3270/emputchar.c, revision 1.1

1.1     ! root        1: /*     D.L.Buck and Associates, Inc. - May, 1984
        !             2:  *
        !             3:  *     COPYRIGHT NOTICE:
        !             4:  *             Copyright c 1984 - An unpublished work by 
        !             5:  *             D.L.Buck and Associates, Inc.
        !             6:  *
        !             7:  *     PROPRIETARY RIGHTS NOTICE:
        !             8:  *             All rights reserved. This document and program contains
        !             9:  *             proprietary information of D.L.Buck and Associates,Inc.
        !            10:  *             of San Jose, California, U.S.A., embodying confidential
        !            11:  *             information,  ideas, and expressions,  no part of which
        !            12:  *             may be reproduced, or transmitted in any form or by any
        !            13:  *             means,  electronic,  mechanical,  or otherwise, without
        !            14:  *             the written permission of D.L.Buck and Associates, Inc.
        !            15:  *
        !            16:  *     NAME
        !            17:  *             emputchar
        !            18:  *     SYNOPSIS
        !            19:  *             emputchar(cc)
        !            20:  *     DESCRIPTION
        !            21:  *             Places the character represented by "cc" at the position
        !            22:  *             in the screen indicated by cursaddr, unless this isn't
        !            23:  *             allowed. If INSERT_MODE is set in "status", the field is
        !            24:  *             shifted. cursaddr and status may be affected.
        !            25:  */
        !            26: static char s_emputc[] = "@(#)emputchar.c      1.10 REL";
        !            27: 
        !            28: #include <em.h>
        !            29: #include <ctype.h>
        !            30: 
        !            31: emputchar(cc)
        !            32: register int cc;
        !            33: {
        !            34:        register char chr;      /* used to check what char is at cursaddr */
        !            35:        register int i;         /* convenient index */
        !            36:        int size;               /* used to check size of field before insert */
        !            37:        int ocursaddr;
        !            38:        int row;
        !            39:        int col;
        !            40: 
        !            41:        if (cc!=FM && cc!=DUP && (!isascii(cc) || !(isprint(cc) || cc==' ')))
        !            42:                return(NON_DISP);       /* 'cc' is not displayable */
        !            43: 
        !            44:        if (scrn_image[cursaddr] == (char)ATTRCODE)
        !            45:                return(ATTR_CHAR);      /* location at cursaddr contains an 
        !            46:                                           attribute character */
        !            47: 
        !            48:        if (prot_attr(fldattr[curfield]))
        !            49:                return(PROTECTED);      /* field is protected */
        !            50: 
        !            51:        if (num_attr(fldattr[curfield]) && (!isdigit(cc) && cc != '.' &&
        !            52:            cc != '-' && cc != DUP))
        !            53:                return(NUMERIC);        /* field is numeric */
        !            54: 
        !            55:        if (do_screen)
        !            56:                if (hl_attr(fldattr[curfield]))   /* turn on highlight */
        !            57:                        wstandout(vterm_scr);
        !            58:                else
        !            59:                        wstandend(vterm_scr);
        !            60: 
        !            61:        if ((status & INSERT_MODE))     {
        !            62:                i = 0;          /* count # nulls */
        !            63:                size = cursaddr - fldstart[curfield];
        !            64:                if (size < 0) size += MAXSCREENSIZE;
        !            65:                size = fldmax[curfield] - size;
        !            66:                if (totfields == 0)
        !            67:                        size = fldmax[0];
        !            68:                for (ocursaddr = cursaddr;
        !            69:                     size; --size) {
        !            70:                        if (scrn_image[ocursaddr] == '\0')
        !            71:                                ++i;
        !            72:                        if (++ocursaddr >= MAXSCREENSIZE)
        !            73:                                ocursaddr = 0;
        !            74:                }
        !            75:                if (i == 0)     /* no nulls were found */
        !            76:                        return(FLD_FULL);
        !            77:        
        !            78: /* insert a character : 
        !            79:    if character at cursaddr isn't null or blank, look for null or blank after 
        !            80:    cursaddr and shift field to accomodate new character. */
        !            81: 
        !            82:                ocursaddr = cursaddr;   /* save present position */
        !            83:                while((chr = scrn_image[cursaddr]) != '\0') {
        !            84:                        if (++cursaddr >= MAXSCREENSIZE)
        !            85:                                cursaddr = 0;
        !            86:                }
        !            87:        /* shift field */
        !            88:                if (cursaddr < ocursaddr) cursaddr += MAXSCREENSIZE;
        !            89:                for (; cursaddr >= ocursaddr; --cursaddr) {
        !            90:                        if (cursaddr < 0)
        !            91:                                cursaddr = MAXSCREENSIZE - 1;
        !            92:                      i=cursaddr>=MAXSCREENSIZE?cursaddr-MAXSCREENSIZE:cursaddr;
        !            93:                        chr = scrn_image[i?i-1:MAXSCREENSIZE-1];
        !            94:                        scrn_image[i] = chr;
        !            95:                        if (scrn_image[i] == '\0') chr = ' ';
        !            96:                        if (do_screen && i != MAXSCREENSIZE - 1)        {
        !            97:                                row = i / SCREENWIDTH;
        !            98:                                col = i % SCREENWIDTH;
        !            99:                                if (invis_attr(fldattr[curfield]))
        !           100:                                        mvwaddch(vterm_scr,row,col,' ');
        !           101:                                else if (chr == 0x1c)
        !           102:                                        mvwaddch(vterm_scr,row,col,'*'); /*DUP*/
        !           103:                                else if (chr == 0x1e)
        !           104:                                        mvwaddch(vterm_scr,row,col,';'); /*FM*/
        !           105:                                else
        !           106:                                        mvwaddch(vterm_scr,row,col,chr);
        !           107:                        }
        !           108:                }
        !           109:                cursaddr = ocursaddr;
        !           110:        }
        !           111:        if (cc == DUP) 
        !           112:                scrn_image[cursaddr] = 0x1c;
        !           113:        else if (cc == FM) 
        !           114:                scrn_image[cursaddr] = 0x1e;
        !           115:        else 
        !           116:                scrn_image[cursaddr] = cc;
        !           117: 
        !           118:        if (do_screen)  {
        !           119:                if (LINES > 24 || cursaddr != MAXSCREENSIZE - 1)        {
        !           120:                        if (invis_attr(fldattr[curfield]))
        !           121:                                mvwaddch(vterm_scr,ROW,COL,' ');
        !           122:                        else    {
        !           123:                                if (cc == DUP) cc = '*';
        !           124:                                if (cc == FM) cc = ';';
        !           125:                                mvwaddch(vterm_scr,ROW,COL,cc);
        !           126:                        }
        !           127:                }
        !           128:                if (hl_attr(fldattr[curfield])) /* turn off highlight */
        !           129:                        wstandend(vterm_scr);
        !           130:                wrefresh(vterm_scr);
        !           131:        }
        !           132: 
        !           133: /* set MDT bit */
        !           134:        fldattr[curfield] = fldattr[curfield] | ATTRMDT;
        !           135:        return(NORMAL); 
        !           136: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.