package main import ( "bufio" "fmt" "log" "os" ) func fileOpen(fname string) { f, err := os.Open(fname) if err != nil && os.IsNotExist(err) { // create file if it doesn't exist if f, err = os.Create(fname); err != nil { log.Fatal(err) } state.rows = []string{""} state.Cy = 0 state.Cx = 0 } else if err != nil { log.Fatal(err) } else { fread := bufio.NewScanner(f) fread.Split(bufio.ScanLines) state.rows = nil for fread.Scan() { state.rows = append(state.rows, fread.Text()) } if len(state.rows) == 0 || (len(state.rows) == 1 && state.rows[0] == "") { state.rows = []string{""} } } f.Close() state.file = fname } func fileSave() { f, err := os.Create(state.file) if err != nil { log.Fatal(err) } defer f.Close() bytesWritten := 0 charsWritten := 0 linesWritten := 0 for _, row := range state.rows { bw, err := fmt.Fprintf(f, "%s\n", row) if err != nil { log.Fatalf("COULD NOT SAVE FILE: %v", err) } bytesWritten += bw charsWritten += len([]rune(row)) + 1 linesWritten++ } state.StatusLines[1] = fmt.Sprintf( "'%s' saved. %dL, %dC, %d bytes", state.file, linesWritten, charsWritten, bytesWritten, ) }