|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 5376 (0x1500) Types: TextFile Names: »comparetx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »comparetx «
mode list.yes compare=algol survey.yes connect.no list.no begin zone array z (2, 2 *128, 2, stderror); real array field raf; long array name, file1, file2 (1:2); integer array word, hwds (1:2), segm (1:2), half (1:2, 1:2); integer field addr; integer i, j, sepleng, diff, first, last, absaddr, stars, segments, segm_count; long xor; boolean test; trapmode := 1 shift 10 ; segments := 8388605 ; segm_count := 0 ; diff := last := 0 ; j := 1 ; test := false ; raf := 0 ; for i := 1, 2 do begin <*open and position*> segm (i) := 0; sepleng := system (4, increase (j), name); if sepleng <> 4 shift 12 + 10 then system (9, j - 1, <:param:>); if i = 1 then tofrom (file1.raf, name.raf, 8) else tofrom (file2.raf, name.raf, 8); open (z (i), 4, name, 0); if system (4, j, name) = 8 shift 12 + 4 then begin segm (i) := round (name (1)); increase (j); end; setposition (z (i), 0, segm (i)); end <*open and position*>; if system (4, j, name) = 4 shift 12 + 4 then begin increase (j); segments := round (name (1)) end; if system (4, increase (j), name) = 4 shift 12 + 10 and name (1) = long <:test:> then begin <*next param <s>name and 'test'*> if system (4, increase (j), name) = 8 shift 12 + 10 then begin <* .<name>*> if name (1) = long <:yes:> then test := true else if name (1) = long <:no:> then test := false else system (9, j - 1, <:param:>); end <*.<name>*> else system (9, j - 1, <:param:>); end <*next param <s>name and 'test'*>; write (out, "nl", 2, <:first file : :>, file1 , "nl", 1, <:first segm : :>, segm (1), "nl", 2, <:second file : :>, file2 , "nl", 1, <:first segment : :>, segm (2), "nl", 2, <:no of segments : :>, segments, "nl", 2); repeat <*until eod in one file*> for i := 1, 2 do begin <*for i*> hwds (i) := inrec6 (z (i), 0); inrec6 (z (i), hwds (i)); <*still not eod in z (i)*> increase (segm (i)); end <*for i*>; increase (segm_count); for addr := 2 step 2 until if hwds (1) < hwds (2) then hwds (1) else hwds (2) do begin if z (1).addr <> z (2).addr then begin <*different*> diff := diff + 1; for i := 1, 2 do begin word (i ) := z (i).addr ; half (i, 1) := z (i).addr shift (-12) extract 12; half (i, 2) := z (i).addr extract 12; end; xor := exor (word (1), word (2)); absaddr := (segm (1) - 1) * 512 + addr - 2; if absaddr = last + 2 then last := absaddr else first := last := absaddr; if first = last or first + 2 = last then begin <*among first two diff in a row*> stars := 65; write (out, <<dddd>, "nl", 1, segm (1) - 1, <<ddd>, ",", 1, addr - 2, <<ddddddd>, "sp", 1, <:addr : :>, absaddr, <<dddd>, "sp", 1, <:file 1 ::>, half (1, 1), half (1, 2), "sp", 1, <:file 2 ::>, half (2, 1), half (2, 2), "sp", 1, <:diff ::>, abs (half (1, 1) - half (2, 1)), "sp", 1, abs (half (1, 2) - half (2, 2)), "sp", 1); for i := -23 step -1 until 0 do write (out, if xor shift i < 0 then <:1:> else <:.:>); end <*first diff in a row*> else begin <*not first*> stars := stars + 1; if stars > 64 then begin write (out, "nl", 1); stars := 1; end; write (out, <:.:>); end <*not first*>; end <*different*>; end; if hwds (1) <> hwds (2) then begin <*diff*> diff := diff + 1; write (out, "nl", 2, if hwds (1) < hwds (2) then <:file 1 shorter than file 2:> else <:file 2 shorter than file 1:>, "nl", 1, <:file 1 ::>, segm (1) - 1, <: segs + :>, hwds (1), <: hwds:>, "sp", 3, <:file 2 ::>, segm (2) - 1, <: segs + :>, hwds (2), <: hwds:>); end <*diff*>; until hwds (1) = 2 or hwds (2) = 2 or segm_count = segments; if diff > 0 then write (out, "nl", 2, <:differences : :>, diff) else write (out, "nl", 2, <:no differences:>); outchar (out, 10); end; scope user compare lookup compare end finis ▶EOF◀