# j3270 [![Build & Test](https://git.hugfreevikings.wtf/rudi/j3270/actions/workflows/build.yaml/badge.svg)](https://git.hugfreevikings.wtf/rudi/j3270/actions) [![Latest Release](https://git.hugfreevikings.wtf/rudi/j3270/badges/release.svg)](https://git.hugfreevikings.wtf/rudi/j3270/releases) [![Java](https://img.shields.io/badge/Java-11%20%7C%2017%20%7C%2021-blue.svg)](https://adoptium.net) [![License](https://img.shields.io/badge/License-MIT%20%2F%20BSD-green.svg)](LICENSE) An **x3270-aligned IBM 3270 mainframe terminal emulator** written in pure Java. Designed for high compatibility with IBM z/OS, z/VM, CMS, and TSO systems over TN3270 and TN3270E. --- ## ๐Ÿš€ Quick Download & Run ### Latest Standalone JAR You can download the ready-to-run executable JAR directly from the releases or CI builds: - **[Download Latest Tagged Release (`j3270.jar`)](https://git.hugfreevikings.wtf/rudi/j3270/releases)** - **[Latest Nightly CI Artifacts](https://git.hugfreevikings.wtf/rudi/j3270/actions)** (Download under the latest successful workflow run) ### Running `j3270` Requires **Java 11 or higher** (Java 11, 17, 21+): ```bash # Launch interactive GUI java -jar j3270.jar # Launch with custom configuration file java -jar j3270.jar -c config.ini # Launch directly from source runner ./run.sh ``` --- ## โœจ Features - **TN3270 & TN3270E Protocol Support**: RFC 2355 compliant state machine, negotiation, Device-Type query, and SSL/TLS encryption. - **IND$FILE File Transfer**: Full support for both **CUT** and **DFT (DDM)** high-speed structured field transfers with ASCII/binary translation, CRLF handling, and recfm/lrecl formatting for TSO, VM/CMS, and CICS. - **z/VM & Line-Mode Support**: Proper SSCP-LU and unformatted line handling (`CP TERM CONMODE 3270` supported). - **APL & Graphic Escape**: Comprehensive box-drawing and math symbol character rendering. - **Terminal Models**: - Model 2 (24x80) - Model 3 (32x80) - Model 4 (43x80) - Model 5 (27x132) - **Zero-Dependency Core**: Modular architecture separated into: - `lib3270j`: Reusable Java 3270 protocol, data stream parser, charset translation, and telnet state machine. - `j3270`: Desktop Swing user interface and session management. --- ## ๐Ÿ› ๏ธ Building from Source ### Standalone Build (No Gradle Required) The project includes self-contained, portable build scripts: ```bash # Build executable JAR in 2 seconds: sh ./build_all.sh # Run all 25 automated unit tests in ~130ms: sh ./test_all.sh ``` The resulting standalone JAR is created at `build/j3270.jar`. ### Gradle Build (Optional) ```bash ./gradlew build ./gradlew test ``` --- ## ๐Ÿท๏ธ How to Tag & Publish Releases Releases can be published automatically to Gitea via Git tags: ```bash # 1. Create a version tag git tag -a v0.1.0 -m "Release v0.1.0" # 2. Push the tag to Gitea git push origin v0.1.0 ``` Pushing any `v*` tag triggers the automated release workflow (`.gitea/workflows/release.yaml`), which runs tests, builds the JAR, and publishes a new Gitea Release with `j3270.jar` attached automatically. --- ## ๐Ÿ” Topics & Discoverability Suggested keywords/topics for repository indexing: `tn3270` ยท `tn3270e` ยท `ibm-3270` ยท `mainframe` ยท `terminal-emulator` ยท `x3270` ยท `ind-file` ยท `file-transfer` ยท `ebcdic` ยท `z-vm` ยท `z-os` ยท `cms` ยท `tso` ยท `cics` ยท `java` ยท `desktop-app` --- ## ๐Ÿค Contributing Contributions and issue reports are welcome! Please feel free to open a bug report or feature request via the Gitea issue tracker. --- ## ๐Ÿ“œ Acknowledgements - [x3270](https://x3270.miraheze.org/wiki/Main_Page) โ€” Reference C implementation and protocol specifications - [Antigravity](https://antigravity.google) - Claude Opus 4.6 - Gemini 3.1 Pro