Petscii translation in stdio and conio

This commit is contained in:
drmortalwombat 2021-10-12 17:54:10 +02:00
parent da57ae00c5
commit 5372d49b50
10 changed files with 243 additions and 263 deletions

View File

@ -23,7 +23,7 @@ The goal is to implement the actual C standard and not some subset for performan
## Limits and Errors
After four weeks, the compiler has now matured significantly. There are still several open areas.
There are still several open areas, but most targets have been reached. The current Dhrystone performance is 35 iterations per second with byte code (12259) and 203 iterations with native code (13572 Bytes).
### Language
@ -76,6 +76,19 @@ The compiler is command line driven, and creates an executable .prg file.
A list of source files can be provided.
## Console input and output
The C64 does not use ASCII it uses a derivative called PETSCII. There are two fonts, one with uppercase and one with uppercase and lowercase characters. It also used CR (13) as line terminator instead of LF (10). The stdio and conio libaries can perform translations.
The translation mode is selected in conio with the variable "giocharmap" and the function "iocharmap" which will also switch the font.
iocharmap(IOCHM_PETSCII_2);
printf("Hello World\");
Will switch to the lowercase PETSCII font and translate the strings while printing.
Input from the console will also be translated accordingly.
## Inline Assembler
Inline assembler can be embedded inside of any functions, regardles of their compilation target of byte code or native.

View File

@ -23,21 +23,21 @@ enum VICColors
{
VCOL_BLACK,
VCOL_WHITE,
BCOL_RED,
BCOL_CYAN,
BCOL_PURPLE,
BCOL_GREEN,
BCOL_BLUE,
BCOL_YELLOW,
VCOL_RED,
VCOL_CYAN,
VCOL_PURPLE,
VCOL_GREEN,
VCOL_BLUE,
VCOL_YELLOW,
BCOL_ORANGE,
BCOL_BROWN,
BCOL_LT_RED,
BCOL_DARK_GREY,
BCOL_MED_GREY,
BCOL_LT_GREEN,
BCOL_LT_BLUE,
BCOL_LT_GREY
VCOL_ORANGE,
VCOL_BROWN,
VCOL_LT_RED,
VCOL_DARK_GREY,
VCOL_MED_GREY,
VCOL_LT_GREEN,
VCOL_LT_BLUE,
VCOL_LT_GREY
};
struct VIC

View File

@ -1,5 +1,75 @@
#include "conio.h"
static IOCharMap giocharmap = IOCHM_ASCII;
void iocharmap(IOCharMap chmap)
{
giocharmap = chmap;
if (chmap == IOCHM_PETSCII_1)
putchar(128 + 14);
else if (chmap == IOCHM_PETSCII_2)
putchar(14);
}
__asm putpch
{
ldx giocharmap
cpx #IOCHM_ASCII
bcc w3
cmp #10
bne w1
lda #13
w1:
cpx #IOCHM_PETSCII_1
bcc w3
cmp #65
bcc w3
cmp #123
bcs w3
cmp #97
bcs w2
cmp #91
bcs w3
w2:
eor #$20
cpx #IOCHM_PETSCII_2
beq w3
and #$df
w3:
jmp 0xffd2
}
__asm getpch
{
jsr 0xffe4
ldx giocharmap
cpx #IOCHM_ASCII
bcc w3
cmp #13
bne w1
lda #10
w1:
cpx #IOCHM_PETSCII_1
bcc w3
cmp #65
bcc w3
cmp #123
bcs w3
cmp #97
bcs w2
cmp #91
bcs w3
w2:
eor #$20
w3:
}
int kbhit(void)
{
__asm
@ -16,12 +86,12 @@ int getche(void)
__asm
{
L1:
jsr $ffe4
jsr getpch
cmp #0
beq L1
sta accu
jsr $ffd2
jsr putpch
lda #0
sta accu + 1
}
@ -33,7 +103,7 @@ int getch(void)
__asm
{
L1:
jsr $ffe4
jsr getpch
cmp #0
beq L1
@ -60,16 +130,17 @@ void clrscr(void)
}
}
void gotoxy(int x, int y)
void textcursor(bool show)
{
*(char *)0xcc = show ? 0 : 1;
}
void gotoxy(int cx, int cy)
{
__asm
{
ldy #y
lda (fp), y
tax
ldy #x
lda (fp), y
tay
ldy cy
ldx cx
clc
jsr $fff0
}
@ -79,8 +150,7 @@ void textcolor(int c)
{
__asm
{
ldy #c
lda (fp), y
lda c
sta $0286
}
}

View File

@ -1,6 +1,24 @@
#ifndef CONIO_H
#define CONIO_H
enum IOCharMap
{
IOCHM_TRANSPARENT,
IOCHM_ASCII,
IOCHM_PETSCII_1,
IOCHM_PETSCII_2
};
extern IOCharMap giocharmap;
// Switch character map to transparent bypass, petscii font 1 or
// petscii font 2. Translation is performed for all reading and
// writing operations. The ascii mode will only translate the
// line end CR into an LF
void iocharmap(IOCharMap chmap);
int kbhit(void);
int getche(void);
@ -19,6 +37,10 @@ int wherex(void);
int wherey(void);
// show or hide the text cursor
void textcursor(bool show);
#pragma compile("conio.c")
#endif

View File

@ -1,21 +1,77 @@
#include "stdio.h"
#include <stdlib.h>
#include "conio.h"
#include "stdlib.h"
__asm putpch
{
ldx giocharmap
cpx #IOCHM_ASCII
bcc w3
cmp #10
bne w1
lda #13
w1:
cpx #IOCHM_PETSCII_1
bcc w3
cmp #65
bcc w3
cmp #123
bcs w3
cmp #97
bcs w2
cmp #91
bcs w3
w2:
eor #$20
cpx #IOCHM_PETSCII_2
beq w3
and #$df
w3:
jmp 0xffd2
}
__asm getpch
{
jsr 0xffcf
ldx giocharmap
cpx #IOCHM_ASCII
bcc w3
cmp #13
bne w1
lda #10
w1:
cpx #IOCHM_PETSCII_1
bcc w3
cmp #65
bcc w3
cmp #123
bcs w3
cmp #97
bcs w2
cmp #91
bcs w3
w2:
eor #$20
w3:
}
void putchar(char c)
{
__asm {
lda c
bne w1
lda #13
w1:
jsr 0xffd2
jmp putpch
}
}
char getchar(void)
{
__asm {
jsr 0xffcf
jsr getpch
sta accu
lda #0
sta accu + 1
@ -25,21 +81,16 @@ char getchar(void)
void puts(const char * str)
{
__asm {
loop:
ldy #0
lda (str), y
beq done
loop:
cmp #10
bne w1
lda #13
w1:
jsr 0xffd2
jsr putpch
inc str
bne next
bne loop
inc str + 1
next:
ldy #0
lda (str), y
bne loop
done:
}
@ -49,14 +100,14 @@ char * gets(char * str)
{
__asm {
loop:
jsr 0xffcf
jsr getpch
ldy #0
cmp #13
cmp #10
beq done
sta (str), y
inc str
bne loop
inc srt + 1
inc str + 1
bne loop
done:
lda #0

View File

@ -3,6 +3,7 @@
#include <stdlib.h>
void putchar(char c);
char getchar(void);

View File

@ -432,16 +432,21 @@ void InterCodeGenerator::TranslateAssembler(InterCodeModule* mod, Expression* ex
}
else if (aexp->mType == DT_LABEL_REF)
{
if (!aexp->mBase->mBase->mLinkerObject)
TranslateAssembler(mod, aexp->mBase->mBase->mValue, nullptr);
if (aexp->mBase->mBase)
{
if (!aexp->mBase->mBase->mLinkerObject)
TranslateAssembler(mod, aexp->mBase->mBase->mValue, nullptr);
LinkerReference ref;
ref.mObject = dec->mLinkerObject;
ref.mOffset = offset;
ref.mFlags = LREF_LOWBYTE | LREF_HIGHBYTE;
ref.mRefObject = aexp->mBase->mBase->mLinkerObject;
ref.mRefOffset = aexp->mOffset + aexp->mBase->mInteger;
dec->mLinkerObject->AddReference(ref);
LinkerReference ref;
ref.mObject = dec->mLinkerObject;
ref.mOffset = offset;
ref.mFlags = LREF_LOWBYTE | LREF_HIGHBYTE;
ref.mRefObject = aexp->mBase->mBase->mLinkerObject;
ref.mRefOffset = aexp->mOffset + aexp->mBase->mInteger;
dec->mLinkerObject->AddReference(ref);
}
else
mErrors->Error(aexp->mLocation, EERR_ASM_INVALD_OPERAND, "Undefined label");
offset += 2;
}

View File

@ -75,7 +75,7 @@ int main(int argc, const char** argv)
DWORD length = ::GetModuleFileNameA(NULL, basePath, sizeof(basePath));
#else
printf("Starting oscar64 1.1.40\n");
printf("Starting oscar64 1.1.41\n");
#ifdef __APPLE__
uint32_t length = sizeof(basePath);

View File

@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,1,40,0
PRODUCTVERSION 1,1,40,0
FILEVERSION 1,1,41,0
PRODUCTVERSION 1,1,41,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -43,12 +43,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "oscar64"
VALUE "FileDescription", "oscar64 compiler"
VALUE "FileVersion", "1.1.40.0"
VALUE "FileVersion", "1.1.41.0"
VALUE "InternalName", "oscar64.exe"
VALUE "LegalCopyright", "Copyright (C) 2021"
VALUE "OriginalFilename", "oscar64.exe"
VALUE "ProductName", "oscar64"
VALUE "ProductVersion", "1.1.40.0"
VALUE "ProductVersion", "1.1.41.0"
END
END
BLOCK "VarFileInfo"

View File

@ -14,12 +14,6 @@
"BackwardsCompatibleGUIDGeneration" = "8:TRUE"
"Hierarchy"
{
"Entry"
{
"MsmKey" = "8:_03D7013B0D39A89CEA9D267005ADCE39"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0D8B657E4A954DBFAF14055CDFFB384C"
@ -40,20 +34,14 @@
}
"Entry"
{
"MsmKey" = "8:_2CA3A525072974368303677563606FFE"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_317711E6E48744A18655469B4C53767E"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_3FA71395262A4AB4A1C2839FD6B91190"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmKey" = "8:_3AFDC86156F04AABB8D82218C17005F2"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -76,18 +64,6 @@
}
"Entry"
{
"MsmKey" = "8:_777CE896BB0B3C09C1B5FB6CB3BFE84F"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7A40466D5E5D2D3FD71213A0C0AA5075"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7EA67552E0B34B9BA70152AD9E369EA6"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -118,13 +94,13 @@
}
"Entry"
{
"MsmKey" = "8:_B2B920A649CF4027457BBAB004078A03"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmKey" = "8:_B4265CBF352343D2867DBCCE67D9F493"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_B4265CBF352343D2867DBCCE67D9F493"
"MsmKey" = "8:_C239EFB1C3A646809AD2740ABDE747B0"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
@ -136,18 +112,6 @@
}
"Entry"
{
"MsmKey" = "8:_DC9FDF52011EB7C47318682BA0B3F26F"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_DE2BF7C92569053E7C3DCE88AB7E2566"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E218D776D9014F99BE2B046AEF2D6E8B"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -184,12 +148,6 @@
}
"Entry"
{
"MsmKey" = "8:_EA3C0BCB01F2639DFA2E37EC8436E5F6"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_EDDED74E9AC24D9C8C7811F3A20ACA53"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -293,26 +251,6 @@
}
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_03D7013B0D39A89CEA9D267005ADCE39"
{
"SourcePath" = "8:VCRUNTIME140.dll"
"TargetName" = "8:VCRUNTIME140.dll"
"Tag" = "8:"
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0D8B657E4A954DBFAF14055CDFFB384C"
{
"SourcePath" = "8:..\\include\\crt.c"
@ -373,26 +311,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2CA3A525072974368303677563606FFE"
{
"SourcePath" = "8:api-ms-win-crt-heap-l1-1-0.dll"
"TargetName" = "8:api-ms-win-crt-heap-l1-1-0.dll"
"Tag" = "8:"
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_317711E6E48744A18655469B4C53767E"
{
"SourcePath" = "8:..\\include\\math.c"
@ -413,12 +331,12 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3FA71395262A4AB4A1C2839FD6B91190"
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3AFDC86156F04AABB8D82218C17005F2"
{
"SourcePath" = "8:api-ms-win-crt-stdio-l1-1-0.dll"
"TargetName" = "8:api-ms-win-crt-stdio-l1-1-0.dll"
"SourcePath" = "8:..\\include\\c64\\vic.h"
"TargetName" = "8:vic.h"
"Tag" = "8:"
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
"Folder" = "8:_247D4CAD3CB843B3A8A4DC2D90F47C28"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
@ -430,7 +348,7 @@
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3FFD08277B804985BDF072C0C1877287"
@ -493,46 +411,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_777CE896BB0B3C09C1B5FB6CB3BFE84F"
{
"SourcePath" = "8:api-ms-win-crt-filesystem-l1-1-0.dll"
"TargetName" = "8:api-ms-win-crt-filesystem-l1-1-0.dll"
"Tag" = "8:"
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7A40466D5E5D2D3FD71213A0C0AA5075"
{
"SourcePath" = "8:api-ms-win-crt-locale-l1-1-0.dll"
"TargetName" = "8:api-ms-win-crt-locale-l1-1-0.dll"
"Tag" = "8:"
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7EA67552E0B34B9BA70152AD9E369EA6"
{
"SourcePath" = "8:..\\include\\c64\\joystick.h"
@ -633,12 +511,12 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B2B920A649CF4027457BBAB004078A03"
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B4265CBF352343D2867DBCCE67D9F493"
{
"SourcePath" = "8:api-ms-win-crt-math-l1-1-0.dll"
"TargetName" = "8:api-ms-win-crt-math-l1-1-0.dll"
"SourcePath" = "8:..\\include\\c64\\joystick.c"
"TargetName" = "8:joystick.c"
"Tag" = "8:"
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
"Folder" = "8:_247D4CAD3CB843B3A8A4DC2D90F47C28"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
@ -650,13 +528,13 @@
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B4265CBF352343D2867DBCCE67D9F493"
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C239EFB1C3A646809AD2740ABDE747B0"
{
"SourcePath" = "8:..\\include\\c64\\joystick.c"
"TargetName" = "8:joystick.c"
"SourcePath" = "8:..\\include\\c64\\types.h"
"TargetName" = "8:types.h"
"Tag" = "8:"
"Folder" = "8:_247D4CAD3CB843B3A8A4DC2D90F47C28"
"Condition" = "8:"
@ -693,46 +571,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DC9FDF52011EB7C47318682BA0B3F26F"
{
"SourcePath" = "8:api-ms-win-crt-string-l1-1-0.dll"
"TargetName" = "8:api-ms-win-crt-string-l1-1-0.dll"
"Tag" = "8:"
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DE2BF7C92569053E7C3DCE88AB7E2566"
{
"SourcePath" = "8:api-ms-win-crt-runtime-l1-1-0.dll"
"TargetName" = "8:api-ms-win-crt-runtime-l1-1-0.dll"
"Tag" = "8:"
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E218D776D9014F99BE2B046AEF2D6E8B"
{
"SourcePath" = "8:..\\include\\stdlib.c"
@ -853,26 +691,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EA3C0BCB01F2639DFA2E37EC8436E5F6"
{
"SourcePath" = "8:VERSION.dll"
"TargetName" = "8:VERSION.dll"
"Tag" = "8:"
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EDDED74E9AC24D9C8C7811F3A20ACA53"
{
"SourcePath" = "8:..\\include\\stdio.c"
@ -1002,15 +820,15 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:oscar64"
"ProductCode" = "8:{B454BC86-EF23-4C62-8A7B-812DC9099703}"
"PackageCode" = "8:{7E765723-5387-4BC6-9543-542D3C759786}"
"ProductCode" = "8:{40AF707C-0E9B-4786-A353-C49A7288B8E5}"
"PackageCode" = "8:{7C6E8F8C-262F-4230-92A2-4E3E95F7B70E}"
"UpgradeCode" = "8:{9AB61EFF-ACAC-4079-9950-8D96615CD4EF}"
"AspNetVersion" = "8:2.0.50727.0"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:FALSE"
"ProductVersion" = "8:1.1.40"
"ProductVersion" = "8:1.1.41"
"Manufacturer" = "8:oscar64"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"