JetASM 5.0 contains a new subsystem I call XLLint. This is an XL parser that disassembles and analyzes XL binaries the same way the printer does and reports errors in the XL file. The current version will report errors where required attributes are missing, where combinations of attributes are missing or illegally combined, where extra attributes are included with operators that don't use them, and when the data class (E.g.. Array, XY, Box or Array) for an attribute is used illegally. Version 5.0 will report warnings where the data class is the same, but the type (E.g. ubyte, uint16, real32, etc.) is wrong or wasteful for the attribute. Notes are marked where optional attributes are included with operators.The XLLint system is invoked by using the -dl command line parameter. XLLint does not operate on PCL5 files (yet!).
jetasm32 -dl testfile.xl -o testfile.lntFor Windows users, there is an XLLint button on JetASM98's main dialog screen.An example of an ERROR: Here is a case of a missing attribute and an attribute where it doesn't belong...
$print Operator #141 - ERROR: (MissingAttribute) ColorMapping is a required attributeAnother error example...
ubyte e1Bit ColorDepth
uint16 8 SourceWidth
uint16 1 SourceHeight
uint16_xy 256 256 DestinationSize
sint16 1 PatternDefineID
ubyte eTempPattern PatternPersistence
ubyte 0 CharCode
$print Operator #141 - ERROR: (IllegalAttribute) Attribute CharCode is illegal with operator BeginRastPattern
// Operator Position: 141
BeginRastPatternybyte_xy 0 0 ColorMapping
$print Operator #169 - ERROR: (IllegalAttributeDataType) Data type ubyte_xy is illegal for use with attribute colorMappingErrors and Warnings are placed in the output file using the $print assembler directive. This allows the file to be edited and reassembled if desired. The other advantage to using $print over the // comment operator is that most editors will not syntax highlight elements of the error message if it begins with //.
An example of a WARNING:...
uint16 0 CharCodeAn example of a NOTE:
$print Operator #141 - WARNING: Data Type sint16 may not be valid for attribute CharCodeubyte eBackChAndErrPage ErrorReport // NOTE: Optional AttributeAt the end of the file output, a summary is printed...
BeginPage// XLLint Results: 3 Errors, 1 Warning, 1 Note.Future version of XLLint will be capable of detecting errors in the attribute data (range errors, illegal values, etc.) and even be able to mark inefficient usage of operators and attributes (E.G. Two or more NewPath operators without any other path operators between them).
I added support for duplex, punched paper (changes the margins) and stapling. I also added support for multiple copies. The new -? printout looks like this...PCL XL Text->XL Filter. Revision: 1.3 (Feb 2 1999)
Copyright Hewlett-Packard Company, 1998, 1999. All rights are reserved.usage as a filter:
tail textfile | text2xl [ options ] > [output]usage as a file converter:
text2xl [ options ] [inFile] [-o <outFile>]Command Line Options:
-? | -h This help output
-o = path of the output file (default: stdout)
-e = path for error & status output (default: stderr)
-p = Print Page Number at the bottom of each page
-s = Adjusts top margin down for a staple in upper left corner
-3 = Selects 3 hole (prepunched) media type & adjust margins to fit
-d = Selects duplex output
-t n = Set tab stops at n space characters along the line
-c n = Copy Count, n = copies to print
-cc n = Host Collated Copies
-cp n = Printer Collated CopiesFor multiple copies, there is are two collate options. The -cc option tells Text2XL to just keep sending the entire document over and over again untill the desired number of copies has been printed. The -cp option lets Text2XL instruct the printer to handle the collation and sends one copy of the document. If the printer is equipped with enough memory or a disk drive, no problem. Otherwise the printer will display an out-of-memory message and you'll get one copy.
The rest of the new features (staple, duplex, prepunched paper, adjustable tab stops) are pretty self explanitory. If not, email me and I'll answer any questions.
I've also added a whole bunch of new comments to the source and cleaned up a couple areas of the code.
Enjoy.
Transfer interrupted!
TH="100%"> Features: 01/25/1999 JDAJetASM 4.15 JetASM 4.15 - Bug Fix:Oops! There were a couple problems with the strings. I forgot to handle embedded quotes, and if the line was too long, JetASM's margin settings kicked in and didn't give me a chance to wrap a string properly. I fixed this and any executables dated Jan 25th or later work as advertised.
Features: 01/21/1999 JDAJetASM 4.15 JetASM 4.15 - New Feature:I finally fulfilled a promise I made to myself and worked on getting the XL disassembler to scan ubyte_array data before putting it into the source file and testing whether the data could be displayed in "quoted string" format. I came up with a formula that decided that if less than 10% of the ubyte data was above 127, or below 32 (ASCII space) then the data would be output to the source file as a string. Above 10% control or unprintable content and the data would appear in the old Hex format. After running it on several representative files, it seems to work very will. The percentage can be changed up or down in future versions.The PJL and XL stream header generally found at the beginning of an XL file will be displayed in this format...
// UEL Should Follow:
string* "\x1B%-12345X"// PJL Should Follow:
string* "@PJL SET DUPLEX=OFF\n"
string* "@PJL SET PAGEPROTECT=AUTO\n"
string* "@PJL SET RESOLUTION=600\n"
string* "@PJL ENTER LANGUAGE=PCLXL\n"// Stream Header Should Follow:
string* ") HP-PCL XL;2;0;Comment: Testing strings.\n"Notice that JetASM now groups PJL commands under a single header, rather than prepending a header to each line of PJL as before.
An example of a disassembled Text operator is this...
ubyte_array "PCL XL Feature Reference" TextData
ubyte_array [
56 67 59 26 73 60 25 56 // 8C;.I<.8
44 44 28 50 34 44 25 67 // ,,.2",.C
44 33 45 33 44 50 45 0 // ,!-!,2-.
] XSpacingData
TextBecause more than 10% of the XSpacingData is not printable (5 bytes out of 24), JetASM stuck to the Hex format for the spacing data.
This makes source listings derived from binary XL files much easier to read and understand. Another advantage to using quoted strings for font names and text data is that now the \%n can be used to insert parameters in the strings at compile time. (See version 4.14 release notes).
For the traditionalists in the crowd, I have added the -a option for disassembly to the command line versions of JetASM to turn this string feature off and revert to printing all ubyte_array data and PJL data as hex.
Bug Fixes 10/26/1998 JDAJetASM 4.14 JetASM 4.14 - Note:I've tested JetASM on PCL files as far back as PCL 3.0 and it works great. I haven't tested it on standalone HPGL files (pre PCL4) but I suspect that if anywone needs to go that far back, I can work something out.JetASM 4.14 - bug fix...Subroutine parameters inside quoted strings are now supported. To differentiate the subroutine parameter from the rest of the text in the string, add a \ (backslash) before the % character and the parameter number. Example...JetASM98 4.14 - new feature...$beginsub gotoxy
string* "\x1B*p\%1x\%2Y"
$endsub$execsub gotoxy 100 200
Will results in this string in the final output
string* "\x1B*p100x200Y"
JetASM will accept any number for an argument except 0 (zero). Starting at the \%, JetASM parses until a non numeric character is encountered and passes the number to the parameter replacement routine. If there is a parameter, the\%n is replaced with the paramter text. If there is no cooresponding parameter, the original \%n will be left in the resulting string.
If there is a need to insert a subroutine parameter in front of a number, use another '\' to delimit the number. Example...
$beginsub gotoxy
string* "\x1B*p500\%1\300\%2"
$endsub$execsub gotoxy x Y
$execsub goto y XResults?
string* "\x1B*p500x300Y"
strint* "\x1B*p500y300X"Of course, this fix works for both XL and PCL files. I just used PCL as an example. The command line -man option, as well as the JetASM98's ReadMe button, have been updated with this information, and the -? or -h output has been updated and clarified.
Because there is sometines a need to send the same file to multiple printers for testing, I have extended the printer destination in the Options dialog to include a name for both a local printer, and when JetASM98 is running on NT, a network printer. For the local printer, a shared name (\\host\printername format) or a local port (lpt1, com1, etc.) can be entered as the default destination when a local printer is to be used.The server and printer name can be entered in the Network Printer control in two formats. If the printer is equipped with its own network card, and acts as its own server, then simply enter the name (or IP address) of the printer, or a single backslash and the name. If the printer is attached to a print server, start with \\ (double backslash), then server name (or IP address), a single backslash, then the printer name. Example. Network printing support is only available when JetASM98 is running under NT.
\\hrb3445\LJ4000 where hrb3445 is the print server, and LJ4000 is the printer.
When the Print button on the main dialog is pressed, a dialog box pops up requesting a print destination, the choices are Local, Network, Display, and Cancel. In additon, the Local name field and the Network name field are editable. The default destination is filled in by JetASM98, but the operator can change the destination without affecting the default setting. This allows temporarily send the output to a different printer. The temporary printer name is remembered until JetASM98 is restarted, or the user opens the Options dialog.
Bug Fixes 10/26/1998 JDAJetASM 4.12 JetASM 4.12 has fixes for the following bugs...JetASM bungled the handling of the Y parameter in uint32_xy and sint32_xy data types, casting and sending it to the binary file as a uint16. This has been fixed and a 4.2 version of JetLIB has been published.If HPGL mode is entered via ESC%0A, ESC%-12345X (UEL) closes the HPGL mode along with the usual EscE and Esc%0B operators.New Features...While disassembling PCL, EscE and Esc%-12345X (UEL) didn't reset HPGL's label terminator (DT) to \x03. This is fixed.
The PCL and HPGL statistics are now sorted by the Count field, in decending order.The statisics output for XL was not well formatted and looked confusing. I limited the printout to only those operators, attributes and data types that actually appear in the file, and cleaned up the column spacing for easer reading.
Release Notes 10/09/1998 JDAJetASM 4.11 Features Added - JetASM / JetaASM98New feature or a bug fix, depending on how you look at it. When Statistics was selected and a PCL file was disassembled, XL statistics data (all zeros, of course) was appended to the end of the source listing. I've modified JetASM to now print PCL statistics for PCL files.Features Added - JetaASM98An example output looks like this...
// PCL/HPGL Operator Statistics:
// fileSize, D:\TestFiles\51490.pcl , 2934472// PCL Operator Statistics
// Count : Operator Description// 32 : Universal End-Of-Language
// 28 : Enter Language = PCL 5
// 8 : Reset
// 4 : Unit of Measure
// 28 : Enter Language = HP-GL/2
// 54720 : Transfer Raster by Row/Block : 2224737 Bytes Transfered
// 2 : Symbol Set Select (Primary)// HPGL Operator Statistics
// Count : Operator Description// 12 : initialize
// 12 : Select Pen
// 12 : Pixel Placement
// 12 : Transparency Mode
// 12 : Pen Width Unit Selection
// 12 : Pen Width
// 12 : Input P1 and P2
// 12 : Scale
// 23 : Polyline EncodedThe operators are listed in the order they are encountered in the file. Note that transfer operators also list the total number of bytes transferred by each type of operator.
Two new checkboxes have been added to the Options dialog, these concern JetASM98's automatic creation and use of file names when a source or binary file is to be written to disk. In the previous versions, and if these boxes are checked inVer4.11 and up, JetASM98 creates a file name rooted in the opened file and uses that as default. When these check boxes are cleared, JetASM98 will display a dialog box allowing you to name the file that is to be written..
Release Notes 10/06/1998 JDAJetASM 4.10 Bugs Fixed - JetASM / JetaASM98There was a bug in the HPGL's PE disassembly that caused the PE data to be displayed incorrectly. This meant that when the file was reassembled, the PE data was corrupted. Instead of just fixing the display of the hex data in a PE command, I changed it to allow editing the data. See the following note.Features Added - JetASM / JetaASM98JetASM now decodes and displays HPGL's PE command in human readable format. The data can be edited, and JetASM will re-encode the information during assembly.Example, when JetaASM disassembles a PE command, the format of the output appears this way..
string* "PE" // Polyline Encoded
PE_cmd [ = < 5978 4539 ; ]Any information between the brackets of the PE_cmd will be encoded according to the HP-GL/2 Programmer's Guide.
There are syntax considerations, for example, to invoke the 7-bit Mode, you must enter \7 (backslash 7) to allow JetASM to differentiate between the Flag 7 and the number 7. Example...
PE_cmd [= \7 < 5978 4593 ; ]
Since JetASM will parse macros and definitions within the brackets, you can define labels to substitute for the single character flags, and use parameter substitution for any entity the PE command supports. This example uses both. The user sends the starting X and Y co-ordinates for a 300x300 pixel square to be drawn.
$define PenUp <
$define Absolute =
$define EndPE ;
$define SevenBit \7
$define FractionalData >$beginsub MOVEANDDRAWSQUARE
string* "PE"
PE_cmd [Absolute SelPen 1 PenUp %1 %2 +300 0 0 +300 -300 0 0 -300 EndPE]
$endsub
.
.
.
$execsub MOVEANDDRAWDRAWSQUARE 1640 2189The -p pre-processor option can be used when assembling files with PE commands where macros and subroutines are used to view the final output of the assembler.
JetASM does very little syntax checking on assembly. If a characters other than PE flags or numbers are entered between the brackets, JetASM will flag an error on assembly. However, any character preceded by a \ (backslash) will be entered into the stream as a literal. On a disassembly error, JetASM will stop decoding the PE data, put out an error comment, and finish the rest of the PE command in the hex_raw* format. JetASM may not be able to reassemble the resulting source.
Release Notes 07/09/1998 JDAJetASM 4.09 Bugs Fixed - JetASM / JetaASM98PCL - If there was a backspace character (hex 7F) in the text of a PCL file, and the character fell at the start of a string* statement, the PCL disassembler would hang. This has been fixed.HPGL - The BR, BZ and CO HPGL operators are now recognized and commented on. The DT operator, (which sets the terminating character for the LB operator) is now parsed and the terminating character is used for all further LB operators encountered in the file. The ETX terminator is default when the disassembler is started.
I also discovered that not every UNIX version of JetASM32 was built with the latest source files and that some got less than complete PCL disassemblers. I have identified this as a problem using FTP and have changed my methods. The UNIX versions of JetASM will now disassemble the files the same way as the Windows & DOS versions.
Release Notes 06/30/1998 JDAJetASM 4.07 Features Added - JetASM / JetaASM98I've made JetASM's HPGL disassembler smarter. I've put each HPGL operator on its own line and added meaningful comments after each. Example:Known defectsstring* "SP1" // Select Pen
string* "PP1" // Pixel Placement
string* "TR0" // Transparency Mode
string* "LA1,4,2,1" // Line Attributes
string* "WU0" // Pen Width Unit Selection
string* "PW0" // Pen Width
string* "UL2,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5;" // User Defined Line Types
string* "UL5,40,25,10,25;" // User Defined Line Types
string* "UL6,35,15,10,15,10,15;" // User Defined Line Types
string* "LT0,8.5,1" // Line TypesCurrently, the PE operator is simply followed by hex_raw* information until the terminating ';'. Example:
string* "PE" // Polyline Encoded
hex_raw* [
eb c2 c1 bf df c2 c1 bf d5 c2 c1 bf cf c2 c1 bf cd c2 c1 bf cb c2 c1 bf cb
c2 c1 bf c9 c2 c1 bf c9 c2 c1 bf c7 c2 c1 bf c7 c2 c1 bf c7 c2 c1 bf c7 c2
]
string* ";" // Polyline EncodedFuture plans call for decoding and displaying the PE data, allowing modification and reencoding the data.
The current version of JetASm does not recognize the BR, BZ or CO HPGL operators. This will be corrected for 4.08.
Also, the DT operator, (which sets the terminating character for the LB operator) currently does not get parsed. Look to 4.08 for a fix.
Release Notes 06/16/1998 JDAJetASM 4.06 Features Added - JetASM / JetaASM98I've made JetASM's PCL disassembler smarter. I've got it adding meaningful comments after each PCL operator. Example:
string* "\x1B%0A" // Enter PCL 5 Language
string* "\x1BE" // Reset
string* "\x1B&u600D" // Unit of Measure
string* "\x1B&l1X" // Copies
string* "\x1B&t1P" // Text Parsing Method
string* "\x1B&l0S" // Simplex/Duplex Mode
string* "\x1B&l7H" // Media SourceComplex operators are disassembled with each Data/Terminating Character set on its own line, Example:
string* "\x1B&l0o" // Orientation
string* "2a" // Page Size
string* "4d" // Line Spacing
string* "1e" // Top margin
string* "42F" // Text LengthAfter binary operators, the disassembler switches to the hex_raw* format for the binary data. This improves the readability of the resulting ASM file.
string* "\x1B*b14W" // Transfer Raster by Row/Block
hex_raw* [
a5 00 ff 40 05 00 40 00 00 00 60 e3 00 00
]All comment text were taken from The PCL Implementor's Guide, v6.0 which is available in Word format at http://pcl-xl.boi.hp.com/FlipDocs/PCLGuide.doc
Release Notes 06/09/1998 JDAJetASM 4.05 Features Added - JetASMThe command line versions of JetASM now support a "pre-processor" output mode. By entering the following command line
>jetasm32 -p testfile.asm -o testfile.ism
JetASM will generate a file that is the expanded version of the source. All enumerations have been replaced by numbers, all macros and $defines have been expanded, all loops have been looped, all $include files have been included. All comments are stripped out, (with some exceptions for $include_bmp). While this is generally not useful information, it may come in handy debugging macros and $subs.
For $include_bmp (which used to be known as bmp2xl.exe before I built it into JetASM) normally this directive produces strict binary information for XL. Turning on the preprocessor option causes $include_bmp to revert to its old behaviour of writing ASCII XL source code. I modified it so the image statistics (normally a command line option) are included as comments in the resulting output file.
Because this option is rarley needed, I'm not including it in JetASM98.
Release Notes 05/14/98 JDA JetASM 4.01 Features Added - JetASMString parameters have been added to the $execsub assembler directive.Up until now, only single words could be used as parameters. Here is an example of current usage.
Bugs Fixed - JetASM
$beginsub SOMEFUNCTION
The parameters "Parameter One" and "Parameter Two" will be substituted for %1 and %2 when the subroutine is assembled. Please note that in order to make JetASM work with the old () paren delimited strings, only " " strings can be used as parameters.ubyte_array %2 FontName
SetFontubyte_array %1 TextData
SystemText$endsub
$execsub SOMEFUNCTION "Parameter One" "Parameter Two"
It occured to me that the command line modifier to the -d parameter for PCL disassemble was missing from the -man page. I've added -d5 to the page.
Release Notes 05/09/98 JDAJetASM 4.00 Features Added - JetASM & JetASM98JetASM now has the capability to disassemble PCL and Postscript files (PS files that contain binary, such as image and font data) to JetASM string* values. These strings can then be edited and reassembled back into printable PCL or PS format. (See the Release Notes 03/20/98 below for details on the string* variable).
Bugs Fixed - JetASM & JetASM98Example, the PCL operator that enables underlining would disassemble to this line of JetASM source;
string* "\x1B&d1D" // PCL
The line could then be edited to change underlining from single to double line floating by editing to change the 1D to a 4D;
string* "\x1B&d4D" // PCL
And then the source file can be reassembled back to a PCL object file. Any ESC operator that jetASM thinks is PCL will be followed by the // PCL comment. Any line JetASM thinks is PJL will be followed by the // PJL comment. Future releases will identify and tag HPGL operators.
Non-printing characters will appear in \xhh format where hh is a two digit HEX value. The disassembler will display alpha hex characters in upper case, but will accept characters in either upper or lower case for assembling. Example;
string* "This is a string of PCL text with a tab\x09and CRLF as End of Line.\x0D\x0A"
string* "HGSei-Kaisho\x00\x00\x00\x00\x01\x00\xFF\xCD\x00\x0C\x01\x00PA\x00\x00\x00\x0A"JetASM cannot disassemble files that contain both PCL and XL (yet).
For JetASM, add a 5 to the -d command line parameter when disassembleing PCL or PS binary files, example, -d5. For JetASM98 there are radio buttons on the main window for selecing the current language. In the Options dialog, there are spaces for setting separate default file extensions for XL, PCL and Postscript.
Future releases of JetASM will contain smarter code that will identify the PCL ESC sequences and allow easier reading and editing of PCL files.
It turns out that JetASM was modifying data inside both JetASM strings ( ) and normal strings " ". If there were two slashes in a row (example //) then JetASM would strip them and all further characters on the line before assembling. Since this is old behavior in test files, I left the ( ) type strings alone but modified JetASM to ignore // characters in " " strings.
Release Notes 04/06/98 JDAJetASM 3.84 Bugs Fixed - JetASM98When the macro parser was modified to ignore macro names in strings (See the 07/17/1997 release notes) parameter substitution inside strings was also disabled. For example, the string (@PJL SET RESOLUTION = %1) would not change the %1 to the value of the first parameter sent by $execsub. In this version of JetASM, strings inside parens () will have parameter expansion and other macro or keyword substitution will be performed. Strings inside quote marks (") do not have macro expansion capability in this version. So, if you want the string (use the eInch enumeration) to not come out at (use the 0 enumeration), use quote marks "use the eInch enumeration". Product Note:
Due to a lack of demand, all 16 bit versions (DOS, Win3.1) of JetASM and MainJET are discontinued.
Release Notes 03/20/98 JDAJetASM98 4.00 Beta 2 Bugs Fixed - JetASM98When the View Source button was pushed, an unititialized variable sometimes didn't allow launching the editor. This is fixed. Features Added - JetASM98
By popular demand (well, Jeff asked me) I added an Exit button to supplement the X box in the caption. Your welcome, Jeff. I also added a button marked Readme that generates a copy of the JetASM user's manual (the command line -man option) and starts the Source editor to display it. Unlike all the other Viewer operations, this one does not cause JetASM98 to wait until the editor is finished before allowing JetASM98 to continue, so you can launch a Readme session and leave it open while you work on other files. The document is permanently stored on disk to make for quicker launch, or to allow reading when JetASM98 is not running. When the Readme button is pressed, JetASM98 checks the file date of the document against its own time stamp and if the document is older, JetASM98 automatically generates an up to date copy before launching the editor.
Release Notes 03/18/98 JDAJetASM98 4.00 Beta 1 JetASM98, a new Version of MainJETI recently attended two PCL-XL training classes, (one at HP using MainJET and one at Genoa using Microsoft's Visual Test) and decided that MainJET was too bulky for quick a look/see at XL binary files. It is more suited to XL code and test development than looking at the output of the latest drivers or test harnesses so I created JetASM98. I was able to reuse a lot of MainJET internal code to simplify the development of JetASM98 so this Beta is solid with no known bugs. Let me know if you find any!
Most of the options are the same, except that project info, makefiles, UNIX drive mapping, manual info and such are deleted.
When you open a Binary file, and push the View Source button, a Source file with the same root name as the binary and the first extension in the Source options list will automatically be created if it doesn't exist, or reused if it does. Dependency checking is done on existing Source files to see if it is older than the Binary.
When you open a Source file, and push the View Binary, Print, or Display button, a Binary file with the same root name as the Source and the first extension in the Binary options list will automatically be created if it doesn't exist, or reused if it does. Dependency checking is done to see if the Binary file is older that the Source. There is an addition Assemble button available when Source file is opened, allowing an assemble that will fill the include file list and make those files available for editing.
JetASM98 contains the 3.84 version of JetASM, which addresses some of the defects in strings in 3.82 (see the 12/05/97 release notes). More about this later
Release Notes 12/05/97 JDAMainJET Version 3.82 Bugs Fixed - JetASMWhen the macro parser was modified to ignore macro names in strings (See the 07/17/1997 release notes) parameter substitution inside strings was also disabled. For example, the string (@PJL SET RESOLUTION = %1) would not change the %1 to the value of the first parameter sent by $execsub. In this version of JetASM, strings inside parens will only have parameter expansion performed on attributes that begin with % and fall between %1 and %99. Any other macro or keyword substitution will not be performed. Strings inside quote marks (") do not have macro expansion capability in this version. Bugs Fixed - MainJETWhen a new project is started by opening a source or binary file, the <new> tag in front of the project filename , which indicates that the file does not yet exist on disk, would not go away after the project file was saved and the file then did exist. This has been fixed. New Features - MainJETRelease Notes 10/10/97 JDA MainJET Version 3.81 NOTE: Technically, these are features that should have been in MainJET all along. There is now a dialog box displayed to allow the user to enter a string in response to JetASM's $input directive. The dialog box allows entering a string up to 2047 characters long, using all the standard Windows line editing features. After the line is entered, either click the Ok button, or hit the Enter key to send the string back to JetASM. If a NULL (empty) string is entered, a warning dialog will be displayed. Clicking on the Yes to All button will disable the NULL string warnings for any further $input directives found during that assembly.
MainJET will remember each $input string and log them in the project file. Then each time the source file is assembled, MainJET will use the last entered string as the default. Most of the time just clicking Ok will all that will be needed when assembling over and over again. Where this falls apart is if you edit the source file and add or delete $input directives. Then MainJET will be out of sync for one assemble.
The $print directive output went into the bit-bucket in previous versions of MainJET. It now send output to the status window. The status window will not close automatically at the end of the assemble if messages from $print are present. Clicking on the Close button will close the status window.
New Features - MainJET Release Notes 09/26/97 JDA MainJET Version 3.80 The MainJET Help file MainJET.hlp has (finally) been updated to match the current MainJET version. Each dialog box that has help available will have a question mark button in the caption. Click on this button, and the cursor will turn into an arrow with a question mark. Click on the control that you have a question about and a popup window will appear explaining that control. More help text will be added as each version of MainJET is released.
Bugs Fixed - MainJETThe Exit button has been eliminated. Click on the X button in the caption to exit MainJET.
In the Rebuild dialog, the Cancel button acted the same as the Current button. This has been fixed. When you click Cancel, the dialog box will be closed and no further action will occur. Bugs Fixed - MainJETOn projects with multiple include files, one of the include file names appeared as the Project Name in the main dialog. This could lead to the include file being overwritten by project information. This has been corrected.
Release Notes 09/16/97 JDAMainJET Version 3.71 A bug in the search for the home directories of include files caused the search to fail so the information about location, date, and size was bogus (all zeros). When MainJET compared the dependencies of the files with the bogus dates to the XL binary file to see if it needed rebuilding, it got wrong answers, resulting in out-of-date XL binaries being sometimes used. This bug has been fixed in version 3.71. Since dependency checking is only done by MainJET, JetASM was not affected.
String parsing had some minor twinges in rare corner cases and these have been addressed
Bugs fixed - JetASM Release Notes: 07/17/1997 JDA JetASM32 Version 3.70 MainJET Version 3.70 NOTE: Because MainJET is a GUI front end for JetASM, all features and fixes listed for JetASM apply to MainJET as well.
Parsing Tokens in byte arrays New Features - JetASM32A bug occurred when the ( ) delimiters are used to indicate "string" for the ubyte_array data types. While scanning a line for macros and enumerations, JetASM did not exclude the data inside the parens from the scan. If you entered the source line
ubyte_array (This attribute is the eInch enumeration) CommentData
EchoCommentJetASM would translate the eInch to the 0 character, converting the line to read
(This Attribute uses the 0 enumeration)
This has been fixed.
In addition to the above fix, full ASCII string support has been added to JetASM. The above example line can now be entered like this New Features - MainJETubyte_array "This attribute is the eInch enumeration" CommentData
EchoCommentIn addition, several standard programmer's string options have been added. These (as listed by the -man command line option) are
String Constants:
\" Embedded Quote Escape Sequences:
\\ Embedded Backslash
\' Embedded Single Quote
\? Embedded Question Mark\a BEL (0x07) Example,
\b BS (0x08)
\f FF (0x0C)
\n LF (0x0A)
\r CR (0x0D)
\t TAB (0x09)
\v VT (0x0B)
\0 OCT up to three octal digits
\x HEX up to 4 HEX digits
\X HEX up to 4 HEX digitsubyte_array "This attribute is the \"eInch\" enumeration" CommentData
EchoCommentwould appear as
This Attribute is the "eInch" enumeration
Strings can be concatenated two ways, this one-line method would print as one string.
ubyte_array "This attribute" " is the eInch enumeration" CommentData
EchoCommentMultiple lines of strings can be placed like this
ubyte_array "This attribute" \
" is the eInch enumeration" \
" in use for this particular example" CommentData
EchoCommentThis following format is also legal, although tricky. There cannot be any characters other than the CRLF, whitespace or otherwise, to the right of the last '\' on the line.
ubyte_array "This attribute \
is the eInch enumeration \
in use for this particular example" CommentData
EchoCommentWhen the binary is disassembled, the line will be disassembled into the old ubyte_array hex format. NOTE: Under version 2.1, there will be a new string data type, already supported by JetASM. The string data type (an alias for ubyte_array) is scheduled to be supported in PCL-XL V2.1 in the future, so don't use it in your source files till then.
In addition, for those UEL and @PJL commands at the beginning and end of the source file, you can now use the new assembler operator string* to replace hex_raw*. So instead of keying in the line
hex_raw*
[
40 50 4a 4c 20 45 4e 54 45 52 20 4c 41 4e 47 55
41 47 45 20 3d 20 50 43 4c 58 4c 0a
]these lines can be entered like this
string* "\x1B%-12345X"
string* "@PJL ENTER LANGUAGE = PCLXL\n"Again, when the binary is disassembled, these lines will be disassembled into the old hex_raw* format.
PCL-XL Version 2.0 Support
All features in the current release of 2.0 PCL-XL are fully supported in JetASM.
File Extensions MainJET users can now specify multiple file extensions in the Options|File Extensions: entry. Just separate extensions with the ';' character, example, "cht;prn;obj" for Default PCL-XL File Extensions:. All files with the entered extensions will be displayed in any open/save file dialog box. The first extension in each field will be used as the default when MainJET forms default file names.
Of course, under NT and Win95, extensions can be any case, any characters (except ';') and up to 128 characters long. JetASM32.exe supports all NT and Win95 long file names and extensions.
File Dependencies
MainJET can now keep track of files that are included in the assemble using the $include, $include_raw, and $include_bmp assembler directives. The Source Files: filename is now a drop-down list. You can select any dependent file (after assembling the root source file at least once) by clicking on the source file name to drop down the list, then selecting the include file your interested in. MainJET keeps track of a dependent file's usage, so a file included with $include will be edited by the program named in Options|Source Editor:. A file included with the $include_raw directive will be viewed/edited by the program named in Options|Binary (HEX) File Operations: and any file included with the $include_bmp directive will be edited by the program named in Options|Bitmap Editor:. The File Details button will bring up a dialog box giving details about the currently highlighted file.
These dependent files are checked for age dependencies against the root source file, as well as the binary file, whenever an unlocked binary file is operated on.
Makefiles and Scripts
MainJET can now generate makefiles and script/batch files from the information in the project file. Makefiles and scripts can be generated for DOS or UNIX based systems. There is a DOS->UNIX mapping table that can be edited through Options|Edit Drive Mapping or through Makefile|Map DOS Drives when the UNIX flavor button is selected. Each DOS drive letter, A: through Z:, can be assigned an equivalent UNIX path.
To generate a makefile or script, suitable for make or GNUmake, open a project and with the Project: button selected, press the Makefile button. You will be presented with a file name and a Create, Edit and Close buttons. If Edit is dimmed, then the file name listed does not yet exist and only Create is active. If the file does exist, you can Create a new one or Edit the current one. You can also select a flavor of file (DOS or UNIX), and whether you want a makefile or script (known as a Batch file under DOS).
If UNIX is the selected flavor, then any DOS drive letter found in the project's paths will be mapped to the equivalent UNIX path (if the path is specified in the Map DOS drives dialog) and back slashes '\' will be converted to forward slashes '/' before being written to the script or makefile. If no path is entered for a given drive letter, the drive letter and colon characters will be replaced with a single forward slash '/'.
JetASM -man option
You can now view the JetASM -man text from MainJET. Simply open a project, select the Source File: radio button, and the context button Manual will appear. Click on it and the JetASM -man text will be loaded into the Source Editor.