Binary files gv-3.6.2/doc/gv.info and gv-3.6.2-savepos/doc/gv.info differ
diff -u -r gv-3.6.2/src/actions.c gv-3.6.2-savepos/src/actions.c
--- gv-3.6.2/src/actions.c	2005-08-10 20:46:20.000000000 +0530
+++ gv-3.6.2-savepos/src/actions.c	2008-01-09 09:14:43.000000000 +0530
@@ -793,6 +793,23 @@
 }
 
 /*##################################################################*/
+/* action_savepos */
+/*##################################################################*/
+
+void
+action_savepos(w, event, params, num_params)
+  Widget w;
+  XEvent *event;
+  String *params;
+  Cardinal *num_params;
+{
+  BEGINMESSAGE(action_savepos)
+  if (!XtIsSensitive(saveposEntry)) {INFMESSAGE(insensitive) ENDMESSAGE(action_savepos) return; }
+  cb_savepos((Widget)NULL,(XtPointer)NULL,(XtPointer)NULL);
+  ENDMESSAGE(action_savepos)
+}
+
+/*##################################################################*/
 /* action_save */
 /* Popup the save file dialog box. */
 /*##################################################################*/
diff -u -r gv-3.6.2/src/actions.h gv-3.6.2-savepos/src/actions.h
--- gv-3.6.2/src/actions.h	2004-11-11 17:51:04.000000000 +0530
+++ gv-3.6.2-savepos/src/actions.h	2008-01-08 22:57:35.000000000 +0530
@@ -150,6 +150,15 @@
 #endif
 );
 
+extern void 			action_savepos (
+#if NeedFunctionPrototypes
+    Widget,
+    XEvent *,
+    String *,
+    Cardinal *
+#endif
+);
+
 extern void 			action_save (
 #if NeedFunctionPrototypes
     Widget,
diff -u -r gv-3.6.2/src/callbacks.c gv-3.6.2-savepos/src/callbacks.c
--- gv-3.6.2/src/callbacks.c	2005-08-10 17:03:21.000000000 +0530
+++ gv-3.6.2-savepos/src/callbacks.c	2008-01-13 22:46:05.000000000 +0530
@@ -90,6 +90,9 @@
 static char* save_directory = NULL;
 static char* open_directory = NULL;
 
+static int last_psx;
+static int last_psy;
+
 /*############################################################*/
 /* cb_showTitle */
 /*############################################################*/
@@ -826,6 +829,28 @@
 }
 
 /*##################################################################*/
+/* cb_savepos */
+/*##################################################################*/
+
+void
+cb_savepos(w, client_data, call_data)
+    Widget w;
+    XtPointer client_data, call_data;
+{
+    FILE* posfile = fopen("gv.savepos", "a");
+
+    BEGINMESSAGE(cb_savepos)
+    if (posfile == NULL) {
+       INFMESSAGE(cannot open file for writting)
+       ENDMESSAGE(cb_savepos)
+       return;
+    }
+    fprintf(posfile, "%i %i\n", last_psx, last_psy);
+    fclose(posfile);
+    ENDMESSAGE(cb_savepos)
+}
+
+/*##################################################################*/
 /* cb_redisplay */
 /*##################################################################*/
 
@@ -1134,6 +1159,8 @@
            }
            x=p->psx; y=p->psy;
         }
+        last_psx = p->psx;
+        last_psy = p->psy;
         ENDMESSAGE1(cb_track)
 	return;
     }
@@ -1374,5 +1401,3 @@
   XtDestroyWidget(toplevel);
   ENDMESSAGE(cb_doQuit)
 }
-
-
diff -u -r gv-3.6.2/src/callbacks.h gv-3.6.2-savepos/src/callbacks.h
--- gv-3.6.2/src/callbacks.h	2004-11-11 17:51:04.000000000 +0530
+++ gv-3.6.2-savepos/src/callbacks.h	2008-01-09 09:15:12.000000000 +0530
@@ -193,6 +193,14 @@
 #endif
 );
 
