Annotation of 43BSDReno/usr.bin/ex/OTHER/vms/vms.c, revision 1.1

1.1     ! root        1: #include "ex.h"
        !             2: #include <ssdef.h>
        !             3: #include <iodef.h>
        !             4: #include <ttdef.h>
        !             5: #include <descrip.h>
        !             6: 
        !             7: /*
        !             8:  * These are hack routines that will only work with
        !             9:  * ex/vi on vms.  If you use it for anything else,
        !            10:  * that's your problem.
        !            11:  */
        !            12: 
        !            13: static $DESCRIPTOR(inpdev, "TT");      /* Terminal to use for input */
        !            14: static long termset[2] = { 0,0 };      /* No terminator */
        !            15: static short iosb[4];
        !            16: 
        !            17: static short   ichan = -1;             /* Gets channel for inpdev */
        !            18: static int     cbreak = 0;             /* Whether we are in cbreak mode */
        !            19: 
        !            20: /* ARGSUSED */
        !            21: gtty(chan, ttybuf)
        !            22: int            chan;
        !            23: struct sgttyb  *ttybuf;
        !            24: {
        !            25:        int     errcode;
        !            26:        long    term_char[2];
        !            27: 
        !            28:        if (ichan < 0)
        !            29:                set_ichan();
        !            30:        errcode = sys$qiow(1, ichan, IO$_SENSEMODE, iosb, NULL, 0,
        !            31:                term_char, 0, 0, 0, 0, 0);
        !            32:        if (errcode != SS$_NORMAL)
        !            33:                return -1;
        !            34:        switch (iosb[1]) {
        !            35:          case TT$C_BAUD_300:
        !            36:                ttybuf->sg_ispeed = ttybuf->sg_ospeed = B300;
        !            37:                break;
        !            38:          case TT$C_BAUD_1200:
        !            39:                ttybuf->sg_ispeed = ttybuf->sg_ospeed = B1200;
        !            40:                break;
        !            41:          case TT$C_BAUD_9600:
        !            42:                /*
        !            43:                 * Effectively the same as 2400
        !            44:                 */
        !            45:          case TT$C_BAUD_2400:
        !            46:                ttybuf->sg_ispeed = ttybuf->sg_ospeed = B2400;
        !            47:                break;
        !            48:          default:
        !            49:                lprintf("Defaulting to 2400 baud terminal\n");
        !            50:                flush();
        !            51:                ttybuf->sg_ispeed = ttybuf->sg_ospeed = B2400;
        !            52:                break;
        !            53:        }
        !            54:        ttybuf->sg_erase = 0177;
        !            55:        ttybuf->sg_kill = CTRL(U);
        !            56:        ttybuf->sg_flags = ECHO | CRMOD;
        !            57:        if (cbreak)
        !            58:                ttybuf->sg_flags |= CBREAK;
        !            59:        return 0;
        !            60: }
        !            61: 
        !            62: stty(chan, ttybuf)
        !            63: int            chan;
        !            64: struct sgttyb  *ttybuf;
        !            65: {
        !            66:        if (chan != 1)
        !            67:                return;
        !            68:        cbreak = (ttybuf->sg_flags & CBREAK);
        !            69:        return 0;
        !            70: }
        !            71: 
        !            72: set_ichan()
        !            73: {
        !            74:        if (sys$assign(&inpdev, &ichan, 0, 0) != SS$_NORMAL) {
        !            75:                syserror("TT");
        !            76:                ex_exit(1);
        !            77:        }
        !            78: }
        !            79: 
        !            80: vms_read(fd, buf, cnt)
        !            81: int    fd;
        !            82: char   *buf;
        !            83: int    cnt;
        !            84: {
        !            85:        int     errcode;
        !            86: 
        !            87:        if (fd != 0)
        !            88:                return read(fd, buf, cnt);
        !            89:        if (ichan < 0)
        !            90:                set_ichan();
        !            91:        errcode = sys$qiow(1, ichan,
        !            92:                IO$_READLBLK | IO$M_NOECHO | IO$M_NOFILTR,
        !            93:                NULL, NULL, 0, buf, 1, 0, &termset, NULL, 0);
        !            94:        if (errcode == SS$_NORMAL)
        !            95:                return 1;
        !            96:        else
        !            97:                return 0;
        !            98: }
        !            99: 
        !           100: vms_write(fd, buf, cnt)
        !           101: int    fd;
        !           102: char   *buf;
        !           103: int    cnt;
        !           104: {
        !           105:        int     errcode;
        !           106: 
        !           107:        if (fd != 1 || !cbreak)
        !           108:                return write(fd, buf, cnt);
        !           109:        if (ichan < 0)
        !           110:                set_ichan();
        !           111:        errcode = sys$qiow(1, ichan,
        !           112:                IO$_WRITELBLK | IO$M_NOFORMAT,
        !           113:                NULL, NULL, 0, buf, cnt, 0, 0, 0, 0);
        !           114:        if (errcode == SS$_NORMAL)
        !           115:                return cnt;
        !           116:        else
        !           117:                return 0;
        !           118: }
        !           119: 
        !           120: /*
        !           121:  * getlog - getenv() look-alike routine for VMS logical names
        !           122:  *
        !           123:  * Chris Carlson 1nov84
        !           124:  */
        !           125: char *
        !           126: getlog(log)
        !           127:        char *log;
        !           128: {
        !           129:        struct dsc$descriptor_s log_d = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
        !           130:        static char trans[128];
        !           131:        $DESCRIPTOR(trans_d, trans);
        !           132:        short int translen;
        !           133: 
        !           134:        log_d.dsc$a_pointer = log;
        !           135:        log_d.dsc$w_length = strlen(log);
        !           136:        if (lib$sys_trnlog(&log_d, &translen, &trans_d, 0, 0, 0)
        !           137:        == SS$_NORMAL) {
        !           138:                do {
        !           139:                        log_d.dsc$a_pointer = trans;
        !           140:                        log_d.dsc$w_length = translen;
        !           141:                } while (lib$sys_trnlog(&log_d, &translen, &trans_d, 0, 0, 0)
        !           142:                         == SS$_NORMAL);
        !           143:                trans[translen] = '\0';
        !           144:                return(trans);
        !           145:        }
        !           146:        return((char *)0);
        !           147: }
        !           148: 
        !           149: /*
        !           150:  * unlink:
        !           151:  *     Removes a file.  This is provided so there is a minimum
        !           152:  *     of carnage in standard ex sources
        !           153:  */
        !           154: unlink(fname)
        !           155: char   *fname;
        !           156: {
        !           157:        return delete(fname);
        !           158: }
        !           159: 
        !           160: vms_exit(n)
        !           161: int    n;
        !           162: {
        !           163: #undef _exit
        !           164:        if (n == 0)
        !           165:                _exit(SS$_NORMAL);
        !           166:        else
        !           167:                _exit(SS$_ABORT);
        !           168: }
        !           169: 
        !           170: bcopy(from, to, count)
        !           171: char   *from, *to;
        !           172: int    count;
        !           173: {
        !           174:        lib$movc3(&count, from, to);
        !           175: }

unix.superglobalmegacorp.com

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