Changeset 2915


Ignore:
Timestamp:
Dec 27, 2006, 10:20:14 PM (19 years ago)
Author:
bird
Message:

cleanup (evening party commit).

Location:
trunk/libc
Files:
22 edited

Legend:

Unmodified
Added
Removed
  • trunk/libc/include/InnoTekLIBC/libc.h

    r1618 r2915  
    1 /* $Id$ */
    2 /** @file
    3  *
    4  * Global LIBC stuff.
    5  *
    6  * Copyright (c) 2004 knut st. osmundsen <bird-srcspam@anduin.net>
    7  *
    8  *
    9  * This file is part of InnoTek LIBC.
    10  *
    11  * InnoTek LIBC is free software; you can redistribute it and/or modify
    12  * it under the terms of the GNU General Public License as published by
    13  * the Free Software Foundation; either version 2 of the License, or
    14  * (at your option) any later version.
    15  *
    16  * InnoTek LIBC is distributed in the hope that it will be useful,
    17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    19  * GNU General Public License for more details.
    20  *
    21  * You should have received a copy of the GNU General Public License
    22  * along with InnoTek LIBC; if not, write to the Free Software
    23  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    24  *
    25  */
    26 
    27 #ifndef __InnoTekLIBC_libc_h__
    28 #define __InnoTekLIBC_libc_h__
    29 
    30 #include <sys/cdefs.h>
    31 #include <sys/signal.h>
    32 
    33 __BEGIN_DECLS
    34 
    35 /** Disable (some) unix imitation features.
    36  *
    37  * If non-zero, '\\' is prefered over '/', and a bunch of other unix
    38  * imitations are dropped.
    39  *
    40  * Initiated by __init_dll().
    41  */
    42 extern int __libc_gfNoUnix;
    43 
    44 /** Signal set of the signals which will interrupt system call execution.
    45  * By default all signals will interrupt syscall execution, since OS/2 can't really
    46  * restart system calls easily.
    47  * Update is protected by the signal semaphore, however read access isn't.
    48  */
    49 extern sigset_t __libc_gSignalRestartMask;
    50 
    51 __END_DECLS
    52 
    53 #endif
     1/* dead */
  • trunk/libc/include/klibc/initterm.h

    r2901 r2915  
    3131
    3232# include <stdint.h>
     33# include <emx/startup.h>
    3334
    3435__BEGIN_DECLS
  • trunk/libc/include/klibc/os2/os2.h

    r2914 r2915  
    4040#include <os2thunk.h>
    4141
     42#ifndef HFILE_STDERR
     43# define HFILE_STDERR 2
    4244#endif
    4345
     46#ifndef HFILE_STDOUT
     47# define HFILE_STDOUT 1
     48#endif
     49
     50#ifndef HFILE_STDIN
     51# define HFILE_STDIN 0
     52#endif
     53
     54
     55#endif
     56
  • trunk/libc/include/sys/signal.h

    r2305 r2915  
    541541
    542542/*******************************************************************************
     543*   Global Variables                                                           *
     544*******************************************************************************/
     545#if __BSD_VISIBLE
     546/** Signal set of the signals which will interrupt system call execution.
     547 * By default all signals will interrupt syscall execution, since OS/2 can't really
     548 * restart system calls easily.
     549 * Update is protected by the signal semaphore, however read access isn't.
     550 */
     551extern sigset_t __libc_gSignalRestartMask;
     552#endif
     553
     554
     555/*******************************************************************************
    543556*   Functions                                                                  *
    544557*******************************************************************************/
  • trunk/libc/src/kNIX/Makefile.kmk

    r2914 r2915  
    3333
    3434libc_kNIX_TEMPLATE = libcsub
     35libc_kNIX_INCS = $(PATH_LIBC_SRC)/kNIX
    3536libc_kNIX_SOURCES = \
    3637    $(PATH_LIBC_SRC)/kNIX/b_fsPathResolve.c \
     
    150151    $(PATH_LIBC_SRC)/kNIX/os2/logstrict.c \
    151152    $(PATH_LIBC_SRC)/kNIX/os2/os2error.c \
    152     $(PATH_LIBC_SRC)/kNIX/os2/p2t.c \
    153153    $(PATH_LIBC_SRC)/kNIX/os2/pathrewrite.c \
    154154    $(PATH_LIBC_SRC)/kNIX/os2/priority.c \
     
    208208LIBRARIES += libc_kNIX_asm
    209209libc_kNIX_asm_TEMPLATE = libcsubasm
     210libc_kNIX_asm_INCS = $(PATH_LIBC_SRC)/kNIX
    210211libc_kNIX_asm_SOURCES.os2 = \
    211212        $(PATH_LIBC_SRC)/kNIX/os2/386/signal16bit.asm
  • trunk/libc/src/kNIX/kNIX.h

    r2914 r2915  
    4141#endif
    4242#include <errno.h>
     43#include <io.h>
    4344#include <malloc.h>
    4445#include <share.h>
     
    4647#include <string.h>
    4748#include <process.h>
     49#include <setjmp.h>
    4850#include <sys/builtin.h>
    4951#include <sys/dirent.h>
     
    116118typedef __LIBC_FHDIR *__LIBC_PFHDIR;
    117119
    118 int __libc_Back_dirOpenNative(char *pszNativePath, unsigned fInUnixTree, unsigned fLibc, struct stat *pStat);
     120int __libc_Back_dirOpenNative(char *pszNativePath, unsigned fInUnixTree, unsigned fLibc, struct stat *pStat, __LIBC_PPFH ppFH);
    119121int __libc_back_dirInherit(int fh, const char *pszNativePath, unsigned fInUnixTree, unsigned fFlags,
    120122                           ino_t Inode, dev_t Dev, unsigned uCurEntry);
  • trunk/libc/src/kNIX/os2/b_dir.c

    r2909 r2915  
    3030#include "kNIX.h"
    3131#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_BACK_IO
    32 #include <InnoTekLIBC/logstrict.h>
     32#include <klibc/logstrict.h>
    3333
    3434
     
    419419
    420420    if (rc > 0)
    421         rc = -__libc_native2errno(rc);
     421        rc = -__libc_back_native2errno(rc);
    422422    return rc;
    423423}
     
    480480 * @param   fLibc               The LIBC open() flags.
    481481 * @param   pStat               Pointer to the stat structure for the directory.
    482  */
    483 int __libc_Back_dirOpenNative(char *pszNativePath, unsigned fInUnixTree, unsigned fLibc, struct stat *pStat)
    484 {
    485     LIBCLOG_ENTER("pszNativePath=%p:{%s} fInUnixTree=%d fLibc=%#x pStat=%p\n", (void *)pszNativePath, pszNativePath, fInUnixTree, fLibc, (void *)pStat);
     482 * @param   ppFH
     483 */
     484int __libc_Back_dirOpenNative(char *pszNativePath, unsigned fInUnixTree, unsigned fLibc, struct stat *pStat, __LIBC_PPFH ppFH)
     485{
     486    LIBCLOG_ENTER("pszNativePath=%p:{%s} fInUnixTree=%d fLibc=%#x pStat=%p ppFH=%p\n", (void *)pszNativePath, pszNativePath, fInUnixTree, fLibc, (void *)pStat, (void *)ppFH);
    486487
    487488    /*
     
    516517        pFHDir->Core.Dev   = pStat->st_dev;
    517518        pFHDir->fInUnixTree = fInUnixTree;
    518 
    519519        LIBCLOG_MSG("pFHDir=%p:{.hDir=%#lx, .fType=%d, .cFiles=%ld, .cbBuf=%#x} fh=%d\n",
    520520                    (void *)pFHDir, pFHDir->hDir, pFHDir->fType, pFHDir->cFiles, pFHDir->cbBuf, fh);
     521        if (ppFH)
     522            *ppFH = &pFHDir->Core;
     523        else
     524            __libc_FHPut(&pFHDir->Core);
    521525        LIBCLOG_RETURN_INT(fh);
    522526    }
    523527    LIBCLOG_ERROR_RETURN_INT(rc);
    524528}
    525 
    526529
    527530
     
    573576                /** @todo verify that ERROR_NO_MORE_FILES is returned repeatedly. */
    574577                if (!cbRet && rc != ERROR_NO_MORE_FILES)
    575                     cbRet = -__libc_native2errno(rc);
     578                    cbRet = -__libc_back_native2errno(rc);
    576579                pFHDir->cFiles = 0;
    577580                break;
  • trunk/libc/src/kNIX/os2/b_ioFileControl.c

    r2914 r2915  
    2828*   Header Files                                                               *
    2929*******************************************************************************/
    30 #include "libc-alias.h"
    31 
    32 #define INCL_ERRORS
    33 #define INCL_FSMACROS
    34 #include <os2emx.h>
    35 
    36 #include <fcntl.h>
    37 #include <errno.h>
    38 #include <limits.h>
    39 #include <io.h>
    40 #include <string.h>
    41 #include <sys/builtin.h>
    42 #include "b_fs.h"
    43 #include <InnoTekLIBC/backend.h>
    44 #define __LIBC_LOG_GROUP    __LIBC_LOG_GRP_IO
    45 #include <InnoTekLIBC/logstrict.h>
     30#include "kNIX.h"
     31#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_IO
     32#include <klibc/logstrict.h>
    4633
    4734
     
    7663     */
    7764    __LIBC_PFH  pFH;
    78     int rc = __libc_FHEx(fh, &pFH);
     65    int rc = __libc_FHGet(fh, &pFH);
    7966    if (!rc)
    8067    {
     
    9279             * Non-standard fh - call registered method.
    9380             */
    94             rc = pFH->pOps->pfnFileControl(pFH, fh, iRequest, (int)iArg, prc); /** @todo fix iArg */
    95         }
     81            rc = pFH->pOps->pfnFileControl(pFH, iRequest, (int)iArg, prc); /** @todo fix iArg */
     82        }
     83        __libc_FHPut(pFH);
    9684        if (!rc)
    9785            LIBCLOG_RETURN_INT(rc);
  • trunk/libc/src/kNIX/os2/b_ioFileOpen.c

    r2914 r2915  
    177177            {
    178178                /** @todo add ppFH to the argument list of __libc_Back_dirOpenNative() */
    179                 rc = __libc_Back_dirOpenNative(szNativePath, fInUnixTree, fLibc, &st);
    180                 if (rc >= 0)
    181                 {
    182                     if (ppFH)
    183                         __libc_FHGet(rc, ppFH);
    184                     LIBCLOG_RETURN_INT(rc);
    185                 }
    186                 LIBCLOG_ERROR_RETURN_INT(rc);
    187                 break;
     179                rc = __libc_Back_dirOpenNative(szNativePath, fInUnixTree, fLibc, &st, ppFH);
     180                LIBCLOG_MIX_RETURN_INT(rc);
    188181            }
    189182
  • trunk/libc/src/kNIX/os2/b_processExit.c

    r2742 r2915  
    1 /* sys/exit.c (emx+gcc) -- Copyright (c) 1992-1993 by Eberhard Mattes
    2                            Copyright (c) 2004 knut st. osmundsen */
     1/* $Id: $ */
     2/** @file
     3 *
     4 * kNIX - _Exit().
     5 *
     6 * Copyright (c) 1992-1993 by Eberhard Mattes
     7 * Copyright (c) 2004-2006 knut st. osmundsen <bird-srcspam@anduin.net>
     8 *
     9 *
     10 * This file is part of kLIBC.
     11 *
     12 * kLIBC is free software; you can redistribute it and/or modify
     13 * it under the terms of the GNU Lesser General Public License as published
     14 * by the Free Software Foundation; either version 2 of the License, or
     15 * (at your option) any later version.
     16 *
     17 * kLIBC is distributed in the hope that it will be useful,
     18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     20 * GNU Lesser General Public License for more details.
     21 *
     22 * You should have received a copy of the GNU Lesser General Public License
     23 * along with kLIBC; if not, write to the Free Software
     24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     25 *
     26 */
    327
    4 #include "libc-alias.h"
    5 #define INCL_FSMACROS
    6 #include <os2emx.h>
    7 #include <emx/syscalls.h>
    8 #include <InnoTekLIBC/sharedpm.h>
    9 /*******************************************************************************
    10 *   Structures and Typedefs                                                    *
    11 *******************************************************************************/
     28#include "kNIX.h"
    1229#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_INITTERM
    13 #include <InnoTekLIBC/logstrict.h>
     30#include <klibc/logstrict.h>
    1431
    15 
    16 void __exit(int rc)
     32/**
     33 * Sets the exit code for the current process and terminates it.
     34 * This call never returns.
     35 *
     36 * @param   rc      The process exit code.
     37 */
     38void __libc_Back_processExit(int rc)
    1739{
    1840    LIBCLOG_ENTER("rc=%d\n", rc);
     
    2850     */
    2951    FS_SAVE_LOAD();
    30     for (;;)
    31         DosExit(EXIT_PROCESS, rc < 0 || rc > 255 ? 255 : rc);
     52    rc = rc < 0 || rc > 255 ? 255 : rc;
     53    DosExit(EXIT_PROCESS, rc);
     54    __libc_Back_panic(__LIBC_PANIC_NO_SPM_TERM, NULL, "DosExit() returned\n");
    3255    LIBCLOG_MSG("shut up\n");
    3356}
     57
  • trunk/libc/src/kNIX/os2/b_processGetPriority.c

    r2913 r2915  
    22/** @file
    33 *
    4  * kNIX - getpriority().
     4 * kNIX - getpriority(), OS/2.
    55 *
    6  * Copyright (c) 2005 knut st. osmundsen <bird@anduin.net>
     6 * Copyright (c) 2005-2006 knut st. osmundsen <bird@anduin.net>
    77 *
    88 *
     
    2828*   Header Files                                                               *
    2929*******************************************************************************/
    30 #include "libc-alias.h"
    31 #include "priority.h"
    32 #include <sys/time.h>
    33 #include <sys/resource.h>
    34 #include <errno.h>
    35 #include <InnoTekLIBC/backend.h>
    36 #include <InnoTekLIBC/sharedpm.h>
    37 #include <klibc/fib.h>
     30#include "kNIX.h"
    3831#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_BACK_PROCESS
    39 #include <InnoTekLIBC/logstrict.h>
     32#include <klibc/logstrict.h>
    4033
    4134
  • trunk/libc/src/kNIX/os2/b_processSetPriority.c

    r2914 r2915  
    22/** @file
    33 *
    4  * kNIX - setpriority().
     4 * kNIX - setpriority(), OS/2.
    55 *
    66 * Copyright (c) 2005 knut st. osmundsen <bird@anduin.net>
     
    2828*   Header Files                                                               *
    2929*******************************************************************************/
    30 #include "libc-alias.h"
    31 #include "priority.h"
    32 #include "backend.h"
    33 #include <sys/time.h>
    34 #include <sys/resource.h>
    35 #include <errno.h>
    36 #include <InnoTekLIBC/backend.h>
    37 #include <InnoTekLIBC/sharedpm.h>
     30#include "kNIX.h"
    3831#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_BACK_PROCESS
    39 #include <InnoTekLIBC/logstrict.h>
    40 
    41 #define INCL_DOSPROCESS
    42 #define INCL_FSMACROS
    43 #define INCL_ERRORS
    44 #include <os2emx.h>
     32#include <klibc/logstrict.h>
    4533
    4634
  • trunk/libc/src/kNIX/os2/b_processWait.c

    r2914 r2915  
    3030*   Header Files                                                               *
    3131*******************************************************************************/
    32 #define INCL_BASE
    33 #define INCL_FSMACROS
    34 #define INCL_EXAPIS
    35 #include <os2emx.h>
    36 
    37 #include <sys/wait.h>
    38 #include <errno.h>
    39 #include <string.h>
    40 #include <386/builtin.h>
    41 #include <sys/fmutex.h>
    42 #include "backend.h"
    43 #include "b_process.h"
    44 #include "b_signal.h"
    45 #include <emx/startup.h>
    46 #include <emx/umalloc.h>
    47 #include <InnoTekLIBC/libc.h>
    48 #include <InnoTekLIBC/thread.h>
    49 #include <InnoTekLIBC/sharedpm.h>
    50 #include <InnoTekLIBC/backend.h>
    51 #include <InnoTekLIBC/FastInfoBlocks.h>
    52 #include <InnoTekLIBC/fork.h>
     32#include "kNIX.h"
     33#include <klibc/initterm.h>
    5334#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_BACK_PROCESS
    54 #include <InnoTekLIBC/logstrict.h>
     35#include <klibc/logstrict.h>
    5536
    5637
  • trunk/libc/src/kNIX/os2/b_signalInterrupt.c

    r2913 r2915  
    2525 */
    2626
    27 
    28 /*******************************************************************************
    29 *   Header Files                                                               *
    30 *******************************************************************************/
    31 #include "libc-alias.h"
    32 #include <signal.h>
    33 #include <errno.h>
    34 #include <InnoTekLIBC/backend.h>
     27#include "kNIX.h"
    3528#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_BACK_SIGNAL
    36 #include <InnoTekLIBC/logstrict.h>
    37 #include "b_signal.h"
    38 
     29#include <klibc/logstrict.h>
    3930
    4031/**
  • trunk/libc/src/kNIX/os2/b_signalMask.c

    r2913 r2915  
    2525 */
    2626
    27 
    28 /*******************************************************************************
    29 *   Header Files                                                               *
    30 *******************************************************************************/
    31 #include "libc-alias.h"
    32 #define INCL_BASE
    33 #define INCL_FSMACROS
    34 #define INCL_DOSSIGNALS
    35 #include <os2emx.h>
    36 
    37 #include <signal.h>
    38 #include <errno.h>
    39 #include <InnoTekLIBC/thread.h>
    40 #include <InnoTekLIBC/backend.h>
     27#include "kNIX.h"
    4128#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_BACK_SIGNAL
    42 #include <InnoTekLIBC/logstrict.h>
    43 #include "b_signal.h"
    44 
     29#include <klibc/logstrict.h>
    4530
    4631/**
  • trunk/libc/src/kNIX/os2/b_signalPending.c

    r2913 r2915  
    2525 */
    2626
    27 
    28 /*******************************************************************************
    29 *   Header Files                                                               *
    30 *******************************************************************************/
    31 #include "libc-alias.h"
    32 #include <signal.h>
    33 #include <errno.h>
    34 #include <InnoTekLIBC/thread.h>
    35 #include <InnoTekLIBC/backend.h>
     27#include "kNIX.h"
    3628#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_BACK_SIGNAL
    37 #include <InnoTekLIBC/logstrict.h>
    38 #include "b_signal.h"
    39 
     29#include <klibc/logstrict.h>
    4030
    4131/**
     
    8171}
    8272
    83 
  • trunk/libc/src/kNIX/os2/b_signalQueue.c

    r2913 r2915  
    2525 */
    2626
    27 
    28 /*******************************************************************************
    29 *   Header Files                                                               *
    30 *******************************************************************************/
    31 #include "libc-alias.h"
    32 #include <signal.h>
    33 #include <errno.h>
    34 #include <InnoTekLIBC/backend.h>
     27#include "kNIX.h"
    3528#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_BACK_SIGNAL
    36 #include <InnoTekLIBC/logstrict.h>
    37 #include "b_signal.h"
    38 #include "syscalls.h"
    39 
    40 
     29#include <klibc/logstrict.h>
    4130
    4231/**
     
    6857    SigInfo.si_value    = SigVal;
    6958    int rc;
    70     if (pid == _sys_pid)
     59    if (pid == fibGetPid())
    7160    {
    7261        if (iSignalNo)
  • trunk/libc/src/kNIX/os2/b_signalStack.c

    r2913 r2915  
    2929*   Header Files                                                               *
    3030*******************************************************************************/
    31 #include "libc-alias.h"
    32 #include <signal.h>
    33 #include <errno.h>
    34 #include <InnoTekLIBC/thread.h>
    35 #include <InnoTekLIBC/backend.h>
     31#include "kNIX.h"
    3632#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_BACK_SIGNAL
    37 #include <InnoTekLIBC/logstrict.h>
    38 #include "b_signal.h"
     33#include <klibc/logstrict.h>
    3934
    4035/**
  • trunk/libc/src/kNIX/os2/b_signalSuspend.c

    r2913 r2915  
    2929*   Header Files                                                               *
    3030*******************************************************************************/
    31 #include "libc-alias.h"
    32 #include <signal.h>
    33 #include <errno.h>
    34 #include <InnoTekLIBC/thread.h>
    35 #include <InnoTekLIBC/backend.h>
     31#include "kNIX.h"
    3632#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_BACK_SIGNAL
    37 #include <InnoTekLIBC/logstrict.h>
    38 #include "b_signal.h"
     33#include <klibc/logstrict.h>
    3934
    4035
  • trunk/libc/src/kNIX/os2/kNIX-os2.h

    r2914 r2915  
    2929
    3030#include <InnoTekLIBC/sharedpm.h>
     31#include "os2/dosex.h"
     32
    3133
    3234__BEGIN_DECLS
     
    246248void __libc_back_processWaitNotifyChild(siginfo_t *pSigInfo);
    247249void __libc_back_processWaitNotifyNoWait(int fNoWaitStatus);
     250extern _fmutex __libc_gmtxExec;
    248251
    249252
  • trunk/libc/src/kNIX/os2/libcfork.c

    r2914 r2915  
    2929*   Header Files                                                               *
    3030*******************************************************************************/
    31 #include "libc-alias.h"
    32 #define NO_EXAPIS_MAPPINGS
    33 #define INCL_BASE
    34 #define INCL_FSMACROS
    35 #define INCL_FPCWMACROS
    36 #define INCL_EXAPIS
    37 #define INCL_ERRORS
    38 #define INCL_DOSINFOSEG
    39 #include <os2emx.h>
    40 #include <stdlib.h>
    41 #include <stddef.h>
    42 #include <string.h>
    43 #include <errno.h>
    44 #include <setjmp.h>
    45 #include <emx/syscalls.h>
    46 #include <386/builtin.h>
    47 #include <sys/fmutex.h>
    48 #include <InnoTekLIBC/fork.h>
    49 #include <InnoTekLIBC/sharedpm.h>
    50 #include <InnoTekLIBC/FastInfoBlocks.h>
    51 #define __LIBC_LOG_GROUP    __LIBC_LOG_GRP_FORK
    52 #include <InnoTekLIBC/logstrict.h>
    53 #include "syscalls.h"
    54 #include "DosEx.h"
    55 #include "b_process.h"
     31#include "kNIX.h"
     32#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_FORK
     33#include <klibc/logstrict.h>
    5634
    5735
  • trunk/libc/src/kNIX/os2/logstrict.c

    r2913 r2915  
    4949*   Header Files                                                               *
    5050*******************************************************************************/
    51 #define _GNU_SOURCE                     /* strnlen() */
    52 #include <InnoTekLIBC/logstrict.h>
    53 #include <string.h>
    54 #include <stdio.h>
    55 #include <stdlib.h>
    56 #include <stdarg.h>
    57 #include <process.h>
    58 #include <errno.h>
    59 #include <sys/builtin.h>
    60 #include <emx/umalloc.h>
    61 #include <setjmp.h>
    62 #include <machine/param.h>
    63 #include <InnoTekLIBC/thread.h>
    64 #include <InnoTekLIBC/fork.h>
    65 
    66 #define INCL_BASE
    67 #define INCL_FSMACROS
    68 #include <os2.h>
    69 #ifndef HFILE_STDERR
    70 #define HFILE_STDERR 2
    71 #endif
     51#include "kNIX.h"
     52#include <klibc/logstrict.h>
    7253
    7354
Note: See TracChangeset for help on using the changeset viewer.