1000 !*************************************************
1001 !*
1002 !* FILE       :  DOWNLOAD
1003 !* DESCRIPTION:  Data File Download Library
1004 !* AUTHOR     :
1005 !* CREATED    :  1995/06/15
1006 !* MODIFIED   :
1007 !* PRODUCT    :  HP E5250A
1008 !* REVISION   :  Rev.A.00.01
1009 !*
1010 !*   (c) Copyright 1994, 1995 Hewlett-Packard Co,
1011 !*              All rights reserved.
1012 !*
1013 !*************************************************
1014 !
1015  !==========================================================
1016 Load_vfp_data:SUB Load_vfp_data(Addr_5250,Filename$,Load_data$)
1210  !==========================================================
1220  !           Load Virtual Front Panel Data
1230  !..........................................................
1240  ! PARAMETER : Addr_5250  : HP5250 HP-IB Address
1250  !           : Filename$  : Load File name
1260  !           : Load_data$ : Load data
1270  !----------------------------------------------------------
1280    DIM Card_info$(0:4)[6],Card_conf$(0:4)[6]
1290    DIM Input_label$(1:10)[5],Bias_label$(1:4,1:3)[5]
1300    DIM Setup_mem$(1:24,1:4,1:10)[12]
1310    DIM Rev_id$[7]
1320    INTEGER Config_mode,Bias_stat(0:4),Bias_port(0:4)
1330    INTEGER Setupn,Slotn,Inpn,Outn,Setup_comm_len,Card_info_len
1340  !----------------------------------------------------------
1350    Setup_max_in=10
1360    Setup_max_out=12
1370    Max_setup_num=(SIZE(Setup_mem$,1))
1380    Max_card_num=(SIZE(Setup_mem$,2))
1390    Setup_comm_len=20                        ! Setup Comment Length
1400    Card_info_len=6                          ! Card_info, Card_conf Length
1410  !----------------------------------------------------------
1420    IF LEN(Filename$)=0 THEN Filename_error  !
1430                                             !
1440    CALL Init_check_5250(Addr_5250,Err_stat,Card_info$(*),Card_conf$(*),FNGet_sys_id$)   ! HP5250 Check
1450    IF Err_stat>0 THEN Init_error
1460                                             !
1470  ! DISP "Loading file ...[ ";Filename$;" ]"
1480                                             !
1490    ON ERROR GOTO Load_error
1500    ASSIGN @F TO Filename$
1510    !
1520    ENTER @F;Rev_id$,Setupn,Slotn,Inpn,Outn                    ! Data Format enter
1530    ALLOCATE Setup_mem_tmp$(1:Setupn,1:Slotn,1:Inpn)[Outn]     !
1540    ALLOCATE Setup_comm$(1:Setupn)[Setup_comm_len]             !
1550    ALLOCATE Card_info_tmp$(0:Slotn)[Card_info_len]            !
1560    ALLOCATE Card_conf_tmp$(0:Slotn)[Card_info_len]            !
1570    !
1580    ENTER @F;Card_info_tmp$(*),Config_mode    ! Card information data enter
1590    IF Config_mode=1 THEN                     ! Auto Config Mode set check
1600      IF Card_info_tmp$(0)="" OR Card_info$(0)="" OR Card_info_tmp$(0)<>Card_info$(0) THEN No_set_error
1610    END IF
1620    ENTER @F;Card_conf_tmp$(*),Bias_stat(*),Bias_port(*)       ! Bias state & Bias port data enter
1630    ENTER @F;Input_label$(*),Bias_label$(*),Setup_comm$(*)     ! Label & Comment data enter
1640    ENTER @F;Setup_mem_tmp$(*)                 ! Temporary Setup Memory data enter
1650                                               !
1660  ! DISP "File load completed"
1670                                               !
1680    IF Config_mode=0 THEN                      ! Normal Config Mode
1690      FOR Card_no=1 TO Max_card_num
1700        Sys_card$=Card_info$(Card_no)
1710        Data_card$=Card_info_tmp$(Card_no)
1720        IF FNCard_in_out_que(Sys_card$,Max_in,Max_out)=1 THEN  ! Card type Exist
1730          IF Sys_card$<>Data_card$ THEN        !  Card different
1740            GOSUB Setup_open                   !   Set All open card
1750          ELSE
1760            GOSUB Setup_copy                   !
1770          END IF
1780        ELSE                                   ! Card type not Exist
1790          Max_in=Setup_max_in
1800          Max_out=Setup_max_out
1810          GOSUB Setup_reset                    !  Set null data
1820        END IF
1830      NEXT Card_no
1840    ELSE                                       ! Auto Config mode
1850      Sys_card0$=Card_info$(0)                 !
1860      IF FNCard_in_out_que(Sys_card0$,Def_max_in,Def_max_out)=0 THEN No_set_error  ! Card Exist
1870      Card_no=1
1880      LOOP
1890      EXIT IF Card_no>Max_card_num             !
1900        Sys_card$=Card_info$(Card_no)
1910        Data_card$=Card_info_tmp$(Card_no)
1920        IF FNCard_in_out_que(Sys_card$,M_in,M_out)=1 THEN      ! Card type Exist
1930          IF Sys_card$<>Sys_card0$ THEN        !  Cardn not same Card0
1940            Max_in=Def_max_in
1950            Max_out=Def_max_out
1960            GOSUB Setup_open                   !    Set All open card
1970          ELSE                                 !  Cardn same Card0
1980            IF Sys_card$<>Data_card$ THEN      !   Card different
1990              Max_in=Def_max_in
2000              Max_out=Def_max_out
2010              GOSUB Setup_open                 !    Set All open card
2020            ELSE
2030              Max_in=Def_max_in
2040              Max_out=Def_max_out
2050              GOSUB Setup_copy                 !
2060            END IF
2070          END IF
2080        ELSE
2090          Max_in=Setup_max_in
2100          Max_out=Setup_max_out
2110          GOSUB Setup_reset                     ! Set null data
2120        END IF
2130        Card_no=Card_no+1
2140      END LOOP
2150    END IF
2160                                                ! Data convert
2170    CALL Data_convert(Load_data$,1,Err,"C",Addr_5250,Card_info$(*),Card_conf$(*),Setup_mem$(*),Input_label$(*),Bias_label$(*),Setup_comm$(*),Config_mode,Bias_stat(*),Bias_port(*))
2180  ! DISP "File Data Convert completed"
2190    IF Err=1 THEN Conv_error
2200    OFF ERROR 
2210    ASSIGN @F TO *
2220    SUBEXIT                                     ! SUB END
2230  !----------------------------------------------------------
2240 Setup_open:                                    ! Setup memory set open
2250    Bias_stat(Card_no)=0                        !
2260    FOR Setup_num=1 TO Max_setup_num
2270      FOR I=1 TO Max_in
2280        IF Setup_mem$(Setup_num,Card_no,I)<>"-" THEN 
2290          Setup_mem$(Setup_num,Card_no,I)=RPT$(".",Max_out)
2300        END IF
2310      NEXT I
2320    NEXT Setup_num
2330    RETURN 
2340 Setup_reset:                                   ! Setup memory set space
2350    Bias_stat(Card_no)=0                        !
2360    FOR Setup_num=1 TO Max_setup_num
2370      FOR I=1 TO Max_in
2380        IF Setup_mem$(Setup_num,Card_no,I)<>"-" THEN 
2390          Setup_mem$(Setup_num,Card_no,I)=RPT$(" ",Max_out)
2400        END IF
2410      NEXT I
2420    NEXT Setup_num
2430    RETURN 
2440 Setup_copy:                                     ! Setup memory copy
2450    IF Setup_max_in<=Inpn AND Setup_max_out<=Outn THEN 
2460      FOR Setup_num=1 TO Max_setup_num
2470        FOR I=1 TO Max_in
2480          IF Setup_mem$(Setup_num,Card_no,I)<>"-" THEN 
2490            Setup_mem$(Setup_num,Card_no,I)=Setup_mem_tmp$(Setup_num,Card_no,I)[1;Setup_max_out]
2500          END IF
2510        NEXT I
2520      NEXT Setup_num
2530    ELSE
2540      BEEP 
2550      DISP "ERROR : Load data type is different. Can't used Load data."
2560    ! DISP "Matrix type (";Inpn;"x";Outn;") is not same (";Setup_max_in;"x";Setup_max_out;")"
2570      GOTO Load_vfp_error
2580    END IF
2590    RETURN 
2600    !
2610 No_set_error:                           ! Can't change Auto Config Mode
2620    BEEP 
2630    DISP "ERROR : Cannot configure for AUTO. Normal mode used."
2640    GOTO Load_vfp_error
2650 Filename_error:                         ! File name illegal
2660    BEEP 
2670    DISP "ERROR : File name is wrong"
2680    GOTO Load_vfp_error
2690 Init_error:                             ! HPE5250 Initialize error
2700    BEEP 
2710    DISP "ERROR : HP E5250A Init Check Error "
2720    GOTO Load_vfp_error
2730 Load_error:                             ! File Load error
2740    BEEP 
2750    DISP ERRM$
2760    GOTO Load_vfp_error
2770 Conv_error:                             ! Data convert error
2780    BEEP 
2790    DISP "ERROR : File data is not VFP format, or is broken."
2800    GOTO Load_vfp_error
2810 Load_vfp_error:                         !
2820    OFF ERROR 
2830    ASSIGN @F TO *
2840    PAUSE
2850  SUBEND
2860  !==========================================================
2870 Init_vfp_setup:SUB Init_vfp_setup(Setup_data$)
2880  !==========================================================
2890  !           HPE5250 Initialize Setting routine
2900  !..........................................................
2910  ! PARAMETER : Setup_data$ : Setup data
2920  !----------------------------------------------------------
2930    DIM Card_info$(0:4)[6],Card_conf$(0:4)[6]
2940    DIM Card_info_tmp$(0:4)[6],Card_conf_tmp$(0:4)[6]
2950    DIM Input_label$(1:10)[5],Bias_label$(1:4,1:3)[5]
2960    DIM Setup_mem$(1:24,1:4,1:10)[12],Setup_comm$(1:24)[20]
2970    INTEGER Config_mode,Bias_stat(0:4),Bias_port(0:4)
2980  !----------------------------------------------------------
2990  !
3000  ! DISP "HP E5250A Initial Setup start ..."
3010                                                    ! Setup Data Convert
3020    CALL Get_setup(Setup_data$,1,Err,Addr_5250,Card_info$(*),Card_conf$(*),Setup_mem$(*),Config_mode,Bias_stat(*),Bias_port(*))
3030    IF Err=1 THEN Data_conv_error
3040                                                    !
3050  ! DISP "Data convert completed"
3060    ON ERROR GOTO Assign_error
3070    ASSIGN @Hp5250 TO Addr_5250
3080    OFF ERROR 
3090                                                    !
3100    IF FNReset_5250(@Hp5250,Addr_5250)<>0 THEN Reset_error    ! HPE5250 Reset
3110                                                    ! Config Mode setting
3120  ! DISP "HP E5250A Reset"
3130    IF FNConfig_mode_set(@Hp5250,Config_mode)=0 THEN Conf_set_error
3140                                                    ! Bias state setting
3150  ! DISP "HP E5250A Configuration Mode set"
3160    IF FNB_stat_allset(@Hp5250,Card_info$(*),Bias_stat(*),Config_mode)=0 THEN B_stat_error
3170  ! DISP "HP E5250A Bias State set"
3180    IF FNB_port_allset(@Hp5250,Card_info$(*),Bias_port(*),Config_mode)=0 THEN B_port_error
3190  ! DISP "HP E5250A Bias Port set"
3200                                                    !
3210    Setup_num=1                                     ! Setup number 1
3220                                                    ! HPE5250 setup
3230  ! DISP "HP E5250A Setup start..."
3240    CALL Hp5250_setup(@Hp5250,Card_info$(*),Card_conf$(*),Setup_mem$(*),Setup_num,Config_mode,Bias_stat(*),Bias_port(*))
3250                                                    !
3260    Setup_data$[1;1]="I"                            ! Init_vfp_setup CALL flag set
3270  ! DISP "HP E5250A Setup completed"
3280    OFF ERROR 
3290    ASSIGN @Hp5250 TO *
3300    SUBEXIT                                         ! SUB END
3310  !----------------------------------------------------------
3320 Data_conv_error:                                   !
3330    BEEP 
3340    DISP "ERROR : File data is not VFP format, or is broken."
3350    GOTO Init_vfp_error
3360 Assign_error:                                      !
3370    BEEP 
3380    DISP ERRM$
3390    GOTO Init_vfp_error
3400 Reset_error:                                       !
3410    BEEP 
3420    DISP "ERROR : HP E5250A Reset Error"
3430    GOTO Init_vfp_error
3440 Conf_set_error:                                    !
3450    BEEP 
3460    DISP "ERROR : Configuration Mode set error"
3470    GOTO Init_vfp_error
3480 B_stat_error:                                      !
3490    BEEP 
3500    DISP "ERROR : Bias state set error"
3510    GOTO Init_vfp_error
3520 B_port_error:                                      !
3530    BEEP 
3540    DISP "ERROR : Bias port set error"
3550    GOTO Init_vfp_error
3560 Init_vfp_error:                                    !
3570    OFF ERROR 
3580    ASSIGN @Hp5250 TO *
3590    PAUSE
3600  SUBEND
3610  !==========================================================
3620 Connect_vfp:SUB Connect_vfp(Setup_data$,Setup_num)
3630  !==========================================================
3640  !           HPE5250 Setup Change routine
3650  !..........................................................
3660  ! PARAMETER : Setup_data$ : Setup data
3670  !           : Setup_num   : Setup number
3680  !----------------------------------------------------------
3690    DIM Card_info$(0:4)[6],Card_conf$(0:4)[6]
3700    DIM Card_info_tmp$(0:4)[6],Card_conf_tmp$(0:4)[6]
3710    DIM Input_label$(1:10)[5],Bias_label$(1:4,1:3)[5]
3720    DIM Setup_mem$(1:24,1:4,1:10)[12],Setup_comm$(1:24)[20]
3730    INTEGER Config_mode,Bias_stat(0:4),Bias_port(0:4)
3740  !----------------------------------------------------------
3750  !
3760    IF Setup_data$[1;1]<>"I" THEN No_init_error       ! H/W not Initialize
3770                                                      ! Setup Data Convert
3780                                                      ! Setup Number error
3790    IF Setup_num<1 OR Setup_num>(SIZE(Setup_mem$,1)) THEN Setup_num_error
3800                                                      !
3810  ! DISP "HP E5250A Setup Change start ..."
3820    CALL Get_setup(Setup_data$,Setup_num,Err,Addr_5250,Card_info$(*),Card_conf$(*),Setup_mem$(*),Config_mode,Bias_stat(*),Bias_port(*))
3830    IF Err=1 THEN Data_conv_error
3840                                                      !
3850  ! DISP "Data convert completed"
3860    ON ERROR GOTO Assign_error
3870    ASSIGN @Hp5250 TO Addr_5250
3880    OFF ERROR 
3890                                                      ! HPE5250 setup
3900    CALL Hp5250_setup(@Hp5250,Card_info$(*),Card_conf$(*),Setup_mem$(*),Setup_num,Config_mode,Bias_stat(*),Bias_port(*))
3910                                                      !
3920  ! DISP "HP E5250A Setup Change completed"
3930    OFF ERROR 
3940    ASSIGN @Hp5250 TO *
3950    SUBEXIT                                           ! SUB END
3960  !----------------------------------------------------------
3970 No_init_error:                                       !
3980    BEEP 
3990    DISP "ERROR : Must execute Init_vfp_setup before Connect_vfp."
4000    GOTO Connect_vfp_err
4010 Data_conv_error:                                     !
4020    BEEP 
4030    DISP "ERROR : File data is not VFP format, or is broken."
4040    GOTO Connect_vfp_err
4050 Assign_error:                                        !
4060    BEEP 
4070    DISP ERRM$
4080    GOTO Connect_vfp_err
4090 Setup_num_error:                                     !
4100    BEEP 
4110    DISP "ERROR : Parameter Out of Range."
4120    GOTO Connect_vfp_err
4130 Connect_vfp_err:                                     !
4140    OFF ERROR 
4150    ASSIGN @Hp5250 TO *
4160    PAUSE
4170  SUBEND
4180  !==========================================================
4190 Get_vfp_comment:DEF FNGet_vfp_comment$(Setup_data$,Setup_num)
4200  !==========================================================
4210  !           Get Setup Memory comment routine
4220  !..........................................................
4230  ! PARAMETER : Setup_data$ : Setup data
4240  !           : Setup_num   : Setup number
4250  !           : Err_stat    : Error status
4260  !..........................................................
4270  ! RETURN    : Setup Data Comment
4280  !----------------------------------------------------------
4290    DIM Block_data$[14000],Tstr$[14000],S_comm$(1:24)[20]
4300  !----------------------------------------------------------
4310    Max_setup_num=24
4320    Select_block=10
4330    Sep$=FNSep$(2)                               ! Data separator
4340  !----------------------------------------------------------
4350  !
4360                                                 ! Setup number check
4370    IF Setup_num<1 OR Setup_num>Max_setup_num THEN Setup_num_error
4380                                                 !
4390                                                 ! Setup data block read
4400    CALL Data_block_read(Setup_data$,Err,Select_block,Block_data$)
4410    IF Err=1 THEN Data_error                     !
4420  ! DISP "Comment Data read completed"
4430                                                 !
4440    Tstr$=Block_data$
4450    FOR I=1 TO Max_setup_num
4460      Dsp=POS(Tstr$,Sep$)
4470      IF Dsp=0 THEN 
4480        S_comm$(I)=Tstr$                         ! Setup comment data read
4490      ELSE
4500        S_comm$(I)=Tstr$[1;Dsp-1]
4510        Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
4520      END IF
4530    NEXT I
4540  !
4550    RETURN S_comm$(Setup_num)
4560  !----------------------------------------------------------
4570 Setup_num_error:                                !
4580    BEEP 
4590    DISP "ERROR : Parameter Out of Range."
4600    PAUSE
4610    RETURN S_comm$(Setup_num)
4620 Data_conv_error:                                                   !
4630    BEEP 
4640    DISP "ERROR : File data is not VFP format, or is broken."
4650    PAUSE
4660    RETURN S_comm$(Setup_num)
4670  FNEND
4680  !==========================================================
4690  !==========================================================
4700  !
4710 Data_convert:SUB Data_convert(S_data$,Cvfg,Err,Crfg$,Addr,C_info$(*),C_conf$(*),S_mem$(*),I_label$(*),B_label$(*),S_comm$(*),INTEGER C_mode,B_stat(*),B_port(*))
4720  !==========================================================
4730  !           Data convert  VFP <-> COM data
4740  !..........................................................
4750  ! PARAMETER : S_data$     : Setup data
4760  !           : Cvfg        : 1 -> VFP to COM data
4770  !           : Err         : Error status
4780  !           : Crfg$       : Initialize flag
4790  !           : Addr        : HP-IB Address
4800  !           : C_info$     : Card information data
4810  !           : C_conf$     : Card Configuration data
4820  !           : S_mem$      : Setup memory
4830  !           : I_label$    : Input Label data
4840  !           : B_label$    : Bias Label data
4850  !           : S_comm$     : Setup comment data
4860  !           : C_mode      : Config Mode data
4870  !           : B_stat      : Bias state data
4880  !           : B_port      : Bias port data
4890  !----------------------------------------------------------
4900    DIM Tstr$[14000],Tmp_data$[14000]
4910  !----------------------------------------------------------
4920    Max_slot_num=(SIZE(C_info$,1)-1)
4930    Max_input_label=(SIZE(I_label$,1))
4940    Max_bias_num=(SIZE(B_label$,2))
4950    Max_setup_num=(SIZE(S_mem$,1))
4960    Max_input=(SIZE(S_mem$,3))
4970    Sep1$=FNSep$(1)                    ! Data Block separator
4980    Sep2$=FNSep$(2)                    ! Data separator
4990    Err=0
5000  !----------------------------------------------------------
5010    IF Cvfg=1 THEN 
5020  !
5030  !   DISP "Convert VFP data -> Common data start ..."
5040  !
5050  !   DISP "VFP->COM : Data Create flag set"
5060      S_data$=Crfg$&Sep1$
5070  !
5080  !   DISP "VFP->COM : HP-IB address set"
5090      S_data$=S_data$&VAL$(Addr)&Sep1$
5100  !   DISP "VFP->COM : Card information data set"
5110      FOR I=0 TO Max_slot_num
5120        OUTPUT Tstr$ USING "#,6A,A";C_info$(I),Sep2$
5130        S_data$=S_data$&Tstr$
5140      NEXT I
5150      S_data$[(LEN(S_data$));1]=Sep1$
5160  !
5170  !   DISP "VFP->COM : Configuration mode data set"
5180      S_data$=S_data$&VAL$(C_mode)&Sep1$
5190  !
5200  !   DISP "VFP->COM : Card configuration data set"
5210      FOR I=0 TO Max_slot_num
5220        OUTPUT Tstr$ USING "#,6A,A";C_conf$(I),Sep2$
5230        S_data$=S_data$&Tstr$
5240      NEXT I
5250      S_data$[(LEN(S_data$));1]=Sep1$
5260  !
5270  !   DISP "VFP->COM : Bias state data set"
5280      FOR I=0 TO Max_slot_num
5290        OUTPUT Tstr$ USING "#,2D,A";B_stat(I),Sep2$
5300        S_data$=S_data$&Tstr$
5310      NEXT I
5320      S_data$[(LEN(S_data$));1]=Sep1$
5330  !
5340  !   DISP "VFP->COM : Bias port data set"
5350      FOR I=0 TO Max_slot_num
5360        OUTPUT Tstr$ USING "#,2D,A";B_port(I),Sep2$
5370        S_data$=S_data$&Tstr$
5380      NEXT I
5390      S_data$[(LEN(S_data$));1]=Sep1$
5400  !
5410  !   DISP "VFP->COM : Input label data set"
5420      FOR I=1 TO Max_input_label
5430        OUTPUT Tstr$ USING "#,5A,A";I_label$(I),Sep2$
5440        S_data$=S_data$&Tstr$
5450      NEXT I
5460      S_data$[(LEN(S_data$));1]=Sep1$
5470  !
5480  !   DISP "VFP->COM : Bias label data set"
5490      FOR I=1 TO Max_slot_num
5500        FOR J=1 TO Max_bias_num
5510          OUTPUT Tstr$ USING "#,5A,A";B_label$(I,J),Sep2$
5520          S_data$=S_data$&Tstr$
5530        NEXT J
5540      NEXT I
5550      S_data$[(LEN(S_data$));1]=Sep1$
5560  !
5570  !   DISP "VFP->COM : Setup comment data set"
5580      FOR I=1 TO Max_setup_num
5590        OUTPUT Tstr$ USING "#,20A,A";S_comm$(I),Sep2$
5600        S_data$=S_data$&Tstr$
5610      NEXT I
5620      S_data$[(LEN(S_data$));1]=Sep1$
5630  !
5640  !   DISP "VFP->COM : Setup memory data set"
5650      FOR I=1 TO Max_setup_num
5660        FOR J=1 TO Max_slot_num
5670          FOR K=1 TO Max_input
5680  !         DISP "VFP->COM : Setup memory data set : setup ";I;" card ";J;" in ";K
5690            OUTPUT Tstr$ USING "#,12A,A";S_mem$(I,J,K),Sep2$
5700            S_data$=S_data$&Tstr$
5710          NEXT K
5720        NEXT J
5730      NEXT I
5740      S_data$[(LEN(S_data$));1]=Sep1$
5750  !
5760  !   DISP "Convert VFP data -> Common data completed"
5770    ELSE  !----------------
5780      IF LEN(S_data$)=0 THEN Data_error
5790      Tmp_data$=S_data$
5800  !   DISP "Convert Common data -> VFP data start ..."
5810  !
5820  !   DISP "COM->VFP : Data Create flag read"
5830      Bsp=POS(Tmp_data$,Sep1$)
5840      Crfg$=TRIM$(Tmp_data$[1;Bsp-1])
5850      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
5860  !
5870  !   DISP "COM->VFP : HP-IB address data read"
5880      Bsp=POS(Tmp_data$,Sep1$)
5890      IF Bsp=0 THEN Data_error
5900      Addr=VAL(Tmp_data$[1;Bsp-1])
5910      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
5920  !
5930  !   DISP "COM->VFP : Card information data read"
5940      Bsp=POS(Tmp_data$,Sep1$)
5950      IF Bsp=0 THEN Data_error
5960      Tstr$=Tmp_data$[1;Bsp-1]
5970      FOR I=0 TO Max_slot_num
5980        Dsp=POS(Tstr$,Sep2$)
5990        IF Dsp=0 THEN 
6000          C_info$(I)=TRIM$(Tstr$)
6010        ELSE
6020          C_info$(I)=TRIM$(Tstr$[1;Dsp-1])
6030          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
6040        END IF
6050      NEXT I
6060      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
6070  !
6080  !   DISP "COM->VFP : Configuration mode data read"
6090      Bsp=POS(Tmp_data$,Sep1$)
6100      C_mode=VAL(Tmp_data$[1;Bsp-1])
6110      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
6120  !
6130  !   DISP "COM->VFP : Card configuration data read"
6140      Bsp=POS(Tmp_data$,Sep1$)
6150      IF Bsp=0 THEN Data_error
6160      Tstr$=Tmp_data$[1;Bsp-1]
6170      FOR I=0 TO Max_slot_num
6180        Dsp=POS(Tstr$,Sep2$)
6190        IF Dsp=0 THEN 
6200          C_conf$(I)=TRIM$(Tstr$)
6210        ELSE
6220          C_conf$(I)=TRIM$(Tstr$[1;Dsp-1])
6230          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
6240        END IF
6250      NEXT I
6260      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
6270  !
6280  !   DISP "COM->VFP : Bias state data read"
6290      Bsp=POS(Tmp_data$,Sep1$)
6300      IF Bsp=0 THEN Data_error
6310      Tstr$=Tmp_data$[1;Bsp-1]
6320      FOR I=0 TO Max_slot_num
6330        Dsp=POS(Tstr$,Sep2$)
6340        IF Dsp=0 THEN 
6350          B_stat(I)=VAL(Tstr$)
6360        ELSE
6370          B_stat(I)=VAL(Tstr$[1;Dsp-1])
6380          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
6390        END IF
6400      NEXT I
6410      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
6420  !
6430  !   DISP "COM->VFP : Bias port data read"
6440      Bsp=POS(Tmp_data$,Sep1$)
6450      IF Bsp=0 THEN Data_error
6460      Tstr$=Tmp_data$[1;Bsp-1]
6470      FOR I=0 TO Max_slot_num
6480        Dsp=POS(Tstr$,Sep2$)
6490        IF Dsp=0 THEN 
6500          B_port(I)=VAL(Tstr$)
6510        ELSE
6520          B_port(I)=VAL(Tstr$[1;Dsp-1])
6530          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
6540        END IF
6550      NEXT I
6560      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
6570  !
6580  !   DISP "COM->VFP : Input label data read"
6590      Bsp=POS(Tmp_data$,Sep1$)
6600      IF Bsp=0 THEN Data_error
6610      Tstr$=Tmp_data$[1;Bsp-1]
6620      FOR I=1 TO Max_input_label
6630        Dsp=POS(Tstr$,Sep2$)
6640        IF Dsp=0 THEN 
6650          I_label$(I)=TRIM$(Tstr$)
6660        ELSE
6670          I_label$(I)=TRIM$(Tstr$[1;Dsp-1])
6680          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
6690        END IF
6700      NEXT I
6710      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
6720  !
6730  !   DISP "COM->VFP : Bias label data read"
6740      Bsp=POS(Tmp_data$,Sep1$)
6750      IF Bsp=0 THEN Data_error
6760      Tstr$=Tmp_data$[1;Bsp-1]
6770      FOR I=1 TO Max_slot_num
6780        FOR J=1 TO Max_bias_num
6790          Dsp=POS(Tstr$,Sep2$)
6800          IF Dsp=0 THEN 
6810            B_label$(I,J)=TRIM$(Tstr$)
6820          ELSE
6830            B_label$(I,J)=TRIM$(Tstr$[1;Dsp-1])
6840            Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
6850          END IF
6860        NEXT J
6870      NEXT I
6880      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
6890  !
6900  !   DISP "COM->VFP : Setup comment data read"
6910      Bsp=POS(Tmp_data$,Sep1$)
6920      IF Bsp=0 THEN Data_error
6930      Tstr$=Tmp_data$[1;Bsp-1]
6940      FOR I=1 TO Max_setup_num
6950        Dsp=POS(Tstr$,Sep2$)
6960        IF Dsp=0 THEN 
6970          S_comm$(I)=TRIM$(Tstr$)
6980        ELSE
6990          S_comm$(I)=TRIM$(Tstr$[1;Dsp-1])
7000          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
7010        END IF
7020      NEXT I
7030      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
7040  !
7050  !   DISP "COM->VFP : Setup memory data read"
7060      Bsp=POS(Tmp_data$,Sep1$)
7070      IF Bsp=0 THEN Data_error
7080      Tstr$=Tmp_data$[1;Bsp-1]
7090      FOR I=1 TO Max_setup_num
7100        FOR J=1 TO Max_slot_num
7110          FOR K=1 TO Max_input
7120            Dsp=POS(Tstr$,Sep2$)
7130  !         DISP "COM->VFP : Setup memory data read : setup ";I;" card ";J;" in ";K
7140            IF Dsp=0 THEN 
7150              S_mem$(I,J,K)=TRIM$(Tstr$)
7160            ELSE
7170              S_mem$(I,J,K)=TRIM$(Tstr$[1;Dsp-1])
7180              Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
7190            END IF
7200          NEXT K
7210        NEXT J
7220      NEXT I
7230  !
7240  !   DISP "Convert Common data -> VFP data completed"
7250    END IF
7260    GOTO End_sub
7270 Data_error:                                             !
7280    Err=1
7290 End_sub:                                                !
7300  SUBEND
7310  !==========================================================
7320 Block_data_conv:DEF FNBlock_data_conv(B_data$)
7330  !==========================================================
7340  !           Block Format data convert
7350  !..........................................................
7360  ! Parameter : B_data$ : Block data : (ex.) #16123456
7370  !..........................................................
7380  ! Return : Number of data byte
7390  !----------------------------------------------------------
7400    IF B_data$[1;1]="#" THEN 
7410      Clen=VAL(B_data$[2;1])
7420      IF Clen>0 THEN 
7430        Blen=VAL(B_data$[3;Clen])
7440        B_data$=B_data$[2+Clen+1;(LEN(B_data$)-(2+Clen))]
7450      ELSE
7460        Blen=0
7470      END IF
7480    ELSE
7490      Blen=0
7500    END IF
7510    RETURN Blen
7520  FNEND
7530  !==========================================================
7540 Card_in_out_que:DEF FNCard_in_out_que(Card$,Max_in,Max_out)
7550  !==========================================================
7560  !           Card IN/OUT information query
7570  !..........................................................
7580  ! Parameter : Card$     : Card type name
7590  !           : Max_in    : Number of INPUT
7600  !           : Max_out   : Number of OUTPUT
7610  !..........................................................
7620  ! Return : Card type existance 1 -> Card type exist, 0 -> Not exist
7630  !----------------------------------------------------------
7640  !
7650    SELECT Card$
7660    CASE FNGet_card_type$(1)           ! Card type E5252
7670      Max_in=10
7680      Max_out=12
7690      Card_exist=1
7700    CASE FNGet_card_type$(2)           ! Card type E5255
7710      Max_in=6
7720      Max_out=8
7730      Card_exist=1
7740    CASE ELSE                          ! No Card or Not support
7750      Max_in=0
7760      Max_out=0
7770      Card_exist=0
7780    END SELECT
7790                                       !
7800    RETURN Card_exist
7810  FNEND
7820  !==========================================================
7830 Data_block_read:SUB Data_block_read(S_data$,Err,Block,Block_data$)
7840  !==========================================================
7850  !           Data convert  VFP <-> COM data
7860  !..........................................................
7870  ! PARAMETER : S_data$     : Setup data
7880  !           : Err         : Error status
7890  !           : Block       : Read Block number
7900  !           : Block_data$ : Read Block data
7910  !----------------------------------------------------------
7920    DIM Tmp_data$[14000]
7930  !----------------------------------------------------------
7940    Sep1$=FNSep$(1)                    ! Data Block separator
7950    Sep2$=FNSep$(2)                    ! Data separator
7960    Err=0
7970  !----------------------------------------------------------
7980  !
7990    Tmp_data$=S_data$
8000                                           !
8010    Bcnt=1
8020    LOOP
8030      Exit_fg=0
8040      Bsp=POS(Tmp_data$,Sep1$)
8050      IF Bsp=0 THEN 
8060        Block_data$=Tmp_data$
8070      ELSE
8080        Block_data$=Tmp_data$[1;Bsp-1]     ! Block Data read
8090      END IF
8100      IF Bcnt>=Block THEN Exit_fg=1
8110    EXIT IF Exit_fg=1
8120      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
8130      Bcnt=Bcnt+1
8140    END LOOP
8150      !
8160    GOTO End_sub
8170 Data_error:                                !
8180    Err=1
8190 End_sub:                                   !
8200  !
8210  SUBEND
8220  !==========================================================
8230 Init_check_5250:SUB Init_check_5250(Addr_5250,Err_stat,Card_info$(*),Card_conf$(*),Sys_id$)
8240  !==========================================================
8250  !           HPE5250 Check & Initiarize
8260  !..........................................................
8270  ! PARAMETER : Addr_5250  : HP5250 HP-IB Address
8280  !           : Err_stat   : Error status return
8290  !           : Card_info$ : Card information data
8300  !           : Card_conf$ : Card configuration data
8310  !           : Sys_id$    : HPE5250 ID keyword
8320  !----------------------------------------------------------
8330    Err_stat=0
8340  !----------------------------------------------------------
8350  !
8360    ON ERROR GOTO Assign_error
8370    ASSIGN @Hp5250 TO Addr_5250                    ! HPE5250 I/O path assign
8380                                                   !
8390    IF FNReset_5250(@Hp5250,Addr_5250)<>0 THEN Reset_error                                ! HPE5250 Reset
8400    IF FNCheck_5250id(@Hp5250,Sys_id$,Addr_5250)<>0 THEN Id_check_error                   ! HPE5250 ID Check
8410    IF FNCard_info(@Hp5250,Card_info$(*),Card_conf$(*),Addr_5250)<>0 THEN Card_info_error ! Card Information Read
8420    GOTO End_sub
8430  !----------------------------------------------------------
8440 Assign_error:                                     !
8450    DISP ERRM$                                     !
8460    WAIT 1
8470    Err_stat=1
8480    GOTO End_sub
8490 Reset_error:                                      !
8500    Err_stat=2                                     !
8510    GOTO End_sub
8520 Id_check_error:                                   !
8530    Err_stat=3
8540    GOTO End_sub
8550 Card_info_error:                                  !
8560    Err_stat=4
8570    GOTO End_sub
8580 End_sub:                                          !
8590    ASSIGN @Hp5250 TO *                            !
8600    OFF ERROR 
8610  SUBEND
8620  !==========================================================
8630 Reset_5250:DEF FNReset_5250(@Hp5250,Addr_5250)
8640  !==========================================================
8650  !           HPE5250 Reset
8660  !..........................................................
8670  ! PARAMETER : @Hp5250   : HP5250 I/O Path name
8680  !           : Addr_5250 : HPE5250 HP-IB Address
8690  !..........................................................
8700  ! RETURN    : Error Status
8710  !----------------------------------------------------------
8720    Err_stat=0
8730    Ctime=5                                        ! TIMEOUT Check time
8740  !----------------------------------------------------------
8750  !
8760    Hpib_sc=Addr_5250 DIV 100                      ! Get HP-IB Address
8770    ON ERROR GOTO Io_error                         !
8780    ON TIMEOUT Hpib_sc,Ctime GOTO Time_out
8790    CLEAR @Hp5250                                  ! I/O Device Clear
8800    OFF ERROR 
8810    OUTPUT @Hp5250;"*RST"                          ! HPE5250 Reset
8820    OUTPUT @Hp5250;"*CLS"                          ! HPE5250 Clear Status
8830    OFF TIMEOUT 
8840    RETURN Err_stat
8850  !----------------------------------------------------------
8860 Io_error:                                         !
8870    BEEP 
8880    DISP ERRM$
8890    Err_stat=2
8900    OFF ERROR 
8910    GOTO End_sub
8920 Time_out:                                         !
8930    BEEP 
8940    DISP "ERROR : HP-IB address,connection or firmware is bad."
8950    Err_stat=3
8960 End_sub:                                          !
8970    OFF TIMEOUT 
8980    PAUSE
8990    RETURN Err_stat
9000  FNEND
9010  !==========================================================
9020 Check_5250id:DEF FNCheck_5250id(@Hp5250,Sys_id$,Addr_5250)
9030  !==========================================================
9040  !           HP5250 ID Check
9050  !..........................................................
9060  ! PARAMETER : @Hp5250   : HP5250 I/O Path name
9070  !           : Sys_id$   : HPE5250 System ID keyword
9080  !           : Addr_5250 : HPE5250 HP-IB Address
9090  !..........................................................
9100  ! Return : Error status
9110  !----------------------------------------------------------
9120    DIM Idstr$[50]
9130  !----------------------------------------------------------
9140    Err_stat=0
9150    Ctime=5                                        ! TIMEOUT Check time
9160  !----------------------------------------------------------
9170    Hpib_sc=Addr_5250 DIV 100                      ! Get HP-IB select code
9180    ON ERROR GOTO Io_error
9190    ON TIMEOUT Hpib_sc,Ctime GOTO Time_out
9200    OUTPUT @Hp5250;"*IDN?"                         ! HP5250 ID Query
9210    ENTER @Hp5250;Idstr$                           ! HP5250 ID Read
9220    IF POS(Idstr$,Sys_id$)=0 THEN Inst_diff_err    ! Insturment ID Check
9230    OFF ERROR 
9240    OFF TIMEOUT 
9250    RETURN Err_stat
9260  !----------------------------------------------------------
9270 Io_error:                                         !
9280    BEEP 
9290    DISP ERRM$
9300    Err_stat=1
9310    OFF ERROR 
9320    GOTO End_sub
9330 Inst_diff_err:                                    !
9340    BEEP 
9350    DISP "ERROR : Instrument at address ";Hpib_addr;" is not HP E5250A !"
9360    Err_stat=2
9370    GOTO End_sub
9380 Time_out:                                         !
9390    BEEP 
9400    DISP "ERROR : HP-IB address,connection or firmware is bad."
9410    Err_stat=3
9420 End_sub:                                          !
9430    OFF ERROR 
9440    OFF TIMEOUT 
9450    PAUSE
9460    RETURN Err_stat
9470  FNEND
9480  !==========================================================
9490 Card_info:DEF FNCard_info(@Hp5250,Card_info$(*),Card_conf$(*),Addr_5250)
9500  !==========================================================
9510  !           HPE5250 CARD Information Read
9520  !..........................................................
9530  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
9540  !           : Card_info$ : Card information data
9550  !           : Card_conf$ : Card configuration data
9560  !           : ADDR_5250  : FPE5250 HP-IB Addreaa
9570  !..........................................................
9580  ! RETURN : Error status
9590  !----------------------------------------------------------
9600    DIM C_type$[50],Corp_id$[30],C_model$[10],C_sn$[10],C_rev$[10],C_tmp$[10]
9610  !----------------------------------------------------------
9620    Err_stat=0
9630    Ctime=3                                           ! TIMEOUT Check time
9640    Max_slot_no=(SIZE(Card_info$,1)-1)                ! Max Slot Number
9650  !----------------------------------------------------------
9660  !
9670    Hpib_sc=Addr_5250 DIV 100                         ! Get HP-IB select code
9680    ON ERROR GOTO Io_error
9690    ON TIMEOUT Hpib_sc,Ctime GOTO Time_out
9700    FOR Slot_no=1 TO Max_slot_no
9710      OUTPUT @Hp5250;":SYST:CTYP? "&VAL$(Slot_no)     ! HPE5250 Card Type Query
9720      ENTER @Hp5250;C_type$                           ! HPE5250 Card Type Read
9730                                                      !
9740      Corp_id$=C_type$[1;(POS(C_type$,",")-1)]        ! Corp. ID
9750      C_type$=C_type$[(POS(C_type$,",")+1);(LEN(C_type$)-POS(C_type$,","))]
9760      C_model$=C_type$[1;(POS(C_type$,",")-1)]        ! Card Model name
9770      C_type$=C_type$[(POS(C_type$,",")+1);(LEN(C_type$)-POS(C_type$,","))]
9780      C_sn$=C_type$[1;(POS(C_type$,",")-1)]           ! Card Serial number
9790      C_rev$=C_type$[(POS(C_type$,",")+1);(LEN(C_type$)-POS(C_type$,","))] ! Card Revision
9800      I=1
9810      LOOP
9820        Exit_fg=0
9830      EXIT IF I>FNMax_card_type
9840        IF POS(C_model$,FNGet_card_type$(I)) THEN           ! Card type check
9850          Exit_fg=1
9860        END IF
9870      EXIT IF Exit_fg=1
9880        I=I+1
9890      END LOOP
9900      IF Exit_fg=1 THEN 
9910        Card_info$(Slot_no)=FNGet_card_type$(I)              ! Card Type set
9920      ELSE
9930        Card_info$(Slot_no)=FNGet_card_type$(0)              ! No Card set
9940      END IF
9950                                                       !
9960      SELECT Card_info$(Slot_no)                       ! Card type check
9970      CASE FNGet_card_type$(2)                               ! Card type E5255
9980        OUTPUT @Hp5250;":SYST:CCON? "&VAL$(Slot_no)    ! HPE5255 Card Configuration Data Query
9990        ENTER @Hp5250;C_tmp$                           ! HPE5255 Card Configuration Data Read
10000       Tmp_str$=""
10010       Blen=FNBlock_data_conv(C_tmp$)
10020       FOR I=1 TO Blen
10030         Tmp_str$=Tmp_str$&(VAL$(NUM(C_tmp$[I;1])))
10040       NEXT I
10050       Card_conf$(Slot_no)=Tmp_str$                   !
10060     CASE ELSE
10070       Card_conf$(Slot_no)=""                         !
10080     END SELECT
10090     IF Slot_no=1 THEN                                ! Set data of Card#0
10100       Card_info$(0)=Card_info$(Slot_no)
10110       Card_conf$(0)=Card_conf$(Slot_no)
10120     END IF
10130   NEXT Slot_no
10140   OFF TIMEOUT 
10150   RETURN Err_stat
10160 !----------------------------------------------------------
10170 Io_error:                                        !
10180   BEEP 
10190   DISP ERRM$
10200   Err_stat=1
10210   OFF ERROR 
10220   GOTO End_sub
10230 Time_out:                                            !
10240   BEEP 
10250   DISP "ERROR : HP-IB address,connection or firmware is bad."
10260   Err_stat=2
10270 End_sub:                                             !
10280   OFF TIMEOUT 
10290   PAUSE
10300   RETURN Err_stat
10310 FNEND
10320 !==========================================================
10330 Config_mode_set:DEF FNConfig_mode_set(@Hp5250,INTEGER Config_mode)
10340 !==========================================================
10350 !           Configuration Mode Setting routine
10360 !..........................................................
10370 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
10380 !           : Config_mode : Configuration Mode
10390 !..........................................................
10400 ! RETURN : Error status
10410 !----------------------------------------------------------
10420 !
10430   IF Config_mode=0 THEN 
10440     OUTPUT @Hp5250;":ROUT:FUNC NCON"        ! Normal Configuration Mode Set
10450   ELSE
10460     OUTPUT @Hp5250;":ROUT:FUNC ACON"        ! Auto Configuration Mode Set
10470   END IF
10480   OUTPUT @Hp5250;"*OPC?"
10490   ENTER @Hp5250;Cp
10500   RETURN Cp
10510 FNEND
10520 !==========================================================
10530 B_stat_allset:DEF FNB_stat_allset(@Hp5250,Card_info$(*),INTEGER Bias_stat(*),Config_mode)
10540 !==========================================================
10550 !           All card Bias State Setting routine
10560 !..........................................................
10570 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
10580 !           : Card_info$ : Card information data
10590 !           : Bias_stat  : Bias state data
10600 !           : Config_mode : Configuration Mode
10610 !..........................................................
10620 ! RETURN : Error status
10630 !----------------------------------------------------------
10640   INTEGER Stat
10650 !----------------------------------------------------------
10660   Max_slot=(SIZE(Card_info$,1)-1)
10670   Err=0
10680 !----------------------------------------------------------
10690 !
10700   OUTPUT @Hp5250;":ROUT:BIAS:STAT ALL,OFF"                           ! Bias State All off
10710   IF Config_mode=0 THEN 
10720     FOR Slot=1 TO Max_slot
10730       IF FNCard_in_out_que(Card_info$(Slot),Max_in,Max_out)=1 THEN   ! Card Exist
10740         Stat=Bias_stat(Slot)
10750         Ret=FNBias_stat_set(@Hp5250,Slot,Stat)
10760         Err=Err+Ret
10770       END IF
10780     NEXT Slot
10790   ELSE
10800     IF FNCard_in_out_que(Card_info$(0),Max_in,Max_out)=1 THEN        ! Card Exist
10810       Stat=Bias_stat(0)
10820       Err=FNBias_stat_set(@Hp5250,0,Stat)
10830     END IF
10840   END IF
10850   RETURN Err
10860 FNEND
10870 !==========================================================
10880 Bias_stat_set:DEF FNBias_stat_set(@Hp5250,Card_num,INTEGER Onoff)
10890 !==========================================================
10900 !           Bias State Setting routine
10910 !..........................................................
10920 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
10930 !           : Card_num   : Card number
10940 !           : Onoff      : Set data
10950 !..........................................................
10960 ! RETURN : Error status
10970 !----------------------------------------------------------
10980   Cp=0
10990   OUTPUT @Hp5250;":ROUT:BIAS:STAT "&VAL$(Card_num)&","&VAL$(Onoff)    ! Bias State set
11000   OUTPUT @Hp5250;"*OPC?"
11010   ENTER @Hp5250;Cp
11020   RETURN Cp
11030 FNEND
11040 !==========================================================
11050 B_port_allset:DEF FNB_port_allset(@Hp5250,Card_info$(*),INTEGER Bias_port(*),Config_mode)
11060 !==========================================================
11070 !           All card Bias port setting routine
11080 !..........................................................
11090 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
11100 !           : Card_info$ : Card information data
11110 !           : Bias_port  : Bias port data
11120 !           : Config_mode : Configuration Mode
11130 !..........................................................
11140 ! RETURN : Error status
11150 !----------------------------------------------------------
11160   INTEGER Port_num
11170 !----------------------------------------------------------
11180   Max_slot=(SIZE(Card_info$,1)-1)
11190   Err=0
11200 !----------------------------------------------------------
11210 !
11220   IF Config_mode=0 THEN                   ! Normal Config Mode
11230     FOR Slot=1 TO Max_slot
11240       IF FNCard_in_out_que(Card_info$(Slot),Max_in,Max_out)=1 THEN   ! Card Exist
11250         IF Card_info$(Slot)=FNGet_card_type$(1) THEN 
11260           Port_num=Bias_port(Slot)
11270           Ret=FNBias_port_set(@Hp5250,Slot,Port_num)
11280           Err=Err+Ret
11290         ELSE
11300           Err=Err+1
11310         END IF
11320       END IF
11330     NEXT Slot
11340   ELSE                                    ! Auto Config Mode
11350     IF FNCard_in_out_que(Card_info$(0),Max_in,Max_out)=1 THEN        ! Card Exist
11360       IF Card_info$(0)=FNGet_card_type$(1) THEN 
11370         Port_num=Bias_port(0)
11380         Err=FNBias_port_set(@Hp5250,0,Port_num)
11390       ELSE
11400         Err=1
11410       END IF
11420     END IF
11430   END IF
11440   RETURN Err
11450 FNEND
11460 !==========================================================
11470 Bias_port_set:DEF FNBias_port_set(@Hp5250,Card_num,INTEGER Port_num)
11480 !==========================================================
11490 !           Bisa State Setting Check
11500 !..........................................................
11510 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
11520 !           : Card_num : Card number
11530 !           : Port_num : Bias port number
11540 !..........................................................
11550 ! RETURN : Error status
11560 !----------------------------------------------------------
11570 !
11580   OUTPUT @Hp5250;":ROUT:BIAS:PORT "&VAL$(Card_num)&","&VAL$(Port_num)    ! Bias State set
11590   OUTPUT @Hp5250;"*OPC?"
11600   ENTER @Hp5250;Cp
11610   RETURN Cp
11620 FNEND
11630 !==========================================================
11640 All_open_set:DEF FNAll_open_set(@Hp5250,Card_info$(*),INTEGER Config_mode)
11650 !==========================================================
11660 !           All Card Open
11670 !..........................................................
11680 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
11690 !           : Card_info$ : Card information data
11700 !           : Config_mode : Configuration Mode
11710 !..........................................................
11720 ! RETURN : All closed status : O -> All Open succeed
11730 !----------------------------------------------------------
11740 !
11750   OUTPUT @Hp5250;":ROUT:OPEN:CARD ALL"
11760   OUTPUT @Hp5250;"*OPC?"
11770   ENTER @Hp5250;Cp
11780 !
11790   RETURN FNAll_close_check(@Hp5250,Card_info$(*),Config_mode)  ! Switch close check
11800 FNEND
11810 !==========================================================
11820 Card_open_set:DEF FNCard_open_set(@Hp5250,Card_no)
11830 !==========================================================
11840 !           Card open set
11850 !..........................................................
11860 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
11870 !           : Card_no    : Card number
11880 !..........................................................
11890 ! RETURN : Open status : O -> Open succeed
11900 !----------------------------------------------------------
11910 !
11920   OUTPUT @Hp5250;":ROUT:OPEN:CARD "&VAL$(Card_no)
11930   OUTPUT @Hp5250;"*OPC?"
11940   ENTER @Hp5250;Cp
11950   RETURN FNClose_check(@Hp5250,Card_no)
11960 FNEND
11970 !==========================================================
11980 Conf_mode_check:DEF FNConf_mode_check$(@Hp5250)
11990 !==========================================================
12000 !           Configuration Mode Check
12010 !..........................................................
12020 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
12030 !..........................................................
12040 ! RETURN : Configuration Mode ID strings : "NCON" -> Normal config mode
12050 !----------------------------------------------------------
12060 !
12070   OUTPUT @Hp5250;":ROUT:FUNC?"
12080   ENTER @Hp5250;Conf_mode$
12090 !
12100   RETURN Conf_mode$
12110 !
12120 FNEND
12130 !==========================================================
12140 Bias_state_read:DEF FNBias_stat_read(@Hp5250,Card_num)
12150 !==========================================================
12160 !           Bisa State Setting Check
12170 !..........................................................
12180 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
12190 !           : Card_num   : Card number
12200 !..........................................................
12210 ! RETURN : Bias State data : 1 -> Bias State ON
12220 !----------------------------------------------------------
12230 !
12240   OUTPUT @Hp5250;":ROUT:BIAS:STATE? "&VAL$(Card_num)
12250   ENTER @Hp5250;Bstat
12260 !
12270   RETURN Bstat
12280 FNEND
12290 !==========================================================
12300 !
12310 Close_check:DEF FNClose_check(@Hp5250,Card_num)
12320 !==========================================================
12330 !           Card switch closed check
12340 !..........................................................
12350 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
12360 !           : Card_num   : Card number
12370 !..........................................................
12380 ! RETURN : Number of Closed switch : 0 -> All Open
12390 !----------------------------------------------------------
12400   DIM Chan_list$[1800]
12410 !----------------------------------------------------------
12420   Sep$=","
12430 !----------------------------------------------------------
12440 !
12450   OUTPUT @Hp5250;":ROUT:CLOS:CARD? "&VAL$(Card_num)
12460   ENTER @Hp5250;Chan_list$
12470                                                           !
12480   IF LEN(Chan_list$)>0 THEN                               ! Chanel list check
12490     Chan_list$=Chan_list$[2;(LEN(Chan_list$))-1]&Sep$
12500     Close_cnt=1
12510     LOOP
12520       Spos=POS(Chan_list$,Sep$)
12530     EXIT IF Spos=0
12540       Chan_list$=Chan_list$[Spos+1;(LEN(Chan_list$))-Spos]
12550       IF LEN(Chan_list$)>0 THEN 
12560         Close_cnt=Close_cnt+1
12570       END IF
12580     END LOOP
12590   ELSE
12600     Close_cnt=0
12610   END IF
12620                                                            !
12630   RETURN Close_cnt
12640 FNEND
12650 !==========================================================
12660 All_close_check:DEF FNAll_close_check(@Hp5250,Card_info$(*),INTEGER Config_mode)
12670 !==========================================================
12680 !           All Switch Open check
12690 !..........................................................
12700 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
12710 !           : Card_info$ : Card information data
12720 !           : Config_mode : Configuration Mode
12730 !..........................................................
12740 ! RETURN : Number of Closed switch : 0 -> All Open
12750 !----------------------------------------------------------
12760   Max_card_no=(SIZE(Card_info$,1)-1)
12770 !----------------------------------------------------------
12780   Close_num=0
12790   IF Config_mode=0 THEN 
12800     Card_no=1
12810     LOOP
12820       SELECT Card_info$(Card_no)
12830       CASE FNGet_card_type$(1),FNGet_card_type$(2)  ! Card type E5252,E5255
12840         Close_num=FNClose_check(@Hp5250,Card_no)    ! Card close check
12850       CASE ELSE
12860       END SELECT
12870     EXIT IF Close_num>0
12880       Card_no=Card_no+1
12890     EXIT IF Card_no>Max_card_no
12900     END LOOP
12910   ELSE
12920     Card_no=0
12930     Close_num=FNClose_check(@Hp5250,Card_no)         ! Card close check
12940   END IF
12950   RETURN Close_num
12960 FNEND
12970 !==========================================================
12980 Bias_port_read:DEF FNBias_port_read(@Hp5250,Card_num)
12990 !==========================================================
13000 !           Bisa Port Setting Check
13010 !..........................................................
13020 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
13030 !           : Card_num   : Card number
13040 !..........................................................
13050 ! RETURN : Bias Port data : 0 - 10
13060 !----------------------------------------------------------
13070 !
13080   OUTPUT @Hp5250;":ROUT:BIAS:PORT? "&VAL$(Card_num)
13090   ENTER @Hp5250;Bport
13100 !
13110   RETURN Bport
13120 !
13130 FNEND
13140 !==========================================================
13150 Hp5250_setup:SUB Hp5250_setup(@Hp5250,Card_info$(*),Card_conf$(*),Setup_mem$(*),Setup_num,INTEGER Config_mode,Bias_stat(*),Bias_port(*))
13160 !==========================================================
13170 !           HPE5250 Switch Setup
13180 !..........................................................
13190 ! PARAMETER : @Hp5250    : HP5250 I/O Path name
13200 !           : Card_info$  : Card information data
13210 !           : Card_conf$  : Card Configuration data
13220 !           : Setup_mem$  : Setup memory
13230 !           : Setup_num   : Setup number
13240 !           : Config_mode : Config Mode data
13250 !           : Bias_stat   : Bias state data
13260 !           : Bias_port   : Bias port data
13270 !----------------------------------------------------------
13280   DIM Chan_data$[10],Dis_ch$[500],Enb_ch$[3000],Clos_ch$[3000]
13290 !----------------------------------------------------------
13300   Max_card_no=(SIZE(Card_info$,1)-1)
13310 !----------------------------------------------------------
13320 !
13330   Err=FNAll_open_set(@Hp5250,Card_info$(*),Config_mode)  ! All card Open
13340   Err=FNAll_enabl_set(@Hp5250)
13350 !
13360   IF Config_mode=0 THEN                ! Normal Configuration Mode
13370     FOR Card_no=1 TO Max_card_no
13380       SELECT Card_info$(Card_no)
13390       CASE FNGet_card_type$(1)         ! Card type E5252
13400                                        ! Bias chanel disable list
13410         CALL E5252_n_setup(Card_no,FNGet_card_type$(1),Dis_ch$,Enb_ch$,Clos_ch$,Dis_n,Enb_n,Clos_n,Setup_mem$(*),Setup_num,Bias_stat(*),Bias_port(*))
13420         IF Dis_n>0 THEN 
13430           GOSUB Out_disable
13440         END IF
13450         IF Enb_n>0 THEN 
13460           GOSUB Out_enable
13470         END IF
13480         IF Clos_n>0 THEN 
13490           GOSUB Out_close
13500         END IF
13510       CASE FNGet_card_type$(2)         ! Card type E5255
13520                                        ! Bias chanel disable list
13530         CALL E5255_n_setup(Card_no,FNGet_card_type$(2),Dis_ch$,Enb_ch$,Clos_ch$,Dis_n,Enb_n,Clos_n,Setup_mem$(*),Setup_num,Bias_stat(*),Bias_port(*))
13540         IF Dis_n>0 THEN 
13550           GOSUB Out_disable
13560         END IF
13570         IF Enb_n>0 THEN 
13580           GOSUB Out_enable
13590         END IF
13600         IF Clos_n>0 THEN 
13610           GOSUB Out_close
13620         END IF
13630       CASE ELSE                        ! No Card or Not support
13640       END SELECT
13650     NEXT Card_no
13660   ELSE                                 ! Auto Configration Mode
13670     GOSUB Cont_same_card               ! Number of Cont. Same card
13680                                        !
13690     IF Max_card_no>0 THEN 
13700       SELECT Card_info$(0)             !
13710       CASE FNGet_card_type$(1)         ! Card type E5252
13720                                        ! Bias chanel disable list
13730         CALL E5252_a_setup(Max_card_no,FNGet_card_type$(1),Dis_ch$,Enb_ch$,Clos_ch$,Dis_n,Enb_n,Clos_n,Setup_mem$(*),Setup_num,Bias_stat(*),Bias_port(*))
13740         IF Dis_n>0 THEN 
13750           GOSUB Out_disable
13760         END IF
13770         IF Enb_n>0 THEN 
13780           GOSUB Out_enable
13790         END IF
13800         IF Clos_n>0 THEN 
13810           GOSUB Out_close
13820         END IF
13830       CASE FNGet_card_type$(2)         ! Card type E5255
13840                                        ! Bias chanel disable list
13850         Card_type$=FNGet_card_type$(2)
13860         CALL E5255_a_setup(Max_card_no,Card_type$,Dis_ch$,Enb_ch$,Clos_ch$,Dis_n,Enb_n,Clos_n,Setup_mem$(*),Setup_num,Bias_stat(*),Bias_port(*),Card_conf$(*))
13870         IF Dis_n>0 THEN 
13880           GOSUB Out_disable
13890         END IF
13900         IF Enb_n>0 THEN 
13910           GOSUB Out_enable
13920         END IF
13930         IF Clos_n>0 THEN 
13940           GOSUB Out_close
13950         END IF
13960       CASE ELSE
13970       END SELECT
13980     ELSE
13990       ! ERROR
14000     END IF
14010   END IF
14020   GOTO End_sub
14030 Out_close:                                                !
14040   OUTPUT @Hp5250;":ROUT:CLOS "&Clos_ch$
14050   OUTPUT @Hp5250;"*OPC?"
14060   ENTER @Hp5250;Cp
14070   RETURN 
14080 Out_disable:                                              !
14090   OUTPUT @Hp5250;":ROUT:BIAS:CHAN:DIS "&Dis_ch$
14100   OUTPUT @Hp5250;"*OPC?"
14110   ENTER @Hp5250;Cp
14120   RETURN 
14130 Out_enable:                                               !
14140   OUTPUT @Hp5250;":ROUT:BIAS:CHAN:ENAB "&Ena_ch$
14150   OUTPUT @Hp5250;"*OPC?"
14160   ENTER @Hp5250;Cp
14170   RETURN 
14180 Cont_same_card:                                           !
14190   Max_card_slot=(SIZE(Card_info$,1)-1)
14200   C_type$=Card_info$(0)                                   !
14210   Card_no=1
14220   LOOP
14230     Exit_fg=0
14240   EXIT IF Card_no>Max_card_slot
14250     IF C_type$<>Card_info$(Card_no) THEN 
14260       Exit_fg=1
14270     END IF
14280   EXIT IF Exit_fg=1
14290     Card_no=Card_no+1
14300   END LOOP
14310   Max_card_no=Card_no-1                                    ! Max Card number
14320   RETURN 
14330 End_sub:                                                   !
14340 !
14350 SUBEND
14360 !==========================================================
14370 !
14380 E5252_n_setup:SUB E5252_n_setup(Card_no,C_name$,Dis_ch$,Enb_ch$,Clos_ch$,Dis_n,Enb_n,Clos_n,S_mem$(*),S_num,INTEGER B_stat(*),B_port(*))
14390 !==========================================================
14400 !           E5252 Normal config mode setup
14410 !..........................................................
14420 ! Parameter : Card_no    : Card number
14430 !           : C_name$    : Card type name
14440 !           : Dis_ch$    : Disable channel list
14450 !           : Enb_ch$    : Enable channel list
14460 !           ; Clos_ch$   : Close channel list
14470 !           : Chan_list$ : Chanel list
14480 !           : Dis_n      : Number of Disable channel
14490 !           : Enb_n      : Number of Enable channel
14500 !           : Clos_n     : Number of Closed channel
14510 !           : S_mem$     : Setup memory
14520 !           : S_num      : Setup number
14530 !           : B_stat     : Bias state data
14540 !           : B_port     : Bias port data
14550 !----------------------------------------------------------
14560   Opend$="."
14570   Closed$="@"
14580   Bias_dis$="-"
14590 !----------------------------------------------------------
14600 !
14610   Ret=FNCard_in_out_que(C_name$,Max_inp_no,Max_out_no) ! Get Max input/output
14620   Bias_stat_data=B_stat(Card_no)                       !
14630   Bias_port_num=B_port(Card_no)                        !
14640 !
14650   Dis_n=0
14660   Enb_n=0
14670   Clos_n=0
14680   Dis_ch$="(@"
14690   Enb_ch$="(@"
14700   Clos_ch$="(@"
14710   FOR Inp_no=1 TO Max_inp_no
14720     FOR Out_no=1 TO Max_out_no
14730       Chan_stat$=S_mem$(S_num,Card_no,Inp_no)[Out_no;1]
14740       IF Inp_no=Bias_port_num AND Bias_stat_data=1 THEN    ! Bias Mode & Bias chanel
14750         IF Chan_stat$=Bias_dis$ THEN    ! Bias channel Disabel
14760           OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,Inp_no,Out_no,","
14770           Dis_ch$=Dis_ch$&Chan_data$
14780           Dis_n=Dis_n+1
14790         ELSE                            ! Bias channel Enable
14800           OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,Inp_no,Out_no,","
14810           Enb_ch$=Enb_ch$&Chan_data$
14820           Enb_n=Enb_n+1
14830         END IF
14840       ELSE                              ! Non Bias chanel
14850         IF Chan_stat$=Closed$ THEN 
14860           OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,Inp_no,Out_no,","
14870           Clos_ch$=Clos_ch$&Chan_data$
14880           Clos_n=Clos_n+1
14890         END IF
14900       END IF
14910     NEXT Out_no
14920   NEXT Inp_no
14930 !
14940   IF Dis_n>0 THEN Dis_ch$[(LEN(Dis_ch$))]=")"
14950   IF Enb_n>0 THEN Enb_ch$[(LEN(Enb_ch$))]=")"
14960   IF Clos_n>0 THEN Clos_ch$[(LEN(Clos_ch$))]=")"
14970 SUBEND
14980 !==========================================================
14990 !
15000 E5252_a_setup:SUB E5252_a_setup(Max_card_no,C_name$,Dis_ch$,Enb_ch$,Clos_ch$,Dis_n,Enb_n,Clos_n,S_mem$(*),S_num,INTEGER B_stat(*),B_port(*))
15010 !==========================================================
15020 !           E5252 Auto configuration mode setup
15030 !..........................................................
15040 ! Parameter : MAX_CARD_NO : Max card number
15050 !           : Chan_list$  : Chanel list
15060 !           : Stat        : Setting status : 0 -> Open
15070 !           :             :                : 1 -> Close
15080 !           :             :                : 2 -> Disable
15090 !           :             :                : 3 -> Enable
15100 !           : Chanel_num  : Set chanel number
15110 !           : Ch_num     : Numbr of Set chanel
15120 !           : Setup_mem$  : Setup memory
15130 !           : Chan_list$  : Chanel list
15140 !           : Setup_num   : Setup number
15150 !           : Bias_stat   : Bias state data
15160 !           : Bias_port   : Bias port data
15170 !----------------------------------------------------------
15180   Opend$="."
15190   Closed$="@"
15200   Bias_dis$="-"
15210   Card0=0
15220 !----------------------------------------------------------
15230 !
15240   Ret=FNCard_in_out_que(C_name$,Max_inp_no,Max_out_no)
15250   Out_offset=Max_out_no
15260   Bias_stat_data=B_stat(Card0)
15270   Bias_port_num=B_port(Card0)
15280 !
15290   Dis_n=0
15300   Enb_n=0
15310   Clos_n=0
15320   Dis_ch$="(@"
15330   Enb_ch$="(@"
15340   Clos_ch$="(@"
15350   FOR Card_no=1 TO Max_card_no
15360     Offset_num=(Card_no-1)*Out_offset
15370     FOR Inp_no=1 TO Max_inp_no
15380       FOR Out_no=1 TO Max_out_no
15390         Chan_stat$=S_mem$(S_num,Card_no,Inp_no)[Out_no;1]
15400         IF Inp_no=Bias_port_num AND Bias_stat_data=1 THEN  ! Bias Mode & Bias chanel
15410           IF Chan_stat$=Bias_dis$ THEN 
15420             OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,Inp_no,(Out_no+Offset_num),","
15430             Dis_ch$=Dis_ch$&Chan_data$
15440             Dis_n=Dis_n+1
15450           ELSE
15460             OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,Inp_no,(Out_no+Offset_num),","
15470             Enb_ch$=Enb_ch$&Chan_data$
15480             Enb_n=Enb_n+1
15490           END IF
15500         ELSE                                       ! Non Bias chanel
15510           IF Chan_stat$=Closed$ THEN 
15520             OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,Inp_no,(Out_no+Offset_num),","
15530             Clos_ch$=Clos_ch$&Chan_data$
15540             Clos_n=Clos_n+1
15550           END IF
15560         END IF
15570       NEXT Out_no
15580     NEXT Inp_no
15590   NEXT Card_no
15600 !
15610   IF Dis_n>0 THEN Dis_ch$[(LEN(Dis_ch$))]=")"
15620   IF Enb_n>0 THEN Enb_ch$[(LEN(Enb_ch$))]=")"
15630   IF Clos_n>0 THEN Clos_ch$[(LEN(Clos_ch$))]=")"
15640 SUBEND
15650 !==========================================================
15660 !
15670 E5255_n_setup:SUB E5255_n_setup(Card_no,C_name$,Dis_ch$,Enb_ch$,Clos_ch$,Dis_n,Enb_n,Clos_n,S_mem$(*),S_num,INTEGER B_stat(*),B_port(*))
15680 !==========================================================
15690 !           E5255 Normal config mode setup
15700 !..........................................................
15710 ! Parameter : Card_no    : Card number
15720 !           : Chan_list$ : Chanel list
15730 !           : Stat       : Setting status : 0 -> Open
15740 !           :            :                : 1 -> Close
15750 !           :            :                : 2 -> Disable
15760 !           :            :                : 3 -> Enable
15770 !           : Chanel_num : Numbr of Set chanel
15780 !           : Ch_num     : Numbr of Set chanel
15790 !           : Setup_mem$  : Setup memory
15800 !           : Chan_list$  : Chanel list
15810 !           : Setup_num   : Setup number
15820 !           : Bias_stat   : Bias state data
15830 !           : Bias_port   : Bias port data
15840 !----------------------------------------------------------
15850   Opend$="."
15860   Closed$="@"
15870   Bias_dis$="-"
15880   Bias_ch_num=50
15890 !----------------------------------------------------------
15900 !
15910   Ret=FNCard_in_out_que(C_name$,Max_inp_no,Max_out_no)
15920   Bias_stat_data=B_stat(Card_no)
15930 !
15950   Dis_n=0
15951   Enb_n=0
15952   Clos_n=0
15953   Dis_ch$="(@"
15954   Enb_ch$="(@"
15955   Clos_ch$="(@"
15960   FOR Inp_no=1 TO Max_inp_no
15970     FOR Out_no=1 TO Max_out_no
15980       Chan_stat$=S_mem$(S_num,Card_no,Inp_no)[Out_no;1]
15990       IF (Inp_no MOD 2)=0 AND Bias_stat_data=1 THEN        ! Bias Mode & Bias chanel
16000         IF Chan_stat$=Bias_dis$ THEN 
16010           In_num=((Inp_no) DIV 2)+Bias_ch_num
16020           OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,In_num,Out_no,","
16030           Dis_ch$=Dis_ch$&Chan_data$
16040           Dis_n=Dis_n+1
16050         ELSE
16060           In_num=((Inp_no) DIV 2)+Bias_ch_num
16070           OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,In_num,Out_no,","
16080           Enb_ch$=Enb_ch$&Chan_data$
16090           Enb_n=Enb_n+1
16100         END IF
16110       ELSE                                       ! Non Bias chanel
16120         IF Chan_stat$=Closed$ THEN 
16130           IF (Inp_no MOD 2)=0 THEN 
16140             In_num=(Inp_no DIV 2)+Bias_ch_num
16150           ELSE
16160             In_num=((Inp_no-1) DIV 2)+1
16170           END IF
16180           OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,In_num,Out_no,","
16190           Clos_ch$=Clos_ch$&Chan_data$
16200           Clos_n=Clos_n+1
16210         END IF
16220       END IF
16230     NEXT Out_no
16240   NEXT Inp_no
16250 !
16270   IF Dis_n>0 THEN Dis_ch$[(LEN(Dis_ch$))]=")"
16280   IF Enb_n>0 THEN Enb_ch$[(LEN(Enb_ch$))]=")"
16290   IF Clos_n>0 THEN Clos_ch$[(LEN(Clos_ch$))]=")"
16320 SUBEND
16330 !==========================================================
16340 !
16350 E5255_a_setup:SUB E5255_a_setup(Max_card_no,C_name$,Dis_ch$,Enb_ch$,Clos_ch$,Dis_n,Enb_n,Clos_n,S_mem$(*),S_num,INTEGER B_stat(*),B_port(*),C_conf$(*))
16360 !==========================================================
16370 !           E5255 Auto configuration mode setup
16380 !..........................................................
16390 ! Parameter : Max_card_no : Max card number
16400 !           : Chan_list$  : Chanel list
16410 !           : Stat        : Setting status : 0 -> Open
16420 !           :             :                : 1 -> Close
16430 !           :             :                : 2 -> Disable
16440 !           :             :                : 3 -> Enable
16450 !           : Chanel_num  : Set chanel number
16460 !           : Ch_num     : Numbr of Set chanel
16470 !           : Setup_mem$  : Setup memory
16480 !           : Chan_list$  : Chanel list
16490 !           : Setup_num   : Setup number
16500 !           : Bias_stat   : Bias state data
16510 !           : Bias_port   : Bias port data
16520 !           : Card_conf$  : Card Configuration data
16530 !----------------------------------------------------------
16540   INTEGER In_port_num(1:4,1:3)
16550   DIM Block_list(1:6,1:12,1:2)
16560 !----------------------------------------------------------
16570   Card0=0
16580   Max_block=3
16590   Max_block_col=12
16600   Bias_ch_num=10
16610   Opend$="."
16620   Closed$="@"
16630   Bias_dis$="-"
16640 !----------------------------------------------------------
16650 !
16660   Ret=FNCard_in_out_que(Card_name$,Max_inp_no,Max_out_no)
16670   Out_offset=Max_out_no
16680   Bias_stat_data=B_stat(Card0)
16690 !
16700   FOR Card=1 TO Max_card_no                 ! Input port number check
16710     FOR I=1 TO Max_block
16720       In_port_num(Card,I)=VAL(C_conf$(Card)[((I-1)*2+1);1])
16730     NEXT I
16740   NEXT Card
16750 !
16760   MAT Block_list= (0)
16770   Max_col=0
16780   FOR Inp=1 TO Max_inp_no                    ! Block list create
16790     Block_col=1
16800     FOR Card=1 TO Max_card_no
16810       FOR Block=1 TO Max_block
16820         IF Inp=In_port_num(Card,Block) THEN 
16830           Block_list(Inp,Block_col,1)=Card
16840           Block_list(Inp,Block_col,2)=Block
16850           Block_col=Block_col+1
16860         END IF
16870       NEXT Block
16880     NEXT Card
16890   NEXT Inp
16900 !----------------------------------------------------------
16910 !
16930   Dis_n=0
16931   Enb_n=0
16932   Clos_n=0
16933   Dis_ch$="(@"
16934   Enb_ch$="(@"
16935   Clos_ch$="(@"
16940   FOR Inp_no=1 TO Max_inp_no
16950     FOR Block_col=1 TO Max_block_col
16960       Offset_num=(Block_col-1)*Out_offset
16970       Card_no=Block_list(Inp_no,Block_col,1)
16980       Block=Block_list(Inp_no,Block_col,2)
16990       IF Card_no>0 AND Block>0 THEN 
17000         FOR Out_no=1 TO Max_out_no
17010           Chan_stat$=S_mem$(S_num,Card_no,(Block-1)*2+1)[Out_no;1]
17020           IF Chan_stat$=Closed$ THEN                  ! Switch close
17030             In_num=Inp_no
17040             OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,In_num,(Out_no+Offset_num),","
17050             Clos_ch$=Clos_ch$&Chan_data$
17060             Clos_n=Clos_n+1
17070           END IF
17080           Chan_stat$=S_mem$(S_num,Card_no,(Block-1)*2+2)[Out_no;1]
17090           IF Bias_stat_data<>1 THEN 
17100             IF Chan_stat$=Closed$ THEN                ! Switch close
17110               In_num=Inp_no+Bias_ch_num
17120               OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,In_num,(Out_no+Offset_num),","
17130               Clos_ch$=Clos_ch$&Chan_data$
17140               Clos_n=Clos_n+1
17150             END IF
17160           ELSE
17170             IF Chan_stat$=Bias_dis$ THEN 
17180               In_num=Inp_no+Bias_ch_num
17190               OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,In_num,(Out_no+Offset_num),","
17200               Dis_ch$=Dis_ch$&Chan_data$
17210               Dis_n=Dis_n+1
17220             ELSE
17230               In_num=Inp_no+Bias_ch_num
17240               OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,In_num,(Out_no+Offset_num),","
17250               Enb_ch$=Enb_ch$&Chan_data$
17260               Enb_n=Enb_n+1
17270             END IF
17280           END IF
17290         NEXT Out_no
17300       END IF
17310     NEXT Block_col
17320   NEXT Inp_no
17330 !
17340   IF Dis_n>0 THEN Dis_ch$[(LEN(Dis_ch$))]=")"
17341   IF Enb_n>0 THEN Enb_ch$[(LEN(Enb_ch$))]=")"
17342   IF Clos_n>0 THEN Clos_ch$[(LEN(Clos_ch$))]=")"
17430 SUBEND
17440 !==========================================================
17450 !
17460 Card_data_set:SUB Card_data_set(@Hp5250,Cardn,Card_info$(*),Card_conf$(*),INTEGER Bias_stat(*),Bias_port(*),Setup_mem$(*),REAL Setup_num,Check_fg,Diff_num)
17470 !==========================================================
17480 !           Card setting read
17490 !..........................................................
17500 ! Parameter : @Hp5250       : HP E5250A I/O Path name
17510 !           : Cardn         : Card number, 0 -> Auto Config Mode
17520 !           : Card_info$(*) : Card information data
17530 !           : Card_conf$(*) : Card configuration data
17540 !           : Bias_stat(*)  : Bias state data
17550 !           : Bias_port(*)  : Bias port data
17560 !           : Setup_mem$(*) : Setup memory data
17570 !           : Setup_num     : Setup memory number
17580 !           : Diff_num      : Number of Different data
17590 !----------------------------------------------------------
17600   DIM Tmp_setup_mem$(1:1,1:4,1:10)[12]
17610   DIM Block_list(1:6,1:12,1:2),Disp_matrix(1:12,1:2)
17620 !----------------------------------------------------------
17630   CALL Make_block_list(Cardn,Card_info$(*),Card_conf$(*),Block_list(*),Disp_matrix(*),Bias_stat(*),Bias_port(*))
17640   !
17650   Max_card_no=(SIZE(Setup_mem$,2))
17660   FOR Card_no=1 TO Max_card_no
17670     CALL Setup_clr_card(1,Card_no,Tmp_setup_mem$(*),Card_info$(*))
17680   NEXT Card_no
17690   !
17700   CALL Get_dis_card(@Hp5250,Cardn,Tmp_setup_mem$(*),Card_info$(*),Block_list(*),Disp_matrix(*),Bias_stat(*),Bias_port(*))
17710   !
17720   CALL Get_clos_card(@Hp5250,Cardn,Tmp_setup_mem$(*),Card_info$(*),Block_list(*))
17730   Ret=FNCard_in_out_que(Card_info$(Cardn),Max_input,Max_output)
17740   Diff_num=0
17750   IF Cardn=0 THEN 
17760     FOR Card_no=1 TO Max_card_no
17770       FOR Inp_no=1 TO Max_input
17780         SELECT Check_fg
17790         CASE 1
17800           FOR J=1 TO Max_output
17810             IF Setup_mem$(Setup_num,Card_no,Inp_no)[J;1]<>Tmp_setup_mem$(1,Card_no,Inp_no)[J;1] THEN 
17820               Diff_num=Diff_num+1
17830             END IF
17840           NEXT J
17850         CASE 2
17860           FOR J=1 TO Max_output
17870             IF Setup_mem$(Setup_num,Card_no,Inp_no)[J;1]<>Tmp_setup_mem$(1,Card_no,Inp_no)[J;1] THEN 
17880               Diff_num=Diff_num+1
17890             END IF
17900           NEXT J
17910           Setup_mem$(Setup_num,Card_no,Inp_no)=Tmp_setup_mem$(1,Card_no,Inp_no)
17920         CASE ELSE
17930           Setup_mem$(Setup_num,Card_no,Inp_no)=Tmp_setup_mem$(1,Card_no,Inp_no)
17940         END SELECT
17950       NEXT Inp_no
17960     NEXT Card_no
17970   ELSE
17980     FOR Inp_no=1 TO Max_input
17990       SELECT Check_fg
18000       CASE 1
18010         FOR J=1 TO Max_output
18020           IF Setup_mem$(Setup_num,Cardn,Inp_no)[J;1]<>Tmp_setup_mem$(1,Cardn,Inp_no)[J;1] THEN 
18030             Diff_num=Diff_num+1
18040           END IF
18050         NEXT J
18060       CASE 2
18070         FOR J=1 TO Max_output
18080           IF Setup_mem$(Setup_num,Cardn,Inp_no)[J;1]<>Tmp_setup_mem$(1,Cardn,Inp_no)[J;1] THEN 
18090             Diff_num=Diff_num+1
18100           END IF
18110         NEXT J
18120         Setup_mem$(Setup_num,Cardn,Inp_no)=Tmp_setup_mem$(1,Cardn,Inp_no)
18130       CASE ELSE
18140         Setup_mem$(Setup_num,Cardn,Inp_no)=Tmp_setup_mem$(1,Cardn,Inp_no)
18150       END SELECT
18160     NEXT Inp_no
18170   END IF
18180 SUBEND
18190 !==========================================================
18200 Get_clos_card:SUB Get_clos_card(@Hp5250,Card_number,Tmp_setup_mem$(*),Card_info$(*),Block_list(*))
18210 !==========================================================
18220 !           Get card close switch list
18230 !..........................................................
18240 ! Parameter : @Hp5250        : HP E5250A I/O Path name
18250 !           : Card_number    : Card number, 0 -> Auto Config Mode
18260 !           : Tmp_setup_mem$ : Temporary Setup memory
18270 !           : Card_info$(*)  : Card information data
18280 !           : Block_list(*)  : Block assign data
18290 !----------------------------------------------------------
18300   DIM Tmp_chan_list$[1800],Chan_list$[1800]
18310 !----------------------------------------------------------
18320   Sep$=","
18330   Bias_ch_num1=10
18340   Bias_ch_num2=50
18350   Closed$="@"
18360 !----------------------------------------------------------
18370   OUTPUT @Hp5250;":ROUT:CLOS:CARD? "&VAL$(Card_number)
18380   ENTER @Hp5250;Chan_list$
18390   IF LEN(Chan_list$)>0 THEN 
18400     C_type$=Card_info$(Card_number)
18410     Ret=FNCard_in_out_que(C_type$,Max_input,Max_output)
18420     Tmp_chan_list$=Chan_list$[2;(LEN(Chan_list$))-1]&Sep$
18430     Close_cnt=1
18440     LOOP
18450       Spos=POS(Tmp_chan_list$,Sep$)
18460     EXIT IF Spos=0
18470       Chan_data$=Tmp_chan_list$[1;(Spos-1)]
18480       Ch_data=VAL(Chan_data$)
18490       Card_no=INT(Ch_data DIV 10000)
18500       Input_no=INT((Ch_data-(Card_no*10000)) DIV 100)
18510       Output_no=INT(Ch_data-(Card_no*10000)-(Input_no*100))
18520       SELECT C_type$
18530       CASE FNGet_card_type$(1)                            ! E5252
18540         IF Card_number=0 THEN 
18550           Card_no=((Output_no-1) DIV Max_output)+1
18560           In_no=Input_no
18570           Out_no=((Output_no-1) MOD Max_output)+1
18580         ELSE
18590           In_no=Input_no
18600           Out_no=Output_no
18610         END IF
18620       CASE FNGet_card_type$(2)                             ! E5255
18630         IF Card_number=0 THEN                              ! Auto Config Mode
18640           IF Input_no>Bias_ch_num1 THEN 
18650             In_no=(Input_no-Bias_ch_num1)
18660           ELSE
18670             In_no=Input_no
18680           END IF
18690           Block_col=((Output_no-1) DIV Max_output)+1
18700           IF In_no<=(SIZE(Block_list,1)) THEN 
18710             Card_no=Block_list(In_no,Block_col,1)
18720             Block=Block_list(In_no,Block_col,2)
18730             Out_no=((Output_no-1) MOD Max_output)+1
18740             IF Input_no>Bias_ch_num1 THEN 
18750               In_no=Block*2
18760             ELSE
18770               In_no=Block*2-1
18780             END IF
18790           END IF
18800         ELSE                                               ! Normal Config Mode
18810           IF Input_no>Bias_ch_num2 THEN 
18820             In_no=(Input_no-Bias_ch_num2)*2
18830           ELSE
18840             In_no=(Input_no-1)*2+1
18850           END IF
18860           Out_no=Output_no
18870         END IF
18880       CASE ELSE
18890       END SELECT
18900       IF (In_no<=Max_input AND In_no>0) AND (Out_no<=Max_output AND Out_no>0) THEN 
18910         Tmp_setup_mem$(1,Card_no,In_no)[Out_no;1]=Closed$
18920       END IF
18930       Tmp_chan_list$=Tmp_chan_list$[Spos+1;(LEN(Tmp_chan_list$))-Spos]
18940       IF LEN(Tmp_chan_list$)>0 THEN 
18950         Close_cnt=Close_cnt+1
18960       END IF
18970     END LOOP
18980   ELSE
18990     Close_cnt=0
19000   END IF
19010 SUBEND
19020 !==========================================================
19030 Get_dis_card:SUB Get_dis_card(@Hp5250,Card_number,Tmp_setup_mem$(*),Card_info$(*),Block_list(*),Disp_matrix(*),INTEGER Bias_stat(*),Bias_port(*))
19040 !==========================================================
19050 !           Get card disable switch list
19060 !..........................................................
19070 ! Parameter : @Hp5250        : HP E5250A I/O Path name
19080 !           : Card_number    : Card number, 0 -> Auto Config Mode
19090 !           : Tmp_setup_mem$ : Temporary Setup memory
19100 !           : Card_info$(*)  : Card information data
19110 !           : Block_list(*)  : Block assign data
19120 !           : Disp_matrix(*) : Matrix data for Bias position search
19130 !           : Bias_stat(*)  : Bias state data
19140 !           : Bias_port(*)  : Bias port data
19150 !----------------------------------------------------------
19160   DIM Tmp_chan_list$[1800],Read_chan_list$[1800],Chan_list$[1800]
19170 !----------------------------------------------------------
19180   Chan_list$=""
19190   Read_chan_list$=""
19200   Sep$=","
19210   Bias_ch_num1=10
19220   Bias_ch_num2=50
19230   Max_row_num=12
19240   Bias_dis$="-"
19250 !----------------------------------------------------------
19260   C_type$=Card_info$(Card_number)
19270   Ret=FNCard_in_out_que(C_type$,Max_input,Max_output)
19280   Bias_stat_data=Bias_stat(Card_number)
19290   IF Bias_stat_data=1 THEN 
19300     SELECT C_type$
19310     CASE FNGet_card_type$(1)                             ! E5252
19320       Bias_port_num=Bias_port(Card_number)
19330       IF Card_number=0 THEN                              ! Auto Config Mode
19340         FOR Out_no=1 TO (Disp_matrix(Bias_port_num,1))
19350           OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,Bias_port_num,Out_no,Sep$
19360           Chan_list$=Chan_list$&Chan_data$
19370         NEXT Out_no
19380       ELSE                                               ! Normal Config Mode
19390         FOR Out_no=1 TO Max_output
19400           OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_number,Bias_port_num,Out_no,Sep$
19410           Chan_list$=Chan_list$&Chan_data$
19420         NEXT Out_no
19430       END IF
19440     CASE FNGet_card_type$(2)                             ! E5255
19450       IF Card_number=0 THEN                              ! Auto Config Mode
19460         FOR Inp=1 TO Max_row_num
19470           IF Disp_matrix(Inp,2)=1 AND Disp_matrix(Inp,1)>0 THEN 
19480             In_no=((Inp-1) DIV 2)+1+Bias_ch_num1
19490             FOR Out_no=1 TO (Disp_matrix(Inp,1))
19500               OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,In_no,Out_no,Sep$
19510               Chan_list$=Chan_list$&Chan_data$
19520             NEXT Out_no
19530           END IF
19540         NEXT Inp
19550       ELSE                                               ! Normal Config Mode
19560         FOR Inp=1 TO Max_input
19570           IF Disp_matrix(Inp,2)=1 AND Disp_matrix(Inp,1)>0 THEN 
19580             In_no=((Inp-1) DIV 2)+1+Bias_ch_num2
19590             FOR Out_no=1 TO Max_output
19600               OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_number,In_no,Out_no,Sep$
19610               Chan_list$=Chan_list$&Chan_data$
19620             NEXT Out_no
19630           END IF
19640         NEXT Inp
19650       END IF
19660     CASE ELSE
19670     END SELECT
19680   END IF
19690   IF LEN(Chan_list$)>0 THEN 
19700     Chan_list$=Chan_list$[1;(LEN(Chan_list$)-1)]
19710     OUTPUT @Hp5250;":ROUT:BIAS:CHAN:DIS? (@"&Chan_list$&")"
19720     ENTER @Hp5250;Read_chan_list$
19730   ELSE
19740     Read_chan_list$=""
19750   END IF
19760 !----------------------------------------------------------
19770   IF LEN(Read_chan_list$)>0 THEN 
19780     C_type$=Card_info$(Card_number)
19790     Ret=FNCard_in_out_que(C_type$,Max_input,Max_output)
19800     Read_chan_list$=Read_chan_list$&Sep$
19810     Tmp_chan_list$=Chan_list$&Sep$
19820     Close_cnt=1
19830     LOOP
19840       Spos=POS(Tmp_chan_list$,Sep$)
19850       Sposr=POS(Read_chan_list$,Sep$)
19860     EXIT IF Spos=0
19870       Dis_fg=VAL(Read_chan_list$[1;(Sposr-1)])
19880       IF Dis_fg=1 THEN 
19890         Chan_data$=Tmp_chan_list$[1;(Spos-1)]
19900         Ch_data=VAL(Chan_data$)
19910         Card_no=INT(Ch_data DIV 10000)
19920         Input_no=INT((Ch_data-(Card_no*10000)) DIV 100)
19930         Output_no=INT(Ch_data-(Card_no*10000)-(Input_no*100))
19940         SELECT C_type$
19950         CASE FNGet_card_type$(1)                            ! E5252
19960           IF Card_number=0 THEN 
19970             Card_no=((Output_no-1) DIV Max_output)+1
19980             In_no=Input_no
19990             Out_no=((Output_no-1) MOD Max_output)+1
20000           ELSE
20010             In_no=Input_no
20020             Out_no=Output_no
20030           END IF
20040         CASE FNGet_card_type$(2)                            ! E5255
20050           IF Card_number=0 THEN 
20060             IF Input_no>Bias_ch_num1 THEN 
20070               In_no=(Input_no-Bias_ch_num1)
20080             ELSE
20090               In_no=Input_no
20100             END IF
20110             Block_col=((Output_no-1) DIV Max_output)+1
20120             IF In_no<(SIZE(Block_list,1)) THEN 
20130               Card_no=Block_list(In_no,Block_col,1)
20140               Block=Block_list(In_no,Block_col,2)
20150               Out_no=((Output_no-1) MOD Max_output)+1
20160               IF Input_no>Bias_ch_num1 THEN 
20170                 In_no=Block*2
20180               ELSE
20190                 In_no=Block*2-1
20200               END IF
20210             END IF
20220           ELSE
20230             IF Input_no>Bias_ch_num2 THEN 
20240               In_no=(Input_no-Bias_ch_num2)*2
20250             ELSE
20260               In_no=(Input_no-1)*2+1
20270             END IF
20280             Out_no=Output_no
20290           END IF
20300         CASE ELSE
20310         END SELECT
20320         IF (In_no<=Max_input AND In_no>0) AND (Out_no<=Max_output AND Out_no>0) THEN 
20330           Tmp_setup_mem$(1,Card_no,In_no)[Out_no;1]=Bias_dis$
20340         END IF
20350       END IF
20360       Read_chan_list$=Read_chan_list$[Sposr+1;(LEN(Read_chan_list$))-Sposr]
20370       Tmp_chan_list$=Tmp_chan_list$[Spos+1;(LEN(Tmp_chan_list$))-Spos]
20380       IF LEN(Tmp_chan_list$)>0 THEN 
20390         Close_cnt=Close_cnt+1
20400       END IF
20410     END LOOP
20420   ELSE
20430     Close_cnt=0
20440   END IF
20450 SUBEND
20460 !==========================================================
20470 Make_block_list:SUB Make_block_list(Card_num,Card_info$(*),Card_conf$(*),Block_list(*),Disp_matrix(*),INTEGER Bias_stat(*),Bias_port(*))
20480 !==========================================================
20490 ! Parameter : Card_num       : Card number, 0 -> Auto Config Mode
20500 !           : Card_info$(*)  : Card information data
20510 !           : Card_conf$(*)  : Card configuration data
20520 !           : Block_list(*)  : Block assign data
20530 !           : Disp_matrix(*) : Matrix data for Bias position search
20540 !           : Bias_stat(*)  : Bias state data
20550 !           : Bias_port(*)  : Bias port data
20560 !----------------------------------------------------------
20570   INTEGER In_port_num(1:4,1:3)
20580 !----------------------------------------------------------
20590   Max_block=3                                    ! ****
20600   Max_slot_no=(SIZE(Card_info$,1)-1)
20610 !----------------------------------------------------------
20620   C_type$=Card_info$(Card_num)
20630   Ret=FNCard_in_out_que(C_type$,Max_in,Max_out)
20640   SELECT C_type$
20650   CASE FNGet_card_type$(1)                       ! E5252
20660     IF Card_num=0 THEN 
20670       GOSUB Cont_same_card
20680       Max_out=Max_card_no*Max_out
20690     END IF
20700     Bias_port_num=Bias_port(Card_num)            !
20710     Bias_stat_num=Bias_stat(Card_num)            !
20720     FOR Inp_no=1 TO Max_in
20730       IF Inp_no=Bias_port_num AND Bias_stat_num=1 THEN 
20740         Disp_matrix(Inp_no,1)=Max_out
20750         Disp_matrix(Inp_no,2)=1
20760       ELSE
20770         Disp_matrix(Inp_no,1)=Max_out
20780         Disp_matrix(Inp_no,2)=0
20790       END IF
20800     NEXT Inp_no
20810   !
20820   CASE FNGet_card_type$(2)                       ! E5255
20830     IF Card_num=0 THEN                           ! Auto Config Mode
20840       Max_row=Max_in*2
20850       GOSUB Cont_same_card
20860       Bias_stat_num=Bias_stat(Card_num)
20870       FOR Card=1 TO Max_card_no                  ! Input label select
20880         FOR I=1 TO Max_block
20890           In_port_num(Card,I)=VAL(Card_conf$(Card)[((I-1)*2+1);1])
20900         NEXT I
20910       NEXT Card
20920   !
20930       MAT Block_list= (0)
20940       Max_col=0
20950       FOR Inp=1 TO Max_in                         ! Block list create
20960         Block_col=1
20970         FOR Card=1 TO Max_card_no
20980           FOR Block=1 TO Max_block
20990             IF Inp=In_port_num(Card,Block) THEN 
21000               Block_list(Inp,Block_col,1)=Card
21010               Block_list(Inp,Block_col,2)=Block
21020               Block_col=Block_col+1
21030             END IF
21040           NEXT Block
21050         NEXT Card
21060         Tmp_max_col=(Block_col-1)*Max_out
21070         IF Tmp_max_col>Max_col THEN Max_col=Tmp_max_col
21080         Disp_matrix((Inp-1)*2+1,1)=Tmp_max_col
21090         Disp_matrix((Inp-1)*2+2,1)=Tmp_max_col
21100         Disp_matrix((Inp-1)*2+1,2)=0
21110         IF Bias_stat_num=1 THEN 
21120           Disp_matrix((Inp-1)*2+2,2)=1
21130         ELSE
21140           Disp_matrix((Inp-1)*2+2,2)=0
21150         END IF
21160       NEXT Inp
21170     ELSE                                         ! Normal Config Mode
21180       Bias_stat_num=Bias_stat(Card_num)     !
21190       FOR Inp_no=1 TO Max_in
21200         IF (Inp_no MOD 2)=0 THEN 
21210           IF Bias_stat_num=1 THEN 
21220             Disp_matrix(Inp_no,1)=Max_out
21230             Disp_matrix(Inp_no,2)=1
21240           ELSE
21250             Disp_matrix(Inp_no,1)=Max_out
21260             Disp_matrix(Inp_no,2)=0
21270           END IF
21280         ELSE
21290           Disp_matrix(Inp_no,1)=Max_out
21300           Disp_matrix(Inp_no,2)=0
21310         END IF
21320       NEXT Inp_no
21330     !
21340     END IF
21350   END SELECT
21360   SUBEXIT
21370 Cont_same_card:                                           !
21380   Max_card_slot=(SIZE(Card_info$,1)-1)
21390   C_type$=Card_info$(0)                                   !
21400   Card_no=1
21410   LOOP
21420     Exit_fg=0
21430   EXIT IF Card_no>Max_card_slot
21440     IF C_type$<>Card_info$(Card_no) THEN 
21450       Exit_fg=1
21460     END IF
21470   EXIT IF Exit_fg=1
21480     Card_no=Card_no+1
21490   END LOOP
21500   Max_card_no=Card_no-1                                    ! Max Card number
21510   RETURN 
21520   !
21530 SUBEND
21540 !==========================================================
21550 !
21560 All_enabl_set:DEF FNAll_enabl_set(@Hp5250)
21570 !==========================================================
21580 ! All card enable set
21590 !----------------------------------------------------------
21600 !
21610   OUTPUT @Hp5250;":ROUT:BIAS:CHAN:ENAB:CARD ALL"
21620   !
21630   OUTPUT @Hp5250;"*OPC?"
21640   ENTER @Hp5250;Cp
21650   RETURN Cp
21660   !
21670 FNEND
21680 !==========================================================
21690 Setup_clr_card:SUB Setup_clr_card(INTEGER Setup_num,REAL Card_no,Set_mem$(*),Card_info$(*))
21700 !==========================================================
21710 !           Setup memory clear card
21720 !----------------------------------------------------------
21730 ! Parameter : Setup_num     : Setup memory number
21740 !           : Card_no       : Card number
21750 !           : Set_mem$(*)   : Setup memory
21760 !           : Crad_info$(*) : Card information data
21770 !----------------------------------------------------------
21780   Max_output_len=12
21790   Bias_dis$="-"
21800 !----------------------------------------------------------
21810   C_type$=Card_info$(Card_no)
21820   Ret=FNCard_in_out_que(C_type$,Max_input,Max_output)
21830   IF C_type$="" THEN 
21840     Max_input=SIZE(Set_mem$,3)
21850     Max_output=12
21860     Setd$=" "
21870   ELSE
21880     Setd$="."
21890   END IF
21900   IF Card_no=0 THEN                          ! Auto Config Mode
21910     FOR C_num=1 TO (SIZE(Card_info$,1)-1)
21920       IF Card_info$(C_num)=C_type$ THEN 
21930         FOR Inp_num=1 TO Max_input
21940           IF Set_mem$(Setup_num,C_num,Inp_num)<>Bias_dis$ THEN 
21950             Set_mem$(Setup_num,C_num,Inp_num)=RPT$(Setd$,Max_output)
21960           END IF
21970         NEXT Inp_num
21980       ELSE
21990         FOR Inp_num=1 TO (SIZE(Set_mem$,3))
22000           Set_mem$(Setup_num,C_num,Inp_num)=RPT$(" ",Max_output_len)
22010         NEXT Inp_num
22020       END IF
22030     NEXT C_num
22040   ELSE                                       ! Normal Config Node
22050     FOR Inp_num=1 TO Max_input
22060       IF Set_mem$(Setup_num,Card_no,Inp_num)<>Bias_dis$ THEN 
22070         Set_mem$(Setup_num,Card_no,Inp_num)=RPT$(Setd$,Max_output)
22080       END IF
22090     NEXT Inp_num
22100   END IF
22110 SUBEND
22120 !==========================================================
22130 Get_card_type:DEF FNGet_card_type$(N)
22140 !==========================================================
22150 !           Get Card type data
22160 !----------------------------------------------------------
22170 ! Parameter : N  : Card type number
22180 !----------------------------------------------------------
22190   SELECT N
22200   CASE 0
22210     RETURN "-----"
22220   CASE 1
22230     RETURN "E5252"
22240   CASE 2
22250     RETURN "E5255"
22260   CASE ELSE
22270     RETURN ""
22280   END SELECT
22290   !
22300 FNEND
22310 !==========================================================
22320 Get_sys_id:DEF FNGet_sys_id$
22330 !==========================================================
22340 !           Get System ID string
22350 !----------------------------------------------------------
22360   RETURN "E5250"
22370 FNEND
22380 !==========================================================
22390 Max_card_type:DEF FNMax_card_type
22400 !==========================================================
22410 !           Get Max Card type
22420 !----------------------------------------------------------
22430   I=1
22440   LOOP
22450   EXIT IF FNGet_card_type$(I)=""
22460     I=I+1
22470   END LOOP
22480   RETURN (I-1)
22490 FNEND
22500 !==========================================================
22510 Sep:DEF FNSep$(N)
22520 !==========================================================
22530 !           Get Data Separater character
22540 !----------------------------------------------------------
22550 ! Parameter : N  : Separater kind number
22560 !----------------------------------------------------------
22570   SELECT N
22580   CASE 1            ! Separater
22590     RETURN CHR$(10)
22600   CASE 2            ! Sub separater
22610     RETURN CHR$(11)
22620   CASE ELSE
22630     RETURN CHR$(10)
22640   END SELECT
22650   !
22660 FNEND
22670 !==========================================================
22680 Get_setup:SUB Get_setup(Sdata$,Snum,Err,Addr,Cinfo$(*),Cconf$(*),Smem$(*),INTEGER Cmode,Bstat(*),Bport(*))
22690 !==========================================================
22700 !           Data convert  VFP <-> COM data
22710 !..........................................................
22720 ! PARAMETER : Sdata$      : Setup data
22730 !           : Snum        : Setup memory number
22740 !           : Err         : Error status
22750 !           : Addr        : HP-IB Address
22760 !           : Cinfo$      : Card information data
22770 !           : Cconf$      : Card Configuration data
22780 !           : Smem$       : Setup memory
22790 !           : Cmode       : Config Mode data
22800 !           : Bstat       : Bias state data
22810 !           : Bport       : Bias port data
22820 !----------------------------------------------------------
22830   DIM Tstr$[14000],Tmp_data$[14000]
22840 !----------------------------------------------------------
22850   Max_slot_num=(SIZE(Cinfo$,1)-1)
22860   Max_setup_num=(SIZE(Smem$,1))
22870   Max_input=(SIZE(Smem$,3))
22880 ! Sep1$="|"                          ! Data Block separator
22890 ! Sep2$="#"                          ! Data separator
22900   Sep1$=FNSep$(1)                    ! Data Block separator
22910   Sep2$=FNSep$(2)                    ! Data separator
22920   Err=0
22930   MAT Smem$= (" ")
22940 !----------------------------------------------------------
22950 ! CALL Data_block_read(Setup_data$,Err,Select_block,Block_data$)
22960   IF LEN(Sdata$)=0 THEN Data_error
22970   Tmp_data$=Sdata$
22980 !
22990 ! DISP "Get Setup data start ..."
23000 !
23010 ! DISP "COM->VFP : HP-IB address data read"
23020   CALL Data_block_read(Sdata$,Err,2,Tmp_data$)
23030   IF Err<>0 THEN Data_error
23040   Addr=VAL(Tmp_data$)
23050 !
23060 ! DISP "COM->VFP : Card information data read"
23070   CALL Data_block_read(Sdata$,Err,3,Tmp_data$)
23080   IF Err<>0 THEN Data_error
23090   Tstr$=Tmp_data$
23100   FOR I=0 TO Max_slot_num
23110     Dsp=POS(Tstr$,Sep2$)
23120     IF Dsp=0 THEN 
23130       Cinfo$(I)=TRIM$(Tstr$)
23140     ELSE
23150       Cinfo$(I)=TRIM$(Tstr$[1;Dsp-1])
23160       Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
23170     END IF
23180   NEXT I
23190 !
23200 ! DISP "COM->VFP : Configuration mode data read"
23210   CALL Data_block_read(Sdata$,Err,4,Tmp_data$)
23220   IF Err<>0 THEN Data_error
23230   Cmode=VAL(Tmp_data$)
23240 !
23250 ! DISP "COM->VFP : Card configuration data read"
23260   CALL Data_block_read(Sdata$,Err,5,Tmp_data$)
23270   IF Err<>0 THEN Data_error
23280   Tstr$=Tmp_data$
23290   FOR I=0 TO Max_slot_num
23300     Dsp=POS(Tstr$,Sep2$)
23310     IF Dsp=0 THEN 
23320       Cconf$(I)=TRIM$(Tstr$)
23330     ELSE
23340       Cconf$(I)=TRIM$(Tstr$[1;Dsp-1])
23350       Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
23360     END IF
23370   NEXT I
23380 !
23390 ! DISP "COM->VFP : Bias state data read"
23400   CALL Data_block_read(Sdata$,Err,6,Tmp_data$)
23410   IF Err<>0 THEN Data_error
23420   Tstr$=Tmp_data$
23430   FOR I=0 TO Max_slot_num
23440     Dsp=POS(Tstr$,Sep2$)
23450     IF Dsp=0 THEN 
23460       Bstat(I)=VAL(Tstr$)                            ! Bias state data read
23470     ELSE
23480       Bstat(I)=VAL(Tstr$[1;Dsp-1])                   ! Bias state data read
23490       Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
23500     END IF
23510   NEXT I
23520 !
23530 ! DISP "COM->VFP : Bias port data read"
23540   CALL Data_block_read(Sdata$,Err,7,Tmp_data$)
23550   IF Err<>0 THEN Data_error
23560   Tstr$=Tmp_data$
23570   FOR I=0 TO Max_slot_num
23580     Dsp=POS(Tstr$,Sep2$)
23590     IF Dsp=0 THEN 
23600       Bport(I)=VAL(Tstr$)                            ! Bias port number data read
23610     ELSE
23620       Bport(I)=VAL(Tstr$[1;Dsp-1])                   ! Bias port number data read
23630       Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
23640     END IF
23650   NEXT I
23660 !
23670 ! DISP "COM->VFP : Setup memory data read"
23680   CALL Data_block_read(Sdata$,Err,11,Tmp_data$)
23690   IF Err<>0 THEN Data_error
23700 !
23710   Setup_size=(SIZE(Smem$,2))*(SIZE(Smem$,3))*(13)                               !
23720   Tstr$=Tmp_data$[((Setup_size)*(Snum-1)+1);(Setup_size)]
23730   FOR J=1 TO Max_slot_num
23740     FOR K=1 TO Max_input
23750       Dsp=POS(Tstr$,Sep2$)
23760 !     DISP "COM->VFP : Setup memory data read : setup ";I;" card ";J;" in ";K
23770       IF Dsp=0 THEN 
23780         Smem$(Snum,J,K)=TRIM$(Tstr$)
23790       ELSE
23800         Smem$(Snum,J,K)=TRIM$(Tstr$[1;Dsp-1])
23810         Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
23820       END IF
23830     NEXT K
23840   NEXT J
23850 !
23860 ! DISP "Convert Common data -> VFP data completed"
23870   GOTO End_sub
23880 Data_error:                                            !
23890   Err=1
23900 End_sub:                                               !
23910 SUBEND
23920 !==========================================================
