: PRINT-DIGIT ( X / Y / DIGIT -> NEXTX / Y )
   3 + >R 2DUP R>
   SPRITE-AREA SWAP GET-SPRITE-CTRL-BLOCK >R>
   SPRITE-AREA SWAP 2SWAP 8 PUT-SPRITE
   SPRITE-AREA R> SPRITE-SIZE
   DROP 1 << SWAP >R + R>
   ;

: PRINT-ZEROS ( X / Y / NUMBER -> )
   10000000 /MOD SWAP >R PRINT-DIGIT R>
    1000000 /MOD SWAP >R PRINT-DIGIT R>
     100000 /MOD SWAP >R PRINT-DIGIT R>
      10000 /MOD SWAP >R PRINT-DIGIT R>
       1000 /MOD SWAP >R PRINT-DIGIT R>
        100 /MOD SWAP >R PRINT-DIGIT R>
         10 /MOD SWAP >R PRINT-DIGIT R>
                         PRINT-DIGIT
   2DROP
   ;

: PRINT-NO-ZEROS ( X / Y / NUMBER -> )
   10000000 /MOD SWAP >R -DUP IF PRINT-DIGIT THEN R>
    1000000 /MOD SWAP >R -DUP IF PRINT-DIGIT THEN R>
     100000 /MOD SWAP >R -DUP IF PRINT-DIGIT THEN R>
      10000 /MOD SWAP >R -DUP IF PRINT-DIGIT THEN R>
       1000 /MOD SWAP >R -DUP IF PRINT-DIGIT THEN R>
        100 /MOD SWAP >R -DUP IF PRINT-DIGIT THEN R>
         10 /MOD SWAP >R -DUP IF PRINT-DIGIT THEN R>
                                 PRINT-DIGIT
   2DROP
   ;

: PRINT-NUMBER ( X / Y / NUMBER / FLAG -> )
   IF
      PRINT-ZEROS
   ELSE
      PRINT-NO-ZEROS
   THEN
   ;
