Annotation of coherent/b/kernel/FWB2/savebuf.c, revision 1.1

1.1     ! root        1: /*-----------------------------------------------------------------------------
        !             2:        Talking BIOS device driver for the AT&T PC6300.
        !             3:        Copyright (C) Karl Dahlke 1987
        !             4:        This software may be freely used and distributed
        !             5:        for any non-profit purpose.
        !             6:  *-----------------------------------------------------------------------------
        !             7:  */
        !             8: 
        !             9: /* savebuf.c: save the accumulated text in a session file */
        !            10: 
        !            11: #include <stdio.h>
        !            12: #ifdef MSDOS
        !            13: #include <dos.h>
        !            14: #else
        !            15: #include <sgtty.h>
        !            16: #endif
        !            17: 
        !            18: #ifdef MSDOS
        !            19: struct
        !            20: {
        !            21:        char far *bufbot;
        !            22:        char far *buftop;
        !            23:        char far *buftail;
        !            24:        char far *bufhead;
        !            25: } devparams;
        !            26: 
        !            27: struct WORDREGS regs;
        !            28: 
        !            29: setenv(){} /* no environment */
        !            30: #endif
        !            31: 
        !            32: char *filename = "session.log";
        !            33: 
        !            34: 
        !            35: main(argc, argv)
        !            36: int argc;
        !            37: char **argv;
        !            38: {
        !            39:        FILE *f;
        !            40:        register char c;
        !            41: #ifdef MSDOS
        !            42: int fh;
        !            43: char far *cp;
        !            44: short i, j;
        !            45: #else
        !            46: int bsize;
        !            47: char *buf, *malloc();
        !            48: #endif
        !            49: 
        !            50:        if(argc > 1) filename = argv[1];
        !            51:        if(argc > 2)    {
        !            52:                fprintf(stderr, "usage: savebuf [file]\n");
        !            53:                exit(1);
        !            54:        }
        !            55: 
        !            56:        f = fopen(filename, "w");
        !            57:        if(!f)  {
        !            58:                fprintf(stderr, "savebuf: cannot create file %s\n", filename);
        !            59:                exit(1);
        !            60:        }
        !            61: 
        !            62: #ifdef MSDOS
        !            63:        /* get device driver parameters from ioctl call */
        !            64: fh = open("SPEAK$", 0);
        !            65:        regs.bx = fh;
        !            66:        regs.ax = 0x4402; /* read ioctl string */
        !            67:        regs.cx = 16; /* get 16 bytes */
        !            68:        regs.dx = (unsigned) &devparams;
        !            69:        intdos(&regs, &regs);
        !            70:        if(regs.cflag & 1 || regs.ax != 16)     {
        !            71:                fprintf(stderr, "savebuf: bad ioctl() call on device driver SPEAK$\n");
        !            72:                exit(1);
        !            73:        }
        !            74: 
        !            75: close(fh);
        !            76: 
        !            77: if(devparams.bufbot) {
        !            78: if(!devparams.buftop) { /* indicates screen mode */
        !            79:        cp = devparams.bufbot;
        !            80: for(i=0; i<25; ++i) {
        !            81: for(j=0; j<80; ++j) {
        !            82: putc(*cp, f);
        !            83: cp += 2;
        !            84: }
        !            85: putc('\n', f);
        !            86: }
        !            87: } else {
        !            88:        cp = devparams.buftail;
        !            89: while(cp != devparams.bufhead) {
        !            90: c = *cp;
        !            91:                if(c == '\r') c = '\n';
        !            92:                putc(c,f);
        !            93: if(++cp == devparams.buftop) cp = devparams.bufbot;
        !            94: } /* end loop writing file */
        !            95: } /* screen/line */
        !            96: } /* nonzero pointers */
        !            97: 
        !            98: #else
        !            99: 
        !           100: /* I assume stdin is opened to the speech device driver */
        !           101: if(ioctl(0, TIOCSDSIZE, &bsize) < 0) {
        !           102: fprintf(stderr, "ioctl failed, cannot get size of text buffer from speech device driver\n");
        !           103: exit(1);
        !           104: }
        !           105: 
        !           106: if(!(buf = malloc(bsize))) {
        !           107: fprintf(stderr, "cannot malloc %d bytes for text buffer\n", bsize);
        !           108: exit(1);
        !           109: }
        !           110: 
        !           111: /* now copy the text */
        !           112: if(ioctl(0, TIOCSDGETBUF, buf) < 0) {
        !           113: fprintf(stderr, "ioctl failed, cannot copy text buffer from speech device driver\n");
        !           114: exit(1);
        !           115: }
        !           116: 
        !           117: /* now write the file */
        !           118: while((c = *buf++) > 0) {
        !           119: if(c == '\r') c = '\n';
        !           120: putc(c,f);
        !           121: } /* end writing text buffer to file */
        !           122: #endif
        !           123: 
        !           124:        fclose(f);
        !           125:        exit(0);
        !           126: } /* main */
        !           127: 

unix.superglobalmegacorp.com

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