diff --git a/ldb/dynbind.c b/ldb/dynbind.c
new file mode 100644
index 0000000000000000000000000000000000000000..4908ee2b0a104505233fe81c153cb44a3d058ba5
--- /dev/null
+++ b/ldb/dynbind.c
@@ -0,0 +1,59 @@
+/*
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/dynbind.c,v 1.1 1990/03/29 02:55:05 ch Exp $
+ * 
+ * Support for dynamic binding from C.
+ */
+
+#include "ldb.h"
+#include "lisp.h"
+#include "globals.h"
+
+bind_variable(symbol, value)
+lispobj symbol, value;
+{
+	lispobj old_value;
+	struct binding *binding;
+
+	old_value = SymbolValue(symbol);
+	binding = (struct binding *) current_binding_stack_pointer;
+	current_binding_stack_pointer += (sizeof(binding) / sizeof(lispobj));
+	binding->value = old_value;
+	binding->symbol = symbol;
+	SetSymbolValue(symbol, value);
+}
+
+unbind()
+{
+	struct binding *binding;
+	lispobj symbol;
+	
+	binding = ((struct binding *) current_binding_stack_pointer) - 1;
+		
+	symbol = binding->symbol;
+
+	SetSymbolValue(symbol, binding->value);
+
+	binding->symbol = 0;
+
+	current_binding_stack_pointer -= (sizeof(binding) / sizeof(lispobj));
+}
+
+unbind_to_here(bsp)
+lispobj *bsp;
+{
+	while (bsp > current_binding_stack_pointer) {
+		struct binding *binding;
+		lispobj symbol;
+
+		binding = ((struct binding *) current_binding_stack_pointer) - 1;
+		
+		symbol = binding->symbol;
+
+		if (symbol) {
+			SetSymbolValue(symbol, binding->value);
+			binding->symbol = 0;
+		}
+
+		current_binding_stack_pointer -= (sizeof(binding) / sizeof(lispobj));
+	}
+}