+extern void			cb_savepos (
+#if NeedFunctionPrototypes
+   Widget,
+   XtPointer,
+   XtPointer
+#endif
+);
+
 extern void			cb_redisplay (
 #if NeedFunctionPrototypes
    Widget,
@@ -313,4 +321,5 @@
 #endif
 );
 
+
 #endif /* _GV_CALLBACKS_H_ */
diff -u -r gv-3.6.2/src/gv_misc_res.dat gv-3.6.2-savepos/src/gv_misc_res.dat
--- gv-3.6.2/src/gv_misc_res.dat	2005-04-01 02:44:27.000000000 +0530
+++ gv-3.6.2-savepos/src/gv_misc_res.dat	2008-01-09 09:25:28.000000000 +0530
@@ -401,6 +401,7 @@
  <Key>p:		GV_Print(all)		\n\
  ~c ~s <Key>period:	GV_Page(redisplay)	\n\
  <Key>period:		GV_Reopen()		\n\
+ <Key>Z:		GV_SavePos()		\n\
  c <Key>L:		GV_Page(redisplay)	\n\
  <Key>M:		GV_SetPageMark(current,mark)\n\
  <Key>N:		GV_SetPageMark(current,unmark)\n\
diff -u -r gv-3.6.2/src/main.c gv-3.6.2-savepos/src/main.c
--- gv-3.6.2/src/main.c	2006-09-15 00:26:08.000000000 +0530
+++ gv-3.6.2-savepos/src/main.c	2008-01-09 09:14:43.000000000 +0530
@@ -236,6 +236,7 @@
  { "GV_Print"		, action_print			},
  { "GV_Quit"		, action_quit			},
  { "GV_Reopen"		, action_reopen			},
+ { "GV_SavePos"		, action_savepos			},
  { "GV_Resizing"	, action_autoResize		},
  { "GV_Save"		, action_save			},
  { "GV_SetScale"	, action_setScale		},
@@ -780,6 +781,7 @@
        { &fileMenu,         "menu", NULL ,NULL},
        { &openEntry,        "open", cb_openFile, NULL},
        { &reopenEntry,      "reopen", cb_reopen, NULL},
+       { &saveposEntry,     "savepos", cb_savepos, NULL},
        { &updateEntry,      "update", cb_checkFile, (XtPointer)CHECK_FILE_VERSION },
        { NULL,              "line", NULL, NULL },
        { &printAllEntry,    "printAllPages", cb_print, (XtPointer)PAGE_MODE_ALL},
diff -u -r gv-3.6.2/src/main_globals.h gv-3.6.2-savepos/src/main_globals.h
--- gv-3.6.2/src/main_globals.h	2005-03-31 17:44:09.000000000 +0530
+++ gv-3.6.2-savepos/src/main_globals.h	2008-01-09 09:18:00.000000000 +0530
@@ -171,6 +171,7 @@
 EXTERN Widget            fileMenu;
 EXTERN Widget               openEntry;
 EXTERN Widget               reopenEntry;
+EXTERN Widget               saveposEntry;
 EXTERN Widget               updateEntry;
 EXTERN Widget               printAllEntry;
 EXTERN Widget               printMarkedEntry;
diff -u -r gv-3.6.2/src/misc.c gv-3.6.2-savepos/src/misc.c
--- gv-3.6.2/src/misc.c	2005-08-10 17:03:21.000000000 +0530
+++ gv-3.6.2-savepos/src/misc.c	2008-01-09 09:18:00.000000000 +0530
@@ -1084,6 +1084,7 @@
     misc_setSensitive(w_unmarkAllPages    , show_unmarkAllPages    , (toc_text    != NULL));
 
     XtSetSensitive(reopenEntry,      (gv_psfile   != NULL));
+    XtSetSensitive(saveposEntry,      (gv_psfile   != NULL));
     XtSetSensitive(printAllEntry,    (gv_psfile   != NULL));
     XtSetSensitive(printMarkedEntry, (toc_text    != NULL));
     XtSetSensitive(saveAllEntry,     (gv_psfile   != NULL));