#include <io.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>

char *sampon[4] = {
  "EsbLogin(servername,login,password)\n",
  "SetMessage(True,path\\error.txt)\n",
  "EsbSetApplicationAccess(%s,Appname,ESB_PRIV_APPLOAD)\n",
"EsbLogout()\n"};

char *sampoff[4] = {
  "EsbLogin(servername,login,password)\n",
  "SetMessage(True,path\\error.txt)\n",
  "EsbSetApplicationAccess(%s,Appname,ESB_PRIV_NONE)\n",
"EsbLogout()"};

FILE *tmv7_file_ptr, *tmv7_out_file_ptr, *tmv7_backup_file_ptr;
char line[256], input_file[160], output_file[160], backup_file[160];
int line_number = 0, mem_index = 0;

void output_line(void);
void copy(FILE *, FILE *);
void main(int, char *[]);

void output_line()
{
  fprintf(tmv7_out_file_ptr, "%s", line);
}		   /* output_line */

void copy(FILE * source, FILE * dest)
{
  rewind(source);
  while (fgets(line, 200, source))
    fprintf(dest, "%s", line);
}		   /* copy */

void main(int argc, char *argv[])
{
  if (argc < 2)
  {
    fprintf(stderr, "tmv7 version 1.01\n");
    fprintf(stderr, "Usage: tmv7 input_file\n");
    exit(1);
  }
  strcpy(input_file, argv[1]);
  if (!strchr(input_file, '.'))
    strcat(input_file, ".v7");
  strcpy(backup_file, input_file);
  strcpy(backup_file + strlen(backup_file) - 2, "bak");
  strcpy(output_file, input_file);
  strcpy(strchr(output_file, '.'), ".$$$");
  tmv7_file_ptr = fopen(input_file, "r+");
  if (!tmv7_file_ptr)
  {
    fprintf(stderr, "\7%s not found\n", input_file);
    exit(1);
  }
  tmv7_out_file_ptr = fopen(output_file, "w+");
  if (!tmv7_out_file_ptr)
  {
    fprintf(stderr, "\7Unable to open %s\n", output_file);
    exit(1);
  }
  tmv7_backup_file_ptr = fopen(backup_file, "w");
  if (!tmv7_backup_file_ptr)
  {
    fprintf(stderr, "\7Unable to open %s\n", backup_file);
    exit(1);
  }
  while (fgets(line, 200, tmv7_file_ptr))
  {
    line_number++;
    fprintf(tmv7_backup_file_ptr, "%s", line);
    if (isalpha(line[0]))
    {		   /* letter */
      if (toupper(line[0]) == 'M')
	mem_index = 1;
      else
	mem_index = 0;
      output_line();
      continue;
    }		   /* letter */
    if (mem_index)
    {		   /* memory channel */
      /* skip blank lines in memory channels */
      if (line[0] == '\n')
	continue;
      /* verify 3 digits at beginning of line */
      if (isdigit(line[0]) && isdigit(line[1]) && isdigit(line[2]) && line[3] == '\t')
      { 	   /* put in three digits */
	sprintf(line, "%03d", mem_index);
	line[3] = '\t';
      } 	   /* put in three digits */
      else
      { 	   /* invalid channel */
	fprintf(stderr, "\7Invalid memory channel in line %d\n", line_number);
	exit(1);
      } 	   /* invalid channel */
      mem_index++;
    }		   /* memory channel */
    output_line();
  }		   /* while */
  rewind(tmv7_file_ptr);
  copy(tmv7_out_file_ptr, tmv7_file_ptr);
  fcloseall();
  unlink(output_file);
}		   /* main */
