.TITLE UTL_STRIP - Remove trailing spaces/tabs .IDENT /1-001/ ;++ ; Facility: ; General Utility Programs ; Abstract: ; This program is used to remove trailing spaces and/or tabs that exist ; on the end of records. ; Environment: ; Runs at User access mode via DCL command. Uses the Command Language ; Interface of DCL. (SET COMMAND command). ; Author: ; Scott Nelson. ; Date Created: ; 09-March-1983. ; Modification Log: ; 1-001 09-Mar-1983 Scott Nelson, original program. ;-- .PAGE .SBTTL DECLARATIONS ; ; Library Macro Calls: ; $NAMDEF ; ; External Declarations: ; ; None. ; ; Macros: ; ; None. ; ; Equated Symbols: ; REC_SIZE = 256 SPACE = ^X20 TAB = ^X09 ; ; Own Storage: ; .PSECT _UTL_DATA PIC, USR, CON, REL, LCL, NOSHR, NOEXE, RD, WRT, LONG INFAB: $FAB DNM=<.DAT>, - FAC=, - FNA=GET_IN_FILENAME, - FNS=NAM$C_MAXRSS, - FOP=, - NAM=INNAM INNAM: $NAM ESA=INESA, - ESS=NAM$C_MAXRSS, - RSA=INRSA, - RSS=NAM$C_MAXRSS INRAB: $RAB FAB=INFAB, - UBF=REC_BUF, - USZ=REC_SIZE OUTFAB: $FAB FAC=, - FNA=GET_OUT_FILENAME, - FNS=NAM$C_MAXRSS, - FOP=, - NAM=OUTNAM, - ORG=SEQ, - RFM=VAR OUTNAM: $NAM RLF=INNAM OUTRAB: $RAB FAB=OUTFAB, - RBF=REC_BUF INESA: .BLKB NAM$C_MAXRSS INRSA: .BLKB NAM$C_MAXRSS REC_BUF: .BLKB REC_SIZE GET_IN_ARG: .LONG 2 .ADDRESS GET_IN_NAME .ADDRESS GET_IN_RES GET_IN_NAME: .ASCID "INPUT" GET_IN_RES: .LONG NAM$C_MAXRSS .ADDRESS GET_IN_FILENAME GET_IN_FILENAME: .BLKB NAM$C_MAXRSS GET_OUT_ARG: .LONG 2 .ADDRESS GET_OUT_NAME .ADDRESS GET_OUT_RES GET_OUT_NAME: .ASCID "OUTPUT" GET_OUT_RES: .LONG NAM$C_MAXRSS .ADDRESS GET_OUT_FILENAME GET_OUT_FILENAME: .BLKB NAM$C_MAXRSS ; ; PSECT Declarations: ; .PSECT _UTL_CODE PIC, USR, CON, REL, LCL, SHR, EXE, RD, NOWRT, LONG .PAGE .SBTTL UTL_STRIP_FILE ;++ ; Functional Description: ; This program removes the spaces that occur at the end of the records ; of the input file. ; Calling Sequence: ; (From DCL) ; $ STRIP input-filename output-filename ; Formal Parameters: ; input-filename The file to be "stripped". ; output-filename The file to be created with the "stripped" records. ; Implicit Inputs: ; None. ; Implicit Outputs: ; None. ; Completion Status: ; SS$_NORMAL Normal completion status ; RMS$_xyz RMS error messages ; Side Effects: ; None. ;-- .ENTRY UTL_STRIP_FILE, ^M CALLG GET_IN_ARG, G^CLI$GET_VALUE CMPL R0, #SS$_NORMAL BNEQU 100$ CALLG GET_OUT_ARG, G^CLI$GET_VALUE CMPL R0, #SS$_NORMAL BEQLU 200$ 100$: $EXIT_S R0 200$: $PARSE FAB=INFAB BLBS R0, SEARCH BRW EXIT SEARCH: $SEARCH FAB=INFAB ; Find next file CMPL R0, #RMS$_NMF ; NMF = name not found BNEQU 300$ BRW FINI ; If none, quit 300$: BLBC R0, EXIT1 $OPEN FAB=INFAB BLBC R0, EXIT1 MOVB INFAB + FAB$B_RAT, - OUTFAB + FAB$B_RAT $CONNECT RAB=INRAB BLBC R0, EXIT1 $CREATE FAB=OUTFAB BLBC R0, EXIT1 $CONNECT RAB=OUTRAB BLBC R0, EXIT1 ; ; Loop to copy records: ; READ: $GET RAB=INRAB BLBS R0, STRIP CMPL R0, #RMS$_EOF BEQLU DONE EXIT1: BRW EXIT STRIP: MOVZWL INRAB+RAB$W_RSZ, R0 ; Get the record size. MOVAB REC_BUF, R2 ; Get the address of the buffer NXTCHR: TSTL R0 ; If no characters, write it. BEQLU WRITE CMPB -(R0)[R2], #SPACE ; Check the character BEQLU NXTCHR CMPB (R0)[R2], #TAB BEQLU NXTCHR ADDL2 #1, R0 ; Change pointer to length WRITE: CVTLW R0, OUTRAB + RAB$W_RSZ ; Save the new record size $PUT RAB=OUTRAB BLBC R0, EXIT BRB READ ; ; Close files ; DONE: $DISCONNECT RAB=INRAB BLBC R0,EXIT $CLOSE FAB=INFAB BLBC R0, EXIT $DISCONNECT RAB=OUTRAB BLBC R0, EXIT $CLOSE FAB=OUTFAB BLBC R0, EXIT BRW SEARCH FINI: MOVL #SS$_NORMAL, R0 EXIT: $EXIT_S R0 .END UTL_STRIP_FILE