B34A1010 - iSeries Library/Filename

DBohner-(db)

Legendary Poster
I'm trying to use B34A1010 (Open Flat File) to create a file in a defined library (OUTBOUND) with a dynamic filename (from processing options). The Open Flat File is not creating the file in library OUTBOUND (or anywhere, as far as I can tell).

Here's my train of thought, examples and part of the log that shows the failure.

I concat 'OUTBOUND/' to the name provided in the processing options (in this case J55TC01) to get OUTBOUND/J55TC01. In this example - evt_szFilePath_EFRM is 'OUTBOUND/J55TC01'

0040 // Create Log File Member
0041 Open Flat File
"1" -> cSuppressErrorMessage
VA evt_cErrorCode_ERRC <- cErrorCode
VA evt_szErrorMessageId_DTAI <- szErrorMessageId
<Blank> -> cAppendMode
VA evt_idFilePtr_GENLNG <- idFilePtr
VA evt_szFilePath_EFRM -> szFilePath

In the following line - evt_UserLine_TXT0 is just some odd text.
0042 Write One Line To Flat File
"1" -> cSuppressErrorMessage
VA evt_cErrorCode_ERRC <- cErrorCode
VA evt_szErrorMessageId_DTAI <- szErrorMessageId
VA evt_idFilePtr_GENLNG -> idFilePtr
VA evt_UserLine_TXT0 -> szRecord

Then we close the file after a bunch more writes.
0046 Close Flat File
"1" -> cSuppressErrorMessage
VA evt_cErrorCode_ERRC <- cErrorCode
VA evt_szErrorMessageId_DTAI <- szErrorMessageId
VA evt_idFilePtr_GENLNG -> idFilePtr
0047 //

Here's the log from the iSeries - showing the failure (but, of course - I still don't know why).

Oct 20 09:18:58.061936 jdeobj.c1649 - **********************************************************************************
Oct 20 09:18:58.062040 jdeobj.c1652 - *** Start dumping data structure for business function OpenFlatFile
Oct 20 09:18:58.062136 jdeobj.c1655 - **********************************************************************************
Oct 20 09:18:58.062240 jdeobj.c1745 - IN->[ 1] <Item>: cSuppressErrorMessage <type>: CHAR <Value>: [1]
Oct 20 09:18:58.062344 jdeobj.c1745 - IN->[ 2] <Item>: cErrorCode <type>: CHAR <Value>: []
Oct 20 09:18:58.062448 jdeobj.c1745 - IN->[ 3] <Item>: szErrorMessageId <type>: STRING <Value>: []
Oct 20 09:18:58.062552 jdeobj.c1745 - IN->[ 4] <Item>: cAppendMode <type>: CHAR <Value>: [ ]
Oct 20 09:18:58.062656 jdeobj.c1745 - IN->[ 5] <Item>: idFilePtr <type>: ID <Value>: [0]
Oct 20 09:18:58.062768 jdeobj.c1745 - IN->[ 6] <Item>: szFilePath <type>: STRING <Value>: [OUTBOUND/J55TC01]
Oct 20 09:18:58.062872 jdeobj.c1753 - **********************************************************************************
Oct 20 09:18:58.062968 jdeobj.c1756 - *** End dumping data structure for business function OpenFlatFile
Oct 20 09:18:58.063072 jdeobj.c1759 - **********************************************************************************
Oct 20 09:18:58.063184 jdb_ctl.c5276 - Entering JDB_InitBhvr
Oct 20 09:18:58.063304 jdb_ctl.c5365 - Exiting JDB_InitBhvr with Success (UserHandle SPP:0000 :0000 :0:f:11)
Oct 20 09:18:58.063480 jdb_ctl.c5812 - Entering JDB_FreeBhvr (UserHandle SPP:0000 :0000 :0:f:11)
Oct 20 09:18:58.063592 jdb_ctl.c5847 - Exiting JDB_FreeBhvr with Success(UserHandle SPP:0000 :0000 :0:f:11)
Oct 20 09:18:58.063800 jdeobj.c1649 - **********************************************************************************
Oct 20 09:18:58.063904 jdeobj.c1652 - *** Start dumping data structure for business function OpenFlatFile
Oct 20 09:18:58.064000 jdeobj.c1655 - **********************************************************************************
Oct 20 09:18:58.064104 jdeobj.c1745 - OUT->[ 1] <Item>: cSuppressErrorMessage <type>: CHAR <Value>: [1]
Oct 20 09:18:58.064208 jdeobj.c1745 - OUT->[ 2] <Item>: cErrorCode <type>: CHAR <Value>: [1]
Oct 20 09:18:58.064320 jdeobj.c1745 - OUT->[ 3] <Item>: szErrorMessageId <type>: STRING <Value>: [078D]
Oct 20 09:18:58.064424 jdeobj.c1745 - OUT->[ 4] <Item>: cAppendMode <type>: CHAR <Value>: [ ]
Oct 20 09:18:58.064528 jdeobj.c1745 - OUT->[ 5] <Item>: idFilePtr <type>: ID <Value>: [0]
Oct 20 09:18:58.064632 jdeobj.c1745 - OUT->[ 6] <Item>: szFilePath <type>: STRING <Value>: [OUTBOUND/J55TC01]
Oct 20 09:18:58.064736 jdeobj.c1753 - **********************************************************************************
Oct 20 09:18:58.064840 jdeobj.c1756 - *** End dumping data structure for business function OpenFlatFile
Oct 20 09:18:58.064936 jdeobj.c1759 - **********************************************************************************
Oct 20 09:18:58.065048 jdeobj.c1497 - Return value is 2 for OpenFlatFile. (BSFNLevel = 2)
Oct 20 09:18:58.065144 jdeobj.c2201 - Entering AddObjectCache
Oct 20
=========================================

