home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / c64 / vicxmodm.bas < prev    next >
BASIC Source File  |  1984-12-29  |  6KB  |  129 lines

  1. 10 REM *****************
  2. 15 REM * XMODEM 64 3.5 *
  3. 20 REM *  KARL SCHMITT *
  4. 25 REM *****************
  5. 30 REM * VIC-20 VERSON *
  6. 35 REM * BY JOHN DAVIS $
  7. 40 REM *****************
  8. 45 POKE39928,10:POKE39929,48:PRINTCHR$(151)CHR$(14):OPEN5,2,3,CHR$(6)+CHR$(.)
  9. 50 OPEN15,8,15:U=212:D=256:W=1:E$=CHR$(147):C=250:S=64:P$=CHR$(19):O=8
  10. 55 BL$="":ER$="                  "+CHR$(13)
  11. 60 ACK=6:NAK=21:EOT=4:CAN=24:Z=131:V=132:F=255:M=288:P=12
  12. 65 C$=CHR$(.):R$=CHR$(18):J$=CHR$(13):O$=CHR$(18)+CHR$(32)+CHR$(157)+CHR$(146)
  13. 70 PRINTE$"XMODEM VIC"J$
  14. 75 PRINT"DOWNLOAD & UPLOAD":G$=CHR$(133):Q$=CHR$(34):I$=CHR$(20)
  15. 80 PRINT" TERMINAL PGM"J$J$"DISK VERSION 3.5"J$J$
  16. 85 PRINT"BY KARL SCHMITT"J$"AND JOHN DAVIS"J$
  17. 90 PRINT"HIT <F1> FOR MAIN MENU"
  18. 95 PRINTJ$"USE XMODEM PROTOCOL   FOR ALL TRANSFERS."J$J$:L$=CHR$(32)+CHR$(157)
  19. 100 PRINT"1. FULL DUPLEX"J$"2. HALF DUPLEX"J$
  20. 105 PRINT"TYPE 1 OR 2 TO BEGIN.":GOSUB510:IFA$="1"THEN120
  21. 110 IFA$="2"THENB=W:GOTO120
  22. 115 GOTO105
  23. 120 DIMF%(F),T%(F),U%(P,V)
  24. 125 PRINTE$"PLEASE STAND BY FOR 9 SECONDS."J$J$"CREATING  TRANSLATION TABLES."
  25. 130 FORJ=32TO64:T%(J)=J:NEXT:T%(13)=13:T%(20)=8:FORJ=65TO90:T%(J)=J+32:NEXT
  26. 135 FORJ=91TO95:T%(J)=J:NEXT:FORJ=193TO218:T%(J)=J-128:NEXT:T%(146)=P
  27. 140 T%(133)=P:T%(147)=19:T%(137)=3:T%(134)=17:T%(138)=19:FORJ=.TOF:K=T%(J)
  28. 145 IFK<>.THENF%(K)=J:F%(K+128)=J
  29. 150 NEXT:QQ$=Q$+CHR$(157)+CHR$(32)+CHR$(157)
  30. 151 REM ENTER LETTERS A-Z & SYMBOLS @*+-\ ON LINE 153 WITH COMMODORE KEY DOWN
  31. 152 REM IT MAY BE NESSARY TO USE THE SHORT FORM OF SOME COMMANDS
  32. 153 A$="ABCDEFGHIJKLMNOPQRSTUVWXYZ@*+-\":FORX=1TOLEN(A$):T%(ASC(MID$(A$,X,1)))=X:NEXT
  33. 155 REM------------TERMINAL------------
  34. 160 PRINTCHR$(14)
  35. 165 PRINTE$" TERMINAL MODE"J$:IFA$=CHR$(CAN)THENPRINT"TRANSFER CANCELLED!"
  36. 170 IFFA=WTHENPRINT"WHEN HOST IS READY TO RECIEVE, HIT F1"J$"FOR MAIN MENU AND";
  37. 175 IFFA=WTHENFA=.:PRINT" START THE UPLOAD."J$
  38. 180 GET#5,A$:IFA$=""THEN195
  39. 185 PRINTL$CHR$(F%(ASC(A$)));:IFA$=Q$THENPRINTQQ$;
  40. 190 GOTO180
  41. 195 PRINTO$;:GETA$:IFA$=""THEN180
  42. 200 IFB=WTHEN:X=ASC(A$):IFX=13ORX=145ORX=157ORX=29ORX=17ORX=19THENPRINTL$;
  43. 205 IFB=WTHENPRINTA$;:IFA$=Q$THENPRINTQQ$;
  44. 210 IFA$=G$THENPRINTL$J$:GOTO325
  45. 215 PRINT#5,CHR$(T%(ASC(A$)));:GOTO180
  46. 220 REM-----------DOWNLOAD-------------
  47. 225 PRINTE$"IS HOST COMPUTER WAITING TO SEND? Y/N":GOSUB510:IFA$="N"THEN160
  48. 230 PRINTJ$:IFA$<>"Y"THEN225
  49. 235 G=3:K$="W":GOSUB350:PRINT:BL=.
  50. 240 PRINTJ$"DOWNLOADING  "F$J$:GOSUB535:BL=0
  51. 250 CH=W:GET#5,D$:IFD$=CHR$(W)THENL=.:GOTO255
  52. 251 IFD$=CHR$(EOT)THENGOSUB525:CLOSE3:PRINT:PRINT"DONE":GOSUB620:GOTO160
  53. 252 IFD$=CHR$(CAN)THENGOSUB525:CLOSE3:PRINT:PRINT"CANCELLED":GOSUB620:GOTO160
  54. 253 GOTO260
  55. 255 PRINT":";:FORZZ=1TO1000:NEXT
  56. 256 FORX=2TO131:GET#5,A$:A$=LEFT$(A$+CHR$(0),1):D$=D$+A$:CH=(CH+ASC(A$))AND255:NEXT
  57. 257 GOTO 290
  58. 260 GETA$:IFA$=J$THENQ=10:GOTO530
  59. 270 L=L+W:IFL=220THENL=.:GOSUB530:PRINTCHR$(18)"WAITING"CHR$(146)Q:GOTO250
  60. 275 GOTO250
  61. 290 GET#5,A$:BK=0:FORX=1TO3
  62. 295 BK=BK+ASC(MID$(D$,X,1))AND255:NEXT:IFBKTHENPRINT"SOH ERROR":GOSUB530:GOTO250
  63. 300 IFASC(A$)<>(CHAND255)THENPRINT"CHECKSUM ERROR":GOSUB530:GOTO250
  64. 305 BL=(BL+1)AND255
  65. 310 IFASC(MID$(D$,2,1))<>BLTHENPRINT:PRINT"BLOCK NUMBER ERROR":GOSUB530:BL=(BL-1+256)AND255:GOTO250
  66. 315 PRINTCHR$(18)"DOWNLOADED BLOCK"BL;CHR$(146);:PRINT#3,MID$(D$,4,128)
  67. 316 Q=.:GOSUB525:GOTO250
  68. 320 REM-----------MENU-----------------
  69. 325 PRINTE$
  70. 330 PRINTJ$"1. DOWNLOAD"J$"2. UPLOAD"J$"3. TERMINAL"J$"4. DIRECTORY"
  71. 335 PRINT"5. RE-START UPLOAD"J$"6. END":GOSUB510
  72. 340 ONVAL(A$)GOTO225,380,160,480,590,520
  73. 345 GOTO330
  74. 350 POKE39928,10:POKE39929,96:PRINTE$:INPUT"FILENAME E(X)IT.";F$:IFF$="X"THEN325
  75. 355 PRINTE$:INPUT"FILETYPE (P)ROGRAM (S)EQUENTIAL E(X)IT";FT$:IFFT$="X"THEN325
  76. 360 FT$=LEFT$(FT$,W):POKE39928,10:POKE39929,48
  77. 365 OPENG,8,G,"0:"+F$+","+FT$+","+K$:INPUT#15,A,B$:PRINTE$;A;B$:IFA=.THENRETURN
  78. 370 CLOSEG:GOTO330
  79. 375 REM-----------UPLOAD---------------
  80. 380 G=6:K$="R":GOSUB350:BL=.:FA=W
  81. 385 PRINTER$"READING      ":FORY=WTOP:U%(Y,W)=W
  82. 390 BL=BL+W:U%(Y,2)=BL:U%(Y,3)=F-BL:CH=W+U%(Y,2)+U%(Y,3):PRINTER$"BLOCK"BL
  83. 395 FORX=EOTTOZ:GET#6,B$:IFST=.THEN405
  84. 400 FL=Y:CH=CH+U%(Y,X):FORA=X+WTOZ:U%(Y,A)=.:NEXT:U%(Y,V)=CHANDF:GOTO410
  85. 405 U%(Y,X)=ASC(B$+C$):CH=CH+U%(Y,X):NEXT:U%(Y,V)=CHANDF:NEXT:Y=Y-W
  86. 410 IFFA=WTHEN160
  87. 415 GET#5,A$:IFA$<>CHR$(NAK)THEN415
  88. 420 BL=BL-Y:Y=.
  89. 425 PRINTER$"UPLOAD STATUS"J$"NAK"BL$"UPLOADING"
  90. 430 Y=Y+W:BL=BL+W
  91. 435 PRINTBL$"BLOCK"BL:FORX=WTOV:PRINT#5,CHR$(U%(Y,X));:NEXT
  92. 440 FORA=.TO1200:GET#5,A$:IFA$=""THENNEXT:GOTO435
  93. 445 IFA$=CHR$(ACK)THENIFY=PTHENPRINTER$"ACK":GOTO385
  94. 450 IFA$=CHR$(ACK)THENIFFL<>YTHENPRINTER$"ACK":GOTO430
  95. 455 IFA$=CHR$(ACK)THENIFFL=YTHENFL=.:GOSUB540:GOSUB545:CLOSE6:GOTO555
  96. 460 IFA$=CHR$(NAK)THENPRINTER$"NAK":GOTO435
  97. 465 IFA$=CHR$(CAN)THENCLOSE6:GOTO555
  98. 470 GOTO440
  99. 475 REM---------DIRECTORY--------------
  100. 480 PRINTE$:OPEN1,8,0,"$0":GET#1,A$,A$
  101. 485 GET#1,A$,A$:IFA$=""THEN505
  102. 490 GET#1,A$,B$:PRINTASC(A$+C$)+ASC(B$+C$)*D;
  103. 495 GET#1,A$:IFA$=""THENPRINT:GOTO485
  104. 500 PRINTA$;:GOTO495
  105. 505 CLOSE1:GOTO330
  106. 510 GETA$:IFA$=""THEN510
  107. 515 RETURN
  108. 520 POKE39928,10:POKE39929,96:END
  109. 525 PRINT#5,CHR$(ACK);:Q=.:PRINT" ACK":RETURN
  110. 530 Q=Q+W:IFQ>10THENCLOSE3:A$=CHR$(CAN):PRINT#5,A$:GOTO555
  111. 535 PRINT#5,CHR$(NAK);:RETURN
  112. 540 PRINT#5,CHR$(EOT);:RETURN
  113. 545 GET#5,A$:IFA$=""THEN545
  114. 550 RETURN
  115. 555 PRINT"HIT ANY KEY FOR TERMINAL MODE"
  116. 560 SO=54272
  117. 565 POKESO+1,250:POKESO+5,10:POKESO+15,200
  118. 570 POKESO+24,15:FORCL=1TO12:POKESO+4,21:FORTM=1TO1250:NEXT:POKESO+4,20
  119. 575 GETB$:IFB$=""THEN565
  120. 580 SO=54272:FORCL=.TO24:POKESO+CL,.:NEXT
  121. 585 GOTO160
  122. 590 PRINTE$"IS HOST COMPUTER READY TO RECIEVE? Y/N"J$:GOSUB510:IFA$="N"THEN160
  123. 595 IFA$<>"Y"THEN590
  124. 600 PRINTE$"HAVE THE FIRST 16 (OR LESS) BLOCKS TO   UPLOAD BEEN READ YET?"
  125. 605 GOSUB510:IFA$="N"THEN160
  126. 610 IFA$<>"Y"THEN600
  127. 615 PRINTE$"UPLOADING  "F$:GOTO410
  128. 620 CLOSE15:OPEN15,8,15:INPUT#15,A,B$,C,D:CLOSE15:PRINTA,B$,D;D:RETURN
  129.