|
|
1.1 ! root 1: /* ! 2: * sysem ! 3: * ! 4: * wa: error code number on input ! 5: * xr: pointer to scblk with message text on output ! 6: */ ! 7: ! 8: #include "inter.h" ! 9: #define MSGFILE "/usr/lib/vaxspitv35.err" ! 10: #define MSGCHUNK 49 ! 11: ! 12: sysem() ! 13: { ! 14: long msg; ! 15: static int fd = -1; ! 16: register char *p; ! 17: ! 18: msg = WA(long); ! 19: ! 20: /* any premature return gives a null result */ ! 21: SET_XR(&tempstr); ! 22: tempstr.len = 0; ! 23: ! 24: /* we keep a file descriptor open after the first message */ ! 25: if (fd < 0) { ! 26: fd = open (MSGFILE, 0); ! 27: if (fd < 0) ! 28: return 0; ! 29: } ! 30: ! 31: /* calculate how far into the file to go and go there */ ! 32: if (lseek (fd, (msg - 1) * MSGCHUNK, 0) < 0) ! 33: return 0; ! 34: ! 35: /* read the message, check for success */ ! 36: if (read (fd, tempstr.s, MSGCHUNK - 1) != MSGCHUNK - 1) ! 37: return 0; ! 38: ! 39: /* cut trailing blanks */ ! 40: p = tempstr.s + MSGCHUNK - 2; ! 41: while (*p == ' ' && p > tempstr.s) ! 42: p--; ! 43: ! 44: /* insert message length and return */ ! 45: tempstr.len = p - tempstr.s + 1; ! 46: return 0; ! 47: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.