[U2] So long and other thoughs

2013-02-20 Thread Gyle Iverson
I am moving on to a venture outside of the multi-value space. (For those
interested, check out CloudVaults.com to see what I am doing now.)

 

Sometime ago, you may recall my notice that the line of decompiler products
and services for UniVerse and PI/open from srs4uv.com were being withdrawn. 

 

I have had discussions with several parties familiar to us on this list,
including a representative of Rocket Software. Unfortunately, there is
insufficient interest in acquiring the decompiler tool chain and giving it a
new home. The srs4uv.com domain including the web site and email will go
off-line in a few days. As well, the decompiler and service is no longer
available.

 

It has been fun and rewarding to be a part of this group over the decades
and I leave with fond memories of its members.

 

Best regards to all,

Gyle Iverson

 

 

___
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users


Re: [U2] srs4uv.com status [Was: Corrupted object in global catalog]

2013-01-05 Thread Gyle Iverson
You are spot on Ian. It was a fun and tedious exercise. And you are right.
The internals of each interpreter and its op codes are quite different. 

I wanted to answer the same question of how does one thing turn into
another. And, can I reverse that? 

history
The first decompiler was for Prime INFORMATION in 1982. There wasn't
documentation available to me per se. However, looking through their
compiled libraries you could glean the names of the op codes. Returning the
statements and functions was straight forward. Recovering the logical
structure of the program was the heavy lift. Way back then, what discussions
I could find on logical structure recovery all said it was impossible. I
discovered a way to take the distinct graph patterns associated with each
compiled structure and reconstruct the original structure. That was a fun
puzzle. Still today, most decompilers only return GOTO-filled source code. I
always insisted on no-GOTOs (unless the original code was a pile of
spaghetti originally) and there was no other way to reconstruct the program.

The UniVerse decompiler came out in 1992. VMark was nice enough to leave a
lot of useful information in some C language header files distributed with
the product. I briefly looked at doing a UniData decompiler and never found
sufficient time to dedicate to cracking that. Lee Leitner had a UniData
decompiler on the market for a while. 
/history