OK - what am I missing? I've checked permission for the library (*public has *all)

TIA

(db)
 
Dear DBohner,

Does the AS/400 User Profile that is running the UBE have the authority to create objects on the AS/400?

DBohner <[email protected]> wrote:
I'm trying to use B34A1010 (Open Flat File) to create a file in a defined library (OUTBOUND) with a dynamic filename (from processing options). The Open Flat File is not creating the file in library OUTBOUND (or anywhere, as far as I can tell).

Here's my train of thought, examples and part of the log that shows the failure.

I concat 'OUTBOUND/' to the name provided in the processing options (in this case J55TC01) to get OUTBOUND/J55TC01. In this example - evt_szFilePath_EFRM is 'OUTBOUND/J55TC01'

0040 // Create Log File Member
0041 Open Flat File
"1" -> cSuppressErrorMessage
VA evt_cErrorCode_ERRC <- cErrorCode
VA evt_szErrorMessageId_DTAI <- szErrorMessageId
VA evt_idFilePtr_GENLNG <- idFilePtr
VA evt_szFilePath_EFRM -> szFilePath

In the following line - evt_UserLine_TXT0 is just some odd text.0042 Write One Line To Flat File
"1" -> cSuppressErrorMessage
VA evt_cErrorCode_ERRC <- cErrorCode
VA evt_szErrorMessageId_DTAI <- szErrorMessageId
VA evt_idFilePtr_GENLNG -> idFilePtr
VA evt_UserLine_TXT0 -> szRecord

Then we close the file after a bunch more writes.
0046 Close Flat File
"1" -> cSuppressErrorMessage
VA evt_cErrorCode_ERRC <- cErrorCode
VA evt_szErrorMessageId_DTAI <- szErrorMessageId
VA evt_idFilePtr_GENLNG -> idFilePtr
0047 //

Here's the log from the iSeries - showing the failure (but, of course - I still don't know why).

Oct 20 09:18:58.061936 jdeobj.c1649 -
 
I've posed that question to the CNC Admin and the iSeries admin... so they can follow-up.

Additionally - any externally called commands are failing, so I am of the thought that maybe the PSUSER does not have all the permissions that he needs to have (like run external commands).

Shouldn't PSUSER be able to create objects, and run external commands - by default?

(db)
 
It depends which AS/400 user class that PSUSER is set in. The typical QUSER class is used for end users and this profile is very limited (it has what is know as "limited capability") as to what OS/400 commands it can execute.

I think, but am not sure, that business function B34A1010 may eventually run the OS/400 Create Physical File (CRTPF) command to create the flat file which is a command that QUSER is restricted from using.

How are you running the job. Is it in a batch job that runs on the AS/400 or is it called from an
interactive application. It seems like I remember that all batch jobs run under AS/400 user profile JDE which may have the needed authority. If this is the case then something else may be causing the problem.

