aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorJ.D. Smith2002-09-12 17:24:53 +0000
committerJ.D. Smith2002-09-12 17:24:53 +0000
commit76959b779646d9113e87335d0781837610ffd2d8 (patch)
tree0c7418dbfb6cc23c24a8f9fca09ae06dd4d56f37 /lisp
parentdd6478be6ac27039a3710260e00f6db79c262aed (diff)
downloademacs-76959b779646d9113e87335d0781837610ffd2d8.tar.gz
emacs-76959b779646d9113e87335d0781837610ffd2d8.zip
Updated to IDLWAVE version 4.15. See idlwave.org.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/progmodes/idlw-rinfo.el124
-rw-r--r--lisp/progmodes/idlw-shell.el751
-rw-r--r--lisp/progmodes/idlw-toolbar.el2
-rw-r--r--lisp/progmodes/idlwave.el553
4 files changed, 858 insertions, 572 deletions
diff --git a/lisp/progmodes/idlw-rinfo.el b/lisp/progmodes/idlw-rinfo.el
index cacafda2106..b44e0d0210e 100644
--- a/lisp/progmodes/idlw-rinfo.el
+++ b/lisp/progmodes/idlw-rinfo.el
@@ -4,7 +4,7 @@
4 4
5;; Author: Carsten Dominik <dominik@astro.uva.nl> 5;; Author: Carsten Dominik <dominik@astro.uva.nl>
6;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> 6;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu>
7;; Version: 4.14 7;; Version: 4.15
8;; Keywords: languages 8;; Keywords: languages
9 9
10;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
@@ -31,7 +31,7 @@
31;; information is extracted automatically from the IDL documentation 31;; information is extracted automatically from the IDL documentation
32;; and by talking to IDL. 32;; and by talking to IDL.
33;; 33;;
34;; Created by get_rinfo on Wed May 22 16:40:34 2002 34;; Created by get_rinfo on Tue Sep 10 09:15:48 2002
35;; IDL version: 5.5 35;; IDL version: 5.5
36;; Number of files scanned: 6 36;; Number of files scanned: 6
37;; 943 syntax entries in file refguide.txt 37;; 943 syntax entries in file refguide.txt
@@ -41,9 +41,9 @@
41;; 45 syntax entries in file obsolete.txt 41;; 45 syntax entries in file obsolete.txt
42;; 38 syntax entries in file whatsnew55.txt 42;; 38 syntax entries in file whatsnew55.txt
43;; Number of routines found: 1324 43;; Number of routines found: 1324
44;; Number of keywords found: 5958 44;; Number of keywords found: 6129
45;; 45;;
46;; Fixed up documentation with file: ./help55fixup.txt 46;; Fixed up documentation with file: help55fixup.txt
47;; 93 total fix matches. 47;; 93 total fix matches.
48; 48;
49;; New versions of IDLWAVE, documentation, and more information 49;; New versions of IDLWAVE, documentation, and more information
@@ -62,7 +62,7 @@
62 ("BLAS_AXPY" pro nil (system) "%s, Y, A, X [, D1, Loc1 [, D2, Range]]" nil) 62 ("BLAS_AXPY" pro nil (system) "%s, Y, A, X [, D1, Loc1 [, D2, Range]]" nil)
63 ("BOX_CURSOR" pro nil (system) "%s, [ X0, Y0, NX, NY]" (("FIXED_SIZE") ("INIT") ("MESSAGE"))) 63 ("BOX_CURSOR" pro nil (system) "%s, [ X0, Y0, NX, NY]" (("FIXED_SIZE") ("INIT") ("MESSAGE")))
64 ("BREAKPOINT" pro nil (system) "%s [, File], Index" (("AFTER") ("CLEAR") ("CONDITION") ("DISABLE") ("ENABLE") ("ON_RECOMPILE") ("ONCE") ("SET"))) 64 ("BREAKPOINT" pro nil (system) "%s [, File], Index" (("AFTER") ("CLEAR") ("CONDITION") ("DISABLE") ("ENABLE") ("ON_RECOMPILE") ("ONCE") ("SET")))
65 ("BYTEORDER" pro nil (system) "%s, Variable1, ..., Variablen" (("DTOGFLOAT") ("DTOVAX") ("DTOXDR") ("FTOVAX") ("FTOXDR") ("GFLOATTOD") ("HTONL") ("HTONS") ("L64SWAP") ("LSWAP") ("NTOHL") ("NTOHS") ("SSWAP") ("SWAP_IF_BIG_ENDIAN") ("SWAP_IF_LITTLE_ENDIAN") ("VAXTOD") ("VAXTOF") ("XDRTOD") ("XDRTOF"))) 65 ("BYTEORDER" pro nil (system) "%s, Variable1, ..., Variablen" (("DTOGFLOAT") ("DTOVAX") ("DTOXDR") ("FTOVAX") ("FTOXDR") ("GFLOATTOD") ("HTONL") ("HTONS") ("L64SWAP") ("LSWAP") ("NTOHL") ("NTOHS") ("SSWAP") ("SWAP_IF_BIG_ENDIAN") ("SWAP_IF_LITTLE_ENDIAN") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD") ("VAXTOD") ("VAXTOF") ("XDRTOD") ("XDRTOF")))
66 ("CALDAT" pro nil (system) "%s, Julian, Month [, Day [, Year [, Hour [, Minute [, Second]]]]]" nil) 66 ("CALDAT" pro nil (system) "%s, Julian, Month [, Day [, Year [, Hour [, Minute [, Second]]]]]" nil)
67 ("CALENDAR" pro nil (system) "%s [[, Month] , Year]" nil) 67 ("CALENDAR" pro nil (system) "%s [[, Month] , Year]" nil)
68 ("CALL_METHOD" pro nil (system) "%s, Name, ObjRef, [, P1, ..., Pn]" nil) 68 ("CALL_METHOD" pro nil (system) "%s, Name, ObjRef, [, P1, ..., Pn]" nil)
@@ -372,7 +372,7 @@
372 ("TV" pro nil (system) "%s, Image [, Position] or TV, Image [, X, Y [, Channel]]" (("CENTIMETERS") ("CHANNEL") ("DATA") ("DEVICE") ("INCHES") ("NORMAL") ("ORDER") ("T3D") ("TRUE") ("WORDS") ("XSIZE") ("YSIZE") ("Z"))) 372 ("TV" pro nil (system) "%s, Image [, Position] or TV, Image [, X, Y [, Channel]]" (("CENTIMETERS") ("CHANNEL") ("DATA") ("DEVICE") ("INCHES") ("NORMAL") ("ORDER") ("T3D") ("TRUE") ("WORDS") ("XSIZE") ("YSIZE") ("Z")))
373 ("TVCRS" pro nil (system) "%s [, ON_OFF] or TVCRS [, X, Y]" (("CENTIMETERS") ("DATA") ("DEVICE") ("HIDE_CURSOR") ("INCHES") ("NORMAL") ("T3D") ("Z"))) 373 ("TVCRS" pro nil (system) "%s [, ON_OFF] or TVCRS [, X, Y]" (("CENTIMETERS") ("DATA") ("DEVICE") ("HIDE_CURSOR") ("INCHES") ("NORMAL") ("T3D") ("Z")))
374 ("TVLCT" pro nil (system) "%s, V1, V2, V3 [, Start]" (("GET") ("HLS") ("HSV"))) 374 ("TVLCT" pro nil (system) "%s, V1, V2, V3 [, Start]" (("GET") ("HLS") ("HSV")))
375 ("TVSCL" pro nil (system) "%s, Image [, Position] or TVSCL, Image [, X, Y [, Channel]]" (("CENTIMETERS") ("CHANNEL") ("DATA") ("DEVICE") ("INCHES") ("NAN") ("NORMAL") ("ORDER") ("T3D") ("TOP") ("TRUE") ("WORDS") ("XSIZE") ("YSIZE") ("Z"))) 375 ("TVSCL" pro nil (system) "%s, Image [, Position] or TVSCL, Image [, X, Y [, Channel]]" (("CENTIMETERS") ("CHANNEL") ("DATA") ("DEVICE") ("INCHES") ("NAN") ("NORMAL") ("ORDER") ("T3D") ("TOP") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD") ("TRUE") ("WORDS") ("XSIZE") ("YSIZE") ("Z")))
376 ("USERSYM" pro nil (system) "%s, X [, Y]" (("COLOR") ("FILL") ("THICK"))) 376 ("USERSYM" pro nil (system) "%s, X [, Y]" (("COLOR") ("FILL") ("THICK")))
377 ("VECTOR_FIELD" pro nil (system) "%s, Field, Outverts, Outconn" (("ANISOTROPY") ("SCALE") ("VERTICES"))) 377 ("VECTOR_FIELD" pro nil (system) "%s, Field, Outverts, Outconn" (("ANISOTROPY") ("SCALE") ("VERTICES")))
378 ("VEL" pro nil (system) "%s, U, V" (("LENGTH") ("NSTEPS") ("NVECS") ("TITLE") ("XMAX"))) 378 ("VEL" pro nil (system) "%s, U, V" (("LENGTH") ("NSTEPS") ("NVECS") ("TITLE") ("XMAX")))
@@ -425,18 +425,18 @@
425 ("ZOOM" pro nil (system) "%s" (("CONTINUOUS") ("FACT") ("INTERP") ("KEEP") ("NEW_WINDOW") ("XSIZE") ("YSIZE") ("ZOOM_WINDOW"))) 425 ("ZOOM" pro nil (system) "%s" (("CONTINUOUS") ("FACT") ("INTERP") ("KEEP") ("NEW_WINDOW") ("XSIZE") ("YSIZE") ("ZOOM_WINDOW")))
426 ("ZOOM_24" pro nil (system) "%s" (("FACT") ("RIGHT") ("XSIZE") ("YSIZE"))) 426 ("ZOOM_24" pro nil (system) "%s" (("FACT") ("RIGHT") ("XSIZE") ("YSIZE")))
427 ("A_CORRELATE" fun nil (system) "Result = %s(X, Lag)" (("COVARIANCE") ("DOUBLE"))) 427 ("A_CORRELATE" fun nil (system) "Result = %s(X, Lag)" (("COVARIANCE") ("DOUBLE")))
428 ("ABS" fun nil (system) "Result = %s(X)" nil) 428 ("ABS" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
429 ("ACOS" fun nil (system) "Result = %s(X)" nil) 429 ("ACOS" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
430 ("ADAPT_HIST_EQUAL" fun nil (system) "Result = %s (Image)" (("CLIP") ("FCN") ("NREGIONS") ("TOP"))) 430 ("ADAPT_HIST_EQUAL" fun nil (system) "Result = %s (Image)" (("CLIP") ("FCN") ("NREGIONS") ("TOP")))
431 ("ALOG" fun nil (system) "Result = %s(X)" nil) 431 ("ALOG" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
432 ("ALOG10" fun nil (system) "Result = %s(X)" nil) 432 ("ALOG10" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
433 ("AMOEBA" fun nil (system) "Result = %s( Ftol)" (("FUNCTION_NAME") ("FUNCTION_VALUE") ("NCALLS") ("NMAX") ("P0") ("SCALE") ("SIMPLEX"))) 433 ("AMOEBA" fun nil (system) "Result = %s( Ftol)" (("FUNCTION_NAME") ("FUNCTION_VALUE") ("NCALLS") ("NMAX") ("P0") ("SCALE") ("SIMPLEX")))
434 ("ARG_PRESENT" fun nil (system) "Result = %s(Variable)" nil) 434 ("ARG_PRESENT" fun nil (system) "Result = %s(Variable)" nil)
435 ("ARRAY_EQUAL" fun nil (system) "Result = %s( Op1 , Op2)" (("NO_TYPECONV"))) 435 ("ARRAY_EQUAL" fun nil (system) "Result = %s( Op1 , Op2)" (("NO_TYPECONV")))
436 ("ASCII_TEMPLATE" fun nil (system) "Result = %s( [Filename])" (("BROWSE_LINES") ("CANCEL") ("GROUP"))) 436 ("ASCII_TEMPLATE" fun nil (system) "Result = %s( [Filename])" (("BROWSE_LINES") ("CANCEL") ("GROUP")))
437 ("ASIN" fun nil (system) "Result = %s(X)" nil) 437 ("ASIN" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
438 ("ASSOC" fun nil (system) "Result = %s( Unit, Array_Structure [, Offset])" (("PACKED"))) 438 ("ASSOC" fun nil (system) "Result = %s( Unit, Array_Structure [, Offset])" (("PACKED")))
439 ("ATAN" fun nil (system) "Result = %s([Y,] X)" nil) 439 ("ATAN" fun nil (system) "Result = %s([Y,] X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
440 ("BESELI" fun nil (system) "Result = %s(X, N)" nil) 440 ("BESELI" fun nil (system) "Result = %s(X, N)" nil)
441 ("BESELJ" fun nil (system) "Result = %s(X, N)" nil) 441 ("BESELJ" fun nil (system) "Result = %s(X, N)" nil)
442 ("BESELK" fun nil (system) "Result = %s( X, N )" nil) 442 ("BESELK" fun nil (system) "Result = %s( X, N )" nil)
@@ -445,13 +445,13 @@
445 ("BILINEAR" fun nil (system) "Result = %s(P, IX, JY)" nil) 445 ("BILINEAR" fun nil (system) "Result = %s(P, IX, JY)" nil)
446 ("BIN_DATE" fun nil (system) "Result = %s(Ascii_Time)" nil) 446 ("BIN_DATE" fun nil (system) "Result = %s(Ascii_Time)" nil)
447 ("BINARY_TEMPLATE" fun nil (system) "Template = %s ( [Filename])" (("CANCEL") ("GROUP") ("N_ROWS") ("TEMPLATE"))) 447 ("BINARY_TEMPLATE" fun nil (system) "Template = %s ( [Filename])" (("CANCEL") ("GROUP") ("N_ROWS") ("TEMPLATE")))
448 ("BINDGEN" fun nil (system) "Result = %s(D1, ...,D8)" nil) 448 ("BINDGEN" fun nil (system) "Result = %s(D1, ...,D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
449 ("BINOMIAL" fun nil (system) "Result = %s(V, N, P)" (("DOUBLE") ("GAUSSIAN"))) 449 ("BINOMIAL" fun nil (system) "Result = %s(V, N, P)" (("DOUBLE") ("GAUSSIAN")))
450 ("BLK_CON" fun nil (system) "Result = %s( Filter, Signal)" (("B_LENGTH") ("DOUBLE"))) 450 ("BLK_CON" fun nil (system) "Result = %s( Filter, Signal)" (("B_LENGTH") ("DOUBLE")))
451 ("BROYDEN" fun nil (system) "Result = %s( X, Vecfunc)" (("CHECK") ("DOUBLE") ("EPS") ("ITMAX") ("STEPMAX") ("TOLF") ("TOLMIN") ("TOLX"))) 451 ("BROYDEN" fun nil (system) "Result = %s( X, Vecfunc)" (("CHECK") ("DOUBLE") ("EPS") ("ITMAX") ("STEPMAX") ("TOLF") ("TOLMIN") ("TOLX")))
452 ("BYTARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO"))) 452 ("BYTARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
453 ("BYTE" fun nil (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" nil) 453 ("BYTE" fun nil (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
454 ("BYTSCL" fun nil (system) "Result = %s( Array)" (("MAX") ("MIN") ("NAN") ("TOP"))) 454 ("BYTSCL" fun nil (system) "Result = %s( Array)" (("MAX") ("MIN") ("NAN") ("TOP") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
455 ("C_CORRELATE" fun nil (system) "Result = %s( X, Y, Lag)" (("COVARIANCE") ("DOUBLE"))) 455 ("C_CORRELATE" fun nil (system) "Result = %s( X, Y, Lag)" (("COVARIANCE") ("DOUBLE")))
456 ("CALL_EXTERNAL" fun nil (system) "Result = %s(Image, Entry [, P0, ..., PN-1])" (("ALL_VALUE") ("AUTOGLUE") ("B_VALUE") ("CC") ("CDECL") ("COMPILE_DIRECTORY") ("D_VALUE") ("DEFAULT") ("EXTRA_CFLAGS") ("EXTRA_LFLAGS") ("F_VALUE") ("I_VALUE") ("IGNORE_EXISTING_GLUE") ("L64_VALUE") ("LD") ("NOCLEANUP") ("PORTABLE") ("RETURN_TYPE") ("S_VALUE") ("SHOW_ALL_OUTPUT") ("UI_VALUE") ("UL64_VALUE") ("UL_VALUE") ("UNLOAD") ("VALUE") ("VAX_FLOAT") ("VERBOSE") ("WRITE_WRAPPER"))) 456 ("CALL_EXTERNAL" fun nil (system) "Result = %s(Image, Entry [, P0, ..., PN-1])" (("ALL_VALUE") ("AUTOGLUE") ("B_VALUE") ("CC") ("CDECL") ("COMPILE_DIRECTORY") ("D_VALUE") ("DEFAULT") ("EXTRA_CFLAGS") ("EXTRA_LFLAGS") ("F_VALUE") ("I_VALUE") ("IGNORE_EXISTING_GLUE") ("L64_VALUE") ("LD") ("NOCLEANUP") ("PORTABLE") ("RETURN_TYPE") ("S_VALUE") ("SHOW_ALL_OUTPUT") ("UI_VALUE") ("UL64_VALUE") ("UL_VALUE") ("UNLOAD") ("VALUE") ("VAX_FLOAT") ("VERBOSE") ("WRITE_WRAPPER")))
457 ("CALL_FUNCTION" fun nil (system) "Result = %s(Name [, P1, ..., Pn])" nil) 457 ("CALL_FUNCTION" fun nil (system) "Result = %s(Name [, P1, ..., Pn])" nil)
@@ -469,30 +469,30 @@
469 ("CDF_VARCREATE" fun nil (system) "Result = %s( Id, Name [, DimVary])" (("ALLOCATERECS") ("CDF_BYTE") ("CDF_CHAR") ("CDF_DOUBLE") ("CDF_EPOCH") ("CDF_FLOAT") ("CDF_INT1") ("CDF_INT2") ("CDF_INT4") ("CDF_REAL4") ("CDF_REAL8") ("CDF_UCHAR") ("CDF_UINT1") ("CDF_UINT2") ("CDF_UINT4") ("DIMENSIONS") ("NUMELEM") ("REC_NOVARY") ("REC_VARY") ("ZVARIABLE"))) 469 ("CDF_VARCREATE" fun nil (system) "Result = %s( Id, Name [, DimVary])" (("ALLOCATERECS") ("CDF_BYTE") ("CDF_CHAR") ("CDF_DOUBLE") ("CDF_EPOCH") ("CDF_FLOAT") ("CDF_INT1") ("CDF_INT2") ("CDF_INT4") ("CDF_REAL4") ("CDF_REAL8") ("CDF_UCHAR") ("CDF_UINT1") ("CDF_UINT2") ("CDF_UINT4") ("DIMENSIONS") ("NUMELEM") ("REC_NOVARY") ("REC_VARY") ("ZVARIABLE")))
470 ("CDF_VARINQ" fun nil (system) "Result = %s( Id, Variable)" (("ZVARIABLE"))) 470 ("CDF_VARINQ" fun nil (system) "Result = %s( Id, Variable)" (("ZVARIABLE")))
471 ("CDF_VARNUM" fun nil (system) "Result = %s( Id, VarName [, IsZVar] )" nil) 471 ("CDF_VARNUM" fun nil (system) "Result = %s( Id, VarName [, IsZVar] )" nil)
472 ("CEIL" fun nil (system) "Result = %s(X)" (("L64"))) 472 ("CEIL" fun nil (system) "Result = %s(X)" (("L64") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
473 ("CHEBYSHEV" fun nil (system) "Result = %s(D, N)" nil) 473 ("CHEBYSHEV" fun nil (system) "Result = %s(D, N)" nil)
474 ("CHECK_MATH" fun nil (system) "Result = %s()" (("MASK") ("NOCLEAR") ("PRINT"))) 474 ("CHECK_MATH" fun nil (system) "Result = %s()" (("MASK") ("NOCLEAR") ("PRINT")))
475 ("CHISQR_CVF" fun nil (system) "Result = %s(P, Df)" nil) 475 ("CHISQR_CVF" fun nil (system) "Result = %s(P, Df)" nil)
476 ("CHISQR_PDF" fun nil (system) "Result = %s(V, Df)" nil) 476 ("CHISQR_PDF" fun nil (system) "Result = %s(V, Df)" nil)
477 ("CHOLSOL" fun nil (system) "Result = %s( A, P, B)" (("DOUBLE"))) 477 ("CHOLSOL" fun nil (system) "Result = %s( A, P, B)" (("DOUBLE")))
478 ("CINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" nil) 478 ("CINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
479 ("CLUST_WTS" fun nil (system) "Result = %s( Array)" (("DOUBLE") ("N_CLUSTERS") ("N_ITERATIONS") ("VARIABLE_WTS"))) 479 ("CLUST_WTS" fun nil (system) "Result = %s( Array)" (("DOUBLE") ("N_CLUSTERS") ("N_ITERATIONS") ("VARIABLE_WTS")))
480 ("CLUSTER" fun nil (system) "Result = %s( Array, Weights)" (("DOUBLE") ("N_CLUSTERS"))) 480 ("CLUSTER" fun nil (system) "Result = %s( Array, Weights)" (("DOUBLE") ("N_CLUSTERS")))
481 ("COLOR_QUAN" fun nil (system) "Result = %s( Image_R, Image_G, Image_B, R, G, B) or Result = COLOR_QUAN( Image, Dim, R, G, B )" (("COLORS") ("CUBE") ("DITHER") ("ERROR") ("GET_TRANSLATION") ("MAP_ALL") ("TRANSLATION"))) 481 ("COLOR_QUAN" fun nil (system) "Result = %s( Image_R, Image_G, Image_B, R, G, B) or Result = COLOR_QUAN( Image, Dim, R, G, B )" (("COLORS") ("CUBE") ("DITHER") ("ERROR") ("GET_TRANSLATION") ("MAP_ALL") ("TRANSLATION")))
482 ("COLORMAP_APPLICABLE" fun nil (system) "Result = %s( redrawRequired )" nil) 482 ("COLORMAP_APPLICABLE" fun nil (system) "Result = %s( redrawRequired )" nil)
483 ("COMFIT" fun nil (system) "Result = %s( X, Y, A)" (("EXPONENTIAL") ("GEOMETRIC") ("GOMPERTZ") ("HYPERBOLIC") ("LOGISTIC") ("LOGSQUARE") ("SIGMA") ("WEIGHTS") ("YFIT"))) 483 ("COMFIT" fun nil (system) "Result = %s( X, Y, A)" (("EXPONENTIAL") ("GEOMETRIC") ("GOMPERTZ") ("HYPERBOLIC") ("LOGISTIC") ("LOGSQUARE") ("SIGMA") ("WEIGHTS") ("YFIT")))
484 ("COMPLEX" fun nil (system) "Result = %s( Real [, Imaginary] ) or Result = COMPLEX(Expression, Offset, Dim1 [, ..., Dim8])" (("DOUBLE"))) 484 ("COMPLEX" fun nil (system) "Result = %s( Real [, Imaginary] ) or Result = COMPLEX(Expression, Offset, Dim1 [, ..., Dim8])" (("DOUBLE") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
485 ("COMPLEXARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO"))) 485 ("COMPLEXARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
486 ("COMPLEXROUND" fun nil (system) "Result = %s(Input)" nil) 486 ("COMPLEXROUND" fun nil (system) "Result = %s(Input)" nil)
487 ("COMPUTE_MESH_NORMALS" fun nil (system) "Result = %s( fVerts[, iConn] )" nil) 487 ("COMPUTE_MESH_NORMALS" fun nil (system) "Result = %s( fVerts[, iConn] )" nil)
488 ("COND" fun nil (system) "Result = %s( A)" (("DOUBLE") ("LNORM"))) 488 ("COND" fun nil (system) "Result = %s( A)" (("DOUBLE") ("LNORM")))
489 ("CONGRID" fun nil (system) "Result = %s( Array, X, Y, Z)" (("CENTER") ("CUBIC") ("INTERP") ("MINUS_ONE"))) 489 ("CONGRID" fun nil (system) "Result = %s( Array, X, Y, Z)" (("CENTER") ("CUBIC") ("INTERP") ("MINUS_ONE")))
490 ("CONJ" fun nil (system) "Result = %s(X)" nil) 490 ("CONJ" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
491 ("CONVERT_COORD" fun nil (system) "Result = %s( X [, Y [, Z]])" (("DATA") ("DEVICE") ("DOUBLE") ("NORMAL") ("T3D") ("TO_DATA") ("TO_DEVICE") ("TO_NORMAL"))) 491 ("CONVERT_COORD" fun nil (system) "Result = %s( X [, Y [, Z]])" (("DATA") ("DEVICE") ("DOUBLE") ("NORMAL") ("T3D") ("TO_DATA") ("TO_DEVICE") ("TO_NORMAL")))
492 ("CONVOL" fun nil (system) "Result = %s( Array, Kernel [, Scale_Factor])" (("CENTER") ("EDGE_TRUNCATE") ("EDGE_WRAP") ("MISSING") ("NAN"))) 492 ("CONVOL" fun nil (system) "Result = %s( Array, Kernel [, Scale_Factor])" (("CENTER") ("EDGE_TRUNCATE") ("EDGE_WRAP") ("MISSING") ("NAN") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
493 ("COORD2TO3" fun nil (system) "Result = %s( Mx, My, Dim, D0 [, PTI] )" nil) 493 ("COORD2TO3" fun nil (system) "Result = %s( Mx, My, Dim, D0 [, PTI] )" nil)
494 ("CORRELATE" fun nil (system) "Result = %s( X [, Y])" (("COVARIANCE") ("DOUBLE"))) 494 ("CORRELATE" fun nil (system) "Result = %s( X [, Y])" (("COVARIANCE") ("DOUBLE")))
495 ("COS" fun nil (system) "Result = %s(X)" nil) 495 ("COS" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
496 ("COSH" fun nil (system) "Result = %s(X)" nil) 496 ("COSH" fun nil (system) "Result = %s(X)" nil)
497 ("CRAMER" fun nil (system) "Result = %s( A, B)" (("DOUBLE") ("ZERO"))) 497 ("CRAMER" fun nil (system) "Result = %s( A, B)" (("DOUBLE") ("ZERO")))
498 ("CREATE_STRUCT" fun nil (system) "Result = %s( [Tag1, Value1, ..., Tagn, Valuen] ) or Result = CREATE_STRUCT()" (("NAME"))) 498 ("CREATE_STRUCT" fun nil (system) "Result = %s( [Tag1, Value1, ..., Tagn, Valuen] ) or Result = CREATE_STRUCT()" (("NAME")))
@@ -521,8 +521,8 @@
521 ("CW_TMPL" fun nil (system) "Result = %s( Parent)" (("UNAME") ("UVALUE"))) 521 ("CW_TMPL" fun nil (system) "Result = %s( Parent)" (("UNAME") ("UVALUE")))
522 ("CW_ZOOM" fun nil (system) "Result = %s( Parent)" (("FRAME") ("MAX") ("MIN") ("RETAIN") ("SAMPLE") ("SCALE") ("TRACK") ("UNAME") ("UVALUE") ("X_SCROLL_SIZE") ("X_ZSIZE") ("XSIZE") ("Y_SCROLL_SIZE") ("Y_ZSIZE") ("YSIZE"))) 522 ("CW_ZOOM" fun nil (system) "Result = %s( Parent)" (("FRAME") ("MAX") ("MIN") ("RETAIN") ("SAMPLE") ("SCALE") ("TRACK") ("UNAME") ("UVALUE") ("X_SCROLL_SIZE") ("X_ZSIZE") ("XSIZE") ("Y_SCROLL_SIZE") ("Y_ZSIZE") ("YSIZE")))
523 ("DBLARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO"))) 523 ("DBLARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
524 ("DCINDGEN" fun nil (system) "Result = %s( D1, ..., D8 )" nil) 524 ("DCINDGEN" fun nil (system) "Result = %s( D1, ..., D8 )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
525 ("DCOMPLEX" fun nil (system) "Result = %s( Real [, Imaginary] ) or Result = DCOMPLEX( Expression, Offset, Dim1 [, ..., Dim8] )" nil) 525 ("DCOMPLEX" fun nil (system) "Result = %s( Real [, Imaginary] ) or Result = DCOMPLEX( Expression, Offset, Dim1 [, ..., Dim8] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
526 ("DCOMPLEXARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO"))) 526 ("DCOMPLEXARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
527 ("DEFROI" fun nil (system) "Result = %s( Sx, Sy [, Xverts, Yverts])" (("NOFILL") ("NOREGION") ("RESTORE") ("X0") ("Y0") ("ZOOM"))) 527 ("DEFROI" fun nil (system) "Result = %s( Sx, Sy [, Xverts, Yverts])" (("NOFILL") ("NOREGION") ("RESTORE") ("X0") ("Y0") ("ZOOM")))
528 ("DEMO_MODE" fun nil (system) "Result = %s()" nil) 528 ("DEMO_MODE" fun nil (system) "Result = %s()" nil)
@@ -537,9 +537,9 @@
537 ("DIALOG_WRITE_IMAGE" fun nil (system) "Result = %s ( Image [, R, G, B])" (("DIALOG_PARENT") ("FILE") ("FIX_TYPE") ("NOWRITE") ("OPTIONS") ("PATH") ("TITLE") ("TYPE") ("WARN_EXIST"))) 537 ("DIALOG_WRITE_IMAGE" fun nil (system) "Result = %s ( Image [, R, G, B])" (("DIALOG_PARENT") ("FILE") ("FIX_TYPE") ("NOWRITE") ("OPTIONS") ("PATH") ("TITLE") ("TYPE") ("WARN_EXIST")))
538 ("DIGITAL_FILTER" fun nil (system) "Result = %s( Flow, Fhigh, A, Nterms )" nil) 538 ("DIGITAL_FILTER" fun nil (system) "Result = %s( Flow, Fhigh, A, Nterms )" nil)
539 ("DILATE" fun nil (system) "Result = %s( Image, Structure [, X0 [, Y0 [, Z0]]])" (("BACKGROUND") ("CONSTRAINED") ("GRAY") ("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES"))) 539 ("DILATE" fun nil (system) "Result = %s( Image, Structure [, X0 [, Y0 [, Z0]]])" (("BACKGROUND") ("CONSTRAINED") ("GRAY") ("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES")))
540 ("DINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" nil) 540 ("DINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
541 ("DIST" fun nil (system) "Result = %s(N [, M])" nil) 541 ("DIST" fun nil (system) "Result = %s(N [, M])" nil)
542 ("DOUBLE" fun nil (system) "Result = %s(Expression[, Offset [, Dim1, ..., Dimn]])" nil) 542 ("DOUBLE" fun nil (system) "Result = %s(Expression[, Offset [, Dim1, ..., Dimn]])" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
543 ("EIGENQL" fun nil (system) "Result = %s( A)" (("ABSOLUTE") ("ASCENDING") ("DOUBLE") ("EIGENVECTORS") ("OVERWRITE") ("RESIDUAL"))) 543 ("EIGENQL" fun nil (system) "Result = %s( A)" (("ABSOLUTE") ("ASCENDING") ("DOUBLE") ("EIGENVECTORS") ("OVERWRITE") ("RESIDUAL")))
544 ("EIGENVEC" fun nil (system) "Result = %s( A, Eval)" (("DOUBLE") ("ITMAX") ("RESIDUAL"))) 544 ("EIGENVEC" fun nil (system) "Result = %s( A, Eval)" (("DOUBLE") ("ITMAX") ("RESIDUAL")))
545 ("ELMHES" fun nil (system) "Result = %s( A)" (("COLUMN") ("DOUBLE") ("NO_BALANCE"))) 545 ("ELMHES" fun nil (system) "Result = %s( A)" (("COLUMN") ("DOUBLE") ("NO_BALANCE")))
@@ -677,17 +677,17 @@
677 ("ERFC" fun nil (system) "Result = %s(X)" nil) 677 ("ERFC" fun nil (system) "Result = %s(X)" nil)
678 ("ERFCX" fun nil (system) "Result = %s(X)" nil) 678 ("ERFCX" fun nil (system) "Result = %s(X)" nil)
679 ("ERODE" fun nil (system) "Result = %s( Image, Structure [, X0 [, Y0 [, Z0]]])" (("GRAY") ("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES"))) 679 ("ERODE" fun nil (system) "Result = %s( Image, Structure [, X0 [, Y0 [, Z0]]])" (("GRAY") ("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES")))
680 ("ERRORF" fun nil (system) "Result = %s(X)" nil) 680 ("ERRORF" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
681 ("EXECUTE" fun nil (system) "Result = %s(String [, QuietCompile])" nil) 681 ("EXECUTE" fun nil (system) "Result = %s(String [, QuietCompile])" nil)
682 ("EXP" fun nil (system) "Result = %s(Expression)" nil) 682 ("EXP" fun nil (system) "Result = %s(Expression)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
683 ("EXPAND_PATH" fun nil (system) "Result = %s( String)" (("ALL_DIRS") ("ARRAY") ("COUNT") ("DLM") ("HELP"))) 683 ("EXPAND_PATH" fun nil (system) "Result = %s( String)" (("ALL_DIRS") ("ARRAY") ("COUNT") ("DLM") ("HELP")))
684 ("EXPINT" fun nil (system) "Result = %s( N, X)" (("DOUBLE") ("EPS") ("ITMAX"))) 684 ("EXPINT" fun nil (system) "Result = %s( N, X)" (("DOUBLE") ("EPS") ("ITMAX") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
685 ("EXTRAC" fun nil (system) "Result = %s( Array, C1, C2, ..., Cn, S1, S2, ..., Sn )" nil) 685 ("EXTRAC" fun nil (system) "Result = %s( Array, C1, C2, ..., Cn, S1, S2, ..., Sn )" nil)
686 ("EXTRACT_SLICE" fun nil (system) "Result = %s( Vol, Xsize, Ysize, Xcenter, Ycenter, Zcenter, Xrot, Yrot, Zrot)" (("ANISOTROPY") ("CUBIC") ("OUT_VAL") ("RADIANS") ("SAMPLE") ("VERTICES"))) 686 ("EXTRACT_SLICE" fun nil (system) "Result = %s( Vol, Xsize, Ysize, Xcenter, Ycenter, Zcenter, Xrot, Yrot, Zrot)" (("ANISOTROPY") ("CUBIC") ("OUT_VAL") ("RADIANS") ("SAMPLE") ("VERTICES")))
687 ("F_CVF" fun nil (system) "Result = %s(P, Dfn, Dfd)" nil) 687 ("F_CVF" fun nil (system) "Result = %s(P, Dfn, Dfd)" nil)
688 ("F_PDF" fun nil (system) "Result = %s(V, Dfn, Dfd)" nil) 688 ("F_PDF" fun nil (system) "Result = %s(V, Dfn, Dfd)" nil)
689 ("FACTORIAL" fun nil (system) "Result = %s( N)" (("STIRLING") ("UL64"))) 689 ("FACTORIAL" fun nil (system) "Result = %s( N)" (("STIRLING") ("UL64")))
690 ("FFT" fun nil (system) "Result = %s( Array [, Direction])" (("DIMENSION") ("DOUBLE") ("INVERSE") ("OVERWRITE"))) 690 ("FFT" fun nil (system) "Result = %s( Array [, Direction])" (("DIMENSION") ("DOUBLE") ("INVERSE") ("OVERWRITE") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
691 ("FILE_EXPAND_PATH" fun nil (system) "Result = %s (Path)" nil) 691 ("FILE_EXPAND_PATH" fun nil (system) "Result = %s (Path)" nil)
692 ("FILE_INFO" fun nil (system) "Result = %s(Path)" (("NOEXPAND_PATH"))) 692 ("FILE_INFO" fun nil (system) "Result = %s(Path)" (("NOEXPAND_PATH")))
693 ("FILE_SEARCH" fun nil (system) "Result = %s(Path_Specification) or for recursive searching, Result = FILE_SEARCH(Dir_Specification, Recur_Pattern)" (("COUNT") ("EXPAND_ENVIRONMENT") ("EXPAND_TILDE") ("FOLD_CASE") ("FULLY_QUALIFY_PATH") ("ISSUE_ACCESS_ERROR") ("MARK_DIRECTORY") ("MATCH_ALL_INITIAL_DOT") ("MATCH_INITIAL_DOT") ("NOSORT") ("QUOTE") ("TEST_BLOCK_SPECIAL") ("TEST_CHARACTER_SPECIAL") ("TEST_DANGLING_SYMLINK") ("TEST_DIRECTORY") ("TEST_EXECUTABLE") ("TEST_GROUP") ("TEST_NAMED_PIPE") ("TEST_READ") ("TEST_REGULAR") ("TEST_SETGID") ("TEST_SETUID") ("TEST_SOCKET") ("TEST_STICKY_BIT") ("TEST_SYMLINK") ("TEST_USER") ("TEST_WRITE") ("TEST_ZERO_LENGTH"))) 693 ("FILE_SEARCH" fun nil (system) "Result = %s(Path_Specification) or for recursive searching, Result = FILE_SEARCH(Dir_Specification, Recur_Pattern)" (("COUNT") ("EXPAND_ENVIRONMENT") ("EXPAND_TILDE") ("FOLD_CASE") ("FULLY_QUALIFY_PATH") ("ISSUE_ACCESS_ERROR") ("MARK_DIRECTORY") ("MATCH_ALL_INITIAL_DOT") ("MATCH_INITIAL_DOT") ("NOSORT") ("QUOTE") ("TEST_BLOCK_SPECIAL") ("TEST_CHARACTER_SPECIAL") ("TEST_DANGLING_SYMLINK") ("TEST_DIRECTORY") ("TEST_EXECUTABLE") ("TEST_GROUP") ("TEST_NAMED_PIPE") ("TEST_READ") ("TEST_REGULAR") ("TEST_SETGID") ("TEST_SETUID") ("TEST_SOCKET") ("TEST_STICKY_BIT") ("TEST_SYMLINK") ("TEST_USER") ("TEST_WRITE") ("TEST_ZERO_LENGTH")))
@@ -695,11 +695,11 @@
695 ("FILE_WHICH" fun nil (system) "Result = %s( [Path, ] File)" (("INCLUDE_CURRENT_DIR"))) 695 ("FILE_WHICH" fun nil (system) "Result = %s( [Path, ] File)" (("INCLUDE_CURRENT_DIR")))
696 ("FILEPATH" fun nil (system) "Result = %s( Filename)" (("ROOT_DIR") ("SUBDIRECTORY") ("TERMINAL") ("TMP"))) 696 ("FILEPATH" fun nil (system) "Result = %s( Filename)" (("ROOT_DIR") ("SUBDIRECTORY") ("TERMINAL") ("TMP")))
697 ("FINDFILE" fun nil (system) "Result = %s( File_Specification)" (("COUNT"))) 697 ("FINDFILE" fun nil (system) "Result = %s( File_Specification)" (("COUNT")))
698 ("FINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" nil) 698 ("FINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
699 ("FINITE" fun nil (system) "Result = %s( X)" (("INFINITY") ("NAN") ("SIGN"))) 699 ("FINITE" fun nil (system) "Result = %s( X)" (("INFINITY") ("NAN") ("SIGN") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
700 ("FIX" fun nil (system) "Result = %s( Expression [, Offset [, Dim1, ..., Dim8]])" (("PRINT") ("TYPE"))) 700 ("FIX" fun nil (system) "Result = %s( Expression [, Offset [, Dim1, ..., Dim8]])" (("PRINT") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD") ("TYPE")))
701 ("FLOAT" fun nil (system) "Result = %s( Expression [, Offset [, Dim1, ..., Dim8]] )" nil) 701 ("FLOAT" fun nil (system) "Result = %s( Expression [, Offset [, Dim1, ..., Dim8]] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
702 ("FLOOR" fun nil (system) "Result = %s(X)" (("L64"))) 702 ("FLOOR" fun nil (system) "Result = %s(X)" (("L64") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
703 ("FLTARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO"))) 703 ("FLTARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
704 ("FORMAT_AXIS_VALUES" fun nil (system) "Result = %s( Values )" nil) 704 ("FORMAT_AXIS_VALUES" fun nil (system) "Result = %s( Values )" nil)
705 ("FSTAT" fun nil (system) "Result = %s(Unit)" nil) 705 ("FSTAT" fun nil (system) "Result = %s(Unit)" nil)
@@ -707,7 +707,7 @@
707 ("FV_TEST" fun nil (system) "Result = %s(X, Y)" nil) 707 ("FV_TEST" fun nil (system) "Result = %s(X, Y)" nil)
708 ("FX_ROOT" fun nil (system) "Result = %s(X, Func)" (("DOUBLE") ("ITMAX") ("STOP") ("TOL"))) 708 ("FX_ROOT" fun nil (system) "Result = %s(X, Func)" (("DOUBLE") ("ITMAX") ("STOP") ("TOL")))
709 ("FZ_ROOTS" fun nil (system) "Result = %s(C)" (("DOUBLE") ("EPS") ("NO_POLISH"))) 709 ("FZ_ROOTS" fun nil (system) "Result = %s(C)" (("DOUBLE") ("EPS") ("NO_POLISH")))
710 ("GAMMA" fun nil (system) "Result = %s(X)" nil) 710 ("GAMMA" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
711 ("GAUSS2DFIT" fun nil (system) "Result = %s( Z, A [, X, Y])" (("NEGATIVE") ("TILT"))) 711 ("GAUSS2DFIT" fun nil (system) "Result = %s( Z, A [, X, Y])" (("NEGATIVE") ("TILT")))
712 ("GAUSS_CVF" fun nil (system) "Result = %s(P)" nil) 712 ("GAUSS_CVF" fun nil (system) "Result = %s(P)" nil)
713 ("GAUSS_PDF" fun nil (system) "Result = %s(V)" nil) 713 ("GAUSS_PDF" fun nil (system) "Result = %s(V)" nil)
@@ -819,23 +819,23 @@
819 ("IBETA" fun nil (system) "Result = %s( A, B, X)" (("DOUBLE") ("EPS") ("ITER") ("ITMAX"))) 819 ("IBETA" fun nil (system) "Result = %s( A, B, X)" (("DOUBLE") ("EPS") ("ITER") ("ITMAX")))
820 ("IDENTITY" fun nil (system) "Result = %s( N)" (("DOUBLE"))) 820 ("IDENTITY" fun nil (system) "Result = %s( N)" (("DOUBLE")))
821 ("IGAMMA" fun nil (system) "Result = %s( A, X)" (("DOUBLE") ("EPS") ("ITER") ("ITMAX") ("METHOD"))) 821 ("IGAMMA" fun nil (system) "Result = %s( A, X)" (("DOUBLE") ("EPS") ("ITER") ("ITMAX") ("METHOD")))
822 ("IMAGINARY" fun nil (system) "Result = %s(Complex_Expression)" nil) 822 ("IMAGINARY" fun nil (system) "Result = %s(Complex_Expression)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
823 ("INDGEN" fun nil (system) "Result = %s(D1, ..., D8)" (("BYTE") ("COMPLEX") ("DCOMPLEX") ("DOUBLE") ("FLOAT") ("L64") ("LONG") ("STRING") ("TYPE") ("UINT") ("UL64") ("ULONG"))) 823 ("INDGEN" fun nil (system) "Result = %s(D1, ..., D8)" (("BYTE") ("COMPLEX") ("DCOMPLEX") ("DOUBLE") ("FLOAT") ("L64") ("LONG") ("STRING") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD") ("TYPE") ("UINT") ("UL64") ("ULONG")))
824 ("INT_2D" fun nil (system) "Result = %s( Fxy, AB_Limits, PQ_Limits, Pts)" (("DOUBLE") ("ORDER"))) 824 ("INT_2D" fun nil (system) "Result = %s( Fxy, AB_Limits, PQ_Limits, Pts)" (("DOUBLE") ("ORDER")))
825 ("INT_3D" fun nil (system) "Result = %s( Fxyz, AB_Limits, PQ_Limits, UV_Limits, Pts)" (("DOUBLE"))) 825 ("INT_3D" fun nil (system) "Result = %s( Fxyz, AB_Limits, PQ_Limits, UV_Limits, Pts)" (("DOUBLE")))
826 ("INT_TABULATED" fun nil (system) "Result = %s( X, F)" (("DOUBLE") ("SORT"))) 826 ("INT_TABULATED" fun nil (system) "Result = %s( X, F)" (("DOUBLE") ("SORT")))
827 ("INTARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO"))) 827 ("INTARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
828 ("INTERPOL" fun nil (system) "Result = %s( V, N) or Result = INTERPOL( V, X, U)" (("LSQUADRATIC") ("QUADRATIC") ("SPLINE"))) 828 ("INTERPOL" fun nil (system) "Result = %s( V, N) or Result = INTERPOL( V, X, U)" (("LSQUADRATIC") ("QUADRATIC") ("SPLINE")))
829 ("INTERPOLATE" fun nil (system) "Result = %s( P, X [, Y [, Z]])" (("CUBIC") ("GRID") ("MISSING"))) 829 ("INTERPOLATE" fun nil (system) "Result = %s( P, X [, Y [, Z]])" (("CUBIC") ("GRID") ("MISSING") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
830 ("INVERT" fun nil (system) "Result = %s( Array [, Status])" (("DOUBLE"))) 830 ("INVERT" fun nil (system) "Result = %s( Array [, Status])" (("DOUBLE")))
831 ("IOCTL" fun nil (system) "Result = %s( File_Unit [, Request, Arg])" (("BY_VALUE") ("MT_OFFLINE") ("MT_REWIND") ("MT_SKIP_FILE") ("MT_SKIP_RECORD") ("MT_WEOF") ("SUPPRESS_ERROR"))) 831 ("IOCTL" fun nil (system) "Result = %s( File_Unit [, Request, Arg])" (("BY_VALUE") ("MT_OFFLINE") ("MT_REWIND") ("MT_SKIP_FILE") ("MT_SKIP_RECORD") ("MT_WEOF") ("SUPPRESS_ERROR")))
832 ("ISHFT" fun nil (system) "Result = %s(P1, P2)" nil) 832 ("ISHFT" fun nil (system) "Result = %s(P1, P2)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
833 ("JULDAY" fun nil (system) "Result = %s(Month, Day, Year, Hour, Minute, Second)" nil) 833 ("JULDAY" fun nil (system) "Result = %s(Month, Day, Year, Hour, Minute, Second)" nil)
834 ("KEYWORD_SET" fun nil (system) "Result = %s(Expression)" nil) 834 ("KEYWORD_SET" fun nil (system) "Result = %s(Expression)" nil)
835 ("KRIG2D" fun nil (system) "Result = %s( Z [, X, Y])" (("BOUNDS") ("EXPONENTIAL") ("GS") ("NX") ("NY") ("REGULAR") ("SPHERICAL") ("XGRID") ("XVALUES") ("YGRID") ("YVALUES"))) 835 ("KRIG2D" fun nil (system) "Result = %s( Z [, X, Y])" (("BOUNDS") ("EXPONENTIAL") ("GS") ("NX") ("NY") ("REGULAR") ("SPHERICAL") ("XGRID") ("XVALUES") ("YGRID") ("YVALUES")))
836 ("KURTOSIS" fun nil (system) "Result = %s(X)" (("DOUBLE") ("NAN"))) 836 ("KURTOSIS" fun nil (system) "Result = %s(X)" (("DOUBLE") ("NAN")))
837 ("KW_TEST" fun nil (system) "Result = %s( X)" (("DF") ("MISSING"))) 837 ("KW_TEST" fun nil (system) "Result = %s( X)" (("DF") ("MISSING")))
838 ("L64INDGEN" fun nil (system) "Result = %s(D1, ..., D8)" nil) 838 ("L64INDGEN" fun nil (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
839 ("LABEL_DATE" fun nil (system) "Result = %s()" (("AM_PM") ("DATE_FORMAT") ("DAYS_OF_WEEK") ("MONTHS") ("OFFSET") ("ROUND_UP") ("XTICKFORMAT"))) 839 ("LABEL_DATE" fun nil (system) "Result = %s()" (("AM_PM") ("DATE_FORMAT") ("DAYS_OF_WEEK") ("MONTHS") ("OFFSET") ("ROUND_UP") ("XTICKFORMAT")))
840 ("LABEL_REGION" fun nil (system) "Result = %s( Data)" (("ALL_NEIGHBORS") ("ULONG"))) 840 ("LABEL_REGION" fun nil (system) "Result = %s( Data)" (("ALL_NEIGHBORS") ("ULONG")))
841 ("LADFIT" fun nil (system) "Result = %s( X, Y)" (("ABSDEV") ("DOUBLE"))) 841 ("LADFIT" fun nil (system) "Result = %s( X, Y)" (("ABSDEV") ("DOUBLE")))
@@ -843,19 +843,19 @@
843 ("LEEFILT" fun nil (system) "Result = %s( A [, N [, Sig]])" (("DOUBLE") ("EXACT"))) 843 ("LEEFILT" fun nil (system) "Result = %s( A [, N [, Sig]])" (("DOUBLE") ("EXACT")))
844 ("LEGENDRE" fun nil (system) "Result = %s( X, L [, M])" (("DOUBLE"))) 844 ("LEGENDRE" fun nil (system) "Result = %s( X, L [, M])" (("DOUBLE")))
845 ("LINBCG" fun nil (system) "Result = %s( A, B, X)" (("DOUBLE") ("ITER") ("ITMAX") ("ITOL") ("TOL"))) 845 ("LINBCG" fun nil (system) "Result = %s( A, B, X)" (("DOUBLE") ("ITER") ("ITMAX") ("ITOL") ("TOL")))
846 ("LINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" nil) 846 ("LINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
847 ("LINFIT" fun nil (system) "Result = %s( X, Y)" (("CHISQ") ("COVAR") ("DOUBLE") ("MEASURE_ERRORS") ("PROB") ("SIGMA") ("YFIT"))) 847 ("LINFIT" fun nil (system) "Result = %s( X, Y)" (("CHISQ") ("COVAR") ("DOUBLE") ("MEASURE_ERRORS") ("PROB") ("SIGMA") ("YFIT")))
848 ("LIVE_STYLE" fun nil (system) "Style = %s ({ 'contour' | 'image' | 'plot' | 'surface'})" (("BASE_STYLE") ("COLORBAR_PROPERTIES") ("ERROR") ("GRAPHIC_PROPERTIES") ("GROUP") ("LEGEND_PROPERTIES") ("NAME") ("SAVE") ("TEMPLATE_FILE") ("VISUALIZATION_PROPERTIES") ("XAXIS_PROPERTIES") ("YAXIS_PROPERTIES") ("ZAXIS_PROPERTIES"))) 848 ("LIVE_STYLE" fun nil (system) "Style = %s ({ 'contour' | 'image' | 'plot' | 'surface'})" (("BASE_STYLE") ("COLORBAR_PROPERTIES") ("ERROR") ("GRAPHIC_PROPERTIES") ("GROUP") ("LEGEND_PROPERTIES") ("NAME") ("SAVE") ("TEMPLATE_FILE") ("VISUALIZATION_PROPERTIES") ("XAXIS_PROPERTIES") ("YAXIS_PROPERTIES") ("ZAXIS_PROPERTIES")))
849 ("LL_ARC_DISTANCE" fun nil (system) "Result = %s( Lon_lat0, Arc_Dist, Az)" (("DEGREES"))) 849 ("LL_ARC_DISTANCE" fun nil (system) "Result = %s( Lon_lat0, Arc_Dist, Az)" (("DEGREES")))
850 ("LMFIT" fun nil (system) "Result = %s( X, Y, A)" (("ALPHA") ("CHISQ") ("CONVERGENCE") ("COVAR") ("DOUBLE") ("FITA") ("FUNCTION_NAME") ("ITER") ("ITMAX") ("ITMIN") ("MEASURE_ERRORS") ("SIGMA") ("TOL"))) 850 ("LMFIT" fun nil (system) "Result = %s( X, Y, A)" (("ALPHA") ("CHISQ") ("CONVERGENCE") ("COVAR") ("DOUBLE") ("FITA") ("FUNCTION_NAME") ("ITER") ("ITMAX") ("ITMIN") ("MEASURE_ERRORS") ("SIGMA") ("TOL")))
851 ("LMGR" fun nil (system) "Result = %s()" (("CLIENTSERVER") ("DEMO") ("EMBEDDED") ("EXPIRE_DATE") ("FORCE_DEMO") ("INSTALL_NUM") ("LMHOSTID") ("RUNTIME") ("SITE_NOTICE") ("STUDENT") ("TRIAL"))) 851 ("LMGR" fun nil (system) "Result = %s()" (("CLIENTSERVER") ("DEMO") ("EMBEDDED") ("EXPIRE_DATE") ("FORCE_DEMO") ("INSTALL_NUM") ("LMHOSTID") ("RUNTIME") ("SITE_NOTICE") ("STUDENT") ("TRIAL")))
852 ("LNGAMMA" fun nil (system) "Result = %s(X)" nil) 852 ("LNGAMMA" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
853 ("LNP_TEST" fun nil (system) "Result = %s( X, Y)" (("DOUBLE") ("HIFAC") ("JMAX") ("OFAC") ("WK1") ("WK2"))) 853 ("LNP_TEST" fun nil (system) "Result = %s( X, Y)" (("DOUBLE") ("HIFAC") ("JMAX") ("OFAC") ("WK1") ("WK2")))
854 ("LOCALE_GET" fun nil (system) "Result = %s( )" nil) 854 ("LOCALE_GET" fun nil (system) "Result = %s( )" nil)
855 ("LON64ARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO"))) 855 ("LON64ARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
856 ("LONARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO"))) 856 ("LONARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
857 ("LONG" fun nil (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" nil) 857 ("LONG" fun nil (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" nil)
858 ("LONG64" fun nil (system) "Result = %s( Expression[, Offset [, D1, ..., D8]] )" nil) 858 ("LONG64" fun nil (system) "Result = %s( Expression[, Offset [, D1, ..., D8]] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
859 ("LSODE" fun nil (system) "Result = %s( Y, X, H, Derivs[, Status])" (("ATOL") ("RTOL"))) 859 ("LSODE" fun nil (system) "Result = %s( Y, X, H, Derivs[, Status])" (("ATOL") ("RTOL")))
860 ("LU_COMPLEX" fun nil (system) "Result = %s( A, B)" (("DOUBLE") ("INVERSE") ("SPARSE"))) 860 ("LU_COMPLEX" fun nil (system) "Result = %s( A, B)" (("DOUBLE") ("INVERSE") ("SPARSE")))
861 ("LUMPROVE" fun nil (system) "Result = %s( A, Alud, Index, B, X)" (("COLUMN") ("DOUBLE"))) 861 ("LUMPROVE" fun nil (system) "Result = %s( A, Alud, Index, B, X)" (("COLUMN") ("DOUBLE")))
@@ -867,7 +867,7 @@
867 ("MAP_IMAGE" fun nil (system) "Result = %s( Image [, Startx, Starty [, Xsize, Ysize]])" (("BILINEAR") ("COMPRESS") ("LATMAX") ("LATMIN") ("LONMAX") ("LONMIN") ("MAX_VALUE") ("MIN_VALUE") ("MISSING") ("SCALE"))) 867 ("MAP_IMAGE" fun nil (system) "Result = %s( Image [, Startx, Starty [, Xsize, Ysize]])" (("BILINEAR") ("COMPRESS") ("LATMAX") ("LATMIN") ("LONMAX") ("LONMIN") ("MAX_VALUE") ("MIN_VALUE") ("MISSING") ("SCALE")))
868 ("MAP_PATCH" fun nil (system) "Result = %s( Image_Orig [, Lons, Lats])" (("LAT0") ("LAT1") ("LON0") ("LON1") ("MAX_VALUE") ("MISSING") ("TRIANGULATE") ("XSIZE") ("XSTART") ("YSIZE") ("YSTART"))) 868 ("MAP_PATCH" fun nil (system) "Result = %s( Image_Orig [, Lons, Lats])" (("LAT0") ("LAT1") ("LON0") ("LON1") ("MAX_VALUE") ("MISSING") ("TRIANGULATE") ("XSIZE") ("XSTART") ("YSIZE") ("YSTART")))
869 ("MATRIX_MULTIPLY" fun nil (system) "Result = %s( A, B)" (("ATRANSPOSE") ("BTRANSPOSE"))) 869 ("MATRIX_MULTIPLY" fun nil (system) "Result = %s( A, B)" (("ATRANSPOSE") ("BTRANSPOSE")))
870 ("MAX" fun nil (system) "Result = %s( Array [, Max_Subscript])" (("DIMENSION") ("MIN") ("NAN") ("SUBSCRIPT_MIN"))) 870 ("MAX" fun nil (system) "Result = %s( Array [, Max_Subscript])" (("DIMENSION") ("MIN") ("NAN") ("SUBSCRIPT_MIN") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
871 ("MD_TEST" fun nil (system) "Result = %s( X)" (("ABOVE") ("BELOW") ("MDC"))) 871 ("MD_TEST" fun nil (system) "Result = %s( X)" (("ABOVE") ("BELOW") ("MDC")))
872 ("MEAN" fun nil (system) "Result = %s( X)" (("DOUBLE") ("NAN"))) 872 ("MEAN" fun nil (system) "Result = %s( X)" (("DOUBLE") ("NAN")))
873 ("MEANABSDEV" fun nil (system) "Result = %s( X)" (("DOUBLE") ("MEDIAN") ("NAN"))) 873 ("MEANABSDEV" fun nil (system) "Result = %s( X)" (("DOUBLE") ("MEDIAN") ("NAN")))
@@ -882,7 +882,7 @@
882 ("MESH_SURFACEAREA" fun nil (system) "Result = %s ( Verts, Conn)" (("AUXDATA") ("MOMENT"))) 882 ("MESH_SURFACEAREA" fun nil (system) "Result = %s ( Verts, Conn)" (("AUXDATA") ("MOMENT")))
883 ("MESH_VALIDATE" fun nil (system) "Result = %s ( Verts, Conn)" (("COMBINE_VERTICES") ("PACK_VERTICES") ("REMOVE_NAN") ("TOLERANCE"))) 883 ("MESH_VALIDATE" fun nil (system) "Result = %s ( Verts, Conn)" (("COMBINE_VERTICES") ("PACK_VERTICES") ("REMOVE_NAN") ("TOLERANCE")))
884 ("MESH_VOLUME" fun nil (system) "Result = %s ( Verts, Conn)" (("SIGNED"))) 884 ("MESH_VOLUME" fun nil (system) "Result = %s ( Verts, Conn)" (("SIGNED")))
885 ("MIN" fun nil (system) "Result = %s( Array [, Min_Subscript])" (("DIMENSION") ("MAX") ("NAN") ("SUBSCRIPT_MAX"))) 885 ("MIN" fun nil (system) "Result = %s( Array [, Min_Subscript])" (("DIMENSION") ("MAX") ("NAN") ("SUBSCRIPT_MAX") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
886 ("MIN_CURVE_SURF" fun nil (system) "Result = %s(Z [, X, Y])" (("BOUNDS") ("CONST") ("DOUBLE") ("GS") ("NX") ("NY") ("REGULAR") ("SPHERE") ("TPS") ("XGRID") ("XOUT") ("XPOUT") ("XVALUES") ("YGRID") ("YOUT") ("YPOUT") ("YVALUES"))) 886 ("MIN_CURVE_SURF" fun nil (system) "Result = %s(Z [, X, Y])" (("BOUNDS") ("CONST") ("DOUBLE") ("GS") ("NX") ("NY") ("REGULAR") ("SPHERE") ("TPS") ("XGRID") ("XOUT") ("XPOUT") ("XVALUES") ("YGRID") ("YOUT") ("YPOUT") ("YVALUES")))
887 ("MOMENT" fun nil (system) "Result = %s( X)" (("DOUBLE") ("MDEV") ("NAN") ("SDEV"))) 887 ("MOMENT" fun nil (system) "Result = %s( X)" (("DOUBLE") ("MDEV") ("NAN") ("SDEV")))
888 ("MORPH_CLOSE" fun nil (system) "Result = %s (Image, Structure)" (("GRAY") ("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES"))) 888 ("MORPH_CLOSE" fun nil (system) "Result = %s (Image, Structure)" (("GRAY") ("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES")))
@@ -922,7 +922,7 @@
922 ("PNT_LINE" fun nil (system) "Result = %s( P0, L0, L1 [, Pl])" (("INTERVAL"))) 922 ("PNT_LINE" fun nil (system) "Result = %s( P0, L0, L1 [, Pl])" (("INTERVAL")))
923 ("POLAR_SURFACE" fun nil (system) "Result = %s( Z, R, Theta)" (("BOUNDS") ("GRID") ("MISSING") ("QUINTIC") ("SPACING"))) 923 ("POLAR_SURFACE" fun nil (system) "Result = %s( Z, R, Theta)" (("BOUNDS") ("GRID") ("MISSING") ("QUINTIC") ("SPACING")))
924 ("POLY" fun nil (system) "Result = %s(X, C)" nil) 924 ("POLY" fun nil (system) "Result = %s(X, C)" nil)
925 ("POLY_2D" fun nil (system) "Result = %s( Array, P, Q [, Interp [, Dimx, Dimy]])" (("CUBIC") ("MISSING"))) 925 ("POLY_2D" fun nil (system) "Result = %s( Array, P, Q [, Interp [, Dimx, Dimy]])" (("CUBIC") ("MISSING") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
926 ("POLY_AREA" fun nil (system) "Result = %s( X, Y)" (("DOUBLE") ("SIGNED"))) 926 ("POLY_AREA" fun nil (system) "Result = %s( X, Y)" (("DOUBLE") ("SIGNED")))
927 ("POLY_FIT" fun nil (system) "Result = %s( X, Y, Degree)" (("CHISQ") ("COVAR") ("DOUBLE") ("MEASURE_ERRORS") ("SIGMA") ("STATUS") ("YBAND") ("YERROR") ("YFIT"))) 927 ("POLY_FIT" fun nil (system) "Result = %s( X, Y, Degree)" (("CHISQ") ("COVAR") ("DOUBLE") ("MEASURE_ERRORS") ("SIGMA") ("STATUS") ("YBAND") ("YERROR") ("YFIT")))
928 ("POLYFILLV" fun nil (system) "Result = %s( X, Y, Sx, Sy [, Run_Length] )" nil) 928 ("POLYFILLV" fun nil (system) "Result = %s( X, Y, Sx, Sy [, Run_Length] )" nil)
@@ -974,13 +974,13 @@
974 ("REFORM" fun nil (system) "Result = %s( Array, D1, ..., D8)" (("OVERWRITE"))) 974 ("REFORM" fun nil (system) "Result = %s( Array, D1, ..., D8)" (("OVERWRITE")))
975 ("REGION_GROW" fun nil (system) "Result = %s(Array, ROIPixels)" (("ALL_NEIGHBORS") ("STDDEV_MULTIPLIER") ("THRESHOLD"))) 975 ("REGION_GROW" fun nil (system) "Result = %s(Array, ROIPixels)" (("ALL_NEIGHBORS") ("STDDEV_MULTIPLIER") ("THRESHOLD")))
976 ("REGRESS" fun nil (system) "Result = %s( X, Y)" (("CHISQ") ("CONST") ("CORRELATION") ("DOUBLE") ("FTEST") ("MCORRELATION") ("MEASURE_ERRORS") ("SIGMA") ("STATUS") ("YFIT"))) 976 ("REGRESS" fun nil (system) "Result = %s( X, Y)" (("CHISQ") ("CONST") ("CORRELATION") ("DOUBLE") ("FTEST") ("MCORRELATION") ("MEASURE_ERRORS") ("SIGMA") ("STATUS") ("YFIT")))
977 ("REPLICATE" fun nil (system) "Result = %s( Value, D1 [, ..., D8] )" nil) 977 ("REPLICATE" fun nil (system) "Result = %s( Value, D1 [, ..., D8] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
978 ("REVERSE" fun nil (system) "Result = %s( Array [, Subscript_Index])" (("OVERWRITE"))) 978 ("REVERSE" fun nil (system) "Result = %s( Array [, Subscript_Index])" (("OVERWRITE")))
979 ("RK4" fun nil (system) "Result = %s( Y, Dydx, X, H, Derivs)" (("DOUBLE"))) 979 ("RK4" fun nil (system) "Result = %s( Y, Dydx, X, H, Derivs)" (("DOUBLE")))
980 ("ROBERTS" fun nil (system) "Result = %s(Image)" nil) 980 ("ROBERTS" fun nil (system) "Result = %s(Image)" nil)
981 ("ROT" fun nil (system) "Result = %s( A, Angle, [Mag, X0, Y0])" (("CUBIC") ("INTERP") ("MISSING") ("PIVOT"))) 981 ("ROT" fun nil (system) "Result = %s( A, Angle, [Mag, X0, Y0])" (("CUBIC") ("INTERP") ("MISSING") ("PIVOT")))
982 ("ROTATE" fun nil (system) "Result = %s(Array, Direction)" nil) 982 ("ROTATE" fun nil (system) "Result = %s(Array, Direction)" nil)
983 ("ROUND" fun nil (system) "Result = %s(X)" (("L64"))) 983 ("ROUND" fun nil (system) "Result = %s(X)" (("L64") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
984 ("ROUTINE_INFO" fun nil (system) "Result = %s( [Routine])" (("DISABLED") ("ENABLED") ("FUNCTIONS") ("PARAMETERS") ("SOURCE") ("SYSTEM") ("UNRESOLVED") ("VARIABLES"))) 984 ("ROUTINE_INFO" fun nil (system) "Result = %s( [Routine])" (("DISABLED") ("ENABLED") ("FUNCTIONS") ("PARAMETERS") ("SOURCE") ("SYSTEM") ("UNRESOLVED") ("VARIABLES")))
985 ("RS_TEST" fun nil (system) "Result = %s( X, Y)" (("UX") ("UY"))) 985 ("RS_TEST" fun nil (system) "Result = %s( X, Y)" (("UX") ("UY")))
986 ("RSTRPOS" fun nil (system) "Result = %s( Expression, Search_String [, Pos] )" nil) 986 ("RSTRPOS" fun nil (system) "Result = %s( Expression, Search_String [, Pos] )" nil)
@@ -991,9 +991,9 @@
991 ("SFIT" fun nil (system) "Result = %s( Data, Degree)" (("KX"))) 991 ("SFIT" fun nil (system) "Result = %s( Data, Degree)" (("KX")))
992 ("SHIFT" fun nil (system) "Result = %s(Array, S1, ..., Sn)" nil) 992 ("SHIFT" fun nil (system) "Result = %s(Array, S1, ..., Sn)" nil)
993 ("SIMPLEX" fun nil (system) "Result = %s( Zequation, Constraints, M1, M2, M3 [, Tableau [, Izrov [, Iposv]]])" (("DOUBLE") ("EPS") ("STATUS"))) 993 ("SIMPLEX" fun nil (system) "Result = %s( Zequation, Constraints, M1, M2, M3 [, Tableau [, Izrov [, Iposv]]])" (("DOUBLE") ("EPS") ("STATUS")))
994 ("SIN" fun nil (system) "Result = %s(X)" nil) 994 ("SIN" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
995 ("SINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" nil) 995 ("SINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" nil)
996 ("SINH" fun nil (system) "Result = %s(X)" nil) 996 ("SINH" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
997 ("SIZE" fun nil (system) "Result = %s( Expression)" (("DIMENSIONS") ("FILE_LUN") ("L64") ("N_DIMENSIONS") ("N_ELEMENTS") ("STRUCTURE") ("TNAME") ("TYPE"))) 997 ("SIZE" fun nil (system) "Result = %s( Expression)" (("DIMENSIONS") ("FILE_LUN") ("L64") ("N_DIMENSIONS") ("N_ELEMENTS") ("STRUCTURE") ("TNAME") ("TYPE")))
998 ("SKEWNESS" fun nil (system) "Result = %s( X)" (("DOUBLE") ("NAN"))) 998 ("SKEWNESS" fun nil (system) "Result = %s( X)" (("DOUBLE") ("NAN")))
999 ("SMOOTH" fun nil (system) "Result = %s( Array, Width)" (("EDGE_TRUNCATE") ("MISSING") ("NAN"))) 999 ("SMOOTH" fun nil (system) "Result = %s( Array, Width)" (("EDGE_TRUNCATE") ("MISSING") ("NAN")))
@@ -1008,7 +1008,7 @@
1008 ("SPRSAX" fun nil (system) "Result = %s( A, X)" (("DOUBLE"))) 1008 ("SPRSAX" fun nil (system) "Result = %s( A, X)" (("DOUBLE")))
1009 ("SPRSIN" fun nil (system) "Result = %s( A)" (("COLUMN") ("DOUBLE") ("THRESHOLD"))) 1009 ("SPRSIN" fun nil (system) "Result = %s( A)" (("COLUMN") ("DOUBLE") ("THRESHOLD")))
1010 ("SPRSTP" fun nil (system) "Result = %s(A)" nil) 1010 ("SPRSTP" fun nil (system) "Result = %s(A)" nil)
1011 ("SQRT" fun nil (system) "Result = %s(X)" nil) 1011 ("SQRT" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
1012 ("STANDARDIZE" fun nil (system) "Result = %s( A)" (("DOUBLE"))) 1012 ("STANDARDIZE" fun nil (system) "Result = %s( A)" (("DOUBLE")))
1013 ("STDDEV" fun nil (system) "Result = %s( X)" (("DOUBLE") ("NAN"))) 1013 ("STDDEV" fun nil (system) "Result = %s( X)" (("DOUBLE") ("NAN")))
1014 ("STR_SEP" fun nil (system) "Result = %s( Str, Separator)" (("ESC") ("REMOVE_ALL") ("TRIM"))) 1014 ("STR_SEP" fun nil (system) "Result = %s( Str, Separator)" (("ESC") ("REMOVE_ALL") ("TRIM")))
@@ -1034,8 +1034,8 @@
1034 ("T_CVF" fun nil (system) "Result = %s(P, Df)" nil) 1034 ("T_CVF" fun nil (system) "Result = %s(P, Df)" nil)
1035 ("T_PDF" fun nil (system) "Result = %s(V, Df)" nil) 1035 ("T_PDF" fun nil (system) "Result = %s(V, Df)" nil)
1036 ("TAG_NAMES" fun nil (system) "Result = %s( Expression)" (("STRUCTURE_NAME"))) 1036 ("TAG_NAMES" fun nil (system) "Result = %s( Expression)" (("STRUCTURE_NAME")))
1037 ("TAN" fun nil (system) "Result = %s(X)" nil) 1037 ("TAN" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
1038 ("TANH" fun nil (system) "Result = %s(X)" nil) 1038 ("TANH" fun nil (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
1039 ("TEMPORARY" fun nil (system) "Result = %s(Variable)" nil) 1039 ("TEMPORARY" fun nil (system) "Result = %s(Variable)" nil)
1040 ("TETRA_CLIP" fun nil (system) "Result = %s ( Plane, Vertsin, Connin, Vertsout, Connout)" (("AUXDATA_IN") ("AUXDATA_OUT") ("CUT_VERTS"))) 1040 ("TETRA_CLIP" fun nil (system) "Result = %s ( Plane, Vertsin, Connin, Vertsout, Connout)" (("AUXDATA_IN") ("AUXDATA_OUT") ("CUT_VERTS")))
1041 ("TETRA_SURFACE" fun nil (system) "Result = %s (Verts, Connin)" nil) 1041 ("TETRA_SURFACE" fun nil (system) "Result = %s (Verts, Connin)" nil)
@@ -1044,7 +1044,7 @@
1044 ("TIFF_READ" fun nil (system) "Result = %s(File [, R, G, B])" nil) 1044 ("TIFF_READ" fun nil (system) "Result = %s(File [, R, G, B])" nil)
1045 ("TIMEGEN" fun nil (system) "Result = %s( [D1,...,D8])" (("DAYS") ("FINAL") ("HOURS") ("MINUTES") ("MONTHS") ("SECONDS") ("START") ("STEP_SIZE") ("UNITS") ("YEAR"))) 1045 ("TIMEGEN" fun nil (system) "Result = %s( [D1,...,D8])" (("DAYS") ("FINAL") ("HOURS") ("MINUTES") ("MONTHS") ("SECONDS") ("START") ("STEP_SIZE") ("UNITS") ("YEAR")))
1046 ("TM_TEST" fun nil (system) "Result = %s( X, Y)" (("PAIRED") ("UNEQUAL"))) 1046 ("TM_TEST" fun nil (system) "Result = %s( X, Y)" (("PAIRED") ("UNEQUAL")))
1047 ("TOTAL" fun nil (system) "Result = %s( Array [, Dimension])" (("CUMULATIVE") ("DOUBLE") ("NAN"))) 1047 ("TOTAL" fun nil (system) "Result = %s( Array [, Dimension])" (("CUMULATIVE") ("DOUBLE") ("NAN") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
1048 ("TRACE" fun nil (system) "Result = %s( A)" (("DOUBLE"))) 1048 ("TRACE" fun nil (system) "Result = %s( A)" (("DOUBLE")))
1049 ("TRANSPOSE" fun nil (system) "Result = %s( Array [, P] )" nil) 1049 ("TRANSPOSE" fun nil (system) "Result = %s( Array [, P] )" nil)
1050 ("TRI_SURF" fun nil (system) "Result = %s( Z [, X, Y])" (("BOUNDS") ("EXTRAPOLATE") ("GS") ("MISSING") ("NX") ("NY") ("REGULAR") ("XGRID") ("XVALUES") ("YGRID") ("YVALUES"))) 1050 ("TRI_SURF" fun nil (system) "Result = %s( Z [, X, Y])" (("BOUNDS") ("EXTRAPOLATE") ("GS") ("MISSING") ("NX") ("NY") ("REGULAR") ("XGRID") ("XVALUES") ("YGRID") ("YVALUES")))
@@ -1056,25 +1056,25 @@
1056 ("TS_FCAST" fun nil (system) "Result = %s( X, P, Nvalues)" (("BACKCAST") ("DOUBLE"))) 1056 ("TS_FCAST" fun nil (system) "Result = %s( X, P, Nvalues)" (("BACKCAST") ("DOUBLE")))
1057 ("TS_SMOOTH" fun nil (system) "Result = %s( X, Nvalues)" (("BACKWARD") ("DOUBLE") ("FORWARD") ("ORDER"))) 1057 ("TS_SMOOTH" fun nil (system) "Result = %s( X, Nvalues)" (("BACKWARD") ("DOUBLE") ("FORWARD") ("ORDER")))
1058 ("TVRD" fun nil (system) "Result = %s( [X0 [, Y0 [, Nx [, Ny [, Channel]]]]])" (("CHANNEL") ("ORDER") ("TRUE") ("WORDS"))) 1058 ("TVRD" fun nil (system) "Result = %s( [X0 [, Y0 [, Nx [, Ny [, Channel]]]]])" (("CHANNEL") ("ORDER") ("TRUE") ("WORDS")))
1059 ("UINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" nil) 1059 ("UINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
1060 ("UINT" fun nil (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" nil) 1060 ("UINT" fun nil (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
1061 ("UINTARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO"))) 1061 ("UINTARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
1062 ("UL64INDGEN" fun nil (system) "Result = %s(D1, ..., D8)" nil) 1062 ("UL64INDGEN" fun nil (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
1063 ("ULINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" nil) 1063 ("ULINDGEN" fun nil (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
1064 ("ULON64ARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO"))) 1064 ("ULON64ARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
1065 ("ULONARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO"))) 1065 ("ULONARR" fun nil (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
1066 ("ULONG" fun nil (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" nil) 1066 ("ULONG" fun nil (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" nil)
1067 ("ULONG64" fun nil (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" nil) 1067 ("ULONG64" fun nil (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
1068 ("UNIQ" fun nil (system) "Result = %s( Array [, Index] )" nil) 1068 ("UNIQ" fun nil (system) "Result = %s( Array [, Index] )" nil)
1069 ("VALUE_LOCATE" fun nil (system) "Result = %s ( Vector, Value)" (("L64"))) 1069 ("VALUE_LOCATE" fun nil (system) "Result = %s ( Vector, Value)" (("L64")))
1070 ("VARIANCE" fun nil (system) "Result = %s( X)" (("DOUBLE") ("NAN"))) 1070 ("VARIANCE" fun nil (system) "Result = %s( X)" (("DOUBLE") ("NAN")))
1071 ("VAX_FLOAT" fun nil (system) "Result = %s( [Default])" (("FILE_UNIT"))) 1071 ("VAX_FLOAT" fun nil (system) "Result = %s( [Default])" (("FILE_UNIT")))
1072 ("VERT_T3D" fun nil (system) "Result = %s( Vertex_List)" (("MATRIX") ("NO_COPY") ("NO_DIVIDE") ("SAVE_DIVIDE"))) 1072 ("VERT_T3D" fun nil (system) "Result = %s( Vertex_List)" (("MATRIX") ("NO_COPY") ("NO_DIVIDE") ("SAVE_DIVIDE")))
1073 ("VOIGT" fun nil (system) "Result = %s(A, U)" nil) 1073 ("VOIGT" fun nil (system) "Result = %s(A, U)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
1074 ("VOXEL_PROJ" fun nil (system) "Result = %s( V [, RGBO])" (("BACKGROUND") ("CUTTING_PLANE") ("INTERPOLATE") ("MAXIMUM_INTENSITY") ("STEP") ("XSIZE") ("YSIZE") ("ZBUFFER") ("ZPIXELS"))) 1074 ("VOXEL_PROJ" fun nil (system) "Result = %s( V [, RGBO])" (("BACKGROUND") ("CUTTING_PLANE") ("INTERPOLATE") ("MAXIMUM_INTENSITY") ("STEP") ("XSIZE") ("YSIZE") ("ZBUFFER") ("ZPIXELS")))
1075 ("WARP_TRI" fun nil (system) "Result = %s( Xo, Yo, Xi, Yi, Image)" (("EXTRAPOLATE") ("OUTPUT_SIZE") ("QUINTIC") ("TPS"))) 1075 ("WARP_TRI" fun nil (system) "Result = %s( Xo, Yo, Xi, Yi, Image)" (("EXTRAPOLATE") ("OUTPUT_SIZE") ("QUINTIC") ("TPS")))
1076 ("WATERSHED" fun nil (system) "Result = %s ( Image)" (("CONNECTIVITY"))) 1076 ("WATERSHED" fun nil (system) "Result = %s ( Image)" (("CONNECTIVITY")))
1077 ("WHERE" fun nil (system) "Result = %s( Array_Expression [, Count])" (("COMPLEMENT") ("L64") ("NCOMPLEMENT"))) 1077 ("WHERE" fun nil (system) "Result = %s( Array_Expression [, Count])" (("COMPLEMENT") ("L64") ("NCOMPLEMENT") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
1078 ("WIDGET_ACTIVEX" fun nil (system) "Result = %s( Parent, COM_ID)" (("ALIGN_BOTTOM") ("ALIGN_CENTER") ("ALIGN_LEFT") ("ALIGN_RIGHT") ("ALIGN_TOP") ("EVENT_FUNC") ("EVENT_PRO") ("FUNC_GET_VALUE") ("ID_TYPE") ("KILL_NOTIFY") ("NO_COPY") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("SCR_XSIZE") ("SCR_YSIZE") ("SENSITIVE") ("UNAME") ("UNITS") ("UVALUE") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE"))) 1078 ("WIDGET_ACTIVEX" fun nil (system) "Result = %s( Parent, COM_ID)" (("ALIGN_BOTTOM") ("ALIGN_CENTER") ("ALIGN_LEFT") ("ALIGN_RIGHT") ("ALIGN_TOP") ("EVENT_FUNC") ("EVENT_PRO") ("FUNC_GET_VALUE") ("ID_TYPE") ("KILL_NOTIFY") ("NO_COPY") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("SCR_XSIZE") ("SCR_YSIZE") ("SENSITIVE") ("UNAME") ("UNITS") ("UVALUE") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE")))
1079 ("WIDGET_BASE" fun nil (system) "Result = %s( [Parent])" (("ALIGN_BOTTOM") ("ALIGN_CENTER") ("ALIGN_LEFT") ("ALIGN_RIGHT") ("ALIGN_TOP") ("APP_MBAR") ("BASE_ALIGN_BOTTOM") ("BASE_ALIGN_CENTER") ("BASE_ALIGN_LEFT") ("BASE_ALIGN_RIGHT") ("BASE_ALIGN_TOP") ("COLUMN") ("CONTEXT_MENU") ("DISPLAY_NAME") ("EVENT_FUNC") ("EVENT_PRO") ("EXCLUSIVE") ("FLOATING") ("FRAME") ("FUNC_GET_VALUE") ("GRID_LAYOUT") ("GROUP_LEADER") ("KBRD_FOCUS_EVENTS") ("KILL_NOTIFY") ("MAP") ("MBAR") ("MODAL") ("NO_COPY") ("NONEXCLUSIVE") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESOURCE_NAME") ("RNAME_MBAR") ("ROW") ("SCR_XSIZE") ("SCR_YSIZE") ("SCROLL") ("SENSITIVE") ("SPACE") ("TITLE") ("TLB_FRAME_ATTR") ("TLB_KILL_REQUEST_EVENTS") ("TLB_SIZE_EVENTS") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("X_SCROLL_SIZE") ("XOFFSET") ("XPAD") ("XSIZE") ("Y_SCROLL_SIZE") ("YOFFSET") ("YPAD") ("YSIZE"))) 1079 ("WIDGET_BASE" fun nil (system) "Result = %s( [Parent])" (("ALIGN_BOTTOM") ("ALIGN_CENTER") ("ALIGN_LEFT") ("ALIGN_RIGHT") ("ALIGN_TOP") ("APP_MBAR") ("BASE_ALIGN_BOTTOM") ("BASE_ALIGN_CENTER") ("BASE_ALIGN_LEFT") ("BASE_ALIGN_RIGHT") ("BASE_ALIGN_TOP") ("COLUMN") ("CONTEXT_MENU") ("DISPLAY_NAME") ("EVENT_FUNC") ("EVENT_PRO") ("EXCLUSIVE") ("FLOATING") ("FRAME") ("FUNC_GET_VALUE") ("GRID_LAYOUT") ("GROUP_LEADER") ("KBRD_FOCUS_EVENTS") ("KILL_NOTIFY") ("MAP") ("MBAR") ("MODAL") ("NO_COPY") ("NONEXCLUSIVE") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESOURCE_NAME") ("RNAME_MBAR") ("ROW") ("SCR_XSIZE") ("SCR_YSIZE") ("SCROLL") ("SENSITIVE") ("SPACE") ("TITLE") ("TLB_FRAME_ATTR") ("TLB_KILL_REQUEST_EVENTS") ("TLB_SIZE_EVENTS") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("X_SCROLL_SIZE") ("XOFFSET") ("XPAD") ("XSIZE") ("Y_SCROLL_SIZE") ("YOFFSET") ("YPAD") ("YSIZE")))
1080 ("WIDGET_BUTTON" fun nil (system) "Result = %s( Parent)" (("ALIGN_CENTER") ("ALIGN_LEFT") ("ALIGN_RIGHT") ("BITMAP") ("DYNAMIC_RESIZE") ("EVENT_FUNC") ("EVENT_PRO") ("FONT") ("FRAME") ("FUNC_GET_VALUE") ("GROUP_LEADER") ("HELP") ("KILL_NOTIFY") ("MENU") ("NO_COPY") ("NO_RELEASE") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESOURCE_NAME") ("SCR_XSIZE") ("SCR_YSIZE") ("SENSITIVE") ("SEPARATOR") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("VALUE") ("X_BITMAP_EXTRA") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE"))) 1080 ("WIDGET_BUTTON" fun nil (system) "Result = %s( Parent)" (("ALIGN_CENTER") ("ALIGN_LEFT") ("ALIGN_RIGHT") ("BITMAP") ("DYNAMIC_RESIZE") ("EVENT_FUNC") ("EVENT_PRO") ("FONT") ("FRAME") ("FUNC_GET_VALUE") ("GROUP_LEADER") ("HELP") ("KILL_NOTIFY") ("MENU") ("NO_COPY") ("NO_RELEASE") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESOURCE_NAME") ("SCR_XSIZE") ("SCR_YSIZE") ("SENSITIVE") ("SEPARATOR") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("VALUE") ("X_BITMAP_EXTRA") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE")))
@@ -1380,7 +1380,7 @@
1380 ("Init" fun "TrackBall" (system) "Result = Obj -> [%s::]%s( Center, Radius ) ('TrackBall', Center, Radius)" (("AXIS") ("CONSTRAIN") ("MOUSE"))) 1380 ("Init" fun "TrackBall" (system) "Result = Obj -> [%s::]%s( Center, Radius ) ('TrackBall', Center, Radius)" (("AXIS") ("CONSTRAIN") ("MOUSE")))
1381 ("Update" fun "TrackBall" (system) "Result = Obj -> [%s::]%s( sEvent)" (("MOUSE") ("TRANSFORM") ("TRANSLATE"))) 1381 ("Update" fun "TrackBall" (system) "Result = Obj -> [%s::]%s( sEvent)" (("MOUSE") ("TRANSFORM") ("TRANSLATE")))
1382 ) 1382 )
1383 "1324 builtin routines with 5958 keywords for IDL version 5.5.") 1383 "1324 builtin routines with 6129 keywords for IDL version 5.5.")
1384 1384
1385(setq idlwave-system-variables-alist 1385(setq idlwave-system-variables-alist
1386 '( 1386 '(
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el
index f360f690b5c..af7e4e551ac 100644
--- a/lisp/progmodes/idlw-shell.el
+++ b/lisp/progmodes/idlw-shell.el
@@ -1,11 +1,11 @@
1;; idlw-shell.el --- run IDL as an inferior process of Emacs. 1;; idlw-shell.el --- run IDL as an inferior process of Emacs.
2;; Copyright (c) 1999, 2000, 2001 Free Software Foundation 2;; Copyright (c) 1999, 2000, 2001,2002 Free Software Foundation
3 3
4;; Author: Carsten Dominik <dominik@astro.uva.nl> 4;; Author: Carsten Dominik <dominik@astro.uva.nl>
5;; Chris Chase <chase@att.com> 5;; Chris Chase <chase@att.com>
6;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> 6;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu>
7;; Version: 4.14 7;; Version: 4.15
8;; Date: $Date: 2002/07/18 18:58:07 $ 8;; Date: $Date: 2002/09/12 16:35:18 $
9;; Keywords: processes 9;; Keywords: processes
10 10
11;; This file is part of GNU Emacs. 11;; This file is part of GNU Emacs.
@@ -72,12 +72,6 @@
72;; KNOWN PROBLEMS 72;; KNOWN PROBLEMS
73;; ============== 73;; ==============
74;; 74;;
75;; I don't plan on implementing directory tracking by watching the IDL
76;; commands entered at the prompt, since too often an IDL procedure
77;; will change the current directory. If you want the idl process
78;; buffer to match the IDL current working just execute `M-x
79;; idlwave-shell-resync-dirs' (bound to "\C-c\C-d\C-w" by default.)
80;;
81;; Under XEmacs the Debug menu in the shell does not display the 75;; Under XEmacs the Debug menu in the shell does not display the
82;; keybindings in the prefix map. There bindings are available anyway - so 76;; keybindings in the prefix map. There bindings are available anyway - so
83;; it is a bug in XEmacs. 77;; it is a bug in XEmacs.
@@ -117,6 +111,7 @@
117 111
118;;; Customizations: idlwave-shell group 112;;; Customizations: idlwave-shell group
119 113
114;; General/Misc. customizations
120(defgroup idlwave-shell-general-setup nil 115(defgroup idlwave-shell-general-setup nil
121 "General setup of the Shell interaction for IDLWAVE/Shell." 116 "General setup of the Shell interaction for IDLWAVE/Shell."
122 :prefix "idlwave-shell" 117 :prefix "idlwave-shell"
@@ -141,29 +136,6 @@ process output is made by surrounding this name with `*'s."
141 136
142;; (defcustom idlwave-shell-automatic-start...) See idlwave.el 137;; (defcustom idlwave-shell-automatic-start...) See idlwave.el
143 138
144(defcustom idlwave-shell-initial-commands "!more=0"
145 "Initial commands, separated by newlines, to send to IDL.
146This string is sent to the IDL process by `idlwave-shell-mode' which is
147invoked by `idlwave-shell'."
148 :group 'idlwave-shell-general-setup
149 :type 'string)
150
151(defcustom idlwave-shell-save-command-history t
152 "Non-nil means preserve command history between sessions.
153The file `idlwave-shell-command-history-file' is used to save and restore
154the history."
155 :group 'idlwave-shell-general-setup
156 :type 'boolean)
157
158(defcustom idlwave-shell-command-history-file "~/.idlwhist"
159 "The file in which the command history of the idlwave shell is saved.
160In order to change the size of the history, see the variable
161`comint-input-ring-size'.
162The history is only saved if the variable `idlwave-shell-save-command-history'
163is non-nil."
164 :group 'idlwave-shell-general-setup
165 :type 'file)
166
167(defcustom idlwave-shell-use-dedicated-frame nil 139(defcustom idlwave-shell-use-dedicated-frame nil
168 "*Non-nil means, IDLWAVE should use a special frame to display shell buffer." 140 "*Non-nil means, IDLWAVE should use a special frame to display shell buffer."
169 :group 'idlwave-shell-general-setup 141 :group 'idlwave-shell-general-setup
@@ -198,19 +170,6 @@ t Arrows force the cursor back to the current command line and
198 (const :tag "in command line only" cmdline))) 170 (const :tag "in command line only" cmdline)))
199 171
200;; FIXME: add comint-input-ring-size? 172;; FIXME: add comint-input-ring-size?
201(defcustom idlwave-shell-comint-settings
202 '((comint-scroll-to-bottom-on-input . t)
203 (comint-scroll-to-bottom-on-output . nil)
204 (comint-scroll-show-maximum-output . t)
205 )
206 "Alist of special settings for the comint variables in the IDLWAVE Shell.
207Each entry is a cons cell with the name of a variable and a value.
208The function `idlwave-shell-mode' will make local variables out of each entry.
209Changes to this variable will only be active when the shell buffer is
210newly created."
211 :group 'idlwave-shell-general-setup
212 :type '(repeat
213 (cons variable sexp)))
214 173
215(defcustom idlwave-shell-use-toolbar t 174(defcustom idlwave-shell-use-toolbar t
216 "*Non-nil means, use the debugging toolbar in all IDL related buffers. 175 "*Non-nil means, use the debugging toolbar in all IDL related buffers.
@@ -268,7 +227,7 @@ to set this option to nil."
268 :group 'idlwave-shell-general-setup 227 :group 'idlwave-shell-general-setup
269 :type 'boolean) 228 :type 'boolean)
270 229
271(defcustom idlwave-shell-file-name-chars "~/A-Za-z0-9+@:_.$#%={}\\-" 230(defcustom idlwave-shell-file-name-chars "~/A-Za-z0-9+:_.$#%={}\\-"
272 "The characters allowed in file names, as a string. 231 "The characters allowed in file names, as a string.
273Used for file name completion. Must not contain `'', `,' and `\"' 232Used for file name completion. Must not contain `'', `,' and `\"'
274because these are used as separators by IDL." 233because these are used as separators by IDL."
@@ -280,8 +239,58 @@ because these are used as separators by IDL."
280 :group 'idlwave-shell-general-setup 239 :group 'idlwave-shell-general-setup
281 :type 'hook) 240 :type 'hook)
282 241
283(defvar idlwave-shell-print-expression-function nil 242(defcustom idlwave-shell-graphics-window-size '(500 400)
284 "*OBSOLETE VARIABLE, is no longer used.") 243 "Size of IDL graphics windows popped up by special IDLWAVE command.
244The command is `C-c C-d C-f' and accepts as a prefix the window nr.
245A command like `WINDOW,N,xsize=XX,ysize=YY' is sent to IDL."
246 :group 'idlwave-shell-general-setup
247 :type '(list
248 (integer :tag "x size")
249 (integer :tag "y size")))
250
251;; Commands Sent to Shell... etc.
252(defgroup idlwave-shell-command-setup nil
253 "Setup for command parameters of the Shell interaction for IDLWAVE."
254 :prefix "idlwave-shell"
255 :group 'idlwave)
256
257(defcustom idlwave-shell-initial-commands "!more=0"
258 "Initial commands, separated by newlines, to send to IDL.
259This string is sent to the IDL process by `idlwave-shell-mode' which is
260invoked by `idlwave-shell'."
261 :group 'idlwave-shell-command-setup
262 :type 'string)
263
264(defcustom idlwave-shell-save-command-history t
265 "Non-nil means preserve command history between sessions.
266The file `idlwave-shell-command-history-file' is used to save and restore
267the history."
268 :group 'idlwave-shell-command-setup
269 :type 'boolean)
270
271(defcustom idlwave-shell-command-history-file "~/.idlwhist"
272 "The file in which the command history of the idlwave shell is saved.
273In order to change the size of the history, see the variable
274`comint-input-ring-size'.
275The history is only saved if the variable `idlwave-shell-save-command-history'
276is non-nil."
277 :group 'idlwave-shell-command-setup
278 :type 'file)
279
280(defcustom idlwave-shell-show-commands
281 '(run misc breakpoint)
282 "*A list of command types to show output from in the shell.
283Possibilities are 'run, 'debug, 'breakpoint, and 'misc . Unlisted
284types are not displayed in the shell. The single type 'everything
285causes all the copious shell traffic to be displayed."
286 :group 'idlwave-shell-command-setup
287 :type '(choice
288 (const everything)
289 (set :tag "Checklist" :greedy t
290 (const :tag "All .run and .compile commands" run)
291 (const :tag "All breakpoint commands" breakpoint)
292 (const :tag "All debug and stepping commands" debug)
293 (const :tag "Return, close, etc. commands" misc))))
285 294
286(defcustom idlwave-shell-examine-alist 295(defcustom idlwave-shell-examine-alist
287 '(("Print" . "print,___") 296 '(("Print" . "print,___")
@@ -299,24 +308,46 @@ The keys are used in the selection popup created by
299`idlwave-shell-examine-select', and the corresponding value is sent as 308`idlwave-shell-examine-select', and the corresponding value is sent as
300a command to the shell, with special sequence `___' replaced by the 309a command to the shell, with special sequence `___' replaced by the
301expression being examined." 310expression being examined."
302 :group 'idlwave-shell-general-setup 311 :group 'idlwave-shell-command-setup
303 :type '(repeat 312 :type '(repeat
304 (cons 313 (cons
305 (string :tag "Label ") 314 (string :tag "Label ")
306 (string :tag "Command")))) 315 (string :tag "Command"))))
307 316
317(defvar idlwave-shell-print-expression-function nil
318 "*OBSOLETE VARIABLE, is no longer used.")
319
308(defcustom idlwave-shell-separate-examine-output t 320(defcustom idlwave-shell-separate-examine-output t
309 "*Non-nil mean, put output of examine commands in their own buffer." 321 "*Non-nil mean, put output of examine commands in their own buffer."
310 :group 'idlwave-shell-general-setup 322 :group 'idlwave-shell-command-setup
311 :type 'boolean) 323 :type 'boolean)
312 324
325(defcustom idlwave-shell-comint-settings
326 '((comint-scroll-to-bottom-on-input . t)
327 (comint-scroll-to-bottom-on-output . t)
328 (comint-scroll-show-maximum-output . nil))
329
330 "Alist of special settings for the comint variables in the IDLWAVE Shell.
331Each entry is a cons cell with the name of a variable and a value.
332The function `idlwave-shell-mode' will make local variables out of each entry.
333Changes to this variable will only be active when the shell buffer is
334newly created."
335 :group 'idlwave-shell-command-setup
336 :type '(repeat
337 (cons variable sexp)))
338
339(defcustom idlwave-shell-query-for-class t
340 "*Non-nil means query the shell for object class on object completions."
341 :group 'idlwave-shell-command-setup
342 :type 'boolean)
343
313(defcustom idlwave-shell-use-input-mode-magic nil 344(defcustom idlwave-shell-use-input-mode-magic nil
314 "*Non-nil means, IDLWAVE should check for input mode spells in output. 345 "*Non-nil means, IDLWAVE should check for input mode spells in output.
315The spells are strings printed by your IDL program and matched 346The spells are strings printed by your IDL program and matched
316by the regular expressions in `idlwave-shell-input-mode-spells'. 347by the regular expressions in `idlwave-shell-input-mode-spells'.
317When these expressions match, IDLWAVE switches to character input mode and 348When these expressions match, IDLWAVE switches to character input mode and
318back, respectively. See `idlwave-shell-input-mode-spells' for details." 349back, respectively. See `idlwave-shell-input-mode-spells' for details."
319 :group 'idlwave-shell-general-setup 350 :group 'idlwave-shell-command-setup
320 :type 'boolean) 351 :type 'boolean)
321 352
322(defcustom idlwave-shell-input-mode-spells 353(defcustom idlwave-shell-input-mode-spells
@@ -372,23 +403,14 @@ pro idlwave_char_input,on=on,off=off
372 else print,'<onechar>' 403 else print,'<onechar>'
373 endif 404 endif
374end" 405end"
375 :group 'idlwave-shell-general-setup 406 :group 'idlwave-shell-command-setup
376 :type '(list 407 :type '(list
377 (regexp :tag "One-char regexp") 408 (regexp :tag "One-char regexp")
378 (regexp :tag "Char-mode regexp") 409 (regexp :tag "Char-mode regexp")
379 (regexp :tag "Line-mode regexp"))) 410 (regexp :tag "Line-mode regexp")))
380 411
381(defcustom idlwave-shell-graphics-window-size '(500 400)
382 "Size of IDL graphics windows popped up by special IDLWAVE command.
383The command is `C-c C-d C-f' and accepts as a prefix the window nr.
384A command like `WINDOW,N,xsize=XX,ysize=YY' is sent to IDL."
385 :group 'idlwave-shell-general-setup
386 :type '(list
387 (integer :tag "x size")
388 (integer :tag "y size")))
389
390;;; Breakpoint Overlays etc
391 412
413;; Breakpoint Overlays etc
392(defgroup idlwave-shell-highlighting-and-faces nil 414(defgroup idlwave-shell-highlighting-and-faces nil
393 "Highlighting and Faces used by the IDLWAVE Shell mode." 415 "Highlighting and Faces used by the IDLWAVE Shell mode."
394 :prefix "idlwave-shell" 416 :prefix "idlwave-shell"
@@ -540,12 +562,10 @@ idlwave-shell-temp-rinfo-save-file is set (respectively)."
540This is used to speed up the reloading of the routine info procedure 562This is used to speed up the reloading of the routine info procedure
541before use by the shell.") 563before use by the shell.")
542 564
543(defvar idlwave-shell-dirstack-query "printd" 565(defvar idlwave-shell-dirstack-query "cd,current=___cur & print,___cur"
544 "Command used by `idlwave-shell-resync-dirs' to query IDL for 566 "Command used by `idlwave-shell-resync-dirs' to query IDL for
545the directory stack.") 567the directory stack.")
546 568
547(defvar idlwave-shell-wd-is-synched nil)
548
549(defvar idlwave-shell-path-query "__pa=expand_path(!path,/array)&for i=0,n_elements(__pa)-1 do print,'PATH:<'+__pa[i]+'>'&print,'SYSDIR:<'+!dir+'>'" 569(defvar idlwave-shell-path-query "__pa=expand_path(!path,/array)&for i=0,n_elements(__pa)-1 do print,'PATH:<'+__pa[i]+'>'&print,'SYSDIR:<'+!dir+'>'"
550 "The command which gets !PATH and !DIR infor from the shell.") 570 "The command which gets !PATH and !DIR infor from the shell.")
551 571
@@ -661,6 +681,9 @@ with `*'s."
661(defvar idlwave-shell-ready nil 681(defvar idlwave-shell-ready nil
662 "If non-nil can send next command to IDL process.") 682 "If non-nil can send next command to IDL process.")
663 683
684(defvar idlwave-shell-wait-for-output nil
685 "Whether to wait for output to accumulate.")
686
664;;; The following are the types of messages we attempt to catch to 687;;; The following are the types of messages we attempt to catch to
665;;; resync our idea of where IDL execution currently is. 688;;; resync our idea of where IDL execution currently is.
666;;; 689;;;
@@ -833,11 +856,17 @@ IDL has currently stepped.")
833 (idlwave-shell-display-line nil) 856 (idlwave-shell-display-line nil)
834 (setq idlwave-shell-calling-stack-index 0) 857 (setq idlwave-shell-calling-stack-index 0)
835 858
859 (when idlwave-shell-query-for-class
860 (add-to-list (make-local-variable 'idlwave-determine-class-special)
861 'idlwave-shell-get-object-class)
862 (setq idlwave-store-inquired-class t))
863
836 ;; Make sure comint-last-input-end does not go to beginning of 864 ;; Make sure comint-last-input-end does not go to beginning of
837 ;; buffer (in case there were other processes already in this buffer). 865 ;; buffer (in case there were other processes already in this buffer).
838 (set-marker comint-last-input-end (point)) 866 (set-marker comint-last-input-end (point))
839 (setq idlwave-idlwave_routine_info-compiled nil) 867 (setq idlwave-idlwave_routine_info-compiled nil)
840 (setq idlwave-shell-ready nil) 868 (setq idlwave-shell-ready nil)
869 (setq idlwave-shell-wait-for-output nil)
841 (setq idlwave-shell-bp-alist nil) 870 (setq idlwave-shell-bp-alist nil)
842 (idlwave-shell-update-bp-overlays) ; Throw away old overlays 871 (idlwave-shell-update-bp-overlays) ; Throw away old overlays
843 (setq idlwave-shell-sources-alist nil) 872 (setq idlwave-shell-sources-alist nil)
@@ -1016,24 +1045,38 @@ See also the variable `idlwave-shell-prompt-pattern'.
1016 (idlwave-shell arg) 1045 (idlwave-shell arg)
1017 (select-window window))) 1046 (select-window window)))
1018 1047
1048(defun idlwave-shell-hide-p (type)
1049 "Whether to hide this type of command.
1050Return either nil or 'hide."
1051 (if (listp idlwave-shell-show-commands)
1052 (if (not (memq type idlwave-shell-show-commands)) 'hide)))
1053
1019(defun idlwave-shell-send-command (&optional cmd pcmd hide preempt) 1054(defun idlwave-shell-send-command (&optional cmd pcmd hide preempt)
1020 "Send a command to IDL process. 1055 "Send a command to IDL process.
1021 1056
1022\(CMD PCMD HIDE\) are placed at the end of `idlwave-shell-pending-commands'. 1057\(CMD PCMD HIDE\) are placed at the end of
1023If IDL is ready the first command, CMD, in 1058` idlwave-shell-pending-commands'. If IDL is ready the first command,
1024`idlwave-shell-pending-commands' is sent to the IDL process. If optional 1059CMD, in `idlwave-shell-pending-commands' is sent to the IDL process.
1025second argument PCMD is non-nil it will be placed on 1060If optional second argument PCMD is non-nil it will be placed on
1026`idlwave-shell-post-command-hook' when CMD is executed. If the optional 1061`idlwave-shell-post-command-hook' when CMD is executed. If the
1027third argument HIDE is non-nil, then hide output from CMD. 1062optional third argument HIDE is non-nil, then hide output from CMD.
1028If optional fourth argument PREEMPT is non-nil CMD is put at front of 1063If optional fourth argument PREEMPT is non-nil CMD is put at front of
1029`idlwave-shell-pending-commands'. 1064`idlwave-shell-pending-commands'. If PREEMPT is 'wait, wait for all
1030 1065output to complete and the next prompt to arrive before returning
1031IDL is considered ready if the prompt is present 1066\(useful if you need an answer now\). IDL is considered ready if the
1032and if `idlwave-shell-ready' is non-nil." 1067prompt is present and if `idlwave-shell-ready' is non-nil."
1033 1068
1034 ;(setq hide nil) ; FIXME: turn this on for debugging only 1069; (setq hide nil) ; FIXME: turn this on for debugging only
1035; (message "SENDING %s|||%s" cmd pcmd) ;?????????????????????? 1070; (if (null cmd)
1036 (let (buf proc) 1071; (progn
1072; (message "SENDING Pending commands: %s"
1073; (prin1-to-string idlwave-shell-pending-commands)))
1074; (message "SENDING %s|||%s" cmd pcmd))
1075 (if (and (symbolp idlwave-shell-show-commands)
1076 (eq idlwave-shell-show-commands 'everything))
1077 (setq hide nil))
1078 (let ((save-buffer (current-buffer))
1079 buf proc)
1037 ;; Get or make the buffer and its process 1080 ;; Get or make the buffer and its process
1038 (if (or (not (setq buf (get-buffer (idlwave-shell-buffer)))) 1081 (if (or (not (setq buf (get-buffer (idlwave-shell-buffer))))
1039 (not (setq proc (get-buffer-process buf)))) 1082 (not (setq proc (get-buffer-process buf))))
@@ -1047,51 +1090,53 @@ and if `idlwave-shell-ready' is non-nil."
1047 (not (setq proc (get-buffer-process buf)))) 1090 (not (setq proc (get-buffer-process buf))))
1048 ;; Still nothing 1091 ;; Still nothing
1049 (error "Problem with autostarting IDL shell")))) 1092 (error "Problem with autostarting IDL shell"))))
1050 1093 (when (or cmd idlwave-shell-pending-commands)
1051 (save-excursion
1052 (set-buffer buf) 1094 (set-buffer buf)
1053 (goto-char (process-mark proc))
1054 ;; To make this easy, always push CMD onto pending commands 1095 ;; To make this easy, always push CMD onto pending commands
1055 (if cmd 1096 (if cmd
1056 (setq idlwave-shell-pending-commands 1097 (setq idlwave-shell-pending-commands
1057 (if preempt 1098 (if preempt
1058 ;; Put at front. 1099 ;; Put at front.
1059 (append (list (list cmd pcmd hide)) 1100 (append (list (list cmd pcmd hide))
1060 idlwave-shell-pending-commands) 1101 idlwave-shell-pending-commands)
1061 ;; Put at end. 1102 ;; Put at end.
1062 (append idlwave-shell-pending-commands 1103 (append idlwave-shell-pending-commands
1063 (list (list cmd pcmd hide)))))) 1104 (list (list cmd pcmd hide))))))
1064 ;; Check if IDL ready 1105 ;; Check if IDL ready
1065 (if (and idlwave-shell-ready 1106 (let ((save-point (point-marker)))
1066 ;; Check for IDL prompt 1107 (goto-char (process-mark proc))
1067 (save-excursion 1108 (if (and idlwave-shell-ready
1068 (forward-line 0) 1109 ;; Check for IDL prompt
1069 ;; (beginning-of-line) ; Changed for Emacs 21 1110 (prog2
1070 (looking-at idlwave-shell-prompt-pattern))) 1111 (forward-line 0)
1071 ;; IDL ready for command 1112 ;; (beginning-of-line) ; Changed for Emacs 21
1072 (if idlwave-shell-pending-commands 1113 (looking-at idlwave-shell-prompt-pattern)
1073 ;; execute command 1114 (goto-char (process-mark proc))))
1074 (let* ((lcmd (car idlwave-shell-pending-commands)) 1115 ;; IDL ready for command, execute it
1075 (cmd (car lcmd)) 1116 (let* ((lcmd (car idlwave-shell-pending-commands))
1076 (pcmd (nth 1 lcmd)) 1117 (cmd (car lcmd))
1077 (hide (nth 2 lcmd))) 1118 (pcmd (nth 1 lcmd))
1078 ;; If this is an executive command, reset the stack pointer 1119 (hide (nth 2 lcmd)))
1079 (if (eq (string-to-char cmd) ?.) 1120 ;; If this is an executive command, reset the stack pointer
1080 (setq idlwave-shell-calling-stack-index 0)) 1121 (if (eq (string-to-char cmd) ?.)
1081 ;; Set post-command 1122 (setq idlwave-shell-calling-stack-index 0))
1082 (setq idlwave-shell-post-command-hook pcmd) 1123 ;; Set post-command
1083 ;; Output hiding 1124 (setq idlwave-shell-post-command-hook pcmd)
1084;;; Debug code 1125 ;; Output hiding
1085;;; (setq idlwave-shell-hide-output nil) 1126 (setq idlwave-shell-hide-output hide)
1086 (setq idlwave-shell-hide-output hide) 1127 ;; Pop command
1087 ;; Pop command 1128 (setq idlwave-shell-pending-commands
1088 (setq idlwave-shell-pending-commands 1129 (cdr idlwave-shell-pending-commands))
1089 (cdr idlwave-shell-pending-commands)) 1130 ;; Send command for execution
1090 ;; Send command for execution 1131 (set-marker comint-last-input-start (point))
1091 (set-marker comint-last-input-start (point)) 1132 (set-marker comint-last-input-end (point))
1092 (set-marker comint-last-input-end (point)) 1133 (comint-simple-send proc cmd)
1093 (comint-simple-send proc cmd) 1134 (setq idlwave-shell-ready nil)
1094 (setq idlwave-shell-ready nil))))))) 1135 (when (equal preempt 'wait) ; Get all the output at once
1136 (setq idlwave-shell-wait-for-output t)
1137 (accept-process-output proc))))
1138 (goto-char save-point))
1139 (set-buffer save-buffer))))
1095 1140
1096(defun idlwave-shell-send-char (c &optional no-error) 1141(defun idlwave-shell-send-char (c &optional no-error)
1097 "Send one character to the shell, without a newline." 1142 "Send one character to the shell, without a newline."
@@ -1172,38 +1217,36 @@ when the IDL prompt gets displayed again after the current IDL command."
1172 (and (eq idlwave-shell-char-mode-active 'exit) 1217 (and (eq idlwave-shell-char-mode-active 'exit)
1173 (throw 'exit "Single char loop exited")))))))) 1218 (throw 'exit "Single char loop exited"))))))))
1174 1219
1175(defun idlwave-shell-up-or-history (&optional arg) 1220(defun idlwave-shell-move-or-history (up &optional arg)
1176 "When in last line of process buffer, do `comint-previous-input'. 1221 "When in last line of process buffer, do `comint-previous-input'.
1177Otherwise just do `previous-line'." 1222Otherwise just move the line. Move down unless UP is non-nil."
1223 (let* ((proc-pos (marker-position
1224 (process-mark (get-buffer-process (current-buffer)))))
1225 (arg (or arg 1))
1226 (arg (if up arg (- arg))))
1227 (if (eq t idlwave-shell-arrows-do-history) (goto-char proc-pos))
1228 (if (and idlwave-shell-arrows-do-history
1229 (>= (1+ (save-excursion (end-of-line) (point))) proc-pos))
1230 (progn
1231 (goto-char proc-pos)
1232 (and (not (eolp)) (kill-line nil))
1233 (comint-previous-input arg))
1234 (previous-line arg))))
1235
1236(defun idlwave-shell-up-or-history (&optional arg)
1237"When in last line of process buffer, move to previous input.
1238 Otherwise just go up one line."
1178 (interactive "p") 1239 (interactive "p")
1179 (if (eq t idlwave-shell-arrows-do-history) (goto-char (point-max))) 1240 (idlwave-shell-move-or-history t arg))
1180 (if (and idlwave-shell-arrows-do-history
1181 (>= (1+ (save-excursion (end-of-line) (point)))
1182 (marker-position
1183 (process-mark (get-buffer-process (current-buffer))))))
1184 (progn
1185 (and (not (eolp)) (kill-line nil))
1186 (comint-previous-input arg))
1187 (previous-line arg)))
1188 1241
1189(defun idlwave-shell-down-or-history (&optional arg) 1242(defun idlwave-shell-down-or-history (&optional arg)
1190 "When in last line of process buffer, do `comint-next-input'. 1243"When in last line of process buffer, move to next input.
1191 Otherwise just do `next-line'." 1244 Otherwise just go down one line."
1192 (interactive "p") 1245 (interactive "p")
1193 (if (eq t idlwave-shell-arrows-do-history) (goto-char (point-max))) 1246 (idlwave-shell-move-or-history nil arg))
1194 (if (and idlwave-shell-arrows-do-history
1195 (>= (1+ (save-excursion (end-of-line) (point)))
1196 (marker-position
1197 (process-mark (get-buffer-process (current-buffer))))))
1198 (progn
1199 (and (not (eolp)) (kill-line nil))
1200 (comint-next-input arg))
1201 (next-line arg)))
1202
1203;; There was a report that a newer version of comint.el changed the
1204;; name of comint-filter to comint-output-filter. Unfortunately, we
1205;; have yet to upgrade.
1206 1247
1248;; Newer versions of comint.el changed the name of comint-filter to
1249;; comint-output-filter.
1207(defun idlwave-shell-comint-filter (process string) nil) 1250(defun idlwave-shell-comint-filter (process string) nil)
1208(if (fboundp 'comint-output-filter) 1251(if (fboundp 'comint-output-filter)
1209 (fset 'idlwave-shell-comint-filter (symbol-function 'comint-output-filter)) 1252 (fset 'idlwave-shell-comint-filter (symbol-function 'comint-output-filter))
@@ -1223,7 +1266,6 @@ and then calls `idlwave-shell-send-command' for any pending commands."
1223 ;; We no longer do the cleanup here - this is done by the process sentinel 1266 ;; We no longer do the cleanup here - this is done by the process sentinel
1224 (when (eq (process-status idlwave-shell-process-name) 'run) 1267 (when (eq (process-status idlwave-shell-process-name) 'run)
1225 ;; OK, process is still running, so we can use it. 1268 ;; OK, process is still running, so we can use it.
1226 (setq idlwave-shell-wd-is-synched nil) ;; something might have changed cwd
1227 (let ((data (match-data)) p) 1269 (let ((data (match-data)) p)
1228 (unwind-protect 1270 (unwind-protect
1229 (progn 1271 (progn
@@ -1252,7 +1294,7 @@ and then calls `idlwave-shell-send-command' for any pending commands."
1252 (get-buffer-create idlwave-shell-hidden-output-buffer)) 1294 (get-buffer-create idlwave-shell-hidden-output-buffer))
1253 (goto-char (point-max)) 1295 (goto-char (point-max))
1254 (insert string)) 1296 (insert string))
1255 (idlwave-shell-comint-filter proc string)) 1297 (idlwave-shell-comint-filter proc string))
1256 ;; Watch for magic - need to accumulate the current line 1298 ;; Watch for magic - need to accumulate the current line
1257 ;; since it may not be sent all at once. 1299 ;; since it may not be sent all at once.
1258 (if (string-match "\n" string) 1300 (if (string-match "\n" string)
@@ -1266,46 +1308,44 @@ and then calls `idlwave-shell-send-command' for any pending commands."
1266 (match-end 0))))) 1308 (match-end 0)))))
1267 (setq idlwave-shell-accumulation 1309 (setq idlwave-shell-accumulation
1268 (concat idlwave-shell-accumulation string))) 1310 (concat idlwave-shell-accumulation string)))
1269 1311
1270 1312
1271;;; Test/Debug code 1313;;; Test/Debug code
1272; (save-excursion (set-buffer 1314; (save-excursion (set-buffer
1273; (get-buffer-create "*idlwave-shell-output*")) 1315; (get-buffer-create "*idlwave-shell-output*"))
1274; (goto-char (point-max)) 1316; (goto-char (point-max))
1275; (insert "\nSTRING===>\n" string "\n<====\n")) 1317; (insert "\nSTRING===>\n" string "\n<====\n"))
1276 1318
1277 ;; Check for prompt in current accumulating line 1319 ;; Check for prompt in current accumulating output
1278 (if (setq idlwave-shell-ready 1320 (if (setq idlwave-shell-ready
1279 (string-match idlwave-shell-prompt-pattern 1321 (string-match idlwave-shell-prompt-pattern
1280 idlwave-shell-accumulation)) 1322 idlwave-shell-accumulation))
1281 (progn 1323 (progn
1282 (if idlwave-shell-hide-output 1324 (if idlwave-shell-hide-output
1283 (save-excursion 1325 (save-excursion
1284 (set-buffer idlwave-shell-hidden-output-buffer) 1326 (set-buffer idlwave-shell-hidden-output-buffer)
1285; (goto-char (point-min)) 1327 (goto-char (point-max))
1286; (re-search-forward idlwave-shell-prompt-pattern nil t) 1328 (re-search-backward idlwave-shell-prompt-pattern nil t)
1287 (goto-char (point-max))
1288 (re-search-backward idlwave-shell-prompt-pattern nil t)
1289 (goto-char (match-end 0)) 1329 (goto-char (match-end 0))
1290 (setq idlwave-shell-command-output 1330 (setq idlwave-shell-command-output
1291 (buffer-substring (point-min) (point))) 1331 (buffer-substring (point-min) (point)))
1292;; Test/Debug 1332
1333;;; Test/Debug
1293; (save-excursion (set-buffer 1334; (save-excursion (set-buffer
1294; (get-buffer-create "*idlwave-shell-output*")) 1335; (get-buffer-create "*idlwave-shell-output*"))
1295; (goto-char (point-max)) 1336; (goto-char (point-max))
1296; (insert "\nOUPUT===>\n" idlwave-shell-command-output "\n<===\n")) 1337; (insert "\nOUPUT===>\n" idlwave-shell-command-output "\n<===\n"))
1297 1338
1298 (delete-region (point-min) (point))) 1339 (delete-region (point-min) (point)))
1299 (setq idlwave-shell-command-output 1340 (setq idlwave-shell-command-output
1300 (save-excursion 1341 (with-current-buffer (process-buffer proc)
1301 (set-buffer 1342 (buffer-substring
1302 (process-buffer proc)) 1343 (save-excursion
1303 (buffer-substring 1344 (goto-char (process-mark proc))
1304 (progn 1345 (beginning-of-line nil)
1305 (goto-char (process-mark proc)) 1346 (point))
1306 (beginning-of-line nil) 1347 comint-last-input-end))))
1307 (point)) 1348
1308 comint-last-input-end))))
1309 ;; Scan for state and do post command - bracket them 1349 ;; Scan for state and do post command - bracket them
1310 ;; with idlwave-shell-ready=nil since they 1350 ;; with idlwave-shell-ready=nil since they
1311 ;; may call idlwave-shell-send-command. 1351 ;; may call idlwave-shell-send-command.
@@ -1321,10 +1361,19 @@ and then calls `idlwave-shell-send-command' for any pending commands."
1321 (setq idlwave-shell-accumulation nil 1361 (setq idlwave-shell-accumulation nil
1322 idlwave-shell-command-output nil 1362 idlwave-shell-command-output nil
1323 idlwave-shell-post-command-hook nil 1363 idlwave-shell-post-command-hook nil
1324 idlwave-shell-hide-output nil)) 1364 idlwave-shell-hide-output nil
1365 idlwave-shell-wait-for-output nil))
1325 ;; Done with post command. Do pending command if 1366 ;; Done with post command. Do pending command if
1326 ;; any. 1367 ;; any.
1327 (idlwave-shell-send-command)))) 1368 (idlwave-shell-send-command))
1369 ;; We didn't get the prompt yet... maybe accept more output
1370 (when idlwave-shell-wait-for-output
1371;;; Test/Debug code
1372; (save-excursion (set-buffer
1373; (get-buffer-create "*idlwave-shell-output*"))
1374; (goto-char (point-max))
1375; (insert "\n<=== WAITING ON OUTPUT ==>\n"))
1376 (accept-process-output proc nil 100))))
1328 (store-match-data data))))) 1377 (store-match-data data)))))
1329 1378
1330(defun idlwave-shell-sentinel (process event) 1379(defun idlwave-shell-sentinel (process event)
@@ -1367,75 +1416,63 @@ messages. We ignore error messages otherwise.
1367For breakpoint messages process any attached count or command 1416For breakpoint messages process any attached count or command
1368parameters. 1417parameters.
1369Update the windows if a message is found." 1418Update the windows if a message is found."
1370 (let (update) 1419 (cond
1371 (cond 1420 ;; Make sure we have output
1372 ;; Make sure we have output 1421 ((not idlwave-shell-command-output))
1373 ((not idlwave-shell-command-output)) 1422
1374 1423 ;; First Priority: Syntax and other errors
1375 ;; Various types of HALT messages. 1424 ((or
1376 ((string-match idlwave-shell-halt-messages-re 1425 (string-match idlwave-shell-syntax-error idlwave-shell-command-output)
1377 idlwave-shell-command-output) 1426 (string-match idlwave-shell-other-error idlwave-shell-command-output))
1378 ;; Grab the file and line state info. 1427 (save-excursion
1379 (setq idlwave-shell-calling-stack-index 0) 1428 (set-buffer
1380 (setq idlwave-shell-halt-frame 1429 (get-buffer-create idlwave-shell-error-buffer))
1381 (idlwave-shell-parse-line 1430 (erase-buffer)
1382 (substring idlwave-shell-command-output (match-end 0))) 1431 (insert idlwave-shell-command-output)
1383 update t)) 1432 (goto-char (point-min))
1384 1433 (setq idlwave-shell-error-last (point)))
1385 ;; Handle breakpoints separately 1434 (idlwave-shell-goto-next-error))
1386 ((string-match idlwave-shell-break-message 1435
1387 idlwave-shell-command-output) 1436 ;; Second Priority: Various types of HALT messages.
1388 (setq idlwave-shell-calling-stack-index 0) 1437 ((string-match idlwave-shell-halt-messages-re
1389 (setq idlwave-shell-halt-frame 1438 idlwave-shell-command-output)
1390 (idlwave-shell-parse-line 1439 ;; Grab the file and line state info.
1391 (substring idlwave-shell-command-output (match-end 0))) 1440 (setq idlwave-shell-calling-stack-index 0)
1392 update t) 1441 (setq idlwave-shell-halt-frame
1393 ;; We used to to counting hits on breakpoints 1442 (idlwave-shell-parse-line
1394 ;; this is no longer supported since IDL breakpoints 1443 (substring idlwave-shell-command-output (match-end 0))))
1395 ;; have learned counting. 1444 (idlwave-shell-display-line (idlwave-shell-pc-frame)))
1396 ;; Do breakpoint command processing 1445
1397 (let ((bp (assoc 1446 ;; Last Priority: Breakpoints
1398 (list 1447 ((string-match idlwave-shell-break-message
1399 (nth 0 idlwave-shell-halt-frame) 1448 idlwave-shell-command-output)
1400 (nth 1 idlwave-shell-halt-frame)) 1449 (setq idlwave-shell-calling-stack-index 0)
1401 idlwave-shell-bp-alist))) 1450 (setq idlwave-shell-halt-frame
1402 (if bp 1451 (idlwave-shell-parse-line
1403 (let ((cmd (idlwave-shell-bp-get bp 'cmd))) 1452 (substring idlwave-shell-command-output (match-end 0))))
1404 (if cmd 1453 ;; We used to count hits on breakpoints
1405 ;; Execute command 1454 ;; this is no longer supported since IDL breakpoints
1406 (if (listp cmd) 1455 ;; have learned counting.
1407 (eval cmd) 1456 ;; Do breakpoint command processing
1408 (funcall cmd)))) 1457 (let ((bp (assoc
1409 ;; A breakpoint that we did not know about - perhaps it was 1458 (list
1410 ;; set by the user or IDL isn't reporting breakpoints like 1459 (nth 0 idlwave-shell-halt-frame)
1411 ;; we expect. Lets update our list. 1460 (nth 1 idlwave-shell-halt-frame))
1412 (idlwave-shell-bp-query))))) 1461 idlwave-shell-bp-alist)))
1413 1462 (if bp
1414 ;; Handle compilation errors in addition to the above 1463 (let ((cmd (idlwave-shell-bp-get bp 'cmd)))
1415 (if (and idlwave-shell-command-output 1464 (if cmd
1416 (or (string-match 1465 ;; Execute command
1417 idlwave-shell-syntax-error idlwave-shell-command-output) 1466 (if (listp cmd) (eval cmd) (funcall cmd))))
1418 (string-match 1467 ;; A breakpoint that we did not know about - perhaps it was
1419 idlwave-shell-other-error idlwave-shell-command-output))) 1468 ;; set by the user or IDL isn't reporting breakpoints like
1420 (progn 1469 ;; we expect. Lets update our list.
1421 (save-excursion 1470 (idlwave-shell-bp-query)))
1422 (set-buffer 1471 (idlwave-shell-display-line (idlwave-shell-pc-frame)))))
1423 (get-buffer-create idlwave-shell-error-buffer))
1424 (erase-buffer)
1425 (insert idlwave-shell-command-output)
1426 (goto-char (point-min))
1427 (setq idlwave-shell-error-last (point)))
1428 (idlwave-shell-goto-next-error)))
1429
1430 ;; Do update
1431 (when update
1432 (idlwave-shell-display-line (idlwave-shell-pc-frame)))))
1433
1434 1472
1435(defvar idlwave-shell-error-buffer " *idlwave-shell-errors*" 1473(defvar idlwave-shell-error-buffer " *idlwave-shell-errors*"
1436 "Buffer containing syntax errors from IDL compilations.") 1474 "Buffer containing syntax errors from IDL compilations.")
1437 1475
1438
1439;; FIXME: the following two variables do not currently allow line breaks 1476;; FIXME: the following two variables do not currently allow line breaks
1440;; in module and file names. I am not sure if it will be necessary to 1477;; in module and file names. I am not sure if it will be necessary to
1441;; change this. Currently it seems to work the way it is. 1478;; change this. Currently it seems to work the way it is.
@@ -1498,7 +1535,8 @@ plus garbage match an existing regular file. This is hopefully very
1498unlikely." 1535unlikely."
1499 1536
1500 (let (number procedure file) 1537 (let (number procedure file)
1501 (when (string-match idlwave-shell-file-line-message string) 1538 (when (and (not (string-match ":\\s-*\\$MAIN" string))
1539 (string-match idlwave-shell-file-line-message string))
1502 (setq procedure (match-string 1 string) 1540 (setq procedure (match-string 1 string)
1503 number (match-string 3 string) 1541 number (match-string 3 string)
1504 file (match-string 5 string)) 1542 file (match-string 5 string))
@@ -1554,7 +1592,7 @@ file name."
1554 idlwave-shell-command-line-to-execute nil 1592 idlwave-shell-command-line-to-execute nil
1555 idlwave-shell-bp-alist nil 1593 idlwave-shell-bp-alist nil
1556 idlwave-shell-calling-stack-index 0 1594 idlwave-shell-calling-stack-index 0
1557 idlwave-idlwave_routine_info-compiled nil) 1595 idlwave-idlwave_routine_info-compile nil)
1558 (idlwave-shell-delete-temp-files) 1596 (idlwave-shell-delete-temp-files)
1559 (idlwave-shell-display-line nil) 1597 (idlwave-shell-display-line nil)
1560 (idlwave-shell-update-bp-overlays) ; kill old overlays 1598 (idlwave-shell-update-bp-overlays) ; kill old overlays
@@ -1585,27 +1623,28 @@ The size is given by `idlwave-shell-graphics-window-size'."
1585 (let ((n (if n (prefix-numeric-value n) 0))) 1623 (let ((n (if n (prefix-numeric-value n) 0)))
1586 (idlwave-shell-send-command 1624 (idlwave-shell-send-command
1587 (apply 'format "window,%d,xs=%d,ys=%d" 1625 (apply 'format "window,%d,xs=%d,ys=%d"
1588 n idlwave-shell-graphics-window-size)))) 1626 n idlwave-shell-graphics-window-size)
1627 nil (idlwave-shell-hide-p 'misc))))
1589 1628
1590(defun idlwave-shell-resync-dirs () 1629(defun idlwave-shell-resync-dirs ()
1591 "Resync the buffer's idea of the current directory stack. 1630 "Resync the buffer's idea of the current directory.
1592This command queries IDL with the command bound to 1631This command queries IDL with the command bound to
1593`idlwave-shell-dirstack-query' (default \"printd\"), reads the 1632`idlwave-shell-dirstack-query', reads the output for the new
1594output for the new directory stack." 1633directory."
1595 (interactive) 1634 (interactive)
1596 (idlwave-shell-send-command idlwave-shell-dirstack-query 1635 (idlwave-shell-send-command idlwave-shell-dirstack-query
1597 'idlwave-shell-filter-directory 1636 'idlwave-shell-filter-directory
1598 'hide)) 1637 'hide 'wait))
1599 1638
1600(defun idlwave-shell-retall (&optional arg) 1639(defun idlwave-shell-retall (&optional arg)
1601 "Return from the entire calling stack." 1640 "Return from the entire calling stack."
1602 (interactive "P") 1641 (interactive "P")
1603 (idlwave-shell-send-command "retall")) 1642 (idlwave-shell-send-command "retall" nil (idlwave-shell-hide-p 'misc)))
1604 1643
1605(defun idlwave-shell-closeall (&optional arg) 1644(defun idlwave-shell-closeall (&optional arg)
1606 "Close all open files." 1645 "Close all open files."
1607 (interactive "P") 1646 (interactive "P")
1608 (idlwave-shell-send-command "close,/all")) 1647 (idlwave-shell-send-command "close,/all" nil (idlwave-shell-hide-p 'misc)))
1609 1648
1610(defun idlwave-shell-quit (&optional arg) 1649(defun idlwave-shell-quit (&optional arg)
1611 "Exit the idl process after confirmation. 1650 "Exit the idl process after confirmation.
@@ -1619,7 +1658,7 @@ With prefix ARG, exit without confirmation."
1619 (error nil))))) 1658 (error nil)))))
1620 1659
1621(defun idlwave-shell-reset (&optional hidden) 1660(defun idlwave-shell-reset (&optional hidden)
1622 "Reset IDL. Return to main level and destroy the leaftover variables. 1661 "Reset IDL. Return to main level and destroy the leftover variables.
1623This issues the following commands: 1662This issues the following commands:
1624RETALL 1663RETALL
1625WIDGET_CONTROL,/RESET 1664WIDGET_CONTROL,/RESET
@@ -1752,20 +1791,62 @@ HEAP_GC, /VERBOSE"
1752Change the default directory for the process buffer to concur." 1791Change the default directory for the process buffer to concur."
1753 (save-excursion 1792 (save-excursion
1754 (set-buffer (idlwave-shell-buffer)) 1793 (set-buffer (idlwave-shell-buffer))
1755 (if (string-match "Current Directory: *\\(\\S-*\\) *$" 1794 (if (string-match ",___cur[\n\r]\\(\\S-*\\) *[\n\r]"
1756 idlwave-shell-command-output) 1795 idlwave-shell-command-output)
1757 (let ((dir (substring idlwave-shell-command-output 1796 (let ((dir (substring idlwave-shell-command-output
1758 (match-beginning 1) (match-end 1)))) 1797 (match-beginning 1) (match-end 1))))
1759 (message "Setting Emacs wd to %s" dir) 1798; (message "Setting Emacs working dir to %s" dir)
1760 (setq idlwave-shell-default-directory dir) 1799 (setq idlwave-shell-default-directory dir)
1761 (setq default-directory (file-name-as-directory dir)))))) 1800 (setq default-directory (file-name-as-directory dir))))))
1762 1801
1802(defvar idlwave-shell-get-object-class nil)
1803(defun idlwave-shell-get-object-class (apos)
1804 "Query the shell for the class of the object before point."
1805 (let ((bos (save-excursion (idlwave-start-of-substatement 'pre) (point)))
1806 (bol (save-excursion (forward-line 0) (point)))
1807 expression)
1808 (save-excursion
1809 (goto-char apos)
1810 (setq expression (buffer-substring
1811 (catch 'exit
1812 (while t
1813 (if (not (re-search-backward
1814 "[^][.A-Za-z0-9_() ]" bos t))
1815 (throw 'exit bos)) ;ran into bos
1816 (if (not (idlwave-is-pointer-dereference bol))
1817 (throw 'exit (1+ (point))))))
1818 apos)))
1819 (when (not (string= expression ""))
1820 (setq idlwave-shell-get-object-class nil)
1821 (idlwave-shell-send-command
1822 (concat "print,obj_class(" expression ")")
1823 'idlwave-shell-parse-object-class
1824 'hide 'wait)
1825 ;; If we don't know anything about the class, update shell routines
1826 (if (and idlwave-shell-get-object-class
1827 (not (assoc-ignore-case idlwave-shell-get-object-class
1828 (idlwave-class-alist))))
1829 (idlwave-shell-maybe-update-routine-info))
1830 idlwave-shell-get-object-class)))
1831
1832(defun idlwave-shell-parse-object-class ()
1833 "Parse the output of the obj_class command."
1834 (let ((match "print,obj_class([^\n\r]+[\n\r ]+"))
1835 (if (and
1836 (not (string-match (concat match match "\\s-*^[\n\r]+"
1837 "% Syntax error")
1838 idlwave-shell-command-output))
1839 (string-match (concat match "\\([A-Za-z_0-9]+\\)")
1840 idlwave-shell-command-output))
1841 (setq idlwave-shell-get-object-class
1842 (match-string 1 idlwave-shell-command-output)))))
1843
1844
1763(defun idlwave-shell-complete (&optional arg) 1845(defun idlwave-shell-complete (&optional arg)
1764 "Do completion in the idlwave-shell buffer. 1846 "Do completion in the idlwave-shell buffer.
1765Calls `idlwave-shell-complete-filename' after some executive commands or 1847Calls `idlwave-shell-complete-filename' after some executive commands or
1766in strings. Otherwise, calls `idlwave-complete' to complete modules and 1848in strings. Otherwise, calls `idlwave-complete' to complete modules and
1767keywords." 1849keywords."
1768;;FIXME: batch files?
1769 (interactive "P") 1850 (interactive "P")
1770 (let (cmd) 1851 (let (cmd)
1771 (cond 1852 (cond
@@ -1776,13 +1857,17 @@ keywords."
1776 ".COM" ".COMP" ".COMPI" ".COMPIL" ".COMPILE")) 1857 ".COM" ".COMP" ".COMPI" ".COMPIL" ".COMPILE"))
1777 ;; This command expects file names 1858 ;; This command expects file names
1778 (idlwave-shell-complete-filename))) 1859 (idlwave-shell-complete-filename)))
1860
1861 ((idlwave-shell-batch-command)
1862 (idlwave-shell-complete-filename))
1863
1779 ((and (idlwave-shell-filename-string) 1864 ((and (idlwave-shell-filename-string)
1780 (save-excursion 1865 (save-excursion
1781 (beginning-of-line) 1866 (beginning-of-line)
1782 (let ((case-fold-search t)) 1867 (let ((case-fold-search t))
1783 (not (looking-at ".*obj_new")))) 1868 (not (looking-at ".*obj_new")))))
1784 ;; In a string, could be a file name to here 1869 (idlwave-shell-complete-filename))
1785 (idlwave-shell-complete-filename))) 1870
1786 (t 1871 (t
1787 ;; Default completion of modules and keywords 1872 ;; Default completion of modules and keywords
1788 (idlwave-complete arg))))) 1873 (idlwave-complete arg)))))
@@ -1790,36 +1875,17 @@ keywords."
1790(defun idlwave-shell-complete-filename (&optional arg) 1875(defun idlwave-shell-complete-filename (&optional arg)
1791 "Complete a file name at point if after a file name. 1876 "Complete a file name at point if after a file name.
1792We assume that we are after a file name when completing one of the 1877We assume that we are after a file name when completing one of the
1793args of an executive .run, .rnew or .compile. Also, in a string 1878args of an executive .run, .rnew or .compile."
1794constant we complete file names. Otherwise return nil, so that 1879 ;; CWD might have changed, resync, to set default directory
1795other completion functions can do their work." 1880 (idlwave-shell-resync-dirs)
1796 ;; Comint does something funny with the default directory, 1881 (let ((comint-file-name-chars idlwave-shell-file-name-chars))
1797 ;; so we set it here from out safe own variable 1882 (comint-dynamic-complete-as-filename)))
1798 (setq default-directory
1799 (file-name-as-directory idlwave-shell-default-directory))
1800 (if (not idlwave-shell-wd-is-synched)
1801 ;; Some IDL stuff has been executed since last update, so we need to
1802 ;; do it again.
1803 (idlwave-shell-send-command
1804 idlwave-shell-dirstack-query
1805 `(progn
1806 (idlwave-shell-filter-directory)
1807 (setq idlwave-shell-wd-is-synched t)
1808 (switch-to-buffer (idlwave-shell-buffer))
1809 (goto-char ,(point)) ;; This is necesary on Emacs, don't know why
1810 ;; after the update, we immediately redo the completion, so the
1811 ;; user will hardly notice we did the update.
1812 (idlwave-shell-complete-filename))
1813 'hide)
1814 (let* ((comint-file-name-chars idlwave-shell-file-name-chars)
1815 (completion-ignore-case (default-value 'completion-ignore-case)))
1816 (comint-dynamic-complete-filename))))
1817 1883
1818(defun idlwave-shell-executive-command () 1884(defun idlwave-shell-executive-command ()
1819 "Return the name of the current executive command, if any." 1885 "Return the name of the current executive command, if any."
1820 (save-excursion 1886 (save-excursion
1821 (idlwave-beginning-of-statement) 1887 (idlwave-beginning-of-statement)
1822 (if (looking-at "[ \t]*\\([.][^ \t\n\r]*\\)") 1888 (if (looking-at "[ \t]*\\([.][^ \t\n\r]+\\)")
1823 (match-string 1)))) 1889 (match-string 1))))
1824 1890
1825(defun idlwave-shell-filename-string () 1891(defun idlwave-shell-filename-string ()
@@ -1831,6 +1897,15 @@ other completion functions can do their work."
1831 ;; Check of the next char is a string delimiter 1897 ;; Check of the next char is a string delimiter
1832 (memq (preceding-char) '(?\' ?\"))))) 1898 (memq (preceding-char) '(?\' ?\")))))
1833 1899
1900(defun idlwave-shell-batch-command ()
1901 "Returns t if we're in a batch command statement like @foo"
1902 (let ((limit (save-excursion (beginning-of-line) (point))))
1903 (save-excursion
1904 ;; Skip backwards over filename
1905 (skip-chars-backward idlwave-shell-file-name-chars limit)
1906 (skip-chars-backward " \t" limit)
1907 (and (eq (preceding-char) ?@) (not (idlwave-in-quote))))))
1908
1834;;; 1909;;;
1835;;; This section contains code for debugging IDL programs. -------------------- 1910;;; This section contains code for debugging IDL programs. --------------------
1836;;; 1911;;;
@@ -2008,7 +2083,8 @@ If FRAME is nil then remove overlay."
2008 (or (not arg) (< arg 1) 2083 (or (not arg) (< arg 1)
2009 (setq arg 1)) 2084 (setq arg 1))
2010 (idlwave-shell-send-command 2085 (idlwave-shell-send-command
2011 (concat ".s " (if (integerp arg) (int-to-string arg) arg)))) 2086 (concat ".s " (if (integerp arg) (int-to-string arg) arg))
2087 nil (idlwave-shell-hide-p 'debug)))
2012 2088
2013(defun idlwave-shell-stepover (arg) 2089(defun idlwave-shell-stepover (arg)
2014 "Stepover one source line. 2090 "Stepover one source line.
@@ -2018,9 +2094,10 @@ Uses IDL's stepover executive command which does not enter called functions."
2018 (or (not arg) (< arg 1) 2094 (or (not arg) (< arg 1)
2019 (setq arg 1)) 2095 (setq arg 1))
2020 (idlwave-shell-send-command 2096 (idlwave-shell-send-command
2021 (concat ".so " (if (integerp arg) (int-to-string arg) arg)))) 2097 (concat ".so " (if (integerp arg) (int-to-string arg) arg))
2098 nil (idlwave-shell-hide-p 'debug)))
2022 2099
2023(defun idlwave-shell-break-here (&optional count cmd) 2100(defun idlwave-shell-break-here (&optional count cmd condition)
2024 "Set breakpoint at current line. 2101 "Set breakpoint at current line.
2025 2102
2026If Count is nil then an ordinary breakpoint is set. We treat a count 2103If Count is nil then an ordinary breakpoint is set. We treat a count
@@ -2032,12 +2109,14 @@ Optional argument CMD is a list or function to evaluate upon reaching
2032the breakpoint." 2109the breakpoint."
2033 2110
2034 (interactive "P") 2111 (interactive "P")
2035 (if (listp count) 2112 (when (listp count)
2036 (setq count nil)) 2113 (if (equal (car count) 4)
2114 (setq condition (read-string "Break Condition: ")))
2115 (setq count nil))
2037 (idlwave-shell-set-bp 2116 (idlwave-shell-set-bp
2038 ;; Create breakpoint 2117 ;; Create breakpoint
2039 (idlwave-shell-bp (idlwave-shell-current-frame) 2118 (idlwave-shell-bp (idlwave-shell-current-frame)
2040 (list count cmd) 2119 (list count cmd condition)
2041 (idlwave-shell-current-module)))) 2120 (idlwave-shell-current-module))))
2042 2121
2043(defun idlwave-shell-set-bp-check (bp) 2122(defun idlwave-shell-set-bp-check (bp)
@@ -2061,7 +2140,8 @@ the problem with not being able to set the breakpoint."
2061 ;; Clean up before retrying 2140 ;; Clean up before retrying
2062 (idlwave-shell-command-failure) 2141 (idlwave-shell-command-failure)
2063 (idlwave-shell-send-command 2142 (idlwave-shell-send-command
2064 (concat ".run " (idlwave-shell-bp-get bp 'file)) nil nil) 2143 (concat ".run " (idlwave-shell-bp-get bp 'file)) nil
2144 (idlwave-shell-hide-p 'run))
2065 ;; Try setting breakpoint again 2145 ;; Try setting breakpoint again
2066 (idlwave-shell-set-bp bp)) 2146 (idlwave-shell-set-bp bp))
2067 (beep) 2147 (beep)
@@ -2084,22 +2164,26 @@ breakpoint can not be set."
2084(defun idlwave-shell-cont () 2164(defun idlwave-shell-cont ()
2085 "Continue executing." 2165 "Continue executing."
2086 (interactive) 2166 (interactive)
2087 (idlwave-shell-send-command ".c" '(idlwave-shell-redisplay 'hide))) 2167 (idlwave-shell-send-command ".c" '(idlwave-shell-redisplay 'hide)
2168 (idlwave-shell-hide-p 'debug)))
2088 2169
2089(defun idlwave-shell-go () 2170(defun idlwave-shell-go ()
2090 "Run .GO. This starts the main program of the last compiled file." 2171 "Run .GO. This starts the main program of the last compiled file."
2091 (interactive) 2172 (interactive)
2092 (idlwave-shell-send-command ".go" '(idlwave-shell-redisplay 'hide))) 2173 (idlwave-shell-send-command ".go" '(idlwave-shell-redisplay 'hide)
2174 (idlwave-shell-hide-p 'debug)))
2093 2175
2094(defun idlwave-shell-return () 2176(defun idlwave-shell-return ()
2095 "Run .RETURN (continue to next return, but stay in subprogram)." 2177 "Run .RETURN (continue to next return, but stay in subprogram)."
2096 (interactive) 2178 (interactive)
2097 (idlwave-shell-send-command ".return" '(idlwave-shell-redisplay 'hide))) 2179 (idlwave-shell-send-command ".return" '(idlwave-shell-redisplay 'hide)
2180 (idlwave-shell-hide-p 'debug)))
2098 2181
2099(defun idlwave-shell-skip () 2182(defun idlwave-shell-skip ()
2100 "Run .SKIP (skip one line, then step)." 2183 "Run .SKIP (skip one line, then step)."
2101 (interactive) 2184 (interactive)
2102 (idlwave-shell-send-command ".skip" '(idlwave-shell-redisplay 'hide))) 2185 (idlwave-shell-send-command ".skip" '(idlwave-shell-redisplay 'hide)
2186 (idlwave-shell-hide-p 'debug)))
2103 2187
2104(defun idlwave-shell-clear-bp (bp) 2188(defun idlwave-shell-clear-bp (bp)
2105 "Clear breakpoint BP. 2189 "Clear breakpoint BP.
@@ -2109,7 +2193,8 @@ Clears in IDL and in `idlwave-shell-bp-alist'."
2109 (progn 2193 (progn
2110 (idlwave-shell-send-command 2194 (idlwave-shell-send-command
2111 (concat "breakpoint,/clear," 2195 (concat "breakpoint,/clear,"
2112 (if (integerp index) (int-to-string index) index))) 2196 (if (integerp index) (int-to-string index) index))
2197 nil (idlwave-shell-hide-p 'breakpoint))
2113 (idlwave-shell-bp-query))))) 2198 (idlwave-shell-bp-query)))))
2114 2199
2115(defun idlwave-shell-current-frame () 2200(defun idlwave-shell-current-frame ()
@@ -2155,11 +2240,25 @@ at a breakpoint."
2155 (beep) 2240 (beep)
2156 (message "Cannot identify breakpoint for this line")))))) 2241 (message "Cannot identify breakpoint for this line"))))))
2157 2242
2243(defun idlwave-shell-disable-all-bp (&optional enable)
2244 "Disable all breakpoints we know about.
2245If ENABLE is non-nil, enable them instead."
2246 (let ((bpl idlwave-shell-bp-alist))
2247 (while bpl
2248 (idlwave-shell-send-command
2249 (concat "breakpoint,"
2250 (if enable "/enable," "/disable," )
2251 (idlwave-shell-bp-get (car bpl)))
2252 nil (idlwave-shell-hide-p 'breakpoint))
2253 (setq bpl (cdr bpl)))))
2254
2158(defun idlwave-shell-to-here () 2255(defun idlwave-shell-to-here ()
2159 "Set a breakpoint with count 1 then continue." 2256 "Set a breakpoint with count 1 then continue."
2160 (interactive) 2257 (interactive)
2258 (idlwave-shell-disable-all-bp)
2161 (idlwave-shell-break-here 1) 2259 (idlwave-shell-break-here 1)
2162 (idlwave-shell-cont)) 2260 (idlwave-shell-cont)
2261 (idlwave-shell-disable-all-bp 'enable))
2163 2262
2164(defun idlwave-shell-break-in (&optional module) 2263(defun idlwave-shell-break-in (&optional module)
2165 "Look for a module name near point and set a break point for it. 2264 "Look for a module name near point and set a break point for it.
@@ -2244,7 +2343,7 @@ Sets a breakpoint with count 1 at end of block, then continues."
2244 "Attempt to run until this procedure exits. 2343 "Attempt to run until this procedure exits.
2245Runs to the last statement and then steps 1 statement. Use the .out command." 2344Runs to the last statement and then steps 1 statement. Use the .out command."
2246 (interactive) 2345 (interactive)
2247 (idlwave-shell-send-command (concat ".o"))) 2346 (idlwave-shell-send-command ".o" nil (idlwave-shell-hide-p 'debug)))
2248 2347
2249(defun idlwave-shell-help-expression (arg) 2348(defun idlwave-shell-help-expression (arg)
2250 "Print help on current expression. See `idlwave-shell-print'." 2349 "Print help on current expression. See `idlwave-shell-print'."
@@ -2336,7 +2435,7 @@ idlw-shell-examine-alist from which to select the help command text."
2336 (arg 2435 (arg
2337 (setq expr (read-string "Expression: "))) 2436 (setq expr (read-string "Expression: ")))
2338 (t 2437 (t
2339 (idlwave-with-special-syntax1 2438 (idlwave-with-special-syntax
2340 ;; Move to beginning of current or previous expression 2439 ;; Move to beginning of current or previous expression
2341 (if (looking-at "\\<\\|(") 2440 (if (looking-at "\\<\\|(")
2342 ;; At beginning of expression, don't move backwards unless 2441 ;; At beginning of expression, don't move backwards unless
@@ -2683,7 +2782,8 @@ If there is a prefix argument, display IDL process."
2683 (idlwave-look-at "\\<end\\>"))) 2782 (idlwave-look-at "\\<end\\>")))
2684 (insert "\nend\n")) 2783 (insert "\nend\n"))
2685 (save-buffer 0))) 2784 (save-buffer 0)))
2686 (idlwave-shell-send-command (concat ".run " idlwave-shell-temp-pro-file)) 2785 (idlwave-shell-send-command (concat ".run " idlwave-shell-temp-pro-file)
2786 nil (idlwave-shell-hide-p 'run))
2687 (if n 2787 (if n
2688 (idlwave-display-buffer (idlwave-shell-buffer) 2788 (idlwave-display-buffer (idlwave-shell-buffer)
2689 nil (idlwave-shell-shell-frame)))) 2789 nil (idlwave-shell-shell-frame))))
@@ -2715,8 +2815,27 @@ Does not work for a region with multiline blocks - use
2715 (error nil)))) 2815 (error nil))))
2716 2816
2717(defun idlwave-display-buffer (buf not-this-window-p &optional frame) 2817(defun idlwave-display-buffer (buf not-this-window-p &optional frame)
2718 (if (not (frame-live-p frame)) (setq frame nil)) 2818 (if (featurep 'xemacs)
2719 (display-buffer buf not-this-window-p frame)) 2819 ;; The XEmacs version enforces the frame
2820 (display-buffer buf not-this-window-p frame)
2821 ;; For Emacs, we need to force the frame ourselves.
2822 (let ((this-frame (selected-frame)))
2823 (if (frame-live-p frame)
2824 (select-frame frame))
2825 (if (eq this-frame (selected-frame))
2826 ;; same frame: use display buffer, to make sure the current
2827 ;; window stays.
2828 (display-buffer buf)
2829 ;; different frame
2830 (if (one-window-p)
2831 ;; only window: switch
2832 (progn
2833 (switch-to-buffer buf)
2834 (selected-window)) ; must return the window.
2835 ;; several windows - use display-buffer
2836 (display-buffer buf not-this-window-p))))))
2837; (if (not (frame-live-p frame)) (setq frame nil))
2838; (display-buffer buf not-this-window-p frame))
2720 2839
2721(defvar idlwave-shell-bp-buffer " *idlwave-shell-bp*" 2840(defvar idlwave-shell-bp-buffer " *idlwave-shell-bp*"
2722 "Scratch buffer for parsing IDL breakpoint lists and other stuff.") 2841 "Scratch buffer for parsing IDL breakpoint lists and other stuff.")
@@ -2744,6 +2863,7 @@ Defaults to 'index."
2744 ((eq item 'data) (cdr (cdr bp))) 2863 ((eq item 'data) (cdr (cdr bp)))
2745 ((eq item 'count) (nth 0 (cdr (cdr bp)))) 2864 ((eq item 'count) (nth 0 (cdr (cdr bp))))
2746 ((eq item 'cmd) (nth 1 (cdr (cdr bp)))) 2865 ((eq item 'cmd) (nth 1 (cdr (cdr bp))))
2866 ((eq item 'condition) (nth 2 (cdr (cdr bp))))
2747 ;; IDL breakpoint info 2867 ;; IDL breakpoint info
2748 ((eq item 'module) (nth 1 (car (cdr bp)))) 2868 ((eq item 'module) (nth 1 (car (cdr bp))))
2749 ;; index - default 2869 ;; index - default
@@ -2762,7 +2882,7 @@ from previous breakpoint list."
2762 ;; Searching the breakpoints 2882 ;; Searching the breakpoints
2763 ;; In IDL 5.5, the breakpoint reporting format changed. 2883 ;; In IDL 5.5, the breakpoint reporting format changed.
2764 (bp-re54 "^[ \t]*\\([0-9]+\\)[ \t]+\\(\\S-+\\)?[ \t]+\\([0-9]+\\)[ \t]+\\(\\S-+\\)") 2884 (bp-re54 "^[ \t]*\\([0-9]+\\)[ \t]+\\(\\S-+\\)?[ \t]+\\([0-9]+\\)[ \t]+\\(\\S-+\\)")
2765 (bp-re55 "^\\s-*\\([0-9]+\\)\\s-+\\([0-9]+\\)\\s-+\\(Uncompiled\\|Func=\\|Pro=\\)\\(\\S-+\\)?\\s-+\\(\\S-+\\)") 2885 (bp-re55 "^\\s-*\\([0-9]+\\)\\s-+\\([0-9]+\\)\\s-+\\(Uncompiled\\|Func=\\|Pro=\\)\\([a-zA-Z][a-zA-Z0-9$_:]*\\)\\(,[^\n]*\n\\)?\\s-+\\(\\S-+\\)")
2766 file line index module 2886 file line index module
2767 bp-re indmap) 2887 bp-re indmap)
2768 (setq idlwave-shell-bp-alist (list nil)) 2888 (setq idlwave-shell-bp-alist (list nil))
@@ -2774,7 +2894,7 @@ from previous breakpoint list."
2774 (if (re-search-forward 2894 (if (re-search-forward
2775 "^\\s-*Index\\s-*Line\\s-*Attributes\\s-*File" nil t) 2895 "^\\s-*Index\\s-*Line\\s-*Attributes\\s-*File" nil t)
2776 (setq bp-re bp-re55 ; versions >= 5.5 2896 (setq bp-re bp-re55 ; versions >= 5.5
2777 indmap '(1 4 2 5)))) 2897 indmap '(1 4 2 6))))
2778 ;; There seems to be a breakpoint listing here. 2898 ;; There seems to be a breakpoint listing here.
2779 ;; Parse breakpoint lines. 2899 ;; Parse breakpoint lines.
2780 ;; Breakpoints have the form 2900 ;; Breakpoints have the form
@@ -2844,8 +2964,8 @@ Otherwise return the filename in bp."
2844The breakpoint will be placed at the beginning of the statement on the 2964The breakpoint will be placed at the beginning of the statement on the
2845line specified by BP or at the next IDL statement if that line is not 2965line specified by BP or at the next IDL statement if that line is not
2846a statement. 2966a statement.
2847Determines IDL's internal representation for the breakpoint, which may 2967Determines IDL's internal representation for the breakpoint which may
2848have occurred at a different line than used with the breakpoint 2968have occured at a different line then used with the breakpoint
2849command." 2969command."
2850 2970
2851 ;; Get and save the old breakpoints 2971 ;; Get and save the old breakpoints
@@ -2878,6 +2998,9 @@ only after reaching the statement count times."
2878 ",/once") 2998 ",/once")
2879 ((> arg 1) 2999 ((> arg 1)
2880 (format ",after=%d" arg)))) 3000 (format ",after=%d" arg))))
3001 (condition (idlwave-shell-bp-get bp 'condition))
3002 (key (concat key
3003 (if condition (concat ",CONDITION=\"" condition "\""))))
2881 (line (idlwave-shell-bp-get bp 'line))) 3004 (line (idlwave-shell-bp-get bp 'line)))
2882 (idlwave-shell-send-command 3005 (idlwave-shell-send-command
2883 (concat "breakpoint,'" 3006 (concat "breakpoint,'"
@@ -2888,8 +3011,8 @@ only after reaching the statement count times."
2888 `(progn 3011 `(progn
2889 (if (idlwave-shell-set-bp-check (quote ,bp)) 3012 (if (idlwave-shell-set-bp-check (quote ,bp))
2890 (idlwave-shell-set-bp3 (quote ,bp)))) 3013 (idlwave-shell-set-bp3 (quote ,bp))))
2891 ;; do not hide output 3014 ;; hide output?
2892 nil 3015 (idlwave-shell-hide-p 'breakpoint)
2893 'preempt))) 3016 'preempt)))
2894 3017
2895(defun idlwave-shell-set-bp3 (bp) 3018(defun idlwave-shell-set-bp3 (bp)
@@ -3075,21 +3198,21 @@ handled by this command."
3075 (t (error "Unknown action %s" action))) 3198 (t (error "Unknown action %s" action)))
3076 idlwave-shell-last-save-and-action-file) 3199 idlwave-shell-last-save-and-action-file)
3077 'idlwave-shell-maybe-update-routine-info 3200 'idlwave-shell-maybe-update-routine-info
3078 nil) 3201 (idlwave-shell-hide-p 'run))
3079 (idlwave-shell-bp-query)) 3202 (idlwave-shell-bp-query))
3080 (let ((msg (format "No such file %s" 3203 (let ((msg (format "No such file %s"
3081 idlwave-shell-last-save-and-action-file))) 3204 idlwave-shell-last-save-and-action-file)))
3082 (setq idlwave-shell-last-save-and-action-file nil) 3205 (setq idlwave-shell-last-save-and-action-file nil)
3083 (error msg)))) 3206 (error msg))))
3084 3207
3085(defun idlwave-shell-maybe-update-routine-info () 3208(defun idlwave-shell-maybe-update-routine-info (&optional wait)
3086 "Update the routine info if the shell is not stopped at an error." 3209 "Update the routine info if the shell is not stopped at an error."
3087 (if (and (not idlwave-shell-is-stopped) 3210 (if (and (not idlwave-shell-is-stopped)
3088 (or (eq t idlwave-auto-routine-info-updates) 3211 (or (eq t idlwave-auto-routine-info-updates)
3089 (memq 'compile-buffer idlwave-auto-routine-info-updates)) 3212 (memq 'compile-buffer idlwave-auto-routine-info-updates))
3090 idlwave-query-shell-for-routine-info 3213 idlwave-query-shell-for-routine-info
3091 idlwave-routines) 3214 idlwave-routines)
3092 (idlwave-shell-update-routine-info t))) 3215 (idlwave-shell-update-routine-info t nil 'wait)))
3093 3216
3094(defvar idlwave-shell-sources-query "help,/source,/full" 3217(defvar idlwave-shell-sources-query "help,/source,/full"
3095 "IDL command to obtain source files for compiled procedures.") 3218 "IDL command to obtain source files for compiled procedures.")
@@ -3161,7 +3284,6 @@ list elements of the form:
3161 )))) 3284 ))))
3162 (cdr al)))) 3285 (cdr al))))
3163 3286
3164
3165(defun idlwave-shell-clear-all-bp () 3287(defun idlwave-shell-clear-all-bp ()
3166 "Remove all breakpoints in IDL." 3288 "Remove all breakpoints in IDL."
3167 (interactive) 3289 (interactive)
@@ -3235,7 +3357,9 @@ Otherwise, just expand the file name."
3235(define-key idlwave-shell-mode-map "\M-\t" 'idlwave-shell-complete) 3357(define-key idlwave-shell-mode-map "\M-\t" 'idlwave-shell-complete)
3236(define-key idlwave-shell-mode-map "\C-c\C-s" 'idlwave-shell) 3358(define-key idlwave-shell-mode-map "\C-c\C-s" 'idlwave-shell)
3237(define-key idlwave-shell-mode-map "\C-c?" 'idlwave-routine-info) 3359(define-key idlwave-shell-mode-map "\C-c?" 'idlwave-routine-info)
3360(define-key idlwave-shell-mode-map "\C-g" 'idlwave-keyboard-quit)
3238(define-key idlwave-shell-mode-map "\M-?" 'idlwave-context-help) 3361(define-key idlwave-shell-mode-map "\M-?" 'idlwave-context-help)
3362(define-key idlwave-shell-mode-map [(control meta ?\?)] 'idlwave-online-help)
3239(define-key idlwave-shell-mode-map "\C-c\C-i" 'idlwave-update-routine-info) 3363(define-key idlwave-shell-mode-map "\C-c\C-i" 'idlwave-update-routine-info)
3240(define-key idlwave-shell-mode-map "\C-c\C-y" 'idlwave-shell-char-mode-loop) 3364(define-key idlwave-shell-mode-map "\C-c\C-y" 'idlwave-shell-char-mode-loop)
3241(define-key idlwave-shell-mode-map "\C-c\C-x" 'idlwave-shell-send-char) 3365(define-key idlwave-shell-mode-map "\C-c\C-x" 'idlwave-shell-send-char)
@@ -3526,5 +3650,4 @@ static char * file[] = {
3526 3650
3527(if idlwave-shell-use-toolbar 3651(if idlwave-shell-use-toolbar
3528 (add-hook 'idlwave-shell-mode-hook 'idlwave-toolbar-add-everywhere)) 3652 (add-hook 'idlwave-shell-mode-hook 'idlwave-toolbar-add-everywhere))
3529
3530;;; idlw-shell.el ends here 3653;;; idlw-shell.el ends here
diff --git a/lisp/progmodes/idlw-toolbar.el b/lisp/progmodes/idlw-toolbar.el
index 0ad1a3b24ce..651d1bafd2a 100644
--- a/lisp/progmodes/idlw-toolbar.el
+++ b/lisp/progmodes/idlw-toolbar.el
@@ -3,7 +3,7 @@
3 3
4;; Author: Carsten Dominik <dominik@astro.uva.nl> 4;; Author: Carsten Dominik <dominik@astro.uva.nl>
5;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> 5;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu>
6;; Version: 4.14 6;; Version: 4.15
7;; Date: $Date: 2002/06/14 19:06:16 $ 7;; Date: $Date: 2002/06/14 19:06:16 $
8;; Keywords: processes 8;; Keywords: processes
9 9
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index 7cefcf19508..b9fcd83cb4f 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -1,11 +1,11 @@
1;;; idlwave.el --- IDL and WAVE CL editing mode for GNU Emacs 1;;; idlwave.el --- IDL editing mode for GNU Emacs
2;; Copyright (c) 1999, 2000, 2001,2002 Free Software Foundation 2;; Copyright (c) 1999, 2000, 2001,2002 Free Software Foundation
3 3
4;; Author: Carsten Dominik <dominik@astro.uva.nl> 4;; Author: Carsten Dominik <dominik@astro.uva.nl>
5;; Chris Chase <chase@att.com> 5;; Chris Chase <chase@att.com>
6;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> 6;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu>
7;; Version: 4.14 7;; Version: 4.15
8;; Date: $Date: 2002/08/30 11:02:31 $ 8;; Date: $Date: 2002/09/12 16:31:50 $
9;; Keywords: languages 9;; Keywords: languages
10 10
11;; This file is part of GNU Emacs. 11;; This file is part of GNU Emacs.
@@ -57,7 +57,7 @@
57;; SOURCE 57;; SOURCE
58;; ====== 58;; ======
59;; 59;;
60;; The newest version of this file is available from the maintainers 60;; The newest version of this file is available from the maintainer's
61;; Webpage. 61;; Webpage.
62;; 62;;
63;; http://idlwave.org 63;; http://idlwave.org
@@ -84,26 +84,33 @@
84;; Simon Marshall <Simon.Marshall@esrin.esa.it> 84;; Simon Marshall <Simon.Marshall@esrin.esa.it>
85;; Laurent Mugnier <mugnier@onera.fr> 85;; Laurent Mugnier <mugnier@onera.fr>
86;; Lubos Pochman <lubos@rsinc.com> 86;; Lubos Pochman <lubos@rsinc.com>
87;; Bob Portmann <portmann@al.noaa.gov>
87;; Patrick M. Ryan <pat@jaameri.gsfc.nasa.gov> 88;; Patrick M. Ryan <pat@jaameri.gsfc.nasa.gov>
88;; Marty Ryba <ryba@ll.mit.edu> 89;; Marty Ryba <ryba@ll.mit.edu>
89;; Phil Williams <williams@irc.chmcc.org> 90;; Phil Williams <williams@irc.chmcc.org>
90;; J.D. Smith <jdsmith@astrosun.tn.cornell.edu>
91;; Phil Sterne <sterne@dublin.llnl.gov> 91;; Phil Sterne <sterne@dublin.llnl.gov>
92;; 92;;
93;; CUSTOMIZATION: 93;; CUSTOMIZATION:
94;; ============= 94;; =============
95;; 95;;
96;; IDLWAVE has customize support - so if you want to learn about the 96;; IDLWAVE has extensive customize support - so if you want to learn
97;; variables which control the behavior of the mode, use 97;; about the variables which control the behavior of the mode, use
98;; `M-x idlwave-customize'. 98;; `M-x idlwave-customize'.
99;; 99;;
100;; You can set your own preferred values with Customize, or with Lisp 100;; You can set your own preferred values with Customize, or with Lisp
101;; code in .emacs. For an example of what to put into .emacs, check 101;; code in .emacs. For an example of what to put into .emacs, check
102;; the TexInfo documentation. 102;; the TexInfo documentation or see a complete .emacs at
103;; http://idlwave.org.
103;; 104;;
104;; KNOWN PROBLEMS: 105;; KNOWN PROBLEMS:
105;; ============== 106;; ==============
106;; 107;;
108;; IDLWAVE support for the IDL-derived PV-WAVE CL language of Visual
109;; Numerics, Inc. is growing less and less complete as the two
110;; languages grow increasingly apart. The mode probably shouldn't
111;; even have "WAVE" in it's title, but it's catchy, and required to
112;; avoid conflict with the CORBA idl.el mode. Caveat WAVEor.
113;;
107;; Moving the point backwards in conjunction with abbrev expansion 114;; Moving the point backwards in conjunction with abbrev expansion
108;; does not work as I would like it, but this is a problem with 115;; does not work as I would like it, but this is a problem with
109;; emacs abbrev expansion done by the self-insert-command. It ends 116;; emacs abbrev expansion done by the self-insert-command. It ends
@@ -120,15 +127,15 @@
120;; limited to comments only and occurs only when a comment 127;; limited to comments only and occurs only when a comment
121;; paragraph is filled via `idlwave-fill-paragraph'. 128;; paragraph is filled via `idlwave-fill-paragraph'.
122;; 129;;
123;; "&" is ignored when parsing statements.
124;; Avoid muti-statement lines (using "&") on block begin and end 130;; Avoid muti-statement lines (using "&") on block begin and end
125;; lines. Multi-statement lines can mess up the formatting, for 131;; lines. Multi-statement lines can mess up the formatting, for
126;; example, multiple end statements on a line: endif & endif. 132;; example, multiple end statements on a line: endif & endif.
127;; Using "&" outside of block begin/end lines should be okay. 133;; Using "&" outside of block begin/end lines should be okay.
128;; 134;;
129;; It is possible that the parser which decides what to complete has 135;; Determining the expression at point for printing and other
130;; problems with pointer dereferencing statements. I don't use 136;; examination commands is somewhat rough: currently only fairly
131;; pointers often enough to find out - please report any problems. 137;; simple entities are found. You can always drag-select or examine
138;; a region.
132;; 139;;
133;; When forcing completion of method keywords, the initial 140;; When forcing completion of method keywords, the initial
134;; query for a method has multiple entries for some methods. Would 141;; query for a method has multiple entries for some methods. Would
@@ -653,17 +660,18 @@ class info listed. See `idlwave-completion-show-classes'."
653When IDLWAVE tries to complete object-oriented methods, it usually 660When IDLWAVE tries to complete object-oriented methods, it usually
654cannot determine the class of a given object from context. In order 661cannot determine the class of a given object from context. In order
655to provide the user with a correct list of methods or keywords, it 662to provide the user with a correct list of methods or keywords, it
656needs have to determine the appropriate class. IDLWAVE has two ways 663needs to determine the appropriate class. IDLWAVE has two ways of
657to deal with this problem. 664doing this (well, three ways if you count the shell... see
658 665`idlwave-shell-query-for-class'):
6591. One possibility is to combine the items of all available classes 666
660 which contain this method for the purpose of completion. So when 6671. Combine the items of all available classes which contain this
661 completing a method, all methods of all known classes are 668 method for the purpose of completion. So when completing a method,
662 available, and when completing a keyword, all keywords allowed for 669 all methods of all known classes are available, and when completing
663 this method in any class are shown. This behavior is very much 670 a keyword, all keywords allowed for this method in any class are
664 like normal completion and is therefore the default. It works much 671 shown. This behavior is very much like normal completion and is
665 better than one might think - only for the INIT, GETPROPERTY and 672 therefore the default. It works much better than one might think -
666 SETPROPERTY the keyword lists become uncomfortably long. See also 673 only for the INIT, GETPROPERTY and SETPROPERTY the keyword lists
674 become uncomfortably long. See also
667 `idlwave-completion-show-classes'. 675 `idlwave-completion-show-classes'.
668 676
6692. The second possibility is to ask the user on each occasion. To 6772. The second possibility is to ask the user on each occasion. To
@@ -1156,38 +1164,39 @@ As a user, you should not set this to t.")
1156(defconst idlwave-font-lock-keywords-3 nil 1164(defconst idlwave-font-lock-keywords-3 nil
1157 "Gaudy level highlighting for IDLWAVE mode.") 1165 "Gaudy level highlighting for IDLWAVE mode.")
1158 1166
1167;; The following are the reserved words in IDL. Maybe we should
1168;; highlight some more stuff as well?
1169;; Procedure declarations. Fontify keyword plus procedure name.
1170(defvar idlwave-idl-keywords
1171 ;; To update this regexp, update the list of keywords and
1172 ;; evaluate the form.
1173 ;; (insert
1174 ;; (prin1-to-string
1175 ;; (concat
1176 ;; "\\<\\("
1177 ;; (regexp-opt
1178 ;; '("and" "or" "xor" "not"
1179 ;; "eq" "ge" "gt" "le" "lt" "ne"
1180 ;; "for" "do" "endfor"
1181 ;; "if" "then" "endif" "else" "endelse"
1182 ;; "case" "of" "endcase"
1183 ;; "switch" "break" "continue" "endswitch"
1184 ;; "begin" "end"
1185 ;; "repeat" "until" "endrep"
1186 ;; "while" "endwhile"
1187 ;; "goto" "return"
1188 ;; "inherits" "mod"
1189 ;; "compile_opt" "forward_function"
1190 ;; "on_error" "on_ioerror")) ; on_error is not officially reserved
1191 ;; "\\)\\>")))
1192 "\\<\\(and\\|b\\(egin\\|reak\\)\\|c\\(ase\\|o\\(mpile_opt\\|ntinue\\)\\)\\|do\\|e\\(lse\\|nd\\(case\\|else\\|for\\|if\\|rep\\|switch\\|while\\)?\\|q\\)\\|for\\(ward_function\\)?\\|g\\(oto\\|[et]\\)\\|i\\(f\\|nherits\\)\\|l[et]\\|mod\\|n\\(e\\|ot\\)\\|o\\(n_\\(error\\|ioerror\\)\\|[fr]\\)\\|re\\(peat\\|turn\\)\\|switch\\|then\\|until\\|while\\|xor\\)\\>")
1193
1159(let* ((oldp (or (string-match "Lucid" emacs-version) 1194(let* ((oldp (or (string-match "Lucid" emacs-version)
1160 (not (boundp 'emacs-minor-version)) 1195 (not (boundp 'emacs-minor-version))
1161 (and (<= emacs-major-version 19) 1196 (and (<= emacs-major-version 19)
1162 (<= emacs-minor-version 29)))) 1197 (<= emacs-minor-version 29))))
1163 1198
1164 ;; The following are the reserved words in IDL. Maybe we should 1199 (idl-keywords idlwave-idl-keywords)
1165 ;; highlight some more stuff as well?
1166 (idl-keywords
1167 ;; To update this regexp, update the list of keywords and
1168 ;; evaluate the form.
1169; (insert
1170; (prin1-to-string
1171; (concat
1172; "\\<\\("
1173; (regexp-opt
1174; '("and" "or" "xor" "not"
1175; "eq" "ge" "gt" "le" "lt" "ne"
1176; "for" "do" "endfor"
1177; "if" "then" "endif" "else" "endelse"
1178; "case" "of" "endcase"
1179; "switch" "break" "continue" "endswitch"
1180; "begin" "end"
1181; "repeat" "until" "endrep"
1182; "while" "endwhile"
1183; "goto" "return"
1184; "inherits" "mod"
1185; "compile_opt" "forward_function"
1186; "on_error" "on_ioerror")) ; on_error is not officially reserved
1187; "\\)\\>")))
1188
1189 "\\<\\(and\\|b\\(egin\\|reak\\)\\|c\\(ase\\|o\\(mpile_opt\\|ntinue\\)\\)\\|do\\|e\\(lse\\|nd\\(case\\|else\\|for\\|if\\|rep\\|switch\\|while\\)?\\|q\\)\\|for\\(ward_function\\)?\\|g\\(oto\\|[et]\\)\\|i\\(f\\|nherits\\)\\|l[et]\\|mod\\|n\\(e\\|ot\\)\\|o\\(n_\\(error\\|ioerror\\)\\|[fr]\\)\\|re\\(peat\\|turn\\)\\|switch\\|then\\|until\\|while\\|xor\\)\\>")
1190
1191 ;; Procedure declarations. Fontify keyword plus procedure name. 1200 ;; Procedure declarations. Fontify keyword plus procedure name.
1192 ;; Function declarations. Fontify keyword plus function name. 1201 ;; Function declarations. Fontify keyword plus function name.
1193 (pros-and-functions 1202 (pros-and-functions
@@ -1268,7 +1277,6 @@ As a user, you should not set this to t.")
1268 ;; The following lines are just a dummy to make the compiler shut up 1277 ;; The following lines are just a dummy to make the compiler shut up
1269 ;; about variables bound but not used. 1278 ;; about variables bound but not used.
1270 (setq oldp oldp 1279 (setq oldp oldp
1271 idl-keywords idl-keywords
1272 pros-and-functions pros-and-functions 1280 pros-and-functions pros-and-functions
1273 common-blocks common-blocks 1281 common-blocks common-blocks
1274 batch-files batch-files 1282 batch-files batch-files
@@ -1294,7 +1302,7 @@ As a user, you should not set this to t.")
1294 (setq idlwave-font-lock-keywords-3 1302 (setq idlwave-font-lock-keywords-3
1295 (list pros-and-functions 1303 (list pros-and-functions
1296 batch-files 1304 batch-files
1297 idl-keywords 1305 idlwave-idl-keywords
1298 label goto 1306 label goto
1299 structtag 1307 structtag
1300 structname 1308 structname
@@ -1437,7 +1445,7 @@ Normally a space.")
1437 "Character which is inserted as a last character on previous line by 1445 "Character which is inserted as a last character on previous line by
1438 \\[idlwave-split-line] to begin a continuation line. Normally $.") 1446 \\[idlwave-split-line] to begin a continuation line. Normally $.")
1439 1447
1440(defconst idlwave-mode-version " 4.14") 1448(defconst idlwave-mode-version " 4.15")
1441 1449
1442(defmacro idlwave-keyword-abbrev (&rest args) 1450(defmacro idlwave-keyword-abbrev (&rest args)
1443 "Creates a function for abbrev hooks to call `idlwave-check-abbrev' with args." 1451 "Creates a function for abbrev hooks to call `idlwave-check-abbrev' with args."
@@ -1494,27 +1502,11 @@ Otherwise ARGS forms a list that is evaluated."
1494 1502
1495(modify-syntax-entry ?$ "w" idlwave-find-symbol-syntax-table) 1503(modify-syntax-entry ?$ "w" idlwave-find-symbol-syntax-table)
1496(modify-syntax-entry ?_ "w" idlwave-find-symbol-syntax-table) 1504(modify-syntax-entry ?_ "w" idlwave-find-symbol-syntax-table)
1497
1498(defmacro idlwave-with-special-syntax (&rest body)
1499 "Execute BODY with a different systax table."
1500 `(let ((saved-syntax (syntax-table)))
1501 (unwind-protect
1502 (progn
1503 (set-syntax-table idlwave-find-symbol-syntax-table)
1504 ,@body)
1505 (set-syntax-table saved-syntax))))
1506
1507(defvar idlwave-print-symbol-syntax-table
1508 (copy-syntax-table idlwave-mode-syntax-table)
1509 "Syntax table that treats symbol characters as word characters.")
1510
1511(modify-syntax-entry ?$ "w" idlwave-find-symbol-syntax-table)
1512(modify-syntax-entry ?_ "w" idlwave-find-symbol-syntax-table)
1513(modify-syntax-entry ?! "w" idlwave-find-symbol-syntax-table) 1505(modify-syntax-entry ?! "w" idlwave-find-symbol-syntax-table)
1514(modify-syntax-entry ?. "w" idlwave-find-symbol-syntax-table) 1506(modify-syntax-entry ?. "w" idlwave-find-symbol-syntax-table)
1515 1507
1516(defmacro idlwave-with-special-syntax1 (&rest body) 1508(defmacro idlwave-with-special-syntax (&rest body)
1517 "Execute BODY with a different systax table." 1509 "Execute BODY with a different syntax table."
1518 `(let ((saved-syntax (syntax-table))) 1510 `(let ((saved-syntax (syntax-table)))
1519 (unwind-protect 1511 (unwind-protect
1520 (progn 1512 (progn
@@ -1522,6 +1514,15 @@ Otherwise ARGS forms a list that is evaluated."
1522 ,@body) 1514 ,@body)
1523 (set-syntax-table saved-syntax)))) 1515 (set-syntax-table saved-syntax))))
1524 1516
1517;(defmacro idlwave-with-special-syntax1 (&rest body)
1518; "Execute BODY with a different syntax table."
1519; `(let ((saved-syntax (syntax-table)))
1520; (unwind-protect
1521; (progn
1522; (set-syntax-table idlwave-find-symbol-syntax-table)
1523; ,@body)
1524; (set-syntax-table saved-syntax))))
1525
1525(defun idlwave-action-and-binding (key cmd &optional select) 1526(defun idlwave-action-and-binding (key cmd &optional select)
1526 "KEY and CMD are made into a key binding and an indent action. 1527 "KEY and CMD are made into a key binding and an indent action.
1527KEY is a string - same as for the `define-key' function. CMD is a 1528KEY is a string - same as for the `define-key' function. CMD is a
@@ -1576,6 +1577,7 @@ Capitalize system variables - action only
1576;(define-key idlwave-mode-map "\C-c\C- " 'idlwave-hard-tab) 1577;(define-key idlwave-mode-map "\C-c\C- " 'idlwave-hard-tab)
1577(define-key idlwave-mode-map "'" 'idlwave-show-matching-quote) 1578(define-key idlwave-mode-map "'" 'idlwave-show-matching-quote)
1578(define-key idlwave-mode-map "\"" 'idlwave-show-matching-quote) 1579(define-key idlwave-mode-map "\"" 'idlwave-show-matching-quote)
1580(define-key idlwave-mode-map "\C-g" 'idlwave-keyboard-quit)
1579(define-key idlwave-mode-map "\C-c;" 'idlwave-toggle-comment-region) 1581(define-key idlwave-mode-map "\C-c;" 'idlwave-toggle-comment-region)
1580(define-key idlwave-mode-map "\C-\M-a" 'idlwave-beginning-of-subprogram) 1582(define-key idlwave-mode-map "\C-\M-a" 'idlwave-beginning-of-subprogram)
1581(define-key idlwave-mode-map "\C-\M-e" 'idlwave-end-of-subprogram) 1583(define-key idlwave-mode-map "\C-\M-e" 'idlwave-end-of-subprogram)
@@ -1593,7 +1595,7 @@ Capitalize system variables - action only
1593(define-key idlwave-mode-map "\C-c\C-n" 'idlwave-next-statement) 1595(define-key idlwave-mode-map "\C-c\C-n" 'idlwave-next-statement)
1594;; (define-key idlwave-mode-map "\r" 'idlwave-newline) 1596;; (define-key idlwave-mode-map "\r" 'idlwave-newline)
1595;; (define-key idlwave-mode-map "\t" 'idlwave-indent-line) 1597;; (define-key idlwave-mode-map "\t" 'idlwave-indent-line)
1596(define-key idlwave-mode-map (kbd "S-<iso-lefttab>") 'idlwave-indent-statement) 1598(define-key idlwave-mode-map [(shift tab)] 'idlwave-indent-statement)
1597(define-key idlwave-mode-map "\C-c\C-a" 'idlwave-auto-fill-mode) 1599(define-key idlwave-mode-map "\C-c\C-a" 'idlwave-auto-fill-mode)
1598(define-key idlwave-mode-map "\M-q" 'idlwave-fill-paragraph) 1600(define-key idlwave-mode-map "\M-q" 'idlwave-fill-paragraph)
1599(define-key idlwave-mode-map "\M-s" 'idlwave-edit-in-idlde) 1601(define-key idlwave-mode-map "\M-s" 'idlwave-edit-in-idlde)
@@ -1637,6 +1639,7 @@ Capitalize system variables - action only
1637(define-key idlwave-mode-map "\C-c\C-v" 'idlwave-find-module) 1639(define-key idlwave-mode-map "\C-c\C-v" 'idlwave-find-module)
1638(define-key idlwave-mode-map "\C-c?" 'idlwave-routine-info) 1640(define-key idlwave-mode-map "\C-c?" 'idlwave-routine-info)
1639(define-key idlwave-mode-map "\M-?" 'idlwave-context-help) 1641(define-key idlwave-mode-map "\M-?" 'idlwave-context-help)
1642(define-key idlwave-mode-map [(control meta ?\?)] 'idlwave-online-help)
1640(define-key idlwave-mode-map [(meta tab)] 'idlwave-complete) 1643(define-key idlwave-mode-map [(meta tab)] 'idlwave-complete)
1641(define-key idlwave-mode-map "\C-c\C-i" 'idlwave-update-routine-info) 1644(define-key idlwave-mode-map "\C-c\C-i" 'idlwave-update-routine-info)
1642(define-key idlwave-mode-map "\C-c=" 'idlwave-resolve) 1645(define-key idlwave-mode-map "\C-c=" 'idlwave-resolve)
@@ -1965,7 +1968,7 @@ The main features of this mode are
1965 "[ \t\f]*$\\|[ \t]*;+[ \t]*$\\|;+[+=-_*]+$") 1968 "[ \t\f]*$\\|[ \t]*;+[ \t]*$\\|;+[+=-_*]+$")
1966 (set (make-local-variable 'paragraph-start) "[ \t\f]\\|[ \t]*;+[ \t]") 1969 (set (make-local-variable 'paragraph-start) "[ \t\f]\\|[ \t]*;+[ \t]")
1967 (set (make-local-variable 'paragraph-ignore-fill-prefix) nil) 1970 (set (make-local-variable 'paragraph-ignore-fill-prefix) nil)
1968 (set (make-local-variable 'parse-sexp-ignore-comments) nil) 1971 (set (make-local-variable 'parse-sexp-ignore-comments) t)
1969 1972
1970 ;; Set tag table list to use IDLTAGS as file name. 1973 ;; Set tag table list to use IDLTAGS as file name.
1971 (if (boundp 'tag-table-alist) 1974 (if (boundp 'tag-table-alist)
@@ -2134,18 +2137,33 @@ An END token must be preceded by whitespace."
2134 "Finds the start of current block and blinks to it for a second. 2137 "Finds the start of current block and blinks to it for a second.
2135Also checks if the correct end statement has been used." 2138Also checks if the correct end statement has been used."
2136 ;; All end statements are reserved words 2139 ;; All end statements are reserved words
2137 (let* ((pos (point)) 2140 ;; Re-indent end line
2138 end end1) 2141 (insert-char ?\ 1) ;; So indent, etc. work well
2142 (backward-char 1)
2143 (let* ((pos (point-marker))
2144 (last-abbrev-marker (copy-marker last-abbrev-location))
2145 (eol-pos (save-excursion (end-of-line) (point)))
2146 begin-pos end-pos end end1 )
2147 (if idlwave-reindent-end (idlwave-indent-line))
2148
2139 (when (and (idlwave-check-abbrev 0 t) 2149 (when (and (idlwave-check-abbrev 0 t)
2140 idlwave-show-block) 2150 idlwave-show-block)
2141 (save-excursion 2151 (save-excursion
2142 ;; Move inside current block 2152 ;; Move inside current block
2143 (setq end (buffer-substring 2153 (goto-char last-abbrev-marker)
2144 (save-excursion (skip-chars-backward "a-zA-Z")
2145 (point))
2146 (point)))
2147 (idlwave-beginning-of-statement)
2148 (idlwave-block-jump-out -1 'nomark) 2154 (idlwave-block-jump-out -1 'nomark)
2155 (setq begin-pos (point))
2156 (idlwave-block-jump-out 1 'nomark)
2157 (setq end-pos (point))
2158 (if (> end-pos eol-pos)
2159 (setq end-pos pos))
2160 (goto-char end-pos)
2161 (setq end (buffer-substring
2162 (progn
2163 (skip-chars-backward "a-zA-Z")
2164 (point))
2165 end-pos))
2166 (goto-char begin-pos)
2149 (when (setq end1 (cdr (idlwave-block-master))) 2167 (when (setq end1 (cdr (idlwave-block-master)))
2150 (cond 2168 (cond
2151 ((null end1)) ; no-operation 2169 ((null end1)) ; no-operation
@@ -2165,9 +2183,7 @@ Also checks if the correct end statement has been used."
2165 (message "Warning: Shouldn't this be \"%s\" instead of \"%s\"?" 2183 (message "Warning: Shouldn't this be \"%s\" instead of \"%s\"?"
2166 end1 end) 2184 end1 end)
2167 (sit-for 1))))))) 2185 (sit-for 1)))))))
2168 ;; Re-indent end line 2186 (delete-char 1))
2169 (if idlwave-reindent-end
2170 (idlwave-indent-line)))
2171 2187
2172(defun idlwave-block-master () 2188(defun idlwave-block-master ()
2173 (let ((case-fold-search t)) 2189 (let ((case-fold-search t))
@@ -2588,6 +2604,14 @@ If not in a statement just moves to end of line. Returns position."
2588 (looking-at "^@"))))) 2604 (looking-at "^@")))))
2589 last-statement)) 2605 last-statement))
2590 2606
2607(defun idlwave-skip-multi-commands (&optional lim)
2608 "Skip past multiple commands on a line (with `&')."
2609 (let ((save-point (point)))
2610 (when (re-search-forward ".*&" lim t)
2611 (goto-char (match-end 0))
2612 (if (idlwave-in-quote) (goto-char save-point)))
2613 (point)))
2614
2591(defun idlwave-skip-label-or-case () 2615(defun idlwave-skip-label-or-case ()
2592 "Skip label or case statement element. 2616 "Skip label or case statement element.
2593Returns position after label. 2617Returns position after label.
@@ -2627,6 +2651,7 @@ substatement."
2627 st nst last) 2651 st nst last)
2628 (idlwave-beginning-of-statement) 2652 (idlwave-beginning-of-statement)
2629 (idlwave-skip-label-or-case) 2653 (idlwave-skip-label-or-case)
2654 (idlwave-skip-multi-commands orig)
2630 (setq last (point)) 2655 (setq last (point))
2631 ;; Continue looking for substatements until we are past orig 2656 ;; Continue looking for substatements until we are past orig
2632 (while (and (<= (point) orig) (not (eobp))) 2657 (while (and (<= (point) orig) (not (eobp)))
@@ -2656,7 +2681,8 @@ list not just the type symbol. Returns nil if not an identifiable
2656statement." 2681statement."
2657 (save-excursion 2682 (save-excursion
2658 ;; Skip whitespace within a statement which is spaces, tabs, continuations 2683 ;; Skip whitespace within a statement which is spaces, tabs, continuations
2659 (while (looking-at "[ \t]*\\<\\$") 2684 ;; and possibly comments
2685 (while (looking-at "[ \t]*\\$")
2660 (forward-line 1)) 2686 (forward-line 1))
2661 (skip-chars-forward " \t") 2687 (skip-chars-forward " \t")
2662 (let ((st idlwave-statement-match) 2688 (let ((st idlwave-statement-match)
@@ -2757,13 +2783,16 @@ If the optional argument EXPAND is non-nil then the actions in
2757 ;; indent the line 2783 ;; indent the line
2758 (idlwave-indent-left-margin (idlwave-calculate-indent))) 2784 (idlwave-indent-left-margin (idlwave-calculate-indent)))
2759 ;; Adjust parallel comment 2785 ;; Adjust parallel comment
2760 (end-of-line) 2786 (end-of-line)
2761 (if (idlwave-in-comment) 2787 (if (idlwave-in-comment)
2762 (indent-for-comment)))) 2788 ;; Emacs 21 is too smart with fill-column on comment indent
2789 (let ((fill-column (if (fboundp 'comment-indent-new-line)
2790 (1- (frame-width))
2791 fill-column)))
2792 (indent-for-comment)))))
2763 (goto-char mloc) 2793 (goto-char mloc)
2764 ;; Get rid of marker 2794 ;; Get rid of marker
2765 (set-marker mloc nil) 2795 (set-marker mloc nil)))
2766 ))
2767 2796
2768(defun idlwave-do-action (action) 2797(defun idlwave-do-action (action)
2769 "Perform an action repeatedly on a line. 2798 "Perform an action repeatedly on a line.
@@ -2895,7 +2924,12 @@ statement if this statement is a continuation of the previous line."
2895 (case-fold-search t) 2924 (case-fold-search t)
2896 (end-reg (progn (beginning-of-line) (point))) 2925 (end-reg (progn (beginning-of-line) (point)))
2897 (close-exp (progn (skip-chars-forward " \t") (looking-at "\\s)"))) 2926 (close-exp (progn (skip-chars-forward " \t") (looking-at "\\s)")))
2898 (beg-reg (progn (idlwave-previous-statement) (point))) 2927; (beg-reg (progn (idlwave-previous-statement) (point)))
2928 (beg-reg (progn ;; Use substatement indent unless it's this line
2929 (idlwave-start-of-substatement 'pre)
2930 (if (eq (line-beginning-position) end-reg)
2931 (idlwave-previous-statement))
2932 (point)))
2899 (cur-indent (idlwave-current-indent)) 2933 (cur-indent (idlwave-current-indent))
2900 (else-cont (and (goto-char end-reg) (looking-at "[ \t]*else"))) 2934 (else-cont (and (goto-char end-reg) (looking-at "[ \t]*else")))
2901 (basic-indent ;; The basic, non-fancy indent 2935 (basic-indent ;; The basic, non-fancy indent
@@ -2908,7 +2942,7 @@ statement if this statement is a continuation of the previous line."
2908 (cond 2942 (cond
2909 ;; A continued Procedure call or definition 2943 ;; A continued Procedure call or definition
2910 ((progn 2944 ((progn
2911 (idlwave-look-at "\\(pro\\|function\\)") 2945 (idlwave-look-at "^[ \t]*\\(pro\\|function\\)") ;skip over
2912 (looking-at "[ \t]*\\([a-zA-Z0-9$_]+[ \t]*->[ \t]*\\)?[a-zA-Z][:a-zA-Z0-9$_]*[ \t]*\\(,\\)[ \t]*")) 2946 (looking-at "[ \t]*\\([a-zA-Z0-9$_]+[ \t]*->[ \t]*\\)?[a-zA-Z][:a-zA-Z0-9$_]*[ \t]*\\(,\\)[ \t]*"))
2913 (goto-char (match-end 0)) 2947 (goto-char (match-end 0))
2914 ;; Comment only, or blank line with "$"? Align with , 2948 ;; Comment only, or blank line with "$"? Align with ,
@@ -2917,7 +2951,7 @@ statement if this statement is a continuation of the previous line."
2917 (current-column)) 2951 (current-column))
2918 2952
2919 ;; Continued assignment (with =), 2953 ;; Continued assignment (with =),
2920 ((looking-at "[ \t]*[a-zA-Z0-9$_]+[ \t]*\\(=\\)[ \t]*") 2954 ((looking-at "[ \t]*[][().a-zA-Z0-9$_]+[ \t]*\\(=\\)[ \t]*")
2921 (goto-char (match-end 0)) 2955 (goto-char (match-end 0))
2922 ;; Comment only? Align with = 2956 ;; Comment only? Align with =
2923 (if (save-match-data (looking-at "[ \t$]*\\(;.*\\)?$")) 2957 (if (save-match-data (looking-at "[ \t$]*\\(;.*\\)?$"))
@@ -3574,6 +3608,18 @@ constants - a double quote followed by an octal digit."
3574 ;; return string beginning position or nil 3608 ;; return string beginning position or nil
3575 (if (> start bq) bq)))) 3609 (if (> start bq) bq))))
3576 3610
3611(defun idlwave-is-pointer-dereference (&optional limit)
3612 "Determines if the character after point is a pointer dereference *."
3613 (let ((pos (point)))
3614 (and
3615 (eq (char-after) ?\*)
3616 (not (idlwave-in-quote))
3617 (save-excursion
3618 (forward-char)
3619 (re-search-backward (concat "\\(" idlwave-idl-keywords
3620 "\\|[[(*+-/=,^><]\\)\\s-*\\*") limit t)))))
3621
3622
3577;; Statement templates 3623;; Statement templates
3578 3624
3579;; Replace these with a general template function, something like 3625;; Replace these with a general template function, something like
@@ -3951,7 +3997,7 @@ blank lines."
3951;; "sinterned" strings. The only exception is that the functions 3997;; "sinterned" strings. The only exception is that the functions
3952;; which scan whole buffers for routine information do not intern the 3998;; which scan whole buffers for routine information do not intern the
3953;; grabbed strings. This is only done afterwards. Therefore in these 3999;; grabbed strings. This is only done afterwards. Therefore in these
3954;; functions it is *not* save to assume the strings can be compared 4000;; functions it is *not* safe to assume the strings can be compared
3955;; with `eq' and be fed into the routine assq functions. 4001;; with `eq' and be fed into the routine assq functions.
3956 4002
3957;; Here we define the hashing functions. 4003;; Here we define the hashing functions.
@@ -4542,7 +4588,7 @@ With three prefix args, dispatch asynchronous process to do the update."
4542 (goto-char (point-min)) 4588 (goto-char (point-min))
4543 (while (re-search-forward 4589 (while (re-search-forward
4544 "^[ \t]*\\(pro\\|function\\)[ \t]" nil t) 4590 "^[ \t]*\\(pro\\|function\\)[ \t]" nil t)
4545 (setq string (buffer-substring 4591 (setq string (buffer-substring-no-properties
4546 (match-beginning 0) 4592 (match-beginning 0)
4547 (progn 4593 (progn
4548 (idlwave-end-of-statement) 4594 (idlwave-end-of-statement)
@@ -5016,7 +5062,7 @@ end
5016 5062
5017(defvar idlwave-shell-temp-pro-file) 5063(defvar idlwave-shell-temp-pro-file)
5018(defvar idlwave-shell-temp-rinfo-save-file) 5064(defvar idlwave-shell-temp-rinfo-save-file)
5019(defun idlwave-shell-update-routine-info (&optional quiet run-hooks) 5065(defun idlwave-shell-update-routine-info (&optional quiet run-hooks preempt)
5020 "Query the shell for routine_info of compiled modules and update the lists." 5066 "Query the shell for routine_info of compiled modules and update the lists."
5021 ;; Save and compile the procedure. The compiled procedure is then 5067 ;; Save and compile the procedure. The compiled procedure is then
5022 ;; saved into an IDL SAVE file, to allow for fast RESTORE. 5068 ;; saved into an IDL SAVE file, to allow for fast RESTORE.
@@ -5048,7 +5094,7 @@ end
5048 `(progn 5094 `(progn
5049 (idlwave-shell-routine-info-filter) 5095 (idlwave-shell-routine-info-filter)
5050 (idlwave-concatenate-rinfo-lists ,quiet ,run-hooks)) 5096 (idlwave-concatenate-rinfo-lists ,quiet ,run-hooks))
5051 'hide)) 5097 'hide preempt))
5052 5098
5053;; --------------------------------------------------------------------------- 5099;; ---------------------------------------------------------------------------
5054;; 5100;;
@@ -5127,7 +5173,7 @@ When we force a method or a method keyword, CLASS can specify the class."
5127 5173
5128 ;; Check for any special completion functions 5174 ;; Check for any special completion functions
5129 ((and idlwave-complete-special 5175 ((and idlwave-complete-special
5130 (idlwave-complete-special))) 5176 (idlwave-call-special idlwave-complete-special)))
5131 5177
5132 ((and (idlwave-in-quote) 5178 ((and (idlwave-in-quote)
5133 (not (eq what 'class))) 5179 (not (eq what 'class)))
@@ -5156,7 +5202,9 @@ When we force a method or a method keyword, CLASS can specify the class."
5156 (format "Select a %s name%s" 5202 (format "Select a %s name%s"
5157 isa 5203 isa
5158 (if class-selector 5204 (if class-selector
5159 (format " (class is %s)" class-selector) 5205 (format " (class is %s)"
5206 (if (eq class-selector t)
5207 "unknown" class-selector))
5160 "")) 5208 ""))
5161 isa 5209 isa
5162 'idlwave-attach-method-classes))) 5210 'idlwave-attach-method-classes)))
@@ -5177,7 +5225,9 @@ When we force a method or a method keyword, CLASS can specify the class."
5177 (format "Select a %s name%s" 5225 (format "Select a %s name%s"
5178 isa 5226 isa
5179 (if class-selector 5227 (if class-selector
5180 (format " (class is %s)" class-selector) 5228 (format " (class is %s)"
5229 (if (eq class-selector t)
5230 "unknown" class-selector))
5181 "")) 5231 ""))
5182 isa 5232 isa
5183 'idlwave-attach-method-classes))) 5233 'idlwave-attach-method-classes)))
@@ -5264,13 +5314,14 @@ use `idlwave-complete-in-buffer' to do some completion and return `t'.
5264If such a function returns `t', *no further* attempts to complete 5314If such a function returns `t', *no further* attempts to complete
5265other contexts will be done. If the function returns `nil', other completions 5315other contexts will be done. If the function returns `nil', other completions
5266will be tried.") 5316will be tried.")
5267(defun idlwave-complete-special () 5317
5268 (let ((functions idlwave-complete-special) 5318(defun idlwave-call-special (functions &rest args)
5269 fun) 5319 (let ((funcs functions)
5320 fun ret)
5270 (catch 'exit 5321 (catch 'exit
5271 (while (setq fun (pop functions)) 5322 (while (setq fun (pop funcs))
5272 (if (funcall fun) 5323 (if (setq ret (apply fun args))
5273 (throw 'exit t))) 5324 (throw 'exit ret)))
5274 nil))) 5325 nil)))
5275 5326
5276(defun idlwave-make-force-complete-where-list (what &optional module class) 5327(defun idlwave-make-force-complete-where-list (what &optional module class)
@@ -5522,14 +5573,18 @@ INFO is as returned by idlwave-what-function or -procedure."
5522 (save-excursion (goto-char apos) 5573 (save-excursion (goto-char apos)
5523 (looking-at "->[a-zA-Z][a-zA-Z0-9$_]*::"))))) 5574 (looking-at "->[a-zA-Z][a-zA-Z0-9$_]*::")))))
5524 5575
5576(defvar idlwave-determine-class-special nil
5577 "List of special functions for determining class.
5578Must accept two arguments: `apos' and `info'")
5579
5525(defun idlwave-determine-class (info type) 5580(defun idlwave-determine-class (info type)
5526 ;; Determine the class of a routine call. INFO is the structure returned 5581 ;; Determine the class of a routine call.
5527 ;; `idlwave-what-function' or `idlwave-what-procedure'. 5582 ;; INFO is the `cw-list' structure as returned by idlwave-where.
5528 ;; The third element in this structure is the class. When nil, we return nil. 5583 ;; The second element in this structure is the class. When nil, we
5529 ;; When t, try to get the class from text properties at the arrow. When 5584 ;; return nil. When t, try to get the class from text properties at
5530 ;; the object is "self", we use the class of the current routine. 5585 ;; the arrow. When the object is "self", we use the class of the
5531 ;; otherwise prompt the user for a class name. Also stores the selected 5586 ;; current routine. otherwise prompt the user for a class name.
5532 ;; class as a text property at the arrow. 5587 ;; Also stores the selected class as a text property at the arrow.
5533 ;; TYPE is 'fun or 'pro. 5588 ;; TYPE is 'fun or 'pro.
5534 (let* ((class (nth 2 info)) 5589 (let* ((class (nth 2 info))
5535 (apos (nth 3 info)) 5590 (apos (nth 3 info))
@@ -5550,7 +5605,7 @@ INFO is as returned by idlwave-what-function or -procedure."
5550 (let ((case-fold-search t)) 5605 (let ((case-fold-search t))
5551 (looking-at "self\\>"))))) 5606 (looking-at "self\\>")))))
5552 (force-query idlwave-force-class-query) 5607 (force-query idlwave-force-class-query)
5553 store class-alist) 5608 store special-class class-alist)
5554 (cond 5609 (cond
5555 ((null class) nil) 5610 ((null class) nil)
5556 ((eq t class) 5611 ((eq t class)
@@ -5560,9 +5615,20 @@ INFO is as returned by idlwave-what-function or -procedure."
5560 (not force-query)) 5615 (not force-query))
5561 (setq class (get-text-property apos 'idlwave-class) 5616 (setq class (get-text-property apos 'idlwave-class)
5562 class (idlwave-sintern-class class))) 5617 class (idlwave-sintern-class class)))
5563 (when (and (eq t class) 5618 (if (and (eq t class) is-self)
5564 is-self) 5619 (setq class (or (nth 2 (idlwave-current-routine)) class)))
5565 (setq class (or (nth 2 (idlwave-current-routine)) class))) 5620
5621 ;; Before prompting, try any special class determination routines
5622 (when (and (eq t class)
5623 idlwave-determine-class-special
5624 (not force-query))
5625 (setq special-class
5626 (idlwave-call-special idlwave-determine-class-special apos))
5627 (if special-class
5628 (setq class (idlwave-sintern-class special-class)
5629 store idlwave-store-inquired-class)))
5630
5631 ;; Prompt for a class, if we need to
5566 (when (and (eq class t) 5632 (when (and (eq class t)
5567 (or force-query query)) 5633 (or force-query query))
5568 (setq class-alist 5634 (setq class-alist
@@ -5582,11 +5648,17 @@ INFO is as returned by idlwave-what-function or -procedure."
5582 type (car info)) 5648 type (car info))
5583 "")) 5649 ""))
5584 class-alist nil nil nil 'idlwave-class-history)))))) 5650 class-alist nil nil nil 'idlwave-class-history))))))
5651
5652 ;; Store it, if requested
5585 (when (and class (not (eq t class))) 5653 (when (and class (not (eq t class)))
5586 ;; We have a real class here 5654 ;; We have a real class here
5587 (when (and store arrow) 5655 (when (and store arrow)
5588 (put-text-property apos (+ apos 2) 'idlwave-class class) 5656 (condition-case ()
5589 (put-text-property apos (+ apos 2) 'face idlwave-class-arrow-face)) 5657 (add-text-properties
5658 apos (+ apos 2)
5659 `(idlwave-class ,class face ,idlwave-class-arrow-face
5660 rear-nonsticky t))
5661 (error nil)))
5590 (setf (nth 2 info) class)) 5662 (setf (nth 2 info) class))
5591 ;; Return the class 5663 ;; Return the class
5592 class) 5664 class)
@@ -5678,7 +5750,7 @@ ARROW: Location of the arrow"
5678 (setq cw 'function) 5750 (setq cw 'function)
5679 (save-excursion 5751 (save-excursion
5680 (if (re-search-backward "->[ \t]*\\(\\([$a-zA-Z0-9_]+\\)::\\)?[$a-zA-Z0-9_]*\\=" bos t) 5752 (if (re-search-backward "->[ \t]*\\(\\([$a-zA-Z0-9_]+\\)::\\)?[$a-zA-Z0-9_]*\\=" bos t)
5681 (setq cw-arrow (match-beginning 0) 5753 (setq cw-arrow (copy-marker (match-beginning 0))
5682 cw-class (if (match-end 2) 5754 cw-class (if (match-end 2)
5683 (idlwave-sintern-class (match-string 2)) 5755 (idlwave-sintern-class (match-string 2))
5684 t)))))) 5756 t))))))
@@ -5698,8 +5770,8 @@ ARROW: Location of the arrow"
5698 5770
5699(defun idlwave-what-function (&optional bound) 5771(defun idlwave-what-function (&optional bound)
5700 ;; Find out if point is within the argument list of a function. 5772 ;; Find out if point is within the argument list of a function.
5701 ;; The return value is ("function-name" (point) level). 5773 ;; The return value is ("function-name" class arrow-start (point) level).
5702 ;; Level is 1 on the to level parenthesis, higher further down. 5774 ;; Level is 1 on the top level parentheses, higher further down.
5703 5775
5704 ;; If the optional BOUND is an integer, bound backwards directed 5776 ;; If the optional BOUND is an integer, bound backwards directed
5705 ;; searches to this point. 5777 ;; searches to this point.
@@ -5728,7 +5800,7 @@ ARROW: Location of the arrow"
5728 pos func-point) 5800 pos func-point)
5729 (if (re-search-backward 5801 (if (re-search-backward
5730 "->[ \t]*\\(\\([a-zA-Z][a-zA-Z0-9$_]*\\)::\\)?\\=" bound t) 5802 "->[ \t]*\\(\\([a-zA-Z][a-zA-Z0-9$_]*\\)::\\)?\\=" bound t)
5731 (setq arrow-start (match-beginning 0) 5803 (setq arrow-start (copy-marker (match-beginning 0))
5732 class (or (match-string 2) t))) 5804 class (or (match-string 2) t)))
5733 (throw 5805 (throw
5734 'exit 5806 'exit
@@ -5752,9 +5824,9 @@ ARROW: Location of the arrow"
5752 (idlwave-start-of-substatement 'pre) 5824 (idlwave-start-of-substatement 'pre)
5753 (setq string (buffer-substring (point) pos)) 5825 (setq string (buffer-substring (point) pos))
5754 (if (string-match 5826 (if (string-match
5755 "\\`\\(.*&\\)?[ \t]*\\([a-zA-Z][a-zA-Z0-9$_]*\\)[ \t]*\\(,\\|\\'\\)" string) 5827 "\\`[ \t]*\\([a-zA-Z][a-zA-Z0-9$_]*\\)[ \t]*\\(,\\|\\'\\)" string)
5756 (setq pro (match-string 2 string) 5828 (setq pro (match-string 1 string)
5757 pro-point (+ (point) (match-beginning 2))) 5829 pro-point (+ (point) (match-beginning 1)))
5758 (if (and (idlwave-skip-object) 5830 (if (and (idlwave-skip-object)
5759 (setq string (buffer-substring (point) pos)) 5831 (setq string (buffer-substring (point) pos))
5760 (string-match 5832 (string-match
@@ -5764,7 +5836,7 @@ ARROW: Location of the arrow"
5764 pro-point (if (match-beginning 4) 5836 pro-point (if (match-beginning 4)
5765 (+ (point) (match-beginning 4)) 5837 (+ (point) (match-beginning 4))
5766 pos) 5838 pos)
5767 arrow-start (+ (point) (match-beginning 1)) 5839 arrow-start (copy-marker (+ (point) (match-beginning 1)))
5768 class (or (match-string 3 string) t))))) 5840 class (or (match-string 3 string) t)))))
5769 (list (idlwave-sintern-routine-or-method pro class) 5841 (list (idlwave-sintern-routine-or-method pro class)
5770 (idlwave-sintern-class class) 5842 (idlwave-sintern-class class)
@@ -5802,7 +5874,6 @@ ARROW: Location of the arrow"
5802 (goto-char pos) 5874 (goto-char pos)
5803 nil))) 5875 nil)))
5804 5876
5805
5806(defun idlwave-last-valid-char () 5877(defun idlwave-last-valid-char ()
5807 "Return the last character before point which is not white or a comment 5878 "Return the last character before point which is not white or a comment
5808and also not part of the current identifier. Since we do this in 5879and also not part of the current identifier. Since we do this in
@@ -5839,8 +5910,9 @@ This function is not general, can only be used for completion stuff."
5839(defun idlwave-complete-in-buffer (type stype list selector prompt isa 5910(defun idlwave-complete-in-buffer (type stype list selector prompt isa
5840 &optional prepare-display-function) 5911 &optional prepare-display-function)
5841 "Perform TYPE completion of word before point against LIST. 5912 "Perform TYPE completion of word before point against LIST.
5842SELECTOR is the PREDICATE argument for the completion function. 5913SELECTOR is the PREDICATE argument for the completion function. Show
5843Show PROMPT in echo area. TYPE is one of 'function, 'procedure or 'keyword." 5914PROMPT in echo area. TYPE is one of 'function, 'procedure,
5915'class-tag, or 'keyword."
5844 (let* ((completion-ignore-case t) 5916 (let* ((completion-ignore-case t)
5845 beg (end (point)) slash part spart completion all-completions 5917 beg (end (point)) slash part spart completion all-completions
5846 dpart dcompletion) 5918 dpart dcompletion)
@@ -5869,7 +5941,7 @@ Show PROMPT in echo area. TYPE is one of 'function, 'procedure or 'keyword."
5869 (cond 5941 (cond
5870 ((null completion) 5942 ((null completion)
5871 ;; nothing available. 5943 ;; nothing available.
5872 (error "Can't find %s completion for \"%s\"" isa part)) 5944 (error (concat prompt ": no completion for \"%s\"") part))
5873 ((and (not (equal dpart dcompletion)) 5945 ((and (not (equal dpart dcompletion))
5874 (not (eq t completion))) 5946 (not (eq t completion)))
5875 ;; We can add something 5947 ;; We can add something
@@ -5940,24 +6012,24 @@ Show PROMPT in echo area. TYPE is one of 'function, 'procedure or 'keyword."
5940 (idlwave-complete-in-buffer 'class 'class (idlwave-class-alist) nil 6012 (idlwave-complete-in-buffer 'class 'class (idlwave-class-alist) nil
5941 "Select a class" "class"))) 6013 "Select a class" "class")))
5942 6014
5943(defun idlwave-attach-classes (list is-kwd show-classes) 6015(defun idlwave-attach-classes (list type show-classes)
5944 ;; Attach the proper class list to a LIST of completion items. 6016 ;; Attach the proper class list to a LIST of completion items.
5945 ;; IS-KWD, when non-nil, shows its keywords - otherwise its methods 6017 ;; TYPE, when 'kwd, shows classes for method keywords, when
6018 ;; 'class-tag, for class tags, and otherwise for methods.
5946 ;; SHOW-CLASSES is the value of `idlwave-completion-show-classes'. 6019 ;; SHOW-CLASSES is the value of `idlwave-completion-show-classes'.
5947 (catch 'exit 6020 (if (or (null show-classes) ; don't want to see classes
5948 (if (or (null show-classes) ; don't want to see classes 6021 (null class-selector) ; not a method call
5949 (null class-selector) ; not a method call 6022 (and
5950 (and (stringp class-selector) ; the class is already known 6023 (stringp class-selector) ; the class is already known
5951 (not super-classes))) ; no possibilities for inheritance 6024 (not super-classes))) ; no possibilities for inheritance
5952 ;; In these cases, we do not have to do anything 6025 ;; In these cases, we do not have to do anything
5953 (throw 'exit list)) 6026 list
5954
5955 (let* ((do-prop (and (>= show-classes 0) 6027 (let* ((do-prop (and (>= show-classes 0)
5956 (>= emacs-major-version 21))) 6028 (>= emacs-major-version 21)))
5957 (do-buf (not (= show-classes 0))) 6029 (do-buf (not (= show-classes 0)))
5958 ; (do-dots (featurep 'xemacs)) 6030 ;; (do-dots (featurep 'xemacs))
5959 (do-dots t) 6031 (do-dots t)
5960 (inherit (if super-classes 6032 (inherit (if (and (not (eq type 'class-tag)) super-classes)
5961 (cons class-selector super-classes))) 6033 (cons class-selector super-classes)))
5962 (max (abs show-classes)) 6034 (max (abs show-classes))
5963 (lmax (if do-dots (apply 'max (mapcar 'length list)))) 6035 (lmax (if do-dots (apply 'max (mapcar 'length list))))
@@ -5965,16 +6037,22 @@ Show PROMPT in echo area. TYPE is one of 'function, 'procedure or 'keyword."
5965 (mapcar 6037 (mapcar
5966 (lambda (x) 6038 (lambda (x)
5967 ;; get the classes 6039 ;; get the classes
5968 (setq classes 6040 (if (eq type 'class-tag)
5969 (if is-kwd 6041 ;; Just one class for tags
5970 (idlwave-all-method-keyword-classes 6042 (setq classes
5971 method-selector x type-selector) 6043 (list
5972 (idlwave-all-method-classes x type-selector))) 6044 (idlwave-class-or-superclass-with-tag class-selector x)))
5973 (if inherit 6045 ;; Multiple classes for method of method-keyword
5974 (setq classes 6046 (setq classes
5975 (delq nil 6047 (if (eq type 'kwd)
5976 (mapcar (lambda (x) (if (memq x inherit) x nil)) 6048 (idlwave-all-method-keyword-classes
5977 classes)))) 6049 method-selector x type-selector)
6050 (idlwave-all-method-classes x type-selector)))
6051 (if inherit
6052 (setq classes
6053 (delq nil
6054 (mapcar (lambda (x) (if (memq x inherit) x nil))
6055 classes)))))
5978 (setq nclasses (length classes)) 6056 (setq nclasses (length classes))
5979 ;; Make the separator between item and class-info 6057 ;; Make the separator between item and class-info
5980 (if do-dots 6058 (if do-dots
@@ -6001,10 +6079,14 @@ Show PROMPT in echo area. TYPE is one of 'function, 'procedure or 'keyword."
6001 6079
6002(defun idlwave-attach-method-classes (list) 6080(defun idlwave-attach-method-classes (list)
6003 ;; Call idlwave-attach-classes with method parameters 6081 ;; Call idlwave-attach-classes with method parameters
6004 (idlwave-attach-classes list nil idlwave-completion-show-classes)) 6082 (idlwave-attach-classes list 'method idlwave-completion-show-classes))
6005(defun idlwave-attach-keyword-classes (list) 6083(defun idlwave-attach-keyword-classes (list)
6006 ;; Call idlwave-attach-classes with keyword parameters 6084 ;; Call idlwave-attach-classes with keyword parameters
6007 (idlwave-attach-classes list t idlwave-completion-show-classes)) 6085 (idlwave-attach-classes list 'kwd idlwave-completion-show-classes))
6086(defun idlwave-attach-class-tag-classes (list)
6087 ;; Call idlwave-attach-classes with class structure tags
6088 (idlwave-attach-classes list 'class-tag idlwave-completion-show-classes))
6089
6008 6090
6009;;---------------------------------------------------------------------- 6091;;----------------------------------------------------------------------
6010;;---------------------------------------------------------------------- 6092;;----------------------------------------------------------------------
@@ -6163,6 +6245,13 @@ sort the list before displaying"
6163 (remove-text-properties beg (point) '(face nil)))) 6245 (remove-text-properties beg (point) '(face nil))))
6164 (eval idlwave-complete-after-success-form-force)) 6246 (eval idlwave-complete-after-success-form-force))
6165 6247
6248(defun idlwave-keyboard-quit ()
6249 (interactive)
6250 (unwind-protect
6251 (if (eq (car-safe last-command) 'idlwave-display-completion-list)
6252 (idlwave-restore-wconf-after-completion))
6253 (keyboard-quit)))
6254
6166(defun idlwave-restore-wconf-after-completion () 6255(defun idlwave-restore-wconf-after-completion ()
6167 "Restore the old (before completion) window configuration." 6256 "Restore the old (before completion) window configuration."
6168 (and idlwave-completion-restore-window-configuration 6257 (and idlwave-completion-restore-window-configuration
@@ -6215,7 +6304,7 @@ sort the list before displaying"
6215 (setq this-command last-command))) 6304 (setq this-command last-command)))
6216 new-map)) 6305 new-map))
6217 6306
6218;; In Emacs we also to replace choose keybindings in the completion 6307;; In Emacs we also replace keybindings in the completion
6219;; map in order to install our wrappers. 6308;; map in order to install our wrappers.
6220 6309
6221(defun idlwave-display-completion-list-emacs (list) 6310(defun idlwave-display-completion-list-emacs (list)
@@ -6271,14 +6360,23 @@ Point is expected just before the opening `{' of the struct definition."
6271 (end (cdr borders)) 6360 (end (cdr borders))
6272 tags) 6361 tags)
6273 (goto-char beg) 6362 (goto-char beg)
6274 (while (re-search-forward "[{,][ \t]*\\(\\$.*\n[ \t]*\\)?\\([a-zA-Z][a-zA-Z0-9_]*\\)[ \t]*:" end t) 6363 (while (re-search-forward "[{,][ \t]*\\(\\$.*\n\\(^[ \t]*\\(\\$[ \t]*\\)?\\(;.*\\)?\n\\)*[ \t]*\\)?\\([a-zA-Z][a-zA-Z0-9_]*\\)[ \t]*:" end t)
6275 ;; Check if we are still on the top level of the structure. 6364 ;; Check if we are still on the top level of the structure.
6276 (if (and (condition-case nil (progn (up-list -1) t) (error nil)) 6365 (if (and (condition-case nil (progn (up-list -1) t) (error nil))
6277 (= (point) beg)) 6366 (= (point) beg))
6278 (push (match-string 2) tags)) 6367 (push (match-string 5) tags))
6279 (goto-char (match-end 0))) 6368 (goto-char (match-end 0)))
6280 (nreverse tags)))) 6369 (nreverse tags))))
6281 6370
6371(defun idlwave-find-struct-tag (tag)
6372 "Find a given TAG in the structure defined at point."
6373 (let* ((borders (idlwave-struct-borders))
6374 (beg (car borders))
6375 (end (cdr borders))
6376 (case-fold-search t))
6377 (re-search-forward (concat "\\(^[ \t]*\\|[,{][ \t]*\\)" tag "[ \t]*:")
6378 end t)))
6379
6282(defun idlwave-struct-inherits () 6380(defun idlwave-struct-inherits ()
6283 "Return a list of all `inherits' names in the struct at point. 6381 "Return a list of all `inherits' names in the struct at point.
6284Point is expected just before the opening `{' of the struct definition." 6382Point is expected just before the opening `{' of the struct definition."
@@ -6324,7 +6422,7 @@ If NAME is non-nil, search for a named structure NAME. If BOUND is an
6324integer, limit the search. If BOUND is the symbol `all', we search 6422integer, limit the search. If BOUND is the symbol `all', we search
6325first back and then forward through the entire file. If BOUND is the 6423first back and then forward through the entire file. If BOUND is the
6326symbol `back' we search only backward." 6424symbol `back' we search only backward."
6327 (let* ((ws "[ \t]*\\(\\$.*\n[ \t]*\\)?") 6425 (let* ((ws "[ \t]*\\(\\$.*\n[ \t]*\\)*")
6328 (case-fold-search t) 6426 (case-fold-search t)
6329 (lim (if (integerp bound) bound nil)) 6427 (lim (if (integerp bound) bound nil))
6330 (re (concat 6428 (re (concat
@@ -6372,6 +6470,13 @@ symbol `back' we search only backward."
6372 (setcdr inherits (mapcar (lambda (x) (idlwave-sintern-class x 'set)) 6470 (setcdr inherits (mapcar (lambda (x) (idlwave-sintern-class x 'set))
6373 (cdr inherits)))))) 6471 (cdr inherits))))))
6374 6472
6473(defun idlwave-find-class-definition (class)
6474 (let ((case-fold-search t))
6475 (if (re-search-forward
6476 (concat "^[ \t]*pro[ \t]+" (downcase class) "__define" "\\>") nil t)
6477 ;; FIXME: should we limit to end of pro here?
6478 (idlwave-find-structure-definition nil class))))
6479
6375(defun idlwave-find-class-info (class) 6480(defun idlwave-find-class-info (class)
6376 "Find the __define procedure for a class structure and return info entry." 6481 "Find the __define procedure for a class structure and return info entry."
6377 (let* ((pro (concat (downcase class) "__define")) 6482 (let* ((pro (concat (downcase class) "__define"))
@@ -6394,14 +6499,10 @@ symbol `back' we search only backward."
6394 (insert-file-contents file)) 6499 (insert-file-contents file))
6395 (save-excursion 6500 (save-excursion
6396 (goto-char 1) 6501 (goto-char 1)
6397 (setq case-fold-search t) 6502 (if (idlwave-find-class-definition class)
6398 (when (and (re-search-forward 6503 (list class
6399 (concat "^[ \t]*pro[ \t]+" pro "\\>") nil t) 6504 (cons 'tags (idlwave-struct-tags))
6400 ;; FIXME: should we limit to end of pro here? 6505 (cons 'inherits (idlwave-struct-inherits)))))))))
6401 (idlwave-find-structure-definition nil class))
6402 (list class
6403 (cons 'tags (idlwave-struct-tags))
6404 (cons 'inherits (idlwave-struct-inherits)))))))))
6405 6506
6406(defun idlwave-class-tags (class) 6507(defun idlwave-class-tags (class)
6407 "Return the native tags in CLASS." 6508 "Return the native tags in CLASS."
@@ -6412,8 +6513,13 @@ symbol `back' we search only backward."
6412 6513
6413(defun idlwave-all-class-tags (class) 6514(defun idlwave-all-class-tags (class)
6414 "Return a list of native and inherited tags in CLASS." 6515 "Return a list of native and inherited tags in CLASS."
6415 (apply 'append (mapcar 'idlwave-class-tags 6516 (condition-case err
6416 (cons class (idlwave-all-class-inherits class))))) 6517 (apply 'append (mapcar 'idlwave-class-tags
6518 (cons class (idlwave-all-class-inherits class))))
6519 (error
6520 (idlwave-class-tag-reset)
6521 (error "%s" (error-message-string err)))))
6522
6417 6523
6418(defun idlwave-all-class-inherits (class) 6524(defun idlwave-all-class-inherits (class)
6419 "Return a list of all superclasses of CLASS (recursively expanded). 6525 "Return a list of all superclasses of CLASS (recursively expanded).
@@ -6427,12 +6533,21 @@ The list is cached in `idlwave-class-info' for faster access."
6427 entry) 6533 entry)
6428 (if (setq entry (assq 'all-inherits info)) 6534 (if (setq entry (assq 'all-inherits info))
6429 (cdr entry) 6535 (cdr entry)
6430 (let ((inherits (idlwave-class-inherits class)) 6536 ;; Save the depth of inheritance scan to check for circular references
6537 (let ((inherits (mapcar (lambda (x) (cons x 0))
6538 (idlwave-class-inherits class)))
6431 rtn all-inherits cl) 6539 rtn all-inherits cl)
6432 (while inherits 6540 (while inherits
6433 (setq cl (pop inherits) 6541 (setq cl (pop inherits)
6434 rtn (cons cl rtn) 6542 rtn (cons (car cl) rtn)
6435 inherits (append inherits (idlwave-class-inherits cl)))) 6543 inherits (append (mapcar (lambda (x)
6544 (cons x (1+ (cdr cl))))
6545 (idlwave-class-inherits (car cl)))
6546 inherits))
6547 (if (> (cdr cl) 999)
6548 (error
6549 "Class scan: inheritance depth exceeded. Circular inheritance?")
6550 ))
6436 (setq all-inherits (nreverse rtn)) 6551 (setq all-inherits (nreverse rtn))
6437 (nconc info (list (cons 'all-inherits all-inherits))) 6552 (nconc info (list (cons 'all-inherits all-inherits)))
6438 all-inherits)))))) 6553 all-inherits))))))
@@ -6446,10 +6561,10 @@ The list is cached in `idlwave-class-info' for faster access."
6446(defvar idlwave-current-tags-class nil) 6561(defvar idlwave-current-tags-class nil)
6447(defvar idlwave-current-class-tags nil) 6562(defvar idlwave-current-class-tags nil)
6448(defvar idlwave-current-native-class-tags nil) 6563(defvar idlwave-current-native-class-tags nil)
6449(defvar idlwave-sint-classtags nil) 6564(defvar idlwave-sint-class-tags nil)
6450(idlwave-new-sintern-type 'classtag) 6565(idlwave-new-sintern-type 'class-tag)
6451(add-to-list 'idlwave-complete-special 'idlwave-complete-class-structure-tag) 6566(add-to-list 'idlwave-complete-special 'idlwave-complete-class-structure-tag)
6452(add-hook 'idlwave-update-rinfo-hook 'idlwave-classtag-reset) 6567(add-hook 'idlwave-update-rinfo-hook 'idlwave-class-tag-reset)
6453 6568
6454(defun idlwave-complete-class-structure-tag () 6569(defun idlwave-complete-class-structure-tag ()
6455 "Complete a structure tag on a `self' argument in an object method." 6570 "Complete a structure tag on a `self' argument in an object method."
@@ -6461,33 +6576,39 @@ The list is cached in `idlwave-class-info' for faster access."
6461 (skip-chars-backward "[a-zA-Z0-9._$]") 6576 (skip-chars-backward "[a-zA-Z0-9._$]")
6462 (and (< (point) (- pos 4)) 6577 (and (< (point) (- pos 4))
6463 (looking-at "self\\."))) 6578 (looking-at "self\\.")))
6464 (let* ((class (nth 2 (idlwave-current-routine)))) 6579 (let* ((class-selector (nth 2 (idlwave-current-routine)))
6580 (super-classes (idlwave-all-class-inherits class-selector)))
6465 ;; Check if we are in a class routine 6581 ;; Check if we are in a class routine
6466 (unless class 6582 (unless class-selector
6467 (error "Not in a method procedure or function")) 6583 (error "Not in a method procedure or function"))
6468 ;; Check if we need to update the "current" class 6584 ;; Check if we need to update the "current" class
6469 (if (not (equal class idlwave-current-tags-class)) 6585 (if (not (equal class-selector idlwave-current-tags-class))
6470 (idlwave-prepare-class-tag-completion class)) 6586 (idlwave-prepare-class-tag-completion class-selector))
6471 (setq idlwave-completion-help-info nil) 6587 (setq idlwave-completion-help-info
6588 (list 'idlwave-complete-class-structure-tag-help
6589 (idlwave-sintern-routine
6590 (concat class-selector "__define"))
6591 nil))
6472 (let ((idlwave-cpl-bold idlwave-current-native-class-tags)) 6592 (let ((idlwave-cpl-bold idlwave-current-native-class-tags))
6473 (idlwave-complete-in-buffer 6593 (idlwave-complete-in-buffer
6474 'classtag 'classtag 6594 'class-tag 'class-tag
6475 idlwave-current-class-tags nil 6595 idlwave-current-class-tags nil
6476 (format "Select a tag of class %s" class) 6596 (format "Select a tag of class %s" class-selector)
6477 "class tag")) 6597 "class tag"
6598 'idlwave-attach-class-tag-classes))
6478 t) ; return t to skip other completions 6599 t) ; return t to skip other completions
6479 nil))) 6600 nil)))
6480 6601
6481(defun idlwave-classtag-reset () 6602(defun idlwave-class-tag-reset ()
6482 (setq idlwave-current-tags-class nil)) 6603 (setq idlwave-current-tags-class nil))
6483 6604
6484(defun idlwave-prepare-class-tag-completion (class) 6605(defun idlwave-prepare-class-tag-completion (class)
6485 "Find and parse the necessary class definitions for class structure tags." 6606 "Find and parse the necessary class definitions for class structure tags."
6486 (setq idlwave-sint-classtags nil) 6607 (setq idlwave-sint-class-tags nil)
6487 (setq idlwave-current-tags-class class) 6608 (setq idlwave-current-tags-class class)
6488 (setq idlwave-current-class-tags 6609 (setq idlwave-current-class-tags
6489 (mapcar (lambda (x) 6610 (mapcar (lambda (x)
6490 (list (idlwave-sintern-classtag x 'set))) 6611 (list (idlwave-sintern-class-tag x 'set)))
6491 (idlwave-all-class-tags class))) 6612 (idlwave-all-class-tags class)))
6492 (setq idlwave-current-native-class-tags 6613 (setq idlwave-current-native-class-tags
6493 (mapcar 'downcase (idlwave-class-tags class)))) 6614 (mapcar 'downcase (idlwave-class-tags class))))
@@ -6549,6 +6670,8 @@ Gets set in `idlw-rinfo.el'.")
6549 t)) ; return t to skip other completions 6670 t)) ; return t to skip other completions
6550 (t nil)))) 6671 (t nil))))
6551 6672
6673;; Here we fake help using the routine "system variables" with keyword
6674;; set to the sysvar. Name and kwd are global variables here.
6552(defvar name) 6675(defvar name)
6553(defvar kwd) 6676(defvar kwd)
6554(defun idlwave-complete-sysvar-help (mode word) 6677(defun idlwave-complete-sysvar-help (mode word)
@@ -6566,7 +6689,43 @@ Gets set in `idlw-rinfo.el'.")
6566 (nth 1 idlwave-completion-help-info) 6689 (nth 1 idlwave-completion-help-info)
6567 word)))) 6690 word))))
6568 (t (error "This should not happen")))) 6691 (t (error "This should not happen"))))
6569 6692
6693;; Fake help in the source buffer for class structure tags.
6694;; kwd and name are global-variables here.
6695(defvar idlwave-help-do-class-struct-tag nil)
6696(defun idlwave-complete-class-structure-tag-help (mode word)
6697 (cond
6698 ((eq mode 'test) ; nothing gets fontified for class tags
6699 nil)
6700 ((eq mode 'set)
6701 (let (class-with)
6702 (when (setq class-with
6703 (idlwave-class-or-superclass-with-tag
6704 idlwave-current-tags-class
6705 word))
6706 (if (assq (idlwave-sintern-class class-with)
6707 idlwave-system-class-info)
6708 (error "No help available for system class tags."))
6709 (setq name (concat class-with "__define"))))
6710 (setq kwd word
6711 idlwave-help-do-class-struct-tag t))
6712 (t (error "This should not happen"))))
6713
6714(defun idlwave-class-or-superclass-with-tag (class tag)
6715 "Find and return the CLASS or one of its superclass with the
6716associated TAG, if any."
6717 (let ((sclasses (cons class (cdr (assq 'all-inherits
6718 (idlwave-class-info class)))))
6719 cl)
6720 (catch 'exit
6721 (while sclasses
6722 (setq cl (pop sclasses))
6723 (let ((tags (idlwave-class-tags cl)))
6724 (while tags
6725 (if (eq t (compare-strings tag 0 nil (car tags) 0 nil t))
6726 (throw 'exit cl))
6727 (setq tags (cdr tags))))))))
6728
6570 6729
6571(defun idlwave-sysvars-reset () 6730(defun idlwave-sysvars-reset ()
6572 (if (and (fboundp 'idlwave-shell-is-running) 6731 (if (and (fboundp 'idlwave-shell-is-running)
@@ -6620,9 +6779,10 @@ Gets set in `idlw-rinfo.el'.")
6620 (set-buffer "*Completions*") 6779 (set-buffer "*Completions*")
6621 (save-excursion 6780 (save-excursion
6622 (goto-char (point-min)) 6781 (goto-char (point-min))
6623 (while (re-search-forward "\\.*<[^>]+>" nil t) 6782 (let ((buffer-read-only nil))
6624 (put-text-property (match-beginning 0) (match-end 0) 6783 (while (re-search-forward "\\.*<[^>]+>" nil t)
6625 'face 'font-lock-string-face)))))) 6784 (put-text-property (match-beginning 0) (match-end 0)
6785 'face 'font-lock-string-face)))))))
6626 6786
6627(defun idlwave-uniquify (list) 6787(defun idlwave-uniquify (list)
6628 (let (nlist) 6788 (let (nlist)
@@ -6676,10 +6836,13 @@ Restore the pre-completion window configuration if possible."
6676(defvar idlwave-last-context-help-pos nil) 6836(defvar idlwave-last-context-help-pos nil)
6677(defun idlwave-context-help (&optional arg) 6837(defun idlwave-context-help (&optional arg)
6678 "Display IDL Online Help on context. 6838 "Display IDL Online Help on context.
6679If point is on a keyword, help for that keyword will be shown. 6839If point is on a keyword, help for that keyword will be shown. If
6680If point is on a routine name or in the argument list of a routine, 6840point is on a routine name or in the argument list of a routine, help
6681help for that routine will be displayed. 6841for that routine will be displayed. Works for system routines and
6682Works for system routines and keywords only." 6842keywords, it pulls up text help. For other routies and keywords,
6843visits the source file, finding help in the header (if
6844`idlwave-help-source-try-header' is non-nil) or the routine definition
6845itself."
6683 (interactive "P") 6846 (interactive "P")
6684 (idlwave-require-online-help) 6847 (idlwave-require-online-help)
6685 (idlwave-do-context-help arg)) 6848 (idlwave-do-context-help arg))
@@ -6711,7 +6874,7 @@ Works for system routines and keywords only."
6711 (if idlwave-help-is-loaded 6874 (if idlwave-help-is-loaded
6712 t ;; everything is OK. 6875 t ;; everything is OK.
6713 (let* ((dir (or (idlwave-help-directory) 6876 (let* ((dir (or (idlwave-help-directory)
6714 (error "Online Help is not installed (idlwave-help-directory is unknown)"))) 6877 (error "Online Help not installed (help directory unknown) - download at idlwave.org")))
6715 (lfile1 (expand-file-name "idlw-help.elc" dir)) 6878 (lfile1 (expand-file-name "idlw-help.elc" dir))
6716 (lfile2 (expand-file-name "idlw-help.el" dir)) 6879 (lfile2 (expand-file-name "idlw-help.el" dir))
6717 (hfile (expand-file-name "idlw-help.txt" dir))) 6880 (hfile (expand-file-name "idlw-help.txt" dir)))