home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / STMAGAZIN / STMAGAZIN.MSA / ANWENDUN.GEN / COMMAND / COMMAND.LST < prev    next >
File List  |  1986-02-06  |  9KB  |  393 lines

  1. Maxcmd%=23
  2. Drv%=0
  3. Dim Cmds$(Maxcmd%),Para$(20),Batch$(200)
  4. Cmds:
  5. Data "DIR","EXIT","CD","CLS","TYPE","MD","RD","ERA","VERSION","COPY"
  6. Data "REN","ECHO","CHDIR","MKDIR","RMDIR","ERASE","DATE","TIME","HELP"
  7. Data "GOTO","DUMP","PRINT",""
  8. Rest%=Fre(0)
  9. Hime%=Himem
  10. Reserve &H8000
  11. Restore Cmds
  12. I%=0
  13. Repeat
  14.   Read Cmds$(I%)
  15.   Inc I%
  16. Until Cmds$(I%-1)=""
  17. Maxcmd%=I%-1
  18. Cold:
  19. Drv%=Gemdos(25)
  20. Cls
  21. @Version
  22. Print Xbios(3)-Himem;" Bytes free"
  23. If Exist("AUTOEXEC.BAT")
  24.   Para$(0)="AUTOEXEC"
  25.   @Batch
  26. Endif
  27. Do
  28.   Hidem
  29.   Print Chr$(Drv%+65);">";
  30.   Form Input 78,Lin$
  31.   If Lin$<>""
  32.     Gosub Exe
  33.   Endif
  34. Loop
  35. Procedure Exe
  36.   @Getpara
  37.   I%=0
  38.   Repeat
  39.     Exit If Para$(0)=Cmds$(I%)
  40.     Inc I%
  41.   Until I%=Maxcmd%
  42.   On I%+1 Gosub Dir,End,Cd,Cls,Type,Md,Rd,Era,Version,Copy,Ren,Echo,Cd,Md,Rd
  43.   On I%+1-15 Gosub Era,Date,Time,Help,Goto,Dump,Lister,Nocmd
  44. Return
  45. Procedure Getpara               ! Command-Line in Para$ zerstückeln
  46.   For I%=0 To 9
  47.     Para$(I%)=""
  48.   Next I%
  49.   Para%=0
  50.   Lin$=Upper$(Lin$)
  51.   If Instr(Lin$," ")
  52.     Do
  53.       Lx%=Instr(Lin$," ")
  54.       Exit If Lx%=0
  55.       Para$(Para%)=Left$(Lin$,Lx%-1)
  56.       Lin$=Right$(Lin$,Len(Lin$)-Lx%)
  57.       Inc Para%
  58.     Loop
  59.     Para$(Para%)=Lin$
  60.     Inc Para%
  61.   Else
  62.     Para$(0)=Lin$
  63.     Para%=1
  64.   Endif
  65. Return
  66. Procedure Nocmd                          ! Kein COMMAND ST Befehl
  67.   If Mid$(Para$(0),2,1)=":"              ! vielleicht ist es PRG,TOS,TTP,BAT
  68.     Drv%=Asc(Left$(Para$(0),1)) And 15
  69.     Chdrive Drv%
  70.     Dec Drv%
  71.   Else
  72.     Showm
  73.     If Instr(Para$(0),".")
  74.       If Exec(0,Para$(0)," "+Para$(1),"")=-33
  75.         Print "Unbekannter Befehl"
  76.       Endif
  77.     Else
  78.       If Exist(Para$(0)+".BAT")
  79.         @Batch
  80.       Else
  81.         If Exec(0,Para$(0)+".PRG"," "+Para$(1),"")=-33
  82.           Hidem
  83.           Print Chr$(27);"e"
  84.           If Exec(0,Para$(0)+".TOS"," "+Para$(1),"")=-33
  85.             If Exec(0,Para$(0)+".TTP"," "+Para$(1),"")=-33
  86.               If Right$(Para$(0),1)<>":"                    ! IST ES EIN LABEL?
  87.                 Print "Unbekannter Befehl"
  88.               Endif
  89.             Endif
  90.           Endif
  91.         Endif
  92.         Print Chr$(27);"f"
  93.       Endif
  94.     Endif
  95.   Endif
  96. Return
  97. Procedure Dir                                     ! Directory ausgeben
  98.   Path$="*.*"
  99.   If Para%>1
  100.     Path$=Para$(1)
  101.   Endif
  102.   Print Chr$(Drv%+65);":";Dir$(0);"\";Path$
  103.   Files Path$
  104. Return
  105. Procedure End                                     ! EXIT
  106.   Reserve Rest%-255
  107.   End
  108. Return
  109. Procedure Cd                                      ! CD und CHDIR
  110.   If Para%>1
  111.     If Para$(1)=".."
  112.       Chdir "\"
  113.     Else
  114.       Lin$=Dir$(0)+"\"+Para$(1)
  115.       If Exist(Lin$+"\*.*")
  116.         Chdir Lin$
  117.       Else
  118.         Print "PFAD NICHT GEFUNDEN"
  119.       Endif
  120.     Endif
  121.   Else
  122.     Print Chr$(Drv%+65);":";Dir$(0)
  123.   Endif
  124. Return
  125. Procedure Cls                                      ! CLS Bildschirm löschen
  126.   Cls
  127. Return
  128. Procedure Type                                     ! TYPE
  129.   If Exist(Para$(1))
  130.     Open "I",#1,Para$(1)
  131.     If Left$(Para$(2),1)<>">"
  132.       Para$(2)=">CON:"
  133.     Endif
  134.     Open "O",#2,Right$(Para$(2),Len(Para$(2))-1)
  135.     Lo%=Lof(#1)
  136.     While Lo%-Loc(#1)>98
  137.       Print #2,Input$(99,#1);
  138.       If Inp?(2)
  139.         If Inp(2)=3
  140.           Goto Raus2
  141.         Endif
  142.         Void Inp(2)
  143.       Endif
  144.       If (Bios(11,-1) And 11)          ! Lshift,Rshift oder Alternate
  145.         Pause 50
  146.       Endif
  147.     Wend
  148.     Print #2,Input$(Lo%-Loc(#1),#1)
  149.     Raus2:
  150.     Print #2
  151.     Close #1
  152.     Close #2
  153.   Endif
  154. Return
  155. Procedure Md                             ! MD MKDIR
  156.   If Para%>1
  157.     Mkdir Dir$(0)+"\"+Para$(1)
  158.   Else
  159.     Print Chr$(Drv%+65);":";Dir$(0)
  160.   Endif
  161. Return
  162. Procedure Rd                             ! RD RMDIR
  163.   If Para%>1
  164.     Rmdir Dir$(0)+"\"+Para$(1)
  165.   Else
  166.     Print Chr$(Drv%+65);":";Dir$(0)
  167.   Endif
  168. Return
  169. Procedure Era                            ! ERA ERASE
  170.   While Exist(Para$(1))
  171.     Kill Para$(1)
  172.   Wend
  173. Return
  174. Procedure Version                        ! VERSION
  175.   Print "CLI v1.2 © 8.2.1987 M.Bernards ";
  176.   Ver%=Gemdos(&H30) And &HFFFF
  177.   Print "TOS-Version ";Ver% And &HFF;".";Int(Ver%/256)
  178. Return
  179. Procedure Copy                           ! COPY
  180.   If Para%>2
  181.     Dta$=Space$(44)
  182.     Void Gemdos(&H1A,L:Varptr(Dta$))
  183.     Fehler%=Gemdos(&H4E,L:Varptr(Para$(1)),&H3F)
  184.     If Not Fehler%
  185.       Repeat
  186.         Quell$=Right$(Dta$,14)
  187.         If Right$(Para$(2),1)="\" Or Right$(Para$(2),1)=":"
  188.           Ziel$=Para$(2)+Quell$
  189.         Else
  190.           Ziel$=Para$(2)
  191.         Endif
  192.         Print "Copy ";Quell$;"to  ";Ziel$
  193.         Open "I",#1,Quell$
  194.         Leng%=Lof(#1)
  195.         If Leng%>Xbios(3)-Himem-1000
  196.           Print "Speicherplatz reicht nicht aus"
  197.         Endif
  198.         Bget #1,Himem,Leng%
  199.         Close #1
  200.         Open "O",#1,Ziel$
  201.         Bput #1,Himem,Leng%
  202.         Close #1
  203.         Mid$(Dta$,31)=Space$(14)
  204.         Fehler%=Gemdos(&H4F)
  205.       Until Fehler%
  206.     Endif
  207.   Endif
  208. Return
  209. Procedure Ren                      ! Befehl REN
  210.   If Para%>2
  211.     Name Para$(1) As Para$(2)
  212.   Endif
  213. Return
  214. Procedure Echo                     ! ECHO
  215.   For I%=1 To Para%-1
  216.     Print Para$(I%);" ";
  217.   Next I%
  218.   Print
  219. Return
  220. Procedure Date                     ! DATE
  221.   If Para%>1
  222.     Settime Time$,Para$(1)
  223.   Else
  224.     Print Date$
  225.   Endif
  226. Return
  227. Procedure Time                     ! TIME
  228.   If Para%>1
  229.     Settime Para$(1),Date$
  230.   Else
  231.     Print Time$
  232.   Endif
  233. Return
  234. Procedure Help                     ! HELP
  235.   For I%=0 To Maxcmd%
  236.     Print " ";Cmds$(I%);Space$(19-Len(Cmds$(I%)));
  237.   Next I%
  238.   Print
  239. Return
  240. Procedure Batch                    ! Batchdateien laden und ausführen
  241.   Cnt%=0
  242.   Flag%=0
  243.   Open "I",#99,Para$(0)+".BAT"
  244.   While Not Eof(#99)
  245.     Inc Cnt%
  246.     Line Input #99,Batch$(Cnt%)
  247.   Wend
  248.   Close #99
  249.   For Ibatch%=1 To Cnt%
  250.     Lin$=Batch$(Ibatch%)
  251.     @Trimlen
  252.     @Insert_parameter
  253.     Print Lin$
  254.     @Exe
  255.     If Inp?(2)
  256.       If Inp(2)=3
  257.         Flag%=-1
  258.       Endif
  259.     Endif
  260.     Exit If Flag%
  261.   Next Ibatch%
  262. Return
  263. Procedure Goto                           ! GOTO
  264.   Local I%
  265.   For I%=1 To Cnt%
  266.     Exit If Batch$(I%)=Para$(1)+":"
  267.   Next I%
  268.   If I%<Cnt%
  269.     Ibatch%=I%
  270.   Endif
  271. Return
  272. Procedure Insert_parameter               ! %n wird ersetzt durch CL-Parameter
  273.   Local I%
  274.   I%=1
  275.   In%=Instr(Lin$,"%")
  276.   While In%
  277.     I%=Val(Mid$(Lin$,In%+1,1))
  278.     Lin$=Left$(Lin$,In%-1)+Para$(I%)+Right$(Lin$,Len(Lin$)-In%-1)
  279.     In%=Instr(Lin$,"%")
  280.   Wend
  281. Return
  282. Procedure Trimlen                        ! Anhängende Leerzeichen löschen
  283.   While Right$(Lin$,1)=" "
  284.     Lin$=Left$(Lin$,Len(Lin$)-1)
  285.   Wend
  286. Return
  287. Procedure Dump                           ! DUMP
  288.   Local Byte$,Cnt%,Glcnt%,As$,Lod%
  289.   If Exist(Para$(1))
  290.     Open "I",#1,Para$(1)
  291.     Lod%=Lof(#1)
  292.     If Lod%>Xbios(3)-10000-Himem
  293.       Bget #1,Himem,Xbios(3)-10000-Himem
  294.     Else
  295.       Bget #1,Himem,Lod%
  296.     Endif
  297.     Close #1
  298.     If Left$(Para$(2),1)<>">"
  299.       Para$(2)=">CON:"                    ! Bildschirm
  300.     Endif
  301.     Open "O",#2,Right$(Para$(2),Len(Para$(2))-1)
  302.     Cnt%=0
  303.     Glcnt%=0
  304.     Print #2,"000000  ";
  305.     While Glcnt%<Lod%
  306.       Eing%=Peek(Himem+Glcnt%+Cnt%)
  307.       Byte$=Hex$(Eing%)
  308.       Bmove Himem+Glcnt%,As%,16
  309.       If Eing%<32
  310.         As$=As$+"."
  311.       Else
  312.         As$=As$+Chr$(Eing%)
  313.       Endif
  314.       If Len(Byte$)<2
  315.         Byte$=String$(2-Len(Byte$),"0")+Byte$
  316.       Endif
  317.       Print #2,Byte$;" ";
  318.       Inc Cnt%
  319.       If Cnt%=16
  320.         Cnt%=0
  321.         Print #2,"  ";As$
  322.         As$=""
  323.         Add Glcnt%,16
  324.         Byte$=Hex$(Glcnt%)
  325.         Print #2,String$(6-Len(Byte$),"0");Byte$;"  ";
  326.         If Inp?(2)
  327.           If Inp(2)=3
  328.             Goto Raus                    ! ^C gedrückt ?
  329.           Endif
  330.           Void Inp(2)
  331.         Endif
  332.         If (Bios(11,-1) And 11)
  333.           Pause 50
  334.         Endif
  335.       Endif
  336.     Wend
  337.     Raus:
  338.     Print #2
  339.     Close #1
  340.     Close #2
  341.   Endif
  342. Return
  343. Procedure Lister                          ! PRINT
  344.   Local I%
  345.   Dta$=Space$(44)
  346.   Path$=Para$(1)
  347.   If Para%>2
  348.     Plen%=Val(Para$(2))
  349.   Else
  350.     Plen%=66
  351.   Endif
  352.   Void Gemdos(&H1A,L:Varptr(Dta$))
  353.   Fehler=Gemdos(&H4E,L:Varptr(Path$),&H2F)
  354.   If Not Fehler
  355.     Repeat
  356.       Cnt%=0
  357.       Seite%=2
  358.       Catalog$=Right$(Dta$,14)
  359.       For I%=Len(Path$) Downto 1
  360.         Exit If Mid$(Path$,I%,1)="\"
  361.       Next I%
  362.       If I%
  363.         Head$="Listing von "+Left$(Path$,I%)+Catalog$
  364.       Else
  365.         Head$="Listing von "+Dir$(0)+"\"+Catalog$
  366.       Endif
  367.       Open "I",#1,Catalog$
  368.       Lprint Head$;"        Seite 1"
  369.       Lprint
  370.       While Not Eof(#1)
  371.         Line Input #1,Prlin$
  372.         If Len(Prlin$)>79
  373.           Inc Cnt%
  374.         Endif
  375.         Lprint Prlin$
  376.         Inc Cnt%
  377.         If Cnt%>=Plen%-2
  378.           Cnt%=0
  379.           Lprint Head$;"        Seite ";Seite%
  380.           Lprint
  381.           Inc Seite%
  382.         Endif
  383.       Wend
  384.       Close #1
  385.       Mid$(Dta$,30)=Space$(15)
  386.       If Cnt%
  387.         Lprint Chr$(12);
  388.       Endif
  389.       Fehler=Gemdos(&H4F)
  390.     Until Fehler
  391.   Endif
  392. Return