Re: [U2] Left Outer Join Question

2014-03-05 Thread Keith Johnson [DATACOM]
I wrote a paragraph called ML to use MERGE.LIST on saved lists - much easier 
than assembling the lists manually.


PA
* ML type list1 list2 list3
* I2,TYPE
IF TYPE = U THEN GO THERE
IF TYPE = D THEN GO THERE
IF TYPE = I THEN GO THERE
DISPLAY
DISPLAY Command Format is
DISPLAY ML type list1 list2 list3
DISPLAY
DISPLAY Where type is 'U'nion or 'D'ifference or 'I'ntersection
DISPLAY
DISPLAY and where list1 and list2 exist on SAVEDLISTS.
DISPLAY The result will be stored as list3.
DISPLAY
GO FINISH
*
THERE:
IF I3,LIST1 = '' THEN GO FINISH
IF I4,LIST2 = '' THEN GO FINISH
IF I5,LIST3 = '' THEN GO FINISH
GET.LIST LIST1 TO 1
GET.LIST LIST2 TO 2
*
IF TYPE = U THEN GO UNION
IF TYPE = D THEN GO DIFFERENCE
IF TYPE = I THEN GO INTERSECTION
*
UNION:
MERGE.LIST 1 UNION 2 TO 3
SAVE.LIST LIST3 FROM 3
DISPLAY UNION
GO FINISH
*
DIFFERENCE:
MERGE.LIST 1 DIFFERENCE 2 TO 3
SAVE.LIST LIST3 FROM 3
DISPLAY DIFFERENCE
GO FINISH
*
INTERSECTION:
MERGE.LIST 1 INTERSECTION 2 TO 3
SAVE.LIST LIST3 FROM 3
DISPLAY INTERSECTION
GO FINISH
*
FINISH:
CLEARPROMPTS

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


Re: [U2] [UV] Programmatic Verification of Globally Cataloged Subroutine

2014-01-28 Thread Keith Johnson [DATACOM]
Hi,

LeRoy Dreyfuss said that you would have to change 52 to 12 for EXIST to work.

The globally cataloged programs have an extra 40 characters put on the front, 
so that would cause a problem.

@RECORD[1,4] is a count of the number of times the program has been used.

@RECORD[5,8] is who cataloged it

@RECORD[13,4] are the date and time (I think)


Regards, Keith



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


Re: [U2] What is true

2013-07-31 Thread Keith Johnson [DATACOM]
Hi Wil,

That indeed was my code - ten years old now!

I think I read the same article as Kevin. I don't use it in my day to day 
programming (which is in Universe and QM, thus using @TRUE and @FALSE) but I 
think I still would use it for Pickwiki. Just a style thing - de gustibus non 
disputandum est, after all.

Hi Tony,

'Twas a teensy bug under an unusual circumstance... Hey, wait a minute, you're 
the one who complained that no-one updated other people's code! You wouldn't be 
trying to yank Will's chain, would you?


Regards, Keith


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


Re: [U2] 'DBTA 100: The Companies That Matter Most in Data'

2013-06-05 Thread Keith Johnson [DATACOM]
DBTA has always been sympathetic to the MV market.

I note not only Rocket but also Entrinsik, Kore, Mpower1, Pickcloud, Revelation 
in the list

Regards, Keith

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


Re: [U2] Dumping data to file from TCL

2013-02-24 Thread Keith Johnson [DATACOM]
Hi Phil,

If it's just a matter of turning a two-step process into one step, would a 
Paragraph be reasonable? Just thinking of something along the lines of...


PA
IF I2,File = '' THEN GO ENDIT
IF I3,IType = '' THEN GO ENDIT
IF I4,ExportDirectory = '' THEN GO ENDIT
IF I5,Datadump.dat = '' THEN GO ENDIT
SELECT I2,File SAVING I3,IType
LIST I2,File TO I4,ExportDirectory I5,Datadump.dat REQUIRE.SELECT
ENDIT:


Regards, Keith

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


Re: [U2] CSV to Array

2012-08-20 Thread Keith Johnson [DATACOM]
No-one seems to have done it, but here's my version of the code.

It's strange, I don't have a problem with CONTINUE and I don't even mind
IF SOMETHING ELSE THIS = THAT
which a lot of people really hate, but I just HAD to reverse the IF/CASE 
statement order.

SUBROUTINE REXY(RECORD,TEXT)
*
 HERE = 0
 QUOTED = @FALSE
 RECORD = ''
 LOOP
HERE += 1
C = TEXT[HERE,1]
 UNTIL C EQ ''
BEGIN CASE
   CASE QUOTED AND TEXT[HERE,2] EQ ''
  HERE += 1
   CASE C EQ ''
  QUOTED = NOT(QUOTED)
  C = ''
   CASE C EQ ',' AND NOT QUOTED
  C = @FM
END CASE
RECORD := C
 REPEAT
 RETURN
  END

Regards, Keith

PS: Remember Messrs Stout and Chapman - Simplicate and add more lightness

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


Re: [U2] trimming a list (a test of your ability)

2012-07-16 Thread Keith Johnson [DATACOM]
Universe gives a slight lead to -1 too.

Also, it compiles Y = Y:CHAR(254):I and Y := CHAR(254):I to exactly the same 
thing.  I checked with VLIST and even edited the compiled code to be sure.

ALSO (and this surprised me) it doesn't support ROUNDS *= 2

The documenation (Universe BASIC 2-25) only shows plus-equal minus-equal and 
concatenate-equal so I suppose that must be correct. I'm still a little 
shell-shocked, though.

Regards, Keith


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


Re: [U2] Is there any way to tell if I am in an EXECUTE level and CAPTURING is turned on?

2012-07-03 Thread Keith Johnson [DATACOM]
I just noticed this in the help for QM's SYSTEM()

1000 Returns 1 if EXECUTE CAPTURING is in effect, 0 otherwise

Checked if this was an undocumented feature that Martin had reproduced; but no, 
it doesn't work in Universe.

Regards, Keith



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


[U2] Exiting UniData

2012-07-03 Thread Keith Johnson [DATACOM]
Hi John,

I'm on an SB+ site on Universe which is completely unrelated to Epicor. Our 
QUIT is an exact copy of SH.OFF, which is a local catalogue pointer to the 
program code.

I believe SH.OFF tidies up various SB+ stuff and then chains to OFF, and that 
this is the standard behaviour of SB+

Regards, Keith

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


Re: [U2] RESIZE - dynamic files

2012-07-03 Thread Keith Johnson [DATACOM]
Doug may have had a key bounce in his input

 Let's do the math:

 258687736 (Record Size)
 192283300 (Key Size)
 

The key size is actually 19283300 in Chris' figures

Regarding 68,063 being less than the current modulus of 82,850.  I think the 
answer may lie in the splitting process.

As I understand it, the first time a split occurs group 1 is split and its 
contents are split between new group 1 and new group 2. All the other groups 
effectively get 1 added to their number. The next split is group 3 (which was 
2) into 3 and 4 and so forth. A pointer is kept to say where the next split 
will take place and also to help sort out how to adjust the algorithm to 
identify which group matches a given key.

Based on this, if you started with 1000 groups, by the time you have split the 
500th time you will have 1500 groups.  The first 1000 will be relatively empty, 
the last 500 will probably be overflowed, but not terribly badly.  By the time 
you get to the 1000th split, you will have 2000 groups and they will, one 
hopes, be quite reasonably spread with very little overflow.

So I expect the average access times would drift up and down in a cycle.  The 
cycle time would get longer as the file gets bigger but the worst time would be 
roughly the the same each cycle.

Given the power of two introduced into the algorithm by the before/after the 
split thing, I wonder if there is such a need to start off with a prime?

Regards, Keith

PS I'm getting a bit Tony^H^H^H^Hverbose nowadays.

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


Re: [U2] Is there any way to tell if I am in an EXECUTE level and CAPTURING is turned on?

2012-06-27 Thread Keith Johnson [DATACOM]
Hi Doug,

Another way to skin the cat-

Check the @LEVEL in the error display program and if it's not 1 use a timed 
input.
Unidata has INPUT WAITING, while for Universe, there is a program do do the 
same at
http://www.pickwiki.com/cgi-bin/wiki.pl?InputWait

Perhaps do the timed input anyway with different times depending on the level?

Regards, Keith



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


Re: [U2] Proc question

2012-05-08 Thread Keith Johnson [DATACOM]
Hi Kebbon,

I don't like Procs, but

* Set the primary input buffer as active
SP
* Activate the primary output buffer
STOFF
* Alternatively, clear both output buffers and make the primary the active one
RO
* Set the input buffer pointer to the first (or whatever) parameter
S1
* Move a substring in the that parameter from the active input buffer to the 
end of the active output buffer with no surround character
A\(4,5)


Regards, Keith

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


Re: [U2] READU vs READ

2012-05-01 Thread Keith Johnson [DATACOM]
If the multivalues have many many values, and you are adding to the end, then a 
speed up may be possible.

MATREAD in the data, RAISE those array elements you are changing.  Before the 
MATWRITE, LOWER all array elements you raised.

As I understand it, Universe keeps internal track on attributes, so processing 
these in ascending order is a LOT faster than it used to be.  However this is 
not done for multivalues (space considerations?).

Regards, Keith


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


Re: [U2] The CONTINUE statement

2012-04-29 Thread Keith Johnson [DATACOM]
Just to be annoyingly pedantic - the second code snippet is missing an END


FOR I = 1 TO X
   do something
   IF some condition THEN CONTINUE
   do something else
NEXT I

Versus

FOR I = 1 TO X
   do something
   IF NOT(some condition) THEN
  do something else
NEXT I




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


Re: [U2] The RETURN TO statement was the CONTINUE statement

2012-04-29 Thread Keith Johnson [DATACOM]
Hi Wil,

They can't do that because then their line editor would break - It has 58 
occurances of RETURN TO


