--- /dev/null
+/*
+ * URLSimpleDownload test, X version.
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include <Carbon/Carbon.h>
+#include <time.h>
+#include <string.h>
+#include <ctype.h>
+
+#define DEFAULT_HOST "gss.cdnow.com"
+#define DEFAULT_PATH "/"
+#define DEFAULT_SSL 0 /* 0 --> http, 1 --> https */
+
+#define COMP_LENGTH 80
+#define URL_LENGTH 256
+
+
+/* shouldn't be needed if no kURLDisplayProgressFlag */
+static void Initialize()
+{
+ //InitGraf(&qd.thePort);
+ //InitWindows();
+ //InitCursor();
+ //InitMenus();
+ //InitFonts();
+}
+
+
+
+#if 0
+static time_t lastTime = (time_t)0;
+#define TIME_INTERVAL 3
+/*
+ * Just keep UI alive in case we want to quit the app
+ */
+static pascal OSStatus eventCallback(
+ void* userContext,
+ EventRecord *event)
+{
+ time_t thisTime = time(0);
+
+ if((thisTime - lastTime) >= TIME_INTERVAL) {
+ printf("."); fflush(stdout);
+ lastTime = thisTime;
+ }
+ return noErr;
+}
+#endif
+
+/*
+ * Assuming *h contains ASCII text, dump it 'til the user cries uncle.
+ */
+#define BYTES_PER_SPURT 128
+
+static void
+dumpText(Handle h)
+{
+ Size totalBytes;
+ Size bytesWritten = 0;
+ Ptr p;
+ Size thisWrite;
+ Size i;
+ char resp;
+ char c;
+ char lastWasHex = 0;
+
+ HLock(h);
+ totalBytes = GetHandleSize(h);
+ if(totalBytes == 0) {
+ printf("*** Zero bytes obtained\n");
+ return;
+ }
+ p = *h;
+ while(bytesWritten < totalBytes) {
+ thisWrite = totalBytes - bytesWritten;
+ if(thisWrite > BYTES_PER_SPURT) {
+ thisWrite = BYTES_PER_SPURT;
+ }
+ for(i=0; i<thisWrite; i++) {
+ c = *p++;
+ if(isprint(c)) {
+ printf("%c", c);
+ lastWasHex = 0;
+ }
+ else {
+ if(!lastWasHex) {
+ printf("|");
+ }
+ printf("%02X|", (unsigned)c & 0xff);
+ lastWasHex = 1;
+ }
+ }
+ totalBytes += thisWrite;
+ if(totalBytes == bytesWritten) {
+ printf("\n");
+ break;
+ }
+ printf("\nMore (y/anything)? ");
+ fpurge(stdin);
+ resp = getchar();
+ if(resp != 'y') {
+ break;
+ }
+ }
+ HUnlock(h);
+ return;
+}
+
+int main()
+{
+ Handle h;
+ char hostName[COMP_LENGTH];
+ char path[COMP_LENGTH];
+ char url[URL_LENGTH];
+ char scheme[10]; /* http, https */
+ char isSsl = DEFAULT_SSL;
+ char resp;
+ OSStatus ortn;
+
+ Initialize();
+ strcpy(hostName, DEFAULT_HOST);
+ strcpy(path, DEFAULT_PATH);
+ if(isSsl) {
+ strcpy(scheme, "https");
+ }
+ else {
+ strcpy(scheme, "http");
+ }
+ while(1) {
+ printf(" h Set Host (current = %s)\n", hostName);
+ printf(" p Set path (current = %s)\n", path);
+ printf(" s Set SSL true (current = %d)\n", isSsl);
+ printf(" S Set SSL false\n");
+ printf(" g Get the URL\n");
+ printf(" q quit\n");
+ printf("\nEnter command: ");
+ fpurge(stdin);
+ resp = getchar();
+ switch(resp) {
+ case 'h':
+ printf("Enter host name: ");
+ scanf("%s", hostName);
+ break;
+ case 'p':
+ printf("Enter path: ");
+ scanf("%s", path);
+ break;
+ case 's':
+ isSsl = 1;
+ strcpy(scheme, "https");
+ break;
+ case 'S':
+ isSsl = 0;
+ strcpy(scheme, "http");
+ break;
+ case 'g':
+ sprintf(url, "%s://%s%s", scheme, hostName, path);
+ printf("...url = %s\n", url);
+ h = NewHandle(0); /* what the spec says */
+ ortn = URLSimpleDownload(url,
+ NULL,
+ h,
+ 0, //kURLDisplayProgressFlag, // URLOpenFlags
+ NULL, //eventCallback,
+ NULL); // userContext
+ if(ortn) {
+ printf("URLSimpleDownload returned %d\n", (int)ortn);
+ }
+ else {
+ dumpText(h);
+ }
+ DisposeHandle(h);
+ break;
+ case 'q':
+ goto done;
+ default:
+ printf("Huh?\n");
+ continue;
+ }
+
+ }
+done:
+ return 0;
+}