kenw@noah.arc.CDN (Ken Wallewein) (08/23/87)
$ File_is="PIPE.HLP"
$ Check_Sum_is=996867714
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X1 PIPE
X Allows commands to be combined a la unix.
X
X PIPE command [args...] [<fromfile] [>tofile] [| ...]
X
X eg: pipe SHOW LOGICALS * | grep DU | srt >LP:
X
X2 COUNT
X Counts number of lines/entries
X
X2 DUPS
X Finds duplicate entries in the specified portion of the line
X
X DUPS start length
X
X eg: PIPE D1 | DUPS 1 10
X
X2 EDIT
X EDIT edit_options
X
X Performs a DCL F$EDIT on each line of text
X
X eg: PIPE <TEXT.LIS EDIT UPCASE,TRIM >FIXED.LIX
X
X2 ELEMENT
X ELEMENT element_number
X where the first element is 0
X
X Performs a DCL F$ELEMENT(n," ",line) on each line of input, where
X " " represents any combination of spaces and tabs
X
X eg: PIPE SHOW DEV D |SKIP 3 |ELEMENT 0
X
X2 EXTRACT
X EXTRACT offset length
X
X Performs a DCL F$EXTRACT(P1,P2,line) on each line of input
X
X
X2 GREP
X GREP search_spec
X
X Pass only entries containing given text by performing a DCL
X SEARCH SYS$INPUT
X
X eg: sho log * | grep du
X
X finds only logicals referring to du* drives
X
X2 JUSTIFY
X
X Not currently inplemented
X
X Useful for using context to align data into columns, suchs as
X aligning all file extensions prior to sorting.
X
X JUSTIFY find_char to_column [find_char to_column...]
X
X2 MORE
X
X Equivalent to TYPE/PAGE SYS$INPUT
X
X2 NOCTRL
X Filters out control characters - allows viewing binary files for
X embedded text.
X
X2 NODUPS
X
X Everything BUT duplicates
X
X2 SKIP
X SKIP number_of_lines
X
X Skips the first number_of_lines lines in the input. Useful for
X skipping heading.
X
X2 TEE
X TEE filespec
X
X Splits writes a copy of the input to the specified file
X
X eg: PIPE <filename TEE TT: >LP:
X
X2 TOTAL
X Total value of all entries in given columns
X
X TOTAL start-column length
X
X eg: PIPE DIR/SIZ | TOTAL 30 10
X
X2 UNIQ
X See NODUPS
X
X2 WIDE
X Prints lists in wide format
X
X2 XARGS
X
X Executes a command using input as arguments
X
X eg: PIPE DIR *.TXT/SINCE=TODAY |XARGS TYPE/CONFIRM
X
X2 Requirements
X The following commands must executed for PIPE to be able
X to run:
X
X DEFINE PIPE home_directory (eg: sys$locroot:[pipe])
X PIPE :== @PIPE:PIPE
X
X2 Files
X
X For PIPE commands (see pipe.ini for definitions)
X ALLDUPS.COM
X DUPS.BAS
X DUPS.COM
X DUPS.EXE
X NOCTRL.C
X NOCTRL.EXE
X NODUPS.COM
X WIDE.BAS
X WIDE.EXE
X
X Support
X PIPE.COM PIPE itself
X PIPE.INI initializer
X
X STEM.BAS stub code for do-it-yourself filters
X STEM.C
X STEM.COM
X STEMS.C
$ GoSub Convert_File
$ File_is="PURGABLE.COM"
$ Check_Sum_is=439895041
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X$ say "purgable.com - show purgable files"
X$ say "working..."
X$
X$ on error then goto exit
X$ on control_y then goto exit
X$
X$ file_name := SYS$SCRATCH:purgable.lis
X$
X$ dir/notr/out='file_name 'p1
X$ filnam1 = f$search(file_name)
X$
X$ dir/notr/out='file_name 'p1;
X$ filnam2 = f$search(file_name)
X$
X$ diff/sep=master 'filnam1 'filnam2
X$
X$exit:
X$ if "''filnam1'" .nes. "" then delete 'filnam1
X$ if "''filnam2'" .nes. "" then delete 'filnam2
$ GoSub Convert_File
$ File_is="SKIP.COM"
$ Check_Sum_is=2084386474
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X! SKIP.COM - skip n lines at beinning of input
X! - synopsis: skpi lines
X!
X$ DEASS SYS$INPUT
X$ DEASS SYS$OUTPUT
X$ IF F$LOGICAL("PIPE_INPUT") .NES. "" THEN ASSIGN PIPE_INPUT SYS$INPUT
X$ IF F$LOGICAL("PIPE_OUTPUT") .NES. "" THEN ASSIGN PIPE_OUTPUT SYS$OUTPUT
X$
X$ skipcnt = f$integer(p1)+1
X$SKIP: skipcnt = skipcnt-1
X$READ: READ/END=DONE SYS$INPUT LINE
X$ if skipcnt .ne. 0 then goto skip
X$ WRITE SYS$OUTPUT line
X$ GOTO READ
X$DONE:
$ GoSub Convert_File
$ File_is="STEM.BAS"
$ Check_Sum_is=1746151268
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X1 ! STEM.BAS V1.0 - PIPE STEM !
X ON ERROR GOTO 32000
X
X EXTERNAL LONG FUNCTION LIB$GET_FOREIGN
X EXTERNAL INTEGER CONSTANT SS$_NORMAL
X
X DIM P$(31)
X
X COMMAND_BUFFER$ = SPACE$(80)
X
X OPEN "SYS$COMMAND" AS FILE #1%
X
X10 STATUS% = LIB$GET_FOREIGN(COMMAND_BUFFER$,,COMMAND_LENGTH%)
X IF STATUS% <> SS$_NORMAL
X THEN
X PRINT #1%, '%GET_COMMAND error'; STATUS%
X GOTO 32767
X END IF
X
X CMD_CNT% = 0%
X
X IF COMMAND_LENGTH% > 0%
X THEN
X
X COMMAND$ = LEFT$(COMMAND_BUFFER$,COMMAND_LENGTH%) + ' '
X
X ! PRINT #1%, 'COMMAND WAS: "'; COMMAND$; '"'
X
X OS% = 0%
X S% = INSTR(OS%+1%,COMMAND$,' ')
X
X WHILE S% > 0%
X CMD_CNT% = CMD_CNT%+1%
X P$(CMD_CNT%) = MID$(COMMAND$,OS%+1%,S%-OS%-1%)
X ! PRINT #1%, 'P$(';CMD_CNT%;'): "'; P$(CMD_CNT%); '"'
X OS% = S%
X S% = INSTR(OS%+1%,COMMAND$,' ')
X NEXT
X
X20 ! READ LOOP
X LINPUT A$
X GOSUB 100
X PRINT A$
X GOTO 20
X
X100 ! YOUR CODE HERE
X ! NOTE:
X ! AVAILABLE HERE ARE THE FOLLOWING COMMAND LINE VARIABLES:
X ! COMMAND$ - CONTAINS ALL OPTIONS INCLUDED WITH THE COMMAND
X ! P$() - CONTAINS OPTIONS PARSED BY SPACES
X ! CMD_CNT% - CONTAINS NUMBER OF OPTIONS FOUND
X
X999 RETURN
X
X32000 ! ERROR TRAPS
X
X IF ERR=11 ! NORMAL EOF?
X THEN
X IF ERL=20
X THEN
X RESUME 32767
X END IF
X END IF
X
X32100 ON ERROR GOTO 0 ! FATAL ERRORS
X
X32767 END
X
$ GoSub Convert_File
$ File_is="STEM.C"
$ Check_Sum_is=1380208176
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X/* stem.c v1.0 - pipe stem */
X
X#define EOF -1
X
Xmain()
X{
X int byte;
X
X while ( (byte=getchar()) != EOF )
X {
X /* your code here */
X putchar( byte );
X }
X}
X
X
$ GoSub Convert_File
$ File_is="STEM.COM"
$ Check_Sum_is=1312981018
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X$! PIPESTEM.COM - STUB FRONT END FOR COM FILES USED BY PIPE
X$!
X$ DEASS SYS$INPUT
X$ DEASS SYS$OUTPUT
X$ IF F$LOGICAL("PIPE_INPUT") .NES. "" THEN ASSIGN PIPE_INPUT SYS$INPUT
X$ IF F$LOGICAL("PIPE_OUTPUT") .NES. "" THEN ASSIGN PIPE_OUTPUT SYS$OUTPUT
X$!
X$READ: READ/END=DONE SYS$INPUT LINE
X$!
X$! PUT CODE HERE...
X$!
X$ WRITE SYS$OUTPUT LINE
X$ GOTO READ
X$DONE:
$ GoSub Convert_File
$ File_is="STEMS.C"
$ Check_Sum_is=573192461
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X/* stems.c - line oriented c pipestem */
X
Xchar *string[255];
X
Xmain()
X{
X while ( gets( string ) )
X {
X
X /* your code here */
X
X puts( string );
X }
X}
X
$ GoSub Convert_File
$ File_is="SUBSTITUTE.COM"
$ Check_Sum_is=578776391
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X!SUBSTITUTE.COM V1.0 - search/substitute on a file using FORALL and EDT
X!
X$ on error then goto edit
X$ on control_y then goto exit
X$
X$ if p1 .eqs. "" .or. p2 .eqs. "" then goto badargs
X$
X$ file_name := SYS$SCRATCH:SUBSTITUTE.EDT
X$
X$ open/write file 'file_name
X$ filnam = f$search(file_name)
X$
X$ write file "subs~''p2'~''p3'~w"
X$ close file
X$
X$ FORALL 'p1 EDIT/COMMAND='filnam
X$ goto exit
X$
X$badargs:
X$ write sys$output "SUBSTITUTE filespec search_string [substitute_string]"
X$
X$exit:
X$ if f$trnlnm("file") .nes."" then -
X close file
X$ if "''filnam'" .nes. "" .or. f$trnlnm("file") .nes."" then -
X delete 'filnam
$ GoSub Convert_File
$ File_is="TEE.COM"
$ Check_Sum_is=1042044897
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X! tee.COM - send a copy of sys$input to specified file
X$ DEASS SYS$INPUT
X$ DEASS SYS$OUTPUT
X$ IF F$LOGICAL("PIPE_INPUT") .NES. "" THEN ASSIGN PIPE_INPUT SYS$INPUT
X
X$ IF F$LOGICAL("PIPE_OUTPUT") .NES. "" THEN ASSIGN PIPE_OUTPUT SYS$OUTPUT
X!
X$READ: READ/END=DONE SYS$INPUT LINE
X$
X$ write 'p1 line
X$
X$ WRITE SYS$OUTPUT LINE
X$ GOTO READ
X$DONE:
X
$ GoSub Convert_File
$ File_is="TIME.COM"
$ Check_Sum_is=1565686740
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X!time.com - times stuff
X!
X$ prev_time = "''time'"
X$ time == 'f$cvtime(,,"second")*100 + 'f$cvtime(,,"hundredth")
X$ elapsed = time - prev_time
X$
X$CMD := 'P1 'P2 'P3 'P4 'P5 'P6 'P7 'P8
X$
X$ IF CMD .EQS. "" THEN goto done
X$
X$'cmd
X$
X$ prev_time = 'time
X$ time == 'f$cvtime(,,"second")*100 + 'f$cvtime(,,"hundredth")
X$ elapsed = time - prev_time
X$
X$done:
X$ secs = elapsed/100
X$ hund = elapsed - secs*100
X$ write sys$output "elapsed: ''secs'.''hund'"
$ GoSub Convert_File
$ File_is="TOTAL.COM"
$ Check_Sum_is=779694361
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X! TOTAL.COM - total up all items in given column
X! - parameters: column_offset length [output_file]
X!
X$ DEASS SYS$INPUT
X$ DEASS SYS$OUTPUT
X$ IF F$LOGICAL("PIPE_INPUT") .NES. "" THEN ASSIGN PIPE_INPUT SYS$INPUT
X$ IF F$LOGICAL("PIPE_OUTPUT") .NES. "" THEN ASSIGN PIPE_OUTPUT SYS$OUTPUT
X$!
X$ total = 0
X$!
X$READ: READ/END=DONE SYS$INPUT LINE
X$!
X$ total = total + f$integer(f$extract('p1,'p2,line))
X$!
X$ if p3 .nes. "" then WRITE SYS$OUTPUT line
X$ GOTO READ
X$DONE:
X$ if p3 .eqs. "" then WRITE SYS$OUTPUT total
X$ if p3 .nes. "" then WRITE 'p3 total
$ GoSub Convert_File
$ File_is="WIDE.BAS"
$ Check_Sum_is=1761703608
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X1 ! WIDE.BAS V1.0 - PIPE WIDE LIST PRINTER !
X ON ERROR GOTO 32000
X
X EXTERNAL LONG FUNCTION LIB$GET_FOREIGN
X EXTERNAL INTEGER CONSTANT SS$_NORMAL
X
X DECLARE INTEGER CONSTANT TRUE = -1
X DECLARE INTEGER CONSTANT FALSE = 0
X
X DECLARE INTEGER CONSTANT OUT = 2
X
X COMMAND_BUFFER$ = SPACE$(80)
X
X OPEN "SYS$OUTPUT" FOR OUTPUT AS FILE #OUT, &
X RECORDSIZE 132
X
X10 STATUS% = LIB$GET_FOREIGN(COMMAND_BUFFER$)
X MAXLEN% = VAL(COMMAND$)
X MAXLEN% = 128% UNLESS MAXLEN%
X
X LINLEN% = 0%
X
X100 LINPUT LINE$
X
X IF LINLEN%+LEN(LINE$) > MAXLEN%
X THEN
X PRINT #OUT
X LINLEN%=0%
X END IF
X PRINT #OUT, LINE$; " ";
X LINLEN% = LINLEN%+LEN(LINE$)+3%
X
X GOTO 100
X
X
X32000 ! ERROR TRAPS
X
X IF ERR=11 ! NORMAL EOF?
X THEN
X IF ERL=100
X THEN
X PRINT #OUT
X RESUME 32767
X END IF
X END IF
X
X32100 ON ERROR GOTO 0 ! FATAL ERRORS
X
X32767 END
X
$ GoSub Convert_File