自主协议库编译通过
This commit is contained in:
122
mmslib/asn1/are_flt.c
Normal file
122
mmslib/asn1/are_flt.c
Normal file
@@ -0,0 +1,122 @@
|
||||
/************************************************************************/
|
||||
/* SISCO SOFTWARE MODULE HEADER *****************************************/
|
||||
/************************************************************************/
|
||||
/* (c) Copyright Systems Integration Specialists Company, Inc., */
|
||||
/* 1986 - 2002, All Rights Reserved. */
|
||||
/* */
|
||||
/* PROPRIETARY AND CONFIDENTIAL */
|
||||
/* */
|
||||
/* MODULE NAME : are_float.c */
|
||||
/* PRODUCT(S) : ASN1DE */
|
||||
/* */
|
||||
/* MODULE DESCRIPTION : */
|
||||
/* */
|
||||
/* GLOBAL FUNCTIONS DEFINED IN THIS MODULE : */
|
||||
/* */
|
||||
/* MODIFICATION LOG : */
|
||||
/* Date Who Rev Comments */
|
||||
/* -------- --- ------ ------------------------------------------- */
|
||||
/* 03/11/04 GLB 08 Remove "thisFileName" */
|
||||
/* 01/14/03 JRB 07 Avoid redundant logging of encode overrun. */
|
||||
/* 02/19/03 JRB 06 Use SD_BYTE_ORDER. */
|
||||
/* 02/19/03 JRB 05 Del VAX VMS support. For ALPHA VMS, assume */
|
||||
/* compiler option /FLOAT=IEEE_FLOAT is used */
|
||||
/* so it behaves like other systems. */
|
||||
/* 01/22/02 JRB 04 Chg asn1r_end_of_buffer to asn1r_buf_start. */
|
||||
/* 12/20/01 JRB 03 Chg ASN1_CTXT to ASN1_ENC_CTXT. */
|
||||
/* 09/13/99 MDE 02 Added SD_CONST modifiers */
|
||||
/* 07/26/99 MDE 01 New module, derived from ae_float.c */
|
||||
/************************************************************************/
|
||||
|
||||
#include "glbtypes.h"
|
||||
#include "sysincs.h"
|
||||
#include "asn1r.h"
|
||||
#include "asn1log.h"
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* wr_float */
|
||||
/* Function to convert a value of the single precision "float" type to */
|
||||
/* the MMS floating point type (of length 5 octets) and write it to the */
|
||||
/* message being constructed. The encoded floating point value is in */
|
||||
/* the standard IEEE 754 single precision floating point format with */
|
||||
/* the additional exponent width octet. */
|
||||
/************************************************************************/
|
||||
|
||||
ST_VOID asn1r_wr_float (ASN1_ENC_CTXT *ac, ST_FLOAT in)
|
||||
{
|
||||
ST_UCHAR *ptr;
|
||||
ST_FLOAT f;
|
||||
|
||||
if (ac->asn1r_field_ptr - 5 < ac->asn1r_buf_start)
|
||||
{
|
||||
ac->asn1r_encode_overrun = SD_TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(__OS2__)
|
||||
ptr = (ST_UCHAR *) ∈
|
||||
#else
|
||||
f = (ST_FLOAT) in;
|
||||
ptr = (ST_UCHAR *) &f;
|
||||
#endif
|
||||
|
||||
#if SD_BYTE_ORDER==SD_BIG_ENDIAN /* big-endian (like Motorola) */
|
||||
f = (ST_FLOAT) in;
|
||||
ptr = (ST_UCHAR *) &f;
|
||||
ptr += 3;
|
||||
*(ac->asn1r_field_ptr--) = *(ptr--);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr--);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr--);
|
||||
#else
|
||||
*(ac->asn1r_field_ptr--) = *(ptr++);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr++);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr++);
|
||||
#endif
|
||||
*(ac->asn1r_field_ptr--) = *ptr;
|
||||
*(ac->asn1r_field_ptr--) = (ST_UCHAR)'\x08';
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
/* wr_double */
|
||||
/* Function to convert a value of the double precision "double" type to */
|
||||
/* the MMS floating point type (of length 9 octets) and write it to the */
|
||||
/* message being constructed. The encoded floating point value is in */
|
||||
/* the standard IEEE 754 double precision floating point format with */
|
||||
/* the additional exponent width octet. */
|
||||
/************************************************************************/
|
||||
|
||||
ST_VOID asn1r_wr_double (ASN1_ENC_CTXT *ac, ST_DOUBLE in)
|
||||
{
|
||||
ST_UCHAR *ptr;
|
||||
|
||||
if (ac->asn1r_field_ptr - 9 < ac->asn1r_buf_start)
|
||||
{
|
||||
ac->asn1r_encode_overrun = SD_TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
#if SD_BYTE_ORDER==SD_BIG_ENDIAN /* big-endian (like Motorola) */
|
||||
ptr = (ST_UCHAR *) &in + 7;
|
||||
*(ac->asn1r_field_ptr--) = *(ptr--);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr--);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr--);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr--);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr--);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr--);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr--);
|
||||
#else
|
||||
ptr = (ST_UCHAR *) ∈
|
||||
*(ac->asn1r_field_ptr--) = *(ptr++);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr++);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr++);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr++);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr++);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr++);
|
||||
*(ac->asn1r_field_ptr--) = *(ptr++);
|
||||
#endif
|
||||
*(ac->asn1r_field_ptr--) = *ptr;
|
||||
*(ac->asn1r_field_ptr--) = (ST_UCHAR)'\x0B';
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user