þþR&dX;SAVE#D:BUPP2.M65nX;xX;-----------------;‚X; ;ŒX; BUP.SYS part II ;–X; ; X; (C) 1989 ;ªX; by Barry Kolbe ;´X; ;¾X;-----------------;ÈX;ÒX;get line numbersÜX;æ…RENUM †GETNBRð „DOCRúX;$>;;set prflag &†PRFLAGX;"X;check if line>32768,X;6 †GETPTR;;point to@-;;first lineJ†NXTLN1%>;;check hi byteTQ@†LINPTR7;;of line #^R>€;;>=32768?hE…LINOK;;yes-AOKrQ…CLINE;;will new line|R>€;;be >32768?†E†LINOVR;;yes-quitQ…CLINE;;add incrementš,;;to current¤O…ILINE;;new line® P…CLINE¸ Q…CLINE O…ILINEÌ P…CLINEÖ3;;add offsetàQ@†LINPTR7;;to BASICê,;;current lineô O†LINPTRþ P†LINPTRQ†LINPTRO>P†LINPTR&!†NXTLN1;;check more0X;:X; line >32768DX;N†LINOVR$> ;;show errorX‚L1Q†OVRMES9;;over theb „PUTC;;maxl0vI‚L1€!…EXIT2;;to BASICŠX;”†GETPTRQ†STMTAB;;point tožP†LINPTR;;BASIC'S¨Q†STMTAB;;first line²P†LINPTR¼:ÆX;ІFLNCLNQ…FLINE;;put newÚP…CLINE;;first lineäQ…FLINE;;intoîP…CLINE;;test lineø:X; X;renumbered lines will allX;be less than 32768 X;*…LINOK †GETPTR;;reset pntrs4 †FLNCLN;;get first line>…CKTOK%>;;get low byteHQ@†LINPTR7;;of line no.RP†LINENO;;save it\3fQ@†LINPTR7;;now highpP†LINENO;;bytezR>€;;done?„ D‚L2;;noŽ!…DOREN;;do renumber!˜‚L23¢Q@†LINPTR7;;offset to¬P†OFFSET;;next line¶3;;offset toÀQ@†LINPTR7;;next stmtÊ P†NXTSTMÔ‚L43ÞQ@†LINPTR7;;get tokenè$>;;is it aò‚L3R†TOKTAB9;;special?üH‚L5!„TOK1;;yes-process‚L50;;try nextI‚L3$R>;;IF token.H‚L78!„TOK3;;handle itB‚L7R>;;ON tokenLH†GTNXST;;do next stmtV!„TOK2;;handle ON`X;jX;get next stmt or linetX;~†GTNXSTQ†NXTSTM;;is nxt stmtˆR†OFFSET;;= to next line?’F†NXTLN3;;yesœ?;;no¦Q@†LINPTR7;;get offset° P†NXTSTMº!‚L4;;look for tokenĆNXTLN3,;;move to nextÎQ†OFFSET;;lineØ O†LINPTRâ P†LINPTRìQ†LINPTRöO>P†LINPTR  ,;;move upQ…CLINE;;new lineO…ILINE;;counter( P…CLINE2 Q…CLINE< O…ILINEF P…CLINEP!…CKTOK;;do next lineZX;dX;do the renumberingnX;x!…DOREN †GETPTR;;pt to 1st line‚ †FLNCLN;;new nmbrsŒ„DOR2%>;;high byte of–Q@†LINPTR7;;line no R>€;;at 32768?ª H„DOR1;;no´$>;;yes-say 'done'¾„DORTQ†DONMES9È „PUTCÒ0Ü I„DORTæ!…EXIT2;;to BASICðX;ú„DOR11;;back up 1 byteQ…FLINE;;get new lineP@†LINPTR7;;numbrQ…FLINE;;and insert" 3;;it into,P@†LINPTR7;;memory6,@Q…FLINE;;next new lineJ O…ILINET P…FLINE^ Q…FLINEh O…ILINEr P…FLINE|3;;next BASIC†Q@†LINPTR7;;line,š O†LINPTR¤ P†LINPTR®Q†LINPTR¸O>ÂP†LINPTRÌ!„DOR2;;more!ÖX;àX;handle special tokensêX;like GOTO, GO TO, GOSUBôX;TRAP, RESTORE, LISTþX;which preceed line numbersX;„TOK13;;check for Q@†LINPTR7&R>;;a number0F„GOTN;;constant:ƒVAR!†VARREF;;variable referD„GOTN'„YSAV;;save positionN…GOTN1C;;skip 7 bytesX,;;for constantbO>l?vQ@†LINPTR7;;get token€R>;;comma?Š F…DONUM”R>;;end stmt?ž F…DONUM¨R>;;end line?²HƒVAR;;variable ref¼…DONUM%„YSAVÆ †BCDINT;;BCD to integerÐX;Ú"X;now see if the new line exitsäX;îQ†STMTAB;;point toøP„SPTR;;line tableQ†STMTAB  P„SPTRQ…FLINE;;1st new line PƒFR0* Q…FLINE4 PƒFR0>†SEARCH%>;;check if exitsHQ@„SPTR7;;high byteRR>€;;at end?\F†NOTFND;;yesfR…RLINE;;is it new line?pH†SNXTLN;;noz1;;maybe-check„Q@„SPTR7;;low byteŽ R…RLINE˜H†SNXTLN;;nope¢X;¬!X;got match fr0 has new line #¶X;À ƒIFP;;INT to FPÊ †INSERT;;put it inÔ3;;next tokenÞ Q@†LINPTR7èR>;;comma?òH…NOCOM;;noü!„TOK1;;check for # …NOCOM!†GTNXST;;next stmt X; †SNXTLN%>;;offset to$ Q@„SPTR7;;next line. ,;;move up to it8 O„SPTRB P„SPTRL Q„SPTRV O>` P„SPTRj ,;;move upt QƒFR0;;new line~ O…ILINE;;to next oneˆ PƒFR0;;in sequence’ QƒFR0œ O…ILINE¦ PƒFR0° !†SEARCH;;keep lookingº X;Ä X;show variable reference msgÎ X;Ø †VARREFQ> V;;print 'VR-'â „PUTCì Q> Rö „PUTC Q> - „PUTC ƒNF1Q…CLINE;;at current PƒFR0;;line nmbr( Q…CLINE2 PƒFR0<  ƒIFP;;change to FPF  „FASC;;to ATASCIIP  „PRNO;;print itZ !†GTNXST;;next stmtd X;n X;show not found msgx X;‚ †NOTFNDQ> N;;print 'NF-'Œ „PUTC– Q> F  „PUTCª Q> -´ „PUTC¾ !ƒNF1;;print line #È X;Ò X;check for ON GOTO/GOSUBÜ X;æ „TOK23ð Q@†LINPTR7ú R>;;ON GOTO HƒTK3;;nope ƒTK4!„TOK1;;yup ƒTK3R>;;ON GOSUB" FƒTK4;;yes, H„TOK2;;try again6 X;@ X;check for IF-THENJ X;T „TOK33^ Q@†LINPTR7;;get tokenh R>;;THEN?r H„TOK3;;not yet| 3;;get next token† Q@†LINPTR7 R>;;a constant?š H…NTNUM¤ 1;;yes® !„TOK1;;process it¸ …NTNUM1;;back up 1 byte !‚L4;;find if other tokenÌ X;Ö X;convert BCD to INTEGERà X;ê †BCDINT$>;;copy ATASCIIô „BCD13;;to FR0þ Q@†LINPTR7 PƒFR09 2 (>;;6 bytes& H„BCD10  ƒFPI;;FP to INT: QƒFR0;;save itD P…RLINEN QƒFR0X P…RLINEb :l X;v X;insert new line€ X;Š †INSERT%„YSAV;;get position” $>;;move FP #ž „INS13;;to position¨ QƒFR09;;in memory² P@†LINPTR7;;of line¼ 2Æ (>Ð H„INS1Ú :ä X;î X;print line numberø X; „PRNO †MPRINT;;print it Q>  „PUTC $†PRFLAG* 04 IƒXR2> „DOCRH $>R ƒXR2&†PRFLAG\ :f X;p X;print LBUFz X;„ †MPRINT%>ÿŽ ƒMPT3˜ Q@…INBUF7;;get byte¢ 5;;save it¬ M>;;mask inverse¶  „PUTC;;put itÀ 7;;last byteÊ IƒMPT;;is inversedÔ :Þ X;è X;ren & num input checkerò X;also gets first line andü X;increment from input lineX;†GETNBR ‡DEFAULT%>$Q„LBUF8;;no #'s?. R>ƒEOL8 H†GETNMSB :;;no #'s!LX;VX;default values are 10,10`X;j‡DEFAULTQ> tP…FLINE;;first line~ P…CLINEˆP…ILINE;;and increment’Q>œ P…FLINE¦ P…ILINE° P…CLINEº:ÄX;ÎX;find the last program lineØX;â …GLAST ‡DEFAULT;;set defaultsì †GETPTR;;point toö%>;;first lineQ@†LINPTR7;;get high I„GLOK;;< 32768? :;;no!„GLOKP;;save line #( 1;;get low2 Q@†LINPTR7<P;;save itF †ADDLIN;;next lineP%>;;get high ofZQ@†LINPTR7;;linedI„GLOK;;< 32768nQx,‚O…ILINE;;move upŒP…FLINE;;use last–P…CLINE;;number QªO>;;high byte´ P…FLINE¾ P…CLINEÈ:ÒX;ÜX;set up for first time useæX;ð †SETNUM-úQ…FLINE;;back up;;;one incrementS…ILINE;;from firstP…FLINE;;line" Q…FLINE, S…ILINE6 P…FLINE@:JX;TX;get numbers from input^X;h†GETNMS$>r†FNDCOMQ„LBUF8|R> ,;;comma?† F†GOTFSTR>ƒEOL;;done yet?š F†GOTFST¤P„NBUF9;;copy number®2;;out to NBUF¸(>ÂF…FPERR;;error ifÌ3;;too many digitsÖ!†FNDCOM;;loopàX;ê X;got first line #-convert itôX;to integer formþX;†GOTFSTP„NBUF9;;, or EOL'‚Y2;;save positionQ>;;set up FP&PƒCIX;;stuff0 P…CLINE: †DOINBF;;point to NBUFD ƒAFP;;ATASCII to FPN ƒFPI;;FP to INTX E…FPERRbQƒFR0;;is numberlG…FPERR;;over 32768?v P…FLINE€ P…CLINEŠQƒFR0” P…FLINEž P…CLINE¨%‚Y2;;get position²Q„LBUF8;;check next¼R>ƒEOL;;char. done?ÆH†GETSCN;; get secondÐ:ÚX;äX;got first line ,now getîX;the incrementøX;†GETSCN$> ƒGT13Q„LBUF8;;get byte R>ƒEOL;;done?*F†NUMDON;;yes4P„NBUF9;;copy it> 2;;tooH(>;;many digits?RF…FPERR;;yes\!ƒGT1;;morefX;pX;initialize INBUFzX;„†DOINBFQ>4„NBUF;;point itŽP…INBUF;;to NBUF˜Q>5„NBUF;;where the¢P…INBUF;;number is¬:¶X;ÀX;show floating point errorÊX;Ô…FPERR7;;remove returnÞ7è†VALERR$> ;;'ERROR'ò…FPER1Q…FPMES9;;msgü „PUTC0 I…FPER1 †SETLBF;;reset FP$!…EXIT2;;to BASIC.X;8X;got parameters soBX;process second numberLX;V†NUMDONP„NBUF9;;EOL`Q>jPƒCIX;;point to NBUFt †DOINBF~ ƒAFP;;to FPˆ ƒFPI;;to INT’E…FPERR;;error!œQƒFR0;;put in¦P…ILINE;;increment° QƒFR0ºP…ILINE;;error ifÄG…FPERR;;>=32768Î †SETLBF;;reset FPØ:âX;ìX;this is the entry pointöX;for the auto numberingX;some ideas from ANALOG X;issue 29 April 1985X;†AUTNUM …GLAST;;get params.(Q>2 P…ONOFF<X;FX;check for line overwritePX;Z †GETPTR;;point todƒNN1%>;;first linenQ@†LINPTR7;;get linenoxP…RLINE;;low byte‚3ŒQ@†LINPTR7;;high byte–P…RLINE;;is line G…NUMOK;;>=32768ª R…FLINE´F…CKLOW;;check low¾E…NUMOK;;AOKȃNN2 †ADDLIN;;next lineÒ!ƒNN1;;loopÜX;æ…CKLOWQ…RLINE;;check lowðR…FLINE;;byteúF†NOAUTO;;exits!E…NUMOK;;okDƒNN2;;check next†NOAUTO!…EXIT2"X;,X;parameters ok6X;@…NUMOK †SETNUM;;back upJQ>;;set VBIT %>4…VBNUM^ $>5…VBNUMh †SETVBVr †SETLBF;;set FP pointrs|Q> ;;VBI timer† P…TIMERQ>šP†PROMPT;;for BASIC¤ P†CHRCNT®Q>¸ P†ENDLIN P…ONOFFÌ !…EXIT2ÖX;àX;point to next BASIC lineêX;ô†ADDLIN'…SLINEþ%>Q@†LINPTR7;;get offset-,;;move pointer& O†LINPTR0 P†LINPTR:Q†LINPTRDO>NP†LINPTRX %…SLINEb:lX;v X;get next basic line for VBI€X;Š†INCLIN †ADDLIN” '…SLINEž%>¨Q@†LINPTR7;;get low²P…RLINE;;store it¼3ÆQ@†LINPTR7;;high byteÐ P…RLINEÚ %…SLINEä:îX;øX;vertical blank interruptX; …VBNUMQ†ENDLIN;;BASIC done?F†XITVBI;;no  Q†PROMPT* F†XITVBI;;4Q…TIMER;;time yet?> F…PRNUMH"…TIMER;;count downR !†XITVBI\ …PRNUMQ>f P†ENDLINpQ…FLINE;;get line toz ,;;print„O…ILINE;;add incrementŽ P…FLINE˜PƒFR0¢ Q…FLINE¬ O…ILINE¶ P…FLINEÀ PƒFR0ʆOVRCHKQƒFR0;;is itÔG„VBQT;;over 32768?ÞR…RLINE;;exist already?èF…VCKLO;;maybeò D„VBOK;;okü †INCLIN;;look again!†OVRCHK;;check it…VCKLOQƒFR0;;low bytesR…RLINE;;match$F„VBQT;;yes-exit. D„VBOK;;ok8 †INCLIN;;try next lineB!†OVRCHK;;check itL„VBQT#†QTFLAG;;quit-existsVQ> ;;force return`Püj!†XITVBI;;outtX;~X;line # ok print itˆX;’„VBOK ƒIFP;;to ATASCIIœ „FASC¦ †MPRINT;;print it°Q> ;;spaceº „PUTCÄ †SETLBF;;reset FP ptrsΆXITVBI!†XITVBV;;leave