view srogue/makevers.c @ 94:ba9930a7f99d

rogue[345]: fix backspace key in prompts. md_readchar() mapped KEY_BACKSPACE to CTRL-H, but get_str(), which handles prompts for strings, only backs up when it receives the erase character. The key should be mapped to md_erasechar(). This fixes Red Hat Bugzilla #847852.
author John "Elwin" Edwards
date Tue, 27 Aug 2013 09:25:30 -0700
parents 2128c7dc8a40
children
line wrap: on
line source

/*
 * Change the version number of rogue
 *
 * The version must be in the file in the format of:
 *
 * " * @(#)filename\tVERSION\t ..."
 *
 * Where VERSION is a 3 character string, i.e., "8.2"
 *
 * Super-Rogue
 * Copyright (C) 1984 Robert D. Kindelberger
 * All rights reserved.
 *
 * See the file LICENSE.TXT for full copyright and licensing information.
 */

#include <stdio.h>
#include <time.h>

long clock;
struct tm *tp;
char who[100];

char *strrchr(), *strchr(), *fgets();

main(argc, argv)
int argc;
char **argv;
{
	register int i;
	register char *ptr;
	char ts[30];
	FILE *fp;

	strcpy(who, argv[0]);
	if (argc < 3) {
		fprintf(stderr,"Usage: %s VERSION c_files\n", who);
		exit(1);
	}
	if (strlen(argv[1]) != 3) {
		fprintf(stderr,"%s: VERSION must be length 3\n", who);
		exit(1);
	}
	time(&clock);
	tp = localtime(&clock);
	sprintf(ts,"%2d/%2d/%2d",tp->tm_mon + 1,tp->tm_mday,tp->tm_year);
	for (i = 2; i < argc; i++) {
		ptr = strrchr(argv[i], '.');
		/*
		 * make sure that files end in ".c" or ".h"
		 */
		if (ptr != NULL) {
			++ptr;
			if (*ptr == 'c' || *ptr == 'h')
				updvers(argv[1], argv[i]);
		}
	}
	/*
	 * now install new "version.c" file
	 */
	fp = fopen("vers.c", "w");
	if (fp == NULL) {
		fprintf(stderr,"%s: cant write version.c file\n",who);
		exit(1);
	}
	fprintf(fp, "/*\n * version number.\n */\n");
	fprintf(fp, "char version[] = ");
	fprintf(fp, "%c@(#)vers.c\t%3s\t(rdk)\t%s%c;\n", '"',
		argv[1], ts, '"');
	fprintf(fp, "char *release = \"%s (%s)\";\n", argv[1],ts);
	fclose(fp);
	exit(0);
}

#define LINESIZ	132

updvers(vers, fname)
char *fname;
char *vers;
{
	register FILE *fp;
	register char *ptr, *c;
	char line[LINESIZ];

	if ((fp = fopen(fname, "r+")) == NULL) {
		fprintf(stderr,"%s: Not able to update %s\n", who, fname);
		return;
	}
	while ((c = fgets(line, LINESIZ, fp)) != NULL) {
		if (line[1] == '*' && line[3] == '@' && line[5] == '#') {
			ptr = strchr(line, '\t');
			if (ptr != NULL) {
				fseek(fp, -strlen(line), 1);
				sprintf(ptr, "\t%3s\t(rdk)\t%2d/%2d/%2d\n", vers,
					tp->tm_mon + 1, tp->tm_mday, tp->tm_year);
				fprintf(fp, "%s", line);
				break;
			}
		}
	}
	fclose(fp);
}