TIP: Click on subject to list as thread! ANSI
echo: pascal
to: ALL
from: JOHAN KOHLER
date: 1998-04-13 17:02:00
subject: WAV problem

Hi there
Can someone please give me a clue as to why the unit below (in particular
the Procedure READFORMAT)  gives Error #100 when I run it.  It plays
a .Wav file but when it reaches the end the error occurs (See * below).
The code was not originally written by me.  I have UUENCODED one of the
WAV files which result in the problem and have attached it below.
Thanks in advance
Johan
------------------- S O U R C E  C O D E  F O L L O W S------------------
{$I-}
UNIT PlayWav; {Converted from source code by Bengt Holgersson}
Interface
Type string63 = string[63];
Procedure PlayWavFile(fn : string63; t : byte);
Implementation
uses dos;
VAR
  BytesRead, BlockSize, BlockRest : Word;
  dataptr, pp : pointer;
  Times, SampRateDiv : byte;
  reverse,wavinfo:boolean;
  fmt: record
        wFormatTag:word;
        nChannels:word;
        nSamplesPerSec:longint;
        nAvgBytesPerSec:longint;
        nBlockAlign:word;
        wBitsPerSample:word;
       end;
 PROCEDURE PlaySound(bufptr:pointer;bufctr:longint;ratediv,times:word)
