// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (c) 2000 Silicon Graphics, Inc.
 * All Rights Reserved.
 */
/************

64 bits in a Cray word

				12345678901234567890123456789012
1234567890123456789012345678901234567890123456789012345678901234
________________________________________________________________
<    pid       >< word-offset in file (same #) ><    pid       >

1234567890123456789012345678901234567890123456789012345678901234
________________________________________________________________
<    pid       >< offset in file of this word  ><    pid       >


8 bits to a bytes == character
 NBPW            8 
************/

#include <stdio.h>
#include <sys/param.h>
#ifdef UNIT_TEST
#include <unistd.h>
#include <stdlib.h>
#endif

static char Errmsg[80];

#define LOWER16BITS(X)	(X & 0177777)
#define LOWER32BITS(X)	(X & 0xffffffff)

/***
#define HIGHBITS(WRD, bits) ( (-1 << (64-bits)) & WRD)
#define LOWBITS(WRD, bits) ( (-1 >> (64-bits)) & WRD)
****/

#define NBPBYTE		8		/* number bits per byte */

#ifndef DEBUG
#define DEBUG	0
#endif

/***********************************************************************
 *
 * 
 * 1   2   3   4   5   6   7   8   9   10  11  12  13  14  14  15	bytes
 * 1234567890123456789012345678901234567890123456789012345678901234	bits
 * ________________________________________________________________	1 word
 * <    pid       >< offset in file of this word  ><    pid       >
 * 
 * the words are put together where offset zero is the start.
 * thus, offset 16 is the start of  the second full word
 * Thus, offset 8 is in middle of word 1
 ***********************************************************************/
int
datapidgen(pid, buffer, bsize, offset)
int pid;
char *buffer;
int bsize;
int offset;
{
	return -1;	/* not support on non-64 bits word machines  */


} 

/***********************************************************************
 *
 *
 ***********************************************************************/
int
datapidchk(pid, buffer, bsize, offset, errmsg)
int pid;
char *buffer;
int bsize;
int offset;
char **errmsg;
{
    if ( errmsg != NULL ) {
        *errmsg = Errmsg;
    }
    sprintf(Errmsg, "Not supported on this OS.");
    return 0;

}       /* end of datapidchk */

#if UNIT_TEST

/***********************************************************************
 * main for doing unit testing
 ***********************************************************************/
int
main(ac, ag)
int ac;
char **ag;
{

int size=1234;
char *buffer;
int ret;
char *errmsg;

    if ((buffer=(char *)malloc(size)) == NULL ) {
        perror("malloc");
        exit(2);
    }


    datapidgen(-1, buffer, size, 3);

/***
fwrite(buffer, size, 1, stdout);
fwrite("\n", 1, 1, stdout);
****/

    printf("datapidgen(-1, buffer, size, 3)\n");

    ret=datapidchk(-1, buffer, size, 3, &errmsg);
    printf("datapidchk(-1, buffer, %d, 3, &errmsg) returned %d %s\n",
        size, ret, errmsg);
    ret=datapidchk(-1, &buffer[1], size-1, 4, &errmsg);
    printf("datapidchk(-1, &buffer[1], %d, 4, &errmsg) returned %d %s\n",
        size-1, ret, errmsg);

    buffer[25]= 0x0;
    buffer[26]= 0x0;
    buffer[27]= 0x0;
    buffer[28]= 0x0;
    printf("changing char 25-28\n");

    ret=datapidchk(-1, &buffer[1], size-1, 4, &errmsg);
    printf("datapidchk(-1, &buffer[1], %d, 4, &errmsg) returned %d %s\n",
        size-1, ret, errmsg);

printf("------------------------------------------\n");

    datapidgen(getpid(), buffer, size, 5);

/*******
fwrite(buffer, size, 1, stdout);
fwrite("\n", 1, 1, stdout);
******/

    printf("\ndatapidgen(getpid(), buffer, size, 5)\n");

    ret=datapidchk(getpid(), buffer, size, 5, &errmsg);
    printf("datapidchk(getpid(), buffer, %d, 5, &errmsg) returned %d %s\n",
        size, ret, errmsg);

    ret=datapidchk(getpid(), &buffer[1], size-1, 6, &errmsg);
    printf("datapidchk(getpid(), &buffer[1], %d, 6, &errmsg) returned %d %s\n",
        size-1, ret, errmsg);

    buffer[25]= 0x0;
    printf("changing char 25\n");

    ret=datapidchk(getpid(), &buffer[1], size-1, 6, &errmsg);
    printf("datapidchk(getpid(), &buffer[1], %d, 6, &errmsg) returned %d %s\n",
        size-1, ret, errmsg);

    exit(0);
}

#endif

