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