From: SMTP%"RELAY-INFO-VAX@CRVAX.SRI.COM" 23-JUN-1994 09:37:37.85 To: EVERHART CC: Subj: SMG bug. Code illustrating it for those interested From: mdlcpgs@lhn.gns.cri.nz X-Newsgroups: comp.os.vms Subject: SMG bug. Code illustrating it for those interested Date: Wed, 22 Jun 94 15:16:33 +1200 Organization: Institute of Geological and Nuclear Sciences Lines: 80 Message-Id: <2u8afp$rej@st-james.comp.vuw.ac.nz> Nntp-Posting-Host: lhn.gns.cri.nz To: Info-VAX@CRVAX.SRI.COM X-Gateway-Source-Info: USENET In response to various emails about what the bug SMGSHR is, here is some short Fortran illustrating it, for VMS greater than 5.3-1. (it works okay on 5.3-1) Run it, press space, then down arrow. Press Ctrl/r will do a screen repaint showing the stuffed state of the logical virtual display. Change the Commenting out of the Read_keystroke to show it working when no prompt done. Also very interesting if you add the lines currently commented out as C* Adding these lines also make it work. PROGRAM TESTBED IMPLICIT NONE INTEGER PBID, VID, KBID INTEGER STATUS, MODE, TERM, IR, IC INCLUDE '($SMGDEF)' INTEGER SMG$READ_KEYSTROKE,SMG$CREATE_PASTEBOARD INTEGER SMG$SET_CURSOR_ABS,SMG$CREATE_VIRTUAL_KEYBOARD INTEGER SMG$REPAINT_SCREEN,SMG$CREATE_VIRTUAL_DISPLAY INTEGER SMG$PASTE_VIRTUAL_DISPLAY,SMG$CONTROL_MODE INTEGER SMG$SET_DISPLAY_SCROLL_REGION INTEGER SMG$PUT_LINE, SMG$CHANGE_RENDITION INTEGER SMG$RETURN_CURSOR_POS INTEGER I CHARACTER*80 OPTIONS STATUS = SMG$CREATE_PASTEBOARD (PBID, ,,, , ) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$CREATE_VIRTUAL_KEYBOARD(KBID,,,,0) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$CREATE_VIRTUAL_DISPLAY(24,80, * VID,0,,) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS=SMG$PASTE_VIRTUAL_DISPLAY(VID,PBID,1,1,) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$SET_DISPLAY_SCROLL_REGION(VID,4,22) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) C STATUS = SMG$SET_CURSOR_ABS(VID,4,1) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) DO I=0,18 WRITE (OPTIONS,'(A,I)') 'OPTIONS ',I STATUS = SMG$PUT_LINE(VID,OPTIONS,1,0,,0,,SMG$M_UP) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) ENDDO STATUS = SMG$CHANGE_RENDITION(VID,14,1,1,80,SMG$M_REVERSE,) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) C STATUS = SMG$SET_CURSOR_ABS(VID,24,1) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) 1 STATUS = SMG$READ_KEYSTROKE(KBID,TERM,'Search for ',,VID,,) C Comment out line above and uncomment line below will make it work okay C C1 STATUS = SMG$READ_KEYSTROKE(KBID,TERM,,,,,) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) IF (TERM .EQ. SMG$K_TRM_CTRLR) THEN STATUS=SMG$REPAINT_SCREEN(PBID) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) ELSE IF (TERM .EQ. SMG$K_TRM_SPACE) THEN STATUS = SMG$CHANGE_RENDITION(VID,14,1,1,80, * SMG$M_BOLD.OR.SMG$M_REVERSE,) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) C C Uncommenting the lines below will make it work too. C C* STATUS = SMG$SET_CURSOR_ABS(VID,24,1) C* IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) C ELSE IF (TERM .EQ. SMG$K_TRM_DOWN) THEN STATUS = SMG$CHANGE_RENDITION(VID,14,1,1,80,SMG$M_BOLD,) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$CHANGE_RENDITION(VID,15,1,1,80,SMG$M_REVERSE,) IF (STATUS.NE.1) CALL LIB$SIGNAL(%VAL(STATUS)) ELSE CALL EXIT ENDIF GOTO 1 END