'=========================================================================== ' Subject: REDIM PRESERVE Date: 12-16-95 (16:53) ' Author: Jamshid Khoshrangi Code: PB ' Origin: qjackson@direct.ca Packet: LIBRARY.ABC '=========================================================================== ' REDIM.PBU REDIM.PBU ' Universal REDIM PRESERVE v1.1 ' (For PB 3.2) ' Copyright 1995 by AhuraMazda(tm) Software ' Written by Jamshid Khoshrangi ' Internet E-mail: qjackson@direct.ca ' PURPOSE: ' I dearly miss PDS/VBDOS's ability to redimension an array without ' losing the array's previous contents. This feature, called ' REDIM PRESERVE, can be emulated, so I wrote a routine to emulate ' REDIM PRESERVE a long time ago, but I soon found my code littered ' with: REDIM.PRESERVE.STRING REDIM.PRESERVE.INTEGER ' : ' : REDIM.PRESERVE.LONG REDIM.PRESERVE.SINGLE ' The staff at PowerBASIC Inc. have hinted that REDIM PRESERVE will ' "most likely" be a feature of version 4.0, or something like that. ' Meanwhile, I need a universal REDIM PRESERVE, and I need it now! ' ' I finally got around to writing a "universal" REDIM PRESERVE that ' takes an array of any of the intrinsic PowerBASIC data types and ' REDIM's it. ' NOTES: ' REDIM_PRESERVE works like this: $LINK "REDIM.PBU" DECLARE SUB REDIM_PRESERVE(ANY, INTEGER) REDIM_PRESERVE TheArray(), NewMax ' TheArray() may be any of the following types: BYTE WORD DWORD INTEGER LONG QUAD SINGLE DOUBLE EXT FIX BCD STRING (Dynamic only!) ' Any other type, say an array of fixed length strings, will generate ' run-time ERROR 73 (Feature unavailable). ' WARNING: TheArray() must be dynamic. Passing a static array will ' NOT generate an error, and the array will come back redimensioned ' as a dynamic array BUT if you pass a static array to REDIM_PRESERVE, ' memory will not be reclaimed. ' How did I do it? Magic! The source file is about 500 lines long, ' but, boy, does it do the job and do it fast -- and well. And ' all in native PB and a little inline assembler for good measure. ' The PBU is freeware. That is to say, I maintain my copyright, but ' grant anyone and everyone the right to use the PBU in their code ' as they see fit. The source code, however, if it is purchased, may ' not be distributed. ' For the curious, the source code is available from AhuraMazda(tm) ' Software for a $25 (Canadian Funds) money order payable to ' "Quinn Tyler Jackson", sent to: ' AhuraMazda(tm) Software, ' P.O. Box 44072, ' 6518 East Hastings Street, ' Burnaby, British Columbia ' V5B 4Y2 CANADA ' Remember to make the money order payable to Quinn Tyler Jackson, ' or it will have to be returned to you, without the source code. ;) ' Jamshid "The Kludge" Khoshrangi DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2 SUB V1:OPEN "O",1,"PB_RDP11.ZIP",4^6:Z&=3879:?STRING$(50,177); U"%up()%9%%%R-%5U&_DYG>AB1,.%%XE%%%.%%%%wj%inrS[ugzV2fN;#T^>#nNPM U"L6nnBTDV4lT5nVZ+%D8rM8g#/c-J#?jsGcY^<9S%l=JRz1bm+xwQmIegS3JiBg2 U"T_Oo+x2SB/d[pn=mAIn#PGq*$0[;QaT*ov\r)$D:D4fkZ=SVmo4\oV36#l]?B?/ U"\Z/8pKluUBhQtnJ>uWt?<:)qgM97%a6N[a1L94x*$q2Fp?i97b'?tB'UnO0%o(Z U"K05^Y^Xq\MT)InQ^oOM6M-yjTvDDcV+X\l)RiYJo8fPXcP'n%V45Cr1GY_O&^PV U"%,'4igCGHY<\P=(%d4'aGw\f_#,FCSYHiX1TI7u'6;i4CaYiE;GRNa'3DR\alQ= U"RFsaa]:Rra1hp,.]:o&aQ;ARSC;-^:[C5Cl/$14IH50$fQ,Q0lo^a,vaQE:R$G$ U")b,8Z[:(H'i#Cq?kY0aDGZ,62H?],'x$ps8F>Ip3n/:-c'M$4Us6dlh,v&dhl,v U"e?g+3s>xee_unCG'rLOeem_2DGc'L+RERD?$Dlz(<2clz(t\CGNna[BGW^Q'bGl U"D*8\eTBS2VJ5BRcx\94al.u0>mY_HKD9PUKgHCKF%.ZH[d_Wr(jD>wmfF U"aa$m_C.%(*1S6Kc&&GkzBefS2i[2hJCvc8]DZ^bDn+bime#Zbrd&krDoE?#%A#c U"0JZ9$6OAHTQ'KfI5lG+EZnqhFFEtZU()E59L:<8uLXiePdp7HSh)i_l')D6]Qw- U"2.)x?jWw$$8aq>O,\xpo10opKbu)Vk+q]KNSz%9o(5dQ:,y2CQ.q1xUy;1N^E#< U"9PT%vkuY;._J/9%sEV:$-FX0UE=+Q)$QSTI1tRIbXtMP9Yu'Q9'N/mM&tvPukR8 U"bU[7BJ)<5UjBXKSV[zTOKlgIe3VC0IaEhj&6[Efj4#>:3i#9Ww=\I2hJO75ZP$7 U"pNnBT-RlqF4g5RT;ab-_7e?)j:W6p<-#3x9h,cYd[wT&W(Rd6# U"N%% U"h_j;FpT[rY&w4YDKuyQn4niU U")Y6uiJpdkp<7,&1ADO^(?0&3Kf%-,F7DQu5;=-:?U&;2hak+L3W5/uZB51k,94A U"O0;:B2JpOqW1?JYjN2gvOgJ))1k#e(92JS-;f2-J\Q?G4J]Z;-5J>4;vXj2f'sX U"5X3'rU/+j-BVqw/qN8KI4WHWZB0 U"6;mMq7H']nK^8nNHVO^?3k0BpaNK(VHlfBTgurK>C4OqW2A>PBt&.xc3WHD]?b5 U"NMhG%+r.W;$h%/gV.g-gU82K7C[^[jKThm;TD58YQ1dX'Yhs8c-:RqG_**n+?/g U"1l0r#UQAX]*WnMU[$XP4m*t/)C;Rn<)f5.6Y'H]Nc39Dr-k&i]WamgF3D-K;fo\ U"NvZ3tFzX1,5sr2vbBr.rm9_A_rq4*LTa*V[vMpIgOHCb\j-(,[qsvNIdWssPp*< U"dPc,r8uY[SnUEXZAM2EjbgG3FC9rS,2H/Mo_k)NPJW[*^>.FH?No'(N=ESN/n(7 U"]tXVG4Z](52])Y4C6B%WlWdkP6fX<&%VYW_&kqtH&%)-q*OV6lk(n(/J;>d,GpG U"%OQ7:2d,cNk*(>JR;xkKNu64ov)-?WC(dRG%O8oIjP3(AUc-)OxNS-cIOz7.sa3 U"#:d7&:H+=wh6KMimO0;omqm%Xx'k>T9q\v>dHFEFB\53:MDSo3H$RDKK3L(4,]B U".$BpiIcNP=AF2fr,S2kA0-0hkouF+7b>ZaV&3F\co#6.Wsuu0u9=CusnjKQbpy& U"kBh[6Z*bmzpR?nk,^l)K*KGLAO;,XZDto::LsxXZ6?)iz4VR#__X.Jl:earcgm] U"u#;B6#s?dC1VJMH6Zrqw41m2U;G),+z_FcshcIxB=,GHPX6fa/H U"[.gt+p'pi:$HW_lc6&Bb*7PypILs=]?yn_EJ%?%2H&_Q+,t3^Drr<_A1PD2>g8v0Bd#?,rDrj# U"d9'9UZ_;7;'OuVdUC_jP$c^Xq^O.,yy%NbsxKO^%XVX_'KYVx.#O'QeWi,'Ppbt U"oGNE&(D+rrD?Q]LYSVF>n+,9Rn$2hy,w>Gh>9(\/bi.B4G8Us*G,aiXIRNak0Dx6J.gG158?&I/?tnV*^Te94.x^EiF'QbJ$ U"G-%mehKRZnDabVu9xx-V6MuPSNCTAtr^6)73z.>OKL3e#qdK?/N7na;MsvAA+?0 U"b4C5[ts480XL\FtdudE1b\J+[#K\QLBGe8+YHh U".m*)zIgSlRrB/oL6#W/a,JZ%%Blq_'4.mT:%6QvND$%+EFjYZY;.OA02T-s6.]h'\< U"OGk%&eApRp=*6\7VP-v[>kjYF&PKQXjZBYmX9#Cd9_T51IGx%<>[T+g1VE*1rCl U"t6.VG[An3l>Dm+C]Q_Bj3r3zL>Mb^JvZ(?x0eIkM(Sa+SkEaEC&%Pe48o,6/P8l U"2tU-MD=W05<_nB[cJ,,7n>#6m=pe^ U"<;6%[en-u\?CG.e66BsG28Vo*BrjMmFM,-_?a(0nO4S;mLz%M*M*xNNlAHdMAwy U".:0\&(gqvDJR:4$*z85aW/h.27=[uneu**0'Spn3l2cIMZ4A6Vs$Tx_TMZRsN*NlKUu4bf U"Rjaa]7F56zU0fYnbHXlqCj^ORt9EKMWc#7(2ip U"4m-(b9aB<-70C67DLsZ$_tVMj=JwuC]S9Wqu#(HV%Jnl$F&1gAM=8Zpsf#)w953 U"U+t?kJsX)d$H)g3RA6>2%h=6]g/C*v,duKwRug(LU+]^.04Mc)$%T;/ofM/I1lp U"NI6LbG/r(-;:D4,#T3?Jc/[$gUA0&o*zJ-sr/;4LYS=P?DTf[EVCWCN]qE*sDcVE4f'oYF*U6YnL-W U"eA4wy(KCj=;0fwj5A]:pTK]V&yJqJdLdPU(7$T\L10('GmXv U"G$QA6-/:Wnm=VrW*nvWLU8A'.-oHtHZ)o^?x&X?S0bl3hAFNw7[.rnP$CQRf>Wc U"xmpq_)<5;3HWz*phsiD$:K9AvVb#E8YCE4q[#1abl2GNG].lS=RuK,Mk0Iekl>b U"F40&gYHKR>Hfb:%$\Qyg6jI#>$m\Ok5T=VRODHJ?Ho^9o0XBD,EVECWb+]0gggU U"w83&sLa_7GIU7?(jl:gUC0Chl[V6clSpMS8'iCG9S3%l8/L*02tE]5q:>\o)h[,biF(og_n5CI,k)w(Pq[RVbeuXH--*,TgEpIH7$-t U"Wa%XEad5rpr)L9VkD+&5P2ONNC<>0-YyDn=9o6+gp2sh2eM^8k/Cd/wX#KLVL4( U"X&kqH[aj.Z^9q1(D'GI*d*='3tsU0i>L;+\91,gNR4pp/8/N[z%kw;f:=,0#tq. U"un85THc)WOM]3DefAb:F-+Pp=x$dzkX)HTQ[/s01>/BgVQX(Fu.E9T/.fW8.(d/ U"yyD\1qCEDoF0E_3l6zpg0e)x4zE#<4d9;_\DK^0_.CO1M(I=DkzgG70E6/YBZdy U"UEh4;JsHoiq%,up&%'9%9%%%%-O%5U_#DYGA-B1,%(%XE%%%.%%%%%%%%%%%E%% U"%%%%%%%w%jinr%Sugz%up&'%9%9%%%%-%1FW_DkAP39%U*%%&C0%%%/%%%%%%%% U"%&%E%7%%X,%%%wj%firj.Sy'y%up&'%9%9%%%%-%1;W_DGlg-7%.&%%'k&%%%0% U"%%%%%%%%&%E%%%%\2%%%yj%xywi%uSgf%xup*%+%%%%%(%((%w%%(%83%%%%% END SUB CLOSE:IF S=244AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad! SUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32 IF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1 S=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUB