LOGICAL*1BUFFER(255) ! 1 COMMONN,BUFFER ! 2 LOGICAL*1SAVE ! 3 CALLWTQIO("1400,5,1) ! 4 777 TYPE*,' ' ! 23 TYPE*,'MENU: ENTER NUMBER OF DESIRED OPTION' ! 24 TYPE*,' ' ! 25 TYPE*,'(1) PROGRAM INFORMATION' ! 26 TYPE*,'(2) RID FILE OF TRAILING BLANKS AND TABS' ! 27 TYPE*,'(3) RID FILE OF SEQUENCE NUMBERS AND TRAILING BLANKS' ! 28 TYPE*,' AND TABS' ! 29 TYPE*,'(4) TRANSFORM IMBEDDED BLANKS TO TABS' ! 30 TYPE*,'(5) TRANSFORM IMBEDDED TABS TO BLANKS' ! 31 TYPE*,'(6) CHANGE FILE HEADER TO CARRIAGECONTROL="LIST"' ! 32 TYPE*,'(7) LIST FILE' ! 33 TYPE*,'(8) EXIT PROGRAM' ! 34 TYPE*,' ' ! 35 CONTINUE ! 36 23000 CONTINUE ! 36 WRITE(5,5) ! 38 READ(5,3,ERR=999)MENU ! 39 IF(.NOT.(MENU.GE.1.AND.MENU.LE.8))GOTO23004 ! 40 GOTO23001 ! 40 23004 CONTINUE ! 41 999 TYPE*,'*** INVALID RESPONSE--TRY AGAIN ***' ! 41 TYPE*,' ' ! 42 23003 CONTINUE ! 43 23002 GOTO23000 ! 44 23001 CONTINUE ! 44 IF(.NOT.(MENU.EQ.1))GOTO23007 ! 44 CALLHELP ! 46 GOTO777 ! 47 23010 CONTINUE ! 48 23007 CONTINUE ! 49 IF(.NOT.(MENU.EQ.8))GOTO23011 ! 49 GOTO555 ! 49 23011 CONTINUE ! 50 TYPE*,' ' ! 50 IF(.NOT.(MENU.EQ.7))GOTO23014 ! 51 TYPE*,'ENTER NAME OF FILE TO BE LISTED' ! 51 23016 GOTO23015 ! 52 23014 CONTINUE ! 52 TYPE*,'ENTER NAME OF FILE TO BE PROCESSED' ! 52 23015 CONTINUE ! 53 CONTINUE ! 53 23017 CONTINUE ! 53 WRITE(5,5) ! 55 READ(5,1)N,(BUFFER(I),I=1,N) ! 56 BUFFER(N+1)=0 ! 57 OPEN(UNIT=1,NAME=BUFFER,TYPE='OLD',ERR=101) ! 58 GOTO23018 ! 59 101 TYPE*,' ' ! 60 TYPE*,'*** ERROR IN OPENING INPUT FILE--REENTER FILESPEC ***' ! 61 TYPE*,' ' ! 62 23020 CONTINUE ! 63 23019 GOTO23017 ! 64 23018 CONTINUE ! 64 IF(.NOT.(MENU.NE.7))GOTO23021 ! 64 TYPE*,' ' ! 66 TYPE*,'ENTER OUTPUT FILESPEC OR TO REUSE INPUT NAME' ! 67 TYPE*,'CAUTION: If a version number was given in the input file' ! 68 TYPE*,' specification and this input name is reused,' ! 69 TYPE*,' the original file will be overwritten.' ! 70 CONTINUE ! 71 23025 CONTINUE ! 71 WRITE(5,5) ! 73 SAVE=BUFFER(1) ! 74 READ(5,1)N,(BUFFER(I),I=1,N) ! 75 IF(.NOT.(N.EQ.0))GOTO23029 ! 76 BUFFER(1)=SAVE ! 76 23031 GOTO23030 ! 77 23029 CONTINUE ! 77 BUFFER(N+1)=0 ! 77 23030 CONTINUE ! 78 OPEN(UNIT=2,NAME=BUFFER,TYPE='NEW',CARRIAGECONTROL='LIST',ERR=888) ! 79 GOTO23026 ! 80 888 TYPE*,' ' ! 81 TYPE*,'*** ERROR IN OPENING OUTPUT FILE--REENTER FILESPEC ***' ! 82 TYPE*,' ' ! 83 23028 CONTINUE ! 84 23027 GOTO23025 ! 85 23026 CONTINUE ! 85 IF(.NOT.(MENU.EQ.3))GOTO23032 ! 85 TYPE*,' ' ! 87 TYPE*,'ENTER STARTING & ENDING COLUMNS OF SEQUENCE NUMBERS' ! 88 TYPE*,' (USUALLY: 73,80)' ! 89 CONTINUE ! 90 23036 CONTINUE ! 90 WRITE(5,5) ! 92 READ(5,*,ERR=333)NSEQ1,NSEQ2 ! 93 GOTO23037 ! 94 333 TYPE*,' ' ! 95 TYPE*,'*** INVALID RESPONSE--TRY AGAIN ***' ! 96 TYPE*,' ' ! 97 23039 CONTINUE ! 98 23038 GOTO23036 ! 99 23037 CONTINUE ! 99 23035 CONTINUE ! 99 23032 CONTINUE ! 100 23024 CONTINUE ! 100 23021 CONTINUE ! 101 TYPE*,' ' ! 101 CONTINUE ! 102 23040 CONTINUE ! 102 READ(1,1,END=666)N,(BUFFER(I),I=1,N) ! 104 IF(.NOT.(N.EQ.0))GOTO23044 ! 105 IF(.NOT.(MENU.EQ.7))GOTO23047 ! 106 GOTO222 ! 106 23049 GOTO23048 ! 107 23047 CONTINUE ! 107 GOTO444 ! 107 23048 CONTINUE ! 108 23044 CONTINUE ! 108 GOTO(303,202,404,505,444,222)MENU-1 ! 108 202 CALLDETAB ! 109 IF(.NOT.(N.LT.NSEQ2))GOTO23050 ! 111 I=NSEQ1 ! 112 GOTO23055 ! 112 23053 I=I+1 ! 112 23055 IF(.NOT.(I.LE.N))GOTO23054 ! 112 BUFFER(I)=' ' ! 113 GOTO23053 ! 114 23054 CONTINUE ! 114 23052 GOTO23051 ! 114 23050 CONTINUE ! 114 I=NSEQ1 ! 115 GOTO23058 ! 115 23056 I=I+1 ! 115 23058 IF(.NOT.(I.LE.NSEQ2))GOTO23057 ! 115 BUFFER(I)=' ' ! 116 GOTO23056 ! 117 23057 CONTINUE ! 117 23051 CONTINUE ! 117 303 I=N ! 117 GOTO23061 ! 117 23059 I=I-1 ! 117 23061 IF(.NOT.(I.GE.1))GOTO23060 ! 117 IF(.NOT.(BUFFER(I).NE.' '.AND.BUFFER(I).NE.' '.AND.BUFFER(I).NE.0) ! 118 1)GOTO23062 ! 118 GOTO23060 ! 118 23062 CONTINUE ! 119 GOTO23059 ! 119 23060 CONTINUE ! 119 N=I ! 119 IF(.NOT.(MENU.EQ.3))GOTO23065 ! 120 CALLENTAB ! 120 23065 CONTINUE ! 121 GOTO444 ! 121 404 CALLENTAB ! 122 GOTO444 ! 123 505 CALLDETAB ! 124 444 WRITE(2,2)(BUFFER(I),I=1,N) ! 125 GOTO23042 ! 126 222 WRITE(5,6)(BUFFER(I),I=1,N) ! 127 23043 CONTINUE ! 128 23042 GOTO23040 ! 129 23041 CONTINUE ! 129 666 CLOSE(UNIT=1) ! 129 CLOSE(UNIT=2) ! 130 TYPE*,' ' ! 131 TYPE*,'** OPERATION COMPLETED **' ! 132 TYPE*,' ' ! 133 TYPE*,' ' ! 134 GOTO777 ! 135 555 CALLEXIT ! 136 1 FORMAT(Q,255A1) ! 137 2 FORMAT(255A1) ! 138 3 FORMAT(1I2) ! 139 4 FORMAT(1A1) ! 140 5 FORMAT('$? ') ! 141 6 FORMAT(1H,255A1) ! 142 7 FORMAT(1H,'*',A1,'*') ! 143 END ! 144 SUBROUTINEENTAB ! 145 LOGICAL*1BUFFER(255) ! 146 COMMONN,BUFFER ! 147 OLD=1 ! 148 NEW=1 ! 149 CONTINUE ! 150 23068 IF(.NOT.(OLD.LE.N))GOTO23069 ! 150 N1=NEW ! 152 GOTO23073 ! 152 23071 NEW=NEW+1 ! 152 23073 IF(.NOT.(NEW.LT.N1+8))GOTO23072 ! 152 BUFFER(NEW)=BUFFER(OLD) ! 154 IF(.NOT.(BUFFER(OLD).EQ.' '))GOTO23075 ! 155 OLD=OLD+1 ! 157 NEW=NEW+1 ! 158 IF(.NOT.(NEW.EQ.N1+1))GOTO23079 ! 159 GOTO111 ! 159 23081 GOTO23080 ! 161 23079 CONTINUE ! 161 GOTO23072 ! 161 23080 CONTINUE ! 162 23078 CONTINUE ! 162 23075 CONTINUE ! 163 OLD=OLD+1 ! 163 IF(.NOT.(OLD.GT.N))GOTO23082 ! 164 NEW=NEW+1 ! 166 GOTO23072 ! 167 23085 CONTINUE ! 168 23082 CONTINUE ! 169 23074 CONTINUE ! 169 GOTO23071 ! 170 23072 CONTINUE ! 170 IF(.NOT.((BUFFER(NEW-1).EQ.' '.OR. BUFFER(NEW-1).EQ.' ').AND.BUFFE ! 171 1R(NEW-2).EQ.' '))GOTO23086 ! 171 J=NEW-2 ! 173 GOTO23092 ! 173 23090 J=J-1 ! 173 23092 IF(.NOT.(J.GE.N1))GOTO23091 ! 173 IF(.NOT.(BUFFER(J).NE.' '))GOTO23093 ! 174 GOTO23091 ! 174 23093 CONTINUE ! 175 GOTO23090 ! 175 23091 CONTINUE ! 175 J=J+1 ! 175 BUFFER(J)=' ' ! 176 NEW=J+1 ! 177 23089 CONTINUE ! 178 23086 CONTINUE ! 179 111 CONTINUE ! 179 23070 CONTINUE ! 180 GOTO23068 ! 181 23069 CONTINUE ! 181 N=NEW-1 ! 181 RETURN ! 182 END ! 183 SUBROUTINEDETAB ! 184 LOGICAL*1BUFFER(255),BUF(255) ! 185 INTEGEROLD ! 186 COMMONN,BUFFER ! 187 ITAB=1 ! 188 GOTO23098 ! 188 23096 ITAB=ITAB+1 ! 188 23098 IF(.NOT.(BUFFER(ITAB).NE.' '))GOTO23097 ! 188 IF(.NOT.(ITAB.EQ.N))GOTO23099 ! 189 RETURN ! 189 23099 CONTINUE ! 190 GOTO23096 ! 190 23097 CONTINUE ! 190 OLD=ITAB/8*8+1 ! 190 IF(.NOT.(ITAB.LT.OLD))GOTO23102 ! 192 BUF(ITAB)=' ' ! 192 23102 CONTINUE ! 193 NEW=OLD ! 193 CONTINUE ! 194 23105 IF(.NOT.(OLD.LE.N))GOTO23106 ! 194 N1=NEW ! 195 GOTO23109 ! 195 23107 NEW=NEW+1 ! 195 23109 IF(.NOT.(NEW.LT.N1+8))GOTO23108 ! 195 IF(.NOT.(BUFFER(OLD).EQ.' '))GOTO23111 ! 197 CONTINUE ! 199 GOTO23117 ! 199 23115 NEW=NEW+1 ! 199 23117 IF(.NOT.(NEW.LT.N1+8))GOTO23116 ! 199 BUF(NEW)=' ' ! 200 GOTO23115 ! 201 23116 CONTINUE ! 201 OLD=OLD+1 ! 201 GOTO23108 ! 202 23114 CONTINUE ! 203 23111 CONTINUE ! 204 BUF(NEW)=BUFFER(OLD) ! 204 OLD=OLD+1 ! 205 IF(.NOT.(OLD.GT.N))GOTO23118 ! 206 NEW=NEW+1 ! 208 GOTO23108 ! 209 23121 CONTINUE ! 210 23118 CONTINUE ! 211 23110 CONTINUE ! 211 GOTO23107 ! 212 23108 CONTINUE ! 212 GOTO23105 ! 212 23106 CONTINUE ! 212 I=ITAB ! 212 GOTO23124 ! 212 23122 I=I+1 ! 212 23124 IF(.NOT.(I.LT.NEW))GOTO23123 ! 212 BUFFER(I)=BUF(I) ! 213 GOTO23122 ! 214 23123 CONTINUE ! 214 N=NEW-1 ! 214 RETURN ! 215 END ! 216 SUBROUTINEHELP ! 217 TYPE*,' ' ! 218 TYPE*,' PROGRAM RID' ! 219 TYPE*,' ' ! 220 TYPE*,' ' ! 221 TYPE*,'This program''s main function is to save space by trimming ! 222 1excess' ! 222 TYPE*,'characters from files transferred to the PDP-11 from IBM or ! 223 1 CDC. For' ! 223 TYPE*,'example, programs transferred from IBM have a fixed record ! 224 1length of' ! 224 TYPE*,'80 characters, sequence numbers in columns 73 to 80, and no ! 225 1 tab' ! 225 TYPE*,'characters. Since space is a limiting factor on the PDP, i ! 226 1t is' ! 226 TYPE*,'advisable to blank out the sequence numbers, and to then ge ! 227 1t rid of' ! 227 TYPE*,'any trailing blanks and tabs, and to perform all possible b ! 228 1lank to tab' ! 228 TYPE*,'transformations, saving up to 7 characters per transformati ! 229 1on (1 tab' ! 229 TYPE*,'can replace 8 blanks). The first two operations alone can ! 230 1reduce' ! 230 TYPE*,'program size by 70%.' ! 231 TYPE*,' ' ! 232 TYPE*,' ' ! 233 TYPE*,'The other functions performed by this program are: expandi ! 234 1ng all tabs' ! 234 TYPE*,'in a file to blanks so that character position matches colu ! 235 1mn number,' ! 235 TYPE*,'and changing a file attribute to CARRIAGECONTROL=''LIST'' i ! 236 1n order to' ! 236 TYPE*,'get a normal PIP listing. A file created by a Fortran OPEN ! 237 1 statement' ! 237 TYPE*,'will default to CARRIAGECONTROL=''FORTRAN'' if the LIST opt ! 238 1ion is not' ! 238 TYPE*,'specified, which presupposes that all output to a file incl ! 239 1udes a' ! 239 TYPE*,'carriage control character. Otherwise, the first character ! 240 1 of every' ! 240 TYPE*,'line is interpreted for carriage control and is not printed ! 241 1. However,' ! 241 TYPE*,'carriage control characters should not be used in source fi ! 242 1les since' ! 242 TYPE*,'they offset the code and cause errors in compilation.' ! 243 TYPE*,' ' ! 244 WRITE(5,10) ! 245 READ(5,20) ! 246 TYPE*,' ' ! 247 TYPE*,' ' ! 248 TYPE*,'This program gets rid of sequence numbers by first invoking ! 249 1 the' ! 249 TYPE*,'subroutine DETAB which ensures equivalence of character pos ! 250 1ition and' ! 250 TYPE*,'column number, and then replacing the characters in the col ! 251 1umns' ! 251 TYPE*,'indicated with blanks. This routine does not distinguish b ! 252 1etween' ! 252 TYPE*,'sequence numbers and comments, for instance, so it is best ! 253 1to process' ! 253 TYPE*,'files soon after transferring them over to the PDP, before ! 254 1editing' ! 254 TYPE*,'changes any columnar relationships. If the record length o ! 255 1f any one' ! 255 TYPE*,'line is shorter than the last column position given for seq ! 256 1uence' ! 256 TYPE*,'numbers, the line will remain as is, and the user is respon ! 257 1sible for' ! 257 TYPE*,'editing out any stray sequence numbers.' ! 258 TYPE*,' ' ! 259 TYPE*,' ' ! 260 TYPE*,'Remember to purge your files after running this program, bu ! 261 1t not' ! 261 TYPE*,'until results have been checked, especially when the operat ! 262 1ion' ! 262 TYPE*,'performed was ridding a file of sequence numbers. Generall ! 263 1y,' ! 263 TYPE*,'original files will remain intact and new versions will be ! 264 1created' ! 264 TYPE*,'(unless the version number was specified in the input file ! 265 1name and no' ! 265 TYPE*,'new output file name was given).' ! 266 TYPE*,' ' ! 267 TYPE*,' ' ! 268 TYPE*,'If you become stuck in an input loop and cannot remember th ! 269 1e name of' ! 269 TYPE*,'the file to be processed, enter a CTRL Z for a clean exit.' ! 270 TYPE*,' ' ! 271 TYPE*,' ' ! 272 WRITE(5,10) ! 273 READ(5,20) ! 274 RETURN ! 275 10 FORMAT('$ENTER WHEN READY TO CONTINUE') ! 276 20 FORMAT(80A1) ! 277 END ! 278