Have example/* global variable names start with g_
diff --git a/example/crc32/crc32.cc b/example/crc32/crc32.cc
index dd4089a..49f4a09 100644
--- a/example/crc32/crc32.cc
+++ b/example/crc32/crc32.cc
@@ -54,7 +54,7 @@
 #define SRC_BUFFER_ARRAY_SIZE (32 * 1024)
 #endif
 
-uint8_t src_buffer_array[SRC_BUFFER_ARRAY_SIZE];
+uint8_t g_src_buffer_array[SRC_BUFFER_ARRAY_SIZE];
 
 int  //
 main(int argc, char** argv) {
@@ -66,10 +66,10 @@
   }
 
   while (true) {
-    size_t n =
-        fread(src_buffer_array, sizeof(uint8_t), SRC_BUFFER_ARRAY_SIZE, stdin);
+    size_t n = fread(g_src_buffer_array, sizeof(uint8_t), SRC_BUFFER_ARRAY_SIZE,
+                     stdin);
     uint32_t checksum =
-        h.update_u32(wuffs_base__make_slice_u8(src_buffer_array, n));
+        h.update_u32(wuffs_base__make_slice_u8(g_src_buffer_array, n));
     if (feof(stdin)) {
       printf("%08" PRIx32 "\n", checksum);
       return 0;
diff --git a/example/gifplayer/gifplayer.c b/example/gifplayer/gifplayer.c
index 01f599c..0ad7154 100644
--- a/example/gifplayer/gifplayer.c
+++ b/example/gifplayer/gifplayer.c
@@ -41,16 +41,16 @@
 #include <unistd.h>
 #define WUFFS_EXAMPLE_USE_TIMERS
 
-bool started = false;
-struct timespec start_time = {0};
+bool g_started = false;
+struct timespec g_start_time = {0};
 
 int64_t  //
 micros_since_start(struct timespec* now) {
-  if (!started) {
+  if (!g_started) {
     return 0;
   }
-  int64_t nanos = (int64_t)(now->tv_sec - start_time.tv_sec) * 1000000000 +
-                  (int64_t)(now->tv_nsec - start_time.tv_nsec);
+  int64_t nanos = (int64_t)(now->tv_sec - g_start_time.tv_sec) * 1000000000 +
+                  (int64_t)(now->tv_nsec - g_start_time.tv_nsec);
   if (nanos < 0) {
     return 0;
   }
@@ -109,29 +109,29 @@
 #define MAX_DIMENSION (4096)
 #endif
 
-uint8_t src_buffer_array[SRC_BUFFER_ARRAY_SIZE] = {0};
-size_t src_len = 0;
+uint8_t g_src_buffer_array[SRC_BUFFER_ARRAY_SIZE] = {0};
+size_t g_src_len = 0;
 
-uint8_t* curr_dst_buffer = NULL;
-uint8_t* prev_dst_buffer = NULL;
-size_t dst_len;  // Length in bytes.
+uint8_t* g_curr_dst_buffer = NULL;
+uint8_t* g_prev_dst_buffer = NULL;
+size_t g_dst_len;  // Length in bytes.
 
-wuffs_base__slice_u8 workbuf = {0};
-wuffs_base__slice_u8 printbuf = {0};
+wuffs_base__slice_u8 g_workbuf = {0};
+wuffs_base__slice_u8 g_printbuf = {0};
 
-bool first_play = true;
-uint32_t num_loops_remaining = 0;
-wuffs_base__image_config ic = {0};
-wuffs_base__pixel_buffer pb = {0};
+bool g_first_play = true;
+uint32_t g_num_loops_remaining = 0;
+wuffs_base__image_config g_ic = {0};
+wuffs_base__pixel_buffer g_pb = {0};
 
-wuffs_base__flicks cumulative_delay_micros = 0;
+wuffs_base__flicks g_cumulative_delay_micros = 0;
 
 const char*  //
 read_stdin() {
-  while (src_len < SRC_BUFFER_ARRAY_SIZE) {
-    size_t n = fread(src_buffer_array + src_len, sizeof(uint8_t),
-                     SRC_BUFFER_ARRAY_SIZE - src_len, stdin);
-    src_len += n;
+  while (g_src_len < SRC_BUFFER_ARRAY_SIZE) {
+    size_t n = fread(g_src_buffer_array + g_src_len, sizeof(uint8_t),
+                     SRC_BUFFER_ARRAY_SIZE - g_src_len, stdin);
+    g_src_len += n;
     if (feof(stdin)) {
       return NULL;
     } else if (ferror(stdin)) {
@@ -149,7 +149,7 @@
 
   bool color;
   bool quirk_honor_background_color;
-} flags = {0};
+} g_flags = {0};
 
 const char*  //
 parse_flags(int argc, char** argv) {
@@ -174,19 +174,19 @@
     }
 
     if (!strcmp(arg, "c") || !strcmp(arg, "color")) {
-      flags.color = true;
+      g_flags.color = true;
       continue;
     }
     if (!strcmp(arg, "quirk_honor_background_color")) {
-      flags.quirk_honor_background_color = true;
+      g_flags.quirk_honor_background_color = true;
       continue;
     }
 
     return "main: unrecognized flag argument";
   }
 
-  flags.remaining_argc = argc - c;
-  flags.remaining_argv = argv + c;
+  g_flags.remaining_argc = argc - c;
+  g_flags.remaining_argv = argv + c;
   return NULL;
 }
 
@@ -198,7 +198,7 @@
 // "\xE2\x96\x88" of "█", U+2588 FULL BLOCK.
 #define BYTES_PER_COLOR_PIXEL 32
 
-const char* reset_color = "\x1B[0m";
+const char* g_reset_color = "\x1B[0m";
 
 void  //
 restore_background(wuffs_base__pixel_buffer* pb,
@@ -208,7 +208,7 @@
   size_t y;
   for (y = bounds.min_incl_y; y < bounds.max_excl_y; y++) {
     size_t x;
-    uint8_t* d = curr_dst_buffer + (y * width4) + (bounds.min_incl_x * 4);
+    uint8_t* d = g_curr_dst_buffer + (y * width4) + (bounds.min_incl_x * 4);
     for (x = bounds.min_incl_x; x < bounds.max_excl_x; x++) {
       wuffs_base__store_u32le__no_bounds_check(d, background_color);
       d += sizeof(wuffs_base__color_u32_argb_premul);
@@ -221,8 +221,8 @@
   uint32_t width = wuffs_base__pixel_config__width(&pb->pixcfg);
   uint32_t height = wuffs_base__pixel_config__height(&pb->pixcfg);
 
-  uint8_t* d = curr_dst_buffer;
-  uint8_t* p = printbuf.ptr;
+  uint8_t* d = g_curr_dst_buffer;
+  uint8_t* p = g_printbuf.ptr;
   *p++ = '\n';
   uint32_t y;
   for (y = 0; y < height; y++) {
@@ -242,7 +242,7 @@
     }
     *p++ = '\n';
   }
-  return p - printbuf.ptr;
+  return p - g_printbuf.ptr;
 }
 
 size_t  //
@@ -250,10 +250,10 @@
   uint32_t width = wuffs_base__pixel_config__width(&pb->pixcfg);
   uint32_t height = wuffs_base__pixel_config__height(&pb->pixcfg);
 
-  uint8_t* d = curr_dst_buffer;
-  uint8_t* p = printbuf.ptr;
+  uint8_t* d = g_curr_dst_buffer;
+  uint8_t* p = g_printbuf.ptr;
   *p++ = '\n';
-  p += sprintf((char*)p, "%s", reset_color);
+  p += sprintf((char*)p, "%s", g_reset_color);
   uint32_t y;
   for (y = 0; y < height; y++) {
     uint32_t x;
@@ -270,50 +270,50 @@
     }
     *p++ = '\n';
   }
-  p += sprintf((char*)p, "%s", reset_color);
-  return p - printbuf.ptr;
+  p += sprintf((char*)p, "%s", g_reset_color);
+  return p - g_printbuf.ptr;
 }
 
 // ----
 
 const char*  //
 try_allocate(wuffs_gif__decoder* dec) {
-  uint32_t width = wuffs_base__pixel_config__width(&ic.pixcfg);
-  uint32_t height = wuffs_base__pixel_config__height(&ic.pixcfg);
+  uint32_t width = wuffs_base__pixel_config__width(&g_ic.pixcfg);
+  uint32_t height = wuffs_base__pixel_config__height(&g_ic.pixcfg);
   uint64_t num_pixels = ((uint64_t)width) * ((uint64_t)height);
   if (num_pixels > (SIZE_MAX / sizeof(wuffs_base__color_u32_argb_premul))) {
     return "could not allocate dst buffer";
   }
 
-  dst_len = num_pixels * sizeof(wuffs_base__color_u32_argb_premul);
-  curr_dst_buffer = (uint8_t*)calloc(dst_len, 1);
-  if (!curr_dst_buffer) {
+  g_dst_len = num_pixels * sizeof(wuffs_base__color_u32_argb_premul);
+  g_curr_dst_buffer = (uint8_t*)calloc(g_dst_len, 1);
+  if (!g_curr_dst_buffer) {
     return "could not allocate curr-dst buffer";
   }
 
-  prev_dst_buffer = (uint8_t*)malloc(dst_len);
-  if (!prev_dst_buffer) {
+  g_prev_dst_buffer = (uint8_t*)malloc(g_dst_len);
+  if (!g_prev_dst_buffer) {
     return "could not allocate prev-dst buffer";
   }
 
   uint64_t workbuf_len_max_incl = wuffs_gif__decoder__workbuf_len(dec).max_incl;
   if (workbuf_len_max_incl > 0) {
-    workbuf = wuffs_base__malloc_slice_u8(
+    g_workbuf = wuffs_base__malloc_slice_u8(
         malloc, wuffs_gif__decoder__workbuf_len(dec).max_incl);
-    if (!workbuf.ptr) {
+    if (!g_workbuf.ptr) {
       return "could not allocate work buffer";
     }
   } else {
-    workbuf = wuffs_base__make_slice_u8(NULL, 0);
+    g_workbuf = wuffs_base__make_slice_u8(NULL, 0);
   }
 
   uint64_t plen = 1 + ((uint64_t)(width) + 1) * (uint64_t)(height);
-  uint64_t bytes_per_print_pixel = flags.color ? BYTES_PER_COLOR_PIXEL : 1;
+  uint64_t bytes_per_print_pixel = g_flags.color ? BYTES_PER_COLOR_PIXEL : 1;
   if (plen <= ((uint64_t)SIZE_MAX) / bytes_per_print_pixel) {
-    printbuf =
+    g_printbuf =
         wuffs_base__malloc_slice_u8(malloc, plen * bytes_per_print_pixel);
   }
-  if (!printbuf.ptr) {
+  if (!g_printbuf.ptr) {
     return "could not allocate print buffer";
   }
 
@@ -324,15 +324,15 @@
 allocate(wuffs_gif__decoder* dec) {
   const char* status_msg = try_allocate(dec);
   if (status_msg) {
-    free(printbuf.ptr);
-    printbuf = wuffs_base__make_slice_u8(NULL, 0);
-    free(workbuf.ptr);
-    workbuf = wuffs_base__make_slice_u8(NULL, 0);
-    free(prev_dst_buffer);
-    prev_dst_buffer = NULL;
-    free(curr_dst_buffer);
-    curr_dst_buffer = NULL;
-    dst_len = 0;
+    free(g_printbuf.ptr);
+    g_printbuf = wuffs_base__make_slice_u8(NULL, 0);
+    free(g_workbuf.ptr);
+    g_workbuf = wuffs_base__make_slice_u8(NULL, 0);
+    free(g_prev_dst_buffer);
+    g_prev_dst_buffer = NULL;
+    free(g_curr_dst_buffer);
+    g_curr_dst_buffer = NULL;
+    g_dst_len = 0;
   }
   return status_msg;
 }
@@ -346,36 +346,36 @@
     return wuffs_base__status__message(&status);
   }
 
-  if (flags.quirk_honor_background_color) {
+  if (g_flags.quirk_honor_background_color) {
     wuffs_gif__decoder__set_quirk_enabled(
         &dec, WUFFS_GIF__QUIRK_HONOR_BACKGROUND_COLOR, true);
   }
 
   wuffs_base__io_buffer src;
-  src.data.ptr = src_buffer_array;
-  src.data.len = src_len;
-  src.meta.wi = src_len;
+  src.data.ptr = &g_src_buffer_array[0];
+  src.data.len = g_src_len;
+  src.meta.wi = g_src_len;
   src.meta.ri = 0;
   src.meta.pos = 0;
   src.meta.closed = true;
 
-  if (first_play) {
-    status = wuffs_gif__decoder__decode_image_config(&dec, &ic, &src);
+  if (g_first_play) {
+    status = wuffs_gif__decoder__decode_image_config(&dec, &g_ic, &src);
     if (!wuffs_base__status__is_ok(&status)) {
       return wuffs_base__status__message(&status);
     }
-    if (!wuffs_base__image_config__is_valid(&ic)) {
+    if (!wuffs_base__image_config__is_valid(&g_ic)) {
       return "invalid image configuration";
     }
-    uint32_t width = wuffs_base__pixel_config__width(&ic.pixcfg);
-    uint32_t height = wuffs_base__pixel_config__height(&ic.pixcfg);
+    uint32_t width = wuffs_base__pixel_config__width(&g_ic.pixcfg);
+    uint32_t height = wuffs_base__pixel_config__height(&g_ic.pixcfg);
     if ((width > MAX_DIMENSION) || (height > MAX_DIMENSION)) {
       return "image dimensions are too large";
     }
 
     // Override the source's indexed pixel format to be non-indexed.
     wuffs_base__pixel_config__set(
-        &ic.pixcfg, WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL,
+        &g_ic.pixcfg, WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL,
         WUFFS_BASE__PIXEL_SUBSAMPLING__NONE, width, height);
 
     const char* msg = allocate(&dec);
@@ -383,7 +383,8 @@
       return msg;
     }
     status = wuffs_base__pixel_buffer__set_from_slice(
-        &pb, &ic.pixcfg, wuffs_base__make_slice_u8(curr_dst_buffer, dst_len));
+        &g_pb, &g_ic.pixcfg,
+        wuffs_base__make_slice_u8(g_curr_dst_buffer, g_dst_len));
     if (!wuffs_base__status__is_ok(&status)) {
       return wuffs_base__status__message(&status);
     }
@@ -404,8 +405,8 @@
       wuffs_base__color_u32_argb_premul background_color =
           wuffs_base__frame_config__background_color(&fc);
       size_t i;
-      size_t n = dst_len / sizeof(wuffs_base__color_u32_argb_premul);
-      uint8_t* p = curr_dst_buffer;
+      size_t n = g_dst_len / sizeof(wuffs_base__color_u32_argb_premul);
+      uint8_t* p = g_curr_dst_buffer;
       for (i = 0; i < n; i++) {
         wuffs_base__store_u32le__no_bounds_check(p, background_color);
         p += sizeof(wuffs_base__color_u32_argb_premul);
@@ -414,33 +415,33 @@
 
     switch (wuffs_base__frame_config__disposal(&fc)) {
       case WUFFS_BASE__ANIMATION_DISPOSAL__RESTORE_PREVIOUS: {
-        memcpy(prev_dst_buffer, curr_dst_buffer, dst_len);
+        memcpy(g_prev_dst_buffer, g_curr_dst_buffer, g_dst_len);
         break;
       }
     }
 
     wuffs_base__status decode_frame_status = wuffs_gif__decoder__decode_frame(
-        &dec, &pb, &src, WUFFS_BASE__PIXEL_BLEND__SRC_OVER, workbuf, NULL);
+        &dec, &g_pb, &src, WUFFS_BASE__PIXEL_BLEND__SRC_OVER, g_workbuf, NULL);
     if (decode_frame_status.repr == wuffs_base__note__end_of_data) {
       break;
     }
 
-    size_t n = flags.color ? print_color_art(&pb) : print_ascii_art(&pb);
+    size_t n = g_flags.color ? print_color_art(&g_pb) : print_ascii_art(&g_pb);
 
     switch (wuffs_base__frame_config__disposal(&fc)) {
       case WUFFS_BASE__ANIMATION_DISPOSAL__RESTORE_BACKGROUND: {
-        restore_background(&pb, wuffs_base__frame_config__bounds(&fc),
+        restore_background(&g_pb, wuffs_base__frame_config__bounds(&fc),
                            wuffs_base__frame_config__background_color(&fc));
         break;
       }
       case WUFFS_BASE__ANIMATION_DISPOSAL__RESTORE_PREVIOUS: {
-        uint8_t* swap = curr_dst_buffer;
-        curr_dst_buffer = prev_dst_buffer;
-        prev_dst_buffer = swap;
+        uint8_t* swap = g_curr_dst_buffer;
+        g_curr_dst_buffer = g_prev_dst_buffer;
+        g_prev_dst_buffer = swap;
 
         wuffs_base__status status = wuffs_base__pixel_buffer__set_from_slice(
-            &pb, &ic.pixcfg,
-            wuffs_base__make_slice_u8(curr_dst_buffer, dst_len));
+            &g_pb, &g_ic.pixcfg,
+            wuffs_base__make_slice_u8(g_curr_dst_buffer, g_dst_len));
         if (!wuffs_base__status__is_ok(&status)) {
           return wuffs_base__status__message(&status);
         }
@@ -449,28 +450,28 @@
     }
 
 #if defined(WUFFS_EXAMPLE_USE_TIMERS)
-    if (started) {
+    if (g_started) {
       struct timespec now;
       if (clock_gettime(CLOCK_MONOTONIC, &now)) {
         return strerror(errno);
       }
       int64_t elapsed_micros = micros_since_start(&now);
-      if (cumulative_delay_micros > elapsed_micros) {
-        usleep(cumulative_delay_micros - elapsed_micros);
+      if (g_cumulative_delay_micros > elapsed_micros) {
+        usleep(g_cumulative_delay_micros - elapsed_micros);
       }
 
     } else {
-      if (clock_gettime(CLOCK_MONOTONIC, &start_time)) {
+      if (clock_gettime(CLOCK_MONOTONIC, &g_start_time)) {
         return strerror(errno);
       }
-      started = true;
+      g_started = true;
     }
 #endif
 
-    fwrite(printbuf.ptr, sizeof(uint8_t), n, stdout);
+    fwrite(g_printbuf.ptr, sizeof(uint8_t), n, stdout);
     fflush(stdout);
 
-    cumulative_delay_micros +=
+    g_cumulative_delay_micros +=
         (1000 * wuffs_base__frame_config__duration(&fc)) /
         WUFFS_BASE__FLICKS_PER_MILLISECOND;
 
@@ -481,9 +482,9 @@
     }
   }
 
-  if (first_play) {
-    first_play = false;
-    num_loops_remaining = wuffs_gif__decoder__num_animation_loops(&dec);
+  if (g_first_play) {
+    g_first_play = false;
+    g_num_loops_remaining = wuffs_gif__decoder__num_animation_loops(&dec);
   }
 
   return NULL;
@@ -492,17 +493,17 @@
 const char*  //
 main1(int argc, char** argv) {
   TRY(parse_flags(argc, argv));
-  if (flags.remaining_argc > 0) {
+  if (g_flags.remaining_argc > 0) {
     return "main: bad argument: use \"program < input\", not \"program input\"";
   }
   TRY(read_stdin());
   while (true) {
     TRY(play());
-    if (num_loops_remaining == 0) {
+    if (g_num_loops_remaining == 0) {
       continue;
     }
-    num_loops_remaining--;
-    if (num_loops_remaining == 0) {
+    g_num_loops_remaining--;
+    if (g_num_loops_remaining == 0) {
       break;
     }
   }
diff --git a/example/imageviewer/imageviewer.c b/example/imageviewer/imageviewer.c
index 4b5fe4d..1447cee 100644
--- a/example/imageviewer/imageviewer.c
+++ b/example/imageviewer/imageviewer.c
@@ -69,8 +69,6 @@
 #define NUM_BACKGROUND_COLORS 3
 #define SRC_BUFFER_ARRAY_SIZE (64 * 1024)
 
-// Global variable names start with a "g_" prefix.
-
 wuffs_base__color_u32_argb_premul g_background_colors[NUM_BACKGROUND_COLORS] = {
     0xFF000000,
     0xFFFFFFFF,
diff --git a/example/jsonfindptrs/jsonfindptrs.cc b/example/jsonfindptrs/jsonfindptrs.cc
index 73ed7ad..325661e 100644
--- a/example/jsonfindptrs/jsonfindptrs.cc
+++ b/example/jsonfindptrs/jsonfindptrs.cc
@@ -18,7 +18,7 @@
 jsonfindptrs reads UTF-8 JSON from stdin and writes every node's JSON Pointer
 (RFC 6901) to stdout.
 
-See the "const char* usage" string below for details.
+See the "const char* g_usage" string below for details.
 
 ----
 
@@ -97,7 +97,7 @@
     }                          \
   } while (false)
 
-static const char* usage =
+static const char* g_usage =
     "Usage: jsonfindptrs -flags input.json\n"
     "\n"
     "Flags:\n"
@@ -177,11 +177,11 @@
 
   uint32_t max_output_depth;
   bool strict_json_pointer_syntax;
-} flags = {0};
+} g_flags = {0};
 
 std::string  //
 parse_flags(int argc, char** argv) {
-  flags.max_output_depth = 0xFFFFFFFF;
+  g_flags.max_output_depth = 0xFFFFFFFF;
 
   int c = (argc > 0) ? 1 : 0;  // Skip argv[0], the program name.
   for (; c < argc; c++) {
@@ -204,7 +204,7 @@
     }
 
     if (!strcmp(arg, "o") || !strcmp(arg, "max-output-depth")) {
-      flags.max_output_depth = 1;
+      g_flags.max_output_depth = 1;
       continue;
     } else if (!strncmp(arg, "o=", 2) ||
                !strncmp(arg, "max-output-depth=", 16)) {
@@ -213,21 +213,21 @@
       wuffs_base__result_u64 u = wuffs_base__parse_number_u64(
           wuffs_base__make_slice_u8((uint8_t*)arg, strlen(arg)));
       if (wuffs_base__status__is_ok(&u.status) && (u.value <= 0xFFFFFFFF)) {
-        flags.max_output_depth = (uint32_t)(u.value);
+        g_flags.max_output_depth = (uint32_t)(u.value);
         continue;
       }
-      return usage;
+      return g_usage;
     }
     if (!strcmp(arg, "s") || !strcmp(arg, "strict-json-pointer-syntax")) {
-      flags.strict_json_pointer_syntax = true;
+      g_flags.strict_json_pointer_syntax = true;
       continue;
     }
 
-    return usage;
+    return g_usage;
   }
 
-  flags.remaining_argc = argc - c;
-  flags.remaining_argv = argv + c;
+  g_flags.remaining_argc = argc - c;
+  g_flags.remaining_argv = argv + c;
   return "";
 }
 
@@ -698,13 +698,13 @@
         e += "~1";
         break;
       case '\n':
-        if (flags.strict_json_pointer_syntax) {
+        if (g_flags.strict_json_pointer_syntax) {
           return "";
         }
         e += "~n";
         break;
       case '\r':
-        if (flags.strict_json_pointer_syntax) {
+        if (g_flags.strict_json_pointer_syntax) {
           return "";
         }
         e += "~r";
@@ -720,7 +720,7 @@
 std::string  //
 print_json_pointers(JsonThing& jt, std::string s, uint32_t depth) {
   std::cout << s << std::endl;
-  if (depth++ >= flags.max_output_depth) {
+  if (depth++ >= g_flags.max_output_depth) {
     return "";
   }
 
@@ -752,10 +752,10 @@
   TRY(parse_flags(argc, argv));
 
   int input_file_descriptor = 0;  // A 0 default means stdin.
-  if (flags.remaining_argc > 1) {
-    return usage;
-  } else if (flags.remaining_argc == 1) {
-    const char* arg = flags.remaining_argv[0];
+  if (g_flags.remaining_argc > 1) {
+    return g_usage;
+  } else if (g_flags.remaining_argc == 1) {
+    const char* arg = g_flags.remaining_argv[0];
     input_file_descriptor = open(arg, O_RDONLY);
     if (input_file_descriptor < 0) {
       return std::string("main: cannot read ") + arg + ": " + strerror(errno);
diff --git a/example/jsonptr/jsonptr.cc b/example/jsonptr/jsonptr.cc
index e9ba151..9fd764f 100644
--- a/example/jsonptr/jsonptr.cc
+++ b/example/jsonptr/jsonptr.cc
@@ -19,7 +19,7 @@
 (RFC 6901) query syntax. It reads UTF-8 JSON from stdin and writes
 canonicalized, formatted UTF-8 JSON to stdout.
 
-See the "const char* usage" string below for details.
+See the "const char* g_usage" string below for details.
 
 ----
 
@@ -60,7 +60,7 @@
 This program uses Wuffs' JSON decoder at a relatively low level, processing the
 decoder's token-stream output individually. The core loop, in pseudo-code, is
 "for_each_token { handle_token(etc); }", where the handle_token function
-changes global state (e.g. the `depth` and `context` variables) and prints
+changes global state (e.g. the `g_depth` and `g_ctx` variables) and prints
 output text based on that state and the token's source text. Notably,
 handle_token is not recursive, even though JSON values can nest.
 
@@ -140,9 +140,9 @@
     }                          \
   } while (false)
 
-static const char* eod = "main: end of data";
+static const char* g_eod = "main: end of data";
 
-static const char* usage =
+static const char* g_usage =
     "Usage: jsonptr -flags input.json\n"
     "\n"
     "Flags:\n"
@@ -237,15 +237,15 @@
 #define WORK_BUFFER_ARRAY_SIZE \
   WUFFS_JSON__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE
 #if WORK_BUFFER_ARRAY_SIZE > 0
-uint8_t work_buffer_array[WORK_BUFFER_ARRAY_SIZE];
+uint8_t g_work_buffer_array[WORK_BUFFER_ARRAY_SIZE];
 #else
 // Not all C/C++ compilers support 0-length arrays.
-uint8_t work_buffer_array[1];
+uint8_t g_work_buffer_array[1];
 #endif
 
-bool sandboxed = false;
+bool g_sandboxed = false;
 
-int input_file_descriptor = 0;  // A 0 default means stdin.
+int g_input_file_descriptor = 0;  // A 0 default means stdin.
 
 #define MAX_INDENT 8
 #define INDENT_SPACES_STRING "        "
@@ -261,19 +261,20 @@
 #define TOKEN_BUFFER_ARRAY_SIZE (4 * 1024)
 #endif
 
-uint8_t dst_array[DST_BUFFER_ARRAY_SIZE];
-uint8_t src_array[SRC_BUFFER_ARRAY_SIZE];
-wuffs_base__token tok_array[TOKEN_BUFFER_ARRAY_SIZE];
+uint8_t g_dst_array[DST_BUFFER_ARRAY_SIZE];
+uint8_t g_src_array[SRC_BUFFER_ARRAY_SIZE];
+wuffs_base__token g_tok_array[TOKEN_BUFFER_ARRAY_SIZE];
 
-wuffs_base__io_buffer dst;
-wuffs_base__io_buffer src;
-wuffs_base__token_buffer tok;
+wuffs_base__io_buffer g_dst;
+wuffs_base__io_buffer g_src;
+wuffs_base__token_buffer g_tok;
 
-// curr_token_end_src_index is the src.data.ptr index of the end of the current
-// token. An invariant is that (curr_token_end_src_index <= src.meta.ri).
-size_t curr_token_end_src_index;
+// g_curr_token_end_src_index is the g_src.data.ptr index of the end of the
+// current token. An invariant is that (g_curr_token_end_src_index <=
+// g_src.meta.ri).
+size_t g_curr_token_end_src_index;
 
-uint32_t depth;
+uint32_t g_depth;
 
 enum class context {
   none,
@@ -282,18 +283,18 @@
   in_dict_after_brace,
   in_dict_after_key,
   in_dict_after_value,
-} ctx;
+} g_ctx;
 
 bool  //
 in_dict_before_key() {
-  return (ctx == context::in_dict_after_brace) ||
-         (ctx == context::in_dict_after_value);
+  return (g_ctx == context::in_dict_after_brace) ||
+         (g_ctx == context::in_dict_after_value);
 }
 
-uint32_t suppress_write_dst;
-bool wrote_to_dst;
+uint32_t g_suppress_write_dst;
+bool g_wrote_to_dst;
 
-wuffs_json__decoder dec;
+wuffs_json__decoder g_dec;
 
 // ----
 
@@ -542,7 +543,7 @@
     }
     return !previous_was_tilde;
   }
-} query;
+} g_query;
 
 // ----
 
@@ -557,12 +558,12 @@
   char* query_c_string;
   bool strict_json_pointer_syntax;
   bool tabs;
-} flags = {0};
+} g_flags = {0};
 
 const char*  //
 parse_flags(int argc, char** argv) {
-  flags.indent = 4;
-  flags.max_output_depth = 0xFFFFFFFF;
+  g_flags.indent = 4;
+  g_flags.max_output_depth = 0xFFFFFFFF;
 
   int c = (argc > 0) ? 1 : 0;  // Skip argv[0], the program name.
   for (; c < argc; c++) {
@@ -585,24 +586,24 @@
     }
 
     if (!strcmp(arg, "c") || !strcmp(arg, "compact-output")) {
-      flags.compact_output = true;
+      g_flags.compact_output = true;
       continue;
     }
     if (!strcmp(arg, "fail-if-unsandboxed")) {
-      flags.fail_if_unsandboxed = true;
+      g_flags.fail_if_unsandboxed = true;
       continue;
     }
     if (!strncmp(arg, "i=", 2) || !strncmp(arg, "indent=", 7)) {
       while (*arg++ != '=') {
       }
       if (('0' <= arg[0]) && (arg[0] <= '8') && (arg[1] == '\x00')) {
-        flags.indent = arg[0] - '0';
+        g_flags.indent = arg[0] - '0';
         continue;
       }
-      return usage;
+      return g_usage;
     }
     if (!strcmp(arg, "o") || !strcmp(arg, "max-output-depth")) {
-      flags.max_output_depth = 1;
+      g_flags.max_output_depth = 1;
       continue;
     } else if (!strncmp(arg, "o=", 2) ||
                !strncmp(arg, "max-output-depth=", 16)) {
@@ -611,84 +612,85 @@
       wuffs_base__result_u64 u = wuffs_base__parse_number_u64(
           wuffs_base__make_slice_u8((uint8_t*)arg, strlen(arg)));
       if (wuffs_base__status__is_ok(&u.status) && (u.value <= 0xFFFFFFFF)) {
-        flags.max_output_depth = (uint32_t)(u.value);
+        g_flags.max_output_depth = (uint32_t)(u.value);
         continue;
       }
-      return usage;
+      return g_usage;
     }
     if (!strncmp(arg, "q=", 2) || !strncmp(arg, "query=", 6)) {
       while (*arg++ != '=') {
       }
-      flags.query_c_string = arg;
+      g_flags.query_c_string = arg;
       continue;
     }
     if (!strcmp(arg, "s") || !strcmp(arg, "strict-json-pointer-syntax")) {
-      flags.strict_json_pointer_syntax = true;
+      g_flags.strict_json_pointer_syntax = true;
       continue;
     }
     if (!strcmp(arg, "t") || !strcmp(arg, "tabs")) {
-      flags.tabs = true;
+      g_flags.tabs = true;
       continue;
     }
 
-    return usage;
+    return g_usage;
   }
 
-  if (flags.query_c_string &&
-      !Query::validate(flags.query_c_string, strlen(flags.query_c_string),
-                       flags.strict_json_pointer_syntax)) {
+  if (g_flags.query_c_string &&
+      !Query::validate(g_flags.query_c_string, strlen(g_flags.query_c_string),
+                       g_flags.strict_json_pointer_syntax)) {
     return "main: bad JSON Pointer (RFC 6901) syntax for the -query=STR flag";
   }
 
-  flags.remaining_argc = argc - c;
-  flags.remaining_argv = argv + c;
+  g_flags.remaining_argc = argc - c;
+  g_flags.remaining_argv = argv + c;
   return nullptr;
 }
 
 const char*  //
 initialize_globals(int argc, char** argv) {
-  dst = wuffs_base__make_io_buffer(
-      wuffs_base__make_slice_u8(dst_array, DST_BUFFER_ARRAY_SIZE),
+  g_dst = wuffs_base__make_io_buffer(
+      wuffs_base__make_slice_u8(g_dst_array, DST_BUFFER_ARRAY_SIZE),
       wuffs_base__empty_io_buffer_meta());
 
-  src = wuffs_base__make_io_buffer(
-      wuffs_base__make_slice_u8(src_array, SRC_BUFFER_ARRAY_SIZE),
+  g_src = wuffs_base__make_io_buffer(
+      wuffs_base__make_slice_u8(g_src_array, SRC_BUFFER_ARRAY_SIZE),
       wuffs_base__empty_io_buffer_meta());
 
-  tok = wuffs_base__make_token_buffer(
-      wuffs_base__make_slice_token(tok_array, TOKEN_BUFFER_ARRAY_SIZE),
+  g_tok = wuffs_base__make_token_buffer(
+      wuffs_base__make_slice_token(g_tok_array, TOKEN_BUFFER_ARRAY_SIZE),
       wuffs_base__empty_token_buffer_meta());
 
-  curr_token_end_src_index = 0;
+  g_curr_token_end_src_index = 0;
 
-  depth = 0;
+  g_depth = 0;
 
-  ctx = context::none;
+  g_ctx = context::none;
 
   TRY(parse_flags(argc, argv));
-  if (flags.fail_if_unsandboxed && !sandboxed) {
+  if (g_flags.fail_if_unsandboxed && !g_sandboxed) {
     return "main: unsandboxed";
   }
   const int stdin_fd = 0;
-  if (flags.remaining_argc > ((input_file_descriptor != stdin_fd) ? 1 : 0)) {
-    return usage;
+  if (g_flags.remaining_argc >
+      ((g_input_file_descriptor != stdin_fd) ? 1 : 0)) {
+    return g_usage;
   }
 
-  query.reset(flags.query_c_string);
+  g_query.reset(g_flags.query_c_string);
 
   // If the query is non-empty, suprress writing to stdout until we've
   // completed the query.
-  suppress_write_dst = query.next_fragment() ? 1 : 0;
-  wrote_to_dst = false;
+  g_suppress_write_dst = g_query.next_fragment() ? 1 : 0;
+  g_wrote_to_dst = false;
 
-  TRY(dec.initialize(sizeof__wuffs_json__decoder(), WUFFS_VERSION, 0)
+  TRY(g_dec.initialize(sizeof__wuffs_json__decoder(), WUFFS_VERSION, 0)
           .message());
 
   // Consume an optional whitespace trailer. This isn't part of the JSON spec,
   // but it works better with line oriented Unix tools (such as "echo 123 |
   // jsonptr" where it's "echo", not "echo -n") or hand-edited JSON files which
   // can accidentally contain trailing whitespace.
-  dec.set_quirk_enabled(WUFFS_JSON__QUIRK_ALLOW_TRAILING_NEW_LINE, true);
+  g_dec.set_quirk_enabled(WUFFS_JSON__QUIRK_ALLOW_TRAILING_NEW_LINE, true);
 
   return nullptr;
 }
@@ -701,19 +703,19 @@
 
 const char*  //
 read_src() {
-  if (src.meta.closed) {
+  if (g_src.meta.closed) {
     return "main: internal error: read requested on a closed source";
   }
-  src.compact();
-  if (src.meta.wi >= src.data.len) {
-    return "main: src buffer is full";
+  g_src.compact();
+  if (g_src.meta.wi >= g_src.data.len) {
+    return "main: g_src buffer is full";
   }
   while (true) {
-    ssize_t n = read(input_file_descriptor, src.data.ptr + src.meta.wi,
-                     src.data.len - src.meta.wi);
+    ssize_t n = read(g_input_file_descriptor, g_src.data.ptr + g_src.meta.wi,
+                     g_src.data.len - g_src.meta.wi);
     if (n >= 0) {
-      src.meta.wi += n;
-      src.meta.closed = n == 0;
+      g_src.meta.wi += n;
+      g_src.meta.closed = n == 0;
       break;
     } else if (errno != EINTR) {
       return strerror(errno);
@@ -725,49 +727,49 @@
 const char*  //
 flush_dst() {
   while (true) {
-    size_t n = dst.meta.wi - dst.meta.ri;
+    size_t n = g_dst.meta.wi - g_dst.meta.ri;
     if (n == 0) {
       break;
     }
     const int stdout_fd = 1;
-    ssize_t i = write(stdout_fd, dst.data.ptr + dst.meta.ri, n);
+    ssize_t i = write(stdout_fd, g_dst.data.ptr + g_dst.meta.ri, n);
     if (i >= 0) {
-      dst.meta.ri += i;
+      g_dst.meta.ri += i;
     } else if (errno != EINTR) {
       return strerror(errno);
     }
   }
-  dst.compact();
+  g_dst.compact();
   return nullptr;
 }
 
 const char*  //
 write_dst(const void* s, size_t n) {
-  if (suppress_write_dst > 0) {
+  if (g_suppress_write_dst > 0) {
     return nullptr;
   }
   const uint8_t* p = static_cast<const uint8_t*>(s);
   while (n > 0) {
-    size_t i = dst.writer_available();
+    size_t i = g_dst.writer_available();
     if (i == 0) {
       const char* z = flush_dst();
       if (z) {
         return z;
       }
-      i = dst.writer_available();
+      i = g_dst.writer_available();
       if (i == 0) {
-        return "main: dst buffer is full";
+        return "main: g_dst buffer is full";
       }
     }
 
     if (i > n) {
       i = n;
     }
-    memcpy(dst.data.ptr + dst.meta.wi, p, i);
-    dst.meta.wi += i;
+    memcpy(g_dst.data.ptr + g_dst.meta.wi, p, i);
+    g_dst.meta.wi += i;
     p += i;
     n -= i;
-    wrote_to_dst = true;
+    g_wrote_to_dst = true;
   }
   return nullptr;
 }
@@ -841,16 +843,16 @@
     // Handle ']' or '}'.
     if ((vbc == WUFFS_BASE__TOKEN__VBC__STRUCTURE) &&
         (vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__POP)) {
-      if (query.is_at(depth)) {
+      if (g_query.is_at(g_depth)) {
         return "main: no match for query";
       }
-      if (depth <= 0) {
-        return "main: internal error: inconsistent depth";
+      if (g_depth <= 0) {
+        return "main: internal error: inconsistent g_depth";
       }
-      depth--;
+      g_depth--;
 
-      if (query.matched_all() && (depth >= flags.max_output_depth)) {
-        suppress_write_dst--;
+      if (g_query.matched_all() && (g_depth >= g_flags.max_output_depth)) {
+        g_suppress_write_dst--;
         // '…' is U+2026 HORIZONTAL ELLIPSIS, which is 3 UTF-8 bytes.
         TRY(write_dst((vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__FROM_LIST)
                           ? "\"[…]\""
@@ -858,12 +860,14 @@
                       7));
       } else {
         // Write preceding whitespace.
-        if ((ctx != context::in_list_after_bracket) &&
-            (ctx != context::in_dict_after_brace) && !flags.compact_output) {
+        if ((g_ctx != context::in_list_after_bracket) &&
+            (g_ctx != context::in_dict_after_brace) &&
+            !g_flags.compact_output) {
           TRY(write_dst("\n", 1));
-          for (uint32_t i = 0; i < depth; i++) {
-            TRY(write_dst(flags.tabs ? INDENT_TAB_STRING : INDENT_SPACES_STRING,
-                          flags.tabs ? 1 : flags.indent));
+          for (uint32_t i = 0; i < g_depth; i++) {
+            TRY(write_dst(
+                g_flags.tabs ? INDENT_TAB_STRING : INDENT_SPACES_STRING,
+                g_flags.tabs ? 1 : g_flags.indent));
           }
         }
 
@@ -872,40 +876,41 @@
             1));
       }
 
-      ctx = (vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_LIST)
-                ? context::in_list_after_value
-                : context::in_dict_after_key;
+      g_ctx = (vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_LIST)
+                  ? context::in_list_after_value
+                  : context::in_dict_after_key;
       goto after_value;
     }
 
     // Write preceding whitespace and punctuation, if it wasn't ']', '}' or a
     // continuation of a multi-token chain.
     if (!t.link_prev()) {
-      if (ctx == context::in_dict_after_key) {
-        TRY(write_dst(": ", flags.compact_output ? 1 : 2));
-      } else if (ctx != context::none) {
-        if ((ctx != context::in_list_after_bracket) &&
-            (ctx != context::in_dict_after_brace)) {
+      if (g_ctx == context::in_dict_after_key) {
+        TRY(write_dst(": ", g_flags.compact_output ? 1 : 2));
+      } else if (g_ctx != context::none) {
+        if ((g_ctx != context::in_list_after_bracket) &&
+            (g_ctx != context::in_dict_after_brace)) {
           TRY(write_dst(",", 1));
         }
-        if (!flags.compact_output) {
+        if (!g_flags.compact_output) {
           TRY(write_dst("\n", 1));
-          for (size_t i = 0; i < depth; i++) {
-            TRY(write_dst(flags.tabs ? INDENT_TAB_STRING : INDENT_SPACES_STRING,
-                          flags.tabs ? 1 : flags.indent));
+          for (size_t i = 0; i < g_depth; i++) {
+            TRY(write_dst(
+                g_flags.tabs ? INDENT_TAB_STRING : INDENT_SPACES_STRING,
+                g_flags.tabs ? 1 : g_flags.indent));
           }
         }
       }
 
       bool query_matched_fragment = false;
-      if (query.is_at(depth)) {
-        switch (ctx) {
+      if (g_query.is_at(g_depth)) {
+        switch (g_ctx) {
           case context::in_list_after_bracket:
           case context::in_list_after_value:
-            query_matched_fragment = query.tick();
+            query_matched_fragment = g_query.tick();
             break;
           case context::in_dict_after_key:
-            query_matched_fragment = query.matched_fragment();
+            query_matched_fragment = g_query.matched_fragment();
             break;
           default:
             break;
@@ -913,20 +918,20 @@
       }
       if (!query_matched_fragment) {
         // No-op.
-      } else if (!query.next_fragment()) {
+      } else if (!g_query.next_fragment()) {
         // There is no next fragment. We have matched the complete query, and
         // the upcoming JSON value is the result of that query.
         //
-        // Un-suppress writing to stdout and reset the ctx and depth as if we
-        // were about to decode a top-level value. This makes any subsequent
-        // indentation be relative to this point, and we will return eod after
-        // the upcoming JSON value is complete.
-        if (suppress_write_dst != 1) {
-          return "main: internal error: inconsistent suppress_write_dst";
+        // Un-suppress writing to stdout and reset the g_ctx and g_depth as if
+        // we were about to decode a top-level value. This makes any subsequent
+        // indentation be relative to this point, and we will return g_eod
+        // after the upcoming JSON value is complete.
+        if (g_suppress_write_dst != 1) {
+          return "main: internal error: inconsistent g_suppress_write_dst";
         }
-        suppress_write_dst = 0;
-        ctx = context::none;
-        depth = 0;
+        g_suppress_write_dst = 0;
+        g_ctx = context::none;
+        g_depth = 0;
       } else if ((vbc != WUFFS_BASE__TOKEN__VBC__STRUCTURE) ||
                  !(vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__PUSH)) {
         // The query has moved on to the next fragment but the upcoming JSON
@@ -939,32 +944,33 @@
     // value: string (a chain of raw or escaped parts), literal or number.
     switch (vbc) {
       case WUFFS_BASE__TOKEN__VBC__STRUCTURE:
-        if (query.matched_all() && (depth >= flags.max_output_depth)) {
-          suppress_write_dst++;
+        if (g_query.matched_all() && (g_depth >= g_flags.max_output_depth)) {
+          g_suppress_write_dst++;
         } else {
           TRY(write_dst(
               (vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_LIST) ? "[" : "{",
               1));
         }
-        depth++;
-        ctx = (vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_LIST)
-                  ? context::in_list_after_bracket
-                  : context::in_dict_after_brace;
+        g_depth++;
+        g_ctx = (vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_LIST)
+                    ? context::in_list_after_bracket
+                    : context::in_dict_after_brace;
         return nullptr;
 
       case WUFFS_BASE__TOKEN__VBC__STRING:
         if (!t.link_prev()) {
           TRY(write_dst("\"", 1));
-          query.restart_fragment(in_dict_before_key() && query.is_at(depth));
+          g_query.restart_fragment(in_dict_before_key() &&
+                                   g_query.is_at(g_depth));
         }
 
         if (vbd & WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_0_DST_1_SRC_DROP) {
           // No-op.
         } else if (vbd &
                    WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_1_DST_1_SRC_COPY) {
-          uint8_t* ptr = src.data.ptr + curr_token_end_src_index - len;
+          uint8_t* ptr = g_src.data.ptr + g_curr_token_end_src_index - len;
           TRY(write_dst(ptr, len));
-          query.incremental_match_slice(ptr, len);
+          g_query.incremental_match_slice(ptr, len);
         } else {
           return "main: internal error: unexpected string-token conversion";
         }
@@ -980,12 +986,12 @@
           return "main: internal error: unexpected unlinked token";
         }
         TRY(handle_unicode_code_point(vbd));
-        query.incremental_match_code_point(vbd);
+        g_query.incremental_match_code_point(vbd);
         return nullptr;
 
       case WUFFS_BASE__TOKEN__VBC__LITERAL:
       case WUFFS_BASE__TOKEN__VBC__NUMBER:
-        TRY(write_dst(src.data.ptr + curr_token_end_src_index - len, len));
+        TRY(write_dst(g_src.data.ptr + g_curr_token_end_src_index - len, len));
         goto after_value;
     }
 
@@ -997,21 +1003,21 @@
   // simple value). Empty parent containers are no longer empty. If the parent
   // container is a "{...}" object, toggle between keys and values.
 after_value:
-  if (depth == 0) {
-    return eod;
+  if (g_depth == 0) {
+    return g_eod;
   }
-  switch (ctx) {
+  switch (g_ctx) {
     case context::in_list_after_bracket:
-      ctx = context::in_list_after_value;
+      g_ctx = context::in_list_after_value;
       break;
     case context::in_dict_after_brace:
-      ctx = context::in_dict_after_key;
+      g_ctx = context::in_dict_after_key;
       break;
     case context::in_dict_after_key:
-      ctx = context::in_dict_after_value;
+      g_ctx = context::in_dict_after_value;
       break;
     case context::in_dict_after_value:
-      ctx = context::in_dict_after_key;
+      g_ctx = context::in_dict_after_key;
       break;
     default:
       break;
@@ -1024,17 +1030,17 @@
   TRY(initialize_globals(argc, argv));
 
   while (true) {
-    wuffs_base__status status = dec.decode_tokens(
-        &tok, &src,
-        wuffs_base__make_slice_u8(work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
+    wuffs_base__status status = g_dec.decode_tokens(
+        &g_tok, &g_src,
+        wuffs_base__make_slice_u8(g_work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
 
-    while (tok.meta.ri < tok.meta.wi) {
-      wuffs_base__token t = tok.data.ptr[tok.meta.ri++];
+    while (g_tok.meta.ri < g_tok.meta.wi) {
+      wuffs_base__token t = g_tok.data.ptr[g_tok.meta.ri++];
       uint64_t n = t.length();
-      if ((src.meta.ri - curr_token_end_src_index) < n) {
-        return "main: internal error: inconsistent src indexes";
+      if ((g_src.meta.ri - g_curr_token_end_src_index) < n) {
+        return "main: internal error: inconsistent g_src indexes";
       }
-      curr_token_end_src_index += n;
+      g_curr_token_end_src_index += n;
 
       // Skip filler tokens (e.g. whitespace).
       if (t.value() == 0) {
@@ -1044,7 +1050,7 @@
       const char* z = handle_token(t);
       if (z == nullptr) {
         continue;
-      } else if (z == eod) {
+      } else if (z == g_eod) {
         goto end_of_data;
       }
       return z;
@@ -1053,30 +1059,30 @@
     if (status.repr == nullptr) {
       return "main: internal error: unexpected end of token stream";
     } else if (status.repr == wuffs_base__suspension__short_read) {
-      if (curr_token_end_src_index != src.meta.ri) {
-        return "main: internal error: inconsistent src indexes";
+      if (g_curr_token_end_src_index != g_src.meta.ri) {
+        return "main: internal error: inconsistent g_src indexes";
       }
       TRY(read_src());
-      curr_token_end_src_index = src.meta.ri;
+      g_curr_token_end_src_index = g_src.meta.ri;
     } else if (status.repr == wuffs_base__suspension__short_write) {
-      tok.compact();
+      g_tok.compact();
     } else {
       return status.message();
     }
   }
 end_of_data:
 
-  // With a non-empty query, don't try to consume trailing whitespace or
+  // With a non-empty g_query, don't try to consume trailing whitespace or
   // confirm that we've processed all the tokens.
-  if (flags.query_c_string && *flags.query_c_string) {
+  if (g_flags.query_c_string && *g_flags.query_c_string) {
     return nullptr;
   }
 
   // Check that we've exhausted the input.
-  if ((src.meta.ri == src.meta.wi) && !src.meta.closed) {
+  if ((g_src.meta.ri == g_src.meta.wi) && !g_src.meta.closed) {
     TRY(read_src());
   }
-  if ((src.meta.ri < src.meta.wi) || !src.meta.closed) {
+  if ((g_src.meta.ri < g_src.meta.wi) || !g_src.meta.closed) {
     return "main: valid JSON followed by further (unexpected) data";
   }
 
@@ -1084,8 +1090,8 @@
   // filler tokens. For example, "true\n" is valid JSON (and fully consumed
   // with WUFFS_JSON__QUIRK_ALLOW_TRAILING_NEW_LINE enabled) with a trailing
   // filler token for the "\n".
-  for (; tok.meta.ri < tok.meta.wi; tok.meta.ri++) {
-    if (tok.data.ptr[tok.meta.ri].value_base_category() !=
+  for (; g_tok.meta.ri < g_tok.meta.wi; g_tok.meta.ri++) {
+    if (g_tok.data.ptr[g_tok.meta.ri].value_base_category() !=
         WUFFS_BASE__TOKEN__VBC__FILLER) {
       return "main: internal error: decoded OK but unprocessed tokens remain";
     }
@@ -1100,7 +1106,7 @@
     return 0;
   }
   size_t n;
-  if (status_msg == usage) {
+  if (status_msg == g_usage) {
     n = strlen(status_msg);
   } else {
     n = strnlen(status_msg, 2047);
@@ -1141,8 +1147,8 @@
         dash_dash = (arg[1] == '-') && (arg[2] == '\x00');
         continue;
       }
-      input_file_descriptor = open(arg, O_RDONLY);
-      if (input_file_descriptor < 0) {
+      g_input_file_descriptor = open(arg, O_RDONLY);
+      if (g_input_file_descriptor < 0) {
         fprintf(stderr, "%s: %s\n", arg, strerror(errno));
         return 1;
       }
@@ -1152,11 +1158,11 @@
 
 #if defined(WUFFS_EXAMPLE_USE_SECCOMP)
   prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT);
-  sandboxed = true;
+  g_sandboxed = true;
 #endif
 
   const char* z = main1(argc, argv);
-  if (wrote_to_dst) {
+  if (g_wrote_to_dst) {
     const char* z1 = write_dst("\n", 1);
     const char* z2 = flush_dst();
     z = z ? z : (z1 ? z1 : z2);
diff --git a/example/library/library.c b/example/library/library.c
index e6162d1..78cab0f 100644
--- a/example/library/library.c
+++ b/example/library/library.c
@@ -48,7 +48,7 @@
 #ifndef DST_BUFFER_ARRAY_SIZE
 #define DST_BUFFER_ARRAY_SIZE 1024
 #endif
-uint8_t dst_buffer_array[DST_BUFFER_ARRAY_SIZE];
+uint8_t g_dst_buffer_array[DST_BUFFER_ARRAY_SIZE];
 
 // src_ptr and src_len hold a gzip-encoded "Hello Wuffs."
 //
@@ -59,28 +59,28 @@
 //
 // Passing --no-name to the gzip command line also means to skip the timestamp,
 // which means that its output is deterministic.
-uint8_t src_ptr[] = {
+uint8_t g_src_ptr[] = {
     0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,  // 00..07
     0x00, 0x03, 0xf3, 0x48, 0xcd, 0xc9, 0xc9, 0x57,  // 08..0F
     0x08, 0x2f, 0x4d, 0x4b, 0x2b, 0xd6, 0xe3, 0x02,  // 10..17
     0x00, 0x3c, 0x84, 0x75, 0xbb, 0x0d, 0x00, 0x00,  // 18..1F
     0x00,                                            // 20..20
 };
-size_t src_len = 0x21;
+size_t g_src_len = 0x21;
 
 #define WORK_BUFFER_ARRAY_SIZE \
   WUFFS_GZIP__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE
 #if WORK_BUFFER_ARRAY_SIZE > 0
-uint8_t work_buffer_array[WORK_BUFFER_ARRAY_SIZE];
+uint8_t g_work_buffer_array[WORK_BUFFER_ARRAY_SIZE];
 #else
 // Not all C/C++ compilers support 0-length arrays.
-uint8_t work_buffer_array[1];
+uint8_t g_work_buffer_array[1];
 #endif
 
 static const char*  //
 decode() {
   wuffs_base__io_buffer dst;
-  dst.data.ptr = dst_buffer_array;
+  dst.data.ptr = g_dst_buffer_array;
   dst.data.len = DST_BUFFER_ARRAY_SIZE;
   dst.meta.wi = 0;
   dst.meta.ri = 0;
@@ -88,9 +88,9 @@
   dst.meta.closed = false;
 
   wuffs_base__io_buffer src;
-  src.data.ptr = src_ptr;
-  src.data.len = src_len;
-  src.meta.wi = src_len;
+  src.data.ptr = g_src_ptr;
+  src.data.len = g_src_len;
+  src.meta.wi = g_src_len;
   src.meta.ri = 0;
   src.meta.pos = 0;
   src.meta.closed = true;
@@ -109,7 +109,7 @@
   }
   status = wuffs_gzip__decoder__transform_io(
       dec, &dst, &src,
-      wuffs_base__make_slice_u8(work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
+      wuffs_base__make_slice_u8(g_work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
   if (!wuffs_base__status__is_ok(&status)) {
     free(dec);
     return wuffs_base__status__message(&status);
diff --git a/example/zcat/zcat.c b/example/zcat/zcat.c
index 07f9679..d1cefba 100644
--- a/example/zcat/zcat.c
+++ b/example/zcat/zcat.c
@@ -72,25 +72,25 @@
 #define WORK_BUFFER_ARRAY_SIZE \
   WUFFS_GZIP__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE
 
-uint8_t dst_buffer_array[DST_BUFFER_ARRAY_SIZE];
-uint8_t src_buffer_array[SRC_BUFFER_ARRAY_SIZE];
+uint8_t g_dst_buffer_array[DST_BUFFER_ARRAY_SIZE];
+uint8_t g_src_buffer_array[SRC_BUFFER_ARRAY_SIZE];
 #if WORK_BUFFER_ARRAY_SIZE > 0
-uint8_t work_buffer_array[WORK_BUFFER_ARRAY_SIZE];
+uint8_t g_work_buffer_array[WORK_BUFFER_ARRAY_SIZE];
 #else
 // Not all C/C++ compilers support 0-length arrays.
-uint8_t work_buffer_array[1];
+uint8_t g_work_buffer_array[1];
 #endif
 
 // ----
 
-static bool sandboxed = false;
+static bool g_sandboxed = false;
 
 struct {
   int remaining_argc;
   char** remaining_argv;
 
   bool fail_if_unsandboxed;
-} flags = {0};
+} g_flags = {0};
 
 const char*  //
 parse_flags(int argc, char** argv) {
@@ -115,15 +115,15 @@
     }
 
     if (!strcmp(arg, "fail-if-unsandboxed")) {
-      flags.fail_if_unsandboxed = true;
+      g_flags.fail_if_unsandboxed = true;
       continue;
     }
 
     return "main: unrecognized flag argument";
   }
 
-  flags.remaining_argc = argc - c;
-  flags.remaining_argv = argv + c;
+  g_flags.remaining_argc = argc - c;
+  g_flags.remaining_argv = argv + c;
   return NULL;
 }
 
@@ -139,7 +139,7 @@
   if (z) {
     return z;
   }
-  if (flags.fail_if_unsandboxed && !sandboxed) {
+  if (g_flags.fail_if_unsandboxed && !g_sandboxed) {
     return "main: unsandboxed";
   }
 
@@ -151,7 +151,7 @@
   }
 
   wuffs_base__io_buffer dst;
-  dst.data.ptr = dst_buffer_array;
+  dst.data.ptr = g_dst_buffer_array;
   dst.data.len = DST_BUFFER_ARRAY_SIZE;
   dst.meta.wi = 0;
   dst.meta.ri = 0;
@@ -159,7 +159,7 @@
   dst.meta.closed = false;
 
   wuffs_base__io_buffer src;
-  src.data.ptr = src_buffer_array;
+  src.data.ptr = g_src_buffer_array;
   src.data.len = SRC_BUFFER_ARRAY_SIZE;
   src.meta.wi = 0;
   src.meta.ri = 0;
@@ -184,12 +184,13 @@
     while (true) {
       status = wuffs_gzip__decoder__transform_io(
           &dec, &dst, &src,
-          wuffs_base__make_slice_u8(work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
+          wuffs_base__make_slice_u8(g_work_buffer_array,
+                                    WORK_BUFFER_ARRAY_SIZE));
 
       if (dst.meta.wi) {
         // TODO: handle EINTR and other write errors; see "man 2 write".
         const int stdout_fd = 1;
-        ignore_return_value(write(stdout_fd, dst_buffer_array, dst.meta.wi));
+        ignore_return_value(write(stdout_fd, g_dst_buffer_array, dst.meta.wi));
         dst.meta.ri = dst.meta.wi;
         wuffs_base__io_buffer__compact(&dst);
       }
@@ -241,7 +242,7 @@
 main(int argc, char** argv) {
 #if defined(WUFFS_EXAMPLE_USE_SECCOMP)
   prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT);
-  sandboxed = true;
+  g_sandboxed = true;
 #endif
 
   int exit_code = compute_exit_code(main1(argc, argv));