Annotation of sbbs/sbbs2/putmsg.c, revision 1.1.1.1

1.1       root        1: #line 1 "PUTMSG.C"
                      2: 
                      3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
                      4: 
                      5: #include "sbbs.h"
                      6: 
                      7: /****************************************************************************/
                      8: /* Outputs a NULL terminated string locally and remotely (if applicable)       */
                      9: /* checking for message aborts, pauses, ANSI escape and ^A sequences.          */
                     10: /* Changes local text attributes if necessary. Max length of str is 4 gig      */
                     11: /* Returns the last char of the buffer access.. 0 if not aborted.           */
                     12: /* If P_SAVEATR bit is set in mode, the attributes set by the message       */
                     13: /* will be the current attributes after the message is displayed, otherwise */
                     14: /* the attributes prior to diplaying the message are always restored.       */
                     15: /* Ignores Ctrl-Z's                                                         */
                     16: /****************************************************************************/
                     17: char putmsg(char HUGE16 *str, int mode)
                     18: {
                     19:        uchar   tmpatr,tmp2[256],tmp3[128],*p,exatr=0;
                     20:        int     orgcon=console,i;
                     21:        ulong   l=0,sys_status_sav=sys_status;
                     22: 
                     23: tmpatr=curatr; /* was lclatr(-1) */
                     24: if(!(mode&P_SAVEATR))
                     25:        attr(LIGHTGRAY);
                     26: while(str[l] && (mode&P_NOABORT || !msgabort()) && online) {
                     27:        if(str[l]==1) {         /* Ctrl-Ax sequence */
                     28:                if(str[l+1]=='"' && !(sys_status&SS_NEST_PF)) {  /* Quote a file */
                     29:                        l+=2;
                     30:                        i=0;
                     31:                        while(i<12 && isprint(str[l]) && str[l]!='\\' && str[l]!='/')
                     32:                                tmp2[i++]=str[l++];
                     33:                        tmp2[i]=0;
                     34:                        sys_status|=SS_NEST_PF;         /* keep it only one message deep! */
                     35:                        sprintf(tmp3,"%s%s",text_dir,tmp2);
                     36:                        printfile(tmp3,0);
                     37:                        sys_status&=~SS_NEST_PF; }
                     38:                else if(toupper(str[l+1])=='Z')             /* Ctrl-AZ==EOF */
                     39:                        break;
                     40:                else {
                     41:                        ctrl_a(str[l+1]);
                     42:                        l+=2; } }
                     43:        else if((str[l]=='`' || str[l]=='�') && str[l+1]=='[') {   
                     44:                outchar(ESC); /* Convert `[ and �[ to ESC[ */
                     45:                l++; }
                     46:        else if(sys_misc&SM_PCBOARD && str[l]=='@' && str[l+1]=='X'
                     47:                && isxdigit(str[l+2]) && isxdigit(str[l+3])) {
                     48:                sprintf(tmp2,"%.2s",str+l+2);
                     49:                attr(ahtoul(tmp2));
                     50:                exatr=1;
                     51:                l+=4; }
                     52:        else if(sys_misc&SM_WILDCAT && str[l]=='@' && str[l+3]=='@'
                     53:                && isxdigit(str[l+1]) && isxdigit(str[l+2])) {
                     54:                sprintf(tmp2,"%.2s",str+l+1);
                     55:                attr(ahtoul(tmp2));
                     56:                // exatr=1;
                     57:                l+=4; }
                     58:        else if(sys_misc&SM_RENEGADE && str[l]=='|' && isdigit(str[l+1])
                     59:                && !(useron.misc&(RIP|WIP))) {
                     60:                sprintf(tmp2,"%.2s",str+l+1);
                     61:                i=atoi(tmp2);
                     62:                if(i>=16) {                              /* setting background */
                     63:                        i-=16;
                     64:                        i<<=4;
                     65:                        i|=(curatr&0x0f); }     /* leave foreground alone */
                     66:                else
                     67:                        i|=(curatr&0xf0);               /* leave background alone */
                     68:                attr(i);
                     69:                exatr=1;
                     70:                l+=2;   /* Skip |x */
                     71:                if(isdigit(str[l]))
                     72:                        l++; }  /* Skip second digit if it exists */
                     73:        else if(sys_misc&SM_CELERITY && str[l]=='|' && isalpha(str[l+1])
                     74:                && !(useron.misc&(RIP|WIP))) {
                     75:                switch(str[l+1]) {
                     76:                        case 'k':
                     77:                                attr((curatr&0xf0)|BLACK);
                     78:                                break;
                     79:                        case 'b':
                     80:                                attr((curatr&0xf0)|BLUE);
                     81:                                break;
                     82:                        case 'g':
                     83:                                attr((curatr&0xf0)|GREEN);
                     84:                                break;
                     85:                        case 'c':
                     86:                                attr((curatr&0xf0)|CYAN);
                     87:                                break;
                     88:                        case 'r':
                     89:                                attr((curatr&0xf0)|RED);
                     90:                                break;
                     91:                        case 'm':
                     92:                                attr((curatr&0xf0)|MAGENTA);
                     93:                                break;
                     94:                        case 'y':
                     95:                                attr((curatr&0xf0)|YELLOW);
                     96:                                break;
                     97:                        case 'w':
                     98:                                attr((curatr&0xf0)|LIGHTGRAY);
                     99:                                break;
                    100:                        case 'd':
                    101:                                attr((curatr&0xf0)|BLACK|HIGH);
                    102:                                break;
                    103:                        case 'B':
                    104:                                attr((curatr&0xf0)|BLUE|HIGH);
                    105:                                break;
                    106:                        case 'G':
                    107:                                attr((curatr&0xf0)|GREEN|HIGH);
                    108:                                break;
                    109:                        case 'C':
                    110:                                attr((curatr&0xf0)|CYAN|HIGH);
                    111:                                break;
                    112:                        case 'R':
                    113:                                attr((curatr&0xf0)|RED|HIGH);
                    114:                                break;
                    115:                        case 'M':
                    116:                                attr((curatr&0xf0)|MAGENTA|HIGH);
                    117:                                break;
                    118:                        case 'Y':   /* Yellow */
                    119:                                attr((curatr&0xf0)|YELLOW|HIGH);
                    120:                                break;
                    121:                        case 'W':
                    122:                                attr((curatr&0xf0)|LIGHTGRAY|HIGH);
                    123:                                break;
                    124:                        case 'S':   /* swap foreground and background */
                    125:                                attr((curatr&0x07)<<4);
                    126:                                break; }
                    127:                exatr=1;
                    128:                l+=2;   /* Skip |x */
                    129:                }  /* Skip second digit if it exists */
                    130:        else if(sys_misc&SM_WWIV && str[l]==3 && isdigit(str[l+1])) {
                    131:                exatr=1;
                    132:                switch(str[l+1]) {
                    133:                        default:
                    134:                                attr(LIGHTGRAY);
                    135:                                break;
                    136:                        case '1':
                    137:                                attr(CYAN|HIGH);
                    138:                                break;
                    139:                        case '2':
                    140:                                attr(BROWN|HIGH);
                    141:                                break;
                    142:                        case '3':
                    143:                                attr(MAGENTA);
                    144:                                break;
                    145:                        case '4':
                    146:                                attr(LIGHTGRAY|HIGH|(BLUE<<4));
                    147:                                break;
                    148:                        case '5':
                    149:                                attr(GREEN);
                    150:                                break;
                    151:                        case '6':
                    152:                                attr(RED|HIGH|BLINK);
                    153:                                break;
                    154:                        case '7':
                    155:                                attr(BLUE|HIGH);
                    156:                                break;
                    157:                        case '8':
                    158:                                attr(BLUE);
                    159:                                break;
                    160:                        case '9':
                    161:                                attr(CYAN);
                    162:                                break; }
                    163:                l+=2; }
                    164:        else {
                    165:                if(exatr && str[l]==LF)         /* clear at newline for extra attr codes */
                    166:                        attr(LIGHTGRAY);
                    167:                if(lclaes()) {
                    168:                        if(str[l]=='A' || str[l]=='B' || str[l]=='H' || str[l]=='J'
                    169:                                || str[l]=='f' || str[l]=='u')    /* ANSI anim */
                    170:                                lncntr=0;                       /* so defeat pause */
                    171:                        if(str[l]=='"') {
                    172:                                l++;                            /* don't pass on keyboard reassignment */
                    173:                                continue; } }
                    174:                if(str[l]=='!' && str[l+1]=='|' && useron.misc&(RIP|WIP)) /* RIP */
                    175:                        lncntr=0;                               /* so defeat pause */
                    176:                if(str[l]==ESC && str[l+1]=='$')    /* WIP command */
                    177:                        lncntr=0;
                    178:                if(str[l]=='@' && !(mode&P_NOATCODES)) {
                    179:                        i=atcodes((char *)str+l);       /* returns 0 if not valid @ code */
                    180:                        l+=i;                                   /* i is length of code string */
                    181:                        if(i)                                   /* if valid string, go to top */
                    182:                                continue; }
                    183:                if(str[l]!=26)
                    184:                        outchar(str[l]);
                    185:                l++; } }
                    186: //curatr=lclatr(-1);           01/29/96
                    187: if(!(mode&P_SAVEATR)) {
                    188:        console=orgcon;
                    189:        attr(tmpatr); }
                    190: 
                    191: /* Restore original settings of Forced Pause On/Off */
                    192: sys_status&=~(SS_PAUSEOFF|SS_PAUSEON);
                    193: sys_status|=(sys_status_sav&(SS_PAUSEOFF|SS_PAUSEON));
                    194: return(str[l]);
                    195: }

unix.superglobalmegacorp.com

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