[comp.os.os9] OSK Version

weo@recco.chi.sub.org (Wolfgang Ocker) (03/28/90)

Since OSK version V2.3 we have a compatibility problem: makdir() bites
you (a V2.3 program which uses makdir() crashes on a V2.2 system).

So I've written one of the most useful functions for OSK:
osk_version(). It puts a lot of important version information into a
structure. It's really simple, therefore I don't have written any
documentation.

Best regards,
/// Wolfgang

---- Cut here ---- Cut here ---- Cut here ---- Cut here ---- Cut here ----
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 1)."
# Contents:  oskversion.h version.c
# Wrapped by oskst@recsys on Tue Mar 27 20:28:01 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'oskversion.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'oskversion.h'\"
else
echo shar: Extracting \"'oskversion.h'\" \(442 characters\)
sed "s/^X//" >'oskversion.h' <<'END_OF_FILE'
X/*
X * Structure for osk_version()
X */
X
Xstruct oskversion {
X  int  level;           /* OSK level */
X  int  version;         /* OSK version */
X  int  revision;        /* revision */
X  int  edition;         /* edition */
X  int  cpu;             /* CPU type (from init module) */
X  int  cpu_run;         /* CPU type (real CPU, from system globals) */
X
X  char mainframe[64];   /* mainframe */
X  char os9rev[64];      /* os9 revision string */
X};
X
END_OF_FILE
if test 442 -ne `wc -c <'oskversion.h'`; then
    echo shar: \"'oskversion.h'\" unpacked with wrong size!
fi
# end of 'oskversion.h'
fi
if test -f 'version.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'version.c'\"
else
echo shar: Extracting \"'version.c'\" \(1902 characters\)
sed "s/^X//" >'version.c' <<'END_OF_FILE'
X/* ------------------------------------------------------------------- *
X |
X | OS9Lib:  osk_version()
X |
X |
X |     Copyright (c) 1990 by Wolfgang Ocker, Puchheim
X |                           (W-Germany)
X |
X |  This  program  can  be  copied and  distributed freely  for any
X |  non-commercial  purposes.   It can only  be  incorporated  into
X |  commercial software with the written permission of the author.
X |
X |  If you should modify this program, the author  would appreciate
X |  a notice about the changes. Please send a (context) diff or the
X |  complete source to:
X |
X |  address:     reccoware systems
X |               Wolfgang Ocker
X |               Lochhauser Strasse 35a
X |               D-8039 Puchheim
X |               West Germany
X |
X |  e-mail:      weo@chi.sub.org
X |
X * ----------------------------------------------------------------- */
X
X#include <stdio.h>
X#include <module.h>
X#include <setsys.h>
X#include <strings.h>
X#include <oskversion.h>
X
X/*
X * o s k _ v e r s i o n
X *
X * Return version information of OSK
X */
Xint osk_version(version)
X  register struct oskversion *version;
X{
X  register mod_config *mod;
X
X  if ((mod = (mod_config *) modlink("init", mktypelang(MT_SYSTEM, ML_ANY))) ==
X      (mod_config *) -1)                /* yep, this tells us the manual! */
X    return(-1);                         /* error */
X
X  version->level    = mod->_mos9lvl[0];
X  version->version  = mod->_mos9lvl[1];
X  version->revision = mod->_mos9lvl[2];
X  version->edition  = mod->_mos9lvl[3];
X
X  version->cpu      = mod->_mcputyp;          /* CPU type of init module */
X  version->cpu_run  = _getsys(D_MPUType, sizeof(long));      /* real CPU */
X  
X  (void) strncpy(version->mainframe, ((char *) mod) + mod->_minstal, 64);
X  version->mainframe[63] = '\0';
X
X  (void) strncpy(version->os9rev, ((char *) mod) + mod->_mos9rev, 64);
X  version->os9rev[63] = '\0';
X
X  (void) munlink(mod);
X  return(0);
X}
END_OF_FILE
if test 1902 -ne `wc -c <'version.c'`; then
    echo shar: \"'version.c'\" unpacked with wrong size!
fi
# end of 'version.c'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have the archive.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
---- Cut here ---- Cut here ---- Cut here ---- Cut here ---- Cut here ----

--
|  Wolfgang Ocker          |     weo@recco.chi.sub.org     |
|  Lochhauser Strasse 35a  +-------------------------------+
|  D-8039 Puchheim         |       reccoware systems       |
|  Voice: +49 89 80 77 02  |                               |
|  Fax:   +49 89 80 29 67  |    Huh, What?  Where am I?    |