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