915.2.1
Implement new GDI printing directive:
//TextIndent,x,y,text
//TextIndent
The first form of the command acts exactly like //Textout except:
• | it establishes an indent value of x, so that subsequent lines output without using //TextOut will retain the same indent. |
• | it sets the internal printer 'cursor' to the specified x,y position so that subsequent lines (output without any explicit positioning) will appear in the expected place. |
• | you can set x and/or y to -1 to refer to the current x and/or y position (useful when you don't know the current position). Note that for the x position, you might need to use the technique of ending the previous output with \ to hold the position, for example: |
//TextOut,100,100,Our indented text starts here---> \
//TextIndent,-1,100,[Start Indented Text]
[2nd line of indented text]
//TextIndent
The second form (without any arguments) disables the indent, restoring the original margin.
This command is useful when outputting a multiline block of text, such as you would get from INFLD multiline mode or INMEMO. For example, assuming that we have retrieved the multiline text into a variable MEMO$, you might use the following code:
PRINT #CH, "//TEXTINDENT,";XPOS;",";YPOS;",";MEMO$
PRINT #CH, "//TEXTINDENT" ! turn indent off
Note that because the MEMO$ variable contains embedded CRLF terminators, in the printfile it would look something like the this:
//TEXTINDENT,150,300,This is the first line of the memo
This is the second line of the memo
This is the third line of the memo
//TEXTINDENT
Also note that the vertical spacing for the subsequent lines (second and third lines in the example immediately above) is determined based on the last established font, and is the same you would get when outputting text without using //TEXTOUT.
915.2.2
Related to the above, it is no longer necessary to quote the 3rd argument of //TEXTOUT and //TEXTINDENT commands in order to prevent commas in the text from being treated as argument terminators. For example:
//TEXTOUT,150,300,McGregor,Jack
Previously, the above would have printed just "McGregor" and ignored the ",Jack" because it would have first parsed the line based on the commas, assigning "McGregor" to the 3rd argument and "Jack" to the fourth. Since //TEXTOUT takes only 3 arguments, the 4th argument was ignored. To avoid that, it was previously necessary to use quotes as follows:
//TEXTOUT,150,300,"McGregor,Jack"
The problem with requiring the quotes is that it wouldn't work with //TEXTINDENT without forcing the application to first parse the multiline string. So we've eliminated the quoting requirement for //TEXTOUT and //TEXTINDENT; everything after the X,Y parameters is considered part of the 3rd argument (up to the CRLF).
915.2.3
(WINDOWS/ATE) New GDI printing directive:
//ResetLPP
This resets the current lines-per-page value, which is used to determine the vertical line spacing, so that the line spacing will instead be based on the current font. Even when there is no explicit LPP value in the printer init file, a default LPP is established based on the paper size and default font. Once established, changing the font does not change the vertical spacing (unless you use the //ResetLPP command).
For example, assume that the default LPP results in vertical line spacing of 6 lines per inch. If you then change to a 24 point font, and output multiple lines, the lines will overlap vertically because the 24 point font is taller than 1/6 of an inch. To avoid that and instead adjust the vertical line spacing to what would be natural for a 24 point font, just use the //ResetLPP command either before or immediately after the //SetFont, as shown here:
//ResetLPP
//SetFont,240,Arial
This line output in 24 point Arial
So is this line (with natural 24 point spacing)
915.2.4
(WINDOWS/ATE) Fix bug in which a TAB(x,y) would delete a control positioned at (x,y) even if the TAB was relative to the main window and the control was relative to some other window (such as dialog). Note that this auto-delete feature is deliberate, as it cleans up situations in which a program would expect one PRINT TAB(x,y);STRING$ to completely replace a prior output at that position. But obviously we shouldn't confuse absolute (x,y) coordinates with those that are relative to a parent control.
915.2.5
(WINDOWS/ATE) TYPE ")" (start cursor at end of text) in a multiline edit control now scrolls the editing window as expected, including in display mode.
915.1.1
Fix non-ATE TRMCHR (broken in 915)
915.0.1
(WINDOWS/ATE) TRMCHR.SBR now supports the WINROW and WINCOL fields in the parameter packet to indicate the usable size of the current dialog window, if any. Note, however, that in order for an application running on a server to find out the current dialog information from an ATE client, you must set the WINROW field to -1 before the XCALL TRMCHR. (This causes the server to transfer the TRMCHR request to the ATE client.) Otherwise, the information will only be relative to the server, where there is no currently defined significance for WINROW and WINCOL.
915.0.2
Fix a bug in which if all licenses were in use when a new instance was launched, and the IJCFREQ parameter in MIAME.INI was set to 0, then it would mistakenly think the first job was dead and would zap it.
915.0.3
(WINDOWS) Implement a minor improvement in the TRACE=QOP tracing related to JOBTBL locking.
915.0.4
xcall AUI,"EVENTWAIT" now supports ^R (VK_PREV) and ^T (VK_NEXT) commands, generating EXITCODES 4 and 6, respectively (just like INFLD).
915.0.5
BTNMNU.SBX 1.0(103) released through the Shared Open Source Library; see there for details.
915.0.6
GETPRG.SBR now supports program and SBX names up to 10 characters. Previously when used within an SBX, it would truncate the name of the calling program to 6 characters. Also, the ashlog.log was in some cases outputting garbage in place of program name, and also generating more JOBTBL activity than necessary.