Message: 27
Date: Fri, 27 Apr 2012 08:38:05 -0400 (EDT)
From: Wjhonson wjhon...@aol.com
To: u2-users@listserver.u2ug.org
Subject: Re: [U2] The RETURN TO statement was the CONTINUE statement
Message-ID: 8cef289ba33f8cc-bd4-7...@webmail-m082.sysops.aol.com
Content-Type: text/plain; charset=us-ascii


 Perhaps we could start a petition to get Rocket to state in their 
 documentation
The RETURN TO statement is deprecated and will be forbidden in release 12


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


Re: [U2] RETURN TO (again)

2012-04-29 Thread Keith Johnson [DATACOM]
I never used it in anger, but I was rather drawn to the Presley-friendly form

SENDER: RETURN TO SENDER

I actually used the following progam a long time ago, but only to test that 
EQU...LIT... workedhow I thought it did.

Try it - Press T a few times then X and watch it unwind the call stack.


001:  EQU ABANDON LIT 'RETURN TO SENDER'
002:  CRT 'START OF PROGRAM'
003:  GOSUB TEST
004:  CRT 'RETURN FROM TEST'
005:  STOP
006: SENDER:
007:  CRT 'NOW AT SENDER'
008:  ABANDON
009:  CRT 'END OF SENDER'
010:  STOP
011: TEST:
012:  LOOP
013: CRT 'AT TEST ':
014: INPUT BACK,1
015: BACK = UPCASE(BACK)
016: IF BACK EQ 'T' THEN GOSUB TEST
017: IF BACK EQ 'X' THEN ABANDON
018:  WHILE BACK DO
019: CRT 'STILL IN TEST'
020:  REPEAT
021:  CRT 'END OF TEST'
022:  RETURN

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


Re: [U2] Case Statement with only two cases... or for that matter... one case

2012-04-25 Thread Keith Johnson [DATACOM]
Hi Will,

As I said, I don't use it myself, but a reason one might use
it is that one can easily cut and paste (or include) logic.

For example:
---
LOCKED
  put
  some
  generic
  logic
  here
END
---

regards, Keith


   WJohnson wrote:

   Why the extra lines?  Why not just
   IF A = TEST THEN
  gosub do.something
   END ELSE
  gosub do.something.else
   END

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


Re: [U2] EXIT ; EXIT inside a loop

2012-04-23 Thread Keith Johnson [DATACOM]
I think the UNTIL should be in behind NEXT A2, rather than on the FOR line.

Hoping to lighten the day...

   BAIL = 0
   FOR A1 = 1 TO XYZZY
  FOR A2 = 1 TO Y
 little twisted logic
 IF G # H THEN BAIL = 51 ;* error code
  UNTIL BAIL DO
 twisted little logic
  NEXT A2
   UNTIL BAIL DO
   twisting little logic
NEXT A1
   IF BAIL THEN DISPLAY 'Housten, we have a problem in Area ':BAIL

Or use a GOSUB - RETURN does a fair job of being readable.

Regards, Keith


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


Re: [U2] Case Statement with only two cases... or for that matter... one case

2012-04-23 Thread Keith Johnson [DATACOM]
I prefer the layout of

IF A = TEST
   THEN GOSUB DO.SOMETHING  ;* Say why
   ELSE GOSUB DO.SOMETHING.ELSE ;* The reason

However, here is a form that's rarely used, but does work.

IF A = TEST
THEN ;* say why in a long-winded manner
   GOSUB DO.SOMETHING
END
ELSE ;* the reasoning behind the reason
   GOSUB DO.SOMETHING.ELSE
END

I don't use it myself, but it's very amenable to cut and paste programming.

Regards, Keith

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


Re: [U2] Detecting idle time in INPUT statement.

2012-03-27 Thread Keith Johnson [DATACOM]
If anyone DOES want the equivalent of Unidata's INPUT... WAITING for Universe...

http://www.pickwiki.com/cgi-bin/wiki.pl?InputWait

Regards, Keith

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


Re: [U2] Code style ? or code silliness ?

2012-03-25 Thread Keith Johnson [DATACOM]
The examples as given were not equivalent.

THE.READ = STR('0',DIALS-LEN(THE.READ)):THE.READ

versus

THE.JUST = R#:LEN(THE.READ); THE.READ = THE.READ THE.JUST

Apart from the % to # change, the second example ignores DIALS and justifies 
within the length of THE.READ

I assume the second one ought to have been

THE.JUST = R%:DIALS; THE.READ = THE.READ THE.JUST


As the R%n form doesn't always work in Unidata

$DEFINE UNIDATA
|
.
|
* Special subtlety for Unidata not supporting 'R%3' form
$IFDEF UNIDATA
 PFX = ''; SFX = '\0R'
$ELSE
 PFX = 'R%'; SFX = ''
$ENDIF
|
.
|
THE.READ = FMT(THE.READ,PFX:DIALS:SFX)




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


Re: [U2] Building an Excel File

2012-02-08 Thread Keith Johnson [DATACOM]
I'm curious; was the university in Florida Barry University?

Someone I worked with years ago went there as a Pick programmer.


The following code might be helpful


 subroutine ucsv(result,source,status,is.oconv)
*
* Public Domain program for OpenQM by Keith Johnson 2012
*
*  OCONV Converts from attribute and value marks to .CSV format
*Attribute marks are converted to CR:LF
*  ICONV Converts from .CSV to delimited form
*If there are no CR:LF sequences, it uses LF
*If there are no LF characters, it uses attribute marks
*
* Usage: To convert ABC to a .CSV format, use code like
*
*NEWABC = OCONV(ABC,'UUCSV')
*
*
 result = ''
 status = 0
 crlf = char(13):char(10)
 test = index(source,crlf,1)
*
 begin case
*
* this is OK
case source = ''
   null
*
* OCONV not OK if there are already CR:LF sequences
case is.oconv and test
   status = 1
*
* The normal case when generating .CSV data
case is.oconv
   atts = dcount(source,@am)
   for attr = 1 to atts
  line = sourceattr
CRT 'line = ':line
  vals = dcount(line,@vm)
  part = ''
  for valu = 1 to vals
 bite = line1,valu
 if part ne '' then part := ','
 good = @true
 if index(bite,'',1) then good = @false
 if index(bite,' ',1) then good = @false
 if index(bite,',',1) then good = @false
 if index(bite,char(10),1) then good = @false
 if index(bite,char(13),1) then good = @false
 if not(good) then
bite = change(bite,'','')
bite = '':bite:''
 end
 part := bite
  next valu
CRT 'part = ':part
  if result eq ''
 then result = part
 else result := crlf:part
   next attr
*
* Cannot have both of these in ICONV file - the rows will change
case index(source,@am,1) and index(source,char(10),1)
   status = 2
*
* converting from standard .CSV file
case test
   flag = @false
   mine = change(source,crlf,@am)
   atts = dcount(mine,@am)
   for attr = 1 to atts
  line = mineattr
  span = len(line)
  part = ''
  for posn = 1 to span
 that = line[posn,2]
 this = that[1,1]
 begin case
case that eq '' and flag
   part :=  ''
   posn += 1
case this eq ''
   flag = not(flag)
case this eq ',' and not(flag)
   part := @vm
case 1
   part := this
 end case
  next posn
  result-1 = part
   next attr
*
* converting from LF only (or possibly @am) row delimited file
case 1
   mark = char(10)
   if not(index(source,mark,1)) then
  mark = @am
  if not(index(source,mark,1)) then
 status = 3
 return
  end
   end
*
   flag = @false
   atts = dcount(source,mark)
   part = ''
   for attr = 1 to atts
  line = field(source,mark,attr)
  span = len(line)
  for posn = 1 to span
 that = line[posn,2]
 this = that[1,1]
 begin case
case that eq '' and flag
   part :=  ''
   posn += 1
case this eq '' and flag
   flag = @false
case this eq ',' and not(flag)
   part := @vm
case 1
   part := this
 end case
  next posn
*
* It is possible to have a linefeed within a field
  if not(flag) then
 result-1 = part:char(10)
 part = ''
  end else
*
* But not an attribute mark when it is the delimiter
* Assume they forgot the last double quote and be nice
 if mark eq @am then
result-1 = part
part = ''
flag = @false
 end
  end
   next attr
 end case
*
 return

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


Re: [U2] End of Month date routine

2011-12-06 Thread Keith Johnson [DATACOM]
Mr Castro's code wins. Pure elegance.


Marco Antonio Rojas Castro - initials M.A.R.C.

My uncle's name is Roy Owen Young - I tease him it's so he can remember it.

Regards, Keith




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


Re: [U2] End of Month date routine

2011-12-05 Thread Keith Johnson [DATACOM]
Dave Laansma took a more generic approach which does not require
knowledge of the date format - hence I thought it preferable.

My style would move the addition and subtraction around as below
I assumed one would want the last day of the month for any called date
otherwise uncomment line 2

SUBROUTINE GET.EOM(IDAY)
*IDAY = DATE()
THIS = OCONV(IDAY,'DM')
LOOP
  IDAY += 1
UNTIL OCONV(IDAY,'DM') NE THIS REPEAT
IDAY -= 1
RETURN


Code snippets are fun - copyright not so much.

Regards, Keith


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


Re: [U2] Changing TCL prompt?

2011-10-05 Thread Keith Johnson [DATACOM]
This program works for Universe on a UNIX machine giving three commands

PATH FULL   would give aprompt like /usr/ibm/uv

PATHwould give a prompt like   uv

PATH CLEAR would give a prompt like   


 PROGRAM PATH

***  Sets or clears the account or path in the TCL prompt
***  so a TCL user doesn't forget where they are.
***
*** MODS:
*** =
*** Seq   DateWho  Reference  Description
*** --- - --- -- ---
*** 001 27 Feb 07 KRJ CC440  Written
***

 SENTENCE = UPCASE(@SENTENCE)
 THIS = '' ; THAT = 1
 BEGIN CASE
CASE INDEX(SENTENCE,'CLEAR',1) ; THAT = 0
CASE INDEX(SENTENCE,'FULL',1)  ; THIS = @PATH:''
CASE 1 ; THIS = FIELD(@PATH,'/',DCOUNT(@PATH,'/')):''
 END CASE
 IF THIS NE '' THEN
