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 / ARC20.ARC / ARCMACS.ARC / NCRPACK.MAC < prev    next >
Text File  |  1989-10-30  |  2KB  |  103 lines

  1. ; NCR-PACKING (GETC_NCR) f}r Turbo-ARC. TR 301089
  2.     .z80
  3.  
  4.     extrn    ncrlen,ncrstate,ncrend,getc_dir,f,ncrlast,rep,cc
  5.     extrn    valcount,inc_long
  6.  
  7.     ld    de,(f)        ; Zeiger auf File
  8.     ld    ix,108h
  9.     add    ix,de        ; Zeiger auf f.feof
  10.  
  11.     ld    a,(ncrstate)    ; CASE NCRSTATE OF ...
  12.     dec    a
  13.     jr    z,state1
  14.     dec    a
  15.     jr    z,state2
  16.     dec    a
  17.     jr    z,state3
  18.  
  19.     ld    a,1        ; NCRSTATE = 0 :
  20.     ld    (ncrstate),a    ; NCRSTATE:=1;
  21.     push    ix
  22.     push    de
  23.     call    getc_dir    ; NCRLAST:=GETC_DIR(F)
  24.     pop    ix
  25.     ld    a,l
  26.     ld    (ncrlast),a
  27.     cp    90h        ; IF NCRLAST=$90 THEN
  28.     jr    z,end_f        ; NCREND:=FALSE;
  29.     jr    end_t
  30.  
  31. state2:    ld    a,1        ; NCRSTATE=2:
  32.     ld    (ncrstate),a    ; NCRSTATE:=1;
  33.     ld    hl,(cc)
  34.     ld    h,0        ; GETC_NCR:=CC;
  35.     ld    a,l
  36.     ld    (ncrlast),a    ; NCRLAST:=CC;
  37. end_t:    ld    a,(ix)
  38.     ld    (ncrend),a
  39.     jr    ende        ; ncrend:=f.feof
  40.  
  41. state3:    ld    a,2        ; NCRSTATE=3:
  42.     ld    (ncrstate),a    ; NCRSTATE:=2;
  43.     ld    hl,(rep)
  44.     ld    h,0        ; GETC_NCR:=REP;
  45. end_f:    xor    a
  46.     ld    (ncrend),a    ; ncrend:=false
  47. ende:    push    hl
  48.     add    hl,hl
  49.     add    hl,hl        ; *4
  50.     ld    de,valcount
  51.     add    hl,de
  52.     push    hl
  53.     call    inc_long    ; INCLONG(VALCOUNT(.CODE.));
  54.     pop    hl
  55.     ret
  56.  
  57. state1:    ld    a,(ncrlast)    ; NCRSTATE=1 :
  58.     cp    90h        ; IF NCRLAST=$90 THEN BEGIN
  59.     jr    nz,stat1_1
  60.     xor    a
  61.     ld    (ncrstate),a    ; NCRSTATE:=0;
  62.     ld    hl,0        ; GETC_NCR:=0;
  63.     jr    end_t        ; END
  64. stat1_1:ld    b,0        ; ELSE BEGIN REP:=0;
  65. stat1lp:inc    b        ; REPEAT REP:=SUCC(REP)
  66.     push    ix
  67.     push    bc
  68.     ld    hl,(f)
  69.     push    hl
  70.     call    getc_dir    ; CC:=GETC_DIR(F)
  71.     pop    bc
  72.     pop    ix
  73.     ld    a,(ncrlast)
  74.     cp    l
  75.     jr    nz,stat1_2    ; UNTIL CC<>NCRLAST
  76.     ld    a,b
  77.     inc    a
  78.     jr    z,stat1_2    ; OR REP=255
  79.     bit    0,(ix)
  80.     jr    z,stat1lp    ; OR F.FEOF
  81. stat1_2:ld    a,l
  82.     ld    (cc),a
  83.     ld    a,b
  84.     ld    (rep),a
  85.     dec    a        ; CASE REP OF ...
  86.     jr    z,rep1
  87.     dec    a
  88.     jr    z,rep2
  89.     ld    a,3        ; REP>=3:
  90.     ld    (ncrstate),a    ; NCRSTATE:=3;
  91.     ld    hl,90h        ; GETC_NCR:=$90;
  92.     jr    end_f        ; NCREND:=FALSE; END;
  93. rep1:    ld    a,l        ; REP=1:
  94.     ld    (ncrlast),a    ; NCRLAST:=CC;
  95.     jr    end_t        ; GETC_NCR:=CC; END;
  96. rep2:    ld    a,2        ; REP=2:
  97.     ld    (ncrstate),a    ; NCRSTATE:=2;
  98.     ld    hl,(ncrlast)
  99.     ld    h,0        ; GETC_NCR:=NCRLAST;
  100.     jr    end_f        ; NCREND:=FALSE; END;
  101.  
  102.     end
  103.