; ; v1.15 ; ; Allow Sysop to read any comments left with Sysop command by a remote ; user. ; ; (c)1984 Simon J. Ewins ; ; ; .Z80 ASEG ORG 100H ; JP START ; VER:: DB 1 VERR:: DB 15 ; INCLUDE EMXHDR.MAC INCLUDE GETTIM.MAC ; DSKFIL::DB 'SYSOP.EMX',0,0,0,0 ; ; Print inline message (0 to end), with option echo to lst: device ; @PRNT:: POP HL ; Get pointer to message current character LD A,(HL) ; And get character INC HL ; Bump pointer OR A ; See if at end yet JR NZ,@PRNT1 ; No so print it JP (HL) ; Yes, so return ; @PRNT1::PUSH HL ; Save pointer in message PUSH AF ; Save character LD E,A ; Get character to E LD C,2 ; And use bdos to print it CALL BDOS LD A,(LFLG) OR A ; Want printer? JR Z,OUT0 ; No POP AF ; Get character LD E,A LD C,5 CALL BDOS ; Send to printer PUSH AF ; For next pop ; OUT0:: POP AF ; Reset stack JR @PRNT ; @PRNTM::LD A,(HL) INC HL OR A JR NZ,PRNTM1 RET ; Done ; PRNTM1::PUSH HL LD E,A LD C,2 CALL BDOS POP HL JR @PRNTM ; @PRNTL::LD A,(HL) OR A RET Z CP 1AH ; At end of note? CALL Z,PRTLW INC HL PUSH BC PUSH HL PUSH AF ; Save character LD E,A LD C,2 CALL BDOS ; LFLG EQU $+1 ; LD A,0 OR A JR Z,OUT ; No printer POP AF ; Get character LD E,A LD C,5 CALL BDOS ; Send to printer PUSH AF ; Keep stack straight ; OUT:: POP AF POP HL POP BC DJNZ @PRNTL RET ; PRTLW:: PUSH AF PUSH BC PUSH DE PUSH HL PUSH IX PUSH IY ; PW01:: CALL GETCH JR Z,PW01 CP 'C'-40H JP Z,0H POP IY POP IX POP HL POP DE POP BC POP AF RET ; ;----------------------------------------------------------------------- ; START:: LD HL,0 ADD HL,SP LD (CCPSTK),HL ; Save CCP stack pointer LD SP,STACK ; Set up local stack ; ; Get end of program address ; CALL ENDEMX LD (MSG),HL ; Buffer at end of program ; ; Set to drive where SYSOP.EMX is located ; LD A,(SYSDRV) LD E,A LD C,LOGDRV CALL BDOS ; ; And to user area where SYSOP.EMX is located ; LD A,(SYSUSR) LD E,A LD C,LOGUSR CALL BDOS LD A,0C3H ; Patch the error to a jump exit:: LD (ERROR),A ; Instead of a call to BYE LD HL,EXIT LD (ERROR+1),HL CALL @PRNT DB CR,LF,LF DB 'SYSOP (read) v',0 LD HL,(VER) CALL PVER ; Show version number CALL @PRNT DB CR,LF,LF DB 'Send comments to LST: device as well? ',0 ; PRNWT:: CALL GETCH JR Z,PRNWT CALL CAPS CP 'Y' JR NZ,NOLST CALL ECHO LD A,1 LD (LFLG),A JR CONT ; NOLST:: LD A,'N' CALL ECHO XOR A LD (LFLG),A ; ;----------------------------------------------------------------------- ; ; Rroutines based on EMX.MAC by Simon J. Ewins ; ; (c)1984 -- All rights reserved. ; ;----------------------------------------------------------------------- ; CONT:: CALL @PRNT DB CR,LF,LF,0 LD HL,DSKFIL CALL OPEN LD HL,64 LD (RRSZ),HL ; Record size LD HL,0 CALL GET ; Get next record number LD HL,(RNDBUF) ; Stored in record # 0 LD A,H OR A JR NZ,GOTREC LD A,L CP 2 ; If next record =< 1 then none in file JR NC,GOTREC CALL @PRNT DB CR,LF,LF DB 'No records found.... next record number = 1' DB CR,LF,0 JP EXIT ; GOTREC::DEC HL ; Records = 1 less than next number PUSH HL POP BC ; Put number of records in counter LD HL,0 ; Starting record number LD (RRNO),HL ; RECLOP::PUSH BC ; Save counter LD HL,(RRNO) INC HL ; Set to next record CALL GET ; Get next record LD HL,RNDBUF ; Point to text LD B,64 ; Length of text line CALL @PRNTL ; Print line CALL @PRNT DB CR,LF,0 ; Carriage return to be neat POP BC ; Get counter DEC BC ; Less one record LD A,B OR C JP Z,RECDON ; 0=no more JR RECLOP ; >0, do more ; RECDON::CALL CLOSE CALL @PRNT DB 'Finished.....',0 ; EXIT:: CALL @PRNT DB CR,LF,LF DB 'Erase old comments? ',0 ; EXWT:: CALL GETCH JR Z,EXWT CALL CAPS CP 'Y' JR NZ,EXIT1 CALL ECHO CALL @PRNT DB CR,LF DB 'Erasing old comments file....',0 LD DE,FCB LD C,19 CALL BDOS ; EXIT1:: CALL @PRNT DB CR,LF,0 LD HL,(CCPSTK) ; Ready for 'soft' return LD SP,HL ; If we are done and going RET ; Directly to CP/M ; ; Stack area ; DS 128 ; STACK:: DW 0H CCPSTK::DW 0H ; Stack storage MSG:: DW 0 ; Message storage ; END