Class: Applesoft

Inherits:
NativeFileType show all
Defined in:
lib/native_file_types/apple2/Applesoft.rb

Constant Summary collapse

APPLESOFT_TOKENS =
[
    "END","FOR","NEXT","DATA","INPUT","DEL","DIM","READ",
    "GR","TEXT","PR#","IN#","CALL","PLOT","HLIN","VLIN",
    "HGR2","HGR","HCOLOR=","HPLOT","DRAW","XDRAW","HTAB",
    "HOME","ROT=","SCALE=","SHLOAD","TRACE","NOTRACE",
    "NORMAL","INVERSE","FLASH","COLOR=","POP","VTAB",
    "HIMEM=","LOMEM=","ONERR","RESUME","RECALL","STORE",
    "SPEED=","LET","GOTO","RUN","IF","RESTORE","&","GOSUB",
    "RETURN","REM","STOP","ON","WAIT","LOAD","SAVE","DEF",
    "POKE","PRINT","CONT","LIST","CLEAR","GET","NEW",
    "TAB(","TO","FN","SPC(","THEN","AT","NOT","STEP","+",
    "-","*","/","^","AND","OR",">","=","<","SGN","INT",
    "ABS","USR","FRE","SCRN(","PDL","POS","SQR","RND",
    "LOG","EXP","COS","SIN","TAN","ATN","PEEK","LEN",
    "STR$","VAL","ASC","CHR$", "LEFT$","RIGHT$","MID$","?",
    "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?"
]

Instance Attribute Summary

Attributes inherited from NativeFileType

#aux_code, #contents, #file_system_image, #file_type, #filename, #meta_data

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from NativeFileType

#<=>, #==, all_native_file_types, best_fit, code_for_tests, compatability_score, #data_without_header, file_type_matches?, #full_filename, #header_length, #initialize, is_valid_file_if, #load_address, load_address, matching_score, native_file_types_possible_on_file_system, non_matching_score, #to_hex_dump, #to_info_dump, #type_description

Methods included from SubclassTracking

extended

Constructor Details

This class inherits a constructor from NativeFileType

Class Method Details

.file_system_file_typesObject



4
5
6
7
8
9
# File 'lib/native_file_types/apple2/Applesoft.rb', line 4

def self.file_system_file_types
  {
    AppleDos=>0x02,
    ProDos=>0xFC
  }
end

Instance Method Details

#to_listingObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/native_file_types/apple2/Applesoft.rb', line 29

def to_listing
# Adapted from FID.C -- a utility to browse Apple II .DSK image files by Paul Schlyter ([email protected])

#

#Applesoft file format:

# <Length_of_file> (16-bit little endian) (only for Apple DOS files - these 2 bytes are not present in Applesoft file on ProDOS)

# <Line>

# ......

# <Line>

# where <Line> is:

# <Next addr>  (16-bit little endian)

# <Line no>    (16-bit little endian: 0-65535)

# <Tokens and/or characters>

# <End-of-line marker: $00 >

#

 if (file_system_image.file_system)==AppleDos then
   length=contents[0]+contents[1]*256
   index=2
 else
   length=contents.length
   index=0

 end
  s=""
  while (index<length)
    index+=2 #skip over the "next address" field

    break if contents[index].nil?
    break if contents[index+1].nil?
    line_no=contents[index]+contents[index+1]*256
    index+=2 #skip over the "line number" field

    s+=sprintf("%u",line_no)
    done_line=false
    last_char_space=false
     inside_quotes=true
    while (!done_line)      
      b=contents[index]
      break if b.nil?
       inside_quotes=!inside_quotes if b==0x22 
      if b>=0x80 then
         if inside_quotes then
           if !last_char_space then
             s+=" "
           end
           s+=APPLESOFT_TOKENS[b-0x80]+" "
           last_char_space=true
         else
           s+=(b-0x80).chr  #if we're inside quotes, bytes >80 are inverse text. but we'll just display them as normal text

         end
      else
        s+=b.chr
        last_char_space=false
      end
      index+=1
      done_line=(index>=length)||(contents[index]==0)
    end
    s+="\n"
    index+=1        # skip over "end of line" marker

  end
       #s

        s
end