/* holecircle.c */

#include <stdio.h>
#include <math.h>

static double CenterX, CenterY, HoleDepth, CircDia, CircRadius, FeedRate,
	      CurRadius, X, Y, Angle, CurAngle,
	      CurX, CurY, TwoPi;
static double LineNo;
static long I;
static double NumPattern, NumHoles;
static char FileName[256];
static int Done;
static FILE *OutFile;
int EXIT_SUCCESS=1;
int EXIT_FAILURE=0;
int true =1;
int false =0;


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

  for (i = 1.0, j = 0; j <= 6 && i<= fabs(RealNum); i *= 10.0, j++)
    {}
    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.%dlf",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 Center of hole circle X,Y (real):");
  scanf("%lf%lf", &CenterX, &CenterY);
  getchar();
  printf("\nEnter Diameter of hole circle, depth of holes (real):");
  scanf("%lf%lf", &CircDia, &HoleDepth);
  getchar();
  printf("\nEnter Number of holes in pattern, number of holes to drill:");
  scanf("%lf%lf", &NumPattern, &NumHoles);
  getchar();
  printf("\nEnter Drill Feed Rate (IPM) (real):");
  scanf("%lf", &FeedRate);
  getchar();
  printf("\nEnter File Name for CAM output:");
  scanf("%s",&FileName);
  putchar('\n');
  OutFile = fopen(FileName,"w");
  if (OutFile != NULL)
    rewind(OutFile);
  else
    OutFile = tmpfile();
  if (OutFile == NULL)
    exit(EXIT_FAILURE);
  LineNo = 10.0;
  CircRadius = CircDia / 2.0;
  TwoPi = 6.283185308;
  Angle = TwoPi / NumPattern;
  CurAngle = 0.0;
  for (I=1; I<= NumHoles; I++)
    {
    CurY = CenterY + CircRadius * cos(CurAngle);
    CurX = CenterX + CircRadius * sin(CurAngle);
    WriteLineNo();
    fprintf(OutFile, "G01 F30 ");   /* Linear Interpolation */
    putc('X', OutFile);
    outNum(CurX, 4L);
    fprintf(OutFile, " Y");
    outNum(CurY, 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.1,4L);
    putc('\n', OutFile);
    CurAngle += Angle;
    }

  WriteLineNo();
  fprintf(OutFile,"F30 X");
  outNum(CenterX,4L);
  fprintf(OutFile," Y");   /* return to center */
  outNum(CenterY,4L);
  putc('\n',OutFile);
  WriteLineNo();
  fprintf(OutFile, "M02\n");   /*End of Program */
  if (OutFile != NULL)
    fclose(OutFile);
  OutFile = NULL;
  if (OutFile != NULL)
    fclose(OutFile);
  exit(EXIT_SUCCESS);
}

/* End. */