Do your CNC guys know AS/400 security? If not, can you get someone at your site who does know AS/400 security to work with you in resolving this.

Some OS/400 commands that might help are:

WRKUSRPRF PSUSER You can see if PSUSER has limited capabilities and what group (like QUSER) they belong to using this command.

WRKOBJAUT CTRPF You can use this command to see if PSUSER can actually run the CRTPF command.

You could get someone to create the file on the AS/400 for you using the CRTPF comand. A record length will need to be provided. You can use a record length value that is slightly bigger
that your flat file record is. Then, rerun the business function after changing the parameter it uses for "create and append" versus just "append" to just "append".

Hope this helps.


DBohner <[email protected]> wrote:
I've posed that question to the CNC Admin and the iSeries admin... so they can follow-up.

Additionally - any externally called commands are failing, so I am of the thought that maybe the PSUSER does not have all the permissions that he needs to have (like run external commands).

Shouldn't PSUSER be able to create objects, and run external commnads - by default?

(db)
Member - iConsortium Always looking for new gigs! Daniel Bohner | JDE Developer Independant-JDE/Web/Photo www.ExistingLight.Net | [email protected] JDE XE - 8.10 | AS/400
 
One other thing is that B34A1010 may be platform dependent so it will run okay on Windows but will not run on the AS/400. A similiar business function B34A1030 (Execute External Program) is like this in that it uses the C System() function to execute external commands. If you run this BSFN on Windows and do a OS/400 CRTPF command it will fail. But, if you run it on Windows and use a DOS Copy command it will work. If you run it on the AS/400 and do a CRTPF command it will work.

Can you find the source for the B34A1010 C program that is on the AS/400? Business functions turn into ILE C programs on the AS/400 so that is the kind of source that you will be looking for.

Good Luck.


DBohner <[email protected]> wrote:
I've posed that question to the CNC Admin and the iSeries admin... so they can follow-up.

Additionally - any externally called commands are failing, so I am of the thought that maybe the PSUSER does not have all the permissions that he needs to have (like run external commands).

Shouldn't PSUSER be able to create objects, and run external commnads - by default?

(db)
Member - iConsortium Always looking for new gigs! Daniel Bohner | JDE Developer Independant-JDE/Web/Photo www.ExistingLight.Net | [email protected] JDE XE - 8.10 | AS/400
 
B34A1010 does too work on AS400!

Daniel, have you checked the job log for the kernel that ran your BSFN? It should tell you all you need to know.
 
Sorry for the late response - it's a travel day....

By checking the log on the Kernel - is that the same as doing a wrkjob on the report/ube name? wrkjob R55something?

If so - Yes, I have reviewed the qezdebuglog, and it doesn't show any reference to the B34A1010 function (which I find odd).

If I'm not checking the right thing (I'm not checking the job's kernal log) - point me in the right direction, please!

(db)
 
Hi All,

Just to confirm. The B34A1010 function can create/write/close a file to a Library/filename (for those that have used it - please respond)...

I'm being told that it only writes to the IFS by one group - and told that it can write to a library/file by another group.

I do have a call into the Borg - to find a definative answer, but - if anyone has examples of using it with library/filename - I'd be appreciative!

(db)
 
For debugging that darnmed thing....

I run my UBE that contains the B34A1010 interactively - so all the logs are under my greenscreen joblog...

I don't get any error messages in my iSeries job logs, I only get the 078D error message in the JDE debug log file. Thus, I still cannot determine why the table isn't being created.

At some point in time - JDE/PS/Orc=Borgagle changed from using Fopen in the function to using the Unicoded jdeFopen. I'm guessing that the change references the F93081 to validate that the flat file is not supposed to be Unicode - beyond that, I'm not sure what has changed....

Does anyone know of another (or better) way to identify the reason why jdefopen doesn't open(or create) a table on the iSeries?

(db)
 
Dear DBohner,

Did you not get any error messages in the iSeries job log or did it not create a job log?

