TITLE FILSND ENTRY DFHACK DEFINE ERRMES(A) < JRST [TTCALL 3,[ASCIZ/A/] JSA 16,HNGUPF## EXIT]> DEFINE MESOUT(A) < MOVEI M,[ASCIZ/A /] PUSHJ P,MESTYP> P=17 C=16 M=15 P2=14 P1=13 AC=0 T1=1 T2=2 T3=3 DSK=1 NLINES=5 DFHACK: RESET MOVE P,[IOWD PDLEN,PDLST] PUSHJ P,GETIOX PUSHJ P,GETNAM SETZM INITF# IT: TTCALL 3,[ASCIZ/INITIATING TRANSFER? /] TTCALL 4,0 TTCALL 11, CAIE "N" CAIN "Y" SKIPA JRST [TTCALL 3,[ASCIZ/ TYPE Y OR N /] JRST IT] CAIN "Y" SETOM INITF SORR: TTCALL 3,[ASCIZ/SEND OR RECEIVE? /] TTCALL 4,0 TTCALL 11, CAIN "R" JRST RECV CAIN "S" JRST SEND TTCALL 3,[ASCIZ/TYPE S OR R /] JRST SORR SEND: PUSHJ P,OPNFIL ERRMES() SETZM COUNT PUSHJ P,INITC JUMP IOINDX# JUMP IERR# JUMP ITYPE# SKIPN IERR ERRMES() SKIPE INITF PUSHJ P,GETNUM TTCALL 3,[ASCIZ/STARTING TO SEND /] GLOOP0: MOVSI 1,-MESSIZ HRRI 1,ARRAY GLOOP1: PUSHJ P,GETBYT JRST LSTMES MOVEM C,(1) AOBJN 1,GLOOP1 MOVEI 1,MESSIZ MOVEM 1,MESAGE PUSHJ P,SENDC## JUMP [MESAGE] JUMP [MESSIZ+1] JUMP IERR JUMP ITYPE SKIPGE IERR JRST GLOOP0 ERRMES () LSTMES: HLRES 1 ADDI 1,MESSIZ TRO 1,200 MOVEM 1,MESAGE PUSHJ P,SENDC JUMP [MESAGE] JUMP [MESSIZ+1] JUMP IERR JUMP ITYPE SKIPL IERR ERRMES() SKIPE INITF PUSHJ P,DIALC## JUMP [0] JUMP [0] JUMP IERR JUMP ITYPE TTCALL 3,[ASCIZ/ /] PUSHJ P,HNGUPC## TTCALL 3,[ASCIZ/TRANSFER COMPLETED!/] EXIT RECV: PUSHJ P,ENTFIL MOVE [POINT 4,BUFFER] MOVEM BYTPNT MOVEI ^D9*^D128 MOVEM COUNT PUSHJ P,INITC## JUMP IOINDX JUMP IERR JUMP ITYPE SKIPL IERR ERRMES() SKIPE INITF PUSHJ P,GETNUM RLOOP0: PUSHJ P,RECVC## JUMP [MESAGE] JUMP [MESSIZ+1] JUMP IERR JUMP ITYPE SKIPL IERR ERRMES() MOVE MESAGE TRZ 200 JUMPE RDONE1 MOVNS HRL 1,0 HRRI 1,ARRAY RLOOP1: MOVE C,(1) PUSHJ P,PUTBYT AOBJN 1,RLOOP1 MOVE MESAGE TRNN 200 JRST RLOOP0 RDONE1: PUSHJ P,PUTLST SKIPE INITF PUSHJ P,DIALC## JUMP [0] JUMP [0] JUMP IERR PUSHJ P,HNGUPC CLOSE DSK, EXIT GETBYT: PUSHJ P,GETFOR POPJ P, MOVE M,C PUSHJ P,GETFOR POPJ P, LSH M,4 IOR C,M CPOPJ1: AOS (P) POPJ P, GETFOR: SOSGE COUNT JRST GETBUF ILDB C,BYTPNT JRST CPOPJ1 GETBUF: MOVE C,[POINT 4,BUFFER] MOVEM C,BYTPNT# MOVEI C,^D9*^D128 MOVEM C,COUNT# IN DSK,CL JRST GETFOR STATZ DSK,1B22 POPJ P, ERRMES() PUTBYT: MOVE M,C LSH C,-4 PUSHJ P,PUTFOR MOVE C,M ANDI C,17 PUSHJ P,PUTFOR POPJ P, PUTFR0: SETZM BUFFER MOVE P2,[XWD BUFFER,BUFFER+1] BLT P2,BUFFER+177 PUTFOR: SOSGE COUNT JRST PUTBUF IDPB C,BYTPNT POPJ P, PUTBUF: MOVE P2,[POINT 4,BUFFER] MOVEM P2,BYTPNT MOVEI P2,^D9*^D128 MOVEM P2,COUNT OUT DSK,CL JRST PUTFR0 ERRMES() PUTLST: MOVE COUNT IDIVI ^D9 SUBI ^D128 HRLZS HRRI BUFFER-1 MOVEM CL1 OUT DSK,CL1 POPJ P, ERRMES() CL1: 0 0 GETIOE: TTCALL 11, TTCALL 3,[ASCIZ/ OCTAL DIGITS ONLY! /] GETIOX: SETZ 1, TTCALL 3,[ASCIZ/TTY NUMBER? /] GETIOL: TTCALL 4, CAIN 15 JRST GETIOD CAIL 60 CAILE 67 JRST GETIOE SUBI 60 LSH 1,3 ADD 1, JRST GETIOL GETIOD: TRO 1,200000 HRRZM 1,IOINDX TTCALL 11, POPJ P, GETERR: TTCALL 11, TTCALL 3,[ASCIZ/ USE THE FORMAT: NAME.EXT /] GETNAM: TTCALL 3,[ASCIZ/FILE NAME? /] MOVEI AC,6 MOVE T1,[POINT 6,NAME] SETZM NAME SETZM NAME+1 INCHWL C JRST GETLP2 GETLOP: INCHSL C JRST GETERR GETLP2: CAIN C,15 JRST GETDON CAIN C,"." JRST GETEXT SUBI C,40 IDPB C,T1 SOJG AC,GETLOP GETLP1: INCHSL C JRST GETERR CAIN C,15 JRST GETDON CAIE C,"." JRST GETLP1 GETEXT: MOVEI AC,3 MOVE T1,[POINT 6,NAME+1] GETELP: INCHSL C JRST GETERR CAIN C,15 JRST GETDON SUBI C,40 IDPB C,T1 SOJG AC,GETELP GETDON: TTCALL 11, POPJ P, OPNFIL: INIT 1,17 SIXBIT/DSK/ XWD OBUF,IBUF ERRMES() SETZ P1, LOOKUP DSK,NAME POPJ P, JRST CPOPJ1 ENTFIL: PUSHJ P,OPNFIL JRST OPNFL1 TTCALL 3,[ASCIZ/FILE ALREADY EXISTS, RENAMING OLD FILE /] OVERWRITE: MOVEI AC,1000 MOVEI P1,0 OVLOOP: MOVEI T1,3 MOVE T2,[POINT 3,P1,26] MOVE T3,[POINT 6,NAME1+1] OVLP1: ILDB C,T2 ADDI C,20 IDPB C,T3 SOJG T1,OVLP1 MOVE T1,NAME MOVEM T1,NAME1 HLLZS NAME1+1 SETZM NAME1+2 SETZM NAME1+3 LOOKUP DSK,NAME ERRMES() RENAME DSK,NAME1 JRST RFAIL TTCALL 3,[ASCIZ/OLD FILE RENAMED TO /] MOVE T1,[POINT 6,NAME1] RLOOP: ILDB C,T1 JUMPE C,REXT ADDI C,40 TTCALL 1,C TLNE T1,770000 JRST RLOOP REXT: MOVEI C,"." TTCALL 1,C MOVE T1,[POINT 6,NAME1+1] HLLZS NAME1+1 RELP: ILDB C,T1 JUMPE C,RDONE ADDI C,40 TTCALL 1,C JRST RELP RDONE: TTCALL 3,[ASCIZ/ /] HLLZS NAME+1 SETZM NAME+2 SETZM NAME+3 SETZ P1, OPNFL1: SETZM NAME+3 ENTER DSK,NAME ERRMES() POPJ P, RFAIL: AOS P1 SOJG AC,OVLOOP ERRMES() GETNUM: MOVE 1,[POINT 4,NUMBER] SETZM NUMBER SETZM NUMBER+1 TTCALL 3,[ASCIZ/ PHONE # TO DIAL? /] MOVSI 2,-20 DLOOP: TTCALL 4,0 CAIN 15 JRST DIAL CAIG "9" CAIGE "0" JRST ERROR SUBI "0" IDPB 1 AOBJN 2,DLOOP ERROR: TTCALL 11, TTCALL 3,[ASCIZ/USE DIGITS ONLY, NUMBER MUST BE LESS THAN 16 DIGITS. /] JRST GETNUM NUMBER: 0 0 DNUM: 0 DIAL: MOVEI 17 IDPB 1 HRRZM 2,DNUM PUSHJ P,DIALC## JUMP [NUMBER] JUMP DNUM JUMP IERR JUMP ITYPE SKIPN IERR ERRMES() TTCALL 3,[ASCIZ/ /] POPJ P, NAME1: BLOCK 4 NAME: SIXBIT/FILE/ 0 0 0 0 PDLEN=10 PDLST: BLOCK PDLEN IBUF: BLOCK 3 OBUF: BLOCK 3 CL: IOWD ^D128,BUFFER 0 MESSIZ=^D70 MESAGE: 0 ARRAY: BLOCK MESSIZ BUFFER: BLOCK ^D128 END DFHACK