Skip to content

Commit

Permalink
fix console output with build flag
Browse files Browse the repository at this point in the history
  • Loading branch information
trembon committed Apr 9, 2024
1 parent cd3cb60 commit 2c99448
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 39 deletions.
6 changes: 3 additions & 3 deletions src/console.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import (

"github.com/jedib0t/go-pretty/table"
"github.com/schollz/progressbar/v3"
"github.com/trembon/switch-library-manager/console"
"github.com/trembon/switch-library-manager/db"
"github.com/trembon/switch-library-manager/flags"
"github.com/trembon/switch-library-manager/process"
"github.com/trembon/switch-library-manager/settings"
"go.uber.org/zap"
Expand All @@ -25,10 +25,10 @@ var (
type Console struct {
baseFolder string
sugarLogger *zap.SugaredLogger
consoleFlags *flags.ConsoleFlags
consoleFlags *console.ConsoleFlags
}

func CreateConsole(baseFolder string, sugarLogger *zap.SugaredLogger, consoleFlags *flags.ConsoleFlags) *Console {
func CreateConsole(baseFolder string, sugarLogger *zap.SugaredLogger, consoleFlags *console.ConsoleFlags) *Console {
return &Console{baseFolder: baseFolder, sugarLogger: sugarLogger, consoleFlags: consoleFlags}
}

Expand Down
12 changes: 6 additions & 6 deletions src/flags/console-flags.go → src/console/console-flags.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package flags
package console

import (
"flag"
Expand Down Expand Up @@ -40,15 +40,15 @@ var nspFolder string
var recursive bool
var exportCsv string

func Initialize() {
func InitializeFlags() {
if flag.Parsed() {
return
}

flag.StringVar(&mode, "m", "", "console or gui, overrides the gui flag in settings.json")
flag.StringVar(&nspFolder, "f", "", "path to NSP folder")
flag.BoolVar(&recursive, "r", true, "recursively scan sub folders")
flag.StringVar(&exportCsv, "e", "", "if exists, output missing updates, dlcs and issues as csv")
flag.StringVar(&exportCsv, "e", "", "output missing updates, dlcs and issues as csv")

flag.Parse()
}
Expand All @@ -57,12 +57,12 @@ var (
consoleFlagsInstance *ConsoleFlags
)

func GetValues() *ConsoleFlags {
func GetFlagsValues() *ConsoleFlags {
if consoleFlagsInstance != nil {
return consoleFlagsInstance
}
if !flag.Parsed() {
Initialize()
InitializeFlags()
}

flagset := make(map[string]bool)
Expand Down Expand Up @@ -99,7 +99,7 @@ func GetValues() *ConsoleFlags {
}

func LogFlags(sugar *zap.SugaredLogger) {
values := GetValues()
values := GetFlagsValues()

logFlag(sugar, "m", values.Mode)
logFlag(sugar, "f", values.NspFolder)
Expand Down
6 changes: 6 additions & 0 deletions src/console/fixconsole.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
//go:build !windows

package console

func FixConsoleOutput() {
}
34 changes: 34 additions & 0 deletions src/console/fixconsole_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
//go:build windows

package console

import (
"fmt"
"os"
"runtime"
"syscall"
)

func FixConsoleOutput() {
if runtime.GOOS == "windows" {
const ATTACH_PARENT_PROCESS = ^uintptr(0)
proc := syscall.MustLoadDLL("kernel32.dll").MustFindProc("AttachConsole")
r0, _, err0 := proc.Call(ATTACH_PARENT_PROCESS)

if r0 == 0 { // Allocation failed, probably process already has a console
fmt.Printf("Could not allocate console: %s. Check build flags..", err0)
os.Exit(1)
}

hout, err1 := syscall.GetStdHandle(syscall.STD_OUTPUT_HANDLE)
herr, err2 := syscall.GetStdHandle(syscall.STD_ERROR_HANDLE)
if err1 != nil || err2 != nil {
os.Exit(2)
}

os.Stdout = os.NewFile(uintptr(hout), "/dev/stdout")
os.Stderr = os.NewFile(uintptr(herr), "/dev/stderr")

fmt.Print("\r\n")
}
}
35 changes: 5 additions & 30 deletions src/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,14 @@ import (
"path/filepath"
"runtime"
"strings"
"syscall"

"github.com/trembon/switch-library-manager/flags"
"github.com/trembon/switch-library-manager/console"
"github.com/trembon/switch-library-manager/settings"
"go.uber.org/zap"
)

func main() {
fixWindowsConsole()
console.FixConsoleOutput()

exePath, err := os.Executable()
if err != nil {
Expand Down Expand Up @@ -49,10 +48,10 @@ func main() {
appSettings.GUI = false
}

flags.Initialize()
flags.LogFlags(sugar)
console.InitializeFlags()
console.LogFlags(sugar)

consoleFlags := flags.GetValues()
consoleFlags := console.GetFlagsValues()
useGUI := appSettings.GUI
if consoleFlags.Mode.IsSet() {
mode := consoleFlags.Mode.String()
Expand Down Expand Up @@ -100,27 +99,3 @@ func createLogger(workingFolder string, debug bool) *zap.Logger {
zap.ReplaceGlobals(logger)
return logger
}

func fixWindowsConsole() {
if runtime.GOOS == "windows" {
const ATTACH_PARENT_PROCESS = ^uintptr(0)
proc := syscall.MustLoadDLL("kernel32.dll").MustFindProc("AttachConsole")
r0, _, err0 := proc.Call(ATTACH_PARENT_PROCESS)

if r0 == 0 { // Allocation failed, probably process already has a console
fmt.Printf("Could not allocate console: %s. Check build flags..", err0)
os.Exit(1)
}

hout, err1 := syscall.GetStdHandle(syscall.STD_OUTPUT_HANDLE)
herr, err2 := syscall.GetStdHandle(syscall.STD_ERROR_HANDLE)
if err1 != nil || err2 != nil {
os.Exit(2)
}

os.Stdout = os.NewFile(uintptr(hout), "/dev/stdout")
os.Stderr = os.NewFile(uintptr(herr), "/dev/stderr")

fmt.Print("\r\n")
}
}

0 comments on commit 2c99448

Please sign in to comment.