/*
	Author: Alexander Atanasov <alex@zazolabs.com>

	Compile: gcc -Wall -o fixvis fixvis.c

	Usage: ./fixvis name.sch 2 0001 >  name-nofp.sch
		F 0 "U2" H 1300 2250 40  0000 C CNN
		F 1 "LD1117S33CTR" H 1300 2200 40  0000 C CNN
		F 2 "w_smd_trans:sot223" H 1300 2100 40  0001 C CNN
		F 3 "http://www.tme.eu/en/Document/bbab3ccbedd9735c8c7032084fb97a45/LD1117.pdf" H 1300 2000 60  0001 C CNN

*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
	char buf[4096];
	char *fn;
	char *newval;
	int fid;
	FILE *fp;
	int rc;
	int f;
	char *cp;
	int nskip;

	if (argc < 3) {
		fprintf(stderr, "%s file.sch fieldid newval\n"
				"fieldid:\n"
				"0 - Reference\n"
				"1 - Value\n"
				"2 - Footprint\n"
				"3 - Datasheet\n"
				"4+ - custom\n"
				"newval: 0000 = visible, 0001 = hidden\n", argv[0]);
		return -1;
	}
	fn = argv[1];
	fid = atoi(argv[2]);
	newval = argv[3];

	fp = fopen(fn, "r");
	if (!fp) {
		fprintf(stderr, "failed to read: %s\n", fn);
	}
	while ((fgets(buf,sizeof(buf),fp)) != NULL) {
//		F 3 "" H 1500 3650 60  0000 C CNN
		rc = sscanf(buf,"F %d", &f);
		if (rc == 1 && f == fid) {
			nskip = 3;
			cp = buf + strlen(buf) - 1;
			while (*cp && nskip) {
				cp --;
				if (*cp == ' ' || *cp == '\t' ) nskip --;
			}
//			fprintf(stderr,"got: %s\n", cp);
			if (*cp ) {
		printf("%s", buf);
				cp ++;
				memcpy(cp, newval, 4);
			}
		}
		printf("%s", buf);
	}
	fclose(fp);
	return 0;
}
