( COMPUTE DELTAS FOR STORAGE ROUTINE )                          ( THIS ROUTINE COMPUTES DELTA FOR ONE COORDINATE )              SUBR CDEL1 ( DE=R,C B=COORD PTR, C=DIR )                        B PUSH, D PUSH,                                                 B PUSH, C A MOV, MPL0 ADI, A C MOV, node^ CALL, M L MOV,        0 H MVI, B POP, L A MOV, A ANA, 0<>, IF,                        H PUSH, D PUSH, move:node CALL,                                 B C MOV, node^ CALL, M E MOV, H INX, M D MOV, XCHG,             XTHL, XCHG, node^ CALL, M C MOV, H INX, M B MOV,                H POP, ( TARGET ) D POP, ( TIME ) CDELTA CALL, E A MOV,         THEN, D POP, B POP, A B MOV, RET,                               -->                                                                                                                                                                                                                                                                                                                             ( SET DELTAS FOR BOTH COORDINATES FOR A GIVEN PATH )            SUBR SETDELTS                                                   NBX B MVI, CDEL1 CALL, B PUSH, C A MOV, NDX0 ADI, A C MOV,      node^ CALL, B M MOV, B POP, NBY B MVI, CDEL1 CALL,              B PUSH, C A MOV, NDY0 ADI, A C MOV,                             node^ CALL, B M MOV, B POP, RET,                                XC? IFTRUE                                                      <STK                                                            CODE XADJ H POP, xadj CALL, H PUSH, NEXT                        CODE YADJ H POP, yadj CALL, H PUSH, NEXT                        STK>                                                            IFEND                                                                                                                           -->                                                                                                                                                                                             ( COMPUTE DISTANCES )                                           SUBR CDD noder^ CALL, M A MOV, A ANA, RZ, B PUSH, D PUSH,       GMRC SDED, C A MOV, GMD STA, move:node CALL, GMNRC SDED,        NODX C MVI, GMRC LDED, node^ CALL,                              M E MOV, H INX, M D MOV, H INX, RCX SDED,                       M E MOV, H INX, M D MOV, RCY SDED,                              GMNRC LDED, node^ CALL,                                         M E MOV, H INX, M D MOV, H INX, NRCX SDED,                      M E MOV, H INX, M D MOV, NRCY SDED,                             -->                                                                                                                                                                                                                                                                                                                                                                                                                                                             ( COMPUTE DISTANCE )                                            RCY LHLD, A ANA, D DSBC, L A MOV, SQUARE CALL, H PUSH,          NRCX LDED, RCX LHLD, A ANA, D DSBC, L A MOV,                    SQUARE CALL, D POP, D DAD, sqrt CALL, A B MOV, ( B= DIST )      GMRC LDED, GMD LDA, MPL0 ADI, A C MOV, node^ CALL, B M MOV,     GMD LDA, CMA, 3 ANI, MPL0 ADI, A C MOV,                         GMNRC LDED, node^ CALL,                                         B M MOV, D POP, B POP, RET,                                     F= Cdl                                                          CODE C-DST <ASSEMBLE B PUSH,                                    0 D LXI, 0 C MVI,                                               LABEL Cdl CDD CALL,                                             C A MOV, A INR, A C MOV, 4 CPI, Cdl JRNZ, 0 C MVI,              E A MOV, A INR, A E MOV, NCOLS CPI, Cdl JRNZ, 0 E MVI,          D A MOV, A INR, A D MOV, NROWS CPI, Cdl JRNZ,                   B POP, NEXT ASSEMBLE> -->                                       ( COMPUTE DELTAS FOR WHOLE MATRIX )                             CODE MAKEDELTS B PUSH,                                          0 D LXI, 0 C MVI,                                               BEGIN, BEGIN, BEGIN, SETDELTS CALL,                             C A MOV, A INR, A C MOV, 4 CPI, 0=, END, 0 C MVI,               E A MOV, A INR, A E MOV, NCOLS CPI, 0=, END, 0 E MVI,           D A MOV, A INR, A D MOV, NROWS CPI, 0=, END,                    B POP, NEXT                                                     : FIXVGER NCOLS 0 DO NROWS 0 DO                                 J I NODX NODE@ XADJ J I NBX NODE!                               J I NODY NODE@ YADJ J I NBY NODE! LOOP LOOP ;                   : MD FIXVGER C-DST MAKEDELTS ;                                  -->                                                                                                                                                                                                                                                             