$! $! CONVERT A SERIAL ASSEMBLIABLE IMAGE TO A PICASSO SYSTEM 4 FRAME $! SOURCE FILE. $! INPUT: P1 - INPUT FILE NAME $! P2 - OUTPUT FILE NAME $! $ IF P1.EQS."" THEN $ EXIT $ IF P2.EQS."" THEN $ P2 := 'P1' $ IF F$PARSE(P1,,,"TYPE").EQS."." THEN $ P1 := 'F$PARSE(P1,,,"NAME")'.SRC $ IF F$PARSE(P2,,,"TYPE").EQS."." THEN $ P2 := 'F$PARSE(P2,,,"NAME")'.ASM $ DISP := WRITE SYS$OUTPUT $ ORG_ADDRESS = %X1000 $ OPEN/READ INPUT: 'P1' $ OPEN/WRITE OUTPUT: 'P2' $RDLP: READ/END=DONE INPUT: LINE $ IF F$LOCATE("!XDMAFIX",LINE).NE.F$LENGTH(LINE) THEN $ GOTO NEW $ DISP LINE $ WRITE OUTPUT: LINE $ GOTO RDLP $! $NEW: $ IF ORG_ADDRESS.EQ.0 THEN $ DISP "TOO MANY IMAGES!!!!" $ IF ORG_ADDRESS.EQ.0 THEN $ WRITE OUTPUT: "*TOO MANY IMAGES!!!!" $ IF ORG_ADDRESS.EQ.0 THEN $ GOTO OVFL $ DISP "******* ",LINE $ WRITE OUTPUT: "******* ",LINE $ N = 'F$LOCATE("$",LINE)' $ N2 = 'F$LOCATE("!XDMAFIX",LINE)' $ SIZE := 'F$EXTRACT(N,N2-N,LINE)' $ DISP " ORG ''ORG_ADDRESS'" $ WRITE OUTPUT: " ORG ''ORG_ADDRESS'" $ ORG_ADDRESS = ORG_ADDRESS + %X500 $ IF ORG_ADDRESS.EQ.%X1000+16*%X500 THEN $ ORG_ADDRESS = 0 $ DISP " FDB ''ORG_ADDRESS',$AA05,''SIZE',$70C0,0,0,0,0" $ WRITE OUTPUT: " FDB ''ORG_ADDRESS',$AA05,''SIZE',$70C0,0,0,0,0" $ WRITE OUTPUT: " FCB @000,@377,@160,@130,@017,@077,@121,@350" $ WRITE OUTPUT: " FCB @024,@220,@135,@021,@037,@244,@012,@147" $ WRITE OUTPUT: " FDB 0,0,0,0,0,0,0,0" $ GOTO RDLP $! $OVFL: READ/END=END INPUT: LINE $ DISP "*???? ",LINE $ WRITE OUTPUT: "*???? ",LINE $ GOTO OVFL $! $DONE: $NONE: IF ORG_ADDRESS.GE.%X1000+16*%X500 THEN $ GOTO END $ DISP " ORG ''ORG_ADDRESS'" $ WRITE OUTPUT: "*" $ WRITE OUTPUT: " ORG ''ORG_ADDRESS'" $ ORG_ADDRESS = ORG_ADDRESS + %X500 $ IF ORG_ADDRESS.EQ.%X1000+16*%X500 THEN $ ORG_ADDRESS = 0 $ WRITE OUTPUT: " FDB ''ORG_ADDRESS',0,0,0,0,0,0,0" $ IF ORG_ADDRESS.NE.0 THEN $ GOTO NONE $! $END: WRITE OUTPUT: " END $D000" $ CLOSE INPUT: $ CLOSE OUTPUT: $ EXIT 1