Initial commit for CHP
This commit is contained in:
		
							parent
							
								
									e9ebefd5bb
								
							
						
					
					
						commit
						9424f3a1b4
					
				
							
								
								
									
										6
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								Makefile
									
									
									
									
									
								
							| @ -29,6 +29,12 @@ LOMMEREIMAR_OBJ = $(patsubst %.c, build/lommereimar/%.o, $(LOMMEREIMAR_SRC)) | |||||||
| lommereimar: $(LOMMEREIMAR_OBJ) $(COMMON_OBJ) | lommereimar: $(LOMMEREIMAR_OBJ) $(COMMON_OBJ) | ||||||
| 	$(CC) -o bin/$@ $(CFLAGS) $^ -lm | 	$(CC) -o bin/$@ $(CFLAGS) $^ -lm | ||||||
| 
 | 
 | ||||||
|  | CHP_SRC = chp.c | ||||||
|  | CHP_OBJ = $(patsubst %.c, build/chp/%.o, $(LOMMEREIMAR_SRC)) | ||||||
|  | 
 | ||||||
|  | chp: $(CHP_OBJ) $(COMMON_OBJ) | ||||||
|  | 	$(CC) -o bin/$@ $(CFLAGS) $^ -lm | ||||||
|  | 
 | ||||||
| build/%.o: %.c $(shell find -name *.h) | build/%.o: %.c $(shell find -name *.h) | ||||||
| 	mkdir $(@D) -p | 	mkdir $(@D) -p | ||||||
| 	$(CC) -c -o $@ $(CFLAGS) $< | 	$(CC) -c -o $@ $(CFLAGS) $< | ||||||
|  | |||||||
							
								
								
									
										98
									
								
								chp/chp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								chp/chp.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,98 @@ | |||||||
|  | #include <stdlib.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <linux/limits.h> | ||||||
|  | #include <unistd.h> | ||||||
|  | #include <sys/stat.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <dirent.h> | ||||||
|  | #include <string.h> | ||||||
|  | 
 | ||||||
|  | #define BASE_DIR         "/tmp/chp" | ||||||
|  | #define INTERMEDIATE_DIR "/tmp/chp/intermediate" | ||||||
|  | #define COMPILE_DIR      "/tmp/chp/compiled" | ||||||
|  | 
 | ||||||
|  | #define BUFFER_SIZE      25565 | ||||||
|  | 
 | ||||||
|  | char *replace_tag(char *str, int pos) | ||||||
|  | { | ||||||
|  | 	// TODO
 | ||||||
|  | 
 | ||||||
|  | 	char *new = malloc(strlen(str) + 256); | ||||||
|  | 	memset(new, strlen(str) + 256, sizeof(char)); | ||||||
|  | 	 | ||||||
|  | 	strncat(new, str, pos); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void handle_file(char *filename) | ||||||
|  | { | ||||||
|  | 	int filename_length = strlen(filename); | ||||||
|  | 
 | ||||||
|  | 	if (strncmp(filename + filename_length - 4, ".chp", 4) != 0) | ||||||
|  | 		return; | ||||||
|  | 
 | ||||||
|  | 	char *intermediate_filename = strdup(filename); | ||||||
|  | 	intermediate_filename[filename_length - 2] = '\0'; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	FILE *input = fopen(filename, "r"); | ||||||
|  | 	FILE *output = fopen(intermediate_filename, "w"); | ||||||
|  | 
 | ||||||
|  | 	char buffer[BUFFER_SIZE], newbuffer[BUFFER_SIZE]; | ||||||
|  | 	 | ||||||
|  | 	while (fgets(buffer, BUFFER_SIZE, input) != NULL) { | ||||||
|  | 		char *str = buffer, *pos; | ||||||
|  | 
 | ||||||
|  | 		// TODO
 | ||||||
|  | 		/*while ((pos = strstr(str, "<?c")) != NULL)
 | ||||||
|  | 			str = replace_tag(str, pos - str);*/ | ||||||
|  | 
 | ||||||
|  | 		fputs(newbuffer, output); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	free(intermediate_filename); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void read_directory(char *dirname) | ||||||
|  | { | ||||||
|  | 	DIR *dir = opendir(dirname); | ||||||
|  | 	if (!dir) return; | ||||||
|  | 
 | ||||||
|  | 	struct dirent *entry; | ||||||
|  | 	while ((entry = readdir(dir)) != NULL) { | ||||||
|  | 		if (!strncmp(entry->d_name, ".", 1) || !strncmp(entry->d_name, "..", 2)) continue; | ||||||
|  | 
 | ||||||
|  | 		int pathlength = strlen(dirname) + strlen(entry->d_name) + 2; | ||||||
|  | 		char *pathname = malloc(pathlength); | ||||||
|  | 		snprintf(pathname, pathlength, "%s/%s", dirname, entry->d_name); | ||||||
|  | 
 | ||||||
|  | 		switch (entry->d_type) { | ||||||
|  | 			case DT_REG: | ||||||
|  | 				handle_file(pathname); | ||||||
|  | 				break; | ||||||
|  | 			case DT_DIR: | ||||||
|  | 				read_directory(pathname); | ||||||
|  | 				break; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		free(pathname); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main(void) | ||||||
|  | { | ||||||
|  | 	puts("Compiling.."); | ||||||
|  | 
 | ||||||
|  | 	mkdir(BASE_DIR, 0777); | ||||||
|  | 	mkdir(INTERMEDIATE_DIR, 0777); | ||||||
|  | 	mkdir(COMPILE_DIR, 0777); | ||||||
|  | 
 | ||||||
|  | 	char current_dir[PATH_MAX]; | ||||||
|  | 	getcwd(current_dir, sizeof(current_dir)); | ||||||
|  | 
 | ||||||
|  | 	read_directory(current_dir); | ||||||
|  | 
 | ||||||
|  | 	puts("Ready"); | ||||||
|  | 
 | ||||||
|  | 	return EXIT_SUCCESS; | ||||||
|  | } | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user