THIS2 = THIS1:''
THIS3 = '+'
 END
 ASSIGN THIS TO SYSTEM(4002)
 ASSIGN THAT TO SYSTEM(4001)

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


Re: [U2] Simple Masking of Password Input (Universe Basic)

2011-08-16 Thread Keith Johnson [DATACOM]
It's not all that simple, but try


http://www.pickwiki.com/cgi-bin/wiki.pl?FieldInput

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


Re: [U2] UniBasic SELECT

2011-07-31 Thread Keith Johnson [DATACOM]
The problem may be in the use of program variables in the executed code.

Using Universe, if I have code:

VERB = 'SELECT VOC LIKE A...'
EXECUTE VERB
CRT @SELECTED
CLEARSELECT

I get the result

237 record(s) selected to SELECT list #0.
237

If I change the filename to something that doesn't exit, like VVOC

VERB = 'SELECT vVOC LIKE A...'
EXECUTE VERB
CRT @SELECTED
CLEARSELECT

I get the result

SQL+

Where I have to press Return to get past this and then get

UniVerse/SQL: syntax error.  Unexpected verb.  Token was SELECT.
Scanned command was SELECT
-1

Is F.ICC the name of the file in VOC or only internal to the program?


Regards, Keith.



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


[U2] LED editor for Universe

2011-05-05 Thread Keith Johnson [DATACOM]
The latest version I use has a copy at 
https://sites.google.com/site/nzpickie/home/programs

It has a BLEACH command to turn colour on and off - named after Brian Leach who 
let me steal his method!
The colour options are based on HostAccess - other terminals have different 
methods.
Modifying this is left as an exercise for the reader -)

Keith

PS  -) is not a smiley, it is a tongue in the cheek.

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


Re: [U2] Is this worth rewriting?

2011-03-03 Thread Keith Johnson [DATACOM]
I liked Brian's

IF (TEA : EAT : ATE) # '' THEN CUM(M) = TEA + EAT + ATE

It looks neater in VLIST - don't know if it's faster. multi_cat might be a 
beast

2: IF (TEA : EAT : ATE) # '' THEN X = TEA + EAT + ATE
2 00012 : 104 multi_cat  TEA EAT ATE  = $R0
2 0001E : 106 ne $R0   = $R1
2 00026 : 2DE testfw $R1 00040:
2 00030 : 004 addTEA EAT  = $R2
2 00038 : 004 add$R2 ATE  = X


3: IF TEA # '' OR EAT # '' OR ATE # '' THEN X = TEA + EAT + ATE
3 00040 : 106 ne TEA   = $R1
3 00048 : 106 ne EAT   = $R2
3 00050 : 122 or $R1 $R2  = $R3
3 00058 : 106 ne ATE   = $R4
3 00060 : 122 or $R3 $R4  = $R5
3 00068 : 2DE testfw $R5 00080:
3 00070 : 004 addTEA EAT  = $R6
3 00078 : 004 add$R6 ATE  = X


Sorry Chris, it's not exactly the same if you do

IF TEA+EAT+ATE  '' THEN CUM(M) = TEA+EAT+ATE

'cause that's always true.

I had to check the original code a few times because I kept thinking What the 
hey? Surely that's always true?  But it weren't.

Regards, Keith

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


Re: [U2] Is this worth rewriting?

2011-03-03 Thread Keith Johnson [DATACOM]
Lots of things I didn't think of... My last try

001: MONTHLY.USAGE:
002: CM = MONTH + LY.CNT
003: TEA = RAISE(PARMS(12)101)
004: EAT = RAISE(PARMS(12)133)
005: ATE = RAISE(PARMS(12)134)
006: YAM = RAISE(PARMS(7)100)
007: AMY = RAISE(PARMS(7)101)
008: MYA = RAISE(PARMS(7)102)
009: FOR M = 1 TO 12
010:   A = TEACM ; B = EATCM ; C = ATECM
011:   IF A:B:C NE '' THEN CUM(M) = A+B+C
012:   X = YAMCM ; Y = AMYCM ; Z = MYACM
013:   IF X:Y:Z NE ''THEN
014: IF X EQ '' THEN CUMO(M) += A ELSE CUMO(M) += X
015: IF Y EQ '' THEN CUMO(M) += B ELSE CUMO(M) += Y
016: IF Z EQ '' THEN CUMO(M) += C ELSE CUMO(M) += Z
017:   END
018:   CM -= 1 ; IF CM = 0 THEN CM = 24
019: NEXT M
020: RETURN

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


Re: [U2] Is this worth rewriting?

2011-03-02 Thread Keith Johnson [DATACOM]
Agreed that the dimensioned extract wouldn't make much difference, still the 
attributes numbers are quite high.

The code below goes from 15 extracts maximum per for-next loop to 6.
I can't help but think this might mean something if it takes 90 minutes to run.

001: MONTHLY.USAGE:
002: CM = MONTH + LY.CNT
003: FOR M = 1 TO 12
004:   TEA = PARMS(12)101,CM
005:   EAT = PARMS(12)133,CM
006:   ATE = PARMS(12)134,CM
007:   IF TEA # '' OR EAT # '' OR ATE # '' THEN CUM(M) = TEA + EAT + ATE
008:   YAM = PARMS(7)100,CM
009:   AMY = PARMS(7)101,CM
010:   MYA = PARMS(7)102,CM
011:   IF YAM # '' OR AMY # '' OR MYA # '' THEN
012: IF YAM # '' THEN CUMO(M) += YAM ELSE CUMO(M) += TEA
013: IF AMY # '' THEN CUMO(M) += AMY ELSE CUMO(M) += EAT
014: IF MYA # '' THEN CUMO(M) += MYA ELSE CUMO(M) += ATE
015:   END
016:   CM -= 1 ; IF CM = 0 THEN CM = 24
017: NEXT M
018: RETURN


So I'd say AYE - or YEA, if you use meaningful variables

Regards, Keith

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


Re: [U2] [UV] UniVerse Uptime

2011-02-17 Thread Keith Johnson [DATACOM]
We stop and start the Universe database and do a UNIX backup, so either

ps -e -o etime -o  comm | grep uvdlockd

Or

ps -e -o etime -o  comm | grep unirpcd


Seem to be reasonable ways of seeing how long it's been up

Regards, Keith



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


RE: [U2] UV Timed INPUT

2009-03-15 Thread Keith Johnson [DATACOM]
David Norman asked for a timed input for Universe.  There is a program
to replicate the Unidata timed input at
http://www.pickwiki.com/cgi-bin/wiki.pl?InputWait
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


Re: [U2] DO/WHILE vs IF THEN

2009-03-02 Thread Keith Johnson [DATACOM]
Mark Johnson suggested the following change

Before
GOOD.ANS=FALSE
LOOP UNTIL GOOD.ANS DO
   PRINT ENTER 'Y' OR 'N' :;INPUT ANS
   IF ANS=Y OR ANS=N THEN GOOD.ANS=TRUE REPEAT

after
LOOP WHILE TRUE DO
   PRINT ENTER 'Y' OR 'N' :;INPUT ANS
   IF ANS=Y OR ANS=N THEN EXIT
REPEAT

These forms all work (Universe 10.2.0)  and are progressively shorter
than the above

LOOP
   PRINT ENTER 'Y' OR 'N' :;INPUT ANS
   IF ANS=Y OR ANS=N THEN EXIT
REPEAT


LOOP
   PRINT ENTER 'Y' OR 'N' :;INPUT ANS
UNTIL ANS=Y OR ANS=N DO
REPEAT


LOOP
   PRINT ENTER 'Y' OR 'N' :;INPUT ANS
UNTIL ANS=Y OR ANS=N REPEAT


LOOP PRINT ENTER 'Y' OR 'N' :;INPUT ANS
UNTIL ANS=Y OR ANS=N REPEAT


Ray Wurlod was a great proponent of the LOOP WHILE READNEXT ID format.
I believe it may not compile on some MV systems.


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


RE: [U2] Normal SELECT behavior? [UD]

2008-11-05 Thread Keith Johnson [DATACOM]
LIST POH F1 WITH F1 = 000700

will do a numeric comparison if it can.  You can force a string
comparison by using

LIST POH F1 WITH F1 LIKE '000700'

That is; double quote, single quote, zero, zero, zero, seven, zero,
zero, single quote, double quote.

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


RE: [U2] UniData PROC tip: DB command

2008-08-04 Thread Keith Johnson (DSLWN)
Baker Hughes wrote

The man (person) who writes a PROC interpreter/conversion utility that
can take a PROC and turn it into either Basic, or a PAragraph, will have
a product to sell...


I tried really really really hard to do this a few years ago.   The code
got more and more complicated until I threw in the towel.  Then I
realised that it was easier to write a PROC interpreter in BASIC, and
that I could re-use the code I had, but that it would be much, much
simpler and clearer.  Although I never finished it, Martin Phillips took
it on from there and did the hard work so that QM had a PROC
interpreter.  We all know what grinding out that last 20% is like!  I
was as pleased as punch that I could contribute something to QM because
it's such a good product, and the support has always been exceptional.

The code (at the stage I got it to) is the programs  RUNPROC and
CALLPROC in  http://www.geocities.com/pickfalla/programs.html.  If you
have an _extremely_ wet week end (our last few have been atrocious) it
might be something to look at.

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


RE: [U2] CAPTURING TOXML

2008-07-28 Thread Keith Johnson (DSLWN)
Following on from Mike Henderson's post...

Maybe the best idea is to use GETXMLSUB itself as your subroutine call.
It handles the case where the XMLExecute function returns a fail status,
but a subsequent XMLGetError function doesn't have an error code by
assigning a new error code of 80120 and an errmsg of query/sql syntax
error.

It has 6 arguments documented in the code as follows -

006: * argument count 6
007: *
008: * input 1 CMD the LIST/SELECT command used to generate xml
doc
009: * input 2 options: any dynamic array like string to store
options for the TOXML
010: * command
011: * output 3 XMLSTR, result xml document
012: * output 4 XSDSTR, result xsd schema
013: * output 5 RTNCODE.
014: * output errmsg if RTNCODE  0

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


