30 PN%=0: REM Port number35 B$=""40 PRINT "XMODEM send program"50 INPUT "Enter file name: ", F$60 OPEN "i",1,F$61 SZ%=LOF(1)62 PRINT "File size: ";SZ%;"bytes"63 PRINT "Total transmission length: ";SZ%/128;"packets"70 PRINT "Give the receive command on the uploader"80 BC%=0:E%=0:PK%=181 GOSUB 200085 CALL "ci"(PN%,"sr",@E%,,,@BC%)90 IF BC%<1 THEN GOTO 8595 P$=SPACE$(1)100 CALL "ci"(PN%, "r", @E%, P$,1)110 IF ASC(P$)=21 THEN GOTO 150120 IF ASC(P$)=6 THEN PK%=PK%+1:GOTO 150130 IF ASC(P$)=4 THEN GOTO 4000140 PRINT "Unexpected character":STOP150 PRINT "Transmitting packet n";PK%;160 GOSUB 3000170 PRINT CHR$(13);180 CALL "ci"(PN%, "w", @E%, CHR$(1), CHR$(PK% AND 255))190 CALL "ci"(PN%, "w", @E%, CHR$(255-(PK% AND 255)))200 CALL "ci"(PN%, "w", @E%, S$)210 CK%=0220 FOR I%=1 TO 128230 CK%=CK%+ASC(MID$(S$,I%,1))240 NEXT250 CALL "ci"(PN%, "w", @E%,CHR$(CK% AND 255))255 IF (PK%)*128>=SZ% THEN GOTO 300260 GOTO 85300 PRINT :PRINT "End of transmission"310 CALL "ci"(PN%, "w", @E%, CHR$(4))320 CALL "ci"(PN%, "sr", @E%,,,@BC%)330 IF BC%<1 THEN GOTO 320340 P$=SPACE$(1)350 CALL "ci"(PN%, "r", @E%, P$,1)360 IF ASC(P$)<>21 THEN STOP370 CALL "ci"(PN%, "w", @E%, CHR$(4))380 CALL "ci"(PN%, "sr", @E%,,,@BC%)390 IF BC%<1 THEN GOTO 380400 CALL "ci"(PN%, "r", @E%, P$,1)410 IF ASC(P$)<>6 THEN STOP420 CLOSE 1430 PRINT "Transfer completed"440 END2000 BC%=12010 WHILE BC%>02020 CALL "ci"(PN%, "sr", @E%,,,@BC%)2025 PRINT BC%2030 IF BC%>255 THEN BC%=2552040 P$=SPACE$(BC%)2050 CALL "ci"(PN%, "r", @E%, P$, BC%)2060 WEND2070 RETURN3000 ' Read a 128 bytes packet3001 A$=""3005 WHILE (LEN(B$)<128 AND NOT(EOF(1)))3010 IF A$="" THEN LINE INPUT #1,A$3015 IF LEN(A$)<255 THEN A$=A$+CHR$(13)3016 PP%=128-LEN(B$)3020 B$=B$+LEFT$(A$, PP%)3030 A$=MID$(A$, PP%+1)3040 WEND3050 S$=LEFT$(B$,128)3060 B$=MID$(B$,129)+A$3070 IF LEN(S$)<128 THEN S$=S$+SPACE$(128-LEN(S$))3080 RETURN