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