| // 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 | |