;{assember;}
  var
    old_int8 : pointer;
    timesleft :word;
    savemask:byte;
  begin;
  ASM
        jmp     @PlayMain
  @int8_out_spk:
        xor     al,al
        out     42h,al
        mov     al,cl
        out     42h,al
        mov     ax,dx
        or      ax,si
        jz      @ready
        dec     bl
        jnz     @skip
        mov     bl,bh
        mov     al,es:[di]
        shr     al,1
        shr     al,1
        inc     al
        mov     cl,al
        inc     di
        jnz     @noseg
        mov     ax,es
        add     ax,1000h
        mov     es,ax
  @noseg:
        sub     si,+01
        sbb     dx,+00
  @skip:
        mov     al,20h
        out     20h,al
        iret
  @ready:
        mov     ch,0ffh
        jmp     @skip
  @PlayMain:
        cli
        mov     ax,3508h
        int     21h                    { get int vector 08 in es:bx }
        mov     word ptr old_int8,bx
        mov     word ptr old_int8+2,es
        in      al,21h                 { interruptmask }
        mov     savemask,al
        mov     al,0ffh                { disable all interrupts }
        out     21h,al
        sti
        push    ds
        mov     ax,cs
        mov     ds,ax
        mov     dx,offset @int8_out_spk
        mov     ax,2508h
        int     21h                    { set int vector 08 to ds:dx }
        pop     ds
        mov     al,34h
        out     43h,al                 { timer 0 mode }
        mov     al,36h                 { 22khz }
        out     40h,al
        xor     al,al
        out     40h,al
        mov     al,90h
        out     43h,al                 { timer 2 mode }
        in      al,61h                 { enable speaker }
        or      al,3
        out     61h,al
        mov     cx,times
        mov     timesleft,cx
        mov     cl,20h
        mov     bx,ratediv
        mov     bh,bl
        les     si,bufctr
        mov     dx,es
        les     di,bufptr
  @nexttime:
        push    di                     { bufptrlo }
        push    es                     { bufptrhi }
        push    si                     { bufctrlo }
        push    dx                     { bufctrhi }
        push    bx                     { ratediv  }
        xor     ch,ch                  { readyflag = false }
        mov     al,0feh                { enable timerinterrupt }
        out     21h,al
  @notready:
        or      ch,ch
        jz      @notready
        cli
        mov     al,0ffh                { disable all interrupts }
        out     21h,al
        sti
        pop     bx                     { ratediv }
        pop     dx                     { bufctrhi }
        pop     si                     { bufctrlo }
        pop     es                     { bufptrhi }
        pop     di                     { bufptrlo }
        dec     word ptr timesleft     { more times ? }
        jnz     @nexttime
        in      al,61h                 { disable speaker }
        and     al,0fch
        out     61h,al
        mov     al,34h
        out     43h,al                 { timer 0 mode }
        mov     al,0
        out     40h,al                 { timer 0 clock }
        out     40h,al                 { timer 0 clock }
        mov     al,0b6h
        out     43h,al                 { timer mode }
        mov     ax,533h
        out     42h,al                 { timer 2 spkr }
        mov     al,ah
        out     42h,al                 { timer 2 spkr }
        push    ds
        lds     dx,dword ptr old_int8
        mov     ax,2508h
        int     21h                    { set intrpt vector al to ds:dx }
        pop     ds
        mov     al,savemask            { enable timer and keyboard }
        out     21h,al
  END;
  end;
  { The following procedure is also used to half the samplerate }
  PROCEDURE Stereo2Mono(bufptr:pointer;bufctr:longint); assembler;
  ASM
        les     si,bufctr
        mov     dx,es
        les     di,bufptr
        push    ds
        mov     ax,es
        mov     ds,ax
        mov     bx,di
  @s2mNext:
        mov     ax,dx
        or      ax,si
        jz      @s2mRdy
        xor     ah,ah
        mov     al,es:[di]
        mov     cx,ax
        mov     al,es:[di+1]
        add     ax,cx
        shr     ax,1
        mov     ds:[bx],al
        inc     di
        jnz     @noseg1
        mov     ax,es
        add     ax,1000h
        mov     es,ax
  @noseg1:
        inc     di
        jnz     @noseg2
        mov     ax,es
        add     ax,1000h
        mov     es,ax
  @noseg2:
        inc     bx
        jnz     @noseg3
        mov     ax,ds
        add     ax,1000h
        mov     ds,ax
  @noseg3:
        sub     si,+01
        sbb     dx,+00
        jmp     @s2mNext
  @s2mRdy:
        pop     ds
  END;
  PROCEDURE ReverseData(bufptr:pointer;bufctr:longint); assembler;
  ASM
        push    ds
        les     bx,bufctr
        mov     dx,es
        les     di,bufptr
        mov     si,di
        add     si,bx                  { offset=offset+bufctrlo }
        mov     ax,dx
        adc     ax,0                   { bufctrhi=bufctrhi+carry }
        mov     cl,12
        shl     ax,cl
        mov     cx,ax
        mov     ax,es
        add     ax,cx
        mov     ds,ax                  {ds = segment of end of buffer}
        shr     dx,1
        rcr     bx,1                   { Bufctr = Bufctr / 2 }
  @RevNext:
        mov     ax,bx
        or      ax,dx
        jz      @RevRdy
        sub     si,+01
        jnc     @Rnoseg1
        mov     ax,ds
        sub     ax,1000h
        mov     ds,ax
  @Rnoseg1:
        mov     al,es:[di]             { swap bytes }
        xchg    al,ds:[si]
        mov     es:[di],al
        inc     di
        jnz     @Rnoseg2
        mov     ax,es
        add     ax,1000h
        mov     es,ax
  @Rnoseg2:
        sub     bx,+01
        sbb     dx,+00
        jmp     @RevNext
  @RevRdy:
        pop     ds
  END;
  PROCEDURE ReadFormat(var f:file);
  var
    str:string[4];
    chunksize:longint;
  BEGIN
    blockread(f,str[1],4);
    str[0]:=#4;
    if str='fmt ' then begin
      blockread(f,chunksize,4);
      if wavinfo then writeln('  ''fmt '' size=',chunksize);
      if chunksize=16 then begin
        blockread(f,fmt,sizeof(fmt));
        if wavinfo then with fmt do begin
          writeln('    wFormatTag=',wFormatTag);
          writeln('    nChannels=',nChannels);
          writeln('    nSamplesPerSec=',nSamplesPerSec);
          writeln('    nAvgBytesPerSec=',nAvgBytesPerSec);
          writeln('    nBlockAlign=',nBlockAlign);
          writeln('    wBitsPerSample=',wBitsPerSample);
        end;
        if fmt.wFormatTag1 then begin
          writeln('Unknown Format (',fmt.wFormatTag,')!');
          halt;
        end;
        case word(fmt.nSamplesPerSec) of
          33075..65535:sampratediv:=0;
          16538..33074:sampratediv:=1;
          9188..16537:sampratediv:=2;
          6432..9187:sampratediv:=3;
          4962..6431:sampratediv:=4;
          4043..4961:sampratediv:=5;
          3413..4042:sampratediv:=6;
          else halt;
        end;
      end
      else writeln('''fmt '' chunksize error (',chunksize,')!');
    end
    else writeln('''fmt'' chunk not found!');
  END;
 PROCEDURE PlayWAVE(var f:file;sampratediv,times:byte);
  var
    i : integer;
    str:string[4];
    DataSize,l1:longint;
    p1,p2:pointer;
    s,o:word;
  BEGIN
    blockread(f,str[1],4);
    str[0]:=#4;
    if str='data' then begin
      blockread(f,DataSize,4);
      if wavinfo then writeln('  ''data'' size=',Datasize);
      If MaxAvail>DataSize THEN BEGIN
        if DataSize<$FFF0 then Blocksize:=DataSize else
        Blocksize:=$8000;
        GetMem(pp,BlockSize);
        DataPtr:=pp;
        blockread(f,pp^,BlockSize,bytesread);
        if BlockSize=RIFFsize+8;
    end
    else Writeln('No RIFF header found!');
  END;
  PROCEDURE ShowHelp;
  BEGIN
    Writeln('PLAYWAV  Bengt Holgersson 1991');
    Writeln('Use: PLAYWAV filename [/N:times] [/R] [/I]');
    Writeln('  /N:4   Play WAV 4 times');
    Writeln('  /R     Play WAV backwards');
    Writeln('  /I     Show info about WAV');
  END;
  procedure Getoption(s:string);
  var
    ch:char;
    W:word;
  begin
    if length(s)<2 then exit;
    ch:=s[2];
    case upcase(ch) of
      'R':reverse:=true;
      'N':begin
            if s[3]':' then exit;
            val(copy(s,4,255),times,w);
            if (w>0) or (times<1) then begin
              writeln('times should be in the range 1-65535');
            end;
          end;
      'I':wavinfo:=true;
      '?':showhelp;
    end;
  end;
Procedure PlayWavFile(fn : string63; t : byte);
Var f : file;
    filename : string63;
    i : integer;
BEGIN
  wavinfo:= false;
  reverse:= false;
  Times := t;
  filemode := 0;
  filename := fn;
  if pos('.', filename) = 0 then filename := filename + '.WAV';
  assign(f, filename);
  reset(f, 1);
  IF Ioresult=0 then ReadRIFF(f)
END;
End.
---------------------------------- E N D ---------------------------------
begin 644 C-LACA.WAV
M4DE&1L8J``!7059%9FUT(!`````!``$`$2L``!$K```!``@`9&%T89HJ``"`
M@("`@("`@("`@("`@("`@("`@(&$A(.%A(2$A8.#@8*"@']_?W]]?'Q\>WM[
M>7EY>'AX>'AW=W9X>'AY>WM\?'Y^?GY^?H"!@8&"@X.#@X2$A(2$@X6"@H*"
M@8&!@H*!?X&!@GY^?GY\?'U\?GY^?GY^?G]_?G^`@(&"@H."A(2%A(:&B(:&
MB(B'AX>&AX>%A86%A86%A(.#@X."@H&!?GY^?7U]>WM[>WM\?'Q\?'Q\?GY\
M?7U]?'Y^?G^!@8%_@(!^?GY^?GU]?GU\?'Q[>WIY>GIX>'AX>'5U=G9U=71U
M=75V='1W=W9V>'IZ>7A[>WI[>WM[?7U]?GU]?7Y]?7M[>WQ[?'Q\>WM[?'Q\
M>WI[>WQ[>WQ[>WM\?'IZ?'U]?'V`@'^`@8&#@X.%AHB(BHB)B8J(B(B'AH:&
MAH2$A(2$@X.#@X."@H*"@(!^?WY^?7Q\?7M\?'U\?GZ`@("!@X.#@X2%A86%
MA86%AH:%@X.#A(&!@8!_?WU\>WMY>'AV=7=W=71T=G1V=G5V=75V=G9V=GAX
M>'EZ>GM[>WU]?GY^?7Y^?GQ\?'M[>WIZ>7EX=W=W=W9V=G9V=G9V=G1U='1V
M=W=X=WIZ>GQ]?7^!@8&#A(2#A(6%@X2$A(6#@X2$@X."@8&!?W]_?WY^?GU]
M?7Q\?'Q\>WMZ?7Q\?'Y^?G^`@(&"@X.#@X6%A8:&AX6%A86$A(2$A(2%@H.#
M@G]]?7U[>WIY>'AW=G9V=G1T='1T='9U=7AW>'AY>GM[?GU]?7Y^?GY^?GY^
M?GY_@']_?W]^?G]^?GQ]?'Q[>WM[>WIZ>WQ[>WQ]?7U]?W^`@8&!@8&!@8.$
MA(2$AH:'AX>(B(F)B(B*BHB(B(>%A86$A(*"@8"`?GU]?7Q^?GY_?W^`?G]_
M@(&!@8.%A8:(B8F(BHJ+C(Z.CI&1D9&2DI*2D)"0D(^/CHR,C(J(B(6$A(.!
M@(!_?GU]>WEY>'9U=71S'C)&6EIN>HJ*HK*RPLKBXO+[`P,#`P,"^NKJTJJJ?DX>'>G%E
M95Q24DI$0D)$2$Q,4EI:8FMT='N!A(2%A(2#@7M[=G!F9EY:6E924E).3DY0
M4E966F!B8F9J:FQR='1X>GM[>X"`@X>,C)*7G9VFK*RRNKZ^P,3(R,C(R,2Z
MK*R;C8V`<6-C5$0X.#`L+"PP,#`X0$I*5F5E<'A\?("`A86#@8%[=&AH8EQ6
M5E104$Q,3DY.5%967%Y>8V=N;G%V=G=X>'AZ?H&!AXJ*CY6=G:2LM+2ZP,#$
MQ,C(R,3`P+*BHI2$>'AJ7E!00#0T+"@L+"PT-#A`2DI68VMK=7AX>7Q]?7QX
MG5I8V->7%Q85E144%165EQB8F5J;FYQ=7IZ?7Q\?WU^?H*%
MB(B.DI*6G:2DJK*RN+J\O,#`Q,3$P,"VIIN;A8%U=61>7DP\.#@P-#0T0#P\
M1%!65F9R=G9\?7U]?H&!?7EV=F9B8EY85E964%!.4%)26&!B8F9K:VQS>'A\
M?7]_?G]_A(:*BI"4EY>>HJ*JK+*RLK2VMK:^OKR^O+RJIJ:6B8J*>G%H:%1,
M3$9$1$1(3DQ,6%Y>9WA^?H.)AX>*BXN-AX6%?7-P<&IG9V9D8&!@86%D:6]O
M'N"@H.(AX>*BHN+DY24FZ"?GZ*BGY^HHJ*JKJZNNKC$Q,3$Q,"PL+"8
MDH^/>G1T84Q$1#@X.#A`0$!"4%)28&]O='V"@H*%AH:'@("`=&YN:F9C8V1@
M8&!@8F)E;7!P='AX>7Q_?X*"@H2"@X.#AXB(D(^/EIJ?GZBLLK*VNKK`P,C(
MS,S(R+JRLJ20D)"!<6UM5DQ,1D!`0$1,3$I47EYC=8"`@HR,B(R*BHR&A(1_
M7M[>7Q\@(&"@H&`@("#A86*CY&1F)RWM\AHB(
MA8>'AX6!@8!TWM[>X*"?X6%A(*#@X:*BHJ5
ME968HI^?KK*TM+ZZNL3`R,C,S,R^N*RLEIJ.CGQ\?&)44E)$2$A(4$Y.5%YA
M87*`?W^.BHJ'C(J*AH9_?W9S'E[>WA\?W]]@X"`
M@H&!A(>,C(^4E96=G9VDKJRLN+BXN,#`P,C$LK*VG)R0EW]_>'945%1(2$!$
M2$A,3%967F)B>'^`@(^$AX>,AX>%AWIZ='%J:FEM;6EI;&QH;')R='5U>WAX
M>(%[>X2%A(2$B(B(CI:6F)BBHJ*FMK:LOKZ\OLC(Q-#(R+3`P)J8FII^@'9V
M5EA82$1(2$Q04%!:8&!E?'Y^@9"0@HB*BH>%AX=[='1S;6AH7AX?GV"@H&!@8&'@X.3C965FIN;I*JRLK:\P,#$S,S`MKJZEYB6
MEGM]?6]25%1"0D1$3$Q,3EI>7F1_>GJ#C(Q^A(2$@8&!?W5O;VIG965K:6EJ
M;&IJ;'1R'=Y?'Q_@(>'@82$AH2/CY*7GY^=J*BDLK:VO,#`Q,S,S+:^
MGY^4EY>">'9V6%1,3$1(2%!85E9E:FUM@HJ*B9>)B8B%A85\?W]V:&9F8%IF
M9F)F9FEH9F9L;FYR=G1T='1Y>7:`@'Y]A86`BI&1DJ*BG*RHJ+2^O+S,T-#(
MN+:VEH^,C'EO;VQ*1$1`/#Q`4%A86FML;'*'AX^-GY^*B']_?W%Q>&U>7F%8
M5%1E965K-C9JBHJRVOK[`S-34U-C8
MP,24E)"!;'!P>GAW=W-YX&%A8A_?WU]=75V=&YN:7)R;GR&AI*>KJZ\S,S8V-C8V,S,S(=_?V):3DY*
M1C`P0$!`6':4E)VNJJJBEI:=@WY^;U)21#PX.#Q05%1A=75_B)N;E8^'AW1@
M8&!>6EIL;6]O?I"0FKS,S-C8V-C4W-RR?6EI'#`P'$I24HN5CH[$FIJ^N*2D
M@%I`0"0X.#A&;V]M?X2$D7Q\AVU>7E1>5E9Q='1S:V9F6F1Z>H.7EZ"@GY^J
MIJ:RQ,S,U-S(R&QN;BPL+"Q,D:BHU)"0R)V&AIQL5%0L0$`T8)^?DJZ0D'9<
M7&146%AB6EI@>X*"AHIRMRJJK)_7%P\0%)22')R='^.CI%T9V=6
M1$14=82$F9U_?VML;'",MK;(S-34T-#0D$Y"0B`X.$ZLU-34S(:&CT9&5$I4
M5%90D9&(Q,2ZI'%Q3#PT-&%SO*:*BE!$1#A.
M>'B2FYJ:B&YN8%I65F=\BHJ8EI:";FAH:8&@H+;`P,"^P,"84D)")#@X8:S0
MT,S(?W]P4%!24&!@;FMKEZ*TM*:,7%Q`0D),=(Z.H):)B7)@8%A:965ZCYB8
MDX*":V-L;(*?M+2ZO+R\OI.34$!`)#QN;KC4T-#`>WMJ4E965&9R@H*ZV
MGY^`4CP\2%Y>@I>@H)*!;FY@6EI@;8"`DYJ0D'IJ:F9TCX^FM+2ZNL#`KFA(
M2"PL+%B0$1:6GJ/CYN3@8%Q9F9>
M7&EI>HR7EY)^?FQI='2*HK"PMKBXP*)D9$8L-#1AI*3`P+:VCW-@8%Y24E9F
M>'B8LK*XGGEY6$1*2F2`@)"7E)2$=FIJ8%I::8"2DIJ3?'QI:FI]DZJJLK:Z
MNKR`@%(\,#!.@L#`O+Z^H(9J:F)>7E!<;FZ.J+R\KH:&8DY(2%QYC(R1E96.
M@')R:5Y@8':,C):4A85M9G9VC)^?KK"PL+ZBHF!$,#!`9:ZNQ+BXJ(YY>6-G
M5%148&"#H+BXN)9J:E1.3E1J@("*CY.3BGAX:%Y<7&R(B)B7B(AT9V]OAYN;
MJJZTM,"N:&A(,#`\7**BP+:LK)>(B&IJ5%1.6("`H+BXMIMP<%Q66EID='2!
MC)>7E8"`:%I:6FN(FIJ7B8EY;W)RAI:DI*JVML3$='1.-#P\5I*2OJJJJIJ=
M>'AQ4E)(2G9VG;2TL)UX>&5@8&!>86%PA)>7FHAI:5165F>`D9&3BG]_>'1T
M>HB7EZ2NO+S,MK982"PL3ERFIJZ@H)VBGY]W965&0E14B**JJIV2DG9T:FIF
M6%Y>;82$E))]?6A@8V-M?'R'BHJ*AGQS7I\?(&`@(*#A86(CY24EY>7FZ*NKJ2/?W]V'@X:'AX.!@7]Z=G9X
M>WQ\?X"`?'AX>'AW=W9O;FYP=GAX?'IZ>'9V=GAY>WM^@8&#@X*"@8"`@(*'
MAXF,CHZ-CHR,CI"0CY"1D8^,C(R)AX>$@H2$A(6%A(2"@H*"@8%_?W]^?GY^
M?GU[>WEW=WAY>GI[?'Q\?'Q\?7U\?'M\?'U^@("`?7U]?'U]?7]_?X"!@8&`
M?W]^?7Y^?X""@H."@H&!@(!^?W]_?X*"@X."@H!_?7U]?7U^?W]_@(&!?WY\
M?'M[?'Q\?7U_?X"`?WY[>WU_?WU_?W]^?G]_?GU]?GY^?H"`@("`?W]^?GY^
M?W]_?W^`@']_?GY]?7U^?GY^?X!_?W]^?GY^?W]_?W]_?X"`@8&`@'^`@(!_
M?W]_?G]_@8"`@(!_?W^`@("`?W]_?X"`@8&!@8&!@8*"@8&!@8&!@(&!@8&"
M@H*"@8&!@8&`?W]_?W]_?W]_?WY^?W]_?W]_?W]_?X!_?X"`@(!_?W^`?W]_
M?W]_@8&!@8&`@("`@8&!@8"`@']_?W]^?GY^?GY]?7U]?7U]?7U]?7U]?7U^
M?GY^?W]_?W]_@("`@']_?W^`@8&!@8&!@8&!@8"`@("`@8&!@("`@("`@("`
M@("`@("`@(!_?W]_@(&!@8&!@8&!@8&!@8&!@8*"@8."@H*!@8"!@("!@8*"
M@8&!@8*!@8%_?X!_@("`@8&!@8&!@8&"@H&"@8&"@8&!@("`?W]_?W]_?W]_
M?W]_?GY^?GU]?7Y^?GY^?GU]?7U]?7Y^?7Y^?7^`@']^?W]_?W]^?GU]?7U]
M?7Y^?GY^?GY^?GY^?GY^?GY_?WY_?GY_?W]_?W]_?W]_?W]_?W]_?GY^?GY_
M?W]_?W^`@("`@("`@("`?W]_?W]_?X"`@("`@("`@("`@(&!@8&!@(!_?X!_
M?W]_@(!_?X"`?X!_?W]_?W]_?GY^?GU]?GY^?GY_?W]_?W]_?W]_?W]_?GY^
M?GY^?GY^?7U]?7U]?GY^?GY^?GU]?7U]?'Q]?7U]?GY^?GY^?GY^?GY^?GY^
M?7U]?'Q]?7U]?7Y^?W]_?W^`?W]_?GU]?7U]?7U^?GY^?W]_?W]_?W]_?W^`
M@(!_?W]_?W]_@("`@("`@("`?W]^?GY[?7Y^?G]^?G^`@("`@8&`@8&!@8&!
M@("!@8"`?W^`@8&`@8&!@8&`@(!_?W]_?GY^?GU]?7Y^?7]]?7]^?GY_?GY_
M?GY^?G]_?GY^?G]^?W]]@(!^?WY^?WU_?WU^?GY^?7U\?GU]?7U]?GU^?GU^
M?GM_?7U^?GQ\?WQ\?G]^?GY^?7U^?7U_?8"`?GY_?WY\?']\?GY^?G]_?WQ\
M?WU^?GY_?WY_@(!_?WY^@']_?H"`@()_@H*!@("!@(&!@8*`@(&`@']_@8%_
M@GY^@X"`@'^!@7^`A(1^@8%^@GY^?WY^?WR#@WZ`?W]^?W^!?X"`?W]_?X!^
M?H-[@8%^?WY^?G]_@'V"@GY]?W]\@8%_?'Y^?(*">8![>WZ!=G9_>7E_?'M[
M@'F"@G:$A'J`>WM]?7Y^?8*">H!]?7Z!?'Q^?W^`?GY^?WQ_?WU_?WM\@(!]
M?W]_?GU]@7V`@()]?7]_@H*!@'Y^@WY^@WV"@GR$>GJ&@("`A(&!?X9[>X%\
M?(1]@X."@X-^@8&!@H)_?X"`@(%_@H)\@'M[@GU]@W^!@7R`?GZ`A(1]?W]_
M?7V"@GJ!@7^!@(""@(!^A'Q\@8!^?H!]?7N!>7E_>'U]>'Y^?'M\?("`A85Z
MA85[@'M[?WQ]?7M_?WJ#>GJ"?X"`?'Q\@'Y]?7Y^?GQ\?'QZ?8"`?7]_@GQ_
M?WQ\@("$@(!_>(2$>8%X>()[>X-^?7V&@(2$@(&!@WQ\?(I]?8*`>GI^A(&!
M@GY^@WZ(B'V(=W>%?GZ!?8&!?81_?X1]?7Y_@("`?8*"?H*"?H.`@(&#@W^#
M@8%_@8.#@7]_@GZ$A'^#>GJ">7E_?WU]?7Y]?7Q]?8!Y@X-\?8"`?X"`>H)]
M?7M_>GI]>7E]>WY^?'Y^?7Z!@7]^@(!]@(![?'U]?WR`@(%Z>H![?W^`@G1T
M?WAX>X%\?']_>WN"?GZ(>8>'?(6%=8=P<(IXAX=\A85]AW]_AGZ*BGB(B'^`
M@H)\@7IZA7EYA'J#@WR"=W>#>WN"?(*"?H%^?GN`@(![@H)^?GY^?X&!?X%]
M?89\?(!_?GYXA'9V?GY^@G>!@7:'@(!^>'A[A'=W@7I\?'M]?72#8&!>81X>(-V=HATB(APB'!P@W)RA7.!@7:">GI\?GYY@7IZA'E_?WF!@7:"
M>'B!=G:!>7]_?8%Y>8=W=X1VB(AYA7M[@WEY?GN*BG:&>GJ$?GZ">X6%?8=\
M?(=\?']Z@8%_?86%>(6%>H%^?G^`@'V!@H*`?8"`>8.#>X=V=HAWAH9[AX=Y
MA7IZ@'U[>X-]?8)[A(1UB')RA7AXA7F!@7Q^?H-[>7E]@7AX@W=W@GE^?GF%
M>'A^?'Q^=WY^?G2(B'*(B'6(;V^*=HZ.(-X@X-Z?GQ\>(.#
M>(-\?()X?'QX?GZ`>H*">H1[>X5X>(>`?W^'>H2$>(R,>(QRGJ'?HB(>8Z.>(AX>(EZ
MB(A]A85[@'Y^?H2$?H*$A(1[AH9ZAH9Y?GY^?'Q\?(EQ<8QXA85ZAGAXAW5U
MD6Z0D'.'='2(=W>'?X&!?7R)B7:)B7.'=W>$?7U\@'Y^?8!]?8%Z>HAUB(AV
MA')RAG!PBFR0D'6*='2&@X.`AGY^A7F#@WJ(B'F$=W>.='20=HZ.>(IZ>HY[
M>W^#>GJ(;8Z.;H^/=)!\?(UWAX=\@8%_?(>'?(IW=XQT=(IVC(R!@X.(@8Z.
M?(!\?(.`@'^#A(2#?W]_@("`@8!\?(-\A85]?W]X?WM[?7IW=WA_?W9Z>WMX
M@GEY@7AX@'M\?'IY>79Y>GIZ=GEY>'AX>WI[>WE]>GI_?7V`?X>'AXJ*BHR-
MC9"5E)27F)65EI"0C'EK:V-86%A>8V-D:&IJ:&-C9F-@8&EH;V]SX:(B(V6EI:;H**BJ+"PNL#,S-C0T(=P1$1"0&IJ='5U@(:*BH.2AH9X
M'9J:F5G9VUV@(!U8U965%Q8FAH=GQ\AX>(
MB(6*D)"BM+3$S-SGU]
M;&1D9'B(B(B%>WMR;6UV@WAX:69B8F!@8&EF8&!A96AH9VAH:&9K:W6!B(B*
MB(B)BY24HK2\O,3$Q-#4U-2'6EH\/%)2)B8R*@(!\/EY>@I*2LL+JZOL#(R+9:6D`P2DIFB(BRFHB(=(2*BGMQ<6%.
M1D98AI24D8"`=G)O;X61AH9N86%L>(B(E)*"@G!G9VEC7EYA:G%Q>']_>6M<
M7%QE972$C(R*@'9V=7IZA(Z7EYV@I*2FJJJNM,#`R-"?GUI$1#A:9V>5H)&1
MB(.#FI%]?6I65DI,7F(E9:6CGIJ:F5A86)@
M9V=N=7M[>G5U:F)C8VET='I^?'QX=G1T=GIZ?X>0D):7E)22D)"5GZRLN,#$
MQ,2+BTX\-#169I65H)24BHB6EH9T8F)43$Q2>9F9G9"0?GAN;G%^?GYS965N
M@(Z.EY6(B'!@8&!D:FIN=79V=7AX>'1K:V=M=75]A(2$?71T&UM=(&(B(Z*BGUF7%QD;')R7Y^?WES'Z&C8V1CX^.CX^/D969F9Z@H*JLK*RJL+"PG&)B5$I86&J$
MH*",AX>`AX*"=G1I:5Y@8'2.CHZ(?7UT;&QL?H1_?WM\?(.#AH:%>FUM:&YN
M='9V=G1O;6UP=G9V=GAX>7I[>WU\?'EW>7E^@H>'C(R,C(R/CY"2DI68FIJ<
MH*"@H)Z>H*"DI*2;;7Q\DH>`@'I]?7QT79V>7EY>'AQ7EZ?'M[>'AX
M>X&&AHN/CXZ,C8V/D)&1E)F9FYZ@H*"=G)R;G9VBJJJJF'EK:V-J:G2$C(R%
M@H"`?WQ\>GET='%T?'R"@(!\=&]O;W9V?7]]?7MY>7EX>7EVGEY>'AX>'EZ>WM\?W^"A8>'B(>'AXF,C(Z/CX^.CX^2E9:6
MEY:5E968F)N@HJ*:>VMK9&EI7EX=G9T='-S8!]?7AP;&QM
M'9V=G9V=G9T=75W>'AX=7%Q;6]SGIX=G9V>'IZ?7]_?W^!
M@8.%AX>'AX>)BXV-C8V,C(R/CY&1D)"0D)*2E).3D8^/CY&2E)27F9F:D8*"
M?'A]?7^%A85^>GIX=G9U=7AX>'AV=GAX>'9T<7%O<'-S=G9V='-Q<7)T=G9U
M='1T=71T='%PGMZ>GI^?GY_@H*#@H*"A8B(B(B(
MB(6$AX>*C(R.C(R,BHJ*BHJ,C(Z/CX^,BHF)B8R,D).1D8V,C(Z0D9&1C(6%
M@X&!A(.$A(![>GIX>WM]?GM[>'=V=GAY>7AV=75V>'AX>7=W=7)S7M[
M>GIV=79V=G9V>'AZ>GQ]?'QY>'AX>GY^@8."@H*!@8&#@H*#@H6%A86%AH6%
MA8&!@X.%AH:&A8*"@8.#A(*!@8&!@X.%AH:&A(2$@X.#@X2%A8:&AH:%@X&!
M@']_?X&!@8&`?W]]?'Q[>GM[?7U]?'MY>7AY>GIY>'AX>7EY>7Q]?7MZ>GEZ
M?'Q]?7Q\>GIZ>WQ]?7U]?7U^?W]_?WY^?7Q]?8"`@(!_?W]^@("!@8*"@("!
M@8.%A86$@H*`?X"`@H&!@X"`@(!_@8&!@8&`@("`@8"`@']^?GY^?GY^?GY_
M?GY^?GY^?G]_?W]_@(!_?GY^?GY^?7U]?7Q\>WM[?'Q[>GIZ>GEZ>GIZ>GIZ
M>7EZ>GIZ>WQ\?'Q\?'Q\?'U^?GY^?GY^?GY^?GY^?GY^?W]_?W]_?W]_?W^`
M@("!@8&`@("`@(&!@(&!@8&!@8!_?W]_?W]_?W]_?W]_?H"`@("!@8&!@("!
M@8&!@8&!@8!_?W^`?W]_?WY^?GU]?7U]?7U]?7Q]?'Q]?7Q\?'Q\?7Q\?'U]
M?7U\?'Q]?7Q\?'U\?'Q]?7U]?'Q]?'U]?'U]?7U]?7U\?'Q[?'QV$A']]>7E^@8&"@GY^?'I\?'Z`@(*!@8&`@8.#@H.#@8%_?WZ`@("`@8&!
M@("`@(&!@H*"@H*"@8&!@8&!@("`@("`@(&!@8&!@8&!@8"`@("`@(&!@8&!
M@8&!@("!@8&!@8&!@'Y^?G]^?GY^?GY^?7Y^?7U\?'Q\?'U]?7U]>WQ\?7U]
M?GU^?GU]?7U\?'Q\?7U]?'U\?'Q\?'M[>WM[>WM\?'Q\>WM[>WM\?'Q\?'Q]
M?7U]?7U]?7Y^?GY^?GY^?GY]?GU]?GY^?GY^?G]^?GY_?W]_?X"`@8&!@8&`
M@("!@8&`@(&!@8&!@(!_?X"`@("`@("`@("`@("`@(&`@("`@("`?W]_?G]_
M?W]_?W]_?W]_?W]_?WY^?GY^?GY^?GU]?7U]?7U\?7U]?7U]?7U]?7Y^?GY^
M?GY^?GY^?GY^?GY^?GU^?GY]?'Q\?7U]?'U\?'Q\?'Q\?'Q\?7U]?7Y^?GY_
M?W]_?W]_?W]_@']_?W]_?W]_?WY^?GY^?W]_?W]_?X"`@("!@8&!@8&!@8&!
M@8&!@8&!@8&`@8&`@(&!@8"`@("`@("`@(&`@("`@("`@(&!@8&`@("!@(!_
M?W]_?GY^?GY^?GY]?7U]?7U]?7U]?7U]?7Y]?7U]?7U]?GY^?GU]?7U]?'Q\
M?'Q\?'Q\?'Q[>WM[>WM[>WM[>WIZ>GIY>GIZ>GIZ>WQ\?'U]?7U]?7U\?7U]
M?7U]?'U\?'U]?7U]?7U]?7Q\?7U]?7Y]?7]_?GY_?H"`?GY^?GY^?G]_?W^`
M@("`@8&!@8&"@H*"@H*#@X.#@X.#@H*"@X."@H.#@X.#@X.#@X.#@X.#@H*"
M@H&!@8&`@("!?X"`@X&!@8."@H*#@X-^@H*#?7Y^@'Y^?GU^?GZ!@(""@H&!
M@(&!?WQ\?'MZ?'Q[?'Q^?X"`?W]^?GU[>WIY>7EY>7E[?'U]?X!_?W]]?7U\
M>WM\?'U]?G]_@8&`@(&`?7U]?'Q[>WM[>WU\?'U^?GY^?GY]?'U]?'M[?'Q]
M?7U_?W^`@8&!@8&!@("`?W]_?W^`@("`?W]_?GY^?G]^?G]_?W^`@(!_?W]_
M?W]_?GY^?G]_?W^`@("`@("`@("`?W]_?W]_?W]^?GY^?7U]?7U\?'U]?7U]
M?7U]?7U]?'U]?'Q\?'Q[>WQ\?'Q\?'Q\?7U]?'U]?7Q\?'Q\?'Q\?'Q\?'Q\
M?'Q\?'U\?7U]?7U]?7U]?7U\?'Q\?'Q\?'Q]?'U]?GY^?GY_?WY^?W]_?W]_
M@("`?X&!@8"!@8*!@8&!@8&!@H*"@H*#@X.#@X.#@X.#@X*"@H*"@H*"@H&!
M@8&"@H*"@H*"@H&!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@("`?W]_?GY^?GY^
M?GY]?7U]?'Q\?'Q[>WM[>GM[>WM[>WQ\?'Q]?'Q\?'Q\>WMZ>GIZ>GIZ>WMZ
M>WM[>WI[>W
T       BAT
'

 .
t.bat
  
t.bat
  
c:\fd\t.bat
P

P




P


`

`P
P
Quitting c:\fd\mail.bat

3

---------------

FIDO MESSAGE AREA==> TOPIC: 107 PASCAL        Ref: F5G00355 Date: 04/12/98
From: PAUL WALKER                                           Time: 12:09pm
\/To: KIM FORWOOD                                         (Read 2 times)
Subj: help

Hi Kim,
Kim Forwood to Brandon King, 10 Apr 98 20:22.
 KF> way to get the best speed is to use the best sized buffer, which is
 KF> generally an 8k buffer. Take a look at BlockRead/BlockWrite.
I always use the largest buffer that I can, personally. Why is 8Kb faster?
The buffer comes from heap memory, and isn't normally present throughout the 
whole program - just disk procedures that set it up as large as they can, 
use it, remove it...
  Paul              (p.r.walker@warwick.ac.uk)                 
... "It's just life," they say.
--- FMail/386 1.22
---------------
* Origin: The Light Fantastic! (2:254/60.11)

SOURCE: echomail via exec-pc

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.