⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slospath.c

📁 一个C格式的脚本处理函数库源代码,可让你的C程序具有执行C格式的脚本文件
💻 C
字号:
/* Pathname intrinsic functions *//* Copyright (c) 1999, 2001, 2002, 2003 John E. Davis * This file is part of the S-Lang library. * * You may distribute under the terms of either the GNU General Public * License or the Perl Artistic License. */#include "slinclud.h"#include "slang.h"#include "_slang.h"#ifdef VMS# include <stat.h>#else# include <sys/stat.h>#endifstatic void path_concat (char *a, char *b){   SLang_push_malloced_string (SLpath_dircat (a,b));}static void path_extname (char *path){#ifdef VMS   char *p;#endif   path = SLpath_extname (path);#ifndef VMS   SLang_push_string (path);#else   p = strchr (path, ';');   if (p == NULL)     (void)SLang_push_string (p);   else     (void)SLang_push_malloced_string (SLmake_nstring (path, (unsigned int)(p - path)));#endif}static void path_basename (char *path){   (void) SLang_push_string (SLpath_basename (path));}static void path_dirname (char *path){   (void) SLang_push_malloced_string (SLpath_dirname (path));}static void path_sans_extname (char *path){   (void) SLang_push_malloced_string (SLpath_pathname_sans_extname (path));}static char *Load_Path;int SLpath_set_load_path (char *path){   if (path == NULL)     {	SLang_free_slstring (Load_Path);	Load_Path = NULL;	return 0;     }     path = SLang_create_slstring (path);   if (path == NULL)     return -1;      if (Load_Path != NULL)     SLang_free_slstring (Load_Path);      Load_Path = path;   return 0;}char *SLpath_get_load_path (void){   return SLang_create_slstring (Load_Path);}static char *get_load_path (void){   if (Load_Path == NULL)     return "";   return Load_Path;}static void set_load_path (char *path){   (void) SLpath_set_load_path (path);}static char *more_recent (char *a, char *b){   unsigned long ta, tb;   struct stat st;   if (a == NULL)     return b;   if (b == NULL)     return a;   if (-1 == stat (a, &st))     return b;   ta = (unsigned long) st.st_mtime;   if (-1 == stat (b, &st))     return a;   tb = (unsigned long) st.st_mtime;      if (tb >= ta)     return b;      return a;}   /* returns SLmalloced string */static char *find_file (char *path, char *file){   char *dirfile;   char *extname;   char *filebuf;   char *filesl, *fileslc;   unsigned int len;   if (NULL != (dirfile = SLpath_find_file_in_path (path, file)))     return dirfile;   /* Not found, or an error occured. */   if (SLang_Error)     return NULL;      extname = SLpath_extname (file);   if (*extname != 0)     return NULL;      /* No extension.  So look for .slc and .sl forms */   len = (extname - file);   filebuf = SLmalloc (len + 5);   strcpy (filebuf, file);   strcpy (filebuf + len, ".sl");	   filesl = SLpath_find_file_in_path (path, filebuf);   if ((filesl == NULL) && SLang_Error)     {	SLfree (filebuf);	return NULL;     }   strcpy (filebuf + len, ".slc");   fileslc = SLpath_find_file_in_path (path, filebuf);   SLfree (filebuf);   dirfile = more_recent (filesl, fileslc);   if (dirfile != filesl)     SLfree (filesl);   if (dirfile != fileslc)     SLfree (fileslc);      return dirfile;}char *_SLpath_find_file (char *file){   char *path;   char *dirfile;   if (file == NULL)     return NULL;   path = Load_Path;   if ((path == NULL) || (*path == 0))     path = ".";   dirfile = find_file (path, file);   if (dirfile != NULL)     {	file = SLang_create_slstring (dirfile);	SLfree (dirfile);	return file;     }   SLang_verror (SL_OBJ_NOPEN, "Unable to locate %s on load path", file);   return NULL;}static void get_path_delimiter (void){   (void) SLang_push_char ((char) SLpath_get_delimiter ());}#if 0static void set_path_delimiter (int *d){   (void) SLpath_set_delimiter (*d);}#endifstatic SLang_Intrin_Fun_Type Path_Name_Table [] ={   MAKE_INTRINSIC_S("set_slang_load_path", set_load_path, SLANG_VOID_TYPE),   MAKE_INTRINSIC_0("get_slang_load_path", get_load_path, SLANG_STRING_TYPE),   MAKE_INTRINSIC_0("path_get_delimiter", get_path_delimiter, SLANG_VOID_TYPE),   /* MAKE_INTRINSIC_I("path_set_delimiter", set_path_delimiter, SLANG_VOID_TYPE), */   MAKE_INTRINSIC_SS("path_concat", path_concat, SLANG_VOID_TYPE),   MAKE_INTRINSIC_S("path_extname", path_extname, SLANG_VOID_TYPE),   MAKE_INTRINSIC_S("path_dirname", path_dirname, SLANG_VOID_TYPE),   MAKE_INTRINSIC_S("path_basename", path_basename, SLANG_VOID_TYPE),   MAKE_INTRINSIC_S("path_sans_extname", path_sans_extname, SLANG_VOID_TYPE),   MAKE_INTRINSIC_S("path_is_absolute", SLpath_is_absolute_path, SLANG_INT_TYPE),   SLANG_END_INTRIN_FUN_TABLE};int SLang_init_ospath (void){   if (-1 == SLadd_intrin_fun_table(Path_Name_Table, "__OSPATH__"))     return -1;      return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -