#include #include #include "execdef.h" #include "intuidef.h" #include "windowinfo.h" #include "loadrecord.h" #include "ScrollWindow.proto" #include #include #include "NewScale.proto" #include "FindMaxDataPoint.proto" #include "DrawScaleReferenceLines.proto" #include "RedrawWindow.proto" void ScrollWindow(window) Window *window; { WindowInfo *window_info; short scroll_distance; Bool new_scale; LoadRecord *record; window_info = WINDOWINFO(window); new_scale = FALSE; scroll_distance = (window_info->width + 1) >> 1; for (record = (LoadRecord *)window_info->loadrecords.mlh_Head; record->node.mln_Succ; record = (LoadRecord *)record->node.mln_Succ) { /* Scroll the data. */ CopyMemQuick(record->start_data + scroll_distance, record->start_data, (window_info->width - scroll_distance) * sizeof(LoadDataValue)); record->next_data -= scroll_distance; record->max_data -= scroll_distance; if (record->max_data < record->start_data) FindMaxDataPoint(record); if (record->scale) new_scale = NewScale(window_info, record, *record->max_data) || new_scale; } /* Scroll the window. */ if (new_scale) RedrawWindow(window); else { ScrollRaster(window->RPort, (short)((window_info->width + 1) >> 1), (short)0, window_info->leftedge, window_info->topedge, window_info->rightedge, window_info->bottomedge); for (record = (LoadRecord *)window_info->loadrecords.mlh_Head; record->node.mln_Succ; record = (LoadRecord *)record->node.mln_Succ) if (record->scale) DrawScaleReferenceLines(window, record, (short)(window_info->width - scroll_distance)); } }