summaryrefslogtreecommitdiff
path: root/systems/knuth/local/binarydemo.p
blob: 2430f9ac004b7c634559b3dce96c9cf322fe7902 (plain)
ofshex dumpascii
0000 70 72 6f 67 72 61 6d 20 62 64 65 6d 6f 28 6f 75 74 70 75 74 29 3b 20 7b 64 65 6d 6f 6e 73 74 72 program.bdemo(output);.{demonstr
0020 61 74 65 73 20 62 69 6e 61 72 79 20 66 69 6c 65 20 49 2f 4f 20 69 6e 20 47 4e 55 20 50 61 73 63 ates.binary.file.I/O.in.GNU.Pasc
0040 61 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 al,...........................us
0060 69 6e 67 20 65 78 74 65 72 6e 61 6c 20 43 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 68 65 6c 70 20 ing.external.C.routines.to.help.
0080 6f 75 74 7d 0a 6c 61 62 65 6c 20 39 39 39 39 3b 0a 63 6f 6e 73 74 20 6e 61 6d 65 6c 65 6e 67 74 out}.label.9999;.const.namelengt
00a0 68 3d 31 30 30 3b 0a 74 79 70 65 20 62 79 74 65 3d 69 6e 74 65 67 65 72 28 38 29 3b 0a 20 62 79 h=100;.type.byte=integer(8);..by
00c0 74 65 66 69 6c 65 3d 70 61 63 6b 65 64 20 66 69 6c 65 20 6f 66 20 62 79 74 65 3b 0a 20 55 4e 49 tefile=packed.file.of.byte;..UNI
00e0 58 66 69 6c 65 6e 61 6d 65 3d 70 61 63 6b 65 64 20 61 72 72 61 79 5b 31 2e 2e 6e 61 6d 65 6c 65 Xfilename=packed.array[1..namele
0100 6e 67 74 68 5d 20 6f 66 20 63 68 61 72 3b 0a 76 61 72 20 66 6e 61 6d 65 3a 55 4e 49 58 66 69 6c ngth].of.char;.var.fname:UNIXfil
0120 65 6e 61 6d 65 3b 0a 20 62 66 69 6c 65 3a 62 79 74 65 66 69 6c 65 3b 0a 20 6b 2c 6c 3a 69 6e 74 ename;..bfile:bytefile;..k,l:int
0140 65 67 65 72 3b 0a 20 61 72 67 63 3a 61 73 6d 6e 61 6d 65 20 27 5f 70 5f 61 72 67 63 27 20 49 6e eger;..argc:asmname.'_p_argc'.In
0160 74 65 67 65 72 3b 0a 23 69 6e 63 6c 75 64 65 20 22 62 64 65 6d 6f 5f 65 78 74 2e 68 22 0a 70 72 teger;.#include."bdemo_ext.h".pr
0180 6f 63 65 64 75 72 65 20 70 72 69 6e 74 73 74 61 74 75 73 28 6e 3a 69 6e 74 65 67 65 72 29 3b 0a ocedure.printstatus(n:integer);.
01a0 76 61 72 20 78 3a 62 79 74 65 3b 0a 62 65 67 69 6e 20 69 66 20 74 65 73 74 65 6f 66 28 62 66 69 var.x:byte;.begin.if.testeof(bfi
01c0 6c 65 29 20 74 68 65 6e 20 77 72 69 74 65 6c 6e 28 27 42 79 74 65 20 27 2c 6e 3a 31 2c 27 20 69 le).then.writeln('Byte.',n:1,'.i
01e0 73 20 45 4f 46 27 29 0a 65 6c 73 65 20 62 65 67 69 6e 0a 20 20 20 62 72 65 61 64 28 62 66 69 6c s.EOF').else.begin....bread(bfil
0200 65 2c 78 29 3b 20 77 72 69 74 65 6c 6e 28 27 42 79 74 65 20 27 2c 6e 3a 31 2c 27 20 69 73 20 27 e,x);.writeln('Byte.',n:1,'.is.'
0220 2c 78 3a 31 29 3b 0a 20 20 65 6e 64 3b 0a 65 6e 64 3b 0a 62 65 67 69 6e 20 69 66 20 61 72 67 63 ,x:1);...end;.end;.begin.if.argc
0240 3d 31 20 74 68 65 6e 20 7b 6e 6f 20 66 69 6c 65 20 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 67 =1.then.{no.file.name.argument.g
0260 69 76 65 6e 20 6f 6e 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 7d 0a 20 20 62 65 67 69 6e 20 77 72 iven.on.command.line}...begin.wr
0280 69 74 65 6c 6e 28 27 43 72 65 61 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65 20 62 74 65 73 74 27 iteln('Creating.test.file.btest'
02a0 29 3b 0a 20 20 66 6e 61 6d 65 3a 3d 27 62 74 65 73 74 00 27 3b 0a 20 20 69 66 20 6e 6f 74 20 74 );...fname:='btest.';...if.not.t
02c0 65 73 74 77 72 69 74 65 61 63 63 65 73 73 28 66 6e 61 6d 65 29 20 74 68 65 6e 0a 20 20 20 20 62 estwriteaccess(fname).then.....b
02e0 65 67 69 6e 20 77 72 69 74 65 6c 6e 28 27 49 20 63 6f 75 6c 64 6e 27 27 74 20 63 72 65 61 74 65 egin.writeln('I.couldn''t.create
0300 20 69 74 21 27 29 3b 20 67 6f 74 6f 20 39 39 39 39 3b 0a 20 20 20 20 65 6e 64 3b 0a 20 20 72 65 .it!');.goto.9999;.....end;...re
0320 77 72 69 74 65 28 62 66 69 6c 65 2c 66 6e 61 6d 65 29 3b 0a 20 20 66 6f 72 20 6b 3a 3d 2d 31 32 write(bfile,fname);...for.k:=-12
0340 38 20 74 6f 20 31 32 37 20 64 6f 20 77 72 69 74 65 28 62 66 69 6c 65 2c 6b 29 3b 0a 20 20 65 6e 8.to.127.do.write(bfile,k);...en
0360 64 0a 20 20 65 6c 73 65 20 69 66 20 61 72 67 76 28 31 2c 66 6e 61 6d 65 29 20 74 68 65 6e 0a 20 d...else.if.argv(1,fname).then..
0380 20 20 20 20 62 65 67 69 6e 20 6b 3a 3d 31 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 20 66 6e 61 6d ....begin.k:=1;.......while.fnam
03a0 65 5b 6b 5d 3c 3e 27 00 27 20 64 6f 20 6b 3a 3d 6b 2b 31 3b 0a 20 20 20 20 20 20 77 72 69 74 65 e[k]<>'.'.do.k:=k+1;.......write
03c0 6c 6e 28 27 45 78 61 6d 69 6e 69 6e 67 20 66 69 6c 65 20 27 2c 66 6e 61 6d 65 3a 6b 2c 27 3a 27 ln('Examining.file.',fname:k,':'
03e0 29 3b 0a 20 20 20 20 20 65 6e 64 20 65 6c 73 65 20 62 65 67 69 6e 20 77 72 69 74 65 6c 6e 28 27 );......end.else.begin.writeln('
0400 46 69 6c 65 20 6e 61 6d 65 20 74 6f 6f 20 6c 6f 6e 67 21 27 29 3b 0a 20 20 20 20 20 20 20 20 67 File.name.too.long!');.........g
0420 6f 74 6f 20 39 39 39 39 3b 0a 20 20 20 20 20 65 6e 64 3b 0a 69 66 20 6e 6f 74 20 74 65 73 74 72 oto.9999;......end;.if.not.testr
0440 65 61 64 61 63 63 65 73 73 28 66 6e 61 6d 65 29 20 74 68 65 6e 0a 20 20 62 65 67 69 6e 20 77 72 eadaccess(fname).then...begin.wr
0460 69 74 65 6c 6e 28 27 49 20 63 6f 75 6c 64 6e 27 27 74 20 72 65 61 64 20 69 74 21 27 29 3b 20 67 iteln('I.couldn''t.read.it!');.g
0480 6f 74 6f 20 39 39 39 39 3b 0a 20 20 65 6e 64 3b 0a 72 65 73 65 74 28 62 66 69 6c 65 2c 66 6e 61 oto.9999;...end;.reset(bfile,fna
04a0 6d 65 29 3b 0a 6c 3a 3d 66 6c 65 6e 67 74 68 28 62 66 69 6c 65 29 3b 0a 77 72 69 74 65 6c 6e 28 me);.l:=flength(bfile);.writeln(
04c0 27 54 68 65 20 66 69 6c 65 20 69 73 20 27 2c 6c 3a 31 2c 27 20 62 79 74 65 73 20 6c 6f 6e 67 27 'The.file.is.',l:1,'.bytes.long'
04e0 29 3b 0a 70 72 69 6e 74 73 74 61 74 75 73 28 31 29 3b 0a 69 66 20 6c 3e 30 20 74 68 65 6e 0a 20 );.printstatus(1);.if.l>0.then..
0500 20 62 65 67 69 6e 20 70 72 69 6e 74 73 74 61 74 75 73 28 32 29 3b 0a 20 20 69 66 20 6c 3e 31 20 .begin.printstatus(2);...if.l>1.
0520 74 68 65 6e 0a 20 20 20 20 62 65 67 69 6e 20 6d 6f 76 65 74 6f 62 79 74 65 28 62 66 69 6c 65 2c then.....begin.movetobyte(bfile,
0540 6c 2d 32 29 3b 20 70 72 69 6e 74 73 74 61 74 75 73 28 6c 2d 31 29 3b 0a 20 20 20 20 65 6e 64 3b l-2);.printstatus(l-1);.....end;
0560 0a 20 20 6d 6f 76 65 74 6f 62 79 74 65 28 62 66 69 6c 65 2c 6c 2d 31 29 3b 20 70 72 69 6e 74 73 ...movetobyte(bfile,l-1);.prints
0580 74 61 74 75 73 28 6c 29 3b 0a 20 20 70 72 69 6e 74 73 74 61 74 75 73 28 6c 2b 31 29 3b 0a 20 20 tatus(l);...printstatus(l+1);...
05a0 6d 6f 76 65 74 6f 62 79 74 65 28 62 66 69 6c 65 2c 6c 20 64 69 76 20 32 29 3b 20 70 72 69 6e 74 movetobyte(bfile,l.div.2);.print
05c0 73 74 61 74 75 73 28 6c 20 64 69 76 20 32 20 2b 20 31 29 3b 0a 20 20 6d 6f 76 65 74 6f 62 79 74 status(l.div.2.+.1);...movetobyt
05e0 65 28 62 66 69 6c 65 2c 31 29 3b 20 70 72 69 6e 74 73 74 61 74 75 73 28 32 29 3b 0a 20 20 65 6e e(bfile,1);.printstatus(2);...en
0600 64 3b 0a 39 39 39 39 3a 65 6e 64 2e 0a d;.9999:end..