ORCA/C 2.1.0 source from the Opus ][ CD

This commit is contained in:
mikew50 2017-10-01 17:47:47 -06:00
commit e72177985e
501 changed files with 529 additions and 0 deletions

1
Asm.pas Executable file

File diff suppressed because one or more lines are too long

1
CC.pas Executable file

File diff suppressed because one or more lines are too long

1
CC.rez Executable file
View File

@ -0,0 +1 @@
#include "types.rez" resource rVersion(1) { { 2, /* Major revision */ 1, /* Minor revision */ 0, /* Bug version */ release, /* Release stage */ 0, /* Non-final release # */ }, verUS, /* Region code */ "ORCA/C", /* Short version number */ "Copyright 1996, Byte Works, Inc." /* Long version number */ };

1
CC.rez2 Executable file
View File

@ -0,0 +1 @@
#include "types.rez" resource rVersion(1) { { 2, /* Major revision */ 0, /* Minor revision */ 3, /* Bug version */ release, /* Release stage */ 0, /* Non-final release # */ }, verUS, /* Region code */ "ORCA/C (small memory)", /* Short version number */ "Copyright 1994, Byte Works, Inc." /* Long version number */ };

1
CCommon.asm Executable file
View File

@ -0,0 +1 @@
mcopy ccommon.macros **************************************************************** * * CopyString - copy a string * * Inputs: * toPtr - location to copy to * fromPtr - location to copy from * **************************************************************** * CopyString start subroutine (4:toPtr,4:fromPtr),0 short I,M lda [fromPtr] sta [toPtr] tay lb1 lda [fromPtr],Y sta [toPtr],Y dey bne lb1 long I,M return end **************************************************************** * * Hash - find hash displacement * * Finds the displacement into an array of pointers using a * hash function. * * Inputs: * sPtr - points to string to find hash for * * Outputs: * Returns the disp into the hash table * **************************************************************** * Hash start hashSize equ 876 # hash buckets - 1 sum equ 0 hash length equ 2 length of string subroutine (4:sPtr),4 stz sum default to bucket 0 lda [sPtr] set the length of the string and #$00FF sta length ldy #1 start with char 1 lda [sPtr] if 1st char is '~', start with char 6 and #$FF00 cmp #'~'*256 bne lb1 ldy #6 lb1 lda [sPtr],Y get the value to add in and #$3F3F cpy length if there is only 1 char left then bne lb2 and #$00FF and out the high byte lb2 clc add it to the sum adc sum sta sum iny next char iny cpy length ble lb1 mod2 sum,#hashSize+1 return disp asl sum asl sum return 2:sum end

1
CCommon.macros Executable file
View File

@ -0,0 +1 @@
MACRO &lab subroutine &parms,&work &lab anop aif c:&work,.a lclc &work &work setc 0 .a gbla &totallen gbla &worklen &worklen seta &work &totallen seta 0 aif c:&parms=0,.e lclc &len lclc &p lcla &i &i seta c:&parms .b &p setc &parms(&i) &len amid &p,2,1 aif "&len"=":",.c &len amid &p,1,2 &p amid &p,4,l:&p-3 ago .d .c &len amid &p,1,1 &p amid &p,3,l:&p-2 .d &p equ &totallen+3+&work &totallen seta &totallen+&len &i seta &i-1 aif &i,^b .e tsc sec sbc #&work tcs inc a phd tcd mend MACRO &lab return &r &lab anop lclc &len aif c:&r,.a lclc &r &r setc 0 &len setc 0 ago .h .a &len amid &r,2,1 aif "&len"=":",.b &len amid &r,1,2 &r amid &r,4,l:&r-3 ago .c .b &len amid &r,1,1 &r amid &r,3,l:&r-2 .c aif &len<>2,.d ldy &r ago .h .d aif &len<>4,.e ldx &r+2 ldy &r ago .h .e aif &len<>10,.g aif &totallen=0,.f lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .f pld tsc clc adc #&worklen+&totallen tcs phb plx ply lda &r+8 pha lda &r+6 pha lda &r+4 pha lda &r+2 pha lda &r pha phy phx plb rtl mexit .g mnote 'Not a valid return length',16 mexit .h aif &totallen=0,.i lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .i pld tsc clc adc #&worklen+&totallen tcs aif &len=0,.j tya .j rtl mend MACRO &LAB MOD2 &N1,&N2,&N3 AIF C:&N3,.A LCLC &N3 &N3 SETC &N1 .A &LAB ~SETM LCLC &C &C AMID "&N2",1,1 AIF "{"="&C",.B AIF "["="&C",.B ~OP LDX,&N2 AGO .C .B ~LDA &N2 TAX .C ~LDA &N1 JSL ~MOD2 ~STA &N3 ~RESTM MEND MACRO &LAB ~SETM &LAB ANOP AIF C:&~LA,.B GBLB &~LA GBLB &~LI .B &~LA SETB S:LONGA &~LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&~LA)+16*(.NOT.&~LI) LONGA ON LONGI ON .A MEND MACRO &LAB ~RESTM &LAB ANOP AIF (&~LA+&~LI)=2,.I SEP #32*(.NOT.&~LA)+16*(.NOT.&~LI) AIF &~LA,.H LONGA OFF .H AIF &~LI,.I LONGI OFF .I MEND MACRO &LAB ~LDA &OP LCLC &C &C AMID "&OP",1,1 AIF "&C"<>"{",.B &C AMID "&OP",L:&OP,1 AIF "&C"="}",.A MNOTE "Missing closing '}'",2 &OP SETC &OP} .A &OP AMID "&OP",2,L:&OP-2 &OP SETC (&OP) .B &LAB LDA &OP MEND MACRO &LAB ~STA &OP LCLC &C &C AMID "&OP",1,1 AIF "&C"<>"{",.B &C AMID "&OP",L:&OP,1 AIF "&C"="}",.A MNOTE "Missing closing '}'",2 &OP SETC &OP} .A &OP AMID "&OP",2,L:&OP-2 &OP SETC (&OP) .B &LAB STA &OP MEND MACRO &LAB ~OP &OPC,&OP LCLC &C &C AMID "&OP",1,1 AIF "&C"<>"{",.B &C AMID "&OP",L:&OP,1 AIF "&C"="}",.A MNOTE "Missing closing '}'",2 &OP SETC &OP} .A &OP AMID "&OP",2,L:&OP-2 &OP SETC (&OP) .B &LAB &OPC &OP MEND MACRO &LAB BLE &BP &LAB BLT &BP BEQ &BP MEND MACRO &LAB LONG &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB ("&A"="M").OR.("&A"="m") &I SETB ("&A"="I").OR.("&A"="i") AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.("&B"="m").OR.&M &I SETB ("&B"="I").OR.("&B"="i").OR.&I .A &LAB REP #&M*32+&I*16 AIF .NOT.&M,.B LONGA ON .B AIF .NOT.&I,.C LONGI ON .C MEND MACRO &LAB SHORT &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB ("&A"="M").OR.("&A"="m") &I SETB ("&A"="I").OR.("&A"="i") AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.("&B"="m").OR.&M &I SETB ("&B"="I").OR.("&B"="i").OR.&I .A &LAB SEP #&M*32+&I*16 AIF .NOT.&M,.B LONGA OFF .B AIF .NOT.&I,.C LONGI OFF .C MEND

1
CCommon.pas Executable file

File diff suppressed because one or more lines are too long

1
CGC.asm Executable file
View File

@ -0,0 +1 @@
mcopy cgc.macros **************************************************************** * * CnvSX - Convert floating point to SANE extended * * Inputs: * rec - pointer to a record * **************************************************************** * CnvSX start rec equ 4 record containing values rec_real equ 0 disp to real value rec_ext equ 8 disp to extended (SANE) value tsc set up DP phd tcd ph4 rec push addr of real number clc push addr of SANE number lda rec adc #rec_ext tax lda rec+2 adc #0 pha phx fd2x convert TOS to extended move4 0,4 return pld pla pla rtl end **************************************************************** * * CnvSC - Convert floating point to SANE comp * * Inputs: * rec - pointer to a record * **************************************************************** * CnvSC start rec equ 4 record containing values rec_real equ 0 disp to real value rec_ext equ 8 disp to extended (SANE) value rec_cmp equ 18 disp to comp (SANE) value tsc set up DP phd tcd ph4 rec push addr of real number clc push addr of SANE number lda rec adc #rec_ext tax lda rec+2 adc #0 pha phx fd2x convert TOS to extended clc push addr of SANE number lda rec adc #rec_ext tax lda rec+2 adc #0 pha phx clc push addr of COMP number lda rec adc #rec_cmp tax lda rec+2 adc #0 pha phx fx2c convert TOS to extended move4 0,4 return pld pla pla rtl end **************************************************************** * * InitLabels - initialize the labels array * * Outputs: * labelTab - initialized * intLabel - initialized * **************************************************************** * InitLabels start maxLabel equ 2400 ! with labelTab[0] do begin lda #-1 val := -1; sta labelTab+6 sta labelTab+8 stz labelTab defined := false; stz labelTab+2 chain := nil; stz labelTab+4 ! end; {with} ldx #labelTab for i := 1 to maxLabel do ldy #labelTab+10 labelTab[i] := labelTab[0]; lda #maxLabel*10-1 mvn labelTab,labelTab stz intLabel intLabel := 0; rtl end

1
CGC.macros Executable file
View File

@ -0,0 +1 @@
macro &l move4 &m1,&m2 lclb &yistwo &l ~setm ~lda &m1 ~sta &m2 ~lda.h &m1 ~sta.h &m2 ~restm mend macro &l ph4 &n1 aif "&n1"="*",.f lclc &c &l anop &c amid &n1,1,1 aif "&c"="#",.d aif s:longa=1,.a rep #%00100000 .a aif "&c"<>"{",.b &c amid &n1,l:&n1,1 aif "&c"<>"}",.g &n1 amid &n1,2,l:&n1-2 ldy #2 lda (&n1),y pha lda (&n1) pha ago .e .b aif "&c"<>"[",.c ldy #2 lda &n1,y pha lda &n1 pha ago .e .c aif "&c"<>"<",.c1 &n1 amid &n1,2,l:&n1-1 pei &n1+2 pei &n1 ago .e .c1 lda &n1+2 pha lda &n1 pha ago .e .d &n1 amid &n1,2,l:&n1-1 pea +(&n1)|-16 pea &n1 ago .f .e aif s:longa=1,.f sep #%00100000 .f mexit .g mnote "Missing closing '}'",16 mend macro &l ~lda &op lclc &c &c amid "&op",1,1 aif "&c"<>"{",.b &c amid "&op",l:&op,1 aif "&c"="}",.a mnote "Missing closing '}'",2 &op setc &op} .a &op amid "&op",2,l:&op-2 &op setc (&op) .b &l lda &op mend macro &l ~lda.h &op &l anop lclc &c &c amid "&op",1,1 aif "&c"="[",.b aif "&c"<>"{",.d &c amid "&op",l:&op,1 aif "&c"="}",.a mnote "Missing closing '}'",2 &op setc &op} .a &op amid "&op",2,l:&op-2 &op setc (&op) .b aif &yistwo,.c &yistwo setb 1 ldy #2 .c &op setc "&op,y" lda &op mexit .d aif "&c"<>"#",.e &op amid "&op",2,l:&op-1 &op setc "#^&op" lda &op mexit .e lda 2+&op mend macro &l ~restm &l anop aif (&~la+&~li)=2,.i sep #32*(.not.&~la)+16*(.not.&~li) aif &~la,.h longa off .h aif &~li,.i longi off .i mend macro &l ~setm &l anop aif c:&~la,.b gblb &~la gblb &~li .b &~la setb s:longa &~li setb s:longi aif s:longa.and.s:longi,.a rep #32*(.not.&~la)+16*(.not.&~li) longa on longi on .a mend macro &l ~sta &op lclc &c &c amid "&op",1,1 aif "&c"<>"{",.b &c amid "&op",l:&op,1 aif "&c"="}",.a mnote "Missing closing '}'",2 &op setc &op} .a &op amid "&op",2,l:&op-2 &op setc (&op) .b &l sta &op mend macro &l ~sta.h &op &l anop lclc &c &c amid "&op",1,1 aif "&c"="[",.b aif "&c"<>"{",.d &c amid "&op",l:&op,1 aif "&c"="}",.a mnote "Missing closing '}'",2 &op setc &op} .a &op amid "&op",2,l:&op-2 &op setc (&op) .b aif &yistwo,.c &yistwo setb 1 ldy #2 .c &op setc "&op,y" sta &op mexit .d sta 2+&op mend MACRO &LAB FD2X &LAB PEA $010E LDX #$090A JSL $E10000 MEND MACRO &LAB FX2C &LAB PEA $0510 LDX #$090A JSL $E10000 MEND

1
CGC.pas Executable file

File diff suppressed because one or more lines are too long

1
CGI.Comments Executable file

File diff suppressed because one or more lines are too long

1
CGI.Debug Executable file

File diff suppressed because one or more lines are too long

1
CGI.pas Executable file

File diff suppressed because one or more lines are too long

1
DAG.pas Executable file

File diff suppressed because one or more lines are too long

1
DAG2.pas Executable file

File diff suppressed because one or more lines are too long

1
Exp.macros Executable file
View File

@ -0,0 +1 @@
MACRO &lab subroutine &parms,&work &lab anop aif c:&work,.a lclc &work &work setc 0 .a gbla &totallen gbla &worklen &worklen seta &work &totallen seta 0 aif c:&parms=0,.e lclc &len lclc &p lcla &i &i seta c:&parms .b &p setc &parms(&i) &len amid &p,2,1 aif "&len"=":",.c &len amid &p,1,2 &p amid &p,4,l:&p-3 ago .d .c &len amid &p,1,1 &p amid &p,3,l:&p-2 .d &p equ &totallen+3+&work &totallen seta &totallen+&len &i seta &i-1 aif &i,^b .e tsc sec sbc #&work tcs inc a phd tcd mend MACRO &lab return &r &lab anop lclc &len aif c:&r,.a lclc &r &r setc 0 &len setc 0 ago .h .a &len amid &r,2,1 aif "&len"=":",.b &len amid &r,1,2 &r amid &r,4,l:&r-3 ago .c .b &len amid &r,1,1 &r amid &r,3,l:&r-2 .c aif &len<>2,.d ldy &r ago .h .d aif &len<>4,.e ldx &r+2 ldy &r ago .h .e aif &len<>10,.g aif &totallen=0,.f lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .f pld tsc clc adc #&worklen+&totallen tcs phb plx ply lda &r+8 pha lda &r+6 pha lda &r+4 pha lda &r+2 pha lda &r pha phy phx plb rtl mexit .g mnote 'Not a valid return length',16 mexit .h aif &totallen=0,.i lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .i pld tsc clc adc #&worklen+&totallen tcs aif &len=0,.j tya .j rtl mend MACRO &LAB BGT &BP &LAB BEQ *+4 BGE &BP MEND MACRO &LAB BLE &BP &LAB BLT &BP BEQ &BP MEND MACRO &LAB MOVE4 &F,&T &LAB ~SETM LDA 2+&F STA 2+&T LDA &F STA &T ~RESTM MEND MACRO &LAB ~SETM &LAB ANOP AIF C:&~LA,.B GBLB &~LA GBLB &~LI .B &~LA SETB S:LONGA &~LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&~LA)+16*(.NOT.&~LI) LONGA ON LONGI ON .A MEND MACRO &LAB ~RESTM &LAB ANOP AIF (&~LA+&~LI)=2,.I SEP #32*(.NOT.&~LA)+16*(.NOT.&~LI) AIF &~LA,.H LONGA OFF .H AIF &~LI,.I LONGI OFF .I MEND

1
Expression.asm Executable file

File diff suppressed because one or more lines are too long

1
Expression.pas Executable file

File diff suppressed because one or more lines are too long

1
Gen.pas Executable file

File diff suppressed because one or more lines are too long

1
Header.pas Executable file

File diff suppressed because one or more lines are too long

1
Header2.pas Executable file
View File

@ -0,0 +1 @@
{$optimize 7} {---------------------------------------------------------------} { } { Header } { } { Handles saving and reading precompiled headers. } { } {---------------------------------------------------------------} unit Header; {$LibPrefix '0/obj/'} interface uses CCommon, MM, Scanner, Symbol, CGI; {$segment 'scanner'} var inhibitHeader: boolean; {should .sym includes be blocked?} procedure EndInclude (chPtr: ptr); { Saves symbols created by the include file } { } { Parameters: } { chPtr - chPtr when the file returned } { } { Notes: } { 1. Call this subroutine right after processing an } { include file. } { 2. Declared externally in Symbol.pas } procedure FlagPragmas (pragma: pragmas); { record the effects of a pragma } { } { parameters: } { pragma - pragma to record } { } { Notes: } { 1. Defined as extern in Scanner.pas } { 2. For the purposes of this unit, the segment statement is } { treated as a pragma. } procedure InitHeader (var fName: gsosOutString); { look for a header file, reading it if it exists } { } { parameters: } { fName - source file name (var for efficiency) } procedure TermHeader; { Stop processing the header file } { } { Note: This is called when the first code-generating } { subroutine is found, and again when the compile ends. It } { closes any open symbol file, and should take no action if } { called twice. } procedure StartInclude (name: gsosOutStringPtr); { Marks the start of an include file } { } { Notes: } { 1. Call this subroutine right after opening an include } { file. } { 2. Defined externally in Scanner.pas } {---------------------------------------------------------------} implementation procedure EndInclude {chPtr: ptr}; { Saves symbols created by the include file } { } { Parameters: } { chPtr - chPtr when the file returned } { } { Notes: } { 1. Call this subroutine right after processing an } { include file. } { 2. Declared externally in Symbol.pas } begin {EndInclude} end; {EndInclude} procedure FlagPragmas {pragma: pragmas}; { record the effects of a pragma } { } { parameters: } { pragma - pragma to record } { } { Notes: } { 1. Defined as extern in Scanner.pas } { 2. For the purposes of this unit, the segment statement is } { treated as a pragma. } begin {FlagPragmas} end; {FlagPragmas} procedure InitHeader {var fName: gsosOutString}; { look for a header file, reading it if it exists } { } { parameters: } { fName - source file name (var for efficiency) } begin {InitHeader} end; {InitHeader} procedure StartInclude {name: gsosOutStringPtr}; { Marks the start of an include file } { } { Notes: } { 1. Call this subroutine right after opening an include } { file. } { 2. Defined externally in Scanner.pas } begin {StartInclude} end; {StartInclude} procedure TermHeader; { Stop processing the header file } { } { Note: This is called when the first code-generating } { subroutine is found, and again when the compile ends. It } { closes any open symbol file, and should take no action if } { called twice. } begin {TermHeader} end; {TermHeader} end.

11
LICENSE Normal file
View File

@ -0,0 +1,11 @@
ORCA/C is released by the copyright holder under the terms of the original copyright.
The Byte Works, Inc. grants you the right to use this source code privately, fork it, and change it.
You may not redistribute the code in any form other than submission to this repository without the written permission of the copyright holder.
The copyright holder decided to do things this way for two reasons:
1. Reserve commercial distribution rights.
2. Ensure that any contributions and updates are available from a centralized source (this GitHib repository, for now).

1
MM.asm Executable file
View File

@ -0,0 +1 @@
mcopy mm.macros **************************************************************** * * Calloc - Allocate memory from a pool and set it to 0. * * Inputs: * bytes - number of bytes to allocate * useGlobalPool - should the memory come from the global * (or local) pool * * Outputs: * ptr - points to the first byte of the allocated memory * **************************************************************** * Calloc start ptr equ 0 pointer to reserved memory subroutine (2:bytes),4 ph2 bytes reserve the memory jsl Malloc sta ptr save the pointer to the memory stx ptr+2 lda bytes if there are an odd number of bytes then tay lsr a bcc lb1 short M zero the first byte lda #0 dey sta [ptr],Y long M lb1 tyx done if there are no more bytes beq lb4 lda #0 dey branch if the next word is the zeroth dey beq lb3 lb2 sta [ptr],Y zero full words dey dey bne lb2 lb3 sta [ptr] zero the last word lb4 return 4:ptr return the pointer end **************************************************************** * * GCalloc - Allocate and clear memory from the global pool. * * Inputs: * bytes - number of bytes to allocate * * Outputs: * ptr - points to the first byte of the allocated memory * **************************************************************** * GCalloc start ptr equ 0 pointer to reserved memory subroutine (2:bytes),4 ph2 bytes reserve the memory jsl GMalloc sta ptr save the pointer to the memory stx ptr+2 lda bytes if there are an odd number of bytes then tay lsr a bcc lb1 short M zero the first byte lda #0 dey sta [ptr],Y long M lb1 tyx done if there are no more bytes beq lb4 lda #0 dey branch if the next word is the zeroth dey beq lb3 lb2 sta [ptr],Y zero full words dey dey bne lb2 lb3 sta [ptr] zero the last word lb4 return 4:ptr return the pointer end **************************************************************** * * Malloc - Allocate memory from a pool. * * Inputs: * bytes - number of bytes to allocate * useGlobalPool - should the memory come from the global * (or local) pool * * Outputs: * ptr - points to the first byte of the allocated memory * **************************************************************** * Malloc start lda useGlobalPool jne GMalloc jmp LMalloc end

1
MM.macros Executable file
View File

@ -0,0 +1 @@
MACRO &lab subroutine &parms,&work &lab anop aif c:&work,.a lclc &work &work setc 0 .a gbla &totallen gbla &worklen &worklen seta &work &totallen seta 0 aif c:&parms=0,.e lclc &len lclc &p lcla &i &i seta c:&parms .b &p setc &parms(&i) &len amid &p,2,1 aif "&len"=":",.c &len amid &p,1,2 &p amid &p,4,l:&p-3 ago .d .c &len amid &p,1,1 &p amid &p,3,l:&p-2 .d &p equ &totallen+3+&work &totallen seta &totallen+&len &i seta &i-1 aif &i,^b .e tsc sec sbc #&work tcs inc a phd tcd mend MACRO &lab return &r &lab anop lclc &len aif c:&r,.a lclc &r &r setc 0 &len setc 0 ago .h .a &len amid &r,2,1 aif "&len"=":",.b &len amid &r,1,2 &r amid &r,4,l:&r-3 ago .c .b &len amid &r,1,1 &r amid &r,3,l:&r-2 .c aif &len<>2,.d ldy &r ago .h .d aif &len<>4,.e ldx &r+2 ldy &r ago .h .e aif &len<>10,.g aif &totallen=0,.f lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .f pld tsc clc adc #&worklen+&totallen tcs phb plx ply lda &r+8 pha lda &r+6 pha lda &r+4 pha lda &r+2 pha lda &r pha phy phx plb rtl mexit .g mnote 'Not a valid return length',16 mexit .h aif &totallen=0,.i lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .i pld tsc clc adc #&worklen+&totallen tcs aif &len=0,.j tya .j rtl mend MACRO &LAB JNE &BP &LAB BEQ *+5 BRL &BP MEND MACRO &LAB LONG &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB ("&A"="M").OR.("&A"="m") &I SETB ("&A"="I").OR.("&A"="i") AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.("&B"="m").OR.&M &I SETB ("&B"="I").OR.("&B"="i").OR.&I .A &LAB REP #&M*32+&I*16 AIF .NOT.&M,.B LONGA ON .B AIF .NOT.&I,.C LONGI ON .C MEND MACRO &LAB PH2 &N1 LCLC &C &LAB ANOP &C AMID &N1,1,1 AIF "&C"="#",.D AIF S:LONGA=1,.A REP #%00100000 .A AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.G &N1 AMID &N1,2,L:&N1-2 LDA (&N1) PHA AGO .E .B LDA &N1 PHA AGO .E .D &N1 AMID &N1,2,L:&N1-1 PEA &N1 AGO .F .E AIF S:LONGA=1,.F SEP #%00100000 .F MEXIT .G MNOTE "Missing closing '}'",16 MEND MACRO &LAB SHORT &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB ("&A"="M").OR.("&A"="m") &I SETB ("&A"="I").OR.("&A"="i") AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.("&B"="m").OR.&M &I SETB ("&B"="I").OR.("&B"="i").OR.&I .A &LAB SEP #&M*32+&I*16 AIF .NOT.&M,.B LONGA OFF .B AIF .NOT.&I,.C LONGI OFF .C MEND

1
MM.pas Executable file

File diff suppressed because one or more lines are too long

1
Native.asm Executable file

File diff suppressed because one or more lines are too long

1
Native.macros Executable file
View File

@ -0,0 +1 @@
MACRO &lab subroutine &parms,&work &lab anop aif c:&work,.a lclc &work &work setc 0 .a gbla &totallen gbla &worklen &worklen seta &work &totallen seta 0 aif c:&parms=0,.e lclc &len lclc &p lcla &i &i seta c:&parms .b &p setc &parms(&i) &len amid &p,2,1 aif "&len"=":",.c &len amid &p,1,2 &p amid &p,4,l:&p-3 ago .d .c &len amid &p,1,1 &p amid &p,3,l:&p-2 .d &p equ &totallen+3+&work &totallen seta &totallen+&len &i seta &i-1 aif &i,^b .e tsc sec sbc #&work tcs inc a phd tcd mend MACRO &lab return &r &lab anop lclc &len aif c:&r,.a lclc &r &r setc 0 &len setc 0 ago .h .a &len amid &r,2,1 aif "&len"=":",.b &len amid &r,1,2 &r amid &r,4,l:&r-3 ago .c .b &len amid &r,1,1 &r amid &r,3,l:&r-2 .c aif &len<>2,.d ldy &r ago .h .d aif &len<>4,.e ldx &r+2 ldy &r ago .h .e aif &len<>10,.g aif &totallen=0,.f lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .f pld tsc clc adc #&worklen+&totallen tcs phb plx ply lda &r+8 pha lda &r+6 pha lda &r+4 pha lda &r+2 pha lda &r pha phy phx plb rtl mexit .g mnote 'Not a valid return length',16 mexit .h aif &totallen=0,.i lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .i pld tsc clc adc #&worklen+&totallen tcs aif &len=0,.j tya .j rtl mend

1
Native.pas Executable file

File diff suppressed because one or more lines are too long

1
Native2.pas Executable file

File diff suppressed because one or more lines are too long

1
ObjOut.asm Executable file

File diff suppressed because one or more lines are too long

1
ObjOut.macros Executable file
View File

@ -0,0 +1 @@
MACRO &LAB LONG &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB ("&A"="M").OR.("&A"="m") &I SETB ("&A"="I").OR.("&A"="i") AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.("&B"="m").OR.&M &I SETB ("&B"="I").OR.("&B"="i").OR.&I .A &LAB REP #&M*32+&I*16 AIF .NOT.&M,.B LONGA ON .B AIF .NOT.&I,.C LONGI ON .C MEND MACRO &LAB PH4 &N1 LCLC &C &LAB ANOP &C AMID &N1,1,1 AIF "&C"="#",.D AIF S:LONGA=1,.A REP #%00100000 .A AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.G &N1 AMID &N1,2,L:&N1-2 LDY #2 LDA (&N1),Y PHA LDA (&N1) PHA AGO .E .B AIF "&C"<>"[",.C LDY #2 LDA &N1,Y PHA LDA &N1 PHA AGO .E .C LDA &N1+2 PHA LDA &N1 PHA AGO .E .D &N1 AMID &N1,2,L:&N1-1 PEA +(&N1)|-16 PEA &N1 AGO .F .E AIF S:LONGA=1,.F SEP #%00100000 .F MEXIT .G MNOTE "Missing closing '}'",16 MEND MACRO &LAB SHORT &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB ("&A"="M").OR.("&A"="m") &I SETB ("&A"="I").OR.("&A"="i") AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.("&B"="m").OR.&M &I SETB ("&B"="I").OR.("&B"="i").OR.&I .A &LAB SEP #&M*32+&I*16 AIF .NOT.&M,.B LONGA OFF .B AIF .NOT.&I,.C LONGI OFF .C MEND MACRO &LAB INC4 &A &LAB ~SETM INC &A BNE ~&SYSCNT INC 2+&A ~&SYSCNT ~RESTM MEND MACRO &LAB ~SETM &LAB ANOP AIF C:&~LA,.B GBLB &~LA GBLB &~LI .B &~LA SETB S:LONGA &~LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&~LA)+16*(.NOT.&~LI) LONGA ON LONGI ON .A MEND MACRO &LAB ~RESTM &LAB ANOP AIF (&~LA+&~LI)=2,.I SEP #32*(.NOT.&~LA)+16*(.NOT.&~LI) AIF &~LA,.H LONGA OFF .H AIF &~LI,.I LONGI OFF .I MEND MACRO &LAB PUT2 &N1,&F1,&CR,&ERROUT AIF C:&F1,.A LCLC &F1 &F1 SETC #0 .A &LAB ~SETM PH2 &N1 PH2 &F1 PH2 #C:&CR PH2 #C:&ERROUT JSL ~PUT2 ~RESTM MEND MACRO &LAB PUT4 &N1,&F1,&CR,&ERROUT AIF C:&F1,.A LCLC &F1 &F1 SETC #0 .A &LAB ~SETM PH4 &N1 PH2 &F1 PH2 #C:&CR PH2 #C:&ERROUT JSL ~PUT4 ~RESTM MEND MACRO &LAB PUTS &N1,&F1,&CR,&ERROUT &LAB ~SETM LCLC &C &C AMID "&N1",1,1 AIF "&C"<>"#",.C AIF L:&N1>127,.A BRA ~&SYSCNT AGO .B .A BRL ~&SYSCNT .B &N1 AMID "&N1",2,L:&N1-1 ~L&SYSCNT DC I1"L:~S&SYSCNT" ~S&SYSCNT DC C&N1 ~&SYSCNT ANOP &N1 SETC ~L&SYSCNT-1 AIF C:&F1=0,.D .C ~PUSHA &N1 AIF C:&F1,.C1 PEA 0 AGO .C2 .C1 PH2 &F1 .C2 PH2 #C:&CR PH2 #C:&ERROUT JSL ~PUTS ~RESTM MEXIT .D PEA ~L&SYSCNT|-16 PEA ~L&SYSCNT LDX #$1C0C+(C:&ERROUT*256)-(512*C:&CR) JSL $E10000 ~RESTM MEND MACRO &LAB ~PUSHA &N1 LCLC &C &LAB ANOP &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.G &N1 AMID &N1,2,L:&N1-2 SEP #$20 LONGA OFF LDA #0 PHA REP #$20 LONGA ON PHK LDA &N1 PHA MEXIT .B AIF "&C"<>"[",.C &N1 AMID &N1,2,L:&N1-2 LDA &N1+2 PHA LDA &N1 PHA MEXIT .C PEA +(&N1)|-16 PEA &N1 MEXIT .G MNOTE "Missing closing '}'",16 MEND MACRO &LAB PH2 &N1 LCLC &C &LAB ANOP &C AMID &N1,1,1 AIF "&C"="#",.D AIF S:LONGA=1,.A REP #%00100000 .A AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.G &N1 AMID &N1,2,L:&N1-2 LDA (&N1) PHA AGO .E .B LDA &N1 PHA AGO .E .D &N1 AMID &N1,2,L:&N1-1 PEA &N1 AGO .F .E AIF S:LONGA=1,.F SEP #%00100000 .F MEXIT .G MNOTE "Missing closing '}'",16 MEND

1
ObjOut.pas Executable file

File diff suppressed because one or more lines are too long

1
ObjOut2.asm Executable file

File diff suppressed because one or more lines are too long

1
ObjOut2.pas Executable file

File diff suppressed because one or more lines are too long

1
Parser.pas Executable file

File diff suppressed because one or more lines are too long

18
README.md Normal file
View File

@ -0,0 +1,18 @@
# ORCA-C
Apple IIGS ORCA/C Compiler, an ANSI C compiler for the 65816 with libraries for the Apple IIGS
If you would like to make changes to this compiler and distribute them to others, feel free to submit them here. If the changes apply to compilation on and for an Apple IIGS, they will generally be approved for distribution on the master branch unless the changes deviate significantly from the ANSI C standard. For changes that deviate form ANSI C or changes that retarget the compiler to run on a different platform or generate code for a different platform, the project will either be forked or a new repository will be created, as appropriate.
The general conditions that must be met before a change is released on master are:
1. The modified compiler must compile under the currently released version of ORCA/M and ORCA/Pascal.
2. All samples from the original ORCA/C distribution must compile and execute under the modified compiler, or the sample must be updated, too.
3. The compiler must pass the ORCA/C tset suite, or the test suite must be suitably modified, too.
4. The compiler must work with the current ORCA/C libraries, or the libraries must be modified, too.
Contact support@byteworks.us if you need contributor access.
A complete distribution of the ORCA languages, including installers and documentation, is available from the Juiced GS store at https://juiced.gs/store/category/software/. It is distributed as part of the Opus ][ package.

1
Scanner.asm Executable file

File diff suppressed because one or more lines are too long

1
Scanner.debug Executable file
View File

@ -0,0 +1 @@
procedure PrintTokenList (tp: tokenListRecordPtr); {debug} begin if tp <> nil then begin PrintTokenList(tp^.next); PrintToken(tp^.token); end; {if} end; procedure PrintMacroTable; {debug} { print the macro definitions } var i: 0..hashSize; {loop/index variable} mp: macroRecordPtr; {used to trace macro lists} begin {PrintMacroTable} for i := 0 to hashSize do begin mp := macros^[i]; while mp <> nil do begin write(' ', mp^.name^, '(', mp^.parameters:1, ') ['); PrintTokenList(mp^.tokens); writeln(']'); mp := mp^.next; end; {while} end; {for} write('(Press RETURN to continue)'); readln; end; {PrintMacroTable}

1
Scanner.macros Executable file

File diff suppressed because one or more lines are too long

1
Scanner.pas Executable file

File diff suppressed because one or more lines are too long

1
Symbol.Print Executable file
View File

@ -0,0 +1 @@
procedure PrintOneSymbol {ip: identPtr}; { Print a symbol } { } { Parameters: } { ip - identifier to print } procedure PrintClass (class: tokenEnum); { Print the class of a symbol } { } { Parameters: } { class - class of the symbol } begin {PrintClass} case class of autosy: write('auto'); externsy: write('extern'); ident: write('ident'); otherwise: write(ord(class):1); end; {case} end; {PrintClass} procedure PrintType (tp: typePtr); { Print a type } { } { Parameters: } { tp - type pointer } begin {PrintType} with tp^ do begin write(' ', size:1, ' byte '); if isConstant then write('constant '); case kind of scalarType : writeln('scalar'); arrayType : begin writeln(elements: 1, ' element array of'); PrintType(aType); end; pointerType : begin writeln(' pointer to'); PrintType(pType); end; functionType: begin writeln(' function returning'); PrintType(fType); end; enumConst : writeln('enumeration (', eval: 1, ')'); enumType : writeln('enum type'); definedType : begin writeln('defined type of'); PrintType(dType); end; structType : writeln('struct: ', ord4(tp):1); unionType : writeln('union'); end; {case} end; {with} end; {PrintType} begin {PrintOneSymbol} with ip^ do begin writeln; {start with a blank line} write(name^, {write id info} ': isForwardDeclared = ', isForwardDeclared, '; class = '); PrintClass(class); writeln; PrintType(iType); {print type info} end; {with} end; {PrintOneSymbol} procedure PrintTable {sym: symbolTablePtr}; { print a symbol table } { } { parameters: } { sym - symbol table to print } var i: integer; {loop variable} ip: identPtr; {current symbol} begin {PrintTable} if sym <> nil then begin writeln; {write header} writeln('Symbols:'); writeln('========'); for i := 0 to hashSize do begin {loop over all hash buckets} ip := sym^.buckets[i]; {trace through all symbols in this bucket} while ip <> nil do begin PrintOneSymbol(ip); {print a symbol} ip := ip^.next; {next symbol} end; {while} end; {for} end; {if} end; {PrintTable}

1
Symbol.asm Executable file
View File

@ -0,0 +1 @@
mcopy symbol.macros **************************************************************** * * ClearTable - set the symbol table to zeros * * Inputs: * table - symbol table address * **************************************************************** * ClearTable private tableSize equ 7026 sizeof(symbolTable) subroutine (4:table),0 ldy #tableSize-2 lda #0 lb1 sta [table],Y dey dey bpl lb1 return end

1
Symbol.macros Executable file
View File

@ -0,0 +1 @@
MACRO &lab subroutine &parms,&work &lab anop aif c:&work,.a lclc &work &work setc 0 .a gbla &totallen gbla &worklen &worklen seta &work &totallen seta 0 aif c:&parms=0,.e lclc &len lclc &p lcla &i &i seta c:&parms .b &p setc &parms(&i) &len amid &p,2,1 aif "&len"=":",.c &len amid &p,1,2 &p amid &p,4,l:&p-3 ago .d .c &len amid &p,1,1 &p amid &p,3,l:&p-2 .d &p equ &totallen+3+&work &totallen seta &totallen+&len &i seta &i-1 aif &i,^b .e tsc sec sbc #&work tcs inc a phd tcd mend MACRO &lab return &r &lab anop lclc &len aif c:&r,.a lclc &r &r setc 0 &len setc 0 ago .h .a &len amid &r,2,1 aif "&len"=":",.b &len amid &r,1,2 &r amid &r,4,l:&r-3 ago .c .b &len amid &r,1,1 &r amid &r,3,l:&r-2 .c aif &len<>2,.d ldy &r ago .h .d aif &len<>4,.e ldx &r+2 ldy &r ago .h .e aif &len<>10,.g aif &totallen=0,.f lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .f pld tsc clc adc #&worklen+&totallen tcs phb plx ply lda &r+8 pha lda &r+6 pha lda &r+4 pha lda &r+2 pha lda &r pha phy phx plb rtl mexit .g mnote 'Not a valid return length',16 mexit .h aif &totallen=0,.i lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .i pld tsc clc adc #&worklen+&totallen tcs aif &len=0,.j tya .j rtl mend

1
Symbol.pas Executable file

File diff suppressed because one or more lines are too long

1
Table.asm Executable file

File diff suppressed because one or more lines are too long

1
Table.macros Executable file
View File

@ -0,0 +1 @@
MACRO &LAB ENUM &LIST,&START &LAB ANOP AIF C:&~ENUM,.A GBLA &~ENUM .A AIF C:&START=0,.B &~ENUM SETA &START .B LCLA &CNT &CNT SETA 1 .C &LIST(&CNT) EQU &~ENUM &~ENUM SETA &~ENUM+1 &CNT SETA &CNT+1 AIF &CNT<=C:&LIST,^C MEND MACRO &LAB STR8 &STR &LAB DC I1'L:A&SYSCNT' A&SYSCNT DC C'&STR' DS 8-L:A&SYSCNT MEND

1
Table.pas Executable file
View File

@ -0,0 +1 @@
{$optimize 7} {---------------------------------------------------------------} { } { Table } { } { Initialized arrays and records. } { } {---------------------------------------------------------------} unit Table; {$LibPrefix '0/obj/'} interface uses CCommon; var {from scanner.pas} {----------------} charKinds: array[minChar..maxChar] of charEnum; {character kinds} charSym: array[minChar..maxChar] of tokenEnum; {symbols for single char symbols} reservedWords: array[autosy..whilesy] of string[8]; {reserved word strings} wordHash: array[0..23] of tokenEnum; {for hashing reserved words} {from ASM.PAS} {------------} {names of the opcodes} names: array[opcode] of packed array[1..3] of char; {binary values for the opcodes} iOpcodes: array[o_clc..o_xce] of byte; rOpcodes: array[o_bcc..o_bvs] of byte; nOpcodes: array[o_adc..o_tsb,operands] of byte; {from EXPRESSION.PAS} {-------------------} icp: array[tokenEnum] of byte; {in-commong priorities} isp: array[tokenEnum] of byte; {in-stack priorities} implementation end.

1
Tests/Conformance/C11.4.2.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 11.4.2.1: Type qualifiers should be allowed both in */ /* type casts and in the type-specifiers for */ /* field lists. */ #include <stdio.h> struct foo { int i; const j; volatile k; } ; main () { int i,j; j = 4; i = (const) j; i = (volatile) j; printf ("Passed Conformance Test 11.4.2.1\n"); }

1
Tests/Conformance/C13.1.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 13.1.0.1: Verification of standard library types and */ /* NULL */ #include <stddef.h> extended e1 [800]; main () { int i [10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int *i1 = i; int *i2 = &i [2]; long diff; unsigned long size; static ptrdiff_t TestPtrdiff_t (int *int1Ptr, int *int2Ptr); diff = TestPtrdiff_t (i2, i1); if (diff != 2) goto Fail; size = sizeof(e1); if (size != 8000) goto Fail; if (NULL != 0) goto Fail; printf ("Passed Conformance Test 13.1.0.1\n"); return; Fail: printf ("Failed Conformance Test 13.1.0.1\n"); } /*****************************************************************************/ static ptrdiff_t TestPtrdiff_t (int *int1Ptr, int *int2Ptr) { return int1Ptr - int2Ptr; }

1
Tests/Conformance/C14.1.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 14.1.0.1: Verification of isalnum, isalpha, isascii, */ /* and iscntrl */ #include <ctype.h> main () { int i, j; char ch; short k; long L; unsigned int ui1; unsigned long ul1; unsigned char uc; /* isalnum: returns 0 if char is not in ['0'..'9', 'a'..'z', 'A'..'Z'] */ for (ch = '0'; ch <= '9'; ch++) { j = isalnum (ch); if (j == 0) goto Fail; } for (uc = 'a'; uc <= 'z'; uc++) { j = isalnum (uc); if (j == 0) goto Fail; } for (uc = 'A'; uc <= 'Z'; uc++) { j = isalnum (uc); if (j == 0) goto Fail; } j = isalnum ('~'); if (j != 0) goto Fail; /* isalpha: returns 0 if char is not in ['a'..'z', 'A'..'Z'] */ for (ch = '0'; ch <= '9'; ch++) { j = isalpha (ch); if (j != 0) goto Fail; } for (uc = 'a'; uc <= 'z'; uc++) { j = isalpha (uc); if (j == 0) goto Fail; } for (uc = 'A'; uc <= 'Z'; uc++) { j = isalpha (uc); if (j == 0) goto Fail; } j = isalpha ('~'); if (j != 0) goto Fail; /* isascii: returns 0 if int is not in the range 0..128 */ for (k = 0, i = 0; i < 20; k++, i++) { j = isascii (k); if (j == 0) goto Fail; } for (uc = 20, i = 20; i < 39; uc++, i++) { j = isascii (uc); if (j == 0) goto Fail; } for (ch = 39, i = 39; i < 57; ch++, i++) { j = isascii (ch); if (j == 0) goto Fail; } for (L = 57, i = 57; i < 75; L++, i++) { j = isascii (L); if (j == 0) goto Fail; } for (ui1 = 75, i = 75; i < 93; ui1++, i++) { j = isascii (ui1); if (j == 0) goto Fail; } for (ul1 = 93, i = 93; i < 128; ul1++, i++) { j = isascii (ul1); if (j == 0) goto Fail; } for (i = 128; i < 256; i++) { j = isascii (i); if (j != 0) goto Fail; } /* iscntrl: returns 0 if char is not in [0..31, 127] */ for (i = 0; i <= 31; i++) { j = iscntrl ( (char) (i) ); if (j == 0) goto Fail; } if ( (j = iscntrl (127)) == 0 ) goto Fail; for (i = 32; i < 127; i++) { if ( (j = iscntrl ( (char) (i) )) != 0 ) goto Fail; } printf ("Passed Conformance Test 14.1.0.1\n"); return; Fail: printf ("Failed Conformance Test 14.1.0.1\n"); }

1
Tests/Conformance/C14.2.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 14.2.0.1: Verification of iscsym, iscymf */ #include <ctype.h> main () { int i, j; char ch; unsigned char uc; /* iscsym: returns 0 if char is not in ['0'..'9', 'a'..'z', 'A'..'Z', '_'] */ /* iscsymf: returns 0 if char is not in ['a'..'z', 'A'..'Z', '_'] */ for (ch = '0'; ch <= '9'; ch++) { j = iscsym (ch); if (j == 0) goto Fail; j = iscsymf (ch); if (j != 0) goto Fail; } for (uc = 'a'; uc <= 'z'; uc++) { j = iscsym (uc); if (j == 0) goto Fail; j = iscsymf (uc); if (j == 0) goto Fail; } for (uc = 'A'; uc <= 'Z'; uc++) { j = iscsym (uc); if (j == 0) goto Fail; j = iscsymf (uc); if (j == 0) goto Fail; } j = iscsym ('_'); if (j == 0) goto Fail; j = iscsymf ('_'); if (j == 0) goto Fail; j = iscsym ('~'); if (j != 0) goto Fail; printf ("Passed Conformance Test 14.2.0.1\n"); return; Fail: printf ("Failed Conformance Test 14.2.0.1\n"); }

1
Tests/Conformance/C14.3.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 14.3.0.1: Verification of isdigit, isodigit, isxdigit */ #include <ctype.h> main () { int i, j; char ch; unsigned char uc; /* isdigit: returns 0 if char is not in ['0'..'9'] */ /* isodigit: returns 0 if char is not in ['0'..'7'] */ /* isxdigit: returns 0 if char is not in ['0'..'9', 'a'..'f', 'A'..'F'] */ for (ch = '0'; ch < '8'; ch++) { j = isdigit (ch); if (j == 0) goto Fail; j = isodigit (ch); if (j == 0) goto Fail; j = isxdigit (ch); if (j == 0) goto Fail; } for (ch = '8'; ch <= '9'; ch++) { j = isdigit (ch); if (j == 0) goto Fail; j = isodigit (ch); if (j != 0) goto Fail; j = isxdigit (ch); if (j == 0) goto Fail; } for (uc = 'a'; uc <= 'f'; uc++) { j = isdigit (uc); if (j != 0) goto Fail; j = isodigit (uc); if (j != 0) goto Fail; j = isxdigit (uc); if (j == 0) goto Fail; } for (uc = 'A'; uc <= 'F'; uc++) { j = isdigit (uc); if (j != 0) goto Fail; j = isodigit (uc); if (j != 0) goto Fail; j = isxdigit (uc); if (j == 0) goto Fail; } for (uc = 'G'; uc <= 'Z'; uc++) { j = isdigit (uc); if (j != 0) goto Fail; j = isodigit (uc); if (j != 0) goto Fail; j = isxdigit (uc); if (j != 0) goto Fail; } printf ("Passed Conformance Test 14.3.0.1\n"); return; Fail: printf ("Failed Conformance Test 14.3.0.1\n"); }

1
Tests/Conformance/C14.5.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 14.5.0.1: Verification of islower, isupper */ #include <ctype.h> main () { int i, j; char ch; unsigned char uc; /* islower: returns 0 if char is not in ['a'..'z'] */ /* isupper: returns 0 if char is not in ['A'..'Z'] */ for (uc = 'a'; uc <= 'z'; uc++) { j = islower (uc); if (j == 0) goto Fail; j = isupper (uc); if (j != 0) goto Fail; } for (ch = 'A'; ch <= 'Z'; ch++) { j = islower (ch); if (j != 0) goto Fail; j = isupper (ch); if (j == 0) goto Fail; } printf ("Passed Conformance Test 14.5.0.1\n"); return; Fail: printf ("Failed Conformance Test 14.5.0.1\n"); }

1
Tests/Conformance/C14.6.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 14.6.0.1: Verification of isspace function */ #include <ctype.h> main () { int i, j; char ch; unsigned char uc; /* isspace: returns 0 if char is not in [ \t \r \n \v \f] */ j = isspace (' '); if (j == 0) goto Fail; for (uc = 9; uc <= '\r'; uc++) { j = isspace (uc); if (j == 0) goto Fail; } for (ch = 'A'; ch <= 'Z'; ch++) { j = isspace (ch); if (j != 0) goto Fail; } printf ("Passed Conformance Test 14.6.0.1\n"); return; Fail: printf ("Failed Conformance Test 14.6.0.1\n"); }

1
Tests/Conformance/C14.7.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 14.7.0.1: Verification of toascii function */ #include <ctype.h> main () { int i, j; char ch; short k; long L; unsigned int ui1; unsigned long ul1; unsigned char uc; /* toascii: returns ASCII value of any integral value by returning only */ /* the 7 low order bits */ for (k = 0, i = 0; i < 20; k++, i++) { j = toascii (k); if (j != k) goto Fail; } for (uc = 20, i = 20; i < 39; uc++, i++) { j = toascii (uc); if (j != uc) goto Fail; } for (ch = 39, i = 39; i < 57; ch++, i++) { j = toascii (ch); if (j != ch) goto Fail; } for (L = 57, i = 57; i < 75; L++, i++) { j = toascii (L); if (j != L) goto Fail; } for (ui1 = 75, i = 75; i < 93; ui1++, i++) { j = toascii (ui1); if (j != ui1) goto Fail; } for (ul1 = 93, i = 93; i < 128; ul1++, i++) { j = toascii (ul1); if (j != ul1) goto Fail; } for (k = 0, i = 128; i < 256; k++, i++) /* check truncation */ { j = toascii (i); if (j != k) goto Fail; } printf ("Passed Conformance Test 14.7.0.1\n"); return; Fail: printf ("Failed Conformance Test 14.7.0.1\n"); }

1
Tests/Conformance/C14.8.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 14.8.0.1: Verification of toint function */ #include <ctype.h> #include <stdio.h> main () { int i, j; char ch; unsigned char uc; /* toint: returns 0-9 for char in ['0'..'9'] and 10-15 for char in */ /* ['a'..'f'] or ['A'..'F'] */ for (uc = '0', i = 0; i < 10; uc++, i++) { j = toint (uc); if (j != i) goto Fail; } for (ch = 'A', i = 10; ch <= 'F'; ch++, i++) { j = toint (ch); if (j != i) goto Fail; } for (ch = 'a', i = 10; ch <= 'f'; ch++, i++) { j = toint (ch); if (j != i) goto Fail; } for (ch = 'G'; ch <= 'Z'; ch++) { j = toint (ch); if (j != EOF) goto Fail; } printf ("Passed Conformance Test 14.8.0.1\n"); return; Fail: printf ("Failed Conformance Test 14.8.0.1\n"); }

1
Tests/Conformance/C14.9.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 14.9.0.1: Verification of tolower, _tolower, toupper, */ /* _toupper functions */ #include <ctype.h> main () { int i, j; char ch; unsigned char uc; /* tolower: converts uppercase letter to lowercase letter; if character */ /* is not alphabetic, then just returns character unchanged */ for (ch = 'A', uc = 'a'; uc <= 'z'; ch++, uc++) { j = tolower (ch); if (j != uc) goto Fail; j = _tolower (ch); if (j != uc) goto Fail; j = tolower (uc); if (j != uc) goto Fail; j = _tolower (uc); if (j != uc) goto Fail; } /* toupper: converts lowercase letter to uppercase letter; if character */ /* is not alphabetic, then just returns character unchanged */ for (ch = 'A', uc = 'a'; uc <= 'z'; ch++, uc++) { j = toupper (uc); if (j != ch) goto Fail; j = _toupper (uc); if (j != ch) goto Fail; j = toupper (ch); if (j != ch) goto Fail; j = _toupper (ch); if (j != ch) goto Fail; } printf ("Passed Conformance Test 14.9.0.1\n"); return; Fail: printf ("Failed Conformance Test 14.9.0.1\n"); }

1
Tests/Conformance/C15.1.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 15.1.0.1: Verification of strcat, strncat functions */ #include <string.h> main () { char s1 [80] = "this is the first string argument"; char s2 [80] = ", and this is the second string argument!"; char s3 [160] = ""; strcpy(s3, strcat (s1, s2)); if (strlen (s3) != 74) goto Fail; if (strcmp (s3, "this is the first string argument, and this is the \ second string argument!")) goto Fail; strcpy(s1, "this is the first string argument"); strcpy(s3, strncat (s1, s2, 17)); if (strlen (s3) != 50) goto Fail; if (strcmp (s3, "this is the first string argument, and this is the")) goto Fail; strcpy(s1, "this is the first string argument"); strcpy(s3, strncat (s1, s2, 50)); if (strlen (s3) != 74) goto Fail; if (strcmp (s3, "this is the first string argument, and this is the \ second string argument!")) goto Fail; strcpy(s1, "this is the first string argument"); strcpy(s1, strncat (s1, s2, -5)); if (strcmp (s1, "this is the first string argument")) goto Fail; printf ("Passed Conformance Test 15.1.0.1\n"); return; Fail: printf ("Failed Conformance Test 15.1.0.1\n"); }

1
Tests/Conformance/C15.2.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 15.2.0.1: Verification of strcmp, strncmp functions */ #include <string.h> main () { int i; char s1 [] = "this is a string argument "; char s2 [] = "this is a string argument!"; char s3 [160] = ""; i = strcmp (s1, s2); /* ensure strcmp reports s1 < s2 */ if (i >= 0) goto Fail; i = strcmp (s2, s1); if (i <= 0) goto Fail; i = strncmp (s1, s2, 100); /* should compare all chars */ if (i >= 0) goto Fail; i = strncmp (s1, s2, 25); /* should compare 1st 25 chars */ if (i != 0) goto Fail; i = strncmp (s1, s2, -90L); /* should just return 0 */ if (i != 0) goto Fail; printf ("Passed Conformance Test 15.2.0.1\n"); return; Fail: printf ("Failed Conformance Test 15.2.0.1\n"); }

1
Tests/Conformance/C15.3.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 15.3.0.1: Verification of strcpy, strncpy functions */ #include <stddef.h> #include <string.h> main () { char s1 [80] = "this is the first string argument"; char s2 [80] = ", and this is the second string argument!"; char *strPtr; size_t i; strPtr = strcpy (s1, s2); if (( (i = strlen (strPtr)) != 41 ) || (strPtr != s1)) goto Fail; if (strcmp (s1, ", and this is the second string argument!")) goto Fail; strcpy(s1, "this is the first string argument"); strPtr = strncpy (s1, s2, 10); if (( (i = strlen (strPtr)) != 33 ) || (strPtr != s1)) goto Fail; if (strcmp (s1, ", and thise first string argument")) goto Fail; strcpy (s1, ", and thise first string argument"); strPtr = strncpy (s1, s2, -9L); if (( (i = strlen (strPtr)) != 33 ) || (strPtr != s1)) goto Fail; if (strcmp (s1, ", and thise first string argument")) goto Fail; printf ("Passed Conformance Test 15.3.0.1\n"); return; Fail: printf ("Failed Conformance Test 15.3.0.1\n"); }

1
Tests/Conformance/C15.5.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 15.5.0.1: Verification of strchr, strpos, strrchr, and */ /* strrpos functions */ #include <stddef.h> #include <string.h> main () { char s1 [80] = "this is the first string argument"; char *strPtr; size_t i; strPtr = strchr (s1, 's'); /* search s1 for 1st occurrence of 's' */ if (strPtr == NULL) goto Fail; if (strPtr != &(s1 [3])) goto Fail; strPtr = strchr (s1, 'z'); /* search s1 for char not in s1 */ if (strPtr != NULL) goto Fail; i = strpos (s1, 'f'); /* find position of 1st 'f' in s1 */ if (i != 12) goto Fail; i = strpos (s1, 'x'); /* find position of char not in s1 */ if (i != -1) goto Fail; i = strpos (s1, '\0'); /* find position of terminating null */ if (i != 33) goto Fail; strPtr = strrchr (s1, 's'); /* search s1 for last occurrence of 's' */ if (strPtr == NULL) goto Fail; if (strPtr != &(s1 [18])) goto Fail; strPtr = strrchr (s1, 'z'); /* search s1 for char not in s1 */ if (strPtr != NULL) goto Fail; i = strrpos (s1, 'g'); /* find position of last 'g' in s1 */ if (i != 27) goto Fail; i = strrpos (s1, 'x'); /* find position of char not in s1 */ if (i != -1) goto Fail; i = strrpos (s1, '\0'); /* find position of terminating null */ if (i != 33) goto Fail; printf ("Passed Conformance Test 15.5.0.1\n"); return; Fail: printf ("Failed Conformance Test 15.5.0.1\n"); }

1
Tests/Conformance/C15.6.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 15.6.0.1: Verification of strspn, strcspn, strpbrk, and */ /* strrpbrk functions */ #include <stddef.h> #include <string.h> main () { char s1 [80] = "a b c d e f g h i j k : ' - _ + "; char *strPtr; size_t i; /* strspn: find length of first run of chars from set */ i = strspn (s1, " abcde cbad "); /* search s1 for only chars in set */ if (i != 10) goto Fail; i = strspn (s1, " +_-':kjihgfedcba"); /* all chars in set are in s1 */ if (i != 32) /* should return length (s1) */ goto Fail; i = strspn (s1, ""); /* should return 0 */ if (i != 0) goto Fail; /* strcspn: find length of first run of chars not in set */ i = strcspn (s1, "fg:"); /* search s1 for chars not in set */ if (i != 10) goto Fail; i = strcspn (s1, " +_-':kjihgfedcba"); /* all chars in set are in s1 */ if (i != 0) /* should return 0 */ goto Fail; i = strcspn (s1, ""); /* should return strlen */ if (i != strlen(s1)) goto Fail; /* strpbrk: return pointer to 1st char in set */ strPtr = strpbrk (s1, "fg:"); /* search s1 for chars not in set */ if (strPtr != &(s1 [10])) goto Fail; strPtr = strpbrk (s1, " +_-':kjihgfedcba"); /* all chars in set are in s1 */ if (strPtr != s1) /* should return ptr to start*/ goto Fail; strPtr = strpbrk (s1, ""); /* should return NULL */ if (strPtr != NULL) goto Fail; /* strrpbrk: return pointer to last char in set */ strPtr = strrpbrk (s1, "fg:"); /* search s1 for last char in set */ if (strPtr != &(s1 [22])) goto Fail; strPtr = strrpbrk (s1, " +_-':kjihgfedcba"); /* all chars in set are in s1 */ if (strPtr != &(s1[31])) goto Fail; strPtr = strrpbrk (s1, ""); /* should return ptr to end of string */ if (strPtr != NULL) goto Fail; printf ("Passed Conformance Test 15.6.0.1\n"); return; Fail: printf ("Failed Conformance Test 15.6.0.1\n"); }

1
Tests/Conformance/C15.7.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 15.7.0.1: Verification of strstr function */ #include <stddef.h> #include <string.h> main () { char string [] = " this is the source string, a source string"; char *strPtr; strPtr = strstr (string, "source string"); if (strPtr != (&( (string) [(13)] )) ) goto Fail; strPtr = strstr (string, "source string!"); if (strPtr != NULL) goto Fail; printf ("Passed Conformance Test 15.7.0.1\n"); return; Fail: printf ("Failed Conformance Test 15.7.0.1\n"); }

1
Tests/Conformance/C15.7.0.2.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 15.7.0.2: Verification of strtok function */ #include <stddef.h> #include <string.h> main () { char string [] = " this is the source string, so creative! oh, yes"; char *strPtr; /* First call to strtok pass the string to be parsed; subsequent calls */ /* just pass a NULL pointer. Separating character is space to start. */ strPtr = strtok (string, " "); if (strPtr != (&( (string) [(1)] )) ) goto Fail; strPtr = strtok (NULL, " "); if (strPtr != &string [6]) goto Fail; strPtr = strtok (NULL, " "); if (strPtr != &string [9]) goto Fail; strPtr = strtok (NULL, " "); if (strPtr != &string [13]) goto Fail; strPtr = strtok (NULL, ","); /* now change the separator set */ if (strPtr != &string [20]) goto Fail; strPtr = strtok (NULL, ","); if (strPtr != &string [27]) goto Fail; strPtr = strtok (NULL, "! &*"); /* make last calls to strtok */ if (strPtr != &string [45]) /* address of '\0' at end of string */ goto Fail; strPtr = strtok (NULL, " "); if (strPtr != NULL) goto Fail; /* Check tokenized string created by successive calls to strtok. */ strcpy(string, " this is the source string, so creative! oh, yes"); strPtr = strtok (string, " "); if (strcmp (strPtr, "this")) goto Fail; strPtr = strtok (NULL, " "); if (strcmp (strPtr, "is")) goto Fail; strPtr = strtok (NULL, " "); if (strcmp (strPtr, "the")) goto Fail; strPtr = strtok (NULL, " "); if (strcmp (strPtr, "source")) goto Fail; strPtr = strtok (NULL, " "); if (strcmp (strPtr, "string,")) goto Fail; strPtr = strtok (NULL, " "); if (strcmp (strPtr, "so")) goto Fail; strPtr = strtok (NULL, " "); if (strcmp (strPtr, "creative!")) goto Fail; strPtr = strtok (NULL, " "); if (strcmp (strPtr, "oh,")) goto Fail; strPtr = strtok (NULL, " "); if (strcmp (strPtr, "yes")) goto Fail; /* Check "special" cases: string is the null string, and the string */ /* contains only separator characters */ strPtr = strtok ("", " "); if (strPtr != NULL) goto Fail; strPtr = strtok ("abc", "abc"); if (strPtr != NULL) goto Fail; printf ("Passed Conformance Test 15.7.0.2\n"); return; Fail: printf ("Failed Conformance Test 15.7.0.2\n"); }

1
Tests/Conformance/C15.8.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 15.8.0.1: Verification of strtod library function */ #include <stdlib.h> #include <math.h> #include <errno.h> main () { double d1; char string [] = " -32767 0567 -3.4e+2 "; char *strPtr; d1 = strtod (string, &strPtr); if (fabs(d1 - -32767.0) > 0.00001) goto Fail; if (strPtr != &string [8]) goto Fail; d1 = strtod (strPtr, &strPtr); if (fabs(d1 - 567.00) > 0.00001) goto Fail; if (strPtr != &string [14]) goto Fail; d1 = strtod (strPtr, &strPtr); if (fabs(d1 - (-340.00)) > 0.00001) goto Fail; if (strPtr != &string [23]) goto Fail; printf ("Passed Conformance Test 15.8.0.1\n"); return; Fail: printf ("Failed Conformance Test 15.8.0.1\n"); }

1
Tests/Conformance/C15.8.0.2.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 15.8.0.2: Verification of strtol, strtoul functions */ #include <stdlib.h> #include <limits.h> #include <errno.h> #include <string.h> #include <stdio.h> void main (void) { long L1; unsigned long UL1; char string [] = " -2147483647 0xfFfFfFfF 1111 077 0xffffffffff zz "; char *strPtr; L1 = strtol (string, &strPtr, 0); if (L1 != -(0x7fFfFfff)) goto Fail; if (strPtr != &string [13]) goto Fail; UL1 = strtoul (strPtr, &strPtr, 16); /* bases 10-36 can be letters */ if (UL1 != 4294967295ul) goto Fail; if (strPtr != &string [25]) goto Fail; L1 = strtol (strPtr, &strPtr, 2); if (L1 != 15) goto Fail; if (strPtr != &string [31]) goto Fail; UL1 = strtoul (strPtr, &strPtr, 8); if (UL1 != 63) goto Fail; if (strPtr != &string [36]) goto Fail; L1 = strtol (strPtr, &strPtr, 16); if (errno != ERANGE) goto Fail; UL1 = strtoul (strPtr, &strPtr, 16); if (errno != ERANGE) goto Fail; L1 = strtol ("zz", &strPtr, 0); if (errno != ERANGE) goto Fail; UL1 = strtoul ("xx", &strPtr, 0); if (errno != ERANGE) goto Fail; printf ("Passed Conformance Test 15.8.0.2\n"); return; Fail: printf ("Failed Conformance Test 15.8.0.2\n"); }

1
Tests/Conformance/C15.9.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 15.9.0.1: Verification of atof, atoi, atol functions */ #include <stdlib.h> main () { double d1; int i; long L; d1 = atof ("3.5e-22"); if (d1 != 3.5e-22) goto Fail; i = atoi ("-32765"); if (i != -32765) goto Fail; L = atol ("100000"); if (L != 100000) goto Fail; printf ("Passed Conformance Test 15.9.0.1\n"); return; Fail: printf ("Failed Conformance Test 15.9.0.1\n"); }

1
Tests/Conformance/C16.1.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 16.1.0.1: Verification of memchr, memcmp, memcpy, memmove */ /* library functions */ #include <stddef.h> #include <string.h> #include <stdlib.h> main () { int i; char *rgn, *ptr1; char string [] = "Here is a string to copy to the first region!!! "; rgn = (char *) malloc (512); /* allocate some memory for test */ if (rgn == NULL) goto Fail1; /* Copy the string into the allocated area. */ ptr1 = (char *) (memcpy (rgn, string, sizeof(string)+1)); if (strcmp(ptr1,string)) goto Fail; /* Ensure memmove works for overlapping regions. */ memmove (rgn+40, rgn, sizeof(string)+1); if (strcmp(string, rgn+40)) goto Fail; /* Test memchr by searching region for characters. */ ptr1 = (char *) memchr (string, 'n', 50); if (ptr1 != string+14) goto Fail; ptr1 = (char *) (memchr (string, 'Z', 88)); if (ptr1 != NULL) goto Fail; /* Verify that the region has the correct characters. */ i = memcmp ( (char *) (rgn), (char *) (rgn + 40), 39); if (i) goto Fail; i = memcmp ( string, "Here is a string", 17); if (i <= 0) goto Fail; free (rgn); printf ("Passed Conformance Test 16.1.0.1\n"); return; Fail: printf ("Failed Conformance Test 16.1.0.1\n"); return; Fail1: printf ("Unable to allocate memory for Conformance Test 16.1.0.1\n"); return; }

1
Tests/Conformance/C16.4.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 16.4.0.1: Verification of memset library function */ #include <stddef.h> #include <string.h> #include <stdlib.h> main () { char *rgn, *ptr1; rgn = (char *) malloc (1024); if (rgn == NULL) goto Fail1; ptr1 = (char *) memset (rgn, 'a', 1024); if (ptr1 != rgn) goto Fail; for (; rgn != ptr1; rgn++) if (*rgn != 'a') goto Fail; free (rgn); printf ("Passed Conformance Test 16.4.0.1\n"); return; Fail: printf ("Failed Conformance Test 16.4.0.1\n"); return; Fail1: printf ("Unable to allocate memory for Conformance Test 16.4.0.1\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.10.0.1: Verification of fputs and puts */ #include <stdio.h> main () { FILE *f1; int i,j; char string [255], *strPtr; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; /* Redirect standard output to a file */ stdout = freopen ("3/tmp2", "w+", stdout); if (stdout == NULL) goto Fail3; /* Write strings to output files. */ j = fputs ("this is the first string\n", f1); if (j) goto Fail; j = puts ("and this is the second string"); if (j) goto Fail; /* Check files' contents. */ rewind (f1); rewind (stdout); strPtr = fgets (string, 100, f1); if (strPtr != string) goto Fail; if (strcmp (string, "this is the first string\n")) goto Fail; strPtr = fgets (string, 100, stdout); if (strPtr != string) goto Fail; if (strcmp (string, "and this is the second string\n")) goto Fail; fclose(stdout); /* reset standard out */ i = fclose (f1); /* close the update file */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.10.0.1\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.10.0.1\n"); return; Fail1: fprintf (stderr, "Unable to open input file for Conformance Test 17.10.0.1\n"); return; Fail2: fprintf (stderr, "Unable to close input file for Conformance Test 17.10.0.1\n"); return; Fail3: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.10.0.1\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.11.0.1: Verification of fprintf, printf, sprintf: */ /* d, i format codes */ #include <string.h> #include <stdio.h> main () { FILE *f1; short i1; int i; int i2, i3; long L1; char string [80], sstring [80]; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; stdout = freopen ("3/tmp2", "w+", stdout); /* redirect stdout to a file */ if (stdout == NULL) goto Fail4; i1 = 32767; i2 = 0; L1 = -32767; i3 = 8; /* Write formatted output as string to the output files and sstring. */ i = fprintf (f1, " %-0+10.8hd %0 10.*i %5.d %10.8li %#-*li M\n", i1, i3, i1, i2, L1, i3, L1); if (i != 56) goto Fail; i = printf (" %-0+10.8hd %0 10.*i %5.d %10.8li %#-*li M\n", i1, i3, i1, i2, L1, i3, L1); if (i != 56) goto Fail; i = sprintf (sstring, " %-0+10.8hd %0 10.*i %5.d %10.8li %#-*li M\n", i1, i3, i1, i2, L1, i3, L1); if (i != 56) goto Fail; /* Check the string written. */ rewind (f1); i = fscanf (f1, "%55c", string); if (i != 1) goto Fail3; string [55] = '\0'; if (strcmp (string, " +000032767 000032767 -00032767\ -32767 M")) goto Fail; rewind (stdout); i = fscanf (stdout, "%55c", string); if (i != 1) goto Fail3; string [55] = '\0'; if (strcmp (string, " +000032767 000032767 -00032767\ -32767 M")) goto Fail; if (strcmp (sstring, " +000032767 000032767 -00032767\ -32767 M\n")) goto Fail; fclose(stdout); /* redirect stdout to screen */ i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.11.0.1\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.11.0.1\n"); return; Fail1: fprintf (stderr, "Unable to open output file for Conformance Test 17.11.0.1\n"); return; Fail2: fprintf (stderr, "Unable to close output file for Conformance Test 17.11.0.1\n"); return; Fail3: fprintf (stderr, "Unable to read output file for Conformance Test 17.11.0.1\n"); return; Fail4: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.11.0.1\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.11.0.10: Verification of fprintf, printf, sprintf: */ /* g,G format codes */ #include <stdio.h> main () { FILE *f1; int i; int i1, i2, i3; float fl1; double d1; extended e1; char string [80], sstring [80]; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; stdout = freopen ("3/tmp2", "w+", stdout); /* redirect stdout to file */ if (stdout == NULL) goto Fail4; fl1 = 9.0; d1 = -123.456e-20; e1 = 9876543210.0; i1 = 15; i2 = 8; /* Write formatted output as string to the output files and sstring. */ i = fprintf (f1, " %+0 #5.g %-0*.*G %13.10Lg G\n", fl1, i1, i2, d1, e1); if (i != 42) goto Fail; i = printf (" %+0 #5.g %-0*.*G %13.10Lg G\n", fl1, i1, i2, d1, e1); if (i != 42) goto Fail; i = sprintf (sstring, " %+0 #5.g %-0*.*G %13.10Lg G\n", fl1, i1, i2, d1, e1); if (i != 42) goto Fail; /* Check the string written. */ rewind (f1); i = fscanf (f1, "%41c", string); if (i != 1) goto Fail3; string [41] = '\0'; if (strcmp (string, " +009. -0001.23456E-18 9876543210 G")) goto Fail; rewind (stdout); i = fscanf (stdout, "%41c", string); if (i != 1) goto Fail3; string [41] = '\0'; if (strcmp (string, " +009. -0001.23456E-18 9876543210 G")) goto Fail; if (strcmp (sstring, " +009. -0001.23456E-18 9876543210 G\n")) goto Fail; fclose(stdout); /* redirect stdout to screen */ i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.11.0.10\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.11.0.10\n"); return; Fail1: fprintf (stderr, "Unable to open output file for Conformance Test 17.11.0.10\n"); return; Fail2: fprintf (stderr, "Unable to close output file for Conformance Test 17.11.0.10\n"); return; Fail3: fprintf (stderr, "Unable to read output file for Conformance Test 17.11.0.10\n"); return; Fail4: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.11.0.10\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.11.0.11: Verification of fprintf, printf, sprintf: */ /* n and % format codes */ #include <stdio.h> main () { FILE *f1; int i, i1, i2; short sh; long l1; extended e1; char string [80], sstring [80]; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; stdout = freopen ("3/tmp2", "w+", stdout); /* redirect stdout to file */ if (stdout == NULL) goto Fail4; e1 = 123.456e-205; i1 = 6; i2 = 16; /* Write formatted output as string to the output files and sstring. */ i = fprintf (f1, "%% %hn %0+*.*le %s %% %ln N\n", &sh, i1, i2, e1, "a string", &l1); if (i != 48) goto Fail; if ((sh != 3) || (l1 != 44)) /* check return values for n format */ goto Fail; i = printf ("%% %hn %0+*.*le %s %% %ln N\n", &sh, i1, i2, e1, "a string", &l1); if (i != 48) goto Fail; if ((sh != 3) || (l1 != 44)) /* check return values for n format */ goto Fail; i = sprintf (sstring, "%% %hn %0+*.*le %s %% %ln N\n", &sh, i1, i2, e1, "a string", &l1); if (i != 48) goto Fail; if ((sh != 3) || (l1 != 44)) /* check return values for n format */ goto Fail; /* Check the string written. */ rewind (f1); i = fscanf (f1, "%47c", string); if (i != 1) goto Fail3; string [47] = '\0'; if (strcmp (string, "% +1.2345599999999999e-203 a string % N")) goto Fail; rewind (stdout); i = fscanf (stdout, "%47c", string); if (i != 1) goto Fail3; string [47] = '\0'; if (strcmp (string, "% +1.2345599999999999e-203 a string % N")) goto Fail; if (strcmp (sstring, "% +1.2345599999999999e-203 a string % N\n")) goto Fail; fclose(stdout); /* redirect stdout to screen */ i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.11.0.11\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.11.0.11\n"); return; Fail1: fprintf (stderr, "Unable to open output file for Conformance Test 17.11.0.11\n"); return; Fail2: fprintf (stderr, "Unable to close output file for Conformance Test 17.11.0.11\n"); return; Fail3: fprintf (stderr, "Unable to read output file for Conformance Test 17.11.0.11\n"); return; Fail4: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.11.0.11\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.11.0.2: Verification of fprintf, sprintf, printf: */ /* u format code */ #include <stdio.h> main () { FILE *f1; int i, i1, i2; unsigned int ui1, ui2; unsigned long ul1; char string [80], sstring [80]; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; stdout = freopen ("3/tmp2", "w+", stdout); /* redirect stdout to a file */ if (stdout == NULL) goto Fail4; ui1 = 65535; ui2 = 0; ul1 = 4294967295u; i1 = 12; i2 = 16; /* Write formatted output as string to the output files and sstring. */ i = fprintf (f1, " %-11.10hu %# +07.4lu %.0u %-*.*lu A\n", ui1, (long) ui1, ui2, i1, i2, ul1); if (i != 45) goto Fail; i = printf (" %-11.10hu %# +07.4lu %.0u %-*.*lu A\n", ui1, (long) ui1, ui2, i1, i2, ul1); if (i != 45) goto Fail; i = sprintf (sstring, " %-11.10hu %# +07.4lu %.0u %-*.*lu A\n", ui1, (long) ui1, ui2, i1, i2, ul1); if (i != 45) goto Fail; /* Check the string written. */ rewind (f1); i = fscanf (f1, "%44c", string); if (i != 1) goto Fail3; string [44] = '\0'; i = fprintf (f1, " %-11.10hu %# +07.4lu %.0u %-*.*lu A\n", ui1, (long) ui1, ui2, i1, i2, ul1); if (strcmp (string, " 0000065535 +065535 0000004294967295 A")) goto Fail; rewind (stdout); i = fscanf (stdout, "%44c", string); if (i != 1) goto Fail3; string [44] = '\0'; if (strcmp (string, " 0000065535 +065535 0000004294967295 A")) goto Fail; if (strcmp (sstring, " 0000065535 +065535 0000004294967295 A\n")) goto Fail; fclose(stdout); /* redirect stdout to screen */ i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.11.0.2\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.11.0.2\n"); return; Fail1: fprintf (stderr, "Unable to open output file for Conformance Test 17.11.0.2\n"); return; Fail2: fprintf (stderr, "Unable to close output file for Conformance Test 17.11.0.2\n"); return; Fail3: fprintf (stderr, "Unable to read output file for Conformance Test 17.11.0.2\n"); return; Fail4: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.11.0.2\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.11.0.3: Verification of fprintf, printf, sprintf: */ /* o format code */ #include <stdio.h> main () { FILE *f1; int i, i1, i2; unsigned int ui1, ui2; unsigned long ul1; char string [80], sstring [80]; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; stdout = freopen ("3/tmp2", "w+", stdout); /* redirect stdout to a file */ if (stdout == NULL) goto Fail4; ui1 = 65535; ui2 = 0; ul1 = 4294967295u; i1 = 6; i2 = 9; /* Write formatted output as string to the output files and sstring. */ i = fprintf (f1, " %-+ #10.5ho %#0*.*o %o %-12lo B\n", ui1, i1, i2, ui1, ui2, ul1); if (i != 43) goto Fail; i = printf (" %-+ #10.5ho %#0*.*o %o %-12lo B\n", ui1, i1, i2, ui1, ui2, ul1); if (i != 43) goto Fail; i = sprintf (sstring, " %-+ #10.5ho %#0*.*o %o %-12lo B\n", ui1, i1, i2, ui1, ui2, ul1); if (i != 43) goto Fail; /* Check the string written. */ rewind (f1); i = fscanf (f1, "%42c", string); if (i != 1) goto Fail3; string [42] = '\0'; if (strcmp (string, " 0177777 000177777 0 37777777777 B")) goto Fail; rewind (stdout); i = fscanf (stdout, "%42c", string); if (i != 1) goto Fail3; string [42] = '\0'; if (strcmp (string, " 0177777 000177777 0 37777777777 B")) goto Fail; if (strcmp (sstring, " 0177777 000177777 0 37777777777 B\n")) goto Fail; fclose(stdout); /* redirect stdout to screen */ i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.11.0.3\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.11.0.3\n"); return; Fail1: fprintf (stderr, "Unable to open output file for Conformance Test 17.11.0.3\n"); return; Fail2: fprintf (stderr, "Unable to close output file for Conformance Test 17.11.0.3\n"); return; Fail3: fprintf (stderr, "Unable to read output file for Conformance Test 17.11.0.3\n"); return; Fail4: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.11.0.3\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.11.0.4: Verification of fprintf, printf, sprintf: */ /* x,X format codes */ #include <stdio.h> main () { FILE *f1; int i, i1, i2; unsigned int ui1, ui2; unsigned long ul1; char string [80], sstring [80]; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; stdout = freopen ("3/tmp2", "w+", stdout); /* redirect stdout to a file */ if (stdout == NULL) goto Fail4; ui1 = 65535u; ui2 = 0; ul1 = 4294967295u; i1 = 12; i2 = 10; /* Write formatted output as string to the output file. */ i = fprintf (f1, " %#+ -10.10x %#+ 09.8X %.0x %+ *.*lx C\n", ui1, ui1, ui2, i1, i2, ul1); if (i != 45) goto Fail; i = printf (" %#+ -10.10x %#+ 09.8X %.0x %+ *.*lx C\n", ui1, ui1, ui2, i1, i2, ul1); if (i != 45) goto Fail; i = sprintf (sstring, " %#+ -10.10x %#+ 09.8X %.0x %+ *.*lx C\n", ui1, ui1, ui2, i1, i2, ul1); if (i != 45) goto Fail; /* Check the string written. */ rewind (f1); i = fscanf (f1, "%44c", string); if (i != 1) goto Fail3; string [44] = '\0'; if (strcmp (string, " 0x000000ffff 0X0000FFFF 00ffffffff C")) goto Fail; rewind (stdout); i = fscanf (stdout, "%44c", string); if (i != 1) goto Fail3; string [44] = '\0'; if (strcmp (string, " 0x000000ffff 0X0000FFFF 00ffffffff C")) goto Fail; if (strcmp (sstring, " 0x000000ffff 0X0000FFFF 00ffffffff C\n")) goto Fail; fclose(stdout); /* redirect stdout to screen */ i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.11.0.4\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.11.0.4\n"); return; Fail1: fprintf (stderr, "Unable to open output file for Conformance Test 17.11.0.4\n"); return; Fail2: fprintf (stderr, "Unable to close output file for Conformance Test 17.11.0.4\n"); return; Fail3: fprintf (stderr, "Unable to read output file for Conformance Test 17.11.0.4\n"); return; Fail4: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.11.0.4\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.11.0.5: Verification of fprintf, printf, sprintf: */ /* c format code */ #include <stdio.h> main () { FILE *f1; int i, i1, i2; unsigned int ui1, ui2; char string [80], sstring [80]; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; stdout = freopen ("3/tmp2", "w+", stdout); /* redirect stdout to a file */ if (stdout == NULL) goto Fail4; ui1 = 'a'; ui2 = 'b'; i1 = 3; i2 = 2; /* Write formatted output as string to the output file. */ i = fprintf (f1, " %#+ -010.10c %05.7hc %.6lc %+ *.*lc D\n", ui1, ui1, ui2, i1, i2, 'd'); if (i != 30) goto Fail; i = printf (" %#+ -010.10c %05.7hc %.6lc %+ *.*lc D\n", ui1, ui1, ui2, i1, i2, 'd'); if (i != 30) goto Fail; i = sprintf (sstring, " %#+ -010.10c %05.7hc %.6lc %+ *.*lc D\n", ui1, ui1, ui2, i1, i2, 'd'); if (i != 30) goto Fail; /* Check the string written. */ rewind (f1); i = fscanf (f1, "%29c", string); if (i != 1) goto Fail3; string [29] = '\0'; if (strcmp (string, " a a b d D")) goto Fail; rewind (stdout); i = fscanf (stdout, "%29c", string); if (i != 1) goto Fail3; string [29] = '\0'; if (strcmp (string, " a a b d D")) goto Fail; if (strcmp (sstring, " a a b d D\n")) goto Fail; fclose(stdout); /* redirect stdout to screen */ i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.11.0.5\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.11.0.5\n"); return; Fail1: fprintf (stderr, "Unable to open output file for Conformance Test 17.11.0.5\n"); return; Fail2: fprintf (stderr, "Unable to close output file for Conformance Test 17.11.0.5\n"); return; Fail3: fprintf (stderr, "Unable to read output file for Conformance Test 17.11.0.5\n"); return; Fail4: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.11.0.5\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.11.0.6: Verification of fprintf, printf, sprintf: */ /* s format code */ #include <stdio.h> main () { FILE *f1; int i, j, k; char sstring [80]; char string [80], arg1 [] = "first string argument", arg2 [] = "second string argument "; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; stdout = freopen ("3/tmp2", "w+", stdout); /* redirect stdout to a file */ if (stdout == NULL) goto Fail4; j = 15; k = 30; /* Write formatted output as string to the output files and sstring. */ i = fprintf (f1, " %#+ -10.10s %015.7hs %*.*s %s E\n", arg1, arg1, j, k, arg2, "very short string"); if (i != 77) goto Fail; i = printf (" %#+ -10.10s %015.7hs %*.*s %s E\n", arg1, arg1, j, k, arg2, "very short string"); if (i != 77) goto Fail; i = sprintf (sstring, " %#+ -10.10s %015.7hs %*.*s %s E\n", arg1, arg1, j, k, arg2, "very short string"); if (i != 77) goto Fail; /* Check the string written. */ rewind (f1); i = fscanf (f1, "%76c", string); if (i != 1) goto Fail3; string [76] = '\0'; if (strcmp (string, " first stri first s second string argument \ very short string E")) goto Fail; rewind (stdout); i = fscanf (stdout, "%76c", string); if (i != 1) goto Fail3; string [76] = '\0'; if (strcmp (string, " first stri first s second string argument \ very short string E")) goto Fail; if (strcmp (sstring, " first stri first s second string argument \ very short string E\n")) goto Fail; fclose(stdout); /* redirect stdout to screen */ i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.11.0.6\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.11.0.6\n"); return; Fail1: fprintf (stderr, "Unable to open output file for Conformance Test 17.11.0.6\n"); return; Fail2: fprintf (stderr, "Unable to close output file for Conformance Test 17.11.0.6\n"); return; Fail3: fprintf (stderr, "Unable to read output file for Conformance Test 17.11.0.6\n"); return; Fail4: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.11.0.6\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.11.0.7: Verification of fprintf, printf, sprintf: */ /* p format code */ #include <stdio.h> main () { FILE *f1; int i, j, k; char sstring [80]; char string [80], arg1 [] = "\pfirst string argument", arg2 [] = "\psecond string argument "; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; stdout = freopen ("3/tmp2", "w+", stdout); /* redirect stdout to file */ if (stdout == NULL) goto Fail4; j = 15; k = 30; /* Write formatted output as string to the output file. */ i = fprintf (f1, " %#+ -10.10b %015.7hb %*.*b %b E\n", arg1, arg1, j, k, arg2, "\pvery short string"); if (i != 77) goto Fail; i = printf (" %#+ -10.10b %015.7hb %*.*b %b E\n", arg1, arg1, j, k, arg2, "\pvery short string"); if (i != 77) goto Fail; i = sprintf (sstring, " %#+ -10.10b %015.7hb %*.*b %b E\n", arg1, arg1, j, k, arg2, "\pvery short string"); if (i != 77) goto Fail; /* Check the string written. */ rewind (f1); i = fscanf (f1, "%76c", string); if (i != 1) goto Fail3; string [76] = '\0'; if (strcmp (string, " first stri first s second string argument \ very short string E")) goto Fail; rewind (stdout); i = fscanf (stdout, "%76c", string); if (i != 1) goto Fail3; string [76] = '\0'; if (strcmp (string, " first stri first s second string argument \ very short string E")) goto Fail; if (strcmp (sstring, " first stri first s second string argument \ very short string E\n")) goto Fail; fclose(stdout); /* redirect stdout to screen */ i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.11.0.7\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.11.0.7\n"); return; Fail1: fprintf (stderr, "Unable to open output file for Conformance Test 17.11.0.7\n"); return; Fail2: fprintf (stderr, "Unable to close output file for Conformance Test 17.11.0.7\n"); return; Fail3: fprintf (stderr, "Unable to read output file for Conformance Test 17.11.0.7\n"); return; Fail4: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.11.0.7\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.11.0.8: Verification of fprintf, printf, sprintf: */ /* f format code */ #include <stdio.h> main () { FILE *f1; int i; int i2, i3; float fl1; double d1; extended e1; char string [80], sstring [80]; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; stdout = freopen ("3/tmp2", "w+", stdout); /* redirect stdout to file */ if (stdout == NULL) goto Fail4; fl1 = 45.0; d1 = 123.456e-2; e1 = 99.999; /* Write formatted output as string to the output files and sstring. */ i = fprintf (f1, " %# +012.7f %+-8.f %# 011lf T\n", d1, fl1, e1); if (i != 40) goto Fail; i = printf (" %# +012.7f %+-8.f %# 011lf T\n", d1, fl1, e1); if (i != 40) goto Fail; i = sprintf (sstring, " %# +012.7f %+-8.f %# 011lf T\n", d1, fl1, e1); if (i != 40) goto Fail; /* Check the string written. */ rewind (f1); i = fscanf (f1, "%39c", string); if (i != 1) goto Fail3; string [39] = '\0'; if (strcmp (string, " +001.2345600 +45 099.999000 T")) goto Fail; rewind (stdout); i = fscanf (stdout, "%39c", string); if (i != 1) goto Fail3; string [39] = '\0'; if (strcmp (string, " +001.2345600 +45 099.999000 T")) goto Fail; if (strcmp (sstring, " +001.2345600 +45 099.999000 T\n")) goto Fail; fclose(stdout); /* redirect stdout to screen */ i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.11.0.8\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.11.0.8\n"); return; Fail1: fprintf (stderr, "Unable to open output file for Conformance Test 17.11.0.8\n"); return; Fail2: fprintf (stderr, "Unable to close output file for Conformance Test 17.11.0.8\n"); return; Fail3: fprintf (stderr, "Unable to read output file for Conformance Test 17.11.0.8\n"); return; Fail4: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.11.0.8\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.11.0.9: Verification of fprintf, printf, sprintf: */ /* e, E format codes */ #include <stdio.h> main () { FILE *f1; int i; int i1, i2, i3; float fl1; double d1; extended e1; char string [80], sstring [80]; f1 = fopen ("3/tmp", "w+"); /* open output file for test */ if (f1 == NULL) goto Fail1; stdout = freopen ("3/tmp2", "w+", stdout); /* redirect stdout to file */ if (stdout == NULL) goto Fail4; fl1 = 5.0; d1 = -4.7; e1 = 123.456e-205; i1 = 6; i2 = 16; /* Write formatted output as string to the output files and sstring. */ i = fprintf (f1, " %0+*.*le %- 15E %#0 .e E\n", i1, i2, e1, d1, fl1); if (i != 54) goto Fail; i = printf (" %0+*.*le %- 15E %#0 .e E\n", i1, i2, e1, d1, fl1); if (i != 54) goto Fail; i = sprintf (sstring, " %0+*.*le %- 15E %#0 .e E\n", i1, i2, e1, d1, fl1); if (i != 54) goto Fail; /* Check the string written. */ rewind (f1); i = fscanf (f1, "%53c", string); if (i != 1) goto Fail3; string [53] = '\0'; if (strcmp (string, " +1.2345599999999999e-203 -4.700000E+00 5e+00 E")) goto Fail; rewind (stdout); i = fscanf (stdout, "%53c", string); if (i != 1) goto Fail3; string [53] = '\0'; if (strcmp (string, " +1.2345599999999999e-203 -4.700000E+00 5e+00 E")) goto Fail; if (strcmp (sstring, " +1.2345599999999999e-203 -4.700000E+00 5e+00 E\n")) goto Fail; fclose(stdout); /* redirect stdout to screen */ i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.11.0.9\n"); return; Fail: fprintf (stderr, "Failed Conformance Test 17.11.0.9\n"); return; Fail1: fprintf (stderr, "Unable to open output file for Conformance Test 17.11.0.9\n"); return; Fail2: fprintf (stderr, "Unable to close output file for Conformance Test 17.11.0.9\n"); return; Fail3: fprintf (stderr, "Unable to read output file for Conformance Test 17.11.0.9\n"); return; Fail4: fprintf (stderr, "Unable to redirect stdout for Conformance Test 17.11.0.9\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.13.0.1: Verification of fread and fwrite */ #include <stdio.h> #include <math.h> struct S { int i; float f; char c; }; main () { struct S s [3] = { 1, 1.0, 'a', 2, 2.0, 'b', 3, 3.0, 'c' }; struct S buff [3]; FILE *f = fopen ("3/tmp", "w+b"); int i; /* Write the elements to the file. */ if (f == NULL) goto Fail1; i = fwrite ((void *) s, sizeof (struct S), 3, f); if (i != 3) goto Fail; /* Read the elements from the file. */ rewind (f); i = fread ((void *) buff, sizeof (struct S), 3, f); if (i != 3) goto Fail; if ((s [0].i != 1) || (s [1].i != 2) || (s [2].i != 3)) goto Fail; if ((fabs(s [0].f - 1.0) > 0.00001) || (fabs(s [1].f - 2.0) > 0.00001) || (fabs(s [2].f - 3.0) > 0.00001)) goto Fail; if ((s [0].c != 'a') || (s [1].c != 'b') || (s [2].c != 'c')) goto Fail; /* Ensure that a count or element_size of 0 causes no chars to be written. */ i = fwrite ((void *) s, sizeof (struct S), 0, f); if (i != 0) goto Fail; i = fwrite ((void *) s, 0, 2, f); if (i != 2) goto Fail; rewind (f); i = fread ((void *) s, sizeof (struct S), 0, f); if (i != 0) goto Fail; i = fread ((void *) s, 0, 2, f); if (i != 0) goto Fail; i = fclose (f); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.13.0.1\n"); return; Fail: printf ("Failed Conformance Test 17.13.0.1\n"); return; Fail1: printf ("Unable to open temp file for Conformance Test 17.13.0.1\n"); return; Fail2: printf ("Unable to close output file for Conformance Test 17.13.0.1\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.14.0.1: Verification of ferror and clearerr */ #include <stdio.h> struct S { int i; float f; char c; }; main () { struct S s [3] = { 1, 1.0, 'a', 2, 2.0, 'b', 3, 3.0, 'c' }; struct S buff [3]; FILE *f = fopen ("3/tmp", "w+b"); int i; /* Write the elements to the file. */ if (f == NULL) goto Fail1; i = fwrite ((void *) s, sizeof (struct S), 3, f); if (i != 3) goto Fail; /* Cause an error to occur. */ rewind (f); i = fread ((void *) buff, sizeof (struct S), 5, f); if (i != 3) goto Fail; i = ferror (f); if (i != 0) goto Fail; i = feof (f); if (i == 0) goto Fail; /* clear the error */ clearerr (f); i = feof (f); if (i != 0) goto Fail; i = fclose (f); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.14.0.1\n"); return; Fail: printf ("Failed Conformance Test 17.14.0.1\n"); return; Fail1: printf ("Unable to open temp file for Conformance Test 17.14.0.1\n"); return; Fail2: printf ("Unable to close output file for Conformance Test 17.14.0.1\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.15.0.1: Verification of remove and rename */ #include <stdio.h> struct S { int i; float f; char c; }; main () { struct S s [3] = { 1, 1.0, 'a', 2, 2.0, 'b', 3, 3.0, 'c' }; struct S buff [3]; FILE *f = fopen ("3/tmp", "wb"); int i; /* Write the elements to the file. */ if (f == NULL) goto Fail1; i = fwrite ((void *) s, sizeof (struct S), 3, f); if (i != 3) goto Fail; i = fclose (f); /* close the file */ if (i == EOF) goto Fail2; /* Rename and then delete the file. */ i = remove ("3/temp"); i = rename ("3/tmp", "3/temp"); if (i) goto Fail; i = remove ("3/temp"); if (i) goto Fail; printf ("Passed Conformance Test 17.15.0.1\n"); return; Fail: printf ("Failed Conformance Test 17.15.0.1\n"); return; Fail1: printf ("Unable to open temp file for Conformance Test 17.15.0.1\n"); return; Fail2: printf ("Unable to close output file for Conformance Test 17.15.0.1\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.16.0.1: Verification of tmpfile function */ #include <stdio.h> struct S { int i; float f; char c; }; main () { struct S s [3] = { 1, 1.0, 'a', 2, 2.0, 'b', 3, 3.0, 'c' }; struct S buff [3]; FILE *f1, *f2, *f3; int i; /* Create 3 temp files and write the elements to the files. */ f1 = tmpfile (); if (f1 == NULL) goto Fail1; i = fwrite ((void *) s, sizeof (struct S), 3, f1); if (i != 3) goto Fail; f2 = tmpfile (); if (f2 == NULL) goto Fail1; i = fwrite ((void *) s, sizeof (struct S), 3, f2); if (i != 3) goto Fail; f3 = tmpfile (); if (f3 == NULL) goto Fail1; i = fwrite ((void *) s, sizeof (struct S), 3, f3); if (i != 3) goto Fail; /* Read the elements from the files. */ rewind (f1); i = fread ((void *) buff, sizeof (struct S), 3, f1); if (i != 3) goto Fail; if ((s [0].i != 1) || (s [1].i != 2) || (s [2].i != 3)) goto Fail; if ((s [0].f != 1.0) || (s [1].f != 2.0) || (s [2].f != 3.0)) goto Fail; if ((s [0].c != 'a') || (s [1].c != 'b') || (s [2].c != 'c')) goto Fail; rewind (f2); i = fread ((void *) buff, sizeof (struct S), 3, f2); if (i != 3) goto Fail; if ((s [0].i != 1) || (s [1].i != 2) || (s [2].i != 3)) goto Fail; if ((s [0].f != 1.0) || (s [1].f != 2.0) || (s [2].f != 3.0)) goto Fail; if ((s [0].c != 'a') || (s [1].c != 'b') || (s [2].c != 'c')) goto Fail; rewind (f2); i = fread ((void *) buff, sizeof (struct S), 3, f2); if (i != 3) goto Fail; if ((s [0].i != 1) || (s [1].i != 2) || (s [2].i != 3)) goto Fail; if ((s [0].f != 1.0) || (s [1].f != 2.0) || (s [2].f != 3.0)) goto Fail; if ((s [0].c != 'a') || (s [1].c != 'b') || (s [2].c != 'c')) goto Fail; i = fclose (f1); /* close the files and quit */ if (i == EOF) goto Fail2; i = fclose (f2); if (i == EOF) goto Fail2; i = fclose (f3); if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.16.0.1\n"); return; Fail: printf ("Failed Conformance Test 17.16.0.1\n"); return; Fail1: printf ("Unable to open temp file for Conformance Test 17.16.0.1\n"); return; Fail2: printf ("Unable to close output file for Conformance Test 17.16.0.1\n"); return; }

1
Tests/Conformance/C17.5.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 17.5.0.1: Verification of fseek function */ #include <stdio.h> main () { FILE *f1; /* file pointer */ int i, j, k, m; f1 = fopen ("3/tmp", "w+b"); /* create binary file to work on */ if (f1 == NULL) goto Fail1; for (i = 0; i < 100; i++) /* write 100 integers to the file */ { j = fprintf (f1, "%2d ", i); if (j == EOF) goto Fail2; } i = fseek (f1, 50, SEEK_END); /* extend file by extra 50 bytes */ if (i) goto Fail; rewind (f1); /* position at beginning of file */ i = 0; while ((j = fgetc (f1)) != EOF) i += 1; if (! (j = feof (f1)) ) goto Fail3; if (i != 450) /* check size of file in bytes */ goto Fail; /* Test seek from beginning of file. */ for (k = 0, i = 0; i < 100; i++) { j = fseek (f1, k, SEEK_SET); if (j) goto Fail; j = fscanf (f1, "%d", &m); if (j == EOF) goto Fail3; if (m != i) goto Fail; k += 4; } /* Test seek from end of file. */ j = fseek (f1, -54, SEEK_END); /* start 54 bytes from end of file */ if (j) goto Fail; for (k = -54, i = 99; i > 0; i--) { j = fscanf (f1, "%d", &m); if (j == EOF) goto Fail3; if (m != i) goto Fail; k -= 4; j = fseek (f1, k, SEEK_END); if (j) goto Fail; } /* Test seek from current position in file. */ j = fseek (f1, 12, SEEK_CUR); if (j) goto Fail; j = fscanf (f1, "%d", &m); if (j == EOF) goto Fail3; if (m != 3) goto Fail; j = fseek (f1, 12, SEEK_CUR); if (j) goto Fail; j = fscanf (f1, "%d", &m); if (j == EOF) goto Fail3; if (m != 7) goto Fail; /* Close the file and quit. */ j = fclose (f1); if (j == EOF) goto Fail4; printf ("Passed Conformance Test 17.5.0.1\n"); return; Fail: printf ("Failed Conformance Test 17.5.0.1\n"); return; Fail1: printf ("Could not open tmp file for Conformance Test 17.5.0.1\n"); return; Fail2: printf ("Could not write to file for Conformance Test 17.5.0.1\n"); return; Fail3: printf ("Error while reading file for Conformance Test 17.5.0.1\n"); return; Fail4: printf ("Could not close file for Conformance Test 17.5.0.1\n"); return; }

1
Tests/Conformance/C17.5.0.2.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 17.5.0.2: Verification of fseek, rewind, and ftell */ /* functions for text files */ #include <stdio.h> main () { FILE *f1; /* file pointer */ int i, j, m; long L1; char s [254], ch1; char ch [254] = "a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z." "a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z." "a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z." "a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z." "A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V."; f1 = fopen ("14:tmp", "w+"); /* create temporary file to work on */ if (f1 == NULL) goto Fail1; for (i = 0; i < 100; i++) /* write 100 lines to the file */ { j = fprintf (f1, "%s\n", ch); if (j == EOF) goto Fail2; } /* Test seek from beginning of file. */ j = fseek (f1, 0L, SEEK_SET); if (j) goto Fail; for (i = 0; i < 100; i++) { j = fscanf (f1, "%s", s); if (j == EOF) goto Fail3; if (strcmp (s, ch)) goto Fail; } /* Test seek from end of file. */ j = fseek (f1, 0L, SEEK_END); if (j) goto Fail; j = fscanf (f1, "%c", &m); if (j != EOF) goto Fail3; /* Test ftell function. */ L1 = ftell (f1); if (L1 != 25300) goto Fail; rewind (f1); L1 = ftell (f1); if (L1 != 0) goto Fail; ch1 = fgetc (f1); if (ch1 == EOF) goto Fail3; if (ch1 != 'a') goto Fail; ch1 = fgetc (f1); if (ch1 == EOF) goto Fail3; if (ch1 != '.') goto Fail; L1 = ftell (f1); if (L1 != 2) goto Fail; ch1 = fgetc (f1); if (ch1 == EOF) goto Fail3; if (ch1 != 'b') goto Fail; ch1 = fgetc (f1); if (ch1 == EOF) goto Fail3; if (ch1 != '.') goto Fail; ch1 = fgetc (f1); if (ch1 == EOF) goto Fail3; if (ch1 != 'c') goto Fail; j = fseek (f1, L1, SEEK_SET); /* verify that ftell-position works */ if (j) goto Fail; ch1 = fgetc (f1); if (ch1 == EOF) goto Fail3; if (ch1 != 'b') goto Fail; /* Close the file and quit. */ j = fclose (f1); if (j == EOF) goto Fail4; printf ("Passed Conformance Test 17.5.0.2\n"); return; Fail: printf ("Failed Conformance Test 17.5.0.2\n"); return; Fail1: printf ("Could not open tmp file for Conformance Test 17.5.0.2\n"); return; Fail2: printf ("Could not write to file for Conformance Test 17.5.0.2\n"); return; Fail3: printf ("Error while reading file for Conformance Test 17.5.0.2\n"); return; Fail4: printf ("Could not close file for Conformance Test 17.5.0.2\n"); return; }

1
Tests/Conformance/C17.6.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 17.6.0.1: Verification of fgetc, getc, and ungetc with */ /* a text stream */ #include <stdio.h> main () { FILE *f1; int i, j; char ch; f1 = fopen ("3/tmp", "w+"); /* create text file to work on */ if (f1 == NULL) goto Fail1; for (ch = 'a', i = 0; i < 26; i++) { j = fputc (ch, f1); if ((char) j != ch) goto Fail2; ch++; } j = fputc ('\r', f1); /* text files end with return */ if (j != '\r') goto Fail2; rewind (f1); /* check file contents with fgetc */ for (ch = 'a', i = 0; i < 26; i++) { j = fgetc (f1); if ( (char) j != ch++ ) goto Fail; } i = ungetc ('F', f1); /* test ungetc */ if (i != 'F') goto Fail; i = fgetc (f1); if (i != 'F') goto Fail; i = fgetc (f1); if (i != '\n') goto Fail; i = fgetc (f1); if (! (feof (f1)) ) /* ensure end-of-file reached */ goto Fail; j = ungetc (i, f1); /* not an error to try to push */ if (j != EOF) /* back EOF */ goto Fail; j = fseek (f1, 0L, SEEK_SET); /* test getc with temp file */ if (j) goto Fail3; j = ungetc (i, f1); /* ungetc should return an error */ if (j != EOF) /* after seeking on the file */ goto Fail; /* before reading */ for (ch = 'a', i = 0; i < 26; i++) { j = getc (f1); if ( (char) j != ch++ ) goto Fail; } i = ungetc ('L', f1); /* test ungetc */ if (i != 'L') goto Fail; i = fgetc (f1); if (i != 'L') goto Fail; i = getc (f1); if (i != '\n') goto Fail; i = getc (f1); if (! (feof (f1)) ) /* ensure end-of-file reached */ goto Fail; j = ungetc (i, f1); /* not an error to try to push */ if (j != EOF) /* back EOF */ goto Fail; i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail4; printf ("Passed Conformance Test 17.6.0.1\n"); return; Fail: printf ("Failed Conformance Test 17.6.0.1\n"); return; Fail1: printf ("Unable to open temp file for Conformance Test 17.6.0.1\n"); return; Fail2: printf ("Unable to write to temp file for Conformance Test 17.6.0.1\n"); return; Fail3: printf ("Unable to seek to temp file for Conformance Test 17.6.0.1\n"); return; Fail4: printf ("Unable to close temp file for Conformance Test 17.6.0.1\n"); return; }

1
Tests/Conformance/C17.6.0.2.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 17.6.0.2: Verification of fgetc, getc, and ungetc with */ /* a binary stream */ #include <stdio.h> main () { FILE *f1; int i, j; char ch; f1 = fopen ("3/tmp", "w+b"); /* create binary file to work on */ if (f1 == NULL) goto Fail1; for (ch = 'a', i = 0; i < 26; i++) { j = fputc (ch, f1); if ((char) j != ch) goto Fail2; ch++; } rewind (f1); /* check file contents with fgetc */ ch = 'a'; while ((i = fgetc (f1)) != EOF) if ( (char) i != ch++ ) goto Fail; if (! (feof (f1)) ) /* ensure end-of-file reached */ goto Fail; j = ungetc (i, f1); /* not an error to try to push */ if (j != EOF) /* back EOF */ goto Fail; j = fseek (f1, 0L, SEEK_SET); /* test getc with temp file */ if (j) goto Fail3; j = ungetc (i, f1); /* ungetc should return an error */ if (j != EOF) /* after seeking on the file */ goto Fail; /* before reading */ ch = 'a'; while ((i = getc (f1)) != EOF) if ( (char) i != ch++ ) goto Fail; if (! (feof (f1)) ) /* ensure end-of-file reached */ goto Fail; j = ungetc (i, f1); /* not an error to try to push */ if (j != EOF) /* back EOF */ goto Fail; i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail4; printf ("Passed Conformance Test 17.6.0.2\n"); return; Fail: printf ("Failed Conformance Test 17.6.0.2\n"); return; Fail1: printf ("Unable to open temp file for Conformance Test 17.6.0.2\n"); return; Fail2: printf ("Unable to write to temp file for Conformance Test 17.6.0.2\n"); return; Fail3: printf ("Unable to seek to temp file for Conformance Test 17.6.0.2\n"); return; Fail4: printf ("Unable to close temp file for Conformance Test 17.6.0.2\n"); return; }

1
Tests/Conformance/C17.7.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 17.7.0.1: Verification of fgets function, text stream */ #include <stdio.h> main () { FILE *f1; int i; char string [80] = ""; /* initialize input string to null string */ char *strPtr; f1 = fopen ("3/tmp", "w+"); /* create text file to work on */ if (f1 == NULL) goto Fail1; i = fputs ("Every good boy deserves favor\n", f1); if (i) goto Fail2; rewind (f1); /* test reading until '\n' seen */ strPtr = fgets (string, 100, f1); if (strPtr == NULL) goto Fail; if (strcmp ("Every good boy deserves favor\n", string)) goto Fail; fgetc(f1); /* force an EOF condition */ strPtr = fgets (string, 100, f1); /* test reading with EOF seen before */ if (strPtr != NULL) /* any other characters */ goto Fail; if (! (feof (f1)) ) goto Fail; if (strcmp ("Every good boy deserves favor\n", string)) goto Fail; rewind (f1); /* test reading until n-1 chars seen */ strPtr = fgets (string, 15, f1); if (strPtr == NULL) goto Fail; if (strcmp ("Every good boy", string)) goto Fail; strPtr = fgets (string, 17, f1); /* ensure fgets moves internal file */ if (strPtr == NULL) /* pointer */ goto Fail; if (strcmp (" deserves favor\n", string)) goto Fail; fgetc(f1); /* force an EOF condition */ strPtr = fgets (string, 100, f1); /* test reading with EOF seen before */ if (strPtr != NULL) /* any other characters */ goto Fail; if (! (feof (f1)) ) goto Fail; if (strcmp (" deserves favor\n", string)) goto Fail; i = fclose (f1); /* close file and quit */ if (i) goto Fail3; printf ("Passed Conformance Test 17.7.0.1\n"); return; Fail: printf ("Failed Conformance Test 17.7.0.1\n"); return; Fail1: printf ("Unable to open temp file for Conformance Test 17.7.0.1\n"); return; Fail2: printf ("Unable to write to temp file for Conformance Test 17.7.0.1\n"); return; Fail3: printf ("Unable to close temp file for Conformance Test 17.7.0.1\n"); return; }

1
Tests/Conformance/C17.7.0.2.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 17.7.0.2: Verification of fgets function, binary stream */ #include <stdio.h> main () { FILE *f1; int i; char string [80] = ""; /* initialize input string to null string */ char *strPtr; f1 = fopen ("3/tmp", "w+b"); /* create binary file to work on */ if (f1 == NULL) goto Fail1; i = fputs ("Every good boy deserves favor\n", f1); if (i) goto Fail2; rewind (f1); /* test reading until '\n' seen */ strPtr = fgets (string, 100, f1); if (strPtr == NULL) goto Fail; if (strcmp ("Every good boy deserves favor\n", string)) goto Fail; fgetc(f1); /* force an EOF condition */ strPtr = fgets (string, 100, f1); /* test reading with EOF seen before */ if (strPtr != NULL) /* any other characters */ goto Fail; if (! (feof (f1)) ) goto Fail; if (strcmp ("Every good boy deserves favor\n", string)) goto Fail; rewind (f1); /* test reading until n-1 chars seen */ strPtr = fgets (string, 15, f1); if (strPtr == NULL) goto Fail; if (strcmp ("Every good boy", string)) goto Fail; strPtr = fgets (string, 17, f1); /* ensure fgets moves internal file */ if (strPtr == NULL) /* pointer */ goto Fail; if (strcmp (" deserves favor\n", string)) goto Fail; fgetc(f1); /* force an EOF condition */ strPtr = fgets (string, 100, f1); /* test reading with EOF seen before */ if (strPtr != NULL) /* any other characters */ goto Fail; if (! (feof (f1)) ) goto Fail; if (strcmp (" deserves favor\n", string)) goto Fail; i = fclose (f1); /* close file and quit */ if (i) goto Fail3; printf ("Passed Conformance Test 17.7.0.2\n"); return; Fail: printf ("Failed Conformance Test 17.7.0.2\n"); return; Fail1: printf ("Unable to open temp file for Conformance Test 17.7.0.2\n"); return; Fail2: printf ("Unable to write to temp file for Conformance Test 17.7.0.2\n"); return; Fail3: printf ("Unable to close temp file for Conformance Test 17.7.0.2\n"); return; }

1
Tests/Conformance/C17.8.0.1.CC Executable file
View File

@ -0,0 +1 @@
/* Conformance Test 17.8.0.1: Verification of fscanf, d format code */ #include <stdio.h> main () { FILE *f1; short i1; int i; int i2, i3; long L1; char ch; f1 = fopen ("3/tmp", "wb+"); /* open input file for test */ if (f1 == NULL) goto Fail1; fprintf(f1, " +327678 - -002147483647A 327677-22 123*\r"); rewind(f1); i1 = 0; /* test format string of no */ i = fscanf (f1, "%*05hd8"); /* assignment, max. field */ if (i != 0) /* width of 5, h ignored, */ goto Fail; /* character 8 must appear*/ if (i1 != 0) /* after 5 digits read */ goto Fail; i2 = 15; /* test "plain vanilla" fmt */ i = fscanf (f1, "%d", &i2); /* string; data contains */ if (i != 1) /* a single minus sign */ goto Fail; if (i2 != 0) goto Fail; L1 = 0; /* test format string of */ i = fscanf (f1, "%12ldA", &L1); /* max. field width of 12,*/ if (i != 1) /* long variable expected,*/ goto Fail; /* character A must appear*/ if (L1 != -2147483647) /* after digits read */ goto Fail; L1 = 0; /* test format string of */ i = fscanf (f1, "%6ld%d", &L1, &i2); /* max. field width of 6, */ if (i != 2) /* long variable expected,*/ goto Fail; /* followed by simple fmt */ if ((L1 != 327677) || (i2 != -22)) /* for integer */ goto Fail; i3 = 4; /* test format string of */ i = fscanf (f1, "%4hd", &i3); /* max. field width of 4, */ if (i != 1) /* short variable expectd.*/ goto Fail; /* * appears in input as */ if (i3 != 123) /* 4th char. */ goto Fail; i = fscanf (f1, "%c", &ch); /* Ensure offending * has */ if (i != 1) /* been left in input. */ goto Fail; if (ch != '*') goto Fail; i = fscanf (f1, "%c", &ch); /* Ensure fscanf returns EOF*/ if (i != 1) /* when EOF encountered. */ goto Fail; if (ch != '\r') goto Fail; fgetc(f1); i = fscanf (f1, "%c", &ch); if (i != EOF) goto Fail; i = fclose (f1); /* close the file and quit */ if (i == EOF) goto Fail2; printf ("Passed Conformance Test 17.8.0.1\n"); return; Fail: printf ("Failed Conformance Test 17.8.0.1\n"); return; Fail1: printf ("Unable to open input file for Conformance Test 17.8.0.1\n"); return; Fail2: printf ("Unable to close input file for Conformance Test 17.8.0.1\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.8.0.10: Verification of sscanf, u format code */ #include <stdio.h> main () { char string [] = " 327678 D 4294967295m 32767722 "; int i; unsigned short us1; unsigned int ui1; unsigned long ul1; ui1 = 2; /* test format string of no */ i = sscanf (string, "%*05hu8"); /* assignment, max. field */ if (i != 0) /* width of 5, h ignored, */ goto Fail; /* character 8 must appear*/ if (ui1 != 2) /* after 5 digits read */ goto Fail; i = sscanf (&string [8], "%u", &ui1); /* test "plain vanilla" fmt */ if (i != 0) /* string; data contains */ goto Fail; /* the character 'D' */ ul1 = 0; /* test fmt string of max */ i = sscanf (&string [11], " D %12ldm", &ul1); /* field width of 12, */ if (i != 1) /* long variable expected,*/ goto Fail; /* character m must appear*/ if (ul1 != 4294967295u) /* after digits read */ goto Fail; ul1 = 0; /* test fmt string of max */ i = sscanf (&string [27], "%6lu%u", &ul1, &ui1); /* field width of 6, */ if (i != 2) /* long variable expected,*/ goto Fail; /* followed by simple fmt */ if ((ul1 != 327677) || (ui1 != 22)) /* for integer */ goto Fail; printf ("Passed Conformance Test 17.8.0.10\n"); return; Fail: printf ("Failed Conformance Test 17.8.0.10\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.8.0.11: Verification of sscanf, o format code */ #include <stdio.h> main () { char string [] = " 777778 D 37777777777m 117777526 "; int i; unsigned short us1; unsigned int ui1; unsigned long ul1; us1 = 2; /* test format string of no */ i = sscanf (string, "%*05ho8"); /* assignment, max. field */ if (i != 0) /* width of 5, h ignored, */ goto Fail; /* character 8 must appear*/ if (us1 != 2) /* after 5 digits read */ goto Fail; i = sscanf (&string [9], "%o", &ui1); /* test "plain vanilla" fmt */ if (i != 0) /* string; data contains */ goto Fail; /* the character 'D' */ ul1 = 0; /* test fmt string of max */ i = sscanf (&string [11], "D %12lom", &ul1); /* field width of 12, */ if (i != 1) /* long variable expected,*/ goto Fail; /* character m must appear*/ if (ul1 != 4294967295u) /* after digits read */ goto Fail; ul1 = 0; /* test fmt string of max */ i = sscanf (&string [31], "%7lo%o", &ul1, &ui1); /* field width of 6, */ if (i != 2) /* long variable expected,*/ goto Fail; /* followed by simple fmt */ if ((ul1 != 327677) || (ui1 != 22)) /* for integer */ goto Fail; printf ("Passed Conformance Test 17.8.0.11\n"); return; Fail: printf ("Failed Conformance Test 17.8.0.11\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.8.0.12: Verification of sscanf, x,X format codes */ #include <stdio.h> main () { char string [] = " 327678 0x D 0xFFFFFFFFm 0x7fEd0X10 "; int i; unsigned short us1; unsigned int ui1; unsigned long ul1; us1 = 2; /* test format string of no */ i = sscanf (string, "%*05hx8"); /* assignment, max. field */ if (i != 0) /* width of 5, h ignored, */ goto Fail; /* character 8 must appear*/ if (us1 != 2) /* after 5 digits read */ goto Fail; i = sscanf (&string [8], "%X", &ui1); /* test "plain vanilla" fmt */ if (i != 1) /* string; data contains */ goto Fail; /* the characters 0x */ if (ui1 != 0) goto Fail; ul1 = 0; /* test fmt string of max */ i = sscanf (&string [12], " D %12lxm", &ul1); /* field width of 12,*/ if (i != 1) /* long variable expected,*/ goto Fail; /* character m must appear*/ if (ul1 != 4294967295u) /* after digits read */ goto Fail; ul1 = 0; /* test fmt string of max */ i = sscanf (&string [30], "%6lx%x", &ul1, &ui1); /* field width of 6, */ if (i != 2) /* long variable expected,*/ goto Fail; /* followed by simple fmt */ if ((ul1 != 0x7FED) || (ui1 != 16)) /* for integer */ goto Fail; printf ("Passed Conformance Test 17.8.0.12\n"); return; Fail: printf ("Failed Conformance Test 17.8.0.12\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.8.0.13: Verification of sscanf, c format code */ #include <stdio.h> #include <string.h> main () { char sstr [] = "bten chars!andMore"; int i; char ch, string [50]; ch = 'a'; /* no assignment should be made */ i = sscanf (sstr, "%*hc"); /* h ignored */ if (i != 0) goto Fail; if (ch != 'a') goto Fail; i = sscanf (&sstr [1], "%10lc", string); /* test assignment to string*/ if (i != 1) /* l ignored */ goto Fail; if (strncmp (string, "ten chars!", 10)) goto Fail; printf ("Passed Conformance Test 17.8.0.13\n"); return; Fail: printf ("Failed Conformance Test 17.8.0.13\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.8.0.14: Verification of sscanf, s format code */ #include <stdio.h> main () { char sstr [] = " oneLongWord ten-chars!andMore"; int i, j; char string [50] = "hey, hey!"; i = sscanf (&sstr[0], "%*hs"); /* no assignment made; h ignored */ if (i != 0) goto Fail; if (strcmp (string, "hey, hey!")) goto Fail; i = sscanf (&sstr [14], "%10ls", string); /* test assignment to string*/ if (i != 1) /* l ignored */ goto Fail; if (strcmp (string, "ten-chars!")) goto Fail; printf ("Passed Conformance Test 17.8.0.14\n"); return; Fail: printf ("Failed Conformance Test 17.8.0.14\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.8.0.15: Verification of fscanf, f e E g G format codes */ #include <stdio.h> #include <math.h> main () { char sstr [] = " 23 -3.8E20 - e- +25e- 00002.00008e000049.9 "; float f1, f2, f3, f4; double d1, d2, d3; int i; f1 = f2 = f3 = f4 = 1.0; d1 = d2 = d3 = 1.0; i = sscanf (&sstr[0], "%*07f %e %E %lg %30lG %17lf%e", &f2, &f3, &d1, &d2, &d3, &f4); if (i != 6) goto Fail; if ((fabs(f1 - 1.0) > 0.00001) || (fabs(f2 - (-3.8E20)) > 1e15) || (fabs(f3) > 0.00001) || (fabs(f4 - 9.9) > 0.00001) || (fabs(d1) > 0.00001) || (fabs(d2 - 25.0) > 0.00001) || (fabs(d3 - 2.00008e4) > 0.00001)) goto Fail; printf ("Passed Conformance Test 17.8.0.15\n"); return; Fail: printf ("Failed Conformance Test 17.8.0.15\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.8.0.16: Verification of sscanf, % and [ format codes */ #include <stdio.h> main () { char sstr [] = "% these are the ^only[ characters" "*aaabbb a fine mess, you see! ddddfffffffff"; int i; char string [2] [50] = { {"hey, hey!"}, {"you, you"} }; i = sscanf (&sstr[0], "%*50h%"); /* no assignment made; * 50 h ignored */ if (i != 0) goto Fail; /* Create set of characters which can appear in the output string. */ i = sscanf (&sstr [1], "%45[thes aronlyc^[] %*[*ab]", &string [0]); if (i != 1) goto Fail; if (strcmp (&string [0], " these are the ^only[ characters")) goto Fail; /* Create set of characters which cannot appear in the output string. */ i = sscanf (&sstr [42], "%[^d] %10[df]", &string [0], &string [1]); if (i != 2) goto Fail; if (strcmp (&string [0], " a fine mess, you see! ")) goto Fail; if (strcmp (&string [1], "ddddffffff")) goto Fail; printf ("Passed Conformance Test 17.8.0.16\n"); return; Fail: printf ("Failed Conformance Test 17.8.0.16\n"); return; }

View File

@ -0,0 +1 @@
/* Conformance Test 17.8.0.17: Verification of scanf, d format code */ #include <stdio.h> main () { short i1; int i; int i2, i3; long L1; char ch; FILE *f1; /* Redirect standard input to a data file. */ f1 = fopen ("3/tmp", "wb+"); /* open input file for test */ if (f1 == NULL) goto Fail1; fprintf(f1, " +327678 - -002147483647A 327677-22 123*\r"); fclose(f1); stdin = freopen ("3/tmp", "r", stdin); if (stdin == NULL) goto Fail1; i1 = 0; /* test format string of no */ i = scanf ("%*05hd8"); /* assignment, max. field */ if (i != 0) /* width of 5, h ignored, */ goto Fail; /* character 8 must appear*/ if (i1 != 0) /* after 5 digits read */ goto Fail; i2 = 15; /* test "plain vanilla" fmt */ i = scanf ("%d", &i2); /* string; data contains */ if (i != 1) /* a single minus sign */ goto Fail; if (i2 != 0) goto Fail; L1 = 0; /* test format string of */ i = scanf ("%12ldA", &L1); /* max. field width of 12,*/ if (i != 1) /* long variable expected,*/ goto Fail; /* character A must appear*/ if (L1 != -2147483647) /* after digits read */ goto Fail; L1 = 0; /* test format string of */ i = scanf ("%6ld%d", &L1, &i2); /* max. field width of 6, */ if (i != 2) /* long variable expected,*/ goto Fail; /* followed by simple fmt */ if ((L1 != 327677) || (i2 != -22)) /* for integer */ goto Fail; i3 = 4; /* test format string of */ i = scanf ("%4hd", &i3); /* max. field width of 4, */ if (i != 1) /* short variable expectd,*/ goto Fail; /* character * must appear*/ if (i3 != 123) /* after digits read. In */ goto Fail; /* the input, the number */ /* of digits is only 3. */ i = scanf ("%c", &ch); /* Ensure offending * has */ if (i != 1) /* been left in input. */ goto Fail; if (ch != '*') goto Fail; i = scanf ("%c", &ch); /* Ensure scanf returns EOF */ if (i != 1) /* when EOF encountered. */ goto Fail; if (ch != '\n') goto Fail; i = scanf ("%c", &ch); if (i != EOF) goto Fail; stdin = freopen (".CONSOLE", "r", stdin); /* reset stdin and quit */ if (stdin == NULL) goto Fail1; printf ("Passed Conformance Test 17.8.0.17\n"); return; Fail: printf ("Failed Conformance Test 17.8.0.17\n"); return; Fail1: printf ("Unable to redirect stdin for Conformance Test 17.8.0.17\n"); return; }

Some files were not shown because too many files have changed in this diff Show More