IMD 1.16: 31/05/2007 20:04:23 FOGCPM.115 --FOGCPM115BSORT COMBSORT DOC BSORT AQM BSORT AQM[ !"#$%&-07-00 86 EZFILE BAS'()*+,-./0123456EZFILE BAS,789:;<-CPM115 DOCEZFILE DOC=>?QQSORT COM@@ABCDEFGQQSORT LIBHIJQQSORT PAS KLMNSHELL COM6OPQRSTUSHELL LIBVSHELL PASWXYSORTC BAS Z[\]SORTFILECOM^_`SORTFILEDOC abSORTKYBDBAScdeSORTV COM fgSORTV DOChiSORTV-12ASMdjklmnopqrstuvSSORT COMlwxyz{|}~SSORT DOC/LEXLATE CSMSORTORDRASMWSSORT CQ uSSORT OVLSSORT SH SSORT SYMThis is the disk name. !"!"A2W:\_ͺ]:X_7 X:W_> l!X 2|2x2d2C2\$ o!C4 ͫ X$ ҂!C4 ͫ :C!"* %"?>?2h!"D}\ ͫ _!}~_*D"D\2h*D|))))))) ~ ͫ "A*? 7 ͫ *A"L\+/Ox/Gy/O*A "A|:  ͫ }  ͫ `i""!""*:͙ * <|/g}/o#"=*L:+O "H:):,O*L "J** ! d /**P "%*N*  "#!9"**#*% **;*9"*9**;"!9"*!4]*N"]*P"]!5!9"*""!9"*]:+O*"NT "R "1*"PT "T "5*N*P T *L: :)ʋ:,O*R "3*T "7*P*N b*NT "R*PT "T:*R*T( *1:-*Hͮ o:/*N#"N:O:)*3 "3*1 "1þ*5:-*Hͮ ʝ:/,00Ë*P+"P* b:VO:)W*7 "7*5 "5 *N"9*P";:)*J*3:.ͮ :0ʖ:)*J*7:.ͮ :000Ë0Ë:+O*"NT "R "1*"PT "T "5*N*P T *L: :)':,O*R "3*T "7*P*N *NT "R*PT "T:*R*T( *1:-*Hͮ :/y}}î*N#"N* :O:)ʣ*3 "3*1 "1Z*5:-*Hͮ 6:/'''*P+"P:VO:)*7 "7*5 "5ò*N"9*P";:)g*3*J:.ͮ :0/}}î}î:)ʿ*7*J:.ͮ :0]'''*"PT "T:+O "5:)ʍ:,O*T "7*P"N#"P* *T"R:O "T*5"1 "5:)*7"3 "7*1*5:-ͮ :/#Íʍ#:)*3*7:.ͮ :0#Íʍ#*T*L: :O*RT]  **N+"N :VO*R "R*1 "1:)s*3 "3*1*H:-ͮ ʝ:/“00:)ʄ*3*J:.ͮ :000*L:*R Í*L:O*R  Íh ͫ  :W_ x y! # 7BH  !H =  H [H 6 7!'F#N#V#^:ghu iu z| ju ku | }|y<2-o|x=2+zo{<2.o|z=2,{ڬ yڬ 7ɯG  #ð >ɯ>z { ! }o|gx7ɷ /<_  _7:! 7 D D  !/G !04!"4 !"4:!ʚ  :"o y2'O { y2(O ‡ y2)O “ :)ʀ y2*O :"| ҳ µ 7W. }ͅ ڳ 0 ҳ oº  7 The file names are, according to CP/M conventions [d:]name.typ where the brackets [] mean that the contents are optional. After the program is initiated, you will be asked for the record length. Respond with a suitable number between 1 and 255, the upper limit. This length must be that which is in the disk record. If each record terminates with carriage return and line feed, as would be the case of a list of words prepared under the CP/M editor, then the record length must be the fixed word length plus two. BSORT reads the disk file without change, complete, to an internal array in the form [1:number of records][1:record size] CHAR where CHAR is an eight bit byte. Next you will be asked for sort parameters, by means of which you may designate one or two sort fields. Your response must take the form s1l s1h [a| |d] [s2l s2h [a| |d]] where "snl" are the position numbers of the first characters of the sort substrings and the "snh" are the position numbers of the last characters of the sort substrings. The symbol "|" indicates alternate choices. The sort substrings may not overlap. The letters "a" and "d", which may be either upper or lower case, indicate the direction of the sort, whether ascending or descending according to numerical byte value. When omitted, default is to ascending. The program makes many checks on the appropriateness of the entered data and requests re-entry when not satisfied. It also checks that the requested file will fit into available storage. Typical dialog: BSORT B:FILE.DAT OUT.DAT Enter record length: 9 Enter sort parameters: 9 9 d 1 8 This dialog requests that file "FILE.DAT" from the "B" disk be sorted and the sorted file be written out to file "OUT.DAT" on the default disk. It consists of 9-byte records, and is to be sorted in descending order on the ninth character, under which it will be in ascending order on bytes 1 to 8. Entry of record length and the sort parameters has few constraints of format. For record length, the first set of contiguous ASCII digits is taken; all other input is ignored: Enter record length: #swX R14,tg 9 8 (etc) This response will be interpreted as "14". Sort parameters will be sought in the following five patterns: n n {a|d} n n {a|d} n n {a|d} n n n n n n {a|d} n n {a|d} n n Only the ten digits and the letters "A", "a", "D" and "d" are recognized, hence any other characters may be present but will be ignored. I.e. all other characters, including blanks, will act as separators for the parameters. The program may be aborted in the entry portion by typing control-C. rd length: 9 Enter sort parameters: 9 9 d 1 8 This dialog requests that file "FILE.DAT" from the "B" disk be sorted andescending order on the ninth character, under which it will be in ascending order on bytes 1 to 8. Entry of record length and the sort parameters has few constraints of format. For record length, the first set of contiguous ASCII digits is taken; all other input is ignored: Enter record length: #swX R14,tg 9 8 (etc) This response will be interpreted as "14". Sort parameters will be sought in the following five patterns: n n {a|d} n n {a|d} n n {a|d} n n n n n n {a|d} n n {a|d} n n Only the ten digits and the letters "A", "a", "D" and "d" are recognized, hence any other characters may be present but will be ignored. I.e. all other characters, including blanks, will act as separators for the parameters. The program may vdBSORT.ASM\  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQoRSTUVWXYZ[ܓ9$ZQv4rO{Fq{o냦___tV7vI ]\kiׯt켢ϳaK^{JkɵV.J߼d$%Ey=],*˨I@&}P{Ot}2R:–(zRH"yrɧDS9*?J}eytm@:RO>+ɔLBhh˘bxv#lg5$5I[SQLj$=ԓLt%-t?d a+l1*'Ŏ~Ӵ̧|W_be>U䓽D(ZSE>٫_O'{u$.)%u2!N(^@hȨ&_%~,M${Ʉ->](&,N y27V{]aA-U3M5ZlvkIM~{Q9)v a+lK)ZL)I #ѮG՟{2tҼlCQnWwsܹ`&^dONamHQv%j\4FB|3ߍm+2馚<{F;G.vu Fxj:c4 nQF tR 9it¶TL!^HGӴ̧J!u(vTѐg/Ea[N |MO¶P@|(5ռв30j$lH(F v!rn.kONӐg/d4eM0BꐞӍ0-Vk'څW'a{er(vziZS%څbz3EN #͑s=F;Gä\ v!`NJa[LGhPˤjE!uSnOnZ;a.5-? Wx{k'WוHHHHHHHHHHHHH(9$&i2ka9uyN`&h9VGa.v%lKQ^ӟQjhs!iv# 9lFsHumQ|H(wnT΀M.hZNLΡ܅[^b燌24/4Uj*lj^(N2*^ #͑s=ls=FB@~:oqԘ|hnT΀͔4|SF#]7|FB@Wɧx!l>be>U䓽F#]zm\QPa75&f'a9ڵ3`3)Di9M1Hͤ/_QP=U O>N a.hʗ*S䓽h䣦栚aY 7;aKu2mie:ZQ2UwskW61&K)J,Fنr%}`ut%ІtRn Q:)dJ |>6.$FZhO^oI=e:Z lC#`$&Gs/l>慲r4-F;[>[ҿ/ґruF>́RΡ<KDtJG΄h3R2)Sy- )e #͑TM.r -F;G.wi\ KDCnT/':^ tR ^Eݞ,L)4F5:{ZFCdZnt]`H7T(l=^(,څQ:)KDiM>)4^u5|nq|0GMHr-څaח8hR'fp9>IJӟRrOuϞ7S? [7 Fe Q枔e .r̟פ [k)Sy}CD{2*Cks# pǓ0\KS8a4,=+ p'as(.Ҥ#5.Z å)Ra[ ]R$d2as0=0-ܺ,eP;OnZ;a68fXJwD+a.E* )e }s76Ia714D㚮#E/vz]uҫҔe4DSws\KD^I¨]Ru5|nKHh)M2pPg:q|3`UiGMks/<4~! )MG˽V(wyuX"ґLk~iZSEYG%ІK_L5:Lnj^h V cR8a?&>(awSot ]h e#u)ZIO-`{akL>~FR/8֘| ԥhK Xci0R,=~> Xci0R,={akL>~FR0O O>~X#͑З:NI0j]_ WpI|v!l)$L5:'tHMU>$Ƨ/t*[Ӈ|:栚&ZamH1,l>!Ѥ(3R>vګ}4¸Wa6]Q?vS2U¨]HI Xai0\~WX2je>U4M̵2Gs/څaח8hR'f.mLnhE0e~Mbɨ&2Mr(1*FhC?ga9ҵ+06pWJd<~iZS%vz=Va9uyG¨]RM'#&f_HM՗̧|Դ5*S^ v!z0}7;a;*ON2*ɧٗ09u vPS-󩢸,+^ #͑s=FB(our>yQZS%p7GNH tR c)q|0z} KY~)HCnTl4J î/_q+Ѥ O>;.-셖ѐQM4Ma9uQ|FB@Wa.+֓ `JjTQF#]דM9ik2*F)a9FkWV6ӥ[.FB@YͨQEakL>;V{J ##6ZFgCbF+#څbr5ތ 6ѿ+IG>18֘|}6L0-:9a$Ӧ&Z3j~;U{0 c)Q"6“OBؒ^h eh&&+Lv#ʔmbP;Q6IHו+U î/_QP\ZO65*>SEvZ!u'r_搘ddT2cR88a?bi<mפ=%IQP+z kjWFSt4h4mτq14V{J v!TlsP mV&x${:ɽ0U~f [aHHHHHHHHHHHHH(lJӴ̧tĘ~MM4F5TQQidJA5/ٍ2ZP&4W:v^ٍ-{f_h˘b7– miOH1ɽ0jJ@ۘeezOM4F5TQQQLn=垦I)SF ɧIn=2MF"3]ʄgfCMVFxi<^#Cb(̧Ju_,V_q|3`Ga7wy-c_ai<|¨{R]IMq$0-F;h=;[>]FY~q+L>|^­GkI5qZuX"ґMha[Nn] KYw&i4:ej˽V0-||s`I5qZ )F#R]I- )F-ռ>$TQQQѾ|;UdT@SA%~&64ъVJ@A0-ܺ,5ռ>$AEyF D3cR8a?&>(aԡ0j$a9u:Wa.T|ƱFb'<4a!~r 栚2j~PFu_#&ƿF#]/_\ѴϮQP=UǾM a[`)(CuF?EX׀%$j$ )C5FنC5F]KjDh, )\ lC:\:O%$AHM2mi-{?!(+ rEџՈܟhXFOFw4,j#lڐ…`Ո⒜0%")] #EXmQ?In4)v,0U )\1r $Ӧ&ZQ;JW¨]HIj^(˯0&ƿ1u_On-`Tה/ɫDJuOnѮ0-:0- cC+<4u! )\1? [7 Fe(.)FSM3=iF{JJڐ]*Vm4'ht4J!u&44ehe09F0-FRQ!ŧ]5,%`TQ\RAo ,:T?AE @Y4/˜NGaԡL'E).'N )ծFRQ!ŧ]u,%`TQ\RAo0N GzGzGzGzGzGzGzGzGzGzGzGzGzGa+\b7-m[P}&)yʞ)%Ot~ [V؂h~V؂h׮6ﷴFF؂hʕ2wj#lA?}}Mu=#l.7j|IIF>ҿ}2T~ J؂~Lod-觿F7ʄ-觿BL_[`׮6 |EP-@4?;2W; [h׮6~y!_?e Zr%lN~72 :υ-p [O?υ-ߟD繰$mHQ`oFt(i7*a?aS\ Wj]ݾ #Ѯ0;(hs-څt~>[yOџ*,IQ=-Ju](2:h}261:y¨&J rOՇ慲⒦2MupslFhC:\K}p5Zja0BRT%`oPhZ |>J*aL 'G;WN"5U{ϳqQ\1#ed:%5U{06(Jv msG#ІUX*qWmHQ?T#}jD&>ha.XzƤpp8~Ds3`)=EHM^yea{K*Lџ޾+,IqQ9`)IB-C~},p 0BRjX%v~FPhڐb0 rM^}nU.0E+І0jKŚ2ɫF|P(ېW#a Ūt4&^dONrmH Tɫ4K l #!EPKokuۭ2tQ=-Za6<`\WnKh MA lC rF]KFe:E[ML'͋0RQ!Ũt+a6JwFYAnv]-`)Q{5e:i^hTM^ǾB|Xښب,#~ԴMuTب,nUB )TPWh?(CAeRjXaPb7Vܹby!l2QYFA&F #!EUJ3uۭ2tQ!EP+c_rnps*1:y\'_S (WQi;MEq)l_hG~mUw5FB@8ʝ+fc [MsB5]%yL5:tmbt p7G.wTBSH=`IER~הETi5#Ѯg,yW5${tҼ#u) (ې* mH1* t4]b燌24/(6¨&Z lC0I(ېW#R #Ѯg%2&SEKQVFنݮ+ІUnWFYƱPb7ҝk"yL5:^ Wع-w1Vܓ+(:ia{er=7Miׯt켢ϳa[W<(\/ߨ__C5"'lN-+W{*) []"T<֨F *#{ J' -& jaE|!|Դ5Q"{ J'KnDTb [a['Ӧ&ZQ2 FeʄRj29KLSmbP\.31ZτOnQ0BRjXj:cF(ې*K0U MzWdtD+J,Fن.K7xFRQ!{+ƀT?.+W a[TBϳڐ*K0U )Tv! 'RAQ)IqPb} la;$ZQ2 Fe(.=ϔS,ІUX*qW¨]oһBeR,ݸY )T n_Q0ߤw06pu XqO峰CFH#! ҍ{*qWmHtga.WDW|=ϴ5Q=פts#ІnS/6¸W[#eƀgh4Ma6tƀ{~ga0j*+aL 'GT}Xjy(FS]2mr-\b6-Q=-J!u(TBCnT1)0Qb6KI(?ZդBU^5#*WN8V\1%T<֨F *#{^?xa +f'qF5PW8V\1;SLCTikTEin+\b6NmHQ7FTcC+ )B!u(j#vz&~rzRg@Y4/˜NǏ\10BRn;$Zэ{*nWk:h4eZK1Fن8 WW a6povHTK%}G0&ƱGgTa;$ZQ2 Feh y&ɳR `i."6ogs+~rzRg6ռ2:h0&#*WN+(І< #u)F(ې½'j!І #u)F%Q QYF{*j# )[9]ݾ W\1;9 a6 amH  W#ZFC&>h&F:^ )ReRlFzFjiL [9G}#lLtV7vI+rOgґʒ4i0BR]%:aFB@OnW–vɋ&1N~,MYwɴ0BP X3eE"IqʍfcC5O\fJ c ܢ^;a6pu!ԥ lC VK7x~]\= #!Ka.HeRXqOYrx!l>慚NΣFhC,¸Wa6 R!څ@|>JaL 'cʍfKA –C%`TSL=mHQBwu*څ&+Q! ҍ{*ڐ*K0U MzWlC WT> [*?$[ZM^yч\(Cި J@0BPF )\]nS,}FhC WT> v!rC>U䞊gGM8vϔƨa6pot㞊~? n_+7B!u(0,Mʢ4FhCOWj XqO~yFB@Weq%Iqʍfj^ʢ•ƣ0EU^ #ezܨF cR88a?rٸF5PWAeCqQl Ʃ0}ʍf'ʍfz!jR*qQ$\l.ڐ*K0;(ې*-ռP*CrOM)򑦉Vj]ݾ #!EPKo9a.$IqQ3`ni|ib+-=lD+J,SٚnnR"6og'N!u\Ƥpp(F +mHފ`=Oga.HeR$\lZ#!{+H]06poXwu*c_r Wn4;-!*rO3-t?dv4ƨ$STIF )[9,ݸ_lqW•Nn!:U #!ŧ]5FB@Weq%Iqʍf?j^h @Y4ZriFP+aԡ,WocaL 'GTn4;¨&JǏh6ƱBFS*c_rgݳpFSF5PW8Vh6hvJmHQA5FT # lCFH"6ogs+~rzRgE"Iqʍf`Ga6poIK1Fن< Wn4;mHʱ0Rb$ )[9]ݾ WhvrVr0BRT )6a@jDhM\ #!EU lC(@ՈT-5msG/bhB!u\,@Y4/˜NǏh6|FhC VqWmHjWR 'a.}UW˜NC٢*R\1)0Q{'jR*qQl Ʃ0}ʍf'ʍf߻0IƱBFq*c_rI Wn4a!:T? cR88a?ri$І< n_ڐծ: #eN¨],1)0EU^ #ez; cR88a?rNդBU^ 8VhvJq+Tn4 Wn4-QM*T0=*7Ra V>#=#=#=#=#=#=#=#=#=#=#=#=#=ң.I+v3et=ehZFC>NiN=N–OJLs5%~2?6Ve|#l gjiyF_tV%枾[a_[aйt݄џ? [a ")y3Bo;? [Ѯ]m-觿'(yͳ~ӹ4}7݄Oɟ-@?%~)N-@<;?%O -Q.lA?}Za 3-QAo-<V}dQQQ%~d2#!EF W#Kj:c״Mu06JoqW¨]oһBeR,%`TQ\RgFS= #drviʢLias3a[k'ԥ lC V QYFqIS=?Y!u\Ƥpp8~DC5O=h42SZ #!Ka.HeRd2KJ[? lsW^o61tjLii~CX )(ې*K9-o; cC X n(ې*KA5// n_ڐ~FjDqIhG/څt~>P;0&FA <PvHd2 #!K@7oQ! znY!u(j#vz&~rz턑#amHJ~,lCehʴ5%`TL )[9FنiH]06polg T+a{W!yW# W*ƱP1`)Ї2rMyH:W?jpξ_T+a{l X/dg8~Dƀ%r0}*\¶TM5qMe4<?PC0&#v#@Moڐ½'a0BR$:U8 v!Ƥpp¨Uy%:$Iq|D~+jR*qQ_q+l,\.QM*T0=v6#v6ƱP_p~]>+J~L:RBYT&ZPAoi񍒧< #!Ka+KKmHv`IGaԡ0j~r.ٗ㻢)nK+NFY)X!u(j#vz&~rzڐ`)yʟOn[ִ4q/~r:#u)F)Y e?] T5Fה9慒$p5FhC:\Kj$}FhC,H;[|06 a.X; W#aL 'cXJ4њ7p5z7J>議MUc^yM0e*61$C_uwEF5 4UZ1ZV #! a.HeR,ya0*(.)yʟڐ½ca.HeRb X3MY4a0*˄RgaL 'G0BR$ԥ lC VK^}(FS2 Fepξ.m(J>-}7!Jga6poXwu*ІvX!u(0FB@Weq%Iqv<[z([T0BP0&qe; T+a{ `E-iskJ@Moka e;h;MEh(є{Jrv<^T+a{a?l?W(a+\Bؖ~&QzK(y3%~)FH*W1)0Q0BR$}FhCOW$:U8 v!Ƥpp¨Uy%:$Iq|Dَ? T+a{0} \ aT Uy%c Ga e;"lvB]QAo%OyH4jJ4%Oj,ІjW n_R"6mHB e?] W(Xl?,m%QgʽMDSh,ІjW n_R"6og'N )\]#u)F¨](JǾBV>#=#=#=#=#=#=#=#=#=#=ңvI[Bxґꟽ0ڍU î/_q+=wVؕii!l]מL!^h -L+Cv?P7–2M]Ѡܨ<{!/Pi4eM5 yB_DilGOuZ~*퍰2ZP&4eLwӗaJ¨ +a7t,:itJ 4eM5 y"~r Wpkzvk:^# 뾫.{E?5=-QUH?6SShE tR X턭pݺbrʔ&1%5$VrO5mʔה{2%5$VF}8LQ2 Fe՚_FkRLQ4517–P31u=nQrOa{er=7Mi˘sO7¶Py}]f4eLwӗa[5Ma39L Gԭ+N¸W{kJ,SOn54Zbw}oH3v\S;0)ka}3҇<\EǏ[W|`U&.0`yMq$?cC z2\k5uG0]~o'SQ2v~F ׭+>/On1Z6fΣ'/cR88v;?ɨLijcQvVn?7 aKA5/̧|W:RsHLhe5%`TQ)][2ZP&4eFgu1]baKz35~Y]L{F!uwH;] >>ExLMtޜ;MqI|Lx Xt24Zt栚a7wHM9$&i2C Xw"wi_QWsN8֨O 䣦iV'ƱPΛπOx~o1!,y搘#)`QWsNt&EǚPΛ`^8搘Bu5Q XzqSn?7'R2"u>ieF&v^ tތKFxZFC^qW88R_dJEj O(w5KY~)mʔoť0%'M:L5$VF ן*W a[TBY4IJ+*iMLWZ^^+ZF^\krO n(|x2ci|#l gj_i˘sO/7V^+M${(duie2a9u~ d2&&+L&~rѺ|sV|sV|sVu/:aF?Ev¶9慶IJ+/ߨ0-z$څOU栚2VM~,`c).is "ka.| 6ռ610Zn6HQE$ZEu5LǏTQa v!SU9慶FQ "W¨]T(ja BSU,OnAu5XE Bca[u+a b`Ę{ʔ|I"6Ÿb!ldtD+ʢєik*%~栚F?[׀gZ#a5uwESAM'rPVa ة@qILSdZaOn-`|!جd_+Cx2fF?[[ # 8a;j29LiKʢєuL_Sɨ&AnrEY 2JwƯ)=E(.6mʢєuL_ "0-z(F(j֫D_0NΡIaOn֭0ʇ0F C0-:FZp(wdr>6.¶>慖PeweVnl{a#[ XSQ6­kVO(FH[,cOE "rW]iF *ʅ0 &2IF [ắj!l&F%5$VdJSF:ϴ2+J@mC(LeH&~(.9$&i2kaKduieȑ>(jb Qtg<}7^lMSɨ<ʐ$6/$l@(] WJWdTUF^\krO n(|x2c7'`y-Hr au0QUY\`d*;¨ 05*l诔q|DWeqvm_(] cC X.Ria7whq+}UWNz-capWeqz[pp(V;ắ*op(V;a+Bɴ馉V4˥27rյ2%~6Ui%!_.QQ{j Q_dJ~6)]7jÚ@r}DfݘrOF^\krO n(|x2.14r#l gj~1]bFnBu_05y XJW AG a[ ¨ 8H1`)]/a7'RRh3RoadT451#eO%Sap:?oǀ,ɔBmƱϟF;h=;[R_dJJm]ݾB8?/-M[tEۘ{kґq:rM!1Id>}ה{=N%~ 6I@_&weHG>1{oĘ{ʔ|)l:uMlMפ"2oɵV.T7/c:&K=~z35b6/c:&K=#sZijb0&qf6~]6B`'S2_垢iajws֮n XhsOF n_1pmb5'H#oXgvy-C+mf0;GM!1IFZHka?u̾2yvP0-ܺF]1%cٵ8njvIضɻe@ u_WBFue=e(vzia;w0+6b|s 0eՏCbF+#.הmqn3A 'p^u5Ʊj}eaϮƱj}Wj}F?[(ws֨}_S&v^ z([͒wEMgL@0e'p`c&v^ #1ZF5]va0*˄QPLƛQ&we4w2hդ#]r{aT )`j2 QY&cn3vke0-uF'|(CZ 7]JS2 Fe%%$j>P#]S)]Ptg%d2KRSW^S 7DΘ.I(2(–It=b՚ڬID3Tk}<2҇["r`TQ\+g3ߕ=b~͍%ԏgTJg.Cv#l #! W#6ռP # v! 'aL 'c&KjD|| a9|sחFmєAH¨]v} XK WpIoi!І90ITC"FB@:?O˜NM:6DQM*~90BPF CqFbr?n_ڐ0R"F [a</mMuӗ.&/PiE{%E=5;s-l|w5nQrOJIe4ߕYN5iȨLa{er=7Mi˘sOoh3QHFeTQyF;Gv L% v `/&v^ --`CF%{EhhMu㸩?0R"h!.0l;q|D0`&~tɵ0 栚ZFC]4~FWhQvlsOҔ/L a|Z۾|;o|(CtE{%E=5mIkaK4w\QY7Ք{j QsOҴ2i&5)}#l gjiq:t7ws`J uSMF]VF^rMMH]!_jF%{EhhMu㸩?iX}3wSo2t5}0R"l2 :N&0mc)C$ZeߕYN!O0ҺM켦K3a7?^S˜eMFeJSs/bî/_–LU%׊t&,N Id2=+aTeeh,V QY&p7G"[Y'V tRVդB X U%J'̯}2&׊t&,N0jF0Ec!l 4 -󩢸$}UÚj@F5 H1=F^\krO n(|x2.1F=@/32.1uL?*a9Fewa9ڵ+K1=]L #u)FFPh+p7G>*)Sy- )+lP@E? [*w QY&p7h=>},eZmisF5VK10E Xa+Ki(CtEhhNJasrΥ¨]– P0<#HX\0jF0j`9慲iT-)5q*G/#t XjyegAa6(z,ŗ551ܡ06(z0}"ude4Տ2ht@]10Q'%-Ʊn4)v@>j:$ۭEzZ[*T2P۩JդB X*TQyFVH+W a[dmbd4qOMY*J@FQ)r\oɵV.T7/c:&K=~z358h˘sO/7wsz)a8UtKeRwMƤpp8~DV>RFs=M켦oMlTCbF+ cC q9$&i2EZC XcϽ搘cR1;Z6ѿ+IGPdJC"l+2%`T c&v^S\R4jTQsHLhe2a[k搘ʐtQU p7Gnvg 5$V&FB@ݺbr<\S4jTEn]֨&+C!1IF5 㸩Qg"N a7wHפ#y搘#ѮGzC5Zi]qEZԖ0}" `}}4JH a?'?6_EǏ(WޫlM>R}9$&i20&#:78vkbQSsHLheFBj5Jw%Sn;$Zѥ[.FH6IMLWZjb0j0(j<F?[(w+0}"i5-QWsq|DV0-ܺFs\џq+iEHx!$#.j|Z­ka;ga EZ}.jy!0(j0BP,Iq"'"/Onֵ0ʝC{a EZ}.<,Rͨ8oR&) ѫ864UI$b`Ę{ʔ|I>ja+\\ZO6 a[d&,NHMY*t˥2TO60麞lFgas뢞lFga.I)bj a[G&W9 ɔL@??i>[4rnQFR)P4512ip#l븽7A] o#l gjiq1%NA5/T8njVu5 8n>m# -Qj6˯}2%mbw*a+\6Bo`ʔ&nɨ<c:Nsef\/Onn.4 z([+lV x<GZQM*F5005fߕYNaaX~4׹F0Y &we4H'^n3vQSBC~ka`q(v\ å)`On˜o0W?jauMqn3Ds)a+lmFBخ~&i4%\YES)(K\g{J(&7–h2!J,L_S)]+j_ ["IMh5+|(C6^SJW׹&ɨ}_ ["?P\RsHLhe25rOFQ榾W&ZyS}CJ;$_.1t|#;Vy-Iq|DYoFpYoFB`'S2_垢iapYoFBCbm)&M~{a0M켦XtT NS;z3H)`y-Gf4A ˜o֫55$VFn }8(hvl~Q¨9f]+FYoFmwE\ f4|s`]YEvZa$ M켦mR6r0Q֛{.sg5cC X~Ԕm9$&i2'p^u5ƱFYoF} cٵ8njf4A 8z3}WpYoF¨&F5PM~{a[ NS;1)`4-?*i>ef(w#a[u o;MM&Is-}FeMMb=)-l˶hBؖ| d냦]rMo |PF^\krO 7_ұ>n6T%Ę{a[u+'hNnQBaQvV'D]|Wfl}|Wk&}#l ugZrtH2jb5%] ~%`TQ\R;(J l@0e4L>y7Z+O{ohuCita[A '`y-\^ jF?E%.Z=A!uwH.ZĽ0-,Q" 'pr-MS-rOKԆ?1!|sVi]`$#+WQvVع aKW&׊c{ґ<{e>U4qOter/3:sO_o-=@_@_tL|{:}4ΓiG%p7h=;ZXn|"p7Gv`)1&K)a.¨-`)1&m̽VF )Kjt4ka7whQ=-Za9F `Q2 Fe1j*\X[y&v^S\RMFFZդB XVy-C Xjb0-:ƤpX b XGQM*%2L'͋0]>j* aKҔa0*˄QM*wsa.HC٢FPHKM]ݾ ^w.FB(–Le#͑s=,No;Mz$vz}Uw 2Ny'S`rQ0J'0j0qUX/kj׹%wFE5I)K셶&^j #Ѯݨ؝K4΄Onֽ0&_f0-,}0VLig0}7;\ [aHHHHHHHHHHHHHHVVnWnWHK|E DlM\+L3J@&V+k<] oO㯿~c}Bh~Y]L{F :,NU%*uπcZQ3^8X=`<lȽRp]@:B]y~>o}@:>ie9$&i2{Ӵ̧|W7Y??iV'搘P)vziZSE>٫,|T}@:s4-"5mʔ7Yx}@:ϛHCnTl4PӴ̧o? u~^y D3Tk}X~\ї #ZʢѴMLWZlAY؍ut+M!Ϛu;5g!?OޕYN=η,out=]ě,\|] s>UT䣦}7v(.ɨ&_~>utT41ʐ>$$&Gs󷟅盻|] ggLrOԏ;MqIo? [aK&VV*-#<>o5~*ϵVmV&®r@zlbLrO$S QY&\ft,D3Tk}rU&h 3XJIi?(CA=T+`)1&nU.pF WRi ]b-^aKMgV£s-0mILFK\*#M@: vd2E᷾X ;*˾Z J*xt,eh&&+L&\?-0\^ a+\~tp5 #`Ǚ,MYwɴ\fJ W@: ʢєuLepY3q)FS]2mh>U8-0=h4e%ӆ_pY #`Ǚ,MCnT44 @: ʢ4F5:^ؽ+`=Ob,ފft㞊ճ{+ Wҍ{*Yؽ+`=OgM WW(\h iM.SE{^xy 3XEL)N2*?*.ZenT %ư4΄e-^a[FGQ)N2*᢬7+`Kh22*Ÿvx 3؝oI=e:ZO~ytN W~Mb)$jM7x:>?.ծZ a0*(.Ij($J*H0B*H0Rft㞊gaW Wҍ{*"6 #`ɫD⒊it JGfɻA-niȳp|&F:24-[XvH8=VoHw3X|Wyun|3FyMGNu ?QӨ&|(#l-ՓM9 +=ϫB ד@:B=لVlcX/P搘ddmI ]Rrp^`z)aoI=]RZFCCАh&6 Z=oՓM9(l-:i^(mc2Oi>~+\Oi>`Oi;2tҼʝ?-^a[y!HKTSZk)I"\;WZ .I]] -13FyMNVݮH0&S慶1ZQnW W%v~(IBۘ{&sBMO6z{pU)lz=z{Wحɽ&>SEKtKez=z{xKF%5gqHGt˥2*X=`=l4ًZmX=`l*OC2*:L LchȳZS%\u{.w Z=`+lhLSlEqIzD!7 Env Z=`6SiՏbt((K:#tVje>UʥmAfF%y!^Ȩ&AۂVo8a?\+GMCQM4p]nlcT-4F5:{R^{bWz{Xtg<51k|(#\޹tA~ )Mi(L zv? jtSg:#.fs= vȳpy^-z{@yG`5Z<Vo(wϰ{2=MLS i_ԟsX=<ףߍ ~kJ$:U.u Q^ӫ?jw2Va[`Ooa&tg~+\Oi>`Oi;2tҼʝ?-^a[y!HKTSZk)I"\;WZ .I]] -13FyMNVݮH0&S慶1ZQnW W%v~(IBۘ{&sBMO6z{pU)lz=z{Wحɽ&>SEKtKez=z{xKF%5gqHGt˥2*X=`=l4ًZmX=`l*OC2*:L LchȳZS%\u{.w Z=`+lhLSlEqIzD!7 Env Z=`6SiՏbt((K:#tVje>UʥmAfF%y!^Ȩ&AۂVo8a?\+GMCQM4p]nlcT-4F510 REM EZFILE.BAS 20 PRINT CHR$(26) 30 PRINT " EZFILE" 40 PRINT:PRINT " A DATA MANAGEMENT PROGRAMME" 50 PRINT:PRINT:PRINT:PRINT " 1. CHANGE a record." 60 PRINT:PRINT " 2. ADD new records." 70 PRINT:PRINT " 3. CREATE a new data file." 80 PRINT:PRINT:PRINT "Chose 1 - 3" 90 PRINT:INPUT AN$ 100 IF AN$= "1" THEN 150 110 IF AN$= "2" THEN 370 120 IF AN$= "3" THEN 900 130 IF AN$= "" THEN PRINT CHR$(7):GOTO 10 140 IF AN$ <> "3" THEN PRINT CHR$(7):GOTO 10 150 PRINT CHR$(26) 160 PRINT:PRINT "Please enter the name of the DATA file" 170 INPUT "you wish to edit: ";FILE$ 180 IF FILE$= "" GOTO 150 190 : 200 OPEN "O",1,"B:COPY.DAT" 210 OPEN "I",2,FILE$:GOTO 250 220 : 230 PRINT CHR$(26):PRINT CHR$(7) 240 PRINT "ERROR" 250 PRINT:PRINT "Now enter the number of fields" 260 INPUT "in this DATA file (3-10): ";YYY$ 270 IF YYY$= "3" THEN 3360 280 IF YYY$= "4" THEN 3590 290 IF YYY$= "5" THEN 3870 300 IF YYY$= "6" THEN 4200 310 IF  YYY$= "7" THEN 4440 320 IF YYY$= "8" THEN 4730 330 IF YYY$= "9" THEN 5070 340 IF YYY$= "10" THEN 5460 350 IF YYY$ <> "10" THEN 230 360 : 370 PRINT CHR$(26) 380 PRINT "Please enter the name of the Data file you" 390 INPUT "are adding to: "; FILE$ 400 IF FILE$= "" THEN 370 410 : 420 OPEN "O",1,"B:COPY.DAT" 430 OPEN "I",2,FILE$ 440 : 450 PRINT:PRINT:PRINT "Now enter the number of fields" 460 INPUT "in this DATA File: "; YYY$ 470 IF YYY$= "3" THEN 640 480 IF YYY$= "4" THEN 2400 490 IF YYY$= "5" THEN 2520 500 IF YYY$= "6" THEN 2650 510 IF YYY$= "7" THEN 2770 520 IF YYY$= "8" THEN 2900 530 IF YYY$= "9" THEN 3040 540 IF YYY$= "10" THEN 3190 550 IF YYY$ <> "10" THEN PRINT CHR$(26) 560 PRINT "You must enter from 3 to 10 fields.":GOTO 450 570 : 580 OPEN "O",1,"B:COPY.DAT" 590 OPEN "I",2,FILE$ 600 : 610 REM THE FOLLOWING WHILE LOOP IS SKIPPED IF THE OPEN STATMENT 620 REM FOR XXX.DAT CAUSED AN ERROR 53 (FILE NOT FOUND ON DISK) 630 : 640 WHILE NOT EOF(2) 650 INPUT# 2,FIRST$,SECOND$,THIRD$ 660 WRITE# 1,FIRST$;SECOND$;THIRD$ 670 WEND 680 : 690 GOSUB 6430 700 PRINT CHR$(26) 710 GOSUB 6470 720 : 730 WRITE#1,AAA$;BBB$;CCC$ 740 GOTO 700 750 GOTO 6580 760 : 770 PRINT:PRINT:PRINT "Do you wish to continue?" 780 PRINT:PRINT:INPUT ANW$ 790 IF ANW$= "YES" THEN PRINT CHR$(26):GOTO 50 800 IF ANW$= "Yes" THEN PRINT CHR$(26):GOTO 50 810 IF ANW$= "yes" THEN PRINT CHR$(26):GOTO 50 820 IF ANW$= "Y" THEN PRINT CHR$(26):GOTO 50 830 IF ANW$= "y" THEN PRINT CHR$(26):GOTO 50 840 PRINT CHR$(26) 850 PRINT:PRINT:PRINT:PRINT 860 PRINT "Very well, until next time..." 870 PRINT:PRINT:PRINT 880 END 890 : 900 PRINT CHR$(26) 910 PRINT:PRINT " YOU ARE OPENING A NEW DATA FILE" 920 PRINT:PRINT:PRINT "Enter new file name as 'B:XXXXXXXX.DAT'" 930 PRINT:PRINT:INPUT DAT$ 940 IF DAT$= "" THEN GOTO 770 950 : 960 OPEN "O",#1,DAT$ 970 PRINT CHR$(26) 980 PRINT" *** INSTRUCTIONS ***" 990 PRINT:PRINT "Your New Data File must contain from 3 to 10 fields." 1000 PRINT:PRINT "Select 3 to 10: "; 1010 INPUT NO$ 1020 IF NO$= "3" THEN GOTO 1130 1030 IF NO$= "4" THEN GOTO 1180 1040 IF NO$= "5" THEN GOTO 1260 1050 IF NO$= "6" THEN GOTO 1370 1060 IF NO$= "7" THEN GOTO 1440 1070 IF NO$= "8" THEN GOTO 1540 1080 IF NO$= "9" THEN GOTO 1670 1090 IF NO$= "10" THEN GOTO 1830 1100 IF NO$ <> "10" THEN PRINT CHR$(26):GOTO 1110 1110 PRINT CHR$(7):PRINT:PRINT "You must select from 3 to 10 fields to coninue.":GOTO 1000 1120 : 1130 GOSUB 6320 1140 GOSUB 6140 1150 WRITE#1,ONE$;TWO$;THREE$:GOTO 1140 1160 GOTO 2000 1170 : 1180 GOSUB 6320 1190 PRINT:INPUT "Enter name of fourth field: ",FOURTH$ 1200 GOSUB 6140 1210 PRINT:PRINT FOURTH$": "; 1220 INPUT FOUR$ 1230 WRITE #1,ONE$;TWO$;THREE$;FOUR$:GOTO 1200 1240 GOTO 2000 1250 : 1260 GOSUB 6320 1270 PRINT:INPUT "Enter name of fourth field: ",FOURTH$ 1280 PRINT:INPUT "Enter name of fifth field: ",FIFTH$ 1290 GOSUB 6140 1300 PRINT:PRINT FOURTH$": "; 1310 INPUT FOUR$ 1320 PRINT:PRINT FIFTH$": "; 1330 INPUT FIVE$ 1340 WRITE #1,ONE$;TWO$;THREE$;FOUR$;FIVE$:GOTO 1290 1350 GOTO 2000 1360 : 1370 GOSUB 6320 1380 GOSUB 6390 1390 GOSUB 6140 1400 GOSUB 6240 1410 WRITE #1,ONE$;TWO$;THREE$;FOUR$;FIVE$;SIX$:GOTO 1390 1420 GOTO 2000 1430 : 1440 GOSUB 6320 1450 GOSUB 6390 1460 PRINT:INPUT "Enter name of seventh field: ",SEVENTH$ 1470 GOSUB 6140 1480 GOSUB 6240 1490 PRINT:PRINT SEVENTH$": "; 1500 INPUT SEVEN$ 1510 WRITE #1,ONE$;TWO$;THREE$;FOUR$;FIVE$;SIX$;SEVEN$:GOTO 1470 1520 GOTO 2000 1530 : 1540 GOSUB 6320 1550 GOSUB 6390 1560 PRINT:INPUT "Enter name of seventh field: ",SEVENTH$ 1570 PRINT:INPUT "Enter name of eighth field: ",EIGHTH$ 1580 GOSUB 6140 1590 GOSUB 6240 1600 PRINT:PRINT SEVENTH$": "; 1610 INPUT SEVEN$ 1620 PRINT:PRINT EIGHTH$": "; 1630 INPUT EIGHT$ 1640 WRITE #1,ONE$;TWO$;THREE$;FOUR$;FIVE$;SIX$;SEVEN$;EIGHT$:GOTO 1580 1650 GOTO 2000 1660 : 1670 GOSUB 6320 1680 GOSUB 6390 1690 PRINT:INPUT "Enter name of seventh field: ",SEVENTH$ 1700 PRINT:INPUT "Enter name of eighth field: ",EIGHTH$ 1710 PRINT:INPUT "Enter name of ninth field: ",NINTH$ 1720 GOSUB 6140 1730 GOSUB 6240 1740 PRINT:PRINT SEVENTH$": "; 1750 INPUT SEVEN$ 1760 PRINT:PRINT EIGHTH$": "; 1770 INPUT EIGHT$ 1780 PRINT:PRINT NINTH$": "; 1790 INPUT NINE$ 1800 WRITE #1,ONE$;TWO$;THREE$;FOUR$;FIVE$;SIX$;SEVEN$;EIGHT$;NINE$:GOTO 1720 1810 GOTO 2000 1820 : 1830 GOSUB 6320 1840 GOSUB 6390 1850 PRINT:INPUT "Enter name of seventh field: ",SEVENTH$ 1860 PRINT:INPUT "Enter name of eighth field: ",EIGHTH$ 1870 PRINT:INPUT "Enter name of ninth field: ",NINTH$ 1880 PRINT:INPUT "Enter name of tenth field: ",TENTH$ 1890 GOSUB 6140 1900 GOSUB 6240 1910 PRINT:PRINT SEVENTH$": "; 1920 INPUT SEVEN$ 1930 PRINT:PRINT EIGHTH$": "; 1940 INPUT EIGHT$ 1950 PRINT:PRINT NINTH$": "; 1960 INPUT NINE$ 1970 PRINT:PRINT TENTH$": "; 1980 INPUT TEN$ 1990 WRITE #1,ONE$;TWO$;THREE$;FOUR$;FIVE$;SIX$;SEVEN$;EIGHT$;NINE$;TEN$:GOTO 1890 2000 CLOSE #1 2010 PRINT CHR$(26) 2020 PRINT "Your new data file "DAT$" has been saved."   2030 PRINT "Please note the fields used:" 2040 PRINT 2050 PRINT " 1. "FIRST$ 2060 PRINT " 2. "SECOND$ 2070 PRINT " 3. "THIRD$ 2080 PRINT " 4. "FOURTH$ 2090 PRINT " 5. "FIFTH$ 2100 PRINT " 6. "SIXTH$ 2110 PRINT " 7. "SEVENTH$ 2120 PRINT " 8. "EIGHTH$ 2130 PRINT " 9. "NINTH$ 2140 PRINT " 10. "TENTH$ 2150 : 2160 PRINT:PRINT "Do you wish a printout"; 2170 INPUT V$ 2180 IF V$= "YES" THEN 2240 2190 IF V$= "Yes" THEN 2240 2200 IF V$= "yes" THEN 2240 2210 IF V$= "Y" THEN 2240 2220 IF V$= "y" THEN 2240 2230 IF V$= <> "y" THEN 770 2240 PRINT CHR$(7) 2250 PRINT:PRINT "Press RETURN when printer is ready."; 2260 INPUT U$ 2270 LPRINT; DAT$ 2280 LPRINT:LPRINT "1. "FIRST$ 2290 LPRINT "2. "SECOND$ 2300 LPRINT "3. "THIRD$ 2310 LPRINT "4. "FOURTH$ 2320 LPRINT "5. "FIFTH$ 2330 LPRINT "6. "SIXTH$ 2340 LPRINT "7. "SEVENTH$ 2350 LPRINT "8. "EIGHTH$ 2360 LPRINT "9. "NINTH$ 2370 LPRINT "10. "TENTH$ 2380 GOTO 770 2390 : 2400 WHILE NOT EOF(2) 2410 INPUT# 2,FIRST$,SECOND$,THIRD$,FOURTH$ 2420 WRITE# 1,FIRST$;SECOND$;THIRD$;FOURTH$ 2430 WEND 2440 GOSUB 6430 2450 PRINT CHR$(26) 2460 GOSUB 6470 2470 PRINT:INPUT "Enter data for 4th field: ",DDD$ 2480 WRITE#1,AAA$;BBB$;CCC$;DDD$ 2490 GOTO 2450 2500 GOTO 6580 2510 : 2520 WHILE NOT EOF(2) 2530 INPUT# 2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$ 2540 WRITE# 1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$ 2550 WEND 2560 GOSUB 6430 2570 PRINT CHR$(26) 2580 GOSUB 6470 2590 PRINT:INPUT "Enter data for 4th field: ",DDD$ 2600 PRINT:INPUT "Enter data for 5th field: ",EEE$ 2610 WRITE#1,AAA$;BBB$;CCC$;DDD$;EEE$ 2620 GOTO 2570 2630 GOTO 6580 2640 : 2650 WHILE NOT EOF(2) 2660 INPUT# 2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$ 2670 WRITE# 1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$ 2680 WEND 2690 GOSUB 6430 2700 PRINT CHR$(26) 2710 GOSUB 6470 2720 GOSUB 6530 2730 WRITE#1,AAA$;BBB$;CCC$;DDD$;EEE$;FFF$ 2740 GOTO 2700 2750 GOTO 6580 2760 : 2770 WHILE NOT EOF(2) 2780 INPUT# 2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$ 2790 WRITE# 1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$ 2800 WEND 2810 GOSUB 6430 2820 PRINT CHR$(26) 2830 GOSUB 6470 2840 GOSUB 6530 2850 PRINT:INPUT "Enter data for 7th field: ",GGG$ 2860 WRITE#1,AAA$;BBB$;CCC$;DDD$;EEE$;FFF$;GGG$ 2870 GOTO 2820 2880 GOTO 6580 2890 : 2900 WHILE NOT EOF(2) 2910 INPUT# 2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$ 2920 WRITE# 1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$ 2930 WEND 2940 GOSUB 6430 2950 PRINT CHR$(26) 2960 GOSUB 6470 2970 GOSUB 6530 2980 PRINT:INPUT "Enter data for 7th field: ",GGG$ 2990 PRINT:INPUT "Enter data for 8th field: ",HHH$ 3000 WRITE#1,AAA$;BBB$;CCC$;DDD$;EEE$;FFF$;GGG$;HHH$ 3010 GOTO 2950 3020 GOTO 6580 3030 : 3040 WHILE NOT EOF(2) 3050 INPUT# 2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$,NINTH$ 3060 WRITE# 1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$;NINTH$ 3070 WEND 3080 GOSUB 6430 3090 PRINT CHR$(26) 3100 GOSUB 6470 3110 GOSUB 6530 3120 PRINT:INPUT "Enter data for 7th field: ",GGG$ 3130 PRINT:INPUT "Enter data for 8th field: ",HHH$ 3140 PRINT:INPUT "Enter data for 9th field: ",III$ 3150 WRITE#1,AAA$;BBB$;CCC$;DDD$;EEE$;FFF$;GGG$;HHH$;III$ 3160 GOTO 3090 3170 GOTO 6580 3180 : 3190 WHILE NOT EOF(2) 3200 INPUT# 2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$,NINTH$,TENTH$ 3210 WRITE# 1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$;NINTH$;TENTH$ 3220 WEND 3230 GOSUB 6430 3240 PRINT CHR$(26) 3250 GOSUB 6470 3260 GOSUB 6530 3270 PRINT:INPUT "Enter data for 7th field: ",GGG$ 3280 PRINT:INPUT "Enter data for 8th field: ",HHH$ 3290 PRINT:INPUT "Enter data for 9th field: ",III$ 3300 PRINT:INPUT "Enter data for 10th field: ",JJJ$ 3310 WRITE#1,AAA$;BBB$;CCC$;DDD$;EEE$;FFF$;GGG$;HHH$;III$;JJJ$ 3320 GOTO 3240 3330 GOTO 6580 3340 : 3350 REM * * * CORRECTIONS * * * 3360 PRINT CHR$(26) 3370 INPUT "Enter the 1st field DATA: ";ONE$ 3380 IF EOF (2) THEN 3430 3390 INPUT #2,FIRST$,SECOND$,THIRD$ 3400 IF ONE$= FIRST$ THEN 3450 3410 WRITE #1,FIRST$;SECOND$;THIRD$ 3420 GOTO 3380 3430 GOSUB 6070 3440 GOTO 160 3450 GOSUB 6640 3460 WRITE #1,FIRST$;SECOND$;THIRD$ 3470 IF EOF (2) THEN 3510 3480 INPUT #2,FIRST$,SECOND$,THIRD$ 3490 WRITE #1,FIRST$;SECOND$;THIRD$ 3500 GOTO 3470 3510 GOSUB 6020 3520 IF EOF (1) THEN 3560 3530 INPUT #1,FIRST$,SECOND$,THIRD$ 3540 WRITE #2,FIRST$;SECOND$;THIRD$ 3550 GOTO 3520 3560 CLOSE 1,2 3570 GOTO 5890 3580 : 3590 PRINT CHR$(26) 3600 INPUT "Enter the 1st field DATA: ";ONE$ 3610 IF EOF (2) THEN 3660 3620 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$ 3630 IF ONE$= FIRST$ THEN 3680 3640 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$ 3650 GOTO 3610 3660 GOSUB 6070 3670 GOTO 160 3680 GOSUB 6640 3690 PRINT:PRINT "The 4th field reads:  "FOURTH$ 3700 PRINT:PRINT "Enter RETURN or correct as follows:" 3710 INPUT DD$ 3720 IF DD$= "" GOTO 3740 3730 LET FOURTH$= DD$ 3740 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$ 3750 IF EOF (2) THEN 3790 3760 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$ 3770 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$ 3780 GOTO 3750 3790 GOSUB 6020 3800 IF EOF (1) THEN 3840 3810 INPUT #1,FIRST$,SECOND$,THIRD$,FOURTH$ 3820 WRITE #2,FIRST$;SECOND$;THIRD$;FOURTH$ 3830 GOTO 3800 3840 CLOSE 1,2 3850 GOTO 5890 3860 : 3870 PRINT CHR$(26) 3880 INPUT "Enter the 1st field DATA: ";ONE$ 3890 IF EOF (2) THEN 3940 3900 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$ 3910 IF ONE$= FIRST$ THEN 3960 3920 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$ 3930 GOTO 3890 3940 GOSUB 6070 3950 GOTO 160 3960 GOSUB 6640 3970 PRINT:PRINT "The 4th field reads: "FOURTH$ 3980 PRINT:PRINT "Enter RETURN or correct as follows:" 3990 INPUT DD$ 4000 IF DD$= "" GOTO 4020 4010 LET FOURTH$= DD$ 4020 PRINT:PRINT "The 5th field reads: "FIFTH$ 4030 PRINT:PRINT "Enter RETURN or correct as follows:" 4040 INPUT EE$ 4050 IF EE$= "" GOTO 4070 4060 LET FIFTH$= EE$ 4070 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$ 4080 IF EOF (2) THEN 4120 4090 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$ 4100 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$ 4110 GOTO 4080 4120 GOSUB 6020 4130 IF EOF (1) THEN 4170 4140 INPUT #1,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$ 4150 WRITE #2,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$ 4160 GOTO 4130 4170 CLOSE 1,2 4180 GOTO 5890 4190 : 4200 PRINT CHR$(26) 4210 INPUT "Enter the 1st field DATA: ";ONE$ 4220 IF EOF (2) THEN 4270 4230 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$ 4240 IF ONE$= FIRST$ THEN 4290 4250 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$ 4260 GOTO 4220 4270 GOSUB 6070 4280 GOTO 160 4290 GOSUB 6640 4300 GOSUB 6770 4310 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$ 4320 IF EOF (2) THEN 4360 4330 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$ 4340 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$ 4350 GOTO 4320 4360 GOSUB 6020 4370 IF EOF (1) THEN 4410 4380 INPUT #1,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$ 4390 WRITE #2,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$ 4400 GOTO 4370 4410 CLOSE 1,2 4420 GOTO 5890 4430 : 4440 PRINT CHR$(26) 4450 INPUT "Enter the 1st field DATA: ";ONE$ 4460 IF EOF (2) THEN 4510 4470 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$ 4480 IF ONE$= FIRST$ THEN 4530 4490 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$ 4500 GOTO 4460 4510 GOSUB 6070 4520 GOTO 160 4530 GOSUB 6640 4540 GOSUB 6770 4550 PRINT:PRINT "The 7th field reads: "SEVENTH$ 4560 PRINT:PRINT "Enter RETURN or correct as follows:" 4570 INPUT GG$ 4580 IF GG$= "" GOTO 4600 4590 LET SEVENTH$= GG$ 4600 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$ 4610 IF EOF (2) THEN 4650 4620 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$ 4630 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$ 4640 GOTO 4610 4650 GOSUB 6020 4660 IF EOF (1) THEN 4700 4670 INPUT #1,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$ 4680 WRITE #2,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$ 4690 GOTO 4660 4700 CLOSE 1,2 4710 GOTO 5890 4720 : 4730 PRINT CHR$(26) 4740 INPUT "Enter the 1st field DATA: ";ONE$ 4750 IF EOF (2) THEN 4800 4760 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$ 4770 IF ONE$= FIRST$ THEN 4820 4780 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$ 4790 GOTO 4750 4800 GOSUB 6070 4810 GOTO 160 4820 GOSUB 6640 4830 GOSUB 6770 4840 PRINT:PRINT "The 7th field reads: "SEVENTH$ 4850 PRINT:PRINT "Enter RETURN or correct as follows:" 4860 INPUT GG$ 4870 IF GG$= "" GOTO 4890 4880 LET SEVENTH$= GG$ 4890 PRINT:PRINT "The 8th field reads: "EIGHTH$ 4900 PRINT:PRINT "Enter RETURN or correct as follows:" 4910 INPUT HH$ 4920 IF HH$= "" GOTO 4940 4930 LET EIGHTH$= HH$ 4940 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$ 4950 IF EOF (2) THEN 4990 4960 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$ 4970 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$ 4980 GOTO 4950 4990 GOSUB 6020 5000 IF EOF (1) THEN 5040 5010 INPUT #1,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$ 5020 WRITE #2,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$ 5030 GOTO 5000 5040 CLOSE 1,2 5050 GOTO 5890 5060 : 5070 PRINT CHR$(26) 5080 INPUT "Enter the 1st field DATA: ";ONE$ 5090 IF EOF (2) THEN 5140 5100 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$,NINTH$ 5110 IF ONE$= FIRST$ THEN 5160 5120 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$;NINTH 5130 GOTO 5090 5140 GOSUB 6070 5150 GOTO 160 5160 GOSUB 6640 5170 GOSUB 6770 5180 PRINT:PRINT "The 7th field reads: "SEVENTH$ 5190 PRINT:PRINT "Enter RETURN or correct as follows:" 5200 INPUT GG$ 5210 IF GG$= "" GOTO 5230 5220 LET SEVENTH$= GG$ 5230 PRINT:PRINT "The 8th field reads: "EIGHTH$ 5240 PRINT:PRINT "Enter RETURN or correct as follows:" 5250 INPUT HH$ 5260 IF HH$= "" GOTO 5280 5270 LET EIGHTH$= HH$ 5280 PRINT:PRINT "The 9th field reads: "NINTH$ 5290 PRINT:PRINT "Enter RETURN or correct as follows:" 5300 INPUT II$ 5310 IF II$= "" THEN 5330 5320 LET NINTH$= II$ 5330 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$;NINTH$ 5340 IF EOF (2) THEN 5380 5350 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$,NINTH$ 5360 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$;NINTH$ 5370 GOTO 5340 5380 GOSUB 6020 5390 IF EOF (1) THEN 5430 5400 INPUT #1,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$,NINTH$ 5410 WRITE #2,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$;NINTH$ 5420 GOTO 5390 5430 CLOSE 1,2 5440 GOTO 5890 5450 : 5460 PRINT CHR$(26) 5470 INPUT "Enter the 1st field DATA: ";ONE$ 5480 IF EOF (2) THEN 5530 5490 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$,NINTH$,TENTH$ 5500 IF ONE$= FIRST$ THEN 5550 5510 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$;NINTH$;TENTH$ 5520 GOTO 5480 5530 GOSUB 6070 5540 GOTO 160 5550 GOSUB 6640 5560 GOSUB 6770 5570 PRINT:PRINT "The 7th field reads: "SEVENTH$ 5580 PRINT:PRINT "Enter RETURN or correct as follows:" 5590 PRINT:INPUT GG$ 5600 IF GG$= "" GOTO 5620 5610 LET SEVENTH$= GG$ 5620 PRINT:PRINT "The 8th field reads: "EIGHTH$ 5630 PRINT:PRINT "Enter RETURN or correct as follows:" 5640 PRINT:INPUT HH$ 5650 IF HH$= "" GOTO 5670 5660 LET EIGHTH$= HH$ 5670 PRINT:PRINT "The 9th field reads: "NINTH$ 5680 PRINT:PRINT "Enter RETURN or correct as follows:" 5690 PRINT:INPUT II$ 5700 IF II$= "" THEN 5720 5710 LET NINTH$= II$ 5720 PRINT:PRINT "The 10th field reads: "TENTH$ 5730 PRINT:PRINT "Enter RETURN or correct as follows:" 5740 PRINT:INPUT JJ$ 5750 IF JJ$= "" THEN 5770 5760 LET TENTH$= JJ$ 5770 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$;NINTH$;TENTH$ 5780 IF EOF (2) THEN 5820 5790 INPUT #2,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$,NINTH$,TENTH$ 5800 WRITE #1,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$;NINTH$;TENTH$ 5810 GOTO 5780 5820 GOSUB 6020 5830 IF EOF (1) THEN 5870 5840 INPUT #1,FIRST$,SECOND$,THIRD$,FOURTH$,FIFTH$,SIXTH$,SEVENTH$,EIGHTH$,NINTH$,TENTH$ 5850 WRITE #2,FIRST$;SECOND$;THIRD$;FOURTH$;FIFTH$;SIXTH$;SEVENTH$;EIGHTH$;NINTH$;TENTH$ 5860 GOTO 5830 5870 CLOSE 1,2 5880 : 5890 PRINT CHR$(26) 5900 PRINT "Do you have another correction for "FILE$ 5910 PRINT:INPUT XX$ 5920 IF XX$= "YES" THEN 200 5930 IF XX$= "yes" THEN 200 5940 IF XX$= "Yes" THEN 200 5950 IF XX$= "Y" THEN 200 5960 IF XX$= "y" THEN 200 5970 GOTO 6600 5980 CLOSE 5990 END 6000 : 6010 REM *** SUB-ROUTINES *** 6020 CLOSE 1,2 6030 OPEN "I",1,"B:COPY.DAT" 6040 OPEN "O",2,FILE$ 6050 RETURN 6060 : 6070 PRINT CHR$(26):PRINT CHR$(7) 6080 PRINT:PRINT "I cannot locate the record for "ONE$ 6090 PRINT "in "FILE$"." 6100 PRINT:PRINT "Check your file name." 6110 CLOSE 1,2 6120 RETURN 6130 : 6140 PRINT CHR$(26) 6150 PRINT:PRINT FIRST$": "; 6160 INPUT ONE$ 6170 IF ONE$= "" GOTO 2000 6180 PRINT:PRINT SECOND$": "; 6190 INPUT TWO$ 6200 PRINT:PRINT THIRD$": "; 6210 INPUT THREE$ 6220 RETURN 6230 : 6240 PRINT:PRINT FOURTH$": "; 6250 INPUT FOUR$ 6260 PRINT:PRINT FIFTH$": "; 6270 INPUT FIVE$ 6280 PRINT:PRINT SIXTH$": "; 6290 INPUT SIX$ 6300 RETURN 6310 : 6320 PRINT CHR$(26) 6330 PRINT:INPUT "Enter name of 1st field: ",FIRST$ 6340 IF FIRST$= "" THEN 2000 6350 PRINT:INPUT "Enter name of 2nd field: ",SECOND$ 6360 PRINT:INPUT "Enter name of 3rd field: ",THIRD$ 6370 RETURN 6380 : 6390 PRINT:INPUT "Enter name for 4th field: ",FOURTH$ 6400 PRINT:INPUT "Enter name for 5th field: ",FIFTH$ 6410 PRINT:INPUT "Enter name for 6th field: ",SIXTH$ 6420 RETURN 6430 CLOSE 2 6440 KILL FILE$ 6450 RETURN 6460 : 6470 PRINT:INPUT "Enter DATA for 1st field: ",AAA$ 6480 IF AAA$= "" THEN GOTO 6580 6490 PRINT:INPUT "Enter DATA for 2nd field: ",BBB$ 6500 PRINT:INPUT "Enter DATA for 3rd field: ",CCC$ 6510 RETURN 6520 : 6530 PRINT:INPUT "Enter DATA for 4th field: ",DDD$ 6540 PRINT:INPUT "Enter DATA for 5th field: ",EEE$ 6550 PRINT:INPUT "Enter DATA for 6th field: ",FFF$ 6560 RETURN 6570 : 6580 CLOSE 1 6590 NAME "B:COPY.DAT" AS FILE$ 6600 PRINT CHR$(26) 6610 PRINT "Your new DATA has been added to "FILE$"." 6620 GOTO 770 6630 : 6640 PRINT:PRINT "The 2nd field for the record of "FIRST$ 6650 PRINT "reads: "SECOND$ 6660 PRINT:PRINT "Enter RETURN or correct as follows: " 6670 INPUT BB$ 6680 IF BB$= "" GOTO 6700 6690 LET SECOND$= BB$ 6700 PRINT:PRINT "The 3rd field reads: "THIRD$ 6710 PRINT:PRINT "Enter RETURN or correct as follows:" 6720 INPUT CC$ 6730 IF CC$= "" THEN RETURN 6740 LET THIRD$= CC$ 6750 RETURN 6760 : 6770 PRINT:PRINT "The 4th field reads: "FOURTH$ 6780 PRINT:PRINT "Enter RETURN or correct as follows:" 6790 INPUT DD$ 6800 IF DD$= "" GOTO 6820 6810 LET FOURTH$= DD$ 6820 PRINT:PRINT "The 5th field reads: "FIFTH$ 6830 PRINT:PRINT "Enter RETURN or correct as follows:" 6840 INPUT EE$ 6850 IF EE$= "" GOTO 6870 6860 LET FIFTH$= EE$ 6870 PRINT:PRINT "The 6th field reads: "SIXTH$ 6880 PRINT:PRINT "Enter RETURN or correct as follows:" 6890 INPUT FF$ 6900 IF FF$= "" THEN RETURN 6910 LET SIXTH$= FF$ 6920 RETURN T:PRINT "Enter RETURN or correct as follows:" 6890 INPUT FF$ 6900 IF FF$= "" THEN RETURN 6910 LET SIXTH$= FF$ 6920 Ror the record of "FIRST$ 6650 PRINT "reads: "SECOND$ 6660 PRINT:PRINT "Enter RETURN or correct as follows: " 6670 INPUT BB$ 6680 IF BB$= "" GOTO 6700 6690 LET SECOND$= BB$ 6700 PRINT:PRINT "The 3rd field reads: "THIRD$ 6710 PRINT:PRINT "Enter RETURN or correct as follows:" 6720 INPUT CC$ 6730 IF CC$= "" THEN RETURN 6740 LET THIRD$= CC$ 6750 RETURN 6760 : 6770 PRINT:PRINT "The 4th field reads: "FOURTH$ 6780 PRINT:PRINT "Enter RETURN or correct as follows:" 6790 INPUT DD$ 6800 IF DD$= "" GThe following software is copyrighted Nov. 1, 1984 by: James W. Felter 2707 Rosebery Avenue West Vancouver, British Columbia CANADA V7V 3A3 Tel. (604) 926-3917 Comments and suggestions most welcome. Programme name: EZFILE Version : 1 Purpose 1 T creat sequentia file wit fro thre t te fields. 2 T ad t sequentia file wit fro thre t te fields. 3 T chang record i sequentia file wit fro thre t te fields. Equipment : Written for the Osborne 01 (DD). Instructions : Thi i a eas programm t run wit th instruction appearin o th scree throughou th programme I yo answe questio incorrectly bel wil soun an yo wil b prompte wit th questio again Yo MUS answe eac questio t exi th programm properly Afte yo hav entere AL record fo th curren sessio an whe yo ar prompte fo th FIRS field ente կN« T]F(###f8;f86+++ (ˆ#w+> ###f8(G+++ˆ ˎ#Np+y ++Nwy+! uRead beyond EO!PY9G!ݾ Afn( ~^(Vfnů^ ѯݾ®z() ,F̚ Z   r+sFfnͺ8(|(͎0n({(* ͎8 * w+6 +* T( F( (  fnpG* E ,ͺOG ͺ8x͎8s( * (] (Y (U (Q (M#(1_(-$(){8 [8:8a8A8 0WzW>( (* 3 * fn~!9 G_~((BW>__{(+#ܯ>(#> + ٯgk9~fnw OfnF+ ͺ8͎8* ( ( xOw+G #qF <(!WfnqG<fnp+qG!D* (- + * :0%08!͙:000⯸x/Gy/Oɯ e!W !T]jjZj_ZfnV^ͺګ ###f++Fwx+0w+z  z L !uType error on inpuError in number, try again 9* (-(+* * 3* 0:* 3.(7e(;E(708:8> ͻDM#4 fnr+s+p+q@ H * 3-(+ * 394 ~+.(:e(DE(@ (85ͬ#~0! 6+w+w+w+w ͵ͼ66=O~- O+ +~0 G+~ (0 WxGxA(DG~ݦu(Gͬ DG͚!9ͻͻ! !!  44ͼ4P!9w ! ͣ~ݮ w~<ݖ w !9w#+! +8 +#ͨ+ͻ8!͹! w#!9~xx!9w >ݮ w !9w !ͣ(@! ͣx~( ! ͓ ~( !͓~ݖ (GO8yx! xyG(!4+~ͮ! 4+~ͮ!4+~ͮ! 4+~ͮ!  ͛x! ͓x ͵ѯݾ !9#ɯ#ɯw~(4+ͤ 6v +ͻ55ɯݾ T! 9!7(  SxDM!=)#0 |z(z/W{/_|(|/g}/o#  -# zBKgo(0|r#x ygoRF ###go/  #F ˆ###go/!9 PY FfnV goͨn| }~^(Vfn>f(zȯF+̴-̌Q Fng)))V^Ny (#( F~+++N+G ++ݾ~8 AOG TRUEFALSEF~+++N ( +Ny(G++G V^!9 z(6-+goGRw+O'd EG #~-   60 +A~8 ( W  N++++!9ѯɯR0 >0w+ G fnN++| z ä  W>+++###F###8^ͧ*+++ˎ˞˦ͨ0 ###+++goͨ0 | }!tuToo many open output file!uBad output file nam#}( ##|#(}#70!9G AN"+ "͒ }r+sPYO>x40#fn##|###!W`d` ``!,W/ R0h`ihhPYh *~+^#~ FNgi#9A N"+ "#`i###͂^(?"!5~< #5 #5'"xʬ(  S_xDM!=()8 )0 0)+} E˸$}($0##0""L$q#s#r!(F!#6!*!!4 #4 #4!!%p f 6++w+(˞ :(*55*+Fx8 !W7w 8(.(w#H (#a8{0_ +++f###%(6WM@y%4_f ###͂"!5~< #5~< #5'"! 6!'!44~0#4 #4!!4 #4 #4! 6!!%66)~6<(3͂' " ^##w! ! ! !uDisk erroError in extending filDisk fulDirectory fulBad filename *^#~ 84 #6*6O  " *6#~P( 4^q5 "7~O#%~#? P~͂   76<+w_##~ >Y͂i%6#6͂x$^͂|R?|7R|7R?|Rb$ɯ7|z(z/W{/_|(|/g}/o# ((!= 4goRW_= DM(go*7ɯt <)S nf[$uT03nf[%gn}|S S(Snf[$wgnW^0cTgn)^nfW_ROTnftuPROCEDURE QQSORT( left, right : INTEGER ); { + WRITTEN BY: Richard C. Singleton + DATE WRITTEN: Sept 17, 1968 + + This procedure sorts the elements of array A[1..n] into ascending order. The method used is similar to QUICKERSORT by R.S. Scowen, which in turn is similar to an algorithm given by Hibbard and to Hoare's QUICKSORT. + + Modified 6 Oct 1980 for Pascal/Z. +} { GLOBAL TYPE Index = 1..N; Scalar = VAR A : array [Index] of Scalar; } VAR t, tt: Scalar; ii, ij, k, L, m : integer; IL, IU : array [0..20] of integer;{Permit sorting up to 2**(K+1)-1 elements} i, j, ix : integer; alldone, d : BOOLEAN; BEGIN {$C-,M-,F-} i := left; j := right; m := 0; ii := i; alldone := FALSE; REPEAT If ((j-i) > 10) OR ( (i = ii) and (i < j) ) then BEGIN ij := (i+j) DIV 2; t := A[ij]; k := i; L := j; If (A[i] > t) then begin A[ij] := A[i]; A[i] := t; t := A[ij] end; If (A[j] < t) then begin A[ij] := A[j]; A[j] := t; t := A[ij]; If (A[i] > t) then begin A[ij] := A[i]; A[i] := t; t := A[ij] end; end; d := FALSE; REPEAT REPEAT L := L - 1; UNTIL A[L] <= t; REPEAT k := k + 1; UNTIL A[k] >= t; If (k <= L) then begin tt := A[L]; A[L] := A[k]; A[k] := tt; end Else d := TRUE; UNTIL d; If (L-i) > (j-k) then begin IL[m] := i; IU[m] := L; i := k end Else begin IL[m] := k; IU[m] := j; j := L end; m := m + 1; END Else BEGIN For ix := (i+1) to j do begin t := A[ix]; k := ix - 1; If A[k] > t then begin REPEAT A[k+1] := A[k]; k := k - 1; UNTIL A[k] <= t; A[k+1] := t; end; end;{For ix} m := m - 1; If m >= 0 then begin i := IL[m]; j := IU[m]; end Else alldone := TRUE; END; UNTIL alldone; END;{of QQSORT} {$C+,M+,F+} [i] := t; t := A[ij] end; end; d := FALSE; REPEAT REPEAT L := L - 1; UNTIL A[L] <= t; REPEAT k := k + 1; UNTIL A[k] >= t; If (k <= L) then begin tt := A[L]; A[L] := A[k]; A[k] := tt; end Else d := TRUE; UNTIL d; If (L-i) > (j-k) then begin IL[m] := i; IU[m] := L; i := k end Else begin IL[m] := k; IU[m] := j; j := L end; m := m + 1; END Else BEGIN For ix := (i+1) to j do begin t := A[ix]; k := ix - 1; If A[k] > t then begin REPEAT A[k+1] := A[k]; k := k - 1; UNTIL A[k] <= t; A[k+1] := t; end; end;{For ix} m := m - 1; If m >= 0 then begin i := IL[m]; j := IU[m]; end Else alldone := TRUE; END; UNTIL alldon{++++++++++++++++++++++++++++++++++++++++++++++++++++++++} {+ PROGRAM TITLE: Quick sort with minimal storage +} {+ Test Program +} {+ +} {+ WRITTEN BY: Raymond E. Penley +} {+ DATE WRITTEN: October 5, 1980 +} {+ +} {+ A program to show the speed of the quick sort +} {+ with minimal storage algorithm. +} {+ +} {+ Average sorting times in seconds * +} {+ No. of items Shellsort Quicksort QQuicksort +} {+ 1000 15 8 7 +} {+ 2000 34 20 14 +} {+ 5000 112 50 37 +} {+ 10,000 213 106 78 +} {+ +} {+ * Z80 CPU operating at 2 mcps +} {+ +} {++++++++++++++++++++++++++++++++++++++++++++++++++++++++} PROGRAM QuickerQuickSortTest; CONST Max_N = 10000; TYPE index = 0..Max_N; Scalar = INTEGER; VAR cix : char; N, i, ix : Scalar; A : ARRAY [index] OF Scalar; Procedure Show; var i: index; begin for i:=1 to N do begin write(A[i]); if i mod 8 = 0 then writeln; end; writeln; end; PROCEDURE QQSORT( left, right : INTEGER ); { + WRITTEN BY: Richard C. Singleton + DATE WRITTEN: Sept 17, 1968 + + This procedure sorts the elements of array A[1..n] into ascending order. The method used is similar to QUICKERSORT by R.S. Scowen, which in turn is similar to an algorithm given by Hibbard and to Hoare's QUICKSORT. + + Modified 6 Oct 1980 for Pascal/Z. +} { GLOBAL TYPE Index = 1..N; Scalar = VAR A : array [Index] of Scalar; } VAR t, tt: Scalar; ii, ij, k, L, m : integer; IL, IU : array [0..20] of integer;{Permit sorting up to 2**(K+1)-1 elements} i, j, ix : integer; alldone, d : BOOLEAN; BEGIN {$C-,M-,F-} i := left; j := right; m := 0; ii := i; alldone := FALSE; REPEAT If ((j-i) > 10) OR ( (i = ii) and (i < j) ) then BEGIN ij := (i+j) DIV 2; t := A[ij]; k := i; L := j; If (A[i] > t) then begin A[ij] := A[i]; A[i] := t; t := A[ij] end; If (A[j] < t) then begin A[ij] := A[j]; A[j] := t; t := A[ij]; If (A[i] > t) then begin A[ij] := A[i]; A[i] := t; t := A[ij] end; end; d := FALSE; REPEAT REPEAT L := L - 1; UNTIL A[L] <= t; REPEAT k := k + 1; UNTIL A[k] >= t; If (k <= L) then begin tt := A[L]; A[L] := A[k]; A[k] := tt; end Else d := TRUE; UNTIL d; If (L-i) > (j-k) then begin IL[m] := i; IU[m] := L; i := k end Else begin IL[m] := k; IU[m] := j; j := L end; m := m + 1; END Else BEGIN For ix := (i+1) to j do begin t := A[ix]; k := ix - 1; If A[k] > t then begin REPEAT A[k+1] := A[k]; k := k - 1; UNTIL A[k] <= t; A[k+1] := t; end; end;{For ix} m := m - 1; If m >= 0 then begin i := IL[m]; j := IU[m]; end Else alldone := TRUE; END; UNTIL alldone; END;{of QQSORT} {$C+,M+,F+} BEGIN (* MAIN *) repeat writeln; writeln('Enter number of items to sort'); writeln(' 10 <= n <= 10,000'); write('?'); readln(N); until (N >= 10) and (N <= Max_N); writeln; writeln('Please stand by while I set up.'); {$C-,M-,F- [ctrl-c OFF]} ix := 113; FOR i := 1 TO N DO BEGIN ix := (131*ix+1) mod 221; A[i] := ix; if (i mod 1000 = 0) then write(i); END; writeln; A[0] := -maxint; {$C+,M+,F+ [ctrl-c ON]} writeln('Ready'); WRITE('Press return when ready to start'); readln(cix); writeln( CHR(7), 'START'); {} QQSORT( 1, N ); {} WRITELN( CHR(7), 'DONE!!!' ); writeln; write('Print the array (Y/N)?'); readln(cix); If (cix='Y') or (cix='y') then Show; END. *+*+w!*w##w!( F##N͑ ͑i^#V!{!! !!! !!!}String too lonCall by reference precision erroIndex or value out of rangAttempted divide by zerMultiply overfloStack overflo -- statementFloating point overflow/underflo ͙w6nfV+^?Ҷnf')!ͧ! V+^nfmW_R–M(j}́4# 4F!ÿ͙nf tunfW_Rcnfutunf ^VRtuw6++nfV+^?^nftuwnf^V')f n RV+^nf')f n RV+^?ҏ6<nf')f n RV+^rsnf')f n R^Vnf')f n RV+^r+snf^V')f n R^Vr+snf^VRtunf^Qݾ;4# 4_!! ÿ!ر9!!9Rctros ot smeti fo rebmun retnE!!9!!000,01 =< n =< 01 !!9!!!?e3 ̀M(j}́nf ?Ҁnf'IҀ .pu tes I elihw yb dnats esaelP!!9!R#w6qw6+nfV+^? nf~#tunf')!ͧ^Vr+snfW_R! nf4# 4!è66ydaeR!!9!2 !trats ot ydaer nehw nruter sserP ! !9!V $̀!!e3TRATS!!9! nf!!e3!!!ENOD!!9!?)N/Y( yarra eht tnirP!!9!!̀gn}Y|vgn}y|y.È/ կNT]F(###8;86+++ (ˆ#w+> ###8(G+++ˆ ˎ#Np+y ++Nwy+! uRead beyond EO!PY9G!ݾ Afn( ~^(VfnůV^ ѯݾ z() ,F t J ̎ 9  r+sFfn)8(|(0n({(͙8 ͙w+6 +͙T( F( (Y 7 7 fnpG͙E ,)OG )8x8s(;k ͙ (] (Y (U (Q (M#(1_(-$(){8 [8:86 a8A8 06 W6 zW>( (͙3 ͙T h fn~!9 G_~((BW>__{(+#ܯ>(#> + ٯgk9~fnw Y Y OfnF+ )88͙ ( ( xOw+G #qF ͫ (Y !r fnqGͫ fnp+qG!D͙ (- + ͙:0%08! ;:000⯸x/Gy/Oɯ e!r 9 !T]jjZj_ZfnV^)###++Fwx+0w+z  z û!_ uType error on inpuError in number, try again 9͙ (-(+̙ę3͙0Y :Y ͙3;.(7e(;E(708:8> * DM#4 fnr+s+p+q@ H ͙3;-(+ ͙394 ~+.(:e(DE(@ (85 #~0! 6+w+w+w+w $+66=O~- O+ +~0b bG+~ (0b bWxGxA(DG~ݦ (G  DG !9* * ! !B [ !  4b4b+4P!9w ! b~ݮ w~<ݖ bw !9w#+! +8 +#+*8!(! w#!9~!9w >ݮ w !9w !(@! ~( !  ~( !~ݖ (GOj8y! yG(!4b+~! 4b+~!4b+~! 4b+~!  !  $ѯݾ !9#ɯ#ɯw~(4+ 6v +*5b5ɯݾ T! 9!7(  SxDM!=)#0 |z(z/W{/_|(|/g}/o#  -# zBKgo(0|r#x ygoR>F I###go͞ v v#>F Iˆ###Ogo͞!9 PY FfnV go| }~^(Vfn>Vf(zȯF+#̜] Fng)))V^Ny (#v( vF~+++Nv+G v++ݾ~T8 AOvG vTRUEFALSEF~+++N ( +Nvy(G++G vV^!9 z(6-+goGRw+O'66d6 6E>G #~-   60 +A~8 ( W v Nv++++!9ѯɯR0 >0w+ G fnN++͂| z   ́>+++###͵###@8^͙+++ˎ˞˦0 ###͌+++go0 | }!uToo many open output file!uBad output file nam#}( ##|#(}#790!9G AN͑+ ͑9 }r+sPYO>xģ90#fn##|###Č!d !,/ R0Á?h`iIhIhPY?h *~+o^#~ osFslsNlsgi#9A9 N͑+ ͑#`i###^(?"!5~< #5 #5'"x(  S_xDM!=()8 )0 0)+} E˸$}($0##0""L$q#s#r!(F!#6!*!!4 #4 #4!!%p  6++w+(0˞0 :(*55*+Fx8 !+70w |8(.(w#H (#09a8{0_ +++f###%(6ʼï0y%4fʏ###"!5~< #5~< #5'"! 6!'!44~0#4 #4!!4 #4 #4! 6!!%660)~6<(3' " ^##w0! ! ! !uDisk erroError in extending filDisk fulDirectory fulBad filename *^#~ 84 0#6*6O  ͑ ́0*6#~P( 4^q05 ͑70~Ó#%~#? P~4   76<+w_##~0 0>00Y0%6#6x0$^|gR?|h7R|g7R?|hRb$ɯ7|z(z/W{/_|(|/g}/o# ((!= goRW_= DM(go*7ɯt <) 0 do begin m := m DIV 2; k := n - m; for j:=1 to k do begin i := j; done := FALSE; repeat if A[i+m] >= A[i] then done := TRUE else begin temp := A[i]; A[i] := A[i+m]; A[i+m] := temp; i := i - m; end; until (i<1) OR ( done ); end{for j}; end{While}; end;{Shellsort}{$C+,M+,F+} {++++++++++++++++++++++++++++++++++++++++++++++++++++++++} {+ PROGRAM TITLE: Shell Sort Test +} {+ +} {+ WRITTEN BY: Raymond E. Penley +} {+ DATE WRITTEN: 5 October 1980 +} {+ +} {+ SUMMARY: +} {+ This program demonstrates the Shell sort +} {+ algorithm. +} {+ +} {+ Average sorting times in seconds * +} {+ No. of items Shellsort Quicksort QQuicksort +} {+ 1000 15 8 7 +} {+ 2000 34 20 14 +} {+ 5000 112 50 37 +} {+ 10,000 213 106 78 +} {+ +} {+ * Z80 CPU operating at 2 mcps +} {+ +} {++++++++++++++++++++++++++++++++++++++++++++++++++++++++} PROGRAM Shellsorttest; CONST Max_N = 10000; TYPE INDEX = 0..Max_N; SCALAR = INTEGER; ScalarTyp = ARRAY [ INDEX ] OF SCALAR; VAR cix : char; {Global temp for char inputs} A : ScalarTyp; N, {The number of numbers to be sorted.} i, ix : INTEGER; {Global indexer} Procedure Show; var i: index; begin for i:=1 to N do begin write(A[i]); if i mod 8 = 0 then writeln; end; writeln; end; PROCEDURE Shellsort(VAR A : ScalarTyp; n : INDEX); { The array A[1..n] is sorted in ascending order. The method is that of D.A. Shell, (A high-speed sorting procedure, Comm. ACM 2 (1959), 30-32) with subsequences chosen as suggested by T.N. Hibberd. } VAR i, j, k, m : integer; done : BOOLEAN; temp : SCALAR; begin (*$C-,M-,F-*) m := n; While m <> 0 do begin m := m DIV 2; k := n - m; for j:=1 to k do begin i := j; done := FALSE; repeat if A[i+m] >= A[i] then done := TRUE else begin temp := A[i]; A[i] := A[i+m]; A[i+m] := temp; i := i - m; end; until (i<1) OR ( done ); end{for j}; end{While}; end;{Shellsort}{$C+,M+,F+} BEGIN (* Main program SHELLSORT*) Repeat writeln; writeln('Enter number of items to sort'); writeln(' 10 <= n <= 10,000'); write('?'); readln(N); Until (N >= 10) and (N <= Max_N); writeln; writeln('Please stand by while I set up.'); ix := 113; {$C-,M-,F- [ctrl-c OFF]} FOR i := 1 TO N DO BEGIN ix := (131*ix+1) mod 221; A[i] := ix; if (i mod 1000 = 0) then write(i); END; writeln; A[0] := -maxint; {$C+,M+,F+ [ctrl-c ON]} writeln('Ready'); WRITE('Press return when ready to start'); readln(cix); writeln( CHR(7), 'START'); {} Shellsort(A, N ); {} WRITELN( CHR(7), 'DONE!!!' ); writeln; write('Print the array (Y/N)?'); readln(cix); If (cix='Y') or (cix='y') then Show; END.  begin temp := A[i]; A[i] := A[i+m]; A[i+m] := temp; i := i - m; end; until (i<1) OR ( done ); end{for j}; end{While}; end;{Shellsort}{$C+,M+,F+} BEGIN (* Main program SHELLSORT*) Repeat writeln; writeln('En10 'SORTC - A VARIABLE LENGTH, VARIABLE COLMN, AND UNLIMITED 20 'FILE SIZE, SORT PROGRAM - MERGE.BAS IS CALLED TO MERGE 30 'STRINGS CREATED BY THIS SORT. 40 ' IMPROVEMENTS: 50 ' VARIABLE COLUMNS FOR SORT BY INPUT STATEMENT 60 ' RESORT OPTION AFTER MATRIX IS LOADED AND AFTER 70 ' FIRST SORT IS COMPLETED. 80 ' ADDITIONAL FILES OPTIONAL BEFOR TERMINATION. 90 GOSUB 660 100 RESET 110 CLEAR 2500 120 DEFINT I-N,A,B 130 FCNT=100 140 STR=200 150 DIM A$(500) 160 ' 170 PRINT 180 PRINT "Enter file names in upper case-letters." 190 PRINT "FILE NAMES NEED NOT BE EMBEDDED IN QUOTES." 200 PRINT 210 INPUT "WHAT IS THE NAME OF THE ORIGINAL FILE";OLD$ 220 INPUT "WHAT NAME DO YOU WANT FOR THE NEW FILE";NW$ 230 ' 240 OPEN "I",#2,OLD$:I=0 250 ' 260 IF EOF(2) THEN 320 270 I=I+1 280 LINE INPUT #2,A$(I) 290 IF I>STR-1 THEN GOTO 320 300 GOTO 260 310 ' 320 N=I:S=I 330 PRINT: PRINT " ";N;" RECORDS READ." 340 ' 350 ' THIS STARTS THE ACTUAL SORT 360 ' 370 GOSUB 660 'CLEAR SCREEN 380 F$="0 1 2 3 4 5 6 7" 390 G$="1234567890123456789012345678901234567890123456789012345678901234567890" 400 IF A<>B THEN GOTO 430 410 PRINT F$:PRINT G$:PRINT A$(8):PRINT 420 INPUT "ENTER SORT PARMS A,B (A=STARTING COL B=LENGTH OF FIELD)";A,B 430 PRINT: PRINT "STARTING SORT ON COL'S ";A;" THRU ";A+B-1 440 J4=N 450 J4=J4\2 460 IF J4=0 THEN 620 'DONE 470 J2=N-J4 480 J=1 490 I=J 500 J3=I+J4 510 ' 520 ' SORTING COLUMNS ARE DETERMINED BY A,B IN MID$() COMMAND 530 ' THESE VALUES ARE A= STARTING COLUMN B= NUMBER OF COLUMNS. 540 ' 550 IF MID$(A$(I),A,B) <= MID$(A$(J3),A,B) THEN 590 560 SWAP A$(I),A$(J3) 570 I=I-J4 580 IF I>=1 THEN 500 590 J=J+1 600 IF J>J2 THEN 450 610 GOTO 490 620 PRINT "STRING SORT COMPLETED " 630 GOSUB 680 'WRITE SORTED FILE TO DISK STRINGS 640 IF EOF(2) THEN GOTO 830 650 GOTO 260 660 PRINT CHR$(27);"* " 670 RETURN 680 ' HERE TO DO MULTI STRING SORT (LARGE FILES) 690 ' 700 N=S:NT=NT+N 710 FCNT=FCNT+1 720 ' 730 NFIL$=MID$(STR$(FCNT),2,3)+".MFL" 'INCREMENTS NUMBER 740 OPEN "O",#3,NFIL$ 750 FOR I=1 TO S 'WRITE LOOP 760 PRINT #3,A$(I) 770 NEXT I 780 CLOSE #3 790 FOR I=1 TO STR:A$(I)="":NEXT I:I=0 800 PRINT "STRING ";FCNT-100;" SAVED ";S;" RECORDS" 810 IF EOF(2) THEN IF FCNT=101 THEN GOTO 830 820 RETURN 830 PRINT "STRINGS COMPLETED " 840 PRINT "RECORDS READ = ";NT 850 PRINT "FILES GENERATED = ";FCNT-100 860 N=FCNT 870 CLOSE #1,#2,#3 880 ' STRING MERGE 890 ' 900 MFIL1$="101.MFL" 910 MFIL2$="102.MFL" 920 MFIL3$="N101.MFL" 930 MF=1 940 CH=102 'THERE ARE AT LEAST TWO STRINGS 950 ' 960 OPEN "I",#1,MFIL1$ '1 ST MERGE FILE 970 OPEN "I",#2,MFIL2$ '2 ND MERGE FILE 980 OPEN "O",#3,MFIL3$ '1 ST MERGE OUTPUT FILE 990 ' START MERGE 1000 ' 1010 IF EOF(1) THEN GOTO 1030 1020 LINE INPUT #1,A$ 1030 IF EOF(2) THEN GOTO 1050 1040 LINE INPUT #2,B$ 1050 IF EOF(1) THEN IF EOF(2) THEN CLOSE #3:END 1060 IF MID$(A$,A,B)>MID$(B$,A,B) THEN GOTO 1110 1070 PRINT #3,A$:RC=RC+1 1080 IF EOF(1) THEN GOTO 1150 1090 LINE INPUT #1,A$ 1100 GOTO 1060 1110 PRINT #3,B$:RC=RC+1 1120 IF EOF(2) THEN GOTO 1200 1130 LINE INPUT #2,B$ 1140 GOTO 1060 1150 CLOSE #1 1160 PRINT #3,B$:RC=RC+1 1170 IF EOF(2) THEN CLOSE #3:CLOSE #2:GOTO 1250 1180 LINE INPUT #2,B$ 1190 GOTO 1160 1200 CLOSE #2 1210 PRINT #3,A$:RC=RC+1 1220 IF EOF(1) THEN CLOSE #3:CLOSE #1:GOTO 1250 1230 LINE INPUT #1,A$ 1240 GOTO 1210 1250 PRINT "MERGE ";MF;" COMPLETE " 1260 KILL "101.MFL" 1270 KILL MFIL2$ 1280 NAME "N101.MFL" AS "101.MFL" 1290 IF CH=N THEN GOTO 1350 1300 RC=0 1310 CH=VAL(MID$(MFIL2$,1,3))+1 1320 MF=CH 1330 MID$(MFIL2$,1,3)=MID$(STR$(CH),2,3) 1340 GOTO 960 1350 PRINT "FINAL MERGE COMPLETED " 1360 PRINT "RECORDS PROCESSED = ";RC 1370 CLOSE 1380 NAME "101.MFL" AS NW$ 1390 PRINT "NEW FILE NAME = ";NW$ 1400 END  " 1360 PRINT "RECORDS PROCESSED = ";RC 1370 CLOSE 1380 NAME "101.MFL" AS NW$ 1390 PRI30 NFIL$=MID$(STR$(FCNT),2,3)+".MFL" 'INCREMENTS NUMBER 740 OPEN "O",#3,NFIL$ 750 FOR I=1 TO S 'WRITE LOOP 760 PRINT #3,A$(I1 !]~ nʂ?ʂ!e={! m!""""|"}\'>2ͣʳ gͣʳ ʏʳ*#"V_~#~#~LÂ*#"**mʧ"!"V:<2*}r\!""|"}>2!"ͣ[[  *w#":<2 NO. TO BIG$:2!bF~ :g:o‚*xI6 #A+6 #6 #6"2*"#6:<2:o&͓:=2k!e!"|"}\!"|"~\!>_2~2~%G #~  x> ͿV> ͿV> ## ͿV#~4G:4> ͿV> ͿVx2xͿV#÷ͿV>2ͿVFÂBAD SORT!$SORT COMPLETED.$\ SORRY DISK IS FULL.$x SORRY FILE IS TOO SMALL.$kb":O "*m:G~~4O4*Ö#~4O4#**:GNwy#"*"!b*m.Ö͈Óa{ #=~# Z_͕L͈ɧw#cGwx}o|g҃=}<|͚}͚GƐ'@'_͵xƐ'@'_:L:<o&6,\#\ ͈OyWONT CLOSE FILE ERROR.$1͈CANT WRITE FILE ERROR.$f<2s\H!}26,m:o&2w ͕ ͕:ʼ<2&o~>2!"|"~\\>ò 7 ERROR - MISSING FILE ON DISK $G~#xCAN NOT FIND FILE!$CAN NOT OPEN FILE$SORRY CAN NOT USE . EXTENSION!$SORTFILE - VER 1.1 BY TOM HARROLD 2643 SOUTH BASCOM AVE. #32 CAMPBELL, CA. 95008 PHONE - 408-371-3197 USE- SORTFILE FILENAME.EXT (CR) THIS WILL SORT ANY KIND OF ASCII FILE. THE RESULTS WILL BE IN A RENAMED EXT. CALLED .SRT... UP TO 255 LINES BY 80 CHARACTERS CAN BE SORTED. NOTE- THE RESULT FILE WILL BE BIGGER THAN THE ORGINAL FILE. $ 408-371-3197 USE- SORTFILE FILENAME.EXT (CR) THIS WILL SORT ANY KIND OF ASCII FILE. THE RESULTS WILL BE IN A RENAMED EXT. CALLED .SRT... UP TO 255 LINES BY 80 CHARACTERS CAN BE SORTED. NOTE- THE RESULT FILE WILL BE BIGGER THAN THE ORGINAL FILE. SRT8-371-3197 USE- SOR???COMASMCOBFORHEXINTLIBMACOBJPASPCOPRLRELSRCSUB$$$ ͕ ͕:ʼ<2&o~>2!"|"~\\>ò 7 ERROR - MISSING FILE ON DISK $G~#xCAN NOT FIND FILE!$CAN NOT OPEN FILE$SORRY CAN NOT USE . EXTENSION!$SORTFILE - VER 1.1 BY TOM HARROLD 2643 SOUTH BASCOM AVE. #32 CAMPBELL, CA. 95008 PHONE - 408-371-3197 USE- SORTFILE FILENAME.EXT (CR) THIS WILL SORT ANY KIND OF ASCII FILE. THE RESULTS WILL BE IN A RENAMED EXT. CALLED .SRT... UP TO 255 LINES BY 80 CHARACTERS CAN BE SORTED. NOTE- THE RESULT FILE WILL BE BIGGER THAN THE ORGINAL FILE. $ 408-371-3197 USE- SORTFILE FILENAME.EXT (CR) THIS WILL SORT ANY KIND OF ASCII FILE. THE RESULTS WILL BE IN A RENAMED EXT. CALLED .SRT... UP TO 255 LINES BY 80 CHARACTERS CAN BE SORTED. NOTE- THE RESULT FILE WILL BE BIGGER THAN THE ORGINAL FILE. SRT8-371-3197 USE- SOR???COMASMCOBFORHEXINTLIBMACOBJSORTFILE DEC. 3, 1984 BY TOM HARROLD I made sortfile as simple as I can. I wanted to sort a Wordstar file containing a list of movies on video tapes. It was a neat project for me to do when I had > 100 video tapes. Have you ever try to find the tape that has 2001 A Space Odyssey movie well, let me tell you it takes a long time to find it without an inventory list. a list that gives you the tape number and in what box number its in, is'nt that nice! Sortfile.com will sort in alphabetical order form A to Z. No other options like sort Z to A available. Sortfile was intented to sort a ascii file size of 255 lines at 80 characters per line. the sorting starts at the begining of a line until the end of line. Of course a carriage return and a line feed means end of a line. To use sortfile type the following: SORTFILE YOURFILE YOU MAY TYPE: SORTFILE THIS WILL GIVE YOU A BRIEF MESSAGE OF HOW TO USE SORTFILE. The final sorted file will be your filename with .SRT extention.  for example: A>SORTFILE TOM.TXT A>DIR TOM.* TOM TXT : TOM SRT One feature that I put in the program is the following example. I made one attempted to write it. but I found using an example to show what it does, is better. act ape apple cat bat hat hate This is a small list of words in a sorted file. Note the blank lines separating groups determine by the first character in each line. Be my guest, go ahead and try it, you can't break it. end. TOM HARROLD r form A to Z. No other options like sort Z to A available. Sortfile was intented to sort a ascii file size of 255 lines at 80 characters per line. the sorting starts at the begining of a line until the end of line. Of course a carriage return and a line feed means end of a line. To use sortfile type the following: SORTFILE YOURFILE YOU MAY TYPE: SORTFILE THIS WILL GIVE YOU A BRIEF MESSAGE OF HOW TO USE SORTFILE. The final sorted file will be your filename with .SRT extention. 3 REM SORTKYBD.BAS MBASIC 5.2 CP/M ver 4/12/81 5 REM SORT LISTS KEYED IN TO PROGRAM & DISPLAY ON CRT. 6 E$=CHR$(27):CLR$=E$+"E":PRINT CLR$:PRINT:PRINT 7 PRINT " ";E$;"p";" SORT PROGRAM FOR LISTS KEYED IN. ";E$;"q" 9 PRINT:PRINT 10 REM ******CHARACTER STRING / NUMBER SORT****** 20 REM ******FROM CP/M USERS GROUP 5.22****** 30 REM EDITED BY KEITH PETERSEN, W8SDZ 40 CLEAR 500 50 DIM N(150),C$(150) 60 PRINT:PRINT "TYPE C FOR CHARACTER (alphabetic) STRING SORT, .... or" 65 PRINT 70 PRINT "TYPE N FOR NUMBER SORT. (Numeric items only). "; 80 INPUT W$ 90 N=0 100 PRINT 110 IF W$="N" THEN 480 112 IF W$="n" THEN 480 115 IF W$="C" THEN 140 117 IF W$="c" THEN 140 120 GOTO 60 130 REM **********CHARACTER STRING SORT ROUTINE*********** 140 GOSUB 770 150 INPUT S$ 160 PRINT 163 PRINT "BEGIN ENTERING ALPHABETIC ITEMS. ENTER ";S$; 164 PRINT "TO END YOUR LIST AND BEGIN THE SORTING.":PRINT 170 N=N+1 180 INPUT C$(N) 190 IF C$(N)<>S$ THEN 170 200 N=N-1 210 PRINT 220 L=INT(N/2)+1 230 N1=N 240 IF L=1 THEN 280 250 L=L-1 260 A$=C$(L) 270 GOTO 320 280 A$=C$(N1) 290 C$(N1)=C$(1) 300 N1=N1-1 310 IF N1=1 THEN 430 320 J=L 330 I=J 340 J=2*J 350 IF J=N1 THEN 390 360 IF J>N1 THEN 420 370 IF C$(J)>=C$(J+1) THEN 390 380 J=J+1 390 IF A$>=C$(J) THEN 420 400 C$(I)=C$(J) 410 GOTO 330 420 C$(I)=A$:GOTO 240 430 C$(1)=A$ 440 FOR I=1 TO N 450 PRINT C$(I):NEXT I 460 PRINT CLR$:GOTO 60 470 REM *************NUMBER SORTING ROUTINE************* 480 GOSUB 770 483 PRINT:PRINT:PRINT "...item must be numeric, it can be +, -, or period." 490 INPUT S:PRINT 500 N=N+1 510 INPUT N(N) 520 IF N(N)<>S THEN 500 530 N=N-1 540 PRINT 550 L=INT(N/2)+1 560 N1=N 570 IF L=1 THEN 600 580 L=L-1 590 A=N(L):GOTO 630 600 A=N(N1):N(N1)=N(1) 610 N1=N1-1 620 IF N1=1 THEN 730 630 J=L 640 I=J 650 J=2*J 660 IF J=N1 THEN 690 670 IF J>N1 THEN 720 680 IF N(J)N(J) THEN 720 700 N(I)=N(J) 710 GOTO 640 720 N(I)=A:GOTO 570 730 N(1)=A 740 FOR I=1 TO N:PRINT N(I):NEXT 750 PRINT CLR$:GOTO 60 760 REM **********SUBROUTINE TO INPUT STOP CODE********** 770 PRINT:PRINT "Please enter a 'stop-code'; ...an item not it your " 775 PRINT 780 PRINT "list which will indicate you are finished entering. "; 790 RETURN 800 END  ...an item not it your " 775 PRINT 780 PRINT "list which will indicate you are finished entering. "; 790 RETURN 800 END  750 PRINT CLR$:GOTO 60 760 REM **********SUBROUTINE TO INPUT STOP CODE********** 770 PRINT:PRINT "Please enter a 'stop-code'T "...item must be numeric, it can be +, -, or period." 490 INPUT S:PRINT 500 N=N+1 510 INPUT N(N) 520 IF N(N)<>S THEN 500 530 N=N-1 540 PRINT 550 L=INT(N/2)+1 560 N1=N 570 IF L=1 THEN 600 580 L=L-1 590 A=N(L):GOTO 630 600 A=N(N1):N(N1)=N(1) 610 N1=N1-1 620 IF N1=1 THEN 730 630 J=L 640 I=J 650 J=2*J 660 IF J=N1 THEN 690 670 IF J>N1 THEN 720 680 IF N(J)N(J) THEN 720 700 N(I)=N(J) 710 GOTO 640 720 N(I)=A:GOTO 570 730 N(1)=A 740 FOR I=1 TO N:PRINT N(I):NEXT1SORTV rev 1.3 $ :Rͥ3L++DONE++$!~@#=^~#I:] ʁ:m t@t!l !\ L++Error - Command format requires an input name, and an output name.$\2N#F+ w# w +*\q#p{z "\^#V|7~#+7!"W2h2|!\ \\<*ͭo>!U_!U\L++DONE++$##~!U_~ ¯> !U_^#V|7L++Can't make output file$~# x^#V#N#FxI#~G#~#fo>>}ƀo|g+~+w+++#~g}o|g~ +p+q^#V#N#F w#~½G#~#fo-}ƀo|g{++6+6+p+q^#V#N#F#xyx2N#F+ w# w +*\q#p{z "\^#V|7~#+7!"W2h2|!\ \\<*ͭo>!U_!U\L++DONE++$##~!U_~ ¯> !U_^#V|7L++Can't make output file$~# x^#V#N#FxI#~G#~#fo>>}ƀo|g+~+w+++#~g}o|g~ +p+q^#V#N#F w#~½G#~#fo-}ƀo|g{++6+6+p+q^#V#N#F#xyxNEEDS MAC TO ASSEMBLE<--- ; ;01/03/81 Change stack init. By Keith Petersen, W8SDZ ; ;11/15/80 Add @ command (WLC) ; ;10/24/80 Originally written by Ward Christensen ; ;FORMAT: ; SORTV INPUT-NAME OUTPUT-NAME ; or SORTV NAME ; ;if the second format is used, the file is read into ;memory, sorted, erased, created, and written back. ; ; THE SORT WILL BE BASED ON THE FIRST CHARACTERS ; IN THE FILE, UNLESS THE COMMAND IS FOLLOWED BY ; AN "@" SIGN, THEN A STRING (1 OR MORE CHARACTERS) ; TO SKIP. ; ;EX: SORTV NAMES.SUB @. ; ;WILL SORT NAMES.SUB BY FILETYPE, SINCE IT SKIPS PAST ;THE "." BEFORE DOING THE COMPARE. ; EOF EQU 1AH CR EQU 0DH LF EQU 0AH ; ;(FROM EQU10.LIB...) ; MF SET 0 ;SHOW MOVE NOT REQUESTED CF SET 0 ;SHOW COMP NOT REQUESTED ; ;DEFINE SOME MACROS TO MAKE THINGS EASIER ; ;DEFINE DATA MOVE MACRO: MOVE from,to,length ; from may be addr, or quoted string ; MOVE MACRO ?F,?T,?L MCSUB ?F,?T,?L ;;HANDLE ARGS CALL MOVER MF SET -1 ;;SHOW EXPANSION ENDM ; ;COMPARE MACRO COMP MACRO ?F,?T,?L MCSUB ?F,?T,?L ;;HANDLE ARGS CALL COMPR CF SET -1 ;;SHOW EXPANSION ENDM ; ;MCSUB - HANDLES MOVE, COMPARE ARGUMENTS MCSUB MACRO ?F,?T,?L IF NOT NUL ?F IRPC ?C,?F ?Q SET '&?C&?C' ;;TEST FOR QUOTE EXITM ENDM IF ?Q EQ '''' LOCAL ?B,?Z CALL ?Z ?B DB ?F ?Z POP H ;GET FROM LXI B,?Z-?B ;GET LEN ELSE LXI H,?F ENDIF ENDIF IF NOT NUL ?T LXI D,?T ENDIF IF NOT NUL ?L LXI B,?L ENDIF ENDM ; ;DEFINE CP/M MACRO - CPM FNC,PARM [,NOSAVE] ; CPM MACRO ?F,?P,?N IF NUL ?N PUSH B PUSH D PUSH H ENDIF IF NOT NUL ?F MVI C,?F ENDIF IF NOT NUL ?P LXI D,?P ENDIF CALL BDOS IF NUL ?N POP H POP D POP B ENDIF ENDM ; RDB MACRO ?F PUSH D PUSH H LXI H,?F CALL RDBYTE POP H POP D ENDM ; WRB MACRO ?F PUSH H LXI H,?F CALL WRBYTE POP H ENDM ; EFCB MACRO ?B,?P,?F DW ?B DW 0 DB ?P DW ?F ENDM ; ORG 100H ; ;INIT LOCAL STACK ; LXI SP,STACK ; CALL START DB 'SORTV rev 1.2' DB CR,LF,'$' ; START POP D ;GET ID MVI C,PRINT CALL BDOS ;PRINT ID ; ;START OF PROGRAM EXECUTION ; CALL SVSKIP ;SAVE SKIP INFO CALL CKNAMES ;SEE THAT 2 NAMES ARE THERE CALL OPENIN ;OPEN INPUT FILE CALL READN ;READ THE NAMES CALL SORTN ;SORT THE NAMES CALL WRITEN ;WRITE THE NAMES CALL ERXIT DB '++DONE++$' ; ;====> SUBROUTINES ; ---------------- ; ;====> SAVE "SKIP TO" INFORMATION ; SVSKIP LXI H,81H ; SVSKL MOV A,M ORA A RZ ;NO 'SKIP TO' CPI '@' ;SKIP DELIMITER? INX H JNZ SVSKL LXI D,SKIPC ;CHARS TO SKIP ; SVSKL2 MOV A,M STAX D INX H INX D ORA A JNZ SVSKL2 RET ; ;====> CHECK THAT 2 NAMES WERE SUPPLIED ; CKNAMES LDA FCB+1 CPI ' ' JZ NONAME LDA FCB2+1 CPI ' ' JZ SAMENAM CPI '@' ;SKIP PARM? JZ SAMENAM MOVE FCB2,OUTNAME,12 RET ; ;OUTPUT NAME = INPUT NAME ; SAMENAM MOVE FCB,OUTNAME,12 RET ; NONAME CALL ERXIT DB '++Error - ',CR,LF DB 'Command format requires an ' DB 'input name, and an output name.$' ; ;====> OPEN THE INPUT FILE ; OPENIN CPM OPEN,FCB INR A RNZ ;SUCCESSFUL? RETURN CALL ERXIT DB '++Input file not found$' ; ;====> READ IN THE NAMES ; READN LXI H,BUFF ;TO FIRST NAME ; READNL CALL READL ;READ ONE LINE RC ;GOT EOF, RETURN CALL CHAIN ;CHAIN THINGS TOGETHER JMP READNL ; ;====> READ ONE LINE ; READL SHLD CURR ;SAVE CURR LINE PTR XRA A ;GET 0 MOV M,A ;INIT FORWARD INX H ; POINTER MOV M,A ; TO INX H ; 0 LXI D,SKIPC ;TO CK SKIP CHARS PRESENT ; READLLP LDA BDOS+2 ;ARE WE DCR A ; OVER- CMP H ; FLOW- JZ OFLO ; ING? RDB EXTFCB ;READ A BYTE CPI EOF ;SET CARRY STC ; AND RETURN RZ ; IF EOF MOV M,A ;STORE CHAR ;TEST FOR SKIP CHAR FOUND MOV B,A ;SAVE FOR COMPARE LDAX D ORA A ;NO MORE SKIP CHARS? JZ READLNS ;NO MORE CMP B ;A SKIP CHAR? JNZ READLNS ;NO, KEEP TRYIN. INX D ;TO NEXT SKIP CHAR ; READLNS INX H ;POINT TO NEXT MOV A,B ;GET CHAR CPI CR ;END OF LINE? JNZ READLLP ; NO, LOOP. RDB EXTFCB ;GOBBLE UP LF LDAX D ;GET SKIP CHAR END ORA A ;TEST IT AND SET "NO EOF" RZ ;ERROR - NO SKIP CHAR LHLD CURR INX H ;SKIP INX H ; POINTER ; ERPLP MOV E,M CPM WRCON MOV A,M INX H CPI CR JNZ ERPLP CALL ERXIT DB LF,'++NO SKIP CHAR FOUND++$' ; OFLO CALL ERXIT DB '++File won''t fit in memory$' ; ;====> CHAIN RECORDS TOGETHER ; CHAIN PUSH H ;SAVE POINTER LHLD CURR ;GET CURRENT XCHG ; TO DE LHLD PREV ;PREV TO HL MOV M,E ;MOVE CURR INX H ; TO MOV M,D ; PREV XCHG ;THEN MOVE SHLD PREV ; PREV TO CURR POP H RET ; ;====> SORT THE NAMES ; SORTN XRA A ;SHOW NO STA SWAPS ; SWAPS LXI H,PTR ;POINT PREV SHLD PREV ; TO PTR LHLD PTR ;POINT TO FIRST ; ;HANDLE WIERD CASE OF ONLY ONE NAME ; MOV A,M ;GET POINTER INX H ;POINT TO NEXT ORA M ;OR TOGETHER DCX H ;BACK UP RZ ;RETURN IF ONLY ONE ; SORTL CALL CMPR ;COMPARE ENTRIES CC SWAP ;SWAP IF WRONG ORDER CALL NEXT ;POINT TO NEXT JNC SORTL ;LOOP IF MORE LDA SWAPS ;ANY ORA A ; SWAPS? JNZ SORTN ;YES, LOOP RET ;NO, RETURN ; ;----> COMPARE TWO NAMES ; CMPR PUSH H ;SAVE POINTER MOV E,M ;GET NEXT INX H ; POINTER MOV D,M ; TO DE INX D ;ALIGN POINTERS ; ;SKIP IF NECESS ; LXI B,SKIPC ; TSTSKIP LDAX B ORA A JZ COMPL ;NO SKIP INX B ; SKIP1 INX H CMP M JNZ SKIP1 XCHG ;SWAP ; SKIP2 INX H CMP M JNZ SKIP2 XCHG ;PUT THINGS BACK JMP TSTSKIP ; COMPL INX D ;TO NEXT INX H ;TO NEXT LDAX D ;GET ONE CMP M ;COMPARE JNZ COMPNE ;NO COMPARE CPI CR ;END? JNZ COMPL ; NO, LOOP ; COMPH POP H ;RESTORE POINTER RET ;THEY ARE EQUAL ; ;COMPARE NOT EQUAL - SEE IF END OF ELEMENT, ;AND IF SO, CALL THEM EQUAL ; COMPNE MOV A,M CPI CR JZ COMPH LDAX D CMP M JMP COMPH ;CARRY SET AS APPROP ; ;----> SWAP ENTRIES ; ;LOGIC: PTR points to some entry, which points ;to another entry. They are not in order. Thus: ;point PTR to the second, point the second to ;the first, and point the first to what the ;second USED to point to. ; SWAP MVI A,1 STA SWAPS ;SHOW WE SWAPPED ;BC=NEXT MOV C,M INX H MOV B,M DCX H ;CHAIN CURRENT TO NEXT ONES CHAIN LDAX B MOV M,A INX B INX H LDAX B MOV M,A DCX B DCX H ;SAVE CURRENT POINTER IN DE XCHG ;GET POINTER TO PREV LHLD PREV ;POINT PREV TO NEXT MOV M,C INX H MOV M,B ;STORE CURR IN NEXT MOV A,E STAX B INX B MOV A,D STAX B DCX B ;RESTORE CURRENT POINTER XCHG RET ;CURRENT POINTER IN DE ; ;----> GET NEXT ENTRY, CARRY IF NOT 2 MORE ; NEXT SHLD PREV ;SAVE POINTER MOV E,M INX H MOV D,M XCHG ;HL= NEXT MOV A,H ;CARRY ON ORA L ; IF HL STC ; = RZ ; 0 MOV A,M ;GET INX H ;SEE IF THERE ORA M ; IS DCX H ; ANOTHER RNZ ;THERE IS ANOTHER STC ;SHOW NOT 2 TO SWAP RET ; ;====> WRITE THE NAMES ; WRITEN LXI H,0 ;INIT SHLD EXTFCB+2 ; EFCB XRA A ;INIT STA FCBEXT ; THE STA FCBRNO ; FCB MOVE OUTNAME,FCB,12 ;RESTORE NAME CPM ERASE,FCB CPM MAKE,FCB INR A ;MAKE OK? JZ BADOUT ; NO, ERROR LHLD PTR ;GET FIRST ; WNLP CALL WRITEL ;WRITE ONE LINE JNC WNLP ;LOOP IF MORE MVI A,EOF ;WRITE EOF WRB EXTFCB ; CHAR LXI H,EXTFCB ;FLUSH CALL FLUSH ; BUFFERS CPM STDMA,80H ;RESET DMA CPM CLOSE,FCB ;CLOSE, CALL ERXIT ; AND EXIT DB '++DONE++$' ; WRITEL PUSH H ;SAVE POINTER INX H ; WRLP INX H ;TO NEXT CHAR MOV A,M ;GET CHAR WRB EXTFCB ;WRITE IT MOV A,M ;SEE IF END CPI CR ; OF LINE JNZ WRLP ;NO, LOOP MVI A,LF ;OTHERWISE WRB EXTFCB ; WRITE LF POP H ;GET POINTER MOV E,M ;GET INX H ; FORWARD MOV D,M ; POINTER XCHG ;PUT IT IN HL MOV A,H ;IS POINTER ORA L ; ZERO? RNZ ;NO, RETURN STC ;CARRY SHOWS END RET ; BADOUT CALL ERXIT DB '++Can''t make output file$' ; ;FOLLOWING FROM 'EQU10.LIB'----> ; ;MOVE, COMPARE SUBROUTINES ; IF MF ;MACRO EXPANSION FLAG SET? MOVER MOV A,M STAX D INX H INX D DCX B MOV A,B ORA C JNZ MOVER RET ENDIF ; IF CF ;MACRO EXPANSION FLAG SET? COMPR LDAX D CMP M RNZ INX D INX H DCX B MOV A,B ORA C JNZ COMPR RET ENDIF ; ; FROM EQU10.LIB: AS OF 07/19/80 ; ;RDBYTE, HL POINTS TO EXTENDED FCB: ; ; 2 BYTE BUFFER ADDR ; 2 BYTE "BYTES LEFT" (INIT TO 0) ; 1 BYTE BUFFER SIZE (IN PAGES) ; 2 BYTE FCB ADDRESS ; RDBYTE MOV E,M INX H MOV D,M ;GET BUFFER ADDR INX H MOV C,M INX H MOV B,M ;BC = BYTES LEFT MOV A,B ;GET COUNT ORA C JNZ RDBNORD ;NO READ ; INX H ;TO BUFFER SIZE MOV A,M ;GET COUNT ADD A ;MULTIPLY BY 2 MOV B,A ;SECTOR COUNT IN B INX H ;TO FCB PUSH H ;SAVE FCB POINTER MOV A,M ;GET.. INX H ;..FCB.. MOV H,M ;..ADDR.. MOV L,A ;..TO HL ; RDBLP MVI A,1AH ;GET EOF CHAR STAX D ;SAVE IN CASE EOF PUSH D ;SAVE DMA ADDR PUSH H ;SAVE FCB ADDR CPM STDMA ;SET DMA ADDR POP D ;GET FCB CPM READ ORA A POP H ;HL=DMA, DE=FCB JNZ RDBRET ;GOT EOF MOV A,L ADI 80H ;TO NEXT BUFF MOV L,A MOV A,H ACI 0 MOV H,A XCHG ;DMA TO DE, FCB TO HL DCR B ;MORE SECTORS? JNZ RDBLP ;YES, MORE ; RDBRET POP H ;GET FCB POINTER DCX H ;TO LENGTH MOV A,M ;GET LENGTH DCX H ;TO COUNT MOV M,A ;SET PAGE COUNT DCX H ;TO LO COUNT DCX H ;TO HI FCB DCX H ;TO EFCB START JMP RDBYTE ;LOOP THRU AGAIN ; RDBNORD INX H ;TO LENGTH MOV A,M ;GET LENGTH (PAGES) XCHG ;BUFF TO HL ADD H MOV H,A ;HL = END OF BUFF MOV A,L SUB C MOV L,A MOV A,H SBB B MOV H,A ;HL = DATA POINTER MOV A,M ;GET BYTE XCHG ;EFCB BACK TO HL CPI 1AH ;EOF? RZ ;YES, LEAVE POINTERS DCX B ;DECR COUNT DCX H ;BACK TO "BYTES LEFT" MOV M,B DCX H MOV M,C ;STORE BACK COUNT RET ; ;SAMPLE EFCB: ; ;EFCB DW BUFF ;BUFFER ADDR ; DW 0 ;BYTES LEFT (OR TO WRITE) ; DB 20 ;BUFFER SIZE (IN PAGES) ; DW FCB ;FCB ADDRESS ; ; ;WRBYTE, HL POINTS TO EXTENDED FCB: ; ; 2 BYTE BUFFER ADDR ; 2 BYTE "BYTES LEFT" (INIT TO 0) ; 1 BYTE BUFFER SIZE (IN PAGES) ; 2 BYTE FCB ADDRESS ; WRBYTE MOV E,M INX H MOV D,M ;DE=BUF ADDR INX H MOV C,M INX H MOV B,M ;BC=BYTES IN BUFF PUSH D ;SAVE FCB XCHG DAD B ;TO NEXT BYTE MOV M,A ;STORE IT INX B ;ONE MORE XCHG POP D ; ;SEE IF BUFFER IS FULL ; INX H ;GET MOV A,M ; SIZE CMP B ;FULL? JNZ WRBNOWR ;NO WRITE ; ADD A ;MULTIPLY BY 2 MOV B,A ;SECTOR COUNT IN B INX H ;TO FCB PUSH H ;SAVE FCB POINTER MOV A,M ;GET.. INX H ;..FCB.. MOV H,M ;..ADDR.. MOV L,A ;..TO HL ; WRBLP PUSH D ;SAVE DMA ADDR PUSH H ;SAVE FCB ADDR CPM STDMA ;SET DMA ADDR POP D ;GET FCB CPM WRITE ORA A POP H ;HL=DMA, DE=FCB JNZ WRBERR ;GOT ERR MOV A,L ADI 80H ;TO NEXT BUFF MOV L,A MOV A,H ACI 0 MOV H,A XCHG ;DMA TO DE, FCB TO HL DCR B ;MORE SECTORS? JNZ WRBLP ;YES, MORE ; WRBRET POP H ;GET FCB POINTER DCX H ;TO LENGTH DCX H ;TO COUNT MVI M,0 ;SET 0 TO WRITE DCX H ;TO LO COUNT MVI M,0 CPM STDMA,80H RET ; WRBNOWR DCX H ;TO LENGTH MOV M,B ;SET NEW LENGTH DCX H MOV M,C RET ; ;FLUSH THE EFCB BUFFERS ; FLUSH MOV E,M INX H MOV D,M ;DE=BUF ADDR INX H MOV C,M INX H MOV B,M ;BC=BYTES IN BUFF INX H ;TO COUNT MOV A,B ORA C RZ ;NOTHING TO WRITE MOV A,C ;GET LOW COUNT ADD A ;SHIFT HIGH TO CARRY MOV A,B ;GET LOW COUNTAL RAL ;MULT BY 2, + CARRY INR A ;FUDGE FOR PARTIAL SECT MOV B,A ;SAVE SECTOR COUNT INX H ;TO FCB MOV A,M INX H MOV H,M MOV L,A ;HL=FCB ; FLUSHL CPM STDMA XCHG CPM WRITE XCHG ORA A JNZ WRBERR PUSH H LXI H,80H DAD D XCHG POP H DCR B JNZ FLUSHL XCHG CPM CLOSE INR A RNZ CALL ERXIT DB '++OUTPUT FILE CLOSE ERROR ++$' ; WRBERR CALL ERXIT DB '++OUTPUT FILE WRITE ERROR++$' ; ;EXIT WITH ERROR MESSAGE ; MSGEXIT EQU $ ;EXIT W/"INFORMATIONAL" MSG ; ERXIT POP D ;GET MSG MVI C,PRINT CALL BDOS ; ;EXIT, RESTORING STACK AND RETURN ; EXIT JMP 0 ; ;====> START OF WORK AREA ; EXTFCB EFCB DKBUF,4,FCB PREV DW PTR ;POINTER TO PREV POINTER SKIPC DB 0 ;SKIP CHARS END DS 8 ;VARIABLE SKIP CHARS ; DS 100 ;STACK AREA STACK EQU $ ; OUTNAME DS 12 ;OUTPUT FILENAME SWAPS DS 1 CURR DS 2 PTR DS 2 ;POINTER TO FIRST NAME ORG ($+255) AND 0FF00H ;TO PAGE DKBUF DS 256*4 ;4 PAGES OF BUFFER BUFF EQU $ ;NAMES READ IN HERE ; ;BDOS/CBIOS EQUATES (VERSION 10) ; RDCON EQU 1 WRCON EQU 2 PRINT EQU 9 RDCONBF EQU 10 CONST EQU 11 OPEN EQU 15 CLOSE EQU 16 SRCHF EQU 17 SRCHN EQU 18 ERASE EQU 19 READ EQU 20 WRITE EQU 21 MAKE EQU 22 REN EQU 23 STDMA EQU 26 BDOS EQU 5 FCB EQU 5CH FCB2 EQU 6CH FCBEXT EQU FCB+12 FCBRNO EQU FCB+32 ; END INR A RNZ CALL ERXIT DB '++OUTPUT FILE CLOSE ERROR ++$' ; WRBERR CALL ERXIT DB '++OUTPUT FILE WRITE ERROR++$' ; ;EXIT WITH ERROR MESSAGE ; MSGEXIT EQU $ ;EXIT W/"INFORMATIONAL" MSG ; ERXIT POP D ;GET MSG MVI C,PRINT CALL BDOS ; ;EXIT, RESTORING STACK AND RETURN ; EXIT JMP 0 ; ;====> START OF WORK AREA ; EXTFCB EFCB DKBUF,4,FCB PREV DW PTR ;POINTER TO PREV POINTER SKIPC DB 0 ;SKIP CHARS END DS 8 ;VARIABLE SKIP CHARS ; DS 100 ;STACK AREA STACK EQU $ ; OUTNAME DS 12 ;OUTPU* b͸{86\pw{ÖüH!K]jU 2͵ ^#V#*~#fo^#*~#fo^#V#*n^#*n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2hZZk:h|/g}/o#|/g}/o#:h<2hqDM!xxGyO҃)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2hZZ͉M|}ȯ|g}o)|/g}/o#z/W{/_!9~#fo! ! ! ! ! ! P!9~#A!9"w**w"j!z*"d!"f!Y"H>2^>2a>2`2c>2s2t>2r>2v!"@!"D!@"B!"F !F#x:~#!|2i~# :" 2i +}|~#:G:ix."2i+w# +6#!6#@A2n2?*j**|+`"d!"f!!>ڌo&͖=}  w~2ʸͼ56!+W ?_!~7z?ͧ:>͞@w#5.ww#w#w#w*>?@͌>w#͌5> w#@ͧ͵g 2q&0OxG͵j/ʆSx\͞.7:77!a{  ʨ ʨ0:?ŷO !y$ 7o&))T])))!y 2p_ :p K LdL      dMM         $  @OdOOP$$R@%mai(mi)gtex1put2endex3topofme4option5usag6fope7exi8fput9!9DM! P&3"Zp33 "o88! s#r! ~#fo! ! ~#fo+++| !$ +?<`is#r`i~#fo! ~#fo##~#fo|&#|b !% P&! ~#fo##~#foP&!3!!1 ! w#w`i~#fof! s#r*o͡! ^#Vr+s! ~#fo! ~#foJ! ~#fo! ~#fok! ~#fo|w `i~#fo&!!R ! 6#6! ~#fo! ~#fo ! ~#fo! ~#fo+)&! s#r! ~#fo! ~#fo! ^#Vr+s! ~#fo! ~#foJ! ~#fo! ~#fo! ~#fo#;! ~#fok! ~#fo! ~#fo ! ~#fos#r !!m !8! ~#foͮ88`is#r`i~#fo!8|&#|% ! P&!8P&!3? [-c] [-k] where is: a comma separated list of column numbers or ranges specifing the sort key columns e.g. -k3-5,7-9,1-2,12 specifies that the primary sort key is columns 3 thru 5 the next secondary sort key is columns 7 thru 9 the next secondary sort key is columns 1 thru 2 the last secondary sort key is columns 12 thru end of line. The leftmost column is numbered 1. The default sort key is the entire line. -c selects the n'th collating sequence from the "magic" file %s. Where sequences are numbered from zero. !9DM!Zp~#fo! ~#fo*"Tp!Zp~#fo! ~#fo*"Vp!"Lp*Lp*oҕ#*Lp)o~#fo"Np! ~#fo*Tp*Np)&"Hp! ~#fo*Vp*Np)&"Jp*Lp) p~#fo"Np! ~#fo*Tp*Np)&"Pp! ~#fo*Vp*Np)&"Rp!Zp~#fo*Hpn&%}2Xp}‹"*Hp#"Hp*Pp҈"Ë"T"!Zp~#fo*Jpn&%}2Yp}"*Jp#"Jp*Rpҿ""Ë"*Hp*Pp"*Jp*Rp"!*Jp*Rp#*Hp*Pp#!*Hp*Pp##*Jp*Rp##Ë#*Xp*Yp}z#*Xp}>#>2Xp*Yp}L#>2Yp*Xp*Yp}^#!*Xp*YpѯgWu#!x#!*Hp#"Hp*Jp#"JpT"*Lp#"Lpü!*Xp}£#>2Xp*Yp}±#>2Yp*Xp*Yp}#!*Xp*YpѯgW#!#!!9DM!$͇3! s#rz$$!$!+3!! ~#fo)! ~#fo3|O$$!$!+3!%`is#r`i~#fos#r!`i~#fo! ~#fo:4++|ʞ$$!$!+3! ~#foI3!9Can't find file %s Error in seeking on file %s Error in reading file %s !%SSORT.OVLxxxxxxxxx)%&n& !#%')+-/13579;=? "$&(*,.02468:<>@!9DM͐͐H&͐L&͐!9DM͐n}z&! ^#Vr+sn&4X&!9DM͐!͇͐3s#rzҦ&!͐##w#w͐6͐~#fo!9DM͐&!͙͐)͐~#fo5!9DM͐͐5s#rz'!͐͐s#r͐##6#6͐6͐~#fo!9DM! n&8-|{'! n& Â'! n&&!9DM`iw#w! 6#6͐ n! s{ ʻ'! n} '! ^#Vr+sß'! n}-'! 6#6! ^#Vr+s! ^#Vr+sn! sB(|)(͐ ?! nѯg`is#r'͐͐?9(!9!9DM! n&|ͯm(! n&|ͩ!9DM͐)͐>”(>ʻ(> (>(>¬(>(>¸(>()! n&4! n&!N5! n&!N5! n} )! !N5! n&!N5͐##^#Vr+s|y)!͐͐~#fo_5|X)!͐##6#6͐͐s#r͐^#Vr+s! ns&!9DM͐ڲ)!*͐n&|g}o|)!*͐##~#fo|)!*͐##~#fo`is#r͐͐͐~#fo_5͐7*!*͐+?`is#r͐##~#fo|*!͐͐͐6͐##~#fo͐s#r͐~#fo͐s#r!!͐~#fo3*͐##6#6͐͐s#r!*!9!9DM`iw#w! ^#Vr+sn}$+`i^#Vr+s+͐++!9!9DM͐`is#r! ^#Vr+s! ^#Vr+sns{l+F+͐s+!9!9DM͐`is#r͐n}ʦ+! ^#Vr+sÎ+! ^#Vr+s͐ns! ^#Vr+sn}¦+͐+!9!9DM͐!g-! Ͷ-!9DM͐|,d6,͐+++|,,!N5,͐##^#Vr+s|ª,!͐͐~#fo:4`is#r!|},͐##^#Vr+s,͐##͐?+s#r͐͐s#r͐^#Vr+sn&,!9!9DM͐|,! n&͙6͐-͐##~#fo| -!͐^#Vr+s! ns͐##^#Vr+s!!9DM! n&|ͯc-! n&|ͩ!9DM͐|•-͐! q(#|•-!͐͐q(#|¯-!!!Y9DM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{ʑ1`in}%b1! ! s#r! 6#6! s! s! s͐n}-F.! ^#Vr+s! 4͐n}0V.! 4͐n&B(}s.! B2v.!! s#r! ^#Vr+sn`is{.¾.! B2! s#r! 4! ^#Vr+sn`is`in&͟2}D.U+/X4/O=/Cʃ/Sʴ/-131͐~#fo|+/! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 C/! 6C/! 6! ~#fo! n&! ^#Vr+s~#fo! ͠1ѯgs#r,0! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+s,0! n}/! 6#6! ^#Vr+s~#fo! s#r͐n},0͐|,0! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+s/͐6! ! s#r! n}š0! ^#Vr+s!|ښ0͐͐! n}w0!0z0! !0!9~#fo#|—0!×1H0͐n}0͐͐! ^#Vr+sn&!0!9~#fo#|0!×1Ú0! n}*1! ^#Vr+s!|*1͐͐! !1!9~#fo#|'1!×10_1!×1͐͐`in&!P1!9~#fo#|_1!×1Î1͐͐`in&!1!9~#fo#|Ž1!×1-!×1!9!9DM͐͐ 1͐^#Vr+s͐1͐01͐7s!&92͐ ͐͐ ͉͐͠1`is͐ ͐͐ )͐͠1`in&#&92!9!9DM`iw#w͐~#fon&B(}ʏ2͐ ?͐^#Vr+snѯg`is#rP2͐Ö2!9!9DM! n&2|2! n&2! n&&!9DM! n&|ͯ2! n&|ͩ**:+  !j96  #F#xD3~#73 )Z3>2?6! !\/:q25!> 2?+7,Җ3> 2h*P/:q2> 3:h):R3=3=> 3:qw#w#w:ho&552?7:P,>42?!^#V*R:T.4=4.4*Pͨ6*R!s#r7:P)V>4z>4z2:P,"j!"l*T|*lu45*R*j!ѷʦ42?ʠ4ʠ4!p4*lp4*T+"T*R"R*l#"l*j! N#Fp+qxe4##6>2?j42?  4 > _ 5 #7*P`3:q2\5@5> 2?!*P͇37:PO*R7:P)"XV> 6z> 6z2:P,"j!"l*T|»5*j!^#V*X#^#Vҳ5r+s*l5*R"R*j"*l52?ö5#"l*T+"T*j! N#Fp+qx5##6>2?ó52?7*T|DM*R*PB6><66~# x66 >2?)~2#"j!!~#fo#^#Vp+q*j~#fo6s#r5**:+  !j96  #F#xD3~#73 )Z3>2?6! !\/:q25!> 2?+7,Җ3> 2h*P/:q2> 3:h):R3=3=> 3:qw#w#w:ho&552?7:P,>42?!^#V*R:T.4=4.4*Pͨ6*R!s#r7:P)V>4z>4z2:P,"j!"l*T|*lu45*R*j!ѷʦ42?ʠ4ʠ4!p4*lp4*T+"T*R"R*l#"l*j! N#Fp+qxe4##6>2?j42?  4 > _ SSORT.DOC SSORT is a merge sort utility. That is, the limitations on the size of the file to be sorted is one of disk space rather than memory space. As configured, it allows up to 20 (recompile for more) sort keys to be specified. SSORT has one built-in sort precedence order and has a command line option for overlaying an arbitrary number of others (one at a time) from a file called "SSORT.OVL". This is useful, for instance, to select a descending sort. This file (SSORT.DOC) contains information to patch the SSORT system to install your favorite collating sequences. The ones supplied are: Lexicographical, Reverse Lexicographical, ASCII, Reverse ASCII. As configured, the built-in collating sequence in SSORT treats all punctuation and non-printing characters as non-existent (not even consuming a column). This means that A!@#$%^&*()B will sort adjacent to AB, for example. It also treats 'A' and 'a' as distinct but adjacent. That is, a lexicographcal sort. This is not REALLY lexicographical on a string basis. To get that, 'A' and 'a' should have exactly the same sort percedence, but that would mean that several occurrences of the same string whose only difference was case would sort to a scrambled order within the equivalent strings, for instance. AAAAA aaaaa aaaaa AAAAA AAAAA aaaaa The drawback to the implemented version is that: SSORT.C SSORT.CSM ssort.c is the results for the example data, since 's' is above 'S' in the collating sequence. What is really wanted is "case blindness" on a string (not a character) basis, but I haven't figured out how to do that yet. Nor have I missed it much. The rules for the precedence orders for characters are contained in a table in the lexlate() function which is in LEXLATE.CSM. The file called SSORT.OVL may contain an arbitrary number of collating sequences (actually only as many as 16384), any one of which may be overlayed at execution time by using the "-c" option (see below). As configured, -c0 is reverse lecicographical, -c1 is ASCII, -c2 is reverse ASCII. Usage: ssort [-c] [-k] where -c indicates: Use the 'th collating sequence in SSORT.OVL. where is: A comma separated list of column numbers or ranges specifing the sort key positions. e.g. ssort messy.dat neat.dat -c3 -k3-5,7-9,1-2,12 specifies that: 1) The input file is MESSY.DAT. 2) The output file is NEAT.DAT. 3) The collating sequence to be used is number 3 in SSORT.OVL note that the first sequence in SSORT.OVL is number 0. 4) The primary sort key is columns 3 thru 5. 5) The first secondary sort key is columns 7 thru 9. 6) The next secondary sort key is columns 1 thru 2. 7) The last secondary sort key is columns 12 thru end of line. A sort key of 1 column may be specified as 3-3 for example. A sort key which goes to end of line need NOT be the last one. The leftmost column is numbered 1. The default sort key is the entire line. Files in SSORT.LBR SSORT.DQC - This file in squeezed format 'SSORT.SH - MicroShell batch file to build SSORT.COM (similar to SUBMIT) If you have MicroShell, I probably don't have to tell you not to use it, since ASM gets confused when run from a shell file. Just treat it as build instructions. SSORT.CQ - BDS C source for lexsort in a squeezed format LEXLATE.CQM - BDS C '.CSM' (assembly language) file for the sort precedence routine. SSORT.OBJ - SSORT.COM renamed so you can't execute on a RBBS SSORT.SYM - The symbol table from the L2 linker for LEXSORT.COM SSORT.OVL - A file of collating sequences (mentioned above) SORTORDR.AQM - ASM assembly language file (in squeezed format) to generate a customized SSORT.OVL instructions for use are contained within it. PATCH DATA: 1) For those users would a different "built-in" precedence order but do not have BDS C, the combination of LEXLATE.CSM and LEXSORT.SYM show where the table ends up in memory and hence in LEXSORT.COM. This is the address of LEXLATE + 0EH. As configured, the magic address is (251b + 000e = 2529). The rules are that this is a 256 byte table corresponding to the 256 ASCII codes. A code of 255 is used to indicate that the character should be ignored entirely. Any other value is the sort precedence for the corresponding ASCII character. Make sure that 0 translates to itself so that C will be able to recognize end of string. 2) If you wish to change the name SSORT.OVL, it is located at (24ff + 8 = 2507). This is the address of the function collate_name() + 8, see entry COLLATE_ in file SSORT.SYM (in case someone has re-compiled SSORT since I worte this documentation file. This address may be patched to contain a specific drive and/or user reference according to BDS C rules i.e. uu/d:nnnnnnnn.ttt. The file name must be no longer than 19 characters and must be followed by a zero byte to terminate the string. 3) If you wish to delete/re-arrange/add-to the collating sequences in SSORT.OVL, see the instructions in SORTORDR.AQM HISTORY: SSORT.C is a modification to LEXSORT.C. LEXSORT.C is a modification of SORT3.C. SORT3.C is Leor Zolman's translation of Ratfor code, published in "Software Tools", into BDS C. Both LEXSORT and SSORT modifications were done by Harvey Moran. If you have any comments about SSORT (good or bad), I can be reached through the BHEC RBBS (Baltimore Heath Electronic Center Remote Bulletin Board Service). The phone number is (301) 661-2175. This system operates at 300 and 1200 baud, 24 hrs a day, but 6:00-8:00 am Eastern Time is reserved for system maintenance. I am one of the SYSOP's on this system. Harvey Moran 2/26/84 be patched to contain a specific drive and/or user reference according to BDS C rules i.e. uu/d:nnnnnnnn.ttt. The file name must be no longer than 19 characters and must be followed ; LEXLATE.CSM ; Lexical Character order translate ; ******************************************************************* ; Returns a lexical order number of the character argument ; ******************************************************************* ; '\0' translates to itself ; ' ' translates to the lowest lexical order ; ; The Other Ordering is: ; ; 0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz ; ; ALL other bytes in the range 0 thru 255 ; translate to a non-existence mark (0xff) ; ; The equivalent C code if statics and static initialization ; were available would be: ; ; char ; lexlate(c) ; char c; ; { ; static char xlate[] = {THE_ORDER_SEQUENCE_256_BYTES}; ; ; return (xlate[c]); ; } ; ; Alternatively, if external initialization were available: ; ; char xlate[] = {THE_ORDER_SEQUENCE_256_BYTES}; ; #define lexlate(c) (xlate[c & 0xff]) ; ; ******************************************************************* ; maclib bds X equ 0ffh ; Non-Existence Mark FUNCTION lexlate pop d ; DE = return address pop h ; HL = argument push h ; argument = HL push d ; return address = DE lxi d,xlate ; DE = &xlate[0] mvi h,0 ; HL = offset into xlate dad d ; hl = &xlate[argument] mov l,m mvi h,0 ; hl = xlate[argument] ret ; xlate: db 0,X,X,X,X,X,X,X ; ^@^A^B^C^D^E^F^G db X,X,X,X,X,X,X,X ; ^H^I^J^K^L^M^N^O db X,X,X,X,X,X,X,X ; ^P^Q^R^S^T^U^V^W db X,X,X,X,X,X,X,X ; ^X^Y^Z^[^\^]^^^_ db 1,X,X,X,X,X,X,X ; "#$%&' db X,X,X,X,X,X,X,X ; ()*+,-./ db 2,3,4,5,6,7,8,9 ; 01234567 db 10,11,X,X,X,X,X,X ; 89:;<=>? ; note: state 12 not used (WAS previously inadvertently assigned to :) db X,13,15,17,19,21,23,25 ; @ABCDEFG db 27,29,31,33,35,37,39,41 ; HIJKLMNO db 43,45,47,49,51,53,55,57 ; PQRSTUVW db 59,61,63,X,X,X,X,X ; XYZ[\]^_ db X,14,16,18,20,22,24,26 ; `abcdefg db 28,30,32,34,36,38,40,42 ; hijklmno db 44,46,48,50,52,54,56,58 ; pqrstuvw db 60,62,64,X,X,X,X,X ; xyz{|}~ ; ; Same Stuff with MSB SET ;  db X,X,X,X,X,X,X,X ; ^@^A^B^C^D^E^F^G db X,X,X,X,X,X,X,X ; ^H^I^J^K^L^M^N^O db X,X,X,X,X,X,X,X ; ^P^Q^R^S^T^U^V^W db X,X,X,X,X,X,X,X ; ^X^Y^Z^[^\^]^^^_ db X,X,X,X,X,X,X,X ; "#$%&' db X,X,X,X,X,X,X,X ; ()*+,-./ db X,X,X,X,X,X,X,X ; 01234567 db X,X,X,X,X,X,X,X ; 89:;<=>? db X,X,X,X,X,X,X,X ; @ABCDEFG db X,X,X,X,X,X,X,X ; HIJKLMNO db X,X,X,X,X,X,X,X ; PQRSTUVW db X,X,X,X,X,X,X,X ; XYZ[\]^_ db X,X,X,X,X,X,X,X ; `abcdefg db X,X,X,X,X,X,X,X ; hijklmno db X,X,X,X,X,X,X,X ; pqrstuvw db X,X,X,X,X,X,X,X ; xyz{|}~ endfunc ,X,X ; 89:;<=>? ; note: state 12 not used (WAS previously inadvertently assigned to :) db X,13,15,17,19,21,23,25 ; @ABCDEFG db 27,29,31,33,35,37,39,41 ; HIJKLMNO db 43,45,47,49,51,53,55,57 ; PQRSTUVW db 59,61,63,X,X,X,X,X ; XYZ[\]^_ db X,14,16,18,20,22,24,26 ; `abcdefg db 28,30,32,34,36,38,40,42 ; hijklmno db 44,46,48,50,52,54,56,58 ; pqrstuvw db 60,62,64,X,X,X,X,X ; xyz{|}~ ; ; Same Stuff with MSB SET ;  ; ============================================================ ; File: SORTORDR.ASM - Harvey Moran 2/26/84 ; ============================================================ ; Use the following instructions to generate ; the collating sequence file for SSORT.COM ; ; ASM SORTORDR.ddZ ; LOAD SORTORDR ; REN SSORT.OVL=SORTORDR.COM ; ; ============================================================ ; ============================================================ ; Collating Sequences ; Number Description ; ------ ------------ ; 0 REVerse Lexicographical ; 1 ASCII ; 2 REVerse ASCII ; ============================================================ ; org 100h ; IGNORE equ 255 X equ IGNORE ; synonym ; ; REVerse Lexicographical order collating sequence ; db 0,X,X,X,X,X,X,X ; ^@^A^B^C^D^E^F^G db X,X,X,X,X,X,X,X ; ^H^I^J^K^L^M^N^O db X,X,X,X,X,X,X,X ; ^P^Q^R^S^T^U^V^W db X,X,X,X,X,X,X,X ; ^X^Y^Z^[^\^]^^^_ db 1,X,X,X,X,X,X,X ; "#$%&' db X,X,X,X,X,X,X,X ; ()*+,-./ db 63,62,61,60,59,58,57,56 ; 01234567 db 55,54,X,X,X,X,X,X ; 89:;<=>? db X,53,51,49,47,45,43,41 ; @ABCDEFG db 39,37,35,33,31,29,27,25 ; HIJKLMNO db 23,21,19,17,15,13,11,9 ; PQRSTUVW db 7,5,3,X,X,X,X,X ; XYZ[\]^_ db X,52,50,48,46,44,42,40 ; `abcdefg db 38,36,34,32,30,28,26,24 ; hijklmno db 22,20,18,16,14,12,10,8 ; pqrstuvw db 6,4,2,X,X,X,X,X ; xyz{|}~ ; Msb set byte indices db X,X,X,X,X,X,X,X ; ^@^A^B^C^D^E^F^G db X,X,X,X,X,X,X,X ; ^H^I^J^K^L^M^N^O db X,X,X,X,X,X,X,X ; ^P^Q^R^S^T^U^V^W db X,X,X,X,X,X,X,X ; ^X^Y^Z^[^\^]^^^_ db X,X,X,X,X,X,X,X ; "#$%&' db X,X,X,X,X,X,X,X ; ()*+,-./ db X,X,X,X,X,X,X,X ; 01234567 db X,X,X,X,X,X,X,X ; 89:;<=>? db X,X,X,X,X,X,X,X ; @ABCDEFG db X,X,X,X,X,X,X,X ; HIJKLMNO db X,X,X,X,X,X,X,X ; PQRSTUVW db X,X,X,X,X,X,X,X ; XYZ[\]^_ db X,X,X,X,X,X,X,X ; `abcdefg db X,X,X,X,X,X,X,X ; hijklmno db X,X,X,X,X,X,X,X ; pqrstuvw db X,X,X,X,X,X,X,X ; xyz{|}~ ; ; ; ASCII collating sequence ; db 0 ; 00 ^@ -- DON'T TOUCH -- so C can find end of string db 1 ; 01 ^A db 2 ; 02 ^B db 3 ; 03 ^C db 4 ; 04 ^D db 5 ; 05 ^E db 6 ; 06 ^F db 7 ; 07 ^G db 8 ; 08 ^H db 9 ; 09 ^I (tab) db 10 ; 0A ^J (linefeed) db 11 ; 0B ^K db 12 ; 0C ^L (formfeed) db 13 ; 0D ^M (carriage return) db 14 ; 0E ^N db 15 ; 0F ^O db 16 ; 10 ^P db 17 ; 11 ^Q db 18 ; 12 ^R db 19 ; 13 ^S db 20 ; 14 ^T db 21 ; 15 ^U db 22 ; 16 ^V db 23 ; 17 ^W db 24 ; 18 ^X db 25 ; 19 ^Y db 26 ; 1A ^Z db 27 ; 1B ^[ (ESCape) db 28 ; 1C ^\ db 29 ; 1D ^] db 30 ; 1E ^^ db 31 ; 1F ^_ db 32 ; 20 (space) db 33 ; 21 ! db 34 ; 22 " db 35 ; 23 # db 36 ; 24 $ db 37 ; 25 % db 38 ; 26 & db 39 ; 27 ' (single quote) db 40 ; 28 ( db 41 ; 29 ) db 42 ; 2A * db 43 ; 2B + db 44 ; 2C , (comma) db 45 ; 2D - db 46 ; 2E . db 47 ; 2F / db 48 ; 30 0 db 49 ; 31 1  db 50 ; 32 2 db 51 ; 33 3 db 52 ; 34 4 db 53 ; 35 5 db 54 ; 36 6 db 55 ; 37 7 db 56 ; 38 8 db 57 ; 39 9 db 58 ; 3A : db 59 ; 3B ; db 60 ; 3C < db 61 ; 3D = db 62 ; 3E > db 63 ; 3F ? db 64 ; 40 @ db 65 ; 41 A db 66 ; 42 B db 67 ; 43 C db 68 ; 44 D db 69 ; 45 E db 70 ; 46 F db 71 ; 47 G db 72 ; 48 H db 73 ; 49 I db 74 ; 4A J db 75 ; 4B K db 76 ; 4C L db 77 ; 4D M db 78 ; 4E N db 79 ; 4F O db 80 ; 50 P db 81 ; 51 Q db 82 ; 52 R db 83 ; 53 S db 84 ; 54 T db 85 ; 55 U db 86 ; 56 V db 87 ; 57 W db 88 ; 58 X db 89 ; 59 Y db 90 ; 5A Z db 91 ; 5B [ db 92 ; 5C \ db 93 ; 5D ] db 94 ; 5E ^ db 95 ; 5F _ (underscore) db 96 ; 60 (back quote) db 97 ; 61 a db 98 ; 62 b db 99 ; 63 c db 100 ; 64 d db 101 ; 65 e db 102 ; 66 f db 103 ; 67 g db 104 ; 68 h db 105 ; 69 i db 106 ; 6A j db 107 ; 6B k db 108 ;  6C l db 109 ; 6D m db 110 ; 6E n db 111 ; 6F o db 112 ; 70 p db 113 ; 71 q db 114 ; 72 r db 115 ; 73 s db 116 ; 74 t db 117 ; 75 u db 118 ; 76 v db 119 ; 77 w db 120 ; 78 x db 121 ; 79 y db 122 ; 7A z db 123 ; 7B { db 124 ; 7C | db 125 ; 7D } db 126 ; 7E ~ db 127 ; 7F db 128 ; 80 db 129 ; 81 db 130 ; 82 db 131 ; 83 db 132 ; 84 db 133 ; 85 db 134 ; 86 db 135 ; 87 db 136 ; 88 db 137 ; 89 db 137 ; 8A db 139 ; 8B db 140 ; 8C db 141 ; 8D db 142 ; 8E db 143 ; 8F db 144 ; 90 db 145 ; 91 db 146 ; 92 db 147 ; 93 db 148 ; 94 db 149 ; 95 db 150 ; 96 db 151 ; 97 db 152 ; 98 db 153 ; 99 db 154 ; 9A db 155 ; 9B db 156 ; 9C db 157 ; 9D db 158 ; 9E db 159 ; 9F db 160 ; A0 db 161 ; A1 db 162 ; A2 db 163 ; A3 db 164 ; A4 db 165 ; A5 db 166 ; A6 db 167 ; A7 db 168 ; A8 db 169 ; A9 db 170 ; AA db 171 ; AB db 172 ; AC db 173 ; AD db 174 ; AE db 175 ; AF db 176 ; B0 db 177 ; B1 db 178 ; B2 db 179 ; B3 db 180 ; B4 db 181 ; B5 db 182 ; B6 db 183 ; B7 db 184 ; B8 db 185 ; B9 db 186 ; BA db 187 ; BB db 188 ; BC db 189 ; BD db 190 ; BE db 191 ; BF db 192 ; C0 db 193 ; C1 db 194 ; C2 db 195 ; C3 db 196 ; C4 db 197 ; C5 db 198 ; C6 db 199 ; C7 db 200 ; C8 db 201 ; C9 db 202 ; CA db 203 ; CB db 204 ; CC db 205 ; CD db 206 ; CE db 207 ; CF db 208 ; D0 db 209 ; D1 db 210 ; D2 db 211 ; D3 db 212 ; D4 db 213 ; D5 db 214 ; D6 db 215 ; D7 db 216 ; D8 db 217 ; D9 db 218 ; DA db 219 ; DB db 220 ; DC db 221 ; DD db 222 ; DE db 223 ; DF db 224 ; E0 db 225 ; E1 db 226 ; E2 db 227 ; E3 db 228 ; E4 db 229 ; E5 db 230 ; E6 db 231 ; E7 db 232 ; E8 db 233 ; E9 db 234 ; EA db 235 ; EB db 236 ; EC db 237 ; ED db 238 ; EE db 239 ; EF db 240 ; F0 db 241 ; F1 db 242 ;  F2 db 243 ; F3 db 244 ; F4 db 245 ; F5 db 246 ; F6 db 247 ; F7 db 248 ; F8 db 249 ; F9 db 250 ; FA db 251 ; FB db 252 ; FC db 253 ; FD db 254 ; FE db IGNORE ; FF ; ; Reverse ASCII collating sequence ; db 0 ; 00 ^@ -- DON'T TOUCH -- so C can find end of string db 127 ; 01 ^A db 126 ; 02 ^B db 125 ; 03 ^C db 124 ; 04 ^D db 123 ; 05 ^E db 122 ; 06 ^F db 121 ; 07 ^G db 120 ; 08 ^H db 119 ; 09 ^I (tab) db 118 ; 0A ^J (linefeed) db 117 ; 0B ^K db 116 ; 0C ^L (formfeed) db 115 ; 0D ^M (carriage return) db 114 ; 0E ^N db 113 ; 0F ^O db 112 ; 10 ^P db 111 ; 11 ^Q db 110 ; 12 ^R db 109 ; 13 ^S db 108 ; 14 ^T db 107 ; 15 ^U db 106 ; 16 ^V db 105 ; 17 ^W db 104 ; 18 ^X db 103 ; 19 ^Y db 102 ; 1A ^Z db 101 ; 1B ^[ (ESCape) db 100 ; 1C ^\ db 99 ; 1D ^] db 98 ; 1E ^^ db 97 ; 1F ^_ db 96 ; 20 (space) db 95 ; 21 ! db 94 ; 22 " db 93 ; 23 # db 92 ; 24 $ db 91 ; 25 % db 90 ; 26 & db 89 ; 27 ' (single quote) db 88 ; 28 ( db 87 ; 29 ) db 86 ; 2A * db 85 ; 2B + db 84 ; 2C , (comma) db 83 ; 2D - db 82 ; 2E . db 81 ; 2F / db 80 ; 30 0 db 79 ; 31 1 db 78 ; 32 2 db 77 ; 33 3 db 76 ; 34 4 db 75 ; 35 5 db 74 ; 36 6 db 73 ; 37 7 db 72 ; 38 8 db 71 ; 39 9 db 70 ; 3A : db 69 ; 3B ; db 68 ; 3C < db 67 ; 3D = db 66 ; 3E > db 65 ; 3F ? db 64 ; 40 @ db 63 ; 41 A db 62 ; 42 B db 61 ; 43 C db 60 ; 44 D db 59 ; 45 E db 58 ; 46 F db 57 ; 47 G db 56 ; 48 H db 55 ; 49 I db 54 ; 4A J db 53 ; 4B K db 52 ; 4C L db 51 ; 4D M db 50 ; 4E N db 49 ; 4F O db 48 ; 50 P db 47 ; 51 Q db 46 ; 52 R db 45 ; 53 S db 44 ; 54 T db 43 ; 55 U db 42 ; 56 V db 41 ; 57 W db 40 ; 58 X db 39 ; 59 Y db 38 ; 5A Z db 37 ; 5B [ db 36 ; 5C \ db 35 ; 5D ] db 34 ; 5E ^ db 33 ; 5F _ (unders!core) db 32 ; 60 (back quote) db 31 ; 61 a db 30 ; 62 b db 29 ; 63 c db 28 ; 64 d db 27 ; 65 e db 26 ; 66 f db 25 ; 67 g db 24 ; 68 h db 23 ; 69 i db 22 ; 6A j db 21 ; 6B k db 20 ; 6C l db 19 ; 6D m db 18 ; 6E n db 17 ; 6F o db 16 ; 70 p db 15 ; 71 q db 14 ; 72 r db 13 ; 73 s db 12 ; 74 t db 11 ; 75 u db 10 ; 76 v db 9 ; 77 w db 8 ; 78 x db 7 ; 79 y db 6 ; 7A z db 5 ; 7B { db 4 ; 7C | db 3 ; 7D } db 2 ; 7E ~ db 1 ; 7F (DELete or RUBout) db IGNORE ; 80 db IGNORE ; 81 db IGNORE ; 82 db IGNORE ; 83 db IGNORE ; 84 db IGNORE ; 85 db IGNORE ; 86 db IGNORE ; 87 db IGNORE ; 88 db IGNORE ; 89 db IGNORE ; 8A db IGNORE ; 8B db IGNORE ; 8C db IGNORE ; 8D db IGNORE ; 8E db IGNORE ; 8F db IGNORE ; 90 db IGNORE ; 91 db IGNORE ; 92 db IGNORE ; 93 db IGNORE ; 94 db IGNORE ; 95 db IGNORE ; 96 db IGNORE ; 97 db IGNORE ; 98 db IGNORE ; 99 db IGNORE ; 9A db IGNORE ; 9B db IGNORE ; 9C db IGNORE ; 9D db IGNORE ; 9E db IGNORE ; 9F db IGNORE ; A0 db IGNORE ; A1 db IGNORE ; A2 db IGNORE ; A3 db IGNORE ; A4 db IGNORE ; A5 db IGNORE ; A6 db IGNORE ; A7 db IGNORE ; A8 db IGNORE ; A9 db IGNORE ; AA db IGNORE ; AB db IGNORE ; AC db IGNORE ; AD db IGNORE ; AE db IGNORE ; AF db IGNORE ; B0 db IGNORE ; B1 db IGNORE ; B2 db IGNORE ; B3 db IGNORE ; B4 db IGNORE ; B5 db IGNORE ; B6 db IGNORE ; B7 db IGNORE ; B8 db IGNORE ; B9 db IGNORE ; BA db IGNORE ; BB db IGNORE ; BC db IGNORE ; BD db IGNORE ; BE db IGNORE ; BF db IGNORE ; C0 db IGNORE ; C1 db IGNORE ; C2 db IGNORE ; C3 db IGNORE ; C4 db IGNORE ; C5 db IGNORE ; C6 db IGNORE ; C7 db IGNORE ; C8 db IGNORE ; C9 db IGNORE ; CA db IGNORE ; CB db IGNORE ; CC db IGNORE ; CD db IGNORE ; CE db IGNORE ; CF db IGNORE ; D0 db IGNORE ; D1 db IGNORE ; D2 db IGNORE ; D3 db IGNORE ; D4 db IGNORE ; D5 db IGNORE ; D6 db IGNORE ; D7 db IGNORE ; D8 db IGNORE ; D9 db IGNORE ; DA db IGNORE ; DB db IGNORE ; DC db IGNORE ; DD db IGNORE ; DE db IGNORE ; DF db IGNORE ; E0 db IGNORE ; E1 db IGNORE ; E2 db IGNORE ; E3 db IGNORE ; E4 db IGNORE ; E5 db IGNORE ; E6 db IGNORE ; E7 db IGNORE ; E8 db IGNORE ; E9 db IGNORE ; EA db IGNORE ; EB db IGNORE ; EC db IGNORE ; ED db IGNORE ; EE db IGNORE ; EF db IGNORE ; F0 db IGNORE ; F1 db IGNORE ; F2 db IGNORE ; F3 db IGNORE ; F4 db IGNORE ; F5 db IGNORE ; F6 db IGNORE ; F7 db IGNORE ; F8 db IGNORE ; F9 db IGNORE ; FA db IGNORE ; FB db IGNORE ; FC db IGNORE ; FD db IGNORE ; FE db IGNORE ; FF  IGNORE ; C7 db IGNORE ; C8 db IGNORE ; C9 db IGNORE ; CA db IGNORE ; CB db IGNORE ; CC db IGNORE ; CD db IGNORE ; CE db IGNORE ; CF db IGNORE ; D0 db IGNORvx6SSORT.Cg  !"#$%&'()*+,-./012345o6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef\ 8;:6Q֡qBrԘ@Þ-"-'d,G3~uEB.5I1S5T%G Et.)SX&]6]rA`G#)'E'=Q[5AER3~ud#\S2R G@'dple&f3~u8ڵX )6Ԏ@.rȐ."aglopȥ@ÞE'=օ-b8jTHEmӔjëPBqV "CHmKLI=ѹXO-V.ѹ9IcmR`MWdm\>~|8ـן߾ xsp8{~!makVR m@h G@Mv@."#˒!p=*FGIUR 3sp8}ItB+hT'rNF%ER 9>4ptlQx:Oxk',/h.qՓ!(\-[ l?H\ 8@.RLR±UEtunA"d@Q'h.Y8j;t$r8:(tdM Ia߷2̷Oȥ@QBI}9TOVl0;;ۃC)CXVlȥ@? .[h.lQDWw?zSR aOl"6[h.lQDWwC_@ÞXdnaQ[E]i ̡zST "8 .YX*nFnEtu-PAE pI R l4 t0G]it ͨ"Y 8uq4 "8Mq .Yi$r)'8 V4B݂ @ÞRHS(\-BҊ ȥ@.sԑVIqQ)K̾F/PDkPBqpt쒢UE5Y@>T(2%z TO(dR=[Q).\ݒW=AGQ#s||5c=I"cGaOؙ}98^=Hg&pK-.=m,s(dRX,jlc@>ppR PRHƢVHM*H+t=T1.lFV n\"jVYVl"\{ۚI"c[Q[nP+rzWdi D' p W==d#H+s TOR 6S E`r-V` #lpaAP=AӱWd}4- 6 TkGR 9ޒjL>lo9!a>y)蓞EZ r?E!.[j@-uTY Whɑ⨥@;+4ڢ%Gmt"ǚH m_V"vY2M5  Wbc5 m)6TDr.^n\ K Qۑȥ@(bבV!:>HY4j@fJ&v8A]%C8Y)K$[L->t3u 2S)Kܿg1d1:{[Pޞءh躤@(_8g67;7V}Cbd8-Y鄰 RKcEF'WBl!nER 5U_mHm/nuE'GoH R [[͆,\T1e{TD2-To# @c !#,6E=[d&NMZhؑ_tJOuܖè"(Ƃ]#EF PrF!#`ыJ o;F R /b#R SQFF#lG){ɝF@hFQ%r>l4jT`Nrt(r>l4J R H!O W7G')xj)&]{{hNXq:9䏿bF )Z ?}71a#`IP=ѱKj](!pԶE>⩥bogpx0CK;j*)xj)&}OrN G--)2ZZ'kjO⩥moo`(i)Z ^^P[B>⩥puyGD )Z f8:IG.)j*xA*: EL*)xj)&imlS>!ZkSV!OX"H!SK5 GGOrdk*iRrb#HR`Mx~Or)wXѱ*f1t5AcTƟJ)0Ƣ]J)|GmWLLOOrd&d-uIp 1SE>s@d~@mӔͦ*u`GcQ@.R  BH7LOցU1B;)<6I_+Č46U)Z&rJ)<@ǬyUJ{)8Oo{g3)|je7֬`͊CK %cR'-)|cOr\jVB4]R5b]4Xacհ*o5vVRxi[J.]vM~R dU,pVR gGhECϊR  -5;J'9!BAYudOx?Ͷͤ!m6hZ#3%ČLR %cR'-)| \.^ z%\w-T$GGfJ'Rxq1:֍Wllol ۘyWƌt]Uz?3"Hၞn)t5=O;J)<БR6\.TvTRx .֪Q]QUIEc =nQh !Hၩ.4.^ pUOr)n"fM餒`g(>d*³V7AnK)6\kGϺk-0ƼhT`r=[eTh1J)F&ѳU1+[0Ə{)Ѡcy Y*J2*Ih%0z^AE4dɫ|Uaq'˝w³V(b%TRxw0Ƽ' chǚl)0Ƽ_ 2|*)< 2[2[Q[A: z’B>c2.bRq'Rx%I~Ý,1/X2[Rx_f|Xc :Sfy*$G'Q&W=;Bܠ/!4Ed:Sfɫ8cc%D7%n \f{Р]LXg,oV2>q+k0.J)<_8 nPOrZ!DӒAxOxRٷX kٿ|xþ~o{f{ʱ^aXg,yʱ^aXg,oVtA WE]1L%J)<_L%0c)YRx:֙2˛PeRxKQ,U$GODEˊ>HE]1L%J)^ )R ǥO(V4%jkqp2CJFRd R G- h$d"J )(dK**)3@WRE rLL)ZARIY+8S՗RH9ȭ22zVLR hK)

B[{/I]%Zq7ūR;)n"dqQJ AnK)ח;3u(}2(J)W=;BcvwYqQ 1f[[{[p'eje̘h5;BUV}`UKTt̪ٞWRK!\ x 3L |5XvKؑ]!jkI|"^HёR;bJ yU`WJq'/d))TRx 9^B2ۧc\kTRxv)m+qK)niJ>䶔N 2ZƪlӔ>[R6}em4 oXv ob;v%z Kդ r⍍FnتO}ުJ)|jeUOFpApl'7jɘ‡V ]`)K&)j*Ā"u c LSz3J)|jeͨz l4 t"v_+MGz3J)|jeŏ?oeo}lF& '7jɘ‡V`'ddnaQ[E]i M?Z2*!m6'h:VTD&s ݂-N[w˾ %cR ZfzcKEm2(\-آPq7jɘ‡V٨UTD&s ݂-N[OzStXh_o)%cR Zf{hN-t-Ph_oXՒ1U)Yl9 -T;݂-TO kZ2*!m6zx?BYU":),V.'o4b7jɘ‡̰V%cl;{;¿d~Id A݂ &v8'Gz3Hì*!cVMUJq/RLr)Ed>Ed**zjKR8our*蘋-l#3 U`Od@>B )8ܺ8/x"rB >rcXeceUUJG ư8+zQNWU)Ѡc8] l4*0֎u& T$#aQɵvlQEtŪ!P*zh.D escݜ܀#U)G7.;.: 897U)GFk٪-GR escݜ܀#U)GǧeEǺ9#G*@q/'9B4T(dEˊk$\-W=;B|Tǎ]R8֋:,G*Ǹ|5C% 4=1>|t|t< ތq>:>PN'-}N ̰Vl-vfgg8ya_כA +zQ6K|.WU)KfXl}}ʱ^als>viUR*NQN ̰V<|8{˳?3;;σ Rx_9֋:,]6_ Y*6#vټJ)<_3Zfv_̀WK,dͶNc^ rp'kfXl>~ዟx5;8m}v_o)E.,dol^U믙aByo{f+zQNWl feUUJz/閃/Tm4|T`{W/Rx_crw|tSJ~yU)&@-bFn\+V=:9\ЭP[c E`r@>RI.G׬![;@E 8فFn\k'Rxhp>*qqok L:)j5TO|5CᒵE 8sqTJ98xw{[3TPd:IQzǽ E (dO8G9cSTCKog>aBy}x??pþ~o{7޿ruXl`TmGyURx 3Uh6~o xX/tjRA9l촪J)H!U*OZ x;9|T kǃpþ~o{7޿ruXl`TmGyURx 3Uh6~o xX/tjRA9l촪J)

*xQqZ?=̫R{)CKog>f J;)Y)gJ)xj)&\>~|#)Z v>p$Mnjtbogpx0paU PN ̰V%cl^$}X xsp8{~**Iၐ*4Vd̘̀hQ##z3aVRxY5U)pt쒢R awן߾Rxh`(M 8kST!3Uhjɘ1р5 כ/vvgϏt̪J)

