Annotation of coherent/g/usr/bin/me/atari.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * The routines in this file provide support for the ATARI ST video and
        !             3:  * keyboard subsystem, though much of the ST specific keyboard support is
        !             4:  * in "termio.c".  It compiles into nothing if the GEM and NATIVE variants
        !             5:  * are not selected.  The ST video subsystem is very much like the VT52.
        !             6:  */
        !             7: #include       <stdio.h>
        !             8: #include       "ed.h"
        !             9: 
        !            10: #if    GEM && NATIVE
        !            11: #include       <osbind.h>
        !            12: #include       <linea.h>
        !            13: 
        !            14: #define        NROW    25                      /* Normal screen size.          */
        !            15: #define        MROW    40                      /* Long screen size.            */
        !            16: #define        LROW    50                      /* Very long screen size.       */
        !            17: 
        !            18: #define        NCOL    80                      /* Number of columns            */
        !            19: 
        !            20: #define        BIAS    0x20                    /* Origin 0 coordinate bias.    */
        !            21: #define        ESC     0x1B                    /* ESC character.               */
        !            22: #define        BEL     0x07                    /* ascii bell character         */
        !            23: 
        !            24: extern int     ttopen();               /* Forward references.          */
        !            25: extern int     ttgetc();
        !            26: extern int     ttputc();
        !            27: extern int     ttflush();
        !            28: extern int     ttclose();
        !            29: extern int     astmove();
        !            30: extern int     asteeol();
        !            31: extern int     asteeop();
        !            32: extern int     astbeep();
        !            33: extern int     astopen();
        !            34: extern int     astclose();
        !            35: extern int     astandout();
        !            36: 
        !            37: /*
        !            38:  * Dispatch table. All the
        !            39:  * hard fields just point into the
        !            40:  * terminal I/O code.
        !            41:  */
        !            42: TERM   term    = {
        !            43:        NROW-1,
        !            44:        NCOL,
        !            45:        astopen,
        !            46:        astclose,
        !            47:        ttgetc,
        !            48:        ttputc,
        !            49:        ttflush,
        !            50:        astmove,
        !            51:        asteeol,
        !            52:        asteeop,
        !            53:        astbeep,
        !            54:        astandout
        !            55: };
        !            56: 
        !            57: astmove(row, col)              /* set cursor position  */
        !            58: {
        !            59:        tputc(ESC);
        !            60:        tputc('Y');
        !            61:        tputc(row+BIAS);
        !            62:        tputc(col+BIAS);
        !            63: }
        !            64: 
        !            65: asteeol()                      /* Erase to end of line */
        !            66: {
        !            67:        tputc(ESC);
        !            68:        tputc('K');
        !            69: }
        !            70: 
        !            71: asteeop()                      /* Erase to end of page */
        !            72: {
        !            73:        tputc(ESC);
        !            74:        tputc('J');
        !            75: }
        !            76: 
        !            77: astseeop()                     /* Special end-of-page for 40 line mode. */
        !            78: {
        !            79:        register int i;
        !            80: 
        !            81:        i = V_CEL_MY;           /* Line-A is already initialized by open */
        !            82:        V_CEL_MY = LROW-1;      /* Save # lines, claim full length...    */
        !            83:        asteeop();              /* Clear to end of line                  */
        !            84:        V_CEL_MY = i;           /* Restore actual # of lines...          */
        !            85: }
        !            86: 
        !            87: astbeep()                      /* Sound the terminal bell      */
        !            88: {
        !            89:        tputc(BEL);
        !            90:        tflush();
        !            91: }
        !            92: 
        !            93: astandout(f)                   /* Set/clear standout mode...   */
        !            94: {
        !            95:        tputc(ESC);
        !            96:        tputc((f == 0) ? 'q' : 'p');    /* Set or clear reverse video   */
        !            97: }
        !            98: 
        !            99: astcursor(f)                   /* Show/hide text cursor        */
        !           100: {
        !           101:        tputc(ESC);
        !           102:        tputc((f == 0) ? 'f' : 'e');    /* Set or clear reverse video   */
        !           103: }
        !           104: 
        !           105: astopen()                      /* Open the "terminal"          */
        !           106: {
        !           107:        tputc(ESC);
        !           108:        tputc('f');
        !           109:        if (runswitch & CF_VLONG) {
        !           110:                if (setlines(1) == 0) {
        !           111:                        term.t_nrow = LROW-1;
        !           112:                } else
        !           113:                        runswitch &= ~(CF_VLONG|CF_LONGSCR);
        !           114:        } else if (runswitch & CF_LONGSCR) {
        !           115:                if (setlines(-1) == 0) {
        !           116:                        term.t_eeop = astseeop;
        !           117:                        term.t_nrow = MROW-1;
        !           118:                } else
        !           119:                        runswitch &= ~(CF_VLONG|CF_LONGSCR);
        !           120:        }
        !           121:        tputc(ESC);
        !           122:        tputc('e');
        !           123:        ttopen();
        !           124: }
        !           125: 
        !           126: astclose()                     /* Close the terminal   */
        !           127: {
        !           128:        if (runswitch & (CF_VLONG|CF_LONGSCR)) {
        !           129:                astcursor(0);
        !           130:                setlines(0);
        !           131:                astmove(NROW-2, 0);
        !           132:                astcursor(1);
        !           133:                tputc('\n');
        !           134:        }
        !           135:        ttclose();
        !           136: }
        !           137: 
        !           138: /*
        !           139:  * Set the screen to 25, 40 or 50 lines, base on FLAG.  Return 0 if
        !           140:  * successful (Monochrome), or 1 if not (Color).
        !           141:  *
        !           142:  * Flag value  # lines
        !           143:  *     -1        40
        !           144:  *      0        25
        !           145:  *      1        50
        !           146:  */
        !           147: 
        !           148: setlines(flag)
        !           149: {
        !           150:        register struct la_font *fnthdr;
        !           151: 
        !           152:        if (Getrez() != 2)      /* If not monochrome...         */
        !           153:                return 1;       /* Return non-zero              */
        !           154:        linea0();               /* Initialize Line-A            */
        !           155:        if (flag) {             /* If long screen request...    */
        !           156:                fnthdr = (la_init.li_a1)[1];    /* Get the font header  */
        !           157:                                                /*   for 8x8 font       */
        !           158:                if (flag > 0) {                 /* If 50 line request   */
        !           159:                        V_CEL_MY = 49;  /* 50 lines                     */
        !           160:                        V_CEL_WR = 640; /* offset (in bytes) to next row */
        !           161:                } else {                        /* Otherwise 40 lines   */
        !           162:                        V_CEL_MY = 39;  /* 40 lines                     */
        !           163:                        V_CEL_WR = 800; /* offset (in bytes) to next row */
        !           164:                }
        !           165:        } else {                /* Otherwise, short screen request */
        !           166:                fnthdr = (la_init.li_a1)[2];    /* Get the font header  */
        !           167:                                                /* for the 8*16 font    */
        !           168:                V_CEL_MY = 24;          /* 25 lines                     */
        !           169:                V_CEL_WR = 1280;        /* offset (in bytes) to next row */
        !           170:        }
        !           171:        V_CEL_HT = fnthdr->font_height;                 /* Set system font */
        !           172:        V_OFF_AD = (long)(fnthdr->font_char_off);
        !           173:        V_FNT_AD = (long)(fnthdr->font_data);
        !           174:        return 0;                       /* return success.      */
        !           175: }
        !           176: #endif

unix.superglobalmegacorp.com

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