3 ! 6 ! 9 !COPYRIGHT (C) 1979 BY DIGITAL EQUIPMENT CORPORATION 12 ! 15 ! 18 ! 21 !THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE 24 !AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT 27 !CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY 30 !FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. 33 ! 36 !THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER 39 !UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED 42 !(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH 45 !SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. 48 ! 51 !DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE 54 !OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY 57 !DIGITAL. 60 ! 63 ! 66 ! 69 !------------------------------------------------------------ 72 ! PROGRAM RESEQ.BA (VERSION V7) 75 ! REWRITTEN BY J. REID FEBRUARY 6,1979 78 ! RESEQUENCES LINE #'S IN A BASIC PROGRAM. 81 ! A FILENAME,NEW STARTING # AND STEP SIZE ARE INPUT. 84 !----------------------------------------------------------- 87 ! ------ PART1 ------ THIS PART INSPECTS EACH LINE# 90 ! AND SAVES IT IN ARRAY N 93 DIM L$(80),N$(16) 96 DIM L2$(80),T$(1),R5$(6) 99 DIM N(500),L3$(80),L4$(80) 102 T$=CHR$(34) 105 Z9=0 108 PRINT "FILE"; 111 INPUT N$ 114 IF POS(N$,".BA",1)<>0 THEN 120 !SEE IF .BA IN FILENAME 117 N$=N$&".BA" !ADD .BA IF NOT THERE 120 PRINT "START,STEP"; 123 INPUT S1,S 126 LET S1=INT(ABS(S1)) 129 LET S=INT(ABS(S)) 132 LET T=0 135 LET N2=0 138 FILE #1:N$ 141 LET I=1 144 INPUT #1:L$ !GET A LINE 147 IFEND #1 THEN 207 !END- GO TO PART2 150 LET L=LEN(L$) 153 GOSUB 573 !GET OLD LINE # =N1. 156 IF N1>0 THEN 171 159 PRINT "NO LINE NUMBER" 162 Z9=1 165 PRINT L$ 168 GO TO 141 171 IF N1>N2 THEN 186 174 PRINT "OUT OF SEQUENCE" 177 Z9=1 180 PRINT L$ 183 GO TO 141 186 LET N2=N1 !N2=PRESENT LINE #. 189 LET T=T+1 192 LET N(T)=N1 !SAVE OLD LINE #'S IN ARRAY N 195 IF T<500 THEN 141 198 PRINT "TOO MANY LINES" 201 STOP 204 ! ------ PART2 ------ THIS PART RESEQUENCES 207 IF Z9=1 THEN 201 !EXIT IF LINE#'S INCORRECT 210 RESTORE #1 !REOPEN INPUT FILE 213 FILEV #2:N$ !OPEN INPUT FILE FOR OUTPUT 216 LET N2=S1 !N2=NEW LINE # 219 INPUT #1: L$ !GET A LINE 222 IFEND #1 THEN 351 225 LET I=1 !POINTER I AT BEG. OF LINE (SUB6) 228 LET L=LEN(L$) 231 GOSUB 573 !GET OLD LINE # AGAIN (N(T))? 234 LET L2$=STR$(N2) !SO I IS AFTER LINE # 237 PRINT #2: L2$; !OUTPUT NEW LINE # 240 LET N2=N2+S 243 LET L$=SEG$(CAP$(L$),I,80) !L$=LINE WO/LINE# 246 LET F=0 249 LET D=POS(CAP$(L$),"\",1) \ LET P=D!SEE IF BACKSLASH IN LINE 252 IF D=0 THEN 261 255 LET L2$=SEG$(CAP$(L$),P+1,80) !IF BACKSLASH, SPLIT LINE 258 LET L$=SEG$(CAP$(L$),1,P-1) !L$=FIRST STATEM.,L2$=THE REST 261 R5$="ON"\GOSUB 603\I=R+2 !LOOK FOR "ON","GOTO", --ETC. 264 IF I>2 THEN 306 267 R5$="GOTO"\GOSUB 603\I=R+4 270 IF I>4 THEN 300 273 R5$="GO TO"\GOSUB 603\I=R+5 276 IF I>5 THEN 300 279 R5$="THEN"\GOSUB 603\I=R+4 282 IF I>4 THEN 300 285 R5$="GOSUB"\GOSUB 603\I=R+5 288 IF I>5 THEN 300 291 R5$="GO SUB"\GOSUB 603\I=R+6 294 IF I>6 THEN 300 297 GOTO 309 300 GOSUB 360 303 GOTO 309 306 GOSUB 393 309 IF F=0 THEN 315 312 PRINT #2:"\"; 315 PRINT #2:L$; 318 LET F=F+1 321 IF D>0 THEN 330 324 PRINT #2: 327 GO TO 219 330 LET D=POS(CAP$(L2$),"\",1) \ LET P=D !MORE BACKSLASHES IN L2$? 333 IF D>0 THEN 342 336 LET L$=L2$ 339 GO TO 261 342 LET L$=SEG$(CAP$(L2$),1,P-1) !L$=NEXT STATEMENT IN LINE 345 LET L2$=SEG$(CAP$(L2$),P+1,80) !L2$=REST OF LINE 348 GO TO 261 !LOOK FOR BRANCHES,ETC... 351 CLOSE #2 !DONE! 354 STOP 357 ! ------ SUB1 ------ HERE IF BRANCH FOUND 360 O1=0 363 GOSUB 462 !FIND 1ST NUMERAL (SUB3) 366 IF C<0 THEN 381 !IF NO NUMBER FOUND 369 GOSUB 507 !GET NEW LINE# (SUB4) 372 IF N1=0 THEN 381 !IF NO NUMBER 375 L$=SEG$(CAP$(L$),1,P-1)&Q$&SEG$(CAP$(L$),I,80) 378 RETURN !FORM NEW STATEMENT 381 PRINT "BAD REFERENCE (SUB1)" 384 PRINT L$ 387 RETURN 390 ! ------ SUB2 ------ HERE IF "ON" FOUND 393 O1=1 396 L3$=L$ !SAVE L$ 399 K=0 402 K=K+1 405 GOSUB 462 !GET LINE# 408 IF C>= 0 THEN 417 411 IF K=1 THEN 453 414 GOTO 447 417 GOSUB 507 !GET NEW LINE# 420 IF N1>0 THEN 429 423 IF K=1 THEN 453 426 GOTO 447 429 IF K=1 THEN 441 432 L3$=L3$&","&Q$ !FORM NEW LINE 435 L4$=SEG$(CAP$(L$),I,80) 438 GOTO 402 441 L3$=SEG$(CAP$(L$),1,P-1)&Q$ 444 GOTO 402 447 L$=L3$&L4$ 450 RETURN 453 PRINT "BAD REFERENCE (SUB2)" 456 PRINT L$ 459 RETURN 462 ! ------ SUB3 ------ HERE TO GET POINTER AT NUMERAL 465 LET L=LEN(L$) 468 GOSUB 552 !GET ASCII CHAR. AT I 471 IF O1=0 THEN 486 !IF "ON" SKIP OVER NON-NUMERALS 474 IF C<0 THEN 504 477 IF C<48 THEN 468 480 IF C>57 THEN 468 483 GOTO 492 486 IF C=32 THEN 468 489 IF C<0 THEN 504 !IF NO NUMBER FOUND 492 LET I=I-1 !I=POINTER AT 1ST NUMERAL 495 IF O1=0 THEN 501 498 IF K<>1 THEN 504 501 LET P=I !SAVE THIS POSITION 504 RETURN 507 ! ------ SUB4 ------ HERE TO GET NEW LINE# 510 GOSUB 573 !GET OLD LINE# FIRST 513 IF N1=0 THEN 531 !IF NO LINE NUMBER FOUND 516 FOR J=1 TO T !THIS LOOP FINDS OLD LINE# IN N(T) 519 IF N1<>N(J) THEN 528 522 LET Q$=STR$(J*S-S+S1) !NEW LINE# COMPUTED 525 RETURN 528 NEXT J 531 RETURN 534 ! SUB5 AND SUB6 GET AN OLD LINE# 537 ! INPUTS: I=CHARACTER POINTER 540 ! L$=STATEMENT TO BE SCANNED 543 ! OUTPUT: C=ASCII CODE FOR CHAR. AT I 546 ! N1=OLD LINE# 549 ! I=POINTER AT CHAR. AFTER N1 552 ! ------ SUB5 ------ 555 IF I<=L THEN 564 !POINTER WITHIN STATEMENT? 558 LET C=-1 !SCANNING BEYOND END 561 RETURN 564 LET C=ASC(SEG$(CAP$(L$),I,I)) !GET ASCII CODE FOR CHAR. AT I 567 LET I=I+1 !INCREMENT POINTER 570 RETURN 573 ! ------ SUB6 ------ 576 LET N1=0 !INITIALIZE LINE# 579 GOSUB 552 582 IF C<48 THEN 594 !SEE IF CHAR. A NUMERAL 585 IF C>57 THEN 594 ! 588 LET N1=N1*10+C-48 !FORM LINE NUMBER HERE 591 GO TO 579 !GET NEXT NUMERAL 594 IF C<0 THEN 600 !RETURN IF NO LINE# 597 LET I=I-1 !POSITION POINTER I AFTER N1 (LINE#) 600 RETURN 603 ! ------ SUB7 ------ HERE TO FIND "GOTO","THEN" --- ETC. 606 L5=LEN(L$) 609 R=POS(CAP$(L$),R5$,1) !SEE IF R5$ IN LINE AT ALL 612 IF R=0 THEN 732 !IF NOT THEN RETURN 615 B=1 618 C1=POS(CAP$(L$),"!",B) !FIND ! 621 R1=POS(CAP$(L$),"REM",B) !FIND REMARK 624 IF R1=0 THEN 651 627 IF C1L5-1 THEN 651 648 GOTO 621 651 B=1 654 IF C1=0 THEN 681 657 GOSUB 735 !GET G1 AND G2 (PAIR OF QUOTES) 660 IF G1=0 THEN 681 !IF NO QUOTES 663 IF G2=0 THEN 723 !IF NOT A PAIR 666 IF C1L5-1 THEN 681 675 C1=POS(CAP$(L$),"!",B) !LOOK FOR! (COMMENT TYPE) 678 GOTO 654 681 B=1 684 R=POS(CAP$(L$),R5$,B) !LOOK FOR R5$ 687 IF R=0 THEN 732 690 IF R1=0 THEN 696 693 IF R>=R1 THEN 729 696 IF C1=0 THEN 702 !IF NO! 699 IF R>=C1 THEN 729 !R5$ IN COMMENT AREA? 702 GOSUB 735 !GET PAIR OF QUOTES (G1,G2) 705 IF G1=0 THEN 732 708 IF G2=0 THEN 723 711 IF RL5-1 THEN 729 !END OF L$? 720 GOTO 684 723 PRINT "UNPAIRED QU0TES" 726 PRINT L$ 729 R=0 732 RETURN 735 ! ------ SUB8 ------ HERE TO FIND QUOTES IN L$ 738 G1=POS(CAP$(L$),T$,B) !G1=1ST QUOTE 741 G2=POS(CAP$(L$),T$,G1+1) !G2=2ND QUOTE 744 RETURN 747 END