aboutsummaryrefslogtreecommitdiff
path: root/sys/osb/miipak.x
blob: b86bc054e162aa11a3dd12e90c56611b971653de (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<mii.h>

.help mii
.nf ___________________________________________________________________________
MII -- Machine independent integer format conversion routines.  The MII integer
format provides for three machine independent integer datatypes:

    MII_BYTE	8 bit unsigned byte
    MII_SHORT	16 bit twos complement signed integer
    MII_LONG	32 bit twos complement signed integer

plus, more recently, two IEEE floating point formats:

    MII_REAL	32 bit IEEE floating point
    MII_DOUBLE	64 bit IEEE floating point

The MII datatypes are the same as are used in the FITS transportable image
format.  In the case of the short and long integers, the most significant
bytes of an integer are given first.

The routines in this package are provided for converting to and from the
MII format and the SPP format.  The latter format, of course, is potentially
quite machine dependent.  The implementation given here assumes that the
SPP datatypes include 16 bit and 32 bit twos complement integers; the ordering
of the bytes within these integer formats is described by the machine
constants BYTE_SWAP2 and BYTE_SWAP4.  Byte swapping for the IEEE floating
formats is defined by the machine constants IEEE_SWAP4 and IEEE_SWAP8.
.endhelp ______________________________________________________________________


# MIIPAK -- Pack a SPP array of type spp_type into a MII array of type
# mii_type.  The mii_types are defined in mii.h.

procedure miipak (spp, mii, nelems, spp_datatype, mii_datatype)

int	spp[ARB]		#I input array of SPP integers
int	mii[ARB]		#O output MII format array
int	nelems			#I number of integers to be converted
int	spp_datatype		#I SPP datatype code
int	mii_datatype		#I MII datatype code

begin
	switch (mii_datatype) {
	case MII_BYTE:
	    call miipak8  (spp, mii, nelems, spp_datatype)
	case MII_SHORT:
	    call miipak16 (spp, mii, nelems, spp_datatype)
	case MII_LONG:
	    call miipak32 (spp, mii, nelems, spp_datatype)
	case MII_REAL:
	    call miipakr (spp, mii, nelems, spp_datatype)
	case MII_DOUBLE:
	    call miipakd (spp, mii, nelems, spp_datatype)
	}
end