五、程序源代码及相关注释
REM MAC MAIN
DEF MAC MAIN
;
;-------------------------------------------------
;DESIGNED BY LIAOZHICAI ,RONGAN TELECOM,2006-12-8
;REDESIGNED AT 2007-11-25
;-------------------------------------------------
;
SET ERR
RET UWA .ERR_LIST
REM .ERR,.ERRCOUNT,.DN_COUNT
RES ERR
DEF .ERR=0,.ERRCOUNT=0,.DN_COUNT=0 ==》定义全局变量,ERR用于进行出
GET UWA .ERR_LIST 错判断,ERRCOUNT进行错误计数,
DN_COUNT则对执行成功号码计数
:DN_LIST ERR_LIST用于暂存不成功号码
:RESULT
RET UWA .ERR_LIST
REM MAC DN_LIST
REM .ERR,.ERRCOUNT,.DN_COUNT
EM
REM MAC ERRDEAL
DEF MAC ERRDEAL ==》出错判断及处理模块
.ERR=0
BAS=A
IF .ERRCOUNT>=40T ==》超过40个错误则中断执行
:RESULT
RET UWA .ERR_LIST
REM .ERR,.ERRCOUNT,.DN_COUNT
EXIT
END
SCA RBF,1,1K,'NOT SUCCESSFUL'
IF RCX<>0
.ERR=1
BYT .ERR_LIST+.ERRCOUNT*8T=' %0'
.ERRCOUNT=.ERRCOUNT+1
RET MAC
END
SCA RBF,1,1K,'CHGNBR' ==》有改号音用户不执行,视为出错
IF RCX<>0
.ERR=1
BYT .ERR_LIST+.ERRCOUNT*8T=' %0'
.ERRCOUNT=.ERRCOUNT+1
RET MAC
END
EM
REM MAC RESULT
DEF MAC RESULT ==》执行结果汇总显示模块
BAS=T
ADD .C=0
ADD .DN0,.DN1,.DN2,.DN3,.DN4,.DN5,.DN6,.DN7
CLR
LOC 2,15
TIME
WRI ''
WRI ' SUCCESSFUL DN NUMBER IS : ',.DN_COUNT
WRI ''
IF .ERRCOUNT=0
WRI ' CONGRATULATION , NO ERROR OCCURS ! (-_-)(-_-)(-_-)(-_-)'
WRI ''
RET MAC
ENDIF
IF .ERRCOUNT>=40T
WRI ' ALERT: O V E R F L O W !!! (*@*)(*@*)(*@*)(*@*)'
WRI ''
ENDIF
WRI ' NOT SUCCESSFUL DN NUMBER IS :',.ERRCOUNT
WRI ''
WRI ' LIST AS FOLLOWS ,YOU MUST CHECK IT : '
WRI ''
BAS=A
COU .ERRCOUNT ==》读取ERR_LIST列表,将不成功号码按3个一行显示
IF .C<.ERRCOUNT
.DN0=BYT .ERR_LIST+.C*8T
.DN1=BYT .ERR_LIST+.C*8T+1T
.DN2=BYT .ERR_LIST+.C*8T+2T
.DN3=BYT .ERR_LIST+.C*8T+3T
.DN4=BYT .ERR_LIST+.C*8T+4T
.DN5=BYT .ERR_LIST+.C*8T+5T
.DN6=BYT .ERR_LIST+.C*8T+6T
.DN7=BYT .ERR_LIST+.C*8T+7T
WRI ' ',&
WRI '%(.DN0)%(.DN1)%(.DN2)%(.DN3)%(.DN4)%(.DN5)%(.DN6)%(.DN7)',&\.C=.C+1
END
IF .C-.C/3*3=0
WRI ''
ENDIF
IF .C>40T
EXIT
ENDIF
ENDC
WRI ''
WRI ''
EM
REM MAC A
DEF MAC A ==》普通用户割接模块
;
;--------------------------------------------------
;DESIGNED BY LIAOZHICAI ,RONGAN TELECOM,2006-12-8
;P0=MOVEDN,P1=NEWEN
;USED FOR S1240 E74L204
;--------------------------------------------------
;
ADD .NA1,.NA2,.NA3,.NA4
ADD .TN1,.TN2,.TN3,.TN4
ADD .BCGID_1,.BCGID_2,.BCGID
ADD .SUBGRP_1,.SUBGRP_2,.SUBGRP
ADD .OCB_0,.OCB_1,.OCB=0
ADD .SUBCTRL=0,.PASSWORD=0
ADD .DHZL_1=0,.DHZL_2=0
ADD .TOTALBAR=0
ADD .COU=0,.COU_CTRL=0
ADD .SUBCTRL0='',.SUBCTRL1='',.SUBCTRL2=''
BAS=T
SUF=T
COU 8T
ADD .F%(.COU)=''
.COU=.COU+1
ENDC
.COU=0
<4296:DN=K'%0.\:LAST ==》显示号码,并获取相关信息
SCA RBF,1,1K,'BCGID'
IF RCX<>0
BAS=T
.BCGID_1=BYT RBF+RCX+7T
.BCGID_2=BYT RBF+RCX+8T
BAS=A
.BCGID='%(.BCGID_1)%(.BCGID_2)'
BAS=T
:BCGUSER %(.BCGID),%0,%1
RET MAC
ENDBCG
:ERRDEAL %0 ==》对指令执行结果进行分析,出错则中断
IF .ERR=1
RET MAC
ENDERR
SCA RBF,1,1K,'H''' ==》读取号码的原设备号值
BAS=T
IF RCX<>0
.NA1=BYT RBF+RDX+2T
.NA2=BYT RBF+RDX+3T
.NA3=BYT RBF+RDX+4T
.NA4=BYT RBF+RDX+5T
.TN1=BYT RBF+RDX+18T
.TN2=BYT RBF+RDX+19T
.TN3=BYT RBF+RDX+20T
.TN4=BYT RBF+RDX+21T
BAS=A
ADD .NA_ORIG='%(.NA1)%(.NA2)%(.NA3)%(.NA4)'
ADD .TN_ORIG='%(.TN1)%(.TN2)%(.TN3)%(.TN4)'
BAS=T
ELS
BAS=A
BYT .ERR_LIST+.ERRCOUNT*8T=' %0'
.ERRCOUNT=.ERRCOUNT+1 ==》空号退出
RET MAC
ENDEN
SCA RBF,1,1K,'SUBGRP'
IF RCX<>0 AND WOR RBF+RDX+9T<>2031H ==》为用户组1则不添加
BAS=T
.SUBGRP_1=BYT RBF+RDX+9T
.SUBGRP_2=BYT RBF+RDX+10T
BAS=A
.SUBGRP='%(.SUBGRP_1)%(.SUBGRP_2)'
BAS=T
.F%(.COU)=',7=',.F%(.COU+1)='%(.SUBGRP)'
.COU=.COU+2
ENDIF
SCA RBF,1,1K,'CGLIP' ==》各项程控功能判断
IF RCX<>0
.F%(.COU)=',23=',.F%(.COU+1)='1&1'
.COU=.COU+2
END
SCA RBF,1,1K,'INTCP'
IF RCX<>0
IF BYT RBF+RDX+8T='M'
.F%(.COU)=',13=',.F%(.COU+1)='6'
.COU=.COU+2
ORIF BYT RBF+RDX+8T='O'
.F%(.COU)=',13=',.F%(.COU+1)='8'
.COU=.COU+2
END
ENDIF
SCA RBF,1,1K,'PAYPHONE'
IF RCX<>0
.F%(.COU)=',10=',.F%(.COU+1)='2&3'
.COU=.COU+2
END
SCA RBF,1,1K,'TOTALBAR'
IF RCX<>0
.TOTALBAR=1
END
SCA RBF,1,1K,'11832304'
IF RCX<>0
.DHZL_1=1
ENDIF
SCA RBF,1,1K,'11832305'
IF RCX<>0
.DHZL_2=1
ENDIF
SCA RBF,1,1K,'PERM' ==》OCB值仅判断首字
IF RCX<>0
IF WOR RBF+RDX+6T=4D45H
.OCB_0='EMER',.OCB_1='G',.OCB=1
ORIF WOR RBF+RDX+6T=4F4CH
.OCB_0='LOCA',.OCB_1='L',.OCB=1
ORIF WOR RBF+RDX+6T=5553H
.OCB_0='SUBU',.OCB_1='RBAN',.OCB=1
ORIF WOR RBF+RDX+6T=414EH
.OCB_0='NAT',.OCB_1='',.OCB=0
ORIF WOR RBF+RDX+6T=4E49H
.OCB_0='INT',.OCB_1='',.OCB=1
ENDIF
ENDIF
SCA RBF,1,1K,'CFWDU'
IF RCX<>0
.SUBCTRL=1
.SUBCTRL%(.COU_CTRL)='&8'
.COU_CTRL=.COU_CTRL+1
ENDIF
SCA RBF,1,1K,'CFWDBSUB'
IF RCX<>0 AND WOR RBF+RDX+9T<>3131H AND WOR RBF+RDX+11T<>3338H
.SUBCTRL=1
.SUBCTRL%(.COU_CTRL)='&4'
.COU_CTRL=.COU_CTRL+1
ENDIF
SCA RBF,1,1K,'CFWDNOR'
IF RCX<>0 AND WOR RBF+RDX+9T<>3131H AND WOR RBF+RDX+11T<>3338H
.SUBCTRL=1
.SUBCTRL%(.COU_CTRL)='&6'
.COU_CTRL=.COU_CTRL+1
ENDIF
SCA RBF,1,1K,'PASSWORD'
IF RCX<>0
.PASSWORD=1
ADD .PASS1=BYT RBF+RDX+11T
ADD .PASS2=BYT RBF+RDX+12T
ADD .PASS3=BYT RBF+RDX+13T
ADD .PASS4=BYT RBF+RDX+14T
.OCB=0
.SUBCTRL=0
ENDIF
<4295:DN=K'%0,EN=H'%(.NA_ORIG)&%(.TN_ORIG),48.\:LAST
:ERRDEAL %0
IF .ERR=1
RET MAC
ENDERR
<4291:DN=K'%0,EN=H'%1.\:LAST
:ERRDEAL %0
IF .ERR=1
RET MAC
ENDERR
BAS=A
IF .DHZL_1=1
<4294:DN=K'%0,CFWD=ACTIVATE&CFWDBSUB&K'11832304.\:LAST
END
IF .DHZL_2=1
<4294:DN=K'%0,CFWD=ACTIVATE&CFWDNOR&K'11832305.\:LAST
END
IF .PASSWORD=1 ==》INTCP与PASSWORD必须分开执行
<4294:DN=K'%0,28=3&2&%(.OCB_0)%(.OCB_1)
<,40=1&27%(.SUBCTRL0)%(.SUBCTRL1)%(.SUBCTRL2)
<,19=1&"%(.PASS1)%(.PASS2)%(.PASS3)%(.PASS4)".
:LAST
ORIF .SUBCTRL=1
<4294:DN=K'%0%(.F0)%(.F1)%(.F2)%(.F3)%(.F4)
<%(.F5)%(.F6)%(.F7),28=3&2&%(.OCB_0)%(.OCB_1)
<,40=1%(.SUBCTRL0)%(.SUBCTRL1)%(.SUBCTRL2).
:LAST
ORIF .OCB=1
<4294:DN=K'%0%(.F0)%(.F1)%(.F2)%(.F3)%(.F4)
<%(.F5)%(.F6)%(.F7),28=3&2&%(.OCB_0)%(.OCB_1).
:LAST
ENDPASS
IF .COU<>0 AND .SUBCTRL=0 AND .OCB=0
<4294:DN=K'%0%(.F0)%(.F1)%(.F2)%(.F3)%(.F4)
<%(.F5)%(.F6)%(.F7).
:LAST
ENDIF
:ERRDEAL %0
IF .ERR=1
RET MAC
ENDERR
IF .TOTALBAR=1
<4294:DN=K'%0,OCB=ADD&TOTALBAR.\:LAST
END
.DN_COUNT=.DN_COUNT+1
EM
REM MAC BCGUSER
DEF MAC BCGUSER ==》与MACRO A类似,改为BCG相关指令
ADD .NA1,.NA2,.NA3,.NA4
ADD .TN1,.TN2,.TN3,.TN4
ADD .BCGID_1,.BCGID_2,.BCGID
ADD .PN_1ST,.PN_2ND,.PN1,.PN2,.PN3,.PN4,.PN5,.PN6,.PN7
ADD .SUBGRP_1,.SUBGRP_2,.SUBGRP
ADD .OCB_0,.OCB_1,.OCB=0
ADD .SUBCTRL=0,.PASSWORD=0
ADD .DHZL_1=0,.DHZL_2=0
ADD .TOTALBAR=0
ADD .COU=0,.COU_CTRL=0
ADD .SUBCTRL0='',.SUBCTRL1='',.SUBCTRL2=''
BAS=T
SUF=T
COU 10T
ADD .F%(.COU)=''
.COU=.COU+1
ENDC
.COU=0
<4381:DN=K'%1.\:LAST
:ERRDEAL %1
IF .ERR=1
RET MAC
ENDERR
SCA RBF,1,1K,'H'''
IF RCX<>0
.NA1=BYT RBF+RDX+2T
.NA2=BYT RBF+RDX+3T
.NA3=BYT RBF+RDX+4T
.NA4=BYT RBF+RDX+5T
.TN1=BYT RBF+RDX+23T
.TN2=BYT RBF+RDX+24T
.TN3=BYT RBF+RDX+25T
.TN4=BYT RBF+RDX+26T
BAS=A
ADD .NA_ORIG='%(.NA1)%(.NA2)%(.NA3)%(.NA4)'
ADD .TN_ORIG='%(.TN1)%(.TN2)%(.TN3)%(.TN4)'
BAS=T
ELS
BAS=A
BYT .ERR_LIST+.ERRCOUNT*8T=' %0'
.ERRCOUNT=.ERRCOUNT+1、
RET MAC
END
SCA RBF,1,1K,'PN'
IF RCX<>0
.PN1=BYT RBF+RDX+5T
.PN2=BYT RBF+RDX+6T
.PN3=BYT RBF+RDX+7T
.PN4=BYT RBF+RDX+8T
.PN5=BYT RBF+RDX+9T
.PN6=BYT RBF+RDX+10T
.PN7=BYT RBF+RDX+11T
BAS=A
.PN_1ST='%(.PN1)%(.PN2)%(.PN3)%(.PN4)' ==》支持最多7位位长的PN
.PN_2ND='%(.PN5)%(.PN6)%(.PN7)'
BAS=T
ENDIF
SCA RBF,1,1K,'SUBGRP'
IF RCX<>0 AND WOR RBF+RDX+9T<>2031H
BAS=T
.SUBGRP_1=BYT RBF+RDX+9T
.SUBGRP_2=BYT RBF+RDX+10T
BAS=A
.SUBGRP='%(.SUBGRP_1)%(.SUBGRP_2)'
BAS=T
.F%(.COU)=',7=',.F%(.COU+1)='%(.SUBGRP)'
.COU=.COU+2
ENDIF
SCA RBF,1,1K,'CGLIP'
IF RCX<>0
.F%(.COU)=',23=',.F%(.COU+1)='1&1'
.COU=.COU+2
END
SCA RBF,1,1K,'INTCP'
IF RCX<>0
IF BYT RBF+RDX+8T='M'
.F%(.COU)=',13=',.F%(.COU+1)='6'
.COU=.COU+2
ORIF BYT RBF+RDX+8T='O'
.F%(.COU)=',13=',.F%(.COU+1)='8'
.COU=.COU+2
END
ENDIF
SCA RBF,1,1K,'BLNGLEV'
IF RCX<>0
IF BYT RBF+RDX+17T='I'
.F%(.COU)=',15=',.F%(.COU+1)='1&2'
.COU=.COU+2
END
ENDIF
SCA RBF,1,1K,'PAYPHONE'
IF RCX<>0
.F%(.COU)=',10=',.F%(.COU+1)='2&3'
.COU=.COU+2
END
SCA RBF,1,1K,'TOTALBAR'
IF RCX<>0
.TOTALBAR=1
END
SCA RBF,1,1K,'11832304'
IF RCX<>0
.DHZL_1=1
ENDIF
SCA RBF,1,1K,'11832305'
IF RCX<>0
.DHZL_2=1
ENDIF
SCA RBF,1,1K,'PERM'
IF RCX<>0
IF WOR RBF+RDX+6T=4D45H
.OCB_0='EMER',.OCB_1='G',.OCB=1
ORIF WOR RBF+RDX+6T=4F4CH
.OCB_0='LOCA',.OCB_1='L',.OCB=1
ORIF WOR RBF+RDX+6T=5553H
.OCB_0='SUBU',.OCB_1='RBAN',.OCB=1
ORIF WOR RBF+RDX+6T=414EH
.OCB_0='NAT',.OCB_1='',.OCB=0
ORIF WOR RBF+RDX+6T=4E49H
.OCB_0='INT',.OCB_1='',.OCB=1
ENDIF
ENDIF
SCA RBF,1,1K,'CFWDU'
IF RCX<>0
.SUBCTRL=1
.SUBCTRL%(.COU_CTRL)='&8'
.COU_CTRL=.COU_CTRL+1
ENDIF
SCA RBF,1,1K,'CFWDBSUB'
IF RCX<>0 AND WOR RBF+RDX+9T<>3131H AND WOR RBF+RDX+11T<>3338H
.SUBCTRL=1
.SUBCTRL%(.COU_CTRL)='&4'
.COU_CTRL=.COU_CTRL+1
ENDIF
SCA RBF,1,1K,'CFWDNOR'
IF RCX<>0 AND WOR RBF+RDX+9T<>3131H AND WOR RBF+RDX+11T<>3338H
.SUBCTRL=1
.SUBCTRL%(.COU_CTRL)='&6'
.COU_CTRL=.COU_CTRL+1
ENDIF
SCA RBF,1,1K,'PASSWORD'
IF RCX<>0
.PASSWORD=1
ADD .PASS1=BYT RBF+RDX+11T
ADD .PASS2=BYT RBF+RDX+12T
ADD .PASS3=BYT RBF+RDX+13T
ADD .PASS4=BYT RBF+RDX+14T
.OCB=0
.SUBCTRL=0
ENDIF
BAS=A
<4380:DN=K'%1,EN=H'%(.NA_ORIG)&%(.TN_ORIG),48.\:LAST
:ERRDEAL %1
IF .ERR=1
RET MAC
ENDERR
<4430:BCGID=%0,EN=H'%(.NA_ORIG)&%(.TN_ORIG),OPTION=REMOVE.\:LAST
<4430:BCGID=%0,EN=H'%2,OPTION=ADD.\:LAST
:ERRDEAL %1
IF .ERR=1
RET MAC
ENDERR
<4378:BCGID=%0,DN=K'%1,EN=H'%2,PN=K'%(.PN_1ST)%(.PN_2ND).\:LAST
:ERRDEAL %1
IF .ERR=1
RET MAC
ENDERR
IF .DHZL_1=1
<4382:DN=K'%1,CFWD=ACTIVATE&CFWDBSUB&K'11832304.\:LAST
END
IF .DHZL_2=1
<4382:DN=K'%1,CFWD=ACTIVATE&CFWDNOR&K'11832305.\:LAST
END
IF .PASSWORD=1
<4382:DN=K'%1,28=3&2&%(.OCB_0)%(.OCB_1)
<,40=1&27%(.SUBCTRL0)%(.SUBCTRL1)%(.SUBCTRL2)
<,19=1&"%(.PASS1)%(.PASS2)%(.PASS3)%(.PASS4)".
:LAST
ORIF .SUBCTRL=1
<4382:DN=K'%1%(.F0)%(.F1)%(.F2)%(.F3)%(.F4)
<%(.F5)%(.F6)%(.F7)%(.F8)%(.F9),28=3&2&%(.OCB_0)%(.OCB_1)
<,40=1%(.SUBCTRL0)%(.SUBCTRL1)%(.SUBCTRL2).
:LAST
ORIF .OCB=1
<4382:DN=K'%1%(.F0)%(.F1)%(.F2)%(.F3)%(.F4)
<%(.F5)%(.F6)%(.F7)%(.F8)%(.F9),28=3&2&%(.OCB_0)%(.OCB_1).
:LAST
ENDPASS
IF .COU<>0 AND .SUBCTRL=0 AND .OCB=0
<4382:DN=K'%1%(.F0)%(.F1)%(.F2)%(.F3)%(.F4)
<%(.F5)%(.F6)%(.F7)%(.F8)%(.F9).
:LAST
ENDIF
:ERRDEAL %1
IF .ERR=1
RET MAC
ENDERR
IF .TOTALBAR=1
<4382:DN=K'%1,OCB=ADD&TOTALBAR.\:LAST
END
.DN_COUNT=.DN_COUNT+1
EM
巧用RBF解决S1240交换机用户割接中的相关问题(二)相关范文