SMSQmuLator and SMSQ/E News

v. 1.23 of SMSQmulator can be downloaded from www.wlenerz.com/SMSQmulator

This uses SMSQE 3.18.

Wolfgang Lenerz says you might want to upgrade, there was bug in the directory creation routine for WIN drives.

SMSQE 3.18 is out www.wlenerz.com/smsqe

This allows programs that are devised for it to have a CSIZE for application subwindows other than 0,0. You can find a demo program for that at www.lenerz.com/QLStuff

Application subwindow text objects may now have character sizes other than 0,0. Of course, this only applies to programs specially written to take advantage of these sizes.

The values for the csizes are stored in the working definition at previously unused locations ($26 and $27). The values are the same as those for the CSIZE command i.e. 0 to 3 for the x csize and 0 or 1 for the y csize. Behaviour if other values are given is undefined.

Note that the csizes are, of course, the same for all objects of a menu application sub-window (but different appsubwindows may have different csizes).

Wolfgang has given examples of how to use these:

1 – For the machine code programmer :

The values are stored at offsets

wwa_xcsz equ    $26 wwa_ycsz equ    $27

in the working definition, as byte-sized values. The key files have been amended to suit. You may also set these sizes in a menu application sub definition which will be converted to a working definition by the standard setup vector. In that case set the values BELOW the start of the normal defintion : at -4 of the start, set a flag, i.e. a long word ‘XTND’ and at -6 set a word with the x (-6) and y (-5) csizes values as bytes. Do not forget to adjust the sizes of your objects’ hitsize and spacing if you use bigger characters.

2 – For the basic programmer.

Two procedures have been created for the two common toolkits, qptr and easyptr.

For qptr :

def proc set_csizes_QPTR (appsub_list,num%,x_csize%,y_csize%)
rem set the csizes for menu appsub windows
rem params:
rem   appsub_list
rem     the appsub list as returned by the RD_AWTA basic function  and/or
rem     the MK_AWL extension
rem   num%
rem     the appsub number, starting at 1 for the first appsub wdw
rem   x_csize%
rem      the x csize (0 … 3), same as for the CSIZE command
rem   y_csize%
rem      the y csize (0 or 1), same as for the CSIZE command
rem
rem   If there is any error in the parameters, this just gives up silently
rem   without generating an error
rem
local appsub_nbr%,appsub
appsub_nbr%=peek_w(appsub_list)               : rem nbr of appsub wdws
if appsub_nbr% < num% or num% < 1: return     : rem wrong appsub number
appsub=peek_l(appsub_list+2+4*(num%-1))       : rem get poiner to
appsub wdw
if x_csize% > -1 and x_csize% < 4
poke appsub+38,x_csize%                   : rem set size
endif
if y_csize% > -1 and y_csize% < 2
poke appsub+39,y_csize%                   : rem set size
endif
end def set_csizes_QPTR

Call this procedure once you have created the appsub list.

For easyptr:

def proc set_csizes_EASYPTR (channel%,num%,x_csize%,y_csize%)
rem set the csizes for menu appsub windows
rem params:
rem   channel%
rem     the channel number, which must be the same one as used for MAWDRAW
rem     or MAWSETUP. THIS DOES NOT DEFAULT TO ANYTHING, you MUST
rem     supply this parameter correctly.
rem   num%
rem     the appsub number, starting at 1 for the first appsub wdw
rem   x_csize%
rem      the x csize (0 … 3), same as for the CSIZE command
rem   y_csize%
rem      the y csize (0 or 1), same as for the CSIZE command
rem
rem   If there is any error in the parameters, this just gives up silently
rem   without generating an error
rem
local appsub_nbr%,appsub
appsub= MWDEF(#channel%)                      : rem the working definition
appsub_nbr%=peek_w(appsub+110)                : rem nbr of appsub wdws
if appsub_nbr% < num% or num% < 1: return     : rem wrong appsub number
appsub=peek_l(appsub+112)                     : rem point to appsub list
appsub=peek_l(appsub+4*(num%-1))              : rem get poiner to appsub wdw
if x_csize% > -1 and x_csize% < 4
poke appsub+38,x_csize%                   : rem set size
endif
if y_csize% > -1 and y_csize% < 2
poke appsub+39,y_csize%                   : rem set size
endif
end def set_csizes_EASYPTR
:

For this to work, create your menu with the MAWSETUP command and call this procedure afterwords.

You will find both procedures in a common file : dev8_extras_source_setcsizes_bas.

Do not forget to adjust the sizes of your objects’ hitsize and spacing if you use bigger characters.