?TACL ROUTINE #FRAME #PUSH mcgutils { The volume.subvol of the MCGUTILS library. } #PUSH process { The process name to use for the TACL. } #PUSH scope^process { The process name to use for the SCOPE process. } #PUSH pri { The priority of the started TACL processes. } #PUSH log { The name of the log file for logging, if specified. } #PUSH log^specs { The FUP CREATE specs for the log file, if specified. } #PUSH arg { Used for accepting arguments. } =============================================================================== #SET mcgutils $DISK1.MCGUTILS #SET log^specs TYPE E,REC 4072,EXT(50,10),MAXEXTENTS 800,BUFFERED =============================================================================== [#DEF display^help MACRO |BODY| #OUTPUT #OUTPUT LOGTACL #OUTPUT #OUTPUT Starts a TACL with logging. #OUTPUT #OUTPUT You can optionally specify the process name of the TACL hometerm. #OUTPUT #OUTPUT #OUTPUT FORMAT: LOGTACL ~[~] #OUTPUT EXAMPLE: LOGTACL OPERLOG.T1D1 #OUTPUT EXAMPLE: LOGTACL OPERLOG.T1D1 $ABC #OUTPUT ] [#DEF STOPPROC ROUTINE |BODY| #FRAME #PUSH #BREAKMODE #SET #BREAKMODE DISABLE #PUSH process [#CASE [#ARGUMENT/TEXT process/PROCESSNAME TEXT END] |1| SINK [#STOP [process]] |OTHERWISE| ] #UNFRAME ] [#DEF clean ROUTINE |BODY| #FILTER _ERROR [#CASE [#EXCEPTION] |_CALL| STOPPROC [process] STOPPROC [scope^process] |_ERROR| #OUTPUT Severe error. #PUSH error^text #ERRORTEXT/CAPTURE error^text/ OUTVAR error^text #POP error^text #RESET FRAMES #RETURN ] ] [#DEF start^scope MACRO |BODY| PARAM PASSTHRU-BUFFER Y PARAM PASSTHRU-CACHE-SIZE 1920 PARAM PASSTHRU-CACHE-FLUSH-TIME 50 PARAM LOG-SYSTEM-MESSAGES Y PARAM LOG-ZERO-LENGTH-REPLIES Y PARAM LOG-PREFIX Y PARAM LOG-REQUESTS Y PARAM LOG-BLOCK-MODE Y PARAM LOG-HIDDEN N [#IF [#EMPTYV/BLANK/scope^process] |THEN| #SET scope^process [#CREATEPROCESSNAME] |ELSE| [#IF [#PROCESSEXISTS [scope^process]] |THEN| #OUTPUT Error. Process [scope^process] already exists. #RETURN ] ] #SET pri [#PROCESSINFO/PRI/] [[mcgutils].SCOPE & /NAME [scope^process] & ,IN [#MYTERM] & ,TERM [#MYTERM] & ,NOWAIT & ,PRI [#COMPUTE [pri]+1] & ,OUT [log]/ ] ] [#DEF start^tacl MACRO |BODY| TACL & /HIGHPIN OFF & ,CPU 0 & ,NAME [process] & ,OUT [scope^process] & ,IN [scope^process] & ,TERM [scope^process] & ,PRI [pri] & /1 ] [#DEF do^work MACRO |BODY| start^scope start^tacl clean #OUTPUT See [log]. ] [#DEF create^file MACRO |BODY| [#IF [#FILEINFO/EXISTENCE/[log]] |THEN| |ELSE| [#IF [process^running [log]] |THEN| |ELSE| FUP CREATE [log],[log^specs] ] ] ] [#DEF process^running ROUTINE |BODY| [#CASE [#ARGUMENT/TEXT arg/PROCESSNAME/SYNTAX/ TEXT] |1| [#IF [#PROCESSEXISTS [arg]] |THEN| #RESULT -1 |ELSE| #RESULT 0 ] |2| #RESULT 0 ] ] [#DEF do^work^filter ROUTINE |BODY| #FILTER _ERROR [#CASE [#EXCEPTION] |_CALL| do^work |_ERROR| #OUTPUT Routine error! #PUSH error^text #ERRORTEXT/CAPTURE error^text/ OUTVAR error^text #POP error^text #RESET FRAMES #RETURN |OTHERWISE| #OUTPUT Otherwise!!?? ] ] [#CASE [#ARGUMENT/VALUE log/FILENAME/SYNTAX/ DEVICE/SYNTAX/ PROCESSNAME/SYNTAX/ END ] |1| create^file SINK [#ARGUMENT/VALUE scope^process/PROCESSNAME/SYNTAX/ END] do^work^filter |2| SINK [#ARGUMENT/VALUE scope^process/PROCESSNAME/SYNTAX/ END] do^work^filter |3| SINK [#ARGUMENT/VALUE scope^process/PROCESSNAME/SYNTAX/ END] do^work^filter |4| display^help ] #UNFRAME