10
20
30
40
50
60
70
80 :
90 A$=FNOS_GetEnv:IFos%=32:PROCWin_TextIO
100 IFINSTR(A$,"-?"):PRINT"DSDtoSSD <infile> (<outfile>) -spt <num> -[0|1|2] -v":PROCexit(0)
110 same%=FALSE:spt%=10:vb%=FALSE:DIM ctrl% 31:X%=ctrl%:Y%=X%DIV256
120 IFA$="":INPUT"Input file: "in$:INPUT"Output file: "out$:A$=in$+" "+out$
130 A%=INSTR(A$+" "," "):in$=LEFT$(A$,A%-1):out$=MID$(A$,A%+1)
140 A%=INSTR(out$+" "," "):out$=LEFT$(out$,A%-1)
150 A%=INSTR(A$," -s"):IFA%:spt%=VALMID$(A$,INSTR(A$," ",A%+1))
160 vb%=INSTR(A$," -v")<>0:s0%=0:s1%=1
170 s2%=(INSTR(A$," -2")<>0)AND1:s1%=(INSTR(A$," -0")=0)AND1:s0%=(INSTR(A$," -1")<>0)AND1
180 IFout$=""ORout$="""""":same%=TRUE
190 IFsame%:IFos%=6:out$="<Wimp$Scrap>/ssd"
200 IFsame%:IFos%=8:out$="$temp$/scrap.ssd"
210 IFsame%:IFos%=32:DIM B% 255:SYS"ExpandEnvironmentStrings","%TMP%",B%,255:out$=$$B%+"\scrap.ssd"
220 ON ERROR PROCClose_All:PROCHour_Glass(-3):REPORT:PRINTERL:PROCexit(ERR)
230 in%=OPENIN(in$):IFin%=0:PRINT"File '"in$"' not found":PROCexit(214)
240 tracks%=((EXT#in%+(256*2*spt%-1)) DIV (256*2*spt%))
250 ext%=LENout$+1:IFos%>31:A%=ext%:REPEAT:A%=A%-1:UNTILMID$(out$,A%,1)="." OR A%<0:IFA%>=0:ext%=A%
260 PROCopenout
270 :
280 DIM mem% 256*spt%:side%=s0%:PROCHour_Glass(-1)
290 REPEAT:track%=0:IFs2%:IFside%=1:CLOSE#out%:out%=0:PROCopenout
300 REPEAT:PROCHour_Glass(100*track% DIV tracks%)
310 IFvb%:PRINTCHR$13;side%;":";track%;":00";
320 PROCgbpb(3,in%, mem%,256*spt%,((track%*2+side%)*spt%)*256)
330 PROCgbpb(1,out%,mem%,256*spt%,((track%+side%*80)*spt%)*256)
340 track%=track%+1:UNTILtrack%>=tracks% OR EOF#in%:side%=side%+1
350 UNTILside%>s1%
360 CLOSE#out%:out%=0:CLOSE#in%:in%=0:PROCHour_Glass(-2):IFvb%:PRINT
370 IFos%<32:OSCLI"SetType "+out$+" "+STR$~(&B22-&4AC*(spt%=16))
380 IFsame%:OSCLI"Copy "+out$+" "+in$+LEFT$(" ~A~CDF~L~N~P~Q~RS~T~V",os%<>32)
390 PROCexit(0)
400 :
410 DEFPROCopenout
420 IFs2%:out$=LEFT$(out$,ext%-1)+STR$side%+MID$(out$,ext%+side%)
430 out%=OPENOUT(out$):IFout%=0:PRINT'"Can't open '"out$"'.":CLOSE#in%:in%=0:PROCexit(192)
440 ENDPROC
450 :
460 DEFPROCClose_All
470 in%=in%:IFin%:A%=in%:in%=0:CLOSE#A%
480 out%=out%:IFout%:A%=out%:out%=0:CLOSE#A%
490 ENDPROC
500 :
510 DEFPROCgbpb(A%,chn%,addr%,num%,ptr%)
520 ?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:IFos%<32:CALL &FFD1:ENDPROC
530 IFA%=1ORA%=3:PTR#?X%=X%!9
540 REPEAT:IFA%=1ORA%=2:BPUT#?X%,?X%!1 ELSE IFA%=3ORA%=4:?X%!1=BGET#?X%
550 X%!1=X%!1+1:X%!5=X%!5-1:UNTIL(EOF#?X% AND A%>2) OR X%!5<1:ENDPROC
560 :
570 DEFPROCHour_Glass(A%):IFos%<>6:ENDPROC
580 IFA%=-1:SYS"Hourglass_On":ENDPROC
590 IFA%=-2:SYS"Hourglass_Off":ENDPROC
600 IFA%=-3:SYS"Hourglass_Smash":ENDPROC
610 SYS"Hourglass_Percentage",A%
620 ENDPROC
630 :
640 DEFFNOS_GetEnv:LOCALA$,A%,X%,Y%:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
650 IFos%>31:IFPAGE>&FFFFF:DIMX%LOCAL256:SYS"GetModuleFileName",0,X%,255:run$=$$X%:=@cmd$
660 A%=(HIMEM>&FFFF)AND&900:IF?(TOP-3):A%=((PAGE>&9FFF)ANDA%)OR((&1400-PAGE)AND(A%=0))ELSEA%=((A%-&500)OR&200)AND&FFF
670 A$=$(PAGE-&E00+A%):IFA%=0:run$=A$:SYS16TOA$,,A%:SYS72,"",A%:A$=MID$(A$,1+INSTR(A$+" "," ",1+INSTR(A$," "))):IFLENA$=0:A$=run$
680 FORY%=-1TO0:A$=" "+A$:REPEATA$=MID$(A$,2):UNTILASCA$<>32
690 IFY%:IFASCA$=34:A%=INSTR(A$,"""",2)+1 ELSEIFY%:A%=INSTR(A$+" "," ")
700 IFY%:run$=MID$(A$,1-(ASCA$=34),A%-1+2*(ASCA$=34)):IFrun$<>"":A$=MID$(A$,A%+1)
710 NEXT:=A$
720 :
730 DEFPROCexit(A%):OSCLI"FX1,"+STR$(A%AND255):IFPAGE>&FFFFF:QUIT A%
740 IFos%<6:END ELSE *Quit
750 ENDPROC
760 :
770 DEFPROCWin_TextIO
780 SYS"GetStdHandle",-10TO@hfile%(1):*INPUT 1
790 SYS"GetStdHandle",-11TO@hfile%(2):*OUTPUT 2
800 SYS"SetConsoleMode",@hfile%(1),0
810 ENDPROC