Mercurial Hosting > harelet
comparison harelet.c @ 19:8fe0b5711413
Added BasedTremGrx and Dvorak
author | VilyaemKenyaz |
---|---|
date | Wed, 27 Sep 2023 01:47:28 -0400 |
parents | 7bf25e90a1de |
children | 0555050bada0 |
comparison
equal
deleted
inserted
replaced
18:7bf25e90a1de | 19:8fe0b5711413 |
---|---|
5 * *******************************************/ | 5 * *******************************************/ |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 #include <stdlib.h> | 8 #include <stdlib.h> |
9 #include <string.h> | 9 #include <string.h> |
10 #include <assert.h> | |
10 | 11 |
11 #include "basedfilelib.h" | 12 #include "basedfilelib.h" |
12 | 13 #include "basedtermgrx.h" |
13 #ifdef __linux__ | |
14 #include "linuxconio.h" | |
15 #endif | |
16 | |
17 #ifdef _WIN32 | |
18 #include <windows.h>> | |
19 #include <conio.h> | |
20 #endif | |
21 | 14 |
22 #define DEEPNESS 5 | 15 #define DEEPNESS 5 |
23 #define MAXPOINT 4096 | 16 #define MAXPOINT 4096 |
24 #define UNITS "G20\n" | 17 #define UNITS "G20\n" |
25 #define SPEED 20 | 18 #define SPEED 20 |
26 | |
27 #define SBPUP "JZ &ZUP\n" | |
28 #define SBPDWN 0.0625 | |
29 | |
30 | 19 |
31 typedef struct{ | 20 typedef struct{ |
32 unsigned int X; | 21 unsigned int X; |
33 unsigned int Y; | 22 unsigned int Y; |
34 unsigned int down; | 23 unsigned int down; |
35 }point; | 24 }point; |
36 | 25 |
37 point points[MAXPOINT]; | 26 point points[MAXPOINT]; |
38 | 27 |
39 unsigned int X = 100; | 28 unsigned int X = 5; |
40 unsigned int Y = 25; | 29 unsigned int Y = 5; |
41 unsigned int step = 5; | 30 unsigned int step = 5; |
42 unsigned int down = 0; | 31 unsigned int down = 0; |
43 unsigned int numpoints = 0; | 32 unsigned int numpoints = 0; |
44 char action; | 33 char action; |
45 | 34 |
46 | 35 |
47 /********************************************* | 36 /********************************************* |
48 * Description - Convert integers to strings, makes | 37 * Description - Warn the user about something |
49 * source code more pretty. | 38 * Author - William King |
50 * Author - William King | 39 * Date - Sep 27 2023 |
51 * Date - Sep 26 2023 | 40 * *******************************************/ |
52 * *******************************************/ | 41 void Warn(char * s){ |
42 printf("WARNING:"); | |
43 puts(s); | |
44 putchar('\a'); | |
45 getchar(); | |
46 } | |
47 | |
48 /********************************************* | |
49 * Description - Convert integers to strings, makes | |
50 * source code more pretty. | |
51 * Author - William King | |
52 * Date - Sep 26 2023 | |
53 * *******************************************/ | |
53 char * IntToString(int num){ | 54 char * IntToString(int num){ |
54 char * s; | 55 char * s; |
55 sprintf(s,"%d",num); | 56 sprintf(s,"%d",num); |
56 return s; | 57 return s; |
57 } | 58 } |
60 * Description - Renders the screen | 61 * Description - Renders the screen |
61 * Author - William King | 62 * Author - William King |
62 * Date - Sep 08 2023 | 63 * Date - Sep 08 2023 |
63 * *******************************************/ | 64 * *******************************************/ |
64 void Render(){ | 65 void Render(){ |
65 clrscr(); | 66 ClrScr(); |
66 gotoxy(0,3); | |
67 puts("HARELET A CAD PROGRAM BY VILYAEM KENYAZ, PEEP SOFTWARE 2023"); | 67 puts("HARELET A CAD PROGRAM BY VILYAEM KENYAZ, PEEP SOFTWARE 2023"); |
68 printf("Number of Points: %d X: %d Y: %d STEPSIZE: %d DWN?: %d\n",numpoints,X,Y,step,down); | 68 printf("Number of Points: %d X: %d Y: %d STEPSIZE: %d DWN?: %d\n",numpoints,X,Y,step,down); |
69 | 69 |
70 //Render points | 70 //Render points |
71 for(int i = 0;i != MAXPOINT;i++){ | 71 if(numpoints > 0){ |
72 gotoxy(0,50); | 72 for(int i = 0;i != numpoints;i++){ |
73 | 73 if(points[i].down == 0){ |
74 gotoxy(points[i].X,points[i].Y); | 74 DrawChar(points[i].X,points[i].Y,'U'); |
75 | 75 |
76 if(points[i].down == 0){ | 76 } |
77 printf("X"); | 77 else{ |
78 } | 78 DrawChar(points[i].X,points[i].Y,'D'); |
79 else{ | 79 } |
80 printf("*"); | 80 } |
81 } | |
82 | |
83 | |
84 } | 81 } |
85 | 82 |
86 //Render cursor | 83 //Render cursor |
87 | 84 DrawChar(X,Y,'&'); |
88 gotoxy(X,Y); | 85 |
89 | 86 Splash(); |
90 puts("&"); | |
91 | |
92 //Move cursor to top of document, so its not trailing the cadcursor | |
93 gotoxy(0,0); | |
94 | |
95 | |
96 | 87 |
97 } | 88 } |
98 | 89 |
99 /********************************************* | 90 /********************************************* |
100 * Description - This function compiles instructions for CNC machines. | 91 * Description - This function compiles instructions for CNC machines. |
106 char filename[64]; | 97 char filename[64]; |
107 char file[8192]; | 98 char file[8192]; |
108 char buffer[64]; | 99 char buffer[64]; |
109 unsigned int choice; | 100 unsigned int choice; |
110 | 101 |
111 clrscr(); | |
112 puts("Select your format\n1. RAW GCODE\n2. OPENSBP"); | 102 puts("Select your format\n1. RAW GCODE\n2. OPENSBP"); |
113 scanf("%d",&choice); | 103 scanf("%d",&choice); |
114 | 104 |
115 | 105 |
116 puts("Enter the filename"); | 106 puts("Enter the filename"); |
123 //Meat of instructions | 113 //Meat of instructions |
124 for(int i = 0;i != numpoints;i++){ | 114 for(int i = 0;i != numpoints;i++){ |
125 //Compose | 115 //Compose |
126 char instruction[64]; | 116 char instruction[64]; |
127 strcat(instruction,"G0 X "); | 117 strcat(instruction,"G0 X "); |
128 //Convert X to string | 118 strcat(instruction,IntToString(points[i].X)); |
129 sprintf(buffer,"%d",points[i].X); | |
130 strcat(instruction,buffer); | |
131 strcat(instruction," Y "); | 119 strcat(instruction," Y "); |
132 //Convert Y to string | 120 strcat(instruction,IntToString(points[i].Y)); |
133 sprintf(buffer,"%d",points[i].Y); | 121 if(points[i].down == 1){ |
134 strcat(instruction,buffer); | |
135 if(points[i].down = 1){ | |
136 strcat(instruction," Z 5\n"); | 122 strcat(instruction," Z 5\n"); |
137 } | 123 } |
138 else{ | 124 else{ |
139 strcat(instruction," Z 0\n"); | 125 strcat(instruction," Z 0\n"); |
140 } | 126 } |
145 //Finish | 131 //Finish |
146 strcat(file,"G0 X0 Y0 Z0\n"); | 132 strcat(file,"G0 X0 Y0 Z0\n"); |
147 WriteFile(filename,file); | 133 WriteFile(filename,file); |
148 } | 134 } |
149 else if(choice == 2){ | 135 else if(choice == 2){ |
150 // Setup the miller | 136 // Setup the miller |
151 strcat(file,"'OpenSBP file written by Harelet\n'Harelet, written by William King\n'No responsibilty is taken for any damages to any equipment\n\n'Starting\nSO, 1,1\nPause 2\nSA,\n&ZUP = 0.25\nMH\n\n'Bulk of instructions\n"); | 137 strcat(file,"'OpenSBP file written by Harelet\n'Harelet, written by William King\n'No responsibilty is taken for any damages to any equipment\n\n'Starting\nSO, 1,1\nPause 2\nSA,\n&ZUP = 0.25\nMH\n\n'Bulk of instructions\n"); |
152 | 138 |
153 for(int i = 0;i != numpoints;i++){ | 139 for(int i = 0;i != numpoints;i++){ |
154 | 140 |
155 char instruction[64]; | 141 char instruction[64]; |
156 | 142 |
157 strcat(instruction,"J2 "); | 143 strcat(instruction,"J2 "); |
158 strcat(instruction,IntToString(points[i].X)); | 144 strcat(instruction,IntToString(points[i].X)); |
159 strcat(instruction," "); | 145 strcat(instruction," "); |
164 strcat(instruction,"MZ -0,0625\n"); | 150 strcat(instruction,"MZ -0,0625\n"); |
165 } | 151 } |
166 else{ | 152 else{ |
167 strcat(instruction,"JZ,&ZUP\n"); | 153 strcat(instruction,"JZ,&ZUP\n"); |
168 } | 154 } |
169 | |
170 | 155 |
171 strcat(file,instruction); | 156 strcat(file,instruction); |
172 } | 157 } |
173 | 158 |
174 //Finished, add instructions to wait for the user | 159 //Finished, add instructions to wait for the user |
175 strcat(file,"\nJ2,0,0\nSO, 1,0\n'All done. Wait for user.\nPAUSE"); | 160 strcat(file,"\nJ2,0,0\nSO, 1,0\n'All done. Wait for user.\nPAUSE"); |
176 | 161 |
177 WriteFile(filename,file); | 162 WriteFile(filename,file); |
178 | 163 |
179 } | 164 } |
180 else{ | 165 else{ |
181 | 166 Warn("Invalid compiliation format"); |
182 puts("Invalid compiliation format"); | |
183 scanf(""); | |
184 | |
185 | |
186 } | 167 } |
187 | 168 |
188 puts("Finished compiling instructions"); | 169 puts("Finished compiling instructions"); |
189 scanf(""); | 170 getchar(); |
190 | 171 |
191 } | 172 } |
192 | 173 |
193 | 174 |
194 /********************************************* | 175 /********************************************* |
195 * Description - Main function | 176 * Description - Main function |
196 * Author - William King | 177 * Author - William King |
197 * Date - Sep 08 2023 | 178 * Date - Sep 08 2023 |
198 * *******************************************/ | 179 * *******************************************/ |
199 void main(int argc, char* argv[]){ | 180 void main(int argc, char* argv[]){ |
200 clrscr(); | |
201 while(1){ | 181 while(1){ |
202 Render(); | 182 Render(); |
183 #ifndef DVORAK | |
203 switch(getchar()){ | 184 switch(getchar()){ |
204 case 'h': | 185 case 'h': |
205 X -= step; | 186 if(X - step >= 2){ |
187 X -= step; | |
188 } | |
206 break; | 189 break; |
207 case 'j': | 190 case 'j': |
208 Y += step; | 191 if(Y + step < RESY - step){ |
192 Y += step; | |
193 } | |
209 break; | 194 break; |
210 case 'k': | 195 case 'k': |
211 Y -= step; | 196 if(Y - step >= 2){ |
197 Y -= step; | |
198 } | |
212 break; | 199 break; |
213 case 'l': | 200 case 'l': |
214 X += step; | 201 if(X + step < RESX - step){ |
215 break; | 202 X += step; |
216 | 203 } |
204 break; | |
217 case 's': | 205 case 's': |
218 puts("New stepsize"); | 206 puts("New stepsize:"); |
219 scanf("%d",&step); | 207 scanf("%d",&step); |
220 | |
221 break; | 208 break; |
222 | 209 |
223 case 'a': | 210 case 'a': |
224 points[numpoints].X = X; | 211 points[numpoints].X = X; |
225 points[numpoints].Y = Y; | 212 points[numpoints].Y = Y; |
232 } | 219 } |
233 else{ | 220 else{ |
234 down = 1; | 221 down = 1; |
235 } | 222 } |
236 break; | 223 break; |
237 | |
238 case 'c': | 224 case 'c': |
239 Compile(); | 225 Compile(); |
240 break; | 226 break; |
241 case 'q': | 227 case 'q': |
242 clrscr(); | 228 ClrScr(); |
243 exit(0); | 229 exit(0); |
244 break; | 230 break; |
245 default: | 231 default: |
246 putchar('\a'); | 232 break; |
247 break; | 233 } |
248 } | 234 #endif |
235 #ifdef DVORAK | |
236 switch(getchar()){ | |
237 case 'a': | |
238 if(X - step >= 2){ | |
239 X -= step; | |
240 } | |
241 break; | |
242 case 'o': | |
243 if(Y + step < RESY - step){ | |
244 Y += step; | |
245 } | |
246 break; | |
247 case ',': | |
248 if(Y - step >= 2){ | |
249 Y -= step; | |
250 } | |
251 break; | |
252 case 'e': | |
253 if(X + step < RESX - step){ | |
254 X += step; | |
255 } | |
256 break; | |
257 case '.': | |
258 puts("New stepsize:"); | |
259 scanf("%d",&step); | |
260 break; | |
261 | |
262 case ' ': | |
263 points[numpoints].X = X; | |
264 points[numpoints].Y = Y; | |
265 points[numpoints].down = down; | |
266 numpoints++; | |
267 break; | |
268 case 'p': | |
269 if(down == 1){ | |
270 down = 0; | |
271 } | |
272 else{ | |
273 down = 1; | |
274 } | |
275 break; | |
276 case 'y': | |
277 Compile(); | |
278 break; | |
279 case 'q': | |
280 ClrScr(); | |
281 exit(0); | |
282 break; | |
283 default: | |
284 break; | |
285 } | |
286 #endif | |
249 } | 287 } |
250 | 288 |
251 exit(0); | 289 exit(0); |
252 } | 290 } |