-Original Message-
From: u2-users-boun...@listserver.u2ug.org
[mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of McGowan, Ian
Sent: Friday, January 04, 2013 8:00 PM
To: U2 Users List
Subject: Re: [U2] srs4uv.com status [Was: Corrupted object in global
catalog]

Seems like a fun, if tedious, exercise in understanding the internals of
compiled code.  Surely different between ud and uv, given their lineage.
Are there any tools or documentation available to give a head start?  Does
the debugger leak any information on the internals?

It comes down to the question of how does:

# cat IAN.TEST
PRINT HELLO

Turn into:

# od -c _IAN.TEST
000 001   ?   ÿ   ÿ  \0   p  \0 001  \0  \0  \0  \0  \0  \0  \0  \0
020  \0 003  \0 001  \0  \0  \0   0  \0  \0  \0  \0  \0  \0  \0
040   /   i   n   f   o   /   D   E   V   E   L   /   B   P   .   D
060   E   V   /   I   A   N   .   T   E   S   T  \0   -   1  \0   H
100   E   L   L   O  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
120  \0 004  \0 033  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
140  \0 005  \0 002  \0  \0  \0 034   ÿ   ÿ   ÿ   ÿ  \0  \0  \0  \0
160  \0 004  \0 005  \0  \0  \0 037  \0  \0  \0  \0  \0  \0  \0  \0
200 001 214  \0 001  \0 001  \0 005  \0  \0  \0 020  \0 001  \0   ,
220  \0 001  \0 020  \0 002  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0

-Original Message-
From: u2-users-boun...@listserver.u2ug.org
[mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of David Wolverton
Sent: Friday, January 04, 2013 3:11 PM
To: 'U2 Users List'
Subject: Re: [U2] srs4uv.com status [Was: Corrupted object in global
catalog]

Question on the Source Code Recovery -- is the logic such that it could be
'open sourced' or GPL'd?  Or is there another way to do the source recovery?


That is, were the mechanics sold to Rocket Software Professional Services?
If not, could they be sold to another company is someone wanted to keep the
product active?  

While I don't have a need now, I like to think there is a place to go for
'the unthinkable' if it happened!

Just wondering!!  I don't know the circumstances that led to withdrawing
this service -- I would think it would rarely be needed, but when it was,
would be invaluable.  Seems a loss if it's now got to be re-written from
scratch!!

-Original Message-
From: u2-users-boun...@listserver.u2ug.org
[mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Gyle Iverson
Sent: Thursday, January 03, 2013 7:04 AM
To: u2-users@listserver.u2ug.org
Subject: [U2] srs4uv.com status [Was: Corrupted object in global catalog]

Thanks for your comments David. 

I left http://srs4uv.com/ on-line for now. The hosting expires 2012/02/21
and the domain expires 2012/02/28. I added a Donate button to the main page
in case people want to keep the site around and the links to it from
breaking. Otherwise, the site vanishes next month.

Gyle

___
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users
-
IMPORTANT NOTICE:   This message is intended only for the addressee
and may contain confidential, privileged information.  If you are not the
intended recipient, you may not use, copy or disclose any information
contained in the message.  If you have received this message in error,
please notify the sender by reply e-mail and delete the message.
___
U2-Users mailing list
U2-Users@listserver.u2ug.org
http

Re: [U2] srs4uv.com status [Was: Corrupted object in global catalog]

2013-01-04 Thread Gyle Iverson
I don't desire to give the technology away. Anyone interested in purchasing  
or licensing the technology should contact me directly.


Last year I recovered one program. Not enough activity to keep my interest.  
While we all appreciate the potential value of having the service, it is no  
longer economically viable.
 
Connected by DROID on Verizon Wireless


-Original message-
From: David Wolverton dwolv...@flash.net
To: 'U2 Users List' u2-users@listserver.u2ug.org
Sent: 2013 Jan, Fri, 4 23:11:16 GMT+00:00
Subject: Re: [U2] srs4uv.com status [Was: Corrupted object in global  
catalog]


Question on the Source Code Recovery -- is the logic such that it could be
'open sourced' or GPL'd?  Or is there another way to do the source recovery?


That is, were the mechanics sold to Rocket Software Professional Services?
If not, could they be sold to another company is someone wanted to keep the
product active?  


While I don't have a need now, I like to think there is a place to go for
'the unthinkable' if it happened!

Just wondering!!  I don't know the circumstances that led to withdrawing
this service -- I would think it would rarely be needed, but when it was,
would be invaluable.  Seems a loss if it's now got to be re-written from
scratch!!

-Original Message-
From: u2-users-boun...@listserver.u2ug.org
[mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Gyle Iverson
Sent: Thursday, January 03, 2013 7:04 AM
To: u2-users@listserver.u2ug.org
Subject: [U2] srs4uv.com status [Was: Corrupted object in global catalog]

Thanks for your comments David. 


I left http://srs4uv.com/ on-line for now. The hosting expires 2012/02/21
and the domain expires 2012/02/28. I added a Donate button to the main page
in case people want to keep the site around and the links to it from
breaking. Otherwise, the site vanishes next month.

Gyle

___
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users

___
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users


[U2] srs4uv.com status [Was: Corrupted object in global catalog]

2013-01-03 Thread Gyle Iverson
Thanks for your comments David. 

I left http://srs4uv.com/ on-line for now. The hosting expires 2012/02/21
and the domain expires 2012/02/28. I added a Donate button to the main page
in case people want to keep the site around and the links to it from
breaking. Otherwise, the site vanishes next month.

Gyle

-Original Message-
From: u2-users-boun...@listserver.u2ug.org
[mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Hona, David
Sent: Wednesday, January 02, 2013 9:47 PM
To: U2 Users List
Subject: Re: [U2] [UV]Corrupted object in global catalog

Here's some options for you...

1. Verify it is cataloged in Global Catalog The subroutine !EXIST subroutine
was created for Prime INFORMATION compatibility and does a simple check to
verify the program is catalogued only. Check out the source code in UV
account APP.PROGS, EXIST.

2. Verify Object code matches
The VCATALOG verb is also used to verify the compiled object in your BP
object file and the Global Catalog space are the same. (Interestingly, on my
UV11.1.9/AIX system, VCATALOG isn't working! :-( ).

3. Extract detailed object code header data Finally, writing your own custom
verification utility combining VLIST verb and/or Gyle Iversons' excellent
(NB: I understand he will soon close down this website) SRS.UV.HEADER
subroutine to extract header information from the global catdir and your BP
object file for comparison purposes.
URL: http://www.srs4uv.com/srs_uv_header.htm 



___
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users


[U2] [AD] srs4uv.com is going out of business

2012-11-27 Thread Gyle Iverson
Those of you that utilized the Source Recovery Service for UV or TAD, the
Adaptable Decompiler may be interested to know that I am shutting down the
srs4uv.com web site and the services December 31, 2012. After December 31,
2012, the products and services will no longer be available.

 

If you need to recover the source code for a program I suggest doing that
before the end of this year.

 

Thanks to all of you that have used my products and services over the years.

 

Sincerely,

Gyle Iverson

 

___
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users


RE: [U2] curious EQUATE issue - SOLVED Just want to know if anyone understands WHY?

2007-10-22 Thread Gyle Iverson
Richard Nuckolls wrote:
 the compiler is evaluating VALID.CC.TYPES1,1 as
 A':@VM:'B':@VM:'D':@VM:'M':@VM:'S':@VM:'V'1,1

The precedence of concatenation is lower than dynamic array extraction. Try
placing parenthesis characters around the equate definition. E.g. EQU
VALID.CC.TYPES TO ('A':@VM:'B':@VM:'D':@VM:'M':@VM:'S':@VM:'V'). It might be
necessary to use the EQUATE LITERALLY form to maintain the parenthesis
characters.

Best regards,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] How do you find out about file operation within an index?

2006-05-11 Thread Gyle Iverson
I'm wondering if there is a way to identify, within a file index, what
type of file operation has occurred.

Hello, Jeff.

Listed below is a program that uses the index like a trigger. It can only
detect WRITE and DELETE statements though.  I used this approach with PI and
PI/open as they never supported triggers (unless one considered the AKUFS a
trigger).

I have not tried this approach on UniVerse so I can not speak to its
performance, however, I suspect it will work reasonably well. If you do give
it a try, please let me know your results.

Ask me questions about what it is doing if things are unclear. I published
an article in Infocus and an NPUG proceedings that describes the algorithm
in detail but I do not have that in electronic form. :-(

Best regards,
Gyle

**
  SUBROUTINE BUILD.POD.INDEX(result)

* This program projects a nested Purchase Order into a normalized form
suitable for reporting purposes.

$INCLUDE PO.EQUATE.INS.IBAS
$INCLUDE POD.EQUATE.INS.IBAS

  DIM temporary.pod.record(2000)
  DIM purchase.order.record(100)

  EQUATE TRUE TO 1
  EQUATE FALSE TO 0

  EQUATE ADD TO 1
  EQUATE DELETING TO 2
  EQUATE UPDATE.FIRST.CALL TO 3
  EQUATE UPDATE.SECOND.CALL TO 4
  EQUATE NEEDLESS.WRITE.PERFORMED TO 5
  EQUATE BUILDING.INDEX TO 6

  COMMON /PO.POD/ Po.File.Variable,
 Pod.File.Variable,
 Last.Updated.Id,
 Last.Mode,
 Last.Added.Id,
 Build.Time

  result = 
  IF NOT(FILEINFO(Po.File.Variable, 0)) THEN
 OPEN , PO TO Po.File.Variable ELSE
PRINT
PRINT Unable to open the PO file!  (BUILD.POD.INDEX)
RETURN
 END
 Last.Updated.Id = 
 Last.Added.Id = 
 Last.Mode = 
 Build.Time = 0
  END

  IF NOT(FILEINFO(Pod.File.Variable, 0)) THEN
 OPEN , POD TO Pod.File.Variable ELSE
PRINT
PRINT Unable to open the POD file!  (BUILD.POD.INDEX)
RETURN
 END
 Last.Updated.Id = 
 Last.Added.Id = 
 Last.Mode = 
 Build.Time = 0
  END

  IF @SENTENCE[1, 11] = BUILD.INDEX THEN
 Last.Mode = BUILDING.INDEX
  END ELSE
 Build.Time = 0
 READ temporary.record FROM Po.File.Variable, @ID THEN
IF temporary.record = @RECORD THEN
   BEGIN CASE
  CASE @ID = Last.Updated.Id
 Last.Mode = UPDATE.SECOND.CALL
 Last.Added.Id = 
  CASE @ID = Last.Added.Id
 Last.Mode = NEEDLESS.WRITE.PERFORMED
 Last.Added.Id = 
  CASE TRUE
 Last.Mode = ADD
 Last.Added.Id = @ID
   END CASE
   Last.Updated.Id = 
END ELSE
   Last.Mode = UPDATE.FIRST.CALL
   Last.Added.Id = 
   Last.Updated.Id = @ID
END
 END ELSE
Last.Mode = DELETING
Last.Updated.Id = 
Last.Added.Id = 
temporary.record = 
 END
  END

  display.error.messages = TRUE
  ON Last.Mode GOSUB add:,
 delete:,
 update:,
 update.phase.2:,
 needless.write.performed:,
 build:

  RETURN

add:
  GOSUB build.pod.records:
  IF result # ERROR THEN
 GOSUB write.pod.records:
  END
  RETURN

delete:
  display.error.messages = FALSE
  GOSUB build.pod.records:
  GOSUB delete.pod.records:
  RETURN

update:
  display.error.messages = FALSE
  GOSUB build.pod.records:
  IF result # ERROR THEN
 GOSUB write.pod.records:
  END
  RETURN

update.phase.2:
  GOSUB delete.pod.records:
  GOSUB build.pod.records:
  IF result # ERROR THEN
 GOSUB write.pod.records:
  END
  RETURN

needless.write.performed:
  display.error.messages = FALSE
  GOSUB build.pod.records:
  RETURN

build:
  IF Build.Time = 0 THEN
 PRINT Clearing the POD file.  (BUILD.POD.INDEX)
 CLEARFILE Pod.File.Variable
 Build.Time = 1
  END
  GOSUB build.pod.records:
  IF result # ERROR THEN
 GOSUB write.pod.records:
  END
  RETURN

build.pod.records:

  MATPARSE purchase.order.record FROM @RECORD, @FM

  detail.record.counter = 0
  errors = 
  result = 
  number.of.backordered.line.items = 0
  number.of.excess.receipt.line.items = 0

  customer.id = purchase.order.record(PO.VENDOR.NUMBER)
  IF customer.id =  THEN
 customer.id = purchase.order.record(6)
  END
  customer.po = purchase.order.record(PO.PURCHASE.ORDER.NUMBER)
  current.order.status = purchase.order.record(PO.STATUS)

  hold = purchase.order.record(14)
  purchase.order.type = purchase.order.record(27)
  work.order.sequense = 

RE: [U2] [UV] Forcing Subroutine to be Re-read

2006-05-04 Thread Gyle Iverson
Does anyone know of a way that I can force the background job to reread the
subroutine?

Hello, Scott.

There is no method to do this without making changes to the subroutine
caller. 

If you use the CALL form of:

Foo = Foo
.
.
Call @Foo(stuff)

Reassigning Foo = Foo abandons a previously cached image of Foo and loads
the latest version of Foo.

One can do this reassignment preceding every call (careful, this could
negatively impact performance) or periodically test a lock or read a
specific field from a file record to control the reassignment.

Best regards,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Decompiler

2006-04-17 Thread Gyle Iverson
Hello, David.

Information about UniVerse source recovery can be found at
http://www.srs4uv.com. Contact me off-list for additional information.

Best regards,
Gyle

-Original Message-
From: [EMAIL PROTECTED] 
[mailto:[EMAIL PROTECTED] On Behalf Of David Katz
Sent: Monday, April 17, 2006 3:59 PM
To: u2-users@listserver.u2ug.org
Subject: [U2] Decompiler


Does anyone know if there is a decompiler out there for 
Universe source code?

Thanks
David.
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Speaking of TIME...

2006-04-07 Thread Gyle Iverson
Hello, David.

The TIMEDATE() function result is coherent. You just need to separate the
date from the time.

Best regards,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] [UV] Resize error

2006-03-09 Thread Gyle Iverson
I suggest using oh.exe to find the process that has the file open. Sometimes
I have seen explorer.exe as the culprit. You can download oh.exe from
msdn.microsoft.com.

Best regards,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Vlist Header Information

2006-01-31 Thread Gyle Iverson
   Does  anyone  know  another way to get the header information from the
   first 10 or so lines of a vlist? (other than by using a vlist).

Hello, Stuart.

You can use the SRS.UV.HEADER subroutine to get at all the header
information shown by VLIST and much more. The SRS.UV.HEADER source code may
be downloaded from http://www.srs4uv.com/srs_uv_header.htm.

Hope this helps.

Best regards,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] [UD] Best practices

2006-01-29 Thread Gyle Iverson
Brian Leach wrote...
Unlike the A/S type dictionaries, there is no standard way of separating
base and synonym dictionaries using D types, which can lead to dictionary
listing that takes forever to plough through to get to the definitions of
later fields, and makes writing automated routines to build BASIC include
files more complex.

So the convention they adopted was to use D types for all the 'base' fields
(one D type per field) and make all synonyms into I types of the form:

I
Base_Field_Name

That way they could see the file layout more easily. I thought that was 
pretty smart.

Here are some things I have seen and used on UniVerse that perhaps applies
to UniData as well.

Using I types in the way described above seems to move the problem of noise
from the D types to the I types area. Also, it incurrs additional reporting
overhead as an ITYPE() function is far more expensive than an EXTRACT()
function.

Other approaches include using custom D types or PHrases. The letters
following the D in field 1 of the dictionary defintion are treated as
comments, where the first space delimits the Type from the Description.
Defining additional D types is easy. One site used DP to indicate the
Primary field definition and the plain D types were considered synonyms. The
DP types had good descriptions for the field whereas the D types
descriptions were typically silent.

Use PHrases to create customized D types on the fly for use with reporting.
E.g.
F1 6 lines
D
1
 
 
10L
S

TF1 2 lines
PH
F1 FMT 33T

Of course, the PHrase solution only works with the report writer. The nice
thing about both of these approaches is that they retain the performance of
the EXTRACT(). 

Best regards,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Record count from an I-descriptor in the VOC

2005-12-28 Thread Gyle Iverson
Wendy Smoak
A coworker suggested basically the same thing, but with
READLIST/FORMLIST instead of SAVE.LIST/GET.LIST.

That is a lot of mucking about with select-list 0. For more efficiency
without changing your subroutine, try:

SELECT VOC WITH criteria TO 1
LIST VOC FROM 1 A51.COUNT.FILE A51.COUNT.DICT

No work arounds are required with this approach, though I suggest adding a
test to your subroutine to abort if select-list 0 is active.

Best regards,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] UniVerse server socket issues

2005-12-15 Thread Gyle Iverson
Thanks to all who responded.

The VAR is not motivated to pay me to change the architecture of their
client-server model to work around flaws in the initServerSocket() function.
The VAR has a solution today using the GCI which implements server
(listener) sockets in the C language. Ultimately they want to simplify the
solution by porting the code into BASIC, however, there is no reason to
force the fit now.

The VAR will report the issues to IBM support and wait for the fix in a
future release. 

Thanks again.

Best regards,
Gyle They call me Mr. Iverson
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] global catdir question

2005-12-15 Thread Gyle Iverson
Hello, John.

john reid asked...
I notice that an ls -lt in the u1 /uv /catdir directory indicates that
the *PROGRAM.NAME is updated apparently each time an execution
happens, at least that is what it looks like to me.  Anyone know if or
why that is happening?

UniVerse updates the record to keep track of the number of times the program
has been loaded from the catalog. This information appears as the Ref column
when you list the MAP file. 

Best regards,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


[U2] UniVerse server socket issues

2005-12-14 Thread Gyle Iverson
I am trying to help a U2 VAR migrate their custom-developed socket interface
that uses the GCI to a pure BASIC solution using the U2 socket functions.
They realize that by doing this their customers will need to license
additional U2 seats, but they hate the UV GCI support issue on UNIX as UV
must be re-linked. Unfortunately, the initServerSocket() function has a few
flaws that stopped this project.

1) The initServerSocket() function precludes using the standard socket
behavior of letting the socket sub-system assign any available port number
when the port number 0 is specified. The initServerSocket() function
translates all port numbers less than 1 to port 40001. This behavior of
forcing port 40001 breaks an important standard feature often used when a
server process is spawned to provide a cooperative service for another
process. As long as the two cooperative processes can agree and communicate
the randomly assigned port number, there is no reason to hard-code the port
for either process. In fact, when it is possible to have an indeterminate
number of these cooperative processes, trying to assign and track which
ports are available, raises to the application level something that is
otherwise handled at the kernel layer. That is never a good thing. I can not
imagine why U2 restricts a valuable server socket feature. This reminds me
of a documentation error that made it into code.
 
2) The other issue with the initServerSocket() is that it does not recognize
when another process already has a given port open for listening. The
example program below demonstrates this issue. This flaw prevents the
application level from randomly assigning the port number and knowing that
the port is actually available. Of course, this would not have been an issue
if number 1 above let the socket kernel assign random port numbers. This is
an ugly flaw as a program could wait forever for a port, never knowing that
another process already has the port in use.
 
I am using UV 10.1.11 PE on Windows. I am hoping someone has developed a
work-around (other than GCI) or knows when the fix is scheduled.
 
Best regards,
Gyle

Program SERVER.SOCKET

   Print Select a port number that is already in use on the system to test
for contention : 
   Input listenPort
   If listenPort =  Then
  Stop
   End

   result = initServerSocket( , listenPort, 1, listenerSocket )
   If result Then
  function = initServerSocket()
  Gosub DisplaySocketError:
  Stop
   End Else
  Print initServerSocket(): listening on port  : listenPort
   End

   result = getSocketInformation( listenerSocket, -1, socketInformation )
   If result Then
  function = getSocketInformation()
  Gosub DisplaySocketError:
  Stop
   End

   Print Server socket information
   Print ---
   Print Status :  : socketInformation1,1
   Print Host   :  : socketInformation1,2
   Print Port   :  : socketInformation1,3
   Print Secure :  : socketInformation1,4
   Print Mode   :  : socketInformation1,5

   Print SERVER.SOCKET ready.

   Gosub CloseListenSocket:

   Stop

CloseListenSocket:
   * Close the listen socket
   result = closeSocket( listenerSocket )
   If result Then
  function = closeSocket()
  Gosub DisplaySocketError:
  Stop
   End
   Return

DisplaySocketError:
   internalResult = getSocketErrorMessage( result, errorMessage )
   Print function :  returned:  : result
   Print errorMessage
   Return

End
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] UniVerse server socket issues

