Header Reader - Alexander Livshits (Your Spectrum-Issue 4-Page ??) Here's a routine that should prove useful to all Speccy users - for the Basic programmer who's forgotten where a program is supposed to start, the machine codist sizing up a certain piece of code and, of course, the Microdriver attempting the tricky task of converting software for operation on cartridge. When a program file is saved to tape it is stored in two blocks: the first part, known as the file header, is always 17 bytes long and tells the Speccy all it needs to know about the program block which follows. This routine reads the header into high memory and decodes it into a more meaningful form which is then displayed on-screen for the user. The information provided is: the name of the program; the type of program (Basic, code block, numerical or character array); the destination address (if you are examining a code block) or the program area (for Basic); the variables area; and the autostart line number (if any). Should the program not find a file header, the message 'NOT A HEADER' is dutifully printed on-screen. Lines 60-80 The 'initial set-up' routine in which RAMTOP is lowered to 27999. The two variables 's' and 'd' setup the machine code start address and the address to which the header is to be loaded, respectively. The function defined in line 70 performs a double byte PEEK (ie. this would be a DEEK on other computers). Lines 90-95 Read in and POKE the machine code data to the address reserved for it. Lines 100-150 The 'read header routine. This section of the program calls the machine code which reads the header into memory from location 'd' onwards. Line 150 sets the variable type to be equal to the first byte of the header. Lines 159-200 Read in the header name from bytes 'd+1' to 'd+10' and print it. Lines 210-230 Set up the following variables: 'len' - the file length; 'start' - the start address; 'pa' - the length of the variables area; and 'va' - the start of the variables area Lines 239-280 Print details of the header for a Basic program file. Lines 399-460 The part of the program which deals with the case of the header not being for a Basic program file. t$ is set to equal the file type. If it is a code file, line 440 prints the start address. Lines 600-630 Lines 120 and 150 checked that the data read in was a header. And if it wasn't, then this routine prints the 'NOT A HEADER' message and the user is asked if another header is to be read in. ------------------------------------------------------------------------------ TYPE: Utility COMMENT: This info file was typed by Jim Grimwood Downloaded from: Desert Island Disks -- http://www.image.dk/~frankie/ Maintained by: Michael Bruhn -- frankie@image.dk