diff options
| author | J.D. Smith | 2002-09-12 17:24:53 +0000 |
|---|---|---|
| committer | J.D. Smith | 2002-09-12 17:24:53 +0000 |
| commit | 76959b779646d9113e87335d0781837610ffd2d8 (patch) | |
| tree | 0c7418dbfb6cc23c24a8f9fca09ae06dd4d56f37 | |
| parent | dd6478be6ac27039a3710260e00f6db79c262aed (diff) | |
| download | emacs-76959b779646d9113e87335d0781837610ffd2d8.tar.gz emacs-76959b779646d9113e87335d0781837610ffd2d8.zip | |
Updated to IDLWAVE version 4.15. See idlwave.org.
| -rw-r--r-- | lisp/progmodes/idlw-rinfo.el | 124 | ||||
| -rw-r--r-- | lisp/progmodes/idlw-shell.el | 751 | ||||
| -rw-r--r-- | lisp/progmodes/idlw-toolbar.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/idlwave.el | 553 | ||||
| -rw-r--r-- | man/idlwave.texi | 484 |
5 files changed, 1161 insertions, 753 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. | ||
| 146 | This string is sent to the IDL process by `idlwave-shell-mode' which is | ||
| 147 | invoked 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. | ||
| 153 | The file `idlwave-shell-command-history-file' is used to save and restore | ||
| 154 | the 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. | ||
| 160 | In order to change the size of the history, see the variable | ||
| 161 | `comint-input-ring-size'. | ||
| 162 | The history is only saved if the variable `idlwave-shell-save-command-history' | ||
| 163 | is 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. | ||
| 207 | Each entry is a cons cell with the name of a variable and a value. | ||
| 208 | The function `idlwave-shell-mode' will make local variables out of each entry. | ||
| 209 | Changes to this variable will only be active when the shell buffer is | ||
| 210 | newly 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. |
| 273 | Used for file name completion. Must not contain `'', `,' and `\"' | 232 | Used for file name completion. Must not contain `'', `,' and `\"' |
| 274 | because these are used as separators by IDL." | 233 | because 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. |
| 244 | The command is `C-c C-d C-f' and accepts as a prefix the window nr. | ||
| 245 | A 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. | ||
| 259 | This string is sent to the IDL process by `idlwave-shell-mode' which is | ||
| 260 | invoked 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. | ||
| 266 | The file `idlwave-shell-command-history-file' is used to save and restore | ||
| 267 | the 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. | ||
| 273 | In order to change the size of the history, see the variable | ||
| 274 | `comint-input-ring-size'. | ||
| 275 | The history is only saved if the variable `idlwave-shell-save-command-history' | ||
| 276 | is 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. | ||
| 283 | Possibilities are 'run, 'debug, 'breakpoint, and 'misc . Unlisted | ||
| 284 | types are not displayed in the shell. The single type 'everything | ||
| 285 | causes 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 |
| 300 | a command to the shell, with special sequence `___' replaced by the | 309 | a command to the shell, with special sequence `___' replaced by the |
| 301 | expression being examined." | 310 | expression 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. | ||
| 331 | Each entry is a cons cell with the name of a variable and a value. | ||
| 332 | The function `idlwave-shell-mode' will make local variables out of each entry. | ||
| 333 | Changes to this variable will only be active when the shell buffer is | ||
| 334 | newly 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. |
| 315 | The spells are strings printed by your IDL program and matched | 346 | The spells are strings printed by your IDL program and matched |
| 316 | by the regular expressions in `idlwave-shell-input-mode-spells'. | 347 | by the regular expressions in `idlwave-shell-input-mode-spells'. |
| 317 | When these expressions match, IDLWAVE switches to character input mode and | 348 | When these expressions match, IDLWAVE switches to character input mode and |
| 318 | back, respectively. See `idlwave-shell-input-mode-spells' for details." | 349 | back, 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 |
| 374 | end" | 405 | end" |
| 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. | ||
| 383 | The command is `C-c C-d C-f' and accepts as a prefix the window nr. | ||
| 384 | A 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)." | |||
| 540 | This is used to speed up the reloading of the routine info procedure | 562 | This is used to speed up the reloading of the routine info procedure |
| 541 | before use by the shell.") | 563 | before 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 |
| 545 | the directory stack.") | 567 | the 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. | ||
| 1050 | Return 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 |
| 1023 | If 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 | 1059 | CMD, in `idlwave-shell-pending-commands' is sent to the IDL process. |
| 1025 | second argument PCMD is non-nil it will be placed on | 1060 | If 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 |
| 1027 | third argument HIDE is non-nil, then hide output from CMD. | 1062 | optional third argument HIDE is non-nil, then hide output from CMD. |
| 1028 | If optional fourth argument PREEMPT is non-nil CMD is put at front of | 1063 | If 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 | 1065 | output to complete and the next prompt to arrive before returning | |
| 1031 | IDL is considered ready if the prompt is present | 1066 | \(useful if you need an answer now\). IDL is considered ready if the |
| 1032 | and if `idlwave-shell-ready' is non-nil." | 1067 | prompt 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'. |
| 1177 | Otherwise just do `previous-line'." | 1222 | Otherwise 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. | |||
| 1367 | For breakpoint messages process any attached count or command | 1416 | For breakpoint messages process any attached count or command |
| 1368 | parameters. | 1417 | parameters. |
| 1369 | Update the windows if a message is found." | 1418 | Update 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 | |||
| 1498 | unlikely." | 1535 | unlikely." |
| 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. |
| 1592 | This command queries IDL with the command bound to | 1631 | This 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 |
| 1594 | output for the new directory stack." | 1633 | directory." |
| 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. |
| 1623 | This issues the following commands: | 1662 | This issues the following commands: |
| 1624 | RETALL | 1663 | RETALL |
| 1625 | WIDGET_CONTROL,/RESET | 1664 | WIDGET_CONTROL,/RESET |
| @@ -1752,20 +1791,62 @@ HEAP_GC, /VERBOSE" | |||
| 1752 | Change the default directory for the process buffer to concur." | 1791 | Change 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. |
| 1765 | Calls `idlwave-shell-complete-filename' after some executive commands or | 1847 | Calls `idlwave-shell-complete-filename' after some executive commands or |
| 1766 | in strings. Otherwise, calls `idlwave-complete' to complete modules and | 1848 | in strings. Otherwise, calls `idlwave-complete' to complete modules and |
| 1767 | keywords." | 1849 | keywords." |
| 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. |
| 1792 | We assume that we are after a file name when completing one of the | 1877 | We assume that we are after a file name when completing one of the |
| 1793 | args of an executive .run, .rnew or .compile. Also, in a string | 1878 | args of an executive .run, .rnew or .compile." |
| 1794 | constant we complete file names. Otherwise return nil, so that | 1879 | ;; CWD might have changed, resync, to set default directory |
| 1795 | other 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 | ||
| 2026 | If Count is nil then an ordinary breakpoint is set. We treat a count | 2103 | If 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 | |||
| 2032 | the breakpoint." | 2109 | the 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. | ||
| 2245 | If 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. |
| 2245 | Runs to the last statement and then steps 1 statement. Use the .out command." | 2344 | Runs 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." | |||
| 2844 | The breakpoint will be placed at the beginning of the statement on the | 2964 | The breakpoint will be placed at the beginning of the statement on the |
| 2845 | line specified by BP or at the next IDL statement if that line is not | 2965 | line specified by BP or at the next IDL statement if that line is not |
| 2846 | a statement. | 2966 | a statement. |
| 2847 | Determines IDL's internal representation for the breakpoint, which may | 2967 | Determines IDL's internal representation for the breakpoint which may |
| 2848 | have occurred at a different line than used with the breakpoint | 2968 | have occured at a different line then used with the breakpoint |
| 2849 | command." | 2969 | command." |
| 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'." | |||
| 653 | When IDLWAVE tries to complete object-oriented methods, it usually | 660 | When IDLWAVE tries to complete object-oriented methods, it usually |
| 654 | cannot determine the class of a given object from context. In order | 661 | cannot determine the class of a given object from context. In order |
| 655 | to provide the user with a correct list of methods or keywords, it | 662 | to provide the user with a correct list of methods or keywords, it |
| 656 | needs have to determine the appropriate class. IDLWAVE has two ways | 663 | needs to determine the appropriate class. IDLWAVE has two ways of |
| 657 | to deal with this problem. | 664 | doing this (well, three ways if you count the shell... see |
| 658 | 665 | `idlwave-shell-query-for-class'): | |
| 659 | 1. One possibility is to combine the items of all available classes | 666 | |
| 660 | which contain this method for the purpose of completion. So when | 667 | 1. 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 | ||
| 669 | 2. The second possibility is to ask the user on each occasion. To | 677 | 2. 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. |
| 1527 | KEY is a string - same as for the `define-key' function. CMD is a | 1528 | KEY 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. |
| 2135 | Also checks if the correct end statement has been used." | 2138 | Also 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. |
| 2593 | Returns position after label. | 2617 | Returns 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 | |||
| 2656 | statement." | 2681 | statement." |
| 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'. | |||
| 5264 | If such a function returns `t', *no further* attempts to complete | 5314 | If such a function returns `t', *no further* attempts to complete |
| 5265 | other contexts will be done. If the function returns `nil', other completions | 5315 | other contexts will be done. If the function returns `nil', other completions |
| 5266 | will be tried.") | 5316 | will 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. | ||
| 5578 | Must 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 |
| 5808 | and also not part of the current identifier. Since we do this in | 5879 | and 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. |
| 5842 | SELECTOR is the PREDICATE argument for the completion function. | 5913 | SELECTOR is the PREDICATE argument for the completion function. Show |
| 5843 | Show PROMPT in echo area. TYPE is one of 'function, 'procedure or 'keyword." | 5914 | PROMPT 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. |
| 6284 | Point is expected just before the opening `{' of the struct definition." | 6382 | Point 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 | |||
| 6324 | integer, limit the search. If BOUND is the symbol `all', we search | 6422 | integer, limit the search. If BOUND is the symbol `all', we search |
| 6325 | first back and then forward through the entire file. If BOUND is the | 6423 | first back and then forward through the entire file. If BOUND is the |
| 6326 | symbol `back' we search only backward." | 6424 | symbol `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 | ||
| 6716 | associated 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. |
| 6679 | If point is on a keyword, help for that keyword will be shown. | 6839 | If point is on a keyword, help for that keyword will be shown. If |
| 6680 | If point is on a routine name or in the argument list of a routine, | 6840 | point is on a routine name or in the argument list of a routine, help |
| 6681 | help for that routine will be displayed. | 6841 | for that routine will be displayed. Works for system routines and |
| 6682 | Works for system routines and keywords only." | 6842 | keywords, it pulls up text help. For other routies and keywords, |
| 6843 | visits the source file, finding help in the header (if | ||
| 6844 | `idlwave-help-source-try-header' is non-nil) or the routine definition | ||
| 6845 | itself." | ||
| 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))) |
diff --git a/man/idlwave.texi b/man/idlwave.texi index a087e3e0778..903b648e3c9 100644 --- a/man/idlwave.texi +++ b/man/idlwave.texi | |||
| @@ -9,12 +9,12 @@ | |||
| 9 | @synindex ky cp | 9 | @synindex ky cp |
| 10 | @syncodeindex vr cp | 10 | @syncodeindex vr cp |
| 11 | @syncodeindex fn cp | 11 | @syncodeindex fn cp |
| 12 | @set VERSION 4.14 | 12 | @set VERSION 4.15 |
| 13 | @set EDITION 4.14 | 13 | @set EDITION 4.15 |
| 14 | @set IDLVERSION 5.5 | 14 | @set IDLVERSION 5.5 |
| 15 | @set NSYSROUTINES 1322 | 15 | @set NSYSROUTINES 1324 |
| 16 | @set NSYSKEYWORDS 5952 | 16 | @set NSYSKEYWORDS 6129 |
| 17 | @set DATE June 2002 | 17 | @set DATE September 2002 |
| 18 | @set AUTHOR J.D. Smith & Carsten Dominik | 18 | @set AUTHOR J.D. Smith & Carsten Dominik |
| 19 | @set AUTHOR-EMAIL dominik@@astro.uva.nl | 19 | @set AUTHOR-EMAIL dominik@@astro.uva.nl |
| 20 | @set MAINTAINER J.D. Smith | 20 | @set MAINTAINER J.D. Smith |
| @@ -145,12 +145,13 @@ Completion | |||
| 145 | 145 | ||
| 146 | * Case of Completed Words:: CaseOFcomPletedWords | 146 | * Case of Completed Words:: CaseOFcomPletedWords |
| 147 | * Object Method Completion and Class Ambiguity:: obj->Method, what? | 147 | * Object Method Completion and Class Ambiguity:: obj->Method, what? |
| 148 | * Object Method Completion in the Shell:: | ||
| 148 | * Class and Keyword Inheritance:: obj->Method, _EXTRA=e | 149 | * Class and Keyword Inheritance:: obj->Method, _EXTRA=e |
| 149 | * Structure Tag Completion:: Completing state.Tag | 150 | * Structure Tag Completion:: Completing state.Tag |
| 150 | 151 | ||
| 151 | Actions | 152 | Actions |
| 152 | 153 | ||
| 153 | * Block Boundary Check:: Is the END correct | 154 | * Block Boundary Check:: Is the END statement correct? |
| 154 | * Padding Operators:: Enforcing space around `=' etc | 155 | * Padding Operators:: Enforcing space around `=' etc |
| 155 | * Case Changes:: Enforcing upper case keywords | 156 | * Case Changes:: Enforcing upper case keywords |
| 156 | 157 | ||
| @@ -158,15 +159,17 @@ The IDLWAVE Shell | |||
| 158 | 159 | ||
| 159 | * Starting the Shell:: How to launch IDL as a subprocess | 160 | * Starting the Shell:: How to launch IDL as a subprocess |
| 160 | * Using the Shell:: Interactively working with the Shell | 161 | * Using the Shell:: Interactively working with the Shell |
| 161 | * Debugging IDL Programs:: Compilation/Debugging | 162 | * Commands Sent to the Shell:: |
| 163 | * Debugging IDL Programs:: | ||
| 162 | * Examining Variables:: | 164 | * Examining Variables:: |
| 163 | * Custom Expression Examination:: | 165 | * Custom Expression Examination:: |
| 164 | 166 | ||
| 165 | Debugging IDL Programs | 167 | Debugging IDL Programs |
| 166 | 168 | ||
| 167 | * Compiling Programs:: Compiling buffers under the shell | 169 | * Debug Key Bindings:: |
| 168 | * Breakpoints and Stepping:: Deciding where to stop and look | 170 | * Compiling Programs:: |
| 169 | * Walking the Calling Stack:: From where was this routine called? | 171 | * Breakpoints and Stepping:: |
| 172 | * Walking the Calling Stack:: | ||
| 170 | 173 | ||
| 171 | Installation | 174 | Installation |
| 172 | 175 | ||
| @@ -203,9 +206,7 @@ inferior shell@footnote{Note that this package has nothing to do with | |||
| 203 | the Interface Definition Language, part of the Common Object Request | 206 | the Interface Definition Language, part of the Common Object Request |
| 204 | Broker Architecture (CORBA)}. It can also be used for editing source | 207 | Broker Architecture (CORBA)}. It can also be used for editing source |
| 205 | files for the related WAVE/CL language, but with only limited | 208 | files for the related WAVE/CL language, but with only limited |
| 206 | support. Note that this package has nothing to do with the Interface | 209 | support. |
| 207 | Definition Language, part of the Common Object Request Broker | ||
| 208 | Architecture (CORBA). | ||
| 209 | 210 | ||
| 210 | IDLWAVE consists of two main parts: a major mode for editing IDL source | 211 | IDLWAVE consists of two main parts: a major mode for editing IDL source |
| 211 | files files (@code{idlwave-mode}) and a mode for running the IDL program | 212 | files files (@code{idlwave-mode}) and a mode for running the IDL program |
| @@ -223,7 +224,7 @@ Context-sensitive display of calling sequences and keywords for more | |||
| 223 | than 1000 native IDL routines, extendible to any number of additional | 224 | than 1000 native IDL routines, extendible to any number of additional |
| 224 | routines in your local IDL libraries. | 225 | routines in your local IDL libraries. |
| 225 | @item | 226 | @item |
| 226 | Name space conflict search, with likelihood ranking. | 227 | Routine name space conflict search, likelihood-of-use ranking. |
| 227 | @item | 228 | @item |
| 228 | Fast, context-sensitive online help. | 229 | Fast, context-sensitive online help. |
| 229 | @item | 230 | @item |
| @@ -370,6 +371,9 @@ at point. | |||
| 370 | (setq idlwave-help-directory "~/.idlwave") | 371 | (setq idlwave-help-directory "~/.idlwave") |
| 371 | @end lisp | 372 | @end lisp |
| 372 | 373 | ||
| 374 | @ifhtml | ||
| 375 | <A NAME="TUTORIAL"></A> | ||
| 376 | @end ifhtml | ||
| 373 | @node Getting Started, The IDLWAVE Major Mode, IDLWAVE in a Nutshell, Top | 377 | @node Getting Started, The IDLWAVE Major Mode, IDLWAVE in a Nutshell, Top |
| 374 | @chapter Getting Started (Tutorial) | 378 | @chapter Getting Started (Tutorial) |
| 375 | @cindex Quick-Start | 379 | @cindex Quick-Start |
| @@ -750,12 +754,12 @@ languages along its 25+ year history, has inherited an unusual mix of | |||
| 750 | syntax elements. Left to his or her own devices, a novice IDL | 754 | syntax elements. Left to his or her own devices, a novice IDL |
| 751 | programmer will often conjure code which is very difficult to read and | 755 | programmer will often conjure code which is very difficult to read and |
| 752 | impossible to adapt. Much can be gleaned from studying available IDL | 756 | impossible to adapt. Much can be gleaned from studying available IDL |
| 753 | code libraries for coding style pointers, but, due to the variety of IDL | 757 | code libraries for coding style pointers, but, due to the variety of |
| 754 | syntax elements, replicating this style can be challenging at best. | 758 | IDL syntax elements, replicating this style can be challenging at |
| 755 | Luckily, IDLWAVE understands the structure IDL code very well, and takes | 759 | best. Luckily, IDLWAVE understands the structure of IDL code very |
| 756 | care of almost all formatting issues for you. After configuring it to | 760 | well, and takes care of almost all formatting issues for you. After |
| 757 | match your coding standards, you can rely on it to help keep your code | 761 | configuring it to match your coding standards, you can rely on it to |
| 758 | neat and organized. | 762 | help keep your code neat and organized. |
| 759 | 763 | ||
| 760 | @cindex Foreign code, adapting | 764 | @cindex Foreign code, adapting |
| 761 | @cindex Indentation, of foreign code | 765 | @cindex Indentation, of foreign code |
| @@ -831,19 +835,20 @@ function thisfunctionnameisverylongsoitwillleavelittleroom, a, b, $ | |||
| 831 | c, d | 835 | c, d |
| 832 | @end example | 836 | @end example |
| 833 | 837 | ||
| 834 | You can instruct IDLWAVE when to use this special continuation | 838 | You can instruct IDLWAVE when to avoid using this special continuation |
| 835 | indentation by setting the variable | 839 | indentation by setting the variable |
| 836 | @code{idlwave-max-extra-continuation-indent}, which specifies the | 840 | @code{idlwave-max-extra-continuation-indent}, which specifies the |
| 837 | maximum additional indentation beyond the basic indent to be tolerated, | 841 | maximum additional indentation beyond the basic indent to be |
| 838 | otherwise defaulting to fixed-offset from the enclosing indent (the size | 842 | tolerated, otherwise defaulting to a fixed-offset from the enclosing |
| 839 | of which offset is set in @code{idlwave-continuation-indent}). Also, | 843 | indent (the size of which offset is set in |
| 840 | since the indentation level is somewhat dynamic in continued statements | 844 | @code{idlwave-continuation-indent}). Also, since the indentation |
| 841 | with special continuation indentation, especially if | 845 | level can be somewhat dynamic in continued statements with special |
| 842 | @code{idlwave-max-extra-continuation-indent} is small, the key @kbd{C-u | 846 | continuation indentation, especially if |
| 843 | @key{TAB}} will re-indent all lines in the current statement. Note that | 847 | @code{idlwave-max-extra-continuation-indent} is small, the key |
| 844 | @code{idlwave-indent-to-open-paren}, if non-nil, overrides the | 848 | @kbd{C-u @key{TAB}} will re-indent all lines in the current statement. |
| 845 | @code{idlwave-max-extra-continuation-indent} limit, for parentheses | 849 | Note that @code{idlwave-indent-to-open-paren}, if non-nil, overrides |
| 846 | only, forcing them always to line up. | 850 | the @code{idlwave-max-extra-continuation-indent} limit, for |
| 851 | parentheses only, forcing them always to line up. | ||
| 847 | 852 | ||
| 848 | 853 | ||
| 849 | @defopt idlwave-continuation-indent (@code{2}) | 854 | @defopt idlwave-continuation-indent (@code{2}) |
| @@ -882,7 +887,7 @@ unchanged. | |||
| 882 | @item @code{;;} | 887 | @item @code{;;} |
| 883 | @tab Lines starting with two semicolons are indented like the surrounding code. | 888 | @tab Lines starting with two semicolons are indented like the surrounding code. |
| 884 | @item @code{;} | 889 | @item @code{;} |
| 885 | @tab Lines starting with a single semicolon are indent to a minimum column. | 890 | @tab Lines starting with a single semicolon are indented to a minimum column. |
| 886 | @end multitable | 891 | @end multitable |
| 887 | 892 | ||
| 888 | @noindent | 893 | @noindent |
| @@ -1045,21 +1050,23 @@ consistent with the notation for hexadecimal numbers, e.g. @code{'C5'XB}. | |||
| 1045 | @cindex Shell, querying for routine info | 1050 | @cindex Shell, querying for routine info |
| 1046 | 1051 | ||
| 1047 | @kindex C-c C-i | 1052 | @kindex C-c C-i |
| 1048 | IDL comes bundled with more than one thousand procedures, functions and | 1053 | IDL comes bundled with more than one thousand procedures, functions |
| 1049 | object methods, and large libraries typically contain hundreds or even | 1054 | and object methods, and large libraries typically contain hundreds or |
| 1050 | thousands more. This large command set makes it difficult to remember | 1055 | even thousands more (each with a few to tens of keywords and |
| 1051 | the calling sequence and keywords for routines you use, but IDLWAVE can | 1056 | arguments). This large command set can make it difficult to remember |
| 1052 | help. It builds up routine information using a wide variety of sources: | 1057 | the calling sequence and keywords for the routines you use, but |
| 1053 | IDLWAVE in fact knows far more about the routines on your system than | 1058 | IDLWAVE can help. It builds up routine information using a wide |
| 1054 | IDL itself. It maintains a list of all built-in routines, with calling | 1059 | variety of sources: IDLWAVE in fact knows far more about the routines |
| 1055 | sequences and keywords@footnote{This list is created by scanning the IDL | 1060 | on your system than IDL itself. It maintains a list of all built-in |
| 1056 | manuals and might contain (very few) errors. Please report any errors | 1061 | routines, with calling sequences and keywords@footnote{This list is |
| 1057 | to the maintainer, so that they can be fixed.}. It also scans Emacs | 1062 | created by scanning the IDL manuals and might contain (very few) |
| 1058 | buffers and library files for routine definitions, and queries the | 1063 | errors. Please report any errors to the maintainer, so that they can |
| 1059 | IDLWAVE-Shell for information about routines currently compiled there. | 1064 | be fixed.}. It also scans Emacs buffers and library files for routine |
| 1060 | This information is updated automatically, and so should usually be | 1065 | definitions, and queries the IDLWAVE-Shell for information about |
| 1061 | current. To force a global update and refresh the routine information, | 1066 | routines currently compiled there. This information is updated |
| 1062 | use @kbd{C-c C-i} (@code{idlwave-update-routine-info}). | 1067 | automatically, and so should usually be current. To force a global |
| 1068 | update and refresh the routine information, use @kbd{C-c C-i} | ||
| 1069 | (@code{idlwave-update-routine-info}). | ||
| 1063 | 1070 | ||
| 1064 | @kindex C-c ? | 1071 | @kindex C-c ? |
| 1065 | To display the information about a routine, press @kbd{C-c ?}, which | 1072 | To display the information about a routine, press @kbd{C-c ?}, which |
| @@ -1218,11 +1225,11 @@ Maximum number of source files displayed in the Routine Info window. | |||
| 1218 | For IDL system routines, RSI provides extensive documentation. IDLWAVE | 1225 | For IDL system routines, RSI provides extensive documentation. IDLWAVE |
| 1219 | can access an ASCII version of this documentation very quickly and | 1226 | can access an ASCII version of this documentation very quickly and |
| 1220 | accurately. This is @emph{much} faster than using the IDL online help | 1227 | accurately. This is @emph{much} faster than using the IDL online help |
| 1221 | application, because usually IDLWAVE gets you to the right place in the | 1228 | application, because IDLWAVE usually gets you to the right place in the |
| 1222 | docs directly, without any additional browsing and scrolling. For this | 1229 | documentation directly, without any additional browsing and scrolling. |
| 1223 | online help to work, an ASCII version of the IDL documentation, which is | 1230 | For this online help to work, an ASCII version of the IDL documentation, |
| 1224 | not part of the standalone IDLWAVE distribution, is required. The | 1231 | which is not part of the standalone IDLWAVE distribution, is required. |
| 1225 | necessary help files can be downloaded from | 1232 | The necessary help files can be downloaded from |
| 1226 | @uref{@value{IDLWAVE-HOMEPAGE}, the maintainers webpage}. The text | 1233 | @uref{@value{IDLWAVE-HOMEPAGE}, the maintainers webpage}. The text |
| 1227 | extracted from the PDF files is fine for normal documentation | 1234 | extracted from the PDF files is fine for normal documentation |
| 1228 | paragraphs, but graphics and multiline equations will not be well | 1235 | paragraphs, but graphics and multiline equations will not be well |
| @@ -1240,12 +1247,20 @@ delimited in @code{<NEW>..</NEW>} blocks. | |||
| 1240 | @cindex Source code, as online help | 1247 | @cindex Source code, as online help |
| 1241 | @cindex DocLib header, as online help | 1248 | @cindex DocLib header, as online help |
| 1242 | For routines which are not documented in the IDL manual (for example | 1249 | For routines which are not documented in the IDL manual (for example |
| 1243 | your own routines), the source code is used as help text. If the | 1250 | personal or library routines), the source code itself is used as help |
| 1244 | requested information can be found in a (more or less) standard DocLib | 1251 | text. If the requested information can be found in a (more or less) |
| 1245 | file header, IDLWAVE shows the header (scrolling down to appropriate | 1252 | standard DocLib file header, IDLWAVE shows the header (scrolling down to |
| 1246 | keywords). Otherwise the routine definition statement | 1253 | appropriate keyword). Otherwise the routine definition statement |
| 1247 | (@code{pro}/@code{function}) is shown. | 1254 | (@code{pro}/@code{function}) is shown. |
| 1248 | 1255 | ||
| 1256 | @cindex Structure tags, in online help | ||
| 1257 | @cindex Class tags, in online help | ||
| 1258 | Help is also available for class structure tags (@code{self.TAG}), and | ||
| 1259 | generic structure tags, if structure tag completion is enabled | ||
| 1260 | (@pxref{Structure Tag Completion}). This is implemented by visiting the | ||
| 1261 | tag within the class or structure definition source itself. Help is not | ||
| 1262 | available on built-in system class tags. | ||
| 1263 | |||
| 1249 | @kindex M-? | 1264 | @kindex M-? |
| 1250 | In any IDL program (or, as with most IDLWAVE commands, in the IDL | 1265 | In any IDL program (or, as with most IDLWAVE commands, in the IDL |
| 1251 | Shell), press @kbd{M-?} (@code{idlwave-context-help}), or click with | 1266 | Shell), press @kbd{M-?} (@code{idlwave-context-help}), or click with |
| @@ -1268,6 +1283,10 @@ locations are recognized context for help: | |||
| 1268 | @tab Beyond the class name in an @code{OBJ_NEW} call. | 1283 | @tab Beyond the class name in an @code{OBJ_NEW} call. |
| 1269 | @item @i{Executive Command} | 1284 | @item @i{Executive Command} |
| 1270 | @tab An executive command like @code{.RUN}. Mostly useful in the shell. | 1285 | @tab An executive command like @code{.RUN}. Mostly useful in the shell. |
| 1286 | @item @i{Structure Tags} | ||
| 1287 | @tab In structure tags like @code{state.xsize} | ||
| 1288 | @item @i{Structure Tags} | ||
| 1289 | @tab In class tags like @code{self.value}. | ||
| 1271 | @item @i{Default} | 1290 | @item @i{Default} |
| 1272 | @tab The routine that would be selected for routine info display. | 1291 | @tab The routine that would be selected for routine info display. |
| 1273 | @end multitable | 1292 | @end multitable |
| @@ -1290,9 +1309,11 @@ Online help for routines and keywords can be accessed through the | |||
| 1290 | Routine Info display. Click with @kbd{Mouse-3} on an item to see the | 1309 | Routine Info display. Click with @kbd{Mouse-3} on an item to see the |
| 1291 | corresponding help (@pxref{Routine Info}). | 1310 | corresponding help (@pxref{Routine Info}). |
| 1292 | @item | 1311 | @item |
| 1293 | When using completion and Emacs pops up a window with possible | 1312 | When using completion and Emacs pops up a @file{*Completions*} buffer |
| 1294 | completions, clicking with @kbd{Mouse-3} on a completion item invokes | 1313 | with possible completions, clicking with @kbd{Mouse-3} on a completion |
| 1295 | help on that item (@pxref{Completion}). | 1314 | item invokes help on that item (@pxref{Completion}). Items for which |
| 1315 | help is available in the online system documentation (vs. just the | ||
| 1316 | program source itself) will be emphasized (e.g. colored blue). | ||
| 1296 | @end itemize | 1317 | @end itemize |
| 1297 | @noindent | 1318 | @noindent |
| 1298 | In both cases, a blue face indicates that the item is documented in the | 1319 | In both cases, a blue face indicates that the item is documented in the |
| @@ -1431,10 +1452,10 @@ name = 'a_ @r{File name (default inside quotes)} | |||
| 1431 | @cindex Completion, ambiguity | 1452 | @cindex Completion, ambiguity |
| 1432 | @cindex Completion, forcing function name | 1453 | @cindex Completion, forcing function name |
| 1433 | The only place where completion is ambiguous is procedure/function | 1454 | The only place where completion is ambiguous is procedure/function |
| 1434 | @emph{keywords} versus @emph{functions}. After @samp{plot,x_}, IDLWAVE | 1455 | @emph{keywords} versus @emph{functions}. After @samp{plot,x,_}, IDLWAVE |
| 1435 | will always assume a keyword to plot. You can force completion of a | 1456 | will always assume a keyword to @samp{plot}. However, a function is |
| 1436 | function name at such a location with a prefix arg: @kbd{C-u | 1457 | also a possible completion here. You can force completion of a function |
| 1437 | M-@key{TAB}}. | 1458 | name at such a location by using a prefix arg: @kbd{C-u M-@key{TAB}}. |
| 1438 | 1459 | ||
| 1439 | @cindex Scrolling the @file{*Completions*} window | 1460 | @cindex Scrolling the @file{*Completions*} window |
| 1440 | @cindex Completion, scrolling | 1461 | @cindex Completion, scrolling |
| @@ -1445,9 +1466,18 @@ If the list of completions is too long to fit in the | |||
| 1445 | @kbd{M-@key{TAB}} repeatedly. Online help (if installed) for each | 1466 | @kbd{M-@key{TAB}} repeatedly. Online help (if installed) for each |
| 1446 | possible completion is available by clicking with @kbd{Mouse-3} on the | 1467 | possible completion is available by clicking with @kbd{Mouse-3} on the |
| 1447 | item. Items for which system online help (from the IDL manual) is | 1468 | item. Items for which system online help (from the IDL manual) is |
| 1448 | available will be displayed in a different font (e.g. colored blue). | 1469 | available will be emphasized (e.g. colored blue). For other items, the |
| 1449 | For other items, the corresponding source code or DocLib header will be | 1470 | corresponding source code or DocLib header will be used as the help |
| 1450 | used as the help text. | 1471 | text. |
| 1472 | |||
| 1473 | @cindex Completion, cancelling | ||
| 1474 | @cindex Cancelling completion | ||
| 1475 | Completion is not a blocking operation --- you are free to continue | ||
| 1476 | editing, enter commands, or simply ignore the @file{*Completions*} | ||
| 1477 | buffer during a completion operation. If, however, the most recent | ||
| 1478 | command was a completion, @kbd{C-g} will remove the buffer and restore | ||
| 1479 | the window configuration. You can also remove the buffer at any time | ||
| 1480 | with no negative consequences. | ||
| 1451 | 1481 | ||
| 1452 | @defopt idlwave-keyword-completion-adds-equal (@code{t}) | 1482 | @defopt idlwave-keyword-completion-adds-equal (@code{t}) |
| 1453 | Non-@code{nil} means completion automatically adds @samp{=} after | 1483 | Non-@code{nil} means completion automatically adds @samp{=} after |
| @@ -1473,6 +1503,7 @@ available. | |||
| 1473 | @menu | 1503 | @menu |
| 1474 | * Case of Completed Words:: CaseOFcomPletedWords | 1504 | * Case of Completed Words:: CaseOFcomPletedWords |
| 1475 | * Object Method Completion and Class Ambiguity:: obj->Method, what? | 1505 | * Object Method Completion and Class Ambiguity:: obj->Method, what? |
| 1506 | * Object Method Completion in the Shell:: | ||
| 1476 | * Class and Keyword Inheritance:: obj->Method, _EXTRA=e | 1507 | * Class and Keyword Inheritance:: obj->Method, _EXTRA=e |
| 1477 | * Structure Tag Completion:: Completing state.Tag | 1508 | * Structure Tag Completion:: Completing state.Tag |
| 1478 | @end menu | 1509 | @end menu |
| @@ -1512,7 +1543,7 @@ Non-@code{nil} means the empty string is considered lower case for | |||
| 1512 | completion. | 1543 | completion. |
| 1513 | @end defopt | 1544 | @end defopt |
| 1514 | 1545 | ||
| 1515 | @node Object Method Completion and Class Ambiguity, Class and Keyword Inheritance, Case of Completed Words, Completion | 1546 | @node Object Method Completion and Class Ambiguity, Object Method Completion in the Shell, Case of Completed Words, Completion |
| 1516 | @subsection Object Method Completion and Class Ambiguity | 1547 | @subsection Object Method Completion and Class Ambiguity |
| 1517 | @cindex Object methods | 1548 | @cindex Object methods |
| 1518 | @cindex Class ambiguity | 1549 | @cindex Class ambiguity |
| @@ -1537,14 +1568,18 @@ narrow down the number of possible completions. The variable | |||
| 1537 | @code{idlwave-query-class} can be configured to make such prompting the | 1568 | @code{idlwave-query-class} can be configured to make such prompting the |
| 1538 | default for all methods (not recommended), or selectively for very | 1569 | default for all methods (not recommended), or selectively for very |
| 1539 | common methods for which the number of completing keywords would be too | 1570 | common methods for which the number of completing keywords would be too |
| 1540 | large (e.g. @code{Init}). After you have specified the class for a | 1571 | large (e.g. @code{Init}). |
| 1541 | particular statement (e.g. when completing the method), IDLWAVE can | 1572 | |
| 1542 | remember it for the rest of the editing session. Subsequent completions | 1573 | @cindex Saving object class on @code{->} |
| 1543 | in the same statement (e.g. keywords) can then reuse this class | 1574 | @cindex @code{->} |
| 1544 | information. This works by placing a text property on the method | 1575 | After you have specified the class for a particular statement (e.g. when |
| 1545 | invocation operator @samp{->}, after which the operator will be shown in | 1576 | completing the method), IDLWAVE can remember it for the rest of the |
| 1546 | a different face. This is not enabled by default --- the variable | 1577 | editing session. Subsequent completions in the same statement |
| 1547 | @code{idlwave-store-inquired-class} can be used to turn it on. | 1578 | (e.g. keywords) can then reuse this class information. This works by |
| 1579 | placing a text property on the method invocation operator @samp{->}, | ||
| 1580 | after which the operator will be shown in a different face. This is not | ||
| 1581 | enabled by default --- the variable @code{idlwave-store-inquired-class} | ||
| 1582 | can be used to turn it on. | ||
| 1548 | 1583 | ||
| 1549 | @defopt idlwave-completion-show-classes (@code{1}) | 1584 | @defopt idlwave-completion-show-classes (@code{1}) |
| 1550 | Non-@code{nil} means show classes in @file{*Completions*} buffer when | 1585 | Non-@code{nil} means show classes in @file{*Completions*} buffer when |
| @@ -1569,7 +1604,22 @@ Face to highlight object operator arrows @samp{->} which carry a class | |||
| 1569 | text property. | 1604 | text property. |
| 1570 | @end defopt | 1605 | @end defopt |
| 1571 | 1606 | ||
| 1572 | @node Class and Keyword Inheritance, Structure Tag Completion, Object Method Completion and Class Ambiguity, Completion | 1607 | @node Object Method Completion in the Shell, Class and Keyword Inheritance, Object Method Completion and Class Ambiguity, Completion |
| 1608 | @subsection Object Method Completion in the Shell | ||
| 1609 | @cindex Method Completion in Shell | ||
| 1610 | In the IDLWAVE Shell (@pxref{The IDLWAVE Shell}), objects on which | ||
| 1611 | methods are being invoked have a special property: they must exist as | ||
| 1612 | variables, and so their class can be determined (for instance, using the | ||
| 1613 | @code{obj_class()} function). In the Shell, when attempting completion, | ||
| 1614 | routine info, or online help within a method routine, a query is sent to | ||
| 1615 | determine the class of the object. If this query is successful, the | ||
| 1616 | class found will be used to select appropriate completions, routine | ||
| 1617 | info, or help. If unsuccessful, information from all known classes will | ||
| 1618 | be used (as in the buffer). Setting the variable | ||
| 1619 | @code{idlwave-store-inquired-class} can eliminate unnecessary repetitive | ||
| 1620 | queries for the object's class, and speed up completion. | ||
| 1621 | |||
| 1622 | @node Class and Keyword Inheritance, Structure Tag Completion, Object Method Completion in the Shell, Completion | ||
| 1573 | @subsection Class and Keyword Inheritance | 1623 | @subsection Class and Keyword Inheritance |
| 1574 | @cindex Inheritance, class | 1624 | @cindex Inheritance, class |
| 1575 | @cindex Keyword inheritance | 1625 | @cindex Keyword inheritance |
| @@ -1595,20 +1645,22 @@ entire class inheritance chain. This is often referred to as | |||
| 1595 | @w{@code{self->MySuperClass::SetProperty,_EXTRA=e}}. | 1645 | @w{@code{self->MySuperClass::SetProperty,_EXTRA=e}}. |
| 1596 | 1646 | ||
| 1597 | IDLWAVE can accommodate this special synergy between class and keyword | 1647 | IDLWAVE can accommodate this special synergy between class and keyword |
| 1598 | inheritance: if @code{_EXTRA} or @code{_REF_EXTRA} are detected among a | 1648 | inheritance: if @code{_EXTRA} or @code{_REF_EXTRA} is detected among a |
| 1599 | method's keyword parameters, all keywords of superclass versions of the | 1649 | method's keyword parameters, all keywords of superclass versions of the |
| 1600 | method being considered are included in completion. The completion | 1650 | method being considered are included in completion. There is of course |
| 1601 | buffer will label keywords based on their originating class. The | 1651 | no guarantee that this type of keyword chaining actually occurrs, but |
| 1602 | variable @code{idlwave-keyword-class-inheritance} can be used to | 1652 | for some methods it's a very convenient assumption. The variable |
| 1603 | configure which methods have keyword inheritance treated in this simple, | 1653 | @code{idlwave-keyword-class-inheritance} can be used to configure which |
| 1604 | class-driven way. By default, only @code{Init} and | 1654 | methods have keyword inheritance treated in this simple, class-driven |
| 1605 | @code{(Get|Set)Property} are. | 1655 | way. By default, only @code{Init} and @code{(Get|Set)Property} are. |
| 1656 | The completion buffer will label keywords based on their originating | ||
| 1657 | class. | ||
| 1606 | 1658 | ||
| 1607 | @defopt idlwave-support-inheritance (@code{t}) | 1659 | @defopt idlwave-support-inheritance (@code{t}) |
| 1608 | Non-@code{nil} means consider inheritance during completion, online help etc. | 1660 | Non-@code{nil} means consider inheritance during completion, online help etc. |
| 1609 | @end defopt | 1661 | @end defopt |
| 1610 | 1662 | ||
| 1611 | @defopt idlwave-keyword-class-inheritance | 1663 | @defopt idlwave-keyword-class-inheritance |
| 1612 | A list of regular expressions to match methods for which simple | 1664 | A list of regular expressions to match methods for which simple |
| 1613 | class-driven keyword inheritance will be used for Completion. | 1665 | class-driven keyword inheritance will be used for Completion. |
| 1614 | @end defopt | 1666 | @end defopt |
| @@ -1621,17 +1673,18 @@ class-driven keyword inheritance will be used for Completion. | |||
| 1621 | In many programs, especially those involving widgets, large structures | 1673 | In many programs, especially those involving widgets, large structures |
| 1622 | (e.g. the @samp{state} structure) are used to communicate among | 1674 | (e.g. the @samp{state} structure) are used to communicate among |
| 1623 | routines. It is very convenient to be able to complete structure tags, | 1675 | routines. It is very convenient to be able to complete structure tags, |
| 1624 | in the same way as for instance variables of the @samp{self} object | 1676 | in the same way as for instance variables (tags) of the @samp{self} |
| 1625 | (@pxref{Object Method Completion and Class Ambiguity}). Add-in code for | 1677 | object (@pxref{Object Method Completion and Class Ambiguity}). Add-in |
| 1626 | structure tag completion is available in the form of a loadable | 1678 | code for structure tag completion is available in the form of a loadable |
| 1627 | completion module: @file{idlw-complete-structtag.el}. Tag completion in | 1679 | completion module: @file{idlw-complete-structtag.el}. Tag completion in |
| 1628 | structures is highly ambiguous (much more so than @samp{self} | 1680 | structures is highly ambiguous (much more so than @samp{self} |
| 1629 | completion), so @code{idlw-complete-structtag} makes an unusual and | 1681 | completion), so @code{idlw-complete-structtag} makes an unusual and very |
| 1630 | specific assumption: the exact same variable name is used to refer to | 1682 | specific assumption: the exact same variable name is used to refer to |
| 1631 | the structure in all parts of the program. So, if you consistently | 1683 | the structure in all parts of the program. This is entirely unenforced |
| 1684 | by the IDL language, but is a typical convention. If you consistently | ||
| 1632 | refer to the same structure with the same variable name | 1685 | refer to the same structure with the same variable name |
| 1633 | (e.g. @samp{state}), structure tags which are read from its definition | 1686 | (e.g. @samp{state}), structure tags which are read from its definition |
| 1634 | can be used for completion. | 1687 | in the same file can be used for completion. |
| 1635 | 1688 | ||
| 1636 | Structure tag completion is not enabled by default. To enable it, | 1689 | Structure tag completion is not enabled by default. To enable it, |
| 1637 | simply add the following to your @file{.emacs}: | 1690 | simply add the following to your @file{.emacs}: |
| @@ -1641,6 +1694,9 @@ simply add the following to your @file{.emacs}: | |||
| 1641 | (lambda () (require 'idlw-complete-structtag))) | 1694 | (lambda () (require 'idlw-complete-structtag))) |
| 1642 | @end lisp | 1695 | @end lisp |
| 1643 | 1696 | ||
| 1697 | Once enabled, you'll also be able to access online help on the structure | ||
| 1698 | tags, using the usual methods (@pxref{Online Help}). | ||
| 1699 | |||
| 1644 | @node Routine Source, Resolving Routines, Completion, The IDLWAVE Major Mode | 1700 | @node Routine Source, Resolving Routines, Completion, The IDLWAVE Major Mode |
| 1645 | @section Routine Source | 1701 | @section Routine Source |
| 1646 | @cindex Routine source file | 1702 | @cindex Routine source file |
| @@ -1648,21 +1704,21 @@ simply add the following to your @file{.emacs}: | |||
| 1648 | @cindex Source file, of a routine | 1704 | @cindex Source file, of a routine |
| 1649 | @kindex C-c C-v | 1705 | @kindex C-c C-v |
| 1650 | In addition to clicking on a @i{Source:} line in the routine info | 1706 | In addition to clicking on a @i{Source:} line in the routine info |
| 1651 | window, there is another way to find the source file of a routine. The | 1707 | window, there is another way to quickly visit the source file of a |
| 1652 | command @kbd{C-c C-v} (@code{idlwave-find-module}) asks for a module | 1708 | routine. The command @kbd{C-c C-v} (@code{idlwave-find-module}) asks |
| 1653 | name, offering the same default as @code{idlwave-routine-info} would | 1709 | for a module name, offering the same default as |
| 1654 | have used, taken from nearby buffer contents. In the minibuffer, | 1710 | @code{idlwave-routine-info} would have used, taken from nearby buffer |
| 1655 | specify a complete routine name (including any class part). IDLWAVE | 1711 | contents. In the minibuffer, specify a complete routine name (including |
| 1656 | will display the source file in another window, positioned at the | 1712 | any class part). IDLWAVE will display the source file in another |
| 1657 | routine in question. | 1713 | window, positioned at the routine in question. |
| 1658 | 1714 | ||
| 1659 | @cindex Buffers, killing | 1715 | @cindex Buffers, killing |
| 1660 | @cindex Killing autoloaded buffers | 1716 | @cindex Killing autoloaded buffers |
| 1661 | Since getting the source of a routine into a buffer is so easy with | 1717 | Since getting the source of a routine into a buffer is so easy with |
| 1662 | IDLWAVE, too many buffers visiting different IDL source files are | 1718 | IDLWAVE, too many buffers visiting different IDL source files are |
| 1663 | sometimes created. The special command @kbd{C-c C-k} | 1719 | sometimes created. The special command @kbd{C-c C-k} |
| 1664 | (@code{idlwave-kill-autoloaded-buffers}) can be used to remove these | 1720 | (@code{idlwave-kill-autoloaded-buffers}) can be used to easily remove |
| 1665 | buffers. | 1721 | these buffers. |
| 1666 | 1722 | ||
| 1667 | @node Resolving Routines, Code Templates, Routine Source, The IDLWAVE Major Mode | 1723 | @node Resolving Routines, Code Templates, Routine Source, The IDLWAVE Major Mode |
| 1668 | @section Resolving Routines | 1724 | @section Resolving Routines |
| @@ -1864,29 +1920,30 @@ convenience function @code{idlwave-define-abbrev}: | |||
| 1864 | (add-hook 'idlwave-mode-hook | 1920 | (add-hook 'idlwave-mode-hook |
| 1865 | (lambda () | 1921 | (lambda () |
| 1866 | (idlwave-define-abbrev "wb" "widget_base()" | 1922 | (idlwave-define-abbrev "wb" "widget_base()" |
| 1867 | (idlwave-keyword-abbrev 1)) | 1923 | (idlwave-keyword-abbrev 1)) |
| 1868 | (idlwave-define-abbrev "ine" "IF N_Elements() EQ 0 THEN" | 1924 | (idlwave-define-abbrev "ine" "IF N_Elements() EQ 0 THEN" |
| 1869 | (idlwave-keyword-abbrev 11)))) | 1925 | (idlwave-keyword-abbrev 11)))) |
| 1870 | @end lisp | 1926 | @end lisp |
| 1871 | 1927 | ||
| 1872 | Notice how the abbreviation (here @emph{wb}) and its expansion | 1928 | Notice how the abbreviation (here @emph{wb}) and its expansion |
| 1873 | (@emph{widget_base()}) are given as argument, and the single argument to | 1929 | (@emph{widget_base()}) are given as arguments, and the single argument to |
| 1874 | @code{idlwave-keyword-abbrev} (here @emph{1}) specifies how far back to | 1930 | @code{idlwave-keyword-abbrev} (here @emph{1}) specifies how far back to |
| 1875 | move the point upon expansion (in this example, to put it between the | 1931 | move the point upon expansion (in this example, to put it between the |
| 1876 | parentheses). | 1932 | parentheses). |
| 1877 | 1933 | ||
| 1878 | The abbreviations are expanded in upper or lower case, depending upon | 1934 | The abbreviations are expanded in upper or lower case, depending upon |
| 1879 | the variables @code{idlwave-abbrev-change-case} and (for reserved word | 1935 | the variables @code{idlwave-abbrev-change-case} and, for reserved word |
| 1880 | templates) @code{idlwave-reserved-word-upcase} (@pxref{Case Changes}). | 1936 | templates, @code{idlwave-reserved-word-upcase} (@pxref{Case Changes}). |
| 1881 | 1937 | ||
| 1882 | @defopt idlwave-abbrev-start-char (@code{"\"}) | 1938 | @defopt idlwave-abbrev-start-char (@code{"\"}) |
| 1883 | A single character string used to start abbreviations in abbrev | 1939 | A single character string used to start abbreviations in abbrev mode. |
| 1884 | mode. | 1940 | Beware of common characters which might naturally occur in sequence with |
| 1941 | abbreviation strings. | ||
| 1885 | @end defopt | 1942 | @end defopt |
| 1886 | 1943 | ||
| 1887 | @defopt idlwave-abbrev-move (@code{t}) | 1944 | @defopt idlwave-abbrev-move (@code{t}) |
| 1888 | Non-@code{nil} means the abbrev hook can move point, e.g. to end up | 1945 | Non-@code{nil} means the abbrev hook can move point, e.g. to end up |
| 1889 | between the parenthesis of a function call. | 1946 | between the parentheses of a function call. |
| 1890 | @end defopt | 1947 | @end defopt |
| 1891 | 1948 | ||
| 1892 | @node Actions, Doc Header, Abbreviations, The IDLWAVE Major Mode | 1949 | @node Actions, Doc Header, Abbreviations, The IDLWAVE Major Mode |
| @@ -1894,13 +1951,13 @@ between the parenthesis of a function call. | |||
| 1894 | @cindex Actions | 1951 | @cindex Actions |
| 1895 | @cindex Coding standards, enforcing | 1952 | @cindex Coding standards, enforcing |
| 1896 | 1953 | ||
| 1897 | @emph{Actions} are special commands which are executed automatically | 1954 | @emph{Actions} are special formatting commands which are executed |
| 1898 | while you write code in order to check the structure of the program or | 1955 | automatically while you write code in order to check the structure of |
| 1899 | to enforce coding standards. Most actions which have been implemented | 1956 | the program or to enforce coding standards. Most actions which have |
| 1900 | in IDLWAVE are turned off by default, assuming that the average user | 1957 | been implemented in IDLWAVE are turned off by default, assuming that the |
| 1901 | wants her code the way she writes it. But if you are a lazy typist and | 1958 | average user wants her code the way she writes it. But if you are a |
| 1902 | want your code to adhere to certain standards, actions can be | 1959 | lazy typist and want your code to adhere to certain standards, actions |
| 1903 | helpful. | 1960 | can be helpful. |
| 1904 | 1961 | ||
| 1905 | Actions can be applied in three ways: | 1962 | Actions can be applied in three ways: |
| 1906 | 1963 | ||
| @@ -1931,7 +1988,7 @@ Non-@code{nil} means performs actions when indenting. | |||
| 1931 | @end defopt | 1988 | @end defopt |
| 1932 | 1989 | ||
| 1933 | @menu | 1990 | @menu |
| 1934 | * Block Boundary Check:: Is the END correct | 1991 | * Block Boundary Check:: Is the END statement correct? |
| 1935 | * Padding Operators:: Enforcing space around `=' etc | 1992 | * Padding Operators:: Enforcing space around `=' etc |
| 1936 | * Case Changes:: Enforcing upper case keywords | 1993 | * Case Changes:: Enforcing upper case keywords |
| 1937 | @end menu | 1994 | @end menu |
| @@ -2183,12 +2240,13 @@ Unfortunately IDL for Windows and MacOS do not have command-prompt | |||
| 2183 | versions and thus do not allow the interaction with | 2240 | versions and thus do not allow the interaction with |
| 2184 | Emacs@footnote{Please inform the maintainer if you come up with a way to | 2241 | Emacs@footnote{Please inform the maintainer if you come up with a way to |
| 2185 | make the IDLWAVE shell work on these systems.} --- so the IDLWAVE shell | 2242 | make the IDLWAVE shell work on these systems.} --- so the IDLWAVE shell |
| 2186 | currently only works under GNU and Unix. | 2243 | currently only works under Unix. |
| 2187 | 2244 | ||
| 2188 | @menu | 2245 | @menu |
| 2189 | * Starting the Shell:: How to launch IDL as a subprocess | 2246 | * Starting the Shell:: How to launch IDL as a subprocess |
| 2190 | * Using the Shell:: Interactively working with the Shell | 2247 | * Using the Shell:: Interactively working with the Shell |
| 2191 | * Debugging IDL Programs:: Compilation/Debugging | 2248 | * Commands Sent to the Shell:: |
| 2249 | * Debugging IDL Programs:: | ||
| 2192 | * Examining Variables:: | 2250 | * Examining Variables:: |
| 2193 | * Custom Expression Examination:: | 2251 | * Custom Expression Examination:: |
| 2194 | @end menu | 2252 | @end menu |
| @@ -2285,7 +2343,7 @@ The prefix for temporary IDL files used when compiling regions. | |||
| 2285 | Hook for customizing @code{idlwave-shell-mode}. | 2343 | Hook for customizing @code{idlwave-shell-mode}. |
| 2286 | @end defopt | 2344 | @end defopt |
| 2287 | 2345 | ||
| 2288 | @node Using the Shell, Debugging IDL Programs, Starting the Shell, The IDLWAVE Shell | 2346 | @node Using the Shell, Commands Sent to the Shell, Starting the Shell, The IDLWAVE Shell |
| 2289 | @section Using the Shell | 2347 | @section Using the Shell |
| 2290 | @cindex Comint | 2348 | @cindex Comint |
| 2291 | @cindex Shell, basic commands | 2349 | @cindex Shell, basic commands |
| @@ -2301,18 +2359,14 @@ between emacs and IDL sessions. Here is a list of commonly used | |||
| 2301 | commands: | 2359 | commands: |
| 2302 | 2360 | ||
| 2303 | @multitable @columnfractions .12 .88 | 2361 | @multitable @columnfractions .12 .88 |
| 2304 | @item @key{UP} | 2362 | @item @key{UP}, @key{M-p} |
| 2305 | @tab Cycle backwards in input history | 2363 | @tab Cycle backwards in input history |
| 2306 | @item @key{DOWN} | 2364 | @item @key{DOWN}, @key{M-n} |
| 2307 | @tab Cycle forwards in input history | 2365 | @tab Cycle forwards in input history |
| 2308 | @item @kbd{M-p} | ||
| 2309 | @tab Cycle backwards in input history @emph{matching input} | ||
| 2310 | @item @kbd{M-n} | ||
| 2311 | @tab Cycle forwards in input history @emph{matching input} | ||
| 2312 | @item @kbd{M-r} | 2366 | @item @kbd{M-r} |
| 2313 | @tab Previous input matching a regexp | 2367 | @tab Previous input matching a regexp |
| 2314 | @item @kbd{M-s} | 2368 | @item @kbd{M-s} |
| 2315 | @tab Next input that matches a regexp | 2369 | @tab Next input matching a regexp |
| 2316 | @item @kbd{return} | 2370 | @item @kbd{return} |
| 2317 | @tab Send input or copy line to current prompt | 2371 | @tab Send input or copy line to current prompt |
| 2318 | @item @kbd{C-c C-a} | 2372 | @item @kbd{C-c C-a} |
| @@ -2336,10 +2390,11 @@ commands: | |||
| 2336 | @end multitable | 2390 | @end multitable |
| 2337 | 2391 | ||
| 2338 | In addition to these standard @file{comint} commands, | 2392 | In addition to these standard @file{comint} commands, |
| 2339 | @code{idlwave-shell-mode} provides many of the commands which simplify | 2393 | @code{idlwave-shell-mode} provides many of the same commands which |
| 2340 | writing IDL code, including abbreviations, online help, and completion. | 2394 | simplify writing IDL code available in IDLWAVE buffers. This includes |
| 2341 | See @ref{Routine Info} and @ref{Online Help} and @ref{Completion} for more | 2395 | abbreviations, online help, and completion. See @ref{Routine Info} and |
| 2342 | information on these commands. | 2396 | @ref{Online Help} and @ref{Completion} for more information on these |
| 2397 | commands. | ||
| 2343 | 2398 | ||
| 2344 | @cindex Completion, in the shell | 2399 | @cindex Completion, in the shell |
| 2345 | @cindex Routine info, in the shell | 2400 | @cindex Routine info, in the shell |
| @@ -2412,26 +2467,87 @@ The three regular expressions which match the magic spells for input | |||
| 2412 | modes. | 2467 | modes. |
| 2413 | @end defopt | 2468 | @end defopt |
| 2414 | 2469 | ||
| 2415 | @node Debugging IDL Programs, Examining Variables, Using the Shell, The IDLWAVE Shell | 2470 | @node Commands Sent to the Shell, Debugging IDL Programs, Using the Shell, The IDLWAVE Shell |
| 2471 | @section Commands Sent to the Shell | ||
| 2472 | @cindex Commands in shell, showing | ||
| 2473 | @cindex Showing commands in shell | ||
| 2474 | |||
| 2475 | The IDLWAVE buffers and shell interact very closely. In addition to the | ||
| 2476 | normal commands you enter at the @code{IDL>} prompt, many other special | ||
| 2477 | commands are sent to the shell, sometimes as a direct result of invoking | ||
| 2478 | a key command, menu item, or toolbar button, but also automatically, as | ||
| 2479 | part of the normal flow of information updates between the buffer and | ||
| 2480 | shell. | ||
| 2481 | |||
| 2482 | The commands sent include @code{breakpoint}, @code{.step} and other | ||
| 2483 | debug commands (@pxref{Debugging IDL Programs}), @code{.run} and other | ||
| 2484 | compilation statements (@pxref{Compiling Programs}), examination | ||
| 2485 | commands like @code{print} and @code{help} (@pxref{Examining | ||
| 2486 | Variables}), and other special purpose commands designed to keep | ||
| 2487 | information on the running shell current. | ||
| 2488 | |||
| 2489 | By default, much of this background shell input and output is hidden | ||
| 2490 | from the user, but this is configurable. The custom variable | ||
| 2491 | @code{idlwave-abbrev-show-commands} allows you to configure which | ||
| 2492 | commands sent to the shell are shown there. For a related customization | ||
| 2493 | for separating the output of @emph{examine} commands @xref{Examining | ||
| 2494 | Variables}. | ||
| 2495 | |||
| 2496 | @defopt idlwave-shell-show-commands (@code{'(run misc breakpoint)}) | ||
| 2497 | A list of command types to echo in the shell when sent. Possible values | ||
| 2498 | are @code{run} for @code{.run}, @code{.compile} and other run commands, | ||
| 2499 | @code{misc} for lesser used commands like @code{window}, @code{retall}, | ||
| 2500 | etc., @code{breakpoint} for breakpoint setting and clearing commands, | ||
| 2501 | and @code{debug} for other debug, stepping, and continue commands. In | ||
| 2502 | addition, if the variable is set to the single symbol @code{'everything}, | ||
| 2503 | all the copious shell input is displayed (which is probably only useful | ||
| 2504 | for debugging purposes). | ||
| 2505 | @end defopt | ||
| 2506 | |||
| 2507 | @node Debugging IDL Programs, Examining Variables, Commands Sent to the Shell, The IDLWAVE Shell | ||
| 2416 | @section Debugging IDL Programs | 2508 | @section Debugging IDL Programs |
| 2417 | @cindex Debugging | 2509 | @cindex Debugging |
| 2418 | @cindex Keybindings for debugging | 2510 | @cindex Keybindings for debugging |
| 2419 | @cindex Toolbar | 2511 | @cindex Toolbar |
| 2420 | 2512 | ||
| 2421 | @kindex C-c C-d | ||
| 2422 | Programs can be compiled, run, and debugged directly from the source | 2513 | Programs can be compiled, run, and debugged directly from the source |
| 2423 | buffer in Emacs. The IDLWAVE shell installs key bindings both in the | 2514 | buffer in Emacs. IDLWAVE makes compiling and debugging IDL programs |
| 2424 | shell buffer and in all IDL code buffers of the current Emacs session. | 2515 | far less cumbersome by providing a full-featured, |
| 2425 | On Emacs versions which support this, it also installs a debugging | 2516 | key/menu/toolbar-driven interface to commands like @code{breakpoint}, |
| 2426 | toolbar. The display of the toolbar can be toggled with @kbd{C-c C-d | 2517 | @code{.step}, @code{.run}, etc. |
| 2427 | C-t} (@code{idlwave-shell-toggle-toolbar}). | 2518 | |
| 2519 | The IDLWAVE shell installs key bindings both in the shell buffer and in | ||
| 2520 | all IDL code buffers of the current Emacs session, so debug commands | ||
| 2521 | work in both places (in the shell, commands operate on the last file | ||
| 2522 | compiled). On Emacs versions which support this, a debugging toolbar is | ||
| 2523 | also installed. The display of the toolbar can be toggled with @kbd{C-c | ||
| 2524 | C-d C-t} (@code{idlwave-shell-toggle-toolbar}). | ||
| 2525 | |||
| 2526 | @defopt idlwave-shell-use-toolbar (@code{t}) | ||
| 2527 | Non-@code{nil} means use the debugging toolbar in all IDL related | ||
| 2528 | buffers. | ||
| 2529 | @end defopt | ||
| 2530 | |||
| 2531 | @menu | ||
| 2532 | * Debug Key Bindings:: | ||
| 2533 | * Compiling Programs:: | ||
| 2534 | * Breakpoints and Stepping:: | ||
| 2535 | * Walking the Calling Stack:: | ||
| 2536 | @end menu | ||
| 2537 | |||
| 2538 | @node Debug Key Bindings, Compiling Programs, Debugging IDL Programs, Debugging IDL Programs | ||
| 2539 | @subsection Debug Key Bindings | ||
| 2540 | @kindex C-c C-d | ||
| 2541 | @cindex Key bindings | ||
| 2428 | 2542 | ||
| 2429 | The debugging key bindings are by default on the prefix key @kbd{C-c | 2543 | The debugging key bindings are by default on the prefix key @kbd{C-c |
| 2430 | C-d}, so for example setting a breakpoint is done with @kbd{C-c C-d | 2544 | C-d}, so for example setting a breakpoint is done with @kbd{C-c C-d |
| 2431 | C-b}, compiling a source file with @kbd{C-c C-d C-c}. If you find this | 2545 | C-b}, and compiling a source file with @kbd{C-c C-d C-c}. If you find |
| 2432 | too much work, you can add bindings for one or more modifier keys which | 2546 | this too much work, you can easily configure IDLWAVE to use one or more |
| 2433 | is not used by other commands. For example, if you write in | 2547 | modifier keys not in use by other commands, in lieu of the prefix |
| 2434 | @file{.emacs}: | 2548 | @kbd{C-c C-d} (though these bindings will typically also be available |
| 2549 | --- see @code{idlwave-shell-activate-prefix-keybindings}). For example, | ||
| 2550 | if you write in @file{.emacs}: | ||
| 2435 | 2551 | ||
| 2436 | @lisp | 2552 | @lisp |
| 2437 | (setq idlwave-shell-debug-modifiers '(control shift)) | 2553 | (setq idlwave-shell-debug-modifiers '(control shift)) |
| @@ -2458,22 +2574,12 @@ key, like @kbd{C-c C-d C-b}. | |||
| 2458 | 2574 | ||
| 2459 | @defopt idlwave-shell-debug-modifiers (@code{nil}) | 2575 | @defopt idlwave-shell-debug-modifiers (@code{nil}) |
| 2460 | List of modifier keys to use for additional binding of debugging | 2576 | List of modifier keys to use for additional binding of debugging |
| 2461 | commands in the shell and source buffers. | 2577 | commands in the shell and source buffers. Can be one or more of |
| 2462 | @end defopt | 2578 | @code{control}, @code{meta}, @code{super}, @code{hyper}, @code{alt}, and |
| 2463 | 2579 | @code{shift}. | |
| 2464 | @defopt idlwave-shell-use-toolbar (@code{t}) | ||
| 2465 | Non-@code{nil} means use the debugging toolbar in all IDL related | ||
| 2466 | buffers. | ||
| 2467 | @end defopt | 2580 | @end defopt |
| 2468 | 2581 | ||
| 2469 | 2582 | @node Compiling Programs, Breakpoints and Stepping, Debug Key Bindings, Debugging IDL Programs | |
| 2470 | @menu | ||
| 2471 | * Compiling Programs:: Compiling buffers under the shell | ||
| 2472 | * Breakpoints and Stepping:: Deciding where to stop and look | ||
| 2473 | * Walking the Calling Stack:: From where was this routine called? | ||
| 2474 | @end menu | ||
| 2475 | |||
| 2476 | @node Compiling Programs, Breakpoints and Stepping, Debugging IDL Programs, Debugging IDL Programs | ||
| 2477 | @subsection Compiling Programs | 2583 | @subsection Compiling Programs |
| 2478 | @cindex Compiling programs | 2584 | @cindex Compiling programs |
| 2479 | @cindex Programs, compiling | 2585 | @cindex Programs, compiling |
| @@ -2524,22 +2630,30 @@ configured in @code{idlwave-shell-mark-stop-line}. | |||
| 2524 | You can set breakpoints and step through a program with IDLWAVE. | 2630 | You can set breakpoints and step through a program with IDLWAVE. |
| 2525 | Setting a breakpoint in the current line of the source buffer is done | 2631 | Setting a breakpoint in the current line of the source buffer is done |
| 2526 | with @kbd{C-c C-d C-b} (@code{idlwave-shell-break-here}). With a prefix | 2632 | with @kbd{C-c C-d C-b} (@code{idlwave-shell-break-here}). With a prefix |
| 2527 | arg of 1 (i.e. @kbd{C-1 C-c C-d C-b}, the breakpoint gets a @code{/ONCE} | 2633 | arg of 1 (i.e. @kbd{C-1 C-c C-d C-b}), the breakpoint gets a |
| 2528 | keyword, meaning that it will be deleted after first use. With a | 2634 | @code{/ONCE} keyword, meaning that it will be deleted after first use. |
| 2529 | numeric prefix greater than one, the breakpoint will only be active the | 2635 | With a numeric prefix greater than one (e.g. @kbd{C-4 C-c C-d C-b}), the |
| 2530 | @code{nth} time it is hit. To clear the breakpoint in the current line, | 2636 | breakpoint will only be active the @code{nth} time it is hit. With a |
| 2637 | single non-numeric prefix (i.e. @kbd{C-u C-c C-d C-b}), prompt for a | ||
| 2638 | condition --- an IDL expression to be evaulated and trigger the | ||
| 2639 | breakpoint only if true. To clear the breakpoint in the current line, | ||
| 2531 | use @kbd{C-c C-d C-d} (@code{idlwave-clear-current-bp}). When executed | 2640 | use @kbd{C-c C-d C-d} (@code{idlwave-clear-current-bp}). When executed |
| 2532 | from the shell window, the breakpoint where IDL is currently stopped | 2641 | from the shell window, the breakpoint where IDL is currently stopped |
| 2533 | will be deleted. To clear all breakpoints, use @kbd{C-c C-d C-a} | 2642 | will be deleted. To clear all breakpoints, use @kbd{C-c C-d C-a} |
| 2534 | (@code{idlwave-clear-all-bp}). Breakpoint lines are highlighted in the | 2643 | (@code{idlwave-clear-all-bp}). Breakpoint lines are highlighted in the |
| 2535 | source code. | 2644 | source code. Note that IDL places breakpoints as close as possible on |
| 2645 | or after the line you specify. IDLWAVE queries the shell for the actual | ||
| 2646 | breakpoint location which was set, so the exact line you specify may not | ||
| 2647 | be marked. | ||
| 2536 | 2648 | ||
| 2537 | Once the program has stopped somewhere, you can step through it. The | 2649 | Once the program has stopped somewhere, you can step through it. The |
| 2538 | most important stepping commands are @kbd{C-c C-d C-s} to execute one | 2650 | most important stepping commands are @kbd{C-c C-d C-s} to execute one |
| 2539 | line of IDL code ("step into"); @kbd{C-c C-d C-n} to step a single line, | 2651 | line of IDL code ("step into"); @kbd{C-c C-d C-n} to step a single line, |
| 2540 | treating procedure and function calls as a single step ("step over"); | 2652 | treating procedure and function calls as a single step ("step over"); |
| 2541 | @kbd{C-c C-d C-h} to continue execution to the line at the cursor and | 2653 | @kbd{C-c C-d C-h} to continue execution to the line at the cursor and |
| 2542 | @kbd{C-c C-d C-r} to continue execution. Here is a summary of the | 2654 | @kbd{C-c C-d C-r} to continue execution. @xref{Commands Sent to the |
| 2655 | Shell}, for information on displaying or hiding the breakpoint and | ||
| 2656 | stepping commands the shell receives. Here is a summary of the | ||
| 2543 | breakpoint and stepping commands: | 2657 | breakpoint and stepping commands: |
| 2544 | 2658 | ||
| 2545 | @multitable @columnfractions .23 .77 | 2659 | @multitable @columnfractions .23 .77 |
| @@ -2603,6 +2717,9 @@ automatically return to the current level. @xref{Examining Variables}, | |||
| 2603 | for information how to examine the value of variables and expressions on | 2717 | for information how to examine the value of variables and expressions on |
| 2604 | higher calling stack levels. | 2718 | higher calling stack levels. |
| 2605 | 2719 | ||
| 2720 | @ifhtml | ||
| 2721 | <A NAME="EXAMINE"></A> | ||
| 2722 | @end ifhtml | ||
| 2606 | @node Examining Variables, Custom Expression Examination, Debugging IDL Programs, The IDLWAVE Shell | 2723 | @node Examining Variables, Custom Expression Examination, Debugging IDL Programs, The IDLWAVE Shell |
| 2607 | @section Examining Variables | 2724 | @section Examining Variables |
| 2608 | @cindex @code{PRINT} expressions | 2725 | @cindex @code{PRINT} expressions |
| @@ -2904,6 +3021,8 @@ Laurent Mugnier <mugnier@@onera.fr> | |||
| 2904 | @item | 3021 | @item |
| 2905 | Lubos Pochman <lubos@@rsinc.com> | 3022 | Lubos Pochman <lubos@@rsinc.com> |
| 2906 | @item | 3023 | @item |
| 3024 | Bob Portmann <portmann@@al.noaa.gov> | ||
| 3025 | @item | ||
| 2907 | Patrick M. Ryan <pat@@jaameri.gsfc.nasa.gov> | 3026 | Patrick M. Ryan <pat@@jaameri.gsfc.nasa.gov> |
| 2908 | @item | 3027 | @item |
| 2909 | Marty Ryba <ryba@@ll.mit.edu> | 3028 | Marty Ryba <ryba@@ll.mit.edu> |
| @@ -2950,14 +3069,14 @@ several places: | |||
| 2950 | @emph{Builtin routines} are defined inside IDL itself. The source | 3069 | @emph{Builtin routines} are defined inside IDL itself. The source |
| 2951 | code of such routines is not available. | 3070 | code of such routines is not available. |
| 2952 | @item | 3071 | @item |
| 2953 | Routines which are @emph{part of the current program}, defined in a | 3072 | Routines which are @emph{part of the current program}, are defined in a |
| 2954 | file which is explicitly compiled by the user. This file may or may not | 3073 | file explicitly compiled by the user. This file may or may not be |
| 2955 | be located on the IDL search path. | 3074 | located on the IDL search path. |
| 2956 | @item | 3075 | @item |
| 2957 | @emph{Library routines} are defined in files located on IDL's search | 3076 | @emph{Library routines} are defined in files located on IDL's search |
| 2958 | path, and will need not be manually compiled. When a library routine is | 3077 | path, and will not need to be manually compiled. When a library routine |
| 2959 | called for the first time, IDL will find the source file and compile it | 3078 | is called for the first time, IDL will find the source file and compile |
| 2960 | dynamically. A special sub-category of library routines are the | 3079 | it dynamically. A special sub-category of library routines are the |
| 2961 | @emph{system routines} distributed with IDL, and usually available in | 3080 | @emph{system routines} distributed with IDL, and usually available in |
| 2962 | the @file{lib} subdirectory of the IDL distribution. | 3081 | the @file{lib} subdirectory of the IDL distribution. |
| 2963 | @item | 3082 | @item |
| @@ -3089,7 +3208,7 @@ from the same directories, call the command | |||
| 3089 | selected directories, write an updated version of the libinfo file and | 3208 | selected directories, write an updated version of the libinfo file and |
| 3090 | rebuild IDLWAVE's internal lists. If you give three prefix arguments | 3209 | rebuild IDLWAVE's internal lists. If you give three prefix arguments |
| 3091 | @w{@kbd{C-u C-u C-u C-c C-i}}, updating will be done with a background | 3210 | @w{@kbd{C-u C-u C-u C-c C-i}}, updating will be done with a background |
| 3092 | job@footnote{GNU and Unix systems only, I think.}. You can continue to work, | 3211 | job@footnote{Unix systems only, I think.}. You can continue to work, |
| 3093 | and the library catalog will be re-read when it is ready. | 3212 | and the library catalog will be re-read when it is ready. |
| 3094 | 3213 | ||
| 3095 | A note of caution: Depending on your local installation, the IDL | 3214 | A note of caution: Depending on your local installation, the IDL |
| @@ -3103,11 +3222,11 @@ File for routine information of the IDL library. | |||
| 3103 | @end defopt | 3222 | @end defopt |
| 3104 | 3223 | ||
| 3105 | @defopt idlwave-library-path | 3224 | @defopt idlwave-library-path |
| 3106 | IDL library path for Windows and MacOS. Not needed under GNU and Unix. | 3225 | IDL library path for Windows and MacOS. Not needed under Unix. |
| 3107 | @end defopt | 3226 | @end defopt |
| 3108 | 3227 | ||
| 3109 | @defopt idlwave-system-directory | 3228 | @defopt idlwave-system-directory |
| 3110 | The IDL system directory for Windows and MacOS. Not needed under GNU and Unix. | 3229 | The IDL system directory for Windows and MacOS. Not needed under Unix. |
| 3111 | @end defopt | 3230 | @end defopt |
| 3112 | 3231 | ||
| 3113 | @defopt idlwave-special-lib-alist | 3232 | @defopt idlwave-special-lib-alist |
| @@ -3351,6 +3470,9 @@ user is King! | |||
| 3351 | "help,___,/STRUCTURE")))) | 3470 | "help,___,/STRUCTURE")))) |
| 3352 | @end example | 3471 | @end example |
| 3353 | 3472 | ||
| 3473 | @ifhtml | ||
| 3474 | <A NAME="WIN_MAC"></A> | ||
| 3475 | @end ifhtml | ||
| 3354 | @node Windows and MacOS, Index, Configuration Examples, Top | 3476 | @node Windows and MacOS, Index, Configuration Examples, Top |
| 3355 | @appendix Windows and MacOS | 3477 | @appendix Windows and MacOS |
| 3356 | @cindex Windows | 3478 | @cindex Windows |
| @@ -3361,17 +3483,17 @@ of Emacs, much of IDLWAVE does also work under different operating | |||
| 3361 | systems like Windows (with NTEmacs or NTXEmacs) or MacOS. | 3483 | systems like Windows (with NTEmacs or NTXEmacs) or MacOS. |
| 3362 | 3484 | ||
| 3363 | The only problem really is that RSI does not provide a command-line | 3485 | The only problem really is that RSI does not provide a command-line |
| 3364 | version of IDL for Windows or MacOS which IDLWAVE can interact | 3486 | version of IDL for Windows or MacOS with which IDLWAVE can |
| 3365 | with@footnote{Call your RSI representative and complain --- it should be | 3487 | interact@footnote{Call your RSI representative and complain --- it |
| 3366 | trivial for them to provide one. And if enough people ask for it, maybe | 3488 | should be trivial for them to provide one. And if enough people ask |
| 3367 | they will. The upcoming IDL for Mac OSX is slated to have a | 3489 | for it, maybe they will. The upcoming IDL for Mac OSX is slated to |
| 3368 | command-line version.}. Therefore the IDLWAVE Shell does not work and | 3490 | have a command-line version.}. Therefore the IDLWAVE Shell does not |
| 3369 | you have to rely on IDLDE to run and debug your programs. However, | 3491 | work and you have to rely on IDLDE to run and debug your programs. |
| 3370 | editing IDL source files with Emacs/IDLWAVE works with all bells and | 3492 | However, editing IDL source files with Emacs/IDLWAVE works with all |
| 3371 | whistles, including routine info, completion and fast online help. Only | 3493 | bells and whistles, including routine info, completion and fast online |
| 3372 | a small amount of additional information must be specified in your | 3494 | help. Only a small amount of additional information must be specified |
| 3373 | .emacs file: you must specify path names which on a GNU or UNIX system | 3495 | in your .emacs file: the path names which, on a UNIX system, are |
| 3374 | are automatically gathered by talking to the IDL program. | 3496 | automatically gathered by talking to the IDL program. |
| 3375 | 3497 | ||
| 3376 | Here is an example of the additional configuration needed for a Windows | 3498 | Here is an example of the additional configuration needed for a Windows |
| 3377 | system. I am assuming that IDLWAVE has been installed in | 3499 | system. I am assuming that IDLWAVE has been installed in |