This is byte_swapper.c in view mode; [Download] [Up]
#if (!defined(lint) && !defined(SABER))
static char *rcsid = "$Header: /ufs/comp/mei/TestPCN/onprofile/IFModel/RCS/byte_swapper.c,v 1.1 1991/12/11 22:19:59 mei Exp $";
#endif
/*AERO_MSGE*/
#include <stdio.h>
#ifdef HISTOGRAM
#include <Xsw/Xsw.h>
#include <Gauge/Gauge.h>
#endif
#ifndef _MODEL_H
#include "model.h"
#endif
/*
* Figure out what swapping function we need to convert a
* gauge_timer output in binary from PCN into a gauge_timer
* on the machine running gauge
*/
swapfunc decode_byteorder_key(timer)
gauge_timer timer;
{
void swap1234_5678();
void swap4321_8765();
union u_bytecode_key key, test_key;
key.timer = timer;
test_key.timer.low_word = 0x01020304;
test_key.timer.hi_word = 0x05060708;
if (test_key.bytes[0]==key.bytes[0] && test_key.bytes[1]==key.bytes[1] &&
test_key.bytes[2]==key.bytes[2] && test_key.bytes[3]==key.bytes[3] &&
test_key.bytes[4]==key.bytes[4] && test_key.bytes[5]==key.bytes[5] &&
test_key.bytes[6]==key.bytes[6] && test_key.bytes[7]==key.bytes[7])
{
return swap1234_5678;
}
else
if (test_key.bytes[0]==key.bytes[3] && test_key.bytes[1]==key.bytes[2] &&
test_key.bytes[2]==key.bytes[1] && test_key.bytes[3]==key.bytes[0] &&
test_key.bytes[4]==key.bytes[7] && test_key.bytes[5]==key.bytes[6] &&
test_key.bytes[6]==key.bytes[5] && test_key.bytes[7]==key.bytes[4])
{
return swap4321_8765;
}
else
{
printf("Unknown byte ordering\n");
return swap1234_5678;
}
}
void swap_general(counters,ncounters,type,ticks_per_second, b3, b2, b1, b0)
unsigned long *counters;
int ncounters, type, ticks_per_second;
int b3, b2, b1, b0;
{
int i;
union {
unsigned char bytes[4];
unsigned long word;
} counter;
if (type == SWAP_TIMERS)
{
gauge_timer *tPtr = (gauge_timer *) counters;
double *dPtr = (double *) counters;
for (i = 0; i < ncounters ; i++)
{
counter.word = (tPtr+i) -> low_word;
(tPtr+i)->low_word =
((((counter.bytes[b3] * 256) + counter.bytes[b2]) * 256) +
counter.bytes[b1]) * 256 + counter.bytes[b0];
counter.word = (tPtr+i) ->hi_word;
(tPtr+i)->hi_word =
((((counter.bytes[b3] * 256) + counter.bytes[b2]) * 256) +
counter.bytes[b1]) * 256 + counter.bytes[b0];
timer_secs(tPtr[i], ticks_per_second, dPtr+i);
}
}
else
{
for (i = 0; i < ncounters ; i++)
{
counter.word = counters[i];
counters[i] =
((((counter.bytes[b3] * 256) +
counter.bytes[b2]) * 256) +
counter.bytes[b1]) * 256 +
counter.bytes[b0];
}
}
} /* swap_general() */
void swap1234_5678(counters, ncounters,type,ticks_per_second)
unsigned long *counters;
int ncounters, type, ticks_per_second;
{
swap_general(counters, ncounters, type, ticks_per_second, 0, 1, 2, 3);
}
void swap4321_8765(counters,ncounters,type,ticks_per_second)
unsigned long *counters;
int ncounters, type, ticks_per_second;
{
swap_general(counters, ncounters, type, ticks_per_second, 3, 2, 1, 0);
}
/*ARGSUSED*/
timer_secs(timer, ticks_per_sec, seconds)
gauge_timer timer;
int ticks_per_sec;
double *seconds;
{
double scale;
unsigned long utmp = 0xFFFFFFFF;
scale = (((double) utmp) + 1) / ticks_per_sec;
*seconds = (((double) timer.hi_word) * scale);
*seconds += ((double) timer.low_word) / ticks_per_sec;
} /* timer_secs() */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.