100 lines
3.6 KiB
Markdown
100 lines
3.6 KiB
Markdown
# j3270
|
|
|
|
[](https://git.hugfreevikings.wtf/rudi/j3270/actions)
|
|
[](https://git.hugfreevikings.wtf/rudi/j3270/releases)
|
|
[](https://adoptium.net)
|
|
[](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
|
|
|
|
# Connect to TLS/SSL mainframe with custom port
|
|
java -jar j3270.jar -s mainframe.example.com 992
|
|
# Or using standard x3270 L: prefix
|
|
java -jar j3270.jar L:mainframe.example.com:992
|
|
|
|
# Connect with unverified/self-signed certificate verification bypass
|
|
java -jar j3270.jar --tls --insecure mainframe.example.com 992
|
|
|
|
# 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.
|
|
- **SSL/TLS Security**:
|
|
- Encrypted TN3270 over TLS connections on standard port `992` or custom ports.
|
|
- Interactive certificate verification prompt for self-signed or untrusted certificates with fingerprint, subject, issuer, and validity inspection.
|
|
- Optional unverified/insecure mode for testing and headless scripting.
|
|
- **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 31 automated unit tests in ~180ms:
|
|
sh ./test_all.sh
|
|
```
|
|
|
|
The resulting standalone JAR is created at `build/j3270.jar`.
|
|
|
|
### Gradle Build (Optional)
|
|
```bash
|
|
./gradlew build
|
|
./gradlew test
|
|
```
|
|
|
|
---
|
|
|
|
## 🤝 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
|