; BYECOM.MAC - get signoff comment then hang up and loop. ; ; Uses SYSLIB calls. ; ; This program was designed as a "quick and dirty" ; way of getting any comments a caller might have. ; Normally, he would have to go back to the message- ; or logon subsystem to leave any late comments. ; This way he can leave them at signoff or he can ; execute the (renamed) BYE.COM file for fast logoff. ; BYECOM jumps to the line input routine after hanging ; up the phone. This prevents any disk access from being ; rudely aborted by BYE when it takes control due to ; the lost carrier. ; ; This program may not be an example of efficient ; programming, but it serves it's purpose. ; ; Written in December 1982, updated 2/8/83. ; .Z80 ; CR EQU 0DH LF EQU 0AH DISKWR EQU 3FH ;this flag indicates disk write to BYE CALLER EQU 40H ;first 4 chars of caller's name stored here PMMI EQU 0E3H ;modem control port for hang-up COMDSK EQU 0 ;COMMENTS file drive (0=A, 1=B...) COMUSR EQU 15 ;COMMENTS file user ; ; SYSLIB calls: ; EXT CODEND EXT CIN EXT COUT EXT CAPS EXT F$EXIST EXT F$DELETE EXT FO0$OPEN EXT FI0$OPEN EXT FO0$CLOSE EXT FI0$CLOSE EXT F0$PUT EXT F0$GET EXT F$RENAME EXT INITFCB EXT INLINE EXT PRINT EXT LOGUD EXT MOVEB EXT CRLF ; ; Say who we are, what we want. ; START: CALL PRINT DB CR,LF,'Do you want to leave ' DB 'any comments? ',0 CALL CODEND LD A,1 CALL INLINE LD A,(HL) CALL CAPS CP 'N' JP Z,HANGUP ;no comments, hang up phone CP 'Y' JR NZ,START LD BC,COMDSK*100H+COMUSR ;b=disk,c=user CALL LOGUD LD DE,COMFCB PUSH DE CALL INITFCB LD DE,TEMFCB CALL INITFCB CALL FO0$OPEN JP NZ,DISKERROR POP DE CALL F$EXIST JR Z,X CALL FI0$OPEN JP NZ,DISKERROR ; ; copy old file to new file ; CPYLP: CALL F0$GET CP 1AH JR Z,EXITCP CALL F0$PUT JR CPYLP ; EXITCP: CALL FI0$CLOSE X: LD HL,CALLER LD DE,NAME LD B,4 CALL MOVEB ; ; now write his name ; LD DE,FROM WNAME: LD A,(DE) CALL F0$PUT INC DE CP LF JR NZ,WNAME CALL PRINT DB CR,LF,LF,'Enter comments one line at a time.' DB CR,LF,'CR alone to end.',CR,LF,0 ; ; get comments a line at a time ; GETCOM: CALL CODEND CALL PRINT DB '--> ',0 LD A,1 CALL INLINE LD A,(HL) OR A JR Z,EOF LD A,1 LD (DISKWR),A CALL WRITECOM XOR A LD (DISKWR),A JR GETCOM ; ; write line to disk ; WRITECOM: LD A,(HL) OR A JR Z,CRLFF CALL F0$PUT INC HL JR WRITECOM ; CRLFF: LD A,CR CALL F0$PUT LD A,LF JP F0$PUT ; EOF: LD A,1 LD (DISKWR),A CALL CRLFF CALL FO0$CLOSE LD DE,COMFCB CALL F$DELETE EX DE,HL LD DE,TEMFCB CALL F$RENAME JR Z,DISKERROR CALL PRINT DB CR,LF,'Thank you for your comments.',0 ; ; now say goodbye and hang him up. ; HANGUP: CALL PRINT DB CR,LF,'Good bye - call again',CR,LF,0 XOR A LD (DISKWR),A ;clear disk write flag OUT (PMMI),A JP INLINE ;hang up while in I/O loop ; DISKERROR: CALL PRINT DB 7,CR,LF DB '++error in COMMENTS file++',CR,LF DB 'Please use CBBS for comments or BYEBYE for logout' DB CR,LF,0 JR HANGUP ; FROM: DB 'FROM ' NAME: DB ' ',CR,LF ; COMFCB: DB 0,'COMMENTS ' DS 24 TEMFCB: DB 0,'COMMENTS$$$' DS 24 END