INCLUDE "D:SYSLIB.ACT"› INCLUDE "D:SYSIO.ACT"› INCLUDE "D:SYSMISC.ACT"› INCLUDE "D:SYSBLK.ACT"› INCLUDE "D:SYSSTR.ACT"›;›; AMS1AMS2›;›; AMS I TO AMS II File Converter›;›; ACTION! version by Bruce Smith›;› MODULE› BYTE POKMSK=$10,› IRQEN=$D20E,› OPOKMSK,› ERRORFLAG› BYTE ARRAY Xd(16),› FILENMd(16),› Sd(12),› TEMPOd(20),› BLANKS=" ",› MEASd(1876),› XNOTEd(30001)=16384› INT A,B,I,J,K,N,X,NUMVCS,NUMM,› Z=[15000],TEMPOMOD› INT ARRAY MEASV(5),› XNOTEV(5),› XXNOTEV(5) › CARD HOLDERROR›;›; CIO PROCEDURE›;› PROC CIO=$E456(BYTE areg,xreg)›;›; REPLACEMENT ERROR ROUTINE›;› PROC ERRORRTN(BYTE ERRCODE)› ERRORFLAG=ERRCODE› RETURN›;›; REPLACE ERROR ROUTINE›;› PROC SETERROR()› HOLDERROR=ERROR› ERROR=ERRORRTN› RETURN›;›; REINSTALL SYSTEM ERROR ROUTINE›;› PROC FREEERROR()› ERROR=HOLDERROR› RETURN›;›; PROMPT FOR DISK INSERTION›;› PROC DISKSWAP(BYTE D)› PRINTF("%EInsert %S disk in drive # %I,%Epress any key%E",Sd,D)› A=GETD(4)› RETURN›;›; PROMPT FOR A FILE NAME›; › PROC GETFILENAME()› SCOPY(Xd,"D1:")› INPUTS(FILENMd)› A=0› IF FILENMd(0)>2 THEN› DO› IF FILENMd(2)=': THEN› A=2› EXIT› FI› IF FILENMd(3)=': THEN› A=3› EXIT› FI› EXIT› OD› FI› IF A>0 THEN› IF FILENMd(A-1)>'1 AND› FILENMd(A-1)<'9 THEN› Xd(2)=FILENMd(A-1)› FI› FI› I=4 › FOR J=A+1 TO FILENMd(0) › DO› Xd(I)=FILENMd(J)› I==+1› OD› Xd(0)=I-1› RETURN›;›; READ IN THE AMS 1 FILE›;› PROC READAMS1FILE()› BYTE IOCB1CMD=$352› CARD IOCB1BUF=$354› CARD IOCB1LEN=$358› NUMVCS=4› NUMM=0› FOR I=1 TO NUMVCS› DO› A=INPUTID(1)› B=INPUTID(1)› MEASV(I)=A› XNOTEV(I)=B› XXNOTEV(I)=B› NUMM==+A› OD › INPUTMD(1,TEMPOd,20)› A=INPUTID(1)› TEMPOMOD=A/30› IF TEMPOMOD=0 OR A<>TEMPOMOD*30 THEN› PRINTE("ýProbable tempo problems")› TEMPOMOD=1› FI› IF NUMM>Z/8 OR XNOTEV(NUMVCS)>Z THEN› PRINTE("ýNot enough RAM")› PRINTF("%I %I %I %I%E%E",NUMM,Z/8,XNOTEV(NUMVCS),Z) › BREAK()› FI›;› IOCB1CMD=7› IOCB1BUF=MEASd+1› IOCB1LEN=NUMM› CIO(0,$10)›;› IOCB1CMD=7› IOCB1BUF=XNOTEd+1› IOCB1LEN=XNOTEV(NUMVCS)› CIO(0,$10)›;› IOCB1CMD=7› IOCB1BUF=XNOTEd+1+Z› IOCB1LEN=XNOTEV(NUMVCS)› CIO(0,$10)› CLOSE(1)› RETURN›;›; AMS2TIES›;› PROC AMS2TIES()› PRINTE("")› PRINTE("Restoring ties...")› J=1› FOR I=1 TO NUMVCS› DO› IF I>1 THEN› J=XNOTEV(I-1)+1› FI› K=XNOTEV(I)› FOR N=J TO K-2 STEP 2› DO› A=XNOTEd(N)› B=XNOTEd(N+2)› IF A=B THEN› IF A>0 AND A<67 THEN› XNOTEd(N)=A+128› FI› FI› OD› OD › RETURN›;›; AMS2RESTS›;› PROC AMS2RESTS()› PRINTE("Removing spurious rests...")› I=1› FOR N=1 TO NUMM› DO› FOR J=1 TO MEASd(N)› DO› DO› IF XNOTEd(I)<>0 THEN EXIT FI› IF XNOTEd(I+Z)<>3*TEMPOMOD OR› XNOTEd(I+Z+1)>0 THEN EXIT FI› XNOTEd(I+Z)=0› B=I+Z-2› A=XNOTEd(B)+256*XNOTEd(B+1)+3*TEMPOMOD› XNOTEd(B)=A› XNOTEd(B+1)=A/256 › MEASd(N)==-1› FOR K=1 TO NUMVCS› DO› IF I<=XNOTEV(K) THEN› XXNOTEV(K)==-2 FI› OD› OD› I==+2› OD› OD› RETURN›;›; PROMPT FOR AMS II FILE NAME›;› PROC NEWFILENAME()› SETERROR()› DO› PRINTE("")› PRINT("Type new file name: ")› GETFILENAME()› FOR A=1 TO Xd(0)› DO› IF Xd(A)=46 THEN EXIT FI ; "."› OD› SASSIGN(Xd,".AM2",A,A+3)› SCOPY(Sd,"destination")› DISKSWAP(Xd(2)-48)› PRINTF("%EWriting %S ...%E%E",Xd)› CLOSE(2)› ERRORFLAG=0› OPEN(2,Xd,8,0)› IF ERRORFLAG>0 › THEN› PRINTF("ERROR %I OPENING OUTPUT FILE%E%E",ERRORFLAG)› ELSE› EXIT› FI› OD› FREEERROR()› RETURN›;›; WRITE OUT THE AMS2 FILE›;› PROC WRITEAMS2FILE()› FOR I=1 TO NUMVCS› DO› PRINTD(2,BLANKS)› PRINTIDE(2,MEASV(I))› PRINTD(2,BLANKS)› PRINTIDE(2,XXNOTEV(I))› OD› PRINTDE(2,TEMPOd)› PRINTD(2,BLANKS)› PRINTIDE(2,30)› FOR I=1 TO NUMM› DO› PUTD(2,MEASd(I))› OD› FOR I=1 TO XNOTEV(NUMVCS) STEP 2› DO› A=XNOTEd(I)› IF A > 0 THEN› PUTD(2,A)› PUTD(2,XNOTEd(I+1))› FI› OD› FOR I=Z+1 TO XNOTEV(NUMVCS)+Z STEP 2› DO› A=(XNOTEd(I)+256*XNOTEd(I+1))/TEMPOMOD› B=A/256 › IF A>0 THEN› PUTD(2,A)› PUTD(2,B)› FI› OD› CLOSE(2)› RETURN›; ›; THIS ROUTINE ORGANIZES THE CALLS›; NEEDED TO CONVERT AMS I TO AMS II›;› PROC AMS1TOAMS2()› READAMS1FILE()› AMS2TIES()› AMS2RESTS()› NEWFILENAME()› WRITEAMS2FILE()› RETURN›; ›; PROGRAM INITIALIZATION›;› PROC INIT()› PRINTE("")› PRINTE("Select function:")› PRINTE("1) AMS I -> AMS II")› PRINTE("2) Quit")› RETURN›;›; THE MAINLINE PROGRAM›; › PROC MAIN()› OPOKMSK=POKMSK› POKMSK=64› IRQEN=64 › PRINTE("}AMS I TO AMS II FILE CONVERTER")› DO› INIT()› CLOSE(4)› OPEN(4,"K:",4,0)› X=0› WHILE X=0› DO› X=GETD(4)› X==-48› IF X<0 OR X>2 THEN X=0 FI› OD› PRINTE("")› IF X=2 THEN EXIT FI› SETERROR()› DO› PRINT("Type old file name: ") › GETFILENAME()› SCOPY(Sd,"source")› DISKSWAP(Xd(2)-48)› PRINTF("%EReading %S ...%E%E",Xd)› CLOSE(1)› ERRORFLAG=0› OPEN(1,Xd,4,0)› IF ERRORFLAG>0› THEN› PRINTF("ERROR %I OPENING INPUT FILE%E%E",ERRORFLAG)› ELSE› EXIT› FI› OD› FREEERROR()› AMS1TOAMS2()› OD› PRINTE("")› PRINTE("Done!")› CLOSE(4)› POKMSK=OPOKMSK› IRQEN=OPOKMSK› RETURN››