; APDNLD - receive file from APPLE CP/M program UPLOAD ; ; Copyright [c] Noel Alaska Systems Technology, 1983. VMAJOR = 1. ; version equates VMINOR = 0. VSUB = 0. VEDIT = 1. ; CHANGE EACH EDIT <----------- VWHO = 0. SEARCH SYS ; AMOS librarys SEARCH SYSSYM SEARCH TRM SEARCH MFN ; my library DSECT .=0 XTDV: BLKL 1 ; orig term driver CSUM: BLKW 1 ; block checksum ODDB: BLKB D.DDB ; TERMINAL DDB FDDB: BLKB D.DDB ; FILE DDB BUFFER: BLKB 130. ; block buffer EVEN IMPURE = . .=0 PSECT BEGIN: PHDR -1,-1,PH$REE!PH$REU GETIMP IMPURE,A5 ; get memory BYP LIN BNE 1$ TYPECR EXIT 1$: FSPEC ODDB(A5),TRM ; set term name CALL TRMSRH ; find it MOV A3,D7 ; found? BNE 2$ ; YES TYPECR EXIT 2$: TST T.JLK(A3) ; detached? BEQ 3$ ; YES TYPECR EXIT 3$: BYP LIN BNE 4$ TYPECR EXIT 4$: FSPEC FDDB(A5),M68 INIT FDDB(A5) LOOKUP FDDB(A5) BNE 5$ DSKDEL FDDB(A5) 5$: OPENO FDDB(A5) BIS #T$ECS!T$ILC!T$IMI!T$DAT,T.STS(A3) MOV T.TDV(A3),XTDV(A5) ; set status bits MOV TRMTDC,A0 ; and switch to PSEUDO.TDV ADD #10,A0 MOV A0,T.TDV(A3) CLRB ODDB+D.FLG(A5) MOVW #[TRM],ODDB+D.DEV(A5) INIT ODDB(A5) OPENO ODDB(A5) MOV #1,ODDB+D.SIZ(A5) ; use single byte output JOBIDX A0 BIC #J.CCC,JOBSTS(A0) MOV JOBTRM(A0),A4 BIS #T$ECS!T$ILC!T$IMI,T.STS(A4) CRLF MOVB #'X,D1 CALL TTYPUT ; ---------------------------------------------------------------------- RDYLP: CALL TTYGET CMPB D1,#'R BNE RDYLP MOVB #'S,D1 CALL TTYPUT GETGEE: CALL TTYGET CMPB D1,#'G BNE GETGEE TYPECR TRYAGN: LEA A2,BUFFER(A5) CLR CSUM(A5) MOV #129.,D0 LOOP1: CALL TTYGET MOVB D1,(A2)+ XORW D1,CSUM(A5) SOB D0,LOOP1 TSTW CSUM(A5) BEQ GOODRD BADRD: TYPE MOVB #'B,D1 CALL TTYPUT JMP TRYAGN GOODRD: TYPE <.> LEA A2,BUFFER(A5) MOV #128.,D0 1$: MOVB (A2)+,D1 FILOTB FDDB(A5) SOB D0,1$ MOVB #'G,D1 CALL TTYPUT JMP TRYAGN BYEBYE: MOV XTDV(A5),T.TDV(A3) CRLF TYPECR CLOSE FDDB(A5) CLOSE ODDB(A5) BIC #T$DAT,@A3 ; don't leave DATA flag on... JOBIDX A0 BIC #J.CCC,@A0 EXIT ; ---------------------------------------------------------------------- TTYGET: SAVE A5 MOV A3,A5 ; TTYIN requires A5 --> TRMDEF 1$: CTRLC BYEBYE SLEEP #2 TST T.ICC(A5) BEQ 1$ TTYIN ; get a char AND #377,D1 ; set flags REST A5 RTN TTYPUT: PUSH D1 1$: SLEEP #2 ; wait a bit BIT #T$OIP,@A3 ; is output still in progress? (RMT) BNE 1$ ; YES TST T.OQX(A3) ; is output still queued? (RMT) BNE 1$ ; YES MOV ODDB+D.BUF(A5),A6 MOVB D1,@A6 OUTPUT ODDB(A5) POP D1 RTN TRMSRH: MOV TRMDFC,A3 ; index TRMDEF chain 1$: CMM ODDB+D.FIL(A5),4(A3) BNE 2$ ; wrong one ADD #10,A3 ; right one - advance to TRMDEF proper RTN 2$: MOV @A3,A3 ; move up chain MOV A3,D7 BNE 1$ ; unless end RTN EVEN END