[comp.sources.atari.st] v05i004: tr -- Transform characters

koreth@panarthea.ebay.sun.com (Steven Grimm) (03/19/91)

Submitted-by: david@doe.utoronto.ca (David Megginson)
Posting-number: Volume 5, Issue 4
Archive-name: tr

Here is a version of tr(1v) especially written for the Atari ST.
I use it with the MiNT ksh, but it should work just as well (or
better) with bash. This is the BSD flavour (tr a-z A-Z) rather
than the SYS V flavour (tr [a-z] [A-Z]). Source is here; binaries
are in comp.binaries.atari.st.  You will need an ANSI compiler to
remake the sources. This version is FAST, because it uses my custom
buffering scheme (still portable, though).

David Megginson, 1991

=====CUT HERE=====
table
 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
begin 644 trsrc.zoo
M6D]/(#(N,# @07)C:&EV92X:  #<I\3]*@   -;___\"  $        !W*?$z
M_0(!Z0(  '$   !G%JQ5AU6R P  > (   $           !-86ME9FEL90  y
M    "@ <E!8     I %     0"DC*   1P@<2+"@P8,($RI4J&!$@B9AUI0Qx
MDX9-&1!FWL@!04<.BAAV4H 8@R:,G#!CZ)39V#&,FSELPM!)\\8-QHHJY31<w
MR+.G3Y\*&B8P$O/,'(P:01 I8D1H"R)"JA@Q4D3*ERE)M!3IX29!@C0OWH 0v
M4\>,F94@VI1IHS$/"!1D)H:IPX8.B!HP\L)(X93($"1!I$PI0N5JUJU=29I$u
MF1/$G#)VYZ31<Q&N7+IV9=2PP=?ATRE+DD#Y,D2*UXYNZ8@MZ8:,11"EF31=t
M:@1$#P5/H%"Q#:+%D]YFQKQI(R:-FS(MY)0Q"GQ.QS)NSM!!D[P,F3IC+K;(s
MV"8-G>TGU;: \\9XSJ CA#Z!,[/FT8P;A;>!4Q&M2S(@V!B7J#/]$"-,!''$r
M%+R1@$)N5(AD(&U\,4$$@ (2V$-O<^ FA!*\=>3"&^@)500>+>67AA@GR9%&q
M&4>I)J(;:X!PAW=HN-"0 DPD(401$O:F'TT=.D2%26= !@(<<KQQ1G@@N!&&p
M6B#<!P(9:2B74EM(;52<DG+D(6-Z4$CQQ!$9RN$"'73 H8 023A!1!)2\%:&o
M#B]<V6,"4!1Y74HTV20'72C.:&"77Z:@ P@&/G$A7PD8.,00(K4@%@E $(J"n
M@Q .J."!ATI:XXU3\*6 AGJ\\<:@?WIYA$@02431:U(4$001310A*:"G*I" m
M'&T 1R@0MH8J5AB[@M#JJ[%R).88(*0Z47VSFNJIAG74\::Q+OAJ*ZZZ0FIKl
MM!>!*FI0QCD7!AMLD(H"K8B. 4>S@4J*IIIL>CJ&12[I<&VNVTEJJ!(B":=<k
M4/.^(888*PTZ;QDNW9OMN<Y2ZRNUW"H0$-RGQ/T" :8*   P P  9Q;54[ Gj
M"0L  '8'   !            4D5!1$U% &4       H '"A7     *0!0   i
M $ I(R@  *E(<4&%"A0="1)0D1/&S1PV8>B4 =&0S(LW<D"0*<.FC$008]"$h
M83A&HIPY+A0H$),'!)$P=M*0 =&DS)DS:1R^<<,"1(P<.6(HD,*Q3)@Y96;Fg
MI/,&!!TT$Z'4$<,FS1B7;]J$R:FRRIPP9\H@I)-Q2XLQ9.9T 3&';,XS,4!Lf
M:2OGK8PN*I,X$?B$2)4A5)(\<:(221DY$]/, =&FI9W#<]+L!/'&C%,Y*&+8e
M20'"#$:G4$$$H3,R#8@I5%Q<!J&8(@@X=1!W3L/&I (X<MZ<8=@&!(HT=$ Vd
M=/,F..DU$\W0+K/X*$4Y9^JT*>.&SAS.=]!810/B#FTVEQL^C#@1HX*-'3^&c
M'!FF).3.N7L#7]RVXDBE;F 'K_@:XIB)3TV$V!QUU$:9&PK,QQ9I;I!Q'V5Ub
MT*&?:F0Y%09RBSV%6'EPT"&90SJH=%8"7@$8VAA9P='1=-519AE=;\6%0AF/a
MR9''4V^!($:$+KB0@@(MD)$ $46I)Q)))BV6TX)UN0$7D',D,$4<=911AA[Ez
M1:@?6TT]%1%C!7JH8F(.,?C?8I6!-M%7TRF0 %GB060D>^YE--)$*+:!&W-(y
MX<>4:Y$YV1%K93;T7TH*4!$:C$XNIE5+*#JD6'!I-@3ID>TEV5,8(##D))EJx
M=H:15L$IP,-Z<L3@0PNG'BF##SU]UA!E)84!GAVV5DEHJ)[)T1L7;@3K6QYOw
MU,%8&"T1%UP=2"GP1JVWYLK<KIQZ&E8*JI4( A=.=7GA1"V 4)5)MK*1AVJ*v
MME8&'F'H.:AW;+"AP!B(D>=:56VYV!U&:5$[6T>QNE&>&R 8%9*X.8FETIL9u
MG=5<"WH$T8(6()S !0PQR' ""#PPEH=R';E !Q[!^;"O'&3@2X?()*LT!11%t
M%$&$2D9\%B!;W^H[!QQ6DM%3$CKF <=1&8:FW1EHM-#18^"E<5%G=;A1TH?-s
M-=BI460D2#!$T.&)1M1KH&D9IR!/].5.__F&HY*+P8$1:50!V%05;J2!!T56r
M-S$%$4],P<)*+=U\![+8@J#H1!N9$4:8.M9AAAF'L94&EJPM5@,,F,,0M$1Sq
M]+1C<,0:.\:LZWV:8'!+WMS$MV4'31$99.38 A%"5&&$$45(\<4426A11 \\p
M9$=>C3Z@&YH8:=P4>8 K.0ZY'#W=K'A;RT/?^'YLS-%E:&U@--%TW=O8W5$2o
MS80"8N"+<5CT4"F 6N6N-5$%$X%1$<042^AUQ+$A)0P"<7?HB?:Z@Z>&G&!9n
M2*%)N9Z%@A;$@ F<^=-NPB &!92+(KBB#04'!3Z,M,12C/%>=X"#AF(%IRYSm
M6$..S "1Z5P'451 0M^*  *8X2\+(!A"$*0@A20$X0@TE$(1J% %*3AA"C3[l
MC/:FHR.&Y"1([0)+4JYVE,F@0&]\\]L0H/"")H D11%) _+&E8>?L48K.!%8k
M"OYVL_<Q:UHBX((<@"6";AU+#FL(%75F4BF$"8Q0U L#'RT31S?4L2K((90"j
MZ&8WU:S.#2U)$[- ()+'7"U/<%C.3'"C&]YDJ"DP>8-,0*,8ST5(3;?)3=QZi
MDR9,AG&,P&E)6[YS-:WD!"4@T-;-9H>_)$#A"T.00F<@<H9=,6]UR&G=GT32h
MH$%93 X;0Y$<$%,2<QDS-#G94NM0 +1*3N0+ROJ"1G92!@6L3509N5GL8/2Yg
M#^DH)R/)0^&*\!B">><I(.!E_GX9S)X$<X3Q @&SZE"N/*QD36Z! \]F8H;Xf
MA,J$VES.IH+3$?)=LS4UBLQ.$'4%) 2!"BYY0A&F8#@D)(&D0^@;%7Z@$B<4e
M1SM.BI5E4!0;I*@F"&8P"0B*4)>K3*$-) 1)O<I'DS3L!6\ST<I&6!.<AEJId
M6^8,#6RH8I6>E/ .7RS03(!6%4O>DSN-00H;+),&RP#-+5/\DU82N38%S.%(c
M91@<8GX  B$P1R;,,>/.J$,I-UAS5B6,#672>8>F3 8XJB%"4R#'$?A8R9Q-b
M<5N^SL"&-WC'28SADQ2;(P839M:.-Q,8'=A7+*3U2#4Z:,&/AE($*YQ4,$X a
M@1.JT 0AY$XE62B6< @6DC*,(8\W0TQ,-$HP-TA'?1E)4^C2*0>12>B=;BC-z
MM)B5(^9)80@DQ6MU,L.9/&FE0:I)@F5"-TXW')"2,)E($%0#!8;0@0XG6,RZy
M_A,OOK[F;2X:"G;1&:K1E.8T5.@)$$&:!"J$H"N\<\+^8DC#*3RAB$,H@DK2x
MU;;<3% ^2B+8S:1"U:LHUI8\ 0$XBR/.J&TDG:$Y@G$1]A]).<F"N[$2BU8Fw
MFN9<C4"UZ0EY'T4H:;K-O8D)SOG*<)84:9(S2WG#O+(R'3F,(0VV>DU[UK#9v
M$3[%LZ@*RZ9J$UBD@0!HA=4JPA+)J7'1H2/S0DSL@K/$N$)%-JD+#1F>)1V^u
MAG&CAEM4L9R<F,5PDY)OX!EGSO"&-V0M"$=,PJ:L1EYX@4=@4YP5HGGW13TMt
MQTY6FW0WL1:YLGU2 =0T\J" XQN@O3%4*C;6$"J=R8Y@>B8\M<II@/J4^!;Us
MJ%41 T-LI(!>@> (0UCU9&[FW[H &%LJ"0C<I\3] @% &@  [0H  &<60U#Pr
M,Z4?  !3#P   0           '1R+F, 10!E       * !PC;0    "D 4  q
M  ! *2,H  !?J!A(L*#!@P@3*ERH\$4#!0(34)$3QLT<-F'HE $Q!DT8BF,Tp
MRID#(HT;$&% F$G#IDR"EPE4.(2H J;-F#,C"LD#@D@8.VG(@&A2YLP9DW/>o
MN&$!(D:.'#%LRGP844J9EF'FE!%JDLX;$'30;(131PR;-&- D'G3)HQ)%S"Gn
MTKP9-V?-(6S;NA%ZULW&-W#HI%$Z1\=-N1$3M!B3H(Y6L&(YLH73LDT9-W1 m
MO#$#>6/'CV%"EAF)DVI-Q602D+E:1F-G$$?M7.;H$:3(.2\1GVZ!>TZ<.F7*l
MZ-DHIPR<,AFWEK1(I^*8,KA+ST4QYDT=S"#*R):3)ZS),R#$\%QM)DP=-G12k
M2+5+-S?[)F'6E%G94G/@P18-KS?]L@41(54884014GPQ11):%-&#&R]9%890j
M)XFG$4D9H016&I9)EYA_0R 1A!13%$&%@0@JR. 0M84F$@A:939'&L-IN!L1i
M4RR1!!1?#"'%2TF<X<8;Q7'TD1QIA'$&<:W5(8=%,C+DY)-0/CG30Z:!0$(2h
M9.@ EAPNC,&"'4VY($-33\7P @PSG%D#"##DH ,,,>@P PYJ_104"$7@ 4>=g
M0 E% @ARF?80H%8R\<896M+!I9=@DC"H"B!8!=2+2H4Y)IE0G9DF#&NRZ2:<f
M<M+)9U"/@H!B14<*!<8<S0F6UG:4NG$"6%^MVBI:M'U$**SXS8H"&76@$4(*e
MCY8J:1JQAAD#")B:B:::S,* @PXU3$L##<R282<9I2;A1AJ"A<$&",5-BE^Qd
M"@ ZI0*L9H3K9W+L.EJR/8 @PI59;MGEEY8VJRFT;;X9YYRC"I7GGMKV::4(c
M.U"IP$,CF#0&&W6L!@(/K)(QF MH^ "QQ!1;C#$=9)#'L<<*1.S&Q!5O-#(9b
M9XEQ\L<KA^SR=<B2/'/*(+=\L1EC8,;&SBJS+/)H2[ZQ<Y541,8JD6Z MQD(a
M+9TAKGV"$:82D+"U!A@==3D\ GDFN?0$%%1,084423AQ1 (BC$'&'"(X+! (z
M36_TXG":<1:69RF*%F^+RX'@6!DN@! $&VR\<<=K\,E'GTNZT:K9=D1:[-T<y
M3*7!V6HO%D<&7&$_S+,9>\V70(<?ACCB@0E"3+9?JWL(HH@D)IB ##78 /%Ex
M&IMA-Z1Y;UG11>Y6VIQ9+NUG.KQ@A<'\%JS?_GJ)731L^MW%5]>&&&4+M?=?w
M?D<F1AUFF#%OXHLW_OC?AFL5KU=JS5>VC) A6SC\D=M?G^?U"]U62.<>L7DNv
M=69( ( $1*#<%4%V]J/= @=4(-@5(0$U@($&8<"$W^W%<\,#014>\[?'G"]]u
M\[+<6EZCJ.-A)&L,*J#IVN6J7,7KA.J30PRV,,$&6O %,LC>0VCXKMJ$!WTYt
ME $/ T1!!P)1B-N#%%[:H!>^E UK^(F.\R"X$MJ=+6UK:]O;XC:WND715'FIs
MB!7]HA*,G$&+I1OBK=+2%8Y\P0QN!$&]8* ](M(1.V2X8Q[WV,<Y+L=%@C22r
M'MFDO2H=R2N!04$*6$0')-(E4 HH QY$<I(Z?LTD9&@D34!@J#%<S0S7"4D6q
MU>4P/X+ #F^X$QP^HI4O/.T[*) ,<VQ(J%M&#00I**2[7A5+H<QR)&6PI:*^p
M,X=<5F>7T(.4+\\0 Q8\DU6\E.8RHS:F8,IQF*\L9G;TI$9E0NT,SB1,9J))o
MR7-:TXB0PN%H@"G,&L+R3FOYPFI:HI%<WE,HWF27(<T AS?,X0N9V6=KDBF&n
MUMPA.&[X@CQ'DDN"&A2ADKE.9@+JRG^JY0T(I8A%7E@&?XJ3HP,MZ$$ST\*1m
M)D>B#H6H1)$XKXJJ%*/5T2@]OVE/<3K&2"4-YYT"ZK"VF"27=0R--=6934C]l
M!)@/V<-#$N#)P(@R 7>SRE%8-4_X?9(PSDO 5+^VR$=^#05*_0D+OJ@VMKDMk
MH FX QI8$E2RAJ!>17B"$8 ) JDJX"5SN .X.I)+LD[2KU--@"D?<X(QG, Pj
M=_,>9<I@&<Q(!R9C2"1XZA4#[<%$#,6)CV<5FY6-G( ,C\4JI!2JD<N^))!Xi
M5"1G1TM5,^3RH+$%SV$3^Q*"0HT.MLT8TE@@@A(4!@0M$(H:D4N29^(1+73@h
M@AM$P +>PN0G6X!!%^ *$TV""P4RX&X"^L!;T")G#:-=K&GGD-J[^08XPJ'<g
M3&""VT$VA;:>RR5L\[C;O\+$MUT)+LF&6]SC)A<E>V&N+I\;$NE2U[HOP:YVf
MQ9L [](!O.(EKW\38%[1)E;#B25KO<P:R;3:8:UH:ZL8X0KBO]XM">7;R(&_e
MVDF2Q.8R3'DH"/RB'*6P(0^7O9M2]+;-,^Q ,W^3@V"UDN.-\%@H=+B#TF0Hd
MUK_F5RV:Y:M?7W+E3R;XKBA)2PN:HF7>_O1(DJ2MA3$\6@V_Y)BUG"9:[; %c
M+Y-ANZ/-)VM+RN+LL.$Q6ZYM8>_SY7J%!KD@Z&9?S3P'H*:9MVL.;YL3"^=Db
M3K.9V+5S%UB0:4*3804QP'-B\]E2Y/63Q0Y+0'$JN21&/J3%ICG(5*% RXVDa
MY$51JX_WJMB"OA#YG"Y(=1#D<(8Z5)8.A5$L4]DYS:E:A=4GL8.X@&.8'_GEz
M(0A95T>+^9!*FQ.7NL0FLXL,505LN8YX8 %Y6#"'XXRA2&SP+#L#(X>KOCC&y
MDFG#9(_=1D7JKT5,R6UVMM.=N48MR) R"0NE5Q]-/B<PKWFF1C!#DJG!;YH[x
M0#B2Q:)D9)4AX'GT,4_@)_'+(+MOKYDF7.1294';4>#]?>U\%MG9Q+:[#.^^w
M&B&GV@<_ WK4,]^Y?V^>\W'-EN>IOML46O,:N;ZA/LN#^E?@1Q[SH(=%K1%,v
MU$C'\JF: 4BYQ,,B^0@"L?/ 5+9SG0./C(<5K*#<+XEZ&;: ARXLDCSVAM3!u
MEGOQ(A.0RE/5Y"SW\NVHH6":+)AH#(CJ8D@Y",I.(W=7IAX9N9>NY5^70R[It
MO4C%'UD%]#XRO=T.]P3(?0N@5Y3=ZT5T>&L/UC21]5]IC4RP2#G?O/9U.YFYs
MM?F)U-3X";;I$C#L8A\[V==<)SQW'[48\#;YV63^&63@["2U6MH4*T.UAXSMr
M@VC;D/_L=JT+_\9T0G/YTZPF],=]SFY&=:KHEO?RZ5U-2-%;!GD?Y^"%(H8Wq
MA$7ZG!,>0"('CO,=KY$&+_ 5$X4;7?=7@E=.<I9^B4=3.@17#TAX$5AD,C"!p
M*"0'DC95]-=Y%%AS?W5_(MB!^)=T"8=ODE49)M=OX/%OK<$4AS-PHU%P!G@^o
M8,-R=T-R@7,;A9-^805_MO5R_+5HPZ=:,/@:)I<&06)YKI58F1=V8\=V%X-Vn
MK8,[%L1VI$<L&W9Z=4=S5Z6$UR%P/@@:@F-C:2 ;,<1R+9< 4P@"GT=_HJ<Hm
M,="%O'5ZJ:=#J^=J2=B#OT=2*,$X,)@J-J0B\^):<2AVA%1V5U@]:K>%9=>%l
M2 @35P:&=A=S,(&)B[2'*;AA+J<"*'!_H#9)7G@3I+@"M.5FXZ6"6)<9=; Gk
M\%-J+X0?T<,\0_A7/7<5/^=?<3B'=EB'.D2)@69Z##=W>QAJG7A_^%6$HDB*j
MBU=Z;Z8H,N!VDZ:+KS95L6804[5W"982NZ9&O79%TW1(7Y$2J$2(*B=LQ&9Li
M)H=\RX9^1?9\RS=1IA<9UD$'9)$9$U5]T/9*TZ9]"6!M9=!]!O%]X!1^F41.h
M&%ADYB=N\NA.[#11Y79NV#$&GC55<D57N:0"Y:B)5R:*TU2*>E0O)] "LV("g
M)@ HAU=D*Q!>9;9A<9@6]>*1179D:<$#-=F2Y_22P<01> B*HCA1;C=)]8*1f
MO%6.*U O,]!F/K<1(5F./6"27, %LZ*)H<B3WT&2/F"2,' "$*:2+#F2T:B3e
M(' "-W"5E8A9G8@";C=-DS1F)_"5J\A;(:F54<.57@F6H)@ 8BF2+EF6)IF6d
M,6D3-,D1A$(G;R>*;UED<7F6=,E;K)B59#E)70F9?'D3?XF79T"29HF6:EF,c
MBK5(:0$IBLF2C7E.CSF7)U"7&S:4%%B4I$E;(ZF*'_:4:QD3*$"4*V"48^F2b
MO7F-K?A7*D"15!F9"@![ B%[JP,8/&$&!-@&E*0Q)T$_&9./3,%:!@@OB#@2a
MPI=MK01^W*8 >L8:I_9^?V51*T4KS<$&7Q!:9, "7M&>7W '1*(15[5"@3:?z
MXO*>R"$4]0*?*  #')A#U=1#%50B0,1=E^A__0F?(. #;"*-_.F>]@DN&U$Oy
M>P934293"X@"%>J?#\)=%]I/U311&QBB)5H&?;:1+9%+(0JA$@H#.Y6<P\.<x
M1L 2*[)GX1%3L[& W^E]X0E.ZHE0#[&A#=6AES%3'=A,*G%3ZV0=V.&%6U:Dw
MF9%N^:A259AJBUB%CGAV.8497/AV_14Q9D >(% C-Y(C4I!8=],_+*(D&Q$6v
M%:)C/ H_7! O60$"#T6(6>%:/1@9TE4X%0$">3JHW@,^;I \;3A?;WAEBD=Wu
MJT>5<I"2*QFI;:>,4WF6TI69,"&6(7!Z)]"IF?A\2J%UP*$](P \ *2F.*(Ct
MB75EH7J,6X"I75"J&X:B=58'^FA0;M>'MNI9;K9J2G(266I0KW>CW/A7> $'s
MSQF=TZEPUDDRV&D\+J5UX,&=:1BD!SFD/44JY E2M)@<DH2>< BE[/F@_RF?r
M#FJA]UD&^?D5^]FN(@J@Y/*? UJ@HW&@3.1#"OJ!_M6@]"FC$WJ*<4>O*[I(q
MXZH1'/I02_JA,?J?)/JN*'"B%)BB"/NN+3I7+YJN[DFP-!I0RHD04Y6CZ-%5p
M@9@</:JD$4*!<\"M!8&0-62E#[&P#.6C$?6A3WI14:I35.IUZ(JEO*JE0D=5o
MV($1K (]0N=U8.>(C6AV&26FDTBF2&BF:.JJ;.JFD )CKS&H^G,&L?1+]--0n
MWJ,W;-$:!@<>O/AQ@ HI.C8':& =;  A_B<9SMJU<G!YCUJ$MEJ2G%JI(""6m
MF IJD\JILF)=8BFJI"J-;6>;*<.JPA.P13BKTV.KF9B;2$L'2GM$';A#=4=;l
MNGJL<_"KBY2Y\.*4:UL215A?BI2XM&JY?FNZ1H25$F<2J7J;J>M75CMS6 NKk
M_G5O?&IK3YBRV&J.AKH4'[5C=?L@J>&&=Y.GO:>\C[.;%'@YHX%'CJ,>,K2Jj
M'\09O=NF&R:[NE(OIV>YH'NQN]JKH[L"?2B^]?9A2/=7Q-IJHINLIK.-!3%Ki
MOV4A9[81EC$'C78D,$L0,HLK"MF_Y6IN0/M; K8:<B 'Q-6_B1(O6[ 8<P,"h
M6Y!^&#Q-072K#B:R#Q$0W*?$_0(                                 g
:                                _(, f
 e
end