DIRECTORY IPScan, Logs, Rope; IPScanTestImpl: CEDAR PROGRAM IMPORTS IPScan, Logs, Rope ~ BEGIN Op: TYPE ~ IPScan.Op; ROPE: TYPE ~ Rope.ROPE; Seq: TYPE ~ IPScan.Seq; LogTokens: PROC [xeroxName: ROPE, ops: LIST OF Op _ NIL, seqs: LIST OF Seq _ NIL, nums: BOOL _ FALSE] ~ { header, ip: ROPE; offset: INT; [header: header, ip: ip] _ IPScan.IPRopeFromName[xeroxName]; Logs.PutF[id: $IPScanTest, level: 0, format: "\nFile: %b%g%b", v1: [rope["b"]], v2: [rope[xeroxName]], v3: [rope[" "]]]; Logs.PutF[id: $IPScanTest, level: 0, format: "\nHeader: %b%g%b\n", v1: [rope["b"]], v2: [rope[header]], v3: [rope[" "]]]; offset _ 1+header.Size; LogTokensRope[ip: ip, ops: ops, seqs: seqs, nums: nums, offset: offset] }; LogAllTokensRope: PROC [ip: ROPE, offset: INT _ 0] ~ { LogTokensRope[ip: ip, ops: IPScan.allOps, seqs: IPScan.allSeqs, nums: TRUE, offset: offset]; }; LogTokensRope: PROC [ip: ROPE, ops: LIST OF Op _ NIL, seqs: LIST OF Seq _ NIL, nums: BOOL _ FALSE, offset: INT _ 0] ~ { Action: IPScan.ScanProc ~ { Logs.PutF[id: $IPScanTest, level: 0, format: "\n(%g..%g)\t%g\t", v1: [integer[min+offset]], v2: [integer[max+offset]], v3: [rope[IF punt THEN "(Punt)" ELSE " "]]]; SELECT TRUE FROM op#nil => Logs.PutF[id: $IPScanTest, level: 0, format: "%g", v1: [refAny[NEW[Op _ op]]]]; seq#nil => Logs.PutF[id: $IPScanTest, level: 0, format: "Sequence %g", v1: [refAny[NEW[Seq _ seq]]]]; ENDCASE => Logs.PutF[id: $IPScanTest, level: 0, format: "Number %g", v1: [integer[num]]]; Logs.PutF[id: $IPScanTest, level: 0, format: "\t%g", v1: [refAny[Rope.Substr[base: ip, start: min, len: max-min]]]]; }; IPScan.ScanRope[ip: ip, ops: ops, seqs: seqs, nums: nums, action: Action]; }; END. ˆIPScanTestImpl.mesa Copyright Σ 1988 by Xerox Corporation. All rights reserved. Eric Nickell, November 26, 1988 12:58:42 pm PST Κϊ˜™Icode™