core: Add string-ref.
[mes.git] / src / strings.c
index 9073c2a9853543da8d506602301937523968154f..86828461ce6c2f82803a116ebe225d9dcea5ef6f 100644 (file)
@@ -18,6 +18,8 @@
  * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <string.h>
+
 #define MAX_STRING 4096
 
 char const*
@@ -267,3 +269,16 @@ string_length (SCM string)
   assert (TYPE (string) == TSTRING);
   return MAKE_NUMBER (LENGTH (string));
 }
+
+SCM
+string_ref (SCM str, SCM k)
+{
+  assert (TYPE (str) == TSTRING);
+  assert (TYPE (k) == TNUMBER);
+  size_t size = LENGTH (str);
+  size_t i = VALUE (k);
+  if (i >= size)
+    error (cell_symbol_system_error, cons (MAKE_STRING0 ("value out of range"), k));
+  char const *p = CSTRING (str);
+  return MAKE_CHAR (p[i]);
+}