RUI_READ動詞命令會將回應、SNA 命令和數據接收至Microsoft® Windows® 邏輯單元應用程式 (LUA) 應用程式緩衝區。
下列結構描述RUI_READ所使用的動詞控制區塊 (VCB) LUA_COMMON成員。
語法
struct LUA_COMMON {
unsigned short lua_verb;
unsigned short lua_verb_length;
unsigned short lua_prim_rc;
unsigned long lua_sec_rc;
unsigned short lua_opcode;
unsigned long lua_correlator;
unsigned char lua_luname[8];
unsigned short lua_extension_list_offset;
unsigned short lua_cobol_offset;
unsigned long lua_sid;
unsigned short lua_max_length;
unsigned short lua_data_length;
char FAR * lua_data_ptr;
unsigned long lua_post_handle;
struct LUA_TH lua_th;
struct LUA_RH lua_rh;
struct LUA_FLAG1 lua_flag1;
unsigned char lua_message_type;
struct LUA_FLAG2 lua_flag2;
unsigned char lua_resv56[7];
unsigned char lua_encr_decr_option;
};
成員
lua_verb
提供的參數。 包含動詞程式代碼,LUA_VERB_RUI要求單位介面 (RUI) 動詞命令。
lua_verb_length
提供的參數。 指定 LUA VCB 的位元組長度。 它必須包含所發出動詞記錄的長度。
lua_prim_rc
LUA 在動詞完成時設定的主要傳回碼。 有效的傳回碼會根據所發出的 LUA 動詞而有所不同。
lua_sec_rc
LUA 在動詞完成時所設定的次要傳回碼。 有效的傳回碼會根據所發出的 LUA 動詞而有所不同。
lua_opcode
提供的參數。 包含要發出動詞的 LUA 命令程式代碼(動詞作業程式代碼),LUA_OPCODE_RUI_READ。
lua_correlator
提供的參數。 包含使用者提供的值,這個值會鏈接動詞與其他使用者提供的資訊。 LUA 不會使用或變更這項資訊。 這是選擇性參數。
lua_luname
提供的參數。 指定 Windows LUA 工作階段所使用的本機 LU 的 ASCII 名稱。
RUI_READ 只有在 lua_sid 為零時,才需要此參數。
如果名稱短於八個字元,則此參數長度為8個字節,以空格(0x20)填補右邊。
lua_extension_list_offset
主機整合伺服器中 RUI 未使用,且應設定為零。
lua_cobol_offset
MICROSOFT主機整合伺服器中 ® LUA 未使用,且應為零。
lua_sid
提供和傳回的參數。 指定會話標識碼,並由 SLI_OPEN 和 RUI_INIT傳回。 其他動詞會使用此參數來識別用於命令的會話。 如果其他動詞使用 lua_luname 參數來識別會話,請將 lua_sid 參數設定為零。
lua_max_length
指定接收的緩衝區長度 , RUI_READ和 SLI_RECEIVE。 其他 RUI 和 SLI 動詞未使用,且應設定為零。
lua_data_length
傳回的參數。 指定RUI_BID動詞命令lua_peek_data中傳回的數據長度。
lua_data_ptr
應用程式提供的緩衝區指標,該緩衝區是接收來自 RUI_READ動 詞的數據。 SNA 命令和數據都放在這個緩衝區中,而且它們可以是 EBCDIC 格式。
發出 RUI_READ 時,此參數會指向從主機接收數據的位置。
lua_post_handle
提供的參數。 如果事件要完成異步通知,則用於Microsoft Windows Server。 此變數包含要發出訊號的事件句柄或視窗句柄。
lua_th
傳回的參數。 包含已傳送或接收之訊息的 SNA 傳輸標頭(TH)。 針對寫入函式設定各種子參數,並針對讀取和投標函式傳回。 其子參數如下所示:
lua_th.flags_fid
格式識別類型 2,四個位。
lua_th.flags_mpf
區隔對應欄位,兩個位。 定義數據區段的類型。 下列是有效值:
0x00 中間區段0x04 最後一個區段0x08 僅限第一個區段0x0C 區段
lua_th.flags_odai
原始位址欄位 -目的地位址字段 (OAF–DAF) 指派器指標,一個位。
lua_th.flags_efi
加速流程指示器,一位。
lua_th.daf
目的地位址欄位 (DAF),不帶正負號的字元。
lua_th.oaf
原始位址欄位 (OAF),不帶正負號的字元。
lua_th.snf
序號欄位,不帶正負號的 char[2]。
lua_rh
傳回的參數。 包含已傳送或接收之訊息的 SNA 要求 /回應標頭 (RH)。 它會設定為寫入函式,並由讀取和投標函式傳回。 其子參數如下所示:
lua_rh.rri
要求響應指標,一個位。
lua_rh.ruc
RU 類別,兩個位。 下列是有效值:
LUA_RH_FMD (0x00) FM 數據區段LUA_RH_NC (0x20) 網路控制LUA_RH_DFC (0x40) 數據流控制LUA_RH_SC (0x60) 工作階段控制
lua_rh.fi
格式指標,一個位。
lua_rh.sdi
感知數據報含指標,一位。
lua_rh.bci
開始鏈結指標,一個位。
lua_rh.eci
結束鏈結指標,一個位。
lua_rh.dr1i
明確的回應 1 指標,一個位。
lua_rh.dr2i
明確的回應 2 指標,一個位。
lua_rh.ri
例外狀況回應指標(適用於要求),或回應類型指標(針對回應),一個位。
lua_rh.qri
佇列回應指標,一個位。
lua_rh.pi
步調指標,一個位。
lua_rh.bbi
開始方括弧指標,一個位。
lua_rh.ebi
尾括弧指標,一個位。
lua_rh.cdi
變更方向指標,一個位。
lua_rh.csi
程式代碼選取指標,一個位。
lua_rh.edi
加密的數據指標,一個位。
lua_rh.pdi
填補的數據指標,一個位。
lua_flag1
提供的參數。 包含包含應用程式所提供訊息旗標的資料結構。 其子參數如下所示:
lua_flag1.bid_enable
投標啟用指標,一個位。
lua_flag1.close_abend
關閉立即指標,一個位。
lua_flag1.nowait
沒有等候數據旗標,一個位。
lua_flag1.sscp_exp
SSCP 加速流程,一個位。
lua_flag1.sscp_norm
SSCP 一般流程,一個位。
lua_flag1.lu_exp
LU 加速流程,一位。
lua_flag1.lu_norm
LU 一般流程,一位。
將 lua_flag1.nowait 設定為 1,表示您想要 RUI_READ 立即傳回是否可供讀取數據,或如果您想要動詞在傳回之前等候數據,請將它設定為零。
將 lua_flag1.bid_enable 設定為 1 以重新啟用最新的 RUI_BID (相當於使用與之前完全相同的參數再次發出 RUI_BID ),或者如果您不想重新啟用 RUI_BID,請將它設定為零。
重新啟用先前 的RUI_BID 會重複使用原先為其配置的 VCB,因此此 VCB 不得已釋出或修改。
將下列一或多個旗標設定為 1,以指出要讀取數據的訊息流程:
lua_flag1.sscp_exp
lua_flag1.lu_exp
lua_flag1.sscp_norm
lua_flag1.lu_norm
如果設定了多個旗標,則會傳回可用的最高優先順序數據。 優先順序順序(最高第一個)是:SSCP 加速、LU 加速、SSCP 正常、LU 正常。 lua_flag2群組中的對等旗標會設定為指出讀取數據的流程。
lua_message_type
指定輸入或輸出 SNA 命令和資料的類型。 傳回的參數。 指定向 RUI_READ指示的 SNA 訊息類型。 可能的值為:
LUA_MESSAGE_TYPE_LU_DATA
LUA_MESSAGE_TYPE_SSCP_DATA
LUA_MESSAGE_TYPE_RQR
LUA_MESSAGE_TYPE_BID
LUA_MESSAGE_TYPE_BIND
LUA_MESSAGE_TYPE_BIS
LUA_MESSAGE_TYPE_CANCEL
LUA_MESSAGE_TYPE_CHASE
LUA_MESSAGE_TYPE_CLEAR
LUA_MESSAGE_TYPE_CRV
LUA_MESSAGE_TYPE_LUSTAT_LU
LUA_MESSAGE_TYPE_LUSTAT_SSCP
LUA_MESSAGE_TYPE_QC
LUA_MESSAGE_TYPE_QEC
LUA_MESSAGE_TYPE_RELQ
LUA_MESSAGE_TYPE_RTR
LUA_MESSAGE_TYPE_SBI
LUA_MESSAGE_TYPE_SHUTD
LUA_MESSAGE_TYPE_SIGNAL
LUA_MESSAGE_TYPE_SDT
LUA_MESSAGE_TYPE_STSN
LUA_MESSAGE_TYPE_UNBIND
LU_DATA、LUSTAT_LU、LUSTAT_SSCP和SSCP_DATA不是 SNA 命令。
lua_flag2
傳回的參數。 包含 LUA 所傳回之訊息的旗標。 其子參數如下所示:
lua_flag2.bid_enable
表示如果設定為 1,則已成功重新啟用 RUI_BID 。
lua_flag2.async
指出如果設定為 1,LUA 介面動詞動詞會以異步方式完成。
lua_flag2.sscp_exp
如果設定為 1,表示 SSCP 加速流程。
lua_flag2.sscp_norm
如果設定為 1,則表示 SSCP 一般流程。
lua_flag2.lu_exp
如果設定為 1,則表示 LU 加速流程。
lua_flag2.lu_norm
如果設定為 1,則表示 LU 一般流程。
lua_resv56
保留且應設定為零。
lua_encr_decr_option
保留且應設定為零。
回傳代碼
LUA_OK
主要傳回碼;已順利執行動詞。
LUA_DATA_INCOMPLETE
次要傳回碼; RUI_READ 無法傳回所接收的所有數據,因為應用程式的數據緩衝區 (lua_max_length表示)不夠大。 後續 RUI_READ 要求可以發出,以擷取剩餘的 RUI 數據。
這不是RUI_READ的默認行為,只有在會話建立期間呼叫RUI_INIT時,lua_resv56[3] 設定為動詞控件區塊中的非零值時,才會啟用。 如需詳細資訊,請參閱備註。
LUA_CANCELED
主要傳回碼;動詞未順利完成,因為它已由另一個動詞或內部錯誤取消。
LUA_PURGED
次要傳回碼; RUI_PURGE 已取消 RUI_READ。
LUA_TERMINATED
次要傳回碼; RUI_READ擱置 時發出 RUI_TERM 。
LUA_PARAMETER_CHECK
主要傳回碼;因為參數錯誤而未執行動詞。
LUA_BAD_DATA_PTR
次要傳回碼; lua_data_ptr 參數包含無效的值。
LUA_BAD_SESSION_ID
次要傳回碼;在 VCB 中指定 了 無效lua_sid值。
LUA_BID_ALREADY_ENABLED
次要傳回碼; lua_flag1.bid_enable 設定為重新啟用 RUI_BID, 但先前 的RUI_BID 仍在進行中。
LUA_DUPLICATE_READ_FLOW
次要傳回碼; lua_flag1 群組中的流程旗標指定了RUI_READ已經未 完成的一 或多個會話流程。 一次只能有一個 RUI_READ 可以等候每個會話流程。
LUA_INVALID_FLOW
次要傳回碼;未設定 任何lua_flag1 流程旗標。 至少必須將其中一個旗標設定為 1,以指出要讀取的流程或流程。
LUA_INVALID_POST_HANDLE
次要傳回碼;對於使用事件做為異步張貼方法的 Windows作系統,Windows LUA VCB 不包含有效的事件句柄。
LUA_NO_PREVIOUS_BID_ENABLED
次要傳回碼;lua_flag1.bid_enable 已設定為重新啟用RUI_BID,但先前RUI_BID無法啟用。 (如需詳細資訊,請參閱。
LUA_RESERVED_FIELD_NOT_ZERO
次要傳回碼;動詞記錄中的保留欄位或這個動詞未使用的參數已設定為非零值。
LUA_VERB_LENGTH_INVALID
次要傳回碼;LUA 動詞是由 LUA 非預期的 lua_verb_length 值所發出。
LUA_STATE_CHECK
主要傳回碼;指令動詞未執行,因為發出狀態無效。
LUA_NO_RUI_SESSION
次要傳回碼; RUI_INIT 尚未順利完成 RUI_READ上指定之 LU 名稱。
LUA_NEGATIVE_RSP
主要傳回碼;表示下列兩個案例的其中一個,可由次要傳回碼區分:
LUA 偵測到從主機接收的數據發生錯誤。 LUA 不會將收到的訊息傳遞至 RUI_READ上的應用程式,而是捨棄訊息(如果訊息位於鏈結中,則會捨棄該訊息的其餘部分),並將負回應傳送給主機。 LUA 會通知應用程式後續 RUI_READ 或 RUI_BID 已傳送負面回應。
LUA 應用程式先前已將負面回應傳送至鏈結中間的訊息。 LUA 已清除此鏈結中的後續訊息,現在會向應用程式報告已接收和清除鏈結中的所有訊息。
LUA_SEC_RC
次要傳回碼;這個參數是非零的次要傳回碼,其中包含在負回應上傳送至主機的感知碼。 這表示 LUA 偵測到主機數據中有錯誤,並傳送負面回應給主機。 如需解譯可能傳回之感知碼值的相關信息,請參閱 使用 LUA 的 SNA 考慮。
零的次要傳回碼表示,在鏈結中間訊息的先前 RUI_WRITE 負面回應之後,LUA 現在已接收並捨棄此鏈結中的所有訊息。
LUA_UNSUCCESSFUL
主要傳回碼;提供的動詞記錄有效,但動詞未順利完成。LUA_DATA_TRUNCATED
次要傳回碼; lua_data_length 參數小於訊息上所接收數據的實際長度。 只有 lua_data_length 個字節的數據傳回動詞;已捨棄剩餘的數據。 如果取得這個次要傳回碼,也會傳回其他參數。
LUA_NO_DATA
次要傳回碼; lua_flag1.nowait 已設定為指出立即傳回而不等候數據,且目前指定的會話流程或流程上沒有可用的數據。
LUA_INVALID_PROCESS
次要傳回碼;發出此動詞的 OS/2 程式與發出此工作階段 RUI_INIT 的程式不同。 只有啟動工作階段的程式可以發出該工作階段的動詞命令。
LUA_COMM_SUBSYSTEM_ABENDED
主要傳回碼;表示下列其中一個條件:此交談所使用的節點遇到 ABEND。
交易程式 (TP) 與實體單位 (PU) 2.1 節點之間的連線已中斷(LAN 錯誤)。
TP 電腦上的 SnaBase 遇到 ABEND。
LUA_SESSION_FAILURE
主要傳回碼;必要的主機整合伺服器元件已終止。LUA_LU_COMPONENT_DISCONNECTED
次要傳回碼;表示 LUA 工作階段因為連結服務或主機 LU 發生問題而失敗。
LUA_RUI_LOGIC_ERROR
次要傳回碼;在 LUA 內偵測到內部錯誤。 在正常作業期間不應該發生此錯誤。
LUA_INVALID_VERB
主要傳回碼;動詞程式代碼或作業程序代碼或兩者都無效。 動詞未執行。LUA_STACK_TOO_SMALL
主要傳回碼;應用程式的堆疊大小太小,無法執行動詞。 增加應用程式的堆疊大小。LUA_COMM_SUBSYSTEM_NOT_LOADED
主要傳回碼;無法載入必要的元件,或處理動詞時已終止。 因此,無法進行通訊。 請連絡系統管理員以採取更正動作。LUA_UNEXPECTED_DOS_ERROR
主要傳回碼;發出作系統呼叫之後,收到非預期的作系統傳回碼,並在次要傳回碼中指定。
備註
RUI_INIT 必須先成功完成 ,才能發出RUI_READ 。
當現有的RUI_READ擱置中時,只有當它指定不同的會話流程或來自擱置RUI_READ動詞的流程時,您才能發出另一個RUI_READ。 同一個會話流程不能有多個 RUI_READ 未完成。
您可以指定要從中讀取數據的特定訊息流程(LU 一般、LU 加速、SSCP 一般或 SSCP 加速),或者您可以指定多個訊息流程。 您可以有多個 RUI_READ 動詞未完成,前提是其中兩個都未指定相同的流程。
應用程式會在四個工作階段流程的其中一個接收數據。 四個會話流程,從最高優先順序到最低優先順序為:
SSCP 加速
LU 加速
SSCP 一般
LU 一般
RUI_READ要處理的數據流類型是在 lua_flag1 參數中指定。 應用程式也可以指定它是否想要查看一種以上的數據流類型。 設定多個流程位時,會先收到最高優先順序。 當RUI_READ完成處理時,lua_flag2會指出 Windows LUA 應用程式已接收數據的特定流程類型。
如果在發出RUI_READ之前順利完成RUI_BID,則可以指示 Windows LUA 介面重複使用最後一個RUI_BID動詞 VCB。 若要這樣做,請發出 lua_flag1.bid_enable 設定RUI_READ。
只有在下列為 true 時,才能使用 lua_flag1.bid_enable 參數:
RUI_BID 已順利發行且已完成。
配置 給RUI_BID 的記憶體尚未釋出或修改。
沒有其他 RUI_BID擱置 中。
使用 lua_flag1.bid_enable 時, RUI_BID記憶體不得 釋放,因為使用最後 一個RUI_BID 動詞 VCB。 此外,使用 lua_flag1.bid_enable 時,將會張貼成功完成 RUI_BID 。
如果沒有數據可供接收時, RUI_READ 會發出 lua_flag1.nowait,LUA_NO_DATA 會是 Windows LUA 介面所設定的次要傳回碼。
如果收到的數據超過 lua_max_length,則會截斷。 只會傳回 lua_max_length 位元組的數據。 也會傳回主要傳回碼LUA_UNSUCCESSFUL和次要傳回碼LUA_DATA_TRUNCATED。 RUI 連結庫會盡可能將數據傳回至應用程式的數據緩衝區,但 RUI 中的剩餘數據會被捨棄,而且無法在後續 RUI_READ 要求上擷取。 這會強制 RUI 應用程式配置足以處理完整 RU 大小的 RUI_READ 數據緩衝區。
在會話建立期間呼叫RUI_INIT時,可以將 lua_resv56[3] 的值設定為動詞控制區塊中的非零值,即可變更此預設行為。 在此情況下,如果收到的數據超過 lua_max_length, 則RUI_READ 要求會傳回LUA_OK的主要傳回碼,以及LUA_DATA_INCOMPLETE的次要傳回碼。 然後,RUI 應用程式可以發出新的 RUI_READ 呼叫,並接收其餘的數據。
這項增強功能尚未作為Microsoft Windows Open Services Architecture (WOSA) LUA API 標準的一部分採用,與 IBM 的 RUI 實作不同。
使用 RUI_READ 讀取訊息之後 , 它會從傳入消息佇列中移除,且無法再次存取。 (RUI_BID 可作為不具破壞性的讀取。應用程式可以使用它來檢查可用的數據類型,但數據會保留在傳入佇列上,而且不需要立即使用。
Pacing 可用於主要對次要的半會話(在主機組態中指定),以保護 LUA 應用程式免於被訊息淹沒。 如果 LUA 應用程式讀取訊息的速度很慢,主機整合伺服器會延遲傳送對主機的步調回應,使其變慢。
另請參閱
RUI_BID
RUI_INIT
RUI_TERM
RUI_WRITE
SLI_OPEN
SLI_PURGE
SLI_RECEIVE
SLI_SEND