home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / Information / MLCOLUMN.ARC / MLCOL.7.SRC (.txt) < prev    next >
Encoding:
Commodore BASIC  |  2019-04-13  |  7.5 KB  |  315 lines

  1. 50 SYS700
  2. 75 .OPT P,OO
  3. 80 ;****************
  4. 81 ;*              *
  5. 82 ;*  LYLE GIESE  *
  6. 83 ;*  VERSION 1.0 *
  7. 84 ;*   06/21/86   *
  8. 85 ;*              *
  9. 86 ;****************
  10. 120 READST = $FFB7
  11. 130 SETLFS = $FFBA
  12. 140 SETNAM = $FFBD
  13. 150 OPEN   = $FFC0
  14. 160 CLOSE  = $FFC3
  15. 170 CHKIN  = $FFC6
  16. 180 CHKOUT = $FFC9
  17. 190 CLRCHN = $FFCC
  18. 200 CHRIN  = $FFCF
  19. 210 CHROUT = $FFD2
  20. 220 GETIN  = $FFE4
  21. 230 CLALL  = $FFE7
  22. 300 INDEX  = $FB
  23. 310 FNAM   = $033C;USING CASSETTE BUFFER TO STORE FILENAMES
  24. 320 FLEN   = $FD;FOR LENGTH OF FILENAME
  25. 330 OUTFILE = $FE
  26. 340 RTEMP  = $03FF
  27. 350 ATEMP  = $03FE
  28. 360 PDEV   = $03FD
  29. 370 SHFLAG = $028D
  30. 380 HIGH   = $03FC
  31. 390 LOW    = $03FB
  32. 490 *= $C000
  33. 500 ;SET UP SCREEN
  34. 510 START LDA #$00;MAKE BORDER AND BACKGROUND BLACK
  35. 520 STA $D020
  36. 530 STA $D021
  37. 540 LDA #$07;MAKE THE CHARACTERS YELLOW
  38. 550 STA $0286
  39. 555 ;SEND FIRST MESSAGE TO SCREEN
  40. 560 LDA #<AMESS
  41. 570 STA INDEX
  42. 580 LDA #>AMESS
  43. 590 STA INDEX+1
  44. 600 JSR MESSOUT;SEND MESSAGE TO SCREEN
  45. 610 ;GET FILENAME FOR DISK READ
  46. 620 LDA #<FNAM;LOAD INDEX WITH LOCATION FOR FILENAME
  47. 630 STA INDEX
  48. 640 LDA #>FNAM
  49. 650 STA INDEX+1
  50. 660 LDA #$00
  51. 670 STA FLEN
  52. 680 JSR CLRCHN;MAKE SURE SCREEN AND KEYBOARD IS ACTIVE
  53. 690 NOKEY JSR GETIN;GET A CHAR FROM THE KEYBUF
  54. 700 BEQ NOKEY;IF NOTHING IS IN KEYBUF A REG WILL HOLD A ZERO
  55. 710 CMP #$14;CK FOR DELETE KEY
  56. 720 BNE CKRT
  57. 730 LDA FLEN;BEFORE DELETING MAKE SURE THAT THERE
  58. 740 BEQ NOKEY;IS A CHAR IN FNAM
  59. 750 LDA #$14;DELETE CHAR ON SCREEN
  60. 760 JSR CHROUT
  61. 770 DEC FLEN
  62. 780 JMP NOKEY
  63. 790 CKRT CMP #$0D;CK FOR RETURN TO EITHER EXIT PROGRAM
  64. 800 BNE VALKEY;OR OPEN DISK FILE
  65. 810 LDA FLEN;CK NUMBER OF CHAR IN KEYBUF
  66. 820 BNE DOPEN;IF ANY CHARS THEN OPEN DISK FILE
  67. 830 RTS;IF RETURN PRESSED WITH NO CHAR IN KEYBUF THEN EXIT ROUTINE
  68. 840 VALKEY LDY FLEN;LOAD Y REG WITH FLEN
  69. 850 CPY #$12;CK FOR MAX CHAR ALLOWABLE
  70. 860 BEQ NOKEY
  71. 870 STA (INDEX),Y;STORE IN FNAM BUFFER
  72. 880 JSR CHROUT;AND ECHO CHAR TO SCREEN
  73. 890 INC FLEN;INC FLEN POINTER
  74. 900 JMP NOKEY
  75. 910 DOPEN LDY FLEN;ADD ,S TO FNAM
  76. 920 LDA #","
  77. 930 STA (INDEX),Y
  78. 940 INY
  79. 950 LDA #"S"
  80. 960 STA (INDEX),Y
  81. 970 INY
  82. 980 STY FLEN
  83. 1000 ;OPEN CHANNELS TO DISK DRIVE
  84. 1010 LDA #$00;FIRST COMMAND CHANNEL
  85. 1020 JSR SETNAM;NO FILE NAME NEEDED HERE
  86. 1030 LDA #$0F;OPEN15,8,15
  87. 1040 LDX #$08
  88. 1050 LDY #$0F
  89. 1060 JSR SETLFS;OPEN LOGICAL FILE
  90. 1070 JSR OPEN;COMMAND CHANNEL OPENED
  91. 1080 BCC ROPEN;CK IF OPEN WAS OK
  92. 1090 JMP DERROR;COULD NOT OPEN CHANNEL
  93. 1100 ROPEN LDA FLEN;GET LENGTH OF FILENAME
  94. 1110 LDX #<FNAM
  95. 1120 LDY #>FNAM
  96. 1130 JSR SETNAM
  97. 1140 LDA #$08
  98. 1150 LDX #$08
  99. 1160 LDY #$00
  100. 1170 JSR SETLFS
  101. 1180 JSR OPEN;OPEN8,8,8,"FNAM,S"
  102. 1190 BCC CKERROR
  103. 1200 JMP DERROR;COULD NOT OPEN READ FILE
  104. 1210 CKERROR JSR RERROR;CK ERROR CHAN ON DISK DRIVE
  105. 1215 ;SELECT OUTPUT
  106. 1220 LDA #<BMESS;PRINT MESSAGE 'SCREEN OR PRINTER'
  107. 1230 STA INDEX
  108. 1240 LDA #>BMESS
  109. 1250 STA INDEX+1
  110. 1260 JSR MESSOUT
  111. 1270 JSR CLRCHN;MAKE SURE SCREEN AND KEYBOARD ACTIVE
  112. 1280 NSORP JSR GETIN
  113. 1290 CMP #"S"
  114. 1300 BNE P
  115. 1310 JSR OSCR;SET UP SCREEN FOR OUTPUT
  116. 1320 JMP READ
  117. 1330 P CMP #"P"
  118. 1340 BNE NSORP;MUST BE S OR P
  119. 1350 JSR PRINTER;DO PRINTER SETUP
  120. 1360 READ   =*
  121. 1400 LDX #$08;OPEN INPUT CHANNEL FROM DISK
  122. 1410 JSR CHKIN
  123. 1420 ZERO JSR CHRIN
  124. 1430 BEQ ZERO;IF ZERO BYTE THROW IT AWAY.
  125. 1440 STA ATEMP
  126. 1450 JSR READST;READ THE I/O BYTE
  127. 1460 STA RTEMP;KEEP IT FOR LATER
  128. 1470 BSEND LDX OUTFILE;OPEN OUTPUT CHANNELL
  129. 1480 JSR CHKOUT
  130. 1490 BEQ SEND;CK IF CHKOUT WORKED
  131. 1500 JSR CLRCHN;CHKOUT FAILED
  132. 1510 JSR GETIN;BREAK OUT OF THIS LOOP BY PRESSING ANY KEY
  133. 1520 BEQ BSEND;NO KEY PRESSED TRY TO OPEN OUTPUT CHAN AGAIN
  134. 1530 JMP DONE;EXIT OUT OF THIS LOOP
  135. 1540 SEND LDA ATEMP;RELOAD ACC FOR SEND
  136. 1550 JSR CHROUT;SEND THE BYTE
  137. 1560 JSR CLRCHN;RESTORE DEFAULT CHANNELS
  138. 1570 LDA RTEMP;CK FOR END OF FILE
  139. 1580 AND #$40;CK FOR 64 DECIMAL
  140. 1590 BNE DONE;IF EOF THEN CLOSE ALL FILES
  141. 1600 PAUSE LDA SHFLAG;CK FOR SHIFT AND/OR CRTL KEY
  142. 1610 CMP #$01;$01=SHIFT ONLY DOWN
  143. 1620 BEQ PAUSE
  144. 1630 CMP #$05;$05=SHIFT AND CTRL KEY DOWN
  145. 1640 BEQ DONE;EXIT IF SHIFT/CRTL PRESSED
  146. 1650 JMP READ
  147. 1680 DONE LDA #$08;START CLOSING CHANNELS
  148. 1690 JSR CLOSE;DISK READ FIRST
  149. 1700 LDA #$0F
  150. 1710 JSR CLOSE;DISK COMMAND CHANNEL NEXT
  151. 1720 LDX OUTFILE;SEND CR TO OUTPUT DEVICE
  152. 1730 JSR CHKOUT;IF USING PRINTER THEN THAT
  153. 1740 LDA #$0D;WILL CLEAR ALL BUFFERS MAKING
  154. 1750 JSR CHROUT;SURE ALL CHARACTERS ARE
  155. 1760 JSR CLRCHN;ARE PRINTED
  156. 1770 STA INDEX+1
  157. 1780 JSR MESSOUT
  158. 1790 LDA OUTFILE
  159. 1800 JSR CLOSE;AND OUTPUT FOR PRINTER OR SCREEN
  160. 1810 LDA #<EMESS
  161. 1820 STA INDEX
  162. 1830 LDA #>EMESS
  163. 1840 STA INDEX+1
  164. 1850 JSR MESSOUT
  165. 1860 NOCR JSR GETIN
  166. 1870 CMP #$0D;IS IT A CR
  167. 1880 BNE NOCR
  168. 1890 JMP START;(null) BACK TO THE BEGINNING
  169. 3000 DERROR JSR CLRCHN;MAKE SURE I/O INITIALIZED
  170. 3010 JSR CLALL;MAKE SURE ALL OPEN CHANNELS ARE CLOSED
  171. 3020 LDA #<CMESS;UNABLE TO OPEN ERROR CHAN
  172. 3030 STA INDEX
  173. 3040 LDA #>CMESS
  174. 3050 STA INDEX
  175. 3060 JSR MESSOUT
  176. 3070 RTS;THIS ERROR IS FATAL AND WE DON'T WANT TO TRY AGAIN
  177. 4000 RERROR LDX #$0F;READ AND CK DISK ERROR CHAN
  178. 4010 JSR CHKIN
  179. 4020 NULL JSR GETIN
  180. 4030 BEQ NULL
  181. 4040 STA HIGH
  182. 4050 JSR GETIN
  183. 4060 STA LOW
  184. 4070 CMP #$30;IF FIRST TWO CHARS ARE
  185. 4080 BNE CK;ASCII ZERO AND ZERO
  186. 4090 LDA HIGH;THEN NO ERROR OCCURED
  187. 4100 CMP #$30;
  188. 4110 BEQ EMPTY;REMOVE THE ENTIRE ERROR MESSAGE
  189. 4120 CK LDA #$0D;IF NOT THEN PRINT ERROR
  190. 4130 JSR CHROUT;ERROR MESSAGE
  191. 4140 LDA HIGH
  192. 4150 JSR CHROUT
  193. 4160 LDA LOW
  194. 4170 REPEAT JSR CHROUT
  195. 4180 JSR GETIN
  196. 4190 CMP #$0D
  197. 4200 BNE REPEAT
  198. 4210 PLA:PLA;REMOVE RETURN ADDRESS FROM STACK
  199. 4220 JSR CLRCHN
  200. 4230 LDA #$08:JSR CLOSE
  201. 4240 LDA #$0F:JSR CLOSE;CLOSE DISK CHAN
  202. 4250 LDA #<EMESS
  203. 4260 STA INDEX
  204. 4270 LDA #>EMESS
  205. 4280 STA INDEX+1
  206. 4290 JSR MESSOUT
  207. 4300 NCR JSR GETIN
  208. 4310 CMP #$0D
  209. 4320 BNE NCR
  210. 4330 JMP START
  211. 4340 EMPTY JSR GETIN;NO DISK ERROR BUT
  212. 4350 CMP #$0D;SHOULD STILL READ THE ENTIRE
  213. 4360 BNE EMPTY;MESSAGE OUT OF ERROR CHAN
  214. 4370 JSR CLRCHN
  215. 4380 RTS
  216. 5000 MESSOUT LDY #$00;SEND MESSAGE TO SCREEN
  217. 5010 LPY LDA (INDEX),Y;INDEX POINTS TO START OF MESSAGE
  218. 5020 BEQ END;AND IT MUST END WITH A ZERO BYTE
  219. 5030 JSR CHROUT
  220. 5040 INY
  221. 5050 BNE LPY;HAS Y LOOPED AROUND TO ZERO
  222. 5060 INC INDEX+1;IF IT HAS WE MUST INC
  223. 5070 JMP LPY;THE HI BYTE OF OUR INDEX ADDRESS
  224. 5080 END RTS
  225. 6000 PRINTER LDA #<PMESS;PRINTER SELECTION
  226. 6010 STA INDEX
  227. 6020 LDA #>PMESS
  228. 6030 STA INDEX+1
  229. 6040 JSR MESSOUT
  230. 6050 LPP JSR GETIN
  231. 6060 CMP #"4";COMPARE TO ASCII 4
  232. 6070 BCC LPP;LESS THAN 4
  233. 6080 CMP #"8";
  234. 6090 BCS LPP;GREATER THAN 7
  235. 6100 STA ATEMP
  236. 6110 JSR CHROUT;ECHO TO SCREEN
  237. 6120 LDA ATEMP
  238. 6130 SEC:SBC #$30;CONVERT FROM PETSCII
  239. 6140 STA PDEV
  240. 6150 LDA #<SECMESS;ASK FOR SECONDARY ADDRESS
  241. 6160 STA INDEX
  242. 6170 LDA #>SECMESS
  243. 6180 STA INDEX+1
  244. 6190 JSR MESSOUT
  245. 6200 LPS JSR GETIN
  246. 6210 CMP #"0";ZERO TO NINE ONLY FOR THIS PROGRAM
  247. 6220 BCC LPS
  248. 6230 CMP #$3A
  249. 6240 BCS LPS
  250. 6250 STA ATEMP
  251. 6260 JSR CHROUT;ECHO TO SCREEN
  252. 6270 LDA ATEMP
  253. 6280 SEC:SBC #$30;CONVERT FROM PETSCII
  254. 6290 TAY
  255. 6300 LDA #$04
  256. 6310 STA OUTFILE
  257. 6320 LDX PDEV
  258. 6330 JSR SETLFS;OPEN LOGICAL FILE #4 FOR PRINTER
  259. 6340 LDA #$00
  260. 6350 JSR SETNAM;NO FILENAME FOR PRINTER
  261. 6360 JSR OPEN;OPENOUTDEV,PDEV,SECADD
  262. 6370 RTS
  263. 6500 OSCR LDA #$03;OPEN FILE TO SCREEN
  264. 6510 STA OUTFILE
  265. 6520 LDX #$03
  266. 6530 LDY #$00
  267. 6540 JSR SETLFS
  268. 6550 LDA #$00
  269. 6560 JSR SETNAM
  270. 6570 JSR OPEN
  271. 6590 RTS
  272. 7000 AMESS =*;OPENING MESSAGE
  273. 7010 .BYTE $93;CLEAR/HOME
  274. 7020 .BYTE $0D,$0D,$0D,$0E
  275. 7030 .ASC "         [211][197][209][213][197][206][212][201][193][204] [198][201][204][197] [210][197][193][196][197][210]"
  276. 7040 .BYTE $0D,$0D
  277. 7050 .ASC "             [194]Y [204]YLE [199]IESE"
  278. 7060 .BYTE $0D,$0D
  279. 7070 .ASC " [213]SE THE [211]HIFT AND [211]HIFT [204]OCK TO PAUSE
  280. 7080 .BYTE $0D
  281. 7090 .[198] " LISTING. (null)RESS THE LENTRL AND (null)HIFT TO"
  282. 7100 .BYTE $0D
  283. 7110 .[198] " EXIT CURRENT FILE. (null)O EXIT JUST"
  284. 7120 .BYTE $0D
  285. 7130 .[198] " HIT RETURNWAIT AT THE ASCILENAME > PROMPT."
  286. 7140 .BYTE $0D,$0D
  287. 7150 .[198] " ASCILENAME > "
  288. 7160 .BYTE $00
  289. 7200 BMESS [178][172];SCREEN [176] [153]ER MESSAGE
  290. 7210 .BYTE $0D
  291. 7220 .[198] " (null)WAITCREEN OR (null)WAITRINTER? "
  292. 7230 .BYTE $00
  293. 7300 CMESS [178][172];UNABLE [164] [159] ERR[176] CHANNEL [164] DISK DRIVE
  294. 7310 .BYTE $0D
  295. 7320 .[198] " (null)NABLE TO OPEN ERROR CHANNEL TO DISK
  296. 7330 .BYTE $0D
  297. 7340 .ASC " DRIVE. [212]RY AGAIN LATER!"
  298. 7350 .BYTE $0D,$00
  299. 7400 DMESS =*;DISK ERROR TRYING TO OPEN READ CHANNEL
  300. 7410 .BYTE $0D
  301. 7420 .ASC "  [196][201][211][203] [197][210][210][207][210] [146]"
  302. 7430 .BYTE $0D,$00
  303. 7500 EMESS =*;END OF FILE
  304. 7510 .BYTE $0D
  305. 7520 .ASC "  [208]RESS RETURN TO CONTINUE [146] "
  306. 7530 .BYTE $0D,$00
  307. 7600 PMESS =*;PRINTER DEVICE NUMBER
  308. 7610 .BYTE $0D
  309. 7620 .ASC " [196]EVICE [206]UMBER(4-7)? "
  310. 7630 .BYTE $00
  311. 7700 SECMESS =*;SECONDARY ADDRESS
  312. 7710 .BYTE $0D
  313. 7720 .ASC " [211]ECONDARY [193]DDRESS(0-9)? "
  314. 7730 .BYTE $00
  315.