/**/ signal on novalue /* force REXX and its way of 'NOVALUE ON' */ /* Usage: [MACRO] MODE columns,lines */ /* Example: MODE 132,44 */ /* Requires: Kedit 5.0, OS/2 REXXUTIL SysTextScreenSize() */ /* Restrictions: KEDIT requires at least 40 columns and 13 lines */ /* MODE expects OPMODE FULLSCREEN or TEXTWINDOW */ /* In OPMODE TEXTWINDOW all modes supported by OS/2 are possible, */ /* but KEDIT restricts MODE to at least 40 columns in 13 lines... */ /* In OPMODE FULLSCREEN columns can be 40, 80, or 132 depending */ /* on video equipment and OS/2 MODE command. */ arg COLS ',' ROWS ; 'extract /PSCREEN/' if ROWS = '' then arg COLS ROWS /* blank delimiter ? */ if ROWS = '' then ROWS = PSCREEN.1 /* default for ROWS */ MIN = 'SysTextScreenSize' /* required function */ signal on syntax name FAIL /* RxFuncQuery FAIL */ if RxFuncQuery( MIN ) then do /* REXXUTIL function */ if RxFuncAdd( MIN, 'RexxUtil', MIN ) then call FAIL MIN end do MIN = 1 until rc <> 5 /* 5 invalid operand */ 'nomsg pscreen' MIN /* check the minimal */ end /* ROWS dynamically */ MIN = MIN - 1 /* adding STATUSLINE */ select /* strip CO or BW... */ when datatype( COLS, 'w' ) & 39 < COLS then nop when COLS = 'CO80' | COLS = 'BW80' then COLS = 80 when COLS = 'CO40' | COLS = 'BW40' then COLS = 40 when COLS = 'CO132' | COLS = 'BW132' then COLS = 132 when COLS = 'MONO' then COLS = 80 when COLS > '' then call FAIL COLS otherwise 'macro khelp mode' ; exit rc end select when datatype( ROWS, 'w' ) = 0 then call FAIL ROWS when ROWS < MIN /* Kedit minimum 13 */ then call FAIL ROWS when opmode.1() = 'TEXTWINDOW' then nop when opmode.1() <> 'FULLSCREEN' then call FAIL 'MODE' when 0 = wordpos( COLS, '40 80 132' ) then call FAIL COLS when ROWS = 34 then ROWS = 33 /* adjusting ugly 34 */ when ROWS = 43 then ROWS = 44 /* adjusting ugly 43 */ when ROWS < 50 then nop /* anything else ok. */ when ROWS = 50 then do 'dosq mode' COLS || ',25' /* 50x132 is tricky: */ parse value SysTextScreenSize() with ROWS COLS 'pscreen' ROWS COLS 'preset' /* OS/2 set 132 cols */ 'pscreen 50' ; 'query pscreen' /* KEDIT set 50 rows */ exit 0 end otherwise call FAIL ROWS end /* 60 fails completely (black screen) for my ATI Mach32: */ /* OS/2 uses always 70 Hz, but my monitor requires 60 Hz */ /* for 80x60 or 132x60, under plain DOS 60 lines are ok. */ 'dosq mode' COLS || ',' || ROWS /* OS/2 MODE result: */ parse value SysTextScreenSize() with ROWS COLS if MIN < ROWS then LINE = 'query pscreen' if MIN = ROWS then do LINE = 'STATUSLINE ON BOTTOM' ; ROWS = MIN + 1 /* patch it */ say "KEDIT 5.00 doesn't support" MIN "lines: invisible" LINE end 'pscreen' ROWS COLS 'preset' ; 'command' LINE ; exit rc FAIL: 'dosq mode' PSCREEN.2 || ',' || PSCREEN.1 ; 'pscreen' PSCREEN.1 'emsg' arg( 1 ) 'not supported in' opmode.1() 'mode' ; exit 1