X7$ ?BOOT-U-No boot on volume ߋtv  _oSRT11A DECRT11A  000000.DIR BACKUP.SYS BADBLK.SYS BADLOG.SYS  BITMAP.SYS CONTIN.SYS CORIMG.SYS INDEXF.SYSSYS0.DIR  VOLSET.SYS  P "p  SYSEXE.DIR _M8vTrWv T*}KvTIq T%dv9g&9g&9g&9g&9g&9g& GGSKMDHA.EXEGGSKMDHAMSG.EXE GGSKMDMA.EXEGGSKMDMAMSG.EXE GGSKMDPA.EXEGGSKMDPAMSG.EXE GGSKMDRA.EXEGGSKMDRAMSG.EXE GGSKMDZA.EXEGGSKMDZAMSG.EXE GGSKMIEA.EXEGGSKMIEAMSG.EXE GGSKMKMA.EXEGGSKMKMAMSG.EXE GGSKMKMB.EXEGGSKMKMBMSG.EXE GGSKMRRA.EXEGGSKMRRAMSG.EXE GGSKMVVA.EXE GGSKMVVAMSG.EXE @@@(@ 08HPXx`0( @ @ PASCALMSCMDMSHARE DIAG$DHV11$CODE"$DATA& "DHV11"=   - CONFIGURE-d o SERVICE_SET_UP  +^ CLEAN_UP^ +q TEST_FV_1q H { TEST_FV_2{ k TEST_FV_3  TEST_FV_4  TEST_EV_1  h. TEST_FS_2. F TEST_FS_3F ^ TEST_FS_4^ v TEST_FS_5v . TEST_FE_1 EI UTILITY_1 z   _o ELAN JOHNSON DECFILE11B _(     "w   *w XC"D"D ! e   ne w w |C"D"DU Ί  . @2=*, ,  7 (7 &""z7"7 AlrZW$C  ww l`l`l`l`j`jZjZCaW A 8 bytes,  A  words/B_-: ҋ E?HANDLE-F-wvvvvw  &:   . w BBZ % d  %e ee e @(  7 7  n.w f   N- e   @Ee0'd @&f&f   2 X 0 V | 8 `   < |& b  & Z V ~  >  P   < 82 $rmon\ <@h <L < _\6 ` < w\ d6 ` < 6  d 82 $csw\ dh   82 blkey\ h   82 chkey\ h   82 $date\ h   82 dflg\ h   82 $usrlc\ h   82 qcomp\ h   82 spusr\ h   82 syunit\ @h 6   82 sysver\  6 82 .  6   82 config\ h   82 scroll\ h   82 ttks/kb\ @h @h   82 ttps/pb\ @h @h   82 maxblk\ h   82 e16lst\ @h  6    @d"82 $time\ `482 $cntxt\ h  L  @dt82 $time+2\ `82 jobnum\ Lh   82 synch\ h   82 lowmap\ h   82 usrloc\ h   82 gtvect\ h   82 rrcnt\ h   82 $mtps\ @h  L L6   82 $mfps\ @h  L L6   82 syindx\ h   82 statwd\ h   82 confg2\ h   82 sysgen\ h   82 usrare\ h   82 errlev\  6   82 ifmxns\ @ 6   82 emtrtn\ @h  6   82 fork\ @h  6   82 pnptr\ @h  6   82 moname\ @h  P L P    82 suffix\  @h   P    82 decnet\  h   82 extind\  6   82 indsta\  6   82 $memsz\ h   82 $tcfig\ @h  @h   82 $inddv\ @h     L     82 memptr\ @h  6   82 p1ext\ h ,7   6 6       6 d|      l   82   \ \\ p57 f n r n | n ^ l l I`e& N\ \& N \& N\@e& \fN\I`e\  ы\\ \fe\ ыf\& \      &\ \& \\ \ d00` <\H- 'pn<l \r @ |\0@pr d0`|nX \@0r ((Xn@d(p<\8`\XA@`\p$`0r 7 82숀?MAREE-F-Runtime failureL \ \\&\&\\f\\f\\f\\f \ \f \ \f\\f\\f\\& \\\\\\\\\\\\\\\\\ \\ \\@x@x@x@x@x@x @x @x@x@x@x@x@x@x@x@x@x @x"@x$@x&@x(@x*f\\f\\f\\ \ \N \ & \ !\\e\U   \ \% \%%%& \%%U\N E\pN\ f\f  W @ f   6   `@ ` B     r\ r\ rN\ @  \  N\  U U@  & @      vN\ N\ N\Nx\MEP\B \ tj " \  \& &\ \ %\ %\R  `D\\& & & & & & & & &f\`-& \`-f\& & & & & & & & &f\/& \/&\&\\6\&%4ԋ E\ E\   - dP @ \e0'd  "slot $unam1 $unam2 $pname $entry $stat $dvrec $hsize $dsize  >  2 x & j  \  N   *:  ,e7!NŇ e    A r     Al\ZW$C  wl`l`l`l`j`jZjZCaW A 8 bytes,  A  words/X_-P ҋ E?HANDLE-F-wvvvvw $ &:   . w BBD % d  %e ee e @(  7 *7 7   b.w f   B- e   @Ee0'd @&f&f  MONUTL RMON lists the monitor fixed offsets. TABLES lists information on device tables' LOGICA lists logical device assignments. XM> -@A6AU@ & ~w eh6 4{6 BNei5NasNa e HiNa &  V6 CiNa  DiNa  %6 CiNa  DiNa  5 s' NasNa %5sNa : CiNa l  5sNaa %CiNa D NesNa h  5sNaa ~ %DiNa  NesNa  Lf&<& bdfdfb<&  fAfWp<A 5bud bfdfbff5 | ew2f ; f ; ^ u; V =; N ; F : > : 6 \: . $: & 9  9  {9  C9   9 8 8 b8 )8 7 7 7 K7 7 6 6 w\ w B 37 .w.7 . . .V=f ^e• ( .% v. r.WpfeV=f (e R.Wp@eV=mF.ȋ -4.8. 7 4.0.,. .Wp@eV=m.!  O  @m 0wz @`e---M- rw----E- --WpfeV=f de/ ------t- p-l-WpfeV=f $e7 T- F- J--F-7 >- *- .--*-7 "-w e  fVE  % N< VE $ f^G % N< VE ^G w@ NfJ< ~ %VE !0N$< ` 5VE ! *@e`PNa^G ^%!0 !@@e`PNa^G 2%eVE D ^G < ! !z!a!' @a0 P w R e\ĕ 5 XN  5VN-= f^G J % N= Z  ^G wNf< 4 %@V 5V5 5 X  XNVWpPfNaeZ V%  ^G < 5 V WpPAa@eZ`ȋWpPAa@eZ`AXWpPAa@eZ` WpPAa@eZ`ȋ e0^G WpPAa@eZ`ȋWpPAa@eZ`^G  B ^G  wfefIN N N ww DB̋  w|w jDBÕ  f 2  f w<feNe \ I f@A77 5uw7w6@Aww e  @ae5WpfNm  = NeNa   WpNNmWpf Nae d  WpNNm Nae 8 •  @m  aAEH a5  @ `w   f Ne  I <wfeNef  NNafe %  NVJ  ׭N)J  ׭NI  w:feNef 0 Nefe > 5 x NJ < @ ׭ZNJ  Dwf W- 5 N fff fe e K ׭J ׭J wXf W- 5 N fff fe Xe K Z׭|aK B׭lAK 2\ww  @55= wfw5w555&  KKww neBC! @ bb@ be K @    5u5 ww @w fzvU@wnfwfe:f  5@@mȋNf " =@ 5`= .f  5@e5Nf  =@e5Nefe  =@e5@@m.NNm fNm ~  =wfeN@e& @:Ne@e& Ne@e& z @. Ne f ^ @0 f %N 05 @@m.@@mW:@=w<w " @C r(@AA@ r(5@C r(@AA@ r(=5 W-@@mȋ@@m' @@m w@@mȕ @@m @@me@H@@m @@me H@@meHw &B@eˋҔ we@&& HBF21EI1LUI E4Uf Nef& ew1 L     v1p1w DD K& K - -e a& %4  L& 4  P  ww  W-@&f % N&f % ww  W-@&f % N&f % wTw BD K&  e4&& @ %4 K& R  Eww D̋ Bʋ  @@w  &fw  A@   N 5 5 N    @ C B B-C- BC    5 uwTw ,Dʋ w$w DB K& T -  a a& % -wa& %4 w D  Wp(N &   ` w\w JD!  %a!zew4%A!Ze!$!.%0!9ew Duʋw w DuC @w w N 5 wb5 e V 2  @w DBCnN e w ̥09Wp `@e  w eDˋ ע%  !&f %Ӌw ע-5 ע+ Ne Na 0%5 ע. Ne Na` %עa עhעoעu Wh•5Wo• Wu• עx5 wעb @ e 5@ e 5 wTu-@@5w:עp@ e 5N 25 wu-@@5wעf%@e5NN@ &&&&Na 8e 5@ e5 wעd+@e5%@@ &&&&Na e 5@ e5 wJעcעs עiעl'%עl(Wa>@ 55 M@e@mH@Av5ui@e5@ e 5Wa4עc4uO@e5@ &&Na e5@ e5 4@e5@ e5 % @t5uעcEEfNa  %5 u- Naf %  Nff % wLu-w@Naf % f Nf $%ww (  a& %(ww DB K& L4  & & f e 4  P(7J( H(" 7:(ww Nff %5  L& : weF f N& f %w   '%   G' e@"  ,@ & 5K J &fR'e "e &' FIw N 05C #   C - . EE  %@wb ע עע @  @ j 50@ EE2 r El2 E@2 2 /5K <  vf&e e5W-  2 @  w w  e r    w N 45C 'ע 7  $52C 6ע 7L @% ` @w    ~ Nf %@ĕ5!a   %`5w DB` 3e ww Dce e `ww Nf  ~L& ww eD! EeL e! " ##e  se)-#7 #5 7!#~#N 57 h# 5N 5  w@e= 8#w-0#w(#@@m-#@@m7# fe  w z@e 7!"-" "L6#~L& @wR "4 7"7!" "7" 6"  2  4 2 f %  AWp@eLww  !  " ."ww eD Wp@L5% ̋ wlWp@eL5:̋ : Nf 5 2L 5D5.̋ Nf ` 5Nefe D 5.5  5̋ Nf  5NeNa %   f Na x%   Na&e z%5@w4 Na& Z%5W- @ W-  & Na&e e5@3   33 3  3  A v   3s  ) 7w \eDC  EE   l9@w EE4 t E@4 Em4 J G Ȕe t   e@ EE5u EE@A  & vf&e e  w44 ww D ̋ʋ w& %f  8L N N 6L  $ww N 5& tt W-  tmtm t  @mAm@ 4t @w>w ,eD@Av @A  5uҕ-   @ 5 u @Av @A@A N ffff  Ve`ffff e0@ Jʥ9e'  wVw DD   @ 5ӕ-@E   @ 5B- N 5r& %` 5r@e0 ˥9e'  ww D5EE  E `   & vf&e |e w2w eDu55ԕ-@@m5%N 5&Na he 5Nf Na %5`   @e`  ԕ0  ԕ.  @e` ԕeu 5  ԕ0  ԕ-@ 5ԕ+%dA rde0A rduA r e0A r @e0@ww eDCuӕ-55@e5& "e 5@a5%NNa %5`u-@@`u ӕ0 ӕ. Ae@ 0   ӕ0  Ae@ 0 @ww D u-@m5@  `9`ȕ0   ̕1B `ȕ0 `wZw HE`@mAE@`5N 8 - $ ew&fw @ A   @ C B B-C- BC 5 uw&fw B C   B A @ @-A- @A 5 uww feD u55u%57?  bt50" for help compress/decompress word lists into dictionaries V1.0 ss /d decompress [op1]=ip1[/o] /h type this help message /c comprea" represent a single character option indicator. including "/o" anywhere in the command string where " exactly one option (of /c and /d) must be selected by Note that if the input filetype (.dic) must be entered.for decompression the default output filetype is .wrd. letype is .wrd and the default output filetype is .dic. file are ignored. for compression the default input fiver all but the first output file and the first input input files can be specified in the command string, howepretor is used. Up to three output files and up to six tely every 66 characters. The rt11 command string interin the dictionary file. a new line is started approximat one different from the preceding word are then placed rd. only the characters including and trailing the firsthe leading characters are the same as the preceding woith an ascii character 0 - @ indicating that 0 - 16 of cal order. a dictionary is made by preceding each word warriage return/line feed and the words are in alphabetinly characters a - z and '. each word is separated by cf words with all characters in lower case, containing oes a dictionary into a word list. a dictionary is list o list and compresses it into a dictionary or decompress compd v1.0 This program takes a wordcomp - %p is not a dictionary file decompressing input dictionary file %p into file %p comp - unable to create output file %p comp - unable to open input file %p compressing input file %p into dictionary file %p comp - unable to create output file %p comp - unable to open input file %p ================================================================================ tics - failed unable to close file - duplicate files unable to create file %p - protected file present unable to create file %p - not enough space unable to create file %p - channel already open unable to open file %p - file not found unable to open file %p - channel already open read error - channel not open read error - hardware error read error - attempted read past EOF write error - channel not open write error - hardware error write error - attempted write past EOF ZMLKNULL FIO pointerKunchecked conditionKread error Lwrite errorbad free callDK : @ BCG@M [u+pLno memoryLerror /***************************************************************************** spell.c spelling checker V2.3 copyright Harold Z. Bencowitz changed most recently 13-feb-87 ****************************************************************************** description: spell is a spelling checker written in whitesmith's C which runs on rt11 and tsx+. it has been tested on v5.3 and v6.01 respectively. words in the input file are compared to one or more dictionaries (files of alphabetized words) and an alphabetized list of the unmatched words is sent to the output file(s). the output list can list each word as many times as it is used or optionally only once. spell can be used as a tool to alphabetize a list of words (eg a dictionary) or to produce an alphabetized list of the words in a text file without comparing to a dictionary. operating instructions: instructions are also explained by the help (\h) command. the operator is prompted by '*' from the rt11 command string interpretor (csi). in response enter: [outfile1][,outfile2][,outfile3]=infile1[,infile2][,infile3][/o][/p] where there can be 0-3 output files (can be tt:, lp: etc) and 1-6 input files. if none is specified the output file default is *.spl where the name is that of input file 1. input files 2-6 are optional dictionaries (in addition to the main dictionary sy:spell.wrd). the default input filetype is .wrd for both the file being checked and user dictionaries. note that if a device name is specified in the output or input file lists, that device is used as the default device for any other files in the same list. the default dictionary is sy:spell.dic. there are several options which can be combined in any combination (except with /h help, the rest of the command is ignored). other options are: /d (do not use the default dictionary), /u (unique - output file contains unique words ie only one copy of each unmatched word), /r (runoff - ignores lines in the input file starting with '.', /i (input file is a word list, ie one word per line), and /s (shell sort - much faster for input files already sorted or nearly sorted, eg a dictionary). spell can be used (if no dictionary specified and /d option) to convert a text file to an alphabetized list of the words contained or to alphabetize a list of words. to alphabetize a word list (eg a user dictionary) use options /d/s/i/u. possible future changes: a display in context feature, possibly with automatic dictionary updates is under development. revision history: v1.1 completed 16-oct-83 v1.2 completed 06-sep-86 minor code changes for compatibility with newer versions of Whitesmith's v2.0 completed 31-oct-86 a complete revision with most of the code rewritten. the basic algorithm was completely changed to read input file into memory and access dictionaries from disk (opposite to v1.2). bugs fixed in input of hyphenated words. bugs fixed in handling of runoff files. default output filetype added. timing added. quick sort added. faster copy routine added. char/word optimized. default dictionaries combined into one. output routine changed. new faster input routine to read dictionary files. v2.1 completed 11-dec-86 all input/output routines rewritten. external sort (merge added). words less than 2 characters excluded. enter/leave and other changes for improved error handling. v2.2 completed 19-dec-86 /i option for faster input of word lists. better quicksort. default dictionary compressed. bugs in getword() and hgetc() fixed. strip out common words in load(). v2.3 completed 13-feb-87 use of memory altered to use all of memory without fixed char/word ratio (pointer array grows down from memtop). bug in sp_out() fixed. skip most dictionary word comparisons. bugs in hopen() and merge() fixed. limitations: the default dictionary must be on SY: and in compressed format. before compression it must be in the user dictionary format. user dictionary files must be alphabetized, all in lower case, and each word separated by including the last word. only a - z and ' characters may be used. user dictionaries are compressed into dictionaries using program compd. the instructions for this program are in on-line help. the output list of words (from spell) is always alphabetized and can not be obtained in order of appearance. uppercase letters are converted to lower case before comparing to the dictionaries. words can not be displayed in context. there is no limit to the size of the input file and the dictionary files other than available disk space. there is no specific terminal requirement. installation and building: compile spell.c and link with hclib.obj (my c library) and clib (whitesmith's c library). to install place spell.sav wherever you wish and the default dictionary (spell.dic) on the systems disk (sy:). spell.dic can be replaced by any ascii file list of words containing only alphabetic characters (a-z) in lower case and the apostrophe character (') with each word separated by carriage return-line feed (ie '\n') and in alphabetical order if this list is compressed using program compd.sav. it is probably easier to use this default dictionary and either add words to it as needed or else put additional words into special user dictionaries (format as above but not compressed), although if a large user dictionary is to be used it may be faster to add the words to spell.dic since a compressed dictionary is read faster. implementation notes: the program sizes available memory at run time and uses all of it to store words. as the input file is read it is parsed to remove all characters but ' and a-z. upper case letters are converted to lower case. hyphenated words at the end of a line are joined. hyphenated words within a line are treated as two separate words. runoff '.' commands are ignored if option /r is selected. the input words are loaded into memory. unless /d is specified each input word is compared to a list of the most common english words and not loaded if matched. words of less than 2 characters are also not loaded. the number of words and characters loaded will not include those rejected because of a match or one character. if the input file is a word list it will be loaded faster with the /i option which uses getword() instead of parsing the file a character at a time. the words are then alphabetized. quick sort is used but shell sort (option /s) is twice as fast if the words are close to alphabetical. if option /u is selected, duplicate words are removed. remaining words in memory are then compared to the default dictionary (unless option /d selected) and any other dictionaries specified. the routine which reads the dictionary files makes very strict assumptions about the format of the file as described above. dictionary files must only contain a-z [lower case], ', , and . unless /d or /i is selected, the input words are compared to a list of common words and rejected if matched before loading them into memory. spell can be used as a tool to prepare dictionaries since its output is in the correct format. the output is written to a temporary disk file. this file is copied to the specified output files or renamed if on the same disk. ~n -bbU@ & P#f "E 4E #QQQ& eF rW  FF rW  F "w !eZNei]ENasNa e 5\u^HiNa   ^hF t"s NasNa !%fFsNa "  aFsNaa %NeQ l Ne9F " Q x5 b5 ` b f`OE h%&U % F !Q 8U 0wQ $ w}E ! !wrIiNa  RiNa %&DiNa %&f`VNaTNaQ Je 5bNVfTE 4!% `EAT e@7ESiNa L  RfT e  RfT \eUiNa  NT xDiNa  fTNaE eĕWpAa fTNaWpfNae Ze NTU U  w<E 0  w,W-`UiNa R OE `f` %NesNaOE % Df&<& b XZfZfX<& H dAdWp<A 5XuZ XfZfXfdiE eww hDNFa ewRw @@C@   f t w&f L K K jK 2K J J J QJ J I I pI 7I H H H VH  H G G xyG pCG h G `F XF PF HwFw , "B5e•  N&    w5e w e5 }= AA  Q< $f $ 5W- HBm}m e  ߇ w5 W-N !!W-&}m W-w. w2 x w"w!A !Ze !a!z!' !-W-N ! 4f  -;; 7);!.5W-1׭; -N ! -!W-,}m %N ! ! ! f ĕ W-7:wW-w5 ew}m5 e  wh ww @ m?@ m? ̋ @w w @ m?@ m? ̋ @w| w d@ mV?@ mJ?A m@?H@ m4?w@w .e  WpAmɋ wW-w N w   WpAmɋWpNNmf   Qe5  %Q/e5  }L  j NWpfNmf %ĕ  Qe5   HL 4  NfWpfNmf e 5 ww eNf   NM  N   ff % NL  N N  l ! &Naf e  &Naf e  N :N 2w&L $N N   w eDB5 @m5W-z%W-a!@m H5 @m5W-z%W-a!@m H 4M&  ̋2M  `ȋ .M  ʋ ,M&  aȋw, ̋ ʋ  :w e5 5 NY 0 NbM  ;  Nf8M %; NeY    NeY   wt 7!V;Y NeNa&  %    NeY 0 5u- 7!:7!:ц NeY P  Y VW-w  @ @ D@ @@ Wp@e@`A@l @ @  !  + ='@ , Ne& f ~% w @ Wp@e@`A@l @ , Ne& f 0% @ Wp@e@`A@l f @ @A1,@A1,2@@m@0 7 @& fe@ WpN`f de M .N $ @0 @ , @0 ww  @ @ K@ Wp@e@`A@l !0!@M   e @`ȜM ĕa!a!' @ , *Nf % @w6 @m@ Wp@e@`A@l !0!@.@ Wp@e@`A@l @`3M @ , Nf % @@w @ t@ / @ Wp@e@`A@l !   @m@ , Nf v% w@`@ Wp@e@`A@l !a!z!'@ , Nf % w @  !Qe=! M  wt @ABC3   pNf  @ p !$@0! @& feWpN`f  e N @@Q w @   @`ȋ4 1@ Wp@e@`AC `A`H@, 0ĕ@0 @ @,  @0   M@ Wp@e@`AC `ȕ L  c@ @  @& feWpN`f L e <N N z1 @ Wp@e@`AC `ȕ @, ĕ@0 @ @, @0 w$w @  !Qe=! 0N  w @p@AB2  p Nff %  @@Qw v@ -@ @ @, @eAC p`A@l @ N & ' w @&fe@ WpN`f e FN N  @0@0Qw @ @ @eAC p`A@l H@ @ @p@pwT w B  @@!WpNeQ N ,w Naf   aN w  +e5 e@!$f H WpfeQ )O "Nf  w  ff %&f B% N ^ >  N * f N 0 N %ew  e 00 4O [000e5 5! Wp NNmWpfeQ ; m05Wp Am}, R Je5  b0Na ^ N0f  >0Na  %  w: $0f t 0@ r 0WpfeQ h   em/?/R %w ĕ 5    `   w  a   a  w h D @  $@m  rf  C @  N   6   /N ff&N ew f  N ff de ffa Je f ]& $\Of ew w D 5! @m  rN @m&    wR   5 w * DB `` `ȋ  ``A@w w  @,F(F= wfwFwFFF&  jjww eBC! @ bb@ be K @    5u5 w<w *@w,f|U@wtlww DB ̋ @w fe0jN N N ww DB̋  wfeNe & j z@A"E E 5uwEw E@AwHw . 5 @ 5,jW- W-@ j@m @@m ! `  w  `  w e  @ae5WpfNm  = NeNa  WpNNmWpf Nae *  WpNNm Nae  •  @m  aAEH a5  @ `w   fe5W@5WB@B5Nef  Nef x Nefe  k B׭j *׭j ׭rj bwf Ne b 0k 6wfeNef  NNafe @%  Nk  ׭Nk l ׭NXk V wNfeNef D Nefe  5 rNl  @ w׭NNk  8f W- 5 N fff fe Je }l ׭`l ~׭Al nwhf W- 5 N fff fe e l "׭rl ׭bl Rwfe:f  5@@mȋNf  =@ 5`= .f | 5@e5Nf  =@e5Nefe t =@e5@@m.NNm ,fNm 6  =wfeN@e& @:Ne@e& Ne@e& z @. Ne f ^ @0 f %N t5 @@m.@@mW:@=w<w " @C r(@AA@ r(5@C r(@AA@ r(=5 W-@@mȋ@@m' @@m w@@mȕ @@m @@me@H@@m @@me H@@meHw &B@eˋҔ we@&& HBFw DBC 4-  @wfeuu5 Ne fNa, e@w??EI?UI EUf   m& % N  p?wf w`? m& ( wf Nef08 ew*? .     >>w D̋ Bʋ  @@wt  &fw V A@   N 5 5 N    @ C B B-C- BC    5 uww Dʋ ww D  Wp(N &   ` ww D!  %a!zew|%A!Ze!$!.%0!9ef  f %w$w Duʋw w DuC @w f N ff &f eww ~ !  < @ 55 M@e@mH@Av5ui@e5@ e 5Wa4עc4uO@e5@ &&Na e5@ e5 4@e5@ e5 % @t5uעcEEfNa 8%5 u- Naf %  Nff % wLu-w@Naf % eF    6%   G5 e@"  ,@ & 5,m &f5e "e v5 FIw  C@@m 5 @ȢD@5 @w @@- @ w N 45C 'ע 7  $52C 6ע 7Bm R% ` @w   |  h Nf %@ĕ5!a   %`5w DB` 3e wrw `Dce e `wHw 6Nf  ln& L ww eD! EeHm e! " V3N3e  se)-$37 35 7!3 3N 57 2 5N 5  wT@e= 2w-2w2@@m-2@@m72 fe  w @e 7!r2-n2 Nm3ln& @w J24 7@27!:2 427.2 6"2  2  4 2 f %  AWp@ebmwJw 0N 5 8w5 e t 2  @w eDC  EE   9@w EE4 t E@4 Em4 J G Ȕe t   e@ EE5u EE@A  & vf&e de  w44 ww nD ̋ʋ wb& %f 0 ^m N N \m  Fw w eD@Av @A  5uҕ-   @ 5 u @Av @A@A N ffff  Ve`ffff *e0@ Jʥ9e'  w0w D   @ 5ӕ-@E   @ 5B- N 5r& %` 5r@e0 ˥9e'  ww eDu55ԕ-@@m5%N 5&Na e 5Nf Na %5`   @e`  ԕ0  ԕ.  @e` ԕeu 5  ԕ0  ԕ-@ 5ԕ+%dA rde0A rduA r e0A r @e0@wDw 2eDCuӕ-55@e5& e 5@a5%NNa %5`u-@@`u ӕ0 ӕ. Ae@ 0   ӕ0  Ae@ 0 @w:w (D u-@m5@  `9`ȕ0   ̕1B `ȕ0 `ww E`@mAE@`5N  - ewr&fw \@ A   @ C B B-C- BC 5 uw8&fw B C   B A @ @-A- @A 5 uww D5EE  E `   & vf&e e wRw @eD u55u%57*?*  bt50*ng5t0*n5 t`W WuS572*5555u5@e0 57*w)@,*  t0*n557)555 t57)57)5    ԕ0 wrt11 Edition 2.2: Copyright (c) 1978, 1983 by Whitesmiths, Ltd. all rights reservedenter "/H" for help spelling checker for rt-11 and tsx+ V2.3 DK:TEMP00.TMPWRDSPLSPLSPLelapsed time %i:%l spell - unable to close input file spell - unable to close temporary file SY:SPELL.DIC%i words (%i characters) loaded into memory spell - unable to create temporary output file spell - unable to open input file %p .SPL.spell - no input file name entered %+02i'.') input file in runoff format (ignore lines starting with ionary format (one word per line), for faster input /R ique, list output words once only /I input file in dictfaster if presorted) /H type this help message /U un /D do not use the default dictionary /S shell sort ( [op1][,op2][,op3]=ip1[,ip2][,ip3][,ip4][,ip5][,ip6][/O]tring where "O" represents a single character option. elected by including "/O" any- where in the command ser of the command string (ie not dk:). options can be sut file list, that device is the default for the remaindt if a device name is given in either the input or outp .wrd and the default output filetype is .spl. Note thalists (one word per line). the default input filetype istionaries are ASCII files containing alphabetical word y is dk:spell.dic in compressed ascii format. Other dicinst which to check input file 1. the default dictionars can be specified. input files 2-6 are dictionaries aganterpretor is used. Up to three output and 6 input files a line, the word is joined. The rt11 command string ise letters are converted to lower case. If a hyphen endr character (all other characters are ignored). Upper caings of characters a - z and ' termina- ted by any otheictionary. Words from the input file are defined as strtput is an alphabetized list of words not found in any d list of words against up to 7 dictionary files. The ou spell v2.3 This program matches text or aspell - channels not available for output file copy spell - channel not available for output file rename spell - unable to copy output file spell - unable to create output file %p spell - unable to open input file %p :DK::DK:comparing input file %p to dictionary %p spell - unable to open dictionary file %p spell - unable to read spell - improper dictionary, not compressed format no channel available spell - unable to write no channel available spell - unable to write spell - unable to remove temporary file spell - unable to close temporary file spell - unable to close merge file spell - unable to create merge file spell - unable to open temporary output files spell - inadequate memory for merge QQQQQQQQQQQ}QvQrQoQkQeQaQ^QYQTQOQKQFQCQ?Q;Q6Q3Q/Q+Q'Q#Q QQQQQQ QQQPPPPPPPPPPPPPPPPPPPPPPPPPPPPP~PxPsPnPiPfPbP^P[PWPSPPPKPFPAP;P5P1P,P'P!PPPyouryouwouldwithwillwhowhichwherewhenwhatwerewewasuseuptwotoototimethistheythesetherethenthemtheirthethatthansomesosheseesaidrightoveroutourotheroroneonoffofnownotnonewmymuchmorememaymanylikeitsitisintoinifhowhishimherhehavehashadgofromforeachdowndoesdodidcouldcanbybutbeforebeenbeatasareanyandanalsoallafterabout n ================================================================================ tics - failed  (ylE q&TsY )rename - protected file already exists rename - invalid operation rename - file not found rename - channel already open unable to close file - duplicate files unable to create file %p - protected file present unable to create file %p - not enough space unable to create file %p - channel already open unable to open file %p - file not found unable to open file %p - channel already open read error - channel not open read error - hardware error read error - attempted read past EOF write error - channel not open write error - hardware error write error - attempted write past EOF mbad leave call.DK.munchecked condition bad free call :  @ BCG@M [u+pnnno memoryznerror /***************************************************************************** compd.c dictionary compress/decompress V1.0 copyright Harold Z. Bencowitz changed most recently 31-oct-86 ****************************************************************************** description: compd is a program to compress word lists into dictionaries and decompress them back into a word list. it is written in whitesmith's C to run on rt11 and tsx+. it has been tested on v5.3 and v6.01 respectively. a word list is defined as a file containing one word per line in alphabetical order and containing only the characters a through z and '. words in the input file are compressed by preceding each word with an ascii character 0 - @ indicating that the first 0 - 16 characters of a word are the same as the preceding word. only the first different character and the following ones are listed in the dictionary. the dictionary has approximately 66 characters per line. operating instructions: instructions are also explained by the help (\h) command. the operator is prompted by '*' from the rt11 command string interpretor (csi). in response enter: [outfile1][,outfile2][,outfile3]=infile1[,infile2][,infile3][/o][/p] all but the first input file and the first output file are ignored. if no output file is specified, the output file default is *.dic where the name is that of the input file. the default input filetype is .wrd. one of two manditory (not both) options must be specified. options are: /d (decompress) and /c (compress). revision history: v1.0 completed 31-oct-86 limitations: word list files must be alphabetized, all in lower case, and each word separated by including the last word. no ascii character < 141 octal 97 ascii (a) may be used except for '. the default file types work completely for compression only. for decompression, the correct default file type is applied to the output file only but not to the input file. installation and building: compile compd.c and link with hclib.obj (my c library) and clib (whitesmith's c library). implementation notes: ttt *****************************************************************************/ #include #include #define WRAPSIZE 66 #define NBUFFERS 4 #define WORDPERBLOCK 256 #define BYTEPERBLOCK 512 #define MAXWORD 80 #define INCHAN 14 #define OUTCHAN 15 _main() { char in_files[6][15], out_files[3][15], opts[10]; char *cpystr(); static char deftype[12]={'W','R','D','D','I','C','D','I','C','D','I','C'}; register int i; int min; int compress(), decompress(), greet(), rtcsi(), option(), help(); int instr(); long sec, tics(); /* * start */ greet("\t\tcompress/decompress word lists into dictionaries\tV1.0\n"); errfmt("enter \"/H\" for help\n\n"); /* * main body of program */ FOREVER { /* * get and interpret command line */ label1: rtcsi(out_files, in_files, deftype, opts); tics(); if(option(opts, 'H')) { /* help selected */ help(); goto label1; } if(in_files[0][0] == '\0') { errfmt("comp - no input file name entered\n"); goto label1; } if(!option(opts, 'C') && !option(opts, 'D')) { errfmt("comp - either option C or D must be specified\n"); goto label1; } if(option(opts, 'C') && option(opts, 'D')) { errfmt("comp - options C and D are mutually exclusive\n"); goto label1; } if(out_files[0][0] == '\0') { /* default output name */ cpystr(out_files[0], in_files[0], NULL); i = instr(out_files[0], "."); if(option(opts, 'C')) cpystr(&out_files[0][i], ".DIC", NULL); else cpystr(&out_files[0][i], ".WRD", NULL); } /* * compress */ if(option(opts, 'C')) compress(in_files[0], out_files[0]); /* * decompress */ if(option(opts, 'D')) decompress(in_files[0], out_files[0]); /* * time the run */ sec = tics() / 60; min = sec / 60; sec -= min * 60; errfmt("elapsed time %i:%l\n", min, sec); } } /****************************************************************************/ int help() /* to review help text, edit file spell.hlp */ { errfmt("\n\t\t\t compd\t\tv1.0\n\nThis program takes a word"); errfmt(" list and compresses it into a dictionary or\ndecompress"); errfmt("es a dictionary into a word list. a dictionary is list o"); errfmt("f words with\nall characters in lower case, containing o"); errfmt("nly characters a - z and '. each\nword is separated by c"); errfmt("arriage return/line feed and the words are in\nalphabeti"); errfmt("cal order. a dictionary is made by preceding each word w"); errfmt("ith an ascii\ncharacter 0 - @ indicating that 0 - 16 of "); errfmt("the leading characters are the\nsame as the preceding wo"); errfmt("rd. only the characters including and trailing the\nfirs"); errfmt("t one different from the preceding word are then placed "); errfmt("in the dictionary\nfile. a new line is started approxima"); errfmt("tely every 66 characters. The rt11\ncommand string inter"); errfmt("pretor is used. Up to three output files and up to six\n"); errfmt("input files can be specified in the command string, howe"); errfmt("ver all but the first \noutput file and the first input "); errfmt("file are ignored. for compression the default \ninput fi"); errfmt("letype is .wrd and the default output filetype is .dic. "); errfmt("for\ndecompression the default output filetype is .wrd. "); errfmt("Note that if the input\nfiletype (.dic) must be entered."); errfmt(" exactly one option (of /c and /d) must be\nselected by "); errfmt("including \"/o\" anywhere in the command string where \""); errfmt("a\" represent\na single character option indicator.\n\n\t"); errfmt("\t\t[op1]=ip1[/o]\n\n/h type this help message\t/c compre"); errfmt("ss\t\t/d decompress\n"); } /****************************************************************************/ int getword(channel, wrdbuf, n) /* get a word from the file open on channel number channel (bopen()) and write it to char[] wrdbuf limiting length to maxword characters. n must be the number of blocks in the file when getword() is called the first time and must be zero afterward. the input file must have each word terminated by '\n' even if it is the last word. if a word is cut off at maxword characters, a character is lost and the remainder becomes a new word. */ char *wrdbuf; int channel, n; { register char c; register int i; static int nbuff, flag, block, nblocks, p_buff, p_char; int bread(); extern char dbuff[NBUFFERS][BYTEPERBLOCK]; /* * first call to this file */ if(n > 0) { nbuff = 0; nblocks = n; block = 0; bread(channel, &dbuff[0][0], WORDPERBLOCK, block++, 0);/* .readw */ for(i = 1; i < NBUFFERS && i < nblocks; i++) bread(channel, &dbuff[i][0], WORDPERBLOCK, block++, 0);/*.read*/ p_buff = p_char = 0; } /* * test for end of file */ if(dbuff[p_buff][p_char] == '\0' || nbuff >= nblocks) return(EOF); /* * read in the word */ for(i = 0;(c = dbuff[p_buff][p_char]) > '\015' && i < MAXWORD - 1;) { wrdbuf[i++] = c; if(c == '\0') return(EOF); if(++p_char >= BYTEPERBLOCK) { if(block < nblocks) bread(channel, &dbuff[p_buff][0], WORDPERBLOCK, block++, 1); p_char = 0; nbuff++; p_buff++; if(p_buff >= NBUFFERS) p_buff = 0; } } wrdbuf[i] = '\0'; /* * set pointers for next word */ p_char += 2; if(p_char >= BYTEPERBLOCK) { p_char %= BYTEPERBLOCK; if(block < nblocks) bread(channel, &dbuff[p_buff][0], WORDPERBLOCK, block++, 1); nbuff++; p_buff++; if(p_buff >= NBUFFERS) p_buff = 0; } return(1); } /***************************************************************************/ int decompress(input, output) /* decompress the dictionary file input to a word list file output. */ char *input, *output; { char wrdbuf[MAXWORD]; register int c, cp = 0; FIO *fopen(), *fclose(), *fcreate(); extern FIO fpo, fpi; /* * open/create input/output files */ if(!fopen(&fpi, input, READ)) { /* open input file */ errfmt("comp - unable to open input file %p\n", input); fclose(&fpi); return; } if(!fcreate(&fpo, output, WRITE)) { /* create output file */ errfmt("comp - unable to create output file %p\n", output); fclose(&fpi); fclose(&fpo); return; } errfmt("decompressing input dictionary file %p into file %p\n", \ input, output); /* * test the file */ c = getc(&fpi); if(c != '0') { errfmt("comp - %p is not a dictionary file\n", input); return; } wrdbuf[0] = '\0'; /* * get the words */ FOREVER { c = getc(&fpi); if(c == EOF) { if(cp > 0) { wrdbuf[cp] = '\0'; putword(&fpo, wrdbuf, MAXWORD); } fclose(&fpi); fclose(&fpo); return; } if(c >= '0' && c <= '@') { wrdbuf[cp] = '\0'; putword(&fpo, wrdbuf, MAXWORD); cp = c - '0'; } else if(c == '\n' || c > 'z' || (c < 'a' && c != '\'')) ; else { wrdbuf[cp++] = c; if(cp >= MAXWORD) cp = 0; } } } /***************************************************************************/ int compress(input, output) /* compress the words in the file named input and write the output to the file named output. */ char *input, *output; { char wrdbuf[2][MAXWORD]; register int x = 1, kount = 0, i; int y = 0, nblocks; int getword(), bopen(), bclose(); FIO *fcreate(), *fclose(); extern FIO fpo; /* * open/create input/output files */ if((nblocks = bopen(INCHAN, input)) >= 0) { errfmt("comp - unable to open input file %p\n", input); return; } if(!fcreate(&fpo, output, WRITE)) { /* create output file */ errfmt("comp - unable to create output file %p\n", output); bclose(INCHAN); fclose(&fpo); return; } errfmt("compressing input file %p into dictionary file %p\n", \ input, output); nblocks = -nblocks; wrdbuf[1][0] = '\0'; /* * main loop */ FOREVER { /* * reset word indices */ if(x == 0) { y = 0; x++; } else { x = 0; y++; } /* * get a word from the input file, finish up if EOF */ if(getword(INCHAN, wrdbuf[x], nblocks) == EOF) { bclose(INCHAN); fclose(&fpo); return; } nblocks = 0; /* set to zero after the first call */ /* * find out how many common characters */ for(i = 0; i <= 15 && wrdbuf[x][i] != '\0'; i++) { if(wrdbuf[x][i] != wrdbuf[y][i]) break; } /* * test for two identical words */ if(wrdbuf[x][i] == '\0') continue; /* * output the code character */ putc(&fpo, i + 48); kount++; /* * output the remaining characters */ for( ; wrdbuf[x][i] != '\0'; i++) { putc(&fpo, wrdbuf[x][i]); kount++; } /* * break up the output file into lines */ if(kount >= WRAPSIZE) { putc(&fpo, '\n'); kount = 0; } } } /***************************************************************************/ /* external definitions */ int xxx = 0; /* neccessary to prevent odd address ofr dbuff */ char dbuff[NBUFFERS][BYTEPERBLOCK] = { 0 }; FIO fpi = {0}, fpo = {0}; /***************************************************************************** spell.c spelling checker V2.3 copyright Harold Z. Bencowitz changed most recently 13-feb-87 ****************************************************************************** description: spell is a spelling checker written in whitesmith's C which runs on rt11 and tsx+. it has been tested on v5.3 and v6.01 respectively. words in the input file are compared to one or more dictionaries (files of alphabetized words) and an alphabetized list of the unmatched words is sent to the output file(s). the output list can list each word as many times as it is used or optionally only once. spell can be used as a tool to alphabetize a list of words (eg a dictionary) or to produce an alphabetized list of the words in a text file without comparing to a dictionary. operating instructions: instructions are also explained by the help (\h) command. the operator is prompted by '*' from the rt11 command string interpretor (csi). in response enter: [outfile1][,outfile2][,outfile3]=infile1[,infile2][,infile3][/o][/p] where there can be 0-3 output files (can be tt:, lp: etc) and 1-6 input files. if none is specified the output file default is *.spl where the name is that of input file 1. input files 2-6 are optional dictionaries (in addition to the main dictionary sy:spell.wrd). the default input filetype is .wrd for both the file being checked and user dictionaries. note that if a device name is specified in the output or input file lists, that device is used as the default device for any other files in the same list. the default dictionary is sy:spell.dic. there are several options which can be combined in any combination (except with /h help, the rest of the command is ignored). other options are: /d (do not use the default dictionary), /u (unique - output file contains unique words ie only one copy of each unmatched word), /r (runoff - ignores lines in the input file starting with '.', /i (input file is a word list, ie one word per line), and /s (shell sort - much faster for input files already sorted or nearly sorted, eg a dictionary). spell can be used (if no dictionary specified and /d option) to convert a text file to an alphabetized list of the words contained or to alphabetize a list of words. possible future changes: a display in context feature, possibly with automatic dictionary updates will be considered. revision history: v1.1 completed 16-oct-83 v1.2 completed 06-sep-86 minor code changes for compatibility with newer versions of Whitesmith's v2.0 completed 31-oct-86 a complete revision with most of the code rewritten. the basic algorithm was completely changed to read input file into memory and access dictionaries from disk (opposite to v1.2). bugs fixed in input of hyphenated words. bugs fixed in handling of runoff files. default output filetype added. timing added. quick sort added. faster copy routine added. char/word optimized. default dictionaries combined into one. output routine changed. new faster input routine to read dictionary files. v2.1 completed 11-dec-86 all input/output routines rewritten. external sort (merge added). words less than 2 characters excluded. enter/leave and other changes for improved error handling. v2.2 completed 19-dec-86 /i option for faster input of word lists. better quicksort. default dictionary compressed. bugs in getword() and hgetc() fixed. strip out common words in load(). v2.3 completed 13-feb-87 use of memory altered to use all of memory without fixed char/word ratio (pointer array grows down from memtop). bug in sp_out() fixed. skip most dictionary word comparisons. bugs in hopen() and merge() fixed. limitations: the default dictionary must be on SY: and in compressed format. before compression it must be in the user dictionary format. user dictionary files must be alphabetized, all in lower case, and each word separated by including the last word. only a - z and ' characters may be used. the output list of words is always alphabetized and can not be obtained in order of appearance. uppercase letters are converted to lower case before comparing to the dictionaries. words can not be displayed in context. there is no limit to the size of the input file and the dictionary files other than available disk space. there is no specific terminal requirement. installation and building: compile spell.c and link with hclib.obj (my c library) and clib (whitesmith's c library). to install place spell.sav wherever you wish and the default dictionary (spell.dic) on the systems disk (sy:). spell.dic can be replaced by any ascii file list of words containing only alphabetic characters (a-z) in lower case and the apostrophe character (') with each word separated by carriage return-line feed (ie '\n') and in alphabetical order if this list is compressed using program compd.sav. it is probably easier to use this default dictionary and either add words to it as needed or else put additional words into special user dictionaries (format as above but not compressed), although if a large user dictionary is to be used it may be faster to add the words to spell.dic since a compressed dictionary is read faster. implementation notes: the program sizes available memory at run time and uses all of it to store words. as the input file is read it is parsed to remove all characters but ' and a-z. upper case letters are converted to lower case. hyphenated words at the end of a line are joined. hyphenated words within a line are treated as two separate words. runoff '.' commands are ignored if option /r is selected. the input words are loaded into memory. unless /d is specified each input word is compared to a list of the most common english words and not loaded if matched. words of less than 2 characters are also not loaded. the number of words and characters loaded will not include those rejected because of a match or one character. if the input file is a word list it will be loaded faster with the /i option which uses getword() instead of parsing the file a character at a time. the words are then alphabetized. quick sort is used but shell sort (option /s) is twice as fast if the words are close to alphabetical. if option /u is selected, duplicate words are removed. remaining words in memory are then compared to the default dictionary (unless option /d selected) and any other dictionaries specified. the routine which reads the dictionary files makes very strict assumptions about the format of the file as described above. dictionary files must only contain a-z [lower case], ', , and . unless /d or /i is selected, the input words are compared to a list of common words and rejected if matched before loading them into memory. spell can be used as a tool to prepare dictionaries since its output is in the correct format. the output is written to a temporary disk file. this file is copied to the specified output files or renamed if on the same disk. ttt *****************************************************************************/ #include #include #define NBUFFERS 2 #define WORDPERBLOCK 256 #define BYTEPERBLOCK 512 #define MAXWORD 32 #define OFFSET 0 #define LOWCHAN 8 #define NCHAN 6 #define READ 1 #define WRITE 2 #define MERGEORDER 5 #define MINCHAR 2 typedef struct hio { int chan; /* channel number */ char mode; /* mode, READ or WRITE or NULL (not open) */ char ugetc; /* start of block unget character */ int nblocks; /* number of blocks in the file */ int block; /* next block to read or write */ int bkount; /* number of blocks completed */ int p_buff; /* pointer to which buffer is active */ int p_char; /* pointer to next character */ char dbuff[NBUFFERS][BYTEPERBLOCK]; /* buffers */ } HIO; _main() { int loop(), limits(), greet(); unsigned int enter(); extern unsigned pbot, membot, memtop; /* * start */ greet("\t\tspelling checker for rt-11 and tsx+\t\tV2.3\n"); errfmt("enter \"/H\" for help\n\n"); /* * get memory limits, divide available high memory into space * for pointers to dictionary words (pwrd) and space for * characters (ie actual words). membot is the address just * above the program image, pointers start here. */ limits(OFFSET, &pbot, &membot, &memtop); /* size memory */ if((membot % 2) == 1) membot += 1; if((memtop % 2) == 1) memtop -= 1; /* * main body of program */ FOREVER enter(&loop); } /****************************************************************************/ int loop() /* "the main" operating part of the program */ { char in_files[6][15], out_files[3][15], opts[10]; static char temp_file[] = "DK:TEMP00.TMP"; static char deftype[12]={'W','R','D','S','P','L','S','P','L','S','P','L'}; char *gname(), *cpystr(); int ropt, min, flag, kount; int leave(), tmp_out(), load(), rtcsi(), option(), help(); int quickr(), cmpwrd(), shell(), r_alpord(), exchange(), sp_out(); int ext_sort(), hopen(), hclose(), hcreate(); register int i; long ltics, sec, tics(); unsigned totalc, nwords, unique(); extern char **pwrd; extern HIO hfiles[]; /* * */ FOREVER { /* * get and interpret command line */ label1: rtcsi(out_files, in_files, deftype, opts); ltics = tics(); if(option(opts, 'H')) { /* help selected */ help(); goto label1; } if(in_files[0][0] == '\0') { errfmt("spell - no input file name entered\n"); goto label1; } if(out_files[0][0] == '\0') { /* default output name */ cpystr(out_files[0], in_files[0], NULL); i = instr(out_files[0], "."); cpystr(&out_files[0][i], ".SPL", NULL); } /* * open input files */ if(!hopen(&hfiles[0], in_files[0])) { /* open input file */ errfmt("spell - unable to open input file %p\n",in_files[0]); hclose(&hfiles[0]); goto label1; } /* * load input into memory, alphabetize, unique, compare */ flag = NO; /* YES if all of input file read in */ kount = 0; while(!flag) { /* * create temporary output file */ if(!hcreate(&hfiles[1],gname(temp_file,kount),0)){ errfmt("spell - unable to create temporary output file\n"); hclose(&hfiles[0]); hclose(&hfiles[1]); goto label1; } /* * parse input file and load into memory */ flag = load(&hfiles[0], &nwords, &totalc, kount, \ option(opts, 'D'), option(opts, 'R'), option(opts, 'I')); errfmt("%i words (%i characters) loaded into memory\n",\ nwords, totalc); kount++; /* increment number of loads */ /* * set address of word array */ pwrd = memtop - 2 * (nwords - 1); /* * alphabetize */ if(option(opts, 'S')) shell(nwords, r_alpord, exchange, 0); else quickr(nwords, r_alpord, exchange, 0); /* * strip down to unique words */ if(option(opts, 'U')) unique(nwords); /* * check spelling against dictionaries */ if(!option(opts, 'D')) cmpwrd("SY:SPELL.DIC", in_files[0], nwords, YES); for(i = 1; in_files[i][0] > '\0'; i++) cmpwrd(in_files[i], in_files[0], nwords, NO); /* * write remaining unmatched words to temporary file */ tmp_out(&hfiles[1], nwords); /* * close output file */ if(!hclose(&hfiles[1])) { errfmt("spell - unable to close temporary file\n"); leave(); } } /* * close input file */ if(!hclose(&hfiles[0])) { errfmt("spell - unable to close input file\n"); leave(); } /* * alphabetize and unique output file if > 1 batch of input */ if(kount > 1) ext_sort(--kount, temp_file, option(opts, 'U')); /* * send output to the output files */ sp_out(temp_file, out_files, in_files[0]); /* * time the run */ sec = tics() / 60; min = sec / 60; sec -= min * 60; errfmt("elapsed time %i:%l\n", min, sec); } } /****************************************************************************/ char *gname(file_name, n) /* returns file name in file_name where the name is tempNN.tmp. the "NN" represents n which is constrained to be < 100. */ register char *file_name; int n; { unsigned decode(); decode(file_name + 7, 2, "%+02i", n); return(file_name); } /****************************************************************************/ int tmp_out(f_p, nwords) /* write the words in memory to a temporary file */ HIO *f_p; int nwords; { register char *pc, **pw; int putword(); extern unsigned memtop; for(pw = memtop; nwords-- > 0; pw--) { /* while words left */ if(*pw != NULL) { /* if a good word */ pc = *pw; /* initialize pointer */ putword(f_p, pc); } } } /****************************************************************************/ int help() /* to review help text, edit file spell.hlp */ { errfmt("\t\t\t spell v2.3\n\nThis program matches text or a"); errfmt(" list of words against up to 7 dictionary files.\nThe ou"); errfmt("tput is an alphabetized list of words not found in any d"); errfmt("ictionary. Words\nfrom the input file are defined as str"); errfmt("ings of characters a - z and ' termina-\nted by any othe"); errfmt("r character (all other characters are ignored). Upper ca"); errfmt("se\nletters are converted to lower case. If a hyphen end"); errfmt("s a line, the word is\njoined. The rt11 command string i"); errfmt("nterpretor is used. Up to three output and\n6 input file"); errfmt("s can be specified. input files 2-6 are dictionaries aga"); errfmt("inst which\nto check input file 1. the default dictionar"); errfmt("y is dk:spell.dic in compressed\nascii format. Other dic"); errfmt("tionaries are ASCII files containing alphabetical word\n"); errfmt("lists (one word per line). the default input filetype is"); errfmt(" .wrd and the default\noutput filetype is .spl. Note tha"); errfmt("t if a device name is given in either the\ninput or outp"); errfmt("ut file list, that device is the default for the remaind"); errfmt("er of the\ncommand string (ie not dk:). options can be s"); errfmt("elected by including \"/O\" any-\nwhere in the command s"); errfmt("tring where \"O\" represents a single character option.\n"); errfmt("\n[op1][,op2][,op3]=ip1[,ip2][,ip3][,ip4][,ip5][,ip6][/O]"); errfmt("\n\n/D do not use the default dictionary\t/S shell sort ("); errfmt("faster if presorted)\n/H type this help message\t\t/U un"); errfmt("ique, list output words once only\n/I input file in dict"); errfmt("ionary format (one word per line), for faster input\n/R "); errfmt("input file in runoff format (ignore lines starting with "); errfmt("'.')\n"); } /****************************************************************************/ unsigned unique(nwords) /* strip out duplicate words */ unsigned nwords; { char **pw2; register char **pw; register int i, k; int alpho(); extern char **pwrd; /* * start, no words skipped yet, pointers adjacent */ pw2 = pw = pwrd; pw++; for(i = 1; i < nwords; pw++, i++) { k = alpho(*pw, *pw2); if(k == 0) *pw = NULL; else pw2 = pw; } } /****************************************************************************/ int load(f_p, nwords, totalc, n, dopt, ropt, iopt) /* read the input file into memory, returns YES if the entire file is in, NO otherwise. nwords and totalc are the numbers of words and characters loaded respectively. if iot is YES, the input file is assumed to be a dictionary and loaded with a faster algorithm. ropt indicates a runoff file in which case lines beginning with '.' are ignored. dopt indicates whether or not the /d option is active. */ HIO *f_p; unsigned *nwords, *totalc; int n, dopt, ropt, iopt; { register char c, *pc, **pw; static char lastc; int wflag; int wlist(), hgetc(), hungetc(); unsigned nc; extern unsigned membot, memtop; /* * set up pointers */ *totalc = nc = 0; *nwords = 0; pc = membot; pw = memtop; /* * read in a word */ if(n == 0) /* initialize first call to load */ lastc = '\n'; if(iopt) { FOREVER { if((nc = getword(f_p, pc)) == EOF) return(YES); else { *pw-- = pc++; pc += nc; *totalc += nc; (*nwords)++; if(pc + MAXWORD >= pw) return(NO); } } } FOREVER { wflag = NO; while(nc < MAXWORD - 1) { label1: c = hgetc(f_p); if(c == EOF) { if(wflag == YES) { *totalc += nc; *pc = '\0'; (*nwords)++; } return(YES); } if(c >= 'A' && c <= 'Z') /* convert lower case to upper */ c += 32; if((c >= 'a' && c <= 'z') || c == '\'') { if(wflag == NO) { /* store address of word */ *pw-- = pc; } *pc++ = c; /* store character */ nc++; wflag = YES; /* in word */ } else if(c == '-' && wflag == YES) { /* hyphenation */ if((c = hgetc(f_p)) != '\n') { /* not at end of line */ hungetc(f_p, c); lastc = '-'; /* this line not currently needed */ break; } else { while((c = hgetc(f_p)) == ' ' || c == '\t' || c == '\n') ; hungetc(f_p, c); c = '\n'; } } else if(c == '.' && ropt == TRUE && lastc == '\n') { while((c= hgetc(f_p)) != '\n') {/* deal with runoff option */ if(c == EOF) { /*burn rest of line */ if(wflag == YES) { *totalc += nc; *pc = '\0'; (*nwords)++; } return(YES); } } if(wflag == YES) break; } else if(wflag == YES) { /* if word delimiter */ lastc = c; break; } lastc = c; } *pc++ = '\0'; if(nc < MINCHAR || (!dopt && wlist(*(pw+1)))) { nc = 0; /* word too small */ pw++; /* reset pointers */ pc = *pw; } else { *totalc += nc; nc = 0; (*nwords)++; if(pc + MAXWORD >= pw) return(NO); } } } /****************************************************************************/ int r_alpord(i, j) /* compares two words as to reverse alphabetic order. i and j are the array indexes (for pwrd) which point at the two words to compare. returns < 0 if word[i] < word[j]; 0 if they are the same word; or > 0 if word[i] > word[j]. */ unsigned i, j; { register char *s, *t; extern char **pwrd; s = pwrd[i]; t = pwrd[j]; for( ; *s == *t; s++, t++) { if(*s == '\0') return(0); } return(*t - *s); } /****************************************************************************/ int alpord(i, j) /* compares two words as to alphabetic order. i and j are the array indexes (for pwrd) which point at the two words to compare. returns < 0 if word[i] < word[j]; 0 if they are the same word; or > 0 if word[i] > word[j]. */ unsigned i, j; { register char *s, *t; extern char **pwrd; s = pwrd[i]; t = pwrd[j]; for( ; *s == *t; s++, t++) { if(*s == '\0') return(0); } return(*s - *t); } /****************************************************************************/ int exchange(i, j) /* exchanges two word in memory by exchanging the order in which their addresses are stored in pwrd. i and j are the pwrd indexes of the two word to be exchanged. */ unsigned i, j; { register char *t; extern char **pwrd; t = pwrd[i]; pwrd[i] = pwrd[j]; pwrd[j] = t; } /****************************************************************************/ int sp_out(filename, out_files, infile) /* send result to the specified output files. the results are in the file named filename. if it is already on the appropriate device, it is renamed instead of copied. */ char *filename, *infile; char out_files[3][15]; { char *cpystr(); int channel, inchan, outchan, copyok = YES; register int rnflag = NO, i, k; int leave(), remove(), rename(), same_device(), copy(); extern char chan_n[]; /* * */ for(i = 0; i < 3; i++) { if(out_files[i][0] == '\0') break; if((i==2||out_files[i+1][0]=='\0')&&same_device(filename,out_files[i])>=0){ for(k = 0; k < NCHAN; k++) { if(chan_n[k] == NO) { channel = k + LOWCHAN; break; } } if(k >= NCHAN) { errfmt("spell - channel not available for output file rename\n"); leave(); } rename(filename, out_files[i], channel); rnflag = YES; } else { for(k = 0; k < NCHAN; k++) { if(chan_n[k] == NO) { inchan = k + LOWCHAN; break; } } for(k++; k < NCHAN; k++) { if(chan_n[k] == NO) { outchan = k + LOWCHAN; break; } } if(k >= NCHAN) { errfmt("spell - channels not available for output file copy\n"); leave(); } if(!copy(filename, out_files[i], inchan, outchan)) copyok = NO; } } if(rnflag == NO && copyok == YES) remove(filename); return(YES); } /****************************************************************************/ int copy(fname1, fname2, inchan, outchan) /* copies file fname1 to file fname2 block by block returns 1 if successful and 0 if not. */ char *fname1, *fname2; int inchan, outchan; { int buff[WORDPERBLOCK]; register int i, nblocks; int leave(), bread(), bwrite(), bopen(), bcreate(), bclose(); /* * open input file */ if((nblocks = bopen(inchan, fname1)) >= 0) { /* open input file */ errfmt("spell - unable to open input file %p\n", fname1); bclose(inchan); leave(); } nblocks = -nblocks; /* * create output file */ if(bcreate(outchan, fname2, nblocks) >= 0) { /* create output file */ errfmt("spell - unable to create output file %p\n", fname2); bclose(inchan); bclose(outchan); leave(); } /* * copy (read, write) */ for(i = 0; i < nblocks; i++) { if(bread(inchan, buff, WORDPERBLOCK, i, 0)>=0 || \ bwrite(outchan, buff, WORDPERBLOCK, i, 0)>=0) { errfmt("spell - unable to copy output file\n"); bclose(inchan); bclose(outchan); leave(); } } /* * close up */ bclose(inchan); bclose(outchan); return(YES); } /****************************************************************************/ int same_device(fname1, fname2) /* compares two strings up to the first ":". if they are equal and each contain ":", returns 1; if one string starts with "DK:" and the other contains no ":", returns 1; if strings are equal without ":", returns 0; and otherwise returns -1. used to determine if two filenames start with the same device name. the two filenames are converted to upper case before starting. */ register char *fname1, *fname2; { int i, c; unsigned instr(), substr(); /* * convert filenames to upper case */ for(i = 0; (c = fname1[i]) != '\0'; i++) { if(c <= 'z' && c >= 'a') fname1[i] -= 32; } for(i = 0; (c = fname2[i]) != '\0'; i++) { if(c <= 'z' && c >= 'a') fname2[i] -= 32; } /* * one is "DK:", the other no device */ if(substr(fname1, "DK:") == 0 && fname1[0] != '\0'\ && fname2[instr(fname2, ":")] == '\0') return(1); if(substr(fname2, "DK:") == 0 && fname2[0] != '\0'\ && fname1[instr(fname1, ":")] == '\0') return(1); /* * equal to the ":"? */ for( ; *fname1 == *fname2; fname1++, fname2++) { if(*fname1 == '\0') { if(*fname2 == '\0') return(0); return(-1); } if(*fname1 == ':') return(1); } /* * unequal */ return(-1); } /***************************************************************************/ int cmpwrd(dict, in_file, nwords, cdic) /* compare the words in memory to those in dictionary dict. assumes that dict contains a list of alphabetized words containing lower case letters and ' only and each separated by \n. returns nothing. */ char *dict, in_file; unsigned nwords; int cdic; { register char **pw; char wrdbuf[MAXWORD]; register int i; int nchar = 0, same_chars = 0; int leave(), bclose(), new_alpho(), getword(), hopen(), hclose(); int getdw(); extern char **pwrd; extern unsigned memtop; extern HIO hfiles[]; if(!hopen(&hfiles[2], dict)) { errfmt("spell - unable to open dictionary file %p\n", dict); bclose(hfiles[0].chan); leave(); } errfmt("comparing input file %p to dictionary %p\n", in_file, dict); pw = memtop; if(cdic) { if(getdw(&hfiles[2], wrdbuf) == EOF) /* get dict word */ return; } else if(getword(&hfiles[2], wrdbuf) == EOF) /* get dict word */ return; while(*pw == NULL) { pw--; if(pw < pwrd) { hclose(&hfiles[2]); return; } } FOREVER { i = new_alpho(*pw, wrdbuf, &nchar); if(i <= 0) { if(i == 0) *pw = NULL; pw--; while(*pw == NULL) { pw--; if(pw < pwrd) break; } if(pw < pwrd) break; } else { if(cdic) { while((same_chars = getdw(&hfiles[2], wrdbuf)) > nchar) ; if(same_chars == EOF) break; } else if(getword(&hfiles[2], wrdbuf) == EOF) /* get dict word */ break; } } hclose(&hfiles[2]); } /****************************************************************************/ int hgetc(x) /* get a character from the file with HIO of x. use of this routine will not precisely duplicate the input file if it contains a carriage return (13, octal 15) alone without a line feed (10, octal 12) since all CRs are ignored. */ HIO *x; { char junk; register int c, tempc; int getsub(), leave(); /* * get character and test for end of file */ if(x->mode != READ) leave(); if(!x->nblocks) return(EOF); /* * unget character? */ if(x->p_char < 0) c = x->ugetc; /* start of block unget character */ else c = x->dbuff[x->p_buff][x->p_char]; /* * if beginning of file go until good character */ if(!x->p_char && !x->bkount) { while(c == '\0' || c == '\015') { if(++(x->p_char) >= BYTEPERBLOCK) { if(getsub(x, 0, &junk)) return(c); } c = x->dbuff[x->p_buff][x->p_char]; } } /* * leave pointer on next character */ for(tempc = '\0'; tempc == '\0' || tempc == '\015'; ) { if(++(x->p_char) >= BYTEPERBLOCK) { if(getsub(x, 0, &junk)) return(c); } tempc = x->dbuff[x->p_buff][x->p_char]; } return(c); } /****************************************************************************/ int getsub(x, n, wbuf) /* subroutine used by getword() and getdw() */ HIO *x; int n; char *wbuf; { int bread(), bclose(), leave(); x->bkount++; if(x->block >= x->nblocks) { if(x->bkount >= x->nblocks) { wbuf[n] = '\0'; x->nblocks = 0; return(YES); } } else { if(bread(x->chan,&x->dbuff[x->p_buff][0],WORDPERBLOCK,x->block++,0)>=0){ errfmt("spell - unable to read\n"); bclose(x->chan); leave(); } } x->p_char = 0; if(++x->p_buff >= NBUFFERS) x->p_buff = 0; return(NO); } /****************************************************************************/ int getdw(x, wrdbuf) /* get a word from the READ file opened with HIO x and copy it to char wrdbuf[] limiting length to MAXWORD characters. the input file must be in compressed dictionary format ie each word preceded by a single character '0' - '@' indicating the number of beginning characters in common with the previous word (alphabetized). if the word exceeds MAXWORD it is truncated and the extra characters are ignored. returns EOF or number of characters unchanged form the previous word (excluding the '\0'). this may be 0 even though a valid word is returned (EOF must be negative!). leave() called on all errors. */ HIO *x; char *wrdbuf; { static char tbuf[MAXWORD]; register char c; register int k, i; int same_chars; int getsub(), leave(); /* * test for READ file and end of file */ if(x->mode != READ) leave(); if(!x->nblocks) return(EOF); c = x->dbuff[x->p_buff][x->p_char]; /* * get first character */ if(c < '0' || c > '@') { errfmt("spell - improper dictionary, not compressed format\n"); leave(); } /* * copy same characters from temporary buffer */ for(i = 0, k = c - '0'; i < k; i++) wrdbuf[i] = tbuf[i]; same_chars = i; /* * get new characters */ for(c = 'a'; (c >= 'a' || c == '\'') && i < MAXWORD - 1; ) { if(++(x->p_char) >= BYTEPERBLOCK) { if(getsub(x, i, wrdbuf)) return(same_chars); } c=x->dbuff[x->p_buff][x->p_char]; tbuf[i] = wrdbuf[i] = c; i++; } wrdbuf[--i] = '\0'; /* * set pointers for next word */ while((c = x->dbuff[x->p_buff][x->p_char]) < '0' || c > '@') { if(++(x->p_char) >= BYTEPERBLOCK) { if(getsub(x, i, wrdbuf)) return(same_chars); } } return(same_chars); } /****************************************************************************/ int getword(x, wrdbuf) /* get a word from the READ file opened with HIO x and copy it to char wrdbuf[] limiting length to MAXWORD characters. the input file must have each word terminated by '\n' even if it is the last word. if a word is cut off at MAXWORD characters and the remainder becomes a new word. returns EOF or the number of characters excluding the '\0'. if there is any error leave() is called. */ HIO *x; char *wrdbuf; { register char c; register int i; int getsub(), leave(); /* * test for READ file and end of file */ if(x->mode != READ) leave(); if(!x->nblocks) return(EOF); /* * read in the word */ for(i=0;(c=x->dbuff[x->p_buff][x->p_char])>'\015' && ip_char) >= BYTEPERBLOCK) { if(getsub(x, i, wrdbuf)) return(i); } } wrdbuf[i] = '\0'; /* * set pointers for next word */ while(((c=x->dbuff[x->p_buff][x->p_char])<'a'||c>'z') && c!='\'') { if(++(x->p_char) >= BYTEPERBLOCK) { if(getsub(x, i, wrdbuf)) return(i); } } /* * finish */ return(i); } /****************************************************************************/ int hopen(x, fname) /* open a file for buffered i/o */ HIO *x; char *fname; { register int i; int bopen(), bclose(), bread(); extern char chan_n[]; /* * test if this HIO is unused */ if(x->mode != NO) return(NO); /* * initialize file parameters */ for(i = 0; i < NCHAN; i++) { if(chan_n[i] == NO) { x->chan = i + LOWCHAN; break; } } if(i >= NCHAN) { errfmt("no channel available\n"); return(NO); } x->bkount = x->block = x->p_buff = x->p_char = 0; /* * issue lookup emt */ if((i = bopen(x->chan, fname)) > 0) return(NO); /* if 0 blocks, it will succeed */ x->nblocks = -i; /* * initialize (read to) buffers */ for(i = 0; i < NBUFFERS && i < x->nblocks; i++) { if(bread(x->chan,&x->dbuff[i][0],WORDPERBLOCK,(x->block)++, 0)>=0){ bclose(x->chan); return(NO); } } x->mode = READ; chan_n[x->chan - LOWCHAN] = YES; return(YES); } /****************************************************************************/ int putword(x, word) /* write a word to the WRITE file created with HIO x. each word is terminated with '\n'. returns YES or NO (proper file not created. */ HIO *x; char *word; { register int flag, i; int leave(), bclose(), bwrite(); /* * test for WRITE file */ if(x->mode != WRITE) leave(); /* * copy word into buffer, write buffer when full */ flag = NO; for(i = 0; word[i] != '\0' && i < MAXWORD-1; i++) { x->dbuff[x->p_buff][x->p_char++] = word[i]; if(x->p_char >= BYTEPERBLOCK) { flag = YES; x->p_char = 0; x->p_buff++; if(x->p_buff >= NBUFFERS) x->p_buff = 0; } } for(i = 0; i < 2; i++) { if(!i) x->dbuff[x->p_buff][x->p_char++] = '\015'; else x->dbuff[x->p_buff][x->p_char++] = '\012'; if(x->p_char >= BYTEPERBLOCK) { flag = YES; x->p_char = 0; x->p_buff++; if(x->p_buff >= NBUFFERS) x->p_buff = 0; } } if(flag) { i = (!x->p_buff ? NBUFFERS - 1: x->p_buff - 1); if(bwrite(x->chan, &x->dbuff[i][0], WORDPERBLOCK, x->block++, 0)>=0) { errfmt("spell - unable to write\n"); bclose(x->chan); leave(); } } return(YES); } /****************************************************************************/ int hcreate(x, fname, nb) /* create a buffer file of nblocks */ HIO *x; char *fname; unsigned nb; { register int i; int bcreate(); extern char chan_n[]; /* * test if this HIO unused */ if(x->mode != NO) return(NO); /* * initialize file parameters */ for(i = 0; i < NCHAN; i++) { if(chan_n[i] == NO) { x->chan = i + LOWCHAN; break; } } if(i >= NCHAN) { errfmt("no channel available\n"); return(NO); } x->nblocks = nb; x->block = x->p_buff = x->p_char = 0; /* * create file, .enter */ if((bcreate(x->chan, fname, nb)) >= 0) return(NO); x->mode = WRITE; chan_n[x->chan - LOWCHAN] = YES; return(YES); } /****************************************************************************/ int hclose(x) /* close a buffered file */ HIO *x; { int bclose(), bwrite(); extern char chan_n[]; /* * finish with output buffer, zero and write */ if(x->mode == NULL) return(NO); if(x->mode == WRITE && x->p_char > 0) { for( ; x->p_char < BYTEPERBLOCK; x->p_char++) x->dbuff[x->p_buff][x->p_char] = '\0'; if(bwrite(x->chan, &x->dbuff[x->p_buff][0], WORDPERBLOCK, x->block, 0) >= 0) { errfmt("spell - unable to write\n"); bclose(x->chan); return(NO); } } /* * close file */ if(bclose(x->chan) >= 0) return(NO); else { x->mode = 0; chan_n[x->chan - LOWCHAN] = NO; /* release channel number */ return(YES); } } /****************************************************************************/ int hungetc(x, c) /* unget a character to file of HIO x */ HIO *x; int c; { if(x->p_char > 0) { (x->p_char)--; x->dbuff[x->p_buff][x->p_char] = c; } else if(x->p_char == 0) { (x->p_char)--; x->ugetc = c; } else x->ugetc = c; } /****************************************************************************/ int gremov(low, lim, fname) /* deletes temporary files numbered from low to lim inclusively; names are tempNN.tmp. */ int low, lim; char *fname; { char *gname(); register int i; int remove(), hclose(); extern HIO hfiles[]; for(i = 0; i <= lim - low; i++) { if(!hclose(&hfiles[i])) errfmt("spell - unable to close temporary file\n"); else if(remove(gname(fname, low + i)) != 0) errfmt("spell - unable to remove temporary file\n"); } } /****************************************************************************/ int ext_sort(high, fname, unique) /* perform external merged sort on the temporary output files to combine them into a single final output file. high is the number of temporary files-1. fname is the address of a string into which to deposit the name of the final file. */ int high; char *fname; int unique; { char *gname(); register int i, low, lim; int leave(), gremov(), merge(), hopen(), hclose(), hcreate(); extern HIO hfiles[]; /* * merge the temporary files */ for(low = 0; low < high; low += MERGEORDER) { lim = min(low + MERGEORDER - 1, high); for(i = low; i <= lim; i++) { if(!hopen(&hfiles[i - low], gname(fname, i))) { errfmt("spell - unable to open temporary output files\n"); leave(); } } high++; if(!hcreate(&hfiles[MERGEORDER], gname(fname, high), 0)) { errfmt("spell - unable to create merge file\n"); leave(); } merge(lim - low + 1, unique); if(!hclose(&hfiles[MERGEORDER])) /* close output file */ errfmt("spell - unable to close merge file\n"); gremov(low, lim, fname); /* delete temporary files */ } gname(fname, high); } /****************************************************************************/ int merge(nfiles, unique) /* merges n files together. */ int nfiles, unique; { char lastwd[MAXWORD], *cpystr(); register int i, nf = 0; int alpord(), shell(), exchange(); int reheap(), getword(), putword(), alpho(); char *cc; extern char **pwrd; extern unsigned membot; extern HIO hfiles[]; /* * set up pointers */ if((memtop - membot) < (MAXWORD * MERGEORDER + MERGEORDER)) { errfmt("spell - inadequate memory for merge\n"); return; } pwrd = membot; cc = membot + 4 * MERGEORDER; /* initialize char pointer */ /* * start the heap set up */ for(i = 0; i < nfiles; i++) { if(getword(&hfiles[i], &cc[MAXWORD * i]) > 0) pwrd[nf++] = &cc[MAXWORD * i]; } /* * sort the heap */ shell(nf, alpord, exchange, 0); /* * output top line from heap and replace */ lastwd[0] = '\0'; /* initialize last word */ while(nf > 0) { if(unique) { if(alpho(lastwd, pwrd[0]) != 0) { putword(&hfiles[MERGEORDER], pwrd[0]); cpystr(lastwd, pwrd[0], NULL); } } else putword(&hfiles[MERGEORDER], pwrd[0]); i = (pwrd[0] - cc) / MAXWORD; if(getword(&hfiles[i], pwrd[0]) == EOF) pwrd[0] = pwrd[nf-- - 1]; reheap(nf, alpord, exchange); } } /****************************************************************************/ int reheap(nf, pord, pexch) /* reorder the heap after putting a new member in the first slot. nf is the number of members in the heap. pord is the address of a comparison function returning < 0 if the first argument is less than the second, > 0 if the second argument is less than the first, or 0 if the two arguments are equal. pexch is the address of a function which will exchange its two arguments. */ int nf; int (*pord)(), (*pexch)(); { register int i, j; for(i = 1; i * 2 <= nf; i = j) { j = i * 2; if(j < nf) { if((*pord)(j - 1, j) > 0) j += 1; } if((*pord)(i - 1, j - 1) <= 0) break; (*pexch)(i - 1, j - 1); } } /****************************************************************************/ int quickr(u, pord, pexch, l) /* recursive quicksort. based on "Programming Pearls" page 175. pord is a routine with compares two items and pexch exchanges them. each is called with two arguments which are the indices (0 - n-1) of the items. u is the index of the last item. l is the index of the first item (offset). */ register int u; int l; int (*pord)(), (*pexch)(); { /* float rng(); int sd1 = 69, sd2 = 1594; */ register int i, m; u--; if(u - l > 15) { /* (*pexch)(l, l + (int)((float) (u-l+1) * rng(&sd1, &sd2))); */ (*pexch)(l, (u + l) / 2); m = l; for(i = l + 1; i <= u; i++) { if((*pord)(i, l) < 0) { (*pexch)(++m, i); } } (*pexch)(l, m); quickr(m, pord, pexch, l); quickr(u+1, pord, pexch, m+1); } else shell(u - l + 1, pord, pexch, l); } /****************************************************************************/ int wlist(s) /* test whether the word in the string s is present in the list contained in this subroutine. */ char *s; { int alpho(), bin_search(); static *wl[] = { "about", "after", "all", "also", "an", "and", "any", "are", "as", "at", "be", "been", "before", "but", "by", "can", "could", "did", "do", "does", "down", "each", "for", "from", "go", "had", "has", "have", "he", "her", "him", "his", "how", "if", "in", "into", "is", "it", "its", "like", "many", "may", "me", "more", "much", "my", "new", "no", "not", "now", "of", "off", "on", "one", "or", "other", "our", "out", "over", "right", "said", "see", "she", "so", "some", "than", "that", "the", "their", "them", "then", "there", "these", "they", "this", "time", "to", "too", "two", "up", "use", "was", "we", "were", "what", "when", "where", "which", "who", "will", "with", "would", "you", "your" }; /* static char *wl[] = { "about", "after", "again", "all", "along", "also", "always", "an", "and", "another", "any", "are", "around", "as", "asked", "at", "away", "back", "be", "because", "been", "before", "below", "between", "big", "both", "but", "by", "came", "can", "come", "could", "day", "did", "do", "does", "don't", "down", "each", "end", "even", "every", "few", "find", "first", "for", "found", "from", "get", "give", "go", "good", "great", "had", "has", "have", "he", "help", "her", "here", "him", "his", "home", "how", "if", "in", "into", "is", "it", "its", "just", "know", "large", "last", "left", "like", "long", "look", "made", "make", "man", "many", "may", "me", "men", "might", "more", "most", "mr", "much", "must", "my", "name", "never", "new", "next", "no", "not", "now", "number", "of", "off", "often", "old", "on", "one", "only", "or", "other", "our", "out", "over", "own", "part", "place", "put", "read", "right", "said", "same", "saw", "say", "see", "set", "she", "should", "show", "small", "so", "some", "still", "such", "take", "tell", "than", "that", "the", "their", "them", "then", "there", "these", "they", "things", "think", "this", "those", "three", "through", "time", "to", "too", "two", "under", "up", "us", "use", "used", "very", "was", "way", "we", "well", "went", "were", "what", "when", "where", "which", "while", "who", "why", "will", "with", "word", "work", "would", "write", "years", "you", "your" }; n181 */ return(bin_search(s, wl, alpho, 0, 93)); } /****************************************************************************/ int bin_search(s, wl, pcomp, l, u) /* binary search routine for a string s. l is the index of the first (low) array member and u is the index of the last (upper) array member. */ int (*pcomp)(); char *s, *wl[]; register int l; int u; { register int k, pivot; while (l <= u) { pivot = (l + u) / 2; k = (*pcomp)(wl[pivot], s); if(k == 0) return(YES); else if(k < 0) l = pivot + 1; else /* (k > 0) */ u = pivot - 1; } return(NO); } /****************************************************************************/ int new_alpho(s, t, n) /* compares two strings s and t as to alphabetic order. returns < 0 if s < t, 0 if they are equal, or > 0 if s > t. n is changed to the index of the character first mismatched. */ register char *s, *t; int *n; { register int k; for(k = 0; s[k] == t[k]; k++) { if(s[k] == '\0') return(0); } *n = k; return(s[k] - t[k]); } /***************************************************************************/ /* external definitions */ char chan_n[NCHAN] = { 0 }; char **pwrd = NULL; unsigned pwsize = 0, pbot = NULL, membot = NULL, memtop = NULL; HIO hfiles[MERGEORDER + 1] = { 0 }; 0aah2rdvark8s3on1ba3ca4k4terial4uses3ft3lone7s3ndon7ed7ing7ment;s7s 3se5d6ly5ment9s5r6s5s4h5ed7ly6s5ing5ment9s4ing3table4e5d5ment9s5r6s 5s4ing5s4toir2be4s5s6es4y5s3ot5s6hip9s3reviate:d:s9ing:ons4rd6ance:s8t9ly6ed6ing9ly7on9ists2me 4s2ne2ock3lyte7s3nite3rn5s3ustic8al:ly8ian8s2quaint8anceal>ist>sly;or=s4rability7le9ness8y6l7s7ty6tion5e6d6r7s6s5ing8ly4ssibility 8le:ness7on9s7ve4t5s5tance:s6ed8ly6ing4x5ed6s5ing5ture9s3onish8ed9r :s9s8ing;ly8ments:r;s:s9ing5vate9d9s8ing ;ly9on;s4egate9d9s8ing9on;al;s9ve;ly5ss7ed8s7ing8on:s8ve:ly:ness9ity 7or9s4ieve8d9ly8ment8s7ing2hast2ile5ly5ness4ities6y3ng3tate7d8ly7s 6ing7on9al9s7ve6o7r8s2lare3eam4t3itter3ow2nate5ic7ally6on3es3ize6d 5ing3ostic8ism8s3us2o3g4ue3n4al4ic5es5st7ic9al;ly5ze7d7s6ing9ly4y3ra 5e5phobia:c5s3uti6s2raphia4rian8ism8s3ee5ability7le9ness8y5d5ing5ment 9s5s3ibusiness4culturals9e:d :r:s9ing7y5retto:s6o7s4le6s5ic5uia4mande4n5town4rgen8ic8s6ic7es7st 9s6y4viate9d9s8ing9on;s8or:s4y5s5way8s3hallows4eal3iaceous5nce8s4ed 5s4gator9s4terate:d:s9ing:onlys8ress3er5gris5s3iance4dexterity8rously7s3heim3l4cite4ecta7s5mma8tic5ptic4gesia 8c9s6tic4ity4ly4og6ic8al:ly7es7st7ze9d9s8ing6ous9ly9ness6ue8s6y4yses 6is6t7s5tic8al:ly8ity8s5zabilitiess;y8morphic ?ally>sm>ze@d@s?ing8sophy3i4aircraft5nxiety4bacterial6llistic5iotic :ally:s5odies7y4c5atalyst5hrist:s5ipant8table9e:d:s9ing:ons;ive6rivative5iuretic5otal9ly7e8s4electron4fertility 5reeze:s4gen7ic9ally9ity7s5lobulin5ravity5ua4hero8es8ic:ally5istamine =ss5honal :ly8ies8y5odal7e8an8s6etic6llution6verty5roton5yretic;s4quarian;ism ;s9es8y7te9d9s8ing9on;s6e7d7ly7ness7s6ing7ties8y4s5epsis7tic:ally:s 6rum5ocial:ly5pasmodic5tatic5ymmetric4tank5heses8is7tic:als9ing5ssed4ise7d7s6ing5ze7d7s6ing4oach8abilities>y:le8ed9s 8ing5bate9d8ing9on;s5priate;d;ly;ness;s:ing;on=s;ve:orly;st=s:y5ic7ally6sm8s7t8ic 8s5ngel9s4bishop:ric=s:s4deacon:s5iocese;s5ucal7hess;es8y6ke8s4ed5nemies 8y5ology5r6ies6s6y5s5type9s8icals;s3ute6ly 6ness2under2ylum6s3mmetric:als;or=s9ities;y4or6ed7ss9es6ial7ng7tarian=ism=s9tive =ly=ness8ies8y7zation=s8e9d9r:s9s8ing6s7hip3ism5tic8ally3o4bahn5iographer >sal@ly=ess;y8phage=s7um2d3die6s4y3e4n3ge5d5r6ed6ing6s5s3inage3land7s4y3minton 4outh8ed8ing8s3ness2ffin4le6d6ment:s6r7s6s5ing8ly8ness2g3asse4telle 9s3el5s3ful6s3gage7s4ed5r6s4ier6st5ly5ness6g4y3hdad3pipe7r8s7s3s3uette 8s2h3ama6s5ian8s3rain4ein2il4able4ed5e5r6s4iff7s5ng5wick9s4ment4or 5ut4s5man6en3t4ed5r6s4ing4s3ze2ja2ke4d4lite4r5's5ies5s6field5y4s3ing 2laclava4klava4laika9s4nce7d7r8s7s6ing4s3boa4riggan3conied8s6y3d4er 6dash5st4head8s4ing5sh4ly4ness4win3e4d4ful7ly7ness4r5s4s3ing3k4an6ization =s8e9d9s8ing6s4ed5r6s4ier6st5ness6g4s4y3l4ad6eer9s6ic7st6ries7y6s5st 7ed7ing7s4ed5rina9s5t6ic6s4ing5stic9ally9ians9e:d:s9ing4oin3ed4l5s4r5ies5s5y3fin4ront3head3ie4ng 3knot3l4ed5g6ged5r6s4ful4ine7s6g4s3man3s4prit4tring9s3wow3yer2x3car 6s3ed4r5s4s3ful6s3ier5st4ness5g3like3wood3y2y3's3ar5d5s3cott7ed8r9s 7ing7s3d3friend9s3hood3ish6ly6ness3ne3s4enberries:y2zeman3o1ra3bble 7d6ing3ce5d5let8s5r6s5s4hial4ing7ly4ken6t7ed7ing7s5ish8ness4t5eal7te 3d4ded5ing4enton4ford4ley4s4ycardia3e3g4gadocio;s6rt8s5ed6r7s6st5ing 5y4s3hma6n7ism7s5in3id5ed6r7s5ing5s4l5le4n5child5ier7st6ness6sh5less 9ly9ness5power5s6ick6tem7orm:er:ing:s5teaser;s5wash9ed:r:s9ing5y4se 6d6s5ing3ke5d5less5man5s4ing4y3mble7s6ier8st6y3n4ch6ed7s6ing4d5ed6is 6nburg6r7s5ies6ng6sh8ed9r:s9s8ing5on5s5y4s4t3s4h5er6st5ly5ness4ilia 4s5ard5ier8e9s7st6ly6ness5y3t4s4tiness6sh5le7d6ing5y3unfels3va5do7es 7s4e5d5ly5r6y5s6t4ing4o5ed6s5ing5s4ura3w4l5ed6r7s5ier7st6ng5s5y4n5ier 7st6ly6ness5y3y4ed4ing4s3ze5d5n6ed6ing6ly6ness5r6s5s4ier7s5l6ian9s 5ng4os4zaville2each6ed7s6ing4d5able5basket6oard5ed5fruit5ing5s6tuff :s5th5winner;s4k5able6ge6way5down9s5er7s5fast9s5ing5neck5out5point :s5s5throughs7genic7provocation7scopes:zes8ed7y5room9s5y3ude6tte5ia4se6s 5trophobia=c3w4s3y4ton2ean5ed5ing5s4r5ed6r6st5ing5ly5s3ment3o3veland 5r2iff5ord4ton3mate7s4b5ed5s3nic6al8ly6ian9s6s4t5on3p4ped5ing4s2ock 5ed5ing5s5wise3nic3se5d5ly5ness5r5s4ing4ure3t4h5ed6s5ing4s4ted3ud5s 5y2ub4bed5ing4s3msy3ster7s2yde1oach5ed6s5ing3l4esce8d8s4s3rse6r6st 3st5ed5ing5s3t4ed4ing4s3uthor8ed8s3x4ial2chlea3kpit7s4tail8s3onut7s 2d3e4d4ine4r5s4s3ing2efficient;s3ur2ffee2gnitive2here6d6nce7t8ly6s 5ing4sion2il4ed4ing4s3n4cide8d8nt:s8s7ing4ed4s2ld4s3ette3gate3in3laborate ;s:ing;on=s;ve:ord>s=ion@s6lateral6ry6st8ed8ing8s5ibute:d:s9ing:on s5na2sine3t4a4ly 4s2te3tage7s4on6s2ugh5ed5ing5s3ld5n't4ee3ncil7s4t5ed6r7act7balanced 7clockwise7part;s7s5ies6ng5ries6y5s5y3ple6d6r6s5ing3rage4se6s4t5ed 6ous9ly9ness5ing5s2variance7tes3entry4r5age8s5ed5ing5s3ina2w3boy6s 3girl7s3orker8s3s2zumel1rack5ed6r7s5ing5s3ft5s5y3ig3ndall4e5d5s3sh 5ed6s5ing3ter3wl5ed5ing5s2eam5ed5s4se6d6s4te6d6s5ing7ine6on8s5ure8s 3dit6s3ek3ighton3scent8s3w4ed4s2ied4s3me5a6n5s3ses4is3teria7on4ic6al 8ly6ism9s6s5que8s2oatia7n8s3ix3oked3p4ped4s3ss5e6d6s5ing3uch3wd5ed 5ing5s2ude5ly3ise6d6r7s6s5ing3mble7d7s6ing3sh5ed6s5ing4t5s3z2y3ing 3ptographic3stal7s1uba4n5s3e4d4s3ic2cumber8s2e3d3s2ff4ed4s2lture7s 2mberland6some3ulate7ing8on8ve2p3board8s3s2racao3e4d4s3ing4ous7ly3l 4ed4ing4s3rent7ly7s3se5d4or3t4ain7ed7ing7s4is3ve5d5s4ing2shion7s3todian 9s6y5m6arily8y6er8s6ization8e9d9s8ing6s2t3aneous3e3off6s3s3ting2yahoga 1yanide4otic2cle5d5s4ic6al5ng4opropane2linder8s6rical2nthia2pher6s 3rus2ril3us2stic1zechoslovakia>n?s0d'alene3zur1ad3s2ilies4y3ries4y 3sy2kar3ota2le3las2mage6d6s5ing4scus3e3on3p4ed4ing2n3a3bury3ce5d5s 4ing3ger6ous9ly6s4le6d6s5ing3iel6le4sh3ny3ube3zig2phne2rcy3ien3k4en 6ed4ly4ness4room8s3la4ene3rell3t4ed4ing4mouth4s3win2sh4ed5s4ing2ta 4base8s3e4d4s3ing2ughter8s2ve4nport3id2wn4ed4ing4s2y3s3time4on6a1e 2activating3d4locks5y4space3f3l4er6s4ing4s4t3n4na3r4born4s3th5s3uville 2bate6d6s5ing3bie3orah3ra3t4or4s3ug5ged6ing5s2cade6s4tur4y5ed5ing5s 3eased4it4lerate9ion4mber4nt6s3ibel7s4de6d6s5ing4mal7s4phered4sion 8ed8s6ve3k4ed4s3laration;s6e7d7s6ing4ine7d7s6ing3ode6d6r6s5ing4mpress :ed;s:ion4ngestant4rate8d8s7ing3rease8d8s7ing5ment9ed9ing9s2dicate 8d8s7ing3uce6d6s2em4ed4s3p4ened6s5r5st4ly3r2face6d6s5ing4ult7ed7s3eat 6ed6s4ct6ive9ly6s4nce7s5d6ed7r8s6ing6s4rred3ibrillate;ion4ciencies 9y6t7s4nable5e6d6s5ing6te8ly7ion:s8ve:ly3lated4ection2gradation;s6e 7d7s6ing4ee6s2hydrate9d9s8ing6ogenase2irdre2laware4y5ed5ing5s3egate 8d8s4te6d6rious6s5ing6on8s3hi3iberate:s9ing:ons:s4ssociateing?on6fort5nnect:ed:ing:s6tinuation:e;d;s:ing;tiess9e:d:s9ing7ly7s 8hip;s6te8d8s7ing8on:al:s8ve7or9s5ic7ally7ness7s5osity6us8ly8ness4s 5ee6s5is4t5ic7al9ly7ist:s7s5s4va5ieve3ial6ity6ly4culate:d4e5s4tal7ia 7ly7s5ive5ourinary4us6es3oa4cidal7e4me6s4type8s7ic9al;ly3re5s3t4eel 7ism7ly7ness4ian5le7s6ities8y5sic4le6d6folk6man9liness:y7en6ness6r 6s7t6woman9en5ing5y4rification7y5y4s3uflect9ed9ing:ons9ed9ing9or;s9s4ication;s6it8ly5ed6s4y5ing 3ort6ance8t9ly6ed6ing6s4se6d6s5ing5sible4tence3ractical4ess7ed8s7ing 8on:s8ve4oper8ly5ve7d7ment;s7s6ing3ulse7s6ive9ly1n2ability3ccuracies 9y8te:ly4tivate:d:s9ing7e3dequate:ly4vertent;ly3ppropriate=ly2cessant 9ly3h4es3idence9s7t8ally8s4sion8s3lined4ude7d7s6ing5sion7ve9ly3ome 6s5ing5patibilities>y:le6lete:ly4nclusive5sequential6istent5tinence :t;ly5venience=ss;t4ordination4rporate;d;s:ing;on5rect9ly3rease8d8s 7ing:ly5ment9al;ly9ed9ing9s3ur5red5s2decision8ve4ed4finite:ly4nt6ation ;s6ed6ing6s4pendence:t;ly4x5ed5ing3ia5n6a7polis6s4cate8d8s7ing8on:s 7or9s5es4es4gnantly4rect8ly4stinguishable4vidual:izations 9e:d:s9ing7ly7s6te8d8s7ing8on:s8ve:s2ject6ed6ing7on9s6s3ure6d6s5ies 6ng5y2k3ed3s2let5s2n3er5most3s4bruck3uendo8s2operative3rganic2patient 9s3ut5s2quire7d7s6ing5sitive2sane6ly3ect6s5ure7ities9y4nsible4rt6ed 6ing7on9s6s4t3ide6s4ght7ful7s5nificant4stant6ing3oluble4mnia8c9s3pect 7ed7ing8on:s7s4irate8ion8ory6e7d7s6ing3tall7ations9ed:r;s9ing9s5related :ionship6upt9ed9ing:onlys;y3plach2ill3shna2ona4e 5r4or2ugerrand:s2ypton1u2dos3u3zu2lak3tur2mquat7s2ng2rd4ish6tan4s3gan 3sk3t3u2sh2wait6i1vass1wacha3jalein3nza3shiorkor1yat2le2mograph2oto 2rie0la2b3anon7ese3el5ed5led6ing5s3or5atories9y5ious5s3rador3s2ck4ed 4ing4s3tate4ic2dder6s3en3ies3y2fayette2g3os2hore2id2ke4s2mb4da4s3e 3ont3p4s2na3cashire6ter4e3d4ed4ing7s4s3e4s3guage8s3ka3sing2os2pland 2ramie3edo3ge5ly5r5st3ry3s3yngeal6oscopy5x2s3er5s3t4ed4ing4ly4s2tch 5es3e4ly4ncy4r5al4st3he3in5s3ter4ice7s3via2uderdale3gh5ed5ing5s5ter 3nch6ed7s6ing4der7ed7s5ries6y3ra4el5n3sanne2vatories7y2w3n3rence3s 3yer6s2y3er5s3out6s2zy1dh1ead4er6s4ing4s3f3gue6s3kage4ed4s3n4ed4s3rn 5ed5ing5s3se4t3ther3ve5nworth5s4ing2cture7d7r7s2d3ge5s2e3ward2ft4most 2g3al3end6s3islation9ve;s3s2iden3gh3la2na3d4s3gth6s6y3ient4ngrad3ore 3t2o3n4ard4e3pold2promatous5sy2roy2sion6s3lie3otho3s4en6ed5r4on6s3t 4er2t3's3hargic7y3s3ter6s4ing4uce2vel5s4r5s2w3is5ton2xington2yden1hasa 2otse1iabilities8y3ison2beria3rarian7es6y3ya5n2cense7d7s6ing6ure2docaine 2e3chtenstein=er3ge3s2fe4saving5tyle9s3t4ed4ing4s2ght5ed6r7s5ing5ly 5ning5s2ke4d4lihood:s5y4ned4s4wise2la3lian2ma3b4s3erick3it5ation:s 5ed5ing5less5s3oges2ncoln3da4en4say3e4ar6ity6ly4d4n5s4s3ger6s4uistic :s3iment8s3k4age7s4ed4ing4s2on4el4s2p3s4tick2quid6ation;s6s2sa3bon 3t4ed5n6ed7r8s6ing4ing7s4s2t3er5al7ly7s6ry6ture5s3huania3igation3tered 4le2ve4d4ly4r5pool4s3ing1lewellyn2oyd1oa3d4able4ed5r4ing4s3n4ed4s2bar 3e4s3ster7s2cal5e6s5ized5ly5s4te6d5ing6on8s3k4ed4ing4s2dging7s3i2fty 2g3arithm9ic;ally9s3book3ic5al7ly4stic3s2ire3s2la3ita2mas3bardy3ond 2ndon6derry3e4ly3g4er5st4itudinal2ok4ed4ing4s3p4ed4s3se5ly4ing2renzo 4tta3raine2s3e3ing3s4es3t2t3s3ty2ud4ly4speaker;s3is5e5iana5ville3rdes 2ve4d4ly4s2w3ell4r5ed5ing4st3ly3s1td1ubbock2cas3erne3ian4lle4nda4us 3k4y3y2ella2fkin2is2ke2mber3p4ed4s2nch5es3g4es4s2re4s2sitania2ther 2xembourg:er6urg9er3urious9ly1ydell3ia2ing2le2mphocytes2nchburg3don 3n2ons0ma2artin2bel2cadamia4o4roni3edonia3hine7ry7s4u3kinac3on3roscopic 2d3agascar4m5s3e4ira4line3ge3ison3ras4e4id2gazine8s3ellan3gie3ic5ly 3nesium5t6ic7zed6s4ification5tude9s2il4ed4ing7s3n4e4ly4tain8ed8ing 8s5enance4z2jor5ca5ity2kalu3e4rs4s4up3ing2lacca4ga6sy4wi4y5a5sia3colm 3distribution5ve3e4s3function;ed;ing;s3i4gnancy3practice3ta2ma4's4s 3mals4oth2n3's3age6able6d6ment6r7s3cha5ester5uria9n:s3datory4y3euver 8s3ganese3hattan3ifestation=s8ed5old8s4la4pulate:d:s9ing:ons8gramss9e:d:s9ing7ly7ness7s 5e6d6s2ugatuck4ht6ier8st7ly7ness6s6y3sea6te8d8s7ing:ly5ous8ly8ness 3tical8ly5li6us8es2vajo6s4l4rre3e4l5s4s3ies4gabilities;y7le8y6te8d 8s7ing8on:als9e:d:r;s:s9ing 7ly7ness7s5ino8s5on7s6phil:s2vada3er5more5theless3ille3us2w3ark3born 7s4urg3comer8s3el5s4r4st3fangled:ness4ound8land3ish3ly5wed8s3ness3port 3s4agent4boy7s5reak4cast8er:s8ing8s4dealer4ier6st5ness4less6tter:s 4magazines5tting4inding5odegradable5ting4lack 4ook4reakable4usiness3cancelable8rous6didacy:te5rcinogenic6diac6eer 5sh4e5llular5ntral4halance9t:ly6racter5emical4itizen4lassical4oercive 5gnitive5llapsible7ectible8ge9iate5m6bat9ants6mercial=ly 7issioned8ttalory6tinctive5viding4rinker:s8ing5ying4urable3e 4conomic4ducational4ffective4lastic5ected8ive8ric4mergency5pirical 4nforceabilitysly 4ked5id4lip4moker9s4ocial4peaking6cialist=s8fic;ally7ulative5orting 4tandard6rter5eroid:al5ick5op5udent4ubscriber=s;ing5ch5it5pport:er :ing4wimmer4yllabic5mpathizer5stem3target5xable4eaching5chnicals9ward=s4on3walk5y4egian9s4ich4ood2se4band5leed 9s4clip8s4d4gay4piece9s4s4y3h4er6s3ier5st4ly4ness5g3talgia8c9ally4ril 7s5um7s3y2t3ability5le7ness6y4rial6es6zations;s9ve;ly;ness8or:s8s2tain6ability8le6ed7r8s6ing6ment6s3ect6ed3rude 7d7s6ing5sion9s7ve9ly9ness3und4rate7ion7or4se6ly6ness6r6st2verse7ly 3iate7d7s6ing7on9s6or8s4ous7ly7ness1cala2casion8al:ly8ed8s3ident8al :ly4pital3lude7d7s6ing5sion9s7ve3ult6ation6ism8t9s4pancies8y7t8s6tion :alal@ly=st?ss=ic2iate6s3ne5d5r6s5s4g4ing5on7ated;ly ;ness9ively ly;st=s:y2ogenic6y 3tund7ity2phan6age9s6ed6ing6s4eus4ic6ally2son2thodontia:c;s:stly:y5pedic:ally:s9st;s5tic8s 2ville2well6ian2yx4es1sage3ka2car5s3illate9d9s8ing9on;s8or:s:y6oscope st@s=y4ith3sclerosis2tawa3er5s3o4man7s3umwa1ubliette 9s2ch4es2ght2ija2nce5s2r3s4elf6ves2st4ed5r6s4ing4s2t3achieve:d:s9ing 5t4ge6s3back5lance:d:s9ing5rgain:ed:ing:s4id6ding6s4luff8ed8ing8s4oard 8s5und5x4rag6ve5eak8s6d6ed8ing8s4uilding;s5lk5rst8s3cast7s5tch5ught 4harge9d9s4lass8ed9s8ing5imb4oach8ed9s8ing5me7s6pete5unt4ries5op7ped 8ing7s6ss5y3dance8d8s7ing5ted4ebate5liver5sign9ed9ing9s4id5stance;d ;s:ing4o5es5ing5ne5or7s8man;ship9en8y4raw5ess8ed9s8ing5ink6ve8s4uel 3earn5t4r5most5wear3face7d6ing5ll4ield8er:s8s5ght8ing6ure5sh5t6s6ted 8r9s7ing4lank8ed8ing8s5ow7s5y4ought5x6ed7s6ing3gain5s4eneral:ed:ing :s4o5es5ing4rew5oss6w7ing7n7s7th9s4uess8ed9s8ing5n3haul4it4ouse8s4unt 5stle9d9s8ing3ing6s3jump7ed7ing7s3kick7ed7s3laid5nd7er9s7ish:ly:ness 7s5st7ed7ing7s5w6ed6ing6ry6s5y6ing6s4et6s4ier5ne7d7s6ing5ve7d7s6ing 4ook7s4ying3man6euver6ipulate=d=s5rch5tch4ode7d6ing5st4uscle3number 9ed9ing9s3organize3pace5ss5tient:s4erform:ed:ing:s4itch4lay7ed7ing 7s4oint5ll7ed7ing7s5rt5st7s5ur7ed7ing7s4ray5ice5oduce:d:s9ing6mise :d4ull5nch8ed9s8ing5t6s6ted7ing3race5ge7d7ous:ly:ness7s6ing5n6k5te 4e5ach8ed9s8ing4idden6e7r8s7s6ing5gger9s6ht8ly5val4oar5de5w4un6ning 6s5sh3s4ail7ed7ing7s4cheme9d9s8ing5ore4ell7ing7s5t4hine8d8s7ing5one 6ot8ing6t6ut4ide7r8ness8s7s5ght5ng5t5ze7d7s4kate8d8s5irt8s4mart8ed 8ing8s4oar5ld6e4parkle:d:s9ing5eak6nd7t5oken9ly9ness5read9ing9s6int 4tand8ing;ly6re6tion6y5ood5retch:ed6ip8ped9ing8s4wim3take5lk4hink8ing 8s5row4rade4urn3vote3wait5lk5rd7ly7ness7s5tch4ear7ing7s5igh8ed8ing 8s4it6s6ted7ing4ork7ed7ing7s6n4restle5ite3yell4ield2zel3o1va3l4ly4ness 4s3rial6n5es4y3te4ion7s2en4proof4s3r4abound6undance=s;t5ccentuate6hiever d5harge:d:s9ing5ivilized5laim7ssification;y6oud9ed9ing9s5oach7t 8s6me8r8s7ing7mercialization@e@ed@es8it:ment7pensate>d>s=ing>on@s=ory 8lex9icate>d>s=ing6ncentrate7fidences6ote8ional6phasis;ze=d=ss5valuation5xaggerate>d>s =ing>on6cite6erciseally5rchestrate6ganize4paid6ss8es6y7ing7ment7s5ersuade5lan8t7y 8ed8ing8s6us5opulated>s8ulatey4s 4ways3ient7's7ly7s8'3ricia6k4ol6s3tern7s4y3uxent2ul4a4ette4ine4o3se 5d5s4ing2ve4d4s3ing2wtucket2y3ers3ing3ment7s3s1ea3ce5fully4h5es3k4ed 4ing4s3nut6s3r4l4s3s2cos3toral3uliar8ity2dernales3ro2ekskill3l4ed4s 3nemunde3r4s2g3gy3s2king2n3alized8s5ties6y3ce4il6s3ding3elope4tration 3nies4sylvania4y3obscot3s4acola3tobarbital5xide3zance2ople6s3ria2pper 6s2r3ceive8d8s5nt7age:s5ptable7ion:s7ual:ly4h4utaneousic>y3ura6l2ot4able4s4ted6r7s5ing2uck5s3g4ged5ing4s 3ral3s4h2ymouth1neumatic5onia6tachograph7horax1ocatello3ket6s3ono6s 2d3s2em4s3t4ry4s2int5e6d6r7s5ing5s3soning6ous2land4r5ity3e4s3ice6man 7en6woman9en5ies5y4o5myelitis4sh6ed7s6ing4tical9ly3len4y3ycythemia 4ethylene4gon7al7s4nesia4somnographic>y4thene2merania3pano4eii2nca 3d4s3tchartrain4iac3y2ol4ed4ing4s3r4er4ly2p3corn3s3ular6tion:s2rch 5es3e4s3k3t4able4er4ion7s4land4rayed4s5mouth4ugal6uese2se4d4s3ing4tion 8al:ly8ed8ing8s6ve8ly3sess7es7ing8on:s4ibilities:y6le7y3t4bronchodilator 4doctoral4graduate4humous:ly4mortem4poned4s4treatment4ulated8ing2t 3assium4to6es3ent6ial9ly7ometer=s3omac4si3sdam2ultry3nd5s3r4ed4ing 4s2wder6ed6ing3er5ed5ful5s1pm1racticable8l9ly7e8s3irie7s2eamble5plifier 3bronchodilator3calculated5ution4ede7d7nce8t7s6ing4ious5se7ly6ion4lude 8s3defined5termined4ict7able7ed7ing8on:s8ve7or7s5spose:d4ominant;ly 3existing3face4er6able9y6ence8tial6ing6red6s4ix3gnancies8y3liminaries :y3mature9ly4ise7s3paration;s6e7d7s6ing4onderance4rocessed:ing:or3scott 5ribe9d9s7ptions8ed9s7y8ing6tatively6t7s 7te5illion;s5s5uple9d9s9t:s8ing3p4ped5ing4s5ter8s4u3re5s4k5ier7st6ly 6ness5s5y4t3sling3t4claim4e4rent4s4tance9s5ed6r7s5ing3ver6ed6ing9ly 6s3xote6ic8al:ly3z4master4zed6r7s6s5ical9ly9ness6ng2m2o3in4t5s3ndam 4set3rum6s3ta5bilities:y6le8ness5s5tion9s4e5d5r6s5s4h4idian5ent8s5ng 0rabat3bit6s2ce4d4mic4s3hel3ial4ne5g3k4ed4ing4s2dial5n6s5te7d7s6ing 7on4o5graph:s5isotopes9ed9ing9s 4nsider:ing:s6tituted7ructed;ing4rd6ed7r8s6ing9s6s4unted5rse4ver7able 7ed7ing7s7y3reate8s7ional4uit7ed7s3tal5ngular4ification7ed8r3urrent 5sive9ly2d3ding3efinable7e7ing4sign3irect8ed8ing4stributess9ed9ing9s4int7s4ocess9ed:s5duce9d9s8ibility:le;y9ng3tile 7s3utation:s2quest7ed7ing7s4ire7d7ment;s7s6ing2record8ed2schedule:d :s4ue6d6s3earch8er:s9s8ing5t6ing4mbled4rvation;s6e7d7s6oir9s4t5s5ting 3huffle9d9s3ide6d6nce9s8y7t8s6s5ual6e4gn6ation;s6ed6s4st6ance8t6or 8s6s3olution:s5ve7d7s6ing4nant6tors4rt6ing4urce8s3pecify6t7ed7ive:ly 7s4iration;s8or:s:y4ond7ed7ing7s6se8s7ibilities=y9le3t4art7ed7s4ed 4ful4ing4less4ore7d7s6ing4rained8t5ict8ed8ing9on;s9ve8s4s4udied3ubmitt 9ed4lt6ant6ed6ing6s4me6d6s5ing5ption4rrect9ed2tain6ed6s3ention3inal 4re6d6s3rievable8l7e8d8s4ograde5spectively4y3urn6ed6ing6s3ype6d5ing 2uben3se5d4ing2veal6ed6ing6s4nue7s4rberation5sal8s6e7d7s6ible7ng7on 5t6ed6s3iew6ed7r8's8s6ing6s4se6d6s5ing6on8s3olutionariess8ed9s7y5y3ulate8d8s7ing8on:s5taneous s9ed:r9ing9s5ient9ly9s6stor:s6t7ion:s7s5kei5late 9d9s8ion;s5missionism>sve=or ?s4dilatation9es9ion9or;s4line4motor4pressin9or;s4spasm8tic4tocin4vagal 3sal6age6s3t4itude4ly4ness4y2t3ic5an5inal8te:d9ing:on9or3s3ted4ing 2udeville:s9ian3ghn3lt5ed6r7s5ing5s5y3nt5ed6r7s5ful5ing8ly5s5y2vasor 6ur2ward2x1cr1d1eal4er4y2ctor6cardiogram6ed6ial7ng6s2da4lia4nta7s4s 3ette2e3p4s3r4ed4ies5ngly4s4y2ga4n5ism4s3etable9s8y6l6rian:ism:s6te 8d8s7ing8on:als=inous5m6o5t6ic 4table9ness8y5e5ies5y3juice3meil4icelli6ide6ular9te;d:ion8ite5form 6uge5lion9s6lion:s5n6ous9ly4ont7er9s5uth8s3na5cle6ular:ism:ly:s5l6ization 8e9d9s8ing6ly5tion4e4icle5er7s5ssage4on3o4na5ica8s3ruca7e6ose3sa5illes 5l5nt5tile9ly9ness8ities:y4e5d5s5t4icle8s6ular5fication=s7ed8r9s8s 6y7ing5ng5on7al7s4o5s4t5s4us3t4ebra8e8l8s8te:s5x6es4ical8ity8ly8ness 8s6es6il8lium5ginous;ly6o7es7s4u3vain4e3y2sical6nt8s6te8d8s7ing8on 5le7s5ular9ity9ly8te:d:s9ing:on3per6al6s6tilian8ne4id5ne3sel6s3t4a 5l6ly6s4ed5e6s4iary5bular8e9d9s5ge7s6ial9ly5ng4like4ment8al8s4ries 5y6man7en4s4ure7d7s6ing3uvian8ite6us2t3ch5es5ling3eran7s5inarians;s8or8s3o2xen5ish8ly8ness5s2zard6s3cacha3ier6ate6ial 6s7hip3or3sla1ladimir2si1ocable5ular9ies9y4l5ic7ally6sm7t8s6ty6zation s6t7s5ier7st6ng8s5letree5oorwill<\8\0 \\& \\ \\\ \\ݏPݏݏA-0ݏ!ݏ*r.T˜M˜ݏPݏݏ,@ ~ݏ*". RЏ|~|~|~|~ 3&|~TS\ \\  \\ݏPݏݏi,'ݏ!ݢ`ϝ-TS \\\ \\ݏPݏݏ, Nݏ!ݢ`C-|~|~|~|~ )RЏ˜ߢLPݢh<~NL˜ݏPݏݏϓ+0u~ݏ:,QQQPP\>@\lP\>@\lQQP˜K˜ݏPݏݏ*@~ݏ:+,SЏ T |~|~|~ 8$ TTχ! ϘRѢTݏPݏȅݏ p* \\ݏPݏЅݏ L*<\ݏPݏ؅ݏ /*\\ݏPݏݏ  *\\ݏPݏݏ )\\ݏPݏݏ )\\ݏPݏݏ Ϩ)' , *ݏ!ݏB*TTY ,\ aRѢTݏPݏȅݏ 9) \\ݏPݏЅݏ )<\\ ݏPݏ؅ݏ ( N ,i)ݏ!ݏB* |~|~|~ %|ʾTЏ Vċ  " ϟVVV gSѣVݏPݏȅݏ ?( RRݏPݏЅݏ (<RݏPݏ؅ݏ '',v(ݏ!ݤ`%)RRRݏPݏݏ ϩ' Nݏ!ݤ`(R<|VV |jSѣVݏPݏȅݏB' RRݏPݏЅݏ'<RݏPݏ؅ݏ'0u(y'ݏ!ݤ`((RxUVݤ <~V`U0P\L\U0P\L\UG0QPP@+P@\\\@@\@\\@P x.SѣVݏPݏȅݏ0& RRݏPݏЅݏ0%<RݏPݏ؅ݏ0%@ =&ݏ!ݤ`&Vݤ<~V xπSѣVݏPݏȅݏ8X% RRݏPݏЅݏ84%<RݏPݏ؅ݏ8%P$Ϗ%ݏ!ݤ`>&`UG4SRB\0ݏPݏݤdϴ$B~A&ݏ!ݤ`%RpUP4SRB\\2ݏPݏݤdU$B~~%ݏ!ݤ`ύ%R8U]R4P0\BB?ݏPݏݤd#0\BS4\B~Sr%ݏ!ݤ`%RUVVϦ ϯSѣVݏPݏȅݏ(χ# RRݏPݏЅݏ(c#_ݏ!ݤ`ϗ$  d  F\Џ  |~ ϋ̬̅̋P̨SPS'PRR̠  ̠Dϻ$SR |~  ɸ\Џ  |~ ̬̅̋P̨SPS'PRR̠ τ ̠>$SR |~ j L\Џ  |~ ϑ̬̅̋P̨SPS'PRR̠  ̠>#SR |~  Ϸ\Џ|~ ̬̅̋P̨SPS'PRR̠ϊ ̠ϻD#SR|~ p R\Џ|~ ϗ̬̅̋P̨SPS'PRR̠ ̠8"SR|~  ն\Џ|~ ̬̅̋P̨SPS'PRR̠ϐ ̠ϵJ"SR|~ v X\Џ|~ ϝ̬̅̋P̨SPS'PRR̠ ̠2!SR|~  ۵\Џ|~ ̬̅̋P̨SPS'PRR̠ϖ ̠ϯP!SR|~ | ^\Џ|~ ϣ̬̅̋P̨SPS'PRR̠ ̠, SR|~  \Џ|~ &̬̅̋P̨SPS'PRR̠Ϝ̠ϩV SR|~ ς d\Џ|~ ϩ̬̅̋P̨SPS'PRR̠̠&SR|~  \Џ|~ ,̋Ͽ̬P̨SPSPRR̠̠ϛTSR̅;Pp|~ R^1\̇߭ݏÁ=^ R߭=ݏˁ=߭=ݏӁz=߭x=ݢTݏہ`=ݏ8ݏhݏXq¤#=|~|~|~ rTݢTϽ 5SѣTݏPݏȅݏH  \\ݏPݏЅݏH<\ݏPݏ؅ݏHDݏ!ݢ`<<\\€߭^<€ݏぞA<߭?<ݏӁ$<߭"<ݢTݏ끞 <ݏ8ݏhݏX¤;߭;ݏ;€;€€TݢT<<\x\\x\\\<<<\€\\< ϦSѣTݏPݏȅݏ@~ \\ݏPݏЅݏ@Z<\ݏPݏ؅ݏ@=ϵݏ!ݢ`d߭:ݢTݏ:ݏ8ݏhݏX¤:TݢT: ϲSѣTݏPݏȅݏHϊ \\ݏPݏЅݏHf<\ݏPݏ؅ݏHIݏ!ݢ`p<<\\€߭9€ݏぞ9|~|~|~  \ |~ J̬̅̋P̨SPS,PR̊R̠ ϻ ̠uSRה̊ |~ ϝ \Џ|~ ̬̅̋P̨SPS'PRR̠:̠5SR|~  \Џ|~ G̬̅̋P̨SPS'PRR̠Ͻ̠ϲwSR|~ ϣ \Џ|~ ̬̅̋P̨SPS'PRR̠@̠/SR|~ & ^R޼Sŏt'SnnS-6?HQZclu~Џ2`Џ:`ЏB`ЏJ`ЏR`ЏZ`Џb`Џj`Џr`Џz`Џ`Џ`Џ`Џ`Џ`Џ`Џ`Џ`Џ‚`Џʂ`Џ҂`Џڂ`^R޼n޼T޼ ݮP¨P,6¨ݏPݏݏ}'ݏ!ݢ`ϱ2QyP,,ݏ8ݏ`ݏ P¬P5¬ݏPݏpݏNݏ!ݢ` PPݏPݏݏϦ PPݏPݏݏσPPݏPݏݏ`PPݏPݏݏ>PPݏPݏݏ PPݏPݏݏ PPݏPݏ؄ݏ PPݏPݏݏϴPPݏPݏ脞ݏϒPPݏPݏݏpϽuݏ!ݢ`ϙTPPTPP @P¨P3¨ݏPݏpݏݏ!ݏ$S¬S'3¬ݏPݏpݏtݏ!ݢ`ϴ$0P PPPPp1xpݏPݏ(ݏ(ݏ!ݢ`+PݏPݏ0ݏϵPPݏPݏPݏϒPPݏPݏ8ݏpPPTݏPݏ@ݏMPPTݏPݏHݏ* PPݏPݏݏ PPݏPݏЄݏ PPݏPݏݏPPݏPݏ脞ݏϡPPݏPݏݏ8ݏ!ݢ`ϨLPPPPP¨P0¨ݏPݏpݏH9ݏ!ݢ`6X`$S¬SH0¬ݏPݏpݏϕݏ!ݢ`$-P PPPPp1xpݏPݏ(ݏhݏ!ݢ`LPPݏPݏXݏPݏPݏ`ݏϴ PPݏPݏݏϑ PPݏPݏЄݏo PPݏPݏ؄ݏMPPݏPݏݏ+PPݏPݏݏ Vxݏ!ݢ`2PPP¨PE.¨ݏPݏpݏϖ ݏ!ݢ`$S¬S-¬ݏPݏpݏ) ݏ!ݢ`i$ύ+PPPPPp1xpݏPݏ(ݏϬ #ݏ!ݢ` PP ݏPݏhݏg PPݏPݏpݏD PPݏPݏȄݏ! PPݏPݏЄݏ PPݏPݏ؄ݏ PPݏPݏݏϻ PPݏPݏݏϙ  Jݏ!ݢ` nP¨P+¨ݏPݏpݏ qݏ!ݢ`Q ^R޼T޼nnP¬P`+¬ݏPݏݢdϰ (ݏ!ݢ` O$S¬S*¬ݏPݏpݢdF ݏ!ݢ`φ $Ϫ(PTQPP  PPPPŏdTPP1jŏdTPPݏ8ݏݢdϷ vPP  ݏ!ݢ`  ^W޼nЬR(bЏd(VnԦ (ff@Ǽ<Ǹ\^.R޼nЏ d,PnԠ  ``<H¼D¸ ^՞R޼޼޼ nЏ8d$PЮԠ Юn``8¼4¸ϛ ^mR޼޼޼ nЏ0d PЮԠ Юn``(¼$¸3 ^R޼޼޼ nЏ@dPЮԠ  ЮnԠ $$`` ¼¸ ^R޼޼޼ nЏHdPЮԠ  ЮnԠ $$``¼¸T^&R޼nЏ(d PnԠ  ``0¼,¸ ֜STRü\\ @TRø\\@ $^R޼n޼޼ ޼ ޼޼޼޼ ޼$ ݮ L˜ߢLT~&˜TP`  nH˜ߢH,ݢhV&˜˜ߢDݢh@~1&˜ѮH˜ߢ@(ݢh&˜˜ߢ<ݢh@~%˜ѮH˜ߢ8$ݢh %˜˜ߢ4ݢh@~%˜Ѯ %˜bLݢh<~j%˜ѮM˜ߢ0 ݢhA%˜˜ߢ,ݢh@~%˜„Ѯk˜ߢ( ݢh $˜˜ߢ$ݢh@~$˜˜ߢ8ݢh$˜ѮL˜ߢ 0ݢh<~z$˜˜ߢ4ݢh<~T$˜Ѯ1˜ߢ ݢh(($˜˜ߢݢh@~$˜˜ߢݢh(#˜˜ߢݢh@~#˜˜ߢ<ݢh#.ݏPݏݢd)~ݢ`$^R޼ ޼޼ ޼޼޼ ޼n޼ ޼$ݮϛ„T˜ #˜Ѯ 6,˜"˜˜"˜Ѯ6(˜"˜˜"˜Ѯ6$˜s"˜˜X"˜ѮL˜7"˜Ѯ6 ˜"˜˜!˜Ѯ Q ˜!˜˜!˜8˜!˜n64˜!˜0˜i!˜Ѯ1˜E!˜˜*!˜˜!˜˜ ˜<˜ ˜-ݏPݏݢdh)~ݢ`W^R޼޼޼ n߭ݮ ߭ݮ  ߭ݮ  ^•R\¬\ ߭S ߭ݏ7 <^U޼T޼SŐ ߭ݏ( R߭Bݏ@߭ݏ0RŐ߭ݏ0R߭Bݏ@߭ݏ0RŐŐ^ĔR޼޼޼ n߭ݮݮAn ”! ^޼޼n߭ݮݏ߭ݮݏ߭ ޼SR S~PPRRP ^%VЬR(b޼U޼ WU Џ)ƌU Џ1ƌƅ-U߭ݏU߭ݏlTTρW ϒSѣTݏPݏȅݏ j RRݏPݏЅݏ F<RݏPݏ؅ݏ ))#,ϡݏ!ݦ`JRRRݏPݏݏ Pݏ!ݦ`R<|TTW|ϐSѣTݏPݏȅݏh RRݏPݏЅݏD<RݏPݏ؅ݏ'w(ϟݏ!ݦ`NRxTݦTόU8ω 8RƔWxSѣTݏPݏȅݏ0ϝ RRݏPݏЅݏ0y<RݏPݏ؅ݏ0\ ݏ!ݦ`σ TTW SѣTݏPݏȅݏ  RRݏPݏЅݏ <RݏPݏ؅ݏ Ϭ#,0ݏ!ݦ`RRRݏPݏ腞ݏ \ݏ!ݦ`ϐ,Tf<~TcW Wx W<~SѣTݏPݏȅݏ8 RRݏPݏЅݏ8Ϻ<RݏPݏ؅ݏ8ϝ$!ݏ!ݦ`ƥ<;LScRR1cRR1U1Ƨ1<RRRƧƬƨƥLR<RR)Ɖ"߭ݏݦ`ƐLR<RR)Ɖ"߭ݏ₞ݦ`ƐLbU1Ʀ1LR<RRRƦƬƨƥLR<RR)Ɖ"߭ݏݦ`ƐLR<RR)Ɖ"߭ݏꂞݦ`Ɛ\ƧRƦKƦƬƨƉ-߭ݏݦ`}Ɛ~ƔWƉ1sLScRRcRRcRR cRRU@ƥvƤƥƌݦ`ϑLRR3lݏPݏ ݏ ݏ!ݦ`SLScRR cRRcRR cRR1LScRRcRR cRR1TTϔW ϝSѣTݏPݏȅݏ(u RRݏPݏЅݏ(Q| ݏ!ݦ`x>T޼W1HSLR<¤U<RRUUHSLR<¦U<RRUUHSLR<¨U<RRUULR”HHSc;wǏcU<RRUUHSyRR{RRRRRRHHSLRœHSѣ?vǏU<RRUUHRТVyUU{UUUUUUHSLR<ªU<RRUUHSLR< U< RRUU HSLR<¢U<RRUUH@HS@RHS@RHS@RУHS@R HS@RHS@RHS@RHS@RHS@RW1DSLR<¤U<RRUUDSLR<¦U<RRUUDSLR<¨U<RRUULR”DDSc;uǏcU<RRUUDSyRR{RRRRRRDDSLRœDSѣ?tǏU<RRUUDRТVyUU{UUUUUUDSLR<ªU<RRUUDSLR< U< RRUU DSLR<¢U<RRUUD@DS@RDS@RDS@RУDS@R DS@RDS@RDS@RDS@RDS@R iRœ˜\”SS\œœœœ˜\S\˜˜˜\\˜œ˜\\SS””\\”^SË1]äLRRÐ߭ݏ@iLRRÐZ߭ݏ8@LRR߭2߭ݏHL\lRRlRRlRRä!LR<\ď'\<RR\\ä/ä1vwtu Ê1aä$Ê߭߭ݏPut߭o߭ݏXU߭SLR<R߭Rݏh0߭L\ݬݏp߭L\ݬݏx߭äs߭L\ݬ ݏLR<R߭RݏLR<R߭RݏLR<R߭Rݏ߭ä6LR<R߭Rݏ^LR<R߭Rݏ?LR<R߭Rݏ(LR<R߭ݏ߭ݏǏdRRB߭LR<¬R߭RݏȆLR<®R߭RݏІ߭LR<(R߭Rݏ؆LR<*R߭RݏfLR<,R߭RݏGLR<’R@߭9߭ݏ膞߭ݏ ߭ݏLR<’RR  TRTT1RL\LR< R߭Rݏ&߭ݏ0LR< R߭Rݏ(߭ݏ0LR<R߭Rݏ(߭ݏ0LR<R߭Rݏ(LR<R߭Rݏ߭ݏ0nLR<R߭Rݏ(R߭ݏ0@LR<R߭Rݏ($߭ݏ0LR<R߭Rݏ(LR<R߭RݏȇLR<R߭RݏЇLR<R߭Rݏ؇LR< R߭RݏLR<"R߭Rݏ臞jLR<$R߭RݏJLR<&R߭Rݏ2LR<(R߭Rݏ߭L\*ݏ߭L\.ݏLR<¼RR1d߭LR<2R߭RݏpLR<4R߭RݏxLR<6R߭RݏpLR<8R߭RݏXLR<:R߭Rݏ8LR<<R߭Rݏ LR<>R߭RݏLR<@R߭RݏLRl (08P@HP XT`hpxF*b ȂNЂ|؂肱 :f* Z(08@>HnPX`2hpxfVBxȃЃ.؃Z胱<j  (T 0 8 @ H PL!X!`!h"p\"x""#T###$P$$$Ȅ%ЄX%؄%%脱(&P&&&,'j'' '(6(0(. DET_TITLE001Functional Test 1 Begin. DET_TITLE002Functional Test 1 End.. DET_TITLE003Functional Test 2 Begin. DET_TITLE004Functional Test 2 End.. DET_TITLE005Functional Test 3 Begin. DET_TITLE006Functional Test 3 End.. DET_TITLE007Functional Test 4 Begin. DET_TITLE008Functional Test 4 End.. DET_TITLE009Functional Test 5 Begin. DET_TITLE010Functional Test 5 End.. DET_TITLE011Functional Test 6 Begin. DET_TITLE012Functional Test 6 End.. DET_TITLE013Functional Test 7 Begin. DET_TITLE014Functional Test 7 End.. DET_TITLE015Functional Test 8 Begin. DET_TITLE016Functional Test 8 End.. DET_TITLE017Functional Test 9 Begin. DET_TITLE018Functional Test 9 End.0 DET_TITLE019Functional Test 10 Begin. DET_TITLE020Functional Test 10 End.0 DET_TITLE021Functional Test 11 Begin. DET_TITLE022Functional Test 11 End.0 DET_TITLE023Functional Test 12 Begin. DET_TITLE024Functional Test 12 End.0 DET_TITLE025Functional Test 13 Begin. DET_TITLE026Functional Test 13 End.0 DET_TITLE027Functional Test 14 Begin. DET_TITLE028Functional Test 14 End.0 DET_TITLE029Functional Test 15 Begin. DET_TITLE030Functional Test 15 End.0 DET_TITLE031Functional Test 16 Begin. DET_TITLE032Functional Test 16 End.0 DET_TITLE033Functional Test 17 Begin. DET_TITLE034Functional Test 17 End.0 DET_TITLE035Functional Test 18 Begin. DET_TITLE036Functional Test 18 End.0 DET_TITLE037Functional Test 19 Begin. DET_TITLE038Functional Test 19 End.0 DET_TITLE039Functional Test 20 Begin. DET_TITLE040Functional Test 20 End.0 DET_TITLE041Functional Test 21 Begin. DET_TITLE042Functional Test 21 End.0 DET_TITLE043Functional Test 22 Begin. DET_TITLE044Functional Test 22 End.0 DET_TITLE045Functional Test 23 Begin. DET_TITLE046Functional Test 23 End.0 DET_TITLE047Functional Test 24 Begin. DET_TITLE048Functional Test 24 End.0 DET_TITLE049Functional Test 25 Begin. DET_TITLE050Functional Test 25 End.0 DET_TITLE051Functional Test 26 Begin. DET_TITLE052Functional Test 26 End.0 DET_TITLE053Functional Test 27 Begin. DET_TITLE054Functional Test 27 End.0 DET_TITLE055Functional Test 28 Begin. DET_TITLE056Functional Test 28 End.0 DET_TITLE057Functional Test 29 Begin. DET_TITLE058Functional Test 29 End.0 DET_TITLE059Functional Test 30 Begin. DET_TITLE060Functional Test 30 End.0 DET_TITLE061Functional Test 31 Begin. DET_TITLE062Functional Test 31 End.0 DET_TITLE063Functional Test 32 Begin. DET_TITLE064Functional Test 32 End.0 DET_TITLE065Functional Test 33 Begin. DET_TITLE066Functional Test 33 End.4 DET_TITLE067Exerciser Begin, verify mode.2 DET_TITLE068Exerciser End, verify mode.@ DET_TITLE069(Exerciser channel A Begin, service mode.> DET_TITLE070&Exerciser channel A End, service mode.@ DET_TITLE071(Exerciser channel B Begin, service mode.> DET_TITLE072&Exerciser channel B End, service mode.> GEN_SETUP_001&To check the M7501 module in this modeH GEN_SETUP_0020insure that the appropriate loop back connectors6 GEN_SETUP_003are in place on the I/O panel& GEN_SETUP_004 RS232 - H325 V GEN_SETUP_005=If test connectors are not installed the diagnostic will fail@ GEN_SETUP_010(Then in any case type RETURN when ready.BDES_CTRL/Programmable communications interface for Q-bus, DES_FRU_1M7501 Controller Module8 DES_FRU_2#I/O cable assembly - Test connector>TST_FV_1+ Checks accessibility of KMV CSR addresses 8TST_FV_2$ Clears and checks KMV CSR rgisters 6TST_FV_3# Data integrity test , CSR 2 to 16 0TST_FV_4 Data integrity test , CSR 0 *TST_FV_5 CSR byte access test .TST_FV_6 CSR 2 data transfer test .TST_FV_7 CSR 4 data transfer test .TST_FV_8 CSR 6 data transfer test .TST_FV_9 CSR 10 data transfer test 0 TST_FV_10 CSR 12 data transfer test 0 TST_FV_11 CSR 14 data transfer test 0 TST_FV_12 CSR 16 data transfer test , TST_FV_13 combined CSR data test . TST_FV_14 dynamic RAM pattern test . TST_FV_15 dynamic RAM address test 8 TST_FV_16# dynamic RAM inverted address test 0 TST_FV_17 PROM revision level check 0 TST_FV_18 PROM read checksum verify 2 TST_FV_19 DMA transfer, Q-Bus to KMV1B 2 TST_FV_20 DMA transfer, KMV1B to Q-Bus P TST_FV_21< DMA transfers,both directions, and memory interaction test 0 TST_FV_22 KMV1B to Q-Bus interrupts 0 TST_FV_23 Q-Bus to KMV1B interrupts 4 TST_FV_24 real-time clock interrupt test B TST_FV_25. baud rate generator test for Channel A and B N TST_FV_26: Channel A frames internal loop ,no interrupts, low speed N TST_FV_27: Channel B frames internal loop ,no interrupts, low speed L TST_FV_288 Channel A frames internal loop ,interrupts, high speed L TST_FV_298 Channel B frames internal loop ,interrupts, high speed NTST_FS_1; Channel A frames external loop mode,interrupts,high-speed NTST_FS_2; Channel B frames external loop mode,interrupts,high-speed PTST_FS_3< Channel A/B Test modem CCITT 107,108 in external loopback RTST_FS_4> Channel A/B Test modem CCITT 105,106,109 in external loopbackPTST_EV_1< DMA transfers,both directions, and memory interaction test NTST_ES_1; Channel A frames external loop mode,interrupts,high-speed NTST_ES_2; Channel B frames external loop mode,interrupts,high-speed 6ERR_1% Error when setting Maintenance Mode 2ERR_2!KMV1B REGISTERS CAN'T BE CLEARED DERR_34DATA COMPARE ERROR ON KMV1B REGISTER (SEL2 TO SEL16)@ERR_40DATA COMPARE ERROR ON SEL0 WHEN ACCESSED BY QBUS,ERR_5 Data Compare Error in SEL2 ,ERR_6 Data Compare Error in SEL4 ,ERR_7 Data Compare Error in SEL6 .ERR_10Data Compare Error in SEL10 .ERR_11Data Compare Error in SEL12 .ERR_12Data Compare Error in SEL14 .ERR_13Data Compare Error in SEL16 8ERR_15&DATA COMPARE ERROR IN RAM MEMORY TEST .ERR_16TIMEOUT DURING DMA TRANSFER <ERR_20*DATA COMPARE ERROR AFTER DMA TRANSFER INTHERR_217DATA COMPARE ERROR AFTER DMA TRANSFER IN BOTH DIRECTION2ERR_22 INTERRUPT OCCUR AT WRONG LEVEL $ERR_23NO INTERRUPT OCCUR "ERR_24NO KMV1B ANSWER 2ERR_25 TIMEOUT DURING KMV1B MICRO TEST NERR_26ERR_27-NO KMV1B ANSWER ,DCT11 RECEIVE NO INTERRUPT HERR_306DATA COMPARE ERROR DURING DMA TRANSFER KMV1B to Q-BUS <ERR_31+ERROR DURING BYTE ACCES ON KMV1B REGISTERS NERR_32ERR_123,REAL TIME CLOCK INTERRUPT OCCURED TOO EARLY (ERR_124INCORRECT KMV1B REPLY LERR_1319ERROR WHEN TRANSMITTING IN INTERNAL LOOP WITH INTERRUPTS HERR_1325MODEM SIGNAL ERROR ON CHANNEL A IN EXTERNAL LOOPBACK HERR_1335MODEM SIGNAL ERROR ON CHANNEL B IN EXTERNAL LOOPBACK >ERR_136,INTERRUPT OCCURED ON DCT WHEN RTC IS DISABLEDERR_1372Data Compare Error in Internal LINE Data Transfer DERR_1382Data Compare Error in External LINE Data Transfer DERR_1402 ERROR at the initialization :: TEST NOT EXECUTED LERR_1419Data compare error between CCITT 107 and 108 on Channel ALERR_1429Data compare error between CCITT 107 and 108 on Channel BKMV1B@@\h80. @MDMSHARE PASCALMSC PMSG$VALUE_2$CODE$DATAPMSG$CONVERT_VALUE_2* 3PMSG$CONVERT_VALUE_3 nRC< sBҍ &(DISK$USER2:[MDM.CMS.M7]PMSGCONVERT.PAS;1  XSϊ@©@¨(UUSZ~*W*[ZݏӁ(*%*ݏ*߭))T\:TPP߼P0(ݼϤ<~^?χ>P߼P'ݼi>P߼P'ݼJ^TR޼T޼S߼ hSPP¨߼ ?ST>P߼ PT|'!ݼ ^R޼T޼S߼ SPP¨߼ />P߼ PT5'$ݼ ϩ<~ST^S޼n޼T n'6ETcrèTTRBêRbTTRBúRbTTRBRbTTRBRbTTRBRbTTRBRbTTRB Rb|^ S޼n޼Vn4Ivèè VVRBëBêRb VVRBúBúRb VVTDxVUURRUUDRb xVTTRRTTVVRBRb VVRBRb xVRRRVVRBBRb VVRB Rb ^R޼U޼V޼ W޼ ޼޼޼޼ n޼$޼(VxUQQVPPQ»WUUQWPPA»xUSST TºSPPºSPPºSQЮPPQºUTUnSPPSPPSPPSPPSSUϸ ^ R޼S޼nSKSݏ$ݮݏz$ݏIݏr]$>$ ^V߼Ѽ1ѼƐݏIݏ $Ɛݏ$Ɛݏ#W(WWRBƔRƐR#WƐ#ƐݏIݏ(#|P^V(孀޼RƐݏKx#bƐݏS\#ƐbݏG#pƌ #p bƌƐ%#ƌƌ޼UylhƐݏ["Ɛeݏ"ph"yTR:CT{P߭ݏ߭Tz߭ݏIݏZF~PST߭ݏIݏP~+߭ ^uT޼ ޼ ޼[߭ϭѭ1ĐU~Đ#ݮ AW޼VԮЮRYRYZ RYZnnRXRXѮ[1TЮURWZ~Y~X~UUR ϮRSCf1Đ?,PPĐCfRxRPPPĐR@ĩ@ĨĐϱSSP@ĪxSPPPĨĐSĐĐfĐ?ϚPP2PP( PP PPPP PPR8ĐݏIݏbZ~`ĐݏIݏZd~CS[UnbWYĐ]~ĐRĐݏIݏn~ĐϞT^3V޼޼ ޼ ( >ݭ( ݭ|[|1eݮ ƐOƐ߭x~<~Da~ƐϭЭԭxSЭRRBcѮ 1 ЮX޼nR|~XXR ZRTD1WYxT[[TTZƐ?RRƐDU[[ƐTϮDRRJƐTόƐTISSD ƐTgxURRRƐUL@Ʃ@ƨƐ[[ƐTHSRƏRRƐR HRRƐRS1ԭƐ?϶ѭORRXƐݏbnƐnUƐݏIݏjx~}RRWSYkWƐݏIݏ҂~?T* XѮ 1ЮXЭ޼YSޭR|~XXS CS⊏@ƨ@ƩƐϖƐ?ϸRRƐu|ZTDi1[DiUTEExTWWWWƐT|DDTTSRRCƐTNƐTADRbD ƐT)xURRRƐUWƐTT:UEixURRRƐUUSCi0ŏ,CRHRƏRR|RSZƐSZ[ƐݏIݏZ~hŏ|HR RRƐR$Ɛ?"1TDRRƐݏIݏڂ~ aDSSBBBRRSRCƐݏbnƐnTƐݏIݏₖ~RR1MSCiRR$BCƐݏIݏꂖ~fS X@Ɛ p~Ɛω&ƐݏIݏ~"Ɛ|Ͻ|1$ݮlƐs~Ɛ*Ѯ 1ЮXZ޼YR|~XXR RSCi1wƐ?tRRƐ1CiWxSUUUUƐSTZCSSTRRDƐS/ƐS"C ƐS xWRRRƐW슏@Ʃ@ƨƐϐUUƐSƐpDƐSϢߨ0DX0205(o=Sh6 GGSKMKMAVAXELN V2.0-00`"o=S04-0024 5 ?"! PASCALMSC_001!\G MDMSHARE_001"! DPASCALIO_001!DAP_001 ,g0000 00:00:03.000000 00:00:10.00allocat once more 2048Bytes the value argument is invalid... the message to DELETE has an interrupt pending...Error in the System Memory Data Area...There is no free system pool currently available...maximum of 1024 object table entries per job...Not enough physical memory to create the data area...Error in the System Memory Data Area...TEST NOT EXECUTED0000 00:00:01.00ERROR in the KMV1A Bus Request configurationclrkmv bad KMV1A< ^%\R߬ ~RbwR߬ ~Rjb2R߬ ~RObjR߬ ݏQR2bR߬ ݏYRb R߬ ݏaRa R߬ ݏiRaM R߬ ݏqRa R߬ ݏyRa' R߬ ݏRa{R߬ ݏRgaR߬ ݏ RJaR߬ ݏ R-a_R߬ ݏ RaϫR߬ ݏ R`R߬ ݏ R`PR߬ ݏR`ϙR߬ ݏR`R߬ ݏɂR`9R߬ ݏтRb`ϟR߬ ݏقRE`_R߬ ݏႜR(`Q R߬ ݏ邜R `W$R߬ ݏR_ό+R߬ ݏR_7.R߬ ݏR_r0R߬ ݏ R_1R߬ ݏRz_E3R߬ ݏR]_ :R߬ ݏ!R@_@R߬ ݏ)R#_GR߬ ݏ1R_CHR߬ ݏ9R^ OR߬ ݏAR^(߬ ݏA^P ^ \Sd߭ρXѭ1[R߬ RWݬ ]߬ RUXݬ ]SR߭Uѭ$ t M^8^S ѭѭ߬ ]ݬ ϙ\߭߭]ѭ߬ ]ݬ m\<,,b]U]߬ ]ݬ /\߬ |~rW߬ fW߬ ZW߬ NW߬ BW߬ 6W߬ *W߬ W߬  ]ݬ ϸ[\߬ ]ݬ Ϝ[߬ \ݬ ϊ[߬ \ݬ x[߬ ݏ\ݬ ^[߬ \ݬ L[߬ ݏ\ݬ 2[߬ ݏ \ݬ [߬ ݏ3i\ݬ Z߬ ݏ;O\ݬ Z߬ E\ݬ Z߬ 3\ݬ Z߬ ݏ\ݬ ϦZ߬ \ݬ ϔZ߬ ݏ[ݬ zZ߬ ݏ#[ݬ `Z߬ [ݬ NZ߬ [ݬ ߬ ݏ`Tݬ QS߬ Tݬ ?S߬ ݏIݏ~T^Rߢ ݏhhTݢ R߭K߭sQѭ1|ST  ? T SS1TWKߢ ϡLߢ ϑLϯQ\ߢ ݏIݏ҃StST Kߢ SϼM\S  nSn\\ߢ ݏIݏrSSST  0TSSbbTbTST  ?TSS1-ߢ ݏpKSݢ Qߢ ASݢ Qߢ ݏIݏ~S ^~\߬ ݏxRݬ όQ߭ϬI߭Pѭ1|RS  ?SRR1SI߬ 0K߬  K>PP߬ ݏIݏ҃uRlRSϛI߬ RKLRPPP߬ ݏIݏz.RRRS 0nSnRRllSlSRS  ?SRR15߬ ݏQݬ wP߬ Qݬ eP߬ ݏIݏ~Q ^\߬ ݏQݬ #P߭CH߭ϙNѭ1|RS  ?SRR1S}H߬ I߬ ϷINP߬ ݏIݏ҃ QlRS2H߬ RJRPPP߬ ݏIݏPRRS 0nSnRRllSlSRS  ?SRR15߬ ݏyPݬ O߬ oPݬ N߬ ݏIݏ~@P ^\߬ ݏ%Pݬ ϺN߭F߭0Mѭ1|RS  ?SRR1SG߬ ^H߬ NHlMP߬ ݏIݏ҃OlRSF߬ RyIRPPP߬ ݏIݏ\ORRS 0nSnRRllSlSRS  ?SRR15߬ ݏOݬ ϥM߬ Oݬ ϓM߬ ݏIݏ~N ^C\߬ ݏNݬ QM߭qE߭Kѭ1|RS  ?SRR1SϫE߬ F߬ FLP߬ ݏIݏ҃:NlRS`E߬ RHRPPP߬ ݏIݏMRRS 0nSnRRllSlSRS  ?SRR15߬ ݏMݬ Lݬ J߬ 4Lݬ J߬ ݏIݏ~L<^qRߢ ݏȀKݢ J߭ϟB߭Hѭ1USU  ?USS1UBߢ !D ߢ D/I\ߢ ݏIݏ҃fKwUϏBS߭ϬDѭ1 ߢ ?UR߭ GQ QQPPP Q P حQ}PSߢ  AUѭTѭS\ҚS^Sߢ ݏIݏڃ%F;S@ߢ ݏIݏ$Fߢ ݏIݏ҃&Fߢ ݏFݢ Eߢ ~Fݢ  Eߢ ݏIݏ~OF<^Rߢ ݏ4Fݢ D߭<߭?Cѭ1)ߢ υ>ߢ v>ߢ j>'ߢ Z>Uϸ߭pEQ QQPPP Q P حQ}PSߢ p?UѭTѭS\Қ\/ߢ ߢ @ݢ Ϝ>ߢ ݏIݏ~?<0^LRߢ ݏ8?ݢ Z>߭z6߭<ѭ1ԭU<~߭߭߭pЭح П8S \\S\\S \Lc\\ Э<\\d<~߭߭߭pЭح П8P \\P\\P \L`\\ Э<\\ѭ18υ8a>T>ѭԏ|$5"53>&>ѭԏ|$//v>a>ѭԏ|123a3E>0>1 ԭPЭQPP\La\lP찭ߢ j6\\ߢ T6ߢ B6Uߢ 26P;S1U?Sߢ ݏIݏ1v=1ߢ ݏIݏ҃2[=1Sߢ ݏIݏ47=1ߢ ݏIݏ҃5=zSЭTU,SS\Ld\lѭSPߢ ݏIݏ3<6SS\Ld\lߢ ݏIݏ6<<\\\Sݭ߭ѭ1'ψ'"<~<ѭԏ,|$2(2e<P<ѭԏ<|$!!7<"<Ujߢ ݏ@;ݢ ϋ:ߢ ;ݢ y:ߢ ݏIݏ~;Ϟ^(Sߣ ݏH;ݣ 6:߭V2߭Ϭ8ѭ1|<~߭߭߭pЭ П8T RRTRRT RBdRR ЭЭ!2Tߢ 1ݢ Ϫ0\T  ЏnTn\\1Uߢ ݏ`1ݢ q0ߢ 1ݢ _0ߢ ݏIݏ~1 ^Rߢ ݏh1ݢ 0߭=(ѭ1T߭χ.ѭ1Tߢ ).T@ߢ ϒ)Sߢ *\S  <S\\1\5TTS ߢ S?)ߢ ϙ*S;Tߢ ݏIݏ*A~0ߢ ݏIݏ2D~l0\S  ,Ǟ^Uߥ ݏ",ݥ Ϸ*߭"߭-)ѭ1|<~߭߭߭pЭ П8S RRSRRS RBcRR ЭЭ)1)ѭ|$55)l)ѭ|$/Ϣ/S)>)ѭ|13>3") )XRX  XRR1 ЭTЭSYZFĭԭPPP\L\lPX<PPP\L\lP밭ߥ  ߥ N"ߥ  ߥ 1"ZƐYǰƥߥ ϲ ߥ  "ߥ ϔ ߥ !ߥ v ߥ !ߥ Z ߭|'Q QQPPP Q P حQ}PVߥ |~~!ѭWѭV\֚VDRRR\LP`L\lѭߥ ݏIݏQ~0'R?V@ߥ ݏIݏjS~'ߥ ݏIݏ҃R~&XRX  nXnRR1ݭ߭ѭ1'ϸ'R&E&ѭ,|$2X2$&&ѭ<|$! !g&R&ݭ߭ѭ1'"'_-&ﯿ&ѭ,|$22%%ѭ<|$!s!`%S%ߥ ݏ%ݥ +$ߥ %ݥ $ߥ ݏIݏ~]%^ȾVߦ ݏA%ݦ #߭߭L"ѭ1~|<~߭߭߭pЭ П8S RRSRRS RBcRR ЭЭѭ<|$!0!yݭ߭ѭ1'I'Tָ?ѭ,|$22ﵸ&器ѭ<|$!Ϛ!zߦ ݏݦ Rߦ ݦ @ߦ ݏIݏ~^Vߦ ݏhݦ ߭߭sѭ1|<~߭߭߭pЭ П8S RRSRRS RBcRR ЭЭ1/(! S1S"$&-4;BIPW^elszdb`YRKD=6/(! SϘT 2FNP߼ PS;:P߼ PS'&P߼ PSP߼ PSݼ ϴ (^RЬS޼ Ϯ  5J1P߼ PS1P߼ PS1P߼ PS1PS nSnPPSPS  SPPSPS  0SPPSPS  S PPSPS  <SPPSPS  < SPPSPS  <0SPPSPS  <SPPSP߼ PSݼ wS?S#)/5^R޼nn#)/5;^R޼nn#)/5;^LR޼nn!'-39?EKQW]ciou{ﺜRXߢ |~ϷXߢ |~Ϩ?PP PP PP ߢ ݏIݏJIRXߢ |~F0@ߢ |~#ϺPP PP PP ߢ ݏIݏJV^›Rϭ߭Q QQPPP Q P حQ}PSߢ |~ѭTѭS\^IRϸ߭pQ QQPPP Q P حQ}PSߢ |~rѭTѭS \\aOUTPUT@@hp@ HP`0( f @ PASCALMSCMDMSHARE DPASCALIODAP DIAG$KMV1A$CODE$DATA KMV1As 3 CONFIGURE Q r SERVICE_SET_UPr ; BH CLEAN_UPH  S TEST_UV_1   TEST_UV_2 1[w TEST_UV_3w; q TEST_UV_4G f TEST_UV_5Y D TEST_UV_68 R TEST_UV_7C Jqw TEST_UV_8wJ i TEST_UV_9H HiI TEST_UV_10IH i TEST_UV_11H H i TEST_UV_12H i TEST_UV_13H ^ v TEST_UV_14? f` TEST_UV_15`/ K m TEST_UV_16 / m:" TEST_UV_17:"8  # TEST_UV_18#% v $ TEST_UV_19$q  ( TEST_UV_20(l #, TEST_UV_21, R4 TEST_UV_224s 6 TEST_UV_236q X>9 TEST_UV_24>9. :|: TEST_UV_25:- K< TEST_UV_26K< b,C TEST_UV_27,C gJ TEST_FS_1J tyP TEST_FS_2yP, DQ TEST_EV_1Q AX TEST_ES_1X~ o Q_CLRKMVQ_" 'i_ GENER_PATTERN_5 VaREGISTER_WRITEa: fvb REGISTER_READvb* %c SAVE_RD_REGc PZTd PREP_WR_REGTd gUdPREP_WR_BYTE_REGd z >eMAINM1>e! q eMAINM2e.  3fTEMPO3f Gyf TEMPO_MCLRf ]})gCHECK_FATAL_EXIT)g q81n1 TEST_FV_2>  U TEST_EV_1  %Z TEST_FS_1  EUB TEST_FS_2B  eU TEST_FS_3  U TEST_FS_4  UA TEST_FS_5A  U TEST_FS_6  U TEST_FS_7  U@ TEST_ES_1@  } UTILITY  16 READ_REG  ^x SAVE_RD_REGx 7 x SAVE_RD_BYTE 7  PREP_WR_REG7  PREP_WR_BYTEF  WRITE_REG VIWRITE_BYTE_REGI y READ_BYTE_REG Y CHECK_SUCCESSYs &IEQINIT 6SDEV_CACSS$ V& CHECK_INIT&# |W} CHECK_REG}* e CTEST1$  CTEST2   FTEST1 E k -Z fFTEST2f  Z_ "FTEST3"~  i&FTEST4i&u O J )FTEST5) + `.FTEST6`. ^ ^ 2FTEST72 |81`ݏIݏ<|~dЭPPPPDݏbuUjݏIݏ‚<~> ԥXBݏb#SݏIݏʂ<~SS[W.ݭo~v<8~ݏIݏ<~l ^R޼n߭ѭ1U~όnϫT T exTSSPPSSTTY޼XY |VWV WVWVSCh1CD!xSQQPPDQPPD QQD1?]PPChU@©@¨xUTTPPUUP@U$xSQQPWPQVQSU:CDTTPWP\xSPPPDxUPPPPWP>xSPPPDxUPPPPVPxSPPPD/xUPPPPVPݏIݏ<~V߭ѭ9?  :ݏIݏ<~ ݏIݏZ<~S.Y]~ݏIݏ<~0DX0205(kd53 GGSKMKMBVAXELN V2.0-00k򫕎04-00 02 2 ?"! PASCALMSC_001! MDMSHARE_0010000 00:00:03.000000 00:00:10.000000 00:00:01.00KMV1B< ^\υR߬~R `ϐR߬~R`ER߬~R_}R߬ݏR_R߬ݏR_R߬ݏR_R߬ݏRv_ R߬ݏRY_ύ R߬ݏR<_Ϫ R߬ݏR_ R߬ݏɂR_R߬ݏт R^NR߬ݏق R^ςR߬ݏႱ R^϶R߬ݏ邱 R^R߬ݏ Rq^+R߬ݏRT^\R߬ݏR7^ϔR߬ݏ R^R߬ݏR]R߬ݏR]ϿR߬ݏ!R]vR߬ݏ)R]AR߬ݏ1R]x#R߬ݏ9Rl]%R߬ݏARO](R߬ݏIR2]U)R߬ݏQR]φ+R߬ݏYR\n/R߬ݏaR\V3R߬ݏiR\"7R߬ݏqR\:R߬ݏyR\ϫ>R߬ݏRg\hBR߬ݏ RJ\DR߬ݏ!R-\DFR߬ݏR\qJR߬ݏR[TNR߬ݏR[(ρ߬ݏy[P ^*RSd ߭Uѭ1\ߢ\ϝSߢ\T S\߭ϽQS ѭѭߢ0[1߭߭[ѭc߭Wѭw$ߢ(S2X\\ ߢhT ߢZ4ߢZ"ߢZߢZߢZ\߬Z߬Z߬yZ߬ݏKcZ߬ݏSQZ߬ݏ[?Z߬9Z߬ݏc#Z߬ݏkZ߬ Z߬ݏsY߬Y߬Y߬Y߬Y^5\߭ P߭OVѭ(aP߬ϫQ߬ϛQϥV߭O\߬ݏ^YR߬RϽRѬ߬ݏݏ-YR߬ݏY߬Y^y\߬ݏX߭?O߬ݏ X߬X^6Rߢݏ(X߭Nѭ1bTS\S  ?S\\uS:OߢTτPߢTQ ߢݏݏƒAX\S 0nSn\\bbSbS\S  ?S\\Toߢݏ0WߢWߢݏݏ"~W^9Rߢݏ8W߭Mѭ1b|ST  ?TSS1T?N @ ߢ|~nOߢ|~ϾP ߢݏݏʃ#W1SߢSτP< \ߢݏݏʃVSST 0nTnSSbbTbTST  ?TSS12ߢݏ@VߢVߢݏݏ"~V ^\߬ݏHdV߭ϱLѭ1`l|RS  ?SRR1*SL @ ߬|~ N߬|~pO ߬ݏݏb U1RSϊL߬RM߬R"ORA A A A A A A A@ 9߬ݏݏb mU ߬ݏݏb LURwRS 0nSnRRllSlSRS  ?SRR1߬ݏPT߬T߬ݏݏ"~T|^A\߬ݏXT߭K߭IQѭ1TUVUOK߬ϙLT߬ωLϓQR1TSS=R@߬ݏݏ: :TZ߬ݏݏ҃  T@S;R@߬ݏݏ: S߬ݏݏ҃ STUV>߬ݏ`S߬S߬ݏݏ"~S^RߢݏhS߭I߭Pѭ1|ST  ? T SS1TJߢQKߢAKKP\ߢݏݏ:StSTϼIߢS`L\S  nSn\\ ߢݏݏڃRSST  0TSSbbTbTST  ?TSS1-ߢݏpkRߢeRߢݏݏ"~BR ^\߬ݏx'R߭tH߭϶Nѭ1|RS  ?SRR1SϮH߬I߬INP߬ݏݏ:QlRScH߬RKRPPP ߬ݏݏ⃱fQRRS 0nSnRRllSlSRS  ?SRR15߬ݏQ߬Q߬ݏݏ"~P ^]\߬ݏP߭#G߭eMѭ1|RS  ?SRR1S]G߬ϧH߬ϗHϡMP߬ݏݏ:\PlRSG߬R϶IRPPP ߬ݏݏꃱPRRS 0nSnRRllSlSRS  ?SRR15߬ݏO߬O߬ݏݏ"~O ^ \߬ݏO߭E߭Lѭ1|RS  ?SRR1S F߬VG߬FGPLP߬ݏݏ: OlRSE߬ReHRPPP ߬ݏݏNRRS 0nSnRRllSlSRS  ?SRR15߬ݏxN߬rN߬ݏݏ"~ON ^\߬ݏ4N߭ρD߭Jѭ1|RS  ?SRR1SϻD߬F߬EJP߬ݏݏ:MlRSpD߬RGRPPP ߬ݏݏsMRRS 0nSnRRllSlSRS  ?SRR15߬ݏ'M߬!M߬ݏݏ"~L ^j\߬ݏL߭0C߭rIѭ1|RS  ?SRR1SjC߬ϴD߬ϤDϮIP߬ݏݏ:iLlRSC߬RERPPP ߬ݏݏ"LRRS 0nSnRRllSlSRS  ?SRR15߬ݏK߬K߬ݏݏ"~K<^RߢݏȀK߭A߭!Hѭ1 USU  ?USS1UBߢaC ߢQC[H\ߢݏݏ:KwUA S ߢ>ߢ >'ߢ=Ud߭EQ QQPPP Q P حQ}PSߢ?UѭTѭS\Қ\/ߢ>< \\2ߢݏݏz'=Eߢݏݏ:#EߢݏEߢEߢݏݏ"~D^X\߬ݏD߭;߭`Aѭs߬Ͽ<AR;R@߬ݏݏ({D߬ݏݏ:*aD߬ݏ SD߬MD߬ݏݏ"~*D 0^Rߢݏ(D߭\:߭Ϟ@ѭ1S<~߭߭߭pЭح П8P \\P\\P \L`\\ Э<\\d<~߭߭߭pЭح П8P \\P\\P \L`\\ Э<\\ѭߢݏݏ"~C1q ԭЭPSܭ\L`\lܭ\L`\ l< \\\ ɰ ߢ:\\ ߢϲ: ߢϠ:Sߢϐ:Ϛ?Sj\1\ߢݏݏ,DB1\@ߢݏݏ+ B~ߢݏݏ:-Bd\^\ߢݏݏ/A;\@ߢݏݏ.Aߢݏݏ:0Aݭ߭Sߢݏ0AߢyAߢݏݏ"~VA<0^Rߢݏ8;A߭ψ7߭=ѭ1ԭU<~߭߭߭pЭح П8S \\S\\S \Lc\\ Э<\\d<~߭߭߭pЭح П8P \\P\\P \L`\\ Э<\\ѭߢݏݏ"~0@1 ԭPЭQPP\La\lP찭 ߢ8\\ ߢ7 ߢ7Uߢ7<S1U?Sߢݏݏ1?1ߢݏݏ:2s?1Sߢݏݏ4O?1ߢݏݏ:54?z SЭTU,SS\Ld\lѭSPߢݏݏZ3>6SS\Ld\l ߢݏݏZ6>< \\\ Sݭ߭Uߢݏ@>ߢ>ߢݏݏ"~n>Ϟ^SߣݏHR>߭ϟ4߭:ѭ1|<~߭߭߭pЭ П8T RRTRRT RBdRR ЭЭ7Tߢ7\T  ЏnTn\\1Uߢݏ`7ߢ7ߢݏݏ"~7 ^Rߢݏho7߭ϼ-ѭ1T߭3ѭ1TߢN/X4T  @ ߢ/Sߢ\0\S  <S\\1\5T  TS ߢSϾ.ߢ 0S;TߢݏݏA~w6ߢݏݏD~[6\S  ߦݏݏ:z~"<\\\1uXRX nXnRR1Xݭ߭ݭ߭ߦݏ0 ߦ ߦݏݏ"~ ^Vߦݏ8 ߭߭ ѭ1ߦ= ߭) |<~߭߭߭pЭ П8S RRSRRS RBcRR ЭЭ ߦݏݏ:x~" <\\\1uXRX nXnRR1Xݭ߭ݭ߭ߦݏ@ ߦ ߦݏݏ"~ ^R߭޼T dѭGd SߢSωߢS ߢݏݏF dS^﫦R޼nn &  UU  b!(/6=DKRY_ejoty~ @        @       b!(/6=DKRY`gnu|  ߢ              ^UR޼S޼TTTS")07>1/ ( !     S1S"$&-4;BIPW^elszdb` Y R K D = 6 / ( !     SτT /BP߼ PSP߼ PSP߼ PSP߼ PSo (^RЬS޼ Ϯ  5J1P߼ PS?1P߼ PS*1P߼ PS1PS nSnPPSPS  SPPSPS  0SPPSPS  S PPSPS  <SPPSPS  < SPPSPS  <0SPPSPS  <SPPSP߼ PSBS?S#)/5       ^R޼nn#)/5;^%R޼nn#)/5;^СR޼nn!'-39?EKQW]ciou{>RXߢ|~Xߢ|~ϼ?PP PP PP ߢݏݏ^͠RXߢ|~Z0@ߢ|~7ϺPP PP PP ߢݏݏ^FR1߭mQ QQPPP Q P حQ}PSߢ|~ѭTѭS\^͟Rء߭Q QQPPP Q P حQ}PSߢ|~zѭTѭS \\@@hp@ HP`0 b @ PASCALMSCMDMSHARE DIAG$KMV1B$CODE5$DATA 5KMV1B5 > CONFIGURED & SERVICE_SET_UP  P  CLEAN_UP  S TEST_UV_1  i| TEST_UV_2| C TEST_UV_3 8 R TEST_UV_4 D N  TEST_UV_5 V  TEST_UV_65 : TEST_UV_7@ YG TEST_UV_8GC Q TEST_UV_9E Q TEST_UV_10E Q: TEST_UV_11:E Q TEST_UV_12E Q TEST_UV_13A  ^: TEST_UV_14:< N TEST_UV_15, U TEST_UV_16, V U2 TEST_UV_1725 k TEST_UV_18"  _ TEST_UV_19_ X 3# TEST_UV_203#] c & TEST_UV_21&s 3To* TEST_UV_22o*p , TEST_UV_23,o @?/ TEST_UV_24?/+ d0 TEST_UV_250: #N2 TEST_UV_262` 6 TEST_UV_276^ : TEST_UV_28:_ > TEST_UV_29>_ pB TEST_FS_1B_ lF TEST_FS_2F_ [J TEST_FS_3J_  M TEST_FS_4M; N TEST_EV_1Ni JR TEST_ES_1Rd V TEST_ES_2Vd  ZCLRKMVZ" *iJ[ GENER_PATTERNJ[5 V\REGISTER_WRITE\7 Z] REGISTER_READ]) %|v_ SAVE_RD_REGv_ OZ_ PREP_WR_REG_ fU%`PREP_WR_BYTE_REG%` y `MAINM1`! q +aMAINM2+a)  aTEMPOa 4y(b TEMPO_MCLR(b J}bCHECK_FATAL_EXITb ^92DISK$DIAG1:[WORK]NAKMBA.PAS;416/@'i$DISK1:[MDM]DSLIBRARY.PAS;781h] DISK$DIAG1:[WORK]NAKMBA.PIN;1    )     0DX0205(/VB"#GGSKMDHAVAXELN V2.0-00@i/V04-00! " ?"! PASCALMSC_001!\G MDMSHARE_001nZP( ?&UU A ,?2Kn,X  `   %K!OBYNnyUnable read Rev, PROC2: ROM Rev - PROC1: DHV11< ^\R̐~R>=NR̐~R"=R̐~R=R̐ݏ!R<R̐ݏ)R<R̐ݏ1R<R̐ݏ9R<R̐ݏRp<R̐ݏ)RR< R̐ݏ1R4<R̐ݏ9R<R̐ݏAR;R̐ݏR;%R̐ݏR;V R̐ݏ R;&R̐ݏCR;( ̐ݏ s;PϞ^\^YdְحڴTTTSCRb̐T2b̐TwCRb̐ :ԭYC Rb̐T:̐T̐T#̐T:C RbرحYTWR̐R̐YR̐ݏIW:̐ϲ̐ݏQ9:̐ϔ̐ݏY:̐v̐ݏa9̐X̐ݏi9̐:̐Ϟ̐1̠RxRQޭPSRe9Z Z[̢RxRQޭPSR<9 ߭߭߭Э[䭾 TޭSԃT[ϋ0[ݏӀ~2g2TޢlST[KlݏˁN2YTDl1? \\1DlUxUSSSU @©@¨ϑ TT\LªxTSSS¨TϹ g1N?z \\2\\( \\ \\\\ \\U֭֭TZ1TDl&xTSS\\SST T0XX |VWV WVWVUEl1?ϡ\\^0ElT@©@¨@xTSS\\TT\LTgxUPP\W\PVPUA 0T}S\\\W\/S\\\W\S\\\V\SS\V\֭߭/ѭ ?Ϩ  ֭֭UX YVխݭݏۀ/խݭݏ〖o/խݭݏ뀖V/խݭݏ=/ĭSSSݏ/ݏqݏj..ݏ.߭..S: PERR_018,Port failed to interrupt on receipt of BREAK2ERR_019Invalid BREAK indicator in fifo.ERR_022DMA failed to stop on ABORT0ERR_023DMA did not resume after ABORT>ERR_024+Faulty transfer after resumption from ABORTRERR_025@Insufficient XOFF's generated during incoming flow-control test.FERR_0263XON not generated during incoming flow-control testDERR_0271Faulty transfer during incoming flow-control testHERR_0286TX.ENA not set/reset during outgoing flow-control testBERR_029/Faulty transfer during forced flow-control testDERR_0301XON not generated during forced flow-control test.ERR_031Could not force FIFO overrunFERR_0324Invalid received line number during simultaneous DMA@ERR_033.Invalid received datum during simultaneous DMA<ERR_034*Missing characters during simultaneous DMAHERR_0356Invalid Line Status Register during modem control testFERR_0364Invalid FIFO contents after modem control transitionPERR_037=Insufficient XOFF's generated during forced flow-control test:ERR_004'Controller timed out on initialization.LERR_0059Controller failed to initialize without diagnostic error.DHV11@@\h80 @MDMSHARE PASCALMSC PMSG$VALUE_2$CODE$DATAPMSG$CONVERT_VALUE_2* 3PMSG$CONVERT_VALUE_3 nRC< sBҍ &(DISK$USER2:[MDM.CMS.M7]PMSGCONVERT.PAS;1  0DX0205(kD=S8-GGSKMIEAVAXELN V2.0-00 4kD=S04-00  ?"! PASCALMSC_001!\G MDMSHARE_001"! DPASCALIO_001!DAP_001:6The controller has been disabledREV SW=AIEQ11< ^\R߬@~R44R߬@~R4dR߬@~R3[R߬@ݏ)R3ϓR߬@ݏ1R3%R߬@ݏ9R3]R߬@ݏAR3ϕR߬@ݏIRm3R߬@ݏQRP3R߬@ݏYR33=R߬@ݏaR3uR߬@ݏi R2R߬@ݏqR2ϐR߬@ݏyR2R߬@ݏR2(9߬@ݏ 2P(^\|}߬@<2~φ ߬@ϰѬ߬@<: ~^ ߬@ψѬ߬@qѬ߬@~ ߬@~ Ѭ@Ѭ;߬@1 - 11ݬ@b ߬@z1ݬ@K ߬@ݏd1ݬ@1 ߬@ݏ!J1ݬ@ \߬@J1ݬ@ ߬@ݏ(1ݬ@ ߬@1ݬ@ ߬@ݏ0ݬ@ϵ ߬@ݏ0ݬ@ϛ ߬@ݏ0ݬ@ρ ߬@ݏ0ݬ@g ߬@ݏ0ݬ@M ߬@ݏz0ݬ@3 ߬@ݏÀ`0ݬ@ ߬@ݏˀF0ݬ@߬@<0ݬ@߬@ݏӀ0ݬ@߬@/ݬ@߬@/ݬ@ϯ߬@ݏۀ/ݬ@ϕ߬@/ݬ@σ!\߬@ϗ \߬@ݏ耣/ݬ@M ߬@ݏu/ݬ@.߬@k/ݬ@\߬@ݏ?/ݬ@ ߬@ݏ /ݬ@߬@/ݬ@e\߬@ݏ.ݬ@ϣ' ߬@ݏ.ݬ@߬@.ݬ@m \߬@ݏ.ݬ@I߬@ݏ q.ݬ@*߬@g.ݬ@\߬@ݏ(;.ݬ@߬@ݏ0.ݬ@߬@.ݬ@a\߬@ݏ8-ݬ@ϟ߬@ݏ@-ݬ@π߬@-ݬ@n \߬@ݏH-ݬ@JU߬@ݏPr-ݬ@+߬@h-ݬ@\߬@ݏX<-ݬ@J߬@ݏ`-ݬ@߬@-ݬ@b\߬@ݏh,ݬ@ϠϢ"߬@ݏp,ݬ@ρ߬@,ݬ@o \߬@ݏx,ݬ@Kϫ&߬@ݏs,ݬ@,߬@i,ݬ@\߬@ݏ=,ݬ@z ϟ  D8&(!߬@ݏ+ݬ@ϯ߬@+ݬ@ϝ;\߬@ݏ+ݬ@y߬@+ݬ@g^R޼T޼nS߼ SS+ݼ 8Nn777߼ S+ݼ  P߼ PT+ݼ  T^}R޼nԢn'2=HS^/13579;=^R޼nԢn'2=HS^$$%%&&''(())**++^sR޼nԢn'2=HS^//1133557799;;==^R޼nЬԢn!,7BMXcny $$%%&&''(())**++,,--.. ^8R޼T޼nЬ S߼S(ݼi~n777߼SL(ݼ5TTP߼PT((ݼ ^R޼T޼޼ nS߼S'ݼѮ777߼S'ݼϨnTMޢP߼PT'ݼυ^ R޼T޼nS߼ Sq'ݼ Wln777߼ S:'ݼ $ޭP߼ PT'ݼ  Tϥ^Ьѭ1ϭ3FYl*=Pcv߭ݏ&߭ݏ&߭ݏ&߭ݏ&߭ݏ&߭ݏȁ&߭ݏЁp&߭ݏ؁]&߭ݏJ&߭ݏ聣7&߭ݏ$&߭ݏ&߭ݏ%߭ݏ%߭ݏ%߭ݏ%߭ݏ %߭ݏ(%߭ݏ0%߭ݏ8y%߭ݏ@f%߭ݏHS%߭ݏP@%߭ݏX-%߭ݏ`%y\߬@<~$߬@<~߬@ϑ߬@σ߬@u߬@g߬@Y߬@K߬@=߬@/߬@!߬@߬@߬@