2005-12-14 Thread Gyle Iverson
Hello, Tony.

Tony Gravagno opined...
Clients need to know the port of a server, so a server 
absolutely requires a fixed and well-known port.  

A server can have a randomly assigned port that is fixed and well-known only
between the client and the server. If the server only exists for the benefit
of one client, it is up to them to figure out how to assign and communicate
the port dynamically. The fixed and well-known port requirement does not
imply that the assignment is permanent.

Why do you need an assigned port for a server?

Think about the problem of a client needing to spawn a unique server on
demand of the client. Each client may spawn a server dedicated to that
client. Certainly if one were using real UNIX/Windows processes, one could
single-thread through a central process and fork a new process, however, U2
products do not allow forking of processes. 

 2) The other issue with the initServerSocket() is that it
 does not recognize when another process already has a
 given port open for listening.

I haven't read the specs for initServerSocket but if it 
doesn't return a non-zero for an attachment failure then
yes, it's probably broken.

Yep.

However, in general, a given service should only have one listening
process.  

Not always true. There are dynamic services too.

It is valid to have a range of ports which all 
respond to inbound connections as a single service - that 
is, multiple servers will be listening to different socket 
ports, even if they support the same application/transport 
service.  

Interesting idea but it does not help with this issue. Have you tried
supporting multiple listening sockets in U2? You can not get anywhere
without a select() or poll() function analogue. While one could spawn
numerous phantoms, each listening on a unique port, one is left with how to
coordinate data and such between the phantoms. Not a pretty solution.

