static void __fastcall__ CheckError (const char* S, unsigned char Error) { if (Error != MOUSE_ERR_OK) { cprintf ("\n%s: %s(%u)\r\n", S, mouse_geterrormsg (Error), Error); /* Wait for a key-press, so that some platforms can show the error ** message before they remove the current screen. */ if (doesclrscrafterexit ()) { cgetc (); } exit (EXIT_FAILURE); } }
void main(void) { uint8_t eth_init = ETH_INIT_DEFAULT; uint32_t server; struct timespec time; strncpy(_tz.tzname, TIMEZONE_CODE, sizeof(_tz.tzname) - 1); _tz.timezone = TIMEZONE_SECS; if (doesclrscrafterexit()) { atexit(confirm_exit); } #ifdef __APPLE2__ { int file; printf("\nSetting slot "); file = open("ethernet.slot", O_RDONLY); if (file != -1) { read(file, ð_init, 1); close(file); eth_init &= ~'0'; } printf("- %d\n", eth_init); } #endif printf("\nInitializing "); if (ip65_init(eth_init)) { error_exit(); } printf("- Ok\n\nObtaining IP address "); if (dhcp_init()) { error_exit(); } printf("- Ok\n\nResolving %s ", NTP_SERVER); server = dns_resolve(NTP_SERVER); if (!server) { error_exit(); } printf("- Ok\n\nGetting %s ", _tz.tzname); time.tv_sec = sntp_get_time(server); if (!time.tv_sec) { error_exit(); } // Convert time from seconds since 1900 to // seconds since 1970 according to RFC 868 time.tv_sec -= 2208988800UL; printf("- %s", ctime(&time.tv_sec)); time.tv_nsec = 0; clock_settime(CLOCK_REALTIME, &time); }
int main(void) { printf("default device: %s\n", _defdev); if (doesclrscrafterexit()) cgetc(); return 0; }
int main (int argc, const char* argv[]) { unsigned char SourceId; unsigned char TargetId; dhandle_t Source = NULL; dhandle_t Target = NULL; unsigned int SectSize; unsigned int SectCount; char* Buffer; unsigned int Sector; unsigned int ChunkCount; unsigned int ChunkOffset = 0; clrscr (); screensize (&ScreenX, &ScreenY); /* Allow user to read exit messages */ if (doesclrscrafterexit ()) { atexit ((void (*)) cgetc); } cputs ("Floppy Disk Copy\r\n"); chline (16); cputs ("\r\n"); /* Get source and target drive id (which may very well be identical) */ switch (argc) { case 1: SourceId = AskForDrive ("Source"); TargetId = AskForDrive ("Target"); cputs ("\r\n"); break; case 2: SourceId = TargetId = atoi (argv[1]); break; case 3: SourceId = atoi (argv[1]); TargetId = atoi (argv[2]); break; default: cprintf ("\r\nToo many arguments\r\n"); return EXIT_FAILURE; } cputs ("\r\n"); do { /* Check for single drive copy or inital iteration */ if (SourceId == TargetId || Source == NULL) { AskForDisk ("Source", SourceId); } /* Check for initial iteration */ if (Source == NULL) { /* Open source drive */ Source = dio_open (SourceId); if (Source == NULL) { cprintf ("\r\n\nError %d on opening Drive %d\r\n", (int) _oserror, SourceId); return EXIT_FAILURE; } SectSize = dio_query_sectsize (Source); SectCount = dio_query_sectcount (Source); /* Allocate buffer */ Buffer = AllocBuffer (SectSize, SectCount, &ChunkCount); if (Buffer == NULL) { cputs ("\r\n\nError on allocating Buffer\r\n"); return EXIT_FAILURE; } } ClearLine (); /* Read one chunk of sectors into buffer */ for (Sector = ChunkOffset; Sector < SectCount && (Sector - ChunkOffset) < ChunkCount; ++Sector) { cprintf ("\rReading Sector %d of %d", Sector + 1, SectCount); /* Read one sector */ if (dio_read (Source, Sector, Buffer + (Sector - ChunkOffset) * SectSize) != 0) { cprintf ("\r\n\nError %d on reading from Drive %d\r\n", (int) _oserror, SourceId); return EXIT_FAILURE; } } /* Check for single drive copy or inital iteration */ if (TargetId == SourceId || Target == NULL) { AskForDisk ("Target", TargetId); } /* Open target drive on initial iteration */ if (Target == NULL) { Target = dio_open (TargetId); if (Target == NULL) { cprintf ("\r\n\nError %d on opening Drive %d\r\n", (int) _oserror, TargetId); return EXIT_FAILURE; } /* Check for compatible drives */ if (dio_query_sectsize (Target) != SectSize || dio_query_sectcount (Target) != SectCount) { cputs ("\r\n\nFormat mismatch between Drives\r\n"); return EXIT_FAILURE; } } ClearLine (); /* Write one chunk of sectors from buffer */ for (Sector = ChunkOffset; Sector < SectCount && (Sector - ChunkOffset) < ChunkCount; ++Sector) { cprintf ("\rWriting Sector %d of %d", Sector + 1, SectCount); /* Write one sector */ if (dio_write (Target, Sector, Buffer + (Sector - ChunkOffset) * SectSize) != 0) { cprintf ("\r\n\nError %d on writing to Drive %d\r\n", (int) _oserror, TargetId); return EXIT_FAILURE; } } /* Advance to next chunk */ ChunkOffset += ChunkCount; } while (Sector < SectCount); ClearLine (); cprintf ("\rSuccessfully copied %d Sectors\r\n", SectCount); free (Buffer); dio_close (Source); dio_close (Target); return EXIT_SUCCESS; }
int main(int argc, char **argv) { char *filename, *x; char buf[20]; FILE *file; unsigned char *buffer; size_t filen, buflen = 32768l + 1; struct regs regs; struct __iocb *iocb = findfreeiocb(); int iocb_num; /* if DOS will automatically clear the screen after the program exits, wait for a keypress... */ if (doesclrscrafterexit()) atexit((void (*)(void))cgetc); if (! iocb) { fprintf(stderr, "couldn't find a free iocb\n"); return 1; } iocb_num = (iocb - &IOCB) * 16; if (verbose) printf("using iocb index $%02X ($%04X)\n", iocb_num, iocb); if (argc < 2) { printf("\nfilename: "); x = fgets(buf, 19, stdin); printf("\n"); if (! x) { printf("empty filename, exiting...\n"); return 1; } if (*x && *(x + strlen(x) - 1) == '\n') *(x + strlen(x) - 1) = 0; if (! strlen(x)) { /* empty filename */ printf("empty filename, exiting...\n"); return 1; } filename = x; } else { filename = *(argv+1); } /* allocate buffer */ buffer = malloc(buflen); if (! buffer) { buflen = _heapmaxavail(); /* get as much as we can */ buffer = malloc(buflen); if (! buffer) { fprintf(stderr, "cannot alloc %ld bytes -- aborting...\n", (long)buflen); return 1; } } if (verbose) printf("buffer size: %ld bytes\n", (long)buflen); /* open file */ file = fopen(filename, "rb"); if (! file) { free(buffer); fprintf(stderr, "cannot open '%s': %s\n", filename, strerror(errno)); return 1; } /* read file -- file length must be < 32K */ if (verbose) printf("reading input file...\n"); filen = fread(buffer, 1, buflen, file); if (! filen) { fprintf(stderr, "read error\n"); file_err: fclose(file); free(buffer); return 1; } if (filen > 32767l) { fprintf(stderr, "file is too large (must be < 32768)\n"); goto file_err; } if (filen == buflen) { /* we have a buffer < 32768 and the file fits into it (and is most probably larger) */ fprintf(stderr, "not enough memory\n"); goto file_err; } if (verbose) printf("file size: %ld bytes\n", (long)filen); /* close input file */ fclose(file); /* open cassette */ if (verbose) printf("opening cassette...\n"); iocb->buffer = C_dev; iocb->aux1 = 8; /* open for output */ iocb->aux2 = 128; /* short breaks and no stop between data blocks */ iocb->command = IOCB_OPEN; regs.x = iocb_num; regs.pc = 0xe456; /* CIOV */ _sys(®s); if (regs.y != 1) { fprintf(stderr, "CIO call to open cassette returned %d\n", regs.y); free(buffer); return 1; } /* write file */ if (verbose) printf("writing to cassette...\n"); iocb->buffer = buffer; iocb->buflen = filen; iocb->command = IOCB_PUTCHR; regs.x = iocb_num; regs.pc = 0xe456; /* CIOV */ _sys(®s); if (regs.y != 1) { fprintf(stderr, "CIO call to write file returned %d\n", regs.y); free(buffer); iocb->command = IOCB_CLOSE; regs.x = iocb_num; regs.pc = 0xe456; /* CIOV */ _sys(®s); return 1; } /* free buffer */ free(buffer); /* close cassette */ iocb->command = IOCB_CLOSE; regs.x = iocb_num; regs.pc = 0xe456; /* CIOV */ _sys(®s); if (regs.y != 1) { fprintf(stderr, "CIO call to close cassette returned %d\n", regs.y); return 1; } /* all is fine */ printf("success\n"); return 0; }