xref: /csrg-svn/usr.bin/f77/pass1.vax/defs.h (revision 47955)
1*47955Sbostic /*-
2*47955Sbostic  * Copyright (c) 1980 The Regents of the University of California.
3*47955Sbostic  * All rights reserved.
422805Smckusick  *
5*47955Sbostic  * %sccs.include.proprietary.c%
6*47955Sbostic  *
7*47955Sbostic  *	@(#)defs.h	5.5 (Berkeley) 04/12/91
822805Smckusick  */
922805Smckusick 
1022805Smckusick /*
1122805Smckusick  * defs.h
1222805Smckusick  *
1322805Smckusick  * Definitions for f77pass1
1422805Smckusick  *
1522805Smckusick  * University of Utah CS Dept modification history:
1622805Smckusick  *
1722805Smckusick  * $Log:	defs.h,v $
1825814Sdonn  * Revision 5.5  86/01/10  17:11:11  donn
1925814Sdonn  * Add a vparamval field to Nameblock struct -- fix up klugy sharing between
2025814Sdonn  * Paramblock and Nameblock structs.
2125814Sdonn  *
2225814Sdonn  * Revision 5.4  85/11/25  00:23:47  donn
2325814Sdonn  * 4.3 beta
2425814Sdonn  *
2524475Sdonn  * Revision 5.3  85/08/10  06:31:09  donn
2624475Sdonn  * Added missing definition for intrconv().
2724475Sdonn  *
2824475Sdonn  * Revision 5.2  85/08/10  04:01:53  donn
2924475Sdonn  * Jerry Berkman's change to add a definition for 'dblflag' and to ifdef
3024475Sdonn  * the Fortran 66 compatibility flags.
3124475Sdonn  *
3224475Sdonn  * Revision 5.1  85/08/10  03:44:01  donn
3324475Sdonn  * 4.3 alpha
3424475Sdonn  *
3522805Smckusick  * Revision 2.3  85/06/07  21:06:48  root
3622805Smckusick  * Add copyright
3722805Smckusick  *
3822805Smckusick  * Revision 2.2  85/01/11  21:02:58  donn
3922805Smckusick  * Added 'issaved' bit to addrblocks to help implement SAVE statements.
4022805Smckusick  *
4122805Smckusick  * Revision 2.1  84/07/19  12:02:46  donn
4222805Smckusick  * Changed comment headers for UofU.
4322805Smckusick  *
4422805Smckusick  * Revision 1.2  84/02/27  00:49:40  donn
4522805Smckusick  * Added external references to lists of argument temporaries, used in the
4622805Smckusick  * Berkeley changes to reduce offsets of data.
4722805Smckusick  *
4822805Smckusick  */
4922805Smckusick 
5022805Smckusick #include <stdio.h>
5122805Smckusick 
5222805Smckusick #ifdef unix
5322805Smckusick #	include <ctype.h>
5422805Smckusick #endif
5522805Smckusick 
5622805Smckusick #include "ftypes.h"
5722805Smckusick #include "defines.h"
5822805Smckusick #include "machdefs.h"
5922805Smckusick 
6022805Smckusick #define VL 16
6122805Smckusick 
6222805Smckusick #define MAXDIM 20
6322805Smckusick #define MAXINCLUDES 10
6422805Smckusick #define MAXLITERALS 30
6522805Smckusick #define MAXCTL 20
6622805Smckusick #define MAXHASH 1009
6722805Smckusick #define MAXSTNO 401
6822805Smckusick #define MAXEXT 200
6922805Smckusick #define MAXEQUIV 150
7022805Smckusick #define MAXLABLIST 256
7122805Smckusick #define MAXDEBUGFLAG 20
7222805Smckusick 
7322805Smckusick typedef union Expression *expptr;
7422805Smckusick typedef union Taggedblock *tagptr;
7522805Smckusick typedef struct Chain *chainp;
7622805Smckusick typedef struct Addrblock *Addrp;
7722805Smckusick typedef struct Tempblock *Tempp;
7822805Smckusick typedef struct Constblock *Constp;
7922805Smckusick typedef struct Exprblock *Exprp;
8022805Smckusick typedef struct Nameblock *Namep;
8122805Smckusick 
8222805Smckusick extern FILEP infile;
8322805Smckusick extern FILEP diagfile;
8422805Smckusick extern FILEP textfile;
8522805Smckusick extern FILEP asmfile;
8622805Smckusick extern FILEP initfile;
8722805Smckusick extern long int headoffset;
8822805Smckusick 
8922805Smckusick extern char token [ ];
9022805Smckusick extern int toklen;
9122805Smckusick extern int lineno;
9222805Smckusick extern char *infname;
9322805Smckusick extern int needkwd;
9422805Smckusick extern struct Labelblock *thislabel;
9522805Smckusick 
9622805Smckusick extern int maxctl;
9722805Smckusick extern int maxequiv;
9822805Smckusick extern int maxstno;
9922805Smckusick extern int maxhash;
10022805Smckusick extern int maxext;
10122805Smckusick 
10222805Smckusick extern flag profileflag;
10324475Sdonn extern flag dblflag;
10422805Smckusick extern flag optimflag;
10522805Smckusick extern flag nowarnflag;
10622805Smckusick extern flag ftn66flag;
10724475Sdonn #ifdef ONLY66
10822805Smckusick extern flag no66flag;
10922805Smckusick extern flag noextflag;
11024475Sdonn #endif
11122805Smckusick extern flag shiftcase;
11222805Smckusick extern flag undeftype;
11322805Smckusick extern flag shortsubs;
11422805Smckusick extern flag onetripflag;
11522805Smckusick extern flag checksubs;
11622805Smckusick extern flag debugflag[];
11722805Smckusick extern flag equivdcl;
11822805Smckusick extern int nerr;
11922805Smckusick extern int nwarn;
12022805Smckusick extern int ndata;
12122805Smckusick 
12222805Smckusick extern int parstate;
12322805Smckusick extern flag headerdone;
12422805Smckusick extern int blklevel;
12522805Smckusick extern flag saveall;
12622805Smckusick extern flag substars;
12722805Smckusick extern int impltype[ ];
12822805Smckusick extern int implleng[ ];
12922805Smckusick extern int implstg[ ];
13022805Smckusick 
13122805Smckusick extern int tyint;
13222805Smckusick extern int tylogical;
13322805Smckusick extern ftnint typesize[];
13422805Smckusick extern int typealign[];
13522805Smckusick extern int procno;
13622805Smckusick extern int proctype;
13722805Smckusick extern char * procname;
13822805Smckusick extern int rtvlabel[ ];
13922805Smckusick extern int fudgelabel;	/* to confuse the pdp11 optimizer */
14022805Smckusick extern Addrp typeaddr;
14122805Smckusick extern Addrp retslot;
14222805Smckusick extern int cxslot;
14322805Smckusick extern int chslot;
14422805Smckusick extern int chlgslot;
14522805Smckusick extern int procclass;
14622805Smckusick extern ftnint procleng;
14722805Smckusick extern int nentry;
14822805Smckusick extern flag multitype;
14922805Smckusick extern int blklevel;
15022805Smckusick extern int lastlabno;
15122805Smckusick extern int lastvarno;
15222805Smckusick extern int lastargslot;
15322805Smckusick extern int argloc;
15422805Smckusick extern ftnint autoleng;
15522805Smckusick extern ftnint bssleng;
15622805Smckusick extern int retlabel;
15722805Smckusick extern int ret0label;
15822805Smckusick extern int dorange;
15922805Smckusick extern int regnum[ ];
16022805Smckusick extern Namep regnamep[ ];
16122805Smckusick extern int maxregvar;
16222805Smckusick extern int highregvar;
16322805Smckusick extern int nregvar;
16422805Smckusick extern ftnint lowbss;
16522805Smckusick extern ftnint highbss;
16622805Smckusick extern int bsslabel;
16722805Smckusick extern flag anyinits;
16822805Smckusick extern flag anylocals;
16922805Smckusick 
17022805Smckusick extern chainp templist;
17122805Smckusick extern chainp argtemplist;
17222805Smckusick extern chainp activearglist;
17322805Smckusick extern int maxdim;
17422805Smckusick extern chainp holdtemps;
17522805Smckusick extern struct Entrypoint *entries;
17622805Smckusick extern struct Rplblock *rpllist;
17722805Smckusick extern struct Chain *curdtp;
17822805Smckusick extern ftnint curdtelt;
17922805Smckusick extern flag toomanyinit;
18022805Smckusick 
18122805Smckusick extern flag inioctl;
18222805Smckusick extern int iostmt;
18322805Smckusick extern Addrp ioblkp;
18422805Smckusick extern int nioctl;
18522805Smckusick extern int nequiv;
18622805Smckusick extern int eqvstart;	/* offset to eqv number to guarantee uniqueness */
18722805Smckusick extern int nintnames;
18822805Smckusick 
18922805Smckusick #ifdef SDB
19022805Smckusick extern int dbglabel;
19122805Smckusick extern flag sdbflag;
19222805Smckusick #endif
19322805Smckusick 
19422805Smckusick extern int cdatafile;
19522805Smckusick extern int cchkfile;
19622805Smckusick extern int vdatafile;
19722805Smckusick extern int vchkfile;
19822805Smckusick 
19922805Smckusick extern char cdatafname[];
20022805Smckusick extern char cchkfname[];
20122805Smckusick extern char vdatafname[];
20222805Smckusick extern char vchkfname[];
20322805Smckusick 
20422805Smckusick extern long cdatahwm;
20522805Smckusick extern long vdatahwm;
20622805Smckusick 
20722805Smckusick 
20822805Smckusick struct Chain
20922805Smckusick 	{
21022805Smckusick 	chainp nextp;
21122805Smckusick 	tagptr datap;
21222805Smckusick 	};
21322805Smckusick 
21422805Smckusick extern chainp chains;
21522805Smckusick 
21622805Smckusick struct Headblock
21722805Smckusick 	{
21822805Smckusick 	field tag;
21922805Smckusick 	field vtype;
22022805Smckusick 	field vclass;
22122805Smckusick 	field vstg;
22222805Smckusick 	expptr vleng;
22322805Smckusick 	} ;
22422805Smckusick 
22522805Smckusick struct Ctlframe
22622805Smckusick 	{
22722805Smckusick 	unsigned ctltype:8;
22822805Smckusick 	unsigned dostepsign:8;
22922805Smckusick 	int ctlabels[4];
23022805Smckusick 	int dolabel;
23122805Smckusick 	Namep donamep;
23222805Smckusick 	expptr domax;
23322805Smckusick 	expptr dostep;
23422805Smckusick 	};
23522805Smckusick #define endlabel ctlabels[0]
23622805Smckusick #define elselabel ctlabels[1]
23722805Smckusick #define dobodylabel ctlabels[1]
23822805Smckusick #define doposlabel ctlabels[2]
23922805Smckusick #define doneglabel ctlabels[3]
24022805Smckusick extern struct Ctlframe *ctls;
24122805Smckusick extern struct Ctlframe *ctlstack;
24222805Smckusick extern struct Ctlframe *lastctl;
24322805Smckusick 
24422805Smckusick struct Extsym
24522805Smckusick 	{
24622805Smckusick 	char extname[XL+1];
24722805Smckusick 	field extstg;
24822805Smckusick 	unsigned extsave:1;
24922805Smckusick 	unsigned extinit:1;
25022805Smckusick 	chainp extp;
25122805Smckusick 	ftnint extleng;
25222805Smckusick 	ftnint maxleng;
25322805Smckusick 	char init;
25422805Smckusick 	long initoffset;
25522805Smckusick 	};
25622805Smckusick 
25722805Smckusick extern struct Extsym *extsymtab;
25822805Smckusick extern struct Extsym *nextext;
25922805Smckusick extern struct Extsym *lastext;
26022805Smckusick 
26122805Smckusick struct Labelblock
26222805Smckusick 	{
26322805Smckusick 	int labelno;
26422805Smckusick 	unsigned blklevel:8;
26522805Smckusick 	unsigned labused:1;
26622805Smckusick 	unsigned labinacc:1;
26722805Smckusick 	unsigned labdefined:1;
26822805Smckusick 	unsigned labtype:2;
26922805Smckusick 	ftnint stateno;
27022805Smckusick 	};
27122805Smckusick 
27222805Smckusick extern struct Labelblock *labeltab;
27322805Smckusick extern struct Labelblock *labtabend;
27422805Smckusick extern struct Labelblock *highlabtab;
27522805Smckusick 
27622805Smckusick struct Entrypoint
27722805Smckusick 	{
27822805Smckusick 	struct Entrypoint *entnextp;
27922805Smckusick 	struct Extsym *entryname;
28022805Smckusick 	chainp arglist;
28122805Smckusick 	int entrylabel;
28222805Smckusick 	int typelabel;
28322805Smckusick 	Namep enamep;
28422805Smckusick 	};
28522805Smckusick 
28622805Smckusick struct Primblock
28722805Smckusick 	{
28822805Smckusick 	field tag;
28922805Smckusick 	field vtype;
29022805Smckusick 	Namep namep;
29122805Smckusick 	struct Listblock *argsp;
29222805Smckusick 	expptr fcharp;
29322805Smckusick 	expptr lcharp;
29422805Smckusick 	};
29522805Smckusick 
29622805Smckusick 
29722805Smckusick struct Hashentry
29822805Smckusick 	{
29922805Smckusick 	int hashval;
30022805Smckusick 	Namep varp;
30122805Smckusick 	};
30222805Smckusick extern struct Hashentry *hashtab;
30322805Smckusick extern struct Hashentry *lasthash;
30422805Smckusick 
30522805Smckusick struct Intrpacked	/* bits for intrinsic function description */
30622805Smckusick 	{
30722805Smckusick 	unsigned f1:3;
30822805Smckusick 	unsigned f2:4;
30922805Smckusick 	unsigned f3:7;
31022805Smckusick 	};
31122805Smckusick 
31222805Smckusick struct Nameblock
31322805Smckusick 	{
31422805Smckusick 	field tag;
31522805Smckusick 	field vtype;
31622805Smckusick 	field vclass;
31722805Smckusick 	field vstg;
31822805Smckusick 	expptr vleng;
31922805Smckusick 	char varname[VL];
32025814Sdonn 	expptr vparamval;
32122805Smckusick 	unsigned vdovar:1;
32222805Smckusick 	unsigned vdcldone:1;
32322805Smckusick 	unsigned vadjdim:1;
32422805Smckusick 	unsigned vsave:1;
32522805Smckusick 	unsigned vprocclass:3;
32622805Smckusick 	unsigned vregno:4;
32722805Smckusick 	union	{
32822805Smckusick 		int varno;
32922805Smckusick 		struct Intrpacked intrdesc;	/* bits for intrinsic function*/
33022805Smckusick 		} vardesc;
33122805Smckusick 	struct Dimblock *vdim;
33222805Smckusick 	ftnint voffset;
33322805Smckusick 	union	{
33422805Smckusick 		chainp namelist;	/* points to chain of names in */
33522805Smckusick 		chainp vstfdesc;	/* points to (formals, expr) pair */
33622805Smckusick 		} varxptr;
33722805Smckusick 	char inlcomm;
33822805Smckusick 	char init;
33922805Smckusick 	long initoffset;
34022805Smckusick 	ftnint varsize;
34122805Smckusick 	};
34222805Smckusick 
34322805Smckusick 
34422805Smckusick struct Paramblock
34522805Smckusick 	{
34622805Smckusick 	field tag;
34722805Smckusick 	field vtype;
34822805Smckusick 	field vclass;
34922805Smckusick 	field vstg;
35022805Smckusick 	expptr vleng;
35122805Smckusick 	char varname[VL];
35222805Smckusick 	expptr paramval;
35322805Smckusick 	} ;
35422805Smckusick 
35522805Smckusick 
35622805Smckusick struct Exprblock
35722805Smckusick 	{
35822805Smckusick 	field tag;
35922805Smckusick 	field vtype;
36022805Smckusick 	field vclass;
36122805Smckusick 	field vstg;
36222805Smckusick 	expptr vleng;
36322805Smckusick 	unsigned opcode:6;
36422805Smckusick 	expptr leftp;
36522805Smckusick 	expptr rightp;
36622805Smckusick 	};
36722805Smckusick 
36822805Smckusick 
36922805Smckusick union Constant
37022805Smckusick 	{
37122805Smckusick 	char *ccp;
37222805Smckusick 	ftnint ci;
37322805Smckusick 	double cd[2];
37422805Smckusick 	};
37522805Smckusick 
37622805Smckusick struct Constblock
37722805Smckusick 	{
37822805Smckusick 	field tag;
37922805Smckusick 	field vtype;
38022805Smckusick 	field vclass;
38122805Smckusick 	field vstg;
38222805Smckusick 	expptr vleng;
38333253Sbostic 	union Constant constant;
38422805Smckusick 	};
38522805Smckusick 
38622805Smckusick 
38722805Smckusick struct Listblock
38822805Smckusick 	{
38922805Smckusick 	field tag;
39022805Smckusick 	field vtype;
39122805Smckusick 	chainp listp;
39222805Smckusick 	};
39322805Smckusick 
39422805Smckusick 
39522805Smckusick 
39622805Smckusick struct Addrblock
39722805Smckusick 	{
39822805Smckusick 	field tag;
39922805Smckusick 	field vtype;
40022805Smckusick 	field vclass;
40122805Smckusick 	field vstg;
40222805Smckusick 	expptr vleng;
40322805Smckusick 	int memno;
40422805Smckusick 	expptr memoffset;
40522805Smckusick 	unsigned istemp:1;
40622805Smckusick         unsigned isarray:1;
40722805Smckusick 	unsigned issaved:1;
40822805Smckusick 	unsigned ntempelt:10;
40922805Smckusick 	ftnint varleng;
41022805Smckusick 	ftnint varsize;
41122805Smckusick 	};
41222805Smckusick 
41322805Smckusick 
41422805Smckusick 
41522805Smckusick struct Tempblock
41622805Smckusick 	{
41722805Smckusick 	field tag;
41822805Smckusick 	field vtype;
41922805Smckusick 	field vclass;
42022805Smckusick 	expptr vleng;
42122805Smckusick 	Addrp memalloc;
42222805Smckusick 	unsigned istemp:1;
42322805Smckusick 	unsigned ntempelt:10;
42422805Smckusick 	ftnint varleng;
42522805Smckusick 	};
42622805Smckusick 
42722805Smckusick 
42822805Smckusick 
42922805Smckusick struct Errorblock
43022805Smckusick 	{
43122805Smckusick 	field tag;
43222805Smckusick 	field vtype;
43322805Smckusick 	};
43422805Smckusick 
43522805Smckusick 
43622805Smckusick union Expression
43722805Smckusick 	{
43822805Smckusick 	field tag;
43922805Smckusick 	struct Headblock headblock;
44022805Smckusick 	struct Exprblock exprblock;
44122805Smckusick 	struct Addrblock addrblock;
44222805Smckusick 	struct Tempblock tempblock;
44322805Smckusick 	struct Constblock constblock;
44422805Smckusick 	struct Errorblock errorblock;
44522805Smckusick 	struct Listblock listblock;
44622805Smckusick 	struct Primblock primblock;
44722805Smckusick 	} ;
44822805Smckusick 
44922805Smckusick 
45022805Smckusick 
45122805Smckusick struct Dimblock
45222805Smckusick 	{
45322805Smckusick 	int ndim;
45422805Smckusick 	expptr nelt;
45522805Smckusick 	expptr baseoffset;
45622805Smckusick 	expptr basexpr;
45722805Smckusick 	struct
45822805Smckusick 		{
45922805Smckusick 		expptr dimsize;
46022805Smckusick 		expptr dimexpr;
46122805Smckusick 		expptr lb;
46222805Smckusick 		expptr lbaddr;
46322805Smckusick 		expptr ub;
46422805Smckusick 		expptr ubaddr;
46522805Smckusick 		} dims[1];
46622805Smckusick 	};
46722805Smckusick 
46822805Smckusick 
46922805Smckusick struct Impldoblock
47022805Smckusick 	{
47122805Smckusick 	field tag;
47222805Smckusick 	unsigned isactive:1;
47322805Smckusick 	unsigned isbusy:1;
47422805Smckusick 	Namep varnp;
47522805Smckusick 	Constp varvp;
47622805Smckusick 	chainp impdospec;
47722805Smckusick 	expptr implb;
47822805Smckusick 	expptr impub;
47922805Smckusick 	expptr impstep;
48022805Smckusick 	ftnint impdiff;
48122805Smckusick 	ftnint implim;
48222805Smckusick 	struct Chain *datalist;
48322805Smckusick 	};
48422805Smckusick 
48522805Smckusick 
48622805Smckusick struct Rplblock	/* name replacement block */
48722805Smckusick 	{
48822805Smckusick 	struct Rplblock *rplnextp;
48922805Smckusick 	Namep rplnp;
49022805Smckusick 	expptr rplvp;
49122805Smckusick 	expptr rplxp;
49222805Smckusick 	int rpltag;
49322805Smckusick 	};
49422805Smckusick 
49522805Smckusick 
49622805Smckusick 
49722805Smckusick struct Equivblock
49822805Smckusick 	{
49922805Smckusick 	struct Eqvchain *equivs;
50022805Smckusick 	flag eqvinit;
50122805Smckusick 	long int eqvtop;
50222805Smckusick 	long int eqvbottom;
50322805Smckusick 	char inlcomm;
50422805Smckusick 	char init;
50522805Smckusick 	long initoffset;
50622805Smckusick 	} ;
50722805Smckusick #define eqvleng eqvtop
50822805Smckusick 
50922805Smckusick extern struct Equivblock *eqvclass;
51022805Smckusick 
51122805Smckusick 
51222805Smckusick struct Eqvchain
51322805Smckusick 	{
51422805Smckusick 	struct Eqvchain *eqvnextp;
51522805Smckusick 	union
51622805Smckusick 		{
51722805Smckusick 		struct Primblock *eqvlhs;
51822805Smckusick 		Namep eqvname;
51922805Smckusick 		} eqvitem;
52022805Smckusick 	long int eqvoffset;
52122805Smckusick 	} ;
52222805Smckusick 
52322805Smckusick 
52422805Smckusick union Taggedblock
52522805Smckusick 	{
52622805Smckusick 	field tag;
52722805Smckusick 	struct Headblock headblock;
52822805Smckusick 	struct Nameblock nameblock;
52922805Smckusick 	struct Paramblock paramblock;
53022805Smckusick 	struct Exprblock exprblock;
53122805Smckusick 	struct Constblock constblock;
53222805Smckusick 	struct Listblock listblock;
53322805Smckusick 	struct Addrblock addrblock;
53422805Smckusick 	struct Tempblock tempblock;
53522805Smckusick 	struct Errorblock errorblock;
53622805Smckusick 	struct Primblock primblock;
53722805Smckusick 	struct Impldoblock impldoblock;
53822805Smckusick 	} ;
53922805Smckusick 
54022805Smckusick 
54122805Smckusick 
54222805Smckusick 
54322805Smckusick struct Literal
54422805Smckusick 	{
54522805Smckusick 	short littype;
54622805Smckusick 	short litnum;
54722805Smckusick 	union	{
54822805Smckusick 		ftnint litival;
54922805Smckusick 		double litdval;
55022805Smckusick 		struct	{
55122805Smckusick 			char litclen;	/* small integer */
55222805Smckusick 			char litcstr[XL];
55322805Smckusick 			} litcval;
55422805Smckusick 		} litval;
55522805Smckusick 	};
55622805Smckusick 
55722805Smckusick extern struct Literal litpool[ ];
55822805Smckusick extern int nliterals;
55922805Smckusick 
56022805Smckusick 
56122805Smckusick 
56222805Smckusick /* popular functions with non integer return values */
56322805Smckusick 
56422805Smckusick 
56522805Smckusick int *ckalloc();
56622805Smckusick char *varstr(), *nounder(), *varunder();
56722805Smckusick char *copyn(), *copys();
56822805Smckusick chainp hookup(), mkchain();
56922805Smckusick ftnint convci();
57022805Smckusick char *convic();
57122805Smckusick char *setdoto();
57222805Smckusick double convcd();
57322805Smckusick Namep mkname();
57422805Smckusick struct Labelblock *mklabel(), *execlab();
57522805Smckusick struct Extsym *mkext(), *newentry();
57622805Smckusick expptr addrof(), call1(), call2(), call3(), call4();
57722805Smckusick Tempp mktmpn();
57822805Smckusick Addrp builtin(), mktemp(), altmpn(), mkaltemp(), mkaltmpn(), autovar();
57922805Smckusick Addrp mkplace(), mkaddr(), putconst(), memversion();
58024475Sdonn expptr mkprim(), mklhs(), mkexpr(), mkconv(), intrconv(), mkfunct();
58124475Sdonn expptr fixexpr(), fixtype();
58222805Smckusick expptr errnode(), mkintcon();
58322805Smckusick tagptr cpexpr();
58422805Smckusick ftnint lmin(), lmax(), iarrlen();
585