func makeFileSystemFromArgument() fs.FS {
	if len(os.Args) != 2 {
		_, _ = fmt.Fprintf(os.Stderr, "usage: %s program.go", os.Args[0])
		os.Exit(1)
	}
	file := os.Args[1]
	name := filepath.Base(file)
	if name == ".go" {
		fmt.Printf("%s: invalid file name", name)
		os.Exit(1)
	}
	ext := filepath.Ext(name)
	if ext != ".go" {
		fmt.Printf("%s: extension must be \".go\"\n", name)
		os.Exit(1)
	}
	src, err := os.ReadFile(file)
	if err != nil {
		_, _ = fmt.Fprintln(os.Stderr, err)
		os.Exit(2)
	}
	return scriggo.Files{name: src}
}
makeFileSystemFromArgument makes a file system from the program path passed
as command line argument.

If an error occurs, it prints the error and exits.
package main
import (
	"fmt"
	"io/fs"
	"os"
	"path/filepath"
	"github.com/open2b/scriggo"
	"github.com/open2b/scriggo/native"
)
var packages native.Packages
func _main() {
	fsys := makeFileSystemFromArgument()
	program, err := scriggo.Build(fsys, &scriggo.BuildOptions{
		AllowGoStmt: true,      
		Packages:    packages,  
	})
	if err != nil {
		_, _ = fmt.Fprintln(os.Stderr, err)
		os.Exit(2)
	}
	err = program.Run(nil)
	if err != nil {
		switch err := err.(type) {
		case *scriggo.PanicError:
			panic(err)
		case *scriggo.ExitError:
			if err.Err != nil {
				_, _ = fmt.Fprintln(os.Stderr, err.Err.Error())
			}
			os.Exit(err.Code)
		}
		_, _ = fmt.Fprintln(os.Stderr, err)
		os.Exit(2)
	}
}