Annotation of sbbs/src/sbbs3/unbaja.c, revision 1.1

1.1     ! root        1: /* $Id: unbaja.c,v 1.34 2006/09/09 02:16:31 rswindell Exp $ */
        !             2: 
        !             3: #include <stdio.h>
        !             4: #include <string.h>
        !             5: 
        !             6: #include <stdlib.h>
        !             7: 
        !             8: #include "dirwrap.h"
        !             9: 
        !            10: #include "crc32.h"
        !            11: 
        !            12: #include "cmdshell.h"
        !            13: #include "ars_defs.h"
        !            14: 
        !            15: int indent=0;
        !            16: int indenteol=0;
        !            17: 
        !            18: /* table of variables for use by bsearch() */
        !            19: 
        !            20: struct var_table_t {
        !            21:        unsigned long crc;
        !            22:        char *var;
        !            23: } var_table[] = {
        !            24:        { 0x00000000, "STR" }, { 0x01837ca9, "r2" }, { 0x023e4b48, "fattr" },
        !            25:        { 0x02408dc5, "_SYS_TIMEZONE" }, { 0x038a840b, "k1" },
        !            26:        { 0x0400f83f, "e2" }, { 0x04807a11, "_USERON.LOGONS" },
        !            27:        { 0x057e4cd4, "_TIMELEFT" }, { 0x07954570, "_USERON.XEDIT" },
        !            28:        { 0x08f65a2a, "_USERON.MODEM" }, { 0x094cc42c, "_USERON.ROWS" },
        !            29:        { 0x098bdfcb, "_USERON.TLAST" }, { 0x0bf3b87a, "w3" },
        !            30:        { 0x0c1a1011, "_USERON.FLAGS2" }, { 0x0c8dcf3b, "_USERON.FBACKS" },
        !            31:        { 0x0e42002a, "_EXPIRED_EXEMPT" }, { 0x0ea515b1, "_USERON.LASTON" },
        !            32:        { 0x10bfc6e9, "_EXPIRED_FLAGS2" }, { 0x11c83294, "_SYS_PSNUM" },
        !            33:        { 0x12e7d6d2, "_USERON.EXEMPT" }, { 0x12e8893b, "v3" },
        !            34:        { 0x15755030, "_COMSPEC" }, { 0x167ea426, "pos" },
        !            35:        { 0x16e2585f, "_CLIENT_SOCKET" }, { 0x176b0dad, "a3" },
        !            36:        { 0x18984de8, "s2" }, { 0x19982a4f, "log" }, { 0x1a91b54a, "j1" },
        !            37:        { 0x1c4455ee, "_DTE_RATE" }, { 0x1d1bc97e, "d2" },
        !            38:        { 0x1e5052a7, "_MAX_MINUTES" }, { 0x1ef214ef, "_USERON.FIRSTON" },
        !            39:        { 0x2039a29f, "_USERON.POSTS" }, { 0x205ace36, "_AUTOTERM" },
        !            40:        { 0x2060efc3, "s" }, { 0x20cb6325, "_NEW_REST" },
        !            41:        { 0x20deebb9, "t3" }, { 0x2105d2b9, "_SOCKET_ERROR" },
        !            42:        { 0x222d1c26, "ss" }, { 0x22f01d71, "_NEW_FLAGS3" },
        !            43:        { 0x23edbcbc, "nodes_wfc" }, { 0x255d6f2f, "c3" },
        !            44:        { 0x270d2bda, "w" }, { 0x274e4d59, "nm" }, { 0x27a9fc7c, "attempt" },
        !            45:        { 0x28a7d7c8, "h1" }, { 0x2aa89801, "_NODE_SWAP" },
        !            46:        { 0x2aae2f6a, "q2" }, { 0x2aaf9bd3, "_USERON.EXPIRE" },
        !            47:        { 0x2b3c257f, "_CUR_CPS" }, { 0x2c0c389a, "dir" },
        !            48:        { 0x2f2dabfc, "f2" }, { 0x30ffd1ff, "cmdline" },
        !            49:        { 0x31178ba2, "_NEW_CDT" }, { 0x3178f9d6, "_USERON.COMMENT" },
        !            50:        { 0x31bce689, "i1" }, { 0x328ed476, "_USERON.LEVEL" },
        !            51:        { 0x32ebcea0, "attr" }, { 0x330c7795, "k" }, { 0x33b51e2b, "p2" },
        !            52:        { 0x3461b38c, "o" }, { 0x357b23ee, "total" },
        !            53:        { 0x3587ad08, "cursor" }, { 0x36369abd, "g2" },
        !            54:        { 0x381d3c2a, "_SYS_STATUS" }, { 0x396b7167, "_NETMAIL_COST" },
        !            55:        { 0x39c5daf8, "u3" }, { 0x3a37c26b, "_NODE_EXT" },
        !            56:        { 0x3aba3bbe, "g" }, { 0x3c465e6e, "b3" }, { 0x3d39d372, "argc" },
        !            57:        { 0x3dc166bb, "path" }, { 0x3dd7ffa7, "c" },
        !            58:        { 0x41239e21, "_CONNECTION" }, { 0x4131aa2b, "g3" },
        !            59:        { 0x430178ec, "_UQ" }, { 0x4366831a, "n" }, { 0x440b4703, "j" },
        !            60:        { 0x44b22ebd, "p3" }, { 0x455cb929, "_FTP_MODE" },
        !            61:        { 0x4569c62e, "_EXPIRED_REST" }, { 0x46cd817e, "bytes" },
        !            62:        { 0x490873f1, "_USERON.ALIAS" }, { 0x4a16a4ea, "filepos" },
        !            63:        { 0x4a9f3955, "_USERON.EMAILS" }, { 0x4ad0cf31, "b" },
        !            64:        { 0x4b0aeb24, "_NEW_EXEMPT" }, { 0x4b416ef8, "b2" },
        !            65:        { 0x4b8a0705, "connect" }, { 0x4ccb12cc, "l1" },
        !            66:        { 0x4db200d2, "_LEECH_PCT" }, { 0x4dbd0b28, "f" },
        !            67:        { 0x4ec2ea6e, "u2" }, { 0x4ee1ff3a, "_USERON.LOCATION" },
        !            68:        { 0x4f02623a, "_NODE_MINBPS" }, { 0x500a1b4c, "v" },
        !            69:        { 0x5053a71b, "z1" }, { 0x50e43799, "argv" }, { 0x525a5fb9, "c2" },
        !            70:        { 0x52996eab, "_USERON.TTODAY" }, { 0x55d0238d, "m1" },
        !            71:        { 0x55f72de7, "_NEW_FLAGS2" }, { 0x5767df55, "r" },
        !            72:        { 0x57d9db2f, "t2" }, { 0x582a9b6a, "f3" }, { 0x5863165a, "fname" },
        !            73:        { 0x590175f1, "time" }, { 0x59bc5767, "z" },
        !            74:        { 0x5a22d4bd, "_NODEFILE" }, { 0x5aaccfc5, "_ERRNO" },
        !            75:        { 0x5b0d0c54, "_USERON.NS_TIME" }, { 0x5be35885, "guest" },
        !            76:        { 0x5c1c1500, "_TOS" }, { 0x5da91ffc, "q3" },
        !            77:        { 0x5de44e8b, "_USERON.NAME" }, { 0x5e049062, "_QUESTION" },
        !            78:        { 0x5e914a47, "nodes_inuse" }, { 0x5eeaff21, "_NETMAIL_MISC" },
        !            79:        { 0x606c3d3b, "a2" }, { 0x613b690e, "_ROWS" },
        !            80:        { 0x6178e75f, "handle" }, { 0x61be0d36, "_USERON.QWK" },
        !            81:        { 0x6265c599, "x1" }, { 0x6392dc62, "_SYS_AUTODEL" },
        !            82:        { 0x640f7f81, "addr" }, { 0x65efb9ad, "v2" },
        !            83:        { 0x665ac227, "_USERON.CHAT" }, { 0x67b8f67f, "_EXPIRED_FLAGS3" },
        !            84:        { 0x67e6410f, "o1" }, { 0x682d973f, "start" },
        !            85:        { 0x68b693b2, "name" }, { 0x698d59b4, "_SYS_NODES" },
        !            86:        { 0x69d4f019, "ftime" }, { 0x6a1cf9e8, "d3" },
        !            87:        { 0x6a9fd069, "LIMIT_REPSIZE" }, { 0x6c8e350a, "_NEW_LEVEL" },
        !            88:        { 0x6f9f7d7e, "s3" }, { 0x6fb1c46e, "_SYS_EXP_WARN" },
        !            89:        { 0x709c07da, "_NODE_MISC" }, { 0x7166336e, "hubid" },
        !            90:        { 0x717231d6, "MAX_REPSIZE" }, { 0x7307c8a9, "e3" },
        !            91:        { 0x7342a625, "_NEW_EXPIRE" }, { 0x7345219f, "_NEW_MIN" },
        !            92:        { 0x7504b078, "port" }, { 0x75dc4306, "_NEW_PROT" },
        !            93:        { 0x761cc978, "rep" }, { 0x76844c3f, "r3" },
        !            94:        { 0x78afeaf1, "_SYS_PWDAYS" }, { 0x79f47b28, "attempts" },
        !            95:        { 0x7ade6ef8, "local_file" }, { 0x7b1d2087, "_USERON.FLAGS3" },
        !            96:        { 0x7b7ef4d8, "y1" }, { 0x7c602a37, "_USERON.MISC" },
        !            97:        { 0x7c72376d, "_USERON.TIMEON" }, { 0x7cf488ec, "w2" },
        !            98:        { 0x7d0ed0d1, "_CONSOLE" }, { 0x7dd9aac0, "_USERON.LEECH" },
        !            99:        { 0x7e29c819, "_SYS_MISC" }, { 0x7efd704e, "n1" },
        !           100:        { 0x7fbf958e, "_LNCNTR" }, { 0x81911c52, "s1" },
        !           101:        { 0x82d9484e, "_INETMAIL_COST" }, { 0x82f6983b, "int" },
        !           102:        { 0x8398e4f0, "j2" }, { 0x83aa2a6a, "_LOGONTIME" },
        !           103:        { 0x83dea272, "pasv_mode" }, { 0x841298c4, "d1" },
        !           104:        { 0x86cbce1e, "qwk" }, { 0x89b69753, "_EXPIRED_FLAGS1" },
        !           105:        { 0x89c91dc8, "_USERON.PWMOD" }, { 0x89e82023, "o3" },
        !           106:        { 0x8b12ba9d, "_POSTS_READ" }, { 0x8bf8a29a, "status" },
        !           107:        { 0x8c6ba4b5, "x3" }, { 0x8e395209, "_LOGON_FBACKS" },
        !           108:        { 0x908ece53, "_USERON.NUMBER" }, { 0x90f31162, "n3" },
        !           109:        { 0x90fc82b4, "_CID" }, { 0x9154f82b, "logfile" },
        !           110:        { 0x92fb364f, "_USERON.CDT" }, { 0x94d59a7a, "_USERON.BIRTH" },
        !           111:        { 0x951341ab, "_USERON.FLAGS1" }, { 0x957095f4, "y3" },
        !           112:        { 0x965b713b, "end" }, { 0x979ef1de, "_USERON.HANDLE" },
        !           113:        { 0x97f99eef, "_ONLINE" }, { 0x988a2d13, "r1" },
        !           114:        { 0x9a13bf95, "_USERON.ETODAY" }, { 0x9a7d9cca, "_LEECH_SEC" },
        !           115:        { 0x9a83d5b1, "k2" }, { 0x9aab7a61, "len" }, { 0x9c0bdace, "date" },
        !           116:        { 0x9c5051c9, "_LOGON_POSTS" }, { 0x9d09a985, "e1" },
        !           117:        { 0x9e70e855, "_USERON.SEX" }, { 0x9e7638c7, "logonlst" },
        !           118:        { 0xa0023a2e, "_STARTUP_OPTIONS" }, { 0xa15faa1f, "mode" },
        !           119:        { 0xa1f0fcb7, "_NODE_SCRNBLANK" }, { 0xa278584f, "_NEW_MISC" },
        !           120:        { 0xa2c573e0, "l3" }, { 0xa3b36a04, "d" },
        !           121:        { 0xa4a51044, "bbs_name" }, { 0xa842c43b, "_USERON.ADDRESS" },
        !           122:        { 0xa8b5b733, "i2" }, { 0xaa05262f, "h" }, { 0xaabc4f91, "p1" },
        !           123:        { 0xabb91f93, "_USERON.DLB" }, { 0xabc4317e, "_USERON.PROT" },
        !           124:        { 0xac58736f, "_LOGON_ULS" }, { 0xac72c50b, "_USERON.TEXTRA" },
        !           125:        { 0xad1a21f0, "hash_mode" }, { 0xad68e236, "l" },
        !           126:        { 0xadae1681, "_NODE_IVT" }, { 0xae256560, "_CUR_RATE" },
        !           127:        { 0xae92d249, "_LAST_NS_TIME" }, { 0xaeb16536, "repsize" },
        !           128:        { 0xaf3fcb07, "g1" }, { 0xb17e7914, "_NODE_VALUSER" },
        !           129:        { 0xb1ae8672, "h2" }, { 0xb1bcba28, "_LOGON_DLS" },
        !           130:        { 0xb31b556d, "phone" }, { 0xb3a77ed0, "q1" },
        !           131:        { 0xb3f64be4, "_NEW_SHELL" }, { 0xb50cb889, "_NS_TIME" },
        !           132:        { 0xb624fa46, "f1" }, { 0xb65dd6d4, "_USERON.ULB" },
        !           133:        { 0xb7b2364b, "x" }, { 0xb9603173, "sock" }, { 0xb969be79, "p" },
        !           134:        { 0xba0adba4, "file" }, { 0xba483fc2, "tmp" },
        !           135:        { 0xbb063bfd, "user" }, { 0xbbde42a1, "m3" },
        !           136:        { 0xbc9488d2, "_NEW_FLAGS4" }, { 0xbd1cee5d, "_USERON.LTODAY" },
        !           137:        { 0xbda3fa42, "ascii_mode" }, { 0xbe047a60, "t" },
        !           138:        { 0xbe5dc637, "z3" }, { 0xbef3c427, "dest" },
        !           139:        { 0xbf31a280, "_ANSWERTIME" }, { 0xc0b506dd, "y" },
        !           140:        { 0xc1093f61, "_USERON.DLS" }, { 0xc1ea73f2, "bbs_name_length" },
        !           141:        { 0xc6a9b6e4, "h3" }, { 0xc6e8539d, "_LOGON_ULB" },
        !           142:        { 0xc70d2fc0, "waitforstr" }, { 0xc7e0e8ce, "_USERON.NETMAIL" },
        !           143:        { 0xc82ba467, "_LOGON_EMAILS" }, { 0xc8cd5fb7, "_USERON.COMP" },
        !           144:        { 0xc9034af6, "u" }, { 0xc9082cbd, "_USERON.PTODAY" },
        !           145:        { 0xc95af6a1, "z2" }, { 0xcb530e03, "c1" },
        !           146:        { 0xcc7aca99, "_USERON.NOTE" }, { 0xccd97237, "m2" },
        !           147:        { 0xccfe7c5d, "_NEW_FLAGS1" }, { 0xcdb7e4a9, "_USERON.PASS" },
        !           148:        { 0xce6e8eef, "q" }, { 0xced08a95, "t1" },
        !           149:        { 0xcf9ce02c, "_CDT_MIN_VALUE" }, { 0xd0a99c72, "_USERON.MIN" },
        !           150:        { 0xd2483f42, "b1" }, { 0xd28e9da9, "debug_mode" },
        !           151:        { 0xd3606303, "_USERON.TMPEXT" }, { 0xd3d99e8b, "a" },
        !           152:        { 0xd42ccd08, "buf" }, { 0xd4b45a92, "e" }, { 0xd5c24376, "l2" },
        !           153:        { 0xd7ae3022, "_USERON.FREECDT" }, { 0xd7cbbbd4, "u1" },
        !           154:        { 0xd8222145, "sm" }, { 0xd859385f, "_SYS_DELDAYS" },
        !           155:        { 0xd92803bb, "waitforbuf" }, { 0xda6fd2a0, "m" },
        !           156:        { 0xdb0c9ada, "_LOGON_DLB" }, { 0xdcedf626, "_USERON.ULS" },
        !           157:        { 0xdd0216b9, "i" }, { 0xdd982780, "_SYS_AUTONODE" },
        !           158:        { 0xdf391ca7, "_SYS_LASTNODE" }, { 0xdfb287a5, "i3" },
        !           159:        { 0xe277a562, "y2" }, { 0xe3920695, "result" },
        !           160:        { 0xe51c1956, "_LOGFILE" }, { 0xe558c608, "_INETMAIL_MISC" },
        !           161:        { 0xe579b524, "_USERON.FLAGS4" }, { 0xe5fdd956, "w1" },
        !           162:        { 0xe7a7fb07, "_NODE_NUM" }, { 0xe7f421f4, "n2" },
        !           163:        { 0xeb6c9c73, "_ERRORLEVEL" }, { 0xec2b8fb8, "_USERON.PHONE" },
        !           164:        { 0xed84e527, "k3" }, { 0xedc643f1, "_MAX_QWKMSGS" },
        !           165:        { 0xedf6aa98, "_USERON.SHELL" }, { 0xf000aa78, "_USERON.ZIPCODE" },
        !           166:        { 0xf16182e9, "files" }, { 0xf19cd046, "_WORDWRAP" },
        !           167:        { 0xf3f1da99, "password" }, { 0xf49fd466, "j3" },
        !           168:        { 0xf53db6c7, "_NODE_SCRNLEN" }, { 0xf6e36607, "src" },
        !           169:        { 0xf8e53990, "pass" }, { 0xf9656c81, "a1" },
        !           170:        { 0xf9dc63dc, "_EXPIRED_FLAGS4" }, { 0xfa387529, "filename" },
        !           171:        { 0xfad17b8e, "flen" }, { 0xfb394e27, "_EXPIRED_LEVEL" },
        !           172:        { 0xfb6c9423, "x2" }, { 0xfcb5b274, "_CDT_PER_DOLLAR" },
        !           173:        { 0xfce6e817, "v1" }, { 0xfcf3542e, "_MIN_DSPACE" },
        !           174:        { 0xfd4b63d7, "htmlfile" }, { 0xfed3115d, "_USERON.REST" },
        !           175:        { 0xfeef10b5, "o2" },
        !           176: };
        !           177: 
        !           178: #define members(x) (sizeof(x)/sizeof(x[0]))
        !           179: 
        !           180: const char *char_table="________________________________________________123456789!_______BCDEFGHIJKLMNOPQRSTUVWXYZ0____A________________________________________________________________________________________________________________________________________________________________";
        !           181: const char *first_char_table="_________________________________________________________________BCDEFGHIJKLMNOPQRSTUVWXYZ!____A________________________________________________________________________________________________________________________________________________________________";
        !           182: unsigned char *brute_buf=NULL;
        !           183: unsigned long *brute_crc_buf=NULL;
        !           184: size_t brute_len=0;
        !           185: char **bruted=NULL;
        !           186: size_t bruted_len=0;
        !           187: char **badbruted=NULL;
        !           188: size_t badbruted_len=0;
        !           189: 
        !           190: void add_bruted(unsigned long name, char good, char *val, int save)
        !           191: {
        !           192:        char **new_bruted;
        !           193:        char *p;
        !           194:        FILE    *cache;
        !           195: 
        !           196:        bruted_len++;
        !           197:        p=(char *)malloc(strlen(val)+6);
        !           198:        if(p==NULL)
        !           199:                return;
        !           200:        new_bruted=realloc(bruted, sizeof(char *)*bruted_len);
        !           201:        if(new_bruted==NULL) {
        !           202:                free(p);
        !           203:                return;
        !           204:        }
        !           205:        *(long *)p=name;
        !           206:        p[4]=good;
        !           207:        strcpy(p+5,val);
        !           208:        new_bruted[bruted_len-1]=p;
        !           209:        bruted=new_bruted;
        !           210:        if(*val && save) {
        !           211:                cache=fopen("unbaja.brute","a");
        !           212:                if(cache!=NULL) {
        !           213:                        fprintf(cache,"%08x,%hhd,%s\n",name,good,val);
        !           214:                        fclose(cache);
        !           215:                }
        !           216:        }
        !           217: }
        !           218: 
        !           219: int check_bruted(long name,char *val)
        !           220: {
        !           221:        int i;
        !           222: 
        !           223:        for(i=0; i<bruted_len; i++) {
        !           224:                if(*(long *)bruted[i]==name) {
        !           225:                        if(!strcmp(val,bruted[i]+5))
        !           226:                                return(*(bruted[i]+4));
        !           227:                }
        !           228:        }
        !           229:        return(2);
        !           230: }
        !           231: 
        !           232: char *find_bruted(long name)
        !           233: {
        !           234:        int i;
        !           235: 
        !           236:        for(i=0; i<bruted_len; i++) {
        !           237:                if(*(long *)bruted[i]==name && *(bruted[i]+4))
        !           238:                        return(bruted[i]+5);
        !           239:        }
        !           240:        return(NULL);
        !           241: }
        !           242: 
        !           243: char* bruteforce(unsigned long name)
        !           244: {
        !           245:        long    this_crc=0;
        !           246:        char    *ret;
        !           247:        int     counter=0;
        !           248:        unsigned char   *pos;
        !           249:        size_t  l=0;
        !           250:        size_t  i,j;
        !           251: 
        !           252:        if(!brute_len)
        !           253:                return(NULL);
        !           254:        if((ret=find_bruted(name))!=NULL) {
        !           255:                if(!(*ret))
        !           256:                        return(NULL);
        !           257:                return(ret);
        !           258:        }
        !           259:        memset(brute_buf,0,brute_len+1);
        !           260:        memset(brute_crc_buf,0,brute_len*sizeof(long));
        !           261:        printf("Brute forcing var_%08x\n",name);
        !           262:        this_crc=crc32(brute_buf,0);
        !           263:        for(;;) {
        !           264:                pos=brute_buf+l;
        !           265:                if(pos>brute_buf) {
        !           266:                        pos--;
        !           267:                        while(pos>brute_buf) {
        !           268:                                if(*pos!='9') { /* last char from more_chars */
        !           269:                                        *pos=char_table[*pos];
        !           270:                                        pos++;
        !           271:                                        i=(size_t)(pos-brute_buf);
        !           272:                                        memset(pos,'_',l-i);
        !           273:                                        /* Calculate all the following CRCs */
        !           274:                                        for(i--;brute_buf[i];i++)
        !           275:                                                brute_crc_buf[i]=ucrc32(brute_buf[i],brute_crc_buf[i-1]);
        !           276:                                        goto LOOP_END;
        !           277:                                }
        !           278:                                else
        !           279:                                        pos--;
        !           280:                        }
        !           281:                }
        !           282:                if(*pos=='Z' || *pos==0) {              /* last char from first_chars */
        !           283:                        /* This the max? */
        !           284:                        if(l==brute_len) {
        !           285:                                printf("\r%s Not found.\n",brute_buf);
        !           286:                                add_bruted(name,1,"",0);
        !           287:                                return(NULL);
        !           288:                        }
        !           289:                        /* Set string to '_' with one extra at end */
        !           290:                        memset(brute_buf,'_',++l);
        !           291:                        brute_crc_buf[0]=ucrc32(brute_buf[0],~0UL);
        !           292:                        for(i=1;brute_buf[i];i++)
        !           293:                                brute_crc_buf[i]=ucrc32(brute_buf[i],brute_crc_buf[i-1]);
        !           294:                        /* String is pre-filled with zeros so no need to terminate */
        !           295:                        goto LOOP_END;
        !           296:                }
        !           297:                *pos=first_char_table[*pos];
        !           298:                memset(brute_buf+1,'_',l-1);
        !           299:                brute_crc_buf[0]=ucrc32(brute_buf[0],~0UL);
        !           300:                for(i=1;brute_buf[i];i++)
        !           301:                        brute_crc_buf[i]=ucrc32(brute_buf[i],brute_crc_buf[i-1]);
        !           302: 
        !           303: LOOP_END:
        !           304:                this_crc=~(brute_crc_buf[l-1]);
        !           305:                if(this_crc==name) {
        !           306:                        switch(check_bruted(name,brute_buf)) {
        !           307:                                case 0:
        !           308:                                        break;
        !           309:                                case 2:
        !           310:                                        add_bruted(name,1,brute_buf,1);
        !           311:                                case 1:
        !           312:                                        goto BRUTE_DONE;
        !           313:                        }
        !           314:                        if(check_bruted(name,brute_buf))
        !           315:                                break;
        !           316:                }
        !           317:                if(!((++counter)%10000))
        !           318:                        printf("\r%s ",brute_buf);
        !           319:        }
        !           320: 
        !           321: BRUTE_DONE:
        !           322:        printf("\r%s Found!\n",brute_buf);
        !           323:        return(brute_buf);
        !           324: }
        !           325: 
        !           326: /* comparison function for var_table */
        !           327: static int vt_compare(const void *key, const void *table) {
        !           328:        if (*(unsigned long *)key == (*(struct var_table_t *)table).crc) return 0;
        !           329:        if (*(unsigned long *)key < (*(struct var_table_t *)table).crc) return -1;
        !           330:        return 1;
        !           331: }
        !           332: 
        !           333: char *getvar(long name)
        !           334: {
        !           335:        static char varname[20];
        !           336:        struct var_table_t *found;
        !           337:        char *brute;
        !           338: 
        !           339:        found = (struct var_table_t *)bsearch( &name, var_table, members( var_table ),
        !           340:                sizeof( struct var_table_t ), vt_compare );
        !           341: 
        !           342:        if (found) {
        !           343:                strcpy( varname, (*found).var );
        !           344:        } else {
        !           345:                brute=bruteforce(name);
        !           346:                if(brute)
        !           347:                        strcpy(varname,brute);
        !           348:                else
        !           349:                        sprintf(varname,"var_%08x",name);
        !           350:        }
        !           351: 
        !           352:        return(varname);
        !           353: }
        !           354: 
        !           355: void write_var(FILE *bin, char *src)
        !           356: {
        !           357:        long lng;
        !           358: 
        !           359:        fread(&lng, 1, 4, bin);
        !           360:        sprintf(strchr(src,0),"%s ",getvar(lng));
        !           361: }
        !           362: 
        !           363: void write_cstr(FILE *bin, char *src)
        !           364: {
        !           365:        uchar ch;
        !           366:        char* p;
        !           367: 
        !           368:        strcat(src,"\"");
        !           369:        while(fread(&ch,1,1,bin)==1) {
        !           370:                if(ch==0)
        !           371:                        break;
        !           372:                if((p=c_escape_char(ch))!=NULL)
        !           373:                        sprintf(strchr(src,0),"%s",p);
        !           374:                else if(ch<' ' || ch > 126)
        !           375:                        sprintf(strchr(src,0), "\\%03d", ch);
        !           376:                else
        !           377:                        sprintf(strchr(src,0), "%c", ch);
        !           378:        }
        !           379:        strcat(src,"\" ");
        !           380: }
        !           381: 
        !           382: void write_lng(FILE *bin, char *src)
        !           383: {
        !           384:        long lng;
        !           385: 
        !           386:        fread(&lng,4,1,bin);
        !           387:        sprintf(strchr(src,0),"%ld ",lng);
        !           388: }
        !           389: 
        !           390: void write_short(FILE *bin, char *src)
        !           391: {
        !           392:        short sht;
        !           393: 
        !           394:        fread(&sht,2,1,bin);
        !           395:        sprintf(strchr(src,0),"%d ",sht);
        !           396: }
        !           397: 
        !           398: void write_ushort(FILE *bin, char *src)
        !           399: {
        !           400:        ushort sht;
        !           401: 
        !           402:        fread(&sht,2,1,bin);
        !           403:        sprintf(strchr(src,0),"%d ",sht);
        !           404: }
        !           405: 
        !           406: void write_ch(FILE *bin, char *src)
        !           407: {
        !           408:        char ch;
        !           409: 
        !           410:        fread(&ch,1,1,bin);
        !           411:        sprintf(strchr(src,0),"%c ",ch);
        !           412: }
        !           413: 
        !           414: void write_uchar(FILE *bin, char *src)
        !           415: {
        !           416:        uchar uch;
        !           417: 
        !           418:        fread(&uch,1,1,bin);
        !           419:        sprintf(strchr(src,0),"%u ",uch);
        !           420: }
        !           421: 
        !           422: void write_logic(FILE *bin, char *src)
        !           423: {
        !           424:        char ch;
        !           425:        fread(&ch,1,1,bin);
        !           426:        if(ch==LOGIC_TRUE)
        !           427:                strcat(src,"TRUE ");
        !           428:        else
        !           429:                strcat(src,"FALSE ");
        !           430: }
        !           431: 
        !           432: int write_key(FILE *bin, char *src, int keyset)
        !           433: {
        !           434:        uchar uch;
        !           435:        fread(&uch,1,1,bin);
        !           436:        if(uch==0 && keyset)
        !           437:                return(uch);
        !           438:        if(uch==CS_DIGIT)
        !           439:                strcat(src,"DIGIT");
        !           440:        else if(uch==CS_EDIGIT)
        !           441:                strcat(src,"EDIGIT");
        !           442:        else if(uch==CR)
        !           443:                strcat(src,"\\r");
        !           444:        else if(uch==LF)
        !           445:                strcat(src,"\\n");
        !           446:        else if(uch==TAB)
        !           447:                strcat(src,"\\t");
        !           448:        else if(uch==BS)
        !           449:                strcat(src,"\\b");
        !           450:        else if(uch==BEL)
        !           451:                strcat(src,"\\a");
        !           452:        else if(uch==FF)
        !           453:                strcat(src,"\\f");
        !           454:        else if(uch==11)
        !           455:                strcat(src,"\\v");
        !           456:        else if(uch & 0x80)
        !           457:                sprintf(strchr(src,0),"/%c",uch&0x7f);
        !           458:        else if(uch < ' ')
        !           459:                sprintf(strchr(src,0),"^%c",uch+0x40);
        !           460:        else if(uch=='\\')
        !           461:                strcat(src,"'\\'");
        !           462:        else if(uch=='^')
        !           463:                strcat(src,"'^'");
        !           464:        else if(uch=='/')
        !           465:                strcat(src,"'/'");
        !           466:        else if(uch=='\'')
        !           467:                strcat(src,"\\'");
        !           468:        else
        !           469:                sprintf(strchr(src,0),"%c",uch);
        !           470:        if(!keyset)
        !           471:                strcat(src," ");
        !           472:        return(uch);;
        !           473: }
        !           474: 
        !           475: void write_keys(FILE *bin, char *src)
        !           476: {
        !           477:        while(write_key(bin,src,TRUE));
        !           478:        strcat(src," ");
        !           479: }
        !           480: 
        !           481: void eol(char *src)
        !           482: {
        !           483:        char *p;
        !           484:        p=strchr(src,0);
        !           485:        p--;
        !           486:        *p='\n';
        !           487:        indent+=indenteol;
        !           488:        indenteol=0;
        !           489: }
        !           490: 
        !           491: #define WRITE_NAME(name)       if(indent<0) indent=0; \
        !           492:                                                        sprintf(strchr(src,0),"%.*s"name" ",indent,"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t") \
        !           493:                                                        /* printf("%s\n",name) */
        !           494: 
        !           495: 
        !           496: #define KEYS(name)             WRITE_NAME(name); \
        !           497:                                                write_keys(bin,src); \
        !           498:                                                eol(src);                        \
        !           499:                                                break
        !           500: 
        !           501: #define KEY(name)              WRITE_NAME(name); \
        !           502:                                                write_key(bin,src,FALSE); \
        !           503:                                                eol(src);                        \
        !           504:                                                break
        !           505: 
        !           506: #define LGC(name)              WRITE_NAME(name); \
        !           507:                                                write_logic(bin,src); \
        !           508:                                                eol(src);                        \
        !           509:                                                break
        !           510: 
        !           511: #define NONE(name)             WRITE_NAME(name); \
        !           512:                                                eol(src);                        \
        !           513:                                                break
        !           514: 
        !           515: #define VAR(name)              WRITE_NAME(name); \
        !           516:                                                write_var(bin,src);  \
        !           517:                                                eol(src);                        \
        !           518:                                                break
        !           519: 
        !           520: #define CH(name)               WRITE_NAME(name); \
        !           521:                                                write_ch(bin,src);  \
        !           522:                                                eol(src);                        \
        !           523:                                                break
        !           524: 
        !           525: #define CHCH(name)             WRITE_NAME(name); \
        !           526:                                                write_ch(bin,src);  \
        !           527:                                                write_ch(bin,src);  \
        !           528:                                                eol(src);                        \
        !           529:                                                break
        !           530: 
        !           531: #define UCH(name)              WRITE_NAME(name); \
        !           532:                                                write_uchar(bin,src);  \
        !           533:                                                eol(src);                        \
        !           534:                                                break
        !           535: 
        !           536: #define UCHUCH(name)   WRITE_NAME(name); \
        !           537:                                                write_uchar(bin,src);  \
        !           538:                                                write_uchar(bin,src);  \
        !           539:                                                eol(src);                        \
        !           540:                                                break
        !           541: 
        !           542: #define SHT(name)              WRITE_NAME(name); \
        !           543:                                                write_short(bin,src);  \
        !           544:                                                eol(src);                        \
        !           545:                                                break
        !           546: 
        !           547: 
        !           548: #define LNG(name)              WRITE_NAME(name); \
        !           549:                                                write_lng(bin,src);  \
        !           550:                                                eol(src);                        \
        !           551:                                                break
        !           552: 
        !           553: #define STR(name)              WRITE_NAME(name); \
        !           554:                                                write_cstr(bin,src); \
        !           555:                                                eol(src);                        \
        !           556:                                                break
        !           557: 
        !           558: #define VARVAR(name)   WRITE_NAME(name); \
        !           559:                                                write_var(bin,src);  \
        !           560:                                                write_var(bin,src);  \
        !           561:                                                eol(src);                        \
        !           562:                                                break
        !           563: 
        !           564: #define VARUCH(name)   WRITE_NAME(name); \
        !           565:                                                write_var(bin,src);  \
        !           566:                                                write_uchar(bin,src);  \
        !           567:                                                eol(src);                        \
        !           568:                                                break
        !           569: 
        !           570: #define VARVARVAR(name)        WRITE_NAME(name); \
        !           571:                                                write_var(bin,src);  \
        !           572:                                                write_var(bin,src);  \
        !           573:                                                write_var(bin,src);  \
        !           574:                                                eol(src);                        \
        !           575:                                                break
        !           576: 
        !           577: #define VARSTR(name)   WRITE_NAME(name); \
        !           578:                                                write_var(bin,src);  \
        !           579:                                                write_cstr(bin,src); \
        !           580:                                                eol(src);                        \
        !           581:                                                break
        !           582: 
        !           583: #define VARLNG(name)   WRITE_NAME(name); \
        !           584:                                                write_var(bin,src);  \
        !           585:                                                write_lng(bin,src);  \
        !           586:                                                eol(src);                        \
        !           587:                                                break
        !           588: 
        !           589: #define MUCH(name)             WRITE_NAME(name); \
        !           590:                                                if(usevar) {             \
        !           591:                                                        sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           592:                                                        usevar=FALSE;    \
        !           593:                                                        fread(buf,1,1,bin); \
        !           594:                                                } else {                                 \
        !           595:                                                        write_uchar(bin,src);  \
        !           596:                                                }                                        \
        !           597:                                                eol(src);                        \
        !           598:                                                break
        !           599: 
        !           600: #define MSHT(name)             WRITE_NAME(name); \
        !           601:                                                if(usevar) {             \
        !           602:                                                        sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           603:                                                        usevar=FALSE;    \
        !           604:                                                        fread(buf,2,1,bin); \
        !           605:                                                } else {                                 \
        !           606:                                                        write_short(bin,src);  \
        !           607:                                                }                                        \
        !           608:                                                eol(src);                        \
        !           609:                                                break
        !           610: 
        !           611: #define MVARLNG(name)  WRITE_NAME(name); \
        !           612:                                                write_var(bin,src);  \
        !           613:                                                if(usevar) {             \
        !           614:                                                        sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           615:                                                        usevar=FALSE;    \
        !           616:                                                        fread(buf,4,1,bin); \
        !           617:                                                } else {                                 \
        !           618:                                                        write_lng(bin,src);  \
        !           619:                                                }                                        \
        !           620:                                                eol(src);                        \
        !           621:                                                break
        !           622: 
        !           623: #define MVARSHTUCH(name)       WRITE_NAME(name); \
        !           624:                                                write_var(bin,src);  \
        !           625:                                                write_short(bin,src);  \
        !           626:                                                if(usevar) {             \
        !           627:                                                        sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           628:                                                        usevar=FALSE;    \
        !           629:                                                        fread(buf,1,1,bin); \
        !           630:                                                } else {                                 \
        !           631:                                                        write_uchar(bin,src);            \
        !           632:                                                }                                        \
        !           633:                                                eol(src);                        \
        !           634:                                                break
        !           635: 
        !           636: #define MVARSHT(name)  WRITE_NAME(name); \
        !           637:                                                write_var(bin,src);  \
        !           638:                                                if(usevar) {             \
        !           639:                                                        sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           640:                                                        usevar=FALSE;    \
        !           641:                                                        fread(buf,2,1,bin); \
        !           642:                                                } else {                                 \
        !           643:                                                        write_short(bin,src);  \
        !           644:                                                }                                        \
        !           645:                                                eol(src);                        \
        !           646:                                                break
        !           647: 
        !           648: #define MVARUCH(name)  WRITE_NAME(name); \
        !           649:                                                write_var(bin,src);  \
        !           650:                                                if(usevar) {             \
        !           651:                                                        sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           652:                                                        usevar=FALSE;    \
        !           653:                                                        fread(buf,1,1,bin); \
        !           654:                                                } else {                                 \
        !           655:                                                        write_uchar(bin,src);  \
        !           656:                                                }                                        \
        !           657:                                                eol(src);                        \
        !           658:                                                break
        !           659: 
        !           660: #define MVARVARNZUST(name)     WRITE_NAME(name); \
        !           661:                                                        write_var(bin,src);  \
        !           662:                                                        write_var(bin,src);  \
        !           663:                                                        if(usevar) {             \
        !           664:                                                                sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           665:                                                                usevar=FALSE;    \
        !           666:                                                                fread(buf,2,1,bin); \
        !           667:                                                        } else {                                 \
        !           668:                                                                fread(&ush, 2, 1, bin); \
        !           669:                                                                if(ush)                                 \
        !           670:                                                                        sprintf(strchr(src,0),"%u ",ush);  \
        !           671:                                                        }                                        \
        !           672:                                                        eol(src);                        \
        !           673:                                                        break
        !           674: 
        !           675: #define MVARVARUST(name)       WRITE_NAME(name); \
        !           676:                                                        write_var(bin,src);  \
        !           677:                                                        write_var(bin,src);  \
        !           678:                                                        if(usevar) {             \
        !           679:                                                                sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           680:                                                                usevar=FALSE;    \
        !           681:                                                                fread(buf,2,1,bin); \
        !           682:                                                        } else {                                 \
        !           683:                                                                write_ushort(bin,src);  \
        !           684:                                                        }                                        \
        !           685:                                                        eol(src);                        \
        !           686:                                                        break
        !           687: 
        !           688: #define MVARUSTVAR(name)       WRITE_NAME(name); \
        !           689:                                                        write_var(bin,src);  \
        !           690:                                                        if(usevar) {             \
        !           691:                                                                sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           692:                                                                usevar=FALSE;    \
        !           693:                                                                fread(buf,2,1,bin); \
        !           694:                                                        } else {                                 \
        !           695:                                                                write_ushort(bin,src);  \
        !           696:                                                        }                                        \
        !           697:                                                        write_var(bin,src);  \
        !           698:                                                        eol(src);                        \
        !           699:                                                        break
        !           700: 
        !           701: #define MVARUSTSTR(name)       WRITE_NAME(name); \
        !           702:                                                        write_var(bin,src);  \
        !           703:                                                        if(usevar) {             \
        !           704:                                                                sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           705:                                                                usevar=FALSE;    \
        !           706:                                                                fread(buf,2,1,bin); \
        !           707:                                                        } else {                                 \
        !           708:                                                                write_ushort(bin,src);  \
        !           709:                                                        }                                        \
        !           710:                                                        write_cstr(bin,src);  \
        !           711:                                                        eol(src);                        \
        !           712:                                                        break
        !           713: 
        !           714: #define MLNG(name)     WRITE_NAME(name); \
        !           715:                                                if(usevar) {             \
        !           716:                                                        sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           717:                                                        usevar=FALSE;    \
        !           718:                                                        fread(buf,4,1,bin); \
        !           719:                                                } else {                                 \
        !           720:                                                        write_lng(bin,src);  \
        !           721:                                                }                                        \
        !           722:                                                eol(src);                        \
        !           723:                                                break
        !           724: 
        !           725: #define MLNGVAR(name)  WRITE_NAME(name); \
        !           726:                                                if(usevar) {             \
        !           727:                                                        sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           728:                                                        usevar=FALSE;    \
        !           729:                                                        fread(buf,4,1,bin); \
        !           730:                                                } else {                                 \
        !           731:                                                        write_lng(bin,src);  \
        !           732:                                                }                                        \
        !           733:                                                write_var(bin,src);  \
        !           734:                                                eol(src);                        \
        !           735:                                                break
        !           736: 
        !           737: #define MSHTSTR(name)  WRITE_NAME(name); \
        !           738:                                                if(usevar) {             \
        !           739:                                                        sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           740:                                                        usevar=FALSE;    \
        !           741:                                                        fread(buf,2,1,bin); \
        !           742:                                                } else {                                 \
        !           743:                                                        write_short(bin,src);  \
        !           744:                                                }                                        \
        !           745:                                                write_cstr(bin,src);  \
        !           746:                                                eol(src);                        \
        !           747:                                                break
        !           748: 
        !           749: #define MLNGSTR(name)  WRITE_NAME(name); \
        !           750:                                                if(usevar) {             \
        !           751:                                                        sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           752:                                                        usevar=FALSE;    \
        !           753:                                                        fread(buf,4,1,bin); \
        !           754:                                                } else {                                 \
        !           755:                                                        write_lng(bin,src);  \
        !           756:                                                }                                        \
        !           757:                                                write_cstr(bin,src);  \
        !           758:                                                eol(src);                        \
        !           759:                                                break
        !           760: 
        !           761: #define MVARLNGLNG(name)       WRITE_NAME(name); \
        !           762:                                                        write_var(bin,src);  \
        !           763:                                                        if(usevar) {             \
        !           764:                                                                sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           765:                                                                usevar=FALSE;    \
        !           766:                                                                fread(buf,4,1,bin); \
        !           767:                                                        } else {                                 \
        !           768:                                                                write_lng(bin,src);  \
        !           769:                                                        }                                        \
        !           770:                                                        write_lng(bin,src);  \
        !           771:                                                        eol(src);                        \
        !           772:                                                        break
        !           773: 
        !           774: #define MVARUCHLNG(name)       WRITE_NAME(name); \
        !           775:                                                        write_var(bin,src);  \
        !           776:                                                        if(usevar) {             \
        !           777:                                                                sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           778:                                                                usevar=FALSE;    \
        !           779:                                                                fread(buf,1,1,bin); \
        !           780:                                                        } else {                                 \
        !           781:                                                                write_uchar(bin,src);  \
        !           782:                                                        }                                        \
        !           783:                                                        write_lng(bin,src);  \
        !           784:                                                        eol(src);                        \
        !           785:                                                        break
        !           786: 
        !           787: #define MVARCH(name)   WRITE_NAME(name); \
        !           788:                                                write_var(bin,src);  \
        !           789:                                                if(usevar) {             \
        !           790:                                                        sprintf(strchr(src,0),"%s ",getvar(var)); \
        !           791:                                                        usevar=FALSE;    \
        !           792:                                                        fread(buf,1,1,bin); \
        !           793:                                                } else {                                 \
        !           794:                                                        write_ch(bin,src);  \
        !           795:                                                }                                        \
        !           796:                                                eol(src);                        \
        !           797:                                                break
        !           798: 
        !           799: #define VARSTRVAR(name)        WRITE_NAME(name); \
        !           800:                                                write_var(bin,src);  \
        !           801:                                                write_cstr(bin,src); \
        !           802:                                                write_var(bin,src);  \
        !           803:                                                eol(src);                        \
        !           804:                                                break
        !           805: 
        !           806: #define UCHVARSTR(name)        WRITE_NAME(name); \
        !           807:                                                write_uchar(bin,src); \
        !           808:                                                write_var(bin,src);  \
        !           809:                                                write_cstr(bin,src);  \
        !           810:                                                eol(src);                        \
        !           811:                                                break
        !           812: 
        !           813: #define UCHVARVAR(name)        WRITE_NAME(name); \
        !           814:                                                write_uchar(bin,src); \
        !           815:                                                write_var(bin,src);  \
        !           816:                                                write_var(bin,src);  \
        !           817:                                                eol(src);                        \
        !           818:                                                break
        !           819: 
        !           820: #define UCHVAR(name)   WRITE_NAME(name); \
        !           821:                                                write_uchar(bin,src); \
        !           822:                                                write_var(bin,src);  \
        !           823:                                                eol(src);                        \
        !           824:                                                break
        !           825: 
        !           826: #define UCHSTR(name)   WRITE_NAME(name); \
        !           827:                                                write_uchar(bin,src); \
        !           828:                                                write_cstr(bin,src);  \
        !           829:                                                eol(src);                        \
        !           830:                                                break
        !           831: 
        !           832: #define CHSTR(name)            WRITE_NAME(name); \
        !           833:                                                write_ch(bin,src); \
        !           834:                                                write_cstr(bin,src);  \
        !           835:                                                eol(src);                        \
        !           836:                                                break
        !           837: 
        !           838: #define VARCH(name)            WRITE_NAME(name); \
        !           839:                                                write_var(bin,src);  \
        !           840:                                                write_ch(bin,src);       \
        !           841:                                                eol(src);                        \
        !           842:                                                break
        !           843: 
        !           844: #define CHVAR(name)            WRITE_NAME(name); \
        !           845:                                                write_ch(bin,src);       \
        !           846:                                                write_var(bin,src);  \
        !           847:                                                eol(src);                        \
        !           848:                                                break
        !           849: 
        !           850: #define VARVARSHT(name)        WRITE_NAME(name); \
        !           851:                                                write_var(bin,src);  \
        !           852:                                                write_var(bin,src);  \
        !           853:                                                write_short(bin,src);\
        !           854:                                                eol(src);                        \
        !           855:                                                break
        !           856: 
        !           857: #define VARVARUST(name)        WRITE_NAME(name); \
        !           858:                                                write_var(bin,src);  \
        !           859:                                                write_var(bin,src);  \
        !           860:                                                write_ushort(bin,src);\
        !           861:                                                eol(src);                        \
        !           862:                                                break
        !           863: 
        !           864: char *decompile_ars(uchar *ars, int len)
        !           865: {
        !           866:        static char     buf[1024];
        !           867:        char    *out;
        !           868:        uchar   *in;
        !           869:        uint    artype;
        !           870:        uint    n;
        !           871:        int             equals=0;
        !           872:        int             not=0;
        !           873: 
        !           874:        out=buf;
        !           875:        buf[0]=0;
        !           876:        for(in=ars;in<ars+len;in++) {
        !           877:                switch(*in) {
        !           878:                        case AR_NULL:
        !           879:                                break;
        !           880:                        case AR_OR:
        !           881:                                *(out++)='|';
        !           882:                                artype=*in;
        !           883:                                break;
        !           884:                        case AR_NOT:
        !           885:                                not=1;
        !           886:                                break;
        !           887:                        case AR_EQUAL:
        !           888:                                equals=1;
        !           889:                                break;
        !           890:                        case AR_BEGNEST:
        !           891:                                if(not)
        !           892:                                        *(out++)='!';
        !           893:                                not=0;
        !           894:                                *(out++)='(';
        !           895:                                artype=*in;
        !           896:                                break;
        !           897:                        case AR_ENDNEST:
        !           898:                                *(out++)=')';
        !           899:                                artype=*in;
        !           900:                                break;
        !           901:                        case AR_LEVEL:
        !           902:                                *(out++)='$';
        !           903:                                *(out++)='L';
        !           904:                                artype=*in;
        !           905:                                break;
        !           906:                        case AR_AGE:
        !           907:                                *(out++)='$';
        !           908:                                *(out++)='A';
        !           909:                                artype=*in;
        !           910:                                break;
        !           911:                        case AR_BPS:
        !           912:                                *(out++)='$';
        !           913:                                *(out++)='B';
        !           914:                                artype=*in;
        !           915:                                break;
        !           916:                        case AR_NODE:
        !           917:                                *(out++)='$';
        !           918:                                *(out++)='N';
        !           919:                                artype=*in;
        !           920:                                break;
        !           921:                        case AR_TLEFT:
        !           922:                                *(out++)='$';
        !           923:                                *(out++)='R';
        !           924:                                artype=*in;
        !           925:                                break;
        !           926:                        case AR_TUSED:
        !           927:                                *(out++)='$';
        !           928:                                *(out++)='O';
        !           929:                                artype=*in;
        !           930:                                break;
        !           931:                        case AR_USER:
        !           932:                                *(out++)='$';
        !           933:                                *(out++)='U';
        !           934:                                artype=*in;
        !           935:                                break;
        !           936:                        case AR_TIME:
        !           937:                                *(out++)='$';
        !           938:                                *(out++)='T';
        !           939:                                artype=*in;
        !           940:                                break;
        !           941:                        case AR_PCR:
        !           942:                                *(out++)='$';
        !           943:                                *(out++)='P';
        !           944:                                artype=*in;
        !           945:                                break;
        !           946:                        case AR_FLAG1:
        !           947:                                *(out++)='$';
        !           948:                                *(out++)='F';
        !           949:                                *(out++)='1';
        !           950:                                artype=*in;
        !           951:                                break;
        !           952:                        case AR_FLAG2:
        !           953:                                *(out++)='$';
        !           954:                                *(out++)='F';
        !           955:                                *(out++)='2';
        !           956:                                artype=*in;
        !           957:                                break;
        !           958:                        case AR_FLAG3:
        !           959:                                *(out++)='$';
        !           960:                                *(out++)='F';
        !           961:                                *(out++)='3';
        !           962:                                artype=*in;
        !           963:                                break;
        !           964:                        case AR_FLAG4:
        !           965:                                *(out++)='$';
        !           966:                                *(out++)='F';
        !           967:                                *(out++)='4';
        !           968:                                artype=*in;
        !           969:                                break;
        !           970:                        case AR_EXEMPT:
        !           971:                                *(out++)='$';
        !           972:                                *(out++)='X';
        !           973:                                artype=*in;
        !           974:                                break;
        !           975:                        case AR_REST:
        !           976:                                *(out++)='$';
        !           977:                                *(out++)='Z';
        !           978:                                artype=*in;
        !           979:                                break;
        !           980:                        case AR_SEX:
        !           981:                                *(out++)='$';
        !           982:                                *(out++)='S';
        !           983:                                artype=*in;
        !           984:                                break;
        !           985:                        case AR_UDR:
        !           986:                                *(out++)='$';
        !           987:                                *(out++)='K';
        !           988:                                artype=*in;
        !           989:                                break;
        !           990:                        case AR_UDFR:
        !           991:                                *(out++)='$';
        !           992:                                *(out++)='D';
        !           993:                                artype=*in;
        !           994:                                break;
        !           995:                        case AR_EXPIRE:
        !           996:                                *(out++)='$';
        !           997:                                *(out++)='E';
        !           998:                                artype=*in;
        !           999:                                break;
        !          1000:                        case AR_CREDIT:
        !          1001:                                *(out++)='$';
        !          1002:                                *(out++)='C';
        !          1003:                                artype=*in;
        !          1004:                                break;
        !          1005:                        case AR_DAY:
        !          1006:                                *(out++)='$';
        !          1007:                                *(out++)='W';
        !          1008:                                artype=*in;
        !          1009:                                break;
        !          1010:                        case AR_ANSI:
        !          1011:                                if(not)
        !          1012:                                        *(out++)='!';
        !          1013:                                not=0;
        !          1014:                                *(out++)='$';
        !          1015:                                *(out++)='[';
        !          1016:                                artype=*in;
        !          1017:                                break;
        !          1018:                        case AR_RIP:
        !          1019:                                if(not)
        !          1020:                                        *(out++)='!';
        !          1021:                                not=0;
        !          1022:                                *(out++)='$';
        !          1023:                                *(out++)='*';
        !          1024:                                artype=*in;
        !          1025:                                break;
        !          1026:                        case AR_LOCAL:
        !          1027:                                if(not)
        !          1028:                                        *(out++)='!';
        !          1029:                                not=0;
        !          1030:                                *(out++)='$';
        !          1031:                                *(out++)='G';
        !          1032:                                artype=*in;
        !          1033:                                break;
        !          1034:                        case AR_GROUP:
        !          1035:                                *(out++)='$';
        !          1036:                                *(out++)='M';
        !          1037:                                artype=*in;
        !          1038:                                break;
        !          1039:                        case AR_SUB:
        !          1040:                                *(out++)='$';
        !          1041:                                *(out++)='H';
        !          1042:                                artype=*in;
        !          1043:                                break;
        !          1044:                        case AR_LIB:
        !          1045:                                *(out++)='$';
        !          1046:                                *(out++)='I';
        !          1047:                                artype=*in;
        !          1048:                                break;
        !          1049:                        case AR_DIR:
        !          1050:                                *(out++)='$';
        !          1051:                                *(out++)='J';
        !          1052:                                artype=*in;
        !          1053:                                break;
        !          1054:                        case AR_EXPERT :
        !          1055:                                if(not)
        !          1056:                                        *(out++)='!';
        !          1057:                                not=0;
        !          1058:                                *out=0;
        !          1059:                                strcat(out,"EXPERT");
        !          1060:                                out=strchr(buf,0);
        !          1061:                                artype=*in;
        !          1062:                                break;
        !          1063:                        case AR_SYSOP:
        !          1064:                                if(not)
        !          1065:                                        *(out++)='!';
        !          1066:                                not=0;
        !          1067:                                *out=0;
        !          1068:                                strcat(out,"SYSOP");
        !          1069:                                out=strchr(buf,0);
        !          1070:                                artype=*in;
        !          1071:                                break;
        !          1072:                        case AR_QUIET:
        !          1073:                                if(not)
        !          1074:                                        *(out++)='!';
        !          1075:                                not=0;
        !          1076:                                *out=0;
        !          1077:                                strcat(out,"QUIET");
        !          1078:                                out=strchr(buf,0);
        !          1079:                                artype=*in;
        !          1080:                                break;
        !          1081:                        case AR_MAIN_CMDS:
        !          1082:                                *out=0;
        !          1083:                                strcat(out,"MAIN_CMDS");
        !          1084:                                out=strchr(buf,0);
        !          1085:                                artype=*in;
        !          1086:                                break;
        !          1087:                        case AR_FILE_CMDS:
        !          1088:                                *out=0;
        !          1089:                                strcat(out,"FILE_CMDS");
        !          1090:                                out=strchr(buf,0);
        !          1091:                                artype=*in;
        !          1092:                                break;
        !          1093:                        case AR_RANDOM:
        !          1094:                                *(out++)='$';
        !          1095:                                *(out++)='Q';
        !          1096:                                artype=*in;
        !          1097:                                break;
        !          1098:                        case AR_LASTON:
        !          1099:                                *(out++)='$';
        !          1100:                                *(out++)='Y';
        !          1101:                                artype=*in;
        !          1102:                                break;
        !          1103:                        case AR_LOGONS:
        !          1104:                                *(out++)='$';
        !          1105:                                *(out++)='V';
        !          1106:                                artype=*in;
        !          1107:                                break;
        !          1108:                        case AR_WIP:
        !          1109:                                if(not)
        !          1110:                                        *(out++)='!';
        !          1111:                                not=0;
        !          1112:                                *out=0;
        !          1113:                                strcat(out,"WIP");
        !          1114:                                out=strchr(buf,0);
        !          1115:                                artype=*in;
        !          1116:                                break;
        !          1117:                        case AR_SUBCODE:
        !          1118:                                *out=0;
        !          1119:                                strcat(out,"SUBCODE");
        !          1120:                                out=strchr(buf,0);
        !          1121:                                artype=*in;
        !          1122:                                break;
        !          1123:                        case AR_DIRCODE:
        !          1124:                                *out=0;
        !          1125:                                strcat(out,"DIRCODE");
        !          1126:                                out=strchr(buf,0);
        !          1127:                                artype=*in;
        !          1128:                                break;
        !          1129:                        case AR_OS2:
        !          1130:                                if(not)
        !          1131:                                        *(out++)='!';
        !          1132:                                not=0;
        !          1133:                                *out=0;
        !          1134:                                strcat(out,"OS2");
        !          1135:                                out=strchr(buf,0);
        !          1136:                                artype=*in;
        !          1137:                                break;
        !          1138:                        case AR_DOS:
        !          1139:                                if(not)
        !          1140:                                        *(out++)='!';
        !          1141:                                not=0;
        !          1142:                                *out=0;
        !          1143:                                strcat(out,"DOS");
        !          1144:                                out=strchr(buf,0);
        !          1145:                                artype=*in;
        !          1146:                                break;
        !          1147:                        case AR_WIN32:
        !          1148:                                if(not)
        !          1149:                                        *(out++)='!';
        !          1150:                                not=0;
        !          1151:                                *out=0;
        !          1152:                                strcat(out,"WIN32");
        !          1153:                                out=strchr(buf,0);
        !          1154:                                artype=*in;
        !          1155:                                break;
        !          1156:                        case AR_UNIX:
        !          1157:                                if(not)
        !          1158:                                        *(out++)='!';
        !          1159:                                not=0;
        !          1160:                                *out=0;
        !          1161:                                strcat(out,"UNIX");
        !          1162:                                out=strchr(buf,0);
        !          1163:                                artype=*in;
        !          1164:                                break;
        !          1165:                        case AR_LINUX :
        !          1166:                                if(not)
        !          1167:                                        *(out++)='!';
        !          1168:                                not=0;
        !          1169:                                *out=0;
        !          1170:                                strcat(out,"LINUX");
        !          1171:                                out=strchr(buf,0);
        !          1172:                                artype=*in;
        !          1173:                                break;
        !          1174:                        case AR_SHELL:
        !          1175:                                *out=0;
        !          1176:                                strcat(out,"SHELL");
        !          1177:                                out=strchr(buf,0);
        !          1178:                                artype=*in;
        !          1179:                                break;
        !          1180:                        case AR_PROT:
        !          1181:                                if(not)
        !          1182:                                        *(out++)='!';
        !          1183:                                not=0;
        !          1184:                                *out=0;
        !          1185:                                strcat(out,"PROT");
        !          1186:                                out=strchr(buf,0);
        !          1187:                                artype=*in;
        !          1188:                                break;
        !          1189:                        case AR_GUEST:
        !          1190:                                if(not)
        !          1191:                                        *(out++)='!';
        !          1192:                                not=0;
        !          1193:                                *out=0;
        !          1194:                                strcat(out,"GUEST");
        !          1195:                                out=strchr(buf,0);
        !          1196:                                artype=*in;
        !          1197:                                break;
        !          1198:                        case AR_QNODE:
        !          1199:                                if(not)
        !          1200:                                        *(out++)='!';
        !          1201:                                not=0;
        !          1202:                                *out=0;
        !          1203:                                strcat(out,"QNODE");
        !          1204:                                out=strchr(buf,0);
        !          1205:                                artype=*in;
        !          1206:                                break;
        !          1207:                        default:
        !          1208:                                printf("Error decoding ARS!\n");
        !          1209:                                return("Unknown ARS String");
        !          1210:                }
        !          1211:                switch(*in) {
        !          1212:                        case AR_TIME:
        !          1213:                                if(not)
        !          1214:                                        *(out++)='!';
        !          1215:                                if(equals)
        !          1216:                                        *(out++)='=';
        !          1217:                                not=equals=0;
        !          1218:                                in++;
        !          1219:                                n=*((short *)in);
        !          1220:                                in++;
        !          1221:                                out+=sprintf(out,"%02d:%02d",n/60,n%60);
        !          1222:                                break;
        !          1223:                        case AR_AGE:    /* byte operands */
        !          1224:                        case AR_PCR:
        !          1225:                        case AR_UDR:
        !          1226:                        case AR_UDFR:
        !          1227:                        case AR_NODE:
        !          1228:                        case AR_LEVEL:
        !          1229:                        case AR_TLEFT:
        !          1230:                        case AR_TUSED:
        !          1231:                                if(not)
        !          1232:                                        *(out++)='!';
        !          1233:                                if(equals)
        !          1234:                                        *(out++)='=';
        !          1235:                                not=equals=0;
        !          1236:                                in++;
        !          1237:                                out+=sprintf(out,"%d",*in);
        !          1238:                                break;
        !          1239:                        case AR_BPS:    /* int operands */
        !          1240:                        case AR_MAIN_CMDS:
        !          1241:                        case AR_FILE_CMDS:
        !          1242:                        case AR_EXPIRE:
        !          1243:                        case AR_CREDIT:
        !          1244:                        case AR_USER:
        !          1245:                        case AR_RANDOM:
        !          1246:                        case AR_LASTON:
        !          1247:                        case AR_LOGONS:
        !          1248:                                if(not)
        !          1249:                                        *(out++)='!';
        !          1250:                                if(equals)
        !          1251:                                        *(out++)='=';
        !          1252:                                not=equals=0;
        !          1253:                                in++;
        !          1254:                        n=*((short *)in);
        !          1255:                                in++;
        !          1256:                                out+=sprintf(out,"%d",n);
        !          1257:                        break;
        !          1258:                        case AR_GROUP:
        !          1259:                        case AR_LIB:
        !          1260:                        case AR_DIR:
        !          1261:                        case AR_SUB:
        !          1262:                                if(not)
        !          1263:                                        *(out++)='!';
        !          1264:                                if(equals)
        !          1265:                                        *(out++)='=';
        !          1266:                                not=equals=0;
        !          1267:                                in++;
        !          1268:                        n=*((short *)in);
        !          1269:                                n++;              /* convert from to 0 base */
        !          1270:                                in++;
        !          1271:                                out+=sprintf(out,"%d",n);
        !          1272:                        break;
        !          1273:                        case AR_SUBCODE:
        !          1274:                        case AR_DIRCODE:
        !          1275:                        case AR_SHELL:
        !          1276:                                if(not)
        !          1277:                                        *(out++)='!';
        !          1278:                                if(equals)
        !          1279:                                        *(out++)='=';
        !          1280:                                not=equals=0;
        !          1281:                                in++;
        !          1282:                                n=sprintf(out,"%s ",in);
        !          1283:                                out+=n;
        !          1284:                                in+=n-1;
        !          1285:                                break;
        !          1286:                        case AR_FLAG1:
        !          1287:                        case AR_FLAG2:
        !          1288:                        case AR_FLAG3:
        !          1289:                        case AR_FLAG4:
        !          1290:                        case AR_EXEMPT:
        !          1291:                        case AR_SEX:
        !          1292:                        case AR_REST:
        !          1293:                                if(not)
        !          1294:                                        *(out++)='!';
        !          1295:                                if(equals)
        !          1296:                                        *(out++)='=';
        !          1297:                                not=equals=0;
        !          1298:                                in++;
        !          1299:                                *(out++)=*in;
        !          1300:                                break;
        !          1301:                }
        !          1302:        }
        !          1303:        *out=0;
        !          1304:        return(buf);
        !          1305: }
        !          1306: 
        !          1307: void decompile(FILE *bin, FILE *srcfile)
        !          1308: {
        !          1309:        int i;
        !          1310:        char    ch;
        !          1311:        uchar   uch;
        !          1312:        ushort  ush;
        !          1313:        long    lng;
        !          1314:        long    lng2;
        !          1315:        int             usevar=FALSE;
        !          1316:        long    var=0;
        !          1317:        char    buf[80];
        !          1318:        char    *p;
        !          1319:        char    src[2048];
        !          1320:        int             redo=FALSE;
        !          1321:        char    *labels;
        !          1322:        size_t  currpos=0;
        !          1323: 
        !          1324:        currpos=filelength(fileno(bin));
        !          1325:        labels=(char *)calloc(1,filelength(fileno(bin)));
        !          1326:        if(labels==NULL) {
        !          1327:                printf("ERROR allocating memory for labels\n");
        !          1328:                return;
        !          1329:        }
        !          1330:        while(1) {
        !          1331:                currpos=ftell(bin);
        !          1332: 
        !          1333:                if(fread(&uch,1,1,bin)!=1) {
        !          1334:                        if(redo)
        !          1335:                                break;
        !          1336:                        redo=TRUE;
        !          1337:                        printf("Second pass...\n");
        !          1338:                        rewind(bin);
        !          1339:                        continue;
        !          1340:                }
        !          1341:                src[0]=0;
        !          1342:                if(labels[currpos])
        !          1343:                        sprintf(src,":label_%04x\n",currpos);
        !          1344:                switch(uch) {
        !          1345:                        case CS_USE_INT_VAR:
        !          1346:                                usevar=TRUE;
        !          1347:                                fread(&var,4,1,bin);
        !          1348:                                fread(&buf,2,1,bin);    /* offset/length */
        !          1349:                                continue;
        !          1350:                        case CS_VAR_INSTRUCTION:
        !          1351:                                fread(&uch,1,1,bin);
        !          1352:                                switch(uch) {
        !          1353:                                        case SHOW_VARS:
        !          1354:                                                WRITE_NAME("SHOW_VARS");
        !          1355:                                                eol(src);
        !          1356:                                                break;
        !          1357:                                        case PRINT_VAR:
        !          1358:                                                VAR("PRINT");
        !          1359:                                        case VAR_PRINTF:
        !          1360:                                        case VAR_PRINTF_LOCAL:
        !          1361:                                                if(uch==VAR_PRINTF) {
        !          1362:                                                        WRITE_NAME("PRINTF");
        !          1363:                                                }
        !          1364:                                                else {
        !          1365:                                                        WRITE_NAME("LPRINTF");
        !          1366:                                                }
        !          1367:                                                write_cstr(bin,src);
        !          1368:                                                fread(&uch, 1, 1, bin);
        !          1369:                                                for(i=0; i<uch; i++) {
        !          1370:                                                        write_var(bin,src);
        !          1371:                                                }
        !          1372:                                                eol(src);
        !          1373:                                                break;
        !          1374:                                        case DEFINE_STR_VAR:
        !          1375:                                                VAR("STR");
        !          1376:                                        case DEFINE_INT_VAR:
        !          1377:                                                VAR("INT");
        !          1378:                                        case DEFINE_GLOBAL_STR_VAR:
        !          1379:                                                VAR("GLOBAL_STR");
        !          1380:                                        case DEFINE_GLOBAL_INT_VAR:
        !          1381:                                                VAR("GLOBAL_INT");
        !          1382:                                        case SET_STR_VAR:
        !          1383:                                                VARSTR("SET");
        !          1384:                                        case SET_INT_VAR:
        !          1385:                                                VARLNG("SET");
        !          1386:                                        case COMPARE_STR_VAR:
        !          1387:                                                VARSTR("COMPARE");
        !          1388:                                        case COMPARE_INT_VAR:
        !          1389:                                                VARLNG("COMPARE");
        !          1390:                                        case STRNCMP_VAR:
        !          1391:                                                UCHVARSTR("STRNCMP");
        !          1392:                                        case STRSTR_VAR:
        !          1393:                                                VARSTR("STRSTR");
        !          1394:                                        case COMPARE_VARS:
        !          1395:                                                VARVAR("COMPARE");
        !          1396:                                        case STRNCMP_VARS:
        !          1397:                                                UCHVARVAR("STRNCMP");
        !          1398:                                        case STRSTR_VARS:
        !          1399:                                                VARVAR("STRSTR");
        !          1400:                                        case COPY_VAR:
        !          1401:                                                VARVAR("COPY");
        !          1402:                                        case SWAP_VARS:
        !          1403:                                                VARVAR("SWAP");
        !          1404:                                        case CAT_STR_VAR:
        !          1405:                                                VARSTR("STRCAT");
        !          1406:                                        case CAT_STR_VARS:
        !          1407:                                                VARVAR("STRCAT");
        !          1408:                                        case FORMAT_STR_VAR:
        !          1409:                                                WRITE_NAME("SPRINTF");
        !          1410:                                                write_var(bin,src);
        !          1411:                                                write_cstr(bin,src);
        !          1412:                                                fread(&uch, 1, 1, bin);
        !          1413:                                                for(i=0; i<uch; i++) {
        !          1414:                                                        write_var(bin,src);
        !          1415:                                                }
        !          1416:                                                eol(src);
        !          1417:                                                break;
        !          1418:                                        case TIME_STR:
        !          1419:                                                VARVAR("TIME_STR");
        !          1420:                                        case DATE_STR:
        !          1421:                                                VARVAR("DATE_STR");
        !          1422:                                        case FORMAT_TIME_STR:
        !          1423:                                                VARSTRVAR("STRFTIME");
        !          1424:                                        case SECOND_STR:
        !          1425:                                                VARVAR("SECOND_STR");
        !          1426:                                        case STRUPR_VAR:
        !          1427:                                                VAR("STRUPR");
        !          1428:                                        case STRLWR_VAR:
        !          1429:                                                VAR("STRLWR");
        !          1430:                                        case ADD_INT_VAR:
        !          1431:                                                VARLNG("ADD");
        !          1432:                                        case ADD_INT_VARS:
        !          1433:                                                VARVAR("ADD");
        !          1434:                                        case SUB_INT_VAR:
        !          1435:                                                VARLNG("SUB");
        !          1436:                                        case SUB_INT_VARS:
        !          1437:                                                VARVAR("SUB");
        !          1438:                                        case MUL_INT_VAR:
        !          1439:                                                VARLNG("MUL");
        !          1440:                                        case MUL_INT_VARS:
        !          1441:                                                VARVAR("MUL");
        !          1442:                                        case DIV_INT_VAR:
        !          1443:                                                VARLNG("DIV");
        !          1444:                                        case DIV_INT_VARS:
        !          1445:                                                VARVAR("DIV");
        !          1446:                                        case MOD_INT_VAR:
        !          1447:                                                VARLNG("MOD");
        !          1448:                                        case MOD_INT_VARS:
        !          1449:                                                VARVAR("MOD");
        !          1450:                                        case AND_INT_VAR:
        !          1451:                                                VARLNG("AND");
        !          1452:                                        case AND_INT_VARS:
        !          1453:                                                VARVAR("AND");
        !          1454:                                        case COMPARE_ANY_BITS:
        !          1455:                                                MVARLNG("COMPARE_ANY_BITS");
        !          1456:                                        case COMPARE_ALL_BITS:
        !          1457:                                                MVARLNG("COMPARE_ALL_BITS");
        !          1458:                                        case OR_INT_VAR:
        !          1459:                                                VARLNG("OR");
        !          1460:                                        case OR_INT_VARS:
        !          1461:                                                VARLNG("OR");
        !          1462:                                        case NOT_INT_VAR:
        !          1463:                                                VARLNG("NOT");
        !          1464:                                        case NOT_INT_VARS:
        !          1465:                                                VARVAR("NOT");
        !          1466:                                        case XOR_INT_VAR:
        !          1467:                                                VARLNG("XOR");
        !          1468:                                        case XOR_INT_VARS:
        !          1469:                                                VARVAR("XOR");
        !          1470:                                        case RANDOM_INT_VAR:
        !          1471:                                                MVARLNG("RANDOM");
        !          1472:                                        case TIME_INT_VAR:
        !          1473:                                                VAR("TIME");
        !          1474:                                        case DATE_STR_TO_INT:
        !          1475:                                                VARVAR("DATE_INT");
        !          1476:                                        case STRLEN_INT_VAR:
        !          1477:                                                VARVAR("STRLEN");
        !          1478:                                        case CRC16_TO_INT:
        !          1479:                                                VARVAR("CRC16");
        !          1480:                                        case CRC32_TO_INT:
        !          1481:                                                VARVAR("CRC32");
        !          1482:                                        case FLENGTH_TO_INT:
        !          1483:                                                VARVAR("GET_FILE_LENGTH");
        !          1484:                                        case CHARVAL_TO_INT:
        !          1485:                                                VARVAR("CHARVAL");
        !          1486:                                        case GETNUM_VAR:
        !          1487:                                                MVARSHT("GETNUM");
        !          1488:                                        case GETSTR_VAR:
        !          1489:                                                MVARUCH("GETSTR");
        !          1490:                                        case GETNAME_VAR:
        !          1491:                                                MVARUCH("GETNAME");
        !          1492:                                        case GETSTRUPR_VAR:
        !          1493:                                                MVARUCH("GETSTRUPR");
        !          1494:                                        case GETLINE_VAR:
        !          1495:                                                MVARUCH("GETLINE");
        !          1496:                                        case SHIFT_STR_VAR:
        !          1497:                                                MVARUCH("SHIFT_STR");
        !          1498:                                        case GETSTR_MODE:
        !          1499:                                                MVARUCHLNG("GETSTR");
        !          1500:                                        case TRUNCSP_STR_VAR:
        !          1501:                                                VAR("TRUNCSP");
        !          1502:                                        case CHKFILE_VAR:
        !          1503:                                                VAR("CHKFILE");
        !          1504:                                        case PRINTFILE_VAR_MODE:
        !          1505:                                                MVARSHT("PRINTFILE");
        !          1506:                                        case PRINTTAIL_VAR_MODE:
        !          1507:                                                MVARSHTUCH("PRINTTAIL");
        !          1508:                                        case CHKSUM_TO_INT:
        !          1509:                                                VARVAR("CHKSUM");
        !          1510:                                        case STRIP_CTRL_STR_VAR:
        !          1511:                                                VAR("STRIP_CTRL");
        !          1512:                                        case SEND_FILE_VIA:
        !          1513:                                                CHSTR("SEND_FILE_VIA");
        !          1514:                                        case SEND_FILE_VIA_VAR:
        !          1515:                                                CHVAR("SEND_FILE_VIA");
        !          1516:                                        case FTIME_TO_INT:
        !          1517:                                                VARVAR("GET_FILE_TIME");
        !          1518:                                        case RECEIVE_FILE_VIA:
        !          1519:                                                CHSTR("RECEIVE_FILE_VIA");
        !          1520:                                        case RECEIVE_FILE_VIA_VAR:
        !          1521:                                                CHVAR("RECEIVE_FILE_VIA");
        !          1522:                                        case TELNET_GATE_STR:                           /* TELNET_GATE reverses argument order */
        !          1523:                                                WRITE_NAME("TELNET_GATE");
        !          1524:                                                fread(&lng,4,1,bin);
        !          1525:                                                write_cstr(bin,src);
        !          1526:                                                if(usevar) {
        !          1527:                                                        sprintf(strchr(src,0),"%s ",getvar(var));
        !          1528:                                                        usevar=FALSE;
        !          1529:                                                } else {
        !          1530:                                                        sprintf(strchr(src,0),"%ld ",lng);
        !          1531:                                                }
        !          1532:                                                eol(src);
        !          1533:                                                break;
        !          1534:                                        case TELNET_GATE_VAR:                           /* TELNET_GATE reverses argument order */
        !          1535:                                                WRITE_NAME("TELNET_GATE");
        !          1536:                                                fread(&lng,4,1,bin);
        !          1537:                                                fread(&lng2, 1, 4, bin);
        !          1538:                                                sprintf(strchr(src,0),"%s ",getvar(lng2));
        !          1539:                                                if(usevar) {
        !          1540:                                                        sprintf(strchr(src,0),"%s ",getvar(var));
        !          1541:                                                        usevar=FALSE;
        !          1542:                                                } else {
        !          1543:                                                        sprintf(strchr(src,0),"%ld ",lng);
        !          1544:                                                }
        !          1545:                                                eol(src);
        !          1546:                                                break;
        !          1547:                                        case COPY_FIRST_CHAR:
        !          1548:                                                VARVAR("COPY_FIRST_CHAR");
        !          1549:                                        case COMPARE_FIRST_CHAR:
        !          1550:                                                VARUCH("COMPARE_FIRST_CHAR");
        !          1551:                                        case COPY_CHAR:
        !          1552:                                                VAR("COPY_CHAR");
        !          1553:                                        case SHIFT_TO_FIRST_CHAR:
        !          1554:                                                MVARUCH("SHIFT_TO_FIRST_CHAR");
        !          1555:                                        case SHIFT_TO_LAST_CHAR:
        !          1556:                                                MVARUCH("SHIFT_TO_LAST_CHAR");
        !          1557:                                        case MATCHUSER:
        !          1558:                                                VARVAR("MATCHUSER");
        !          1559:                                        default:
        !          1560:                                                printf("ERROR!  Unknown variable-length instruction: %02x%02X\n",CS_VAR_INSTRUCTION,uch);
        !          1561:                                                printf("Cannot continue.\n");
        !          1562:                                                free(labels);
        !          1563:                                                return;
        !          1564:                                }
        !          1565:                                break;
        !          1566:                        case CS_IF_TRUE:
        !          1567:                                indenteol=1;
        !          1568:                                NONE("IF_TRUE");
        !          1569:                        case CS_IF_FALSE:
        !          1570:                                indenteol=1;
        !          1571:                                NONE("IF_FALSE");
        !          1572:                        case CS_ELSE:
        !          1573:                                indent--;
        !          1574:                                indenteol=1;
        !          1575:                                NONE("ELSE");
        !          1576:                        case CS_ENDIF:
        !          1577:                                indent--;
        !          1578:                                NONE("END_IF");
        !          1579:                        case CS_CMD_HOME:
        !          1580:                                NONE("CMD_HOME");
        !          1581:                        case CS_CMD_POP:
        !          1582:                                NONE("CMD_POP");
        !          1583:                        case CS_END_CMD:
        !          1584:                                indent--;
        !          1585:                                NONE("END_CMD");
        !          1586:                        case CS_RETURN:
        !          1587:                                NONE("RETURN");
        !          1588:                        case CS_GETKEY:
        !          1589:                                NONE("GETKEY");
        !          1590:                        case CS_GETKEYE:
        !          1591:                                NONE("GETKEYE");
        !          1592:                        case CS_UNGETKEY:
        !          1593:                                NONE("UNGETKEY");
        !          1594:                        case CS_UNGETSTR:
        !          1595:                                NONE("UNGETSTR");
        !          1596:                        case CS_PRINTKEY:
        !          1597:                                NONE("PRINTKEY");
        !          1598:                        case CS_PRINTSTR:
        !          1599:                                NONE("PRINTSTR");
        !          1600:                        case CS_HANGUP:
        !          1601:                                NONE("HANGUP");
        !          1602:                        case CS_SYNC:
        !          1603:                                NONE("SYNC");
        !          1604:                        case CS_ASYNC:
        !          1605:                                NONE("ASYNC");
        !          1606:                        case CS_CHKSYSPASS:
        !          1607:                                NONE("CHKSYSPASS");
        !          1608:                        case CS_LOGKEY:
        !          1609:                                NONE("LOGKEY");
        !          1610:                        case CS_LOGKEY_COMMA:
        !          1611:                                NONE("LOGKEY_COMMA");
        !          1612:                        case CS_LOGSTR:
        !          1613:                                NONE("LOGSTR");
        !          1614:                        case CS_CLS:
        !          1615:                                NONE("CLS");
        !          1616:                        case CS_CRLF:
        !          1617:                                NONE("CRLF");
        !          1618:                        case CS_PAUSE:
        !          1619:                                NONE("PAUSE");
        !          1620:                        case CS_PAUSE_RESET:
        !          1621:                                NONE("PAUSE_RESET");
        !          1622:                        case CS_GETLINES:
        !          1623:                                NONE("GETLINES");
        !          1624:                        case CS_GETFILESPEC:
        !          1625:                                NONE("GETFILESPEC");
        !          1626:                        case CS_FINDUSER:
        !          1627:                                NONE("FINDUSER");
        !          1628:                        case CS_CLEAR_ABORT:
        !          1629:                                NONE("CLEAR_ABORT");
        !          1630:                        case CS_SELECT_SHELL:
        !          1631:                                NONE("SELECT_SHELL");
        !          1632:                        case CS_SET_SHELL:
        !          1633:                                NONE("SET_SHELL");
        !          1634:                        case CS_SELECT_EDITOR:
        !          1635:                                NONE("SELECT_EDITOR");
        !          1636:                        case CS_SET_EDITOR:
        !          1637:                                NONE("SET_EDITOR");
        !          1638:                        case CS_INKEY:
        !          1639:                                NONE("INKEY");
        !          1640:                        case CS_INCHAR:
        !          1641:                                NONE("INCHAR");
        !          1642:                        case CS_GETTIMELEFT:
        !          1643:                                NONE("GETTIMELEFT");
        !          1644:                        case CS_SAVELINE:
        !          1645:                                NONE("SAVELINE");
        !          1646:                        case CS_RESTORELINE:
        !          1647:                                NONE("RESTORELINE");
        !          1648:                        case CS_IF_GREATER:
        !          1649:                                indenteol=1;
        !          1650:                                NONE("IF_GREATER");
        !          1651:                        case CS_IF_GREATER_OR_EQUAL:
        !          1652:                                indenteol=1;
        !          1653:                                NONE("IF_GREATER_OR_EQUAL");
        !          1654:                        case CS_IF_LESS:
        !          1655:                                indenteol=1;
        !          1656:                                NONE("IF_LESS");
        !          1657:                        case CS_IF_LESS_OR_EQUAL:
        !          1658:                                indenteol=1;
        !          1659:                                NONE("IF_LESS_OR_EQUAL");
        !          1660:                        case CS_DEFAULT:
        !          1661:                                indenteol=1;
        !          1662:                                NONE("DEFAULT");
        !          1663:                        case CS_END_SWITCH:
        !          1664:                                indent--;
        !          1665:                                NONE("END_SWITCH");
        !          1666:                        case CS_END_CASE:
        !          1667:                                indent--;
        !          1668:                                NONE("END_CASE");
        !          1669:                        case CS_PUT_NODE:
        !          1670:                                NONE("PUT_NODE");
        !          1671:                        case CS_GETCHAR:
        !          1672:                                NONE("GETCHAR");
        !          1673:                        case CS_ONE_MORE_BYTE:
        !          1674:                                fread(&uch,1,1,bin);
        !          1675:                                switch(uch) {
        !          1676:                                        case CS_ONLINE:
        !          1677:                                                NONE("ONLINE");
        !          1678:                                        case CS_OFFLINE:
        !          1679:                                                NONE("OFFLINE");
        !          1680:                                        case CS_NEWUSER:
        !          1681:                                                NONE("NEWUSER");
        !          1682:                                        case CS_LOGON:
        !          1683:                                                NONE("LOGON");
        !          1684:                                        case CS_LOGOUT:
        !          1685:                                                NONE("LOGOUT");
        !          1686:                                        case CS_EXIT:
        !          1687:                                                NONE("EXIT");
        !          1688:                                        case CS_LOOP_BEGIN:
        !          1689:                                                indenteol=1;
        !          1690:                                                NONE("LOOP_BEGIN");
        !          1691:                                        case CS_CONTINUE_LOOP:
        !          1692:                                                NONE("CONTINUE_LOOP");
        !          1693:                                        case CS_BREAK_LOOP:
        !          1694:                                                NONE("BREAK_LOOP");
        !          1695:                                        case CS_END_LOOP:
        !          1696:                                                indent--;
        !          1697:                                                NONE("END_LOOP");
        !          1698:                                        default:
        !          1699:                                                printf("ERROR!  Unknown one-byte instruction: %02x%02X\n",CS_ONE_MORE_BYTE,uch);
        !          1700:                                }
        !          1701:                                break;
        !          1702:                        case CS_CMDKEY:
        !          1703:                                indenteol=1;
        !          1704:                                KEY("CMDKEY");
        !          1705:                        case CS_NODE_ACTION:
        !          1706:                                MUCH("NODE_ACTION");
        !          1707:                        case CS_GETSTR:
        !          1708:                                MUCH("GETSTR");
        !          1709:                        case CS_GETNAME:
        !          1710:                                MUCH("GETNAME");
        !          1711:                        case CS_GETSTRUPR:
        !          1712:                                MUCH("GETSTRUPR");
        !          1713:                        case CS_SHIFT_STR:
        !          1714:                                MUCH("SHIFT_STR");
        !          1715:                        case CS_COMPARE_KEY:
        !          1716:                                KEY("COMPARE_KEY");
        !          1717:                        case CS_SETLOGIC:
        !          1718:                                LGC("SETLOGIC");
        !          1719:                        case CS_SET_USER_LEVEL:
        !          1720:                                MUCH("SET_USER_LEVEL");
        !          1721:                        case CS_SET_USER_STRING:
        !          1722:                                MUCH("SET_USER_STRING");
        !          1723:                        case CS_GETLINE:
        !          1724:                                MUCH("GETLINE");
        !          1725:                        case CS_NODE_STATUS:
        !          1726:                                MUCH("NODE_STATUS");
        !          1727:                        case CS_CMDCHAR:
        !          1728:                                indenteol=1;
        !          1729:                                CH("CMDCHAR");
        !          1730:                        case CS_COMPARE_CHAR:
        !          1731:                                CH("COMPARE_CHAR");
        !          1732:                        case CS_MULTINODE_CHAT:
        !          1733:                                MUCH("MULTINODE_CHAT");
        !          1734:                        case CS_TWO_MORE_BYTES:
        !          1735:                                fread(&uch,1,1,bin);
        !          1736:                                switch(uch) {
        !          1737:                                        case CS_USER_EVENT:
        !          1738:                                                MUCH("USER_EVENT");
        !          1739:                                        default:
        !          1740:                                                printf("ERROR!  Unknown two-byte instruction: %02x%02X\n",CS_ONE_MORE_BYTE,uch);
        !          1741:                                }
        !          1742:                                break;
        !          1743:                        case CS_GOTO:
        !          1744:                                fread(&ush,2,1,bin);
        !          1745:                                labels[ush]=TRUE;
        !          1746:                                WRITE_NAME("GOTO");
        !          1747:                                sprintf(strchr(src,0),"label_%04x ",ush);
        !          1748:                                eol(src);
        !          1749:                                break;
        !          1750:                        case CS_CALL:
        !          1751:                                fread(&ush,2,1,bin);
        !          1752:                                labels[ush]=TRUE;
        !          1753:                                WRITE_NAME("CALL");
        !          1754:                                sprintf(strchr(src,0),"label_%04x ",ush);
        !          1755:                                eol(src);
        !          1756:                                break;
        !          1757:                        case CS_TOGGLE_NODE_MISC:
        !          1758:                                MSHT("TOGGLE_NODE_MISC");
        !          1759:                        case CS_ADJUST_USER_CREDITS:
        !          1760:                                MSHT("ADJUST_USER_CREDITS");
        !          1761:                        case CS_TOGGLE_USER_FLAG:
        !          1762:                                CHCH("TOGGLE_USER_FLAG");
        !          1763:                        case CS_GETNUM:
        !          1764:                                MSHT("GETNUM");
        !          1765:                        case CS_COMPARE_NODE_MISC:
        !          1766:                                MSHT("COMPARE_NODE_MISC");
        !          1767:                        case CS_MSWAIT:
        !          1768:                                MSHT("MSWAIT");
        !          1769:                        case CS_ADJUST_USER_MINUTES:
        !          1770:                                MSHT("ADJUST_USER_MINUTES");
        !          1771:                        case CS_REVERT_TEXT:
        !          1772:                                MSHT("REVERT_TEXT");
        !          1773:                        case CS_THREE_MORE_BYTES:
        !          1774:                                printf("ERROR!  I dont know anything about CS_THREE_MORE_BYTES.\n");
        !          1775:                                printf("Cannot continue.\n");
        !          1776:                                free(labels);
        !          1777:                                return;
        !          1778:                        case CS_MENU:
        !          1779:                                STR("MENU");
        !          1780:                        case CS_PRINT:
        !          1781:                                STR("PRINT");
        !          1782:                        case CS_PRINT_LOCAL:
        !          1783:                                STR("PRINT_LOCAL");
        !          1784:                        case CS_PRINT_REMOTE:
        !          1785:                                STR("PRINT_REMOTE");
        !          1786:                        case CS_PRINTFILE:
        !          1787:                                STR("PRINTFILE");
        !          1788:                        case CS_PRINTFILE_LOCAL:
        !          1789:                                STR("PRINTFILE_LOCAL");
        !          1790:                        case CS_PRINTFILE_REMOTE:
        !          1791:                                STR("PRINTFILE_REMOTE");
        !          1792:                        case CS_YES_NO:
        !          1793:                                STR("YES_NO");
        !          1794:                        case CS_NO_YES:
        !          1795:                                STR("NO_YES");
        !          1796:                        case CS_COMPARE_STR:
        !          1797:                                STR("COMPARE_STR");
        !          1798:                        case CS_COMPARE_WORD:
        !          1799:                                STR("COMPARE_WORD");
        !          1800:                        case CS_EXEC:
        !          1801:                                STR("EXEC");
        !          1802:                        case CS_EXEC_INT:
        !          1803:                                STR("EXEC_INT");
        !          1804:                        case CS_EXEC_BIN:
        !          1805:                                STR("EXEC_BIN");
        !          1806:                        case CS_EXEC_XTRN:
        !          1807:                                STR("EXEC_XTRN");
        !          1808:                        case CS_GETCMD:
        !          1809:                                STR("GETCMD");
        !          1810:                        case CS_LOG:
        !          1811:                                STR("LOG");
        !          1812:                        case CS_MNEMONICS:
        !          1813:                                STR("MNEMONICS");
        !          1814:                        case CS_SETSTR:
        !          1815:                                STR("SETSTR");
        !          1816:                        case CS_SET_MENU_DIR:
        !          1817:                                STR("SET_MENU_DIR");
        !          1818:                        case CS_SET_MENU_FILE:
        !          1819:                                STR("SET_MENU_FILE");
        !          1820:                        case CS_CMDSTR:
        !          1821:                                indenteol=1;
        !          1822:                                STR("CMDSTR");
        !          1823:                        case CS_CHKFILE:
        !          1824:                                STR("CHKFILE");
        !          1825:                        case CS_GET_TEMPLATE:
        !          1826:                                STR("GET_TEMPLATE");
        !          1827:                        case CS_TRASHCAN:
        !          1828:                                STR("TRASHCAN");
        !          1829:                        case CS_CREATE_SIF:
        !          1830:                                STR("CREATE_SIF");
        !          1831:                        case CS_READ_SIF:
        !          1832:                                STR("READ_SIF");
        !          1833:                        case CS_CMDKEYS:
        !          1834:                                indenteol=1;
        !          1835:                                KEYS("CMDKEYS");
        !          1836:                        case CS_COMPARE_KEYS:
        !          1837:                                KEYS("COMPARE_KEYS");
        !          1838:                        case CS_STR_FUNCTION:
        !          1839:                                fread(&uch,1,1,bin);
        !          1840:                                switch(uch) {
        !          1841:                                        case CS_LOGIN:
        !          1842:                                                STR("LOGIN");
        !          1843:                                        case CS_LOAD_TEXT:
        !          1844:                                                STR("LOAD_TEXT");
        !          1845:                                        default:
        !          1846:                                                printf("ERROR!  Unknown string instruction: %02x%02X\n",CS_STR_FUNCTION,uch);
        !          1847:                                                ch=0;
        !          1848:                                                while(ch) fread(&ch,1,1,bin);
        !          1849:                                }
        !          1850:                                break;
        !          1851:                        case CS_COMPARE_ARS:
        !          1852:                                fread(&uch,1,1,bin);
        !          1853:                                p=(char *)malloc(uch);
        !          1854:                                fread(p,uch,1,bin);
        !          1855:                                WRITE_NAME("COMPARE_ARS");
        !          1856:                                sprintf(strchr(src,0),"%s\n",decompile_ars((uchar*)p,uch));
        !          1857:                                free(p);
        !          1858:                                break;
        !          1859:                        case CS_TOGGLE_USER_MISC:
        !          1860:                                MLNG("TOGGLE_USER_MISC");
        !          1861:                        case CS_COMPARE_USER_MISC:
        !          1862:                                MLNG("COMPARE_USER_MISC");
        !          1863:                        case CS_REPLACE_TEXT:
        !          1864:                                MSHTSTR("REPLACE_TEXT");
        !          1865:                        case CS_TOGGLE_USER_CHAT:
        !          1866:                                MLNG("TOGGLE_USER_CHAT");
        !          1867:                        case CS_COMPARE_USER_CHAT:
        !          1868:                                MLNG("COMPARE_USER_CHAT");
        !          1869:                        case CS_TOGGLE_USER_QWK:
        !          1870:                                MLNG("TOGGLE_USER_QWK");
        !          1871:                        case CS_COMPARE_USER_QWK:
        !          1872:                                MLNG("COMPARE_USER_QWK");
        !          1873:                        case CS_SWITCH:
        !          1874:                                indenteol=1;
        !          1875:                                VAR("SWITCH");
        !          1876:                        case CS_CASE:
        !          1877:                                indenteol=1;
        !          1878:                                LNG("CASE");
        !          1879:                        case CS_NET_FUNCTION:
        !          1880:                                fread(&uch,1,1,bin);
        !          1881:                                switch(uch) {
        !          1882:                                        case CS_SOCKET_OPEN:
        !          1883:                                                VAR("SOCKET_OPEN");
        !          1884:                                        case CS_SOCKET_CLOSE:
        !          1885:                                                VAR("SOCKET_CLOSE");
        !          1886:                                        case CS_SOCKET_CONNECT:
        !          1887:                                                MVARVARUST("SOCKET_CONNECT");
        !          1888:                                        case CS_SOCKET_ACCEPT:
        !          1889:                                                VAR("SOCKET_ACCEPT");
        !          1890:                                        case CS_SOCKET_NREAD:
        !          1891:                                                VARVAR("SOCKET_NREAD");
        !          1892:                                        case CS_SOCKET_PEEK:
        !          1893:                                                MVARVARUST("SOCKET_PEEK");
        !          1894:                                        case CS_SOCKET_READ:
        !          1895:                                                MVARVARUST("SOCKET_READ");
        !          1896:                                        case CS_SOCKET_WRITE:
        !          1897:                                                VARVAR("SOCKET_WRITE");
        !          1898:                                        case CS_SOCKET_CHECK:
        !          1899:                                                VAR("SOCKET_CHECK");
        !          1900:                                        case CS_SOCKET_READLINE:
        !          1901:                                                MVARVARUST("SOCKET_READLINE");
        !          1902:                                        case CS_FTP_LOGIN:
        !          1903:                                                VARVARVAR("FTP_LOGIN");
        !          1904:                                        case CS_FTP_LOGOUT:
        !          1905:                                                VAR("FTP_LOGOUT");
        !          1906:                                        case CS_FTP_PWD:
        !          1907:                                                VAR("FTP_PWD");
        !          1908:                                        case CS_FTP_CWD:
        !          1909:                                                VARVAR("FTP_CWD");
        !          1910:                                        case CS_FTP_DIR:
        !          1911:                                                VARVAR("FTP_DIR");
        !          1912:                                        case CS_FTP_PUT:
        !          1913:                                                VARVARVAR("FTP_PUT");
        !          1914:                                        case CS_FTP_GET:
        !          1915:                                                VARVARVAR("FTP_GET");
        !          1916:                                        case CS_FTP_RENAME:
        !          1917:                                                VARVARVAR("FTP_RENAME");
        !          1918:                                        case CS_FTP_DELETE:
        !          1919:                                                VARVAR("FTP_DELETE");
        !          1920:                                        default:
        !          1921:                                                printf("ERROR!  Unknown net function %02x%02X\n",CS_NET_FUNCTION,uch);
        !          1922:                                                printf("Cannot continue.\n");
        !          1923:                                                free(labels);
        !          1924:                                                return;
        !          1925:                                }
        !          1926:                                break;
        !          1927:                        case CS_FIO_FUNCTION:
        !          1928:                                fread(&uch,1,1,bin);
        !          1929:                                switch(uch) {
        !          1930:                                        case FIO_OPEN:
        !          1931:                                                MVARUSTSTR("FOPEN");
        !          1932:                                        case FIO_CLOSE:
        !          1933:                                                VAR("FCLOSE");
        !          1934:                                        case FIO_READ:
        !          1935:                                                MVARVARNZUST("FREAD");
        !          1936:                                        case FIO_READ_VAR:
        !          1937:                                                VARVARVAR("FREAD");
        !          1938:                                        case FIO_WRITE:
        !          1939:                                                MVARVARNZUST("FWRITE");
        !          1940:                                        case FIO_WRITE_VAR:
        !          1941:                                                VARVARVAR("FWRITE");
        !          1942:                                        case FIO_GET_LENGTH:
        !          1943:                                                VARVAR("FGET_LENGTH");
        !          1944:                                        case FIO_EOF:
        !          1945:                                                VAR("FEOF");
        !          1946:                                        case FIO_GET_POS:
        !          1947:                                                VARVAR("FGET_POS");
        !          1948:                                        case FIO_SEEK:
        !          1949:                                                WRITE_NAME("FSEEK");
        !          1950:                                                write_var(bin,src);
        !          1951:                                                write_lng(bin,src);
        !          1952:                                                fread(&ush,2,1,bin);
        !          1953:                                                if(ush==SEEK_CUR)
        !          1954:                                                        strcat(src,"CUR ");
        !          1955:                                                else if(ush==SEEK_END)
        !          1956:                                                        strcat(src,"END ");
        !          1957:                                                else
        !          1958:                                                        sprintf(strchr(src,0), "%d ",ush);
        !          1959:                                                eol(src);
        !          1960:                                                break;
        !          1961:                                        case FIO_SEEK_VAR:
        !          1962:                                                WRITE_NAME("FSEEK");
        !          1963:                                                write_var(bin,src);
        !          1964:                                                write_var(bin,src);
        !          1965:                                                fread(&ush,2,1,bin);
        !          1966:                                                if(ush==SEEK_CUR)
        !          1967:                                                        strcat(src,"CUR ");
        !          1968:                                                else if(ush==SEEK_END)
        !          1969:                                                        strcat(src,"END ");
        !          1970:                                                else
        !          1971:                                                        sprintf(strchr(src,0), "%d ",ush);
        !          1972:                                                eol(src);
        !          1973:                                                break;
        !          1974:                                        case FIO_LOCK:
        !          1975:                                                VARLNG("FLOCK");
        !          1976:                                        case FIO_LOCK_VAR:
        !          1977:                                                VARVAR("FLOCK");
        !          1978:                                        case FIO_UNLOCK:
        !          1979:                                                VARLNG("FUNLOCK");
        !          1980:                                        case FIO_UNLOCK_VAR:
        !          1981:                                                VARVAR("FUNLOCK");
        !          1982:                                        case FIO_SET_LENGTH:
        !          1983:                                                VARLNG("FSET_LENGTH");
        !          1984:                                        case FIO_SET_LENGTH_VAR:
        !          1985:                                                VARVAR("FSET_LENGTH");
        !          1986:                                        case FIO_PRINTF:
        !          1987:                                                WRITE_NAME("FPRINTF");
        !          1988:                                                write_var(bin,src);
        !          1989:                                                write_cstr(bin,src);
        !          1990:                                                fread(&uch, 1, 1, bin);
        !          1991:                                                for(i=0; i<uch; i++) {
        !          1992:                                                        write_var(bin,src);
        !          1993:                                                }
        !          1994:                                                eol(src);
        !          1995:                                                break;
        !          1996:                                        case FIO_SET_ETX:
        !          1997:                                                MUCH("FSET_ETX");
        !          1998:                                        case FIO_GET_TIME:
        !          1999:                                                VARVAR("FGET_TIME");
        !          2000:                                        case FIO_SET_TIME:
        !          2001:                                                VARVAR("FSET_TIME");
        !          2002:                                        case FIO_OPEN_VAR:
        !          2003:                                                MVARUSTVAR("FOPEN");
        !          2004:                                        case FIO_READ_LINE:
        !          2005:                                                VARVAR("FREAD_LINE");
        !          2006:                                        case FIO_FLUSH:
        !          2007:                                                VAR("FFLUSH");
        !          2008:                                        case REMOVE_FILE:
        !          2009:                                                VAR("REMOVE_FILE");
        !          2010:                                        case RENAME_FILE:
        !          2011:                                                VARVAR("RENAME_FILE");
        !          2012:                                        case COPY_FILE:
        !          2013:                                                VARVAR("COPY_FILE");
        !          2014:                                        case MOVE_FILE:
        !          2015:                                                VARVAR("MOVE_FILE");
        !          2016:                                        case GET_FILE_ATTRIB:
        !          2017:                                                VARVAR("GET_FILE_ATTRIB");
        !          2018:                                        case SET_FILE_ATTRIB:
        !          2019:                                                VARVAR("SET_FILE_ATTRIB");
        !          2020:                                        case MAKE_DIR:
        !          2021:                                                VAR("MAKE_DIR");
        !          2022:                                        case CHANGE_DIR:
        !          2023:                                                VAR("CHANGE_DIR");
        !          2024:                                        case REMOVE_DIR:
        !          2025:                                                VAR("REMOVE_DIR");
        !          2026:                                        case OPEN_DIR:
        !          2027:                                                VARVAR("OPEN_DIR");
        !          2028:                                        case READ_DIR:
        !          2029:                                                VARVAR("READ_DIR");
        !          2030:                                        case REWIND_DIR:
        !          2031:                                                VAR("REWIND_DIR");
        !          2032:                                        case CLOSE_DIR:
        !          2033:                                                VAR("CLOSE_DIR");
        !          2034:                                        default:
        !          2035:                                                printf("ERROR!  Unknown file function %02x%02X\n",CS_FIO_FUNCTION,uch);
        !          2036:                                                printf("Cannot continue.\n");
        !          2037:                                                free(labels);
        !          2038:                                                return;
        !          2039:                                }
        !          2040:                                break;
        !          2041:                        case CS_MAIL_READ:
        !          2042:                                NONE("MAIL_READ");
        !          2043:                        case CS_MAIL_READ_SENT:
        !          2044:                                NONE("MAIL_READ_SENT");
        !          2045:                        case CS_MAIL_READ_ALL:
        !          2046:                                NONE("MAIL_READ_ALL");
        !          2047:                        case CS_MAIL_SEND:
        !          2048:                                NONE("MAIL_SEND");
        !          2049:                        case CS_MAIL_SEND_BULK:
        !          2050:                                NONE("MAIL_SEND_BULK");
        !          2051:                        case CS_MAIL_SEND_FILE:
        !          2052:                                NONE("MAIL_SEND_FILE");
        !          2053:                        case CS_MAIL_SEND_FEEDBACK:
        !          2054:                                NONE("MAIL_SEND_FEEDBACK");
        !          2055:                        case CS_MAIL_SEND_NETMAIL:
        !          2056:                                NONE("MAIL_SEND_NETMAIL");
        !          2057:                        case CS_MAIL_SEND_NETFILE:
        !          2058:                                NONE("MAIL_SEND_NETFILE");
        !          2059:                        case CS_LOGOFF:
        !          2060:                                NONE("LOGOFF");
        !          2061:                case CS_LOGOFF_FAST:
        !          2062:                                NONE("LOGOFF_FAST");;
        !          2063:                        case CS_AUTO_MESSAGE:
        !          2064:                                NONE("AUTO_MESSAGE");
        !          2065:                        case CS_MSG_SET_AREA:
        !          2066:                                NONE("MSG_SET_AREA");
        !          2067:                        case CS_MSG_SELECT_AREA:
        !          2068:                                NONE("MSG_SELECT_AREA");
        !          2069:                        case CS_MSG_SHOW_GROUPS:
        !          2070:                                NONE("MSG_SHOW_GROUPS");
        !          2071:                case CS_MSG_SHOW_SUBBOARDS:
        !          2072:                                NONE("MSG_SHOW_SUBBOARDS");;
        !          2073:                        case CS_MSG_GROUP_UP:
        !          2074:                                NONE("MSG_GROUP_UP");
        !          2075:                case CS_MSG_GROUP_DOWN:
        !          2076:                                NONE("MSG_GROUP_DOWN");;
        !          2077:                case CS_MSG_SUBBOARD_UP:
        !          2078:                                NONE("MSG_SUBBOARD_UP");;
        !          2079:                case CS_MSG_SUBBOARD_DOWN:
        !          2080:                                NONE("MSG_SUBBOARD_DOWN");
        !          2081:                        case CS_MSG_GET_SUB_NUM:
        !          2082:                                NONE("MSG_GET_SUB_NUM");
        !          2083:                        case CS_MSG_GET_GRP_NUM:
        !          2084:                                NONE("MSG_GET_GRP_NUM");
        !          2085:                        case CS_MSG_READ:
        !          2086:                                NONE("MSG_READ");
        !          2087:                        case CS_MSG_POST:
        !          2088:                                NONE("MSG_POST");
        !          2089:                        case CS_MSG_QWK:
        !          2090:                                NONE("MSG_QWK");
        !          2091:                        case CS_MSG_PTRS_CFG:
        !          2092:                                NONE("MSG_PTRS_CFG");
        !          2093:                        case CS_MSG_PTRS_REINIT:
        !          2094:                                NONE("MSG_PTRS_REINIT");
        !          2095:                        case CS_MSG_NEW_SCAN_CFG:
        !          2096:                                NONE("MSG_NEW_SCAN_CFG");
        !          2097:                        case CS_MSG_NEW_SCAN:
        !          2098:                                NONE("MSG_NEW_SCAN");
        !          2099:                        case CS_MSG_NEW_SCAN_ALL:
        !          2100:                                NONE("MSG_NEW_SCAN_ALL");
        !          2101:                        case CS_MSG_CONT_SCAN:
        !          2102:                                NONE("MSG_CONT_SCAN");
        !          2103:                        case CS_MSG_CONT_SCAN_ALL:
        !          2104:                                NONE("MSG_CONT_SCAN_ALL");
        !          2105:                        case CS_MSG_BROWSE_SCAN :
        !          2106:                                NONE("MSG_BROWSE_SCAN ");
        !          2107:                        case CS_MSG_BROWSE_SCAN_ALL:
        !          2108:                                NONE("MSG_BROWSE_SCAN_ALL");
        !          2109:                        case CS_MSG_FIND_TEXT:
        !          2110:                                NONE("MSG_FIND_TEXT");
        !          2111:                        case CS_MSG_FIND_TEXT_ALL:
        !          2112:                                NONE("MSG_FIND_TEXT_ALL");
        !          2113:                        case CS_MSG_YOUR_SCAN_CFG:
        !          2114:                                NONE("MSG_YOUR_SCAN_CFG");
        !          2115:                        case CS_MSG_YOUR_SCAN:
        !          2116:                                NONE("MSG_YOUR_SCAN");
        !          2117:                        case CS_MSG_YOUR_SCAN_ALL:
        !          2118:                                NONE("MSG_YOUR_SCAN_ALL");
        !          2119:                        case CS_MSG_NEW_SCAN_SUB:
        !          2120:                                NONE("MSG_NEW_SCAN_SUB");
        !          2121:                        case CS_MSG_SET_GROUP:
        !          2122:                                NONE("MSG_SET_GROUP");
        !          2123:                        case CS_MSG_UNUSED4:
        !          2124:                                NONE("MSG_UNUSED4");
        !          2125:                        case CS_MSG_UNUSED3:
        !          2126:                                NONE("MSG_UNUSED3");
        !          2127:                        case CS_MSG_UNUSED2:
        !          2128:                                NONE("MSG_UNUSED2");
        !          2129:                        case CS_MSG_UNUSED1:
        !          2130:                                NONE("MSG_UNUSED1");
        !          2131:                        case CS_FILE_SET_AREA:
        !          2132:                                NONE("FILE_SET_AREA");
        !          2133:                        case CS_FILE_SELECT_AREA:
        !          2134:                                NONE("FILE_SELECT_AREA");
        !          2135:                        case CS_FILE_SHOW_LIBRARIES:
        !          2136:                                NONE("FILE_SHOW_LIBRARIES");
        !          2137:                        case CS_FILE_SHOW_DIRECTORIES:
        !          2138:                                NONE("FILE_SHOW_DIRECTORIES");
        !          2139:                        case CS_FILE_LIBRARY_UP:
        !          2140:                                NONE("FILE_LIBRARY_UP");
        !          2141:                        case CS_FILE_LIBRARY_DOWN:
        !          2142:                                NONE("FILE_LIBRARY_DOWN");
        !          2143:                        case CS_FILE_DIRECTORY_UP:
        !          2144:                                NONE("FILE_DIRECTORY_UP");
        !          2145:                        case CS_FILE_DIRECTORY_DOWN:
        !          2146:                                NONE("FILE_DIRECTORY_DOWN");
        !          2147:                        case CS_FILE_GET_DIR_NUM:
        !          2148:                                NONE("FILE_GET_DIR_NUM");
        !          2149:                        case CS_FILE_GET_LIB_NUM:
        !          2150:                                NONE("FILE_GET_LIB_NUM");
        !          2151:                        case CS_FILE_LIST:
        !          2152:                                NONE("FILE_LIST");
        !          2153:                        case CS_FILE_LIST_EXTENDED:
        !          2154:                                NONE("FILE_LIST_EXTENDED");
        !          2155:                        case CS_FILE_VIEW:
        !          2156:                                NONE("FILE_VIEW");
        !          2157:                        case CS_FILE_UPLOAD:
        !          2158:                                NONE("FILE_UPLOAD");
        !          2159:                        case CS_FILE_UPLOAD_USER:
        !          2160:                                NONE("FILE_UPLOAD_USER");
        !          2161:                        case CS_FILE_UPLOAD_SYSOP:
        !          2162:                                NONE("FILE_UPLOAD_SYSOP");
        !          2163:                        case CS_FILE_DOWNLOAD:
        !          2164:                                NONE("FILE_DOWNLOAD");
        !          2165:                        case CS_FILE_DOWNLOAD_USER:
        !          2166:                                NONE("FILE_DOWNLOAD_USER");
        !          2167:                        case CS_FILE_DOWNLOAD_BATCH:
        !          2168:                                NONE("FILE_DOWNLOAD_BATCH");
        !          2169:                        case CS_FILE_REMOVE :
        !          2170:                                NONE("FILE_REMOVE ");
        !          2171:                        case CS_FILE_BATCH_SECTION:
        !          2172:                                NONE("FILE_BATCH_SECTION");
        !          2173:                        case CS_FILE_TEMP_SECTION:
        !          2174:                                NONE("FILE_TEMP_SECTION");
        !          2175:                        case CS_FILE_NEW_SCAN_CFG:
        !          2176:                                NONE("FILE_NEW_SCAN_CFG");
        !          2177:                        case CS_FILE_NEW_SCAN:
        !          2178:                                NONE("FILE_NEW_SCAN");
        !          2179:                        case CS_FILE_NEW_SCAN_ALL:
        !          2180:                                NONE("FILE_NEW_SCAN_ALL");
        !          2181:                        case CS_FILE_FIND_TEXT:
        !          2182:                                NONE("FILE_FIND_TEXT");
        !          2183:                        case CS_FILE_FIND_TEXT_ALL:
        !          2184:                                NONE("FILE_FIND_TEXT_ALL");
        !          2185:                        case CS_FILE_FIND_NAME:
        !          2186:                                NONE("FILE_FIND_NAME");
        !          2187:                        case CS_FILE_FIND_NAME_ALL:
        !          2188:                                NONE("FILE_FIND_NAME_ALL");
        !          2189:                        case CS_FILE_PTRS_CFG:
        !          2190:                                NONE("FILE_PTRS_CFG");
        !          2191:                        case CS_FILE_BATCH_ADD:
        !          2192:                                NONE("FILE_BATCH_ADD");
        !          2193:                        case CS_FILE_BATCH_CLEAR:
        !          2194:                                NONE("FILE_BATCH_CLEAR");
        !          2195:                        case CS_FILE_SET_LIBRARY:
        !          2196:                                NONE("FILE_SET_LIBRARY");
        !          2197:                        case CS_FILE_SEND:
        !          2198:                                NONE("FILE_SEND");
        !          2199:                        case CS_FILE_BATCH_ADD_LIST:
        !          2200:                                NONE("FILE_BATCH_ADD_LIST");
        !          2201:                        case CS_FILE_RECEIVE:
        !          2202:                                NONE("FILE_RECEIVE");
        !          2203:                        case CS_NODELIST_ALL:
        !          2204:                                NONE("NODELIST_ALL");
        !          2205:                        case CS_NODELIST_USERS:
        !          2206:                                NONE("NODELIST_USERS");
        !          2207:                        case CS_CHAT_SECTION:
        !          2208:                                NONE("CHAT_SECTION");
        !          2209:                        case CS_USER_DEFAULTS:
        !          2210:                                NONE("USER_DEFAULTS");
        !          2211:                        case CS_USER_EDIT:
        !          2212:                                NONE("USER_EDIT");
        !          2213:                        case CS_TEXT_FILE_SECTION:
        !          2214:                                NONE("TEXT_FILE_SECTION");
        !          2215:                        case CS_INFO_SYSTEM:
        !          2216:                                NONE("INFO_SYSTEM");
        !          2217:                        case CS_INFO_SUBBOARD:
        !          2218:                                NONE("INFO_SUBBOARD");
        !          2219:                        case CS_INFO_DIRECTORY:
        !          2220:                                NONE("INFO_DIRECTORY");
        !          2221:                        case CS_INFO_USER:
        !          2222:                                NONE("INFO_USER");
        !          2223:                        case CS_INFO_VERSION:
        !          2224:                                NONE("INFO_VERSION");
        !          2225:                        case CS_INFO_XFER_POLICY:
        !          2226:                                NONE("INFO_XFER_POLICY");
        !          2227:                        case CS_XTRN_EXEC:
        !          2228:                                NONE("XTRN_EXEC");
        !          2229:                        case CS_XTRN_SECTION:
        !          2230:                                NONE("XTRN_SECTION");
        !          2231:                        case CS_USERLIST_SUB:
        !          2232:                                NONE("USERLIST_SUB");
        !          2233:                        case CS_USERLIST_DIR:
        !          2234:                                NONE("USERLIST_DIR");
        !          2235:                        case CS_USERLIST_ALL:
        !          2236:                                NONE("USERLIST_ALL");
        !          2237:                case CS_USERLIST_LOGONS:
        !          2238:                                NONE("USERLIST_LOGONS");;
        !          2239:                        case CS_PAGE_SYSOP:
        !          2240:                                NONE("PAGE_SYSOP");
        !          2241:                case CS_PRIVATE_CHAT:
        !          2242:                                NONE("PRIVATE_CHAT");;
        !          2243:                        case CS_PRIVATE_MESSAGE:
        !          2244:                        NONE("PRIVATE_MESSAGE");;
        !          2245:                        case CS_MINUTE_BANK:
        !          2246:                                NONE("MINUTE_BANK");
        !          2247:                        case CS_GURU_LOG:
        !          2248:                                NONE("GURU_LOG");
        !          2249:                        case CS_ERROR_LOG:
        !          2250:                                NONE("ERROR_LOG");
        !          2251:                        case CS_SYSTEM_LOG:
        !          2252:                                NONE("SYSTEM_LOG");
        !          2253:                        case CS_SYSTEM_YLOG:
        !          2254:                                NONE("SYSTEM_YLOG");
        !          2255:                        case CS_SYSTEM_STATS:
        !          2256:                                NONE("SYSTEM_STATS");
        !          2257:                        case CS_NODE_STATS:
        !          2258:                                NONE("NODE_STATS");
        !          2259:                        case CS_SHOW_MEM:
        !          2260:                                NONE("SHOW_MEM");
        !          2261:                        case CS_CHANGE_USER:
        !          2262:                                NONE("CHANGE_USER");
        !          2263:                        case CS_ANSI_CAPTURE:
        !          2264:                                NONE("ANSI_CAPTURE");
        !          2265:                        case CS_LIST_TEXT_FILE:
        !          2266:                                NONE("LIST_TEXT_FILE");
        !          2267:                        case CS_EDIT_TEXT_FILE:
        !          2268:                                NONE("EDIT_TEXT_FILE");
        !          2269:                        case CS_FILE_SET_ALT_PATH:
        !          2270:                                NONE("FILE_SET_ALT_PATH");
        !          2271:                        case CS_FILE_RESORT_DIRECTORY:
        !          2272:                                NONE("FILE_RESORT_DIRECTORY");
        !          2273:                        case CS_FILE_GET:
        !          2274:                                NONE("FILE_GET");
        !          2275:                        case CS_FILE_PUT:
        !          2276:                                NONE("FILE_PUT");
        !          2277:                        case CS_FILE_UPLOAD_BULK:
        !          2278:                                NONE("FILE_UPLOAD_BULK");
        !          2279:                        case CS_FILE_FIND_OLD:
        !          2280:                                NONE("FILE_FIND_OLD");
        !          2281:                        case CS_FILE_FIND_OPEN:
        !          2282:                                NONE("FILE_FIND_OPEN");
        !          2283:                        case CS_FILE_FIND_OFFLINE:
        !          2284:                                NONE("FILE_FIND_OFFLINE");
        !          2285:                        case CS_FILE_FIND_OLD_UPLOADS:
        !          2286:                                NONE("FILE_FIND_OLD_UPLOADS");
        !          2287:                        case CS_INC_MAIN_CMDS:
        !          2288:                                NONE("INC_MAIN_CMDS");
        !          2289:                        case CS_INC_FILE_CMDS:
        !          2290:                                NONE("INC_FILE_CMDS");
        !          2291:                        case CS_PRINTFILE_STR:
        !          2292:                                NONE("PRINTFILE_STR");
        !          2293:                        case CS_PAGE_GURU:
        !          2294:                                NONE("PAGE_GURU");
        !          2295:                        case CS_SPY:
        !          2296:                                NONE("SPY");
        !          2297:                        default:
        !          2298:                                printf("ERROR!  Unknown instruction: %02X\n",uch);
        !          2299:                                printf("Cannot continue.\n");
        !          2300:                                free(labels);
        !          2301:                                return;
        !          2302:                }
        !          2303:                if(redo)
        !          2304:                        fputs(src,srcfile);
        !          2305:        }
        !          2306:        free(labels);
        !          2307: }
        !          2308: 
        !          2309: int main(int argc, char **argv)
        !          2310: {
        !          2311:        int             f;
        !          2312:        FILE    *bin;
        !          2313:        FILE    *src;
        !          2314:        char    newname[MAX_PATH+1];
        !          2315:        char    *p;
        !          2316:        char    revision[16];
        !          2317:        FILE    *cache;
        !          2318:        char    cache_line[1024];
        !          2319:        char    *crc,*good,*str;
        !          2320: 
        !          2321:        sscanf("$Revision: 1.34 $", "%*s %s", revision);
        !          2322: 
        !          2323:        printf("\nUNBAJA v%s-%s - Synchronet Baja Shell/Module De-compiler\n"
        !          2324:                ,revision, PLATFORM_DESC);
        !          2325: 
        !          2326:        for(f=1; f<argc; f++) {
        !          2327:                if(!strncmp(argv[f],"-b",2)) {
        !          2328:                        brute_len=atoi(argv[f]+2);
        !          2329:                        if(brute_len) {
        !          2330:                                brute_buf=(char *)malloc(brute_len+1);
        !          2331:                                if(!brute_buf)
        !          2332:                                        brute_len=0;
        !          2333:                                brute_crc_buf=(unsigned long *)malloc(brute_len*sizeof(unsigned long));
        !          2334:                                if(!brute_crc_buf) {
        !          2335:                                        free(brute_buf);
        !          2336:                                        brute_len=0;
        !          2337:                                }
        !          2338:                                if((cache=fopen("unbaja.brute","r"))!=NULL) {
        !          2339:                                        while(fgets(cache_line,sizeof(cache_line),cache)) {
        !          2340:                                                truncnl(cache_line);
        !          2341:                                                crc=strtok(cache_line,",");
        !          2342:                                                if(crc!=NULL) {
        !          2343:                                                        good=strtok(NULL,",");
        !          2344:                                                        if(good!=NULL) {
        !          2345:                                                                str=strtok(NULL,",");
        !          2346:                                                                if(str!=NULL) {
        !          2347:                                                                        add_bruted(strtoul(crc,NULL,16),strtoul(good,NULL,10),str,0);
        !          2348:                                                                }
        !          2349:                                                        }
        !          2350:                                                }
        !          2351:                                        }
        !          2352:                                        fclose(cache);
        !          2353:                                }
        !          2354:                        }
        !          2355:                        printf("Will brute-force up to %d chars\n",brute_len);
        !          2356:                        continue;
        !          2357:                }
        !          2358:                bin=fopen(argv[f],"rb");
        !          2359:                if(bin==NULL)
        !          2360:                        perror(argv[f]);
        !          2361:                else {
        !          2362:                        SAFECOPY(newname, argv[f]);
        !          2363:                        p=strrchr(newname, '.');
        !          2364:                        if(p==NULL)
        !          2365:                                p=strchr(newname,0);
        !          2366:                        strcpy(p,".decompiled");
        !          2367:                        src=fopen(newname,"w");
        !          2368:                        if(src == NULL)
        !          2369:                                perror(newname);
        !          2370:                        else {
        !          2371:                                printf("\nDecompiling %s to %s\n",argv[f],newname);
        !          2372:                                fputs("!include sbbsdefs.inc\n",src);
        !          2373:                                fputs("!include file_io.inc\n",src);
        !          2374:                                fputs("!include dir_attr.inc\n\n",src);
        !          2375:                                decompile(bin, src);
        !          2376:                                fclose(src);
        !          2377:                        }
        !          2378:                        fclose(bin);
        !          2379:                }
        !          2380:        }
        !          2381: 
        !          2382:        return(0);
        !          2383: }
        !          2384: 

unix.superglobalmegacorp.com

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