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

Annotation of OpenXM_contrib2/asir2000/io/io.c, Revision 1.1.1.1

1.1       noro        1: /* $OpenXM: OpenXM/src/asir99/io/io.c,v 1.1.1.1 1999/11/10 08:12:30 noro Exp $ */
                      2: #include <stdio.h>
                      3: #include "ca.h"
                      4: #if defined(VISUAL) || MPI
                      5: #include "wsio.h"
                      6: #endif
                      7:
                      8: extern int little_endian;
                      9: extern int ox_do_copy, ox_do_count, ox_count_length, ox_file_io, ox_need_conv;
                     10: extern char *ox_copy_bptr;
                     11:
                     12: void reset_io()
                     13: {
                     14:        ox_file_io = 0;
                     15: }
                     16:
                     17: void endian_init()
                     18: {
                     19:        unsigned int et = 0xff;
                     20:
                     21:        if ( *((char *)&et) )
                     22:                little_endian = 1;
                     23:        else
                     24:                little_endian = 0;
                     25:        ox_need_conv = 1;
                     26: }
                     27:
                     28: int countobj(p)
                     29: Obj p;
                     30: {
                     31:        ox_count_length = 0;
                     32:        ox_do_count = 1; saveobj(0,p); ox_do_count = 0;
                     33:        return ox_count_length;
                     34: }
                     35:
                     36: int countvl(vl)
                     37: VL vl;
                     38: {
                     39:        ox_count_length = 0;
                     40:        ox_do_count = 1; savevl(0,vl); ox_do_count = 0;
                     41:        return ox_count_length;
                     42: }
                     43:
                     44: void ox_copy_init(s)
                     45: char *s;
                     46: {
                     47:        ox_copy_bptr = s;
                     48: }
                     49:
                     50: void ox_obj_to_buf(p)
                     51: Obj p;
                     52: {
                     53:        ox_do_copy = 1; saveobj(0,p); ox_do_copy = 0;
                     54: }
                     55:
                     56: void ox_buf_to_obj(p)
                     57: Obj *p;
                     58: {
                     59:        ox_do_copy = 1; loadobj(0,p); ox_do_copy = 0;
                     60: }
                     61:
                     62: void ox_vl_to_buf(vl)
                     63: VL vl;
                     64: {
                     65:        ox_do_copy = 1; savevl(0,vl); ox_do_copy = 0;
                     66: }
                     67:
                     68: int gen_fread (ptr,size,nitems,stream)
                     69: char *ptr;
                     70: int size,nitems;
                     71: FILE *stream;
                     72: {
                     73:        int n;
                     74:
                     75:        if ( ox_do_copy ) {
                     76:                n = size*nitems;
                     77:                memcpy(ptr,ox_copy_bptr,n);
                     78:                ox_copy_bptr += n;
                     79:        } else {
                     80: #if defined(VISUAL)
                     81:                if ( _fileno(stream) < 0 )
                     82:                        n = cread(ptr,size,nitems,(STREAM *)stream);
                     83:                else
                     84: #elif MPI
                     85:                if ( (char)fileno(stream) < 0 )
                     86:                        n = cread(ptr,size,nitems,(STREAM *)stream);
                     87:                else
                     88: #endif
                     89:                n = fread(ptr,size,nitems,stream);
                     90:                if ( !n )
                     91:                        ExitAsir();
                     92:                else
                     93:                        return n;
                     94:        }
                     95: }
                     96:
                     97: int gen_fwrite (ptr,size,nitems,stream)
                     98: char *ptr;
                     99: int size,nitems;
                    100: FILE *stream;
                    101: {
                    102:        int n;
                    103:
                    104:        if ( ox_do_count )
                    105:                ox_count_length += size*nitems;
                    106:        else if ( ox_do_copy ) {
                    107:                n = size*nitems;
                    108:                memcpy(ox_copy_bptr,ptr,n);
                    109:                ox_copy_bptr += n;
                    110:        } else
                    111: #if defined(VISUAL)
                    112:        if ( _fileno(stream) < 0 )
                    113:                return cwrite(ptr,size,nitems,(STREAM *)stream);
                    114:        else
                    115: #elif MPI
                    116:        if ( (char)fileno(stream) < 0 )
                    117:                return cwrite(ptr,size,nitems,(STREAM *)stream);
                    118:        else
                    119: #endif
                    120:                return fwrite(ptr,size,nitems,stream);
                    121: }
                    122:
                    123: void write_char(f,p)
                    124: FILE *f;
                    125: unsigned char *p;
                    126: {
                    127:        gen_fwrite(p,sizeof(unsigned char),1,f);
                    128: }
                    129:
                    130: void write_short(f,p)
                    131: FILE *f;
                    132: unsigned short *p;
                    133: {
                    134:        unsigned short t;
                    135:
                    136:        if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    137:                t = htons(*p);
                    138:                gen_fwrite(&t,sizeof(unsigned short),1,f);
                    139:        } else
                    140:                gen_fwrite(p,sizeof(unsigned short),1,f);
                    141: }
                    142:
                    143: void write_int(f,p)
                    144: FILE *f;
                    145: unsigned int *p;
                    146: {
                    147:        unsigned int t;
                    148:
                    149:        if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    150:                t = htonl(*p);
                    151:                gen_fwrite(&t,sizeof(unsigned int),1,f);
                    152:        } else
                    153:                gen_fwrite(p,sizeof(unsigned int),1,f);
                    154: }
                    155:
                    156: int des_encryption;
                    157: static unsigned char asir_deskey[8] = {0xc7,0xe0,0xfc,0xb5,0xc3,0xad,0x8e,0x3a};
                    158: static unsigned char deskey_string[96];
                    159:
                    160: void init_deskey()
                    161: {
                    162:        static int deskey_initialized = 0;
                    163:
                    164:        if ( !deskey_initialized ) {
                    165:                key_schedule(asir_deskey,deskey_string);
                    166:                deskey_initialized = 1;
                    167:        }
                    168: }
                    169:
                    170: void write_intarray(f,p,l)
                    171: FILE *f;
                    172: unsigned int *p;
                    173: int l;
                    174: {
                    175:        int i;
                    176:        unsigned int t;
                    177: #if defined(VISUAL)
                    178:        int l2;
                    179:        unsigned int plain[2],encrypted[2];
                    180:
                    181:        if ( des_encryption ) {
                    182:                l2 = l>>1;
                    183:                for ( i = 0; i < l2; i++ ) {
                    184:                        plain[0] = *p++;
                    185:                        plain[1] = *p++;
                    186:                        des_enc(plain,deskey_string,encrypted);
                    187:                        encrypted[0] = htonl(encrypted[0]);
                    188:                        encrypted[1] = htonl(encrypted[1]);
                    189:                        gen_fwrite(encrypted,sizeof(unsigned int),2,f);
                    190:                }
                    191:                if ( (l2<<1) < l ) {
                    192:                        plain[0] = *p;
                    193:                        plain[1] = 0;
                    194:                        des_enc(plain,deskey_string,encrypted);
                    195:                        encrypted[0] = htonl(encrypted[0]);
                    196:                        encrypted[1] = htonl(encrypted[1]);
                    197:                        gen_fwrite(encrypted,sizeof(unsigned int),2,f);
                    198:                }
                    199:        } else
                    200: #endif
                    201:        if ( little_endian && (ox_file_io || ox_need_conv) )
                    202:                for ( i = 0; i < l; i++, p++) {
                    203:                        t = htonl(*p);
                    204:                        gen_fwrite(&t,sizeof(unsigned int),1,f);
                    205:                }
                    206:        else
                    207:                gen_fwrite(p,sizeof(unsigned int),l,f);
                    208: }
                    209:
                    210: #if defined(LONG_IS_64BIT)
                    211: void write_longarray(f,p,l)
                    212: FILE *f;
                    213: unsigned long *p;
                    214: int l;
                    215: {
                    216:        int i;
                    217:        unsigned long w;
                    218:        unsigned int hi,lo;
                    219:
                    220:        if ( little_endian && (ox_file_io || ox_need_conv) )
                    221:                for ( i = 0; i < l; i++, p++) {
                    222:                        w = *p; hi = w>>32; lo = w&0xffffffff;
                    223:                        hi = htonl(hi); lo = htonl(lo);
                    224:                        gen_fwrite(&hi,sizeof(unsigned int),1,f);
                    225:                        gen_fwrite(&lo,sizeof(unsigned int),1,f);
                    226:                }
                    227:        else
                    228:                gen_fwrite(p,sizeof(unsigned long),l,f);
                    229: }
                    230: #endif
                    231:
                    232: void write_double(f,p)
                    233: FILE *f;
                    234: double *p;
                    235: {
                    236:        unsigned int t;
                    237:
                    238:        if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    239:                t = htonl(((unsigned int *)p)[1]);
                    240:                gen_fwrite(&t,sizeof(unsigned int),1,f);
                    241:                t = htonl(((unsigned int *)p)[0]);
                    242:                gen_fwrite(&t,sizeof(unsigned int),1,f);
                    243:        } else
                    244:                gen_fwrite(p,sizeof(double),1,f);
                    245: }
                    246:
                    247: void write_string(f,p,l)
                    248: FILE *f;
                    249: unsigned char *p;
                    250: {
                    251:        gen_fwrite(p,sizeof(unsigned char),l,f);
                    252: }
                    253:
                    254: void read_char(f,p)
                    255: FILE *f;
                    256: unsigned char *p;
                    257: {
                    258:        gen_fread((char *)p,sizeof(unsigned char),1,f);
                    259: }
                    260:
                    261: void read_short(f,p)
                    262: FILE *f;
                    263: unsigned short *p;
                    264: {
                    265:        gen_fread(p,sizeof(unsigned short),1,f);
                    266:        if ( little_endian && (ox_file_io || ox_need_conv) )
                    267:                *p = ntohs(*p);
                    268: }
                    269:
                    270: void read_int(f,p)
                    271: FILE *f;
                    272: unsigned int *p;
                    273: {
                    274:        gen_fread(p,sizeof(unsigned int),1,f);
                    275:        if ( little_endian && (ox_file_io || ox_need_conv) )
                    276:                *p = ntohl(*p);
                    277: }
                    278:
                    279: void read_intarray(f,p,l)
                    280: FILE *f;
                    281: unsigned int *p;
                    282: int l;
                    283: {
                    284:        int i;
                    285:        unsigned int t;
                    286: #if defined(VISUAL)
                    287:        int l2;
                    288:        unsigned int plain[2],encrypted[2];
                    289:
                    290:        if ( des_encryption ) {
                    291:                l2 = l>>1;
                    292:                for ( i = 0; i < l2; i++ ) {
                    293:                        gen_fread((char *)encrypted,sizeof(unsigned int),2,f);
                    294:                        encrypted[0] = ntohl(encrypted[0]);
                    295:                        encrypted[1] = ntohl(encrypted[1]);
                    296:                        des_dec(encrypted,deskey_string,plain);
                    297:                        *p++ = plain[0];
                    298:                        *p++ = plain[1];
                    299:                }
                    300:                if ( (l2<<1) < l ) {
                    301:                        gen_fread((char *)encrypted,sizeof(unsigned int),2,f);
                    302:                        encrypted[0] = ntohl(encrypted[0]);
                    303:                        encrypted[1] = ntohl(encrypted[1]);
                    304:                        des_dec(encrypted,deskey_string,plain);
                    305:                        *p = plain[0];
                    306:                }
                    307:        } else
                    308: #endif
                    309:        {
                    310:                gen_fread(p,sizeof(unsigned int),l,f);
                    311:                if ( little_endian && (ox_file_io || ox_need_conv) )
                    312:                        for ( i = 0; i < l; i++, p++ )
                    313:                                *p = ntohl(*p);
                    314:        }
                    315: }
                    316:
                    317: #if defined(LONG_IS_64BIT)
                    318: void read_longarray(f,p,l)
                    319: FILE *f;
                    320: unsigned long *p;
                    321: int l;
                    322: {
                    323:        int i;
                    324:        unsigned int hi,lo;
                    325:
                    326:        if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    327:                for ( i = l; i > 1; i -= 2, p++ ) {
                    328:                        gen_fread(&hi,sizeof(unsigned int),1,f);
                    329:                        gen_fread(&lo,sizeof(unsigned int),1,f);
                    330:                        hi = ntohl(hi); lo = ntohl(lo);
                    331:                        *p = (((unsigned long)hi)<<32)|((unsigned long)lo);
                    332:                }
                    333:                if ( i == 1 ) {
                    334:                        gen_fread(&hi,sizeof(unsigned int),1,f);
                    335:                        hi = ntohl(hi); *p = (((unsigned long)hi)<<32);
                    336:                }
                    337:        } else
                    338:                gen_fread(p,sizeof(unsigned int),l,f);
                    339: }
                    340: #endif
                    341:
                    342: void read_string(f,p,l)
                    343: FILE *f;
                    344: unsigned char *p;
                    345: {
                    346:        gen_fread((char *)p,sizeof(unsigned char),l,f);
                    347: }
                    348:
                    349: void read_double(f,p)
                    350: FILE *f;
                    351: double *p;
                    352: {
                    353:        unsigned int t;
                    354:
                    355:        if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    356:                gen_fread((char *)&t,sizeof(unsigned int),1,f);
                    357:                ((unsigned int *)p)[1] = ntohl(t);
                    358:                gen_fread((char *)&t,sizeof(unsigned int),1,f);
                    359:                ((unsigned int *)p)[0] = ntohl(t);
                    360:        } else
                    361:                gen_fread((char *)p,sizeof(double),1,f);
                    362: }

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