Annotation of sbbs/src/sbbs3/syncview/syncview.c, revision 1.1.1.2

1.1       root        1: #include <stdio.h>
                      2: #include <string.h>
                      3: 
                      4: #include "dirwrap.h"
                      5: 
                      6: #include "ciolib.h"
                      7: #include "keys.h"
                      8: #include "cterm.h"
                      9: 
1.1.1.2 ! root       10: #define SCROLL_LINES   100000
1.1       root       11: #define BUF_SIZE               1024
                     12: 
1.1.1.2 ! root       13: struct cterminal *cterm;
1.1       root       14: 
                     15: void viewscroll(void)
                     16: {
                     17:        int     top;
                     18:        int key;
                     19:        int i;
                     20:        struct  text_info txtinfo;
                     21: 
                     22:     gettextinfo(&txtinfo);
1.1.1.2 ! root       23:        cterm->backpos+=cterm->height;
        !            24:        if(cterm->backpos>cterm->backlines) {
        !            25:                memmove(cterm->scrollback,cterm->scrollback+cterm->width*2*(cterm->backpos-cterm->backlines),cterm->width*2*(cterm->backlines-(cterm->backpos-cterm->backlines)));
        !            26:                cterm->backpos=cterm->backlines;
        !            27:        }
        !            28:        gettext(1,1,txtinfo.screenwidth,txtinfo.screenheight,cterm->scrollback+(cterm->backpos)*cterm->width*2);
        !            29:        top=cterm->backpos;
1.1       root       30:        for(i=0;!i;) {
                     31:                if(top<1)
                     32:                        top=1;
1.1.1.2 ! root       33:                if(top>cterm->backpos)
        !            34:                        top=cterm->backpos;
        !            35:                puttext(1,1,txtinfo.screenwidth,txtinfo.screenheight,cterm->scrollback+(txtinfo.screenwidth*2*top));
1.1       root       36:                key=getch();
                     37:                switch(key) {
                     38:                        case 0xff:
                     39:                        case 0:
                     40:                                switch(key|getch()<<8) {
                     41:                                        case CIO_KEY_UP:
                     42:                                                top--;
                     43:                                                break;
                     44:                                        case CIO_KEY_DOWN:
                     45:                                                top++;
                     46:                                                break;
                     47:                                        case CIO_KEY_PPAGE:
                     48:                                                top-=txtinfo.screenheight;
                     49:                                                break;
                     50:                                        case CIO_KEY_NPAGE:
                     51:                                                top+=txtinfo.screenheight;
                     52:                                                break;
                     53:                                }
                     54:                                break;
                     55:                        case 'j':
                     56:                        case 'J':
                     57:                                top--;
                     58:                                break;
                     59:                        case 'k':
                     60:                        case 'K':
                     61:                                top++;
                     62:                                break;
                     63:                        case 'h':
                     64:                        case 'H':
                     65:                                top-=txtinfo.screenheight;
                     66:                                break;
                     67:                        case 'l':
                     68:                        case 'L':
                     69:                                top+=txtinfo.screenheight;
                     70:                                break;
                     71:                        case '\033':
                     72:                                i=1;
                     73:                                break;
                     74:                }
                     75:        }
                     76:        return;
                     77: }
                     78: 
                     79: void lfexpand(char *buf, int *len)
                     80: {
                     81:        char    newbuf[BUF_SIZE*2];
                     82:        int             newlen=0;
                     83:        int             i;
                     84: 
                     85:        for(i=0; i<*len; i++) {
                     86:                if(buf[i]=='\n') {
                     87:                        newbuf[newlen++]='\r';
                     88:                }
                     89:                newbuf[newlen++]=buf[i];
                     90:        }
                     91:        *len=newlen;
                     92:        memcpy(buf, newbuf, newlen);
                     93: 
                     94:        return;
                     95: }
                     96: 
                     97: int main(int argc, char **argv)
                     98: {
                     99:        struct text_info        ti;
                    100:        FILE    *f;
                    101:        char    buf[BUF_SIZE*2];        /* Room for lfexpand */
                    102:        int             len;
1.1.1.2 ! root      103:        int             speed=0;
1.1       root      104:        char    *scrollbuf;
                    105:        char    *infile=NULL;
                    106:        char    title[MAX_PATH+1];
                    107:        int             expand=0;
1.1.1.2 ! root      108:        int             ansi=0;
1.1       root      109:        int             i;
                    110: 
                    111:        /* Parse command line */
                    112:        for(i=1; i<argc; i++) {
                    113:                if(argv[i][0]=='-') {
                    114:                        if(argv[i][1]=='l' && argv[i][2]==0)
                    115:                                expand=1;
1.1.1.2 ! root      116:                        else if(argv[i][1]=='a' && argv[i][2]==0)
        !           117:                                ansi=1;
1.1       root      118:                        else
                    119:                                goto usage;
                    120:                }
                    121:                else {
                    122:                        if(infile==NULL)
                    123:                                infile=argv[i];
                    124:                        else
                    125:                                goto usage;
                    126:                }
                    127:        }
                    128: 
1.1.1.2 ! root      129:        if(ansi) {
        !           130:                initciolib(CIOLIB_MODE_ANSI);
        !           131:                puts("START OF ANSI...");
        !           132:        }
        !           133: 
        !           134:        textmode(C80);
        !           135:        gettextinfo(&ti);
        !           136:        if((scrollbuf=malloc(SCROLL_LINES*ti.screenwidth*2))==NULL) {
        !           137:                cprintf("Cannot allocate memory\n\n\rPress any key to exit.");
        !           138:                getch();
        !           139:                return(-1);
        !           140:        }
        !           141: 
        !           142:        cterm=cterm_init(ti.screenheight, ti.screenwidth, 1, 1, SCROLL_LINES, scrollbuf, CTERM_EMULATION_ANSI_BBS);
        !           143:        if(!cterm) {
        !           144:                fputs("ERROR Initializing CTerm!\n", stderr);
        !           145:                return 1;
        !           146:        }
1.1       root      147:        if(infile) {
                    148:                if((f=fopen(infile,"r"))==NULL) {
                    149:                        cprintf("Cannot read %s\n\n\rPress any key to exit.",argv[1]);
                    150:                        getch();
                    151:                        return(-1);
                    152:                }
                    153:                sprintf(title,"SyncView: %s",getfname(argv[1]));
                    154:        }
                    155:        else {
                    156:                f=stdin;
                    157:                strcpy(title,"SyncView: [stdin]");
                    158:        }
                    159:        settitle(title);
                    160:        while((len=fread(buf, 1, BUF_SIZE, f))!=0) {
                    161:                if(expand)
                    162:                        lfexpand(buf, &len);
1.1.1.2 ! root      163:                cterm_write(cterm, buf, len, NULL, 0, &speed);
        !           164:        }
        !           165:        if(ansi) {
        !           166:                puts("");
        !           167:                puts("END OF ANSI");
        !           168:                gettext(1,1,ti.screenwidth,ti.screenheight,scrollbuf);
        !           169:                puttext_can_move=1;
        !           170:                puts("START OF SCREEN DUMP...");
        !           171:                clrscr();
        !           172:                puttext(1,1,ti.screenwidth,ti.screenheight,scrollbuf);
1.1       root      173:        }
1.1.1.2 ! root      174:        else
        !           175:                viewscroll();
1.1       root      176:        return(0);
                    177: 
                    178: usage:
1.1.1.2 ! root      179:        cprintf("Usage: %s [-l] [-a] [filename]\r\n\r\n"
1.1       root      180:                        "Displays the ANSI file filename expanding \\n to \\r\\n if -l is specified.\r\n"
                    181:                        "If no filename is specified, reads input from stdin\r\n"
1.1.1.2 ! root      182:                        "If -a is specified, outputs ANSI to stdout\r\n"
1.1       root      183:                        "\r\n"
                    184:                        "Press any key to exit.");
                    185:        getch();
                    186:        return(-1);
                    187: }

unix.superglobalmegacorp.com

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