Annotation of researchv10no/cmd/spitbol/cint/sysem.c, revision 1.1.1.1

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 "osint.h"
                      9: #include "spitblks.h"
                     10: 
                     11: #define MSGFILE "/usr/lib/vaxspitv35.err"
                     12: #define MSGCHUNK 49
                     13: 
                     14: extern struct scblk    tscblk;
                     15: 
                     16: sysem()
                     17: {
                     18:        long msg;
                     19:        static int fd = -1;
                     20:        register char *p;
                     21: 
                     22:        msg = WA(long);
                     23: 
                     24:        /* any premature return gives a null result */
                     25:        SET_XR( &tscblk );
                     26:        tscblk.len = 0;
                     27: 
                     28:        /* we keep a file descriptor open after the first message */
                     29:        if (fd < 0) {
                     30:                fd = open (MSGFILE, 0);
                     31:                if (fd < 0)
                     32:                        return 0;
                     33:        }
                     34: 
                     35:        /* calculate how far into the file to go and go there */
                     36:        if (lseek (fd, (msg - 1) * MSGCHUNK, 0) < 0)
                     37:                return 0;
                     38: 
                     39:        /* read the message, check for success */
                     40:        if (read (fd, tscblk.str, MSGCHUNK - 1) != MSGCHUNK - 1)
                     41:                return 0;
                     42: 
                     43:        /* cut trailing blanks */
                     44:        p = tscblk.str + MSGCHUNK - 2;
                     45:         while ( *p == ' '  &&  p > tscblk.str )
                     46:                p--;
                     47: 
                     48:        /* insert message length and return */
                     49:        tscblk.len = p - tscblk.str + 1;
                     50:        return NORMAL_RETURN;
                     51: }
                     52: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.