home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / apple / applutil.lbr / CPDOS.BAS < prev    next >
Encoding:
BASIC Source File  |  1986-09-21  |  4.4 KB  |  107 lines

  1. 10  HIMEM: 8190
  2. 20  REM  ****************************
  3. 30  REM  * CP/M -> APPLE DOS CONV.  *
  4. 40  REM  ****************************
  5. 50  REM  *   BY                     *    
  6. 60  REM  *       ALEX MALUTA        *    
  7. 70  REM  * 12-31-81                 *
  8. 80  REM  ****************************    
  9. 90  REM  * DOCUMENTED IN CPDOS.DOC  *
  10. 100  REM ****************************     
  11. 110  REM * NEEDS: 48K,APPLESOFT     *
  12. 120  REM *        2 DRIVES,CP/M     * 
  13. 130  REM ****************************
  14. 140  GOTO 830
  15. 150  REM  FOUND ACTIVE MATCH
  16. 160  REM  GET DATA
  17. 170 EX =  PEEK (I + 12):SE = SE +  PEEK (I + 15)
  18. 180  FOR ZZ = 0 TO 15
  19. 190 S = EX * 16 + ZZ: IF S > SG THEN SG = S
  20. 200 S(S) =  PEEK (I + 16 + ZZ)
  21. 210  NEXT : RETURN 
  22. 220  REM  ======================= 
  23. 230  REM GET NEW SECTOR/TRACK    
  24. 240  REM  POINTED BY GROUP IN S(I)
  25. 250 TR =  INT (S(I) / 4) + 3
  26. 260 O = (S(I) / 4 -  INT (S(I) / 4)) * 4
  27. 270 X = O * 4 + N
  28. 280  DATA  0,6,12,3,9,15,14,5,11,2,8,7,13,4,10,1
  29. 290  RESTORE 
  30. 300  FOR II = 0 TO X: READ SC: NEXT : RETURN 
  31. 310  REM  ======================= 
  32. 320  REM  CALL RWTS SUBROUTINE   
  33. 330  POKE SS + 2,0
  34. 340  POKE SS,SL: POKE SS + 1,DR: POKE SS + 3,TR: POKE SS + 4,SC: POKE SS + 8,BH: POKE SS + 7,BL: POKE SS + 11,CM: CALL RWTS: RETURN 
  35. 350  REM  =======================
  36. 360  REM  LOAD DIRECTORY FROM CP/M DISK
  37. 370 B1 = B - 256:TR = 3
  38. 380  GOTO 400
  39. 390 B1 = B1 + 256:BH =  INT (B1 / 256):BL = B1 - (BH * 256): GOSUB 320: RETURN 
  40. 400 SC = 0: GOSUB 390
  41. 410 SC = 6: GOSUB 390
  42. 420 SC = 12: GOSUB 390
  43. 430 SC = 3: GOSUB 390
  44. 440 SC = 9: GOSUB 390
  45. 450 SC = 15: GOSUB 390
  46. 460 SC = 14: GOSUB 390
  47. 470 SC = 5: GOSUB 390
  48. 480  REM  =======================   
  49. 490  REM  SEARCH FOR FILENAME
  50. 500 C = 0
  51. 510  FOR I = B TO B + (256 * 8) STEP 32
  52. 520  IF  PEEK (I) <  > 0 THEN 580: REM  FILE INACTIVE
  53. 530 CS$ = "":CF$ = ""
  54. 540  FOR J = 1 TO  LEN (F$):CF$ = CF$ +  CHR$ ( PEEK (I + J)): NEXT 
  55. 550  FOR J = 1 TO  LEN (S$):CS$ = CS$ +  CHR$ ( PEEK (I + J + 8)): NEXT : REM  IS 9 BUT J IS 1 XTRA
  56. 560  PRINT CF$"."CS$
  57. 570  IF CF$ = F$ AND CS$ = S$ THEN C = 1: GOSUB 150
  58. 580  NEXT 
  59. 590  IF C = 0 THEN  PRINT "NO SUCH FILENAME EXISTS": END 
  60. 600  REM  =======================     
  61. 610  REM  LOAD CP/M FILE INTO MEMORY
  62. 620 B1 = B
  63. 630  REM  CLEAR MEMORY (2000:00 N 2001<2000.95FEM)
  64. 640 I = 0: REM   CLEAR TO 0 
  65. 650  POKE 8192,I: POKE 67,32: POKE 66,1: POKE 61,32: POKE 60,0: POKE 63,149: POKE 62,254: CALL R2: REM  EXECUTE MEMORY MOVE
  66. 660 SE = SE / 2
  67. 670  FOR I = 0 TO SG
  68. 680  FOR N = 0 TO 3: IF SE <  = 0 THEN N = 3:I = SG: GOTO 720
  69. 690  GOSUB 230:BH =  INT (B1 / 256):BL = B1 - (BH * 256)
  70. 700  PRINT TR,SC:SE = SE - 1
  71. 710  GOSUB 320:B1 = B1 + 256: IF B1 >  = MM THEN : REM  OUT OF MEMORY
  72. 720  NEXT : NEXT 
  73. 730  REM  ======================= 
  74. 740  REM  SAVE ON APPLE DISK
  75. 750  REM   SET MSB ON DATA HIGH AND
  76. 760  REM  CONVERT ANY LINE FEEDS TO SPACES
  77. 770  POKE 811,B1 / 256: CALL R3
  78. 780  IF SE / 2 <  >  INT (SE / 2) THEN B1 = B1 - 128: REM  CHOP OFF IF LAST SECTOR WAS 1/2 SECTOR
  79. 790 A$ =  CHR$ (4) + "BSAVE" + F$ + "." + S$ + ",A" +  STR$ (B) + ",L" +  STR$ (B1 - B + 1) + ",D2"
  80. 800  PRINT 
  81. 810  PRINT A$: END 
  82. 820  REM  =======================    
  83. 830  REM  SET UP
  84. 840  DIM S(32): FOR I = 0 TO 32:S(I) = 0: NEXT : REM  ARRAY FOR WHICH CP/M SECTORS TO PULL
  85. 850 B = 8192: REM  BEGGINNING OF BUFFER
  86. 860 MM = 38400!: REM  TOP OF BUFFER - BOTTOM OF DOS
  87. 870 SL = 6 * 16: REM  SLOT OF DISK DRIVE
  88. 880 CM = 1:DR = 1: REM  READ CP/M IN DRIVE 1
  89. 890 SS = 47081!: REM  ADDRESS OF IOB
  90. 900  FOR I = 1 TO 16: READ A: NEXT : REM  GET RID OF LOW DATA
  91. 910  REM  POKE MOVE, RWTS, INCREMENT ROUTINES
  92. 920  DATA 32,44,254,96,169,183,160,232,32,217,3,96,0,173,0,32,201,10,240,27,9,128,141,0,32,238,14,3,238,23,3,208,236,238,15,3,238,24,3,173,24,3,201,150,144,223,96,169,160,76,22,3,0     
  93. 930  FOR I = 768 TO 820: READ A: POKE I,A: NEXT 
  94. 940 R2 = 768: REM  MEMORY MOVE ADDRESS
  95. 950 RWTS = 772: REM  RWTS ADDRESS
  96. 960 R3 = 781: REM  INCREMENT BUFFER ADDRESS
  97. 970  REM  INPUT FILENAME AND SPLIT INTO 2 PARTS
  98. 980  HOME : VTAB 3: PRINT "   CP/M -> DOS FILE CONVERTER": VTAB 7
  99. 990  INPUT "WHAT CP/M FILE ->";F$: FOR I = 1 TO  LEN (F$): IF  MID$ (F$,I,1) = "." THEN FF$ =  LEFT$ (F$,I - 1):S$ =  RIGHT$ (F$, LEN (F$) - I):F$ = FF$
  100. 1000  NEXT 
  101. 1010  HOME : PRINT "PLACE CP/M DISK IN DRIVE 1"
  102. 1020  PRINT : PRINT "PLACE APPLE DOS DISK IN DRIVE 2"
  103. 1030  GET R$
  104. 1040  GOTO 360
  105. 1050  END 
  106. "PLACE CP/M DISK IN DRIVE 1"
  107. 1020  PRINT : PRINT