IMD 1.17: 6/01/2010 23:37:46 NGEN 11.3 STANDARD SOFTWARE (SAA-3100-5) DEVELOPMENT UTILITIES Diskette 2 of 2 Part Number 71-03103-02  ~ 03103-2/2|.ig|.ig+*9|M^ !"#$%&'()*+4,4-4.4/4[sys]Mail.run[sys]Multiplan.run[sys]XMultiplan.run[sys]BGP.run[sys]Exec.run[Sys]InstallConfig.sys elete.flsLCopy [f0]InstallConfig.sys [Sys] yesType [kbd]PF Designate the type of machine to which your tape drive (either QIC or 1/2") is physically attached. If you have a tape drive at the master and locally, then designate the type of master. The run files will be located on the master, but Sys.cmds will be set up to access them correctly. AM  Press GO when Ready [Scr]<$>*.sub elete @[f0]Delete.flsLCopy [f0]InstallConfig.sys [Sys] yesType [kbd]PF Local workstation - is the workstation at which you are now working. Master - is the computer to which the local workstation is  clustered. Command file - is the file that the executive reads in order to know what to display on the screen when you type a command (e.g. "files") and where to get the run file %' %' The four parameters represent the %' Volume to which the files will be copied %' Volume and directory prefix of the proper command file %' The System volume for any path commands %' floppy drive (from Install) %' Submit %0All.sub '[Sys]<Sys>' '[Sys]' Sys %0_0?? 0 oP  & '?P1?4 ;oD`T U^P`peoeg k%' %' The four parameters represent the %' Volume to which the files will be copied %' Volume and directory prefix of the proper command file %' The System volume for any path commands %' floppy drive (from Install) %' Submit %0All.sub '[!Sys]' '[!Sys]' !Sys %0 y &,28>DJPV\ntz7g888 88888G88 88 8 8" ,o,_0pMaster.sub Local.sub 2 of 2 of Software Development Utilities %' video yivolume %' 'f0 %' ' %' '01839-2/2 %' ' %' '0 %' '0 %' '0 %' '1 %' '29 %' 'yes %' ' %' ' %' ' %?0/y/ %?0/0/lcopy %' 'Cleanup.fls %' '<11.2SSC> %' '[f0] %' ' %' 'y %' 'n %' 'n %' 'ylcopy %' '@Sys.fls 'Software Development Diskette 2 of 2' %' ' %' '[f0] %' ' %' 'y %' 'n %' 'n %' 'ylcopy %' 'InstallConfig.sys %' '2> %' '[f0] %' ' %' 'y %' 'n %' 'n %' 'ylcopy %' 'All.sub HdInstall.sub InSys.fls Rest.fls %' '2> %' '[f0]Master.sub Submit.fls ume %' 'f0 %' ' %' 'SoftDev-1/2 %' ' %' '0 %' '0 %' '0 %' '1 %' '20 %' 'yes %' ' %' ' %' ' %?0/y/ %?0/0/lcopy %' 'SaveSpace.sub InstallConfig.sys %' '1> %' '[f0] %' ' %' 'y %' 'n %' 'n %' 'ylcopy %' '@Sys.fls %' ' %' '[f0] %' ' %' 'y %' 'n %' 'n %' 'ylcopy %' 'All.sub HdInstall.sub InSys.fls Rest.fls %' '1> %' '[f0] %' ' %' 'y %' 'n %' 'n %' 'yCreate Directory [f0]CTlcopy %' '@1>CT.fls %' ' %' '[f0] %' ' %' 'y %' ' %' LCopy @%3%#3/[f0]/InSys.fls %3%#3/[f0]/ %0 yes no no yesLCopy @%3%#3/[f0]/Rest.fls %3%#3/[f0]/ %0 yes no no yesDelete @%3%#3/[f0]/Cleanup.flsSubmit %3%#3/[f0]/SoftwareDevelopmentCmds.sub %0 %1%' Video YesDelete @%0%#0/[f0]/Delete.flsLCopy %0%#0/[f0]/InstallConfig.sys [Sys] yesType [kbd]PF Local workstation - is the workstation at which you are now working. Master - is the computer to which the local workstation is clustered. Command file - is the file that the executive reads in order to know what to display on the screen when you type a command (e.g. "files") and where to get the run file which actually executes the command. Local command file - is the command file that the local workstation uses. Master command file - is the command file that the master and diskless workstations use. When you understand these terms, press GO AM  Press GO when Ready  1AAPF You will be asked to choose one of the following options: LOCAL - All files will be copied to the local workstation. The local command file will be updated. It will look for run files on the local workstation. ACUse when you have plenty of room on your local disk.AA MASTER - All files will be copied to the master. The master's command file will be updated. It will look for run files on the master workstation. ACUse to update your master workstation from this workstation.AA AM  Press GO when Ready  1AAEF LInstallLInstall @%0%#0/[f0]/Submit.fls %0%#0/[f0]/ [Scr]<$> yes no no yesSubmit [Scr]<$>*.sub %0%#0/[f0]//Submit.fls %0%#0/[f0]/ [Scr]<$> yes no no yesSubmit [Scr]<$>*.sub %0%#0/[f0]/CommNub_pre10.obj CommStatus_pre10.obj German>Nls.asm InitComm_pre10.obj Nls.asm Nls.mdf SamGen.mdf SamGenAll.asm SamGenAll.obj OsSub.mdf UserrqLabel.asm UserSysCommonLabel.asm RqLabl.mdf questTemplate.txt 1> %' '[f0] %' ' %' 'y %' 'n %' 'n %' 'ylcopy %' '@Sys.fls %' ' %' '[f0] %' ' %' 'y %' 'n %' 'n %' 'ylcopy %' 'All.sub HdInstall.sub InSys.fls Rest.fls %' '1> %' '[f0] %' ' %' 'y %' 'n %' 'n %' 'yCreate Directory [f0]CTlcopy %' '@1>CT.fls %' ' %' '[f0] %' ' %' 'y %' 'n %' 'n %' 'ySAssembler.run Dump.run Librarian.run PMake.run Wrap.run bj <11.3Ctos.lib>CommStatus_pre10.obj <11.2Dump>Dump.run <11.3Ctos.lib>German>Nls.asm <11.3Ctos.lib>InitComm_pre10.obj <11.0Librarn>Librarian.run <11.3Ctos.lib>Nls.asm <11.3Ctos.lib>Nls.mdf <11.3Linker>PMake.run <11.3Edf>SamGen.mdf <11.3Ctos.lib>SamGenAll.asm <11.3Ctos.lib>SamGenAll.obj <11.0Wrap>Wrap.run <11.3Ctos.lib>OsSub.mdf <11.3Ctos.lib>UserrqLabel.asm <11.3Ctos.lib>UserSysCommonLabel.asm <11.3Edf>RqLabl.mdf sub InSys.fls Rest.fls %' '2> %' '[f0]%' %' The first parameter is [Vol] where to get the run file %' The second parameter is [Vol which Sys.cmds to update %' Copy [KBD] [Scr]<$>args.Tmp y'Source files' '[Errors only?]' '[GenOnly, NoGen, or Gen]' '[Object file]' '[List file]' '[Error file]' '[List on pass 1?]' '[:f1:]' '[:f0: (default [Sys])]'Copy [KBD] [Scr]<$>desc.Tmp y'Invoke the assembler for the list of files given.'New Command 'Assemble' %0Assembler.Run @[Scr]<$>args.Tmp @[Scr]<$>desc.Tmp y '00' %1Sys.cmdsCopy  [KBD] [Scr]<$>args.Tmp y'Object modules' 'Run file' '[Map file]' '[Publics?]' '[Line numbers?]' '[Stack size]' '[Max array, data, code]' '[Min array, data, code]' '[Run file mode]' '[Version]' '[Libraries]' '[DS allocation?]' '[Symbol file]'Copy [KBD] [Scr]<$>desc.Tmp y'Combine a list of object modules into a version 6 run file.'New Command 'Bind' %0Linker.Run @[Scr]<$>args.Tmp @[Scr]<$>desc.Tmp y 'V6' %1Sys.cmdsCopy [KBD] [Scr]<$>args.Tmp y'Input file' '[Compare file]' '[Output file]' '[File address first]' '[File address limit]' '[Continue on differences?]' '[EBCDIC?]'Copy [KBD] [Scr]<$>desc.Tmp y'Display contents in hexadecimal and ASCII or compare two files.'New Command 'Dump' %0Dump.Run @[Scr]<$>args.Tmp @[Scr]<$>desc.Tmp y '00' %1Sys.cmdsCopy [KBD] [Scr]<$>args.Tmp y'Library file' '[Files to add]' '[Modules to delete]' '[Modules to extract]' '[Cross-reference file]' '[Suppress confirmation?]'Copy [KBD] [Scr]<$>desc.Tmp y'Invoke the Librarian to manipulate a library of object modules.'New Command 'Librarian' %0Librarian.Run @[Scr]<$>args.Tmp @[Scr]<$>desc.Tmp y '00' %1Sys.cmdsCopy [KBD] [Scr]<$>args.Tmp y 'Object modules' 'Run file' '[Map file]' '[Publics?]' '[Line numbers?]' '[Stack size]' '[Max memory array size]' '[Min memory array size]' '[System Build?]' '[Version]' '[Libraries]' '[DS allocation?]' '[Symbol file]'Copy [KBD] [Scr]<$>desc.Tmp y'Combine a list of object modules into a run file.'New Command 'Link' %0Linker.Run @[Scr]<$>args.Tmp @[Scr]<$>desc.Tmp n '00' %1Sys.cmdsCopy [kbd] [Scr]<$>args.Tmp Yes'Os Type' 'Version'New Command 'Link CTOS' %0SubCmd.run @[Scr]<$>args.Tmp Yes '00' %1Sys.cmdsCopy [kbd] [Scr]<$>args.Tmp Yes'Os Type' 'Version'New Command 'Link CTOS VM' %0SubCmd.run @[Scr]<$>args.Tmp Yes '00' %1Sys.cmdsCopy [kbd] [Scr]<$>args.Tmp Yes'Os Type' 'Version' '[File system name]'New Command 'Link File System' %0SubCmd.run @[Scr]<$>args.Tmp Yes '00' %1Sys.cmdsCopy [KBD] [Scr]<$>args.Tmp y'Table of Contents file' 'SysImage file' '[Tape name]'Copy [KBD] [Scr]<$>desc.Tmp y'Create an SRP bootable tape.'New Command 'Make Boot Tape' %0MakeBootTape.run @[Scr]<$>args.Tmp @[Scr]<$>desc.Tmp y '00' %1Sys.cmdsCopy [KBD] [Scr]<$>args.Tmp y 'Run file' '[Extra GDT slots (16)]'  '[IDT slots (256)]' '[Load offset (0)]' '[Include symbols?]' '[Symbol file (-.sym)]' '[List file (-.gdt)]' '[Image file (-.img)]' '[Realnub file]' '[iSgFirst]' '[Compress?]' New Command 'PMake' %0PMake.run @[Scr]<$>args.Tmp y '00' %1Sys.cmdsCopy [KBD] [Scr]<$>args.Tmp y'Data filename' '[Object filename]' '[Module name]' '[Segment name]' '[Public name]' '[Class name]' '[Public?]'Copy [KBD] [Scr]<$>desc.Tmp y'Wraps data into an object file'New Command 'Wrap' %0Wrap.run @[Scr]<$>args.Tmp @[Scr]<$>desc.Tmp y '00' %1Sys.cmdsType [kbd] PF ab aa ab aa Installation of Software Development ab  aa Utilities is complete. ab aa ab aa GW)@  d0u0d  0QʤhgCopyright 1988 Convergent Technologies, Inc. All rights reserved.Ver 11.3 Linker 11.3?Y!YYYY&YYYYAY+YYBY/YYYYVYYYYYY?YIY$YnYYYmYYYcYHYY`Y0YYaYbYYqYYXYYY{YNYY Y(YYY-Y2YYYYYlYtYPY[YsYgYYY:YYJYYYYYYY_YYDYY 4YYYYvY YYGYYYYYYYWY#YpY<YYYYYYYYYhYYDYSY>YYYCYiYYYuYgYYYYY.YY Y YYYYYY]YYYY,Y1YYRYlY"YdYYYYY~YvYYYYY6YY;YYeYYYY5YYbYNYEYFYYTYQYYrYYY9YYYMYZYYYjYYYYYYY=YYY}YwYYYYYY)YYYY7YYYYYYYYYYYYqYYY'YYSYYLY YfYYYYYYYY%YYYYOYYYYYoYYYYYYYYxYYYY]YYYzY3YY*YIYY8YYkYYyYYUYYYYY|Y@Y YYYYYY\YYYKY^YYYYYXY{YY@@@f@v@^!^7^<^L^m^0^=^\^^uou uu2uupuuu u+uuu uu2u7uKuuo,Mc}n(=h~    8 X     ! > I r       O |    - X  vXLc$Ms% - ~  |  a  - h     F +%K <K RK K K K 3K CK NK qK K K K K K K K K cK K K K K K ;K qK K K K K +K ?K XK yK K gK vK K K +%+%f t }   <    0 ?  A b     2    W w    5 }    J ~    . VF F F VF rF $F dF F /F F F EF gF F F F OF yF F F F F +F qF F F ,F LF pF F F F F F -F F F F ) F . F K F \ F a F F F F F F B F { F F F F F F  F A F U F F F  F ; F z F F F F  F $ F U F F F F F F F 6F HF `F F 5F _F nF F F F FF VF {F F F F 3F VF hF F F F ^F F F F F *F KF eF F z,%~,%,%,%,%,%; ; W s       (  ! &      2 A P _ d   J     ( f   * [ y : E U ` s -%-%#E KE E E \E zE E E E E E E QE mE E E E E E E 3E DE mE ~E -E ^E _E E E E E BE XE dE E E E E E _E rE E E F     F   r    -%v.%z.%~.%.%.%.%.%.%.%1%1% #'+048<@EIMQUZ^bfjosw{  AK0Y%#Q |]?2%z&5ckztt  ,   Z2%|2%5x|,X,xgxxMxxxx,xHx~C!eqt 0 @  IFyFFFFFFF7SflA2%?@???z BG-e2%2%"Wj#*eeeeD^1 ,<KKt;{#K##"#8#K##c&mmmKTl)X8R${I5055j5555g53w8G&K_wLg "F?q11S{oP0_P_O ` PPp/ ?P_p       ?# `&`0O3?@468/p</<O< =_=O >p>??0D JKoM@RPRPVPW?]0^0bob@d@eef`g/ kPo/`ww`y?y0z0 o Їpo/p0OP6*7-h'&80(/)E ." +7*i3#  %,"$+d2!1/m54)YYYYYYY YYYYY#Y(Y-Y2Y7Y<YAYFYKYPYUYZY_YdYiYnYsYxY}YYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYY"Y'Y,Y1Y6Y;Y@YEYJYOYTYYY^YcYhYmYrYwY|YYYYYYYYYYYYYYYY^^!^K K  3      E)`&q]<w D~]q =m    ! N P2xx|xxx FF1F$2@BLp "","a?|????^eeepeee#:#I#V#.#M######]cwc2EeU.5c5w5555p555 5E5T5x55555u55Y5m555:5G5n5{5555555S/b@@^u K K F E ,xF  "'?de#cm51Sb`@` `-%v.%z.%~.%.%.%.%.%.%.%1%1%#'8<E^    <  [sys][Kbd][Vid]P[Lpt][Nul]n[SysIn]$[SysOut]>$ts U_ a U_ tU_ s ! =  a K! =  SL0Ss L SL0xs! =   a U << $s ! =   a |$$=  F}d< L]LLL[KBD][VID]>$)[sys]ptrAconfig.sys[sys]CommXconfig.sys @?? @? @                rhwgsxtquyvnz{ (2a`>`c>c`1f>a1fc1l1xf1>m>v">C1o.h&j1.l>1lGho>v>>h>v1.b@.l1.?bi>x)`$.b.}d4i1_oU.'ew'^mhU|d>>d.>1w>@^>.$kxa-o'kHo$x y=@b2^@c-l-u  ro$f-U+)$m+j+ob'bh$$UlDwU.^U~ hl0(oBym-hBk>o+'b$-rhB+DBq $x bk-'h+' w' s jD^0 o-m0 p(l+- 0c4kDi+h-$U-k0$w$^$ b(?t w^Bo1v0xwhD^+D`0BC g s +(`<+p w+4^+jHiDbDj>(-va4(w( ^( f<Vy9-m,j,-tw- ^-h@,e0b?D@Ck,?0*VUx#`4v)d0wD*o,p<0v,g ?x.cN_k<f?JCxV(a74@Uo*Vv#aoV_1bV` VevDk:_/TQb^e/w?`7o5an%o:pv55/v:h :_< bTh5d/5/:@/jnT?QTCwT^Tb wC?pw4^Cb5i:j&B bh0*jI_:e5a&,e:gR5,:1aObBw,i7b;d5w h?^ d:@4w5^5*^:mG?<c/w1<w@m7a:.Qi-b-h4b>aMo<`;e7o .v`:Cbf&bEdN;} v+7eB-b@`M=c:eP_-m<f5;v-f:w;/1^;y8a/K^7fMRfO.&| dP.oF o;iIDx6&k/ `/4e1v75_7^EwBFxeoC;mI/b<lIo&v&h/&t%DnbFG0o D w^&^ ^Dw0^09d1dOg,^?h:#>Ci&b&b7y6oD&w RF^ i0i5Rb:8e&o?_>_7w5:&_5 w<m&o7w/^/d&&eMw&_0^&5:C5:d;w:ADDPUSHPQRSTUVWjh POPXYZ[\]^_ OR  CLTSSLDT STR LLDT LTR VERR VERW SGDT SIDT LGDT LIDT SMSW LMSW LAR LSL0ADCSBBAND !"#$%DAA'SUB()*+,-DAS/XOR012345AAA7CMP89:;<=AAS?INC@ABCDEFG DECHIJKLMNO PUSHA`POPAaBOUNDbARPLcJOpJNOqJBrJAEsJNCsJEtJNEuJBEvJAwJSxJNSyJPEzJPO{JL|JGE}JLE~JGJNAErJCrJNBsJZtJNZuJNAvJNBEwJPzJNP{JNGE|JNL}JNG~JNLETESTXCHG MOV  LEANOPCBWCWDCALL WAITXPUSHFPOPFSAHFLAHFMOVSBMOVSWMOVSCMPSBCMPSWCMPSSTOSBSTOSWSTOSLODSBLODSWLODSSCASBSCASWSCASRETLESLDSENTER!LEAVEINTINTOIRETROL ROR RCL RCR SHL SAL SHR SAR  AAMAADXLATBXLATLOOPNELOOPELOOPNZLOOPZLOOPJCXZINOUTJMP LOCKREPNZREPNEREPREPZREPEHLTCMCNOT NEG MUL IMUL DIV IDIV CLCSTCCLISTICLDSTDALdCLfDLaBLaAHaCHaDHaBHaAXcCXa DXe BX` SPa BP` SI`DI`ES_CS_SS_DS_DBDDDWEQUBYTEiWORDjDWORDkFARlNEARmPTRSEGOFFSETASSUMEATCOMMONDUPENDENDPENDSEQEXTRNGEGROUPGTLELENGTHLTMODNAMENENOTHINGORGPARAPROCPUBLICSEGMENTSHORTSIZETHISTYPEABS~LABELEVEN|PURGE}. TSTSUUVVVVVVV st  `' q' u' ' ' ' JJbbbJ KyE v$n^o  hIbwg|}2 bbPP___yxbbbyx~Ibxb3x2GܞܢyI   jibpbx+P_y+r p wg  x v$n#v$n`%sFt`")"(_y(I*(_y++,P./5@><&R1Q-x?B,,x,Px---x-xPD++cx0Ox-,xPP,Nx-Mx-,x4PNx7Mx:_6+x;y+x;x-P+_8y+y++P_9_NM_=P+y+P,fNxCxNexNe+P+mlijkmlHa`fedcMdOcʭK{ծNJLˆ~ 's$N ˮˑNl'sysRrsu!s 's M!uquuˌ&stь!%#!'m!s!zuv! Qu! !uuuu!z!!ƌ!sˇ!! Ύuӎ̫ }ǫ!PD( | nj"^(('(ZV <'Ίu_<( X:<>N\* )((** 6N* *** ]!7*s!oi*+*@o,n* j8*++ u[;** * ** *=n?<n9*d*n< **n *n+<s*n!nadU*s'dxnnBdndcfBShnsЩwohBeBB!Ӊ B׀ B +CTB o EBB  ! ˥ ̷o01k Ω` n 2sӴFnAOG֎Iю3-θngH+5ҏǴWbYs*4Bթ/p+xonګ.nnnx}BBӴþ7 \ݺK^ .2};,:5<q4+D"r@kH%R#bls9X=aP0zgțfΘ x(-׿)QeOvUd|WIЯ8T~Z*6MF VNCA]tuJpi_' ǧ?GYψcLʓۗh/m$!Eٙw1 y`>on&BS3j{[}@ @ [VID]Fatal Error: Cannot access file Fatal Error: [KBD]??SEG??SEGSymbol table capacity exceeded    STACKMEMORYhUSa: sn: ext: DispExt: ext: snGroup: pre: DispRel: sn: snGroup: pre: ----)(CTAsm  Page Listing file write errorError file write error********* Error #  '[sys]<$>VM.tmpVM.tmpCannot open VM.TmpAllocate error on VM.TmpWrite error on VM.TmpInternal VM errorRead error on VM.Tmp[Macro Assembler JanFebMarAprMayJunJulAugSepOctNovDec There were no errors detected 0FFFFH0H in ' -- File name too longEVAL(Q)LEN(A)EQS (!,!)GTS (!,!)LTS (!,!)NES (!,!)GES (!,!)LES (!,!)DEFINE(A) LOCAL ((A)IF"(Q)THEN(A) ELSE(I)FIREPEAT (Q)(A)WHILE (A)(A)EXITSUBSTR (,,)SET (!,!)%DEFINE(%$)(%EVAL(%$))MATCH (A)(!) METACHAR(A)LISTNOLISTEJECTGENNOGENGENONLYINCLUDE(A)TITLE(A) PAGELENGTH(Q) PAGEWIDTH(Q)PAGINGNOPAGINGSAVERESTOREINOUT(A)ISDEF(A)PASS10FFFFHPASS20HPASS20FFFFHPASS10HNo source files specified.lst.objInvalid Yes/No parameterGENNOGENGENONLYInvalid macro expansion levelyesnoyn=\z2Q       VNVFJE[sys]LptConfig.Sys[KBD][VID]l[PTR]Press NEXT PAGE or SCROLL UP to continue(Press NEXT PAGE to continue[!Scr]$$.Tmp & $ % * - , Q,,$[SYS]Config.sysCommPtr[8251],,2Knn,X` %K,@ p p0P" 7 ;"V(}Hcmz,GRE Uh32  6Vx6B/7Lx LVS "f0g i  Y  ! = a s    $>$|$$$,444Q4b 4u<< <<DLL-L[LTT-TrTT\\A\k\\\C\L \d@dlll*l8lFltt||1|()9r++P>e[*r.&v e$ $p$$,o,,,,44<D/D^DLLLToTT6\W\\\\\\O\\1\s\dlt| ||/|6HO6 *$,74-<hDLT'\&d* lt8|$801(/M)EP ." Q+7* 2i$C,34#<D L T\d)4 0%lt,|"$+ ꌀd62!#1/m 554)$(c~` <WIjY`@YHs-mbP0 a  -   yV z {05sV JPm9ur0 d  ;kP# i!!"`"#-$G$q$$$%/%%&*&D&&&',((W)+,,--..+/b// 0U0`012PEaErEEEE8FdGGDHHHfIIIIFJJ`KLM>NNN,OOPPPPPP0QQRReSST&VVWWW5XMXpXXYfZ"[[(\\ ])]2];]P]]^X^^^_N___M```.aa-bqbbb'cXcccc4dqddef grghhi#i5i?ipiiiYjbjjk\kkkllllatrvvww5yjz{|}~~~IO!FL MOU҂VX`]ˌ %` (6@eupМ p\ ̢0ä[ ^Ы5Э+B߱@PvݲPPлƼ00@@M@V.`w+ PO#-`` 0 Ifx'0 11.3U^؎]U^ t;,uw6.DGOtu]]ܷt7tE㉏,%.^wDGOt']PܷSXPXPw3P.^O,GG uX]DGX]U^GO;Owr;GsGOGG]G]UNݷt*t9FtƇ]ݷSNNU&؊܊ű> ;r+;t t ]˸]U, u@ ,;u@ P> s P@sFP0F tP~rF FFFFF㠒ȊN:r^@FFuދFPZ+ЉVFFFN;rN7F;Fs,F+F F*ѶV;vVF FFF tPFP*F tPF tPL^F~u^F^Sv6a]U^vVF^ ]UFF؈t@F@FA؊$߈و؊爆빊FuuƆ^㋇F u5PvB؀ uG BG t@Fb^"Ӎt+JtFF;r)N|^"Ӵ@F؊"ӈ$ӈuuB@#ӈQ `u5, .@ t >BuFB]UFF^F󸰜BPFȴ^HNF hu FF4FukrFuIU^K㋟s܉^FD+ADtJs!vFN>Dt:t PBD@D؊IuZD@D؊붡D@D*ٷ࿋*RD>u,PD>t]UPHF]UQQ^PF< rF HտFطPH :s*ʈN؊PH.FPFP@^FPqP@GPFt PBss 6Fsv/H.Z}p}}F F FFGF8PB7r sHFFGFȢﮀ>FuHv]U>r PB]ˠ؍ࣹ 6B]UQ^GF<uFr%~ u ^G tF<v< t PB/Ft@NtB € tA^sB" ]U"B@F؊"ӈN#ӈFF"FFFFF<u<u1F$F FFFF؊"ӈN#ӈFF"F:FuڊF:Fu< ufFFFF tc؋O  ɱuANW  ҲuB шV u:t";B#ӄu Ftf&^ G%F '^ v"k^ G @tFFv 6FvFPGF~u'Fs~t ~uFF^ sOF>^ sA~u#gF:Ft'sFr^ u$CF^ G^ G^ G:FuG^ G %F؊F v8Dur0^ v  v~  ~vP2F^ usG^ G^ GF^ONtt:w :w@~u^ G s s)!^ vtF< t< t <t~u^U~u~ t F$^=v Ps^F< t<t<u4F^2rFs!^Fr^s&PB^]Uv^G>^GC^G^G ]U^G u-^G u%^G<tu^G<tu ^G PB^G ^!G ]U&^1. PPP^ OQPPPP.D v vFPsPQvPv ^WRPdB#ӄuPPDF$FFs.^ 8Gu$O utr ^ rFPvvPvPv P. ¤ ¤>u ^  t{ G^ Gl ^ uF^ trFB# ӬuX^ GtFv 6FPFPG~uFϤu PPPPPϤ˷ǤPPPv PD>ϤuPPPPPPPP%PPϤ˷ǤPPPPPv vFPsPPvQQQv P &PB.PP^ s@PPPPPP^ G<t<tcG uZ*^ G u $PBPPPPPPPPv PPFPGFPFFP*v PPFPG~u8^ t/~t s+k~u@N:CuA"FFFrP F^ O+ȉN~Bu8PPPPPPPPF=r =sFsFw-PBlFrF=r=r B#ӚuNPPPPPPPP1PPPPPPPPF^ O uF ‰FFFsF FFFFPB#ӴFFFFFPF=t =tu~uFF FPB^ GF<uF?~v(B$t#cu|~ uv^ Grksf~u^ GFvPPPv ^WRPP. ^ uF ^ uF^ G^:Gt&EB#ӦuF FFF F^ GtFv 6FPFPG~u#F6t%%^t"GW;@u;>u6~u%F:'t:vFߴ؊PF<u&&~0vvPv^N&-~'u vP6F s6'v^vv^F<*t:'t ~t,F݊F<*t vP6vFPPFP6u~t7Fݢ讠FݍFP~*t@Pv^Sv6~uFs ^G] FP7+~(u%v^Sv6k% 1P6Fu~$tFrF ss^8Gt$P/FFvFPPFP6u6r~sv62P6o~t~uFsFFPPv^Sv6vFߋ؊PFފF<t<u F< t<tvv6^s 6Fs"F< uFPFvv^TU^GW;Wu;Gr^FGFGW^Gt FG/^Gt1ƜȜ;*u;(v}P/ƜȜ:<(*^>6t^?tS?vF:'uv~vF<$tv~'FQvF^wFPP6F~tvFPP6FNv^w P6O>t F<tP/F]UFt v L]U ^?tAQS PY sjgPL^FF.F^PvDPPRPPwmPSP6jF t vP.^]UQQ>, r vPvFP6F,Fʜ,]UQQjPP PFPY FjP^GPPFPY FjP PFv ]UQQjP0P PFPY F^tjQPFFjP PFv]U+8F u&uL PP"P&P F t-t$^ ʜPF؍G Pv ƜȜ"F&"F]UPFPF tF@r'jP P~tϠ@rjPvFF]UQjPvF]UQ*s vœjPvF]UQQ*s~t+^7œNFjP^SvFPY F]UQ t PF t PF t PF]U^t PF]U^t OQP]U5~tP5Ȣ5N4n4 s 0؈04A, 50~u~wN몊50P*ôP]U 6;;t0Ȣ;F 1(N+ȃ0;6(F uɀ~u *;FF*ȵ6QP]U P]UvHvP]UQ^F^:uH^vNt+Jt/~t)F@FNAN؊ي:t 2< tNѰ]UQFF^^ ]UQFF^^t]UQQFs:>FF=wLJ<FuAB<D0ߤ<DSPRHSPRLPF6BG Fs'PPPRP6@BGBGMBG >MCDLϤPPPPPPPPPPPP]UF @F>s WPPVN>Ⱥ##׉NH##F;u>>^F>^7P^]UF #؍N^FF^GFF<w^@FuF~F^ u&^tN tQPF؀uFFr^ u^u ^ t^^FFt,FF^ GtbA r PBBr PBmF PFPFPBFDF ^GF^F^GF ^GF t^GȋvBBȋ] UQQ^DPF؂?t#F^ȊN:r@:Ft,Fu^8r PB^F@^]UQ>LscCDPFء>G^>9GsGFLDDPF؋G>FCL PB]UQF:Cuc>Lv\LDPFء>G^>9GsGL˷DCDPF؋G> PB]U^㋇<@@>@uZ@^ P@PBP^㋇<BBG^6B| ^@Ϥs PB]^t@ϤǤϤ >Ϥt PB]Ϥ 6ڣPF؍ࣉ^8Gt FG t PB] ^GF݋^tFHFȈFF^t1G ^G^Gv݋^wvv6ڣ^Gy^ uPB][sP^G tCv݋^wvv6ڣFߴ^_DD^G^GB^G ^w. ^ uPB]^wb [ ^G ^u8Gt G tAPB]^wG P ^BȱLJ ^w ^ww . >F^u^GF^ttFFHFȈFFP2 p~u3^ tGFuuPB]vPPFPG^ t ~tFFP2 ~tPB]vPPFPG^t FP2 HFP2 ^G ~uF u tFFFFFP2 ڣ uPPF؋>G +FG ^G V ^ tG^Ge^G u t*^tPB]^G^G%^t ^GPB] v~6ڣPF؀ u G uPB]rB^u6vD;Gu(Ĥs PB^G>Ĥ^t)SPPFPG~uPB]^G ^^^G ^ G v~6ڣPF^t+G 6ڣ^G^G ^G^G^ uPB]^G ^tJBFPPPWP^G^G ^^ v>B6Q^ uPB]3^_DPF؃tPB]^w^w><sPB]6ڣPFG uPB]C:Mu^u^G^G^G^G G ^Gs<^G<^8Gr G ^O  ȉO ^G PB^8GrO  ȉO ^G PB>rFFFFFPh6@PFذG^G ^G^G7@ڣ,>ڣtPB]6ڣPFG u^G uPB]^G ^O G ^^ v~^Gwt&^G@PP^GPPr^t PBHä>u\vPPFPG^Gut ^G uPB]FŤFƤFޣ^Gu!t G uPB]CDPF؋>9GrG^G>mvv;r]^G^ G^G ^ G 2vv ;r]^G^1G^G ^1G vv;r]^G^!G^G ^!G FPP;r]^W^w vvPF^tG^GfvvPF^uGCvvPkr ^G^GvvPBr^uG^G^GvvPr^uG^G^GvvPr ^G^Gwvv;r]^t?PB]^Gv1tW^g $vv;r]^O^g^g vv;r]^O^o^g 6@PF؍G PPr ^G*^G PPr ^G PBbu<=X^\8 j q v  $ :d_8f,U>s PB]UҤ֤Ԥؤ]UҤ֤Ԥؤ]Us+FҤ=vҤߤNvFҤ]UQFP؊P]Us>ԤrFԤԤ]Us;Ԥ=rFv FċԤԤFԤԤ]UrFҤ >㪐u >ҤuҤҤ t_@FS6㪚FSFPPFPY FSߤP6ҤFPY FSPF>ԤtaSPFԤ@FSFPPFPY FSP6ԤFPY FSPFF tPԤҤؤ֤㪋]U>Ҥu>Ԥt~u"PPCPP>Cu&FPPF]U scԤFҤFؤF֤NҤԤ6`NF;v+ȈN~t^FNF^;v ߤQ+P2]U^G tOuJuu>^G:Ct CP^G P&^GPPPP]U^w(G t t^G PPP]UQP}^tWˆFFPPb^GPPTPPI^GPP;PP0䪸PP!䪸PP]UQPPP䪋^F~t%NPPF^@PPՋ]U^G P^GP]Uq^G Pu]UQQҤF~uF ~uFFsNNFN FPv]UQsws PFPzPvzmҤFP9v3~uVP'vK"~s TPvUPF,P]Urs?Fs PHPv z PF PzPFPzmvv~ t Ft ,P~F ,VPov ] UrsBFs PH PF Pz*PF Pz5PFPzmvv1~ t Ft ,PF ,Ft,\P TPv ] UtP(Ԥ=w^GҤ=v6>^FF^.1;Y^tjEPV^wPPPO^GtP^wwP6~^tEPV^wwwvwRPV^wwwvwC^GPGPE^GP^wGP-^wGP FF^G>s .PB]UsTF#؍Nڤ?u@t8ڤwPܤFHPܤw!FPܤwWڤ?s F@Pڤ7vڤ7+FDPڤ,PFPڤ,P]UQCP6Ф1vФs^ߤ^F ޤu]U>ޤtEPP^GPPvФI^G>s .PB]UIP6vxF&ФФs/>ޤuP^FPPaҤ^KPPNޤ]UQҤԤ֤ؤP6ܣPF؍G PNPMPPPPPSSSSCSPRPSPRMC]U>Ϥu>Luär/PBPPR>Ťu UPVPPEŤPP:ޣPP/]Ur(*~t^PPNF*]Ur*vc*]Urr > uF]Ur*vP*]UQr4r-*FvP*F]UQQF`F>uFFFtP,Pv]UQQS^SFPFPY F t vWPVs3^s,S^SFPFPY F t WPV]Us!t, Ȱ  뮢ꮢ ȿtr+ 10Fs+œĜ@PxœĜ]U>tH7rrsZĤ ꬹ6rIsﮈFF :v؊:t t uNvFP6f^FFs: 魊N^Ƈ^Ƈ ꮊꮷ魹  *vP*ꮷ魹ꮈF^&?ttCsP> u6F< v< uOWFP/݂>tր~ t#~ u P'~ uP6qFi 8Fu X~ tR~ uH":tƇ Ƈ :sP F]Us::u F:sF记PF:v P/]Uv/]UrI>r1>s;>t>rFꮷF]UF]U>sFꮷ]U^Ƈ]UQQFFȊ^:r1ヿuF^㋇;Fw FFFuÊ㋇t ,ƄsSLJ]UrF VN^VQRQPvvF=u&F^NPQPPvvFPFPvPPmmPF t WPV^㋇F9Fr9 FF6vv F t˿WPV뿋F FFF6^SPvvFP$F t WPV^Ƈ]U ؋Fؠ;v P}F;u*ƇF@PF FFF6SPvvFP#F t $WPV]UFFȊ^:rヿt ;FsFFuظ9FsFFȊ^:rDヿt4;FsLJ^F)^㋇;r@Fu]UQQ@s *^˷^F~t/>u PȢN؊sP^]U@sF|FzFFv^"&@Fv^"&x"ti&Gwub@JP(F u,vZ^F&^&G ^S1F tvF^"&@VZ&PX^&GFth~$^"&Gwt^FFFFFFF¹FFFFFF^"&GsF&GqF^&GcFFPFP4 tF~ r ~rF ~ rЈFF$F^SvFPvFPPTF t^"SQ4F  FTF^"&GF^"&GxF^"&Gz^"&s &_ ^"&_`F^"&wgF&_v˷dF^"&wxP^"&wxPF@F^"&Go^"&wx&wo^"&wxP^"&G :bt:`u^"&G tu ^"&wx ^"&wxP^"&wxP^"&G :at@^"&G :cu&G tu1Fֹ@@2^"&u&Gn(^"&u Fֹ@@Fֹ@@ ^"&Gn^"&wx&wn^"&wxPFֹ  ^"&Gp^"&wx&wpsPFPhDFFs|v$PF$PPF ug^"&GFF^"&G& GtvPFPPF u5^"&GFF^"&G& GtvPFPPF u] UF^&u&wxP^&wxP^&Ltb&GZ tXFF&G^&wLFP t^&^&GL^&G^&G^&wLFP\F^&gp}^&wxP^&wx&wp^&Gwu&w-TF tF^&G FF;w|^&x"tf&Owu?&HJ tQ)F tFv^&@V t4P2F t&F!v^&XV^F&^&GFtzsPFPhDFFsmvPQF u]^&GFF^&G& GtvPQF u0^&GFF^&G& GtvPQF uF]U^&G :at/:ct):bt#:`t:dt:et:ft :gt ^SQ4]UQF :r10^&Fr^&0FFF 10^v&F@]U vvFP63F^SvP}F^&:F@F^PvPXFF^&:F@F^PvP0FF]U^&<{t<[tFFF^&^&?{u>}N u+JV s\tWNAv~^YF@^&^v&48 ^& ~]N u+JVuF HN;v9@N +^vp^~&=9^YF@N +^&CFP,F u^&O@wA^~&=9^Y^&G@^&^v&48^&v&4^P^&wg&we^&^v&48^&]U ^vFF^&F^&G^vNFY^&Gw^ &Gj^&GyF^&^vNFYFP,F uQ^&G@^&^&O@wA^^Y^&Ƈ^&Ƈ^PF uI^ &k]u+JBV^ GkPRPPP^S|PPP] U^&G F =wmt =amtI~]Nu+JV^SBRPPFPQ؍GPQF!t=uF~^&Gi^GePF^kvNFYF^&^S^Sv^SFPfF uF~u;^SvRPPRPF=u^v&xF^&Gi뾋F u9^SFPvRQWv Pv6jF u ^&G ]U ^&G :t X^&G ^SrF u^&FF^SGkPF&P^SFPpF u^&Oit^v8x^&GiF^S^Svu<F tM^G8P^SvRPPmmPF u"^&w8F t^&w8 FF]U^&G :t ~v F^&Gj]UQQ^ &G :dt:ft :et:gu^ &G :at-:ct':bt!:`t:dt:et:ft :gt~ wc^ .q,B]f~^ &G~^ &Gu^ &G :cu$&Gs&;Gqt'^ &su$^ &qu^ &G :auFFv^ &@q3^ &Gv@^ &G :atB^ &G8^ &G :bt,^ &G6v^ &G :bt^ &G.^^ &G :au ]^ &G/C^ &G<^ &Gh&Oi$^ &Gq^ &Gs^ &Gl^ &GjFF^&] U^.]U^.&] bUPSQRVW^0u x@Ƈ0_^ZY[X]Uv ~N< t< t < t< t+~] U?U>@H ; w3ǁFıV&t&u#&t&DŽ&DŽBřN tƇ23U(>Ƈ0U ;$t6ķ&&,&FA +;$r3,z>ULJ@Hu HU ;$t2uLJ@ LJ@UU&>>ȋz>ptx0> tf."tPt,<t<u$h tSLƇ2@ uLJ@ߋd+w";fw "t>Ft;wm3EUt2 2t'Ƈ2;$t@uLJ@ 0uS-LƇ|UUpu31u,<t&<t".t5u < u Ƈ5 Ƈ5< tYd;r";wNpt@t9t0,ht :iuĿ&E&&&n;drXdrQჿ`u  `+^"Ŀ&S&C+t&E3퉯^&FtLJFRLJ>U`u`+^^&Ŀ&S&cFtLJFUd;t&r";v ;drdrLJ>QtĿV&&UƇ4tRPx>p$p>XZtLJ@0uS-LU>Ȱ>tJz>Ƈ|"t5&d;w&";w;^s^Fu33U*ƹPFP4 tƹ>ƹ u ~rƹ >ƹ s2^Svs#^Sv^Sv ^SvPle>ƹ sйvN FйF^FFFFFFFFFFFF FFFFFFFP]U(>ƹ sF uv vvPl'FڈFFF FFFFFFP;]U(>ƹ sFuvPlFڈFFFFFP]U>ƹ sF uv v ^S*l8>ƹ rv v ^S74ȹFFv v ^S^S ]UQQ>ƹ sF uv vv8l1>ƹ rv vv8|̹FFv vvP ]UQ^SvFPFl t Ft@]U^&&GFPF uFF^&G&GStF u(vFP\F uF;Ft ^&G]U^&GtP L]U~u]UFV>]UV>]U+Zr tH]U+ZrH]U3 &L&;Wt]U vPFPPF uxFV^&&W~u~tYFuRFVFV)F^v^ SPvvFP#F u^ &?Gu&G &W^&&W] UQ^ &G :mtS^S|2^ SFPF u^ S^S|Fm^ &O ]U6P6Pt u%6%66P\ u6=t=!t3]Uv&D ~ sУFP,F tq PPP/F tVF8:&GF8&GFs1^SPCF u8G$PPCF t.8P:XtN8:&G㍇FF8&8&G ^&8&G8&G8&G 4568&GN8&ONsO8&G8W$+8N+8&O8&G08&G&_ 8&G"j2:8&G8&G&G:8&GF:-8&G8&G `  㡔؍8&G&_rFFFHN;r~^8ueVsYF^P;Vt F@FN+PFX^@FPFX^@Ftw]U8&F9F u.8&GFs&GFF 8&G-FF ;FvNFs8&G FFF`8&+G F1v~^NNOO|F+F FNsRQPPi$F tVPvvPvP^F8&G FFF`8&+G F1v~^YFsF+F 8&)GF 8&Fr F8&G]U8&]U F FF FF tl=vF FFF~t.8&w^SvvvFP#F tP0̋F)FtFFFV덋]U^ &G8&GFF^ &G HN;ra&@FrK~uF^Gv^ &@ F^ &+^G^ &F^GF ^FFu] UFsFFFF F3^ FFF;u^SFPFPFPFFFs&FsFFF^&t&G^ GFrF8&GFF_8&G ;Fw^&t/nF8&G&;Gs PF8&G F^&^&^&G^&G`+F+1F^  +F^ G8FuO^&G8&GFF`++щV^&G^&^&^ &^ &^&8&GN;w&;wA^&8&GFFFV+‰F FFN^&FFFFFFF^&G HFF9Fv^&@]FFF^&H N^&@F:Fu;Nv F:Fs F@F룋FU 8&GFF&ONF `++щVFFr28&G;Fv%^&^&;GuF^&GFNJFs ^Sr ^&w&wvPPP^F^&G^&^FF^Go,]U 8&GFF^&;Ft68&D;Fv^&GF8&G;Fw@Fs ^SrvvvPPP^FF 8&+G1F5svP&_^&G)FFF^&G HN;rw&@FsFYFF;FuNF^ Gv^&@ ^ Fs$6s^ G^ G^ ^ G^ o,FtzP] UQQ8&GsRPvPi$Fn&&GF^&t&G8&G ;Fv:&GFF8&G;Fv!^&tF&G^&GFҋF8&G ]U8&Gs]˚,Sr]U  Q8&Gs$F8&GZ&W аu@5F6]U].@]UPPFP/F^&G ]UQF A:rv^SPPPFP#F t v Fv F t( ^&?t' ^&G^&G^&G^&G^&G^&G^&G ^&G=^&G ^&G/^&G^&GD^&G^&GBg^&G ^&G(^&G,^&G ^&GQ^&u^&_^P㍇LP*F uP^㍇|P*F tFP^GP^&GPRPPrmPF tv^ĿLWPPPFP#F u5FFv^Ŀ|WPvvFP#F t v Fv F t) M^&GQ^S6\F u)FP^S\P^SFP\F t^&G F]U^&G :gt 5^&G(^&G,^&G ^&G5P^S^S\F]U^ &G :gt &^   &GRs^&^ &GR^&]U ^&GuFPFP4 tF~ u ~rF 9Fu 9FrF ~ s$PFPPF u%~u!vF u ^&GuF]U&_]U4sP tG$^FFFFF;Fr(^& t&G r&G;FuF&GF s͋]U 4s~ tu$^FFFFF;FrV^& tF&G s>&G;Fu5FF^&F^&^&G^&̋F^&G^&G F s]U 4sX tO$^FFFFF;Fr0^& t &G r&G;FuF&G^&G F sŋ]UF ]U욖,[،;t S&_K rX-6PSԃ RVU*,X-YPԃRU[U]"$&(*6,>.60 U]6"6 Ў؉$&(*6,>.0UFPFP^S]UFPFP^S]U^ S^S4]UFFFFFPFFFFPFFFF^FFPtFuFF u)vFP\FF^&F^ &]UQ^ &GF&Z&W&G&O&G &G &O&G &W"&G(&G*&G,&G-&G.&G4&W6&O0&2<(Y~ rmuC^ &G &Gd&G&G X^ &G &Gd&G&G ^ Svv6Fm^ &O ] U^S^Sv^Svv ^SvP ]U^S^Sv^Svv ^SvP ]UFPWv^ S^SQFPQ]UQQ^ &G :dt:ft:et :gt~ wz^ SPF uP^ SP\F t^.h2QvFs[waF^ &GZ~wLF^ &GE~Kw6FF;s؋d;FsFF@F uwqF^ &G :atQF^ &G=[^ &G :bt8F^ &G;B^ &G :bt~w5F^ &G.q^ &G :au ~wيF^ &G/ك~wnFtuF^ &G]FtF =rmt=tmuTF^&G?Z&WA^^&GZ&WF-^&G"~u"^&GAHFP{PuFP^v@PFF+PRPPrmPF~u>v^SPPPFP#F t v Fv F t( ^&?t' ^&G^&G^&G^&G^&G^&G^&G^&G;^&G ^&G=^&G ^&G.^&G ^&G/^&G^&GG^&G^&GHF =wmt=amue~ mmufF =rmt=tmu d^&G ^&G ^&G(^&G,^S6\F u/F^P^S\P^S^S\F t^&G F]UQQ&^F&G ,&O'*< t < t PD]U&+s \+FFFFPF tFP( tFFF0N^&WV*VVVމV^FN&_㉇FPtF uvFP\F u FF tv)^&_LJF>F&w扜^Sd^ڌFv&\Fډ>@]UFFFFPF u|^&w拄FFF0F*NN&ONF&GHFFPtF uOv^&w=SP\vFP\F^ƇF utFFFFPF uFFF0F*NN^&ONFFPtF tv)^&_LJF4vFP\Fv)^&_LJF uF]U0  FFFFPF uq^ &w拄FډFF0F*NN&ONFF&O?NFN NF^^F&^ &GHF֍FPtF t^ &;u vڸPSv^ &w;SP\vڍFP\F܋^Ƈ^&GF^&F=Ct=cuFZ^ &G?FҌF^&?t.F^&HN;r^ &_^& Fu׋F^ &GEF܋] UQ^ &G^ &G^&G^ &G^&G^ &G^&8Gt/^&u ^ &G"^&u ^ &G^&G^ &G^&G<t<u^ &G^ &GFF w"؋d^&;Gu F@^ & Fu^ & ]U&FFFFPF uo^ &w拄F܉FF0F*NN&ONFFF<uF FFF~uF FFFFPtF uv܍FP\F uFFڋ] UFF w8؋@ >t#ćFF t& t PFFu]UP(F tPDOFNF^FFFN^NNNFFNFFP F tPD]UQP1F tPD6 P\F njޱ;u$:u>0t1\F tPD\UQ^&GHF~ t9F ^㉇һF^F滌車F^ Ƈ] UQFF w+؊s㋏һIһ u ƇPs\Fu]UQ^ć滣PF tPD0*&O^ uPtF tPD]U^V ± ؎Á]U^&^&G :dt:ftSv^ S^S^DV^&G?^ &Z&W^&G?FFF9FvF^Sv^S\F^&?t=ZuZ3F u^&.t&G9s!^&? u^&^G^ &Z&W^&G9FF^&HF9FuN+N^v8 u+JVtщV^& F;Fu ^&G9^v&x u^&F@N;sF+A^vp^~y^Y^&GE u>^&GGs0&GH^&v &<u+JVt B^&]UQQ^&^&G :et?:ft9:gt3S^ Sv ^SM^SvFF u6^&^&;F s"^ &F^&O :guSPø]UFf]UFV v]UFV v]UFV%]U^&G(F&G F&1t SvO^&/ut~ u@&G:r8S POF u^S POF th^SvPU^SvOF uD~ u ^&G:1^&G:'^&/u ~ uS P^SvOFF]UQQ^&OBN&GE1+ʉN&GE&OD;sF]UF^ &G(^ F&)G ]UQ^&/tS POF u&^&/tS POF u ^&GE]U ^&G(F&GEF&GBF uP&GEY1+ʉN&GE&OD;s S6lFF;Fr\^&GE&:GDuS6F uD^S POF t!^SvFHPF^&GEF^&GEFu]U^ &wĄLFF^ &_ć|FF~ ~t u PDF ^&NFFt(#^H^&Z&Wv#^&^&:F t v&Z&T] U^&G(F&G F&1t SvO^&GQrFF^SvFPHFw^&:FuFFHN;s[^&F^&OE&:ODu< t< tS6F u{^SvOF u~^&/u~ t^&/t ~ u&GEF< t< t < t^&GEFtk~ uS^&/t)S POF u\^&GE^&/u^S POF u^&/uz`^&GE&:GDuF< t< tS6F uUF< t:^SPOF u^F&GF^&GF^&GF^&F^&GF^&GF^&GF^&GFFHN;tFH;uF;Fu* FNF;rE;Fu^S^SQF@^S^SvvFPF u.^S^Sv ^S^SvFHPFPFNFȋV;r +V+FFFFF^&GF^&G]UQQ^&GFFv&t(؊F&^&G$H&;G(v&G( ^&G(^&G ]U^&G5s&G5F^&G$H&;G w.&G=t ;Fu &G5,SP,FF^&u&_<F^&u&_  8 F^Sv]U^&&WF F u2NrPP@P/DND u@F F^ &?TNt4hF HJ&GH^ &O>HF u+JLu4-^ &GH6LH&HH^&Z&WF] 0 Wc~U,*äŤƜȜ+FP6lFvvFP63F v櫷Ƈ:vl櫷Ƈ vW櫷Ƈ-FX썿請櫷Ƈ-F-lPP6P6]UF 10Š櫷竊F10諀]UQQ<쮄欣謢Ĥä6F66FF:-s%ärvPSP6'6FҰ PP6 PP6]UQF P|P PFP6aF t*PQ6w*^SPPFP6aF^SPPFP6aF]UQSv6F]UQ@rJjPFPWPFP6aFjPPPFP6aFjP P6FZ6,-m P66+-,@60s6BœĜ@rjPjnjޱ;u$:u@s> t Sg^s/jnjޱ;u$:t S16c6:]p U^DrC. ~. Ȏ]Invalid numeric constantSyntax errorExpression too complexInternal error #1Invalid arithmetic operation for relocatable or external expressionInvalid use of register in expressionInvalid use of PTR, must operate upon address expressionUndefined symbolForward reference to EQU'ed register not permittedSIZE and LENGTH must operate upon data symbolInvalid argument to ASSUME, must not be forward referencePROC/ENDP nesting too deepMismatched PROC/ENDPInvalid origin for absolute segmentInvalid redefinition of symbolMismatched SEGMENT/ENDSExpression must be absoluteValue too large for fieldStrings > 2 characters allowed only in DBInvalid SEGMENT/GROUP prefixLabel phase error, Pass 2 value differs from Pass 1 valueNo ASSUME CS: in effect, NEAR label cannot be definedInvalid GROUP member, must be a SEGMENT nameLimit of 255 EXTRN symbols per object module exceededDuplicate declaration for symbolNot an address expressionArgument to END must be a NEAR/FAR label defined in this moduleInvalid argument to ORG, not absolute or offsetToo many GROUPsToo many SEGMENTsToo many GROUP membersSEGMENT nesting too deepInvalid destination operandOperand must be a BYTE, WORD or DWORDOperands not reachable thru segment registersToo little space reserved due to forward referenceInvalid combination of index and base registersInvalid types of operands for this instructionMay not move immediate value to segment registerInvalid shift countRET outside of PROC/ENDPOperand must be NEAR or FARNEAR jump to different ASSUME CS:Conditional jump to FAR labelSHORT jump to farther away than 128 bytesSegment size exceeds 64K bytesNo END statment or open SEGMENT/ENDS PROC/ENDPMissing right ')'Invalid character following the MetacharacterInvalid controlUndefined macro or controlInvalid call patternInvalid pattern argument to MATCHInvalid LOCAL symbol definitionMacro or INCLUDE nesting level too deepInvalid PAGEWIDTH or PAGELENGTHSAVE/RESTORE nesting level too deepRESTORE without matching SAVEAttempt to redefine builtin functionMacro attempts to redefine itselfInstruction always uses ES:, may not be overriddenMay not index NEAR or FAR expressionAttempt to divide or MOD by 0Two memory operands are illegalDUP factor must be positive integer and not forward referenceSymbol may not be both EXTRN and PUBLICInternal Error #2@Yf}2Cv2Qi V4dt&Y2Tr*:Uj 6[} Q y ` <WIjYUQQFv 6,F<u0P6]~)uNuzF<(uFPnF:'ubv 6,F؀Pu",0F~tv 6,FPv^N~'u v P6 6'v^v v6 vv^QUQ^G^_^^^^G W^G^G^G^G^GW>@^GW]U(v 6p@s=r@r =~s7Ɔv 6,؊P:'uhv 6,<*t v P6,v PP^P6u讍P*t@P^7SP6dt1Ɔ<t<u2$r9%$$E>$u :P63$Ȣ$s؊$$6 v P6FO 6sTœFF\œĜP6:^G ȴ@'^G P6:^G ȴ@%FœĜ^w6] UQ^?s ^:8Gu&8Gu!G8ti0 9< v%:s 0Pv^ 9A, Pv^ :*>9u>8t:r0 :90Pv^ &08됰HPv^ s!FsFXF F 66{O] UvSvP6]UBF@F@Fv6FBF@^FBF@F@F]UF^ ~uFsX.P6,^ F,PP6..^ G^ G.O^ O^ u~u]U^7P62^w؊F@^G22?#u`^u"4P62G2G^G4^wP62^G^O2O^O2]UB@BFڠH FFBF@FޡDFܠ77^7~DHDذDIDHFNQPSP6' PPr P6؍ࣉ^؋Gr6s P67H 򤊎FFBFޣ@FܣDFڣB@]U~tF^G^o_]UQQ^G@ %^G^GPGP6F؂t; ^ t <P6^66^G ^G^PPP6^GPPP6^F!^GF]UQQ^tY^wP6F؋ONw6v6^wP6F^!؉O^^G^O ]U6rW^PF^_.'Jd%r&rF<t<uv66rs%r-&r&F<t^<tZ~@u~u ^G%r&rF<t<t<un^GF^G ^G~@t%r&rF<t<u^GFuGG ^GG^G@ %^G^GPGP6^GPFP6F^uFG F^G^G^G^G^G^G66^G^GsFF<t<t 6P6SP^PF^G^GP>WPP6>^GI^Gu'PFPFP6FPP6F؋G^^GF^F]UQvP6FءGF]UQQF t(PP6F؋ONGFFFы]UQv v6F؋G^F]UQQF t/PFPP6F؋O tQ6v6FFʋ]U^?w^F@^]U^F@^]U^]U]U^PF^_.SS%h/~tFv^GPF:'u/^G&~u#F,0^Gv^GP^G~t^G^G|~@tF<t<u^GFG@ %^G^GPGP6^GPFP6F؀u)vL;Ou$PDP^w^GP"F^G^GP>WGPP6^%^Gu>uFF]UQLFPPDP6EPPMP6NPPVP6]PPcP6jPPuP6|PPP6PPP6PPP6P PP6P!PP6PPP6PPP6PPP6PPP6PPPPP6PPP6讴$'%%&67"6 PQFP6$FvP6;utȈ.u爆tȴ>t劎*ȵ򤊆*PܣP6P6. u2򤊆򤊆.PPFP6$NvFP66P6. uA򤊆@s6.PPFP6$NvFP66P6. tKPPFP6$NvFP66 ^^Ɔ PP PP PP PPPPТPPts PP6EP6. uPPFP6$NvFP5P6s?P9P6s&P?P6rGPP6EPPFP6$ u2Fvudžldžj\P6 PPFP6$ u2Fvudžldž_ZP6]U v6. uvPFP6$F~waNv~FFFFPeP6r"FPiP6r,FPlP6sFPnP6r^]U <r"^&&W&Gr&G;F s Wv rX^F&F&GFFF;FsN ;Nvr&@FFڋF;Fr ,rv@^&Z&WSr&_[&G]Us] r&G@]U cr r&G;FsGvrX^F&F&GFFF;Fsr&@FFF]U>punP6 u$>ptn&Grt>tt>rt]ð]UF 1F1FF1Vu FFmFm1FF1VF1F ;vN^㋇p;FvNFF^&F 1^&W^&8Os&^F+p@^&GF1^&WF <1^&WF 1F1^&WF 1º PF1Y^&G]URPPFP6rF uK~tE^&t6G^&G&vH^&@~]Ux vuPPvP6%F u{v&G < r < wf~rHF sFF FFF| zuPPzP6%F uoz&G ^ &:GwY^ &GzX ^F&G;FsF^ &GPP^&GȴP^Sv6F tn<~u8F^ &OQP^&OɵQPv6FF tUV~uF~ t~uF r~t6FPFP6FF^&~uq븋F] U^ SP^S68]U^ SP^S68]U^ &G :t xx vuPPvP6%F uVv&G < rL< wH^&^&G^&GP^&G^&G^&G^&G^&GA^&G6| zuPPzP6%F uz&G ^ &:Gw^ &Gz@ FF^ &G^&^&G^&G^&G^&G^&G^&G^&G^&G^&8G uA^&O^&8G u@^&G^ &GA^&G^ &G^&G]U6^&^&G :t O uPPP6%F t&G < r6<w2F ^&~ t^ &?uxPPP^ Sv 6c>u!FP6F u ~ r uPPP6%F t^&GF&8G w ]FX ^Fv&DF&GF&GF&GF^&GF&GF&GF&GF&G F&8G uANsNQPP6F tX FFF ;FwD FrF9F w^ &FF^&O&@^&G^&w FA:r 6^ &duCX^ &G ^ S^SFm^ &G F]U^&G :?r^&G :Xt:u^&G&G &W"^&&Wc^&G :CuX&r&G&;Gv &G&W^&G&G &W"^&&W^&G s7&G s/^&/&_!^&G :u^&&G ] 05sVU~]Nu+JV~&Nu+JVu F@;Fs F@;Ft ~s ~u(^&GM&_O^&GL&^v@^&GMZ&WOF@N+^&OL^S^Sv^Svv ^Sv65F u1F =wmt=amuF =rmt=tmuָ^&G ]U^&^&G :t :ָt ^S^ Sv ^S6]U^ &&W^&^&G :t :ָt ^Sv^ S^S6]U^&G :t :ָt ^Sv6*]U^&G :t:t :ָt ^S6D]UQ^ &G :t:t :ָt v~ wJ^ .Mir{^ &G=2^ &G;)^ &G.^ &G/!^ &GB^ &GDFF^&] U^ &G :t:t :ָt x~ wT^.4444(4449EF^ &G=?F^ &G;3F^ &G.'F^ &G/F^ &GB F^ &GD]U^&G :t :ָt ~v F^&G1]   U츆Vnjޱ;u$:u ^&G(@~F =rmt =tmt ^&G ]UQQ^&^ &&W^&G :t WFP6>F uC~uF1~uF$^G^ &Z&W^&F^&GF] LIBRARY: Ctos.lib VERSION: 11.3 (Friday May 27, 1988, 11:21) LIBRARY: CtosToolkit.lib VERSION: 11.3 (Friday May 27, 1988, 11:22) LIBRARY: Assembler.lib VERSION: 11.3 (Tuesday May 24, 1988, 19:52) COPYRIGHT 1980, 1987, 1988 CONVERGENT TECHNOLOGIES, INC. ALL RIGHTS RESERVED THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE SOLELY FOR THE OPERATION OF A DESIGNATED COMPUTER FOR A PARTICULAR PURPOSE, AND MAY NOT BE COPIED OR OTHERWISE USED WITHOUT THE PRIOR WRITTEN CONSENT OF CONVERGENT TECHNOLOGIES, INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, INCLUDING ITS SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT TECHNOLOGIES. VERSION: 11.3 (Friday May 27, 1988, 11:41)  CommNub_pre10 CTAsm 11.38??SEG??SEGDATADATACommNubCODECommAsmCODEDGrouphh2hLh  ResetCommPortpIsrTxData_pre10FIsrTxData_pre10 RawCommNub MedCommNubIsrSpRxCnd_pre10wSI. pMedCommNubIsrRxData_pre10 ,pMedCommNubReturnpIsrRxData_pre10,IsrExtInt_pre10SpuriousRawCommIsrYpSpuriousRawCommIsr pIsrSpRxCnd_pre10 pRawCommNubwDI0pIsrExtInt_pre10MedCommNubReturnBioIntCtl rgCommLineEoiClassCrashMediateIntHandlerPSend6 0`UTTTTT T TTTTTTTTTT "$&U  QVRWU& &8&\ &T$&6.&&6. u@&T(8>&&t& >t> u"]_Z^Y[X&(&*&,P6(6,6* u6.T(8>˚aAUD&60P&6.&>0&\ &T$S&]&6.&T(8>%DVVU0U78UW$>0>(>>>>3GU^] A T TCOMMSTATUS_PRE10PLM86 V2.305/24/88 17:00:0֖;STACKMEMORYCODEDATACONSTCOMMSTATUS_PRE10_CODEDGROUPh@=HHDTD., K8IOINTCTLEOICLASS RGCOMMLINE IOEXTCTLREGLREADCOMMLINESTATUS_WRITECOMMLINESTATUS_VALIDATECOMMLINEHANDLE@ ., DUv PF t> F t?F&7&< sE<s FN FFuFF uNF@t]`&&? sPF XP+F XFFuFFuNFuNF #F^&]\2DMąĒħUQQv PF t>pFt?dFtZ&&? r&&? s N N F&&N V ҲuB""&]h \3@` ĆKUF tF0؋.;Ft!&&? u~~r>]"$tGWS!U DxxDs` 4БT^{e Copyright 1987 Convergent Technologies, Inc. All rights reserved.Ver 11.2 Linker 11.24j.C=q$9j%;y$2^^^^^^^^^"^&^+^/^3^7^;^@^D^H^L^P^U^Y^]^a^e^j^n^r^v^z^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^p5     A x   K   H n   E    A r    N   #Q_V n~$$$M$|$$$&$$$%$B$$$1$N$^$;nMs 'Sw0-<L`  7^^^^X.j''CAC7III^^:XTY }Ak/J[[[9|D^O (QwSfl`g``M````,`H`Evc < ,'0'1~##O P/0`/#`$/&0'_)@. 7_9 `<PFJ/NNOO_0P?PORo ST\_`acOcfg mqrtpu vw/y 0y?/ O?P?0p6*7-h'&80(/)E ." +*3#  %,"$+d2!1/m54) 9A]P2E   ) `      &   l   , ]    3 p  Cf9$$ ?q ( U  dl.BI mm,mA]lU1JJJ[[^|||LQ``|```Ke9Ll7lX#+P^  $ w   M q    L < 6& MeQ$2@p y$+.>CImr1J[{|Q`# UF tP L]UP^SvvP3P]U\FV%FF%FV^SRPFuvPPPvP3PxPP6vP3P\PPPvP3P@PPPvP3P$] vFV;V u;F sFFrٰ ~H^SFPPFPFu~uvF8F~twvBF0F<9vFFvBFF$0F<9vFFvBFsvZBF< rvvvvrP>PPPvP3PPvvu6rPvvu6u]U vPFPTF uRPFPFPF tF]UQQv؉FWPFPPDNF؎]UQP6:PP,PP xz|~P\FPPPTPPS6RPPrmPxSPPPPPT t6rPS6RPPrmP|SPPBPPPT t= tP ꣒PS6RPPwmPSPPPPPT uS6PPzs PPPT uS6PPFsP6. P6 Fr PP;PPP<PP<P ]UFPFP"V^&?{t@&?[uP6:t. FPQSVSVQ^[Y=Xt ],N~] t&<}N u+JV s\tWNAv~^YF@^&^v&48 ^& ~]N u+JVuF HN;v9@N +^vp^~&=9^YF@N +^&CFPDF u^&O@wA^~&=9^Y^&G@^&^v&48)^&v&4^P^&wg&we^&^v&48+^&]U ^vFF^&F^&G^vNFY^&Gw^ &Gj^&GyF^&^vNFYFPDF uQ^&G@^&^&O@wA^^Y^&Ƈ^&Ƈ^PF uI^ &k]u+JBV^ GkPRPPP^S|P/PP] U^&G F =wmt =amtI~]Nu+JV^SBRPPFPQ؍GPQF!t=uF~^&Gi^GePF^kvNFYF^&^S^Sv^SFPfF uF~u;^SvRPPRPF=u^v&xF^&Gi뾋F u9^SFPvRQWv PvF u ^&G ]U ^&G :t ^&G ^Sr<F u^&FF^SGkPF&P^SFPpF u^&Oit^v8x^&GiF^S^SvuF tM^G8P^SvRPPmmPlF u"^&w8F t^&w8 FF]U^&G :t F^&Gj]UQ^"S3PF u2^"S^Svv^S^Sv^ Sv vv3<<-s2^"S^Svv^S^Sv^ Sv vv] U^ &GusS^S.-s^ S^Sj]U^&GusSvv ^Sv"$-s^Svv ^Sv,]U^&Gus Sv6$-s^Sv-]U ^&Gus Sv!-s^Sv%]U^ &GusS^S1-s^ S^S]U^&Gus S/-s ^SH]U^&Gus$Svv^S^Sv ^Sv01-s'^Svv^S^Sv ^Sv]U^&Gus$S^Svv^Sv ^Sv+1-s'^S^Svv^Sv ^Sv]U^&GusS^ Sv ^S #-s^S^ Sv ^S]U^&GusS^ Sv ^S#-s^S^ Sv ^S]UQ~^SPF u'^S^Sv^Svv ^Svt1-s'^S^Sv^Svv ^Sv]UQ^SPF u*^S^Sv^Svv^ Svv4-s*^S^Sv^Svv^ Svvt]UQ^ &GusSv ^S,|-s^ Sv ^S] U^ &GusSv ^S)-s^ Sv ^Sn] UQ^ &GusSv ^S2-s^ Sv ^S]] U^&Gus S$-s ^S ]U^&Gus S#D-s ^SK]U^&Gus S5-s ^S]U^&Gus Sv&|-s^Sv]U^&Gus Sv%l-s^Sv|]U^ &GusSvv-T-s^ Svv]U^ &GusSvv*<-s^ Svv]U^ &GusSvv4 -s^ Svv ]U4~F =amt=wmt=rmt=tmt =mmt&^&G F^&Z&WF^&G]U^&^&G :t ^&GN ^&]U^&^ &&W^&G :t ]UQQ^ &G :t-:t':t!:t:t:t:t :t~ wc^ .Okt}  ;D\enw^ &G~^ &Gu^ &G :u$&Gs&;Gqt'^ &su$^ &qu^ &G :uFFv^ &@q3^ &Gv@^ &G :tB^ &G8^ &G :t,^ &G6v^ &G :t^ &G.^^ &G :u ]^ &G/C^ &G<^ &Gh&Oi$^ &Gq^ &Gs^ &Gl^ &GjFF^&] UF 1F1FF1Vu FFmFm1FF1VF1F ;vN^㋇N;FvNFF^&F 1^&W^&8Os&^F+N@^&GF1^&WF <1^&WF 1F1^&WF 1º PF1Y^&G]UF =wmt=amuF~]Nu+JV~&Nu+JVu F@;Fs F@;Ft ~s }~uf^&GM&_O^&GL&^v@^&GMZ&WOF@N+^&OL^S^Sv^Svv ^SvF u l^&G ]U^&^&G :lt ^S^ Sv ^Sd]U^&G :lt ^Sv]U^&G :lt ^S+ ]UQ^ &G :lt m~ wA^ .^ &G=)^ &G.^ &G/!^ &GB^ &GDFF^&] U^ &G :lt l~ wH^.ZZZZ6ZBNZZZ_kF^ &G=3F^ &G.'F^ &G/F^ &GB F^ &GD]U^&G :lt F^&G1]UQ^&G :-tSv^ S^Si<^SFP)F u'^Sv^ S^SiF-^&G F]U^&G :v^& 6Vnjޱ;u$:u3$r,P~PPRPQrmWRPQF u^&G :u .FF^&G s<&G s4~u ^&"^&G ^G ^ &Z&W^&}^&G&;Gr$Sv^ S^S9<F uX^&?uL^&G&O+;FsFF^&^&FFv&t^^ &Z&W^F&G]U FFN F;vB~u<^S+QFPFPF^ v8vNFYFFF^&F]UQ^&G :-tS^ Sv ^S<^SFP%F u'^S^ Sv ^SF-^&G F]U ^&G :v^& !Vnjޱ;u$:u3r,PPPRPQwmWRPQF u^&G :u 2FFFFN F;w~t^&W&;WrS^ R+QFP<FT^&G&+GFV N+;sV^&FF^ v0~&}^9N^Y^F&GFFcF^&F]U^&G :v ]U^&G :v ^&G  ]U^&]U^&]U]U^&GFFv^"&@Fv^"&x"ti&Gwub@JP(F u,vZ^F&^&G ^S1F tvF^"&@VZ&PX^&GFth^"&Gwt^FpFFtFFxFŒF|FƌFȰFʈFˈFF^"&GsF&GqF^&GcFҍFPFP tF~ r ~rF ~ rЈFFF^SvFPvFPPF t^"SFFDF^"&GF^"&GxF^"&Gz^"&s &_ ^"&_F^"&wF&_v˷F^"&wxP F@F^"&Go^"&wx&wo ^"&wxP ^"&G :t:u^"&G tu ^"&wx ^"&wxP ^"&wxP ^"&G :t@^"&G :u&G tu1Fֹ@@2^"&u&Gn(^"&u Fֹ@@Fֹ@@ ^"&Gn^"&wx&wn ^"&wxP Fֹ  ^"&Gp^"&wx&wp sPFPh\FFs|v$PF$PPF ug^"&GFF^"&G& GtvPFPPF u5^"&GFF^"&G& GtvPFPPF u] UF^&u&wxP ^&wxP ^&Ltb&GZ tXFF&G^&wLFP t^&^&GL^&G^&G^&wLFP\F^&gp}^&wxP ^&wx&wp ^&Gwu&w-F tF^&G FF;w|^&x"tf&Owu?&HJ tQ)F tFv^&@V t4P2F t&F!v^&XV^F&^&GFtzsPFPh\FFsmvPQF u]^&GFF^&G& GtvPQF u0^&GFF^&G& GtvPQF uF]U^&G :t/:t):t#:t:t:t:t :t ^S]URPPFPF uK~tE^&t6G^&G&vH  ^&@n]Uh fuPPfP/F u{f&G < r < wfnrHF sFF  FFFl juPPjP/F uoj&G ^ &:GwY^ &GjX ^F&G;FsF^ &GPP^&GȴP^SvlF tn<~u8F^ &OQP^&OɵQPvFF tUV~uF~ t~uF r~t4FPFP6FF^&~uq븋F] U^ SP^Sq]U^ SP^Sq]U^ &G :Wt xh fuPPfP/F uVf&G < rL< wH^&^&G^&GP^&G^&G^&G^&G^&GA^&G6l juPPjP/F uj&G ^ &:Gw^ &Gj@ FF^ &G^&^&G^&G^&G^&G^&G^&G^&G^&G^&8G uA^&O^&8G u@^&G^ &GA^&G^ &G^&G]U^.]U^.&] bUPSQRVW^0u x@Ƈ0_^ZY[X]Uv ~N< t< t < t< t+~] U?U>@H ; w3ǁFıV&t&u#&t&DŽ&DŽBřN tƇ23U(>Ƈ0U ;$t6ķ&&,&FA +;$r3,z>ULJ@Hu HU ;$t2uLJ@ LJ@UU&>>ȋz>ptx0> tf."tPt,<t<u$h tSLƇ2@ uLJ@ߋd+w";fw "t>Ft;wm3EUt2 2t'Ƈ2;$t@uLJ@ 0uS-Ƈ|UUpu31u,<t&<t".t5u < u Ƈ5 Ƈ5< tYd;r";wNpt@t9t0,ht :iuĿ&E&&&n;drXdrQჿ`u`+^"Ŀ&S&C+t&E3퉯^&FtLJFRLJ>U`u`+^^&Ŀ&S&cFtLJFUd;t&r";v ;drdr LJ>QtĿV&&UƇ4tRPx>p$p>XZtLJ@0uS-U>Ȱ>t*z>Ƈ|"t&Fu33UFV>]UV>]U FV;u;t^SsqGFFFFF9F v=Ns6^S^&Z[& S^ &[&:uFF뻊Fs ^&F^S^ Sv ^&]UQ^SPPF t@FV]U+Zr tH]U+ZrH]U3 &L&;Wt]UQ^ &G :-tS^S2^ SFP)F u^ S^SF-^ &O ]U^&^ &&W^&G :t ^S,F uk^&G;s]@1V&G&G &"F~&w8&XSv^&pWPG<P^&w:\F t@^&G-F]U^&GFrF@1V^&G&G &W"FV&G-sG<PFP\F^&G-3^&w8v&XSv^&pvvFP#FNVF׉NV~u t%^&9Wu&9Or&O&WFF t ^&Gv^&@F&Z&W^&GFV^&G &W"^&G&W;Vu;FYvF&GF^&G8^&G^&G&W&+G &W"FVF&G^&uFF]U6P6P u%666P\ u6=t=!t3]Uv&D 6^ &du^ &G ^ S^SF-^ &G F]U^&G :r^&G :t:u^&G&G &W"^&&Wc^&G :uX&r&G&;Gv &G&W^&G&G &W"^&&W^&G s7&G s/^&/&_!^&G :u^&&G ]UQ^&G :-t SvYL6^&du^&G ^SvYLF-^&G F]U^&G :t :t^&G&G &W"FV&9Wu&9Gw&G&W^&G&9G*s&G*FP&t@"FP(F u^&uS[DF t^&w8&S^&w&w"&w G<P^&w: \F t@^&G-^&G &W"&G4&W6^&G&G.^&F&G0Z&W2^Sv(F Yu0^&w8P GPP ^&G :u ]U ^&G :-uC&du ^&du&G ^&G-sN&G :u/G<PFP\0^&G :t:t:t f^G<PFP\F^&w:FP u ~u~u^&w8 F^&w:)F^&G F uF]U <r"^&&W&G&G;F s Wv X^F&F&GFFF;FsN ;Nv&@FFڋF;Fr ,v@^&Z&WS&_[&G]Us]&G@]U cr &G;FsGvX^F&F&GFFF;Fs&@FFF]U>uPD u$>t&G>t>t]ð]U#U$VWQ^SY_^F^OGG w 3GGG؉GGGFG F GFGFGFGFGPS]UU^ SG PPFP[#uMG~&wr/^ F%;u^ ^ FF;tX F ;FuX]Uv^&XV^F&t4^&u ^&?u!v^&@F^&^&GFF, F]Uv^F&9@su~t`^&G0rRv^&x6u FF?v^&@VFF~uv^&@J vF^&@Bv^&x6u ^&GTv^&@6 F^&GF^&v^&@B^&G^&GF^&GF^&G vF^&@FvF ^&@NZ&PP~uav^&pBFP\PF V ;Vu;Ft<svFPmF^&GF^SvdF F+ FF]U].]UT~&Nu+JVt^&?[t~ F ~]Nu+JVueNI^wF{FFHNFN+NI^vp{FF+FHNFz F FNN^^v@FFFF+ƉF~s /~mmu*F FFN؋FFF+FFcF=wmt=amu%ЉFVFFF FFFF1F=rmt=tmuKF FFFFFЉFVFFP^Sv^SvrmPF t?ov^ SPPPFP#Fv F~u u~t( 0^S^Svv^ S^Sv^SvvP]UQQ^ &dt[SFP ^& uW^ &du&G-sG<P^S\^&^ SwmPvv^& u^ &G ^&]UQQ^ &Gd<tO<uSPL^& uI^ SFP ^& u0^ SrmPvv^& u^ &G ^&]UQ^ &G :t-:t':t!:t:t:t:t :t~ wJ^ SP- t^.e$*K$ 3?F uPvHF^ &G^ &s5&On?&w+$@ &Gn^ &Op៵&w6^ &On?&w+$@ &Gn^ &Op៵&w$ &Gp~vF^ &G^ &Go$&w +&Go^ &s5&On?&w+$@ &Gn^ &Op៵&w6^ &On?&w+$@ &Gn^ &Op៵&w$ &Gp^ &wxP ^ &wx&wo ^ &wxP ^ &wx&wn ^ &wxP ^ &wx&wp~F^ &GqF^ &Gs^ &wF uv~F^ &Gv^ &Go$&_v˷( ^ &Go^ &wxP ^ &wx&wo^ &G :tRF^ &G86^ &G :t9F^ &G6^ &G :t ~w8F^ &G.V^ &G :u G~wF^ &G/%~vF^ &G^ &G :u&Gt tFF^ &G :t&Gtt ^ &gn^ &On ^ &wxP ^ &wxF$P ^ &wxP ^ &wx&wn 'Ft u ~r > s2^Svs#^Sv^Sv ^SvPe> svN FF^FFFFFFFFFFFF FFFFFFFP]U(> sF uv vvP'FڈFFF FFFFFFP;]U(> sFuvPFڈFFFFFP]U> sF uv v ^S*8> rv v ^S7LFFv v ^S^S ]UQQ> sF uv vv81> rv vv8FFv vvP ]UQ^SvFPF t Ft@]U^&&GFPF uFF^&G&GSF u(vFP\F uF;Ft ^&G]U ^&GuFPFP tF~ u ~rF ~ s$PFPPF u%~u!vF u ^&GuF]U^ S^S]U>ulFFFFFPFFFFPFFF^FFPFtF u)vFP\F^&^ &]UQ^ &GF&Z&W&G&O&G &G &O&G &W"&G(&G*&G,&G-&G.&G4&W6&O0&2<(Y~ rmu^ &G &Gd&G&G ^ &G &Gd&G&G ^ SvvDF-^ &O ] U^ &G :Bu?;u8XY;u0&u)SPPPPPrmPPPP=t&G :u.&G s&G &W 3i&w&;ws&G&&3NSQRR&G tP L]U~u]U6^&^&G :Wt O uPPP/F t&G < r6<w2F ^&~ t^ &?uxPPP^ Sv lc>u!FPF u ~ r uPPP/F t^&GF&8G w ]FX ^Fv&DF&GF&GF&GF^&GF&GF&GF&GF&G F&8G uANsNQPPdF tX FFF ;FwD FrF9F w^ &FF^&O&@^&G^&w FA:r $uF F t ^ &?TNt$4}F &(&G&^ &O>&F u+J*u,s$4ЉF V4^ &G&6*&&&&^&Z&W$] UQ^&G &w8 F^&G:t P)FF]U)+%'2~eF =wmtAN=rmt=tmuFrmF =wmt =mmt=amuFmm FP^Sv^SvvlF=uy~mmur^Sv^Sv^&w&&w$F=u ^Sv^SvPPF~u FP^Sv^SvvlFFF t^G:P(F uP^&w:FP uF FuF^&G8#;u;0 .uPP.P/F tj.& r 9FvFF1F1F1F;s ^S (F^&GZ&WvF&MX&E&uF+ƹ1&EFF&Z&U&E$<&E&FYs߸&G&G@~ tmuv^S^GPvP^GPPFF usF =rmt=tmu^&G &G 5^&G&G~ mmu-&O FV^&G FF^SvvF t ^SP]U~ ]Nu+JVt)F^F9Fv@^ &80r ^ v&89vz^ ^ v&0^F븡 uDPPP/F uK&G ^;v ^X ^F&u^& u@^] UVnjޱ;u$:u ^&GZ~F =amt =wmt? uPPP/F u~&G < r<wW^&G _^SvFPFPrF uEW^&G F^&GFsF^F^S^SvFP3]UP L]UP L]UP L]UP L]UP L]U] UFf]UFV v]UFV v]UFV%]U vPFPPF uxFV^&&W~u~tYFuRFVFV)F^v^ SPvvFP #F u^ &?Gu&G &W^&&W] U]X[YZSPt tcRQRQS[YZ................................................................ ...........<(+.&.........!$*); -/........|,._>?.........`:#@'=".abcdefghi.......jklmnopqr.......~stuvwxyz......................{ABCDEFGHI......}JKLMNOPQR......\.STUVWXYZ......0123456789......------------------------------------------------------------ [VID] EndOfFile Dump Differences encountered. No differences encountered. [!Scr]$$.Tmp=\z2Q[sys]LptConfig.Sys[KBD][VID] YesNo& $ % * - [PTR]Press NEXT PAGE or SCROLL UP to continue(Press NEXT PAGE to continue[SYS]Config.sys       ||VNVF11.2[Kbd][Vid][Lpt]S[Nul][SysIn][SysOut]>,6LLH$LLH,LLHa6H$H$LLZH $L  6 $|=DD6 ]>[KBD][VID]  LIBRARY: ctos.lib VERSION: 11.2 (Wednesday September 23, 1987, 15:20) LIBRARY: Dump.lib VERSION: 11.2 (Wednesday September 23, 1987, 18:41) COPYRIGHT 1980, 1987 CONVERGENT TECHNOLOGIES, INC. ALL RIGHTS RESERVED THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE SOLELY FOR THE OPERATION OF A DESIGNATED COMPUTER FOR A PARTICULAR PURPOSE, AND MAY NOT BE COPIED OR OTHERWISE USED WITHOUT THE PRIOR WRITTEN CONSENT OF CONVERGENT TECHNOLOGIES, INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, INCLUDING ITS SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT TECHNOLOGIES. VERSION: 11.2 (Wednesday September 23, 1987, 18:38) &Gtt ^ &gn^ &On ^ &wxP ^ &wxF$P ^ &wxP ^ &wx&wn 'Ft , and reboot the workstation. ; %'Link %'Object modules Nls.obj %'Run file Nls.sys %'[List file] %'[Publics?] %'[Line numbers?] %'[Stack size] 0 %'[Max memory array size] %'[Min memory array size] %'[System Build?] %'[Version] %'[Libraries] None %'[DS allocation?] %'[Symbol file] ; ; ;############################################################################ %'########################################################################### %' %' NLS TABLE MACRO DEFINITION - %' %' %DefTableData (TableName, ID, %(data)) %' %DefTableString (TableName, ID, %(string)) %' %' For example: %' %' %DefTableData(UserData, 8002h, %(DW 4 %' DB 41h, 42h, 43h %' DB 0AH)) %' %DefTableString(UserStringName, 8000h, %(StringInSingleQuotes)) %' %'########################################################################### ;############################################################################ ; ; ACCESSING NLS TABLES - ; ; The pointer to the NLS table directory is returned by calling the ; CTOS routine "GetpStructure" with a case of 25, for example: ; ; CheckErc (GetpStructure (25, 0, ads pNLSDirectory)); ; ; The NLS table directory has the following format: ; ; wSignature WordType /*value is 'NT'*/ ; ; cbTable WordType /*count of bytes contained in the ; directory and tables*/ ; ; cTables WordType /*count of tables*/ ; ; oRgId OffsetType /*offset from pNlsDirectory of the ; array of table ID's*/ ; ; oRgoTable OffsetType /*offset from pNlsDirectory of the ; array of offsets to tables ; ;############################################################################ $INCLUDE(nls.mdf) ; ; For further information on setting the attributes, see KBD.ASM on ; CTOS Build Diskettes. ; ; %TableInit  attrControl EQU 000h + 000h + 000h ;no shift lock, no repeat attrAlpha EQU 080h + 060h + 010h ;shift lock, repeats attrRepeat EQU 000h + 060h + 010h ;repeats attrRepeatFast EQU 000h + 040h + 018h ;repeats, faster attrShiftDia EQU 01h ; diacritcal key when shifted attrUnShiftDia EQU 02h ; diacritcal key when unshifted attrBothDia EQU 03h ; diacritcal key when shifted or unshifted %DefTableData (KbdEncodingTable, 0, %(%' DW 'KE' ; signature ; this is a sample of the German CT-Keyboard KM-004 ; DB 0, 0C0h, attrControl ; 000 help DB 01h, 0C1h, attrRepeatFast ; 001 up-arrow DB 02h, 0C2h, attrControl ; 002 mark DB 0Dh, 0C3h, attrControl ; 003 bound DB 04h, 0C4h, attrControl ; 004 finish DB 05h, 0C5h, attrControl ; 005 prev page DB 0A9h, 0A8h, attrAlpha ; 006 DB 07h, 0C7h, attrControl ; 007 cancel DB 08h, 08h, attrRepeat ; 008 backspace DB 09h, 09h, attrControl ; 009 tab DB 0Ah, 0Ah, attrRepeat ; 00A return DB 0Bh, 0CBh, attrRepeatFast ; 00B down-arrow DB 0Ch, 0CCh, attrControl ; 00C next page DB 0Ah, 0Ah, attrRepeat ; 00D next DB 0Eh, 0CEh, attrRepeatFast ; 00E left-arrow DB 12h, 0D2h, attrRepeatFast ; 00F right-arrow DB 80h, 81h, attrControl ; 010 SH-L DB 11h, 0D1h, attrRepeat ; 011 scroll-up DB 0Fh, 0CFh, attrControl ; 012 move DB 13h, 0D3h, attrRepeat ; 013 scroll-down DB 14h, 0D4h, attrControl ; 014 copy DB 15h, 0D5h, attrControl ; 015 f1 DB 16h, 0D6h, attrControl ; 016 f2 DB 17h, 0D7h, attrControl ; 017 f3 DB 18h, 0D8h, attrControl ; 018 f4 DB 19h, 0D9h, attrControl ; 019 f5 DB 1Ah, 0DAh, attrControl ; 01A f6 DB 1Bh, 0C9h, attrControl ; 01B GO DB 1Ch, 0DCh, attrControl ; 01C f7 DB 1Dh, 0CDh, attrControl ; 01D f8 DB 1Eh, 0CAh, attrControl ; 01E f9 DB 1Fh, 0DFh, attrControl ; 01F f10 DB 20h, 20h, attrRepeat ; 020 space DB 39h, 7Ch, attrRepeat ; 021 9 | DB 82h, 83h, attrControl ; 022 SH-R DB 84h, 85h, attrControl ; 023 0 DB 86h, 87h, attrControl ; 024 NEXT DB 0, 0, 0 ; 025 DB 0, 0,   0 ; 026 DB 0A3h, 0A2h, attrAlpha ; 027 DB 0, 0, 0 ; 028 DB 0, 0, 0 ; 029 DB 0, 0, 0 ; 02A DB 40h, 5Ch, attrRepeat ; 02B @ backslash DB 2Ch, 3Bh, attrRepeat ; 02C , ; DB 0B0h, 3Fh, attrRepeat ; 02D ? DB 2Eh, 3Ah, attrRepeat ; 02E . : DB 2Dh, 5Fh, attrRepeat ; 02F - _ ;Warning: ; Do not change the comments for the following characters to add the ; actual characters. If you do, you will get errors from the Assembler. ; DB 30h, 3Dh, attrRepeat ; 030 0 = DB 31h, 21h, attrRepeat ; 031 1 ! DB 32h, 22h, attrRepeat ; 032 2 " DB 33h, 17h, attrRepeat ; 033 3  DB 34h, 24h, attrRepeat ; 034 4 $ DB 35h, 25h, attrRepeat ; 035 5 percent DB 36h, 26h, attrRepeat ; 036 6 & DB 37h, 2Fh, attrRepeat ; 037 7 / DB 38h, 28h, attrRepeat ; 038 8 right parens DB 39h, 29h, attrRepeat ; 039 9 left parens DB 0, 0, 0 ; 03A DB 0A5h, 0A4h, attrAlpha ; 03B DB 0, 0, 0 ; 03C DB 0, 0, 0 ; 03D DB 0, 0, 0 ; 03E DB 0, 0, 0 ; 03F 3F = iKeyInvalid DB 0, 0, 0 ; 040 40 = iKeyNoKeys DB 36h, 7Eh, attrRepeat ; 041 6 ~ DB 2Dh, 03h, attrRepeat ; 042 -  DB 0, 0, 0 ; 043 reset DB 0D0h,0D0h, attrControl ; 044 overtype DB 0, 0, attrControl ; 045 lock DB 32h, 3Eh, attrRepeat ; 046 2 > DB 33h, 27h, attrRepeat ; 047 3 ' DB 0, 0, 0 ; 048 shift DB 0, 0, 0 ; 049 shift DB 30h, 30h, attrRepeat ; 04A 0 0 DB 2Eh, 60h, attrRepeat ; 04B . ` DB 0, 0, 0 ; 04C code  DB 0, 0, 0 ; 04D code DB 0, 0, 0 ; 04E DB 0, 0, 0 ; 04F DB 0, 0, 0 ; 050 DB 0, 0, 0 ; 051 DB 0, 0, 0 ; 052 DB 0, 0, 0 ; 053 DB 0, 0, 0 ; 054  DB 0, 0, 0 ; 055 DB 0, 0, 0 ; 056 DB 0, 0, 0 ; 057 DB 0, 0, 0 ; 058 DB 0, 0, 0 ; 059 DB 0, 0, 0 ; 05A DB 2Bh, 2Ah, attrRepeat ; 05B + * DB 37h, 5Bh, attrRepeat ; 05C 7 [ DB 23h, 5Eh, attrRepeat ; 05D # ^ DB 0B4h, 0B2h, attrShiftDia ; 05E DB 0, 0, 0 ; 05F DB 31h, 3Ch, attrRepeat ; 060 1 < DB 61h, 41h, attrAlpha ; 061 a A DB 62h, 42h, attrAlpha ; 062 b B DB 63h, 43h, attrAlpha ; 063 c C DB 64h, 44h, attrAlpha ; 064 d D DB 65h, 45h, attrAlpha ; 065 e E DB 66h, 46h, attrAlpha ; 066 f F DB 67h, 47h, attrAlpha ; 067 g G DB 68h, 48h, attrAlpha ; 068 h H DB 69h, 49h, attrAlpha ; 069 i I DB 6Ah, 4Ah, attrAlpha ; 06A j J DB 6Bh, 4Bh, attrAlpha ; 06B k K DB 6Ch, 4Ch, attrAlpha ; 06C l L DB 6Dh, 4Dh, attrAlpha ; 06D m M DB 6Eh, 4Eh, attrAlpha  ; 06E n N DB 6Fh, 4Fh, attrAlpha ; 06F o O DB 70h, 50h, attrAlpha ; 070 p P DB 71h, 51h, attrAlpha ; 071 q Q DB 72h, 52h, attrAlpha ; 072 r R DB 73h, 53h, attrAlpha ; 073 s S DB 74h, 54h, attrAlpha ; 074 t T DB 75h, 55h, attrAlpha ; 075 u U DB 76h, 56h, attrAlpha ; 076 v V DB 77h, 57h, attrAlpha ; 077 w W DB 78h, 58h, attrAlpha ; 078 x X DB 7Ah, 5Ah, attrAlpha ; 079 z Z DB 79h, 59h, attrAlpha ; 07A y Y DB 34h, 7Bh, attrRepeat ; 07B 4 { DB 38h, 5Dh, attrRepeat ; 07C 8 ] DB 35h, 7Dh, attrRepeat ; 07D 5 } DB 0, 0, 0 ; 07E DB 7Fh, 0C8h, attrRepeat ; 07F del %' THE FOLLOWING MACROS HANDLE DIACRITICALS %' These macros allow the user to define pairs of keys which may be typed %' one after the other, but which produce a single character value. %' For example, a user may want to produce an "e accent-grave" by typing %' first an "accen t-grave" and then an "e", the result being the code for %' the font character "e accent grave". %' The macros have the following structures: %' %' InitDiaCriticalTables - no parameters. It appears once. %' %' DiaCriticalSet(FirstKey,SecondKey,FontCode) - One instance for each pair %' of diacritical keys you wish to define - Explained below. %' %' EndDiaCriticalTables - no parameters. It appears once. %' %' NOTE: Each key that you wish to be the first key in the diacritical %' pair must be given the proper atttribute in the above %' keyboard encoding table. %' %' FirstKey and SecondKey are hexadecimal codes produced by the desired %' key. To find these codes, look in the above Keyboard Encoding Table. %' The right-hand column are the keycaps for each key. The two entries %' following the DB in the same row are the unshifted and shifted codes %' that the key produces. Enter the code as the value of FirstKey then %' repeat the process for SecondKey. For each key you choose as FirstKey, %' you must change the attribute to AttrShiftDia if you wish to have the %' diacriticalness happen only when the key is shifted; AttrUnShiftDia if %' you wish the diacriticalness to happen only when the key is not shifted; %' or AttrBothDia if you wish it to be diacritical shifted and unshifted. %' %' FontCode is a hexidecimal code %' which will produce the desired character. If you are using the standard %' US font, then refer to Appendix B-2 of the CTOS Reference Manual. If %' you are using a non-standard US font, then refer to the documentation %' which accompanied it. You can change the font characters using the %' Font Designer. %' Note that for most diacritics, the standard font will not suffice. Take %' circumflex i and tilde n, for instance. You would have to build a new %' font with those characters replacing some other positions. %' The is in the standard released font (position 0ACh). %' %' In the following example, key 5E would have attrBothDia because on the %' keyboard circumflex (carat) and tilde are the same key (shifted and %' unshifted): %' DB 5Eh, 7Eh, attrBothDia ; 05E ^ ~ %' If you had a French keyboard, the carat is where the  key %' is (to the right of the "p"), so in that case key 6 would be: %'  DB 06h, 10h, attrShiftDia ; 006 1/2-1/4 %' and the macro would be %DiaCriticalSet(6,69h,chI-Circumflex) %' %' EXAMPLE: Define the following three diacritical pairs: %' "e accent-grave", "i circumflex", and "n tilde". %' The macros would look as follows: %' %' %InitDiaCriticalTables %' %DiaCriticalSet(chAccentGrave,65h,0ACh) %' The code for the silent key "accent grave" followed by the code for "e" %' (Refer to the above Keyboard Encoding Table) followed by 0ACh, which is %' the hexadecimal code for the resultant font character (Refer to Appendix %' B-2 in the CTOS Reference Manual) %' %DiaCriticalSet(5E,69h,chI-Circumflex) %' The code for "circumflex" followed by the code for "i" followed by %' chI-Circumflex %' %DiaCriticalSet(7Eh,6Eh,chN-Tilde) %' The code for "tilde" followed by the code for "n" followed by %' chN-Tilde %' %EndDiaCriticalTables %' The following example on GERMAN KEYBOARDS produces a diacritical pair. %' %' REMINDER: for non-German keyboards: the character "" is on the upper left %' key in combination with SHIFT (the ~ on US keyboards) %' The keyboard encoding table entry for 5E is as follows: %' DB 0B4h, 0B2h, attrShiftDia ; 05E %' %' %InitDiaCriticalTables %' %DiaCriticalSet(0B2h,61h,0A1h) %' %EndDiaCriticalTables %' %' 0B2h, 61h ;the diacritical pair, (keys 5E & 61 in the kbd table) %' ;here: the "" and the "a" shall be combined to "" %' 0A1h ;the resultant character of the diacritical pair %' %' %'THE DIACRITICAL MACROS START HERE: %' %InitDiaCriticalTables %DiaCriticalSet(0B2h,61h,0A1h) ; + a = %EndDiaCriticalTables )) ; ;WARNING: The table below is used by the file system for determining ; file spec equivalance - CHANGES TO THIS TABLE MAY CAUSE ; FILES ON AN EXISTING  FILE SYSTEM TO BECOME INACCESSABLE. ; %DefTableData (FsUlCmpbTable, 1, %(%' FsULCMPBSignature DW 'FS' DB 00h,01h,02h,03h,04h,05h,06h,07h DB 08h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh DB 10h,11h,12h,13h,14h,15h,16h,17h DB 18h,19h,1Ah,1Bh,1Ch,1Dh,1Eh,1Fh DB 20h,21h,22h,23h,24h,25h,26h,27h DB 28h,29h,2Ah,2Bh,2Ch,2Dh,2Eh,2Fh DB 30h,31h,32h,33h,34h,35h,36h,37h DB 38h,39h,3Ah,3Bh,3Ch,3Dh,3Eh,3Fh DB 40h,41h,42h,43h,44h,45h,46h,47h DB 48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh,4Fh DB 50h,51h,52h,53h,54h,55h,56h,57h DB 58h,59h,5Ah,5Bh,5Ch,5Dh,5Eh,5Fh DB 60h,41h,42h,43h,44h,45h,46h,47h DB 48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh,4Fh DB 50h,51h,52h,53h,54h,55h,56h,57h DB 58h,59h,5Ah,7Bh,7Ch,7Dh,7Eh,7Fh DB 80h,81h,82h,83h,84h,85h,86h,87h DB 88h,89h,8Ah,8Bh,8Ch,8Dh,8Eh,8Fh DB 90h,91h,92h,93h,94h,95h,96h,97h DB 98h,99h,9Ah,9Bh,9Ch,9Dh,9Eh,9Fh DB 0A0h,0A0h,0A2h,0A2h,0A4h,0A4h,0A6h,0A6h DB 0A8h,0A8h,0AAh,0ABh,0ACh,0ADh,0AEh,0AEh DB 0B0h,0B1h,0B2h,0B3h,0B4h,0B5h,0B6h,0B7h DB 0B8h,0B9h,0BAh,0BBh,0BCh,0BDh,0BEh,0BFh DB 0C0h,0C1h,0C2h,0C3h,0C4h,0C5h,0C6h,0C7h DB 0C8h,0C9h,0CAh,0CBh,0CCh,0CDh,0CEh,0CFh DB 0D0h,0D1h,0D2h,0D3h,0D4h,0D5h,0D6h,0D7h DB 0D8h,0D9h,0DAh,0DBh,0DCh,0DDh,0DEh,0DFh DB 0E0h,0E1h,0E2h,0E3h,0E4h,0E5h,0E6h,0E7h DB 0E8h,0E9h,0EAh,0EBh,0ECh,0EDh,0EEh,0EFh DB 0F0h,0F1h,0F2h,0F3h,0F4h,0F5h,0F6h,0F7h DB 0F8h,0F9h,0FAh,0FBh,0FCh,0FDh,0FEh,0FFh )) %DefTableData (UserUlCmpbTable, 2, %(%' ULCMPBSignature DW 'XT' DB 00h,01h,02h,03h,04h,05h,06h,07h DB 08h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh DB  10h,11h,12h,13h,14h,15h,16h,17h DB 18h,19h,1Ah,1Bh,1Ch,1Dh,1Eh,1Fh DB 20h,21h,22h,23h,24h,25h,26h,27h DB 28h,29h,2Ah,2Bh,2Ch,2Dh,2Eh,2Fh DB 30h,31h,32h,33h,34h,35h,36h,37h DB 38h,39h,3Ah,3Bh,3Ch,3Dh,3Eh,3Fh DB 40h,41h,42h,43h,44h,45h,46h,47h DB 48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh,4Fh DB 50h,51h,52h,53h,54h,55h,56h,57h DB 58h,59h,5Ah,5Bh,5Ch,5Dh,5Eh,5Fh DB 60h,41h,42h,43h,44h,45h,46h,47h DB 48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh,4Fh DB 50h,51h,52h,53h,54h,55h,56h,57h DB 58h,59h,5Ah,7Bh,7Ch,7Dh,7Eh,7Fh DB 80h,81h,82h,83h,84h,85h,86h,87h DB 88h,89h,8Ah,8Bh,8Ch,8Dh,8Eh,8Fh DB 90h,91h,92h,93h,94h,95h,96h,97h DB 98h,99h,9Ah,9Bh,9Ch,9Dh,9Eh,9Fh DB 0A0h,0A0h,0A2h,0A2h,0A4h,0A4h,0A6h,0A6h DB 0A8h,0A8h,0AAh,0ABh,0ACh,0ADh,0AEh,0AEh DB 0B0h,0B1h,0B2h,0B3h,0B4h,0B5h,0B6h,0B7h DB 0B8h,0B9h,0BAh,0BBh,0BCh,0BDh,0BEh,0BFh DB 0C0h,0C1h,0C2h,0C3h,0C4h,0C5h,0C6h,0C7h DB 0C8h,0C9h,0CAh,0CBh,0CCh,0CDh,0CEh,0CFh DB 0D0h,0D1h,0D2h,0D3h,0D4h,0D5h,0D6h,0D7h DB 0D8h,0D9h,0DAh,0DBh,0DCh,0DDh,0DEh,0DFh DB 0E0h,0E1h,0E2h,0E3h,0E4h,0E5h,0E6h,0E7h DB 0E8h,0E9h,0EAh,0EBh,0ECh,0EDh,0EEh,0EFh DB 0F0h,0F1h,0F2h,0F3h,0F4h,0F5h,0F6h,0F7h DB 0F8h,0F9h,0FAh,0FBh,0FCh,0FDh,0FEh,0FFh )) %DefTableData (VideoBsStrings, 3, %(%' VidBSSignature DW 'VS' cStrings DW 2 %sbString ('Weiter mit oder ') %sbString ('Weiter mit ') )) %DefTableData (UpperToLowerTable, 4, %(%' UpperToLowerSigniture DW 'LW' DB 00h,01h,02h,03h,04h,05h,06h,07h DB 08h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh DB 10h,11h,12h,13h,14h,15h,16h,17h DB 18h,19h,1Ah,1Bh,1Ch,1Dh,1Eh,1Fh DB 20h,21h,22h,23h,24h,25h,26h,27h DB 28h,29h,2Ah,2Bh,2Ch,2Dh,2Eh,2Fh DB 30h,31h,32h,33h,34h,35h,36h,37h DB 38h,39h,3Ah,3Bh,3Ch,3Dh,3Eh,3Fh DB 40h,61h,62h,63h,64h,65h,66h,67h DB 68h,69h,6Ah,6Bh,6Ch,6Dh,6Eh,6Fh DB 70h,71h,72h,73h,74h,75h,76h,77h DB 78h,79h,7Ah,5Bh,5Ch,5Dh,5Eh,5Fh DB 60h,61h,62h,63h,64h,65h,66h,67h DB 68h,69h,6Ah,6Bh,6Ch,6Dh,6Eh,6Fh DB 70h,71h,72h,73h,74h,75h,76h,77h DB 78h,79h,7Ah,7Bh,7Ch,7Dh,7Eh,7Fh DB 80h,81h,82h,83h,84h,85h,86h,87h DB 88h,89h,8Ah,8Bh,8Ch,8Dh,8Eh,8Fh DB 90h,91h,92h,93h,94h,95h,96h,97h DB 98h,99h,9Ah,9Bh,9Ch,9Dh,9Eh,9Fh DB 0A1h,0A1h,0A3h,0A3h,0A5h,0A5h,0A7h,0A7h DB 0A9h,0A9h,0AAh,0ABh,0ACh,0ADh,0AFh,0AFh DB 0B0h,0B1h,0B2h,0B3h,0B4h,0B5h,0B6h,0B7h DB 0B8h,0B9h,0BAh,0BBh,0BCh,0BDh,0BEh,0BFh DB 0C0h,0C1h,0C2h,0C3h,0C4h,0C5h,0C6h,0C7h DB 0C8h,0C9h,0CAh,0CBh,0CCh,0CDh,0CEh,0CFh DB 0D0h,0D1h,0D2h,0D3h,0D4h,0D5h,0D6h,0D7h DB 0D8h,0D9h,0DAh,0DBh,0DCh,0DDh,0DEh, 0DFh DB 0E0h,0E1h,0E2h,0E3h,0E4h,0E5h,0E6h,0E7h DB 0E8h,0E9h,0EAh,0EBh,0ECh,0EDh,0EEh,0EFh DB 0F0h,0F1h,0F2h,0F3h,0F4h,0F5h,0F6h,0F7h DB 0F8h,0F9h,0FAh,0FBh,0FCh,0FDh,0FEh,0FFh )) %DefTableData (KeyCapText, 5, %( %StartKeycapDefines ; THE FOLLOWING TABLE IS ORDERED ACCORDING TO THE ORDER ; SPECIFIED BY THE CTOS LIBRARY PROCEDURE "GETNLSKEYCAPTEXT". ; DO NOT CHANGE THE ORDER OF THE ENTRIES. ; ; Each macro invocation has two parameters; the first is used ; for mnemonic purposes, the parameter consists of the English ; keycap name followed by the unencoded hexadecimal keycode (see ; table C-1, CTOS operating system manual). The second ; parameter is an ASCII string defining the keycap name. %DefineKeyCapEntry(Action_43, "") %DefineKeyCapEntry(Backspace_08, "") %DefineKeyCapEntry(Bound_03, "") %DefineKeyCapEntry(Cancl_07, "") %DefineKeyCapEntry(Code_80, "") %DefineKeyCapEntry(Copy_14, "") %DefineKeyCapEntry(Delete_7F, "") %DefineKeyCapEntry(Finish_04, "") %DefineKeyCapEntry(Go_1B, "") %DefineKeyCapEntry(Help_00, "") %DefineKeyCapEntry(Lock_45, "") %DefineKeyCapEntry(Mark_02, "") %DefineKeyCapEntry(Move_12, "") %DefineKeyCapEntry(Next_0D, "") %DefineKeyCapEntry(NextPage_0C, "") %DefineKeyCapEntry(OverType_44, "") %DefineKeyCapEntry(PrevPage_05, "") %DefineKeyCapEntry(Return_0A, "") %DefineKeyCapEntry(ScrlDown_13, "") %DefineKeyCapEntry(ScrlUp_11, "") %DefineKeyCapEntry(Shift_48, "") %DefineKeyCapEntry(Tab_09, "") %EndKeycapDefines )) %DefTableData (DateTemplateTable, 6, %( %StartDateDefines ; Below is listed the characters for use as escape characters (attributes) ; in the templates. Each entry is of the form: ; ; DateEscapeDefine('b', 'B') ; ; This enters the escape character of 'b' into the table, and indicates ; an upper case equivelent of 'B' ; ; The following definitions are in a specific order, and that order must be ; maintained ; ; AM, PM, Noon or Midnight, string %DateEscapeDefine(Meridian, 'a', 'A') ; Day of month, numeric %DateEscapeDefine(DayOfMonthNum, 'd', 'D') ; Hour, 12 hour system, numeric %DateEscapeDefine(Hour, 'h', 'H') ; Minute, numeric %DateEscapeDefine(Minute, 'm', 'M') ; Month, string %DateEscapeDefine(MonthStr, 'n', 'N') ; Month, numeric %DateEscapeDefine(MonthNum, 'o', 'O') ; Second, numeric %DateEscapeDefine(Second, 's', 'S') ; Hour, 24 hour system, numeric %DateEscapeDefine(Hour24, 't', 'T') ; Day of Week, string %DateEscapeDefine(WeekDay, 'w', 'W') ; Year, numeric %DateEscapeDefine(Year, 'y', 'Y') ; Below are listed the definitions for each of the templates available ; through the NlsStdFormatDateTime routine. Any of the entries may be ; changed, by renaming the template and/or changing the template string. ; ; Each entry is of the form: ; ; DefineTemplateEntry(TemplateName, "TemplateString") ; ; Each entry has a comment preceding it, describing the result of the ; template, and its template number. If any templates are removed, or ; the order is changed, these commented index numbers will not reflect ; the template's true index number. The numbering starts at zero and ; proceeds, being incremented by one, in the order that the definitions ; appear in this file, thus the first defined is index number zero, the ; next is index one and so on. ; ; 00h 4.10.56 6:05 ; 20.02.87 18:12 %DefineTemplateEntry(ColNumDateTime, "!dd!.!0o!.!0y! !tt!:!0m!") ; 01h 4.10.56 6:05 ; 20.02.87 18:12 %DefineTemplateEntry(NumDateTime, "!*d!.!0o!.!0y! !*t!:!0m!") ; 02h 4. Okt. 1956 6:05 ; 20. Feb. 1987 18:12 %DefineTemplateEntry(ColDateTime, "!dd!. !Nnn!. !yyyy! !tt!:!0m!") ; 03h 4. Oktober 1956 6:05 ; 22. Februar 1987 18:12 %DefineTemplateEntry(DateTime, "!*d!. !N*n! !yyyy! !*t!:!0m!") ; 04h Do. 4. Oktober 1956 6:05 ; Fr. 22. Februar 1987 18:12 %DefineTemplateEntry(ColDayDateTime, "!Ww!. !dd!. !N*n! !yyyy! !tt!:!0m!") ; 05 h Do. 4. Okt. 1956 6:05 ; Fr. 22. Feb. 1987 18:12 %DefineTemplateEntry(DayDateTime, "!Ww!. !*d!. !Nnn!. !yyyy! !*t!:!0m!") ; 06h 06:05 ; 18:12 %DefineTemplateEntry(ColTime24, "!0t!:!0m!") ; 07h 6:05 ; 18:12 %DefineTemplateEntry(Time24, "!*t!:!0m!") ; 08h 6:05 ; 18:12 %DefineTemplateEntry(ColTime, "!tt!:!0m!") ; 09h 6:05 ; 18:12 %DefineTemplateEntry(Time, "!*t!:!0m!") ; 0Ah 04.10.56 ; 20.02.87 %DefineTemplateEntry(ColNumDate, "!0d!.!0o!.!0y!") ; 0Bh 4.10.56 ; 20.2.87 %DefineTemplateEntry(NumDate, "!*d!.!*o!.!0y!") ; 0Ch 09:03:05 %DefineTemplateEntry(FullTime, "!0h!:!0m!:!0s!") ; 0Dh 09:03:05.tmp ; 23:13:57.tmp %DefineTemplateEntry(TempFileName, "!0t!:!0m!:!0s!.tmp")  ; 0Eh Freitag 20. Februar 1987 %DefineTemplateEntry(LongDayDate, "!W*w! !*d!. !N*n! !*y!") ; 0Fh 20. Februar 1987 %DefineTemplateEntry(LongDate, "!*d!. !N*n! !*y!") ; 10h 04.10.87-07:09:05 %DefineTemplateEntry(FileColDateTime, "!0d!.!0o!.!0y!-!0t!:!0m!:!0s!") ; 11h 4. Okt. 56 %DefineTemplateEntry(AbrDate, "!*d!. !Nnn!. !yy!") ; 12h Day, Date 24 Hour ; Mon Jul 1, 1985 9:03 ; Mon Jul 18, 1985 23:13 %DefineTemplateEntry(DayDate24Hour, "!Www! !Nnn! !*d!, !yyyy! !*t!:!0m!") ; 13h Columnar Day Date 24 Hour ; Mon Jul 1 1985 9:03 ; Mon Jul 18 1985 23:13 %DefineTemplateEntry(ColDayDate24Hour, "!Www! !Nnn! !dd! !yyyy! !0t!:!0m!") ; 14h Day, numeric date and time ; Tue 07/17/82 9:03 AM ; Tue 07/17/82 11:13 PM %DefineTemplateEntry(DayNumDateTime, "!Www! !0o!/!0d!/!0y! !*h!:!0m! !2*A!") ; 15h Columnar Day, Numeric Date and time ; Tue 07/17/82 09:03 ; Tue 07/17/82 23:13 %DefineTemplateEntry(ColDayNumDateTime, "!Www! !0o!/!0d!/!0y! !0t!:!0m!") ; 16h Invalid Template Index %DefineTemplateEntry(InvalidITemp, "Ungltiges Datumsformat") %EndStdDateDefines ; ; THIS IS THE END OF THE STANDARD TEMPLATES NO OEM TEMPLATES SHOULD BE ; DEFINED ABOVE THIS POINT. ALL TEMPLATES SHOULD BE ADDED BELOW. ANY NEW ; TEMPLATES ADDED WILL BE INDEXED STARTING WITH TEMPLATE NUMBER 8000h ; ; EXAMPLE: ; ; 8000h DD/MM/YY ; ; DefineTemplateEntry(ColDayMonthYear, "!0d!/!0o!/!0y!") ; ; ; END OF USER DEFINABLE TEXT AREA, NO EDITING SHOULD OCCUR BELOW THIS POINT %EndOemDateDefines )) false EQU 0 true EQU 1 %DefTableData (NumberAndCurrencyTable, 7, %(%' NumberAndCurrencySigniture DW 'NC' DB 2Ch ; Decimal character. Indicates which single ; ASCII character will be used to indicate ; the decimal point in numbers. ; Either 2Ch (,) or 2Eh (.) may be selected. DB 20h ; Triad character. Indicates which single ASCII character ; will be used to indicate the separation of numbers into ; triads (i.e. thousands, millions, etc.). ; Either 2Ch (,) or 2Eh (.) or 20h (space) may be ; selected. Note that the use of space is not fully ; supported at this time and thus its use may be ignored ; by some programs or cause substitution of one of the ; other characters. DB false ; First triad flag. Controls the rules for placing the triad ; character in the thousands position. If true, the triad ; separator in the thousands position is always to appear when ; the number contains four or more digits to the left of the ; decimal. If false, the thousands triad separator is ; suppressed when no more than one additional digit appears to ; the left. DB 2Ch ; List separator character. Indicates which single ASCII ; character will be used to indicate the separation of ; numbers within a list. Either 2Ch (,) or 3Bh (;) may be ; selected. Note that this specification is used only by ; programs that would otherwise have a conflict with the use ; of 2Ch (,) as the decimal point character. DB 0 ; Currency position. Controls the position of the currency ; symbol. A value of 0 indicates leading currency symbol, ; while 1 indicates trailing currency symbol. Other values ; are reserved for future expansion. Note that embedded ; currency symbol s are not currently supported. DB 2 ; Currency symbol string. This string defines the currency DB 44h ; symbol. The first byte is the length of the string. The DB 4Dh ; remaining four bytes define the contents of the string. DB 00h ; All four bytes must be defined, even when a shorter string DB 00h ; is being defined. Defined here: DM (Deutsche Mark) )) %DefTableData (DateNameTable, 8, %( %StartNameDefines ; Below are listed the definitions for each of the names available ; through the GetNlsDateName routine. Any of the entries may be ; changed, by renaming the Name and/or changing the Name String. ; THEIR ORDER IS RELIED UPON BY ROUTINES THAT USE THIS INFORMATION. ; DO NOT CHANGE THEIR ORDER OR THEIR MEANING. ; ; Each entry is of the form: ; ; DefineNameEntry(NameString, "String") ; ; Each entry has a comment preceding it, describing the expected contents ; of the string, and its string number. If any strings are removed, or ; the order is changed, these commented index numbers will not reflect ; the string's true index number. The numbering starts at zero and ; proceeds, being incremented by one, in the order that the definitions ; appear in this file, thus the first defined is index number zero, the ; next is index one and so on. ; ; IT IS IMPORTANT TO NOTE THAT ANY CAPITALIZATION HERE WILL BE MANDATORY ; IN ANY STRINGS RETURNED BY GetNlsDateName. ; %StartNameTable ; USER EDITABLE TEXT FOLLOWS ; ; T A B L E N U M B E R O N E ; ; The first entry in this table, Date/time entry mode setting, is used by ; ParseTime and NlsParseTime to control the parsing of date/time. Be ; sure to modify the "00" to match your language. Following this ; is the names of all the days of the week, months of the year, etc. ; ; ; first byte is ; ; 0 ... entry of date as MM/DD/YY. ; 1 ... entry of date as DD/MM/YY. ; 2 ... entry of date as YY/MM/DD. ; ; second byte is ; ; 0 ... entry of hour in either AM/PM or Military mode (4:00PM or 16:00) ; 1 ... entry of hour in 24 hour mode only (16:00) %DefineNameEntry(EntryModeSetting, "11"); ; First Day of the Week: Sunday %DefineNameEntry(FirstWeekDay, "Sonntag") ; Second Day of the Week: Monday %DefineNameEntry(SecondWeekDay, "Montag") ; Third Day of the Week: Tuesday %DefineNameEntry(ThirdWeekDay, "Dienstag") ; Fourth Day of the Week: Wednesday %DefineNameEntry(FourthWeekDay, "Mittwoch") ; Fifth Day of the Week: Thursday %DefineNameEntry(FifthWeekDay, "Donnerstag") ; Sixth Day of the Week: Friday %DefineNameEntry(SixthWeekDay, "Freitag") ; Seventh Day of the Week: Saturday %DefineNameEntry(SeventhWeekDay, "Samstag") ; First Month: January %DefineNameEntry(FirstMonth, "Januar") ; Second Month: February %DefineNameEntry(SecondMonth, "Februar") ; Third Month: March %DefineNameEntry(ThirdMonth, "Mrz") ; Fourth Month: April %DefineNameEntry(FourthMonth, "April") ; Fifth Month: May %DefineNameEntry(FifthMonth, "Mai") ; Sixth Month: June %DefineNameEntry(SixthMonth, "Juni") ; Seventh Month: July %DefineNameEntry(SeventhMonth, "Juli") ; Eighth Month: August %DefineNameEntry(EighthMonth, "August") ; Ninth Month: September %DefineNameEntry(NinthMonth, "September") ; Tenth Month: October %DefineNameEntry(TenthMonth, "Oktober") ; Eleventh Month: November %DefineNameEntry(EleventhMonth, "November") ; Twelfth Month: December %DefineNameEntry(TwelfthMonth, "Dezember") ; First Meridian: AM %DefineNameEntry(FirstMeridian, "am") ; Second Meridian: PM %DefineNameEntry(SecondMeridian, "pm") ; Third Meridian: Noon %DefineNameEntry(ThirdMeridian, "Mittag") ; Forth Meridian: Midnight %DefineNameEntry(ForthMeridian, "Mitternacht") ; Default Output Template Number (see table 6) ; Must be a two digit decimal number %DefineNameEntry(DefaultOutputTemplate, "05") ; USER EDITABLE TEXT ENDS  %EndNameTable %StartNameTable ; ; T A B L E N U M B E R T W O ; ; USER EDITABLE TEXT FOLLOWS ; Error Name %DefineNameEntry(ErrorName, "ungltiger Name"); ; First Day of the Week: Sunday %DefineNameEntry(FirstWeekDay, "So") ; Second Day  of the Week: Monday %DefineNameEntry(SecondWeekDay, "Mo") ; Third Day of the Week: Tuesday %DefineNameEntry(ThirdWeekDay, "Di") ; Fourth Day of the Week: Wednesday %DefineNameEntry(FourthWeekDay, "Mi") ; Fifth Day of the Week: Thursday %DefineNameEntry(FifthWeekDay, "Do") ; Sixth Day of the Week: Friday %DefineNameEntry(SixthWeekDay, "Fr") ; Seventh Day of the Week: Saturday %DefineNameEntry(SeventhWeekDay, "Sa") ; First Month: January %DefineNameEntry(FirstMonth, "Jan") ; Second Month: February %DefineNameEntry(SecondMonth, "Feb") ; Third Month: March %DefineNameEntry(ThirdMonth, "Mr") ; Fourth Month: April %DefineNameEntry(FourthMonth, "Apr") ; Fifth Month: May %DefineNameEntry(FifthMonth, "Mai") ; Sixth Month: June %DefineNameEntry(SixthMonth, "Jun") ; Seventh Month: July %DefineNameEntry(SeventhMonth, "Jul") ; Eighth Month: August %DefineNameEntry(EighthMonth, "Aug") ; Ninth Month: September %DefineNameEntry(NinthMonth, "Sep") ; Tenth Month: October %DefineNameEntry(TenthMonth, "Okt") ; Eleventh Month: November %DefineNameEntry(EleventhMonth, "Nov") ; Twelfth Month: December %DefineNameEntry(TwelfthMonth, "Dez") ; First Meridian: AM %DefineNameEntry(FirstMeridian, "am") ; Second Meridian: PM %DefineNameEntry(SecondMeridian, "pm") ; Third Meridian: Noon %DefineNameEntry(ThirdMeridian, "m") ; Forth Meridian: Midnight %DefineNameEntry(ForthMeridian, "M") ; Default Output Template Number (see table 6) ; Must be a two digit decimal number %DefineNameEntry(DefaultOutputTemplate, "05")  ; USER EDITABLE TEXT ENDS %EndNameTable ; ; If additional tables are required, they must be of the form of the two ; tables that are above. Any new tables must begin with a BeginTable call, ; be followed with exactly the same number of NameEntries, and the table ; must be closed with an EndTable call. ; ; Any new tables should be added here, the next table being number 3 ; ; ADD NEW TABLE(S) HERE ; All tables must be defined above %EndNameDefines )) %DefTableData (CollationTable, 9, %(%' CCT LABEL BYTE CTSignature DW 'CT' CCTI LABEL BYTE %' %' Character Collation Table - %' This table defines the sort order of all the characters in the character %' set. The table consists of one mandatory table followed by several words %' and bytes which define the length and offset from the beginning of the %' table of three optional tables. The 1st table is the primary character %' collation table. The optional tables are the secondary character %' collation table, the 2 for 1 character substitution table and the 1 for 2 %' character substitution table. %' %' NOTE: The second character collation priority map table as well as the %' 2 for 1 and 1 for 2 substitution tables are not used in the default (CTOS) %' case and therefore they have been commented out in the original NLS.ASM %' They would however be useful as a starting place or template for defining %' a more complete character collation structure than the one used by CTOS. %' %' The current example includes the A-umlaut, O-umlaut, U-umlaut and %' -ettset characters, using a German collating sequence. This example is %' not intended to be a comprehensive German collating table, but is useful %' as a first step towards one. %' %' %' Priority ASCII Code Character %' ======== ========== ========= %' DB 00h ; 00h DB 01h ; 01h DB 02h ; 02h DB 03h ; 03h DB 04h ; 04h DB 05h ; 05h DB 06h ; 06h DB 07h ; 07h DB 08h ; 08h DB 09h ; 09h DB 0Ah ; 0Ah New Line DB 0Bh ; 0Bh DB 0Ch ; 0Ch Form Feed DB 0Dh ; 0Dh DB 0Eh ; 0Eh DB 0Fh ; 0Fh DB 010h ; 010h DB 011h ; 011h DB 012h ; 012h DB 013h ; 013h DB 020h ; 014h Non-Blank Space (make appear as space) DB 015h ; 015h DB 016h ; 016h DB 017h ; 017h DB 018h ; 018h DB 019h ; 019h DB 01Ah ; 01Ah DB 01Bh ; 01Bh DB 01Ch ; 01Ch DB 01Dh ; 01Dh DB 01Eh ; 01Eh DB 01Fh ; 01Fh DB 020h ; 020h DB 021h ; 021h ! DB 022h ; 022h " DB 023h ; 023h  # DB 024h ; 024h $ DB 025h ; 025H Percent Sign DB 026h ; 026h & DB 027h ; 027h ' DB 028h ; 028h ( DB 029h ; 029h ) DB 02Ah ; 02Ah * DB 02Bh ; 02Bh + DB 02Ch ; 02Ch , DB 02Dh ; 02Dh - DB 02Eh ; 02Eh . DB 02Fh ; 02Fh / ; ; DIGITS ; DB 030h ; 030h 0 DB 031h ; 031h 1 DB 032h ; 032h 2 DB 033h ; 033h 3 DB 034h ; 034h 4 DB 035h ; 035h 5 DB 036h ; 036h 6 DB 037h ; 037h 7 DB 038h ; 038h 8 DB 039h ; 039h 9 ; DB 03Ah ; 03Ah : DB 03Bh ; 03Bh ; DB 03Ch ; 03Ch < DB 03Dh ; 03Dh = DB 03Eh ; 03Eh > DB 03Fh ; 03Fh ? DB 040h ; 040h @ ; ; Roman Letters A thru Z ; DB 041h ; 041h A DB 042h ; 042h B DB 043h ; 043h C DB 044h ; 044h D DB 045h ; 045h E DB 046h ; 046h F DB 047h ; 047h G DB 048h ; 048H H DB 049h ; 049h I DB 04Ah ; 04Ah J DB 04Bh ; 04Bh K DB 04Ch ; 04Ch L DB 04Dh ; 04Dh M DB 04Eh ; 04Eh N DB 04Fh ; 04Fh O DB 050h ; 050h P DB 051h ; 051h Q DB 052h ; 052h R DB 053h ; 053h S DB 054h ; 054h T DB 055h ; 055h U DB 056h ; 056h V DB 057h ; 057h W DB 058h ; 058h X DB 059h ; 059h Y DB 05Ah ; 05Ah Z ; DB 05Bh ; 05Bh [ DB 05Ch ; 05Ch \ DB 05Dh ; 05Dh ] DB 05Eh ; 05Eh ^ DB 05Fh ; 05Fh _ DB 060h ; 060h ` %' %' NOTE: In this the primary collation table, Priorities of the characters a-z %' are the same as those of A-Z. %' DB 041h ; 061h a DB 042h ; 062h b DB 043h ; 063h c DB 044h ; 064h d DB 045h ; 065h e DB 046h ; 066h f DB 047h ; 067h g DB 048h ; 068h h DB 049h ; 069h i DB 04Ah ; 06Ah j DB 04Bh ; 06Bh k DB 04Ch ; 06Ch l DB 04Dh ; 06Dh m DB 04Eh ; 06Eh n DB 04Fh ; 06Fh o DB 050h ; 070h p DB 051h ; 071h q DB 052h ; 072h r DB 053h ; 073h s DB 054h ; 074h t DB 055h ; 075h u DB 056h ; 076h v DB 057h ; 077h w DB 058h ; 078h x DB 059h ; 079h y DB 05Ah ; 07Ah z ; DB 07Bh ; 07Bh { DB 07Ch ; 07Ch | DB 07Dh ; 07Dh } DB 07Eh ; 07Eh ~ DB 07Fh ; 07Fh DB 080h ; 080h Delete DB 081h ;  081h DB 082h ; 082h DB 083h ; 083h DB 084h ; 084h DB 085h ; 085h DB 086h ; 086h DB 087h ; 087h DB 088h ; 088h DB 089h ; 089h DB 08Ah ; 08Ah DB 08Bh ; 08Bh DB 08Ch ; 08Ch DB 08Dh ; 08Dh DB 08Eh ; 08Eh DB 08Fh ; 08Fh DB 090h ; 090h DB 091h ; 091h DB 092h ; 092h DB 093h ; 093h DB 094h ; 094h DB 095h ; 095h DB 096h ; 096h DB 097h ; 097h DB 098h ; 098h DB 099h ; 099h DB 09Ah ; 09Ah DB 09Bh ; 09Bh DB 09Ch ; 09Ch DB 09Dh ; 09Dh DB 09Eh ; 09Eh DB 09Fh ; 09Fh %' %' NOTE: The lower-case umlauted, struck-through, and AE ligature characters %' have the same priority as their upper-case equivalents. %' DB 0A0h ; 0A0h A-circle DB 0A0h ; 0A1h a-circle (make appear as A-circle) DB 0A2h ; 0A2h A-umlaut DB 0A2h ; 0A3h a-umlaut DB 0A4h ; 0A4h O-umluat DB 0A4h ; 0A5h o-umlaut DB 0A6h ; 0A6h O-slash DB 0A6h ; 0A7h o-slash DB 0A8h ; 0A8h U-umlaut DB 0A8h ; 0A9h u-Umluat DB 0AAh ; 0AAh DB 0ABh ; 0ABh DB 0ACh ; 0ACh DB 0ADh ; 0ADh DB 0AEh ; 0AEh AE ligature DB 0AEh ; 0AFh ae ligature DB 0B0h ; 0B0h DB 0B1h ; 0B1h DB 0B2h ; 0B2h DB 0B3h ; 0B3h DB 0B4h ; 0B4h DB 0B5h ; 0B5h DB 0B6h ; 0B6h DB 0B7h ; 0B7h DB 0B8h ; 0B8h DB 0B9h ; 0B9h DB 0BAh ; 0BAh DB 0BBh ; 0BBh DB 0BCh ; 0BCh DB 0BDh ; 0BDh DB 0BEh ; 0BEh DB 0BFh ; 0BFh DB 0C0h ; 0C0h DB 0C1h ; 0C1h DB 0C2h ; 0C2h DB 0C3h ; 0C3h DB 0C4h ; 0C4h DB 0C5h ; 0C5h DB 0C6h ; 0C6h DB 0C7h ; 0C7h DB 0C8h ; 0C8h DB 0C9h ; 0C9h DB 0CAh ; 0CAh DB 0CBh ; 0CBh DB 0CCh ; 0CCh DB 0CDh ; 0CDh DB 0CEh ; 0CEh DB 0CFh ; 0CFh DB 0D0 h ; 0D0h DB 0D1h ; 0D1h DB 0D2h ; 0D2h DB 0D3h ; 0D3h DB 0D4h ; 0D4h DB 0D5h ; 0D5h DB 0D6h ; 0D6h DB 0D7h ; 0D7h DB 0D8h ; 0D8h DB 0D9h ; 0D9h DB 0DAh ; 0DAh DB 0DBh ; 0DBh DB 0DCh ; 0DCh DB 0DDh ; 0DDh DB 0DEh ; 0DEh DB 0DFh ; 0DFh DB 0E0h ; 0E0h DB 0E1h ; 0E1h DB 0E2h ; 0E2h DB 0E3h ; 0E3h DB 0E4h ; 0E4h DB 0E5h ; 0E5h DB 0E6h ; 0E6h DB 0E7h ; 0E7h DB 0E8h ; 0E8h DB 0E9h ; 0E9h DB 0EAh ; 0EAh DB 0EBh ; 0EBh DB 0ECh ; 0ECh DB 0EDh ; 0EDh DB 0EEh ; 0EEh DB 0EFh ; 0EFh DB 0F0h ; 0F0h DB 0F1h ; 0F1h DB 0F2h ; 0F2h DB 0F3h ; 0F3h DB 0F4h ; 0F4h DB 0F5h ; 0F5h DB 0F6h ; 0F6h DB 0F7h ; 0F7h DB 0F8h ; 0F8h DB 0F9h ; 0F9h DB 0FAh ; 0FAh DB 0FBh ; 0FBh DB 0FCh ; 0FCh DB 0FDh ; 0FDh DB 0FEh ; 0FEh DB 0FFh ; 0FFh %' %' To enable the 1-to-2 and 2-to-1 example tables, uncomment all the lines %' beginning with DB and DW from the "CCT2 LABEL BYTE" line through the %' rgb2For2Flags table. %' %' Also, you must switch the semi-colon on the following %' nine pairs of lines. e.g., %' %' ; DW CCT2 - CCTI %' DW 0 %' %' becomes: %' %' DW CCT2 - CCTI %' ; DW 0 %' o2ndCCT LABEL BYTE DW CCT2 - CCTI ; DW 0 DB rgw2For1Subs - rgb2For1Chrs ; DB 0 ; DB (rgb1For2Flags - rgw1For2Subs) / 2 DB 0 DW rgb2For1Chrs - CCT ; DW 0 DW rgw2For1Subs - CCT ; DW 0 DW rgw2For1Priorities - CCT DW 0 ; DW rgw1For2Wrds - CCT DW 0 ; DW rgw1For2Subs - CCT DW 0 ; DW rgb1For2Flags - CCT DW 0 CCT2 LABEL BYTE %' Priority ASCII Code Character %' ======== ========== ========= DB 00h ; 00h DB 01h ; 01h DB 02h ; 02h DB 03h ; 03h DB 04h ; 04h DB 05h ; 05h DB 06h ; 06h DB 07h ; 07h DB 08h ; 08h DB 09h ; 09h DB 0Ah ; 0Ah New Line. DB 0Bh ; 0Bh DB 0Ch ; 0Ch Form Feed. DB 0Dh ; 0Dh DB 0Eh ; 0Eh DB 0Fh ; 0Fh DB 010h ; 010h DB 011h ; 011h DB 012h  ; 012h DB 013h ; 013h DB 014h ; 014h Non-Blank Space DB 015h ; 015h DB 016h ; 016h DB 017h ; 017h DB 018h ; 018h DB 019h ; 019h DB 01Ah ; 01Ah DB 01Bh ; 01Bh DB 01Ch ; 01Ch DB 01Dh ; 01Dh DB 01Eh ; 01Eh  DB 01Fh ; 01Fh DB 020h ; 020h DB 021h ; 021h ! DB 022h ; 022h " DB 023h ; 023h # DB 024h ; 024h $ DB 025h ; 025H Percent Sign DB 026h ; 026h & DB 027h ; 027h ' DB 028h ; 028h ( DB 029h ; 029h ) DB 02Ah ; 02Ah * DB 02Bh ; 02Bh + DB 02Ch ; 02Ch , DB 02Dh ; 02Dh - DB 02Eh ; 02Eh . DB 02Fh ; 02Fh / ; DIGITS DB 030h ; 030h 0 DB 031h ; 031h 1 DB 032h ; 032h 2 DB 033h ; 033h 3 DB 034h ; 034h 4 DB 035h ; 035h 5 DB 036h ; 036h 6 DB 037h ; 037h 7 DB 038h ; 038h 8 DB 039h ; 039h 9 DB 03Ah ; 03Ah : DB 03Bh ; 03Bh ; DB 03Ch ; 03Ch < DB 03Dh ; 03Dh = DB 03Eh ; 03Eh > DB 03Fh ; 03Fh  ? DB 040h ; 040h @ %' DB 041h ; 061h A DB 043h ; 062h B DB 045h ; 063h C DB 047h ; 064h D DB 049h ; 065h E DB 04Bh ; 066h F DB 04Dh ; 067h G DB 04Fh ; 068h H DB 051h ; 069h I DB 053h ; 06Ah  J DB 055h ; 06Bh K DB 057h ; 06Ch L DB 059h ; 06Dh M DB 05Bh ; 06Eh N DB 05Dh ; 06Fh O DB 05Fh ; 070h P DB 061h ; 071h Q DB 063h ; 072h R DB 065h ; 073h S DB 067h ; 074h T DB 069h ; 075h U DB 06Bh ; 076h V DB 06Dh ; 077h W DB 06Fh ; 078h X DB 071h ; 079h Y DB 073h ; 07Ah Z %' DB 075h ; 05Bh [ DB 076h ; 05Ch \ DB 077h ; 05Dh ] DB 078h ; 05Eh ^ DB 079h ; 05Fh _ DB 07Ah ; 060h ` %' %' NOTE: In this the Secondary collation table, the characters a thru z and %' A thru Z are arranged in the following order. A,a,B,b...,Z,z %' DB 042h ; 041h a DB 044h ; 042h b DB 046h ; 043h c DB 048h ; 044h d DB 04Ah ; 04 5h e DB 04Ch ; 046h f DB 04Eh ; 047h g DB 050h ; 048H h DB 052h ; 049h i DB 054h ; 04Ah j DB 056h ; 04Bh k DB 058h ; 04Ch l DB 05Ah ; 04Dh m DB 05Ch ; 04Eh n DB 05Eh ; 04Fh o DB 060h ; 050h  p DB 062h ; 051h q DB 064h ; 052h r DB 066h ; 053h s DB 068h ; 054h t DB 06Ah ; 055h u DB 06Ch ; 056h v DB 06Eh ; 057h w DB 070h ; 058h x DB 072h ; 059h y DB 074h ; 05Ah z %' DB 07Bh ; 07Bh  { DB 07Ch ; 07Ch | DB 07Dh ; 07Dh } DB 07Eh ; 07Eh ^ DB 07Fh ; 07Fh DB 080h ; 080h Delete DB 081h ; 081h DB 082h ; 082h DB 083h ; 083h DB 084h ; 084h DB 085h ; 085h DB 086h ; 086h DB 087h ;  087h DB 088h ; 088h DB 089h ; 089h DB 08Ah ; 08Ah DB 08Bh ; 08Bh DB 08Ch ; 08Ch DB 08Dh ; 08Dh DB 08Eh ; 08Eh DB 08Fh ; 08Fh DB 090h ; 090h DB 091h ; 091h DB 092h ; 092h DB 093h ; 093h DB 094h ; 094h DB 095h ; 095h DB 096h ; 096h DB 097h ; 097h DB 098h ; 098h DB 099h ; 099h DB 09Ah ; 09Ah DB 09Bh ; 09Bh DB 09Ch ; 09Ch DB 09Dh ; 09Dh DB 09Eh ; 09Eh DB 09Fh ; 09Fh DB 0A0h ; 0A0h A-circle DB 0A1h ; 0A1h  a-circle DB 0A2h ; 0A2h A-umlaut DB 0A3h ; 0A3h a-umlaut DB 0A4h ; 0A4h O-umlaut DB 0A5h ; 0A5h o-umlaut DB 0A6h ; 0A6h O-slash DB 0A7h ; 0A7h o-slash DB 0A8h ; 0A8h U-umlaut DB 0A9h ; 0A9h  u-umlaut DB 0AAh ; 0AAh DB 0ABh ; 0ABh DB 0ACh ; 0ACh DB 0ADh ; 0ADh DB 0AEh ; 0AEh AE ligature DB 0AFh ; 0AFh ae ligature DB 0B0h ; 0B0h DB 0B1h ; 0B1h DB 0B2h ; 0B2h DB 0B3h ; 0B3h DB 0B4h ; 0B4h DB 0B5h ; 0B5h DB 0B6h ; 0B6h DB 0B7h ; 0B7h DB 0B8h ; 0B8h DB 0B9h ; 0B9h DB 0BAh ; 0BAh DB 0BBh ; 0BBh DB 0BCh ; 0BCh DB 0BDh ; 0BDh DB 0BEh ; 0BEh DB 0BFh ; 0BFh DB 0C0h ; 0C0h DB 0C1h ; 0C1h DB 0C2h ; 0C2h DB 0C3h ; 0C3h DB 0C4h ; 0C4h DB 0C5h ; 0C5h DB 0C6h ; 0C6h DB 0C7h ; 0C7h DB 0C8h ; 0C8h DB 0C9h ; 0C9h DB 0CAh ; 0CAh DB 0CBh ; 0CBh DB 0CCh ; 0CCh DB 0CDh ; 0CDh DB 0CEh ; 0CEh DB 0CFh ; 0CFh DB 0D0h ; 0D0h DB 0D1h ; 0D1h DB 0D2h ; 0D2h DB 0D3h ; 0D3h DB 0D4h ; 0D4h DB 0D5h ; 0D5h DB 0D6h ; 0D6h DB 0D7h ; 0D7h DB 0D8h ; 0D8h DB 0D9h ; 0D9h DB 0DAh ; 0DAh DB 0DBh ; 0DBh DB 0DCh ; 0DCh DB 0DDh ;  0DDh DB 0DEh ; 0DEh DB 0DFh ; 0DFh DB 0E0h ; 0E0h DB 0E1h ; 0E1h DB 0E2h ; 0E2h DB 0E3h ; 0E3h DB 0E4h ; 0E4h DB 0E5h ; 0E5h DB 0E6h ; 0E6h DB 0E7h ; 0E7h DB 0E8h ; 0E8h DB 0E9h ; 0E9h DB 0EAh ; 0EAh DB 0EBh ; 0EBh DB 0ECh ; 0ECh DB 0EDh ; 0EDh DB 0EEh ; 0EEh DB 0EFh ; 0EFh DB 0F0h ; 0F0h DB 0F1h ; 0F1h DB 0F2h ; 0F2h DB 0F3h ; 0F3h DB 0F4h ; 0F4h DB 0F5h ; 0F5h DB 0F6h ; 0F6h DB 0F7h ; 0F7h DB 0F8h ; 0F8h DB 0F9h ; 0F9h DB 0FAh ; 0FAh DB 0FBh ; 0FBh DB 0FCh ; 0FCh DB 0FDh ; 0FDh DB 0FEh ; 0FEh DB 0FFh ; 0FFh %' %' rgb2For1Chrs - %' This table defines those characters which have 2 for 1 substitutions. %' rgb2For1Chrs LABEL BYTE DB 0A0h ; 0A0h A-circle DB 0A1h ; 0A1h a-circle DB 0A2h ; 0A2h A umlaut DB 0A3h ; 0A3h a umlaut DB 0A4h ; 0A4h O umlaut DB 0A5h ; 0A5h o umlaut DB 0A6h ; 0A6h O-slash DB 0A7h ; 0A7h o-slash DB 0A8h ; 0A8h U umlaut DB 0A9h ; 0A9h u umlaut DB 0AEh ; 0AEh AE ligature DB 0AFh ; 0AFh ae ligature DB 0B0h ; 0B0h (ettset) %' %' rgw2For1Subs - %' This table MUST parallel rgb2For1Chrs. It defines the two characters %' which are to be substituted for the characters in rgb2For1Chrs. rgw2For1Subs LABEL BYTE DB 'A', 'o' ; A-circle expands to 'A', 'o' DB 'a', 'o' ; a-circle expands to 'a', 'o' DB 'A', 'e' ; A-umlaut expands to 'A', 'e'   DB 'a', 'e' ; a-umlaut expands to 'a', 'e' DB 'O', 'e' ; O-umlaut expands to 'O', 'e' DB 'o', 'e' ; o-umlaut expands to 'o', 'e' DB 'O', '/' ; O-slash expands to 'O', '/' DB 'o', '/' ; o-slash expands to 'o', '/' DB 'U', 'e' ; U-umlaut expands to 'U', 'e' DB 'u', 'e' ; u-umlaut expands to 'u', 'e' DB 'A', 'e' ; AE ligature expands to 'A', 'e' DB 'a', 'e' ; ae ligature expands to 'a', 'e' DB 's', 's' ; ettset expands to 's', 's'  %' rgw2For1Priorities - %' This table MUST parallel rgb2For1Chrs & rgw2For1Subs. It defines the %' offset in priority of the second of the two characters in rgw2For1Subs %' which are to be substituted for the corresponding characters defined in %' rgb2For1Chrs. For the first example shown A-umlaut, the -1 indicates %' that the "Au" substitution should sort immediately before a real "Au". %' A 0 would indicate that the "Au" substituted for A-umlaut should be %' sorted exactly equal to a normal "Au", and finally a 1 would indicate %' that the "Au" substitution should sort immediately after a real "Au". %' NOTE: This table is NOT used in conjunction with the first character %' collation table. When the first character collation table is being used %' the characters substituted as a result of 2 for 1 substitutions will be %' collated equal to their normal values, just as if the entry in this array %' had been defined as 0. %' rgw2For1Priorities LABEL BYTE DW -1 ; A-circle expands to 'A', 'o' & sorts before 'Ao' DW -1 ; a-circle expands to 'a', 'o' & sorts before 'ao' DW -1 ; A-umlaut expands to 'A', 'e' & sorts before 'ae' DW -1 ; a-umlaut expands to 'a', 'e' & sorts before 'ae' DW -1 ; O-umlaut expands to 'O', 'e' & sorts before 'Oe' DW -1 ; o-umlaut expands to 'o', 'e' & sorts before 'oe' DW -1 ; O-slash expands to 'O', '/' & sorts before 'O/' DW -1 ; o-slash expands to 'o', '/' & sorts before 'o/' DW -1 ; U-umlaut expands to 'U', 'e' & sorts before 'Ue' DW -1 ; u-umlaut expands to 'u', 'e' & sorts before 'ue' DW -1 ; AE ligature expands to 'A', 'e' & sorts before 'Ae' DW -1 ; ae ligature expands to 'a', 'e' & sorts before 'ae' DW -1 ; esset expands to 's', 's' & sorts before 'ss' %' This table defines those pairs of characters which special priorities when %' they are at the beginning of the word. (e.g. Mc or Ch in spanish) %' rgw1For2Wrds LABEL BYTE ; DB 'M', 'c' ; DB 'C', 'h' ; DB 'c', 'h' %' %' The table rgw1For2Subs MUST parallel rgw1For2Wrds. It defines the %' priorites of the sets of two special characters defined in rgw1For2Wrds. %' rgw1For2Subs LABEL BYTE %' DW 4CFFh %' DW 4301h %' DW 4301h %' %' The table rgb1For2Flags MUST parallel rgw1For2Wrds. It defines whether %' the 1 for 2 substitution defined in rgw1For2Wrds and rgw1For2Subs should %' always be made or if it should only be made when the two characters %' defined in rgw1For2Wrds are at the beginning of a string. %' rgb1For2Flags LABEL BYTE %' DB 01h %' DB 00h %' DB 00h )) ; The following table indicates the class of the each of the 256 characters. ; The five possible values are defined below. numer EQU 0 ; Numeric (Whole numbers) alpha EQU 1 ; Alphabetic (Letters of the alphabet) specl EQU 2 ; Special (Non-alphanumeric, but commonly displayed) graph EQU 3 ; Graphic (Line drawing and other special graphics) blind EQU 4 ; Blind (Not generally intended for display purposes) %DefTableData (CharacterClassTable, 10, %(%' CharacterClassSigniture DW 'CC' ; 0 / 8 1 / 9 2 / A 3 / B 4 / C 5 / D 6 / E 7 / F ; ----- ----- ----- ----- ----- ----- ----- ----- DB blind, blind, blind, specl, blind, blind, specl, blind ; 00h-07h DB blind, blind, blind, blind, blind, blind, blind, blind ; 08h-0Fh DB specl, blind, blind, blind, blind, blind, specl, blind ; 10h-17h DB blind, blind, specl, blind, blind, blind, specl, blind ; 18h-1Fh DB specl, specl, specl, specl, specl, specl, specl, specl ;  20h-27h DB specl, specl, specl, specl, specl, specl, specl, specl ; 28h-2Fh DB numer, numer, numer, numer, numer, numer, numer, numer ; 30h-37h DB numer, numer, specl, specl, specl, specl, specl, specl ; 38h-3Fh DB specl, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 40h-47h DB alpha, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 48h-4Fh DB alpha, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 50h-57h DB alpha, alpha, alpha, specl, specl, specl, specl, specl ; 58h-5Fh DB specl, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 60h-67h DB alpha, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 68h-6Fh DB alpha, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 70h-77h DB alpha, alpha, alpha, specl, specl, specl, specl, blind ; 78h-7Fh DB graph, graph, graph, graph, graph, graph, graph, graph ; 80h-87h DB graph, graph, graph, graph, graph, graph, graph, graph ; 88h-8Fh DB graph, graph, graph, graph, graph, graph, graph, graph ; 90h-97h DB graph, graph, graph, graph, graph, graph, graph, graph ; 98h-9Fh DB alpha, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; A0h-A7h DB Alpha, alpha, blind, blind, blind, blind, alpha, alpha ; A8h-AFh DB alpha, blind, blind, blind, blind, blind, graph, graph ; B0h-B7h DB graph, graph, specl, graph, graph, graph, graph, graph ; B8h-BFh DB graph, graph, graph, graph, graph, graph, graph, graph ; C0h-C7h DB graph, graph, graph, graph, graph, graph, graph, graph ; C8h-CFh DB graph, graph, graph, graph, graph, graph, graph, graph ; D0h-D7h DB graph, graph, graph, graph, graph, graph, graph, graph ; D8h-DFh DB graph, graph, graph, graph, graph, graph, graph, graph ; E0h-E7h DB graph, graph, graph, graph, graph, graph, graph, graph ; E8h-EFh DB graph, graph, graph, graph, graph, graph, graph, graph ; F0h-F7h DB graph, graph, graph, graph, graph, graph, graph, graph ; F8h-FFh )) ; The Yes/No strings are space delimited words meaning Yes or No. ; It is recommended that Yes and No remain as part of their respective strings ; for compatibility with submit files. ; If you wish to multiple answers for yes or no, modify the table as ; follows: ('Yes Oui'). That, seperate words by a space, but do ; not put a space after the last entry. ; Note: For some programs, such as the Cmd File Editor, if you have more than ; one word matching yes or no, only the first one will be displayed. ; You should choose the first entry as your native %DefTableData (YesNoStrings, 11, %(%' YesNoSignature DW 'YN' %sbString ('Ja Yes') %sbString ('Nein No') )) ; The Special Characters table contains characters that are subject ; to special interpretation by programs like the Executive. The table ; includes entries used by Convergent as well as customer reserved entries. ; Convergent characters follow the nEntriesCT field, while customer entries ; follow the nEntriesUser field. To change the characters used by ; Convergent programs, simply change values in the CT portion of the ; table. For example, to change the literal insert or escape character ; from CODE-' to backslash, change the first entry from 0A7h to 5Ch. ; ; If you add entries, be sure you add the entries after the nEntriesUser ; field, and increment nEntriesUser. ; ; NOTE: DO NOT ALTER THE ORDER OF THE ENTRIES. ; %DefTableData (SpecialCharacters, 13, %(%' SpecialCharacters DW 'SC' nEntriesCt DB 1 DB 05Ch ; Backslash nEntriesUser DB 0 ;customer entries start here )) ; ; The KbdChords table defines the unencoded keystrokes for the code, shift ; and action key chords. ; ; The table is also used by the Remote Console. ; %DefTableData (KbdChords, 14, %(%' KbdChordsSig DW 'KC' cIkey DW 14 ;number of iKeys described below iKeyDbgrA DW 61h ;(action-a) - enter debugger in single process mode iKeyDbgrB DW 62h ;(action-b) - enter debugger in multi process mode iKeyDelete DW 7Fh ;(action-delete) - discard kbd type ahead iKeyOverType DW 44h ;(action-overtype) - turn off video refresh iKeyCode0 DW 4Ch ;left code key iKeyCode1 DW 4Dh ;right code key iKeyFinish DW 04h ;finish key iKeyAction DW  43h ;action key iKeyShiftLock DW 45h ;shift LOCK key iKeyShift0 DW 48h ;left shift key iKeyShift1 DW 49h ;right shift key rsvd1 DW 0FFFFh rsvd2 DW 0FFFFh rsvd3 DW 0FFFFh )) ; ; TABLE 15 RESERVED - DO NOT USE ; ; ; The table below, MultiByteEscapeKeys, defines keyboard keys which when ; depressed result in multiple keystrokes being returned to keyboard clients. ; ; All entries in the table are unencoded keystrokes. Any key on the keyboard ; may be defined as a MultiByteEscapeKey. Also, different results may be ; defined depending on the shift and code key state. See the CTOS Reference ; manual Appendix C-1 for unencoded value of keyboard keys. ; ; The resulting key sequences must include downstrokes as well as upstrokes ; as well as any shift state required to produce the keyboard characters ; desired. An upstroke is the key value OR'ed with 80h. ; ; The two examples below are 'commented out' by the notation %' ; preceding each macro. ; ; In the first example below, the key '0' on the numeric pad (unencoded ; value 4Ah) is defined to produce 6 keyboard events - ; downstroke 'a' (61h) ; upstroke 'a' (0E1h) ; downstroke 'b' (62h) ; upstroke 'b' (0E2h) ; downstroke 'c' (63h) ; upstroke 'c' (0E3h) ; These 6 keyboard events would produce the 3 keyboard characters 'abc'. ; ; In the second example the key '0' on the numeric pad is depressed when the ; shift or shift lock keys are active would produce the keyboard characters ; '[sys]'. Note that the first keystroke in this list is shift ; upstroke (0C8h) which turns off the shift state caused by the invoking ; key, shift-'0'. ; %DefTableData (MultiByteEscapeKeys, 16, %(%' EscapeKeySig DW 'MB' Unshifted EQU 0 Shifted EQU 3 Coded EQU 4 Shift2ed EQU 8 %InitEscapeKeys %'%DefEscapeKey(4Ah, Unshifted) (61h,0E1h,62h,0E2h,63h,0E3h) %'%DefEscapeKey(4Ah, Shifted) (0C8h,5Bh,0DBh,73h,0F3h,79h,0F9h,73h,0F3h,5Dh,0DDh,48h,5Bh,0C8h,0DBh,73h,0F3h,79h,0F9h,73h,0F3h,48h,5Dh,0C8h,0DDh) %EndEscapeKeys )) %TableEnd END , graph, graph, graph, graph, grapINITCOMM_PRE10[PLM86 V2.305/24/88 17:16:4˖9STACKMEMORYCODEDATACONSTINITCOMM_PRE10_CODEDGROUPh@* ݘHwH TRD., Kn INITCOMMLINE_INITCOMMISRINTERNALfCHANGECOMMLINEBAUDRATE_RESETCOMMLINE_)PARSECOMMLINESPEC_g1;IOINTCTLEOICLASS RGCOMMLINE IOEXTCTLREGSETCOMMISRRAWSFN SETCOMMISRRAWCURRENTOSVERSIONDIV32 GETMODULEID GETPSTRUCTURE GETUSERNUMBERLOCKIN RESETCOMMISRVALIDATECOMMLINEHANDLE PMEDCOMMNUBPSPURIOUSRAWCOMMISR RESETCOMMPORTPISRTXDATA_PRE10PISREXTINT_PRE10PISRRXDATA_PRE10PISRSPRXCND_PRE10A o.,} DXPH@b 8"b&p@ *2Kn,X` %KР F;@0 Ec0123abcdABCDjUQQFPF uJ^SvFPgF u1~tB&~tCv^S^ SSvf] V $\T\\fU^&G&O;t t u.^&GsA!s&&b< s^&G&;Gt=FPFPF t@Fs-F ;wB;t@~wA" €>b "FFrPPFPF u^&GF&G&G&G&G &G &G&GF&G &G>bs`b<s<sFMFG>b sDPP PF t!< uFF <t<uFFvwvPSSSSPPPP>bs?F JNH L,*.`/8\VĔ̶V Ѝ׍ލ 3AFV UfņŌŒŘŞͩVŲžčʍЍ֍܍hUF"D>bs?F FH>b sDF " &F F>b sP  - zFvvPSSSSPPPPF t>b s_vP^&w5>brD>b s=^&u No&&ߋNo&& o&& FFwZ>b s ȰN ND !'-3;>BO[agmsyāĄčĚġħĭijĹĿōˍэ׍ݍ 06<BHSVd|ŃśŮŸ†׍jC+NFv^&xuFo&&  o&F&Fuo&&|^&u&tvP^&G& GPMFNt#v"FVb<r :sF0؍F^FFwU^&Hs&@^&Z&P-vF^&Z&PS^&@_[&@Z&PFu^&^&G Z&W"F&G,SF^ &&O&G]+%1Cx̉V ĕĥĴ;VOWؠUQQv vF uc>b s~ t=Qv Pv$=~ v@6~ uF FFwN s v Pvn Fu] V:)UQvvF uvF u v ]> VV נ_UF0؍F^FFw^&Z&PFu^&_ &G"v拄&G$&G&>b u &G(F%F^&O(&G*F^&G.]S/T\djqĄď%gUF uMs&&?s1vF@Ṁ+ȃ66$6"vps&&? siF u v v拔6F=s6(6&P6(6&v1F!< udF1UFFF t~uHF؋*;FwFFڋFs"PF@6^^㋇FF.(FV^㋇FRT(Fv拔FF]1@4;?EVPhuĄĈ̑Vęĝ̣VIJ 7STgU~ &N u+JVuF F~ >Nu+JBVu~ ]Nu+JBVNF+ȃrCw>NF+ȃu ^ &80u&vN^ &c u+JVu<F%^&] ĎtGWp  XB o '0w!=d Copyright 1987 Convergent Technologies, Inc. All rights reserved.Ver 11.0 Linker 11.0__B[cy)=E_g 1x  %C`px %-5=`}` 0_Baw&5Cew0_KAsAAAAAAAA(A8AEA]AjAAAAAAAAAAAAA5AUAAAAPAeAuAAAAA|_t^CDV.EV!i!II$IoIIIIoIIII?I+T)Xa/m/D);Y15 @ Y   7     ; G R Z t        = b       ' N q         & M r       5    T c n x88888888888888888888888899 999999#9'9+9/94989<9@9D9I9M9Q9U9Y9^9b9f9j9o9s9w9{9999999c < # Q _  V   n 1 :1 X1 1 W1 t   ?  7 w p  5   * * * * Qf sf   7 _,_::2_6_ $ o  n @w {_pO_@/?@0 O/ж_/@ _`@`/p/0`@?O@  @PP'()E" +* /K}IIII\IIAII0Ia<+G &     ! < p 7 l    X   # + P  ^ $ w M q L <   ) O r 1 t At Q  ]    P   2    * * 5* ]* d    l   , U   :6  p AI 1 t * S f            ! ! [Kbd][Vid],[Lpt] [Nul][SysIn]D[SysOut]>D6H$\H\Ha6H$H$ 1 W  ZH$\ TTD6 $|DD=t T [sys]LptConfig.Sys[KBD][VID]>V[Librarian [VID]Input File: pos: Record Type: Fatal Error: An internal error has occured. Fatal Error: Module is not in the library Fatal Error: Cannot open input file is a multiply defined PUBLIC. Proceed?Too many object modules already exists. Replace?Duplicate module name   %)+/5;=CGIOSYaegkmqSymbol table capacity exceeded (Length H bytes) Listing file write errorToo many PUBLIC symbols<$>VM.tmpVM.tmpCannot open VM.TmpAllocate error on VM.TmpWrite error on VM.TmpRead error on VM.TmpCannot open list file Bad yes/no parameter .objInvalid syntax Invalid syntax No library file specified -OldCannot open library file Library does not exist. Create?Cannot write library file  (Press GO to continue, FINISH to exit) [yn] yesnoynInvalid object module/library Write error on library/extract file Input file read error Cannot open extract file Close error on extract file -Tmp-OldError while renaming library or its backup file        [KBD][VID]VNVF[!Scr]$$.Tmp=\z2QPress NEXT PAGE or SCROLL UP to continue(Press NEXT PAGE to continue[<<11.0Us HPHPPPRPQwmWRPQ$]Us HP ]Us HPv!]Uv!]UrP!6P" njǍGPƿPFP FP!vPFPPP!PPHP P4Fs HPF,v L]UPgv!v/]UPvU]UQ] ]U^ &u&tP!^GP.P!]U ¿ĿĿ u PP^F&GĿ^&t&PP^FFnjǹƿQ؍OQ&GPRPPrmPSĿu"r &^ƿPF tPs]UQL uJhPPPP3FhPPPP3FhP P4FiSf>u>t"SP,I ,r *I ,]UFuKFFKFFFFFFKPP#^FF&G]U u K>wt(Ɔ:ruݚKt rsPPPsH&GĞ&Ga!s#rĞ&G;sPlPcĞ&Gsr+Ƃ*PPPΡHĞ&GĞ&G]UPFP FFV ]U >r PPUt(Ɔ:ruݠrs6Pnj&O.OtI&O>OtIu&G+IǍWƒǍPPP6ǚrĞ&Gs Ğ&t!sPPcr.Ğ&u#&GrĞ&G6PĞ&G tPPnjǍGPpĞ&GĞ&G5Ğ&tPPUĞ&G6Plj]UQQFFŢŢŚK>us >uuC6s3s#FrrEF0>t,>uFHP>tfF5]UQFF=wLJFu]U+%H1PljFH ljF~t vPnj&G%FNSPSPPFP FFVFVFVQRPFPFPPFP3FPPPFP3F tPxPvvF tPxPPPFP3F tPxP,PPFP3F tPxljFljF~t5PvPSPFP3F tPxFNŋ]UQ9Fw$F^;FsF^]U^ &te&u&tW^G&vt^ &u^FƂ!(^ &t+^ &_PP#^F^&G uPPPPPPPƆ%s'Ğ&8t+&O%;r&G%;r)Ğ&G%&Ğ&G%ľ򤊆@QĞ&G%]%;r)-U^FNFFFFF~tP^ F^ NV´3ЉVVŠ^3ӉVV3ӉVV3‰FNFN몋F16Nj^ F%1^F16Nj^ F1^^ ?u^?u] UQ^ &^&:u9^ &FFt-ȈF^ &H^&P:tފFs2ʀ tа] UQQ^FFFtȈFVʋ^@ 2ڊF]UQQH%FN;vǡljFFs PPUvPnjNjF]U vP^F^PFljFFF^ȊN:r^&FuފF^&G^&G^&^&G^]UQQF PPnj&G6ǰP^F&G:Ft/^&&uՊFr6v]Uv aF؋ţ>tFr^ PFǣnjNj^㋏ŋ&&G&Gv v 6Ǎ|^Y^ljŊNt PQIB6ǰPnjv SǍGPPs6vv#]& UFF=v؋ʼnFF trPP^FF&F" &GFvP^F&FF&8Gtu^S^Svvv^^&t FF밋FFti]U]UtsFF(FFF;FwsFFv^PFVrF;FuFHP P4FvP^F_^FHPGP^&PFP3FHP.P PFP3FvPP#^F&wPHP7P PFP3F ~PP*F:FsoF;Fwdv^PFVs F;Ft=vP^F_^F&Fߠs,&8vF^wF{NߵFvPP#^F&GtkP^F_^F&FފN!:vF:r*ЈV!*F߈FފF$N*^w{F^ &8vFߊFB*^wF{NߵFNFȵQ$**N޵^z.FFFFB HQNQPFP3F t AWPUV]UPFNINFNF+ȃr u ~tF@FF9FrlHFv^PFVv^p0vvsv^P@PNȋvFV^@PF댂~uoFȈFJΉNBFBNFN^PNVFFFFp0RQsEv~^PQvFV^Pv^PFVvvv^p0sZv~^PQvFV^Pv^PFVvp0RPsEv~^PQvFV^Pv^PFVv^PFVNF;v^PPvFV^PNv^p0vvrߋv^PFVFvvv^p0rkڋF+FVN+;sFJ΋FBFFFFB΋FBFFFF<r q'Ps]UFs/Fr(v P^FvP^FF"v P^FvP^F^_^Fv\^F&v&8w^&FFF:Fs-^&H ʈN^& PV:wF:Fr:F^&^&:v%^&^&:rsFrF]UQ^ &to> r ZPPU^ &GsǡDZljF؋F ^ &_㋇^G^wPP#^ F&GrNj]U'Ǎ؉Ǣ*SP>tfs_P6ǚHP P4؍P6ǚP6ǚHP P4؍P6ǚ]UFFuFFFF9Fr)F^㋇߉Fu Fr^㋇;Fu F]FFU߹FH^;r(㋇ljFtPP]F؋FFu͋]U^Ƈ ]UFFH^;r-ヿuF^㋇;Fw FFFuȋNJ sS9LJ8Nj]Ur V~r^^NSQSPWRF=u&{F^NPQPPvvFPFPvPPmmPF t WPU^㋇ljF9Fr8 FV6RP F t̿WPUF FV6Nj^ĿWWRPFP$F t WPU^Ƈ ]UQQF Pv^Fv]U㋇;Fu FsKQvP,Ft ؋ߣ7vPFءlj؋F;v PsuF;u"FĿϸF@JF FV6NjĿWWRPFP#F t WPUubFFH^;rヿt ;FsFFuFH^;r#ヿt+F;r@FuҋFs Ƈ ğϋ]UQv FP^SFF^&GF]U¿u¿vP^FĿ&G]U "P uPPFPHP^SvRPPwmPSP$ t PPUHPPPP3HPPPP3HP P4PP~Т!s PPUP tWHWPFPFvPPP&GPdž9wWPFPFv# :v2(uu*򤊆*uR@9vCWPFPNv(uF muC򤊆L urk(u><r ȴ)t PPUVF_򤀮&<r ȴ)t PPUPPPljPPP&G%PdžtHPFPFvP뱸PPP t )PPUPP6PPrmP6u3 P_D򤀆5rt HPU"!s PbPcrdPPPRPPwmPS&u>&uf$F$&]U>&u]ˋ$?t@]UF)F;&w )&$]&)F>&uٚfUQFFF]UPPU]UPvU]UQƿPP(P&P,($ tt WPUs&LP(S6&FP3, tPxs&P(S6&FP3, tPx]U>&t7PFP FNV&+׉NVPRQF]UQQLP^GP^&PRPPwmPSP$F t 1WPULP(SPFP3F tPx]UF FVPFP F tPxFV+FVuvPvv!P,PFV+FVPFP3FF tPx]UPv4F^FPFPQFP3FP^S^PFP3FPP4FP$@PS&HPFP3F tPx]U>&tDLPFP FNV&+׉NVLPRQFFVZ\LPF t KWPU]UP, tPxPP ,6 , tPx "s"PS6RPPmmP, tPG6h򤊆QPRPP, tPG6S6RPP, tPG,lPPRPP, tPG ,6 ,]UQ s 6F]UpPvU]Uv!vP]U]U].=U].AU].EU].IU؎^]U^&^ &&W^&G :st ^&Gs^&G&G&WFV&w&S^&wRPFP#FV~NV~u/ t^&9u&9Wr&W&F ^&GFF up^&GFV^&G&WF^&G^&G&W;Vu;Fw4&G^&G&W&+G&WFVF&G^&uFF]U츄Vnjޱ;u$:u ^&G(~F =rmt =tmt ^&G ]UQQ^&^ &&W^&G :t WFP5F uC~uF1~uF$^G^ &Z&W^&F^&GF]U쾴~F =amt=wmt=rmt=tmt =mmt&^&G F^&Z&WF^&G]U^&^&G :t ^&GN ^&]U^&^ &&W^&G :t ]# U6^&^&G :t O uPPP/|F t&G < r6<w2F ^&~ t^ &?uxPPP^ Sv c>u!FPF u ~ r uDPPP/|F t^&GF&8G w ]FX ^Fv&DF&GF&GF&GF^&GF&GF&GF&GF&G F&8G uANsNQPPF tX FFF ;FwD FrF9F w^ &FF^&O&@^&G^&w FA:r 6^ &us^ &G ^ S^SF^ &G F]U^&G :t:u^&G&G&W^&&Wd^&G :suY&Gs&G&;Gv &G&W^&G&G&W^&&W^&G s7&G s/^&/&_!^&G :u^&&G ]UFPFP"V^&?{t@&?[uP60:Nt. FPQSVSVQ^[Y=Xt ],N~] t&<}N u+JV s\tWNAv~^YF@^&^v&48V ^& ~]N u+JVuF HN;v9@N +^vp^~&=9^YF@N +^&CFPF u^&O@wA^~&=9^Y^&G@^&^v&48a^&v&4^P^&wg&we^&^v&48c^&]U ^vFF^&F^&G^vNFY^&Gw^ &Gj^&GyF^&^vNFYFPF uQ^&G@^&^&O@wA^^Y^&Ƈ^&Ƈ^PF uI^ &k]u+JBV^ GkPRPPP^S|PgPP] U^&G F =wmt =amtI~]Nu+JV^SBRPPFPQ؍GPQF!t=uF~^&Gi^GePF^kvNFYF^&^S^Sv^SFPfF uF~u;^SvRPPRPF=u^v&xF^&Gi뾋F u9^SFPvRQWv Pv$F u ^&G ]U ^&G :t ^&G ^S\F u^&FF^SGkPF&P^SFPpF u^&Oit^v8x^&GiF^S^SvuTF tM^G8P^SvRPPmmPF u"^&w8F t^&w8 FF]U^&G :t F^&Gj]U^&^SP\]U^&G :t :t UƆ^&GF1F&VF9FtfF+^&G&WFV&wSQRPFP#F tuvN+N^~9^&w^Sv^&w&wFP$F t%u^Sv\F uƆ뵋FsF1F^&G&WF+F^&GN+N^v0Y^&G&GFss^SP\]U^&G :t :t ^&G&WFV&O&O&N~;u;wN~Fs FF%uDPP>P/|F uo>&G ^ &:GwY^ &G>X ^F&G;FsF^ &GPP^&GȴP^SvF tn<~u8F^ &OQP^&OɵQPvdFF tUV~uF~ t~uF r~t4FPFP6FF^&~uq븋F] U^ SP^Sqt]U^ SP^Sqt]U^ &G :t x< :uPP:P/|F uV:&G < rL< wH^&^&G^&GP^&G^&G^&G^&G^&GA^&G6@ >uDPP>P/|F u>&G ^ &:Gw^ &G>@ FF^ &G^&^&G^&G^&G^&G^&G^&G^&G^&G^&8G uA^&O^&8G u@^&G^ &GA^&G^ &G^&G]% UFf]UFV v]UFV v]UFV%]U6JPt6DP u%6W66JPT u6L=t=!t3]U <r"^&&W&Gd&G;F s Wv dX^F&F&GFFF;FsN ;Nvd&@FFڋF;Fr ,dv@^&Z&WSd&_[&G]Us]d&G@]U cr d&G;FsGvdX^F&F&GFFF;Fsd&@FFF]U>bu`P u$>bt`&Gdf>ft>dt]ð]Uh~F^&Z&WF1&G&G;s;F =wmtAN=rmt=tmuFrmF =wmt =mmt=amuFmm FP^Sv^SvvF=uv~mmuo^Sv^SvPuF F t ^ &?TNt4}F &G^ &O>F u+Jus4ЉF V4^ &G6&^&Z&W] UQ^ &G&O&G &G &G&W~ rmus&G &G&O&G ^ &G &G&G&G ^ SvvF^ &O ] U vPFPPF uxFV^&&W~u~tYFuRFVFV)F^v^ SPvvFP#F u^ &?Gu&G &W^&&W]  LIBRARY: ctos.lib VERSION: 11.0 (Saturday April 11, 1987, 11:12) LIBRARY: Librarian.Lib VERSION: 11.0 (Friday April 17, 1987, 14:22) COPYRIGHT 1980, 1987 CONVERGENT TECHNOLOGIES, INC. ALL RIGHTS RESERVED THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE SOLELY FOR THE OPERATION OF A DESIGNATED COMPUTER FOR A PARTICULAR PURPOSE, AND MAY NOT BE COPIED OR OTHERWISE USED WITHOUT THE PRIOR WRITTEN CONSENT OF CONVERGENT TECHNOLOGIES, INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, INCLUDING ITS SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT TECHNOLOGIES. VERSION: 11.0 (Friday April 17, 1987, 14:19) FҠhFܡFFFՠF֠qFΰqtNϢtP$uHpFΠsFϠvfFҠwhFܠxiFݡFӊĈFԠFՠFְpsf$u\rFΠuFύFP FPFP򤠂fhruFFF̋G$FЊG!FыG&F uFFPvt $uG FэFPSj4FPSFPn G* t6G*G6Gmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm% mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm crashDump.sys Local.sub fileHeaders.sysmfd.sys sysImage.sys Cleanup.fls Master.sub $Software Development Diskette 2 of 2 InstallConfig.sys Rest.flsSoftwareDevelopmentCmds.sublog.sys badBlk.sys Delete.fls Submit.fls All.sub HdInstall.sub InSys.fls& Z" 03103-2/2|.ig2/ig+%BH_9|M^SysCT9{fileHeaders.sysSys.ig.ig.igVV dmfd.sysSys.ig.ig.igdlog.sysSys.ig.ig.ig` sysImage.sysSys.ig.ig.ig@ badBlk.sysSys.ig.ig.ig& & crashDump.sysSys.ig.ig.igG= Cleanup.flsSys.ig.igpgQ Delete.flsSys.ig.ig.ig Local.subSys .ig.ig.igf6 Master.subSys .ig.ig.ig JH Submit.flsSys .ig.ig.ig  $Software Development Diskette 2 of 2Sys .ig.ig.igJA InstallConfig.sysSys .ig.ig.ig(' =IAll.subSys.ig.igpgْ HdInstall.subSys.ig.ig.ig  InSys.flsSys.ig.igpg=Rest.flsSys.ig.igpg8nSoftwareDevelopmentCmds.subSys.ig.igpg; Assembler.runCT.ig.igpg.CommNub_pre10.objCT.ig.igpg&CommStatus_pre10.objCT.ig.igpgb,' rDump.runCT.ig.igpgy2German>Nls.asmCT.ig.igpg^$InitComm_pre10.objCT.ig.igpg Librarian.runCT.ig.igpgkXNls.asmCT.ig/igőpg 8Nls.mdfCT/ig /igɑpg24 PMake.runCT /ig/igpg36  SamGen.mdfCT/ig/igˑpg( *( ~ SamGenAll.asmCT/ig/igϑpg?J@r SamGenAll.objCT/ig!/igґpg Wrap.runCT !/ig'/igpgjnpB! OsSub.mdfCT!(/ig*/igӑpg MPv`louiegreg5"UserrqLabel.asmCT"+/ig-/ig֑pg"  k#UserSysCommonLabel.asmCT#./ig0/igّpg,MPRfWBE%$ RqLabl.mdfCT$1/ig5/igۑpg@V%&( U&'T'(S()R)*|*InitComm_pre10.objNls.asmUserrqLabel.asm" Assembler.runCommNub_pre10.objCommStatus_pre10.objDump.runGerman>Nls.asm Librarian.runNls.mdf SamGen.mdf SamGenAll.objWrap.run UserSysCommonLabel.asm# PMake.run SamGenAll.asm OsSub.mdf! RqLabl.mdf$) ; ; COPYRIGHT 1980,1983, 1987 CONVERGENT TECHNOLOGIES, INC. ; ALL RIGHTS RESERVED ; ; THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE ; SOLELY FOR THE OPERATION OF A DESIGNATED COMPUTER FOR A ; PARTICULAR PURPOSE, AND MAY NOT BE COPIED OR OTHERWISE USED ; WITHOUT THE PRIOR WRITTEN CONSENT OF CONVERGENT TECHNOLOGIES, ; INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, INCLUDING ITS ; SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT TECHNOLOGIES. ; ;############################################################################ ; ; NATIVE LANGUAGE SUPPORT TABLE DEFINITIONS ; ; NLS tables are a collection of tables loaded at CTOS initialization ; which provide native language configurability for CTOS. ; Convergent Technologies, Inc. reserves the ID range 0 through 7FFFh. The ; range 8000h thru 0FFFFh are available for customer use. ; ; To change an NLS table, edit this file, assemble it, link it ; as follows, copy Nls.sys to [Sys], and reboot the workstation. ; %'Link %'Object modules Nls.obj %'Run file Nls.sys %'[List file] %'[Publics?] %'[Line numbers?] %'[Stack size] 0 %'[Max memory array size] %'[Min memory array size] %'[System Build?] %'[Version] %'[Libraries] None %'[DS allocation?] %'[Symbol file] ; ; ;############################################################################ %'########################################################################### %' %' NLS TABLE MACRO DEFINITION - %' %' %DefTableData (TableName, ID, %(data)) %' %DefTableString (TableName, ID, %(string)) %' %' For example: %' %' %DefTableData(UserData, 8002h, %( DW 4 %' DB 41h, 42h, 43h %' DB 0AH)) %' %DefTableString(UserStringName, 8000h, %(StringInSingleQuotes)) %' %'########################################################################### ;############################################################################ ; ; ACCESSING NLS TABLES - ; ; The pointer to the NLS table directory is returned by calling the ; CTOS routine "GetpStructure" with a case of 25, for example: ; ; CheckErc (GetpStructure (25, 0, ads pNLSDirectory)); ; ; The NLS table directory has the following format: ; ; wSignature WordType /*value is 'NT'*/ ; cbTable WordType /*count of bytes contained in the ; directory and tables*/ ; cTables WordType /*count of tables*/ ; oRgId OffsetType /*offset from pNlsDirectory of the ; array of table ID's*/ ; oRgoTable OffsetType /*offset from pNlsDirectory of the ; array of offsets to tables ; ;############################################################################ $INCLUDE(nls.mdf) %TableInit attrControl EQU 000h + 000h + 000h ;no shift lock, no repeat attrAlpha EQU 080h + 060h + 010h ;shift lock, repeats attrRepeat EQU 000h + 060h + 010h ;repeats attrRepeatFast EQU 000h + 040h + 018h ;repeats, faster attrShiftDia EQU 01h; diacritcal key when shifted attrUnShiftDia EQU 02h; diacritcal key when unshifted attrBothDia EQU 03h; diacritcal key when shifted or unshifted %DefTableData (KbdEncodingTable, 0, %(%' DW 'KE' ; signature DB 0, 0C0h, attrControl ; 000 help DB 01h, 0C1h, attrRepeatFast ; 001 up-arrow DB 02h, 0C2h, attrControl ; 002 mark DB 0Dh, 0C3h, attrControl ; 003 bound DB  04h, 0C4h, attrControl ; 004 finish DB 05h, 0C5h, attrControl ; 005 prev page DB 06h, 10h, attrRepeat ; 006 1/2-1/4 DB 07h, 0C7h, attrControl ; 007 cancel DB 08h, 08h, attrRepeat ; 008 backspace DB 09h, 09h, attrControl ; 009 tab DB 0Ah, 0Ah, attrRepeat ; 00A return DB 0Bh, 0CBh, attrRepeatFast ; 00B down-arrow DB 0Ch, 0CCh, attrControl ; 00C next page DB 0Ah, 0Ah, attrRepeat ; 00D next DB 0Eh, 0CEh, attrRepeatFast  ; 00E left-arrow DB 12h, 0D2h, attrRepeatFast ; 00F right-arrow DB 80h, 81h, attrControl ; 010 SH-L DB 11h, 0D1h, attrRepeat ; 011 scroll-up DB 0Fh, 0CFh, attrControl ; 012 move DB 13h, 0D3h, attrRepeat ; 013 ) scroll-down DB 14h, 0D4h, attrControl ; 014 copy DB 15h, 0D5h, attrControl ; 015 f1 DB 16h, 0D6h, attrControl ; 016 f2 DB 17h, 0D7h, attrControl ; 017 f3 DB 18h, 0D8h, attrControl ; 018 f4 DB 19h, 0D9h, attrControl ; 019 f5 DB 1Ah, 0DAh, attrControl ; 01A f6 DB 1Bh, 0C9h, attrControl ; 01B GO DB 1Ch, 0DCh, attrControl ; 01C f7 DB 1Dh, 0CDh, attrControl ; 01D f8 DB 1Eh, 0CAh, attrControl ; 01E f9 DB 1Fh, 0DFh, attrControl ; 01F f10 DB 20h, 20h, attrRepeat ; 020 space DB 39h, 39h, attrRepeat ; 021 9 9 DB 82h, 83h, attrControl ; 022 SH-R DB 84h, 85h, attrControl ; 023 0 DB 86h, 87h, attrControl ; 024 NEXT  DB 0, 0, 0 ; 025 DB 0, 0, 0 ; 026 DB 27h, 22h, attrRepeat ; 027 ' " DB 0, 0, 0 ; 028 DB 0, 0, 0 ; 029 DB 0, 0, 0 ; 02A DB 3Dh, 2Bh, attrRepeat ; 02B + = DB 2Ch, 2Ch, attrRepeat ; 02C , , DB 2Dh, 5Fh, attrRepeat ; 02D - _ DB 2Eh, 2Eh, attrRepeat ; 02E . . DB 2Fh, 3Fh, attrRepeat ; 02F / ? ;Warning: ; Do not change the comments for the following characters to add the ; actual characters. If you do, you will get errors from the Assembler. DB 30h, 29h, attrRepeat ; 030 0 right parens DB 31h, 21h, attrRepeat ; 031 1 ! DB 32h, 40h, attrRepeat ; 032 2 @ DB 33h, 23h, attrRepeat ; 033 3 # DB 34h, 24h, attrRepeat ; 034 4 $ DB 35h, 25h, attrRepeat ; 035 5 percent DB 36h, 03h, attrRepeat ; 036 6 cent DB 37h, 26h, attrRepeat ; 037 7 & DB 38h, 2Ah, attrRepeat ; 038 8 * DB 39h, 28h, attrRepeat ; 039 9 left parens DB 0, 0, 0 ; 03A DB 3Bh, 3Ah, attrRepeat ; 03B DB 0, 0, 0 ; 03C DB 0, 0, 0 ; 03D DB 0, 0, 0 ; 03E DB 0, 0, 0 ; 03F 3F = iKeyInvalid DB 0, 0, 0 ; 040 40 = iKeyNoKeys DB 36h, 36h, attrRepeat ; 041 6 6 DB 2Dh, 2Dh, attrRepeat ; 042 - - DB 0, 0, 0 ; 043 reset DB 0D0h,0D0h, attrControl ; 044 overtype DB 0, 0, attrControl ; 045  lock DB 32h, 32h, attrRepeat ; 046 2 2 DB 33h, 33h, attrRepeat ; 047 3 3 DB 0, 0, 0 ; 048 shift DB 0, 0, 0 ; 049 shift DB 30h, 30h, attrRepeat ; 04A 0 0 DB 2Eh, 2Eh, attrRepeat ; 04B . . DB 0, 0, 0 ; 04C code DB 0, 0, 0 ; 04D code DB 0, 0, 0 ; 04E DB 0, 0, 0 ; 04F DB 0, 0, 0 ; 050 DB 0, 0, 0 ; 051 DB 0, 0, 0 ; 052 DB 0, 0, 0 ; 053 DB 0, 0, 0 ; 054 DB 0, 0, 0 ; 055 DB 0, 0, 0 ; 056 DB 0, 0, 0 ; 057 DB 0, 0, 0 ; 058 DB 0, 0, 0 ; 059 DB 0, 0, 0 ; 05A DB 5Bh, 3Ch, attrRepeat ; 05B [ < DB 37h, 7Ch, attrRepeat ; 05C 7 | DB 5Dh, 3Eh, attrRepeat ; 05D ] > DB 5Eh, 7Eh, attrRepeat ; 05E ^ ~ DB 0, 0, 0 ; 05F DB 31h, 60h, attrRepeat ; 060 1 ` DB 61h, 41h, attrAlpha ; 061 a A DB 62h, 42h, attrAlpha ; 062 b B DB 63h, 43h, attrAlpha ; 063 c C DB 64h, 44h, attrAlpha ; 064 d D DB 65h, 45h, attrAlpha ; 065 e E DB 66h, 46h, attrAlpha ; 066 f F DB 67h, 47h, attrAlpha ; 067 g G DB 68h, 48h, attrAlpha ; 068 h H DB 69h, 49h, attrAlpha ; 069 i I DB 6Ah, 4Ah, attrAlpha ; 06A j J DB 6Bh, 4Bh, attrAlpha ; 06B k K DB 6Ch, 4Ch, attrAlpha ; 06C l L DB 6Dh, 4Dh, attrAlpha  ; 06D m M DB 6Eh, 4Eh, attrAlpha ; 06E n N DB 6Fh, 4Fh, attrAlpha ; 06F o O DB 70h, 50h, attrAlpha ; 070 p P DB 71h, 51h, attrAlpha ; 071 q Q DB 72h, 52h, attrAlpha ; 072 r R DB 73h, 53h, attrAlph* a ; 073 s S DB 74h, 54h, attrAlpha ; 074 t T DB 75h, 55h, attrAlpha ; 075 u U DB 76h, 56h, attrAlpha ; 076 v V DB 77h, 57h, attrAlpha ; 077 w W DB 78h, 58h, attrAlpha ; 078 x X DB 79h, 59h, attrAlpha ; 079 y Y DB 7Ah, 5Ah, attrAlpha ; 07A z Z DB 34h, 7Bh, attrRepeat ; 07B 4 { DB 38h, 5Ch, attrRepeat ; 07C 8 backslash DB 35h, 7Dh, attrRepeat ; 07D 5 } DB 0, 0, 0 ; 07E DB 7Fh,0C8h, attrRepeat ; 07F del %' THE FOLLOWING MACROS HANDLE DIACRITICALS %' These macros allow the user to define pairs of keys which may be typed %' one after the other, but which produce a single character value. %' For example, a user may want to produce an "e accent-grave" by typing %' first an "accent-grave" and then an "e", the result being the code for %' the font character "e accent grave". %' The macros have the following structures: %' %' InitDiaCriticalTables - no parameters. It appears once. %' %' DiaCriticalSet(FirstKey,SecondKey,FontCode) - One instance for each pair %' of diacritical keys you wish to define - Explained below. %' %' EndDiaCriticalTables - no parameters. It appears once. %' %' NOTE: Each key that you wish to be the first key in the diacritical %' pair must be given the proper atttribute in the above %' keyboard encoding table. %' %' FirstKey and SecondKey are hexadecimal codes produced by the desired %' key. To find these codes, look in the above Keyboard Encoding Table. %' The right-hand column are the keycaps for each key. The two entries %' following the DB in the same row are the unshifted and shifted codes %' that the key produces. Enter the code as the value of FirstKey then %' repeat the process for SecondKey. For each key you choose as FirstKey, %' you must change the attribute to AttrShiftDia if you wish to have the %' diacriticalness happen only when the key is shifted; AttrUnShiftDia if %' you wish the diacriticalness to happen only when the key is not shifted; %' or AttrBothDia if you wish it to be diacritical shifted and unshifted. %' %' FontCode is a hexidecimal code %' which will produce the desired character. If you are using the standard %' US font, then refer to Appendix B-2 of the CTOS Reference Manual. If %' you are using a non-standard US font, then refer to the documentation %' which accompanied it. You can change the font characters using the %' Font Designer. %' Note that for most diacritics, the standard font will not suffice. Take %' circumflex i and tilde n, for instance. You would have to build a new %' font with those characters replacing some other positions. %' The is in the standard released font (position 0ACh). %' %' In the following example, key 5E would have attrBothDia because on the %' keyboard circumflex (carat) and tilde are the same key (shifted and %' unshifted): %' DB 5Eh, 7Eh, attrBothDia ; 05E ^ ~ %' If you had a French keyboard, the carat is where the  key %' is (to the right of the "p"), so in that case key 6 would be: %' DB 06h, 10h, attrShiftDia ; 006 1/2-1/4 %' and the macro would be %DiaCriticalSet(6,69h,chI-Circumflex) %' %' EXAMPLE: Define the following three diacritical pairs: %' "e accent-grave", "i circumflex", and "n tilde". %' The macros would look as follows: %' %' %InitDiaCriticalTables %' %' %DiaCriticalSet(chAccentGrave,65h,0ACh) %' The code for the silent key "accent grave" followed by the code for "e" %' (Refer to the above Keyboard Encoding Table) followed by 0ACh, which is %' the hexadecimal code for the resultant font character (Refer to Appendix %' B-2 in the CTOS Reference Manual) %' %' %DiaCriticalSet(5E,69h,chI-Circumflex) %' The code for "circumflex" followed by the code for "i" followed by %' chI-Circumflex %' %' %DiaCriticalSet(7Eh,6Eh,chN-Tilde) %' The code for "tilde" followed by the code for "n" followed by %' chN-Tilde %' %' %EndDiaCriticalTables %' The following example on GERMAN KEYBOARDS produces a diacritical pair. %' %' REMINDER: for non-Ger* man keyboards: the character "" is on the upper left %' key in combination with SHIFT (the ~ on US keyboards) %' The keyboard encoding table entry for 5E is as follows: %' DB 0B4h, 0B2h, attrShiftDia ; 05E %' %' %InitDiaCriticalTables %' %DiaCriticalSet(0B2h,61h,0A1h) %' %EndDiaCriticalTables %' %' 0B2h, 61h ;the diacritical pair, (keys 5E & 61 in the kbd table) %' ;here the "" and the "a" shall be combined to "" %' 0A1h ;the resultant character of the diacritical pair %' %' %'THE DIACRITICAL MACROS START HERE: %InitDiaCriticalTables %DiaCriticalSet(0CCh,31h,32h) ;shift-NEXTPAGE 1 displays "2" %EndDiaCriticalTables )) ; ;WARNING: The table below is used by the file system for determining ; file spec equivalence - CHANGES TO THIS TABLE MAY CAUSE ; FILES ON AN EXISTING FILE SYSTEM TO BECOME INACCESSABLE. ; %DefTableData (FsUlCmpbTable, 1, %(%' FsULCMPBSignature DW 'FS' DB 00h,01h,02h,03h,04h,05h,06h,07h DB 08h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh DB 10h,11h,12h,13h,14h,15h,16h,17h DB 18h,19h,1Ah,1Bh,1Ch,1Dh,1Eh,1Fh DB 20h,21h,22h,23h,24h,25h,26h,27h DB 28h,29h,2Ah,2Bh,2Ch,2Dh,2Eh,2Fh DB 30h,31h,32h,33h,34h,35h,36h,37h DB 38h,39h,3Ah,3Bh,3Ch,3Dh,3Eh,3Fh DB 40h,41h,42h,43h,44h,45h,46h,47h DB 48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh,4Fh DB 50h,51h,52h,53h,54h,55h,56h,57h DB 58h,59h,5Ah,5Bh,5Ch,5Dh,5Eh,5Fh DB 60h,41h,42h,43h,44h,45h,46h,47h DB 48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh,4Fh DB 50h,51h,52h,53h,54h,55h,56h,57h DB 58h,59h,5Ah,7Bh,7Ch,7Dh,7Eh,7Fh DB 80h,81h,82h,83h,84h,85h,86h,87h DB 88h,89h,8Ah,8Bh,8Ch,8Dh,8Eh,8Fh DB 90h,91h,92h,93h,94h,95h,96h,97h DB 98h,99h,9Ah,9Bh,9Ch,9Dh,9Eh,9Fh DB 0A0h,0A0h,0A2h,0A2h,0A4h,0A4h,0A6h,0A6h DB 0A8h,0A8h,0AAh,0ABh,0ACh,0ADh,0AEh,0AEh DB 0B0h,0B1h,0B2h,0B3h,0B4h,0B5h,0B6h,0B7h DB 0B8h,0B9h,0BAh,0BBh,0BCh,0BDh,0BEh,0BFh DB 0C0h,0C1h,0C2h,0C3h,0C4h,0C5h,0C6h,0C7h DB 0C8h,0C9h,0CAh,0CBh,0CCh,0CDh,0CEh,0CFh DB 0D0h,0D1h,0D2h,0D3h,0D4h,0D5h,0D6h,0D7h DB 0D8h,0D9h,0DAh,0DBh,0DCh,0DDh,0DEh,0DFh DB 0E0h,0E1h,0E2h,0E3h,0E4h,0E5h,0E6h,0E7h DB 0E8h,0E9h,0EAh,0EBh,0ECh,0EDh,0EEh,0EFh DB 0F0h,0F1h,0F2h,0F3h,0F4h,0F5h,0F6h,0F7h DB 0F8h,0F9h,0FAh,0FBh,0FCh,0FDh,0FEh,0FFh )) %DefTableData (UserUlCmpbTable, 2, %(%' ULCMPBSignature DW 'XT' DB 00h,01h,02h,03h,04h,05h,06h,07h DB 08h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh DB 10h,11h,12h,13h,14h,15h,16h,17h DB 18h,19h,1Ah,1Bh,1Ch,1Dh,1Eh,1Fh DB 20h,21h,22h,23h,24h,25h,26h,27h DB 28h,29h,2Ah,2Bh,2Ch,2Dh,2Eh,2Fh DB 30h,31h,32h,33h,34h,35h,36h,37h DB 38h,39h,3Ah,3Bh,3Ch,3Dh,3Eh,3Fh DB 40h,41h,42h,43h,44h,45h,46h,47h DB 48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh,4Fh DB 50h,51h,52h,53h,54h,55h,56h,57h DB 58h,59h,5Ah,5Bh,5Ch,5Dh,5Eh,5Fh DB 60h,41h,42h,43h,44h,45h,46h,47h DB 48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh,4Fh DB 50h,51h,52h,53h,54h,55h,56h,57h DB 58h,59h,5Ah,7Bh,7Ch,7Dh,7Eh,7Fh DB 80h,81h,82h,83h,84h,85h,86h,87h DB 88h,89h,8Ah,8Bh,8Ch,8Dh,8Eh,8Fh DB 90h,91h,92h,93h,94h,95h,96h,97h DB 98h,99h,9Ah,9Bh,9Ch,9Dh,9Eh,9Fh DB 0A0h,0A0h,0A2h,0A2h,0A4h,0A4h,0A6h,0A6h DB 0A8h,0A8h,0AAh,0ABh,0ACh,0ADh,0AEh,0AEh DB 0B0h,0B1h,0B2h,0B3h,0B4h,0B5h,0B6h,0B7h DB 0B8h,0B9h,0BAh,0BBh,0BCh,0BDh,0BEh,0BFh DB 0C0h,0C1h,0C2h,0C3h,0C4h,0C5h,0C6h,0C7h DB 0C8h,0C9h,0CAh,0CBh,0CCh,0CDh,0CEh,0CFh DB 0D0h,0D1h,0D2h,0D3h,0D4h,0D5h,0D6h,0D7h DB 0D8h,0D9h,0DAh,0DBh,0DCh,0DDh,0DEh,0DFh DB 0E0h,0E1h,0E2h,0E3h,0E4h,0E5h,0E6h,0E7h DB 0E8h,0E9h,0EAh,0EBh,0ECh,0EDh,0EEh,0EFh DB 0F0h,0F1h,0F2h,0F3h,0F4h,0F5h,0F6h,0F7h DB 0F8h,0F9h,0FAh,0FBh,0FCh,0FDh,0FEh,0FFh )) %DefTableData (VideoBsStrings, 3, %(%' VidBSSignature DW 'VS' cStrings DW 2 %sbString ('Press Next Page or Scroll Up To Continue') %sbString ('Press Next Page To Continue') )) %DefTableData (UpperToLowerTable, 4, %(%' UpperToLowerSigniture DW 'LW' DB 00h,01h,02h,03h,04h,05h,06h,07h DB 08h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh DB 10h,11h,12h,13h,14h,15h,16h,17h DB 18h,19h,1Ah,1Bh,1Ch,1Dh,1Eh,1Fh DB 20h,21h,22h,23h,24h,25h,26h,27h DB 28h,29h,2Ah,2Bh,2Ch,2Dh,2Eh,2Fh DB 30h,31h,32h,33h,34h,35h,36h,37h DB 38h,39h,3Ah+ ,3Bh,3Ch,3Dh,3Eh,3Fh DB 40h,61h,62h,63h,64h,65h,66h,67h DB 68h,69h,6Ah,6Bh,6Ch,6Dh,6Eh,6Fh DB 70h,71h,72h,73h,74h,75h,76h,77h DB 78h,79h,7Ah,5Bh,5Ch,5Dh,5Eh,5Fh DB 60h,61h,62h,63h,64h,65h,66h,67h DB 68h,69h,6Ah,6Bh,6Ch,6Dh,6Eh,6Fh DB 70h,71h,72h,73h,74h,75h,76h,77h DB 78h,79h,7Ah,7Bh,7Ch,7Dh,7Eh,7Fh DB 80h,81h,82h,83h,84h,85h,86h,87h DB 88h,89h,8Ah,8Bh,8Ch,8Dh,8Eh,8Fh DB 90h,91h,92h,93h,94h,95h,96h,97h DB 98h,99h,9Ah,9Bh,9Ch,9Dh,9Eh,9Fh DB 0A1h,0A1h,0A3h,0A3h,0A5h,0A5h,0A7h,0A7h DB 0A9h,0A9h,0AAh,0ABh,0ACh,0ADh,0AFh,0AFh DB 0B0h,0B1h,0B2h,0B3h,0B4h,0B5h,0B6h,0B7h DB 0B8h,0B9h,0BAh,0BBh,0BCh,0BDh,0BEh,0BFh DB 0C0h,0C1h,0C2h,0C3h,0C4h,0C5h,0C6h,0C7h DB 0C8h,0C9h,0CAh,0CBh,0CCh,0CDh,0CEh,0CFh DB 0D0h,0D1h,0D2h,0D3h,0D4h,0D5h,0D6h,0D7h DB 0D8h,0D9h,0DAh,0DBh,0DCh,0DDh,0DEh,0DFh DB 0E0h,0E1h,0E2h,0E3h,0E4h,0E5h,0E6h,0E7h DB 0E8h,0E9h,0EAh,0EBh,0ECh,0EDh,0EEh,0EFh DB 0F0h,0F1h,0F2h,0F3h,0F4h,0F5h,0F6h,0F7h DB 0F8h,0F9h,0FAh,0FBh,0FCh,0FDh,0FEh,0FFh )) %DefTableData (KeyCapText, 5, %( %StartKeycapDefines ; THE FOLLOWING TABLE IS ORDERED ACCORDING TO THE ORDER ; SPECIFIED BY THE CTOS LIBRARY PROCEDURE "GETNLSKEYCAPTEXT". ; DO NOT CHANGE THE ORDER OF THE ENTRIES. ; ; Each macro invocation has two parameters; the first is used ; for mnemonic purposes, the parameter consists of the English ; keycap name followed by the unencoded hexadecimal keycode (see ; table C-1, CTOS operating system manual). The second ; parameter is an ASCII string defining the keycap name. %DefineKeyCapEntry(Action_43, "ACTION") %DefineKeyCapEntry(Backspace_08, "BACK SPACE") %DefineKeyCapEntry(Bound_03, "BOUND") %DefineKeyCapEntry(Cancl_07, "CANCEL") %DefineKeyCapEntry(Code_80, "CODE") %DefineKeyCapEntry(Copy_14, "COPY") %DefineKeyCapEntry(Delete_7F, "DELETE") %DefineKeyCapEntry(Finish_04, "FINISH") %DefineKeyCapEntry(Go_1B, "GO") %DefineKeyCapEntry(Help_00, "HELP") %DefineKeyCapEntry(Lock_45, "LOCK") %DefineKeyCapEntry(Mark_02, "MARK") %DefineKeyCapEntry(Move_12, "MOVE") %DefineKeyCapEntry(Next_0D, "NEXT") %DefineKeyCapEntry(NextPage_0C, "NEXT PAGE") %DefineKeyCapEntry(OverType_44, "OVER TYPE") %DefineKeyCapEntry(PrevPage_05, "PREV PAGE") %DefineKeyCapEntry(Return_0A, "RETURN") %DefineKeyCapEntry(ScrlDown_13, "SCROLL DOWN") %DefineKeyCapEntry(ScrlUp_11, "SCROLL UP") %DefineKeyCapEntry(Shift_48, "SHIFT") %DefineKeyCapEntry(Tab_09, "TAB") %EndKeycapDefines )) %DefTableData (DateTemplateTable, 6, %( %StartDateDefines ; Below is listed the characters for use as escape characters (attributes) ; in the templates. Each entry is of the form: ; ; DateEscapeDefine('b', 'B') ; ; This enters the escape character of 'b' into the table, and indicates ; an upper case equivelent of 'B' ; ; The following definitions are in a specific order, and that order must be ; maintained ; ; AM, PM, Noon or Midnight, string %DateEscapeDefine(Meridian, 'a', 'A') ; Day of month, numeric %DateEscapeDefine(DayOfMonthNum, 'd', 'D') ; Hour, 12 hour system, numeric %DateEscapeDefine(Hour, 'h', 'H') ; Minute, numeric %DateEscapeDefine(Minute, 'm', 'M') ; Month, string %DateEscapeDefine(MonthStr, 'n', 'N') ; Month, numeric %DateEscapeDefine(MonthNum, 'o', 'O') ; Second, numeric %DateEscapeDefine(Second, 's', 'S') ; Hour, 24 hour system, numeric %DateEscapeDefine(Hour24, 't', 'T') ; Day of Week, string %DateEscapeDefine(WeekDay, 'w', 'W') ; Year, numeric %DateEscapeDefine(Year, 'y', 'Y') ; Below are listed the definitions for each of the templates available ; through the NlsStdFormatDateTime routine. Any of the entries may be ; changed, by renaming the template and/or changing the template string. ; ; Each entry is of the form: ; ; DefineTemplateEntry(TemplateName, "TemplateString") ; ; Each entry has a comment preceding it, describing the result of the ; template, and its template number. If any templates are removed, or ; the order is changed, these commented index numbers will not reflect ; the template's true index number. The numbering starts at zero and+  ; proceeds, being incremented by one, in the order that the definitions ; appear in this file, thus the first defined is index number zero, the ; next is index one and so on. ; ; 00h 7/18/85 9:03AM ; 10/08/05 11:13PM %DefineTemplateEntry(ColNumDateTime, "!oo!/!0d!/!0y! !hh!:!0m!!2AA!") ; 01h 7/18/85 9:03AM ; 10/08/05 11:13PM %DefineTemplateEntry(NumDateTime, "!*o!/!0d!/!0y! !*h!:!0m!!2*A!") ; 02h Jul 1, 1985 9:03 AM ; Jul 18, 1985 11:13 PM %DefineTemplateEntry(ColDateTime, "!Nnn! !dd!, !yyyy! !hh!:!0m! !2AA!") ; 03h Jul 1, 1985 9:03 AM ; Jul 18, 1985 11:13 PM %DefineTemplateEntry(DateTime, "!Nnn! !*d!, !yyyy! !*h!:!0m! !2*A!") ; 04h Mon Jul 1, 1985 9:03 AM ; Mon Jul 18, 1985 11:13 PM %DefineTemplateEntry(ColDayDateTime, "!Www! !Nnn! !dd!, !yyyy! !hh!:!0m! !2AA!") ; 05h Mon Jul 1, 1985 9:03 AM ; Mon Jul 18, 1985 11:13 PM %DefineTemplateEntry(DayDateTime, "!Www! !Nnn! !*d!, !yyyy! !*h!:!0m! !2*A!") ; 06h 07:00 %DefineTemplateEntry(ColTime24, "!0t!:!0m!") ; 07h 13:05 %DefineTemplateEntry(Time24, "!*t!:!0m!") ; 08h 9:03 AM ; 11:13 PM %DefineTemplateEntry(ColTime, "!hh!:!0m! !2AA!") ; 09h 9:03 AM ; 11:13 PM %DefineTemplateEntry(Time, "!*h!:!0m! !2*A!") ; 0Ah 07/18/85 ; 10/08/05 %DefineTemplateEntry(ColNumDate, "!0o!/!0d!/!0y!") ; 0Bh 7/8/05 ; 10/18/85 %DefineTemplateEntry(NumDate, "!*o!/!*d!/!0y!") ; 0Ch 09:03:05 %DefineTemplateEntry(FullTime, "!0h!:!0m!:!0s!") ; 0Dh 09:03:05.tmp ; 23:13:57.tmp %DefineTemplateEntry(TempFileName, "!0t!:!0m!:!0s!.tmp") ; 0Eh Monday June 3, 1985 %DefineTemplateEntry(LongDayDate, "!W*w! !N*n! !*d!, !*y!") ; 0Fh June 3, 1985 %DefineTemplateEntry(LongDate, "!N*n! !*d!, !*y!") ; 10h 01/01/01-07:09:05AM %DefineTemplateEntry(FileColDateTime, "!0o!/!0d!/!0y!-!0h!:!0m!:!0s!!2*A!") ; 11h Abbreviated Date %DefineTemplateEntry(AbrDate, "!Nnn! !*d!, !yyyy!") ; 12h Day, Date 24 Hour ; Mon Jul 1, 1985 9:03 ; Mon Jul 18, 1985 23:13 %DefineTemplateEntry(DayDate24Hour, "!Www! !Nnn! !*d!, !yyyy! !*t!:!0m!") ; 13h Columnar Day Date 24 Hour ; Mon Jul 1 1985 9:03 ; Mon Jul 18 1985 23:13 %DefineTemplateEntry(ColDayDate24Hour, "!Www! !Nnn! !dd! !yyyy! !0t!:!0m!") ; 14h Day, numeric date and time ; Tue 07/17/82 9:03 AM ; Tue 07/17/82 11:13 PM %DefineTemplateEntry(DayNumDateTime, "!Www! !0o!/!0d!/!0y! !*h!:!0m! !2*A!") ; 15h Columnar Day, Numeric Date and time ; Tue 07/17/82 09:03 ; Tue 07/17/82 23:13 %DefineTemplateEntry(ColDayNumDateTime, "!Www! !0o!/!0d!/!0y! !0t!:!0m!") ; 16h Invalid Template Index %DefineTemplateEntry(InvalidITemp, "Invalid Template Index") %EndStdDateDefines ; ; THIS IS THE END OF THE STANDARD DATE TEMPLATES. NO OEM DATE TEMPLATES ; SHOULD BE DEFINED ABOVE THIS POINT. ALL TEMPLATES SHOULD BE ADDED BELOW. ; ANY NEW TEMPLATES ADDED WILL BE INDEXED STARTING WITH TEMPLATE NUMBER 8000h ; ; EXAMPLE: ; ; 8000h DD/MM/YY ; ; DefineTemplateEntry(ColDayMonthYear, "!0d!/!0o!/!0y!") ; ; ; END OF USER DEFINABLE TEXT AREA, NO EDITING SHOULD OCCUR BELOW THIS POINT %EndOemDateDefines )) false EQU 0 true EQU 1 %DefTableData (NumberAndCurrencyTable, 7, %(%' NumberAndCurrencySignature DW 'NC' DB 2Eh ; Decimal character. Indicates which single ASCII character ; will be used to indicate the decimal point in numbers. ; Either 2Ch (,) or 2Eh (.) may be selected. DB 2Ch ; Triad character. Indicates which single ASCII character ; will be used to indicate the separation of numbers into ; triads (i.e. thousands, millions, etc.). ; Either 2Ch (,) or 2Eh (.) or 20h (space) may be selected. ; Note that the use of space is not fully supported at this ; time and thus its use may be ignored by some programs or ; cause substitution of one of the other characters. DB true ; First triad flag. Controls the rules for placing the triad ; character in the thousands position. If true, the triad ; separator in the thousands position is always to appear when ; the nu, mber contains four or more digits to the left of the ; decimal. If false, the thousands triad separator is ; suppressed when no more than one additional digit appears to ; the left. DB 2Ch ; List separator character. Indicates which single ASCII ; character will be used to indicate the separation of ; numbers within a list. Either 2Ch (,) or 3Bh (;) may be ; selected. Note that this specification is used only by ; programs that would otherwise have a conflict with the use ; of 2Ch (,) as the decimal point character. DB 0 ; Currency position. Controls the position of the currency ; symbol. A value of 0 indicates leading currency symbol, ; while 1 indicates trailing currency symbol. Other values ; are reserved for future expansion. Note that embedded ; currency symbols are not currently supported. DB 1 ; Currency symbol string. This string defines the currency DB 24h ; symbol. The first byte is the length of the string. The DB 00h ; remaining four bytes define the contents of the string. DB 00h ; All four bytes must be defined, even when a shorter string DB 00h ; is being defined. )) %DefTableData (DateNameTable, 8, %( %StartNameDefines ; Below are listed the definitions for each of the names available ; through the GetNlsDateName routine. Any of the entries may be ; changed, by renaming the Name and/or changing the Name String. ; THEIR ORDER IS RELIED UPON BY ROUTINES THAT USE THIS INFORMATION. ; DO NOT CHANGE THEIR ORDER OR THEIR MEANING. ; ; Each entry is of the form: ; ; DefineNameEntry(NameString, "String") ; ; Each entry has a comment preceding it, describing the expected contents ; of the string, and its string number. If any strings are removed, or ; the order is changed, these commented index numbers will not reflect ; the string's true index number. The numbering starts at zero and ; proceeds, being incremented by one, in the order that the definitions ; appear in this file, thus the first defined is index number zero, the ; next is index one and so on. ; ; IT IS IMPORTANT TO NOTE THAT ANY CAPITALIZATION HERE WILL BE MANDATORY ; IN ANY STRINGS RETURNED BY GetNlsDateName. ; %StartNameTable ; USER EDITABLE TEXT FOLLOWS ; ; T A B L E N U M B E R O N E ; ; The first entry in this table, Date/time entry mode setting, is used by ; ParseTime and NlsParseTime to control the parsing of date/time. Be ; sure to modify the "00" to match your language. Following this ; is the names of all the days of the week, months of the year, etc. ; ; ; first byte is ; ; 0 ... entry of date as MM/DD/YY. ; 1 ... entry of date as DD/MM/YY. ; 2 ... entry of date as YY/MM/DD. ; ; second byte is ; ; 0 ... entry of hour in either AM/PM or Military mode (4:00PM or 16:00) ; 1 ... entry of hour in 24 hour mode only (16:00) %DefineNameEntry(EntryModeSetting, "00"); ; First Day of the Week: Sunday %DefineNameEntry(FirstWeekDay, "sunday") ; Second Day of the Week: Monday %DefineNameEntry(SecondWeekDay, "monday") ; Third Day of the Week: Tuesday %DefineNameEntry(ThirdWeekDay, "tuesday") ; Fourth Day of the Week: Wednesday %DefineNameEntry(FourthWeekDay, "wednesday") ; Fifth Day of the Week: Thursday %DefineNameEntry(FifthWeekDay, "thursday") ; Sixth Day of the Week: Friday %DefineNameEntry(SixthWeekDay, "friday") ; Seventh Day of the Week: Saturday %DefineNameEntry(SeventhWeekDay, "saturday") ; First Month: January %DefineNameEntry(FirstMonth, "january") ; Second Month: February %DefineNameEntry(SecondMonth, "february") ; Third Month: March %DefineNameEntry(ThirdMonth, "march") ; Fourth Month: April %DefineNameEntry(FourthMonth, "april") ; Fifth Month: May %DefineNameEntry(FifthMonth, "may") ; Sixth Month: June %DefineNameEntry(SixthMonth, "june") ; Seventh Month: July %DefineNameEntry(SeventhMonth, "july") ; Eighth Month: August %DefineNameEntry(EighthMonth, "august") ; Ninth Month: September %DefineNameEntry(NinthMonth, "september") ; Tenth Month: October %Defi, neNameEntry(TenthMonth, "october") ; Eleventh Month: November %DefineNameEntry(EleventhMonth, "november") ; Twelfth Month: December %DefineNameEntry(TwelfthMonth, "december") ; First Meridian: AM %DefineNameEntry(FirstMeridian, "am") ; Second Meridian: PM %DefineNameEntry(SecondMeridian, "pm") ; Third Meridian: Noon %DefineNameEntry(ThirdMeridian, "noon") ; Forth Meridian: Midnight %DefineNameEntry(ForthMeridian, "midnight") ; Default Output Template Number (see table 6) ; Must be a two digit decimal number %DefineNameEntry(DefaultOutputTemplate, "05") ; USER EDITABLE TEXT ENDS %EndNameTable %StartNameTable ; ; T A B L E N U M B E R T W O ; ; USER EDITABLE TEXT FOLLOWS ; Error Name %DefineNameEntry(ErrorName, "invalid name"); ; First Day of the Week: Sunday %DefineNameEntry(FirstWeekDay, "sun") ; Second Day of the Week: Monday %DefineNameEntry(SecondWeekDay, "mon") ; Third Day of the Week: Tuesday %DefineNameEntry(ThirdWeekDay, "tue") ; Fourth Day of the Week: Wednesday %DefineNameEntry(FourthWeekDay, "wed") ; Fifth Day of the Week: Thursday %DefineNameEntry(FifthWeekDay, "thu") ; Sixth Day of the Week: Friday %DefineNameEntry(SixthWeekDay, "fri") ; Seventh Day of the Week: Saturday %DefineNameEntry(SeventhWeekDay, "sat") ; First Month: January %DefineNameEntry(FirstMonth, "jan") ; Second Month: February %DefineNameEntry(SecondMonth, "feb") ; Third Month: March %DefineNameEntry(ThirdMonth, "mar") ; Fourth Month: April %DefineNameEntry(FourthMonth, "apr") ; Fifth Month: May %DefineNameEntry(FifthMonth, "may") ; Sixth Month: June %DefineNameEntry(SixthMonth, "jun") ; Seventh Month: July %DefineNameEntry(SeventhMonth, "jul") ; Eighth Month: August %DefineNameEntry(EighthMonth, "aug") ; Ninth Month: September %DefineNameEntry(NinthMonth, "sep") ; Tenth Month: October %DefineNameEntry(TenthMonth, "oct") ; Eleventh Month: November %DefineNameEntry(EleventhMonth, "nov") ; Twelfth Month: December %DefineNameEntry(TwelfthMonth, "dec") ; First Meridian: AM %DefineNameEntry(FirstMeridian, "am") ; Second Meridian: PM %DefineNameEntry(SecondMeridian, "pm") ; Third Meridian: Noon %DefineNameEntry(ThirdMeridian, "n") ; Forth Meridian: Midnight %DefineNameEntry(ForthMeridian, "m") ; Default Output Template Number (see table 6) ; Must be a two digit decimal number %DefineNameEntry(DefaultOutputTemplate, "05") ; USER EDITABLE TEXT ENDS %EndNameTable ; ; If additional tables are required, they must be of the form of the two ; tables that are above. Any new tables must begin with a BeginTable call, ; be followed with exactly the same number of NameEntries, and the table ; must be closed with an EndTable call. ; ; Any new tables should be added here, the next table being number 3 ; ; ADD NEW TABLE(S) HERE ; All tables must be defined above %EndNameDefines )) %DefTableData (CollationTable, 9, %(%' CCT LABEL BYTE CTSignature DW 'CT' CCTI LABEL BYTE %' %' Character Collation Table - %' This table defines the sort order of all the characters in the character %' set. The table consists of one mandatory table followed by several words %' and bytes which define the length and offset from the beginning of the %' table of three optional tables. The 1st table is the primary character %' collation table. The optional tables are the character priority table, %' the 2 for 1 character substitution table and the 1 for 2 %' character substitution table. %' %' NOTE: The character priority table as well as the %' 2 for 1 and 1 for 2 substitution tables are not used in the default (CTOS) %' case and therefore they have been commented out. They would however be %' useful as a starting place or template for defining a more complete %' character collation structure than the one used by CTOS. Therefore, it is %' requested that these 300 lines of comments be left in this file for future %' reference. %' %' The current example includes the A-circle, A-umlaut, O-slashed, and %- ' U-umlaut characters, using a German collating sequence. This example is %' not intended to be a comprehensive German collating table, but is useful %' as a first step towards one. %' %' %' Priority ASCII Code Character %' ======== ========== ========= %' DB 00h ; 00h DB 01h ; 01h DB 02h ; 02h DB 03h ; 03h DB 04h ; 04h DB 05h ; 05h DB 06h ; 06h DB 07h ; 07h DB 08h ; 08h DB 09h ; 09h DB 0Ah ; 0Ah New Line DB 0Bh ; 0Bh DB 0Ch ; 0Ch Form Feed DB 0Dh ; 0Dh DB 0Eh ; 0Eh DB 0Fh ; 0Fh DB 010h ; 010h DB 011h ; 011h DB 012h ; 012h DB 013h ; 013h DB 020h ; 014h Non-Blank Space (make appear as space) DB 015h ; 015h DB 016h ; 016h DB 017h ; 017h DB 018h ; 018h DB 019h ; 019h DB 01Ah ; 01Ah DB 01Bh ; 01Bh DB 01Ch ; 01Ch DB 01Dh ; 01Dh DB 01Eh ; 01Eh DB 01Fh ; 01Fh DB 020h ; 020h DB 021h ; 021h ! DB 022h ; 022h " DB 023h ; 023h # DB 024h ; 024h $ DB 025h ; 025H Percent Sign DB 026h ; 026h & DB 027h ; 027h ' DB 028h ; 028h ( DB 029h ; 029h ) DB 02Ah ; 02Ah * DB 02Bh ; 02Bh + DB 02Ch ; 02Ch , DB 02Dh ; 02Dh - DB 02Eh ; 02Eh . DB 02Fh ; 02Fh / ; ; DIGITS ; DB 030h ; 030h 0 DB 031h ; 031h 1 DB 032h ; 032h 2 DB 033h ; 033h 3 DB 034h ; 034h 4 DB 035h ; 035h 5 DB 036h ; 036h 6 DB 037h ; 037h 7 DB 038h ; 038h 8 DB 039h ; 039h 9 ; DB 03Ah ; 03Ah : DB 03Bh ; 03Bh ; DB 03Ch ; 03Ch < DB 03Dh ; 03Dh = DB 03Eh ; 03Eh > DB 03Fh ; 03Fh ? DB 040h ; 040h @ ; ; Roman Letters A thru Z ; DB 041h ; 041h A DB 042h ; 042h B DB 043h ; 043h C DB 044h ; 044h D DB 045h ; 045h E DB 046h ; 046h F DB 047h ; 047h G DB 048h ; 048H H DB 049h ; 049h I DB 04Ah ; 04Ah J DB 04Bh ; 04Bh K DB 04Ch ; 04Ch L DB 04Dh ; 04Dh M DB 04Eh ; 04Eh N DB 04Fh ; 04Fh O DB 050h ; 050h P DB 051h ; 051h Q DB 052h ; 052h R DB 053h ; 053h S DB 054h ; 054h T DB 055h ; 055h U DB 056h ; 056h V DB 057h ; 057h W DB 058h ; 058h X DB 059h ; 059h Y DB 05Ah ; 05Ah Z ; DB 05Bh ; 05Bh [ DB 05Ch ; 05Ch \ DB 05Dh ; 05Dh ] DB 05Eh ; 05Eh ^ DB 05Fh ; 05Fh _ DB 060h ; 060h ` %' %' NOTE: In this the primary collation table, Priorities of the characters a-z %' are the same as those of A-Z. %' DB 041h ; 061h a DB 042h ; 062h b DB 043h ; 063h c DB 044h ; 064h d DB 045h ; 065h e DB 046h ; 066h f DB 047h ; 067h g DB 048h ; 068h h DB 049h ; 069h i DB 04Ah ; 06Ah j DB 04Bh ; 06Bh k DB 04Ch ; 06Ch l DB 04Dh ; 06Dh m DB 04Eh ; 06Eh n DB 04Fh ; 06Fh o DB 050h ; 070h p DB 051h ; 071h q DB 052h ; 072h r DB 053h ; 073h s DB 054h ; 074h t DB 055h ; 075h u DB 056h ; 076h  v DB 057h ; 077h w DB 058h ; 078h x DB 059h ; 079h y DB 05Ah ; 07Ah z ; DB 07Bh ; 07Bh { DB 07Ch ; 07Ch | DB 07Dh ; 07Dh } DB 07Eh ; 07Eh ~ DB 07Fh ; 07Fh DB 080h ; 080h Delete DB 081h ; 081h DB 082h ; 082h DB 083h ; 083h DB 084h ; 084h DB 085h ; 085h DB 086h ; 086h DB 087h ; 087h DB 088h ; 088h DB 089h ; 089h DB 08Ah ; 08Ah DB 08Bh ; 08Bh DB 08Ch ; 08Ch DB 08Dh ; 08Dh DB 08Eh ; 08Eh DB 08Fh ; 08Fh DB 090h ; 090h DB 091h ; 091h DB 092h ; 092h DB 093h ; 093h DB 094h ; 094h DB 095h ; 095h DB 096h ; 096h DB 097h ; 097h DB 098h ; 098h DB 099h ; 099h DB 09Ah ; 09Ah DB 09Bh ; 09Bh DB 09Ch ; 09Ch DB 09Dh ; 09Dh DB 09Eh ; 09Eh DB 09Fh ; 09Fh %' %' NOTE: The lower-case umlauted, struck-through, and AE ligature characters %' have the same priority as their upper-case equivalents. %' DB 0A0h ; 0A0h A-circle DB 0A0h ; 0A1h a-circle (mak- e appear as A-circle) DB 0A2h ; 0A2h A-umlaut DB 0A2h ; 0A3h a-umlaut (make appear as A-umlaut) DB 0A4h ; 0A4h O-slashed DB 0A4h ; 0A5h o-slashed (make appear as O-slashed) DB 0A6h ; 0A6h U-umlaut DB 0A6h ; 0A7h u-umlaut (make appear as U-umlaut) DB 0A8h ; 0A8h DB 0A8h ; 0A9h DB 0AAh ; 0AAh DB 0ABh ; 0ABh DB 0ACh ; 0ACh DB 0ADh ; 0ADh DB 0AEh ; 0AEh AE ligature DB 0AEh ; 0AFh ae ligature (make appear as AE ligature) DB 0B0h ; 0B0h DB 0B1h ; 0B1h DB 0B2h ; 0B2h DB 0B3h ; 0B3h DB 0B4h ; 0B4h DB 0B5h ; 0B5h DB 0B6h ; 0B6h DB 0B7h ; 0B7h DB 0B8h ; 0B8h DB 0B9h ; 0B9h DB 0BAh ; 0BAh DB 0BBh ; 0BBh DB 0BCh ; 0BCh DB 0BDh ; 0BDh DB 0BEh ; 0BEh DB 0BFh ; 0BFh DB 0C0h ; 0C0h DB 0C1h ; 0C1h DB 0C2h ; 0C2h DB 0C3h ; 0C3h DB 0C4h ; 0C4h DB 0C5h ; 0C5h DB 0C6h ; 0C6h DB 0C7h ; 0C7h DB 0C8h ; 0C8h DB 0C9h ; 0C9h DB 0CAh ; 0CAh DB 0CBh ; 0CBh DB 0CCh ; 0CCh DB 0CDh ; 0CDh DB 0CEh ; 0CEh DB 0CFh ; 0CFh DB 0D0h ; 0D0h DB 0D1h ; 0D1h DB 0D2h ; 0D2h DB 0D3h ; 0D3h DB 0D4h ; 0D4h DB 0D5h ; 0D5h DB 0D6h ; 0D6h DB 0D7h ; 0D7h DB 0D8h ; 0D8h DB 0D9h ; 0D9h DB 0DAh ; 0DAh DB 0DBh ; 0DBh DB 0DCh ; 0DCh DB 0DDh ; 0DDh DB 0DEh ; 0DEh DB 0DFh ; 0DFh DB 0E0h ; 0E0h DB 0E1h ; 0E1h DB 0E2h ; 0E2h DB 0E3h ; 0E3h DB 0E4h ; 0E4h DB 0E5h ; 0E5h DB 0E6h ; 0E6h DB 0E7h ; 0E7h DB 0E8h ; 0E8h DB 0E9h ; 0E9h DB 0EAh ; 0EAh DB 0EBh ; 0EBh DB 0ECh ; 0ECh DB 0EDh ; 0EDh DB 0EEh ; 0EEh DB 0EFh ; 0EFh DB 0F0h ; 0F0h DB 0F1h ; 0F1h DB 0F2h ; 0F2h DB 0F3h ; 0F3h DB 0F4h ; 0F4h DB 0F5h ; 0F5h DB 0F6h ; 0F6h DB 0F7h ; 0F7h DB 0F8h ; 0F8h DB 0F9h ; 0F9h DB 0FAh ; 0FAh DB 0FBh ; 0FBh DB 0FCh ; 0FCh DB 0FDh ; 0FDh DB 0FEh ; 0FEh DB 0FFh ; 0FFh %' %' Character Priority Table - %' This table defines the sort order of the characters in the character %' set. It is used by NLSCollate when two strings collate as equal using %' the character collation table above. offset from the beginning of the %' table of three optional tables. The 1st table is the primary character %' collation table. The optional tables are the character priority table, %' the 2 for 1 character substitution table and the 1 for 2 %' character substitution table. %' %' To enable the 1-to-2 and 2-to-1 example tables, uncomment all the lines %' beginning with DB and DW from the "CCT2 LABEL BYTE" line through the %' rgb2For2Flags table. %' %' Also, you must switch the semi-colon on the following %' nine pairs of lines. e.g., %' %' ; DW CCT2 - CCTI %' DW 0 %' %' becomes: %' %' DW CCT2 - CCTI %' ; DW 0 %' o2ndCCT LABEL BYTE ; DW CCT2 - CCTI DW 0 ; DB rgw2For1Subs - rgb2For1Chrs DB 0 ; DB (rgb1For2Flags - rgw1For2Subs) / 2 DB 0 ; DW rgb2For1Chrs - CCT DW 0 ; DW rgw2For1Subs - CCT DW 0 ; DW rgw2For1Priorities - CCT DW 0 ; DW rgw1For2Wrds - CCT DW 0 ; DW rgw1For2Subs - CCT DW 0 ; DW rgb1For2Flags - CCT DW 0 CCT2 LABEL BYTE %' Priority ASCII Code Character %' ======== ========== ========= %' DB 00h ; 00h %' DB 01h ; 01h %' DB 02h  ; 02h %' DB 03h ; 03h %' DB 04h ; 04h %' DB 05h ; 05h %' DB 06h ; 06h %' DB 07h ; 07h %' DB 08h ; 08h %' DB 09h ; 09h %' DB 0Ah ; 0Ah New Line. %' DB 0Bh ; 0Bh %' DB 0Ch ; 0Ch Form Feed. %' DB 0Dh ; 0Dh %' DB 0Eh ; 0Eh %' DB 0Fh ; 0Fh %' DB 010h ; 010h %' DB 011h ; 011h %' DB 012h ; 012h %' DB 013h ; 013h %' DB 014h ; 014h Non-Blank Space (make appear as space) %' DB 015h ; 015h %' DB 016h ; 016h %' DB 017h ; 017h %' DB 018h ; 018h %' DB 019h ; 019h %' DB 01Ah ; 01Ah %' DB 01Bh ; 01Bh %' DB 01Ch ; 01Ch %' DB 01Dh ; 01Dh %' DB 01Eh ; 01Eh %' DB 01Fh ; 01Fh %' DB 020h ; 020h %' DB 021h ; 021h ! %' DB 022h ; 022h " %' DB 023h ; 023h # %. ' DB 024h ; 024h $ %' DB 025h ; 025H Percent Sign %' DB 026h ; 026h & %' DB 027h ; 027h ' %' DB 028h ; 028h ( %' DB 029h ; 029h ) %' DB 02Ah ; 02Ah * %' DB 02Bh ; 02Bh + %' DB 02Ch ; 02Ch , %' DB 02Dh ; 02Dh  - %' DB 02Eh ; 02Eh . %' DB 02Fh ; 02Fh / %' %' DIGITS %' %' DB 030h ; 030h 0 %' DB 031h ; 031h 1 %' DB 032h ; 032h 2 %' DB 033h ; 033h 3 %' DB 034h ; 034h 4 %' DB 035h ; 035h 5 %' DB 036h ; 036h 6 %' DB 037h  ; 037h 7 %' DB 038h ; 038h 8 %' DB 039h ; 039h 9 %' %' DB 03Ah ; 03Ah : %' DB 03Bh ; 03Bh ; %' DB 03Ch ; 03Ch < %' DB 03Dh ; 03Dh = %' DB 03Eh ; 03Eh > %' DB 03Fh ; 03Fh ? %' DB 040h ; 040h @ %' %' DB 041h  ; 061h A %' DB 043h ; 062h B %' DB 045h ; 063h C %' DB 047h ; 064h D %' DB 049h ; 065h E %' DB 04Bh ; 066h F %' DB 04Dh ; 067h G %' DB 04Fh ; 068h H %' DB 051h ; 069h I %' DB 053h ; 06Ah J %' DB 055h ; 06Bh K %' DB 057h ; 06Ch L %' DB 059h ; 06Dh M %' DB 05Bh ; 06Eh N %' DB 05Dh ; 06Fh O %' DB 05Fh ; 070h P %' DB 061h ; 071h Q %' DB 063h ; 072h R %' DB 065h ; 073h S %' DB 067h ; 074h T %' DB 069h ; 075h U %' DB 06Bh ; 076h V %' DB 06Dh ; 077h W %' DB 06Fh ; 078h X %' DB 071h ; 079h Y %' DB 073h ; 07Ah Z %' %' DB 075h ; 05Bh [ %' DB 076h ; 05Ch \ %' DB 077h ; 05Dh ] %' DB 078h ; 05Eh ^ %' DB 079h ; 05Fh _ %' DB 07Ah ; 060h ` %' %' NOTE: In this the character priority table, the characters a thru z and %' A thru Z are arranged in the following order. A,a,B,b...,Z,z %' %' DB 042h ; 041h a %' DB 044h ; 042h b %' DB 046h ; 043h c %' DB 048h  ; 044h d %' DB 04Ah ; 045h e %' DB 04Ch ; 046h f %' DB 04Eh ; 047h g %' DB 050h ; 048H h %' DB 052h ; 049h i %' DB 054h ; 04Ah j %' DB 056h ; 04Bh k %' DB 058h ; 04Ch l %' DB 05Ah ; 04Dh m %' DB 05Ch ; 04Eh n %' DB 05Eh ; 04Fh o %' DB 060h ; 050h p %' DB 062h ; 051h q %' DB 064h ; 052h r %' DB 066h ; 053h s %' DB 068h ; 054h t %' DB 06Ah ; 055h u %' DB 06Ch ; 056h v %' DB 06Eh ; 057h w %' DB 070h ; 058h x %' DB 072h ; 059h y %' DB 074h ; 05Ah z %' %' DB 07Bh ; 07Bh { %' DB 07Ch ; 07Ch | %' DB 07Dh ; 07Dh } %' DB 07Eh ; 07Eh ^ %' DB 07Fh ; 07Fh %' DB 080h ; 080h Delete %' DB 081h ; 081h %' DB 082h ; 082h %' DB 083h ; 083h %' DB 084h ; 084h %' DB 085h ; 085h %' DB 086h ; 086h %' DB 087h ; 087h %' DB 088h ; 088h %' DB 089h ; 089h %' DB 08Ah ; 08Ah %' DB 08Bh ; 08Bh %' DB 08Ch ; 08Ch %' DB 08Dh ; 08Dh %' DB 08Eh ; 08Eh %' DB 08Fh ; 08Fh %' DB 090h ; 090h %' DB 091h ; 091h %' DB 092h ; 092h %' DB 093h ; 093h %' DB 094h ; 094h %' DB 095h ; 095h %' DB 096h ; 096h %' DB 097h ; 097h %' DB 098h ; 098h %' DB 099h ; 099h %' DB 09Ah ; 09Ah %' DB 09Bh ; 09Bh %' DB 09Ch ; 09Ch %' DB 09Dh ; 09Dh %' DB 09Eh ; 09Eh %' DB 09Fh ; 09Fh %' DB 0A0h ; 0A0h A-circle %' DB 0A1h ; 0A1h a-circle %' DB 0A2h ; 0A2h A-umlaut %' DB 0A3h ; 0A3h a-umlaut %' DB 0A4h ; 0A4h O-slashed %' DB 0A5h ; 0A5h o-slashed %' DB 0A6h ; 0A6h U-umlaut %' DB 0A7h ; 0A7h u-umlaut %' DB 0A8h ; 0A8h %' DB 0A9h ; 0A9h %' DB 0AAh ; 0AAh %' DB 0ABh ; 0ABh %' DB 0ACh ; 0ACh %' DB 0ADh ; 0ADh %' DB 0AEh ; 0AEh AE ligature %' DB 0AEh ; 0AFh ae ligature %' DB 0B0h ; 0B0h %' DB 0B1h ; 0B1h %' DB 0B2h ; 0B2h %' DB 0B3h ; 0B3h %' DB 0B4h ; 0B4h %' DB 0B5h ; 0B5h %' DB 0B6h ; 0B6h %' DB 0B7h ; 0B7h %' DB 0B8h ; 0B8h %' DB 0B9h ; 0B9h %' DB 0BAh ; 0BAh %' DB 0BBh ; 0BBh %' DB 0BCh ; 0BCh %' DB 0BDh ; 0BDh %' DB 0BEh ; 0BEh %' DB 0BFh ; 0BFh %' DB 0C0h ; 0C0h %' DB 0C1h ; 0C1h %' DB 0C2h ; 0C2h %' DB 0C3h ; 0C3h %' DB 0C4h ; 0C4h %' DB 0C5h ; 0C5h %' DB 0C6h .  ; 0C6h %' DB 0C7h ; 0C7h %' DB 0C8h ; 0C8h %' DB 0C9h ; 0C9h %' DB 0CAh ; 0CAh %' DB 0CBh ; 0CBh %' DB 0CCh ; 0CCh %' DB 0CDh ; 0CDh %' DB 0CEh ; 0CEh %' DB 0CFh ; 0CFh %' DB 0D0h ; 0D0h %' DB 0D1h ; 0D1h %' DB 0D2h ;  0D2h %' DB 0D3h ; 0D3h %' DB 0D4h ; 0D4h %' DB 0D5h ; 0D5h %' DB 0D6h ; 0D6h %' DB 0D7h ; 0D7h %' DB 0D8h ; 0D8h %' DB 0D9h ; 0D9h %' DB 0DAh ; 0DAh %' DB 0DBh ; 0DBh %' DB 0DCh ; 0DCh %' DB 0DDh ; 0DDh %' DB 0DEh ; 0DEh %' DB 0DFh ; 0DFh %' DB 0E0h ; 0E0h %' DB 0E1h ; 0E1h %' DB 0E2h ; 0E2h %' DB 0E3h ; 0E3h %' DB 0E4h ; 0E4h %' DB 0E5h ; 0E5h %' DB 0E6h ; 0E6h %' DB 0E7h ; 0E7h %' DB 0E8h ; 0E8h %' DB 0E9h ; 0E9h %' DB 0EAh ; 0EAh %' DB 0EBh ; 0EBh %' DB 0ECh ; 0ECh %' DB 0EDh ; 0EDh %' DB 0EEh ; 0EEh %' DB 0EFh ; 0EFh %' DB 0F0h ; 0F0h %' DB 0F1h ; 0F1h %' DB 0F2h ; 0F2h %' DB 0F3h ; 0F3h %' DB 0F4h ; 0F4h %' DB 0F5h ; 0F5h %' DB 0F6h ; 0F6h %' DB 0F7h ; 0F7h %' DB 0F8h ; 0F8h %' DB 0F9h ; 0F9h %' DB 0FAh ; 0FAh %' DB 0FBh ; 0FBh %' DB 0FCh ; 0FCh %' DB 0FDh ; 0FDh %' DB 0FEh ; 0FEh %' DB 0FFh ; 0FFh %' %' rgb2For1Chrs - %' This table defines those characters which have 2 for 1 substitutions. %' rgb2For1Chrs LABEL BYTE %' DB 0A0h ; 0A0h A-circle %' DB 0A1h ; 0A1h a-circle %' DB 0A2h ; 0A2h A umlaut %' DB 0A3h ; 0A3h a umlaut %' DB 0A4h ; 0A4h O umlaut %' DB 0A5h ; 0A5h o umlaut %' DB 0A6h ; 0A6h O-slash %' DB 0A7h ; 0A7h o-slash %' DB 0A8h ; 0A8h U umlaut %' DB 0A9h ; 0A9h u umlaut %' DB 0AEh ; 0AEh AE ligature %' DB 0AFh ; 0AFh ae ligature %' DB 0B0h ; 0B0h (ettset) %' %' rgw2For1Subs - %' This table MUST parallel rgb2For1Chrs. It defines the two characters %' which are to be substituted for the characters in rgb2For1Chrs. %' rgw2For1Subs LABEL BYTE ; DB 'A', 'o' ; A-circle expands to 'A', 'o' ; DB 'a', 'o' ; a-circle expands to 'a', 'o' ; DB 'A', 'u' ; A-umlaut expands to 'A', 'u' ; DB 'a', 'u' ; a-umlaut expands to 'a', 'u' ; DB 'O', 'u' ; O-umlaut expands to 'O', 'u' ; DB 'o', 'u' ; o-umlaut expands to 'o', 'u' ; DB 'O', '/' ; O-slash expands to 'O', '/' ; DB 'o', '/' ; o-slash expands to 'o', '/' ; DB 'U', 'u' ; U-umlaut expands to 'U', 'u' ; DB 'u', 'u' ; u-umlaut expands to 'u', 'u' ; DB 'A', 'e' ; AE ligature expands to 'A', 'e' ; DB 'a', 'e' ; ae ligature expands to 'a', 'e' ; DB 's', 's' ; ettset expands to 's', 's' %' %' rgw2For1Priorities - %' This table MUST parallel rgb2For1Chrs & rgw2For1Subs. It defines the %' offset in priority of the second of the two characters in rgw2For1Subs %' which are to be substituted for the corresponding characters defined in %' rgb2For1Chrs. For the first example shown A-umlaut, the -1 indicates %' that the "Au" substitution should sort immediately before a real "Au". %' 0 (zero) would indicate that the "Au" substituted for A-umlaut should be %' sorted exactly equal to a normal "Au", and finally a 1 would indicate %' that the "Au" substitution should sort immediately after a real "Au". %' NOTE: This table is NOT used in conjunction with the first character %' collation table. When the first character collation table is being used %' the characters substituted as a result of 2 for 1 substitutions will be %' collated equal to their normal values, just as if the entry in this array %' had been defined as 0. %' rgw2For1Priorities LABEL BYTE ; DW -1 ; A-circle expands to 'A', 'o' & sorts before 'Ao' ; DW -1 ; a-circle expands to 'a', 'o' & sorts before 'ao' ; DW -1 ; A-umlaut expands to 'A', 'u' & sorts before 'au' ; DW -1  ; a-umlaut expands to 'a', 'u' & sorts before 'au' ; DW -1 ; O-umlaut expands to 'O', 'u' & sorts before 'Ou' ; DW -1 ; o-umlaut expands to 'o', 'u' & sorts before 'ou' ; DW -1 ; O-slash expands to 'O', '/' & sorts before 'O/' ;/  DW -1 ; o-slash expands to 'o', '/' & sorts before 'o/' ; DW -1 ; U-umlaut expands to 'U', 'u' & sorts before 'Uu' ; DW -1 ; u-umlaut expands to 'u', 'u' & sorts before 'uu' ; DW -1 ; AE ligature expands to 'A', 'e' & sorts before 'Ae' ; DW -1 ; ae ligature expands to 'a', 'e' & sorts before 'ae' ; DW -1 ; esset expands to 's', 's' & sorts before 'ss' %' %' This table defines those pairs of characters which have special priorities %' rgw1For2Wrds LABEL BYTE ; DB 'M', 'c' ; DB 'C', 'h' ; DB 'c', 'h' %' %' This table MUST parallel rgw2For1Wrds. It defines the priorites of the %' sets of two special characters defined in rgw2For1Wrds. Note that the %' priority of a single character is the value defined in the collation %' table(s) above times 256. So in this example, the priority of M is %' 4D00; The priority of Mc is 4CFF. This means that the Mc gets collated %' IMMEDIATELY before M (since no number exists between 4CFF and 4D00.) %' Also, ch gets collated immediately after c (4300 for c followed by 4301 %' for ch); similarly for Ch and C. %' rgw1For2Subs LABEL BYTE %' DW 4CFFh %' DW 4301h %' DW 6301h %' %' This table MUST parallel rgw2For1Wrds. It defines whether the 1 for 2 %' substitution defined in rgw1For2Wrds and rgw1For2Subs should always be %' made or if it should only be made when the two characters defined in %' rgw1For2Wrds are at the beginning of a string. 1 means beginning only, %' 0 means anywhere in the string. %' rgb1For2Flags LABEL BYTE %' DB 01h %' DB 00h %' DB 00h )) ; The following table indicates the class of the each of the 256 characters. ; The five possible values are defined below. numer EQU 0 ; Numeric (Whole numbers) alpha EQU 1 ; Alphabetic (Letters of the alphabet) specl EQU 2 ; Special (Non-alphanumeric, but commonly displayed) graph EQU 3 ; Graphic (Line drawing and other special graphics) blind EQU 4 ; Blind (Not generally intended for display purposes) %DefTableData (CharacterClassTable, 10, %(%' CharacterClassSignature DW 'CC' ; 0 / 8 1 / 9 2 / A 3 / B 4 / C 5 / D 6 / E 7 / F ; ----- ----- ----- ----- ----- ----- ----- ----- DB blind, blind, blind, specl, blind, blind, specl, blind ; 00h-07h DB blind, blind, blind, blind, blind, blind, blind, blind ; 08h-0Fh DB specl, blind, blind, blind, blind, blind, specl, blind ; 10h-17h DB blind, blind, specl, blind, blind, blind, specl, blind ; 18h-1Fh DB specl, specl, specl, specl, specl, specl, specl, specl ; 20h-27h DB specl, specl, specl, specl, specl, specl, specl, specl ; 28h-2Fh DB numer, numer, numer, numer, numer, numer, numer, numer ; 30h-37h DB numer, numer, specl, specl, specl, specl, specl, specl ; 38h-3Fh DB specl, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 40h-47h DB alpha, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 48h-4Fh DB alpha, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 50h-57h DB alpha, alpha, alpha, specl, specl, specl, specl, specl ; 58h-5Fh DB specl, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 60h-67h DB alpha, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 68h-6Fh DB alpha, alpha, alpha, alpha, alpha, alpha, alpha, alpha ; 70h-77h DB alpha, alpha, alpha, specl, specl, specl, specl, blind ; 78h-7Fh DB graph, graph, graph, graph, graph, graph, graph, graph ; 80h-87h DB graph, graph, graph, graph, graph, graph, graph, graph ; 88h-8Fh DB graph, graph, graph, graph, graph, graph, graph, graph ; 90h-97h DB graph, graph, graph, graph, graph, graph, graph, graph ; 98h-9Fh DB blind, blind, blind, blind, blind, blind, blind, blind ; A0h-A7h DB blind, blind, blind, blind, blind, blind, blind, blind ; A8h-AFh DB blind, blind, blind, blind, blind, blind, graph, graph ; B0h-B7h DB graph, graph, graph, graph, graph, graph, graph, graph ; B8h-BFh DB graph, graph, graph, graph, graph, graph, graph, graph ; C0h-C7h DB graph, graph, graph, graph, graph, graph, graph, graph ; C8h-CFh DB graph, graph, graph, graph, graph, graph, graph, graph ; D0h-D7h DB graph, graph, graph, graph, graph, graph, graph/ , graph ; D8h-DFh DB graph, graph, graph, graph, graph, graph, graph, graph ; E0h-E7h DB graph, graph, graph, graph, graph, graph, graph, graph ; E8h-EFh DB graph, graph, graph, graph, graph, graph, graph, graph ; F0h-F7h DB graph, graph, graph, graph, graph, graph, graph, graph ; F8h-FFh )) ; The Yes/No strings are space delimited words meaning Yes or No. ; It is recommended that Yes and No remain as part of their respective strings ; for compatibility with submit files. ; If you wish to have multiple answers for yes or no, modify the table as ; follows: ('Yes Oui'). That is, separate words by a space, but do ; not put a space after the last entry. ; Note: For some programs, such as the Cmd File Editor, if you have more than ; one word matching yes or no, only the first one will be displayed. %DefTableData (YesNoStrings, 11, %(%' YesNoSignature DW 'YN' %sbString ('Yes') ; could be ('Yes Oui') %sbString ('No') ; could be ('Nyet NoWay ForgetIt') )) ; The Special Characters table contains characters that are subject ; to special interpretation by programs like the Executive. The table ; includes entries used by Convergent as well as customer reserved entries. ; Convergent characters follow the nEntriesCT field, while customer entries ; follow the nEntriesUser field. To change the characters used by ; Convergent programs, simply change values in the CT portion of the ; table. For example, to change the literal insert or escape character ; from CODE-' to backslash, change the first entry from 0A7h to 5Ch. ; ; If you add entries, be sure you add the entries after the nEntriesUser ; field, and increment nEntriesUser. ; ; NOTE: DO NOT ALTER THE ORDER OF THE ENTRIES. ; %DefTableData (SpecialCharacters, 13, %(%' SpecialCharacters DW 'SC' nEntriesCt DB 1 DB 0A7h ; Literal insert character, Code Quote nEntriesUser DB 0 ;customer entries start here )) ; ; The KbdChords table defines the unencoded keystrokes for the code, shift ; and action key chords. ; ; The table is also used by the Remote Console. ; %DefTableData (KbdChords, 14, %(%' KbdChordsSig DW 'KC' cIkey DW 14 ;number of iKeys described below iKeyDbgrA DW 61h ;(action-a) - enter debugger in single process mode iKeyDbgrB DW 62h ;(action-b) - enter debugger in multi process mode iKeyDelete DW 7Fh ;(action-delete) - discard kbd type ahead iKeyOverType DW 44h ;(action-overtype) - turn off video refresh iKeyCode0 DW 4Ch ;left code key iKeyCode1 DW 4Dh ;right code key iKeyFinish DW 04h ;finish key iKeyAction DW 43h ;action key iKeyShiftLock DW 45h ;shift LOCK key iKeyShift0 DW 48h ;left shift key iKeyShift1 DW 49h ;right shift key rsvd1 DW 0FFFFh rsvd2 DW 0FFFFh rsvd3 DW 0FFFFh )) ; ; TABLE 15 RESERVED - DO NOT USE ; ; ; The table below, MultiByteEscapeKeys, defines keyboard keys which when ; depressed result in multiple keystrokes being returned to keyboard clients. ; ; All entries in the table are unencoded keystrokes. Any key on the keyboard ; may be defined as a MultiByteEscapeKey. Also, different results may be ; defined depending on the shift and code key state. See the CTOS Reference ; manual Appendix C-1 for unencoded value of keyboard keys. ; ; The resulting key sequences must include downstrokes as well as upstrokes ; as well as any shift state required to produce the keyboard characters ; desired. An upstroke is the key value OR'ed with 80h. ; ; The two examples below are 'commented out' by the notation %' ; preceding each macro. ; ; In the first example below, the key '0' on the numeric pad (unencoded ; value 4Ah) is defined to produce 6 keyboard events - ; downstroke 'a' (61h) ; upstroke 'a' (0E1h) ; downstroke 'b' (62h) ; upstroke 'b' (0E2h) ; downstroke 'c' (63h) ; upstroke 'c' (0E3h) ; These 6 keyboard events would produce the 3 keyboard characters 'abc'. ; ; In the second example the key '0' on the numeric pad is depressed when the ; shift or shift lock keys are active would produce the keyboard characters ; '[sys]'. Note that the first keystroke in this list is shift ; upstroke (0 0C8h) which turns off the shift state caused by the invoking ; key, shift-'0'. ; %DefTableData (MultiByteEscapeKeys, 16, %(%' EscapeKeySig DW 'MB' Unshifted EQU 0 Shifted EQU 3 Coded EQU 0Ch ShiftLock EQU 10h %InitEscapeKeys %'%DefEscapeKey(4Ah, Unshifted) (61h,0E1h,62h,0E2h,63h,0E3h) %'%DefEscapeKey(4Ah, Shifted) (0C8h,5Bh,0DBh,73h,0F3h,79h,0F9h,73h,0F3h,5Dh,0DDh,48h,5Bh,0C8h,0DBh,73h,0F3h,79h,0F9h,73h,0F3h,48h,5Dh,0C8h,0DDh) %EndEscapeKeys )) %TableEnd END graph ; 98h-9Fh DB blind, blind, blin; ; COPYRIGHT 1980,1987 CONVERGENT TECHNOLOGIES, INC. ; ALL RIGHTS RESERVED ; ; THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE ; SOLELY FOR THE OPERATION OF A DESIGNATED COMPUTER FOR A ; PARTICULAR PURPOSE, AND MAY NOT BE COPIED OR OTHERWISE USED ; WITHOUT THE PRIOR WRITTEN CONSENT OF CONVERGENT TECHNOLOGIES, ; INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, INCLUDING ITS ; SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT TECHNOLOGIES. ; %*DEFINE (InitDiacriticalTables) ( %SET(cEntries,0) %DEFINE (String1) () %DEFINE (String2) () ) %*DEFINE (DiacriticalSet(bDiacriticalKey,bFollowingKey,bResultantKey)) ( %DEFINE (tmpString) (%String1) %DEFINE (String1) (%tmpString DB %bDiacriticalKey,%bFollowingKey) %DEFINE (tmpString) (%String2) %DEFINE (String2) (%tmpString DB %bResultantKey) %SET(cEntries, %cEntries+1) ) %*DEFINE (EndDiacriticalTables) ( cDiacriticalPairs DW %cEntries %String1 %String2 ) %Set(cbTable,0) %Set(cTable,0) STACK segment word stack 'STACK' STACK ends HdrSeg SEGMENT PUBLIC 'const' wSignature DB 'T', 'N' cbFile DW 0 cStruct DW 0 orgID DW 0 orgOStruct DW 0 fill DW 0,0,0 HdrSeg ENDS sHdrSeq EQU 10h IdSeg SEGMENT WORD PUBLIC 'const' rgId LABEL WORD IdSeg ENDS oStructSeg SEGMENT WORD PUBLIC 'const' rgoStruct LABEL WORD oStructSeg ENDS rgbStructSeg SEGMENT WORD PUBLIC 'const' rgbStruct LABEL BYTE rgbStructSeg ENDS TGroup GROUP HdrSeg, IdSeg, oStructSeg, rgbStructSeg, endNlsTable %*DEFINE (DefTableString(name, id, string)) LOCAL rgbStart ( %x1Out(%name (%id) ... ) %DEFINE (arg) (%string) IdSeg SEGMENT DW %id IdSeg ENDS rgbStructSeg SEGMENT %rgbStart LABEL BYTE %WHILE (%LEN(%arg) GT 0) (%MATCH (head, arg) (%arg) DB %head ) rgbStructSeg ENDS oStructSeg SEGMENT DW OFFSET TGroup:%rgbStart oStructSeg ENDS %Set(cTable, %cTable+1) %Set(cbTable, %cbTable+%len(%string)) %x1Out(done.%nl) ) %*DEFINE (DefTablesbString(name, id, sbString)) LOCAL tmp0 tmp1 ( %x1Out(%name (%id) ... ) IdSeg SEGMENT DW %id IdSeg ENDS rgbStructSeg SEGMENT %tmp0 LABEL BYTE DB 0 %IF(%NES(%sbString,''))THEN( DB %sbString)FI %tmp1 LABEL BYTE ORG OFFSET %tmp0 DB %tmp1-%tmp0-1 rgbStructSeg ENDS oStructSeg SEGMENT DW OFFSET TGroup:%tmp0 oStructSeg ENDS %Set(cTable, %cTable+1) %Set(cbTable, %cbTable+%len(%sbString)+1) %x1Out(done.%nl) ) %*DEFINE (SbString(Str)) LOCAL tmp0 tmp1 ( rgbStructSeg SEGMENT %tmp0 LABEL BYTE DB 0 %IF(%NES(%str,''))THEN( DB %str)FI %tmp1 LABEL BYTE ORG OFFSET %tmp0 DB %tmp1-%tmp0-1 ORG OFFSET %tmp1 rgbStructSeg ENDS ) %*DEFINE (DefTableData(name, id, data)) LOCAL rgb0 rgb1 ( %x1Out(%name (%id) ... ) %DEFINE (arg) (%data) IdSeg SEGMENT DW %id IdSeg ENDS rgbStructSeg SEGMENT %rgb0 LABEL BYTE %data %rgb1 LABEL BYTE rgbStructSeg ENDS oStructSeg SEGMENT DW OFFSET TGroup:%rgb0 oStructSeg ENDS %Set(cTable, %cTable+1) %Set(cbTable, %cbTable+(%rgb1-%rgb0)) %x1Out(done.%nl) ) %*DEFINE (TableEnd)( EndNlsTable segment public 'const' TheEnd label byte EndNlsTable ends HdrSeg SEGMENT PUBLIC 'const' ORG OFFSET cbFile DW offset TGroup:TheEnd ORG OFFSET cStruct DW %cTable ORG OFFSET orgId DW OFFSET TGRoup:rgId ORG OFFSET orgoStruct DW OFFSET TGRoup:rgoStruct HdrSeg ENDS ) %*DEFINE (TableInit)( %' '%x1Out(Creating NLS tables:%nl)%' ) %*DEFINE(xOut(str))(%IF (%PASS1 EQ -1) THEN (%out(%str)) FI) %*DEFINE(x2Out(str))(%IF (%PASS2 EQ -1) THEN (%out(%str)) FI) %*DEFINE(x1Out(str))(%out(%str)) %DEFINE(nl)( ) ;StartKeycapDefines Macro ;Set up the data space for the Keycap Template arrays. The ;pointer array of these templates is called rgsbTemplates %*DEFINE (0 StartKeycapDefines)( ; rgKeycap is an array of offsets which describe the beginning ; of each of the structures in the Nls Keycap section of the NLS ; tables. public rgKeyCap rgKeyCap LABEL BYTE wKeyCapSig DW 'KC' %' Name table signature wRevLevel DW 0 %' Revision level cKeyCaps DW 0 %' Number of keycaps orgosbKeyCap DW 0 %' offset to keycap list %SET(NoKeyCaps, 1) sbKeyCaps label byte ) ; KeycapEntry Macro ; Create a table entry for the template form provided. Takes a ; name and string value: ; DefineKeycapEntry(Help_00, "HELP") ; This creates an entry called sbHelp_00 with the provided ; String, and adds it sequentially to the data structures. %*DEFINE (DefineKeyCapEntry(NameKeyCap, "String"))( sb%NoKeyCaps LABEL BYTE %' SB starts here DB %len(%String) %' String length DB '%String' %' String text DB 0 %' Null terminator for C etc %SET(NoKeyCaps, %NoKeyCaps+1) ) ;EndKeycapDefines Macro ;Wraps up the data space for the Keycap String arrays and ;other structures. %*DEFINE (EndKeycapDefines)( ; Describe the available tables by rgTables offset %SET (iKeyCap, 1) rgosbKeyCap LABEL BYTE %WHILE (%iKeyCap LT %NoKeyCaps) ( DW (OFFSET sb%iKeyCap) - (OFFSET rgKeyCap) %SET (iKeyCap, %iKeyCap + 1) ) EndKeyCapData label byte ORG OFFSET cKeyCaps DW %NoKeyCaps - 1 ORG OFFSET orgosbKeyCap DW (OFFSET rgosbKeyCap) - (OFFSET rgKeyCap) ORG OFFSET EndKeyCapData ) ; ; StartNameDefines Macro - - Set up the data space for the Date Time ; Template arrays. The pointer array of ; These templates is called rgsbTemplates ; %*DEFINE (StartNameDefines)( public NameStruct %SET(TableNo, 1) %SET(Started, 0) %SET(StringMax, 0FFH) %' %' %' %' %' N L S N A M E S T R U C T U R E %' %' NameStruct is a structure of offsets and counts which describe the %' structures in the Nls Name section of the NLS tables. %' %' %' NameStruct label byte qNameSignature DW 'NT' wNameRevLevel DW 0 cTables DW 0 orgoTables DW 0 ) ; ; NameEntry Macro - - Create a table entry for the template form ; provided. Takes a name and string value: ; ; DefineNameEntry(FirstMonth, "january") ; ; This creates an entry called FirstMonth with the provided String, and ; adds it sequentially to the data structures. ; ; Define the string %*DEFINE (DefineNameEntry(NameString, "String"))( %IF ((%StringNo LT %StringMax) AND (%Started EQ 1)) THEN ( sb%StringNo%TableNo label byte db %len(%String) db '%String' db 0 %SET (StringNo, %StringNo+1) ) ELSE ( %IF (%StringNo EQ %StringMax) THEN ( %OUT (DateString: %StringNo; Table: %TableNo; Too many strings in table, first table contained %StringMax strings. ) ) ELSE ( %OUT(Table number %TableNo must Begin before name strings can be defined ) ) FI ) FI ) ; ; Start Table Macro - - Begin a new list of date names ; %*DEFINE (StartNameTable)( %' %' remember the start of this list of string offsets %' %IF (%Started EQ 1) THEN ( %OUT(Table number %TableNo must End before another can begin ) ) ELSE ( %SET (StringNo, 1) %' %' Set the "We are in a table" flag, and warn user if last table not closed %SET(Started, 1) ) FI ) ; ; End Name Table Macro - - Close up a list of strings ; %*DEFINE (EndNameTable)( %' %' %' %' Warn user that we are closing a tabel that was not opened up %IF (%Started EQ 0) THEN ( %OUT(Table number %TableNo must Begin before it can end ) ) ELSE ( %IF (%StringMax EQ 0FFH) THEN ( %SET (StringMax, %StringNo) ) FI %IF (%StringNo LT %StringMax) THEN ( %OUT (Table: %TableNo; Table must contain %StringMax strings, this table contains only %StringNo strings ) ) ELSE ( %SET(TableNo, %TableNo+1) %SET(Started, 0) ) FI ) FI ) ; ; EndNameDefines Macro - - Wraps up the data space for the Name ; String arrays and other structures. ; %*DEFINE (EndNameDefines)( %' %IF (%Started EQ 1) THEN ( 1 %OUT(Table number %TableNo must End before name definitions can End ) ) ELSE ( %SET (iTable, 1) %' %WHILE (%iTable LT %TableNo) ( Table%iTable label byte %Set (iName, 1) %WHILE (%iName LT %StringMax) ( DW (OFFSET sb%iName%iTable) - (OFFSET NameStruct) %SET (iName, %iName+1) ) %SET (iTable, %iTable+1) %SET (iName, 1) ) %' %SET (iTable, 1) rgoTables label byte %WHILE (%iTable LT %TableNo) ( DW %StringMax-1 DW (OFFSET Table%iTable) - (OFFSET NameStruct) %SET (iTable, %iTable + 1) ) EndNameData Label byte %' %' %' %' %' Describe the available tables by rgTables offset %' ORG OFFSET cTables DW %TableNo-1 ORG OFFSET orgoTables DW (OFFSET rgoTables) - (OFFSET NameStruct) ORG OFFSET EndNameData %' %' ) FI ) ; ; StartDateDefines Macro - - Set up the data space for the Date Time ; Template arrays. The pointer array of ; These templates is called rgsbTemplates ; %*DEFINE (StartDateDefines)( %' public DateStruct %' %' %' N L S D A T E S T R U C T U R E %' DateStruct is an structure of offsets and counts which describe the %' structures in the Nls Date section of the NLS tables. %' %' DateStruct label byte qDateSignature dw 'DT' wDateRevLevel dw 0 cCtTemplates dw 0 cOemTemplates dw 0 orgoTemplates dw 0 %' cEscs dw 0 orgCmds dw 0 %' %' %SET(NumSbs, 0) %SET(NumCtTemps, 0) %SET(NumOemTemps, 0) %' %SET(NumEscs, 0) %' %SET(BuildPhase, 1) %' %' rgCmds label byte %' ) ; ; DateEscapeDefine Macro - - Defines the character to be used for each ; of the escape sequences (attributes) in the ; NLS Date templates. ; %*DEFINE (DateEscapeDefine(CommandName, 'bLower', 'bUpper'))( %' %IF (%BuildPhase EQ 1) THEN ( db '%bLower' db '%bUpper' %' %SET(NumEscs, %NumEscs+1) %' ) ELSE ( %OUT(Command: %CommandName; Command characters must be defined before other NLS Date information. ) ) FI ) ; ; TemplateEntry Macro - - Create a table entry for the template form ; provided. Takes a name and string value: ; ; DefineTemplateEntry(LongDayDate, "!W*w! !N*n! !*d!, !*y!") ; ; This creates an entry called LongDayDate of the provided format, and ; adds it sequentially to the data structures. ; %*DEFINE (DefineTemplateEntry(TemplateName, "TemplateString"))( %' %'Transitioning from command char definition, disallow further command defines %IF (%BuildPhase EQ 1) THEN ( %SET (BuildPhase, 2) ) FI %' %IF ((%BuildPhase EQ 2) OR (%BuildPhase EQ 3)) THEN ( sbTemplate%NumSbs label byte db %len(%TemplateString) db '%TemplateString' db 0 %' %SET(NumSbs, %NumSbs+1) %' %IF (%BuildPhase EQ 2) THEN ( %SET(NumCtTemps, %NumCtTemps+1) ) ELSE ( %SET(NumOemTemps, %NumOemTemps+1) ) FI %' ) ELSE ( %OUT(Template: %TemplateName; Templates must be defined immediately after command characters ) ) FI %' ) ; ; EndStdDateDefines Macro - - Wraps up the data space for the Date Time ; Template arrays and other structures. The ; number of templates is put in in cTemplates, ; which is referenced by its offset, as is the ; array of escapes. ; %*DEFINE (EndStdDateDefines)( %IF (%BuildPhase EQ 2) THEN ( %SET (BuildPhase, 3) ) ELSE ( %OUT (Command characters and Standard templates must be defined before OEM templates ) ) FI ) ; ; EndOemDateDefines Macro - - Wraps up the data space for the Date Time ; Template arrays and other structures. The ; number of templates is put in in cTemplates, ; which is referenced by its offset, as is the ;  array of escapes. ; %' %*DEFINE (EndOemDateDefines)( %' %IF (%BuildPhase EQ 3) THEN ( %' %' Disallow any further definitions %SET (BuildPhase, 4) %' rgosbTemplates LABEL BYTE %' %SET (iosb, 0) %' %WHILE (%iosb LT %NumSbs) ( DW (OFFSET1  sbTemplate%iosb) - (OFFSET DateStruct) %SET (iosb, %iosb+1) ) %' EndDateData label byte ORG OFFSET cCtTemplates DW %NumCtTemps ORG OFFSET cOemTemplates DW %NumOemTemps ORG OFFSET orgoTemplates DW (OFFSET rgosbTemplates) - (OFFSET DateStruct) ORG OFFSET cEscs DW %NumEscs ORG OFFSET orgCmds DW (OFFSET rgCmds) - (OFFSET DateStruct) ORG OFFSET EndDateData ) ELSE ( %OUT (Error; Command character, Default template, and OEM template definition areas must be present ) ) FI ) ; ;The macro definitions below are used to build a structure describing system ;multi-byte escape keys. ; %*DEFINE (InitEscapeKeys) ( %SET(cKeys,0) %DEFINE (LookupSeg) () %DEFINE (ExpansionSeg) () ) %*DEFINE (DefEscapeKey(bEsc,bAttr) (rgbIkeys)) LOCAL tmp0 tmp1 ( %DEFINE (tmpExpansion) (%ExpansionSeg) %DEFINE (ExpansionSeg) (%tmpExpansion %tmp0 LABEL BYTE %IF(%NES(%rgbIkeys,''))THEN( DB %rgbIKeys )FI%' %tmp1 LABEL BYTE ) %DEFINE (tmpLookup) (%LookupSeg) %DEFINE (LookupSeg) (%tmpLookup DB %bEsc,%bAttr DW %tmp1-%tmp0 DW OFFSET TGROUP:%tmp0 ) %SET(cKeys, %cKeys+1) ) %*DEFINE (EndEscapeKeys) ( cEscKeys DW %cKeys %LookupSeg %ExpansionSeg ) Set (iName, 1) %WHILE (%iName LT %StringMax) ( DW (OFFSET sb%iName%iTable) - (OFFSET NameStruct) %SET (iName, %iName+1) ) %SET (iTable, %iTable+1) %SET (iName, 1) ) %' %SET (iTable, 1) rgoTables label byte %WHILE (%iTable LT %TableNo) ( DW %StringMax-1 DW (OFFSET Table%iTable) - (OFFSET NameStruct) %SET (iTable, %iTable GWs=ͱq |2 2{eCopyright 1987 Convergent Technologies, Inc. All rights reserved.Ver 11.2 Linker 11.2 28_?=`tY@  / H \ p     / > C L W \ p 09Xrw:ENYbow &r2Ku%a06kyV\Idj(.EW_io]v$,WpG{ py~$0<HYejoty~ ? . . . &. 2. ?. F. J. N. R. V. [. _. c. g. k. p. t. x. |. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / / / / / / / "/ '/ p''5''' AxKHnEArN#]Q]]_]]V]] ]n]~M|&%B1N^M11s11111o Sgwgggggg0ggggg-ggggggg<gLg`g g gEv&&7&/ / / / bXb:o \o 7/ / :XTY }sAsssskss/s9 D ^    O (Qw}S}f}}}l}gM,H c < o o  1 ~  : #k ///_0/ 1P1/p28?P@/A C_E0J_S pV```b f/jOj?@kOmom@o0wyP{`|`~Op~Ї А ?0p/pO?Х?=6*7-h'2 &80(/)E ." +*3#  %,"$+d2!1/m54)7x5XQYzc6|/$MA]''P'''2''''E)`&l,]3p22C2f29111gg$gg g?gqggggg g( gU g g&&d&&&&l&&B ,sAs]slsU/ L}}}|Ke9Ll7lX#+P^  $ w   M q    L < 6 &   M e   : Q: X X $X 2X @X a pa  '2]1g&bs }  : X ] a k o K QUvPFPTF tFkFFFFFFFFHN;rE^&F0:r<9wF Vµ+FP@&3FuF]U vPFPTF u"~tFFF&Ytyu]UQQb)FFx4b)d)vPFb)d)]UF~tMFȈFNNnN s 0JFA, NB~u~wNb)SFJQ*ȵQFP3P]U FFt0ȈFF 1VF1FN0VJ uɸx4PFJQ*ȵQFP3P]UQb)S^GPPFP3P]UQQb)FFx4b)d)vFb)d)]UQQF^v8tFb)S^SvFP3P]UQb)S^SvFP3P]U P]U P]Ub)SvP]UF t3@;v)F)) P^S*P))F]UF tG@;v)F)^S) P+PPFP*P))F]UQQF tv@s FFFsv^Svv vFP#v^Svv vFP$PFV FF1)F 냋]UF V FF %FFV tNFVusFFF1v~^YFFF)FV먋] UQ+`)F9FvF6`)`%vNFF`)]UPPFPTPPHP*PLP^SvRPPrmPP6LHSPPPFP#PH&?GWt PH&t PH&GN&G:p) WPn)p);sn)n)+p)r)H&G0Hn)f)SP+P]UT t7f)AVFF t;vNFFF)Ff)ۡf)Xf)h)@j)9l)vl)l)PDP*Pl)ȸ>D9j)vj)j)P@P*Pj)ȸ>@6NHPU6LHS6NPPP6L P]UFN]UFV t)v)))F":u2F":uF!PF X F F@&F ))@&@)PF X@&@F F@&@F @&@] UF)&@&P%)+]UFNFVJH^~+׋)+׋]UHH&G.J))&G:F&Gࣖ)FH&G0HN;s)&PVuCFn)0@9^YF$FFn)F@&@-N逋n)FQPRPF)&0vFt\T u FVPSFVVFNX;wC;uFVFFvvvvP)FVFVFuVT@&@VP@SRPj)HPP/PDSRPl)HPP@w2 )F@w)F>TuFf)FF@&H&P&F~&GF@&G>h)tf)@@& @&V@&G]UFr)]U JH&ONFJ&GFFH&GHN;r7F^&@Fv^&F^&7^&FuH&4tbJ&O2NFFH&G4HN;r@F^&@Fv^&F^&t P^&Fu]UFua$.         ! P6qsFu-PFuPFu 0+ PFu%5PFuBQPFu \P]UjPqPPFPTF u ^SvPqv)PP6t)PPq@&GPP@&wPj)+f)HFtPq@&7PPqvP@&tPq@&wP Pq Pq!PFF;f)vPPFPPF@&PV:u6&pP:PF@&0P?PqZF@&@PPF@&pPF@&0PFPPv Ft]UF#;u P~u/FNINFF;Fw^&FFuF]UFvx)&F tiNANu$&F&P;Fu;FFF~u*vx)&F&P;Fu FFF델CP@]U츀Px)PP>x)@x)|)x)gPq{Pq]Ux);|)uP6z)|)PP.x)Fx)&]U츏PqvPPqvPPqFPvP]UQQvPPqv PPqvP~tmF F Pv<NFȉ~)9F tMF tF;vNFFFPv vPFF F)F볋]UFFFF tR=s FF^Sv)".P^SvFP3PFF)F맋]UX)".PPPPFF)3rFFFpFN+ȉN~u]FFsjFFʹ;vNʋNʋ~u+JVt VʋFFF+FʉF^&?uA u@"F돃~u#F tN+NV+ʉNvRPQYFFʹ;vNʋFʉF~t+JVtVʋFF~ v_F+FFN t+FvPPvF tvvPvFFFFvvʚ0FFFFFF)F~tLv6~)(+x)%F".Qx)SPFP3Px)Sv)^FF~)FVF t0FF;Fw#".PPPFP3PFuvv< PPFPTF t[FҌ^FFP^SvָRPPrmPPvθ`%PPPPFP#P>`%GWu>b%t Pd%FF FڌFFFތF~⾂)~꾊)FF~u FF~)FFFFVJƒFFP P)".PFP PFP3PFFHN;rZvθ`%PRRPFP#P`%PP)".P`%PPFP3PFu".PFP PF%+ȉN؁t%FF;Fr".PPPFuvθ`%PPPPFP#PvΚ PFV~)Vƒv%r%".PFP PFV d%`)&(3s PBP FFH&GFċFăr2Nr+HPPPtuFNFƊFs9Hvč8Nu+JVƒtVHvčPvTPP1P0Pt`)x%`%PP))Уr%".PPPP".P`%PPFP3P PPFPTF t.P^SvָRPPrmP&/PPF us".PvvPF~u:.P`%PPFPF".P`%PvFP3PFtFи.P<F~tP@vК".P<P]U&3sJH&GFFH&w FH&GFH&wFH&GFH&wFH&W )+T j)l)V^S6v)6t)R^S^SP]U>TuFZHV;s^RVVPF^&G%FFF$wG^&FFF^&F@FFF^&u&w^&GFu3 FtpRP׋TK ׉FVFF%F^&w O^&G ^&w >^&G ]U~T'3r *3rPPFPTF tIPPFPTF urNv~v+zFF^FP^SvRPPrmPF u`vPFPPF uDFV TPPPvPS6TPPPv F tRP׋TK ׉FVFF%F^&GZ&WV&O\&^@w @;Tt!PqPqv ]Ut*3r>PPFPTF tHPPFPTF ujNv~Fv+zFF^T FV^SvWQWRPF=t u,FFFP^SvRPPmmPF ua~uvvv F uEvPS6TRPPv F u'3r&PS6TTPqv]UlvPFPTF tLPPFPTPNv~Fv+zvFFF^^ S^SvRPPwmP^SvP]UP"P".P`P PDP&P)P"*PP*)b)d)*Pq0P]U&3x4b)d)1Pq0PPP%t)v) P)3>v) >t)uA"s8Pq&3PPh)PPl)P'3 P(3P*3]UQQ&3rC~c7(> wb)S<P ]UF>03tP <]U~u]UFPFP"V^&?{t@&?[uP6@3:^4t. FPQSVSVQt^[Y=Xt ],N~] t&<}N u+JV s\tWNAv~^YF@^&^v&48x ^& ~]N u+JVuF HN;v9@N +^vp^~&=9^YF@N +^&CFP4F u^&O@wA^~&=9^Y^&G@^&^v&48^&v&4^P^&wg&we^&^v&48^&]U ^vFF^&F^&G^vNFY^&Gw^ &Gj^&GyF^&^vNFYFP4F uQ^&G@^&^&O@wA^^Y^&Ƈ^&Ƈ^PF uI^ &k]u+JBV^ GkPRPPP^S|PPP] U^&G F =wmt =amtI~]Nu+JV^SBRPPFPQ؍GPQF!t=uF~^&Gi^GePF^kvNFYF^&^S^Sv^SFPfF uF~u;^SvRPPRPF=u^v&xF^&Gi뾋F u9^SFPvRQWv PvF u 4^&G ]U ^&G :4t 3^&G ^Sr<F u^&FF^SGkPF&P^SFPpF u^&Oit^v8x^&GiF^S^SvuF tM^G8P^SvRPPmmPlF u"^&w8F t^&w8 FF]U^&G :4t F^&Gj]UQ^"S3PF u2^"S^Svv^S^Sv^ Sv vv3,<4s2^"S^Svv^S^Sv^ Sv vv] U^ &GusS^S.4s^ S^Sj]U^&GusSvv ^Sv"$4s^Svv ^Sv,]U^&Gus Sv64s^Sv-]U^&Gus Sv3 !4s^Sv%]U^ &GusS^S14s^ S^S]U^&Gus S/4s ^SH]U^&Gus$Svv^S^Sv ^Sv014s'^Svv^S^Sv ^Sv]U^&Gus$S^Svv^Sv ^Sv+14s'^S^Svv^Sv ^Sv]U^&GusS^ Sv ^S #4s^S^ Sv ^S]U^&GusS^ Sv ^S#4s^S^ Sv ^S]UQ~^SPF u'^S^Sv^Svv ^Svd14s'^S^Sv^Svv ^Sv]UQ^SPF u*^S^Sv^Svv^ Svvt44s*^S^Sv^Svv^ Svvt]UQ^ &GusSv ^S,l4s^ Sv ^S] U^ &GusSv ^S)4s^ Sv ^Sn] UQ^ &GusSv ^S24s^ Sv ^S]] U^&Gus S$4s ^S ]U^&Gus S#44s ^SK]U^&Gus S54s ^S]U^&Gus Sv&l4s^Sv]U^&Gus Sv%\4s^Sv|]U^ &GusSvv-D4s^ Svv]U^ &GusSvv*,4s^ Svv]U^ &GusSvv44s^ Svv ]U쾎~F =amt=wmt=rmt=tmt =mmt&4^&G F^&Z&WF^&G]U^&^&G :4t ^&GN ^&]U^&^ &&W^&G :4t ]UQQ^ &G :o4t-:q4t':p4t!:n4t:r4t:s4t:t4t :u4t~ wc^ .Okt}  ;D\enw^ &G~^ &Gu^ &G :q4u$&Gs&;Gqt'^ &su$^ &qu^ &G :o4uFFv^ &@q3^ &Gv@^ &G :o4tB^ &G8^ &G :p4t,^ &G6v^ &G :p4t^ &G.^^ &G :o4u ]^ &G/C^ &G<^ &Gh&Oi$^ &Gq^ &Gs^ &Gl^ &GjFF^&] UF 1F1FF1Vu FFmFm1FF1VF1F ;vN^㋇;FvNFF^&F 1^&W^&8Os&^F+@^&GF1^&WF <1^&WF 1F1^&WF 1º PF1Y^&G]UF =wmt=amuF~]Nu+JV~&Nu+JVu F@;Fs F@;Ft ~s }~u^&GM&_O^&GL&^v@^&GMZ&WOF@N+^&OL^S^Sv^Svv ^SvF u 3^&G ]U^&^&G :3t ^S^ Sv ^ST]U^&G :3t ^Sv]U^&G :3t ^S+]UQ^ &G :3t m~ wA^ .^ &G=)^ &G.^ &G/!^ &GB^ &GDFF^&] U^ &G :3t l~ wH^.ZZZZ6ZBNZZZ_kF^ &G=3F^ &G.'F^ &G/F^ &GB F^ &GD]U^&G :3t F^&G1]UQ^&G :3tSv^ S^Si<^SFP4F u'^Sv^ S^SiF3^&G F]U^&G :M4v^& 64Vnjޱ;u$:u34r,4PPPRPQrmWRPQF u^&G :+4u 4FF^&G s<&G s4~u ^&"^&G ^G ^ &Z&W^&}^&G&;Gr$Sv^ S^S9<F uX^&?uL^&G&O+;FsFF^&^&FFv&t^^ &Z&W^F&G]U FFN F;vB~u<^S+QFPFPF^ v8vNFYFF봋F^&F]UQ^&G :3tS^ Sv ^S<^SFP4F u'^S^ Sv ^SF3^&G F]U ^&G :M4v^& !x4Vnjޱ;u$:u34r,x4PPPRPQwmWRPQF u^&G :<4u 4FFFFN F;w~t^&W&;WrS^ R+QFP<FT^&G&+GFV N+;sV^&FF^ v0~&}^9N^Y^F&GFFcF^&F]U^&G :M4v ]U^&G :M4v ^&G ]U^&4 ]U^&]U]U^&GFFv^"&@Fv^"&x"ti&Gwub@JP(F u,vZ^F&^&G ^S1F tvF^"&@VZ&PX^&GFth^"&Gwt^F4FF4FF4FŒF4FƌFȰFʈFˈF̈F^"&GsF&GqF^&GcFҍFPFP tF~ r ~rF ~ r$ЈFFF^SvFPvFPPF t^"SFFDF^"&GF^"&GxF^"&Gz^"&s &_ ^"&_F^"&wF&_v˷F^"&wxPF@F^"&Go^"&wx&wo^"&wxP^"&G :p4t:n4u^"&G tu ^"&wx ^"&wxP^"&wxP^"&G :o4t@^"&G :q4u&G tu1Fֹ@@2^"&u&Gn(^"&u Fֹ@@Fֹ@@ ^"&Gn^"&wx&wn^"&wxPFֹ  ^"&Gp^"&wx&wp$sPFPhLFFs|v$PF$PPF ug^"&GFF^"&G& GtvPFPPF u5^"&GFF^"&G& GtvPFPPF u] UF^&u&wxP^&wxP^&Ltb&GZ tXFF&G^&wLFP t^&^&GL^&G^&G^&wLFPLF^&gp}^&wxP^&wx&wp^&Gwu&w-F tF^&G FF;w|^&x"tf&Owu?&HJ tQ)F tFv^&@V t4P2F t&F!v^&XV^F&^&GFtz$sPFPhLFFsmvPQF u]^&GFF^&G& GtvPQF u0^&GFF^&G& GtvPQF uF]U^&G :o4t/:q4t):p4t#:n4t:r4t:s4t:t4t :u4t ^S]U^ &G :3u?4;u8XY;u0&u)S4PPPPPrmPPPP=t&G :+4u4&G s&G &W 3i&w&;ws&G&&3NSQRR&G @H ; w3ǁFıV&t&u#&t&DŽ&DŽBřN tƇ23U(>Ƈ0U ;$t6ķ&&,&FA +;$r3,z>ULJ@Hu HU ;$t2uLJ@ LJ@UU&>>ȋz>ptx0> tf."tPt,<t<u$h tSLƇ2@ uLJ@ߋd+w";fw "t>Ft;wm3EUt2 2t'Ƈ2;$t@uLJ@ 0uS-Ƈ|UUpu31u,<t&<t".t5u < u Ƈ5 Ƈ5< tYd;r";wNpt@t9t0,ht :iuĿ&E&&&n;drXdrQჿ`u`+^"Ŀ&S&C+t&E3퉯^&FtLJFRLJ>U`u`+^^&Ŀ&S&cFtLJFUd;t&r";5 v ;drdrLJ>QtĿV&&UƇ4tRPx>p$p>XZtLJ@0uS-U>Ȱ>t*z>Ƈ|"t&Fu33UFV>]UV>]U+Zr tH]U+ZrH]U3 &L&;Wt]U^&^ &&W^&G :3t ^S,F uk^&G;s]@1V&G&G &"F~&w8&XSv^&pWPG<P^&w:\F t@^&G-F]U^&GFrF@1V^&G&G &W"FV&G-sG<PFP\F^&G-3^&w8v&XSv^&pvvFP#FNVF׉NV~u t%^&9Wu&9Or&O&WFF t ^&Gv^&@F&Z&W^&GFV^&G &W"^&G&W;Vu;FYvF&GF^&G8^&G^&G&W&+G &W"FVF&G^&uFF]U64P64P| u%65664PL u64=t=!t3]Uv&D 6^ &du33^ &G ^ S^SF3^ &G F]U^&G :M4r^&G :3t:4u^&G&G &W"^&&Wc^&G :3uX&r&G&;Gv &G&W^&G&G &W"^&&W^&G s7&G s/^&/&_!^&G :4u^&&G ]UQ^&G :3t SvYL6^&du33^&G ^SvYLF3^&G F]U^&G :3t :4t^&G&G &W"FV&9Wu&9Gw&G&W^&G&9G*s&G*FP&t@"FP(F u^&uS[DF t^&w8&S^&w&w"&w G<P^&w: \F t@^&G-^&G &W"&G4&W6^&G&G.^&F&G0Z&W2^Sv(F Yu0^&w8PGPP ^&G :3u ]U ^&G :3uC&du3 ^&du3&G ^&G-sN&G :3u/G<PFP\0^&G :3t:3t:4t f^G<PFP\F^&w:FP u ~u~u^&w8 F^&w:)F^&G F uF]U <r"^&&W&G5&G;F s Wv 55 X^F&F&GFFF;FsN ;Nv5&@FFڋF;Fr ,5v@^&Z&WS5&_[&G]Us]5&G@]U cr 5&G;FsGv5X^F&F&GFFF;Fs5&@FFF]U>5u5P4 u$>5t5&G55>5t>5t]ð]U#U$VWQ^SY_^F^OGG w 3GGG؉GGGFG F GFGFGFGFGPS|]UU^ SG PPFP[#uMG~&w$r/^ F%;u^ ^ FF;tX F ;FuX]Uv^&XV^F&t4^&u ^&?u!v^&@F^&^&GFF, F]Uv^F&9@su~t`^&G0rRv^&x6u FF?v^&@VFF~uv^&@J vF^&@Bv^&x6u ^&GTv^&@6 F^&GF^&v^&@B^&G^&GF^&GF^&G vF^&@FvF ^&@NZ&PP~uav^&pBFPLPF V ;Vu;Ft<$svFPmF^&GF^SvdF F+ FF]U]. 5]UT~&Nu+JVt^&?[t`~ F ~]Nu+JVueNI^wF{FFHNFN+NI^vp{FF+FHNFzj F FNN^^v@FFFF+ƉF~s /~mmu*F FFN؋FFF+FFcF=wmt=amu%ЉFVFFF FFFF1F=rmt=tmuKF FFFFFЉFVFFP^Sv^SvrmPF t?ov^ SPPPFP#Fv F~u u~t( 0^S^Svv^ S^Sv^SvvP]UQQ^ &dt[SFP ^& uW^ &du&G-sG<P^S\^&^ SwmPvv^& u3^ &G ^&]UQQ^ &Gd<tO<uSPL^& uI^ SFP ^& u0^ SrmPvv^& u3^ &G ^&]UQ^ &G :o4t-:q4t':p4t!:n4t:r4t:s4t:t4t :u4t~ wJ^ SP-$5 t^.e$*K$ 3?F uPvHF^ &G^ &s5&On?&w+t@ &Gn^ &Op៵&w6^ &On?&w+t@ &Gn^ &Op៵&wt &Gp~vF^ &G^ &Go$&w {&Go^ &s5&On?&w+t@ &Gn^ &Op៵&w6^ &On?&w+t@ &Gn^ &Op៵&wt &Gp^ &wxP^ &wx&wo^ &wxP^ &wx&wn^ &wxP^ &wx&wp~F^ &GqF^ &Gs^ &wF uv~F^ &Gv^ &Go$&_v˷x ^ &Go^ &wxP^ &wx&wo^ &G :o4tRF^ &G86^ &G :p4t9F^ &G6^ &G :p4t ~w8F^ &G.V^ &G :o4u G~wF^ &G/%~vF^ &G^ &G :p4u&Gt tFF^ &G :o4t&Gtt ^ &gn^ &On ^ &wxP^ &wxF$P^ &wxP^ &wx&wn'Ft (5 u ~r(5 >(5 s2^Svs#^Sv^Sv ^SvPe>(5 s25vN F25F^FFFFFFFFFFFF FFFFFFFP]U(>(5 sF uv vvP'FڈFFF FFFFFFP;]U(>(5 sFuvPFڈFFFFFP]U>(5 sF uv v ^S*8>(5 rv v ^S7<*5FFv v ^S^S]UQQ>(5 sF uv vv81>(5 rv vv8.5FFv vvP]UQ^SvFPF t Ft@]U^&&GFPF uFF^&G&GS|F u(vFPLF uF;Ft ^&G]U ^&GuFPFP tF~ u ~rF ~ s$PFPPF u%~u!vF u ^&GuF]U^ S^S]U>P5ulFFFFFPFFFFPFFP5F^FFP|FtF u)vFPLFP5^&Q5^ &]UQ^ &GF&Z&W&G&O&G &G &O&G &W"&G(&G*&G,&G-&G.&G4&W6&O0&2<(Y~ rmu3^ &G &Gd&G&G 3^ &G &Gd&G&G ^ SvvDF3^ &O ] U6^&^&G :3t OT5 R5uPPR5P/F tR5&G < r6<w2F ^&~ t^ &?uxPPP^ Sv \c>Z5u!Z5FPF u ~ rZ5X5 V5uPPV5P/F t^&GFV5&8G w ]FV5X ^Fv&DF&GF&GF&GF^&GF&GF&GF&GF&G F&8G uANsNQPPTF tX FFF ;FwD FrF9F w^ &FF^&O&@^&G^&w FA:r d5uF F t ^ &?TNtd54}F f5h5&Gf5^ &O>f5F u+Jj5ul5sd54ЉF V4^ &Gf56j5f5&f5f5^&Z&Wd5] UQ^&G &w8 F^&G:t P)FF]U4444r5~eF =wmtAN=rmt=tmuFrmF =wmt =mmt=amuFmm FP^Sv^SvvlF=uy~mmur^Sv^Sv^&w&&w$F=u ^Sv^SvPPF~u FP^Sv^SvvlFFF t^G:P(F uP^&w:FP uF FuF^&G8#;u;p5 n5uPPn5P/F tjn5& r 9FvFF1F1F1F;s ^S (F^&GZ&WvF&MX&E&uF+ƹ1&EFF&Z&U&E$<&E&FYs߸&G&G@~ tmuv^S^GPvP^GPPFF usF =rmt=tmu3^&G &G 5^&G&G~ mmu3&O FV3^&G FF^SvvF t ^SP]U~ ]Nu+JVt)F^F9Fv@^ &80r ^ v&89vz^ ^ v&0^F븡5 5uDPP5P/F uK5&G ^;v ^5X ^F&u^& u@^] Ux4Vnjޱ;u$:u ^&GZ~F =amt =wmt?5 5uPP5P/F u~5&G < r<w3^&G _^SvFPFPrF uE3^&G F^&GFs!F^F^S^SvFP3]UP <]UP <]UP <]UP <]UP <]U] UFf]UFV v]UFV v]UFV%]U vPFPPF uxFV^&&W~u~tYFuRFVFV)F^v^ SPvvFP#F u^ &?Gu&G &W^&&W] U]X[YZSP5t 5tcRQRQS$5[YZ5pCopyright 1987 Convergent Technologies, Inc. All rights reserved. PMake [sys]RealNub.sysinvalid descriptorBogus numeric parameter invalid typetss availldttss busycall gatetask gateintrpt gatetrap gatedata , expand up , expand down , read only , writablecode, nonconforming , conforming , execute only , readable , not presentSystem Image Report for Load offset: Address of first byte of free memory: First unused sg: Number of free GDT slots: Symbol file sg: Symbols not loadedGlobal Descriptor TableiSn sn base limit access #Internal error in Relocation Table Compression Map File Image Length (zeroes) Ver  Unable to append file, error .symSymbol file is bogus Unable to load symbol file.smgUnable to 7 write symbol file.img.gdtPMake PMake The Load Offset and Compress options may not be used together [!Scr]$$.Tmp=\z2Q[sys]LptConfig.Sys[KBD][VID] & $ % * - [PTR]Press NEXT PAGE or SCROLL UP to continue(Press NEXT PAGE to continue>YS]Config.sys       ||VNVF11.27 8 8 [Kbd][Vid][Lpt]S[Nul][SysIn][SysOut]>,6LLH$LLH,LLHa6H$H$LLZH $L  6 $|= DD6 [KBD][VID]]>5 5 LIBRARY: ctos.lib VERSION: 11.2 (Wednesday September 23, 1987, 15:20) COPYRIGHT 1980, 1987 CONVERGENT TECHNOLOGIES, INC. ALL RIGHTS RESERVED THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE SOLELY FOR THE OPERATION OF A DESIGNATED COMPUTER FOR A PARTICULAR PURPOSE, AND MAY NOT BE COPIED OR OTHERWISE USED WITHOUT THE PRIOR WRITTEN CONSENT OF CONVERGENT TECHNOLOGIES, INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, INCLUDING ITS SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT TECHNOLOGIES. VERSION: 11.2 (Wednesday September 23, 1987, 15:24) orServerPSC_READSTATUSC2SC_ACQUIREBYTESTREAMC3,SC_WRITEBYTESTREAMPARAMETERC-DCheckPointBsSysOut READBSRECORD IsrExtInt] SetBsLfaAsyncDVALIDATEENDOFBUFFER[DCHECKWRITEASYNC\ WAITFORSIOedIN_READSTATUSC]OpenByteStreamKFlushBufferVid INITCOMMLINE_ FHRUNFILELDIDT)9  ; ; 11.1 SamGen.mdf uses new fixed tag logic ; Compatible with 11.1 Ctos.lib and CTOS/VM 2.1 ; ;Modified: JJK/DMO 7/12/84 Add Gpam. Make semi-readable. ; PKD/DMO 12/18/84 Add PUBLIC pProcRoutine. ; DC 03/06/85 Make SetImageMode generic. ; DR 03/06/85 Add fSameLooks to BsVid ; AM 01/22/87 Introduce new tags management ; AM 04/06/87 A new variable is used, LinkWithSam, if set ; to 0FFh SAM Comm and printer not linked with ; application. ; 10/17/87 JM use tagProcs for sysin,sysout instead of tagProc. NTag_tagDiskRead equ 0 NTag_tagDiskWrite equ 1 NTag_tagDiskModify equ 2 NTag_tagKbdRead equ 3 NTag_tagVideoWrite equ 4 NTag_tagLptWrite equ 5 NTag_tagPtrWrite equ 6 NTag_tagNul equ 7 NTag_tagCommRead equ 8 NTag_tagCommWrite equ 9 NTag_tagCommModify equ 10 NTag_tagSplWrite equ 11 NTag_tagSysIn equ 12 NTag_tagSysOut equ 13 NTag_tagGpamWrite equ 14 NTag_tagCardC equ 15 NTag_tagCardI equ 16 NTag_tag8251Read equ 17 NTag_tag8251Write equ 18 NTag_tag8251Modify equ 19 NTag_tagPtr8251Write equ 20 NTag_tagQicRead equ 21 NTag_tagQicWrite  equ 22 NTag_tagTapeRead equ 23 NTag_tagTapeWrite equ 24 NTag_tagLptRead equ 25 NTag_tagLptModify equ 26 NTag_taglast equ 0ffh %*DEFINE (Init) ( PUBLIC OpenTable,sTagProcs,tagTable,tagLast,deviceLast PUBLIC fDiskBsDef,DiskBsOpen,fSplBsDef,SplBsOpen,fGpamBsDef,GpamBsOpen DGROUP GROUP DATA %SET(DevNum,0) %SET(tag,0) %SET(segFlag,0) %SET(DiskFlag,0) %SET(SplFlag,0) %SET(GpamFlag,0) %SET(DevDepFlag,0) %SET(tagVideoWriteVal,0FFH) %SET(tagKbdReadVal,0FFH) %DEFINE (OpenProcDisk) (0) %DEFINE (OpenProcSpl) (0) %DEFINE (OpenProcGpam) (0) DATA SEGMENT PUBLIC 'DATA' xDisk LABEL BYTE ySpl LABEL BYTE zGpam LABEL BYTE ) %*DEFINE (DeviceOpen(DeviceName,OpenProc)) ( %IF (NOT(%ISDEF(%OpenProc))) THEN ( ??SEG SEGMENT EXTRN %OpenProc:FAR ??SEG ENDS ) FI %DEFINE(DevName_Gpam)(z%SUBSTR(%DeviceName,2,%LEN(%DeviceName)-2)) %DEFINE(DevName_Disk)(x%SUBSTR(%DeviceName,2,%LEN(%DeviceName)-2)) %DEFINE(DevName_Spl) (y%SUBSTR(%DeviceName,2,%LEN(%DeviceName)-2)) %IF (NOT(%ISDEF(%DevName_Disk))) THEN ( %IF (NOT(%ISDEF(%DevName_Spl))) THEN ( %IF (NOT(%ISDEF(%DevName_Gpam))) THEN ( %IF (%DevNum EQ 0) THEN (OpenTable LABEL BYTE) FI %SET(DevNum, %DevNum+1) DB %LEN(%DeviceName) DB '%DeviceName' DD %OpenProc ) ELSE ( %DEFINE (OpenProcGpam) (%OpenProc) %SET(GpamFlag,0FFh) ) FI ) ELSE ( %DEFINE (OpenProcSpl) (%OpenProc) %SET(SplFlag,0FFH) ) FI ) ELSE ( %DEFINE (OpenProcDisk) (%OpenProc) %SET(DiskFlag,0FFH) ) FI ) %' "tagProcs" - used only with 10.0 and later SamGens. %' Earlier SamGens used "tagProc", which does not include SetImageMode. %' %*DEFINE (tagProcs(tagName,FillProc,FlushProc,CheckPointProc,ReleaseProc,SetImageModeProc)) ( %IF (%tag EQ 0) THEN (  %DeviceOpen([SysIn],OpenByteStreamSysIn) %DeviceOpen([SysOut],OpenByteStreamSysOut) sTagProcs DW 21 tagTable LABEL DWORD) FI PUBLIC %tagName %tagName DB NTag_%tagName ;NTag; %IF (%EQS(%tagName,tagVideoWrite)) THEN(  %SET(tagVideoWriteVal,NTag_%tagName)) FI %IF (%EQS(%tagName,tagKbdRead)) THEN( %SET(tagKbdReadVal,NTag_%tagName)) FI %SET(tag, %tag+1) %IF (NOT(%ISDEF(%FillProc))) THEN( ??SEG SEGMENT EXTRN %FillProc:FAR  ??SEG ENDS) FI DD %FillProc %IF (NOT(%ISDEF(%FlushProc))) THEN( ??SEG SEGMENT EXTRN %FlushProc:FAR ??SEG ENDS) FI DD %FlushProc %IF (NOT(%ISDEF(%CheckPointProc))) THEN( ??SEG SEGMENT EXTRN %CheckPointProc:FAR ??SEG ENDS) FI DD %CheckPointProc %IF (NOT(%ISDEF(%ReleaseProc))) THEN( ??SEG SEGMENT EXTRN %ReleaseProc:FAR ??SEG ENDS) FI DD %ReleaseProc %IF (NOT(%ISDEF(%SetImageModeProc))) THEN( ??SEG SEGMENT 9  EXTRN %SetImageModeProc:FAR ??SEG ENDS) FI DD %SetImageModeProc) %' "tagProc" - used only with prior-to-10.0 format Samgens. %' (Included so such Samgens can still be compiled and used with 10.0 %' CTOS.) %' 10.0 and later SamGens use "tagProcs", a "tagProc" replacement which %' includes SetImageMode. %' %*DEFINE (tagProc(tagName,FillProc,FlushProc,CheckPointProc,ReleaseProc)) ( %IF (%tag EQ 0) THEN ( %DeviceOpen([SysIn],OpenByteStreamSysIn) %DeviceOpen([SysOut],OpenByteStreamSysOut) sTagProcs DW 17 tagTable LABEL DWORD) FI PUBLIC %tagName %tagName DB NTag_%tagName ;NTag; %IF (%EQS(%tagName,tagVideoWrite)) THEN( %SET(tagVideoWriteVal,NTag_%tagName)) FI %IF (%EQS(%tagName,tagKbdRead)) THEN( %SET(tagKbdReadVal,NTag_%tagName)) FI %SET(tag, %tag+1) %IF (NOT(%ISDEF(%FillProc))) THEN( ??SEG SEGMENT EXTRN %FillProc:FAR ??SEG ENDS) FI DD %FillProc %IF (NOT(%ISDEF(%FlushProc))) THEN( ??SEG SEGMENT EXTRN %FlushProc:FAR ??SEG ENDS) FI DD %FlushProc %IF (NOT(%ISDEF(%CheckPointProc))) THEN( ??SEG SEGMENT EXTRN %CheckPointProc:FAR ??SEG ENDS) FI DD %CheckPointProc %IF (NOT(%ISDEF(%ReleaseProc))) THEN( ??SEG SEGMENT EXTRN %ReleaseProc:FAR ??SEG ENDS) FI DD %ReleaseProc) %*DEFINE (DevDepProc(ProcName,ProcRoutine)) ( %IF (%DevDepFlag EQ 0) THEN ( %tagProcs(tagSysIn,FillBufferSysIn,FlushBufIllegal,ChkptNop,ReleaseEasy,SetImageModeIllegal) %tagProcs(tagSysOut,FillBufIllegal,FlushBufferSysOut,CheckPointBsSysOut,ReleaseEasy,SetImageModeIllegal) tagLast DB NTag_tagLast ;NTag; DATA ENDS SAMGEN SEGMENT PUBLIC 'CODE' xQueryVidBs LABEL FAR yQueryBsVid LABEL FAR SAMGEN ENDS %SET(DevDepFlag,1)) FI PUBLIC p%ProcRoutine DATA SEGMENT PUBLIC 'DATA' p%ProcRoutine DD %ProcRoutine DATA ENDS SAMGEN SEGMENT PUBLIC 'CODE' ASSUME CS:SAMGEN ASSUME DS:DGROUP %IF (%ISDEF(x%ProcName)) THEN ( QueryBsVid LABEL FAR PUBLIC QueryBsVid) FI %IF (%ISDEF(y%ProcName)) THEN ( QueryVidBs LABEL FAR PUBLIC QueryVidBs) FI ??SEG SEGMENT EXTRN %ProcRoutine:FAR ??SEG ENDS PUBLIC %ProcName %ProcName PROC FAR PUSH BP MOV BP,SP POP BP JMP DWORD PTR p%ProcRoutine RET %ProcName ENDP SAMGEN ENDS) %*DEFINE (CheckDef(tagCT)) ( %IF (NOT(%ISDEF(%tagCT))) THEN( %tagCT DB Ntag_%tagCT ;NTAG; PUBLIC %tagCT %IF (%EQS(%tagCT,tagVideoWrite)) THEN( %SET(tagVideoWriteVal,%tag)) FI %IF (%EQS(%tagCT,tagKbdRead)) THEN( %SET(tagKbdReadVal,%tag)) FI %SET(tag,%tag+1)) FI) %*DEFINE (Final) ( %IF (%DevDepFlag NE 0) THEN ( DATA SEGMENT PUBLIC 'DATA') ELSE (%tagProcs(tagSysIn,FillBufferSysIn,FlushBufIllegal,ChkptNop,ReleaseEasy,SetImageModeIllegal) %tagProcs(tagSysOut,FillBufIllegal,FlushBufferSysOut,CheckPointBsSysOut,ReleaseEasy,SetImageModeIllegal) tagLast DB NTag_tagLast  ;NTag;) FI %SET(tag,%tag+1) deviceLast DB %DevNum fDiskBsDef DB %DiskFlag DiskBsOpen DD %OpenProcDisk fSplBsDef DB %SplFlag SplBsOpen DD %OpenProcSpl fGpamBsDef DB %GpamFlag GpamBsOpen DD %OpenProcGpam %CheckDef(tagDiskRead) %CheckDef(tagDiskWrite) %CheckDef(tagDiskModify) %CheckDef(tagKbdRead) %CheckDef(tagVideoWrite) %CheckDef(tagLptWrite) %CheckDef(tagPtrWrite) %CheckDef(tagNul) %CheckDef(tagCommRead) %CheckDef(tagCommWrite) %CheckDef(tagCommModify) %CheckDef(tag8251Read) %CheckDef(tag8251Write) %CheckDef(tag8251Modify) %CheckDef(tagPtr8251Write) %CheckDef(tagSplWrite) %CheckDef(tagGpamWrite) %CheckDef(tagLptRead) %CheckDef(tagLptModify) PUBLIC bsVid EVEN bsVid LABEL DWORD DD 0  DW 0 DW 0 DW 0 DB 0 DB 0 DB 0 DB %tagVideoWriteVal DB 0 DB 0 DB 0 :  DB 0 DB 0 DB 0 DB 0 DB 0 DB 0 DB 0 DB 0 DB 0 DB 0 DB 0 PUBLIC bsKbd EVEN bsKbd LABEL DWORD DD 0 DW 0 DW 0 DW 0 DB 0FFH DB 0 DB 0 DB %tagKbdReadVal DB  0 DB 0 DB 0 PUBLIC pPrepWriteMMD PUBLIC pPrepReadMMD pPrepWriteMMD DD ? pPrepReadMMD DD ? %*DEFINE (OsSubLab ( n, "pName" )) (SS%EVAL(%N/8) SEGMENT AT (0FFFFh-(16*(%N/8))) ORG (230h+(100h*(%N/8))+2*%N-10h*(%N/8)) PUBLIC %pName %pName EQU THIS BYTE SS%EVAL(%N/8) ENDS ) %*DEFINE (Same( "original" , "copy" ))( PUBLIC %copy %copy EQU %original ) PUBLIC FLink %IF (%*ISDEF(%LinkWithSam)) THEN ( Flink DB 0 %OsSubLab(541, "IN_OpenByteStreamLpt") ;541 %OsSubLab(542, "IN_OpenByteStreamSpecialC") ;542 %OsSubLab(543, "IN_FlushBufferLpt") ;543 %OsSubLab(544, "IN_FlushBufferC") ;544 %OsSubLab(545, "IN_CheckPointBsLpt") ;545 %OsSubLab(546, "IN_CheckpointBsAsyncC") ;546 %OsSubLab(547, "IN_ReleaseByteStreamLpt") ;547 %OsSubLab(548, "IN_ReleaseByteStreamC") ;548 %OsSubLab(549, "IN_SetImageModeLpt") ;549 %OsSubLab(550, "IN_SetImageModeC") ;550 %OsSubLab(551, "IN_CheckPointPhy") ;551 %OsSubLab(552, "IN_QueryPrtStatus") ;552 %OsSubLab(553, "IN_ReadByteStreamParameterLpt") ;553 %OsSubLab(554, "IN_WriteByteStreamParameterLpt") ;554 %OsSubLab(555, "IN_FlushbufferAsyncC") ;555 %OsSubLab(556, "IN_ReadByteStreamParameterC") ;556 %OsSubLab(557, "IN_WriteByteStreamParameterC") ;557 %OsSubLab(558, "IN_CheckForOperatorRestartC") ;558 %OsSubLab(559, "IN_DiscardOutputBsc") ;559 %OsSubLab(560, "IN_FillBufferAsyncC") ;560 %OsSubLab(561, "IN_DiscardinputBsc") ;561 %OsSubLab(562, "IN_ReadStatusc") ;562 %OsSubLab(563, "IN_AcquireByteStreamC") ;563 %OsSubLab(564, "IN_WriteStatusc") ;564 %OsSubLab(565, "IN_SendBreakC") ;565 %OsSubLab(566, "IN_CheckPointBsc") ;566 %OsSubLab(567, "IN_FillBufferLpt") ;567 ) ELSE ( Flink DB 0FFh ) FI DATA ENDS END) %IF (NOT(%ISDEF(%ReleaseProc))) THEN( ??SEG SEGMENT EXTRN %ReleaseProc:FAR ??SEG ENDS) FI DD %ReleaseProc) %*DEFINE (DevDepProc(ProcName,ProcRoutine)) ( %IF (%DevDepFlag EQ 0) THEN ( %tagProcs(tagSysIn,FillBufferSysIn,FlushBufIllegal,ChkptNop,ReleaseEas;***************************************************************************** ; FILE SAMGENALL.ASM -- * ; * ; COPYRIGHT 1981, 1986 CONVERGENT TECHNOLOGIES, INC. ALL RIGHTS RESERVED * ; * ; THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE SOLELY FOR * ; THE OPERATION OF A DESIGNATED COMPUTER FOR A PARTICULAR PURPOSE, AND MAY * ; NOT BE COPIED OR OTHERWISE USED WITHOUT THE PRIOR WRITTEN CONSENT OF * ; CONVERGENT TECHNOLOGIES, INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, * ; INCLUDING ITS SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT * ; TECHNOLOGIES. * ; * ;  * ; The file "SamGen.Mdf" contains all of the macro definitions for the macros * ; which are contained in this file, "SamGenAll.Asm". The Sequential Access * ; Method (SAM) implementation contained in CTOS.Lib may be reconfigured by * ; creating a tailored SAMGEN module. First, the SAMGEN.ASM source file must * ; be edited to reflect the new configuration. After editing, the SAMGEN.ASM * ; file must be assembled and then the resulting object file, SAMGEN.OBJ, must* ; be included in the list of object:  modules at link time. Alternately, if the* ; new SAM configuration is to be the default SAM configuration, the Librarian* ; utility may be used to overwrite the SAMGEN module contained in CTOS.Lib. * ; The default SAM configuration contained in CTOS.Lib includes disk, * ; keyboard, video, parallel printer, null, and spooler byte streams. * ; In addition, the user may wish to include other byte streams, e.g. * ; communication or serial printer byte streams.  * ;******************************************************************************; $INCLUDE ([Sys]samgen.mdf) %Init $EJECT ;***************************************************************************** ; The "DeviceOpen(deviceName,OpenProc)" macro defines an OpenProc routine to * ; be called when OpenByteStream is called with the deviceName specified. To * ; add an additional byte stream to the SAM configuration specified in this * ; file, add a DeviceOpen macro to this section, defining the new deviceName * ; and the corresponding OpenProc. To omit a byte stream, delete from this * ; section the DeviceOpen macro associated with the byte stream to be omitted.* ; To substitute a new byte stream for an existing byte stream, replace the * ; OpenProc parameter in the appropriate DeviceOpen macro with the new * ; OpenProc. To add, omit, or substitute byte streams also requires editing * ; the following sections of macros. Note that the deviceName "[Disk]" is a * ; psuedo name for disk byte streams. DO NOT call OpenByteStream with the * ; device spec "[Disk]". * ; * ; To add a user written byte stream for device Foo add the following line to * ; this section * ; * %' %DeviceOpen([Foo],OpenByteStreamFoo)  * ; * ; To omit disk and spooler byte streams delete the following lines from this * ; section * ; * %' %DeviceOpen([Spl],OpenByteStreamSpl) * %' %DeviceOpen([Disk],OpenByteStreamAD) * ;  * ; To substitute synchronous byte streams for asynchronous byte streams * ; replace * ;  * %' %DeviceOpen([Disk],OpenByteStreamAD) * ; * ; with  * ; * %' %DeviceOpen([Disk],OpenByteStreamSD) * ; * ; If you know that you are going to use the 8251 chips on the MegaFrame, * ; then replace * ; * %' %DeviceOpen([Comm],OpenByteStreamC) * %' %DeviceOpen([Ptr],OpenByteStreamPtr) * ; * ; with  * ; * %' %DeviceOpen([Comm],OpenByteStream_8251) * %' %DeviceOpen([Ptr],OpenByteStreamPtr_8251) ;  * ; * ; And delete the DeviceOpen for [8251] * ;  * ;***************************************************************************** ; %DeviceOpen([Kbd],OpenByteStreamK) %DeviceOpen([Vid],OpenByteStreamVid) %DeviceOpen([Lpt],OpenByteStreamLpt) %DeviceOpen([Ptr],OpenByteStreamPtr) %DeviceOpen([Nul],OpenByteStreamN) %DeviceOpen([Comm],OpenByteStreamC) %DeviceOpen([8251],OpenByteStream_8251) %DeviceOpen([Spl],OpenByteStreamSpl) %DeviceOpen([Disk],OpenByteStreamAD) %DeviceOpen([Gpam],OpenByteStreamGp) ; To add 1/2 inch Tape or Qic bytestreams, remove the leading percentsign-quote ; from the following lines: ; %' %DeviceOpen([Qic],OpenByteStreamQic) %' %DeviceOpen([Tape],OpenByteStreamTape) $EJECT ;***************************************************************************** ; The "tagProcs(tagName,FillBufferProc,FlushBufferProc,CheckPointProc, * ; ReleaseProc,SetImageModeProc)" macro declares five * ; device dependent procedures to be called when the various device * ; independent procedures (ReadByte and ReadBsRecord, Writebyte and * ; WriteBsRecord, CheckPointBs and ReleaseByteStream, and * ; SetImageMode) are called. * ;  * ; Note that "tagProcs" replaces an earlier macro called "tagProc", * ; in 10.0 CTOS and earlier. "tagProc" is still defined in SamGen.mdf * ; to avoid breaking existing user-customized SamGen files. Be careful * ; to use "tagProcs" exclusively in all new SamGen files, and never * ; to mix these two macros in a single file! * ; * ; The tagName parameter is declared as a PUBLIC BYTE and is given a * ; value. This value is used to route the device independent calls to * ; the apppropriate device dependent routines. The appropriate tag * ; should be declared as an EXTERNAL BYTE within the OpenProc procedure * ; and the tag byte of the BSWA should be assigned this tag value. * ; * ; To add an additional byte stream to the SAM configuration specified * ; in this file, add to this section a tagProcs macro for each access * ; mode associated with the new byte stream, declaring the five device * ; dependent procedures to be used when a device independent procedure * ; (ReadByte and ReadBsRecord, Writebyte and WriteBsRecord, CheckPointBs, * ; ReleaseByteStream, and SetImageMode) is called. In some cases not * ; all five entries will apply. For example, if SetImageMode does * ; not apply, use the name SetImageModeIllegal. To omit a byte stream, * ; delete from this section all the tagProcs macros associated with the * ; byte stream to be deleted. To substitute a new byte stream for an * ; existing byte stream, replace the five device dependent procedures * ; declared in the tagProcs macros with the new procedure names. To add, * ; omit, or substitute byte streams also requires editing the previous * ; section of macros and the following section of macros.  * ; * ; To add a byte stream for device Foo, which can be opened with mode * ; read or mode write, add the following lines to this section: * ; * %' %tagProcs(tagFooRead,FillBufferFoo,FlushBufIllegal,CheckPointBsFoo,ReleaseByteStreamFoo,SetImageModeFoo) %' %tagProcs(tagFooWrite,FillBufIllegal,FlushBufferFoo,Chec; kPointBsFoo,ReleaseByteStreamFoo,SetImageModeFoo) ; ; To omit disk and spooler byte streams delete the following lines ; from this section: ; %' %tagProcs(tagDiskRead,FillBufferAD,FlushBufIllegal,CheckPointBsAD,ReleaseByteStreamAD,SetImageModeIllegal) %' %tagProcs(tagDiskWrite,FillBufIllegal,FlushBufferAD,CheckPointBsAD,ReleaseByteStreamAD,SetImageModeIllegal) %' %tagProcs(tagDiskModify,FillBufferAD,FlushBufferAD,CheckPointBsAD,ReleaseByteStreamAD,SetImageModeIllegal) %' %tagProcs(tagSplWrite,FillBufIllegal,FlushBufferAD,CheckpointBsAD,ReleaseByteStreamSpl,SetImageModeSpl) ; ; To substitute synchronous disk byte streams for asynchronous disk byte ; streams replace: ; %' %tagProcs(tagDiskRead,FillBufferAD,FlushBufIllegal,CheckPointBsAD,ReleaseByteStreamAD,SetImageModeIllegal) %' %tagProcs(tagDiskWrite,FillBufIllegal,FlushBufferAD,CheckPointBsAD,ReleaseByteStreamAD,SetImageModeIllegal) %' %tagProcs(tagDiskModify,FillBufferAD,FlushBufferAD,CheckPointBsAD,ReleaseByteStreamAD,SetImageModeIllegal) %' %tagProcs(tagSplWrite,FillBufIllegal,FlushBufferAD,CheckpointBsAD,ReleaseByteStreamSpl,SetImageModeSpl) %' %tagProcs(tagGpamWrite,FillBufIllegal,FlushBufferGp,CheckPointBsGp,ReleaseByteStreamGp,SetImageModeGp) ; ; with ; %' %tagProcs(tagDiskRead,FillBufferSD,FlushBufIllegal,CheckPointBsSD,ReleaseByteStreamSD,SetImageModeIllegal) %' %tagProcs(tagDiskWrite,FillBufIllegal,FlushBufferSD,CheckPointBsSD,ReleaseByteStreamSD,SetImageModeIllegal) %' %tagProcs(tagDiskModify,FillBufferSD,FlushBufferSD,CheckPointBsSD,ReleaseByteStreamSD,SetImageModeIllegal) %' %tagProcs(tagSplWrite,FillBufIllegal,FlushBufferSD,CheckpointBsSD,ReleaseByteStreamSpl,SetImageModeSpl) ; ;***************************************************************************** ; %tagProcs(tagDiskRead,FillBufferAD,FlushBufIllegal,CheckPointBsAD,ReleaseByteStreamAD,SetImageModeIllegal) %tagProcs(tagDiskWrite,FillBufIllegal,FlushBufferAD,CheckPointBsAD,ReleaseByteStreamAD,SetImageModeIllegal) %tagProcs(tagDiskModify,FillBufferAD,FlushBufferAD,CheckPointBsAD,ReleaseByteStreamAD,SetImageModeIllegal) %tagProcs(tagKbdRead,FillBufferK,FlushBufIllegal,ChkptNop,ReleaseEasy,SetImageModeIllegal) %tagProcs(tagVideoWrite,FillBufIllegal,FlushBufferVid,ChkptNop,ReleaseEasy,SetImageModeIllegal) %tagProcs(tagLptWrite,FillBufIllegal,FlushBufferLpt,CheckPointBsLpt,ReleaseByteStreamLpt,SetImageModeLpt) %tagProcs(tagLptRead,FillBufferLpt,FlushBufIllegal,CheckPointBsLpt,ReleaseByteStreamLpt,SetImageModeIllegal) %tagProcs(tagLptModify,FillBufferLpt,FlushBufferLpt,CheckPointBsLpt,ReleaseByteStreamLpt,SetImageModeLpt) %tagProcs(tagPtrWrite,FillBufIllegal,FlushBufferC,CheckPointBsC,ReleaseByteStreamC,SetImageModeC) %tagProcs(tagNul,FillBufferN,FlushBufferN,ChkptNop,ReleaseEasy,SetImageModeIllegal) %tagProcs(tagCommRead,FillBufferC,FlushBufIllegal,CheckPointBsC,ReleaseByteStreamC,SetImageModeC) %tagProcs(tagCommWrite,FillBufIllegal,FlushBufferC,CheckPointBsC,ReleaseByteStreamC,SetImageModeC) %tagProcs(tagCommModify,FillBufferC,FlushBufferC,CheckPointBsC,ReleaseByteStreamC,SetImageModeC) %tagProcs(tag8251Read,FillBuffer_8251,FlushBufIllegal,CheckPointBs_8251,ReleaseByteStream_8251,SetImageModeC) %tagProcs(tag8251Write,FillBufIllegal,FlushBuffer_8251,CheckPointBs_8251,ReleaseByteStream_8251,SetImageModeC) %tagProcs(tag8251Modify,FillBuffer_8251,FlushBuffer_8251,CheckPointBs_8251,ReleaseByteStream_8251,SetImageModeC) %tagProcs(tagPtr8251Write,FillBufIllegal,FlushBuffer_8251,CheckPointBs_8251,ReleaseByteStream_8251,SetImageModeC) %tagProcs(tagSplWrite,FillBufIllegal,FlushBufferAD,CheckPointBsAD,ReleaseByteStreamSpl,SetImageModeSpl) %tagProcs(tagGpamWrite,FillBufIllegal,FlushBufferGp,CheckPointBsGp,ReleaseByteStreamGp,SetImageModeGP) ; To add 1/2 inch Tape or Qic bytestreams, remove the leading percentsign-quote ; from the following lines: ; %' %tagProcs(tagQicRead,FillBufferQic,FlushBufIllegal,ChkptNop,ReleaseByteStreamQic,SetImageModeIllegal) %' %tagProcs(tagQicWrite,FillBufIllegal,FlushBufferQic,chkptNop,ReleaseBytestreamQic,SetImageModeIlle< gal) %' %tagProcs(tagTapeRead,FillBufferTape,FlushBufIllegal,ChkptNop,ReleaseByteStreamTape,SetImageModeIllegal) %' %tagProcs(tagTapeWrite,FillBufIllegal,FlushBufferTape,chkptNop,ReleaseBytestreamTape,SetImageModeIllegal) ; $EJECT ;***************************************************************************** ; The "DevDepProc(devDepCall,devDepProc)" macro declares a routine devDepProc* ; to be called when the device dependent routine devDepCall is called. This * ; macros allows for substitution of alternate routines to handle any device * ; dependent byte stream routines defined (such as QueryVidBs, GetBsLfa, * ; SetBsLfa, or SetImageMode) or the omission of any device dependent routines* ; not needed.  * ; * ; To substitue synchronous disk byte stream implementations of the device * ; dependent routines GetBsLfa and SetBsLfa for the asynchronous  * ; implementations, replace * ; * %' %DevDepProc(GetBsLfa,GetBsLfaAsync) * %' %DevDepProc(SetBsLfa,SetBsLfaAsync) * ; * ; with * ;  * %' %DevDepProc(GetBsLfa,GetBsLfaSync) * %' %DevDepProc(SetBsLfa,SetBsLfaSync) * ;  * ; To omit the device dependent routine QueryVidBs delete the following * ; line * ;  * %' %DevDepProc(QueryVidBs,QueryVideoBs) * ; * ;***************************************************************************** ; %DevDepProc(QueryVidBs,QueryVideoBs) %DevDepProc(GetBsLfa,GetBsLfaAsync) %DevDepProc(SetBsLfa,SetBsLfaAsync) %DevDepProc(SetImageMode,SetImageModeBrn) %Final ,FlushBufferSD,CheckPointBsSD,ReleaseByteStreamSD,SetImageModeIllegal) %' %tagProcs(tagDiskModify,Fill samgenall CTAsm 11.3*??SEG??SEGDATADATASAMGENCODEDGROUPhhth$SpSetImageModeBrn)tagTablec tagPtrWrite pGetBsLfaAsync! tagSplWriteSetBsLfaa tagLptRead tagGpamWritetagNul  sTagProcsa fGpamBsDef8 tag8251WritetagLast- SetImageModeGetBsLfa QueryBsVid/ pPrepReadMMDo tagDiskReadc tagSysOut QueryVidBs DiskBsOpen/tagPtr8251Write pQueryVideoBs tagCommModify_ tagKbdRead tagLptModify tagVideoWritebsKbdZ tagLptWrite pPrepWriteMMDk tagCommRead5bsVid> deviceLast-tagSysIn tag8251Readt fSplBsDef3 tagCommWriteJ SplBsOpen4 OpenTableFLinks fDiskBsDef. tagDiskModify tagDiskWritex GpamBsOpen9pSetBsLfaAsync% tag8251Modify}ReleaseByteStreamLpt CheckPointBsCOpenByteStreamGpSetImageModeIllegalOpenByteStreamCFlushBufferLptFlushBufferVid FillBufferNFlushBuffer_8251ReleaseByteStream_8251OpenByteStreamSysOutFlushBufIllegal FlushBufferGp FlushBufferNFillBufIllegal ReleaseEasyCheckPointBsLptSetImageModeLptCheckPointBsSysOutFillBuffer_8251 FlushBufferADReleaseByteStreamCOpenByteStreamKReleaseByteStreamSplReleaseByteStreamADOpenByteStreamSplOpenByteStreamNCheckPointBsADOpenByteStreamADCheckPointBs_8251FillBufferSysIn FillBufferCSetImageModeBrnFlushBufferSysOut QueryVideoBsSetImageModeGP GetBsLfaAsync FillBufferK FillBufferLpt SetImageModeCOpenByteStreamVidRelease< ByteStreamGp FlushBufferC FillBufferADOpenByteStreamLptOpenByteStreamSysInChkptNopCheckPointBsGpSetImageModeSplOpenByteStreamPtr SetBsLfaAsyncOpenByteStream_8251[Kbd] VV [Vid] V)V)[Lpt] V-V-[Ptr] V2V2([Nul] VV2[Comm] V V=[8251] V4 V4H[SysIn] V. V.T[SysOut] V V d V,V,h V V l VVp VV t VVy VV*}IVVVVV V VVV,V,VVVVVV!V#V V&V&V V  V/V/VVVV V V)VVV/V/V V VVVV VV VV VV  VV2YV'V'V V V V VVVVV'V'VVVV!V#V%V'V*V,V V+V+ VV VV  V(V(! VV%!VVV/V/V V VVC6 yV V V V V V VVV(V(VVV+V+VV!V#V%V('V(*V ,V .V+0V+2V4V6V8V:V(]D tt0Q\;dCopyright 1987 Convergent Technologies, Inc. All rights reserved.Ver 11.0 Linker 11.0^x&@MgtQ_m"'O}HNfB f( 2 < F R _ f j n r v {                                 #'+/37;BGp5#7Q77_77V77 7n7}}7}}}7:XTY }vAvvvvkvv/vD^Sfl(c 6< 6,}0}=3L//0`/@p/p/@_p?#O%O &p'`/134459: `;HIL?NON0O?Ok'()E" +* /cfAfw]wwww= P2)Or}}d}}}}l}}B ,vAv]vlvU@L76666l6666X666#6+6P66^6 6 6$ 6w 6 6 6M 6q 6 6 6 6L 6< 66&jKLQLspscftw$7}v(6Ljns99U vPFPF u$~tFFF&:Xt:Yu]UPPFPFPP^Sv ]U찈P@PPPP6VPP ]UQ^^G_FF t)F 10^vPF1FNЋ]UPPFP FPP^SvPFPFPP^SvF~u~vQF@FPFPFFFFPP^SvFPFPn^뢚 ]U FVFVFFV u9Vu9FrFbF)FV#sFhF`FVFFFPFPPFPPFFFPPBPPCPP FN]UPDPPEPPPFPlFPP^SvFFPPFPP ]UFFF~u*vvF u~u FFׁFЋ]U찊PGPP ]UF]UQQFFĢPPPFPFF~t F]U卿vNFF]UQƇC6PPSFP3P]UvP^S tPP^SP]UdPPFPPFPFPvPPrmPPvPFPPPv PPFPvPPrmPPPPNv~FPPFPF t#vzHFF^FF6PFPvPPwmPPPPFV]U츴PP6PP]UQQFVPRvvvv-t ]UF>tP ,]U~u]UFPFP"V^&?{t@&?[uP6:t. FPQSVSVQ^[Y=Xt ],N~] t&<@^&G ]UQF =wmt =mmt"6wmP'BD^&G ]U^&G :t ^&BSP(]UQ^&^ &&W^&G :t >S)]U^&G :uBSv* ]UQF :r10^&Fr^&0FFF 10^v&F@]U vvFPF^SvP}F^&:F@F^PvPXFF^&:F@F^PvP0FF]U^&<{t<[tFFF^&^&?{u>}N u+JV s\tWNAv~^YF@^&^v&48Z ^& ~]N u+JVuF HN;v9@N +^vp^~&=9^YF@N +^&CFPF u^&O@wA^~&=9^Y^&G@^&^v&48e^&v&4^P^&wg&we^&^v&48g^&]U ^vFF^&F^&G^vNFY^&Gw^ &Gj^&GyF^&^vNFYFPF uQ^&G@^&^&O@wA^^Y^&Ƈ^&Ƈ^PF uI^ &k]u+JBV^ GkPRPPP^S|PkPP] U^&G F =wmt =amtI~]Nu+JV^SBRPPFPQ؍GPQF!t=uF~^&Gi^GePF^kvNFYF^&^S^Sv^SFPfF uF~u;^SvRPPRPF=u^v&xF^&Gi뾋F u9^SFPvRQWv PvF u ^&G ]U ^&G :t (^&G ^S\F u^&FF^SGkPF&P^SFPpF = u^&Oit^v8x^&GiF^S^SvuF tM^G8P^SvRPPmmPF u"^&w8F t^&w8 FF]U^&G :t F^&Gj]UF~SF =wmt=amuF~]Nu+JV~&Nu+JVu F@;Fs F@;Ft ~s }~u^&GM&_O^&GL&^v@^&GMZ&WOF@N+^&OL^S^Sv^Svv ^SvF u |^&G ]U^&^&G :|t ^S^ Sv ^S<]U^&G :|t ^Svd]U^&G :|t ^S+ ]UQ^ &G :|t m~ wA^ .^ &G=)^ &G.^ &G/!^ &GB^ &GDFF^&] U^ &G :|t l~ wH^.(ffffBfNZfffkwF^ &G=3F^ &G.'F^ &G/F^ &GB F^ &GD]U^&G :|t F^&G1]Up~F =amt=wmt=rmt=tmt =mmt&^&G F^&Z&WF^&G]U^&^&G :t ^&GN ^&]U^&^ &&W^&G :t ]UF 1F1FF1Vu FFmFm1FF1VF1F ;vN^㋇~;FvNFF^&F 1^&W^&8Os&^F+~@^&GF1^&WF <1^&WF 1F1^&WF 1º PF1Y^&G]UQ^&G :=tSv^ S^Si<^SFP9F u'^Sv^ S^SiF=^&G F]U^&G :v^& 6$Vnjޱ;u$:u34r,$PPPRPQrmWRPQF u^&G :u >FF^&G s<&G s4~u ^&"^&G ^G ^ &Z&W^&}^&G&;Gr$Sv^ S^S.F uX^&?uL^&G&O+;FsFF^&^&FFv&t^^ &Z&W^F&G]U FFN F;vB~u<^S+QFPFPF^ v8vNFYFF봋F^&F]UQ^&G :=tS^ Sv ^S<^SFP5F u'^S^ Sv ^SF=^&G F]U ^&G :v^& !Vnjޱ;u$:u3"r,PPPRPQwmWRPQF u^&G :u BFFFFN F;w~t^&W&;WrS^ R+QFPFT^&G&+GFV N+;sV^&FF^ v0~&}^9N^Y^F&GFFcF^&F]U^&G :v ]U^&G :v ^&G ]U^&]U^&]U]URPPFPDF uK~tE^&t6G^&G&vH^&@]U uPPP/\F u{&G < r < wfrHF sFF FFF uDPPP/\F uo&G ^ &:GwY^ &GX ^F&G;FsF^ &GPP^&GȴP^SvF tn<~u8F^ &OQP^&OɵQPvDFF tUV~uF~ t~uF r~t4FPFP6FF^&~uq븋F] U^ SP^Sq]U^ SP^Sq]U^ &G :gt x uPPP/\F uV&G < rL< wH^&^&G^&GP^&G^&G^&G^&G^&GA^&G6 uDPPP/\F u&G ^ &:Gw^ &G@ FF^ &G^&^&G^&G^&G^&G^&G^&G^&G^&G^&8G uA^&O^&8G u@^&G^ &GA^&G^ &G^&G]U^&^ &&W^&G :t ^SF uk^&G;s]@1V&G&G &"F~&w8&XSv^&pWPG<P^&w: F t@^&G-F]U^&GFrF@1V^&G&G &W"FV&G-sG<PFP F^&G-3^&w8v&XSv^&pvvFP#FNVF׉NV~u t%^&9Wu&9Or&O&WFF t ^&Gv^&@F&Z&W^&GFV^&G &W"^&G&W;Vu;FYvF&GF^&G8^&G^&G&W&+G &W"FVF&G^&uFF]U6PT6P u%666P4>  u6=t=!t3]Uv&D :s2&؋:u] ]Uv&D :s2&؋:u] ]Uv&D :s2&؋:u]  ]Uv&D :s2&؋:u ]X[QSP ]Uv&D :s2&؋:u]$ ]UQv&D :sB2&؋:u0VQFvV&D 2&؋ ~t F Y]U^ &G :=tWSvvn(^ &G ^ SvvFNs=u8^ SFP~u#=^ &G ^ &dt@Fs률=^ &G F]U,^ &G :r^ &G :tw&G 9Fu9Fu^ &G&WFV^ &G&W;Vu;Fw3&G^ &O^ &O^ &O&W;Vu;Ns.^ &r &G&;Gwe^ &G &W"N~;u;wL&wщFVN;u;s&+O &"N։~؋F^ &G-sSF u^ &G-sG<PFP F^ &G-FVFVF%Ff^ &G^ &G^ &GNV^ &O &W"^ SPFPFPF u5F^ &G^ &G :(t :t^ SPF t^ &G&G &W"FV&9Wu&9Gw&G&W9Fu9Fu^ &G&WFV^ &G&9G*s&G*^ &FF^ &G@1&@FތFF^ FV&9W"u&9G v&G*H1Fܺ&G &W"N~;u;r_F&+O &"N։~؋F։F&O,r&9G*sS[F tF^ &G^ &G*&;G(uF&G(F^ &G* ^ F&9G*s&G*^ F&9G(v&G(Fr^ SP($F u^ S[F uy^ &G ts&w8&SP^ &w"&w G<P^ &w: F t@^ &G-^ &G &W"&G4&W6^ &G&G.^ &F&G0Z&W2~Yt^ &G@1&W^ &w&@F&Z&W^ &GN^ &O^ &OF~+&G &"^ &G&G(^ &G&G*^ &G,^ &Ytj&w8&SP^ &w"&w FP#Fu^ &?^ &G,(~t^ &G&GF^ &G :t ]U^&FF^&G &W"&O*&;Wu&;GrI1&G^&G*1 uSP($F u`^&G@1&@FF^&G*1&G &W"FV&w8^SQRPFP#FtK uY^&G*1V+^0^~&}*9^Y^&G*H14^SP$F u/v&|*&L+^9 ^&G*&G^&G,]UQ^ &G :=t S^S>6^ &du(^ &G ^ S^SF=^ &G F]U^&G :r^&G :(t:u^&G&G &W"^&&Wc^&G :uX&r&G&;Gv &G&W^&G&G &W"^&&W^&G s7&G s/^&/&_!^&G :u^&&G ]UQ^&G :=t SvY6^&du(^&G ^SvYF=^&G F]U^&G :(t :t^&G&G &W"FV&9Wu&9Gw&G&W^&G&9G*s&G*FP&t@"FP($F u^&uS[F t^&w8&S^&w&w"&w G<P^&w: F t@^&G-^&G &W"&G4&W6^&G&G.^&F&G0Z&W2^Sv($F Yu0^&w8PGPP ^&G :u ]U ^&G :=uC&du ^&du(&G ^&G-sN&G :u/G<PFP 0^&G :(t:t:t f^G<PFP F^&w:FP u ~u~u^&w8 F^&w:)F^&G F uF]U <r"^&&W&G&G;F s Wv X^F&F&GFFF;FsN ;Nv&@FFڋF;Fr ,v@^&Z&WS&_[&G]Us]&G@]U cr &G;FsGvX^F&F&GFFF;Fs&@FFF]U>uP u$>t&G>t>t]ð]U#U$VWQ^SY_^F^OGG w 3GGG؉GGGFG F GFGFGFGFGPS]UU^ SG PPFP[#uMG~&wdr/^ F%;u^ ^ FF;tX F ;FuX]U].]UQQ^ &dt[SFP ^& uW^ &du&G-sG<P^S ^&^ SwmPvv4^& u(^ &G ^&]UQQ^ &Gd<tO<uSP^& uI^ SFP ^& u0^ SrmPvv4^& u^ &G ^&]U ^&^SP($F t^&G t~&w8&SP^&w"&w G<P^&w: F t@> ^&G-^&G &W"&G4&W6^&G&G.^&F&G0Z&W2~Yt^&GFu^&G@1V&G&G &W"F^&Gv^&@F&Z&Wv^&@&G^&G*^&G(^&G^&G,]U ^&G :(t :t F^&G-rG<PFP F^&G-^&G0FF^F&G4&W6Ft.H^&O.+N^v0^9^Y^&O.N^F&)G.^v^&G0Z&W2F^&.uF tuSv$F tF^&G0FF^&w8^S^&w.&w6&w4FP$FFt.H^&O.+N^v0^9^Y^&O.N^F&G4&W6^F&)G.^v^&G0Z&W2F t ^&.u%FsFr^SP$F u]U^&G :(t :t ^&G&WFV&O&O &"N~;u;wN~Fs FF%<FvvP\FF tN+ȺNV^&w8vv F=uu!FPF u ~ r uDPPP/\F t^&GF&8G w ]FX ^Fv&DF&GF&GF&GF^&GF&GF&GF&GF&G F&8G uANsNQPPF tX FFF ;FwD FrF9F w^ &FF^&O&@^&G^&w FA:r uF F t ^ &?TNt4}F &G^ &O>F u+J u s4ЉF V4^ &G6 &^&Z&W] UQ^&G &w8 F^&G:t P)FF]Uj9;n57~eF1F1F1F;s PF^&GZ&WvF&MX&E&uF+ƹ1&EFF&Z&U&E$<&E&F =wmtAN=rmYt=tmuFrmF =wmt =mmt=amuFmm FP^Sv^SvvF=uy~mmur^Sv^Sv^&w&&w$F=u ^Sv^SvPPF~u FP^Sv^SvvFFF t^G:P(F uy^&w:FP uF FuF^&G8Fs &G&G@~ tmuv^S^GPlvP^GPPFF usF =rmt=tmu^&G &G 5^&G&G~ mmu=&O FV(^&G FF^SvvF t ^SP+]U~ ]Nu+JVt)F^F9Fv@^ &80r ^ v&89vz^ ^ v&0^F븡z xuDPPxP/\F uKx&G ^;v ^xX ^F&u^& u@^] UVnjޱ;u$:u ^&GZr~F =amt =wmt?v tuPPtP/\F u~t&G < r<wg^&G _^SvFPFPrF uEg^&G F^&GFsF^F^S^SvFP3]UFf]UFV v]UFV v]UFV%]U+Zr tH]U+ZrH]U3 &L&;Wt]U vPFPPF uxFV^&&W~u~tYFuRFVFV)F^v^ SPvvFP#F u^ &?Gu&G &W^&&W] .objWrap Yy[!Scr]$$.Tmp=\z2Q[KBD][VID]Press NEXT PAGE or SCROLL UP to continuet(Press NEXT PAGE to continuet       VNVF11.0? [Kbd],[Vid]T[Lpt][Nul][SysIn][SysOut]>6H$$H$Ha,6H$<H$1WZH$$ 6 $|= 6L [sys]LptConfig.Sys>tt@  LIBRARY: ctos.lib VERSION: 11.0 (Saturday April 11, 1987, 11:12) LIBRARY: Wrap.lib VERSION: 11.0 (Thursday April 16, 1987, 23:44) COPYRIGHT 1980, 1987 CONVERGENT TECHNOLOGIES, INC. ALL RIGHTS RESERVED THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE SOLELY FOR THE OPERATION OF A DESIGNATED COMPUTER FOR A PARTICULAR PURPOSE, AND MAY NOT BE COPIED OR OTHERWISE USED WITHOUT THE PRIOR WRITTEN CONSENT OF CONVERGENT TECHNOLOGIES, INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, INCLUDING ITS SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT TECHNOLOGIES. VERSION: 11.0 (Thursday April 16, 1987, 23:41) ^ &O1^ &G4^ &GL] V ̌V̤VԆ\Ԡ3OU^&tFFćnV^;u$:tF@FcrĸP빋F؃rt PF؋t^&GFLJr^SP|FF؃rtF@FcrP؋FLJrFnp&Lt&D^&G^&_^F&^Ss]3$YVkuVąė̡V ̧VľV %*DEFINE (OsSubLab ( n, "pName" )) (SS%EVAL(%N/8) SEGMENT AT (0FFFFh-(16*(%N/8))) ORG (230h+(100h*(%N/8))+2*%N-10h*(%N/8)) PUBLIC %Prefix%(%pName) %Prefix%(%pName) EQU THIS BYTE SS%EVAL(%N/8) ENDS ) %*DEFINE (Same( "original" , "copy" ))( PUBLIC %Prefix%(%copy) %Prefix%(%copy) EQU %Prefix%(%original) ) %IF (not(%*Isdef(%Prefix))) THEN (%' %DEFINE(Prefix)()%' No prefix, names are as-is )FI o0 __ PP ; ; FILE UserRqLabel.asm -- ; ; COPYRIGHT 1988 CONVERGENT TECHNOLOGIES, INC. ; ALL RIGHTS RESERVED ; ; ;There are two ways for an application program to access a server. ; ; 1. It can issue the Request primitive and then issue either a ;  the Check primitive or the Wait primitive. ; This method requires that the application allocate space for ; a request block, fill in the fields, and know ; the request code of the service. If this is the way you wish ;  to access your server, then you do not need to use this file. ; ; 2. If the request code starts with an even hexadecimal digit ; (e.g. 0CxxxH or 0ExxxH) it can use the procedural interface. ; In this method, the application simply makes a procedure call. ; The OS allocates space on the user's stack for a ; request block, determines the proper request code, ; fills in the fields using the parameters supplied by the user ; alon@ g with derived information, calls Request, then calls Wait. ; Note that unlike method 1, this method does not allow the ; application program to run while the server is processing the ; request. This is referred to as a "synchronous" interface. ; ; ;Method 1 is completely sufficient for accessing a server. Method 2 is ;nothing more than a more convienient way to obtain the same services. Most ;user-written servers do not use method 2. If, however, you have a server for ;which you would like to provide a procedural interface, this module is ;provided to make that job easier. But note that only request codes which ;start with an even hexadecimal digit can be made to have a procedural ;interface and thus make use of this file. ; ; ;The steps in creating a procedural interface to a server are as follows: ; ; 1. Decide on procedure names for the requests which will be served ; by your new server. ; For this example, we'll call them MyFunction1 and ; MyFunction2. Moreover, assume the parameters are of the form: ; ; MyFunction1(pointer, word, returned pointer, word) ; MyFunction2(pointer, word) ; ; 2. Choose a request code(s) within the range available for ; customer use. There are two ranges: ; ; The first range (0C000h-0FFE0h) is available to ; all users. This means that if you pick ; request codes in this range, there is no guarantee that other ; users will not choose the same request code. Two such ; servers could obviously never run on the same machine. So, ; if you expect to run your server along with servers written ; by other customers, you can avoid conficts by getting your ; request codes out of the second range. ; ; The second range (06000h-07FFFh) are registered by ; Convergent. CT Technical Support maintains the ;  registry by assigning codes in this range only upon request. ; So in order to use codes in this range, you must contact ; CT Technical Support to arrange to have codes reserved for ; your exclusive use. The codes given to you will ; be given out to no one else, thus preventing any conflict. ; ; There are two ways to receive such codes. If you are ; connected to the CT-Mail network, send a Mail message to ;  REQUEST/TS2 specifying your name, address, and how many codes ; you require. Codes will be registered in your company's name ; and you will receive an EMail response to inform you of which ; codes were assigned to you. Alternatively, you may call CT ; Technical support at (800) 858-8255 and explain that you wish ; to register a CTOS request code. In a return call, you will ; be informed of the codes which have been registered in your ; name. Remember to specify whether you want a request code ; beginning with an even or odd hexadecimal digit. ; ; 3. Use RequestTemplate.txt to create a new file Request.?.txt ;  which will associate the chosen request codes with the parameter ; lists. ; ; :RequestCode:0C000h ; :RequestName:MyFunction1 ; :Version:1 ; :LclSvcCode:0000h ; :ServiceExch:exchInstalledLocal ; :sCntInfo:0 ; :nReqPbCb:1 ; :nRespPbcb:1 ; :Params:p(12),w(16),p(18),w(22) ; :NetRouting:NoRouting ; :SrpRouting:NoRouting ; ; :RequestCode:0C001h ; :RequestName:MyFunction2 ; :Version:1 ; :LclSvcCode:0000h ; :ServiceExch:exchInstalledLocal ; :sCntInfo:0 ; :nReqPbCb:1 ; :nRespPbcb:0 ; :Params:p(12),w(16) ; :NetRouting:NoRouting ; :SrpRouting:NoRouting ; ; 4. Write the code which will implement MyFunction1 and MyFunction2. ; This code should have an iniA tialization section which is ; responsible for installing. This code should make the following ; call for each request code: ; ; erc = ServeRq(XXXX, exch) ; ; This notifies CTOS of the location of the code which will ; implement the XXXXth request code. The initialization ; code should then call ConvertToSys and wait on an exchange set up ; for deinstallation. ; ; 5. Create a command called InstallMyServer to install the server. ; ;For an application program to actually make use of this new server via a ;procedural interface, the following steps should be taken: ; ; 1. In the source of the application, call MyFunction1 and ; MyFunction2, both declared EXTERNAL. ; ; 2. Edit this file by adding a macro call of the following form: ; %' %RqName(XXXXXX, "MyFunction1") %' %RqName(XXXXXX, "MyFunction2") ; ^ ; / \ ; | ;  | ; Start in column 1 ; ; These macro calls cause ABSOLUTE PUBLIC symbols of MyFunction1 ; and MyFunction2 to be created. ; Their values will be resolved at load time to the correct ; addresses of the procedural interface for MyFunction1 and ; MyFunction2. ; ; ; 3. Link the application program modules with the module created by ; assembling this module. ; ; 4. Run InstallMyServer ; ; 5. Run your application program. ; ; ; ; The syntax of the macro is: ; %' %RqName(Request code, "routine name") ; ; $INCLUDE([Sys]RqLabl.mdf) ;*************************************************************** ; EXAMPLE  * ; * %' %RqName(815Fh, "ReScheduleMarkedQueueEntry") * ;*************************************************************** ; ; **** Put "RqName" macros below this line ; ; The following are for backwards compatability with object ; modules compiled using old names for CTOS procedures. The ; syntax is: ; %' %Same("RqName", "Alias") ; ; You will not need to worry about this unless you are replacing ; an existing request code which was known by two names. ; ;*************************************************************** ; EXAMPLE * ; * %' %Same("ReScheduleMarkedQueueEntry", "PauseSpooler") * ; * ; * ;*************************************************************** ; ; **** Put "Same" macros below this line END nficts by getting your ; request codes out of the second range. ; ; The second range (06000h-07FFFh) are registered by ; Convergent. CT Technical Support maintains the ; ; ; COPYRIGHT 1988 CONVERGENT TECHNOLOGIES, INC. ; ALL RIGHTS RESERVED ; ; ;This module is to be used by users who are creating Installable System Common ;procedures using the SystemCommonInstall procedure. The steps in creating an ;installable system common are as follows: ; ; 1. Decide on a procedure name for your new system common. For ; this example, we'll call it MySysComm. Moreover, assume the ; parameters are of the form: (pointer, returned pointer, word). ; ; 2. Choose a system common number within the range available for ; customer use. There are two ranges. Numbers in the range of ; 6000h - 7FFFh are available for unrestricted customer use. ; Numbers in the range 4000h - 5FFFh are available for customer ; use only by registering with Convergent Technologies Technical ; Support, who keep a registry which ensures that no two ; customers use the same number. ; There are two ways to reA ceive registered numbers. If you are ; connected to the CT-Mail network, send a Mail message to ; REQUEST/TS2 specifying your name, address, and how many numbers ; you require. Numbers will be registered in your company's name ; and you will receive an EMail response to inform you of which ; numbers were assigned to you. Alternatively, you may call CT ; Technical support at (800) 858-8255 and explain that you wish ; to register a System common number. In a return call, you will ; be informed of the numbers which have been registered in your ; name. ; ; For this example, we'll use 6000h. ; ; 3. Write the code which will implement MySysComm. This code should ; have an initialization section which is responsible for ; installing. This code should make the following call: ; ; call InstallSystemCommon(6000h, @MySysComm, @('pqw'), 3, ...); ; ; where @MySysComm is the address of the public procedure which ; implements the system common call, @('pqw') is a pointer to ; the parameter string, and 3 is the length of the parameter ; string. For further information, see the CTOS Reference Manual. ; ; This notifies CTOS of the location of the code which will ; implement the 1808th system common procedure. The initialization ; code should then call ConvertToSys and wait on an exchange set up ;  for deinstallation. ; ; 4. Create a command called InstallMySysComm to install the "server". ; ;For an application program to actually make use of this new installed system ;common procedure, the following steps should be taken: ; ;  1. In the source of the application make a call to MySysComm, which ; should be declared EXTERNAL. ; ; 2. Edit this file by adding a macro call of the following form: ; %' %OsSubLab(6000, "MySysComm") ; ^ ; / \ ; | ; | ; Start in column 1 ; ; This macro call will cause an ABSOLUTE PUBLIC symbol of MySysComm ; to be created. Its value will be resolved at load time to the ;  correct address of MySysComm. ; ; ; 3. Link the application program modules with the module created by ; assembling this module. ; ; 4. Run InstallMySysComm ; ; 5. Run your application program. ; ; STACK SEGMENT STACK 'STACK' ; default stack so programs won't crash ! DB 512 DUP (?) STACK ENDS $include([Sys]ossub.mdf) ;*************************************************************** ; EXAMPLE  * ; * %' %OsSubLab(262, "SystemCommonCheck") * ; * ;  * ;*************************************************************** ; ; ***** Put OsSubLab macros below this line ; The following macro is for backwards compatability with object ; modules compiled using old names for CTOS procedures. The ; syntax is: ; %' %Same("SysCommonName", "Alias") ; ; You will not need to worry about this unless you are replacing ; an existing system common procedure which was known by two ; names. ; ;*************************************************************** ;  EXAMPLE * ; * %' %Same("SystemCommonCheck", "GetUserNum") * ; * ; * ;*************************************************************** ; ; **** Put "Same" macros below this line END ent MyFunction1 and MyFunction2. ; This code should have an iniB ; ; COPYRIGHT 1980,1981,1982,1983,1984 CONVERGENT TECHNOLOGIES, INC. ; ALL RIGHTS RESERVED ; ; THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE SOLELY FOR THE ; OPERATION OF A DESIGNATED COMPUTER FOR A PARTICULAR PURPOSE, AND MAY NOT BE ; COPIED OR OTHERWISE USED WITHOUT THE PRIOR WRITTEN CONSENT OF CONVERGENT ; TECHNOLOGIES, INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, INCLUDING ITS ; SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT TECHNOLOGIES. ; STACK SEGMENT STACK 'STACK' ; default stack so programs won't crash ! DB 512 DUP (?) STACK ENDS %Out( Start Pass: ) %*define(MakeLabel)( seg%rqCS segment at %rqCS org %rqIP %rcName label byte PUBLIC %rcName seg%rqCS ends %Out(.)) %*DEFINE(NewRqName)(%' new CS:IP format %IF ((%level AND 1) EQ 1) THEN (%Error) ELSE (%' %set(rqCS, (%rcode AND 0FF8h) OR %level SHR 1)%' %if (%rqCS GT 21h) THEN (%set(rqCs, %rqCS OR 0F000h))FI%' %set(rqIP, 210h + ((%rcode AND 7) SHL 1) - (%rqCS SHL 4))%' %MakeLabel)FI) %*Define(Error)(%Out( No Procedural Interface for level %level, rq %rcode, name "%rcname" ) ERROR; No Procedural Interface for level %level, rq %rcode, name "%rcname" ) %' Must make names with macro arguments so substitution works left to right. %*Define(MakeName( First, Second ))(%define(rcName)(%First%Second)) %*Define(RqName( rq, "name" ))(%' %set(rqBased,%rq+%base)%' Alt rqs start 800h higher %set(level, %rq SHR 12)%' No level shifts allowed when apply base %set(rcode,(%rqBased AND 0FFFh))%' %define(rcName)(%Prefix%(%name))%' %IF (%level EQ 0 OR %eval(%rq) GE 0FFE0h) THEN (%' %set(tmp,(%rqBased AND 0FFF8h))%' %set(rqCS,(-%tmp) AND 0FFFFh)%' %set(rqIP,(210h + (%tmp*10h) + ((%rqBased*2) AND 0Fh)) AND 0FFFFh)%' %MakeLabel%' ) ELSE (%NewRqName)FI) %*DEFINE (Same( "original" , "copy" ))( %define(rcName)(%Prefix%(%copy))%' PUBLIC %rcName %rcName EQU %Prefix%(%original) ) %IF (not(%*Isdef(%base))) THEN (%' %SET(base,0)%' No base, rq codes are as-is )FI %IF (not(%*Isdef(%Prefix))) THEN (%' %DEFINE(Prefix)()%' No prefix, names are as-is )FI "ReOpenmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmB mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmC mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmC mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmD mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmD mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmE mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmE mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmF mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmF mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmG G H H I I J J K K L L