view harelet.c @ 11:1d4df12de9e3

Automated Vimcurial commmit
author VilyaemKenyaz
date Tue, 12 Sep 2023 08:05:11 -0400
parents c73aed540bdd
children 35e6a7b53e3c
line wrap: on
line source

/*********************************************
 * Description - Harelet is a CAD and compiler program for CNC milling machines
 * Author - William King
 * Date - Sep 08 2023
 * *******************************************/

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

#include "basedfilelib.h"

#ifdef __linux__
#include "linuxconio.h"
#endif

#ifdef _WIN32
#include <windows.h>>
#include <conio.h>
#endif

#define DEEPNESS 5
#define MAXPOINT 4096
#define UNITS	"G20"
#define SPEED	20

typedef struct{
	unsigned int X;
	unsigned int Y;
	unsigned int down;
}point;

point points[MAXPOINT];

unsigned int X = 100;
unsigned int Y = 25;
unsigned int step = 5;
unsigned int down = 0;
unsigned int numpoints = 0;
char action;

/*********************************************
 * Description - Renders the screen
 * Author - William King
 * Date - Sep 08 2023
 * *******************************************/
void Render(){	
	clrscr();
	gotoxy(0,3);
	puts("HARELET A CAD PROGRAM BY VILYAEM KENYAZ, PEEP SOFTWARE 2023");
	printf("Number of Points: %d X: %d Y: %d STEPSIZE: %d DWN?: %d\n",numpoints,X,Y,step,down);

	//Render points
	for(int i = 0;i != MAXPOINT;i++){
		gotoxy(0,50);

		gotoxy(points[i].X,points[i].Y);

		if(points[i].down == 0){
			//puts("X");
			printf("X");
		}
		else{

			//puts("*");
			printf("*");
		}


	}

	//Render cursor

	gotoxy(X,Y);

	puts("&");

	//Move cursor to top of document, so its not trailing the cadcursor
	gotoxy(0,0);



}

/*********************************************
 * Description - This function compiles instructions for CNC machines.
 * Author - William King
 * Date - Sep 08 2023
 * *******************************************/
void Compile(){
	
	char * filename;
	char * file;
	char buffer[sizeof(int)*8+1];
	int choice;
	clrscr();
	puts("Select your format\n1. RAW GCODE");
	scanf("%d",&choice);


	puts("Enter the filename");
	scanf("%s",filename);

	if(choice == 1){
		//Set the miller
		strcat(file,UNITS);
		strcat(file,"G0 X0 Y0 Z0");
		//Meat of instructions
		for(int i = 0;i != numpoints;i++){
			//Compose
			char * instruction;
			strcat(instruction,"G0 X");
			strcat(instruction,buffer);
			//Convert X to string
			sprintf(buffer,"%d",&points[i].X);
			strcat(instruction," Y");
			//Convert Y to string
			sprintf(buffer,"%d",&points[i].Y);
			strcat(instruction,buffer);
			//Convert Z to string
			sprintf(buffer,"%d",5);
			strcat(instruction," Z");
			strcat(instruction,buffer);
			//Write to string
			strcat(file,instruction);
		}
		//Finish
		strcat(file,"G0, X0, Y0, Z0");
		WriteFile(filename,file);
	}

	puts("Finished Compiling GCODE");

	
}


/*********************************************
 * Description - Main function
 * Author - William King
 * Date - Sep 08 2023
 * *******************************************/
void main(int argc, char* argv[]){
	clrscr();
	while(1){
		Render();
		//New CONIO controls
		switch(getchar()){
		case 'h': 
			X -= step;
			break;
		case 'j': 
			Y += step;
			break;
		case 'k': 
			Y -= step;
			break;
		case 'l': 
			X += step;
			break;

		case 's': 
			puts("New stepsize");
			scanf("%d",&step);

			break;

		case 'a': 
		   	points[numpoints].X = X;
		   	points[numpoints].Y = Y;
		   	points[numpoints].down = down;
		   	numpoints++;
			break;
		case 'd':
			if(down == 1){
			down = 0;
			}
			else{
			down = 1;
			}
			break;

		case 'c': 
			Compile();
			break;

		default:
			putchar('\a');
			break;
		}
	}

	exit(0);
}