home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
hp9000basic.tar.gz
/
hp9000basic.tar
/
hpbdeh.f77
< prev
next >
Wrap
Text File
|
1989-06-14
|
4KB
|
165 lines
program hpbdeh
c
c See "hpbker.bwr" for details.
c
c Adapted from the FORTRAN-77 program "k11hex.ftn" originally
c written by Brian Nelson 02-Mar-84 13:50:23.
c
c This abbreviated version of the original program can be used
c ONLY for DECODE of "simple" (no checksum bytes) HEX-coded files
c that are formatted with 64 characters per line, and which have a
c decoded length that is exactly equal to an integral number of
c RT-11 blocks. The 'checksum' verification routine in Brian's
c program has been omitted. The size of the task image is about
c 18 kB, and it should run on a PDP-11 under any of the RT-11
c monitors (SJ, FB, or XM), or under TSX+. However, it has been
c tested in this form ONLY under TSX+. Conversion times depend on
c the system and its loading: hpbker.hex, read from a hard disk,
c took about 2.5 min on a lightly-loaded pdp-11/73; the same file
c took about 8.5 min to convert when read from an RX-50 floppy on
c a fairly busy PDP-11/23+. Conversion times for other HPB*. HEX
c files are proportionately shorter.
c
c Roger Wallace 24-Apr-89
c
c
c To compile and link: FORTRAN/REC:512 HPBDEH.F77
c
c LINK HPBDEH
c
c
c
byte infil(40),outfil(40)
c
write (5,30040)
write (5,30030)
write (5,30035)
write (5,30000)
read (5,30010) infil
write (5,30020)
read (5,30010) outfil
infil(40) = 0
outfil(40) = 0
open (unit=1,type='OLD',name=infil,readonly,
1 carriagecontrol='LIST')
open (unit=2,type='NEW',name=outfil,access='DIRECT',
1 recordsize=512/4,form='UNFORMATTED')
call cretsk
close (unit=1)
close (unit=2)
call exit
c
30000 format (1x,'Input HEX file ? '$)
30010 format (64a1)
30020 format (1x,'Output DEH file ? '$)
30030 format (1x,'Program DECODES simple 64 chars/line HEX files. ')
30035 format (1x,'No checksum routine included. '//)
30040 format (1x,' '//)
c
end
c
c
c
c
c
c
subroutine cretsk
c
implicit integer (a-z)
byte buffer(512)
byte lbuff(64)
byte cbuff(6)
byte chr
integer chmap(256)
data chmap /256*0/
c
c WARNING: Any "illegal" HEX character, not 0-9 or A-F, will simply
c be set to zero. This program will run, but he resulting decode
c will be corrupted and probably not usable. Make sure you have
c "clean" HEX sources!
c
chmap(48) = 0
chmap(49) = 1
chmap(50) = 2
chmap(51) = 3
chmap(52) = 4
chmap(53) = 5
chmap(54) = 6
chmap(55) = 7
chmap(56) = 8
chmap(57) = 9
chmap(65) = 10
chmap(66) = 11
chmap(67) = 12
chmap(68) = 13
chmap(69) = 14
chmap(70) = 15
c
type *,' '
type *,' '
write (5,30040)
c
rnum = 1
blkidx = 1
10 continue
off = 1
do 90 j = 1 , 16
read(1,30010,end=100,err=99) lbuff
i = 1
do 20 k = off,off+31
buffer(k) = chr( chmap(lbuff(i))*16 + chmap(lbuff(i+1)) )
i = i + 2
20 continue
off = off + 32
90 continue
write(2'rnum) buffer
write (5,30060)
if (blkidx .eq. 78) then
write (5,30070)
blkidx = 0
endif
rnum = rnum + 1
blkidx = blkidx + 1
go to 10
c
99 continue
write (5,30070)
type *,' Error reading HEX file. Decode aborted.'
write (5,30070)
return
c
100 continue
write (5,30070)
type *,' Decoding completed. '
type *,' '
wrnum = rnum - 1
write (5,30050) wrnum
c
c Yes, it's rnum - 1. The rnum counter is incremented AFTER the
c write, but before the check for 'end-of-file'.
c
30010 format (64a1)
30040 format (1x,'Now starting to decode the HEX file ....'//)
30050 format (1x,' Number of RT-11 blocks written: 'I6///)
30060 format (1h+,'*'$)
30070 format (1x,' '/)
c
return
end
c
c
c
c
c
c
byte function chr(i)
c
integer i
byte b(2)
integer ch
equivalence (b(1),ch)
ch = i
chr = b(1)
return
end