You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.2 KiB

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,
)
}