The Life and Times of Jim
Hi, there. I'm Jim. Welcome to my phlog!
This site was written for Las Vegas, then LouisVille. Now, it seems to be about anywhere. In these phlogs, you'll see a lot of my personal notes and pictures. I like to post my observations here to remember life and celebrate it. I'm not religious. I don't pray for good fortune. I'm ecstatically grateful for the gift of life and I think our time should be remembered and not taken for granted. I'm not a writer. I think pictures tell stories so much better than words. I love just about everything in this life, and, I guess that would have to include you. So, if you've seen me, don't be surprised if your picture is in here somewhere. Of all the critters, people are absolutely the most interesting. 
<< 08/2008 < 07/2009 Calendar 09/2009 > 08/2010 >>Sign InView Other Logs
Fri 
08/14/2009 20:19:20
 jim  Cranberry - Behind Unos
Thu 
08/13/2009 21:38:41
 jim  Pittsburgh-Rivers Casino
Thu 
08/13/2009 21:37:44
 jim  Pittsburgh-Rivers Casino
Wed 
08/12/2009 08:00:11
 jim  Wexford Fog
Tue 
08/11/2009 18:42:51
 jim  Well folks, looks like I am here for a while
Some people pulled for me really hard, and I gotta say, its been a little emotional for me.
We've been travelling for what seems like forever and I haven't had a real home for what seems like a very, very long time.
These people have become as close to friends as I guess I'll ever have. And I'm happy.
These are the good people that I've been looking for.
They are the ones that I've always wanted to know.
Mon 
08/10/2009 18:57:37
 jim  Pittsburgh-Mortons Steakhouse
Sun 
08/09/2009 18:33:18
 jim  ZMacros
?section GO  macro
== ****************************************************************************
== * GO program|macro|routine                                                 *
== * GO FUP INFO *.*                                                          *
== *--------------------------------------------------------------------------*
== * Runs a program, showing its command line                                 *
== ****************************************************************************
#output %*%
%*%


