+};
+
+/* See lineedit_ptr_hack.c */
+extern struct lineedit_statics *const lineedit_ptr_to_statics;
+
+#define S (*lineedit_ptr_to_statics)
+#define state (S.state )
+#define cmdedit_termw (S.cmdedit_termw )
+#define previous_SIGWINCH_handler (S.previous_SIGWINCH_handler)
+#define cmdedit_x (S.cmdedit_x )
+#define cmdedit_y (S.cmdedit_y )
+#define cmdedit_prmt_len (S.cmdedit_prmt_len)
+#define cursor (S.cursor )
+#define command_len (S.command_len )
+#define command_ps (S.command_ps )
+#define cmdedit_prompt (S.cmdedit_prompt )
+#define num_ok_lines (S.num_ok_lines )
+#define user_buf (S.user_buf )
+#define home_pwd_buf (S.home_pwd_buf )
+#define matches (S.matches )
+#define num_matches (S.num_matches )
+#define delptr (S.delptr )
+#define newdelflag (S.newdelflag )
+#define delbuf (S.delbuf )
+
+#define INIT_S() do { \
+ (*(struct lineedit_statics**)&lineedit_ptr_to_statics) = xzalloc(sizeof(S)); \
+ barrier(); \
+ cmdedit_termw = 80; \
+ USE_FEATURE_EDITING_FANCY_PROMPT(num_ok_lines = 1;) \
+ USE_FEATURE_GETUSERNAME_AND_HOMEDIR(home_pwd_buf = (char*)null_str;) \
+} while (0)
+static void deinit_S(void)
+{
+#if ENABLE_FEATURE_EDITING_FANCY_PROMPT
+ /* This one is allocated only if FANCY_PROMPT is on
+ * (otherwise it points to verbatim prompt (NOT malloced) */
+ free((char*)cmdedit_prompt);
+#endif
+#if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR
+ free(user_buf);
+ if (home_pwd_buf != null_str)
+ free(home_pwd_buf);
+#endif
+ free(lineedit_ptr_to_statics);
+}
+#define DEINIT_S() deinit_S()
+