Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!uunet!seismo!husc6!sri-unix!sri-spam!ames!sdcsvax!ucbvax!ENGVAX.SCG.HAC.COM!PORTIA From: PORTIA@ENGVAX.SCG.HAC.COM (Portia 616-2635) Newsgroups: comp.os.vms Subject: virtual file editor (VFE) source (2 of 5) (50 blocks) Message-ID: <8707252003.AA14460@ucbvax.Berkeley.EDU> Date: Sat, 25-Jul-87 13:14:00 EDT Article-I.D.: ucbvax.8707252003.AA14460 Posted: Sat Jul 25 13:14:00 1987 Date-Received: Sun, 26-Jul-87 02:38:47 EDT Sender: daemon@ucbvax.BERKELEY.EDU Distribution: world Organization: The ARPA Internet Lines: 1332 $ show default $ check_sum = 1533430152 $ write sys$output "Creating FILEHDLR.MAR" $ create FILEHDLR.MAR $ DECK/DOLLARS="$*$*EOD*$*$" .TITLE FILEHDLR File manipulation routines .ENABLE SUPPRESSION .LIBRARY 'SYS$LIBRARY:LIB.MLB' .LIBRARY 'VFELIB' $ATRDEF $DCDEF $DEVDEF $DVIDEF $FABDEF $FATDEF $FIBDEF $IODEF $MTDEF $NAMDEF .PSECT CODE,EXE,NOWRT .PAGE .SBTTL GETFILE - Get file name and access it GETFILE:: CLRL FLFLGS TSTW DESC BEQL 150$ BSBW FPARSE BLBC R0,200$ TSTL SETMASK BEQL 70$ CLRL R1 BSBW SETCMD 70$: TSTW FDESC BGTR 400$ BRB 150$ 100$: CLRL FLFLGS 150$: INPUT FNQ,FNQ+8,#80,FNAME MOVAL FNAME,DESC+4 MOVW TSTATUS+2,DESC CLRB INITFLG BSBW FPARSE BLBC R0,200$ TSTW FDESC BGTR 400$ 200$: TSTB OPNFLG BEQL 100$ BRW 900$ 400$: CLRB INITFLG BSBW RELFILE CLRB LOGFLG CLRB SEQFLG CLRB TAPFLG MOVL #IO$_READVBLK,READFNC MOVL #IO$_WRITEVBLK,WRITEFNC MOVL #1,LOBLK MOVAL FABBLK,R2 MOVB FDESC,FAB$B_FNS(R2) MOVL FDESC+4,FAB$L_FNA(R2) $PARSE FAB=FABBLK BLBS R0,500$ CMPL R0,#RMS$_DNF BEQL 500$ BRW 780$ 500$: MOVAL NAMBLK,R6 ; ; This is an unorthodox method to determine if only a device name ; is specified, but it seems to work. If the bit definitions ; of NAM$L_FNB are ever changed, this instruction may require ; modification. ; CMPW #NAM$M_EXP_DEV,NAM$L_FNB(R6) ; BNEQ 520$ INCB LOGFLG MOVZBL NAM$B_DEV(R6),CURNAM MOVC3 CURNAM,@NAM$L_DEV(R6),CURNAM+2 ADDW2 #2,CURNAM BRB 540$ 520$: BLBS R0,540$ BRW 780$ 540$: BITL #NAM$M_WILDCARD,NAM$L_FNB(R6) BEQL 550$ MOVL #RMS$_FNM,R0 BRW 780$ 550$: BITL #NAM$M_NODE,NAM$L_FNB(R6) BEQL 570$ OUTMSGC NNWMSG BRW 100$ 570$: MOVB NAM$B_DEV(R6),DISKD MOVL NAM$L_DEV(R6),DISKD+4 $ASSIGN_S CHAN=DD,DEVNAM=DISKD BLBS R0,600$ BRW 780$ 600$: MOVB #1,ASSFLG $GETDVI_S EFN=#0,CHAN=DD,ITMLST=DEVLST,IOSB=FSTATUS BLBS R0,610$ BRW 780$ 610$: $WAITFR_S EFN=#0 BSBW IOSTAT BLBS R0,620$ BRW 780$ 620$: CMPL #DC$_DISK,DEVCLS BNEQ 625$ BRW 680$ 625$: CMPL #DC$_TAPE,DEVCLS BEQL 630$ OUTMSGC ICDMSG BRW 790$ 630$: TSTB LOGFLG BNEQ 640$ OUTMSGC TAP1MSG BRW 790$ 640$: BITL #DEV$M_MNT,DEVCHR BEQL 645$ BITL #DEV$M_FOR,DEVCHR BNEQ 650$ 645$: OUTMSGC TAP2MSG BRW 790$ 650$: TSTW OVRWRT BEQL 655$ OUTMSGC TAP3MSG BRW 790$ 655$: MOVB #1,TAPFLG MOVL #IO$_READLBLK,READFNC CLRL LOBLK MOVL #9999999,HIBLK MOVL #9999999,EFBLK MOVC5 #0,FILBLK,#^XFF,#1024,FILBLK TSTB POSFLG BNEQ 665$ TSTB NOREW BNEQ 660$ BSBW REWIND BLBS R0,670$ BRW 790$ 660$: OUTMSGC TAP4MSG CLRL CURFIL MNEGL #1,CURBLK MOVL #1,PARA1 BRB 668$ 665$: MOVL #1,CURFIL BSBW SETPOS CLRL PARA1 668$: CLRB CUREOF MOVB #1,PRTEOF BSBW READTAPE BLBS R0,670$ BRW 900$ 670$: BRW 870$ 680$: CMPL BLKSIZ,#512 BEQL 681$ OUTMSGC NSBMSG BRW 790$ 681$: TSTB LOGFLG BNEQ 682$ BRW 700$ 682$: MOVL #IO$_READLBLK,READFNC CLRL LOBLK SUBL3 #1,MAXBLK,HIBLK MOVL HIBLK,EFBLK MOVL #511,FFBYTE TSTB WRTFLG BNEQ 685$ BRW 840$ 685$: BITL #DEV$M_FOR,DEVCHR BEQL 690$ MOVL #IO$_WRITELBLK,WRITEFNC OUTMSGC WWED BRW 850$ 690$: OUTMSGC NWLMSG BRW 790$ 700$: $SEARCH FAB=FABBLK BLBS R0,720$ BRW 780$ 720$: MOVL NAM$W_FID(R6),FIB+FIB$W_FID MOVW NAM$W_FID+4(R6),FIB+FIB$W_FID+4 CLRL FIB+FIB$L_ACCTL TSTB WRTFLG BEQL 750$ MOVL #FIB$M_WRITE,FIB+FIB$L_ACCTL 750$: $QIOW_S CHAN=DD,FUNC=#IO$_ACCESS!IO$M_ACCESS, - IOSB=FSTATUS,P1=FIBD,P5=#ATRLST BSBW IOSTAT BLBS R0,800$ CMPW R0,#SS$_ACCONFLICT BNEQ 780$ TSTB OVRFLG BEQL 780$ MOVL #FIB$M_NOLOCK,FIB+FIB$L_ACCTL $QIOW_S CHAN=DD,FUNC=#IO$_ACCESS!IO$M_ACCESS, - IOSB=FSTATUS,P1=FIBD,P5=#ATRLST BSBW IOSTAT BLBC R0,780$ MOVL #SS$_ACCONFLICT,R0 BSBW ERROUT BRB 800$ 780$: BSBW ERROUT 790$: BRW 100$ 800$: MOVB #1,ACCFLG MOVW RECATTR+FAT$W_HIBLKL,HIBLK MOVW RECATTR+FAT$W_HIBLKH,HIBLK+2 TSTL HIBLK BNEQ 810$ OUTMSGC NEF BRW 100$ 810$: MOVZBL NAM$B_RSL(R6),CURNAM MOVC3 CURNAM,@NAM$L_RSA(R6),CURNAM+2 ADDW2 #2,CURNAM MOVW RECATTR+FAT$W_EFBLKL,EFBLK MOVW RECATTR+FAT$W_EFBLKH,EFBLK+2 CVTWL RECATTR+FAT$W_FFBYTE,FFBYTE CVTWL RECATTR+FAT$W_RSIZE,RSIZE CMPZV #FAT$V_FILEORG,#4,RECATTR+FAT$B_RTYPE,#FAT$C_SEQUENTIAL BNEQ 815$ INCB SEQFLG TSTL RSIZE BNEQ 812$ MOVL #140,RSIZE 812$: TSTL FFBYTE BNEQ 815$ CMPL EFBLK,#1 BGTR 815$ MOVL HIBLK,EFBLK MOVL #511,FFBYTE 815$: CLRB VFLAG CLRL VFCSIZE CMPZV #FAT$V_RTYPE,#4,RECATTR+FAT$B_RTYPE,#FAT$C_VARIABLE BEQL 820$ CMPZV #FAT$V_RTYPE,#4,RECATTR+FAT$B_RTYPE,#FAT$C_VFC BNEQ 830$ CVTBL RECATTR+FAT$B_VFCSIZE,VFCSIZE 820$: INCB VFLAG 830$: EXTZV #FAT$V_NOSPAN,#1,RECATTR+FAT$B_RATTRIB,NOSPNFLG TSTB WRTFLG BEQL 840$ OUTMSGC WWE BRB 850$ 840$: OUTMSG #ROML,ROM 850$: CLRL CURBLK MOVL LOBLK,PARA1 BSBW READDISK BLBS R0,870$ CMPL R0,#SS$_NOPRIV BNEQ 900$ BRW 100$ 870$: BSBW BLOCK 900$: MOVB #1,OPNFLG RSB .SBTTL RELFILE - Deaccess file RELFILE:: TSTB ACCFLG BEQL 150$ $QIOW_S CHAN=DD,FUNC=#IO$_DEACCESS,P1=FIBD BLBS R0,150$ BRW ERREXT 150$: CLRB ACCFLG TSTB ASSFLG BEQL 170$ $DASSGN_S CHAN=DD BLBS R0,170$ BRW ERREXT 170$: CLRB ASSFLG CLRB OPNFLG RSB .PAGE .SBTTL TOP - Go to top of file TOP:: TSTB TAPFLG BNEQ 100$ MOVL LOBLK,PARA1 BSBW READDISK BRB 200$ 100$: TSTB CUREOF BNEQ 200$ MNEGL #9999999,PARA1 CLRB PRTEOF BSBW READTAPE 200$: RSB .SBTTL NEXT - Go to next block NEXT:: TSTB TAPFLG BNEQ 200$ MOVL BUFFCT,R1 TSTL PARA1 BLEQ 100$ DIVL3 #512,CURBCT,R1 100$: MULL2 R1,PARA1 ADDL2 CURBLK,PARA1 BSBW READDISK BRB 300$ 200$: MOVB #1,PRTEOF BSBW READTAPE 300$: RSB .PAGE .SBTTL EOF - Position at end-of-file block EOF:: TSTB TAPFLG BEQL 30$ BRW 100$ 30$: MOVL #100,OUTDSC MOVAL EFBLKM,DESC+4 TSTB HEXFLG BEQL 50$ MOVAL EFBLKMX,DESC+4 50$: $FAO_S CTRSTR=@DESC+4,OUTLEN=OUTDSC,OUTBUF=OUTDSC,- P1=EFBLK,P2=FFBYTE OUTMSG OUTDSC,OUT_BUFF MOVL EFBLK,PARA1 CMPL PARA1,HIBLK BLEQ 80$ MOVL HIBLK,PARA1 80$: BSBW READDISK BRB 200$ 100$: BSBW LAST 200$: RSB .SBTTL LAST - Position at last block in file LAST:: TSTB TAPFLG BNEQ 100$ MOVL HIBLK,PARA1 BSBW READDISK BRB 200$ 100$: MOVL #9999999,PARA1 CLRB PRTEOF BSBW READTAPE CMPL R0,#SS$_ENDOFFILE BNEQ 200$ MNEGL #1,PARA1 MOVB #1,PRTEOF BSBW READTAPE 200$: RSB .PAGE .SBTTL READ - Read data READ:: TSTB TAPFLG BNEQ 180$ CMPL PARA1,HIBLK BLEQ 150$ TSTB LOGFLG BNEQ 130$ BSBW READDISK BLBS R0,400$ 130$: MOVL HIBLK,PARA1 150$: BSBW READDISK BRB 400$ 180$: TSTL CURBLK BGEQ 200$ TSTL PARA1 BLSS 200$ OUTMSGC NOABS CLRL R0 BRB 400$ 200$: SUBL2 CURBLK,PARA1 MOVB #1,PRTEOF BSBW READTAPE 400$: RSB .SBTTL READINT - Internal read ; ; R1=Block number, R2=Byte count ; READINT:: ADDL3 #BUFF,CURBCT,READLOC TSTB TAPFLG BNEQ 100$ $QIOW_S CHAN=DD,FUNC=READFNC,IOSB=FSTATUS,- P1=@READLOC,P2=R2,P3=R1 BRB 200$ 100$: $QIOW_S CHAN=DD,FUNC=#IO$_READLBLK,IOSB=FSTATUS,- P1=@READLOC,P2=#MAXBCT 200$: BSBW IOSTAT MOVZWL FSTATUS+2,NXTBCT RSB .PAGE .SBTTL READDISK - Read disk blk, PARA1=address READDISK: MOVL BUFFCT,R1 CMPL PARA1,LOBLK BGEQ 100$ MOVL LOBLK,PARA1 BRB 200$ 100$: TSTB LOGFLG BEQL 200$ SUBL3 PARA1,HIBLK,R1 BGEQ 150$ MOVL #SS$_ENDOFFILE,R0 CLRL R1 BRB 250$ 150$: INCL R1 CMPL R1,BUFFCT BLEQ 200$ MOVL BUFFCT,R1 200$: MULL2 #512,R1 $QIOW_S CHAN=DD,FUNC=READFNC,IOSB=FSTATUS,- P1=BUFF,P2=R1,P3=PARA1 DIVL3 #512,FSTATUS+2,R1 BSBW IOSTAT BLBS R0,300$ TSTL R1 BEQL 250$ CMPL R0,#SS$_ENDOFFILE BEQL 300$ 250$: MOVL R0,SVSTAT BSBW ERROUT TSTL R1 BGTR 300$ MOVL SVSTAT,R0 CMPL PARA1,HIBLK BLEQ 280$ BRW 400$ 280$: MOVL #512,CURBCT BRB 350$ 300$: MOVL #1,R0 TSTL R1 BGTR 310$ MOVL #1,R1 310$: MULL3 #512,R1,CURBCT DECL R1 ADDL2 PARA1,R1 CMPL R1,HIBLK BLEQ 350$ MOVL R1,HIBLK MOVL R1,EFBLK MOVL #511,FFBYTE 350$: MOVL PARA1,CURBLK CLRL LPTR MNEGL #1,RECPTR 400$: RSB .SBTTL WRITEDISK - Write work buffer to disk WRITEDISK:: TSTB WRTFLG BNEQ 100$ OUTMSG #ROMWL,ROM BRB 900$ 100$: $QIOW_S CHAN=DD,FUNC=WRITEFNC,IOSB=FSTATUS,- P1=BUFF,P2=CURBCT,P3=CURBLK BSBW IOSTAT BLBS R0,200$ BSBW ERROUT BRB 900$ 200$: OUTMSGC RDY 900$: RSB .PAGE .SBTTL REWIND - Rewind a tape REWIND:: TSTB TAPFLG BNEQ 100$ OUTMSGC TAPONLY BRB 300$ 100$: $QIOW_S CHAN=DD,FUNC=#IO$_REWIND,IOSB=FSTATUS BSBW IOSTAT BLBS R0,200$ BSBW ERROUT CLRL R0 BRB 300$ 200$: MOVL #1,CURFIL CLRL CURBLK CLRB CUREOF MOVL #1,PARA1 MOVB #1,PRTEOF BSBW READTAPE MOVL #1,R0 300$: RSB .SBTTL BACKSPACE - Move a tape back one block or EOF BACKSPACE:: TSTB TAPFLG BEQL 100$ BITL #MT$M_LOST,FSTATUS+4 BNEQ 100$ $QIOW_S CHAN=DD,FUNC=#IO$_SKIPRECORD,IOSB=FSTATUS,- P1=-1 BSBW IOSTAT BLBS R0,100$ CMPL R0,#SS$_ENDOFFILE BEQL 100$ BSBW ERROUT 100$: RSB .PAGE .SBTTL MOVE - Move over 1 or more EOF marks MOVE:: TSTB TAPFLG BNEQ 50$ OUTMSGC TAPONLY BRW 900$ 50$: MOVL PARA1,R2 BGTR 100$ BEQL 70$ BRW 200$ 70$: BRW 900$ 100$: TSTB STOP BNEQ 140$ $QIOW_S CHAN=DD,FUNC=#IO$_SKIPFILE,IOSB=FSTATUS,- P1=1 BSBW IOSTAT BLBS R0,120$ CMPL R0,#SS$_ENDOFFILE BEQL 120$ BSBW ERROUT CLRL CURBCT BRB 140$ 120$: INCL CURFIL CLRL CURBLK CLRL CURBCT MOVB #1,CUREOF SOBGTR R2,100$ 140$: BRW 900$ 200$: TSTB STOP BEQL 220$ BRW 900$ 220$: $QIOW_S CHAN=DD,FUNC=#IO$_SKIPFILE,IOSB=FSTATUS,- P1=-1 BSBW IOSTAT BLBS R0,240$ CMPL R0,#SS$_ENDOFFILE BEQL 240$ BSBW ERROUT BRB 250$ 240$: BITL #MT$M_BOT,FSTATUS+4 BEQL 270$ OUTMSGC BOTMSG CLRL CURBLK MOVB #1,CUREOF 250$: CLRL CURBCT BRW 900$ 270$: DECL CURFIL MOVZBL CURFIL,R1 MOVL FILBLK[R1],CURBLK CLRB CUREOF CLRL CURBCT AOBLSS #0,R2,300$ BRB 400$ 300$: BRW 200$ 400$: CLRL PARA1 CLRB PRTEOF BSBW READTAPE 900$: RSB .PAGE .SBTTL READTAPE - Read tape blk, PARA1 = offset READTAPE: CMPL PARA1,#1 BGTR 100$ BEQL 50$ BRW 200$ 50$: BRW 510$ 100$: SUBL3 #1,PARA1,SKIPTOT 110$: MOVL SKIPTOT,SKIPCT SUBL2 SKPINC,SKIPTOT BLEQ 120$ MOVL SKPINC,SKIPCT 120$: $QIOW_S CHAN=DD,FUNC=#IO$_SKIPRECORD,IOSB=FSTATUS,- P1=@SKIPCT BSBW IOSTAT MOVZWL FSTATUS+2,R1 BLBC R0,140$ ADDL2 R1,CURBLK TSTL SKIPTOT BLEQ 130$ TSTB STOP BEQL 110$ 130$: BRW 500$ 140$: TSTB BUGFLG BNEQ 145$ DECL R1 BLEQ 145$ ADDL2 R1,CURBLK 145$: CMPL R0,#SS$_ENDOFFILE BNEQ 180$ TSTB BUGFLG BEQL 150$ CMPL SKIPCT,#1 BGTR 160$ 150$: MOVZBL CURFIL,R1 MOVL CURBLK,FILBLK[R1] 160$: BRW 600$ 180$: BRW 900$ 200$: TSTB CUREOF BNEQ 220$ SUBL3 #1,PARA1,SKIPTOT BRW 300$ 220$: TSTL PARA1 BNEQ 230$ MOVL #1,R0 BRW 950$ 230$: $QIOW_S CHAN=DD,FUNC=#IO$_SKIPRECORD,IOSB=FSTATUS,- P1=-1 BSBW IOSTAT BLBC R0,250$ BITL #MT$M_BOT,FSTATUS+4 BEQL 240$ BRW 400$ 240$: DECL CURBLK BRB 270$ 250$: CMPL R0,#SS$_ENDOFFILE BEQL 260$ BRW 450$ 260$: DECL CURFIL MOVZBL CURFIL,R1 MOVL FILBLK[R1],CURBLK 270$: CLRB CUREOF MOVL PARA1,SKIPTOT 300$: MOVL SKIPTOT,SKIPCT ADDL2 #50,SKIPTOT BGEQ 320$ MNEGL #50,SKIPCT 320$: $QIOW_S CHAN=DD,FUNC=#IO$_SKIPRECORD,IOSB=FSTATUS,- P1=@SKIPCT BSBW IOSTAT BLBC R0,350$ BITL #MT$M_BOT,FSTATUS+4 BNEQ 400$ MOVZWL FSTATUS+2,R1 SUBL2 R1,CURBLK TSTL SKIPTOT BGEQ 330$ TSTB STOP BEQL 300$ 330$: BRW 500$ 350$: CMPL R0,#SS$_ENDOFFILE BNEQ 450$ BITL #MT$M_BOT,FSTATUS+4 BNEQ 400$ DECL CURFIL MOVZBL CURFIL,R1 MOVL FILBLK[R1],CURBLK BRW 500$ 400$: OUTMSGC BOTMSG CLRL CURBLK MOVB #1,CUREOF CLRL CURBCT MOVL #SS$_ENDOFFILE,R0 BRW 950$ 450$: MOVZWL FSTATUS+2,R1 DECL R1 BGTR 460$ BRW 900$ 460$: SUBL2 R1,CURBLK CLRB CUREOF BRW 900$ 500$: CLRL CURBCT 510$: $QIOW_S CHAN=DD,FUNC=#IO$_READLBLK,IOSB=FSTATUS,- P1=BUFF,P2=#MAXBCT BSBW IOSTAT MOVZWL FSTATUS+2,CURBCT BLBC R0,520$ INCL CURBLK CLRB CUREOF BRW 950$ 520$: CMPL R0,#SS$_ENDOFFILE BNEQ 800$ MOVZBL CURFIL,R1 MOVL CURBLK,FILBLK[R1] 600$: TSTB PRTEOF BEQL 620$ OUTMSGC EOFMSG 620$: CLRL CURBCT CLRL CURBLK INCL CURFIL MOVB #1,CUREOF MOVL #SS$_ENDOFFILE,R0 BRB 950$ 800$: TSTL CURBCT BGTR 850$ BITL #MT$M_LOST,FSTATUS+4 BNEQ 900$ 850$: INCL CURBLK 900$: MOVL R0,SVSTAT BSBW ERROUT MOVL SVSTAT,R0 950$: CLRL LPTR MNEGL #1,RECPTR RSB .PAGE .SBTTL SHOFILE - Display current file and block SHOFILE:: SUBW3 #2,CURNAM,DESC MOVAL CURNAM+2,DESC+4 MOVL #150,OUTDSC TSTB LOGFLG BNEQ 100$ $FAO_S CTRSTR=WHRMSG,OUTLEN=OUTDSC,OUTBUF=OUTDSC,- P1=#DESC,P2=CURBLK BRB 200$ 100$: $FAO_S CTRSTR=WHDMSG,OUTLEN=OUTDSC,OUTBUF=OUTDSC,- P1=#DESC,P2=CURBLK 200$: OUTMSG OUTDSC,OUT_BUFF RSB IOSTAT: BLBC R0,100$ MOVZWL FSTATUS,R0 100$: RSB .SBTTL SETPOS - Set file, block pos for tape SETPOS:: TSTB TAPFLG BNEQ 100$ OUTMSGC TAPONLY BRB 200$ 100$: MOVL POSBLK,CURBLK MOVZBL CURFIL,R1 MOVL #^XFFFFFFFF,FILBLK[R1] CMPL POSFIL,CURFIL BEQL 200$ MOVL POSFIL,CURFIL MOVC5 #0,FILBLK,#^XFF,#1024,FILBLK 200$: RSB .PAGE .SBTTL Data definitions .PSECT DATA,WRT,NOEXE,LONG DISKD: .WORD 0 .WORD ^X010E .LONG 0 DD: .BLKW 1 FSTATUS: .BLKL 2 FDESC:: .WORD 0 .WORD ^X010E .LONG 0 FNAME:: .BLKB 80 FNQ:: .ASCID /File name? / NNWMSG: .ASCIC /Network operation is unsupported at this time./ ICDMSG: .ASCIC /Incorrect device type - must be disk or tape./ TAP1MSG: .ASCIC /File-structured operation is unsupported for tape./ TAP2MSG: .ASCIC /Tape is not mounted or is not mounted FOREIGN./ TAP3MSG: .ASCIC "Can not specify /OVER or /WRITE for tape operation." TAP4MSG: .ASCIC /*Tape position is unknown*/ NSBMSG: .ASCIC /Disk device has nonstandard block size - can not edit./ NWLMSG: .ASCIC "Can not specify /WRITE for XQP-device logical I/O." WWE: .ASCIC /File accessed with write enabled/ WWED: .ASCIC /Device accessed with write enabled/ ROM: .ASCII /Read-only mode/ ROML=.-ROM .ASCII /; WRITE not allowed/ ROMWL=.-ROM NEF: .ASCIC /Can not edit an empty file/ RDY: .ASCIC /Ready/ NOABS: .ASCIC /Absolute addresses unknown within this file./ TAPONLY: .ASCIC /This command can only be used with a tape device./ BOTMSG: .ASCIC /**BOT**/ EOFMSG: .ASCIC /**EOF**/ EFBLKM: .ASCID /EOF block=!UL, EOF byte=!UL/ EFBLKMX: .ASCID /EOF block=!UL, EOF byte=!4XL/ WHRMSG: .ASCID /Editing file !AS - Block !UL/ WHDMSG: .ASCID /Editing device !AS - Block !UL/ .ALIGN LONG FABBLK: $FAB FOP=NAM,NAM=NAMBLK NAMBLK: $NAM RSA=RESSTR,RSS=NAM$C_MAXRSS,- ESA=EXPSTR,ESS=NAM$C_MAXRSS RESSTR: .BLKB NAM$C_MAXRSS EXPSTR: .BLKB NAM$C_MAXRSS CURNAM:: .WORD 0 .BLKB NAM$C_MAXRSS CURBLK:: .LONG 1 LOBLK: .LONG 1 HIBLK:: .LONG 0 EFBLK:: .LONG 0 FFBYTE:: .LONG 0 CURFIL:: .LONG 0 CURBCT:: .LONG 512 NXTBCT:: .LONG 0 BUFFCT:: .LONG 1 NBUFCT:: .LONG 0 CUREOF: .BYTE 0 PRTEOF: .BYTE 1 SEQFLG:: .BYTE 0 VFLAG:: .BYTE 0 RSIZE:: .LONG 0 VFCSIZE:: .LONG 0 NOSPNFLG:: .LONG 0 SVSTAT: .LONG 0 ASSFLG: .BYTE 0 ACCFLG: .BYTE 0 OPNFLG: .BYTE 0 TAPFLG:: .BYTE 0 LOGFLG: .BYTE 0 READFNC: .LONG IO$_READVBLK WRITEFNC: .LONG IO$_WRITEVBLK READLOC: .LONG 0 SKIPTOT: .LONG 0 SKIPCT: .LONG 0 FLFLGS: OVRWRT:: OVRFLG:: .BYTE 0 WRTFLG:: .BYTE 0 NOREW:: .BYTE 0 POSFLG:: .BYTE 0 POSFIL:: .LONG 0 POSBLK:: .LONG 0 BUGFLG:: .BYTE 0 SKPINC:: .LONG 50 DEVLST: .WORD 4 .WORD DVI$_DEVCHAR .ADDRESS DEVCHR .LONG 0 .WORD 4 .WORD DVI$_DEVCLASS .ADDRESS DEVCLS .LONG 0 .WORD 4 .WORD DVI$_DEVBUFSIZ .ADDRESS BLKSIZ .LONG 0 .WORD 4 .WORD DVI$_MAXBLOCK .ADDRESS MAXBLK .LONG 0 .LONG 0 DEVCHR: .LONG 0 DEVCLS: .LONG 0 BLKSIZ: .LONG 0 MAXBLK: .LONG 0 FIB: .BLKL 12 FIBD: .LONG 12 .LONG FIB ATRLST: .WORD ATR$S_RECATTR .WORD ATR$C_RECATTR .ADDRESS RECATTR .LONG 0 RECATTR: .BLKB ATR$S_RECATTR .ALIGN LONG FILBLK: .BLKL 256 .END $*$*EOD*$*$ $ checksum FILEHDLR.MAR $ if checksum$checksum .ne. check_sum then - $ write sys$output "Checksum failed, file probably corrupted" $ check_sum = 1869233584 $ write sys$output "Creating TERMHDLR.MAR" $ create TERMHDLR.MAR $ DECK/DOLLARS="$*$*EOD*$*$" .TITLE TERMHDLR Terminal and log file I/O routines .ENABLE SUPPRESSION .LIBRARY 'VFELIB' $DCDEF $DVIDEF $FABDEF $IODEF $NAMDEF $RABDEF .PSECT CODE,EXE,NOWRT .PAGE .SBTTL TINIT - Intitialize terminal I/O TINIT:: $ASSIGN_S DEVNAM=TERM,CHAN=TT BLBC R0,100$ $QIOW_S CHAN=TT,FUNC=#IO$_SETMODE!IO$M_CTRLCAST,- EFN=#1,P1=CTRLCAST,P3=#3 BLBS R0,200$ 100$: CLRW TERMFLGS BRW 800$ 200$: $GETDVI_S EFN=#0,DEVNAM=SYSIN,ITMLST=GETCLS,IOSB=TSTATUS BLBS R0,220$ BRW 900$ 220$: $WAITFR_S EFN=#0 MOVZWL TSTATUS,R0 BLBS R0,240$ BRW 900$ 240$: CMPL #DC$_TERM,IOCLASS BEQL 300$ CLRB TERMIN 300$: $GETDVI_S EFN=#0,DEVNAM=SYSOUT,ITMLST=GETCLS,IOSB=TSTATUS BLBS R0,320$ BRB 900$ 320$: $WAITFR_S EFN=#0 MOVZWL TSTATUS,R0 BLBS R0,340$ BRB 900$ 340$: CMPL #DC$_TERM,IOCLASS BEQL 400$ CLRB TERMOUT BRB 800$ 400$: $QIOW_S CHAN=TT,FUNC=#IO$_SENSEMODE,IOSB=TSTATUS,- P1=MODBUF,P2=#8 BLBC R0,900$ MOVZWL TSTATUS,R0 BLBC R0,900$ MOVZWL TT_WID,TERMWD 800$: MOVL #1,R0 900$: RSB .PAGE .SBTTL LOGON - Turn on logging or switch log file LOGON:: BSBW LOGOFF MOVB DESC,LOGFAB+FAB$B_FNS MOVL DESC+4,LOGFAB+FAB$L_FNA $CREATE FAB=LOGFAB BLBS R0,100$ BSBW ERROUT BRW 900$ 100$: $CONNECT RAB=LOGRAB BLBS R0,200$ BRW ERREXT 200$: CLRB NOLOG 900$: RSB .SBTTL LOGOFF - Turn off logging LOGOFF:: TSTB NOLOG BNEQ 900$ $CLOSE FAB=LOGFAB BLBS R0,900$ BRW ERREXT 900$: MOVB #1,NOLOG RSB .SBTTL SHOLOG - Display log file status SHOLOG:: TSTB NOLOG BEQL 100$ OUTMSGC NLGMSG BRB 900$ 100$: MOVL #100,OUTDSC MOVAL LOGNBK,R6 MOVB NAM$B_RSL(R6),DESC MOVL NAM$L_RSA(R6),DESC+4 $FAO_S CTRSTR=LOGMSG,OUTLEN=OUTDSC,OUTBUF=OUTDSC,- P1=#DESC OUTMSG OUTDSC,OUT_BUFF 900$: RSB .PAGE .SBTTL CTRLCAST - Handle user interrupts CTRLCAST: .WORD 0 $QIOW_S CHAN=TT,FUNC=#IO$_SETMODE!IO$M_CTRLCAST,- EFN=#1,P1=CTRLCAST,P3=#3 BLBS R0,100$ BRW ERREXT 100$: MOVB #1,STOP RET .SBTTL SETWID - Set terminal width (80/132) SETWID:: CMPL NEWWID,TERMWD BNEQ 100$ BRW 500$ 100$: CMPL NEWWID,#80 BGTR 200$ MOVL #80,R2 MOVAL SETLOW,DESC+4 BRB 300$ 200$: MOVL #132,R2 MOVAL SETHIGH,DESC+4 300$: BLBC R1,400$ MOVL R2,NEWWID 400$: MOVL NEWWID,TERMWD TSTB TERMOUT BEQL 500$ MOVW TERMWD,TT_WID $QIOW_S CHAN=TT,FUNC=#IO$_SETMODE,P1=MODBUF,P2=#8 BLBC R0,900$ $QIOW_S CHAN=TT,FUNC=#IO$_WRITEVBLK,P1=@DESC+4,P2=#5 BLBC R0,900$ 500$: MOVL #1,R0 900$: RSB .PAGE .SBTTL TERMIO - Control I/O to the terminal TERMIO:: .WORD ^M MOVC3 8(AP),@4(AP),TERMBUFF ADDL3 #1,8(AP),R6 CMPL (AP),#3 BLEQ 100$ BRW 200$ 100$: CMPL (AP),#2 BGTR 120$ TSTW TERMON BEQL 160$ 120$: TSTB TERMOUT BEQL 130$ MOVB #CR,TERMBUFF-1[R6] INCL R6 $QIOW_S CHAN=TT,FUNC=#IO$_WRITEVBLK,P1=TERMLF,P2=R6 BLBS R0,150$ BRW ERREXT 130$: MOVW 8(AP),TERMDSC PUSHAQ TERMDSC CALLS #1,G^LIB$PUT_OUTPUT BLBS R0,150$ BRW ERREXT 150$: TSTB NOLOG BNEQ 170$ 160$: MOVL 8(AP),R6 BRW 600$ 170$: BRW 900$ 200$: MOVAL TERMLF,R7 220$: TSTB TERMIN BEQL 450$ $QIOW_S CHAN=TT,FUNC=#IO$_READPROMPT,IOSB=TSTATUS,- P1=@12(AP),P2=16(AP),P5=R7,P6=R6 BLBS R0,300$ BRW ERREXT 300$: CMPW TSTATUS+4,#CR BEQL 340$ TSTB HLPON BEQL 350$ CVTWL TSTATUS+2,R7 CMPL R7,16(AP) BGEQ 340$ ADDL2 12(AP),R7 MOVB TSTATUS+4,(R7) INCW TSTATUS+2 340$: BRW 500$ 350$: CMPW TSTATUS+4,#CZ BNEQ 400$ BRW EXIT 400$: MOVAL TERMCR,R7 ADDL3 #2,8(AP),R6 BRW 220$ 450$: MOVW 8(AP),TERMDSC PUSHAQ TERMDSC CALLS #1,G^LIB$PUT_OUTPUT BLBC R0,460$ MOVW 16(AP),DESC MOVL 12(AP),DESC+4 PUSHAW TSTATUS+2 PUSHL #0 PUSHAQ DESC CALLS #3,G^LIB$GET_INPUT BLBS R0,470$ CMPL R0,#RMS$_EOF BNEQ 460$ BRW EXIT 460$: BRW ERREXT 470$: MOVW #CR,TSTATUS+4 500$: TSTB NOLOG BNEQ 900$ MOVL 8(AP),R6 TSTW TSTATUS+2 BLEQ 600$ ADDL3 #TERMBUFF,R6,R7 MOVC3 TSTATUS+2,@12(AP),(R7) ADDW2 TSTATUS+2,R6 600$: MOVW R6,LOGRAB+RAB$W_RSZ $PUT RAB=LOGRAB BLBS R0,900$ BRW ERREXT 900$: RET .PAGE .SBTTL Data definitions .PSECT DATA,WRT,NOEXE,LONG CR=^X0D LF=^X0A CZ=^X1A ESC=^X1B TERM: .ASCID /TT/ TT: .BLKW 1 TSTATUS:: .BLKL 2 NLGMSG: .ASCIC / NOLOG/ LOGMSG: .ASCID / LOG=!AS/ SYSIN: .ASCID /SYS$INPUT/ SYSOUT: .ASCID /SYS$OUTPUT/ SETLOW: .ASCII /[?3l/ SETHIGH: .ASCII /[?3h/ MODBUF: TT_CLASS: .BLKB 1 TT_TYPE: .BLKB 1 TT_WID: .BLKB 2 TT_CHAR: .BLKB 3 TT_LEN: .BLKB 1 TERMFLGS: TERMIN: .BYTE 1 TERMOUT:: .BYTE 1 NEWWID:: .LONG 0 TERMWD:: .LONG 132 TERMCR: .BYTE CR TERMLF: .BYTE LF TERMBUFF: .BLKB 200 TERMDSC: .WORD 0 .WORD ^X010E .ADDRESS TERMBUFF GETCLS: .WORD 4 .WORD DVI$_DEVCLASS .ADDRESS IOCLASS .LONG 0 .LONG 0 IOCLASS: .LONG 0 .ALIGN LONG LOGFAB: $FAB FAC=PUT,FOP=,ORG=SEQ,RAT=CR,RFM=VAR,SHR=NIL,- NAM=LOGNBK LOGNBK: $NAM RSA=RESLOG,RSS=NAM$C_MAXRSS LOGRAB: $RAB FAB=LOGFAB,RBF=TERMBUFF,RAC=SEQ RESLOG: .BLKB NAM$C_MAXRSS .END $*$*EOD*$*$ $ checksum TERMHDLR.MAR $ if checksum$checksum .ne. check_sum then - $ write sys$output "Checksum failed, file probably corrupted" $ exit