[BACK]Return to id.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / parse

Annotation of OpenXM_contrib2/asir2000/parse/id.c, Revision 1.1

1.1     ! noro        1: /* $OpenXM: OpenXM/src/asir99/parse/id.c,v 1.1.1.1 1999/11/10 08:12:34 noro Exp $ */
        !             2: #include <stdio.h>
        !             3:
        !             4: static table1(),namemain(),host(),cgen(),instruction();
        !             5:
        !             6: #define MOD 37
        !             7: #define MU 0xa9
        !             8:
        !             9: static unsigned int table[37] = {
        !            10: 0x951abd73,0x13945025,0x3aade018,0x9eabf429,
        !            11: 0xa93f9dc1,0x0e4250b8,0x7eacdf20,0x5edf4cf1,
        !            12: 0x15ccd258,0xfe254fba,0xce4ab7ec,0x85be6c82,
        !            13: 0x35de8043,0xcafc9597,0x0e6237a8,0x16c00729,
        !            14: 0x1622eb3c,0x16d23b40,0xada88ff1,0xf21647cd,
        !            15: 0xc4ce7500,0xac501ff2,0x9e254cc4,0x1e52f533,
        !            16: 0x1fa449cb,0x309aaa45,0x78ae06e3,0x1f3858b2,
        !            17: 0x781fdb92,0xa79eb329,0x7613effb,0xc01f87d1,
        !            18: 0xad4fc2ec,0x9e60acb4,0xb41fdbb3,0x1facf09d,
        !            19: 0x1fd027a3,
        !            20: };
        !            21:
        !            22: static int p[7] = { 5, 7, 13, 23, 29, 61, 59 };
        !            23: static int m[7] = { 1, 4, 9, 12, 16, 57, 51 };
        !            24: static int s[7] = { 0, 3, 6, 10, 15, 20, 26 };
        !            25:
        !            26: static table1(seed,index,tab,r)
        !            27: unsigned int seed;
        !            28: int index;
        !            29: unsigned int *tab,*r;
        !            30: {
        !            31:        unsigned int v0,v1,v2,v3,v;
        !            32:
        !            33:        v3 = seed & 0xff;
        !            34:        v2 = ((seed & 0xff00) >> 8) ^ v3;
        !            35:        v1 = ((seed & 0xff0000) >> 16) ^ v2;
        !            36:        v0 = ((seed & 0xff000000) >> 24) ^ v1;
        !            37:        v = tab[index];
        !            38:        *r = ((((v0&0xff)<<24)|((v1&0xff)<<16)|((v2&0xff)<<8)|(v3&0xff))^v);
        !            39: }
        !            40:
        !            41: static namemain(namebuf,id)
        !            42: char *namebuf;
        !            43: unsigned int *id;
        !            44: {
        !            45:        unsigned int v,i,b[4];
        !            46:
        !            47:        v = 0;
        !            48:        while ( 1 ) {
        !            49:                for ( i = 0; i < 4; i++ ) b[i] = 0;
        !            50:                for ( i = 0; ( i < 4 ) && *namebuf; namebuf++,i++ )
        !            51:                        b[i] = (int) *namebuf;
        !            52:                v ^= ( ( b[3] & 0xff ) << 24 |
        !            53:                       ( b[2] & 0xff ) << 16 |
        !            54:                       ( b[1] & 0xff ) << 8  |
        !            55:                       ( b[0] & 0xff ) );
        !            56:                if ( *namebuf == 0 ) {
        !            57:                         *id = v; return;
        !            58:                 }
        !            59:        }
        !            60: }
        !            61:
        !            62: static host(id)
        !            63: unsigned int *id;
        !            64: {
        !            65:        char name[BUFSIZ];
        !            66:
        !            67: #if !defined(_PA_RISC1_1)
        !            68:        if ( !(*id = gethostid()) ) {
        !            69: #endif
        !            70:                gethostname(name,BUFSIZ);
        !            71:                if ( strlen(name) > 0x40 )
        !            72:                        name[0x40] = 0;
        !            73:                namemain(name,id);
        !            74: #if !defined(_PA_RISC1_1)
        !            75:        }
        !            76: #endif
        !            77: }
        !            78:
        !            79: static cgen(m1,m2,m3)
        !            80: unsigned m1,m2,m3;
        !            81: {
        !            82:        unsigned int n1,n2,n3,v1;
        !            83:        unsigned short xml;
        !            84:        unsigned int id;
        !            85:        int i;
        !            86:
        !            87:        host(&id);
        !            88:        table1(id,id % MOD,table,&n1);
        !            89:        if ( n1 != m1 )
        !            90:                return 0;
        !            91:        xml = ((unsigned short)(m2&0xffff))^((unsigned short)(table[id%MOD]&0xffff));
        !            92:        if ( ((xml>>8)^(xml&0xff)) != MU )
        !            93:                return 0;
        !            94:        n3 = 0;
        !            95:        for ( i = 0; i < 7; i++ )
        !            96:                n3 |= ( ( ( ( m1 % p[i] ) * m[i] + ( m2 % p[i] ) ) % p[i] ) << s[i] );
        !            97:        if ( n3 != m3 )
        !            98:                return 0;
        !            99:        return 1;
        !           100: }
        !           101:
        !           102: check_key()
        !           103: {
        !           104:        unsigned int n1,n2,n3;
        !           105:        int c;
        !           106:        FILE *fp;
        !           107:        char key_file[BUFSIZ],buf[BUFSIZ];
        !           108:        extern char *asir_libdir;
        !           109:        char *asir_key;
        !           110:
        !           111:        asir_key = (char *)getenv("ASIR_KEY");
        !           112:        if ( asir_key )
        !           113:                strcpy(key_file,asir_key);
        !           114:        else
        !           115:                key_file[0] = 0;
        !           116:        if ( !key_file[0] || !(fp = fopen(key_file,"r")) ) {
        !           117:                sprintf(key_file,"%s/asir_key",".");
        !           118:                if ( !(fp = fopen(key_file,"r")) ) {
        !           119:                        sprintf(key_file,"%s/asir_key",asir_libdir);
        !           120:                        if ( !(fp = fopen(key_file,"r")) ) {
        !           121:                                fprintf(stderr,"asir_key not found.\n");
        !           122:                                instruction();
        !           123:                        }
        !           124:                }
        !           125:        }
        !           126:        while ( 1 ) {
        !           127:                c = fgetc(fp);
        !           128:                if ( c == EOF )
        !           129:                        break;
        !           130:                else
        !           131:                        ungetc(c,fp);
        !           132:                fgets(buf,BUFSIZ,fp);
        !           133:                sscanf(buf,"%x %x %x",&n1,&n2,&n3);
        !           134:                if ( cgen(n1,n2,n3) ) {
        !           135:                        fclose(fp);
        !           136:                        return;
        !           137:                }
        !           138:        }
        !           139:        fprintf(stderr,"Incorrect key file : \"%s\".\n",key_file);
        !           140:        instruction();
        !           141: }
        !           142:
        !           143: static instruction()
        !           144: {
        !           145:        unsigned int id;
        !           146:
        !           147:        host(&id);
        !           148:        fprintf(stderr,"ID for this machine is %08x.\n",id);
        !           149:        fprintf(stderr,"See the file ASIR_INSTALL to get the correct key.\n");
        !           150:        ExitAsir();
        !           151: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>