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

1.1.1.2 ! root        1: /* $Id: unbaja.c,v 1.42 2009/03/20 08:51:08 rswindell Exp $ */
1.1       root        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;
1.1.1.2 ! root      183: uint32_t *brute_crc_buf=NULL;
1.1       root      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:        }
1.1.1.2 ! root      205:        *(int32_t *)p=name;
1.1       root      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++) {
1.1.1.2 ! root      224:                if(*(int32_t *)bruted[i]==name) {
1.1       root      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++) {
1.1.1.2 ! root      237:                if(*(int32_t *)bruted[i]==name && *(bruted[i]+4))
1.1       root      238:                        return(bruted[i]+5);
                    239:        }
                    240:        return(NULL);
                    241: }
                    242: 
                    243: char* bruteforce(unsigned long name)
                    244: {
1.1.1.2 ! root      245:        uint32_t        this_crc=0;
1.1       root      246:        char    *ret;
                    247:        int     counter=0;
                    248:        unsigned char   *pos;
                    249:        size_t  l=0;
1.1.1.2 ! root      250:        size_t  i;
1.1       root      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);
1.1.1.2 ! root      260:        memset(brute_crc_buf,0,brute_len*sizeof(int32_t));
1.1       root      261:        printf("Brute forcing var_%08x\n",name);
1.1.1.2 ! root      262:        this_crc=crc32((char *)brute_buf,0);
1.1       root      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) {
1.1.1.2 ! root      328:        if (*(uint32_t *)key == (*(struct var_table_t *)table).crc) return 0;
        !           329:        if (*(uint32_t *)key < (*(struct var_table_t *)table).crc) return -1;
1.1       root      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: {
1.1.1.2 ! root      357:        int32_t lng;
1.1       root      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: {
1.1.1.2 ! root      384:        int32_t lng;
1.1       root      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: {
1.1.1.2 ! root      392:        int16_t sht;
1.1       root      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: {
1.1.1.2 ! root      400:        uint16_t sht;
1.1       root      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    n;
                    870:        int             equals=0;
                    871:        int             not=0;
                    872: 
                    873:        out=buf;
                    874:        buf[0]=0;
                    875:        for(in=ars;in<ars+len;in++) {
                    876:                switch(*in) {
                    877:                        case AR_NULL:
                    878:                                break;
                    879:                        case AR_OR:
                    880:                                *(out++)='|';
1.1.1.2 ! root      881:                                
1.1       root      882:                                break;
                    883:                        case AR_NOT:
                    884:                                not=1;
                    885:                                break;
                    886:                        case AR_EQUAL:
                    887:                                equals=1;
                    888:                                break;
                    889:                        case AR_BEGNEST:
                    890:                                if(not)
                    891:                                        *(out++)='!';
                    892:                                not=0;
                    893:                                *(out++)='(';
1.1.1.2 ! root      894:                                
1.1       root      895:                                break;
                    896:                        case AR_ENDNEST:
                    897:                                *(out++)=')';
1.1.1.2 ! root      898:                                
1.1       root      899:                                break;
                    900:                        case AR_LEVEL:
                    901:                                *(out++)='$';
                    902:                                *(out++)='L';
1.1.1.2 ! root      903:                                
1.1       root      904:                                break;
                    905:                        case AR_AGE:
                    906:                                *(out++)='$';
                    907:                                *(out++)='A';
1.1.1.2 ! root      908:                                
1.1       root      909:                                break;
                    910:                        case AR_BPS:
                    911:                                *(out++)='$';
                    912:                                *(out++)='B';
1.1.1.2 ! root      913:                                
1.1       root      914:                                break;
                    915:                        case AR_NODE:
                    916:                                *(out++)='$';
                    917:                                *(out++)='N';
1.1.1.2 ! root      918:                                
1.1       root      919:                                break;
                    920:                        case AR_TLEFT:
                    921:                                *(out++)='$';
                    922:                                *(out++)='R';
1.1.1.2 ! root      923:                                
1.1       root      924:                                break;
                    925:                        case AR_TUSED:
                    926:                                *(out++)='$';
                    927:                                *(out++)='O';
1.1.1.2 ! root      928:                                
1.1       root      929:                                break;
                    930:                        case AR_USER:
                    931:                                *(out++)='$';
                    932:                                *(out++)='U';
1.1.1.2 ! root      933:                                
1.1       root      934:                                break;
                    935:                        case AR_TIME:
                    936:                                *(out++)='$';
                    937:                                *(out++)='T';
1.1.1.2 ! root      938:                                
1.1       root      939:                                break;
                    940:                        case AR_PCR:
                    941:                                *(out++)='$';
                    942:                                *(out++)='P';
1.1.1.2 ! root      943:                                
1.1       root      944:                                break;
                    945:                        case AR_FLAG1:
                    946:                                *(out++)='$';
                    947:                                *(out++)='F';
                    948:                                *(out++)='1';
1.1.1.2 ! root      949:                                
1.1       root      950:                                break;
                    951:                        case AR_FLAG2:
                    952:                                *(out++)='$';
                    953:                                *(out++)='F';
                    954:                                *(out++)='2';
1.1.1.2 ! root      955:                                
1.1       root      956:                                break;
                    957:                        case AR_FLAG3:
                    958:                                *(out++)='$';
                    959:                                *(out++)='F';
                    960:                                *(out++)='3';
1.1.1.2 ! root      961:                                
1.1       root      962:                                break;
                    963:                        case AR_FLAG4:
                    964:                                *(out++)='$';
                    965:                                *(out++)='F';
                    966:                                *(out++)='4';
1.1.1.2 ! root      967:                                
1.1       root      968:                                break;
                    969:                        case AR_EXEMPT:
                    970:                                *(out++)='$';
                    971:                                *(out++)='X';
1.1.1.2 ! root      972:                                
1.1       root      973:                                break;
                    974:                        case AR_REST:
                    975:                                *(out++)='$';
                    976:                                *(out++)='Z';
1.1.1.2 ! root      977:                                
1.1       root      978:                                break;
                    979:                        case AR_SEX:
                    980:                                *(out++)='$';
                    981:                                *(out++)='S';
1.1.1.2 ! root      982:                                
1.1       root      983:                                break;
                    984:                        case AR_UDR:
                    985:                                *(out++)='$';
                    986:                                *(out++)='K';
1.1.1.2 ! root      987:                                
1.1       root      988:                                break;
                    989:                        case AR_UDFR:
                    990:                                *(out++)='$';
                    991:                                *(out++)='D';
1.1.1.2 ! root      992:                                
1.1       root      993:                                break;
                    994:                        case AR_EXPIRE:
                    995:                                *(out++)='$';
                    996:                                *(out++)='E';
1.1.1.2 ! root      997:                                
1.1       root      998:                                break;
                    999:                        case AR_CREDIT:
                   1000:                                *(out++)='$';
                   1001:                                *(out++)='C';
1.1.1.2 ! root     1002:                                
1.1       root     1003:                                break;
                   1004:                        case AR_DAY:
                   1005:                                *(out++)='$';
                   1006:                                *(out++)='W';
1.1.1.2 ! root     1007:                                
1.1       root     1008:                                break;
                   1009:                        case AR_ANSI:
                   1010:                                if(not)
                   1011:                                        *(out++)='!';
                   1012:                                not=0;
                   1013:                                *(out++)='$';
                   1014:                                *(out++)='[';
1.1.1.2 ! root     1015:                                
1.1       root     1016:                                break;
                   1017:                        case AR_RIP:
                   1018:                                if(not)
                   1019:                                        *(out++)='!';
                   1020:                                not=0;
                   1021:                                *(out++)='$';
                   1022:                                *(out++)='*';
1.1.1.2 ! root     1023:                                
1.1       root     1024:                                break;
                   1025:                        case AR_LOCAL:
                   1026:                                if(not)
                   1027:                                        *(out++)='!';
                   1028:                                not=0;
                   1029:                                *(out++)='$';
                   1030:                                *(out++)='G';
1.1.1.2 ! root     1031:                                
1.1       root     1032:                                break;
                   1033:                        case AR_GROUP:
                   1034:                                *(out++)='$';
                   1035:                                *(out++)='M';
1.1.1.2 ! root     1036:                                
1.1       root     1037:                                break;
                   1038:                        case AR_SUB:
                   1039:                                *(out++)='$';
                   1040:                                *(out++)='H';
1.1.1.2 ! root     1041:                                
1.1       root     1042:                                break;
                   1043:                        case AR_LIB:
                   1044:                                *(out++)='$';
                   1045:                                *(out++)='I';
1.1.1.2 ! root     1046:                                
1.1       root     1047:                                break;
                   1048:                        case AR_DIR:
                   1049:                                *(out++)='$';
                   1050:                                *(out++)='J';
1.1.1.2 ! root     1051:                                
1.1       root     1052:                                break;
                   1053:                        case AR_EXPERT :
                   1054:                                if(not)
                   1055:                                        *(out++)='!';
                   1056:                                not=0;
                   1057:                                *out=0;
                   1058:                                strcat(out,"EXPERT");
1.1.1.2 ! root     1059:                                out=strchr(out,0);
        !          1060:                                
1.1       root     1061:                                break;
                   1062:                        case AR_SYSOP:
                   1063:                                if(not)
                   1064:                                        *(out++)='!';
                   1065:                                not=0;
                   1066:                                *out=0;
                   1067:                                strcat(out,"SYSOP");
1.1.1.2 ! root     1068:                                out=strchr(out,0);
        !          1069:                                
1.1       root     1070:                                break;
                   1071:                        case AR_QUIET:
                   1072:                                if(not)
                   1073:                                        *(out++)='!';
                   1074:                                not=0;
                   1075:                                *out=0;
                   1076:                                strcat(out,"QUIET");
1.1.1.2 ! root     1077:                                out=strchr(out,0);
        !          1078:                                
1.1       root     1079:                                break;
                   1080:                        case AR_MAIN_CMDS:
                   1081:                                *out=0;
                   1082:                                strcat(out,"MAIN_CMDS");
1.1.1.2 ! root     1083:                                out=strchr(out,0);
        !          1084:                                
1.1       root     1085:                                break;
                   1086:                        case AR_FILE_CMDS:
                   1087:                                *out=0;
                   1088:                                strcat(out,"FILE_CMDS");
1.1.1.2 ! root     1089:                                out=strchr(out,0);
        !          1090:                                
1.1       root     1091:                                break;
                   1092:                        case AR_RANDOM:
                   1093:                                *(out++)='$';
                   1094:                                *(out++)='Q';
1.1.1.2 ! root     1095:                                
1.1       root     1096:                                break;
                   1097:                        case AR_LASTON:
                   1098:                                *(out++)='$';
                   1099:                                *(out++)='Y';
1.1.1.2 ! root     1100:                                
1.1       root     1101:                                break;
                   1102:                        case AR_LOGONS:
                   1103:                                *(out++)='$';
                   1104:                                *(out++)='V';
1.1.1.2 ! root     1105:                                
1.1       root     1106:                                break;
                   1107:                        case AR_WIP:
                   1108:                                if(not)
                   1109:                                        *(out++)='!';
                   1110:                                not=0;
                   1111:                                *out=0;
                   1112:                                strcat(out,"WIP");
1.1.1.2 ! root     1113:                                out=strchr(out,0);
        !          1114:                                
1.1       root     1115:                                break;
                   1116:                        case AR_SUBCODE:
                   1117:                                *out=0;
1.1.1.2 ! root     1118:                                strcat(out,"SUB ");
        !          1119:                                out=strchr(out,0);
        !          1120:                                
1.1       root     1121:                                break;
                   1122:                        case AR_DIRCODE:
                   1123:                                *out=0;
1.1.1.2 ! root     1124:                                strcat(out,"DIR ");
        !          1125:                                out=strchr(out,0);
        !          1126:                                
1.1       root     1127:                                break;
                   1128:                        case AR_OS2:
                   1129:                                if(not)
                   1130:                                        *(out++)='!';
                   1131:                                not=0;
                   1132:                                *out=0;
                   1133:                                strcat(out,"OS2");
1.1.1.2 ! root     1134:                                out=strchr(out,0);
        !          1135:                                
1.1       root     1136:                                break;
                   1137:                        case AR_DOS:
                   1138:                                if(not)
                   1139:                                        *(out++)='!';
                   1140:                                not=0;
                   1141:                                *out=0;
                   1142:                                strcat(out,"DOS");
1.1.1.2 ! root     1143:                                out=strchr(out,0);
        !          1144:                                
1.1       root     1145:                                break;
                   1146:                        case AR_WIN32:
                   1147:                                if(not)
                   1148:                                        *(out++)='!';
                   1149:                                not=0;
                   1150:                                *out=0;
                   1151:                                strcat(out,"WIN32");
1.1.1.2 ! root     1152:                                out=strchr(out,0);
        !          1153:                                
1.1       root     1154:                                break;
                   1155:                        case AR_UNIX:
                   1156:                                if(not)
                   1157:                                        *(out++)='!';
                   1158:                                not=0;
                   1159:                                *out=0;
                   1160:                                strcat(out,"UNIX");
1.1.1.2 ! root     1161:                                out=strchr(out,0);
        !          1162:                                
1.1       root     1163:                                break;
                   1164:                        case AR_LINUX :
                   1165:                                if(not)
                   1166:                                        *(out++)='!';
                   1167:                                not=0;
                   1168:                                *out=0;
                   1169:                                strcat(out,"LINUX");
1.1.1.2 ! root     1170:                                out=strchr(out,0);
        !          1171:                                
1.1       root     1172:                                break;
                   1173:                        case AR_SHELL:
                   1174:                                *out=0;
1.1.1.2 ! root     1175:                                strcat(out,"SHELL ");
        !          1176:                                out=strchr(out,0);
        !          1177:                                
1.1       root     1178:                                break;
                   1179:                        case AR_PROT:
                   1180:                                *out=0;
1.1.1.2 ! root     1181:                                strcat(out,"PROT ");
        !          1182:                                out=strchr(out,0);
        !          1183:                                
        !          1184:                                break;
        !          1185:                        case AR_HOST:
        !          1186:                                *out=0;
        !          1187:                                strcat(out,"HOST ");
        !          1188:                                out=strchr(out,0);
        !          1189:                                
        !          1190:                                break;
        !          1191:                        case AR_IP:
        !          1192:                                *out=0;
        !          1193:                                strcat(out,"IP ");
        !          1194:                                out=strchr(out,0);
        !          1195:                                
1.1       root     1196:                                break;
                   1197:                        case AR_GUEST:
                   1198:                                if(not)
                   1199:                                        *(out++)='!';
                   1200:                                not=0;
                   1201:                                *out=0;
                   1202:                                strcat(out,"GUEST");
1.1.1.2 ! root     1203:                                out=strchr(out,0);
        !          1204:                                
1.1       root     1205:                                break;
                   1206:                        case AR_QNODE:
                   1207:                                if(not)
                   1208:                                        *(out++)='!';
                   1209:                                not=0;
                   1210:                                *out=0;
                   1211:                                strcat(out,"QNODE");
1.1.1.2 ! root     1212:                                out=strchr(out,0);
        !          1213:                                
1.1       root     1214:                                break;
                   1215:                        default:
1.1.1.2 ! root     1216:                                printf("Error decoding AR: %02Xh, offset: %u\n", *in, in-ars);
1.1       root     1217:                                return("Unknown ARS String");
                   1218:                }
                   1219:                switch(*in) {
                   1220:                        case AR_TIME:
                   1221:                                if(not)
                   1222:                                        *(out++)='!';
                   1223:                                if(equals)
                   1224:                                        *(out++)='=';
                   1225:                                not=equals=0;
                   1226:                                in++;
                   1227:                                n=*((short *)in);
                   1228:                                in++;
                   1229:                                out+=sprintf(out,"%02d:%02d",n/60,n%60);
                   1230:                                break;
                   1231:                        case AR_AGE:    /* byte operands */
                   1232:                        case AR_PCR:
                   1233:                        case AR_UDR:
                   1234:                        case AR_UDFR:
                   1235:                        case AR_NODE:
                   1236:                        case AR_LEVEL:
                   1237:                        case AR_TLEFT:
                   1238:                        case AR_TUSED:
                   1239:                                if(not)
                   1240:                                        *(out++)='!';
                   1241:                                if(equals)
                   1242:                                        *(out++)='=';
                   1243:                                not=equals=0;
                   1244:                                in++;
                   1245:                                out+=sprintf(out,"%d",*in);
                   1246:                                break;
                   1247:                        case AR_BPS:    /* int operands */
                   1248:                        case AR_MAIN_CMDS:
                   1249:                        case AR_FILE_CMDS:
                   1250:                        case AR_EXPIRE:
                   1251:                        case AR_CREDIT:
                   1252:                        case AR_USER:
                   1253:                        case AR_RANDOM:
                   1254:                        case AR_LASTON:
                   1255:                        case AR_LOGONS:
                   1256:                                if(not)
                   1257:                                        *(out++)='!';
                   1258:                                if(equals)
                   1259:                                        *(out++)='=';
                   1260:                                not=equals=0;
                   1261:                                in++;
                   1262:                        n=*((short *)in);
                   1263:                                in++;
                   1264:                                out+=sprintf(out,"%d",n);
                   1265:                        break;
                   1266:                        case AR_GROUP:
                   1267:                        case AR_LIB:
                   1268:                        case AR_DIR:
                   1269:                        case AR_SUB:
                   1270:                                if(not)
                   1271:                                        *(out++)='!';
                   1272:                                if(equals)
                   1273:                                        *(out++)='=';
                   1274:                                not=equals=0;
                   1275:                                in++;
                   1276:                        n=*((short *)in);
                   1277:                                n++;              /* convert from to 0 base */
                   1278:                                in++;
                   1279:                                out+=sprintf(out,"%d",n);
                   1280:                        break;
                   1281:                        case AR_SUBCODE:
                   1282:                        case AR_DIRCODE:
                   1283:                        case AR_SHELL:
1.1.1.2 ! root     1284:                        case AR_PROT:
        !          1285:                        case AR_HOST:
        !          1286:                        case AR_IP:
1.1       root     1287:                                if(not)
                   1288:                                        *(out++)='!';
                   1289:                                if(equals)
                   1290:                                        *(out++)='=';
                   1291:                                not=equals=0;
                   1292:                                in++;
                   1293:                                n=sprintf(out,"%s ",in);
                   1294:                                out+=n;
                   1295:                                in+=n-1;
                   1296:                                break;
                   1297:                        case AR_FLAG1:
                   1298:                        case AR_FLAG2:
                   1299:                        case AR_FLAG3:
                   1300:                        case AR_FLAG4:
                   1301:                        case AR_EXEMPT:
                   1302:                        case AR_SEX:
                   1303:                        case AR_REST:
                   1304:                                if(not)
                   1305:                                        *(out++)='!';
                   1306:                                if(equals)
                   1307:                                        *(out++)='=';
                   1308:                                not=equals=0;
                   1309:                                in++;
                   1310:                                *(out++)=*in;
                   1311:                                break;
                   1312:                }
                   1313:        }
                   1314:        *out=0;
                   1315:        return(buf);
                   1316: }
                   1317: 
                   1318: void decompile(FILE *bin, FILE *srcfile)
                   1319: {
                   1320:        int i;
                   1321:        char    ch;
                   1322:        uchar   uch;
                   1323:        ushort  ush;
1.1.1.2 ! root     1324:        int32_t lng;
        !          1325:        int32_t lng2;
1.1       root     1326:        int             usevar=FALSE;
1.1.1.2 ! root     1327:        uint32_t        var=0;
1.1       root     1328:        char    buf[80];
                   1329:        char    *p;
                   1330:        char    src[2048];
                   1331:        int             redo=FALSE;
                   1332:        char    *labels;
                   1333:        size_t  currpos=0;
                   1334: 
                   1335:        currpos=filelength(fileno(bin));
                   1336:        labels=(char *)calloc(1,filelength(fileno(bin)));
                   1337:        if(labels==NULL) {
                   1338:                printf("ERROR allocating memory for labels\n");
                   1339:                return;
                   1340:        }
                   1341:        while(1) {
                   1342:                currpos=ftell(bin);
                   1343: 
                   1344:                if(fread(&uch,1,1,bin)!=1) {
                   1345:                        if(redo)
                   1346:                                break;
                   1347:                        redo=TRUE;
                   1348:                        printf("Second pass...\n");
                   1349:                        rewind(bin);
                   1350:                        continue;
                   1351:                }
                   1352:                src[0]=0;
                   1353:                if(labels[currpos])
                   1354:                        sprintf(src,":label_%04x\n",currpos);
                   1355:                switch(uch) {
                   1356:                        case CS_USE_INT_VAR:
                   1357:                                usevar=TRUE;
                   1358:                                fread(&var,4,1,bin);
                   1359:                                fread(&buf,2,1,bin);    /* offset/length */
                   1360:                                continue;
                   1361:                        case CS_VAR_INSTRUCTION:
                   1362:                                fread(&uch,1,1,bin);
                   1363:                                switch(uch) {
                   1364:                                        case SHOW_VARS:
                   1365:                                                WRITE_NAME("SHOW_VARS");
                   1366:                                                eol(src);
                   1367:                                                break;
                   1368:                                        case PRINT_VAR:
                   1369:                                                VAR("PRINT");
                   1370:                                        case VAR_PRINTF:
                   1371:                                        case VAR_PRINTF_LOCAL:
                   1372:                                                if(uch==VAR_PRINTF) {
                   1373:                                                        WRITE_NAME("PRINTF");
                   1374:                                                }
                   1375:                                                else {
                   1376:                                                        WRITE_NAME("LPRINTF");
                   1377:                                                }
                   1378:                                                write_cstr(bin,src);
                   1379:                                                fread(&uch, 1, 1, bin);
                   1380:                                                for(i=0; i<uch; i++) {
                   1381:                                                        write_var(bin,src);
                   1382:                                                }
                   1383:                                                eol(src);
                   1384:                                                break;
                   1385:                                        case DEFINE_STR_VAR:
                   1386:                                                VAR("STR");
                   1387:                                        case DEFINE_INT_VAR:
                   1388:                                                VAR("INT");
                   1389:                                        case DEFINE_GLOBAL_STR_VAR:
                   1390:                                                VAR("GLOBAL_STR");
                   1391:                                        case DEFINE_GLOBAL_INT_VAR:
                   1392:                                                VAR("GLOBAL_INT");
                   1393:                                        case SET_STR_VAR:
                   1394:                                                VARSTR("SET");
                   1395:                                        case SET_INT_VAR:
                   1396:                                                VARLNG("SET");
                   1397:                                        case COMPARE_STR_VAR:
                   1398:                                                VARSTR("COMPARE");
                   1399:                                        case COMPARE_INT_VAR:
                   1400:                                                VARLNG("COMPARE");
                   1401:                                        case STRNCMP_VAR:
                   1402:                                                UCHVARSTR("STRNCMP");
                   1403:                                        case STRSTR_VAR:
                   1404:                                                VARSTR("STRSTR");
                   1405:                                        case COMPARE_VARS:
                   1406:                                                VARVAR("COMPARE");
                   1407:                                        case STRNCMP_VARS:
                   1408:                                                UCHVARVAR("STRNCMP");
                   1409:                                        case STRSTR_VARS:
                   1410:                                                VARVAR("STRSTR");
                   1411:                                        case COPY_VAR:
                   1412:                                                VARVAR("COPY");
                   1413:                                        case SWAP_VARS:
                   1414:                                                VARVAR("SWAP");
                   1415:                                        case CAT_STR_VAR:
                   1416:                                                VARSTR("STRCAT");
                   1417:                                        case CAT_STR_VARS:
                   1418:                                                VARVAR("STRCAT");
                   1419:                                        case FORMAT_STR_VAR:
                   1420:                                                WRITE_NAME("SPRINTF");
                   1421:                                                write_var(bin,src);
                   1422:                                                write_cstr(bin,src);
                   1423:                                                fread(&uch, 1, 1, bin);
                   1424:                                                for(i=0; i<uch; i++) {
                   1425:                                                        write_var(bin,src);
                   1426:                                                }
                   1427:                                                eol(src);
                   1428:                                                break;
                   1429:                                        case TIME_STR:
                   1430:                                                VARVAR("TIME_STR");
                   1431:                                        case DATE_STR:
                   1432:                                                VARVAR("DATE_STR");
                   1433:                                        case FORMAT_TIME_STR:
                   1434:                                                VARSTRVAR("STRFTIME");
                   1435:                                        case SECOND_STR:
                   1436:                                                VARVAR("SECOND_STR");
                   1437:                                        case STRUPR_VAR:
                   1438:                                                VAR("STRUPR");
                   1439:                                        case STRLWR_VAR:
                   1440:                                                VAR("STRLWR");
                   1441:                                        case ADD_INT_VAR:
                   1442:                                                VARLNG("ADD");
                   1443:                                        case ADD_INT_VARS:
                   1444:                                                VARVAR("ADD");
                   1445:                                        case SUB_INT_VAR:
                   1446:                                                VARLNG("SUB");
                   1447:                                        case SUB_INT_VARS:
                   1448:                                                VARVAR("SUB");
                   1449:                                        case MUL_INT_VAR:
                   1450:                                                VARLNG("MUL");
                   1451:                                        case MUL_INT_VARS:
                   1452:                                                VARVAR("MUL");
                   1453:                                        case DIV_INT_VAR:
                   1454:                                                VARLNG("DIV");
                   1455:                                        case DIV_INT_VARS:
                   1456:                                                VARVAR("DIV");
                   1457:                                        case MOD_INT_VAR:
                   1458:                                                VARLNG("MOD");
                   1459:                                        case MOD_INT_VARS:
                   1460:                                                VARVAR("MOD");
                   1461:                                        case AND_INT_VAR:
                   1462:                                                VARLNG("AND");
                   1463:                                        case AND_INT_VARS:
                   1464:                                                VARVAR("AND");
                   1465:                                        case COMPARE_ANY_BITS:
                   1466:                                                MVARLNG("COMPARE_ANY_BITS");
                   1467:                                        case COMPARE_ALL_BITS:
                   1468:                                                MVARLNG("COMPARE_ALL_BITS");
                   1469:                                        case OR_INT_VAR:
                   1470:                                                VARLNG("OR");
                   1471:                                        case OR_INT_VARS:
                   1472:                                                VARLNG("OR");
                   1473:                                        case NOT_INT_VAR:
                   1474:                                                VARLNG("NOT");
                   1475:                                        case NOT_INT_VARS:
                   1476:                                                VARVAR("NOT");
                   1477:                                        case XOR_INT_VAR:
                   1478:                                                VARLNG("XOR");
                   1479:                                        case XOR_INT_VARS:
                   1480:                                                VARVAR("XOR");
                   1481:                                        case RANDOM_INT_VAR:
                   1482:                                                MVARLNG("RANDOM");
                   1483:                                        case TIME_INT_VAR:
                   1484:                                                VAR("TIME");
                   1485:                                        case DATE_STR_TO_INT:
                   1486:                                                VARVAR("DATE_INT");
                   1487:                                        case STRLEN_INT_VAR:
                   1488:                                                VARVAR("STRLEN");
                   1489:                                        case CRC16_TO_INT:
                   1490:                                                VARVAR("CRC16");
                   1491:                                        case CRC32_TO_INT:
                   1492:                                                VARVAR("CRC32");
                   1493:                                        case FLENGTH_TO_INT:
                   1494:                                                VARVAR("GET_FILE_LENGTH");
                   1495:                                        case CHARVAL_TO_INT:
                   1496:                                                VARVAR("CHARVAL");
                   1497:                                        case GETNUM_VAR:
                   1498:                                                MVARSHT("GETNUM");
                   1499:                                        case GETSTR_VAR:
                   1500:                                                MVARUCH("GETSTR");
                   1501:                                        case GETNAME_VAR:
                   1502:                                                MVARUCH("GETNAME");
                   1503:                                        case GETSTRUPR_VAR:
                   1504:                                                MVARUCH("GETSTRUPR");
                   1505:                                        case GETLINE_VAR:
                   1506:                                                MVARUCH("GETLINE");
                   1507:                                        case SHIFT_STR_VAR:
                   1508:                                                MVARUCH("SHIFT_STR");
                   1509:                                        case GETSTR_MODE:
                   1510:                                                MVARUCHLNG("GETSTR");
                   1511:                                        case TRUNCSP_STR_VAR:
                   1512:                                                VAR("TRUNCSP");
                   1513:                                        case CHKFILE_VAR:
                   1514:                                                VAR("CHKFILE");
                   1515:                                        case PRINTFILE_VAR_MODE:
                   1516:                                                MVARSHT("PRINTFILE");
                   1517:                                        case PRINTTAIL_VAR_MODE:
                   1518:                                                MVARSHTUCH("PRINTTAIL");
                   1519:                                        case CHKSUM_TO_INT:
                   1520:                                                VARVAR("CHKSUM");
                   1521:                                        case STRIP_CTRL_STR_VAR:
                   1522:                                                VAR("STRIP_CTRL");
                   1523:                                        case SEND_FILE_VIA:
                   1524:                                                CHSTR("SEND_FILE_VIA");
                   1525:                                        case SEND_FILE_VIA_VAR:
                   1526:                                                CHVAR("SEND_FILE_VIA");
                   1527:                                        case FTIME_TO_INT:
                   1528:                                                VARVAR("GET_FILE_TIME");
                   1529:                                        case RECEIVE_FILE_VIA:
                   1530:                                                CHSTR("RECEIVE_FILE_VIA");
                   1531:                                        case RECEIVE_FILE_VIA_VAR:
                   1532:                                                CHVAR("RECEIVE_FILE_VIA");
                   1533:                                        case TELNET_GATE_STR:                           /* TELNET_GATE reverses argument order */
                   1534:                                                WRITE_NAME("TELNET_GATE");
                   1535:                                                fread(&lng,4,1,bin);
                   1536:                                                write_cstr(bin,src);
                   1537:                                                if(usevar) {
                   1538:                                                        sprintf(strchr(src,0),"%s ",getvar(var));
                   1539:                                                        usevar=FALSE;
                   1540:                                                } else {
                   1541:                                                        sprintf(strchr(src,0),"%ld ",lng);
                   1542:                                                }
                   1543:                                                eol(src);
                   1544:                                                break;
                   1545:                                        case TELNET_GATE_VAR:                           /* TELNET_GATE reverses argument order */
                   1546:                                                WRITE_NAME("TELNET_GATE");
                   1547:                                                fread(&lng,4,1,bin);
                   1548:                                                fread(&lng2, 1, 4, bin);
                   1549:                                                sprintf(strchr(src,0),"%s ",getvar(lng2));
                   1550:                                                if(usevar) {
                   1551:                                                        sprintf(strchr(src,0),"%s ",getvar(var));
                   1552:                                                        usevar=FALSE;
                   1553:                                                } else {
                   1554:                                                        sprintf(strchr(src,0),"%ld ",lng);
                   1555:                                                }
                   1556:                                                eol(src);
                   1557:                                                break;
                   1558:                                        case COPY_FIRST_CHAR:
                   1559:                                                VARVAR("COPY_FIRST_CHAR");
                   1560:                                        case COMPARE_FIRST_CHAR:
                   1561:                                                VARUCH("COMPARE_FIRST_CHAR");
                   1562:                                        case COPY_CHAR:
                   1563:                                                VAR("COPY_CHAR");
                   1564:                                        case SHIFT_TO_FIRST_CHAR:
                   1565:                                                MVARUCH("SHIFT_TO_FIRST_CHAR");
                   1566:                                        case SHIFT_TO_LAST_CHAR:
                   1567:                                                MVARUCH("SHIFT_TO_LAST_CHAR");
                   1568:                                        case MATCHUSER:
                   1569:                                                VARVAR("MATCHUSER");
                   1570:                                        default:
                   1571:                                                printf("ERROR!  Unknown variable-length instruction: %02x%02X\n",CS_VAR_INSTRUCTION,uch);
                   1572:                                                printf("Cannot continue.\n");
                   1573:                                                free(labels);
                   1574:                                                return;
                   1575:                                }
                   1576:                                break;
                   1577:                        case CS_IF_TRUE:
                   1578:                                indenteol=1;
                   1579:                                NONE("IF_TRUE");
                   1580:                        case CS_IF_FALSE:
                   1581:                                indenteol=1;
                   1582:                                NONE("IF_FALSE");
                   1583:                        case CS_ELSE:
                   1584:                                indent--;
                   1585:                                indenteol=1;
                   1586:                                NONE("ELSE");
                   1587:                        case CS_ENDIF:
                   1588:                                indent--;
                   1589:                                NONE("END_IF");
                   1590:                        case CS_CMD_HOME:
                   1591:                                NONE("CMD_HOME");
                   1592:                        case CS_CMD_POP:
                   1593:                                NONE("CMD_POP");
                   1594:                        case CS_END_CMD:
                   1595:                                indent--;
                   1596:                                NONE("END_CMD");
                   1597:                        case CS_RETURN:
                   1598:                                NONE("RETURN");
                   1599:                        case CS_GETKEY:
                   1600:                                NONE("GETKEY");
                   1601:                        case CS_GETKEYE:
                   1602:                                NONE("GETKEYE");
                   1603:                        case CS_UNGETKEY:
                   1604:                                NONE("UNGETKEY");
                   1605:                        case CS_UNGETSTR:
                   1606:                                NONE("UNGETSTR");
                   1607:                        case CS_PRINTKEY:
                   1608:                                NONE("PRINTKEY");
                   1609:                        case CS_PRINTSTR:
                   1610:                                NONE("PRINTSTR");
                   1611:                        case CS_HANGUP:
                   1612:                                NONE("HANGUP");
                   1613:                        case CS_SYNC:
                   1614:                                NONE("SYNC");
                   1615:                        case CS_ASYNC:
                   1616:                                NONE("ASYNC");
                   1617:                        case CS_CHKSYSPASS:
                   1618:                                NONE("CHKSYSPASS");
                   1619:                        case CS_LOGKEY:
                   1620:                                NONE("LOGKEY");
                   1621:                        case CS_LOGKEY_COMMA:
                   1622:                                NONE("LOGKEY_COMMA");
                   1623:                        case CS_LOGSTR:
                   1624:                                NONE("LOGSTR");
                   1625:                        case CS_CLS:
                   1626:                                NONE("CLS");
                   1627:                        case CS_CRLF:
                   1628:                                NONE("CRLF");
                   1629:                        case CS_PAUSE:
                   1630:                                NONE("PAUSE");
                   1631:                        case CS_PAUSE_RESET:
                   1632:                                NONE("PAUSE_RESET");
                   1633:                        case CS_GETLINES:
                   1634:                                NONE("GETLINES");
                   1635:                        case CS_GETFILESPEC:
                   1636:                                NONE("GETFILESPEC");
                   1637:                        case CS_FINDUSER:
                   1638:                                NONE("FINDUSER");
                   1639:                        case CS_CLEAR_ABORT:
                   1640:                                NONE("CLEAR_ABORT");
                   1641:                        case CS_SELECT_SHELL:
                   1642:                                NONE("SELECT_SHELL");
                   1643:                        case CS_SET_SHELL:
                   1644:                                NONE("SET_SHELL");
                   1645:                        case CS_SELECT_EDITOR:
                   1646:                                NONE("SELECT_EDITOR");
                   1647:                        case CS_SET_EDITOR:
                   1648:                                NONE("SET_EDITOR");
                   1649:                        case CS_INKEY:
                   1650:                                NONE("INKEY");
                   1651:                        case CS_INCHAR:
                   1652:                                NONE("INCHAR");
                   1653:                        case CS_GETTIMELEFT:
                   1654:                                NONE("GETTIMELEFT");
                   1655:                        case CS_SAVELINE:
                   1656:                                NONE("SAVELINE");
                   1657:                        case CS_RESTORELINE:
                   1658:                                NONE("RESTORELINE");
                   1659:                        case CS_IF_GREATER:
                   1660:                                indenteol=1;
                   1661:                                NONE("IF_GREATER");
                   1662:                        case CS_IF_GREATER_OR_EQUAL:
                   1663:                                indenteol=1;
                   1664:                                NONE("IF_GREATER_OR_EQUAL");
                   1665:                        case CS_IF_LESS:
                   1666:                                indenteol=1;
                   1667:                                NONE("IF_LESS");
                   1668:                        case CS_IF_LESS_OR_EQUAL:
                   1669:                                indenteol=1;
                   1670:                                NONE("IF_LESS_OR_EQUAL");
                   1671:                        case CS_DEFAULT:
                   1672:                                indenteol=1;
                   1673:                                NONE("DEFAULT");
                   1674:                        case CS_END_SWITCH:
                   1675:                                indent--;
                   1676:                                NONE("END_SWITCH");
                   1677:                        case CS_END_CASE:
                   1678:                                indent--;
                   1679:                                NONE("END_CASE");
                   1680:                        case CS_PUT_NODE:
                   1681:                                NONE("PUT_NODE");
                   1682:                        case CS_GETCHAR:
                   1683:                                NONE("GETCHAR");
                   1684:                        case CS_ONE_MORE_BYTE:
                   1685:                                fread(&uch,1,1,bin);
                   1686:                                switch(uch) {
                   1687:                                        case CS_ONLINE:
                   1688:                                                NONE("ONLINE");
                   1689:                                        case CS_OFFLINE:
                   1690:                                                NONE("OFFLINE");
                   1691:                                        case CS_NEWUSER:
                   1692:                                                NONE("NEWUSER");
                   1693:                                        case CS_LOGON:
                   1694:                                                NONE("LOGON");
                   1695:                                        case CS_LOGOUT:
                   1696:                                                NONE("LOGOUT");
                   1697:                                        case CS_EXIT:
                   1698:                                                NONE("EXIT");
                   1699:                                        case CS_LOOP_BEGIN:
                   1700:                                                indenteol=1;
                   1701:                                                NONE("LOOP_BEGIN");
                   1702:                                        case CS_CONTINUE_LOOP:
                   1703:                                                NONE("CONTINUE_LOOP");
                   1704:                                        case CS_BREAK_LOOP:
                   1705:                                                NONE("BREAK_LOOP");
                   1706:                                        case CS_END_LOOP:
                   1707:                                                indent--;
                   1708:                                                NONE("END_LOOP");
                   1709:                                        default:
                   1710:                                                printf("ERROR!  Unknown one-byte instruction: %02x%02X\n",CS_ONE_MORE_BYTE,uch);
                   1711:                                }
                   1712:                                break;
                   1713:                        case CS_CMDKEY:
                   1714:                                indenteol=1;
                   1715:                                KEY("CMDKEY");
                   1716:                        case CS_NODE_ACTION:
                   1717:                                MUCH("NODE_ACTION");
                   1718:                        case CS_GETSTR:
                   1719:                                MUCH("GETSTR");
                   1720:                        case CS_GETNAME:
                   1721:                                MUCH("GETNAME");
                   1722:                        case CS_GETSTRUPR:
                   1723:                                MUCH("GETSTRUPR");
                   1724:                        case CS_SHIFT_STR:
                   1725:                                MUCH("SHIFT_STR");
                   1726:                        case CS_COMPARE_KEY:
                   1727:                                KEY("COMPARE_KEY");
                   1728:                        case CS_SETLOGIC:
                   1729:                                LGC("SETLOGIC");
                   1730:                        case CS_SET_USER_LEVEL:
                   1731:                                MUCH("SET_USER_LEVEL");
                   1732:                        case CS_SET_USER_STRING:
                   1733:                                MUCH("SET_USER_STRING");
                   1734:                        case CS_GETLINE:
                   1735:                                MUCH("GETLINE");
                   1736:                        case CS_NODE_STATUS:
                   1737:                                MUCH("NODE_STATUS");
                   1738:                        case CS_CMDCHAR:
                   1739:                                indenteol=1;
                   1740:                                CH("CMDCHAR");
                   1741:                        case CS_COMPARE_CHAR:
                   1742:                                CH("COMPARE_CHAR");
                   1743:                        case CS_MULTINODE_CHAT:
                   1744:                                MUCH("MULTINODE_CHAT");
                   1745:                        case CS_TWO_MORE_BYTES:
                   1746:                                fread(&uch,1,1,bin);
                   1747:                                switch(uch) {
                   1748:                                        case CS_USER_EVENT:
                   1749:                                                MUCH("USER_EVENT");
                   1750:                                        default:
                   1751:                                                printf("ERROR!  Unknown two-byte instruction: %02x%02X\n",CS_ONE_MORE_BYTE,uch);
                   1752:                                }
                   1753:                                break;
                   1754:                        case CS_GOTO:
                   1755:                                fread(&ush,2,1,bin);
                   1756:                                labels[ush]=TRUE;
                   1757:                                WRITE_NAME("GOTO");
                   1758:                                sprintf(strchr(src,0),"label_%04x ",ush);
                   1759:                                eol(src);
                   1760:                                break;
                   1761:                        case CS_CALL:
                   1762:                                fread(&ush,2,1,bin);
                   1763:                                labels[ush]=TRUE;
                   1764:                                WRITE_NAME("CALL");
                   1765:                                sprintf(strchr(src,0),"label_%04x ",ush);
                   1766:                                eol(src);
                   1767:                                break;
                   1768:                        case CS_TOGGLE_NODE_MISC:
                   1769:                                MSHT("TOGGLE_NODE_MISC");
                   1770:                        case CS_ADJUST_USER_CREDITS:
                   1771:                                MSHT("ADJUST_USER_CREDITS");
                   1772:                        case CS_TOGGLE_USER_FLAG:
                   1773:                                CHCH("TOGGLE_USER_FLAG");
                   1774:                        case CS_GETNUM:
                   1775:                                MSHT("GETNUM");
                   1776:                        case CS_COMPARE_NODE_MISC:
                   1777:                                MSHT("COMPARE_NODE_MISC");
                   1778:                        case CS_MSWAIT:
                   1779:                                MSHT("MSWAIT");
                   1780:                        case CS_ADJUST_USER_MINUTES:
                   1781:                                MSHT("ADJUST_USER_MINUTES");
                   1782:                        case CS_REVERT_TEXT:
                   1783:                                MSHT("REVERT_TEXT");
                   1784:                        case CS_THREE_MORE_BYTES:
                   1785:                                printf("ERROR!  I dont know anything about CS_THREE_MORE_BYTES.\n");
                   1786:                                printf("Cannot continue.\n");
                   1787:                                free(labels);
                   1788:                                return;
                   1789:                        case CS_MENU:
                   1790:                                STR("MENU");
                   1791:                        case CS_PRINT:
                   1792:                                STR("PRINT");
                   1793:                        case CS_PRINT_LOCAL:
                   1794:                                STR("PRINT_LOCAL");
                   1795:                        case CS_PRINT_REMOTE:
                   1796:                                STR("PRINT_REMOTE");
                   1797:                        case CS_PRINTFILE:
                   1798:                                STR("PRINTFILE");
                   1799:                        case CS_PRINTFILE_LOCAL:
                   1800:                                STR("PRINTFILE_LOCAL");
                   1801:                        case CS_PRINTFILE_REMOTE:
                   1802:                                STR("PRINTFILE_REMOTE");
                   1803:                        case CS_YES_NO:
                   1804:                                STR("YES_NO");
                   1805:                        case CS_NO_YES:
                   1806:                                STR("NO_YES");
                   1807:                        case CS_COMPARE_STR:
                   1808:                                STR("COMPARE_STR");
                   1809:                        case CS_COMPARE_WORD:
                   1810:                                STR("COMPARE_WORD");
                   1811:                        case CS_EXEC:
                   1812:                                STR("EXEC");
                   1813:                        case CS_EXEC_INT:
                   1814:                                STR("EXEC_INT");
                   1815:                        case CS_EXEC_BIN:
                   1816:                                STR("EXEC_BIN");
                   1817:                        case CS_EXEC_XTRN:
                   1818:                                STR("EXEC_XTRN");
                   1819:                        case CS_GETCMD:
                   1820:                                STR("GETCMD");
                   1821:                        case CS_LOG:
                   1822:                                STR("LOG");
                   1823:                        case CS_MNEMONICS:
                   1824:                                STR("MNEMONICS");
                   1825:                        case CS_SETSTR:
                   1826:                                STR("SETSTR");
                   1827:                        case CS_SET_MENU_DIR:
                   1828:                                STR("SET_MENU_DIR");
                   1829:                        case CS_SET_MENU_FILE:
                   1830:                                STR("SET_MENU_FILE");
                   1831:                        case CS_CMDSTR:
                   1832:                                indenteol=1;
                   1833:                                STR("CMDSTR");
                   1834:                        case CS_CHKFILE:
                   1835:                                STR("CHKFILE");
                   1836:                        case CS_GET_TEMPLATE:
                   1837:                                STR("GET_TEMPLATE");
                   1838:                        case CS_TRASHCAN:
                   1839:                                STR("TRASHCAN");
                   1840:                        case CS_CREATE_SIF:
                   1841:                                STR("CREATE_SIF");
                   1842:                        case CS_READ_SIF:
                   1843:                                STR("READ_SIF");
                   1844:                        case CS_CMDKEYS:
                   1845:                                indenteol=1;
                   1846:                                KEYS("CMDKEYS");
                   1847:                        case CS_COMPARE_KEYS:
                   1848:                                KEYS("COMPARE_KEYS");
                   1849:                        case CS_STR_FUNCTION:
                   1850:                                fread(&uch,1,1,bin);
                   1851:                                switch(uch) {
                   1852:                                        case CS_LOGIN:
                   1853:                                                STR("LOGIN");
                   1854:                                        case CS_LOAD_TEXT:
                   1855:                                                STR("LOAD_TEXT");
                   1856:                                        default:
                   1857:                                                printf("ERROR!  Unknown string instruction: %02x%02X\n",CS_STR_FUNCTION,uch);
                   1858:                                                ch=0;
                   1859:                                                while(ch) fread(&ch,1,1,bin);
                   1860:                                }
                   1861:                                break;
                   1862:                        case CS_COMPARE_ARS:
                   1863:                                fread(&uch,1,1,bin);
                   1864:                                p=(char *)malloc(uch);
                   1865:                                fread(p,uch,1,bin);
                   1866:                                WRITE_NAME("COMPARE_ARS");
                   1867:                                sprintf(strchr(src,0),"%s\n",decompile_ars((uchar*)p,uch));
                   1868:                                free(p);
                   1869:                                break;
                   1870:                        case CS_TOGGLE_USER_MISC:
                   1871:                                MLNG("TOGGLE_USER_MISC");
                   1872:                        case CS_COMPARE_USER_MISC:
                   1873:                                MLNG("COMPARE_USER_MISC");
                   1874:                        case CS_REPLACE_TEXT:
                   1875:                                MSHTSTR("REPLACE_TEXT");
                   1876:                        case CS_TOGGLE_USER_CHAT:
                   1877:                                MLNG("TOGGLE_USER_CHAT");
                   1878:                        case CS_COMPARE_USER_CHAT:
                   1879:                                MLNG("COMPARE_USER_CHAT");
                   1880:                        case CS_TOGGLE_USER_QWK:
                   1881:                                MLNG("TOGGLE_USER_QWK");
                   1882:                        case CS_COMPARE_USER_QWK:
                   1883:                                MLNG("COMPARE_USER_QWK");
                   1884:                        case CS_SWITCH:
                   1885:                                indenteol=1;
                   1886:                                VAR("SWITCH");
                   1887:                        case CS_CASE:
                   1888:                                indenteol=1;
                   1889:                                LNG("CASE");
                   1890:                        case CS_NET_FUNCTION:
                   1891:                                fread(&uch,1,1,bin);
                   1892:                                switch(uch) {
                   1893:                                        case CS_SOCKET_OPEN:
                   1894:                                                VAR("SOCKET_OPEN");
                   1895:                                        case CS_SOCKET_CLOSE:
                   1896:                                                VAR("SOCKET_CLOSE");
                   1897:                                        case CS_SOCKET_CONNECT:
                   1898:                                                MVARVARUST("SOCKET_CONNECT");
                   1899:                                        case CS_SOCKET_ACCEPT:
                   1900:                                                VAR("SOCKET_ACCEPT");
                   1901:                                        case CS_SOCKET_NREAD:
                   1902:                                                VARVAR("SOCKET_NREAD");
                   1903:                                        case CS_SOCKET_PEEK:
                   1904:                                                MVARVARUST("SOCKET_PEEK");
                   1905:                                        case CS_SOCKET_READ:
                   1906:                                                MVARVARUST("SOCKET_READ");
                   1907:                                        case CS_SOCKET_WRITE:
                   1908:                                                VARVAR("SOCKET_WRITE");
                   1909:                                        case CS_SOCKET_CHECK:
                   1910:                                                VAR("SOCKET_CHECK");
                   1911:                                        case CS_SOCKET_READLINE:
                   1912:                                                MVARVARUST("SOCKET_READLINE");
                   1913:                                        case CS_FTP_LOGIN:
                   1914:                                                VARVARVAR("FTP_LOGIN");
                   1915:                                        case CS_FTP_LOGOUT:
                   1916:                                                VAR("FTP_LOGOUT");
                   1917:                                        case CS_FTP_PWD:
                   1918:                                                VAR("FTP_PWD");
                   1919:                                        case CS_FTP_CWD:
                   1920:                                                VARVAR("FTP_CWD");
                   1921:                                        case CS_FTP_DIR:
                   1922:                                                VARVAR("FTP_DIR");
                   1923:                                        case CS_FTP_PUT:
                   1924:                                                VARVARVAR("FTP_PUT");
                   1925:                                        case CS_FTP_GET:
                   1926:                                                VARVARVAR("FTP_GET");
                   1927:                                        case CS_FTP_RENAME:
                   1928:                                                VARVARVAR("FTP_RENAME");
                   1929:                                        case CS_FTP_DELETE:
                   1930:                                                VARVAR("FTP_DELETE");
                   1931:                                        default:
                   1932:                                                printf("ERROR!  Unknown net function %02x%02X\n",CS_NET_FUNCTION,uch);
                   1933:                                                printf("Cannot continue.\n");
                   1934:                                                free(labels);
                   1935:                                                return;
                   1936:                                }
                   1937:                                break;
                   1938:                        case CS_FIO_FUNCTION:
                   1939:                                fread(&uch,1,1,bin);
                   1940:                                switch(uch) {
                   1941:                                        case FIO_OPEN:
                   1942:                                                MVARUSTSTR("FOPEN");
                   1943:                                        case FIO_CLOSE:
                   1944:                                                VAR("FCLOSE");
                   1945:                                        case FIO_READ:
                   1946:                                                MVARVARNZUST("FREAD");
                   1947:                                        case FIO_READ_VAR:
                   1948:                                                VARVARVAR("FREAD");
                   1949:                                        case FIO_WRITE:
                   1950:                                                MVARVARNZUST("FWRITE");
                   1951:                                        case FIO_WRITE_VAR:
                   1952:                                                VARVARVAR("FWRITE");
                   1953:                                        case FIO_GET_LENGTH:
                   1954:                                                VARVAR("FGET_LENGTH");
                   1955:                                        case FIO_EOF:
                   1956:                                                VAR("FEOF");
                   1957:                                        case FIO_GET_POS:
                   1958:                                                VARVAR("FGET_POS");
                   1959:                                        case FIO_SEEK:
                   1960:                                                WRITE_NAME("FSEEK");
                   1961:                                                write_var(bin,src);
                   1962:                                                write_lng(bin,src);
                   1963:                                                fread(&ush,2,1,bin);
                   1964:                                                if(ush==SEEK_CUR)
                   1965:                                                        strcat(src,"CUR ");
                   1966:                                                else if(ush==SEEK_END)
                   1967:                                                        strcat(src,"END ");
                   1968:                                                else
                   1969:                                                        sprintf(strchr(src,0), "%d ",ush);
                   1970:                                                eol(src);
                   1971:                                                break;
                   1972:                                        case FIO_SEEK_VAR:
                   1973:                                                WRITE_NAME("FSEEK");
                   1974:                                                write_var(bin,src);
                   1975:                                                write_var(bin,src);
                   1976:                                                fread(&ush,2,1,bin);
                   1977:                                                if(ush==SEEK_CUR)
                   1978:                                                        strcat(src,"CUR ");
                   1979:                                                else if(ush==SEEK_END)
                   1980:                                                        strcat(src,"END ");
                   1981:                                                else
                   1982:                                                        sprintf(strchr(src,0), "%d ",ush);
                   1983:                                                eol(src);
                   1984:                                                break;
                   1985:                                        case FIO_LOCK:
                   1986:                                                VARLNG("FLOCK");
                   1987:                                        case FIO_LOCK_VAR:
                   1988:                                                VARVAR("FLOCK");
                   1989:                                        case FIO_UNLOCK:
                   1990:                                                VARLNG("FUNLOCK");
                   1991:                                        case FIO_UNLOCK_VAR:
                   1992:                                                VARVAR("FUNLOCK");
                   1993:                                        case FIO_SET_LENGTH:
                   1994:                                                VARLNG("FSET_LENGTH");
                   1995:                                        case FIO_SET_LENGTH_VAR:
                   1996:                                                VARVAR("FSET_LENGTH");
                   1997:                                        case FIO_PRINTF:
                   1998:                                                WRITE_NAME("FPRINTF");
                   1999:                                                write_var(bin,src);
                   2000:                                                write_cstr(bin,src);
                   2001:                                                fread(&uch, 1, 1, bin);
                   2002:                                                for(i=0; i<uch; i++) {
                   2003:                                                        write_var(bin,src);
                   2004:                                                }
                   2005:                                                eol(src);
                   2006:                                                break;
                   2007:                                        case FIO_SET_ETX:
                   2008:                                                MUCH("FSET_ETX");
                   2009:                                        case FIO_GET_TIME:
                   2010:                                                VARVAR("FGET_TIME");
                   2011:                                        case FIO_SET_TIME:
                   2012:                                                VARVAR("FSET_TIME");
                   2013:                                        case FIO_OPEN_VAR:
                   2014:                                                MVARUSTVAR("FOPEN");
                   2015:                                        case FIO_READ_LINE:
                   2016:                                                VARVAR("FREAD_LINE");
                   2017:                                        case FIO_FLUSH:
                   2018:                                                VAR("FFLUSH");
                   2019:                                        case REMOVE_FILE:
                   2020:                                                VAR("REMOVE_FILE");
                   2021:                                        case RENAME_FILE:
                   2022:                                                VARVAR("RENAME_FILE");
                   2023:                                        case COPY_FILE:
                   2024:                                                VARVAR("COPY_FILE");
                   2025:                                        case MOVE_FILE:
                   2026:                                                VARVAR("MOVE_FILE");
                   2027:                                        case GET_FILE_ATTRIB:
                   2028:                                                VARVAR("GET_FILE_ATTRIB");
                   2029:                                        case SET_FILE_ATTRIB:
                   2030:                                                VARVAR("SET_FILE_ATTRIB");
                   2031:                                        case MAKE_DIR:
                   2032:                                                VAR("MAKE_DIR");
                   2033:                                        case CHANGE_DIR:
                   2034:                                                VAR("CHANGE_DIR");
                   2035:                                        case REMOVE_DIR:
                   2036:                                                VAR("REMOVE_DIR");
                   2037:                                        case OPEN_DIR:
                   2038:                                                VARVAR("OPEN_DIR");
                   2039:                                        case READ_DIR:
                   2040:                                                VARVAR("READ_DIR");
                   2041:                                        case REWIND_DIR:
                   2042:                                                VAR("REWIND_DIR");
                   2043:                                        case CLOSE_DIR:
                   2044:                                                VAR("CLOSE_DIR");
                   2045:                                        default:
                   2046:                                                printf("ERROR!  Unknown file function %02x%02X\n",CS_FIO_FUNCTION,uch);
                   2047:                                                printf("Cannot continue.\n");
                   2048:                                                free(labels);
                   2049:                                                return;
                   2050:                                }
                   2051:                                break;
                   2052:                        case CS_MAIL_READ:
                   2053:                                NONE("MAIL_READ");
                   2054:                        case CS_MAIL_READ_SENT:
                   2055:                                NONE("MAIL_READ_SENT");
                   2056:                        case CS_MAIL_READ_ALL:
                   2057:                                NONE("MAIL_READ_ALL");
                   2058:                        case CS_MAIL_SEND:
                   2059:                                NONE("MAIL_SEND");
                   2060:                        case CS_MAIL_SEND_BULK:
                   2061:                                NONE("MAIL_SEND_BULK");
                   2062:                        case CS_MAIL_SEND_FILE:
                   2063:                                NONE("MAIL_SEND_FILE");
                   2064:                        case CS_MAIL_SEND_FEEDBACK:
                   2065:                                NONE("MAIL_SEND_FEEDBACK");
                   2066:                        case CS_MAIL_SEND_NETMAIL:
                   2067:                                NONE("MAIL_SEND_NETMAIL");
                   2068:                        case CS_MAIL_SEND_NETFILE:
                   2069:                                NONE("MAIL_SEND_NETFILE");
                   2070:                        case CS_LOGOFF:
                   2071:                                NONE("LOGOFF");
                   2072:                case CS_LOGOFF_FAST:
                   2073:                                NONE("LOGOFF_FAST");;
                   2074:                        case CS_AUTO_MESSAGE:
                   2075:                                NONE("AUTO_MESSAGE");
                   2076:                        case CS_MSG_SET_AREA:
                   2077:                                NONE("MSG_SET_AREA");
                   2078:                        case CS_MSG_SELECT_AREA:
                   2079:                                NONE("MSG_SELECT_AREA");
                   2080:                        case CS_MSG_SHOW_GROUPS:
                   2081:                                NONE("MSG_SHOW_GROUPS");
                   2082:                case CS_MSG_SHOW_SUBBOARDS:
                   2083:                                NONE("MSG_SHOW_SUBBOARDS");;
                   2084:                        case CS_MSG_GROUP_UP:
                   2085:                                NONE("MSG_GROUP_UP");
                   2086:                case CS_MSG_GROUP_DOWN:
                   2087:                                NONE("MSG_GROUP_DOWN");;
                   2088:                case CS_MSG_SUBBOARD_UP:
                   2089:                                NONE("MSG_SUBBOARD_UP");;
                   2090:                case CS_MSG_SUBBOARD_DOWN:
                   2091:                                NONE("MSG_SUBBOARD_DOWN");
                   2092:                        case CS_MSG_GET_SUB_NUM:
                   2093:                                NONE("MSG_GET_SUB_NUM");
                   2094:                        case CS_MSG_GET_GRP_NUM:
                   2095:                                NONE("MSG_GET_GRP_NUM");
                   2096:                        case CS_MSG_READ:
                   2097:                                NONE("MSG_READ");
                   2098:                        case CS_MSG_POST:
                   2099:                                NONE("MSG_POST");
                   2100:                        case CS_MSG_QWK:
                   2101:                                NONE("MSG_QWK");
                   2102:                        case CS_MSG_PTRS_CFG:
                   2103:                                NONE("MSG_PTRS_CFG");
                   2104:                        case CS_MSG_PTRS_REINIT:
                   2105:                                NONE("MSG_PTRS_REINIT");
                   2106:                        case CS_MSG_NEW_SCAN_CFG:
                   2107:                                NONE("MSG_NEW_SCAN_CFG");
                   2108:                        case CS_MSG_NEW_SCAN:
                   2109:                                NONE("MSG_NEW_SCAN");
                   2110:                        case CS_MSG_NEW_SCAN_ALL:
                   2111:                                NONE("MSG_NEW_SCAN_ALL");
                   2112:                        case CS_MSG_CONT_SCAN:
                   2113:                                NONE("MSG_CONT_SCAN");
                   2114:                        case CS_MSG_CONT_SCAN_ALL:
                   2115:                                NONE("MSG_CONT_SCAN_ALL");
                   2116:                        case CS_MSG_BROWSE_SCAN :
                   2117:                                NONE("MSG_BROWSE_SCAN ");
                   2118:                        case CS_MSG_BROWSE_SCAN_ALL:
                   2119:                                NONE("MSG_BROWSE_SCAN_ALL");
                   2120:                        case CS_MSG_FIND_TEXT:
                   2121:                                NONE("MSG_FIND_TEXT");
                   2122:                        case CS_MSG_FIND_TEXT_ALL:
                   2123:                                NONE("MSG_FIND_TEXT_ALL");
                   2124:                        case CS_MSG_YOUR_SCAN_CFG:
                   2125:                                NONE("MSG_YOUR_SCAN_CFG");
                   2126:                        case CS_MSG_YOUR_SCAN:
                   2127:                                NONE("MSG_YOUR_SCAN");
                   2128:                        case CS_MSG_YOUR_SCAN_ALL:
                   2129:                                NONE("MSG_YOUR_SCAN_ALL");
                   2130:                        case CS_MSG_NEW_SCAN_SUB:
                   2131:                                NONE("MSG_NEW_SCAN_SUB");
                   2132:                        case CS_MSG_SET_GROUP:
                   2133:                                NONE("MSG_SET_GROUP");
                   2134:                        case CS_MSG_UNUSED4:
                   2135:                                NONE("MSG_UNUSED4");
                   2136:                        case CS_MSG_UNUSED3:
                   2137:                                NONE("MSG_UNUSED3");
                   2138:                        case CS_MSG_UNUSED2:
                   2139:                                NONE("MSG_UNUSED2");
                   2140:                        case CS_MSG_UNUSED1:
                   2141:                                NONE("MSG_UNUSED1");
                   2142:                        case CS_FILE_SET_AREA:
                   2143:                                NONE("FILE_SET_AREA");
                   2144:                        case CS_FILE_SELECT_AREA:
                   2145:                                NONE("FILE_SELECT_AREA");
                   2146:                        case CS_FILE_SHOW_LIBRARIES:
                   2147:                                NONE("FILE_SHOW_LIBRARIES");
                   2148:                        case CS_FILE_SHOW_DIRECTORIES:
                   2149:                                NONE("FILE_SHOW_DIRECTORIES");
                   2150:                        case CS_FILE_LIBRARY_UP:
                   2151:                                NONE("FILE_LIBRARY_UP");
                   2152:                        case CS_FILE_LIBRARY_DOWN:
                   2153:                                NONE("FILE_LIBRARY_DOWN");
                   2154:                        case CS_FILE_DIRECTORY_UP:
                   2155:                                NONE("FILE_DIRECTORY_UP");
                   2156:                        case CS_FILE_DIRECTORY_DOWN:
                   2157:                                NONE("FILE_DIRECTORY_DOWN");
                   2158:                        case CS_FILE_GET_DIR_NUM:
                   2159:                                NONE("FILE_GET_DIR_NUM");
                   2160:                        case CS_FILE_GET_LIB_NUM:
                   2161:                                NONE("FILE_GET_LIB_NUM");
                   2162:                        case CS_FILE_LIST:
                   2163:                                NONE("FILE_LIST");
                   2164:                        case CS_FILE_LIST_EXTENDED:
                   2165:                                NONE("FILE_LIST_EXTENDED");
                   2166:                        case CS_FILE_VIEW:
                   2167:                                NONE("FILE_VIEW");
                   2168:                        case CS_FILE_UPLOAD:
                   2169:                                NONE("FILE_UPLOAD");
                   2170:                        case CS_FILE_UPLOAD_USER:
                   2171:                                NONE("FILE_UPLOAD_USER");
                   2172:                        case CS_FILE_UPLOAD_SYSOP:
                   2173:                                NONE("FILE_UPLOAD_SYSOP");
                   2174:                        case CS_FILE_DOWNLOAD:
                   2175:                                NONE("FILE_DOWNLOAD");
                   2176:                        case CS_FILE_DOWNLOAD_USER:
                   2177:                                NONE("FILE_DOWNLOAD_USER");
                   2178:                        case CS_FILE_DOWNLOAD_BATCH:
                   2179:                                NONE("FILE_DOWNLOAD_BATCH");
                   2180:                        case CS_FILE_REMOVE :
                   2181:                                NONE("FILE_REMOVE ");
                   2182:                        case CS_FILE_BATCH_SECTION:
                   2183:                                NONE("FILE_BATCH_SECTION");
                   2184:                        case CS_FILE_TEMP_SECTION:
                   2185:                                NONE("FILE_TEMP_SECTION");
                   2186:                        case CS_FILE_NEW_SCAN_CFG:
                   2187:                                NONE("FILE_NEW_SCAN_CFG");
                   2188:                        case CS_FILE_NEW_SCAN:
                   2189:                                NONE("FILE_NEW_SCAN");
                   2190:                        case CS_FILE_NEW_SCAN_ALL:
                   2191:                                NONE("FILE_NEW_SCAN_ALL");
                   2192:                        case CS_FILE_FIND_TEXT:
                   2193:                                NONE("FILE_FIND_TEXT");
                   2194:                        case CS_FILE_FIND_TEXT_ALL:
                   2195:                                NONE("FILE_FIND_TEXT_ALL");
                   2196:                        case CS_FILE_FIND_NAME:
                   2197:                                NONE("FILE_FIND_NAME");
                   2198:                        case CS_FILE_FIND_NAME_ALL:
                   2199:                                NONE("FILE_FIND_NAME_ALL");
                   2200:                        case CS_FILE_PTRS_CFG:
                   2201:                                NONE("FILE_PTRS_CFG");
                   2202:                        case CS_FILE_BATCH_ADD:
                   2203:                                NONE("FILE_BATCH_ADD");
                   2204:                        case CS_FILE_BATCH_CLEAR:
                   2205:                                NONE("FILE_BATCH_CLEAR");
                   2206:                        case CS_FILE_SET_LIBRARY:
                   2207:                                NONE("FILE_SET_LIBRARY");
                   2208:                        case CS_FILE_SEND:
                   2209:                                NONE("FILE_SEND");
                   2210:                        case CS_FILE_BATCH_ADD_LIST:
                   2211:                                NONE("FILE_BATCH_ADD_LIST");
                   2212:                        case CS_FILE_RECEIVE:
                   2213:                                NONE("FILE_RECEIVE");
                   2214:                        case CS_NODELIST_ALL:
                   2215:                                NONE("NODELIST_ALL");
                   2216:                        case CS_NODELIST_USERS:
                   2217:                                NONE("NODELIST_USERS");
                   2218:                        case CS_CHAT_SECTION:
                   2219:                                NONE("CHAT_SECTION");
                   2220:                        case CS_USER_DEFAULTS:
                   2221:                                NONE("USER_DEFAULTS");
                   2222:                        case CS_USER_EDIT:
                   2223:                                NONE("USER_EDIT");
                   2224:                        case CS_TEXT_FILE_SECTION:
                   2225:                                NONE("TEXT_FILE_SECTION");
                   2226:                        case CS_INFO_SYSTEM:
                   2227:                                NONE("INFO_SYSTEM");
                   2228:                        case CS_INFO_SUBBOARD:
                   2229:                                NONE("INFO_SUBBOARD");
                   2230:                        case CS_INFO_DIRECTORY:
                   2231:                                NONE("INFO_DIRECTORY");
                   2232:                        case CS_INFO_USER:
                   2233:                                NONE("INFO_USER");
                   2234:                        case CS_INFO_VERSION:
                   2235:                                NONE("INFO_VERSION");
                   2236:                        case CS_INFO_XFER_POLICY:
                   2237:                                NONE("INFO_XFER_POLICY");
                   2238:                        case CS_XTRN_EXEC:
                   2239:                                NONE("XTRN_EXEC");
                   2240:                        case CS_XTRN_SECTION:
                   2241:                                NONE("XTRN_SECTION");
                   2242:                        case CS_USERLIST_SUB:
                   2243:                                NONE("USERLIST_SUB");
                   2244:                        case CS_USERLIST_DIR:
                   2245:                                NONE("USERLIST_DIR");
                   2246:                        case CS_USERLIST_ALL:
                   2247:                                NONE("USERLIST_ALL");
                   2248:                case CS_USERLIST_LOGONS:
                   2249:                                NONE("USERLIST_LOGONS");;
                   2250:                        case CS_PAGE_SYSOP:
                   2251:                                NONE("PAGE_SYSOP");
                   2252:                case CS_PRIVATE_CHAT:
                   2253:                                NONE("PRIVATE_CHAT");;
                   2254:                        case CS_PRIVATE_MESSAGE:
                   2255:                        NONE("PRIVATE_MESSAGE");;
                   2256:                        case CS_MINUTE_BANK:
                   2257:                                NONE("MINUTE_BANK");
                   2258:                        case CS_GURU_LOG:
                   2259:                                NONE("GURU_LOG");
                   2260:                        case CS_ERROR_LOG:
                   2261:                                NONE("ERROR_LOG");
                   2262:                        case CS_SYSTEM_LOG:
                   2263:                                NONE("SYSTEM_LOG");
                   2264:                        case CS_SYSTEM_YLOG:
                   2265:                                NONE("SYSTEM_YLOG");
                   2266:                        case CS_SYSTEM_STATS:
                   2267:                                NONE("SYSTEM_STATS");
                   2268:                        case CS_NODE_STATS:
                   2269:                                NONE("NODE_STATS");
                   2270:                        case CS_SHOW_MEM:
                   2271:                                NONE("SHOW_MEM");
                   2272:                        case CS_CHANGE_USER:
                   2273:                                NONE("CHANGE_USER");
                   2274:                        case CS_ANSI_CAPTURE:
                   2275:                                NONE("ANSI_CAPTURE");
                   2276:                        case CS_LIST_TEXT_FILE:
                   2277:                                NONE("LIST_TEXT_FILE");
                   2278:                        case CS_EDIT_TEXT_FILE:
                   2279:                                NONE("EDIT_TEXT_FILE");
                   2280:                        case CS_FILE_SET_ALT_PATH:
                   2281:                                NONE("FILE_SET_ALT_PATH");
                   2282:                        case CS_FILE_RESORT_DIRECTORY:
                   2283:                                NONE("FILE_RESORT_DIRECTORY");
                   2284:                        case CS_FILE_GET:
                   2285:                                NONE("FILE_GET");
                   2286:                        case CS_FILE_PUT:
                   2287:                                NONE("FILE_PUT");
                   2288:                        case CS_FILE_UPLOAD_BULK:
                   2289:                                NONE("FILE_UPLOAD_BULK");
                   2290:                        case CS_FILE_FIND_OLD:
                   2291:                                NONE("FILE_FIND_OLD");
                   2292:                        case CS_FILE_FIND_OPEN:
                   2293:                                NONE("FILE_FIND_OPEN");
                   2294:                        case CS_FILE_FIND_OFFLINE:
                   2295:                                NONE("FILE_FIND_OFFLINE");
                   2296:                        case CS_FILE_FIND_OLD_UPLOADS:
                   2297:                                NONE("FILE_FIND_OLD_UPLOADS");
                   2298:                        case CS_INC_MAIN_CMDS:
                   2299:                                NONE("INC_MAIN_CMDS");
                   2300:                        case CS_INC_FILE_CMDS:
                   2301:                                NONE("INC_FILE_CMDS");
                   2302:                        case CS_PRINTFILE_STR:
                   2303:                                NONE("PRINTFILE_STR");
                   2304:                        case CS_PAGE_GURU:
                   2305:                                NONE("PAGE_GURU");
                   2306:                        case CS_SPY:
                   2307:                                NONE("SPY");
                   2308:                        default:
                   2309:                                printf("ERROR!  Unknown instruction: %02X\n",uch);
                   2310:                                printf("Cannot continue.\n");
                   2311:                                free(labels);
                   2312:                                return;
                   2313:                }
                   2314:                if(redo)
                   2315:                        fputs(src,srcfile);
                   2316:        }
                   2317:        free(labels);
                   2318: }
                   2319: 
                   2320: int main(int argc, char **argv)
                   2321: {
                   2322:        int             f;
                   2323:        FILE    *bin;
                   2324:        FILE    *src;
                   2325:        char    newname[MAX_PATH+1];
                   2326:        char    *p;
                   2327:        char    revision[16];
                   2328:        FILE    *cache;
                   2329:        char    cache_line[1024];
                   2330:        char    *crc,*good,*str;
                   2331: 
1.1.1.2 ! root     2332:        sscanf("$Revision: 1.42 $", "%*s %s", revision);
1.1       root     2333: 
                   2334:        printf("\nUNBAJA v%s-%s - Synchronet Baja Shell/Module De-compiler\n"
                   2335:                ,revision, PLATFORM_DESC);
                   2336: 
                   2337:        for(f=1; f<argc; f++) {
                   2338:                if(!strncmp(argv[f],"-b",2)) {
                   2339:                        brute_len=atoi(argv[f]+2);
                   2340:                        if(brute_len) {
                   2341:                                brute_buf=(char *)malloc(brute_len+1);
                   2342:                                if(!brute_buf)
                   2343:                                        brute_len=0;
1.1.1.2 ! root     2344:                                brute_crc_buf=(uint32_t *)malloc(brute_len*sizeof(uint32_t));
1.1       root     2345:                                if(!brute_crc_buf) {
                   2346:                                        free(brute_buf);
                   2347:                                        brute_len=0;
                   2348:                                }
                   2349:                                if((cache=fopen("unbaja.brute","r"))!=NULL) {
                   2350:                                        while(fgets(cache_line,sizeof(cache_line),cache)) {
                   2351:                                                truncnl(cache_line);
                   2352:                                                crc=strtok(cache_line,",");
                   2353:                                                if(crc!=NULL) {
                   2354:                                                        good=strtok(NULL,",");
                   2355:                                                        if(good!=NULL) {
                   2356:                                                                str=strtok(NULL,",");
                   2357:                                                                if(str!=NULL) {
                   2358:                                                                        add_bruted(strtoul(crc,NULL,16),strtoul(good,NULL,10),str,0);
                   2359:                                                                }
                   2360:                                                        }
                   2361:                                                }
                   2362:                                        }
                   2363:                                        fclose(cache);
                   2364:                                }
                   2365:                        }
                   2366:                        printf("Will brute-force up to %d chars\n",brute_len);
                   2367:                        continue;
                   2368:                }
                   2369:                bin=fopen(argv[f],"rb");
                   2370:                if(bin==NULL)
                   2371:                        perror(argv[f]);
                   2372:                else {
                   2373:                        SAFECOPY(newname, argv[f]);
                   2374:                        p=strrchr(newname, '.');
                   2375:                        if(p==NULL)
                   2376:                                p=strchr(newname,0);
                   2377:                        strcpy(p,".decompiled");
                   2378:                        src=fopen(newname,"w");
                   2379:                        if(src == NULL)
                   2380:                                perror(newname);
                   2381:                        else {
                   2382:                                printf("\nDecompiling %s to %s\n",argv[f],newname);
                   2383:                                fputs("!include sbbsdefs.inc\n",src);
                   2384:                                fputs("!include file_io.inc\n",src);
                   2385:                                fputs("!include dir_attr.inc\n\n",src);
                   2386:                                decompile(bin, src);
                   2387:                                fclose(src);
                   2388:                        }
                   2389:                        fclose(bin);
                   2390:                }
                   2391:        }
                   2392: 
                   2393:        return(0);
                   2394: }
                   2395: 

unix.superglobalmegacorp.com

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