Can you put the iSeries job queue on hold and submit your job. While you job is still in the job queue change the logging level to 4, 00, *SECLVL. You do this by putting a 2 beside the job on the iSeries and pressing enter which runs the CHGJOB command. The 4, 00, *SECLVL is actually 3 seperate parameters and will cause a detailed iSeries job log to be created. I think that the 3 paramaters are on the second page of the CHGJOB commead. Then, release the job queue (Don't forget to release the iSeries job queue or you may not be a popular person).

Hopefully this will create a more detailed job log which you might be able to use to determine your problem.

You can email me the job log if you wish ([email protected]) and I will be glad to take a look at it.

Hope this helps.

DBohner <[email protected]> wrote:
For debugging that darnmed thing....

I run my UBE that contains the B34A1010 interactively - so all the logs are under my greenscreen joblog...

I don't get any error messages in my iSeries job logs, I only get the 078D error message in the JDE debug log file. Thus, I still cannot determine why the table isn't being created.

At some point in time - JDE/PS/Orc=Borgagle changed from using Fopen in the function to using the Unicoded jdeFopen. I'm guessing that the change references the F93081 to validate that the flat file is not supposed to be Unicode - beyond that, I'm not sure what has changed....

Does anyone know of another (or better) way to identify the reason why jdefopen doesn't open(or create) a table on the iSeries?

(db)
Member - iConsortium Always looking for new gigs! Daniel Bohner | JDE Developer Independant-JDE/Web/Photo www.ExistingLight.Net | [email protected] JDE XE - 8.10 | AS/400
 
EagleRalph,

I changed my interactive session to 4,00,*seclvl - then used RUNUBE to run the process locally.

I run a TC in-line, then attempt to create a table, then attempt to write to the table, then attempt to close the talbe, then run some additional external commands. The iSeries joblog shows the TC running (clear table, insert 4 zillion records), then shows the external commands that are run after the create/write/close (B34A1010)... it still doesn't show a hint of the function running.

(db)
 
Daniel, what about opening the LIBRARY/FILE via the IFS?

I.e. instead of "LIBNAME/FILENAME"
use "/QSYS.LIB/LIBRARY.LIB/FILENAME.FILE"

If the file is multi-member you can add "/MBRNAME/MBR" to the end.

Sounds too simple - I doubt it will work!
 
Ok - here's the scoop from bOrgacle.

B34A1010 - Post XE is to write to the IFS Only. If you want to write to a library/table - you have to use the Cpyfrmstmf command.

I tried Jolly's recommendation - to write to /qsys.lib/libraryname.lib/tablename.file/membername.mbr - it worked, but it created save files (SAVF)... It was 'almost' there.

Since my goal was to insert a Lines of text into an iSeries table (src)... I still had some research to accomplish.

My final resoultion
Call External Command (B34A1030)
Use the QSH Command - like this:
QSH CMD('echo "whatever text you want to write" >> /qsys.lib/libraryname.lib/tablename.file/membername.mbr')

* QSH - inacts the Q Shell
* CMD - tells Q Shell it's a command
* echo - MAKE SURE YOU USE LOWER CASE; echoes text
* "whatever's between the double quotes" - the text you appending
* >> - Append (could be replaced with > if you are writing one line)
* /qsys.lib/.... points to the library/file.member you are appending to

Note - make sure 'echo' is lowercase (I lost a day of development)
Note - if the member doesn't exist, it will be created

So - I have the solution, to build a flat-file, totally within the bOrgacle toolset... sort of...

(db)
 
Re: RE: B34A1010 - iSeries Library/Filename

smile.gif
- and what does MIME have to do?

Just, mostly - providing you a rough time.

(db)
 
Cool!

DBohner <[email protected]> wrote:Ok - here's the scoop from bOrgacle.

B34A1010 - Post XE is to write to the IFS Only. If you want to write to a library/table - you have to use the Cpyfrmstmf command.

I tried Jolly's recommendation - to write to /qsys.lib/libraryname.lib/tablename.file/membername.mbr - it worked, but it created save files (SAVF)... It was 'almost' there.

Since my goal was to insert a Lines of text into an iSeries table (src)... I still had some research to accomplish.

My final resoultion
Call External Command (B34A1030)
Use the QSH Command - like this:
QSH CMD('echo "whatever text you want to write" >> /qsys.lib/libraryname.lib/tablename.file/membername.mbr')

* QSH - inacts the Q Shell
* CMD - tells Q Shell it's a command
* echo - MAKE SURE YOU USE LOWER CASE; echoes text
* "whatever's between the double quotes" - the text you appending
* >> - Append (could be replaced with >! if you are writing one line)
* /qsys.lib/.... points to the library/file.member you are appending to

Note - make sure 'echo' is lowercase (I lost a day of development)
Note - if the member doesn't exist, it will be created

So - I have the solution, to build a flat-file, totally within the bOrgacle toolset... sort of...

(db)
Member - iConsortium Always looking for new gigs! Daniel Bohner | JDE Developer Independant-JDE/Web/Photo www.ExistingLight.Net | [email protected] JDE XE - 8.10 | AS/400
 
[ QUOTE ]
I'm trying to use B34A1010 (Open Flat File) to create a file in a defined library (OUTBOUND) with a dynamic filename (from processing options). The Open Flat File is not creating the file in library OUTBOUND (or anywhere, as far as I can tell).

Here's my train of thought, examples and part of the log that shows the failure.

I concat 'OUTBOUND/' to the name provided in the processing options (in this case J55TC01) to get OUTBOUND/J55TC01. In this example - evt_szFilePath_EFRM is 'OUTBOUND/J55TC01'

0040 // Create Log File Member
0041 Open Flat File
"1" -> cSuppressErrorMessage
VA evt_cErrorCode_ERRC <- cErrorCode
VA evt_szErrorMessageId_DTAI <- szErrorMessageId
<Blank> -> cAppendMode
VA evt_idFilePtr_GENLNG <- idFilePtr
VA evt_szFilePath_EFRM -> szFilePath

In the following line - evt_UserLine_TXT0 is just some odd text.
0042 Write One Line To Flat File
"1" -> cSuppressErrorMessage
VA evt_cErrorCode_ERRC <- cErrorCode
VA evt_szErrorMessageId_DTAI <- szErrorMessageId
VA evt_idFilePtr_GENLNG -> idFilePtr
VA evt_UserLine_TXT0 -> szRecord

Then we close the file after a bunch more writes.
0046 Close Flat File
"1" -> cSuppressErrorMessage
VA evt_cErrorCode_ERRC <- cErrorCode
VA evt_szErrorMessageId_DTAI <- szErrorMessageId
VA evt_idFilePtr_GENLNG -> idFilePtr
0047 //

Here's the log from the iSeries - showing the failure (but, of course - I still don't know why).

