#include <Wtypes.h>
#include <stdio.h>
#include <direct.h>
#include "pubscc.h"
struct context {
FILE *debuglog;
char *root;
char *local;
SCC_outproc outproc;
};
#include <windows.h>
SCC_return
malloc_error (struct context *context)
{
(*context->outproc) ("Out of memory\n", SCC_outproc_error);
return SCC_return_non_specific_error;
}
LONG
SccGetVersion (void)
{
return 0x10001;
}
SCC_return
SccInitialize (void **contextp, HWND window, LPSTR caller, LPSTR name,
LPLONG caps, LPSTR path, LPDWORD co_comment_len,
LPDWORD comment_len)
{
struct context *context;
FILE *fp;
fp = fopen ("d:\\debug.scc", "w");
if (fp == NULL)
abort ();
context = malloc (sizeof (struct context));
if (context == NULL)
{
fprintf (fp, "Out of memory\n");
fclose (fp);
abort ();
}
context->debuglog = fp;
context->root = NULL;
*contextp = context;
fprintf (fp, "Made it into SccInitialize!\n");
*caps = (SCC_cap_GetProjPath
| SCC_cap_AddFromScc
| SCC_cap_want_outproc);
strncpy (path, "CVS Project:", SCC_max_init_path);
fprintf (fp, "Caller name is %s\n", caller);
strncpy (name, "CVS", SCC_max_name);
*co_comment_len = 8192;
*comment_len = 8192;
fflush (fp);
return SCC_return_success;
}
SCC_return
SccUninitialize (void *context_arg)
{
struct context *context = (struct context *)context_arg;
if (ferror (context->debuglog))
if (fclose (context->debuglog) == EOF)
;
free (context);
return SCC_return_success;
}
SCC_return
SccOpenProject (void *context_arg, HWND window, LPSTR user,
LPSTR project, LPSTR local_proj, LPSTR aux_proj,
LPSTR comment, SCC_outproc outproc,
LONG flags)
{
struct context *context = (struct context *)context_arg;
if (aux_proj[0] == '\0')
return SCC_return_unknown_project;
context->root = malloc (strlen (aux_proj) + 5);
if (context->root == NULL)
return SCC_return_non_specific_error;
strcpy (context->root, aux_proj);
if (outproc == 0)
{
fprintf (context->debuglog, "Uh oh. outproc is a null pointer\n");
context->root = NULL;
fflush (context->debuglog);
return SCC_return_non_specific_error;
}
context->outproc = outproc;
fprintf (context->debuglog, "SccOpenProject (aux_proj=%s)\n", aux_proj);
context->local = malloc (strlen (local_proj) + 5);
if (context->local == NULL)
return malloc_error (context);
strcpy (context->local, local_proj);
fflush (context->debuglog);
return SCC_return_success;
}
SCC_return
SccCloseProject (void *context_arg)
{
struct context *context = (struct context *)context_arg;
fprintf (context->debuglog, "SccCloseProject\n");
fflush (context->debuglog);
if (context->root != NULL)
free (context->root);
context->root = NULL;
return SCC_return_success;
}
SCC_return
SccGet (void *context_arg, HWND window, LONG num_files,
LPSTR *file_names,
LONG options,
void *prov_options)
{
struct context *context = (struct context *)context_arg;
int i;
char *fname;
fprintf (context->debuglog, "SccGet: %d; files:", num_files);
#if 1
for (i = 0; i < num_files; ++i)
{
fprintf (context->debuglog, "%s ", file_names[i]);
}
#endif
fprintf (context->debuglog, "\n");
if (options & SCC_cmdopt_dir)
fprintf (context->debuglog, " Get all\n");
if (options & SCC_cmdopt_recurse)
fprintf (context->debuglog, " recurse\n");
for (i = 0; i < num_files; ++i)
{
fname = file_names[i];
fprintf (context->debuglog, "%s ", fname);
}
fprintf (context->debuglog, "\nExiting SccGet\n");
fflush (context->debuglog);
return SCC_return_success;
}
SCC_return
SccCheckout (void *context_arg, HWND window, LONG num_files,
LPSTR *file_names, LPSTR comment,
LONG options,
void *prov_options)
{
struct context *context = (struct context *)context_arg;
fprintf (context->debuglog, "SccCheckout num_files=%ld\n", num_files);
fflush (context->debuglog);
return SCC_return_non_scc_file;
}
SCC_return
SccCheckin (void *context_arg, HWND window, LONG num_files,
LPSTR *file_names, LPSTR comment,
LONG options,
void *prov_options)
{
return SCC_return_not_supported;
}
SCC_return
SccUncheckout (void *context_arg, HWND window, LONG num_files,
LPSTR *file_names,
LONG options,
void *prov_options)
{
return SCC_return_not_supported;
}
SCC_return
SccAdd (void *context_arg, HWND window, LONG num_files,
LPSTR *file_names, LPSTR comment,
LONG *options,
void *prov_options)
{
return SCC_return_not_supported;
}
SCC_return
SccRemove (void *context_arg, HWND window, LONG num_files,
LPSTR *file_names, LPSTR comment,
LONG options,
void *prov_options)
{
return SCC_return_not_supported;
}
SCC_return
SccRename (void *context_arg, HWND window, LPSTR old_name,
LPSTR new_name)
{
return SCC_return_not_supported;
}
SCC_return
SccDiff (void *context_arg, HWND window, LPSTR file_name,
LONG options,
void *prov_options)
{
return SCC_return_not_supported;
}
SCC_return
SccHistory (void *context_arg, HWND window, LONG num_files,
LPSTR *file_names,
LONG options,
void *prov_options)
{
return SCC_return_not_supported;
}
SCC_return
SccProperties (void *context_arg, HWND window, LPSTR file_name)
{
return SCC_return_not_supported;
}
SCC_return
SccRunScc (void *context_arg, HWND window, LONG num_files,
LPSTR *file_names)
{
return SCC_return_not_supported;
}
SCC_return
SccGetCommandOptions (void *context_arg, HWND window,
enum SCC_command command,
void **prov_optionsp)
{
return SCC_return_not_supported;
}
SCC_return
SccPopulateList (void *context_arg, enum SCC_command command,
LONG num_files,
LPSTR *file_names, SCC_popul_proc populate,
void *callerdat,
LONG options)
{
return SCC_return_success;
}
SCC_return
SccQueryInfo (void *context_arg, LONG num_files, LPSTR *file_names,
LPLONG status)
{
return SCC_return_not_supported;
}
SCC_return
SccGetEvents (void *context_arg, LPSTR file_name,
LPLONG status,
LPLONG events_remaining)
{
return SCC_return_success;
}
SCC_return
SccGetProjPath (void *context_arg, HWND window, LPSTR user,
LPSTR proj_name, LPSTR local_proj, LPSTR aux_proj,
BOOL allow_change, BOOL *new)
{
struct context *context = (struct context *)context_arg;
fprintf (context->debuglog, "SccGetProjPath called\n");
strncpy (proj_name, "zwork", SCC_max_path);
strncpy (aux_proj, ":server:harvey:/home/kingdon/zwork/cvsroot",
SCC_max_path);
if (local_proj[0] == '\0' && allow_change)
strncpy (local_proj, "d:\\sccwork", SCC_max_path);
if (_chdir (local_proj) < 0)
fprintf (context->debuglog, "Error in chdir: %s", strerror (errno));
if (*new)
*new = 1;
fflush (context->debuglog);
return SCC_return_success;
}
SCC_return
SccAddFromScc (void *context_arg, HWND window, LONG *files,
char ***file_names)
{
struct context *context = (struct context *)context_arg;
#define NUM_FILES 2
if (files == NULL)
{
char **p;
for (p = *file_names; *p != NULL; ++p)
{
fprintf (context->debuglog, "Freeing %s\n", *p);
free (*p);
}
}
else
{
*file_names = malloc ((NUM_FILES + 1) * sizeof (char **));
if (*file_names == NULL)
return malloc_error (context);
(*file_names)[0] = malloc (80);
if ((*file_names)[0] == NULL)
return malloc_error (context);
strcpy ((*file_names)[0], "foo.c");
(*file_names)[1] = malloc (80);
if ((*file_names)[1] == NULL)
return malloc_error (context);
strcpy ((*file_names)[1], "bar.c");
(*file_names)[2] = NULL;
*files = 2;
}
fprintf (context->debuglog, "Success in SccAddFromScc\n");
fflush (context->debuglog);
return SCC_return_success;
}
SCC_return
SccSetOption (void *context_arg,
LONG option,
LONG val)
{
return SCC_return_success;
}