@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H  }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREIE SEKT.! G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSBENUTZE MEM.SAV UM ZU LADEN!! D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSFEHLER-SAVE IN MEM.SAV AUF DISK TIPP Y FUE&}R DOS-START B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu } 3E:`}ABBUC e.V. DOS 2.5FarbeŠΠ㩠 . DISK INHALT . FORMAT 1040. ZUM BASIC *} . DUPLIZIER DISK. KOPIERE FILE . BINAER SAVE. LOESCHE FILE(S) . BINAER LOAD. NAME AENDERN . START AB ADRE +}S. SICHERE FILE . MEM.SAV ANLEG.. ENTSICHERE FILE . DUPLIZIER FILE. DOS NEU ANLEGEN . FORMAT 720SecL !N' ,}#"&))9(&*)/h)''-&؆莟R'S  v L/ˢ L }LEGE-->DOS 2.0s, TIPP Λx  -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!FALSCHE WAHLWAEHLE .} FUNKTION-->νś! 0 .z:*{}.|{ 1 0 0JB 18L%|DL /}%DISK INHALT-->AUSGABE,FILE NAME ?[# 0 0 &|D3" 1L!NICHT AUF DISK N !B 1L!E# 1 !BD 0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0. 1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TIPP "" ZUM LOESCHENWAS LOESCHEN ? 2}KOPIE-VON,NACH?WAHL NICHT ERLAUBT PICTURE 065 KOPIERE---D2:PICTURESl# 0|D .L/%# 3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY 4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!ABKUERZUNGEN SIN 6}D JETZT NICHT ERLAUBT 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!NICHT LADBAR WELCHE DATEI LADEN ?) 0 ?}0#B 1L!SICHERE FILE NAME?) 0 0$B 1L!ENTSICHER FILE NAME?DUP DISK-QUELL,ZIEL STATION?TIPP "" FUER PROGRA @}MMGEBRAUCH :""LOESCHT MEM.SAV SPEICHERFE! +L1   `*  70 2 2 A} 0.* 1 y0 0)LEGE DISK EIN ,TIPP "^, 1 y038逍 N, 1L! , B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0 C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,Hh D}` DISK VOLL !!! LEGE QUELLDISK EIN,TIPP ΛLEGE ZIELDISK EIN ,TIPP  E}`  `8 rL1`-* 1P* 1 y0Y`hhL!GEBE FILE NAME AN ? - 0 0|DL% <. F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#P H},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭ I}}`8}``|* ? ɛ,`|:-)| / 1L!`ZIEL KANNKEIN DOS.SYS J}SEIN!0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξ K}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GEBE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L! M}0 0 1L~0`NUR 1 BUCHSTABE !! ,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥ N}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAME O} ZU LANG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 L P}!FEHLER- 128ɛ+,' 20*.. өr2 1``2ZU VIELE WERTE!FALSCHE HEXA Q}DEZIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1GEBE D1-->D8 ANu R} EZIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1GEBE D1-->D8 ANu R`!̭"ͩO!"Р̙O4ST`йN ̌!͌"Р`%POKE559,0POKE65,0RUN"D:AUTORUN(T}.BAS"!̭"ͩO!"Р̙O4ST`йN ̌!͌"Р`%POKE559,0POKE65,0RUN"D:AUTORUN( @CDTg|MAd;Au,nnn6.dhBթHI V00P.B. '86ۅܥX,V}ׅ٥Y؅ک֝HI V`)ޘ)xww67A,.dHI V֩HI VթHI Vݠݑ8ե֐ I,W}EiPאة`0^^67A,.Ki(ץiؐiׅ٥i؅ڥ HI V,X}1 +@AY1@e//@@D:ABBUCMAG.PIC6-?:C:,,@,Y}AA'AA'A @AY@T!6-!AdAU6-%@,Z}** A*F:Ad,"AUA AY..@@ D:ACTIONM.PIC6-?:C:,[},,@AA"'AA'A @,'AY@T'AR@6$$( ,\} (c) 1992 ABBUC. e.V. @( Ausgabe 2J##( ACTION! Working GroupT!6-!AdAU^,]}6-%@h** A*F:Ad,"AUAPr% D:LESER.BAS D:AUTORUN.BAShBթHI V,^}00P.B. '86ۅܥ,"AUAPr% D:LESER.BAS D:AUTORUN.BAShBթHI V,%(4|F>[V?V?P?RLO?0`}I? K? H?J?KE;?0a}ǂ:?ǂ;?:?; ?0b}݂: ??ǂ>LJF G M0c}LSRǂ@?@?? 0d}@ I>?> 0e}???߇>???>@0f}?ߝ????>??0g}>? > ?>0h}?ޞ?? ߝ>? ?>0i}?????>=?>0j}= G?߂G?݂>??=??0k}>=D?C??>0l}?=?>=?F?G0m}EHFG\D=?F?G08(4|F,?Y?SR?DE??4o}F?LMRN?SP4p}S?RG?E??? ?0??4q} / 0`.? 0`/Ç??4r}3cÃ.???3cÃ0? 0???4s} 1?`//4t} a?/ 8?0???/4u}??/ ??/4v}~/?|?/? }/4w}+??+? >*4x}? |*?? ( ?4y}*?)???-?4z}?p/?~|??/?~|/4{}/?/?/4|}Ä?/?? À0? >/4}} |?0?|/04~}?/?A0?? ??04} ??0 ?0 14}?0??/I? ~a4}?.??/(%" .p)&p?4} /@@??<`@@??D?>x4}D?F?P?L?Q?O?4}SS?VX\Y?L?Q?O?4=cdNNNNNNN3N3N4N3N25FHTFILESPAGEXLLEERLEEMREAMFOMINMSCMOFMMOMINSCSESCIBUANPAG8}NKENPMDEHEFKLEISEICPLL 8} @@8} !"#$%&'()*8}+,-./012s6-6-@#6-%+6-%36-%?6-8}@K6-@2S6-&_6-@@g6-&s6-AV"F:B2,@v" A2WW;@ ,;@ ,;@8}R,;A`,;A,9@,9@,;, --@" 68,-)68,--  1,10,12,7,20,4,25,88},34,4 ( 6.67,.67,.(6-C:,?6-B26-%6-%'6-%/6-%76-%?6-%36-Btr8}6-Br!6-'6-36-Bd# AAY# Ai***** Kopfzeilen''(} ACTION! Magaz8}in 1s *****x6-?:<<B <, A0 A***** DIRECTORY EINLESEN))(!}8}@D:*.TXT 6- 7<,0 A 5 6-%6-?:67$@&@<$@,.7<@,D6.L/4AWG2VOR/6.ACTION! Magazin 8}VorwortV" 4LL"6.Little Lister 2`.4CSTRING.6.'C'-Strings in ACTION!j) 4DLI)6.Interrupts in ACTI8}ON!t,4TVI925,6.TVI Terminal Emulator (| -(| A0(((( | zurueck |8}2((( <F( -%$6-?:<%$<%$<,( P$x***** BILDSCHIRM%@8}!A@r%+AR6-?:<,$@***** Bildschirm-AusgabeE, 6- A%-@8@#8},( J6-@:7$&,,%$@:7$,,T=6-?:<<<,#6-P:'@,=%&@$%@Y<6-P:'@,.8}%&$@%@<%@^ Ah"@'$i6-P:',6-&$j- 6-$%67<,.>:,-67%8}<%,.>:,r!!@a*@2A|"BU5A0! 6-%!*BU5!6- A#"@8} A(# A@E)"A0 6-& A***** GET KEYK:)8}$l***** Hauptmenuev 6- A..(& Bildschirm Drucker Info Neustart Ende 6-6-?:<%8,<8,,! 8} A!"AUAjK"@B)"@C)"@f)"@h)"@i)"@s)"@x`6-?:<%8,<8,,8}j AP A@?++"@B* @,)+"@C*!,?6-&+&@BP,$"@f6-"@h68}-"@s6-"@x6-"@i6-%6-?:<%8,<8,,!!"@B)"@CA@8} "6- A& " A# A@ " %G"@6-?:,*AA`6@:+D8} BDDG.!@@!-@( (|o Heftrand |(|o Kleinschrift8} | (|o Seitennumerierung|(| ok, Text drucken |(| zurueck | )()8}@*-@(4-@(>-@(H( 6-(6-?:<%@%$<@,8}R A\Y"@E*!26-?:<%@%$<@,:6-&Y6-?:<%@%$<@,fY"@a* 26-8}?:<%@%$<@,:6-%Y6-?:<%@%$<@,p"@'A"@zAUA!0 "6-8} A&"A"@4 "6-&-@4(>:A&@$,4 "6-&-@4(>:A&@8}$,4 "6-&-@4(>:A&@$, A!04@-@06-?:<<%$<,4 8} A@***** Info '@@'-@@$ !!(. !!(|ABBUC Textforma8}tierung|L !!(V !!(| Formatroutine 100% MS|` !!(| vor/zurueck blaettern|j !!(| sowie S8}eitenwahl |t !!(| neue, schnellere Aus-|~ !!(| gabe durch voellig | !!(| neue Print-Routine | !!(8} !!(| (c) 1989 by HiassofT | !!(  A@( .-8}@@*6-?:<<%$<,.  $( ***** Text-Auswahl2 0 -%,6-?:<%$<%$%A$<,0 < ( 6-8}(6-?:<%$%A%<@0,F AP Y"@E*!26-?:<%$%A%<@0,:6-&Y6-?:<%$%A%<8}@0,Z ["@a* %46-?:<%$%A%<@0,<6-%[6-?:<%$%A%<@0,d "@'An 8}AUA&0x !A "A'@ < 6-,6.7$@&@<$@,<6-?::,6-%'67%,.>:,@ A(@J  4 6.=:,T  6-A:,A) U  !8}6-%V '7$&<$,46-' A) W  !6-]  "6-^ (-@8@#!AR(( h $8} ***** Seite Drucken $AYBBr$6-?:, WWǺŠԠҺ͠ΠĠ8}Π $$: LPRINT CHR$(27);"W";CHR$(0); C@P:+( PA Rl76-@C6-@d8} ##:LPRINT CHR$(27);"W";CHR$(0); (l 6-@g #(#6-P:$@P, 6-&  6-8}6-B % 6. 67@Q,. %67,. "A0 ""(@7<+&@,', )$(@- - - 8} - - -)( $6-?:<<<,( $6-% BU5A0`& (@@0 A ***** MS8}-Teil laden  D:WRAP.OBJ ? ))))&)-)?6-%$&&$% 6-P:',6-&$8} RAPAR'AS3AV?AWR6-?:C:hLV,,  $(c) 89-08-20 HiassofT8} D:LESER.BAS(c) 89-08-20 HiassofTESER.BAS123 FREIE SEKT.!4LBOX.TXTors1TXTTOOLBOX Little Lister 2ACTION! in A8}CTION!rt2 AWG2VOR CSTRING DLI TVI925 LL KLARTOOLBOX PULSE ittle Lister 2ACTION! in A8cHKLHLsHLIL&JLaKLJLpKhӍH ӢBDPEHoI VIiOϽHΠɛϩϭH`hh<}hhh̩Hhh HXХYѩͭӍH ӭH 'ЈɛjH:H0"Ԫ)H) i@`8 HЈHmHԐL<}nIȘHI BԝD՝EeԅԐ VLIЋ ̈HBHԪ)H) i@`8 HЈHmHԐ<}i(АLIHI BԝD՝EȘeԅԐ VHI V)LHԅխH'Јi(АLI<}H`hhhhhԩ`hhhhhhhԑ̈`hhh JJJJy0J1XJYJ&JOK \<}K`BOB@DJFO BJAyJJJodervor뀀<}[abbrechen3%)4%L_HHH+5K7K ԌЍhhh@$4  :KBK ԌЍL.Kh@<}ԩ_L\hhhhhIԈ`L_HHH+5K7K ԌЍhhh@$4  :KBK ԌЍL.Kh@<!PROC _CPYPRM=*()SET $4EE = _CPYPRM[$85$A0$86$A1$84$A2$18$68$85$84$69$03$A8$68$85$85$69$00$48$98$48$A0$01$B1$84$85$82$C8$L}B1$84$85$83$C8$B1$84$A8$B9$A0$00$91$82$88$10$F8$60]PROC _CHGSGN=*()[$85$C0$86$C1$38$A9$00$E5$C0$48$A9$00$E5$C1$AA$68$60L}]PROC _FIXSGN=*()[$86$C2$E0$00$10$03$20 _CHGSGN $85$82$86$83$A5$85$45$C2$85$C2$A6$85$10$09$A5$84$20 _CHGSGN $85$84$86$8L}5$60]PROC _FIXRES=*()[$A5$86$A6$87$A4$C2$10$03$4C _CHGSGN$60]PROC _MUL=*()SET $4E8 = _MUL[$20 _FIXSGN $A9$00$85$86$L}85$87$A5$82$D0$04$A5$83$F0$22$A5$84$D0$04$A5$85$F0$1A$46$85$66$84$90$0D$18$A5$86$65$82$85$86$A5$87$65$83$85$87$06$82$26$8L}3$38$B0$D6$4C _FIXRES]PROC _DIV=*()SET $4EA = _DIV[$20 _FIXSGN $A9$00$85$86$85$87$85$C1$A9$01$85$C0$A5$82$D0$04$A5$83$FL}0$5F$A5$84$D0$04$A5$85$F0$57$A5$82$C5$84$A5$83$E5$85$90$0F$A5$C1$30$0B$06$84$26$85$06$C0$26$C1$38$B0$E7$A5$C0$D0$04$A5$C1L}$F0$36$A5$82$D0$04$A5$83$F0$2E$A5$82$C5$84$A5$83$E5$85$90$19$38$A5$82$E5$84$85$82$A5$83$E5$85$85$83$A5$86$05$C0$85$86$A5$8L}7$05$C1$85$87$46$85$66$84$46$C1$66$C0$38$B0$C2$4C_FIXRES]PROC _MODOP=*()SET $4EC = _MODOP[$20 _DIV $A5$82$A6$83$60]L}PROC _RSHOP=*()SET $4E6 = _RSHOP[$A4$84$F0$0A$86$86$46$86$6A$88$D0$FA$A6$86$60]PROC _LSHOP=*()SET $4E4 = _LSHOP[$A4$8L}4$F0$0A$86$86$0A$26$86$88$D0$FA$A6$86$60]PROC _ERROU=*()[$A9$70$AA$A9$0C$9D$42$03$20$56$E4$8A$38$E9$10$D0$F1$6C$0A$00]L}PROC _ERRVEC=*()[_ERROU]PROC _DEVIC=*()[$00]MODULECARD Error=_ERRVECBYTE device=_DEVICPROC _GOCIO=*()[$20$56$E4L}$10$1A$C0$88$F0$06$68$68$98$6C _ERRVEC $48$8A$48$4A$4A$4A$4A$AA$A9$01$9D$C0$05$68$AA$68$60]PROC _LODCHN=*()[$C9$08$90$0L}7$68$68$A9$86$6C _ERRVEC$0A$0A$0A$0A$AA$60]PROC _STONAM=*()[$18$69$01$9D$44$03$98$69$00$9D$45$03$60]PROC _SHFTR=*()L}[$48$8A$A8$68$AA$AD _DEVIC $60]PROC _CLREOL=*()[$48$A9$00$85$A5$68$60]PROC _SETEOL=*()[$48$A9$01$85$A5$68$60]PROC L}_PRECON=*()[$8A$48$98$AA$68$A0$03$84$A3$A0$FD$60]PROC _DOPRNT=*()[$86$A3$84$A4$20 _LODCHN $A9$00$9D$49$03$A8$B1$A3$F0$1L}A$9D$48$03$18$A5$A3$69$01$9D$44$03$A5$A4$69$00$9D$45$03$A9$0B$9D$42$03$20 _GOCIO $A5$A5$F0$12$A9$00$9D$48$03$9D$49$03$A9$0L}B$9D$42$03$A9$9B$20 _GOCIO $60]PROC StrC=*(CARD c, s)[$85$D4$86$D5$84$A2$20$AA$D9$20$E6$D8$A0$00$B1$F3$30$06$C8$91$A2$3L}8$B0$F6$29$7F$C8$91$A2$98$A0$00$91$A2$60]PROC StrB=*(BYTE b CARD s)[$84$A3$48$8A$A8$A2$00$68$4C StrC]PROC StrI=*(INT L}i CARD s)[$E0$00$30$03$4C StrC $49$FF$85$A2$8A$49$FF$AA$E6$A2$D0$01$E8$A5$A2$20StrC $A0$00$18$B1$A2$69$01$91$A2$A8$88$BL}1$A2$C8$91$A2$88$88$D0$F7$C8$A9$2D$91$A2$60]PROC _DOPRNC=*()[$48$20 _PRECON $20 StrC $68$A2$FD$A0$03$4C _DOPRNT]PROCL} DOPRNI=*()[$48$20 _PRECON $20 StrI $68$A2$FD$A0$03$4C _DOPRNT]PROC PrintCD=*(BYTE d CARD c)[$20 _CLREOL $4C _DOPRNC]L}PROC PrintC=*(CARD c)[$20 _SHFTR $4C PrintCD]PROC PrintCDE=*(BYTE d CARD c)[$20 _SETEOL $4C _DOPRNC]PROC PrintCE=*(CL}ARD c)[$20 _SHFTR $4C PrintCDE]PROC PrintBD=*(BYTE d, b)[$A0$00$4C PrintCD]PROC PrintB=*(BYTE b)[$20 _SHFTR $4C PrinL}tBD]PROC PrintBDE=*(BYTE d, b)[$A0$00$4C PrintCDE]PROC PrintBE=*(BYTE b)[$20 _SHFTR $4C PrintBDE]PROC PrintID=*(BYL}TE d INT i)[$20 _CLREOL $4C _DOPRNI]PROC PrintI=*(INT i)[$20 _SHFTR $4C PrintID]PROC PrintIDE=*(BYTE d INT i)[$20 _SL}ETEOL $4C _DOPRNI]PROC PrintIE=*(INT i)[$20 _SHFTR $4C PrintIDE]PROC PrintD=*(BYTE d CARD s)[$20 _CLREOL $4C _DOPRNT]L}PROC Print=*(CARD s)[$20 _SHFTR $4C PrintD]PROC PrintDE=*(BYTE d CARD s)[$20 _SETEOL $4C _DOPRNT]PROC PrintE=*(CARL}D s)[$20 _SHFTR $4C PrintDE]PROC _HEXSTR=*()[$85$84$86$85$A9$FD$85$A2$A9$03$85$A3$A0$00$A9$05$91$A2$C8$A9$24$91$A2$A9$L}00$A2$04$06$84$26$85$2A$CA$D0$F8$69$30$C9$3A$90$02$69$06$C8$91$A2$C0$05$D0$E5$60]PROC PrintF=*(CARD s,a,b,c,d,e,f,g)[$8L}5$82$86$83$84$A2$AD _DEVIC $0A$0A$0A$0A$85$C1$A0$00$84$87$84$C0$B1$82$F0$4C$85$86$E6$C0$F0$46$A4$C0$C4$86$F0$02$B0$3E$B1$8L}2$C9$25$D0$3E$E6$C0$C8$C4$86$F0$02$B0$35$B1$82$C9$25$F0$2F$C9$45$F0$29$A8$A6$87$E0$0E$B0$D4$B5$A2$48$B5$A3$E8$E8$86$87$AA$L}68$C0$43$F0$15$C0$49$F0$34$C0$48$F0$3C$C0$53$F0$3F$38$B0$1D$60$38$B0$B2$A9$9B$A8$A6$C1$A9$00$9D$48$03$9D$49$03$A9$0B$9D$4L}2$03$98$20 _GOCIO $38$B0$E4$A0$03$84$A3$A0$FD$20 StrC $38$B0$0F$A0$03$84$A3$A0$FD$20 StrI $38$B0$03$20 _HEXSTR $A9$FD$A2$0L}3$85$84$86$85$A6$C1$A9$00$9D$49$03$A8$B1$84$F0$B5$9D$48$03$18$A5$84$69$01$9D$44$03$A5$85$69$00$9D$45$03$A9$0B$9D$42$03$20L}_GOCIO $38$B0$98]PROC PutD=*(BYTE d, c)[$86$A0$20 _LODCHN $A9$00$9D$48$03$9D$49$03$A9$0B$9D$42$03$A5$A0$20 _GOCIO$60]L}PROC PutDE=*(BYTE d)[$A2$9B$4C PutD]PROC Put=*(BYTE c)[$AA$AD _DEVIC $4C PutD]PROC PutE=*()[$A9$9B$4C Put]BYTE FL}UNC ValB=*(CARD a)CARD FUNC ValC=*(CARD a)INT FUNC ValI=*(CARD a)[$85$A2$86$A3$A9$00$85$A0$85$A1$85$A5$A8$B1$A2$85$A4$C8$L}B1$A2$C9$20$F0$F9$C9$2D$D0$0B$C6$A5$C8$C4$A4$F0$02$B0$31$B1$A2$38$E9$30$90$2A$C9$0A$B0$26$48$06$A0$26$A1$A5$A0$A6$A1$0A$26L}$A1$0A$26$A1$18$65$A0$85$A0$8A$65$A1$85$A1$18$68$65$A0$85$A0$90$CD$E6$A1$38$B0$C8$A5$A5$F0$0D$38$A9$00$E5$A0$85$A0$A9$00$L}E5$A1$85$A1$60]PROC _DOINPT=*()[$86$A4$84$A5$20 _LODCHN $18$A5$A4$69$01$9D$44$03$A5$A5$69$00$9D$45$03$A5$A3$F0$18$9D$48L}$03$A9$00$9D$49$03$A9$05$9D$42$03$20 _GOCIO $BD$48$03$F0$03$38$E9$01$A0$00$91$A4$A5$A6$F0$07$A5$A4$A6$A5$4C ValC $60]BYL}TE FUNC InputBD=*(BYTE d)CARD FUNC InputCD=*(BYTE d)INT FUNC InputID=*(BYTE d)[$48$A9$78$85$A3$A9$01$85$A6$68$A2$FD$A0$03L}$4C _DOINPT]BYTE FUNC InputB=*()CARD FUNC InputC=*()INT FUNC InputI=*()[$AD _DEVIC$4C InputCD]PROC InputMD=*(BYTE d L}CARD s BYTE l)[$48$A9$00$85$A6$68$4C _DOINPT]PROC InputSD=*(BYTE d CARD s)[$48$A9$FF$85$A3$68$4C InputMD]PROC InputS=L}*(CARD s)[$20 _SHFTR $4C InputSD]CHAR FUNC GetD=*(BYTE d)[$20 _LODCHN $A9$00$9D$48$03$9D$49$03$A9$07$9D$42$03$20 _GOCIOL}$85$A0$60]PROC Open=*(BYTE d CARD s BYTE m, a)[$86$A1$20 _LODCHN $A5$A1$20 _STONAM $A5$A3$9D$4A$03$A5$A4$9D$4B$03$A9$0L}3$9D$42$03$20 _GOCIO $8A$4A$4A$4A$4A$AA$A9$00$9D$C0$05$60]PROC Close=*(BYTE d)[$20 _LODCHN $A9$0C$9D$42$03$20_GOCIO $60L}]PROC XIO=*(BYTE d,z,c,a1,a2 CARD s)[$20 _LODCHN $98$9D$42$03$A5$A3$9D$4A$03$A5$A4$9D$4B$03$A5$A5$A4$A6$20_STONAM $20 _L}GOCIO $60]PROC Note=*(BYTE d CARD s, o)[$86$A1$84$A2$20 _LODCHN $A9$26$9D$42$03$20 _GOCIO $A0$00$BD$4C$03$91$A1$BD$4E$0L}3$91$A3$BD$4D$03$C8$91$A1$60]PROC Point=*(BYTE d CARD s BYTE o)[$86$A1$20 _LODCHN $A5$A1$9D$4C$03$98$9D$4D$03$A5$A3$9D$4L}E$03$A9$25$9D$42$03$20 _GOCIO $60]PROC Graphics=*(BYTE m)[$48$A2$60$A9$0C$9D$42$03$20$56$E4$68$9D$4B$03$49$10$09$0C$9D$L}4A$03$A9$53$85$A0$A9$3A$85$A1$A9$A0$9D$44$03$A9$00$9D$45$03$A9$03$9D$42$03$20 _GOCIO$60]PROC SetColor=*(BYTE r, h, l)[L}$C9$05$B0$13$85$A0$8A$0A$0A$0A$0A$85$A1$98$29$0F$05$A1$A6$A0$9D$C4$02$60]PROC Position=*(CARD x BYTE y)[$85$55$86$56$84$L}54$60]PROC Plot=*(CARD x BYTE y)[$20 Position $A9$06$AE$FD$02$4CPutD]PROC DrawTo=*(CARD x BYTE y)[$20 Position $A2$6L}0$A9$11$9D$42$03$AD$FB$02$8D$FD$02$20 _GOCIO$60]PROC Fill=*(CARD x BYTE y)[$20 Position $A2$60$A9$12$9D$42$03$AD$FB$02L}$8D$FD$02$20 _GOCIO$60]BYTE FUNC Locate=*(CARD x BYTE y)[$20 Position $A9$06$4C GetD]PROC Sound=*(BYTE c, p, d, v)[$L}C9$04$B0$25$86$A1$0A$AA$A9$00$8D$08$D2$A9$03$8D$0F$D2$A5$A3$29$0F$85$A3$98$29$0E$0A$0A$0A$0A$05$A3$9D$01$D2$A5$A1$9D$00$D2L}$60]PROC SndRst=*()[$A9$00$A2$07$9D$00$D2$CA$10$FA$60]BYTE FUNC Paddle=*(BYTE p)[$29$07$AA$BD$70$02$85$A0$60]BYTE L}FUNC PTrig=*(BYTE p)[$29$07$AA$BD$7C$02$85$A0$60]BYTE FUNC Stick=*(BYTE p)[$29$03$AA$BD$78$02$85$A0$60]BYTE FUNC STriM}g=*(BYTE p)[$29$03$AA$BD$84$02$85$A0$60]INT FUNC SCompare=*(CARD s1, s2)[$85$A4$86$A5$84$A2$A0$00$84$A0$84$A1$B1$A4$85$M}A6$B1$A2$85$A7$C4$A6$F0$15$C4$A7$F0$11$C8$B1$A4$D1$A2$F0$F1$90$03$E6$A0$60$C6$A0$C6$A1$60$A5$A6$C5$A7$F0$F9$B0$F0$90$F1]M}PROC SCopy=*(CARD d, s)[$85$A0$86$A1$84$A2$A0$00$B1$A2$A8$B1$A2$91$A0$C0$00$F0$04$88$38$B0$F4$60]PROC SCopyS=*(CARD d, M}s BYTE b, e)[$85$A0$86$A1$84$A2$A0$00$84$A6$B1$A2$C5$A5$B0$02$85$A5$A5$A4$F0$15$C5$A5$F0$02$B0$0F$A4$A4$E6$A4$B1$A2$E6$A6M}$A4$A6$91$A0$38$B0$E7$A5$A6$A0$00$91$A0$60]PROC SAssign=*(CARD d, s BYTE b, e)[$85$A0$86$A1$84$A2$A5$A4$F0$3B$C5$A5$F0$M}02$B0$35$85$A7$C6$A7$A0$00$84$A8$B1$A0$85$A9$B1$A2$85$AA$A5$A7$C5$A5$B0$15$A5$A8$C5$AA$B0$0F$E6$A8$A4$A8$B1$A2$E6$A7$A4$A7M}$91$A0$38$B0$E5$A5$A7$C5$A9$90$04$A0$00$91$A0$60]BYTE FUNC Rand=*(BYTE r)[$85$A2$C6$A2$A9$01$C5$A2$B0$05$38$2A$38$B0$F7M}$85$A3$AD$0A$D2$25$A3$C5$A2$F0$04$90$02$B0$F3$85$A0$60]PROC Poke=*(CARD a BYTE v)[$85$A0$86$A1$98$A0$00$91$A0$60]PROCM} PokeC=*(CARD a, v)[$20 Poke $C8$A5$A3$91$A0$60]BYTE FUNC Peek=*(CARD a)CARD FUNC PeekC=*(CARD a)[$85$A2$86$A3$A0$00$B1M }$A2$85$A0$C8$B1$A2$85$A1$60]PROC SetBlock=*(CARD a, l, v)[$85$A0$86$A1$84$A2$A0$00$A5$A2$D0$04$A5$A3$F0$16$A5$A4$91$A0$M }C8$D0$02$E6$A1$C6$A2$A5$A2$C9$FF$D0$E7$C6$A3$38$B0$E2$60]PROC Zero=*(CARD a, l)[$48$A9$00$85$A4$68$4C SetBlock]PROC M }MoveBlock=*(CARD d, s, l)[$85$A0$86$A1$84$A2$A0$00$A5$A4$D0$04$A5$A5$F0$18$B1$A2$91$A0$C8$D0$04$E6$A1$E6$A3$C6$A4$A5$A4$C9M }$FF$D0$E5$C6$A5$38$B0$E0$60]MODULE;--------end of RUNTIME.ACT------------91$A0$C8$D0$04$E6$A1$E6$A3$C6$A4$A5$A4$C9LS; C style strings - arbitrary ; length ending with a null byte;--------------------------------; Written Sept 3rd, 1987;U} by John DiMarco ;--------------------------------; Complete permission is given to ; duplicate this work, so long as ; tU}his message is included in any; duplicate. MODULEBYTE NULL=0BYTE ARRAY C_TMP(255)PROC AtoC(BYTE ARRAY A,C) ; ConverU}t from Action-style string ; to C style string ; Assume A,C are defined and ; C is as long as A. BYTE i FOR i=1 TOU} A(0) DO C(i-1)=A(i) OD C(A(0))=NULLRETURNCARD FUNC AC(BYTE ARRAY A) ; Convert an Action-style string U}; to a C style string BYTE i,j j=A(0) FOR i=1 TO j DO A(i-1)=A(i) OD A(j)=NULLRETURN (A) CARD FU}UNC CSLength(BYTE ARRAY C) CARD i i=0 WHILE C(i)<>NULL DO i==+1 ODRETURN (i) CARD FUNC CA(BYTE ARRAY C) ; CoU}nvert a C style string to an ; Action style string BYTE i,j j = CSLength(C) FOR i=0 TO j-1 DO C(j-i)=C((j-i)-1)U} OD C(0)=jRETURN (C)PROC CtoA(BYTE ARRAY C,A) ; Convert from C style strings to ; Action style strings ; Assume U}C,A are defined and ; C is less than 255 bytes long. BYTE i FOR i=0 TO 255 DO IF C(i)=NULL THEN EXIT FI U} A(i+1)=C(i) OD A(0)=iRETURNPROC CPrintD(BYTE Channel,BYTE ARRAY C) CARD i i=0 WHU}ILE C(i)<>NULL DO PutD(Channel,C(i)) i==+1 ODRETURNPROC CPrint(BYTE ARRAY C) CPrintD(0,C)RETURNPROC CPrintU}DE(BYTE Channel,BYTE ARRAY C) CPrintD(Channel,C) PutD(Channel,155) RETURNPROC CPrintE(BYTE ARRAY C) CPrintDE(0,C)REU}TURN PROC CInputSD(BYTE Channel,BYTE ARRAY C) InputSD(Channel,C_TMP) AtoC(C_TMP,C)RETURN U}PROC CInputS(BYTE ARRAY C) CInputSD(0,C)RETURNPROC CInputMD(BYTE Channel, BYTE ARRAY C, BYTE max) InputMD(Channel,C_TMU}P,max) AtoC(C_TMP,C)RETURNPROC COpen(BYTE channel, BYTE ARRAY filestring, BYTE mode, aux2) CtoA(filestring, C_TMP) OU}pen(channel, C_TMP, mode, aux2)RETURNPROC CXIO(BYTE channel, mystery, cmd, aux1, aux2, BYTE ARRAY filestring) CtoA(filesU}tring,C_TMP) XIO(channel,mystery,cmd,aux1,aux2,C_TMP)RETURNINT FUNC CSCompare(BYTE ARRAY C1,C2) INT r1,r2 CARD i iU}=0 WHILE C1(i)=C2(i) AND C1(i)<>NULL AND C2(i) <> NULL DO i==+1 OD r1=C1(i) r2=C2(i)RETURN (r1-r2) PROCU } CSCopy(BYTE ARRAY DEST,SRC) ; Make sure DEST is big enough!!! CARD i BYTE X i=0 DO DEST(i)=SRC(i) IF SU!}RC(i)=NULL THEN EXIT FI i==+1 OD RETURNPROC CSCopyS(BYTE ARRAY DEST,SRC, CARD START,STOP) ; MakeU"} sure DEST is big enough!!!! ; Also make sure START and STOP are ; within SRC. CARD i i=START WHILE SRC(i-1)NULL AND i<=STOP DO DEST(i-START)=SRC(i-1) i==+1 OD DEST(i-START)=NULLRETURN PROC CSAssign(BYTE ARRAYU$} DEST,SRC,CARD START,STOP) ; Make sure DEST is big enough!!!! ; Also make sure START and STOP are ; within SRC. CARD U%}i i=0 WHILE SRC(i-1)<>NULL AND i<(STOP-START+1) DO DEST(i+START-1)=SRC(i) i==+1 ODRETURNPROC CStrB(BYTE numbU&}er, BYTE ARRAY C) StrB(number,C_TMP) AtoC(C_TMP,C)RETURNPROC CStrC(CARD number, BYTE ARRAY C) StrC(number,C_TMP) AU'}toC(C_TMP,C)RETURNPROC CStrI(INT number, BYTE ARRAY C) StrI(number,C_TMP) AtoC(C_TMP,C)RETURN BYTE FUNU(}C CValB(BYTE ARRAY C) CtoA(C,C_TMP)RETURN (ValB(C_TMP))CARD FUNC CValC(BYTE ARRAY C) CtoA(C,C_TMP)RETURN (ValC(C_TMP)U)})INT FUNC CValI(BYTE ARRAY C) CtoA(C,C_TMP)RETURN (ValI(C_TMP)) CValC(BYTE ARRAY C) CtoA(C,C_TMP)RETURN (ValC(C_TMP)TE ACTION! Magazin Ausgabe 2 Magazin der ACTION! Working Group im ABBE+}UC e.V.Kontakt:Carsten StrotmannAn der Kreutzbrede 204410 Warendorf.... ein herzliches Hallo!Lang, lang hats E,}gedauert, bis diese zweite Ausgabe des ACTION!-Magazins erschienen ist. Aber dafuer hat sie sicher fuer jeden ACTION!-Fan etwE-}as zu bieten. Die hier veroeffendlichten Routinen und Programme stammen allesamt von amerikanischen ACTION! - Program- miererE.}n. Ein ABBUC-Mitglied fand sie in einer amerikanischen Mailbox.Die Programme im Einzelnden:- RUNTIME: eine PD-ACTION!-RunE/}time- CSTRINGS: Bibliothek fuer Zeichenketten nach 'C'-Konvention- CHECK: Bibliothek zum Ueberpruefen von Dateien (LaenE0}ge, CRC, Checksum..)- NEWDIVI: Neue Divisionsroutine von ACS, behebt einen Fehler von ACTION!- DLI: Beispiel eines DisplaE1}ylist- interrupts in ACTION!- VBI: Beispiel eines VBI's in ACTION!- RAINBOW: der Regenbogeneffekt in ACTION! programmieE2}rt- SCRLTXT: Scrolltext in ACTION!- SCROLL: SoftScrolling in alle Richtungen (mit Joystick)- BALKEN: Demo-Farbbalken in E3}ACTION!- MICROS: Routine zum Lesen von Micro - Illustrator-Bildern mit Beispiel- TVI925: Ein 80-Zeichen Terminal EmulatE4}or in ACTION!- LL : Ein Sourcelisting - Ausdruckprogramm in ACTION!- HARVEY: Kleines Spiel in ACTION!Auf der zweiten SG}Programm: CSTRING.ACTAutor: John DiMarcoNachdem ich zum erstemal ein ACTION! Modul bekommen hatte, war ich beeindruckt vonY6} der Klarheit, Maechtigkeit und - sehr wichtig - von der Geschwindigkeit der Sprache und des Compilers. Aber ich habe zwei MaY7}engel entdeckt, die den Glanz der Sprache ein wenig trueben:- Erstens: Verschachtelte Funktionsaufrufe sind nicht moeglich.Y8} Dies macht es notwendig, Funktionsparameter in temporaeren Variablen zu speichern, um sie in weiteren Funktionsaufrufen zu vY9}erwenden. Die blaeht den Sourcecode unnoetig auf und macht ihn unleserlich.- Zweitens: da im ersten Byte der ACTION!-StringY:}s die Laenge der Strings gespeichert sind, koennen Zeichenketten nicht groesser als 255 Zeichen lang sein. Daher kann man keiY;}ne grossen Datenmengen in ACTION!-String speichern. Vorzuziehen sind da Zeichenketten, wie sie in der Sprache C vorhanden sinY<}d, wo eine Zeichenkette beliebig lang sein kann und mit einem Null (ASCII 0) Byte abschliesst.Ich wueste nicht, wie man verY=}schachtelte Aufrufe in ACTION! realisiert, aber 'C'-Strings sind sehr einfach in ACTION! zu programmieren und so habe ich diY>}ese Routinensammlung geschrieben und ausgetestet. Ich habe die Standard String-Routinen (SCopy, SCompare, SAssign, etc.) und Y?}die Eingabe/Ausgabe Routinen (PrintE, InputS, auch Open und XIO) umgeschrieben um 'C-'Strings statt ACTION!-Strings benutzen Y@}zu koennen. Desweiteren gibt es Konvertierungs- routinen um ACTION!-Strings in 'C'-Strings umzuwandeln und umgekehrt . Dies YA}ermoeglicht die Benutzung von ACTION!-Strings und 'C'-Strings in einem Programm und die Umwandlung zwischen beiden Arten.UmYB} diese Routinen in eigene Programme einzubinden, einfach INCLUDE "CSTRINGS.ACT" am Anfang des Programms einfuegen.Die RoutiYC}nen:PROC AtoC (BYTE ARRAY a, b)- diese Routine erwartet in a ein ACTION!-String und speichert den Inhalt in b ein 'C'-StrYD}ing gleicher Groesse. Der ACTION!-String sollte kein Nullbyte enthalten (ATASCII 0)PROC CtoA (BYTE ARRAY a, b)- diese RouYE}tine konvertiert einen 'C'-String (a) in einen ACTION!-String (b). Der 'C'-String sollte nicht laenger als 255 Zeichen sein, YF}da sonst nur die ersten 255 Zeichen uebernommen werdenCARD FUNC AC(BYTE ARRAY a)- diese Routine konvertiert String 'a' voYG}n einem ACTION! String in einen 'C'-String. 'a' kann Nullbytes enthalten. (Ergebnis = Pointer auf 'C'-String)CARD FUNC CA (YH}BYTE ARRAY A)- diese Routine konvertiert einen 'C'-String in einen ACTION!-String. Der 'C'-String darf laenger sein als 255YI} Zeichen.CARD FUNC CSLength (BYTE ARRAY a)- ermittelt die Laenge eines 'C'-Strings abzueglich des NullBytes.PROC CPrintYJ}, CPrintE, CPrintDE, CPrintD- Gibt einen 'C'-String aus.PROC CInputS, CInputSD, CInputMD- Liest einen 'C'-String ein. NYK}ur Zeichenketten bis 255 Zeichen koennen eingelesen werden.- PROC COpen, CXIO- Oeffnet einen Kanal oder fuehrt eine XIO-FYL}unktion aus. Es werden Zeichenketten bis 255 Zeichen unterstuezt (Warum auch mehr?) PROC CSCompare, CSCopy, CSCopyS, CSAssiYM}gn- Vergleicht oder kopiert 'C'-Strings. Numerische Parameter sind in diesen Funktionen CARD Variablen, da die 'C'-StringsYN} groesser als 255 Zeichen sein koennen.PROC CStrB, CStrC, CStrI- Konvertiert eine BYTE, CARD oder INT Variable in einen 'Y}; CHECK 8/17/85-12/21, A. B. Langdon; Determine length, CRC and checksum of file.; Also number of lines, for text file.;SEaP}T $491=$4000 SET 14=$491^BYTE JMP=[$4C]: CARD Entry;INCLUDE "D:SYSLIB.ACT";INCLUDE "D:SYSIO.ACT"; Using channel 1, Close aQ}caused "system error" with DOS 2.1 but not DOS XL.; ACS bbs has a block read (BLKIO.ACT) in machine code segments that is; aR}smaller and has a general purpose call to CIO. Here, I'll leave mine; as it illustrates use of the language and is just as faS}ast.; First global ARRAY, other than BYTE ARRAY of length less than 257,; is placed AFTER rest of program (undocumented?).aT}BYTE ARRAY buffer(257) ; locate the buffer.CARD FLen, ; File length up to 64K i, CSum, NLinesBYTE OpOK, CSum0=CSum, aU}CSum1=CSum+1, textBYTE CIO_status ; global for CIO return value (per ACS convention)INCLUDE "CRC.ACT"CARD FUNC GetAD(BYTE aV}chan CARD addr, len) ; Block read TYPE IOCB=[BYTE hid,dno,com,sta CARD badr,put,blen BYTE aux1,auaW}x2,aux3,aux4,aux5,aux6] IOCB POINTER ic BYTE chan16 BYTE POINTER b chan16 = (chan&$07) LSH 4 ic = $340+chan16 ic.aX}com = 7 ; read ic.blen = len ic.badr = addr [$AE chan16 $20 $E456 $8C CIO_status] ; LDX chan, JSR CIO; STY CIO_status aY} FLen ==+ ic.blen ; this to RETURN is special to this application. IF CIO_status = $88 THEN EOF(chan)=1 IF (FLen&$aZ}FF) = 0 THEN ; likely last sector of b = addr+ic.blen-1 ; a DOS 4 file. WHILE b^ = 0 DO b ==- 1 a[} ic.blen ==- 1 FLen == -1 OD FI FI b = addr FOR i = 1 TO ic.blen DO IF b^ = $9B THEN NLines ==a\}+ 1 FI CSum0 ==+ b^ CSum1 ==+ CSum0 updCRC(b^) b ==+ 1 ODRETURN (ic.blen)CARD FUNC GetCD(BYTE chan) ; Reaa]}d a word CARD c GetAD(chan,@c,2)RETURN (c)PROC FixFlSp(BYTE ARRAY FileSpec) IF FileSpec(2)<>': AND FileSpec(3)<>': THa^}EN ; prefix "D:" to file name FileSpec^==+2 i=FileSpec^ WHILE i>2 DO FileSpec(i)=FileSpec(i-2) i==-1a_} OD FileSpec(1)='D FileSpec(2)=': FI; Could also convert to upper case: if >$60 then subtract $20.RETURNPROC Sysa`}Err(BYTE errno)PROC MyError(BYTE errno) IF errno=$80 THEN Error=SysErr Error(errno) FI ; break quits PrintF("error %I. Taa}ry again%E",errno) OpOK=0RETURNPROC End=*() [$68$AA$68$CD$2E8$90$5$CD$2E6$90$F3 $48$8A$48$60]; entry: PLA; TAX; PLA; CMPab} MEMLO+1; BCC lab; CMP MEMTOP+1; BCC entry;; lab: PHA; TXA; PHA; RTS; Trace back thru RTS's and return to cartridge or DOS.ac}; From ACS bulletin board.PROC CHECK() CHAR ARRAY FileSpec(20) BYTE b, SHFLOK=$2BE CARD fwa, lwa, BufLen, MEMTOP=$2E5ad}, MEMLO=$2E7 BufLen=MEMTOP-$80-buffer SysErr=Error DO Print("File Spec=") SHFLOK=$40 ; upper case InputS(Fiae}leSpec) IF FileSpec^=0 THEN END() FI FixFlSp(FileSpec) Close(2) OpOK=1 Error=MyError Open(2,FileSpec,4,0) Uaf}NTIL OpOK OD Error=SysErr FLen=0 CSum=0 CRC=0 text=1 NLines=0; With DOS 4, this artifice ensures ; that each GetAD readag}s one byte into; next sector, to anticipate EOF. BufLen ==& $FF00 GetAD(2,buffer,1) IF buffer(0) = $FF THEN text=0 FIaq}`-----------`Ρ`Π`é`Ǡ`à֮`-----------b%DOS SYSb*)DUP SYS`-----------bSAUTORUN SYSb UAUTORUN BASb_ABBUCMAGPICbnACTIONM PICb7LESER BASbWRAP OBJ`-----------# *AWG2VOR TXT`-----------bIRUNTIME ACT`-----------b CSTRINGSACTb5CSTRING TXT`-----------b)OCHECK ACT`-----------b NEWDIVI ACT`-----------b DLI ACTbDLI TXTbVBL ACT`-----------# RAINBOW ACT#BALKEN ACT#SCRLTXT ACT#SCROLL ACT`-----------b MICROS ACTbMICROS MAC#wMICROS COM`-----------buTVI925 ACTb gTVI925 TXT`-----------#oqLL ACT#LL TXT# LL T2 # LL T1 `-----------#L+HARVEY ACT#&HARVEY COM`----------- WHILE EOF(2) = 0 DO GetAD(2,buffer,BufLen) OD updCRC(0) updCRC(0) PrintF("End of file. %H bytes%E",FLen) PrintFar}(" checksum=%H, CRC=%H%E",CSum,CRC) IF text THEN PrintF("%I lines%E",NLines) FI Close(2)RETURNPROC Main() devicas}e=0 ; in case MAC/65 has been here SetupCRC() DO CHECK() PrintE(" (RETURN to end)") ODRETURNSET Entry=Main--at}-------------------------------------------------------------------------MODULE; CRC.ACT 12/21/85 A. B. Langdon; Beforeau} use, do SetupCRC().; For each data set, first set global CRC=0.; After calling updCRC(data) with all; data bytes, do upav}dCRC(0) twice.; If CRCx is the CRC of a byte string,; then the CRC of that string, followed by; the hi and lo bytes of CRaw}Cx, is zero.CARD CRC: BYTE CRCl=CRC, CRCh=CRC+1CARD ARRAY CRCtable(256);PROC updCRCa(BYTE b) ; Action version; From C coax}de by D. Krantz,; Dr. Dobb's Journal, June 1985.; Takes 99 jiffies for 2000 bytes.; BYTE i; CARD flag; FOR i=0 TO 7 DO;ay} flag = CRC&$8000; CRC ==LSH 1; IF b&$80 THEN CRC ==% 1 FI; IF flag THEN CRC ==XOR $1021 FI; b ==LSH 1; OD;REaz}TURNPROC updCRC(BYTE b); Adaptation to this CRC of the algorithm; by W.D.Schwaderer, PC Tech Journal, 4/85.; Takes 14 jifa{}fies for 2000 bytes. CARD tem BYTE teml=tem, temh=tem+1 teml = b temh = CRCl CRC = tem XOR CRCtable(CRCh)RETURNPRa|}OC updCRCx=*(BYTE b); Machine language for Dr. Dobb's routine.; Takes 35 jiffies for 2000 bytes. [$85$A0] ; STa}}A $A0 [$A2$8] ; loop over 8 bits [$26$A0] ; 3 byte shift of data [$2E CRC $2E CRC+1] ; a~}and CRC [$90$10 $AD CRC $49$21 $8D CRC] ; if carry, then XOR [$AD CRC+1 $49$10 $8D CRC+1] ; poly bits [$CA $D0$E3] a} ; loopRETURNPROC SetupCRC() FOR i=0 TO $FF DO ; set up CRC table CRCl=0 CRCh=i updCRCx(0) CRCtable(i)=CRCa} OD ; <0.1 sec.RETURNMODULE; end CRCset up CRC table CRCl=0 CRCh=i updCRCx(0) CRCtable(i)=CRC`7C'-StringBYTE/CARD/INT FUNC CValB, CValC, CValI- wandelt einen 'C'-String in eine numerische Variable umAnmerkungen:WY}enn die NULL Variable am Anfang der Routinensammlung in einen anderen Wert als ATASCII 0 geaendert wird, so wird die CSComparY}e Routine keine korrekten Werte liefern.Die Routinen benutzen eine BYTE ARRAY-Variable namens C_TEMP(255) als globalen tempY}oraeren Puffer. Daher darf keine weitere Variable dieses Namens deklariert werden.Ich hoffe, diese Routinen werden dir helfY}en, besseren Gebrauch von der Programmiersprache ACTION! zu machen.3. September 1987 -- John DiMarco(Ue:CS)den dir helfXqProgramm: DLI.ACT, VBI.ACTAutor: ???Joel Gluck fragte mich wie man Interrupts in ACTION! programmiert. Hier sind nun zweiu} Programme, welche die Verwendung des Displaylistinterrupts (DLI) und des Vertical Blank Interrupt (VBI) demonstrieren.Zu bu}eachten ist, das ACTION! nicht 're-entrance'-faehig ist, d.h. das von Interrupts aus keine Unterroutinen aufgerufen werden duu}erfen, also auch keine ACTION!-Internen Prozeduren oder Funktionen, die Speicherstellen veraendern. Z.B. Multiplikation und Du}ivision werden in ACTION! durch Unterroutinen ausgefuehrt, daher kann man diese Routinen nicht in einem VBI verwenden.(Weitu}ere Informationen ueber DLI's und VBI's und Literaturhinweise gibt's bei der AWG gegen frankierten Briefumschlag) (WeittvProgramm: LL.ACTAutor: R. CurzonLittle Lister 2Eingabe: Textdatei einspaltig formatiert oder unformatiertAusgabe: f}ormatiert in n Spalten, [0 < n < 255] mit verschiedenen EinstellungenBenutzung mit DOS:mit einem Kommandozeilen DOS (wi};The following Action! routine will ;provide you with a fix for the bugs;in divide in Action! It should be;self-explanatoi}ry...MODULE ; NEWDIVI.ACT; (c) 1983 ACS; Copyright (c) 1983; by Action Computer Services (ACS); Permission is grantedi} to duplicate; and/or distribute the contents of; this file to any licensed user of; OSS ACTION. This copyright notice; i}must be replicated in all such; copies. Copies of this file may; not be sold or otherwise used for; monetary gain.; Thii}s file fixes the problems with; the ACTION! divide routine and; should be included within all your; ACTION! programs untili} such time; as an update ROM is available.; TO USE:; 'INCLUDE' this file in front; of all your PROCedures andi}; FUNCtions.; e.g. INCLUDE "D2:NEWDIVI.ACT"PROC DivI=*()[ $20 $A06C $85 $86 $A2 $10 $26 $82 $26 $83 $26 $86 $26i} $87 $38 $A5 $86 $E5 $84 $A8 $A5 $87 $E5 $85 $90 $04 $85 $87 $84 $86 $CA $D0 $E5 $A5 $82 $2A $26 $83 $A6 $83 i}$4C $A032]PROC REMI=*()[$20 DivI $86A5 $87A6 $60]SET $4EA=DivISET $4EC=RemI; End of MODULE NEWDIVI.ACT3 $A6 $83 ho;; Example of use of display list; interrupt from Action;BYTE VCOUNT = $D40B, WSYNC = $D40A, NMIEN = $D4q}0E, CH = $2FC, COLPF2 = $D018CARD VDSLST = $200, SDLST = $230, OLDVECDEFINE PHA = "$48", q} PLA = "$68", TAX = "$AA", TAY = "$A8", TXA = "$8A", TYA = "$98", RTI = "$40";; Durq}ing a DLI you can't call any; other functions, nor multiply,; nor divide;PROC DLI() [PHA TYA PHA TXA PHA] WSYNC = VCq}OUNT COLPF2 = VCOUNT [PLA TAX PLA TAY PLA RTI]PROC MAIN() BYTE I BYTE POINTER TEMP PRINTE("Setting up DLI") NMq}IEN = $40 ;DISABLE DLI OLDVEC = VDSLST VDSLST = DLI TEMP = SDLST+3 TEMP^ = $C2 FOR I = 1 TO 23 DO TEMP = q}SDLST + I + 5 TEMP^ = $82 OD NMIEN = $C0 ;ENABLE DLI WHILE CH = $FF DO PRINTE("Press any key to quit") OD q} CH = $FF ;Swallow key press PrintE("Restoring DLI") NMIEN = $40 ;DISABLE DLI TEMP = SDLST+3 TEMP^ = $42 FOR I =q} 1 TO 23 DO TEMP = SDLST + I + 5 TEMP^ = $02 OD VDSLST = OLDVEC PRINTE("Returning") RETURN$42 FOR I =poe Sparta Dos oder DOS XL), 'LL [input [output]] eingeben. Wenn die Kommandozeile benutzt wird, startet LL ohne Menue; die zul}etzt abgespeicherten Einstellungen werden verwendet. Die Voreinstellung der Ausgabeeinheit ist P: (Drucker). Wird LL ohne Par}ameter aufgerufen, wird das Einstellungsmenue aufgerufen.Mit einem anderen DOS wird LL wie jedes andere COM-File aufgerufen}.Die Einstellungen:- Eingabe Datei (*)- Ausgabe Datei (*)- Seitennummerierungs Startnummer (Voreinstellung = 1) (*)- A}SCII (^ markiert CONTROL-Zeichen, @ markiert INVERS-Zeichen, spezielle Zeichen werden in HEX ausgegeben)- HEX (alle eingeles}enen Zeichen werden als HEX-DUMP ausgegeben)- ATASCII (keine Veraenderung der Eingabedaten)- Ausgabe Breite (output width)};-------;VBL.ACT;-------;; Example of using the vertical blank; deferred interrupt from Action;BYTE RTCLOCK = 20, y} CH = $2FC, COLOR2 = $2C6CARD VVBLKD = $224, SDLST = $230, OLDVECDEFINE JMPI = "$6C";; Wity}hin a VBI you can't call any; subroutines, nor can you multiply; or divide. . . .PROC VBLANKD() COLOR2 = RTCLOCK [JMPy}I OLDVEC];Simulate the OS call SETVBVPROC SETVBV(BYTE WHICH CARD ADDR) CARD POINTER TEMP BYTE V TEMP = y}$216 + (WHICH LSH 1) V = RTCLOCK+ 1 WHILE V <> RTCLOCK DO OD TEMP^ = ADDR RETURNPROC MAIN() BYTE OLDC2 OLDC2 =y} COLOR2 PRINTE("Setting up Vblank") OLDVEC = VVBLKD SETVBV(7, VBLANKD) WHILE CH = $FF DO PRINTE("Press any key y}to quit") OD CH = $FF ;Swallow key press PrintE("Restoring Vblank") Setvbv(7, OLDVEC) COLOR2 = OLDC2 PRINTE("Rey}turning") RETURN = $FF ;Swallow key press PrintE("Restoring Vblank") Setvbv(7, OLDVEC) COLOR2 = OLDC2 PRINTE("Rex;INCLUDE "RUNTIME.ACT"; MICROS.ACT;; READPIC - Reads MicroIllustrator; picture files. Original code by; Robert E. Wils}on, REW Consulting.;; Modified for Action! and converted; to code blocks by Harold Long,; Bolton, MA. 14-Jan-1985;PROC} GetByt=*() [;Provides CCIO and bailout functions$A5$AA$C5$AC$D0$06$A5$A9$C5$AB$F0$16 $A2$10$A9$00$8D$58$03$8D$59$03$20$56} $E4$30$09$E6$A9$D0$02$E6$AA$60$A9$01 $85$A0$68$68$60];Provides screen address canculationPROC NxtPnt=*() [$24$A2$50$2C$}C6$A5$F0 $0E$A9$50$18$65$A3$85$A3$A9$00$65$A4 $85$A4$60$A9$60$85$A5$C6$A6$F0$0E$A9 $28$18$65$AD$85$A3$A9$00$65$AE$85$A4 $}60$A9$02$85$A6$A9$01$18$65$AD$85$AD $85$A3$A9$00$65$AE$85$AE$85$A4$60];BYTE FUNC READPIC=*() [; Segment contains 181 byt}es.$A5$58$85$AD$85$A3$A5$59$85$AE$85$A4 $A9$60$85$A5$A9$02$85$A6$A9$07$8D$52 $03$A9$A0$8D$54$03$A9$00$8D$55$03$85 $A7$85$}AC$A9$FF$85$AB$85$A9$85$AA$20 GetByt$85$A0$A5$A9$C9$07$F0$0A$C9$0C $F0$10$C9$1A$F0$2B$D0$EB$A5$A0$4A$6A $6A$85$A2$18$90$E1}$A9$05$85$A1$20GetByt$A6$A7$9D$C4$02$E6$A7$C6$A1$D0$F2 $20GetByt$85$AB$20GetByt$85$AC$18$90 $C2$A5$A2$F0$24$20GetByt$85$A1}$29$7F $D0$0F$20GetByt$85$A8$E6$A8$20GetByt $85$A7$18$90$06$85$A7$A9$01$85$A8$A5 $A1$29$80$85$A1$20GetByt$85$A0$A0$00 $A5}$A0$91$A3$20NxtPnt$A5$A2$F0$EE$C6 $A7$D0$04$C6$A8$F0$C2$A5$A1$F0$E9$D0 $E0];; Build an ANTIC E mode display list;MODUL}EBYTE SDMCTL=$22F, DINDEX=$57CARD SDLSTL=$230PROC ANTIC_E()BYTE TEMPCARD CHANGE Graphics (8+16) ;}Need GR 8 TEMP=Peek(SDMCTL) ;Save display control reg Poke (SDMCTL, 0) ;Turn off display Poke (SDLSTL+3,78) } ;Force the first LMS FOR CHANGE=(SDLSTL+6) TO (SDLSTL+204) ;WE KNOW HOW LONG MODE 8 IS DO IF Peek (CHANGE)=15 THEN } Poke (CHANGE, 14) ELSEIF Peek (CHANGE)=79 THEN Poke (CHANGE, 78) FI OD Poke (DINDEX,7) ;Fool OS to think }it's mode 7 Poke (SDMCTL, TEMP) ;Turn screen back onRETURNMODULE ;FILEHAN.ACT - General file and screen handler; C}opyright (c) 1984 Harold Long, Bolton MABYTE ARRAY fname(18) ;file name+extBYTE ARRAY infile(16), out}file(16) BYTE FUNC IsLower(BYTE c) IF (c>='a) AND (c<='z) THEN RETURN(1) FIRETURN(0)BYTE FUNC ToUpper(BYTE c) IF} IsLower(c) THEN c ==- $20 FIRETURN(c)PROC Test_Name(BYTE POINTER fname)BYTE chr, cnt, extBYTE ARRAY str132(24) ch}r=0 ext=0 FOR cnt=1 TO fname(0) DO fname(cnt)=ToUpper(fname(cnt)) IF fname(cnt)='. THEN ext=cnt FI IF fname(c}nt)=': THEN chr=1 FI OD IF (ext>0) AND (ext # (fname(0)-3)) THEN fname(0)=ext+3 FI IF chr=0 THEN str132(0)=fna}me(0)+3 str132(1)='D str132(2)='1 str132(3)=': FOR cnt=1 TO fname(0) DO str132(cnt+3)=fname(cnt) OD FOR cn}t=0 TO str132(0) DO fname(cnt)=str132(cnt) OD FIRETURN;; Main shell routine;PROC Shell(BYTE ARRAY infile, out}file)BYTE result, key=764 Close(1) ;for sure Open(1,infile,4,0) ;open input ANTIC_E() } ;set up display list this way ;for all those poor 400/800 ;owners... result=R}EADPIC() Close(1) DO UNTIL key # 255 OD key=255RETURNPROC Get_Files()BYTE cnt DO Poke(82,1) Put(125) PutE}() PrintE("MICROS - MicroIllustrator Utilities.") PrintE("Provides simple cut and paste") PrintE("functions as demonstr}ation routines.") PrintE("Copyright (c) 1984 Harold Long") PrintE("Permission granted to distribute for") PrintE("non-c}ommercial purposes.") PutE() Position(1,8) PrintE("Input File? ") Close(7) Open(7,"K:",4,0) DO Position(13,8}) Put(' ) InputS(infile) Test_Name(infile) Position(13,8) Print(" ") Position(13,8) Put}(' ) Print(infile) PutE() PutE() Print("Correct (Y/N)? ") DO cnt=GetD(7) UNTIL cnt='Y OR cnt='y O}R cnt='N OR cnt='n OD Put(cnt) UNTIL cnt='Y OR cnt='y OD PutE() Shell(infile, outfile) ODRETURNy OtTITLE'READPIC -- Reads ATARIARTIST Picture Files'SUBTTL'Definitions';;**** READPI.MAC -- Reads ATARIARTIST Picture Files } ***;; By Robert Elden Wilson; REW Consulting; December, 1984;; *** Definitions ***;BYTE:EQU$CB;Will hol}d input byteMODE:EQU$CC;Unique data or Same data modeTYPE:EQU$CD;Compression typePNT:EQU$CE;Buffer pointerCNT96:EQU$D0;Co}unter (96-0)CNT2:EQU$D1;Counter (2-0)LEN:EQU$D4;Length of compression block;ICCMD:EQU$0352;IOCB1 command byteICBA:EQU$03}54;IOCB1 buffer addressICBL:EQU$0358;IOCB1 buffer length;SCRMEM:EQU$58;Address to Pointer to Screen memoryCOLOR0:EQU$02C4};Playfield color 0 shadow;CIOV:EQU$E456;Address of CIO routine;;EJECTSUBTTL'Page Six';; *** Page Six ***;;; This }block must be loaded into page 6.;ORG$0600;;;>>>GETBYT --Inputs a byte from the file;open on IOCB1. When number;of by}tes input equals;value stored at LENGTH,;return address is popped;from stack and routine;returns to previous caller.;GE}TBYT:LDACOUNT+1;See if done yetCMPLENGTH+1BNECONTIN;No, continueLDACOUNTCMPLENGTHBEQERROR;Yes, exitCONTIN:LDX#$10;Use I}OCB1LDA#$00;Set buffer len to 0STAICBL;This causes byteSTAICBL+1;to be returned in AJSRCIOV;Get byteBMIERROR;ErrorINCCO}UNT;Increment # bytes readBNEDONEINCCOUNT+1DONE:RTS;That's all;ERROR:PLA;Pop off return addressPLARTS;Return to previo}us caller;COUNT:DW0;# bytes inputLENGTH:DW0;Length of fileBASE:DW0;Base screen address;;;>>>NXTPNT --Loads PNT with th}e screen;address for the next byte;of picture data.;NXTPNT:BITTYPE;Check compression typeBVCNOCOMP;No compressionDECCNT}96;Have we done 96 rows?BEQSTEP5;YesLDA#80;Add 80 to PNTCLCADCPNTSTAPNTLDA#$00ADCPNT+1STAPNT+1RTS;DoneSTEP5:LDA#96;}Reset counterSTACNT96DECCNT2;Both odd/even rows done?BEQSTEP7;YesLDA#40;Add 40 to BASECLCADCBASESTAPNT;and store in PN}TLDA#$00ADCBASE+1STAPNT+1RTS;DoneSTEP7:LDA#$02;Reset counterSTACNT2NOCOMP:LDA#$01;Add 1 to BASE & PNTCLCADCBASESTAB}ASESTAPNTLDA#$00ADCBASE+1STABASE+1STAPNT+1RTS;Done;EJECTSUBTTL'Main Routine';; *** Main Routine ***;;; This bl}ock can be loaded anywhere.;ORG$0000;READIT:PLA;Remove arg cntLDASCRMEM;Get screen memory addressSTABASESTAPNTLDASCRM}EM+1STABASE+1STAPNT+1LDA#96;Set up countersSTACNT96LDA#$02STACNT2LDA#$07;I/O will be readSTAICCMDLDA#BYTE;Store buff}er addressSTAICBALDA#$00STAICBA+1STALEN;Init remaining variablesSTALENGTH+1LDA#$FFSTALENGTHSTACOUNTSTACOUNT+1READHD}:JSRGETBYT;Get a header byteSTABYTE LDACOUNT;Load # bytes readCMP#$07BEQCTYPE;Up to compressionCMP#$0CBEQCOLORS;Up to }colorsCMP#$1ABEQREADAT;Done with headerBNEREADHD;Keep reading headerCTYPE:LDABYTE;Get dataLSRA;Move bits 0,1 to 6,7RORA}RORASTATYPE;Save compression typeCLCBCCREADHD;Read more headerCOLORS:LDA#$05;Load counter to read colorsSTAMODENXTCOL:}JSRGETBYT;Get a colorLDXLENSTACOLOR0,X ;Store itINCLENDECMODEBNENXTCOL;Get next oneJSRGETBYT;Get file sizeSTALENGTH;St}ore itJSRGETBYTSTALENGTH+1CLCBCCREADHD;Read more headerREADAT:LDATYPE;Get compression typeBEQINPBYT;No compressionCOMP}R:JSRGETBYT;Get a mode byteSTAMODEAND#$7F;Get countBNESHORT;Count < 128JSRGETBYT;Get long countSTALEN+1INCLEN+1JSRGETB}YTSTALENCLCBCCGETDATSHORT:STALENLDA#$01STALEN+1GETDAT:LDAMODE;Reload modeAND#$80;Strip off countSTAMODEINPBYT:JSRGE}TBYT;Get data byteSTABYTELDY#$00STORE:LDABYTESTA(PNT),Y;Store itJSRNXTPNT;Go calculate next addressLDATYPE;Check compre}ssionBEQINPBYT;No compressionDECLEN;More in the block?BNENEXT;YesDECLEN+1BEQCOMPR;No, get next mode byteNEXT:LDAMODE;Ch}eck modeBEQSTORE;Repeated data modeBNEINPBYT;Unique data mode;ENDECLEN+1BEQCOMPR;No, get next mode byteNEXT:LDAMODE;ChF- Seitenlaenge in Zeilen (output page length)- Anzahl der Spalten (number of columns)- Spaltenbreite (columns width)- Brei}te des Rands zwischen den Spalten (margin between columns)- Anzahl der Zeilen fuer Seitenvorschub (filler lines at top and b}ottom)(*) markierte Einstellungen koennen nicht gespeichert werdenWeiter Programmeigenschaften:- spezielle Einstellung}en koennen abgespeichert werden- Seitenueberschrift mit Seitennummer und Dateinamen- Ausgabe von einspaltigen Texten mehrsp}altig- Leerzeichen am Ende einer Zeile werden abgeschnitten- Ausgabe an jeden Geraetetreiber (E:, P:, D:...) moeglich- gut}e ATASCII-Ausgabe- ACTION! Programmierer koennen Binaer-Dateien in HEX in eine Datei ausgeben lassen, um Code-Blocks zu erst};''''''''''''''''''''''''''''''''''''; "TVI925.ACT" - A display-list based; terminal emulator by Charles Green.;; Derived} from the public domain VT52+; emulator written by Michael Jenkin.;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,MODULE;A: handler,} originally by Jenkin. DEFINE LDY = "$A0", RTS = "$60", JMP = "$4C", PLA="$68", GR8 = "$0F", SKIP8 = "$70", JVP = "$41",} LMS = "$40", RTI="$40", ESC = "1", CUP = "2", SGR = "3", PHA= "$48", TAX= "$AA", TXA= "$8A", TAY="$A8",TYA="$98", CMO = }"4", XITVBV = "$E462"TYPE line = [BYTE mode CARD adrs]BYTE ARRAY display(8831) ;data+dlistBYTE ARRAY enhance(8), cursor}(4)line POINTER dlistBYTE POINTER curln ;current line dataBYTE pmbase = $D407, gractl=$D01D, lmargin = $52, rmargin = $53}, rowcrs = $54, colcrs = $55, brkcnt, gprior = $26F, pcolr0 = $2C0, audc1 =$D201, hposm0 = $D004, sdmctl = $22F, soundr =} $41, saudc1,; audf1 = $D200,; sskctl = $232, skctl = $D20F, state, need, needx, ins_mode, curcntCARD; savmsc = $58, s}dlist = $230,cursad,keydef = $79, vvblkd = $224, brkky = $236 BYTE ARRAY xlate = [ ; New kbd map$6C $6A $3B $80 $80 $6B $2}B $2A$6F $80 $70 $75 $0D $69 $2D $3D$76 $FF $63 $80 $80 $62 $78 $7A$34 $80 $33 $36 $1B $35 $32 $31$2C $20 $2E $6E $80 $6D} $2F $7E$72 $80 $65 $79 $09 $74 $77 $71$39 $80 $30 $37 $08 $38 $3C $3E$66 $68 $64 $80 $82 $67 $73 $61 ;lowr$4C $4A $3A $8}0 $80 $4B $5C $5E$4F $80 $50 $55 $0D $49 $5F $7C$56 $FF $43 $80 $80 $42 $58 $5A$24 $80 $23 $26 $1B $25 $22 $21$5B $20 $5D} $4E $80 $4D $3F $60$52 $80 $45 $59 $FE $54 $57 $51$28 $80 $29 $27 $7F $40 $7B $7D$46 $48 $44 $80 $82 $47 $53 $41 ;uper$0}C $0A $F0 $80 $80 $0B $1C $1E$F0 $80 $10 $15 $0A $09 $1F $F0$16 $FF $03 $80 $80 $02 $18 $1A$F0 $80 $F0 $F0 $1B $F0 $F0 $F0}$1B $00 $1D $0E $80 $0D $7F $F0$12 $80 $05 $19 $FD $14 $17 $11$F0 $80 $F0 $F0 $7F $00 $F0 $F0$06 $08 $04 $80 $82 $07 $13 }$01 ;ctrl ]PROC vbi() IF curcnt = 0 THEN pcolr0 ==! 5 ;invert cursor curcnt = 15 ELSEIF curcnt < 255 THEN curcnt =}=- 1 FI IF saudc1 > $E0 THEN saudc1 ==- 1 audc1 = saudc1; SOUND(2,100,14,bel) FI IF }brkcnt THEN brkcnt ==- 1 IF brkcnt = 0 THEN; sskctl ==& $7F ;remove force space; skctl = sskctl skctl = $73 FI }FI [JMP XITVBV]PROC brk() ;break interrupt handler; [TYA PHA TXA PHA] brkcnt = 15;; sskctl ==% $80 ;force serial space}; skctl = sskctl skctl = $F3; [PLA TAX PLA TAY] [PLA RTI]PROC del_ch(BYTE POINTER adr, BYTE col) BYTE POINTER badr,wadr} BYTE x, y, bcount bcount = (80-col) RSH 1 FOR y = 1 TO 7 DO adr ==+ 40 wadr = adr + (col RSH 1) - 1 badr = wadr + }1 IF col & 1 THEN badr ==+ 1 wadr ==+ 1 wadr^ =(wadr^ & $F0)%(badr^ RSH 4) FI x = bcount WHILE x > 0 DO } badr ==+ 1 wadr ==+ 1 wadr^ =(wadr^ LSH 4)%(badr^ RSH 4) x ==- 1 OD wadr^ ==& $F0 OD RETURN ; null proc for n }owPROC ins_ch(BYTE POINTER adr, BYTE col) BYTE POINTER badr,wadr BYTE x, y, bcount bcount = (79-col) RSH 1 FOR y = 1 TO } 7 DO adr ==+ 40 badr = adr + 39 wadr = badr - 1 x = bcount WHILE x > 0 DO badr^ =(wadr^ LSH 4)%(badr^ RSH 4) } x ==- 1 badr ==- 1 wadr ==- 1 OD IF col & 1 THEN badr^ ==& $F0 ELSE badr^ ==RSH 4 FI OD RETURN ; nu }ll proc for nowPROC Achr(BYTE cx, cy, cc) BYTE POINTER base, offset BYTE i, chr, c BYTE ARRAY chset = [ $00 $00 $00 $0 }0 $00 $00 $00 ; SP $44 $44 $44 $00 $44 $00 $00 $AA $AA $00 $00 $00 $00 $00 $AA $EE $AA $EE $AA $00 $00 $EE $CC $EE $6}6 $EE $00 $00 $AA $22 $44 $88 $AA $00 $00 $CC $44 $CC $EE $EE $00 $00 $66 $22 $44 $00 $00 $00 $00 $22 $44 $44 $44 $22} $00 $00 $88 $44 $44 $44 $88 $00 $00 $00 $AA $EE $AA $00 $00 $00 $00 $44 $EE $44 $00 $00 $00 $00 $00 $00 $66 $22 $44 }$00 $00 $00 $EE $00 $00 $00 $00 $00 $00 $00 $66 $66 $00 $00 $22 $22 $44 $44 $88 $88 $00 $44 $AA $AA $AA $44 $00 $00 ;}'0' $44 $CC $44 $44 $EE $00 $00 $CC $22 $44 $88 $EE $00 $00 $CC $22 $44 $22 $CC $00 $00 $AA $AA $EE $22 $22 $00 $00 } $EE $88 $CC $22 $CC $00 $00 $44 $88 $EE $AA $44 $00 $00 $EE $22 $44 $88 $88 $00 $00 $44 $AA $44 $AA $44 $00 $00 $44 }$AA $66 $22 $44 $00 $00 $66 $66 $00 $66 $66 $00 $00 $66 $66 $00 $66 $22 $44 $00 $22 $44 $88 $44 $22 $00 $00 $00 $EE $}00 $EE $00 $00 $00 $88 $44 $22 $44 $88 $00 $00 $CC $22 $44 $00 $44 $00 $00 $44 $AA $AA $88 $66 $00 $00 ;'@' $44 $AA $}EE $AA $AA $00 $00 $CC $AA $CC $AA $CC $00 $00 $66 $88 $88 $88 $66 $00 $00 $CC $AA $AA $AA $CC $00 $00 $EE $88 $CC $8}8 $EE $00 $00 $EE $88 $CC $88 $88 $00 $00 $66 $88 $AA $AA $66 $00 $00 $AA $AA $EE $AA $AA $00 $00 $EE $44 $44 $44 $EE} $00 $00 $66 $22 $22 $AA $EE $00 $00 $AA $CC $88 $CC $AA $00 $00 $88 $88 $88 $88 $EE $00 $00 $AA $EE $EE $AA $AA $00 }$00 $CC $AA $AA $AA $AA $00 $00 $66 $AA $AA $AA $CC $00 $00 $CC $AA $CC $88 $88 $00 $00 ;'P' $66 $AA $AA $AA $EE $22 }$00 $CC $AA $CC $CC $AA $00 $00 $66 $88 $CC $22 $EE $00 $00 $EE $44 $44 $44 $44 $00 $00 $AA $AA $AA $AA $66 $00 $00 } $AA $AA $AA $44 $44 $00 $00 $AA $AA $EE $EE $AA $00 $00 $AA $AA $44 $AA $AA $00 $00 $AA $AA $44 $44 $44 $00 $00 $EE }$22 $44 $88 $EE $00 $00 $66 $44 $44 $44 $66 $00 $00 $88 $88 $44 $44 $22 $22 $00 $CC $44 $44 $44 $CC $00 $00 $44 $AA $}00 $00 $00 $00 $00 $00 $00 $00 $00 $EE $00 $00 $66 $44 $22 $00 $00 $00 $00 $00 $CC $66 $AA $66 $00 $00 ;'a' $88 $CC $}AA $AA $CC $00 $00 $00 $66 $88 $88 $66 $00 $00 $22 $66 $AA $AA $66 $00 $00 $00 $EE $EE $88 $66 $00 $00 $22 $44 $EE $4}4 $44 $00 $00 $00 $66 $AA $AA $66 $22 $CC $88 $EE $AA $AA $AA $00 $00 $44 $00 $CC $44 $EE $00 $00 $44 $00 $CC $44 $44} $88 $00 $88 $88 $AA $CC $AA $00 $00 $CC $44 $44 $44 $EE $00 $00 $00 $CC $EE $EE $AA $00 $00 $00 $CC $AA $AA $AA $00 }$00 $00 $66 $AA $AA $CC $00 $00 $00 $CC $AA $AA $CC $88 $88 ;'p' $00 $66 $AA $AA $66 $22 $22 $00 $EE $88 $88 $88 $00 !}$00 $00 $CC $EE $22 $CC $00 $00 $44 $EE $44 $44 $44 $00 $00 $00 $AA $AA $AA $66 $00 $00 $00 $AA $AA $44 $44 $00 $00 "} $00 $AA $EE $EE $66 $00 $00 $00 $AA $44 $AA $AA $00 $00 $00 $AA $AA $AA $66 $22 $CC $00 $EE $44 $88 $EE $00 $00 $66 #}$44 $88 $44 $66 $00 $00 $44 $44 $44 $44 $44 $00 $00 $CC $44 $22 $44 $CC $00 $00 $CC $66 $00 $00 $00 $00 $00 $AA $44 $$}AA $44 $AA $44 $AA ];strip high bit (inverse video) offset = cc - $20;display character dlist=sdlist + cy * %}10 + 3 base = dlist.adrs + (cx RSH 1) + 40 IF ins_mode THEN ins_ch(dlist.adrs, cx) FI offset = chset+(offset LSH 3)-off&}set FOR i = 1 TO 7 DO c = offset^ c = c XOR enhance(i) chr = base^ IF (cx & 1) THEN c ==& $0F'} chr ==& $F0 ELSE c ==& $F0 chr ==& $0F FI base^ = chr % c (}base ==+ 40 offset ==+1 OD RETURNPROC Acurse(); move cursor BYTE old_y ;Where we left cursor Zero(cursad+(old_y LSH )}2), 4) hposm0 = (colcrs LSH 1) + 48 MoveBlock(cursad+(rowcrs LSH 2),cursor,4) old_y = rowcrs ;memory for later clr pcolr0*}=5 IF curcnt < 255 THEN curcnt=254 FI RETURNPROC scroll(BYTE first, last) line POINTER tdlist CARD tempadrs INT del+}ta BYTE i dlist=sdlist+3 + first*10 tempadrs=dlist.adrs Zero(tempadrs,320) IF first>last THEN i=first first=last,} last=i delta=-1 ELSE delta=1 FI FOR i=first+1 TO last DO tdlist = dlist+10 *delta dlist.adrs = tdlis-}t.adrs dlist = tdlist OD dlist.adrs = tempadrs RETURNPROC Amargin() ; keep between margins IF colcrs > rmargin THEN .} colcrs = lmargin rowcrs ==+ 1 FI ;fallthrough to Ascroll()PROC Ascroll() ; roll screen if req'd IF rowcrs > 23 THEN s/}croll(0,23) rowcrs = 23 FI RETURNPROC curpos(BYTE chr) IF need = 2 THEN ; 1st ESC Y needx = chr - $20 need ==- 1 0}ELSEIF need = 1 THEN ; 2nd ESC Y chr ==- $20 IF (needx <= 23) AND (chr <= rmargin) THEN colcrs = chr rowcrs = needx1}; Acurse() FI state = 0 FI RETURNPROC cursat(BYTE chr) ;cursor type IF chr = '2 THEN ;blinking block? curcnt = 2}254 SetBlock(cursor,4,3) ELSEIF chr = '4 THEN ;steady line? curcnt = 255 SetBlock(cursor,3,0) cursor(3) = 3 FI pco3}lr0=5 ;third-intensity cursor state=0 RETURNPROC attrib(BYTE chr) ; enhance IF chr = '0 THEN Zero(enhance, 8) ELSEIF 4}chr = '4 THEN ; reverse SetBlock(enhance, 8, $FF) ELSEIF chr = '8 THEN ; underline Zero(enhance, 8) enhance(6) = $FF 5}ELSEIF chr = '> THEN ; both modes SetBlock(enhance, 8, $FF) enhance(6) = $00 FI state = 0 RETURNPROC Aesc(BYTE chr) 6}; escape sequence BYTE ch CARD i IF chr = 'E THEN ; insert line dlist=sdlist+3+rowcrs*10 scroll(23,rowcrs) ELSEIF chr7} = '. THEN ; cursor attrib state = CMO ; cursor rendition RETURN ELSEIF chr = 'G THEN ; inverse off state = SGR ; sele8}ct rendition RETURN ELSEIF chr = 'I THEN ; back tab colcrs = (colcrs - 1) & $F8 ELSEIF chr = 'j THEN ; reverse lf IF 9}rowcrs > 0 THEN rowcrs ==- 1 ELSE scroll(23,0) FI; Acurse() ELSEIF chr = '* THEN ; home & clear rowcrs = 0:} colcrs = 0 Aesc('Y) ; erase to EOS ( y?? ) ELSEIF chr = 'Y OR chr = 'y THEN FOR ch = colcrs TO 79 DO Achr(ch,row;}crs,' ) OD IF rowcrs < 23 THEN dlist=sdlist+3+10*rowcrs FOR i = rowcrs+1 TO 23 DO <} dlist==+ 10 Zero(dlist.adrs,320) OD FI; Acurse() ; erase to EOL ELSEIF chr = 'T OR chr = 't THEN FOR ch = c=}olcrs TO 79 DO Achr(ch,rowcrs,' ) OD ; Acurse() ELSEIF chr = 'R THEN ; delete line dlist=sdlist>}+3+10*rowcrs scroll(rowcrs,23) ELSEIF chr = '= THEN ; cursor addr state = CUP need = 2 RETURN ELSEIF chr = 'Q THEN ?}; insert char dlist=sdlist+3+10*rowcrs ins_ch(dlist.adrs,colcrs) ELSEIF chr = 'W THEN ; delete char dlist=sdlist+3+10*@}rowcrs del_ch(dlist.adrs,colcrs) ELSEIF chr = 'Z THEN ; multi-insert ins_mode = 1; ELSEIF chr = 'r THEN ; end multi-insA} ins_mode = 0; ELSEIF chr = 'b THEN ; BlackOnWhite SetColor(2,0,15) SetColor(1,0,0) ELSEIF chr = 'd THEN ; WhiteOnBlaB}ck SetColor(2,0,0) SetColor(1,0,15) FI state = 0 RETURNPROC Aopen() BYTE i sdmctl=0 ;No Antic DMA till DL reC}ady vvblkd=vbi ;Put our vbi routine in brkky=brk ;Put our break routine in; Examine data array for alignment sdlist=(dispD}lay & $F000) + $1C80 pmbase=sdlist RSH 8 ;page of plr/mis cursad=sdlist+$100 dlist=sdlist FOR i = 0 TO 2 DO dlist.mode E}= SKIP8 dlist==+1 OD curln=display FOR i=0 TO 23 DO IF (curln = sdlist) THEN curln==+ $180 FI IF (curln & $FFF)F} > $EC0 THEN curln = (curln & $F000) + $1000 FI dlist.mode = GR8 + LMS dlist.adrs = curln SetBlock(dlist+3,7,GR8)G} curln==+ 320 dlist ==+ 10 OD dlist.mode = JVP dlist.adrs = sdlist SetColor(2,0,0) ; was 0,0,0 SetColor(1,0,15) ; wasH} 1,12,15 SetColor(4,0,2) ; new - border gprior=8 ;cursor behind letters gractl=1 ;turn missiles on sdmctl=$26 ;enablI}e missile DMA Zero(cursad,128) ;clear missile data cursad ==+ 16 ;true top of screen state = 0 lmargin = 0 rmargin = 79 J} rowcrs = 0 colcrs = 0 Acurse() attrib('0) ;normal video cursat('4) ;normal cursor [LDY 1 RTS]PROC Aclose() [LDY 1K} RTS]PROC Aput(BYTE areg) IF state = ESC THEN; escape sequence Aesc(areg) ELSEIF state = CUP THEN ; cursor pos curposL}(areg) ELSEIF state = CMO THEN ; curs enhnc cursat(areg) ELSEIF state = SGR THEN ; enhance attrib(areg) ELSEIF areg = M}$1B THEN ; ESC state = ESC ELSEIF areg = $1A THEN ; ClearScreen colcrs = 0 rowcrs = 0 Aesc('Y) ELSEIF areg = $1E THN}EN ; home colcrs = 0 rowcrs = 0; Acurse() ELSEIF areg = $0B THEN ; cursor up IF rowcrs > 0 THEN rowcrs ==- 1; O}Acurse() FI ELSEIF areg = $16 THEN ; cursor down IF rowcrs < 23 THEN rowcrs ==+ 1; Acurse() FI ELSEIF areg = $P}0C THEN ; cursor right IF colcrs < rmargin THEN colcrs ==+ 1; Acurse() FI ELSEIF areg = $0D THEN ; CR colcrs = Q}lmargin ; was = 0 ELSEIF areg = $0A THEN ; lf rowcrs ==+ 1 IF colcrs > rmargin THEN colcrs = 0 ;altos vi klR}udge FI Ascroll() ELSEIF areg = $08 THEN ; BS IF colcrs > lmargin THEN ;was >0 colcrs ==- 1 ELSEIF rowcrs > 0 THS}EN ;bs wraps colcrs = rmargin rowcrs==- 1 FI ELSEIF areg = $07 THEN ; bell saudc1 = $F0; bel = 16 ; vbi() will piT}ckup ELSEIF areg = $09 THEN ; TAB colcrs = (colcrs + 8) & $F8 Amargin() ELSEIF areg > $1F THEN ;printable Amargin()U} ;new here Achr(colcrs,rowcrs,areg) colcrs ==+ 1;ELSE unrecognized control-nothing FI Acurse() ;update cursor [LDY 1 V}RTS]PROC Anofunc() [RTS] PROC Adummy() [LDY 1 RTS]PROC Ahandler() BYTE ARRAY hatabs = $031A BYTE pos, foundW} ;do not change the following 3 lines CARD ARRAY atab(6) BYTE Jump = [JMP] CARD init ; define device entry points atab(0X}) = Aopen - 1 ;OPEN atab(1) = Aclose - 1 ;CLOSE atab(2) = Anofunc - 1 ;READ atab(3) = Aput - 1 ;WRITY}E atab(4) = Adummy - 1 ;STATUS atab(5) = Anofunc - 1 ;SPECIAL init = Adummy ;INIT ; find entry in haZ}tabs found = 0; pos = 0 WHILE (pos < 34) AND (found = 0) DO IF hatabs(pos) = 0 THEN found = 1 ELSE pos ==+ 3 [}FI OD IF found = 0 THEN PrintE("*** A: too many devices") ELSE hatabs(pos) = 'A hatabs(pos + 1) = atab & 255 hatab\}s(pos + 2) = atab RSH 8 FI RETURN;*******************************;* MAIN PROGRAM;*******************************MODU]}LEBYTE ch = $02FC, bcount = $02EB, speed = [3], ;CWG 1=300BPS 3=1200 wsize = [0], sbits = [0], lf = [0], iparity = [^}0], oparity = [0] PROC init_R(); set options for R: Close(3) Open(3,"R:",13,0) XIO(3,0,38,lf*64+32+iparity*4+opa_}rity,0,"R1:") ;32=no xlate XIO(3,0,36,speed+7+wsize*16+128*sbits,0,"R1:") XIO(3,0,34,192,0,"R1:") XIO(3,0,40,0,0,"R1:") ;c`}oncurrent IO bcount = 0 RETURN PROC init_A(); set up A: device Ahandler() ; install A: handler Close(2); Gra}aphics(8+16) Open(2,"A:",8,0) RETURNPROC intro() soundr=0 Close(7) Open(7,"K:",4,0) keydef = xlate ; load key transb}late init_R() init_A() soundr=0 RETURNPROC do_remote(); process remote BYTE chr BYTE stop = [0] BYTE HIWAT = [128] c}XIO(3,0,13,0,0,"R:") IF bcount > HIWAT THEN PutD(3,$13) ;XOFF stop=1 FI WHILE bcount > 0 DO chr = GetD(3) Putd}D(2,chr & $7F) bcount ==- 1 OD IF stop THEN PutD(3,$11) ;XON stop=0 FI RETURNPROC do_local(); procee}ss local BYTE chr IF $FF - ch THEN ;INPUT chr = GetD(7) PutD(3,chr) FI ; END IF CHAR RETURNPROC main()f} intro() DO do_remote() do_local() OD RETURN chr = GetD(7) PutD(3,chr) FI ; END IF CHAR RETURNPROC main()4Date: 8 Apr 9023:27:58 GMTFrom: charles GreenSubject: TVI925.ACT - 80 column terminal emulator (1 of 1)Well, I've gotth}en enough responses that I'd annoy my UUCP neighbor by mailing this file out that many times, so I guess it'll be better to pi}ost it. A couple of things I never got around to doing:o Adding a character count to the data in each line, maybe in the byj}te just before the 320-byte area where the characters for each line are "stenciled" in for display. This count could be usedk} to speed up the insert-character and clear-to-end-of-line operations; they'd no longer have to go all the way out to column l}80 if there was no data displayed out that far.o Adding a single graphics-0 display line, either at the top or bottom of thm}e screen, which could hold the current baudrate, parity, etc. (assuming that someone adds the code to change them, in additin}on to maybe brightness).(P.S. - I've since discovered that luminance values of 0 for brightness, 2 or 4 for cursor, and 6 fo}or the characters works better than the values in this program. You also probably want to put the contrast at a minimum.)op} Smooth scrolling.Enjoy, Charles values in this program. You also probably want to put the contrast at a minimum.)o';LL.ACT OCT 15,1987 - R CURZON;(I/O from PRINT.ACT by Bruce Langdon);locate above the G: device by;CF Johnson, to allowr} graphics;outputSET 14=$2F01SET $491=$2F01; command line dos will try to run; twice unless we put rts at startBYTE rs}ts = [$60]; --System VariablesBYTE shflok = $2BE, ch = $2FC, crsinh = $2F0CARD sdslst = $230; --Working globalst}; First global ARRAY, other than; BYTE ARRAY of length < 257,; is placed AFTER rest of programBYTE ARRAY in_b(257) ; locau}te ; the in_buff; variables arrayBYTE ARRAY varsBYTE pr_wid = [80], file_lim = [39], col_lim = [2],v} file_marg = [2], line_lim = [56], page_len = [66], top_bl = [5], bott_bl = [5], pause_fl = ['Y], convert_fl = ['S], pagew}_st = [1]; PRECEDING SHOULD BE CHANGED ONLY; WITH CARE IN ORDER FOR "S" COMMAND; TO UPDATE LL.COM TO WORKBYTE ARRAY x}convert_st = " "BYTE c_wds ;command line flagBYTE r_ent =[0] ;flags if program ;entered through Run_Eny}tBYTE file_l, col_l, line_lBYTE ARRAY out_bCHAR ARRAY out_dev(20), in_fil(20)CARD line_c, file_c, col_c, out_s,z} in_s, in_c, out_i, in_iBYTE op_ok, b, page_n, b_wid, col_widBYTE cio_status ; global for CIO; return value (p{}er ACS convention);INCLUDE "RUNTIME.ACT"PROC End=*() [$68$AA$68$CD$2E8 $90$5$CD$2E6$90$F3 $48$8A$48$60]; entry: PL|}A; TAX; PLA; CMP MEMLO+1;; BCC lab; CMP MEMTOP+1; BCC entry;; lab: PHA; TXA; PHA; RTS;; Trace back thru RTS's and; retur}}n to cartridge or DOS.; From ACS bulletin board.; error routinesPROC Sys_Error(BYTE errno)PROC Clr_Dos(BYTE chan); s~}eems to clear Spartados; settings for exit to DOS; (dummy directory) Close(chan) Open(chan,"D:*.*",6,0) Close(chan)R}ETURNPROC My_Error(BYTE errno) Close(2) Close(3) PrintF("error %I. Rerun%E",errno) End()PROC D_Error(BYTE errno) }BYTE i IF errno=128 THEN Close(2) Clr_Dos(3) End() FI PrintF("error %I. Try again%E",errno) op_ok = 0RETURNCARD }FUNC GetAD(BYTE chan CARD addr, len) ; Block read TYPE IOCB = [BYTE hid,dno,com,sta CARD badr,put,blen } BYTE aux1,aux2,aux3, aux4,aux5,aux6] IOCB POINTER ic BYTE chan16 chan16 = (chan&$07) LSH 4} ic = $340+chan16 ic.com = 7 ; read ic.blen = len ic.badr = addr [$AE chan16 $20 $E456 $8C cio_status] ; LDX cha}n JSR CIO STY cio_status IF cio_status = $88 THEN eof(chan) = 1 FIRETURN (ic.blen)CARD FUNC PutAD(BYTE chan CARD }addr, len) ; Block write TYPE IOCB = [BYTE hid,dno,com,sta CARD badr,put,blen BYTE aux1,aux}2,aux3, aux4,aux5,aux6] IOCB POINTER ic BYTE chan16 chan16 = (chan&$07) LSH 4 ic = $340+chan16 ic}.com = 11 ; write ic.blen = len ic.badr = addr [$AE chan16 $20 $E456 $8C cio_status] ; LDX chan JSR CIO STY cio_sta}tusRETURN(ic.sta)PROC Fix_FlSp(BYTE ARRAY filespec) CARD i IF filespec(2) <> ': AND filespec(3) <> ': THEN ; if }no device, prefix "D:" to file filespec^ == +2 i=filespec^ WHILE i>2 DO filespec(i) = filespec(i-2) }i == -1 OD filespec(1) ='D filespec(2) =': FIRETURNPROC Show_Hdr() Print(" LittleLister 2 - R Curzon'L}L' =setup 'RUN 4A60' =rerun'LL [input [output]]' =command line")RETURNPROC Show_Vars() PutE() PrintF("A Printer }width : %U%E", pr_wid) PrintF("B Width per column : %U%E", file_lim) PrintF("C Number of columns: %U%E", col_}lim) PrintF("D Between columns : %U%E", file_marg) PrintF("E Text lines/page : %U%E", line_lim) PrintF("F Total} lines/page : %U%E", page_len) PrintF("G Filler lines/top : %U%E", top_bl) PrintF("H Filler lines/bot : %U%E", b}ott_bl) PrintF("I Page pause Y/N : %C%E", pause_fl) PrintF("J ASCII/ATASCII/HEX: %S%E", convert_st) PrintF("K S}tarting page num: %U%E", page_st) PrintF("L Output device : %S%E", out_dev) PutE() PrintE("S Save configuratio}n - A-J") PrintE("X Execute")RETURNPROC Set_Defs() BYTE i FOR i = 1 TO 20 DO in_fil(i) = ' OD in_fil(0) = 0} page_n = 0 out_dev(0)=2 out_dev(1)='P out_dev(2)=': vars = @pr_widRETURNPROC Set_Vars() BYTE change, i, j, sav}e_fail BYTE loc_err ch = 255 Close(4) Open(4,"K:",4,0) loc_err = 0 save_fail = 0 DO ; check for bad values, all}ow ; changes to program variables IF col_lim = 0 THEN col_lim =1 FI IF line_lim=0 THEN line_lim =1 FI IF con}vert_fl ='S THEN convert_st = "ASCII " ELSEIF convert_fl ='T THEN convert_st = "ATASCII" ELSE convert}_st = "HEX " FI crsinh = 1 Put(125) Show_Hdr() Show_Vars() Position(5,21) IF pr_wid< file_lim }* col_lim +file_marg * (col_lim-1) THEN loc_err = 1 Print("INVALID A, B, C, D") ELSEIF page_len # line_}lim + top_bl + bott_bl THEN loc_err = 1 Print("INVALID E, F, G, H") ELSEIF out_dev(1) >= 'a THEN }loc_err = 1 ;should be upperc. Print("INVALID L") ELSEIF save_fail = 1 THEN Print("NO FILE D:LL.COM") s}ave_fail = 0 loc_err = 0 ; not fatal error ELSEIF change = 'S THEN Print("LL.COM revised") loc_err = 0 }; not error ELSE loc_err = 0 FI shflok = $40 ; upper case change = GetD(4) Position(0,21) Print(" } ") crsinh = 0 IF change>= 'a THEN change == -32 FI IF change>='A and change<='L THEN } Position(23,change-61) Print(" ") Position(21,change-61) Print(": ") IF change<'I OR c}hange ='K THEN vars(change - 65) = InputB() ELSEIF change = 'I THEN IF pause_fl = 'N THEN pau}se_fl = 'Y ELSE pause_fl = 'N FI ELSEIF change = 'J THEN IF convert_fl = 'S THEN conv}ert_fl = 'T ELSEIF convert_fl = 'T THEN convert_fl = 'H ELSE convert_fl = 'S FI ELSEI}F change = 'L THEN InputMD(0,out_dev,20) Fix_FlSp(out_dev) FI FI IF change='S AND loc_err= 0 TH}EN Close(3) Error = D_Error op_ok = 1 Open(3,"D:LL.COM",12,0) Error = My_Error IF op_ok = 1 THE}N FOR i = 1 TO 13 DO j = GetD(3) OD ; find the 14th byte FOR i = 0 TO 9 DO }PutD(3,vars(i)) OD ; update the variables ELSE save_fail = 1 FI Clr_Dos(3) FI UNTIL loc_e}rr= 0 AND change= 'X OD Close(4)RETURNPROC Alloc_Buffs() CARD size col_wid = file_lim + file_marg b_wid = col_wid} *(col_lim) -file_marg + 1; set index values file_l = file_lim -1 col_l = col_lim -1 line_l = line_lim -1 ch }= 255 ; find size and location of ; the output buffer out_s = (line_lim) * b_wid out_b = sdslst - out_s ; inp}ut buffer starting point ; was set to end of program ; in variable declarations IF in_b > out_b - 200 THEN Print}E("not enough memory!!") End() FI ; find size of input buffer in_s = sdslst - out_s - in_bRETURNPROC Print_Cle}ar() CARD i, b_ptr, o_b_ptr BYTE j, k, n, tc, bc, test b_ptr = 0 o_b_ptr = 0 FOR i = 0 to line_l DO ; trim trail}ng spaces from ; each print line n = 0 FOR j = 0 to b_wid - 1 DO IF out_b(b_ptr + j) # ' THEN n = }j FI OD ; line will be chopped at "n" b_ptr == + n + 1 out_b(b_ptr) = $9B b_ptr == +1 ; slide everyt}hing else down ; over the unused space MoveBlock(out_b + b_ptr, out_b + o_b_ptr + b_wid, (line_l - i) * b}_wid) o_b_ptr = b_ptr OD tc = top_bl bc = bott_bl WHILE tc > 0 DO IF top_bl >3 AND tc= top_bl-2 THEN }; if enough room print page header PrintD(3,in_fil) FOR i= 9 TO pr_wid-in_fil(0) DO PutD(3,' ) OD} PrintD(3,"Page ") PrintBDE(3,page_n) tc == -1 ELSE PutDE(3) tc == -1 FI OD PutAD(3,out_b},b_ptr) WHILE bc > 0 DO ;bottom fill lines PutDE(3) bc == -1 OD IF pause_fl= 'Y AND out_dev(1) # 'D THEN P}utE() PrintE("RETURN =more ,BREAK =quit") Close(4) Open(4,"K:",4,0) ch = 255 DO test = GetD(4) UNTIL }test = $9B OD Close(4) FIRETURNPROC Rst_Outb() file_c = 0 line_c = 0 col_c = 0 out_i = 0 SetBlock(out_b,out_}s,' ) ; 'blank' is not $00!RETURNPROC Compose(BYTE chx) ; find where each character belongs ; in the output buffer} IF chx = $9B OR file_c>file_l THEN out_i == -file_c + b_wid line_c == +1 file_c = 0 FI IF chx = $9B THEN RE}TURN FI IF line_c>line_l THEN col_c == +1 out_i = col_c * col_wid line_c = 0 file_c = 0 FI IF col_c>col}_l THEN page_n == +1 IF page_n >= page_st THEN Print_Clear() FI Rst_Outb() ;clear/reset ptrs FI ;} ; out_i now points to where to put ; this character ; out_b(out_i) = chx file_c == +1 out_i == +1RETURNPROC Op_}File()BYTE dnumBYTE ARRAY dir_wk(21)BYTE ARRAY dir_nm = "Dn:*.*" ch = 255 dnum = 0 op_ok = 1 DO IF in_fil(0) =} 0 OR r_ent = 1 OR op_ok = 0 THEN; if menu, set position IF (c_wds < 2 OR r_ent = 1) AND dnum = }0 THEN Position(25,21) Print(" ") Position(2,21) FI Print("Source (RET quits/1}-4,8):") shflok = $40 ; upper case dnum = 0 DO UNTIL ch # 255 OD IF ch = 31 THEN dnum = 1 FI IF} ch = 30 THEN dnum = 2 FI IF ch = 26 THEN dnum = 3 FI IF ch = 24 THEN dnum = 4 FI IF ch = 53 THEN dnum = 8 }FI IF dnum # 0 THEN dir_nm(2) = dnum + '0 ch = 255 op_ok = 1 Error = D_Error Cl}ose(2) Open(2,dir_nm,6,0) IF op_ok = 1 THEN PrintF("%E%EDrive # %C%E%E", dnum ) } DO InputMD(2,dir_wk,20) IF op_ok = 0 THEN EXIT FI PrintE(dir_wk) IF dir_wk}(1) >= '0 AND dir_wk(1) <= '9 THEN EXIT FI OD PutE() FI Close(2}) op_ok = 0 Error = My_Error ELSE InputS(in_fil) IF in_fil^ = 0 THEN End() FI } Fix_FlSp(in_fil) FI FI Error = D_Error IF dnum = 0 THEN Close(2) op_ok = 1 Open(2,in_fil},4,0) FI UNTIL op_ok OD Error = My_ErrorRETURNPROC Hcompose(BYTE chx)BYTE t Compose('$) t =(chx&$F0) RSH 4 +} '0 IF t > '9 THEN t == +7 FI Compose(t) ; first digit t =(chx&$0F) + '0 IF t > '9 THEN t == +7 FI Compose(t) ; la}st digitRETURNPROC Print_File() BYTE t CARD i Rst_Outb() Op_File() Close(3) Open(3,out_dev,8,0) IF convert_}fl = 'T THEN DO in_c =GetAD(2,in_b,in_s) FOR i = 0 TO in_c - 1 DO Compose(in_b(i)) OD IF }eof(2) THEN page_n == +1 Print_Clear() EXIT FI UNTIL eof(2) OD ELSEIF convert_fl = 'H THEN D}O in_c =GetAD(2,in_b,in_s) FOR i = 0 TO in_c - 1 DO Hcompose(in_b(i)) OD IF eof(2) THEN } page_n == +1 Print_Clear() EXIT FI UNTIL eof(2) OD ELSEIF convert_fl ='S THEN DO in_c =Get}AD(2,in_b,in_s) FOR i = 0 TO in_c - 1 DO IF in_b(i) =$9B THEN Compose($9B) ELSE t = in_b(i) &} $7F IF t >26 AND t <32 OR t =96 OR t >122 THEN Hcompose(in_b(i)) ELSE } IF in_b(i) > $7F THEN Compose('@) FI IF t < 27 THEN Compose('^) Compo}se(t + $40) ELSE Compose(t) FI FI FI OD IF eof(2) THEN page_n =}= +1 Print_Clear() EXIT FI UNTIL eof(2) OD FI Close(2) Clr_Dos(3)RETURNPROC Get_wds() CARD POINT}ER dosvec = $0A BYTE POINTER comtab_ptr1 BYTE POINTER comtab_ptr2 BYTE ARRAY c_line, wk_d BYTE i, j, eol_fl in_fil}(0) = 0 comtab_ptr1 = dosvec^ + 3 c_wds = 0; no of words on command line; 0 means not a comm line type DOS; command }line DOS's have a JMP instr; at comtab + 3 to file crunch; routine IF (comtab_ptr1^) # $4C THEN RETURN FI; but ma}ke sure it's not Machdos; (no command line) comtab_ptr1 = dosvec^ + 6 comtab_ptr2 = dosvec^ + 9 IF (comtab_ptr1^) = $4}C AND (comtab_ptr2^) = $4C THEN RETURN FI c_line = dosvec^ + 63; get command line words eol_fl = 0 i = 0} DO; find start of word DO IF c_line(i) = $9B OR i > 63 THEN eol_fl = 1 EXIT ELSEIF c_line}(i) # ' THEN EXIT ELSE i == +1 FI OD IF eol_fl THEN EXIT FI; trace to end of word, store j = 1 c_wds} == +1; ignore 1st word only IF c_wds = 2 THEN wk_d = in_fil ELSEIF c_wds=3 THEN wk_d=out_dev FI IF c_wds }> 1 THEN DO wk_d(j) = c_line(i) i == +1 IF c_line(i) = $9B OR i > 63 THEN eol_fl = 1 }FI IF c_line(i) =' OR eol_fl =1 THEN wk_d(0) = j EXIT FI j == +1 OD Fix_FlSp(wk_d) } ELSE DO i ==+1 IF c_line(i) = $9B THEN eol_fl = 1 EXIT ELSEIF c_line(i)=' THEN EXIT} FI OD FI UNTIL eol_fl = 1 OR c_wds = 3 ODRETURNPROC Run_Ent(); entry point for RUN dos command r_e}nt = 1PROC Main() device = 0 ; suggested by ACS Sys_Error = Error Error = My_Error Set_Defs(); check if command l}ine type DOS,; and if filename on the command; line Get_wds() DO IF c_wds > 1 AND r_ent = 0 THEN Show_Hdr(}) ELSE Set_Vars() FI Alloc_Buffs() Print_File() Set_Defs() IF c_wds > 1 THEN EXIT FI OD Close(2)} IF out_dev(1) = 'D THEN Clr_Dos(3) ELSE Close(3) FIRETURN Set_Defs() IF c_wds > 1 THEN EXIT FI OD Close(2)B;**********************************************************************;* } *;* PhoeniX SoftCrew ACTION! Programme *;* most (c) by PSC Software Devel}ellen (fuer Zeichensaetze)(UE:CS)mierer koennen Binaer-Dateien in HEX in eine Datei ausgeben lassen, um Code-Blocks zu erst#opment Lippstadt/Warendorf *;* *;* PhoeniX Sof}tCrew #### #### #### *;* c/o Carsten Strotmann # # ## ## } *;* An der Kreutzbrede 20 #### ### ## Software Development *;* # ## ## } *;* 4410 Warendorf 1 # #### #### *;* } *;**********************************************************************; Progr}ammname :Rainbow ; Filename :RAINBOW.ACT; von :Carsten Strotmann; letzte Aenderung:13.10.91; Be}merkung : BYTE wsync=$D40A, vcount=$D40BBYTE color2=$D018, color4=$D01APROC Rain ()BYTE rtcl}ok2=$14, ch=$2FC ch=$FF DO wsync==+1 color2=rtclok2+vcount color4=rtclok2+vcount UNTIL ch#$FF ODRETURN rtclx;**********************************************************************;* } *;* PhoeniX SoftCrew ACTION! Programme *;* most (c) by PSC Software Develo}pment Lippstadt/Warendorf *;* *;* PhoeniX Soft}Crew #### #### #### *;* c/o Carsten Strotmann # # ## ## } *;* An der Kreutzbrede 20 #### ### ## Software Development *;* # ## ## }For those interested in the Action! language, this is the LittleLister source code. In order to represent the non-ASCII chara}cters, it was prepared by LittleLister itself. It prefixes the inverse video characters with a "@" -- so it will need some e}diting to run... If you are checking out compiled languages for the 8bit, you will note Action! has similarities to Pascal} and C, as can be seen in this example. And it is faster in compilation, and compactness of code produced than any other hi-}level language on the 8 bit. A pleasure to use, comes with a good built-in program editor. Potentially interesting things}:procedure GetAD(), PutAD() - block I/O suggested by Bruce Langdonprocedure Get_Wds() - gets the words from the command }line for Sparta DOS, DOS XL as well as detecting whether the DOS in use has command line capability procedure End() - goes} to DOS (not too tricky), but this procedure also keeps the stack clear, regardless of how deeply nested you are when you cal}l it.procedure Clr_Dos() - a work around. I found that if I returned to SpartaDOS, when the last disk access was for }write or update, I often got some out-of-control disk writing. This function ensures that the last disk access was a read bef}ore we exit to DOS. [If anybody can explain, I would like to know what causes this!]t the last disk access was a read befXLL.DOC file included below for a quick rundown.PRINTER OUTPUT OPTIONLittlelister composes columnar output in memory. It }can be used with any printer, to print any size of input file. I wrote it for my 1027, but it works even better with my new }NX-10 printer. For maximum speed printing, it can be set to represent "unprintable" bytes with combinations of printable one}s; full graphics ATASCII printing is also possible using G: (see below).THE CODEThe UUencoded binary file follows in a se}parate message. If it doesn't make it through some gateway in its travels, I will mail a copy direct on request. For least }frustration, use the YAU UUdecoder to decode it. It seems some of the other decoders might require extra padding on each line}; I used YAUE to encode it. Action! sources also available on request, due to length I haven't posted them... yet)(Thanks }to JRD: YAU and YAUE are very nice tools; they work fine with SpartaDOS in both command line and prompt modes.)(Thanks also} to Bruce Langdon, for the ideas in his PRINT.ACT program posted to Usenet some time ago)e and prompt modes.)(Thanks also[&959&''''&''''''''''P& '''''''& %; "TVl&k+*o&i-=v&)&z436521, .&~rey twq90&>fhdgsaLJ:}&^OPU I_|VC&Z$#&%"![ ]gameover'pressstart' ?~ ?~HP<.<8x|~P<.<8x||B$<<<~~}B$<(<<~~D$<<<~"$<(<<~D$<<<} freq3, AUDF3 =$D204, AUDF2 =$D202, ATRACT=$004D, xtemp, ytemp, STICK0=$0278, STRIG0=$0?}284, HPOSP0=$D000CARD CDTMV1=$0218, CDTMV2=$021A, CDTMA1=$0226, CDTMA2=$0228CARD ARRAY pk1(11), @} pk2(11)DEFINE SAVETEMPS="[$A2 7 $B5 $A8 $48 $CA $10 $FA]", GETTEMPS="[$A2 0 $68 $95 $A8 $E8 A} $E0 8 $D0 $F8]", XITVBV="[$4C $E462]"PROC SETVBV=$E45C (BYTE areg,xreg,yreg)PROC DLinit()CARD sdlist=$023B}0BYTE iBYTE POINTER k pm = (last + $0FFF) & $F000 misl = pm + $180 plr0 = misl + $80 plr1 = plr0 + $80 plr2 = plr1 + C}$80 plr3 = plr2 + $80 dl = plr3 + $80 sline= dl + 24 rnum = sline + 8 snum = rnum + 8 disp = snum + 4 FOR i = 0 TO D}3 DO dl(i) = $70 OD dl(4) = $47 dl(5) = disp & $FF dl(6) = disp RSH 8 FOR i = 7 TO 15 DO dl(i) = $07 OD dl(E}16) = $70 dl(17) = $70 dl(18) = $46 dl(19) = sline & $FF dl(20) = sline RSH 8 dl(21) = $41 dl(22) = dl & $FF dl(23) = F}dl RSH 8 SDLIST = dl k = "RABBITS:3 SCORE:0000" FOR i = 0 TO 19 DO k ==+ 1 sline(i) = k^ + $A0 OD Zero(dispG},200)RETURNPROC PKINIT() pk1(0) = harrt1 pk1(1) = harrt1 pk1(2) = harrt1 pk1(3) = 0 pk1(4) = harlf1 pk1(5) = harlfH}1 pk1(6) = harlf1 pk1(7) = 0 pk1(8) = hardn1 pk1(9) = harup1 pk1(10)= harfr1 pk2(3) = 0 pk2(0) = harrt2 pk2(1) = harrI}t2 pk2(2) = harrt2 pk2(3) = 0 pk2(4) = harlf2 pk2(5) = harlf2 pk2(6) = harlf2 pk2(7) = 0 pk2(8) = hardn2 pk2(9) J}= harup2 pk2(10)= harfr2RETURNPROC PutNum(BYTE n)BYTE x, y, random=$D20A DO x = random IF x < 200 ANK}D disp(x) = 0 THEN EXIT FI OD DO y = RANDOM & $0F IF y < 10 THEN EXIT FI OD disp(x) = y % ctbl(n) atbl(L}n) = x vtbl(n) = yRETURNPROC Eranum(BYTE n)BYTE x x = atbl(n) disp(x) = 0RETURN PROC Vbgmovr()BYTE nBYTE POIM}NTER j AUDC1 = 0 AUDC2 = 0 AUDC3 = 0 AUDC4 = 0 CDTMV1 = 0 CDTMV2 = 0 j = gomsg FOR n = 0 TO 9 DO disp(85+n) = N}j^ j ==+ 1 OD j = psmsg FOR n = 0 TO 11 DO disp(144+n) = j^ j ==+ 1 ODRETURNPROC Vbwalls() IF winc(0) <> O}0 THEN winc(0) ==- 1 IF byloc(0) > 30 THEN byloc(0) ==- 1 FI FI IF winc(1) <> 0 THEN winc(1) ==- 1 IF byloc(1P}) <= 204 THEN byloc(1) ==+ 1 FI FI IF winc(2) <> 0 THEN winc(2) ==- 1 HPOSP2 = bxloc(0) IF bxloc(0) > 39 THENQ} bxloc(0) ==- 1 FI FI IF winc(3) <> 0 THEN winc(3) ==- 1 HPOSP3 = bxloc(1) IF bxloc(1) < 208 THEN bxloc(1) ==R}+ 1 FI FIRETURNPROC Vbplayer()BYTE d,xCARD pic xtemp = 0 ytemp = 0 IF STICK0 <> $0F AND (RTCLOK(2) &S} $07) <> 0 THEN AUDF2 = $10 VOL2 = $04 FI d = STICK0 - 5 IF (RTCLOK(2) RSH 3 & 1) = 1 THEN pT}ic = pk1(d) ELSE pic = pk2(d) FI d = STICK0 FOR x = 0 TO 3 DO IF (d & 1) = 0 THEN xtemp = stblx(3-x) ytemp U}= stbly(3-x) FI d = d RSH 1 OD IF POPLT = $0C THEN rnum(0) ==- 1 lives ==- 1 diesw ==+ 1 FI IF (POPLT & $04)V} <> 0 THEN harx ==+ 1 xtemp = 0 FI IF (POPLT & $08) <> 0 THEN harx ==- 1 xtemp = 0 FI IF (byloc(0) + 2) RSH 1 =W} hary THEN rnum(0) ==- 1 lives ==- 1 diesw ==+ 1 FI IF (hary + 10) * 2 = byloc(1) THEN rnum(0) ==- 1 lives ==- 1X} diesw ==+ 1 FI harx ==+ xtemp HPOSP0 = harx hary ==+ ytemp MoveBlock(plr0+hary,pic,14)RETURNPROC vbgun()BYTE Y}t,x,n, shots=[0] t = strigf strigf = STRIG0 IF strigf = 0 AND (xtemp % ytemp) <> 0 THEN FREQ3 = $40 AZ}UDC3 = $04 shots ==+ 1 x = shots & 3 sincx(x) = xtemp * 2 sincy(x) = ytemp * 2 shotx(x) = harx + 3 shoty(x) = har[}y + 8 FI Zero(misl,$80) FOR x = 0 TO 3 DO IF (sincx(x) % sincy(x)) <> 0 THEN shoty(x) ==+ sincy(x) IF shoty(x)\}*2+2 >= byloc(1) THEN sincx(x) = 0 sincy(x) = 0 winc(1) ==+ 8 FI IF shoty(x)*2-10 <= byloc(0) THEN sinc]}x(x) = 0 sincy(x) = 0 winc(0) ==+ 8 FI t = shoty(x) misl(t) ==% mismsk(x) misl(t+1) ==% mismsk(x) t = ^}M0PF(x) n = 0 DO IF (t&1) = 1 THEN eranum(n) putnum(n) EXIT FI t = t RSH 1 N ==+ 1 _}IF N = 4 THEN EXIT FI OD shotx(x) ==+ sincx(x) HPOSM0(x) = shotx(x) IF shotx(x) >= bxloc(1) THEN si`}ncx(x) = 0 sincy(x) = 0 winc(3) ==+ 8 FI IF shotx(x)-6 <= bxloc(0) THEN sincx(x) = 0 sincy(x) = 0 a}winc(2) ==+ 8 FI FI OD t = 0 FOR x = 0 TO 3 DO t ==% sincx(x) % sincy(x) OD IF t b}= 0 THEN AUDC3 = 0 FI FOR t = 0 TO 2 DO IF P0PF RSH 1 = 1 THEN eranum(t) x = vtbl(t) putnum(t) n = 3 c}snum(n) ==+ x DO IF snum(n) > '9 +$A0 THEN snum(n) = '0 +$A0 IF n = 0 THEN EXIT ELSEd} n ==- 1 FI ELSE EXIT FI OD FI OD RETURNPROC vb()BYTE n SAVETEMPS IF dieswe} <> 0 AND lives = 0 THEN vbgmovr() GETTEMPS XITVBV FI poplt = POPL popft = P0PF IF nsound > 0 THEN nsound ==- f}1 AUDC4 = (nsound RSH 1) % $A0 FI IF vol1 > 0 THEN vol1 ==- 1 AUDC1 = vol1 % $C0 FI IF vol2 > 0 THEN vol2 ==- g}1 AUDC2 = vol2 % $80 FI freq3 = freq3 * 4 AUDF3 = freq3 IF diesw <> 0 THEN diesw ==+ 1 PCOLR0 ==+ 2 AUDF2 = PCOh}LR0 * 8 AUDC2 = $88 GETTEMPS XITVBV FI vbwalls() ATRACT = 0 vbplayer() vbgun() HITCLR = 0 GETTEMPS XITVBVRETi}URNPROC t1() SAVETEMPS IF tim2st <> 2 THEN tim2st ==- 1 FI CDTMV1 = 256 rnum(0) = vtbl(0) + $A0 GETTEMPSRETURNj}PROC t2() SAVETEMPS CDTMV2 = tim2st byloc(0) ==+ 1 byloc(1) ==- 1 bxloc(0) ==+ 1 HPOSP2 = bxloc(0) bxloc(1) ==- 1 Hk}POSP3 = bxloc(1) tictoc ==! 1 AUDF1 = metro(tictoc) vol1 = $08 GETTEMPSRETURN PROC init()BYTE i, GPRIOR = $l}026F rnum(0) = '3+$A0 lives = 3 FOR i = 0 TO 3 DO snum(i) = '0+$A0 OD FOR i = 0 TO 2 DO putnum(i) OD Zerm}o(disp,200)RETURNPROC play()BYTE i GPRIOR = $04 byloc(0) = 40 byloc(1) = 196 bxloc(0) = 60 bxloc(1) = 184 HPOSP2n} = 60 HPOSP3 = 184 harx = 122 hary = 55 SDMCTL = $2E GRACTL = 3 PMBASE = pm RSH 8 COLOR2 = $96 COLOR3 = $48 PCOLR0 =o} $18 PCOLR1 = $98 PCOLR2 = $34 PCOLR3 = $C4 strigf = 1 SETVBV(7,VB RSH 8, VB & $FF) CDTMA1 = t1 CDTMA2 = t2 CDTMV1 =p} 256 HITCLR = 0 diesw = 0 tictoc = 0 vol1 = 0 vol2 = 0 IRQEN = 0 FOR i = 0 TO 2 DO winc(i) = 0 shotx(i) = 0q} shoty(i) = 0 sincx(i) = 0 sincy(i) = 0 OD Zero(plr0,$80) Zero(plr1,$80) SetBlock(plr2,$0080,$FF) SetBlock(plr3,r}$0080,$FF)RETURN PROC MAIN()BYTE i=[0],a,b,nBYTE ARRAY grp2(4)=$D00F pkinit() DLINIT() init() pls}ay() DO i = (i + 1) & 1 a = byloc(i) RSH 1 b = byloc(i) & 1 WHILE VCOUNT <> a DO OD IF b = 1 THENt} WSYNC = 1 FI COLBK = RANDOM & $F6 FOR n = 0 TO 9 DO grp2(i) = 0 WSYNC = 1 COLBK = RANDOM & $F6 OD u}COLBK = COLOR4 IF (consol & 1) = 0 THEN DLINIT() init() play() ELSEIF lives <> 0 AND diesw <> 0 THEN playv}() FI ODRETURN;END OF HARVEY.ACT EN DLINIT() init() play() ELSEIF lives <> 0 AND diesw <> 0 THEN play+ 8fFhihiHHȱȱ`8Hh` M8E…¦ M8`LM8` ^8Пx}"Ff ee&8L8 ^8_Wń児0 &&86.ń児8y}儅充FfFf8L8 8` Fj` &`p B V8l `9 Vhhlt9HHJJJJz}hh`hhlt9 `iDiE`Hhv9`Hh`Hh`Hh` 9IHiDiE B w9HI{} B w9`ԆՄ ؠ0ȑ8)ȑ`HhL:0L:II襢 :iȑȩ-`H 9 :hL9H|} 9 H:hL9 9L{: 9L: 9L{: 9L:L: 9L:L: 9L: 9L: 9L: 9L: 9L: 9L9 9L: 9L9 9L:}}ȩ$&*i0:iȑ`v9 LFĆ>%>Ć5%/E)ԵH膇hCI4~}H120 OD OD Zero (colfield,160) FOR z=1 TO 6 DO MoveBlock (colfield+sinus(zx(z))+o,balken,14) zx}(z)==+dx(z) IF zx(z)=52 OR zx(z)=0 THEN dx(z)=-dx(z) FI OD IF zx(1)=0 THEN FOR z2=0 TO 13 DO balke}n(z2)==+$20 OD FI UNTIL ch#$FF ODRETURN )=-dx(z) FI OD IF zx(1)=0 THEN FOR z2=0 TO 13 DO balke4;**********************************************************************;* } *;* PhoeniX SoftCrew ACTION! Programme *;* most (c) by PSC Software Devel}opment Lippstadt/Warendorf *;* *;* PhoeniX Sof}tCrew #### #### #### *;* c/o Carsten Strotmann # # ## ## } *;* An der Kreutzbrede 20 #### ### ## Software Development *;* # ## ## } *;* 4410 Warendorf 1 # #### #### *;* } *;**********************************************************************; Progr}ammname : ScrollDemo; Filename : SCROLL.ACT; von : Carsten Strotmann; letzte Aenderung: 20.12.91}; Bemerkung :;INCLUDE "D2:SYSTEM.ACT"MODULE;BYTE shscrol=$70, svscrol=$71, hscrol=$D404,vscrol=$D405, } vcount=$D40BCARD POINTER dlptr=$72, adr, dlstartCARD sdlstl=$230, sdlstlsavBYTE ARRAY displayList =[$70$70$70 $72$0}0$00$72$00$00$72$00$00$72$00$00 $72$00$00$72$00$00$72$00$00$72$00$00 $72$00$00$72$00$00$72$00$00$72$00$00 $72$00$00$72$00$}00$72$00$00$72$00$00 $72$00$00$72$00$00$72$00$00$72$00$00 $72$00$00$72$00$00$72$00$00$72$00$00 $52$00$00$41$00$00]PROC S}etDL ()BYTE u sdlstlsav=sdlstl sdlstl=displaylist dlstart=displaylist+4 adr=0 dlptr=dlstart FOR u=0 TO 24 DO dl}ptr^=adr dlptr==+3 adr==+40 OD shscrol=2 svscrol=4RETURNPROC ScrollUp ()BYTE u svscrol==&$F ; Groessere Wer}te ausblenden svscrol==+1; SYNCRONISATION MIT DEM VBI, VER-; MEIDET FLACKERN! DO UNTIL vcount>120 OD; Scrollregist}er zuruecksetzen und; Bildschirmspeicher scrollen IF svscrol>=8 THEN svscrol=0 dlptr=displaylist+4 FOR u=0 TO 24 D}O dlptr^==+40 dlptr==+3 OD FI vscrol=svscrolRETURNPROC ScrollDwn ()BYTE u svscrol==&$F svscrol==-1 DO }UNTIL vcount>120 OD IF svscrol=$FF THEN svscrol=7 dlptr=displaylist+4 FOR u=0 TO 24 DO dlptr^==-40 dlptr==+3} OD FI vscrol=svscrolRETURNPROC ScrollLft ()BYTE u shscrol==&7 shscrol==-1 DO UNTIL vcount>120 OD IF shsc}rol<=0 THEN shscrol=4 dlptr=displaylist+4 FOR u=0 TO 24 DO dlptr^==+1 dlptr==+3 OD FI hscrol=shscrolRETU}RNPROC ScrollRght ()BYTE u shscrol==&7 shscrol==+1 DO UNTIL vcount>120 OD IF shscrol>=4 THEN shscrol=0 dlpt}r=displaylist+4 FOR u=0 TO 24 DO dlptr^==-1 dlptr==+3 OD FI hscrol=shscrolRETURNPROC Err (BYTE errnum) G}raphics (0) DO PrintB (errnum) ODRETURN PROC Pause (BYTE times)BYTE u FOR u=0 TO times DO DO UNTIL vcount<12} OD OD RETURNPROC Main ()BYTE sti Error=Err SetDL () DO sti=Stick(0) ! $F IF sti&2 THEN ScrollDwn ()} FI IF sti&1 THEN ScrollUp () FI IF sti&4 THEN ScrollLft () FI IF sti&8 THEN ScrollRght () FI Pause} (1) UNTIL Strig(0)=0 ODGraphics (0)RETURN THEN ScrollLft () FI IF sti&8 THEN ScrollRght () FI Pause5-