home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / packet / rli120.ark / LOG.MAC < prev    next >
Encoding:
Text File  |  1986-08-12  |  3.4 KB  |  151 lines

  1. ; LOG.MAC - 5/2/85 - Log an event.
  2. ;  Note: the log file buffer overlays INIT.
  3.  
  4.     .z80
  5.     maclib    TNC.LIB
  6.  
  7.     entry        chgl,log,logo,logdrn,lfcb,event,logtxt,llogtxt
  8.     entry        logging,loggate,logmsg,logfile,logloc
  9.  
  10.     external    @move,@opena,@closew,tobuf,@ntobuf,@ctobuf
  11.     external    mcall,wfcb,curtime,$memry,ucase,date,time
  12.     external    ckname,ername,erdone,fcb2,mode,logbuf,logsiz
  13.  
  14.     asciictl
  15.     tncdefs
  16.  
  17.     dseg
  18. lfcb:    ds    fcbsize        ; FCB, filled by RDPARAM
  19. ltxt:    ds    2        ; Length of txt in logtext
  20. bptr:    dw    logbuf        ; Ponter into logbuf
  21. bcnt:    dw    0        ; # chars in logbuf
  22.  
  23. llogtxt        equ    90    ; Max chars in log text string
  24. event:        ds    1    ; Event code
  25. logging:    ds    1    ; Logging of if false
  26. loggate:    ds    1    ; Log gateway events?
  27. logmsg:        ds    1    ; Log message events?
  28. logfile:    ds    1    ; Log upload/downloads?
  29. logloc:        ds    1    ; Log local user events?
  30. logtxt:        ds    llogtxt
  31.  
  32.     cseg
  33. chgl:    ckname    fcb2
  34.     jp    z,ername
  35.     zmov    lfcb,fcb2,fcbsize
  36.     jp    erdone
  37.  
  38. ; Log (A) as event, (B) as subevent, mcall as text.
  39.  
  40. logo:    ld    (event),a
  41.     ld    hl,logtxt
  42.     ld    (hl),b
  43.     inc    hl
  44.     ld    (hl),' '
  45.     inc    hl
  46.     move    ,mcall,6
  47.     ld    (hl),cr
  48.  
  49. log:    cmpm    logging,true
  50.     ret    nz        ; Logging is off
  51.     cmpm    mode,lmode
  52.     jr    nz,loga        ; Not local, log
  53.     cmpm    logloc,true    ; Log local?
  54.     ret    nz        ; No
  55.  
  56. ; Check if we log this event type
  57.  
  58. loga:    ld    a,(event)
  59.     cp    'C'
  60.     jr    z,logd
  61.     cp    'X'
  62.     jr    z,logd
  63.     cp    'G'
  64.     jr    nz,logb
  65.     cmpm    loggate,true
  66.     ret    nz
  67.     jr    logd
  68.  
  69. logb:    cp    'M'
  70.     jr    nz,logc
  71.     cmpm    logmsg,true
  72.     ret    nz
  73.     jr    logd
  74.  
  75. logc:    cp    'F'
  76.     ret    nz
  77.     cmpm    logfile,true
  78.     ret    nz
  79.  
  80. ; Yup, we log it. Do so.
  81. ; Count # chars in the text going into the file.
  82.  
  83. logd:    ld    hl,logtxt
  84.     ld    bc,0
  85. loge:    ld    a,(hl)
  86.     inc    bc
  87.     inc    hl
  88.     cp    cr
  89.     jr    nz,loge
  90.     ld    (ltxt),bc    ; # chars in text, including CR
  91.     ld    hl,11        ; # chars in event, date, time
  92.     add    hl,bc        ; # chars in this entry
  93.     ex    de,hl
  94.     push    de        ; Save # chars in this entry
  95.     ld    hl,logsiz    ; Size of buffer
  96.     ld    bc,(bcnt)    ; chars now in buffer
  97.     or    a
  98.     sbc    hl,bc        ; Left in buffer
  99.     sbc    hl,de        ; Left after this entry added
  100.     call    c,logdrn    ; Drain buffer if not enough room
  101.     call    curtime        ; Get current date/time
  102.     ld    de,(bptr)
  103.     ld    a,(event)
  104.     ld    (de),a        ; Move event to buffer
  105.     inc    de
  106.     ld    hl,date
  107.     ld    bc,6
  108.     ldir            ; Move date to buffer
  109.     ld    hl,time
  110.     ld    bc,4
  111.     ldir            ; Move time to buffer
  112.     ld    hl,logtxt
  113.     ld    bc,(ltxt)
  114.     ldir            ; Move log text to buffer
  115.     ld    (bptr),de
  116.     pop    de        ; # chars in this entry
  117.     ld    hl,(bcnt)    ; # chars already in buffer
  118.     add    hl,de
  119.     ld    (bcnt),hl    ; # chars in buffer now
  120.     ret
  121.  
  122. ; Drain the log buffer.
  123.  
  124. logdrn:    dtz    bcnt        ; Anything in log buffer?
  125.     ret    z        ; No
  126.     opena    lfcb        ; Open log file for append
  127.     lxim    bptr,logbuf    ; Point to start of log buffer
  128. logda:    ld    hl,(bptr)    ; Point to char
  129.     ld    a,(hl)        ; Pick up char
  130.     inc    hl        ; Point to next char
  131.     ld    (bptr),hl    ; Save pointer to next char
  132.     call    ucase        ; Change char to upper case
  133.     ld    c,a
  134.     cp    eof        ; Is char an eof?
  135.     call    nz,tobuf    ; Put the char in the file buffer
  136.     ld    a,c        ; Get the char back
  137.     cp    cr        ; Was it a CR?
  138.     jr    nz,logdb    ; No
  139.     ld    c,lf        ; Had CR, now add LF
  140.     call    tobuf
  141. logdb:    dcxm    bcnt        ; One less char in log buffer
  142.     ld    a,l
  143.     or    h        ; Anything left in log buffer?
  144.     jr    nz,logda    ; Yes, continue
  145.     ld    c,eof
  146.     call    tobuf        ; Put EOF in file buffer
  147.     closew            ; Close the log file
  148.     lxim    bptr,logbuf    ; Point to start of buffer
  149.     ret
  150.     end
  151.