diff --git a/c/src/p2fa.c b/c/src/p2fa.c index 073d9da..b0c15e3 100644 --- a/c/src/p2fa.c +++ b/c/src/p2fa.c @@ -101,22 +101,23 @@ void code(UWORD *blackImage, char* confName) { void config(UWORD *blackImage, char* configName) { GoString goConfName = { configName, strlen(configName) }; - const char *config = getConfig(goConfName); - if (config == NULL) { + struct getConfigLines_return configLinesReturn = getConfigLines(goConfName); + int length = configLinesReturn.r1; + char** configLines = configLinesReturn.r0; + if (configLines == NULL || length == -1) { DebugLine(10, 0, "Config not found\n"); return; } - Paint_NewImage(blackImage, EPD_2in13_V4_WIDTH, EPD_2in13_V4_HEIGHT, 0, WHITE); + Paint_NewImage(blackImage, EPD_2in13_V4_WIDTH, EPD_2in13_V4_HEIGHT, 90, WHITE); EPD_2in13_V4_Init(); Paint_SelectImage(blackImage); Paint_Clear(WHITE); - DebugLine(14, 10, "MADE IT TO HERE --------------------------------------"); - char* str = "key: JBSWY3DPEHPK3PXP NO n digits: 4"; - DebugLine(13, 0, "String width: %d\n", computeWidth(str, &Font12)); - Paint_DrawString(5, 5, str, &Font12, WHITE, BLACK); - //Paint_DrawString(5, 5, getConfigReturn.r0, &Font12, WHITE, BLACK); + for (int i = 0; i < length; i++) { + Paint_DrawString(5, 5 + (i * 16), configLines[i], &Font12, WHITE, BLACK); + } + EPD_2in13_V4_Display(blackImage); int ch = getch(); diff --git a/go/totp.go b/go/totp.go index 5b22f03..6b53a79 100644 --- a/go/totp.go +++ b/go/totp.go @@ -156,8 +156,8 @@ func getConfigNames() (**C.char, C.int) { return (**C.char)(cArray), C.int(configsLen) } -//export getConfig -func getConfig(configName string) *C.char { +//export getConfigLines +func getConfigLines(configName string) (**C.char, C.int) { files, err := os.ReadDir(homeDir + "/.totp") if err != nil { log.Fatal(err) @@ -170,18 +170,21 @@ func getConfig(configName string) *C.char { log.Fatal(err) } fileStr := string(fileBytes) + confLines := strings.Split(fileStr, "\n") + lines := len(confLines) + cArray := C.malloc(C.size_t(lines) * C.size_t(unsafe.Sizeof(uintptr(0)))) - err = os.WriteFile("output.txt", []byte(fileStr), 777) - if err != nil { - log.Fatal(err) + ar := unsafe.Slice((**C.char)(cArray), lines) + i := 0 + for _, confLine := range confLines { + ar[i] = C.CString(confLine) + i++ } - cStr := C.CString(fileStr) - runtime.KeepAlive(fileStr) - return cStr + return (**C.char)(cArray), C.int(lines) } } - return nil + return nil, -1 } //export getCode