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