.TITLE SERVER Datacommunication JOB uses XF (no RSP protocol) ;*********************************************************************** ; ; Handler: * XF.MAC == ( DR(V)-11 C/K, WB(V)-11 ) * ; Terminate job: 2 * ^C ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; ; COPYRIGHT (c) 1986 by ; ; H.H. Klin. Neuro. AZG ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; SPDIR = 0 ;Special Directory (e.g. Magtape) support enabled for SPDIR=1 TEST = 0 ;1=enable test printout: ; NOTE on LINK command: ; IF (TEST) THEN ; SERVER = SY:CNV,DK:SERVER ; ELSE ; SERVER = SERVER,SY:CNV ! CNV only used at start, put in buffer! ; ENDIF CHECK = 125252 .MCALL .LOOKUP, .READW, .WRITW, .EXIT, .PRINT, .SETTOP, .SERR .MCALL .SPFUN .PSECT RUNJB START:: CALL BUFFER AGAIN:: .READW #AREA,#15.,#HEADER,#4,#0 ;Wait for next command. BCS DCERR NEG QWCNT .if NE,TEST INC IOCNT ;Count the IO's. MOV #LINE,R3 MOV #BFSIZE,R5 MOV #6,R4 10$: MOV (R5)+,R0 CALL CNV10 MOVB #'.,(R3)+ SOB R4,10$ CLRB (R3) .PRINT #TSTTXT .endc ;TEST CMP QWCNT,BFSIZE BGT SIZERR CMP QCHECK,#CHECK ;Pattern O.K.? BNE PTNERR .READW #AREA,#15.,#BUFFER,QWCNT,#0 ;Get the user data BCS DCERR .WRITW #AREA,#0,#BUFFER,QWCNT,QBLKN ;Store on device BCS DEVERR BR AGAIN DCERR: .PRINT #MSG1 BR SEXIT PTNERR: .PRINT #MSG2 BR SEXIT SIZERR: .PRINT #MSG3 BR SEXIT DEVERR: .PRINT #MSG4 SEXIT: .SPFUN #AREA,#15.,#277,#BUFFER,#1,#0 ; Reset XF: .EXIT MSG1: .ASCIZ /DC-error/ MSG2: .ASCIZ /DC-Pattern-error/ MSG3: .ASCIZ /DC-Buffer too small!/ MSG4: .ASCIZ /DC-Device IO error/ .if NE,TEST TSTTXT: .ASCII /Size,IO,Blok,func,check,wcnt=/ LINE: .BLKB 70. .endc ; TEST .EVEN ;-------------------------------------------------------------------------; AREA: .BLKW 8. BFSIZE: .WORD 0 ; Data buffer size in words. IOCNT: .WORD 0 ; Nr. of I/O's ; HEADER PACKET: HEADER:: QBLKN: .WORD 0 QFUNC: .WORD 0 QCHECK: .WORD 0 QWCNT: .WORD 0 ;---------------------- Initialization / buffer -------------------------; .PSECT INITJB FILST$ = 100000 BUFFER::.SERR .LOOKUP #AREA,#15.,#XF BCS NOXF .LOOKUP #AREA,#0,#FILE BCS NOFILE ; ; Set up DATA & I/O buffer: ; ------------------------- MOV #-2,R0 .SETTOP SUB #BUFFER,R0 ;R0 = top of program TST (R0)+ ;R0 = available memory in bytes CLC ;Cannot use ASR (SIGNED division /2 !) ROR R0 ;R0 = available memory in words MOV R0,BFSIZE MOV #TSIZE,R3 CALL CNV10 .PRINT #PINIT ;;.iif NE,TEST .HERR RETURN ;Go running!! XF: .RAD50 /XF / FILE: .RAD50 /DK SCRTCHDSK/ NOXF: .PRINT #INIT1 .EXIT NOFILE: .PRINT #INIT2 .EXIT PINIT: .ASCII \XF-Server start, buffer size =\ TSIZE: .ASCIZ \ . words!\ INIT1: .ASCIZ \?No XF: handler\ INIT2: .ASCIZ \?No DK:SCRTCH.DSK\ .EVEN .=BUFFER+512. ;Get space for at least 1 disk block! ;--------------End of initializing code / buffer area-----------------; .PSECT CNV .END START