curzon@kaoa01.dec.com (Richard Curzon TRS 5/2 DTN 640-2149) (06/10/88)
Sorry if you saw this before... seems it didn't make it some places. There are 2 runtime packages (at least) for Action! The one that was sold by OSS (and now presumably by ICD Inc) is the original by Clint Parker. It is not PD. The other one I did a quick review of last year: The other (PD) package is by Jeff Reister (sp?) of Mount Vernon, Washington. It includes an adaptation of the ST Reversi game published by Analog, and a font editor, along with their source codes, and the assembler sources for the runtime package code. The actual runtime package is contained in one relatively short file (RUNTIME.ACT). It seems to be quite a bit more compact than the OSS runtime package. There is also a program RTSCAN.COM (with sources) that scans 1 or more source code files, and compiles a list of each of the RUNTIME symbols that will be required. The list can be output to any device. It lists symbols in the same order as they appear in the RUNTIME.ACT file, and the number of calls made to each. Then it is simple to load a copy of RUNTIME.ACT into the editor, and kill all the unused routines/variables. Another author (name escapes me) wrote a program call RTWRITE, that will take the output from RTSCAN (disk file) and write out the minimum runtime package for you. In all, this package makes less demand on your symbol table capacity than the OSS package (fewer symbols). And, RTSCAN/RTWRITE makes it easy to include only the direct and indirect routines needed, to make your runable binary file as small as possible, and minimize symbol table demands. If you encounter symbol table capacity problems anyway in compiling a very large program, this package does not include a routine to increase symbol table space (like BIGST.ACT distributed with the OSS package), nor does it have documentation on exactly what system variables need to be changed. However, BIGST.ACT was released to the world by Clint Parker's BBS, as copyright but to be freely distributed, so that could be used in conjunction with this PD runtime package. The package comes with a notice that although this runtime package is PD, Action! programs can still not be sold for profit unless cleared with OSS Inc. [PROBABLY ICD INC - NOW] It is a very fine package, and a definite improvement over the OSS package in ease of use-- no bugs found yet. [I have since used the PD runtime package on a couple of small programs-- it works great...] ;-----------cut here----RUNTIME.ACT by Jeff Reister------------------- 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$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$60] 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$85$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$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 $83$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$F0$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$C1$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$87$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] 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$84$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] PROC _ERRVEC=*() [_ERROU] PROC _DEVIC=*() [$00] MODULE CARD Error=_ERRVEC BYTE device=_DEVIC PROC _GOCIO=*() [$20$56$E4$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$07$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=*() [$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 _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$1A$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$0B$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$38$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 i CARD s) [$E0$00$30$03$4C StrC $49$FF$85$A2 $8A$49$FF$AA$E6$A2$D0$01$E8$A5$A2$20 StrC $A0$00$18$B1$A2$69$01$91$A2$A8 $88$B1$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] PROC DOPRNI=*() [$48$20 _PRECON $20 StrI $68$A2$FD$A0 $03$4C _DOPRNT] PROC PrintCD=*(BYTE d CARD c) [$20 _CLREOL $4C _DOPRNC] PROC PrintC=*(CARD c) [$20 _SHFTR $4C PrintCD] PROC PrintCDE=*(BYTE d CARD c) [$20 _SETEOL $4C _DOPRNC] PROC PrintCE=*(CARD c) [$20 _SHFTR $4C PrintCDE] PROC PrintBD=*(BYTE d, b) [$A0$00$4C PrintCD] PROC PrintB=*(BYTE b) [$20 _SHFTR $4C PrintBD] PROC PrintBDE=*(BYTE d, b) [$A0$00$4C PrintCDE] PROC PrintBE=*(BYTE b) [$20 _SHFTR $4C PrintBDE] PROC PrintID=*(BYTE d INT i) [$20 _CLREOL $4C _DOPRNI] PROC PrintI=*(INT i) [$20 _SHFTR $4C PrintID] PROC PrintIDE=*(BYTE d INT i) [$20 _SETEOL $4C _DOPRNI] PROC PrintIE=*(INT i) [$20 _SHFTR $4C PrintIDE] PROC PrintD=*(BYTE d CARD s) [$20 _CLREOL $4C _DOPRNT] PROC Print=*(CARD s) [$20 _SHFTR $4C PrintD] PROC PrintDE=*(BYTE d CARD s) [$20 _SETEOL $4C _DOPRNT] PROC PrintE=*(CARD 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 $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) [$85$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$82$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$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$42$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$03$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$20 _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] PROC PutDE=*(BYTE d) [$A2$9B$4C PutD] PROC Put=*(BYTE c) [$AA$AD _DEVIC $4C PutD] PROC PutE=*() [$A9$9B$4C Put] BYTE FUNC 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$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$26$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$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$48$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] BYTE 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$03$4C _DOINPT] BYTE FUNC InputB=*() CARD FUNC InputC=*() INT FUNC InputI=*() [$AD _DEVIC$4C InputCD] PROC InputMD=*(BYTE d 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=*(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 _GOCIO $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$03$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 $60] 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 _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$03$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$4E$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$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) [$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$54$60] PROC Plot=*(CARD x BYTE y) [$20 Position $A9$06$AE$FD$02$4C PutD] PROC DrawTo=*(CARD x BYTE y) [$20 Position $A2$60$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$02$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) [$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$D2$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 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 STrig=*(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$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] 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, 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$A6 $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$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$A7$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$F7$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] PROC 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$B1$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$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 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$C9$FF$D0$E5$C6 $A5$38$B0$E0$60] MODULE ;--------end of RUNTIME.ACT------------