ONp N ON @`  @`! #@%`')+-/1 3@5`79;=?/E`IKMOQUW_ogkmq s@u`wy{} @` @ `  ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @` @`!Aa   !Aa!!#A%a')+-/1!3A5a-@`  @`! #@%`')+-/1 3@5`79;=?/E`IKMOQUW_ogkmq s@u`wy{} @` @ `  ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @` @`!Aa   !Aa!!#A%a')+-/1!3A5a-AESMACS  >*ED APP  zEDIT RSC ,<EX1 PAS <uEX2A PAS AEX2B ASM CEX3 PAS D3GRCONSTSINC GGRRTNS01INC LGRRTNS02INC NAGRRTNS03INC PGRRTNS04INC RGRRTNS05INC SGRRTNS06INC TGRRTNS07INC ViGRRTNS08INC XGRRTNS09INC !YIGRRTNS10INC #ZGRRTNS11INC %[GRRTNS12INC &]?GRRTNS13INC (^GRRTNS14INC *`GRRTNS15INC NaGRRTNS16INC PbGRRTNS17INC RcGRRTNS18INC SdGRTYPES INC Ue LIB10 ASM Wi=LIB11 ASM Yo LIB12 ASM [xLIB13 ASM ]~B+LIB14 ASM aLIB15 ASM do LIB16 ASM f+LIB17 ASM jLIB18 ASM mTPASCAL APP opPASCAL ERR  README TXT ( VDIMACS  ,)  4*D * Macro definitions for Lattice C interface library * *D * XREF CALLAES,AESPB * * Offsets of arrays within parameter block * COPB EQU 0 Control array GLPB EQU 4 Global array IIPB EQU 8 Input array IOPB EQU 12 Output array AIPB EQU 16 Address in array AOPB EQU 20 Address out array * * Sizes of arrays in bytes * COS EQU 12*2 GLS EQU 15*2 IIS EQU 256*2 IOS EQU 256*2 AIS EQU 256*2 AOS EQU 256*2 * * Flags set to 1 if we must replace the standard values * * COPBS SET 0 Control array IIPBS SET 0 Input array IOPBS SET 0 Output array AIPBS SET 0 Address in array AOPBS SET 0 Address out array * * Offsets of the actual arrays from the base pointer * COAR EQU 24 Control array IIAR EQU COAR+COS Input array AIAR EQU IIAR+IIS Address in array IOAR EQU AIAR+AIS Output array AOAR EQU IOAR+IOS Address out array GLAR EQU AOAR+AOS Global array * * Other macro variables * ARGPTR SET 0 Offset for arguments EXIT SET 0 1 if work to be done after call LEND1 SET 0 1 if string length contained in D1 * *C * LIBFNV name,args Set up entry Point for 'void' function * *C * LIBFNV MACRO IFNE NARG-2 FAIL ENDC XDEF \1 \1 INIT \2 ENDM * *C * LIBFNR name,args Set up entry Point for 'long' function * * It may need to do more work than LIBFNV * *C * LIBFNR MACRO IFNE NARG-2 FAIL ENDC XDEF \1 \1 INIT \2 ENDM * *1 * INIT argcount Set up initial call * *1 * INIT MACRO ARGPTR SET 4*\1 LEA.L AESPB,A0 ENDM * *I * LONG Move past argument * * LONG array Place argument (array) in parameter block slot * * LONG array,offset Place argument in offset in specified array * *I * LONG MACRO IFEQ NARG-1 MOVE.L ARGPTR(SP),\1PB(A0) \1PBS SET 1 EXIT SET 1 ENDC IFEQ NARG-2 MOVE.L ARGPTR(SP),\2*2+\1AR(A0) ENDC ARGPTR SET ARGPTR-4 ENDM * *F * WORD array,offset Place argument in offset in specified array * *F * WORD MACRO IFNE NARG-2 FAIL ENDC MOVE.W ARGPTR+2(SP),\2*2+\1AR(A0) ARGPTR SET ARGPTR-4 ENDM * *G * LPOINTW array,offset array[offset] = *(&value) * * LPOINTW name remember stack offset to put result there * *G * LPOINTW MACRO IFEQ NARG-2 MOVEA.L ARGPTR(SP),A1 MOVE.W 2(A1),\2*2+\1AR(A0) ENDC IFEQ NARG-1 \1 SET ARGPTR EXIT SET 1 ENDC ARGPTR SET ARGPTR-4 ENDM * *: * LABEL name Set a label for this argument offset * *: * LABEL MACRO \1 SET ARGPTR ENDM * *D * SETPTS ii,io,ai Set the size of intin. intout. and addrin. * *D * SETPTS MACRO IFNE NARG-3 FAIL ENDC SETA CO,1,\1 SETA CO,2,\2 SETA CO,3,\3 ENDM * * *) * SETA array,offset,value Set specified array slot. * *: * SETA MACRO IFNE NARG-3 FAIL ENDC IFEQ \3 CLR.W \2*2+\1AR(A0) ENDC IFNE \3 MOVE.W #\3,\2*2+\1AR(A0) ENDC ENDM * *) * CALLW name,code Call the function * *) * CALLW MACRO IFNE NARG-2 FAIL ENDC MOVE.W #\2,COAR(A0) JSR CALLAES IFNE EXIT LEA.L AESPB,A0 Reload address register EXIT SET 0 ENDC RESTORE II RESTORE AI RESTORE IO RESTORE AO ENDM * *. * RESTORE array -- Service macro for above * *. * RESTORE MACRO IFNE \1PBS LEA.L \1AR(A0),A1 MOVE.L A1,\1PB(A0) \1PBS SET 0 ENDC ENDM * *C * SPOINTW array,offset,name Place short result back into output * *C * SPOINTW MACRO IFNE NARG-3 FAIL ENDC MOVE.L \3(SP),A1 Point to destination CLR.L (A1) MOVE.W \2*2+\1AR(A0),2(A1) Move back result ENDM * *B * SPOINTL array,offset,name Place long result back into output * *B * SPOINTL MACRO IFNE NARG-3 FAIL ENDC MOVE.L \3(SP),A1 Point to destination MOVE.L \2*2+\1AR(A0),(A1) Move back result ENDM * *E * SETEXIT Ensure A0 is loaded with Pointer to Params after call * *E * SETEXIT MACRO EXIT SET 1 ENDM * *G * COPYW array,offset,length,name,off,direction Array copying * *G * COPYW MACRO IFNE NARG-6 FAIL ENDC LEND1 SET 0 Because we're destroying D1 MOVE.W #\3-1,D1 Count MOVE.L \4(SP),A1 Pointer to destination LEA.L \5*2(A1),A1 Add in offset MOVE.L A2,-(SP) Save A2 LEA.L \2*2+\1AR(A0),A2 A2 is now source pointer IFC \6,'BACK' C\@ MOVE.W (A2)+,(A1)+ Put Values into user array DBRA D1,C\@ ENDC IFC \6,'FROM' C\@ MOVE.W (A1)+,(A2)+ Get Values from user array DBRA D1,C\@ ENDC MOVE.L (SP)+,A2 Restore A2 ENDM * *G * COPYWA array,offset,length,name,off * * Copy alternate elements of source array to destination * *G * COPYWA MACRO IFNE NARG-5 FAIL ENDC LEND1 SET 0 Because we're destroying D1 MOVEQ.L #0,D1 Zero D1 MOVE.W #\3-1,D1 Count MOVE.L \4(SP),A1 Pointer to destination LEA.L \5*2(A1),A1 Add in offset MOVE.L A2,-(SP) Save A2 LEA.L \2*2+\1AR(A0),A2 A2 is now source pointer C\@ MOVE.W (A2)+,(A1)+ Put Values into user array TST.W (A2)+ Skip source element DBRA D1,C\@ Back for next item MOVE.L (SP)+,A2 Restore A2 ENDM * *C * STRLEN array,offset,stringptr array[offset] = length of string * *C * STRLEN MACRO MOVEQ.L #-1,D1 Initialise D1 MOVEA.L \3(SP),A1 Pointer to string S\@ ADDQ.L #1,D1 TST.B (A1)+ Is it a 0 BNE.S S\@ MOVE.ZW D1,\2*2+\1AR(A0) Store result LEND1 SET 1 Indicates length in D1 ENDM * *K * STRCPY array,offset,string Copy each byte of the string into a word * * of array. Relies on length being in D1 * *K * STRCPY MACRO IFEQ LEND1 FAIL ENDC LEND1 SET 0 MOVEQ.L #0,D0 Initialise D0 MOVE.L \3(SP),A1 Pointer to string MOVE.L A2,-(SP) Save A2 LEA.L 2*\2+\1AR(A0),A2 A2 pointer to offset array SC\@ MOVE.B (A1)+,D0 Get a char MOVE.W D0,(A2)+ Move 16 bits into destination array DBRA D1,SC\@ Go Back for next byte MOVE.L (SP)+,A2 Restore A2 ENDM * *@ * RETURN Perform return sequence * * RETURN array,offset Transfer array[offset] to a register * * (if necessary) and return * *@ * RETURN MACRO IFEQ NARG-2 MOVE.W \2*2+\1AR(A0),D1 ENDC IFEQ NARG MOVE.W D0,D1 ENDC EXT.L D1 RTS ENDM * * * End of Macros File * * `z`J*_G JgG. g'[Q`GN7|GNNq9Ipd"gI",l `E"R$"f$ (R!8mgR&!8"RNk %|g(rN"<p (jN`FreevecJg&A"#fRN"<aglobin pg.(A"$G($#g&#on Ԍ%8`B%|o(`"Nmuldiv (vN *H@HE.,ڀB0H@BE@HEހ݅JjJjރB݃HzJj DaDNuJjD@a DD(Nu b,"BAHA2HG2<HG2HF<BAHA%A("NuJfJk"$/a(%B(Nu*BEHER "BAHA42HB4HG26HGHC6"BAHA:2HE:HC24HC2HB4 "Ğ H@HD"&HCĜBҀ ׀HDB0H@2HA/aҟJ(j٪(SNuaptovec(A" W&C8H#L#p#pNgetbyteԁB0(Nputbyteԁ(Nget2bytԁB20(Nput2bytԁ1(Ngbytes (ABSfNpbytes (A(SfNlevel ")Nlongjum"A(iN(Vdu &B3zk aQ` NP` ````>`X`ZrNrNrNra  dv3  eapgf`Nr|H8$(jp NL``ka`t aHEa``0H<r(jp NL%C0BH!H "p8 NL (iN&_HHN` `>`LЉ**0XlNurT!|X`H868HAHBBHABA҃LNuJj DaDNuJjDaDDNu b,BAHA&2HAB42HANuc$rNu.BGHGR(*$a$ǂ$&HCHCԃbDbR`NuS`r`rJ_*<&/&Ccgcg cgcgJc& GLo2 n($rb`"r`r`r`r`r` r `r `r &/p,(jNNs 0^dj|(h^,_DX p@lad 09BLIB 11-Dec-85sys.ini <0N$v0(#CB4BG" p(jN%AG" p(jN%AJgJf"<p(jNrҪ#A#i r#A n$$ԁv0(S$)ԁ(rҩ`")ҩt "*B rҩ&*!8%jNNqCON:CON:stop <0N#j4`.")#pJg")p(iN")#pJft"p(j8NNtestfla <0Ntr p(j8NJfr`Rtrp(j8N#AtfGt" p(j$Np(jNrgtvfF"`N^C datstri <N$B("B"B(rNNqdatstam <NNlocateo <$Np(jNNfreeobj <$Np(jNNlocated <NrNNqfault <0N`zG" `G" `G" `G" `G," `GH" `zGd" `nG" `bG" `VG" `J"tzlJgvggxogzyg`g g g g gD`#A$p(j(Np(jNNNqFile not found No store leftToo many globalsNot a .RUN fileResident library not loadedCan't rename across devicesFile already open for writingInvalid input/output streamError %Nvdu.rdc <0NJftr p(j8NJfrNtrp(j8NNNqvdu.wrc <0N&trp(j8NNNqrdch <$Np (jN"t fp(jNt f"Np(jN"Nwrch <(Ntgv f r p(jN"p(jNNbinrdch <,N"*$" #p(&)n"pINNrґ$*!( rҪґt0"Nunrdch <N"*" JntJfF"N"S$*!( rNNqbinwrch <4N$*&#p( #p8J(l#p( p(i NN")npI,NBrҪҩrҩ$*!( NNqrepleni <0N$*#p(v#CB((0(JlDzg"<p(jNJfrNJg"*p(iN#Arf$*B( $*B(Nrҩ$*!( rҪҩt0"Ndeplete <(N"*"$0JlDvg"<p(jNJg "*p(QNJg"<p(jNNNqfindinp <,NtpI@NNNqfindout <,NtpI NNNqfindstr <`Nr1p(jtN#AG$ #B BJfrNr#A t1nҩBrҩ `")t! ")!rҩ#Av֩#CB($") p,(j@N#A`rg%|(`r#A$)G 4& !(`rg%|(`r#A$)G & !(`rg%|(`r#A$)G p& !(`rf$)B( $)!(`~rf G d" `G @" $)!(D`R$")p,IN$)")p,I4N%A(JftfN")p@I N#A4")pDI Nt#B<(&)4tr=p,(j8N%A($)G & !(`")p@I N#A4")pDI N(&)4trAp,(j8N")p@I N#A4")pDI NB<(&)4trp(j8N%A(r(fFNabort <@N#j `Gh" `Gp" `G|" `G" `G" `G" `G" `vG" `jG" `^G" `RG " `FG " `:G0" `.G@" `"G`" `Gx" ` G" `G" `G" `G" `G" `"t lVvl&xgzg|g~g`gtg vgx gz g`g l(t gvTgxbg g `tg$ g& g( g* g, g.`:#AG$ %BvTfG" p (j$N`RG" p (j$N&)$")p (j(Nrdo$)G" p (j(N l p I(N%i p (jNNNqCode %N Bus error Address errorIllegal instructionDivide by zeroCHK instructionTRAPV instructionPrivilege violationTrace exceptionLine 1010 emulatorLine 1111 emulatorUnexpected TRAPStack overflowUndefined global %$%N calledInvalid input streamInvalid output streamFailed to initialiseCoroutine failure Heap corruptIllegal FREEVEC Disk full FATAL ERROR: Stack overflow FATAL ERROR:  @ %X6backtra <8N$ #B&(08#DG" p(j$N`v")"0pINr:p(jNr#A tn.ҩ#A&)Wl&"08p INrҩ `p(jN#i")$0#B")0fG" p(j$NN Backtrace of stack  End of backtrace writear <,NpINJg"U$Gl" p(j(N`8 o B@lt "p(jN`$Gt" p(j(NN %T7 #X%X8isfn <$NU#A o $ 䊲mrNr‘JgrN")t0vgrNr#Atn:&)ցx08v n()؁z0HxorNrҩ`rNNqreadn <,NBBBp(jN#At0n v9oT`,p(jNr%A(rN`r#Ap(jN#A`&")t gv gx gz+g|-g`` $r Nҩt0"p(jN#Ar0n t9lJgDp(jNB("Nnewline <$Nr p (jNNNqwrited <lND#Av։#CB Jl S#Qt ")ND")ҩ !t ")N#AR Jf#i@tԩ "#AD@nr pT(jNrҩD`Jl r-pL(jN") S#A@Jm ҩt0԰"pP(jNrҩ@`Nwriten <,Ntp(jNNNqwritehe <0NvoSp(jNr‘G<$ ҂"0p(jNN0123456789ABCDEFwriteoc <0NvoSp(j Nr‘t0҂p(jNNwrites <0N$v0(#Cr#An $ԁv0("p(jNrҩ`NNqwritet <4Np(j$N"t0&)#Cr#A nr p(jNrҩ `Nwritef <xNzډ#E0,~0h#G4r#A84nb$ԁv0(#Cp$(jN#Ap$(j,NtEfr#A")p$(j,NtNfr #A` r;glt gbv=gXR") lrN"ҩ" p$(jN#Argt g vf.p$(jNJgrNJfr=fp$(jNrNrNrNNqfindarg <HNBB B&x08#Dr#An$ԁv0(#CJf`t=gx/g z,f")t0 f")NR ")ҩ t0")p,(j0NJgr#Ar,g t=f BB r,fRrҩ`LJf")t0 f")NrNNqbcplhi <NtNbcpllo <NNhi <N$<āv"NNqlo <N$<ā"NNq2$%pUV l4mP{lhb<c68. 7|/;P<pZ [ L= |> ?@(]PAB: zyx9tL& CTD,ELFG<HIJK4LhMk X-!,!dN"O%tP'09ED1 11-Dec-85ptr Ҫ`$0JlD"Nwordlentԁv0(t"p(jNTNshuffle$*pS#B#A`"rҩҪ`$*`ԩ!(R")l"p(jtNr%ANNqget.nexp(jlNґD$*`Ԫp!(Nstore.prp IDN"$!l(%QlNshuffle$*pgRprґ#A#jp`"")SҪ`$*`ԩ!(S")l"p(jxNr%ANNqnext.li"*pp IN"\fr` pItNrpIN"pIPNrNprev.lirp ItNXfr`8"l"%plrpITN"D$*`!(rҪp(jtNrNdelete.pIN#Ap(jlN#A"*ppIN#A t\fF#BBLBPJg&pf()Jfb%jl\J\f6zڪX%E,~h%jX\"*\D$*`!(rp (jN"*\%pl$*\D&*`!8N"Sp IN%A\GX& $rp (jdN` &)$)"p IdN"*p (jtNSp"*pl%AN&)$)"p IdN"pfp (j`N`")$) "p INNNqdelete.p(jtNr%A$)")p(jNrґ$*pS#A #B`Frҩ Ҫ`#pJo")$)"` ")ҩ$*`ԩ !(R ") lNadjust.#A #B`D"*`ҩ #pJo")ҩ`")$)"$*`ԩ !(R ") lNNqinsert.pIN#Ap(jlN#Aҩ#A BLBPrp(jN"*pf`$*rp(jN"p(jxNpIN"S#AB`"rҩҪ`$*`ԩ!(R")l`RR"pIN")\f%i \T`t") p(jNrҩ t"*`ґ! rґv$*ppIN%jpNNqextractpINR#A$v0(S%ChB#C `(rҩ$)ԁr0($*dԩ(R") lNreplacepIPN#Ap(jlN#AtԪh#B t") p(jNT#A#ABJgJoTp$(j NJf"p$(j`Nrp$(jN")\f$)ժ`")ҩ$)p$(jN`")ҩ$)Dp$(jNrґ&)$*pp$I$NBLBPRB#jh`("*dҩt0rҩ&)ց8R")l$)(NNqflag.lipI$ND$*`ԑ!(N@l\p09ED2 11-Dec-85edit BJgJXf"*$#p#p( vP l#C rҪ$rp(j|N$*rp(jN") S#AB`<")ҩt0r m $)ԩv0("p$(jNRR")l")p(jxN"*p(jNBr#Arp(jN"JgtԪG& rp(jdN$*"*p(j|N`"*p(j"*XSmtn6{N*6BNZfr~&$)") p (jdNNNqLast line deletedNo room in bufferCreating new fileInput lines truncated Top of file End of file Line too longUnknown command Unmatched ()Commands abandoned Syntax errorUnable to open fileNumber expectedNo block markedCursor inside blockBlock incorrectly specified Search failedTabs in input file expandedErrorfatal $*rp(jN&)$)"p(j(Np(jNrp(jPNN$tY09ED4 11-Dec-85getsp $*ДS%B"Nget.siz"<'Ninit.edr҉#At#B\B`Bpp(jN%App(jN%Av$)G" pp(j8N#A`J`fJ\g6G" pt(j$NG" pt(j$NG" pt(j$NB\G " pt(j$NG4" pt(j$Npt(jN#Adt f "pt(jNpt(jNv$)G`" pp(j8NJg\")"0ppIN"$)J(g#p(dBh&)dx08#Dpz#El``")dҩlt0#Btr0n v9oGl" <(j$N`$)hr <(j Nҩtt0#AhRl")pll hl$)hG" px(j(N`"h"pp(jtN%AXJnG" pp(j$N`^"*Xґ%A%jX\rppIN%A$)&0(x08#DhBd`*")$0ԩdv0($*ԩd(Rd")hdlB$*rpp(jN$*rpp(jNU%A$*rpp(jNS%A"*ppIN%A`r@ppIN%Adt"*p|(jNRppIN%A4$v(r%A8r@ppIN%A$v(r@ppIN%At BBB&*`!X8r#Ad#jh`"*`ҩdBRd")hdlBpBlBBBBt%BHBLBPBpvO%CtBBBXx%DBx%j|$*rpp(jN"*pp(jN%AJf$rpp(jNrҪX%A$v(`rҪX#AlBhBpBtBx$*X&*Ж$*" <(jN#A|ҪX#AG& t r <(jdNG& t r <(jdNtr <(j|N"* <(jN <(jN#Adr dn8tdg.Rh ho #Bt`")lҩhg`4`")lk")lS%A\$*pmD&*`֩p!8Rpt")h <(jNҩlT#Al <(jN#AdtgBhr@ҩlm" <(jNG" <(jN")ll$)|թr@ <(jNR`B`Rh")lҩht Rrlt#Bx`8")dtgv gx gz g| g~g` <(jN#Ad`| <(jN"* <(jNrҪ\#At")h <(jNҩ%A$)pS%Bp$*r <(jNJxgr <(jNJtgr <(jNN FROM/A,SIZE3 Metacomco Screen Editor Version 1.6 August 1985 2Copyright (C) 1985 Tenchstar Ltd., T/A Metacomco. All rights reserved.  Bad arguments (Enter command line or to exit FROM/A,SIZEInvalid number given for SIZE SIZE of %N too small Not enough free store Metacomco Screen Editor (1.6)'(C) Tenchstar 1985 All Rights Reserved File too bigvdu.wri(z0H#E p(j|N$*rp(jN&) t")p(jN"ҩ %ANNqvdu.wrlS#CB `"")ҩ $ԁr0(p (jNR ") lNNqtidyup $*rp(jNJXo"*Xp(jxN"p(jNNNqshow.tiNNqLhT 0w09ED5 11-Dec-85start p (jNp (jDN%AxG$ %B|p (jNNcursor.Jf,Jfr`$r %At &*"p (jN`SrNNqcursor."*nt %Av ֪"p (jN`RNNqcursor.Jfp (jNJf rp (jN`SNNqcursor."*Ȳpfp (jNJf rp (jN`RNNqdo.tab p (jN"*Ҫ$*Hp (jNJfNNqcheck.np (jN"*Ҫho."*p (jr0n t9l*r;g t(gv)g xf r p(jNpIN#A g tf`R"ҩ `"NNqcheckomp IN"tgS8rt;fFvxfFvz(fFv|)fFNNqgetch "*4Ҫ8t0""*4v08lr`R8"NreplaceJg"*p (jNNNq$p09ED7 11-Dec-85do.writ"p(jN#A Jfr p(jNr`rҪG& $rp(jdNrҪ&)$rp(jdN") p(jNrґ#Ap (j$Np (jN")o"p (jlNӑ`p(jN"*p(jN"g "<p(jNG" p(jNrNWriting to fileBuffer corruptdo.joinp (jN"p(jlNґ#Atԁ#B&x08#D *\f rp(jN"*hҩ m rp(jNr#A#i `*")ҩt0")Ҫh&*dց8R")l$) ժh"*p(jN"*p(jN"*p(j`NNNqset.poiB#j`~"D$*`ԩ!(%ip"\fLtԩ#B #j`G& $) rp (jdNR ") l$)l%BN"p(jlNӑR")lzNdo.tof "*Xp I\NBlNNqdo.bof $*`&0(JlD#C(*`تp*0HJlD#Ex#D `8")!l%il")p(jlNө")p(jlNөR "*\g $) f")pI@N") NNqfill.pr#jXBl`$")!l%il")p(jlNө")fNNqdo.showp (jTN"*Lp IN"*Lp I`NBrp (jNNcheck.bJLg JPf rp (jN"*PLl rp (jNNNqcurrent"*`Ҫ$0JlD"Ninsert.o؂%D\ת`$)")p(jN")l$)Ց")S#AB`"ҩ$)ԩ!(R")l%jp`*Rp")D$*`Ԫp!(")p(jlNө"*pg $*l%jpNdo.insbp (jN"p(jTN"*L$*P#B"*Pp(jlNҩ#A$LmPl rp(jN")p(j NJf rp(jN"p$(jlNґ(*P&)$"*LpI8N"Ll$)ժLժPNNqdo.delb"L#jPp(jN"*`$0JlD"p(jlN#Arp(jNtg r p(jNrp(jN")$)m`Ncopy.cu$v0(S%ChB#C`&rҩ$ԁr0($*dԩ(R")lt%B"*p(jN"*p(j`NNNqdo.appe"*p(jN"pINNdo.inseBrp (jN$*"*p (j|Np (jNp (jN"*p IlNNdo.insf"*p (jN"BJf r p(jN"p(jNp(jN#Atg|r%Ah`8 ho r#A`Rh"*dҪh p(jN#Ar g tf"*p(jN"*p(jN"*p(j`N`tp(jN"*p(jNJg rp(jNNNqlocate.*|0X#F.p0x#@#@Jf o#@J g")lr``Jlr`r#A#i `JgL")ҩ$)ԁr0(p0(j,N$ԩv0(#A$"p4(j,N$g`L`0")ҩ$)ԁr0($ԩv0(g`R") lr")`"J g rҩ`")S#A`Nfind.st$*Ԫԁ#B#jvmF#C`^"*`ҩ$0JlD#Br҂()&$)"*p$IN#A Jl4JgRB`S#|"*pmJlJ lB")!l`h")\g Xf rp$(jNJg")p$(jlNө`")#prҩ()&$)"*p$IN#A J m")p$IHN")p$IN%iBrp$(jN") S#AB`p,(jNR")lNdo.exch$*v0((*z0H#C#Erp(j\N"*p(jNr%AJgtԪGd& rp(jdNrp((jNp(j,N#A tԪGp& rp(jdNrN f*t#B#i`p$(jNR")lNrY g r p(jNr%At#B #i`$*"*p (j|Np (jNR ") lt#B #i`0$*"*p (j|N"*ҩ t0"p (jNR ") l"*p(jNBN Exchange? numtostvd#Cx#D `L$)")p(jNt0҂&֩ 8$)")p(jN#At ")p(jN#AR r l$("NNqdisplayG* #E$rp (jdNJgtrҩ#A$v0(#Cxo#Dr#A#i `$")ҩt0") ҩR") l#i $) (&)$rp (jdNNUnsetdo.showr҉"G& t"p<(jdN&*trp<(jdNG& trp<(jdN$*H"pPIN&trp<(jdNG& trp<(jdNrҪp$"pPIN&trp<(jdNG& trp<(jdNrҪt$"pPIN&trp<(jdN(G& $*Lrptn66{N.4:TnZZZ rNNqmy.vdu.Jftr p(j8NJfr`\trp(j8N#A fr`< Sfr`* (fr'`"<©#A$<ĩv#B Jg``r`r`r`r`r`r`r`r`r`r`r`r `r`r`r `r`"<`"<`v"<`l") t;mv'n6{NNNqaH rVVV$V<VA< Desk File Find Mark Block Etc Help GST Screen Editor - Desk Accessory 1 Desk Accessory 2 Desk Accessory 3 Desk Accessory 4 Desk Accessory 5 Desk Accessory 6 Quit edit... Edit file... Save as... Read file... Write file... - Save file -- Find string... Repeat find  Find & replace... - Top of file  Bottom of file Start of block End of block  Last position  Set mark 1 Set mark 2 Set mark 3 Set mark 4 - Goto mark 1 Goto mark 2 Goto mark 3 Goto mark 4 Define start Define end - Cut Paste - Delete block Hide block - Insert text Overwrite - Tab space 2 Tab space 3 Tab space 5 Tab space 8 - Set tabs... Text Cursor File Block Etc Delete Mark Find F keys - QUIT EDITCANCELOKAbandon the current edit andleave original file unchanged.To enter text, you must first select the Edit file option from the File menu.Choose Insert mode or Overwrite mode OK ENTERING TEXT to insert or overwrite characters at thecursor position. (See the Etc menu.)Enter text by typing on the keyboardusing the Return key to end lines, themaximum line length is 158 characters.All text input and editing is carriedout at the cursor position.Use the four cursor movement keys markedOK CURSOR MOVEMENT     to move the cursor toany valid position. Note that cursormovement will automatically scroll thetext through the window, both verticallyand horizontally.For larger movement increments, use thescroll bars and mouse as usual._BLKFilename: _.___PCANCELWrite text in marked block to named fileWRITE FILEOKREPLACE ?YESNOCANCEL FIND STRING Find the specified text string FIND: _ X DirectionCaseCANCELOKMATCHIGNOREFind the first text string and replace REPLACE: _XDirectionCaseMATCHIGNORECANCELOKScopeit with the second string. WITH: _X FIND AND REPLACE ONESOMEALL SAVE AS Save entire text in the specified file_ FILENAME: _PCANCELOK SET TABS Set tab spacing__ ENTER TAB SIZE: __ 99CANCELOKTo delete text (one character at a time)there are two keys provided: Backspace deletes the character toOK DELETING TEXT the left of the cursor position. Delete deletes the character directlybeneath the cursor.See the Block menu for larger units. FILE MENU Edit file... Save file Save a8s... Read file... Write file... Quit edit...---Specify filename to edit and read textSave edited text with original filenameSave edited text with new filenameRead text from file to cursor positionWrite marked block to named fileAbandon edit and preserve original textOK FIND MENU Find string... Find & replace... Repeat find Top of file Bottom of file Start of block-Search for the specified text stringReplace text string with specified textRepeat last find or replace commandMove cursor to bottom of fileMove cursor to start of marked blockMove cursor to previous cursor positionOK End of block Last positionMove cursor to top of fileMove cursor to end of marked block MARK MENU Set mark 1 Set mark 2 Goto mark 1-Set position marker #1Move cursor to marker #1OK Set mark 3 Set mark 4 Goto mark 2 Goto mark 3 Goto mark 4Set position marker #2Set position marker #3Set position marker #4Move cursor to marker #2Move cursor to marker #3Move cursor to marker #4 BLOCK MENU Define start Define end Cut Paste Delete block-Define block start at cursor positionDefine block end at cursor positionCopy marked block to a scratch bufferDelete marked block and block markersDelete block start and end markersOK Hide blockInsert scratch buffer at cursor position-- ETC MENU Set text mode to insert charactersSet text mode to overwrite charactersSet tab key spacing to 2Not yet implemented, please try laterOKSet tab key spacing to 3Set tab key spacing to 5Set tab key spacing to 8 Insert mode Overwrite mode Tab space 2 Tab space 3 Tab space 5 Tab space 8- Set tabs...- GEM Screen Editor 1.01 Copyright (C) 1985, GST Holdings LtdAuthors:Howard ChalkleyPenny HallOKChris ScheybelerSoftware by GST, Cambridge, EnglandOKFUNCTION KEYSOKThe function keys are used for somethe key, or click the mouse on the editing functions. You can either pressdesktop picture of the key.F4F1 INS LINEF3 WORD F4 F5 DEL WD F6  LINEF7 LINE F8 DEL LINEF9  PAGEF10  PAGE DEL WDF2  WORD U_` k)9:oy    +,-LMNOw( ' ( 6 @ A  B G H ` f g h  (    % &' ' @ d$     9 I J   3 D E F W X Y j k Q ] ^  !" KZ[cpq    /ABC\]3p             1  !*+ ,345>? @IJ KTU   P P  * $ + 2  9 @ H N$ F P  UjM  0ARct(' !"#$%&')>2)1 *S+b,q-./01(<3; 4567 89*::;J2ZF=E! > j?y@ABC DE< GP& H@ I J K L M# N- O7 PA F K "V  ahr ,(((&   ;( d'   $ (   &   +%'"C(l % %  &  (   1 ' Y,  ( '/ %$ , 6 Rn(           1 ,&(   I  O  V  ] 2 N j(       1 ,  &# } '   . '  , ( " $ 6J K  l '      &     = f          $       l&  ' " &   & ' N0  B   _ p          $  ' &# Jh $ '3     "-  # 0 = *\s "           1  J = F r  b % # % - % S "v/y (~    =  "%)B %h/k           !   .  ^ $   #'+   ##;' cCM&1C E  B^  z       # "* >Z1 v8 >    : Vr$ $&2'(Z(*",,-".Z0"2457889j.{ This program calls the Metacomco Graphics Interface to draw a circle, a triangle, a rectangle and some text on the screen. It should be copied from the distribution disk before compilation. Assuming that drive b: is the work disk, the command line for the Pascal compiler for GST format is; b:ex1.pas to b:ex1.bin extend ws 80 and for TOS format it is; b:ex1.pas to b:ex1.o extend ws 80 obj j For GST format the linker control file PLINK.LNK should be modified by &uncommenting the line LIBRARY gemlib.bin The linker command line is then; b:ex1 plink For TOS format, the linker command line is; b:ex1.68k=startup,b:ex1,paslib,gemlib 6} PROGRAM graphics( input ); CONST { Include the graphic constants include file. Note that to save space, a copy of the constants file should be tailored to the requirements of your application (} INCLUDE 'grconsts.inc'; message = 'M E T A C O M C O '; null = 0; { Terminator for message } chheight = 50; { Character height } { The graphic type definitions include file requires various array sizes to be filled in. This should be done by tailoring a copy of the file, but setting n to 18 (length of message) will avoid this for now } n = 18; TYPE { Include the graphic type definitions include file. Note that to save space, a copy of the types file should be tailored to the requirements of your application (} INCLUDE 'grtypes.inc'; VAR returncode, { Function return code } i , { General purpose index } dummy , { Dummy parameter } handle , { Device handle } chh , { Character height } chw , { Character width } cellh , { Cell height } cellw : INTEGER; { Cell width } workout : intout; { Dummy capabilities array } workin , { Environment array } triangle : intin; { Triangle co-ordinates } box : coord4; { Box co-ordinates } string : gtextstr; { Message string for gtext } anything : CHAR; { Read keyboard character } { Include the relevant graphics routines files. Note that to save space, a copy of the relevant include files could be tailored to the requirements of your application !} INCLUDE 'grrtns01.inc'; INCLUDE 'grrtns02.inc'; INCLUDE 'grrtns03.inc'; INCLUDE 'grrtns13.inc'; FUNCTION mypack( hi, lo : INTEGER ) : INTEGER; { Internal function to pack two integers into 32 bits } BEGIN { The factor moves hi into the high order word } mypack := hi * 65536 + lo END; BEGIN { Set up the environment array with default values } FOR i := 1 TO 5 DO workin[i] := mypack( 1, 1 ); workin[6] := mypack( 2, 0 ); { Get the handle of the workbench } handle := graf_handle( dummy, dummy, dummy, dummy ); { Open a virtual workstation and get its handle } v_opnvwk( workin, handle, workout ); { Clear the screen } v_clrwk( handle ); { Set fill interior style to patterned } returncode := vsf_interior( handle, pattern ); { Draw a circle with brick pattern interior } returncode := vsf_style( handle, bricks ); v_circle( handle, 200, 200, 200 ); { Change style to woven } returncode := vsf_style( handle, weave ); { Set coordinates of triangle } triangle[1] := mypack( 600, 50 ); triangle[2] := mypack( 450, 300 ); triangle[3] := mypack( 100, 300 ); { Draw a filled triangle } v_fillarea( handle, 3, triangle ); { Change style to dots } returncode := vsf_style( handle, dots); { Set coordinates of rectangle } box[1] := mypack( 150, 150 ); box[2] := mypack( 500, 250 ); { Draw a rounded rectangle } v_rfbox( handle, box ); { Set graphics size and style } vst_height( handle, chheight, chw,chh,cellw,cellh ); returncode := vst_effects( handle, thickened ); { Make 'C' null terminated string } string := message; string[18] := CHR( null ); { Output the message } v_gtext( handle, 190, 215, string ); { Close virtual workstation and exit } v_clsvwk( handle ); { Give viewer a chance to study the picture } READ( anything ); END. "{ An example to show how to call assembler routines from Pascal. This program uses the assembler routines in ex2b.asm. Both of these should be copied from the distribution disk before compilation. Assuming that drive b: is the work disk, the command line for the Pascal compiler for GST format is; b:ex2a.pas to b:ex2a.bin extend and for TOS format it is; b:ex2a.pas to b:ex2a.o extend obj j For GST format the linker control file PLINK.LNK should be modified by uncommenting the line INPUT and by replacing with b:ex2b.bin where b:ex2b.bin is the name of the object file produced by assembling ex2b.asm in GST format. The linker command line is then; b:ex2a plink For TOS format, the linker command line is; b:ex2a.68k=startup,b:ex2a,paslib,b:ex2b where b:ex2b.o is the name of the object file produced by assembling ex2b.asm in TOS format. 6} PROGRAM Memory( input, output ); VAR address, contents, value : INTEGER; { External assembler procedure to Poke a location } PROCEDURE Poke( address, value : INTEGER ); EXTERNAL; { External assembler function to Peek a location } FUNCTION Peek( address : INTEGER ) : INTEGER; EXTERNAL; BEGIN { Memory } WRITELN( 'Input address to change' ); READLN( address ); WRITELN( 'Input new value' ); READLN( value ); Poke( address, value ); WRITELN( 'Long word contents of ', address, ' changed to ', value); WRITELN( 'Input address to examine' ); READLN( address ); contents := Peek( address ); WRITELN( 'Long word contents of ', address, ' is ', contents); END. { Memory } * Assembler Program * * 4* * Support routines for the Pascal Memory example. * * The Poke routine update the memory location given * * with a value. The Peek routine returns the long * * word contents of the supplied memory address. * * 4* * For details on linkage see ex2a.pas * * 4* *6 * The two routines are called with a standard 'C' * calling sequence (see Chapter 8) XDEF peek,poke peek MOVE.L 4(SP),A3 Get address to peek MOVE.L (A3),D0 Return contents RTS Return to Pascal poke MOVE.L 4(SP),A3 Get address to poke MOVE.L 8(SP),(A3) Update memory RTS Return to Pascal END !{ A little program to change the stack (bss) size of CP/M-68K object module format program (in particular the Pascal compiler PASCAL.TTP). This program can be used to update the compiler if it runs out of stack during compilation. It reads in a stacksize and copies the file matched with oldfile to the file matched with newfile changing the stack size in the file header. This program should only be used with CP/M-68K files. Ensure that the new version works before overwriting writing the old version ! 7} PROGRAM changestack( oldfile, newfile, input, output ); { Define three useful constants for use in converting the stacksize into single byte form } CONST f = 16777216; ffff = 65536; ff = 256; TYPE bytesize = -128..127; VAR oldfile ,newfile : FILE OF bytesize; byte : INTEGER; byte0, byte1, byte2, byte3 : bytesize; i, stacksize : INTEGER; { Routine to read a byte from the oldfile and write it to the newfile } PROCEDURE rw; BEGIN READ( oldfile, byte ); WRITE( newfile, byte ); END; BEGIN { Open the oldfile for reading, create the newfile and open it for writing } RESET( oldfile ); REWRITE( newfile ); { Output a prompt for the new stacksize and read it in } WRITELN( 'Input the new stack size : ' ); READLN( stacksize ); { Read b egining of file header } FOR i := 1 TO 10 DO rw; { Read over old stack size } FOR i := 1 TO 4 DO READ( oldfile, byte ); { Calculate the 4 bytes of the stacksize given } byte0 := stacksize DIV f; byte1 := (stacksize MOD f) DIV ffff ; byte2 := (stacksize MOD ffff ) DIV ff ; byte3 := stacksize MOD ff ; { Write out new stack size } WRITE( newfile, byte0, byte1, byte2, byte3 ); { Copy the rest of the oldfile to the newfile } WHILE NOT EOF( oldfile ) DO rw; END. { Pascal constants include file for the Metacomco Graphics Interface The following constant definitions can be used with the Pascal graphics interface procedures and routines. These constants should be tailored to the application to save compilation space and time. } { EVENT Manager definitions } { multi flags } MU_KEYBD = 1; MU_BUTTON = 2; MU_M1 = 4; MU_M2 = 8; MU_MESAG = 16; MU_TIMER = 32; { keyboard states } K_RSHIFT = 1; K_LSHIFT = 2; K_CTRL = 4; K_ALT = 8; { message values } MN_SELECTED =10; WM_REDRAW =20; WM_TOPPED =21; WM_CLOSED =22; WM_FULLED =23; WM_ARROWED =24; WM_HSLID =25; WM_VSLID =26; WM_SIZED =27; WM_MOVED =28; WM_NEWTOP =29; AC_OPEN =40; AC_CLOSE =41; { FORM Manager Definitions } { Form flags } FMD_START = 0; FMD_GROW = 1; FMD_SHRINK = 2; FMD_FINISH = 3; { RESOURCE Manager Definitions } { data structure types } R_TREE = 0; R_OBJECT = 1; R_TEDINFO = 2; R_ICONBLK = 3; R_BITBLK = 4; R_STRING = 5; { gets pointer to free strings } R_IMAGEDATA = 6; { gets pointer to free images } R_OBSPEC = 7; R_TEPTEXT = 8; { sub ptrs in TEDINFO } R_TEPTMPLT = 9; R_TEPVALID = 10; R_IBPMASK = 11; { sub ptrs in ICONBLK } R_IBPDATA = 12; R_IBPTEXT = 13; R_BIPDATA = 14; { sub ptrs in BITBLK } R_FRSTR = 15; { gets addr of ptr to free strings } R_FRIMG = 16; { gets addr of ptr to free images } { WINDOW Manager Definitions } { Window Attributes } NAME = 1; CLOSER = 2; FULLER = 4; MOVER = 8; INFO = 16; SIZER = 32; UPARROW = 64; DNARROW = 128; VSLIDE = 256; LFARROW = 512; RTARROW = 1024; HSLIDE = 2048; { wind_create flags } WC_BORDER = 0; WC_WORK = 1; { wind_get flags } WF_KIND = 1; WF_NAME = 2; WF_INFO = 3; WF_WORKXYWH = 4; WF_CURRXYWH = 5; WF_PREVXYWH = 6; WF_FULLXYWH = 7; WF_HSLIDE = 8; WF_VSLIDE = 9; WF_TOP = 10; WF_FIRSTXYWH = 11; WF_NEXTXYWH = 12; WF_RESVD = 13; WF_NEWDESK = 14; WF_HSLSIZE = 15; WF_VSLSIZE = 16; WF_SCREEN = 17; { update flags } END_UPDATE = 0; BEG_UPDATE = 1; END_MCTRL = 2; BEG_MCTRL = 3; { GRAPHICS Manager Definitions } { Mouse Forms } ARROW = 0; TEXT_CRSR = 1; BUSYBEE = 2; POINT_HAND = 3; FLAT_HAND = 4; THIN_CROSS = 5; THICK_CROSS = 6; OUTLN_CROSS = 7; USER_DEF = 255; M_OFF = 256; M_ON = 257; { polyline end styles } SQUARED = 0; ARROWED = 1; ROUNDED = 2; { polyline line styles } SOLID = 1; LDASHED = 2; DOTTED = 3; DASHDOT = 4; DASHED = 5; DASHDOTDOT = 6; { interior types for filled areas } HOLLOW = 0; { SOLID 1 same as above } PATTERN = 2; HATCH = 3; UDFILLSTYLE= 4; { a selection of fill patterns } DOTS = 3; GRID = 6; BRICKS = 9; WEA VE = 16; { text special effects } THICKENED = 1; SHADED = 2; SKEWED = 4; UNDERLINED = 8; OUTLINE = 16; SHADOW = 32; { gem writing modes } MD_REPLACE = 1; MD_TRANS = 2; MD_XOR = 3; MD_ERASE = 4; { bit blt rules } ALL_WHITE = 0; S_AND_D = 1; S_AND_NOTD = 2; S_ONLY = 3; NOTS_AND_D = 4; D_ONLY = 5; S_XOR_D = 6; S_OR_D = 7; NOT_SORD = 8; NOT_SXORD = 9; D_INVERT = 10; NOT_D = 11; S_OR_NOTD = 12; NOTS_OR_D = 13; NOT_SANDD = 14; ALL_BLACK = 15; { Graphic types of objects } G_BOX = 20; G_TEXT = 21; G_BOXTEXT = 22; G_IMAGE = 23; G_USERDEF = 24; G_IBOX = 25; G_BUTTON = 26; G_BOXCHAR = 27; G_STRING = 28; G_FTEXT = 29; G_FBOXTEXT= 30; G_ICON = 31; G_TITLE = 32; { Object flags } NONE = 0; SELECTABLE = 1; DEFAULT = 2; EXIT = 4; EDITABLE = 8; RBUTTON = 16; LASTOB = 32; TOUCHEXIT = 64; HIDETREE = 128; INDIRECT = 256; { Object states } NORMAL = 0; SELECTED = 1; CROSSED = 2; CHECKED = 4; DISABLED = 8; OUTLINED = 16; SHADOWED = 32; { Object colour numbers } WHITE = 0; BLACK = 1; RED = 2; GREEN = 3; BLUE = 4; CYAN = 5; YELLOW = 6; MAGENTA = 7; LWHITE = 8; LBLACK = 9; LRED = 10; LGREEN = 11; LBLUE = 12; LCYAN = 13; LYELLOW = 14; LMAGENTA = 15; { editable text field definitions } EDSTART = 0; EDINIT = 1; EDCHAR = 2; EDEND = 3; { editable text justification } TE_LEFT = 0; TE_RIGHT = 1; TE_CNTR = 2; n{ This is a Pascal include file for the Metacomco Graphics Interface Routines. The routines defined in the files GRRTNS01.INC to GRRTNS18.INC allow the graphics interface routines to be called from Pascal. This is the first of the 18 include files for the interface procedures and functions. The relevant files should be included in your Pascal program. There are two associated include files; GRCONSTS.INC defines constants for use in passing to these routines and GRTYPES.INC defines types needed in the definitions in these routines. The assembler sources of these routines are supplied on the distribution disks (in the files LIB0.ASM to LIB18.ASM) and these sources describe the parameters required. Most of the parameters needed by these routines have simple types but there are several common exceptions which require array types. L} { Routines in Library 1 } { = } PROCEDURE v_opnvwk( VAR workin : intin; VAR handle : INTEGER; VAR workout : intout ); EXTERNAL; PROCEDURE v_clsvwk( handle : INTEGER ); EXTERNAL; PROCEDURE v_clrwk( handle : INTEGER ); EXTERNAL; FUNCTION vst_load_fonts( handle, select : INTEGER ) : INTEGER; EXTERNAL; PROCEDURE vst_unload_fonts( handle, select : INTEGER ); EXTERNAL; PROCEDURE vs_clip( handle, flag : INTEGER; VAR workin : intin ); EXTERNAL; E{ Routines in Library 2 } { = } PROCEDURE v_pline( handle, count : INTEGER; VAR workin : intin ); EXTERNAL; PROCEDURE v_pmarker( handle, count : INTEGER; VAR workin : intin ); EXTERNAL; PROCEDURE v_gtext( handle, x, y : INTEGER; VAR string : gtextstr ); EXTERNAL; PROCEDURE v_fillarea( handle, count : INTEGER; VAR workin : intin ); EXTERNAL; PROCEDURE v_cellarray( handle : INTEGER; VAR coords : coord4; rowlen, rowsize, nrows, mode : INTEGER;  VAR workin : intin ); EXTERNAL; PROCEDURE v_contourfill( handle, x, y, colour : INTEGER ); EXTERNAL; PROCEDURE vr_recfl( handle : INTEGER; VAR coords : coord4 ); EXTERNAL; PROCEDURE v_bar( handle : INTEGER; VAR coords : coord4); EXTERNAL; PROCEDURE v_arc( handle, x, y, radius, starta, stopa : INTEGER ); EXTERNAL; PROCEDURE v_pieslice( handle, x, y, radius, starta, stopa : INTEGER ); EXTERNAL; PROCEDURE v_circle( handle, x, y, radius : INTEGER ); EXTERNAL; PROCEDURE v_ellarc( handle, x, y, xradius, yradius, starta, stopa : INTEGER ); EXTERNAL; PROCEDURE v_ellpie( handle, x, y, xradius, yradius, starta, stopa : INTEGER ); EXTERNAL; PROCEDURE v_ellipse( handle, x, y, xradius, yradius : INTEGER ); EXTERNAL; PROCEDURE v_rbox( handle : INTEGER; VAR coords : coord4 ); EXTERNAL; PROCEDURE v_rfbox( handle : INTEGER; VAR coords : coord4 ); EXTERNAL; PROCEDURE v_justified( handle, x, y : INTEGER; VAR string : juststr; length, wordsp, charsp : INTEGER ); EXTERNAL; { Routines in Library 3 } { = } PROCEDURE vswr_mode( handle, mode : INTEGER ); EXTERNAL; PROCEDURE vs_color( handle, colour : INTEGER; rgb : rgbarray ); EXTERNAL; FUNCTION vsl_type( handle, style : INTEGER ) : INTEGER; EXTERNAL; PROCEDURE vsl_udsty( handle, mask : INTEGER ); EXTERNAL; FUNCTION vsl_width( handle, width : INTEGER ) : INTEGER; EXTERNAL; FUNCTION vsl_color( handle, colour : INTEGER ) : INTEGER; EXTERNAL; PROCEDURE vsl_ends( handle, starts, ends : INTEGER ); EXTERNAL; FUNCTION vsm_type( handle, mtype : INTEGER ) : INTEGER; EXTERNAL; FUNCTION vsm_height( handle, height : INTEGER ) : INTEGER; EXTERNAL; FUNCTION vsm_color( handle, colour : INTEGER ) : INTEGER; EXTERNAL; PROCEDURE vst_height( handle, height : INTEGER; VAR char_w, char_h, cell_w, cell_h : INTEGER ); EXTERNAL; PROCEDURE vst_point( handle, height : INTEGER; char_w, char_h, cell_w, cell_h : INTEGER ); EXTERNAL; FUNCTION vst_rotation( handle, angle : INTEGER ) : INTEGER; EXTERNAL; FUNCTION vst_font( handle, font : INTEGER ) : INTEGER; EXTERNAL; FUNCTION vst_color( handle, colour : INTEGER ) : INTEGER; EXTERNAL; FUNCTION vst_effects( handle, effect : INTEGER ) : INTEGER; EXTERNAL; PROCEDURE vst_alignment( handle, hin, vin : INTEGER; VAR hactual, vactual : INTEGER ); EXTERNAL; FUNCTION vsf_interior( handle, style : INTEGER ) : INTEGER; EXTERNAL; FUNCTION vsf_style( handle, style : INTEGER ) : INTEGER; EXTERNAL; FUNCTION vsf_color( handle, colour : INTEGER ) : INTEGER; EXTERNAL; FUNCTION vsf_perimeter( handle, flag : INTEGER ) : INTEGER; EXTERNAL; PROCEDURE vsf_udpat( handle : INTEGER; pattern : patternarray; planes : INTEGER ); EXTERNAL; PROCEDURE vro_cpyfm( handle, mode : INTEGER; VAR coords : coord8; VAR source, dest : recttype ); EXTERNAL; V{ Routines in Library 4 } { = } PROCEDURE vrt_cpyfm( handle, mode : INTEGER; VAR coords : coord8; VAR source, dest : recttype; VAR colour : cols2 ); EXTERNAL; PROCEDURE vr_trnfm( handle : INTEGER; VAR source, dest : recttype ); EXTERNAL; PROCEDURE v_get_pixel( handle, x, y : INTEGER; VAR value, colour : INTEGER ); EXTERNAL; U { Routines in Library 5 } { = } { Note that the Vector Exception Routines are not callable from Pascal since they require the address of a routine. The following four procedures have been omitted; vex_timv, vex_butv, vex_motv and vex_curv } PROCEDURE vsc_form( handle : INTEGER; VAR form : formarray ); EXTERNAL; PROCEDURE v_show_c( handle, reset : INTEGER ); EXTERNAL; PROCEDURE v_hide_c( handle : INTEGER ); EXTERNAL; PROCEDURE vq_mouse( handle : INTEGER; VAR button, x, y : INTEGER ); EXTERNAL; PROCEDURE vq_key_s( handle : INTEGER; VAR status : INTEGER ); EXTERNAL; r{ Routines in Library 6 } { = } PROCEDURE vq_extnd( handle, flag : INTEGER; VAR workout : intout ); EXTERNAL; PROCEDURE vq_color( handle, colour, flag : INTEGER; VAR rgb : rgbarray ); EXTERNAL; PROCEDURE vql_attributes( handle : INTEGER; VAR workout : intout ); EXTERNAL; PROCEDURE vqm_attributes( handle : INTEGER; VAR workout : intout ); EXTERNAL; PROCEDURE vqf_attributes( handle : INTEGER; VAR workout : intout ); EXTERNAL; PROCEDURE vqt_attributes( handle : INTEGER; VAR workout : intout ); EXTERNAL; PROCEDURE vqt_extnt( handle : INTEGER; VAR string : extntstr; VAR workout : intout ); EXTERNAL; FUNCTION vqt_width( handle, char : INTEGER; VAR width, left, right : INTEGER ) : INTEGER; EXTERNAL; FUNCTION vqt_name( handle, id : INTEGER; VAR name : fontnamestr ) : INTEGER; EXTERNAL; FUNCTION vq_cellarray( handle : INTEGER; VAR coords : coord4; rowlen, nrows : INTEGER; VAR rowsize, rowused, err : INTEGER ) : INTEGER; EXTERNAL; PROCEDURE vqin_mode( handle, dev_type : INTEGER; VAR input_mode : INTEGER ); EXTERNAL; PROCEDURE vqt_fontinfo( handle : INTEGER; VAR min, max : INTEGER; VAR dist : distarray; VAR maxwidth : INTEGER; VAR workout : intout ); EXTERNAL; a{ Routines in Library 7 } { = } PROCEDURE vq_chcells( handle : INTEGER; VAR rows, cols : INTEGER ); EXTERNAL; PROCEDURE v_exit_cur( handle : INTEGER ); EXTERNAL; PROCEDURE v_enter_cur( handle : INTEGER ); EXTERNAL; PROCEDURE v_curup( handle : INTEGER ); EXTERNAL; PROCEDURE v_curdown( handle : INTEGER ); EXTERNAL; PROCEDURE v_curright( handle : INTEGER ); EXTERNAL; PROCEDURE v_curleft( handle : INTEGER ); EXTERNAL; PROCEDURE v_curhome( handle : INTEGER ); EXTERNAL; PROCEDURE v_eeos( handle : INTEGER ); EXTERNAL; PROCEDURE v_eeol( handle : INTEGER ); EXTERNAL; PROCEDURE vs_curaddress( handle, row, col : INTEGER ); EXTERNAL; PROCEDURE v_curtext( handle : INTEGER; VAR string : curtextstr ); EXTERNAL; PROCEDURE v_rvon( handle : INTEGER ); EXTERNAL; PROCEDURE v_rvoff( handle : INTEGER ); EXTERNAL; PROCEDURE vq_curaddress( handle : INTEGER; VAR row, col : INTEGER ); EXTERNAL; FUNCTION vq_tabstatus( handle : INTEGER ) : INTEGER; EXTERNAL; PROCEDURE v_dspcur( handle, x, y : INTEGER ); EXTERNAL; PROCEDURE v_rmcur( handle : INTEGER ); EXTERNAL;  { Routines in Library 8 } { = } FUNCTION appl_init : INTEGER; EXTERNAL; FUNCTION appl_read( id, n, buffer : INTEGER ) : INTEGER; EXTERNAL; FUNCTION appl_write( id, n, buffer : INTEGER ) : INTEGER; EXTERNAL; FUNCTION appl_find( VAR name : filenamestr ) : INTEGER; EXTERNAL; PROCEDURE appl_tplay( buffer, n, speed : INTEGER ); EXTERNAL; FUNCTION appl_trecord( buffer, size : INTEGER ) : INTEGER; EXTERNAL; FUNCTION appl_exit : INTEGER; EXTERNAL; { Routines in Library 9 } { = } FUNCTION evnt_keybd : INTEGER; EXTERNAL; FUNCTION evnt_button( clicks, mask, state : INTEGER; VAR x, y, button, kstate : INTEGER ) : INTEGER; EXTERNAL; PROCEDURE evnt_mouse( flags, x, y, w, h : INTEGER; VAR mx, my, button, kstate : INTEGER ); EXTERNAL; PROCEDURE evnt_mesag( buffer : INTEGER ); EXTERNAL; PROCEDURE evnt_timer( low, high : INTEGER ); EXTERNAL; FUNCTION evnt_multi( flags, clicks, mask, state, flags1, x1, y1, w1, h1, flags2, x2, y2, w2, h2, buffer, low, high : INTEGER; VAR x, y, button, kstate, keycode, n : INTEGER ) : INTEGER; EXTERNAL; FUNCTION evnt_dclick( new, mask : INTEGER ) : INTEGER; EXTERNAL; { Routines in Library 10 } { = } FUNCTION menu_bar( VAR tree : treetype; flag : INTEGER ) : INTEGER; EXTERNAL; FUNCTION menu_icheck( VAR tree : treetype; item, flag : INTEGER ) : INTEGER; EXTERNAL; FUNCTION menu_ienable( VAR tree : treetype; item, flag : INTEGER ) : INTEGER; EXTERNAL; FUNCTION menu_tnormal( VAR tree : treetype; title, flag : INTEGER ) : INTEGER; EXTERNAL; FUNCTION menu_text( VAR tree : treetype; item : INTEGER; VAR string : menutextstr ) : INTEGER; EXTERNAL; FUNCTION menu_register( id : INTEGER; VAR string : menuregstr ) : INTEGER; EXTERNAL;  { Routines in Library 11 } { = } FUNCTION objc_add( VAR tree : treetype; VAR parent, child : nodetype ) : INTEGER; EXTERNAL; FUNCTION objc_delete( VAR tree : treetype; VAR object : nodetype ) : INTEGER; EXTERNAL; FUNCTION objc_draw( VAR tree : treetype; VAR object : nodetype; depth, x, y, w, h : INTEGER ) : INTEGER; EXTERNAL; FUNCTION objc_find( VAR tree : treetype; VAR object : nodetype; depth, x, y : INTEGER ) : INTEGER; EXTERNAL; FUNCTION objc_offset( VAR tree : treetype; VAR object : nodetype; VAR x, y : INTEGER ) : INTEGER; EXTERNAL; FUNCTION objc_order( VAR tree : treetype; VAR object : nodetype; position : INTEGER ) : INTEGER; EXTERNAL; FUNCTION objc_edit( VAR tree : treetype; VAR object : nodetype; char, index, edtype : INTEGER; VAR newindex : INTEGER ) : INTEGER; EXTERNAL; 1 FUNCTION objc_change( VAR tree : treetype; VAR object : nodetype; dummy, x, y, w, h, state, redraw : INTEGER ) : INTEGER; EXTERNAL; ^{ Routines in Library 12 } { = } FUNCTION form_do( VAR tree : treetype; VAR object : nodetype ) : INTEGER; EXTERNAL; FUNCTION form_dial( flag, x1, y1, w1, h1, x2, y2, w2, h2 : INTEGER ) : INTEGER; EXTERNAL; FUNCTION form_alert( defbutton : INTEGER; VAR string : formalertstr ) : INTEGER; EXTERNAL; FUNCTION form_error( n : INTEGER ) : INTEGER; EXTERNAL; PROCEDURE form_center( VAR tree : treetype; VAR x, y, w, h : INTEGER ); EXTERNAL; { Routines in Library 13 } { = } FUNCTION graf_rubberbox( x, y, w, h : INTEGER; VAR fw, fh : INTEGER ) : INTEGER; EXTERNAL; FUNCTION graf_dragbox( bw, bh, bx, by, x, y, w, h : INTEGER; VAR fx, fy : INTEGER ) : INTEGER; EXTERNAL; FUNCTION graf_movebox( w, h, sx, sy, dx, dy : INTEGER ) : INTEGER; EXTERNAL; FUNCTION graf_growbox( sx, sy, sw, sh, fx, fy, fw, fh : INTEGER ) : INTEGER; EXTERNAL; FUNCTION graf_shrinkbox( fx, fy, fw, fh, sx, sy, sw, sh : INTEGER ) : INTEGER; EXTERNAL; FUNCTION graf_watchbox( VAR tree : treetype; VAR object : nodetype; instate, outstate : INTEGER ) : INTEGER; EXTERNAL; FUNCTION gerf_slide( VAR tree : treetype; VAR parent, object : nodetype; direction : INTEGER ) : INTEGER; EXTERNAL; FUNCTION graf_handle( VAR cw, ch, bw, bh : INTEGER ) : INTEGER; EXTERNAL; FUNCTION graf_mouse( code : INTEGER; VAR buffer : mousedef ) : INTEGER; EXTERNAL; PROCEDURE graf_mkstate( VAR x, y, button, kstate : INTEGER ); EXTERNAL; v{ Routines in Library 14 } { = } FUNCTION scrp_read( VAR buffer : scrapdir ) : INTEGER; EXTERNAL; FUNCTION scrp_write( VAR buffer : scrapdir ) : INTEGER; EXTERNAL; ;{ Routines in Library 15 } { = } FUNCTION fsel_input( VAR pathspec, filename : fselstr; VAR button : INTEGER ) : INTEGER; EXTERNAL; H{ Routines in Library 16 } { = } FUNCTION wind_create( flags, x, y, w, h : INTEGER ) : INTEGER; EXTERNAL; FUNCTION wind_open( wid, x, y, w, h : INTEGER ) : INTEGER; EXTERNAL; FUNCTION wind_close( wid : INTEGER ) : INTEGER; EXTERNAL; FUNCTION wind_delete( wid : INTEGER ) : INTEGER; EXTERNAL; FUNCTION wind_get( wid, field : INTEGER; VAR p1, p2, p3, p4 : INTEGER ) : INTEGER; EXTERNAL; FUNCTION wind_set( wid, field, p1, p2, p3, p4 : INTEGER ) : INTEGER; EXTERNAL; FUNCTION wind_find( x, y : INTEGER ) : INTEGER; EXTERNAL; FUNCTION wind_update( flag : INTEGER ) : INTEGER; EXTERNAL; FUNCTION wind_calc( mode, flags, ix, iy, iw, ih : INTEGER; VAR ox, oy, ow, oh : INTEGER ) : INTEGER; EXTERNAL; { Routines in Library 17 } { = } FUNCTION rsrc_load( VAR filename : rsrcloadstr ) : INTEGER; EXTERNAL; FUNCTION rsrc_free : INTEGER; EXTERNAL; FUNCTION rsrc_gaddr( typecode, index : INTEGER; VAR address : resourceitem ) : INTEGER; EXTERNAL; FUNCTION rsrc_saddr( typecode, index : INTEGER; VAR address : resourceitem ) : INTEGER; EXTERNAL; FUNCTION rsrc_obfix( VAR tree : treetype; VAR object : nodetype ) : INTEGER; EXTERNAL; { Routines in Library 18 } { = } FUNCTION shel_read( VAR command, tail : commandstr ) : INTEGER; EXTERNAL; FUNCTION shel_write( exec, graf, gem : INTEGER; VAR command, tail : commandstr ) : INTEGER; EXTERNAL; FUNCTION shel_find( VAR buffer : shelfindstr ) : INTEGER; EXTERNAL; FUNCTION shel_envrn( pvalue : INTEGER; VAR buffer : shelenvrnstr ) : INTEGER; EXTERNAL; > U{ This is the Pascal types include file for the Metacomco Graphics Interface This file contains a list of the types that need to be defined in order to use the Pascal include file containing the graphics procedure and function definitions. This file should be tailored to meet the requirements of the application program that includes the graphics routines. Several of the arrays listed below require the user to fill in the upper bound (this has been marked as 'n'). This value will depend upon the particular application. See the sources of the interface programs on the disks supplied for more details. *} { Two very common arrays that are used by lots of routines } intin = ARRAY[ 1 .. 11] OF INTEGER; intout = ARRAY[ 1 .. 57] OF INTEGER; { The next 14 'string' arrays are used by the indicated routines } gtextstr = PACKED ARRAY[ 1 .. n ] OF CHAR; { v_gtext } fontnamestr = PACKED ARRAY[ 1 .. n ] OF CHAR; { vqt_name } juststr = PACKED ARRAY[ 1 .. n ] OF CHAR; { v_justified } curtextstr = PACKED ARRAY[ 1 .. n ] OF CHAR; { v_curtext } extntstr = PACKED ARRAY[ 1 .. n ] OF CHAR; { vqt_extnt } filenamestr = PACKED ARRAY[ 1 .. 8 ] OF CHAR; { appl_find } menutextstr = PACKED ARRAY[ 1 .. n ] OF CHAR; { menu_text } menuregstr = PACKED ARRAY[ 1 .. n ] OF CHAR; { menu_register } formalertstr = PACKED ARRAY[ 1 .. n ] OF CHAR; { form_alert } fselstr = PACKED ARRAY[ 1 .. n ] OF CHAR; { fsel_input } rsrcloadstr = PACKED ARRAY[ 1 .. n ] OF CHAR; { rsrc_load } commandstr = PACKED ARRAY[ 1 .. n ] OF CHAR; { shel_read } shelfindstr = PACKED ARRAY[ 1 .. n ] OF CHAR; { shel_find } shelenvrnstr = PACKED ARRAY[ 1 .. n ] OF CHAR; { shel_envrn } { The final 12 arrays are used by the indicated routines } cols2 = ARRAY[ 1 .. 2 ] OF INTEGER; { vrt_cpyfm } coord4 = ARRAY[ 1 .. 4 ] OF INTEGER; { vq_cellarray, } coord8 = ARRAY[ 1 .. 8 ] OF INTEGER; { vro_cpyfm vrt_cpyfm } rgbarray = ARRAY[ 1 .. 3 ] OF INTEGER; { vs_colour vq_colour } patternarray = ARRAY[ 1 .. n ] OF INTEGER; { vsf_updat } formarray = ARRAY[ 1 .. 37] OF INTEGER; { vsc_form } distarray = ARRAY[ 1 .. 5 ] OF INTEGER; { vqt_fontinfo } treetype = ARRAY[ 1 .. n ] OF INTEGER; { lots } nodetype = ARRAY[ 1 .. n ] OF INTEGER; { lots } recttype = ARRAY[ 1 .. n ] OF INTEGER; { vro_cpyfm vrt_cpyfm 7vr_trnfm } mousedef = ARRAY[ 1 .. n ] OF INTEGER; { graf_mouse } scrapdir = ARRAY[ 1 .. n ] OF INTEGER; { scrp_read scrp_write } resourceitem = ARRAY[ 1 .. n ] OF INTEGER; { rsrc_gaddr rsrc_saddr} T*H * F* * Metacomco interface library to the GEM system * * F* * The Metacomco mechanism for calling C is to place all arguments on * * the SP stack in reverse order. The arguments are all passed as * * longwords. Some C compilers (eg DRI C => graphics and GEM) requir e * * word arguments. This library provides the necessary interface code. * * F* * Section 10: AES Menu Functions $* * F* * (C) Copyright 1985 METACOMCO plc. All Rights reserved. * *H INCLUDE "aesmacs" PAGE *H * Display or erase the menu bar *H * rc = menu_bar( tree, flag ) * * long tree The address of the object tree for this menu * long flag 0 to erase bar, 1 to show it * long rc >0 if no error *H LIBFNR menu_bar,2 WORD II,0 LONG AI,0 SETPTS 1,1,1 CALLW menu_bar,30 RETURN IO,0 *H * Display or erase a check mark next to menu item *H * rc = menu_icheck( tree, item, flag ) * * long tree The address of the object tree for this menu * long item Number identifying the menu item * long flag 0 to erase check mark, 1 to add one * long rc >0 if no error *H LIBFNR menu_icheck,3 WORD II,1 WORD II,0 LONG AI,0 SETPTS 2,1,1 CALLW menu_icheck,31 RETURN IO,0 *H * Enable or disable a menu item *H * rc = menu_ienable( tree, item, flag ) * * long tree The address of the object tree for this menu * long item Number identifying the menu item * long flag 0 to disable item, 1 to enable it * long rc >0 if no error *H LIBFNR menu_ienable,3 WORD II,1 WORD II,0 LONG AI,0 SETPTS 2,1,1 CALLW menu_ienable,32 RETURN IO,0 *H * Display menu title in normal or reverse video *H * rc = menu_tnormal( tree, title, flag ) * * long tree The address of the object tree for this menu * long title Number identifying the menu * long flag 0 for reverse video, 1 for normal * long rc >0 if no error *H LIBFNR menu_tnormal,3 WORD II,1 WORD II,0 LONG AI,0 SETPTS 2,1,1 CALLW menu_tnormal,33 RETURN IO,0 *H * Change the text of a menu item *H * rc = menu_text( tree, item, text ) * * long tree The address of the object tree for this menu * long item Number identifying the menu item * byte *text The new text for the item. This must be the same * length as the text it is replacing. * long rc >0 if no error *H LIBFNR menu_text,3 LONG AI,1 WORD II,0 LONG AI,0 SETPTS 1,1,2 CALLW menu_text,34 RETURN IO,0 *H * Install desk accessory menu item string on the Desk menu *H * menuid = menu_register( id, text ) * * long id The application id for this program (see appl_init). * byte *text The string to be placed in the Desk menu. * long menuid The menu item id (0-5) or -1 for error. *H LIBFNR menu_register,2 LONG AI,0 WORD II,0 SETPTS 1,1,1 CALLW menu_register,35 RETURN IO,0 END *H * F* * Metacomco interface library to the GEM system * * F* * The Metacomco mechanism for calling C is to place all arguments on * * the SP stack in reverse order. The arguments are all passed as * * longwords. Some C compilers (eg DRI C => graphics and GEM) require * * word arguments. This library provides the necessary interface code. * * F* * Section 11: AES Object functions "* * F* * (C) Copyright 1985 METACOMCO plc. All Rights reserved. * *H INCLUDE "aesmacs" PAGE *H * Add an object to the object tree *H * rc = objc_add( tree, parent, child ) * * long tree Address of object tree containing parent and child * long parent The object to be added to * long child The object to add * long rc >0 if no error *H LIBFNR objc_add,3 WORD II,1 WORD II,0 LONG AI,0 SETPTS 2,1,1 CALLW objc_add,40 RETURN IO,0 *H * Delete an object from the object tree *H * rc = objc_delete( tree, object ) * * long tree Address of object tree containing object * long object The object to be deleted * long rc >0 if no error *H LIBFNR objc_delete,2 WORD II,0 LONG AI,0 SETPTS 1,1,1 CALLW objc_delete,41 RETURN IO,0 *H * Redraw the objects in a subtree using specified clip rectangle *H * rc = objc_draw( tree, object, depth, x, y, w, h ) * * long tree Address of object tree * long object The starting object in the tree * long depth The number of levels to be drawn (1 for this alone) * long x,y,w,h Coordinates, width and height of clip rectangle * long rc >0 if no error *H LIBFNR objc_draw,7 WORD II,5 WORD II,4 WORD II,3 WORD II,2 WORD II,1 WORD II,0 LONG AI,0 SETPTS 6,1,1 CALLW objc_draw,42 RETURN IO,0 *H * Find an object under the mouse cursor *H * obj = objc_find( tree, object, depth, x, y ) * * long tree Address of object tree to be searched * long object The starting object in the tree * long depth The number of levels to be searched (1 for this alone) * long x,y Coordinates of mouse cursor * long obj Object number of found object, or -1 if not found *H LIBFNR objc_find,5 WORD II,3 WORD II,2 WORD II,1 WORD II,0 LONG AI,0 SETPTS 4,1,1 CALLW objc_find,43 RETURN IO,0 *H * Enquire the position of an object *H * rc = objc_offset( tree, object, &x, &y ) * * long tree Address of object tree containing object * long object The object to be located * word x,y The coordinates of the object * long rc >0 if no error *H LIBFNR objc_offset,4 LPOINTW y LPOINTW x SETEXIT WORD II,0 LONG AI,0 SETPTS 1,3,1 CALLW objc_offset,44 SPOINTW IO,1,x SPOINTW IO,2,y RETURN IO,0 *H * Move an object to a new position in parent's list of children *H * rc = objc_order( tree, object, position ) * * long tree Address of object tree * long object The object to be moved * long position Place to put object. This is 0 for the bottom level, * 1 for one level up from bottom and so on. The value * -1 can be used to indicate the top of the tree. * long rc >0 if no error *H LIBFNR objc_order,3 WORD II,1 WORD II,0 LONG AI,0 SETPTS 2,1,1 CALLW objc_order,45 RETURN IO,0 *H * Allow the user to edit text within an object *H * rc = objc_edit( tree, object, char, index, type, &newindex ) * * long tree Address of object tree * long object The object containing the text to be edited * long char The character typed by the user * long index Index of next character position in string * long type The type of editing to be performed * 1 Combine values, turn cursor on * 2 Validate char, update text and display it * 3 Turn off cursor * word newindex The new character position in the string * long rc >0 if no error *H LIBFNR objc_exit,6 LPOINTW newindex WORD II,3 WORD II,2 WORD II,1 WORD II,0 LONG AI,0 SETPTS 4,2,1 CALLW objc_edit,46 SPOINTW IO,1,newindex RETURN IO,0 *H * Change the state of an object, and possibly redraw it *H * rc = objc_change( tree, object, dummy, x, y, w, h, state, redraw ) * * long tree Address of object tree * long object The object to be changed * long dummy A reserved value which must be zero * long x,y,w,h Coordinates, width and height of clip rectangle * long state The value to which the ob_state field must be set * long redraw Set to 1 if the object is to be redrawn; 0 otherwise * long rc >0 if no error *H LIBFNR objc_change,9 WORD II,7 WORD II,6 WORD II,5 WORD II,4 WORD II,3 WORD II,2 $ WORD II,1 WORD II,0 LONG AI,0 SETPTS 8,1,1 CALLW objc_change,47 RETURN IO,0 END 8*H * F* * Metacomco interface library to the GEM system * * F* * The Metacomco mechanism for calling C is to place all arguments on * * the SP stack in reverse order. The arguments are all passed as * * longwords. Some C compilers (eg DRI C => graphics and GEM) require * * word arguments. This library provides the necessary interface code. * * F* * Section 12: AES Form library &* * F* * (C) Copyright 1985 METACOMCO plc. All Rights reserved. * *H INCLUDE "aesmacs" PAGE *H * Start an interaction with the user *H * obj = form_do( tree, object ) * * long tree The object tree that draws this form * long object The starting object which is to be made active when * the form is displayed. The object must be editable text, * or else pass -1 if no suitable object exists. * long obj The object number which caused the interaction to finish. *H LIBFNR form_do,2 WORD II,0 LONG AI,0 SETPTS 1,1,1 CALLW form_do,50 RETURN IO,0 *H * Handle dialogue boxes *H * rc = form_dial( flag, x1, y1, w1, h1, x2, y2, w2, h2 ) * * long flag Specifies the action to be taken as follows: * 0 Reserve screen space for dialog box * 1 Draw an expanding box from x1 to x2 * 2 Draw a shrinking box from x2 to x1 * 3 Terminate dialogue and send redraw message to myself * long x1,y1,w1,h1 Coordinates, width and height of smallest box size * long x2,y2,w2,h2 Coordinates, width and height of largest box size * long rc >0 if no error *H LIBFNR form_dial,9 WORD II,8 WORD II,7 WORD II,6 WORD II,5 WORD II,4 WORD II,3 WORD II,2 WORD II,1 WORD II,0 SETPTS 9,1,1 CALLW form_dial,51 RETURN IO,0 *H * Display an alert message on the screen *H * button = form_alert( defbutton, text ) * * long defbutton The default exit button for the form. This is 0 for * no exit button, 1 for the first and so on. * byte *text The text to be displayed * long button The exit button selected by the user (as above). **+ LIBFNR form_alert,2 LONG AI,0 WORD II,0 SETPTS 1,1,1 CALLW form_alert,52 RETURN IO,0 *H * Display an alert according to the error number *H * button = form_error( n ) * * long n The error number (DOS error code) * long button The exit button selected by the user *H LIBFNR form_error,1 WORD II,0 SETPTS 1,1,0 CALLW form_error,53 RETURN IO,0 *H * Calculate the position of a form centered on the screen *H * form_center( tree, &x, &y, &w, &h ) * * long tree The object tree that draws this form * word x,y,w,h The coordinates, width and height of where the form * should be displayed in order to centre it. *H LIBFNR form_center,5 LPOINTW h LPOINTW w LPOINTW y LPOINTW x SETEXIT LONG AI,0 SETPTS 0,5,1 CALLW form_center,54 SPOINTW IO,1,x SPOINTW IO,2,y SPOINTW IO,3,w SPOINTW IO,4,h RETURN IO,0 END *H * F* * Metacomco interface library to the GEM system * * F* * The Metacomco mechanism for calling C is to place all arguments on * * the SP stack in reverse order. The arguments are all passed as * * longwords. Some C compilers (eg DRI C => graphics and GEM) require * * word arguments. This library provides the necessary interface code. * * F* * Section 13: AES Graphics Library "* * F* * (C) Copyright 1985 METACOMCO plc. All Rights reserved. * *H INCLUDE "aesmacs" PAGE *H * Draw a rubber box, expanding and contracting as user drags it *H * rc = graf_rubberbox( x, y, w, h, &fw, &fh ) * * long x,y Coordinates of box's upper left corner * long w,h Minimum width and height of box * word fw,fh Final width and height when the user has finished * long rc >0 if no error *H LIBFNR graf_ruberbox,6 LPOINTW fh LPOINTW fw SETEXIT WORD II,3 WORD II,2 WORD II,1 WORD II,0 SETPTS 4,3,0 CALLW graf_rubberbox,70 SPOINTW IO,1,fw SPOINTW IO,2,fh RETURN IO,0 *H * Allow the user to drag a box within a rectangle *H * rc = graf_dragbox( bw, bh, bx, by, x, y, w, h, &fx, &fy ) * * long bw,bh Width and height of box to be dragged * long bx,by Coordinates of box's upper left corner * long x,y,w,h Coordinates, width and height of bounding rectangle * word fx,fy Final coordinates when the user has finished * long rc >0 if no error *H LIBFNR graf_dragbox,10 LPOINTW fy LPOINTW fx SETEXIT WORD II,7 WORD II,6 WORD II,5 WORD II,4 WORD II,3 WORD II,2 WORD II,1 WORD II,0 SETPTS 8,3,0 CALLW graf_dragbox,71 SPOINTW IO,1,fw SPOINTW IO,2,fh RETURN IO,0 *H * Draw a box moving from one place to another *H * rc = graf_movebox( w, h, sx, sy, dx, dy ) * * long w,h Width and height of box * long sx,sy Source coordinates of box's upper left corner * long dx,dy Destination coordinates * long rc >0 if no error *H LIBFNR graf_movebox,6 WORD II,5 WORD II,4 WORD II,3 WORD II,2 WORD II,1 WORD II,0 SETPTS 6,1,0 CALLW graf_movebox,72 RETURN IO,0 *H * Draw an expanding box outline *H * rc = graf_growbox( sx, sy, sw, sh, fx, fy, fw, fh ) * * long sx,sy,sw,sh Coordinates, width and height of box at start * long fx,fy,fw,fh Coordinates, width and height of box at finish * long rc >0 if no error *H LIBFNR graf_growbox,8 WORD II,7 WORD II,6 WORD II,5 WORD II,4 WORD II,3 WORD II,2 WORD II,1 WORD II,0 SETPTS 8,1,0 CALLW graf_growbox,73 RETURN IO,0 *H * Draw a shrinking box outline *H * rc = graf_shrinkbox( fx, fy, fw, fh, sx, sy, sw, sh ) * * long fx,fy,fw,fh Coordinates, width and height of box at finish * long sx,sy,sw,sh Coordinates, width and height of box at start * long rc >0 if no error *H LIBFNR graf_shrinkbox,8 WORD II,7 WORD II,6 WORD II,5 WORD II,4 WORD II,3 WORD II,2 WORD II,1 WORD II,0 SETPTS 8,1,0 CALLW graf_shrinkbox,74 RETURN IO,0 *H * Track mouse moving in and out of object *H * pos = graf_watchbox( tree, object, instate, outstate ) * * long tree The object tree containing the object * long object The object to be watched * long instate The state of the object when the mouse pointer * is inside it. This uses bits as follows: * 0 Normal * 1 Selected * 2 Crossed * 3 Checked * 4 Disabled * 5 Outlined * 6 Shadowed * long outstate The state of the object when the pointer is outside it. * long pos The position of the mouse when the button was released. * This is 0 if it was outside the object, 1 otherwise. * *8 LIBFNR graf_watchbox,4 WORD II,3 WORD II,2 WORD II,1 LONG AI,0 SETPTS 4,1,1 CALLW graf_watchbox,75 RETURN IO,0 *H * Track a sliding box within a parent *H * pos = graf_slide( tree, parent, object, direction ) * * long tree The object tree containing the objects * long parent The parent object * long object The object to be slid * long direction 0 for horizontal, 1 for vertical * long pos Position of sliding box with respect to parent, in the * range 0-1000. 0 is the left or upper edge of the parent. *H LIBFNR gerf_slide,4 WORD II,2 WORD II,1 WORD II,0 LONG AI,0 SETPTS 3,1,1 CALLW graf_slide,76 RETURN IO,0 *H * Return the VDI handle used by the AES *H * handle = graf_handle( &cw, &ch, &bw, &bh ) * * word cw,ch Width and height of the system font character cell * word bw,bh Width and height of a box large enough to hold a * system font character * long handle The VDI handle which can be used in subsequent calls * to the VDI library. *H LIBFNR graf_handle,4 LPOINTW bh LPOINTW bw LPOINTW ch LPOINTW cw SETEXIT SETPTS 0,5,0 CALLW graf_handle,77 SPOINTW IO,1,cw SPOINTW IO,2,ch SPOINTW IO,3,bw SPOINTW IO,4,bh RETURN IO,0 *H * Change the shape of the mouse cursor *H * rc = graf_mouse( code, buffer ) * * long code A code value for the mouse shape. This is one of * 0 Arrow * 1 Vertical bar (text cursor) * 2 Busy Bee * 3 Pointing hand * 4 Flat hand * 5 Thin cross-hair * 6 Thick cross-hair * 7 Outline cross-hair * 255 Use the shape pointed at by buffer * 256 Hide mouse cursor * 257 Show mouse cursor * long buffer A pointer to a 35 word buffer area holding a suitable * mouse definition. Only used when code is 255. * long rc >0 if no error *H LIBFNR graf_mouse,2 LONG AI,0 WORD II,0 SETPTS 1,1,1 CALLW graf_mouse,78 RETURN IO,0 *H * Enquire the current position of the mouse and keyboard shift keys *H * graf_mkstate( &x, &y, &button, &kstate ) * * word x,y Coordinates of mouse * word button State of mouse buttons. See evnt_button for details. * word kstate State of keyboard shift keys. See evnt_button. *H LIBFNR graf_mkstate,4 LPOINTW kstate LPOINTW button LPOINTW y LPOINTW x SETEXIT SETPTS 0,5,0 CALLW graf_mkstate,79 SPOINTW IO,1,x SPOINTW IO,2,y SPOINTW IO,3,button SPOINTW IO,4,kstate RETURN IO,0 END *H * F* * Metacomco interface library to the GEM system * * F* * The Metacomco mechanism for calling C is to place all arguments on * * the SP stack in reverse order. The arguments are all passed as * * longwords. Some C compilers (eg DRI C => graphics and GEM) require * * word arguments. This library provides the necessary interface code. * * F* * Section 14: AES Scrap Library %* * F* * (C) Copyright 1985 METACOMCO plc. All Rights reserved. * *H INCLUDE "aesmacs" PAGE *H * Read the current scrap directory name *H * rc = scrp_read( buffer ) * * long buffer Pointer to space into which scrap directory name * is to be copied. * long rc >0 if no error *H LIBFNR scrp_read,1 LONG AI,0 SETPTS 0,1,1 CALLW scrp_read,80 RETURN IO,0 *H * Write a new scrap directory name *H * rc = scrp_write( buffer ) * * long buffer Pointer to buffer containing new name * long rc >0 if no error *H LIBFNR scrp_write,1 LONG AI,0 SETPTS 0,1,1 CALLW scrp_write,81 RETURN IO,0 END |*H * F* * Metacomco interface library to the GEM system * * F* * The Metacomco mechanism for calling C is to place all arguments on * * the SP stack in reverse order. The arguments are all passed as * * longwords. Some C compilers (eg DRI C => graphics and GEM) require * * word arguments. This library provides the necessary interface code. * * F* * Section 15: AES File Selector Library * * F* * (C) Copyright 1985 METACOMCO plc. All Rights reserved. * *H INCLUDE "aesmacs" PAGE *H * Display file selector box and allow the user to interact with it *H * rc = fsel_input( pathspec, filename, &button ) * * long pathspec A pointer to 64 bytes containing pathname and wildcard * specification. The filenames which match this are * displayed in a dialog box, and the user may choose one. * When the user finishes the interaction this buffer is * updated with the selection indicated by the user. * long filename A pointer to 16 bytes which specifies the name of the * file to be displayed initially. It may be null. When * the user finishes this buffer will be updated with the * filename selected by the user. * word button This is 0 if the user selected cancel, 1 otherwise. * long rc >0 if no error *H LIBFNR fsel_input,3 LPOINTW button SETEXIT LONG AI,2 LONG AI,0 SETPTS 0,2,2 CALLW fsel_input,90 SPOINTW IO,1,button RETURN IO,0 END *H * F* * Metacomco interface library to the GEM system * * F* * The Metacomco mechanism for calling C is to place all arguments on * * the SP stack in reverse order. The arguments are all passed as * * longwords. Some C compilers (eg DRI C => graphics and GEM) require * * word arguments. This library provides the necessary interface code. * * F* * Section 16: AES Window Functions "* * F* * (C) Copyright 1985 METACOMCO plc. All Rights reserved. * *H INCLUDE "aesmacs" PAGE *H * Create (but do not display) a new window *H * wid = wind_create( flags, x, y, w, h ) * * long flags A flag word indicating options for the window. Bits are * as follows, with a bit set if the window is to have the * feature. * 0 Title bar with name * 1 Close symbol * 2 Full size symbol * 3 Move box symbol * 4 Information line * 5 Resize symbol * 6 Up-arrow symbol * 7 Down-arrow symbol * 8 Vertical slider * 9 Left-arrow symbol * 10 Right-arrow symbol * 11 Horizontal slider * long x,y,w,h Coordinates and size of the maximum window size * long wid A window identifier is returned, or negative if error *H LIBFNR wind_create,5 WORD II,4 WORD II,3 WORD II,2 WORD II,1 WORD II,0 SETPTS 5,1,0 CALLW wind_create,100 RETURN IO,0 *H * Display a window in initial size *H * rc = wind_open( wid, x, y, w, h ) * * long wid The window id from a previous call to wind_create * long x,y,w,h Coordinates and size of the initial window size * long rc >0 if no error *H LIBFNR wind_open,5 WORD II,4 WORD II,3 WORD II,2 WORD II,1 WORD  II,0 SETPTS 5,1,0 CALLW wind_open,101 RETURN IO,0 *H * Close a window. It may be opened again by wind_open if required *H * rc = wind_close( wid ) * * long wid The window id for the window to be closed * long rc >0 if no error *H LIBFNR wind_close,1 WORD II,0 SETPTS 1,1,0 CALLW wind_close,102 RETURN IO,0 *H * Delete a window and free the space used *H * rc = wind_delete( wid ) * * long wid The window id for the window to be deleted. This * id is then no longer valid. * long rc >0 if no error *H LIBFNR wind_delete,1 WORD II,0 SETPTS 1,1,0 CALLW wind_delete,103 RETURN IO,0 *H * Get information about a window *H * rc = wind_get( wid, field, &p1, &p2, &p3, &p4 ) * * long wid The window id for the window. * long field This is a general purpose function. Different results * are returned into the parmameter areas depending on what * is requested via the value of 'field'. The values and * the results are as follows. * 4 Returns x,y,w,h of the work area of the window * 5 Returns x,y,w,h of the entire area of the window * 6 Returns x,y,w,h of the entire area of previous window * 7 Returns x,y,w,h of the entire area of full size window * 8 Returns p1 holding position of horizontal slider. This * is in range 1-1000, with 1 if at left edge. * 9 Returns p1 holding position of vertical slider as above. * 10 Returns p1 holding wid of window that is on top (active) * 11 Returns x,y,w,h of first rectangle in the window's * rectangle list. * 12 Returns x,y,w,h of next rectangle. * 15 Returns p1 as size of horizontal slider. This is in the * range 1-1000, or -1 for the default minimum size. * 16 Returns p1 as size of vertical slider as above. * word p1,p2,p3,p4 Parameter values returned as described above. * long rc >0 if no error *H LIBFNR wind_get,6 LPOINTW p4 LPOINTW p3 LPOINTW p2 LPOINTW p1 SETEXIT WORD II,1 WORD II,0 SETPTS 2,5,0 CALLW wind_get,104 SPOINTW IO,1,p1 SPOINTW IO,2,p2 SPOINTW IO,3,p3 SPOINTW II,4,p4 RETURN IO,0 *H * Set window attributes *H * rc = wind_set( wid, field, p1, p2, p3, p4 ) * * long wid The window id for the window. * long field This is another general purpose function to set various * attributes on a window. Depending on the option the * parameters take different values, as follows. * 1 Window components. p1 is as 'flags' in wind_create. * 2 p1 and p2 (word sized) point to the string for the name * of the window. p1 is the low word, p2 the high. * 3 p1 and p2 (word sized) point to the string to be placed * in the information line. * 5,8,9,10,15,16 set the same options that wind_get returns. * 14 p1,p2 (word sized) point to a new object tree to be * drawn. p3 identifies the starting object. * long p1 ,p2,p3,p4 Parameter values used as described above. * long rc >0 if no error *H LIBFNR wind_set,6 WORD II,5 WORD II,4 WORD II,3 WORD II,2 WORD II,1 WORD II,0 SETPTS 6,1,0 CALLW wind_set,105 RETURN IO,0 *H * Find which window is under the mouse cursor *H * wid = wind_find( x, y ) * * long x,y The coordinates of the mouse. * long wid The window id of the window under the specified position. *H LIBFNR wind_find,2 WORD II,1 WORD II,0 SETPTS 2,1,0 CALLW wind_find,106 RETURN IO,0 *H * Interlock window updates *H * rc = wind_update( flag ) * * long flag A code for the operation required as follows. * 0 Finished updating window, back to normal action. * 1 Starting to update a window. While this is set, * windows cannot be moved or sized and menus are disabled. * 2 Finished handling mouse control * 3 Disable AES handling of mouse, and handle it myself. * long rc >0 if no error *H LIBFNR wind_update,1 WORD II,0 SETPTS 1,1,0 CALLW wind_update,107 RETURN IO,0 *H * Calculate size of work area or entire window *H * rc = wind_calc( mode, flags, ix, iy, iw, ih, &ox, &oy, &ow, &oh ) * * long mode A code for the operation required as follows. * 0 Calculate sizes for entire area * 1 Calculate sizes for work area * long flags The flags given to wind_create specifying the attributes * of the window. * long ix,iy,iw,ih The input coordinates and size of the entire area if * converting to the work area, and of the work area if * converting to the entire area. * word ox,oy,ow,oh The resulting coordinates and size. * long rc >0 if no error *H LIBFNR wind_calc,10 LPOINTW oh LPOINTW ow LPOINTW oy LPOINTW ox SETEXIT WORD II,5 WORD II,4 WORD II,3 WORD II,2 WORD II,1 WORD II,0 SETPTS 6,5,0 CALLW wind_calc,108 SPOINTW IO,1,ox SPOINTW IO,2,oy SPOINTW IO,3,ow SPOINTW IO,4,oh RETURN IO,0 END +*H * F* * Metacomco interface library to the GEM system * * F* * The Metacomco mechanism for calling C is to place all arguments on * * the SP stack in reverse order. The arguments are all passed as * * longwords. Some C compilers (eg DRI C => graphics and GEM) require * * word arguments. This library provides the necessary interface code. * * F* * Section 17: AES Resource Library "* * F* * (C) Copyright 1985 METACOMCO plc. All Rights reserved. * *H INCLUDE "aesmacs" PAGE * *7 * Load resource file into memory after allocating space for it *H * rc = rsrc_load( filename ) * * long filename A pointer to the filename of the resource file * long rc >0 if no error *H LIBFNR rsrc_load,1 LONG AI,0 SETPTS 0,1,1 CALLW rsrc_load,110 RETURN IO,0 *H * Free the memory allocated by rsrc_load *H * rc = rsrc_free( ) * * long rc >0 if no error *H LIBFNR rsrc_free,0 SETPTS 0,1,0 CALLW rsrc_free,111 RETURN IO,0 *H * Get the address in memory of an item in the resource file *H * rc = rsrc_gaddr( type, index, &address ) * * long type The type of data structure, as follows. * 0 Tree * 1 OBJECT structure * 2 TEDINFO structure * 3 ICONBLK structure * 4 BITBLK structure * 5 String * 6 imagedata structure * 7 obspec structure * 8 te_ptext * 9 te_ptmplt * 10 te_pvalid * 11 ib_pmask * 12 ib_pdata * 13 ib_ptext * 14 bi_pdata * 15 ad_frstr - address of pointer to free string * 16 ad_frimg - address of pointer to free image * long index The index of the data structure. * long address The address in memory of the specified structure. * long rc >0 if no error *H LIBFNR rsrc_gaddr,3 LPOINTW address SETEXIT WORD II,1 WORD II,0 SETPTS 2,1,0 SETA CO,4,1 CALLW rsrc_gaddr,112 SPOINTL AO,0,address SETA CO,4,0 RETURN IO,0 *H * Store the address of a data structure *H * rc = rsrc_saddr( type, index, address ) * * long type The type of data structure, as described in rsrc_gaddr. * long index The index of the data structure * long address The address in memory of the specified structure. * long rc >0 if no error *H LIBFNR rsrc_saddr,3 LONG AI,0 WORD II,1 WORD II,0 SETPTS 2,1,1 CALLW rsrc_saddr,113 RETURN IO,0 *H * Convert the size of an object from character coordinates to pixels *H * rc = rsrc_obfix( tree, object ) * * long tree The object tree * long object The object to be converted * long rc >0 if no error *H LIBFNR rsrc_obfix,2 WORD II,0 LONG AI,0 SETPTS 1,1,1 CALLW rsrc_obfix,114 RETURN IO,0 END "*H * F* * Metacomco interface library to the GEM system * * F* * The Metacomco mechanism for calling C is to place all arguments on * * the SP stack in reverse order. The arguments are all passed as * * longwords. Some C compilers (eg DRI C => graphics and GEM) require * * word arguments. This library provides the necessary interface code. * * F* * Section 18: AES Shell Library %* * F* * (C) Copyright 1985 METACOMCO plc. All Rights reserved. * *H INCLUDE "aesmacs" PAGE *H * Get command name and command tail *H * rc = shel_read( command, tail ) * * byte *command Pointer to space to hold command name * byte *tail Pointer to space to hold command tail * long rc >0 if no error *H LIBFNR shel_read,2 LONG AI,2 LONG AI,0 SETPTS 0,1,2 CALLW shel_read,120 RETURN IO,0 *H * Start up another application when this one terminates *H * rc = shel_write( exec, graf, gem, command, tail ) * * long exec 0 to return to OS, 1 to run another application * long graf 0 if new application is graphics, 1 otherwise * long gem 0 if new application is a GEM one, 1 otherwise * byte *command Command to execute next * byte *tail Command tail for next application * long rc >0 if no error *H LIBFNR shel_write,5 LONG AI,2 LONG AI,0 WORD II,2 WORD II,1 WORD II,0 SETPTS 3,1,2 CALLW shel_write,121 RETURN IO,0 *H * Find a filename in the current directory and in a preset list *H * rc = shel_find( buffer ) * * long buffer Initially this contains the filename which is being * searched for. On exit it will contain the full path * name of the file. It must be at least 80 bytes long. * long rc >0 if no error *H LIBFNR shel_find,1 LONG AI,0 SETPTS 0,1,1 CALLW shel_find,124 RETURN IO,0 *H * Search environment for a parameter and return pointer to it *H * rc = shel_envrn( pvalue, buffer ) * * long *pvalue A pointer to longword where the routine will store * the address of the first byte after the parameter. * byte *buffer The parameter string for which this application is * searching. * long rc >0 if no error *H LIBFNR shel_envrn,2 LONG AI,2 LONG AI,0 SETPTS 0,1,3 CALLW shel_envrn,125 RETURN IO,0 END `L`J*_G JgG. g'[Q`GN7|GNNq;Ipd"gI",l `E"R倕$"f$ (R!8mgR&!8"RNk %|g(rN"<p (jN`FreevecJg&A"#fRN"<aglobin pg.(A"$G($#g&#on Ԍ%8`B%|o(`"Nmuldiv (vN *H@HE.,ڀB0H@BE@HEހ݅JjJjރB݃HzJj DaDNuJjD@a DD(Nu b,"BAHA2HG2<HG2HF<BAHA%A("NuJfJk"$/a(%B(Nu*BEHER "BAHA42HB4HG26HGHC6"BAHA:2HE:HC24HC2HB4 "Ğ H@HD"&HCĜBҀ ׀HDB0H@2HA/aҟJ(j٪(SNuaptovec(A" W&C8H#L#p#pNgetbyteԁB0(Nputbyteԁ(Nget2bytԁB20(Nput2bytԁ1(Ngbytes (ABSfNpbytes (A(SfNlevel ")Nlongjum"A(iN(Vdu &B3zk aQ` NP` ````>`X`ZrNrNrNra  dv3  eapgf`Nr|H8$(jp NL``ka`t aHEa``0H<r(jp NL%C0BH!H "p8 NL (iN&_HHN` `>`LЉ**0印XlNurT!|X`H868HAHBBHABA҃LNuJj DaDNuJjDaDDNu b,BAHA&2HAB42HANuc$rNu.BGHGR(*$a$ǂ$&HCHCԃbDbR`NuS`r`rJ_*<&/&Ccgcg cgcgJc& GLo2 n($rb`"r`r`r`r`r` r `r `r &/p,(jNNs8flr0p  ^4_L` xHtad  <0N$v0(#C%jB4BG" p(jN%AG" p(jN%AJgJf"<p(jNrҪ#A#i r#A n$$ԁv0(S$)ԁ(rҩ`")ҩt "*B rҩ&*!8NNqCON:CON: <0N#j4`.")#pJg")p(iN")#pJft"p(j8NN <0Ntr p(j8NJfr`Rtrp(j8N#AtfGt" p(j$Np(jNrgtvfF"`N^C <N$B("B"B(rNNq <NN <$Np(jNN <$Np(jNN <NrNNq <0N`zG" `G" `G" `G" `G," `GH" `zGd" `nG" `bG" `VG" `J"tzlJgvggxogzyg`g g g g gD`#A$p(j(Np(jNNNqFile not found No store leftToo many globalsNot a .RUN fileResident library not loadedCan't rename across devicesFile already open for writingInvalid input/output streamError %N <0NJftr p(j8NJfrNtrp(j8NNNq <0N&trp(j8NNNq <$Np (jN"t fp(jNt f"Np(jN"N <(Ntgv f r p(jN"p(jNN <,N"*$" #p(&)n"pINNrґ$*!( rҪґt0"N <N"*" JntJfF"N"S$*!( rNNq <4N$*&#p( #p8J(l#p( p(i NN")npINBrҪҩrҩ$*!( NNq <0N$*#p(v#CB((0(JlDzg"<p(jNJfrNJg"*p(iN#Arf$*B( $*B(Nrҩ$*!( rҪҩt0"N <(N"*"$0JlDvg"<p(jNJg "*p(QNJg"<p(jNNNq <,NtpI0NNNq <,NtpINNNq <`Nr1p(jtN#AG$ #B BJfrNr#A t1nҩBrҩ `")t! ")!rҩ#Av֩#CB($") p,(j@N#A`rg%|(`r#A$)G & !(`rg%|(`r#A$)G & !(`rg%|(`r#A$)G & !(`rf$)B( $)!(`~rf G " `G " $)!(D`R$")p,IN$)")p,IN%A(JftfN")p@Ip(j8N%A(r(fFN <@N#j `Gh" `Gp" `G|" `G" `G" `G" `G" `vG" `jG" `^G" `RG " `FG " `:G0" `.G@" `"G`" `Gx" ` G" `G" `G" `G" `G" `"t lVvl&xgzg|g~g`gtg vgx gz g`g l(t gvTgxbg g `tg$ g& g( g* g, g.`:#AG$ %BvTfG" p (j$N`RG" p (j$N&)$")p (j(Nrdo$)G" p (j(N l p I N%i p (jNNNqCode %N Bus error Address errorIllegal instructionDivide by zeroCHK instructionTRAPV instructionPrivilege violationTrace exceptionLine 1010 emulatorLine 1111 emulatorUnexpected TRAPStack overflowUndefined global %$%N calledInvalid input streamInvalid output streamFailed to initialiseCoroutine failure Heap corruptIllegal FREEVEC Disk full FATAL ERROR: Stack overflow FATAL ERROR:  @ %X6 <8N$ #B&(08#DG" p(j$N`v")"0pINr:p(jNr#A tn.ҩ#A&)Wl&"08p INrҩ `p(jN#i")$0#B")0fG" p(j$NN Backtrace of stack  End of backtrace <,NpI|NJg"U$Gl" p(j(N`8 o B@lt "p(jN`$Gt" p(j(NN %T7 #X%X8 <$NU#A o $ 䊲mrNr‘JgrN")t0vgrNr#Atn:&)ցx08v n()؁z0HxorNrҩ`rNNq <,NBBBp(jN#At0n v9oT`,p(jNr%A(rN`r#Ap(jN#A`&")t gv gx gz+g|-g`` $r Nҩt0"p(jN#Ar0n t9lJgDp(jNB("N <$Nr p (jNNNq <lND#Av։#CB Jl S#Qt ")ND")ҩ !t ")N#AR Jf#i@tԩ "#AD@nr pT(jNrҩD`Jl r-pL(jN") S#A@Jm ҩt0԰"pP(jNrҩ@`N <,Ntp(jNNNq <0NvoSp(jNr‘G<$ ҂"0p(jNN0123456789ABCDEF <0NvoSp(j Nr‘t0҂p(jNN <0N$v0(#Cr#An $ԁv0("p(jNrҩ`NNq <4Np(j$N"t0&)#Cr#A nr p(jNrҩ `N <xNzډ#E0,~0h#G4r#A84nb$ԁv0(#Cp$(jN#Ap$(j,NtEfr#A")p$(j,NtNfr #A` r;glt gbv=gXR") lrN"ҩ" p$(jN#Argt g vf.p$(jNJgrNJfr=fp$(jNrNrNrNNq <HNBB B&x08#Dr#An$ԁv0(#CJf`t=gx/g z,f")t0 f")NR ")ҩ t0")p,(j0NJgr#Ar,g t=f BB r,fRrҩ`LJf")t0 f")NrNNq <NtN <NN <N$<āv"NNq <N$<ā"NNq2%@UVlm{h$bc6,8h.7/(;<Z [ |= > ? @ ] @A B : `zy89st@&CDEFGH$ITJKxLMk-@,N O#P%3091111 emulator [FPSIM H甀 o0(N`H`:`4````````r`` ` `z`H*B`H**,(<̄gʄf"`FVV„ĄJgDJgD g,vnBD* mJmp`N <D`DpՀ҂glmp` <Dt&<(<mڄӂmڄ` l`Jg k `$ l "<6<` "<6<`rJ@LT`~H)p&V.V(<Ƅg΄gF„Ąg <ރ68HAHB:BCHC҂HAt4BAۂ2HA҃$< mRvӃ mRvނkg`$ l "<6<` "<6<`rJ@L`H&(.<Ƈgȇg?*F‡ćx~m؄ҁQ` ҂n؄ҁQ m`~ه mJgk"`2r`. l "<6<` "<6<`"<6<`J@L`JgAW`v`f@`fv`@`J@`Hj@ A"B&C` Hj@ A"B&"$(.<ȇg<ćf !i`,H(FVV‡Ƈ$(()~JgFFRӇJgFFRׇL` gD~nCDD* 5mJmp`v <~FFӇ``SQpـ׀~ԄӃgmp` <FFRӇ&< (<mڄՇӇmڄ` l`Jkg !B`6 l"<t6<` "<t6< !B` BBJ@LV` Hj@ A"B"$V&(V,<ĆgTȆgNF†Ɔ؂/$(()*< QBB~zHA<BFHFHC0B@H@܀HAHD0B@H@܀HBHC0B@H@܀0܀GHA0܀GHC0܀G1F<HFBEHC0܀GHCHA0܀G1F<HFHA܁*( B$<"< Q mRrہ݁ mR&<ЂkgJl !E`8 l,<z6<`,<zJl !E` BBJ@LV`Hk@ A"BLL.,*<΅fz|`̅f*<6<`?F…ƅVVƽz|~6m܆ۅԂӁQ`ԄӃn܆ۅԂӁQ @m`~݇ۇ m JgBJk g`, l*<|6<`*<|JgH``H`J@L` AJPgPW`lv`fH@@ A"Bf$f"g@`:"(g.@C`*B`&fv`"g@`")g@C`vL` AJP@CL) Nw[Float Jg$]lDvUx飂JgN[Fix V&g8xJmg n` D l JgDNBN"<`uTvw(zC <Nr"t##BG& #CB G( #DB|Bp (jN%Ap (jN)ABBBBBpB"*"0p$IN#Ato %A`G " p$(j$N`"*p$(jtN%A%AJfJ$*G<" p((j(NGl" p(IlNJfp((jN#At frp((jPN%j\"*ҪR%AlJgXtԉ#B&*"08pd(jN%AJn&$*G" $0(pd(j(Nrpd(jPN"*pd(jN"*tJ gF%B0vJgF%C xJgF%DBzJgF%E,0 ̃F%Fh~%G\B`pu%@dJ,frA`"*$0,v0("p (j,N%A`r`Fr`@"*J(fr`"*$0(v0("p (j,NtGgvJg`%AxJgB$*"0(p (jN%AJf&$*G" $0(p (j(Nrp (jPN"*p (jN"<p (jN%ArBp (jN%Arp (jN%Aprp (j$N%A ()&)$G" p (j(NG" p (j$NG" p (j$NJg"*p (jN"*p (jNp (jHNJg p (jNp (jLNJg p (j0NJgp (j4N"*p (jN"*ҪlG$ #B tdN$*N$*&$") p (j(NJf*GP" p$IlNJfp$(jN#At fr lr `rp (jPNNJanuaryRFROM/A,TO/K,LIST/K,NOCHECK/S,EXTEND/S,CEM/S,WS/K,DOUBLE/S,CASE/S,VER/K,OBJ/K,ERR/K Bad arguments for Pascal (Enter command line or to exit *Unable to open source file %S for reading ) Enter command line or to exit 0Unable to open verification file %s for writing ) Enter command line or to exit Bad arguments for Pascal .Not Enough Free Memory For A Workspace Of %NK  Enter to exit Unable to open file %S Cannot open file %S PASCAL V%n.%n (%s 1986) %Copyright (C) 1986 by METACOMCO plc. All rights reserved. 9 Percentage Of Workspace Used By Compiler Is %n%% Of %nK  Enter to exit <4Np(jN#A"p(j$N"*p(jNp(jN#A p(jN")p(jNrt fFNNq <(NpI N"p(jNNNq <0NrgF"&*$*"<ҊpIDNJg&Jf"*#pB")p(jhN&*$*"<ҊpIDN"*䲬g&*$*"<ҊpIDN&*$*"<ҊpIDNJpf(`0rҪp&*$*pIDN"*p%pp"*pJf"<ҊpIN"<ҊpINN <,N$J(g#p(B(")p(jxNNNq <4N(JHg #pH BH") p(iNp(iNNNq <tNBr҉#A $<ԉ#B&G ( !8&) G * !8&) G , !8&) G . !8 &) G  !8&) G " !8&) G $" !8&) G (" !8&) G 0" !8 &) G 8" !8$&) G <" !8(&) G D" !8,&) G H" !80&) G T" !84&) G \" !88&) G `" !8<&) G d" !8@&) G l" !8D&) G p" !8H&) G t" !8L&) G x" !8P&) G |" !8T&) G " !8X&) G " !8\&) G " !8`&) G " !8d&) G " !8h&) G " !8l&) G " !8p&) G " !8t&) G " !8x&) G " !8|v ֩ G " !8v!֩ G " !8v"֩ G " !8J gv#֩ G " !8")G $ !")G & !")G ( !")G * ! ")G , !")G . !")G  !")G $ !")G $ ! ")G $ !$")G $ !(")G $ !,")G ($ !0")G ,$ !4")G 0$ !8")G 8$ !<")G @$ !@")G H$ !D")G P$ !H")G T$ !L")G X$ !P")G `$ !T")G h$ !X")G l$ !\")G t$ !`")G |$ !d")G $ !h")G $ !l")G $ !p")G $ !t")G $ !xBHBDr%AhB Br%Al"*t%Br%A%B"< <4(jN%Ar <4(j$N%ABB <4(jxN <4(jxNBB %|=|BpBr#A( nҪBrҩ(`r #ADG $ #BHxv tr <4(jN%Axr#A(t"n8ҩ "0 <8I N#A$!(( ")B$rҩ(`r#A(tn:ҩ"0 <8I N#A$v%!( ")!($rҩ(`rҩ#A(r#A,(n:ҩ"0 <%A`(g t=(f$r>(fr7`r8%Ap (jxN`Dr9%A`:r:%A`0r=(fp (jxNr;%A`r<%A` J f``p I NNr>%A`r?%A`r@%A`p IN` "*t'm vTn6{NJV"HR,,,p (jxNNBREAK - Compilation aborted. <hNBBp (jxNr'f(g`Dp (jxNJgxv$rp (j8Nrft#B"*ґR`r‘t#Br#Anґ$*ԁr(tԩ"`Jfxv$rdp (j8NJgxv$"<p (j8Nrp (j$N%Atf2&!8"*v!"*x0**!X`rґtNp (j$N#A$S#Br#An$$*ԁv0($)ԁ(rҩ`"*!"*! %jr#A0t #B4v#C8#j#p$Jg&)(<Ȱ8Jg~x(f B(`hv$)|")t <(jNt")| <(jpN$)|"<B <(jtNt")| <(jpN$)|"<B@ <(jtN`")t"0$ <(jNJgv$)|")t <(jN")t$0$#p($)S#Bt")NR#Ar#An2$)|"<B <(jtNt")| <(jpNrҩ`")t#ptJtf#itJf$*rN$!(`")t"0ND$!(xv$" <(jNJg``* <(jNxv$" <(jNJg`r6gt f <(jN`r <(jNr6 <(jN <(jNJf r=fxv$r <(j8N`xv$r <(j8Nr <(jN <(jNr g` r#Atn$rNҪptg$)rNҪptf~$)rNTҪp#pJg^")$gNv$)|") <(jN$)|") <(jhNrf$J(,g <(jNrҩ`>"J,g~#p,$<ԉ#B&)x8f z8gPv$)") <(jN")tf&)x!8")!t") <(jNr#Atnҩ Brҩ`t") <(jN"#pt`2")tJfxv$0rf <(j8N")t#ptJtf"#p t$f`")tt' fp#p$Jgb&)(<Ȱ8JgLv$)|")t <(jN")| <(jdNr#A#i|x&<$r <(jN")t#ptJtfp"J,g&tgxv$0("< <(j8N"f <(jTN` <(jXNBB <(j,NN <PNJgN$"0(pIN""0pIN"#p`")Jg$f|#p,#|0B4(<)Kv $<Grp(jNrp(j$N#A $!L(")$) ! (")!  ")&0trp(jN`z")#p,#|0(<)Kv$<Grp(jN"$)&0(ְP#C$*rNҪL$)#B"p(j\N")"0p(jN")#pJfNNq <XNp(jN` pI NpI NJfr&f"*tf&#p8`8")$*&0(fxv$0rgp(j8N")#pJf"*Jm 'oxv$rip(j8N"*$#p(,v#C(x#D0#|4z#E8B<(0vtrp(jN#A$!(`xv$rp(j8Np(jN`xv$rp(j8Nr/gt6fp(jN`xv$r p(j8Nr&fxv$rp(j8N`N <@Np(jN"pINJf@xv$rp(j8Nrp(jNr6p(jNp(jNr6fp(jN`"*#p J g$$) v(0fxv$0rkp(j8N$"*p(jN#AJf`~p(jNr:fp(jN`.xv$rp(j8N")t&! ")!$`4t"p(jN#AJf`")t&! ")!$r6fp(jN`xv$r p(j8N`"pINJfN <PNBBtԉ#Bp((jN"p(IPNJfxv$rp((j8Nrp((jNr6p((jNrp((jNp((jNrflt#B`Xp((jNrp((jNrp((jNr p((jNp((jNrf R`r f S``pJn`hr6g`Xp((jN`#j "g8$*#p(Jg$&)x80fxvrk$0(p,(j8Np((jNr:fp((jN`.xv$rp((j8Nrp((jNp((jNJf`x&t")p((jDN#AJf`$") p((jN#AJf`")t*! ")!$r6fp((jN`xv$rp((j8N`@"p(IPNJfrp((jNp((jNJfxv$rp((j8N``")$0#p(v$")p((j(N#A$&)(08*0H!($X")tC f&)x$08rvp((j8N")$0#p(!")JfrN <DNp(jN"pIxNJfxv$rp(j8Nrp(jNr6p(jNr5p(jNp(jNrp(jNp(jNJfr5f*p(jNx&$"p(jDN#At6g`p(jN`"g2$*J(g$&0(x80fxvrk$0(p(j8N#Q$B(x&$"p(jNJg`*r6gxv$r p(j8N` p(jN"pIxNJfpNNq <$Np(jNp(j@N"t6f p(jN"NNq <@Np(jN#A `D"*$*g>v@f(0匴Hg&xv$"<p(j8NrN"*t&g`"*$0"(tԑ#Bt")Np(j$N#A$S#Br#An.$*&0(ցx08vց*)ڃXrҩ`")")p(jN%Axv$r/pL(j8NRD")t")G")pL(jN#A ")#p$`&")$t&)  fF#B0Jf#p$J$gJ0gJ0g ")$t!")$&gxv$r0pL(j8N")$#p,Rh$),!h(0")$#p8t+g v5f(xv$r1pL(j8NrpL(jNpL(jN`:r6fpL(jN`$xv$r pL(j8NrpL(jNpL(jNr=fLxv$r2pL(j8NpL(jNr6fpL(jN`xv$r pL(j8N")$BN`*$)") pL(jN#A JgXJgr)`r($) !( rpL(j$N#AJg "<0`"<$)!(") !$`BrpL(j$N#A,$!( ")$),!(")!,"),B") $),!(("),B4Rh"),!h0Jg")!,&)$),r(҉pLI@NJg")!( Jgr5fpP(jNr=gxv$r)pP(j8N`v$)"*pP(j(N#A$$v*( g xC( gxv$r)pP(j8N`\")$$0$#p(4$<ĩ4Jgxv$r4pP(j8NpP(jN")$#p$$`Pxv$rpP(j8NrpP(jNr6pP(jNpP(jNr pP(j$N#A$$B($")$t!Jg")!$r pP(j$N#A@$!,(")@! ")@B")@B(r©4JgJgr`r$)@!(")$v$),"0pP(jN$)@!(")@t'! ")@!$$")@B0"),!@,r6fpL(jN`$xv$r pL(j8NrpL(jNpL(jNr=f$*"0(G,$ pL(j4NJf")#pht#B\#Q`v#Cdx#Dl#i pz#Et#i,x|#F|#ix&trpL(jN#A$rpL(j$N#A<$!|(")$*&*̶(gxv$r pL(j8N"*$),!(4pL(jNr6fpL(jN`xv$r pL(j8NN&)($)8"),pL(j@Nr6fpL(jN`xv$r pL(j8NNforwardexternal <pNB(BHr+fFBBpH(jN`r#AVpH(jNr=gxv$rpH(j8N`F$)"*pH(jN#A Jgn$vD!( ") t!v$)rpH(jN$) !(rpH(j$N#A$) !($rf "<0`"<$)!(pH(jNrpH(j$N#A$!(")Gh$ !")! J g,") &0()!8H") &)!$8 ")!#i&)$)r҉pHINJ g") $0$!( rft5g(v$rpH(j8N`pH(jNr=gxv$r)pH(j8N`v$)"*pH(j(N#A$v*( g xC( gxv$r)pH(j8N`~")$)!$( J g")$) &0($!$8pH(jN`r#ApH(jNRB$B B0R0r=gxv$rpH(j8N`$)"*pH(jN#A J$f#A$rpH(j$N#AJ g $) !($J f#i ")!")!")! ")Gp$ !")!0J g") &0()!8H#ipH(jNrt/fF#A(Jg pH(jNJ(fr5gxv$rpH(j8N`pH(jNr=gxv$r)pH(j8N`v$)"*pH(j(N#A,$v*( g xC( gxv$r)pH(j8N`"),#p$,rf,"),pH(jNJgxv$"<pH(j8N`V#i")!, r$) gF#A(&#p8Jftfr` "),"0#A8tfr`$r8fr`r8fr`r#A4#i0gxv$rpH(j8N`r ҉#A$B pH(jN() &)t"pH(jDN#ABXx4؉v0։t,ԉpH(jNJ0n`rpH(j$N$)$!(")$$0v!(Jg "<@`r@$)$&0(!8")$$0!( ")$$0!0(")$t԰#B$r/g0v?gxv$r pH(j8N`pH(jNrgxv$rpH(j8N`pH(jN() &)$)"pH(jDN$)$!(")$Jf`") pHI(N") Nr fpH(jNrgxv$rpH(j8N`JpH(jN() &)$)"pH(jDN#ApH(jNJgxv$r!pH(j8N`rpH(j$N#A$)v ְ((!HJg "< `"<$)!(")!")NrfpH(jNrgxv$rpH(j8N`pH(jN() &)t"pH(jDN#ABXx8؉v0։t,ԉpH(jNJ0n`6rpH(j$N#AJg "< `"<$)!(")!")!, "),ҩ0S$)!(r©,ҩ0t҂tN#A0$)!(")NrfpH(jNRhr#AXt#B\v #C`G( #Ddz #Eh#jhl()vtrpH(jN#A(#iX()&)$pHIN#At gxv$r"pH(j8N` pH(jN")Nxv$rpH(j8NrpH(j$N#A$B(rpH(jNr6pH(jNpH(jNr%A")N with block <hNBBv1gxv$r#p((j8N`Pp((jNt")p((jN#A Jf`,"$) &0(gx&0($0r$p((j8N``8"$) &0(lxv$r%p((j8N`") #p$#p(&)()R#D` "$) &0(l`r#AB$&) (08(f`r#A`"$) &0(l`d") #p$#p(&)()R#D`"$) &0(l` ") #p$#p(&)()R#D`>xv$r&p((j8N`""0tgvgxgFzg`"#pLt#B8#i to continue : 9Press to continue or 'A' to abort compilation :  Compilation Aborted Compilation Aborted <8N#A S#Ar#Anp$(jNrҩ`p(jNtfrNrN <PNG & #Cp(jN#A $)(")p0(jN#A JfL"*p0(jNG0" p0(j$N")p0(j$NGP" p0(j$Np0(jPNr p0(jN") p0(jN"*p0(jNr#A$tnp4(jNtԉԩ$(rҩ$`")lBrґ&)tp0INr#A$tn0p4(jN#A(tf`r҉ҩ$+rҩ$`")tԑ&)p0INp0(jN#Atf`l")#i$r#A($n2p8(jN#A,tf`4")ҩ(/rҩ(`p0(jN") p0(jN")Np0(jN") p0(jN"*p0(jNGX" p0(j$N")p0(j$NGt" p0(j$Nrp0(jPNNNq ?:PASCAL.ERR++++ Unable to open error file  ++++ ++++ Corrupt error file  ++++ <NJlD"p\(j$N#A`")ҩH!L")ҩ@!D")ҩ8!<")ҩ0!4")ҩ(!,")ҩ !$")ҩ!")ҩ!")ҩ! `>xvt rGp\(j8N`*"Smtn6{NtdTD4$")NNq < N%j(R"*t0lt%B(`$Jgr%A%A(Np (jNr%A"*t0l tg"*t0mҪt0%B(rgpNNqB @<a- <4Nl$*\loxv$rtp(j8N"S#Ar#AnҪlBrҩ`"*lN <(Ntԁ"p(jNNNq <NN <"< ©Jg."< © Jg"$)v(0(fF"N"<©Jg<"<© Jg,"< ©tgF"< © vgF"NrN < NJg"Jg&(z,0H8fF"Nr$fFNNq <4NJfrNJf")p(j|Nrg$)°(vf ְ(!(")#p $԰!") NNq <Z <Ntԉ#BpXI NJgrN"#p"pX(jNr:g4t7g*v9g x<gz;g |8f#j"pX(j,NpX(jN"pX(jN")pXI N#A $)#p(0"pX(jNJ grN")$<İJg\t9g v<f`$)0")pX(jNJfx&)0$)r:pX(j8NrN&)$")pX(jNN")t=İJf$<İJg")0`f`")$0")pX(jNJf`b")0$<İJgt:gv7g`4$)"pX(jN"!`r%Al"pX(j N#A4$)&0(P(<D$r&pX(jN")4t $pX(j|N"t!"Br:fr`Dr7fr`4r9fr`$r<fr `r;fr`r $!(rN"tf*vf Jf$)"<JpX(j|N`"")$0v "$pX(j|N"t!"Br:fr`Dr7fr`4r9fr`$r<fr `r;fr`r $!(rN")tfjvf`(匴HfFHf>z!H"Br:f,(,).0hHfr`r$!(`r7f,$&)(08(gr`r$!(`r9f,$&)(08(or`r$!(`r<f,$&)(08(lr`r$!(`\r;f,$&)(08(nr`r$!(`("$)&0(mr`r$!(rN")Jf$"<JpX(j|N`~"$0 #BX"ph(jNXpX(jN"tf,&)(08z,<̰8&$rpX(jN`")"0pX(jNpX(j8N"t!"Br:fr`Dr7fr`4r9fr `$r<fr`r;fr `r$!(rN"pX(j N#A4$")pX(jdN"tf2vf(Jf (0J4"pX(jN`")4t $pX(j|N"t!"Br:fr`Dr7fr`4r9fr`$r<fr `r;fr`r $!(rN")"0Rm&tn6{Nbbbbbbb")`fv$)"pX(j\N"t!"Br:fr`Dr7fr`4r9fr `$r<fr`r;fr `r$!("!rN")t@İJgV$)0")pX(jNJf`<")0$< İJf`"")0()&0$)"pXINrNx&)0$)r:pX(j8NrNrf"pX(j,NpX(jN"pX(jN")pXI N#A $)#p(0"pX(jNJ grN")t=İJfxv$)"<pX(j8NrN")0$<İJg$0")pX(jNJfx&)0$)rpD(j8NrN"pD(jN")pD(j,N"pD(jN")pD(jN"pD(jN")pD(jN"pD(jN"$0v #BD")pT(jNDpD(jNpD(j8N`Jg J(frN#i8")8t İJg#p8")8f$)("*pH(jNJgh$)"pH(jN"pH(jN")pH(jN"pH(jN"pH(jN"pH(jN")pH(jN")tfdvfZJoRxmHz.,f "<P`"<Q$&0(틂&)(08z 묂(pH(jN`Vr.,f "<`"<$&0(x 髂&0(틂#AH")pX(jNHpH(jNpH(j8NJ0fH#jL<&<BtrpL(jN"< pL(jN")<$*LUhpL(jN` $)("*`pH(jNJg```")8`fr$)("*pH(jNJf$)("*`pH(jNJg4#QH#iLr.,fr`r&$)L")HpH(j\N``d"#p`n")8$<İJg@$)(")pH(jNJf`&&)$"),pH(jN#A4JgrN`x&)($)r?pH(j8NrNr.g t0gvgrN <Ntԉ#BpDINJgrN"#p`.#j pD(jN"pD(j,N"pD(jN")pDIN#A$)#p(0"pD(jNJgrNJg J0frN`$)"*pD(jNJg$)0"*pD(jNJg`")0`f@$)`g$*")pD(jNJg`x&)0$)rCpD(j8NrN$)0"*pD(jNJg")`g``")0$<İJg6$)0")pD(jNJg &)$r-pD(jNJgrN``t`$)"*pD(jNJf$)"*`pD(jNJg.$)0"*pD(jNJf4$)0"*`pD(jNJfx&)0$)"<pD(j8NrN#QD#iHr- fr`r&$)H")DpD(j\N"#p`$*")pD(jNJg$*")0pD(jNJfx&)0$)rBpD(j8NrN"tfNvfD()匴Hf6Hf.z f@JHfxv$rVpD(j8N` "$)$0("0N$!(`r- f*$&)#p(8$08")8N$!(`")Jnxv$rupD(j8N`"Jm $)$0("0N"!`d"$)$0("0ND$&0(D()#A8$0H"NJfr`rҩ8$)$0(N$Ұ(!(`"#p8t!$)"pL(jN"!8$)"pL(jNr%Al"pL(jN")pL(jNpL(jN#A4t f&)x8f(z8fJ8fxv$rVpL(j8N`")$0 #BL")p\(jNLpL(jNpL(j8NrpL(j\N#jLpD(j8NrN"pD(jN")pD(j,N"pD(jN")pD(jN"pD(jN"pD(jN")pD(jN"$0v (0팄#BD")pT(jNDpD(jNpD(j8N`0") Jg:tgvgx-gNz3g:`r-gt3gvgxgJgrN <Nt ԉ#B`p`(jN"p`(jNJgrNr,gxv$rp`(j8NrNp`(jNrN"p`(jNN"*$!("B"B`@"B"B"B`v"t!"t!"v!"*(!H`D"t!"v!"*(!H`JgrX҉#ATtԪ&!8$!`(" <(jN")Tt!")Tv!")Tx!"*Ҫ$*)T!X$)T" <(j`N"t!"*Ҫ$X&)T!8$)T" <(j`N"t!"v!"*Ҫ$(!H" <(jdN" <(jNP$`6"t!"v!"x!ت"p`(jN$!(`"*Jf6$!("*$!("*%p "p`(jN`T"t!"v!"*#pT$*rN$)TLU"!"p`(jdN"p`(jN`T"*$0&<ư("Jgtgvg xgzg|g~@g`rp`(jNrNv$*"*p`(j(N#A `>p`(jN") $"0$p`(jNJgrN"p`(jN`F") %p$`Bpx؉&$) "p`(jgD`Nq <xN"p (jNr%Al"p I4N")p (jN"p (jNr%Al")p I4NJg")p (jtN")#p `")p (jN")#p"p (jN")p (jNr%AlJg6$J(gv։#C"pD(j8N"*Ҫ$$)!(")!`P$")pD(jN"pD(jN#A4")p`(jNpT(jN 4pD(jNpD(j8Nt")pD(jpNt"pD(jpN"pD(jN#A4")p`(jNpT(jN 4pD(jNpD(j8Nt")pD(jpNr#A8tnҩ&֩8!8rҩ8`"p (jtN"#p ` "p (jN"p (jN"#p ")p (jN") f>"p (jNr%Alp (jN#A t p (jN"p (jNr gg$<@ "p (jNrg$<@"p (jNr g.f&t f g"<@ p (jNJ0fLrfBJf:"<Jp (jN"<f p (jN"<rp (jN"< p (jNJg "<`"<p (jLNr g.f&t f g"<@ p (jNrg$<@"p (jNr gg$<@ "p (jN"f:$J(f.v(f$() z @"p (jN#i Jg""t!"B"!  ` "! NNq <lN$&*`(g!(r%Al"p(jN"#p"p(jN"p(jNJgr ҉#A$*Ԫ$#B(&!8")p8(j8NP$"p8(jN")p8(jdN"p8(jNr#AH#QL#iPx&<$rp8(jN"!("p8(j8N`*r#A$#Q(()&*Ttrp(jN"!NU <Nz$ډ#E ,~Ch frN")t!")#p@&) !8&$")p\(jNp\(jN"JfrN"$0vx(mF$)!(")t' g &)B8` 8` ")B"$0&<ư(Jfxv$rHp\(j8NrN"$0#p($0&<ư(Jg $) B(p\(jNr=gxv$rp\(j8NrN"*#p`$")$)f`0")#p Jf"*xv$0rIp\(j8NrN"p\(jN")$0"p\(jpN")$!$("JfrN")$!(p\(jN`")B") t!rfxv$"<p\(j8NrN"$0&<ư(Jf,$0&<ư(Jfxv$rFp\(j8NrN"$0&<ư(JglJ0fd"pp(jNJp`(jNp`(j8N#jLP"<rp`(j\N"< p`(jN")P$*LUfp`(jN"p\(jN"$0&<ư(Jgr#APtnґ&) ֩P!8rҩP`") p\(jdN"p\(jNB\r#A`Jf "<`"<t#Bl#i px&$)`")\p\(jN"p\(jNt "p\(jpN` "p\(jNp\(jN"$0!("$0#p(DtDfr`$rDfr`rDfr`r$!(`")B"$0v@ư(Jfxv$rJp\(j8NrN"$0&<ư(Jg $) B(p\(jN"p\(jN") p\(jN#A"p\(jNJgrN") $&0($08 "0p\(jNJf*") $&0(x$0rK&08 p\(j8NrN"$0&0(#p8tl vƩש"$0&0( #p8 H$0&0( #p8L$) v(fzx(fp*)H(n,)L(l") xv$0rUp`(j8NrN") $)H&0$)"N#AP"p`(jN$)P"p`(jpN`T"p\(jN") p\(j,N") p\(j N#A@"p\(jN$)@") p\(jdN`2") $0H@"p\(jN") t԰!") tfJ0f&< @()Hz,<̩H$r#Dh(&)hp`(jN#jLPrp`(jNr@g$<$@"p`(jN"<rp`(jN"< p`(jN")P$*LUlp`(jN"< @$)Lv(<ȩL&$rp`(jN"*L$)Pn"p`(jNJHoZrHm"$)Hv Q@"p\(jN`,"<@$)Hv(<ȩH&$rp\(jN`dJHl\rHn$$)HDv P@"p\(jN`0"<@$)HDv()HD&$rp\(jN`"<。@p\(jN`"<倂@p\(jN``rT҉#APt#Bv#Cx#D#i#C#Dz#EBxv$"p|(jNr#A#i@t#Bv#Cx#DBx&$) rp|(jN"p|(jNr#A#i #iP()@v $rp|(jN"p|(jN`"")tg>vg xg`."p\(jN$)@"p\(jN"$0!("$0#p(DtDfr`$rDfr`rDfr`r$!(r/f t>%B`,r?fp\(jN`xv$r p\(j8NrN`""*t2gv>gHx@g`r2gt@gv>grNNq <PNBx؉#D*<ډ#E,<܉#F.<މ#G <Љ#@"<҉#A"<$҉#A "<D҉#A@"$0$#p(BBBBJfr`")tv4fF"#AJfr`")tJ4oF"#Ar#AtnҩBrҩ`"$0$#p( t#B#iv#C#ix#D#i ()v$)r <(jNr#Atn Ҫp&)@֩!8rҩ`r <IDNr#Atn$rNҪptn"<҉#A&*֪$#Cx#D#Dz#E|#F #Fxv$" <(jNX$") <(jN"< #A") < (jN <(jN퉂 <(jN <(j8N$)rNҪp$0W#B$)rNҪp!rҩ`r <IDN#j$|rӪ$Jg"</ <(jNr+g&J f` xv$rZ <(j8NrN <(jN") <IN$rN#AJglJgftn"vƁx Q" <(jN`>"< <(jN")t <(jN"<© <(jNr,f`6`Rr,f`r/f"xv$r\ <(j8N <(jN") tf #p &<։#C()#pH#j$*)۪$t"*$N#BJgrҪ$%A$#j$") <(jNJgrNr#A#iBt#B v#CJgr`r#At#Bvfr`$rfr`rfr`r#At#B B$v#C(Jg()|*)욄|"` "*ҩ$) #A,#p( 4v#C0")$)&)() <(jNv$)") <(jPN`r#Atn*ҩ&)֩()ذ8!Hrҩ`")to&)֩(08!H")ҩ"0 <(jNRYt") <(jpNrm JnbS%i$`r=gxv$r <(j8NrNv$*"* <(j(N#A$&!(8") tf&)x'8 g(zA8 gxv$"< <(j8NrN")t' fbJ$gZ#p$&)(<Ȱ8Jg>(08*<ʰHJg((08JH gxv$"< <(j8NBx؉&<։$)") <(j"< <(jN")t <(jN"<© <(jN"< <(jN"<"_ <(jN"<" <(jN` <(jPNrgtgtf>"<B <(jNrg$)v " <(jN`,")t &) $r <(jN`")t  <(jN`(rg$)v " <(jNt") <(jNr#AJm$rNҩ@tnY$")v!")x!")z!"*$Ҫ,)!h") <(jN")t #A") <(jN <(jN <(j8Nr#Atn>$)rNҩҩ@#p$)rNҩҪp!rҩ`rҩ`")N <#|H`2#|L`&#|P`#|D`#|T` <I/NJgrN") <(jNJgrN")$0J(frN <I/NJgrN")$*`"0 <(jNJfD")$*"0 <(jNJf$")x&0$*`r` <(j8NrN")$*"0 <(jNJgJg"*Ҫ$#A") <(j N#AP$") <(j8N")!") <(jN") <(jdN") <(jN") <(jNr#A#i#i ()&<$r <(jN")!r#A#i()&)tr <(jN")t!")B")B")! ")v!`") <(j N#A$)v!($)") <(j0Nr#A#i()&*Ttr <(jNr#A#i()&)tr <(jN")!`Jg^"*Ҫ$#A") <(j N#AP$") <(j8N")!")t!$)") <(j`Nt") <(jpNt") <(jpN$)") <(j`Nt") <(jpNt") <(jpN") <(jN") <(jdN") <(jN") <(jNr#A#i()&)tr <(jN")t!")B")B")! ")v!`f") <(j N#A$)v!($)") <(j0Nr#A#i()&)tr <(jN")!")!`rN <I/NJgrN") <(jNJgrN")$*"0 <(jNJf ")x&0$*r` <(j8N <I/NJgrN")!J0f") <(jN")$< " <(jNJ g"< <(j\N`r <(j\N#jLr <(jN"<r <(jN"< <(jN")$*LUo <(jN")$< " <(jNr <(j\N"*L$)m" <(jNrN <I/NJgrN") <(jNJgrN")$0J(frN")$*"0 <(jNJf$")x&0$*r` <(j8NrN <I/NJgrN") <(jN") <(j N#A") <(jN")t!$)") <(j0N")t p <(jN$)"< <(jtN"<Vҩ$<Dԩ(&tr <(jN")!")BrN <I/NJgrN") <(jNJgrN")$0v=ư(Jfxv$0r- <(j8N <I/NJgrNr f$)!(") <(jN") <(jN`#|`.#|`"rN")"0Jgtgvg`")$<" <(jN") <(j\N")t!rN") <(jN") <(jNJ0fZ")#pt f&0"08 `")$0"0(#Atf6Jf.vo&x#D*),<HX" < (jN") < (j N#A$") < (jN")$0v ()팄" < (jN#jLr < (jN#|r rfr `r  < (jN"< < (jN#i r f "<n`"<m$)&*LU$") < (jNr f "<S`"<R$) <(j|NrN <I/NJgrN") <(jNJgrN")$*`"0 <(jNJf$")x&0$*`r` <(j8NrN") <(j N#A <I/NJgrNJgz"<҉#A$*Ԫ$&!8$)v!(") <$(j8N") <$(jdN") <$(jN") <$(jN") <D(jN <8(jN xgzg|@g`r#Atnґ&)`֩!8rҩ`r#Atn ҩ&)֩!8rҩ`") <(jN") <(jNJXg"), <(jNr%Al")` <(jdNJXg"), <(jN") <(jN") <(jN" <(jN") <(jNBJXgr`rt#B#i`#i#i #i,x&)$") <(jN") <(jN" <(jNrNNq <#Q#A#it")N")$)") <I DNrҩ``" <(jN") <(jN")@ <(jNJftr#A$&0($08")` <I N"$)`!(&$)`r4 <(jNr#Atnҩ`&֩!8rҩ`") <(jN") <(jN`($) "<H <(j|N") t԰!") tn")@ <(jN") <(jN")@ <(jN`($)@"<H <(j|N")@t԰!")@tn") <(jN" <(jN")@ <(jN")@$0v "$) <(jtN#jLr <(jN")@ <(jN#jLv$") <(jN") $<R@" <(jN")@$<QȄ" <(jN"*L$)U" <(jN")$*LUm <(jN")@ <(jN`x") tfNvfDJf<#p#Q#it")N")$)") <I DN`r#Av$") <(jNrt/fF#AJg <(jNr?f2Jf* <(jNrN <DNBp(jNJgrN"$0v=ư(Jfxv$0r-p(j8NrN"pIN"$*̴g"v#C(x؉v։$"0p(jN"$*̴g, l vfxfz!`rp(j$N$!("#p $) v !(") t!") !"xf4f,*) !X "*) !X"z!`") B ") !`*"p(jN$"<Hp(j|N"t԰!"tnrN <NN <4N&#p8t")Nrlt")NR`t")N#A $)ԁv0(#Ct#Bt")N")婂$)ԩ (N <HN&(08#pH (#pH#p8*)St"Np0(j$N#A$)S#B$t")$N#A$r#A($nҩBrҩ(`"$0#p( $t")$N#A$)#p( $t")$N#A$) S#B$r#A($nB$)&)ց#C Jm$l()؁z0H()؃Hrҩ(`"!"!NNq <dNBx؉#D*|Xf~XfJg"p@(jN`"p@(jN")$0")$0(p@I N")$)!(&)$)r4p@(jNr#A4tn ҩ&)֩4!8rҩ4`"p@(jN")p@(jN"p@(jN` $"<Hp@(j|N"t԰!"tn"p@(jN"p@(jN$"< p@(j|N")$0"0( p@(j\N"<mp@(jN$"< p@(j|N")$0"0(p@(j\Nxv<$<orp@(jN#jLrp@(jNp@(jN#A t $p@(jtN"p@(jN")p@(jN"< p@(jN")$0&0#p( @t"08 N")@p@(j\N"<戂 $< x&$rp@(jN$)"<Gp@(jtNJg "<`"<$&0(x 髂v3p@(jN") t p@(jN")$*LU`p@(jNJfrN"!"t!"B"v!rNNq <N(*0H,0H#pX #ph*,0X.0X#ph #pxBB B$B(B,B0B4|<܉#F8t")N#AXt")N#A\t") N#A`t")N#Ad#i`h#Al#i p#itt4g"v:gx.gz8g |;fR")`Xo#iXh")d\l#i\lr.f&$) o#ip")l#itr-f$)`Xl#iXh")d\o#i\l") l#ip")o#it")`$)h#irN$") <(jpN")X$)h#irN$") <(jpNr;f$)") <IN`$)") <IN <(jN#A <(jN <(jN#A t:g&v-g <(jN <(jN#A$r4f"")$ <(jN <(jN#A(") <(jNr:gt-g") <(jNr4f")$ <(jN")h$)l"$) <(jNr-g$) ")h <(jNr-gt.g v0f")h$)lR#B4")8 <I4Nr <(j$N$)8!(")8#pxr#A|tn$&)(08؁ҩx!Hrҩ|`")x!p ")x!t")x!4")8 <(jNC&$</ r <(jN <(j8N#jL,`F#i`#id#iX#i\#i #i()(&)$$) ") <I |N`<#iX#i\()d&)`$) ") <ITN`#i\#i`#id()X&)$$) ") <I N`#id#iX#i\()`&)$$) ") <I N`$) ") <I N`#id#iX#i\()`&)$$) ") <I PN`b#i\()X&)$$) ") <I8N`<"t-m2vn*6{Ntttttt:t:fr-g$<R@ " <(jN"<QȂ$*L&),U$r <(jNr:gt7gv8g x;fX"<B <(jN")!")t!")Br7fr`r$)!(`r4gr#Axtn ҩ8&)֩x!8rҩx`"<"_ <(jNr-fX$)`&)h#i$rND$") <(jpN")X$)h#irND$") <(jpN"< <(jN") <(jNr:gt-g") <(jNr4f")$ <(jNrNNq <,Np(j8N"*Ҫ$$!(rfr`rfr`r$!(rҩt‚Ӫ$"p(jNNNq <&$rp8(jN#jL((<p &<r$<rp8(jN"< p8(jN"< @$<ĩ&)x 0#CH(<f &$rp8(jNr#A8$") N")8$) p8(jN"<h$) v 窂$< @x&$rp8(jN"*L$)(Uf"p8(jN"< @$<ĩ&)x 0#CH(<f &$rp8(jNt")$NR"$) p8(jN"<h$) v 窂$< @x&$rp8(jN"*L$)(Uf"p8(jN"<6p8(jNN <8Nv 0()X*<2&r(p(jNNNq <N*<B@,< @.<΄ < @"<©t 0$< @(<ȩ#E,*< @#F0,<̩#G4.)#@

