+ csg_curfile=0;
+ csg_direction=0;
+
+ chanservwallmessage("%s (%s) used GREP %s", sender->nick, rup->username, cargv[0]);
+ cs_log(sender, "GREP %s", cargv[0]);
+
+ return csg_execgrep(sender, cargv[0]);
+}
+
+int csg_dorgrep(void *source, int cargc, char **cargv) {
+ int startpoint;
+ nick *sender=source;
+ reguser *rup=getreguserfromnick(sender);
+
+ if (!rup)
+ return CMD_ERROR;
+
+ if (cargc<2) {
+ chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "rgrep");
+ return CMD_ERROR;
+ }
+
+ if (!protectedatoi(cargv[0], &startpoint)) {
+ chanservsendmessage(sender, "Error in starting day number.");
+ return CMD_ERROR;
+ }
+
+ if (startpoint<0) {
+ chanservsendmessage(sender, "Invalid starting day number.");
+ return CMD_ERROR;
+ }
+
+ if (startpoint>CSG_MAXSTARTPOINT) {
+ chanservsendmessage(sender, "Sorry, the maximum starting day is %d days.", CSG_MAXSTARTPOINT);
+ return CMD_ERROR;
+ }
+
+ chanservwallmessage("%s (%s) used RGREP %s %s", sender->nick, rup->username, cargv[0], cargv[1]);
+ cs_log(sender, "RGREP %s %s", cargv[0], cargv[1]);
+
+ csg_curfile=startpoint;
+ csg_direction=1;
+ return csg_execgrep(sender, cargv[1]);
+}
+
+int csg_execgrep(nick *sender, char *pattern) {
+ const char *errptr;
+ int erroffset;
+ int fd;
+ char filename[50];
+