xtn5250mg/net/infordata/em/Main.java

348 lines
11 KiB
Java

package net.infordata.em;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.Frame;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.lang.reflect.InvocationTargetException;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.File;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import net.infordata.em.crt5250.XI5250Field;
import net.infordata.em.crt5250.XIEbcdicTranslator;
import net.infordata.em.tn5250.XI5250Emulator;
import net.infordata.em.tn5250.XI5250Frame;
//import net.infordata.em.tn5250ext.PSHBTNCHCHandler;
//import net.infordata.em.tn5250ext.XI5250EmulatorExt;
//import net.infordata.em.tn5250ext.XI5250PanelHandler;
//import net.infordata.em.tn5250ext.XI5250PanelsDispatcher;
import net.infordata.em.tn5250.XIImagesBdl;
/**
* Command line startup utility.
* @author valentino.proietti
*/
public class Main {
// images
private static XIImagesBdl cvImagesBdl =
net.infordata.em.tn5250.XIImagesBdl.getImagesBdl();
private Main() {}
private static void usageError(String msg) {
System.err.println(msg);
System.err.println("Usage: [-3dFX] /*[-PSHBTNCHC]*/ [-STRPCCMD] [-altFKeyRemap]" +
" [-maximized] [-cp codepage] [-devName name] [-useSSL|noSSL]" +
" [-autoLogon <fieldsCount>;<usrFieldLabel>;<pwdFieldLabel>;<user>;<passwd>]" +
" host-name");
System.err.println("Supported code pages:");
for (String cp : XIEbcdicTranslator.getRegisteredTranslators().keySet()) {
System.err.println(" " + cp +
(XI5250Emulator.DEFAULT_CODE_PAGE.equalsIgnoreCase(cp)? " default" : ""));
}
System.exit(1);
}
public static Font loadFontFromResource(Class theClass, String fontFileName, float fontSize) {
float fntSize = 12f;
if (fontSize >= 1f) {
fntSize = fontSize;
}
InputStream is = null;
is = theClass.getResourceAsStream("/res/ubuntu-mono-regular.ttf");
Font font = null;
try {
System.err.println(" createFont Testing res/" + fontFileName + " ... ");
font = Font.createFont(Font.TRUETYPE_FONT, is);
System.err.println(" createFont OK ");
font = font.deriveFont(fntSize);
} catch (FontFormatException | IOException ex) {
System.err.println(" Font err : " + ex.getMessage());
} finally {
if (is != null) {
try {
is.close();
} catch (IOException ex) {
System.err.println("Close error : " + ex.getMessage());
}
}
}
return font;
}
/**
*/
public static void main(String[] args) {
boolean pUse3dFX = false;
boolean pAltFKeyRemap = false;
int pUseSSL = -1;
//boolean pPSHBTNCHC = false;
boolean pSTRPCCMD = false;
boolean pMaximized = false;
String arg;
String pHost = null;
boolean expectCP = false;
boolean expectDevName = false;
boolean expectLogonInfo = false;
String cp = null;
String devName = null;
LogonInfo logonInfo = null;
for (int i = 0; i < args.length; i++) {
arg = args[i];
if (arg.startsWith("-")) {
if ("-3dfx".equalsIgnoreCase(arg))
pUse3dFX = true;
// else if ("-PSHBTNCHC".equalsIgnoreCase(arg))
// pPSHBTNCHC = true;
else if ("-STRPCCMD".equalsIgnoreCase(arg))
pSTRPCCMD = true;
else if ("-maximized".equalsIgnoreCase(arg))
pMaximized = true;
else if ("-altFKeyRemap".equalsIgnoreCase(arg))
pAltFKeyRemap = true;
else if ("-noSSL".equalsIgnoreCase(arg))
pUseSSL = 0;
else if ("-useSSL".equalsIgnoreCase(arg))
pUseSSL = 1;
else if ("-cp".equalsIgnoreCase(arg))
expectCP = true;
else if ("-devName".equalsIgnoreCase(arg))
expectDevName = true;
else if ("-autoLogon".equalsIgnoreCase(arg))
expectLogonInfo = true;
else
usageError("Wrong option: " + arg);
}
else if (expectCP) {
expectCP = false;
if (XIEbcdicTranslator.getTranslator(arg) == null)
usageError("Unknown codepage: " + arg);
cp = arg;
}
else if (expectDevName) {
expectDevName = false;
devName = arg;
}
else if (expectLogonInfo) {
expectLogonInfo = false;
try {
logonInfo = new LogonInfo(arg);
}
catch (IllegalArgumentException ex) {
usageError(ex.getMessage());
}
}
else {
if (pHost == null)
pHost = arg;
else
usageError("Too many host names.");
}
}
if (expectCP)
usageError("A code page is expected");
final boolean altFKeyRemap = pAltFKeyRemap;
final int useSSL = pUseSSL;
final boolean use3dFX = pUse3dFX;
// final boolean enablePSHBTNCHC = pPSHBTNCHC;
final boolean enableSTRPCCMD = pSTRPCCMD;
final boolean maximized = pMaximized;
final String host = pHost;
final String codePage = cp;
final String deviceName = devName;
final LogonInfo autoLogonInfo = logonInfo;
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
XI5250Emulator em;
// if (enablePSHBTNCHC) {
// XI5250EmulatorExt emext = new XI5250EmulatorExt();
// PanelsDispatcher disp = new PanelsDispatcher();
// disp.setEmulator(emext);
// new PSHBTNCHCHandler(disp);
// if (autoLogonInfo != null)
// new AutoLogonHandler(disp, autoLogonInfo);
// em = emext;
// }
// else if (autoLogonInfo != null) {
// if (autoLogonInfo != null) {
// XI5250EmulatorExt emext = new XI5250EmulatorExt();
// PanelsDispatcher disp = new PanelsDispatcher();
// disp.setEmulator(emext);
// new AutoLogonHandler(disp, autoLogonInfo);
// em = emext;
// }
// else {
em = new XI5250Emulator();
// }
em.setTerminalType("IBM-3477-FC");
em.setKeyboardQueue(true);
em.setStrPcCmdEnabled(enableSTRPCCMD);
em.setAltFKeyRemap(altFKeyRemap);
em.setUseSSL(useSSL);
em.setCodePage(codePage);
if (deviceName != null)
em.setTelnetEnv("\u0003DEVNAME\u0001" + deviceName);
if (host != null) {
em.setHost(host);
em.setActive(true);
}
XI5250Frame frm = new XI5250Frame("xtn5250mg" + " " +
XI5250Emulator.VERSION, em);
frm.setIconImage(cvImagesBdl.getImage("Logo"));
frm.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
//3D FX
if (use3dFX) {
em.setDefFieldsBorderStyle(XI5250Field.LOWERED_BORDER);
em.setDefBackground(UIManager.getColor("control"));
}
//frm.setBounds(0, 0, 570, 510);
frm.centerOnScreen(70);
if (maximized) {
frm.doNotPackOnStartup();
frm.setExtendedState(Frame.MAXIMIZED_BOTH);
}
frm.setVisible(true);
}
});
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
catch (InvocationTargetException ex) {
ex.printStackTrace();
}
}
//////
// private static class PanelsDispatcher extends XI5250PanelsDispatcher {
//
// private AutoLogonHandler ivAutoLogonHandler;
// private XI5250PanelHandler ivHandler;
//
// @Override
// public synchronized void addPanelHandler(XI5250PanelHandler panel) {
// if (panel instanceof AutoLogonHandler) {
// if (ivAutoLogonHandler != null)
// throw new IllegalArgumentException("Handler already setted");
// ivAutoLogonHandler = (AutoLogonHandler)panel;
// return;
// }
// if (ivHandler != null)
// throw new IllegalArgumentException("Handler already setted");
// ivHandler = panel;
// }
//
// @Override
// protected synchronized XI5250PanelHandler getCurrentPanelHandler() {
// return (ivAutoLogonHandler != null && ivAutoLogonHandler.detailedTest()) ? ivAutoLogonHandler : ivHandler;
// }
//
// @Override
// public synchronized void removePanelHandler(XI5250PanelHandler panel) {
// if (ivHandler != panel)
// throw new IllegalArgumentException("Not the registered handler " + panel);
// ivHandler = null;
// }
// }
//////
private static class LogonInfo {
final int fieldsCount;
final String userLabel;
final String passwdLabel;
final String user;
final String passwd;
LogonInfo(String info) {
String[] ss = info.split(";", 5);
if (ss.length < 5)
throw new IllegalArgumentException("Invalid autoLogon argument");
try {
fieldsCount = Integer.parseInt(ss[0]);
}
catch (NumberFormatException ex) {
throw new IllegalArgumentException("Invalid autoLogon argument: " + ex.getMessage());
}
userLabel = ss[1];
passwdLabel = ss[2];
user = ss[3];
passwd = ss[4];
}
}
//////
// private static class AutoLogonHandler extends XI5250PanelHandler {
//
// private final LogonInfo ivLogonInfo;
// private boolean ivLoggedOn;
//
// public AutoLogonHandler(XI5250PanelsDispatcher aPanelDisp, LogonInfo info) {
// super(aPanelDisp);
// ivLogonInfo = info;
// }
//
// @Override
// protected boolean detailedTest() {
// if (ivLoggedOn)
// return false;
// // I'm expecting xx fields in the logon panel
// if (getFields().size() != ivLogonInfo.fieldsCount)
// return false;
// // Is there the user id field ?
// if (!checkField(getFieldNextTo(ivLogonInfo.userLabel), 10))
// return false;
// // Is there the password field ?
// if (!checkField(getFieldNextTo(ivLogonInfo.passwdLabel), 10))
// return false;
// return true;
// }
//
// @Override
// protected void start() {
// ivLoggedOn = true;
// // Start logon panel processing
// XI5250Field userField = getFieldNextTo(ivLogonInfo.userLabel);
// XI5250Field passwdField = getFieldNextTo(ivLogonInfo.passwdLabel);
// userField.setString(ivLogonInfo.user); // Your user id
// passwdField.setString(ivLogonInfo.passwd); // Your password
// // Simulate the user ENTER key pressed
// getEmulator().processRawKeyEvent(
// new KeyEvent(getEmulator(), KeyEvent.KEY_PRESSED,
// 0, 0, KeyEvent.VK_ENTER, KeyEvent.CHAR_UNDEFINED));
// }
//
// @Override
// protected void stop() {
// }
// }
}