! 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