home *** CD-ROM | disk | FTP | other *** search
- ;
- ; AREACODE.ASM Ver 1.0
- ;
- ; as of
- ;
- ; January 2, 1981
- ;
- ; AREACODE is used to display the region and state, specified
- ; by the user...very handy, when someone leaves a area code
- ; number on a CBBS, but no city or state reference. Simple
- ; enough to use, just type AREACODE nnn<cr> (where 'nnn' is a
- ; three digit area code), and in return, you get a
- ; geographical region by city(s), and state. Sorry if your
- ; particular city is not represented, and feel free to add it
- ; as required...
- ;
- ; This is not the most 'elegant' search routine that I could
- ; have used in implementing this program, but it is
- ; fast...it's best described as a "forward scanning/side
- ; checking mess"...if you don't find it matching on first
- ; character, drop to the next possible match...
- ;
- ; Best regards,
- ;
- ; Kelly Smith, CP/M-Net SYSOP
- ; 805-527-9321 (Modem, 300 Baud)
- ; 805-527-0518 (Verbal Abuse)
- ;
-
- base equ 0 ; CP/M system base address
- bdos equ base+5 ; BDOS entry address
- tbuff equ base+80h; temporary (command) buffer
-
- prnstg equ 9 ; print string (ending in '$') function
-
- lf equ 0ah ; ASCII line feed
- cr equ 0dh ; ASCII carriage return
-
- org base+100h
-
- lxi h,0 ; make local stack, so no warm boot
- dad sp
- shld oldstk
- lxi sp,stack; old stack saved, make new stack
- lxi d,msg1 ; "Area code"
- call print$message
- lxi h,tbuff ; point to area code length
- mvi d,0 ; clear D Reg.
- mov a,m ; get it...
- adi 1 ; adjust buffer pointer +1
- mov e,a
- dad d ; point 1 past area code number
- mvi m,'$' ; tag with 'end of string'
- lxi d,tbuff+1 ; check for valid entry
- ldax d ; must be ASCII space to be correct
- cpi ' '
- jz inputok
- lxi d,msg4 ; "NOT specified"
- call print$message
- jmp exit ; exit to CP/M now
- inputok:call print$message ; o.k., so far...print whatver was input
- lxi d,msg2 ; ", is "
- call print$message
- mvi b,0 ; clear character position counter
- lxi d,tbuff+2 ; point to area code
- lxi h,area$code$table ; point to area code table
- scan: ldax d ; get first character of area code for match
- cmp m ; does it match any first character in table?
- jnz scan3 ; if no match, advance 58 characters in table
- scan1: inx d ; bump for next area code character
- inx h ; bump to second character in area code table
- inr b ; bump character position counter
- mov a,b ; has character counter gone three positions?
- cpi 3
- jnz scan2 ; match next character, if not at position 3
- dcx d ; adjust character position for subsequent match
- dcx h
- ldax d ; get last in entered area code
- cmp m ; match to last character in area code table?
- jz match ; if last character matches, display region, and state
- inx d ; no match, bump both pointers
- inx h
- scan2: ldax d ; get next character to match
- cmp m ; any match yet?
- jnz backup ; back-up, if no match on current position
- mov a,b ; are we at final character position?
- cpi 3
- jz match ; if so, we have final match
- jmp scan ; not final position, try again...
- backup: dcx d ; back-up to start of entered area code
- dcx h ; back-up to start of current area code in table
- dcr b ; de-bump character position counter
- jnz backup ; loop until we are at start of string
- scan3: push d ; save pointer to entered area code
- lxi d,58 ; make 58 character bias
- dad d ; add bias to area code table pointer
- pop d ; recover pointer to entered area code
- mov a,m ; have we hit "EOF" in area code table column?
- cpi 'Z'-40h
- jnz scan ; if not, try next string for a match...
- nomatch:lxi d,msg3 ; "NOT a valid area code"
- call print$message
- jmp exit ; exit to CP/M now...
- match: inx h ; bump for region and state table location
- xchg ; swap to D&E Regs.
- call print$message
- exit: lxi d,crlf ; keep it neat...
- call print$message
- lhld oldstk ; get old CP/M stack
- sphl ; restore stack pointer, so no warm boot
- ret ; return to CP/M...
- ;
- print$message ; print message string
- ;
- mvi c,prnstg; print string (until '$') function
- call bdos
- ret
- ;
- area$code$table: ; storage for area code, region, state
- ;
- db '205'
- db ' all regions, Alabama $'
- db '907'
- db ' all regions, Alaska $'
- db '602'
- db ' all regions, Arizona $'
- db '213'
- db ' Los Angeles, California $'
- db '805'
- db ' Bakersfield, Ventura and Simi Valley, California $'
- db '707'
- db ' Eureka, Napa and Santa Rosa, California $'
- db '209'
- db ' Fresno and Stockton, California $'
- db '415'
- db ' Oakland and San Francisco, California $'
- db '714'
- db ' Orange and San Diego, California $'
- db '916'
- db ' Sacramento and South Tahoe, California $'
- db '408'
- db ' San Jose and Sunnyvale, California $'
- db '519'
- db ' Ontario, Canada $'
- db '514'
- db ' Montreal, Canada $'
- db '705'
- db ' North Bay, Ontario, Canada $'
- db '807'
- db ' Ontario, Canada $'
- db '613'
- db ' Ottawa, Ontario, Canada $'
- db '418'
- db ' Quebec, Quebec, Canada $'
- db '819'
- db ' Quebec, Canada $'
- db '416'
- db ' Toronto and Ontario, Canada $'
- db '204'
- db ' Manatoba, Canada $'
- db '306'
- db ' Saskatchewan, Canada $'
- db '403'
- db ' Alberta, Canada $'
- db '804'
- db ' British Columbia, Canada $'
- db '303'
- db ' all regions, Colorado $'
- db '203'
- db ' all regions, Connecticut $'
- db '302'
- db ' all regions, Deleware $'
- db '202'
- db ' Washington, District of Columbia $'
- db '813'
- db ' Avon Park, Fort Myers and Winter Haven, Florida $'
- db '305'
- db ' Fort Lauderdale, Key West, Miami and Florida $'
- db '904'
- db ' Jacksonville, Florida $'
- db '404'
- db ' Atlanta, Rome, Georgia $'
- db '912'
- db ' Waycross, Georgia $'
- db '808'
- db ' all regions, Hawaii $'
- db '208'
- db ' all regions, Idaho $'
- db '618'
- db ' Alton and Mount Vernon, Illinois $'
- db '312'
- db ' Aurora, Chicago, Elgin and Highland Park, Illinois $'
- db '217'
- db ' Casey and Springfield, Illinois $'
- db '815'
- db ' La Salle, Joliet and Rockford, Illinois $'
- db '812'
- db ' Evansville, Indiana $'
- db '219'
- db ' Gary, Hammond, Michigan City and South Bend, Indiana $'
- db '317'
- db ' Indianapolis and Kokomo, Indiana $'
- db '712'
- db ' Council Bluffs, Iowa $'
- db '515'
- db ' Des Moines and Mason City, Iowa $'
- db '319'
- db ' Dubuque, Iowa $'
- db '316'
- db ' Dodge City and Wichita, Kansas $'
- db '913'
- db ' Ottawa and Topeka, Kansas $'
- db '606'
- db ' Ashland and Winchester, Kentuckey $'
- db '502'
- db ' Louiseville, Paducah and Shelbyville, Kentuckey $'
- db '504'
- db ' Baton Rouge and New Orleans, Louisiana $'
- db '318'
- db ' Lake Charles, Louisiana $'
- db '207'
- db ' all regions, Maine $'
- db '301'
- db ' all regions, Maryland $'
- db '617'
- db ' Boston, Framingham and New Bedford, Massachusetts $'
- db '413'
- db ' Springfield, Massachusetts $'
- db '905'
- db ' Mexico City, Mexico $'
- db '903'
- db ' Northwest Mexico $'
- db '313'
- db ' Adrian and Ann Arbor, Michigan $'
- db '616'
- db ' Battle Creek, Cadillac and Grand Rapids, Michigan $'
- db '517'
- db ' Lancing and Saginaw, Michigan $'
- db '906'
- db ' Sault Ste. Marie, Michigan $'
- db '507'
- db ' Albert Lea and Rochester, Minnesota $'
- db '218'
- db ' Duluth, Minnesota $'
- db '612'
- db ' Minneapolis and Saint Paul, Minnesota $'
- db '601'
- db ' all regions, Mississippi $'
- db '417'
- db ' Joplin and Springfiled, Missouri $'
- db '816'
- db ' Kansas City and Saint Joseph, Missouri $'
- db '314'
- db ' Saint Louis, Missouri $'
- db '406'
- db ' all regions, Montana $'
- db '402'
- db ' Lincoln and Omaha, Nebraska $'
- db '308'
- db ' North Platte, Nebraska $'
- db '702'
- db ' all regions, Nevada $'
- db '603'
- db ' all regions, New Hampshire $'
- db '609'
- db ' Atlantic City, Camden and Trenton, New Jersey $'
- db '201'
- db ' Hackensack, Morristown and Newark, New Jersey $'
- db '505'
- db ' all regions, New Mexico $'
- db '518'
- db ' Albany, Greenwich and Schenectady, New York $'
- db '716'
- db ' Buffalo, Niagra Falls and Rochester, New York $'
- db '607'
- db ' Elmira and Stamford, New York $'
- db '516'
- db ' Hempstead, New York $'
- db '914'
- db ' Monroe, Mount Vernon and Poughkeepsie, New York $'
- db '212'
- db ' New York City, New York $'
- db '315'
- db ' Syracuse and Utica, New York $'
- db '704'
- db ' Charlotte and Salisbury, North Carolina $'
- db '919'
- db ' Greenville and Williamston, North Carolina $'
- db '701'
- db ' all regions, North Dakota $'
- db '216'
- db ' Akron, Cleveland, Massilon and Youngstown, Ohio $'
- db '513'
- db ' Cincinnati and Dayton, Ohio $'
- db '614'
- db ' Columbus, Marietta and Newark, Ohio $'
- db '419'
- db ' Toldeo, Ohio $'
- db '918'
- db ' Muskogee and Tulsa, Oklahoma $'
- db '405'
- db ' Oklahoma City, Oklahoma $'
- db '503'
- db ' all regions, Oregon $'
- db '215'
- db ' Allentown, Chester and Philadelphia, Pennsylvania $'
- db '814'
- db ' Altoona, Erie and Punxsutawney, Pennsylvania $'
- db '717'
- db ' Harrisburg, Scranton and Wilkes-Barre, Pennsylvania $'
- db '809'
- db ' all regions, Puerto Rico $'
- db '401'
- db ' all regions, Rhode Island $'
- db '803'
- db ' all regions, South Carolina $'
- db '605'
- db ' all regions, South Dakota $'
- db '615'
- db ' Chattanooga and Nashville, Tennessee $'
- db '901'
- db ' Memphis, Tennesee $'
- db '806'
- db ' Amarillo, Texas $'
- db '512'
- db ' Austin, Corpus Christi and San Antonio, Texas $'
- db '214'
- db ' Dallas, Texas $'
- db '713'
- db ' Galveston and Houston, Texas $'
- db '817'
- db ' Temple, Texas $'
- db '801'
- db ' all regions, Utah $'
- db '802'
- db ' all regions, Vermont $'
- db '809'
- db ' all regions, Virgin Islands $'
- db '804'
- db ' Charlottesville, Norfolk and Richmond, Virginia $'
- db '703'
- db ' Fredericksburg, Roanoke and Winchester, Virginia $'
- db '509'
- db ' Pullman, Walla Walla, Washington $'
- db '206'
- db ' Seattle and Vancouver, Washington $'
- db '304'
- db ' all regions, West Virginia $'
- db '608'
- db ' Beloit and Madison, Wisconsin $'
- db '715'
- db ' Eau Claire and Wausau, Wisconsin $'
- db '414'
- db ' Green Bay, Milwaukee and Racine, Wisconsin $'
- db '307'
- db ' all regions, Wyoming $'
- db 'Z'-40h ; "EOF"
- db 'Z'-40h ; "EOF"
- db 'Z'-40h ; "EOF"
- ;
- msg1: db cr,lf,' Area code$'
- msg2: db ', is$'
- msg3: db ' NOT a valid area code!$'
- msg4: db ' NOT specified!$'
- crlf: db cr,lf,'$'
- ;
- oldstk: ds 2 ; storage for "old" CP/M stack pointer
- ds 16 ; storage for "local" stack
- stack equ $ ; "local" stack pointer starts here
- ;
- end
-