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 |
Duplicates
There is 1 duplicate copy of this file in the archive:
- AEW website » bbc_pd » bbc_pd_5_25_discs_d-bbc050_D-BBC050A.dsd » S.WATCH02
- CEEFAX disks » telesoftware16.adl » Speller/W/WATCHC
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: "
<