use simplegen::CodeBuffer; pub fn template_for_header(mut filename: String) -> CodeBuffer { let mut buffer = CodeBuffer::new(4); // Removing extension from filename for _ in 0..2 { filename.pop(); } buffer.println(format!("#ifndef _{}_H_", filename.to_uppercase()).as_str()); buffer.println(format!("#define _{}_H_", filename.to_uppercase()).as_str()); buffer.println(""); buffer.println(format!("typedef struct _{}_t", filename.to_lowercase()).as_str()); buffer.println("{"); buffer.println(""); buffer.println(format!("}} {}_t;", filename.to_lowercase()).as_str()); buffer.println(""); buffer.println("#endif"); return buffer; } pub fn template_for_implementation(mut hfile_name: String) -> CodeBuffer { let mut buffer = CodeBuffer::new(4); for _ in 0..1 { hfile_name.pop(); } buffer.println(format!("#include \"{}h\"", hfile_name.to_lowercase()).as_str()); return buffer; } pub fn template_for_main(path_to_hfile: String) -> CodeBuffer { let mut buffer = CodeBuffer::new(4); buffer.println("#include <stdio.h>"); buffer.println("#include <stdlib.h>"); buffer.println(format!("#include \"{}\"", path_to_hfile).as_str()); buffer.println(""); buffer.println("int main()"); buffer.println("{"); buffer.println(""); buffer.println_right("return 0;"); buffer.println_left("}"); return buffer; } pub fn template_for_examfile() -> CodeBuffer { let mut buffer = CodeBuffer::new(4); buffer.println("#include <stdio.h>"); buffer.println("#include <stdlib.h>"); buffer.println("#include <stdbool.h>"); buffer.println("#include <string.h>"); buffer.println(""); buffer.println("int main()"); buffer.println("{"); buffer.println(""); buffer.println_right("return 0;"); buffer.println_left("}"); return buffer; } // pub fn template_for_makefile_algo(mut hfile_name: String, mut main_name: String) -> CodeBuffer { // let mut buffer = CodeBuffer::new(4); // // Removing extensions // for _ in 0..2 { // hfile_name.pop(); // main_name.pop(); // } // buffer.println("# This file was automatically generated by `create-prog-app`"); // buffer.println("CC:=gcc"); // buffer.println("CFLAGS:=-Wall -Wextra -g -pedantic -fsanitize=address -fsanitize=leak"); // buffer.println("LIBS:=-lm"); // buffer.println("VPATH:=struct"); // buffer.println("# Due to the oddity of MAKE and the fact you cannot generate \"true\" tabs,"); // buffer.println("# the \"tab\" character is replaced by spaces."); // buffer.println("# `create-prog-app` STRONGLY advises you not to change/modify the line below"); // buffer.println(".RECIPEPREFIX:=$(.RECIPEPREFIX) "); // buffer.println(""); // buffer.println( // format!( // "{}: {}.o {}.o", // main_name.to_lowercase(), // main_name.to_lowercase(), // hfile_name.to_lowercase() // ) // .as_str(), // ); // buffer.println_right("$(CC) $(CFLAGS) $(LIBS) $^ -o $@"); // buffer.println_left(""); // buffer.println(format!("{0}.o: {0}.c", main_name.to_lowercase()).as_str()); // buffer.println_right("$(CC) $(CFLAGS) $(LIBS) -c $<"); // buffer.println_left(""); // buffer.println(format!("{0}.o: {0}.c {0}.h", hfile_name.to_lowercase()).as_str()); // buffer.println_right("$(CC) $(CFLAGS) $(LIBS) -c $<"); // buffer.println_left(""); // buffer.println("clean:"); // buffer.println_right(format!("rm -f *.o {}", main_name.to_lowercase()).as_str()); // buffer.println_left(""); // buffer.println(format!("rebuild: clean {}", main_name.to_lowercase()).as_str()); // return buffer; // } pub fn template_for_makefile_algo_v2(impl_name: String, mut main_name: String) -> CodeBuffer { let mut buffer = CodeBuffer::new(4); buffer.println("# This file was automatically generated by `create-prog-app`"); buffer.println("CC := gcc"); buffer.println("CFLAGS := -Wall -Wextra -g -pedantic -fsanitize=address -fsanitize=leak"); buffer.println("LDFLAGS := -lm"); buffer.println("VPATH := struct"); buffer.println(""); buffer.println( format!( "SOURCES := {} {}", main_name.to_lowercase(), impl_name.to_lowercase() ) .as_str(), ); for _ in 0..2 { main_name.pop(); } buffer.println("OBJECTS := $(patsubst %.c, %.o, $(SOURCES))"); buffer.println(format!("TARGET := {}", main_name).as_str()); buffer.println("# Due to the oddity of MAKE and the fact you cannot generate \"true\" tabs,"); buffer.println("# the \"tab\" character is replaced by spaces."); buffer.println("# `create-prog-app` STRONGLY advises you not to change/modify the line below"); buffer.println(".RECIPEPREFIX:=$(.RECIPEPREFIX) "); buffer.println(""); buffer.println("$(TARGET): $(OBJECTS)"); buffer.println_right("$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)"); buffer.println_left(""); buffer.println(".PHONY: clean"); buffer.println(""); buffer.println("clean:"); buffer.println_right("rm -f $(OBJECTS) $(TARGET)"); return buffer; } pub fn template_for_makefile_exam(mut main_filename: String) -> CodeBuffer { let mut buffer = CodeBuffer::new(4); // Removing extensions for _ in 0..2 { // hfile_name.pop(); main_filename.pop(); } buffer.println("# This file was automatically generated by `create-prog-app`"); buffer.println("CC:=gcc"); buffer.println("CFLAGS:=-Wall -Wextra -g -pedantic -fsanitize=address -fsanitize=leak"); buffer.println("LIBS:=-lm"); buffer.println("VPATH:=struct"); buffer.println("# Due to the oddity of MAKE and the fact you cannot generate \"true\" tabs,"); buffer.println("# the \"tab\" character is replaced by spaces."); buffer.println("# `create-prog-app` STRONGLY advises you not to change/modify the line below"); buffer.println(".RECIPEPREFIX:=$(.RECIPEPREFIX) "); buffer.println(""); buffer.println(format!("{0}: {0}.c", main_filename.to_lowercase()).as_str()); buffer.println_right("$(CC) $(CFLAGS) $(LIBS) $^ -o $@"); buffer.println_left(""); buffer.println("clean:"); buffer.println_right(format!("rm -f *.o {}", main_filename.to_lowercase()).as_str()); return buffer; }