 
 object *fn_divide (object *args, object *env) {
   (void) env;
-  int result = integer(first(args));
+  int result = checkinteger(DIVIDE, first(args));
   args = cdr(args);
   while (args != NULL) {
-    int arg = integer(car(args));
-    if (arg == 0) error(PSTR("Division by zero"));
+    int arg = checkinteger(DIVIDE, car(args));
+    if (arg == 0) error2(DIVIDE, PSTR("division by zero"));
     #if defined(checkoverflow)
-    if ((result == INT_MIN) && (arg == -1)) error3(DIVIDE, PSTR("arithmetic overflow"));
+    if ((result == INT_MIN) && (arg == -1)) error2(DIVIDE, overflow);
     #endif
     result = result / arg;
     args = cdr(args);

object *fn_readfromstring (object *args, object *env) {   
  (void) env;
  object *arg = first(args);
  if (!stringp(arg)) error3(READFROMSTRING, PSTR("argument is not a string"));
  GlobalString = arg;
  GlobalStringIndex = 0;
  return read(gstr);

  (void) env;
  int result = 0;
  while (args != NULL) {
    int temp = checkinteger(ADD, car(args));
    #if defined(checkoverflow)
    if (temp < 1) { if (INT_MIN - temp > result) error2(ADD, overflow); }
    else { if (INT_MAX - temp < result) error2(ADD, overflow); }
    #endif
    result = result + temp;
    args = cdr(args);