Coordination of what ports are in use for a given service 
should be done by the application, so you should never really
get to a failure in initServerSocket.  

Try the replication program using port 80. On my system initServerSocket
returns success even though IIS is currently bound to that port.

If nothing else you can use netstat to see what ports are in 
use and use a recognized port that is unallocated.

Yes, but not a solution for this issue.

Again, if you randomly generate a socket port for a service, 
how will any client know what port to connect to?

They communicate the port number behind the scenes.

Good luck.
Tony Gravagno

Thanks, Tony.

Best regards,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Comparing object code [Was: Deciphering Pick UniBasic statement]

2005-12-11 Thread Gyle Iverson
Hello, Jacques.

Jacques G. wrote...
From one horror story I read on the site about a
programmer that had sabotaged source code:

The company used the SRS on the object code they were
running. In addition, they compiled the suspect source
code and used the SRS on that set. By comparing the
two source code result sets they figured out which
programs had been sabotaged.

Why not simply compare the binaries ?  Unix has a
small program called: cmp that can compare two files
and Windows has comp.
You can tell which ones have been changed that way. 

There are several challenges with binary comparison of object code.
Different releases of a compiler may generate slightly different object
code. The code will execute properly, but the differences foil the
comparison. Here are some of the most frequent differences encountered:
1) The way the UV compiler allocates temporary registers has changed many
times over the releases. 
2) The way the UV compiler issues NOP instructions to maintain alignment has
changed from release to release.
3) Newer op-codes may be used by later compilers.
4) The flavor of the account, the $OPTIONS that are set, or the compiler
command line options may cause the use of different op-codes.
5) The path to the original source code, stored in the object code may be
different and cause the comparison to fail otherwise identical object code.

