/*-------------------------------------------------------------------------*/ /* Program: incr */ /* Programmer: George Kerber */ /* Written: 07/24/89 */ /* Compiler: Lattice 5.04 */ /*-------------------------------------------------------------------------*/ #include #include #include #include #define WRITTEN "07/24/89 - 01/01/90" #define VERSION "v1.04b" void mistake(); void helpscreen(); void exitcode(); void main(); void main(int argc, char *argv[]) { FILE *tfile; char node1[31]; char option, filename[80] = "Invalid Option Combination"; char values[80] = "Multiple Color Options", opts[] = ""; char drive[FNSIZE],path[FMSIZE],node[FNSIZE],ext[FESIZE]; long value1,value2; int i, next, oflag = 0, nflag = 0, cflag = 0; stcgfn(node1,argv[0]); if(argc == 1 || (argc == 2 && argv[1][0] == '?')) helpscreen(node1); for( next = 1 ; (argopt(argc,argv,opts,&next,&option)) != NULL ; ) { switch(option) { case 'a': if(oflag) mistake(filename,node1); /* after */ oflag = 'a' ; break ; case 'b': if(oflag) mistake(filename,node1); /* before */ oflag = 'b' ; break ; case 's': case 'l': if(oflag) mistake(filename,node1); oflag = 'l' ; break ; /* show value */ case 'd': if(oflag) mistake(filename,node1); /* delete file */ oflag = 'd'; break ; case 'n': nflag = 1; break ; /* noline */ case '3': if(cflag) mistake(values,node1); printf(""); cflag = 1; break; /* orange output */ case '2': if(cflag) mistake(values,node1); printf(""); cflag = 1; break; /* black output */ case '1': if(cflag) mistake(values,node1); printf(""); cflag = 1; break; /* white output */ case '5': printf(""); break ; /* bold output */ case '6': printf(""); break ; /* underline */ case '7': printf(""); break ; /* italics */ default: mistake("Invalid Option",node1); } } /*----- Begin error & option checking.-------------------------------------*/ if(next >= argc) mistake("Missing INCR name",node1); if(argv[next][0] == '-') mistake("Missing INCR Name",node1); if(argc > (next + 1)) mistake("Invalid Option Count",node1); /*----- End error checking ------------------------------------------------*/ strsfn(argv[next],drive,path,node,ext); if(strcmp(ext,"") && strcmp(ext,"incr")) mistake("Filename extension defaults to \".incr\"",node1); strcpy(ext,"incr"); if(drive[0] == '\0' && path[0] == '\0') { strcpy(drive,"s:"); strcpy(path,"incr"); if(access("s:incr",0)) mkdir("s:incr"); } if(drive[0] == '\0' && path[0] != '\0') mistake("Full path must be specified",node1); strmfn(filename,drive,path,node,ext); /* create destination file name */ if(strcmp(ext,"") && strcmp(ext,"incr")) { mistake("Filename extension defaults to \".incr\"",node1); } strcpy(ext,"incr"); strmfn(filename,drive,path,node,ext); if(oflag == 'd') { if(remove(filename)) { exitcode(5); } else { exitcode(0); } } if(!access(filename,0)) { tfile = fopen(filename,"r+"); if(tfile == (FILE *)NULL) mistake("Can't open file for reading",node1); fgets(values,80,tfile); fclose(tfile); for(i = (strlen(values) - 2 ) ; i >= 0 ; i--) { if(!isdigit(values[i])) mistake("Incorrect file format",node1); } value1 = atol(values); if(oflag != 'l') { value2 = value1 + 1; if(strcmp(argv[1],"-d")) { remove(filename); tfile = fopen(filename,"a"); if(tfile == (FILE *)NULL) mistake("Can't write incremented value",node1); stcl_d(values,value2); fprintf(tfile,"%s",values); fprintf(tfile,"\n"); fflush(tfile); fclose(tfile); } } } else { tfile = fopen(filename,"w"); if(tfile == (FILE *)NULL) mistake("Can't create new file",node1); fprintf(tfile,"1"); fflush(tfile); fclose(tfile); value1 = 0; value2 = 1; } if(argc > 2) { switch(oflag) { case 'a': printf("%ld",value2) ; break ; case 'b': printf("%ld",value1) ; break ; case 'l': printf("%-6ld",value1); break ; default: break ; } } if(!nflag && (oflag == 'a' || oflag == 'b' || oflag == 'l')) printf("\n"); exitcode(0); } /*-------------------------------------------------------------------------*/ /* HELPSCREEN FUNCTION */ void helpscreen(char node1[]) { printf("\x0c\n\n %s George Kerber %10s %25s\n\n", node1,VERSION, WRITTEN); printf(" SYNTAX: %s [[-a|-b|-l -n -d -#] [drive:path/]filename]\n\n",node1); printf(" -a Value is displayed after it is incremented.\n"); printf(" -b Value is displayed before it is incremented.\n"); printf(" -l Value is only displayed.\n"); printf(" -d INCR file is unconditionally deleted.\n"); printf(" -n Newline is not output after value is displayed.\n"); printf(" -# Color, bold, etc....\n\n"); printf(" %s will increment the value in filename by 1 and write the new value\n",node1); printf(" back the file.\n\n"); printf(" If no path is specifed, %s will use s:incr for all files\n",node1); printf(" and create the s:incr directory if necessary.\n"); printf(" If %s is executed with a non-existent file, %s will create the\n",node1,node1); printf(" file with an initial value of 1.\n\n"); exitcode(0); } /*-------------------------------------------------------------------------*/ /* MISTAKE FUNCTION */ void mistake(char description[],char node1[]) { fprintf(stderr,"\n\07 ERROR: %s --> %s.\07\n\n", node1,description); exitcode(5); } /*-------------------------------------------------------------------------*/ /* EXITCODE FUNCTION */ void exitcode(int x) { printf(""); exit(x); } /*-------------------------------------------------------------------------*\ 11/01/89 v1.04a: Re-compiled with Lattice 5.04 01/01/90 v1.04b: removed all global variables \*-------------------------------------------------------------------------*/