Changeset 5480da in git
- Timestamp:
- Apr 4, 1998, 12:47:15 AM (25 years ago)
- Branches:
- (u'spielwiese', 'f6c3dc58b0df4bd712574325fe76d0626174ad97')
- Children:
- a42239a667454add16526617638435dcc1115d49
- Parents:
- fca547bc4a4fdc03461b1fa87b33c326d44b5733
- Location:
- Singular
- Files:
-
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/ChangeLog
rfca547 r5480da 1 Sat Apr 4 00:52:58 MET DST 1998 Kai Krueger <krueger@mathematik.uni-kl.de> 2 * iplib.cc libparse.cc libparse.h libparse.l misc.cc LIB/*.lib 3 Changed help for libraries. 4 1 5 Wed Apr 1 20:55:15 MET DST 1998 hannes 2 6 * mpsr_Tok.cc,tok.h: minor fix, removed VERBOSE_CMD -
Singular/LIB/all.lib
rfca547 r5480da 1 // $Id: all.lib,v 1. 6 1998-03-10 13:02:33 Singular Exp $1 // $Id: all.lib,v 1.7 1998-04-03 22:46:58 krueger Exp $ 2 2 /////////////////////////////////////////////////////////////////////////////// 3 3 4 version="$Id: all.lib,v 1.7 1998-04-03 22:46:58 krueger Exp $"; 5 info=" 4 6 LIBRARY: all.lib Load all libraries 5 7 … … 8 10 elim.lib PROCEDURES FOR ELIMINATION, SATURATION AND BLOWING UP 9 11 factor.lib PROCEDURES FOR CALLING EXTERNAL FACTORIZER 12 fastsolv.lib 10 13 finvar.lib PROCEDURES TO CALCULATE INVARIANT RINGS & MORE 11 14 general.lib PROCEDURES OF GENERAL TYPE … … 15 18 invar.lib PROCEDURES FOR COMPUTING INVARIANTS OF (C,+)-ACTIONS 16 19 matrix.lib PROCEDURES FOR MATRIX OPERATIONS 20 normal.lib 17 21 poly.lib PROCEDURES FOR MANIPULATING POLYS, IDEALS, MODULES 18 22 presolve.lib PROCEDURES FOR PRE-SOLVING POLYNOMIAL EQUATIONS … … 24 28 standard.lib PROCEDURES WHICH ARE ALWAYS LOADED AT START-UP 25 29 tex.lib PROCEDURES FOR TYPESET OF SINGULAROBJECTS IN TEX 30 tst.lib 31 "; 26 32 27 33 /////////////////////////////////////////////////////////////////////////////// … … 31 37 LIB "elim.lib"; 32 38 LIB "factor.lib"; 39 LIB "fastsolv.lib"; 33 40 LIB "finvar.lib"; 34 41 LIB "general.lib"; … … 38 45 LIB "invar.lib"; 39 46 LIB "matrix.lib"; 47 LIB "normal.lib"; 40 48 LIB "poly.lib"; 41 49 LIB "presolve.lib"; … … 46 54 LIB "sing.lib"; 47 55 LIB "tex.lib"; 48 LIB "tools.lib";56 // LIB "tools.lib"; -
Singular/LIB/deform.lib
rfca547 r5480da 1 // $Id: deform.lib,v 1. 6 1998-03-06 11:52:52krueger Exp $1 // $Id: deform.lib,v 1.7 1998-04-03 22:46:59 krueger Exp $ 2 2 //(bm, last modified 12/97) 3 3 /////////////////////////////////////////////////////////////////////////////// 4 5 version="$Id: deform.lib,v 1.7 1998-04-03 22:46:59 krueger Exp $"; 6 info=" 4 7 LIBRARY: deform.lib PROCEDURES FOR COMPUTING MINIVERSAL DEFORMATION 5 8 (new version) … … 8 11 miniversal deformation of module Mo modulo ideal I 9 12 lift_rel_kb(N,M[,kbM,p]) lifting N into a kbase of M 10 kill_rings([ "prefix"]) kills the exported rings from above13 kill_rings([\"prefix\"]) kills the exported rings from above 11 14 lift_kbase(N,M); coef-matrix expressing N as lin. comb. of k-basis of M 12 15 … … 14 17 get_rings,compute_ext,get_inf_def,interact1, 15 18 interact2,negative_part,homog_test 19 "; 20 16 21 LIB "inout.lib"; 17 22 LIB "general.lib"; -
Singular/LIB/elim.lib
rfca547 r5480da 1 // $Id: elim.lib,v 1. 2 1997-04-28 19:27:16 obachmanExp $1 // $Id: elim.lib,v 1.3 1998-04-03 22:47:00 krueger Exp $ 2 2 // system("random",787422842); 3 3 // (GMG, last modified 22.06.96) 4 4 /////////////////////////////////////////////////////////////////////////////// 5 5 6 version="$Id: elim.lib,v 1.3 1998-04-03 22:47:00 krueger Exp $"; 7 info=" 6 8 LIBRARY: elim.lib PROCEDURES FOR ELIMINATIOM, SATURATION AND BLOWING UP 7 9 … … 13 15 select(id,n[,m]); select generators containing nth [..mth] variable 14 16 (parameters in square brackets [] are optional) 17 "; 15 18 16 19 LIB "inout.lib"; -
Singular/LIB/factor.lib
rfca547 r5480da 1 // $Id: factor.lib,v 1. 3 1997-05-05 12:02:44 Singular Exp $1 // $Id: factor.lib,v 1.4 1998-04-03 22:47:01 krueger Exp $ 2 2 //(RS) 3 3 /////////////////////////////////////////////////////////////////////////////// 4 4 5 version="$Id: factor.lib,v 1.4 1998-04-03 22:47:01 krueger Exp $"; 6 info=" 5 7 LIBRARY: factor.lib PROCEDURES FOR CALLING THE REDUCE FACTORIZER 6 8 7 9 delete_dollar(s) return the string s with '$' deleted 8 10 reduce_factor(f) list of factors of f, calling REDUCE (UNIX only) 11 "; 9 12 10 13 /////////////////////////////////////////////////////////////////////////////// -
Singular/LIB/fastsolv.lib
rfca547 r5480da 1 // $ID$ 1 // 2 version="$Id: fastsolv.lib,v 1.2 1998-04-03 22:47:01 krueger Exp $"; 3 info=""; 4 2 5 // ==================================================================== 3 6 // library fast.lib -
Singular/LIB/finvar.lib
rfca547 r5480da 1 // $Header: /exports/cvsroot-2/cvsroot/Singular/LIB/finvar.lib,v 1. 7 1998-03-06 11:52:53krueger Exp $1 // $Header: /exports/cvsroot-2/cvsroot/Singular/LIB/finvar.lib,v 1.8 1998-04-03 22:47:02 krueger Exp $ 2 2 //////////////////////////////////////////////////////////////////////////////// 3 3 4 version="$Id: finvar.lib,v 1.8 1998-04-03 22:47:02 krueger Exp $"; 5 info=" 4 6 LIBRARY: finvar.lib LIBRARY TO CALCULATE INVARIANT RINGS & MORE 5 7 (c) Agnes Eileen Heydtmann, … … 40 42 relative_orbit_variety(...) ideal of a relative orbit variety 41 43 image_of_variety(...) ideal of the image of a variety 44 "; 42 45 43 46 //////////////////////////////////////////////////////////////////////////////// -
Singular/LIB/general.lib
rfca547 r5480da 1 // $Id: general.lib,v 1. 4 1997-08-12 14:01:07 Singular Exp $1 // $Id: general.lib,v 1.5 1998-04-03 22:47:04 krueger Exp $ 2 2 //system("random",787422842); 3 3 //(GMG, last modified 22.06.96) 4 4 /////////////////////////////////////////////////////////////////////////////// 5 5 6 version="$Id: general.lib,v 1.5 1998-04-03 22:47:04 krueger Exp $"; 7 info=" 6 8 LIBRARY: general.lib PROCEDURES OF GENERAL TYPE 7 9 8 A_Z( "a",n); string a,b,... of n comma seperated letters10 A_Z(\"a\",n); string a,b,... of n comma seperated letters 9 11 binomial(n,m[,../..]); n choose m (type int), [type string/type number] 10 12 factorial(n[,../..]); n factorial (=n!) (type int), [type string/number] … … 22 24 which(command); searches for command and returns absolute 23 25 path, if found 26 "; 27 24 28 LIB "inout.lib"; 25 29 /////////////////////////////////////////////////////////////////////////////// -
Singular/LIB/hnoether.lib
rfca547 r5480da 1 // $Id: hnoether.lib,v 1. 3 1998-03-17 15:06:35 Singular Exp $1 // $Id: hnoether.lib,v 1.4 1998-04-03 22:47:05 krueger Exp $ 2 2 // author: Martin Lamm, email: lamm@mathematik.uni-kl.de 3 3 // last change: 13.03.98 4 4 /////////////////////////////////////////////////////////////////////////////// 5 5 6 version="$Id: hnoether.lib,v 1.4 1998-04-03 22:47:05 krueger Exp $"; 7 info=" 6 8 LIBRARY: hnoether.lib PROCEDURES FOR THE HAMBURGER-NOETHER-DEVELOPMENT 7 9 … … 45 47 HN(f,grenze); recursive subroutine for reddevelop 46 48 constructHNEs(...); subroutine for HN 49 "; 47 50 48 51 LIB "primitiv.lib"; -
Singular/LIB/homolog.lib
rfca547 r5480da 1 // $Id: homolog.lib,v 1. 4 1997-09-12 07:40:34 Singular Exp $1 // $Id: homolog.lib,v 1.5 1998-04-03 22:47:06 krueger Exp $ 2 2 //(BM/GMG, last modified 22.06.96) 3 3 /////////////////////////////////////////////////////////////////////////////// 4 4 5 version="$Id: homolog.lib,v 1.5 1998-04-03 22:47:06 krueger Exp $"; 6 info=" 5 7 LIBRARY: homolog.lib PROCEDURES FOR HOMOLOGICAL ALGEBRA 6 8 … … 14 16 kohom(A,k); Hom(R^k,A), A matrix over basering R 15 17 kontrahom(A,k); Hom(A,R^k), A matrix over basering R 18 "; 16 19 17 20 LIB "general.lib"; -
Singular/LIB/inout.lib
rfca547 r5480da 1 // $Id: inout.lib,v 1. 3 1997-09-12 07:40:35 Singular Exp $1 // $Id: inout.lib,v 1.4 1998-04-03 22:47:06 krueger Exp $ 2 2 // system("random",787422842); 3 3 // (GMG/BM, last modified 22.06.96) 4 4 /////////////////////////////////////////////////////////////////////////////// 5 5 6 version="$Id: inout.lib,v 1.4 1998-04-03 22:47:06 krueger Exp $"; 7 info=" 6 8 LIBRARY: inout.lib PROCEDURES FOR MANIPULATING IN- AND OUTPUT 7 9 … … 17 19 writelist(fil,nam,L); write the list L into a file `fil` and call it `nam` 18 20 (parameters in square brackets [] are optional) 21 "; 19 22 20 23 /////////////////////////////////////////////////////////////////////////////// -
Singular/LIB/invar.lib
rfca547 r5480da 1 // $Id: invar.lib,v 1. 4 1998-02-16 12:07:01 pfister Exp $1 // $Id: invar.lib,v 1.5 1998-04-03 22:47:07 krueger Exp $ 2 2 /////////////////////////////////////////////////////// 3 3 // invar.lib … … 7 7 ////////////////////////////////////////////////////// 8 8 9 version="$Id: invar.lib,v 1.5 1998-04-03 22:47:07 krueger Exp $"; 10 info=" 9 11 LIBRARY: invar.lib PROCEDURES FOR COMPUTING INVARIANTS OF (C,+)-ACTIONS 10 12 … … 23 25 // returns 1 if the action of the additive group defined by the 24 26 // matrix m as above i proper and 0 if not. 27 "; 25 28 26 29 /////////////////////////////////////////////////////////////////////////////// -
Singular/LIB/matrix.lib
rfca547 r5480da 1 // $Id: matrix.lib,v 1. 4 1997-09-18 09:58:24 Singular Exp $1 // $Id: matrix.lib,v 1.5 1998-04-03 22:47:08 krueger Exp $ 2 2 // (GMG/BM, last modified 22.06.96) 3 3 /////////////////////////////////////////////////////////////////////////////// 4 5 version="$Id: matrix.lib,v 1.5 1998-04-03 22:47:08 krueger Exp $"; 6 info=" 4 7 LIBRARY: matrix.lib PROCEDURES FOR MATRIX OPERATIONS 5 8 … … 27 30 permrow(A,i,j); permute i-th and j-th rows 28 31 (parameters in square brackets [] are optional) 32 "; 29 33 30 34 LIB "inout.lib"; -
Singular/LIB/normal.lib
rfca547 r5480da 6 6 /////////////////////////////////////////////////////////////////////////////// 7 7 8 version="$Id: normal.lib,v 1.4 1998-04-03 22:47:08 krueger Exp $"; 9 info=" 8 10 LIBRARY: normal.lib: PROCEDURE FOR NORMALIZATION (I) 9 11 … … 11 13 // computes a set of rings such that their product is the 12 14 // normalization of the reduced basering/I 15 "; 13 16 14 17 LIB "sing.lib"; -
Singular/LIB/poly.lib
rfca547 r5480da 1 // $Id: poly.lib,v 1. 9 1997-12-17 17:28:05 obachmanExp $1 // $Id: poly.lib,v 1.10 1998-04-03 22:47:09 krueger Exp $ 2 2 //system("random",787422842); 3 3 //(GMG, last modified 22.06.96) … … 5 5 /////////////////////////////////////////////////////////////////////////////// 6 6 7 version="$Id: poly.lib,v 1.10 1998-04-03 22:47:09 krueger Exp $"; 8 info=" 7 9 LIBRARY: poly.lib PROCEDURES FOR MANIPULATING POLYS, IDEALS, MODULES 8 10 … … 21 23 rad_con(p,I); check radical containment of poly p in ideal I 22 24 (parameters in square brackets [] are optional) 23 25 "; 24 26 25 27 LIB "general.lib"; -
Singular/LIB/presolve.lib
rfca547 r5480da 1 // $Id: presolve.lib,v 1. 2 1998-03-06 11:52:57krueger Exp $1 // $Id: presolve.lib,v 1.3 1998-04-03 22:47:10 krueger Exp $ 2 2 //system("random",787422842); 3 3 //(GMG), last modified 97/10/07 by GMG 4 4 /////////////////////////////////////////////////////////////////////////////// 5 5 6 version="$Id: presolve.lib,v 1.3 1998-04-03 22:47:10 krueger Exp $"; 7 info=" 6 8 LIBRARY: presolve.lib PROCEDURES FOR PRE-SOLVING POLYNOMIAL EQUATIONS 7 9 … … 20 22 valvars(id[..]); valuation of vars w.r.t. to their complexity in id 21 23 (parameters in square brackets [] are optional) 24 "; 22 25 23 26 LIB "inout.lib"; -
Singular/LIB/primdec.lib
rfca547 r5480da 1 // $Id: primdec.lib,v 1.1 0 1998-03-06 11:52:57krueger Exp $1 // $Id: primdec.lib,v 1.11 1998-04-03 22:47:10 krueger Exp $ 2 2 /////////////////////////////////////////////////////// 3 3 // primdec.lib … … 11 11 ////////////////////////////////////////////////////// 12 12 13 version="$Id: primdec.lib,v 1.11 1998-04-03 22:47:10 krueger Exp $"; 14 info=" 13 15 LIBRARY: primdec.lib: PROCEDURE FOR PRIMARY DECOMPOSITION (I) 14 16 … … 33 35 // The integer choose must be either 0 or 1. 34 36 // If choose=0, the given ordering of the variables is used. 35 // If choose=1, the system tries to find an "optimal ordering",37 // If choose=1, the system tries to find an \"optimal ordering\", 36 38 // which in some cases may considerably speed up the algorithm 37 39 … … 50 52 // If choose=0, min_ass_prim_charsets with the given 51 53 // ordering of the variables is used. 52 // If choose=1, min_ass_prim_charsets with the "optimized"54 // If choose=1, min_ass_prim_charsets with the \"optimized\" 53 55 // ordering of the variables is used. 54 56 // If choose=2, minAssPrimes from primdec.lib is used 55 57 // If choose=3, minAssPrimes+factorizing Buchberger from primdec.lib is used 58 "; 56 59 57 60 LIB "general.lib"; -
Singular/LIB/primitiv.lib
rfca547 r5480da 1 // $Id: primitiv.lib,v 1. 2 1997-08-13 14:13:29 Singular Exp $1 // $Id: primitiv.lib,v 1.3 1998-04-03 22:47:11 krueger Exp $ 2 2 // This library requires Singular 1.0 3 3 4 version="$Id: primitiv.lib,v 1.3 1998-04-03 22:47:11 krueger Exp $"; 5 info=" 4 6 LIBRARY: primitiv.lib PROCEDURES FOR FINDING A PRIMITIVE ELEMENT 5 7 … … 9 11 and switch to it 10 12 randomLast(int b); random transformation of the last variable 13 "; 11 14 12 15 LIB "random.lib"; -
Singular/LIB/random.lib
rfca547 r5480da 1 // $Id: random.lib,v 1. 3 1997-08-12 14:01:11 Singular Exp $1 // $Id: random.lib,v 1.4 1998-04-03 22:47:12 krueger Exp $ 2 2 //system("random",787422842); 3 3 //(GMG/BM, last modified 22.06.96) 4 4 /////////////////////////////////////////////////////////////////////////////// 5 5 6 version="$Id: random.lib,v 1.4 1998-04-03 22:47:12 krueger Exp $"; 7 info=" 6 8 LIBRARY: random.lib PROCEDURES OF RANDOM MATRIX AND POLY OPERATIONS 7 9 … … 14 16 sparsetriag(n,m[..]); nxm sparse lower-triag intmat with random coefficients 15 17 (parameters in square brackets [] are optional) 18 "; 16 19 17 20 LIB "inout.lib"; -
Singular/LIB/ring.lib
rfca547 r5480da 1 // $Id: ring.lib,v 1. 4 1997-09-12 08:18:04 Singular Exp $1 // $Id: ring.lib,v 1.5 1998-04-03 22:47:13 krueger Exp $ 2 2 //(GMG, last modified 03.11.95) 3 3 /////////////////////////////////////////////////////////////////////////////// 4 4 5 version="$Id: ring.lib,v 1.5 1998-04-03 22:47:13 krueger Exp $"; 6 info=" 5 7 LIBRARY: ring.lib PROCEDURES FOR MANIPULATING RINGS AND MAPS 6 8 7 changechar( "R",c[,r]); make a copy R of basering [ring r] with new char c8 changeord( "R",o[,r]); make a copy R of basering [ring r] with new ord o9 changevar( "R",v[,r]); make a copy R of basering [ring r] with new vars v10 defring( "R",c,n,v,o); define a ring R in specified char c, n vars v, ord o9 changechar(\"R\",c[,r]); make a copy R of basering [ring r] with new char c 10 changeord(\"R\",o[,r]); make a copy R of basering [ring r] with new ord o 11 changevar(\"R\",v[,r]); make a copy R of basering [ring r] with new vars v 12 defring(\"R\",c,n,v,o); define a ring R in specified char c, n vars v, ord o 11 13 defrings(n[,p]); define ring Sn in n vars, char 32003 [p], ord ds 12 14 defringp(n[,p]); define ring Pn in n vars, char 32003 [p], ord dp 13 extendring( "R",n,v,o); extend given ring by n vars v, ord o and name it R15 extendring(\"R\",n,v,o); extend given ring by n vars v, ord o and name it R 14 16 fetchall(R[,str]); fetch all objects of ring R to basering 15 17 imapall(R[,str]); imap all objects of ring R to basering 16 18 mapall(R,i[,str]); map all objects of ring R via ideal i to basering 17 ringtensor( "R",s,t,..);create ring R, tensor product of rings s,t,...19 ringtensor(\"R\",s,t,..);create ring R, tensor product of rings s,t,... 18 20 (parameters in square brackets [] are optional) 21 "; 19 22 20 23 LIB "inout.lib"; -
Singular/LIB/sing.lib
rfca547 r5480da 1 // $Id: sing.lib,v 1. 8 1998-01-28 18:47:59 Singular Exp $1 // $Id: sing.lib,v 1.9 1998-04-03 22:47:13 krueger Exp $ 2 2 //system("random",787422842); 3 3 //(GMG/BM, last modified 26.06.96) 4 4 /////////////////////////////////////////////////////////////////////////////// 5 5 6 version="$Id: sing.lib,v 1.9 1998-04-03 22:47:13 krueger Exp $"; 7 info=" 6 8 LIBRARY: sing.lib PROCEDURES FOR SINGULARITIES 7 9 … … 23 25 T2((i); T2-module of ideal i 24 26 T12(i); T1- and T2-module of ideal i 27 "; 25 28 26 29 LIB "inout.lib"; -
Singular/LIB/standard.lib
rfca547 r5480da 1 // $Id: standard.lib,v 1. 6 1998-03-06 15:32:23 Singular Exp $1 // $Id: standard.lib,v 1.7 1998-04-03 22:47:14 krueger Exp $ 2 2 /////////////////////////////////////////////////////////////////////////////// 3 3 4 version="$Id: standard.lib,v 1.7 1998-04-03 22:47:14 krueger Exp $"; 5 info=" 4 6 LIBRARY: standard.lib PROCEDURES WHICH ARE ALWAYS LOADED AT START-UP 5 7 6 8 stdfglm(ideal[,ord]) standard basis of the ideal via fglm [and ordering ord] 7 9 stdhilbert(ideal) standard basis of the ideal using the Hilbert function 10 "; 11 8 12 /////////////////////////////////////////////////////////////////////////////// 9 13 -
Singular/LIB/tex.lib
rfca547 r5480da 1 // $Id: tex.lib,v 1. 4 1998-03-06 11:52:59krueger Exp $1 // $Id: tex.lib,v 1.5 1998-04-03 22:47:15 krueger Exp $ 2 2 // 3 3 // author : Christian Gorzel email: gorzelc@math.uni-muenster.de … … 5 5 /////////////////////////////////////////////////////////////////////////////// 6 6 7 7 version="$Id: tex.lib,v 1.5 1998-04-03 22:47:15 krueger Exp $"; 8 info=" 8 9 LIBRARY: tex.lib PROCEDURES FOR TYPESET OF SINGULAROBJECTS IN TEX 9 10 by Christian Gorzel, send bugs and … … 38 39 TeXaligned : (int) flag, write mappings (and ideals) aligned 39 40 TeXreplace : list, entries twoelemented list for replacing symbols 40 NoDollars : (int) flag, suppresses surrounding "$" signs41 41 NoDollars : (int) flag, suppresses surrounding \"$\" signs 42 "; 42 43 43 44 /////////////////////////////////////////////////////////////////////////////// -
Singular/LIB/tst.lib
rfca547 r5480da 1 // $Id: tst.lib,v 1. 2 1998-02-16 13:23:25 obachmanExp $1 // $Id: tst.lib,v 1.3 1998-04-03 22:47:15 krueger Exp $ 2 2 //(obachman, last modified 2/13/98) 3 3 /////////////////////////////////////////////////////////////////////////////// 4 4 5 version="$Id: tst.lib,v 1.3 1998-04-03 22:47:15 krueger Exp $"; 6 info=" 5 7 LIBRARY: tst.lib PROCEDURES FOR RUNNING AUTOMATIC TST TESTS 6 8 7 tst_system(s) returns string which is stdout of system( "sh", s)9 tst_system(s) returns string which is stdout of system(\"sh\", s) 8 10 tst_ignore(any,[keyword], [link]) writes string(any) to link (or stdout), 9 prepending prefix "// ignore:"11 prepending prefix \"// ignore:\" 10 12 tst_init() writes some identification data to stdout 11 13 with tst_ignore 14 "; 15 12 16 /////////////////////////////////////////////////////////////////////////////// 13 17 -
Singular/iplib.cc
rfca547 r5480da 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: iplib.cc,v 1.1 3 1998-04-03 17:38:40 Singular Exp $ */4 /* $Id: iplib.cc,v 1.14 1998-04-03 22:46:53 krueger Exp $ */ 5 5 /* 6 6 * ABSTRACT: interpreter: LIB and help … … 21 21 #include "ipshell.h" 22 22 #include "lists.h" 23 #ifdef HAVE_LIBPARSER 24 # include "libparse.h" 25 #endif /* HAVE_LIBPARSER */ 23 26 24 27 procinfo *iiInitSingularProcinfo(procinfo *pi, char *libname, char *procname, … … 26 29 char *iiConvName(char *p); 27 30 #ifdef HAVE_LIBPARSER 28 int yylplex(char *libname, char *libfile);29 31 void yylprestart (FILE *input_file ); 30 32 int current_pos(int i=0); … … 33 35 extern char *yylp_errlist[]; 34 36 void print_init(); 35 void reinit_yylp();36 37 libstackv library_stack; 37 38 #endif … … 298 299 int err; 299 300 procinfov pi = IDPROC(pn); 301 if(pi->is_static && myynest==0) { 302 Werror("'%s::%s()' is a local procedure and cannot be accessed by an user.", 303 pi->libname, pi->procname); 304 return NULL; 305 } 300 306 iiCheckNest(); 301 307 iiLocalRing[myynest]=currRing; … … 490 496 extern FILE *yylpin; 491 497 libstackv ls_start = library_stack; 498 lib_style_types lib_style; 492 499 493 500 yylpin = fp; … … 495 502 print_init(); 496 503 # endif 497 yylplex(newlib, libnamebuf); 504 Warn( "loading %s...", libnamebuf); 505 yylplex(newlib, libnamebuf, &lib_style); 506 if(lib_style == OLD_LIBSTYLE) 507 Warn( "library %s has an old format. Please fix it for the next time", 508 newlib); 509 else { 510 Warn( "loading %s done, version: %s", newlib, text_buffer); 511 FreeL(text_buffer); 512 } 498 513 if(yylp_errno) { 499 514 Werror("Library %s: ERROR occured: in line %d, %d.", newlib, yylplineno, -
Singular/libparse.h
rfca547 r5480da 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: libparse.h,v 1. 1 1998-03-11 12:03:47 Singular Exp $ */6 /* $Id: libparse.h,v 1.2 1998-04-03 22:46:55 krueger Exp $ */ 7 7 /* 8 8 * ABSTRACT: lib parsing 9 9 */ 10 10 #include "subexpr.h" 11 typedef enum { LOAD_LIB, GET_INFO } lp_modes; 12 typedef enum { OLD_LIBSTYLE, NEW_LIBSTYLE } lib_style_types; 13 11 14 procinfo *iiInitSingularProcinfo(procinfov pi, char *libname, 12 15 char *procname, int line, long pos, 13 16 BOOLEAN pstatic = 0); 14 #endif 17 int yylplex(char *libname, char *libfile, lib_style_types *lib_style, 18 lp_modes=LOAD_LIB); 19 void reinit_yylp(); 20 21 extern char * text_buffer; 22 23 #endif /* LIBPARSE_H */ 15 24 16 25 -
Singular/libparse.l
rfca547 r5480da 3 3 * Computer Algebra System SINGULAR * 4 4 ****************************************/ 5 /* $Id: libparse.l,v 1. 3 1998-03-11 12:03:46 Singular Exp $ */5 /* $Id: libparse.l,v 1.4 1998-04-03 22:46:56 krueger Exp $ */ 6 6 #include <stdio.h> 7 7 #include <string.h> … … 27 27 #define YY_SKIP_YYWRAP 28 28 29 typedef enum { LP_NONE, LP_INFO, LP_VERSION} lib_cmds; 30 29 31 int libread(FILE* f, char* buf, int max_size); 30 32 int current_pos(int i); 33 void print_version(lp_modes mode, char *p); 34 void copy_string(lp_modes mode); 35 void make_version(char *p, int what); 31 36 32 37 int brace1 = 0; /* { } */ … … 37 42 int p_static = 0; 38 43 int old_state = 0; 44 lib_cmds last_cmd = LP_NONE; 39 45 40 46 char libnamebuf[128]; 47 char *text_buffer; 48 long string_start; 41 49 42 50 char *yylp_buffer_start; … … 56 64 "missing close bracket '}' at end of library in line %d.", /* 10 */ 57 65 "missing close bracket ')' at end of library in line %d.", /* 11 */ 58 "missing close bracket ']' at end of library in line %d.", /* 1 1*/66 "missing close bracket ']' at end of library in line %d.", /* 12 */ 59 67 NULL 60 68 }; … … 75 83 #define YYLP_MISS_BR3 12 76 84 77 print_version(char *p);78 79 85 #ifdef STANDALONE_PARSER 80 86 procinfov pi; … … 97 103 #endif /* STANDALONE_PARSER */ 98 104 99 #define SET_DEF_END(pi, p) \ 100 pi->data.s.def_end = p; 101 #define SET_HELP_START(pi, p) \ 102 pi->data.s.help_start = p; \ 103 104 #define SET_BODY_START(pi, l, p) \ 105 { pi->data.s.body_lineno = l; \ 105 #define SET_DEF_END(mode, pi, p) \ 106 if ( mode == LOAD_LIB) pi->data.s.def_end = p; 107 #define SET_HELP_START(mode, pi, p) \ 108 if ( mode == LOAD_LIB) pi->data.s.help_start = p; \ 109 110 #define SET_BODY_START(mode, pi, l, p) \ 111 if ( mode == LOAD_LIB) { \ 112 pi->data.s.body_lineno = l; \ 106 113 pi->data.s.body_start = p; \ 107 114 } 108 #define SET_BODY_END(pi, p) { \ 109 pi->data.s.body_end = p-1; \ 110 pi->data.s.proc_end = p-1; \ 115 #define SET_BODY_END(mode, pi, p) \ 116 if ( mode == LOAD_LIB) { \ 117 pi->data.s.body_end = p-1; \ 118 pi->data.s.proc_end = p-1; \ 111 119 } 112 120 113 #define SET_EXAMPLE_START(pi, l, p) \ 114 { pi->data.s.example_lineno = l; \ 121 #define SET_EXAMPLE_START(mode, pi, l, p) \ 122 if ( mode == LOAD_LIB) { \ 123 pi->data.s.example_lineno = l; \ 115 124 pi->data.s.example_start = p; \ 116 125 } 117 #define SET_PROC_END(pi, p) \ 118 { pi->data.s.proc_end = p-1; \ 126 #define SET_PROC_END(mode, pi, p) \ 127 if ( mode == LOAD_LIB) { \ 128 pi->data.s.proc_end = p-1; \ 119 129 if(pi->data.s.body_end==0) pi->data.s.body_end = p-1; \ 120 130 } 121 131 122 132 #undef YY_DECL 123 #define YY_DECL int yylex(char *newlib, char *libfile) 133 #define YY_DECL int yylex(char *newlib, char *libfile, \ 134 lib_style_types *lib_style, \ 135 lp_modes mode = LOAD_LIB) 124 136 125 137 #undef YY_INPUT … … 133 145 yylplineno = 1; \ 134 146 yylp_errno = 0; \ 147 *lib_style = OLD_LIBSTYLE; \ 135 148 strcpy(libnamebuf,"(**unknown version**)"); \ 136 149 } … … 152 165 comment [\/][\/] 153 166 dolar [$] 167 symbols [~!@#$%^&*()_+-={}\\\|\[\];:,<.>/\?\' \n\~\`] 168 aletters ({letter}|{digit}|{symbols}|{dolar}|{escquote}) 169 strings ({aletters}*) 170 quote [\"] 171 escquote (\\\") 172 taborspace [ \t] 173 tos ({taborspace}*) 154 174 155 175 /* %start START */ … … 169 189 %% 170 190 (\/\/[^\n]*)|(^#![^\n]*)|([ \t]) { } 171 \/\* { old_state = YYSTATE; BEGIN(comment); } 172 173 static { p_static=1; } 191 \/\/* { old_state = YYSTATE; BEGIN(comment); } 192 193 info=+"\"" { old_state = YYSTATE; quote++; BEGIN(string); 194 string_start = current_pos(yyleng); 195 *lib_style = NEW_LIBSTYLE; 196 last_cmd = LP_INFO; 197 } 198 199 (version=+{quote}+{strings}+{quote})|(version+{tos}+=+{quote}+{strings}+{quote})|(version+{tos}+=+{tos}+{quote}+{strings}+{quote})|(version=+{tos}+{quote}+{strings}+{quote}) { 200 if ( mode != GET_INFO ) { 201 make_version(yytext,1); 202 #ifdef STANDALONE_PARSER 203 printf("Version:%s;\n", libnamebuf); 204 #else 205 text_buffer = mstrdup(libnamebuf); 206 #endif 207 } 208 } 209 210 static { p_static=1; } 174 211 175 212 (proc[ \t]+{name})|([ \t]proc[ \t]+{name}) { 176 177 178 #if YYLPDEBUG 179 213 char proc[256]; 214 BEGIN(pdef); 215 #if YYLPDEBUG 216 printf("Newlib:%s\n", newlib); 180 217 #endif 181 218 #ifdef STANDALONE_PARSER 182 if(pi!=NULL) { 183 printpi(pi); 184 pi_clear(pi); 185 } 186 pi = (procinfo *)malloc(sizeof(procinfo)); 187 iiInitSingularProcinfo(pi, newlib, yytext+5, 188 yylplineno, 189 current_pos(0), 190 p_static); 219 if ( pi != NULL ) { 220 printpi(pi); 221 pi_clear(pi); 222 } 223 pi = (procinfo *)malloc(sizeof(procinfo)); 224 iiInitSingularProcinfo(pi, newlib, yytext+5, yylplineno, 225 current_pos(0), p_static); 191 226 #else STANDALONE_PARSER 192 proc[0]='\0';193 sscanf( yytext, "%*[^p]proc %s", proc);194 if(strlen(proc)<1) sscanf( yytext, "proc %s", proc);195 h = enterid( mstrdup(proc), myynest, PROC_CMD,196 &idroot, FALSE ); 197 if (h!=NULL) 198 199 200 201 202 203 227 if( mode == LOAD_LIB) { 228 proc[0]='\0'; 229 sscanf( yytext, "%*[^p]proc %s", proc); 230 if(strlen(proc)<1) sscanf( yytext, "proc %s", proc); 231 h = enterid( mstrdup(proc), myynest, PROC_CMD, 232 &idroot, FALSE ); 233 if (h!=NULL) { 234 iiInitSingularProcinfo(IDPROC(h), newlib, proc, 235 yylplineno, current_pos(0),p_static); 236 if (BVERBOSE(V_LOAD_PROC)) 237 Warn( " proc %s loaded", proc ); 238 } 204 239 #endif STANDALONE_PARSER 205 SET_DEF_END(pi, current_pos(yyleng+1)); 206 #if YYLPDEBUG 207 printf("PROC %d at %d/%d: (%d) %s\n", p_static, 208 yylplineno, current_pos(0), brace1, yytext); 209 #endif 210 p_static=0; 211 } 212 example { 213 BEGIN(pexample); 214 SET_EXAMPLE_START(pi, yylplineno, current_pos(0)); 215 #if YYLPDEBUG 216 printf("EXAMPLE at %d/%d (%d)\n", yylplineno, 217 current_pos(0), brace1); 218 #endif 219 } 220 221 LIB[ \t]+"\"" { quote++; 222 BEGIN(libcmd); 223 } 224 225 <header>({comment}+[ \t]*+{dolar}+Id:+{string}+[^\n]*)|({comment}+[ \t]*+{dolar}+Header:+{string}+[^\n]*) { 226 char ver[10]; 227 char date[16]; 228 ver[0]='?'; ver[1]='.'; ver[2]='?'; ver[3]='\0'; 229 date[0]='?'; date[1]='\0'; 230 sscanf(yytext,"// %*s %*s %10s %16s",ver,date); 231 strcpy(libnamebuf,"("); 232 strcat(libnamebuf,ver); 233 strcat(libnamebuf,","); 234 strcat(libnamebuf,date); 235 strcat(libnamebuf,")"); 236 //printf("ID=%s; \n", yytext); 237 } 240 SET_DEF_END(mode, pi, current_pos(yyleng+1)); 241 #if YYLPDEBUG 242 printf("PROC %d at %d/%d: (%d) %s\n", p_static, 243 yylplineno, current_pos(0), brace1, yytext); 244 #endif 245 p_static=0; 246 } 247 } 248 example { 249 BEGIN(pexample); 250 SET_EXAMPLE_START(mode, pi, yylplineno, current_pos(0)); 251 #if YYLPDEBUG 252 printf("EXAMPLE at %d/%d (%d)\n", yylplineno, 253 current_pos(0), brace1); 254 #endif 255 } 256 257 LIB[ \t]+"\"" { quote++; 258 BEGIN(libcmd); 259 } 260 261 <header>({comment}+{tos}+{dolar}+Id:+{string}+[^\n]*)|({comment}+{tos}+{dolar}+Header:+{string}+[^\n]*) { 262 make_version(yytext, 0); 263 } 238 264 <header>^{comment}+[^\n]* { 239 265 #if YYLPDEBUG > 1 240 241 #endif 242 266 printf("+HEAD:%s\n", yytext); 267 #endif 268 } 243 269 <header>(^#![^\n]*) { 244 270 #if YYLPDEBUG > 1 245 printf("-HEAD:%s\n", yytext); 246 #endif 247 } 248 <header>^proc\ { yyless(0); 249 print_version(libfile); 250 BEGIN(INITIAL); 251 yymore(); 252 } 271 printf("-HEAD:%s\n", yytext); 272 #endif 273 } 274 <header>^proc\ { yyless(0); 275 print_version(mode, libfile); 276 BEGIN(INITIAL); 277 yymore(); 278 } 279 <header>(info=\")|(version=\")|(version+{tos}+=\")|(version+{tos}+=+{tos}+\")|(version=+{tos}+\") { yyless(0); 280 *lib_style = NEW_LIBSTYLE; 281 BEGIN(INITIAL); 282 yymore(); 283 } 284 253 285 <header>^LIB[ \t]+"\"" { quote++; 254 print_version(libfile);255 256 257 <header>\n 258 <header>. 286 print_version(mode, libfile); 287 BEGIN(libcmd); 288 } 289 <header>\n { yylplineno++; } 290 <header>. { 259 291 #if YYLPDEBUG > 1 260 261 #endif 262 print_version(libfile);263 264 292 printf(" HEAD:%s\n", yytext); 293 #endif 294 print_version(mode, libfile); 295 BEGIN(help); 296 } 265 297 <help>^{comment}+[^\n]* { 266 298 #if YYLPDEBUG > 1 267 268 #endif 269 299 printf(" HELP:%s\n", yytext); 300 #endif 301 BEGIN(INITIAL); } 270 302 <help>^#![^\n]* { 271 303 #if YYLPDEBUG > 1 272 printf(" HELP:%s\n", yytext); 273 #endif 274 BEGIN(INITIAL); 275 } 276 <help>^proc\ { yyless(0); 277 //printf("2) proc found.\n"); 278 BEGIN(INITIAL); 279 yymore(); 280 } 304 printf(" HELP:%s\n", yytext); 305 #endif 306 BEGIN(INITIAL); 307 } 308 <help>^proc\ { 309 yyless(0); 310 //printf("2) proc found.\n"); 311 BEGIN(INITIAL); 312 yymore(); 313 } 281 314 <help>^LIB[ \t]+"\"" { quote++; 282 283 284 285 <help>\n 286 <help>. 315 BEGIN(libcmd); 316 } 317 318 <help>\n { yylplineno++; } 319 <help>. { 287 320 #if YYLPDEBUG > 1 288 289 #endif 290 321 printf("-HELP:%s\n", yytext); 322 #endif 323 } 291 324 292 325 293 326 <libcmd>{string}"\"" { quote--; 294 327 yytext[yyleng-1] = '\0'; 295 328 #ifndef STANDALONE_PARSER 296 library_stack->push(newlib, yytext); 329 if ( mode == LOAD_LIB ) { 330 library_stack->push(newlib, yytext); 331 } 297 332 #endif /* STANDALONE_PARSER */ 298 333 #if YYLPDEBUG 299 300 #endif 301 302 303 304 <pdef>[ \t] 305 <pdef>\( 306 307 #if YYLPDEBUG 308 309 #endif 310 311 <pdef>\) 312 313 #if YYLPDEBUG 314 315 316 #endif 317 318 #if YYLPDEBUG 319 320 #endif 321 SET_DEF_END(pi, current_pos(yyleng));322 SET_HELP_START(pi, current_pos(yyleng));323 324 325 326 <pdef>"{" 327 328 #if YYLPDEBUG 329 330 #endif 331 332 333 334 335 SET_BODY_START(pi, yylplineno, current_pos(0));336 337 338 <pdef>\n 339 340 #if YYLPDEBUG 341 342 #endif 343 SET_HELP_START(pi, current_pos(0));344 345 346 347 <pdef>. 348 349 SET_HELP_START(pi, current_pos(0));350 351 352 334 printf("LIB:'%s'\n", yytext); 335 #endif 336 BEGIN(INITIAL); 337 } 338 339 <pdef>[ \t] { } 340 <pdef>\( { 341 brace2++; 342 #if YYLPDEBUG 343 printf("%s", yytext); 344 #endif 345 } 346 <pdef>\) { 347 brace2--; 348 #if YYLPDEBUG 349 printf(">%s<\n", yytext); 350 printf("{=%d, (=%d, [=%d\n", brace1, brace2, brace3); 351 #endif 352 if(brace2<=0) { 353 #if YYLPDEBUG 354 printf("BEGIN(phead){=%d, (=%d, [=%d\n", brace1, brace2, brace3); 355 #endif 356 SET_DEF_END(mode, pi, current_pos(yyleng)); 357 SET_HELP_START(mode, pi, current_pos(yyleng)); 358 BEGIN(phead); 359 } 360 } 361 <pdef>"{" { 362 if(brace2>0) { 363 #if YYLPDEBUG 364 printf("{=%d, (=%d, [=%d\n", brace1, brace2, brace3); 365 #endif 366 yylp_errno = YYLP_DEF_BR2; 367 return(1); 368 } else { 369 brace1++; BEGIN(pbody); 370 SET_BODY_START(mode, pi, yylplineno, current_pos(0)); 371 } 372 } 373 <pdef>\n { yylplineno++; 374 if(brace2<=0) { 375 #if YYLPDEBUG 376 printf("BEGIN(phead-2){=%d, (=%d, [=%d\n", brace1, brace2, brace3); 377 #endif 378 SET_HELP_START(mode, pi, current_pos(0)); 379 BEGIN(phead); 380 } 381 } 382 <pdef>. { 383 if(brace2<=0) { 384 SET_HELP_START(mode, pi, current_pos(0)); 385 BEGIN(phead); 386 } 387 } 353 388 354 389 <phead>"\\{" { } … … 358 393 printf("BEGIN(pbody){=%d, (=%d, [=%d\n", brace1, brace2, brace3); 359 394 #endif 360 SET_BODY_START( pi, yylplineno, current_pos(0));395 SET_BODY_START(mode, pi, yylplineno, current_pos(0)); 361 396 #if YYLPDEBUG 362 397 printf("BODY at %d/%d", yylplineno, current_pos(0)); … … 390 425 } 391 426 if(brace1<=0) { 392 SET_BODY_END( pi, current_pos(yyleng));393 SET_PROC_END( pi, current_pos(yyleng));427 SET_BODY_END(mode, pi, current_pos(yyleng)); 428 SET_PROC_END(mode, pi, current_pos(yyleng)); 394 429 #if YYLPDEBUG 395 430 printf("-%d\n", current_pos(0)); … … 422 457 423 458 <string>"\"" { quote--; 459 copy_string(mode); 460 last_cmd = LP_NONE; 424 461 BEGIN(old_state); /* printf("%s", yytext); */ 425 462 } 426 <string>\\\\ { } 427 <string>\\\" { } 463 <string>(\\\\)|(\\\") { } 428 464 <string>\n { yylplineno++; } 429 465 <string>. { } … … 442 478 if(brace3>0) { yylp_errno=YYLP_EX_BR3; return(1); } 443 479 BEGIN(INITIAL); 444 SET_PROC_END( pi, current_pos(yyleng));480 SET_PROC_END(mode, pi, current_pos(yyleng)); 445 481 } 446 482 } … … 481 517 yylp_errno = YYLP_BAD_CHAR; 482 518 #if YYLPDEBUG 483 printf(" %s", yytext);519 printf("[%s]", yytext); 484 520 #endif 485 521 return(1); … … 524 560 } 525 561 562 void make_version(char *p,int what) 563 { 564 char ver[10]; 565 char date[16]; 566 ver[0]='?'; ver[1]='.'; ver[2]='?'; ver[3]='\0'; 567 date[0]='?'; date[1]='\0'; 568 if(what) sscanf(p,"%*[^=]= %*s %*s %10s %16s",ver,date); 569 else sscanf(p,"// %*s %*s %10s %16s",ver,date); 570 strcpy(libnamebuf,"("); 571 strcat(libnamebuf,ver); 572 strcat(libnamebuf,","); 573 strcat(libnamebuf,date); 574 strcat(libnamebuf,")"); 575 // printf("ID=(%d)%s; \n", what, p); 576 } 577 578 void copy_string(lp_modes mode) 579 { 580 if((last_cmd == LP_INFO)&&(mode == GET_INFO)) { 581 long current_location = ftell(yylpin); 582 int len = (int)(current_pos(0) - string_start); 583 fseek(yylpin, string_start, SEEK_SET); 584 text_buffer = AllocL(len+1); 585 fread(text_buffer, len, 1, yylpin); 586 fseek(yylpin, current_location, SEEK_SET); 587 } 588 } 589 526 590 void print_init() 527 591 { … … 529 593 } 530 594 531 print_version(char *p)595 void print_version(lp_modes mode, char *p) 532 596 { 533 597 #ifdef STANDALONE_PARSER 534 598 //printf("loading %s%s", p, libnamebuf); 535 599 #else 536 if (BVERBOSE(V_LOAD_LIB)) 537 Warn( "loading %s%s", p, libnamebuf); 600 if ( mode == LOAD_LIB ) { 601 if (BVERBOSE(V_LOAD_LIB)) 602 Warn( "loading %s%s", p, libnamebuf); 603 } 538 604 #endif 539 605 } … … 542 608 main( int argc, char *argv[] ) 543 609 { 610 lib_style_types lib_style; 544 611 ++argv, --argc; /* skip over program name */ 545 612 if ( argc > 0 ) 546 yyin = fopen( argv[0], "r " );613 yyin = fopen( argv[0], "rb" ); 547 614 else 548 615 yyin = stdin; … … 551 618 "function", "line", "start-eod", "line", "body-eop", 552 619 "line", "example-eoe"); 553 yylplex(argv[0], argv[0] );620 yylplex(argv[0], argv[0], &lib_style); 554 621 if(yylp_errno) { 555 622 printf("ERROR accured: "); -
Singular/misc.cc
rfca547 r5480da 28 28 #include "intvec.h" 29 29 #define SI_DONT_HAVE_GLOBAL_VARS 30 31 #ifdef HAVE_LIBPARSER 32 # include "libparse.h" 33 #endif /* HAVE_LIBPARSER */ 30 34 31 35 #ifdef HAVE_FACTORY … … 362 366 { 363 367 /* --------- is it a library ? --------------------------------*/ 364 FILE *fp=feFopen(str,"rb"); 368 char libnamebuf[128]; 369 FILE *fp=feFopen(str,"rb", libnamebuf); 365 370 if (fp!=NULL) 366 371 { 367 char buf[256]; 368 BOOLEAN found=FALSE; 369 while (fgets( buf, sizeof(buf), fp)) 370 { 371 if (strncmp(buf,"//",2)==0) 372 { 373 if (found) return; 374 } 375 else if ((strncmp(buf,"proc ",5)==0)||(strncmp(buf,"LIB ",4)==0)) 376 { 377 if (!found) Warn("no help part in library found"); 378 return; 379 } 380 else 381 { 382 found=TRUE; 383 PrintS(buf); 384 } 372 #ifdef HAVE_LIBPARSER 373 extern FILE *yylpin; 374 lib_style_types lib_style; // = OLD_LIBSTYLE; 375 376 yylpin = fp; 377 yylplex(str, libnamebuf, &lib_style, GET_INFO); 378 reinit_yylp(); 379 if(lib_style == OLD_LIBSTYLE) { 380 char buf[256]; 381 fseek(fp, 0, SEEK_SET); 382 #else /* HAVE_LIBPARSER */ 383 { char buf[256]; 384 #endif /* HAVE_LIBPARSER */ 385 Warn( "library %s has an old format. Please fix it for the next time", 386 str); 387 BOOLEAN found=FALSE; 388 while (fgets( buf, sizeof(buf), fp)) 389 { 390 if (strncmp(buf,"//",2)==0) 391 { 392 if (found) return; 393 } 394 else if ((strncmp(buf,"proc ",5)==0)||(strncmp(buf,"LIB ",4)==0)) 395 { 396 if (!found) Warn("no help part in library found"); 397 return; 398 } 399 else 400 { 401 found=TRUE; 402 PrintS(buf); 403 } 404 } 405 } else { 406 fclose( yylpin ); 407 PrintS(text_buffer); 408 FreeL(text_buffer); 385 409 } 386 410 }
Note: See TracChangeset
for help on using the changeset viewer.