[U2] unsubscribe u2-users

2008-06-25 Thread Keith Johnson
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


Re: [U2] execute code/proc question HELP!!!!!!!!

2008-05-26 Thread Keith Johnson (DSLWN)
Assume one has PROGRAM in USUAL.BP.

Write NEW.PROGRAM in DOUGS.BP with this at the beginning.

  001 SUBROUTINE PROGRAM(V1,V2,V3...)
  002 *
  003 IF @LOGNAME NE DOUG THEN
  004CALL ORIG.PROGRAM(V1,V2,V3...)
  005RETURN
  006 END
  007 * continue with the new program

At TCL do these commands

  CATALOG USUAL.BP ORIG.PROGRAM PROGRAM
  CATALOG DOUGS.BP PROGRAM NEW.PROGRAM

The calling program(s) need no changes and when testing is finished,
copy the new version of PROGRAM to USUAL.BP, delete lines 3-6 above,
then compile and catalog it.

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


RE: [U2] Universe XML is not to standard

2008-05-11 Thread Keith Johnson (DSLWN)
Michael Rajkowski wrote

First, capturing the XML to a hold file is not the way to get
an XML file.

Someone really ought to put this into the documentation!  Retrieve
manual page 6-17 specifically states

Note: UniVerse does not store the XML document unless you
execute the COMO ON statement prior to executing the RetrieVe statement.
If you execute COMO ON, the XML document is stored in the COMO file.
You can also direct the output to the HOLD file using SETPTR, or the
printer using LPTR.

XMLEXECUTE does what I want, true; but why doesn't the recommended,
documented, simple-to-implement method work properly too?
Then there's the UTF-8 vs iso8859-1 issue that Stuart Boydell identified
- another *gotcha* waiting for us.
Just tidy things up... there's no benefit to IBM in acting like
stRaining Data.
Regards, Keith (I really should turn the grumpy_old_%^$_mode off)
Johnson
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


Re: [U2] [UV] Scared to recompile

2008-05-11 Thread Keith Johnson (DSLWN)
Using VLIST to compare old and new programs is a good idea.

You're probably OK on 10.1, but if you want to do this in future, be
aware that VLIST may crash on UV 10.2 when used on older programs.  If
this happens, change the 8th character from 000 to 016.  VLIST may then
work, although the code and object probably will get out of synch.

Another option is to strip off the header on both strings - I think 80
characters may be enough.

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


[U2] Universe XML is not to standard

2008-05-07 Thread Keith Johnson (DSLWN)
The software I am supporting has a user screen which builds and saves
enquiry statements (English/Access/Recall).  I recently created another
screen to allow users to use the defined statement/report  to output XML
to the HOLD file and to transfer the results to their PC.  All well
and good, but then I found that Excel wouldn't pick up the results
properly.  The reason for this is that the XML output is not quite to
the standard.  For example, the command

LIST VOC 'VOC' F1 F2 TOXML

gives the result
--


?xml version=1.0 encoding=UTF-8?
ROOT
VOC _ID = VOC F1 = F F2 = VOC/
/ROOT
--

While the command

LIST VOC 'VOC' F1 F2 TOXML HEADING WAHOO 'D'

gives the result
--
WAHOO 08 May 2008

?xml version=1.0 encoding=UTF-8?
ROOT
VOC _ID = VOC F1 = F F2 = VOC/
/ROOT
--

It's not absolutely clear from the W3C standard itself, but it is very
clear from the examples given with it; that the output must start with
the string ?xml .  That is to say, although line feeds and spaces are
effectively ignored within XML, they are not catered for before the
?xml  string.  And while the traditional Pick 'thing' is to
make-it-work-if-possible, Excel follows the (arguably more standard)
convention of holy-heck-that's-not-right-do-nothing


What I had to put in place was an extra bit of code to read in the
output, delete any lines before the ?xml  string, and re-write the
output (which, by the way, I'm unsure will work for very, very, very
large reports).  That's not at all satisfactory in my opinion.   I think
that the header lines should have been dropped completely, or put in
after the ?xml  string as a comment something like this:

--
?xml version=1.0 encoding=UTF-8?
-- report heading follows
WAHOO 08 May 2008

--
ROOT
VOC _ID = VOC F1 = F F2 = VOC/
/ROOT
--

Does anyone else agree with me?  Ought IBM change this?  What do you
think?


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


RE: [U2] blank lines in code / mixed case

2008-03-11 Thread Keith Johnson (DSLWN)
On Mon, 10 Mar 2008, Jerry Banker wrote...

 If you ever want a scare then go through the programs in the Universe
BP
 file. Some are upper case program lines with mixed case comments and
 prompts, the way I prefer it, some are all lower case, some are mixed
 case, and some are a mixture of all types. In the latter it appears
that
 whomever was programming at the time picked their preferred case. So
it
 appears not only we mere mortals have a problem deciding what standard
 to use.

If you REALLY want a scare go and look in Universe BP at RETURN TO
usage.

In PHELP it even mixes case use!
 (return to end.program and return to RETRY.SORT.BOX)

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


RE:[U2] Change Prompt

2008-02-17 Thread Keith Johnson (DSLWN)
In Universe, the following program (called PATH) will do this.

To use it,  just put PATH in the LOGIN command.
PATH CLEAR puts things back to how they were.
PATH FULL gives the full path name at the input prompt.

== PATH program v
SENTENCE = UPCASE(@SENTENCE)
THIS = '' ; THAT = 1
BEGIN CASE
   CASE INDEX(SENTENCE,'CLEAR',1) ; THAT = 0
   CASE INDEX(SENTENCE,'FULL',1)  ; THIS = @PATH:''
   CASE 1 ; THIS = FIELD(@PATH,'/',DCOUNT(@PATH,'/')):''
END CASE
IF THIS NE '' THEN
   THIS2 = THIS1:''
   THIS3 = '+'
END
ASSIGN THIS TO SYSTEM(4002)
ASSIGN THAT TO SYSTEM(4001)
== PATH program ^

This version is for a UNIX system, you may have to change the '/' to '\'
on Windows

SYSTEM(91) = 0 on UNIX
SYSTEM(91) = 1 on Windows


Regards, Keith

P.S. A great benefit of this is that you can then edit the command stack
using the arrow keys.
   You have to use backspace to delete, though.
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


[U2] CSV output

2008-02-12 Thread Keith Johnson (DSLWN)
These might be useful.  To save typing, I decided to use Q for QUOTE, C
for COMMA and T for TAB.  And since I thought it likely that I would use
QUOTE COMMA QUOTE (or Q C Q) a lot, I also set up D (for DELIMITER) as
below.  Also q and d which use double quotes.

Top of D in VOC, 20 lines, 108 characters.
001: I
002: ','
003:
004: ','
005: 3L
006: S

I should point out that it's been my practice to remove the Q and P
commands because otherwise I stumble over them.  Usually just after a
big session in the editor, when my mind is in that problem-focused state
where it takes a while to realise just what the heck happened.

Maybe it's something in our setup, but I have ITEM.ID in DICT.DICT and
get an 'ITEM.ID not found' error if I try and use it in a query.
There is the same error if I try and use D/CODE (which is in DICT.PICK)
in a query.  Quite apart from that, on our system these files are
read-only; so what I do is put the items in DICT VOC, compile them by
using them in a query, and then copy them to VOC so they are available
for every file.

It's not really worth anything - speed of machines these days, etc. etc.
- but using CHAR(9) results in slightly longer compiled code.  I really
do need to get a life, don't I?

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


RE: [U2] Deep and long indentations vs multiple exit points

2007-12-02 Thread Keith Johnson (DSLWN)
Dave Barret gave this code as an example:

GOSUB OPERATION.1
IF (NOT(ERROR)) THEN
  GOSUB OPERATION.2
  IF (NOT(ERROR)) THEN
GOSUB OPERATION.3
IF (NOT(ERROR)) THEN
  GOSUB OPEARTION.4
END
  END
END

What about this version?

GOSUB OPERATION.1
IF ERROR ELSE GOSUB OPERATION.2
IF ERROR ELSE GOSUB OPERATION.4
IF ERROR ELSE GOSUB OPERATION.5

or, more acceptably:

GOSUB OPERATION.1
IF GOOD THEN GOSUB OPERATION.2
IF GOOD THEN GOSUB OPERATION.4
IF GOOD THEN GOSUB OPERATION.5

Which I personally find far more readable than the indented code.

Regards, Keith De gustibus non est disputandum Johnson
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


Re: [U2] [UV] Can I get some advice on triggers?

2007-11-28 Thread Keith Johnson (DSLWN)
A big Thank You to everyone for the information.

In the end it was straightforward, but I stumbled on a couple of the
steps.  Maybe this will help others

Firstly, I wanted the code to be locally, not globally, cataloged.  Our
CATALOG verb has PICK.FORMAT rather than INFORMATION.FORMAT on line
6, so it took me a little while to realise I needed a new CATALOGI verb.

Secondly (and this is the bit where _knowing_ the system manual is wrong
helped)  the actual command line I wanted was

CREATE TRIGGER ADDRESS.TRIGGER BEFORE INSERT OR UPDATE ON PERSON FOR
EACH ROW CALLING ADDRTRIGGER;

I eventually put in two VOC items, CTRIG for the above, and DTRIG which
is

DROP TRIGGER PERSON ADDRESS.TRIGGER;


The code is simplicity itself

008: * See if the address and post code are the same
009:  SAME = @TRUE
010:  IF NEWREC5 NE OLDREC5 THEN SAME = @FALSE
011:  IF NEWREC8 NE OLDREC8 THEN SAME = @FALSE
012:  IF SAME THEN RETURN
013:
014: * Update the date on the file
015:  NEWREC34 = DATE()
016:
017:  RETURN


The idea is to pass only changed addresses out to a third party at
intervals to get checked.

Thanks again for the help,

Regards, Keith.

