ftp.nice.ch/pub/next/unix/admin/sysinfo.1.1.0.s.tar.gz#/os-alliant.c

This is os-alliant.c in view mode; [Download] [Up]

/*
 * Copyright (c) 1992 Michael A. Cooper.
 * This software may be freely distributed provided it is not sold for 
 * profit and the author is credited appropriately.
 */

#ifndef lint
static char *RCSid = "$Header: /src/common/usc/bin/sysinfo/RCS/os-alliant.c,v 1.10 1992/11/24 04:05:57 mcooper Exp mcooper $";
#endif

/*
 * $Log: os-alliant.c,v $
 * Revision 1.10  1992/11/24  04:05:57  mcooper
 * New/cleaner KVM/nlist interface.
 *
 * Revision 1.9  1992/04/26  23:32:06  mcooper
 * Add Copyright notice
 *
 * Revision 1.8  1992/04/17  23:27:51  mcooper
 * Add support for ROM Version information (Sun only for now).
 *
 * Revision 1.7  1992/04/17  01:07:59  mcooper
 * More de-linting
 *
 * Revision 1.6  1992/04/15  02:04:16  mcooper
 * Change GetMemoryStr() to GetMemory().
 *
 * Revision 1.5  1992/03/31  19:00:15  mcooper
 * A working version.
 *
 * Revision 1.4  1992/03/31  02:22:03  mcooper
 * Fix failed return value from CheckNlist().
 *
 * Revision 1.3  1992/03/31  01:55:17  mcooper
 * Use new CheckNlist to check nlist success.
 *
 * Revision 1.2  1992/03/31  00:15:09  mcooper
 * Add error check for nlist.n_type.
 *
 * Revision 1.1  1992/03/01  23:28:16  mcooper
 * Initial revision
 *
 */

/*
 * Alliant specific functions
 */
#include <stdio.h>
#include "system.h"
#include "defs.h"

#include <fcntl.h>
#include <nlist.h>

/*
 * All the wonderful global extern declarations
 */
#if	defined(HAVE_USERETC)
struct bpb 		       *useretc = (struct bpb *)USERETC;
#endif	/* HAVE_USERETC */
#if	defined(HAVE_MODELNUM)
extern int			modelnum;
#endif	/* HAVE_MODELNUM */
#if	defined(HAVE_MEMORYSIZE)
extern int			memorysize;
#endif	/* HAVE_MEMORYSIZE */
#if	defined(HAVE_SERIALNUM)
extern int			serialnum;
#endif	/* HAVE_SERIALNUM */

/*
 * Lookup a model value (val) and returns it's name.
 */
extern char *GetModelName()
{
    register int 		i;
    register int		Num = -1;
    extern NAMETAB 		ModelTab[];

#if	defined(HAVE_MODELNUM)
    /*
     * Alliant 2800's have an external variable
     * called "modelnum".
     */
    Num = modelnum;
#endif	/* HAVE_MODELNUM */
#if	defined(HAVE_USERETC)
    /*
     * Alliant FX/80's have an external variable
     * called "useretc".
     */
    Num = useretc->bp_model;
#endif	/* HAVE_USERETC */

    for (i = 0; ModelTab[i].name; ++i) {
	if (ModelTab[i].value == Num)
	    return(ModelTab[i].name);
    }

    return((char *) NULL);
}

/*
 * Get amount of memory.
 */
extern char *GetMemory()
{
    static char			Buf[BUFSIZ];
    int				Amount = -1;
#if	defined(HAVE_LIB_SYSCFG)
    int 			mem, ip, ce, det, att;

    lib_syscfg(&mem, &ip, &ce, &det, &att);
    Amount = mem;
#endif	/* HAVE_LIB_SYSCFG */
#if	defined(HAVE_MEMORYSIZE)
    Amount = memorysize;
#endif	/* HAVE_MEMORYSIZE */

    if (Amount > 0) {
	(void) sprintf(Buf, "%d MB", Amount);
	return(Buf);
    } else
	return((char *) NULL);
}

/*
 * Get kernel version string from kernel.
 */
extern char *GetKernelVersionStr()
{
    struct nlist	       *nlptr;
    extern char			VersionNameSYM[];
    extern char			VersionDateSYM[];
    static char			Version[BUFSIZ];
    static char			VerName[BUFSIZ], VerDate[BUFSIZ];
    register char	       *p;
    kvm_t		       *kd;
    u_long			nameaddr, dateaddr;

    Version[0] = C_NULL;

    if (!(kd = KVMopen()))
	return((char *) NULL);

    if (nlptr = KVMnlist(kd, VersionNameSYM, (struct nlist *)NULL)) {
	if (CheckNlist(nlptr))
	    return((char *) NULL);

	if (KVMread(kd, nlptr->n_value, (char *) VerName, sizeof(VerName))) {
	    if (Debug) Error("GetKernelVersionStr() read versionname failed.");
	    return((char *) NULL);
	}
    }

    if (nlptr = KVMnlist(kd, VersionDateSYM, (struct nlist *)NULL)) {
	if (CheckNlist(nlptr))
	    return((char *) NULL);

	if (KVMread(kd, nlptr->n_value, (char *) VerDate, sizeof(VerDate))) {
	    if (Debug) Error("GetKernelVersionStr() read versiondate failed.");
	    return((char *) NULL);
	}
    }

    if (kd)
	KVMclose(kd);

    /*
     * Zap trailing white space
     */
    p = VerName;
    p = p + strlen(VerName) - 1;
    while (*p == ' ') {
	*p = C_NULL;
	*--p;
    }

    (void) sprintf(Version, "%s: %s", VerName, VerDate);

    return(Version);
}

/*
 * Get system serial number.
 */
extern char *GetSerialNoStr()
{
#if	defined(HAVE_SERIALNUM)
    /*
     * Use global variable "serialnum"
     */
    return(itoa(serialnum));
#endif	/* HAVE_SERIALNUM */
#if	defined(HAVE_USERETC)
    /*
     * Use global variable "useretc"
     */
    return(itoa(useretc->bp_serialnum));
#endif 	/* HAVE_USERETC */
}

/*
 * Get OS Version string
 */
extern char *GetOSVersionStr()
{
    return(GetOSVersionFromKernVer());
}

/*
 * Get ROM Version
 */
extern char *GetRomVer()
{
    /* No support */
    return((char *) NULL);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.