I have been developing a program that analyzes all of the source code,
object code and cataloged programs on a system, trying to determine if any
of the object code or cataloged programs are missing their source code. For
the reasons listed above, this is not a trivial exercise. If any end-users
are interested in being an alpha site come February 2006, drop me a note
off-list.

You can also know when the files were last compiled by
looking at the dates with ls -al on the binary.  

That works as long as the files have not been touched.

Still I think the decompiler can be a useful tool. 
I've worked with a client who purchased a package some
years back and they only have the binaries.  If the
supplier ever goes out of business they are in
trouble.

We provide the source recovery service to help end-users when their
application supplier is unable, for whatever reason. Some of our customers
are actually application suppliers. They bring us in when they are unable to
help the client. They work with us to help the customer become whole or
self-sufficient.

Best regards,
Gyle
www.srs4uv.com
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Deciphering Pick UniBasic statement

2005-12-10 Thread Gyle Iverson
Hello, Charles.

Charles Stevenson wrote...
I have not had occasion to use the srs4uv.com decompiler service.
Probably worth the price when you really need it.

It can be. Just imagine programs with hundreds of lines of code like
Caleb's. It could take days to unravel the code by hand versus the few
minutes needed to send it out to www.srs4uv.com.

I am thankful for the wonderful www.srs4uv.com freebie download,
SRS.UV.HEADER, that allows access to info about the object file from an
I-descriptor subroutine.

