![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: I want to use sys$qio to "speak" with a bizerba's scales...in cobol, crossing a decserv 200 Mc.... My difficulty it's to code the terminateur ??? I must set the bit 27 (EOB) ??? how can i do that ?? can you send me a example of the data format of the variable and the MOVE sentence to set the terminateur ... thanks PS : If you have a cobol's program examples I'm very interested ;-) The Answer is : Please contact the customer support center for assistance, and please check for available examples on DSN/DSNlink -- DSN is an excellent source of programming examples. The terminator is a bitmask. That means that you need to set the 27th bit in the bitmask, which means that -- among other approaches -- you can load an integer value into the proper portion of the bitmask that has just the 27th bit set. (Bit 27 is hexidecimal 08000000, decimal 134217728.) COBOL is not generally known as the easiest of languages for making OpenVMS system service calls from -- programmers in other languages generally have a somewhat easier time than COBOL programmers. The following is an example of how to trap broadcast messages from COBOL, via calls to various system services including sys$qio. The example consists of three COBOL modules. 1 TRAP_BROADCAST.COB, which performs: Create the mailbox, Associate the mailbox with the terminal, Get and save the terminal characteristics, Set Terminal /NOBROAD/BRDCSTMBX, Declare a write attention AST, Hibernate, Restore the terminal characteristics, Exit. 2 SETWRTAST.COB, a subroutine which performs: Declare MAILBOX_AST as the write attention AST. 3 MAILBOX_AST.COB, which is activated for each AST, and performs: Read message, When the message is retrieved succesfully: Display the message Read message Redeclare the write attention AST Wake up if message contains the text "EXIT PLEASE" Return IDENTIFICATION DIVISION. PROGRAM-ID. HEIN VAN DEN HEUVEL. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 ONE PIC S9(9) COMP VALUE 1. 01 TT2$V_BRDCSTMBX PIC S9(9) COMP VALUE 4. 01 TT$V_NOBRDCST PIC S9(9) COMP VALUE 17. 01 IO$_SETMODE PIC S9(9) COMP VALUE EXTERNAL IO$_SETMODE. 01 IO$_SENSEMODE PIC S9(9) COMP VALUE EXTERNAL IO$_SENSEMODE. 01 SS$_NORMAL PIC S9(9) COMP VALUE EXTERNAL SS$_NORMAL. 01 ALL_CHARACTERISTICS. 03 FILLER PIC S9(9) COMP. 03 CHARACTERISTICS PIC S9(9) COMP. 03 EXTENDED_CHAR PIC S9(9) COMP. 01 ALL_CHAR REDEFINES ALL_CHARACTERISTICS PIC X(12). 01 SAVE_CHAR PIC X(12). 01 IO_STATUS_BLOCK. 03 IO_STAT PIC S9(4) COMP. 03 FILLER PIC X(6). 01 TT_CHAN PIC S9(9) COMP. 01 MBX_CHAN PIC S9(9) COMP. 01 ST PIC S9(9) COMP. * SETWRTAST PIC S9(4) COMP VALUE EXTERNAL acms$k_proc_io_method. PROCEDURE DIVISION. MAIN-program SECTION. BEGIN-HERE. CALL "SYS$CREMBX" USING OMITTED, BY REFERENCE MBX_CHAN, OMITTED,OMITTED,OMITTED,OMITTED, BY DESCRIPTOR "BROADCAST_MAILBOX" GIVING ST. IF ST IS FAILURE THEN CALL "SYS$EXIT" USING BY VALUE ST. CALL "SYS$ASSIGN" USING BY DESCRIPTOR "TT", BY REFERENCE TT_CHAN, OMITTED, BY DESCRIPTOR "BROADCAST_MAILBOX" GIVING ST. IF ST IS FAILURE THEN CALL "SYS$EXIT" USING BY VALUE ST. CALL "SETWRTAST" USING MBX_CHAN, IO_STAT. * Get and save current terminal characteristics, then * Set NOBROADCAST and BRDCSTMBX characteristics. CALL "SYS$QIOW" USING OMITTED, BY VALUE TT_CHAN, BY VALUE IO$_SENSEMODE, BY REFERENCE IO_STAT, OMITTED, OMITTED, ALL_CHAR, BY VALUE 12, OMITTED, OMITTED, OMITTED, OMITTED GIVING ST. IF ST IS FAILURE THEN CALL "SYS$EXIT" USING BY VALUE ST. MOVE ALL_CHAR TO SAVE_CHAR * How the F*** does one simply set a single bit in cobol ??!! CALL "LIB$INSV" USING ONE, TT$V_NOBRDCST, ONE, CHARACTERISTICS. CALL "LIB$INSV" USING ONE, TT2$V_BRDCSTMBX, ONE, EXTENDED_CHAR. CALL "SYS$QIOW" USING OMITTED, BY VALUE TT_CHAN, BY VALUE IO$_SETMODE, BY REFERENCE IO_STAT, OMITTED, OMITTED, ALL_CHAR, BY VALUE 12, OMITTED, OMITTED, OMITTED, OMITTED GIVING ST. IF ST IS FAILURE THEN CALL "SYS$EXIT" USING BY VALUE ST. CALL "SYS$HIBER". * Clean up, Restore terminal characteristics. CALL "SYS$QIOW" USING OMITTED, BY VALUE TT_CHAN, BY VALUE IO$_SETMODE, BY REFERENCE IO_STAT, OMITTED, OMITTED, SAVE_CHAR, BY VALUE 12, OMITTED, OMITTED, OMITTED, OMITTED GIVING ST. IF ST IS FAILURE THEN CALL "SYS$EXIT" USING BY VALUE ST. EXIT PROGRAM. IDENTIFICATION DIVISION. PROGRAM-ID. SETWRTAST. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 MAILBOX_AST PIC S9(9) COMP VALUE EXTERNAL MAILBOX_AST. 01 IO$_SETMODE PIC S9(9) COMP VALUE EXTERNAL IO$_SETMODE. 01 IO$M_WRTATTN PIC S9(9) COMP VALUE EXTERNAL IO$M_WRTATTN. 01 IO_ATTENTION PIC S9(9) COMP. LINKAGE SECTION. 01 MBX_CHAN PIC S9(9) COMP. 01 MBX_STAT PIC S9(9) COMP. PROCEDURE DIVISION USING MBX_CHAN, MBX_STAT. A. MOVE IO$_SETMODE TO IO_ATTENTION. ADD IO$M_WRTATTN TO IO_ATTENTION. CALL "SYS$QIOW" USING OMITTED, BY VALUE MBX_CHAN, BY VALUE IO_ATTENTION, BY REFERENCE MBX_STAT, OMITTED, OMITTED, BY VALUE MAILBOX_AST, BY REFERENCE MBX_CHAN, OMITTED, OMITTED, OMITTED, OMITTED EXIT PROGRAM. IDENTIFICATION DIVISION. PROGRAM-ID. MAILBOX_AST. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 MBX_BUFSIZ PIC S9(9) COMP VALUE 200. 01 SS$_NORMAL PIC S9(9) COMP VALUE EXTERNAL SS$_NORMAL. 01 SS$_ENDOFFILE PIC S9(9) COMP VALUE EXTERNAL SS$_ENDOFFILE. 01 IO$M_NOW PIC S9(9) COMP VALUE EXTERNAL IO$M_NOW. 01 IO$_READVBLK PIC S9(9) COMP VALUE EXTERNAL IO$_READVBLK. 01 IO_READ PIC S9(9) COMP. 01 EXIT_FLAG PIC S9(9) COMP. 01 MBX_STATUS_BLOCK. 03 MBX_STATUS PIC S9(4) COMP. 03 MBX_BYTECOUNT PIC S9(4) COMP. 03 FILLER PIC S9(9) COMP. 01 MBX_MESSAGE. 03 MESSAGE_TYPE PIC S9(4) COMP. 03 UNIT_NUMBER PIC S9(4) COMP. 03 NAME_LENGTH PIC X. 03 CONTROLLER_NAME PIC X(15). 03 MESSAGE_LENGTH PIC S9(4) COMP. 03 MESSAGE_TEXT PIC X(200). 01 ST PIC S9(9) COMP. LINKAGE SECTION. 01 MBX_CHAN PIC S9(9) COMP. 01 R0 PIC S9(9) COMP. 01 R1 PIC S9(9) COMP. 01 PC PIC S9(9) COMP. 01 PSL PIC S9(9) COMP. PROCEDURE DIVISION USING MBX_CHAN, R0, R1, PC, PSL. A. MOVE IO$_READVBLK TO IO_READ. ADD IO$M_NOW TO IO_READ. DISPLAY "MAILBOX message!" MOVE SPACES TO MESSAGE_TEXT. CALL "SYS$QIOW" USING OMITTED, BY VALUE MBX_CHAN, BY VALUE IO_READ, BY REFERENCE MBX_STATUS, OMITTED, OMITTED, MBX_MESSAGE, BY VALUE MBX_BUFSIZ, OMITTED, OMITTED, OMITTED, OMITTED, GIVING ST. IF ST IS FAILURE THEN CALL "SYS$EXIT" USING BY VALUE ST. PERFORM PRINT_MESSAGE UNTIL MBX_STATUS IS NOT EQUAL TO SS$_NORMAL. IF MBX_STATUS IS EQUAL TO SS$_ENDOFFILE THEN CALL "SETWRTAST" USING MBX_CHAN, MBX_STATUS ELSE CALL "SYS$EXIT" USING BY VALUE ST. INSPECT MESSAGE_TEXT TALLYING EXIT_FLAG FOR ALL "EXIT PLEASE". IF EXIT_FLAG IS GREATER THAN ZERO THEN CALL "SYS$WAKE" USING OMITTED, OMITTED. EXIT PROGRAM. PRINT_MESSAGE. DISPLAY "MESSAGE_TYPE : ", MESSAGE_TYPE WITH CONVERSION. DISPLAY "NAME : ", CONTROLLER_NAME. DISPLAY "LENGTH : ", MESSAGE_LENGTH WITH CONVERSION. DISPLAY "MESSAGE_TEXT : ", MESSAGE_TEXT. CALL "SYS$QIOW" USING OMITTED, BY VALUE MBX_CHAN, BY VALUE IO_READ, BY REFERENCE MBX_STATUS, OMITTED, OMITTED, MBX_MESSAGE, BY VALUE MBX_BUFSIZ, OMITTED, OMITTED, OMITTED, OMITTED, GIVING ST. END_PRINT_MESSAGE.
|