home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_BAS / PRO98SRC.ZIP / EDLIN.BAS < prev    next >
BASIC Source File  |  1994-01-14  |  7KB  |  164 lines

  1. SUB EDLIN (Fi$)
  2.         IF Fi$="" THEN
  3.                 PROZOPRINT "No filename specified."+CHR$(7)+CrLf$
  4.                 EXIT SUB
  5.         END IF
  6.         DIM FB$(5000)
  7.         IF Dir$(Fi$) <>"" THEN
  8.                 FF=FREEFILE
  9.                 OPEN Fi$ FOR INPUT AS #FF
  10.                 DO UNTIL EOF(1)
  11.                 INCR X
  12.                 LINE INPUT #1,FB$(X)
  13.                 IF X=5000 THEN
  14.                         PROZOPRINT "File too big, 5000 lines loaded."+CHR$(7)+CrLf$
  15.                         EXIT LOOP
  16.                 END IF
  17.                 LOOP
  18.                 CLOSE #FF
  19.         ELSE
  20.                 PROZOPRINT "New file."+CrLf$
  21.         END IF
  22.  
  23. X=1
  24. DO
  25.         PROZOPRINT "*"
  26.         A$=PROZOINPUT$
  27.         A$=LTRIM$(A$)
  28.         IF ExitFlag% THEN EXIT SUB
  29.         IF A$="" THEN GOSUB EdlinHelp:ITERATE LOOP
  30.         C$=LEFT$(A$,1)
  31.         IF LEN(A$)>1 THEN A$=LTRIM$(MID$(A$,2)) ELSE A$=""
  32.         SELECT CASE UCASE$(C$)
  33.                 CASE "N"
  34.                     if len(a$) then if not instr(a$,"\") then fi$=A$
  35.                 CASE "Q"
  36.                         QuitFlag%=%TRUE
  37.                 CASE "W","E"
  38.                         FOR X=1 TO 5000
  39.                         IF LEN(FB$(X)) THEN Y=X
  40.                         NEXT X
  41.                         'IF LEN(A$) THEN Fi$=LTRIM$(A$)
  42.                         OPEN Fi$ FOR OUTPUT AS #FF
  43.                         FOR X=1 TO Y
  44.                                 PRINT #FF, FB$(X)
  45.                         NEXT X
  46.                         CLOSE #FF
  47.                         PROZOPRINT STR$(Y)+" lines written to " + FI$+CrLf$
  48.  
  49.                         IF UCASE$(C$)="E" THEN QuitFlag%=%TRUE
  50.  
  51.                 CASE "L"
  52.                         IF INSTR(A$,ANY " ,;:") THEN Z=VAL(MID$(A$,_
  53.                          INSTR(A$,ANY " ,;:")+1)):A$=LEFT$(A$,_
  54.                          INSTR(A$,ANY " ,;:")-1) ELSE Z=0
  55.                         IF LEN(A$) THEN X=VAL(A$)
  56.                         IF X=0 THEN X=1
  57.                         IF Z=0 THEN Z=1
  58.                         FOR Y=X TO X+(Z-1)
  59.                                 K$=PROZOINKEY$:IF len(K$) THEN EXIT FOR
  60.                                 PROZOPRINT LTRIM$(STR$(Y))+" "+FB$(Y)+CrLf$
  61.                         NEXT Y
  62.                 CASE "D"
  63.                         IF INSTR(A$,ANY " ,;:") THEN Z=VAL(MID$(A$,_
  64.                          INSTR(A$,ANY " ,;:")+1)):A$=LEFT$(A$,_
  65.                          INSTR(A$,ANY " ,;:")-1) ELSE Z=0
  66.                         IF LEN(A$) THEN X=VAL(A$)
  67.                         IF X>0 THEN
  68.                                 IF Z=0 THEN
  69.                                         FB$(5000)=""
  70.                                         FOR YY=X TO 4999
  71.                                          FB$(YY)=FB$(YY+1)
  72.                                         NEXT X
  73.                                         'ARRAY DELETE FB$(X)
  74.                                         PROZOPRINT "Line"+STR$(X)+" deleted."+CrLf$
  75.                                 ELSE
  76.                                         IF Z<5000-X THEN
  77.                                         FOR Y=X TO X+(Z-1)
  78.                                                 FB$(5000)=""
  79.                                                 FOR YY=X TO 4999
  80.                                                  FB$(YY)=FB$(YY+1)
  81.                                                 NEXT YY
  82.                                                 'ARRAY DELETE FB$(Y)
  83.                                         NEXT Y
  84.                                         PROZOPRINT STR$(Z)+" lines deleted."+CrLf$
  85.                                         ELSE
  86.                                         PROZOPRINT CHR$(7)+"Error: too many lines specified"+CrLf$
  87.                                         END IF
  88.                                 END IF
  89.                         ELSE
  90.                                 PROZOPRINT "No lines deleted."+CrLf$
  91.                         END IF
  92.  
  93.                 CASE "I"
  94.                         IF VAL(A$) THEN
  95.                                 X=VAL(A$)
  96.                                 IF X<5001 THEN
  97.                                  GetMore:
  98.                                  PROZOPRINT LTRIM$(STR$(X))+" "
  99.                                  A$=PROZOINPUT$
  100.                                   IF A$="" THEN
  101.                                         PROZOPRINT "Insert finished."+CrLf$
  102.                                   ELSE
  103.                                         ARRAY INSERT FB$(X),A$
  104.                                         INCR X
  105.                                         GOTO GetMore
  106.                                   END IF
  107.                                  END IF
  108.                         ELSE
  109.                                 PROZOPRINT "No insert line specified."+CrLf$
  110.                         END IF
  111.  
  112.                 CASE "A"
  113.                         X=0
  114.                         FOR Y=1 TO 5000
  115.                         IF LEN(FB$(Y)) THEN X=Y
  116.                         NEXT Y
  117.                         INCR X
  118.                         IF X<5001 THEN
  119.                          GetMore2:
  120.                          PROZOPRINT LTRIM$(STR$(X))+" "
  121.                          A$=PROZOINPUT$
  122.                           IF A$="" THEN
  123.                                 PROZOPRINT "Append finished."+CrLf$
  124.                           ELSE
  125.                                 FB$(X)=A$
  126.                                 INCR X
  127.                                 GOTO GetMore2
  128.                           END IF
  129.                          END IF
  130.                 CASE ELSE
  131.                         IF VAL(C$+A$) THEN
  132.                          X=VAL(C$+A$)
  133.                          PROZOPRINT LTRIM$(STR$(X))+" "+FB$(X)+CrLf$
  134.                          OldV$=FB$(X)
  135.                          A$=PROZOINPUT$
  136.                          IF A$<>"" THEN FB$(X)=A$ ELSE PROZOPRINT "Edit aborted."+CrLf$
  137.                         END IF
  138.                END SELECT
  139.  
  140. LOOP UNTIL QuitFlag%
  141. EXIT SUB
  142.  
  143. EdlinHelp:
  144. PROZOPRINT "Editor help - " +CrLf$
  145. PROZOPRINT "The character * is your command prompt.  When you see this character you" +CrLf$
  146. PROZOPRINT "May enter a line number to edit followed by a carriage return.  The editor" + CrLf$
  147. PROZOPRINT "will show you the line as it currently is and you may edit it.  Or, you may"+CrLf$
  148. PROZOPRINT "enter any one of these one-letter commands:"+CrLf$+CrLf$
  149. PROZOPRINT "Q - Quit without saving"+CrLf$
  150. PROZOPRINT "W - Save the document as it currently is, then continue"+CrLf$
  151. PROZOPRINT "E - Save and then Quit"+CrLf$
  152. PROZOPRINT "L - List, follow L with a line number, and an optional number of lines, i.e."+CrLf$
  153. PROZOPRINT "    L20 will list on the screen just line 20, or"+CrLf$
  154. PROZOPRINT "    L1,10 will just list 10 lines starting at line 1"+CrLf$
  155. PROZOPRINT "D - Delete one line (i.e. D20) or add a number of lines to delete (i.e. D1,10)"+CrLf$
  156. PROZOPRINT "I - Followed by a line number, allows you to begin typing and inserting lines"+CrLf$
  157. PROZOPRINT "A - Begins accepting lines of text to append to the document"+CrLf$
  158. PROZOPRINT "    Also use  A  or  I1  to start typing a new document"+CrLf$
  159. PROZOPRINT "N - followed by a filename will change the name of the document"+CrLf$
  160. return
  161. END SUB
  162.  
  163.  
  164.