Thank you for the comments. I am glad to hear you like it.

Best regards,
Gyle

P.S. I corrected the web address and the program name.
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Deciphering Pick UniBasic statement

2005-12-09 Thread Gyle Iverson
Hello, Charles.

Charles Stevenson wrote...
Everyone's going to jump in with the answer, but here's a way to figure
it out yourself (on UV, but not UD): Use VLIST.

I don't know which is more painful, the original code or the VLIST output.
;-) I decompiled Caleb's code using the srs4uv.com decompiler and got the
following result in under a second. A few customers use the SRS recovery
service for just this reason.

IF P(2) - AR(12) = 28 THEN
   CC += 1
   INS 0 BEFORE AR(14)1, 1
   DEL AR(14)1, 9
END ELSE
   IF AR(13) = DATE() THEN
  CC = CC
   END ELSE
  INS 1 BEFORE AR(14)1, 1
  DEL AR(14)1, 9
   END
END 

Best regards,
Gyle
www.srs4uv.com
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] PI/UV: Decompiler

2005-08-18 Thread Gyle Iverson
AD
When you need to recover the BASIC source code for PI/open or UniVerse
systems, your ultimate source is found at www.srs4uv.com. The srs4uv team
has helped companies, government agencies and learning institutions around
the globe with their source recoveries for over 22 years. Many srs4uv
customers tried IBM's PI/open decompiler beforehand and seem amazed at how
easy the recovered programs are to read and maintain.
/AD

While the PI/open decompiler provided by IBM was a technically accurate
utility, the maintainability of their recovered source code leaves much to
be desired. IBM's decompiler failed to perform logical structure recovery,
the most important quality, as this impacts the long-term maintainability of
the programs. (There are other deficiencies with IBM's decompiler, such as,
maintainable common member naming, reversing equated variable expressions,
and recovering programs with certain internal-use statements. Please contact
me directly for additional information on these PI/open recovery issues.)

