modernc.org/knuth@v0.0.4/gftodvi/api.go (about) 1 // Copyright 2023 The Knuth Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:generate make generate 6 7 // Package gftodvi is the GFtoDVI program by Tomas Rokicki, transpiled to Go. 8 // 9 // http://mirrors.ctan.org/systems/knuth/dist/mfware/gftodvi.web 10 package gftodvi // modernc.org/knuth/gftodvi 11 12 import ( 13 "fmt" 14 "io" 15 "runtime/debug" 16 17 "modernc.org/knuth" 18 ) 19 20 // program GF_to_DVI( output); 21 22 // Main executes the gftodvi program using the supplied arguments. 23 func Main(gfFile io.Reader, dviFile, stdout, stderr io.Writer, open func(string) (io.Reader, error)) (mainErr error) { 24 defer func() { 25 switch x := recover().(type) { 26 case nil: 27 // ok 28 case signal: 29 switch { 30 case mainErr == nil: 31 mainErr = fmt.Errorf("aborted") 32 default: 33 mainErr = fmt.Errorf("aborted: %v", mainErr) 34 } 35 default: 36 mainErr = fmt.Errorf("PANIC %T: %[1]v, error: %v\n%s", x, mainErr, debug.Stack()) 37 } 38 }() 39 40 (&prg{ 41 gfFile: knuth.NewBinaryFile(gfFile, nil, 1, nil), 42 dviFile: knuth.NewBinaryFile(nil, dviFile, 1, nil), 43 tfmFile: knuth.NewBinaryFile(nil, nil, 1, open), 44 stdout: knuth.NewTextFile(nil, stdout, nil), 45 stderr: knuth.NewTextFile(nil, stderr, nil), 46 }).main() 47 return nil 48 }