home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / A / CRLZH21.LBR / PUTCODE.MYC / PUTCODE.MYC
Text File  |  2000-06-30  |  1KB  |  51 lines

  1. ;
  2. ;   PUTCODE_  - Output bit encoded string to file
  3. ;
  4. ;    Action    - Takes a bit-encoded string and concatenates it to any partial
  5. ;          one left behind from previous invocation.  If a full byte is
  6. ;          available, it is output.  A partial byte (or any residue
  7. ;          after a byte is output) is saved for the next invocation.
  8. ;    Input    - H/L is the bit string to be output (in the most significant
  9. ;            'A-reg' bits)
  10. ;          A   is the length of bit string
  11. ;    Output    - See Action
  12. ;    Entry    - Putcode_
  13. ;    Registers - All scratch except B/C (preserved)
  14. ;    Calls    - Putc_
  15. ;
  16. ;typedef unsigned char uchar;
  17. ;
  18. ;void Putcode(int l, unsigned c)        /* output c bits */
  19. ;{
  20. ;extern FILE *outfile;
  21. ;extern unsigned putbuf;
  22. ;extern uchar putlen;
  23. ;    putbuf |= c >> putlen;
  24. ;    if ((putlen += l) >= 8) {
  25. ;        putc(putbuf >> 8, outfile);
  26. ;        if ((putlen -= 8) >= 8) {
  27. ;            putc(putbuf, outfile);
  28. ;            codesize += 2;
  29. ;            putlen -= 8;
  30. ;            putbuf = c << (l - putlen);
  31. ;        } else {
  32. ;            putbuf <<= 8;
  33. ;        }
  34. ;    }
  35. ;}
  36.  
  37. PUTCODE_:
  38.     MOV    B,A            ; Copy count
  39.     MVI    A,00H            ; Load partial buffer
  40. CSAVE    EQU    $-1
  41. LP2:    DAD    H            ; Shift left
  42.     RAL                ; Shift CY to A
  43.     JNC    BOT            ; If A not full, save it and return
  44.     CALL    PUTC_            ; Output full byte in a, preserve regs.
  45.     MVI    A,01B            ; Prepare CY when next 8 bits have been gotten
  46. BOT:    DCR    B            ; Count
  47.     JNZ    LP2            ; Continue
  48.     STA    CSAVE            ; Save for next time
  49.     RET                ; And Exit
  50.  
  51.