Oct 20 09:18:58.061936 jdeobj.c1649 - **********************************************************************************
Oct 20 09:18:58.062040 jdeobj.c1652 - *** Start dumping data structure for business function OpenFlatFile
Oct 20 09:18:58.062136 jdeobj.c1655 - **********************************************************************************
Oct 20 09:18:58.062240 jdeobj.c1745 - IN->[ 1] <Item>: cSuppressErrorMessage <type>: CHAR <Value>: [1]
Oct 20 09:18:58.062344 jdeobj.c1745 - IN->[ 2] <Item>: cErrorCode <type>: CHAR <Value>: []
Oct 20 09:18:58.062448 jdeobj.c1745 - IN->[ 3] <Item>: szErrorMessageId <type>: STRING <Value>: []
Oct 20 09:18:58.062552 jdeobj.c1745 - IN->[ 4] <Item>: cAppendMode <type>: CHAR <Value>: [ ]
Oct 20 09:18:58.062656 jdeobj.c1745 - IN->[ 5] <Item>: idFilePtr <type>: ID <Value>: [0]
Oct 20 09:18:58.062768 jdeobj.c1745 - IN->[ 6] <Item>: szFilePath <type>: STRING <Value>: [OUTBOUND/J55TC01]
Oct 20 09:18:58.062872 jdeobj.c1753 - **********************************************************************************
Oct 20 09:18:58.062968 jdeobj.c1756 - *** End dumping data structure for business function OpenFlatFile
Oct 20 09:18:58.063072 jdeobj.c1759 - **********************************************************************************
Oct 20 09:18:58.063184 jdb_ctl.c5276 - Entering JDB_InitBhvr
Oct 20 09:18:58.063304 jdb_ctl.c5365 - Exiting JDB_InitBhvr with Success (UserHandle SPP:0000 :0000 :0:f:11)
Oct 20 09:18:58.063480 jdb_ctl.c5812 - Entering JDB_FreeBhvr (UserHandle SPP:0000 :0000 :0:f:11)
Oct 20 09:18:58.063592 jdb_ctl.c5847 - Exiting JDB_FreeBhvr with Success(UserHandle SPP:0000 :0000 :0:f:11)
Oct 20 09:18:58.063800 jdeobj.c1649 - **********************************************************************************
Oct 20 09:18:58.063904 jdeobj.c1652 - *** Start dumping data structure for business function OpenFlatFile
Oct 20 09:18:58.064000 jdeobj.c1655 - **********************************************************************************
Oct 20 09:18:58.064104 jdeobj.c1745 - OUT->[ 1] <Item>: cSuppressErrorMessage <type>: CHAR <Value>: [1]
Oct 20 09:18:58.064208 jdeobj.c1745 - OUT->[ 2] <Item>: cErrorCode <type>: CHAR <Value>: [1]
Oct 20 09:18:58.064320 jdeobj.c1745 - OUT->[ 3] <Item>: szErrorMessageId <type>: STRING <Value>: [078D]
Oct 20 09:18:58.064424 jdeobj.c1745 - OUT->[ 4] <Item>: cAppendMode <type>: CHAR <Value>: [ ]
Oct 20 09:18:58.064528 jdeobj.c1745 - OUT->[ 5] <Item>: idFilePtr <type>: ID <Value>: [0]
Oct 20 09:18:58.064632 jdeobj.c1745 - OUT->[ 6] <Item>: szFilePath <type>: STRING <Value>: [OUTBOUND/J55TC01]
Oct 20 09:18:58.064736 jdeobj.c1753 - **********************************************************************************
Oct 20 09:18:58.064840 jdeobj.c1756 - *** End dumping data structure for business function OpenFlatFile
Oct 20 09:18:58.064936 jdeobj.c1759 - **********************************************************************************
Oct 20 09:18:58.065048 jdeobj.c1497 - Return value is 2 for OpenFlatFile. (BSFNLevel = 2)
Oct 20 09:18:58.065144 jdeobj.c2201 - Entering AddObjectCache
Oct 20
=========================================

