[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/smallbasic/smallbasic.github.io/master/samples/node/137.bas [Back]  [Original]

'#sec:Main
REPEAT
  PRINT ":";
  LINEINPUT cmd$
  cmd$ = SQUEEZE(cmd$)
  IF LEN(cmd$) = 0 THEN
    EXIT LOOP
  ENDIF
  SPLIT cmd$," ",cmd
if 0 then ?UBOUND(cmd),cmd
  IF UBOUND(cmd) = 0 THEN
    cmd = [cmd(0),""]
  ENDIF
if 0 then ?UBOUND(cmd),cmd
  c = cmd(0)

  IF c = "ls" THEN
    FOR ci = 1 TO UBOUND(cmd)
      PARSE cmd(ci)
      IF pflag THEN
        IF ci > 1  THEN
            INPUT "NEXT...",ans
            IF LCASE(LEFT(ans,1)) = "n" THEN
              EXIT FOR
            ENDIF
          ENDIF
        ENUM
        j = 0
        FOR i = 0 TO fcount - 1
          IF dir + flist(i)  "MEMO:$$$DELETED$$$" THEN
            IF j MOD 12 = 0 THEN
              IF j > 0 THEN
                INPUT "MORE...",ans
                IF LCASE(LEFT(ans,1)) = "n" THEN
                  EXIT FOR
                ENDIF
              ENDIF
              PRINT "List of ";spec
            ENDIF
            f = LEFT(flist(i),24) + IF(LEN(flist(i)) > 24,CHR(133),"")
            h = FREEFILE
            OPEN dir + flist(i) FOR INPUT AS #h
            PRINT LOF(h),f
            CLOSE #h
            j = j + 1
          ENDIF
        NEXT
        IF j = 0 THEN
          PRINT "No files in ''";spec;"''"
        ENDIF
      ELSE
        PRINT "Invalid field: ''";cmd(ci);"''"
      ENDIF
    NEXT

  ELSEIF c = "cp" OR c = "mv" THEN
    IF UBOUND(cmd) < 2 THEN
      cmd = [cmd(0),cmd(1),""]
    ENDIF
    PARSE cmd(2)
    IF NOT pflag THEN
      PRINT "Invalid field: ''";cmd(2);"''"
    ELSE
      IF ("*" IN fn) OR ("?" IN fn) OR (spec = "MEMO:$$$DELETED$$$") THEN
        PRINT "Ambiguous destination"
      ELSE
        ddir = dir
        dfn = fn
        dspec = ddir + dfn
        PARSE cmd(1)
        IF NOT pflag THEN
          PRINT "Invalid field: ''";cmd(1);"''"
        ELSE
          ENUM
          j = 0
          FOR i = 0 TO fcount - 1
            sspec = dir + flist(i)
            IF sspec  "MEMO:$$$DELETED$$$" THEN
              IF LEN(dfn) = 0 THEN
                dspec = ddir + flist(i)
              ENDIF
              IF sspec = dspec THEN
                PRINT "Cannot copy/move file to itself"
              ELSE
                IF EXIST(dspec) THEN
                  INPUT "Overwrite ''" + dspec + "'' with ''" + sspec + "'' ";ans
                  IF LCASE(LEFT(ans,1)) = "y" THEN
                    ''KILL dspec
                  ELSE
                    c = ""
                  ENDIF
                ENDIF
                IF c  "" AND ddir = "MEMO:" AND dir  "MEMO:" THEN
                  h = FREEFILE
                  OPEN sspec FOR INPUT AS #h
                  IF LOF(h) > 3935 THEN
                    PRINT "Too large for MEMO: ''";sspec;"''"
                    c = ""
                  ENDIF
                ENDIF
                IF c = "cp" THEN
                  COPY sspec,dspec
                  PRINT "Copied ''";sspec;"'' to ''";dspec;"''"
                  j = j + 1
                ELSEIF c = "mv" THEN
                  RENAME sspec,dspec
                  PRINT "Moved ''";sspec;"'' to ''";dspec;"''"
                  j = j + 1
                ENDIF
              ENDIF
            ENDIF
          NEXT
          IF j = 0 THEN
            PRINT "Nothing to copy"
          ENDIF
        ENDIF
      ENDIF
    ENDIF
  
  ELSEIF c = "del" THEN
    FOR ci = 1 to UBOUND(cmd)
      PARSE cmd(ci)
      IF pflag THEN
        ENUM
        j = 0
        FOR i = 0 TO fcount - 1
          f = dir + flist(i)
          IF f  "MEMO:$$$DELETED$$$" THEN
            j = j + 1
            INPUT "Delete ''" + f + "'' ";ans
            IF LCASE(LEFT(ans,1)) = "y" THEN
              KILL f
              PRINT "Deleted"
            ENDIF
          ENDIF
        NEXT
        IF j = 0 THEN
          PRINT "No files in ''";spec;"''"
        ENDIF
      ELSE
        PRINT "Invalid field: ''";cmd(ci);"''"
      ENDIF
    NEXT

  ELSEIF c = "nf" THEN
    FOR ci = 1 to UBOUND(cmd)
      PARSE cmd(ci)
      IF pflag THEN
        IF ("*" IN fn) OR ("?" IN fn) OR (spec = "MEMO:$$$DELETED$$$") THEN
          PRINT "Ambiguous field: ''";cmd(ci);"''"
        ELSE
          IF EXIST(spec) THEN
            INPUT "Replace ''" + spec + "'' ";ans
            IF LCASE(LEFT(ans,1))  "y" THEN
              c = ""
            ENDIF
          ENDIF
          IF c  "" THEN
             h = FREEFILE
             OPEN spec FOR OUTPUT AS #h
             REPEAT
               PRINT ">";
               LINEINPUT f
               IF LCASE(f) = "@eof" THEN
                 EXIT LOOP
               ENDIF
               PRINT #h,f
             UNTIL
             CLOSE #h
             PRINT "Created ''";spec;"''"
          ENDIF
        ENDIF
      ELSE
        PRINT "Invalid field: ''";cmd(ci);"''"
      ENDIF
    NEXT

  ELSEIF c = "t" THEN
    FOR ci = 1 to UBOUND(cmd)
      PARSE cmd(ci)
      IF pflag THEN
        IF ci > 1  THEN
            INPUT "NEXT...",ans
            IF LCASE(LEFT(ans,1)) = "n" THEN
              EXIT FOR
            ENDIF
          ENDIF
        ENUM
        l = 0
        FOR i = 0 TO fcount - 1
          sspec = dir + flist(i)
          IF sspec  "MEMO:$$$DELETED$$$" THEN
            IF l > 0 THEN
              INPUT "NEXT...",ans
              IF LCASE(LEFT(ans,1)) = "n" THEN
                EXIT FOR
              ENDIF
            ENDIF
            l = l + 1
            h = FREEFILE
            OPEN sspec FOR INPUT AS #h
            k = 0
            j = 0
            hspec = LEFT(sspec,24) + IF(LEN(sspec) > 24,CHR(133),"")
            WHILE NOT EOF(h)
              LINEINPUT #h;f
              k = k + 1
              f0 = STR(k) + "." + CHR(9)
              ans = 0
              REPEAT
                IF j MOD 12 = 0 THEN
                  IF j > 0 THEN
                    INPUT "MORE...",ans
                    ans = LCASE(LEFT(ans,1))
                    IF ans = "n" THEN
                      EXIT LOOP
                    ENDIF
                  ENDIF
                  PRINT "Listing of ''";hspec;"''"
                ENDIF
                cont = LEN(f) > 25
                IF cont THEN
                  f1 = LEFT(f,25)
                  f = MID(f,26)
                ELSE
                  f1 = f
                ENDIF
                PRINT f0;f1
                f0 = CHR(9)
                j = j + 1
              UNTIL cont = 0
              IF ans = "n" THEN
                EXIT LOOP
              ENDIF
            WEND
            IF k = 0 THEN
              PRINT "No lines in ''";sspec;"''"
            ENDIF
            CLOSE #h
          ENDIF
        NEXT
        IF l = 0 THEN
          PRINT "No files in ''";spec;"''"
        ENDIF
      ELSE
        PRINT "Invalid field: ''";cmd(ci);"''"
      ENDIF
    NEXT

  ELSE
    PRINT "Unknown command: ''";c;"''"
  ENDIF
UNTIL
END

SUB PARSE(field)
LOCAL f,p
  SPLIT field,":",p
if 0 then ?"field=''";field;"''","p=";p
  IF LEN(p) THEN
    IF UBOUND(p) = 0 THEN
      IF ":" IN field THEN
        p = [p(0),""]
      ELSE
        p = ["",p(0)]
      ENDIF
    ENDIF
  ELSE
    p = ["",""]
  ENDIF
if 0 then ?"field=''";field;"''","p=";p
  dir = p(0)
  f = LCASE(LEFT(dir,1))
  IF f = "m" THEN
    dir = "MEMO:"
  ELSEIF f = "p" OR f = "d" THEN
    dir = "PDOC:"
  ELSEIF LEN(dir) > 0 THEN
    pflag = 0
    EXIT FUNC
  ENDIF
  fn = p(1)
  IF LEN(fn) > 0 THEN
    mask = fn
  ELSE
    mask = "*"
  ENDIF
  spec = dir + mask
if 0 then ?"dir=''";dir;"''";" fn=''";fn;"''";" mask=''";mask;"''";" spec=''";spec;"''"
  pflag = 1
END

SUB ENUM
  flist = FILES(spec)
  fcount = LEN(flist)
if 0 then ?"fcount=";fcount;" flist=";flist
END
'

Web Proxy Viewer  |  New URL  |  Original Page