_  __   _  _         _ _     _      _           _           
  __| |/ /_ | || |     __| (_)___| | __ (_)_ __   __| | _____  __
 / _` | '_ \| || |_   / _` | / __| |/ / | | '_ \ / _` |/ _ \ \/ /
| (_| | (_) |__   _| | (_| | \__ \   <  | | | | | (_| |  __/>  < 
 \__,_|\___/   |_|    \__,_|_|___/_|\_\ |_|_| |_|\__,_|\___/_/\_\
                                                                 
            

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 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL