************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
   76   %constinteger SCREENMODE=controlterm+notermecho+leavecontrols
   77   ! Video FUNction/MODE flag values:
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
   76   %constinteger SCREENMODE=controlterm+notermecho+leavecontrols+passdel
   77   ! Video FUNction/MODE flag values:
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  151   
  152   !  Machine code routines to do fast searches for and counts of bytes
  153   %external %integer %fn %spec search(%integer start,finish,key)
  154   %external %integer %fn %spec search back(%integer start,finish,key)
  155   %external %integer %fn %spec count(%integer start,finish,key)
  156   !
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  151   !
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  172   !
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  167   %string(255)%fn ITOS(%integer i)
  168     %external %string(255) %fn %spec imp itos %alias "ITOS" (%integer n,p)
  169     %result = imp itos(i,0)
  170   %end
  171   !
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  303   {  x = x & 255
  304   {  val <- x
  305   {%end
  306   {%externalroutinespec EMAS3(%stringname com, par, %integername flag)
  307   {%externalstringfnspec SYSMESS %alias "S#FAILUREMESSAGE" (%integer i)
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  302   {  val = x & 255
  303   {%end
  304   {%externalstringfnspec SYSMESS %alias "S#FAILUREMESSAGE" (%integer i)
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  342   {   %integer flag
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  339   {   %externalroutinespec emas3(%stringname com,par,%integername flag)
  340   {   %integer flag
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  384   {   %integer FLAG
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  382   {   %external %routine %spec EMAS3(%string %name COMMAND, PARAMS,
  383   {      %integer %name FLAG)
  384   {   %integer FLAG
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  388   {%external %integer %function %spec UINFI %alias "s#uinfi"(%integer N)
  389   {%constinteger max file size = 6, default define size = 36
  390   {%constinteger ksh=10
  391   {%external %integer TEMPID = 0
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  388   {%external %integer TEMPID = 0
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  396   {  holesize = uinfi(default define size);extra = out_flag; tempid = tempid + 1
  397   {  holesize = holesize>>1 %while holesize >= 2*16384 %and %c 
  398   {                                holesize+extra > uinfi(max file size)<<ksh
  399   {  %if holesize+extra > uinfi(max file size)<<ksh %start
  400   {    tempid = tempid - 1 
  401   {    out_flag=280
  402   {    %return
  403   {  %finish
  404   {    
  405   {  %cycle
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  393   {  holesize = 262144;extra = out_flag; tempid = tempid + 1
  394   {  %cycle
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  431   {  emas3checkname(s,1,x'4000' ! x'80' !  4  ! 2   , flag)
  432   {                !    myfile    char   exist write
  433   {! Keith - if we use the x'4000' we dont need to check ownership --  Graham
  434   {!  ( I know its not in the manual but it is in the subsystem!)  
  435   {!  %if ( s -> user.("{").junk %or s -> user.(":"). junk ) %c
  436   {!     %and user # uinfs(1) %and user # "" %c
  437   {!     %then setfname(s) %and %result = 258 {Illegal use of another user's file}
  438   {  %if s -> s1.("_").s2 %start;      !PD file
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  420   {  emas3checkname(s,1,134,flag);               
  421   {  %if s -> user.(":").junk %and user # uinfs(1) %and user # "" %c
  422   {     %then setfname(s) %and %result = 258 {Illegal use of another user's file}
  423   {  %if s -> s1.("_").s2 %start;      !PD file
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  441   {      emas3checkname(s1, 2  , x'400'  !  4  , flag)
  442   {                    !   file  pdfile   exist
  443   {    setfname(s2)
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  426   {      emas3checkname(s1,2,1028,flag);          ! Must exist, be writeable PD
  427   {    setfname(s2)
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  476   {%routine newgen or rename(%string(255) from, to, %integer %name flag)
  477   {! Keith - I have added this routine to abstract out all the occurrences
  478   {!   of newgen then rename. This is also a suitable place to handle the
  479   {!   case of using secondary indexes. As far as I can see both ECCE and EDIT
  480   {!   get round this by creating their workfile in the index to be written to.
  481   {!   I have just added code to copy the output file across.
  482   {!   (In case you have never seen a secondary index - the problem is quite
  483   {!  clear when you write out the edit. - a message appears that both files
  484   {!  (presumably of the newgen or rename) have to be on the same index.)
  485   {! Graham
  486   {
  487   {   %routine copy to index(%string %name from file, to file, %integer %name flag)
  488   {      %external %routine %spec copy %alias "S#COPY"(%string(255) from file,
  489   {         to file, %integer %name flag)
  490   {      %integer from fsys, to fsys, xflag
  491   {      %string(255)from index, to index, invocs, tempfile
  492   {
  493   !$FINISH
  494   ! eg if we have to handle ERCC14:T#ETEMP and ERCC14{TEX}:XXX
  495   ! it is clear that we must copy T#ETEMP to the index {TEX}: before the
  496   ! newgen and rename calls used below have any chance of working
  497   ! so we will copy ERCC14:T#ETEMP to ERCC14{TEX}:T#ETEMP and return
  498   ! the new value of 'from file'
  499   ! we do NOT destroy ERCC14:T#ETEMP as it may be needed later if the
  500   ! rename and newgens both fail (it will end up being renamed 
  501   ! ERCC14:VECCE#SAVE so has to be in ERCC14: rather than ERCC14{TEX}:
  502   !$IF AMDAHL
  503   {
  504   {      emas3checkname(from file, 1,           1 !  4  ! 16 ,   0)
  505   {                     !         fileormem   read exist nosuffix
  506   {      emas3checkname(to file, 1,            2  ! 16 ,    0)
  507   {                     !         fileormem  write nosuffix
  508   {      { names are now fully expanded so we can just resolve on : }
  509   {      to file -> to index.(":")
  510   {      from file -> (":").temp file
  511   {      copy(from file, toindex.":".temp file, flag)
  512   {      flag = flag & x'7fffffff' { strip off top bit }
  513   {      %if flag = 0 %then from file = to index.":".temp file
  514   {   %end;! of copy to index
  515   {
  516   {   %if to -> ("{") %then %start
  517   {      copy to index(from, to, flag)
  518   {   %finish
  519   {   newgen(from, to, flag)
  520   {   %IF flag # 0 %START
  521   {      rename(from, to, flag)
  522   {      cherish(to) %IF flag = 0
  523   {   %FINISH
  524   {%end;! of newgen or rename
  525   {
  526   {%EXTERNAL %ROUTINE disconnect edfile(%RECORD (edfile) %NAME out)
  527   {   %STRING (255) s1, s2, tempfile
  528   {   %INTEGER i, outhead, f
  529   {   %RETURN %IF out_change < 0 %OR out_flag < 0 %OR out_lim1 = 0
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  460   {%EXTERNAL %ROUTINE disconnect edfile(%RECORD (edfile) %NAME out)
  461   {   %STRING (255) s1, s2, tempfile
  462   {   %INTEGER i, outhead,f
  463   {   %RETURN %IF out_change < 0 %OR out_flag < 0 %OR out_lim1 = 0
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  546   {      newgen or rename(tempfile, out_name, out_flag)
  547   {   %FINISH
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  480   {      newgen(tempfile, out_name, out_flag)
  481   {      %IF out_flag # 0 %START
  482   {         rename(tempfile, out_name, out_flag)
  483   {         cherish(out_name) %IF out_flag = 0
  484   {      %FINISH
  485   {   %FINISH
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  580   {      newgen or rename(tempfile, out_name, out_flag)
  581   {   %FINISH
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  518   {      newgen(tempfile, out_name, out_flag)
  519   {      %IF out_flag # 0 %START
  520   {         rename(tempfile, out_name, out_flag)
  521   {         cherish(out_name) %IF out_flag = 0
  522   {      %FINISH
  523   {   %FINISH
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  584   {    newgen or rename(tempfile, out_name, f)
  585   {    %if f # 0 %then disconnect(tempfile,f) %and out_name = tempfile
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  526   {    newgen(tempfile, out_name,f)
  527   {    %if f # 0 %start
  528   {      rename(tempfile, out_name,f)
  529   {      cherish(out_name) %if f = 0
  530   {    %finish
  531   {    %if f # 0 %then disconnect(tempfile,f) %and out_name = tempfile
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  752   {              "call pamhelp(ERCLIB:VECCE.PAM)",in)
  753   {  emas3string("OUTPUT file;fileormem,write,ornull,or.null,cowild;".in,out)
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  698   {              "call pamhelp(ERCC14:E.XA.PAMHELP)",in)
  699   {  emas3string("OUTPUT file;fileormem,write,ornull,or.null,cowild;".in,out)
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  823   %integer HOLD,HOLD1,HOLDSYM,QSYM;  !work variables
  824   %integer AMOUNT;                   !amount of text to be moved (multi-use)
  825   %integer ERROR
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  769   %integer HOLD,HOLDSYM,QSYM;        !work variables
  770   %integer HOLD1
  771   %integer ERROR
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
  850   !$FINISH
  851   %integer GDIFF
  852   %integer FOUNDPOS,FOUNDSIZE; !matched text info
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  796   {%integer GDIFF
  797   !$IF VAX or APM
  798   %constinteger GDIFF=0
  799   !$FINISH
  800   %integer FOUNDPOS,FOUNDSIZE; !matched text info
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1034     %on %event 9,10,13,14 %start;             !End-of-input, Too big
 1035   ! traps events signalled in program - print out a message if event is 9 or 10
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  982     %on %event 9,10,14 %start;             !End-of-input, Too big
  983   ! traps events signalled in program - print out a message if event is 9 or 10
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1045       %if event_event = 13 %start;       ! End of file from batch or file
 1046         -> pc('C')
 1047       %finish
 1048       %if event_event = 9 %or event_event = 10 %start
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
  993       %if event_event = 9 %or event_event = 10 %start
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1073     commandstream = commandstream + 1
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1018   !$IF VAX
 1019     set video mode(smode);  !without NOEVENT9
 1020   !$IF VAX OR AMDAHL
 1021     commandstream = commandstream + 1
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1101   %string(31)%fn ITOS(%integer i)
 1102     %string(31) s
 1103     %integer sign,j
 1104     s = ""; sign = i; i = -i %if i < 0
 1105     %while i # 0 %cycle
 1106        j = i//10
 1107        s = tostring(i-10*j+'0').s
 1108        i = j
 1109     %repeat
 1110     s = "0" %if s = ""
 1111     s = "-".s %if sign < 0
 1112     %result = s
 1113   %end
 1114   
 1115   %routine PRINT CODE(%integer k)
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1049   !
 1050   %routine PRINT CODE(%integer k)
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1299   %routine PANIC;                ! Emergency stop routine
 1300   !$IF AMDAHL
 1301   {  %const %string(255) panic save name = ":VECCE#SAVE",
 1302   {                      diagnostic file = ":VECCE#DIAG"
 1303   !$IF VAX
 1304     %const %string(255) panic save name = "VECCE_PANIC.SAVE",
 1305                         diagnostic file = "VECCE_PANIC.DIAG"
 1306   !$FINISH
 1307     %external %routine %spec DISCONNECT EDFILE(%record(edfile)%name out)
 1308   
 1309     %routine print frame(%string(255) text)
 1310       %integer i
 1311   
 1312       %if text = "*" %start
 1313         print symbol('*') %for i = 1,1,o_wcols-1
 1314       %else
 1315         text = "*   ".text
 1316         text = text." " %while length(text) < o_wcols-2
 1317         length(text) = o_wcols - 2
 1318         text = text."*"
 1319         print string(text)
 1320       %finish
 1321       new line
 1322     %end
 1323   
 1324     %if keeplog > 0 %start
 1325       select output(logstream); close output
 1326       select output(0); logstream = logstream - 1 %if logstream > 0
 1327     %finish
 1328     pop window;  win = vdu
 1329     clear frame; 
 1330     set video mode(0)
 1331     select output(0)
 1332     print frame("*")
 1333     print frame("")
 1334     print frame("PANIC - Internal error in VECCE")
 1335     print frame("")
 1336     print frame("Writing diagnostics to file ".diagnostic file)
 1337   !  select output(1); close output; select output(0)
 1338     open output(1,diagnostic file); select output(1)
 1339     %monitor
 1340     close output; select output(0)
 1341     print frame("Diagnostics written")
 1342     print frame("")
 1343     main = cur %if sin <= 0
 1344     main_name = panic save name
 1345     print frame("Attempting to save your edit in file ".main_name)
 1346     %if main_lim1 >= main_start1 %and main_lim2 >= main_start2 %c
 1347       %and  (gdiff # 0 %or (main_lim >= main_lim2 %and main_start2 > main_lim1)) %start; !consistency check
 1348       disconnect edfile(main) 
 1349       print frame("Saved")
 1350     %else
 1351       print frame("!!! WARNING - file pointers inconsistent !!!")
 1352       %if main_lim1 >= main_start1 %start;          ! main_start2 is the culprit
 1353         %if main_lim2 >= oldstart2 %start;         ! OLDSTART2 is a good guess
 1354           main_start2 = oldstart2
 1355           print frame("!!! WARNING - unable to save whole edit buffer ")
 1356           print frame("            - text may be wrong around site of last alteration !!!")
 1357         %else
 1358           main_start2 = main_lim2
 1359           print frame("!!! WARNING - unable to save whole edit buffer ")
 1360           print frame("            - text after site of last change will be MISSING !!!")
 1361         %finish
 1362       %else;                                       ! main_lim1 is wrong
 1363         %if oldlim1 >= main_start1 %start;         ! OLDLIM1 is a good guess
 1364           main_lim1 = oldlim1
 1365           print frame("!!! WARNING - unable to save whole edit buffer ")
 1366           print frame("            - text may be wrong around site of last alteration !!!")
 1367         %else
 1368           main_lim1 = main_start1
 1369           print frame("!!! WARNING - unable to save whole edit buffer ")
 1370           print frame("            - text before site of last change will be MISSING !!!")
 1371         %finish
 1372       %finish
 1373       disconnect edfile(main)
 1374     %finish
 1375     print frame("")
 1376     print frame("Please report this bug by electronic mail to REFSON@UK.AC.OX.VAX")
 1377     print frame("You should include the following files")
 1378     print frame("1) The original file you were editing")
 1379     print frame("2) Any secondary files you used")
 1380     print frame("3) The diagnostics file ".diagnostic file)
 1381     %if keeplog = 0 %start
 1382       print frame("4) Some idea of what you were doing at the time of the crash")
 1383     %finishelseif keeplog < 0 %start
 1384       print frame("4) The edit log.  You can extract this from your journal using VRECAP")
 1385     %else
 1386       print frame("4) The edit log.  This is in file ".o_logfile)
 1387     %finish
 1388     print frame("")
 1389     print frame("Thank you for your co-operation in reporting this bug")    
 1390     print frame("*")
 1391   !$IF AMDAHL
 1392   {  %if trapno >= 0 %then i = discard trap(trapno)
 1393   !$FINISH
 1394     %stop
 1395   %end  
 1396   
 1397   %routine SET LEND
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1234   %routine SET LEND
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1400     %if cur_start2 <= lend < cur_lim2 %start
 1401       lend = search(lend,cur_lim2-1,nl);    ! Machine code routine to return addr of next nl
 1402     %finishelseif cur_start1 <= lend < cur_lim1 %start
 1403       lend = search(lend,cur_lim1-1,nl)
 1404     %else
 1405       panic
 1406     %finish
 1407   %end
 1408   
 1409   %routine SET LBEG(%integer %name lbeg, %integer p)
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1237   !$IF APM
 1238   {  *MOVE LEND,A0; *MOVEQ #10,D0
 1239   {  *CMP.B (A0)+,D0; *BNE #-4; *SUBQ #1,A0
 1240   {  *MOVE A0,LEND
 1241   !$IF VAX or AMDAHL
 1242     %if lend # cur_lim2 %start
 1243       lend = lend+1 %while byteinteger(lend) # nl
 1244     %finish
 1245   !$FINISH
 1246   %end
 1247   !
 1248   %routine SET LBEG(%integer %name lbeg, %integer p)
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1412   !  %cycle
 1413   !    %if lbeg = cur_start2 %start
 1414   !      lbeg = cur_lim1
 1415   !      %while lbeg # cur_start1 %and byteinteger(lbeg-1) # nl %cycle
 1416   !        lbeg = lbeg-1
 1417   !      %repeat
 1418   !      lbeg = lbeg+(cur_start2-cur_lim1)
 1419   !      %return
 1420   !    %finish
 1421   !    %return %if lbeg = cur_start1 %or byteinteger(lbeg-1) = nl
 1422   !    lbeg = lbeg-1
 1423   !  %repeat
 1424     ! Faster version using Machine code routine to search back for NL
 1425     %if cur_start1 <= p <= cur_lim1 %start;     ! Pointer in upper half
 1426       lbeg = 1+search back(cur_start1,p-1,nl); ! Search upper half
 1427       lbeg = cur_start1 %if lbeg = 1
 1428     %finish %else %if cur_start2 <= p <= cur_lim2 %start
 1429       lbeg = 1+search back(cur_start2,p-1,nl); ! Find preceding NL
 1430       %if lbeg = 1 %start;                     ! NL not found in lower half
 1431         lbeg = 1+search back(cur_start1,cur_lim1-1,nl); ! Look in upper half
 1432         lbeg = cur_start1 %if lbeg = 1;        ! Beginning of file - no previous NL 
 1433         lbeg = lbeg+(cur_start2-cur_lim1);     ! Make sure p-lbeg is line length.
 1434       %finish
 1435     %else
 1436       panic
 1437     %finish
 1438   %end
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1251     %cycle
 1252       %if lbeg = cur_start2 %start
 1253         lbeg = cur_lim1
 1254         %while lbeg # cur_start1 %and byteinteger(lbeg-1) # nl %cycle
 1255           lbeg = lbeg-1
 1256         %repeat
 1257         lbeg = lbeg+(cur_start2-cur_lim1)
 1258         %return
 1259       %finish
 1260       %return %if lbeg = cur_start1 %or byteinteger(lbeg-1) = nl
 1261       lbeg = lbeg-1
 1262     %repeat
 1263   %end
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1444     %unless cur_start1 <= lbeg <  cur_lim1 %or %c
 1445             cur_start2 <= lbeg <= cur_lim2 %start
 1446       %result = col %if search(lbeg-(cur_start2-cur_lim1),cur_lim1,tab) = 0 %c
 1447                         %and search(cur_start2,lbeg+col-1,tab) = 0
 1448       lbeg = lbeg - (cur_start2 - cur_lim1)
 1449     %else
 1450       %result = col %if search(lbeg,lbeg+col,tab) = 0
 1451     %finish
 1452     p = lbeg; t = 0; c = 0; lend = 0
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1269     lbeg = lbeg - cur_start2 + cur_lim1 %unless cur_start1 <= lbeg <  cur_lim1 %or %c
 1270                                                 cur_start2 <= lbeg <= cur_lim2
 1271     p = lbeg; t = 0; c = 0; lend = 0
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1471     panic %unless 0 <= vp-lbeg <= 2000
 1472     %result = vp - lbeg %if o_exptabs = 0
 1473     %unless cur_start1 <= lbeg <  cur_lim1 %or %c
 1474             cur_start2 <= lbeg <= cur_lim2 %start
 1475       ! Check if any tabs in line up to VP and return if not
 1476       %result = vp-lbeg %if search(lbeg-(cur_start2-cur_lim1),cur_lim1,tab) = 0 %c
 1477                         %and search(cur_start2,vp-1,tab) = 0
 1478       lbeg = lbeg - (cur_start2 - cur_lim1)
 1479     %else
 1480       %result = vp-lbeg %if search(lbeg,vp-1,tab) = 0
 1481     %finish
 1482     !  VP may be > lend and in gap. Put it back into upper half
 1483     vp = vp + cur_start2 - cur_lim1 %if cur_lim1 <= vp < cur_start2 %or %c
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1290     %result = vp - lbeg %if o_exptabs = 0
 1291     lbeg = lbeg - cur_start2 + cur_lim1 %unless cur_start1 <= lbeg <  cur_lim1 %or %c
 1292                                                 cur_start2 <= lbeg <= cur_lim2
 1293     vp = vp + cur_start2 - cur_lim1 %if cur_lim1 <= vp < cur_start2 %or %c
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1492       panic %if col > 2000
 1493       p = p + 1
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1302       %monitor %and %stop %if col > 10000
 1303       p = p + 1
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1614   !    altmin = altmin-1 %while altmin # cur_start1 %and byteinteger(altmin-1) # nl
 1615       altmin = 1 + search back(cur_start1,altmin-1,nl)
 1616       altmin = cur_start1 %if altmin = 1
 1617       c = vp-altmin
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1424       altmin = altmin-1 %while altmin # cur_start1 %and byteinteger(altmin-1) # nl
 1425       c = vp-altmin
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1671     set lbeg(vp, vp);                    ! Make sure vp is at beginning of line
 1672     %while pre > 0 %cycle
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1479     %while pre > 0 %cycle
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1675   !    %cycle
 1676   !      vp = vp-1
 1677   !      vp = cur_lim1 %if vp = cur_start2
 1678   !    %repeat %until vp = cur_start1 %or byteinteger(vp-1) = nl
 1679       %if cur_start2 < vp <= cur_lim2 %start
 1680         vp = 1 + search back(cur_start2,vp-2,nl)
 1681         vp = 1 + search back(cur_start1,cur_lim1-1,nl) %if vp = 1
 1682       %finishelse vp = 1 + search back(cur_start1,vp-2,nl)
 1683       vp = cur_start1 %if vp = 1
 1684       count = count + 1;  pre = pre-1
 1685     %repeat
 1686     vp = cur_start2 %if vp = cur_lim1
 1687     %while pre < 0 %cycle
 1688       %return %if vp = cur_lim2
 1689   !    %cycle
 1690   !      vp = cur_start2 %if vp = cur_lim1
 1691   !      %return %if vp = cur_lim2
 1692   !      vp = vp+1
 1693   !    %repeat %until byteinteger(vp-1) = nl
 1694       %if cur_start1 <= vp <= cur_lim1 %start
 1695         vp = 1 + search(vp,cur_lim1-1,nl)
 1696         vp = 1 + search(cur_start2,cur_lim2-1,nl) %if vp = 1
 1697       %finishelse vp = 1 + search(vp,cur_lim2-1,nl)
 1698       vp = cur_lim2 %and %return %if vp = 1
 1699       pre = pre + 1; count = count - 1
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1482       %cycle
 1483         vp = vp-1
 1484         vp = cur_lim1 %if vp = cur_start2
 1485       %repeat %until vp = cur_start1 %or byteinteger(vp-1) = nl
 1486       count = count + 1;  pre = pre-1
 1487     %repeat
 1488     %while pre < 0 %cycle
 1489       %return %if vp = cur_lim2
 1490       %cycle
 1491         vp = cur_start2 %if vp = cur_lim1
 1492         %return %if vp = cur_lim2
 1493         vp = vp+1
 1494       %repeat %until byteinteger(vp-1) = nl
 1495       pre = pre + 1; count = count - 1
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1737         %if fscroll # 0 %or r-indic*standoff >= cur_top %start
 1738   ! ****** Better Scrolling Algorithm KR 1987 ****
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1533         %if fscroll # 0 %or r >= cur_top %start
 1534   ! ****** Better Scrolling Algorithm KR 1987 ****
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1747                 at(cur_top,o_mark)
 1748               %else                ;                  ! expand window
 1749                 cur_win = cur_win-1
 1750                 at(cur_win,0)
 1751                 print symbol(' ') %if o_mark # 0;     ! Clear header in MARK mode
 1752               %finish
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1543               %else                ;                  ! expand window
 1544                 cur_win = cur_win-1
 1545                 at(cur_win,o_mark)
 1546               %finish
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1958       %if q > p %and def1(term) = 'H' %start;   ! Interpret text as command
 1959         out string(text); out symbol(nl);       ! (see DATA ENTRY)
 1960       %else
 1961         %if q > p %start;                         ! Text to be inserted or replace
 1962           -> exit %if sin&(\1) # 0 %or lend = cur_lim2;! No alterations allowed
 1963           %if mode = inserting %then k = define free key("I") %c
 1964                                %else k = define free key("O")
 1965           out control(k); out symbol(nl)
 1966           out string(text); out symbol(nl)
 1967           out string("%K"); out control(k); out symbol(':'); ! Remove macro definition
 1968           out symbol(nl)
 1969         %finish
 1970         out control(term); out symbol(nl)
 1971       %finish
 1972     %finish %else %if pcflag = 'Q' %or pcflag = 'K' %c
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1752       %if q > p %start;                         ! Text to be inserted or replace
 1753         -> exit %if sin&(\1) # 0 %or lend = cur_lim2;! No alterations allowed
 1754         %if mode = inserting %then k = define free key("I") %c
 1755                              %else k = define free key("O")
 1756         out control(k); out symbol(nl)
 1757         out string(text); out symbol(nl)
 1758         out string("%K"); out control(k); out symbol(':'); ! Remove macro definition
 1759         out symbol(nl)
 1760       %finish
 1761       out control(term); out symbol(nl)
 1762     %finish %else %if pcflag = 'Q' %or pcflag = 'K' %c
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 1993         length(text) = length(text) - 1 %while %c
 1994                        length(text) > 0 %and char no(text,length(text)) = ' '
 1995         out control(term) %if text = "" %and pcflag = 0
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1783         length(text) = length(text) - 1 %while char no(text,length(text)) = ' '
 1784         out control(term) %if text = "" %and pcflag = 0
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2022   !$IF VAX OR AMDAHL
 2023       %signal 13;                   ! Exit and Close edit
 2024   !$IF APM
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1811   !$IF VAX
 1812       set video mode(smode!noevent9);  !to force use of TT
 1813   !$IF APM
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2054          %if o_exptabs # 0 %start;          ! Use dumb mode if there is a tab
 2055            dumbinsert = 1 %if search(fp,lend,tab) # 0;  ! on the rest of the line
 2056          %finish
 2057       %finish %else dumbinsert = 1
 2058       %if dumbinsert = 0 %then set video mode(smode ! insertmode ! passdel ! nodelecho) %c
 2059                          %else %if fp < lend %then set video mode(smode ! single) %c
 2060                          %else set video mode(smode ! nodelecho ! passdel)
 2061       insertpos = fp; insertpos = lend %if fp > lend
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1843          insertpos = fp
 1844          %if o_exptabs # 0 %start;          ! Use dumb mode if there is a tab
 1845            %while insertpos < lend %cycle;  ! on the rest of the line
 1846              dumbinsert = 1 %and %exit %if byteinteger(insertpos) = tab
 1847              insertpos = insertpos + 1
 1848            %repeat
 1849          %finish
 1850       %finish %else dumbinsert = 1
 1851       %if dumbinsert = 0 %then set video mode(smode ! insertmode ! nodelecho) %c
 1852                          %else %if fp < lend %then set video mode(smode ! single) %c
 1853                          %else set video mode(smode ! nodelecho)
 1854       insertpos = fp; insertpos = lend %if fp > lend
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2144                 set video mode(smode!insertmode!passdel!nodelecho) %if dumbinsert = 0
 2145               %finish
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 1937                 set video mode(smode!insertmode!nodelecho) %if dumbinsert = 0
 1938               %finish
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2346   %routine COPY ACROSS
 2347     move block(cur_lim2-oldstart2,oldstart2,oldstart2+gdiff)
 2348     cur_start2 = cur_start2+gdiff;  oldstart2 = oldstart2+gdiff
 2349     %if fp = cur_lim2 %start;  !hence not relocated
 2350       fp = newlim;  cur_lbeg = fp;  lend = fp
 2351     %finish
 2352     cur_lim2 = newlim;  gdiff = 0
 2353   %end
 2354   
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2139   !$IF AMDAHL
 2140   {%routine COPY ACROSS
 2141   {  move block(cur_lim2-oldstart2,oldstart2,oldstart2+gdiff)
 2142   {  cur_start2 = cur_start2+gdiff;  oldstart2 = oldstart2+gdiff
 2143   {  %if fp = cur_lim2 %start;  !hence not relocated
 2144   {    fp = newlim;  cur_lbeg = fp;  lend = fp
 2145   {  %finish
 2146   {  cur_lim2 = newlim;  gdiff = 0
 2147   {%end
 2148   !$FINISH
 2149   
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2358     copy across %if gdiff # 0
 2359     amount = cur_lim-delmax-1;  gap = oldstart2-cur_lim1
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2153   !$IF AMDAHL
 2154   {  copy across %if gdiff # 0
 2155   !$FINISH
 2156     amount = cur_lim-delmax-1;  gap = oldstart2-cur_lim1
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2372   !    delmax = delmax-1 %while byteinteger(delmax) # nl
 2373       delmax = search back(0,delmax,nl)
 2374       lastdelmax = delmax
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2169       delmax = delmax-1 %while byteinteger(delmax) # nl
 2170       lastdelmax = delmax
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2379           copy across %if gdiff # 0
 2380           k = oldstart2-cur_lim1;  gasp %if k <= 0
 2381           %if k > l > 1024 %then k = l;      ! Free space > needed : shuffle by needed
 2382           %if k > 1024 > l %then k = 1024;   ! Shuffle by min of 1024 if possible
 2383           move block(delmax+1-oldstart2,oldstart2,oldstart2-k)
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2175   !$IF AMDAHL
 2176   {        copy across %if gdiff # 0
 2177   !$FINISH
 2178           k = oldstart2-cur_lim1;  gasp %if k <= 0
 2179           %if k > 1024 %start;  !a bit much
 2180             %if k > l > 1024 %then k = l %else k = 1024
 2181           %finish
 2182           move block(delmax+1-oldstart2,oldstart2,oldstart2-k)
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2404         copy across %if gdiff # 0
 2405         j = cur_lim1-fp;                     !amount to shift down
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2203   !$IF AMDAHL
 2204   {      copy across %if gdiff # 0
 2205   !$FINISH
 2206         j = cur_lim1-fp;                     !amount to shift down
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2442     %integer l
 2443     %return %if cur_lim1 = cur_start1 %or mode > 1;  !sec in (??)
 2444     %if mode < 0 %start;  !erasing
 2445   !    %cycle
 2446   !      markpos = 0 %if cur_lim1-1 = markpos;       ! Erased over marker
 2447   !      cur_lim1 = cur_lim1-1
 2448   !      %if cur_lim1 < altmin %start
 2449   !        altmin = cur_lim1
 2450   !        %if cur_lim1 < oldlim1 %start
 2451   !          copy across %if gdiff # 0
 2452   !          oldlim1 = cur_lim1;  oldstart2 = oldstart2-1
 2453   !          byteinteger(oldstart2) = byteinteger(oldlim1)
 2454   !        %finish
 2455   !      %finish
 2456   !      cur_lbeg = cur_lbeg+1
 2457   !      amount = amount-1
 2458   !    %repeat %until amount <= 0
 2459       markpos = 0 %if cur_lim1-amount <= markpos < cur_lim1
 2460       cur_lim1 = cur_lim1 - amount
 2461       cur_lbeg = cur_lbeg + amount
 2462       %if cur_lim1 < altmin %start
 2463         altmin = cur_lim1 
 2464         l = oldlim1 - cur_lim1
 2465         %if l > 0 %start
 2466           copy across %if gdiff # 0
 2467           oldstart2 = oldstart2 - l
 2468           %if l = 1 %then byteinteger(oldstart2) = byteinteger(cur_lim1) %C
 2469                     %else move(l,cur_lim1,oldstart2)
 2470           oldlim1 = cur_lim1
 2471         %finish
 2472       %finish
 2473       %return
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2243     %return %if cur_lim1 = cur_start1 %or mode > 0;  !sec in (??)
 2244     %if mode < 0 %start;  !erasing
 2245       %cycle
 2246         markpos = 0 %if cur_lim1-1 = markpos;       ! Erased over marker
 2247         cur_lim1 = cur_lim1-1
 2248         %if cur_lim1 < altmin %start
 2249           altmin = cur_lim1
 2250           %if cur_lim1 < oldlim1 %start
 2251   !$IF AMDAHL
 2252   {          copy across %if gdiff # 0
 2253   !$FINISH
 2254             oldlim1 = cur_lim1;  oldstart2 = oldstart2-1
 2255             byteinteger(oldstart2) = byteinteger(oldlim1)
 2256           %finish
 2257         %finish
 2258         cur_lbeg = cur_lbeg+1
 2259         amount = amount-1
 2260       %repeat %until amount <= 0
 2261       %return
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2477         consolidated = lend-cur_start2
 2478         consolidated = consolidated+1 %unless lend = cur_lim2
 2479         move block(consolidated,cur_start2,cur_lim1)
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2265         consolidated = lend+1-cur_start2
 2266         move block(consolidated,cur_start2,cur_lim1)
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2518     set lend
 2519     %result = 1
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2305     %if lend # cur_lim2 %start
 2306   !$IF APM
 2307   {    *MOVE LEND,A0; *MOVEQ #10,D0
 2308   {    *CMP.B (A0)+,D0; *BNE #-4; *SUBQ #1,A0
 2309   {    *MOVE A0,LEND
 2310   !$IF VAX or AMDAHL
 2311       lend = lend+1 %while byteinteger(lend) # nl
 2312   !$FINISH
 2313     %finish
 2314     %result = 1
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2559   %integer pos,lim, lines, amount
 2560     pos = def&posmask;  lim = def>>limshift
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2354   %integer pos,lim
 2355     pos = def&posmask;  lim = def>>limshift
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2566   !  %cycle
 2567   !    %if mac(pos) = nl %then break %else %start 
 2568   !      byteinteger(cur_lim1) = mac(pos)
 2569   !      cur_lim1 = cur_lim1+1;  cur_lbeg = cur_lbeg-1
 2570   !    %finish
 2571   !    pos = pos+1
 2572   !  %repeat %until pos = lim
 2573     amount = lim-pos
 2574     make room(amount) %if oldstart2-gdiff-cur_lim1 < amount
 2575     move(amount,addr(mac(pos)),cur_lim1)
 2576     lines = count(cur_lim1,cur_lim1+amount-1,nl)
 2577     markline = markline + lines %if markline > cur_line
 2578     cur_line = cur_line+lines; gapline = gapline + lines
 2579     joins = joins - lines
 2580     cur_lim1 = cur_lim1+amount
 2581     set lbeg(cur_lbeg,fp)
 2582     cur_change = altmin %if altmin < cur_change
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2361     %cycle
 2362       %if mac(pos) = nl %then break %else %start 
 2363         byteinteger(cur_lim1) = mac(pos)
 2364         cur_lim1 = cur_lim1+1;  cur_lbeg = cur_lbeg-1
 2365       %finish
 2366       pos = pos+1
 2367     %repeat %until pos = lim
 2368     cur_change = altmin %if altmin < cur_change
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2602   !      fp = fp + 1 %while fp < lend;        ;  ! Correction KR Apr 87
 2603         fp = lend %if fp < lend;                 ! Better correction Jan 88
 2604         %if fp # cur_lim2 %start
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2388         fp = fp + 1 %while fp < lend;        ;  ! Correction KR Apr 87
 2389         %if fp # cur_lim2 %start
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2792     -> no %if line after = 0
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2577   s('M'):                                 !Move
 2578     -> no %if line after = 0
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2795   s('M'):                                 !Move
 2796     -> no %if line after = 0
 2797     %if num = 0 %start
 2798       fp = lend %if fp > lend
 2799       %if cur_start1 <= fp < cur_lim1 %start
 2800         cur_line = cur_line + count(fp,cur_lim1-1,nl)
 2801         fp = cur_start2
 2802       %finish
 2803       cur_line = cur_line + count(fp,cur_lim2-1,nl)
 2804       jump to(cur_lim2)
 2805       -> no
 2806     %finish
 2807     fp = fp+o_margin %if lend # cur_lim2
 2808     -> ok
 2809   !
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2581   !
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2817     hold = tabcol(fp,cur_lbeg,0)
 2818     hold1 = line before
 2819     hold = coltab(hold,cur_lbeg) + cur_lbeg
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2589     fp1 = fp
 2590     hold = tabcol(fp,cur_lbeg,0)
 2591     fp = fp1 %and -> no %if line before = 0
 2592     hold = coltab(hold,cur_lbeg) + cur_lbeg
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2822     -> no %if hold1 = 0
 2823     -> oklast
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2595     -> oklast
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2828     %if fp = cur_start2 %then consolidate(1,sin) %else fp = fp-1
 2829     -> ok
 2830   
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2600     -> left
 2601   
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2848     %if num = 0 %start;                   !M-*
 2849       %if cur_start1 # cur_lim1 %then jump to(cur_start1) %c
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2619     %if num = 0 %start;  !M-*
 2620       %if cur_start1 # cur_lim1 %then jump to(cur_start1) %c
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2869   s('R'): s('l'):                         !Right-shift 
 2870     -> no %if fp >= lend
 2871     %if num <= 0 %or num > lend-fp %then hold = lend-fp %else hold = num
 2872     fp = fp+hold
 2873     num = num-hold+1
 2874     -> ok %if num > 0
 2875     -> no
 2876   !
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2640   s('R'): s('l'):                         !Right-shift
 2641     -> no %if fp >= lend
 2642     fp = fp+1
 2643     -> ok
 2644   !
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2882     %if cur_start2 = cur_lim2 %and byteinteger(cur_lim1-1) # nl %start
 2883       consolidate(0,0)
 2884       -> no
 2885     %finish
 2886     copy across %if gdiff # 0
 2887     markpos = 0 %if cur_lim1-1 = markpos;       ! Erased over marker
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2650   !$IF AMDAHL
 2651   {  copy across %if gdiff # 0
 2652   !$FINISH
 2653     markpos = 0 %if cur_lim1-1 = markpos;       ! Erased over marker
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2900     %if num <= 0 %or num > fp-cur_lbeg %then hold = fp-cur_lbeg %else hold = num
 2901     %if fp-hold < cur_start2 <= fp %then consolidate(hold,sin) %else fp = fp-hold
 2902     num = num-hold+1
 2903     -> ok %if num > 0
 2904     -> no
 2905   !
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2666   left:
 2667     %if fp = cur_start2 %then consolidate(1,sin) %else fp = fp-1
 2668     -> ok
 2669   !
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2937     %if num <= 0 %or num > lend-fp %then amount = lend-fp %else amount = num
 2938     cur_lbeg = cur_lbeg+amount
 2939     markpos = 0 %if fp <= markpos < fp+amount;         ! Destroyed marker
 2940     fp = fp+amount;  cur_start2 = fp
 2941     altlim = cur_start2 %if altlim < cur_start2
 2942     num = num - amount + 1
 2943     -> ok %if num > 0
 2944     -> no
 2945   !
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2701     cur_lbeg = cur_lbeg+1
 2702     markpos = 0 %if fp = markpos;         ! Destroyed marker
 2703     fp = fp+1;  cur_start2 = fp
 2704     altlim = cur_start2 %if altlim < cur_start2
 2705     -> ok
 2706   !
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 2950     %if num <= 0 %or num > fp-cur_lbeg %then amount = fp-cur_lbeg %else amount = num
 2951     consolidate(amount,-1)
 2952     num = num - amount + 1
 2953     -> ok %if num > 0
 2954     -> no
 2955   !
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 2711     consolidate(1,-1)
 2712     -> ok
 2713   !
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3266         %if video # 0 %start
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3024   !    split(mingap)
 3025   !!$IF VAX OR AMDAHL
 3026   !   %if o_dmode = replacing %start;            ! No insert mode, make gap
 3027   !     vgap = o_wcols - (lend-cur_lbeg+o_mark)
 3028   !     vgap = 10 %if vgap < 10
 3029   !     display(0)
 3030   !     read text(inserting)
 3031   !     idef = newdef
 3032   !     %if idef >= macro %start
 3033   !       insert(idef)
 3034   !       altlim = lend+1;  altlimlbeg = altlim;  !to remove spaces
 3035   !     %finish %else repair line;  !to remove spaces
 3036   !   %else;                        ! Full INSERT mode is now default
 3037         %if video # 0 %start
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3280       ->controlterm %if term # ret
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3051   !   %finish
 3052   !!$IF APM
 3053   !{    display(0)
 3054   !{    read text(inserting)
 3055   !{    idef = newdef
 3056   !{    %if idef >= macro %start
 3057   !{      insert(idef)
 3058   !{      altlim = floor;  altmin = ceiling; !up-to-date
 3059   !{    %finish
 3060   !!$FINISH
 3061       ->controlterm %if term # ret
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3319       copy across %if gdiff # 0
 3320     fp = fp-1
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3100   !$IF AMDAHL
 3101   {    copy across %if gdiff # 0
 3102   !$FINISH
 3103     fp = fp-1
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3334   !  delmax = delmax-1 %while byteinteger(delmax) # nl
 3335     delmax = search back(0,delmax,nl)
 3336     -> no %if delmax = newlim
 3337     copy across %if gdiff # 0
 3338     lend = fp-1
 3339   !  %cycle
 3340   !    fp = fp-1;  byteinteger(fp) = byteinteger(delmax)
 3341   !    delmax = delmax-1
 3342   !  %repeat %until byteinteger(delmax) = nl
 3343     amount = delmax-search back(0,delmax-1,nl)
 3344     delmax = delmax - amount; fp = fp - amount
 3345     move(amount,delmax+1,fp)
 3346     cur_start2 = fp;  oldstart2 = cur_start2
 3347     joins = joins-1;  cur_lbeg = fp
 3348     -> ok
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3117     delmax = delmax-1 %while byteinteger(delmax) # nl
 3118     -> no %if delmax = newlim
 3119   !$IF AMDAHL
 3120   {    copy across %if gdiff # 0
 3121   !$FINISH
 3122     lend = fp-1
 3123     %cycle
 3124       fp = fp-1;  byteinteger(fp) = byteinteger(delmax)
 3125       delmax = delmax-1
 3126     %repeat %until byteinteger(delmax) = nl
 3127     cur_start2 = fp;  oldstart2 = cur_start2
 3128     joins = joins-1;  set lbeg(cur_lbeg,fp)
 3129     -> ok
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3386           repair line  
 3387           -> again
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3167            repair line    ;!?????GRule Has this deletion been check on APMs?
 3168           -> again
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3424           display(o_early)
 3425           cur_row = cur_line-cur_diff
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3205           display(0)
 3206           cur_row = cur_line-cur_diff
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3488     %if cur_lbeg < cur_start2 <= fp %c
 3489       %then fp = cur_lbeg - (cur_start2-cur_lim1) %and cur_lbeg = fp %c
 3490       %else fp = cur_lbeg
 3491     split(0)
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3269     update %if altlim # floor
 3270     %if cur_lbeg < cur_start2 <= fp %start
 3271       fp = lend %if fp > lend;  consolidate(fp-cur_lbeg,0)
 3272     %finish %else fp = cur_lbeg
 3273     split(0)
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3499     %if cur_lbeg < cur_start2 <= fp %c
 3500       %then fp = cur_lbeg - (cur_start2-cur_lim1) %and cur_lbeg = fp %c
 3501       %else fp = cur_lbeg
 3502     split(0)
 3503     join
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3281     fp = lend %if fp > lend
 3282     split(0)
 3283     consolidate(fp-cur_lbeg,-1) %and cur_lbeg = fp %if fp # cur_lbeg
 3284     join
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3520     fp = lend %if fp > lend
 3521     %result = false %if fp=cur_lim2
 3522     %cycle
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3301     %cycle
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3640     -> disallowed %if sin > 1
 3641     %if sin&(\1) = 0 %start
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3419     -> disallowed %if sin > 0
 3420     %if sin&(\1) = 0 %start
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3682   !      %while hold > 0 %cycle
 3683   !        mac(mpos) = byteinteger(fp1)
 3684   !        mpos = mpos+1;  fp1 = fp1+1
 3685   !        fp1 = cur_start2 %if fp1 = cur_lim1
 3686   !        hold = hold-1
 3687   !      %repeat
 3688         ! More efficient macro definition using MOVE
 3689         %if cur_start1 <= fp1 < cur_lim1 %and %c
 3690                      cur_lim1 < fp1+hold %start; ! Macro text split over gap.
 3691           hold1 = cur_lim1 - fp1;                ! Size of part in first half
 3692           move(hold1,fp1,addr(mac(mpos)));       ! Move it to macro area
 3693           hold = hold - hold1;                   ! Calculate remaining length
 3694           fp1 = cur_start2
 3695         %finishelse hold1 = 0
 3696         move(hold,fp1,hold1+addr(mac(mpos)))  %if hold > 0;  ! Move the rest
 3697       %finish
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3461         %while hold > 0 %cycle
 3462           mac(mpos) = byteinteger(fp1)
 3463           mpos = mpos+1;  fp1 = fp1+1
 3464           fp1 = cur_start2 %if fp1 = cur_lim1
 3465           hold = hold-1
 3466         %repeat
 3467       %finish
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3723       make room(hold-fp1) %if oldstart2+gdiff-cur_lim1 < hold-fp1;  ! make sure gap is big enough
 3724   !    %cycle
 3725   !      %if byteinteger(fp1) = nl %then break %else %start
 3726   !        byteinteger(cur_lim1) = byteinteger(fp1)
 3727   !        cur_lim1 = cur_lim1+1;  cur_lbeg = cur_lbeg-1
 3728   !      %finish
 3729   !      fp1 = fp1+1
 3730   !    %repeat %until fp1 = hold
 3731       move(hold-fp1,fp1,cur_lim1);       ! Move text to primary buffer
 3732       cur_lim1 = cur_lim1+hold-fp1;      ! Update text pointer
 3733       hold1 = markline-sec_line;         ! Number of newlines in moved text
 3734       hold1 = -hold1 %if hold1 < 0
 3735       joins = joins-hold1;               ! Use for display in UPDATE
 3736       cur_line = cur_line+hold1;         ! Add to current line number.
 3737       gapline = cur_line
 3738       set lbeg(cur_lbeg,fp)
 3739     %finish
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3493       %cycle
 3494         %if byteinteger(fp1) = nl %then break %else %start
 3495           byteinteger(cur_lim1) = byteinteger(fp1)
 3496           cur_lim1 = cur_lim1+1;  cur_lbeg = cur_lbeg-1
 3497         %finish
 3498         fp1 = fp1+1
 3499       %repeat %until fp1 = hold
 3500     %finish
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 3972   !  inpos = inpos+1 %while inpos < inlim %and mac(inpos) # nl
 3973     inpos = search(addr(mac(inpos)),addr(mac(inlim)),nl)
 3974     inpos = inlim %if inpos = 0
 3975     m = inpos-pos
 3976     macpos = macspace(n+m)
 3977     move(n,mac0+cdef&posmask,mac0+macpos) %if n > 0;  macpos = macpos+n
 3978     move(m,mac0+pos,mac0+macpos) %if m > 0;  macpos = macpos+m
 3979     def(k) = macpos<<limshift+(macpos-n-m)
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3733     inpos = inpos+1 %while inpos < inlim %and mac(inpos) # nl
 3734     m = inpos-pos
 3735     macpos = macspace(n+m)
 3736     move(n,mac0+cdef&posmask,mac0+macpos);  macpos = macpos+n
 3737     move(m,mac0+pos,mac0+macpos);  macpos = macpos+m
 3738     def(k) = macpos<<limshift+(macpos-n-m)
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4164       length(curprom) = 2 %if length(curprom) > 2
 4165       printstring(curprom)
 4166       pos = cdef&posmask
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3923       printsymbol(charno(curprom,1));  printsymbol(charno(curprom,2))
 3924       pos = cdef&posmask
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4208     FOUNDPOS = 0; FOUNDSIZE = 0; MARKPOS = 0
 4209     CMAX1 = 0;  CONSOLIDATED = 0
 4210     ERROR = 0;  COMMANDSTREAM = 0;  PEND = 0
 4211     VGAP = 0;  JOINS = 0; LEND = 0
 4212   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3966   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4234   !File pointers
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 3988   !$IF AMDAHL
 3989   {  !  Check for newlines missing
 3990   {  %if main_start2 # main_lim2 %and byteinteger(main_lim2-1) # nl %start
 3991   {  ! no newline at end of file
 3992   {    message = "No Newline!!!"
 3993   {    %if main_lim2 < main_lim %start
 3994   {      ! there is room to add the newline 
 3995   {      byteinteger(main_lim2) = nl
 3996   {      main_lim2 = main_lim2+1
 3997   {    %finishelsestart
 3998   {      ! Cant add it so we just ignore the last line
 3999   {      main_lim2 = main_lim2-1 %while main_lim2 > main_start2 %and %c
 4000   {        byteinteger(main_lim2-1) # nl
 4001   {    %finish
 4002   {  %finish
 4003   {  %if sec_start2 # sec_lim2 %and byteinteger(sec_lim2-1) # nl %start
 4004   {    ! no newline at end of file
 4005   {    ! Cant add it so we just ignore the last line
 4006   {    sec_lim2 = sec_lim2-1 %while sec_lim2 > sec_start2 %and %c
 4007   {      byteinteger(sec_lim2-1) # nl
 4008   {  %finish
 4009   !$FINISH
 4010   !File pointers
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4238   !Set line number into CUR_LINE
 4239     %if cur_line = 0 %start
 4240       %if cur_start2 <= fp <= cur_lim2 %start
 4241         cur_line = cur_line + count(cur_start1,cur_lim1-1,nl)
 4242         fp1 = cur_start2
 4243       %finish %else fp1 = cur_start1
 4244       cur_line = cur_line + 1 + count(fp1,fp-1,nl)
 4245     %finish
 4246     newlim = cur_lim2
 4247     gdiff = 0
 4248     %unless cur_lim1 <= cur_lim2 <= cur_lim %start
 4249       newlim = cur_lim-1024
 4250       gdiff = newlim-cur_lim2
 4251     %finish
 4252     !  Check for newlines missing
 4253     %if cur_start2 # cur_lim2 %and byteinteger(cur_lim2-1) # nl %start
 4254       ! no newline at end of file
 4255       copy across %if gdiff # 0
 4256       message = "No Newline!!!"
 4257       %if cur_lim2 < cur_lim %start
 4258         ! there is room to add the newline 
 4259         byteinteger(cur_lim2) = nl
 4260         cur_lim2 = cur_lim2+1
 4261       %finishelsestart
 4262         ! Cant add it so we just ignore the last line
 4263   !      cur_lim2 = cur_lim2-1 %while cur_lim2 > cur_start2 %and %c
 4264   !        byteinteger(cur_lim2-1) # nl
 4265         cur_lim2 = 1 + search back(cur_start2,cur_lim2-1,nl)
 4266         cur_lim2 = cur_start2 %if cur_lim2 = 1
 4267       %finish
 4268     %finish
 4269     %if sec_start2 # sec_lim2 %and byteinteger(sec_lim2-1) # nl %start
 4270       ! no newline at end of file
 4271       ! Cant add it so we just ignore the last line
 4272   !    sec_lim2 = sec_lim2-1 %while sec_lim2 > sec_start2 %and %c
 4273   !      byteinteger(sec_lim2-1) # nl
 4274         sec_lim2 = 1 + search back(sec_start2,sec_lim2-1,nl)
 4275         sec_lim2 = sec_start2 %if sec_lim2 = 1
 4276     %finish
 4277     delmax = newlim;  byteinteger(delmax) = nl %if delmax > 0
 4278     lastdelmax = delmax
 4279     sin = 0
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 4014     %if cur_line = 0 %start
 4015       fp = cur_start1
 4016       cur_line = 1
 4017       %cycle
 4018         fp = cur_start2 %if fp = cur_lim1
 4019         %exit %if fp = cur_fp
 4020         %return %if fp = cur_lim2
 4021         cur_line = cur_line+1 %if byteinteger(fp) = nl
 4022         fp = fp+1
 4023       %repeat
 4024     %finish
 4025     newlim = cur_lim2
 4026   !$IF AMDAHL
 4027   {  gdiff = 0
 4028   {  %unless cur_lim1 <= cur_lim2 <= cur_lim %start
 4029   {    newlim = cur_lim-1024
 4030   {    gdiff = newlim-cur_lim2
 4031   {  %finish
 4032   !$IF APM
 4033   {  newlim = cur_lim-1024
 4034   !$FINISH
 4035     delmax = newlim;  byteinteger(delmax) = nl %if delmax > 0
 4036     lastdelmax = delmax
 4037     foundpos = 0;  foundsize = 0;  markpos = 0
 4038     cmax1 = 0;  consolidated = 0
 4039     error = 0;  commandstream = 0;  pend = 0
 4040     vgap = 0;  joins = 0
 4041     sin = 0
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4333   {!  i = set trap(trapno, 65, 'Q')   ; !  %monitor
 4334   {  i = set trap(trapno, 65, 'V')   ; !  Terminal Booking
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 4095   {  i = set trap(trapno, 65, 'Q')   ; !  %monitor
 4096   {  i = set trap(trapno, 65, 'V')   ; !  Terminal Booking
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4451     %if code = '_' %start
 4452       cat(1,0)
 4453       vt prompt(" Do you want a diagnostic dump? (y/n) "); clear line
 4454       read command line
 4455       vt prompt("")
 4456       get sym;  -> ignore %if sym!casebit # 'y'
 4457       panic
 4458     %finish
 4459   !$IF VAX OR AMDAHL
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 4213   !$IF VAX OR AMDAHL
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4606       echo command %if cscroll = 0 %and video # 0
 4607     %finish %else cat(1,0)
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 4360       echo command %if cscroll = 0
 4361     %finish %else cat(1,0)
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4661   {!      sec_lim2 = sec_lim2-1 %while sec_lim2 > sec_start2 %and %c
 4662   {!        byteinteger(sec_lim2-1) # nl
 4663   {      sec_lim2 = 1 + search back(sec_start2,sec_lim2-1,nl)
 4664   {      sec_lim2 = sec_start2 %if sec_lim2 = 1
 4665   {    %finish
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 4415   {      sec_lim2 = sec_lim2-1 %while sec_lim2 > sec_start2 %and %c
 4416   {        byteinteger(sec_lim2-1) # nl
 4417   {    %finish
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4867     copy across %if gdiff # 0
 4868     remove pointer
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 4619   !$IF AMDAHL
 4620   {  copy across %if gdiff # 0
 4621   !$FINISH
 4622     remove pointer
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4876     fp = lend %if fp > lend
 4877     cur_fp = fp
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 4630     cur_fp = fp
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4882   !$IF VAX
 4883     %return
 4884   !$IF AMDAHL
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 4635   !$IF AMDAHL
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4887   !$FINISH
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 4638   !$IF VAX
 4639     %return
 4640   !$FINISH
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4975         new line
 4976         vt prompt(" Please supply alternative file-name: ")
 4977         select input(0)
 4978         out_name = ""
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 4728         print string(" Please supply alternative file-name: ")
 4729         select input(0);  prompt("")
 4730         out_name = ""
************
************
File FS27:[REFSON.VECCE.S]XECCE.IMP;5
 4982         %repeat %until k < ' ' %or k >= 127
 4983         newline
******
File FS27:[REFSON.VECCE.S]XECCE.OLD;1
 4734         %repeat %until k < ' '
 4735         newline
************

Number of difference sections found: 86
Number of difference records found: 678

DIFFERENCES /IGNORE=()/MERGED=1/OUTPUT=FS27:[REFSON.VECCE.S]XECCE.DIFF;2-
    FS27:[REFSON.VECCE.S]XECCE.IMP;5-
    FS27:[REFSON.VECCE.S]XECCE.OLD;1
