|
@@ -6,14 +6,15 @@ MODULE Browse;
|
|
Error,
|
|
Error,
|
|
CPmain,
|
|
CPmain,
|
|
GPFiles,
|
|
GPFiles,
|
|
- GPBinFiles,
|
|
|
|
|
|
+ GPBinFiles,
|
|
|
|
+ LitValue,
|
|
ProgArgs,
|
|
ProgArgs,
|
|
- Symbols,
|
|
|
|
|
|
+ Symbols,
|
|
IdDesc,
|
|
IdDesc,
|
|
GPText,
|
|
GPText,
|
|
GPTextFiles,
|
|
GPTextFiles,
|
|
GPCPcopyright,
|
|
GPCPcopyright,
|
|
- FileNames;
|
|
|
|
|
|
+ FileNames;
|
|
|
|
|
|
(* ========================================================================= *
|
|
(* ========================================================================= *
|
|
// Collected syntax ---
|
|
// Collected syntax ---
|
|
@@ -75,6 +76,12 @@ MODULE Browse;
|
|
// and the user of the class _must_ agree on the IR name of the class.
|
|
// and the user of the class _must_ agree on the IR name of the class.
|
|
// The same reasoning applies to procedure types, which must have equal
|
|
// The same reasoning applies to procedure types, which must have equal
|
|
// interface names in all modules.
|
|
// interface names in all modules.
|
|
|
|
+//
|
|
|
|
+// Notes on the fine print about UTFstring --- November 2011 clarification.
|
|
|
|
+// The character sequence in the symbol file is modified UTF-8, that is
|
|
|
|
+// it may represent CHR(0), U+0000, by the bytes 0xC0, 0x80. String
|
|
|
|
+// constants may thus contain embedded nulls.
|
|
|
|
+//
|
|
// ======================================================================== *)
|
|
// ======================================================================== *)
|
|
|
|
|
|
CONST
|
|
CONST
|
|
@@ -103,9 +110,13 @@ MODULE Browse;
|
|
(* ============================================================ *)
|
|
(* ============================================================ *)
|
|
|
|
|
|
TYPE
|
|
TYPE
|
|
|
|
+ CharOpen = POINTER TO ARRAY OF CHAR;
|
|
|
|
+
|
|
|
|
+(* ============================================================ *)
|
|
|
|
|
|
|
|
+ TYPE
|
|
Desc = POINTER TO ABSTRACT RECORD
|
|
Desc = POINTER TO ABSTRACT RECORD
|
|
- name : FileNames.NameString;
|
|
|
|
|
|
+ name : CharOpen;
|
|
access : INTEGER;
|
|
access : INTEGER;
|
|
END;
|
|
END;
|
|
|
|
|
|
@@ -114,37 +125,37 @@ MODULE Browse;
|
|
tide : INTEGER;
|
|
tide : INTEGER;
|
|
END;
|
|
END;
|
|
|
|
|
|
- LitValue = POINTER TO ABSTRACT RECORD
|
|
|
|
|
|
+ AbsValue = POINTER TO ABSTRACT RECORD
|
|
END;
|
|
END;
|
|
|
|
|
|
- NumValue = POINTER TO RECORD (LitValue)
|
|
|
|
|
|
+ NumValue = POINTER TO RECORD (AbsValue)
|
|
numVal : LONGINT;
|
|
numVal : LONGINT;
|
|
END;
|
|
END;
|
|
|
|
|
|
- SetValue = POINTER TO RECORD (LitValue)
|
|
|
|
|
|
+ SetValue = POINTER TO RECORD (AbsValue)
|
|
setVal : SET;
|
|
setVal : SET;
|
|
END;
|
|
END;
|
|
|
|
|
|
- StrValue = POINTER TO RECORD (LitValue)
|
|
|
|
- strVal : FileNames.NameString;
|
|
|
|
|
|
+ StrValue = POINTER TO RECORD (AbsValue)
|
|
|
|
+ strVal : CharOpen;
|
|
END;
|
|
END;
|
|
|
|
|
|
- FltValue = POINTER TO RECORD (LitValue)
|
|
|
|
|
|
+ FltValue = POINTER TO RECORD (AbsValue)
|
|
fltVal : REAL;
|
|
fltVal : REAL;
|
|
END;
|
|
END;
|
|
|
|
|
|
- BoolValue = POINTER TO RECORD (LitValue)
|
|
|
|
|
|
+ BoolValue = POINTER TO RECORD (AbsValue)
|
|
boolVal : BOOLEAN;
|
|
boolVal : BOOLEAN;
|
|
END;
|
|
END;
|
|
|
|
|
|
- ChrValue = POINTER TO RECORD (LitValue)
|
|
|
|
|
|
+ ChrValue = POINTER TO RECORD (AbsValue)
|
|
chrVal : CHAR;
|
|
chrVal : CHAR;
|
|
END;
|
|
END;
|
|
|
|
|
|
Type = POINTER TO ABSTRACT RECORD
|
|
Type = POINTER TO ABSTRACT RECORD
|
|
declarer : Desc;
|
|
declarer : Desc;
|
|
importedFrom : Module;
|
|
importedFrom : Module;
|
|
- importedName : FileNames.NameString;
|
|
|
|
|
|
+ importedName : CharOpen;
|
|
END;
|
|
END;
|
|
|
|
|
|
TypeList = POINTER TO ARRAY OF Type;
|
|
TypeList = POINTER TO ARRAY OF Type;
|
|
@@ -153,7 +164,7 @@ MODULE Browse;
|
|
END;
|
|
END;
|
|
|
|
|
|
Basic = POINTER TO EXTENSIBLE RECORD (Type)
|
|
Basic = POINTER TO EXTENSIBLE RECORD (Type)
|
|
- name : FileNames.NameString;
|
|
|
|
|
|
+ name : CharOpen;
|
|
END;
|
|
END;
|
|
|
|
|
|
Enum = POINTER TO EXTENSIBLE RECORD (Type)
|
|
Enum = POINTER TO EXTENSIBLE RECORD (Type)
|
|
@@ -202,7 +213,7 @@ MODULE Browse;
|
|
END;
|
|
END;
|
|
|
|
|
|
Proc = POINTER TO EXTENSIBLE RECORD (Type)
|
|
Proc = POINTER TO EXTENSIBLE RECORD (Type)
|
|
- fName : FileNames.NameString;
|
|
|
|
|
|
+ fName : CharOpen;
|
|
retType : Type;
|
|
retType : Type;
|
|
retTypeNum : INTEGER;
|
|
retTypeNum : INTEGER;
|
|
noModes : BOOLEAN;
|
|
noModes : BOOLEAN;
|
|
@@ -225,7 +236,7 @@ MODULE Browse;
|
|
END;
|
|
END;
|
|
|
|
|
|
ConstDesc = POINTER TO RECORD (Desc)
|
|
ConstDesc = POINTER TO RECORD (Desc)
|
|
- val : LitValue;
|
|
|
|
|
|
+ val : AbsValue;
|
|
END;
|
|
END;
|
|
|
|
|
|
TypeDesc = POINTER TO EXTENSIBLE RECORD (Desc)
|
|
TypeDesc = POINTER TO EXTENSIBLE RECORD (Desc)
|
|
@@ -249,9 +260,9 @@ MODULE Browse;
|
|
END;
|
|
END;
|
|
|
|
|
|
Module = POINTER TO RECORD
|
|
Module = POINTER TO RECORD
|
|
- name : FileNames.NameString;
|
|
|
|
- symName : FileNames.NameString;
|
|
|
|
- fName : FileNames.NameString;
|
|
|
|
|
|
+ name : CharOpen;
|
|
|
|
+ symName : CharOpen;
|
|
|
|
+ fName : CharOpen;
|
|
pathName : GPFiles.FileNameArray;
|
|
pathName : GPFiles.FileNameArray;
|
|
imports : ModList;
|
|
imports : ModList;
|
|
consts : DescList;
|
|
consts : DescList;
|
|
@@ -279,25 +290,19 @@ MODULE Browse;
|
|
HtmlOutput = POINTER TO RECORD (FileOutput)
|
|
HtmlOutput = POINTER TO RECORD (FileOutput)
|
|
END;
|
|
END;
|
|
|
|
|
|
-(* ============================================================ *)
|
|
|
|
-
|
|
|
|
- TYPE
|
|
|
|
-
|
|
|
|
- CharOpen = POINTER TO ARRAY OF CHAR;
|
|
|
|
-
|
|
|
|
(* ============================================================ *)
|
|
(* ============================================================ *)
|
|
|
|
|
|
VAR
|
|
VAR
|
|
args, argNo : INTEGER;
|
|
args, argNo : INTEGER;
|
|
- fileName, modName : FileNames.NameString;
|
|
|
|
- printFNames, doAll, verbatim, hexCon, alpha : BOOLEAN;
|
|
|
|
|
|
+ fileName, modName : CharOpen;
|
|
|
|
+ printFNames, doAll, verbatim, verbose, hexCon, alpha : BOOLEAN;
|
|
file : GPBinFiles.FILE;
|
|
file : GPBinFiles.FILE;
|
|
sSym : INTEGER;
|
|
sSym : INTEGER;
|
|
cAtt : CHAR;
|
|
cAtt : CHAR;
|
|
iAtt : INTEGER;
|
|
iAtt : INTEGER;
|
|
lAtt : LONGINT;
|
|
lAtt : LONGINT;
|
|
rAtt : REAL;
|
|
rAtt : REAL;
|
|
- sAtt : FileNames.NameString;
|
|
|
|
|
|
+ sAtt : CharOpen;
|
|
typeList : TypeList;
|
|
typeList : TypeList;
|
|
accArray : ARRAY 4 OF CHAR;
|
|
accArray : ARRAY 4 OF CHAR;
|
|
outExt : ARRAY 6 OF CHAR;
|
|
outExt : ARRAY 6 OF CHAR;
|
|
@@ -352,7 +357,7 @@ MODULE Browse;
|
|
(* ============================================================ *)
|
|
(* ============================================================ *)
|
|
(* ============================================================ *)
|
|
(* ============================================================ *)
|
|
|
|
|
|
- PROCEDURE GetModule(name : FileNames.NameString) : Module;
|
|
|
|
|
|
+ PROCEDURE GetModule(name : CharOpen) : Module;
|
|
VAR
|
|
VAR
|
|
i : INTEGER;
|
|
i : INTEGER;
|
|
tmp : POINTER TO ARRAY OF Module;
|
|
tmp : POINTER TO ARRAY OF Module;
|
|
@@ -360,7 +365,7 @@ MODULE Browse;
|
|
BEGIN
|
|
BEGIN
|
|
ASSERT(modList.list # NIL);
|
|
ASSERT(modList.list # NIL);
|
|
FOR i := 0 TO modList.tide-1 DO
|
|
FOR i := 0 TO modList.tide-1 DO
|
|
- IF modList.list[i].name = name THEN RETURN modList.list[i] END;
|
|
|
|
|
|
+ IF modList.list[i].name^ = name^ THEN RETURN modList.list[i] END;
|
|
END;
|
|
END;
|
|
IF modList.tide >= LEN(modList.list) THEN
|
|
IF modList.tide >= LEN(modList.list) THEN
|
|
tmp := modList.list;
|
|
tmp := modList.list;
|
|
@@ -373,7 +378,7 @@ MODULE Browse;
|
|
mod.systemMod := FALSE;
|
|
mod.systemMod := FALSE;
|
|
mod.progArg := FALSE;
|
|
mod.progArg := FALSE;
|
|
mod.name := name;
|
|
mod.name := name;
|
|
- mod.symName := name + symExt;
|
|
|
|
|
|
+ mod.symName := BOX(name^ + symExt);
|
|
modList.list[modList.tide] := mod;
|
|
modList.list[modList.tide] := mod;
|
|
INC(modList.tide);
|
|
INC(modList.tide);
|
|
RETURN mod;
|
|
RETURN mod;
|
|
@@ -465,94 +470,60 @@ MODULE Browse;
|
|
|
|
|
|
(* ======================================= *)
|
|
(* ======================================= *)
|
|
|
|
|
|
- PROCEDURE ReadUTF(OUT nam : ARRAY OF CHAR);
|
|
|
|
|
|
+ PROCEDURE readUTF() : CharOpen;
|
|
CONST
|
|
CONST
|
|
- bad = "Bad UTF-8 string";
|
|
|
|
|
|
+ bad = "Bad UTF-8 string";
|
|
VAR num : INTEGER;
|
|
VAR num : INTEGER;
|
|
- bNm : INTEGER;
|
|
|
|
- idx : INTEGER;
|
|
|
|
- chr : INTEGER;
|
|
|
|
|
|
+ bNm : INTEGER;
|
|
|
|
+ len : INTEGER;
|
|
|
|
+ idx : INTEGER;
|
|
|
|
+ chr : INTEGER;
|
|
|
|
+ buff : CharOpen;
|
|
BEGIN
|
|
BEGIN
|
|
num := 0;
|
|
num := 0;
|
|
- bNm := read() * 256 + read();
|
|
|
|
- FOR idx := 0 TO bNm-1 DO
|
|
|
|
- chr := read();
|
|
|
|
|
|
+ (*
|
|
|
|
+ * bNm is the length in bytes of the UTF8 representation
|
|
|
|
+ *)
|
|
|
|
+ len := read() * 256 + read(); (* max length 65k *)
|
|
|
|
+ (*
|
|
|
|
+ * Worst case the number of chars will equal byte-number.
|
|
|
|
+ *)
|
|
|
|
+ NEW(buff, len + 1);
|
|
|
|
+ idx := 0;
|
|
|
|
+ WHILE idx < len DO
|
|
|
|
+ chr := read(); INC(idx);
|
|
IF chr <= 07FH THEN (* [0xxxxxxx] *)
|
|
IF chr <= 07FH THEN (* [0xxxxxxx] *)
|
|
- nam[num] := CHR(chr); INC(num);
|
|
|
|
|
|
+ buff[num] := CHR(chr); INC(num);
|
|
ELSIF chr DIV 32 = 06H THEN (* [110xxxxx,10xxxxxx] *)
|
|
ELSIF chr DIV 32 = 06H THEN (* [110xxxxx,10xxxxxx] *)
|
|
- bNm := chr MOD 32 * 64;
|
|
|
|
- chr := read();
|
|
|
|
- IF chr DIV 64 = 02H THEN
|
|
|
|
- nam[num] := CHR(bNm + chr MOD 64); INC(num);
|
|
|
|
- ELSE
|
|
|
|
- RTS.Throw(bad);
|
|
|
|
- END;
|
|
|
|
|
|
+ bNm := chr MOD 32 * 64;
|
|
|
|
+ chr := read(); INC(idx);
|
|
|
|
+ IF chr DIV 64 = 02H THEN
|
|
|
|
+ buff[num] := CHR(bNm + chr MOD 64); INC(num);
|
|
|
|
+ ELSE
|
|
|
|
+ RTS.Throw(bad);
|
|
|
|
+ END;
|
|
ELSIF chr DIV 16 = 0EH THEN (* [1110xxxx,10xxxxxx,10xxxxxxx] *)
|
|
ELSIF chr DIV 16 = 0EH THEN (* [1110xxxx,10xxxxxx,10xxxxxxx] *)
|
|
- bNm := chr MOD 16 * 64;
|
|
|
|
- chr := read();
|
|
|
|
- IF chr DIV 64 = 02H THEN
|
|
|
|
- bNm := (bNm + chr MOD 64) * 64;
|
|
|
|
- chr := read();
|
|
|
|
- IF chr DIV 64 = 02H THEN
|
|
|
|
- nam[num] := CHR(bNm + chr MOD 64); INC(num);
|
|
|
|
- ELSE
|
|
|
|
- RTS.Throw(bad);
|
|
|
|
- END;
|
|
|
|
- ELSE
|
|
|
|
- RTS.Throw(bad);
|
|
|
|
- END;
|
|
|
|
|
|
+ bNm := chr MOD 16 * 64;
|
|
|
|
+ chr := read(); INC(idx);
|
|
|
|
+ IF chr DIV 64 = 02H THEN
|
|
|
|
+ bNm := (bNm + chr MOD 64) * 64;
|
|
|
|
+ chr := read(); INC(idx);
|
|
|
|
+ IF chr DIV 64 = 02H THEN
|
|
|
|
+ buff[num] := CHR(bNm + chr MOD 64); INC(num);
|
|
|
|
+ ELSE
|
|
|
|
+ RTS.Throw(bad);
|
|
|
|
+ END;
|
|
|
|
+ ELSE
|
|
|
|
+ RTS.Throw(bad);
|
|
|
|
+ END;
|
|
ELSE
|
|
ELSE
|
|
- RTS.Throw(bad);
|
|
|
|
|
|
+ RTS.Throw(bad);
|
|
END;
|
|
END;
|
|
END;
|
|
END;
|
|
- nam[num] := 0X;
|
|
|
|
- END ReadUTF;
|
|
|
|
|
|
+ buff[num] := 0X;
|
|
|
|
+ RETURN LitValue.arrToCharOpen(buff, num);
|
|
|
|
+ END readUTF;
|
|
|
|
|
|
-(* ======================================= *)
|
|
|
|
-(*
|
|
|
|
- * PROCEDURE ReadUTF(OUT nam : ARRAY OF CHAR);
|
|
|
|
- * CONST
|
|
|
|
- * bad = "Bad UTF-8 string";
|
|
|
|
- * VAR num : INTEGER;
|
|
|
|
- * bNm : INTEGER;
|
|
|
|
- * idx : INTEGER;
|
|
|
|
- * chr : INTEGER;
|
|
|
|
- * BEGIN
|
|
|
|
- * num := 0;
|
|
|
|
- * bNm := read() * 256 + read();
|
|
|
|
- * FOR idx := 0 TO bNm-1 DO
|
|
|
|
- * chr := read();
|
|
|
|
- * IF chr <= 07FH THEN
|
|
|
|
- * nam[num] := CHR(chr); INC(num);
|
|
|
|
- * ELSIF chr DIV 32 = 06H THEN
|
|
|
|
- * bNm := chr MOD 32 * 64;
|
|
|
|
- * chr := read();
|
|
|
|
- * IF chr DIV 64 = 02H THEN
|
|
|
|
- * nam[num] := CHR(bNm + chr DIV 64); INC(num);
|
|
|
|
- * ELSE
|
|
|
|
- * RTS.Throw(bad);
|
|
|
|
- * END;
|
|
|
|
- * ELSIF chr DIV 16 = 0EH THEN
|
|
|
|
- * bNm := chr MOD 16 * 64;
|
|
|
|
- * chr := read();
|
|
|
|
- * IF chr DIV 64 = 02H THEN
|
|
|
|
- * bNm := bNm + chr DIV 64;
|
|
|
|
- * chr := read();
|
|
|
|
- * IF chr DIV 64 = 02H THEN
|
|
|
|
- * nam[num] := CHR(bNm + chr DIV 64); INC(num);
|
|
|
|
- * ELSE
|
|
|
|
- * RTS.Throw(bad);
|
|
|
|
- * END;
|
|
|
|
- * ELSE
|
|
|
|
- * RTS.Throw(bad);
|
|
|
|
- * END;
|
|
|
|
- * ELSE
|
|
|
|
- * RTS.Throw(bad);
|
|
|
|
- * END;
|
|
|
|
- * END;
|
|
|
|
- * nam[num] := 0X;
|
|
|
|
- * END ReadUTF;
|
|
|
|
- *)
|
|
|
|
(* ======================================= *)
|
|
(* ======================================= *)
|
|
|
|
|
|
PROCEDURE readChar() : CHAR;
|
|
PROCEDURE readChar() : CHAR;
|
|
@@ -613,9 +584,10 @@ MODULE Browse;
|
|
sSym := read();
|
|
sSym := read();
|
|
CASE sSym OF
|
|
CASE sSym OF
|
|
| namSy :
|
|
| namSy :
|
|
- iAtt := read(); ReadUTF(sAtt);
|
|
|
|
|
|
+ iAtt := read();
|
|
|
|
+ sAtt := readUTF();
|
|
| strSy :
|
|
| strSy :
|
|
- ReadUTF(sAtt);
|
|
|
|
|
|
+ sAtt := readUTF();
|
|
| retSy, fromS, tDefS, basSy :
|
|
| retSy, fromS, tDefS, basSy :
|
|
iAtt := readOrd();
|
|
iAtt := readOrd();
|
|
| bytSy :
|
|
| bytSy :
|
|
@@ -649,7 +621,7 @@ MODULE Browse;
|
|
|
|
|
|
(* ============================================ *)
|
|
(* ============================================ *)
|
|
|
|
|
|
- PROCEDURE GetLiteral(VAR lit : LitValue);
|
|
|
|
|
|
+ PROCEDURE GetLiteral(VAR lit : AbsValue);
|
|
VAR
|
|
VAR
|
|
b : BoolValue;
|
|
b : BoolValue;
|
|
n : NumValue;
|
|
n : NumValue;
|
|
@@ -696,7 +668,7 @@ MODULE Browse;
|
|
par.typeNum := readOrd();
|
|
par.typeNum := readOrd();
|
|
GetSym();
|
|
GetSym();
|
|
IF sSym = strSy THEN
|
|
IF sSym = strSy THEN
|
|
- par.opNm := BOX(sAtt);
|
|
|
|
|
|
+ par.opNm := sAtt;
|
|
GetSym();
|
|
GetSym();
|
|
END;
|
|
END;
|
|
AddPar(p.pars,par);
|
|
AddPar(p.pars,par);
|
|
@@ -824,9 +796,6 @@ MODULE Browse;
|
|
BEGIN
|
|
BEGIN
|
|
NEW(rec);
|
|
NEW(rec);
|
|
rec.recAtt := read();
|
|
rec.recAtt := read();
|
|
-(*
|
|
|
|
- IF rec.recAtt >=8 THEN rec.recAtt := rec.recAtt - 8; END;
|
|
|
|
-*)
|
|
|
|
rec.isAnonRec := FALSE;
|
|
rec.isAnonRec := FALSE;
|
|
GetSym(); (* Get past recSy rAtt *)
|
|
GetSym(); (* Get past recSy rAtt *)
|
|
IF (sSym = falSy) OR (sSym = truSy) THEN
|
|
IF (sSym = falSy) OR (sSym = truSy) THEN
|
|
@@ -883,10 +852,10 @@ MODULE Browse;
|
|
mth.fName := sAtt;
|
|
mth.fName := sAtt;
|
|
GetSym();
|
|
GetSym();
|
|
ELSE
|
|
ELSE
|
|
- mth.fName[0] := 0X;
|
|
|
|
|
|
+ mth.fName := NIL;
|
|
END;
|
|
END;
|
|
IF sSym = namSy THEN
|
|
IF sSym = namSy THEN
|
|
- mth.recName := BOX(sAtt);
|
|
|
|
|
|
+ mth.recName := sAtt;
|
|
GetSym();
|
|
GetSym();
|
|
END;
|
|
END;
|
|
GetFormalType(mth);
|
|
GetFormalType(mth);
|
|
@@ -933,7 +902,7 @@ MODULE Browse;
|
|
namedType : Named;
|
|
namedType : Named;
|
|
f : VarDesc;
|
|
f : VarDesc;
|
|
rec : Record;
|
|
rec : Record;
|
|
- impName : FileNames.NameString;
|
|
|
|
|
|
+ impName : CharOpen;
|
|
i,j : INTEGER;
|
|
i,j : INTEGER;
|
|
BEGIN
|
|
BEGIN
|
|
GetSym();
|
|
GetSym();
|
|
@@ -943,7 +912,7 @@ MODULE Browse;
|
|
ASSERT(typOrd # 0);
|
|
ASSERT(typOrd # 0);
|
|
ReadPast(tDefS);
|
|
ReadPast(tDefS);
|
|
modOrd := -1;
|
|
modOrd := -1;
|
|
- impName := "";
|
|
|
|
|
|
+ impName := BOX("");
|
|
(*
|
|
(*
|
|
* The fromS symbol appears if the type is imported.
|
|
* The fromS symbol appears if the type is imported.
|
|
*)
|
|
*)
|
|
@@ -1023,9 +992,6 @@ MODULE Browse;
|
|
ch0 := typ.declarer.name[0];
|
|
ch0 := typ.declarer.name[0];
|
|
IF (ch0 = "@") OR (ch0 = "$") THEN typ.declarer := NIL END;
|
|
IF (ch0 = "@") OR (ch0 = "$") THEN typ.declarer := NIL END;
|
|
END;
|
|
END;
|
|
-(*
|
|
|
|
- IF (typ IS Record) & (typ.declarer = NIL) THEN (* anon record *)
|
|
|
|
- *)
|
|
|
|
IF typ IS Record THEN
|
|
IF typ IS Record THEN
|
|
r := typ(Record);
|
|
r := typ(Record);
|
|
FOR j := 0 TO r.intrFaces.tide - 1 DO
|
|
FOR j := 0 TO r.intrFaces.tide - 1 DO
|
|
@@ -1033,32 +999,14 @@ MODULE Browse;
|
|
r.intrFaces.list[j](TypeDesc).type := typeList[k];
|
|
r.intrFaces.list[j](TypeDesc).type := typeList[k];
|
|
END;
|
|
END;
|
|
IF typ.declarer = NIL THEN (* anon record *)
|
|
IF typ.declarer = NIL THEN (* anon record *)
|
|
-(*
|
|
|
|
- Console.WriteString("Type ");
|
|
|
|
- Console.WriteInt(i,1);
|
|
|
|
- Console.WriteString(" is an AnonRecord ");
|
|
|
|
- Console.WriteLn;
|
|
|
|
- *)
|
|
|
|
typ(Record).isAnonRec := TRUE;
|
|
typ(Record).isAnonRec := TRUE;
|
|
END;
|
|
END;
|
|
ELSIF (typ IS Pointer) & (typ(Pointer).baseType IS Record) THEN
|
|
ELSIF (typ IS Pointer) & (typ(Pointer).baseType IS Record) THEN
|
|
IF (typ.declarer = NIL) & (typ.importedFrom = NIL) THEN
|
|
IF (typ.declarer = NIL) & (typ.importedFrom = NIL) THEN
|
|
-(*
|
|
|
|
- Console.WriteString("Type ");
|
|
|
|
- Console.WriteInt(i,1);
|
|
|
|
- Console.WriteString(" is an AnonPointer ");
|
|
|
|
- Console.WriteLn;
|
|
|
|
- *)
|
|
|
|
typ(Pointer).isAnonPointer := TRUE;
|
|
typ(Pointer).isAnonPointer := TRUE;
|
|
END;
|
|
END;
|
|
r := typ(Pointer).baseType(Record);
|
|
r := typ(Pointer).baseType(Record);
|
|
IF (r.declarer = NIL) THEN (* anon record *)
|
|
IF (r.declarer = NIL) THEN (* anon record *)
|
|
-(*
|
|
|
|
- Console.WriteString("Type ");
|
|
|
|
- Console.WriteInt(i,1);
|
|
|
|
- Console.WriteString(" is an Pointer to anon record - fixing");
|
|
|
|
- Console.WriteLn;
|
|
|
|
- *)
|
|
|
|
r.isAnonRec := TRUE;
|
|
r.isAnonRec := TRUE;
|
|
r.ptrType := typ(Pointer);
|
|
r.ptrType := typ(Pointer);
|
|
END;
|
|
END;
|
|
@@ -1150,14 +1098,14 @@ MODULE Browse;
|
|
GetSym();
|
|
GetSym();
|
|
NEW(procDesc.pType);
|
|
NEW(procDesc.pType);
|
|
IF sSym = strSy THEN
|
|
IF sSym = strSy THEN
|
|
- IF sAtt = "<init>" THEN
|
|
|
|
- procDesc.pType.fName := "< init >";
|
|
|
|
|
|
+ IF sAtt^ = "<init>" THEN
|
|
|
|
+ procDesc.pType.fName := BOX("< init >");
|
|
ELSE
|
|
ELSE
|
|
procDesc.pType.fName := sAtt;
|
|
procDesc.pType.fName := sAtt;
|
|
END;
|
|
END;
|
|
GetSym();
|
|
GetSym();
|
|
ELSE
|
|
ELSE
|
|
- procDesc.pType.fName[0] := 0X;
|
|
|
|
|
|
+ procDesc.pType.fName := NIL;
|
|
END;
|
|
END;
|
|
IF sSym = truSy THEN
|
|
IF sSym = truSy THEN
|
|
procDesc.pType.isConstructor := TRUE;
|
|
procDesc.pType.isConstructor := TRUE;
|
|
@@ -1192,11 +1140,11 @@ MODULE Browse;
|
|
AddMod(mod.imports,mod);
|
|
AddMod(mod.imports,mod);
|
|
ReadPast(modSy);
|
|
ReadPast(modSy);
|
|
IF sSym = namSy THEN (* do something with f.sAtt *)
|
|
IF sSym = namSy THEN (* do something with f.sAtt *)
|
|
- IF mod.name # sAtt THEN
|
|
|
|
|
|
+ IF mod.name^ # sAtt^ THEN
|
|
Error.WriteString("Wrong name in symbol file. Expected <");
|
|
Error.WriteString("Wrong name in symbol file. Expected <");
|
|
- Error.WriteString(mod.name + ">, found <");
|
|
|
|
- Error.WriteString(sAtt + ">");
|
|
|
|
- Error.WriteLn;
|
|
|
|
|
|
+ Error.WriteString(mod.name^ + ">, found <");
|
|
|
|
+ Error.WriteString(sAtt^ + ">");
|
|
|
|
+ Error.WriteLn;
|
|
HALT(1);
|
|
HALT(1);
|
|
END;
|
|
END;
|
|
GetSym();
|
|
GetSym();
|
|
@@ -1206,11 +1154,11 @@ MODULE Browse;
|
|
mod.fName := sAtt;
|
|
mod.fName := sAtt;
|
|
GetSym();
|
|
GetSym();
|
|
IF (sSym = falSy) OR (sSym = truSy) THEN
|
|
IF (sSym = falSy) OR (sSym = truSy) THEN
|
|
- GetSym();
|
|
|
|
|
|
+ GetSym();
|
|
ELSE RTS.Throw("Bad explicit name");
|
|
ELSE RTS.Throw("Bad explicit name");
|
|
END;
|
|
END;
|
|
ELSE
|
|
ELSE
|
|
- mod.fName[0] := 0X;
|
|
|
|
|
|
+ mod.fName := NIL;
|
|
END;
|
|
END;
|
|
(*
|
|
(*
|
|
* Optional strong name info.
|
|
* Optional strong name info.
|
|
@@ -1262,23 +1210,23 @@ MODULE Browse;
|
|
|
|
|
|
(* ============================================================ *)
|
|
(* ============================================================ *)
|
|
|
|
|
|
- PROCEDURE GetSymAndModNames*(VAR symName : FileNames.NameString;
|
|
|
|
- OUT modName : FileNames.NameString);
|
|
|
|
|
|
+ PROCEDURE GetSymAndModNames(VAR symName : CharOpen;
|
|
|
|
+ OUT modName : CharOpen);
|
|
VAR i,j : INTEGER;
|
|
VAR i,j : INTEGER;
|
|
ok : BOOLEAN;
|
|
ok : BOOLEAN;
|
|
BEGIN
|
|
BEGIN
|
|
- modName := symName;
|
|
|
|
|
|
+ modName := BOX(symName^);
|
|
i := 0;
|
|
i := 0;
|
|
WHILE ((i < LEN(symName)) & (symName[i] # '.') &
|
|
WHILE ((i < LEN(symName)) & (symName[i] # '.') &
|
|
(symName[i] # 0X)) DO INC(i); END;
|
|
(symName[i] # 0X)) DO INC(i); END;
|
|
IF (i >= LEN(symName)) OR (symName[i] # '.') THEN
|
|
IF (i >= LEN(symName)) OR (symName[i] # '.') THEN
|
|
- symName := symName + symExt;
|
|
|
|
|
|
+ symName := BOX(symName^ + symExt);
|
|
ELSE
|
|
ELSE
|
|
modName[i] := 0X;
|
|
modName[i] := 0X;
|
|
END;
|
|
END;
|
|
END GetSymAndModNames;
|
|
END GetSymAndModNames;
|
|
|
|
|
|
- PROCEDURE Parse*();
|
|
|
|
|
|
+ PROCEDURE Parse();
|
|
VAR
|
|
VAR
|
|
marker,modIx,i : INTEGER;
|
|
marker,modIx,i : INTEGER;
|
|
mod : Module;
|
|
mod : Module;
|
|
@@ -1292,9 +1240,9 @@ MODULE Browse;
|
|
IF file = NIL THEN
|
|
IF file = NIL THEN
|
|
file := GPBinFiles.findOnPath("CPSYM", mod.symName);
|
|
file := GPBinFiles.findOnPath("CPSYM", mod.symName);
|
|
IF (file = NIL) OR (mod.progArg) THEN
|
|
IF (file = NIL) OR (mod.progArg) THEN
|
|
- Error.WriteString("File <" + mod.symName + "> not found");
|
|
|
|
|
|
+ Error.WriteString("File <" + mod.symName^ + "> not found");
|
|
Error.WriteLn;
|
|
Error.WriteLn;
|
|
- HALT(1);
|
|
|
|
|
|
+ HALT(1);
|
|
END;
|
|
END;
|
|
mod.pathName := GPBinFiles.getFullPathName(file);
|
|
mod.pathName := GPBinFiles.getFullPathName(file);
|
|
i := 0;
|
|
i := 0;
|
|
@@ -1307,12 +1255,15 @@ MODULE Browse;
|
|
ELSIF marker = RTS.loInt(syMag) THEN
|
|
ELSIF marker = RTS.loInt(syMag) THEN
|
|
mod.systemMod := TRUE;
|
|
mod.systemMod := TRUE;
|
|
ELSE
|
|
ELSE
|
|
- Error.WriteString("File <"+fileName+"> is not a valid symbol file");
|
|
|
|
|
|
+ Error.WriteString("File <" + fileName^ + "> is not a valid symbol file");
|
|
Error.WriteLn;
|
|
Error.WriteLn;
|
|
RETURN;
|
|
RETURN;
|
|
END;
|
|
END;
|
|
mod.print := TRUE;
|
|
mod.print := TRUE;
|
|
GetSym();
|
|
GetSym();
|
|
|
|
+ IF verbose THEN
|
|
|
|
+ Error.WriteString("Reading " + mod.name^); Error.WriteLn;
|
|
|
|
+ END;
|
|
SymFile(mod);
|
|
SymFile(mod);
|
|
GPBinFiles.CloseFile(file);
|
|
GPBinFiles.CloseFile(file);
|
|
END;
|
|
END;
|
|
@@ -1384,9 +1335,9 @@ BEGIN
|
|
END Indent;
|
|
END Indent;
|
|
|
|
|
|
PROCEDURE (o : Output) WriteImportedTypeName(impMod : Module;
|
|
PROCEDURE (o : Output) WriteImportedTypeName(impMod : Module;
|
|
- tName : ARRAY OF CHAR),NEW,EXTENSIBLE;
|
|
|
|
|
|
+ tName : ARRAY OF CHAR),NEW,EXTENSIBLE;
|
|
BEGIN
|
|
BEGIN
|
|
- Console.WriteString(impMod.name + "." + tName);
|
|
|
|
|
|
+ Console.WriteString(impMod.name^ + "." + tName);
|
|
END WriteImportedTypeName;
|
|
END WriteImportedTypeName;
|
|
|
|
|
|
PROCEDURE (o : Output) WriteTypeName(tName : ARRAY OF CHAR),NEW,EXTENSIBLE;
|
|
PROCEDURE (o : Output) WriteTypeName(tName : ARRAY OF CHAR),NEW,EXTENSIBLE;
|
|
@@ -1455,9 +1406,9 @@ BEGIN
|
|
END Indent;
|
|
END Indent;
|
|
|
|
|
|
PROCEDURE (f : FileOutput) WriteImportedTypeName(impMod : Module;
|
|
PROCEDURE (f : FileOutput) WriteImportedTypeName(impMod : Module;
|
|
- tName : ARRAY OF CHAR),EXTENSIBLE;
|
|
|
|
|
|
+ tName : ARRAY OF CHAR),EXTENSIBLE;
|
|
BEGIN
|
|
BEGIN
|
|
- GPText.WriteString(f.file,impMod.name + "." + tName);
|
|
|
|
|
|
+ GPText.WriteString(f.file,impMod.name^ + "." + tName);
|
|
END WriteImportedTypeName;
|
|
END WriteImportedTypeName;
|
|
|
|
|
|
PROCEDURE (f : FileOutput) WriteTypeName(tName : ARRAY OF CHAR),EXTENSIBLE;
|
|
PROCEDURE (f : FileOutput) WriteTypeName(tName : ARRAY OF CHAR),EXTENSIBLE;
|
|
@@ -1560,7 +1511,7 @@ BEGIN
|
|
GPText.WriteString(h.file,'.html#type-');;
|
|
GPText.WriteString(h.file,'.html#type-');;
|
|
GPText.WriteString(h.file,tName);
|
|
GPText.WriteString(h.file,tName);
|
|
GPText.WriteString(h.file,'">');
|
|
GPText.WriteString(h.file,'">');
|
|
- GPText.WriteString(h.file,impMod.name + "." + tName);
|
|
|
|
|
|
+ GPText.WriteString(h.file,impMod.name^ + "." + tName);
|
|
GPText.WriteString(h.file,'</a>');
|
|
GPText.WriteString(h.file,'</a>');
|
|
END WriteImportedTypeName;
|
|
END WriteImportedTypeName;
|
|
|
|
|
|
@@ -1607,23 +1558,68 @@ END MethAnchor;
|
|
(* Format Helpers *)
|
|
(* Format Helpers *)
|
|
(* ==================================================================== *)
|
|
(* ==================================================================== *)
|
|
|
|
|
|
- PROCEDURE qStrOf(str : FileNames.NameString) : CharOpen;
|
|
|
|
|
|
+ PROCEDURE qStrOf(str : CharOpen) : CharOpen;
|
|
VAR len : INTEGER;
|
|
VAR len : INTEGER;
|
|
- res : CharOpen;
|
|
|
|
idx : INTEGER;
|
|
idx : INTEGER;
|
|
- dQt : BOOLEAN;
|
|
|
|
|
|
+ ord : INTEGER;
|
|
|
|
+ rslt : LitValue.CharVector;
|
|
|
|
+ (* -------------------------------------- *)
|
|
|
|
+ PROCEDURE hexDigit(d : INTEGER) : CHAR;
|
|
|
|
+ BEGIN
|
|
|
|
+ IF d < 10 THEN RETURN CHR(d + ORD('0'))
|
|
|
|
+ ELSE RETURN CHR(d-10 + ORD('a'));
|
|
|
|
+ END;
|
|
|
|
+ END hexDigit;
|
|
|
|
+ (* -------------------------------------- *)
|
|
|
|
+ PROCEDURE AppendHex2D(r : LitValue.CharVector; o : INTEGER);
|
|
|
|
+ BEGIN
|
|
|
|
+ APPEND(r, '\');
|
|
|
|
+ APPEND(r, 'x');
|
|
|
|
+ APPEND(r, hexDigit(o DIV 16 MOD 16));
|
|
|
|
+ APPEND(r, hexDigit(o MOD 16));
|
|
|
|
+ END AppendHex2D;
|
|
|
|
+ (* -------------------------------------- *)
|
|
|
|
+ PROCEDURE AppendUnicode(r : LitValue.CharVector; o : INTEGER);
|
|
|
|
+ BEGIN
|
|
|
|
+ APPEND(r, '\');
|
|
|
|
+ APPEND(r, 'u');
|
|
|
|
+ APPEND(r, hexDigit(o DIV 1000H MOD 16));
|
|
|
|
+ APPEND(r, hexDigit(o DIV 100H MOD 16));
|
|
|
|
+ APPEND(r, hexDigit(o DIV 10H MOD 16));
|
|
|
|
+ APPEND(r, hexDigit(o MOD 16));
|
|
|
|
+ END AppendUnicode;
|
|
|
|
+ (* -------------------------------------- *)
|
|
BEGIN
|
|
BEGIN
|
|
- dQt := FALSE;
|
|
|
|
- len := LEN(str$);
|
|
|
|
- FOR idx := 0 TO len-1 DO
|
|
|
|
- IF str[idx] = '"' THEN dQt := TRUE END;
|
|
|
|
- END;
|
|
|
|
- NEW(res, len+3);
|
|
|
|
- IF dQt THEN res[0] := "'" ELSE res[0] := '"' END;
|
|
|
|
- FOR idx := 1 TO len DO res[idx] := str[idx-1] END;
|
|
|
|
- IF dQt THEN res[len+1] := "'" ELSE res[len+1] := '"' END;
|
|
|
|
- res[len+2] := 0X;
|
|
|
|
- RETURN res;
|
|
|
|
|
|
+ (*
|
|
|
|
+ * Translate the string into ANSI-C like
|
|
|
|
+ * for human, rather than machine consumption.
|
|
|
|
+ *)
|
|
|
|
+ NEW(rslt, LEN(str) * 2);
|
|
|
|
+ APPEND(rslt, '"');
|
|
|
|
+ FOR idx := 0 TO LEN(str) - 2 DO
|
|
|
|
+ ord := ORD(str[idx]);
|
|
|
|
+ CASE ord OF
|
|
|
|
+ | 0 : APPEND(rslt, '\');
|
|
|
|
+ APPEND(rslt, '0');
|
|
|
|
+ | 9 : APPEND(rslt, '\');
|
|
|
|
+ APPEND(rslt, 't');
|
|
|
|
+ | 10 : APPEND(rslt, '\');
|
|
|
|
+ APPEND(rslt, 'n');
|
|
|
|
+ | 12 : APPEND(rslt, '\');
|
|
|
|
+ APPEND(rslt, 'r');
|
|
|
|
+ | ORD('"') :
|
|
|
|
+ APPEND(rslt, '/');
|
|
|
|
+ APPEND(rslt, '"');
|
|
|
|
+ ELSE
|
|
|
|
+ IF ord > 0FFH THEN AppendUnicode(rslt, ord);
|
|
|
|
+ ELSIF (ord > 07EH) OR (ord < ORD(' ')) THEN AppendHex2D(rslt, ord);
|
|
|
|
+ ELSE APPEND(rslt, CHR(ord));
|
|
|
|
+ END;
|
|
|
|
+ END;
|
|
|
|
+ END;
|
|
|
|
+ APPEND(rslt, '"');
|
|
|
|
+ APPEND(rslt, 0X);
|
|
|
|
+ RETURN LitValue.chrVecToCharOpen(rslt);
|
|
END qStrOf;
|
|
END qStrOf;
|
|
|
|
|
|
PROCEDURE hexOf(ch : CHAR) : CharOpen;
|
|
PROCEDURE hexOf(ch : CHAR) : CharOpen;
|
|
@@ -1709,7 +1705,7 @@ END MethAnchor;
|
|
RETURN i;
|
|
RETURN i;
|
|
END Length;
|
|
END Length;
|
|
|
|
|
|
- PROCEDURE (v : LitValue) Print(),NEW,EMPTY;
|
|
|
|
|
|
+ PROCEDURE (v : AbsValue) Print(),NEW,EMPTY;
|
|
|
|
|
|
PROCEDURE (n : NumValue) Print();
|
|
PROCEDURE (n : NumValue) Print();
|
|
BEGIN
|
|
BEGIN
|
|
@@ -2052,8 +2048,8 @@ END MethAnchor;
|
|
output.WriteKeyword("PROCEDURE ");
|
|
output.WriteKeyword("PROCEDURE ");
|
|
output.WriteIdent(p.declarer.name);
|
|
output.WriteIdent(p.declarer.name);
|
|
output.Write(accArray[p.declarer.access]);
|
|
output.Write(accArray[p.declarer.access]);
|
|
- IF printFNames & (p.fName[0] # 0X) THEN
|
|
|
|
- output.WriteString('["' + p.fName + '"]');
|
|
|
|
|
|
+ IF printFNames & (p.fName # NIL) THEN
|
|
|
|
+ output.WriteString('["' + p.fName^ + '"]');
|
|
INC(indent,Length(p.fName)+4);
|
|
INC(indent,Length(p.fName)+4);
|
|
END;
|
|
END;
|
|
PrintFormals(p,indent+11+Length(p.declarer.name));
|
|
PrintFormals(p,indent+11+Length(p.declarer.name));
|
|
@@ -2088,8 +2084,8 @@ END MethAnchor;
|
|
output.WriteString(") ");
|
|
output.WriteString(") ");
|
|
output.WriteIdent(m.declarer.name);
|
|
output.WriteIdent(m.declarer.name);
|
|
output.Write(accArray[m.declarer.access]);
|
|
output.Write(accArray[m.declarer.access]);
|
|
- IF printFNames & (m.fName[0] # 0X) THEN
|
|
|
|
- output.WriteString('["' + m.fName + '"]');
|
|
|
|
|
|
+ IF printFNames & (m.fName # NIL) THEN
|
|
|
|
+ output.WriteString('["' + m.fName^ + '"]');
|
|
INC(indent,Length(m.fName)+4);
|
|
INC(indent,Length(m.fName)+4);
|
|
END;
|
|
END;
|
|
PrintFormals(m, indent + 15 +
|
|
PrintFormals(m, indent + 15 +
|
|
@@ -2224,11 +2220,11 @@ END MethAnchor;
|
|
(* --------------------------- *)
|
|
(* --------------------------- *)
|
|
PROCEDURE WriteOptionalExtras(impMod : Module);
|
|
PROCEDURE WriteOptionalExtras(impMod : Module);
|
|
BEGIN
|
|
BEGIN
|
|
- IF impMod.fName[0] # 0X THEN
|
|
|
|
|
|
+ IF impMod.fName # NIL THEN
|
|
IF printFNames THEN
|
|
IF printFNames THEN
|
|
- output.WriteString(' (* "' + impMod.fName + '" *)');
|
|
|
|
|
|
+ output.WriteString(' (* "' + impMod.fName^ + '" *)');
|
|
ELSE
|
|
ELSE
|
|
- output.WriteString(' := "' + impMod.fName + '"');
|
|
|
|
|
|
+ output.WriteString(' := "' + impMod.fName^ + '"');
|
|
END;
|
|
END;
|
|
END;
|
|
END;
|
|
END WriteOptionalExtras;
|
|
END WriteOptionalExtras;
|
|
@@ -2242,7 +2238,7 @@ END MethAnchor;
|
|
output.WriteStart(mod);
|
|
output.WriteStart(mod);
|
|
IF mod.systemMod THEN
|
|
IF mod.systemMod THEN
|
|
heading := "SYSTEM ";
|
|
heading := "SYSTEM ";
|
|
- ELSIF mod.fName[0] # 0X THEN
|
|
|
|
|
|
+ ELSIF mod.fName # NIL THEN
|
|
heading := "FOREIGN ";
|
|
heading := "FOREIGN ";
|
|
ELSE
|
|
ELSE
|
|
heading := "";
|
|
heading := "";
|
|
@@ -2250,8 +2246,8 @@ END MethAnchor;
|
|
heading := heading + "MODULE ";
|
|
heading := heading + "MODULE ";
|
|
output.WriteKeyword(heading);
|
|
output.WriteKeyword(heading);
|
|
output.WriteIdent(mod.name);
|
|
output.WriteIdent(mod.name);
|
|
- IF printFNames & (mod.fName[0] # 0X) THEN
|
|
|
|
- output.WriteString(' ["' + mod.fName + '"]');
|
|
|
|
|
|
+ IF printFNames & (mod.fName # NIL) THEN
|
|
|
|
+ output.WriteString(' ["' + mod.fName^ + '"]');
|
|
END;
|
|
END;
|
|
output.Write(';');
|
|
output.Write(';');
|
|
(*
|
|
(*
|
|
@@ -2344,21 +2340,21 @@ END MethAnchor;
|
|
BEGIN
|
|
BEGIN
|
|
NEW(typeList,50);
|
|
NEW(typeList,50);
|
|
typeList[0] := NIL;
|
|
typeList[0] := NIL;
|
|
- NEW(t); t.name := "BOOLEAN"; typeList[1] := t;
|
|
|
|
- NEW(t); t.name := "SHORTCHAR"; typeList[2] := t;
|
|
|
|
- NEW(t); t.name := "CHAR"; typeList[3] := t;
|
|
|
|
- NEW(t); t.name := "BYTE"; typeList[4] := t;
|
|
|
|
- NEW(t); t.name := "SHORTINT"; typeList[5] := t;
|
|
|
|
- NEW(t); t.name := "INTEGER"; typeList[6] := t;
|
|
|
|
- NEW(t); t.name := "LONGINT"; typeList[7] := t;
|
|
|
|
- NEW(t); t.name := "SHORTREAL"; typeList[8] := t;
|
|
|
|
- NEW(t); t.name := "REAL"; typeList[9] := t;
|
|
|
|
- NEW(t); t.name := "SET"; typeList[10] := t;
|
|
|
|
- NEW(t); t.name := "ANYREC"; typeList[11] := t;
|
|
|
|
- NEW(t); t.name := "ANYPTR"; typeList[12] := t;
|
|
|
|
- NEW(t); t.name := "ARRAY OF CHAR"; typeList[13] := t;
|
|
|
|
- NEW(t); t.name := "ARRAY OF SHORTCHAR"; typeList[14] := t;
|
|
|
|
- NEW(t); t.name := "UBYTE"; typeList[15] := t;
|
|
|
|
|
|
+ NEW(t); t.name := BOX("BOOLEAN"); typeList[1] := t;
|
|
|
|
+ NEW(t); t.name := BOX("SHORTCHAR"); typeList[2] := t;
|
|
|
|
+ NEW(t); t.name := BOX("CHAR"); typeList[3] := t;
|
|
|
|
+ NEW(t); t.name := BOX("BYTE"); typeList[4] := t;
|
|
|
|
+ NEW(t); t.name := BOX("SHORTINT"); typeList[5] := t;
|
|
|
|
+ NEW(t); t.name := BOX("INTEGER"); typeList[6] := t;
|
|
|
|
+ NEW(t); t.name := BOX("LONGINT"); typeList[7] := t;
|
|
|
|
+ NEW(t); t.name := BOX("SHORTREAL"); typeList[8] := t;
|
|
|
|
+ NEW(t); t.name := BOX("REAL"); typeList[9] := t;
|
|
|
|
+ NEW(t); t.name := BOX("SET"); typeList[10] := t;
|
|
|
|
+ NEW(t); t.name := BOX("ANYREC"); typeList[11] := t;
|
|
|
|
+ NEW(t); t.name := BOX("ANYPTR"); typeList[12] := t;
|
|
|
|
+ NEW(t); t.name := BOX("ARRAY OF CHAR"); typeList[13] := t;
|
|
|
|
+ NEW(t); t.name := BOX("ARRAY OF SHORTCHAR"); typeList[14] := t;
|
|
|
|
+ NEW(t); t.name := BOX("UBYTE"); typeList[15] := t;
|
|
(*
|
|
(*
|
|
* NEW(t); t.name := "SPECIAL"; typeList[16] := t;
|
|
* NEW(t); t.name := "SPECIAL"; typeList[16] := t;
|
|
*)
|
|
*)
|
|
@@ -2467,8 +2463,14 @@ BEGIN
|
|
ELSE
|
|
ELSE
|
|
BadOption(option);
|
|
BadOption(option);
|
|
END;
|
|
END;
|
|
- ELSIF option = "-verbatim" THEN
|
|
|
|
- verbatim := TRUE;
|
|
|
|
|
|
+ ELSIF option[1] = 'v' THEN
|
|
|
|
+ IF option = "-verbatim" THEN
|
|
|
|
+ verbatim := TRUE;
|
|
|
|
+ ELSIF option = "-verbose" THEN
|
|
|
|
+ verbose := TRUE;
|
|
|
|
+ ELSE
|
|
|
|
+ BadOption(option);
|
|
|
|
+ END;
|
|
ELSIF option = "-all" THEN
|
|
ELSIF option = "-all" THEN
|
|
doAll := TRUE;
|
|
doAll := TRUE;
|
|
ELSIF option = "-hex" THEN
|
|
ELSIF option = "-hex" THEN
|
|
@@ -2503,7 +2505,7 @@ BEGIN
|
|
output.thisMod := modList.list[i];
|
|
output.thisMod := modList.list[i];
|
|
IF output IS FileOutput THEN
|
|
IF output IS FileOutput THEN
|
|
output(FileOutput).file :=
|
|
output(FileOutput).file :=
|
|
- GPTextFiles.createFile(modList.list[i].name + outExt);
|
|
|
|
|
|
+ GPTextFiles.createFile(modList.list[i].name^ + outExt);
|
|
END;
|
|
END;
|
|
PrintModule(modList.list[i]);
|
|
PrintModule(modList.list[i]);
|
|
IF output IS FileOutput THEN
|
|
IF output IS FileOutput THEN
|
|
@@ -2517,6 +2519,8 @@ RESCUE (x)
|
|
END Print;
|
|
END Print;
|
|
|
|
|
|
BEGIN
|
|
BEGIN
|
|
|
|
+ NEW(fileName, 256);
|
|
|
|
+ NEW(modName, 256);
|
|
InitTypes();
|
|
InitTypes();
|
|
InitAccArray();
|
|
InitAccArray();
|
|
modList.tide := 0;
|
|
modList.tide := 0;
|