|
From: | Lorenzo Bettini |
Subject: | Re: [Help-source-highlight] Regular Expression Explanation for 'function.lang' |
Date: | Fri, 03 Jun 2011 12:30:47 +0200 |
User-agent: | Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110424 Lightning/1.0b2 Thunderbird/3.1.10 |
Hi Peterdue to the syntax of procedure and functions, I doubt that a regular expression that recognizes them can be written: you'd need real parsing, which source-highlight does not provide...
do you want this lang definition be included in source-highlight? Could you please provide a test file to be included in the test suite? I noted that some keywords have a space afterwards, e.g.,|BETA |BILINEAR |BIN_DATE |BINARY_TEMPLATE |BINDGEN |BINOMIAL |BLK_CON |BOX_CURSOR
is it intended? In general there should be no space after keywords. cheers Lorenzo On 05/27/2011 10:53 PM, Peter Willis wrote:
Hello, There is a 'Wikipedia' page for IDL located at: http://en.wikipedia.org/wiki/IDL_(programming_language) There is a complete IDL programming manual located: http://idlastro.gsfc.nasa.gov/idl_html_help/Programming_in_IDL.html Normally procedures an functions are called on one line unless the line exceeds 64 (?) characters. In that case the line may use '$' symbol to continue the call statement on the next line. Procedures do not return values, hence they are never called as variables. Functions can happen in-line anywhere. Commas are also used as delimiters for array members in IDL. Below is the language definition for rsiidl.lang . 'procedure.lang' is just a duplicate of 'function.lang' at this point. Best Regards, Peter //////////RSIIDL.LANG BEGIN/////////////////////////// preproc = "include|include_once|require|require_once" comment start ";" include "number.lang" string delim "\"" "\"" escape "\\" multiline string delim "'" "'" escape "\\" multiline keyword = "COMMON|COMPILE_OPT|PRO|FUNCTION|BEGIN|BREAK|END|GOTO|IF|THEN|ELSE|ENDIF|CASE|OF|ENDCASE|SWITCH|ENDSWITCH|FOR|DO|CONTINUE|ENDFOR|WHILE|ENDWHILE|LT|LE|EQ|NE|GE|GT|>|<|NOT|OR|XOR|AND|MOD|FORWARD_FUNCTION|ON_ERROR|ON_IOERROR|REPEAT|UNTIL|.COMPILE|.CONTINUE|.EDIT|.FULL_RESET_SESSION|.GO|.OUT|.RESET_SESSION|.RETURN|.RNEW|.RUN|.SKIP|.STEP|.STEPOVER|.TRACE|A_CORRELATE|ABS|ACOS|ADAPT_HIST_EQUAL|ALOG|ALOG10|AMOEBA|ANNOTATE|APP_USER_DIR|APP_USER_DIR_QUERY|ARG_PRESENT|ARRAY_EQUAL|ARRAY_INDICES|ARROW|ASCII_TEMPLATE|ASIN|ASSOC|ATAN|BAR_PLOT|BESELI|BESELJ|BESELK|BESELY |BETA |BILINEAR |BIN_DATE |BINARY_TEMPLATE |BINDGEN |BINOMIAL |BLK_CON |BOX_CURSOR |BROYDEN |BYTARR |BYTE |BYTSCL |C_CORRELATE |CALDAT |CALENDAR |CALL_EXTERNAL |CALL_FUNCTION |CALL_METHOD |CEIL |CHEBYSHEV |CHECK_MATH |CHISQR_CVF |CHISQR_PDF |CHOLSOL |CINDGEN |CIR_3PNT |CLUST_WTS |CLUSTER |CLUSTER_TREE |COLOR_QUAN |COLORMAP_APPLICABLE |COMFIT |COMPLEX |COMPLEXARR |COMPLEXROUND |COMPUTE_MESH_NORMALS |COND |CONGRID |CONJ |CONVERT_COORD |CONVOL |COORD2TO3 |CORRELATE |COS |COSH |CRAMER |CREATE_CURSOR |CREATE_STRUCT |CREATE_VIEW |CROSSP |CRVLENGTH |CT_LUMINANCE |CTI_TEST |CURVEFIT |CV_COORD |CVTTOBM |CW_ANIMATE |CW_ANIMATE_GETP |CW_ANIMATE_LOAD |CW_ANIMATE_RUN |CW_ARCBALL |CW_BGROUP |CW_CLR_INDEX |CW_COLORSEL |CW_DEFROI |CW_FIELD |CW_FILESEL |CW_FORM |CW_FSLIDER |CW_LIGHT_EDITOR |CW_LIGHT_EDITOR_GET |CW_LIGHT_EDITOR_SET |CW_ORIENT |CW_PALETTE_EDITOR |CW_PALETTE_EDITOR_GET |CW_PALETTE_EDITOR_SET |CW_PDMENU |CW_RGBSLIDER |CW_TMPL |CW_ZOOM |DBLARR |DCINDGEN |DCOMPLEX |DCOMPLEXARR |DEFROI |DENDRO_PLOT |DENDROGRAM |DERIV |DERIVSIG |DETERM |DIAG_MATRIX |DIALOG_MESSAGE |DIALOG_PICKFILE |DIALOG_PRINTERSETUP |DIALOG_PRINTJOB |DIALOG_READ_IMAGE |DIALOG_WRITE_IMAGE |DIGITAL_FILTER |DILATE |DINDGEN |DISSOLVE |DIST |DISTANCE_MEASURE |DOC_LIBRARY |DOUBLE |EFONT |EIGENQL |EIGENVEC |ELMHES |EOF |ERF |ERFC |ERFCX |ERODE |ERRPLOT |EXECUTE |EXP |EXPAND |EXPAND_PATH |EXPINT |EXTRAC |EXTRACT_SLICE |F_CVF |F_PDF |FACTORIAL |FFT |FILE_BASENAME |FILE_DIRNAME |FILE_EXPAND_PATH |FILE_INFO |FILE_LINES |FILE_LINK |FILE_READLINK |FILE_SAME |FILE_SEARCH |FILE_TEST |FILE_WHICH |FILEPATH |FINDGEN |FINITE |FIX |FLICK |FLOAT |FLOOR |FLOW3 |FLTARR |FORMAT_AXIS_VALUES |FSTAT |FULSTR |FUNCT |FV_TEST |FX_ROOT |FZ_ROOTS |GAMMA |GAMMA_CT |GAUSS_CVF |GAUSS_PDF |GAUSS2DFIT |GAUSSFIT |GAUSSINT |GET_DRIVE_LIST |GET_KBRD |GET_LUN |GET_SCREEN_SIZE |GETENV |GRID_TPS |GRID3 |GRIDDATA |GS_ITER |H_EQ_CT |H_EQ_INT |H5_BROWSER |HANNING |HDF_BROWSER |HDF_READ |HILBERT |HIST_2D |HIST_EQUAL |HISTOGRAM |HLS |HOUGH |HQR |HSV |IBETA |ICONTOUR |IDENTITY |IDL_VALIDNAME |IDLITSYS_CREATETOOL |IGAMMA |IIMAGE |IMAGE_CONT |IMAGINARY |IMAP |INDGEN |INT_2D |INT_3D |INT_TABULATED |INTARR |INTERPOL |INTERPOLATE |INVERT |IOCTL |IPLOT |ISHFT |ISURFACE |ITCURRENT |ITDELETE |ITGETCURRENT |ITREGISTER |ITRESET |ITRESOLVE |IVOLUME |JULDAY |KEYWORD_SET |KRIG2D |KURTOSIS |KW_TEST |L64INDGEN |LA_CHOLMPROVE |LA_CHOLSOL |LA_DETERM |LA_EIGENPROBLEM |LA_EIGENQL |LA_EIGENVEC |LA_ELMHES |LA_GM_LINEAR_MODEL |LA_HQR |LA_INVERT |LA_LEAST_SQUARE_EQUALITY |LA_LEAST_SQUARES |LA_LINEAR_EQUATION |LA_LUMPROVE |LA_LUSOL |LA_TRIMPROVE |LA_TRISOL |LABEL_DATE |LABEL_REGION |LADFIT |LAGUERRE |LEEFILT |LEGENDRE |LINBCG |LINDGEN |LINFIT |LL_ARC_DISTANCE |LMFIT |LMGR |LNGAMMA |LNP_TEST |LOADCT |LOCALE_GET |LOGICAL_AND |LOGICAL_OR |LOGICAL_TRUE |LON64ARR |LONARR |LONG |LONG64 |LSODE |LU_COMPLEX |LUMPROVE |LUSOL |M_CORRELATE |MACHAR |MAKE_ARRAY |MAP_2POINTS |MAP_CONTINENTS |MAP_GRID |MAP_IMAGE |MAP_PATCH |MAP_PROJ_FORWARD |MAP_PROJ_IMAGE |MAP_PROJ_INFO |MAP_PROJ_INIT |MAP_PROJ_INVERSE |MAP_SET |MATRIX_MULTIPLY |MATRIX_POWER |MAX |MD_TEST |MEAN |MEANABSDEV |MEDIAN |MEMORY |MESH_CLIP |MESH_DECIMATE |MESH_ISSOLID |MESH_MERGE |MESH_NUMTRIANGLES |MESH_OBJ |MESH_SMOOTH |MESH_SURFACEAREA |MESH_VALIDATE |MESH_VOLUME |MESSAGE |MIN |MIN_CURVE_SURF |MK_HTML_HELP |MODIFYCT |MOMENT |MORPH_CLOSE |MORPH_DISTANCE |MORPH_GRADIENT |MORPH_HITORMISS |MORPH_OPEN |MORPH_THIN |MORPH_TOPHAT |MPEG_CLOSE |MPEG_OPEN |MPEG_PUT |MPEG_SAVE |MULTI |N_ELEMENTS |N_PARAMS |N_TAGS |NEWTON |NORM |OBJ_CLASS |OBJ_ISA |OBJ_NEW |OBJ_VALID |OBJARR |OPEN |OPLOTERR |P_CORRELATE |PATH_SEP |PCOMP |PLOT_3DBOX |PLOT_FIELD |PLOTERR |PNT_LINE |POLAR_CONTOUR |POLAR_SURFACE |POLY |POLY_2D |POLY_AREA |POLY_FIT |POLYFILLV |POLYSHADE |POLYWARP |POPD |PRIMES |PRODUCT |PROFILE |PROJECT_VOL |PS_SHOW_FONTS |PSAFM |PSEUDO |PTR_NEW |PTR_VALID |PTRARR |QGRID3 |QROMB |QROMO |QSIMP |QUERY_BMP |QUERY_DICOM |QUERY_GIF |QUERY_IMAGE |QUERY_JPEG |QUERY_JPEG2000 |QUERY_MRSID |QUERY_PICT |QUERY_PNG |QUERY_PPM |QUERY_SRF |QUERY_TIFF |QUERY_WAV |R_CORRELATE |R_TEST |RADON |RANDOMN |RANDOMU |RANKS |RDPIX |READ_ASCII |READ_BINARY |READ_BMP |READ_DICOM |READ_IMAGE |READ_JPEG2000 |READ_MRSID |READ_PNG |READ_SPR |READ_SYLK |READ_TIFF |READ_WAV |READ_XWD |REAL_PART |REBIN |RECALL_COMMANDS |RECON3 |REFORM |REGION_GROW |REGRESS |REPLICATE |RETALL |REVERSE |RK4 |ROBERTS |ROT |ROTATE |ROUND |ROUTINE_INFO |RS_TEST |S_TEST |SAVGOL |SCOPE_LEVEL |SCOPE_VARFETCH |SCOPE_VARNAME |SEARCH2D |SEARCH3D |SFIT |SHIFT |SHMDEBUG |SHMVAR |SIMPLEX |SIN |SINDGEN |SINH |SIZE |SKEWNESS |SMOOTH |SOBEL |SORT |SPH_SCAT |SPHER_HARM |SPL_INIT |SPL_INTERP |SPLINE |SPRSAB |SPRSAX |SPRSIN |SPRSTP |SQRT |STANDARDIZE |STDDEV |STRARR |STRCMP |STRCOMPRESS |STREGEX |STRING |STRJOIN |STRLEN |STRLOWCASE |STRMATCH |STRMESSAGE |STRMID |STRPOS |STRSPLIT |STRTRIM |STRUPCASE |SVDFIT |SVSOL |SWAP_ENDIAN |SYSTIME |T_CVF |T_PDF |TAG_NAMES |TAN |TANH |TEMPORARY |TETRA_CLIP |TETRA_SURFACE |TETRA_VOLUME |THIN |THREED |TIMEGEN |TM_TEST |TOTAL |TRACE |TRANSPOSE |TRI_SURF |TRIANGULATE |TRIGRID |TRIQL |TRISOL |TS_COEF |TS_DIFF |TS_FCAST |TS_SMOOTH |TV |TVRD |UINDGEN |UINT |UINTARR |UL64INDGEN |ULINDGEN |ULON64ARR |ULONARR |ULONG |ULONG64 |UNIQ |UNSHARP_MASK |VALUE_LOCATE |VARIANCE |VERT_T3D |VOIGT |VOXEL_PROJ |WARP_TRI |WATERSHED |WF_DRAW |WHERE |WIDGET_ACTIVEX |WIDGET_BASE |WIDGET_BUTTON |WIDGET_COMBOBOX |WIDGET_DISPLAYCONTEXTMENU |WIDGET_DRAW |WIDGET_DROPLIST |WIDGET_EVENT |WIDGET_INFO |WIDGET_LABEL |WIDGET_LIST |WIDGET_PROPERTYSHEET |WIDGET_SLIDER |WIDGET_TAB |WIDGET_TABLE |WIDGET_TEXT |WIDGET_TREE |WRITE_SYLK |WTN|AXIS|BLAS_AXPY |BLAS_AXPY |BYTEORDER |CALL_PROCEDURE |CATCH |CD |CHOLDC |CLOSE |COLOR_CONVERT |CONSTRAINED_MIN |CONTOUR |COPY_LUN |CPU |CURSOR |DEFINE_KEY |DEFINE_MSGBLK |DEFINE_MSGBLK_FROM_FILE |DEFSYSV |DELVAR |DEVICE |DFPMIN |DLM_LOAD |DLM_REGISTER |DRAW_ROI |EMPTY |ENABLE_SYSRTN |ERASE |EXIT |FILE_CHMOD |FILE_COPY |FILE_DELETE |FILE_MKDIR |FILE_MOVE |FLUSH |FREE_LUN |GRID_INPUT |HEAP_FREE |HEAP_GC |HELP |IMAGE_STATISTICS |INTERVAL_VOLUME |ISOCONTOUR |ISOSURFACE |JOURNAL |LA_CHOLDC |LA_LUDC |LA_SVD |LA_TRIDC |LA_TRIQL |LA_TRIRED |LINKIMAGE |LUDC |MAKE_DLL |OBJ_DESTROY |ONLINE_HELP |ONLINE_HELP_PDF_INDEX |OPLOT |PARTICLE_TRACE |PATH_CACHE |PLOT |PLOTS |POINT_LUN |POLYFILL |POWELL |PRINT|PRINTD|PRINTF |PROFILER |PROFILES |PTR_FREE |PUSHD |QHULL |READ|READ_GIF |READ_INTERFILE |READ_JPEG |READ_PICT |READ_PPM |READ_SRF |READ_WAVE |READ_X11_BITMAP |READF |READS |READU |REDUCE_COLORS |REGISTER_CURSOR |REPLICATE_INPLACE |RESOLVE_ALL |RESOLVE_ROUTINE |RESTORE |SAVE |SCALE3 |SCALE3D |SET_PLOT |SET_SHADING |SETENV |SETUP_KEYS |SHADE_SURF |SHADE_SURF_IRR |SHADE_VOLUME |SHMMAP |SHMUNMAP |SHOW3 |SHOWFONT |SKIP_LUN |SLICER3 |SLIDE_IMAGE |SOCKET |SPAWN |SPH_4PNT |SPLINE_P |STOP |STREAMLINE |STRETCH |STRPUT |STRUCT_ASSIGN |STRUCT_HIDE |SURFACE |SURFR |SVDC |SWAP_ENDIAN_INPLACE |T3D |TEK_COLOR |TIME_TEST2 |TRIRED |TRUNCATE_LUN |TVCRS |TVLCT |TVSCL |USERSYM |VECTOR_FIELD |VEL |VELOVECT |VORONOI |WAIT |WDELETE |WIDGET_CONTROL |WINDOW |WRITE_BMP |WRITE_GIF |WRITE_IMAGE |WRITE_JPEG |WRITE_JPEG2000 |WRITE_NRIF |WRITE_PICT |WRITE_PNG |WRITE_PPM |WRITE_SPR |WRITE_SRF |WRITE_TIFF |WRITE_WAV |WRITE_WAVE |WRITEU |WSET |WSHOW |XBM_EDIT |XDISPLAYFILE |XDXF |XFONT |XINTERANIMATE |XLOADCT |XMANAGER |XMNG_TMPL |XMTOOL |XOBJVIEW |XOBJVIEW_ROTATE |XOBJVIEW_WRITE_IMAGE |XPALETTE |XPCOLOR |XPLOT3D |XREGISTERED |XROI |XSQ_TEST |XSURFACE |XVAREDIT |XVOLUME |XVOLUME_ROTATE |XVOLUME_WRITE_IMAGE|XYOUTS |ZOOM |ZOOM_24|CDF_ATTCREATE|CDF_ATTDELETE|CDF_ATTEXISTS|CDF_ATTGET|CDF_ATTINQ|CDF_ATTNUM|CDF_ATTPUT|CDF_ATTRENAME|CDF_CLOSE|CDF_CONTROL|CDF_CREATE|CDF_DELETE|CDF_DOC|CDF_ENCODE_EPOCH|CDF_EPOCH|CDF_ERROR|CDF_EXISTS|CDF_INQUIRE|CDF_LIB_INFO|CDF_OPEN|CDF_PARSE_EPOCH|CDF_VARCREATE|CDF_VARDELETE|CDF_VARGET|CDF_VARGET1|CDF_VARINQ|CDF_VARNUM|CDF_VARPUT|CDF_VARRENAME|HDF_CLOSE|HDF_DELDD|HDF_DF24_ADDIMAGE|HDF_DF24_GETIMAGE|HDF_DF24_GETINFO|HDF_DF24_LASTREF|HDF_DF24_NIMAGES|HDF_DF24_READREF|HDF_DF24_RESTART|HDF_DFAN_ADDFDS|HDF_DFAN_ADDFID|HDF_DFAN_GETDESC|HDF_DFAN_GETFDS|HDF_DFAN_GETFID|HDF_DFAN_GETLABEL|HDF_DFAN_LABLIST|HDF_DFAN_LASTREF|HDF_DFAN_PUTDESC|HDF_DFAN_PUTLABEL|HDF_DFP_ADDPAL|HDF_DFP_GETPAL|HDF_DFP_LASTREF|HDF_DFP_NPALS|HDF_DFP_PUTPAL|HDF_DFP_READREF|HDF_DFP_RESTART|HDF_DFP_WRITEREF|HDF_DFR8_ADDIMAGE|HDF_DFR8_GETIMAGE|HDF_DFR8_GETINFO|HDF_DFR8_LASTREF|HDF_DFR8_NIMAGES|HDF_DFR8_PUTIMAGE|HDF_DFR8_READREF|HDF_DFR8_RESTART|HDF_DFR8_SETPALETTE|HDF_DFSD_ADDDATA|HDF_DFSD_DIMGET|HDF_DF
S
D_DIMSET|HDF_DFSD_ENDSLICE|HDF_DFSD_GETDATA|HDF_DFSD_GETINFO|HDF_DFSD_GETSLICE|HDF_DFSD_PUTSLICE|HDF_DFSD_READREF|HDF_DFSD_SETINFO|HDF_DFSD_STARTSLICE|HDF_DUPDD|HDF_EXISTS|HDF_ISHDF|HDF_LIB_INFO|HDF_NEWREF|HDF_NUMBER|HDF_OPEN|HDF_GR_ATTRINFO|HDF_SD_ATTRFIND|HDF_SD_ATTRINFO|HDF_SD_ATTRSET|HDF_SD_CREATE|HDF_SD_DIMGET|HDF_SD_DIMGETID|HDF_SD_DIMSET|HDF_SD_END|HDF_SD_ENDACCESS|HDF_SD_FILEINFO|HDF_SD_GETDATA|HDF_SD_GETINFO|HDF_SD_IDTOREF|HDF_SD_ISCOORDVAR|HDF_SD_NAMETOINDEX|HDF_SD_REFTOINDEX|HDF_SD_SELECT|HDF_SD_SETEXTFILE|HDF_SD_SETINFO|HDF_SD_START|HDF_VD_ATTACH|HDF_VD_DETACH|HDF_VD_FDEFINE|HDF_VD_FEXIST|HDF_VD_FIND|HDF_VD_GET|HDF_VD_GETID|HDF_VD_GETINFO|HDF_VD_GETNEXT|HDF_VD_INSERT|HDF_VD_ISVD|HDF_VD_ISVG|HDF_VD_LONE|HDF_VD_READ|HDF_VD_SEEK|HDF_VD_SETINFO|HDF_VD_WRITE|HDF_VG_ADDTR|HDF_VG_ATTACH|HDF_VG_DETACH|HDF_VG_GETID|HDF_VG_GETINFO|HDF_VG_GETNEXT|HDF_VG_GETTR|HDF_VG_GETTRS|HDF_VG_INQTR|HDF_VG_INSERT|HDF_VG_ISVD|HDF_VG_ISVG|HDF_VG_LONE|HDF_VG_NUMBER|HDF_VG_SETINFO|NCDF_ATTC
OP
Y|NCDF_ATTDEL|NCDF_ATTGET|NCDF_ATTINQ|NCDF_ATTNAME|NCDF_ATTPUT|NCDF_ATTRENAME|NCDF_CLOSE|NCDF_CONTROL|NCDF_CREATE|NCDF_DIMDEF|NCDF_DIMID|NCDF_DIMINQ|NCDF_DIMRENAME|NCDF_EXISTS|NCDF_INQUIRE|NCDF_OPEN|NCDF_VARDEF|NCDF_VARGET|NCDF_VARGET1|NCDF_VARID|NCDF_VARINQ|NCDF_VARPUT|NCDF_VARRENAME|ENDELSE|RETURN" comment delim "/*" "*/" multiline nested type = '(?:\$[#]?|@|%)[[:word:]]+' include "symbols.lang" cbracket = "{|}" include "function.lang" include "procedure.lang" variable = '[[:upper:]][[:word:]]*|_' ///////////////////RSIIDL.LANG END//////////////////////////////// On 5/27/2011 1:57 AM, Lorenzo Bettini wrote:Hi do procedure (and functions) are always called on a line? I mean, is the procedure name always at the beginning of a line (possibly with some spaces before)? Are commas used also in other contexts besides function and procedure invocation? cheers Lorenzo P.S. some examples of programs might be useful to do some tests; have you already a partial language definition for IDL to start from? On 05/24/2011 05:27 PM, Peter Willis wrote:On 5/23/2011 7:10 AM, Lorenzo Bettini wrote:(?=\() checks whether after the name there's a ( but does not consume it can the syntax of your procedure definition be identified with a regular expression? Can you make some examples of procedures? cheers LorenzoHello, In 'IDL' procedures are *called* in the following way: PROCEDURE_NAME , ARGUMENT_1, ARGUMENT_2, ARGUMENT_3, .... , ARGUMENT_N As you can see no brackets or parenthesis are used. The problem here is a regex would need to deal with only the first case of the comma positioned after 'PROCEDURE_NAME' and ignore all other groupings until the end of the statement. There is also on other problem in that statements can use continuation where a '$' indicates the current statement continues on to the next line: PROCEDURE_NAME , ARGUMENT_1, $ ARGUMENT_2, ARGUMENT_3, $ .... , ARGUMENT_N In this case regex needs to distinguish between the case of 'PRODEDURE_NAME' and cases where the statement has been continued. ie: not highlight 'ARGUMENT_2' due to the comma following there. Declarations for *both* functions and procedures are written in similar ways. The difference is only the 'RETURN' value in the case of functions: FUNCTION function_name, arg_1, arg_2 $ arg_3, arg_4, ...., arg_n ....<PROGRAM STATEMENTS>... RETURN, some_value END PRO procedure_name, arg_1, arg_2 arg_3, arg_4, ....,$ arg_n ....<PROGRAM STATEMENTS>... END Best Regards,
-- Lorenzo Bettini, PhD in Computer Science, DI, Univ. Torino ICQ# lbetto, 16080134 (GNU/Linux User # 158233) HOME: http://www.lorenzobettini.it MUSIC: http://www.purplesucker.com http://www.myspace.com/supertrouperabba BLOGS: http://tronprog.blogspot.com http://longlivemusic.blogspot.com http://www.gnu.org/software/src-highlite http://www.gnu.org/software/gengetopt http://www.gnu.org/software/gengen http://doublecpp.sourceforge.net
[Prev in Thread] | Current Thread | [Next in Thread] |