import Data.Bool import qualified Data.ByteString.Lazy as L import qualified Data.DList as DList import qualified Data.IntMap as IntMap import Data.Char import Data.Maybe import System.Environment import Control.Monad.Writer.Lazy import Control.Monad.State.Strict import Wavefront.Lex import Wavefront zflip b = b { vertex = \xs -> case xs of x:y:z:ws -> vertex b (x:y:(-z):ws) _ -> vertex b xs , vertexN = \xs -> case xs of x:y:z:ws -> vertexN b (x:y:(-z):ws) _ -> vertexN b xs , face = \ts -> face b $ reverse ts } objcat b fs = (`evalStateT` renumFrom1) $ do forM_ fs $ \f -> do bs <- liftIO $ L.readFile f parseCustom (applyRenumbering b) (modify' . addCounts) bs return () main = do (b,fs) <- do fs0 <- getArgs case fs0 of "--zflip":fs -> return (zflip echoBuilder, fs) fs -> return (echoBuilder,fs) out <- DList.toList <$> execWriterT (objcat b fs) putStrLn $ unlines out