PS.  I thought the FROM in COPY FROM file ... was a pain, but the
requirement to put FOR EACH ROW CALLING?  Even if they plan to extend
the command usage in the future, couldn't they make the wild assumption
that, if we don't say *anything* restricting the rows, we actually mean
FOR EACH ROW?  From the people who gave us OVERWRITING, I guess.
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Good Practice?

2007-11-27 Thread Keith Johnson (DSLWN)
Thanks for putting up the right link, Thomas.  (dammit, I must measure
BEFORE cutting...  measure BEFORE cutting... hit self)


To answer Ed's questions,

1. nap 5 sleeps for 5 milliseconds. It may not be necessary, so you
could comment it out and see how that goes.  If you do get comm. delay
that causes a problem and don't have nap, try a time-wasting loop - not
a sleep command.  I tried sleep years ago and it is frustrating.  A
nap of up to 100 milliseconds is almost unnoticeable in practice.

2. KEYIN() on Universe seems to be exactly the same as IN() on UniData.


Regards, Keith

PS Here's a silly program showing NAP

001: Crt Bang!:
002: For I = 10 To  @CrtWide-20
003:   Crt '.':
004:   Nap 10
005: Next
006: Crt Ouch!
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Good Practice?

2007-11-26 Thread Keith Johnson (DSLWN)
Hi Mark,

Just a couple of points.

First, the value of F200.SCHEME.CODE of CK *cannot* trigger a false
positive.

  TEST = '\AF1\CK1\CK2\H\LHC\MP\NU1\NU2\TK1\TK2\'
  IF INDEX(TEST,'\':F200.SCHEME.CODE:'\',1) THEN THAT = @FALSE

is fairly bulletproof because of the backslashes around both the string
and the substring.

Second, I wasn't concerned about LOCATE adding a cycle or two.  It's
just that one has to provide the SETTING variable which is then ignored.
INDEX involves a string, a substring, and a start count - there's
virtually nothing redundant.  Using LOCATE involves a string, a
substring, the position found as well as (possibly) a start position and
a search sequence; so it can be regarded as a more complex function.
Also, one can choose from three forms of LOCATE - Pick, Ideal/Reality,
or Information.  Then, to avoid the long setup string, one has to use
CONVERT (or SWAP or CHANGE).

Regards, Keith

PS Good surname - mine's Norwegian in origin... great grandad jumped
ship in Auckland.
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] Good Practice?

