BMBSTRINGTHING
FILE INFORMATION
FILENAME(S): BMBSTRINGTHING
FILE TYPE(S): SEQ
FILE SIZE: 3.3K
FIRST SEEN: 2025-11-30 21:12:52
APPEARS ON: 1 disk(s)
FILE HASH
e9e7ca6ed6b71a4af78766954aa78f7c3e7599a7753b0b1448c6e61b721e9c38
FOUND ON DISKS (1 DISKS)
| DISK TITLE | FILENAME | FILE TYPE | COLLECTION | TRACK | SECTOR | ACTIONS |
|---|---|---|---|---|---|---|
| TRANSACTOR 4 | BMBSTRINGTHING | SEQ | DuncanTwain | 19 | 2 | DOWNLOAD FILE |
FILE CONTENT & ANALYSIS
00000000: 3B 47 45 4E 45 52 41 4C 20 50 55 52 50 4F 53 45 |;GENERAL PURPOSE| 00000010: 20 52 4F 55 54 49 4E 45 53 20 46 4F 52 20 54 48 | ROUTINES FOR TH| 00000020: 45 20 50 45 54 2F 43 42 4D 20 53 59 53 54 45 4D |E PET/CBM SYSTEM| 00000030: 0D 3B 52 45 51 55 49 52 45 53 20 41 20 32 35 37 |.;REQUIRES A 257| 00000040: 20 43 48 41 52 41 43 54 45 52 20 42 55 46 46 45 | CHARACTER BUFFE| 00000050: 52 0D 3B 53 54 41 52 54 49 4E 47 20 41 54 20 41 |R.;STARTING AT A| 00000060: 20 50 41 47 45 20 42 4F 55 4E 44 41 52 59 0D 3B | PAGE BOUNDARY.;| 00000070: 0D 3B 46 4F 52 20 33 32 4B 20 42 41 53 49 43 20 |.;FOR 32K BASIC | 00000080: 34 2E 30 20 4F 4E 4C 59 0D 3B 0D 43 48 4B 43 4F |4.0 ONLY.;.CHKCO| 00000090: 4D 20 3D 20 24 42 45 46 35 20 3B 43 48 45 43 4B |M = $BEF5 ;CHECK| 000000A0: 20 46 4F 52 20 43 4F 4D 4D 41 0D 56 41 52 50 41 | FOR COMMA.VARPA| 000000B0: 52 20 3D 20 24 42 44 39 38 20 3B 45 56 41 4C 55 |R = $BD98 ;EVALU| 000000C0: 41 54 45 20 45 58 50 52 45 53 53 49 4F 4E 0D 46 |ATE EXPRESSION.F| 000000D0: 4C 54 49 4E 54 20 3D 20 24 43 39 32 44 20 3B 46 |LTINT = $C92D ;F| 000000E0: 4C 4F 41 54 49 4E 47 20 50 54 20 54 4F 20 49 4E |LOATING PT TO IN| 000000F0: 54 0D 53 59 4E 45 52 52 20 3D 20 24 42 46 30 30 |T.SYNERR = $BF00| 00000100: 20 3B 3F 53 59 4E 54 41 58 20 45 52 52 4F 52 0D | ;?SYNTAX ERROR.| 00000110: 4C 45 4E 31 20 3D 20 24 30 30 20 20 3B 57 4F 52 |LEN1 = $00 ;WOR| 00000120: 4B 20 53 50 41 43 45 0D 4C 45 4E 32 20 3D 20 24 |K SPACE.LEN2 = $| 00000130: 38 38 20 20 3B 20 20 20 20 27 27 0D 54 45 4D 50 |88 ; ''.TEMP| 00000140: 31 20 3D 20 24 30 31 20 3B 20 20 20 20 27 27 0D |1 = $01 ; ''.| 00000150: 54 45 4D 50 32 20 3D 20 24 38 39 20 3B 20 20 20 |TEMP2 = $89 ; | 00000160: 20 27 27 0D 56 41 52 50 54 52 20 3D 20 24 34 34 | ''.VARPTR = $44| 00000170: 20 3B 43 55 52 52 45 4E 54 20 56 41 52 41 49 42 | ;CURRENT VARAIB| 00000180: 4C 45 20 50 4F 49 4E 54 45 52 0D 49 4E 54 45 47 |LE POINTER.INTEG| 00000190: 20 3D 20 24 31 31 20 3B 49 4E 54 20 56 41 4C 55 | = $11 ;INT VALU| 000001A0: 45 20 46 4F 52 20 53 59 53 0D 43 55 52 46 49 4C |E FOR SYS.CURFIL| 000001B0: 20 3D 20 24 44 32 20 3B 43 55 52 52 45 4E 54 20 | = $D2 ;CURRENT | 000001C0: 46 49 4C 45 20 4E 55 4D 42 45 52 0D 42 55 46 46 |FILE NUMBER.BUFF| 000001D0: 45 52 20 3D 20 24 37 45 30 30 20 3B 42 4C 4F 43 |ER = $7E00 ;BLOC| 000001E0: 4B 20 47 45 54 20 42 55 46 46 45 52 2C 20 4D 55 |K GET BUFFER, MU| 000001F0: 53 54 20 42 45 20 53 45 41 4C 45 44 0D 3B 20 20 |ST BE SEALED.; | 00000200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000210: 20 20 20 20 20 3B 4F 46 46 20 57 49 54 48 20 50 | ;OFF WITH P| 00000220: 4F 4B 45 35 33 2C 31 32 36 3A 43 4C 52 0D 53 54 |OKE53,126:CLR.ST| 00000230: 41 54 55 53 20 3D 20 24 39 36 20 3B 53 54 20 53 |ATUS = $96 ;ST S| 00000240: 54 4F 52 41 47 45 0D 41 52 59 45 4E 44 20 3D 20 |TORAGE.ARYEND = | 00000250: 24 32 45 20 3B 45 4E 44 20 4F 46 20 41 52 52 41 |$2E ;END OF ARRA| 00000260: 59 53 0D 2A 20 3D 20 24 37 46 30 32 20 3B 53 54 |YS.* = $7F02 ;ST| 00000270: 41 52 54 53 20 32 20 42 59 54 53 20 49 4E 20 44 |ARTS 2 BYTS IN D| 00000280: 55 45 20 54 4F 20 42 55 46 46 45 52 0D 3B 0D 3B |UE TO BUFFER.;.;| 00000290: 20 56 45 43 54 4F 52 20 54 41 42 4C 45 0D 4A 4D | VECTOR TABLE.JM| 000002A0: 50 20 42 4C 4B 47 45 54 20 3B 42 4C 4F 43 4B 20 |P BLKGET ;BLOCK | 000002B0: 47 45 54 20 20 2D 20 53 59 53 20 33 32 35 31 34 |GET - SYS 32514| 000002C0: 0D 4A 4D 50 20 49 4E 53 54 52 47 20 3B 49 4E 53 |.JMP INSTRG ;INS| 000002D0: 54 52 49 4E 47 20 20 20 2D 20 53 59 53 20 33 32 |TRING - SYS 32| 000002E0: 35 31 37 0D 4A 4D 50 20 50 4F 53 54 52 47 20 3B |517.JMP POSTRG ;| 000002F0: 50 4F 53 20 53 45 41 52 43 48 20 2D 20 53 59 53 |POS SEARCH - SYS| 00000300: 20 33 32 35 32 30 0D 3B 0D 43 48 4B 50 41 52 20 | 32520.;.CHKPAR | 00000310: 4A 53 52 20 43 48 4B 43 4F 4D 20 3B 43 48 45 43 |JSR CHKCOM ;CHEC| 00000320: 4B 20 46 4F 52 20 43 4F 4D 4D 41 20 41 4E 44 0D |K FOR COMMA AND.| 00000330: 4A 53 52 20 56 41 52 50 41 52 20 3B 53 45 54 20 |JSR VARPAR ;SET | 00000340: 55 50 20 50 4F 49 4E 54 45 52 20 54 4F 20 53 54 |UP POINTER TO ST| 00000350: 52 49 4E 47 0D 4C 44 59 20 23 30 30 0D 52 54 53 |RING.LDY #00.RTS| 00000360: 0D 46 49 4E 44 41 42 20 4A 53 52 20 43 48 4B 50 |.FINDAB JSR CHKP| 00000370: 41 52 20 3B 46 49 4E 44 20 46 49 52 53 54 20 53 |AR ;FIND FIRST S| 00000380: 54 52 49 4E 47 0D 4C 44 41 20 28 56 41 52 50 54 |TRING.LDA (VARPT| 00000390: 52 29 2C 59 0D 53 54 41 20 4C 45 4E 31 20 3B 53 |R),Y.STA LEN1 ;S| 000003A0: 54 4F 52 45 20 53 54 52 49 4E 47 20 31 20 4C 45 |TORE STRING 1 LE| 000003B0: 4E 47 54 48 0D 49 4E 59 0D 4C 44 41 20 28 56 41 |NGTH.INY.LDA (VA| 000003C0: 52 50 54 52 29 2C 59 0D 53 54 41 20 54 45 4D 50 |RPTR),Y.STA TEMP| 000003D0: 31 20 3B 53 54 52 49 4E 47 20 31 20 41 44 44 52 |1 ;STRING 1 ADDR| 000003E0: 45 53 53 20 4C 4F 57 0D 49 4E 59 0D 4C 44 41 20 |ESS LOW.INY.LDA | 000003F0: 28 56 41 52 50 54 52 29 2C 59 0D 53 54 41 20 54 |(VARPTR),Y.STA T| 00000400: 45 4D 50 31 2B 31 20 3B 53 54 52 49 4E 47 20 31 |EMP1+1 ;STRING 1| 00000410: 20 41 44 44 52 45 53 53 20 48 49 0D 46 49 4E 44 | ADDRESS HI.FIND| 00000420: 42 20 4A 53 52 20 43 48 4B 50 41 52 20 3B 46 49 |B JSR CHKPAR ;FI| 00000430: 4E 44 20 41 4E 4F 54 48 45 52 20 53 54 52 49 4E |ND ANOTHER STRIN| 00000440: 47 0D 4C 44 41 20 28 56 41 52 50 54 52 29 2C 59 |G.LDA (VARPTR),Y| 00000450: 0D 53 54 41 20 4C 45 4E 32 20 3B 53 54 4F 52 45 |.STA LEN2 ;STORE| 00000460: 20 53 54 52 49 4E 47 20 32 20 4C 45 4E 47 54 48 | STRING 2 LENGTH| 00000470: 0D 49 4E 59 0D 4C 44 41 20 28 56 41 52 50 54 52 |.INY.LDA (VARPTR| 00000480: 29 2C 59 0D 53 54 41 20 54 45 4D 50 32 20 3B 53 |),Y.STA TEMP2 ;S| 00000490: 54 52 49 4E 47 20 32 20 41 44 44 52 45 53 53 20 |TRING 2 ADDRESS | 000004A0: 4C 4F 57 0D 49 4E 59 0D 4C 44 41 20 28 56 41 52 |LOW.INY.LDA (VAR| 000004B0: 50 54 52 29 2C 59 0D 53 54 41 20 54 45 4D 50 32 |PTR),Y.STA TEMP2| 000004C0: 2B 31 20 3B 53 54 52 49 4E 47 20 32 20 41 44 44 |+1 ;STRING 2 ADD| 000004D0: 52 45 53 53 20 48 49 0D 52 54 53 0D 4B 49 4C 53 |RESS HI.RTS.KILS| 000004E0: 54 52 20 53 45 43 20 3B 47 45 54 20 52 49 44 20 |TR SEC ;GET RID | 000004F0: 4F 46 20 4F 4C 44 20 53 54 52 49 4E 47 0D 4C 44 |OF OLD STRING.LD| 00000500: 41 20 54 45 4D 50 32 2B 31 0D 43 4D 50 20 41 52 |A TEMP2+1.CMP AR| 00000510: 59 45 4E 44 2B 31 20 3B 53 54 52 49 4E 47 20 49 |YEND+1 ;STRING I| 00000520: 4E 20 54 45 58 54 3F 0D 42 43 43 20 4E 4F 4B 49 |N TEXT?.BCC NOKI| 00000530: 4C 4C 20 3B 59 45 53 2C 20 45 58 49 54 0D 4C 44 |LL ;YES, EXIT.LD| 00000540: 41 20 54 45 4D 50 32 0D 43 4D 50 20 41 52 59 45 |A TEMP2.CMP ARYE| 00000550: 4E 44 0D 42 43 43 20 4E 4F 4B 49 4C 4C 0D 4C 44 |ND.BCC NOKILL.LD| 00000560: 41 20 4C 45 4E 32 0D 43 4C 43 0D 41 44 43 20 54 |A LEN2.CLC.ADC T| 00000570: 45 4D 50 32 0D 53 54 41 20 54 45 4D 50 32 0D 42 |EMP2.STA TEMP2.B| 00000580: 43 43 20 4E 4F 48 49 49 4E 0D 49 4E 43 20 54 45 |CC NOHIIN.INC TE| 00000590: 4D 50 32 2B 31 0D 4E 4F 48 49 49 4E 20 4C 44 59 |MP2+1.NOHIIN LDY| 000005A0: 20 23 30 31 0D 4C 44 41 20 4C 45 4E 32 0D 53 54 | #01.LDA LEN2.ST| 000005B0: 41 20 28 54 45 4D 50 32 29 2C 59 0D 49 4E 59 0D |A (TEMP2),Y.INY.| 000005C0: 4C 44 41 20 23 24 46 46 0D 53 54 41 20 28 54 45 |LDA #$FF.STA (TE| 000005D0: 4D 50 32 29 2C 59 20 3B 4F 4C 44 20 53 54 52 49 |MP2),Y ;OLD STRI| 000005E0: 4E 47 20 44 45 41 44 0D 4E 4F 4B 49 4C 4C 20 52 |NG DEAD.NOKILL R| 000005F0: 54 53 0D 3B 0D 46 49 4E 44 49 20 4A 53 52 20 43 |TS.;.FINDI JSR C| 00000600: 48 4B 50 41 52 20 3B 45 56 41 4C 55 41 54 45 20 |HKPAR ;EVALUATE | 00000610: 4E 55 4D 45 52 49 43 0D 4A 53 52 20 46 4C 54 49 |NUMERIC.JSR FLTI| 00000620: 4E 54 0D 4C 44 41 20 49 4E 54 45 47 2B 31 0D 42 |NT.LDA INTEG+1.B| 00000630: 45 51 20 52 31 0D 4A 4D 50 20 53 59 4E 45 52 52 |EQ R1.JMP SYNERR| 00000640: 0D 52 31 20 4C 44 41 20 49 4E 54 45 47 0D 52 54 |.R1 LDA INTEG.RT| 00000650: 53 0D 3B 0D 3B 2A 2A 20 20 20 20 20 20 20 20 42 |S.;.;** B| 00000660: 4C 4F 43 4B 20 47 45 54 20 52 4F 55 54 49 4E 45 |LOCK GET ROUTINE| 00000670: 20 20 20 20 20 20 20 2A 2A 0D 42 4C 4B 47 45 54 | **.BLKGET| 00000680: 20 4A 53 52 20 46 49 4E 44 49 20 3B 47 45 54 20 | JSR FINDI ;GET | 00000690: 46 49 4C 45 20 4E 55 4D 42 45 52 0D 53 54 41 20 |FILE NUMBER.STA | 000006A0: 43 55 52 46 49 4C 0D 4C 44 41 20 23 3C 42 55 46 |CURFIL.LDA #<BUF| 000006B0: 46 45 52 20 3B 47 45 54 20 42 55 46 46 45 52 20 |FER ;GET BUFFER | 000006C0: 41 44 44 52 45 53 53 0D 53 54 41 20 54 45 4D 50 |ADDRESS.STA TEMP| 000006D0: 31 0D 4C 44 41 20 23 3E 42 55 46 46 45 52 0D 53 |1.LDA #>BUFFER.S| 000006E0: 54 41 20 54 45 4D 50 31 2B 31 0D 4A 53 52 20 46 |TA TEMP1+1.JSR F| 000006F0: 49 4E 44 42 20 3B 46 49 4E 44 20 53 54 52 49 4E |INDB ;FIND STRIN| 00000700: 47 20 56 41 52 49 41 42 4C 45 0D 4A 53 52 20 4B |G VARIABLE.JSR K| 00000710: 49 4C 53 54 52 20 3B 4B 49 4C 4C 20 4F 4C 44 20 |ILSTR ;KILL OLD | 00000720: 53 54 52 49 4E 47 0D 4C 44 58 20 43 55 52 46 49 |STRING.LDX CURFI| 00000730: 4C 0D 4A 53 52 20 24 46 46 43 36 20 3B 53 45 54 |L.JSR $FFC6 ;SET| 00000740: 20 49 4E 50 55 54 20 44 45 56 49 43 45 0D 49 4E | INPUT DEVICE.IN| 00000750: 4C 4F 4F 50 20 4A 53 52 20 24 46 46 45 34 20 3B |LOOP JSR $FFE4 ;| 00000760: 47 45 54 20 41 20 43 48 41 52 41 43 54 45 52 0D |GET A CHARACTER.| 00000770: 54 41 58 20 3B 53 41 56 45 20 43 48 41 52 20 49 |TAX ;SAVE CHAR I| 00000780: 4E 20 2E 58 0D 43 4D 50 20 23 24 30 44 20 3B 43 |N .X.CMP #$0D ;C| 00000790: 41 52 52 49 41 47 45 20 52 45 54 55 52 4E 3F 0D |ARRIAGE RETURN?.| 000007A0: 42 45 51 20 56 41 52 53 45 54 20 3B 59 45 53 2C |BEQ VARSET ;YES,| 000007B0: 20 53 54 4F 50 20 49 4E 50 55 54 0D 4C 44 59 20 | STOP INPUT.LDY | 000007C0: 23 24 30 30 0D 53 54 41 20 28 54 45 4D 50 31 29 |#$00.STA (TEMP1)| 000007D0: 2C 59 20 3B 53 54 4F 52 45 20 43 48 41 52 20 49 |,Y ;STORE CHAR I| 000007E0: 4E 20 42 55 46 46 45 52 0D 49 4E 43 20 54 45 4D |N BUFFER.INC TEM| 000007F0: 50 31 20 3B 49 4E 43 52 45 4D 45 4E 54 20 4C 45 |P1 ;INCREMENT LE| 00000800: 4E 47 54 48 0D 4C 44 59 20 54 45 4D 50 31 20 3B |NGTH.LDY TEMP1 ;| 00000810: 47 45 54 20 4C 45 4E 47 54 48 0D 43 50 59 20 23 |GET LENGTH.CPY #| 00000820: 32 35 35 20 3B 4D 41 58 20 3F 0D 42 45 51 20 50 |255 ;MAX ?.BEQ P| 00000830: 52 45 53 45 54 0D 4C 44 59 20 53 54 41 54 55 53 |RESET.LDY STATUS| 00000840: 20 3B 4D 4F 52 45 20 43 48 41 52 53 3F 0D 42 45 | ;MORE CHARS?.BE| 00000850: 51 20 49 4E 4C 4F 4F 50 20 3B 59 45 53 2C 20 43 |Q INLOOP ;YES, C| 00000860: 4F 4E 54 49 4E 55 45 0D 50 52 45 53 45 54 20 54 |ONTINUE.PRESET T| 00000870: 58 41 20 3B 47 45 54 20 43 48 41 52 20 46 52 4F |XA ;GET CHAR FRO| 00000880: 4D 20 2E 58 0D 42 4E 45 20 56 41 52 53 45 54 20 |M .X.BNE VARSET | 00000890: 3B 4C 41 53 54 20 43 48 41 52 20 43 48 52 24 28 |;LAST CHAR CHR$(| 000008A0: 30 29 3F 0D 44 45 43 20 54 45 4D 50 31 20 3B 59 |0)?.DEC TEMP1 ;Y| 000008B0: 45 53 2C 20 44 45 43 20 4C 45 4E 47 54 48 0D 56 |ES, DEC LENGTH.V| 000008C0: 41 52 53 45 54 20 4A 53 52 20 24 46 46 43 43 20 |ARSET JSR $FFCC | 000008D0: 3B 43 4C 4F 53 45 20 43 48 41 4E 4E 45 4C 0D 4C |;CLOSE CHANNEL.L| 000008E0: 44 59 20 23 24 30 30 0D 4C 44 41 20 54 45 4D 50 |DY #$00.LDA TEMP| 000008F0: 31 0D 53 54 41 20 28 56 41 52 50 54 52 29 2C 59 |1.STA (VARPTR),Y| 00000900: 20 3B 53 54 4F 52 20 4C 45 4E 20 49 4E 20 50 4F | ;STOR LEN IN PO| 00000910: 49 4E 54 45 52 0D 49 4E 59 0D 4C 44 41 20 23 3C |INTER.INY.LDA #<| 00000920: 42 55 46 46 45 52 0D 53 54 41 20 28 56 41 52 50 |BUFFER.STA (VARP| 00000930: 54 52 29 2C 59 20 3B 53 54 4F 52 45 20 50 4F 49 |TR),Y ;STORE POI| 00000940: 4E 54 45 52 20 4C 4F 57 0D 49 4E 59 0D 4C 44 41 |NTER LOW.INY.LDA| 00000950: 20 23 3E 42 55 46 46 45 52 0D 53 54 41 20 28 56 | #>BUFFER.STA (V| 00000960: 41 52 50 54 52 29 2C 59 20 3B 53 54 4F 52 45 20 |ARPTR),Y ;STORE | 00000970: 50 4F 49 4E 54 45 52 20 48 49 0D 52 54 53 0D 3B |POINTER HI.RTS.;| 00000980: 0D 3B 2A 2A 20 20 20 20 20 20 20 20 20 20 49 4E |.;** IN| 00000990: 53 54 52 49 4E 47 20 52 4F 55 54 49 4E 45 20 20 |STRING ROUTINE | 000009A0: 20 20 20 20 20 20 20 20 2A 2A 0D 49 4E 53 54 52 | **.INSTR| 000009B0: 47 20 4A 53 52 20 46 49 4E 44 41 42 20 3B 46 49 |G JSR FINDAB ;FI| 000009C0: 4E 44 20 42 4F 54 48 20 56 41 52 49 41 42 4C 45 |ND BOTH VARIABLE| 000009D0: 53 0D 4A 53 52 20 46 49 4E 44 49 20 3B 47 45 54 |S.JSR FINDI ;GET| 000009E0: 20 49 4E 53 45 52 54 20 50 4F 53 49 54 49 4F 4E | INSERT POSITION| 000009F0: 0D 44 45 43 20 49 4E 54 45 47 0D 4C 44 41 20 54 |.DEC INTEG.LDA T| 00000A00: 45 4D 50 32 0D 43 4C 43 0D 41 44 43 20 49 4E 54 |EMP2.CLC.ADC INT| 00000A10: 45 47 0D 53 54 41 20 54 45 4D 50 32 0D 42 43 43 |EG.STA TEMP2.BCC| 00000A20: 20 49 31 0D 49 4E 43 20 54 45 4D 50 32 2B 31 0D | I1.INC TEMP2+1.| 00000A30: 49 31 20 4C 44 59 20 23 24 30 30 0D 49 32 20 4C |I1 LDY #$00.I2 L| 00000A40: 44 41 20 28 54 45 4D 50 31 29 2C 59 0D 53 54 41 |DA (TEMP1),Y.STA| 00000A50: 20 28 54 45 4D 50 32 29 2C 59 20 3B 54 52 41 4E | (TEMP2),Y ;TRAN| 00000A60: 53 46 45 52 20 42 59 54 45 53 0D 49 4E 59 0D 43 |SFER BYTES.INY.C| 00000A70: 50 59 20 4C 45 4E 31 20 3B 45 4E 44 20 4F 46 20 |PY LEN1 ;END OF | 00000A80: 49 4E 53 45 52 54 0D 42 4E 45 20 49 32 20 3B 4E |INSERT.BNE I2 ;N| 00000A90: 4F 2C 20 44 4F 20 4D 4F 52 45 0D 52 54 53 0D 3B |O, DO MORE.RTS.;| 00000AA0: 0D 3B 2A 2A 20 20 20 20 20 20 20 20 50 4F 53 49 |.;** POSI| 00000AB0: 54 49 4F 4E 20 53 45 41 52 43 48 20 52 4F 55 54 |TION SEARCH ROUT| 00000AC0: 49 4E 45 20 20 20 20 20 20 20 2A 2A 0D 50 4F 53 |INE **.POS| 00000AD0: 54 52 47 20 4A 53 52 20 46 49 4E 44 41 42 20 3B |TRG JSR FINDAB ;| 00000AE0: 46 49 4E 44 20 42 4F 54 48 20 56 41 52 49 41 42 |FIND BOTH VARIAB| 00000AF0: 4C 45 53 0D 4C 44 41 20 23 24 30 30 0D 54 41 58 |LES.LDA #$00.TAX| 00000B00: 20 3B 58 20 52 45 47 20 3D 20 30 0D 53 54 41 20 | ;X REG = 0.STA | 00000B10: 24 42 36 20 3B 52 45 53 45 54 20 50 4F 53 49 54 |$B6 ;RESET POSIT| 00000B20: 49 4F 4E 0D 4C 4F 4F 50 50 20 4C 44 59 20 23 24 |ION.LOOPP LDY #$| 00000B30: 30 30 20 20 3B 5A 45 52 4F 49 5A 45 20 4F 46 46 |00 ;ZEROIZE OFF| 00000B40: 53 45 54 0D 50 31 20 4C 44 41 20 28 54 45 4D 50 |SET.P1 LDA (TEMP| 00000B50: 31 29 2C 59 20 20 3B 47 45 54 20 43 48 41 52 20 |1),Y ;GET CHAR | 00000B60: 41 54 20 41 24 2C 59 0D 43 4D 50 20 28 54 45 4D |AT A$,Y.CMP (TEM| 00000B70: 50 32 29 2C 59 20 3B 53 41 4D 45 20 41 53 20 43 |P2),Y ;SAME AS C| 00000B80: 48 41 52 20 41 54 20 42 24 2C 59 20 3F 0D 42 4E |HAR AT B$,Y ?.BN| 00000B90: 45 20 42 55 4D 50 20 3B 4E 4F 2C 20 4D 4F 56 45 |E BUMP ;NO, MOVE| 00000BA0: 20 54 4F 20 4E 45 58 54 20 41 24 20 43 48 41 52 | TO NEXT A$ CHAR| 00000BB0: 0D 49 4E 59 20 3B 59 45 53 2C 20 49 4E 43 52 45 |.INY ;YES, INCRE| 00000BC0: 4D 45 4E 54 20 59 0D 43 50 59 20 4C 45 4E 31 20 |MENT Y.CPY LEN1 | 00000BD0: 3B 53 41 4D 45 20 41 53 20 4C 45 4E 20 4F 46 20 |;SAME AS LEN OF | 00000BE0: 41 24 3F 0D 42 4E 45 20 50 31 20 3B 4E 4F 2C 20 |A$?.BNE P1 ;NO, | 00000BF0: 4D 4F 52 45 20 43 48 41 52 53 20 54 4F 20 43 4F |MORE CHARS TO CO| 00000C00: 4D 50 41 52 45 0D 49 4E 43 20 24 42 36 20 3B 59 |MPARE.INC $B6 ;Y| 00000C10: 45 53 2C 20 42 55 4D 50 20 50 4F 53 49 54 49 4F |ES, BUMP POSITIO| 00000C20: 4E 0D 4C 44 41 20 24 42 36 20 3B 41 4E 44 20 53 |N.LDA $B6 ;AND S| 00000C30: 54 4F 52 45 20 49 54 0D 53 54 41 20 24 30 30 20 |TORE IT.STA $00 | 00000C40: 3B 49 4E 20 4C 4F 43 41 54 49 4F 4E 20 30 0D 52 |;IN LOCATION 0.R| 00000C50: 54 53 0D 42 55 4D 50 20 49 4E 43 20 54 45 4D 50 |TS.BUMP INC TEMP| 00000C60: 32 20 20 3B 4D 4F 56 45 20 54 4F 20 4E 45 58 54 |2 ;MOVE TO NEXT| 00000C70: 20 43 48 41 52 20 49 4E 20 42 24 0D 42 4E 45 20 | CHAR IN B$.BNE | 00000C80: 50 32 0D 49 4E 43 20 54 45 4D 50 32 2B 31 0D 50 |P2.INC TEMP2+1.P| 00000C90: 32 20 49 4E 43 20 24 42 36 20 20 3B 42 55 4D 50 |2 INC $B6 ;BUMP| 00000CA0: 20 50 4F 53 49 54 49 4F 4E 0D 4C 44 41 20 24 42 | POSITION.LDA $B| 00000CB0: 36 0D 43 4D 50 20 4C 45 4E 32 20 3B 45 4E 44 20 |6.CMP LEN2 ;END | 00000CC0: 4F 46 20 42 24 20 3F 0D 42 4E 45 20 4C 4F 4F 50 |OF B$ ?.BNE LOOP| 00000CD0: 50 20 3B 4E 4F 2C 20 44 4F 20 4D 4F 52 45 20 43 |P ;NO, DO MORE C| 00000CE0: 4F 4D 50 41 52 45 53 0D 53 54 58 20 24 30 30 20 |OMPARES.STX $00 | 00000CF0: 3B 4E 4F 54 20 46 4F 55 4E 44 0D 52 54 53 0D 2E |;NOT FOUND.RTS..| 00000D00: 45 4E 44 0D |END. |
;GENERAL PURPOSE ROUTINES FOR THE PET/CB
M SYSTEM.;REQUIRES A 257 CHARACTER BUFFE
R.;STARTING AT A PAGE BOUNDARY.;.;FOR 32
K BASIC 4.0 ONLY.;.CHKCOM = $BEF5 ;CHECK
FOR COMMA.VARPAR = $BD98 ;EVALUATE EXPR
ESSION.FLTINT = $C92D ;FLOATING PT TO IN
T.SYNERR = $BF00 ;?SYNTAX ERROR.LEN1 = $
00 ;WORK SPACE.LEN2 = $88 ; ''.TEMP
1 = $01 ; ''.TEMP2 = $89 ; ''.VARP
TR = $44 ;CURRENT VARAIBLE POINTER.INTEG
= $11 ;INT VALUE FOR SYS.CURFIL = $D2 ;
CURRENT FILE NUMBER.BUFFER = $7E00 ;BLOC
K GET BUFFER, MUST BE SEALED.;
;OFF WITH POKE53,126:CLR.ST
ATUS = $96 ;ST STORAGE.ARYEND = $2E ;END
OF ARRAYS.* = $7F02 ;STARTS 2 BYTS IN D
UE TO BUFFER.;.; VECTOR TABLE.JMP BLKGET
;BLOCK GET - SYS 32514.JMP INSTRG ;INS
TRING - SYS 32517.JMP POSTRG ;POS SEAR
CH - SYS 32520.;.CHKPAR JSR CHKCOM ;CHEC
K FOR COMMA AND.JSR VARPAR ;SET UP POINT
ER TO STRING.LDY #00.RTS.FINDAB JSR CHKP
AR ;FIND FIRST STRING.LDA (VARPTR),Y.STA
LEN1 ;STORE STRING 1 LENGTH.INY.LDA (VA
RPTR),Y.STA TEMP1 ;STRING 1 ADDRESS LOW.
INY.LDA (VARPTR),Y.STA TEMP1+1 ;STRING 1
ADDRESS HI.FINDB JSR CHKPAR ;FIND ANOTH
ER STRING.LDA (VARPTR),Y.STA LEN2 ;STORE
STRING 2 LENGTH.INY.LDA (VARPTR),Y.STA
TEMP2 ;STRING 2 ADDRESS LOW.INY.LDA (VAR
PTR),Y.STA TEMP2+1 ;STRING 2 ADDRESS HI.
RTS.KILSTR SEC ;GET RID OF OLD STRING.LD
A TEMP2+1.CMP ARYEND+1 ;STRING IN TEXT?.
BCC NOKILL ;YES, EXIT.LDA TEMP2.CMP ARYE
ND.BCC NOKILL.LDA LEN2.CLC.ADC TEMP2.STA
TEMP2.BCC NOHIIN.INC TEMP2+1.NOHIIN LDY
#01.LDA LEN2.STA (TEMP2),Y.INY.LDA #$FF
.STA (TEMP2),Y ;OLD STRING DEAD.NOKILL R
TS.;.FINDI JSR CHKPAR ;EVALUATE NUMERIC.
JSR FLTINT.LDA INTEG+1.BEQ R1.JMP SYNERR
.R1 LDA INTEG.RTS.;.;** BLOCK GET
ROUTINE **.BLKGET JSR FINDI ;GET
FILE NUMBER.STA CURFIL.LDA #<BUFFER ;GET
BUFFER ADDRESS.STA TEMP1.LDA #>BUFFER.S
TA TEMP1+1.JSR FINDB ;FIND STRING VARIAB
LE.JSR KILSTR ;KILL OLD STRING.LDX CURFI
L.JSR $FFC6 ;SET INPUT DEVICE.INLOOP JSR
$FFE4 ;GET A CHARACTER.TAX ;SAVE CHAR I
N .X.CMP #$0D ;CARRIAGE RETURN?.BEQ VARS
ET ;YES, STOP INPUT.LDY #$00.STA (TEMP1)
,Y ;STORE CHAR IN BUFFER.INC TEMP1 ;INCR
EMENT LENGTH.LDY TEMP1 ;GET LENGTH.CPY #
255 ;MAX ?.BEQ PRESET.LDY STATUS ;MORE C
HARS?.BEQ INLOOP ;YES, CONTINUE.PRESET T
XA ;GET CHAR FROM .X.BNE VARSET ;LAST CH
AR CHR$(0)?.DEC TEMP1 ;YES, DEC LENGTH.V
ARSET JSR $FFCC ;CLOSE CHANNEL.LDY #$00.
LDA TEMP1.STA (VARPTR),Y ;STOR LEN IN PO
INTER.INY.LDA #<BUFFER.STA (VARPTR),Y ;S
TORE POINTER LOW.INY.LDA #>BUFFER.STA (V
ARPTR),Y ;STORE POINTER HI.RTS.;.;**
INSTRING ROUTINE **.INSTR
G JSR FINDAB ;FIND BOTH VARIABLES.JSR FI
NDI ;GET INSERT POSITION.DEC INTEG.LDA T
EMP2.CLC.ADC INTEG.STA TEMP2.BCC I1.INC
TEMP2+1.I1 LDY #$00.I2 LDA (TEMP1),Y.STA
(TEMP2),Y ;TRANSFER BYTES.INY.CPY LEN1
;END OF INSERT.BNE I2 ;NO, DO MORE.RTS.;
.;** POSITION SEARCH ROUTINE
**.POSTRG JSR FINDAB ;FIND BOTH VARIAB
LES.LDA #$00.TAX ;X REG = 0.STA $B6 ;RES
ET POSITION.LOOPP LDY #$00 ;ZEROIZE OFF
SET.P1 LDA (TEMP1),Y ;GET CHAR AT A$,Y.
CMP (TEMP2),Y ;SAME AS CHAR AT B$,Y ?.BN
E BUMP ;NO, MOVE TO NEXT A$ CHAR.INY ;YE
S, INCREMENT Y.CPY LEN1 ;SAME AS LEN OF
A$?.BNE P1 ;NO, MORE CHARS TO COMPARE.IN
C $B6 ;YES, BUMP POSITION.LDA $B6 ;AND S
TORE IT.STA $00 ;IN LOCATION 0.RTS.BUMP
INC TEMP2 ;MOVE TO NEXT CHAR IN B$.BNE
P2.INC TEMP2+1.P2 INC $B6 ;BUMP POSITIO
N.LDA $B6.CMP LEN2 ;END OF B$ ?.BNE LOOP
P ;NO, DO MORE COMPARES.STX $00 ;NOT FOU
ND.RTS..END.
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL