'===========================================================================
' Subject: CONVERT ANSI FILE TO .COM          Date: 01-07-97 (22:36)       
'  Author: Denis Boyles                       Code: QB, QBasic, PDS        
'  Origin: FidoNet QUIK_BAS Echo            Packet: ANSI.ABC
'===========================================================================
'==========================================================================
'PROGRAM: ANS2COM.BAS (based on Nick Coon's ANSI2COM.BAS program)
' AUTHOR: Denis Boyles

'RELEASE: Public Domain (pd) Jan 07, 1997
'VERSION: 1.00

'COMPILE: Microsoft qBASIC v1.1
'     OS: MS-DOS (v6.20)

'PURPOSE: convert a raw ANSI file into a COM program
'  NOTES: uses CONSTants ANSFile and COMFile for the filenames
'         needs to be modified to support the command line arguments
'==========================================================================

DECLARE SUB AnsToCom (aFileName$, cFileName$)
DECLARE SUB ReadASMCode ()

DEFINT A-Z

CONST ANSFile = "PHANTASM.ANS"
CONST COMFile = "PHANTASM.COM"

COMMON SHARED ASMCode$

ReadASMCode
AnsToCom ANSFile, COMFile

DATA &HBE, &H11, &H01, &HAC, &H3C, &H1A, &H74, &H04
DATA &HCD, &H29, &HEB, &HF7, &HB8, &H00, &H4C, &HCD
DATA &H21, -1

SUB AnsToCom (aFileName$, cFileName$)
  PRINT "Reading "; aFileName$; "..."

  OPEN aFileName$ FOR BINARY AS 1
    buffer$ = SPACE$(LOF(1))
    GET #1, , buffer$
  CLOSE #1

  PRINT "Writing "; cFileName$; "..."

  OPEN cFileName$ FOR OUTPUT AS 1
    PRINT #1, ASMCode$; buffer$; CHR$(&H1A)
  CLOSE #1
END SUB

SUB ReadASMCode
  DO
    READ opcode
    IF opcode = -1 THEN
      EXIT DO
    ELSE
      ASMCode$ = ASMCode$ + CHR$(opcode)
    END IF
  LOOP
END SUB