2007-11-26 Thread Keith Johnson (DSLWN)
Craig Bennett pointerd out that
   TEST = '\AF1\CK1\CK2\H\LHC\MP\NU1\NU2\TK1\TK2\'
   IF INDEX(TEST,'\':F200.SCHEME.CODE:'\',1) THEN THAT = @FALSE
*can* generate a false positive if F200.SCHEME.CODE contains an embedded
slash.  In this case it can't, because the F200.SCHEME.CODE is validated
on entry against a list of codes (whew!)  The super long string I
started with is from a program to decide whether or not to show
something on a printout.
I suppose I could quibble and say it is actually a true positive...  but
no, Craig got me proper.  My bad.

However, this brings up a good practice thing to note.  The seperator
must not be 'enterable'.  So that makes INPUT a bad idea.  If you want
to try out an alternative, I just put
http://www.pickwiki.com/cgi-bin/wiki.pl?action=editid=GetKey up on the
wiki.  My problem was that the Asus eeePC does not seem to be a proper
xterm, so I reproduced most of the functionality of QM's keycode()
input.

===
Looking back, I feel I may have defended the INDEX function more than I
wanted.  My own code generally looks like this

ENDWORDS = 'IF\OPEN\OPENSEQ\READNEXT\READ\READU\READV\READVU\'
ENDWORDS = ENDWORDS:'MATREAD\MATREADU\LOCATE'
CONVERT '\' TO AM IN ENDWORDS

and I use the classic form

 LOCATE(WORD,ENDWORDS;POSN) THEN

Regards, Keith

PS: The extra line is solely to prevent wrapping on an eighty-column
terminal.  I value my concept of readability above efficiency.
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


[U2] [UV] Can I get some advice on triggers?

2007-11-26 Thread Keith Johnson (DSLWN)
Hi,

I'm hoping someone can give me some help on triggers.  I want to put a
trigger on a file to datestamp address changes.

The system manual (25119270.pdf) says that triggers aer set up by the
command

CREATE TRIGGER trigger.name [BEFORE|AFTER|UPDATE]


But when I try that I get an SQL prompt.  We don't use SQL at all - is
there some way of setting up triggers without it?  Is there another
manual I should look at?


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


[U2] Good Practice?

2007-11-25 Thread Keith Johnson (DSLWN)
Here's an example of how I rewrote some code.

Old version
284: * IF F200.SCHEME.CODE = CK1 OR F200.SCHEME.CODE = CK2
OR F200.SCHEME.CODE = NU1 OR F200.SCHEME.CODE = NU2 OR
F200.SCHEME.CODE = TK1 OR F200.SCHEME.CODE = TK2 OR F200.SCHEME.CODE
= GS1 OR F200.SCHEME.CODE = JM OR F200.SCHEME.CODE = MP3 OR
F200.SCHEME.CODE = LHC OR F200.CALC.CODE = H OR F500.S91.ANNUITY.SEQ
+ 0 = 2 OR F500.S48.ANNUITY.SEQ + 0 = 2 OR F200.SCHEME.CODE = AF1 OR
F200.SCHEME.CODE = MP THEN; *002
285:  IF F200.SCHEME.CODE = CK1 OR F200.SCHEME.CODE = CK2 OR
F200.SCHEME.CODE = NU1 OR F200.SCHEME.CODE = NU2 OR F200.SCHEME.CODE
= TK1 OR F200.SCHEME.CODE = TK2 OR F200.SCHEME.CODE = LHC OR
F200.CALC.CODE = H OR F500.S91.ANNUITY.SEQ + 0 = 2 OR
F500.S48.ANNUITY.SEQ + 0 = 2 OR F200.SCHEME.CODE = MP OR
F200.SCHEME.CODE = AF1 THEN ; *002*003

New version
261:  THAT = @TRUE
262: *TEST = '\AF1\CK1\CK2\GS1\H\JM\LHC\MP\MP3\NU1\NU2\TK1\TK2\'
263:  TEST = '\AF1\CK1\CK2\H\LHC\MP\NU1\NU2\TK1\TK2\'
264:  IF INDEX(TEST,'\':F200.SCHEME.CODE:'\',1) THEN THAT =
@FALSE
265:
266:  IF F500.S91.ANNUITY.SEQ + 0 GE 2 THEN THAT = @FALSE
267:  IF F500.S48.ANNUITY.SEQ + 0 GE 2 THEN THAT = @FALSE

I think the new version is easier to maintain (well I would say that),
but the code itself is more complex; which is rather interesting.


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


[U2] RE: (U2) Dictionary Help

2007-11-25 Thread Keith Johnson (DSLWN)
Al DeWitt had a need for a utility to search the dictionaries.

I had to write one a little while ago -  to look for SB+ stuff, as it
happens.

 PROGRAM FIND.DICT
* This program searches the data dictionary section
* of every file in the VOC for a string
 CRT 'INPUT STRING ':
 INPUT THAT
 IF THAT = '' THEN STOP
 OPEN 'VOC' TO VOC ELSE STOP 201,'VOC'
 EXECUTE 'SSELECT VOC WITH TYPE EQ F'
 IDLIST = ''
 LOOP WHILE READNEXT ID DO
IDLIST-1 = ID
 REPEAT
 XXNO = DCOUNT(IDLIST,@AM)
 FOR XX = 1 TO XXNO
ID = IDLISTXX
OPEN 'DICT',ID TO TEST ELSE CONTINUE
SELECT TEST
LOOP WHILE READNEXT DID DO
   READ REC FROM TEST,DID ELSE CONTINUE
   IF INDEX(REC,THAT,1) THEN CRT ID,DID
REPEAT
 NEXT XX

Might be useful, but I know if you could say it was efficient...

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


[U2] Good Practice?

2007-11-25 Thread Keith Johnson (DSLWN)
Neil suggested using LOCATE rather than INDEX in my example.

I'm not sure I agree that would be any less complex as far as the code
is concerned.  INDEX and LOCATE are both 'complex' compared with the IF
statement, and since LOCATE needs its SETTING variable, it's arguably
the more complex statement.  There are three different forms of LOCATE,
so that can cause problems. Lastly, the variable TEST has to be set up
with attribute marks either by multiple lines or by the very long line
below; which, I have to say, I don't find very readable at all.

TEST =
'AF1':@AM:'CK1':@AM:'CK2':@AM:'GS1':@AM:'H':@AM:'JM':@AM:'LHC':@AM:'MP':
@AM:'MP3':@AM:'NU1':@AM:'NU2':@AM:'TK1':@AM:'TK2'

There may be a slight speed benefit in restricting the scan by using
'AL'; but this is not material (or possibly even detectable?) in strings
of this length.  There is also an ongoing  maintenance risk because the
next programmer might not notice the codes were sorted, and may just add
a new one to the end of the string.
Regards, Keith.
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE:[U2] UD - SYSTEM(14)

2007-11-05 Thread Keith Johnson (DSLWN)
Hi Bill,

There is a vague memory at the back of my mind that SYSTEM(14) could be
problematical.  Would it work in your circumstance to change the last
line to use the INPUT ..., -1 mechanism?  EG

* UNTIL NOT(SYSTEM(14)) DO REPEAT   ; **
UD version
   INPUT ANYTHING.THERE,-1
WHILE ANYTHING.THERE DO REPEAT


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


Re: [U2] [UV] Conversion code for week number

2007-07-15 Thread Keith Johnson (DSLWN)
Wol wrote

INT (DAY / 365.25)

will always give the correct number of years since day 0.

The following shows that is not strictly true because of the centennial
non-leap year.

Test Program
001:  ZZ = 0
002:  FOR XX = 1 TO 5
003: Y1 = 1968 + INT((XX-1)/365.25)
004: Y2 = OCONV(XX,'DY')
005: IF Y1 NE Y2 THEN
006:ZZ += 1
007:CRT ZZ,XX,OCONV(XX,'D')
008: END
009:  NEXT XX


Results
1 48579 01 JAN 2101
2 48944 01 JAN 2102
3 49309 01 JAN 2103
4 49674 01 JAN 2104

I vaguely remember a comment a long time ago (maybe in c.d.p?) that the
date was chosen _because_ it was a leap year that started on a Sunday
and that this helped in converting dates from other IBM formats for the
GIRLS/GIM project.

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


RE: [U2] Copying from AIX box to Linux box

2007-07-13 Thread Keith Johnson
If push comes to shove network them directly and forget the security...
:)
(I am assuming they are both in the same room)

Otherwise I would say an NFS mount and rsync is your best bet.  

PS I have had issue in the past with an old AIX system that kept
dropping its NIC to half duplex.  This made data transfers a bear.  Have
you looked for things like this?

-Keith Johnson
LCSC

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Adrian Merrall
Sent: Thursday, July 12, 2007 5:28 PM
To: u2-users@listserver.u2ug.org
Subject: Re: [U2] Copying from AIX box to Linux box

On 7/13/07, Jon Wells [EMAIL PROTECTED] wrote:

 Hi all,

 We are trying to copy Unidata accounts from our AIX box to our Linux
 box.  We do not have a common tape drive we can use which would seem
 the ideal way to copy large amounts of stuff.  We decided to try
 using scp (SSH version of cp) and managed to get some small
 accounts copied over and working.  It is a very slow process
 :-(   While trying to use scp on an account with larger files (not
 huge mind you), the process will stall and then it is
 disconnected.  Does anyone know what would cause scp to stall like
 that?  It does not seem to use up a lot of resources on either box.

 Any suggestions on what else would work in both a secure and,
 preferably, a faster manor?


John,

Apart from NFS mounts, rsync is your new best friend here (assuming you
have
it on the aix box - a quick google shows it is available.)

I would do something like

rsync -vaze ssh localdir remotehost:/remotedir

Where v = verbose, a=archive mode (preserve directory structure, dates,
times, perms etc.), z= compress/decompress on the fly and e ssh is the
transport mechanism.

Test it on a small directory first as trailing slashes on the local
directory has an effect on what you copy.

Rsync will only copy differences so if you get 1/2 way through a
directory
and kill it, it will restart where it left off, or pick up any changes
to
files already copied in the meantine.  If you kill it 1/2 way through an
individual file it will restart that whole file though.

When moving files around multiple machines it is one of those can't live
without tools.

If you need to share the machine or network, you can also use the
--bwlimit
flag to reduce the net copy speed so you don't impede on other users.

Not sure if this will help your stall problem though - if that is an ssh
problem you will see the same issue.  Possibly using -v on scp to see
the
debug messages?

HTH

Adrian
---
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] [BB] U2 Enhancement Request - WRITE

2007-05-28 Thread Keith Johnson (DSLWN)
It's always annoyed me that WRITE permissions were not handled better.
Even under R83, one could set up a file with a user able to read, but
not write to it (file definition attributes 5 and 6, I think?).  If a
WRITE was encountered and the permission was not correct, the program
would just crash horribly.  As an application programmer who tried to
put out solid, error-free code, this really ticked me off.  Any program
I wrote that updated a file could be made to crash by a change to an
external definition.  GAAHHH!!!  This is probably the reason why Pick's
read/write security mechanism never seemed to be used, even though it
was very flexible.

From my point of view, I want one of the following (although I wouldn't
turn my nose up at both) -

1.  The write fails nicely and I can catch it in code.

2.  I have a REALLY easy way of finding out if the write will fail
before I even try the write.

Fiddling about with the STATUS and then trying to figure out if this
user is owner, or in the group, or whatever is VERY trying.  Especially
since a user can be in more than one group (On this UNIX box, anyway).

It seems to me this should have been addressed years ago - wasn't the
Spectrum Manfacturers' thing a waste of space?  IBM, holding 2 big cards
at the multivalue game, ought to be taking a lead on this, but they'll
probably leave it to Martin

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


[U2] [UV] VLIST failure - some detail of another program

2007-05-23 Thread Keith Johnson (DSLWN)
I don't know if there's any interest in this, but I have found a very
short program where the old compiled version causes a problem with
VLIST.  Here are the details

The old compiler version was 9.3.1.2, the new one 10.2.0.0

001: $OPTIONS -F  L   ;*WR631
002: *
003: *** TITLE: Time conversion routine.
004: *
005: * Written by Wilfred D'Mello, 02-August-1993
006: *
007:   PRINT
008:   PRINT Time conversion routine.  Press RETURN to
return to TCL
009:   PRINT You may enter time in 24 hour format eg:
18:30:26 
010:   PRINT  OR 
011:   PRINT In 12 hour format with AM/PM appended eg:
6:30:26PM
012:   PRINT
013:   LOOP
014:  PRINT Enter Time to convert :
015:  INPUT ITIME
016:   UNTIL ITIME = '' DO
017:  ITIME = OCONV(ITIME,MTS)
018:  ITIME = ICONV(ITIME,MTS)
019:  PRINT @(40):ICONV()=:ITIME:
020:  PRINT @(60):OCONV()=:OCONV(ITIME,MTS)
021:  PRINT
022:   REPEAT
023:END

When I used VLIST, the line numbering gets out of kilter at the LOOP -
all the source prints, then the if fell over like this

00023:END
00258 0001C : 12E print  Enter Time to convert 
00259 00022 : 0B9 input  0 16  = ITIME
00260 0002A : 10C nop
00260 0002C : 06E eq ITIME   = $R0
00260 00034 : 2E0 testtw $R0 00084:
00261 0003C : 112 oconv  ITIME MTS  = ITIME
00262 00044 : 0AC iconv  ITIME MTS  = ITIME
00263 0004C : 04A cursor 40 -1  = $R0
00263 00054 : 12E print  $R0 ICONV()= ITIME
00264 0005E : 04A cursor 60 -1  = $R0
00264 00066 : 112 oconv  ITIME MTS  = $R1
00264 0006E : 130 printcrlf  $R0 OCONV()= $R1
00265 00078 : 126 pcrlf
00266 0007A : 10C nop
00266 0007C : 0C2 jump   0:
00267 00084 : 01C calculate  Abnormal termination of
UniVerse.
Fault type is 11.  Layer type is Unknown.
Program /usr/ibm/uv/bin/vlist core dumped.  [SIGSEGV]
segmentation violation

Interestingly, I don't get the core dump if the source is missing - but
the last two lines don't make any sense to me.

00266 0007C : 0C2 jump   0:
00267 00084 : 01C calculate   [365]  =  [49]

The VLIST output from a newly compiled program ends like this

00022:   REPEAT
00022 0007A : 10C nop
00022 0007C : 0C2 jump   0001C:

00023:END
00023 00084 : 190 stop

So it looks like there's some problem with the way it works out the jump
address.  I compared the object code and the only changes are in the
header and a couple of extra char(0)s at the end of the program.  If the
logic is unchanged, why does the addressing go wrong?

OLD NEW
  3 147 162  --- EG old version has char(147) as third
character, new is char(162)
  4  18   0   Aha! DTX 147 = 93 18 = 12 - 9.3.1.2  DTX 162
= A2 0 = 0 - 10.2.0.0
  8   0  16
 29   0 255
 30   0   9
 31   0   8
 32   0 216
 51   0  42
 52   0  72
 73   0  70
 74   0  85
 75   0  18
 76   0  15
657 255   0   --- New one is two characters longer
658 255   0

I'm off until Monday morning, so I won't be able to give any further
details before then.  It's definitely a puzzle, and possibly a bug.

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


[U2] RE: (UV) - Is VLIST in version 10.2 fragile?

2007-05-21 Thread Keith Johnson (DSLWN)
Hi Leroy,

Thanks for your comments.

I figured it might be a problem with opcode changes.  My problem is that
I'm not certain that the source code we have is correct.  To
recapitulate -

*   We have old object in production.
*   We have no source code in production
*   We have source code in development.
*   The development object is different because it was compiled more
recently (and from a different directory)
*   Any given development source program is very unlikely to be the
same as production *sigh*.


This is the situation where one most wants VLIST to work!  I would have
preferred to just scan the VLIST output but I guess I'll just have to
work it out by code analysis.

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


[no subject]

2007-05-21 Thread Keith Johnson (DSLWN)
Leroy wrote
Are you able to copy the object from your live system to your dev
system to see if VLIST aborts there?
Because of the big upgrade in SB+ and the fact we were also upgrading
Universe, we upgraded the test system first to see what problems it
would bring.  Actually we built a temporary system on a loan machine
first, upgraded THAT, then upgraded the development/test machine, then
upgraded the production machine.
Thanks for the thought, though.
Regards, Keith
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


[U2] (UV) - Is VLIST in version 10.2 fragile?

2007-05-20 Thread Keith Johnson (DSLWN)
Hi there,

We have just upgraded both Universe and System Builder, going from UV
10.1.8 to 10.2.0 and from SB+ 3.4 to 5.4.

Because the SB+ common block changed slightly, I had to recompile all
programs that referenced it.  However, I have discovered that not all
the source code was on the production system.  I wanted to verify that
the development code was valid, but VLIST did not work properly.

When I try VLIST, it seems to get the testfw jump wrong on line 22 (or
24 in the development version).  From then on it gets stranger and
stranger until it falls over.  It looks like it gets out of step
somehow.

I realise it's not something anyone on the list can help with, but has
anyone else noticed VLIST is more fragile in UV version 10.2?

The development version of the source code and the VLIST from production
are below.  Don't bother criticising it - you can't be more scathing
than me because I've had more practise.

Regards (and thanks), Keith


001: $OPTIONS -F ;*WR631
002:   SUBROUTINE LWPINP.INTERVAL.SEQ
003:
**
004: * Description of subroutine
005: * Used for documentation purposes (including auto
documentation)
006:
**
007: *
008: $INCLUDE DMSKELCODE COMMON
009:   EQU AM TO CHAR(254), VM TO CHAR(253)
010: *
011: *PARAM(3) = 0
012:  ORIG.REC = 0
013:   INTERVAL.SEQ = WORK3
014:   LWOP.INTERVAL = 0
015:   LWOP.INTERVAL.FILE = ''
016:   OPEN.OK = @FALSE
017:   CALL PAN.FILE.HANDLE ('LWOP.INTERVAL', LWOP.INTERVAL,
LWOP.INTERVAL.FILE, OPEN.OK)
018:   IF NOT(OPEN.OK) THEN
019:  CALL SB.DISP (3, 'Can not open the file
LWOP.INTERVAL')
020:  RTN.FLAG = 1
021:   END
022:   FOUND = @TRUE
023:   BEGIN CASE
024:  CASE INTERVAL.SEQ = ''
025: KEY = WORK1: '|': WORK2: '|'
026: SEQ = 1
027: LOOP
028:READV DUMMY FROM LWOP.INTERVAL.FILE, KEY:
SEQ, 1 ELSE FOUND = @FALSE
029: WHILE FOUND DO
030:SEQ += 1
031: REPEAT
032: KEY = KEY: SEQ
033: WORK3 = SEQ
034: *   PARAM(3) = 1
035:  ORIG.REC = 1
036:  CASE INTERVAL.SEQ = 'L'
037: KEY = WORK1: '|': WORK2: '|'
038: SEQ = 1
039: LOOP
040:READV DUMMY FROM LWOP.INTERVAL.FILE, KEY:
SEQ, 1 ELSE FOUND= @FALSE
041: WHILE FOUND DO
042:SEQ += 1
043: REPEAT
044: KEY = KEY: SEQ - 1
045: WORK3 = SEQ - 1
046:  CASE 1
047: KEY = WORK1: '|': WORK2: '|': WORK3
048: READV DUMMY FROM LWOP.INTERVAL.FILE, KEY, 1
ELSE FOUND = @FALSE
049: IF NOT(FOUND) THEN
050:CALL SB.DISP (3, KEY: ' not on the LWOP
INTERVAL file')
051:RTN.FLAG = 1
052: END
053:   END CASE
054:
055:   RETURN



VLIST SFPROGS LWPINP.INTERVAL.SEQ
Subroutine SFPROGS.O/LWPINP.INTERVA/L.SEQ
Compiler Version: 8.3.3.1
Object Level: 5
Machine Type: 10
Local Variables : 12
Subroutine args : 0
Unnamed Common  : 0
Named Common Seg: 1
Object Size : 540
Source lines: 52
Object Date Time:
00011 0 : 060 dyn_extractWORK 3 0 0  = INTERVAL.SEQ
00012 C : 0F8 move   0  = LWOP.INTERVAL
00013 00012 : 0F8 move = LWOP.INTERVAL.FILE
00014 00018 : 0F8 move   0  = OPEN.OK
00015 0001E : 0F8 move   LWOP.INTERVAL  = _T
00015 00024 : 01E call   PAN.FILE.HANDLE _T LWOP.INTERVAL
LWOP.INTERVAL.FILE OPEN.OK
00020 0005C : 0F8 move   1  = FOUND
00022 00062 : 06E eq INTERVAL.SEQ   = $R0
00022 0006A : 2DE testfw $R0 0:
00023 00074 : 0F4 mmatstore   [97]  = WORK
00023 0007A : 018 braces 0 0  = $R0
00023 00082 : 060 dyn_extractWORK 2 0 0  = $R1
00023 0008E : 104 multi_cat  $R0 | $R1 |  = KEY
00024 0009C : 0F8 move   1  = SEQ
00026 000A2 : 03A concat KEY SEQ  = $R0
00026 000AA : 272 reapv  LWOP.INTERVAL.FILE $R0 1  = DUMMY
00026 000B4 : 0C8 jumpt  000BE:
00026 000BC : 0F8 move   0  = FOUND
00027 000C2 : 2DE testfw FOUND 0:
00028 000CC : 0D8 lockelse   OPEN.OK
00028 000D0 : 009 and1 SEQ  =  [195]
00029 000D8 : 000 abort
00029 000DA : 000 abort
00029 000DC : 0A0 ge  [59] KEY  = SEQ
00030 000E4 : 00D atan[101]  = WORK
00030 000EA : 010 bitand 0 0  = SEQ
00031 000F2 : 00E atinput

RE: [U2] 2 questions, one on STATUS and the other on STEAL-FILE

2007-05-13 Thread Keith Johnson \(DSLWN\)
Jeff Fitzgerald  wrote

 Could you give us an example of that -- I don't seem to be able to get
it to work:

I remember in the past being able to use the form SET.INDEX FAST.STATS
TO ./I_FAST.STATS.  However, now one has to use the key word
RELATIVE.PATH like this

  SET.INDEX FAST.STATS TO RELATIVE.PATH

The key word is within the program only - it is not in the VOC, and this
usage is undocumented. (!)  The program will prompt you to show what it
would use (./I_FAST.STATS) and ask if this is OK.


I really like the idea of using relative addressing for indexes, but I
do wish this was documented properly.  Using the word RELATIVE.PATH to
implement the capability is noted in the program header (line 17) as
being GTAR E7818 dated 05/08/05, but it appears the actual capability
was provided by E1752 of 07/12/03 (line 19).  As I say, I remember using
a relative path reference some time ago... possibly before 2001.


Regards, Keith

P.S. Can someone come up with a humorous acronym for the archetypal
nit-picking documentation-nagging grumpy old bug^H^H^Hprogrammer?  Just
wondering.
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


[U2] A couple of questions about the PE version

2007-05-13 Thread Keith Johnson \(DSLWN\)
As I recall, neither U2 console understands screen addressing - which
means you can't run most of the applications I've written from the
console. To my mind this means that someone can't just run U2 'out of
the box' and get a thing that works.  They will have to connect to a
terminal emulator or set up some interface.  Whatever that is, it may
have the potential to fail or to confuse.

I know it _is_ possible to have a console that allows screen addressing,
because the QM one does.  Does anyone know why the U2 console(s) cannot
do simple green screen applications?

What is  the easiest, simplest way to set up a terminal session with the
Personal Edition on a standalone PC?  I'd like to do it on my home one.

Regards, Keith

P.S. Decrepitude means I can only follow simple instructions that assume
neither knowledge nor sense.
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] 2 questions, one on STATUS and the other on STEAL-FILE

2007-05-08 Thread Keith Johnson \(DSLWN\)
Brian Leach wrote
snip
1. Before you take a copy of the file in Explorer, check whether it has
any indexes.

If a file has secondary indexing, UniVerse holds the absolute path to
the index in the file header. You must use SET.INDEX to either change or
remove that path on the history file, otherwise your history file will
update your live index .. not a smart move.


You can use the SET.INDEX command to make the path a relative one like
this

SET.INDEX FILENAME TO RELATIVE.PATH

Which is something I have only just discovered by inspecting the source
code for SET.INDEX - it's not in the user reference manual at all!

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


RE: [U2] 2 questions, one on STATUS and the other on STEAL-FILE

2007-05-08 Thread Keith Johnson \(DSLWN\)
Hi there,

There is a utility program at
http://www.pickwiki.com/cgi-bin/wiki.pl?FileStatus to show the file
STATUS stuff in a usable manner.  You may also be interested in FILEINFO
stuff which is at http://www.pickwiki.com/cgi-bin/wiki.pl?FileInfo

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


RE: [U2] Cron job creates many PH entries

2006-10-05 Thread Keith Johnson
Turnoff not off hand

How about a simple remove

find /path/ -name DUPCHECK_*_* -mtime +1 | xargs -I {} ls -l {}
find /path/ -name DUPCHECK_*_* -mtime +1 | xargs -I {} ls -l {}  
log...

find /path/ -name DUPCHECK_*_* -mtime +1 | xargs -I {} rm {}


drop it in your cron or in a script and have a crontab call it once a
day/ hour etc.

Keith Johnson  IT
Lewis-Clark State College (LCSC)
208 792 2510

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Scott Ballinger
Sent: Thursday, October 05, 2006 9:38 AM
To: u2-users@listserver.u2ug.org
Subject: [U2] Cron job creates many PH entries

Universe 10.1.4, pick flavor, Red Hat

I have a UV phantom cron job that runs every minute. It checks a
directory for any inbound files, processes them, then writes them to an
outbound directory. My problem is that the PH directory is filling up
with DUPCHECK_time_date files (1440 per day). Anyone know how to turn
off this feature?

Here is the cron job:

#!/bin/sh
TERM=ansi ; export TERM
cd /usr/yyy/XXX
/usr/ibm/uv/bin/uv PHANTOM DUPCHECK

DUPCHECK is a cataloged basic program in the XXX account.

Thanks,

/Scott Ballinger
Pareto Corporation
Edmonds WA USA
206 713 6006
---
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] Unidata and multi-core chips.

2006-06-19 Thread Keith Johnson
Andy,
I am not entirely sure on your first part of your question.  But I would
say no to the second.  UNIDATA is per seat use not per CPU.  At least in
the UNIX side of things.
-Keith


Keith Johnson  IT
Lewis-Clark State College (LCSC)
208 792 2510
-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Andy Squires
Sent: Thursday, October 06, 2005 8:59 AM
To: [EMAIL PROTECTED]; u2-users@listserver.u2ug.org
Subject: [U2] Unidata and multi-core chips.

We're about to move to Unidata 6.1.  Does anyone know if it can take
advantage of multi-core chips, and, if so, will the
licensing be different?



|   Andy Squires -- Systems Analyst
|
|   Office of Information Technology -- American University
|
|   (202) 885-2785
|
---
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] Unidata and multi-core chips.

