þþ*dX;INSTANT RENUMBERnX;by A. GiambraxX;‚¨aŒX;–X;OS EQUATES X;ªƒFPAæØ;;FP TO ASCII´ƒFPIÒÙ;;FP TO INTEGER¾ƒIFPªÙ;;INTEGER TO FPÈ †INBUFFóÒX;ÜX;WORK AREASæX;ð …PRINTúX;!X;NOTE: BASIC WILL LOOK UP THEX;EDITOR PUTBYTE ADDRESS ANDX;FILL THIS IN FOR US"X;,‡POINTERˆ6 …INDEXË@ ƒEOPŠJ‡LINELOWÍT †LINEHIÎ^ŠLINEOFFSETÏh‹STATEOFFSETÐr‡CURLINEå|‡LINENO1Ô†‡LINENO2Õ‡LINENO3Öš‡LINENO4פ‡LINENO5Ø®‡LINENO6Ù¸ ƒFROÔ‰REFLINELOë̉REFLINEHIìÖ‡FUTLINEÚà †SINDEXÜê …TEMP1ßô …TEMP2àþ …TEMP3á …TEMP4â …SAVEYã „FLAGä& „BASEç0 „INCRé: ƒERR¹D …ERROR@¹N …SPACE XX;b7lR>;;CORRECT NO.vFŠGOODPARAMS;;OF PARAMETERS?€>Š FˆRINGBELL” ‡ERRLOOPž 7;;ERROR¨7;;WRONG PARAMETERS²0¼ H‡ERRLOOPÆ ˆRINGBELLÐQ>ý;;BELL RINGERÚ …PRINTäQ>;;RETURN AN ERRORîPƒERRø !…ERRORŠGOODPARAMS 7;;THROW AWAY HIGH BYTEP„BASE;;STORE BASE 7* P„BASE47>7;;THROW AWAY HIGH BYTEHP„INCR;;STORE INCREMENTRQ‡POINTER;;BASIC'S POINTER\P…INDEX;;TO PROGRAM CODEfQ‡POINTERp P…INDEXz Q„BASE„P‡CURLINE;;SAVE BASE HEREŽ Q„BASE˜P‡CURLINE¢%>¬„LOOPQ@…INDEX7;;GET LINENO¶P‡LINELOW;;STORE ITÀ3ÊQ@…INDEX7;;LOAD HI BYTEÔ P†LINEHIÞ;è Q…INDEXòSƒEOPüQ…INDEX;;HAVE WE REACHEDSƒEOP;;END OF PROG?F†RESEQA;:THEN GO RESEQ3$ Q@…INDEX7. PŠLINEOFFSET;;GET LINE OFFSET83BŒNXTSTATEMENTQ@…INDEX7L&P‹STATEOFFSET;;GET STATEMENT OFFSETV3` ŠCHECKTOKENjQ‹STATEOFFSETtRŠLINEOFFSET;;END OF LINE?~HNEXTSTATEMENTˆQ…INDEX;;INCREMENT INDEX’,;;BY OFFSETœOŠLINEOFFSET¦ P…INDEX° Q…INDEXºO>Ä P…INDEXÎ Q‡CURLINEØ,â O„INCRìP‡CURLINE;;INCREMENT LINE NOöDƒNX2#‡CURLINE ƒNX2%>;;RESET INDEX F„LOOP(NEXTSTATEMENT%‹STATEOFFSET2Q><FŒNXTSTATEMENTF†RESEQAQ>P F†RESEQBZŠCHECKTOKENd Q@…INDEX7nR> xF„GOTO;;CHECK THE TOKEN‚R> ;;IS IT ONE WE WANT?Œ F„GOTO–R> ;;IS IT A GOSUB  F„GOTOªR> ;;OR A TRAP STATEMENT´ F„GOTO¾R>#;;OR A RESTOREÈ F„GOTOÒR>;;ON GOTOÜ FˆONGOSUBAæR>;;IF STATEMENTð F‡ONGOTOAú:X;#X;THE FOLLOWING 'BUCKET BRIGADE'X;MAKE THE RENUMBER UTILITY"X;RELOCATABLE,X;6ˆONGOSUBAFˆONGOSUBB@‡ONGOTOAF‡ONGOTOBJ†RESEQBF†RESEQCT „GOTO3^…ENTRYQ@…INDEX7hR>;;END OF 1ST STATEMENT?r F†GOBACK|R>;;END OF LINE?† F†GOBACKR>;;DOES A NUMBER FOLLOW?š H‡PRINTSR¤3® '…SAVEY¸Q@…INDEX7;;THIS IS A GOTOÂP‡LINENO1;;REFERENCE SOÌ3;;GET LINE NUMBERÖ Q@…INDEX7à P‡LINENO2ê3ô Q@…INDEX7þ P‡LINENO33 Q@…INDEX7 P‡LINENO4&101:1D ‰CONVERTIT;;CONVERT BCD LINENQ‰REFLINELO;;GET LINE NO?X;b%S‡LINELOW;;SUBTRACT CURRENT LINENOl Q†LINEHIvF‰CHECKFLAG€Q‰REFLINEHIŠE„SBCA;;IS REFERENCED LINE”;;;AT TOP OF PROGRAMžS>;;OR BOTTOM?¨D‰TOPSEARCH²„SBCAS†LINEHI¼&‰CHECKFLAGD‰TOPSEARCH;;START AT TOPÆE‰ENDSEARCH;;START FROM HEREЈONGOSUBBFˆONGOSUBCÚ‡ONGOTOBF‡ONGOTOCä†ENTRYFD…ENTRYî†RESEQCF†RESEQDø †GOBACK3:  ‡PRINTSRQ>S;;PRINT SR MESSAGE  …PRINT*Q>R4 …PRINT>Q>…SPACE;;PRINT A SPACEH …PRINTR ‹PRINTLINENO\Q…SAVEY;;RESTORE Yf?p3z:„‰TOPSEARCHQ‡POINTERŽP†SINDEX;;POINT TO BOP˜Q‡POINTER¢P†SINDEX¬Q„BASE;;GET BASE LINE NO¶P‡FUTLINE;;STORE ITÀ Q„BASEÊP‡FUTLINEÔQ>Þ F†SEARCHè†RESEQDF†RESEQEòˆONGOSUBCFˆONGOSUBDü‡ONGOTOCF‡ONGOTOD †ENTRYED†ENTRYF #‰ENDSEARCHQ…INDEX;;SET SINDEX TO P†SINDEX;;CURRENT POSITION$ Q…INDEX. P†SINDEX8 Q‡CURLINE;;SET FUTURE LINENOB P‡FUTLINE;;TO CURRENT LINE NOL Q‡CURLINEV P‡FUTLINE` †SEARCHj Q†SINDEX;;LOOK FOR REFERENCEDt ;;;LINE NUMBER~ SƒEOP;;END OF PROGRAM?ˆ 3’ Q†SINDEXœ SƒEOP¦ FˆNOTFOUND;;YEP!° %>º Q‰REFLINELO;;GET REF LINEÄ ;Î S@†SINDEX7;;ARE WE THERE?Ø P…TEMP1â 3ì Q‰REFLINEHIö E„SBC2 ; S> DˆNOTFOUND;;COULDN'T FIND IT „SBC2S@†SINDEX7( P…TEMP22 DˆNOTFOUND< Q…TEMP1;;IS IT A MATCH?F R>P HˆCONTINUEZ Q…TEMP2d R>n FˆFOUNDITAx #ˆCONTINUEQ‡FUTLINE;;KEEP LOOKING‚ ,Œ O„INCR;;INCREMENT FUTURE LINE– P‡FUTLINE  D‡@FAHEADª #‡FUTLINE´ ‡@FAHEAD¾ Q†SINDEX;;POINT SINDEX TOÈ ,;;NEXT LINEÒ %>Ü O@†SINDEX7æ P†SINDEX;;ADD OFFSETð D…@CONTú #†SINDEX …@CONT Q> F†SEARCH" ˆFOUNDITAQ>, F‡FOUNDIT6 †RESEQEF†RESEQF@ ˆONGOSUBDFˆONGOSUBEJ ‡ONGOTODF‡ONGOTOET †ENTRYDD†ENTRYE^ ˆNOTFOUNDh Q>N;;LOAD 'N'r …PRINT| Q>F;;LOAD 'F'† …PRINT Q>…SPACE;;LOAD A SPACEš …PRINT¤ ‹PRINTLINENO® Q>¸ P„FLAG;;SET FLAG Q‡CURLINEÌ P‡FUTLINE;;SET FUTURE LINEÖ Q‡CURLINEà P‡FUTLINEê  ‹CONVERTBACKô  ƒFPA;;CONVERT TO A STRINGþ %> ƒLPX '…TEMP1 Q@†INBUFF7;;PRINT THE STRING& I„LPX1;;NOT LAST CHARACTER0 M>;;TURN OFF HIGH BIT: …PRINTD Q>…SPACE;;LOAD A SPACEN H…ENDNFX „LPX1b …PRINTl %…TEMP1v 3€ HƒLPXŠ …ENDNF” …PRINTž Q…SAVEY;;RESTORE Y¨ ?² 3¼ 3Æ 3Ð 3Ú 3ä 3î :ø †RESEQFF†RESEQG ˆONGOSUBEF‡ONGOSUB ‡ONGOTOEF†ONGOTO †ENTRYCD†ENTRYD +‡FOUNDIT ‹CONVERTBACK;;FOUND LINE NUMBER* Q…SAVEY4 ?> 3H 3R 3\ 3f 3p 3z :„ ‡ONGOSUB3;;IS THIS ON GOSUB?Ž Q@…INDEX7˜ R>¢ %F‡TAKEOFF;;IF YES, THEN PROCESS IT¬ R>¶ F‡TAKEOFFÀ R>;;DOES A NUMBER FOLLOW?Ê H‰LOOPAGAINÔ CÞ ,è O>;;BUMP Y UP BY 6ò ?ü ‰LOOPAGAINQ> F‡ONGOSUB ‡TAKEOFF3 …ENTRY$Q@…INDEX7;;GET TOKEN.R>;;END OF STATEMENT8 F†GETOUTBR>;;END OF LINEL F†GETOUTV H‡TAKEOFF`†RESEQGF†RESEQHj †GETOUT:t †ONGOTO~3;;IS IT ONGOTOˆ Q@…INDEX7’R>œ F‡CHECKIT¦R>;;DOES NUMBER FOLLOW?° H…AHEADºCÄ,ÎO>;;BUMP Y BY 6Ø?â …AHEADQ>ì#F†ONGOTO;;IT'S AN ONGOTO COMMANDö ‡CHECKIT3C #R‹STATEOFFSET;;END OF STATEMENT?EƒOUTD†ENTRYC;;FOUND ON GOSUB(ƒOUT:2 ‰CONVERTIT< Q>;;COVERTS BCD LINE TO HEXFP‡LINENO5;;CLEAR 5 AND 6P P‡LINENO6Z ƒFPI;;FP TO INTEGERdQƒFRO;;GET THE INTEGERnP‰REFLINELO;;STORE ITx QƒFRO‚P‰REFLINEHIŒ:–†RESEQHF…RESEQ ‹CONVERTBACKª Q‡FUTLINE´PƒFRO¾Q‡FUTLINEÈ PƒFROÒ! ƒIFP;;CONVERT HEX LINE TO BCDÜQ„FLAG;;CHECK FLAGæR>;;IS IT TURNED ON?ð F†RETURNúQ…SAVEY;;RESTORE Y?Q‡LINENO1;;STUFF LINE NUMBERP@…INDEX7;;INTO BASIC CODE"3, Q‡LINENO26 P@…INDEX7@3J Q‡LINENO3T P@…INDEX7^3h Q‡LINENO4r P@…INDEX7|3†33š†RETURNQ>¤ P„FLAG®:¸ …RESEQÂ!Q‡POINTER;;ALL LINE REFERENCESÌP…INDEX;;TAKEN CARE OFÖ+Q‡POINTER;;NOW RESEQUENCE THE PROGRAMà P…INDEXêQ„BASE;;GET BASE NUMBERô P‡CURLINEþ Q„BASEP‡CURLINE ‡SPINNER&Q…INDEX;;SPIN THROUGH UNTIL THE END&;0SƒEOP;;END OF PROGRAM?: Q…INDEXD SƒEOPNFˆENDITALL;;YES (WHEW)X%>bQ@…INDEX7;;GET LINE OFFSETlP…TEMP1;;SAVE ITv!Q‡CURLINE;;GET CURRENT LINE NO€,Š%>”P@…INDEX7;;STORE ITžQ‡CURLINE¨3²P@…INDEX7;;STORE HI BYTE¼ Q‡CURLINEÆO„INCR;;INCREMENT ITÐ P‡CURLINEÚ D…@NEXTä#‡CURLINEî …@NEXTø,Q…INDEX;;GO TO NEXT LINE  O…TEMP1 P…INDEX  Dˆ@NOCARRY* #…INDEX4 ˆ@NOCARRY>Q>H F‡SPINNERR$ˆENDITALL:;;AT LONG LAST, THE END..................................................................................