! Steering program: Set parameters, open files, call EDI, close files !ECCExx: Implementation of ECCE for 2900/EMAS, VAX/VMS and APM ! Revised specification (1981/82) including video support. ! Hamish Dewar Edinburgh University Computer Science Department ! constinteger MAXNAME=255 ! recordformat EDFILE(integer START1,LIM1, {part 1} START2,LIM2, {part 2} LIM, {VMLIM} LBEG,FP,CHANGE,FLAG, LINE {line number of current pos}, DIFF {diff between LINE and ROW}, byte TOP {top row of sub_window}, WIN {floating top}, BOT {bottom row of sub_window}, MIN {minimum window size}, ROW {last row position}, COL {last col position}, string (maxname) NAME) ! external routine spec EDI(record (edfile)name main,sec, string (255) message) external routine spec CONNECT EDFILE(record (edfile)name f) external routine spec DISCONNECT EDFILE(record (edfile)name f) externalroutinespec SET PARAMETERS(string (maxname)name in,sec,out, string (255) parm) ! !$IF VAX or EMAS !IMP syntax checking routine: externalroutinespec ECCECI(record (edfile)name main) !$FINISH ownrecord (edfile) MAIN=0,SEC=0 ownstring (maxname) OUTNAME{}="" ! !$IF EMAS {%systemroutinespec PSYSMES(%integer root, flag) {%systemintegermapspec COMREG(%integer i) {%systemroutinespec OUTFILE(%string(31) s, %integer l,m,p, %c { %integername c,f) {%external%integerfnspec CHECKOUTPUTFILE(%string (31) s, %integer default) {%externalroutine VECCE(%string(255) parm) {%integer f,i,same,holesize,tempsize,outhead {%string(255) heading { main = 0; sec = 0 { set parameters(main_name,sec_name,outname,parm) { main_name = "" %if main_name = ".N" { outname = main_name %if outname = "" { outname = "" %if outname = ".N" { same = 0; same = 1 %if outname = main_name { %if outname # "" %start { f = checkoutputfile(outname,same) { -> errstop %if f # 0 { %finish { connect edfile(main) { f = main_flag { -> stop %if f # 0 { connect edfile(sec) { f = sec_flag { -> stop %if f # 0 { %if outname # "" %start { holesize = 262144 { %cycle { tempsize = main_lim2-main_start2 + sec_lim2-sec_start2 + holesize { outfile("T#ETEMP",-tempsize,tempsize,0,outhead,f) { %exit %if f=0 { ->errstop %if holesize = 16384; ! 16k - minimum reasonable { holesize = holesize>>1 { %repeat { integer(outhead+12) = 3; !type = character { main_start1 = outhead+32 { main_lim = main_start1+integer(outhead+8)-32 { %finish !$IF VAX {\V10IMP %externalstring(255)%fnspec CLIPARAM {V10IMP} externalstring (255)fnspec CLIPARAM alias "IMP_CLI_PARAM" begin integer f,i,same string (255) heading set parameters(main_name,sec_name,outname,cliparam) main_name = "" if main_name = ".N" outname = main_name if outname = "" outname = "" if outname = ".N" same = 0; same = 1 if outname = main_name if outname = "" start ; !ie was /.N connect edfile(main); !without extra -> stop if main_flag # 0 finish else start if sec_name # "" start connect edfile(sec) -> stop if sec_flag # 0 main_flag = sec_lim2-sec_start2; !size of sec file finish main_flag = main_flag+16384; !extra space connect edfile(main) -> stop if main_flag # 0 finish !$IF APM {%externalstring(255)%fnspec CLIPARAM {%begin {%integer i,same {%string(255) heading { set parameters(main_name,sec_name,outname,cliparam) { main_name = "" %if main_name = ".N" { outname = main_name %if outname = "" { outname = "" %if outname = ".N" { same = 0; same = 1 %if outname = main_name { main_flag = 32768; !plus extra { connect edfile(main) { -> stop %if main_flag # 0 { %if sec_name # "" %start { connect edfile(sec) { -> stop %if sec_flag # 0 { %finish !$FINISH if outname # "" start if main_name # "" start heading = "Editing ".main_name heading = heading." with ".sec_name if sec_name # "" heading = heading." to ".outname if same = 0 finish else start heading = "Creating ".outname finish main_change = 16_7FFFFFFF finish else start heading = "Showing ".main_name main_change = -1 finish ! main_lim1 = main_start1; sec_lim1 = sec_start1 main_fp = main_start2 edi(main,sec,heading) !$IF VAX or EMAS if main_flag!32 = 'i' start Print string ("IMP Syntax checker is not available") Newline finish !$FINISH ! !MAIN_FLAG is negative if edit abandoned !MAIN_CHANGE is untouched (neg or inf) if no changes if main_flag < 0 or (main_change = 16_7FFFFFFF and same # 0) start print string(" File unchanged") main_change = -1 finish !$IF EMAS { %if main_change >= 0 %start; !file to be written { sec_name = main_name; main_name = outname { disconnect edfile(main) { f = main_flag { %if f # 0 %then printstring(" Edited file left in T#ETEMP") %c { %else printstring(sec_name." edited to ".main_name) { %finish { -> stop {errstop: { psysmes(73,f) %if f > 0 {stop: { newline { comreg(24) = f; !return code {%end; !OF VECCE { {%externalroutine VSHOW(%string(255) parm) { vecce(parm."/.N") {%end { {%externalroutine VRECAP(%string(255) parm) {%systemroutinespec GET JOURNAL(%string(31)%name file, %integername flag) {%string(31) file {%integer flag { get journal(file,flag) { %if flag = 0 %start { %if parm = "" %then vshow(file) %c { %else %if charno(parm,1) = '/' %then vecce(file.parm) %c { %else vecce(file."/".parm) { %finish { %if flag > 0 %then psysmes(75,flag) { comreg(24) = flag; !set return code {%end { {%ENDOFFILE !$IF VAX or APM sec_name = main_name; main_name = outname disconnect edfile(main) if main_change >= 0 start ; !file written printstring(sec_name." edited to ") newline if length(sec_name) > 30 printstring(main_name) finish if sec_start1 # 0 start sec_change = -1 disconnect edfile(sec) finish stop: newline ENDOFPROGRAM !$FINISH