2006-06-19 Thread Keith Johnson
Funny it just showed up to my box,,,  I swear
I did not see the date sorry for the late post  -KJ

Keith Johnson  IT
Lewis-Clark State College (LCSC)
208 792 2510
-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Roger Glenfield
Sent: Monday, June 19, 2006 1:22 PM
To: u2-users@listserver.u2ug.org
Subject: Re: [U2] Unidata and multi-core chips.

Did Keith just reply to an email from last October?  Or is the u2 
list/server having problems?

Rog

Keith Johnson wrote:
 Andy,
 I am not entirely sure on your first part of your question.  But I
would
 say no to the second.  UNIDATA is per seat use not per CPU.  At least
in
 the UNIX side of things.
 -Keith


 Keith Johnson  IT
 Lewis-Clark State College (LCSC)
 208 792 2510
 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED] On Behalf Of Andy Squires
 Sent: Thursday, October 06, 2005 8:59 AM
 To: [EMAIL PROTECTED]; u2-users@listserver.u2ug.org
 Subject: [U2] Unidata and multi-core chips.

 We're about to move to Unidata 6.1.  Does anyone know if it can take
 advantage of multi-core chips, and, if so, will the
 licensing be different?



 |   Andy Squires -- Systems Analyst
 |
 |   Office of Information Technology -- American University
 |
 |   (202) 885-2785
 |
 ---
 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/
