Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 1 PROGRAM ED; {Video text editor} 2 3 4 { Revision History 5 6 1. 6/14/77 First usable version 7 8 2. 6/18/77 Variable length list nodes and checking for dynamic memory 9 overflow supported using extended version of NEW procedure. 10 11 3. 6/20/77 EMPTYTTYINBUF routine added to prevent buffer overflow 12 problems when scrooling using repeat key. 13 14 4. 6/23/77 SEARCH and TOP commands added. 15 16 5. 6/29/77 TAB support added. 17 18 6. 7/7/77 TAG, SAVE and UNSAVE commands added. 19 20 7. 7/26/77 Input file now renamed with a .BAK extension. 21 } 22 23 CONST 24 id='ED Version 7.10'; 25 maxline=80; {Maximum number of characters per line} 26 screensize=24; {Maximum number of lines displayable} 27 hdrlength=8; 28 lf=12B; 29 cr=15B; 30 del=177B; 31 esc=33B; 32 home=110B; 33 erasetoeos=112B; 34 erasetoeol=113B; 35 direct=131B; 36 cursorright=103B; 37 cursorleft=104B; 38 reverse=111B; 39 keypadmode=75B; 40 exitkeypadmode=76B; 41 tab=11B; 42 defaultext='PAS'; 43 defaultname='DK:TEMP.DAT '; 44 45 46 TYPE 47 link=^line; 48 line=record 49 next:link; 50 last:link; 51 maxlength:1..maxline; 52 length:1..maxline; 53 data:array[1..maxline] of char; 54 end; 55 56 cptr=1..maxline; 57 str14=array[1..14] of char; Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 58 59 60 VAR 61 cline:link; {Pointer to current line} 62 listhead:link; {Pointer to dummy line at beginning of linked list} 63 lastline:link; {Pointer to lastline in buffer} 64 lastdeleted:link; 65 tagline:link; 66 c:char; 67 cur:1..maxline; {Current cursor position} 68 toggle:(repl,ins); {Character replace/insert flag} 69 jsw origin 44B: integer; 70 linecount:integer; 71 ans:array[1..3] of char; 72 filename:str14; 73 finished:boolean; 74 memoryleft:integer; 75 maxnodelength:integer; 76 inputfile:text; 77 filesize:integer; 78 savepattern:str14; 79 savesslength:integer; 80 81 82 83 84 PROCEDURE POS(lineptr:link; charptr:cptr; var xloc:cptr); 85 {Returns the X screen position of the specified internal chracter} 86 87 var 88 i:cptr; 89 size:1..8; 90 91 B POS begin 92 2 xloc:=1; size:=0; 93 3 for i:=1 to charptr do 94 4 B2 begin 95 5 xloc:=xloc+size; 96 6 I3 if lineptr^.data[i]=chr(tab) 97 7 T3 then size:=8-(xloc-1) mod 8 98 8 S3 else size:=1 99 8 E2 end 100 8 E POS end; 101 102 103 104 105 PROCEDURE DEBUG; 106 107 var 108 xloc:cptr; 109 110 B DEBUG begin 111 1 writeln('cur=',cur); 112 2 writeln('linecount=',linecount); 113 3 writeln('cline=',cline^.data[1]); 114 4 writeln('listhead=',listhead^.data[1]); Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 115 5 writeln('lastline=',lastline^.data[1]); 116 6 writeln('last=',cline^.last^.data[1]); 117 7 writeln('next=',cline^.next^.data[1]); 118 8 writeln('length=',cline^.length); 119 9 writeln('maxlength=',cline^.maxlength); 120 10 writeln('memoryleft=',memoryleft); 121 11 writeln('filesize=',filesize); 122 12 pos(cline,cur,xloc); 123 13 write('xloc=',xloc); 124 13 E DEBUG end; 125 126 127 128 129 PROCEDURE NEWV(var ptr:link; size:integer; var memoryleft:integer); 130 131 {Extends NEW procedure to support allocation of variable 132 length lines and to provide(as an unsigned integer) the number 133 of bytes remaining in dynamic storage.} 134 135 var 136 kore,sp:integer; 137 138 B NEWV begin 139 1 I2 if odd(size) 140 2 T2 then size:=size+1; 141 2 {$C mov size(%6),.+8 } 142 3 new(ptr); 143 3 {$C .globle $kore 144 3 mov $kore,kore(%6) 145 3 mov %6,sp(%6) 146 3 } 147 4 memoryleft:=sp-kore; 148 4 E NEWV end; 149 150 151 152 153 PROCEDURE ESCAPE(code:integer); 154 {Outputs specified escape sequence} 155 156 B ESCAPE begin 157 2 write(chr(esc)); write(chr(code)) 158 2 E ESCAPE end; 159 160 161 162 163 PROCEDURE MOVCUR(line,column:integer); 164 {Moves cursor to specified line and column} 165 166 B MOVCUR begin 167 1 escape(direct); 168 2 write(chr(37B+line)); 169 3 write(chr(37B+column)) 170 3 E MOVCUR end; 171 Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 172 173 174 PROCEDURE WRITET(l:link; startloc,endloc:cptr; line:integer); 175 {Writes the specified segment of the line pointed to by 'l' on 176 the CRT line specified by 'line'} 177 178 var 179 i,j,xloc:cptr; 180 size:1..8; 181 182 B WRITET begin 183 1 pos(l,startloc,xloc); 184 2 movcur(line,xloc); 185 3 with l^ do 186 4 B2 begin 187 5 for i:=startloc to endloc do 188 6 I3 if data[i]=chr(tab) 189 7 T3 then 190 7 B4 begin 191 8 size:=8-(xloc-1) mod 8; 192 9 for j:=1 to size do 193 10 write(' '); 194 11 xloc:=xloc+size 195 11 E4 end 196 12 S3 else 197 12 B5 begin 198 14 write(data[i]); xloc:=xloc+1 199 14 E5 end 200 14 E2 end 201 14 E WRITET end; 202 203 204 205 PROCEDURE POSITIONCURSOR; 206 {Positions cursor after scrooling up or down} 207 208 var 209 c,xloc:cptr; 210 211 B POSITIONCU begin 212 1 I2 if cur<=cline^.length 213 2 T2 then 214 2 B3 begin 215 4 pos(cline,cur,xloc); c:=cur 216 4 E3 end 217 5 S2 else 218 5 B4 begin 219 7 xloc:=1; c:=1 220 7 E4 end; 221 9 movcur(screensize,xloc); cur:=c; 222 9 E POSITIONCU end; 223 224 225 226 227 PROCEDURE DISPLAYTOP(l:link); 228 {Displays line pointed to by l at top of screen} Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 229 230 B DISPLAYTOP begin 231 1 movcur(1,1); 232 2 escape(reverse); 233 3 writet(l,1,l^.length,1); 234 4 positioncursor; 235 4 E DISPLAYTOP end; 236 237 238 239 240 PROCEDURE DISPLAYBOTTOM(l:link); 241 {Display line pointed to by l at bottom of screen} 242 243 B DISPLAYBOT begin 244 1 movcur(screensize,1); 245 2 writeln; 246 3 writet(l,1,l^.length,screensize); 247 4 positioncursor; 248 4 E DISPLAYBOT end; 249 250 251 252 253 PROCEDURE INSERTNODE(l:link); 254 {Inserts line pointed to by l into linked list following current line} 255 256 B INSERTNODE begin 257 1 l^.last:=cline; 258 2 l^.next:=cline^.next; 259 3 cline^.next^.last:=l; 260 4 cline^.next:=l; 261 5 linecount:=linecount+1; 262 6 I2 if cline=lastline 263 7 T2 then lastline:=l; 264 7 E INSERTNODE end; 265 266 267 268 269 PROCEDURE DELETENODE; 270 {Deletes current line from linked list} 271 272 B DELETENODE begin 273 1 I2 if cline#listhead 274 1 T2 then 275 2 B3 begin 276 3 I4 if cline=lastline 277 4 T4 then lastline:=cline^.last; 278 5 cline^.last^.next:=cline^.next; 279 6 cline^.next^.last:=cline^.last; 280 7 linecount:=linecount-1; 281 8 lastdeleted:=cline; 282 8 E3 end; 283 8 E DELETENODE end; 284 285 Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 286 287 288 PROCEDURE SQUEEZE; 289 {Reduces length of current node if it is at the maximum} 290 291 var 292 l:link; 293 i:cptr; 294 295 B SQUEEZE begin 296 1 with cline^ do 297 2 B2 begin 298 3 I3 if (maxlength=maxline) and (length=maxlength 464 6 T5 then 465 6 B6 begin 466 6 {Expand node to make room} 467 7 newv(l,maxnodelength,memoryleft); 468 8 l^.length:=length; 469 9 l^.maxlength:=maxline; 470 10 for i:= 1 to length do 471 11 l^.data[i]:=data[i]; 472 12 insertnode(l); 473 13 deletenode; 474 14 cline:=l; 475 14 E6 end; 476 14 E4 end; 477 15 with cline^ do 478 16 B7 begin 479 17 for i:=length downto cur do 480 18 data[i+1]:=data[i]; 481 19 length:=length+1; 482 20 replacechar(c); 483 21 writet(cline,cur,length,screensize); 484 22 pos(cline,cur,xloc); 485 23 movcur(screensize,xloc) 486 23 E7 end; 487 23 E3 end 488 23 E INSERTCHAR end; 489 490 491 492 493 PROCEDURE WINDOW; 494 {Displays full screen of lines, ending at line pointed to by cline} 495 496 var 497 i:integer; 498 l:link; 499 500 B WINDOW begin 501 2 escape(home); escape(erasetoeos); 502 3 i:=1; 503 4 l:=cline; 504 5 while (i<=screensize) and (cline#listhead) do 505 6 B2 begin 506 8 i:=i+1; cline:=cline^.last 507 8 E2 end; 508 9 while cline#l do 509 10 scrollup; 510 10 E WINDOW end; 511 512 513 Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 514 515 PROCEDURE MOVERIGHT; 516 {Moves cursor right one position} 517 518 var 519 xloc:cptr; 520 521 B MOVERIGHT begin 522 1 I2 if (cur<=cline^.length) and (cur1 546 1 T2 then 547 2 B3 begin 548 3 cur:=cur-1; 549 4 I4 if cline^.data[cur]=chr(tab) 550 5 T4 then 551 5 B5 begin 552 6 pos(cline,cur,xloc); 553 7 movcur(screensize,xloc) 554 7 E5 end 555 8 S4 else escape(cursorleft) 556 8 E3 end 557 8 E MOVELEFT end; 558 559 560 561 562 PROCEDURE DELETECHAR; 563 {Deletes character at current cursor position} 564 565 var 566 i:integer; 567 xloc:cptr; 568 569 B DELETECHAR begin 570 1 with cline^ do Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 571 2 B2 begin 572 3 I3 if length#0 573 3 T3 then 574 4 B4 begin 575 5 I5 if cur>length 576 6 T5 then 577 6 B6 begin 578 7 cur:=length; 579 8 pos(cline,cur,xloc); 580 9 movcur(screensize,xloc) 581 9 E6 end; 582 10 for i:=cur to length-1 do 583 11 data[i]:=data[i+1]; 584 12 length:=length-1; 585 13 writet(cline,cur,length,screensize); 586 14 escape(erasetoeol); 587 15 pos(cline,cur,xloc); 588 16 movcur(screensize,xloc) 589 16 E4 end 590 16 E2 end 591 16 E DELETECHAR end; 592 593 594 595 596 PROCEDURE INSERTLINE; 597 {Inserts null line into linked list following current line 598 scrolls up by one line} 599 600 var 601 p:link; 602 603 B INSERTLINE begin 604 1 newv(p,maxnodelength,memoryleft); 605 2 p^.maxlength:=maxline; 606 3 p^.length:=0; 607 4 insertnode(p); 608 5 scrollup 609 5 E INSERTLINE end; 610 611 612 613 614 PROCEDURE DELETELINE; 615 {Deletes current line from linked list and scrolls down by one line} 616 617 B DELETELINE begin 618 1 deletenode; 619 2 scrolldown; 620 3 I2 if linecount=0 621 4 T2 then insertline; 622 4 E DELETELINE end; 623 624 625 626 627 PROCEDURE INITBUFFER; Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 628 {initializes doubly linked list used to represent text} 629 630 B INITBUFFER begin 631 1 new(listhead); 632 2 with listhead^ do 633 3 B2 begin 634 4 next:=listhead; 635 5 last:=listhead; 636 6 maxlength:=maxline; 637 7 length:=0; 638 8 data[1]:='H'; 639 8 E2 end; 640 9 cline:=listhead; 641 10 lastline:=listhead; 642 11 linecount:=0; 643 12 insertline; 644 12 E INITBUFFER end; 645 646 647 648 649 PROCEDURE FILEINPUT; 650 {Inputs file into linked list} 651 652 var 653 l:link; 654 i:1..screensize; 655 656 B FILEINPUT begin 657 1 cline:=listhead; 658 2 while not eof(inputfile) do 659 3 B2 begin 660 4 new(l); 661 5 insertnode(l); 662 6 cline:=cline^.next; 663 7 with l^ do 664 8 B3 begin 665 9 maxlength:=maxline; 666 10 length:=0; 667 11 while not eoln(inputfile) do 668 12 B4 begin 669 13 I5 if lengthscreensize 802 24 T9 then 803 24 B10 begin 804 26 cline:=l; window 805 26 E10 end 806 26 S9 else 807 27 while cline#l do 808 28 scrollup; 809 29 pos(cline,firstpos,xloc); 810 30 movcur(screensize,xloc); 811 31 cur:=firstpos; 812 31 E8 end; 813 32 savepattern:=pattern; 814 33 savesslength:=sslength; 815 33 E SEARCH end; 816 817 818 819 820 821 822 PROCEDURE EXITPGM; 823 {Writes out updated file and terminates program} 824 825 var 826 outputfile:text; 827 size:integer; 828 829 procedure bak(var n:str14); 830 {Renames specified file with a .BAK extension} 831 const 832 blank=' '; 833 type 834 str3=array[1..3] of char; 835 rad50filename=record 836 dev,nam1,nam2,ext:integer 837 end; 838 var 839 old,new:rad50filename; 840 t,t2:str3; 841 i,filenamestart:1..14; 842 j:1..6; 843 844 procedure rename(var old:rad50filename); 845 {Provides a linkage to .RENAME monitor request} 846 type 847 dblk=^rad50filename; 848 var 849 usrloadadrs origin 46B:integer; 850 area:record 851 chan:char; 852 functioncode:char; 853 d:dblk 854 end; 855 B RENAME begin Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 856 {rename} 857 1 area.chan:=chr(14); 858 2 area.functioncode:=chr(4); 859 3 area.d:=@old; 860 4 usrloadadrs:=1000B; {Don't let USR overlay arg list and/or stack} 861 4 {$C mov %6,%0 862 4 add #area,%0 863 4 emt ^o375} 864 5 usrloadadrs:=0; 865 5 E RENAME end; 866 867 function rad50(var s:str3):integer; 868 {Converts a 3 character string to RAD50} 869 var 870 c:array[1..3] of integer; 871 i:1..3; 872 t:integer; 873 B RAD50 begin 874 {rad50} 875 1 for i:=1 to 3 do 876 2 I2 if(s[i]>='A')&(s[i]<='Z') 877 3 T2 then c[i]:=ord(s[i])-100B 878 4 S2 else 879 4 I3 if(s[i]>='0')&(s[i]<='9') 880 5 T3 then c[i]:=ord(s[i])-22B 881 6 S3 else 882 6 I4 if s[i]='$' 883 7 T4 then c[i]:=33B 884 8 S4 else c[i]:=0; 885 9 t:=((c[1]*40)+c[2])*20; 886 10 rad50:=t+t+c[3]; 887 10 E RAD50 end; 888 889 B BAK begin 890 {bak} 891 {Convert file name to upper case} 892 1 for i:=1 to 14 do 893 2 I2 if (n[i]>='a')&(n[i]<='z') 894 3 T2 then n[i]:=chr(ord(n[i])-40B); 895 896 3 {Find extension and convert to RAD50} 897 4 i:=0; 898 5 R3 repeat 899 6 i:=i+1 900 6 U3 until (n[i]='.')!(i=14); 901 7 t:=blank; 902 8 I4 if n[i]='.' 903 9 T4 then 904 9 B5 begin 905 11 i:=i+1; j:=1; 906 12 while (n[i]#' ')&(j<=3) do 907 13 B6 begin 908 14 t[j]:=n[i]; 909 16 i:=i+1; j:=j+1; 910 16 E6 end; 911 16 E5 end 912 17 S4 else t:=defaultext; Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 913 18 I7 if t#'BAK' 914 18 T7 then {Don't do anything if extension already .BAK} 915 19 B8 begin 916 20 old.ext:=rad50(t); 917 918 20 {Find device and convert to RAD50} 919 21 filenamestart:=1; 920 22 i:=0; 921 23 R9 repeat 922 24 i:=i+1 923 24 U9 until (n[i]=':')!(i=4)!(n[i]=' '); 924 25 t:=blank; 925 26 I10 if n[i]=':' 926 27 T10 then 927 27 B11 begin 928 28 filenamestart:=i+1; 929 30 i:=1; j:=1; 930 31 while (n[i]#':')&(j<=3) do 931 32 B12 begin 932 33 t[j]:=n[i]; 933 35 i:=i+1; j:=j+1; 934 35 E12 end; 935 35 E11 end 936 36 S10 else t:='DK '; 937 37 old.dev:=rad50(t); 938 939 37 {Find file name and convert} 940 39 i:=filenamestart; j:=1; 941 41 t:=blank; t2:=blank; 942 42 while (n[i]#' ')&(n[i]#'.')&(j<=6) do 943 43 B13 begin 944 44 I14 if j<=3 945 45 T14 then t[j]:=n[i] 946 46 S14 else t2[j-3]:=n[i]; 947 48 i:=i+1; j:=j+1; 948 48 E13 end; 949 50 old.nam1:=rad50(t); old.nam2:=rad50(t2); 950 53 new:=old; t:='BAK'; new.ext:=rad50(t); 951 54 rename(old) 952 54 E8 end; 953 54 E BAK end; 954 955 B EXITPGM begin 956 {exitpgm} 957 1 bak(filename); 958 3 size:=-1; rewrite(outputfile,filename,defaultext,size); 959 4 fileoutput(outputfile,listhead,lastline); 960 5 escape(exitkeypadmode); 961 6 finished:=true; 962 6 E EXITPGM end; 963 964 965 966 967 968 PROCEDURE SAVE; 969 {Saves text in a file, beginning at taged line and ending at Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 970 current line} 971 972 var 973 l:link; 974 name:str14; 975 size:integer; 976 savefile:text; 977 978 B SAVE begin 979 1 l:=cline; 980 2 while (l#tagline)&(l#listhead) do 981 3 l:=l^.last; 982 4 I2 if l=tagline 983 5 T2 then 984 5 B3 begin 985 6 ask(' File name?',name,size); 986 7 I4 if ord(name[1])=cr 987 8 T4 then name:=defaultname; 988 9 rewrite(savefile,name,defaultext); 989 10 l:=cline^.last; 990 11 fileoutput(savefile,tagline,l); 991 12 deleteline 992 12 E3 end 993 12 E SAVE end; 994 995 996 997 PROCEDURE UNSAVE; 998 {Retrieves text from a file and inserts following current line} 999 1000 var 1001 name:str14; 1002 size:integer; 1003 unsavefile:text; 1004 c:char; 1005 filesize:integer; 1006 1007 B UNSAVE begin 1008 1 ask(' File name?',name,size); 1009 2 I2 if ord(name[1])=cr 1010 3 T2 then name:=defaultname; 1011 4 deleteline; 1012 5 reset(unsavefile,name,defaultext,filesize); 1013 6 I3 if filesize>0 1014 6 T3 then 1015 7 while not eof(unsavefile) do 1016 8 B4 begin 1017 9 insertline; 1018 10 while not eoln(unsavefile) do 1019 11 B5 begin 1020 13 read(unsavefile,c); insertchar(c) 1021 13 E5 end; 1022 14 readln(unsavefile) 1023 14 E4 end; 1024 15 close(unsavefile) 1025 15 E UNSAVE end; 1026 Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 1027 1028 1029 1030 PROCEDURE TOPOFFILE; 1031 {Makes first line in file the current line} 1032 1033 B TOPOFFILE begin 1034 1 cline:=listhead; 1035 2 window 1036 2 E TOPOFFILE end; 1037 1038 1039 1040 1041 1042 PROCEDURE DOCMD; 1043 {Decodes and executes escape sequence commands} 1044 1045 const 1046 scrollupcode='A'; 1047 scrolldowncode='B'; 1048 moverightcode='C'; 1049 moveleftcode='D'; 1050 deletecode='Q'; {Red} 1051 togglecode='P'; {Blue} 1052 keypadcode='?'; 1053 searchcode='t'; {4} 1054 topcode='u'; {5} 1055 exitcode='v'; {6} 1056 tagcode='w'; {7} 1057 savecode='x'; {8} 1058 unsavecode='y'; {9} 1059 1060 B DOCMD begin 1061 1 c:=getcw; 1062 2 I2 if c=keypadcode 1063 3 T2 then c:=getcw; 1064 4 C3 case c of 1065 4 scrollupcode: 1066 5 scrollup; 1067 5 scrolldowncode: 1068 6 scrolldown; 1069 6 moverightcode: 1070 7 moveright; 1071 7 moveleftcode: 1072 8 moveleft; 1073 8 deletecode: 1074 9 deleteline; 1075 9 togglecode: 1076 10 I4 if toggle=repl 1077 11 T4 then toggle:=ins 1078 12 S4 else toggle:=repl; 1079 12 exitcode: 1080 13 exitpgm; 1081 13 searchcode: 1082 14 search; 1083 14 topcode: Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 1084 15 topoffile; 1085 15 tagcode: 1086 16 tagline:=cline; 1087 16 savecode: 1088 17 save; 1089 17 unsavecode: 1090 18 unsave; 1091 18 E3 end 1092 18 E DOCMD end; 1093 1094 1095 1096 1097 1098 1099 1100 1101 18 {MAIN PROGRAM} 1102 1103 B MAIN. begin 1104 1 jsw:=jsw or 50100B; {Use special TTY mode & lower case} 1105 2 maxnodelength:=hdrlength+maxline; 1106 3 cur:=1; 1107 5 movcur(1,1); escape(erasetoeos); 1108 6 initbuffer; 1109 8 writeln(id); writeln; 1110 9 ask(' File name?',filename,filesize); 1111 10 deleteline; 1112 11 reset(inputfile,filename,defaultext,filesize); 1113 12 I2 if filesize>0 1114 13 T2 then fileinput; 1115 14 window; {Clear screen} 1116 15 toggle:=ins; {Character insert is default} 1117 16 escape(keypadmode); 1118 17 finished:=false; 1119 1120 18 R3 repeat 1121 19 I4 if (memoryleft>=0) and (memoryleft<1000) 1122 19 T4 then 1123 20 B5 begin 1124 22 writeln('<>'); exitpgm 1125 22 E5 end; 1126 23 c:=getcw; {Get a character and decode it} 1127 24 I6 if c='`' 1128 25 T6 then debug; 1129 26 I7 if ord(c)=esc 1130 27 T7 then docmd 1131 27 S7 else 1132 28 I8 if ord(c)=del 1133 29 T8 then deletechar 1134 29 S8 else 1135 30 I9 if ord(c)=cr 1136 31 T9 then 1137 31 B10 begin 1138 33 c:=getcw; insertline 1139 33 E10 end 1140 33 S9 else Cross Reference of ED 11/07/77 02:11:31 Line Stmt Nesting 1141 34 I11 if toggle=repl 1142 35 T11 then replacechar(c) 1143 35 S11 else 1144 36 insertchar(c) 1145 36 U3 until finished 1146 36 E MAIN. end. 1147 CROSS REFERENCE LISTING OF IDENTIFIERS ************************************ ALENGTH 716 754 ANS -71 716 732 736 749 AREA -850 857 858 859 ASK -716 775 985 1008 1110 BAK -829 957 BLANK -832 901 924 941 941 C -66 -209 215 219 221 -326 333 -341 344 345 345 420 432 433 441 449 482 -721 731 732 741 749 749 751 753 -870 877 880 883 884 885 885 886 -1004 1020 1020 1061 1062 1063 1064 1126 1127 1129 1132 1135 1138 1142 1144 C1 -356 359 360 364 364 365 C2 -356 364 366 367 -425 431 433 CHAN -851 857 CHARPTR 84 93 CHR 96 157 157 168 169 188 366 433 433 526 549 732 857 858 894 CLINE -61 113 116 117 118 119 122 212 215 257 258 259 260 262 273 276 277 278 278 279 279 281 296 299 309 310 311 312 381 385 385 386 400 403 406 407 407 428 428 431 432 437 437 438 458 458 461 474 477 483 484 503 504 506 506 508 522 526 529 549 552 570 579 585 587 640 657 662 662 677 679 681 681 776 804 807 809 979 989 1034 1086 CLOSE 710 1024 CODE 153 157 COLUMN 163 169 CPTR -56 84 84 -88 -108 174 -179 -209 -293 -424 -453 -455 -519 -542 -567 -692 -720 -772 CR -29 751 986 1009 1135 CUR -67 111 122 212 215 215 221 428 431 432 437 438 442 442 479 483 484 522 522 525 525 526 529 545 548 548 549 552 575 578 579 582 585 587 811 1106 CURSORLEFT -37 555 745 745 CURSORRIGH -36 532 D -853 859 DATA -53 96 113 114 115 116 117 188 198 306 306 431 432 471 471 479 480 526 549 582 583 638 671 705 788 DBLK -847 -853 DEBUG -105 1128 DEFAULTEXT -42 912 958 988 1012 1112 DEFAULTNAM -43 987 1010 DEL -30 741 1132 DELETECHAR -562 1133 DELETECODE -1050 1073 DELETELINE -614 797 991 1011 1074 1111 DELETENODE -269 308 473 618 DEV -836 937 DIRECT -35 167 DISPLAYBOT -240 386 DISPLAYTOP -227 413 DISPOSE 309 DOCMD -1042 1130 ED 1 EMPTYTTYIN -351 380 399 ENDLOC 174 187 EOF 658 1015 EOLN 667 1018 ERASETOEOL -34 436 586 ERASETOEOS -33 501 1107 ESC -31 157 366 732 1129 ESCAPE -153 167 232 436 501 501 532 555 586 745 745 960 1107 1117 EXITCODE -1055 1079 EXITKEYPAD -40 960 EXITPGM -822 1080 1124 EXT -836 916 950 F 688 705 707 710 FALSE 725 777 791 1118 FILEINPUT -649 1114 FILENAME -72 957 958 1110 1112 FILENAMEST -841 919 928 940 FILEOUTPUT -688 959 990 FILESIZE -77 121 -1005 1012 1013 1110 1112 1113 FINISHED -73 961 1118 1145 FIRSTLN 688 696 697 697 698 FIRSTPOS -767 784 788 809 811 FUNCTIONCO -852 858 GETC -320 333 344 359 364 GETCW -338 345 367 731 753 1061 1063 1126 1138 HDRLENGTH -27 302 1105 HOME -32 501 I -88 93 96 -179 187 188 198 -293 305 306 306 -397 408 409 411 411 -453 470 471 471 479 480 480 -497 502 504 506 506 -566 582 583 583 -654 678 679 681 681 -692 704 705 -720 728 730 730 732 737 744 744 749 751 754 -766 787 788 788 -841 -871 875 876 876 877 877 879 879 880 880 882 883 884 892 893 893 894 894 897 899 899 900 900 902 905 905 906 908 909 909 920 922 922 923 923 923 925 928 929 930 932 933 933 940 942 942 945 946 947 947 ID -24 1109 INITBUFFER -627 1108 INPUTFILE -76 658 667 671 673 1112 INS -68 1077 1116 INSERTCHAR -449 1020 1144 INSERTLINE -596 621 643 726 1017 1138 INSERTNODE -253 307 472 607 661 J -179 192 -842 905 906 908 909 909 929 930 932 933 933 940 942 944 945 946 947 947 JSW -69 1104 1104 KEYPADCODE -1052 1062 KEYPADMODE -39 1117 KORE -136 147 L 174 183 185 227 233 233 240 246 246 253 257 258 259 260 263 -292 302 303 304 305 307 312 -397 406 409 411 411 413 -454 467 468 469 470 472 474 -498 503 508 -653 660 661 663 -693 698 699 701 701 702 706 -765 776 779 781 781 783 788 804 807 -973 979 980 980 980 981 982 989 990 LAST -50 116 257 259 277 278 279 279 407 411 506 635 697 981 989 LASTDELETE -64 281 403 405 LASTLINE -63 115 262 263 276 277 310 311 381 641 679 706 779 959 LASTLN 688 699 LASTMATCH -766 783 784 LENGTH -52 118 212 233 246 298 302 303 303 304 305 428 437 458 463 468 468 470 479 481 481 483 522 572 575 578 582 584 584 585 606 637 666 669 670 670 671 704 706 783 LF -28 LINE -47 -48 163 168 174 184 LINECOUNT -70 112 261 261 280 280 620 642 LINEPTR 84 96 LINK -47 -49 -50 -61 -62 -63 -64 -65 84 129 174 227 240 253 -292 -397 -454 -498 -601 -653 688 -693 -765 -973 LISTHEAD -62 114 273 299 400 409 428 458 504 631 632 634 635 640 641 657 677 696 959 980 1034 MATCH -770 777 779 786 791 793 798 MAXLENGTH -51 119 298 304 463 469 605 636 665 MAXLINE -25 -51 -52 -53 -56 -67 298 298 458 469 522 605 636 665 669 1105 MAXNODELEN -75 467 604 1105 MEMORYLEFT -74 120 129 147 302 467 604 1121 1121 MOVCUR -163 184 221 231 244 439 485 530 553 580 588 810 1107 MOVELEFT -539 1072 MOVELEFTCO -1049 1071 MOVERIGHT -515 1070 MOVERIGHTC -1048 1069 N 829 893 893 894 894 900 902 906 908 923 923 925 930 932 942 942 945 946 NAM1 -836 949 NAM2 -836 949 NAME -974 985 986 987 988 -1001 1008 1009 1010 1012 NEW 142 631 660 -839 950 950 NEWV -129 302 467 604 NEXT -49 117 258 258 259 260 278 278 279 385 634 662 681 701 781 ODD 139 OLD -839 844 859 916 937 949 949 950 951 ORD 345 360 365 741 751 877 880 894 986 1009 1129 1132 1135 OUTPUTFILE -826 958 959 P -601 604 605 606 607 PATTERN -768 775 788 813 POS -84 122 183 215 438 484 529 552 579 587 809 POSITIONCU -205 234 247 PROGRAM 1 PROMPT 716 727 PTR 129 142 RAD50 -867 886 916 937 949 949 950 RAD50FILEN -835 -839 844 -847 READ 671 1020 READLN 673 1022 RENAME -844 951 REPEATSEAR -722 725 738 752 REPL -68 1076 1078 1141 REPLACECHA -420 482 1142 RESET 1012 1112 REVERSE -38 232 REWRITE 958 988 S 867 876 876 877 879 879 880 882 SAVE -968 1088 SAVECODE -1057 1087 SAVEFILE -976 988 990 SAVEPATTER -78 736 813 SAVESSLENG -79 737 814 SCREENSIZE -26 221 244 246 -397 409 437 439 483 485 504 530 553 580 585 588 -654 679 801 810 SCROLLDOWN -393 619 -1047 1067 1068 SCROLLUP -376 508 608 807 1066 SCROLLUPCO -1046 1065 SEARCH -760 1082 SEARCHCODE -1053 1081 SIZE -89 92 95 97 98 129 139 140 140 -180 191 192 194 -827 958 958 -975 985 -1002 1008 SLINECOUNT -771 778 782 782 801 SP -136 147 SQUEEZE -288 384 404 675 SSLENGTH -769 775 779 783 787 814 STARTLOC 174 183 187 STR14 -57 -72 -78 716 716 -768 829 -974 -1001 STR3 -834 -840 867 T -840 -872 885 886 886 901 908 912 913 916 924 932 936 937 941 945 949 950 950 T2 -840 941 946 949 TAB -41 96 188 433 433 526 549 TAGCODE -1056 1085 TAGLINE -65 980 982 990 1086 TEXT -76 688 -826 -976 -1003 TOGGLE -68 1076 1077 1078 1116 1141 TOGGLECODE -1051 1075 TOPCODE -1054 1083 TOPOFFILE -1030 1084 TRUE 738 786 961 UNSAVE -997 1090 UNSAVECODE -1058 1089 UNSAVEFILE -1003 1012 1015 1018 1020 1022 1024 USRLOADADR -849 860 864 WINDOW -493 804 1035 1115 WRITE 123 157 157 168 169 192 198 441 704 727 745 749 WRITELN 111 112 113 114 115 116 117 118 119 120 121 245 707 1109 1109 1124 WRITET -174 233 246 437 483 585 XLOC 84 92 95 95 97 -108 122 123 -179 183 184 191 194 194 198 198 -209 215 219 221 -424 438 439 -455 484 485 -519 529 530 -542 552 553 -567 579 580 587 588 -772 809 810 LIST OF PROCEDURES ****************** ASK IS CALLED BY: MAIN. -716 1110 SEARCH 775 SAVE 985 UNSAVE 1008 AND CALLS UP: INSERTLINE 726 GETCW 731 753 ESCAPE 745 745 BAK IS CALLED BY: EXITPGM -829 957 AND CALLS UP: RAD50 916 937 949 949 950 RENAME 951 DEBUG IS CALLED BY: MAIN. -105 1128 AND CALLS UP: POS 122 DELETECHAR IS CALLED BY: MAIN. -562 1133 AND CALLS UP: POS 579 587 MOVCUR 580 588 WRITET 585 ESCAPE 586 DELETELINE IS CALLED BY: MAIN. -614 1111 SEARCH 797 SAVE 991 UNSAVE 1011 DOCMD 1074 AND CALLS UP: DELETENODE 618 SCROLLDOWN 619 INSERTLINE 621 DELETENODE IS CALLED BY: MAIN. -269 SQUEEZE 308 INSERTCHAR 473 DELETELINE 618 DISPLAYBOT IS CALLED BY: MAIN. -240 SCROLLUP 386 AND CALLS UP: MOVCUR 244 WRITET 246 POSITIONCU 247 DISPLAYTOP IS CALLED BY: MAIN. -227 SCROLLDOWN 413 AND CALLS UP: MOVCUR 231 ESCAPE 232 WRITET 233 POSITIONCU 234 DOCMD IS CALLED BY: MAIN. -1042 1130 AND CALLS UP: SCROLLDOWN -1047 1067 1068 GETCW 1061 1063 SCROLLUP 1066 MOVERIGHT 1070 MOVELEFT 1072 DELETELINE 1074 EXITPGM 1080 SEARCH 1082 TOPOFFILE 1084 SAVE 1088 UNSAVE 1090 EMPTYTTYIN IS CALLED BY: MAIN. -351 SCROLLUP 380 SCROLLDOWN 399 AND CALLS UP: GETC 359 364 GETCW 368 ESCAPE IS CALLED BY: MAIN. -153 1107 1117 MOVCUR 167 DISPLAYTOP 232 REPLACECHA 436 WINDOW 501 501 MOVERIGHT 532 MOVELEFT 555 DELETECHAR 586 ASK 745 745 EXITPGM 960 EXITPGM IS CALLED BY: MAIN. -822 1124 DOCMD 1080 AND CALLS UP: BAK 957 FILEOUTPUT 959 ESCAPE 960 FILEINPUT IS CALLED BY: MAIN. -649 1114 AND CALLS UP: INSERTNODE 661 SQUEEZE 675 FILEOUTPUT IS CALLED BY: MAIN. -688 EXITPGM 959 SAVE 990 GETC IS CALLED BY: MAIN. -320 GETCW 344 EMPTYTTYIN 359 364 GETCW IS CALLED BY: MAIN. -338 1126 1138 EMPTYTTYIN 368 ASK 731 753 DOCMD 1061 1063 AND CALLS UP: GETC 344 INITBUFFER IS CALLED BY: MAIN. -627 1108 AND CALLS UP: INSERTLINE 643 INSERTCHAR IS CALLED BY: MAIN. -449 1144 UNSAVE 1020 AND CALLS UP: NEWV 467 INSERTNODE 472 DELETENODE 473 REPLACECHA 482 WRITET 483 POS 484 MOVCUR 485 INSERTLINE IS CALLED BY: MAIN. -596 1138 DELETELINE 621 INITBUFFER 643 ASK 726 UNSAVE 1017 AND CALLS UP: NEWV 604 INSERTNODE 607 SCROLLUP 608 INSERTNODE IS CALLED BY: MAIN. -253 SQUEEZE 307 INSERTCHAR 472 INSERTLINE 607 FILEINPUT 661 MOVCUR IS CALLED BY: MAIN. -163 1107 WRITET 184 POSITIONCU 221 DISPLAYTOP 231 DISPLAYBOT 244 REPLACECHA 439 INSERTCHAR 485 MOVERIGHT 530 MOVELEFT 553 DELETECHAR 580 588 SEARCH 810 AND CALLS UP: ESCAPE 167 MOVELEFT IS CALLED BY: MAIN. -539 DOCMD 1072 AND CALLS UP: POS 552 MOVCUR 553 ESCAPE 555 MOVERIGHT IS CALLED BY: MAIN. -515 DOCMD 1070 AND CALLS UP: POS 529 MOVCUR 530 ESCAPE 532 NEWV IS CALLED BY: MAIN. -129 SQUEEZE 302 INSERTCHAR 467 INSERTLINE 604 POS IS CALLED BY: MAIN. -84 DEBUG 122 WRITET 183 POSITIONCU 215 REPLACECHA 438 INSERTCHAR 484 MOVERIGHT 529 MOVELEFT 552 DELETECHAR 579 587 SEARCH 809 POSITIONCU IS CALLED BY: MAIN. -205 DISPLAYTOP 234 DISPLAYBOT 247 AND CALLS UP: POS 215 MOVCUR 221 RAD50 IS CALLED BY: BAK -867 916 937 949 949 950 RENAME IS CALLED BY: BAK -844 951 REPLACECHA IS CALLED BY: MAIN. -420 1142 INSERTCHAR 482 AND CALLS UP: ESCAPE 436 WRITET 437 POS 438 MOVCUR 439 SAVE IS CALLED BY: MAIN. -968 DOCMD 1088 AND CALLS UP: ASK 985 FILEOUTPUT 990 DELETELINE 991 SCROLLDOWN IS CALLED BY: MAIN. -393 DELETELINE 619 DOCMD -1047 1067 1068 AND CALLS UP: EMPTYTTYIN 399 SQUEEZE 404 DISPLAYTOP 413 SCROLLUP IS CALLED BY: MAIN. -376 WINDOW 508 INSERTLINE 608 SEARCH 807 DOCMD 1066 AND CALLS UP: EMPTYTTYIN 380 SQUEEZE 384 DISPLAYBOT 386 SEARCH IS CALLED BY: MAIN. -760 DOCMD 1082 AND CALLS UP: ASK 775 DELETELINE 797 WINDOW 804 SCROLLUP 807 POS 809 MOVCUR 810 SQUEEZE IS CALLED BY: MAIN. -288 SCROLLUP 384 SCROLLDOWN 404 FILEINPUT 675 AND CALLS UP: NEWV 302 INSERTNODE 307 DELETENODE 308 TOPOFFILE IS CALLED BY: MAIN. -1030 DOCMD 1084 AND CALLS UP: WINDOW 1035 UNSAVE IS CALLED BY: MAIN. -997 DOCMD 1090 AND CALLS UP: ASK 1008 DELETELINE 1011 INSERTLINE 1017 INSERTCHAR 1020 WINDOW IS CALLED BY: MAIN. -493 1115 SEARCH 804 TOPOFFILE 1035 AND CALLS UP: ESCAPE 501 501 SCROLLUP 508 WRITET IS CALLED BY: MAIN. -174 DISPLAYTOP 233 DISPLAYBOT 246 REPLACECHA 437 INSERTCHAR 483 DELETECHAR 585 AND CALLS UP: POS 183 MOVCUR 184 INDENTED PROCEDURE LISTING ************************** MAIN. 0 POS 84 DEBUG 105 NEWV 129 ESCAPE 153 MOVCUR 163 WRITET 174 POSITIONCU 205 DISPLAYTOP 227 DISPLAYBOT 240 INSERTNODE 253 DELETENODE 269 SQUEEZE 288 GETC 320 GETCW 338 EMPTYTTYIN 351 SCROLLUP 376 SCROLLDOWN 393 REPLACECHA 420 INSERTCHAR 449 WINDOW 493 MOVERIGHT 515 MOVELEFT 539 DELETECHAR 562 INSERTLINE 596 DELETELINE 614 INITBUFFER 627 FILEINPUT 649 FILEOUTPUT 688 ASK 716 SEARCH 760 EXITPGM 822 BAK 829 RENAME 844 RAD50 867 SAVE 968 UNSAVE 997 TOPOFFILE 1030 DOCMD 1042