fseipel@hpuxa.ircc.ohio-state.edu (Frank E. Seipel) (03/09/91)
From A.N.A.L.O.G. Computing, Issue #27, February 1985 Instant Renumber 16K Cassette or 24K Disk by Angelo Giambra How would you like to instantly renumber any BASIC program by merely pressing the START key on yor computer console? Instant Renumber will load into your computer a machine language renumber utility, which will jump into action every time you press the START key. Here's how to use it. Loading it in. First, key in Instant Renumber, making sure to key the data statements accurately. Save it to cassette or disk before running it. There are two reasons for this: first, if you made any errors keying in the DATA statements, your system will probably lock up when you run the program. Second, after the program runs correctly, it self-destructs. I'll explain why later. After you've saved the proram, run it. Your screen will go black for about thirty seconds while the DATA statements are being read into memory. Finally, you will see a message similar to the following on your screen: RENUMBER INSTALLED AT DECIMAL ADDRESS 7292 On your computer, this number may differ. Jot this address down on a piece of paper for reference. I'll explain why later in this article. Instant Renumber is now resident. It will remain on the job until you press SYSTEM RESET or turn off your computer. Using it. To activate it, load any BASIC program into memory. List a few lines of it on your screen. Now press the START key on your console. The message INSTANT RENUMBER appears on your screen, and a second later the READY prompt appears. Your program has just been renumbered in increments of ten. This renumber utility resolves all references to line numbers in statements such as GOTO, GOSUB, IF...THEN, etc. If the utility encounters no problems, it simply ends with the READY prompt. Otherwise, after resequencing your program, it reports problems to you in the following manner. Suppose you have this program line: 50 GOSUB 1000 If Line 1000 is nonexistent, Instant Renumber reports it this way: NF 50 This means that, on Line 50, the target address (1000) was not found. You must correct incorrect line numbers manually. Symbolic references are handled in a similar manner. Consider this line of BASIC: 20 GOTO NEXTLINE Instant Renumber will report this as follows: SR 20 This means that, on Line 20, there is a symbolic reference. You'll have to adjust these yourself. Not all messages indicate an error. Sometimes we turn off the TRAP statement by assigning it to a non-existent number, such as TRAP 40000. The Instant Renumber program will report lines which use this convention with an NF message, although they are not truly errors. Never activate Instant Renumber until you have listed the program to the screen. It is not necessary to list the entire program. Just type in LIST, press RETURN, then immediately press the BREAK key. You must do this, because BASIC keeps a set of internal pointers which tell it where program lines begin and end. When you add or delete lines, BASIC sometimes does not update its pointers until several changes have been made. Instant Renumber needs these pointers to be current. Listing the program forces BASIC to do an update. Sometimes you may want to renumber your program in increments other than ten. Instant Renumber may be activated manually. Earlier, I told you to jot down the decimal address that appears on the screen after the utility installs itself. To manually run it, key in a USR statement like the following: X=USR(7292,100,5) In this example, 7292 represents the decimal address you jotted down. Remember, your number may differ. The next number, 100, is the base number. It tells Instant Renumber that you want your first program line to be resequenced as Line 100. The last number, 5, tells the utility to increment each successive line by 5. How it works. Here's how the program works. It first installs Instant Renumber in low memory. This varies on different systems, depending on -- among other things -- whether you have cassette or disk. It protects the utility by altering the LOMEM pointer to point to the end of the machine language code. That way, BASIC will never use the memory occupied by Instant Renumber. That's why the program vanishes after you run it. Altering the LOMEM pointer forces BASIC to realign all of its internal pointers, and it loses track of where the current program is! Next, the program activates a vertical blank interrupt routine, which also resides in low memory. A VB interrupt routine is a series of instructions your computer executes every sixtieth of a second. You don't know its running, but it is always there. The VB interrupt is constantly checking to see if you have pressed the START key. If you have, it activates Instant Renumber. One final note for those of you with disk drives. When you key in DOS, the DUP.SYS file begins to load into the same area of memory occupied by the VB interrupt routine. Normally, this would cause the system to lock up. The program guards against this by providing an automatic SYSTEM RESET the first time you key in DOS. Instead of going to the familiar DOS menu, your screen will flicker, and you will remain in BASIC. Simply key in DOS again to go to the DOS menu. Fast relief. Because Instant Renumber is written entirely in machine language, it is incredibly fast. Even programs which exceed 500 lines are renumbered in less than two seconds. I think you'll find Instant Renumber an invaluable tool. Renumbering your BASIC program was never so easy. uuencoded. ------------------------cut here----------------------------- begin 0666 RENUMBER.BAS M 3D!.@&Z ;X6U!;)041$TD%$1%*Q042R042Q3$]-1<U!34]53M1(24U% MS='!0T]53M1,STC)3T9&4T7424Y35$%,S-@ 0 " M , ! % 8 !P M ( D "@ + P #0 M . \ !D " @ $%34T5-0DQ%4B!214Y534)%4B!5 M5$E,2519FVX %Q< 0ED@04Y'14Q/($=)04U"4D&;> &!@";@@ C(P!324Y# M12!42$4@4D5.54U"15(@551)3$E462!)4YN, "(B $Y/5"!&54Q,62!214Q/ M0T%404),12P@0D%324.;E@ C(P!,3T]+4R!&3U(@5$A%($I34B=3($%.1"!& M25A%4YN@ !,3 %1(12!!1$1215-315.;J@ &!@";M H#S: +0Y!!Y0 4 M* !35$%25"!/1B!(04Y$3$52(%1!0DQ%F[X *1$'/CI&.H L+# / 44;'S: M+8 E#D # !0I"@Y! 9 6R !.,3:!+48Z@"4.0 $ +"5&.H E M#D " "PD#D$"5@ "4.0 8 %$X 1T54($5$251/4B!0551"651% M($%$1%)%4U.;T@!'*3:"+48Z@2PE1CJ!)0Y 0 L) Y! E8 E#D ! M !1' $-/4%D@141)5$]2(%!55$)95$4@041$4D534YO< "04-H,M4#J" M)PY! E8 L%"0VA"V")H,D#D$"5@ !;F $,E!H4M1CH.00=# +"5& M.@Y!!T0 L) Y! E8 4-Q\.0059 $@X 40S:&+0Y" E M 6\ J)#:'+2M&.@Y! 08 L)@Y %@ L) Y! E8 4*C: +8<6 M^@ ;%PB(+0X 9#D$' @ !0;(HD6! %500>*(@Y %0 IBB(. M0(0 *8HB#D$"" "F*(@Y! D< IBB(.00)2 *8HB#D$"5P M !M+# Y! P 450H.00)@ %@X!2S<'BB(.00)@ *8HB#D$$ P M "F*(@Y!! @ IBB(.0003 *8HB#D$$* !M!# Y! P 42PH. M00)@ %A@!2S<'BB(.001$ *8HB#D$$40 "F*(@Y!!%D IBB(. M002 *8HB#D$%& !M!# Y! P 42PH.00)@ %B(!,PD?@!*) M%!<V@"V )0Y 0 4)3:*+8HE#D ! !0I"8@4,PH.00- %BP! M'PD?@!*)%!<V@"V )0Y 0 4&R*+%!\BC!8V 2\9!XLB#@ "J, M(@X ;'S:++804)3:,+8,4+PH.00,P %D !0A,V@2V+)0Y! E8 M DC!0;-HTM@2:&%# VC"U0.BN%)8TL)PY! E8 L%$(VBRV%)8TFC"0. M00)6 %DH!3@D?@!*+%!<V@"V )0Y 0 4'1^ $HP4*S: +8 E#D ! M !0Y-HHMBB4.0 , %#TBB11+-H@MB"4.0 , %$XD%E0!'PDV MB"V %!,-#D$#@ !0?-HHM#@ !9> 0<'(HD6: $W(P>*(@Y! 9, M IBB(.00)" *8HB#D$"9 !LM# Y!!$ 4-PH.00-@ %G(! M+PD?B!*)%!<VB"V()0Y 0 4)3:*+8HE#D ! !0O"@Y! U 6 M? $K)3:.+48Z#D$'0P "PE1CH.00=$ +"0.00)6 %"LH#P%]%H8! M5A4M#D 0 !(.0 < %"PH#Q)214Y534)%4B!)3E-404Q,1404/BT. M0! $@Y " 45B@/$T%4($1%0TE-04P@041$4D534R 6D $K%2T. M0!8 $@Y $ 4&2B.%"LM#@ !(.0", %IH!%14?#D$% M60 !(.0#0 %J0!$! VCRT_.H \ASR +!:N 08&%1:X 1\)'X@2B107 M-H@MB"4.0 $ %!LBBQ0?(HP6P@% "1^($H04%S:(+8@E#D ! !0= M'X@2@Q0K-H@MB"4.0 $ %#DVBBV*)0Y P 4/2*)%$ D%LP!5U<! M,3 T+#(P,2PR+#(T,"PR,"PQ-S L,C0P+#4L,3 T+#$P-"PR,#(L,C X+#(U M,2PQ-CDL,C4S+#,R+# L,"PQ-CDL,RPQ,S,L,3@U+#<V+#8TF]8!964!,3@U M+#$P-"PQ,S,L,C,R+#$P-"PQ,S,L,C,Q+#$P-"PQ,#0L,3,S+#(S,RPQ-C4L M,3,V+#$S,RPR,#,L,38U+#$S-RPQ,S,L,C T+#$V-2PR,S$L,3,S+#(R.2PQ M-C6;X %B8@$R,S(L,3,S+#(S,"PQ-C L,"PQ-S<L,C S+#$S,RPR,#4L,C P M+#$W-RPR,#,L,3,S+#(P-BPU-BPQ-C4L,C S+#(R.2PQ,S@L,38U+#(P-"PR M,CDL,3,Y+#(T,)OJ 5]? 34T+#(P,"PQ-S<L,C S+#$S,RPR,#<L,C P+#$W M-RPR,#,L,3,S+#(P."PR,# L,S(L-#,L.3@L,38U+#(P."PQ.3<L,C W+#(P M."PR."PQ-C4L,C S+#(TF_0!7EX!,3 Q+#(P-RPQ,S,L,C S+#$V-2PR,#0L M,3 U+# L,3,S+#(P-"PQ-C4L,C(Y+#(T+#$P,2PR,S,L,3,S+#(R.2PQ-#0L M,BPR,S L,C,P+#$V,"PP+#(T,)O^ 5M; 3$X."PQ-C0L,C X+#$V.2PP+#(T M,"PR,#@L,38Y+# L,C0P+#,U+#$W-RPR,#,L,C Q+#$P+#(T,"PS,2PR,#$L M,3$L,C0P+#(W+#(P,2PQ,BPR-#";" )550$R,RPR,#$L,3,L,C0P+#$Y+#(P M,2PS-2PR-# L,34L,C Q+#,P+#(T,"PU+#(P,2PW+#(T,"PS+#DV+#(T,"PW M,2PR-# L-S$L,C0P+#<SFQ("7U\!,C P+#$W-RPR,#,L,C Q+#(P+#(T,"PV M."PR,#$L,C(L,C0P+#8T+#(P,2PQ-"PR,#@L-C(L,C P+#$S,BPR,C<L,3<W M+#(P,RPQ,S,L,C$R+#(P,"PQ-S>;' )B8@$R,#,L,3,S+#(Q,RPR,# L,3<W M+#(P,RPQ,S,L,C$T+#(P,"PQ-S<L,C S+#$S,RPR,34L,3,V+#$S-BPQ,S8L M,S(L,C(Q+#DY+#$V-2PR,S4L-38L,C(Y+#(P-9LF EI: 3$V-2PR,#8L,C0P M+#$Q+#$V-2PR,S8L,3<V+#4L-38L,C,S+#$L,30T+#,Y+#(R.2PR,#8L,30T M+#,U+#$W-BPV,2PR-# L-3,L,C0P+#4S+#$T-)LP DY. 3$X-"PR-# L-#4L M,C P+#DV+#$V.2PX,RPS,BPP+# L,38Y+#@R+#,R+# L,"PQ-CDL,S(L,S(L M,"PP+#,R+#<R+#DY+#$V-9LZ F%A 3(R-RPQ-C@L,C P+#DV+#$V-2PQ,S8L M,3,S+#(R,"PQ-C4L,3,W+#$S,RPR,C$L,38U+#(S,2PQ,S,L,C$X+#$V-2PR M,S(L,3,S+#(Q.2PQ-CDL,"PR-# L,C2;1 )E90$R-# L,3 S+#(T,"PQ,#,L M,C0P+#$P,RPQ-#0L,3DY+#$V-2PR,#,L,3,S+#(R,"PQ-C4L,C T+#$S,RPR M,C$L,38U+#(R.2PQ,S,L,C$X+#$V-2PR,S L,3,S+#(Q.9M. F!@ 3$V-2PR M,C L-38L,C(Y+#$S."PR,# L,38U+#(R,2PR,CDL,3,Y+#(T,"PW-RPQ-C L M,"PQ-C4L,C,U+#4V+#(T,2PR,C L,3,S+#(R,RPR,# L,38U+#(S-IM8 EA8 M 3$W-BPU+#4V+#(S,RPQ+#$T-"PU."PR-#$L,C(P+#$S,RPR,C0L,30T+#4R M+#$V-2PR,C,L,C Q+# L,C X+#8L,38U+#(R-"PR,#$L,"PR-#";8@)<7 $R M."PQ-C4L,C$X+#(T+#$P,2PR,S,L,3,S+#(Q."PQ-#0L,BPR,S L,C$Y+#$V M-2PR,C L,C0L,38P+#(L,3$S+#(R,"PQ,S,L,C(P+#$T-"PR+#(S,)ML E96 M 3(R,2PQ-CDL,"PR-# L,3<Y+#$V.2PP+#(T,"PX-RPR-# L-S<L,C0P+#<W M+#(T,"PW-RPQ-#0L,30Y+#$V.2PW."PS,BPP+# L,38Y+#<PFW8"554!,S(L M,"PP+#$V.2PS,BPS,BPP+# L,38Y+#$L,3,S+#(R."PQ-C4L,C(Y+#$S,RPR M,3@L,38U+#(S,"PQ,S,L,C$Y+#,R+#(T,2PY.2PS,IN E)2 3(S,"PR,38L M,38P+# L,3,R+#(R,RPQ-S<L,C0S+#$V+#DL-#$L,3(W+#,R+# L,"PQ-CDL M,S(L,C X+#@L,S(L,"PP+#$V-"PR,C.;B@)<7 $R,# L,C X+#(S,RPS,BPP M+# L,38U+#(R-RPQ-C@L,C P+#(P,"PR,# L,C P+#(P,"PR,# L.38L,C0P M+#4Y+#(T,"PQ-RPR-# L-3@L,30T+#$W-9N4 EY> 3,R+#(T,2PY.2PQ-C4L M,C(W+#$V."PR,# L,C P+#(P,"PR,# L,C P+#(P,"PY-BPR,# L,3<W+#(P M,RPR,#$L,C,L,C0P+#$W+#(P,2PR-"PR-# L,3.;G@)75P$R,#$L,30L,C X M+#4L,34R+#(T+#$P-2PV+#$V."PQ-CDL,"PR-# L,C,R+#(P,"PS,BPX,2PY M."PQ-S<L,C S+#(P,2PR,"PR-# L."PR,#&;J )86 $R,BPR-# L-"PR,#@L M,C0P+#(T,"PT."PY-BPR,# L,3<W+#(P,RPR,#$L,C<L,C0P+#$S+#(P,2PQ M-"PR,#@L-2PQ-3(L,C0L,3 U+#8L,38XF[("75T!,38Y+# L,C0P+#(S-BPR M,# L,34R+#$Y-RPR,#@L,3<V+#(L,30T+#$W,"PY-BPQ-CDL,"PQ,S,L,C$V M+#$S,RPR,3<L,S(L,C$P+#(Q-RPQ-C4L,C$RF[P"8& !,3,S+#(S-2PQ-C4L M,C$S+#$S,RPR,S8L.38L,C0P+#0W+#$V-2PR,3@L,3,S+#(Q,BPQ-C4L,C$Y M+#$S,RPR,3,L,S(L,3<P+#(Q-RPQ-C4L,C(X+#(P,2PQF\8"9&0!,C0P+#(U M+#$V-2PR,C<L,38X+#$V-2PR,3(L,30U+#(P,RPR,# L,38U+#(Q,RPQ-#4L M,C S+#(P,"PQ-C4L,C$T+#$T-2PR,#,L,C P+#$V-2PR,34L,30U+#(P,YO0 M F)B 3(P,"PR,# L,C P+#$V.2PP+#$S,RPR,C@L.38L,38U+#$S-BPQ,S,L M,C S+#$V-2PQ,S<L,3,S+#(P-"PQ-C4L,C,Q+#$S,RPR,CDL,38U+#(S,BPQ M,S,L,C,PF]H"7EX!,38U+#(P,RPU-BPR,CDL,3,X+#$V-2PR,#0L,C(Y+#$S M.2PR-# L-#,L,38P+#(L,3<W+#(P,RPQ,S,L,C(S+#$V-2PR,CDL,C0L,38P M+# L,30U+#(P,YOD F!@ 3$V-2PR,S L,C P+#$T-2PR,#,L,38U+#(R.2PQ M,#$L,C,S+#$S,RPR,CDL,30T+#(L,C,P+#(S,"PR-"PQ-C4L,C S+#$P,2PR M,C,L,3,S+#(P,RPQ-#0L,ION AX> 3(S,"PR,#0L,38Y+# L,C0P+#(P,BPY M-IOX EE9 3$V.2PP+#$S,RPX+#$S,RPR+#$V-2PY+#(T,"PX+#$V.2PQ,38L M,3,S+#$P+#$V.2PR,C@L,3,S+#$Q+#$P-"PQ,#0L,3,S+#(P."PQ,#0L,3,S MFP(#6EH!,C W+#$P-"PQ,S,L,C V+#$P-"PQ,S,L,C U+#4V+#$W,RPR,S$L M,BPQ,S,L,C S+#(S,RPQ+#$S,RPP+#$W,RPR,S(L,BPQ,S,L,C T+#(S,RPP MFPP#65D!,3,S+#$L,38P+# L,3<W+#(P-RPQ-#4L,C S+#(T+#$V-2PR,#,L M,3 U+#$L,3,S+#(P,RPQ-#0L,BPR,S L,C T+#(T+#$V-2PR,#<L,3 U+#&; M%@-B8@$Q,S,L,C W+#$T-"PR+#(S,"PR,#@L,38U+#(P."PQ.3<L,C V+#(P M."PR,C0L,38U+#(P-RPQ.3<L,C U+#(P."PR,3@L,C0L,38U+#(P-RPQ,#4L M,30Y+#$S,YL@ UU= 3(P-RPQ-C4L,C X+#$P-2PP+#$S,RPR,#@L,38P+# L M,38U+#(P,RPQ,S,L-"PQ-C4L,C T+#$S,RPU+#$W-RPR,#<L,30U+#(P,RPR M,# L,3DR+#$U.)LJ UM; 3(P."PR-#<L,C0L,38U+#(P,RPQ,#4L,34X+#$T M,2PR,S$L,BPQ-C4L,C T+#$P-2PP+#$T,2PR,S(L,BPQ-CDL-RPQ-C0L,C S M+#$V-BPR,#0L,S*;- -45 $Y,BPR,C@L-S8L,"PQ-C L,3<S+#,Q+#(P."PR M,#$L-RPR,#@L-BPQ-CDL,"PQ,S,L,BPR-# L,3$W+#(P,2PV+#(P."PQ,3,L M,38U+#*;/@-550$R,#@L,3 Y+#<S+#$L,3,S+#(L,38P+# L,C0L,38U+#0L M,3 U+#$S,RPQ,S,L,C S+#$V-2PU+#$P-2PP+#$S,RPR,#0L,3,R+#,L,3<W MFT@#4E(!,C S+#,R+# L,"PQ-C0L,RPR,# L,3DR+#$X+#(P."PR-#(L,C0L M,38U+#0L,3 U+#DP+#$S,RPV+#$V-2PU+#$P-2PP+#<R+#$V-9M2 TY. 38L M-S(L,38Y+#$P+#<R+#$V.2PP+#<R+#$V.2PQ,"PW,BPQ-CDL,"PW,BPQ-CDL M,BPW,BPQ-C4L,2PW,BPQ-C4L,"PW,BPY-IM< U55 3$V.2PQ-34L,S(L,"PP M+#$V,"PP+#(T+#$V-2PT+#$P-2PQ-3$L,3,S+#(P,RPQ-C4L-2PQ,#4L,"PQ M,S,L,C T+#$S,BPS+#$W-RPR,#.;9@-86 $S,BPP+# L,38T+#,L,C P+#$Y M,BPV+#(P."PR-#(L,38Y+#$T,RPQ-#$L,C4R+#(L-S8L.3@L,C(X+#$R-2PR M,#$L,C V+#(Q,2PR,3(L,3DSFW #1T<!,C V+#(Q,BPS,BPR,3 L,3DW+#(P M-BPR,3,L,C U+#$Y-"PQ.3<L,C$P+#$U-2PX,BPV.2PV-2PV."PX.2PQ-36; M ( 6%AD/#D0Z4D5.54U"15(N0D%3%F)B8F)B8F)B8F)B8F)B8F)B8F)B8F)B '8F)B8F)B8D0Z end