/* rectholes.c */
#include <p2c/p2c.h>


Static double LLX, LLY, HoleDepth, FeedRate,
	      SpaceX, SpaceY, X, Y,CurX, CurY;
Static double LineNo;
Static long I,J, NumX,NumY;
Static Char FileName[256];
Static boolean Done;
Static FILE *OutFile;


Static Void outNum(RealNum, SigFrac)
double RealNum;
long SigFrac;
{
  double i;
  int j;
  char format[8];

  for (i = 1.0, j = 0; i <= 6 || i<= abs(RealNum); i *= 10.0, j++)
    {}
  if (SigFrac > 0) 
    j += SigFrac+1;  /* J <= # int digits + 1 for decimal pt + #frac digits */
  if (RealNum < 0.0 )
    j += 1;          /* add a position for the minus sign */
  sprintf(format,"%%%d.%df",j,SigFrac);
    fprintf(OutFile, format, (RealNum));
}


Static Void WriteLineNo()
{
  putc('N', OutFile);
  outNum(LineNo, 0L);
  LineNo += 10.0;
  putc(' ', OutFile);
}


main(argc, argv)
int argc;
Char *argv[];
{
  OutFile = NULL;
  printf("Enter X,Y of Lower Left hole (real):");
  scanf("%lg%lg%*[^\n]", &LLX, &LLY);
  getchar();
  printf("\nEnter Number of holes to drill in X, Y (int):");
  scanf("%ld%ld%*[^\n]", &NumX, &NumY);
  getchar();
  printf("Enter Spacing between holes in X,Y (real):");
  scanf("%lg%lg%*[^\n]", &SpaceX, &SpaceY);
  getchar();
  printf("\nEnter  depth of holes, Drill Feed Rate (IPM) (real):");
  scanf("%lg%lg%*[^\n]", &HoleDepth, &FeedRate);
  getchar();
  printf("\nEnter File Name for CAM output:");
  scanf("%s",&FileName);
  putchar('\n');
  fprintf(stderr,"NumX = %d, NumY = %d\n",NumX,NumY);
  OutFile = fopen(FileName,"w");
  if (OutFile != NULL)
    rewind(OutFile);
  else
    OutFile = tmpfile();
  if (OutFile == NULL)
    exit(EXIT_FAILURE);
  LineNo = 10.0;
  CurY = LLY;
  for (I=1; I <= NumY; I++)
  {
    CurX = LLX;
    for (J=1; J <= NumX; J++)
    {
    WriteLineNo();
    fprintf(OutFile, "G01 F45 ");   /* Linear Interpolation */
    putc('X', OutFile);
    outNum(CurX, 4L);
    fprintf(OutFile, " Y");
    outNum(CurY, 4L);
    putc('\n', OutFile);
    WriteLineNo();
    fprintf(OutFile, " Z");
    outNum(0.1,4L);
    putc('\n', OutFile);
    WriteLineNo();
    fprintf(OutFile, "F");
    outNum(FeedRate,2L);
    fprintf(OutFile, " Z");
    outNum(-HoleDepth,4L);
    putc('\n', OutFile);
    WriteLineNo();
    fprintf(OutFile,"F30 Z");
    outNum(0.5,4L);
    putc('\n', OutFile);
    CurX += SpaceX;
    }
    CurY += SpaceY;
  }
  WriteLineNo();
  fprintf(OutFile, "M02\n");   /*End of Program */
  if (OutFile != NULL)
    fclose(OutFile);
  OutFile = NULL;
  if (OutFile != NULL)
    fclose(OutFile);
  exit(EXIT_SUCCESS);
}

/* End. */



