summary refs log tree commit diff stats
path: root/compiler/semtempl.nim
Commit message (Collapse)AuthorAgeFilesLines
* remove unused stuffJacek Sieka2016-08-091-29/+0
|
* fixes #4353Andreas Rumpf2016-08-041-4/+6
|
* fixes #4555Andreas Rumpf2016-08-021-1/+1
|
* compiler almost free of deprecated expr/stmt namesAndreas Rumpf2016-07-301-1/+1
|
* stdlib and compiler don't use .immediate anymoreAndreas Rumpf2016-07-291-2/+6
|
* Merge branch 'devel' into new-llAndreas Rumpf2016-01-141-4/+1
|\
| * fixes #3498Adam Strzelecki2015-10-301-4/+1
| | | | | | | | | | | | | | | | | | Previously it was not possible to use template arguments in template body as the symbols were not resolved correctly leading to Error: undeclared identifier: 'XX', eg.: template defaultOf[T](t: T): expr = (var d: T; d) echo defaultOf(1) #<- invalid identifier, but should output 0
* | first implementation of the new lambda-lifting pass; barely anything worksAndreas Rumpf2015-12-261-3/+1
|/
* fixes regression: NimForum compiles againAraq2015-09-211-24/+61
|
* Merge branch 'devel' into fix_bracket_exprAraq2015-09-121-0/+11
|\
| * fixes some regressionsAraq2015-09-121-0/+11
| |
| * fixes #1528Araq2015-09-121-24/+1
| |
* | first attempt to fix 'a[i]' handling in genericsAraq2015-09-121-0/+51
| |
* | fixes #1528Araq2015-09-101-24/+1
|/
* fixes #2670Araq2015-08-081-4/+19
|
* minor refactoring for big fixes to comeAraq2015-07-241-3/+7
|
* fixes #1738Araq2015-07-221-1/+1
|
* don't store the scope for routinesAraq2015-04-041-1/+1
|
* fixes #2390Araq2015-03-231-53/+59
|
* fixes #2215Araq2015-02-251-1/+1
|
* Fix typosFederico Ceratto2015-02-151-1/+1
|
* Fix typosFederico Ceratto2015-02-151-2/+2
|
* nimsuggest improvementsAraq2015-01-301-3/+7
|
* fixes #1915Araq2015-01-121-3/+12
|
* Happy new year!Guillaume Gelin2015-01-061-1/+1
|
* fixes #940Araq2014-11-171-1/+2
|
* nimfix improvementsAraq2014-09-101-4/+2
|
* 'pretty' command does not exist anymore; improvements for nimfixAraq2014-09-101-1/+15
|
* updated the compiler to use the new symbol namesAraq2014-08-281-3/+3
|
* Nimrod renamed to NimAraq2014-08-281-1/+1
|
* fixes #1285Araq2014-06-301-1/+1
|
* Renamed considerAccents to considerQuotedIdentClay Sweetser2014-05-261-2/+2
|
* Renamed 'considerAcc' to 'considerAccents' for clarityClay Sweetser2014-05-241-2/+2
| | | | | Added documentation string to 'considerAccents' Modified renderParamType's assertion to allow nkAcc nodes.
* propagate semExpr flags in macro/template expansionZahary Karadjov2014-04-061-2/+2
|
* fixes #880Araq2014-04-011-14/+20
|
* fixes tmemit regressionAraq2014-03-261-0/+14
|
* fixes #1025; don't know what this breaksAraq2014-03-261-2/+0
|
* fixes #993Araq2014-03-131-1/+7
|
* fix #909Zahary Karadjov2014-03-091-1/+3
|
* split the inline and closure iterators into different symbol kinds for ↵Zahary Karadjov2014-03-061-2/+2
| | | | easier discrimination between them
* 'inject' for the new symbol binding rules in templatesAraq2014-01-191-7/+19
|
* Templates will pick the candidate in the nearest scope when symbols are mixed-inZahary Karadjov2013-12-311-0/+1
|
* case consistency: next stepsAraq2013-12-291-2/+2
|
* case consistency part 4Araq2013-12-271-27/+27
|
* case consistency part 1Araq2013-12-271-2/+2
|
* bootstraps with new template symbol binding rulesAraq2013-12-241-8/+8
|
* attempt to merge newtemplAraq2013-12-241-1/+3
|
* 'bind' default for clean templatesAraq2013-05-151-3/+44
|
* Merge branch 'master' of github.com:Araq/NimrodAraq2013-05-141-10/+9
|\
| * final fixes giving us a working compilerZahary Karadjov2013-05-121-3/+2
| |
fine LYIsNullDevice(s) LYSameFilename(s,NUL_DEVICE) #define LYSameFilename(a,b) (!strcmp(a,b)) #define LYSameHostname(a,b) (!strcmp(a,b)) #endif /* __CYGWIN__ */ #endif /* DOSPATH */ #endif /* VMS */ /* See definitions in src/LYCharVals.h. The hardcoded values... This prohibits binding C-c and C-g. Maybe it is better to remove this? */ #define LYCharIsINTERRUPT_HARD(ch) \ ((ch) == LYCharINTERRUPT1 || ch == LYCharINTERRUPT2) #define LYCharIsINTERRUPT(ch) \ (LYCharIsINTERRUPT_HARD(ch) || LKC_TO_LAC(keymap,ch) == LYK_INTERRUPT) #define LYCharIsINTERRUPT_NO_letter(ch) \ (LYCharIsINTERRUPT(ch) && !isprint(ch)) #if defined(USE_DOS_DRIVES) #define PATH_SEPARATOR ";" #define FILE_SEPARATOR "\\" #define LYIsPathSep(ch) ((ch) == '/' || (ch) == '\\') #define LYIsDosDrive(s) (isalpha(UCH((s)[0])) && (s)[1] == ':') #else #define PATH_SEPARATOR ":" #define FILE_SEPARATOR "/" #define LYIsPathSep(ch) ((ch) == '/') #define LYIsDosDrive(s) FALSE /* really nothing */ #endif #ifdef USE_ADDRLIST_PAGE #define LYIsListpageTitle(name) \ (!strcmp((name), LIST_PAGE_TITLE) || \ !strcmp((name), ADDRLIST_PAGE_TITLE)) #else #define LYIsListpageTitle(name) \ (!strcmp((name), LIST_PAGE_TITLE)) #endif #define LYIsTilde(ch) ((ch) == '~') #define LYIsHtmlSep(ch) ((ch) == '/') #define findPoundSelector(address) StrChr(address, '#') #define restorePoundSelector(pound) if ((pound) != NULL) *(pound) = '#' extern BOOL strn_dash_equ(const char *p1, const char *p2, int len); extern BOOLEAN LYAddSchemeForURL(char **AllocatedString, const char *default_scheme); extern BOOLEAN LYCachedTemp(char *result, char **cached); extern BOOLEAN LYCanDoHEAD(const char *address); extern BOOLEAN LYCanReadFile(const char *name); extern BOOLEAN LYCanWriteFile(const char *name); extern BOOLEAN LYCloseInput(FILE *fp); extern BOOLEAN LYCloseOutput(FILE *fp); extern BOOLEAN LYExpandHostForURL(char **AllocatedString, char *prefix_list, char *suffix_list); extern BOOLEAN LYFixCursesOnForAccess(const char *addr, const char *physical); extern BOOLEAN LYPathOffHomeOK(char *fbuffer, size_t fbuffer_size); extern BOOLEAN LYValidateFilename(bstring **result, bstring **given); extern BOOLEAN LYisAbsPath(const char *path); extern BOOLEAN LYisLocalAlias(const char *filename); extern BOOLEAN LYisLocalFile(const char *filename); extern BOOLEAN LYisLocalHost(const char *filename); extern BOOLEAN LYisRootPath(const char *path); extern BOOLEAN inlocaldomain(void); extern FILE *InternalPageFP(char *filename, int reuse_flag); extern FILE *LYAppendToTxtFile(const char *name); extern FILE *LYNewBinFile(const char *name); extern FILE *LYNewTxtFile(const char *name); extern FILE *LYOpenScratch(char *result, const char *prefix); extern FILE *LYOpenTemp(char *result, const char *suffix, const char *mode); extern FILE *LYOpenTempRewrite(char *result, const char *suffix, const char *mode); extern FILE *LYReopenTemp(char *name); extern char *Current_Dir(char *pathname); extern char *LYAbsOrHomePath(char **fname); extern char *LYAddPathToSave(char *fname); extern char *LYFindConfigFile(const char *nominal, const char *dftfile); extern char *LYGetEnv(const char *name); extern char *LYLastPathSep(const char *path); extern char *LYPathLeaf(char *pathname); extern char *LYTildeExpand(char **pathname, int embedded); extern char *LYgetXDisplay(void); extern char *strip_trailing_slash(char *my_dirname); extern char *trimPoundSelector(char *address); extern const char *Home_Dir(void); extern const char *LYGetHiliteStr(int cur, int count); extern const char *LYSysShell(void); extern const char *index_to_restriction(unsigned inx); extern const char *wwwName(const char *pathname); extern int HTCheckForInterrupt(void); extern int LYConsoleInputFD(int need_selectable); extern int LYCopyFile(char *src, char *dst); extern int LYGetHilitePos(int cur, int count); extern int LYRemoveTemp(char *name); extern int LYReopenInput(void); extern int LYSystem(char *command); extern int LYValidateOutput(char *filename); extern int find_restriction(const char *name, int len); extern int number2arrows(int number); extern size_t utf8_length(int utf_flag, const char *data); extern time_t LYmktime(char *string, int absolute); extern void BeginInternalPage(FILE *fp0, const char *Title, const char *HelpURL); extern void EndInternalPage(FILE *fp0); extern void HTAddSugFilename(char *fname); extern void HTSugFilenames_free(void); extern void LYAddHilite(int cur, char *text, int x); extern void LYAddHtmlSep(char **path); extern void LYAddHtmlSep0(char *path); extern void LYAddLocalhostAlias(char *alias); extern void LYAddPathSep(char **path); extern void LYAddPathSep0(char *path); extern void LYAddPathToHome(char *fbuffer, size_t fbuffer_size, const char *fname); extern void LYCheckBibHost(void); extern void LYCheckMail(void); extern void LYCleanupTemp(void); extern void LYCloseTemp(char *name); extern void LYCloseTempFP(FILE *fp); extern void LYConvertToURL(char **AllocatedString, int fixit); extern void LYDoCSI(char *url, const char *comment, char **csi); extern void LYEnsureAbsoluteURL(char **href, const char *name, int fixit); extern void LYFakeZap(int set); extern void LYFixCursesOn(const char *reason); extern void LYFreeHilites(int first, int last); extern void LYFreeStringList(HTList *list); extern void LYLocalFileToURL(char **target, const char *source); extern void LYLocalhostAliases_free(void); extern void LYRenamedTemp(char *oldname, char *newname); extern void LYSetHilite(int cur, const char *text); extern void LYTrimHtmlSep(char *path); extern void LYTrimPathSep(char *path); extern void LYTrimRelFromAbsPath(char *path); extern void LYhighlight(int flag, int cur, const char *target); extern void LYmsec_delay(unsigned msec); extern void LYsetXDisplay(char *new_display); extern void WriteInternalTitle(FILE *fp0, const char *Title); extern void WriteStreamTitle(HTStream *target, const char *Title); extern void change_sug_filename(char *fname); extern void convert_to_spaces(char *string, int condense); extern void free_and_clear(char **obj); extern void noviceline(int more_flag); extern void parse_restrictions(const char *s); extern void print_restrictions_to_fd(FILE *fp); extern void remove_backslashes(char *buf); extern void size_change(int sig); extern void statusline(const char *text); extern void toggle_novice_line(void); #if defined(MULTI_USER_UNIX) extern BOOL IsOurFile(const char *name); #else #define IsOurFile(name) TRUE #endif #ifdef USE_ASCII_CTYPES extern int ascii_tolower(int i); extern int ascii_toupper(int i); extern int ascii_isupper(int i); #endif #ifdef __CYGWIN__ extern int Cygwin_Shell(void); #endif #if defined(_WIN_CC) || defined(WIN_EX) extern int exec_command(char *cmd, int wait_flag); /* xsystem.c */ extern char *quote_pathname(char *pathname); extern int xsystem(char *cmd); #endif /* Keeping track of User Interface Pages: */ typedef enum { UIP_UNKNOWN = -1 ,UIP_HISTORY = 0 ,UIP_DOWNLOAD_OPTIONS ,UIP_PRINT_OPTIONS ,UIP_SHOWINFO ,UIP_LIST_PAGE ,UIP_VLINKS ,UIP_LYNXCFG ,UIP_OPTIONS_MENU ,UIP_DIRED_MENU ,UIP_PERMIT_OPTIONS ,UIP_UPLOAD_OPTIONS ,UIP_ADDRLIST_PAGE ,UIP_CONFIG_DEF ,UIP_TRACELOG ,UIP_INSTALL } UIP_t; #define UIP_P_FRAG 0x0001 /* flag: consider "url#frag" as matching "url" */ extern BOOL LYIsUIPage3(const char *url, UIP_t type, int flagparam); #define LYIsUIPage(url,type) LYIsUIPage3(url, type, UIP_P_FRAG) extern void LYRegisterUIPage(const char *url, UIP_t type); #define LYUnRegisterUIPage(type) LYRegisterUIPage(NULL, type) extern void LYUIPages_free(void); #ifdef CAN_CUT_AND_PASTE extern int put_clip(const char *szBuffer); /* get_clip_grab() returns a pointer to the string in the system area. get_clip_release() should be called ASAP after this. */ extern char *get_clip_grab(void); extern void get_clip_release(void); # ifdef WIN_EX # define size_clip() 8192 # else extern int size_clip(void); # endif #endif #if defined(WIN_EX) /* 1997/10/16 (Thu) 20:13:28 */ extern char *HTDOS_short_name(const char *path); extern char *w32_strerror(DWORD ercode); #endif #if defined(WIN_EX) || defined(__CYGWIN__) /* 2000/03/07 (Tue) 17:17:46 */ extern int unsafe_filename(const char *fname); extern FILE *safe_fopen(const char *fname, const char *mode); #endif #ifdef VMS extern void Define_VMSLogical(char *LogicalName, char *LogicalValue); #endif /* VMS */ #if !defined(HAVE_PUTENV) extern int putenv(const char *string); #endif /* HAVE_PUTENV */ #if defined(MULTI_USER_UNIX) extern void LYRelaxFilePermissions(const char *name); #else #define LYRelaxFilePermissions(name) /* nothing */ #endif #if defined(_WINDOWS) extern int win32_check_interrupt(void); #if (defined(__MINGW32__) && !defined(HAVE_SLEEP)) #undef sleep void sleep(unsigned sec); #endif #endif /* * Whether or not the status line must be shown. */ extern BOOLEAN mustshow; #define _statusline(msg) mustshow = TRUE, statusline(msg) /* * For is_url(). * * Universal document id types (see LYCheckForProxyURL) */ typedef enum { NOT_A_URL_TYPE = 0, UNKNOWN_URL_TYPE = 1, /* must be nonzero */ HTTP_URL_TYPE, FILE_URL_TYPE, FTP_URL_TYPE, NCFTP_URL_TYPE, WAIS_URL_TYPE, NEWS_URL_TYPE, NNTP_URL_TYPE, TELNET_URL_TYPE, TN3270_URL_TYPE, RLOGIN_URL_TYPE, GOPHER_URL_TYPE, HTML_GOPHER_URL_TYPE, TELNET_GOPHER_URL_TYPE, INDEX_GOPHER_URL_TYPE, MAILTO_URL_TYPE, BIBP_URL_TYPE, FINGER_URL_TYPE, CSO_URL_TYPE, HTTPS_URL_TYPE, SNEWS_URL_TYPE, PROSPERO_URL_TYPE, AFS_URL_TYPE, DATA_URL_TYPE, LYNXCGI_URL_TYPE, LYNXEXEC_URL_TYPE, LYNXPROG_URL_TYPE, NEWSPOST_URL_TYPE, NEWSREPLY_URL_TYPE, SNEWSPOST_URL_TYPE, SNEWSREPLY_URL_TYPE, LYNXCACHE_URL_TYPE, LYNXCFG_URL_TYPE, LYNXCOMPILE_OPTS_URL_TYPE, LYNXCOOKIE_URL_TYPE, LYNXDIRED_URL_TYPE, LYNXDOWNLOAD_URL_TYPE, LYNXEDITMAP_URL_TYPE, LYNXHIST_URL_TYPE, LYNXIMGMAP_URL_TYPE, LYNXKEYMAP_URL_TYPE, LYNXMESSAGES_URL_TYPE, LYNXOPTIONS_URL_TYPE, LYNXPRINT_URL_TYPE, PROXY_URL_TYPE } UrlTypes; extern UrlTypes LYCheckForProxyURL(char *filename); extern UrlTypes is_url(char *filename); /* common URLs */ #define STR_BIBP_URL "bibp:" #define LEN_BIBP_URL 5 #define isBIBP_URL(addr) !strncasecomp(addr, STR_BIBP_URL, LEN_BIBP_URL) #define STR_CSO_URL "cso:" #define LEN_CSO_URL 4 #define isCSO_URL(addr) !strncasecomp(addr, STR_CSO_URL, LEN_CSO_URL) #define STR_FILE_URL "file:" #define LEN_FILE_URL 5 #define isFILE_URL(addr) ((*addr == 'f' || *addr == 'F') &&\ !strncasecomp(addr, STR_FILE_URL, LEN_FILE_URL)) #define STR_FINGER_URL "finger:" #define LEN_FINGER_URL 7 #define isFINGER_URL(addr) !strncasecomp(addr, STR_FINGER_URL, LEN_FINGER_URL) #define STR_FTP_URL "ftp:" #define LEN_FTP_URL 4 #define isFTP_URL(addr) !strncasecomp(addr, STR_FTP_URL, LEN_FTP_URL) #define STR_GOPHER_URL "gopher:" #define LEN_GOPHER_URL 7 #define isGOPHER_URL(addr) !strncasecomp(addr, STR_GOPHER_URL, LEN_GOPHER_URL) #define STR_HTTP_URL "http:" #define LEN_HTTP_URL 5 #define isHTTP_URL(addr) !strncasecomp(addr, STR_HTTP_URL, LEN_HTTP_URL) #define STR_HTTPS_URL "https:" #define LEN_HTTPS_URL 6 #define isHTTPS_URL(addr) !strncasecomp(addr, STR_HTTPS_URL, LEN_HTTPS_URL) #define STR_MAILTO_URL "mailto:" #define LEN_MAILTO_URL 7 #define isMAILTO_URL(addr) !strncasecomp(addr, STR_MAILTO_URL, LEN_MAILTO_URL) #define STR_NEWS_URL "news:" #define LEN_NEWS_URL 5 #define isNEWS_URL(addr) !strncasecomp(addr, STR_NEWS_URL, LEN_NEWS_URL) #define STR_NNTP_URL "nntp:" #define LEN_NNTP_URL 5 #define isNNTP_URL(addr) !strncasecomp(addr, STR_NNTP_URL, LEN_NNTP_URL) #define STR_RLOGIN_URL "rlogin:" #define LEN_RLOGIN_URL 7 #define isRLOGIN_URL(addr) !strncasecomp(addr, STR_RLOGIN_URL, LEN_RLOGIN_URL) #define STR_SNEWS_URL "snews:" #define LEN_SNEWS_URL 6 #define isSNEWS_URL(addr) !strncasecomp(addr, STR_SNEWS_URL, LEN_SNEWS_URL) #define STR_TELNET_URL "telnet:" #define LEN_TELNET_URL 7 #define isTELNET_URL(addr) !strncasecomp(addr, STR_TELNET_URL, LEN_TELNET_URL) #define STR_TN3270_URL "tn3270:" #define LEN_TN3270_URL 7 #define isTN3270_URL(addr) !strncasecomp(addr, STR_TN3270_URL, LEN_TN3270_URL) #define STR_WAIS_URL "wais:" #define LEN_WAIS_URL 5 #define isWAIS_URL(addr) !strncasecomp(addr, STR_WAIS_URL, LEN_WAIS_URL) /* internal URLs */ #ifdef USE_CACHEJAR #define STR_LYNXCACHE "LYNXCACHE:" #define LEN_LYNXCACHE 10 #define isLYNXCACHE(addr) !strncasecomp(addr, STR_LYNXCACHE, LEN_LYNXCACHE) #else #define isLYNXCACHE(addr) FALSE #endif #define STR_LYNXCFG "LYNXCFG:" #define LEN_LYNXCFG 8 #define isLYNXCFG(addr) !strncasecomp(addr, STR_LYNXCFG, LEN_LYNXCFG) #define STR_LYNXCFLAGS "LYNXCOMPILEOPTS:" #define LEN_LYNXCFLAGS 16 #define isLYNXCFLAGS(addr) !strncasecomp(addr, STR_LYNXCFLAGS, LEN_LYNXCFLAGS) #define STR_LYNXCGI "lynxcgi:" #define LEN_LYNXCGI 8 #define isLYNXCGI(addr) ((*addr == 'l' || *addr == 'L') &&\ !strncasecomp(addr, STR_LYNXCGI, LEN_LYNXCGI)) #define STR_LYNXCOOKIE "LYNXCOOKIE:" #define LEN_LYNXCOOKIE 11 #define isLYNXCOOKIE(addr) !strncasecomp(addr, STR_LYNXCOOKIE, LEN_LYNXCOOKIE) #define STR_LYNXDIRED "LYNXDIRED:" #define LEN_LYNXDIRED 10 #define isLYNXDIRED(addr) !strncasecomp(addr, STR_LYNXDIRED, LEN_LYNXDIRED) #define STR_LYNXEXEC "lynxexec:" #define LEN_LYNXEXEC 9 #define isLYNXEXEC(addr) ((*addr == 'l' || *addr == 'L') &&\ !strncasecomp(addr, STR_LYNXEXEC, LEN_LYNXEXEC)) #define STR_LYNXDOWNLOAD "LYNXDOWNLOAD:" #define LEN_LYNXDOWNLOAD 13 #define isLYNXDOWNLOAD(addr) !strncasecomp(addr, STR_LYNXDOWNLOAD, LEN_LYNXDOWNLOAD) #define STR_LYNXEDITMAP "LYNXEDITMAP:" #define LEN_LYNXEDITMAP 11 #define isLYNXEDITMAP(addr) !strncasecomp(addr, STR_LYNXEDITMAP, LEN_LYNXEDITMAP) #define STR_LYNXHIST "LYNXHIST:" #define LEN_LYNXHIST 9 #define isLYNXHIST(addr) !strncasecomp(addr, STR_LYNXHIST, LEN_LYNXHIST) #define STR_LYNXKEYMAP "LYNXKEYMAP:" #define LEN_LYNXKEYMAP 11 #define isLYNXKEYMAP(addr) !strncasecomp(addr, STR_LYNXKEYMAP, LEN_LYNXKEYMAP) #define STR_LYNXIMGMAP "LYNXIMGMAP:" #define LEN_LYNXIMGMAP 11 #define isLYNXIMGMAP(addr) !strncasecomp(addr, STR_LYNXIMGMAP, LEN_LYNXIMGMAP) #define STR_LYNXMESSAGES "LYNXMESSAGES:" #define LEN_LYNXMESSAGES 13 #define isLYNXMESSAGES(addr) !strncasecomp(addr, STR_LYNXMESSAGES, LEN_LYNXMESSAGES) #define STR_LYNXOPTIONS "LYNXOPTIONS:" #define LEN_LYNXOPTIONS 12 #define isLYNXOPTIONS(addr) !strncasecomp(addr, STR_LYNXOPTIONS, LEN_LYNXOPTIONS) #define STR_LYNXPRINT "LYNXPRINT:" #define LEN_LYNXPRINT 10 #define isLYNXPRINT(addr) !strncasecomp(addr, STR_LYNXPRINT, LEN_LYNXPRINT) #define STR_LYNXPROG "lynxprog:" #define LEN_LYNXPROG 9 #define isLYNXPROG(addr) ((*addr == 'l' || *addr == 'L') &&\ !strncasecomp(addr, STR_LYNXPROG, LEN_LYNXPROG)) #define LYNXOPTIONS_PAGE(s) STR_LYNXOPTIONS s /* * For change_sug_filename(). */ extern HTList *sug_filenames; /* * syslog() facility */ #if defined(SYSLOG_REQUESTED_URLS) extern void LYOpenlog(const char *banner); extern void LYSyslog(char *arg); extern void LYCloselog(void); #endif /* SYSLOG_REQUESTED_URLS */ #undef STREQ /* conflict with wais.h */ /* * Miscellaneous. */ #define STREQ(a,b) (strcmp(a,b) == 0) #define STRNEQ(a,b,c) (StrNCmp(a,b,c) == 0) #define HIDE_CHMOD 0600 #define HIDE_UMASK 0077 #if defined(DOSPATH) || defined(__CYGWIN__) #define TXT_R "rt" #define TXT_W "wt" #define TXT_A "at+" #else #define TXT_R "r" #define TXT_W "w" #define TXT_A "a+" #endif #define BIN_R "rb" #define BIN_W "wb" #define BIN_A "ab+" #ifdef __cplusplus } #endif #endif /* LYUTILS_H */