diff src/c/urweb.c @ 565:74800be65591

Creation of sources in server code
author Adam Chlipala <adamc@hcoop.net>
date Fri, 19 Dec 2008 11:47:18 -0500
parents 6daa59a55c43
children a152905c3c3b
line wrap: on
line diff
--- a/src/c/urweb.c	Fri Dec 19 10:27:58 2008 -0500
+++ b/src/c/urweb.c	Fri Dec 19 11:47:18 2008 -0500
@@ -32,7 +32,7 @@
   char **inputs;
 
   char *script, *script_front, *script_back;
-  int reactive_count;
+  int source_count;
 
   void *db;
 
@@ -75,7 +75,7 @@
 
   ctx->script_front = ctx->script = malloc(script_len);
   ctx->script_back = ctx->script_front + script_len;
-  ctx->reactive_count = 0;
+  ctx->source_count = 0;
 
   return ctx;
 }
@@ -105,7 +105,7 @@
   ctx->heap_front = ctx->heap;
   ctx->regions = NULL;
   ctx->cleanup_front = ctx->cleanup;
-  ctx->reactive_count = 0;
+  ctx->source_count = 0;
 }
 
 void uw_reset_keep_request(uw_context ctx) {
@@ -374,14 +374,27 @@
   ctx->script_front += len;
 }
 
-int uw_Basis_new_client_reactive(uw_context ctx) {
+char *uw_Basis_get_script(uw_context ctx, uw_unit u) {
+  if (ctx->script_front == ctx->script) {
+    char *r = uw_malloc(ctx, 1);
+    r[0] = 0;
+    return r;
+  } else {
+    char *r = uw_malloc(ctx, 41 + (ctx->script_front - ctx->script));
+
+    sprintf(r, "<script type=\"text/javascript\">%s</script>", ctx->script);
+    return r;
+  }
+}
+
+int uw_Basis_new_client_source(uw_context ctx, uw_unit u) {
   size_t len;
 
   uw_check_script(ctx, 8 + INTS_MAX);
-  sprintf(ctx->script_front, "var e%d=0\n%n", ctx->reactive_count, &len);
+  sprintf(ctx->script_front, "var e%d=0\n%n", ctx->source_count, &len);
   ctx->script_front += len;
 
-  return ctx->reactive_count++;
+  return ctx->source_count++;
 }
 
 static void uw_check(uw_context ctx, size_t extra) {