The logical structure for LOOP-REPEAT, FOR-NEXT and CASE statements, like
IF-THEN-ELSE statements, are translated by a BASIC compiler into conditional
and unconditional branch instructions. IBM's PI/open decompiler took the
lazy-mans approach to decompiling, returning conditional branches as IF-THEN
statements and unconditional branches as GOTO statements. As you might
imagine, IBM's results look like a pile of spaghetti code. The srs4uv
decompilers analyze the branch patterns to recover all of the high-level
logical structures, making the recovered source code look as good, if not
better, than the original source code.

Best regards,
Gyle
mailto:[EMAIL PROTECTED]
www.srs4uv.com
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] I'm in an Array quandry, any suggestions...

2005-05-17 Thread Gyle Iverson
Will Johnson postulated:

This would imply that not only would the run-time engine have 
to maintain a pointer to the last cell referenced, but also 
it would have to maintain a register telling it the cell 
number of this cell (not just its offset).  So it needs two 
variables.  I've never heard that it actually uses two 
variables to accomplish this.

Yes, Will. There are two variables. The descriptor definition found in
$UVHOME/gcidir/include/DATUM.h states:

struct  Dstring
{   /* This are my comments. GI */ 
   STRING  str; /* This is the entire dynamic array. */ 
   int lastfield;   /* This is the last field accessed. */ 
   uchar   *lastfptr;   /* This is a pointer into str.text */
/* where the last field field accessed */
/* begins. */ 
};

Best regards,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] I'm in an Array quandry, any suggestions...

2005-05-15 Thread Gyle Iverson
Charles Stevenson says:
[snipped a bunch of good stuff]
If you have a program that manipulates many attributes many times, then
it makes sense to matread them into a dimensioned array up front, and
matwrite them in the end, thereby limiting big string manipulations.
People forget or newbies don't know that CUST.REC117 is really
EXTRACT( CUST.REC, 117,0,0) or REPLACE(...,CUST.REC,117,0,0).  That can
be very expensive when you do that for many attributes many times, with
large dynamic arrays.   By contrast, each dimensioned array element has
its own memory address, so references and assignments can jump straight
to it.

Good point! Large dynamic arrays take longer to perform insertions,
deletions and replacements. Why? The whole record must be copied to a new
memory location with the changes. With dimensioned arrays, only the affected
element is manipulated. Another related and fundamental difference exists
between the two array types that should not be overlooked. 

The dynamic array can only store string data. Numeric values convert to a
string before being stored in a dynamic array. Subsequent extraction of that
just-stored data returns as a string and converts back to numeric as
necessary. However, each dimensioned array element has its own unique memory
descriptor (variable). A dynamic array element may store any type of data
(though only string or numeric is appropriate for records). By using
dimensioned arrays, numeric values are stored in the array without
conversion. The conversion from numeric to string occurs only once, at the
point when writing the record. Using dimensioned arrays can improve
throughput when repeatedly performing mathematical operations on record
elements. 

Best regards,
Gyle

P.S. I designed the URMA run machine to treat dynamic arrays as though they
were dimensioned arrays internally, providing direct access any field, value
or sub-value. Accessing record1000, 1000, 1000 is nearly as fast as
accessing record1, 1, 1. I believe Robert Colquhoun took a similar
approach with MaVerick too. Do not expect U2 to do anything like this
anytime soon. The descriptor management foundation needs to support this
concept and is not easily retrofitted.
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Dymanic vs Dimensioned

2005-05-15 Thread Gyle Iverson
Charles Stevenson goes on:
[snipping the bit about tolerance]

Do you know why dimensioned arrays were first limited to only 1 or 2
dimensions in Pick or Info-Basic?

There was probably some concern about memory consumption way back when MD
and Pick ran with only 64KB of core. I think it was just simpler for the
designers to set a low limit. It looks like the subsequent designers never
anticipated adding more dimensions, rather they focused on backward
compatibility (which in this case has multiple interpretations).

Would it be a terrible complication to the compiler to allow as many
dimensions as the programmer needs?

There are two complications: modifying the compiler and modifying the run
machine. Modifying any of the compilers to support additional dimensionality
would be easy. Modifying the existing op-code structures, descriptors, and
run machines are likely a huge challenge these days. This type of
extensibility needs to be thought of in the early development stages.

Best regards,
Gyle

P.S. I designed URMA with support for 2^31 dimensions. Yeah, I know, after
about 9 dimensions, you probably run out of memory today. Who knows, maybe
terabytes of memory will be cheap tomorrow. The motto was, do not limit the
design to today's technology.
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] [UV] Release 3.2 of the SRS_UV_HEADER program now available

2005-04-18 Thread Gyle Iverson
Hello, Tony.

The SRS.UV.HEADER program is nearly public domain. Anyone can do anything
they want with the source code. All I ask is that they distribute the source
code and keep the attributions. A license is not required where conscience
will suffice.