pß{;ͣW!E# ¡ # ¬Υ# ·@ʴʥzʖ=ʐ=|zJz?~o xX/tjRA9l촪J)H!U*OZ x;9|T kǃpþ~o{7޿ruXl`TmGyURx 3Uh6~o xX/tjRA9l촪J)

*xQqZ?=̫R{)CKog>f J;)=<;:9876531/-+)'%#! 420.,*(&$"    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  SORTORDRASMWSSORT CQ uSSORT $$$: Build SSORT.COM - Select-a-SORT : : cc is BDS C vers 1.5 : ll is L2 which comes with BDS C or via BDS C users group : : MicroShell users: Don't actually use this shell : file since ASM gets confused when activated from : within a shell file. Just treat it as build instructions. : Harvey Moran 2/26/84 : cc ssort -o -e 3800 casm lexlate asm lexlate.ddz ddt f100,1000,0 iLEXLATE.HEX r g0 save 4 lexlate.crl ll ssort lexlate -WA ou have MicroShell, I probably don't have to tell you not SORTFILEDOC abSORTKYBDBAScdeSORTV COM fgSORTV DOChiSORTV-12ASMdjklmnopqrstuvSSORT COMlwxyz{|}~SSORT DOC/LEXLATE CSMSORTORDRASMWSSORT CQ uSSORT OVLSSORT $$$%08B8 MAIN 0CEF OPTIONS 116B FCLOUT 11A1 QUICK 14F7 PTEXT 1566 GTEXT 164A MAKFIL 16AE GNAME 1718 ITOA 1804 GOPEN 190A GREMOV 19CB FPUTS 1A3B MERGE 1BBD REHEAP 1CEF FGETS 1E2B USAGE 217A COMPAR 23E1 GET_COLL 24FF COLLATE_ 251B LEXLATE 2629 MIN 2650 PUTS 267C FOPEN 26C6 FCLOSE 26F8 FCREAT 2754 TOLOWER 2788 ATOI 2842 ISDIGIT 2871 PUTC 2999 FFLUSH 2AF7 STRLEN 2B34 STRCPY 2B7C STRCAT 2BDE FPRINTF 2BFE GETC 2CCA UNGETC 2D38 ISUPPER 2D67 _FPUTC 2DB6 _SPR 31A0 _USPR 3242 _GV2 329F TOUPPER 32D3 ISLOWER 3302 ENDEXT 3306 TOPOFMEM 3315 EXIT 3318 GETS 3349 FABORT 3360 UNLINK 3387 OPEN 33EF SEEK 343A READ 34E3 PUTCHAR 3512 CLOSE 3515 CREAT 354E BDOS 355F WRITE 3613 MOVMEM 3664 GETCHAR 3699 UNGETCH 36A8 CFSIZE Link statistics: Number of functions: 61 Code ends at: 0x36FA Externals begin at: 0x3800 Externals end at: 0x705C End of current TPA: 0xB106 Jump table bytes saved: 0x1B9 Link space remaining: 5K GHIɾɾJ This is the release date of the disk. SORTFILEDOC aSORTKYBDBAS c SORTV COM fSORTV DOC hSORTV-12ASM j2SSORT COM w6SSORT DOC LEXLATE CSM SORTORDRASM +SSORT CQ :SSORT OVL SSORT SH SSORT SYM SHELL .LIB 60 32 768 6 SHELL .PAS 6C 7F 2816 22 SORTC .BAS 1E D3 4096 32 SORTFILE.COM F7 DD 2176 17 SORTFILE.DOC D5 66 1536 12 SORTKYBD.BAS 02 68 2560 20 SORTV .COM C6 7E 1152 9 SORTV .DOC 31 70 1920 15 SORTV-12.ASM 43 9E 12800 100 SSORT .COM 7B 95 13824 108 SSORT .DOC 60 E7 6016 47 LEXLATE .CSM EB AF 2688 21 SORTORDR Fog Library Disk FOG-CPM.115 Copyright (1986) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. SORT programs. Filename Description -07-00 .86 This is the release date of the disk. -CPM115 .DOC This is the description of the disk contents. BSORT .COM 0D74 4K [BSORT 1 of 3] Combination sort for fixed length records. Squeezed ASseMbler source is included. BSORT .DOC 9862 4K [BSORT 2 of 3] BSORT .AQM 433D 28K [BSORT 3 of 3] EZFILE .BAS 6EC1 22K [EZFILE 1 of 2] MBasic program that creates, adds to, and changes sequential files. EZFILE .DOC 3742 3K [EZFILE 2 of 2] QQSORT .COM 1D1D 8K [QQSORT 1 of 3] Quick sort program. Pascal/Z source code is included. QQSORT .LIB 7996 3K [QQSORT 2 of 3] QQSORT .PAS 5B5C 4K [QQSORT 3 of 3] SHELL .COM 7304 7K [SHELL 1 of 3] Shell sort program. Pascal/Z source code is included. SHELL .LIB 6032 1K [SHELL 2 of 3] SHELL .PAS 6C7F 3K [SHELL 3 of 3] SORTC .BAS 1ED3 4K Variable length, variable column sort in Mbasic. SORTFILE.COM F7DD 3K [SORTFILE 1 of 2] Sorts an ASCII file in ascending order. SORTFILE.DOC D566 2K [SORTFILE 2 of 2] SORTKYBD.BAS 0268 3K Sorts keyboard input to screen listing. SORTV .COM C67E 2K [SORTV 1 of 3] Sort for variable length records terminated with CR/LF pair. MAC source code is included. SORTV .DOC 3170 2K ver. 1.2 [SORTV 2 of 3] SORTV-12.ASM 439E 13K ver. 1.2 [SORTV 3 of 3] SSORT .COM 7B95 14K [SSORT 1 of 8] A merge sort utility with up to 20 sorting keys. Allows you to use different collating sequences. Squeezed BDS 'C' source code included. SSORT .DOC 60E7 6K [SSORT 2 of 8] LEXLATE .CSM EBAF 3K [SSORT 3 of 8] SORTORDR.ASM 639E 11K [SSORT 4 of 8] SSORT .CQ 0FE4 15K [SSORT 5 of 8] SSORT .OVL C4E0 1K [SSORT 6 of 8] SSORT .SH FC44 1K & [SSORT 7 of 8] SSORT .SYM B053 1K [SSORT 8 of 8] Pascal/Z source code is included. QQSORT .LIB 7996 3K [QQSORT 2 of 3] QQSORT .PAS 5B5C 4K [QQSORT 3 of 3] SHELL .COM 7304 7K [SHELL 1 of 3] Shell sort program. Pascal/Z source code is included. SHELL .LIB 6032 1K [SHELL 2 of 3] SHELL .PAS 6C7F 3K [SHELL 3 of 3] SORTC .BAS 1ED3 4K Variable length, variable column sort in M'