---
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] making a .csv file into an .xls file?

2006-01-13 Thread Keith Johnson
Cedarville university has a program called DOWNLOAD that can do both
file types and others that works perfectly with UNIDATA...  (It has
never error-ed on me in 5 yrs.)
It is free for higher ED institutions.  I am not sure about the rest of
the world...  I bet it would work well for you.  It can make DB2 and all
kinds of file types...  

-Keith


-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of George Gallen
Sent: Friday, January 13, 2006 11:46 AM
To: u2-users@listserver.u2ug.org
Subject: [U2] making a .csv file into an .xls file?

Our UV system creates an ASCII .csv file for another
  system to import on a daily basis. The 3rd party software
  after a recent upgrade now only imports .xls files.

Is there an easy way to automate Excel to load the .csv,
  then save as .xls?

Or how much more difficult is it to create the .xls instead of
   a .csv?

I thought about getting one of those programs that records
mouse clicks, and create a macro of the conversion (since the
filename is the same each day), but wonder if there was
something we could do in a batch file and run every day under
the Windows scheduler.

George

George Gallen
Senior Programmer/Analyst
Accounting/Data Division
[EMAIL PROTECTED]
ph:856.848.1000 Ext 220

SLACK Incorporated - Delivering the best in health care information and
education worldwide.
http://www.slackinc.com
---
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] AIX UPGRADE

2005-11-10 Thread Keith Johnson
I do not think so; we were on that for a short time.  I usually load
only once a year for OS and UNIDATA.  We went from 5.2 to 5.3 for two
weeks then when to UNIDATA 6.14 or something like that.  Now 7.+ is
available for UNIDATA 
-Keith Johnson
Lewis-Clark State College
Lewiston, ID
208 792 2510

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Davis, Dawn
Sent: Thursday, November 10, 2005 7:58 AM
To: u2-users@listserver.u2ug.org
Subject: [U2] AIX UPGRADE

Does AIX 5.3 require an upgrade to Unidata 6.1?  - We are currently at
6.0+

TIA



Dawn Janel Davis

DBA II

[EMAIL PROTECTED]

410-386-8058



Carroll Community College

1601 Washington Road

Westminster, MD 21157
---
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] [UD] how to find records with a in the data

2005-10-27 Thread Keith Johnson
Please post; I would like this information too.
-Keith Johnson
LCSC.

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Kathy Tymoczko
Sent: Wednesday, October 26, 2005 2:09 PM
To: u2-users@listserver.u2ug.org
Subject: [U2] [UD] how to find records with a  in the data

We have a number of records with double-quote () characters in one of
the 
data fields.  We'd like to be able to select those records so we can fix
up 
the data.  Is there any way to find these records with a SELECT 
statement?  I've tried:

SELECT filename WITH fieldname LIKE '..'  which gives a missing 
quote error

and

SELECT filename WITH fieldname LIKE .. which returns all the
records 
in the file

ESEARCH does work, but we thought we should be able to do this somehow
with 
SELECT.



Kathy Tymoczko
Information Technology Services
Wabash College, Crawfordsville, Indiana 47933
[EMAIL PROTECTED] 765-361-6440 
---
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] Unidata and multi-core chips.

2005-10-24 Thread Keith Johnson
Hi all,
We are about to go to RFP for a new box.  How does this change the
dynamics if you use/or are looking at IBM's LPARS or virtual server
technology?  
-Keith Johnson
Lewis-Clark State College
500 8th Ave.
Lewiston, ID.  83501
208 792 2510


-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of David Wolverton
Sent: Thursday, October 06, 2005 9:59 AM
To: u2-users@listserver.u2ug.org; [EMAIL PROTECTED]
Subject: RE: [U2] Unidata and multi-core chips.

Go ahead and move to UniData 7.1 -- if you have not already installed
6.1,
just skip it entirely - I can't think of a downside...

To my knowledge, UniData is unaware of multi-anything... When you start
up,
in the case of a dual/quad-processor, my understanding is that process
is
'bound' to whatever CPU the OS kicked it off on... So, in theory, you do
get
some advantage of multiple processors, but the load is not dynamically
balanced based on usage. Therefore, if all your heavy users happen to
get
assigned to CPU1, then CPU2 will be vastly underutilized. But if they
sign
off and back on, and the load has not changed, it's likely their new
session
would be bound to CPU2, but that is the OS handling the event, not
UniData.

I don't think Multi-Core will be any different - it's a way to put more
than
one CPU on a single die...

But the brains on here from IBM will hopefully be able to correct me...

David 

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Andy Squires
Sent: Thursday, October 06, 2005 10:59 AM
To: [EMAIL PROTECTED]; u2-users@listserver.u2ug.org
Subject: [U2] Unidata and multi-core chips.

We're about to move to Unidata 6.1.  Does anyone know if it can take
advantage of multi-core chips, and, if so, will the licensing be
different?
---
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/


[U2] Screen addressing in UVPE console

2004-06-23 Thread Jan Shaw and Keith Johnson
I'm re-developing my field entry program and would like to test it in UVPE
on Windows NT.  However the console does not have screen addressing or clear
screen, etc.  Has anyone got a way of getting around this?

Regards, Keith Johnson

now ex-Owner/Host

www.emeraldglenlodge.co.nz
04 299 3066
---
u2-users mailing list
[EMAIL PROTECTED]
To unsubscribe please visit http://listserver.u2ug.org/


Re: [U2] [UV] WHILE READNEXT id DO

2004-06-21 Thread Jan Shaw and Keith Johnson
I like the syntax a lot, and even put the LOOP on the same line as the
UNTIL.  So Ray Wurlod's example I would have written as

LOOP WHILE READSEQ line FROM f
   GOSUB processline
REPEAT


I was surprised to see an assertion that this didn't work in Pick, as I
remember Henry Eggers was a particularly keen exponent of the usage - which
implies that Reality should support it.


Regards, Keith Johnson

Owner/Host

www.emeraldglenlodge.co.nz
04 299 3066
---
u2-users mailing list
[EMAIL PROTECTED]
To unsubscribe please visit http://listserver.u2ug.org/


RE: [U2] MV Fad

2004-05-05 Thread Keith Johnson
Hey can we stop this (flaming) BS; this is a waist of time to read;
sorry to add to the thread in such a nonproductive way.  

PS there is always two sides to every story. Yours, mine and the truth;
quote the lyric...

Keith Johnson
Systems AdministratorProgrammer / Analyst
Lewis-Clark State College (LCSC)   208.792.2510
500 8th Ave.
Lewiston, ID 83501

-Original Message-
From: Jeff Schasny [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, May 05, 2004 12:34 PM
To: [EMAIL PROTECTED]
Subject: RE: [U2] MV Fad

-Original Message-
From: Jeremy Adell [mailto:[EMAIL PROTECTED]

[snip]

To last at anything, you have to be realistic about your threats and 
weaknesses. Look at a legacy Oracle system with required database
standards

built in and compare it to a PICK db with no standards and 20 years of 
maintenance.
---
u2-users mailing list
[EMAIL PROTECTED]
http://www.u2ug.org/listinfo/u2-users


RE: [U2] PHANTOM forever

2004-05-03 Thread Keith Johnson
Title: RE: [U2] PHANTOM forever






Dana,

How about trying a cron job or looking in to your inittab man pages?

I personally have never wanted to make an infinite loop, however I have made my share on accident.

I am sure this type of logic will do the trick but it might just run away and spawn so many jobs that you have no resources or UNIDATA Lic for your users.

LOOP 

PHANTOM {WORK HERE program or PA etc} 

REPEAT 

# No conditional 

# I personally would be very careful with this. One miss step here and you might just regret this later. 

A better way would likely be researching making the process a daemon... (from my AIX Man pages)

Files Reference 

 

--- 

 

inittab File 

 

Purpose 

 

Controls the initialization process. 

 

Description 

 

The /etc/inittab file supplies the script to the init command's role as a 

general process dispatcher. The process that constitutes the majority of the 

init command's process dispatching activities is the /etc/getty line process, 

which initiates individual terminal lines. Other processes typically dispatched 

by the init command are daemons and the shell.


Keith Johnson

Systems AdministratorProgrammer / Analyst

Lewis-Clark State College (LCSC) 208.792.2510

500 8th Ave. 

Lewiston, ID 83501



-Original Message-
From: Dana Baron [mailto:[EMAIL PROTECTED]]
Sent: Monday, May 03, 2004 9:35 AM
To: U2-Users
Subject: [U2] PHANTOM forever

Greetings,

Looking for some advice with Phantoms (seems to be a theme lately). I have a

udt program that I want to have always running (infinite loop). I want to

start this as a background process using PHANTOM. Pretty straight forward so

far. How can I do this so the process keeps running even after I log out the

process that started it?

Unidata 5.2; Tru64 Unix 5.1A

Thanks for any help

Dana Baron

System Manager

Smugglers' Notch Resort



---

u2-users mailing list

[EMAIL PROTECTED]

http://www.u2ug.org/listinfo/u2-users