From 05c496162ec77814ec7abd2c15be6e6545ffa45e Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Sun, 27 Nov 2016 22:30:42 +0100 Subject: [PATCH] Build DIR. --- Makefile | 2 +- build/build.tcl | 3 + src/bawden/dir^k.42 | 220 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 224 insertions(+), 1 deletion(-) create mode 100755 src/bawden/dir^k.42 diff --git a/Makefile b/Makefile index 8504b610..2a64fc3f 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ EMULATOR ?= simh -SRC = system syseng sysen1 sysen2 sysnet kshack dragon channa midas _teco_ emacs rms klh syshst sra mrc ksc cstacy gren +SRC = system syseng sysen1 sysen2 sysnet kshack dragon channa midas _teco_ emacs rms klh syshst sra mrc ksc cstacy gren bawden DOC = info _info_ sysdoc kshack _teco_ emacs emacs1 MINSYS = _ sys sys2 sys3 device emacs _teco_ sysbin inquir diff --git a/build/build.tcl b/build/build.tcl index 788d52ee..fddd9a04 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -313,6 +313,9 @@ respond "*" ":link channa; rakash pfthmg,dragon; rakash pfthmg\r" respond "*" ":link sys; ts p,sys; ts peek\r" +respond "*" ":midas sys1;ts dir_bawden;dir^k\r" +expect ":KILL" + respond "*" ":midas kshack;ts mtboot_kshack;mtboot\r" expect ":KILL" diff --git a/src/bawden/dir^k.42 b/src/bawden/dir^k.42 new file mode 100755 index 00000000..e007907a --- /dev/null +++ b/src/bawden/dir^k.42 @@ -0,0 +1,220 @@ +; -*- Midas -*- + +TITLE DIR + +A=1 +B=2 +C=3 +D=4 +E=5 +F=6 + +LINES=7 ; Lines on screen +LLINES=10 ; Lines on last page +OPTS=11 ; .OPTION bits + +ERR=14 +IN=15 +OUT=16 +DIR=17 + +NPTRS==:200. + +GO: .OPEN OUT,[.UAO\%TJDIS,,'TTY ? SETZ ? SETZ] + .LOSE + .OPEN IN,[.UAI,,'TTY ? SETZ ? SETZ] + .LOSE + .CALL [ SETZ + SIXBIT /TTYVAR/ + MOVEI OUT + MOVE [SIXBIT /HEIGHT/] + SETZM LINES] + .lose %lssys + SUBI LINES,1 + CAILE LINES,NPTRS + MOVEI LINES,NPTRS + .suset [.rsname,,dirdir] + .suset [.roption,,opts] + tlne opts,%opbrk + .break 12,[..rpfi,,dirblk] + tlnn opts,%opcmd + jrst godoit + .BREAK 12,[..RJCL,,BUF] + SKIPN BUF + JRST GODOIT + movsi a,(sixbit /DSK/) ; If there is JCL, device defaults to DSK. + movem a,dirdev + MOVE A,[440700,,BUF] +GETNAM: MOVE B,[440600,,C] + SETZ C, +GETNM1: ILDB D,A + JUMPE D,JDONE + CAIN D,^M + JRST JDONE + CAIE D,^_ + CAIN D,^C + JRST JDONE + CAIN D,": + JRST COLON + CAIN D,"; + JRST SEMI + CAIN D,40 + JRST SEMI + CAIL D,140 + SUBI D,40 + SUBI D,40 + TLNE B,770000 + IDPB D,B + JRST GETNM1 + +COLON: JUMPE C,GETNAM + movem c,dirdev + JRST GETNAM + +SEMI: JUMPE C,GETNAM + movem c,dirdir + JRST GETNAM + +JDONE: JUMPE C,GODOIT + movem c,dirdir +GODOIT: .call [ setz ? sixbit /OPEN/ + movsi .uai + movei dir + move dirdev + move [sixbit /.FILE./] + move [sixbit /(DIR)/] + setz dirdir ] + JRST LOSE + tlne opts,%opbrk + .break 12,[..spfi,,dirblk] + setzm incnt ; No characters available +FILL: MOVE B,[440700,,BUF] + MOVN C,LINES + HRLZ C,C ; C: AOBJN into PTRS + SETZM PTRS ; 0 => blank + MOVE A,[PTRS,,PTRS+1] ; -1 => printed + BLT A,PTRS-1(LINES) ; else BP to string +FILL1: MOVEM B,PTRS(C) +FILL2: sosge incnt + jrst infill + ildb a,inbp + IDPB A,B + CAIN A,^L + JRST ENDDIR + CAIE A,^J + JRST FILL2 + AOBJN C,FILL1 + JRST ENDPAG + +.vector inbuf(linbuf==:1000.) +.scalar incnt +.scalar inbp + +infill: move d,[440700,,inbuf] + movem d,inbp + movei e,5*linbuf + .call [ setz ? sixbit /SIOT/ + movei dir + move d + setz e ] + .lose %lssys + movei d,5*linbuf + subi d,(e) + movem d,incnt + jumpn d,fill2 + MOVEI A,^L + IDPB A,B +ENDDIR: SETZM PTRS(C) + HRRZM C,LLINES +ENDPAG: MOVE C,LINES + .RDTIM D, +FIND: IMULI D,317421 + ADDI D,512642 + MOVE E,D + IDIV E,LINES + MOVNI B,1 + MOVE E,F +FIND1: CAME B,PTRS(F) ; Printed? + JRST FOUND ; No + SOJGE F,FIND1 ; Yes: search backwards + MOVEI F,-1(LINES) + JRST FIND1 + +FOUND: ADDI F,10 + .IOT OUT,[^P] + .IOT OUT,["H] + .IOT OUT,[10] + .IOT OUT,[^P] + .IOT OUT,["V] + .IOT OUT,F + .IOT OUT,[^P] + .IOT OUT,["L] + SKIPN E,PTRS-10(F) ; Blank? + JRST LINEND ; Yes +LINE: ILDB B,E ; No: print it + CAIN B,^M + JRST LINEND + .IOT OUT,B + JRST LINE + +LINEND: SETOM PTRS-10(F) + SOJG C,FIND + CAIN A,^L + JRST BYEBYE + .IOT OUT,[^P] + .IOT OUT,["H] + .IOT OUT,[10] + .IOT OUT,[^P] + .IOT OUT,["V] + MOVEI F,10(LINES) + .IOT OUT,F + .IOT OUT,[^P] + .IOT OUT,["L] + SKIPA B,[440700,,[ASCIZ \--MORE--\]] +MORE: .IOT OUT,A + ILDB A,B + JUMPN A,MORE + .IOT IN,A + CAIE A,40 + JRST FLUSH + .IOT OUT,[^P] + .IOT OUT,["H] + .IOT OUT,[10] + .IOT OUT,[^P] + .IOT OUT,["L] + JRST FILL + +FLUSH: SKIPA B,[440700,,[ASCIZ \FLUSHED\]] +FLUSH1: .IOT OUT,A + ILDB A,B + JUMPN A,FLUSH1 +BYEBYE: .IOT OUT,[^P] + .IOT OUT,["H] + .IOT OUT,[10] + .IOT OUT,[^P] + .IOT OUT,["V] + MOVEI F,10(LLINES) + .IOT OUT,F + .IOT OUT,[^P] + .IOT OUT,["L] + .BREAK 16,164000 ; 2.3 => Don't crlf, close open location, etc. + +LOSE: .OPEN ERR,[.UAI,,'ERR ? 1 ? 0] + .LOSE +LOSE1: .IOT ERR,A + CAIN A,^L + .BREAK 16,164000 ; 2.3 => Don't crlf, close open location, etc. + .IOT OUT,A + JRST LOSE1 + +dirblk:: +dirdev: sixbit /DSK/ +dirdir: -1 + 0 + 0 + +PTRS: BLOCK NPTRS + +BUF: BLOCK NPTRS*40. ; 200. character lines + +END GO