|
Dale,
>I did a scan for QsnQryModSup on all of my source, and did turn up this
>source, which I wisely saved as a member named DET27X132 in my source file -
>the credit goes to Doug Handy:
For the record, the prototype Dale reposted had two arguments coded as *NoPass
which should have been coded as *Omit. Depending on what happened to be on the
stack, this could potentially cause problems if the arguments were not passed.
Since I've had private requests for what I use, I'm posting relevant portions of
the code below. The code was written to support a V3R2 client, so it doesn't
use compiler directives like /DEFINE, names are limited to 10 chars, and it
returns 1A character values which really should be type N indicator values. In
the code below, I've only changed return values to N where applicable. Using
/DEFINE is left as an excercise for the reader. <g>
Most of the subprocedures do not require an argument, but since RPG IV doesn't
allow you to append empty () to a proc name (yet!), I typically define an
optional/omissible dummy argument to make it clear a procedure is being called
as opposed to a variable being referenced, e.g.
C If Is27x132OK( *Omit )
C ...
C Else
C ...
C Endif
The same thing could be coded leaving out the ( *Omit ) if desired.
First the prototypes (put into a /COPY member):
* Prototype to determine if device is capable of 27x132 mode
D Is27x132OK PR N
D Dummy 1A Options( *NoPass: *Omit )
* Prototype to determine if device is capable of 24x80 mode
D Is24x80OK PR N
D Dummy 1A Options( *NoPass: *Omit )
* Prototype to check if a given screen mode is valid. The
* first argument, Mode, can be '3' for 24x80 or '4' for 27x132.
D ChkScrMode PR N
D Mode 1A Const
* Prototype to retrieve current screen mode (3=24x80; 4=27x132)
D RtvScrMode PR 1A
D Dummy 1A Options( *NoPass: *Omit )
* Prototype to retrieve current screen dimensions
D RtvScrDim PR
D Rows 5I 0
D Cols 5I 0
* Prototype to determine if WS supports color
D IsColorDev PR N
D Dummy 1A Options( *NoPass: *Omit )
* Prototype to determine if WS supports extended foreground colors
D IsExtColor PR N
D Dummy 1A Options( *NoPass: *Omit )
* Prototype to determine if WS supports Write Extended Attribute
D IsWeaDev PR N
D Dummy 1A Options( *NoPass: *Omit )
* Prototype to determine if WS ctl supports Enhanced User Interface
D IsEuiCtl PR N
D Dummy 1A Options( *NoPass: *Omit )
* Prototype to determine if WS uses GUI-like characters
D IsGuiDev PR N
D Dummy 1A Options( *NoPass: *Omit )
* Prototype to determine if WS has a pointer device available
D HasMouse PR N
D Dummy 1A Options( *NoPass: *Omit )
Then here is the service program source to go with it:
H NoMain
H Option(*SrcStmt: *NoDebugIO)
* DS used by QsnQry5250 receiver variable
D QryRcvDS DS
D QryBytRtn 10I 0
D QryBytAvl 10I 0
D QryStatus 1A
D QryWsCtlU 5I 0
D QryCodeLvl 3A
D 16A
D QryWsType 1A
D QryMchType 4A
D QryModel 3A
D QryKbdID 1A
D QryExtKbd 1A
D QryPcKbd 1A
D QrySerial 4A
D QryMaxInp 5I 0
D QryCtlUCst 2A
D 1A
D QryDevCap 12A
D QryDev1 1A Overlay(QryDevCap:1)
D QryDev2 1A Overlay(QryDevCap:2)
D QryDev3 1A Overlay(QryDevCap:3)
D QryDev4 1A Overlay(QryDevCap:4)
D QryDev5 1A Overlay(QryDevCap:5)
D QryDev6 1A Overlay(QryDevCap:6)
D QryDev7 1A Overlay(QryDevCap:7)
D QryDev8 1A Overlay(QryDevCap:8)
D QryDev9 1A Overlay(QryDevCap:9)
D QryDev10 1A Overlay(QryDevCap:10)
D QryDev11 1A Overlay(QryDevCap:11)
D QryDev12 1A Overlay(QryDevCap:12)
D QryGridBuf 1A
D 9A
D QryRcvLen S 10I 0 Inz( %size( QryRcvDS ))
D ApiErrorDS DS
D ErrBytPrv 10I 0 Inz( %size( ApiErrorDS ) )
D ErrBytAvl 10I 0 Inz( 0 )
D ErrMsgID 7A
D 1A
D ErrMsgDta 256A
D Qry5250 PR ExtProc( 'QsnQry5250' )
D RcvVar Like( QryRcvDS )
D RcvVarLen 10I 0
D ErrorDS Like( ApiErrorDS )
D/Copy (prototypes listed above; whatever you called it)
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Procedure to determine if device is capable of 27x132 mode
P Is27x132OK B Export
D Is27x132OK PI N
D Dummy 1A Options( *NoPass: *Omit )
C Return ChkScrMode( '4' )
P Is27x132OK E
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Procedure to determine if device is capable of 24x80 mode
P Is24x80OK B Export
D Is24x80OK PI N
D Dummy 1A Options( *NoPass: *Omit )
C Return ChkScrMode( '3' )
P Is24x80OK E
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Procedure to check if a given screen mode is valid. The
* first argument, Mode, can be '3' for 24x80 or '4' for 27x132.
P ChkScrMode B Export
D ChkScrMode PI N
D Mode 1A Const
D IsValid S 1A
D QryMode PR ExtProc( 'QsnQryModSup' )
D DspMode 1A Const
D IsValid N
D Handle 10I 0 Options( *Omit )
D ErrorDS Options( *Omit: *Varsize )
D Like( ApiErrorDS )
C Callp QryMode( Mode: IsValid: *Omit: *Omit )
C Return IsValid
P ChkScrMode E
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Procedure to retrieve current screen mode (3=24x80; 4=27x132)
P RtvScrMode B Export
D RtvScrMode PI 1A
D Dummy 1A Options( *NoPass: *Omit )
D RtvMode PR ExtProc( 'QsnRtvMod' )
D DspMode 1A
D Handle 10I 0 Options( *Omit )
D ErrorDS Options( *Omit: *Varsize )
D Like( ApiErrorDS )
D CurMode S 1A Inz( '0' )
C Callp RtvMode( CurMode: *Omit: *Omit )
C Return CurMode
P RtvScrMode E
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Procedure to retrieve current screen dimensions
P RtvScrDim B Export
D RtvScrDim PI
D Rows 5I 0
D Cols 5I 0
D R S 10I 0
D C S 10I 0
D RtvSize PR ExtProc( 'QsnRtvScrDim' )
D NumRow 10I 0
D NumCol 10I 0
D Handle 10I 0 Options( *Omit )
D ErrorDS Options( *Omit: *Varsize )
D Like( ApiErrorDS )
C Callp RtvSize( R: C: *Omit: *Omit )
C Eval Rows = R
C Eval Cols = C
C Return
P RtvScrDim E
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Procedure to determine if WS supports color
P IsColorDev B Export
D IsColorDev PI N
D Dummy 1A Options( *NoPass: *Omit )
D QryColor PR ExtProc( 'QsnQryColorSup' )
D Color N
D Handle 10I 0 Options( *Omit )
D ErrorDS Options( *Omit: *Varsize )
D Like( ApiErrorDS )
D IsColor S N Inz( '0' )
C Callp QryColor( IsColor: *Omit: *Omit )
C Return IsColor
P IsColorDev E
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Procedure to determine if WS supports extended foreground colors
P IsExtColor B Export
D IsExtColor PI N
D Dummy 1A Options( *NoPass: *Omit )
D TempChar S 1A
C Callp Qry5250( QryRcvDS: QryRcvLen: ApiErrorDS )
C Eval TempChar = QryDev3
C Bitoff '012345' TempChar
C If TempChar = x'02'
C Return *On
C Else
C Return *Off
C Endif
P IsExtColor E
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Procedure to determine if WS supports Write Extended Attribute
P IsWeaDev B Export
D IsWeaDev PI N
D Dummy 1A Options( *NoPass: *Omit )
C Callp Qry5250( QryRcvDS: QryRcvLen: ApiErrorDS )
C Testb '5' QryDev3 90
C Return *In90
P IsWeaDev E
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Procedure to determine if WS ctl supports Enhanced User Interface
P IsEuiCtl B Export
D IsEuiCtl PI N
D Dummy 1A Options( *NoPass: *Omit )
C Callp Qry5250( QryRcvDS: QryRcvLen: ApiErrorDS )
C Testb '6' QryDev5 90
C Return *In90
P IsEuiCtl E
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Procedure to determine if WS uses GUI-like characters
P IsGuiDev B Export
D IsGuiDev PI N
D Dummy 1A Options( *NoPass: *Omit )
C Callp Qry5250( QryRcvDS: QryRcvLen: ApiErrorDS )
C Testb '5' QryDev5 90
C Return *In90
P IsGuiDev E
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Procedure to determine if WS has a pointer device available
P HasMouse B Export
D HasMouse PI N
D Dummy 1A Options( *NoPass: *Omit )
C Callp Qry5250( QryRcvDS: QryRcvLen: ApiErrorDS )
C Testb '4' QryDev5 90
C Return *In90
P HasMouse E
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A few lines may have word wrapped in the message body, but fit on one line in a
source member. The TESTB operations have the indicator in columns 75-76 (EQ).
Doug
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.