Thread: Need help on Linux testing please

  1. #1
    Registered User
    Join Date
    Oct 2010
    Posts
    4

    Need help on Linux testing please

    Can someone please help me test this program on Linux and verify the problems on why it doesn't compile while it does on Windows? I can't seem to install Wubi. That's why I really need help. Thank you in advance.

    C Code:
    Code:
    #include<stddef.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<time.h>
    
    /*definition*/
    #define LCHAR 1000000000
    #define LINESIZE 512
    
    /*variable declarations*/
    int p;
    int j;
    char input;
    char authenticate[LINESIZE];
    char buff[LINESIZE];
    char f[LINESIZE];
    char password[LINESIZE];
    char username[LINESIZE];
    char userpassword[LINESIZE];
    char verified[LINESIZE];
    
    
    /*file pointers*/
    FILE *log;
    FILE *verify;
    FILE *change;
    FILE *BasicNeeds;
    FILE *TransactionBills;
    FILE *Transportation;
    FILE *EmergencyNeeds;
    FILE *OtherExpenses;
    
    /*prototypes*/
    void access();
    void login();
    void changePassword();
    void newPassword();
    void tracker();
    void add();
    void remove();
    void view();
    void time();
    void addBasicNeeds();
    void addTransactionBills();
    void addTransportation();
    void addEmergencyNeeds();
    void addOtherExpenses();
    
    /*structure definition*/
    struct particulars {
      char *entry;
      int cost;
      char *period;
    };
    
    int main() {
    
            while (j !=4) {
                printf("\n\n\n");
                printf("\t\t||||||||||||WELCOME TO EXPENSE TRACKER||||||||||||");
                printf("\n\n\n");
                printf("\t\t\t\[1] Create an account\n");
                printf("\t\t\t\[2] Access an account\n");
                printf("\t\t\t\[3] Change user password\n");
                printf("\t\t\t\[4] Exit\n\n");
                printf("\t\t||||||||||||||||||||||||||||||||||||||||||||||||||\n\n");
                printf("\t\t\tSelect an option: ");
                    scanf("%d", &j);
    
                    switch(j){
    
                        case 1:{
                            access();
                            break;
                        }
    
                        case 2:{
                            login();
                            break;
                        }
    
                        case 3:{
                            changePassword();
                            break;
                        }
    
                        case 4:{
                            break;
                        }
    
                        default:
                            printf("\n\t\tNo such choice.\n");
                            break;
                    }
            }
    
        return 0;
    }
    
    /*create account*/
    void access() {
    
        if ((log = fopen ("access.txt","w+")) == NULL) {
            printf("Incorrect login.\n");
        }
    
        else {
            printf("\n\n");
            printf("\t\t||||||||||||||||||||||||||||||||||||||||||||||||||\n\n");
            printf("\t\tUSERNAME: ");
                scanf("%s", username);
            printf("\t\tPASSWORD: ");
                scanf("%s", userpassword);
    
            fputs(username, log);
            fputs(" ", log);
            fputs(userpassword, log);
            printf("\n\t\tRegistration successful.\n\n");
    
            fclose (log);
        }
    }
    
    /*access acount*/
    void login() {
    
        if ((verify = fopen ("access.txt","r+")) == NULL) {
            printf("Incorrect login.\n\n");
        }
        else {
    
            printf("\n\n\n");
            printf("\t\tUSERNAME:");
            scanf("%s", verified);
            printf("\t\tPASSWORD:");
            scanf("%s", password);
    
            fscanf(verify, "%s%s", authenticate, userpassword);
    
    
        if((strcmp(verified,authenticate)==0) &&(strcmp(userpassword, password)==0)) {
            printf("\n\n\n\n");
            printf("\t\tLogin successful.\n", verified);
            tracker();
        }
    
        else {
            printf("\n\n\t\tIncorrect username or password.\n\n", verified);
        }
        }
    }
    
    /*change password*/
    void changePassword(){
    
         if ((verify = fopen ("access.txt","r+")) == NULL) {
            printf("Incorrect login.\n\n");
        }
        else {
    
            printf("\n\n\n");
            printf("\t\tUSERNAME:");
            scanf("%s", verified);
            printf("\t\tPASSWORD:");
            scanf("%s", password);
    
            fscanf(verify, "%s%s", authenticate, userpassword);
    
    
        if((strcmp(verified,authenticate)==0) &&(strcmp(userpassword, password)==0)) {
            printf("\n\n\n\n");
            printf("\t\tLogin successful.\n", verified);
            newPassword();
        }
    
        else {
            printf("\n\n\t\tIncorrect username or password.\n\n", verified);
        }
        }
    }
    /*new password*/
    void newPassword(){
        if ((change = fopen ("access.txt","w+")) == NULL) {
            printf("Incorrect login.\n\n");
        }
        else {
            printf("\n\n\n");
            printf("\t\tUSERNAME:");
            scanf("%s", verified);
            printf("\t\tNEW PASSWORD:");
            scanf("%s", userpassword);
            fscanf(change, "%s%s", authenticate, userpassword);
            fputs(username, change);
            fputs(" ", change);
            fputs(userpassword, change);
            printf("\n\t\tChange successful.\n\n");
    
            fclose (change);
        }
    }
    /*program*/
    void tracker() {
    
            while (j !=4) {
                printf("\n\n\n");
                printf("\t\t|||||||||||||||||EXPENSE TRACKER||||||||||||||||||");
                printf("\n\n\n");
                printf("\t\t[1] Add items\n");
                printf("\t\t[2] Remove items\n");
                printf("\t\t[3] View items\n");
                printf("\t\t[4] Exit\n\n");
                printf("\t\t||||||||||||||||||||||||||||||||||||||||||||||||||\n\n");
                printf("\t\t\tSelect an option: ");
                scanf("%d", &j);
    
                    switch (j) {
                        case 1:{
                            add();
                            break;
                        }
    
                        case 2:{
                            remove();
                            break;
                        }
    
                        case 3:{
                            view();
                            break;
                        }
    
                        case 4: {
                            break;
                        }
    
                        default:
                            printf("\n\t\tNo such choice.\n\n");
                            break;
    
                    }
            }
    }
    
    /*add items*/
    void add() {
    
        time_t rawtime;
        struct tm * timeinfo;
        char buffer [100];
        char particulars [LINESIZE];
    
            while (j !=6) {
                printf("\n\n\n");
                printf("\t\t|||||||||||||||||EXPENSE TRACKER||||||||||||||||||");
                printf("\n\n\n");
    
                printf("\t\t[1] Basic Needs\n");
                printf("\t\t[2] Transaction Bills\n");
                printf("\t\t[3] Transportation\n");
                printf("\t\t[4] Emergency Needs\n");
                printf("\t\t[5] Other expenses\n");
                printf("\t\t[6] Exit\n\n");
                printf("\t\t||||||||||||||||||||||||||||||||||||||||||||||||||\n\n");
                printf("\t\t\tSelect an option: ");
                scanf("%d", &j);
    
    
            switch (j) {
            case 1:{
                addBasicNeeds();
                break;
                }
            case 2:{
                addTransactionBills();
                break;
                }
            case 3:{
                addTransportation();
                break;
                }
            case 4:{
                addEmergencyNeeds();
                break;
                }
            case 5: {
                addOtherExpenses();
    
            break;
                }
    
            case 6:
            break;
    
            default: printf("\n\t\tNo such choice.\n\n");
    
            break;
            }
        }
    }
    
    /*system time*/
    void time() {
    
      time_t rawtime;
      struct tm * timeinfo;
      char buffer [100];
    
      time (&rawtime);
      timeinfo = localtime (&rawtime);
    
      strftime (buffer,100,"%I:%M%p %x.",timeinfo);
    
      puts (buffer);
    
    }
    
    /*add items to specific categories*/
    void addBasicNeeds() {
    
        int item;
        int t;
        time_t rawtime;
        struct tm * timeinfo;
        char buffer [100];
        particulars particulars [LINESIZE];
    
                    if((BasicNeeds = fopen("bneeds.txt", "a+")) == NULL) {
                        printf("Cannot open file. Please try again.");
                    }
    
                    else {
    
                        time ( &rawtime );
                        timeinfo = localtime ( &rawtime );
    
                        strftime (buffer,100,"%I:%M%p %x.",timeinfo);
    
                        particulars[p].entry = f;
                        particulars[p].cost = item;
                        particulars[p].period = buffer;
    
                        printf("\n\t\tInput ENTRY [space] COST:\n");
                        printf("\n\t\tConsider entries as one word input.\n");
                            scanf("%s", &f);
                            scanf("%d", &item);
    
                    for(p=0 ; p<1 ; p++) {
                        fprintf(BasicNeeds, " You've just added %s ", f);
                        fprintf(BasicNeeds, " which costs P %d. Recorded %s.\n", item, buffer);
                    }
    
                    while(feof(BasicNeeds)) {
                        input = getc(BasicNeeds);
                        printf("%c", input);
                    }
    
                    rewind(BasicNeeds);
    
                    }
    
                    fclose(BasicNeeds);
    
    }
    
    void addTransactionBills() {
    
        int item;
        int t;
        time_t rawtime;
        struct tm * timeinfo;
        char buffer [100];
        particulars particulars [LINESIZE];
    
                    if((TransactionBills = fopen("tbills.txt", "a+")) == NULL) {
                        printf("Cannot open file. Please try again.");
                    }
    
                    else {
    
                        time ( &rawtime );
                        timeinfo = localtime ( &rawtime );
    
                        strftime (buffer,100,"%I:%M%p %x.",timeinfo);
    
                        particulars[p].entry = f;
                        particulars[p].cost = item;
                        particulars[p].period = buffer;
    
                        printf("\n\t\tInput ENTRY [space] COST:\n");
                        printf("\n\t\tConsider entries as one word input.\n");
                            scanf("%s", &f);
                            scanf("%d", &item);
    
                    for(p=0 ; p<1 ; p++) {
                        fprintf(TransactionBills, " You've just added %s ", f);
                        fprintf(TransactionBills, " which costs P %d. Recorded %s.\n", item, buffer);
                    }
    
                    while(feof(TransactionBills)) {
                        input = getc(TransactionBills);
                        printf("%c", input);
                    }
    
                    rewind(TransactionBills);
    
                    }
    
                    fclose(TransactionBills);
        }
    
    void addTransportation() {
    
        int item;
        time_t rawtime;
        struct tm * timeinfo;
        char buffer [100];
        particulars particulars [LINESIZE];
    
                    if((Transportation = fopen("trans.txt", "a+")) == NULL) {
                        printf("Cannot open file. Please try again.");
                    }
    
                    else {
    
                        time ( &rawtime );
                        timeinfo = localtime ( &rawtime );
    
                        strftime (buffer,100,"%I:%M%p %x.",timeinfo);
    
                        particulars[p].entry = f;
                        particulars[p].cost = item;
                        particulars[p].period = buffer;
    
                        printf("\n\t\tInput ENTRY [space] COST:\n");
                        printf("\n\t\tConsider entries as one word input.\n");
                            scanf("%s", &f);
                            scanf("%d", &item);
    
                    for(p=0 ; p<1 ; p++) {
                        fprintf(Transportation, " You've just added %s ", f);
                        fprintf(Transportation, " which costs P %d. Recorded %s.\n", item, buffer);
                    }
    
                    while(feof(Transportation)) {
                        input = getc(Transportation);
                        printf("%c", input);
                    }
    
                    rewind(Transportation);
    
                    }
    
                    fclose(Transportation);
    
        }
    
    void addEmergencyNeeds() {
    
        int item;
        time_t rawtime;
        struct tm * timeinfo;
        char buffer [100];
        particulars particulars[LINESIZE];
    
                    if((EmergencyNeeds = fopen("eneeds.txt", "a+")) == NULL) {
                        printf("Cannot open file. Please try again.");
                    }
    
                    else {
    
                        time ( &rawtime );
                        timeinfo = localtime ( &rawtime );
    
                        strftime (buffer,100,"%I:%M%p %x.",timeinfo);
    
                        particulars[p].entry = f;
                        particulars[p].cost = item;
                        particulars[p].period = buffer;
    
                        printf("\n\t\tInput ENTRY [space] COST:\n");
                        printf("\n\t\tConsider entries as one word input.\n");
                            scanf("%s", f);
                            scanf("%d", &item);
    
                    for(p=0 ; p<1 ; p++) {
                        fprintf(EmergencyNeeds, " You've just added %s ", f);
                        fprintf(EmergencyNeeds, " which costs P %d. Recorded %s.\n", item, buffer);
                    }
    
                    while(feof(EmergencyNeeds)) {
                        input = getc(EmergencyNeeds);
                        printf("%c", input);
                    }
    
                    rewind(EmergencyNeeds);
    
                    }
    
                    fclose(EmergencyNeeds);
    
        }
    
    void addOtherExpenses() {
    
        int item;
        time_t rawtime;
        struct tm * timeinfo;
        char buffer [100];
        particulars particulars [LINESIZE];
    
                    if((OtherExpenses = fopen("other.txt", "a+")) == NULL) {
                        printf("Cannot open file. Please try again.");
                    }
    
                    else {
    
                        time ( &rawtime );
                        timeinfo = localtime ( &rawtime );
    
                        strftime (buffer,100,"%I:%M%p %x.",timeinfo);
    
                        particulars[p].entry = f;
                        particulars[p].cost = item;
                        particulars[p].period = buffer;
    
                        printf("\n\t\tInput ENTRY [space] COST:\n");
                        printf("\n\t\tConsider entries as one word input.\n");
                            scanf("%s", &f);
                            scanf("%d", &item);
    
                    for(p=0 ; p<1 ; p++) {
                        fprintf(OtherExpenses, " You've just added %s ", f);
                        fprintf(OtherExpenses, " which costs P %d. Recorded %s.\n", item, buffer);
                    }
    
                    while(feof(OtherExpenses)) {
                        input = getc(OtherExpenses);
                        printf("%c", input);
                    }
    
                    rewind(OtherExpenses);
    
                    }
    
                fclose(OtherExpenses);
    
        }
    
    /*view items*/
    void view() {
            while (j !=6) {
                printf("\n\n\n");
                printf("\t\t|||||||||||||||||EXPENSE TRACKER||||||||||||||||||");
                printf("\n\n\n");
    
                printf("\t\t[1] Basic Needs\n");
                printf("\t\t[2] Transaction Bills\n");
                printf("\t\t[3] Transportation\n");
                printf("\t\t[4] Emergency Needs\n");
                printf("\t\t[5] Other expenses\n");
                printf("\t\t[6] Exit\n\n");
                printf("\t\t*****Category that doesn't load may be empty.*****\n");
                printf("\t\t||||||||||||||||||||||||||||||||||||||||||||||||||\n\n");
                printf("\t\t\tSelect an option: ");
                scanf("%d", &j);
    
            switch (j) {
                case 1:{
                    if((BasicNeeds = fopen("bneeds.txt", "r")) == NULL) {
                    printf("Cannot open file. Please try again.");
                    }
                    else{
                        while(fgets(buff, LCHAR, BasicNeeds)){
                        printf("%s",buff);
                        }
                    }
                    fclose(BasicNeeds);
    
                    break;
                }
    
                case 2:{
                    if((TransactionBills = fopen("tbills.txt", "r")) == NULL) {
                    printf("Cannot open file. Please try again.");
                    }
                    else{
                        while(fgets(buff, LCHAR, TransactionBills)){
                        printf("%s",buff);
                        }
                    }
                    fclose(TransactionBills);
    
                    break;
                }
    
                case 3:{
                    if((Transportation = fopen("trans.txt", "r")) == NULL) {
                    printf("Cannot open file. Please try again.");
                    }
                    else{
                        while(fgets(buff, LCHAR, Transportation)){
                        printf("%s",buff);
                        }
                    }
                    fclose(Transportation);
    
                    break;
                }
    
                case 4:{
                    if((EmergencyNeeds = fopen("eneeds.txt", "r")) == NULL) {
                    printf("Cannot open file. Please try again.");
                    }
                    else{
                        while(fgets(buff, LCHAR, EmergencyNeeds)){
                        printf("%s",buff);
                        }
                    }
                    fclose(EmergencyNeeds);
    
                    break;
                }
                case 5: {
                    if((OtherExpenses = fopen("other.txt", "r")) == NULL) {
                    printf("Cannot open file. Please try again.");
                    }
                    else{
                        while(fgets(buff, LCHAR, OtherExpenses)){
                        printf("%s",buff);
                        }
                    }
                    fclose(OtherExpenses);
    
                    break;
                }
    
                case 6:{
    
                    break;
                }
    
                default:
                    printf ("\n\t\tNo such choice.\n\n");
    
                    break;
                }
             }
    }
    
    /*remove items*/
    void remove() {
    
             while (j !=6) {
                printf("\n\n\n");
                printf("\t\t|||||||||||||||||EXPENSE TRACKER||||||||||||||||||");
                printf("\n\n\n");
                printf("\t\t[1] Basic Needs\n");
                printf("\t\t[2] Transaction Bills\n");
                printf("\t\t[3] Transportation\n");
                printf("\t\t[4] Emergency Needs\n");
                printf("\t\t[5] Other expenses\n");
                printf("\t\t[6] Exit\n\n");
                printf("\t\t||||||||||||||||||||||||||||||||||||||||||||||||||\n\n");
                printf("\t\t\tSelect an option: ");
                scanf("%d", &j);
    
                switch (j) {
                    case 1: {
                        if((BasicNeeds = fopen("bneeds.txt", "w")) == NULL) {
                            printf("Cannot open file. Please try again.");
                        }
                        else {
                            printf("\n\t\tDeletion successful.\n\n");
                        }
                        fclose(BasicNeeds);
                        break;
                    }
    
                    case 2:{
                        if((TransactionBills = fopen("tbills.txt", "w")) == NULL) {
                            printf("Cannot open file. Please try again.");
                        }
                        else {
                            printf("\n\t\tDeletion successful.\n\n");
                        }
                        fclose(TransactionBills);
                        break;
                    }
    
                    case 3:{
                        if((Transportation = fopen("trans.txt", "w")) == NULL) {
                            printf("Cannot open file. Please try again.");
                        }
                        else{
                            printf("\n\t\tDeletion successful.\n\n");
                        }
                        fclose(Transportation);
                        break;
                    }
    
                    case 4:{
                        if((EmergencyNeeds = fopen("eneeds.txt", "w")) == NULL) {
                            printf("Cannot open file. Please try again.");
                        }
                        else{
                            printf("\n\t\tDeletion successful.\n\n");
                        }
                        fclose(EmergencyNeeds);
                        break;
                    }
    
                    case 5: {
                        if((OtherExpenses = fopen("other.txt", "w")) == NULL) {
                            printf("Cannot open file. Please try again..");
                        }
                        else{
                            printf("\n\t\tDeletion successful.\n\n");
                        }
                        fclose(OtherExpenses);
                        break;
                    }
    
                    case 6:{
                        break;
                    }
    
                    default: printf ("\n\t\tNo such choice.\n\n");
                        break;
                }
    
            }
    
        }

  2. #2
    Registered User
    Join Date
    Oct 2010
    Posts
    4

  3. #3
    Banned
    Join Date
    Aug 2010
    Location
    Ontario Canada
    Posts
    9,547
    What errors are you getting?
    Error messages almost always tell the story....

  4. #4
    Registered User
    Join Date
    Nov 2009
    Posts
    111
    Here's the gcc output:

    Code:
    ctemp.c:25: warning: built-in function ‘log’ declared as non-function
    ctemp.c:41: error: conflicting types for ‘remove’
    /usr/include/stdio.h:155: note: previous declaration of ‘remove’ was here
    ctemp.c:43: error: conflicting types for ‘time’
    /usr/include/time.h:186: note: previous declaration of ‘time’ was here
    ctemp.c:303: error: conflicting types for ‘time’
    /usr/include/time.h:186: note: previous declaration of ‘time’ was here
    ctemp.c: In function ‘addBasicNeeds’:
    ctemp.c:326: error: ‘particulars’ undeclared (first use in this function)
    ctemp.c:326: error: (Each undeclared identifier is reported only once
    ctemp.c:326: error: for each function it appears in.)
    ctemp.c:326: error: expected ‘;’ before ‘particulars’
    ctemp.c:345: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[512]’
    ctemp.c: In function ‘addTransactionBills’:
    ctemp.c:373: error: ‘particulars’ undeclared (first use in this function)
    ctemp.c:373: error: expected ‘;’ before ‘particulars’
    ctemp.c:392: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[512]’
    ctemp.c: In function ‘addTransportation’:
    ctemp.c:418: error: ‘particulars’ undeclared (first use in this function)
    ctemp.c:418: error: expected ‘;’ before ‘particulars’
    ctemp.c:437: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[512]’
    ctemp.c: In function ‘addEmergencyNeeds’:
    ctemp.c:464: error: ‘particulars’ undeclared (first use in this function)
    ctemp.c:464: error: expected ‘;’ before ‘particulars’
    ctemp.c: In function ‘addOtherExpenses’:
    ctemp.c:510: error: ‘particulars’ undeclared (first use in this function)
    ctemp.c:510: error: expected ‘;’ before ‘particulars’
    ctemp.c:529: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[512]’
    ctemp.c: At top level:
    ctemp.c:652: error: conflicting types for ‘remove’
    /usr/include/stdio.h:155: note: previous declaration of ‘remove’ was here
    There are lots of erros here which shold be pretty obvious. I'm not sure about most compilers used in Windows, but I think gcc is pretty strict with regards to correct ANSI C, which many windows environments are not. (Correct me if I'm wrong, of course - I am, afer all, a C-newbie and mere dabbler myself.)

  5. #5
    Registered User
    Join Date
    Oct 2010
    Posts
    4
    Thank you so much for the help. I am also a C newbie. I did the program on Windows but my professor wants it to work on Linux as well. She said it doesn't compile on Linux. I'm still in the process of installing Linux right now the reason why I still can't test it myself. Thank you for giving me the queue on where to start so I can try editing now.

  6. #6
    Banned
    Join Date
    Aug 2010
    Location
    Ontario Canada
    Posts
    9,547
    Linux may be more strict than Windows... but C is C...

    The name conflicts are warnings that you're clobbering the names of library functions. The solution for these would be to use a different name CurTime or such.

    The variable "particulars" appears to be particularly problematic, so you need to figure out where and how to fix that. Looking at your code I see it's a struct. You have declared the struct but never created an instance of the struct...

    Code:
    /*structure definition*/
    struct tparticulars {
      char *entry;
      int cost;
      char *period;
    };
    tparticulars particulars;
    
    --OR--
    
    /*structure definition*/
    struct tparticulars {
      char *entry;
      int cost;
      char *period;
    } particulars;


    Most of the other errors look like syntax or undeclared variables (possibly resulting from syntax errors) I'd say your first pass at this would be to work out each error in turn and get the compiler happy...

    To be honest, I'm surprised it compiled on Windows. You may want to check the reporting level of that compiler... It looks like you would have the same errors but for some reason it didn't report them. (Unless you're susing some massively braindead compiler...)

  7. #7
    Registered User
    Join Date
    Oct 2010
    Posts
    4
    Honestly, I did not encounter any error on Windows. I am using Code Blocks 10.5 with MinGW..

    I will try to make the Linux compiler happy..

  8. #8
    Banned
    Join Date
    Aug 2010
    Location
    Ontario Canada
    Posts
    9,547
    Quote Originally Posted by series View Post
    Honestly, I did not encounter any error on Windows. I am using Code Blocks 10.5 with MinGW..

    I will try to make the Linux compiler happy..
    Very odd... because the problem with "particulars" not being defined should have stopped *any* C compiler no matter what OS it was on...

    Oh well, best of luck with the rest of it....

  9. #9
    Registered User
    Join Date
    Aug 2010
    Posts
    231
    Rename your functions
    void remove();
    void time();
    , there are standard-lib functions with the same name.
    Also do it for
    void access();
    void login();

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Wireless Network Linux & C Testbed
    By james457 in forum Networking/Device Communication
    Replies: 3
    Last Post: 06-11-2009, 11:03 AM
  2. Linux
    By cerin in forum A Brief History of Cprogramming.com
    Replies: 16
    Last Post: 02-10-2005, 09:41 PM
  3. installing linux for the first time
    By Micko in forum Tech Board
    Replies: 9
    Last Post: 12-06-2004, 05:15 AM
  4. Linux for Windows!
    By Strut in forum Linux Programming
    Replies: 2
    Last Post: 12-25-2002, 11:36 AM