Best regards,
Gyle

Tony Gravagno says:
Might be good to post SRS4UV to mvdevcentral.com as an offical 
open source
project for discussion, bug/feature tracking, and of course community
download and maintenance.  You can select from many open 
source licenses
that reflects your intent and the rights/obligations of those 
who use the
code.

Gyle Iverson wrote:
 Hundreds of U2UG members downloaded prior releases of the
 SRS_UV_HEADER program source code. We recently updated
 the program based on feedback we received from several
 members. Release 3.2 of the SRS_UV_HEADER program is
 available at http://www.srs4uv.com/srs_uv_header.htm. 
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


[U2] [UV] Release 3.2 of the SRS_UV_HEADER program now available

2005-04-15 Thread Gyle Iverson
Hundreds of U2UG members downloaded prior releases of the SRS_UV_HEADER
program source code. We recently updated the program based on feedback we
received from several members. Release 3.2 of the SRS_UV_HEADER program is
available at http://www.srs4uv.com/srs_uv_header.htm.
 
What does the SRS_UV_HEADER program do? It lets you use the SELECT verb with
files containing compiled UniVerse BASIC programs, including the catalog
directory. The program is useful when trying to find the location of the
source code for the object code, or when trying to find programs that use a
particular named common area. There are dozens of useful pieces of
information the program returns. After you download the source, look at the
program's source code to see other hidden information it returns.
 
Enjoy,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] [UV] Resize problems

2005-01-28 Thread Gyle Iverson
Hello, Clif.

Try OH.exe from Microsoft at
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/oh-o.asp
. 

OH is great at answering the question, Who or what has this file open?.

Best regards,
Gyle
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Un-compiler/Un-Basic UniVerse Basic Code

2004-12-06 Thread Gyle Iverson
Hello, Clif.

Thank you for pointing the folks to me. I appreciate it.

Best regards,
Gyle

-Original Message-
From: [EMAIL PROTECTED] 
[mailto:[EMAIL PROTECTED] On Behalf Of Clifton Oliver
Sent: Sunday, December 05, 2004 8:13 PM
To: [EMAIL PROTECTED]
Subject: Re: [U2] Un-compiler/Un-Basic UniVerse Basic Code


For Unidata, try Lee Leitner at

http://www.infocus50.com/products/xtrico.html.

For UniVerse, try Gyle Iverson at

http://home.socal.rr.com/srs4uv/

For IT Goverance procedures so they don't lose source code, try me at

http://www.oliver.com

wink


-- 

Regards,

Clif
---
u2-users mailing list
[EMAIL PROTECTED]
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] UniBasic DeBug - Text After END [Message too long (40000 chars)]

2004-10-07 Thread Gyle Iverson
Brutzman, Bill wrote
In trying to smash two separate [working] programs together 
into a single
program [attached], I obtain the pesky UniBasic complier 
error...Text found
after END.

Have you tried using the FORMAT or FANCY.FORMAT commands on your program?
The reformatted indentation of the statements should make it visible where
the logical structure is amiss.

Gyle
---
u2-users mailing list
[EMAIL PROTECTED]
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Program Object arguments

2004-09-02 Thread Gyle Iverson
From: Adrian Matthews
Don't know of a way to do it real-time as such. 

IBM provides the EXIST subroutine in the APP.PROGS directory for such. 

Best regards,
Gyle
---
u2-users mailing list
[EMAIL PROTECTED]
To unsubscribe please visit http://listserver.u2ug.org/


[U2] CC'ing to the list

2004-05-05 Thread Gyle Iverson
The list is not handling posts with cc addresses properly.

I have seen LeRoy's posting seven times. The last five were sent to
[EMAIL PROTECTED] and cc'd to
[EMAIL PROTECTED] and [EMAIL PROTECTED]

I have seen Sara's posting three times. The first one was sent to
'[EMAIL PROTECTED]' and cc'd to [EMAIL PROTECTED] The
other two were sent to [EMAIL PROTECTED] and cc'd to
[EMAIL PROTECTED] 

Best regards,
Gyle
 

-Original Message-
From: [EMAIL PROTECTED] 
[mailto:[EMAIL PROTECTED] On Behalf Of Dave Walker
Sent: Wednesday, May 05, 2004 3:24 AM
To: [EMAIL PROTECTED]
Subject: [U2] Multiple receipts of latest messages


Anyone else receiving multiple copies of the latest messages? I've 
received Sara Burn's reply three times, and Leroy Dreyfuss has hit my 
mailbox 6 times with his reply about windows directory 
permissions being 
reset.

Just wondering.
-- 
Dave Walker
 ..7 ))  -::-
   -::-.7 .7))
  ((.7  ..7  -::-
 ((.7   * Peace
---
u2-users mailing list
[EMAIL PROTECTED]
http://www.u2ug.org/listinfo/u2-users
---
u2-users mailing list
[EMAIL PROTECTED]
http://www.u2ug.org/listinfo/u2-users