tn5250j/src/org/tn5250j/framework/tn5250 tnvt.java, 1.18, 1.19

Christian Geisert <[email protected]> Fri, 29 Feb 2008 08:43:38 +0000
Newsgroups gmane.comp.java.tn5250j.cvs
Message-ID <[email protected]>
Update of /cvsroot/tn5250j/tn5250j/src/org/tn5250j/framework/tn5250
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv18195/src/org/tn5250j/framework/tn5250

Modified Files:
	tnvt.java 
Log Message:
Finally support for STRPCO/STRPCCMD
This is based on work by Wim Van Leuven with adaption from Mahmoud
GANGAT - I just did change the check for the "PCO" string which didn't
work for me (problem with codepages..)


Index: tnvt.java
===================================================================
RCS file: /cvsroot/tn5250j/tn5250j/src/org/tn5250j/framework/tn5250/tnvt.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** tnvt.java	13 Dec 2005 11:53:00 -0000	1.18
--- tnvt.java	29 Feb 2008 08:43:36 -0000	1.19
***************
*** 37,40 ****
--- 37,41 ----
  import java.net.Socket;
  import java.util.Properties;
+ import java.util.Arrays;
  
  import javax.swing.JDialog;
***************
*** 91,94 ****
--- 92,97 ----
  	private boolean scan; // = false;
  	private static int STRSCAN = 1;
+     // WVL - LDC : 05/08/2005 : TFX.006253 - support STRPCCMD
+     private boolean strpccmd; // = false;    
  	private String user;
  	private String password;
***************
*** 919,923 ****
  		invited = true;
  	}
! 
  	// WVL - LDC : TR.000300 : Callback scenario from 5250
  	/**
--- 922,980 ----
  		invited = true;
  	}
!     
!    // WVL - LDC : 05/08/2005 : TFX.006253 - Support STRPCCMD
!    private void strpccmd()
!    {
!       try
!       {
!          int str = 11;
!          char c;
!          ScreenPlanes planes = screen52.getPlanes();
!          c = planes.getChar(str);
!          boolean waitFor = !(c == 'a');
!          
!          StringBuffer command = new StringBuffer();
!          for (int i = str+1; i < 132; i++)
!          {
!             c = planes.getChar(i);
!             if (Character.isISOControl(c))
!                c = ' ';
!             command.append(c);
!          }
!          
!          String cmd = command.toString().trim();
!          
!          run(cmd, waitFor);
!       }
!       finally
!       {
!          strpccmd = false;
!          screen52.sendKeys(screen52.MNEMONIC_ENTER);
!       }
!    }
!    
!    // WVL - LDC : 05/08/2005 : TFX.006253 - Support STRPCCMD
!    private void run(String cmd, boolean waitFor)
!    {
!       try
!       {
!          log.debug("RUN cmd = " + cmd);
!          log.debug("RUN wait = " + waitFor);
!          
!          Runtime r = Runtime.getRuntime();
!          Process p = r.exec(cmd);
!          if (waitFor)
!          {
!             int result = p.waitFor();
!             log.debug("RUN result = " + result);
!          }
!       }
!       catch (Throwable t)
!       {
!          log.error(t);
!       }
!    }
!    
!    
  	// WVL - LDC : TR.000300 : Callback scenario from 5250
  	/**
***************
*** 1138,1141 ****
--- 1195,1199 ----
  
  			try {
+             if (!strpccmd) {            
  				//               SwingUtilities.invokeAndWait(
  				//                  new Runnable () {
***************
*** 1148,1151 ****
--- 1206,1212 ----
  //				controller.validate();
  //				log.debug("update dirty");
+          } else {
+             strpccmd();
+          }
  			} catch (Exception exd) {
  				log.warn(" tnvt.run: " + exd.getMessage());
***************
*** 1857,1861 ****
  				//            int colc = screen52.getCurrentCol();
  
! 				switch (bk.getNextByte()) {
  
  				case 1: // SOH - Start of Header Order
--- 1918,1924 ----
  				//            int colc = screen52.getCurrentCol();
  
! 				byte bytebk = bk.getNextByte();
!                  
! 				switch (bytebk) {
  
  				case 1: // SOH - Start of Header Order
***************
*** 2062,2066 ****
--- 2125,2159 ----
  
  					break;
+             // WVL - LDC : 05/08/2005 : TFX.006253 - Support STRPCCMD
+             case -128: //STRPCCMD
+ //          if (screen52.getCurrentPos() == 82) {
+                log.debug("STRPCCMD got a -128 command at " + screen52.getCurrentPos());
+                StringBuffer value = new StringBuffer();
+                int b;
+                char c;
+                int[] pco = new int[9];
+                int[] pcoOk = {0xfc, 0xd7, 0xc3, 0xd6, 0x40, 0x83, 0x80, 0xa1, 0x80};
+ 
+                for (int i = 0; i < 9; i++)
+                {
+                   b = bk.getNextByte();
+                   pco[i] = ((b & 0xff));
+                   c = ebcdic2uni(b);
+                   value.append(c);
+                }
  
+                // Check "PCO-String"
+                if (Arrays.equals(pco, pcoOk)) {
+                    strpccmd = true;
+                }
+                // we return in the stream to have all chars
+                // arrive at the screen for later processing
+                for (int i = 0; i < 9; i++)
+                   bk.setPrevByte();
+             //}
+             // no break: so every chars arrives
+             // on the screen for later parsing
+             //break;
+             
  				default: // all others must be output to screen
  					log.debug("all others must be output to screen");


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/