OK - what am I missing? I've checked permission for the library (*public has *all)

TIA

(db)

[/ QUOTE ]


I'm faced now with the same issue. Did you ever resolve. I do fear the may not have create authority to the iSeries nor the windows share. which is my preferred target for the output file.

Curious.
confused.gif
 
dalfanz,

The answer to my issue is posted above - using QSH (Q-Shell command).

[ QUOTE ]
My final resoultion
Call External Command (B34A1030)
Use the QSH Command - like this:
QSH CMD('echo "whatever text you want to write" >> /qsys.lib/libraryname.lib/tablename.file/membername.mbr')

* QSH - inacts the Q Shell
* CMD - tells Q Shell it's a command
* echo - MAKE SURE YOU USE LOWER CASE; echoes text
* "whatever's between the double quotes" - the text you appending
* >> - Append (could be replaced with > if you are writing one line)
* /qsys.lib/.... points to the library/file.member you are appending to

Note - make sure 'echo' is lowercase (I lost a day of development)
Note - if the member doesn't exist, it will be created


[/ QUOTE ]

Are you trying to edit a true TXT table or ....

(db)
 
[ QUOTE ]
dalfanz,

The answer to my issue is posted above - using QSH (Q-Shell command).

[ QUOTE ]
My final resoultion
Call External Command (B34A1030)
Use the QSH Command - like this:
QSH CMD('echo "whatever text you want to write" >> /qsys.lib/libraryname.lib/tablename.file/membername.mbr')

* QSH - inacts the Q Shell
* CMD - tells Q Shell it's a command
* echo - MAKE SURE YOU USE LOWER CASE; echoes text
* "whatever's between the double quotes" - the text you appending
* >> - Append (could be replaced with > if you are writing one line)
* /qsys.lib/.... points to the library/file.member you are appending to

Note - make sure 'echo' is lowercase (I lost a day of development)
Note - if the member doesn't exist, it will be created


[/ QUOTE ]

Are you trying to edit a true TXT table or ....

(db)

[/ QUOTE ]

I'm not really trying to edit any text.

Rather I was trying to write to a network folder from the iSeries UBE. But guess on the release there is no IFS, QNTC or similar support for the function on the iSeries. So now I looking at to forced to simply write now on the iSeries
and bring then into the IFS and to the windows share from
that.

That help clarify things?
confused.gif
 
Back
Top