The '^' symbol may only be used for pointer and file variables >INTERNAL COMPILER ERROR %N, data %NPLEASE TELL PNC 0272 428781 .A dot follows a variable which is not a record Field %S not known Only arrays may be subscripted IThe expression type $ is incompatible with the index type of this array $  ':=' expected BAn expression of type $ cannot be assigned to a variable of type $ Expression too complex, sorry 'DO' expected 'UNTIL' expected 'THEN' expected3The variable of a for loop must be a local variable5The variable of a for loop must be of an ordinal type 'TO' or 'DOWNTO' expected Subscript value %N out of bounds Division by zero Case label expected/The body of the case statement can not be empty+The case constant %K appears more than onceParameter list expected4Number of parameters does not agree with declaration Extra comma, it will be ignored/A variable of type $ is required, not of type $BAn element of a packed structure cannot be used as a VAR parameter OProcedural parameter is not identical to the requirements of the parameter list*An expression of type $ is required, not $ 7The argument to NEW or DISPOSE must be a pointer, not $,Only the current function may be assigned to 'A boolean expression is required, not $!The empty string is not permitted !Label %N has already been defined *Label %N has been declared but not defined "Label %N has already been declared FThe placement of label %N here makes a previous GOTO statement invalid ,Label numbers must be in the range 0 to 9999 9Label %N is not accessable from this point in the program 5The identifier '%S' cannot be redefined in this scope ?External procedures may only be declared at the outermost level.RESET and REWRITE may only be applied to files ERESET, REWRITE may not be used on the standard files input and output ?EOLN, PAGE, READLN and WRITELN may only be applied to textfiles-Cannot write to 'input' or read from 'output' Record type required, not $A file is required hereEItems within a set constructor must have identical types, not $ and $ 7Not enough space, try splitting into smaller procedures;The 'MOD' operator must have a positive, non zero, argumentUnimplemented instruction ,Parameter should be of type 'unpacked' array (Parameter should be of type packed array WSubscript parameter is incompatible with the subrange of the 'unpacked' array parameter"Array host types are not identical .Same control variable in nested for statements 1Cannot assign to a for statement control variable TCannot pass a for statement control variable as a variable parameter to a subprogram MCannot call read or readln with a for statement control variable as parameter GFor statement control variable is threatened by a procedure or functionFThe argument to DISPOSE must be a variable or function of type pointer 4The argument to INCLUDE must be a filename in quotes *Unable to open INCLUDE file '%S' for input +INCLUDE can only be nested to a depth of %N Too many case constants supplied #Case constants can not be variables7The case constant %K does not match any of the variantsFThis case constant is type incompatible with the corresponding variant )A string can not be on more than one line AThe '/' operator may not be used between operands of type $ and $ AThe left hand argument of the 'IN' operator must be ordinal not $ VFile variables or structured variables with file components cannot be value parameters 4The case index must be an expression of ordinal type %Field width must be greater than zero >Function '%S' does not contain an assignment to its identifier ?Files and structured types containing files can not be assignedTThe actual parameter corresponding to a variable parameter must be a variable access ,A pointer variable must be a variable access 0The case constant %K does not appear in the list SThis parameter cannot denote a field that is the selector of a records variant partOThe applied occurance of type '%S' is within the scope of field designator '%S''This case constant can never be reachedBOnly integer, real or character values can be read from a textfile FVariables in set constructors can not be outside the range 0 to 255 Possible unclosed comment =The program parameter '%S' has not been defined as a variable MCC Pascal 68000 - This file contains; (a) a list of the contents of the MCC Pascal 68000 compiler disk (b) a list of the contents of the MCC Pascal 68000 linker disk (c) details on how to link MCC 68000 Pascal programs if you have the DRI (TOS) linker link68. (d) notes on the example programs in the manual. (a) The COMPILER DISK contains; README.TXT This file ED.TTP The MCC screen editor PASCAL.TTP The MCC Pascal 68000 Compiler PASCAL.ERR The compile-time error-message file The following 'include' files allow Pascal to call the Metacomco Graphics Interface. These files should not be used in their entirety but copies should be tailored to meet the requirements of your Pascal application. Note also that some of the Types declared in the types include file need type sizes to be specified. GRCONSTS.INC Pascal constants GRTYPES.INC Pascal types GRRTNS01.INC Pascal procedures and routines to GRRTNS18.INC AESMACS Assembler macro definitions for gemlib VDIMACS Assembler macro definitions for gemlib LIB10.ASM Assembler sources of gemlib (the rest are on the LIB11.ASM linker disk) LIB12.ASM LIB13.ASM LIB14.ASM LIB15.ASM LIB16.ASM LIB17.ASM LIB18.ASM The following four files are corrected versions of the example programs from the manual (see note (d) below) EX1.PAS Pascal graphics example EX2A.PAS Pascal Memory example EX2B.ASM Assembler support for memory example EX3.PAS Pascal changestack example (b) The LINKER DISK contains; LINK.TTP The GST object module format linker PLINK.LNK A command file for the GST linker STARTUP.BIN The Pascal startup module (GST format) STARTUP.O The Pascal startup module (TOS format) PASLIB.BIN The Pascal library (GST format) PASLIB.O The Pascal library (TOS format) GEMLIB.BIN The Metacomco GEM library (GST format) GEMLIB.O The Metacomco GEM library (TOS format) LIB0.ASM Assembler sources of gemlib (the rest are on the LIB1.ASM compiler disk) LIB2.ASM LIB3.ASM LIB4.ASM LIB5.ASM LIB6.ASM LIB7.ASM LIB8.ASM LIB9.ASM  (c) How to link Pascal programs with the DRI linker; The link68 command line for a simple Pascal program prog.o is; prog.68k=startup,prog,paslib The link68 command line for a Pascal program prog.o which has calls to the Metacomco Graphics Interface library gemlib is; prog.68k=startup,prog,paslib,gemlib The link68 command line for a Pascal program prog.o which calls an assembler program aprog.o is; prog.68k=startup,prog,paslib,aprog $In all cases the 68k file must now be passed through the relmod program. See your Atari Development Kit for full details. (d) Notes on the example programs from the manual. Due to changes to the compiler and typographical errors in the manual, the example programs in the manual are incorrect. Correct versions of these example have been added to this disk. ~*D * Macro definitions for Lattice C interface library * *D * XREF CALLVDI,VDIPB * * Offsets of arrays within parameter block * COPB EQU 0 Control array IIPB EQU 4 Input array PIPB EQU 8 Points in array IOPB EQU 12 Output array POPB EQU 16 Points out array * * Sizes of arrays in bytes * COS EQU 12*2 IIS EQU 256*2 PIS EQU 256*2 IOS EQU 256*2 POS EQU 256*2 * * Flags set to 1 if we must replace the standard values * COPBS SET 0 Control array IIPBS SET 0 Input array PIPBS SET 0 Points in array IOPBS SET 0 Output array POPBS SET 0 Points out array * * Offsets of the actual arrays from the base pointer * COAR EQU 44 Control array IIAR EQU COAR+COS Input array PIAR EQU IIAR+IIS Points in array IOAR EQU PIAR+PIS Output array POAR EQU IOAR+IOS Points out array * * Other macro variables * ARGPTR SET 0 Offset for arguments EXIT SET 0 1 if work to be done after call LEND1 SET 0 1 if string length contained in D1 * *C * LIBFNV name,args Set up entry Point for 'void' function * *C * LIBFNV MACRO IFNE NARG-2 FAIL ENDC XDEF \1 \1 INIT \2 ENDM * *C * LIBFNR name,args Set up entry Point for 'long' function * * It may need to do more work than LIBFNV * *C * LIBFNR MACRO IFNE NARG-2 FAIL ENDC XDEF \1 \1 INIT \2 ENDM * *1 * INIT argcount Set up initial call * *1 * INIT MACRO ARGPTR SET 4*\1 LEA.L VDIPB,A0 ENDM * *I * LONG Move past argument * * LONG array Place argument (array) in parameter block slot * * LONG array,offset Place argument in offset in specified array * *I * LONG MACRO IFEQ NARG-1 MOVE.L ARGPTR(SP),\1PB(A0) \1PBS SET 1 EXIT SET 1 ENDC IFEQ NARG-2 MOVE.L ARGPTR(SP),\2*2+\1AR(A0) ENDC ARGPTR SET ARGPTR-4 ENDM * *F * WORD array,offset Place argument in offset in specified array * *F * WORD MACRO IFNE NARG-2 FAIL ENDC MOVE.W ARGPTR+2(SP),\2*2+\1AR(A0) ARGPTR SET ARGPTR-4 ENDM * *G * LPOINTW array,offset array[offset] = *(&value) * * LPOINTW name remember stack offset to put result there * *" s*% * LPOINTW MACRO IFEQ NARG-2 MOVEA.L ARGPTR(SP),A1 MOVE.W 2(A1),\2*2+\1AR(A0) ENDC IFEQ NARG-1 \1 SET ARGPTR EXIT SET 1 ENDC ARGPTR SET ARGPTR-4 ENDM * *: * LABEL name Set a label for this argument offset * *: * LABEL MACRO \1 SET ARGPTR ENDM * *D * SETPTS inp,ii Set the number of input points and size of intin. * *D * SETPTS MACRO IFNE NARG-2 FAIL ENDC SETA CO,1,\1 SETA CO,3,\2 ENDM * *: * SETA array,offset,value Set specified array slot. * *: * SETA MACRO IFNE NARG-3 FAIL ENDC IFEQ \3 CLR.W \2*2+\1AR(A0) ENDC IFNE \3 MOVE.W #\3,\2*2+\1AR(A0) ENDC ENDM * *) * CALLW name,code Call the function * *) * CALLW MACRO IFNE NARG-2 FAIL ENDC MOVE.W #\2,COAR(A0) JSR CALLVDI IFNE EXIT LEA.L VDIPB,A0 Reload address register EXIT SET 0 ENDC RESTORE II RESTORE PI RESTORE IO RESTORE PO ENDM * *. * RESTORE array -- Service macro for above * *. * RESTORE MACRO IFNE \1PBS LEA.L \1AR(A0),A1 MOVE.L A1,\1PB(A0) \1PBS SET 0 ENDC ENDM * *C * SPOINTW array,offset,name Place short result back into output * *C * SPOINTW MACRO IFNE NARG-3 FAIL ENDC MOVE.L \3(SP),A1 Point to destination CLR.L (A1) MOVE.W \2*2+\1AR(A0),2(A1) Move back result ENDM * *B * SPOINTL array,offset,name Place long result back into output * *B * SPOINTL MACRO IFNE NARG-3 FAIL ENDC MOVE.L \3(SP),A1 Point to destination MOVE.L \2*2+\1AR(A0),(A1) Move back result ENDM * *E * SETEXIT Ensure A0 is loaded with Pointer to Params after call * *E * SETEXIT MACRO EXIT SET 1 ENDM * *G * COPYW array,offset,length,name,off,direction Array copying * *G * COPYW MACRO IFNE NARG-6 FAIL ENDC LEND1 SET 0 Because we're destroying D1 MOVE.W #\3-1,D1 Count MOVE.L \4(SP),A1 Pointer to destination LEA.L \5*2(A1),A1 Add in offset MOVE.L A2,-(SP) Save A2 LEA.L \2*2+\1AR(A0),A2 A2 is now source pointer IFC \6,'BACK' C\@ MOVE.W (A2)+,(A1)+ Put Values into user array DBRA D1,C\@ ENDC IFC \6,'FROM' C\@ MOVE.W (A1)+,(A2)+ Get Values from user array DBRA D1,C\@ ENDC MOVE.L (SP)+,A2 Restore A2 ENDM * *G * COPYWA array,offset,length,name,off * * Copy alternate elements of source array to destination * *G * COPYWA MACRO IFNE NARG-5 FAIL ENDC LEND1 SET 0 Because we're destroying D1 MOVEQ.L #0,D1 Zero D1 MOVE.W #\3-1,D1 Count MOVE.L \4({SP),A1 Pointer to destination LEA.L \5*2(A1),A1 Add in offset MOVE.L A2,-(SP) Save A2 LEA.L \2*2+\1AR(A0),A2 A2 is now source pointer C\@ MOVE.W (A2)+,(A1)+ Put Values into user array TST.W (A2)+ Skip source element DBRA D1,C\@ Back for next item MOVE.L (SP)+,A2 Restore A2 ENDM * *C * STRLEN array,offset,stringptr array[offset] = length of string * *C * STRLEN MACRO MOVEQ.L #-1,D1 Initialise D1 MOVEA.L \3(SP),A1 Pointer to string S\@ ADDQ.L #1,D1 TST.B (A1)+ Is it a 0 BNE.S S\@ MOVE.W D1,\2*2+\1AR(A0) Store result LEND1 SET 1 Indicates length in D1 ENDM * *K * STRCPY array,offset,string Copy each byte of the string into a word * * of array. Relies on length being in D1 * *K * STRCPY MACRO IFEQ LEND1 FAIL ENDC LEND1 SET 0 MOVEQ.L #0,D0 Initialise D0 MOVE.L \3(SP),A1 Pointer to string MOVE.L A2,-(SP) Save A2 LEA.L 2*\2+\1AR(A0),A2 A2 pointer to offset array SC\@ MOVE.B (A1)+,D0 Get a char MOVE.W D0,(A2)+ Move 16 bits into destination array DBRA D1,SC\@ Go Back for next byte MOVE.L (SP)+,A2 Restore A2 ENDM * *@ * RETURN Perform return sequence * * RETURN array,offset Transfer array[offset] to a register * * (if necessary) and return * *@ * RETURN MACRO IFEQ NARG-2 MOVE.W \2*2+\1AR(A0),D1 ENDC IFEQ NARG MOVE.W D0,D1 ENDC EXT.L D1 RTS ENDM * * * End of Macros File * * C