/* REXX */ ZocCls CALL ZocTimeout 60 ZocSuppressOutput 1 /* 1=запрет вывода на экран */ CALL ZocSend "^Z" CALL ZocWait ">" CALL ZocSend "/2^M" CALL ZocWait "2>" call ZocSend "R,1^M" /* Эта строка нужна если при нач. выводе N буфф. не выводится строка default Rd Buf */ call ZocWait "2>" CALL ZocReceiveBuf 2048 CALL ZocSend "?" CALL ZocDelay 0.6 CALL ZocSend "^M" CALL ZocWait "2>" abst= ZocReceiveBuf(0) i=wordpos("Default",abst,1) RD_BUFF=x2d(substr(word(abst,i-8),1,6)) CALL ZocReceiveBuf 2048 CALL ZocSend "x1^M" CALL ZocWait "2>" abst= ZocReceiveBuf(0) abst=translate(abst," ",","||"-",) i=wordpos("PhyCyls",abst,1) pBASE=word(abst,i+1) i=wordpos(pBASE,abst,i+2) SPT=x2d(word(abst,i+1)) call ZocSend "A0^M" call ZocWait "2>" BULK=201 /* трэков=обработка пакетом */ HEAD="00" LCYL=0 NEXT: HEAD= ZocAsk("Please enter phys HEAD+LCYL(SA.OFFSET)", substr(HEAD,1,1)||","||d2x(LCYL,03)) IF HEAD= "##CANCEL##" THEN DO SIGNAL BYE END LCYL=x2d(substr(HEAD,3,3)) HEAD=substr(HEAD,1,2) TRACK: FILE="D:\_dumps\0"||substr(HEAD,1,1)||"."||d2x(LCYL,03)||".BIN" IF STREAM(file, "C", "QUERY EXISTS")\="" THEN DO ZocFileDelete(FILE) END CALL STREAM file,"C","OPEN WRITE" pCYL=d2x(LCYL+x2d(pBASE),08) call ZocSend "s"||pCYL||","||HEAD||"22^M" /* HEAD=0, или 1, ... */ call ZocWait "2>" call ZocSend "r,0,"||d2x(SPT,4)||"^M" call ZocWait "2>" do i=0 to SPT-1 CALL ZocReceiveBuf 2048 w=d2x(RD_BUFF+i,4) call ZocSend "B"||w||","||w||"^M" call ZocWait "2>" abst= ZocReceiveBuf(0) BINSTRING="" patt=d2x(x2d(w)*512,08) k=pos(patt,abst,1) abst=delstr(abst,1,k+8) k=1 do 32 do 16 BINSTRING=BINSTRING||word(abst,K) k=k+1 end k=k+1 end CALL CHAROUT file,X2C(BINSTRING) ZocNotify "HD:"||"0"||substr(HEAD,1,1)||" CYL:"||pCYL||" Sec:"||d2x(i,04) end CALL STREAM file,"C","CLOSE" LCYL=LCYL+1 if LCYL<BULK then signal TRACK LCYL=0 BULK=201 SIGNAL NEXT BYE: say "BYE!" EXIT |