// TestScan.bcpl
// Copyright Xerox Corporation 1979
// Last modified August 28, 1979 9:16 PM by Taft
// Bldr TestScan GP
get "Streams.d"
get "AltoFileSys.d"
external
[
// incoming procedures
SetupReadParam; ReadParam
GetCompleteFa; CreateDiskStream; ReadBlock; FilePos
InitScanStream; GetScanStreamBuffer; FinishScanStream
Ws; Wns; Gets; Closes; Endofs
// incoming statics
dsp; keys
]
//----------------------------------------------------------------------------
let TestScan() be
//----------------------------------------------------------------------------
[
SetupReadParam()
let nBufs = ReadParam($D, "Number of buffers: ")
if nBufs ls 1 then nBufs = 0
if nBufs gr 25 then nBufs = 25
let buffers = vec 25*256
let bufVec = vec 25
for i = 0 to nBufs-1 do bufVec!i = buffers + 256*i
[
let name = vec 127
let slowStream = ReadParam($I, "Input file: ", name, 0, true)
if slowStream eq -1 break
Ws("*n"); Ws(name)
let cfa = vec lCFA
GetCompleteFa(slowStream, cfa)
let fastStream = CreateDiskStream(lv cfa>>CFA.fp, ksTypeReadOnly)
let ssd = InitScanStream(fastStream, bufVec, nBufs)
let slowBuf = vec 256
let fastBuf = nil
let bytes = nil
[
bytes = ReadBlock(slowStream, slowBuf, 256) lshift 1
bytes = bytes - (FilePos(slowStream) & 1)
fastBuf = GetScanStreamBuffer(ssd)
if bytes ne ssd>>SSD.numChars then
ReportError("Byte count wrong", bytes, ssd>>SSD.numChars)
if bytes ne 0 & fastBuf eq 0 then
ReportError("Premature eof", bytes, 0)
for i = 0 to (bytes rshift 1) -1 do
if slowBuf!i ne fastBuf!i then
ReportError("Data incorrect", slowBuf!i, fastBuf!i)
] repeatuntil bytes ls 512
fastBuf = GetScanStreamBuffer(ssd)
if fastBuf ne 0 then
ReportError("Eof missed", 0, fastBuf)
FinishScanStream(ssd)
Closes(fastStream)
Closes(slowStream)
] repeat
]
//----------------------------------------------------------------------------
and ReportError(string, slowVal, fastVal) be
//----------------------------------------------------------------------------
[
Ws("*n")
Ws(string)
Ws(": slow = ")
Wns(dsp, slowVal)
Ws(", fast = ")
Wns(dsp, fastVal)
Ws(" ... more?")
if (Gets(keys) & 137B) eq $N finish
]