|
Packit Service |
a1973e |
/*
|
|
Packit Service |
a1973e |
* Here is a very simple set of routines to write an Excel worksheet
|
|
Packit Service |
a1973e |
* Microsoft BIFF format. The Excel version is set to 2.0 so that it
|
|
Packit Service |
a1973e |
* will work with all versions of Excel.
|
|
Packit Service |
a1973e |
*
|
|
Packit Service |
a1973e |
* Author: Don Capps
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/*
|
|
Packit Service |
a1973e |
* Note: rows and colums should not exceed 255 or this code will
|
|
Packit Service |
a1973e |
* act poorly
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#ifdef Windows
|
|
Packit Service |
a1973e |
#include <Windows.h>
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
#include <sys/types.h>
|
|
Packit Service |
a1973e |
#include <stdio.h>
|
|
Packit Service |
a1973e |
#include <sys/file.h>
|
|
Packit Service |
a1973e |
#if defined(__AIX__) || defined(__FreeBSD__) || defined(__DragonFly__)
|
|
Packit Service |
a1973e |
#include <fcntl.h>
|
|
Packit Service |
a1973e |
#else
|
|
Packit Service |
a1973e |
#include <sys/fcntl.h>
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#if defined(OSV5) || defined(linux) || defined (__FreeBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__APPLE__) || defined(__DragonFly__)
|
|
Packit Service |
a1973e |
#include <string.h>
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#if defined(linux) || defined(__DragonFly__) || defined(macosx)
|
|
Packit Service |
a1973e |
#include <unistd.h>
|
|
Packit Service |
a1973e |
#include <stdlib.h>
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#if (defined(solaris) && defined( __LP64__ )) || defined(__s390x__) || defined(FreeBSD)
|
|
Packit Service |
a1973e |
/* If we are building for 64-bit Solaris, all functions that return pointers
|
|
Packit Service |
a1973e |
* must be declared before they are used; otherwise the compiler will assume
|
|
Packit Service |
a1973e |
* that they return ints and the top 32 bits of the pointer will be lost,
|
|
Packit Service |
a1973e |
* causing segmentation faults. The following includes take care of this.
|
|
Packit Service |
a1973e |
* It should be safe to add these for all other OSs too, but we're only
|
|
Packit Service |
a1973e |
* doing it for Solaris now in case another OS turns out to be a special case.
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
#include <sys/stat.h>
|
|
Packit Service |
a1973e |
#include <fcntl.h>
|
|
Packit Service |
a1973e |
#include <unistd.h>
|
|
Packit Service |
a1973e |
#include <stdlib.h>
|
|
Packit Service |
a1973e |
#include <string.h>
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
/* Little Endian */
|
|
Packit Service |
a1973e |
#define ENDIAN_1 1
|
|
Packit Service |
a1973e |
/* Big Endian */
|
|
Packit Service |
a1973e |
#define ENDIAN_2 2
|
|
Packit Service |
a1973e |
/* Middle Endian */
|
|
Packit Service |
a1973e |
#define ENDIAN_3 3
|
|
Packit Service |
a1973e |
/* Middle Endian */
|
|
Packit Service |
a1973e |
#define ENDIAN_4 4
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
int junk, *junkp;
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#ifdef HAVE_ANSIC_C
|
|
Packit Service |
a1973e |
/************************************************************************/
|
|
Packit Service |
a1973e |
/* Here is the API... Enjoy */
|
|
Packit Service |
a1973e |
/************************************************************************/
|
|
Packit Service |
a1973e |
/* Create worksheet */
|
|
Packit Service |
a1973e |
int create_xls(char *);
|
|
Packit Service |
a1973e |
/* Args: Filename */
|
|
Packit Service |
a1973e |
/* */
|
|
Packit Service |
a1973e |
/* Close worksheet */
|
|
Packit Service |
a1973e |
void close_xls(int);
|
|
Packit Service |
a1973e |
/* Args: file descriptor */
|
|
Packit Service |
a1973e |
/* */
|
|
Packit Service |
a1973e |
/* Put a 16 bit integer in worksheet */
|
|
Packit Service |
a1973e |
void do_int(int,int,int,int);
|
|
Packit Service |
a1973e |
/* Args: file descriptor, */
|
|
Packit Service |
a1973e |
/* value, */
|
|
Packit Service |
a1973e |
/* row, */
|
|
Packit Service |
a1973e |
/* column */
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* Put a double in 8 byte float */
|
|
Packit Service |
a1973e |
void do_float(int,double,int,int);
|
|
Packit Service |
a1973e |
/* Args: file descriptor, */
|
|
Packit Service |
a1973e |
/* value, */
|
|
Packit Service |
a1973e |
/* row, */
|
|
Packit Service |
a1973e |
/* column */
|
|
Packit Service |
a1973e |
/* Put a string in worksheet */
|
|
Packit Service |
a1973e |
void do_label(int,char *,int,int);
|
|
Packit Service |
a1973e |
/* Args: file descriptor, */
|
|
Packit Service |
a1973e |
/* string, */
|
|
Packit Service |
a1973e |
/* row, */
|
|
Packit Service |
a1973e |
/* column */
|
|
Packit Service |
a1973e |
/************************************************************************/
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
char libbif_version[] = "Libbif Version $Revision$";
|
|
Packit Service |
a1973e |
void do_eof(int ); /* Used internally */
|
|
Packit Service |
a1973e |
void do_header(int ); /* Used internally */
|
|
Packit Service |
a1973e |
int endian(void);
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#define BOF 0x9
|
|
Packit Service |
a1973e |
#define INTEGER 0x2
|
|
Packit Service |
a1973e |
#define FLOAT 0x3
|
|
Packit Service |
a1973e |
#define LABEL 0x4
|
|
Packit Service |
a1973e |
#define EXCEL_VERS 0x2
|
|
Packit Service |
a1973e |
#define WORKSHEET 0x10
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
struct bof_record{ /* Beginning of file */
|
|
Packit Service |
a1973e |
char hi_opcode;
|
|
Packit Service |
a1973e |
char lo_opcode;
|
|
Packit Service |
a1973e |
char hi_length;
|
|
Packit Service |
a1973e |
char lo_length;
|
|
Packit Service |
a1973e |
char hi_version; /* Excel version */
|
|
Packit Service |
a1973e |
char lo_version;
|
|
Packit Service |
a1973e |
char hi_filetype;
|
|
Packit Service |
a1973e |
char lo_filetype;
|
|
Packit Service |
a1973e |
};
|
|
Packit Service |
a1973e |
struct int_record {
|
|
Packit Service |
a1973e |
char hi_opcode; /* Type 2 of record */
|
|
Packit Service |
a1973e |
char lo_opcode;
|
|
Packit Service |
a1973e |
char hi_length;
|
|
Packit Service |
a1973e |
char lo_length;
|
|
Packit Service |
a1973e |
char hi_row;
|
|
Packit Service |
a1973e |
char lo_row;
|
|
Packit Service |
a1973e |
char hi_column;
|
|
Packit Service |
a1973e |
char lo_column;
|
|
Packit Service |
a1973e |
char rgbhi;
|
|
Packit Service |
a1973e |
char rgbmed;
|
|
Packit Service |
a1973e |
char rgblo;
|
|
Packit Service |
a1973e |
char hi_data;
|
|
Packit Service |
a1973e |
char lo_data;
|
|
Packit Service |
a1973e |
};
|
|
Packit Service |
a1973e |
struct label_record {
|
|
Packit Service |
a1973e |
char hi_opcode; /* Type 4 of record */
|
|
Packit Service |
a1973e |
char lo_opcode;
|
|
Packit Service |
a1973e |
char hi_length;
|
|
Packit Service |
a1973e |
char lo_length;
|
|
Packit Service |
a1973e |
char hi_row;
|
|
Packit Service |
a1973e |
char lo_row;
|
|
Packit Service |
a1973e |
char hi_column;
|
|
Packit Service |
a1973e |
char lo_column;
|
|
Packit Service |
a1973e |
char rgbhi;
|
|
Packit Service |
a1973e |
char rgbmed;
|
|
Packit Service |
a1973e |
char rgblo;
|
|
Packit Service |
a1973e |
char string_length;
|
|
Packit Service |
a1973e |
char str_array[256];
|
|
Packit Service |
a1973e |
};
|
|
Packit Service |
a1973e |
struct float_record { /* Type 3 record */
|
|
Packit Service |
a1973e |
char hi_opcode;
|
|
Packit Service |
a1973e |
char lo_opcode;
|
|
Packit Service |
a1973e |
char hi_length;
|
|
Packit Service |
a1973e |
char lo_length;
|
|
Packit Service |
a1973e |
char hi_row;
|
|
Packit Service |
a1973e |
char lo_row;
|
|
Packit Service |
a1973e |
char hi_column;
|
|
Packit Service |
a1973e |
char lo_column;
|
|
Packit Service |
a1973e |
char rgbhi;
|
|
Packit Service |
a1973e |
char rgbmed;
|
|
Packit Service |
a1973e |
char rgblo;
|
|
Packit Service |
a1973e |
double data;
|
|
Packit Service |
a1973e |
};
|
|
Packit Service |
a1973e |
/*
|
|
Packit Service |
a1973e |
* Write the EOF and close the file
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
#ifdef HAVE_ANSIC_C
|
|
Packit Service |
a1973e |
void
|
|
Packit Service |
a1973e |
close_xls(int fd)
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#else
|
|
Packit Service |
a1973e |
close_xls(fd)
|
|
Packit Service |
a1973e |
int fd;
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
do_eof(fd);
|
|
Packit Service |
a1973e |
close(fd);
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/*
|
|
Packit Service |
a1973e |
* Create xls worksheet. Create file and put the BOF record in it.
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
#ifdef HAVE_ANSIC_C
|
|
Packit Service |
a1973e |
int
|
|
Packit Service |
a1973e |
create_xls(char *name)
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#else
|
|
Packit Service |
a1973e |
create_xls(name)
|
|
Packit Service |
a1973e |
char *name;
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
int fd;
|
|
Packit Service |
a1973e |
unlink(name);
|
|
Packit Service |
a1973e |
#ifdef Windows
|
|
Packit Service |
a1973e |
fd=open(name,O_BINARY|O_CREAT|O_RDWR,0666);
|
|
Packit Service |
a1973e |
#else
|
|
Packit Service |
a1973e |
fd=open(name,O_CREAT|O_RDWR,0666);
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
if(fd<0)
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
printf("Error opening file %s\n",name);
|
|
Packit Service |
a1973e |
exit(-1);
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
do_header(fd);
|
|
Packit Service |
a1973e |
return(fd);
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#ifdef HAVE_ANSIC_C
|
|
Packit Service |
a1973e |
void
|
|
Packit Service |
a1973e |
do_header(int fd) /* Stick the BOF at the beginning of the file */
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#else
|
|
Packit Service |
a1973e |
do_header(fd)
|
|
Packit Service |
a1973e |
int fd;
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
struct bof_record bof;
|
|
Packit Service |
a1973e |
bof.hi_opcode=BOF;
|
|
Packit Service |
a1973e |
bof.lo_opcode = 0x0;
|
|
Packit Service |
a1973e |
bof.hi_length=0x4;
|
|
Packit Service |
a1973e |
bof.lo_length=0x0;
|
|
Packit Service |
a1973e |
bof.hi_version=EXCEL_VERS;
|
|
Packit Service |
a1973e |
bof.lo_version=0x0;
|
|
Packit Service |
a1973e |
bof.hi_filetype=WORKSHEET;
|
|
Packit Service |
a1973e |
bof.lo_filetype=0x0;
|
|
Packit Service |
a1973e |
junk=write(fd,&bof,sizeof(struct bof_record));
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/*
|
|
Packit Service |
a1973e |
* Put an integer (16 bit) in the worksheet
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
#ifdef HAVE_ANSIC_C
|
|
Packit Service |
a1973e |
void
|
|
Packit Service |
a1973e |
do_int(int fd,int val, int row, int column)
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#else
|
|
Packit Service |
a1973e |
do_int(fd,val,row,column)
|
|
Packit Service |
a1973e |
int fd,val,row,column;
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
struct int_record intrec;
|
|
Packit Service |
a1973e |
short s_row,s_column;
|
|
Packit Service |
a1973e |
s_row=(short)row;
|
|
Packit Service |
a1973e |
s_column=(short)column;
|
|
Packit Service |
a1973e |
intrec.hi_opcode=INTEGER;
|
|
Packit Service |
a1973e |
intrec.lo_opcode=0x00;
|
|
Packit Service |
a1973e |
intrec.hi_length=0x09;
|
|
Packit Service |
a1973e |
intrec.lo_length=0x00;
|
|
Packit Service |
a1973e |
intrec.rgbhi=0x0;
|
|
Packit Service |
a1973e |
intrec.rgbmed=0x0;
|
|
Packit Service |
a1973e |
intrec.rgblo=0x0;
|
|
Packit Service |
a1973e |
intrec.hi_row=(char)s_row&0xff;
|
|
Packit Service |
a1973e |
intrec.lo_row=(char)(s_row>>8)&0xff;
|
|
Packit Service |
a1973e |
intrec.hi_column=(char)(s_column&0xff);
|
|
Packit Service |
a1973e |
intrec.lo_column=(char)(s_column>>8)&0xff;
|
|
Packit Service |
a1973e |
intrec.hi_data=(val & 0xff);
|
|
Packit Service |
a1973e |
intrec.lo_data=(val & 0xff00)>>8;
|
|
Packit Service |
a1973e |
junk=write(fd,&intrec,13);
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* Note: This routine converts Big Endian to Little Endian
|
|
Packit Service |
a1973e |
* and writes the record out.
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/*
|
|
Packit Service |
a1973e |
* Put a double in the worksheet as 8 byte float in IEEE format.
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
#ifdef HAVE_ANSIC_C
|
|
Packit Service |
a1973e |
void
|
|
Packit Service |
a1973e |
do_float(int fd, double value, int row, int column)
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#else
|
|
Packit Service |
a1973e |
do_float(fd, value, row, column)
|
|
Packit Service |
a1973e |
int fd;
|
|
Packit Service |
a1973e |
double value;
|
|
Packit Service |
a1973e |
int row,column;
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
struct float_record floatrec;
|
|
Packit Service |
a1973e |
short s_row,s_column;
|
|
Packit Service |
a1973e |
unsigned char *sptr,*dptr;
|
|
Packit Service |
a1973e |
s_row=(short)row;
|
|
Packit Service |
a1973e |
s_column=(short)column;
|
|
Packit Service |
a1973e |
floatrec.hi_opcode=FLOAT;
|
|
Packit Service |
a1973e |
floatrec.lo_opcode=0x00;
|
|
Packit Service |
a1973e |
floatrec.hi_length=0xf;
|
|
Packit Service |
a1973e |
floatrec.lo_length=0x00;
|
|
Packit Service |
a1973e |
floatrec.rgbhi=0x0;
|
|
Packit Service |
a1973e |
floatrec.rgbmed=0x0;
|
|
Packit Service |
a1973e |
floatrec.rgblo=0x0;
|
|
Packit Service |
a1973e |
floatrec.hi_row=(char)(s_row&0xff);
|
|
Packit Service |
a1973e |
floatrec.lo_row=(char)((s_row>>8)&0xff);
|
|
Packit Service |
a1973e |
floatrec.hi_column=(char)(s_column&0xff);
|
|
Packit Service |
a1973e |
floatrec.lo_column=(char)((s_column>>8)&0xff);
|
|
Packit Service |
a1973e |
sptr =(unsigned char *) &value;
|
|
Packit Service |
a1973e |
dptr =(unsigned char *) &floatrec.data;
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if(endian()==ENDIAN_2) /* Big Endian */
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
dptr[0]=sptr[7]; /* Convert to Little Endian */
|
|
Packit Service |
a1973e |
dptr[1]=sptr[6];
|
|
Packit Service |
a1973e |
dptr[2]=sptr[5];
|
|
Packit Service |
a1973e |
dptr[3]=sptr[4];
|
|
Packit Service |
a1973e |
dptr[4]=sptr[3];
|
|
Packit Service |
a1973e |
dptr[5]=sptr[2];
|
|
Packit Service |
a1973e |
dptr[6]=sptr[1];
|
|
Packit Service |
a1973e |
dptr[7]=sptr[0];
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
if(endian()==ENDIAN_3) /* Middle Endian */
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
dptr[0]=sptr[4]; /* 16 bit swapped ARM */
|
|
Packit Service |
a1973e |
dptr[1]=sptr[5];
|
|
Packit Service |
a1973e |
dptr[2]=sptr[6];
|
|
Packit Service |
a1973e |
dptr[3]=sptr[7];
|
|
Packit Service |
a1973e |
dptr[4]=sptr[0];
|
|
Packit Service |
a1973e |
dptr[5]=sptr[1];
|
|
Packit Service |
a1973e |
dptr[6]=sptr[2];
|
|
Packit Service |
a1973e |
dptr[7]=sptr[3];
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if(endian()==ENDIAN_1) /* Little Endian */
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
dptr[0]=sptr[0]; /* Do not convert to Little Endian */
|
|
Packit Service |
a1973e |
dptr[1]=sptr[1];
|
|
Packit Service |
a1973e |
dptr[2]=sptr[2];
|
|
Packit Service |
a1973e |
dptr[3]=sptr[3];
|
|
Packit Service |
a1973e |
dptr[4]=sptr[4];
|
|
Packit Service |
a1973e |
dptr[5]=sptr[5];
|
|
Packit Service |
a1973e |
dptr[6]=sptr[6];
|
|
Packit Service |
a1973e |
dptr[7]=sptr[7];
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
if(endian()==-1) /* Unsupported architecture */
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
dptr[0]=0;
|
|
Packit Service |
a1973e |
dptr[1]=0;
|
|
Packit Service |
a1973e |
dptr[2]=0;
|
|
Packit Service |
a1973e |
dptr[3]=0;
|
|
Packit Service |
a1973e |
dptr[4]=0;
|
|
Packit Service |
a1973e |
dptr[5]=0;
|
|
Packit Service |
a1973e |
dptr[6]=0;
|
|
Packit Service |
a1973e |
dptr[7]=0;
|
|
Packit Service |
a1973e |
printf("Excel output not supported on this architecture.\n");
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
junk=write(fd,&floatrec,11); /* Don't write floatrec. Padding problems */
|
|
Packit Service |
a1973e |
junk=write(fd,&floatrec.data,8); /* Write value seperately */
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/*
|
|
Packit Service |
a1973e |
* Put a string as a label in the worksheet.
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
#ifdef HAVE_ANSIC_C
|
|
Packit Service |
a1973e |
void
|
|
Packit Service |
a1973e |
do_label(int fd, char *string, int row, int column)
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#else
|
|
Packit Service |
a1973e |
do_label(fd, string, row, column)
|
|
Packit Service |
a1973e |
int fd;
|
|
Packit Service |
a1973e |
char *string;
|
|
Packit Service |
a1973e |
int row,column;
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
struct label_record labelrec;
|
|
Packit Service |
a1973e |
short s_row,s_column;
|
|
Packit Service |
a1973e |
int i;
|
|
Packit Service |
a1973e |
for(i=0;i<255;i++)
|
|
Packit Service |
a1973e |
labelrec.str_array[i]=0;
|
|
Packit Service |
a1973e |
s_row=(short)row;
|
|
Packit Service |
a1973e |
s_column=(short)column;
|
|
Packit Service |
a1973e |
i=strlen(string);
|
|
Packit Service |
a1973e |
labelrec.hi_opcode=LABEL;
|
|
Packit Service |
a1973e |
labelrec.lo_opcode=0x00;
|
|
Packit Service |
a1973e |
labelrec.hi_length=0x08; /* 264 total bytes */
|
|
Packit Service |
a1973e |
labelrec.lo_length=0x01;
|
|
Packit Service |
a1973e |
labelrec.rgblo=0x0;
|
|
Packit Service |
a1973e |
labelrec.rgbmed=0x0;
|
|
Packit Service |
a1973e |
labelrec.rgbhi=0x0;
|
|
Packit Service |
a1973e |
labelrec.hi_row=(char)(s_row&0xff);
|
|
Packit Service |
a1973e |
labelrec.lo_row=(char)((s_row>>8)&0xff);
|
|
Packit Service |
a1973e |
labelrec.hi_column=(char)(s_column&0xff);
|
|
Packit Service |
a1973e |
labelrec.lo_column=(char)((s_column>>8)&0xff);
|
|
Packit Service |
a1973e |
labelrec.string_length=i;
|
|
Packit Service |
a1973e |
if(i > 255) /* If too long then terminate it early */
|
|
Packit Service |
a1973e |
string[254]=0;
|
|
Packit Service |
a1973e |
i=strlen(string);
|
|
Packit Service |
a1973e |
strcpy(labelrec.str_array,string);
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
junk=write(fd,&labelrec,sizeof(struct label_record));
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/*
|
|
Packit Service |
a1973e |
* Write the EOF in the file
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
#ifdef HAVE_ANSIC_C
|
|
Packit Service |
a1973e |
void
|
|
Packit Service |
a1973e |
do_eof(int fd)
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#else
|
|
Packit Service |
a1973e |
do_eof(fd)
|
|
Packit Service |
a1973e |
int fd;
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
char buf[]={0x0a,0x00,0x00,0x00};
|
|
Packit Service |
a1973e |
junk=write(fd,buf,4);
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/*
|
|
Packit Service |
a1973e |
* Routine to determine the Endian-ness of the system. This
|
|
Packit Service |
a1973e |
* is needed for Iozone to convert doubles (floats) into
|
|
Packit Service |
a1973e |
* Little-endian format. This is needed for Excel to be
|
|
Packit Service |
a1973e |
* able to interpret the file
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
int
|
|
Packit Service |
a1973e |
endian(void)
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
long long foo = 0x0102030405060708LL;
|
|
Packit Service |
a1973e |
long foo1 = 0x012345678;
|
|
Packit Service |
a1973e |
unsigned char *c,c1,c2,c3,c4,c5,c6,c7,c8;
|
|
Packit Service |
a1973e |
c=(unsigned char *)&foo;
|
|
Packit Service |
a1973e |
c1=*c++;
|
|
Packit Service |
a1973e |
c2=*c++;
|
|
Packit Service |
a1973e |
c3=*c++;
|
|
Packit Service |
a1973e |
c4=*c++;
|
|
Packit Service |
a1973e |
c5=*c++;
|
|
Packit Service |
a1973e |
c6=*c++;
|
|
Packit Service |
a1973e |
c7=*c++;
|
|
Packit Service |
a1973e |
c8=*c;
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/*--------------------------------------------------------------*/
|
|
Packit Service |
a1973e |
/* printf("%x %x %x %x %x %x %x %x\n",c1,c2,c3,c4,c5,c6,c7,c8); */
|
|
Packit Service |
a1973e |
/*--------------------------------------------------------------*/
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* Little Endian format ? ( Intel ) */
|
|
Packit Service |
a1973e |
if( (c1==0x08) && (c2==0x07) && (c3==0x06) && (c4==0x05) &&
|
|
Packit Service |
a1973e |
(c5==0x04) && (c6==0x03) && (c7==0x02) && (c8==0x01) )
|
|
Packit Service |
a1973e |
return(ENDIAN_1);
|
|
Packit Service |
a1973e |
/* Big Endian format ? ( Sparc, Risc... */
|
|
Packit Service |
a1973e |
if( (c1==0x01) && (c2==0x02) && (c3==0x03) && (c4==0x04) &&
|
|
Packit Service |
a1973e |
(c5==0x05) && (c6==0x06) && (c7==0x07) && (c8==0x08) )
|
|
Packit Service |
a1973e |
return(ENDIAN_2);
|
|
Packit Service |
a1973e |
/* Middle Endian format ? ( ARM ... ) */
|
|
Packit Service |
a1973e |
if( (c1==0x04) && (c2==0x03) && (c3==0x02) && (c4==0x01) &&
|
|
Packit Service |
a1973e |
(c5==0x08) && (c6==0x07) && (c7==0x06) && (c8==0x05) )
|
|
Packit Service |
a1973e |
return(ENDIAN_3);
|
|
Packit Service |
a1973e |
c=(unsigned char *)&foo;;
|
|
Packit Service |
a1973e |
c1=*c++;
|
|
Packit Service |
a1973e |
c2=*c++;
|
|
Packit Service |
a1973e |
c3=*c++;
|
|
Packit Service |
a1973e |
c4=*c++;
|
|
Packit Service |
a1973e |
/* Another middle endian format ? ( PDP-11 ... ) */
|
|
Packit Service |
a1973e |
if( (c1==0x34) && (c2==0x12) && (c3==0x78) && (c4==0x56))
|
|
Packit Service |
a1973e |
return(ENDIAN_4);
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
return(-1);
|
|
Packit Service |
a1973e |
}
|