; ; 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 (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