83 lines
2.1 KiB
Python
83 lines
2.1 KiB
Python
"""
|
|
JCL Runner - Main entry point.
|
|
Usage: python main.py <jcl_file>
|
|
"""
|
|
|
|
import sys
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
from parser import parse_jcl
|
|
from executor import Executor
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="JCL Runner - Execute JCL scripts on Windows"
|
|
)
|
|
parser.add_argument("jcl_file", help="Path to JCL script")
|
|
parser.add_argument(
|
|
"--root",
|
|
default=".",
|
|
help="System root directory (default: current dir)",
|
|
)
|
|
parser.add_argument(
|
|
"--cobol-dir",
|
|
default="cobol",
|
|
help="COBOL source directory (relative to root)",
|
|
)
|
|
parser.add_argument(
|
|
"--copybook-dir",
|
|
default="copybooks",
|
|
help="COPYBOOK directory (relative to root)",
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
root = Path(args.root).resolve()
|
|
cobol_dir = root / args.cobol_dir
|
|
copybook_dir = root / args.copybook_dir
|
|
|
|
# Validate paths
|
|
if not root.exists():
|
|
print(f"ERROR: Root directory not found: {root}")
|
|
sys.exit(1)
|
|
if not cobol_dir.exists():
|
|
print(f"ERROR: COBOL directory not found: {cobol_dir}")
|
|
sys.exit(1)
|
|
if not copybook_dir.exists():
|
|
print(f"ERROR: COPYBOOK directory not found: {copybook_dir}")
|
|
sys.exit(1)
|
|
|
|
# Parse JCL
|
|
jcl_path = Path(args.jcl_file)
|
|
if not jcl_path.exists():
|
|
print(f"ERROR: JCL file not found: {jcl_path}")
|
|
sys.exit(1)
|
|
|
|
print(f"Parsing JCL: {jcl_path}")
|
|
job = parse_jcl(str(jcl_path))
|
|
|
|
if not job:
|
|
print("ERROR: Failed to parse JCL (no JOB statement found)")
|
|
sys.exit(1)
|
|
|
|
print(f"Job: {job.job_name}, Steps: {len(job.steps)}")
|
|
for i, step in enumerate(job.steps):
|
|
cond_str = f" COND={step.cond}" if step.cond else ""
|
|
print(f" {i+1}. {step.step_name}: EXEC PGM={step.program}{cond_str}")
|
|
|
|
# Execute
|
|
executor = Executor(
|
|
root_dir=str(root),
|
|
cobol_dir=str(cobol_dir),
|
|
copybook_dir=str(copybook_dir),
|
|
)
|
|
rc = executor.run(job)
|
|
print(f"\nExit code: {rc}")
|
|
sys.exit(rc)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|