home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / packet / rli120.ark / EDMSG.MAC < prev    next >
Text File  |  1987-05-11  |  4KB  |  160 lines

  1. ; EDMSG.MAC - 5/11/87 - Edit message headers.
  2.  
  3.     .z80
  4.     maclib    TNC.LIB
  5.  
  6.     entry    edmsg,etmsg,mm8,mm9,mm9a,mm10,mm11,mm12
  7.     entry    etflg,etmto,etmat,etmty,etmtit,etmerr
  8.  
  9.     external    change,mfcb,mrec,mhtitl,mhbbs
  10.     external    msgnr,mlhd,phdr,firmsg,getto,mhtit
  11.     external    mmhs,mhnr,mhto,mhfrom,mhstat,mhtype,mhprev
  12.     external    fcb1,fcb2,getcmd,cmdlen,cmdtyp,waitc,@cmp
  13.     external    erfind,erwhat,@prtx,@mcmd,numb,decbin,logmnr
  14.  
  15.     asciictl
  16.     tncdefs
  17.     bdosdef
  18.  
  19. ; Edit the message headers.
  20.  
  21.     dseg
  22. edchg:    ds    1        ; Set true if this message changed
  23. mm8:    ds    2
  24. mm9:    ds    2
  25. mm9a:    ds    2
  26. mm10:    ds    2
  27. mm11:    ds    2
  28. mm12:    ds    2
  29. etflg:    ds    1
  30. etflg2:    ds    1
  31. etmto:    ds    2
  32. etmat:    ds    2
  33. etmty:    ds    2
  34. etmtit:    ds    2
  35. etmerr:    ds    2
  36.     cseg
  37.  
  38. getinp:    call    getcmd
  39.     ckcmd    getinp,gtina,gtina
  40.     ld    a,(cmdlen)
  41.     or    a
  42.     ret
  43. ; Timeout or disconnect.
  44. gtina:    pop    hl        ; Clean stack
  45.     ret            ; Get out with no change
  46.  
  47. etmsg:    mvim    etflg2,true    ; ET command (not E)
  48.     cmpm    etflg,false    ; Config allows ET?
  49.     jp    z,erwhat    ; If not, give error
  50.     jr    edmsg0        ; Join common code
  51.  
  52. edmsg:    mvim    etflg2,false    ; E command (not ET)
  53. edmsg0:    dodosa    setdma,mmhs    ; Point I/O to msg header
  54.     mvim    edchg,false
  55.     zmov    numb,fcb2+1,5    ; Message number
  56.     call    decbin        ; Make it binary
  57.     jp    c,erwhat    ; Not a number
  58.     ld    (msgnr),hl    ; Save it
  59.     movw    mrec,mlhd    ; Prepare to read last header
  60. edmsga:    dtz    mrec        ; Any headers left?
  61.     jp    z,erfind    ; No, not found
  62.     dodosa    rrec,mfcb    ; Read message header
  63.     ld    hl,(msgnr)    ; Msg we want
  64.     ld    de,(mhnr)    ; Msg we got
  65.     or    a        ; Clear carry
  66.     sbc    hl,de        ; Right one?
  67.     jr    z,edmsgi    ; Yes
  68.     movw    mrec,mhprev    ; Point to previous header
  69.     jr    edmsga        ; and try that one
  70.  
  71. edmsgi:    mvim    firmsg,true    ; To force printing of column head
  72.     cmpm    etflg2,true    ; E or ET command?
  73.     jp    z,etmsga    ; Go if ET
  74.     call    phdr        ; Print the header
  75.     prtx    mm8        ; Ask about TO
  76.     call    getinp        ; Get response
  77.     jr    z,edmsgc    ; No change
  78.     mvim    edchg,true    ; Mark as changed
  79.     zmov    mhto,fcb1+1,6    ; New TO
  80. edmsgc:    prtx    mm9        ; Ask about FROM
  81.     call    getinp        ; Get response
  82.     jr    z,edmsgq    ; No change
  83.     mvim    edchg,true    ; Mark as changed
  84.     zmov    mhfrom,fcb1+1,6    ; New FROM
  85. edmsgq:    prtx    mm9a        ; Ask about AT
  86.     call    getinp        ; Get response
  87.     jr    z,edmsgd    ; No change
  88.     mvim    edchg,true    ; Mark as changed
  89.     zmov    mhbbs,fcb1+1,6    ; New AT
  90. edmsgd:    prtx    mm10        ; Ask about TITLE
  91.     call    getinp        ; Get response
  92.     jr    z,edmsge    ; No change
  93.     mvim    edchg,true    ; Mark as changed
  94.     movcmd    mhtit,0,mhtitl-1    ; New TITLE
  95.     ld    (hl),cr        ; CR at end
  96. edmsge:    prtx    mm11        ; Ask about STATUS
  97.     call    getinp        ; Get response
  98.     jr    z,edmsgf    ; No change
  99.     mvim    edchg,true    ; Mark as changed
  100.     movb    mhstat,fcb1+1    ; New STATUS
  101. edmsgf:    prtx    mm12        ; Ask about TYPE
  102.     call    getinp        ; Get response
  103.     jr    z,edmsgg    ; No change
  104.     mvim    edchg,true    ; Mark as changed
  105.     movb    mhtype,fcb1+1    ; New TYPE
  106.  
  107. edmsgg:    cmpm    edchg,false    ; Any field changed?
  108.     jp    z,waitc        ; No change
  109. edmsgz:    mvim    change,true    ; Mark file as changed
  110.     dodosa    wrec,mfcb    ; Write the msg header
  111.     call    phdr        ; Print changed header
  112.     call    logmnr        ; Log changing the msg
  113.     jp    waitc        ; Done
  114.  
  115.  
  116. ; ET. Check for being T or S or to NTS*
  117.  
  118. etmsga:    cmpm    mhtype,'T'    ; Is it a T msg?
  119.     jr    z,etmsgb    ; Yes, can do ET
  120.     cp    'S'        ; Is it an S msg?
  121.     jr    z,etmsgb    ; Yes, can to ET to that, too
  122.     ld    hl,knts        ; Point at "NTS" constant string
  123.     comp    ,mhto,3        ; Is msg to NTSxxx?
  124.     jr    z,etmsgb    ; Yes, allow editing even if not T type
  125.     prtx    etmerr        ; Say can't edit this one
  126.     jp    waitc        ; End of command
  127.  
  128. knts:    db    'NTS'        ; String for checking TO field
  129.  
  130. etmsgb:    call    phdr        ; Print the header
  131.     prtx    etmto        ; Ask about TO
  132.     call    getinp        ; Get response
  133.     jr    z,etmsgc    ; No change
  134.     mvim    edchg,true    ; Mark as changed
  135.     zmov    mhto,fcb1+1,6    ; New TO
  136. etmsgc:    prtx    etmat        ; Ask about AT
  137.     call    getinp        ; Get response
  138.     jr    z,etmsgd    ; No change
  139.     mvim    edchg,true    ; Mark as changed
  140.     zmov    mhbbs,fcb1+1,6    ; New AT
  141. etmsgd:    prtx    etmty        ; Ask about TYPE
  142.     call    getinp        ; Get response
  143.     jr    z,etmsge    ; No change
  144.     mvim    edchg,true    ; Mark as changed
  145.     movb    mhtype,fcb1+1    ; New TYPE
  146. etmsge:    prtx    etmtit        ; Ask about TITLE
  147.     call    getinp        ; Get response
  148.     jr    z,etmsgf    ; No change
  149.     mvim    edchg,true    ; Mark as changed
  150.     movcmd    mhtit,0,mhtitl-1    ; New TITLE
  151.     ld    (hl),cr        ; CR at end
  152. etmsgf:    cmpm    edchg,false    ; Any field changed?
  153.     jp    z,waitc        ; No change
  154.     mvim    mhstat,'N'    ; Say not read yet (so will fwd)
  155.     jp    edmsgz        ; Go set change, type out hdr.
  156.  
  157.     end
  158.  
  159.  
  160.