User Tools

Site Tools


cdc:nos2.source:opl.opl871:deck:fsedata

Deck FSEDATA

0 Modifications

Listing Sections

Source

Seq #  *Modification Id* Act 
----------------------------+
00001  M01S00001.fsedata +++|PROC FSEDATA;
00002  M01S00002.fsedata +++|BEGIN
00003  M01S00003.fsedata +++|
00004  M01S00004.fsedata +++|
00005  M01S00005.fsedata +++|#
00006  M01S00006.fsedata +++|***       FSEDATA -- COMPILE COMMON BLOCK *COMFDAT*.
00007  M01S00007.fsedata +++|*
00008  M01S00008.fsedata +++|*         FSEDATA IS THE ONLY COMPILATION IN SINGLE THAT USES
00009  M01S00009.fsedata +++|*         CONTROL PRESET WITH THE COMFDAT COMMON BLOCK.  IN MULTI-USER
00010  M01S00010.fsedata +++|*         VERSION, THE SMFEX MONITOR WILL INITIALIZE COMFDAT.
00011  M01S00011.fsedata +++|#
00012  M01S00012.fsedata +++|
00013  M01S00013.fsedata +++|  DEF LISTCON #1#;
00014  M01S00014.fsedata +++|
00015  M01S00015.fsedata +++|CONTROL PRESET;              # UNIVERSAL DECLARES          #
00016  M01S00016.fsedata +++|
00017  M01S00017.fsedata +++|*IFCALL SINGLE,COMFSGL
00018  M01S00018.fsedata +++|*IFCALL ONLY,COMFONL
00019  M01S00019.fsedata +++|*IFCALL MULTI,COMFMLT
00020  M01S00020.fsedata +++|
00021  M01S00021.fsedata +++|*CALL COMFFSE
00022  M01S00022.fsedata +++|
00023  M01S00023.fsedata +++|*CALL COMFVDT
00024  M01S00024.fsedata +++|
00025  M01S00025.fsedata +++|*CALL COMFDS1
00026  M01S00026.fsedata +++|*CALL COMFVD2
00027  M01S00027.fsedata +++|*CALL COMFDS2
00028  M01S00028.fsedata +++|
00029  M01S00029.fsedata +++|END TERM
00030  M01S00014.fsedata +++|FSEEDIT
00031  M01S79709.@047167 +++|NS2208
00032  M01S78149.@051455 +++|FSEED20
00033  M01S79711.@047039 +++|NS2411
00034  M01S132940.@006306 ---|NS2503
00035  M01S78149.@018398 ---|281L803
00036  M01S00003.fsedata +++|
00037  M01S00004.fsedata +++|#
00038  M01S00005.fsedata +++|***       FSEEDIT - FULL SCREEN EDITOR AND SCREEN MGT FACILITY.
00039  M01S00006.fsedata +++|*
Line S00007 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000084
Seq #  *Modification Id* Act 
----------------------------+
00040  M02S00007.@000084 ---|*         COPYRIGHT CONTROL DATA CORPORATION, 1983.
00041  M01S00001.@000084 +++|*         COPYRIGHT CONTROL DATA SYSTEMS INC.  1992.
00042  M01S00008.fsedata +++|#
00043  M01S00009.fsedata +++|
00044  M01S00010.fsedata +++|  DEF LISTCON #0#;
00045  M01S00011.fsedata +++|
00046  M01S00012.fsedata +++|CONTROL EJECT;                         # UNIVERSAL DEFINITIONS       #
00047  M01S00013.fsedata +++|
00048  M01S00014.fsedata +++|*IFCALL SINGLE,COMFSGL
00049  M01S00015.fsedata +++|*IFCALL ONLY,COMFONL
00050  M01S00016.fsedata +++|*IFCALL MULTI,COMFMLT
00051  M01S00017.fsedata +++|*CALL COMFFSE
00052  M01S00018.fsedata +++|
00053  M01S00019.fsedata +++|                             # EXTERNAL REF'S AND DEF'S    #
00054  M01S00020.fsedata +++|
00055  M01S00021.fsedata +++|
00056  M01S00022.fsedata +++|CONTROL IFEQ MULTI,1;
00057  M01S00023.fsedata +++|  XREF ARRAY RENTSTK [1:MAXREENT];     # SUBROUTINE STACK  #
00058  M01S00024.fsedata +++|    BEGIN
00059  M01S00025.fsedata +++|    ITEM RSTK;
00060  M01S00026.fsedata +++|    END
00061  M01S00027.fsedata +++|  XREF ITEM RSTKPTR;
00062  M01S00028.fsedata +++|CONTROL FI;
00063  M01S00029.fsedata +++|
00064  M01S00030.fsedata +++|
00065  M01S00031.fsedata +++|CONTROL IFEQ MULTI,1;
00066  M01S00032.fsedata +++|  XREF PROC VOLUNTEER;       # OFFER TO SURRENDER SUBTASK  #
00067  M01S00033.fsedata +++|  XREF PROC CLEARINT;        # PROCLAIM WE SAW USRBRK   #
00068  M01S00034.fsedata +++|  XREF PROC FATALTRAP;       # MONITOR PROCESSING FOR EDITOR TROUBLE #
00069  M01S00035.fsedata +++|  XREF PROC CLEARQUE;        # MONITOR NO LONGER NEEDS TASKREQUE BIT #
00070  M01S00036.fsedata +++|  CONTROL IFEQ METERING,1;
00071  M01S00037.fsedata +++|    XREF PROC BGNMETER;      # ISSUE START-OF-SESSION STATS          #
00072  M01S00038.fsedata +++|  CONTROL FI;
00073  M01S00039.fsedata +++|CONTROL FI;
00074  M01S00040.fsedata +++|
00075  M01S00041.fsedata +++|XDEF
00076  M01S00042.fsedata +++|  BEGIN
00077  M01S00043.fsedata +++|*CALL COMFXED
00078  M01S00044.fsedata +++|  END
00079  M01S00045.fsedata +++|
00080  M01S00046.fsedata +++|XREF
00081  M01S00047.fsedata +++|  BEGIN
00082  M01S00048.fsedata +++|*CALL COMFXSB
00083  M01S00049.fsedata +++|*CALL COMFXTI
00084  M01S00050.fsedata +++|*CALL COMFXFO
00085  M01S00051.fsedata +++|*CALL COMFXSC
00086  M01S00052.fsedata +++|*CALL COMFXWK
00087  M01S00053.fsedata +++|*CALL COMFXVT
00088  M01S00054.fsedata +++|  END
00089  M01S00055.fsedata +++|
00090  M01S00056.fsedata +++|CONTROL IFEQ SINGLE,1;
00091  M01S00057.fsedata +++|  XREF
00092  M01S00058.fsedata +++|    BEGIN
00093  M01S00059.fsedata +++|*CALL COMFXCM
00094  M01S00060.fsedata +++|    END
00095  M01S00061.fsedata +++|CONTROL FI;
00096  M01S00062.fsedata +++|
00097  M01S00063.fsedata +++|XREF
00098  M01S00064.fsedata +++|  BEGIN
00099  M01S00065.fsedata +++|  CONTROL IFEQ SINGLE,1;
00100  M01S00066.fsedata +++|*CALL COMFXFL
00101  M01S00067.fsedata +++|  CONTROL FI;
00102  M01S00068.fsedata +++|  END
00103  M01S00069.fsedata +++|
00104  M01S00070.fsedata +++|XREF                         # XTRNL CIO PROCS   #
00105  M01S00071.fsedata +++|  BEGIN
00106  M01S00072.fsedata +++|  PROC READ;                 # ALL SAME AS       #
00107  M01S00073.fsedata +++|  PROC READC;                #  CORRESPONDING MACROS       #
00108  M01S00074.fsedata +++|  PROC WRITE;
00109  M01S00075.fsedata +++|  PROC WRITEF;
00110  M01S00076.fsedata +++|  PROC WRITER;
00111  M01S00077.fsedata +++|  PROC WRITEC;
00112  M01S00078.fsedata +++|  CONTROL IFEQ SINGLE,1;
00113  M01S00079.fsedata +++|    PROC EVICT;
00114  M01S00080.fsedata +++|    PROC RETERN;
00115  M01S00081.fsedata +++|    PROC REWIND;
00116  M01S00082.fsedata +++|    PROC RECALL;
00117  M01S00083.fsedata +++|  CONTROL FI;
00118  M01S00084.fsedata +++|  END
00119  M01S00085.fsedata +++|
00120  M01S00086.fsedata +++|XREF                         # XTRNL MISCELLANEOUS         #
00121  M01S00087.fsedata +++|  BEGIN
00122  M01S00001.@000016 +++|  PROC DISSJ;                        # DISABLE/ENABLE SSJ= #
00123  M01S00088.fsedata +++|  PROC VDTGTN;
00124  M01S00089.fsedata +++|  PROC VDTGTO;
00125  M01S00090.fsedata +++|  PROC EXCHWD;
00126  M01S00091.fsedata +++|  PROC MOVEWD;
00127  M01S00092.fsedata +++|  PROC ZEROWD;
00128  M01S00093.fsedata +++|  FUNC FASTFND B;            # OPTIMIZED STRING SEARCH     #
00129  M01S00001.@000074 +++|  FUNC FASTLNB;              # FIND LAST NON-BLANK         #
00130  M01S00094.fsedata +++|  FUNC LENGTH;               # LENGTH OF INTERNAL LINE     #
00131  M01S00095.fsedata +++|  FUNC LINESZ;
00132  M01S00096.fsedata +++|  FUNC FIXCTL B;             # FIX UNWANTED CONTROL BYTES  #
00133  M01S00097.fsedata +++|  CONTROL IFEQ SINGLE,1;
00134  M01S00098.fsedata +++|    PROC MESSAGE;            # MESSAGE MACRO     #
00135  M01S00099.fsedata +++|    PROC DISTCON;            # DISABLE TERMINAL CONTROL    #
00136  M01S00100.fsedata +++|    PROC ABORT;             # ABORT MACRO       #
00137  M01S00101.fsedata +++|    PROC SYSREQ;
00138  M01S00102.fsedata +++|    PROC ROLLTE;
00139  M01S00103.fsedata +++|    PROC TSTATUS;
00140  M01S00104.fsedata +++|  CONTROL FI;
00141  M01S00105.fsedata +++|  END
00142  M01S00106.fsedata +++|
00143  M01S00107.fsedata +++|                             # COMMON DATA AREAS #
00144  M01S00108.fsedata +++|
00145  M01S00109.fsedata +++|*CALL COMFDS1
00146  M01S00110.fsedata +++|*CALL COMFVD2
00147  M01S00111.fsedata +++|*CALL COMFDS2
00148  M01S00112.fsedata +++|
00149  M01S00113.fsedata +++|                             # EDITOR SYNTAX TABLES        #
00150  M01S00114.fsedata +++|
00151  M01S00115.fsedata +++|*CALL COMFTAB
00152  M01S00116.fsedata +++|PAGE                         # VARIOUS USEFUL LITTLE ROUTINES        #
00153  M01S00117.fsedata +++|
00154  M01S00118.fsedata +++|
00155  M01S00119.fsedata +++|PROC DSPLCOD(WORD);
00156  M01S00120.fsedata +++|  BEGIN
00157  M01S00121.fsedata +++|#
00158  M01S00122.fsedata +++|**        DSPLCOD - CONVERT ONE CHARACTER TO LOWER CASE OR DISPLAY.
00159  M01S00123.fsedata +++|*
00160  M01S00124.fsedata +++|*         DSPLCOD SUPPRESSES CASE OF INTERNAL CHARACTERS.  IT IS
00161  M01S00125.fsedata +++|*         ALSO DEFINED TO CONVERT FROM INTERNAL CHARACTER SET TO
00162  M01S00126.fsedata +++|*         DISPLAY.  THUS THE FIRST 64 CHARACTERS OF INTERNAL MUST
00163  M01S00127.fsedata +++|*         EQUAL DISPLAY CODE.  WE ENFORCE THIS WITH COMPILE-TIME
00164  M01S00128.fsedata +++|*         CHECKS FOR "A", "Z", AND SEMICOLON.
00165  M01S00129.fsedata +++|*
00166  M01S00130.fsedata +++|*         ENTRY  WORD - INTERNAL CHARSET VALUE TO CONVERT.
00167  M01S00131.fsedata +++|*
00168  M01S00132.fsedata +++|*         EXIT   WORD - CONVERTED.
00169  M01S00133.fsedata +++|#
00170  M01S00134.fsedata +++|  CONTROL IFNQ CLETTERA,1; ERROR; CONTROL FI;
00171  M01S00135.fsedata +++|  CONTROL IFNQ CLETTERZ,26; ERROR; CONTROL FI;
00172  M01S00136.fsedata +++|  CONTROL IFNQ CSEMCOLON,O"77"; ERROR; CONTROL FI;
00173  M01S00137.fsedata +++|  ITEM WORD;
00174  M01S00138.fsedata +++|  WORD=XLTINTDSP[WORD];
00175  M01S00139.fsedata +++|  END                          # OF DSPLCOD       #
00176  M01S00140.fsedata +++|
00177  M01S00141.fsedata +++|
00178  M01S00142.fsedata +++|PROC SQUELCH(TEXTLIN);
00179  M01S00143.fsedata +++|  BEGIN
00180  M01S00144.fsedata +++|#
00181  M01S00145.fsedata +++|**        SQUELCH - SUPPRESS LOWER-CASE FOR LINE IMAGE.
00182  M01S00146.fsedata +++|*
00183  M01S00147.fsedata +++|*         ENTRY  TEXTLIN - INTERNAL CHARSET LINE IMAGE.
00184  M01S00148.fsedata +++|*
00185  M01S00149.fsedata +++|*         EXIT   TEXTLIN - ALL ALPHABETICS ARE UPPER CASE.
00186  M01S00150.fsedata +++|*
00187  M01S00151.fsedata +++|*         MACROS GETCHAR, SETCHAR.
00188  M01S00152.fsedata +++|*
00189  M01S00153.fsedata +++|*         CALLS  DSPLCOD, LENGTH.
00190  M01S00154.fsedata +++|#
00191  M01S00155.fsedata +++|  ARRAY TEXTLIN[0:99]; ITEM TEXTLINE;
00192  M01S00156.fsedata +++|  ITEM TMP1, TMP2;
00193  M01S00157.fsedata +++|  FOR TMP1=0 STEP 1 UNTIL LENGTH(TEXTLIN) DO
00194  M01S00158.fsedata +++|    BEGIN
00195  M01S00159.fsedata +++|    GETCHAR(TEXTLINE,TMP1,TMP2);
00196  M01S00160.fsedata +++|    DSPLCOD(TMP2);
00197  M01S00161.fsedata +++|    SETCHAR(TEXTLINE,TMP1,TMP2);
00198  M01S00162.fsedata +++|    END
00199  M01S00163.fsedata +++|  END                         # OF SQUELCH        #
00200  M01S00164.fsedata +++|
00201  M01S00165.fsedata +++|
00202  M01S00166.fsedata +++|PROC HALT(STR);
00203  M01S00167.fsedata +++|  IOBEGIN(HALT)
00204  M01S00168.fsedata +++|#
00205  M01S00169.fsedata +++|**        HALT - SET WARNING MESSAGE AND FLAG COMMAND SHUTDOWN.
00206  M01S00170.fsedata +++|*
00207  M01S00171.fsedata +++|*         ENTRY  STR - ERROR MESSAGE, DISPLAY WITH DOLLAR SIGN.
00208  M01S00172.fsedata +++|*
00209  M01S00173.fsedata +++|*         EXIT   ERRSTRING - EQUAL TO STR.
00210  M01S00174.fsedata +++|*                FOUND - FALSE.
00211  M01S00175.fsedata +++|*                LINCTR - INFINITE.
00212  M01S00176.fsedata +++|#
00213  M01S00177.fsedata +++|  ITEM STR C(80);
00214  M01S00178.fsedata +++|  FOUND=FALSE;
00215  M01S00179.fsedata +++|  LINCTR=LARGENUM;
00216  M01S00180.fsedata +++|  ERRSTRING=STR;
00217  M01S00181.fsedata +++|  IOEND                        # OF HALT #
00218  M01S00182.fsedata +++|
00219  M01S00183.fsedata +++|
00220  M01S00184.fsedata +++|CONTROL IFEQ MULTI,1;
00221  M01S00185.fsedata +++|
00222  M01S00186.fsedata +++|
00223  M01S00187.fsedata +++|  PROC CHKVICTIM;
00224  M01S00188.fsedata +++|    IOBEGIN(CHKVICTIM)
00225  M01S00189.fsedata +++|#
00226  M01S00190.fsedata +++|**        CHKVICTIM - CHECK FOR SMFEX-IMPOSED SESSION ABORT.
00227  M01S00191.fsedata +++|*
00228  M01S00192.fsedata +++|*         CHKVICTIM LOOKS FOR SMFEX-DETECTED CATASTROPHES.  THIS
00229  M01S00193.fsedata +++|*         CURRENTLY INCLUDES ONLY UNRECOVERABLE ECS PARITY ERRORS.
00230  M01S00194.fsedata +++|*
00231  M01S00195.fsedata +++|*         ENTRY  SMFVICTIM - FLAG.
00232  M01S00196.fsedata +++|*
00233  M01S00197.fsedata +++|*         EXIT   VIA FATAL IF NEED TO ABORT.
00234  M01S00198.fsedata +++|*
00235  M01S00199.fsedata +++|*         CALLS  FATAL.
00236  M01S00200.fsedata +++|#
00237  M01S00201.fsedata +++|    IF SMFVICTIM THEN FATAL(ERRSTRING);
00238  M01S00202.fsedata +++|    IOEND                      # OF CHKVICTIM      #
00239  M01S00203.fsedata +++|
00240  M01S00204.fsedata +++|CONTROL FI;
00241  M01S00205.fsedata +++|
00242  M01S00206.fsedata +++|
00243  M01S00207.fsedata +++|PROC CONCAT(LIN1,LIN2);
00244  M01S00208.fsedata +++|  BEGIN
00245  M01S00209.fsedata +++|#
00246  M01S00210.fsedata +++|**        CONCAT - CONCATENATE TWO INTERNAL LINE IMAGES.
00247  M01S00211.fsedata +++|*
00248  M01S00212.fsedata +++|*         ENTRY  LIN1, LIN2 - THE LINE IMAGES IN INTERNAL CHARSET.
00249  M01S00213.fsedata +++|*
00250  M01S00214.fsedata +++|*         EXIT   LIN1 - HAS LIN2 APPENDED TO IT.
00251  M01S00215.fsedata +++|*
00252  M01S00216.fsedata +++|*         MACROS GETCHAR, SETCHAR.
00253  M01S00217.fsedata +++|*
00254  M01S00218.fsedata +++|*         CALLS  LENGTH.
00255  M01S00219.fsedata +++|#
00256  M01S00220.fsedata +++|  ARRAY LIN1; ITEM LINE1;
00257  M01S00221.fsedata +++|  ARRAY LIN2; ITEM LINE2;
00258  M01S00222.fsedata +++|  ITEM TMP1, TMP2, TMP3, TMP4;
00259  M01S00223.fsedata +++|  TMP1=LENGTH(LIN1);
00260  M01S00224.fsedata +++|  TMP2=LENGTH(LIN2);
00261  M01S00225.fsedata +++|  FOR TMP3=0 STEP 1 WHILE TMP3 LQ TMP2 AND TMP1+TMP3 LQ BUFCM1 DO
00262  M01S00226.fsedata +++|    BEGIN
00263  M01S00227.fsedata +++|    GETCHAR(LINE2,TMP3,TMP4);
00264  M01S00228.fsedata +++|    SETCHAR(LINE1,TMP1+TMP3,TMP4);
00265  M01S00229.fsedata +++|    END
00266  M01S00230.fsedata +++|  SETCHAR(LINE1,TMP1+TMP3,CENDLINE);
00267  M01S00231.fsedata +++|  END                          # OF CONCAT         #
00268  M01S00232.fsedata +++|
00269  M01S00233.fsedata +++|
00270  M01S00234.fsedata +++|PROC NOPOP;                  # LIKE POP BUT DONT MOVE      #
00271  M01S00235.fsedata +++|  BEGIN
00272  M01S00236.fsedata +++|#
00273  M01S00237.fsedata +++|**        NOPOP - POP POSITION STACK WITHOUT USING IT.
00274  M01S00238.fsedata +++|*
00275  M01S00239.fsedata +++|*         NOPOP DIFFERS FROM POP IN THAT WHILE BOTH POP THE LEVEL
00276  M01S00240.fsedata +++|*         OF THE POSITIONING STACK, NOPOP DISCARDS THE STACK VALUES
00277  M01S00241.fsedata +++|*         WHILE POP REPOSITIONS TO THE SAVED LOCATION IN THE FILE.
00278  M01S00242.fsedata +++|*
00279  M01S00243.fsedata +++|*         ENTRY  POSITIONING STACK PREVIOUSLY PUSHED.
00280  M01S00244.fsedata +++|*
00281  M01S00245.fsedata +++|*         EXIT   STACKPTR DECREMENTED.
00282  M01S00246.fsedata +++|*
00283  M01S00247.fsedata +++|*         CALLS  FATAL.
00284  M01S00248.fsedata +++|#
00285  M01S00249.fsedata +++|  IF STACKPTR LS 0 THEN
00286  M01S00250.fsedata +++|    BEGIN
Line S00251 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000048
Seq #  *Modification Id* Act 
----------------------------+
00287  M02S00251.@000048 ---|    FATAL(" FILE POSITION STACK UNDERFLOWED (1).$");
00288  M01S00001.@000048 +++|    FATAL(" FILE POSITION STACK UNDERFLOWED (2).$");
00289  M01S00252.fsedata +++|    END
00290  M01S00253.fsedata +++|  STACKPTR=STACKPTR-1;
00291  M01S00254.fsedata +++|  END                          # OF NOPOP          #
00292  M01S00255.fsedata +++|
00293  M01S00256.fsedata +++|
00294  M01S00257.fsedata +++|PROC WINDOLIN(LINEPARM,FILEPARM);
00295  M01S00258.fsedata +++|  BEGIN
00296  M01S00259.fsedata +++|#
00297  M01S00260.fsedata +++|**        WINDOLIN - FORCE ADDRESS INTO FILE IMAGE.
00298  M01S00261.fsedata +++|*
00299  M01S00262.fsedata +++|*         WINDOLIN FORCES LINEPARM TO BE IN BOUNDS FOR THE FILEPARM.
00300  M01S00263.fsedata +++|*
00301  M01S00264.fsedata +++|*         ENTRY  LINEPARM - LINE ADDRESS.
00302  M01S00265.fsedata +++|*                FILEPARM - BRACKET NUMBER FOR FILE.
00303  M01S00266.fsedata +++|*                TOPF(FILEPARM), BOTF(FILEPARM) - BOUNDS.
00304  M01S00267.fsedata +++|*
00305  M01S00268.fsedata +++|*         EXIT   LINEPARM - IN BOUNDS.
00306  M01S00269.fsedata +++|*                FOUND - TRUE OR FALSE FOR VALIDITY OF ORIGINAL VALUE.
00307  M01S00270.fsedata +++|#
00308  M01S00271.fsedata +++|  ITEM LINEPARM, FILEPARM;
00309  M01S00272.fsedata +++|  FOUND=FALSE;
00310  M01S00273.fsedata +++|  IF TOPF(FILEPARM) EQ BOTF(FILEPARM)-1 THEN LINEPARM=TOPF(FILEPARM);
00311  M01S00274.fsedata +++|  ELSE IF LINEPARM LQ TOPF(FILEPARM) THEN LINEPARM=TOPF(FILEPARM)+1;
00312  M01S00275.fsedata +++|  ELSE IF LINEPARM GQ BOTF(FILEPARM) THEN LINEPARM=BOTF(FILEPARM)-1;
00313  M01S00276.fsedata +++|  ELSE FOUND=TRUE;
00314  M01S00277.fsedata +++| END                          # OF WINDOLIN       #
00315  M01S00278.fsedata +++|
00316  M01S00279.fsedata +++|
00317  M01S00280.fsedata +++|PROC WINDOPOS(LINEPARM,FILEPARM);
00318  M01S00281.fsedata +++|  BEGIN
00319  M01S00282.fsedata +++|#
00320  M01S00283.fsedata +++|**        WINDOPOS - VALIDATE POSITION WITHIN FILE.
00321  M01S00284.fsedata +++|*
00322  M01S00285.fsedata +++|*         WINDOPOS IS LIKE WINDOLIN EXCEPT THAT IT ALLOWS THE
00323  M01S00286.fsedata +++|*         POSITION TO BE JUST ABOVE THE TOP OF THE FILE.
00324  M01S00287.fsedata +++|*
00325  M01S00288.fsedata +++|*         ENTRY  LINEPARM - AS WINDOLIN.
00326  M01S00289.fsedata +++|*                FILEPARM - AS WINDOLIN.
00327  M01S00290.fsedata +++|*                TOPF(), BOTF() - AS WINDOLIN.
00328  M01S00291.fsedata +++|*
00329  M01S00292.fsedata +++|*         EXIT   LINEPARM - AS WINDOLIN.
00330  M01S00293.fsedata +++|*                FOUND - AS WINDOLIN.
00331  M01S00294.fsedata +++|#
00332  M01S00295.fsedata +++|  ITEM LINEPARM, FILEPARM;
00333  M01S00296.fsedata +++|  FOUND=FALSE;
00334  M01S00297.fsedata +++|  IF TOPF(FILEPARM) EQ BOTF(FILEPARM)-1 THEN LINEPARM=TOPF(FILEPARM);
00335  M01S00298.fsedata +++|  IF LINEPARM LS TOPF(FILEPARM) THEN LINEPARM=TOPF(FILEPARM);
00336  M01S00299.fsedata +++|  ELSE IF LINEPARM GQ BOTF(FILEPARM) THEN LINEPARM=BOTF(FILEPARM)-1;
00337  M01S00300.fsedata +++|  ELSE FOUND=TRUE;
00338  M01S00301.fsedata +++|  END                          # OF WINDOPOS       #
00339  M01S00302.fsedata +++|
00340  M01S00303.fsedata +++|
00341  M01S00304.fsedata +++|PROC FWDNUM;
00342  M01S00305.fsedata +++|  IOBEGIN(FWDNUM)
00343  M01S00306.fsedata +++|#
00344  M01S00307.fsedata +++|**        FWDNUM - MOVE FORWARDS UNTIL NUMBERED LINE FOUND.
00345  M01S00308.fsedata +++|*
00346  M01S00309.fsedata +++|*         FWDNUM ADVANCES THE CURRENT POSITION IN THE WORKFILE
00347  M01S00310.fsedata +++|*         UNTIL A NUMBERED LINE IS FOUND.  NOTE THAT WE ASSUME THE
00348  M01S00311.fsedata +++|*         CALLER HAS VERIFIED THAT WE EXPECT NUMBERED LINES.
00349  M01S00312.fsedata +++|*
00350  M01S00313.fsedata +++|*         ENTRY  CURRENT, CURFILE - WHERE WE ARE.
00351  M01S00314.fsedata +++|*                BOTF(CURFILE) - BOUNDS.
00352  M01S00315.fsedata +++|*                USRBRK - CONTINUOUSLY CHECKED.
00353  M01S00316.fsedata +++|*
00354  M01S00317.fsedata +++|*         EXIT   CURRENT - UPDATED.
00355  M01S00318.fsedata +++|*
00356  M01S00319.fsedata +++|*         MACROS MOD.
00357  M01S00320.fsedata +++|*
00358  M01S00321.fsedata +++|*         CALLS  FWDZ, GETLNUM, VOLUNTEER(MULTI).
00359  M01S00322.fsedata +++|*
00360  M01S00323.fsedata +++|*         USES   LINENO, WIDTHFOUND, DORNGCTR.
00361  M01S00324.fsedata +++|#
00362  M01S00325.fsedata +++|  LINENO=NINES;
00363  M01S00326.fsedata +++|  WIDTHFOUND=0;
00364  M01S00327.fsedata +++|  FOR DORNGCTR=1 STEP 1 WHILE WIDTHFOUND EQ 0 AND
00365  M01S00328.fsedata +++|    CURRENT LS BOTF(CURFILE)-1 AND USRBRK EQ 0 DO
00366  M01S00329.fsedata +++|    BEGIN
00367  M01S00330.fsedata +++|    FWDZ;
00368  M01S00331.fsedata +++|    GETLNUM;
00369  M01S00332.fsedata +++|    IF WIDTHFOUND EQ 0 THEN LINENO=NINES;
00370  M01S00333.fsedata +++|    CONTROL IFEQ MULTI,1;
00371  M01S00334.fsedata +++|      IF MOD(DORNGCTR,VOLLINES) EQ 0 THEN VOLUNTEER;
00372  M01S00335.fsedata +++|    CONTROL FI;
00373  M01S00336.fsedata +++|    END
00374  M01S00337.fsedata +++|  IOEND                       # OF FWDNUM         #
00375  M01S00338.fsedata +++|
00376  M01S00339.fsedata +++|
00377  M01S00340.fsedata +++|PROC BAKNUM;
00378  M01S00341.fsedata +++|  IOBEGIN(BAKNUM)
00379  M01S00342.fsedata +++|#
00380  M01S00343.fsedata +++|**        BAKNUM - BACK UP IN FILE UNTIL NUMBERED LINE.
00381  M01S00344.fsedata +++|*
00382  M01S00345.fsedata +++|*         BAKNUM IS LIKE FWDNUM EXCEPT OPPOSITE DIRECTION.
00383  M01S00346.fsedata +++|*
00384  M01S00347.fsedata +++|*         ENTRY  CURRENT, CURFILE - WHERE WE ARE.
00385  M01S00348.fsedata +++|*                TOPF(CURFILE) - BOUNDS.
00386  M01S00349.fsedata +++|*                USRBRK - CONTINUOUSLY CHECKED.
00387  M01S00350.fsedata +++|*
00388  M01S00351.fsedata +++|*         EXIT   CURRENT - UPDATED.
00389  M01S00352.fsedata +++|*
00390  M01S00353.fsedata +++|*         MACROS MOD.
00391  M01S00354.fsedata +++|*
00392  M01S00355.fsedata +++|*         CALLS  BAKZ, GETLNUM, VOLUNTEER(MULTI).
00393  M01S00356.fsedata +++|*
00394  M01S00357.fsedata +++|*         USES   LINENO, WIDTHFOUND, DORNGCTR.
00395  M01S00358.fsedata +++|#
00396  M01S00359.fsedata +++|  LINENO=0;
00397  M01S00360.fsedata +++|  WIDTHFOUND=0;
00398  M01S00361.fsedata +++|  FOR DORNGCTR=1 STEP 1 WHILE WIDTHFOUND EQ 0 AND
00399  M01S00362.fsedata +++|    CURRENT GR TOPF(CURFILE)+1 AND USRBRK EQ 0 DO
00400  M01S00363.fsedata +++|    BEGIN
00401  M01S00364.fsedata +++|    BAKZ;
00402  M01S00365.fsedata +++|    GETLNUM;
00403  M01S00366.fsedata +++|    CONTROL IFEQ MULTI,1;
00404  M01S00367.fsedata +++|      IF MOD(DORNGCTR,VOLLINES) EQ 0 THEN VOLUNTEER;
00405  M01S00368.fsedata +++|    CONTROL FI;
00406  M01S00369.fsedata +++|    END
00407  M01S00370.fsedata +++|  IOEND                       # OF BAKNUM         #
00408  M01S00371.fsedata +++|
00409  M01S00372.fsedata +++|
00410  M01S00373.fsedata +++|PROC POSN;
00411  M01S00374.fsedata +++|  IOBEGIN(POSN)
00412  M01S00375.fsedata +++|#
00413  M01S00376.fsedata +++|**        POSN - POSITION TO LINE WITH DESIRED SEQUENCE NUMBER.
00414  M01S00377.fsedata +++|*
00415  M01S00378.fsedata +++|*         POSN MOVES FORWARDS OR BACKWARDS AS NEEDED TO GET TO
00416  M01S00379.fsedata +++|*         THE NEAREST LINE WITH THE RIGHT SEQUENCE NUMBER.  WE
00417  M01S00380.fsedata +++|*         ASSUME THE CALLER HAS VERIFIED WE EXPECT NUMBERS.
00418  M01S00381.fsedata +++|*
00419  M01S00382.fsedata +++|*         ENTRY  LINNUM1 - DESIRED SEQUENCE NUMBER.
00420  M01S00383.fsedata +++|*                CURFILE, CURF(CURFILE) - STARTING LOCATION.
00421  M01S00384.fsedata +++|*                TOPF(CURFILE), BOTF(CURFILE) - BOUNDS.
00422  M01S00385.fsedata +++|*                USRBRK - CONTINUOUSLY CHECKED.
00423  M01S00386.fsedata +++|*
00424  M01S00387.fsedata +++|*         EXIT   CURRENT - UPDATED.
00425  M01S00388.fsedata +++|*
00426  M01S00389.fsedata +++|*         MACROS MOD.
00427  M01S00390.fsedata +++|*
00428  M01S00391.fsedata +++|*         CALLS  POSZ, GETLNUM, BAKZ, VOLUNTEER(MULTI), FWDZ, BAKNUM.
00429  M01S00392.fsedata +++|*
00430  M01S00393.fsedata +++|*         USES   DORNGCTR, LINENO.
00431  M01S00394.fsedata +++|#
00432  M01S00395.fsedata +++|  POSZ(CURF(FILNUM));
00433  M01S00396.fsedata +++|  GETLNUM;
00434  M01S00397.fsedata +++|  FOR DORNGCTR=1 STEP 1 WHILE CURRENT GR TOPF(FILNUM) AND
00435  M01S00398.fsedata +++|    (LINENO GR LINNUM1 OR WIDTHFOUND EQ 0) AND USRBRK EQ 0 DO
00436  M01S00399.fsedata +++|    BEGIN
00437  M01S00400.fsedata +++|    BAKZ;
00438  M01S00401.fsedata +++|    GETLNUM;
00439  M01S00402.fsedata +++|    CONTROL IFEQ MULTI,1;
00440  M01S00403.fsedata +++|      IF MOD(DORNGCTR,VOLLINES) EQ 0 THEN VOLUNTEER;
00441  M01S00404.fsedata +++|    CONTROL FI;
00442  M01S00405.fsedata +++|    END
00443  M01S00406.fsedata +++|  FOR DORNGCTR=1 STEP 1 WHILE CURRENT LS BOTF(FILNUM)-1 AND
00444  M01S00407.fsedata +++|    (LINENO LS LINNUM1) AND USRBRK EQ 0 DO
00445  M01S00408.fsedata +++|    BEGIN
00446  M01S00409.fsedata +++|    FWDZ;
00447  M01S00410.fsedata +++|    GETLNUM;
00448  M01S00411.fsedata +++|    CONTROL IFEQ MULTI,1;
00449  M01S00412.fsedata +++|      IF MOD(DORNGCTR,VOLLINES) EQ 0 THEN VOLUNTEER;
00450  M01S00413.fsedata +++|    CONTROL FI;
00451  M01S00414.fsedata +++|    END
00452  M01S00415.fsedata +++|  IF LINENO GR LINNUM1 THEN BAKNUM;
00453  M01S00416.fsedata +++|  IOEND                        # OF POSN #
00454  M01S00417.fsedata +++|
00455  M01S00418.fsedata +++|
00456  M01S00419.fsedata +++|PROC FITNUM;
00457  M01S00420.fsedata +++|  IOBEGIN(FITNUM)
00458  M01S00421.fsedata +++|#
00459  M01S00422.fsedata +++|**        FITNUM - CHECK SEQUENCING GAP AND SELECT INCREMENT.
00460  M01S00423.fsedata +++|*
00461  M01S00424.fsedata +++|*         FITNUM IS USED WITH SEQUENCE NUMBERED FILES TO SEE IF
00462  M01S00425.fsedata +++|*         THERE IS AN ADEQUATE GAP IN VALUES OF ADJACENT SEQUENCE
00463  M01S00426.fsedata +++|*         NUMBERS TO FIT IN AS MANY LINES AS WE WISH.  AN INCREMENT
00464  M01S00427.fsedata +++|*         IS CHOSEN FOR NUMBERING OF THE LINES TO BE ADDED.
00465  M01S00428.fsedata +++|*
00466  M01S00429.fsedata +++|*         ENTRY  CURFILE - WHICH FILE BRACKET.
00467  M01S00430.fsedata +++|*                NUMBERED[CURFILE] - WHETHER TO DO ANYTHING.
00468  M01S00431.fsedata +++|*                CURRENT - LINE AFTER WHICH TO ADD BLOCK.
00469  M01S00432.fsedata +++|*                DINCR - DEFAULT NUMBERING INCREMENT.
00470  M01S00433.fsedata +++|*                LINPTR3 - TARGET, SHOULD EQUAL CURRENT.
00471  M01S00434.fsedata +++|*                LINPTR1, LINPTR2 - INDICATE SIZE OF BLOCK.
00472  M01S00435.fsedata +++|*                LIMIT - ALSO INDICATES SIZE OF BLOCK.
00473  M01S00436.fsedata +++|*                LINNUM3 - SEQUENCE VALUE AT TARGET.
00474  M01S00437.fsedata +++|*                BOTF(CURFILE) - BOUNDS.
00475  M01S00438.fsedata +++|*
00476  M01S00439.fsedata +++|*         EXIT   VIA ERRJUMP IF IT CANNOT BE DONE.
00477  M01S00440.fsedata +++|*                INCR - NEW SEQUENCING INCREMENT.
00478  M01S00441.fsedata +++|*                LINENO - FIRST SEQUENCE MINUS INCR.
00479  M01S00442.fsedata +++|*
00480  M01S00443.fsedata +++|*         CALLS  GETLNUM, PUSH, FWDNUM, POP, MIN, MAX.
00481  M01S00444.fsedata +++|*
00482  M01S00445.fsedata +++|*         USES   LINNUM1, LINNUM2, LCOUNT.
00483  M01S00446.fsedata +++|#
00484  M01S00447.fsedata +++|
00485  M01S00448.fsedata +++|  IF NUMBERED[CURFILE] NQ 0 THEN
00486  M01S00449.fsedata +++|    BEGIN
00487  M01S00450.fsedata +++|    GETLNUM;
00488  M01S00451.fsedata +++|    IF WIDTHFOUND LQ 0 THEN
00489  M01S00452.fsedata +++|      BEGIN
00490  M01S00453.fsedata +++|      PUSH;
00491  M01S00454.fsedata +++|      BAKNUM;
00492  M01S00455.fsedata +++|      POP;
00493  M01S00456.fsedata +++|      END
00494  M01S00457.fsedata +++|    LINNUM1=MIN(LINNUM3,NINES);
00495  M01S00458.fsedata +++|    LINNUM1=MAX(LINNUM1,LINENO);
00496  M01S00459.fsedata +++|    IF CURRENT GQ BOTF(CURFILE)-1 THEN LINNUM2=NINES;
00497  M01S00460.fsedata +++|    ELSE
00498  M01S00461.fsedata +++|      BEGIN
00499  M01S00462.fsedata +++|      PUSH;
00500  M01S00463.fsedata +++|      FWDNUM;
00501  M01S00464.fsedata +++|      LINNUM2=LINENO;
00502  M01S00465.fsedata +++|      POP;
00503  M01S00466.fsedata +++|      END
00504  M01S00467.fsedata +++|    LINNUM2=MAX(LINNUM2,LINNUM1+1);
00505  M01S00468.fsedata +++|    LINNUM2=MIN(LINNUM2,NINES+1);
00506  M01S00469.fsedata +++|    LCOUNT=MIN(LIMIT,ABS(LINPTR2-LINPTR1)+1);    # NEEDED  #
00507  M01S00470.fsedata +++|    GETLNUM;
00508  M01S00471.fsedata +++|    IF LINNUM1 GR LINENO THEN        # USER SPECIFIED START #
00509  M01S00472.fsedata +++|      BEGIN
00510  M01S00473.fsedata +++|      IF LCOUNT GR LINNUM2-LINNUM1
00511  M01S00474.fsedata +++|        THEN ERRJUMP("NOT ENOUGH ROOM FOR INSERTION$");
00512  M01S00475.fsedata +++|      INCR=(LINNUM2-LINNUM1)/LCOUNT;
00513  M01S00476.fsedata +++|      INCR=MAX(INCR,1);
00514  M01S00477.fsedata +++|      INCR=MIN(INCR,DINCR);
00515  M01S00478.fsedata +++|      LINENO=LINNUM1-INCR;
00516  M01S00479.fsedata +++|      END
00517  M01S00480.fsedata +++|    ELSE                             # COMPUTED START #
00518  M01S00481.fsedata +++|      BEGIN
00519  M01S00482.fsedata +++|      IF LCOUNT GQ LINNUM2-LINNUM1
00520  M01S00483.fsedata +++|        THEN ERRJUMP("NOT ENOUGH ROOM FOR INSERTION$");
00521  M01S00484.fsedata +++|      INCR=(LINNUM2-LINNUM1)/(LCOUNT+1);
00522  M01S00485.fsedata +++|      INCR=MAX(INCR,1);
00523  M01S00486.fsedata +++|      INCR=MIN(INCR,DINCR);
00524  M01S00487.fsedata +++|      LINENO=LINNUM1;
00525  M01S00488.fsedata +++|      END
00526  M01S00489.fsedata +++|    END
00527  M01S00490.fsedata +++|  IOEND                       # OF FITNUM         #
00528  M01S00491.fsedata +++|
00529  M01S00492.fsedata +++|
00530  M01S00493.fsedata +++|PROC SPLICE;
00531  M01S00494.fsedata +++|  IOBEGIN(SPLICE)
00532  M01S00495.fsedata +++|#
00533  M01S00496.fsedata +++|**        SPLICE - SPLICE PORTIONS OF LINES IN WORKFILE.
00534  M01S00497.fsedata +++|*
00535  M01S00498.fsedata +++|*         SPLICE CONCATENATES TWO ADJACENT LINES IN THE FILE.  THIS
00536  M01S00499.fsedata +++|*         ROUTINE IS DESIGNED TO BE EXECUTED AFTER DORANGE PROCESSING,
00537  M01S00500.fsedata +++|*         AS IT NO-OPS FOR ONE-LINE RANGES.  IT ALSO DELETES IN THE
00538  M01S00501.fsedata +++|*         CASE THAT THE SPLICED LINE PAIR IS OF ZERO LENGTH.
00539  M01S00502.fsedata +++|*
00540  M01S00503.fsedata +++|*         ENTRY  LIN - LINE IMAGE FOR SECOND LINE.
00541  M01S00504.fsedata +++|*                CURFILE, CURRENT - ADDRESS OF SECOND LINE.
00542  M01S00505.fsedata +++|*                CHRPTR3 - IGNORED.
00543  M01S00506.fsedata +++|*                FIRSTRANGE, LASTRANGE - WHETHER AT BOUNDS OF RANGE.
00544  M01S00507.fsedata +++|*                    (AS LEFT OVER FROM DORANGE)
00545  M01S00508.fsedata +++|*
00546  M01S00509.fsedata +++|*         EXIT   CHRPTR3 - UNCHANGED.
00547  M01S00510.fsedata +++|*
00548  M01S00511.fsedata +++|*         CALLS  BAKZ, PUSHTEMP, POPTEMP, DOJOIN, DELX, LENGTH.
00549  M01S00512.fsedata +++|*
00550  M01S00513.fsedata +++|*         USES   (WITH RESTORATION) - TEMP, CHRPTR3.
00551  M01S00514.fsedata +++|#
00552  M01S00515.fsedata +++|  IF NOT (FIRSTRANGE AND LASTRANGE) THEN
00553  M01S00516.fsedata +++|    BEGIN                   # MULTIPLE STUBS TO MERGE     #
00554  M01S00517.fsedata +++|    BAKZ;                  # TO CUT-DOWN FIRST LINE      #
00555  M01S00518.fsedata +++|    PUSHTEMP;
00556  M01S00519.fsedata +++|    TEMP=CHRPTR3;
00557  M01S00520.fsedata +++|    CHRPTR3=0;             # ASSURE DOJOIN IS SIMPLE     #
Line S00521 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000056
Seq #  *Modification Id* Act 
----------------------------+
00558  M02S00521.@000056 ---|    DOJOIN;                # ADD ON CUT-DOWN LAST LINE   #
00559  M01S00001.@000056 +++|    DOJOIN(0);             # ADD ON CUT-DOWN LAST LINE   #
00560  M01S00522.fsedata +++|    CHRPTR3=TEMP;          # RESTORE CHRPTR3   #
00561  M01S00523.fsedata +++|    POPTEMP;
00562  M01S00524.fsedata +++|    END
00563  M01S00525.fsedata +++|  # DELETE MERGED LINE-PAIR IFF TOTALLY CUT DOWN #
00564  M01S00526.fsedata +++|  IF LENGTH(LIN) EQ 0 THEN
00565  M01S00527.fsedata +++|    BEGIN
00566  M01S00528.fsedata +++|    DELX;
00567  M01S00529.fsedata +++|    IF CURRENT GR TOPF(CURFILE) THEN BAKZ;
00568  M01S00530.fsedata +++|    END
00569  M01S00531.fsedata +++|  IOEND                       # OF SPLICE         #
00570  M01S00532.fsedata +++|
00571  M01S00533.fsedata +++|
00572  M01S00534.fsedata +++|PROC MAKEPAGE(PAGSIZ,FILEPARM);  # COMPUTE PAGE BOUNDARIES     #
00573  M01S00535.fsedata +++|  BEGIN
00574  M01S00536.fsedata +++|#
00575  M01S00537.fsedata +++|**        MAKEPAGE - COMPUTE BOUNDS FOR SECTION OF FILE.
00576  M01S00538.fsedata +++|*
00577  M01S00539.fsedata +++|*         MAKEPAGE IS USED BY THE VIEW COMMAND IN LINE MODE TO
00578  M01S00540.fsedata +++|*         DETERMINE THE SECTION OF THE FILE TO BE PRINTED, BASED
00579  M01S00541.fsedata +++|*         ON RECENT USAGE OF VIEW COMMANDS.  THE SCANNER IS CALLED
00580  M01S00542.fsedata +++|*         BEFORE MAKEPAGE.
00581  M01S00543.fsedata +++|*
00582  M01S00544.fsedata +++|*         ENTRY  LINCTR - NOMINAL ADDRESS TO PRINT.
00583  M01S00545.fsedata +++|*                PAGSIZ - DESIRED SIZE OF VIEW AREA.
00584  M01S00546.fsedata +++|*                FILEPARM - WHICH FILE BRACKET.
00585  M01S00547.fsedata +++|*                FORWARD, BACKWARD - FROM SCANNER.
00586  M01S00548.fsedata +++|*                PAGELAST - WHETHER LAST COMMAND WAS VIEW ALSO.
00587  M01S00549.fsedata +++|*                REGLINE[RNGTOPREG], REGLINE[RNGBOTREG] - LAST RANGE
00588  M01S00550.fsedata +++|*                    PRINTED IF PAGELAST IS TRUE.
00589  M01S00551.fsedata +++|*
00590  M01S00552.fsedata +++|*         EXIT   LINPTR1, LINPTR2 - COMPUTED BOUNDARIES.
00591  M01S00553.fsedata +++|*                LINCTR - FORCED TO FIT IF NOT ALREADY.
00592  M01S00554.fsedata +++|*
00593  M01S00555.fsedata +++|*         CALLS  WINDOLIN.
00594  M01S00556.fsedata +++|#
00595  M01S00557.fsedata +++|  ITEM PAGSIZ, FILEPARM;
00596  M01S00558.fsedata +++|
00597  M01S00559.fsedata +++|  IF FORWARD THEN
00598  M01S00560.fsedata +++|    BEGIN
00599  M01S00561.fsedata +++|    IF PAGELAST THEN LINPTR1=REGLINE[RNGBOTREG];
00600  M01S00562.fsedata +++|    ELSE LINPTR1=LINCTR;
00601  M01S00563.fsedata +++|    END
00602  M01S00564.fsedata +++|  ELSE IF BACKWARD THEN
00603  M01S00565.fsedata +++|    BEGIN
00604  M01S00566.fsedata +++|    IF PAGELAST THEN LINPTR1=REGLINE[RNGTOPREG]-PAGSIZ+1;
00605  M01S00567.fsedata +++|    ELSE LINPTR1=LINCTR-PAGSIZ+1;
00606  M01S00568.fsedata +++|    END
00607  M01S00569.fsedata +++|  ELSE LINPTR1=LINCTR-(PAGSIZ/2);
00608  M01S00570.fsedata +++|
00609  M01S00571.fsedata +++|  WINDOLIN(LINPTR1,FILEPARM);         # TO KEEP IN BOUNDS #
00610  M01S00572.fsedata +++|
00611  M01S00573.fsedata +++|  LINPTR2=LINPTR1+PAGSIZ-1;
00612  M01S00574.fsedata +++|  WINDOLIN(LINPTR2,FILEPARM);         # TO KEEP IN BOUNDS #
00613  M01S00575.fsedata +++|
00614  M01S00576.fsedata +++|  IF LINCTR LS LINPTR1 OR LINCTR GR LINPTR2 THEN
00615  M01S00577.fsedata +++|    BEGIN
00616  M01S00578.fsedata +++|    IF BACKWARD THEN LINCTR=LINPTR1;
00617  M01S00579.fsedata +++|    ELSE LINCTR=LINPTR2;
00618  M01S00580.fsedata +++|    END
00619  M01S00581.fsedata +++|  WINDOLIN(LINCTR,FILEPARM);  # MERELY AS STANDARD FOR CMD SKIP       #
00620  M01S00582.fsedata +++|
00621  M01S00583.fsedata +++|  END                         # OF MAKEPAGE       #
00622  M01S00584.fsedata +++|
00623  M01S00585.fsedata +++|
00624  M01S00586.fsedata +++|PROC SETMARK(POSITION,CURSOR);
00625  M01S00587.fsedata +++|  BEGIN                      # START OF SETMARK #
00626  M01S00588.fsedata +++|#
00627  M01S00589.fsedata +++|**        SETMARK - SET BOTH OR SECOND MARKER REGISTERS.
00628  M01S00590.fsedata +++|*
00629  M01S00591.fsedata +++|*         SETMARK IS CALLED TO SET MARKER REGISTERS.  IF NO OR BOTH
00630  M01S00592.fsedata +++|*         MARKERS ARE ALREADY FILLED, WE START OVER AND SET THE
00631  M01S00593.fsedata +++|*         FIRST ONE.  IF THE FIRST HAS BEEN PREVIOUSLY SET, WE
00632  M01S00594.fsedata +++|*         SET THE SECOND ONE.  IF THE FILE ASSOCIATION HAS CHANGED
00633  M01S00595.fsedata +++|*         BETWEEN SETTING THE FIRST AND SECOND, WE START OVER AND
00634  M01S00596.fsedata +++|*         SET THE FIRST ONE.  ANY TIME WE SET THE FIRST ONE, WE
00635  M01S00597.fsedata +++|*         ALSO DEFAULT THE SECOND ONE TO MATCH THE FIRST.
00636  M01S00598.fsedata +++|*
00637  M01S00599.fsedata +++|*         ENTRY  POSITION - LINE ADDRESS TO MARK.
00638  M01S00600.fsedata +++|*                CURSOR - HORIZONTAL CURSOR POSITION TO MARK.
00639  M01S00601.fsedata +++|*                NUMMARKS - NUMBER OF PREVIOUS MARKS.
00640  M01S00602.fsedata +++|*                CURFILE - FILE BRACKET FOR POSITION AND CURSOR.
00641  M01S00603.fsedata +++|*                FDLF(CURFILE) - SETUP.
00642  M01S00604.fsedata +++|*                MRKFILE[0] - SETUP IF NUMMARKS IS ONE.
00643  M01S00605.fsedata +++|*
00644  M01S00606.fsedata +++|*         EXIT   NUMMARKS - UPDATED.
00645  M01S00607.fsedata +++|*                REGLINE[MARKREG] - SETUP IF FIRST MARK SET.
00646  M01S00608.fsedata +++|*                REGLINE[MARKREG+1] - SETUP IF SECOND MARK SET.
00647  M01S00609.fsedata +++|*                MRKFILE[1-2] - SETUP.
00648  M01S00610.fsedata +++|*                MRKCHAR[1-2] - SETUP.
00649  M01S00611.fsedata +++|*
00650  M01S00612.fsedata +++|*         CALLS  PAINTMARKS.
00651  M01S00613.fsedata +++|#
00652  M01S00614.fsedata +++|  ITEM POSITION, CURSOR;
00653  M01S00615.fsedata +++|
00654  M01S00616.fsedata +++|  IF (NUMMARKS GQ 2) OR
00655  M01S00617.fsedata +++|    (NUMMARKS EQ 1 AND MRKFILE[0] NQ FDLF(CURFILE)) THEN
00656  M01S00618.fsedata +++|    BEGIN
00657  M01S00619.fsedata +++|    PAINTMARKS(3);
00658  M01S00620.fsedata +++|    NUMMARKS=0;
00659  M01S00621.fsedata +++|    END
00660  M01S00622.fsedata +++|  REGLINE[MARKREG+NUMMARKS]=POSITION;
00661  M01S00623.fsedata +++|  REGLINE[MARKTOP+NUMMARKS]=TOPF(CURFILE);
00662  M01S00624.fsedata +++|  MRKFILE[NUMMARKS]=FDLF(CURFILE);
00663  M01S00625.fsedata +++|  MRKCHAR[NUMMARKS]=CURSOR;
00664  M01S00626.fsedata +++|  NUMMARKS=NUMMARKS+1;
00665  M01S00627.fsedata +++|  IF NUMMARKS EQ 2 THEN
00666  M01S00628.fsedata +++|    BEGIN
00667  M01S00629.fsedata +++|    IF REGLINE[MARKREG] GR POSITION
00668  M01S00630.fsedata +++|      OR (REGLINE[MARKREG] EQ POSITION AND MRKCHAR[0] GR CURSOR) THEN
00669  M01S00631.fsedata +++|      BEGIN
00670  M01S00632.fsedata +++|      REGLINE[MARKREG] = = REGLINE[MARKREG+1];
00671  M01S00633.fsedata +++|      REGLINE[MARKTOP] = = REGLINE[MARKTOP+1];
00672  M01S00634.fsedata +++|      MRKFILE[0] = = MRKFILE[1];
00673  M01S00635.fsedata +++|      MRKCHAR[0] = = MRKCHAR[1];
00674  M01S00636.fsedata +++|      END
00675  M01S00637.fsedata +++|    END
00676  M01S00638.fsedata +++|  ELSE
00677  M01S00639.fsedata +++|    BEGIN
00678  M01S00640.fsedata +++|    REGLINE[MARKREG+1]=REGLINE[MARKREG];
00679  M01S00641.fsedata +++|    REGLINE[MARKTOP+1]=REGLINE[MARKTOP];
00680  M01S00642.fsedata +++|    MRKFILE[1]=MRKFILE[0];
00681  M01S00643.fsedata +++|    MRKCHAR[1]=MRKCHAR[0];
00682  M01S00644.fsedata +++|    END
00683  M01S00645.fsedata +++|  PAINTMARKS(1);
00684  M01S00646.fsedata +++|
00685  M01S00647.fsedata +++|  END                        # OF SETMARK         #
00686  M01S00648.fsedata +++|
00687  M01S00649.fsedata +++|
00688  M01S00650.fsedata +++|PROC FORCEFILE;
00689  M01S00651.fsedata +++|  IOBEGIN(FORCEFILE)
00690  M01S00652.fsedata +++|#
00691  M01S00653.fsedata +++|**        FORCEFILE - GET FILE INTO SOME BRACKET.
00692  M01S00654.fsedata +++|*
00693  M01S00655.fsedata +++|*         FORCE FILE SPECIFIED BY READNAM TO BE OPEN FOR SYNTAX
00694  M01S00656.fsedata +++|*         SCANNERS WHICH NEED TO STUDY ITS BRACKETING.  RETURN
00695  M01S00657.fsedata +++|*         FILNUM AS THE BRACKET IN WHICH THE FILE IS OPEN.  WE USE
00696  M01S00658.fsedata +++|*         CURFILE AS THE BRACKET ONLY IF THE CURRENT FILE IS ONE AND
00697  M01S00659.fsedata +++|*         THE SAME AS THE REQUESTED FILE.  IN ALL OTHER CASES WE USE
00698  M01S00660.fsedata +++|*         THE OPPOSITE BRACKET NUMBER.
00699  M01S00661.fsedata +++|*
00700  M01S00662.fsedata +++|*         ENTRY  CURFILE - BRACKET WHICH CANNOT BE DISTURBED.
00701  M01S00663.fsedata +++|*                READNAM - FILE WE MUST GET OPENED.
00702  M01S00664.fsedata +++|*
00703  M01S00665.fsedata +++|*         EXIT   FILNUM - THE BRACKET INTO WHICH READNAM IS OPEN.
00704  M01S00666.fsedata +++|*
00705  M01S00667.fsedata +++|*         CALLS  PUSH, OPENFILE, POP.
00706  M01S00668.fsedata +++|*
00707  M01S00669.fsedata +++|*         USES   CHARPARM, GETPARM.
00708  M01S00670.fsedata +++|#
00709  M01S00671.fsedata +++|  FILNUM=CURFILE;
00710  M01S00672.fsedata +++|  IF READNAM EQ PADNAME(FILENAM[FILNUM]) THEN IORET
00711  M01S00673.fsedata +++|  FILNUM=FILNUM LXR 3;       # FLIP BRACKET AND RESCAN     #
00712  M01S00674.fsedata +++|  IF READNAM NQ PADNAME(FILENAM[FILNUM]) THEN
00713  M01S00675.fsedata +++|    BEGIN                     # OPEN INTO OTHER BRACKET     #
00714  M01S00676.fsedata +++|    CHARPARM=0;
00715  M01S00677.fsedata +++|    GETPARM=0;
00716  M01S00678.fsedata +++|    PUSH;
00717  M01S00679.fsedata +++|    OPENFILE;
00718  M01S00680.fsedata +++|    POP;
00719  M01S00681.fsedata +++|    END
00720  M01S00682.fsedata +++|  IOEND                       # OF FORCEFILE      #
00721  M01S00683.fsedata +++|
00722  M01S00684.fsedata +++|
00723  M01S00685.fsedata +++|PROC REL2ABS(LINEPTR,FILEPTR);
00724  M01S00686.fsedata +++|  BEGIN
00725  M01S00687.fsedata +++|#
00726  M01S00688.fsedata +++|**        REL2ABS - CONVERT RELATIVE LINE ADDRESS TO ABSOLUTE.
00727  M01S00689.fsedata +++|*
00728  M01S00690.fsedata +++|*         REL2ABS TAKES A LINE ADDRESS WHICH IS RELATIVE TO ITS
00729  M01S00691.fsedata +++|*         WORKFILE FILE IMAGE, AND CONVERTS TO AN ABSOLUTE WORKFILE
00730  M01S00692.fsedata +++|*         LINE ADDRESS, FOR ONE OF THE CURRENTLY BRACKETED FILES.
00731  M01S00693.fsedata +++|*
00732  M01S00694.fsedata +++|*         ENTRY  LINEPTR - RELATIVE LINE ADDRESS.
00733  M01S00695.fsedata +++|*                FILEPTR - WHICH BRACKET.
00734  M01S00696.fsedata +++|*                CURFILE - WHICH BRACKET IF FILEPTR IS ZERO.
00735  M01S00697.fsedata +++|*                TOPF() - SETUP.
00736  M01S00698.fsedata +++|*
00737  M01S00699.fsedata +++|*         EXIT   LINEPTR - CONVERTED.
00738  M01S00700.fsedata +++|#
00739  M01S00701.fsedata +++|  ITEM LINEPTR, FILEPTR;
00740  M01S00702.fsedata +++|  IF LINEPTR LS 0 THEN RETURN;
00741  M01S00703.fsedata +++|  IF FILEPTR EQ 0 THEN LINEPTR=LINEPTR+TOPF(CURFILE);
00742  M01S00704.fsedata +++|  ELSE LINEPTR=LINEPTR+TOPF(FILEPTR);
00743  M01S00705.fsedata +++|  END                         # OF REL2ABS        #
00744  M01S00706.fsedata +++|
00745  M01S00707.fsedata +++|
00746  M01S00708.fsedata +++|PROC CHECKFILPTR;
00747  M01S00709.fsedata +++|  IOBEGIN(CHECKFILPTR)
00748  M01S00710.fsedata +++|#
00749  M01S00711.fsedata +++|**        CHECKFILPTR - CONVERT DIRECTORY ADDRESS TO BRACKET.
00750  M01S00712.fsedata +++|*
00751  M01S00713.fsedata +++|*         CHECKFILPTR CONVERTS (MATCHES) A FILE DIRECTORY LINE
00752  M01S00714.fsedata +++|*         ADDRESS INTO A BRACKET NUMBER.  IT IS A NO-OP FOR
00753  M01S00715.fsedata +++|*         ANY PARAMETER VALUE OF ZERO.  IT OPENS THE FILE INTO
00754  M01S00716.fsedata +++|*         THE NON-CURRENT BRACKET IF NOT ALREADY BRACKETED.
00755  M01S00717.fsedata +++|*
00756  M01S00718.fsedata +++|*         ENTRY  FILPTR1 - FDLF POINTER OR ZERO.
00757  M01S00719.fsedata +++|*                FDLF(1-2) - SETUP.
00758  M01S00720.fsedata +++|*                CURFILE - CURRENT (NON-PREFERRED) BRACKET.
00759  M01S00721.fsedata +++|*
00760  M01S00722.fsedata +++|*         EXIT   FILPTR1 - CONVERTED TO BRACKET ORDINAL.
00761  M01S00723.fsedata +++|*
00762  M01S00724.fsedata +++|*         CALLS  PUSH, POSZ, SCANFDL, FORCEFILE, POP.
00763  M01S00725.fsedata +++|*
00764  M01S00726.fsedata +++|*         USES   READNAM, FILNUM.
00765  M01S00727.fsedata +++|#
00766  M01S00728.fsedata +++|  IF FILPTR1 EQ 0 THEN IORET
00767  M01S00729.fsedata +++|  ELSE IF FILPTR1 EQ FDLF(1) AND FILPTR1 EQ FDLF(2)
00768  M01S00730.fsedata +++|    THEN FILPTR1=CURFILE;
00769  M01S00731.fsedata +++|  ELSE IF FILPTR1 EQ FDLF(1) THEN FILPTR1=1;
00770  M01S00732.fsedata +++|  ELSE IF FILPTR1 EQ FDLF(2) THEN FILPTR1=2;
00771  M01S00733.fsedata +++|  ELSE
00772  M01S00734.fsedata +++|    BEGIN
00773  M01S00735.fsedata +++|    PUSH;
00774  M01S00736.fsedata +++|    POSZ(FILPTR1);
00775  M01S00737.fsedata +++|    SCANFDL(READNAM);
00776  M01S00738.fsedata +++|    FORCEFILE;
00777  M01S00739.fsedata +++|    FILPTR1=FILNUM;
00778  M01S00740.fsedata +++|    POP;
00779  M01S00741.fsedata +++|    END
00780  M01S00742.fsedata +++|  IOEND                    # OF CHECKFILPTR   #
00781  M01S00743.fsedata +++|
00782  M01S00744.fsedata +++|
00783  M01S00745.fsedata +++|PROC EXTENDFILE(BOOL);
00784  M01S00746.fsedata +++|  BEGIN
00785  M01S00747.fsedata +++|#
00786  M01S00748.fsedata +++|*         EXTENDFILE - EXTEND FILE FOR INSERT/COPY/MOVE.
00787  M01S00749.fsedata +++|*
00788  M01S00750.fsedata +++|*         ENTRY  EXTENDSIZE - HOW MUCH CURSOR BEYOND END OF FILE.
00789  M01S00751.fsedata +++|*                PROCESSNDX - WHETHER/WHICH INSERT/COPY/MOVE.
00790  M01S00752.fsedata +++|*                BOTF(FILNUM), FILNUM - END OF FILE.
00791  M01S00753.fsedata +++|*                LINPTR1, LINPTR2 - RANGE BOUNDARIES.
00792  M01S00754.fsedata +++|*                BOOL - WHETHER LINPTR1, LINPTR2 SHOULD RELOCATE.
00793  M01S00755.fsedata +++|*
00794  M01S00756.fsedata +++|*         EXIT   EXTENDSIZE - ZERO IF FILE EXTENDED.
00795  M01S00757.fsedata +++|*                THISEXTEND - FORMER VALUE OF EXTENDSIZE.
00796  M01S00758.fsedata +++|*                LINPTR1, LINPTR2, BOTF(FILNUM) - RELOCATED.
00797  M01S00759.fsedata +++|*
00798  M01S00760.fsedata +++|*         CALLS  INSX, POSZ.
00799  M01S00761.fsedata +++|*
00800  M01S00762.fsedata +++|*         USES   CURFILE(RESTORED).
00801  M01S00763.fsedata +++|*
00802  M01S00764.fsedata +++|*         NOTE   EXTENDFILE IS OPERATIVE ONLY IN SINGLE USER VERSION.
00803  M01S00765.fsedata +++|*                FOR MULTI, SCANNER MUST ASSURE THIS IS NO-OP.
00804  M01S00766.fsedata +++|#
00805  M01S00767.fsedata +++|  ITEM BOOL B;
00806  M01S00768.fsedata +++|  CONTROL IFEQ SINGLE,1;
00807  M01S00769.fsedata +++|    IF EXTENDSIZE GR 0 THEN
00808  M01S00770.fsedata +++|      BEGIN
00809  M01S00771.fsedata +++|      IF PROCESSNDX EQ KEYST"CCMD" OR PROCESSNDX EQ KEYST"ICMD"
00810  M01S00772.fsedata +++|        OR PROCESSNDX EQ KEYST"MCMD" THEN
00811  M01S00773.fsedata +++|        BEGIN                        # EXTEND FILE TO TARGET #
00812  M01S00774.fsedata +++|        CURFILE = = FILNUM;          # PRESERVE AND FLIPFLOP #
00813  M01S00775.fsedata +++|        POSZ(BOTF(CURFILE)-1);
00814  M01S00776.fsedata +++|        LINE[0]=NULLIN;
00815  M01S00777.fsedata +++|        FOR LINCTR=1 STEP 1 UNTIL EXTENDSIZE DO
00816  M01S00778.fsedata +++|          BEGIN                      # EXTEND FILE TO TARGET ADDR #
00817  M01S00779.fsedata +++|          # MANUALLY RELOCATE LINPTR1, LINPTR2 AS NEEDED #
00818  M01S00780.fsedata +++|          IF BOOL THEN
00819  M01S00781.fsedata +++|            BEGIN
00820  M01S00782.fsedata +++|            IF CURRENT LS LINPTR1 THEN LINPTR1=LINPTR1+1;
00821  M01S00783.fsedata +++|            IF CURRENT LS LINPTR2 THEN LINPTR2=LINPTR2+1;
00822  M01S00784.fsedata +++|            END
00823  M01S00785.fsedata +++|          INSX;                      # EXTEND FILE #
00824  M01S00786.fsedata +++|          END
00825  M01S00787.fsedata +++|        CURF(CURFILE)=CURRENT;
00826  M01S00788.fsedata +++|        THISEXTEND=EXTENDSIZE;
00827  M01S00789.fsedata +++|        EXTENDSIZE=0;
00828  M01S00790.fsedata +++|        CURFILE = = FILNUM;
00829  M01S00791.fsedata +++|        END
00830  M01S00792.fsedata +++|      END
00831  M01S00793.fsedata +++|    CONTROL FI;
00832  M01S00794.fsedata +++|  END                                # OF EXTENDFILE #
00833  M01S00795.fsedata +++|PAGE                         # TOKEN -- SCANS COMMAND SYNTAX         #
00834  M01S00796.fsedata +++|
00835  M01S00797.fsedata +++|PROC TOKEN;
00836  M01S00798.fsedata +++|  BEGIN
00837  M01S00799.fsedata +++|#
00838  M01S00800.fsedata +++|**        TOKEN - LOOK FOR NEXT SYNTAX ELEMENT.
00839  M01S00801.fsedata +++|*
00840  M01S00802.fsedata +++|*         TOKEN SCANS THE COMMAND TEXT FROM SOME CURRENT POSITION
00841  M01S00803.fsedata +++|*         UNTIL SOMETHING IS SEEN.  WE EAT BLANKS, AND MUST
00842  M01S00804.fsedata +++|*         EVENTUALLY REACH SOME DELIMITER OR A CONSTANT (INTEGER) OR
00843  M01S00805.fsedata +++|*         A KEYWORD.  IF IT IS A CONSTANT, WE DECODE ITS WHOLE VALUE
00844  M01S00806.fsedata +++|*         AND LEAVE THE CURRENT POSITION JUST AFTER THE LAST DIGIT.
00845  M01S00807.fsedata +++|*         IF IT IS A KEYWORD, WE GATHER UP ITS WHOLE TEXT, LEAVE THE
00846  M01S00808.fsedata +++|*         CURRENT POSITION JUST AFTER THE LAST LETTER, AND SEARCH
00847  M01S00809.fsedata +++|*         THE COMMAND TABLES FOR A MATCH, SETTING VARIOUS VARIABLES
00848  M01S00810.fsedata +++|*         TO SHOW THE RESULT OF THE MATCH.
00849  M01S00811.fsedata +++|*
00850  M01S00812.fsedata +++|*         WE ARE CALLED BY THE OUTER LOGIC OF PROCESS TO GLEAN OUT
00851  M01S00813.fsedata +++|*         COMMAND KEYWORDS.  WE ARE CALLED BY ALL SORTS OF PEOPLE,
00852  M01S00814.fsedata +++|*         INCLUDING A VARIETY OF COMMAND PROCESSING ROUTINES, TO
00853  M01S00815.fsedata +++|*         ADVANCE THE SYNTAX SCAN TO COMPLETE THE COMMAND.
00854  M01S00816.fsedata +++|*
00855  M01S00817.fsedata +++|*         ENTRY  SCANPOS - WHERE TO SCAN IN CMDLIN.
00856  M01S00818.fsedata +++|*                CMDLIN - COMMAND TEXT, INTERNAL LINE IMAGE.
00857  M01S00819.fsedata +++|*                SEARCHTYPE - WHICH IF ANY KEYWORD TABLE TO MATCH.
00858  M01S00820.fsedata +++|*
00859  M01S00821.fsedata +++|*         EXIT   TOKENPOS - WHERE WE FOUND SOMETHING.
00860  M01S00822.fsedata +++|*                TOKENTYPE - CLASSIFICATION OF TOKEN.
00861  M01S00823.fsedata +++|*                TOKENVAL - BINARY VALUE IF NUMERIC.
00862  M01S00824.fsedata +++|*                TOKENSYM - KEYWORD IF ALPHA.
00863  M01S00825.fsedata +++|*                TOKENCHAR - FIRST OR ONLY CHARACTER OF TOKEN.
00864  M01S00826.fsedata +++|*                TOKENLEN - NUMBER OF CHARACTERS IN TOKEN.
00865  M01S00827.fsedata +++|*                KEYWDNDX - WHICH KEYWORD MATCHED IT.
00866  M01S00828.fsedata +++|*                SCANPOS - INCREMENTED BEYOND TOKEN.
00867  M01S00829.fsedata +++|*                CMDLIN - ANY MICROS ARE EXPANDED.
00868  M01S00830.fsedata +++|*
00869  M01S00831.fsedata +++|*         MACROS GETCHAR.
00870  M01S00832.fsedata +++|*
00871  M01S00833.fsedata +++|*         CALLS  LENGTH, EXPAND, DSPLCOD.
00872  M01S00834.fsedata +++|#
00873  M01S00835.fsedata +++|  ITEM TMP1, TMP2, TMP3;
00874  M01S00836.fsedata +++|  ITEM QUIT B;
00875  M01S00837.fsedata +++|  ITEM CMDLEN;
00876  M01S00838.fsedata +++|
00877  M01S00839.fsedata +++|  # TOKENSW MUST MATCH TYPST #
00878  M01S00840.fsedata +++|
00879  M01S00841.fsedata +++|  SWITCH TOKENSW TKDIGIT, TKPLUS, TKMINUS, TKDELIMIT,
00880  M01S00842.fsedata +++|                 TKCOLON, TKPAREN,
00881  M01S00843.fsedata +++|                 TKEQUAL, TKLETTER, TKSEMI, TKEOL, TKOTHER, TKCONTROL;
00882  M01S00844.fsedata +++|
00883  M01S00845.fsedata +++|  # ALPHANUM MUST MATCH KEYWDTYPE VALUES #
00884  M01S00846.fsedata +++|
00885  M01S00847.fsedata +++|  ITEM ALPHANUM=O"42000000000000000000";   # WHICH TYPES ALLOW DIGITS #
00886  M01S00848.fsedata +++|  PAGE                         # START OF TOKEN    #
00887  M01S00849.fsedata +++|
00888  M01S00850.fsedata +++|
00889  M01S00851.fsedata +++|TOKENSTART:                  # FIRST EAT ANY BLANKS        #
00890  M01S00852.fsedata +++|
00891  M01S00853.fsedata +++|  CMDLEN=LENGTH(CMDLIN);
00892  M01S00854.fsedata +++|  GETCHAR(CMDLINE,SCANPOS,TMP1);
00893  M01S00855.fsedata +++|  WHYLE TMP1 EQ CBLANK DO
00894  M01S00856.fsedata +++|    BEGIN
00895  M01S00857.fsedata +++|    SCANPOS=SCANPOS+1;
00896  M01S00858.fsedata +++|    GETCHAR(CMDLINE,SCANPOS,TMP1);
00897  M01S00859.fsedata +++|    END
00898  M01S00860.fsedata +++|  # EAT ONE COMMA              #
00899  M01S00861.fsedata +++|  IF TMP1 EQ CCOMMA THEN SCANPOS=SCANPOS+1;
00900  M01S00862.fsedata +++|  GETCHAR(CMDLINE,SCANPOS,TMP1);
00901  M01S00863.fsedata +++|  WHYLE TMP1 EQ CBLANK DO      # EAT ADDITIONAL BLANKS       #
00902  M01S00864.fsedata +++|    BEGIN
00903  M01S00865.fsedata +++|    SCANPOS=SCANPOS+1;
00904  M01S00866.fsedata +++|    GETCHAR(CMDLINE,SCANPOS,TMP1);
00905  M01S00867.fsedata +++|    END
00906  M01S00868.fsedata +++|
00907  M01S00869.fsedata +++|                               # SET UP TOKEN DESCRIPTORS    #
00908  M01S00870.fsedata +++|                               # DISPATCH FOR TOKEN          #
00909  M01S00871.fsedata +++|  TOKENPOS=SCANPOS;
00910  M01S00872.fsedata +++|  TOKENCHAR=TMP1;
00911  M01S00873.fsedata +++|  IF SCANPOS GQ CMDLEN OR TMP1 EQ CCOMMA THEN TOKENCHAR=CENDLINE;
00912  M01S00874.fsedata +++|  TOKENTYPE=TYPE[TOKENCHAR];
00913  M01S00875.fsedata +++|  SCANPOS=SCANPOS+1;
00914  M01S00876.fsedata +++|  GOTO TOKENSW[TOKENTYPE];
00915  M01S00877.fsedata +++|
00916  M01S00878.fsedata +++|                               # END-OF-LINE AND NULL CASES  #
00917  M01S00879.fsedata +++|TKEOL:  TKEQUAL:  TKPLUS:  TKSEMI:
00918  M01S00880.fsedata +++|TKCOLON: TKDELIMIT: TKPAREN:
00919  M01S00881.fsedata +++|TKOTHER:  TKCONTROL:
00920  M01S00882.fsedata +++|    RETURN;
00921  M01S00883.fsedata +++|
00922  M01S00884.fsedata +++|
00923  M01S00885.fsedata +++|TKMINUS:                # HYPHEN IS SELF IF ALONE, COMMENT IF DOUBLE #
00924  M01S00886.fsedata +++|  GETCHAR(CMDLINE,TOKENPOS+1,TMP1);
00925  M01S00887.fsedata +++|  IF TMP1 EQ CMINUS THEN
00926  M01S00888.fsedata +++|    BEGIN
00927  M01S00889.fsedata +++|    TOKENTYPE=TYPST"EOL";
00928  M01S00890.fsedata +++|    TOKENCHAR=CENDLINE;
00929  M01S00891.fsedata +++|    TOKENPOS=LENGTH(CMDLIN);
00930  M01S00892.fsedata +++|    SCANPOS=TOKENPOS;
00931  M01S00893.fsedata +++|    END
00932  M01S00894.fsedata +++|  RETURN;
00933  M01S00895.fsedata +++|
00934  M01S00896.fsedata +++|
00935  M01S00897.fsedata +++|
00936  M01S00898.fsedata +++|                               # NUMERIC CONSTANT  #
00937  M01S00899.fsedata +++|TKDIGIT:
00938  M01S00900.fsedata +++|    IF B<KEYWDTYPE,1>ALPHANUM NQ 0 THEN GOTO TKLETTER;
00939  M01S00901.fsedata +++|    TOKENVAL=TOKENCHAR-CDIGIT0;
00940  M01S00902.fsedata +++|    QUIT=FALSE;
00941  M01S00903.fsedata +++|    WHYLE NOT QUIT DO
00942  M01S00904.fsedata +++|      BEGIN
00943  M01S00905.fsedata +++|      GETCHAR(CMDLINE,SCANPOS,TMP1);
00944  M01S00906.fsedata +++|      IF TYPE[TMP1] EQ TYPST"DIGIT" AND SCANPOS-TOKENPOS LQ 10 THEN
00945  M01S00907.fsedata +++|        BEGIN
00946  M01S00908.fsedata +++|        TOKENVAL=TOKENVAL*10+TMP1-CDIGIT0;
00947  M01S00909.fsedata +++|        SCANPOS=SCANPOS+1;
00948  M01S00910.fsedata +++|        END
00949  M01S00911.fsedata +++|      ELSE QUIT=TRUE;
00950  M01S00912.fsedata +++|      END
00951  M01S00913.fsedata +++|    RETURN;
00952  M01S00914.fsedata +++|                               # ALPHABETIC KEYWORD          #
00953  M01S00915.fsedata +++|TKLETTER:
00954  M01S00916.fsedata +++|    #   GATHER UP KEYWORD, SUPPRESS CASE AND USE REGULAR CHAR   #
00955  M01S00917.fsedata +++|    TMP1=TOKENCHAR;
00956  M01S00918.fsedata +++|    TOKENLEN=0;
00957  M01S00919.fsedata +++|    QUIT=FALSE;
00958  M01S00920.fsedata +++|    WHYLE NOT QUIT DO
00959  M01S00921.fsedata +++|      BEGIN
00960  M01S00922.fsedata +++|      DSPLCOD(TMP1);
00961  M01S00923.fsedata +++|      IF TOKENLEN LS 10 THEN
00962  M01S00924.fsedata +++|        BEGIN
00963  M01S00925.fsedata +++|        C<TOKENLEN,10-TOKENLEN>TOKENSYM=C<9,1>TMP1;
00964  M01S00926.fsedata +++|        TOKENLEN=TOKENLEN+1;
00965  M01S00927.fsedata +++|        END
00966  M01S00928.fsedata +++|      GETCHAR(CMDLINE,SCANPOS,TMP1);
00967  M01S00929.fsedata +++|      IF TYPE[TMP1] NQ TYPST"LETTER" THEN
00968  M01S00930.fsedata +++|        BEGIN
00969  M01S00931.fsedata +++|        IF TYPE[TMP1] NQ TYPST"DIGIT" OR
00970  M01S00932.fsedata +++|          B<KEYWDTYPE,1>ALPHANUM EQ 0 THEN
00971  M01S00933.fsedata +++|          BEGIN
00972  M01S00934.fsedata +++|          QUIT=TRUE;
00973  M01S00935.fsedata +++|          TEST;
00974  M01S00936.fsedata +++|          END
00975  M01S00937.fsedata +++|        END
00976  M01S00938.fsedata +++|      SCANPOS=SCANPOS+1;
00977  M01S00939.fsedata +++|      END
00978  M01S00940.fsedata +++|
00979  M01S00941.fsedata +++|  # KEYWORD SEARCH #
00980  M01S00942.fsedata +++|
00981  M01S00943.fsedata +++|  KEYWDNDX=-1;
00982  M01S00944.fsedata +++|  IF KEYWDTYPE EQ 0 THEN RETURN;
00983  M01S00945.fsedata +++|
00984  M01S00946.fsedata +++|  MATCHKEY(TMP3);
00985  M01S00947.fsedata +++|
00986  M01S00948.fsedata +++|  IF KEYWDNDX LS 0 THEN RETURN;
00987  M01S00949.fsedata +++|  TMP3=MIN(TMP3,TOKENLEN);
00988  M01S00950.fsedata +++|  SCANPOS=TOKENPOS+TMP3;
00989  M01S00951.fsedata +++|  TOKENLEN=TMP3;
00990  M01S00952.fsedata +++|
00991  M01S00953.fsedata +++|  END                          # OF TOKEN          #
00992  M01S00954.fsedata +++|PAGE                         # SCANNER - UNIVERSAL SYNTAX DRIVER  #
00993  M01S00955.fsedata +++|
00994  M01S00956.fsedata +++|
00995  M01S00957.fsedata +++|PROC SCANNER;
00996  M01S00958.fsedata +++|  IOBEGIN(SCANNER)
00997  M01S00959.fsedata +++|#
00998  M01S00960.fsedata +++|**        SCANNER - MASTER COMMAND SYNTAX SCANNER/DEFAULTER.
00999  M01S00961.fsedata +++|*
01000  M01S00962.fsedata +++|*         SCANNER DRIVES ALL SYNTAX SCANNING FOR THOSE COMMANDS
01001  M01S00963.fsedata +++|*         WHICH HAVE FAIRLY STANDARD SYNTACTICAL RULES AND SEMANTIC
01002  M01S00964.fsedata +++|*         ELEMENTS.  THIS CATEGORY OF COMMANDS INCLUDES ALL WHICH
01003  M01S00965.fsedata +++|*         USE RANGES, LINES, POSITIONS, LIMITS, AND TABS.  OTHER
01004  M01S00966.fsedata +++|*         SYNTAXES SUPPORTED BY SCANNER INCLUDE "FORWARD" AND
01005  M01S00967.fsedata +++|*         "BACKWARD" KEYWORD, I.E., DIRECTION/DEFAULT-RANGE, AND
01006  M01S00968.fsedata +++|*         CHARACTER STRINGS.  ON THE OTHER HAND, SCANNER IS NOT
01007  M01S00969.fsedata +++|*         DESIGNED TO SUPPORT PARSING OF COMMANDS SUCH AS "SET"
01008  M01S00970.fsedata +++|*         WHICH REQUIRE SPECIAL KEYWORDS, ARBITRARY SYMBOL NAMES, OR
01009  M01S00971.fsedata +++|*         INTEGER PARAMETERS.
01010  M01S00972.fsedata +++|*
01011  M01S00973.fsedata +++|*         SCANNER OPERATES AS A LOOP UNTIL END OF COMMAND LINE OR
01012  M01S00974.fsedata +++|*         END OF COMMAND DELIMITER (SEMICOLON), BRANCHING OUT ON A
01013  M01S00975.fsedata +++|*         CASE STATEMENT FOR EACH TOKEN ENCOUNTERED.  VARIOUS SCAN
01014  M01S00976.fsedata +++|*         SUBROUTINES ARE USED HEAVILY.
01015  M01S00977.fsedata +++|*
01016  M01S00978.fsedata +++|*         ENTRY  COMMAND VERB SCANNED, TOKEN ADVANCED.
01017  M01S00979.fsedata +++|*                TOKENPOS - SETUP.
01018  M01S00980.fsedata +++|*                THE FOLLOWING MUST BE DEFAULTED BY CALLER -
01019  M01S00981.fsedata +++|*                    NONDEFAULT, TXTINCMD, BACKWARD, FORWARD,
01020  M01S00982.fsedata +++|*                    FOUND, CURRENT, CURFILE, CURSPLIT.
01021  M01S00983.fsedata +++|*                LIMIT - DEFAULT LIMIT COUNT.  USUALLY -1 TO SHOW
01022  M01S00984.fsedata +++|*                    THAT NORMAL DEFAULTS CAN APPLY.  CAN ALSO BE
01023  M01S00985.fsedata +++|*                    -2 TO SHOW NO DEFAULTS TO BE SUPPLIED.
01024  M01S00986.fsedata +++|*                WHICHLIN - WHICH LINE POINTER VARIABLE EXPECTED.
01025  M01S00987.fsedata +++|*                WHICHSTR - WHICH STRING VARIABLE EXPECTED.
01026  M01S00988.fsedata +++|*                CURCURSOR, OLDCURSOR - RESIDUAL CURSOR POSITIONS.
01027  M01S00989.fsedata +++|*                OLDLINPTR - RESIDUAL LINE POINTER.
01028  M01S00990.fsedata +++|*                EXECNDX - WHICH COMMAND WE ARE PROCESSING.
01029  M01S00991.fsedata +++|*                NUMMARKS - HOW MANY MARKS ARE AVAILABLE.
01030  M01S00992.fsedata +++|*                SCREENMODE - WHETHER SCREEN OR LINE.
01031  M01S00993.fsedata +++|*                TOPF(), TOPS(), BOTS(), ASCII[] - SETUP.
01032  M01S00994.fsedata +++|*                BOTF(), FDLF() - SETUP.
01033  M01S00995.fsedata +++|*
01034  M01S00996.fsedata +++|*         EXIT   LINPTR1,2,3 - SOURCE AND TARGET ADDRESSES.
01035  M01S00997.fsedata +++|*                FILPTR1,2,3 - SOURCE AND TARGET FILE BRACKETS.
01036  M01S00998.fsedata +++|*                CHRPTR1,2,3 - SOURCE AND TARGET CURSORS.
01037  M01S00999.fsedata +++|*                LINNUM1,2,3 - SOURCE AND TARGET SEQUENCES.
01038  M01S01000.fsedata +++|*                LIMIT - REPEAT COUNT.  UNCHANGED IF NO EXPLICIT SYNTAX
01039  M01S01001.fsedata +++|*                    AND DEFAULT WAS -2.
01040  M01S01002.fsedata +++|*                SCANBLOCK, SCANWORD, SCANUPPER - SPECIAL OPTIONS.
01041  M01S01003.fsedata +++|*                SCANHOME - SPECIAL OPTION.
01042  M01S01004.fsedata +++|*                NONDEFAULT - TRUE IF SOMETHING SCANNED.
01043  M01S01005.fsedata +++|*                SCANPOS - ADVANCED BEYOND LAST RECOGNIZABLE SYNTAX.
01044  M01S01006.fsedata +++|*                BACKWARD, FORWARD - POSSIBLY SET.
01045  M01S01007.fsedata +++|*                CHARRANGE - CHARACTER/LINE RANGE BOUNDS.
01046  M01S01008.fsedata +++|*                TXTINCMD - POSSIBLY TRUE.
01047  M01S01009.fsedata +++|*                FOUND - WHETHER SOURCE/TARGET IN BOUNDS.
01048  M01S01010.fsedata +++|*                FDLF(1-2) - DIFFERENT FILES MAY BE OPEN.
01049  M01S01011.fsedata +++|*                CURFILE - FILE TO PROCESS FOR SOURCE RANGE.
01050  M01S01012.fsedata +++|*                PROMPTING - POSSIBLY SET.
01051  M01S01013.fsedata +++|*                LOCSTRING1, LOCSTRING2, CHGSTRING, TTYLIN - POSSIBLY
01052  M01S01014.fsedata +++|*                    FILLED WITH CHARACTER STRINGS IN INTERNAL FORMAT.
01053  M01S01015.fsedata +++|*                TABVECTOR - POSSIBLY REDEFINED.
01054  M01S01016.fsedata +++|*                FIELDNDX, FIELDFLG, FIELDTARGET - POSSIBLY SET.
01055  M01S01017.fsedata +++|*                NUMMARKS - POSSIBLY CLEARED.
01056  M01S01018.fsedata +++|*                EXECNDX - CERTAIN CHANGES POSSIBLE.
01057  M01S01019.fsedata +++|*
01058  M01S01020.fsedata +++|*         USES   ALL TOKENXXXX VARIABLES, WHICHLIN, WHICHDGT, WHICHSTR,
01059  M01S01021.fsedata +++|*                FILNUM, FORCEFIELD, READNAM, FOUNDOTHER.
01060  M01S01022.fsedata +++|*
01061  M01S01023.fsedata +++|*         CALLS  TOKEN, SCNTAB, MAX, SCNLIN, ERRJUMP, SCANSTR,
01062  M01S01024.fsedata +++|*                SCNFILE, FORCEFILE, GETMARK, PAINTMARKS, SCNEOC,
01063  M01S01025.fsedata +++|*                CHECKFILPTR, REL2ABS, WINDOPOS, WINDOLIN, SQUELCH.
01064  M01S01026.fsedata +++|#
01065  M01S01027.fsedata +++|
01066  M01S01028.fsedata +++|  XREF LABEL QQSINGLE;
01067  M01S01029.fsedata +++|
01068  M01S01030.fsedata +++|  # SCANSW MUST MATCH TYPST #
01069  M01S01031.fsedata +++|
01070  M01S01032.fsedata +++|  SWITCH SCANSW SCDIGIT, SCPLUS, SCMINUS, SCDELIMIT,
01071  M01S01033.fsedata +++|                SCCOLON,
01072  M01S01034.fsedata +++|                SCPAREN, SCEQUAL, SCALPHA,
01073  M01S01035.fsedata +++|                SCSEMI, SCEOL, SCOTHER, SCCTRL;
01074  M01S01036.fsedata +++|
01075  M01S01037.fsedata +++|  # KEYMATCH ARRAY MUST MATCH SECTION OF KEYSTR TABLE #
01076  M01S01038.fsedata +++|  # MUST ALSO MATCH SCANKEYSW.                       #
01077  M01S01039.fsedata +++|
01078  M01S01040.fsedata +++|  DEF NUMSCANKEYS #20#;
01079  M01S01041.fsedata +++|
01080  M01S01042.fsedata +++|  ARRAY MATCHKEYS [0:NUMSCANKEYS]; ITEM KEYMATCH C(0,0,10) = [
01081  M01S01043.fsedata +++|    "ALL", "BLANK", "CURRENT", "END", "FIRST", "HOME",
01082  M01S01044.fsedata +++|    "IN", "LAST", "MARK", "NEXT", "PREVIOUS", "QUIET",
01083  M01S01045.fsedata +++|    "REPEAT", "SCREEN", "TO", "UPPER", "WORD", "X", "Y", "Z" ];
01084  M01S01046.fsedata +++|
01085  M01S01047.fsedata +++|  SWITCH SCANKEYSW SKALL, SKBLOCK, SKCURRENT, SKEND, SKFIRST,
01086  M01S01048.fsedata +++|    SKHOME, SKIN, SKLAST, SKMARK, SKNEXT, SKPREVIOUS, SKQUIET,
01087  M01S01049.fsedata +++|    SKREPEAT, SKSCREEN, SKTO, SKUPPER, SKWORD, SKX, SKY, SKZ;
01088  M01S01050.fsedata +++|
01089  M01S01051.fsedata +++|  # FOLLOWING TEMPORARIES MUST BE USED ONLY INSTANTANEOUSLY #
01090  M01S01052.fsedata +++|  ITEM TMP1, TMP2, BOOL B;
01091  M01S01053.fsedata +++|
01092  M01S01054.fsedata +++|
01093  M01S01055.fsedata +++|  PROC GETMARK(WHICH,LINPARM,FILPARM,CHRPARM);
01094  M01S01056.fsedata +++|    BEGIN
01095  M01S01057.fsedata +++|#
01096  M01S01058.fsedata +++|**        GETMARK - GET DATA FOR A MARKER.
01097  M01S01059.fsedata +++|*
01098  M01S01060.fsedata +++|*         ENTRY  WHICH - WHICH MARKER, 1 OR 2.
01099  M01S01061.fsedata +++|*
01100  M01S01062.fsedata +++|*         EXIT   LINPARM, FILPARM, CHRPARM - MARKER VALUES.
01101  M01S01063.fsedata +++|*                CHARRANGE - FORCED TRUE AS NEEDED.
01102  M01S01064.fsedata +++|#
01103  M01S01065.fsedata +++|    ITEM WHICH, LINPARM, FILPARM, CHRPARM;
01104  M01S01066.fsedata +++|    LINPARM=REGLINE[MARKREG-1+WHICH]-REGLINE[MARKTOP-1+WHICH];
01105  M01S01067.fsedata +++|    FILPARM=MRKFILE[WHICH-1];
01106  M01S01068.fsedata +++|    CHRPARM=MRKCHAR[WHICH-1];
01107  M01S01069.fsedata +++|    IF CHRPARM GQ 0 THEN CHARRANGE=TRUE;
01108  M01S01070.fsedata +++|    END                              # OF GETMARK        #
01109  M01S01071.fsedata +++|PAGE                                 # SCANNER - MAIN CODE   #
01110  M01S01072.fsedata +++|
01111  M01S01073.fsedata +++|  CHRPTR1=-1;
01112  M01S01074.fsedata +++|  CHRPTR2=-1;
01113  M01S01075.fsedata +++|  CHRPTR3=-1;
01114  M01S01076.fsedata +++|  LINPTR1=-1;
01115  M01S01077.fsedata +++|  LINPTR2=-1;
01116  M01S01078.fsedata +++|  LINPTR3=-1;
01117  M01S01079.fsedata +++|  FILPTR1=0;
01118  M01S01080.fsedata +++|  FILPTR2=0;
01119  M01S01081.fsedata +++|  FILPTR3=0;
01120  M01S01082.fsedata +++|  LINNUM1=-1;
01121  M01S01083.fsedata +++|  LINNUM2=-1;
01122  M01S01084.fsedata +++|  LINNUM3=-1;
01123  M01S01085.fsedata +++|  SCANBLOCK=FALSE;
01124  M01S01086.fsedata +++|  SCANWORD=FALSE;
01125  M01S01087.fsedata +++|  SCANUPPER=FALSE;
01126  M01S01088.fsedata +++|  SCANHOME=FALSE;
01127  M01S00001.@000050 +++|  SCANMARK = FALSE;
01128  M01S00001.@000046 +++|  SCANSFILE = FALSE;
01129  M01S00002.@000046 +++|  SCANTO = FALSE;
01130  M01S00003.@000046 +++|  SCNLINX = FALSE;
01131  M01S00004.@000046 +++|  SCNLINY = FALSE;
01132  M01S00005.@000046 +++|  SCNLINZ = FALSE;
01133  M01S00006.@000046 +++|  SCNONCE = FALSE;
01134  M01S00001.@000026 +++|  SCHSTRSPEC=FALSE;
01135  M01S01089.fsedata +++|  WHICHDGT=WHICHLIN;
01136  M01S01090.fsedata +++|  KEYWDTYPE=2;
01137  M01S01091.fsedata +++|  SCANPOS=TOKENPOS;
01138  M01S01092.fsedata +++|  FORCEFIELD=FALSE;
01139  M01S01093.fsedata +++|  FIELDTARGET=0;
01140  M01S01094.fsedata +++|
01141  M01S01095.fsedata +++|  # FILE EXTENSION IS ONLY ALLOWED IN SINGLE USER VERSION #
01142  M01S01096.fsedata +++|  # FOR THREE SPECIFIC COMMAND TYPES #
01143  M01S01097.fsedata +++|
01144  M01S01098.fsedata +++|  IF EXTENDSIZE NQ 0 THEN
01145  M01S01099.fsedata +++|    BEGIN
01146  M01S01100.fsedata +++|    IF OKEXTEND[PROCESSNDX] THEN
01147  M01S01101.fsedata +++|      BEGIN
01148  M01S01102.fsedata +++|      CONTROL IFEQ MULTI,1;
01149  M01S01103.fsedata +++|        GOTO QQSINGLE;
01150  M01S01104.fsedata +++|      CONTROL FI;
01151  M01S01105.fsedata +++|      END
01152  M01S01106.fsedata +++|    ELSE
01153  M01S01107.fsedata +++|      BEGIN
01154  M01S01108.fsedata +++|      EXTENDSIZE=0;
01155  M01S01109.fsedata +++|      END
01156  M01S01110.fsedata +++|    END
01157  M01S01111.fsedata +++|PAGE                                 # MAIN SCANNER LOOP STARTS HERE #
01158  M01S01112.fsedata +++|
01159  M01S01113.fsedata +++|
01160  M01S01114.fsedata +++|SCANTOKEN:
01161  M01S01115.fsedata +++|  TOKEN;
01162  M01S01116.fsedata +++|SCANLOOP:
01163  M01S01117.fsedata +++|  GOTO SCANSW[TOKENTYPE];
01164  M01S01118.fsedata +++|
01165  M01S01119.fsedata +++|
01166  M01S01120.fsedata +++|SCDIGIT:
Line S01121 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000073
Seq #  *Modification Id* Act 
----------------------------+
01167  M02S01121.@000073 ---|  IF WHICHDGT EQ DIGITST"TAB" THEN SCNTAB;
Line S01122 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000073
Seq #  *Modification Id* Act 
----------------------------+
01168  M02S01122.@000073 ---|  ELSE IF WHICHDGT EQ DIGITST"LIMIT" THEN
01169  M01S00001.@000073 +++|  IF WHICHDGT EQ DIGITST"LIMIT" THEN
01170  M01S01123.fsedata +++|    BEGIN
01171  M01S01124.fsedata +++|    LIMIT=MAX(TOKENVAL,1);
01172  M01S01125.fsedata +++|    NONDEFAULT=TRUE;
01173  M01S01126.fsedata +++|    TOKEN;
01174  M01S01127.fsedata +++|    WHICHDGT=WHICHLIN;
01175  M01S01128.fsedata +++|    END
01176  M01S01129.fsedata +++|  ELSE SCNLIN;
01177  M01S01130.fsedata +++|  GOTO SCANLOOP;
01178  M01S01131.fsedata +++|
01179  M01S01132.fsedata +++|SCPLUS:  SCMINUS:
01180  M01S01133.fsedata +++|  SCNLIN;
01181  M01S01134.fsedata +++|  GOTO SCANLOOP;
01182  M01S01135.fsedata +++|
01183  M01S01136.fsedata +++|SCCOLON:
01184  M01S01137.fsedata +++|  WHICHLIN=2;
01185  M01S01138.fsedata +++|  WHICHDGT=2;
01186  M01S01139.fsedata +++|  GOTO SCANTOKEN;
01187  M01S01140.fsedata +++|
01188  M01S01141.fsedata +++|SCPAREN:
01189  M01S01142.fsedata +++|  SCNLIN;
01190  M01S01143.fsedata +++|  GOTO SCANLOOP;
01191  M01S01144.fsedata +++|
01192  M01S01145.fsedata +++|SCDELIMIT:
01193  M01S01146.fsedata +++|  IF WHICHSTR LQ 0 THEN ERRJUMP("STRING NOT ALLOWED$");
01194  M01S01147.fsedata +++|  IF NOT FORCEFIELD THEN
01195  M01S01148.fsedata +++|    BEGIN
01196  M01S01149.fsedata +++|    FIELDFLG=FALSE; FIELDNDX=0;
01197  M01S01150.fsedata +++|    END
01198  M01S01151.fsedata +++|  SCANSTR;
01199  M01S01152.fsedata +++|  GOTO SCANLOOP;
01200  M01S01153.fsedata +++|
01201  M01S01154.fsedata +++|
01202  M01S01155.fsedata +++|SKALL:
01203  M01S01156.fsedata +++|  IF WHICHDGT EQ DIGITST"LIMIT" THEN
01204  M01S01157.fsedata +++|    BEGIN
01205  M01S01158.fsedata +++|    LIMIT=LARGENUM;
01206  M01S01159.fsedata +++|    TOKEN;
01207  M01S01160.fsedata +++|    END
01208  M01S01161.fsedata +++|  ELSE
01209  M01S01162.fsedata +++|    BEGIN
01210  M01S01163.fsedata +++|    IF LINPTR1 NQ -1 OR LINPTR2 NQ -1 THEN
01211  M01S01164.fsedata +++|      BEGIN
01212  M01S01165.fsedata +++|      ERRJUMP("ONLY ONE RANGE ALLOWED$");
01213  M01S01166.fsedata +++|      END
01214  M01S01167.fsedata +++|    FILNUM=CURFILE;
01215  M01S01168.fsedata +++|    TOKEN;
01216  M01S01169.fsedata +++|    IF TOKENTYPE EQ TYPST"PAREN" THEN
01217  M01S01170.fsedata +++|      BEGIN
01218  M01S01171.fsedata +++|      SCNFILE(READNAM);
01219  M01S00007.@000046 +++|      SCANSFILE = TRUE;              # NOTE THAT WE HAVE SCANNED #
01220  M01S01172.fsedata +++|      FORCEFILE;
01221  M01S01173.fsedata +++|      END
01222  M01S01174.fsedata +++|    LINPTR1=1;
01223  M01S01175.fsedata +++|    LINPTR2=BOTF(FILNUM)-1-TOPF(FILNUM);
01224  M01S01176.fsedata +++|    FILPTR1=FDLF(FILNUM);
01225  M01S01177.fsedata +++|    WHICHLIN=3;
01226  M01S01178.fsedata +++|    WHICHDGT=WHICHLIN;
01227  M01S01179.fsedata +++|    NONDEFAULT=TRUE;
01228  M01S01180.fsedata +++|    END
01229  M01S01181.fsedata +++|  GOTO SCANLOOP;
01230  M01S01182.fsedata +++|
01231  M01S01183.fsedata +++|SKBLOCK:
01232  M01S01184.fsedata +++|  SCANBLOCK=TRUE;
01233  M01S01185.fsedata +++|  GOTO SCANTOKEN;
01234  M01S01186.fsedata +++|
01235  M01S01187.fsedata +++|SKEND:
01236  M01S01188.fsedata +++|  IF OKEND[PROCESSNDX] THEN EXECNDX=EXECST"APPEND";
01237  M01S01189.fsedata +++|  ELSE ERRJUMP("CHARACTER SEQUENCE NOT RECOGNIZED$");
01238  M01S01190.fsedata +++|  GOTO SCANTOKEN;
01239  M01S01191.fsedata +++|
01240  M01S01192.fsedata +++|SKHOME:
01241  M01S01193.fsedata +++|  IF OKHOME[PROCESSNDX] THEN SCANHOME=TRUE;
01242  M01S01194.fsedata +++|  ELSE ERRJUMP("CHARACTER SEQUENCE NOT RECOGNIZED$");
01243  M01S01195.fsedata +++|  GOTO SCANTOKEN;
01244  M01S01196.fsedata +++|
01245  M01S01197.fsedata +++|SKPREVIOUS:
Line S00001 Modification History
M01 (Yanked) (Added by) @000041
M02 (Yanked) (Updated by) @000077
Seq #  *Modification Id* Act 
----------------------------+
01246  M02S00001.@000077 ---|  IF FORWARD OR BACKWARD THEN ERRJUMP("ONLY ONE RANGE ALLOWED$");
Line S01198 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000077
Seq #  *Modification Id* Act 
----------------------------+
01247  M02S01198.@000077 ---|  WHICHDGT=DIGITST"LIMIT";
Line S01199 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000077
Seq #  *Modification Id* Act 
----------------------------+
01248  M02S01199.@000077 ---|  NONDEFAULT=TRUE;
01249  M01S00001.@000077 +++|  IF OKMOVE[PROCESSNDX] AND WHICHLIN GR 3 THEN
01250  M01S00002.@000077 +++|    BEGIN
01251  M01S01200.fsedata +++|  # NOTE "TO PREVIOUS" IS A SPECIAL CASE FOR COPY/MOVE WITH NO #
01252  M01S01201.fsedata +++|  # ADDITIONAL SYNTAX ALLOWED, AND SEMANTICS DETERMINED BY #
01253  M01S01202.fsedata +++|  # CHARACTER VERSUS LINE BOUNDARIES FOR SOURCE RANGE #
Line S01203 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000077
Seq #  *Modification Id* Act 
----------------------------+
01254  M02S01203.@000077 ---|  IF OKMOVE[PROCESSNDX] AND WHICHLIN GR 3 THEN
Line S01204 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000077
Seq #  *Modification Id* Act 
----------------------------+
01255  M02S01204.@000077 ---|    BEGIN
01256  M01S01205.fsedata +++|    IF NOT CHARRANGE THEN
01257  M01S01206.fsedata +++|      BEGIN
01258  M01S01207.fsedata +++|      FILNUM=CURFILE;
01259  M01S01208.fsedata +++|      EXTENDFILE(FALSE);
01260  M01S01209.fsedata +++|      LINPTR3=CURRENT-TOPF(CURFILE)-1;
01261  M01S01210.fsedata +++|      END
01262  M01S01211.fsedata +++|    END
01263  M01S01212.fsedata +++|  ELSE
01264  M01S01213.fsedata +++|    BEGIN
01265  M01S00003.@000077 +++|    IF FORWARD OR BACKWARD THEN ERRJUMP("ONLY ONE RANGE ALLOWED$");
01266  M01S00004.@000077 +++|    WHICHDGT=DIGITST"LIMIT";
01267  M01S00005.@000077 +++|    NONDEFAULT=TRUE;
01268  M01S01214.fsedata +++|    IF LIMIT EQ -1 THEN LIMIT=1;
01269  M01S01215.fsedata +++|    BACKWARD=TRUE;
01270  M01S01216.fsedata +++|    FORWARD=FALSE;
01271  M01S01217.fsedata +++|    END
01272  M01S01218.fsedata +++|  GOTO SCANTOKEN;
01273  M01S01219.fsedata +++|
01274  M01S01220.fsedata +++|SKCURRENT: SKFIRST: SKLAST: SKX: SKY: SKZ:
01275  M01S01221.fsedata +++|  # NOTE SCNLIN CAN ENABLE CHARRANGE FOR X,Y,Z #
01276  M01S01222.fsedata +++|  SCNLIN;
01277  M01S01223.fsedata +++|  GOTO SCANLOOP;
01278  M01S01224.fsedata +++|
01279  M01S01225.fsedata +++|SKMARK:
01280  M01S00002.@000050 +++|  SCANMARK = TRUE;
01281  M01S00003.@000050 +++|  IF CMDWASDLTE[0] THEN
01282  M01S00004.@000050 +++|    BEGIN                            # IF COMMAND WAS "DELETE" #
01283  M01S00005.@000050 +++|    KILLMARKS = TRUE;                # KILL THE MARKS #
01284  M01S00006.@000050 +++|    FORCEAUTOP[0] = FALSE;
01285  M01S00007.@000050 +++|    FORCEAUTOR[0] = FALSE;
01286  M01S00008.@000050 +++|    END
01287  M01S01226.fsedata +++|  IF NUMMARKS NQ 0 THEN
01288  M01S01227.fsedata +++|    BEGIN
01289  M01S01228.fsedata +++|    # NOTE GETMARK ROUTINE CAN ENABLE CHARRANGE #
01290  M01S01229.fsedata +++|    IF WHICHLIN EQ 3 THEN GETMARK(1,LINPTR3,FILPTR3,CHRPTR3);
01291  M01S01230.fsedata +++|    ELSE
01292  M01S01231.fsedata +++|      BEGIN
01293  M01S01232.fsedata +++|      GETMARK(1,LINPTR1,FILPTR1,CHRPTR1);
01294  M01S01233.fsedata +++|      GETMARK(2,LINPTR2,FILPTR2,CHRPTR2);
01295  M01S01234.fsedata +++|      END
01296  M01S01235.fsedata +++|    NONDEFAULT=TRUE;
01297  M01S00001.@000033 +++|    NUMMARKS = 2;
01298  M01S01236.fsedata +++|    END
Line S01237 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000033
Seq #  *Modification Id* Act 
----------------------------+
01299  M02S01237.@000033 ---|  KILLMARKS=TRUE;
01300  M01S01238.fsedata +++|  WHICHLIN=3;
01301  M01S01239.fsedata +++|  WHICHDGT=WHICHLIN;
01302  M01S00001.@000061 +++|  IF NOT FORCEFIELD THEN
01303  M01S00002.@000061 +++|    BEGIN                    # IF NO *IN* OPTION ON THIS COMMAND #
01304  M01S00003.@000061 +++|    FIELDNDX = 0;            # ELIMINATE TAB FIELD RESTRICTION #
01305  M01S00004.@000061 +++|    FIELDFLG = FALSE;
01306  M01S00005.@000061 +++|    END
01307  M01S01240.fsedata +++|  GOTO SCANTOKEN;
01308  M01S01241.fsedata +++|
01309  M01S01242.fsedata +++|SKNEXT:
Line S00002 Modification History
M01 (Yanked) (Added by) @000041
M02 (Yanked) (Updated by) @000077
Seq #  *Modification Id* Act 
----------------------------+
01310  M02S00002.@000077 ---|  IF FORWARD OR BACKWARD THEN ERRJUMP("ONLY ONE RANGE ALLOWED$");
Line S01243 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000077
Seq #  *Modification Id* Act 
----------------------------+
01311  M02S01243.@000077 ---|  WHICHDGT=DIGITST"LIMIT";
Line S01244 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000077
Seq #  *Modification Id* Act 
----------------------------+
01312  M02S01244.@000077 ---|  IF LIMIT EQ -1 THEN LIMIT=1;
Line S01245 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000077
Seq #  *Modification Id* Act 
----------------------------+
01313  M02S01245.@000077 ---|  FORWARD=TRUE;
Line S01246 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000077
Seq #  *Modification Id* Act 
----------------------------+
01314  M02S01246.@000077 ---|  BACKWARD=FALSE;
Line S01247 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000077
Seq #  *Modification Id* Act 
----------------------------+
01315  M02S01247.@000077 ---|  NONDEFAULT=TRUE;
01316  M01S00006.@000077 +++|  IF OKMOVE[PROCESSNDX] AND WHICHLIN GR 3 THEN
01317  M01S00007.@000077 +++|    BEGIN
01318  M01S00008.@000077 +++|  # NOTE "TO NEXT" IS A SPECIAL CASE FOR COPY/MOVE WITH NO #
01319  M01S00009.@000077 +++|  # ADDITIONAL SYNTAX ALLOWED, AND SEMANTICS DETERMINED BY #
01320  M01S00010.@000077 +++|  # CHARACTER VERSUS LINE BOUNDARIES FOR SOURCE RANGE #
01321  M01S00011.@000077 +++|    IF NOT CHARRANGE THEN
01322  M01S00012.@000077 +++|      BEGIN
01323  M01S00013.@000077 +++|      FILNUM=CURFILE;
01324  M01S00014.@000077 +++|      EXTENDFILE(FALSE);
01325  M01S00015.@000077 +++|      LINPTR3=CURRENT-TOPF(CURFILE);
01326  M01S00016.@000077 +++|      END
01327  M01S00017.@000077 +++|    END
01328  M01S00018.@000077 +++|  ELSE
01329  M01S00019.@000077 +++|    BEGIN
01330  M01S00020.@000077 +++|    IF FORWARD OR BACKWARD THEN ERRJUMP("ONLY ONE RANGE ALLOWED$");
01331  M01S00021.@000077 +++|    WHICHDGT=DIGITST"LIMIT";
01332  M01S00022.@000077 +++|    IF LIMIT EQ -1 THEN LIMIT=1;
01333  M01S00023.@000077 +++|    FORWARD=TRUE;
01334  M01S00024.@000077 +++|    BACKWARD=FALSE;
01335  M01S00025.@000077 +++|    NONDEFAULT=TRUE;
01336  M01S00026.@000077 +++|    END
01337  M01S01248.fsedata +++|  GOTO SCANTOKEN;
01338  M01S01249.fsedata +++|
01339  M01S01250.fsedata +++|SKQUIET:
01340  M01S01251.fsedata +++|  DONTPRINT=TRUE;
01341  M01S01252.fsedata +++|  GOTO SCANTOKEN;
01342  M01S01253.fsedata +++|
01343  M01S01254.fsedata +++|SKREPEAT:
01344  M01S01255.fsedata +++|  NONDEFAULT=TRUE;
01345  M01S01256.fsedata +++|  IF LIMIT EQ -1 THEN LIMIT=1;
01346  M01S01257.fsedata +++|  WHICHDGT=DIGITST"LIMIT";
01347  M01S01258.fsedata +++|  GOTO SCANTOKEN;
01348  M01S01259.fsedata +++|
01349  M01S01260.fsedata +++|SKSCREEN:
01350  M01S01261.fsedata +++|  IF LINPTR1 NQ -1 OR LINPTR2 NQ -1 THEN
01351  M01S01262.fsedata +++|    BEGIN
01352  M01S01263.fsedata +++|    ERRJUMP("ONLY ONE RANGE ALLOWED$");
01353  M01S01264.fsedata +++|    END
01354  M01S01265.fsedata +++|  IF SCREENMODE THEN
01355  M01S01266.fsedata +++|    BEGIN
01356  M01S01267.fsedata +++|    LINPTR1=TOPS(CURSPLIT)+1-TOPF(CURFILE);
01357  M01S01268.fsedata +++|    LINPTR2=BOTS(CURSPLIT)-1-TOPF(CURFILE);
01358  M01S01269.fsedata +++|    IF WHICHLIN GQ 3 THEN
01359  M01S01270.fsedata +++|      BEGIN
01360  M01S01271.fsedata +++|      LINPTR3=LINPTR2;
01361  M01S01272.fsedata +++|      IF BACKWARD THEN LINPTR3=LINPTR1;
01362  M01S01273.fsedata +++|      END
01363  M01S01274.fsedata +++|    NONDEFAULT=TRUE;
01364  M01S00001.@000007 +++|    DONTPRINT=TRUE;
01365  M01S01275.fsedata +++|    END
01366  M01S01276.fsedata +++|  ELSE ERRJUMP("SCREEN MODE REQUIRED$");
01367  M01S01277.fsedata +++|  WHICHLIN=3;
01368  M01S01278.fsedata +++|  WHICHDGT=WHICHLIN;
01369  M01S01279.fsedata +++|  GOTO SCANTOKEN;
01370  M01S01280.fsedata +++|
01371  M01S01281.fsedata +++|SKIN:
01372  M01S01282.fsedata +++|  WHICHDGT=DIGITST"TAB";
Line S01283 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000073
Seq #  *Modification Id* Act 
----------------------------+
01373  M02S01283.@000073 ---|  GOTO SCANTOKEN;
01374  M01S00002.@000073 +++|  TOKEN;                     # ADVANCE NEXT SYNTAX #
01375  M01S00003.@000073 +++|  SCNTAB;                    # ANALYZE AND SET *IN* MARGINS #
01376  M01S00004.@000073 +++|  GOTO SCANLOOP;
01377  M01S01284.fsedata +++|
01378  M01S01285.fsedata +++|SKTO:
01379  M01S01286.fsedata +++|  IF NOT OKTARGET[PROCESSNDX] THEN
01380  M01S01287.fsedata +++|    BEGIN
01381  M01S01288.fsedata +++|    ERRJUMP("PARAMETER NOT VALID FOR THIS DIRECTIVE$");
01382  M01S01289.fsedata +++|    END
01383  M01S00008.@000046 +++|  SCANTO = TRUE;
01384  M01S00009.@000046 +++|  SCNONCE = FALSE;
01385  M01S01290.fsedata +++|  WHICHLIN=4;
01386  M01S01291.fsedata +++|  WHICHDGT=WHICHLIN;
01387  M01S01292.fsedata +++|  NONDEFAULT=TRUE;
01388  M01S01293.fsedata +++|  GOTO SCANTOKEN;
01389  M01S01294.fsedata +++|
01390  M01S01295.fsedata +++|SKWORD:
01391  M01S01296.fsedata +++|  SCANWORD=TRUE;
01392  M01S01297.fsedata +++|  GOTO SCANTOKEN;
01393  M01S01298.fsedata +++|
01394  M01S01299.fsedata +++|SKUPPER:
01395  M01S01300.fsedata +++|  SCANUPPER=TRUE;
01396  M01S01301.fsedata +++|  IF NOT OKUPPER[PROCESSNDX] THEN
01397  M01S01302.fsedata +++|    BEGIN
01398  M01S01303.fsedata +++|    ERRJUMP("PARAMETER NOT VALID FOR THIS DIRECTIVE$");
01399  M01S01304.fsedata +++|    END
01400  M01S01305.fsedata +++|  GOTO SCANTOKEN;
01401  M01S01306.fsedata +++|
01402  M01S01307.fsedata +++|
01403  M01S01308.fsedata +++|SCALPHA:
01404  M01S01309.fsedata +++|  FOR TMP1=0 STEP 1 WHILE KEYWDNDX GQ 0 AND TMP1 LQ NUMSCANKEYS DO
01405  M01S01310.fsedata +++|    BEGIN
01406  M01S01311.fsedata +++|    IF KEYMATCH[TMP1] EQ KEYWORD[KEYWDNDX]
01407  M01S01312.fsedata +++|      THEN GOTO SCANKEYSW[TMP1];
01408  M01S01313.fsedata +++|    END
01409  M01S01314.fsedata +++|  ERRJUMP("CHARACTER SEQUENCE NOT RECOGNIZED$");
01410  M01S01315.fsedata +++|
01411  M01S01316.fsedata +++|
01412  M01S01317.fsedata +++|SCSEMI:  SCEOL:  SCOTHER:  SCCTRL:  SCEQUAL:
01413  M01S01318.fsedata +++|
01414  M01S01319.fsedata +++|  # VERIFY END OF SYNTAX #
01415  M01S01320.fsedata +++|
01416  M01S01321.fsedata +++|  SCNEOC;
01417  M01S01322.fsedata +++|
01418  M01S01323.fsedata +++|  # VERIFY SOURCE RANGE WITHIN ONE FILE, AND CONVERT FILE SELECTIONS #
01419  M01S01324.fsedata +++|  # FROM FILE DIRECTORY IDS INTO OPEN BRACKET ORDINALS #
01420  M01S01325.fsedata +++|
01421  M01S01326.fsedata +++|  IF FILPTR2 NQ 0 THEN
01422  M01S01327.fsedata +++|    BEGIN
01423  M01S01328.fsedata +++|    IF FILPTR1 NQ 0 AND FILPTR1 NQ FILPTR2
01424  M01S01329.fsedata +++|      THEN ERRJUMP("RANGE MUST BE IN SAME FILE$");
01425  M01S01330.fsedata +++|    FILPTR1=FILPTR2;
01426  M01S01331.fsedata +++|    END
01427  M01S01332.fsedata +++|  CHECKFILPTR;               # CONVERT FILPTR1   #
01428  M01S01333.fsedata +++|  FILPTR2=FILPTR1;           # AND FILPTR2 ALSO  #
01429  M01S01334.fsedata +++|
01430  M01S01335.fsedata +++|  # VERIFY THAT BOTH FILES FOR A DUAL-FILE OPERATION CAN BE #
01431  M01S01336.fsedata +++|  # OPENED INTO THE TWO BRACKETS, AND CONVERT TARGET FILE SELECTION #
01432  M01S01337.fsedata +++|  # FROM FILE DIRECTORY ID INTO OPEN BRACKET ORDINAL #
01433  M01S01338.fsedata +++|
01434  M01S01339.fsedata +++|  IF FILPTR1 NQ 0 AND FILPTR3 NQ 0 AND FILPTR1 NQ FILPTR3
01435  M01S01340.fsedata +++|    THEN CURFILE=FILPTR1;    # ASSURE NEEDED FILES AVAIL   #
01436  M01S01341.fsedata +++|  FILPTR1 = = FILPTR3;
01437  M01S01342.fsedata +++|  CHECKFILPTR;               # CONVERT FILPTR3   #
01438  M01S01343.fsedata +++|  FILPTR3 = = FILPTR1;
01439  M01S01344.fsedata +++|  IF FILPTR3 EQ 0 THEN FILPTR3=CURFILE;
01440  M01S01345.fsedata +++|
01441  M01S01346.fsedata +++|  # CONVERT LINPTRS TO ABSOLUTE WORKFILE ORDINALS #
01442  M01S01347.fsedata +++|
01443  M01S01348.fsedata +++|  REL2ABS(LINPTR1,FILPTR1);
01444  M01S01349.fsedata +++|  REL2ABS(LINPTR2,FILPTR2);
01445  M01S01350.fsedata +++|  REL2ABS(LINPTR3,FILPTR3);
01446  M01S01351.fsedata +++|
01447  M01S01352.fsedata +++|  # NOW FILL IN DEFAULTS #
01448  M01S01353.fsedata +++|
01449  M01S01354.fsedata +++|  IF LIMIT EQ -1 THEN
01450  M01S01355.fsedata +++|    BEGIN
01451  M01S01356.fsedata +++|    IF LINPTR2 EQ -1 THEN LIMIT=1;
01452  M01S01357.fsedata +++|    ELSE LIMIT=LARGENUM;
01453  M01S01358.fsedata +++|    END
01454  M01S01359.fsedata +++|
01455  M01S01360.fsedata +++|  IF LINPTR1 EQ -1 THEN
01456  M01S01361.fsedata +++|    BEGIN
01457  M01S01362.fsedata +++|    CHRPTR1=0;
Line S01363 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000005
Seq #  *Modification Id* Act 
----------------------------+
01458  M02S01363.@000005 ---|    IF FORWARD THEN LINPTR1=CURRENT+1;
01459  M01S00001.@000005 +++|    IF FORWARD AND NOT OKSEARCH[PROCESSNDX] THEN LINPTR1=CURRENT+1;
Line S01364 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000005
Seq #  *Modification Id* Act 
----------------------------+
01460  M02S01364.@000005 ---|    ELSE IF BACKWARD THEN LINPTR1=CURRENT-1;
01461  M01S00002.@000005 +++|    ELSE IF BACKWARD THEN
01462  M01S00003.@000005 +++|      BEGIN
01463  M01S00004.@000005 +++|      IF OKSEARCH[PROCESSNDX] THEN
01464  M01S00005.@000005 +++|        BEGIN
01465  M01S00006.@000005 +++|        LINPTR1=CURRENT;
01466  M01S00007.@000005 +++|        IF CURCURSOR GR 0 THEN CHRPTR1=CURCURSOR-1;
01467  M01S00008.@000005 +++|        ELSE
01468  M01S00009.@000005 +++|          BEGIN
01469  M01S00010.@000005 +++|          CHRPTR1=BUFCM1;
01470  M01S00011.@000005 +++|          LINPTR1=CURRENT-1;
01471  M01S00012.@000005 +++|          END
01472  M01S00013.@000005 +++|        END
01473  M01S00014.@000005 +++|      ELSE LINPTR1=CURRENT-1;
01474  M01S00015.@000005 +++|      END
01475  M01S01365.fsedata +++|    ELSE
01476  M01S01366.fsedata +++|      BEGIN
01477  M01S01367.fsedata +++|      LINPTR1=CURRENT;
01478  M01S01368.fsedata +++|      IF SCANWORD OR CHARRANGE THEN CHRPTR1=CURCURSOR;
Line S01369 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000005
Seq #  *Modification Id* Act 
----------------------------+
01479  M02S01369.@000005 ---|      IF OKSEARCH[PROCESSNDX] THEN
01480  M01S00016.@000005 +++|      IF OKSEARCH[PROCESSNDX] THEN
01481  M01S01370.fsedata +++|        BEGIN
01482  M01S01371.fsedata +++|        CHRPTR1=CURCURSOR;
Line S01372 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000026
Seq #  *Modification Id* Act 
----------------------------+
01483  M02S01372.@000026 ---|        IF LASTPROCESS EQ PROCESSNDX AND CURCURSOR EQ OLDCURSOR
Line S01373 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000026
Seq #  *Modification Id* Act 
----------------------------+
01484  M02S01373.@000026 ---|          AND LINPTR1 EQ OLDLINPTR THEN CHRPTR1=CHRPTR1+STRINGLEN;
01485  M01S00002.@000026 +++|        IF LASTPROCESS EQ PROCESSNDX
01486  M01S00003.@000026 +++|          AND (NOT(SCHSTRSPEC) OR FORWARD)
01487  M01S00004.@000026 +++|          AND CURCURSOR EQ OLDCURSOR
01488  M01S00005.@000026 +++|          AND LINPTR1 EQ OLDLINPTR
01489  M01S00006.@000026 +++|          THEN  CHRPTR1=CHRPTR1+STRINGLEN;
01490  M01S01374.fsedata +++|        END
01491  M01S01375.fsedata +++|      END
01492  M01S01376.fsedata +++|    FILPTR1=CURFILE;
01493  M01S01377.fsedata +++|    END
01494  M01S01378.fsedata +++|
01495  M01S01379.fsedata +++|  IF LINPTR2 EQ -1 THEN
01496  M01S01380.fsedata +++|    BEGIN
01497  M01S01381.fsedata +++|    FILNUM=FILPTR1;
01498  M01S01382.fsedata +++|    IF FILNUM EQ 0 THEN FILNUM=CURFILE;
01499  M01S01383.fsedata +++|    IF BACKWARD THEN LINPTR2=TOPF(FILNUM)+1;
01500  M01S01384.fsedata +++|    ELSE LINPTR2=BOTF(FILNUM)-1;
01501  M01S01385.fsedata +++|    END
01502  M01S01386.fsedata +++|
01503  M01S01387.fsedata +++|  IF LINPTR3 EQ -1 THEN
01504  M01S01388.fsedata +++|    BEGIN
01505  M01S01389.fsedata +++|    FILNUM=FILPTR3;
01506  M01S01390.fsedata +++|    EXTENDFILE(TRUE);
01507  M01S01391.fsedata +++|    LINPTR3=CURRENT;
01508  M01S01392.fsedata +++|    CHRPTR3=CURCURSOR;
01509  M01S01393.fsedata +++|    END
01510  M01S01394.fsedata +++|
01511  M01S00017.@000005 +++|  IF OKSEARCH[PROCESSNDX] AND (BACKWARD OR LINPTR1 GR LINPTR2) THEN
01512  M01S00018.@000005 +++|    BEGIN
01513  M01S00019.@000005 +++|    IF CHRPTR1 LS 0 THEN CHRPTR1=BUFCM1;
01514  M01S00020.@000005 +++|    IF CHRPTR2 LS 0 THEN CHRPTR2=0;
01515  M01S00021.@000005 +++|    END
01516  M01S01395.fsedata +++|  CHRPTR1=MAX(CHRPTR1,0);
01517  M01S01396.fsedata +++|  IF CHRPTR2 LS 0 THEN CHRPTR2=BUFCM1;
01518  M01S01397.fsedata +++|  IF CHRPTR2 EQ 0 AND NOT (CHARRANGE OR OKSEARCH[PROCESSNDX])
01519  M01S01398.fsedata +++|    THEN CHRPTR2=BUFCM1;
01520  M01S01399.fsedata +++|  IF CHRPTR3 LS 0 THEN
01521  M01S01400.fsedata +++|    BEGIN
01522  M01S01401.fsedata +++|    IF CHARRANGE THEN CHRPTR3=CURCURSOR;
01523  M01S01402.fsedata +++|    ELSE CHRPTR3=0;
01524  M01S01403.fsedata +++|    END
01525  M01S01404.fsedata +++|
01526  M01S01405.fsedata +++|  WINDOPOS(LINPTR3,FILPTR3);
01527  M01S01406.fsedata +++|
01528  M01S01407.fsedata +++|  # SINGLE USER VERSION ONLY MUST MAKE FILE EXTENSION EXACT #
01529  M01S01408.fsedata +++|
01530  M01S01409.fsedata +++|  CONTROL IFEQ SINGLE,1;
01531  M01S01410.fsedata +++|    IF THISEXTEND NQ 0 THEN
01532  M01S01411.fsedata +++|      BEGIN
01533  M01S01412.fsedata +++|      PUSH;
01534  M01S01413.fsedata +++|      CURFILE=FILPTR3;
01535  M01S01414.fsedata +++|      WHYLE LINPTR3 LS BOTF(FILPTR3)-1 AND THISEXTEND GR 0 DO
01536  M01S01415.fsedata +++|        BEGIN
01537  M01S01416.fsedata +++|        POSZ(BOTF(FILPTR3)-1);
01538  M01S01417.fsedata +++|        DELX;
01539  M01S01418.fsedata +++|        THISEXTEND=THISEXTEND-1;
01540  M01S01419.fsedata +++|        IF CURRENT LS LINPTR1 THEN LINPTR1=LINPTR1-1;
01541  M01S01420.fsedata +++|        IF CURRENT LS LINPTR2 THEN LINPTR2=LINPTR2-1;
01542  M01S01421.fsedata +++|        END
01543  M01S01422.fsedata +++|      POP;
01544  M01S01423.fsedata +++|      END
01545  M01S01424.fsedata +++|    WINDOPOS(LINPTR3,FILPTR3);
01546  M01S01425.fsedata +++|  CONTROL FI;
01547  M01S01426.fsedata +++|
01548  M01S01427.fsedata +++|  IF FILPTR1 EQ 0 THEN FILPTR1=CURFILE;
01549  M01S01428.fsedata +++|  CURFILE=FILPTR1;
01550  M01S01429.fsedata +++|  WINDOLIN(LINPTR1,CURFILE);
01551  M01S01430.fsedata +++|  FOUNDOTHER=FOUND;
01552  M01S01431.fsedata +++|  WINDOLIN(LINPTR2,CURFILE);
01553  M01S01432.fsedata +++|  FOUND=FOUND AND FOUNDOTHER;
01554  M01S01433.fsedata +++|
Line S01434 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000005
Seq #  *Modification Id* Act 
----------------------------+
01555  M02S01434.@000005 ---|  IF LINPTR1 GR LINPTR2 THEN
01556  M01S00022.@000005 +++|  IF LINPTR1 GR LINPTR2
01557  M01S00023.@000005 +++|    OR (LINPTR1 EQ LINPTR2 AND CHRPTR1 GR CHRPTR2) THEN
01558  M01S01435.fsedata +++|    BEGIN
01559  M01S01436.fsedata +++|    BACKWARD=TRUE;
01560  M01S01437.fsedata +++|    LINPTR1 = = LINPTR2;
Line S01438 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000005
Seq #  *Modification Id* Act 
----------------------------+
01561  M02S01438.@000005 ---|    IF CHARRANGE THEN CHRPTR1 = = CHRPTR2;
01562  M01S00024.@000005 +++|    CHRPTR1 = = CHRPTR2;
01563  M01S01439.fsedata +++|    END
01564  M01S01440.fsedata +++|
01565  M01S01441.fsedata +++|  IF BACKWARD AND NOT OKREVERSE[PROCESSNDX] THEN
01566  M01S01442.fsedata +++|    BEGIN
01567  M01S01443.fsedata +++|    BACKWARD=FALSE;
01568  M01S01444.fsedata +++|    IF LIMIT LS LARGENUM
01569  M01S01445.fsedata +++|      THEN LINPTR1=MAX(LINPTR1,LINPTR2-MAX(LIMIT,1)+1);
01570  M01S01446.fsedata +++|    END
01571  M01S01447.fsedata +++|
01572  M01S01448.fsedata +++|  IF WHICHSTR NQ 0 AND ASCII[CURFILE] LQ 1 THEN
01573  M01S01449.fsedata +++|    BEGIN
01574  M01S01450.fsedata +++|    SQUELCH(LOCSTRING1);
01575  M01S01451.fsedata +++|    SQUELCH(LOCSTRING2);
01576  M01S01452.fsedata +++|    SQUELCH(CHGSTRING1);
01577  M01S01453.fsedata +++|    SQUELCH(TTYLIN);
01578  M01S01454.fsedata +++|    END
01579  M01S01455.fsedata +++|
01580  M01S01456.fsedata +++| IOEND                       # OF SCANNER        #
01581  M01S01457.fsedata +++|PAGE                         # SCAN STUFF -- SCNLIN        #
01582  M01S01458.fsedata +++|
01583  M01S01459.fsedata +++|
01584  M01S01460.fsedata +++|PROC SCNLIN;
01585  M01S01461.fsedata +++|  IOBEGIN(SCNLIN)
01586  M01S01462.fsedata +++|#
01587  M01S01463.fsedata +++|**        SCNLIN - SCAN LINE ADDRESS SYNTAX.
01588  M01S01464.fsedata +++|*
01589  M01S01465.fsedata +++|*         SCNLIN IS CAPABLE OF PARSING ONE LINE ADDRESS EXPRESSION.
01590  M01S01466.fsedata +++|*         IT IS INTENDED TO BE CALLED ONLY BY SCANNER.  SCNLIN
01591  M01S01467.fsedata +++|*         ASSUMES THE CALLER HAS POSITIONED THE TOKEN AT A
01592  M01S01468.fsedata +++|*         GENUINE LINE ADDRESS EXPRESSION.
01593  M01S01469.fsedata +++|*
01594  M01S01470.fsedata +++|*         ENTRY  WHICHLIN - WHICH LINE PARAMETER TO SET.
01595  M01S01471.fsedata +++|*                LINPTR1,2,3 - POSSIBLE PARAMETERS.
01596  M01S01472.fsedata +++|*                CHRPTR1,2,3 - DITTO.
01597  M01S01473.fsedata +++|*                FILPTR1,2,3 - DITTO.
01598  M01S01474.fsedata +++|*                LINNUM1,2,3 - DITTO.
01599  M01S01475.fsedata +++|*                CURFILE - DEFAULT FILE BRACKET.
01600  M01S01476.fsedata +++|*                TOKENPOS, SCANPOS - BRACKET CURRENT SYNTAX.
01601  M01S01477.fsedata +++|*                CURF(), TOPF(), BOTF() - SETUP.
01602  M01S01478.fsedata +++|*                NUMBERED[] - SETUP.
01603  M01S01479.fsedata +++|*                REGLINE[XYZREG], REGLINE[XYZTOP] - SETUP.
01604  M01S01480.fsedata +++|*                XYZCHAR[], XYZFILE[] - SETUP.
01605  M01S01481.fsedata +++|*
01606  M01S01482.fsedata +++|*         EXIT   ONE SET OF LINPTRX, CHRPTRX, FILPTRX, LINNUMX -
01607  M01S01483.fsedata +++|*                    DESCRIBE SCANNED EXPRESSION.
01608  M01S01484.fsedata +++|*                OTHER SETS OF LINPTRX, CHRPTRX, FILPTRX, LINNUMX -
01609  M01S01485.fsedata +++|*                    USED TEMPORARILY THEN RESTORED.
01610  M01S01486.fsedata +++|*                IF FILPTRX SET, IN FDLF FORMAT NOT BRACKET.
01611  M01S01487.fsedata +++|*                FILE BRACKETS POSSIBLY RE-OPENED.
01612  M01S01488.fsedata +++|*                CHARRANGE - CAN BE FORCED TRUE FOR X,Y,Z.
01613  M01S01489.fsedata +++|*                PAGELAST - FALSE.
01614  M01S01490.fsedata +++|*                NONDEFAULT - TRUE.
01615  M01S01491.fsedata +++|*                WHICHLIN - INCREMENTED.
01616  M01S01492.fsedata +++|*                WHICHDGT - MATCHES WHICHLIN.
01617  M01S01493.fsedata +++|*                SCANPOS, TOKENPOS - ADVANCED BEYOND SYNTAX.
01618  M01S01494.fsedata +++|*
01619  M01S01495.fsedata +++|*         USES   READNAM, FILNUM, ORIGSCNLIN, TEMP(RESTORES),
01620  M01S01496.fsedata +++|*                ALL TOKENXXXX VARIABLES.
01621  M01S01497.fsedata +++|*
01622  M01S01498.fsedata +++|*         CALLS  PUSHTEMP, MIN, SCNFILE, ERRJUMP, FORCEFILE,
01623  M01S01499.fsedata +++|*                TOKEN, PUSH, POSN, POP, POPTEMP.
01624  M01S01500.fsedata +++|#
01625  M01S01501.fsedata +++|
01626  M01S01502.fsedata +++|  #   SCNLINSW MUST MATCH TYPST.  SLKEYSW MATCHES LINEKEYWD.      #
01627  M01S01503.fsedata +++|
01628  M01S01504.fsedata +++|  SWITCH SCNLINSW SLDIGIT, SLPLUS, SLMINUS, SLDELIMIT,
01629  M01S01505.fsedata +++|                  SLCOLON,
01630  M01S01506.fsedata +++|                  SLPAREN, SLEQUAL, SLLETTER, SLSEMI,
01631  M01S01507.fsedata +++|                  SLEOL, SLOTHER, SLCONTROL;
01632  M01S01508.fsedata +++|
01633  M01S01509.fsedata +++|  SWITCH SLKEYSW  SLCURRENT, SLFIRST, SLLAST, SLX, SLY, SLZ;
01634  M01S01510.fsedata +++|
01635  M01S01511.fsedata +++|  ARRAY LINEKEYS[0:5]; ITEM LINEKEYWD C(0,0,10) = [ "CURRENT",
01636  M01S01512.fsedata +++|                       "FIRST", "LAST", "X", "Y", "Z" ];
01637  M01S01513.fsedata +++|
01638  M01S01514.fsedata +++|  ITEM TMP1;          # CAN BE USED ONLY INSTANTANEOUSLY    #
01639  M01S01515.fsedata +++|
01640  M01S01516.fsedata +++|  WHICHLIN=MIN(WHICHLIN,3);
Line S01517 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000029
Seq #  *Modification Id* Act 
----------------------------+
01641  M02S01517.@000029 ---|  ORIGSCNLIN=TOKENPOS;
01642  M01S00001.@000029 +++|  IF WHICHLIN NQ 2 THEN ORIGSCNLIN=TOKENPOS;
01643  M01S01518.fsedata +++|  FILNUM=CURFILE;
01644  M01S01519.fsedata +++|  NONDEFAULT=TRUE;
01645  M01S01520.fsedata +++|  PAGELAST=FALSE;              # SINCE NON-DEFAULT USED      #
01646  M01S01521.fsedata +++|  PUSHTEMP;           # ALLOCATE TEMP VARIABLE FOR SCRATCH  #
01647  M01S01522.fsedata +++|  IF WHICHLIN EQ 2 THEN
01648  M01S01523.fsedata +++|    BEGIN
01649  M01S01524.fsedata +++|    IF FILPTR1 NQ 0 AND FDLF(CURFILE) NQ FILPTR1
01650  M01S01525.fsedata +++|      THEN FILNUM=CURFILE LXR 3;
01651  M01S01526.fsedata +++|    LINPTR1 == LINPTR2;
01652  M01S01527.fsedata +++|    FILPTR1 == FILPTR2;
01653  M01S01528.fsedata +++|    LINNUM1 == LINNUM2;
01654  M01S01529.fsedata +++|    CHRPTR1 == CHRPTR2;
01655  M01S01530.fsedata +++|    END
01656  M01S01531.fsedata +++|  ELSE IF WHICHLIN EQ 3 THEN
01657  M01S01532.fsedata +++|    BEGIN
01658  M01S01533.fsedata +++|    LINPTR1 == LINPTR3;
01659  M01S01534.fsedata +++|    FILPTR1 == FILPTR3;
01660  M01S01535.fsedata +++|    LINNUM1 == LINNUM3;
01661  M01S01536.fsedata +++|    CHRPTR1 == CHRPTR3;
01662  M01S01537.fsedata +++|    END
01663  M01S01538.fsedata +++|
01664  M01S01539.fsedata +++|  CHRPTR1=0;                   # DEFAULT CHARACTER POINTERS  #
01665  M01S01540.fsedata +++|  IF WHICHLIN EQ 2 THEN CHRPTR1=BUFCM1;
01666  M01S01541.fsedata +++|
01667  M01S01542.fsedata +++|
01668  M01S01543.fsedata +++|SCNLINLOOP:                  # THIS IS THE MAIN LOOP       #
01669  M01S01544.fsedata +++|  GOTO SCNLINSW[TOKENTYPE];  # DISPATCH BY SYNTAX          #
01670  M01S01545.fsedata +++|
01671  M01S01546.fsedata +++|SLDELIMIT: SLCOLON:
01672  M01S01547.fsedata +++|SLSEMI: SLEOL: SLOTHER: SLCONTROL: SLEQUAL:
01673  M01S01548.fsedata +++|  GOTO SLDONE;
01674  M01S01549.fsedata +++|
01675  M01S01550.fsedata +++|SLPAREN:
01676  M01S01551.fsedata +++|  # SCAN FILE NAME.  IF MATCHES CURRENT FILE, WE CAN CONTINUE #
01677  M01S01552.fsedata +++|  # SCANNING.  IF NOT, WE MUST ACCESS FILE AND RE-START ENTIRE#
01678  M01S01553.fsedata +++|  # SCAN SO THAT RELOCATABLE VALUES WILL BE FRESH.            #
01679  M01S00010.@000046 +++|  IF SCANSFILE THEN
01680  M01S00011.@000046 +++|    BEGIN                            # IF ALREADY SCANNED SOURCE #
01681  M01S00012.@000046 +++|    IF NOT SCANTO THEN
01682  M01S00013.@000046 +++|      BEGIN                          # IF NO *TO* #
01683  M01S00014.@000046 +++|      ERRJUMP ("*TO* REQUIRED BEFORE DESTINATION FILE$");
01684  M01S00015.@000046 +++|      END
01685  M01S00016.@000046 +++|    END
01686  M01S01554.fsedata +++|  SCNFILE(READNAM);
01687  M01S01555.fsedata +++|  IF READNAM NQ PADNAME(FILENAM[FILNUM]) THEN
01688  M01S01556.fsedata +++|    BEGIN
01689  M01S00002.@000029 +++|    IF WHICHLIN EQ 2 THEN
01690  M01S00003.@000029 +++|      BEGIN
01691  M01S00004.@000029 +++|      WHICHLIN=1;
01692  M01S00005.@000029 +++|      LINPTR2=-1;
01693  M01S00006.@000029 +++|      FILPTR2=0;
01694  M01S00007.@000029 +++|      LINNUM2=-1;
01695  M01S00008.@000029 +++|      CHRPTR2=-1;
01696  M01S00009.@000029 +++|      END
01697  M01S01557.fsedata +++|    FORCEFILE;
01698  M01S01558.fsedata +++|    LINPTR1=CURF(FILNUM)-TOPF(FILNUM);
01699  M01S01559.fsedata +++|    FILPTR1=FDLF(FILNUM);      # ASSURE ONLY ONE MORE TRY    #
01700  M01S00017.@000046 +++|    IF SCNONCE THEN
01701  M01S00018.@000046 +++|      BEGIN                          # IF ERROR IN SYNTAX #
01702  M01S00019.@000046 +++|      TMP1 = 0;
01703  M01S00020.@000046 +++|      IF SCNLINZ THEN TMP1 = O"32";
01704  M01S00021.@000046 +++|      IF SCNLINY THEN TMP1 = O"31";
01705  M01S00022.@000046 +++|      IF SCNLINX THEN TMP1 = O"30";
01706  M01S00023.@000046 +++|      IF TMP1 EQ 0 THEN
01707  M01S00024.@000046 +++|        BEGIN                        # IF NOT *XYZ* ERROR #
01708  M01S00025.@000046 +++|        TOKENPOS = ORIGSCNLIN;
01709  M01S00026.@000046 +++|        ERRJUMP ("ONLY ONE RANGE ALLOWED$");
01710  M01S00027.@000046 +++|        END
01711  M01S00028.@000046 +++|      GOTO SLERROR;
01712  M01S00029.@000046 +++|      END
01713  M01S00030.@000046 +++|    SCNONCE = TRUE;
01714  M01S01560.fsedata +++|    SCANPOS=ORIGSCNLIN;        # FORCE ENTIRE EXPRESSION RESCAN      #
01715  M01S01561.fsedata +++|    TOKEN;
01716  M01S01562.fsedata +++|    GOTO SCNLINLOOP;
01717  M01S01563.fsedata +++|    END
01718  M01S00031.@000046 +++|  ELSE
01719  M01S00032.@000046 +++|    BEGIN
01720  M01S00033.@000046 +++|    SCANSFILE = TRUE;
01721  M01S00034.@000046 +++|    IF NOT SCANTO THEN
01722  M01S00035.@000046 +++|      BEGIN                          # IF NOT TARGET FILE #
01723  M01S00036.@000046 +++|      TMP1 = 0;
01724  M01S00037.@000046 +++|      IF SCNLINZ AND XYZFILE[2] NQ FDLF(FILNUM) THEN TMP1 = O"32";
01725  M01S00038.@000046 +++|      IF SCNLINY AND XYZFILE[1] NQ FDLF(FILNUM) THEN TMP1 = O"31";
01726  M01S00039.@000046 +++|      IF SCNLINX AND XYZFILE[0] NQ FDLF(FILNUM) THEN TMP1 = O"30";
01727  M01S00040.@000046 +++|      IF TMP1 NQ 0 THEN GOTO SLERROR;
01728  M01S00041.@000046 +++|      END
01729  M01S00042.@000046 +++|    END
01730  M01S01564.fsedata +++|  GOTO SLDONE;
01731  M01S01565.fsedata +++|
01732  M01S01566.fsedata +++|SLCURRENT:
01733  M01S01567.fsedata +++|  IF WHICHLIN EQ 3 THEN EXTENDFILE(FALSE);
01734  M01S01568.fsedata +++|  LINPTR1=CURF(FILNUM)-TOPF(FILNUM);
01735  M01S01569.fsedata +++|SLCUR2:
01736  M01S01570.fsedata +++|  FILPTR1=FDLF(FILNUM);
01737  M01S01571.fsedata +++|SLCUR3:
01738  M01S01572.fsedata +++|  TOKEN;                     # TO GLEAN OUT MORE #
01739  M01S01573.fsedata +++|SLCUR4:
01740  M01S01574.fsedata +++|  IF TOKENTYPE EQ TYPST"PLUS" THEN GOTO SLPLUS2;
01741  M01S01575.fsedata +++|  IF TOKENTYPE EQ TYPST"MINUS" THEN GOTO SLMINUS2;
01742  M01S01576.fsedata +++|  GOTO SLDONE;
01743  M01S01577.fsedata +++|
01744  M01S01578.fsedata +++|SLFIRST:
01745  M01S01579.fsedata +++|  LINPTR1=1;
01746  M01S01580.fsedata +++|  GOTO SLCUR2;               # MORE SYNTAX??     #
01747  M01S01581.fsedata +++|
01748  M01S01582.fsedata +++|SLLAST:
01749  M01S01583.fsedata +++|  LINPTR1=BOTF(FILNUM)-1-TOPF(FILNUM);
01750  M01S01584.fsedata +++|  GOTO SLCUR2;               # MORE SYNTAX??     #
01751  M01S01585.fsedata +++|
01752  M01S01586.fsedata +++|SLPLUS:
01753  M01S01587.fsedata +++|  IF WHICHLIN EQ 3 THEN EXTENDFILE(FALSE);
01754  M01S01588.fsedata +++|  LINPTR1=CURF(FILNUM)-TOPF(FILNUM);
01755  M01S01589.fsedata +++|  FILPTR1=FDLF(FILNUM);
01756  M01S01590.fsedata +++|SLPLUS2:
01757  M01S01591.fsedata +++|  TEMP=1;
01758  M01S01592.fsedata +++|SLPLUS3:
01759  M01S01593.fsedata +++|  TOKEN;
01760  M01S01594.fsedata +++|  IF TOKENTYPE EQ TYPST"DIGIT" THEN
01761  M01S01595.fsedata +++|    BEGIN
01762  M01S01596.fsedata +++|    LINPTR1=LINPTR1+TEMP*TOKENVAL;
01763  M01S01597.fsedata +++|    TOKEN;
01764  M01S01598.fsedata +++|    END
01765  M01S01599.fsedata +++|  ELSE LINPTR1=LINPTR1+TEMP;
01766  M01S01600.fsedata +++|  LINNUM1=-1;
01767  M01S01601.fsedata +++|  GOTO SLCUR4;
01768  M01S01602.fsedata +++|
01769  M01S01603.fsedata +++|SLMINUS:
01770  M01S01604.fsedata +++|  IF WHICHLIN EQ 3 THEN EXTENDFILE(FALSE);
01771  M01S01605.fsedata +++|  LINPTR1=CURF(FILNUM)-TOPF(FILNUM);
01772  M01S01606.fsedata +++|  FILPTR1=FDLF(FILNUM);
01773  M01S01607.fsedata +++|SLMINUS2:
01774  M01S01608.fsedata +++|  TEMP=-1;
01775  M01S01609.fsedata +++|  GOTO SLPLUS3;
01776  M01S01610.fsedata +++|
01777  M01S01611.fsedata +++|SLX:
01778  M01S00043.@000046 +++|  SCNLINX = TRUE;
01779  M01S01612.fsedata +++|  TEMP=0;
01780  M01S01613.fsedata +++|SLX2:
01781  M01S01614.fsedata +++|  LINPTR1=REGLINE[XYZREG+TEMP]-REGLINE[XYZTOP+TEMP];
01782  M01S01615.fsedata +++|  FILPTR1=XYZFILE[TEMP];
01783  M01S01616.fsedata +++|  CHRPTR1=XYZCHAR[TEMP];
01784  M01S01617.fsedata +++|  IF CHRPTR1 GQ 0 THEN CHARRANGE=TRUE;
01785  M01S01618.fsedata +++|  GOTO SLCUR3;
01786  M01S01619.fsedata +++|
01787  M01S01620.fsedata +++|SLY:
01788  M01S00044.@000046 +++|  SCNLINY = TRUE;
01789  M01S01621.fsedata +++|  TEMP=1;
01790  M01S01622.fsedata +++|  GOTO SLX2;
01791  M01S01623.fsedata +++|
01792  M01S01624.fsedata +++|SLZ:
01793  M01S00045.@000046 +++|  SCNLINZ = TRUE;
01794  M01S01625.fsedata +++|  TEMP=2;
01795  M01S01626.fsedata +++|  GOTO SLX2;
01796  M01S01627.fsedata +++|
01797  M01S01628.fsedata +++|SLDIGIT:
01798  M01S01629.fsedata +++|  IF NUMBERED[FILNUM] NQ 0 THEN
01799  M01S01630.fsedata +++|    BEGIN
01800  M01S01631.fsedata +++|    LINNUM1=TOKENVAL;
01801  M01S01632.fsedata +++|    PUSH;                    # REMEMBER WHERE WE ARE       #
01802  M01S01633.fsedata +++|    POSN;          # SEARCH FOR THAT LINE        #
01803  M01S01634.fsedata +++|    LINPTR1=CURRENT-TOPF(FILNUM);
01804  M01S01635.fsedata +++|    POP;
01805  M01S01636.fsedata +++|    END
01806  M01S01637.fsedata +++|  ELSE LINPTR1=TOKENVAL;
01807  M01S01638.fsedata +++|  GOTO SLCUR2;               # FOR MORE SYNTAX   #
01808  M01S01639.fsedata +++|
01809  M01S01640.fsedata +++|SLLETTER:
01810  M01S01641.fsedata +++|  FOR TMP1=0 STEP 1 UNTIL 5 DO
01811  M01S01642.fsedata +++|    BEGIN
01812  M01S01643.fsedata +++|    IF KEYWORD[KEYWDNDX] EQ LINEKEYWD[TMP1]
01813  M01S01644.fsedata +++|      THEN GOTO SLKEYSW[TMP1];
01814  M01S01645.fsedata +++|    END
01815  M01S01646.fsedata +++|
01816  M01S01647.fsedata +++|SLDONE:
Line S01648 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000046
Seq #  *Modification Id* Act 
----------------------------+
01817  M02S01648.@000046 ---|  IF TOKENTYPE EQ TYPST"PAREN" THEN GOTO SLPAREN;
01818  M01S00046.@000046 +++|  IF TOKENTYPE EQ TYPST"PAREN" THEN GOTO SLPAREN;
01819  M01S00047.@000046 +++|
01820  M01S01649.fsedata +++|
01821  M01S01650.fsedata +++|  POPTEMP;
01822  M01S01651.fsedata +++|  IF WHICHLIN EQ 2 THEN
01823  M01S01652.fsedata +++|    BEGIN
01824  M01S01653.fsedata +++|    CHRPTR1 == CHRPTR2;
01825  M01S01654.fsedata +++|    LINPTR1 == LINPTR2;
01826  M01S01655.fsedata +++|    FILPTR1 == FILPTR2;
01827  M01S01656.fsedata +++|    LINNUM1 == LINNUM2;
01828  M01S01657.fsedata +++|    END
01829  M01S01658.fsedata +++|  ELSE IF WHICHLIN EQ 3 THEN
01830  M01S01659.fsedata +++|    BEGIN
01831  M01S01660.fsedata +++|    CHRPTR1 == CHRPTR3;
01832  M01S01661.fsedata +++|    LINPTR1 == LINPTR3;
01833  M01S01662.fsedata +++|    FILPTR1 == FILPTR3;
01834  M01S01663.fsedata +++|    LINNUM1 == LINNUM3;
01835  M01S01664.fsedata +++|    END
01836  M01S01665.fsedata +++|  WHICHLIN=WHICHLIN+1;
01837  M01S01666.fsedata +++|  WHICHDGT=WHICHLIN;
01838  M01S01667.fsedata +++|
01839  M01S00048.@000046 +++|  IORET;
01840  M01S00049.@000046 +++|
01841  M01S00050.@000046 +++|SLERROR:
01842  M01S00051.@000046 +++|  ERRSTRING = "  POINTER NOT SET IN FILE ";
01843  M01S00052.@000046 +++|  C<26,07>ERRSTRING = C<0,7>READNAM;
01844  M01S00053.@000046 +++|  C<00,01>ERRSTRING = TMP1;
01845  M01S00054.@000046 +++|  C<33,01>ERRSTRING = "$";
01846  M01S00055.@000046 +++|  TOKENPOS = ORIGSCNLIN;
01847  M01S00056.@000046 +++|  ERRJUMP (ERRSTRING);
01848  M01S01668.fsedata +++|
01849  M01S01669.fsedata +++|IOEND                        # OF SCNLIN         #
01850  M01S01670.fsedata +++|PAGE                         # SCANSET - FOR "SET" COMMAND  #
01851  M01S01671.fsedata +++|
01852  M01S01672.fsedata +++|
01853  M01S01673.fsedata +++|PROC SCANSET;
01854  M01S01674.fsedata +++|  IOBEGIN(SCANSET)
01855  M01S01675.fsedata +++|#
01856  M01S01676.fsedata +++|**        SCANSET - SCAN SYNTAX OF SET SUBCOMMANDS.
01857  M01S01677.fsedata +++|*
01858  M01S01678.fsedata +++|*         SCANSET IS CALLED WHEN THE SET COMMAND VERB HAS BEEN
01859  M01S01679.fsedata +++|*         RECOGNIZED.  THIS ROUTINE DETERMINES THE SUBCOMMAND, THEN
01860  M01S01680.fsedata +++|*         SCANS SUB-SYNTAX AS APPROPRIATE AND PERFORMS ALL
01861  M01S01681.fsedata +++|*         SUBCOMMAND EXECUTION.
01862  M01S01682.fsedata +++|*
01863  M01S01683.fsedata +++|*         ENTRY  SCANPOS, TOKENPOS - IDENTIFY SUBCOMMAND SYNTAX.
01864  M01S01684.fsedata +++|*
01865  M01S01685.fsedata +++|*         EXIT   COMMAND FULLY EXECUTED.
01866  M01S01686.fsedata +++|*                VIA QQSINGLE IN MULTI-USER VERSION FOR TRANSITION
01867  M01S01687.fsedata +++|*                    TO SINGLE-USER WITH RE-EXECUTION.
01868  M01S01688.fsedata +++|*                SCANPOS, TOKENPOS - ADVANCED BEYOND END OF COMMAND.
01869  M01S01689.fsedata +++|*                SCANNER MAY BE CALLED FOR SOME SUBCOMMANDS.
01870  M01S01690.fsedata +++|*                SETMARK POSSIBLY CALLED.
01871  M01S01691.fsedata +++|*                SCREEN MODE INITIALIZATION POSSIBLE.
01872  M01S01692.fsedata +++|*                TABVECTOR POSSIBLY SETUP.
01873  M01S01693.fsedata +++|*                X,Y,Z REGISTER POSSIBLY SETUP.
01874  M01S01694.fsedata +++|*                CURRENT FILE POSSIBLY RENAMED.
01875  M01S01695.fsedata +++|*                TABCHAR POSSIBLY SETUP.
01876  M01S01696.fsedata +++|*                INCR, DINCR - POSSIBLY SETUP.
01877  M01S01697.fsedata +++|*                SCANKEY POSSIBLY CALLED.
01878  M01S01698.fsedata +++|*                FLOAT, NUMBERED[CURFILE] - POSSIBLY REDEFINED.
01879  M01S01699.fsedata +++|*                FKEYNUMROW - POSSIBLY REDEFINED.
01880  M01S01700.fsedata +++|*                CHARRANGE - POSSIBLY DEFINED.
01881  M01S01701.fsedata +++|*                AUDITOFF - POSSIBLY REDEFINED.
01882  M01S01702.fsedata +++|*                USRUMLIN, USRNUMCOL, EDITFIELD, USRSPLTSIZ -
01883  M01S01703.fsedata +++|*                    POSSIBLY REDEFINED.
01884  M01S01704.fsedata +++|*                WIDTH - POSSIBLY REDEFINED.
01885  M01S01705.fsedata +++|*
Line S01706 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000022
Seq #  *Modification Id* Act 
----------------------------+
01886  M02S01706.@000022 ---|*         CALLS  TOKEN, ERRJUMP, SCNEOC, CLEARSCREEN, SCANNER, SETMARK,
Line S01707 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000022
Seq #  *Modification Id* Act 
----------------------------+
01887  M02S01707.@000022 ---|*                SCNEQNAM, VDTGTA, TTSYNC, VDTGTM, VDTSTM, COPYTABS,
Line S01708 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000022
Seq #  *Modification Id* Act 
----------------------------+
01888  M02S01708.@000022 ---|*                SETUPSCREEN, SCNLSTCOL, SCNCHAR,
Line S01709 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000022
Seq #  *Modification Id* Act 
----------------------------+
01889  M02S01709.@000022 ---|*                SCNEQVAL, SCANFUNC, SCNONOFF, AUDITEND, MIN, MAX,
Line S01710 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000022
Seq #  *Modification Id* Act 
----------------------------+
01890  M02S01710.@000022 ---|*                PAINTALL.
01891  M01S00001.@000022 +++|*         CALLS  AUDITEND, CLEARSCREEN, COPYTABS, ERRJUMP, FSEEDIT,
01892  M01S00002.@000022 +++|*                MIN, MAX, PAINTALL, SCANFUNC, SCANNER, SCNCHAR,
01893  M01S00003.@000022 +++|*                SCNEOC, SCNEQNAM, SCNEQVAL, SCNLSTCOL, SCNONOFF,
01894  M01S00004.@000022 +++|*                SETMARK, SETUPSCREEN, TOKEN, TTSYNC, VDTGTA,
Line S00005 Modification History
M01 (Yanked) (Added by) @000022
M02 (Yanked) (Updated by) @000033
Seq #  *Modification Id* Act 
----------------------------+
01895  M02S00005.@000033 ---|*                VDTGTD, VDTGTM, VDTSTM.
01896  M01S00002.@000033 +++|*                VDTSTD, VDTSTM.
01897  M01S01711.fsedata +++|*
01898  M01S01712.fsedata +++|*         USES   KEYWDTYPE, ALL TOKENXXXX VARIABLES, LINPTR1,
01899  M01S01713.fsedata +++|*                LINPTR2, LINCTR, VTMODEL, LINPTR3, LINNUM1, LINNUM2,
01900  M01S01714.fsedata +++|*                READNAM, KEYWDNDX, WHICHDGT.
01901  M01S01715.fsedata +++|#
01902  M01S01716.fsedata +++|
01903  M01S01717.fsedata +++|  CONTROL IFEQ MULTI,1;
01904  M01S01718.fsedata +++|    XREF LABEL QQSINGLE;
01905  M01S01719.fsedata +++|  CONTROL FI;
01906  M01S01720.fsedata +++|
01907  M01S01721.fsedata +++|  ITEM TMP1, TMP2, BOOL B, TMPNAM C(7);
01908  M01S01722.fsedata +++|
Line S01723 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000049
Seq #  *Modification Id* Act 
----------------------------+
01909  M02S01723.@000049 ---|  DEF NUMSETKEYS #17#;
Line S01724 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000049
Seq #  *Modification Id* Act 
----------------------------+
01910  M02S01724.@000049 ---|  ARRAY SETKEYS[0:NUMSETKEYS]; ITEM SETKEY C(0,0,10) = [
Line S01725 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000049
Seq #  *Modification Id* Act 
----------------------------+
01911  M02S01725.@000049 ---|    "ANNOUNCE", "CHAR", "FILENAME", "HEADER", "INCREMENT", "KEY",
Line S01726 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000049
Seq #  *Modification Id* Act 
----------------------------+
01912  M02S01726.@000049 ---|    "LINE", "MARK", "NUMBER", "PROMPT", "SCREEN", "TABS", "UNDO",
Line S01727 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000049
Seq #  *Modification Id* Act 
----------------------------+
01913  M02S01727.@000049 ---|    "VIEW", "WORD", "X", "Y", "Z" ];
Line S01728 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000049
Seq #  *Modification Id* Act 
----------------------------+
01914  M02S01728.@000049 ---|
Line S01729 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000049
Seq #  *Modification Id* Act 
----------------------------+
01915  M02S01729.@000049 ---|  SWITCH SETSW   SSANNOUNCE, SSCHAR, SSFILE, SSHEADER, SSINCR,
Line S01730 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000049
Seq #  *Modification Id* Act 
----------------------------+
01916  M02S01730.@000049 ---|    SSKEY, SSLINE, SSMARK, SSNUMBER, SSPROMPT, SSSCREEN, SSTABS,
Line S01731 Modification History
M01 (Added by) fsedata
M02 (Yanked) (Updated by) @000049
Seq #  *Modification Id* Act 
----------------------------+
01917  M02S01731.@000049 ---|    SSUNDO, SSVIEW, SSWORD, SSX, SSY, SSZ;
Line S00001 Modification History
M01 (Yanked) (Added by) @000049
M02 (Yanked) (Updated by) @000066
Seq #  *Modification Id* Act 
----------------------------+
01918  M02S00001.@000066 ---|  DEF NUMSETKEYS #20#;
01919  M01S00001.@000066 +++|  DEF NUMSETKEYS #21#;
01920  M01S00002.@000049 +++|  ARRAY SETKEYS[0:NUMSETKEYS]; ITEM SETKEY C(0,0,10) = [
Line S00003 Modification History
M01 (Yanked) (Added by) @000049
M02 (Yanked) (Updated by) @000066
Seq #  *Modification Id* Act 
----------------------------+
01921  M02S00003.@000066 ---|    "ANNOUNCE", "CHAR", "DCOLON", "FILENAME", "HEADER", "INCREMENT",
Line S00004 Modification History
M01 (Yanked) (Added by) @000049
M02 (Yanked) (Updated by) @000066
Seq #  *Modification Id* Act 
----------------------------+
01922  M02S00004.@000066 ---|    "JUMP", "KEY", "LINE", "MARK", "NUMBER", "PROMPT", "REWRITE",
Line S00005 Modification History
M01 (Yanked) (Added by) @000049
M02 (Yanked) (Updated by) @000066
Seq #  *Modification Id* Act 
----------------------------+
01923  M02S00005.@000066 ---|    "SCREEN", "TABS", "UNDO", "VIEW", "WORD", "X", "Y", "Z" ];
01924  M01S00002.@000066 +++|    "ANNOUNCE", "CHAR", "DCOLON", "ECHO", "FILENAME",
01925  M01S00003.@000066 +++|    "HEADER", "INCREMENT", "JUMP", "KEY", "LINE", "MARK",
01926  M01S00004.@000066 +++|    "NUMBER", "PROMPT", "REWRITE", "SCREEN", "TABS",
01927  M01S00005.@000066 +++|    "UNDO", "VIEW", "WORD", "X", "Y", "Z" ];
01928  M01S00006.@000049 +++|
Line S00007 Modification History
M01 (Yanked) (Added by) @000049
M02 (Yanked) (Updated by) @000066
Seq #  *Modification Id* Act 
----------------------------+
01929  M02S00007.@000066 ---|  SWITCH SETSW   SSANNOUNCE, SSCHAR, SSDORAC, SSFILE, SSHEADER, SSINCR,
Line S00008 Modification History
M01 (Yanked) (Added by) @000049
M02 (Yanked) (Updated by) @000066
Seq #  *Modification Id* Act 
----------------------------+
01930  M02S00008.@000066 ---|    SSJUMP, SSKEY, SSLINE, SSMARK, SSNUMBER, SSPROMPT, SSREWRITE,
Line S00009 Modification History
M01 (Yanked) (Added by) @000049
M02 (Yanked) (Updated by) @000066
Seq #  *Modification Id* Act 
----------------------------+
01931  M02S00009.@000066 ---|    SSSCREEN, SSTABS, SSUNDO, SSVIEW, SSWORD, SSX, SSY, SSZ;
01932  M01S00006.@000066 +++|  SWITCH SETSW   SSANNOUNCE, SSCHAR, SSDORAC, SSECHO, SSFILE,
01933  M01S00007.@000066 +++|    SSHEADER, SSINCR, SSJUMP, SSKEY, SSLINE, SSMARK,
01934  M01S00008.@000066 +++|    SSNUMBER, SSPROMPT, SSREWRITE, SSSCREEN, SSTABS,
01935  M01S00009.@000066 +++|    SSUNDO, SSVIEW, SSWORD, SSX, SSY, SSZ;
01936  M01S01732.fsedata +++|
01937  M01S01733.fsedata +++|
01938  M01S01734.fsedata +++|  KEYWDTYPE=3;
01939  M01S01735.fsedata +++|  SCANPOS=TOKENPOS;
01940  M01S01736.fsedata +++|  TOKEN;
01941  M01S01737.fsedata +++|  IF TOKENTYPE NQ TYPST"LETTER" THEN
01942  M01S01738.fsedata +++|    BEGIN
01943  M01S01739.fsedata +++|    ERRJUMP("KEYWORD MUST FOLLOW SET$");
01944  M01S01740.fsedata +++|    END
01945  M01S01741.fsedata +++|  TMP1=-1;
01946  M01S01742.fsedata +++|  FOR TMP2=0 STEP 1 UNTIL NUMSETKEYS DO
01947  M01S01743.fsedata +++|    BEGIN
01948  M01S01744.fsedata +++|    IF KEYWORD[KEYWDNDX] EQ SETKEY[TMP2] THEN TMP1=TMP2;
01949  M01S01745.fsedata +++|    END
01950  M01S01746.fsedata +++|  IF TMP1 LS 0 THEN ERRJUMP("KEYWORD MUST FOLLOW SET$");
01951  M01S01747.fsedata +++|  TOKEN;
01952  M01S01748.fsedata +++|  GOTO SETSW[TMP1];
01953  M01S01749.fsedata +++|
01954  M01S00010.@000049 +++|SSDORAC:                             # *DC* OR ASCII COLONS ON EXIT #
01955  M01S00011.@000049 +++|    SCNONOFF(BOOL);
01956  M01S00012.@000049 +++|    SCNEOC;
01957  M01S00013.@000049 +++|    ZEROCOLOUT = BOOL;               # DO AS USER ASKS #
01958  M01S00014.@000049 +++|    ZEROCOLASK = TRUE;               # COLON QUESTION "ASKED" #
01959  M01S00015.@000049 +++|    GOTO SSDONE;
01960  M01S00016.@000049 +++|
01961  M01S00010.@000066 +++|SSECHO:                              # SET ECHO ON OR OFF #
01962  M01S00011.@000066 +++|    SCNONOFF(BOOL);
01963  M01S00012.@000066 +++|    SCNEOC;
01964  M01S00013.@000066 +++|    ECHOOFF = NOT BOOL;              # SET ECHO ON OR OFF #
01965  M01S00014.@000066 +++|    GOTO SSDONE;
01966  M01S00015.@000066 +++|
01967  M01S00017.@000049 +++|SSJUMP:                              # AUTO INDENT, BLOCK LANGUAGES #
01968  M01S00018.@000049 +++|    SCNONOFF(BOOL);
01969  M01S00019.@000049 +++|    SCNEOC;
01970  M01S00020.@000049 +++|    AUTOINDENT = BOOL;               # DO AS USER ASKS #
01971  M01S00021.@000049 +++|    GOTO SSDONE;
01972  M01S00022.@000049 +++|
01973  M01S00023.@000049 +++|SSREWRITE:                           # SET REWRITE (CHANGED FLAG) #
01974  M01S00024.@000049 +++|    SCNONOFF(BOOL);
01975  M01S00025.@000049 +++|    SCNEOC;
01976  M01S00026.@000049 +++|    IF LOCKED[CURFILE] EQ 0 THEN
01977  M01S00027.@000049 +++|      BEGIN                          # IF FILE IS NOT LOCKED #
01978  M01S00028.@000049 +++|      IF BOOL THEN
01979  M01S00029.@000049 +++|        BEGIN                        # IF USER WANTS CHANGED #
01980  M01S00030.@000049 +++|        CHANGED[CURFILE] = 1;
01981  M01S00031.@000049 +++|        IF FILENAM[1] EQ FILENAM[2] THEN
01982  M01S00032.@000049 +++|          BEGIN                      # IF SAME FILE IN BOTH SPLITS #
01983  M01S00033.@000049 +++|          CHANGED[1] = 1;
01984  M01S00034.@000049 +++|          CHANGED[2] = 1;
01985  M01S00035.@000049 +++|          END
01986  M01S00036.@000049 +++|        END
01987  M01S00037.@000049 +++|      ELSE
01988  M01S00038.@000049 +++|        BEGIN                        # CLEAR CHANGED STATUS #
01989  M01S00039.@000049 +++|        CHANGED[CURFILE] = 0;
01990  M01S00040.@000049 +++|        IF FILENAM[1] EQ FILENAM[2] THEN
01991  M01S00041.@000049 +++|          BEGIN                      # IF SAME FILE IN BOTH SPLITS #
01992  M01S00042.@000049 +++|          CHANGED[1] = 0;
01993  M01S00043.@000049 +++|          CHANGED[2] = 0;
01994  M01S00044.@000049 +++|          END
01995  M01S00045.@000049 +++|        END
01996  M01S00046.@000049 +++|      END
01997  M01S00047.@000049 +++|    ELSE
01998  M01S00048.@000049 +++|      BEGIN                          # LOCKED FILE, REJECT CHANGE #
01999  M01S00049.@000049 +++|      IF BOOL THEN ERRJUMP("CANNOT CHANGE READ-ONLY FILE$");
Proceed to Part 1
cdc/nos2.source/opl.opl871/deck/fsedata.txt ยท Last modified: by 127.0.0.1