?section VAR macro
== ****************************************************************************
== * VAR variable [value]                                                     *
== * VAR MyVar    This is a test                                              *
== *--------------------------------------------------------------------------*
== * Pushes a variable if it doesn't already exist.                           *
== * If [value] is supplied, set it, otherwise, preserve the old value.       *
== ****************************************************************************
[#if [#variableinfo/existence/ %1%] |else| #push %1%]
[#if [#empty %2%] |then| |else| #set %1% %2 to 99%]


?section CompAll    macro
== ****************************************************************************
== * COMPALL [file mask] [;list] [$S]                                         *
== *--------------------------------------------------------------------------*
== * Gets a list of file names using the file mask                            *
== * Volumes to where the file is                                             *
== * Compiles the program based on its contents                               *
== * Volumes back to where you started                                        *
== ****************************************************************************
var   Param1 %1%
#push Param2 Param3
var   Param2 %2%
var   Param3 %3%
var   NoList ;nolist
#set  NoList
var   tst_lst
#set  tst_lst
[#case [#chargetv Param1 1 1] |;| #set NoList  [Param1] |otherwise|]
[#case [#chargetv Param2 1 1] |;| #set NoList  [Param2] |otherwise|]
[#case [#chargetv Param1 1 1] |$| #set tst_lst [Param1] |otherwise|]
[#case [#chargetv Param2 1 1] |$| #set tst_lst [Param2] |otherwise|]
#push MyFile FileList
fup /outv FileList/info %1%
#extractv FileList MyFile
#extractv FileList MyFile
#extractv FileList MyFile
var CompVol [#FILEINFO/VOLUME/x].[#FILEINFO/SUBVOL/x]]
[#loop |do|
   [#case [#chargetv MyFile 1 1]
   |$| VOLUME [MyFile]
   |otherwise|
      #set MyFile [#chargetv MyFile MyFile 1 8]
      COMPILE [MyFile]
   ]
   #extractv FileList MyFile
|until| [#emptyv FileList]
]
VOLUME [CompVol]
#pop MyFile FileList


?section COMP macro
var  tst_lst
#set tst_lst
var nolist ;nolist
var tst_src %1%
[#if [#fileinfo/existence/[tst_src]] |then|
   COMPILE %*%
|else|
   #output *** ERROR: %1% Does not exists
]


?section COMPF macro
var tst_src %1%
var tst_lst ,OUT LISTING.[tst_src]
var nolist
#set nolist ;nolist
[#if [#fileinfo/existence/[tst_src]] |then|
   COMPILE %*%
|else|
   #output *** ERROR: %1% Does not exists
]


?section COMPP macro
var tst_src %1%
var tst_lst ,OUT $P.#COMP.[tst_src]
var nolist
#set nolist ;NOLIST
[#if [#fileinfo/existence/[tst_src]] |then|
   COMPILE %*%
|else|
   #output *** ERROR: %1% Does not exists
]


?section COMPILE macro
var tst_lst
var nolist
var #INLINEPREFIX --
var tst_src %1%
var Src_Root [#charget tst_src 1 for [#compute [#charcount tst_src] - 1]]
var ThisVol [#FILEINFO/VOLUME/[tst_src]].[#FILEINFO/SUBVOL/[tst_src]]
var tst_lib $TECH1D.COPYSRC var tst_all [ThisVol].[tst_src]
var tst_cat  $DEV3.MISCCATL
var tst_pobj $DEV2.TURBOBJ.xxx1
[#case [#charget [#shiftstring tst_src] 1 for 3]
   |EBC|  var tst_OBJ  $DEV2.TECHOB.[src_root]
   |EXP|  var tst_OBJ  $DEV2.EXPOBJ.[src_root]o
          var tst_pobj $DEV2.EXPOBJ.EXP1
          var ComptPobj EXP1
   |EMS|  var tst_OBJ  $DEV2.EMS.[src_root]n
   |ERR|  var tst_OBJ  $DEV2.SUBOBJ.[src_root]o
   |SUB|  var tst_OBJ  $DEV2.SUBOBJ.[src_root]o
   |BAT|  var tst_OBJ  $DEV2.TURBOBJ.[src_root]o
   |ENF|  var tst_OBJ  $DEV2.TURBOBJ.[src_root]o
   |DJL|  var tst_OBJ  $DEV2.TURBOBJ.[src_root]o
   |xxx|  var tst_OBJ  $DEV2.TURBOBJ.[src_root]o
          var ComptPobj xxx1
   |FLX|  var tst_OBJ  $DEV2.TURBOBJ.[src_root]o
   |FSR|  var tst_OBJ  $DEV2.TURBOBJ.[src_root]o
   |GBP|  var tst_OBJ  $DEV2.TURBOBJ.[src_root]o
   |PRG|  var tst_OBJ  $DEV2.TURBOBJ.[src_root]o
   |TAL|  var tst_OBJ  $DEV2.TECHOB.[src_root]o
   |TMP|  var tst_OBJ  $DEV2.TURBOBJ.[src_root]o
   |UTL|  var tst_OBJ  $DEV2.TURBOBJ.[src_root]o
   |STR|  var tst_OBJ  $DEV2.STOREOBJ.[src_root]o
   |INT|  var tst_OBJ  $DEV2.WEBOBJ.[src_root]o
   |REP|  var tst_OBJ  $DEV2.WEBOBJ.[src_root]o
   |WEB|  var tst_OBJ  $DEV2.WEBOBJ.[src_root]o
   |OTHERWISE|
          var tst_OBJ  $DEV2.xxxROBJ.[src_root]o
          var ComptPobj xxx1
]
var tmp [tst_src]
#push Found srcLanguage
#set Found
#set srcLanguage
[#if [#emptyv SrcLanguage] |then|
   edit /OUTV Found/[tmp] R;LB/ SCREEN / RB/ SECTION/RN/*/;E
   [#if [#linecount Found] > 2 |then| #set SrcLanguage SCOBOL ]
]
[#if [#emptyv SrcLanguage] |then|
   edit /OUTV Found/[tmp] R;LB/ TERMINAL / RB/ CONVERSATIONAL/RN/*/;E
   [#if [#linecount Found] > 2 |then| #set SrcLanguage SCOBOL ]
]
[#if [#emptyv SrcLanguage] |then|
   edit /OUTV Found/[tmp] R;LB/ TERMINAL / RB/ IBM-3270/RN/*/;E
   [#if [#linecount Found] > 2 |then| #set SrcLanguage SCOBOL ]
]
[#if [#emptyv SrcLanguage] |then|
   edit /OUTV Found/[tmp] R;LB/PROCEDURE / RB/DIVISION/RN/*/;E
   [#if [#linecount Found] > 2 |then| #set SrcLanguage COBOL]
]
[#if [#emptyv SrcLanguage] |then|
   edit /OUTV Found/[tmp] R;LB/ $SYSTEM.SYSTEM.EXTDECS/;E
   [#if [#linecount Found] > 2 |then| #set SrcLanguage Tal]
]
[#if [#emptyv SrcLanguage] |then|
   edit /OUTV Found/[tmp] R;LB/#include/;E
   [#if [#linecount Found] > 2 |then| #set SrcLanguage C]
]
[#if [#emptyv SrcLanguage] |then|
   edit /OUTV Found/[tmp] R;LB/?DICTIONARY /;E
   [#if [#linecount Found] > 2 |then| #set SrcLanguage Enform]
]
[#if [#emptyv SrcLanguage] |then|
   edit /OUTV Found/[tmp] R;LB/?DICT /;E
   [#if [#linecount Found] > 2 |then| #set SrcLanguage DDL]
]
[#if [#emptyv SrcLanguage] |then|
   edit /OUTV Found/[tmp] R;LB/CATALOG / r/=/;E
   [#if [#linecount Found] > 2 |then| #set SrcLanguage SQL]
]
[#if [#emptyv tst_lst] |then|
|else|
   [#if [#fileinfo/volume/[tst_lst]] |then|
      [#if [#fileinfo/existence/listing.[tst_src]] |then|
         PURGE listing.[tst_src]]
         fup CREATE listing.[tst_src], type u, ext(50,50)
      |else|
         fup purgedata listing.[tst_src]
      ]
      #set tst_lst ,out listing.[tst_src]
   |else|
      #set tst_lst ,out [tst_lst].#[SrcLanguage].[tst_src]
   ]
]

comment GO EDIT/INLINE/[tst_all]
comment GO -- CBA/$TECH1D.COPYSRC./COPYSRC./A
comment GO -- CBA/$TECH1.COPYSRC./COPYSRC./A
comment GO -- CBA/$TECH2D.//A
comment GO -- CBA/$TECH2.//A
comment GO -- CBA/?SOURCE ./?SOURCE /A
comment GO -- CBA/ COPYSRC./ / /COPY /
comment GO -- CF/*/  /TIMEFILE-MOD-TIME/ RN/*/
comment GO -- CBA/BLKTJRC/BLKTJRN/A
comment GO -- CA/search "$tech1D./search "/A
comment GO -- EXIT


param    SYMBOL-BLOCKS 8
VOLUME   [tst_lib]
[#case   [SrcLanguage]
|COBOL|  GO COBOL85/IN [tst_all][tst_lst]/[tst_obj][nolist],ENV COMMON
         var ComptNbr 1
|SCOBOL| GO SCOBOLX/IN [tst_all][tst_lst]/[TST_POBJ][nolist]
         var ComptNbr 2 [ComptPobj]
|Enform| GO enform /inline[tst_lst]/
         GO -- ?compile [tst_all] TO [tst_obj]
         GO -- exit;
         var ComptNbr 3
|TAL|    GO TAL    /IN [tst_all][tst_lst]/[tst_obj][nolist]
         var ComptNbr 4
|SQL|    GO SQLCI  /IN [tst_all][tst_lst]/
|C|      GO C      /IN [tst_all][tst_lst]/[tst_obj][nolist], &
         SSV0 "$system.system",SSV1 "$system.ztcpip",SSV2 "$tech1.nos"
==       SSV3 "$tech1d"
         var ComptNbr 5
|DDL|    GO DDL    /IN [tst_all][tst_lst]/
|otherwise| #output Skipping [tst_ALL]
         var ComptNbr 99
]
volume [ThisVol]
[#IF (_COMPLETION:COMPLETIONCODE > 1) |then|
     #output **** ERROR ****
|else|
     SqlCheck [tst_obj]
]
[#if [#fileinfo/existence/[tst_obj]] |then|
     RUN $DEV2.CUTLAR.ZFUP SECURE [tst_obj],"nnnn"
     RUN $DEV2.CUTLAR.ZFUP GIVE   [tst_obj],SYSTEM.AOES
]
#pop Found
[#if [#empty %2%] |then| |else| COMPILE %2 TO 99%]

========================
?section SqlCheck macro
========================
[#if [#fileinfo/existence/%1%] |then|
   var lstSql
   #set lstSql
   SQLCOMP/IN %1%,outv lstSql/CATALOG [tst_cat]
   [#IF ([#LINEFIND lstSql 1 No SQL source ]>0) |then|
       #output Sql Compiling is not needed for %1%
       #set _COMPLETION
       SaveCompT R [tst_src] [ComptNbr]
   |else|
        #push #out
        #set  #out [tst_lst]
        outvar lstSql
        #pop  #out
        #set _COMPLETION
       [#IF (_COMPLETION:COMPLETIONCODE > 1) |then|
          #output ********** SQL ERROR **********************
       |else|
          [#case [ComptNbr]
           |1| SaveCompT R [tst_src] 6
           |otherwise|
               SaveCompT R [tst_src] [ComptNbr]
          ]
       ]
   ]
|else|
   SaveCompT R [tst_src] [ComptNbr]
]


?section SaveCompT macro
== This is for, in my opinion, a rather interesting compile macro that compiles turnovers.
#push #out
#set  #out zcompfil
#output %*%
#pop #out
COMMENT  rename [tst_src],TURNOVER.[tst_src]
?section SetPw   macro
var Param1 Param2
#set Param1 %1%
#set Param2 %2%
[#case [#chargetv Param1 1 1] |$| var PcName [Param1] |otherwise| var PcServer [Param2]]
[#case [#chargetv Param2 1 1] |$| var PcName [Param2] |otherwise| var PcServer [Param1]]
[#if [#emptyv PcName] |then|  
   var PcName [#input Enter the Pathway System: ($MNTF):]
]
[#if [#emptyv PcServer] |then|
   var PcServer [#input Enter the Pathway Server (TESTPOST-SERVER):]
]


?section DebugOn macro
== * DebugOn [$PW] [server-name]
SetPw %*%
freeze     [PcName] [PcServer]
go pathcom [PcName];alter [PCServer],hometerm [#myterm],debug on
thaw       [PcName] [PcServer]


?section Freeze macro
SetPw %*%
go pathcom [PcName];freeze [PCServer]
go pathcom [PcName];stop   [PCServer], delay 10 secs


?section Thaw   macro
SetPw %*%
go pathcom [PcName];thaw [PCServer]


?section DebugOff macro
== * DebugOff [$PW] [server-name]
SetPw %*%
freeze     [PcName] [PcServer]
go pathcom [PcName];alter [PCServer],hometerm $VHS, debug off
thaw       [PcName] [PcServer]


?section set_SysIni macro
var CdVol          $DEV2.TEST
var LstVol         $DEV2.TESTLST
var SrcVol         $DEV2.TESTSRC
var TST_EXE        $DEV2.TESTOBJ.[SrcFile]O
var ObjVol         $DEV2.TESTOBJ
var TST_REN        $DEV2.TESTOBJ.[SrcFile]X
var TST_OBJ        $DEV2.TESTOBJ
var TST_POBJ       $DEV2.TESTOBJ.xxx1
var ObeyFile_VOL   $DEV2.TESTOBEY


?section LIB macro
GO VOLUME [TST_LIB]
?section LST macro
GO volume $DEV2.LISTING

?section SRC macro
[#if [#empty %1%] |then|
  GO volume $DEV2.SOURCE
|else|
  var  SrcFile %1%
]


?section OK macro
 [#case [#input RUN %*% (y)?] |y Y| GO %*% |otherwise|]
 #output ---------------------------------------------


?section PCLS macro
 SPOOLCOM $SPLS;JOB (OWNER),DELETE !
 SPOOLCOM $PPLS;JOB (OWNER),DELETE !


?section SV macro
 FUP SUBVOLS %*%


?section Type macro
 fup copy %1%


?section p macro
[#if [#empty %1%] |then| peruse $PPLS |else| peruse $SPLS]


?section InfoDefine macro
#frame
#push    X1 X2 X3 X4
#setMANY X1 X2 X3 X4,[#defineinfo %1%]
#output/HOLD/ADD DEFINE %1%
#output/HOLD,COLUMN 25/,CLASS [X2]
#output/COLUMN 40/,[X3] [X4]
#unframe
[#if [#empty %2%] |then| |else| INFODEFINE %2 to 99%]


?section CreateDefines macro
PURGE XD
INFO/OUT XD/DEFINE =*
EDIT XD;DQN/=/;CQ/ Define Name / INFODEFINE /A;E
PURGE DEFINES
#push #OUT
#set #OUT DEFINES
O XD
#pop #OUT
EDIT DEFINES;DQ/INFODEFINE/;E
EDIT DEFINES
[#if [#empty %2%] |then| |else| INFODEFINE %2 to 99%]


?section ST macro
[#IF [#EMPTY %1%]
|then| STATUS *,TERM
|else| STATUS %*%
]


?section DelY    macro
[#IF [#FILEINFO/EXISTENCE/%1%] |then|
   FILEINFO %1%
   [#CASE [#INPUT Do you wish to delete this (y)?]
      |y Y| purge %1%
      |otherwise|
   ]
]


?section COMPARE macro
$DEV2.testobj.COMPARE %*%


?section PC macro
[#if [#empty %1%]
|then| GO pathcom [PcName]
|else| #set PcName %*%
       GO pathcom %*%]


?section OBJ macro
Go VOLUME $DEV2.TESTOBJ


?section TL macro
Go LOAD/KEEP 1/$DEV2.COMPILES.ZMACROS


?section GT macro
edit $DEV2.COMPILES.ZMACROS;set tabs 10 20 30 40 50 60 70;%1 TO 9%


?section CD macro
var CdVol %1%
volume [CdVol]


?section G macro
var GSrc %*%
EDIT;SET TABS 10 20 30 40 50 60 70;SET JOIN 80;G [GSrc]


?section O macro
var ObeyFile %1%
[#if [#emptyv ObeyFile] |then|
     #output ([ObeyFile]) doesn't exist.
|else|
   [#if [#fileinfo/existence/[ObeyFile]] |then|
      #push Found
      edit /OUTV Found/[ObeyFile] R;LB/?section/RB/ ROUTINE/;E
      [#if [#linecount Found] > 2 |then|
         GO T [ObeyFile]
      |else|
         GO OBEY [ObeyFile]
      ]
      #pop  Found
   |else|
      #output The default Obey File hasn't been set yet. Try: O obeyfile
   ]
]
[#if [#empty %2%] |then| |else| O %2 to 99%]


?section BYE       macro
CSAVE
LOGOFF


?section CLOAD     macro
#push MyVol
#set  MyVol [#DEFAULTS]
VOLUME
OBEY DEFAULTS
VOLUME [MyVol]
#pop MyVol


?section CSAVE     macro
#push WS_VOLUME
#set  WS_VOLUME [#DEFAULTS]
VOLUME
#frame
#push #INLINEPREFIX
#set  #INLINEPREFIX --
edit/INLINE/DEFAULTS !
-- DQ ! F/L
-- 101 /#set PCName      [PCName]/
-- 102 /#set PCServer    [PCServer]/
-- 103 /#set SrcFile     [SrcFile]/
-- 104 /#set ObeyFile    [ObeyFile]/
-- 105 /#set CdVol       [CdVol]/
-- 106 /#set SrcFile     [SrcFile]/
-- 107 /#set COut        [COut]/
-- 108 /#set GSrc [GSrc]/
-- 109 /#set CdVol       [CdVol]/
-- E
VOLUME [WS_VOLUME]
#unframe


?section FILESPEC macro
[#if [#fileinfo /existence/ %1%] |then|
    #output /hold/ [#fileinfo/fullname/ %1%]
    #output /column 35,hold/
    [#case [#fileinfo /filestructure/ %1%]
         |0| #output /hold/ U:
         |1| #output /hold/ R:
         |2| #output /hold/ E:
         |3| #output /hold/ K:
         |otherwise| ]
    #output /column 37,hold/ [#fileinfo/eof/ %1%]
    #output /column 44,hold/&
        [_CONTIME_TO_TEXT [#CONTIME [#fileinfo/modification/%1%]]]
    #output /column 72,hold/ [#fileinfo/owner/ %1%]
|else|
    #output /hold/ File %1% does not exist ]
#output


?section SCUPINFO macro
#frame
#push OUTLIST
SCUP /OUTV OUTLIST/INFO %*%
#output [#LINEGET OUTLIST 1 FOR 1]
#output [#LINEGET OUTLIST 5 FOR 1]
#unframe


?section PRINT macro
FUP COPY %1%,$P
[#if [#empty %2%] |then| |else| PRINT %2 to 99%]


?section SQCOST macro
SQLCOMP/IN $DEV2.TESTOBJ.%1%,OUT $P.#SQCOST/ &
STOREDDEFINES EXPLAIN PLAN NORECOMPILE


?section LOG macro
[#if [#empty %1%] |then|
  EDIT $DEV2.TEST.LOG2009;XVS L-20;E
|else|
  #frame
  #push #out
  #set  #width 230
  #push  wYY wMM wDD wHH wMI
  #setmany  wYY wMM wDD wHH wMI, [#contime [#timestamp]]
  [#IF [wYY]< 10 |then| #set wYY 0[wYY]]
  [#IF [wMM]< 10 |then| #set wMM 0[wMM]]
  [#IF [wDD]< 10 |then| #set wDD 0[wDD]]
  [#IF [wHH]< 10 |then| #set wHH 0[wHH]]
  [#IF [wMI]< 10 |then| #set wMI 0[wMI]]
  #set  #out $DEV2.TEST.LOG[wYY]
  #output [wMM]/[wDD]/[wYY] [wHH]:[wMI]-> %*%
  #set  #width 80
  #pop  #out
  #unframe
]

?section sv macro
fup subvols %1%


?section CLS macro
#frame
 [#DEF ascii STRUCT
  BEGIN
  BYTE byt5(0:1)
   value 27 73;
  CHAR clr(0:1)
   redefines byt5;
  END;
 ]
#output [ascii:clr(0:1)]
#unframe


?section IMP     macro
var tst_src %1%
[#if [#fileinfo/existence/[tst_src]] |then|
    GO fup dup [tst_src], $tech1d.turnover.[tst_src],purge
]
[#if [#empty %2%] |then| |else| IMP %2 TO 99%]


?section GL      macro
var tst_src %1%
purge x
edit listing.[tst_src] p x


?section GS macro
var tst_src %1%
EDIT;SET TABS 10 20 30 40 50 60 70;SET JOIN 80;G [tst_src]
?section FS ALIAS
FINDDATA

?section CALC ALIAS
COMPUTE


?section dir ALIAS
fileinfo

?section fs alias
 finddata

?section grep alias
 finddata

Sat 
08/08/2009 19:09:06
 jim  Wexford Apt Neighbors
Fri 
08/07/2009 18:38:22
 jim  Soergel Orchard
Fri 
08/07/2009 17:55:44
 jim  Mobile BBQ Stand
Fri 
08/07/2009 17:31:26
 jim  LakeMoraine,PA-Rennaisance
Fri 
08/07/2009 17:30:36
 jim  Rennaisance Fair - 11,000 People
Fri 
08/07/2009 17:24:36
 jim  Lake Moraine - Mt Union
Fri 
08/07/2009 17:00:18
 jim  Lake Moraine Marina
Fri 
08/07/2009 16:54:40
 jim  Lake Moraine Forest
Fri 
08/07/2009 16:38:42
 jim  Lake Moraine Cabin
Fri 
08/07/2009 15:48:40
 jim  1994 30 ft TravelTrailer $6k
Fri 
08/07/2009 15:36:40
 jim  1992 25 ft TravelTrailer 7.5k
Fri 
08/07/2009 15:34:44
 jim  2003 17 ft TravelTrailer 8k
Fri 
08/07/2009 15:17:52
 jim  Butler, Pa
Wed 
08/05/2009 21:08:40
 jim  Mt Washington View
Wed 
08/05/2009 19:47:30
 jim   Station Square Fountain
Wed 
08/05/2009 19:13:04
 jim  Station Square
Tue 
08/04/2009 20:08:38
 jim  Sewickley, Pa - Deer
Tue 
08/04/2009 20:06:08
 jim  Sewickley, Pa
Tue 
08/04/2009 19:14:32
 jim  Sewickley, Pa - Carmadys
Tue 
08/04/2009 16:28:03
 jim  Cranberry, Pa and Abouts
Sun 
08/02/2009 09:34:03
 jim  Macro to save a file on change
?tacl macro
== ****************************************************************************
== * Macro  : ZCOLLECT                                                        *
== * Purpose: To save a file each time its modification date changes          *
== * Syntax : RUN ZCOLLECT SourceFile SaveFile Beg End                        *
== * Example: run zcollect $DATA.LOGFILE.LOG $DATA.SAVEFILE.LOG 20 25         *
== *          -------------------------------------------------------         *
== * Narrative:                                                               *
== * Check $DATA.LOGFILE.LOG's timestamp against $DATA.SAVEFILE.LOG20         *
== * If its different, it will                                                *
== *          fup dup $DATA.LOGFILE.LOG, $DATA2.SAVEFILE.LOG20,sourcedate     *
== * It will then set up for -> $DATA.SAVEFILE.LOG21                          *
== ****************************************************************************
#push SourceFile SaveFile BegAt EndAt
#set  SourceFile %1%
#set  SaveFile   %2%
#set  BegAt      %3%
#set  EndAt      %4%

[#if ([#fileinfo/existence/[SaveFile][BegAt]])
|then|
==  The first file already exists. Do nothing.
|else|
==  Grab the first file
    fup dup [SourceFile],[SaveFile][BegAt],sourcedate
]
 
[#loop |do|
   [#if (
        [#fileinfo/modification/[SourceFile]] =
        [#fileinfo/modification/[SaveFile][BegAt]]
        )
   |then|
       delay 5 mins == This pause can be mins, hours or secs
   |else|
       #set  BegAt [#compute [BegAt] + 1]
       #output fup dup [SourceFile],[SaveFile][BegAt],sourcedate
       fup dup [SourceFile],[SaveFile][BegAt],sourcedate
   ]
|until| (BegAt = EndAt)
]
Sat 
08/01/2009 22:36:04
 jim  Watch this video!
Sony played this mind-blowing video at their executive conference. 
Be prepared to be startled by facts.
 http://www.youtube.com/watch?v=cL9Wu2kWwSY 
In the next decade, computers will become more intelligent than we are.
The questions that rise are:
- What kind of child are we giving birth too? When they pass us in intelligence? Will they continue to be our tool?
- As the world of information continues to unfold, what will we learn about ourselves and this life?
- Where are we going as a species? Will silicon life out live carbon life? 
- Who will be controlling our direction, or will it all be just a series of actions with no direction at all?
- Finally, after we learn how to conquer death (and we will), what will our new fears become?
These, and more questions will be answered...in the future.
Sat 
08/01/2009 20:02:05
 jim  Cranberry, Pa - Red Robin
Sat 
08/01/2009 07:08:47
 jim  Wexford - Fog and Turkeys
Thu 
07/30/2009 18:28:36
 jim  Moon, Pa - Jimmys Restaurant
Sun 
07/26/2009 14:49:15
 jim  Ross, Pa - Mad Mex
Surprisingly good food for a Surprisingly Great Price,if you don't have a Margarita
Sun 
07/26/2009 10:02:16
 jim  Work Places
Sat 
07/25/2009 16:59:56
 jim  Washington, Pa
Sat 
07/25/2009 16:07:24
 jim  Eighty Four, Pa
Sat 
07/25/2009 10:50:44
 jim  Out and About
Fri 
07/24/2009 17:48:21
 jim  More about C Data types
C Data Types found in Guardian C/C++ Programmers manual
#pragma XMEM default for TNS C compilers, specifies a 32 bit model. NOXMEM specifies a 16 bit model.
#pragma NOWIDE changes the size of int, long and short to 16 bit. Only valid for #pragma NOXMEM which we don't use.
To call Guardian Procedures you should include
#pragma EXTENSIONS
#include
In a scrape with compatability problems, use the #pragma OLDCALLs. This specifies the pre C00 parameter order for old programs.

Best practices.
Don't use int. use long or short instead.
Put environment specific functions in an #include .
Avoid HP specific, and C extensions to data types if possible.
Use unsigned only for short and long.
Abbreviation Long forms Usage
bool bool * Non Ansi
char char Ansi - 1 byte (8 bits)
short short Ansi - 16 bit integer. Preferred usage.
signed short
short int
signed short int
long long 32 bit integer. Preferred usage.
signed long
long int Don't use this
signed long int Don't use this
int int, signed, signed int 32 bits, 16 bits with nowide. Don't use this. Use short instead.
unsigned short unsigned short 16 bit integer
unsigned short int
unsigned unsigned
unsigned int
unsigned long unsigned long
unsigned long int
unsigned long long unsigned long long Non Ansi. unsigned 64 bit integer.
long long long long 64 bit. Used when decimal numbers are is followed by ll or LL modifier
decimal decimal Non Ansi. Only for programs with #pragma SQL and #include
float float Single precision
float float Single precision
double double double Double precision
long double long double
Data Types
char 1 byte
int 16 bit integer
float single precision
double double precision
short 16 bit integer
long 32 bit integer
signed +/-
unsigned +
*int, *float pointer to int, float
enum enumeration constant
const Unchanging constant
extern Declare an external variable
register Declare a register
static Local variable
void No value
structure Define a structure
typedef x Create a name of a data type
sizeof x Size of an object
sizeof (x) Size of a data type
&var Use the variable at this address
Fri 
07/24/2009 17:48:20
 jim  AWAITIOX - C Example
!From http://docs.hp.com/en/524521-012/524521-012.pdf, Page 157

#include <in.h>
#include <netdb.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <cextdecs(AWAITIOX, FILE_GETINFO_)>
..
struct sockaddr_in fhost;
int len,rsock;
char buffer [8*1024];
short error, rsock2, rcount;
long tag;
..
error = recvfrom_nw(rsock, buffer, sizeof(buffer), 0,
(struct sockaddr *) &fhost, &len, tag);
if error (!= 0) /* some error checking */
{
printf ("recvfrom_nw failed, error %d\n," errno);
exit (1);
}
rsock2=(short)rsock; /* AWAITIOX/FILE_GETINFO_ expects a short
for socket descriptor */
(void) AWAITIOX (&rsock2,,&rcount,&tag,1l);
(void) FILE_GETINFO_ (rsock2, &error);
if (error != 0)
{
printf ("error from AWAITIOX, error %d\n", errno);
exit (1);
}
error = socket_get_info (rsock, (char*) &fhost, len);
if (error != 0)
{
printf ("socket_get_info failed, error %d\n", errno);
exit(1)
}

C / TAL Comparisons (Using SEND_NW as an example):
C Synopsis, used for data type comparisons
#include <....lost in html conversion>
#include <...lost in html conversion>
error = send_nw (socket, nbuffer_ptr, nbuffer_length, flags,tag);
int error, socket;
char *nbuffer_ptr;
int nbuffer_length, flags;
long tag;

C / TAL Comparisons (Using SEND_NW as an example):
C Synopsis, used for data type comparisons
#include <....lost in html conversion>
#include <...lost in html conversion>
error = send_nw (socket, nbuffer_ptr, nbuffer_length, flags,tag);
int error, socket;
char *nbuffer_ptr;
int nbuffer_length, flags;
long tag;
Tal Synopsis, used for data type comparisons
?NOLIST, SOURCE SOCKDEFT
?NOLIST, SOURCE SOCKPROC
error := send_nw (socket, nbuffer_ptr, nbuffer_length,
flags, tag);
INT(32) error, socket;
STRING .EXT nbuffer_ptr;
INT(32) nbuffer_length,
flags;
INT(32) tag;

Fri 
07/24/2009 17:48:20
 jim   (Reply)..AWAITIOX - C Example
Hahaha...there probably are...none of which were caught by the compiler.
I'm having to get familiar with C and Tal, since they are usually bound into Cobol programs. I'm just glad I don't have to review the MUMPS language!
I'm supposed to be overseeing a full system recompile and its never been done.
After compiling what seems like a million programs, I'm seeing warnings all over the place, with no idea what is normal.
I'm both the new guy on the block, and I'm a short timer.
This has been keeping me up at nights. This is going to be a killer month for me.
4 weeks and 2 days, and it'll be time for another 8 week vacation...yeah!!!
Fri 
07/24/2009 08:36:18
 jim  Tal
-- This is a comment
! This is a comment
! This is a bracketted comment !
STRING         - 1 bytes integer 0 to 255, EG STRING(2) x; is a 2 byte ascii string
INT            - 2 bytes, 0 to 65,535 or -32,768 to + 32,767. This can also be a string EG: INT twochars := "CH";
INT(32)        - 4 bytes
UNSIGNED(1~15) - n bits, 0 thru (2**n - 1)
UNSIGNED(16)   - 0 to 65,535, or -32,768 to +32,767. This is your standard address
FIXED          - 8 bytes, for FIXED(0) or FIXED(*) the range is -9 kazillion to +9 kazillion
REAL           - 4 bytes, precise to 9 digits
REAL(64)       - 8 bytes, precise to 17 digits

INT(16)   is the same as INT
INT(64)   is the same as FIXED(0)
REAL(32)  is the same as REAL

Examples:
LITERAL double_word = (4 * 8);
INT    (double_word) num; ! num is a INT(32)
INT       x := 4                  ! x is decimal 4
INT       x := %177               ! x is Octal 177
INT       x := %B01010            ! x is Binary 01010
INT       x := %B0000000000000010 ! x is 2;
INT       x := %B1111111111111110 ! x is -2 (using twos compliment);
INT       x := %H1A               ! x is Hex 1A
FIXED(3)  x := 0.642F;            ! x is 642000, the  3 shifts the decimal right
FIXED(-3) x := 642945F;           ! x is 642000, the -3 shifts the decimal left
FIXED(*)  x := 123                ! x is stored, not scaled

BLOCK  x                       ; ! Declare Global Variables
     INT        flag    := TRUE;
     INT(32)    index   := 22  ;
END BLOCK                      ;
BLOCK PRIVATE                  ; ! Declare Local Variables
     INT        myflag  := TRUE;
     INT(32)    myindex := 22  ;
END BLOCK                      ;

PROC paragraph_x   ; FORWARD   ; ! Declares that paragraph_x will be out of compile sequence
PROC called_program; EXTERNAL  ; ! Declares that a paragraph can be found in a called program
PROC paragraph_x (param)       ;
BEGIN
     INT param;
END;

PROC paragraphs_nested (param) ;
BEGIN
  ENTRY entry_point              ; ! Declares a programs entry point
  some code
  SUBPROC entry_subroutine(x)    ; ! Declares a subroutine with a PROC
     BEGIN
     some code  
     END;

  entry_point:
     some more code

END;

PROC myproc;
BEGIN !Local data declarations
   SUBPROC some_sub (param); !Declare subprocedure 
      INT param; 
      ENTRY sub_entry;         ! Declare entry-point identifier
      INT var;                 ! Some code here 
   sub_entry:                  ! Apply entry-point
      var := var - param;      ! identifier to statement 
      some code         ;      ! Tal can get ugly very quickly
   END;                        ! End subprocedure 
   some code 
   !Local statements
   CALL sub_entry (1); !Call entry-point SUB_ENTRY 
   END;

PROC xx(v1,v2,v3);
BEGIN...END;
...CALL xx(v1, !nothing!, v3) ! Comments help document ommited variables

DEFINETOG omit                !
some code
?IF omit
some code
?ENDIF omit

Sample compile statement: suppress octal code after each line, suppress all but header information, compile for syntax only
   and puts the errors in a file called xxx, and sets the omit toggle on
TAL/in myprogram/;nocode, suppress, syntax, errorfile xxx,settog omit,

Operators:
  x  := 2     ! move 2 to a number
  x ':=' 'AB' ! move characters to a string
  x := @var   ! x is the address of var
  .x          ! convert x from a INT to the word address of another variable
  <<          ! Signed Left shift
  '<<'        ! Unsigned Left shift
  + - *       ! Signed operators for add, subtract and multiply
  '+' '-' '*' ! Unsigned operators for add, subtract and multiply
  = <= >=     ! comparisons
  '=' '<='    ! comparisons (unsigned)
  <>          ! Not equal

According to the manual, you can do math on a string variable. EG: STRING x; x ':=' 'A"; x := x * 2; Go figure?


Tue 
07/21/2009 20:11:06
 jim  WestView, Pa - DPietros

<< 08/2008 < 07/2009 Calendar 09/2009 > 08/2010 >>Sign InView Other Logs