Home » CEEFAX disks » telesoftware16.adl » Speller/W/WATCHC
Speller/W/WATCHC
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » CEEFAX disks » telesoftware16.adl |
Filename: | Speller/W/WATCHC |
Read OK: | ✔ |
File size: | 4227 bytes |
Load address: | FFFF1900 |
Exec address: | FFFF8023 |
File contents
10REM Watcher Spelling Checker 20REM MC to check words 30REM (C) Code Allan Kelly 26/5/87 40REM Orignal Idea Allan Kelly and David Halligan 22/5/87 50 55DIM data% 32 60version$="V 1.02" 70diction$="C.DICTION" 80nw$="C.NEWORDS" 100osbyte=&FFF4:osword=&FFF1 120oswrch=&FFEE:osnewl=&FFE7 140osasci=&FFE3:osrdch=&FFE0 160osfile=&FFDD:osargs=&FFDA 180osbget=&FFD7:osbput=&FFD4 200osfind=&FFCE:oscli=&FFF7 250PROCset_up 260 270FOR pass=4 TO 6 STEP 2 280P%=ass_start 290O%=mem_start 310[:OPT pass 320.enter LDA#1 \ Stage One Open Files 330LDY#0 335STY disc_flag 340LDX#&70 350JSR osargs 360LDA(&70),Y 370CMP#&D 380BNE open 384.enba JSR discs 390LDX#input MOD256 \ Get word 395LDY#input DIV256 400JSRdisplay 405LDA#0 410LDX#osblock MOD256 415LDY#osblock DIV256 420JSRosword 425LDA#word MOD256 430STA&70 435LDA#word DIV256 436STA&71 440JMP open 445.input EQUW&D0A:EQUS"Filename:":EQUB&FF 450.osblock EQUWword:EQUB26:EQUB32:EQUB127 490 500.open LDA disc_flag \ Open text file 502BEQ dsfo 504JSR text_disc 508.dsfo LDA#&40 510LDX&70 520LDY&71 530JSR osfind 535CMP#0 540BNE tx_open 545LDX#no_tx MOD 256 546LDY#no_tx DIV 256 547JSR display 548.txba JSR readch 549AND#&DF 550CMP#ASC"R" 551BEQ enba 552CMP#ASC"Q" 553BNE txba 554JMP(&FFFC) 555 556.no_tx EQUW&D0A 557EQUS"Text file not found" 558EQUW&D0A 559EQUS"Retry or Quit? (R/Q)" 560EQUB&FF 561 564.tx_open STA text_handle 565JSR spwc_init 570 572LDA disc_flag \ Open Dic file 574BEQ dsfo2 575JSR osnewl 576JSR diction_disc 580.dsfo2 LDA#&40 590LDX#dic_file MOD 256 600LDY#dic_file DIV 256 605JSR osfind 610CMP#0 615BNE di_open 620LDX#no_di MOD 256 622LDY#no_di DIV 256 624JSR display 626JMP menu 628.no_di EQUW&D0A 630EQUS"No Dictionary file found" 631EQUW&D0A 632EQUB&FF 634 640.di_open STA dic_handle 641TAY \ Read in look up table 642LDX#0 643.s1back1 JSR osbget 644STA diction_look_up,X 645INX 646CPX#81 647BNE s1back1 650 660.open_nw LDA#&C0 670LDX#nw_file MOD 256 680LDY#nw_file DIV 256 690JSR osfind 700CMP#0 710BNE nw_open 720LDX#opening_nw MOD 256 730LDY#opening_nw DIV 256 740JSR display 750LDA#&80 760LDX#nw_file MOD 256 770LDY#nw_file DIV 256 780JSR osfind 790TAY 800LDA#0 810JSR osbput 820JSR osfind 830JMP open_nw 840 850.opening_nw EQUW&D0A 860EQUS"Creating Newords file" 870EQUB&FF 880 900.nw_open STA nw_handle 910 1000\ STAGE 2 1010LDA#225 \ Set Function Keys 1020LDX#&80 1030JSR osbyte 1032LDA#3 \ Set printer 1034LDX#64 1036JSR osbyte 1037LDA#&10 \ ADC off 1038LDX#0 1039JSR osbyte 1040LDX#title_screen MOD 256 1050LDY#title_screen DIV 256 1060JSR display 1090LDX#5 1110LDY#1 1120JSR tab 1121LDA#21 1122LDX#0 1123JSR osbyte 1130LDY#0 1140.s2back1 LDA(&70),Y 1150JSR oswrch 1160INY 1170CMP#&D 1180BNE s2back1 1190 1200.s2back2 JSR osrdch 1205BCS esc 1210CMP#&D 1220BEQ s2fo1 1225TAX 1230JSR key_check 1232LDX#press MOD 256 1234LDY#press DIV 256 1236JSR tell_user 1240JMP s2back2 1250 1260.esc JSR escape_pressed 1270JMP s2back2 1280 1290.s2fo1 JSR clear_user 1300 1310\Start check - stage 3 1320LDA#0 \ Init virtual file PTR 1340STA&8C 1350STA&8D 1360STA&8E 1370STA&8F 1400.stage3 LDX#0 1415STX word_length 1430.s3back1 JSRget_cache_byte 1460BCC s3for1 1480LDA#&FF \ Character is invalid 1490STA end_of_file 1491LDA word_length 1494BNE s3for2 1500JMP close_down 1510.s3for1 CMP#&D 1540BEQ s3for2 1550CMP#32 1560BEQ s3for2 1561AND#&DF 1562CMP#91 1563BCS s3back1 1570CMP#65 1580BMI s3back1 1600STA word,X 1610INX 1620JMP s3back1 1630.s3for2 LDA#&D 1631STA word,X 1640STX word_length 1644CPX#0 1646BNE s3for3 1648JMP s3back1 1650 1660.s3for3 JSR diction_check 1670BCS word_found 1680JSR new_word_check 1690BCS word_found 1700JSR new_word_found 1710BCS word_found 1720JSR mispelt_word 1730JMP s3for4 1800.word_found JSR bottem_window 1810LDY#0 1820.wfback LDA word,Y 1830ORA#&20 1840JSR output_character 1850INY 1860CPY word_length 1870BNE wfback 1875LDA#32 1880JSR output_character 1890LDA end_of_file 1910BNE close_down 1920 1930.s3for4 JSR bytes 1935JSR check_keys 1940JMP stage3 1950 1960.close_down LDA#3 \ Printer 1970JSR oswrch 1980LDX#0 1990JSR osbyte 2050 2060LDA#&77 \ Close spool 2070JSR osbyte 2080LDA#0 \ Close dictionary 2090LDY dic_handle 2100JSR osfind 2102JSR empty_ram 2103LDA#0 2110LDY nw_handle \ Close NW 2115JSR osfind 2122\ Text closed by cache 2135LDA#225 \ F keys to norm 2136LDX#1 2137JSR osbyte 2140 2150LDX#sign_off MOD 256 2160LDY#sign_off DIV 256 2170JSR display 2180 2190.menu LDX#menu_mess MOD 256 2200LDY#menu_mess DIV 256 2210JSRdisplay 2220.menuba JSR osrdch 2240.mefo CMP#83 2250BNE mefo2 2260LDX#sort MOD256 2265LDY#sort DIV256 2270JMPoscli 2275.sort EQUS"RUN U.SORT":EQUB&D 2280.mefo2 CMP#77 2285BNE mefo3 2290LDX#rmen MOD256 2295LDY#rmen DIV256 2300JMP oscli 2305.rmen EQUS"RUN U.MENU":EQUB&D 2310.mefo3 CMP#81 2320BNE menuba 2330JMP(&FFFC) 3200 5800.new_word_check LDA#new_ram_words MOD 256 \ Is word in RAM? 5820STA&7A 5830LDA#new_ram_words DIV 256 5840STA&7B 5850 5860.continue_new_search LDY#0 5870LDA(&7A),Y 5880STA rword_length 5890PHA 5910LDA&7A 5920CLC 5930ADC#1 5940STA&7A 5950LDA&7B 5960ADC#0 5970STA&7B 5975PLA 5976CMP word_length 5977BNE no_new_match 5980 5990.nrwba1 LDA(&7A),Y 6000CMP word,Y 6010BNE no_new_match 6020CMP#&D 6030BEQ new_match_found 6040INY 6060JMP nrwba1 6070 6080.new_match_found SEC 6090RTS 6100 6110.no_new_match LDA&7A 6120SEC 6130ADC rword_length 6140STA&7A 6150LDA&7B 6160ADC#0 6170STA&7B 6180LDA&7A 6190CMP new_word_pointer 6200BCC continue_new_search 6210LDA&7B 6220CMP new_word_pointer+1 6230BCC continue_new_search 6240 6260LDA#0 \ New Word not In RAM - Search Disc 6270STA&70 6280STA&71 6290STA&72 6300STA&73 6305LDA#1 6310LDX#&70 6320LDY nw_handle 6330JSR osargs 6340JSR osbget 6350CMP#0 6360BNE nrwfo1 6370CLC \ File contains no new words 6380RTS 6390 6400.nrwfo1 LDA#0 \ Store current PTR 6410LDY nw_handle 6420LDX#&76 6430JSR osargs 6440.nrwba3 JSR osbget \ Get length 6445STA rword_length 6450CMP word_length 6460BNE not_same 6470LDX#0 6480.nrwba2 JSR osbget 6490CMP word,X 6500BNE not_same 6510INX 6520CMP#&D 6530BNE nrwba2 6540 6550SEC \ Words match 6560RTS 6570 6580.not_same CMP#&FF \ Test of EOF 6581BEQ nrwfo2 6585LDA&76 \ Advance PTR 6590CLC 6595ADC#2 6600ADC rword_length 6610STA&76 6620LDA&77 6630ADC#0 6640STA&77 6650LDA&78 6660ADC#0 6670STA&78 6680 6690LDA#1 \ Write new PTR 6700LDX#&76 6710JSR osargs 6720JMP nrwba3 6730 6740.nrwfo2 \ End of file reached with no match 6750CLC 6760RTS 6770 7000.new_word_found \ The word in word buffer has never been seen before 7010JSR top_window 7011LDA beep_flag 7012BNE nwrfo3 7014LDA#7 7016JSR oswrch 7020.nwrfo3 LDY#5 7030LDX#0 7040JSR tab 7050LDY#is_this DIV 256 7060LDX#is_this MOD 256 7070JSR display 7080LDY#0 7090.nwba1 LDA word,Y 7100CMP#&D 7110BEQ nwfo1 7111CMP#32 7112BCC nwrfo4 7113CMP#127 7114BCS nwrfo4 7120JSR oswrch 7130.nwrfo4 INY 7140JMP nwba1 7150.nwfo1 LDA#32 7160JSR oswrch 7170LDA#ASC"?" 7180JSR oswrch 7182LDA wrong_flag 7184BNE nwfo2a 7190 7200.nwba2 LDA#21 7201LDX#0 7202JSR osbyte 7203JSR osrdch 7210BCC nwfo2 7220JSR escape_pressed 7230JMP nwba2 7240.nwfo2 AND#&DF 7250CMP#ASC"Y" 7260BEQ store_new_word 7270CMP#ASC"N" 7280BNE nwba2 7290 7300.nwfo2a JSR clear_user \ Word not found 7305JSR bottem_window 7307CLC 7308RTS 7310.nwba5 JSR clear_user 7311JMP no_store 7312.store_new_word JSR clear_user \ Word in buffer must be stored as new 7313LDA save_flag 7314BEQ nwba5 7315CMP#1 7316BEQ nwfo3 7317LDX#saig_mess MOD 256 7318LDY#saig_mess DIV 256 7319JSR tell_user 7320.nwba4 JSR osrdch 7321BCC nwfo4 7322JSR escape_pressed 7324JMP nwba4 7325.nwfo4 AND#&DF 7326CMP#ASC"I" 7327BEQ nwba5 7328CMP#ASC"S" 7329BNE nwba4 7330.nwfo3 JSR clear_user \ Word in buffer must be stored as new 7335LDA#&FF \ Set new word flag 7336STA word_flag 7340LDA new_word_pointer 7350STA&7A 7360LDA new_word_pointer+1 7370STA&7B 7380LDY#0 7390LDA word_length 7400STA(&7A),Y 7410LDA&7A 7420CLC 7430ADC#1 7440STA&7A 7450LDA&7B 7460ADC#0 7470STA&7B 7480.nwba3 LDA word,Y 7490STA(&7A),Y 7500INY 7510CMP#&D 7520BNE nwba3 7530 7540TYA 7550CLC 7560ADC&7A 7570STA new_word_pointer 7580LDA&7B 7590ADC#0 7600STA new_word_pointer+1 7610 7630CMP#&3F 7640BCCno_store 7700 7710JSR empty_ram 7990 8000\ All RAM word on disc 8010LDA#new_ram_words MOD 256 8020STA new_word_pointer 8030LDA#new_ram_words DIV 256 8040STA new_word_pointer+1 8050 8060.no_store SEC \ Words stored 8070RTS 8080 8100.empty_ram \ Save all RAM worss to NW file 8102LDA word_flag \ Test new word flag 8104BNE erfo1 8106RTS 8110.erfo1 JSR clear_user 8111LDX#saving MOD 256 8112LDY#saving DIV 256 8113JSR tell_user 8120LDA#2 \ Read EXT 8125LDX#&70 8130LDY nw_handle 8140JSR osargs 8150LDA&70 8160SEC 8170SBC#1 8180STA&70 8190LDA&71 8200SBC#0 8210STA&71 8220LDA&72 8230SBC#0 8240STA&72 8250LDA#1 8260JSR osargs 8270JSR osbget 8280CMP#0 8290BEQ file_empty 8300LDA#1 8310JSR osargs 8320 8410.file_empty LDA#new_ram_words MOD 256 8420STA&7A 8430LDA#new_ram_words DIV 256 8440STA&7B 8450 8460.erba1 LDY#0 8470LDA(&7A),Y 8480LDY nw_handle 8490JSR osbput 8500LDA&7A 8510CLC 8520ADC#1 8530STA&7A 8540LDA&7B 8550ADC#0 8560STA&7B 8570CMP new_word_pointer+1 8580BCC erba1 8590LDA&7A 8600CMP new_word_pointer 8610BCC erba1 8620 8630LDA#&FF \ Mark last byte 8640JSR osbput 8650LDA#0 \ Mark file as holding 8660STA&70 8670STA&71 8680STA&72 8690STA&73 8700LDA#1 8710LDX#&70 8720LDY nw_handle 8730JSR osargs 8740LDA#&FF 8750JSR osbput 8760RTS 8770 8780.saving EQUS"Saving Newords to disc" 8785EQUB&FF 8900.is_this EQUS"Correct spelling: " 8910EQUB&FF 9000.mispelt_word \ Word im buffer has been misplet 9010\ Output to screen in upper case and pinter/disc is need be 9020 9030LDA printer_flag 9050BEQ msfo1 9060LDY#0 9070.msba1 LDA#1 9080JSR oswrch 9090LDA word,Y 9100JSR oswrch 9110INY 9120CPY word_length 9130BNE msba1 9140LDA#1 9150JSR oswrch 9160LDA#32 9170JSR oswrch 9171LDA printer_flag 9172CMP#2 9173BNE msfo1 9174LDA#1 9175JSR oswrch 9176LDA#13 9177JSR oswrch 9180 9190.msfo1 LDA spool_flag 9210BEQ msfo2 9220LDX#0 9230LDY spool_handle 9240.msba2 LDA word,X 9250JSR osbput 9260INX 9270CPX word_length 9280BNE msba2 9290LDA#&D 9300JSR osbput 9310 9320.msfo2 LDX#0 9330.msba2 LDA word,X 9340AND#&DF 9350JSR oswrch 9360INX 9370CPX word_length 9380BNE msba2 9390LDA#32 9400JSR oswrch 9410RTS 10900.spwc_init_win LDA disc_flag 10910BEQ spwc_init 10920JSR insert_text 11000.spwc_init LDA#2 11010LDY text_handle 11020LDX#&80 11030JSRosargs 11040LDA#0 11050STA&84 11060LDA#&40 11070STA&85 11080 11090.spwcba1 LDYtext_handle 11100JSRosbget 11105BCS end_of_dic_file 11110LDY#0 11120STA(&84),Y 11130LDA&84 11140CLC 11150ADC#1 11160STA&84 11170LDA&85 11180ADC#0 11190STA&85 11200CMP#&7A 11210BCS cache_full 11270JMPspwcba1 11280 11290.cache_full LDA#0 11300LDYtext_handle 11310LDX#&88 11320JSRosargs 11330LDA&88 11340CMP&80 11350BNEstore_aptr 11360LDA&89 11370CMP&81 11380BNEstore_aptr 11390.end_of_dic_file LDA#&FF 11400STAcfe 11401LDY text_handle 11402LDA#0 11403JSR osfind 11410.store_aptr LDA&84 11420STA&86 11430LDA&85 11440STA&87 11450LDA#0 11460STA&84 11470LDA#&40 11480STA&85 11490RTS 11500 11510.get_cache_byte LDY#0 11520LDA(&84),Y 11530STAsa 11531LDA&8C \ Increase virtual file PTR 11532CLC 11533ADC#1 11534STA&8C 11535LDA&8D 11536ADC#0 11537STA&8D 11538LDA&8E 11539ADC#0 11540STA&8E 11541LDA&8F 11542ADC#0 11543STA&8F 11548LDA&84 11550CLC 11560ADC#1 11570STA&84 11580LDA&85 11590ADC#0 11600STA&85 11610CMP&87 11620BCCgcb_exit 11630LDA&84 11640CMP&86 11650BCCgcb_exit 11670LDAcfe 11680CMP#&FF 11690BNEgcbfo 11695LDA sa 11700SEC 11710RTS 11720.gcbfo STX sx 11721JSRspwc_init_win 11722LDA disc_flag 11724BEQ gcb_exit 11726JSR insert_diction 11728LDX sx 11730.gcb_exit LDAsa 11740CLC 11750RTS 11760.cfe BRK 11765.sx BRK 11770 11800.insert_text JSR top_window 11802LDX#0 11804LDY#6 11806JSR tab 11810JSR text_disc 11820JSR clear_user 11830JSR bottem_window 11840RTS 11850 11860.insert_diction JSR top_window 11862LDX#0 11864LDY#6 11866JSR tab 11870JSR diction_disc 11880JSR clear_user 11890JSR bottem_window 11900RTS 11910 11920.text_disc LDX#text_dmess MOD 256 11930LDY#text_dmess DIV 256 11940JSR display 11950LDA#21 11960LDX#0 11970JSR osbyte 11980.tdba JSR readch 11990CMP#32 12000BNE tdba 12010RTS 12020 12030.text_dmess EQUS"Insert TEXT disc and press space" 12050EQUB&FF 12060 12070.diction_disc LDX#dict_dmess MOD 256 12080LDY#dict_dmess DIV 256 12090JSR display 12100LDA#21 12110LDX#0 12120JSR osbyte 12130.ddba JSR readch 12140CMP#32 12150BNE ddba 12160RTS 12170 12180.dict_dmess EQUS"Insert DICTIONARY disc then press space" 12200EQUB&FF 12210 12250.discs LDX#discs_mess MOD 256 12260LDY#discs_mess DIV 256 12270JSR display 12272LDA#21 12274LDX#0 12276JSR osbyte 12280.discsba JSR readch 12290AND#&DF 12300CMP#ASC"N" 12310BEQ diff 12320CMP#ASC"Y" 12330BNE discsba 12336JSR oswrch 12340LDA#0 12350STA disc_flag 12360RTS 12370.diff JSR oswrch 12375LDA#&FF 12380STA disc_flag 12390RTS 12400.disc_flag BRK 12410.discs_mess EQUB22:EQUB7 \ MODE7 12411EQUW&D0A 12412EQUS"Watcher "+version$ 12413EQUW&D0A 12414EQUS"(C) Allan Kelly 1987" 12415EQUW&D0A 12420EQUS"Are Dictionary and Text on same disc?" 12430EQUB&FF 13900.readch JSR osrdch 13910BCS escape_pressed 13920RTS 14000.escape_pressed LDA#&7C 14010JSR osbyte 14020LDY#esc_mess DIV 256 14030LDX#esc_mess MOD 256 14040JSR tell_user 14050.epba JSR osrdch 14060AND#&DF 14070CMP#ASC"Y" 14080BEQ abort 14090CMP#ASC"N" 14100BNE epba 14110JSR clear_user 14120RTS 14130.abort LDA word_flag 14140BEQ epfo 14150LDX#snw MOD 256 14160LDY#snw DIV 256 14170JSR tell_user 14180.epba2 JSR osrdch 14190CMP#ASC"N" 14200BEQ epfo 14210CMP#ASC"Y" 14220BNE epba2 14230JSR empty_ram 14240.epfo LDA#0 14250LDY#0 14260JSR osfind 14270LDA#3 14280JSR oswrch 14290LDA#3 14300LDX#0 14310JSR osbyte 14320LDA#225 \ Return F keys to normal 14330LDX#1 14340JSR osbyte 14350JSR bottem_window 14370JMP menu 14400.esc_mess EQUS"Do you wish to abort? (Y/N)" 14410EQUB&FF 14440.snw EQUW&D0A 14450EQUS"Save New Words? (Y/N)" 14460EQUB&FF 15000.open_spool PHA 15010LDA spool_flag 15020BEQ osfo1 15030PLA 15040LDX#spool_open MOD 256 15050LDY#spool_open DIV 256 15060JSR tell_user 15070JSR osrdch 15075JSR clear_user 15080RTS 15090 15100.osfo1 PLA 15110STA spool_flag 15112JSR top_window 15114LDY#5 15116LDX#0 15118JSR tab 15120.osba1 LDX#get_name MOD 256 15130LDY#get_name DIV 256 15140JSR display 15150LDA#0 15160LDX#spool_block MOD 256 15170LDY#spool_block DIV 256 15180JSR osword 15190BCC osfo2 15200JSR escape_pressed 15210JSR clear_user 15220JMP osba1 15230 15240.osfo2 LDA#&80 15250LDX#spool_name MOD 256 15260LDY#spool_name DIV 256 15270JSR osfind 15280STA spool_handle 15285CMP#0 15286BEQ osfo3 15290LDY#2 15291LDX#20 15292JSR tab 15293LDY#0 15294.osba2 LDA spool_name,Y 15295JSR oswrch 15296INY 15297CMP#&D 15298BNE osba2 15300JSR clear_user 15305JSR bottem_window 15310RTS 15320 15330.spool_open EQUS"Spool file is already open. (RETURN)" 15340EQUB&FF 15350.get_name EQUS"Enter Spool filename: " 15360EQUB&FF 15370.spool_block EQUW spool_name 15380EQUB 16 15390EQUB 32 15400EQUB 127 15405.spool_name OPT FNspace(16,13) 15410 15420.osfo3 LDX#err1 MOD 256 15430LDY#err1 DIV 256 15440JSR tell_user 15450JSR osrdch 15470JSR bottem_window 15472LDA#0 15474STA spool_flag 15480RTS 15490.err1 EQUS"Spool file cannot be opened (RETURN)" 15500EQUB&FF 16000 16010.bytes \ Update screen bytes counter 16020JSR top_window 16030LDY#3 16040LDX#14 16050JSR tab 16100LDX&8C \Use virtual file PTR 16110LDY&8D 16120LDA&8E 16130JSR hex_out 16180LDY#3 16190LDX#32 16200JSR tab 16210LDA&80 16220SEC 16230SBC&8C 16240TAX 16250LDA&81 16260SBC&8D 16270TAY 16280LDA&82 16290SBC&8E 16300JSR hex_out 16370JSR bottem_window 16380RTS 16390 18010.check_keys LDA#&81 18020LDX#1 18030LDY#0 18040JSR osbyte 18050BCC key_check 18060CPY#27 18070BNE ckfo1 18080JSR escape_pressed 18090.ckfo1 RTS 18100 18110.key_check \ X=key pressed 18120CPX#&80 18130BNE ckfo2 18140LDA#2 18150STA save_flag 18152LDX#save_sel MOD 256 18153LDY#save_sel DIV 256 18154JMP ckfo6b 18170.ckfo2 CPX#&81 18180BNE ckfo3 18190LDA#1 18200STA save_flag 18202LDX#save_all MOD 256 18204LDY#save_all DIV 256 18205JMP ckfo6b 18220.ckfo3 CPX#&82 18230BNE ckfo4 18240LDA#0 18250STA save_flag 18252LDX#save_none MOD 256 18254LDY#save_none DIV 256 18255JMP ckfo6b 18270.ckfo4 CPX#&83 18280BNE ckfo5 18290LDA#2 18300LDX#pr_select MOD 256 18305LDY#pr_select DIV 256 18310JMP ckfo6a 18320.ckfo5 CPX#&84 18330BNE ckfo6 18340LDA#1 18350LDX#pr_on MOD 256 18355LDY#pr_on DIV 256 18360JMP ckfo6a 18370.ckfo6 CPX#&85 18380BNE ckfo7 18381LDX#pr_off MOD 256 18382LDY#pr_off DIV 256 18390LDA#0 18400.ckfo6a STA printer_flag 18401.ckfo6b TXA 18402PHA 18403TYA 18404PHA 18405JSR top_window 18406PLA 18407TAY 18408PLA 18409TAX 18410JSR display 18411JSR bottem_window 18412RTS 18420.ckfo7 CPX#&86 18430BNE ckfo8 18440LDA#2 18460JMP open_spool 18480.ckfo8 CPX#&87 18490BNE ckfo9 18500LDA#1 18510JMP open_spool 18540.ckfo9 CPX#&88 18550BNE ckfoA 18560LDA spool_flag 18570BEQ ckfo9a 18580LDY spool_handle 18590LDA#0 18600JSR osfind 18610LDA#0 18620STA spool_flag 18630LDX#csm MOD 256 18640LDY#csm DIV 256 18650JSR tell_user 18660.ckfo9a RTS 18670.csm EQUS"Spool file is now closed" 18672EQUB31 18673EQUB20 18674EQUB2 18675EQUS"OFF" 18676OPT FNspace(16,32) 18680EQUB&FF 18690.ckfoA CPX#&89 18700BNE ckfoB 18710LDA beep_flag 18720EOR#&FF 18730STA beep_flag 18740CMP#0 18741BEQ befo 18743LDY#beep_off DIV 256 18744LDX#beep_off MOD 256 18745JMP ckfo6b 18748.befo LDY#beep_on DIV 256 18750LDX#beep_on MOD 256 18751JMP ckfo6b 18760.ckfoB CPX#9 18765BNE ckfoC 18770LDY#2 18780.tab1 LDX#&FF 18790.tab2 DEX 18800BNE tab2 18810DEY 18820BNE tab1 18830.tab4 LDA#21 18840LDX#0 18850JSR osbyte 18860JSR osrdch 18861BCS tab3 18862CMP#9 18863BNE tab4 18870RTS 18875.tab3 JMP escape_pressed 18880.ckfoC CPX#ASC"@" 18881BEQ ckfoD 18882RTS \ Not one of our keys 18883.ckfoD LDA wrong_flag \ Test status 18884EOR#&FF 18885STA wrong_flag 18887BNE tefo 18888LDY#test_on DIV 256 18889LDX#test_on MOD 256 18890JMP ckfo6b 18891.tefo LDY#test_off DIV 256 18892LDX#test_off MOD 256 18893JMP ckfo6b 19310.end_of_file BRK \ End of file flag 19350.save_flag EQUB2 19360.beep_flag BRK 19365.wrong_flag BRK 19380.word_flag BRK 19390.new_word_pointer EQUW new_ram_words 19410.new_ram_words 19420] 19430NEXT 19440PRINT"Saving Watcher code" 19441IF FNos_save("L.Wprog",mem_start,ass_start,mem_start,O%) 19450END 19460DEFFNspace(x,y) 19470FOR m=O% TO x+O%:?m=y:NEXT 19475P%=P%+x 19476O%=O%+x 19480:=pass 20000DEFPROCset_up 21000PRINT''"Load the Variables !!!" 21010PRINT" *EXEC L.Wexec" 21020STOP 30000ENDPROC 30010 31000DEFFNos_save(file$,load%,exec%,start%,end%) 31010A%=0 31020X%=data% MOD 256 31030Y%=data% DIV 256 31040!data%=data%+18 31050!(data%+2)=load% 31060!(data%+6)=exec% 31070!(data%+10)=start% 31080!(data%+14)=end% 31090$(data%+18)=file$ 31100:=USR&FFDD AND&3
� Watcher Spelling Checker � MC to check words "� (C) Code Allan Kelly 26/5/87 (9� Orignal Idea Allan Kelly and David Halligan 22/5/87 2 7� data% 32 <version$="V 1.02" Fdiction$="C.DICTION" Pnw$="C.NEWORDS" dosbyte=&FFF4:osword=&FFF1 xoswrch=&FFEE:osnewl=&FFE7 �osasci=&FFE3:osrdch=&FFE0 �osfile=&FFDD:osargs=&FFDA �osbget=&FFD7:osbput=&FFD4 �osfind=&FFCE:oscli=&FFF7 ��set_up � pass=4 � 6 � 2 P%=ass_start "O%=mem_start 6[:OPT pass @'.enter LDA#1 \ Stage One Open Files J LDY#0 OSTY disc_flag TLDX#&70 ^JSR osargs hLDA(&70),Y r CMP#&D |BNE open �.enba JSR discs �LDX#input �256 \ Get word �LDY#input �256 �JSRdisplay � LDA#0 �LDX#osblock �256 �LDY#osblock �256 � JSRosword �LDA#word �256 � STA&70 �LDA#word �256 � STA&71 �JMP open �+.input EQUW&D0A:EQUS"Filename:":EQUB&FF �+.osblock EQUWword:EQUB26:EQUB32:EQUB127 � �(.open LDA disc_flag \ Open text file �BEQ dsfo �JSR text_disc �.dsfo LDA#&40 � LDX&70 LDY&71 JSR osfind CMP#0 BNE tx_open !LDX#no_tx � 256 "LDY#no_tx � 256 #JSR display $.txba JSR readch % �#&DF &CMP#�"R" 'BEQ enba (CMP#�"Q" )BNE txba *JMP(&FFFC) + ,.no_tx EQUW&D0A -EQUS"Text file not found" .EQUW&D0A /EQUS"Retry or Quit? (R/Q)" 0EQUB&FF 1 4.tx_open STA text_handle 5JSR spwc_init : <!LDA disc_flag \ Open Dic file > BEQ dsfo2 ?JSR osnewl @JSR diction_disc D.dsfo2 LDA#&40 NLDX#dic_file � 256 XLDY#dic_file � 256 ]JSR osfind b CMP#0 gBNE di_open lLDX#no_di � 256 nLDY#no_di � 256 pJSR display rJMP menu t.no_di EQUW&D0A v"EQUS"No Dictionary file found" wEQUW&D0A xEQUB&FF z �.di_open STA dic_handle �TAY \ Read in look up table � LDX#0 �.s1back1 JSR osbget �STA diction_look_up,X �INX � CPX#81 �BNE s1back1 � �.open_nw LDA#&C0 �LDX#nw_file � 256 �LDY#nw_file � 256 �JSR osfind � CMP#0 �BNE nw_open �LDX#opening_nw � 256 �LDY#opening_nw � 256 �JSR display �LDA#&80 �LDX#nw_file � 256 LDY#nw_file � 256 JSR osfind TAY LDA#0 *JSR osbput 4JSR osfind >JMP open_nw H R.opening_nw EQUW&D0A \EQUS"Creating Newords file" fEQUB&FF p �.nw_open STA nw_handle � � \ STAGE 2 �LDA#225 \ Set Function Keys �LDX#&80 JSR osbyte LDA#3 \ Set printer LDX#64 JSR osbyte LDA#&10 \ ADC off LDX#0 JSR osbyte LDX#title_screen � 256 LDY#title_screen � 256 $JSR display B LDX#5 V LDY#1 `JSR tab a LDA#21 b LDX#0 cJSR osbyte j LDY#0 t.s2back1 LDA(&70),Y ~JSR oswrch �INY � CMP#&D �BNE s2back1 � �.s2back2 JSR osrdch �BCS esc � CMP#&D � BEQ s2fo1 �TAX �JSR key_check �LDX#press � 256 �LDY#press � 256 �JSR tell_user �JMP s2back2 � �.esc JSR escape_pressed �JMP s2back2 .s2fo1 JSR clear_user \Start check - stage 3 (LDA#0 \ Init virtual file � < STA&8C F STA&8D P STA&8E Z STA&8F x.stage3 LDX#0 �STX word_length �.s3back1 JSRget_cache_byte �BCC s3for1 �"LDA#&FF \ Character is invalid �STA end_of_file �LDA word_length �BNE s3for2 �JMP close_down �.s3for1 CMP#&D BEQ s3for2 CMP#32 BEQ s3for2 �#&DF CMP#91 BCS s3back1 " CMP#65 ,BMI s3back1 @STA word,X JINX TJMP s3back1 ^.s3for2 LDA#&D _STA word,X hSTX word_length l CPX#0 nBNE s3for3 pJMP s3back1 r |.s3for3 JSR diction_check �BCS word_found �JSR new_word_check �BCS word_found �JSR new_word_found �BCS word_found �JSR mispelt_word �JMP s3for4 !.word_found JSR bottem_window LDY#0 .wfback LDA word,Y & �A#&20 0JSR output_character :INY DCPY word_length NBNE wfback S LDA#32 XJSR output_character bLDA end_of_file vBNE close_down � �.s3for4 JSR bytes �JSR check_keys �JMP stage3 � �.close_down LDA#3 \ Printer �JSR oswrch � LDX#0 �JSR osbyte LDA#&77 \ Close spool JSR osbyte LDA#0 \ Close dictionary *LDY dic_handle 4JSR osfind 6JSR empty_ram 7 LDA#0 >LDY nw_handle \ Close NW CJSR osfind J\ Text closed by cache WLDA#225 \ F keys to norm X LDX#1 YJSR osbyte \ fLDX#sign_off � 256 pLDY#sign_off � 256 zJSR display � �.menu LDX#menu_mess � 256 �LDY#menu_mess � 256 �JSRdisplay �.menuba JSR osrdch �.mefo CMP#83 � BNE mefo2 �LDX#sort �256 �LDY#sort �256 �JMPoscli �!.sort EQUS"RUN U.SORT":EQUB&D �.mefo2 CMP#77 � BNE mefo3 �LDX#rmen �256 �LDY#rmen �256 � JMP oscli !.rmen EQUS"RUN U.MENU":EQUB&D .mefo3 CMP#81 BNE menuba JMP(&FFFC) � �=.new_word_check LDA#new_ram_words � 256 \ Is word in RAM? � STA&7A �LDA#new_ram_words � 256 � STA&7B � �.continue_new_search LDY#0 �LDA(&7A),Y �STA rword_length PHA LDA&7A CLC * ADC#1 4 STA&7A > LDA&7B H ADC#0 R STA&7B WPLA XCMP word_length YBNE no_new_match \ f.nrwba1 LDA(&7A),Y pCMP word,Y zBNE no_new_match � CMP#&D �BEQ new_match_found �INY �JMP nrwba1 � �.new_match_found SEC �RTS � �.no_new_match LDA&7A �SEC �ADC rword_length � STA&7A LDA&7B ADC#0 STA&7B $ LDA&7A .CMP new_word_pointer 8BCC continue_new_search B LDA&7B LCMP new_word_pointer+1 VBCC continue_new_search ` t-LDA#0 \ New Word not In RAM - Search Disc ~ STA&70 � STA&71 � STA&72 � STA&73 � LDA#1 �LDX#&70 �LDY nw_handle �JSR osargs �JSR osbget � CMP#0 �BNE nrwfo1 �$CLC \ File contains no new words �RTS � #.nrwfo1 LDA#0 \ Store current � LDY nw_handle LDX#&76 JSR osargs (#.nrwba3 JSR osbget \ Get length -STA rword_length 2CMP word_length <BNE not_same F LDX#0 P.nrwba2 JSR osbget ZCMP word,X dBNE not_same nINX x CMP#&D �BNE nrwba2 � �SEC \ Words match �RTS � �!.not_same CMP#&FF \ Test of � �BEQ nrwfo2 �LDA&76 \ Advance � �CLC � ADC#2 �ADC rword_length � STA&76 � LDA&77 � ADC#0 � STA&77 � LDA&78 ADC#0 STA&78 "LDA#1 \ Write new � ,LDX#&76 6JSR osargs @JMP nrwba3 J T/.nrwfo2 \ End of file reached with no match ^CLC hRTS r XH.new_word_found \ The word in word buffer has never been seen before bJSR top_window cLDA beep_flag dBNE nwrfo3 f LDA#7 hJSR oswrch l.nwrfo3 LDY#5 v LDX#0 �JSR tab �LDY#is_this � 256 �LDX#is_this � 256 �JSR display � LDY#0 �.nwba1 LDA word,Y � CMP#&D � BEQ nwfo1 � CMP#32 �BCC nwrfo4 �CMP#127 �BCS nwrfo4 �JSR oswrch �.nwrfo4 INY � JMP nwba1 �.nwfo1 LDA#32 �JSR oswrch LDA#�"?" JSR oswrch LDA wrong_flag BNE nwfo2a .nwba2 LDA#21 ! LDX#0 "JSR osbyte #JSR osrdch * BCC nwfo2 4JSR escape_pressed > JMP nwba2 H.nwfo2 �#&DF RCMP#�"Y" \BEQ store_new_word fCMP#�"N" p BNE nwba2 z �+.nwfo2a JSR clear_user \ Word not found �JSR bottem_window �CLC �RTS �.nwba5 JSR clear_user �JMP no_store �I.store_new_word JSR clear_user \ Word in buffer must be stored as new �LDA save_flag � BEQ nwba5 � CMP#1 � BEQ nwfo3 �LDX#saig_mess � 256 �LDY#saig_mess � 256 �JSR tell_user �.nwba4 JSR osrdch � BCC nwfo4 �JSR escape_pressed � JMP nwba4 �.nwfo4 �#&DF �CMP#�"I" � BEQ nwba5 �CMP#�"S" � BNE nwba4 �@.nwfo3 JSR clear_user \ Word in buffer must be stored as new �LDA#&FF \ Set new word flag �STA word_flag �LDA new_word_pointer � STA&7A �LDA new_word_pointer+1 � STA&7B � LDY#0 �LDA word_length �STA(&7A),Y � LDA&7A �CLC ADC#1 STA&7A LDA&7B $ ADC#0 . STA&7B 8.nwba3 LDA word,Y BSTA(&7A),Y LINY V CMP#&D ` BNE nwba3 j tTYA ~CLC � ADC&7A �STA new_word_pointer � LDA&7B � ADC#0 �STA new_word_pointer+1 � �CMP#&3F �BCCno_store JSR empty_ram 6 @\ All RAM word on disc JLDA#new_ram_words � 256 TSTA new_word_pointer ^LDA#new_ram_words � 256 hSTA new_word_pointer+1 r | .no_store SEC \ Words stored �RTS � �..empty_ram \ Save all RAM worss to NW file �&LDA word_flag \ Test new word flag � BNE erfo1 �RTS �.erfo1 JSR clear_user �LDX#saving � 256 �LDY#saving � 256 �JSR tell_user �LDA#2 \ Read � �LDX#&70 �LDY nw_handle �JSR osargs � LDA&70 �SEC � SBC#1 � STA&70 � LDA&71 SBC#0 STA&71 LDA&72 & SBC#0 0 STA&72 : LDA#1 DJSR osargs NJSR osbget X CMP#0 bBEQ file_empty l LDA#1 vJSR osargs � �'.file_empty LDA#new_ram_words � 256 � STA&7A �LDA#new_ram_words � 256 � STA&7B ! !.erba1 LDY#0 !LDA(&7A),Y ! LDY nw_handle !*JSR osbput !4 LDA&7A !>CLC !H ADC#1 !R STA&7A !\ LDA&7B !f ADC#0 !p STA&7B !zCMP new_word_pointer+1 !� BCC erba1 !� LDA&7A !�CMP new_word_pointer !� BCC erba1 !� !�LDA#&FF \ Mark last byte !�JSR osbput !� LDA#0 \ Mark file as holding !� STA&70 !� STA&71 !� STA&72 !� STA&73 !� LDA#1 "LDX#&70 "LDY nw_handle "JSR osargs "$LDA#&FF ".JSR osbput "8RTS "B "L(.saving EQUS"Saving Newords to disc" "QEQUB&FF "�%.is_this EQUS"Correct spelling: " "�EQUB&FF #(3.mispelt_word \ Word im buffer has been misplet #2?\ Output to screen in upper case and pinter/disc is need be #< #FLDA printer_flag #Z BEQ msfo1 #d LDY#0 #n.msba1 LDA#1 #xJSR oswrch #�LDA word,Y #�JSR oswrch #�INY #�CPY word_length #� BNE msba1 #� LDA#1 #�JSR oswrch #� LDA#32 #�JSR oswrch #�LDA printer_flag #� CMP#2 #� BNE msfo1 #� LDA#1 #�JSR oswrch #� LDA#13 #�JSR oswrch #� #�.msfo1 LDA spool_flag #� BEQ msfo2 $ LDX#0 $LDY spool_handle $.msba2 LDA word,X $"JSR osbput $,INX $6CPX word_length $@ BNE msba2 $J LDA#&D $TJSR osbput $^ $h.msfo2 LDX#0 $r.msba2 LDA word,X $| �#&DF $�JSR oswrch $�INX $�CPX word_length $� BNE msba2 $� LDA#32 $�JSR oswrch $�RTS *� .spwc_init_win LDA disc_flag *�BEQ spwc_init *�JSR insert_text *�.spwc_init LDA#2 +LDY text_handle +LDX#&80 + JSRosargs + LDA#0 +* STA&84 +4LDA#&40 +> STA&85 +H +R.spwcba1 LDYtext_handle +\ JSRosbget +aBCS end_of_dic_file +f LDY#0 +pSTA(&84),Y +z LDA&84 +�CLC +� ADC#1 +� STA&84 +� LDA&85 +� ADC#0 +� STA&85 +�CMP#&7A +�BCS cache_full ,JMPspwcba1 , ,.cache_full LDA#0 ,$LDYtext_handle ,.LDX#&88 ,8 JSRosargs ,B LDA&88 ,L CMP&80 ,VBNEstore_aptr ,` LDA&89 ,j CMP&81 ,tBNEstore_aptr ,~.end_of_dic_file LDA#&FF ,� STAcfe ,�LDY text_handle ,� LDA#0 ,�JSR osfind ,�.store_aptr LDA&84 ,� STA&86 ,� LDA&85 ,� STA&87 ,� LDA#0 ,� STA&84 ,�LDA#&40 ,� STA&85 ,�RTS ,� ,�.get_cache_byte LDY#0 - LDA(&84),Y - STAsa -$LDA&8C \ Increase virtual file � -CLC - ADC#1 - STA&8C - LDA&8D - ADC#0 - STA&8D - LDA&8E - ADC#0 - STA&8E - LDA&8F - ADC#0 - STA&8F - LDA&84 -CLC -( ADC#1 -2 STA&84 -< LDA&85 -F ADC#0 -P STA&85 -Z CMP&87 -dBCCgcb_exit -n LDA&84 -x CMP&86 -�BCCgcb_exit -� LDAcfe -�CMP#&FF -�BNEgcbfo -� LDA sa -�SEC -�RTS -�.gcbfo STX sx -�JSRspwc_init_win -�LDA disc_flag -�BEQ gcb_exit -�JSR insert_diction -� LDX sx -�.gcb_exit LDAsa -�CLC -�RTS -�.cfe BRK -�.sx BRK -� ..insert_text JSR top_window . LDX#0 . LDY#6 .JSR tab ."JSR text_disc .,JSR clear_user .6JSR bottem_window .@RTS .J .T".insert_diction JSR top_window .V LDX#0 .X LDY#6 .ZJSR tab .^JSR diction_disc .hJSR clear_user .rJSR bottem_window .|RTS .� .�#.text_disc LDX#text_dmess � 256 .�LDY#text_dmess � 256 .�JSR display .� LDA#21 .� LDX#0 .�JSR osbyte .�.tdba JSR readch .� CMP#32 .�BNE tdba .�RTS .� .�6.text_dmess EQUS"Insert TEXT disc and press space" /EQUB&FF / /&&.diction_disc LDX#dict_dmess � 256 /0LDY#dict_dmess � 256 /:JSR display /D LDA#21 /N LDX#0 /XJSR osbyte /b.ddba JSR readch /l CMP#32 /vBNE ddba /�RTS /� /�=.dict_dmess EQUS"Insert DICTIONARY disc then press space" /�EQUB&FF /� /�.discs LDX#discs_mess � 256 /�LDY#discs_mess � 256 /�JSR display /� LDA#21 /� LDX#0 /�JSR osbyte /�.discsba JSR readch 0 �#&DF 0CMP#�"N" 0BEQ diff 0 CMP#�"Y" 0*BNE discsba 00JSR oswrch 04 LDA#0 0>STA disc_flag 0HRTS 0R.diff JSR oswrch 0WLDA#&FF 0\STA disc_flag 0fRTS 0p.disc_flag BRK 0z!.discs_mess EQUB22:EQUB7 \ �7 0{EQUW&D0A 0|EQUS"Watcher "+version$ 0}EQUW&D0A 0~EQUS"(C) Allan Kelly 1987" 0EQUW&D0A 0�/EQUS"Are Dictionary and Text on same disc?" 0�EQUB&FF 6L.readch JSR osrdch 6VBCS escape_pressed 6`RTS 6�.escape_pressed LDA#&7C 6�JSR osbyte 6�LDY#esc_mess � 256 6�LDX#esc_mess � 256 6�JSR tell_user 6�.epba JSR osrdch 6� �#&DF 6�CMP#�"Y" 7 BEQ abort 7 CMP#�"N" 7BNE epba 7JSR clear_user 7(RTS 72.abort LDA word_flag 7<BEQ epfo 7FLDX#snw � 256 7PLDY#snw � 256 7ZJSR tell_user 7d.epba2 JSR osrdch 7nCMP#�"N" 7xBEQ epfo 7�CMP#�"Y" 7� BNE epba2 7�JSR empty_ram 7�.epfo LDA#0 7� LDY#0 7�JSR osfind 7� LDA#3 7�JSR oswrch 7� LDA#3 7� LDX#0 7�JSR osbyte 7�%LDA#225 \ Return F keys to normal 7� LDX#1 8JSR osbyte 8JSR bottem_window 8"JMP menu 8@/.esc_mess EQUS"Do you wish to abort? (Y/N)" 8JEQUB&FF 8h.snw EQUW&D0A 8rEQUS"Save New Words? (Y/N)" 8|EQUB&FF :�.open_spool PHA :�LDA spool_flag :� BEQ osfo1 :�PLA :�LDX#spool_open � 256 :�LDY#spool_open � 256 :�JSR tell_user :�JSR osrdch :�JSR clear_user :�RTS :� :�.osfo1 PLA ;STA spool_flag ;JSR top_window ; LDY#5 ; LDX#0 ;JSR tab ;.osba1 LDX#get_name � 256 ;LDY#get_name � 256 ;$JSR display ;. LDA#0 ;8LDX#spool_block � 256 ;BLDY#spool_block � 256 ;LJSR osword ;V BCC osfo2 ;`JSR escape_pressed ;jJSR clear_user ;t JMP osba1 ;~ ;�.osfo2 LDA#&80 ;�LDX#spool_name � 256 ;�LDY#spool_name � 256 ;�JSR osfind ;�STA spool_handle ;� CMP#0 ;� BEQ osfo3 ;� LDY#2 ;� LDX#20 ;�JSR tab ;� LDY#0 ;�.osba2 LDA spool_name,Y ;�JSR oswrch ;�INY ;� CMP#&D ;� BNE osba2 ;�JSR clear_user ;�JSR bottem_window ;�RTS ;� ;�:.spool_open EQUS"Spool file is already open. (RETURN)" ;�EQUB&FF ;�*.get_name EQUS"Enter Spool filename: " <