1000 !*************************************************
1001 !*
1002 !* FILE       :  UPLOAD
1003 !* DESCRIPTION:  Data File Upload Library
1004 !* AUTHOR     :  Tomohiko Matsui
1005 !* CREATED    :  09/19/1995
1006 !* MODIFIED   :
1007 !* PRODUCT    :  HP E5250A
1008 !* REVISION   :  Rev.A.01.00
1009 !*
1010 !*   (c) Copyright 1995 Hewlett-Packard Co,
1011 !*              All rights reserved.
1012 !*
1013 !*************************************************
1014 !
1015 Load_vfp_data:SUB Load_vfp_data(Addr_5250,Filename$,Load_data$)
1016  !==========================================================
1017  !           Load Virtual Front Panel Data
1018  !..........................................................
1019  ! PARAMETER : Addr_5250  : HP5250 HP-IB Address
1020  !           : Filename$  : Load File name
1021  !           : Load_data$ : Load data
1022  !----------------------------------------------------------
1023    DIM Card_info$(0:4)[6],Card_conf$(0:4)[6]
1024    DIM Input_label$(1:10)[5],Bias_label$(1:4,1:3)[5]
1025    DIM Setup_mem$(1:24,1:4,1:10)[12]
1026    DIM Rev_id$[7]
1027    INTEGER Config_mode,Bias_stat(0:4),Bias_port(0:4)
1028    INTEGER Setupn,Slotn,Inpn,Outn,Setup_comm_len,Card_info_len
1029  !----------------------------------------------------------
1030    Setup_max_in=10
1031    Setup_max_out=12
1032    Max_setup_num=(SIZE(Setup_mem$,1))
1033    Max_card_num=(SIZE(Setup_mem$,2))
1034    Setup_comm_len=20                        ! Setup Comment Length
1035    Card_info_len=6                          ! Card_info, Card_conf Length
1036  !----------------------------------------------------------
1037    IF LEN(Filename$)=0 THEN Filename_error  !
1038                                             !
1039    CALL Init_check_5250(Addr_5250,Err_stat,Card_info$(*),Card_conf$(*),FNGet_sys_id$)   ! HP5250 Check
1040    IF Err_stat>0 THEN Init_error
1041                                             !
1042  ! DISP "Loading file ...[ ";Filename$;" ]"
1043                                             !
1044    ON ERROR GOTO Load_error
1045    ASSIGN @F TO Filename$
1046    !
1047    ENTER @F;Rev_id$,Setupn,Slotn,Inpn,Outn                    ! Data Format enter
1048    ALLOCATE Setup_mem_tmp$(1:Setupn,1:Slotn,1:Inpn)[Outn]     !
1049    ALLOCATE Setup_comm$(1:Setupn)[Setup_comm_len]             !
1050    ALLOCATE Card_info_tmp$(0:Slotn)[Card_info_len]            !
1051    ALLOCATE Card_conf_tmp$(0:Slotn)[Card_info_len]            !
1052    !
1053    ENTER @F;Card_info_tmp$(*),Config_mode    ! Card information data enter
1054    IF Config_mode=1 THEN                     ! Auto Config Mode set check
1055      IF Card_info_tmp$(0)="" OR Card_info$(0)="" OR Card_info_tmp$(0)<>Card_info$(0) THEN No_set_error
1056    END IF
1057    ENTER @F;Card_conf_tmp$(*),Bias_stat(*),Bias_port(*)       ! Bias state & Bias port data enter
1058    ENTER @F;Input_label$(*),Bias_label$(*),Setup_comm$(*)     ! Label & Comment data enter
1059    ENTER @F;Setup_mem_tmp$(*)                 ! Temporary Setup Memory data enter
1060                                               !
1061  ! DISP "File load completed"
1062                                               !
1063    IF Config_mode=0 THEN                      ! Normal Config Mode
1064      FOR Card_no=1 TO Max_card_num
1065        Sys_card$=Card_info$(Card_no)
1066        Data_card$=Card_info_tmp$(Card_no)
1067        IF FNCard_in_out_que(Sys_card$,Max_in,Max_out)=1 THEN  ! Card type Exist
1068          IF Sys_card$<>Data_card$ THEN        !  Card different
1069            GOSUB Setup_open                   !   Set All open card
1070          ELSE
1071            GOSUB Setup_copy                   !
1072          END IF
1073        ELSE                                   ! Card type not Exist
1074          Max_in=Setup_max_in
1075          Max_out=Setup_max_out
1076          GOSUB Setup_reset                    !  Set null data
1077        END IF
1078      NEXT Card_no
1079    ELSE                                       ! Auto Config mode
1080      Sys_card0$=Card_info$(0)                 !
1081      IF FNCard_in_out_que(Sys_card0$,Def_max_in,Def_max_out)=0 THEN No_set_error  ! Card Exist
1082      Card_no=1
1083      LOOP
1084      EXIT IF Card_no>Max_card_num             !
1085        Sys_card$=Card_info$(Card_no)
1086        Data_card$=Card_info_tmp$(Card_no)
1087        IF FNCard_in_out_que(Sys_card$,M_in,M_out)=1 THEN      ! Card type Exist
1088          IF Sys_card$<>Sys_card0$ THEN        !  Cardn not same Card0
1089            Max_in=Def_max_in
1090            Max_out=Def_max_out
1091            GOSUB Setup_open                   !    Set All open card
1092          ELSE                                 !  Cardn same Card0
1093            IF Sys_card$<>Data_card$ THEN      !   Card different
1094              Max_in=Def_max_in
1095              Max_out=Def_max_out
1096              GOSUB Setup_open                 !    Set All open card
1097            ELSE
1098              Max_in=Def_max_in
1099              Max_out=Def_max_out
1100              GOSUB Setup_copy                 !
1101            END IF
1102          END IF
1103        ELSE
1104          Max_in=Setup_max_in
1105          Max_out=Setup_max_out
1106          GOSUB Setup_reset                     ! Set null data
1107        END IF
1108        Card_no=Card_no+1
1109      END LOOP
1110    END IF
1111                                                ! Data convert
1112    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(*))
1113  ! DISP "File Data Convert completed"
1114    IF Err=1 THEN Conv_error
1115    OFF ERROR 
1116    ASSIGN @F TO *
1117    SUBEXIT                                     ! SUB END
1118  !----------------------------------------------------------
1119 Setup_open:                                    ! Setup memory set open
1120    Bias_stat(Card_no)=0                        !
1121    FOR Setup_num=1 TO Max_setup_num
1122      FOR I=1 TO Max_in
1123        IF Setup_mem$(Setup_num,Card_no,I)<>"-" THEN 
1124          Setup_mem$(Setup_num,Card_no,I)=RPT$(".",Max_out)
1125        END IF
1126      NEXT I
1127    NEXT Setup_num
1128    RETURN 
1129 Setup_reset:                                   ! Setup memory set space
1130    Bias_stat(Card_no)=0                        !
1131    FOR Setup_num=1 TO Max_setup_num
1132      FOR I=1 TO Max_in
1133        IF Setup_mem$(Setup_num,Card_no,I)<>"-" THEN 
1134          Setup_mem$(Setup_num,Card_no,I)=RPT$(" ",Max_out)
1135        END IF
1136      NEXT I
1137    NEXT Setup_num
1138    RETURN 
1139 Setup_copy:                                     ! Setup memory copy
1140    IF Setup_max_in<=Inpn AND Setup_max_out<=Outn THEN 
1141      FOR Setup_num=1 TO Max_setup_num
1142        FOR I=1 TO Max_in
1143          IF Setup_mem$(Setup_num,Card_no,I)<>"-" THEN 
1144            Setup_mem$(Setup_num,Card_no,I)=Setup_mem_tmp$(Setup_num,Card_no,I)[1;Setup_max_out]
1145          END IF
1146        NEXT I
1147      NEXT Setup_num
1148    ELSE
1149      BEEP 
1150      DISP "ERROR : Load data type is different. Can't used Load data."
1151    ! DISP "Matrix type (";Inpn;"x";Outn;") is not same (";Setup_max_in;"x";Setup_max_out;")"
1152      GOTO Load_vfp_error
1153    END IF
1154    RETURN 
1155    !
1156 No_set_error:                           ! Can't change Auto Config Mode
1157    BEEP 
1158    DISP "ERROR : Cannot configure for AUTO. Normal mode used."
1159    GOTO Load_vfp_error
1160 Filename_error:                         ! File name illegal
1161    BEEP 
1162    DISP "ERROR : File name is wrong"
1163    GOTO Load_vfp_error
1164 Init_error:                             ! HPE5250 Initialize error
1165    BEEP 
1166    DISP "ERROR : HP E5250A Init Check Error "
1167    GOTO Load_vfp_error
1168 Load_error:                             ! File Load error
1169    BEEP 
1170    DISP ERRM$
1171    GOTO Load_vfp_error
1172 Conv_error:                             ! Data convert error
1173    BEEP 
1174    DISP "ERROR : File data is not VFP format, or is broken."
1175    GOTO Load_vfp_error
1176 Load_vfp_error:                         !
1177    OFF ERROR 
1178    ASSIGN @F TO *
1179    PAUSE
1180  SUBEND
1181  !==========================================================
1182 Init_vfp_setup:SUB Init_vfp_setup(Setup_data$)
1183  !==========================================================
1184  !           HPE5250 Initialize Setting routine
1185  !..........................................................
1186  ! PARAMETER : Setup_data$ : Setup data
1187  !----------------------------------------------------------
1188    DIM Card_info$(0:4)[6],Card_conf$(0:4)[6]
1189    DIM Card_info_tmp$(0:4)[6],Card_conf_tmp$(0:4)[6]
1190    DIM Input_label$(1:10)[5],Bias_label$(1:4,1:3)[5]
1191    DIM Setup_mem$(1:24,1:4,1:10)[12],Setup_comm$(1:24)[20]
1192    INTEGER Config_mode,Bias_stat(0:4),Bias_port(0:4)
1193  !----------------------------------------------------------
1194  !
1195  ! DISP "HP E5250A Initial Setup start ..."
1196                                                    ! Setup Data Convert
1197    CALL Get_setup(Setup_data$,1,Err,Addr_5250,Card_info$(*),Card_conf$(*),Setup_mem$(*),Config_mode,Bias_stat(*),Bias_port(*))
1198    IF Err=1 THEN Data_conv_error
1199                                                    !
1200  ! DISP "Data convert completed"
1201    ON ERROR GOTO Assign_error
1202    ASSIGN @Hp5250 TO Addr_5250
1203    OFF ERROR 
1204                                                    !
1205    IF FNReset_5250(@Hp5250,Addr_5250)<>0 THEN Reset_error    ! HPE5250 Reset
1206                                                    ! Config Mode setting
1207  ! DISP "HP E5250A Reset"
1208    IF FNConfig_mode_set(@Hp5250,Config_mode)=0 THEN Conf_set_error
1209                                                    ! Bias state setting
1210  ! DISP "HP E5250A Configuration Mode set"
1211    IF FNB_stat_allset(@Hp5250,Card_info$(*),Bias_stat(*),Config_mode)=0 THEN B_stat_error
1212  ! DISP "HP E5250A Bias State set"
1213    IF FNB_port_allset(@Hp5250,Card_info$(*),Bias_port(*),Config_mode)=0 THEN B_port_error
1214  ! DISP "HP E5250A Bias Port set"
1215                                                    !
1216    Setup_num=1                                     ! Setup number 1
1217                                                    ! HPE5250 setup
1218  ! DISP "HP E5250A Setup start..."
1219    CALL Hp5250_setup(@Hp5250,Card_info$(*),Card_conf$(*),Setup_mem$(*),Setup_num,Config_mode,Bias_stat(*),Bias_port(*))
1220                                                    !
1221    Setup_data$[1;1]="I"                            ! Init_vfp_setup CALL flag set
1222  ! DISP "HP E5250A Setup completed"
1223    OFF ERROR 
1224    ASSIGN @Hp5250 TO *
1225    SUBEXIT                                         ! SUB END
1226  !----------------------------------------------------------
1227 Data_conv_error:                                   !
1228    BEEP 
1229    DISP "ERROR : File data is not VFP format, or is broken."
1230    GOTO Init_vfp_error
1231 Assign_error:                                      !
1232    BEEP 
1233    DISP ERRM$
1234    GOTO Init_vfp_error
1235 Reset_error:                                       !
1236    BEEP 
1237    DISP "ERROR : HP E5250A Reset Error"
1238    GOTO Init_vfp_error
1239 Conf_set_error:                                    !
1240    BEEP 
1241    DISP "ERROR : Configuration Mode set error"
1242    GOTO Init_vfp_error
1243 B_stat_error:                                      !
1244    BEEP 
1245    DISP "ERROR : Bias state set error"
1246    GOTO Init_vfp_error
1247 B_port_error:                                      !
1248    BEEP 
1249    DISP "ERROR : Bias port set error"
1250    GOTO Init_vfp_error
1251 Init_vfp_error:                                    !
1252    OFF ERROR 
1253    ASSIGN @Hp5250 TO *
1254    PAUSE
1255  SUBEND
1256  !==========================================================
1257 Connect_vfp:SUB Connect_vfp(Setup_data$,Setup_num)
1258  !==========================================================
1259  !           HPE5250 Setup Change routine
1260  !..........................................................
1261  ! PARAMETER : Setup_data$ : Setup data
1262  !           : Setup_num   : Setup number
1263  !----------------------------------------------------------
1264    DIM Card_info$(0:4)[6],Card_conf$(0:4)[6]
1265    DIM Card_info_tmp$(0:4)[6],Card_conf_tmp$(0:4)[6]
1266    DIM Input_label$(1:10)[5],Bias_label$(1:4,1:3)[5]
1267    DIM Setup_mem$(1:24,1:4,1:10)[12],Setup_comm$(1:24)[20]
1268    INTEGER Config_mode,Bias_stat(0:4),Bias_port(0:4)
1269  !----------------------------------------------------------
1270  !
1271    IF Setup_data$[1;1]<>"I" THEN No_init_error       ! H/W not Initialize
1272                                                      ! Setup Data Convert
1273                                                      ! Setup Number error
1274    IF Setup_num<1 OR Setup_num>(SIZE(Setup_mem$,1)) THEN Setup_num_error
1275                                                      !
1276  ! DISP "HP E5250A Setup Change start ..."
1277    CALL Get_setup(Setup_data$,Setup_num,Err,Addr_5250,Card_info$(*),Card_conf$(*),Setup_mem$(*),Config_mode,Bias_stat(*),Bias_port(*))
1278    IF Err=1 THEN Data_conv_error
1279                                                      !
1280  ! DISP "Data convert completed"
1281    ON ERROR GOTO Assign_error
1282    ASSIGN @Hp5250 TO Addr_5250
1283    OFF ERROR 
1284                                                      ! HPE5250 setup
1285    CALL Hp5250_setup(@Hp5250,Card_info$(*),Card_conf$(*),Setup_mem$(*),Setup_num,Config_mode,Bias_stat(*),Bias_port(*))
1286                                                      !
1287  ! DISP "HP E5250A Setup Change completed"
1288    OFF ERROR 
1289    ASSIGN @Hp5250 TO *
1290    SUBEXIT                                           ! SUB END
1291  !----------------------------------------------------------
1292 No_init_error:                                       !
1293    BEEP 
1294    DISP "ERROR : Must execute Init_vfp_setup before Connect_vfp."
1295    GOTO Connect_vfp_err
1296 Data_conv_error:                                     !
1297    BEEP 
1298    DISP "ERROR : File data is not VFP format, or is broken."
1299    GOTO Connect_vfp_err
1300 Assign_error:                                        !
1301    BEEP 
1302    DISP ERRM$
1303    GOTO Connect_vfp_err
1304 Setup_num_error:                                     !
1305    BEEP 
1306    DISP "ERROR : Parameter Out of Range."
1307    GOTO Connect_vfp_err
1308 Connect_vfp_err:                                     !
1309    OFF ERROR 
1310    ASSIGN @Hp5250 TO *
1311    PAUSE
1312  SUBEND
1313  !==========================================================
1314 Get_vfp_comment:DEF FNGet_vfp_comment$(Setup_data$,Setup_num)
1315  !==========================================================
1316  !           Get Setup Memory comment routine
1317  !..........................................................
1318  ! PARAMETER : Setup_data$ : Setup data
1319  !           : Setup_num   : Setup number
1320  !           : Err_stat    : Error status
1321  !..........................................................
1322  ! RETURN    : Setup Data Comment
1323  !----------------------------------------------------------
1324    DIM Block_data$[14000],Tstr$[14000],S_comm$(1:24)[20]
1325  !----------------------------------------------------------
1326    Max_setup_num=24
1327    Select_block=10
1328    Sep$=FNSep$(2)                               ! Data separator
1329  !----------------------------------------------------------
1330  !
1331                                                 ! Setup number check
1332    IF Setup_num<1 OR Setup_num>Max_setup_num THEN Setup_num_error
1333                                                 !
1334                                                 ! Setup data block read
1335    CALL Data_block_read(Setup_data$,Err,Select_block,Block_data$)
1336    IF Err=1 THEN Data_error                     !
1337  ! DISP "Comment Data read completed"
1338                                                 !
1339    Tstr$=Block_data$
1340    FOR I=1 TO Max_setup_num
1341      Dsp=POS(Tstr$,Sep$)
1342      IF Dsp=0 THEN 
1343        S_comm$(I)=Tstr$                         ! Setup comment data read
1344      ELSE
1345        S_comm$(I)=Tstr$[1;Dsp-1]
1346        Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
1347      END IF
1348    NEXT I
1349  !
1350    RETURN S_comm$(Setup_num)
1351  !----------------------------------------------------------
1352 Setup_num_error:                                !
1353    BEEP 
1354    DISP "ERROR : Parameter Out of Range."
1355    PAUSE
1356    RETURN S_comm$(Setup_num)
1357 Data_conv_error:                                                   !
1358    BEEP 
1359    DISP "ERROR : File data is not VFP format, or is broken."
1360    PAUSE
1361    RETURN S_comm$(Setup_num)
1362  FNEND
1363  !==========================================================
1364  !==========================================================
1365  !
1366 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(*))
1367  !==========================================================
1368  !           Data convert  VFP <-> COM data
1369  !..........................................................
1370  ! PARAMETER : S_data$     : Setup data
1371  !           : Cvfg        : 1 -> VFP to COM data
1372  !           : Err         : Error status
1373  !           : Crfg$       : Initialize flag
1374  !           : Addr        : HP-IB Address
1375  !           : C_info$     : Card information data
1376  !           : C_conf$     : Card Configuration data
1377  !           : S_mem$      : Setup memory
1378  !           : I_label$    : Input Label data
1379  !           : B_label$    : Bias Label data
1380  !           : S_comm$     : Setup comment data
1381  !           : C_mode      : Config Mode data
1382  !           : B_stat      : Bias state data
1383  !           : B_port      : Bias port data
1384  !----------------------------------------------------------
1385    DIM Tstr$[14000],Tmp_data$[14000]
1386  !----------------------------------------------------------
1387    Max_slot_num=(SIZE(C_info$,1)-1)
1388    Max_input_label=(SIZE(I_label$,1))
1389    Max_bias_num=(SIZE(B_label$,2))
1390    Max_setup_num=(SIZE(S_mem$,1))
1391    Max_input=(SIZE(S_mem$,3))
1392    Sep1$=FNSep$(1)                    ! Data Block separator
1393    Sep2$=FNSep$(2)                    ! Data separator
1394    Err=0
1395  !----------------------------------------------------------
1396    IF Cvfg=1 THEN 
1397  !
1398  !   DISP "Convert VFP data -> Common data start ..."
1399  !
1400  !   DISP "VFP->COM : Data Create flag set"
1401      S_data$=Crfg$&Sep1$
1402  !
1403  !   DISP "VFP->COM : HP-IB address set"
1404      S_data$=S_data$&VAL$(Addr)&Sep1$
1405  !   DISP "VFP->COM : Card information data set"
1406      FOR I=0 TO Max_slot_num
1407        OUTPUT Tstr$ USING "#,6A,A";C_info$(I),Sep2$
1408        S_data$=S_data$&Tstr$
1409      NEXT I
1410      S_data$[(LEN(S_data$));1]=Sep1$
1411  !
1412  !   DISP "VFP->COM : Configuration mode data set"
1413      S_data$=S_data$&VAL$(C_mode)&Sep1$
1414  !
1415  !   DISP "VFP->COM : Card configuration data set"
1416      FOR I=0 TO Max_slot_num
1417        OUTPUT Tstr$ USING "#,6A,A";C_conf$(I),Sep2$
1418        S_data$=S_data$&Tstr$
1419      NEXT I
1420      S_data$[(LEN(S_data$));1]=Sep1$
1421  !
1422  !   DISP "VFP->COM : Bias state data set"
1423      FOR I=0 TO Max_slot_num
1424        OUTPUT Tstr$ USING "#,2D,A";B_stat(I),Sep2$
1425        S_data$=S_data$&Tstr$
1426      NEXT I
1427      S_data$[(LEN(S_data$));1]=Sep1$
1428  !
1429  !   DISP "VFP->COM : Bias port data set"
1430      FOR I=0 TO Max_slot_num
1431        OUTPUT Tstr$ USING "#,2D,A";B_port(I),Sep2$
1432        S_data$=S_data$&Tstr$
1433      NEXT I
1434      S_data$[(LEN(S_data$));1]=Sep1$
1435  !
1436  !   DISP "VFP->COM : Input label data set"
1437      FOR I=1 TO Max_input_label
1438        OUTPUT Tstr$ USING "#,5A,A";I_label$(I),Sep2$
1439        S_data$=S_data$&Tstr$
1440      NEXT I
1441      S_data$[(LEN(S_data$));1]=Sep1$
1442  !
1443  !   DISP "VFP->COM : Bias label data set"
1444      FOR I=1 TO Max_slot_num
1445        FOR J=1 TO Max_bias_num
1446          OUTPUT Tstr$ USING "#,5A,A";B_label$(I,J),Sep2$
1447          S_data$=S_data$&Tstr$
1448        NEXT J
1449      NEXT I
1450      S_data$[(LEN(S_data$));1]=Sep1$
1451  !
1452  !   DISP "VFP->COM : Setup comment data set"
1453      FOR I=1 TO Max_setup_num
1454        OUTPUT Tstr$ USING "#,20A,A";S_comm$(I),Sep2$
1455        S_data$=S_data$&Tstr$
1456      NEXT I
1457      S_data$[(LEN(S_data$));1]=Sep1$
1458  !
1459  !   DISP "VFP->COM : Setup memory data set"
1460      FOR I=1 TO Max_setup_num
1461        FOR J=1 TO Max_slot_num
1462          FOR K=1 TO Max_input
1463  !         DISP "VFP->COM : Setup memory data set : setup ";I;" card ";J;" in ";K
1464            OUTPUT Tstr$ USING "#,12A,A";S_mem$(I,J,K),Sep2$
1465            S_data$=S_data$&Tstr$
1466          NEXT K
1467        NEXT J
1468      NEXT I
1469      S_data$[(LEN(S_data$));1]=Sep1$
1470  !
1471  !   DISP "Convert VFP data -> Common data completed"
1472    ELSE  !----------------
1473      IF LEN(S_data$)=0 THEN Data_error
1474      Tmp_data$=S_data$
1475  !   DISP "Convert Common data -> VFP data start ..."
1476  !
1477  !   DISP "COM->VFP : Data Create flag read"
1478      Bsp=POS(Tmp_data$,Sep1$)
1479      Crfg$=TRIM$(Tmp_data$[1;Bsp-1])
1480      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
1481  !
1482  !   DISP "COM->VFP : HP-IB address data read"
1483      Bsp=POS(Tmp_data$,Sep1$)
1484      IF Bsp=0 THEN Data_error
1485      Addr=VAL(Tmp_data$[1;Bsp-1])
1486      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
1487  !
1488  !   DISP "COM->VFP : Card information data read"
1489      Bsp=POS(Tmp_data$,Sep1$)
1490      IF Bsp=0 THEN Data_error
1491      Tstr$=Tmp_data$[1;Bsp-1]
1492      FOR I=0 TO Max_slot_num
1493        Dsp=POS(Tstr$,Sep2$)
1494        IF Dsp=0 THEN 
1495          C_info$(I)=TRIM$(Tstr$)
1496        ELSE
1497          C_info$(I)=TRIM$(Tstr$[1;Dsp-1])
1498          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
1499        END IF
1500      NEXT I
1501      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
1502  !
1503  !   DISP "COM->VFP : Configuration mode data read"
1504      Bsp=POS(Tmp_data$,Sep1$)
1505      C_mode=VAL(Tmp_data$[1;Bsp-1])
1506      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
1507  !
1508  !   DISP "COM->VFP : Card configuration data read"
1509      Bsp=POS(Tmp_data$,Sep1$)
1510      IF Bsp=0 THEN Data_error
1511      Tstr$=Tmp_data$[1;Bsp-1]
1512      FOR I=0 TO Max_slot_num
1513        Dsp=POS(Tstr$,Sep2$)
1514        IF Dsp=0 THEN 
1515          C_conf$(I)=TRIM$(Tstr$)
1516        ELSE
1517          C_conf$(I)=TRIM$(Tstr$[1;Dsp-1])
1518          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
1519        END IF
1520      NEXT I
1521      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
1522  !
1523  !   DISP "COM->VFP : Bias state data read"
1524      Bsp=POS(Tmp_data$,Sep1$)
1525      IF Bsp=0 THEN Data_error
1526      Tstr$=Tmp_data$[1;Bsp-1]
1527      FOR I=0 TO Max_slot_num
1528        Dsp=POS(Tstr$,Sep2$)
1529        IF Dsp=0 THEN 
1530          B_stat(I)=VAL(Tstr$)
1531        ELSE
1532          B_stat(I)=VAL(Tstr$[1;Dsp-1])
1533          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
1534        END IF
1535      NEXT I
1536      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
1537  !
1538  !   DISP "COM->VFP : Bias port data read"
1539      Bsp=POS(Tmp_data$,Sep1$)
1540      IF Bsp=0 THEN Data_error
1541      Tstr$=Tmp_data$[1;Bsp-1]
1542      FOR I=0 TO Max_slot_num
1543        Dsp=POS(Tstr$,Sep2$)
1544        IF Dsp=0 THEN 
1545          B_port(I)=VAL(Tstr$)
1546        ELSE
1547          B_port(I)=VAL(Tstr$[1;Dsp-1])
1548          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
1549        END IF
1550      NEXT I
1551      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
1552  !
1553  !   DISP "COM->VFP : Input label data read"
1554      Bsp=POS(Tmp_data$,Sep1$)
1555      IF Bsp=0 THEN Data_error
1556      Tstr$=Tmp_data$[1;Bsp-1]
1557      FOR I=1 TO Max_input_label
1558        Dsp=POS(Tstr$,Sep2$)
1559        IF Dsp=0 THEN 
1560          I_label$(I)=TRIM$(Tstr$)
1561        ELSE
1562          I_label$(I)=TRIM$(Tstr$[1;Dsp-1])
1563          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
1564        END IF
1565      NEXT I
1566      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
1567  !
1568  !   DISP "COM->VFP : Bias label data read"
1569      Bsp=POS(Tmp_data$,Sep1$)
1570      IF Bsp=0 THEN Data_error
1571      Tstr$=Tmp_data$[1;Bsp-1]
1572      FOR I=1 TO Max_slot_num
1573        FOR J=1 TO Max_bias_num
1574          Dsp=POS(Tstr$,Sep2$)
1575          IF Dsp=0 THEN 
1576            B_label$(I,J)=TRIM$(Tstr$)
1577          ELSE
1578            B_label$(I,J)=TRIM$(Tstr$[1;Dsp-1])
1579            Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
1580          END IF
1581        NEXT J
1582      NEXT I
1583      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
1584  !
1585  !   DISP "COM->VFP : Setup comment data read"
1586      Bsp=POS(Tmp_data$,Sep1$)
1587      IF Bsp=0 THEN Data_error
1588      Tstr$=Tmp_data$[1;Bsp-1]
1589      FOR I=1 TO Max_setup_num
1590        Dsp=POS(Tstr$,Sep2$)
1591        IF Dsp=0 THEN 
1592          S_comm$(I)=TRIM$(Tstr$)
1593        ELSE
1594          S_comm$(I)=TRIM$(Tstr$[1;Dsp-1])
1595          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
1596        END IF
1597      NEXT I
1598      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
1599  !
1600  !   DISP "COM->VFP : Setup memory data read"
1601      Bsp=POS(Tmp_data$,Sep1$)
1602      IF Bsp=0 THEN Data_error
1603      Tstr$=Tmp_data$[1;Bsp-1]
1604      FOR I=1 TO Max_setup_num
1605        FOR J=1 TO Max_slot_num
1606          FOR K=1 TO Max_input
1607            Dsp=POS(Tstr$,Sep2$)
1608  !         DISP "COM->VFP : Setup memory data read : setup ";I;" card ";J;" in ";K
1609            IF Dsp=0 THEN 
1610              S_mem$(I,J,K)=TRIM$(Tstr$)
1611            ELSE
1612              S_mem$(I,J,K)=TRIM$(Tstr$[1;Dsp-1])
1613              Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
1614            END IF
1615          NEXT K
1616        NEXT J
1617      NEXT I
1618  !
1619  !   DISP "Convert Common data -> VFP data completed"
1620    END IF
1621    GOTO End_sub
1622 Data_error:                                             !
1623    Err=1
1624 End_sub:                                                !
1625  SUBEND
1626  !==========================================================
1627 Block_data_conv:DEF FNBlock_data_conv(B_data$)
1628  !==========================================================
1629  !           Block Format data convert
1630  !..........................................................
1631  ! Parameter : B_data$ : Block data : (ex.) #16123456
1632  !..........................................................
1633  ! Return : Number of data byte
1634  !----------------------------------------------------------
1635    IF B_data$[1;1]="#" THEN 
1636      Clen=VAL(B_data$[2;1])
1637      IF Clen>0 THEN 
1638        Blen=VAL(B_data$[3;Clen])
1639        B_data$=B_data$[2+Clen+1;(LEN(B_data$)-(2+Clen))]
1640      ELSE
1641        Blen=0
1642      END IF
1643    ELSE
1644      Blen=0
1645    END IF
1646    RETURN Blen
1647  FNEND
1648  !==========================================================
1649 Card_in_out_que:DEF FNCard_in_out_que(Card$,Max_in,Max_out)
1650  !==========================================================
1651  !           Card IN/OUT information query
1652  !..........................................................
1653  ! Parameter : Card$     : Card type name
1654  !           : Max_in    : Number of INPUT
1655  !           : Max_out   : Number of OUTPUT
1656  !..........................................................
1657  ! Return : Card type existance 1 -> Card type exist, 0 -> Not exist
1658  !----------------------------------------------------------
1659  !
1660    SELECT Card$
1661    CASE FNGet_card_type$(1)           ! Card type E5252
1662      Max_in=10
1663      Max_out=12
1664      Card_exist=1
1665    CASE FNGet_card_type$(2)           ! Card type E5255
1666      Max_in=6
1667      Max_out=8
1668      Card_exist=1
1669    CASE ELSE                          ! No Card or Not support
1670      Max_in=0
1671      Max_out=0
1672      Card_exist=0
1673    END SELECT
1674                                       !
1675    RETURN Card_exist
1676  FNEND
1677  !==========================================================
1678 Data_block_read:SUB Data_block_read(S_data$,Err,Block,Block_data$)
1679  !==========================================================
1680  !           Data convert  VFP <-> COM data
1681  !..........................................................
1682  ! PARAMETER : S_data$     : Setup data
1683  !           : Err         : Error status
1684  !           : Block       : Read Block number
1685  !           : Block_data$ : Read Block data
1686  !----------------------------------------------------------
1687    DIM Tmp_data$[14000]
1688  !----------------------------------------------------------
1689    Sep1$=FNSep$(1)                    ! Data Block separator
1690    Sep2$=FNSep$(2)                    ! Data separator
1691    Err=0
1692  !----------------------------------------------------------
1693  !
1694    Tmp_data$=S_data$
1695                                           !
1696    Bcnt=1
1697    LOOP
1698      Exit_fg=0
1699      Bsp=POS(Tmp_data$,Sep1$)
1700      IF Bsp=0 THEN 
1701        Block_data$=Tmp_data$
1702      ELSE
1703        Block_data$=Tmp_data$[1;Bsp-1]     ! Block Data read
1704      END IF
1705      IF Bcnt>=Block THEN Exit_fg=1
1706    EXIT IF Exit_fg=1
1707      Tmp_data$=Tmp_data$[Bsp+1;(LEN(Tmp_data$)-Bsp)]
1708      Bcnt=Bcnt+1
1709    END LOOP
1710      !
1711    GOTO End_sub
1712 Data_error:                                !
1713    Err=1
1714 End_sub:                                   !
1715  !
1716  SUBEND
1717  !==========================================================
1718 Init_check_5250:SUB Init_check_5250(Addr_5250,Err_stat,Card_info$(*),Card_conf$(*),Sys_id$)
1719  !==========================================================
1720  !           HPE5250 Check & Initiarize
1721  !..........................................................
1722  ! PARAMETER : Addr_5250  : HP5250 HP-IB Address
1723  !           : Err_stat   : Error status return
1724  !           : Card_info$ : Card information data
1725  !           : Card_conf$ : Card configuration data
1726  !           : Sys_id$    : HPE5250 ID keyword
1727  !----------------------------------------------------------
1728    Err_stat=0
1729  !----------------------------------------------------------
1730  !
1731    ON ERROR GOTO Assign_error
1732    ASSIGN @Hp5250 TO Addr_5250                    ! HPE5250 I/O path assign
1733                                                   !
1734    IF FNReset_5250(@Hp5250,Addr_5250)<>0 THEN Reset_error                                ! HPE5250 Reset
1735    IF FNCheck_5250id(@Hp5250,Sys_id$,Addr_5250)<>0 THEN Id_check_error                   ! HPE5250 ID Check
1736    IF FNCard_info(@Hp5250,Card_info$(*),Card_conf$(*),Addr_5250)<>0 THEN Card_info_error ! Card Information Read
1737    GOTO End_sub
1738  !----------------------------------------------------------
1739 Assign_error:                                     !
1740    DISP ERRM$                                     !
1741    WAIT 1
1742    Err_stat=1
1743    GOTO End_sub
1744 Reset_error:                                      !
1745    Err_stat=2                                     !
1746    GOTO End_sub
1747 Id_check_error:                                   !
1748    Err_stat=3
1749    GOTO End_sub
1750 Card_info_error:                                  !
1751    Err_stat=4
1752    GOTO End_sub
1753 End_sub:                                          !
1754    ASSIGN @Hp5250 TO *                            !
1755    OFF ERROR 
1756  SUBEND
1757  !==========================================================
1758 Reset_5250:DEF FNReset_5250(@Hp5250,Addr_5250)
1759  !==========================================================
1760  !           HPE5250 Reset
1761  !..........................................................
1762  ! PARAMETER : @Hp5250   : HP5250 I/O Path name
1763  !           : Addr_5250 : HPE5250 HP-IB Address
1764  !..........................................................
1765  ! RETURN    : Error Status
1766  !----------------------------------------------------------
1767    Err_stat=0
1768    Ctime=5                                        ! TIMEOUT Check time
1769  !----------------------------------------------------------
1770  !
1771    Hpib_sc=Addr_5250 DIV 100                      ! Get HP-IB Address
1772    ON ERROR GOTO Io_error                         !
1773    ON TIMEOUT Hpib_sc,Ctime GOTO Time_out
1774    CLEAR @Hp5250                                  ! I/O Device Clear
1775    OFF ERROR 
1776    OUTPUT @Hp5250;"*RST"                          ! HPE5250 Reset
1777    OUTPUT @Hp5250;"*CLS"                          ! HPE5250 Clear Status
1778    OFF TIMEOUT 
1779    RETURN Err_stat
1780  !----------------------------------------------------------
1781 Io_error:                                         !
1782    BEEP 
1783    DISP ERRM$
1784    Err_stat=2
1785    OFF ERROR 
1786    GOTO End_sub
1787 Time_out:                                         !
1788    BEEP 
1789    DISP "ERROR : HP-IB address,connection or firmware is bad."
1790    Err_stat=3
1791 End_sub:                                          !
1792    OFF TIMEOUT 
1793    PAUSE
1794    RETURN Err_stat
1795  FNEND
1796  !==========================================================
1797 Check_5250id:DEF FNCheck_5250id(@Hp5250,Sys_id$,Addr_5250)
1798  !==========================================================
1799  !           HP5250 ID Check
1800  !..........................................................
1801  ! PARAMETER : @Hp5250   : HP5250 I/O Path name
1802  !           : Sys_id$   : HPE5250 System ID keyword
1803  !           : Addr_5250 : HPE5250 HP-IB Address
1804  !..........................................................
1805  ! Return : Error status
1806  !----------------------------------------------------------
1807    DIM Idstr$[50]
1808  !----------------------------------------------------------
1809    Err_stat=0
1810    Ctime=5                                        ! TIMEOUT Check time
1811  !----------------------------------------------------------
1812    Hpib_sc=Addr_5250 DIV 100                      ! Get HP-IB select code
1813    ON ERROR GOTO Io_error
1814    ON TIMEOUT Hpib_sc,Ctime GOTO Time_out
1815    OUTPUT @Hp5250;"*IDN?"                         ! HP5250 ID Query
1816    ENTER @Hp5250;Idstr$                           ! HP5250 ID Read
1817    IF POS(Idstr$,Sys_id$)=0 THEN Inst_diff_err    ! Insturment ID Check
1818    OFF ERROR 
1819    OFF TIMEOUT 
1820    RETURN Err_stat
1821  !----------------------------------------------------------
1822 Io_error:                                         !
1823    BEEP 
1824    DISP ERRM$
1825    Err_stat=1
1826    OFF ERROR 
1827    GOTO End_sub
1828 Inst_diff_err:                                    !
1829    BEEP 
1830    DISP "ERROR : Instrument at address ";Hpib_addr;" is not HP E5250A !"
1831    Err_stat=2
1832    GOTO End_sub
1833 Time_out:                                         !
1834    BEEP 
1835    DISP "ERROR : HP-IB address,connection or firmware is bad."
1836    Err_stat=3
1837 End_sub:                                          !
1838    OFF ERROR 
1839    OFF TIMEOUT 
1840    PAUSE
1841    RETURN Err_stat
1842  FNEND
1843  !==========================================================
1844 Card_info:DEF FNCard_info(@Hp5250,Card_info$(*),Card_conf$(*),Addr_5250)
1845  !==========================================================
1846  !           HP E5250A CARD Information Read
1847  !..........................................................
1848  ! PARAMETER : @Hp5250    : HP E5250A I/O Path name
1849  !           : Card_info$ : Card information data
1850  !           : Card_conf$ : Card configuration data
1851  !           : Addr_5250  : HP E5250A HP-IB Addreaa
1852  !..........................................................
1853  ! RETURN : Error status
1854  !----------------------------------------------------------
1855    DIM C_type$[50],Corp_id$[30],C_model$[10],C_sn$[10],C_rev$[10],C_tmp$[10]
1856  !----------------------------------------------------------
1857    Err_stat=0
1858    Ctime=3                                           ! TIMEOUT Check time
1859    Max_slot_no=(SIZE(Card_info$,1)-1)                ! Max Slot Number
1860  !----------------------------------------------------------
1861  !
1862    Hpib_sc=Addr_5250 DIV 100                         ! Get HP-IB select code
1863    ON ERROR GOTO Io_error
1864    ON TIMEOUT Hpib_sc,Ctime GOTO Time_out
1865    FOR Slot_no=1 TO Max_slot_no
1866      OUTPUT @Hp5250;":SYST:CTYP? "&VAL$(Slot_no)     ! HPE5250 Card Type Query
1867      ENTER @Hp5250;C_type$                           ! HPE5250 Card Type Read
1868                                                      !
1869      Corp_id$=C_type$[1;(POS(C_type$,",")-1)]        ! Corp. ID
1870      C_type$=C_type$[(POS(C_type$,",")+1);(LEN(C_type$)-POS(C_type$,","))]
1871      C_model$=C_type$[1;(POS(C_type$,",")-1)]        ! Card Model name
1872      C_type$=C_type$[(POS(C_type$,",")+1);(LEN(C_type$)-POS(C_type$,","))]
1873      C_sn$=C_type$[1;(POS(C_type$,",")-1)]           ! Card Serial number
1874      C_rev$=C_type$[(POS(C_type$,",")+1);(LEN(C_type$)-POS(C_type$,","))] ! Card Revision
1875      I=1
1876      LOOP
1877        Exit_fg=0
1878      EXIT IF I>FNMax_card_type
1879        IF POS(C_model$,FNGet_card_type$(I)) THEN           ! Card type check
1880          Exit_fg=1
1881        END IF
1882      EXIT IF Exit_fg=1
1883        I=I+1
1884      END LOOP
1885      IF Exit_fg=1 THEN 
1886        Card_info$(Slot_no)=FNGet_card_type$(I)              ! Card Type set
1887      ELSE
1888        Card_info$(Slot_no)=FNGet_card_type$(0)              ! No Card set
1889      END IF
1890                                                       !
1891      SELECT Card_info$(Slot_no)                       ! Card type check
1892      CASE FNGet_card_type$(2)                               ! Card type E5255
1893        OUTPUT @Hp5250;":SYST:CCON? "&VAL$(Slot_no)    ! HPE5255 Card Configuration Data Query
1894        ENTER @Hp5250;C_tmp$                           ! HPE5255 Card Configuration Data Read
1895        Tmp_str$=""
1896        Blen=FNBlock_data_conv(C_tmp$)
1897        FOR I=1 TO Blen
1898          Tmp_str$=Tmp_str$&(VAL$(NUM(C_tmp$[I;1])))
1899        NEXT I
1900        Card_conf$(Slot_no)=Tmp_str$                   !
1901      CASE ELSE
1902        Card_conf$(Slot_no)=""                         !
1903      END SELECT
1904      IF Slot_no=1 THEN                                ! Set data of Card#0
1905        Card_info$(0)=Card_info$(Slot_no)
1906        Card_conf$(0)=Card_conf$(Slot_no)
1907      END IF
1908    NEXT Slot_no
1909    OFF TIMEOUT 
1910    RETURN Err_stat
1911  !----------------------------------------------------------
1912 Io_error:                                         !
1913    BEEP 
1914    DISP ERRM$
1915    Err_stat=1
1916    OFF ERROR 
1917    GOTO End_sub
1918 Time_out:                                             !
1919    BEEP 
1920    DISP "ERROR : HP-IB address,connection or firmware is bad."
1921    Err_stat=2
1922 End_sub:                                              !
1923    OFF TIMEOUT 
1924    PAUSE
1925    RETURN Err_stat
1926  FNEND
1927  !==========================================================
1928 Config_mode_set:DEF FNConfig_mode_set(@Hp5250,INTEGER Config_mode)
1929  !==========================================================
1930  !           Configuration Mode Setting routine
1931  !..........................................................
1932  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
1933  !           : Config_mode : Configuration Mode
1934  !..........................................................
1935  ! RETURN : Error status
1936  !----------------------------------------------------------
1937  !
1938    IF Config_mode=0 THEN 
1939      OUTPUT @Hp5250;":ROUT:FUNC NCON"        ! Normal Configuration Mode Set
1940    ELSE
1941      OUTPUT @Hp5250;":ROUT:FUNC ACON"        ! Auto Configuration Mode Set
1942    END IF
1943    OUTPUT @Hp5250;"*OPC?"
1944    ENTER @Hp5250;Cp
1945    RETURN Cp
1946  FNEND
1947  !==========================================================
1948 B_stat_allset:DEF FNB_stat_allset(@Hp5250,Card_info$(*),INTEGER Bias_stat(*),Config_mode)
1949  !==========================================================
1950  !           All card Bias State Setting routine
1951  !..........................................................
1952  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
1953  !           : Card_info$ : Card information data
1954  !           : Bias_stat  : Bias state data
1955  !           : Config_mode : Configuration Mode
1956  !..........................................................
1957  ! RETURN : Error status
1958  !----------------------------------------------------------
1959    INTEGER Stat
1960  !----------------------------------------------------------
1961    Max_slot=(SIZE(Card_info$,1)-1)
1962    Err=0
1963  !----------------------------------------------------------
1964  !
1965    OUTPUT @Hp5250;":ROUT:BIAS:STAT ALL,OFF"                           ! Bias State All off
1966    IF Config_mode=0 THEN 
1967      FOR Slot=1 TO Max_slot
1968        IF FNCard_in_out_que(Card_info$(Slot),Max_in,Max_out)=1 THEN   ! Card Exist
1969          Stat=Bias_stat(Slot)
1970          Ret=FNBias_stat_set(@Hp5250,Slot,Stat)
1971          Err=Err+Ret
1972        END IF
1973      NEXT Slot
1974    ELSE
1975      IF FNCard_in_out_que(Card_info$(0),Max_in,Max_out)=1 THEN        ! Card Exist
1976        Stat=Bias_stat(0)
1977        Err=FNBias_stat_set(@Hp5250,0,Stat)
1978      END IF
1979    END IF
1980    RETURN Err
1981  FNEND
1982  !==========================================================
1983 Bias_stat_set:DEF FNBias_stat_set(@Hp5250,Card_num,INTEGER Onoff)
1984  !==========================================================
1985  !           Bias State Setting routine
1986  !..........................................................
1987  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
1988  !           : Card_num   : Card number
1989  !           : Onoff      : Set data
1990  !..........................................................
1991  ! RETURN : Error status
1992  !----------------------------------------------------------
1993    Cp=0
1994    OUTPUT @Hp5250;":ROUT:BIAS:STAT "&VAL$(Card_num)&","&VAL$(Onoff)    ! Bias State set
1995    OUTPUT @Hp5250;"*OPC?"
1996    ENTER @Hp5250;Cp
1997    RETURN Cp
1998  FNEND
1999  !==========================================================
2000 B_port_allset:DEF FNB_port_allset(@Hp5250,Card_info$(*),INTEGER Bias_port(*),Config_mode)
2001  !==========================================================
2002  !           All card Bias port setting routine
2003  !..........................................................
2004  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
2005  !           : Card_info$ : Card information data
2006  !           : Bias_port  : Bias port data
2007  !           : Config_mode : Configuration Mode
2008  !..........................................................
2009  ! RETURN : Error status
2010  !----------------------------------------------------------
2011    INTEGER Port_num
2012  !----------------------------------------------------------
2013    Max_slot=(SIZE(Card_info$,1)-1)
2014    Err=0
2015  !----------------------------------------------------------
2016  !
2017    IF Config_mode=0 THEN                   ! Normal Config Mode
2018      FOR Slot=1 TO Max_slot
2019        IF FNCard_in_out_que(Card_info$(Slot),Max_in,Max_out)=1 THEN   ! Card Exist
2020          IF Card_info$(Slot)=FNGet_card_type$(1) THEN 
2021            Port_num=Bias_port(Slot)
2022            Ret=FNBias_port_set(@Hp5250,Slot,Port_num)
2023            Err=Err+Ret
2024          ELSE
2025            Err=Err+1
2026          END IF
2027        END IF
2028      NEXT Slot
2029    ELSE                                    ! Auto Config Mode
2030      IF FNCard_in_out_que(Card_info$(0),Max_in,Max_out)=1 THEN        ! Card Exist
2031        IF Card_info$(0)=FNGet_card_type$(1) THEN 
2032          Port_num=Bias_port(0)
2033          Err=FNBias_port_set(@Hp5250,0,Port_num)
2034        ELSE
2035          Err=1
2036        END IF
2037      END IF
2038    END IF
2039    RETURN Err
2040  FNEND
2041  !==========================================================
2042 Bias_port_set:DEF FNBias_port_set(@Hp5250,Card_num,INTEGER Port_num)
2043  !==========================================================
2044  !           Bisa State Setting Check
2045  !..........................................................
2046  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
2047  !           : Card_num : Card number
2048  !           : Port_num : Bias port number
2049  !..........................................................
2050  ! RETURN : Error status
2051  !----------------------------------------------------------
2052  !
2053    OUTPUT @Hp5250;":ROUT:BIAS:PORT "&VAL$(Card_num)&","&VAL$(Port_num)    ! Bias State set
2054    OUTPUT @Hp5250;"*OPC?"
2055    ENTER @Hp5250;Cp
2056    RETURN Cp
2057  FNEND
2058  !==========================================================
2059 All_open_set:DEF FNAll_open_set(@Hp5250,Card_info$(*),INTEGER Config_mode)
2060  !==========================================================
2061  !           All Card Open
2062  !..........................................................
2063  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
2064  !           : Card_info$ : Card information data
2065  !           : Config_mode : Configuration Mode
2066  !..........................................................
2067  ! RETURN : All closed status : O -> All Open succeed
2068  !----------------------------------------------------------
2069  !
2070    OUTPUT @Hp5250;":ROUT:OPEN:CARD ALL"
2071    OUTPUT @Hp5250;"*OPC?"
2072    ENTER @Hp5250;Cp
2073  !
2074    RETURN FNAll_close_check(@Hp5250,Card_info$(*),Config_mode)  ! Switch close check
2075  FNEND
2076  !==========================================================
2077 Card_open_set:DEF FNCard_open_set(@Hp5250,Card_no)
2078  !==========================================================
2079  !           Card open set
2080  !..........................................................
2081  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
2082  !           : Card_no    : Card number
2083  !..........................................................
2084  ! RETURN : Open status : O -> Open succeed
2085  !----------------------------------------------------------
2086  !
2087    OUTPUT @Hp5250;":ROUT:OPEN:CARD "&VAL$(Card_no)
2088    OUTPUT @Hp5250;"*OPC?"
2089    ENTER @Hp5250;Cp
2090    RETURN FNClose_check(@Hp5250,Card_no)
2091  FNEND
2092  !==========================================================
2093 Conf_mode_check:DEF FNConf_mode_check$(@Hp5250)
2094  !==========================================================
2095  !           Configuration Mode Check
2096  !..........................................................
2097  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
2098  !..........................................................
2099  ! RETURN : Configuration Mode ID strings : "NCON" -> Normal config mode
2100  !----------------------------------------------------------
2101  !
2102    OUTPUT @Hp5250;":ROUT:FUNC?"
2103    ENTER @Hp5250;Conf_mode$
2104  !
2105    RETURN Conf_mode$
2106  !
2107  FNEND
2108  !==========================================================
2109 Bias_state_read:DEF FNBias_stat_read(@Hp5250,Card_num)
2110  !==========================================================
2111  !           Bisa State Setting Check
2112  !..........................................................
2113  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
2114  !           : Card_num   : Card number
2115  !..........................................................
2116  ! RETURN : Bias State data : 1 -> Bias State ON
2117  !----------------------------------------------------------
2118  !
2119    OUTPUT @Hp5250;":ROUT:BIAS:STATE? "&VAL$(Card_num)
2120    ENTER @Hp5250;Bstat
2121  !
2122    RETURN Bstat
2123  FNEND
2124  !==========================================================
2125  !
2126 Close_check:DEF FNClose_check(@Hp5250,Card_num)
2127  !==========================================================
2128  !           Card switch closed check
2129  !..........................................................
2130  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
2131  !           : Card_num   : Card number
2132  !..........................................................
2133  ! RETURN : Number of Closed switch : 0 -> All Open
2134  !----------------------------------------------------------
2135    DIM Chan_list$[1800]
2136  !----------------------------------------------------------
2137    Sep$=","
2138  !----------------------------------------------------------
2139  !
2140    OUTPUT @Hp5250;":ROUT:CLOS:CARD? "&VAL$(Card_num)
2141    ENTER @Hp5250;Chan_list$
2142                                                            !
2143    IF LEN(Chan_list$)>0 THEN                               ! Chanel list check
2144      Chan_list$=Chan_list$[2;(LEN(Chan_list$))-1]&Sep$
2145      Close_cnt=1
2146      LOOP
2147        Spos=POS(Chan_list$,Sep$)
2148      EXIT IF Spos=0
2149        Chan_list$=Chan_list$[Spos+1;(LEN(Chan_list$))-Spos]
2150        IF LEN(Chan_list$)>0 THEN 
2151          Close_cnt=Close_cnt+1
2152        END IF
2153      END LOOP
2154    ELSE
2155      Close_cnt=0
2156    END IF
2157                                                             !
2158    RETURN Close_cnt
2159  FNEND
2160  !==========================================================
2161 All_close_check:DEF FNAll_close_check(@Hp5250,Card_info$(*),INTEGER Config_mode)
2162  !==========================================================
2163  !           All Switch Open check
2164  !..........................................................
2165  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
2166  !           : Card_info$ : Card information data
2167  !           : Config_mode : Configuration Mode
2168  !..........................................................
2169  ! RETURN : Number of Closed switch : 0 -> All Open
2170  !----------------------------------------------------------
2171    Max_card_no=(SIZE(Card_info$,1)-1)
2172  !----------------------------------------------------------
2173    Close_num=0
2174    IF Config_mode=0 THEN 
2175      Card_no=1
2176      LOOP
2177        SELECT Card_info$(Card_no)
2178        CASE FNGet_card_type$(1),FNGet_card_type$(2)  ! Card type E5252,E5255
2179          Close_num=FNClose_check(@Hp5250,Card_no)    ! Card close check
2180        CASE ELSE
2181        END SELECT
2182      EXIT IF Close_num>0
2183        Card_no=Card_no+1
2184      EXIT IF Card_no>Max_card_no
2185      END LOOP
2186    ELSE
2187      Card_no=0
2188      Close_num=FNClose_check(@Hp5250,Card_no)         ! Card close check
2189    END IF
2190    RETURN Close_num
2191  FNEND
2192  !==========================================================
2193 Bias_port_read:DEF FNBias_port_read(@Hp5250,Card_num)
2194  !==========================================================
2195  !           Bisa Port Setting Check
2196  !..........................................................
2197  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
2198  !           : Card_num   : Card number
2199  !..........................................................
2200  ! RETURN : Bias Port data : 0 - 10
2201  !----------------------------------------------------------
2202  !
2203    OUTPUT @Hp5250;":ROUT:BIAS:PORT? "&VAL$(Card_num)
2204    ENTER @Hp5250;Bport
2205  !
2206    RETURN Bport
2207  !
2208  FNEND
2209  !==========================================================
2210 Hp5250_setup:SUB Hp5250_setup(@Hp5250,Card_info$(*),Card_conf$(*),Setup_mem$(*),Setup_num,INTEGER Config_mode,Bias_stat(*),Bias_port(*))
2211  !==========================================================
2212  !           HPE5250 Switch Setup
2213  !..........................................................
2214  ! PARAMETER : @Hp5250    : HP5250 I/O Path name
2215  !           : Card_info$  : Card information data
2216  !           : Card_conf$  : Card Configuration data
2217  !           : Setup_mem$  : Setup memory
2218  !           : Setup_num   : Setup number
2219  !           : Config_mode : Config Mode data
2220  !           : Bias_stat   : Bias state data
2221  !           : Bias_port   : Bias port data
2222  !----------------------------------------------------------
2223    DIM Chan_data$[10],Chan_list$[1800],Card_type$[10]
2224  !----------------------------------------------------------
2225    Max_card_no=(SIZE(Card_info$,1)-1)
2226  !----------------------------------------------------------
2227  !
2228    DIM Dis_ch$[500],Enb_ch$[3000],Clos_ch$[3000]
2229  !
2230    Err=FNAll_open_set(@Hp5250,Card_info$(*),Config_mode)  ! All card Open
2231    Err=FNAll_enabl_set(@Hp5250)
2232  !
2233    IF Config_mode=0 THEN                ! Normal Configuration Mode
2234      FOR Card_no=1 TO Max_card_no
2235        SELECT Card_info$(Card_no)
2236        CASE FNGet_card_type$(1)         ! Card type E5252
2237                                         ! Bias chanel disable list
2238          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(*))
2239          IF Dis_n>0 THEN 
2240            GOSUB Out_disable
2241          END IF
2242          IF Enb_n>0 THEN 
2243            GOSUB Out_enable
2244          END IF
2245          IF Clos_n>0 THEN 
2246            GOSUB Out_close
2247          END IF
2248        CASE FNGet_card_type$(2)         ! Card type E5255
2249                                         ! Bias chanel disable list
2250          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(*))
2251          IF Dis_n>0 THEN 
2252            GOSUB Out_disable
2253          END IF
2254          IF Enb_n>0 THEN 
2255            GOSUB Out_enable
2256          END IF
2257          IF Clos_n>0 THEN 
2258            GOSUB Out_close
2259          END IF
2260        CASE ELSE                        ! No Card or Not support
2261        END SELECT
2262      NEXT Card_no
2263    ELSE                                 ! Auto Configration Mode
2264      GOSUB Cont_same_card               ! Number of Cont. Same card
2265                                         !
2266      IF Max_card_no>0 THEN 
2267        SELECT Card_info$(0)             !
2268        CASE FNGet_card_type$(1)         ! Card type E5252
2269                                         ! Bias chanel disable list
2270          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(*))
2271          IF Dis_n>0 THEN 
2272            GOSUB Out_disable
2273          END IF
2274          IF Enb_n>0 THEN 
2275            GOSUB Out_enable
2276          END IF
2277          IF Clos_n>0 THEN 
2278            GOSUB Out_close
2279          END IF
2280        CASE FNGet_card_type$(2)         ! Card type E5255
2281                                         ! Bias chanel disable list
2282          Card_type$=FNGet_card_type$(2)
2283          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$(*))
2284          IF Dis_n>0 THEN 
2285            GOSUB Out_disable
2286          END IF
2287          IF Enb_n>0 THEN 
2288            GOSUB Out_enable
2289          END IF
2290          IF Clos_n>0 THEN 
2291            GOSUB Out_close
2292          END IF
2293        CASE ELSE
2294        END SELECT
2295      ELSE
2296        ! ERROR
2297      END IF
2298    END IF
2299    GOTO End_sub
2300 Out_close:                                                 !
2301    OUTPUT @Hp5250;":ROUT:CLOS "&Clos_ch$
2302    OUTPUT @Hp5250;"*OPC?"
2303    ENTER @Hp5250;Cp
2304    RETURN 
2305 Out_disable:                                               !
2306    OUTPUT @Hp5250;":ROUT:BIAS:CHAN:DIS "&Dis_ch$
2307    OUTPUT @Hp5250;"*OPC?"
2308    ENTER @Hp5250;Cp
2309    RETURN 
2310 Out_enable:                                                !
2311    OUTPUT @Hp5250;":ROUT:BIAS:CHAN:ENAB "&Enb_ch$
2312    OUTPUT @Hp5250;"*OPC?"
2313    ENTER @Hp5250;Cp
2314    RETURN 
2315 Cont_same_card:                                            !
2316    Max_card_slot=(SIZE(Card_info$,1)-1)
2317    C_type$=Card_info$(0)                                   !
2318    Card_no=1
2319    LOOP
2320      Exit_fg=0
2321    EXIT IF Card_no>Max_card_slot
2322      IF C_type$<>Card_info$(Card_no) THEN 
2323        Exit_fg=1
2324      END IF
2325    EXIT IF Exit_fg=1
2326      Card_no=Card_no+1
2327    END LOOP
2328    Max_card_no=Card_no-1                                    ! Max Card number
2329    RETURN 
2330 End_sub:                                                    !
2331  !
2332  SUBEND
2333  !==========================================================
2334  !
2335 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(*))
2336  !==========================================================
2337  !           E5252 Normal config mode setup
2338  !..........................................................
2339  ! Parameter : Card_no    : Card number
2340  !           : C_name$    : Card type name
2341  !           : Dis_ch$    : Disable channel list
2342  !           : Enb_ch$    : Enable channel list
2343  !           ; Clos_ch$   : Close channel list
2344  !           : Dis_n      : Number of Disable channel
2345  !           : Enb_n      : Number of Enable channel
2346  !           : Clos_n     : Number of Closed channel
2347  !           : S_mem$     : Setup memory
2348  !           : S_num      : Setup number
2349  !           : B_stat     : Bias state data
2350  !           : B_port     : Bias port data
2352  !----------------------------------------------------------
2353    Opend$="."
2354    Closed$="@"
2355    Bias_dis$="-"
2356  !----------------------------------------------------------
2357  !
2358    Ret=FNCard_in_out_que(C_name$,Max_inp_no,Max_out_no) ! Get Max input/output
2359    Bias_stat_data=B_stat(Card_no)                       !
2360    Bias_port_num=B_port(Card_no)                        !
2361  !
2362    Dis_n=0
2363    Enb_n=0
2364    Clos_n=0
2365    Dis_ch$="(@"
2366    Enb_ch$="(@"
2367    Clos_ch$="(@"
2368    FOR Inp_no=1 TO Max_inp_no
2369      FOR Out_no=1 TO Max_out_no
2370        Chan_stat$=S_mem$(S_num,Card_no,Inp_no)[Out_no;1]
2371        IF Inp_no=Bias_port_num AND Bias_stat_data=1 THEN    ! Bias Mode & Bias chanel
2372          IF Chan_stat$=Bias_dis$ THEN    ! Bias channel Disabel
2373            OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,Inp_no,Out_no,","
2374            Dis_ch$=Dis_ch$&Chan_data$
2375            Dis_n=Dis_n+1
2376          ELSE                            ! Bias channel Enable
2377            OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,Inp_no,Out_no,","
2378            Enb_ch$=Enb_ch$&Chan_data$
2379            Enb_n=Enb_n+1
2380          END IF
2381        ELSE                              ! Non Bias chanel
2382          IF Chan_stat$=Closed$ THEN 
2383            OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,Inp_no,Out_no,","
2384            Clos_ch$=Clos_ch$&Chan_data$
2385            Clos_n=Clos_n+1
2386          END IF
2387        END IF
2388      NEXT Out_no
2389    NEXT Inp_no
2390  !
2391    IF Dis_n>0 THEN Dis_ch$[(LEN(Dis_ch$))]=")"
2392    IF Enb_n>0 THEN Enb_ch$[(LEN(Enb_ch$))]=")"
2393    IF Clos_n>0 THEN Clos_ch$[(LEN(Clos_ch$))]=")"
2394  SUBEND
2395  !==========================================================
2396  !
2397 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(*))
2398  !==========================================================
2399  !           E5252 Auto configuration mode setup
2400  !..........................................................
2401  ! Parameter : Max_card_no : Max card number
2404  !           : C_name$    : Card type name
2405  !           : Dis_ch$    : Disable channel list
2406  !           : Enb_ch$    : Enable channel list
2407  !           ; Clos_ch$   : Close channel list
2408  !           : Dis_n      : Number of Disable channel
2409  !           : Enb_n      : Number of Enable channel
2410  !           : Clos_n     : Number of Closed channel
2411  !           : S_mem$     : Setup memory
2412  !           : S_num      : Setup number
2413  !           : B_stat     : Bias state data
2414  !           : B_port     : Bias port data
2424  !----------------------------------------------------------
2425    Opend$="."
2426    Closed$="@"
2427    Bias_dis$="-"
2428    Card0=0
2429  !----------------------------------------------------------
2430  !
2431    Ret=FNCard_in_out_que(C_name$,Max_inp_no,Max_out_no)
2432    Out_offset=Max_out_no
2433    Bias_stat_data=B_stat(Card0)
2434    Bias_port_num=B_port(Card0)
2435  !
2436    Dis_n=0
2437    Enb_n=0
2438    Clos_n=0
2439    Dis_ch$="(@"
2440    Enb_ch$="(@"
2441    Clos_ch$="(@"
2442    FOR Card_no=1 TO Max_card_no
2443      Offset_num=(Card_no-1)*Out_offset
2444      FOR Inp_no=1 TO Max_inp_no
2445        FOR Out_no=1 TO Max_out_no
2446          Chan_stat$=S_mem$(S_num,Card_no,Inp_no)[Out_no;1]
2447          IF Inp_no=Bias_port_num AND Bias_stat_data=1 THEN  ! Bias Mode & Bias chanel
2448            IF Chan_stat$=Bias_dis$ THEN 
2449              OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,Inp_no,(Out_no+Offset_num),","
2450              Dis_ch$=Dis_ch$&Chan_data$
2451              Dis_n=Dis_n+1
2452            ELSE
2453              OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,Inp_no,(Out_no+Offset_num),","
2454              Enb_ch$=Enb_ch$&Chan_data$
2455              Enb_n=Enb_n+1
2456            END IF
2457          ELSE                                       ! Non Bias chanel
2458            IF Chan_stat$=Closed$ THEN 
2459              OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,Inp_no,(Out_no+Offset_num),","
2460              Clos_ch$=Clos_ch$&Chan_data$
2461              Clos_n=Clos_n+1
2462            END IF
2463          END IF
2464        NEXT Out_no
2465      NEXT Inp_no
2466    NEXT Card_no
2467  !
2468    IF Dis_n>0 THEN Dis_ch$[(LEN(Dis_ch$))]=")"
2469    IF Enb_n>0 THEN Enb_ch$[(LEN(Enb_ch$))]=")"
2470    IF Clos_n>0 THEN Clos_ch$[(LEN(Clos_ch$))]=")"
2471  SUBEND
2472  !==========================================================
2473  !
2474 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(*))
2475  !==========================================================
2476  !           E5255 Normal config mode setup
2477  !..........................................................
2478  ! Parameter : Card_no    : Card number
2479  !           : C_name$    : Card type name
2480  !           : Dis_ch$    : Disable channel list
2481  !           : Enb_ch$    : Enable channel list
2482  !           ; Clos_ch$   : Close channel list
2483  !           : Dis_n      : Number of Disable channel
2484  !           : Enb_n      : Number of Enable channel
2485  !           : Clos_n     : Number of Closed channel
2486  !           : S_mem$     : Setup memory
2487  !           : S_num      : Setup number
2488  !           : B_stat     : Bias state data
2489  !           : B_port     : Bias port data
2503  !----------------------------------------------------------
2504    Opend$="."
2505    Closed$="@"
2506    Bias_dis$="-"
2507    Bias_ch_num=50
2508  !----------------------------------------------------------
2509  !
2510    Ret=FNCard_in_out_que(C_name$,Max_inp_no,Max_out_no)
2511    Bias_stat_data=B_stat(Card_no)
2512  !
2513    Dis_n=0
2514    Enb_n=0
2515    Clos_n=0
2516    Dis_ch$="(@"
2517    Enb_ch$="(@"
2518    Clos_ch$="(@"
2519    FOR Inp_no=1 TO Max_inp_no
2520      FOR Out_no=1 TO Max_out_no
2521        Chan_stat$=S_mem$(S_num,Card_no,Inp_no)[Out_no;1]
2522        IF (Inp_no MOD 2)=0 AND Bias_stat_data=1 THEN        ! Bias Mode & Bias chanel
2523          IF Chan_stat$=Bias_dis$ THEN 
2524            In_num=((Inp_no) DIV 2)+Bias_ch_num
2525            OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,In_num,Out_no,","
2526            Dis_ch$=Dis_ch$&Chan_data$
2527            Dis_n=Dis_n+1
2528          ELSE
2529            In_num=((Inp_no) DIV 2)+Bias_ch_num
2530            OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,In_num,Out_no,","
2531            Enb_ch$=Enb_ch$&Chan_data$
2532            Enb_n=Enb_n+1
2533          END IF
2534        ELSE                                       ! Non Bias chanel
2535          IF Chan_stat$=Closed$ THEN 
2536            IF (Inp_no MOD 2)=0 THEN 
2537              In_num=(Inp_no DIV 2)+Bias_ch_num
2538            ELSE
2539              In_num=((Inp_no-1) DIV 2)+1
2540            END IF
2541            OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_no,In_num,Out_no,","
2542            Clos_ch$=Clos_ch$&Chan_data$
2543            Clos_n=Clos_n+1
2544          END IF
2545        END IF
2546      NEXT Out_no
2547    NEXT Inp_no
2548  !
2549    IF Dis_n>0 THEN Dis_ch$[(LEN(Dis_ch$))]=")"
2550    IF Enb_n>0 THEN Enb_ch$[(LEN(Enb_ch$))]=")"
2551    IF Clos_n>0 THEN Clos_ch$[(LEN(Clos_ch$))]=")"
2552 End_sub:                                                    !
2553  !
2554  SUBEND
2555  !==========================================================
2556  !
2557 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$(*))
2558  !==========================================================
2559  !           E5255 Auto configuration mode setup
2560  !..........................................................
2561  ! Parameter : Max_card_no : Max card number
2563  !           : C_name$    : Card type name
2564  !           : Dis_ch$    : Disable channel list
2565  !           : Enb_ch$    : Enable channel list
2566  !           ; Clos_ch$   : Close channel list
2567  !           : Dis_n      : Number of Disable channel
2568  !           : Enb_n      : Number of Enable channel
2569  !           : Clos_n     : Number of Closed channel
2570  !           : S_mem$     : Setup memory
2571  !           : S_num      : Setup number
2572  !           : B_stat     : Bias state data
2573  !           : B_port     : Bias port data
2574  !           : C_conf$    : Card Configuration data
2587  !----------------------------------------------------------
2588    INTEGER In_port_num(1:4,1:3)
2589    DIM Block_list(1:6,1:12,1:2)
2590  !----------------------------------------------------------
2591    Card0=0
2592    Max_block=3
2593    Max_block_col=12
2594    Bias_ch_num=10
2595    Opend$="."
2596    Closed$="@"
2597    Bias_dis$="-"
2598  !----------------------------------------------------------
2599  !
2600    Ret=FNCard_in_out_que(C_name$,Max_inp_no,Max_out_no)
2601    Out_offset=Max_out_no
2602    Bias_stat_data=B_stat(Card0)
2603  !
2604    FOR Card=1 TO Max_card_no                 ! Input port number check
2605      FOR I=1 TO Max_block
2606        In_port_num(Card,I)=VAL(C_conf$(Card)[((I-1)*2+1);1])
2607      NEXT I
2608    NEXT Card
2609  !
2610    MAT Block_list= (0)
2611    Max_col=0
2612    FOR Inp=1 TO Max_inp_no                    ! Block list create
2613      Block_col=1
2614      FOR Card=1 TO Max_card_no
2615        FOR Block=1 TO Max_block
2616          IF Inp=In_port_num(Card,Block) THEN 
2617            Block_list(Inp,Block_col,1)=Card
2618            Block_list(Inp,Block_col,2)=Block
2619            Block_col=Block_col+1
2620          END IF
2621        NEXT Block
2622      NEXT Card
2623    NEXT Inp
2624  !----------------------------------------------------------
2625  !
2626    Dis_n=0
2627    Enb_n=0
2628    Clos_n=0
2629    Dis_ch$="(@"
2630    Enb_ch$="(@"
2631    Clos_ch$="(@"
2632    FOR Inp_no=1 TO Max_inp_no
2633      FOR Block_col=1 TO Max_block_col
2634        Offset_num=(Block_col-1)*Out_offset
2635        Card_no=Block_list(Inp_no,Block_col,1)
2636        Block=Block_list(Inp_no,Block_col,2)
2637        IF Card_no>0 AND Block>0 THEN 
2638          FOR Out_no=1 TO Max_out_no
2639            Chan_stat$=S_mem$(S_num,Card_no,(Block-1)*2+1)[Out_no;1]
2640            IF Chan_stat$=Closed$ THEN                  ! Switch close
2641              In_num=Inp_no
2642              OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,In_num,(Out_no+Offset_num),","
2643              Clos_ch$=Clos_ch$&Chan_data$
2644              Clos_n=Clos_n+1
2645            END IF
2646            Chan_stat$=S_mem$(S_num,Card_no,(Block-1)*2+2)[Out_no;1]
2647            IF Bias_stat_data<>1 THEN 
2648              IF Chan_stat$=Closed$ THEN                ! Switch close
2649                In_num=Inp_no+Bias_ch_num
2650                OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,In_num,(Out_no+Offset_num),","
2651                Clos_ch$=Clos_ch$&Chan_data$
2652                Clos_n=Clos_n+1
2653              END IF
2654            ELSE
2655              IF Chan_stat$=Bias_dis$ THEN 
2656                In_num=Inp_no+Bias_ch_num
2657                OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,In_num,(Out_no+Offset_num),","
2658                Dis_ch$=Dis_ch$&Chan_data$
2659                Dis_n=Dis_n+1
2660              ELSE
2661                In_num=Inp_no+Bias_ch_num
2662                OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,In_num,(Out_no+Offset_num),","
2663                Enb_ch$=Enb_ch$&Chan_data$
2664                Enb_n=Enb_n+1
2665              END IF
2666            END IF
2667          NEXT Out_no
2668        END IF
2669      NEXT Block_col
2670    NEXT Inp_no
2671  !
2672    IF Dis_n>0 THEN Dis_ch$[(LEN(Dis_ch$))]=")"
2673    IF Enb_n>0 THEN Enb_ch$[(LEN(Enb_ch$))]=")"
2674    IF Clos_n>0 THEN Clos_ch$[(LEN(Clos_ch$))]=")"
2675  !
2676    GOTO End_sub
2677 Set_list: !
2678    OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,In_num,(Out_no+Offset_num),","
2679    Chan_list$=Chan_list$&Chan_data$
2680    Ch_num=Ch_num+1
2681    RETURN 
2682 End_sub:   !
2683  SUBEND
2684  !==========================================================
2685  !
2686 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)
2687  !==========================================================
2688  !           Card setting read
2689  !..........................................................
2690  ! Parameter : @Hp5250       : HP E5250A I/O Path name
2691  !           : Cardn         : Card number, 0 -> Auto Config Mode
2692  !           : Card_info$(*) : Card information data
2693  !           : Card_conf$(*) : Card configuration data
2694  !           : Bias_stat(*)  : Bias state data
2695  !           : Bias_port(*)  : Bias port data
2696  !           : Setup_mem$(*) : Setup memory data
2697  !           : Setup_num     : Setup memory number
2698  !           : Check_fg      : Check Mode ON/OFF
2700  !           : Diff_num      : Number of Different data
2701  !----------------------------------------------------------
2702    DIM Tmp_setup_mem$(1:1,1:4,1:10)[12]
2703    DIM Block_list(1:6,1:12,1:2),Disp_matrix(1:12,1:2)
2704  !----------------------------------------------------------
2705    CALL Make_block_list(Cardn,Card_info$(*),Card_conf$(*),Block_list(*),Disp_matrix(*),Bias_stat(*),Bias_port(*))
2706    !
2707    Max_card_no=(SIZE(Setup_mem$,2))
2708    FOR Card_no=1 TO Max_card_no
2709      CALL Setup_clr_card(1,Card_no,Tmp_setup_mem$(*),Card_info$(*))
2710    NEXT Card_no
2711    !
2712    CALL Get_dis_card(@Hp5250,Cardn,Tmp_setup_mem$(*),Card_info$(*),Block_list(*),Disp_matrix(*),Bias_stat(*),Bias_port(*))
2713    !
2714    CALL Get_clos_card(@Hp5250,Cardn,Tmp_setup_mem$(*),Card_info$(*),Block_list(*))
2715    Ret=FNCard_in_out_que(Card_info$(Cardn),Max_input,Max_output)
2716    Diff_num=0
2717    IF Cardn=0 THEN 
2718      FOR Card_no=1 TO Max_card_no
2719        FOR Inp_no=1 TO Max_input
2720          SELECT Check_fg
2721          CASE 1
2722            FOR J=1 TO Max_output
2723              IF Setup_mem$(Setup_num,Card_no,Inp_no)[J;1]<>Tmp_setup_mem$(1,Card_no,Inp_no)[J;1] THEN 
2724                Diff_num=Diff_num+1
2725              END IF
2726            NEXT J
2727          CASE 2
2728            FOR J=1 TO Max_output
2729              IF Setup_mem$(Setup_num,Card_no,Inp_no)[J;1]<>Tmp_setup_mem$(1,Card_no,Inp_no)[J;1] THEN 
2730                Diff_num=Diff_num+1
2731              END IF
2732            NEXT J
2733            Setup_mem$(Setup_num,Card_no,Inp_no)=Tmp_setup_mem$(1,Card_no,Inp_no)
2734          CASE ELSE
2735            Setup_mem$(Setup_num,Card_no,Inp_no)=Tmp_setup_mem$(1,Card_no,Inp_no)
2736          END SELECT
2737        NEXT Inp_no
2738      NEXT Card_no
2739    ELSE
2740      FOR Inp_no=1 TO Max_input
2741        SELECT Check_fg
2742        CASE 1
2743          FOR J=1 TO Max_output
2744            IF Setup_mem$(Setup_num,Cardn,Inp_no)[J;1]<>Tmp_setup_mem$(1,Cardn,Inp_no)[J;1] THEN 
2745              Diff_num=Diff_num+1
2746            END IF
2747          NEXT J
2748        CASE 2
2749          FOR J=1 TO Max_output
2750            IF Setup_mem$(Setup_num,Cardn,Inp_no)[J;1]<>Tmp_setup_mem$(1,Cardn,Inp_no)[J;1] THEN 
2751              Diff_num=Diff_num+1
2752            END IF
2753          NEXT J
2754          Setup_mem$(Setup_num,Cardn,Inp_no)=Tmp_setup_mem$(1,Cardn,Inp_no)
2755        CASE ELSE
2756          Setup_mem$(Setup_num,Cardn,Inp_no)=Tmp_setup_mem$(1,Cardn,Inp_no)
2757        END SELECT
2758      NEXT Inp_no
2759    END IF
2760  SUBEND
2761  !==========================================================
2762 Get_clos_card:SUB Get_clos_card(@Hp5250,Card_number,Tmp_setup_mem$(*),Card_info$(*),Block_list(*))
2763  !==========================================================
2764  !           Get card close switch list
2765  !..........................................................
2766  ! Parameter : @Hp5250        : HP E5250A I/O Path name
2767  !           : Card_number    : Card number, 0 -> Auto Config Mode
2768  !           : Tmp_setup_mem$ : Temporary Setup memory
2769  !           : Card_info$(*)  : Card information data
2770  !           : Block_list(*)  : Block assign data
2771  !----------------------------------------------------------
2772    DIM Tmp_chan_list$[1800],Chan_list$[1800]
2773  !----------------------------------------------------------
2774    Sep$=","
2775    Bias_ch_num1=10
2776    Bias_ch_num2=50
2777    Closed$="@"
2778  !----------------------------------------------------------
2779    OUTPUT @Hp5250;":ROUT:CLOS:CARD? "&VAL$(Card_number)
2780    ENTER @Hp5250;Chan_list$
2781    IF LEN(Chan_list$)>0 THEN 
2782      C_type$=Card_info$(Card_number)
2783      Ret=FNCard_in_out_que(C_type$,Max_input,Max_output)
2784      Tmp_chan_list$=Chan_list$[2;(LEN(Chan_list$))-1]&Sep$
2785      Close_cnt=1
2786      LOOP
2787        Spos=POS(Tmp_chan_list$,Sep$)
2788      EXIT IF Spos=0
2789        Chan_data$=Tmp_chan_list$[1;(Spos-1)]
2790        Ch_data=VAL(Chan_data$)
2791        Card_no=INT(Ch_data DIV 10000)
2792        Input_no=INT((Ch_data-(Card_no*10000)) DIV 100)
2793        Output_no=INT(Ch_data-(Card_no*10000)-(Input_no*100))
2794        SELECT C_type$
2795        CASE FNGet_card_type$(1)                            ! E5252
2796          IF Card_number=0 THEN 
2797            Card_no=((Output_no-1) DIV Max_output)+1
2798            In_no=Input_no
2799            Out_no=((Output_no-1) MOD Max_output)+1
2800          ELSE
2801            In_no=Input_no
2802            Out_no=Output_no
2803          END IF
2804        CASE FNGet_card_type$(2)                             ! E5255
2805          IF Card_number=0 THEN                              ! Auto Config Mode
2806            IF Input_no>Bias_ch_num1 THEN 
2807              In_no=(Input_no-Bias_ch_num1)
2808            ELSE
2809              In_no=Input_no
2810            END IF
2811            Block_col=((Output_no-1) DIV Max_output)+1
2812            IF In_no<=(SIZE(Block_list,1)) THEN 
2813              Card_no=Block_list(In_no,Block_col,1)
2814              Block=Block_list(In_no,Block_col,2)
2815              Out_no=((Output_no-1) MOD Max_output)+1
2816              IF Input_no>Bias_ch_num1 THEN 
2817                In_no=Block*2
2818              ELSE
2819                In_no=Block*2-1
2820              END IF
2821            END IF
2822          ELSE                                               ! Normal Config Mode
2823            IF Input_no>Bias_ch_num2 THEN 
2824              In_no=(Input_no-Bias_ch_num2)*2
2825            ELSE
2826              In_no=(Input_no-1)*2+1
2827            END IF
2828            Out_no=Output_no
2829          END IF
2830        CASE ELSE
2831        END SELECT
2832        IF (In_no<=Max_input AND In_no>0) AND (Out_no<=Max_output AND Out_no>0) THEN 
2833          Tmp_setup_mem$(1,Card_no,In_no)[Out_no;1]=Closed$
2834        END IF
2835        Tmp_chan_list$=Tmp_chan_list$[Spos+1;(LEN(Tmp_chan_list$))-Spos]
2836        IF LEN(Tmp_chan_list$)>0 THEN 
2837          Close_cnt=Close_cnt+1
2838        END IF
2839      END LOOP
2840    ELSE
2841      Close_cnt=0
2842    END IF
2843  SUBEND
2844  !==========================================================
2845 Get_dis_card:SUB Get_dis_card(@Hp5250,Card_number,Tmp_setup_mem$(*),Card_info$(*),Block_list(*),Disp_matrix(*),INTEGER Bias_stat(*),Bias_port(*))
2846  !==========================================================
2847  !           Get card disable switch list
2848  !..........................................................
2849  ! Parameter : @Hp5250        : HP E5250A I/O Path name
2850  !           : Card_number    : Card number, 0 -> Auto Config Mode
2851  !           : Tmp_setup_mem$ : Temporary Setup memory
2852  !           : Card_info$(*)  : Card information data
2853  !           : Block_list(*)  : Block assign data
2854  !           : Disp_matrix(*) : Matrix data for Bias position search
2855  !           : Bias_stat(*)  : Bias state data
2856  !           : Bias_port(*)  : Bias port data
2857  !----------------------------------------------------------
2858    DIM Tmp_chan_list$[1800],Read_chan_list$[1800],Chan_list$[1800]
2859  !----------------------------------------------------------
2860    Chan_list$=""
2861    Read_chan_list$=""
2862    Sep$=","
2863    Bias_ch_num1=10
2864    Bias_ch_num2=50
2865    Max_row_num=12
2866    Bias_dis$="-"
2867  !----------------------------------------------------------
2868    C_type$=Card_info$(Card_number)
2869    Ret=FNCard_in_out_que(C_type$,Max_input,Max_output)
2870    Bias_stat_data=Bias_stat(Card_number)
2871    IF Bias_stat_data=1 THEN 
2872      SELECT C_type$
2873      CASE FNGet_card_type$(1)                             ! E5252
2874        Bias_port_num=Bias_port(Card_number)
2875        IF Card_number=0 THEN                              ! Auto Config Mode
2876          FOR Out_no=1 TO (Disp_matrix(Bias_port_num,1))
2877            OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,Bias_port_num,Out_no,Sep$
2878            Chan_list$=Chan_list$&Chan_data$
2879          NEXT Out_no
2880        ELSE                                               ! Normal Config Mode
2881          FOR Out_no=1 TO Max_output
2882            OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_number,Bias_port_num,Out_no,Sep$
2883            Chan_list$=Chan_list$&Chan_data$
2884          NEXT Out_no
2885        END IF
2886      CASE FNGet_card_type$(2)                             ! E5255
2887        IF Card_number=0 THEN                              ! Auto Config Mode
2888          FOR Inp=1 TO Max_row_num
2889            IF Disp_matrix(Inp,2)=1 AND Disp_matrix(Inp,1)>0 THEN 
2890              In_no=((Inp-1) DIV 2)+1+Bias_ch_num1
2891              FOR Out_no=1 TO (Disp_matrix(Inp,1))
2892                OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card0,In_no,Out_no,Sep$
2893                Chan_list$=Chan_list$&Chan_data$
2894              NEXT Out_no
2895            END IF
2896          NEXT Inp
2897        ELSE                                               ! Normal Config Mode
2898          FOR Inp=1 TO Max_input
2899            IF Disp_matrix(Inp,2)=1 AND Disp_matrix(Inp,1)>0 THEN 
2900              In_no=((Inp-1) DIV 2)+1+Bias_ch_num2
2901              FOR Out_no=1 TO Max_output
2902                OUTPUT Chan_data$ USING "#,1D,2Z,2Z,A";Card_number,In_no,Out_no,Sep$
2903                Chan_list$=Chan_list$&Chan_data$
2904              NEXT Out_no
2905            END IF
2906          NEXT Inp
2907        END IF
2908      CASE ELSE
2909      END SELECT
2910    END IF
2911    IF LEN(Chan_list$)>0 THEN 
2912      Chan_list$=Chan_list$[1;(LEN(Chan_list$)-1)]
2913      OUTPUT @Hp5250;":ROUT:BIAS:CHAN:DIS? (@"&Chan_list$&")"
2914      ENTER @Hp5250;Read_chan_list$
2915    ELSE
2916      Read_chan_list$=""
2917    END IF
2918  !----------------------------------------------------------
2919    IF LEN(Read_chan_list$)>0 THEN 
2920      C_type$=Card_info$(Card_number)
2921      Ret=FNCard_in_out_que(C_type$,Max_input,Max_output)
2922      Read_chan_list$=Read_chan_list$&Sep$
2923      Tmp_chan_list$=Chan_list$&Sep$
2924      Close_cnt=1
2925      LOOP
2926        Spos=POS(Tmp_chan_list$,Sep$)
2927        Sposr=POS(Read_chan_list$,Sep$)
2928      EXIT IF Spos=0
2929        Dis_fg=VAL(Read_chan_list$[1;(Sposr-1)])
2930        IF Dis_fg=1 THEN 
2931          Chan_data$=Tmp_chan_list$[1;(Spos-1)]
2932          Ch_data=VAL(Chan_data$)
2933          Card_no=INT(Ch_data DIV 10000)
2934          Input_no=INT((Ch_data-(Card_no*10000)) DIV 100)
2935          Output_no=INT(Ch_data-(Card_no*10000)-(Input_no*100))
2936          SELECT C_type$
2937          CASE FNGet_card_type$(1)                            ! E5252
2938            IF Card_number=0 THEN 
2939              Card_no=((Output_no-1) DIV Max_output)+1
2940              In_no=Input_no
2941              Out_no=((Output_no-1) MOD Max_output)+1
2942            ELSE
2943              In_no=Input_no
2944              Out_no=Output_no
2945            END IF
2946          CASE FNGet_card_type$(2)                            ! E5255
2947            IF Card_number=0 THEN 
2948              IF Input_no>Bias_ch_num1 THEN 
2949                In_no=(Input_no-Bias_ch_num1)
2950              ELSE
2951                In_no=Input_no
2952              END IF
2953              Block_col=((Output_no-1) DIV Max_output)+1
2954              IF In_no<(SIZE(Block_list,1)) THEN 
2955                Card_no=Block_list(In_no,Block_col,1)
2956                Block=Block_list(In_no,Block_col,2)
2957                Out_no=((Output_no-1) MOD Max_output)+1
2958                IF Input_no>Bias_ch_num1 THEN 
2959                  In_no=Block*2
2960                ELSE
2961                  In_no=Block*2-1
2962                END IF
2963              END IF
2964            ELSE
2965              IF Input_no>Bias_ch_num2 THEN 
2966                In_no=(Input_no-Bias_ch_num2)*2
2967              ELSE
2968                In_no=(Input_no-1)*2+1
2969              END IF
2970              Out_no=Output_no
2971            END IF
2972          CASE ELSE
2973          END SELECT
2974          IF (In_no<=Max_input AND In_no>0) AND (Out_no<=Max_output AND Out_no>0) THEN 
2975            Tmp_setup_mem$(1,Card_no,In_no)[Out_no;1]=Bias_dis$
2976          END IF
2977        END IF
2978        Read_chan_list$=Read_chan_list$[Sposr+1;(LEN(Read_chan_list$))-Sposr]
2979        Tmp_chan_list$=Tmp_chan_list$[Spos+1;(LEN(Tmp_chan_list$))-Spos]
2980        IF LEN(Tmp_chan_list$)>0 THEN 
2981          Close_cnt=Close_cnt+1
2982        END IF
2983      END LOOP
2984    ELSE
2985      Close_cnt=0
2986    END IF
2987  SUBEND
2988  !==========================================================
2989 Make_block_list:SUB Make_block_list(Card_num,Card_info$(*),Card_conf$(*),Block_list(*),Disp_matrix(*),INTEGER Bias_stat(*),Bias_port(*))
2990  !==========================================================
2991  ! Parameter : Card_num       : Card number, 0 -> Auto Config Mode
2992  !           : Card_info$(*)  : Card information data
2993  !           : Card_conf$(*)  : Card configuration data
2994  !           : Block_list(*)  : Block assign data
2995  !           : Disp_matrix(*) : Matrix data for Bias position search
2996  !           : Bias_stat(*)  : Bias state data
2997  !           : Bias_port(*)  : Bias port data
2998  !----------------------------------------------------------
2999    INTEGER In_port_num(1:4,1:3)
3000  !----------------------------------------------------------
3001    Max_block=3                                    ! ****
3002    Max_slot_no=(SIZE(Card_info$,1)-1)
3003  !----------------------------------------------------------
3004    C_type$=Card_info$(Card_num)
3005    Ret=FNCard_in_out_que(C_type$,Max_in,Max_out)
3006    SELECT C_type$
3007    CASE FNGet_card_type$(1)                       ! E5252
3008      IF Card_num=0 THEN 
3009        GOSUB Cont_same_card
3010        Max_out=Max_card_no*Max_out
3011      END IF
3012      Bias_port_num=Bias_port(Card_num)            !
3013      Bias_stat_num=Bias_stat(Card_num)            !
3014      FOR Inp_no=1 TO Max_in
3015        IF Inp_no=Bias_port_num AND Bias_stat_num=1 THEN 
3016          Disp_matrix(Inp_no,1)=Max_out
3017          Disp_matrix(Inp_no,2)=1
3018        ELSE
3019          Disp_matrix(Inp_no,1)=Max_out
3020          Disp_matrix(Inp_no,2)=0
3021        END IF
3022      NEXT Inp_no
3023    !
3024    CASE FNGet_card_type$(2)                       ! E5255
3025      IF Card_num=0 THEN                           ! Auto Config Mode
3026        Max_row=Max_in*2
3027        GOSUB Cont_same_card
3028        Bias_stat_num=Bias_stat(Card_num)
3029        FOR Card=1 TO Max_card_no                  ! Input label select
3030          FOR I=1 TO Max_block
3031            In_port_num(Card,I)=VAL(Card_conf$(Card)[((I-1)*2+1);1])
3032          NEXT I
3033        NEXT Card
3034    !
3035        MAT Block_list= (0)
3036        Max_col=0
3037        FOR Inp=1 TO Max_in                         ! Block list create
3038          Block_col=1
3039          FOR Card=1 TO Max_card_no
3040            FOR Block=1 TO Max_block
3041              IF Inp=In_port_num(Card,Block) THEN 
3042                Block_list(Inp,Block_col,1)=Card
3043                Block_list(Inp,Block_col,2)=Block
3044                Block_col=Block_col+1
3045              END IF
3046            NEXT Block
3047          NEXT Card
3048          Tmp_max_col=(Block_col-1)*Max_out
3049          IF Tmp_max_col>Max_col THEN Max_col=Tmp_max_col
3050          Disp_matrix((Inp-1)*2+1,1)=Tmp_max_col
3051          Disp_matrix((Inp-1)*2+2,1)=Tmp_max_col
3052          Disp_matrix((Inp-1)*2+1,2)=0
3053          IF Bias_stat_num=1 THEN 
3054            Disp_matrix((Inp-1)*2+2,2)=1
3055          ELSE
3056            Disp_matrix((Inp-1)*2+2,2)=0
3057          END IF
3058        NEXT Inp
3059      ELSE                                         ! Normal Config Mode
3060        Bias_stat_num=Bias_stat(Card_num)     !
3061        FOR Inp_no=1 TO Max_in
3062          IF (Inp_no MOD 2)=0 THEN 
3063            IF Bias_stat_num=1 THEN 
3064              Disp_matrix(Inp_no,1)=Max_out
3065              Disp_matrix(Inp_no,2)=1
3066            ELSE
3067              Disp_matrix(Inp_no,1)=Max_out
3068              Disp_matrix(Inp_no,2)=0
3069            END IF
3070          ELSE
3071            Disp_matrix(Inp_no,1)=Max_out
3072            Disp_matrix(Inp_no,2)=0
3073          END IF
3074        NEXT Inp_no
3075      !
3076      END IF
3077    END SELECT
3078    SUBEXIT
3079 Cont_same_card:                                            !
3080    Max_card_slot=(SIZE(Card_info$,1)-1)
3081    C_type$=Card_info$(0)                                   !
3082    Card_no=1
3083    LOOP
3084      Exit_fg=0
3085    EXIT IF Card_no>Max_card_slot
3086      IF C_type$<>Card_info$(Card_no) THEN 
3087        Exit_fg=1
3088      END IF
3089    EXIT IF Exit_fg=1
3090      Card_no=Card_no+1
3091    END LOOP
3092    Max_card_no=Card_no-1                                    ! Max Card number
3093    RETURN 
3094    !
3095  SUBEND
3096  !==========================================================
3097  !
3098 All_enabl_set:DEF FNAll_enabl_set(@Hp5250)
3099  !==========================================================
3100  ! All card enable set
3101  !----------------------------------------------------------
3102  !
3103    OUTPUT @Hp5250;":ROUT:BIAS:CHAN:ENAB:CARD ALL"
3104    !
3105    OUTPUT @Hp5250;"*OPC?"
3106    ENTER @Hp5250;Cp
3107    RETURN Cp
3108    !
3109  FNEND
3110  !==========================================================
3111 Setup_clr_card:SUB Setup_clr_card(INTEGER Setup_num,REAL Card_no,Set_mem$(*),Card_info$(*))
3112  !==========================================================
3113  !           Setup memory clear card
3114  !----------------------------------------------------------
3115  ! Parameter : Setup_num     : Setup memory number
3116  !           : Card_no       : Card number
3117  !           : Set_mem$(*)   : Setup memory
3118  !           : Crad_info$(*) : Card information data
3119  !----------------------------------------------------------
3120    Max_output_len=12
3121    Bias_dis$="-"
3122  !----------------------------------------------------------
3123    C_type$=Card_info$(Card_no)
3124    Ret=FNCard_in_out_que(C_type$,Max_input,Max_output)
3125    IF C_type$="" THEN 
3126      Max_input=SIZE(Set_mem$,3)
3127      Max_output=12
3128      Setd$=" "
3129    ELSE
3130      Setd$="."
3131    END IF
3132    IF Card_no=0 THEN                          ! Auto Config Mode
3133      FOR C_num=1 TO (SIZE(Card_info$,1)-1)
3134        IF Card_info$(C_num)=C_type$ THEN 
3135          FOR Inp_num=1 TO Max_input
3136            IF Set_mem$(Setup_num,C_num,Inp_num)<>Bias_dis$ THEN 
3137              Set_mem$(Setup_num,C_num,Inp_num)=RPT$(Setd$,Max_output)
3138            END IF
3139          NEXT Inp_num
3140        ELSE
3141          FOR Inp_num=1 TO (SIZE(Set_mem$,3))
3142            Set_mem$(Setup_num,C_num,Inp_num)=RPT$(" ",Max_output_len)
3143          NEXT Inp_num
3144        END IF
3145      NEXT C_num
3146    ELSE                                       ! Normal Config Node
3147      FOR Inp_num=1 TO Max_input
3148        IF Set_mem$(Setup_num,Card_no,Inp_num)<>Bias_dis$ THEN 
3149          Set_mem$(Setup_num,Card_no,Inp_num)=RPT$(Setd$,Max_output)
3150        END IF
3151      NEXT Inp_num
3152    END IF
3153  SUBEND
3154  !==========================================================
3155 Get_card_type:DEF FNGet_card_type$(N)
3156  !==========================================================
3157  !           Get Card type data
3158  !----------------------------------------------------------
3159  ! Parameter : N  : Card type number
3160  !----------------------------------------------------------
3161    SELECT N
3162    CASE 0
3163      RETURN "-----"
3164    CASE 1
3165      RETURN "E5252"
3166    CASE 2
3167      RETURN "E5255"
3168    CASE ELSE
3169      RETURN ""
3170    END SELECT
3171    !
3172  FNEND
3173  !==========================================================
3174 Get_sys_id:DEF FNGet_sys_id$
3175  !==========================================================
3176  !           Get System ID string
3177  !----------------------------------------------------------
3178    RETURN "E5250"
3179  FNEND
3180  !==========================================================
3181 Max_card_type:DEF FNMax_card_type
3182  !==========================================================
3183  !           Get Max Card type
3184  !----------------------------------------------------------
3185    I=1
3186    LOOP
3187    EXIT IF FNGet_card_type$(I)=""
3188      I=I+1
3189    END LOOP
3190    RETURN (I-1)
3191  FNEND
3192  !==========================================================
3193 Sep:DEF FNSep$(N)
3194  !==========================================================
3195  !           Get Data Separater character
3196  !----------------------------------------------------------
3197  ! Parameter : N  : Separater kind number
3198  !----------------------------------------------------------
3199    SELECT N
3200    CASE 1            ! Separater
3201      RETURN CHR$(10)
3202    CASE 2            ! Sub separater
3203      RETURN CHR$(11)
3204    CASE ELSE
3205      RETURN CHR$(10)
3206    END SELECT
3207    !
3208  FNEND
3209  !==========================================================
3210 Get_setup:SUB Get_setup(Sdata$,Snum,Err,Addr,Cinfo$(*),Cconf$(*),Smem$(*),INTEGER Cmode,Bstat(*),Bport(*))
3211  !==========================================================
3212  !           Data convert  VFP <-> COM data
3213  !..........................................................
3214  ! PARAMETER : Sdata$      : Setup data
3215  !           : Snum        : Setup memory number
3216  !           : Err         : Error status
3217  !           : Addr        : HP-IB Address
3218  !           : Cinfo$      : Card information data
3219  !           : Cconf$      : Card Configuration data
3220  !           : Smem$       : Setup memory
3221  !           : Cmode       : Config Mode data
3222  !           : Bstat       : Bias state data
3223  !           : Bport       : Bias port data
3224  !----------------------------------------------------------
3225    DIM Tstr$[14000],Tmp_data$[14000]
3226  !----------------------------------------------------------
3227    Max_slot_num=(SIZE(Cinfo$,1)-1)
3228    Max_setup_num=(SIZE(Smem$,1))
3229    Max_input=(SIZE(Smem$,3))
3232    Sep1$=FNSep$(1)                    ! Data Block separator
3233    Sep2$=FNSep$(2)                    ! Data separator
3234    Err=0
3235    MAT Smem$= (" ")
3236  !----------------------------------------------------------
3237  ! CALL Data_block_read(Setup_data$,Err,Select_block,Block_data$)
3238    IF LEN(Sdata$)=0 THEN Data_error
3239    Tmp_data$=Sdata$
3240  !
3241  ! DISP "Get Setup data start ..."
3242  !
3243  ! DISP "COM->VFP : HP-IB address data read"
3244    CALL Data_block_read(Sdata$,Err,2,Tmp_data$)
3245    IF Err<>0 THEN Data_error
3246    Addr=VAL(Tmp_data$)
3247  !
3248  ! DISP "COM->VFP : Card information data read"
3249    CALL Data_block_read(Sdata$,Err,3,Tmp_data$)
3250    IF Err<>0 THEN Data_error
3251    Tstr$=Tmp_data$
3252    FOR I=0 TO Max_slot_num
3253      Dsp=POS(Tstr$,Sep2$)
3254      IF Dsp=0 THEN 
3255        Cinfo$(I)=TRIM$(Tstr$)
3256      ELSE
3257        Cinfo$(I)=TRIM$(Tstr$[1;Dsp-1])
3258        Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
3259      END IF
3260    NEXT I
3261  !
3262  ! DISP "COM->VFP : Configuration mode data read"
3263    CALL Data_block_read(Sdata$,Err,4,Tmp_data$)
3264    IF Err<>0 THEN Data_error
3265    Cmode=VAL(Tmp_data$)
3266  !
3267  ! DISP "COM->VFP : Card configuration data read"
3268    CALL Data_block_read(Sdata$,Err,5,Tmp_data$)
3269    IF Err<>0 THEN Data_error
3270    Tstr$=Tmp_data$
3271    FOR I=0 TO Max_slot_num
3272      Dsp=POS(Tstr$,Sep2$)
3273      IF Dsp=0 THEN 
3274        Cconf$(I)=TRIM$(Tstr$)
3275      ELSE
3276        Cconf$(I)=TRIM$(Tstr$[1;Dsp-1])
3277        Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
3278      END IF
3279    NEXT I
3280  !
3281  ! DISP "COM->VFP : Bias state data read"
3282    CALL Data_block_read(Sdata$,Err,6,Tmp_data$)
3283    IF Err<>0 THEN Data_error
3284    Tstr$=Tmp_data$
3285    FOR I=0 TO Max_slot_num
3286      Dsp=POS(Tstr$,Sep2$)
3287      IF Dsp=0 THEN 
3288        Bstat(I)=VAL(Tstr$)                            ! Bias state data read
3289      ELSE
3290        Bstat(I)=VAL(Tstr$[1;Dsp-1])                   ! Bias state data read
3291        Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
3292      END IF
3293    NEXT I
3294  !
3295  ! DISP "COM->VFP : Bias port data read"
3296    CALL Data_block_read(Sdata$,Err,7,Tmp_data$)
3297    IF Err<>0 THEN Data_error
3298    Tstr$=Tmp_data$
3299    FOR I=0 TO Max_slot_num
3300      Dsp=POS(Tstr$,Sep2$)
3301      IF Dsp=0 THEN 
3302        Bport(I)=VAL(Tstr$)                            ! Bias port number data read
3303      ELSE
3304        Bport(I)=VAL(Tstr$[1;Dsp-1])                   ! Bias port number data read
3305        Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
3306      END IF
3307    NEXT I
3308  !
3309  ! DISP "COM->VFP : Setup memory data read"
3310    CALL Data_block_read(Sdata$,Err,11,Tmp_data$)
3311    IF Err<>0 THEN Data_error
3312  !
3313    Setup_size=(SIZE(Smem$,2))*(SIZE(Smem$,3))*(13)                               !
3314    Tstr$=Tmp_data$[((Setup_size)*(Snum-1)+1);(Setup_size)]
3315    FOR J=1 TO Max_slot_num
3316      FOR K=1 TO Max_input
3317        Dsp=POS(Tstr$,Sep2$)
3318  !     DISP "COM->VFP : Setup memory data read : setup ";I;" card ";J;" in ";K
3319        IF Dsp=0 THEN 
3320          Smem$(Snum,J,K)=TRIM$(Tstr$)
3321        ELSE
3322          Smem$(Snum,J,K)=TRIM$(Tstr$[1;Dsp-1])
3323          Tstr$=Tstr$[Dsp+1;(LEN(Tstr$)-Dsp)]
3324        END IF
3325      NEXT K
3326    NEXT J
3327  !
3328  ! DISP "Convert Common data -> VFP data completed"
3329    GOTO End_sub
3330 Data_error:                                             !
3331    Err=1
3332 End_sub:                                                !
3333  SUBEND
3334  !==========================================================
